//#define //_GLIBCXX_DEBUG #include #include using namespace std; using namespace atcoder; /*long long型*/ using ll = long long; using vll=vector; using vvll=vector; using vvvll=vector; /*ull*/ using ull = unsigned long long; using vull=vector; using vvull=vector; using vvvull=vector; /*Graphの型*/ using Graph=vvll; using EdgeGraph=vector>>; /*文字列型*/ using vch=vector; using vvch=vector>; using vs=vector; /*pair型(ll,ll)*/ using Pll=pair; using vPll=vector; /*tuple型(ll,ll,ll)*/ using tup=tuple; /*bool型*/ using bl=bool; using vbl=vector; using vvbl=vector; using vvvbl=vector; /*long double*/ using ld=long double; using vld=vector; using vvld=vector; using vvvld=vector; /*mint*/ using mint = atcoder::modint998244353; using vmint= vector; using vvmint = vector; using vvvmint = vector; /*inf*/ const int infint = 1073741823; const ll inf = 1LL << 60; /*chmin,max*/ template inline bool chmax(T& a,T b){if (a inline bool chmin(T& a,T b){if (a>b){a=b;return 1;}return 0;} /*rep*/ #define rep(i,x,lim) for(ll i = (x);i < (ll)(lim);i++) /*mod big prime*/ const ll mod1000000007=(1e+9)+7; const ll mod998244353=998244353; /*8方向ライブラリ(Grid対応)*/ ll dx[8]={1,-1,0,0,1,1,-1,-1}; ll dy[8]={0,0,1,-1,1,-1,1,-1}; /*2べき、10べき(64bit)*/ const vector pow2ll{1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,2147483648,4294967296,8589934592,17179869184,34359738368,68719476736,137438953472,274877906944,549755813888,1099511627776,2199023255552,4398046511104,8796093022208,17592186044416,35184372088832,70368744177664,140737488355328,281474976710656,562949953421312,1125899906842624,2251799813685248,4503599627370496,9007199254740992,18014398509481984,36028797018963968,72057594037927936,144115188075855872,288230376151711744,576460752303423488,1152921504606846976,2305843009213693952,4611686018427387904, 9223372036854775808ull}; const vector pow10ll{1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000,10000000000,100000000000,1000000000000,10000000000000,100000000000000,1000000000000000,10000000000000000,100000000000000000,1000000000000000000, 10000000000000000000ull}; /*inline 剰余*/ inline long long mod(long long a,long long m){ return (a % m + m) %m; } /*余りが任意の時の高速で求める*/ int modpow(ll x,ll n,ll m){ if(n==0) return 1%m; x=((x%m)+m)%m; if(n%2==0){ ll r=modpow(x,n/2,m); return r*r%m; } else{ ll r=modpow(x,n/2,m); return r*r%m*x%m; } } ll op(ll a,ll b){return max(a,b);} ll opmin(ll a,ll b){return min(a,b);} ll e(){return 0;} /*pair unordered set*/ template size_t HashCombine(const size_t seed,const T &v){ return seed^(std::hash()(v)+0x9e3779b9+(seed<<6)+(seed>>2)); } /* pair set*/ template struct std::hash>{ size_t operator()(const std::pair &keyval) const noexcept { return HashCombine(std::hash()(keyval.first), keyval.second); } }; /*二項係数lib*/ /*@brief Cominitを呼び出して二項係数を高速で計算する(10^7程度まで)*/ const int MAX = 1010000; mint fac[MAX], finv[MAX], inv[MAX]; void COMinit() { const int MOD = mint::mod(); fac[0] = fac[1] = 1; finv[0] = finv[1] = 1; inv[1] = 1; for (int i = 2; i < MAX; i++){ fac[i] = fac[i - 1] * i; inv[i] = MOD - inv[MOD%i] * (MOD / i); finv[i] = finv[i - 1] * inv[i]; } } mint COM(int n, int k){ if (n < k) return 0; if (n < 0 || k < 0) return 0; return fac[n] * finv[k] * finv[n - k]; } // Injecting ../../templete.hpp <- _lib/math/Equation/ChineseRem.hpp // Skipping already injected ../templete.hpp /*@param ax+by=gcd(x,y)を求める*/ /*@result gcd(x,y)*/ ll extGCD(ll a,ll b,ll &x,ll &y){ ll d=a; if(b != 0){ d = extGCD(b,a%b,y,x); y -= (a/b)*x; } else{ x=1; y=0; } if(d < 0){ d = -d; } return d; } // Skipping already injected ../../templete.hpp // Skipping already injected ../templete.hpp /*@param ax+by=gcd(x,y)を求める*/ /*@result gcd(x,y)*/ // Injecting ../extGCD.hpp <- _lib/math/Equation/ChineseRem.hpp struct ChineseRemAns{ bool isSolvable; ll r; ll Complexmod; }; ChineseRemAns ChineseRem(const vector &b,const vector &m){ ll r=0;ll M=1; for(int i=0; i<(int)b.size();++i){ ll s,t; ll d=extGCD(M,m[i],s,t); if(mod(b[i]-r,d)!=0){ return{ false, 0, 0 }; } ll temp=(b[i]-r)/d*s%(m[i]/d); ll lcmCRT = m[i] * (M/d); r=mod(r+M*temp,lcmCRT); M=lcmCRT; } return{ true, r, M }; } // Injecting _lib/math/Equation/ChineseRem.hpp <- ABC/433/433e.cpp void solve(){ vll X(3),Y(3); rep(i,0,3){ cin >> X[i] >> Y[i]; } ChineseRemAns a= ChineseRem(X,Y); if(a.isSolvable==false) cout << -1; else cout << a.r; } int main(){ std::cin.tie(nullptr); std::ios_base::sync_with_stdio(false); ll T=1; //cin >> T; while(T--){ solve(); } }