#include using namespace std; #define fi first #define se second #define mp make_pair #define pb push_back typedef pair ii; const int len = 2005; char cl[len], pr[len]; vector vec[3][2], out; bool check(int cur) { return (vec[cur][0].size() > 0 || vec[cur][1].size() > 0); } int main() { int n; scanf("%d %s %s", &n, &cl, &pr); int math = 0, cs = 0, some = 0; for (int i = 0; i < n; i++) { if (cl[i] == 'M' && pr[i] != 'M') { some++; math++; if (pr[i] == 'C') cs--, vec[0][1].pb(i+1); else vec[0][0].pb(i+1); } else if (cl[i] == 'C' && pr[i] != 'C') { some++; cs++; if (pr[i] == 'M') math--, vec[1][0].pb(i+1); else vec[1][1].pb(i+1); } } //printf("%d %d\n", math, cs); //printf("some = %d\n", some); if (some == 0) { } else if (some > 0 && math == 0 && cs == 0) { for (int i = 0; i < n; i++) { if (cl[i] == '-' && pr[i] == 'M') { vec[2][0].pb(i+1); break; } else if (cl[i] == '-' && pr[i] == 'C') { vec[2][1].pb(i+1); break; } } } else { math = max(math, 0); cs = max(cs, 0); for (int i = 0; i < n; i++) { if (cl[i] == '-' && pr[i] != '-') { if (pr[i] == 'M' && math > 0) math--, vec[2][0].pb(i+1); else if (pr[i] == 'C' && cs > 0) cs--, vec[2][1].pb(i+1); } } } int cur = 2; while (true) { //printf("cur = %d\n", cur); if (cur == 2) { if (vec[2][0].size() > 0) { out.pb(vec[2][0].back()); out.pb(-2); cur = 0; vec[2][0].pop_back(); } else if (vec[2][1].size() > 0) { out.pb(vec[2][1].back()); out.pb(-2); cur = 1; vec[2][1].pop_back(); } else { break; } } else { if (vec[cur][1-cur].size() > 0) { out.pb(vec[cur][1-cur].back()); out.pb(-3); vec[cur][1-cur].pop_back(); if (check(1-cur)) out.pb(-2), cur = 1-cur; else cur = 2; } else { out.pb(vec[cur][cur].back()); out.pb(-3); vec[cur][cur].pop_back(); cur = 2; } } } printf("%d\n", out.size()); for (int v: out) { if (v == -2) printf("PICKUP\n"); else if (v == -3) printf("DROPOFF\n"); else printf("DRIVE %d\n", v); } return 0; }