#include<bits/stdc++.h>
#define ll long long
#define reg register
#define db double
#define il inline
using namespace std;
void read(int &x){x=0;int f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}x*=f;}
void read(ll &x){x=0;int f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}x*=f;}
const int N=55;
int n,kk;char c[N];
int dp[2][N][N][N][4];
int change(int l,int j){
int a1=l/2%2,a2=l%2;
if(j==1){
a1^=1;a2^=1;
}else if(j==2){
a1--;
if(a1<0){
a1=1;
}
}else{
a2--;
if(a2<0){
a2=1;
}
}
return a1*2+a2;
}
int main(){
read(n);read(kk);
dp[0][1][0][0][0]=1;
scanf("%s",c+1);
for(int i=1;i<=n;i++){
memset(dp[i&1],0,sizeof(dp[i&1]));
if(c[i]=='?'){
for(int j=1;j<=3;j++){
int a[5]={0};
for(a[1]=0;a[1]<=i+1;a[1]++){
for(a[2]=0;a[2]<=i+1;a[2]++){
for(a[3]=0;a[3]<=i+1;a[3]++){
for(int l=0;l<=3;l++){
int tmp=change(l,j);
if((tmp==3||a[tmp+1])&&(l==3||a[l+1])){
a[tmp+1]--;int c=dp[(i&1)^1][a[1]][a[2]][a[3]][tmp];
a[tmp+1]++;
dp[i&1][a[1]][a[2]][a[3]][l]+=c;dp[i&1][a[1]][a[2]][a[3]][l]%=998244353;
if(dp[i&1][a[1]][a[2]][a[3]][l]){
cout<<a[1]<<' '<<a[2]<<' '<<a[3]<<' '<<l<<' '<<j<<' '<<tmp<<endl;
}
}
}
}
}
}
}
}else{
int kkk=c[i]-'A'+1;
for(int j=kkk;j<=kkk;j++){
int a[5]={0};
for(a[1]=0;a[1]<=i+1;a[1]++){
for(a[2]=0;a[2]<=i+1;a[2]++){
for(a[3]=0;a[3]<=i+1;a[3]++){
for(int l=0;l<=3;l++){
int tmp=change(l,j);
if((tmp==3||a[tmp+1])&&(l==3||a[l+1])){
a[tmp+1]--;int c=dp[(i&1)^1][a[1]][a[2]][a[3]][tmp];
a[tmp+1]++;
dp[i&1][a[1]][a[2]][a[3]][l]+=c;dp[i&1][a[1]][a[2]][a[3]][l]%=998244353;
}
}
}
}
}
}
}
}
int ans=0;
for(int i=0;i<=n;i++){
for(int j=0;j<=n;j++){
for(int k=0;k<=n;k++){
for(int l=0;l<=3;l++){
int ccc=n+1-i-j-k,tmp=(j-1)*j/2+(k-1)*k/2+(l-1)*l/2+ccc*(ccc-1)/2;
if(tmp>=kk)ans+=dp[n&1][i][j][k][l];
}
}
}
}
cout<<ans;
return 0;
}