点击打开链接
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include<cstring>
#include<string>
#include<algorithm>
#include<math.h>
#include<queue>
#include<set>
#include<stack>
#include<map>
#define LL long long
#define inf 0x3f3f3f3f
using namespace std;
int m;
char s1[30],s2[30];
vector<char> tree[30];
long long c(int a,int b)///组合计算
{
long long result=1;
for(int i=1;i<=b;i++)
result=result*(a+1-i)/i;
return result;
}
void f(char *s1,char *s2,int len)///邻接表存储数的原型。
{
int i=1,j=0,head=0;
long long ans=0,result=0;
if(len==1)return ;
while(i<len){
for(;j<len;j++)
if(s1[i]==s2[j]) break;
f(&s1[i],&s2[head],j-head+1);
tree[s1[0]-'a'].push_back(s1[i]);
i=j+2;
head=j+1;
}
}
int main()
{
while(cin>>m){
if(m==0)break;
cin>>s1>>s2;
for(int i=0;i<30;i++)
tree[i].clear();
f(s1,s2,strlen(s1));
long long result=1;
for(int i=0,t=strlen(s1);i<t;i++)
if(!tree[i].empty())
result*=c(m,tree[i].size());
cout<<result<<endl;
}
return 0;
}