#include<cstdio> #include<map> #include<cmath> intFastPow(int a, int b, int p){ int res = 1; for(; b; b >>= 1, a = 1LL * a * a % p) if(b & 1) res = 1LL * res * a % p; return res; } intexgcd(int a, int b, int &x, int &y){ if(b == 0) { x = 1, y = 0; return a; } int r = exgcd(b, a % b, y, x); y -= a / b * x; return r; } intgcd(int a, int b){ return b ? gcd(b, a % b) : a; } intGet(int y, int z, int p){ int r = gcd(y, p), res; if(z % r != 0) return-1; z /= r, y /= r, p /= r; exgcd(y, p, res, r); return (1LL * res * z % p + p) % p; } intbsgs(int y, int z, int p){ std::map<int, int> map; int m = ceil(sqrt(p)), tmp = FastPow(y, p - m - 1, p); y = y % p; if(y == 0 && z == 0) return1; if(y == 0) return-1; for(int k = 1, i = 0; i < m; i++, k = 1LL * k * y % p) if(!map.count(k)) map[k] = i; for(int k = z % p, i = 0; i < m; i++, k = 1LL * k * tmp % p) if(map.count(k)) return i * m + map[k]; return-1; } intmain(int argc, char *argv[]){ int t, k; scanf("%d%d", &t, &k); while(t--) { int y, z, p; scanf("%d%d%d", &y, &z, &p); if(k == 1) printf("%d\n", FastPow(y, z, p)); elseif(k == 2) { int r = Get(y, z, p); if(r == -1) puts("Orz, I cannot find x!"); elseprintf("%d\n", r); } else { int r = bsgs(y, z, p); if(r == -1) puts("Orz, I cannot find x!"); elseprintf("%d\n", r); } } return0; }