#include #include #include long long gcd(long long a, long long b) { while (a != 0) { long long c = a; a = b%a; b = c; } return (b<0) ? -b : +b; } #define RING (1LL<<(sizeof(unsigned short)*8)) bool seen[RING]; unsigned short slow = 0; long long low = 0; long long high = RING; long long other(long long p) { while (seen[slow]) { seen[slow] = false; slow++; low++; high++; } long long v=low; unsigned short sv=slow; while (v