#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<iostream>
#include<algorithm>
#include<cmath>
#define maxn 100100
using namespace std;
long long N[10],a[10][10][20],Ans=0;
struct ff
{
	long long ans,sum;
};

void Inte()
{
	N[0]=1;
	for(long long i=1;i<=9;i++)
		N[i]=N[i-1]*10;
	for(long long i=1;i<10;i++)
	{
		for(long long j=i;j>=i/2+1;j--)
		{
			for(long long k=9;k>=-9;k--)
			{
				a[i][j][k]=(N[j]-N[i-j])/9*k;
				//printf("%lld ",a[i][j][k]);
			}
		}
		//printf("\n");
	}
}	
long long n;

void pp(long long p,long long k,ff o)
{
	//printf("\n");
	//printf("%lld\n",p);
	if(p<k/2+1)
	{
		if(o.sum==n)
				Ans+=o.ans;
		return;
	}
	if(p==k/2+1)
	{
		for(long long i=9;i>=-9;i--)
		{
			o.ans*=(10-abs(i));
			o.sum+=a[k][p][i];
			//printf("%lld\n",o.sum);
			if(o.sum==n)
			{
				Ans+=o.ans;
				//printf("%lld\n",Ans);
			}
			o.ans/=(10-abs(i));
			o.sum-=a[k][p][i];
		}
	}
	else
	{
		for(long long i=9;i>=-9;i--)
		{
			o.ans*=(10-abs(i));
			o.sum+=a[k][p][i];
			pp(p-1,k,o);
			o.ans/=(10-abs(i));
			o.sum-=a[k][p][i];
		}
	}
}
void p0(long long p,long long k,ff o)
{
	for(int i=9;i>=0;i--)
	{
		o.sum+=a[k][p][i];
		pp(p-1,k,o);
		o.sum-=a[k][p][i];
	}
}
int  main()
{
	
	Inte();
	scanf("%lld",&n);
	if(n%9)
		printf("0\n");
	else
	{
		n=n/9;
		for(long long i=1;i<=9;i++)
		{
			ff o;
			o.ans=1;
			o.sum=0;
			pp(i,i,o);
			//printf("%lld\n",Ans);
		}
		long long Ans1=Ans,Ans2=0;
		Ans=0;
		for(long long i=1;i<=9;i++)
		{
			ff o;
			o.ans=1;
			o.sum=0;
			p0(i,i,o);
		}
		Ans2=Ans;
		printf("%lld\n",Ans1-Ans2);
	}
}
		