#include <iostream>
using namespace std;
long arr[10000];
long dp(int n)
{
if(n==2|| n==1) return 1;
if (n >= 10000) {
std::cout << n << " is really big\n";
return 1 + dp((n % 2 == 0) ? n / 2 : 3 * n + 1);
}
if(arr[n]) return arr[n];
if(n%2==0) return arr[n]=1+dp(n/2);
else if(n%2==1) return arr[n]=1+dp(3*n+1);
return arr[n];
}
int main() {
for (int n : {999, 907}) {
const long res = dp(n);
std::cout << "count for " << n << " is " << res << std::endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbG9uZyBhcnJbMTAwMDBdOwpsb25nIGRwKGludCBuKSAgCnsgCiAgICBpZihuPT0yfHwgbj09MSkgcmV0dXJuIDE7CiAgICAKICAgIGlmIChuID49IDEwMDAwKSB7CiAgICAJc3RkOjpjb3V0IDw8IG4gPDwgIiBpcyByZWFsbHkgYmlnXG4iOwogICAgCXJldHVybiAxICsgZHAoKG4gJSAyID09IDApID8gbiAvIDIgOiAzICogbiArIDEpOwogICAgfQogICAgCiAgICBpZihhcnJbbl0pIHJldHVybiBhcnJbbl07CgoKCiAgICBpZihuJTI9PTApIHJldHVybiBhcnJbbl09MStkcChuLzIpOwogICAgZWxzZSBpZihuJTI9PTEpIHJldHVybiBhcnJbbl09MStkcCgzKm4rMSk7CiAgICByZXR1cm4gYXJyW25dOwp9CgppbnQgbWFpbigpIHsKCQoJZm9yIChpbnQgbiA6IHs5OTksIDkwN30pIHsKCSAgICBjb25zdCBsb25nIHJlcyA9IGRwKG4pOwoJICAgIHN0ZDo6Y291dCA8PCAiY291bnQgZm9yICIgPDwgbiA8PCAiIGlzICIgPDwgcmVzIDw8IHN0ZDo6ZW5kbDsKCX0KfQ==