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.io.*;
import java.util.*;

public class Main{
	public static void main(String[] args){
		try{
			new Main();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
	
	public Main() throws IOException{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		List<String> Ans = new ArrayList<String>();
		String line = in.readLine();
		
		int size = Integer.parseInt(line);
		for(int n=0; n<size; n++){
			line = in.readLine();
			int type = 0;
			
			String c = line.substring(0, 2);
			if(c.equals(">'")){
				int count = 0;
				int sharp = 0;
				for(int i=2; i<line.length(); i++){
					c = line.substring(i, i+1);
					if(c.equals("=")){
						count++;
					}
					else if(c.equals("#")){
						if(count > 0){
							count = -count;
							sharp = 1;
						}
						else{
							type = -1;
							break;
						}
					}
					else if(c.equals("~")){
						if(i != line.length()-1){
							type = -1;
							break;
						}
						
						if(count==0 && sharp==1){
							type = 1;
							break;
						}
						else{
							type = -1;
							break;
						}
					}
				}
			}
			else if(c.equals(">^")){
				int count = 0;
				for(int i=2; i<line.length(); i++){
					c = line.substring(i, i+1);
					if(count%2==0 && count>=2 && c.equals("~")){
						if(i==line.length()-1){
							type = -1;
							break;
						}
						
						c = line.substring(i+1, i+2);
						if(c.equals("~")){
							type = 2;
							break;
						}
						else{
							type = -1;
							break;
						}
					}
					if(i%2==0){
						if(!c.equals("Q")){
							type = -1;
							break;
						}
						count++;
					}
					if(i%2==1){
						if(!c.equals("=")){
							type = -1;
							break;
						}
						count++;
					}
				}
			}
			else{
				type = -1;
			}
			
			switch(type){
				case 1:
					Ans.add("A");
					break;
					
				case 2:
					Ans.add("B");
					break;
					
				default:
					Ans.add("NA");
			}
		}
		
		for(int n=0; n<Ans.size(); n++){
			System.out.println(Ans.get(n));
		}
	}
}