#include #include #include #include #include #include #include #include #include #include #include #include #include //#include using namespace std; typedef long long ll; const ll INF = (1 << 30); const ll inf = (1LL << 60LL); const int maxn = 1e4 + 10; const ll MOD = 1e9 + 7; int A, B, C; int arr[maxn]; int main(int argc, const char * argv[]) { ios_base::sync_with_stdio(false); // ifstream cin("in.txt"); cin >> A >> B >> C; vector > even, odd; for(int i = 1; i <= A; i ++){ cin >> arr[i]; } int n = A + B + C; arr[0] = 0; arr[A + 1] = n + 1; for(int i = 1; i <= A + 1; i ++){ int from = arr[i - 1]; from ++; int to = arr[i]; to --; if(from > to) continue; if((to - from + 1) % 2 == 0){ even.push_back(make_pair(from, to)); } else{ odd.push_back(make_pair(from, to)); } } string ret = ""; ret += "/"; for(int i = 1; i <= n; i ++){ ret += "_"; } for(int i = 1; i <= A; i ++){ ret[arr[i]] = 'A'; } for(int i = 0; i < (int)even.size(); i ++){ int sz = even[i].second - even[i].first + 1; sz /= 2; if(B >= sz and C >= sz){ B -= sz; C -= sz; int F = 0; for(int j = even[i].first; j <= even[i].second; j ++){ if(F == 0){ ret[j] = 'B'; } else{ ret[j] = 'C'; } F ^= 1; } } else{ return 0 * printf("-1\n"); } } int sum = 0, sum2 = 0; int idx = -1; for(int i = 0; i < (int)odd.size(); i ++){ int sz = odd[i].second - odd[i].first + 1; int mxx = sz / 2 + 1; int mnn = sz / 2; sum += mxx; sum2 += mnn; int tmp_B = B; int tmp_C = C; tmp_B -= sum; tmp_C -= sum2; if(tmp_B < 0 || tmp_C < 0) continue; bool ok = true; for(int j = i + 1; j < (int)odd.size(); j ++){ sz = odd[j].second - odd[j].first + 1; mxx = sz / 2 + 1; mnn = sz / 2; if(tmp_C > tmp_B){ tmp_C -= mxx; tmp_B -= mnn; } else if(tmp_B >= tmp_C){ tmp_B -= mxx; tmp_C -= mnn; } if(tmp_B < 0 or tmp_C < 0){ ok = false; break; } } if(ok){ idx = i; } } for(int i =0; i <= idx; i ++){ int sz = odd[i].second - odd[i].first + 1; int mxx = sz / 2 + 1; int mnn = sz / 2; if(B >= mxx and C >= mnn){ B -= mxx; C -= mnn; int F = 0; for(int j = odd[i].first; j <= odd[i].second; j ++){ if(F == 0){ ret[j] = 'B'; } else{ ret[j] = 'C'; } F ^= 1; } } } // cout << idx << endl; for(int i = idx + 1; i < (int)odd.size(); i ++){ int sz = odd[i].second - odd[i].first + 1; int mxx = sz / 2 + 1; int mnn = sz / 2; if(B >= C){ B -= mxx; C -= mnn; if(B < 0 or C < 0) return 0 * printf("-1\n"); int F = 0; for(int j = odd[i].first; j <= odd[i].second; j ++){ if(F == 0){ ret[j] = 'B'; } else{ ret[j] = 'C'; } F ^= 1; } } else if(C > B){ B -= mnn; C -= mxx; if(B < 0 or C < 0) return 0 * printf("-1\n"); int F = 1; for(int j = odd[i].first; j <= odd[i].second; j ++){ if(F == 0){ ret[j] = 'B'; } else{ ret[j] = 'C'; } F ^= 1; } } else{ return 0 * printf("-1\n"); } } ret.erase(ret.begin()); cout << ret << endl; return 0; } // BABABCACACBC // BACABCACABCB