#include using namespace std; #define Dv(v) for (auto x : v) cerr << x << ' '; cerr << endl; #define D(x) cerr << #x << " = " << x << ", " using ll = long long; using vi = vector; using vvi = vector; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; string needs, has; cin >> needs >> has; vector mc, cm, mx, cx, xm, xc; for (int i = 1; i <= n; ++i) { if (needs[i-1] == 'M' && has[i-1] == 'C') { mc.push_back(i); } else if (needs[i-1] == 'C' && has[i-1] == 'M') { cm.push_back(i); } else if (needs[i-1] == 'C' && has[i-1] == '-') { cx.push_back(i); } else if (needs[i-1] == 'M' && has[i-1] == '-') { mx.push_back(i); } else if (needs[i-1] == '-' && has[i-1] == 'M') { xm.push_back(i); } else if (needs[i-1] == '-' && has[i-1] == 'C') { xc.push_back(i); } } vector> ans; char holding = '-'; while (!mc.empty() || !cm.empty() || !mx.empty() || !cx.empty()) { if (holding == '-') { if ((!mc.empty() || !mx.empty()) && !xm.empty()) { ans.push_back({"DRIVE ", xm.back()}); ans.push_back({"PICKUP", 0}); holding = 'M'; xm.pop_back(); } else { assert(!xc.empty()); ans.push_back({"DRIVE ", xc.back()}); ans.push_back({"PICKUP", 0}); holding = 'C'; xc.pop_back(); } } else if (holding == 'C') { if (!cm.empty()) { ans.push_back({"DRIVE ", cm.back()}); ans.push_back({"DROPOFF", 0}); if (!mc.empty() || !mx.empty()){ ans.push_back({"PICKUP", 0}); holding = 'M'; } else { holding = '-'; } cm.pop_back(); } else { assert(!cx.empty()); ans.push_back({"DRIVE ", cx.back()}); ans.push_back({"DROPOFF", 0}); holding = '-'; cx.pop_back(); } } else { assert(holding == 'M'); if (!mc.empty()) { ans.push_back({"DRIVE ", mc.back()}); ans.push_back({"DROPOFF", 0}); if (!cm.empty() || !cx.empty()) { ans.push_back({"PICKUP", 0}); holding = 'C'; } else { holding = '-'; } mc.pop_back(); } else { assert(!mx.empty()); ans.push_back({"DRIVE ", mx.back()}); ans.push_back({"DROPOFF", 0}); holding = '-'; mx.pop_back(); } } } cout << ans.size() << '\n'; for (auto [s, k] : ans) { cout << s; if (k) cout << k; cout << '\n'; } }