n = gets.chomp.to_i

## これは n が数十を超えると計算量が大きくて使いものにならなくなる。
# def fibonacci(n)
#     return 1 if n == 0 || n == 1
#     return fibonacci(n - 2) + fibonacci(n - 1)
# end
# puts fibonacci(i)


## 動的計画法のメモ化再帰を使うと効果的。
# dp = []
# def dpFibonacci(n, dp)
#     if n == 0 || n == 1 then
#         dp[n] = 1
#         return dp[n]
#     end
#     return dp[n] if dp[n]
#     dp[n] = dpFibonacci(n - 2, dp) + dpFibonacci(n - 1, dp)
# end
# puts dpFibonacci(i, dp)


## もしくは動的計画法をループに展開したアルゴリズムとして実装することもできる。
## 下の loopedDpFibonacci は、与えられた配列 fib に第n項までのフィボナッチ数列を格納してくれる。
fib = []
def loopedDpFibonacci(n, fib)
    fib[0] = 1
    fib[1] = 1
    if n >= 2 then
        2.upto(n) do |i|
            fib[i] = fib[i - 2] + fib[i - 1]
        end
    end
end

loopedDpFibonacci(n, fib)
puts fib[n]
