#include #pragma GCC optimize ("Ofast") using namespace std; #define rep(i,a,b) for(ll i = a; i vl; typedef pair pll; int main(){ cin.tie(0); ios_base::sync_with_stdio(0); int n; cin >> n; string a; string b; cin >> b; cin >> a; vector csrc; vector msrc; vector cm; vector mc; vector csink; vector msink; for(int i = 0; i < n; i++) { if(a[i] == 'C' && b[i] == '-') csrc.push_back(i+1); if(a[i] == 'M' && b[i] == '-') msrc.push_back(i+1); if(a[i] == 'C' && b[i] == 'M') mc.push_back(i+1); if(a[i] == 'M' && b[i] == 'C') cm.push_back(i+1); if(a[i] == '-' && b[i] == 'C') csink.push_back(i+1); if(a[i] == '-' && b[i] == 'M') msink.push_back(i+1); } char me = '-'; vector commands; while(mc.size() || cm.size() || csink.size() || msink.size()) { if(me == '-') { if(csrc.size()) { commands.push_back("DRIVE " + to_string(csrc.back())); commands.push_back("PICKUP"); csrc.pop_back(); me = 'C'; continue; } if(msrc.size()) { commands.push_back("DRIVE " + to_string(msrc.back())); commands.push_back("PICKUP"); msrc.pop_back(); me = 'M'; continue; } } if(me == 'C') { if(cm.size()) { commands.push_back("DRIVE " + to_string(cm.back())); commands.push_back("DROPOFF"); commands.push_back("PICKUP"); cm.pop_back(); me = 'M'; continue; } if(csink.size()) { commands.push_back("DRIVE " + to_string(csink.back())); commands.push_back("DROPOFF"); csink.pop_back(); me = '-'; continue; } if(msrc.size()) { commands.push_back("DRIVE " + to_string(msrc.back())); commands.push_back("DROPOFF"); commands.push_back("PICKUP"); msrc.pop_back(); me = 'M'; continue; } } if(me == 'M') { if(mc.size()) { commands.push_back("DRIVE " + to_string(mc.back())); commands.push_back("DROPOFF"); commands.push_back("PICKUP"); mc.pop_back(); me = 'C'; continue; } if(msink.size()) { commands.push_back("DRIVE " + to_string(msink.back())); commands.push_back("DROPOFF"); msink.pop_back(); me = '-'; continue; } if(csrc.size()) { commands.push_back("DRIVE " + to_string(csrc.back())); commands.push_back("DROPOFF"); commands.push_back("PICKUP"); csrc.pop_back(); me = 'C'; continue; } } } if(commands.size() && commands.back() == "PICKUP") commands.pop_back(); cout << commands.size() << "\n"; for(string cmd : commands) cout << cmd << "\n"; }