1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include<bits/stdc++.h>
using namespace std;

typedef pair<long long int, long long int> ll;

struct mac
{
	ll m[2][2];
};


const long long int MOD=1e18,M=1e9;
const ll ZERO=make_pair(0,0),JEDEN=make_pair(1,0);




ll operator +(ll a, ll b)
{
	ll wyn;
	wyn.first=(a.first+b.first)%M;
	wyn.second=(a.second+b.second+(a.first+b.first)/M)%M;
	return wyn;
}

ll operator *(ll a, ll b)		//UWAGA
{
	ll wyn;
	wyn.first=(b.first*a.first)%M;
	wyn.second=(((((b.first*a.first)/M)+
				 	b.first*a.second)%M)+
					b.second*a.first)%M;
	return wyn;
}




mac mmac(ll a, ll b, ll c, ll d)			//a b
{											//c d
	mac wyn;
	wyn.m[0][0]=a;
	wyn.m[0][1]=b;
	wyn.m[1][0]=c;
	wyn.m[1][1]=d;
	return wyn;
}

mac operator *(mac a, mac b)
{
	return mmac((a.m[0][0]*b.m[0][0])+(a.m[0][1]*b.m[1][0]),
				(a.m[0][0]*b.m[0][1])+(a.m[0][1]*b.m[1][1]),
				(a.m[1][0]*b.m[0][0])+(a.m[1][1]*b.m[1][0]),
				(a.m[1][0]*b.m[0][1])+(a.m[1][1]*b.m[1][1]));
}




long long int tz[19];
mac tp[109];


void Potega(long long int n)
{
	int l=2;
	tp[0]=mmac(JEDEN,ZERO,ZERO,JEDEN);
	tp[1]=mmac(JEDEN,JEDEN,JEDEN,ZERO);
	for(long long int i=2;i<=n;i*=2) 
	{
		tp[l]=tp[l-1]*tp[l-1];
												//printf("%lld\n",tp[l].m[0][0].second*M+tp[l].m[0][0].first);
		++l;
	}
}

long long int fib(long long int x)
{
	int l=1;
	mac wyn=tp[0];
	--x;
	while(x>0)
	{
		if(x%2) wyn=wyn*tp[l];
		x>>=1;
		++l;
	}
	return wyn.m[0][0].second*M+wyn.m[0][0].first;
}
	
int main()
{
	int n;
	long long int ak,roz,pot;
	char tc[19];
	list<long long int> lista;
	scanf("%s",tc);
	n=strlen(tc);
	tz[0]=1;
	tz[1]=60;
	tz[2]=300;
	tz[3]=1500;
	for(int i=4;i<=n;++i) tz[i]=tz[i-1]*10;
	Potega(tz[n]);
	lista.push_back(1);
	pot=1;
	for(int i=1;i<=n;++i)
	{
		roz=lista.size();
		for(long long int j=0;j<roz;++j)
		{
			ak=lista.front();
			lista.pop_front();
																		//printf("%d %lld\n",i,ak);
			for(long long int k=ak;k<=tz[i];k+=tz[i-1])
			{
																	//printf("%lld %lld %d\n",k,fib(k),tc[n-i]-'0');
				if((fib(k)/pot)%10==tc[n-i]-'0') lista.push_back(k);		//printf("%lld\n",lista.back());}
			}
		}
		pot*=10;
	}
	if(lista.empty()) printf("NIE"); else printf("15000000000000000000%lld",lista.front());
	return 0;
}