#include <iostream>
#include <map>
#include <vector>
using namespace std;
map<int, bool> states; // default value is False
int MAX_DEPTH = 16;
int dfs(int cur, int depth = 0) {
if(depth == MAX_DEPTH) {
return cur - (1<<MAX_DEPTH) + 1;
}
if(states[cur] == 0) {
states[cur] = !states[cur];
return dfs(2*cur, depth+1);
}
else {
states[cur] = !states[cur];
return dfs(2*cur+1, depth+1);
}
}
int main() {
int until = (1LL<<(MAX_DEPTH-1));
vector<int> pos; // 0 indexed
for(int i = 1; i <= until; i++) {
// cout << dfs(1) << ' ';
pos.push_back(dfs(1));
}
cout << pos[(12344%until)];
// 12344 instead of 12345 since the sequence is 0 indexed
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbWFwPGludCwgYm9vbD4gc3RhdGVzOyAvLyBkZWZhdWx0IHZhbHVlIGlzIEZhbHNlCmludCBNQVhfREVQVEggPSAxNjsKCmludCBkZnMoaW50IGN1ciwgaW50IGRlcHRoID0gMCkgewoJaWYoZGVwdGggPT0gTUFYX0RFUFRIKSB7CgkJcmV0dXJuIGN1ciAtICgxPDxNQVhfREVQVEgpICsgMTsKCX0KCQoJaWYoc3RhdGVzW2N1cl0gPT0gMCkgewoJCXN0YXRlc1tjdXJdID0gIXN0YXRlc1tjdXJdOwoJCXJldHVybiBkZnMoMipjdXIsIGRlcHRoKzEpOwoJfQoJZWxzZSB7CgkJc3RhdGVzW2N1cl0gPSAhc3RhdGVzW2N1cl07CgkJcmV0dXJuIGRmcygyKmN1cisxLCBkZXB0aCsxKTsKCX0KCQp9CgppbnQgbWFpbigpIHsKCWludCB1bnRpbCA9ICgxTEw8PChNQVhfREVQVEgtMSkpOwoJdmVjdG9yPGludD4gcG9zOyAvLyAwIGluZGV4ZWQKCWZvcihpbnQgaSA9IDE7IGkgPD0gdW50aWw7IGkrKykgewoJCS8vIGNvdXQgPDwgZGZzKDEpIDw8ICcgJzsKCQlwb3MucHVzaF9iYWNrKGRmcygxKSk7Cgl9CgkKCWNvdXQgPDwgcG9zWygxMjM0NCV1bnRpbCldOyAKCS8vIDEyMzQ0IGluc3RlYWQgb2YgMTIzNDUgc2luY2UgdGhlIHNlcXVlbmNlIGlzIDAgaW5kZXhlZAp9Cg==