#include using namespace std; #define int long long #define double long double #define f first #define s second const int N = 2e5 + 4; string s, t; vector < int > mc, cm, m, c, emp, startc, startm; set < int > need; void find() { int n; cin >> n >> s >> t; mc.clear (); cm.clear (); c.clear (); m.clear (); startc.clear (); startm.clear (); for (int i = 0; i < n; ++i) { if (t[i] != '-' && s[i] != t[i]) need.insert(i + 1); if (t[i] == '-') { if (s[i] == '-') emp.push_back(i + 1); else if (s[i] == 'C') c.push_back(i + 1); else m.push_back(i + 1); } else { if (t[i] == 'C') { if (s[i] == '-') startc.push_back(i + 1); else if (s[i] == 'M') mc.push_back(i + 1); } else { if (s[i] == '-') startm.push_back(i + 1); else if (s[i] == 'C') cm.push_back(i + 1); } } } vector < pair < string , int > > res; while (1) { int start, turn; // 1 - cm, 2 - mc; if (!startc.empty ()) { start = startc.back (); startc.pop_back (); turn = 1; } else if (!startm.empty ()) { start = startm.back (); startm.pop_back (); turn = 2; } else { break; } int ok = 0; res.push_back({"DRIVE ", start}); while (1) { res.push_back({"PICKUP ", -1}); if (turn == 1) { if (!cm.empty ()) { int to = cm.back (); cm.pop_back (); res.push_back({"DRIVE ", to}); res.push_back({"DROPOFF", -1}); ok = 1; start = to; turn = 2; } else { if (!c.empty ()) { int to = c.back (); c.pop_back (); res.push_back({"DRIVE ", to}); res.push_back({"DROPOFF", -1}); ok = 1; break ; } else { res.pop_back (); break; } } } else { if (!mc.empty ()) { int to = mc.back (); mc.pop_back (); res.push_back({"DRIVE ", to}); res.push_back({"DROPOFF", -1}); ok = 1; start = to; turn = 1; } else { if (!m.empty ()) { int to = m.back (); m.pop_back (); res.push_back({"DRIVE ", to}); res.push_back({"DROPOFF", -1}); ok = 1; break ; } else { res.pop_back (); break; } } } } } cout << res.size () << "\n"; for (auto i : res) { cout << i.first; if (i.second != -1) cout << i.second; cout << "\n"; } } int32_t main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; while (t--) { find(); } return 0; }