Go: package main

import (
	"bufio"
	"os"
	"strconv"
	"strings"
	"fmt"
)

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	scanner.Scan()
	n, _ := strconv.Atoi(scanner.Text())
	for i := 0; i < n; i++ {
		ans := "NA"
		scanner.Scan()
		s := scanner.Text()
		if s[:2]==">'" && s[len(s)-1:] == "~" {
			tmp := s[2:len(s)-1]
			t := strings.Split(tmp, "#")
			if len(t) == 2 && len(t[0]) > 0 {
				valid := true
				for _, v := range t[0] {
					if string(v) != "=" {
						valid = false
						break
					}
				}
				if valid && t[0] == t[1] {
					ans = "A"
				}
			}
		} else if s[:2] == ">^" && s[len(s)-2:] == "~~" {
			t := s[2:len(s)-2]
			if len(t) > 0 && len(t)%2 == 0 {
				valid := true
				for i := 0; i < len(t); i += 2 {
					if t[i:i+2] != "Q=" {
						valid = false
						break
					}
				}
				if valid {
					ans = "B"
				}
			}
 		}
		fmt.Println(ans)
	}
}

C++: #include <iostream>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <map>
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REP(i,b) FOR(i,0,b)
#define PB push_back
#define MP make_pair
int main(){
  int n;
  cin>>n;
  while(n--){
    int a=0,b=0,cnt[2]={0,0};
    string in;
    cin>>in;
    for(int i=0;i<in.size();i++){
      if(a==0&&in[i]=='>')a=1;
      if(a==1&&in[i]=='=')cnt[0]++;
      if(a==1&&in[i]=='#')a=2;
      if(a==2&&in[i]=='=')cnt[1]++;
      if(a==2&&in[i]=='~'&&i==in.size()-1)a=3;
    }
    for(int i=0;i<in.size();i+=2){
      if(b==0&&in[i]=='>'&&in[i+1]=='^')b=1;
      if(b==1&&in[i]=='Q'&&in[i+1]=='=')b=2;
      if(b==2&&in[i]=='~'&&in[i+1]=='~'&&i+1==in.size()-1)b=3;
    }
    if(a==3&&cnt[0]==cnt[1]){
      cout<<"A"<<endl;
    }else if(b==3){
      cout<<"B"<<endl;
    }else{
      cout<<"NA"<<endl;
    }
  }
}

C++: #include <bits/stdc++.h>
using namespace std;
#define REP(i,n) for(int i=0; i<(n); i++)
#define REP2(i,x,n) for(int i=x; i<(n); i++) 
#define ALL(n) begin(n),end(n)
struct cww{cww(){ios::sync_with_stdio(false);cin.tie(0);}}star;
int check( string S )
{
    //A
    if( S[ 0 ] == '>' && S[ 1 ] == '\'' && S[ S.size() - 1 ] == '~' && S.size() >= 6 )
    {
        S = S.substr( 2, S.size() - 3 );
        if( S.find_first_not_of( "#=", 0 ) != string::npos ) return 0;
        return S.substr( 0, S.find('#') ).size() == S.substr( S.find( '#' ) + 1, S.size() - 1 ).size() ? 1 : 0;
    }
    //B
    if( S[ 0 ] == '>' && S[ 1 ] == '^' && S[ S.size() - 1 ] == '~' && S[ S.size() - 2 ] == '~' && S.size() >= 6 )
    {
        S = S.substr( 2, S.size() - 4 );
        if( S.find_first_not_of( "Q=", 0 ) != string::npos || S.size() % 2 != 0 ) return 0;
        for( int i = 0; i < S.size(); i += 2 )
        {
            if( S[ i ] != 'Q' && S[ i + 1 ] != '=' ) return 0;
        }
        return 2;
    }
    return 0;
}
int main()
{
    int N;
    cin >> N;
    
    vector<string> res{ "NA", "A", "B" };
    string S;
    
    while( cin >> S )
    {
        cout << res[ check( S ) ] << endl;
    }
    return 0;
}

C++: #include <bits/stdc++.h>

using namespace std;

int main()
{
	int n;
	cin >> n;

	while(n--)
	{
		string str;
		string kp;
		string set;
		int flag=0;
		int count=0;
		int i=0;

		cin >> str;
		for(i=0;i<2;i++)kp+=str[i]++;
		
		if(kp==">'")
		{
			while(str[i]!='#')
			{
				if(str[i]=='=')count++;
				else flag=-1;

				if(flag==-1)break;
				i++;	
			}
			i++;
			while(str[i]!='~')
			{
				if(str[i]=='=')count--;
				else flag=-1;

				if(flag==-1)break;
				i++;
			}
			if(flag!=-1 && !count)flag=1;
		}
		else if(kp==">^")
		{
			while(i<str.length()-2)
			{
				count=2;
				while(count--)
				{
					set+=str[i];
					i++;
				}
				if(set=="Q=")flag=2;
				else flag=-1;

				set.erase(set.begin(),set.end());
				if(flag==-1)break;
			}

			for(i=str.length()-2;i<str.length();i++)set+=str[i];
			if(set=="~~")flag=2;
			else flag=-1;
		}

		if(flag==1) cout << "A" << endl;
		else if(flag==2)cout << "B" << endl;
		else cout << "NA" << endl;
	}
	
	return 0;
}

C++: #include<string>
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
    int N;
    cin>>N;
    while(N--){
        string str;
        cin>>str;
        bool Aflag,Bflag;
        Aflag=Bflag=true;
        if(str.substr(0,2)==">'")Bflag=false;
        else if(str.substr(0,2)==">^")Aflag=false;
        else Aflag=Bflag=false;

        if(Aflag){

            int p=str.find("#");
            if(p==str.npos){
                Aflag=false;
                break;
            }
            int cnt=0;
            for(int i=2;i<p;i++){
                if(str[i]=='='&&str[p+i-1]=='=')cnt++;
                else{
                    Aflag=false;
                    break;
                }
            }
            if(cnt==0)Aflag=false;
            
            if(str[cnt*2+3]=='~'&&str.length()==cnt*2+4);
            else Aflag=false;

        }

        if(Bflag){
            int p=2;
            while(str.substr(p,2)=="Q=")p+=2;
            if(p==2){
                Bflag=false;
            }
            if(str.substr(p,2)=="~~"&&str.length()==p+2);
            else Bflag=false;
        }
        if(Aflag)cout<<"A"<<endl;
        else if(Bflag)cout<<"B"<<endl;
        else cout<<"NA"<<endl;
    }
    return 0;
}

C++: #include "bits/stdc++.h"

using namespace std;

typedef vector<int> vi;
typedef pair<int,int> pii;
typedef long long ll;

#define dump(x)  cerr << #x << " = " << (x) << endl
#define rep(i,n) for(int i=0;i<(n);i++)
#define all(a)  (a).begin(),(a).end()
#define pb push_back

string solve(string s){
    if(s.substr(0,2)==">'"){
        int eq=0;
        for(int i=2;i<s.size();i++){
            if(s[i]!='=')break;
            else{
                eq++;
            }
        }
        
        if(eq==0)return "NA";
        
        if( s[ (2 + eq -1) +1 ] != '#')return "NA";
        
        if( s.substr( ((2+eq-1)+1) +1 ,eq )   !=   s.substr( 2,eq ) )return "NA";

        if( 2+eq+1+eq+1 == s.size() && s[ (2+eq+1+eq+1) -1 ]=='~')return "A";
        
    }else if(s.substr(0,2)==">^"){
        int c=2;
        while( s[c]=='Q' && s[c+1]=='=' ){
            c+=2;
        }
        if(c==2)return "NA";
        
        
        if( c+1==s.size()-1 && s[c]=='~' && s[c+1]=='~')return "B";
        else return "NA";
        
        
    }else return "NA";

    return "NA";
}


int main(){
    int n;
    cin>>n;
    rep(i,n){
        string s;
        cin>>s;
        
        cout<<solve(s)<<endl;
    }

    return 0;
}

C++: #include<iostream>
using namespace std;
int main()
{
  int n;
  for(cin>>n;n--;)
    {
      string s;
      cin>>s;
      string ans="NA";

	if(s.substr(0,2)==">'" &&s[s.size()-1]=='~')
	  {
	    string tmp=s.substr(2,s.size()-3);
	    //	  cout<<tmp<<endl;
	    if(tmp.size()%2!=0
	       && tmp.size()>1
	       && tmp[tmp.size()/2]=='#'
	       && tmp.substr(0,tmp.size()/2)==tmp.substr(tmp.size()/2+1,tmp.size()/2)
	       && tmp.substr(0,tmp.size()/2)==*(new string(tmp.size()/2,'=')))
		ans="A";
	  }
	else if(s.substr(0,2)==">^" && s.substr(s.size()-2,2)=="~~")
	  {
	    string tmp=s.substr(2,s.size()-4);
	    //	      cout<<tmp<<endl;
	    bool flag=false;
	    while(tmp.size()>0)
	      {
		if(tmp.substr(0,2)=="Q=")
		  {
		    tmp=tmp.substr(2,tmp.size()-2);
		    flag=true;
		  }
		else
		  break;
	      }
	    if(tmp.size()==0&&flag)
	      ans="B";	    
	    }
	  cout<<ans<<endl;
    }
}