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.BigInteger;
import java.util.*;
	
	
public class Main {

	static Scanner in;
//	static StreamTokenizer in;
//	static int nextInt() throws IOException {
//		in.nextToken();
//		return (int)in.nval;
//		
//	}
//	static String nextString() throws IOException {
//		in.nextToken();
//		return in.sval;
//		
//	}
 	static PrintWriter out;
 	static Random rand = new Random();
 	static long gcd(long a, long b) {
 		BigInteger q = BigInteger.valueOf(a);
 		BigInteger w = BigInteger.valueOf(b);
 		q = q.gcd(w);
		return q.longValue();
 	}

	public static void main(String args[]) throws IOException {
//		in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		out = new PrintWriter(System.out);
	    in = new Scanner(System.in);
	    int n = in.nextInt();
	    int[] a = new int[n];
	    int[ ]c = new int[101];
	    for(int i =0;i<n;i++) {
	    	a[i] = in.nextInt();
	    	c[a[i]]++;
	    }
	    int flag = -1;
	    int count = 0;
	    for(int i =0;i<c.length;i++) {
	    	if(c[i]==1) count++;
	    	if(c[i]>2) {
	    		flag = i;
	    	}
	    }
	    boolean pos = false;
	    if(count%2==1&flag==-1) {
	    	System.out.println("NO");
	    	return;
	    }
	    System.out.println("YES");
	    for(int i =0;i<n;i++) {
	    	if(c[a[i]]==1&&pos) {
	    		System.out.print("B");
	    		pos = false;
	    	}else if(c[a[i]]==1) {
	    		System.out.print("A");
	    		pos = true;
	    	}else if(a[i]==flag&&count%2==1) {
	    		System.out.print("B");
	    		flag = -1;
	    	}else {
	    		System.out.print("A");
	    	}
	    	
	    	
	    }
	}
}
	
class Pair implements Comparable{
	int a;
	int b;
	public Pair() {
		this.a=0;
		this.b=0;
	}
	public Pair(int a, int b) {
		this.a=a;
		this.b=b;
	}
	public int compareTo(Object arg0) {
		return Integer.compare(this.a, ((Pair)arg0).a);
	}
	
}