using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("4");
WillReturn.Add("10 4 3");
WillReturn.Add("1000 11 2");
WillReturn.Add("998244353 897581057 595591169");
WillReturn.Add("10000 6 14");
//2
//-1
//249561088
//3571
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
long[] wkArr = { };
Action<string> SplitAct = pStr =>
wkArr = pStr.Split(' ').Select(pX => long.Parse(pX)).ToArray();
foreach (string EachStr in InputList.Skip(1)) {
SplitAct(EachStr);
long N = wkArr[0];
long S = wkArr[1];
long K = wkArr[2];
long A = K;
long B = -S;
long M = N;
long Result = SolveGoudouHouteishiki(A, B, M);
Console.WriteLine(Result);
}
}
// 合同方程式、A*X ≡ B (mod M) を解く
// 解なしの場合は-1を返す
static long SolveGoudouHouteishiki(long pA, long pB, long pM)
{
pB %= pM;
if (pB < 0) pB += pM;
long GCD1 = DeriveGCD(pA, pB);
GCD1 = DeriveGCD(GCD1, pM);
if (GCD1 > 1) {
pA /= GCD1;
pB /= GCD1;
pM /= GCD1;
}
long GCD2 = DeriveGCD(pA, pM);
if (GCD2 > 1) return -1;
long Gyakugen = MovInv.modinv(pA, pM);
return (Gyakugen * pB) % pM;
}
// ユークリッドの互除法で2数の最大公約数を求める
static long DeriveGCD(long pVal1, long pVal2)
{
long WarareruKazu = pVal2;
long WaruKazu = pVal1;
while (true) {
long Amari = WarareruKazu % WaruKazu;
if (Amari == 0) return WaruKazu;
WarareruKazu = WaruKazu;
WaruKazu = Amari;
}
}
}
// 法が合成数での逆元を求める、staticクラス
#region MovInv
// 二項係数クラス
internal static class MovInv
{
// ax + by = gcd(a, b) となるような (x, y) を求める
// 多くの場合 a と b は互いに素として ax + by = 1 となる (x, y) を求める
static private long extGCD(long a, long b, ref long x, ref long y)
{
if (b == 0) {
x = 1;
y = 0;
return a;
}
long d = extGCD(b, a % b, ref y, ref x); // 再帰的に解く
y -= a / b * x;
return d;
}
// 負の数にも対応した mod (a = -11 とかでも OK)
static private long mod(long a, long m)
{
return (a % m + m) % m;
}
// 逆元計算 (ここでは a と m が互いに素であることが必要)
static internal long modinv(long a, long m)
{
long x = long.MaxValue, y = long.MaxValue;
extGCD(a, m, ref x, ref y);
return mod(x, m); // 気持ち的には x % m だが、x が負かもしれないので
}
}
#endregion