#include using namespace std; #include long long invmod(long long a,long long m) { long long s=a%m,t=m,sx=1,sy=0,tx=0,ty=1; while(s%t!=0) { long long f=s/t; long long u=s-t*f,ux=sx-tx*f,uy=sy-ty*f; s=t,sx=tx,sy=ty; t=u,tx=ux,ty=uy; } if(tx<0)tx+=m; return tx; } long long garner(const vector&x,const vector&m,const int mod=0)//*=x mod m { if(x.empty())return 0LL; vectorv(x.size()); v[0]=x[0]; for(int i=1;i long long garner_helper(vectorA,vectorB,const int mod=0,bool zero=true)//allow zero? //make B disjoint. NA => -1 { vectorprimes; for(int i=0;i1)primes.push_back(b); } sort(primes.begin(),primes.end()); primes.erase(unique(primes.begin(),primes.end()),primes.end()); vectora,b; bool flag=!zero; long long ret=1; for(int p:primes) { int ma=1,res; vector >x; for(int i=0;iq:x) { if(res%q.first!=q.second)return-1; } a.push_back(res); b.push_back(ma); flag&=res==0; if(flag) { ret*=ma; if(mod!=0)ret%=mod; } } if(!flag)ret=garner(a,b,mod); return ret; } main() { int N;cin>>N; vectorA(N),B(N); for(int i=0;i>A[i]>>B[i]; cout<