#include #include using namespace std; typedef long long int ll; int main() { ll n; cin >> n; string b, p; cin >> b >> p; vector needMhasC, needChasM, hasC, hasM, needC, needM; ll needMhasCPos = 0, needChasMPos = 0, hasCPos = 0, hasMPos = 0, needCPos = 0, needMPos = 0; vector ans; for (ll i = 0; i < n; ++i) { if (b[i] == 'C' && p[i] == 'M') needChasM.emplace_back(i); if (b[i] == 'M' && p[i] == 'C') needMhasC.emplace_back(i); if (b[i] == '-' && p[i] == 'C') hasC.emplace_back(i); if (b[i] == '-' && p[i] == 'M') hasM.emplace_back(i); if (b[i] == 'C' && p[i] == '-') needC.emplace_back(i); if (b[i] == 'M' && p[i] == '-') needM.emplace_back(i); } ll curType = 0; bool started = false; bool hasMath = false; bool loaded = false; while (needMhasC.size() != needMhasCPos || needChasM.size() != needChasMPos || hasC.size() != hasCPos || hasM.size() != hasMPos || needC.size() != needCPos || needM.size() != needMPos) { if (!started) { if (hasMPos != hasM.size()) { started = true; if (loaded) ans.emplace_back("DROPOFF"); ans.emplace_back("DRIVE " + to_string(hasM[hasMPos] + 1)); ans.emplace_back("PICKUP"); hasMPos++; hasMath = true; loaded = true; continue; } if (hasCPos != hasC.size()) { started = true; if (loaded) ans.emplace_back("DROPOFF"); ans.emplace_back("DRIVE " + to_string(hasC[hasCPos] + 1)); ans.emplace_back("PICKUP"); hasCPos++; hasMath = false; loaded = true; continue; } } else { if (hasMath) { if (needMhasC.size() != needMhasCPos) { ans.emplace_back("DRIVE " + to_string(needMhasC[needMhasCPos] + 1)); ans.emplace_back("DROPOFF"); ans.emplace_back("PICKUP"); needMhasCPos++; hasMath = false; continue; } if (needM.size() != needMPos) { ans.emplace_back("DRIVE " + to_string(needM[needMPos] + 1)); ans.emplace_back("DROPOFF"); needMPos++; loaded = false; started = false; continue; } } else { if (needChasM.size() != needChasMPos) { ans.emplace_back("DRIVE " + to_string(needChasM[needChasMPos] + 1)); ans.emplace_back("DROPOFF"); ans.emplace_back("PICKUP"); needChasMPos++; hasMath = true; continue; } if (needC.size() != needCPos) { ans.emplace_back("DRIVE " + to_string(needC[needCPos] + 1)); ans.emplace_back("DROPOFF"); needCPos++; loaded = false; started = false; continue; } } } } ll x = ans.size(); for (int i = ans.size() - 1; i >= 0; --i) { if (ans[i] == "DROPOFF") { x = i + 1; break; } } cout << x << endl; for (int i = 0; i < x; ++i) { cout << ans[i] << endl; } return 0; }