#define _USE_MATH_DEFINES #include using namespace std; #define dprint(Exp,...) if(Exp){fprintf(stderr, __VA_ARGS__);} #define printe(...) fprintf(stderr, __VA_ARGS__); #define PrtExp(_Exp) cerr<< #_Exp <<" = "<< (_Exp) #define PrtExpN(_Exp) cerr<< #_Exp <<" = "<< (_Exp) <<"\n" #define SINT(n) scanf("%d",&n) #define SINT2(n,m) scanf("%d %d",&n,&m) #define SINT3(n,m,o) scanf("%d %d %d",&n,&m,&o) #define SINT4(n,m,o,p) scanf("%d %d %d %d",&n,&m,&o,&p) #define SINT5(n,m,o,p,q) scanf("%d %d %d %d %d",&n,&m,&o,&p,&q) #define SLL(n) scanf("%lld",&n) #define SLL2(n,m) scanf("%lld %lld",&n,&m) #define SLL3(n,m,o) scanf("%lld %lld %lld",&n,&m,&o) #define SST(s) scanf("%s",s) #define SCH(c) scanf("%c",&c) #define GC() getchar() #define PINT(n) printf("%d",(int)(n)) #define PINT2(n,m) printf("%d %d",(int)(n),(int)(m)) #define PINT3(n,m,l) printf("%d %d %d",(int)(n),(int)(m),(int)(l)) #define PLL(n) printf("%lld",(long long)(n)) #define PST(s) printf("%s",(s)) #define PCH(s) printf("%c",(s)) #define PINTN(n) printf("%d\n",(int)(n)) #define PINT2N(n,m) printf("%d %d\n",(int)(n),(int)(m)) #define PINT3N(n,m,l) printf("%d %d %d\n",(int)(n),(int)(m),(int)(l)) #define PLLN(n) printf("%lld\n",(long long)(n)) #define PSTN(s) printf("%s\n",(s)) #define PCHN(s) printf("%c\n",(s)) #define PSP() printf(" ") #define PN() printf("\n") #define PC(c) putchar(c) #define CSP (' ') #define SN ("\n") #define rep(i,a) for(int i=0;i=0;i--) #define ReP(i,a) for(int i=a;i>=0;i--) #define rEp(i,a) for(i=0;i=0;i--) #define REP(i,a) for(i=a;i>=0;i--) #define repft(i,a,b) for(int i=a;i=b;i--) #define RepfT(i,a,b) for(int i=a;i>=b;i--) #define foreach(a,it) for(auto it = a.begin(); it != a.end(); ++it) #define FILL(a,v) fill(begin(a),end(a), v) #define FILL0(a) memset(a,0,sizeof(a)) #define FILL1(a) memset(a,-1,sizeof(a)) typedef long long ll; typedef unsigned long long ull; typedef pair Pi; typedef pair Pll; const int INF = 0x2aaaaaaa; // 715,827,882 const ll INFLL = 0x1f1f1f1f1f1f1f1fLL;//2,242,545,357,980,376,863 template inline ostream& operator<<(ostream& st, const pair& P) { return st << "(" << P.first << "," << P.second << ")"; }; template inline pair operator+(const pair& P, const pair& Q) { return pair(P.first + Q.first, P.second + Q.second); }; template inline pair operator-(const pair& P, const pair& Q) { return pair(P.first - Q.first, P.second - Q.second); }; #define fs first #define sc second typedef complex P; const int N = 1210000; const int sqrtN = 1100; bool isprime[N + 1]; void sieve_of_atkin() { int n; for (int z = 1; z <= 5; z += 4) { for (int y = z; y <= sqrtN; y += 6) { for (int x = 1; x <= sqrtN && (n = 4 * x*x + y*y) <= N; ++x) isprime[n] = !isprime[n]; for (int x = y + 1; x <= sqrtN && (n = 3 * x*x - y*y) <= N; x += 2) isprime[n] = !isprime[n]; } } for (int z = 2; z <= 4; z += 2) { for (int y = z; y <= sqrtN; y += 6) { for (int x = 1; x <= sqrtN && (n = 3 * x*x + y*y) <= N; x += 2) isprime[n] = !isprime[n]; for (int x = y + 1; x <= sqrtN && (n = 3 * x*x - y*y) <= N; x += 2) isprime[n] = !isprime[n]; } } for (int y = 3; y <= sqrtN; y += 6) { for (int z = 1; z <= 2; ++z) { for (int x = z; x <= sqrtN && (n = 4 * x*x + y*y) <= N; x += 3) isprime[n] = !isprime[n]; } } for (int n = 5; n <= sqrtN; ++n) if (isprime[n]) for (int k = n*n; k <= N; k += n*n) isprime[k] = false; isprime[2] = isprime[3] = true; } set ret; int main() { ll N; cin >> N; for (ll i = 1; i*i <= N; ++i) { //if (i % 100000 == 0) cerr << i << endl; if (N%i == 0) { ll x = N / i; string s = to_string(i) + to_string(x); string t = to_string(x) + to_string(i); ret.insert(s); ret.insert(t); } } cout << ret.size() << endl; }