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:
/*package whatever //do not write package name here */

import java.util.*;
import java.math.*;
import java.io.*;

public class GFG {
   static int bl;
    static class pair{
        int a,b,c;
        pair(int f,int s,int d){
            a=f;
            b=s;
            c=d;
        }
        public String toString(){
            return a+" "+b;
        }
    }
	public static void main (String[] args) {
		int t=1,i,j,k,n;
		long m;
		FastReader sc=new FastReader();
	//	seive(5000);
	//	System.out.println(pr);
	//	t=sc.nextInt();
		while(t-->0){
		   n=sc.nextInt();
		   int a[]=new int[n];
		   int c[]=new int[105];
		   int f=0,g=0;
		   StringBuffer an=new StringBuffer("");
		    for(i=0;i<n;i++){
		        a[i]=sc.nextInt();
		        c[a[i]]++;
		        an.append('A');
		    }
		    for(i=0;i<105;i++){
		        if(c[i]==1){
		            f++;
		        }
		        if(c[i]>2){
		            g++;
		        }
		    }
		    if((f&1)==0){
		        System.out.println("YES");
		        i=0;k=0;
		        f>>=1;
		        while(k!=f){
		            if(c[a[i]]==1){
		                an.replace(i,i+1,"B");
		                k++;
		            }
		            i++;
		        }
		        System.out.println(an);
		    }else{
		        if(g==0)
		            System.out.println("NO");
		        else{
		            System.out.println("YES");
    		        i=0;k=0;
    		        f>>=1;
    		        while(k!=f){
    		            if(c[a[i]]==1){
    		                an.replace(i,i+1,"B");
    		                k++;
    		            }
    		            i++;
    		        }
    		        for(i=0;i<n;i++){
    		            if(c[a[i]]>2){
    		                an.replace(i,i+1,"B");
    		                break;
    		            }
    		        }
    		        System.out.println(an);
		        }
		    }
		    
		   
		}
		
	}
	static class FastReader 
    { 
        BufferedReader br; 
        StringTokenizer st; 
  
        public FastReader() 
        { 
            br = new BufferedReader(new
                     InputStreamReader(System.in)); 
        } 
  
        String next() 
        { 
            while (st == null || !st.hasMoreElements()) 
            { 
                try
                { 
                    st = new StringTokenizer(br.readLine()); 
                } 
                catch (IOException  e) 
                { 
                    e.printStackTrace(); 
                } 
            } 
            return st.nextToken(); 
        } 
  
        int nextInt() 
        { 
            return Integer.parseInt(next()); 
        } 
  
        long nextLong() 
        { 
            return Long.parseLong(next()); 
        } 
  
        double nextDouble() 
        { 
            return Double.parseDouble(next()); 
        } 
  
        String nextLine() 
        { 
            String str = ""; 
            try
            { 
                str = br.readLine(); 
            } 
            catch (IOException e) 
            { 
                e.printStackTrace(); 
            } 
            return str; 
        } 
    } 
}