#include <iostream>
using namespace std;
int getSum(int n);
int main() {
int n;
cin >> n;
cout << getSum(n) << endl;
return 0;
}
int getSum(int n)
{
#if 0
//纯逻辑
if(1 == n) return 1;
int _3monthMore = 0, _2month = 0, _1month = 1;
for(int i = 2; i <= n; ++i)
{
//二月兔变成新三月兔,加上老三月兔
_3monthMore += _2month;
//一月兔变成二月兔
_2month = _1month;
//原1月兔已经都变成二月兔了,每对新三月兔和老三月兔都有一个对兔宝宝
_1month = _3monthMore;
}
return _3monthMore + _2month + _1month;
#else
// 推理: 本月兔子对数 = 上月兔子对数 + 本月新出生兔子对数,为何本月新出生兔子对数 == 上上月兔子对数?
// 本月新出生兔子数 == 上月老兔(2个月及以上,到本月就是3个月及以上,就可以剩了)数 == 上上月兔数(1个月及以上,就是全部数量)
if(1 == n || 2 == n)
{
return 1;
}
else
{
// getSum(n -1) 表示上上月兔子数, getSum(n -2) 表示上上月兔子数,也即新生兔子数
return getSum(n -1) + getSum(n -2);
}
#endif
}