#include #include using mint = atcoder::static_modint<998244353>; // using mint = atcoder::static_modint<1000000007>; using namespace std; using namespace atcoder; using ld = long double; using ll = long long; #define mp(a,b) make_pair(a,b) #define rep(i,s,n) for(int i=s; i dx{1,0,-1,0},dy{0,1,0,-1}; ll discrete_log(ll x,ll y,ll mod){ // x^k=y(mod)を満たす最小のk,無いなら-1を返す //yも可逆元 ll order=mod-1; // baby-giant ll sq=sqrt(order)+5; vector> list; rep(i,0,sq){ ll c=pow_mod(x,sq*i,mod); list.push_back(mp(c,sq*i)); } sort(list.begin(),list.end()); list.push_back(mp(mod+1,0));//防人 ll xinv=pow_mod(x,order-1,mod); ll Xinvpow=1; const ll inf=1e18; ll output=inf; rep(i,0,sq){ ll target=y*Xinvpow%mod; int id=lower_bound(list.begin(),list.end(),mp(target,0LL))-list.begin(); if(list[id].first==target){ ll ans=i+list[id].second; output=min(output,ans); } Xinvpow=Xinvpow*xinv%mod; } if(output==inf)output=-1; return output; } void solve(ll p,ll r){ ll a,b,c; cin >> a >> b >> c; b*=pow_mod(a,p-2,p); b%=p; c*=pow_mod(a,p-2,p); c%=p; ll d=(b*b-4*c+4*p)%p; ll k=discrete_log(r,d,p); if(d==0){ b*=pow_mod(2,p-2,p); b%=p; cout << (p-b)%p << "\n"; } else if(k%2==0){ ll sqd=pow_mod(r,k/2,p); sqd*=pow_mod(2,p-2,p); sqd%=p; b*=pow_mod(2,p-2,p); b%=p; if(sqd==0){ ll ans=(p-b)%p; cout << ans << "\n"; } else{ ll ans[2]; ans[0]=((p-b)+sqd)%p; ans[1]=((p-b)+p-sqd)%p; if(ans[0]>ans[1])swap(ans[0],ans[1]); cout << ans[0] << " " << ans[1] << "\n"; } } else cout << -1 << "\n"; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); ll p,r;cin >> p >> r; int T;cin >> T; rep(i,0,T)solve(p,r); }