#include<string.h>
#include<iostream>
#include<stdlib.h>
using namespace std;
int index_KMP(char *s,char *t,int pos);
void get_next(char *t,int *next);
int a[100000000];
int b[100000000];
char s[100];
char t[3]="13";
int next[100];
int pos=0;
int main()
{
int num;
memset(b,0,sizeof(b));
for(int i=1;i<=10000/13;i++)
{
a[i]=i*13;
}
for(int j=1;j<=10000/13;j++)
{
int n;
sprintf(s,"%d",a[j]);
get_next(t,next);
n=index_KMP(s,t,pos);
if(n!=0)
{
b[j]=b[j-1]+1;
}
else
{
b[j]=b[j-1];
}
}
while(cin>>num)
cout<<b[num/13]<<endl;
return 0;
}
int index_KMP(char *s,char *t,int pos)
{
int i=pos,j=1;
while (i<=(int)strlen(s)&&j<=(int)strlen(t))
{
if (j==0||s[i]==t[j-1])
{
i++;
j++;
}
else j=next[j];
}
if (j>(int)strlen(t))
return i-strlen(t)+1;
else
return 0;
}
void get_next(char *t,int *next)
{
int i=1,j=0;
next[0]=next[1]=0;
while (i<(int)strlen(t))
{
if (j==0||t[i]==t[j])
{
i++;
j++;
next[i]=j;
}
else j=next[j];
}
}
#include<iostream>
#include<stdlib.h>
using namespace std;
int index_KMP(char *s,char *t,int pos);
void get_next(char *t,int *next);
int a[100000000];
int b[100000000];
char s[100];
char t[3]="13";
int next[100];
int pos=0;
int main()
{
int num;
memset(b,0,sizeof(b));
for(int i=1;i<=10000/13;i++)
{
a[i]=i*13;
}
for(int j=1;j<=10000/13;j++)
{
int n;
sprintf(s,"%d",a[j]);
get_next(t,next);
n=index_KMP(s,t,pos);
if(n!=0)
{
b[j]=b[j-1]+1;
}
else
{
b[j]=b[j-1];
}
}
while(cin>>num)
cout<<b[num/13]<<endl;
return 0;
}
int index_KMP(char *s,char *t,int pos)
{
int i=pos,j=1;
while (i<=(int)strlen(s)&&j<=(int)strlen(t))
{
if (j==0||s[i]==t[j-1])
{
i++;
j++;
}
else j=next[j];
}
if (j>(int)strlen(t))
return i-strlen(t)+1;
else
return 0;
}
void get_next(char *t,int *next)
{
int i=1,j=0;
next[0]=next[1]=0;
while (i<(int)strlen(t))
{
if (j==0||t[i]==t[j])
{
i++;
j++;
next[i]=j;
}
else j=next[j];
}
}