#include #define ll long long int #define ff first #define ss second using namespace std; //dp[idx][group][finish] ll n,m,T[60000],S[60000],D[60000],ans[60000]; bool vis[2200][2][2200]; vector > > data; inline void dfs(ll idx,ll grp,ll finish,ll ad) { ans[ad]=min(ans[ad],finish); if(idx==n) return; vis[idx][grp][finish]=true; ll currgrp=T[idx],currstart=S[idx],currfinish=D[idx]; if(currgrp==grp) { if(currfinish>finish) { if(!vis[idx+1][grp][currfinish]) dfs(idx+1,grp,currfinish,ad+1); if(!vis[idx+1][grp][finish]) dfs(idx+1,grp,finish,ad); } else { if(!vis[idx+1][grp][finish]) dfs(idx+1,grp,finish,ad+1); } } else { if(currstart>t; while(t--) { memset(vis,false,sizeof(vis)); cin>>m>>n; data.clear(); data.resize(n); char ch; for(ll i=0;i>ch; if(ch=='E') data[i].ss.ss=0; if(ch=='D') data[i].ss.ss=1; if(ch=='C') data[i].ss.ss=0; if(ch=='M') data[i].ss.ss=1; } for(ll i=0;i>data[i].ff; for(ll i=0;i>data[i].ss.ff; sort(data.begin(),data.end()); for(ll i=0;i