#pragma GCC optimize ("O3") #pragma GCC target ("avx2") #pragma GCC optimize("unroll-loops") #ifndef call_from_test #include using namespace std; #endif //BEGIN CUT HERE // half open interval [l, r) template struct BitVector{ inline static constexpr size_t B = sizeof(T) * CHAR_BIT; size_t n; vector dat; BitVector(size_t n_):n(n_),dat(n_/B+1,0){} inline T get(size_t i)const{return (dat[i/B]>>(i%B))&T(1);} void set(size_t i,T v){ dat[i/B]&=~(T(1)<<(i%B)); dat[i/B]|=v<<(i%B); } // O(B + (r - l) / B) BitVector get(size_t l,size_t r)const{ BitVector res(r-l); if(r-l<=B){ for(size_t i=l;i>(B-(p-l)); } } // [q, r) for(size_t i=q;i>(p-l))|(bv.dat[(i-l)/B+1]<<(B-(p-l))); } // [q, r) for(size_t i=q;i>n>>s>>x>>y>>z; int q; cin>>q; BitVector bv(n+1); int a=s; for(int i=1;i<=n;i++){ bv.set(i,a&1); a=(1LL*x*a+y)%z; } for(int i=0;i>s>>t>>u>>v; auto p=bv.get(s,t+1),q=bv.get(u,v+1); for(int i=0;i<(int)p.dat.size();i++) p.dat[i]^=q.dat[i]; bv.set(u,v+1,p); } for(int i=1;i<=n;i++) cout<<(bv.get(i)?"O":"E"); cout<