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: Wrong Answer)

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

namespace ConsoleApplication1
{
    class Program
    {
        static readonly string NA = "NA";

        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();

            int n = int.Parse(Console.ReadLine());

            while (n-- > 0)
            {
                string s = Console.ReadLine();

                string head = s.Substring(0, 2);

                switch (head)
                {
                    case ">'":
                        sb.AppendLine(CheckA(s));
                        break;
                    case ">^":
                        sb.AppendLine(CheckB(s));
                        break;
                    default:
                        sb.AppendLine("NA");
                        break;
                }
            }
            Console.Write(sb);
        }

        static string CheckA(string s)
        {
            if (s[s.Length - 1] != '~') return NA;

            string temp = s.Substring(2, s.Length - 3);

            string[] t = temp.Split('#');

            if (t.Length != 2 || t[0].Length != t[1].Length) return NA;

            for (int i = 0; i < t[0].Length; i++)
            {
                if (t[0][i] != '=') return NA;
                if (t[1][i] != '=') return NA;
            }
            return "A";
        }

        static string CheckB(string s)
        {
            string tale = s.Substring(s.Length - 2, 2);

            if (tale != "~~") return NA;

            string temp = s.Substring(2, s.Length - 4);

            if (temp.Length % 2 != 0) return NA;

            for (int i = 0; i < temp.Length; i += 2)
            {
                string t = temp.Substring(i, 2);

                if (t != "Q=") return NA;
            }
            return "B";
        }
    }
}