#include using namespace std; typedef unsigned int ui; typedef unsigned long ul; typedef long long ll; typedef unsigned long long ull; typedef vector vi; typedef vector vui; typedef vector vvi; typedef pair ii; typedef vector vii; const int INF = int (1e9) + int (1e5); const ll INFL = ll(2e18) + ll(1e10); const ui M = 1E9 + 7; const double eps = 1e-9; void fillestados(int idx,int entregados,int cargados,int tipo,vvi &source, vvi &dest,vector &ret){ if (idx==source.size()) return; if (cargados>0){ if (dest[idx][tipo]>0){ entregados += dest[idx][tipo]; if (ret[entregados-1]==-1 || ret[entregados-1]>idx+1) ret[entregados-1] = idx+1; cargados -= dest[idx][tipo]; } if (cargados>0){ fillestados(idx+1,entregados,cargados+source[idx][tipo],tipo,source,dest,ret); }else{ fillestados(idx+1,entregados,source[idx][tipo],tipo,source,dest,ret); fillestados(idx+1,entregados,source[idx][1-tipo],1-tipo,source,dest,ret); } }else{ fillestados(idx+1,entregados,source[idx][tipo],tipo,source,dest,ret); fillestados(idx+1,entregados,source[idx][1-tipo],1-tipo,source,dest,ret); } } vector minimumZooNumbers(int m, int n, vector t, vector s, vector d) { vi ret(n,-1); vector > source(m,vector (2,0)); vector > dest(m,vector (2,0)); for (int i=0;is[i]){ if (t[i]=='E' || t[i]=='C') source[s[i]-1][0]++,dest[d[i]-1][0]++; else source[s[i]-1][1]++,dest[d[i]-1][1]++; } } fillestados(0,0,0,0,source,dest,ret); return ret; } int main() { int cases; cin >> cases; for(int a0 = 0; a0 < cases; a0++){ int m; int n; cin >> m >> n; vector t(n); for(int t_i = 0; t_i < n; t_i++){ cin >> t[t_i]; } vector s(n); for(int s_i = 0; s_i < n; s_i++){ cin >> s[s_i]; } vector d(n); for(int d_i = 0; d_i < n; d_i++){ cin >> d[d_i]; } vector result = minimumZooNumbers(m, n, t, s, d); for (int i = 0; i < result.size(); i++) { cout << result[i] << (i != result.size() - 1 ? " " : ""); } cout << endl; } return 0; }