← Home
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=4e5+10;
int n,a[N],q[N],hh,ls[N],rs[N],L[N],R[N],f[N][3],ans;
char s[N];
bool fg;
inline void dfs(int u){
	if(fg||!u) return ;
	dfs(ls[u]),dfs(rs[u]);
	L[u]=ls[u]?L[ls[u]]:u;
	R[u]=rs[u]?R[rs[u]]:u;
	f[u][0]=f[ls[u]][0];
	f[u][1]=f[rs[u]][1];
	f[u][2]=f[ls[u]][0]+f[rs[u]][1];
	ans=max(ans,f[ls[u]][1]+f[rs[u]][0]);
	if(u==q[1]) return ;
	if((s[u]=='L'&&L[u]==1)||(s[u]=='R'&&R[u]==n)) return fg=1,void();
	if(L[u]==1) s[u]='R';
	if(R[u]==n) s[u]='L';
	if(s[u]!='R'){
		f[u][0]=max(f[u][0],1+max(f[ls[u]][1],f[rs[u]][0]));
		f[u][2]=max(f[u][2],1+max(f[ls[u]][1]+f[rs[u]][1],f[rs[u]][2]));
		ans=max(ans,1+max(f[ls[u]][0]+f[rs[u]][0],f[ls[u]][2]));
	}
	if(s[u]!='L'){
		f[u][1]=max(f[u][1],1+max(f[ls[u]][1],f[rs[u]][0]));
		f[u][2]=max(f[u][2],1+max(f[ls[u]][0]+f[rs[u]][0],f[ls[u]][2]));
		ans=max(ans,1+max(f[ls[u]][1]+f[rs[u]][1],f[rs[u]][2]));
	}
}
inline int solve(){
	scanf("%d",&n);
	hh=0;
	ans=0;
	fg=0;
	for(int i=1;i<=n;++i){
		scanf("%d",&a[i]);
		while(hh&&a[q[hh]]<a[i]) ls[i]=q[hh--];
		if(hh) rs[q[hh]]=i;
		q[++hh]=i;
	}
	scanf("%s",s+1);
	dfs(q[1]);
	return fg?-1:ans;
}
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		printf("%d\n",solve());
		for(int i=1;i<=n;++i) ls[i]=rs[i]=L[i]=R[i]=0;
	}
	return 0;
}