Problem: Vasya has a multiset s consisting of n integer numbers. Vasya calls some number x nice if it appears in the multiset exactly once. For example, multiset \{1, 1, 2, 3, 3, 3, 4\} contains nice numbers 2 and 4.

Vasya wants to split multiset s into two multisets a and b (one of which may be empty) in such a way that the quantity of nice numbers in multiset a would be the same as the quantity of nice numbers in multiset b (the quantity of numbers to appear exactly once in multiset a and the quantity of numbers to appear exactly once in multiset b).

Input

The first line contains a single integer n~(2 ≤ n ≤ 100).

The second line contains n integers s_1, s_2, ... s_n~(1 ≤ s_i ≤ 100) — the multiset s.

Output

If there exists no split of s to satisfy the given requirements, then print "NO" in the first line.

Otherwise print "YES" in the first line.

The second line should contain a string, consisting of n characters. i-th character should be equal to 'A' if the i-th element of multiset s goes to multiset a and 'B' if if the i-th element of multiset s goes to multiset b. Elements are numbered from 1 to n in the order they are given in the input.

If there exist multiple solutions, then print any of them.

Examples

Input

4
3 5 7 1


Output

YES
BABA


Input

3
3 5 1


Output

NO

Solution (in JAVA):

Solution:
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;

public class Solution {


    private static final Scanner sc = new Scanner(System.in);

    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
        
        int n = sc.nextInt();
        int[] s = new int[n];
        for (int i=0; i<n; ++i)
            s[i] = sc.nextInt();
        int[] counts = new int[101];
        for (int i=0; i<n; ++i){
            counts[s[i]]++;
        }
        int ones = 0;
        int ms = 0;
        for (int i=0; i<101; ++i){
            if (counts[i]==1)
                ones++;
            if (counts[i]>2)
                ms++;
        }
        if (ones%2==1 && ms==0){
            System.out.println("NO");
            return;
        }
        
        char[] ans = new char[n];
        boolean mdone = false;
        char cur = 0;
        for (int i=1; i<101; ++i){
            int cc = 0;
            if (ones%2==1){
                for (int k=0; k<n; ++k){
                    if (s[k]==i){
                        if (counts[i] == 1){
                            ans[k] = (char)('A'+cur);
                            cur++;
                            cur%=2;
                        }
                        if (counts[i]==2){
                            ans[k] = 'A';
                        }
                        if (counts[i]>2){
                            if (!mdone){
                                if (cc==0){
                                    cc++;
                                    ans[k] = (char)('A'+cur);
                                } else {
                                    ans[k] = (char)('A'+ (cur+1)%2);
                                }
                            } else {
                                ans[k] = 'A';
                            }
                        }
                    }
                }
                if (!mdone && counts[i]>2){
                    mdone = true;
                    cur++;
                    cur%=2;
                }
            } else {
                for (int k=0; k<n; ++k){
                    if (s[k]==i){
                        if (counts[i] == 1){
                            ans[k] = (char)('A'+cur);
                            cur++;
                            cur%=2;
                        } else {
                            ans[k] = 'A';
                        }
                    }
                }
            }
        }
        
        System.out.println("YES");
        for (int i=0; i<n; ++i){
            System.out.print(ans[i]);
        }
        System.out.println();
        
        
        /*
        int t = sc.nextInt();
        for (int tt=0; tt<t; ++tt){
            String s = sc.next();
            int cu = 0;
            int cl = 0;
            int cd = 0;
            for (int i=0; i<s.length(); ++i){
                char c = s.charAt(i);
                if (c>='a' && c<='z')
                    cu++;
                if (c>='A' && c<='z')
                    cl++;
                if (c>='0' && c<= '9')
                    cd++;
            }
            if (cu>0){
                if (cl>0){
                    if (cd>0){
                        System.out.println(s);
                    } else {
                        int ccu = 0;
                        int ccl = 0;
                        for (int i=0; i<s.length(); ++i){
                            if (Character.isLowerCase(s.charAt(i))){
                                if (ccl>0){
                                    System.out.print(s.substring(0,i));
                                    System.out.print(1);
                                    System.out.print(s.substring(i+1));
                                    System.out.println();
                                } else
                                    ccl++;
                            } else {
                                if (ccu>0){
                                    System.out.print(s.substring(0,i));
                                    System.out.print(1);
                                    System.out.print(s.substring(i+1));
                                    System.out.println();
                                } else
                                    ccu++;
                                    
                            }
                        }
                    }
                }
            }
            
        }

        */
        bw.close();

        sc.close();
    }
}