#include #include typedef long long ll; typedef unsigned long long ull; #define clr(ma) memset(ma,-1,sizeof ma) #define INF 1000000000 #define vi vector #define pi pair #define mk make_pair #define getBit(m,i) ((m&(1ll<::iterator #define itr2 set::iterator #define id(k) scanf("%9lf",&k) #define fi(ss) freopen (ss,"r",stdin) #define fo(ss) freopen (ss,"w",stdout) #define sc(s) scanf("%s",s) #define clean(vis) memset(vis,0,sizeof vis) #define bitcount(x) (__builtin_popcount(x)) #define rep0(x) for(int i=0;i e1) return ; if (s>=s1 && e<=e1){ if (v!=-1) { tree[i]=v; return; } tree[i]++; lazy[i]++; return ; } push(i,tree,lazy); int mid=(s+e)>>1; upd(i<<1,s,mid,s1,e1,tree,lazy,v); upd(i<<1|1,mid+1,e,s1,e1,tree,lazy,v); tree[i]=max(tree[i<<1],tree[i<<1|1]); } int qur (int i,int s,int e,int s1, int e1, vi & tree, vi & lazy){ if (e e1) return 0; if (s>=s1 && e<=e1){ return tree[i]; } push(i,tree,lazy); int mid=(s+e)>>1; return max(qur(i<<1,s,mid,s1,e1,tree,lazy), qur(i<<1|1,mid+1,e,s1,e1,tree,lazy)); } int m,n; vi ectree; vi eclazy; vi dmlazy; vi dmtree; vi EP [N]; vi DP [N]; vi CP [N]; vi MP [N]; char a [N]; int s [N]; int d [N]; char w [3]; int dp [N]; void init(){ for (int i=0;i<=m;i++)EP[i].clear(),DP[i].clear(),CP[i].clear(),MP[i].clear(); for (int i=0;id[i]) continue; if (a[i]=='E')EP[d[i]].push_back(s[i]); if (a[i]=='D')DP[d[i]].push_back(s[i]); if (a[i]=='C')CP[d[i]].push_back(s[i]); if (a[i]=='M')MP[d[i]].push_back(s[i]); } ectree.assign(5*m,0); eclazy.assign(5*m,0); dmtree.assign(5*m,0); dmlazy.assign(5*m,0); } int main(){ int t; in(t); while (t--){ in2(m,n); for (int i=0;im)printf("%d ",-1); else printf("%d ",p); } puts(""); } }