#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 110
#define baza 10
int n, m;
int v[maxn], aux[maxn], pt2[maxn], tr[maxn], doi[maxn], d[maxn], sol[maxn];
char s[maxn];
void inm(int a[], int b[], int c[])
{
memset(aux, 0, sizeof(aux));
int t=0;
for(int i=1; i<=a[0]; ++i)
{
t=0;
for(int j=1; j<=b[0] || t>0; ++j)
{
t+=a[i]*b[j]+aux[i+j-1];
aux[i+j-1]=t%baza;
t/=baza;
aux[0]=max(aux[0], i+j-1);
}
}
for(int i=1; i<=c[0]; ++i)
c[i]=0;
for(int i=0; i<=aux[0]; ++i)
c[i]=aux[i];
}
void imp(int a[], int b, int c[])
{
memset(aux, 0, sizeof(aux));
aux[0]=a[0];
int t=0;
for(int i=a[0]; i; --i)
{
t=t*baza+a[i];
aux[i]=t/b;
t%=b;
}
while(aux[aux[0]]==0 && aux[0]>1)
--aux[0];
for(int i=1; i<=c[0]; ++i)
c[i]=0;
for(int i=0; i<=aux[0]; ++i)
c[i]=aux[i];
}
void add(int a[], int b[], int c[])
{
memset(aux, 0, sizeof(aux));
int t=0;
for(int i=1; i<=a[0] || i<=b[0] || t>0; ++i)
{
t+=a[i]+b[i];
aux[i]=t%baza;
t/=baza;
aux[0]=i;
}
for(int i=1; i<=c[0]; ++i)
c[i]=0;
for(int i=0; i<=aux[0]; ++i)
c[i]=aux[i];
}
void afisare(int v[])
{
for(int i=v[0]; i; --i)
printf("%d", v[i]);
printf("\n");
// printf(" %d\n", v[0]);
}
int compare(int a[], int b[])
{
if(a[0]<b[0])
return -1;
if(a[0]>b[0])
return 1;
for(int i=a[0]; i; --i)
{
if(a[i]>b[i])
return 1;
if(a[i]<b[i])
return -1;
}
// printf("!!!!!!!!!\n");
return 0;
}
int solve(int e)
{
// printf("!%d\n", e);
int pt=0;
memset(sol, 0, sizeof(sol));
pt2[0]=1;
pt2[1]=1;
while((pt2[0]-1)*e<=v[0])
{
++pt;
inm(pt2, doi, pt2);
}
memset(tr, 0, sizeof(tr));
for(; pt>=0; --pt)
{
add(sol, pt2, tr);
memset(d, 0, sizeof(d));
d[0]=d[1]=1;
for(int i=1; i<=e; ++i)
{
inm(d, tr, d);
if(d[0]>v[0])
break;
}
// afisare(tr);
// afisare(d);
// afisare(v);
if(compare(d, v)<=0)
{
add(sol, pt2, sol);
if(compare(d, v)==0)
return 1;
}
// afisare(sol);
// printf("\n");
imp(pt2, 2, pt2);
}
// printf("\n");
return 0;
}
int main()
{
freopen("numere2.in", "r", stdin);
freopen("numere2.out", "w", stdout);
scanf("%s", s);
v[0]=strlen(s);
for(int i=1; i<=v[0]; ++i)
v[i]=s[v[0]-i]-'0';
doi[0]=1;
doi[1]=2;
for(int i=340; i; --i)
if(solve(i))
{
afisare(sol);
printf("%d\n", i);
return 0;
}
return 0;
}