#include #define int long long using namespace std; string to_string(string s) { return s; } template string to_string(T v) { string res = "["; for (const auto &x : v) { res += to_string(x) + ", "; } res += "]"; return res; } void dbg_out() { cout << endl; } template void dbg_out(Head H, Tail... T) { cout << ' ' << to_string(H); dbg_out(T...); } #ifdef DEBUG #define dbg(...) cout << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__) #else #define dbg(...) #endif using ll = long long; using vi = vector; #define rep(i, a, b) for (int i = (a); i < (b); ++i) #define all(v) (v).begin(), (v).end() #define sz(v) ((int)(v).size()) const int VIDE = 0; const int M = 1; const int C = 2; vector nb[3][3]; int to_const(char c) { if (c == '-') return VIDE; if (c == 'M') return M; if (c == 'C') return C; return VIDE; } bool fini() { return (nb[VIDE][C].size() == 0 ) && (nb[VIDE][M].size() == 0) && (nb[M][C].size() == 0) && (nb[C][M].size() == 0); } bool need_C() { return (nb[VIDE][C].size() > 0) || (nb[M][C].size() > 0); } bool need_M() { return (nb[VIDE][M].size() > 0) || (nb[C][M].size() > 0); } const int DRIVE = 5; const int PICKUP = 6; const int DROPOFF = 7; vector > sol; void peutM(); void peutC(); void rien(); void peutC() { if (nb[M][C].size() > 0) { sol.push_back({PICKUP, 0}); sol.push_back({DRIVE, nb[M][C].back()}); nb[M][C].pop_back(); sol.push_back({DROPOFF,0}); peutM(); } else if (nb[VIDE][C].size () > 0) { sol.push_back({PICKUP , 0}); sol.push_back({DRIVE , nb[VIDE][C].back()}); nb[VIDE][C].pop_back(); sol.push_back({DROPOFF,0}); rien(); } else if (!fini()) assert(false); } void peutM() { if (nb[C][M].size() > 0) { sol.push_back({PICKUP, 0}); sol.push_back({DRIVE, nb[C][M].back()}); nb[C][M].pop_back(); sol.push_back({DROPOFF,0}); peutC(); } else if (nb[VIDE][M].size () > 0) { sol.push_back({PICKUP , 0}); sol.push_back({DRIVE , nb[VIDE][M].back()}); nb[VIDE][M].pop_back(); sol.push_back({DROPOFF,0}); rien(); } else if (!fini()) assert(false); } void rien() { if (!fini () && need_C() && nb[C][VIDE].size() > 0) { sol.push_back({DRIVE,nb[C][VIDE].back()}); nb[C][VIDE].pop_back(); peutC(); } else if (!fini() && need_M() && nb[M][VIDE].size() > 0) { sol.push_back({DRIVE,nb[M][VIDE].back()}); nb[M][VIDE].pop_back(); peutM(); } else if (!fini()) assert(false); } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); int N; cin >> N; string initial; string target; cin >> target >> initial; for (int i = 0 ; i < N ; i++) { nb[to_const(initial[i])][to_const(target[i])].push_back(i+1); } rien(); cout<