// Original CPU teaching model; not a device simulator or benchmark.
#include <iostream>
#include <stdexcept>

void require(bool ok) { if (!ok) throw std::runtime_error("model check failed"); }

struct Life{int begin,end;};
bool overlaps(Life a,Life b){return a.begin<b.end && b.begin<a.end;}
int main() {
 const Life a{0,2},b{2,4},c{1,3};
 const bool reuse=!overlaps(a,b), separate=overlaps(a,c)&&overlaps(b,c);
 require(reuse && separate);
 std::cout<<"A_B_reuse="<<reuse<<" C_separate="<<separate<<" slots=2\n";
}

