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

import scala.io.StdIn.{readInt,readLine}
  
object Main {

  def find(s:String) = {
    if(s.length<6) "NA"
    else if(s(0)=='>') {
      if(s(1) == ''') { // maybeA
        var isA = true
        val s2 = s.drop(2).dropRight(1)
        if(s2(s2.length/2) != '#') isA = false
        else {
          val s3 = s2.split("#")
          if(s3(0)!=s3(1) || s3(0).exists(_!='=')) isA = false
        }
        if(isA && s(s.length-1)=='~') "A" else "NA"
      } else if (s(1) == '^') { // maybeB
        var isB = true
        for(i<-2 until s.length-2 by 2) {
          if(s(i)!='Q' || s(i+1)!='=') {
            isB = false
          }
        }
        if(isB && s(s.length-2)=='~' && s(s.length-1)=='~') "B" else "NA"
      } else {
        "NA"
      }
    } else "NA"
  }

  def main(args:Array[String]) = {
    val n = readInt
    for(i<-1 to n) {
      val s = readLine.trim
      println(find(s))
    }
  }
}