#include <bits/stdc++.h>
#define fi first
#define se second
#define int long long
using namespace std;
const long long oo=1e18;
const int mod=1e9+7;
const int base=31;
int Test=1;
void home()
{
if(fopen("main.inp","r"))
freopen("main.inp","r",stdin),
freopen("main.out","w",stdout);
}
bool bit(int mask,int i){return (mask>>i)&1;}
int n,l,r;
string s,t;
int newLen[1005][26];
int dp[1005][1005][2],x[1005];
int DigitDP(int cs,int len,int be)
{
if(cs==0)return 1;
int &cnt=dp[cs][len][be];
if(cnt!=-1)return cnt;
cnt=0;int en=26;if(!be)en=x[cs];
for(int i=1;i<=en;i++)
{
if(newLen[len][i]==t.size()-1)continue;
cnt=(cnt+DigitDP(cs-1,newLen[len][i],be|(i<en)))%mod;
}
return cnt;
}
int Cal(string s)
{
int d=0;
for(int i=s.size()-1;i>=0;i--)x[++d]=s[i]-'a'+1;
memset(dp,-1,sizeof(dp));
return DigitDP(d,0,0);
}
int mu[1005],ha[1005];
int Get(int j,int i)
{
return (ha[i]-ha[j-1]*mu[i-j+1]%mod+mod)%mod;
}
void Tcmduc_VOI26()
{
cin>>n>>s>>t;t=' '+t;
mu[0]=1;for(int i=1;i<=n;i++)mu[i]=(mu[i-1]*base)%mod;
for(int i=1;i<t.size();i++)ha[i]=(ha[i-1]*base+t[i]-'a'+1)%mod;
newLen[0][(int)t[1]-'a'+1]=1;
for(int i=1;i<t.size()-1;i++)
{
for(int c=1;c<=26;c++)
{
for(int j=i+1;j>=1;j--)
{
if(Get(1,j)==(Get(i-j+2,i)*base+c)%mod)
{
newLen[i][c]=j;
break;
}
}
}
}
cout<<Cal(s);
}
signed main()
{
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);home();
while(Test--)Tcmduc_VOI26();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBpbnQgbG9uZyBsb25nCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGxvbmcgbG9uZyBvbz0xZTE4Owpjb25zdCBpbnQgbW9kPTFlOSs3Owpjb25zdCBpbnQgYmFzZT0zMTsKaW50IFRlc3Q9MTsKdm9pZCBob21lKCkKewogICAgaWYoZm9wZW4oIm1haW4uaW5wIiwiciIpKSAKICAgIGZyZW9wZW4oIm1haW4uaW5wIiwiciIsc3RkaW4pLAogICAgZnJlb3BlbigibWFpbi5vdXQiLCJ3IixzdGRvdXQpOwp9CmJvb2wgYml0KGludCBtYXNrLGludCBpKXtyZXR1cm4gKG1hc2s+PmkpJjE7fQppbnQgbixsLHI7CnN0cmluZyBzLHQ7CmludCBuZXdMZW5bMTAwNV1bMjZdOwppbnQgZHBbMTAwNV1bMTAwNV1bMl0seFsxMDA1XTsKaW50IERpZ2l0RFAoaW50IGNzLGludCBsZW4saW50IGJlKQp7CiAgICBpZihjcz09MClyZXR1cm4gMTsKICAgIGludCAmY250PWRwW2NzXVtsZW5dW2JlXTsKICAgIGlmKGNudCE9LTEpcmV0dXJuIGNudDsKICAgIGNudD0wO2ludCBlbj0yNjtpZighYmUpZW49eFtjc107CiAgICBmb3IoaW50IGk9MTtpPD1lbjtpKyspCiAgICB7CiAgICAgICAgaWYobmV3TGVuW2xlbl1baV09PXQuc2l6ZSgpLTEpY29udGludWU7CiAgICAgICAgY250PShjbnQrRGlnaXREUChjcy0xLG5ld0xlbltsZW5dW2ldLGJlfChpPGVuKSkpJW1vZDsKICAgIH0KICAgIHJldHVybiBjbnQ7Cn0KaW50IENhbChzdHJpbmcgcykKewogICAgaW50IGQ9MDsKICAgIGZvcihpbnQgaT1zLnNpemUoKS0xO2k+PTA7aS0tKXhbKytkXT1zW2ldLSdhJysxOwogICAgbWVtc2V0KGRwLC0xLHNpemVvZihkcCkpOwogICAgcmV0dXJuIERpZ2l0RFAoZCwwLDApOwp9CmludCBtdVsxMDA1XSxoYVsxMDA1XTsKaW50IEdldChpbnQgaixpbnQgaSkKewogICAgcmV0dXJuIChoYVtpXS1oYVtqLTFdKm11W2ktaisxXSVtb2QrbW9kKSVtb2Q7Cn0Kdm9pZCBUY21kdWNfVk9JMjYoKQp7CiAgICBjaW4+Pm4+PnM+PnQ7dD0nICcrdDsKICAgIG11WzBdPTE7Zm9yKGludCBpPTE7aTw9bjtpKyspbXVbaV09KG11W2ktMV0qYmFzZSklbW9kOwogICAgZm9yKGludCBpPTE7aTx0LnNpemUoKTtpKyspaGFbaV09KGhhW2ktMV0qYmFzZSt0W2ldLSdhJysxKSVtb2Q7CiAgICBuZXdMZW5bMF1bKGludCl0WzFdLSdhJysxXT0xOwogICAgZm9yKGludCBpPTE7aTx0LnNpemUoKS0xO2krKykKICAgIHsKICAgICAgICBmb3IoaW50IGM9MTtjPD0yNjtjKyspCiAgICAgICAgewogICAgICAgICAgICBmb3IoaW50IGo9aSsxO2o+PTE7ai0tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZihHZXQoMSxqKT09KEdldChpLWorMixpKSpiYXNlK2MpJW1vZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBuZXdMZW5baV1bY109ajsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGNvdXQ8PENhbChzKTsKfQpzaWduZWQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTtob21lKCk7CiAgICB3aGlsZShUZXN0LS0pVGNtZHVjX1ZPSTI2KCk7CiAgICByZXR1cm4gMDsKfQ==