#include <iostream>
#include <cstdio>
using namespace std;
/**
* 矩阵维数
*/
const int DIMENSION = 2;
/**
* 矩阵
*/
struct Matrix {
int row;
int col;
int matrix[DIMENSION][DIMENSION];
Matrix(int row, int col) {
this->row = row;
this->col = col;
}
};
/**
* 矩阵乘法
* @param x
* @param y
* @return
*/
Matrix multiply(Matrix x, Matrix y);
/**
* 矩阵求幂
* @param x
* @return
*/
Matrix quickPower(Matrix x, int n);
/**
* 打印矩阵
* @param x
*/
void printMatrix(Matrix x);
/**
* Fibonacci--上海交通大学
* @return
*/
int main() {
int n;
while (cin >> n) {
Matrix fibonacci = Matrix(2, 2);
fibonacci.matrix[0][0] = 1;
fibonacci.matrix[0][1] = 1;
fibonacci.matrix[1][0] = 1;
fibonacci.matrix[1][1] = 0;
Matrix power = quickPower(fibonacci, n);
Matrix tmp = Matrix(2, 1);
tmp.matrix[0][0] = 1;
tmp.matrix[1][0] = 0;
Matrix ans = multiply(power, tmp);
/*
* 可以打印矩阵进行验证
*/
//printMatrix(ans);
cout << ans.matrix[1][0] << endl;
}
return 0;
}
Matrix multiply(Matrix x, Matrix y) {
Matrix ans(x.row, y.col);
for (int i = 0; i < ans.row; ++i) {
for (int j = 0; j < ans.col; ++j) {
ans.matrix[i][j] = 0;
for (int k = 0; k < x.col; ++k) {
ans.matrix[i][j] += x.matrix[i][k] * y.matrix[k][j];
}
}
}
return ans;
}
Matrix quickPower(Matrix x, int n) {
Matrix ans = Matrix(x.row, x.col);
for (int i = 0; i < ans.row; ++i) {
for (int j = 0; j < ans.col; ++j) {
if (i == j) {
ans.matrix[i][j] = 1;
} else {
ans.matrix[i][j] = 0;
}
}
}
while (n != 0) {
if (n % 2 == 1) {
ans = multiply(ans, x);
}
n = n >> 1;
x = multiply(x, x);
}
return ans;
}
void printMatrix(Matrix x) {
for (int i = 0; i < x.row; ++i) {
for (int j = 0; j < x.col; ++j) {
if (j == 0) {
cout << x.matrix[i][j];
} else {
cout << " " << x.matrix[i][j];
}
}
cout << endl;
}
}