#define _GLIBCXX_DEBUG #include #include #include using namespace std; using namespace atcoder; using ll = long long; using ull = unsigned long long; using vll=vector; using vvll=vector>; using Graph=vvll; using Edgegraph=vector>>; using vch=vector; using vvch=vector>; using P=pair; using vP=vector

; using tup=tuple; using vbl=vector; using vvbl=vector; using vs=vector; using vvs=vector; using vd=vector; using vvd=vector; using mint = atcoder::modint998244353; const int infint = 1073741823; const ll inf = 1LL << 60; 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;} #define rep(i,x,lim) for(ll i = (x);i < (ll)(lim);i++) #define rep2(j,x,lim) for(int j = (x);j < (int)(lim);j++) const ll big=(1e+9)+7; const ll big2=998244353; ll dx[8]={1,-1,0,0,1,1,-1,-1}; ll dy[8]={0,0,1,-1,1,-1,1,-1}; 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; } } //pは素数でなければならない。 int revmod(ll x,ll p){return modpow(x,p-2,p);} //99 のRを高速に求める int modp(ll p,ll q){ ll gc=gcd(p,q); p/=gc;q/=gc; ll rev=revmod(p,big2); return (rev*q)%big2; } //nCrを求める modbig2 int nCr(ll n,ll r){ ll ans=1; rep(i,1,n+1) ans=(ans*i)%big2; rep(i,1,r+1) ans=(ans*modpow(i,big2-2,big2))%big2; rep(i,1,n-r+1) ans=(ans*modpow(i,big2-2,big2))%big2; return ans; } ll op(ll a,ll b){return max(a,b);} ll opmin(ll a,ll b){return min(a,b);} ll e(){return 0;} template size_t HashCombine(const size_t seed,const T &v){ return seed^(std::hash()(v)+0x9e3779b9+(seed<<6)+(seed>>2)); } /* pair用 */ template struct std::hash>{ size_t operator()(const std::pair &keyval) const noexcept { return HashCombine(std::hash()(keyval.first), keyval.second); } }; const int MAX = 510000; 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]; } void rle(string s, vector> &vec) { int cnt = 1; for(int i = 1; i < (int)s.size(); i++){ if(s[i] != s[i-1]){ vec.push_back({s[i-1], cnt}); cnt = 0; } cnt++; } vec.push_back({s.back(), cnt}); } vector> mat_mul(vector> a, vector> b, ll mod) { int n = a.size(); int t= b.size(); int m= b[0].size(); vector> res(n, vector(m)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { for (int k = 0; k < t; k++) { res[i][j] += a[i][k] * b[k][j]; res[i][j] %= mod; } } } return res; } int main(){ vvll A(2,vll(2)); vvll B(2,vll(2)); rep(i,0,2){ rep(j,0,2) cin >> A[i][j]; } rep(i,0,2){ rep(j,0,2){ cin >> B[i][j]; } } const ll p=67; rep(i1,0,67){ rep(i2,0,67){ rep(j1,0,67){ rep(j2,0,67){ vvll P={{i1,i2},{j1,j2}}; if(i1*j2==i2*j1) continue; if(mat_mul(P,A,p)==mat_mul(B,P,p)){ cout << "Yes" << '\n'; return 0; } } } } } cout << "No" << '\n'; }