AT_abc166_f [ABC166F] Three Variables Game

Description

[problemUrl]: https://atcoder.jp/contests/abc166/tasks/abc166_f あるゲームでは $ 3 $ つの変数があり、それぞれ $ A,B,C $ で表されます。 ゲームの進行と共に、あなたは $ N $ 回の選択に迫られます。 それぞれの選択は文字列 $ s_i $ によって示され、 $ s_i $ が `AB` のとき、$ A $ と $ B $ のどちらかに $ 1 $ を足しもう一方から $ 1 $ を引くこと、 `AC` のとき、$ A $ と $ C $ のどちらかに $ 1 $ を足しもう一方から $ 1 $ を引くこと、 `BC` のとき、$ B $ と $ C $ のどちらかに $ 1 $ を足しもう一方から $ 1 $ を引くことを意味します。 いずれの選択の後にも、$ A,B,C $ のいずれも負の値になってはいけません。 この条件を満たしつつ $ N $ 回すべての選択を終えることが可能であるか判定し、可能であるならそのような選択方法をひとつ示してください。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ N $ $ A $ $ B $ $ C $ $ s_1 $ $ s_2 $ $ : $ $ s_N $

Output Format

条件を満たしつつ $ N $ 個すべての選択を終えることが可能である場合は `Yes` を、そうでない場合は `No` を出力せよ。 加えて、前者の場合は続く $ N $ 行に選択方法を示せ。$ i+1 $ 行目には $ i $ 回目の選択で $ 1 $ を足す変数の名前 (`A`, `B`, `C` のいずれか) を出力せよ。

Explanation/Hint

### 制約 - $ 1\ \leq\ N\ \leq\ 10^5 $ - $ 0\ \leq\ A,B,C\ \leq\ 10^9 $ - $ N,\ A,\ B,\ C $ は整数である。 - $ s_i $ は `AB`, `AC`, `BC` のいずれか ### Sample Explanation 1 次のようにすることで $ 2 $ 回すべての選択を終えることができます。 - $ 1 $ 回目の選択では、$ A $ に $ 1 $ を足し $ B $ から $ 1 $ を引く。$ A $ の値が $ 2 $ に、$ B $ の値が $ 2 $ に変化する。 - $ 2 $ 回目の選択では、$ C $ に $ 1 $ を足し $ A $ から $ 1 $ を引く。$ C $ の値が $ 1 $ に、$ A $ の値が $ 1 $ に変化する。