#include #include #include long long a, b, as, bs; int main() { while(1) { long long counter = 1; scanf("%lld %lld", &as, &bs); long long aend = 0; long long bend = 0; a = as; b = bs; if (a == 0 && b == 0) break; if (a == b) { printf("%lld needs %d steps, %lld needs %d steps, they meet at %lld\n", as, 0, bs, 0, a); continue; } std::map mapA; std::map mapB; while (1) { //printf("*%lld*\n", a); if (!aend) { mapA[a] = counter; if (a % 2 == 0) a /= 2; else a = 3 * a + 1; } if (a == 1) aend = 1; if (!bend) { mapB[b] = counter; if (b % 2 == 0) b /= 2; else b = 3 * b + 1; } if (b == 1) bend = 1; if (mapA[b] != 0) { printf("%lld needs %lld steps, %lld needs %lld steps, they meet at %lld\n", as, mapA[b] - 1, bs, counter, b); break; } else if (mapB[a] != 0) { printf("%lld needs %lld steps, %lld needs %lld steps, they meet at %lld\n", as, counter, bs, mapB[a] - 1, a); break; } ++counter; } } }