#include <iostream>
using namespace std;
 
typedef int(*FuncType[8])(int);
bool a=false, b=false, c=false;
 
int A(int Current) {
   cout << "-----> FuncA" << endl;	 
   return 2;
}
 
int B(int Current) {
   cout << "-----> FuncB" << endl;	 
   c = true;  // тут типа управляем выходом из бесконечного цикла
   return 2;
}
 
int C(int Current) {
   cout << "-----> FuncC" << endl;	 
   return 6;
}
 
int D(int Current) {
   cout << "-----> FuncD" << endl;	 
   return 1;
}
 
int E(int Current) {
   cout << "-----> FuncE" << endl;	 
   return -1;
}
 
int JmpA(int Current) {
   cout << "JmpA" << endl;
   return (a) ? 0 : 6;
}
 
int JmpB(int Current) {
   cout << "JmpB" << endl;	 
   return (b) ? 1 : 7;
}
 
int JmpC(int Current) {
   cout << "JmpC" << endl;	 
   return (c) ? 4 : 3;
}
 
int main() {
	int StepNo = 5;
	FuncType Func = {A, B, C, D, E, JmpA, JmpB, JmpC};
	while((StepNo = (*Func[StepNo])(StepNo)) >= 0);
	return 0;
}
				I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCnR5cGVkZWYgaW50KCpGdW5jVHlwZVs4XSkoaW50KTsKYm9vbCBhPWZhbHNlLCBiPWZhbHNlLCBjPWZhbHNlOwogCmludCBBKGludCBDdXJyZW50KSB7CiAgIGNvdXQgPDwgIi0tLS0tPiBGdW5jQSIgPDwgZW5kbDsJIAogICByZXR1cm4gMjsKfQogCmludCBCKGludCBDdXJyZW50KSB7CiAgIGNvdXQgPDwgIi0tLS0tPiBGdW5jQiIgPDwgZW5kbDsJIAogICBjID0gdHJ1ZTsgIC8vINGC0YPRgiDRgtC40L/QsCDRg9C/0YDQsNCy0LvRj9C10Lwg0LLRi9GF0L7QtNC+0Lwg0LjQtyDQsdC10YHQutC+0L3QtdGH0L3QvtCz0L4g0YbQuNC60LvQsAogICByZXR1cm4gMjsKfQogCmludCBDKGludCBDdXJyZW50KSB7CiAgIGNvdXQgPDwgIi0tLS0tPiBGdW5jQyIgPDwgZW5kbDsJIAogICByZXR1cm4gNjsKfQogCmludCBEKGludCBDdXJyZW50KSB7CiAgIGNvdXQgPDwgIi0tLS0tPiBGdW5jRCIgPDwgZW5kbDsJIAogICByZXR1cm4gMTsKfQogCmludCBFKGludCBDdXJyZW50KSB7CiAgIGNvdXQgPDwgIi0tLS0tPiBGdW5jRSIgPDwgZW5kbDsJIAogICByZXR1cm4gLTE7Cn0KIAppbnQgSm1wQShpbnQgQ3VycmVudCkgewogICBjb3V0IDw8ICJKbXBBIiA8PCBlbmRsOwogICByZXR1cm4gKGEpID8gMCA6IDY7Cn0KIAppbnQgSm1wQihpbnQgQ3VycmVudCkgewogICBjb3V0IDw8ICJKbXBCIiA8PCBlbmRsOwkgCiAgIHJldHVybiAoYikgPyAxIDogNzsKfQogCmludCBKbXBDKGludCBDdXJyZW50KSB7CiAgIGNvdXQgPDwgIkptcEMiIDw8IGVuZGw7CSAKICAgcmV0dXJuIChjKSA/IDQgOiAzOwp9CiAKaW50IG1haW4oKSB7CglpbnQgU3RlcE5vID0gNTsKCUZ1bmNUeXBlIEZ1bmMgPSB7QSwgQiwgQywgRCwgRSwgSm1wQSwgSm1wQiwgSm1wQ307Cgl3aGlsZSgoU3RlcE5vID0gKCpGdW5jW1N0ZXBOb10pKFN0ZXBObykpID49IDApOwoJcmV0dXJuIDA7Cn0=