#include "testlib.h" #include using namespace std; // Safer-Faster-RollingHash // https://qiita.com/keymoon/items/11fac5627672a6d6a9f6 // https://atcoder.jp/contests/abc141/submissions/7717102 typedef unsigned long long int ull; const ull MASK30 = (1ull << 30) - 1; const ull MASK31 = (1ull << 31) - 1; const ull MOD = (1ull << 61) - 1; const ull MASK61 = MOD; //mod 2^61-1を計算する関数 ull CalcMod(ull x) { ull xu = x >> 61; ull xd = x & MASK61; ull res = xu + xd; if (res >= MOD) res -= MOD; return res; } //a*b mod 2^61-1を返す関数(最後にModを取る) ull Mul(ull a, ull b) { ull au = a >> 31; ull ad = a & MASK31; ull bu = b >> 31; ull bd = b & MASK31; ull mid = ad * bu + au * bd; ull midu = mid >> 30; ull midd = mid & MASK30; return CalcMod(au * bu * 2 + midu + (midd << 31) + ad * bd); } ull hBase; void genBase(mt19937_64 &eg){ hBase=CalcMod((ull)eg()); } int main(){ random_device seed_gen; mt19937_64 engine(seed_gen()); registerValidation(); int n=inf.readInt(1,200000);inf.readEoln(); vector s(n); int sigl=0; for(int i=0;i res(n,1); for(int tr=0;tr<1;tr++){ genBase(engine); set st; for(int i=0;i0;j--){ ull npos=Mul(pos,hBase); ull subdel =CalcMod(Mul(pos,((ull)s[i][j]))+Mul(npos,((ull)s[i][j-1]))); ull addel =CalcMod(Mul(pos,((ull)s[i][j-1]))+Mul(npos,((ull)s[i][j]))); ull curHash=CalcMod(ordHash+MOD-subdel+addel); st.insert(curHash); // cout << "Swap " << j << " : " << curHash << "\n"; pos=npos; } } } for(auto &nx : res){ if(nx==1){cout << "Yes\n";} else{cout << "No\n";} } return 0; }