#include #include #include #include #include #include using namespace std; class CarrotJumping { public: int theJump(int init); }; int CarrotJumping::theJump(int init) { deque ids; deque distances; set nodes; long long node, newnode; int distance; ids.push_back(init); distances.push_back(0); while (1) { if (ids.size() == 0) return -1; node = ids[0]; distance = distances[0]; ids.pop_front(); distances.pop_front(); if (distance == 100001) return -1; if (node == 0) return distance; newnode = (node*4+3)%1000000007; if (nodes.find(newnode) == nodes.end()) { ids.push_back(newnode); distances.push_back(distance+1); nodes.insert(newnode); } newnode = (node*8+7)%1000000007; if (nodes.find(newnode) == nodes.end()) { ids.push_back(newnode); distances.push_back(distance+1); nodes.insert(newnode); } } }