#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define FOR(i,a,b) for (int i = (a); i < (b); ++i) #define FOR2(i,a,b) for (int i = (a); i > (b); ++i) #define DEBUG(x) cout << '>' << #x << ':' << x << endl; inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; } const int INF = 1<<29; typedef long long ll; ////////////////////////////////////////////////////////////////////////////// inline int col(int x) { if (x == 1) return x; if (x&1) return 3*x+1; else return x>>1; } int main() { while (1) { int a, b, A, B; scanf("%d%d", &a, &b); if (!a && !b) break; A = a; B = b; int steps1, steps2, res; map m1, m2; int steps = 0; bool ok1 = false, ok2 = false; while (1) { if (m2.find(a) != m2.end()) { steps1 = steps; steps2 = m2[a]; res = a; break; } if (m1.find(b) != m1.end()) { steps1 = m1[b]; steps2 = steps; res = b; break; } if (a > 1 || !ok1) { ok1 = true; m1[a] = steps; a = col(a); } if (b > 1 || !ok2) { ok2 = true; m2[b] = steps; b = col(b); } ++steps; } printf("%d needs %d steps, %d needs %d steps, they meet at %d\n", A, steps1, B, steps2, res); } return 0; }