#include using namespace std; struct Animal { int type, st, en; }; bool comp(const Animal &a, const Animal &b) { if(a.en == b.en) return a.st < b.st; return a.en < b.en; } bool comp2(const Animal &a, const Animal &b) { return a.en < b.en; } int main() { int t; scanf("%d", &t); Animal tmp[100000]; while(t--) { vector A1, A2; int m, n; scanf("%d %d", &m, &n); getchar(); char ch; for(int i = 0; i < n; i++) { ch = getchar(); getchar(); if(ch == 'M' || ch == 'D') tmp[i].type = 0; else if(ch == 'C' || ch == 'E') tmp[i].type = 1; } for(int i = 0; i < n; i++) scanf("%d", &tmp[i].st); for(int i = 0; i < n; i++) scanf("%d", &tmp[i].en); for(int i = 0; i < n; i++) { if(tmp[i].st < tmp[i].en) { if(tmp[i].type == 0) A1.push_back(tmp[i]); else A2.push_back(tmp[i]); } } sort(A1.begin(), A1.end(), comp); sort(A2.begin(), A2.end(), comp); int dp[100000]; dp[0] = dp[1] = 0; int p1 = 0, p2 = 0, alpha, beta, kapa; for(int i = 2; i <= m; i++) { kapa = dp[i - 1]; alpha = p1, beta = p2; while(p1 < A1.size() && A1[p1].en <= i) p1++; while(p2 < A2.size() && A2[p2].en <= i) p2++; while(alpha < p1) { Animal ani1, ani2; ani1.en = A1[alpha].st; ani2.en = i; int zeta = upper_bound(A1.begin(), A1.end(), ani2, comp2) - upper_bound(A1.begin(), A1.end(), ani1, comp2); kapa = max(kapa, dp[A1[alpha].st] + zeta); alpha++; //cout << "alpha " << zeta << ' ' << i << endl; //cout << "kapa " << upper_bound(A1.begin(), A1.end(), ani2, comp2) - A1.begin() << ' ' << //upper_bound(A1.begin(), A1.end(), ani1, comp2) - A1.begin() << endl; } while(beta < p2) { Animal ani1, ani2; ani1.en = A2[beta].st; ani2.en = i; int zeta = upper_bound(A2.begin(), A2.end(), ani2, comp2) - upper_bound(A2.begin(), A2.end(), ani1, comp2); kapa = max(kapa, dp[A2[beta].st] + zeta); //cout << "beta " << zeta << ' ' << i << endl; //cout << "napa " << upper_bound(A2.begin(), A2.end(), ani2, comp2) - A2.begin() << ' ' << //upper_bound(A2.begin(), A2.end(), ani1, comp2) - A2.begin()<< endl; beta++; } dp[i] = kapa; } //for(int i = 0; i <= m; i++) //cout << dp[i] << ' '; //cout << endl; vector ans(n + 1, -1); for(int i = 2, j = 1; i <= m; i++) { while(j <= dp[i]) ans[j++] = i; } for(int i = 1; i <= n; i++) printf("%d ", ans[i]); puts(""); } return 0; }