c语言如何用枚举法求满射函数个数?

求解答,上一条有人让我把题目贴出来看看。题目就是|A|=m,|B|=n,用枚举算A到B满射函数个数
还是没有找到解决办法,下面是我的整个代码,得出来的结果和公式法运行出来的不一样,不是0就是个位数,希望有人可以帮我看看哪里出了问题

#include 
int main(){
    int sum =0;
    int m,n,i;
    scanf("%d%d",&m,&n);
    int x1,x2,x3; 
    for(x1=0;x1<2;x1++)
    for(x2=0;x2<2;x2++)
    for(x3=0;x3<2;x3++)
    
    
    {m=0;
    for(i=0;i<2;i++)
    {if(x1==i||x2==i||x3==i)
    m = m+1;}
    if(m == 2) sum= sum+1;
 }
     printf("%d",sum);

}