#include<bits/stdc++.h>
//#include<atcoder/all>
using namespace std;
//using namespace atcoder;
#define rep(i,n) for(ll i=0; i<n; i++)
#define rrep(i,n) for(ll i=n-1; i>=0; i--)
#define print(a) cout<<a<<endl
typedef long long ll;
#define yn(flg) if(flg){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}
#define YN(flg) if(flg){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}
#define so(a) sort(a.begin(),a.end())
#define mp make_pair
#define vi vector<int>
#define vl vector<ll>
#define vs vector<string>
#define pb push_back
#define a2i(a,s) (ll)(a-s)
#define i2a(s,a) (char)(s+a)
#define ssize(a) a.size()
typedef pair<int, int> Pii;
typedef pair<int, ll> Pil;
typedef pair<pair<ll,ll>,ll> P3;
typedef pair<pair<ll,ll>,pair<ll,ll>> P4;
typedef pair<ll, ll> Pll;
typedef pair<ll,Pll> Plll;
typedef pair<Pii, int> Piii;
const ll INF = 1000000000000000000;
template<class T> inline bool chmin(T& a, T b) {
if (a > b) {
a = b;
return true;
}
return false;
}
template<class T> inline bool chmax(T& a, T b) {
if (a < b) {
a = b;
return true;
}
return false;
}
ll MOD=1000000007;
vector<ll> tate={-2,-1,1,2,2,1,-1,-2};
vector<ll> yoko={1,2,2,1,-1,-2,-2,-1};
int main(){
//入力
cin.tie(0);
ios::sync_with_stdio(0);
ll t;
cin>>t;
rep(T,t){
string s;
cin>>s;
ll a,b,c,d;
cin>>a>>b>>c>>d;
ll ans=INF;
set<char> st;
rep(i,s.size())st.insert(s[i]);
if(st.find('B')!=st.end()){
if(abs((a+b)%2)==abs((c+d)%2)){
if(a-c==b-d)ans=1;
else if(a-c==d-b)ans=1;
else ans=2;
}
}
if(st.find('N')!=st.end()){
rep(i,8){
ll x=a+tate[i],y=b+yoko[i];
if(x==c&&y==d)ans=1;
if(x-c==y-d)ans=min(ans,(ll)2);
else if(x-c==d-y)ans=min(ans,(ll)2);
else ans=min(ans,(ll)3);
if(st.find('K')!=st.end()){
ans=min(ans,max(abs(x-c),abs(y-d)))+1;
}
rep(j,8){
ll X=x+tate[j],Y=y+yoko[j];
if(X==c&&Y==d)ans=min(ans,(ll)2);
}
}
}
if(st.find('K')!=st.end()){
ans=min(ans,max(abs(a-c),abs(b-d)));
}
if(st.find('P')!=st.end()){
if(b==d&&a<c)ans=min(ans,c-a);
}
if(ans!=INF)cout<<ans<<endl;
else cout<<-1<<endl;
}
return 0;
}