/*POJ1240Pre-Post-erous*/
#include <iostream>
#include <cstring>
#include<cstdio>
using namespace std;
char pre[30],post[30];
int num;
int C(int n, int k) //计算组合数C(n, k)
{
int i, sum= 1;
if (k>(n>>2)) k = n - k;
for (i = 1; i <= k; ++i)
sum=sum*(n - i + 1) / i;
return sum;
}
/*第一个参数当前需要统计节点的总长度(包括当前节点)
第二个参数当前前序节点,第三个参数,当前后序节点*/
int find(int len,char *pre,char *post)
{
int left=1,right=0,child=0,res=1;
while(left<len){
++child;
while(pre[left]!=post[right])
++right;
res*=find(right-left+2,pre+left,post+left-1);
left=right+2;//下个分支
}
return res*C(num,child);
}
int main()
{
while(~scanf("%d",&num)&&num)
{
scanf("%s%s",pre,post);
printf("%d\n",find(strlen(pre),pre,post));
}
return 0;
}