#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef pair P; const ll MOD=1e9+7; const ll MAX=4e4; vector prime; bool isprime[MAX]; void sieve(){ for(ll i=3; i>n; sieve(); unordered_map mp; for(int i=0; i>x>>y; ll y0=y; for(auto p:prime){ if(y0%p==0){ ll q=1; while(y0%p==0){ y0/=p; q*=p; } auto itr=mp.find(p); if(itr==mp.end()){ mp[p]=P(q, x%q); }else{ ll x1=(itr->second).second; ll q1=(itr->second).first; ll q0=min(q1, q); if(x1%q0!=x%q0){ cout<<-1<second=P(q, x%q); } } } if(y0>1){ ll p=y0, q=p; auto itr=mp.find(p); if(itr==mp.end()){ mp[p]=P(q, x%q); }else{ ll x1=(itr->second).second; ll q1=(itr->second).first; ll q0=min(q1, q); if(x1%q0!=x%q0){ cout<<-1<second=P(q, x%q); } } } ll t[10000]; ll m[10000], b[10000]; int c=0; for(auto p:mp){ m[c]=p.second.first, b[c]=p.second.second; c++; } bool nuee=1; for(int i=0; i0) nuee=0; } if(nuee){ ll mp0=1; for(int i=0; i