import sys import math def input(): return sys.stdin.read() def modinv(a, m): g, x, y = extended_gcd(a, m) if g != 1: return None else: return x % m def extended_gcd(a, b): if a == 0: return (b, 0, 1) else: g, y, x = extended_gcd(b % a, a) return (g, x - (b // a) * y, y) def tonelli_shanks(n, p): if pow(n, (p - 1) // 2, p) != 1: return -1 if n == 0: return 0 Q = p - 1 S = 0 while Q % 2 == 0: Q //= 2 S += 1 z = 2 while pow(z, (p - 1) // 2, p) != p - 1: z += 1 c = pow(z, Q, p) x = pow(n, (Q + 1) // 2, p) t = pow(n, Q, p) m = S while t != 1: tmp = t i = 0 while tmp != 1 and i < m: tmp = pow(tmp, 2, p) i += 1 if i == m: return -1 b = pow(c, 1 << (m - i - 1), p) x = (x * b) % p t = (t * b * b) % p c = (b * b) % p m = i return x def solve(): data = input().split() idx = 0 T = int(data[idx]) idx += 1 for _ in range(T): p = int(data[idx]) k = int(data[idx+1]) a = int(data[idx+2]) idx +=3 if a == 0: print(0) continue d = math.gcd(k, p-1) m = (p-1) // d if pow(a, m, p) != 1: print(-1) continue k_prime = k // d m_val = m # (p-1)/d inv_k_prime = modinv(k_prime, m_val) if inv_k_prime is None: print(-1) continue b = pow(a, inv_k_prime, p) found = False if d == 1: print(b % p) continue elif d == 2: x = tonelli_shanks(b, p) if x == -1: print(-1) else: print(x % p) continue else: for x in range(p): if pow(x, d, p) == b % p: print(x) found = True break if not found: print(-1) if __name__ == "__main__": solve()