#include using namespace std; #define gc getchar_unlocked #define ll long long #define ull unsigned long long #define ld long double typedef pair pi; typedef pair pll; typedef vector vi; typedef vector vl; typedef vector vpi; typedef vector vpll; typedef vector vvi; typedef vector vvl; #define fo(i,n) for(i=0;in;k> t; while(t--) #define PI 3.1415926535897932384626 #define beg int main() #define ret return 0 #define bye exit(0) #define nxl <= m) a -= m; if(a < 0) a += m; return a;} ll power(ll a, ll b, ll m = mod) { if(b == 0) return 1; if(b == 1) return (a % m); ll x = power(a, b / 2, m); x = mul(x, x, m); if(b % 2) x = mul(x, a, m); return x;} // ll bin_ser(ll low,ll high,ll key){ // while(low<=high){ // ll mid = (low+high)/2; // if(v1[mid]key){ // high = mid-1; // } // else{ // return (mid+1); // } // } // return -1; // } bool yoyo(const ll p1 ,const ll p2){ return p1 > p2; } beg{ ll i,j,k,l,t,a,r,n,m,b,c; cin >> t; while(t--){ cin >> m >> n; char tval[n+2]; ll ee[m+2]; ll es[m+2]; ll de[m+2]; ll ds[m+2]; ll ce[m+2]; ll cs[m+2]; ll me[m+2]; ll ms[m+2]; ll sval[n+2]; ll dval[n+2]; clr(es); clr(ee); clr(ms); clr(me); clr(cs); clr(ce); clr(ds); clr(de); priority_queue,vector >,greater > > qe,qd; for(i=0;i> tval[i]; } for(i=0;i> sval[i]; } for(i=0;i> dval[i]; if(tval[i]=='E' || tval[i]=='C'){ qe.push({dval[i],{sval[i],dval[i]}}); if(tval[i]=='E'){ ee[dval[i]]++; es[sval[i]]++; } if(tval[i]=='C'){ ce[dval[i]]++; cs[sval[i]]++; } } else if(tval[i]=='D' || tval[i]=='M'){ qd.push({dval[i],{sval[i],dval[i]}}); if(tval[i]=='D'){ de[dval[i]]++; ds[sval[i]]++; } if(tval[i]=='M'){ me[dval[i]]++; ms[sval[i]]++; } } } ll dpes[m+2]; ll dpee[m+2]; ll dpcs[m+2]; ll dpce[m+2]; ll dpms[m+2]; ll dpme[m+2]; ll dpds[m+2]; ll dpde[m+2]; ll inter[m+2]; ll fin[m+2]; ll nval[n+2]; clr(dpes); clr(dpee); clr(dpcs); clr(dpce); clr(dpms); clr(dpme); clr(dpds); clr(dpde); clr(fin); clr(inter); clr(nval); ll penes=0,pends=0; ll curee=0,curde=0; ll penms=0,pencs=0; ll curme=0,curce=0; ll err=0; for(i=1;i<=m;i++){ dpes[i] = dpes[i-1] + es[i]; dpee[i] = dpee[i-1] + ee[i]; dpms[i] = dpms[i-1] + ms[i]; dpme[i] = dpme[i-1] + me[i]; dpcs[i] = dpcs[i-1] + cs[i]; dpce[i] = dpce[i-1] + ce[i]; dpds[i] = dpds[i-1] + ds[i]; dpde[i] = dpde[i-1] + de[i]; err=0; if(pends==0 && penms==0){ penes += es[i]; pencs += cs[i]; curee += ee[i]; curce += ce[i]; penes -= ee[i]; pencs -= ce[i]; } if(penes==0 && pencs==0){ pends += ds[i]; penms += ms[i]; curde += de[i]; curme += me[i]; pends += de[i]; penms += me[i]; } fin[i] = max(dpee[i]+dpce[i],dpde[i]+dpme[i]); if(penes==0 && pencs==0 && curee==0 && curce==0){ inter[i] = max(inter[i],dpee[i] + dpce[i] + curde + curme); } if(pends==0 && penms==0 && curde==0 && curme==0){ inter[i] = max(inter[i],dpde[i] + dpme[i] + curee + curce); } //inter[i] += inter[i-1]; fin[i] = max(fin[i],inter[i]); if(!nval[fin[i]]) nval[fin[i]] = i; else nval[fin[i]] = min(nval[fin[i]],i); curee=0; curde=0; curme=0; curce=0; } stack st; ll prev=-1; for(i=n;i>=1;i--){ if(nval[i]==0){ st.push(prev); } else{ if(prev==-1){ prev = nval[i]; } else{ prev = min(prev,nval[i]); } st.push(prev); // prev = min(prev,nval[i]); } } while(st.size()){ cout<