ll exgcd(ll a,ll b,ll &x,ll &y) { if(!b) { x = (ll)1,y = (ll)0; return a; } ll r = exgcd(b,a%b,x,y); ll t = x; x = y; y = t - a/b*y; return r; } //n个方程: x = a[i](mod m[i]) (0<=i<n) ll china(int n,int *a,int *m) { ll M = 1,d,y,x = 0; int i; for(i=0;i<n;i++) M *= m[i]; for(i=0;i<n;i++) { ll w = M/m[i]; d = exgcd(m[i],w,x,y) x = (x + y*w*a[i])%M; } return (x+M)%M; }