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.util.*;
public class CodeforcesFunctionHeight {

	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int s[] = new int[n];
		char ans[] = new char[n];
		
		HashSet<Integer> single = new HashSet<Integer>();
		
		int count[] = new int[101];
		
		for(int i = 0; i<n; i++)
		{
			s[i] = in.nextInt();
			count[s[i]]++;
		}
		
		int max = -1;
		for(int i = 1; i<=100; i++)
			max = Math.max(max, count[i]);
		
		int count_s = 0;
		for(int i = 1; i<=100; i++)
		{
			if(count[i] == 1)
			{
				count_s++;
				single.add(i);
			}
		}
		
		if(count_s%2 == 0)
		{
			int flag = single.size()/2;
			for(int x : single)
			{
				if(flag == 0)
					break;
				
				else
				{
					for(int i = 0; i<n; i++)
					{
						if(s[i] == x)
							ans[i] = 'A';
					}
					flag--;
				}
			}
			
			for(int i = 0; i<n; i++)
			{
				if(ans[i] != 'A')
					ans[i] = 'B';
			}
			
			System.out.println("YES");
			System.out.println(String.valueOf(ans));
		}
		
		else if(count_s%2 != 0)
		{
			if(max <= 2)
				System.out.println("NO");
			
			else
			{
				int flag = single.size()/2;
				for(int x : single)
				{
					if(flag == 0)
						break;
					
					else
					{
						for(int i = 0; i<n; i++)
						{
							if(s[i] == x)
								ans[i] = 'A';
						}
						flag--;
					}
				}
				
				for(int i = 1; i<=100; i++)
				{
					if(count[i] > 2)
					{
						for(int j = 0; j<n; j++)
						{
							if(s[j] == i)
							{
								ans[j] = 'A';
								break;
							}
						}
						break;
					}
				}
				
				for(int i = 0; i<n; i++)
				{
					if(ans[i] != 'A')
						ans[i] = 'B';
				}
				
				System.out.println("YES");
				System.out.println(String.valueOf(ans));			
			}			
			
		}
		in.close();

		}

}