#include #include #include using namespace std; #define ALL(c) (c).begin(),(c).end() #define PB push_back #define ST first #define ND second #define MP make_pair #define SIZE(x) (int)(x).size() #define FOREACH(it,c) for(auto it=(c).begin();it!=(c).end();++it) typedef long long LL; typedef vector VI; typedef vector VC; typedef vector VLL; typedef vector VVI; typedef pair PII; typedef vector VPII; const int X=1000,Y=1000,XY=1000000; int main() { int q,m,n,i,j; scanf("%d",&q); while(q--) { scanf("%d%d",&m,&n); int x=1,mx=0; VC c(n); VI tp(n),tk(n); VPII t(n); VI a(XY+1),b(XY+1),a2(Y),b2(Y),a3(Y),b3(Y); for(i=0;itk[i]) { t[i].ST=1000000000; continue; } t[i]=MP(tk[i]<<1,tp[i]); if(c[i]=='E' || c[i]=='C') { t[i].ST++; } } sort(ALL(t)); while(t.back().ST>1000000) t.pop_back(); FOREACH(it,t) { if(it->ST&1) { for(i=0;(i+1)*X<=it->ND;i++) { a2[i]++; if(a2[i]+a3[i]>mx) mx=a2[i]+a3[i]; } for(j=i*X;j<=it->ND;++j) { a[j]++; if(a[j]>a3[i]) { a3[i]=a[j]; if(a2[i]+a3[i]>mx) mx=a2[i]+a3[i]; } } j=it->ST>>1; i=j/X; a3[i]=a[j]=mx-a2[i]; b3[i]=b[j]=mx-b2[i]; } else { for(i=0;(i+1)*X<=it->ND;i++) { b2[i]++; if(b2[i]+b3[i]>mx) mx=b2[i]+b3[i]; } for(j=i*X;j<=it->ND;++j) { b[j]++; if(b[j]>b3[i]) { b3[i]=b[j]; if(b2[i]+b3[i]>mx) mx=b2[i]+b3[i]; } } j=it->ST>>1; i=j/X; a3[i]=a[j]=mx-a2[i]; b3[i]=b[j]=mx-b2[i]; } while(mx>=x) { printf("%d ",it->ST>>1); ++x; } } for(;x<=n;++x) printf("-1 "); printf("\n"); } }