Problem:
Score : 200 points

Problem Statement

It is November 18 now in Japan. By the way, 11 and 18 are adjacent Lucas numbers.

You are given an integer N. Find the N-th Lucas number.

Here, the i-th Lucas number L_i is defined as follows:

L_0=2

L_1=1

L_i=L_{i-1}+L_{i-2} (i≥2)

Constraints

1≤N≤86

It is guaranteed that the answer is less than 10^{18}.

N is an integer.

Input

Input is given from Standard Input in the following format:

N

Output

Print the N-th Lucas number.

Sample Input 1

5

Sample Output 1

11

L_0=2

L_1=1

L_2=L_0+L_1=3

L_3=L_1+L_2=4

L_4=L_2+L_3=7

L_5=L_3+L_4=11

Thus, the 5-th Lucas number is 11.

Sample Input 2

86

Sample Output 2

939587134549734843

Solution in C (GCC 5.4.1) (judge verdict: Accepted)

#include<stdio.h>

int L1[19],L2[19],L3[19];
void add(int n);
void PRI(void);
int main(void){
	int n,i;
	
	for(i=0;i<19;i++){
		L1[i]=0;
		L2[i]=0;
		L3[i]=0;
	}
	L1[0]=2;
	L2[0]=1;
		
	scanf("%d",&n);
	if(n==0)printf("%d",2);
	else if(n==1)printf("%d",1);
	else{
		add(n-2);
		PRI();
	}
	
	
	return 0;
}
void add(int n){
	int i,w;
	if(n<0)return;
	w=0;
	for(i=0;i<19;i++){
		L3[i]=L1[i]+L2[i]+w;
		if(L3[i]>=10){
			w = 1;
			L3[i] %=10;
		}else{
			w=0;
		}
	}
	for(i=0;i<19;i++){
		L1[i]=L2[i];
		L2[i]=L3[i];
	}
	add(n-1);
}
//L2に答えが入っているのでL3を出力
void PRI(){
	int i=18;
	while(L2[i]==0)i--;
	while(i!=-1){
		printf("%d",L2[i]);
		i--;
	}
	printf("\n");
	
}