#include using namespace std; #define rep(i,a,b) for (int i = a; i < b; i++) #define trav(a,b) for (auto a : b) #define all(x) begin(x),end(x) #define lld long long string c,p; int deg[3]; map m; vector > nei[3][3]; vector euler(const vector< vector >& g, int n, int s) { vector ans, idx(n, 0), st; st.push_back(s); while (!st.empty()) { int u = st.back(); if (idx[u] < (int) g[u].size()) st.push_back(g[u][idx[u]]), ++idx[u]; else ans.push_back(u), st.pop_back(); } reverse(ans.begin(), ans.end()); return ans; } int ptr[3][3]; vector >gr; void Solve() { int n; cin>>n; cin>>c>>p; m['-']=0; m['C']=1; m['M']=2; rep(i,0,n){ if(c[i]!=p[i]){ deg[m[c[i]]]--; deg[m[p[i]]]++; nei[m[c[i]]][m[p[i]]].push_back({(m[p[i]]!=0)&(m[c[i]]!=0),i}); } } rep(j,0,3){ rep(k,0,3){ sort(nei[j][k].begin(),nei[j][k].end()); } } //cout<0){ bool el=false; rep(j,0,3){ if(nei[j][k].size()>0 && nei[j][k][nei[j][k].size()-1].first==1){ //cout<0){ //cout< ans=euler(gr,3,0); int sz=0; rep(i,0,(int)ans.size()-1){ int u=ans[i]; int v=ans[i+1]; int idx=nei[u][v][ptr[u][v]].second; ptr[u][v]++; // cout<> tt; while (tt--) Solve(); return 0; }