#include using namespace std; using ll = long long; const ll INF = 1e18; template using graph = vector>; int n; const int N = 3000; int used[N]; int cnt[N]; graph g(N); int cur = 0; string s; string t; vector> ans; vectorres; void dfs(int v) { auto x = g[v]; for (int to: x) { if(g[v].find(to)!=g[v].end()) { g[v].erase(g[v].find(to)); dfs(to); } } res.push_back(v); } void solve() { cin >> n; cin >> s >> t; map mp; for (int i = 0; i < n; i++) { if (s[i] == t[i]) continue; mp[s[i]]++; mp[t[i]]--; } for (int i = 0; i < n; i++) { if (s[i] == t[i]) continue; if (mp[t[i]] < 0) { mp[t[i]]++; t[i] = '-'; } if (s[i] == '-') g[0].insert(i + 3); if (s[i] == 'C') g[1].insert(i + 3); if (s[i] == 'M') g[2].insert(i + 3); if (t[i] == '-') g[i + 3].insert(0); if (t[i] == 'C') g[i + 3].insert(1); if (t[i] == 'M') g[i + 3].insert(2); } cnt[0] = g[0].size(); cnt[1] = g[1].size(); cnt[2] = g[2].size(); dfs(0); reverse(res.begin(), res.end()); int cur = 0; for (auto i : res) { if (i <= 2) continue; ans.push_back({"DRIVE", i - 2}); if (cur) { ans.push_back({"DROPOFF", -1}); cur--; } if (t[i - 3] != '-') { ans.push_back({"PICKUP", -1}); cur++; } } // cout<<"------------------"<> t; while (t--) { solve(); } }