#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10,md=998244353;
#define int long long
int n,p[N],ans,bz[N];
char s[N];
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>p[i];
}
for(int i=1;i<=n;i++){
cin>>s[i];
}
if(s[1]=='?'){
bool flag=true;
int cnt=1;
bz[p[1]]=1;
for(int i=2;i<=n;i++){
if(p[i]==n){
if(bz[1]!=0&&s[p[i]]=='?') cnt=(cnt*2)%md;
if(s[p[i]]=='R'&&bz[1]==0){
flag=false;
break;
}
}
else{
if(bz[p[i]+1]!=0&&s[p[i]]=='?') cnt=(cnt*2)%md;
if(s[p[i]]=='R'&&bz[p[i]+1]==0){
flag=false;
break;
}
}
if(bz[p[i]]!=0){
flag=false;
break;
}
bz[p[i]]=1;
}
if(flag){
ans=(ans+cnt)%md;
}
for(int i=1;i<=n;i++) bz[i]=0;
if(p[1]==n) bz[1]=1;
else bz[p[1]+1]=1;
flag=true;
cnt=1;
for(int i=2;i<=n;i++){
if(bz[p[i]]!=0&&s[p[i]]=='?') cnt=(cnt*2)%md;
if(s[p[i]]=='L'&&bz[p[i]]==0){
flag=false;
break;
}
if(p[i]==n){
if(bz[1]!=0){
flag=false;
break;
}
bz[1]=1;
}
else{
if(bz[p[i]+1]!=0){
flag=false;
break;
}
bz[p[i]+1]=1;
}
}
if(flag){
ans=(ans+cnt)%md;
}
}
if(s[1]=='L'){
bool flag=true;
int cnt=1;
bz[p[1]]=1;
for(int i=2;i<=n;i++){
if(p[i]==n){
if(bz[1]!=0&&s[p[i]]=='?') cnt=(cnt*2)%md;
if(s[p[i]]=='R'&&bz[1]==0){
flag=false;
break;
}
}
else{
if(bz[p[i]+1]!=0&&s[p[i]]=='?') cnt=(cnt*2)%md;
if(s[p[i]]=='R'&&bz[p[i]+1]==0){
flag=false;
break;
}
}
if(bz[p[i]]!=0){
flag=false;
break;
}
bz[p[i]]=1;
}
if(flag){
ans=(ans+cnt)%md;
}
}
if(s[1]=='R'){
if(p[1]==n) bz[1]=1;
else bz[p[1]+1]=1;
bool flag=true;
int cnt=1;
for(int i=2;i<=n;i++){
if(bz[p[i]]!=0&&s[p[i]]=='?') cnt=(cnt*2)%md;
if(s[p[i]]=='L'&&bz[p[i]]==0){
flag=false;
break;
}
if(p[i]==n){
if(bz[1]!=0){
flag=false;
break;
}
bz[1]=1;
}
else{
if(bz[p[i]+1]!=0){
flag=false;
break;
}
bz[p[i]+1]=1;
}
}
if(flag){
ans=(ans+cnt)%md;
}
}
cout<<ans<<endl;
return 0;
}