public class Main {

    // 遍历到第k个国家，还有n个空位
    public static void f(int[] a, int k, int n, String s) {
        if (k == a.length) {// 超过国家数
            if (n == 0)// 选满5个人
                System.out.println(s);
            return;
        }
        if (n < 0)
            return;

        String s2 = s;
        // 第k个国家出i个人
        for (int i = 0; i <= a[k]; i++) {// a[k]表示第k个国家最多可以派出的人数
            f(a, k + 1, n - i, s2);// 轮到下一个国家，空缺人数少了i个
            s2 += (char) (k + 'A');
        }
    }

    public static void main(String[] args) {
        int[] a = { 4, 2, 2, 1, 1, 3 };
        f(a, 0, 5, "");// 5是指选5个人
    }
}