#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
using namespace std;
typedef long long ll;
#define rep(i,n) for(int i=0;i<n;i++)
#define chmin(a,b) a=min(a,b)
#define chmax(a,b) a=max(a,b)
#define mod 1000000007
#define ad(a,b) a=(a+b)%mod;
ll po(ll x,ll y){
	ll res=1;
	for(;y;y>>=1){
		if(y&1)res=res*x%mod;
		x=x*x%mod;
	}
	return res;
}
ll gcd(ll a,ll b){
	return (b?gcd(b,a%b):a);
}
#define X 200010
ll fac[X],ivf[X];
void initfac(){
	fac[0]=1;
	for(ll i=1;i<X;i++)fac[i]=fac[i-1]*i%mod;
	for(ll i=0;i<X;i++)ivf[i]=po(fac[i],mod-2);
}
ll C(ll n,ll k){
	return fac[n]*ivf[n-k]%mod*ivf[k]%mod;
}

ll n;
char c[2][2];
ll solve(){
	cin>>n;
	cin>>c[0][0]>>c[0][1]>>c[1][0]>>c[1][1];
	if(n==2)return 1;
	ll fib[1010];
	fib[0]=fib[1]=1;
	for(int i=2;i<=n;i++)fib[i]=(fib[i-2]+fib[i-1])%mod;
	
	if(c[0][1]=='A'){
		if(c[0][0]=='A'){
			return 1;
		}
		if(c[1][0]=='B')return po(2,n-3);
		return fib[n-2];
	}
	if(c[0][1]=='B'){
		if(c[1][1]=='B'){
			return 1;
		}
		if(c[1][0]=='A')return po(2,n-3);
		return fib[n-2];
	}
}
int main(){
	cin.tie(0);
	ios::sync_with_stdio(0);
	cout<<solve()<<endl;
}

#include<bits/stdc++.h>
using namespace std;
int main(){
  int n,p;
  string s;
  vector<char> v;
  char c;
  cin>>n>>s;
  for(int i=0;i<n;i++){
    v.push_back(s[i]);
    p=v.size();
    if(p>2){
      if(v[p-3]=='f'&&v[p-2]=='o'&&v[p-1]=='x'){
        for(int j=0;j<3;j++){
          v.pop_back();
        }
      }
    }
  }
  cout<<(v.size())<<endl;
}