#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

}