Problem:
ヘビ

ある世界には，文字だけでできた不思議なヘビが住んでいます。このヘビには現在A種とB種の2種類が確認されていますが、それ以外の種類がいる可能性もあります。

A種は，">'"の後に"="が1個以上並んだ後、"#"が来て、さらに前と同じ個数の"="が来た後、"~"（半角チルダ）で終わります。

B種は，">^"の後に "Q="が1個以上並んだ後、"~~"で終わります。

A種の例： >'====#====~ >'==#==~

B種の例： >^Q=Q=Q=Q=~~ >^Q=Q=~~

ヘビを文字列データとして受け取り、それがどんな種類であるかを判別して、A種の場合は「A」、B種の場合は「B」、それ以外の種類の場合は「NA」を出力するプログラムを作成してください。

Input

入力は以下の形式で与えられます。

n
S1
S2
:
Sn

1 行目に判別されるヘビの数 n（1 ≤ n ≤ 10000）、続く n 行に i 匹目のヘビを表す文字列 Si (200文字以下の、空白を含まない文字列) がそれぞれ１行に与えられます。

Output

i 行目に i 匹目のヘビの種類 A、B または NA を出力してください。

Sample Input

3
>'======#======~
>^Q=Q=Q=Q=Q=Q=Q=Q=Q=~~
>'===#====~

Output for the Sample Input

A
B
NA

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.Scanner;


public class Main {

	/**
	 * @param args
	 */
	
	int solve(String str)
	{
		final int HEAD=0;
		final int EYE_A=1;
		final int EYE_B=2;
		final int BODY_A1=3;
		final int BODY_A2=4;
		final int BODY_B=5;
		final int STOMACH_A=6;
		final int TAIL_A=7;
		final int TAIL_B=8;
		
		int state=-1;
		int count=0;
		for(int i=0;i<str.length();++i)
		{
			switch(str.charAt(i))
			{
			case '>':
				if(state==-1){state=HEAD;}
				else{return 2;}
				break;
			case '\'':
				if(state==HEAD){state=EYE_A;}
				else{return 2;}
				break;
			case '^':
				if(state==HEAD){state=EYE_B;}
				else{return 2;}
				break;
			case 'Q':
				if(state==EYE_B){state=BODY_B;}
				if(state!=BODY_B||str.charAt(++i)!='='){return 2;}
				break;
			case '=':
				if(state==EYE_A||state==BODY_A1){state=BODY_A1;++count;}
				else if(state==STOMACH_A||state==BODY_A2){state=BODY_A2;--count;}
				else{return 2;}
				break;
			case '#':
				if(state==BODY_A1){state=STOMACH_A;}
				else{return 2;}
				break;
			case '~':
				if(state==BODY_A2&&count==0){state=TAIL_A;}
				else if(state==BODY_B){state=TAIL_B;count=1;}
				else if(state==TAIL_B){++count;}
				else{return 2;}
			}
		}
		if(state==TAIL_B&&count!=2)return 2;

		return state==TAIL_A?0:1;
	}
	
	void io()
	{
		Scanner sc = new Scanner(System.in);
		
		int n=sc.nextInt();
		
		for(int i=0;i<n;++i)
		{
			String str=sc.next();
			switch(solve(str))
			{
			case 0:
				System.out.println('A');
				break;
			case 1:
				System.out.println('B');
				break;
			case 2:
				System.out.println("NA");
				break;
			}
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Main().io();
	}

}