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

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

int main() {
 std::array<int,2> slots{}; std::size_t head=0,tail=0,count=0;
 auto push=[&](int v){require(count<2);slots[tail]=v;tail=(tail+1)%2;++count;};
 auto pop=[&](){require(count>0);int v=slots[head];head=(head+1)%2;--count;return v;};
 push(10);push(20);const int a=pop();push(30);const int b=pop(),c=pop();
 require(a==10 && b==20 && c==30 && count==0);
 std::cout<<"order="<<a<<' '<<b<<' '<<c<<'\n';
}

