Language: C++

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

/* 解説に倣って作ってみた */

int main(){

    int n;             // n回の選択 1< = n =< 10^5
    map<char, ll> mp;  // 0 =< A,B,C =< 10^9
    cin >> n >> mp['A'] >> mp['B'] >> mp['C'];

    char now[2], next[2]; // 制約としてAB AC BC しかない
    string si;
    string jdg = "Yes";
    //char ans[n];
    vector<char> ans;
    bool flag = true;

    cin >> si;
    now[0] = si.at(0);
    now[1] = si.at(1);

    if(n == 1){ //選択が1回の時はここで済ます
        if(mp[now[0]]>0){
            mp[now[0]]--;
            mp[now[1]]++;
            ans.push_back(now[1]);        
        }else if(mp[now[1]]>0){
            mp[now[1]]--;
            mp[now[0]]++;
            ans.push_back(now[0]);
        }else{
            jdg = "No";
        }
        flag = false;
    }else if(mp['A'] + mp['B'] + mp['C'] == 0){
        jdg = "No";
        flag = false;
    }
        
    for(int i=0; i<n-1 && flag; i++){
        cin >> si;
        next[0] = si.at(0);
        next[1] = si.at(1);
        /* この中では判定不要
        if(mp['A'] + mp['B'] + mp['C'] == 0){
            jdg = "No";
            flag = false;
        }
        */
       
        if(mp[now[0]]==0 && mp[now[1]]==0){
            jdg = "No";
            flag = false;
        }else if(mp[now[0]]==0){
            mp[now[0]]++;
            mp[now[1]]--;
            ans.push_back(now[0]);
        }else if(mp[now[1]]==0){
            mp[now[1]]++;
            mp[now[0]]--;
            ans.push_back(now[1]);
        }else if(mp[now[0]]==1 && mp[now[1]]==1){
            if(now[0] == next[0] && now[1] == next[1]){
                mp[now[0]]++; //ここはどちらでもよい
                mp[now[1]]--;
                ans.push_back(now[0]);
            } else{
                if(now[0] == next[0]){ //つまりAが重複
                    mp['A']++;
                    mp[now[1]]--;
                    ans.push_back('A');
                }else if(now[1] == next[1]){//つまりCが重複
                    mp['C']++;
                    mp[now[0]]--;
                    ans.push_back('C');
                }else{
                    mp['B']++;
                    ans.push_back('B');
                    if(now[0] == 'B'){
                        mp[now[1]]--;
                    }else{
                        mp[now[0]]--;
                    }
                }

            }
        }else{
            mp[now[0]]++; //ここはどちらでもよい
            mp[now[1]]--;
            ans.push_back(now[0]);
        }

        now[0] = next[0];
        now[1] = next[1];
    }

    //最終ターン
    if(mp[now[0]]>0){
            mp[now[0]]--;
            mp[now[1]]++;
            ans.push_back(now[1]);        
        }else if(mp[now[1]]>0){
            mp[now[1]]--;
            mp[now[0]]++;
            ans.push_back(now[0]);
        }else{
            jdg = "No";
    }

    cout << jdg << endl;
    if(jdg == "Yes"){
        for(int i=0; i<ans.size(); i++){
            cout << ans.at(i) << endl;
        }

    }

    cout
 
    return 0;
}

Compiler output:
a.cc: In function 'int main()':
a.cc:120:9: error: expected ';' before 'return'
  120 |     cout
      |         ^
      |         ;
  121 | 
  122 |     return 0;
      |     ~~~~~~