#include #include #include #define MOD(a,b) (((a) % (b) + (b)) % (b)) int main(void) { char buf[4096]; int program[32]; // List of instructions int output[32]; int i,j,k,k2,l, n=0; // Index and number of instructions long long unsigned a=0, b=0, c=0; // Registers int b_init, c_init; int op, combo; // Operand and combo value long long unsigned m; scanf("Register A: %d\n", &b_init); scanf("Register B: %d\n", &b_init); scanf("Register C: %d\n", &c_init); fgets(buf, sizeof buf, stdin); // Skip line fgets(buf, sizeof buf, stdin); i=0; while (buf[i] != ' ') i++; for (i++; buf[i]; i+=2) { program[n++] = atoi(buf+i); } m = 40107153110; l = 0; while (1) { a = m + l; b = b_init; c = c_init; j=0; for (i=0; i n) { printf("1\n"); goto next; } for (k=n-1, k2=j-1; k2>=0; k2--,k--) { /* printf("%d %d\n", program[k], output[k2]); */ if (program[k] != output[k2]) { goto next; } } printf("found %llu\n", m+l); m = (m+l) << 3; l = 0; goto found; if (k != 0) { goto next; } printf("%llu ", m); for (k=0; k>3) +1; continue; found: printf("FOUND "); for (k=0; k