题目
#include<iostream>
#include<cstring>
using namespace std;
const int N=20;// N太大会超时
bool st[N];
bool back[N];
int cnt;
int n; bool check(int a,int c)
{
int x=n*c-a*c;
if(!a||!c||!x) return false;
//printf("%d %d %d %d\n",n,c,a,x);
memcpy(back,st,sizeof(st)); while(x)
{
int t=x%10;
x/=10;
if(t==0||back[t]==1) return false;
back[t]=1;
}
for(int i=1;i<=9;i++)
if(!back[i]) return false;
return true;
}
void dfs_c(int u,int a,int c)
{
if(u==n) return ; if(check(a,c))
{
cnt++;
}
for(int i=1;i<=9;i++)
{
if(!st[i])
{
st[i]=1;
dfs_c(u+1,a,c*10+i);
st[i]=0;
}
}
}
void dfs_a(int u,int a)
{
if(u==n) return;
if(a) dfs_c(u,a,0);
for(int i=1;i<=9;i++)
{
if(!st[i])
{
st[i]=1;
dfs_a(u+1,a*10+i);
st[i]=0;
}
}
}
int main()
{
cin>>n;
dfs_a(0,0);
printf("%d\n",cnt);
return 0;
}