#include using namespace std; enum Op { DRIVE, PICKUP, DROPOFF }; int main() { cin.tie(NULL); ios::sync_with_stdio(false); string s1; string s2; int n; cin >> n; cin >> s1 >> s2; vector M, C, MC, CM, C_, M_; for (int i = 0; i < n; ++i) { if (s1[i] == '-' && s2[i] == 'C') C.push_back(i); if (s1[i] == '-' && s2[i] == 'M') M.push_back(i); if (s1[i] == 'M' && s2[i] == 'C') MC.push_back(i); if (s1[i] == 'C' && s2[i] == 'M') CM.push_back(i); if (s1[i] == 'C' && s2[i] == '-') C_.push_back(i); if (s1[i] == 'M' && s2[i] == '-') M_.push_back(i); } int last = -1; char tip; vector> v; while (!M.empty() || !C.empty() || last != -1) { if (last == -1) { if (!M.empty()) { last = M.back(); M.pop_back(); tip = 'M'; v.push_back({Op::DRIVE, last}); v.push_back({Op::PICKUP, 0}); } else if (!C.empty()) { last = C.back(); C.pop_back(); tip = 'C'; v.push_back({Op::DRIVE, last}); v.push_back({Op::PICKUP, 0}); } } else { if (tip == 'M') { if (!MC.empty()) { last = MC.back(); MC.pop_back(); tip = 'C'; v.push_back({Op::DRIVE, last}); v.push_back({Op::DROPOFF, 0}); v.push_back({Op::PICKUP, 0}); } else if (!M_.empty()) { last = -1; v.push_back({Op::DRIVE, M_.back()}); M_.pop_back(); v.push_back({Op::DROPOFF, 0}); } else { last = -1; v.pop_back(); } } else if (tip == 'C') { if (!CM.empty()) { last = CM.back(); CM.pop_back(); tip = 'M'; v.push_back({Op::DRIVE, last}); v.push_back({Op::DROPOFF, 0}); v.push_back({Op::PICKUP, 0}); } else if (!C_.empty()) { last = -1; v.push_back({Op::DRIVE, C_.back()}); C_.pop_back(); v.push_back({Op::DROPOFF, 0}); } else { last = -1; v.pop_back(); } } } } // if (!v.empty() && v.back().first == Op::PICKUP) // v.pop_back(); cout << v.size() << "\n"; for (auto it : v) { if (it.first == Op::DRIVE) cout << "DRIVE " << it.second + 1 << "\n"; else if (it.first == Op::PICKUP) cout << "PICKUP\n"; else cout << "DROPOFF\n"; } assert (C_.empty() && M_.empty() && MC.empty() && CM.empty()); return 0; }