#include #include template constexpr inline T mod(T a,T m){ a %= m; return (a<0?a+m:a); } template std::tuple ext_gcd(T a,T b){ if(b==0){ return {a,1,0}; } auto [d,y,x] = ext_gcd(b,a%b); y -= a/b * x; return {d,x,y}; } template T mod_inv(T a,T m){ auto[d,x,y] = ext_gcd(a,m); return (d!=1?-1:mod(x,m)); } #include #include #include #include template T gerner(std::vector const& b,std::vector const& m){ assert(0 b,std::vector m,int64_t const MOD){ using i64 = int64_t; assert(00 and (b[i]-b[j])%d!=0)return -1; m[i] /= d, m[j] /= d; i64 d0 = std::gcd(m[i],d); i64 d1 = d/d0; do{ d = std::gcd(d0,d1); d0 *= d, d1 /= d; }while(d!=1); m[i] *= d0, m[j] *= d1; b[i] %= m[i], b[j] %= m[j]; } } // x[i] が全て 0 なら y の lcm を返す、y は対ごとに素なので掛けるだけでいい if(sum_b==0){ i64 lcm_m = 1; for(i64 mi:m)(lcm_m*=mi)%=MOD; return lcm_m; } // gerner m.emplace_back(MOD); std::vector coeffs(std::size(m),1); std::vector constants(std::size(m),0); for(int k=0;k int64_t operator"" _i64(unsigned long long x){ return (int64_t)x; } void solve_yuki_187(){ using namespace std; using i64 = int64_t; constexpr i64 MOD = 1e9+7; int n; cin>>n; vector x(n),y(n); for(int i=0;i>x[i]>>y[i]; i64 ans = gerner(x,y,MOD); cout<< ans <