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 C# (judge verdict: Accepted)

using System;
using System.Linq;
using System.Collections.Generic;

class MyClass
{
    public static bool CheckA(string str)
    {
        if (!str.StartsWith(">\'"))
        {
            return false;
        }
        var bodylen1 = 0;
        var bodylen2 = 0;
        var i = 2;

        try
        {
            while (str[i] == '=')
            {
                bodylen1++;
                i++;
            }
            if (bodylen1 == 0 || str[i] != '#')
            {
                return false;
            }
            i++;
            while (str[i] == '=')
            {
                bodylen2++;
                i++;
            }
            return bodylen1 == bodylen2 && str[i] == '~' && i == str.Length - 1;
        }
        catch { return false; }
    }

    public static bool CheckB(string str)
    {
        if (!str.StartsWith(@">^") || !str.EndsWith("~~"))
        {
            return false;
        }
        var bodylen = 0;
        var i = 2;

        try
        {
            while (str[i] == 'Q' && str[i + 1] == '=')
            {
                bodylen++;
                i += 2;
            }
            return bodylen >= 1 && i == str.Length - 2;
        }
        catch { return false; }
    }

    public static void Main(string[] args)
    {
        var n = int.Parse(Console.ReadLine());
        for (int i = 0; i < n; i++)
        {
            var str = Console.ReadLine();
            Console.WriteLine(CheckA(str) ? "A" : CheckB(str) ? "B" : "NA");
        }
    }
}