#include<iostream>
using namespace std;
const long long N=1e9+10;
typedef long long ll;
ll b[100010],a[100010];
int main()
{
ll n;
cin>>n;
if(n==1){
printf("1");
return 0;
}
a[0] = 1;
b[0] = 1;
for(ll i=3;i<=44723;i++)//从第三行开始 因为2在第三行
{
ll mid = i/2; //枚举每一行的一半 a[0] b[0] 永远都是0 所以从第二个开始
for(ll j=1;j<=mid;j++)
{
if(i%2==1 && j==mid)
{
b[j] = a[j-1]*2;//列如 6 = 3 + 3
}
else
{
b[j] = a[j] + a[j-1];//一般情况
}
a[j-1] = b[j-1];//更新前一个的数据 后面的数据用不到前面的数据了
if(b[j]==n)
{
cout<<i*(i-1)/2+j+1;
return 0;
}
}
a[mid] = b[mid];//更新最后一个数据
}
cout<<n*(n+1)/2+2;
//溢出部分 因为44732的下一个数超10亿了 也就说后面的数都不能表达出来 其他的数字在 n+1行的第二个
//可以观察到 1 2 3 4 5 个数字 都是在第二个数字慢慢+1 , 在44732后面的数字都是超10亿的
//只能通过第二个数字慢慢的加1来追赶 目标数 目标数字在 n+1行 j列
return 0;
}