#include<vector>
#include<iostream>
using namespace std;
int c1=0;
int c2=0;
int tarai1(int a,int b,int c)
{
int x,y,z;
c1++;
if(a<=b)return b;
x=tarai1(a-1,b,c);
y=tarai1(b-1,c,a);
z=tarai1(c-1,a,b);
return tarai1(x,y,z);
}
class Stack : public vector<int>
{
public:
int pop()
{
int v=back();
pop_back();
return v;
}
};
int tarai2(int a,int b,int c)
{
Stack A,B,C;
Stack PC;
Stack RET;
int pc;
int ret;
pc=0;
while(true)
{
switch(pc)
{
case 0:
c2++;
if(a<=b)
{
RET.push_back(b);
pc = 6;
continue;
}
else
{
pc=1;
continue;
}
case 1:
A.push_back(a);
B.push_back(b);
C.push_back(c);
PC.push_back(2);
a=A.back()-1;
b=B.back();
c=C.back();
pc=0;
continue;
case 2:
a=B.back()-1;
b=C.back();
c=A.back();
PC.push_back(3);
pc=0;
continue;
case 3:
a=C.back()-1;
b=A.back();
c=B.back();
PC.push_back(4);
pc=0;
continue;
case 4:
c=RET.pop();
b=RET.pop();
a=RET.pop();
A.pop();
B.pop();
C.pop();
pc=0;
continue;
case 6:
if(PC.empty())
{
return RET.back();
}
pc=PC.pop();
continue;
}
}
}
int main()
{
int x,y;
bool OK=true;
for(int i=0;i<10;++i)
{
for(int j=0;j<10;++j)
{
for(int k=0;k<10;++k)
{
c1=0;
c2=0;
x=tarai1(i,j,k);
y=tarai2(i,j,k);
if(!(c1==c2 && x==y))
{
OK=false;
cout<<"NG "<<x<<" "<<y<<" "<<c1<<" "<<c2<<endl;
}
}
}
}
if(OK)
{
cout<<"OK"<<endl;
}
}
I2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxpb3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgYzE9MDsKaW50IGMyPTA7CgppbnQgdGFyYWkxKGludCBhLGludCBiLGludCBjKQp7CglpbnQgeCx5LHo7CgljMSsrOwoJaWYoYTw9YilyZXR1cm4gYjsKCXg9dGFyYWkxKGEtMSxiLGMpOwoJeT10YXJhaTEoYi0xLGMsYSk7Cgl6PXRhcmFpMShjLTEsYSxiKTsKCXJldHVybiB0YXJhaTEoeCx5LHopOwp9CgpjbGFzcyBTdGFjayA6IHB1YmxpYyB2ZWN0b3I8aW50Pgp7CnB1YmxpYzoKCWludCBwb3AoKQoJewoJCWludCB2PWJhY2soKTsKCQlwb3BfYmFjaygpOwoJCXJldHVybiB2OwoJfQp9OwoKaW50IHRhcmFpMihpbnQgYSxpbnQgYixpbnQgYykKewoJU3RhY2sgQSxCLEM7CglTdGFjayBQQzsKCVN0YWNrIFJFVDsKCWludCBwYzsKCWludCByZXQ7CglwYz0wOwoJCgl3aGlsZSh0cnVlKQoJewoJCXN3aXRjaChwYykKCQl7CgkJY2FzZSAwOgoJCQljMisrOwoJCQlpZihhPD1iKQoJCQl7CgkJCQlSRVQucHVzaF9iYWNrKGIpOwoJCQkJcGMgID0gNjsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJcGM9MTsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJY2FzZSAxOgoJCQlBLnB1c2hfYmFjayhhKTsKCQkJQi5wdXNoX2JhY2soYik7CgkJCUMucHVzaF9iYWNrKGMpOwoJCQlQQy5wdXNoX2JhY2soMik7CgkJCWE9QS5iYWNrKCktMTsKCQkJYj1CLmJhY2soKTsKCQkJYz1DLmJhY2soKTsKCQkJcGM9MDsKCQkJY29udGludWU7CgkJY2FzZSAyOgoJCQlhPUIuYmFjaygpLTE7CgkJCWI9Qy5iYWNrKCk7CgkJCWM9QS5iYWNrKCk7CgkJCVBDLnB1c2hfYmFjaygzKTsKCQkJcGM9MDsKCQkJY29udGludWU7CgkJY2FzZSAzOgoJCQlhPUMuYmFjaygpLTE7CgkJCWI9QS5iYWNrKCk7CgkJCWM9Qi5iYWNrKCk7CgkJCVBDLnB1c2hfYmFjayg0KTsKCQkJcGM9MDsKCQkJY29udGludWU7CgkJY2FzZSA0OgoJCQljPVJFVC5wb3AoKTsKCQkJYj1SRVQucG9wKCk7CgkJCWE9UkVULnBvcCgpOwoJCQlBLnBvcCgpOwoJCQlCLnBvcCgpOwoJCQlDLnBvcCgpOwoJCQlwYz0wOwoJCQljb250aW51ZTsKCQljYXNlIDY6CgkJCWlmKFBDLmVtcHR5KCkpCgkJCXsKCQkJCXJldHVybiBSRVQuYmFjaygpOwoJCQl9CgkJCXBjPVBDLnBvcCgpOwoJCQljb250aW51ZTsKCQl9Cgl9Cn0KCgppbnQgbWFpbigpCnsKCWludCB4LHk7Cglib29sIE9LPXRydWU7Cglmb3IoaW50IGk9MDtpPDEwOysraSkKCXsKCQlmb3IoaW50IGo9MDtqPDEwOysraikKCQl7CgkJCWZvcihpbnQgaz0wO2s8MTA7KytrKQoJCQl7CgkJCQljMT0wOwoJCQkJYzI9MDsKCQkJCXg9dGFyYWkxKGksaixrKTsKCQkJCXk9dGFyYWkyKGksaixrKTsKCQkJCWlmKCEoYzE9PWMyICYmIHg9PXkpKQoJCQkJewoJCQkJCU9LPWZhbHNlOwoJCQkJCWNvdXQ8PCJORyAiPDx4PDwiICI8PHk8PCIgIjw8YzE8PCIgIjw8YzI8PGVuZGw7CgkJCQl9CgkJCX0KCQl9Cgl9CglpZihPSykKCXsKCQljb3V0PDwiT0siPDxlbmRsOwoJfQp9