#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
}