#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 { vectorv(x.size()); v[0]=x[0]; for(int i=1;i vectorA,B; setpri; main() { int N;cin>>N; for(int i=0;i>a>>b; A.push_back(a); B.push_back(b); for(int j=2;j*j<=b;j++) { if(b%j==0) { pri.insert(j); int p=1; while(b%j==0)b/=j; } } if(b>1)pri.insert(b); } vectora,b; bool flag=true; long long mod=1e9+7,ret=1; for(int p:pri) { int get=-1,ma=1; for(int i=0;i=0) { if(get%p!=A[i]%p) { cout<<-1<0)flag=false; (ret*=ma)%=mod; } if(!flag)ret=garner(a,b,mod); cout<