#include using namespace std; const int MX = 50000; char t[MX]; int s[MX], d[MX], dp[MX], f[2][MX]; vector> events[MX]; int main() { int T; ignore = scanf("%d", &T); while (T--) { int m, n; ignore = scanf("%d %d", &m, &n); for (int i = 0; i < n; i++) ignore = scanf(" %c", t + i); for (int i = 0; i < n; i++) ignore = scanf("%d", s + i); for (int i = 0; i < n; i++) ignore = scanf("%d", d + i); for (int i = 0; i < n; i++) { s[i]--; d[i]--; if (s[i] > d[i]) continue; events[d[i]].emplace_back(s[i], (t[i] == 'E' || t[i] == 'C') ? 0 : 1); } int p[2] = {0, 0}; set s[2] = {{{0}}, {{0}}}; dp[0] = f[0][0] = f[1][0] = 0; for (int i = 1; i < m; i++) { for (auto& e : events[i]) { p[e.second]++; auto nxt = s[e.second].lower_bound(e.first + 1); if (nxt == s[e.second].begin()) continue; auto it = prev(nxt); f[e.second][*it]++; if (nxt == s[e.second].end()) continue; if (f[e.second][*it] == dp[*nxt]) { f[e.second][*it] += f[e.second][*nxt] - dp[*nxt]; s[e.second].erase(nxt); } } events[i].clear(); dp[i] = dp[i - 1]; for (int j = 0; j < 2; j++) dp[i] = max(dp[i], f[j][*s[j].rbegin()]); for (int j = 0; j < 2; j++) if (dp[i] > f[j][*s[j].rbegin()]) { f[j][i] = dp[i]; s[j].emplace(i); } } for (int i = 1, ans = 0; i <= n; i++) { while (ans < m && dp[ans] < i) ans++; printf("%d ", ans == m ? -1 : ans + 1); } printf("\n"); } return 0; }