// #include using namespace std; #define fi first #define se second #define all(x) x.begin(), x.end() #define lch (o << 1) #define rch (o << 1 | 1) typedef double db; typedef long long ll; typedef unsigned int ui; typedef pair pint; typedef tuple tint; const int N = 100 + 5; const int INF = 0x3f3f3f3f; const ll INF_LL = 0x3f3f3f3f3f3f3f3f; const int dx[] = {-1, 0, 1, 0, 2}; const int dy[] = {0, 1, 0, -1, 0}; int vst[N][N][2]; int f[N][N][2], nxt[N][N][2]; // 0: first, 1: second bool OK(int x, int y) { return x >= 0 && x <= 9 && y >= 0 && y <= 9; } void BFS() { memset(f, 0x3f, sizeof(f)); memset(nxt, -1, sizeof(nxt)); for (int i = 0; i < 100; i++) for (int op = 0; op <= 1; op++) f[i][i][op] = 0; for (int t = 1; t < 100; t++) { for (int op = 0; op <= 1; op++) for (int u = 0; u < 100; u++) for (int v = 0; v < 100; v++) { if (f[u][v][op] != INF) continue; int minf = INF, minid = -1; int maxf = -INF, maxid = -1; for (int d = 0; d < 5; d++) { int nx = u / 10 + dx[d]; int ny = u % 10 + dy[d]; if (!OK(nx, ny)) continue; // special judge 79 -> 99 if (d == 4 && u != 79) continue; int nu = nx * 10 + ny; int tmpf = f[v][nu][op ^ 1]; if (tmpf < minf) minf = tmpf, minid = nu; if (tmpf > maxf) maxf = tmpf, maxid = nu; } if (op == 0 && minf != INF) { f[u][v][op] = minf + 1; nxt[u][v][op] = minid; } if (op == 1 && maxf != -INF && maxf != INF) { f[u][v][op] = maxf + 1; nxt[u][v][op] = maxid; } } } } int GetPow(int x, int d) { int ret = 0; while (x % d == 0) { ret++; x /= d; } return ret; } int main() { ios::sync_with_stdio(0); BFS(); int u, v; cin >> u >> v; int ux = GetPow(u, 2), uy = GetPow(u, 5); int vx = GetPow(v, 2), vy = GetPow(v, 5); u = ux * 10 + uy; v = vx * 10 + vy; while (u != v) { u = nxt[u][v][0]; cout << int(pow(2, u / 10) * pow(5, u % 10)) << endl; cout << flush; if (u == v) break; cin >> v; vx = GetPow(v, 2), vy = GetPow(v, 5); v = vx * 10 + vy; } return 0; }