#include //#pragma GCC optimize("O3") //#define int long long using namespace std; #define rep(i, a, b) for(int i = a; i < (b); ++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() typedef long long ll; typedef pair pii; typedef vector vi; vector > Ans; vector svs[10]; /* 0 M C 1 C M 2 - C 3 - M 4 C - 5 M - */ void goCycle(int start) { // Starts at state "start" for (int id = start;; id++) { if (id % 2 != 0) { if (!svs[0].empty()) { Ans.push_back({"PICKUP", -1}); Ans.push_back({"DRIVE", svs[0].back()}); Ans.push_back({"DROPOFF", -1}); svs[0].pop_back(); continue; } else if (!svs[5].empty()) { Ans.push_back({"PICKUP", -1}); Ans.push_back({"DRIVE", svs[5].back()}); Ans.push_back({"DROPOFF", -1}); svs[5].pop_back(); break; } else { break; } } else { if (!svs[1].empty()) { Ans.push_back({"PICKUP", -1}); Ans.push_back({"DRIVE", svs[1].back()}); Ans.push_back({"DROPOFF", -1}); svs[1].pop_back(); continue; } else if (!svs[4].empty()) { Ans.push_back({"PICKUP", -1}); Ans.push_back({"DRIVE", svs[4].back()}); Ans.push_back({"DROPOFF", -1}); svs[4].pop_back(); break; } else { break; } } } } int n; string needs, profs; void solve() { for (int i = 0; i < 7; i++) svs[i].clear(); Ans.clear(); for (int i = 0; i < n; i++) { if (needs[i] == 'M' && profs[i] == 'C')svs[0].push_back(i + 1); else if (needs[i] == 'C' && profs[i] == 'M')svs[1].push_back(i + 1); else if (needs[i] == '-' && profs[i] == 'C')svs[2].push_back(i + 1); else if (needs[i] == '-' && profs[i] == 'M')svs[3].push_back(i + 1); else if (needs[i] == 'C' && profs[i] == '-')svs[4].push_back(i + 1); else if (needs[i] == 'M' && profs[i] == '-')svs[5].push_back(i + 1); } if (!svs[2].empty() && !svs[1].empty()) { Ans.push_back({"DRIVE", svs[2].back()}); Ans.push_back({"PICKUP", -1}); svs[2].pop_back(); Ans.push_back({"DRIVE", svs[1].back()}); Ans.push_back({"DROPOFF", -1}); svs[1].pop_back(); goCycle(1); } if (!svs[3].empty() && !svs[0].empty()) { Ans.push_back({"DRIVE", svs[3].back()}); Ans.push_back({"PICKUP", -1}); svs[3].pop_back(); Ans.push_back({"DRIVE", svs[0].back()}); Ans.push_back({"DROPOFF", -1}); svs[0].pop_back(); goCycle(0); } while (!svs[2].empty() && !svs[1].empty()) { Ans.push_back({"DRIVE", svs[2].back()}); Ans.push_back({"PICKUP", -1}); svs[2].pop_back(); Ans.push_back({"DRIVE", svs[1].back()}); Ans.push_back({"DROPOFF", -1}); svs[1].pop_back(); goCycle(1); } while (!svs[3].empty() && !svs[0].empty()) { Ans.push_back({"DRIVE", svs[3].back()}); Ans.push_back({"PICKUP", -1}); svs[3].pop_back(); Ans.push_back({"DRIVE", svs[0].back()}); Ans.push_back({"DROPOFF", -1}); svs[0].pop_back(); goCycle(0); } while (true) { if (svs[2].empty() || svs[4].empty())break; Ans.push_back({"DRIVE", svs[2].back()}); Ans.push_back({"PICKUP", -1}); svs[2].pop_back(); Ans.push_back({"DRIVE", svs[4].back()}); Ans.push_back({"DROPOFF", -1}); svs[4].pop_back(); } while (true) { if (svs[2].empty() || svs[1].empty())break; Ans.push_back({"DRIVE", svs[2].back()}); Ans.push_back({"PICKUP", -1}); svs[2].pop_back(); Ans.push_back({"DRIVE", svs[1].back()}); Ans.push_back({"DROPOFF", -1}); svs[1].pop_back(); } while (true) { if (svs[3].empty() || svs[5].empty())break; Ans.push_back({"DRIVE", svs[3].back()}); Ans.push_back({"PICKUP", -1}); svs[3].pop_back(); Ans.push_back({"DRIVE", svs[5].back()}); Ans.push_back({"DROPOFF", -1}); svs[5].pop_back(); } while (true) { if (svs[3].empty() || svs[0].empty())break; Ans.push_back({"DRIVE", svs[3].back()}); Ans.push_back({"PICKUP", -1}); svs[3].pop_back(); Ans.push_back({"DRIVE", svs[0].back()}); Ans.push_back({"DROPOFF", -1}); svs[0].pop_back(); } // if (!(svs[0].empty() && svs[1].empty() && svs[4].empty() && svs[5].empty())) { // cout << "BUGGGGGGGGGGGG" << endl; // cout << n << endl; // cout << needs << endl; // cout << profs << endl; // exit(1); // } assert (svs[0].empty() && svs[1].empty() && svs[4].empty() && svs[5].empty()); cout << Ans.size() << '\n'; for (auto [i, j] : Ans) { cout << i; if (j != -1)cout << " " << j; cout << '\n'; } } signed main(){ cin.tie(0); ios::sync_with_stdio(0); // srand(time(0)); // for (int id = 1; id <= 1000000; id++) { // n = 20; // profs = ""; // needs = ""; // while ((int)needs.size() < n) { // int cur = rand() % 3; // if (cur == 0)needs.push_back('-'); // if (cur == 1){needs.push_back('M');profs.push_back('M');} // if (cur == 2){needs.push_back('C');profs.push_back('C');} // } // while ((int)profs.size() < n) { // int cur = rand() % 3; // if (cur == 0)profs.push_back('-'); // if (cur == 1)profs.push_back('M'); // if (cur == 2)profs.push_back('C'); // } // random_shuffle(profs.begin(), profs.end()); // bool hv = false; // for (int i = 0; i < n; i++) { // if (profs[i] != '-' && needs[i] == '-') { // hv = true; // break; // } // } // if (!hv) continue; // // cout << n << endl; // // cout << needs << endl; // // cout << profs << endl; // solve(); // } cin >> n; cin >> needs; cin >> profs; solve(); return 0; } /* 10 CCCC--CMMM -CCCMM-CMC 6 C--CMM -MM-CC */