#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N =10;
bool st[N],backup[N]; // st[N]:记录数字使用状态,backup[N]:用于备份
int ans=0;
int n;
// a:带分数整数部分,b:带分数分子部分,c:带分数分母部分
bool check(int a,int c){
long long b=(long long)n*c-a*c; //由a,c推出b
if (!a||!b||!c) return false ; //a,b,c如果有一个数字为0,则返回false
memcpy(backup,st,sizeof st); //复制数组(把st复制到backup)
while(b){
int x=b%10;
b/=10;
if(!x||backup[x]) return false; //检查b的每一位,如果出现0或者重复,返回false
backup[x] =true;
}
for (int i=1;i<=9;i++){
if(!backup[i]) return false;
}
return true;
}
// u:已使用数字个数
void dfs_c(int u,int a,int c) {
if(u>9) return; //9个数字已全部使用,返回
if(check(a,c)) ans++; //a,b,c满足题意,则ans++
for(int i=1;i<=9;i++){
if(!st[i]){
st[i]=true;
dfs_c(u+1,a,c*10+i); // 如果数字未使用,则追加在c后面,继续dfs
st[i]=false; //恢复现场
}
}
}
void dfs_a(int u,int a){
if(a>=n) return ; //整数部分大于等于输入的数字,则不合题意,直接返回
if(a) dfs_c(u,a,0); //如果a满足条件,则dfs枚举c
for(int i=1;i<=9;i++){
if(!st[i]){
st[i]=true;
dfs_a(u+1,a*10+i); //a后追加1位,继续dfs
st[i]=false; //恢复现场
}
}
}
int main(){
cin>>n;
dfs_a(0,0); //第一个参数为使用的数字个数,第二个参数为当前a的值
cout<<ans<<endl;
return 0;
}