#include<bits/stdc++.h>
using namespace std ;
#define F first
#define S second
const int T = 1005 ;
const int ABCD = 1e8+5 ;
const int INF = 1e9 ;
int t , A , B , C , D ;
string s ;
set<pair<int,int>> dn={{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2}} , dk={{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}} , dp={{1,0}} ;
int disb(int x , int y , int flag){
if(!flag || ((abs(x)+abs(y))&1)) return INF ;
return 2-(abs(x)==abs(y)) ;
}
int disn(int x , int y , int flag){
if(!flag) return INF ;
;
}
int disk(int x , int y , int flag){
if(!flag) return INF ;
return max(abs(x),abs(y)) ;
}
int disp(int x , int y , int flag){
if(!flag) return INF ;
if(x>=0 && y==0) return x ;
else return INF ;
}
void solve(){
cin >> s >> A >> B >> C >> D ;
int x = C-A , y = D-B , q = 0 , r = 0 , b = 0 , n = 0 , k = 0 , p = 0 , ans = INF ;
for(int i=0 ; i<s.size() ; i++) q|=(s[i]=='Q') , r|=(s[i]=='R') , b|=(s[i]=='B') , n|=(s[i]=='N') , k|=(s[i]=='K') , p|=(s[i]=='P') ;
if(q && (x==0 || y==0 || abs(x)==abs(y))) ans = 1 ;
else if(r && (x==0 || y==0)) ans = 1 ;
else if(b && abs(x)==abs(y)) ans = 1 ;
else if(n && dn.find({x,y})!=dn.end()) ans = 1 ;
else if(k && dk.find({x,y})!=dk.end()) ans = 1 ;
else if(p && dp.find({x,y})!=dp.end()) ans = 1 ;
else if(q || r) ans = 2 ;
if(ans!=INF){ cout << ans << '\n' ; return ; }
ans = min({disb(x,y,b),disn(x,y,n),disk(x,y,k),disp(x,y,p)}) ;
if(n) for(auto it:dn) ans = min({ans,disb(x-it.F,y-it.S,b),disk(x-it.F,y-it.S,k),disp(x-it.F,y-it.S,p)}) ;
if(k) for(auto it:dk) ans = min({ans,disb(x-it.F,y-it.S,b),disn(x-it.F,y-it.S,n),disp(x-it.F,y-it.S,p)}) ;
if(p) for(auto it:dp) ans = min({ans,disb(x-it.F,y-it.S,b),disn(x-it.F,y-it.S,n),disk(x-it.F,y-it.S,k)}) ;
if(ans==INF) ans = -1 ;
cout << ans << '\n' ;
}
int main(){
cin >> t ;
while(t--) solve() ;
return 0 ;
}