/************************************************************************* > File Name: main.cpp > Author: JunHU > Mail: hujun09012@gmail.com ************************************************************************/ #include using namespace std; const int N = 50010; int m, n; int t[N]; char _t[2]; int s[N], d[N]; int dp[N][5], max_dp[N]; int ans[N]; vector vec[N]; struct BIT { int c[N]; void clear() { memset(c, 0, sizeof(c)); } void ins(int x) { for (; x <= m; x += x & -x) c[x] ++; } int _sum(int x, int res = 0) { for(; x; x ^= x & -x) res += c[x]; return res; } int sum(int x, int y) { return _sum(y) - _sum(x - 1); } }bit[4]; void _main() { memset(dp, 0, sizeof(dp)); memset(max_dp, 0, sizeof(max_dp)); for (int i = 1; i <= n; ++i) vec[i].clear(); for (int i = 0; i < 4; ++i) bit[i].clear(); scanf("%d %d", &m, &n); for (int i = 1; i <= n; ++i) { scanf("%s", _t); if (_t[0] == 'E') t[i] = 0; else if (_t[0] == 'D') t[i] = 1; else if (_t[0] == 'C') t[i] = 2; else t[i] = 3; } for (int i = 1; i <= n; ++i) scanf("%d", s + i); for (int i = 1; i <= n; ++i) scanf("%d", d + i); for (int i = 1; i <= n; ++i) { if (s[i] < d[i]) { vec[d[i]].push_back(i); bit[t[i]].ins(d[i]); } } for (int i = 1; i <= m; ++i) { for (int k = 0; k < 4; ++k) dp[i][k] = dp[i - 1][k]; for (int j = 0; j < vec[i].size(); ++j) { int idx = vec[i][j]; int beg = s[idx], end = d[idx], type = t[idx]; int otype = (type + 2) % 4; int cnt = bit[type].sum(beg + 1, end) + bit[otype].sum(beg + 1, end); dp[i][type] = max(dp[i][type], max_dp[beg] + cnt); } for (int k = 0; k < 4; ++k) max_dp[i] = max(max_dp[i], dp[i][k]); } memset(ans, -1, sizeof(ans)); for (int i = 1; i <= m; ++i) for (int j = 0; j < 4; ++j){ int val = dp[i][j]; if (ans[val] == -1) ans[val] = i; else ans[val] = min(ans[val], i); } for (int i = 1; i <= n; ++i) printf("%d%c", ans[i], i == n ? '\n' : ' '); } int main() { int cas; scanf("%d", &cas); while (cas--) _main(); return 0; }