#include <stdio.h>
#include "gmp.h"

/// dlfcn.h ///
#if defined(WIN32) || (!defined(__GNUC__) && !defined(__clang__))
	void* LoadLibraryA(const char *x);
	void* GetProcAddress(void *x,const char *y);
	int   FreeLibrary(void *x);
#elif defined(__APPLE__)
	void* dlopen(const char *x,int y);
	void* dlsym(void *x,const char *y);
	int   dlclose(void *x);
	#define LoadLibraryA(s) dlopen(s,2)
	#define GetProcAddress dlsym
	#define FreeLibrary dlclose
#else
	void* __libc_dlopen_mode(const char *x,int y);
	void* __libc_dlsym(void *x,const char *y);
	int   __libc_dlclose(void *x);
	#define LoadLibraryA(s) __libc_dlopen_mode(s,2)
	#define GetProcAddress __libc_dlsym
	#define FreeLibrary __libc_dlclose
#endif

typedef void (*type_mpz_init)(mpz_t);
typedef void (*type_mpz_clear)(mpz_t);
typedef void (*type_mpz_out_str)(FILE*,int,mpz_t);
typedef void (*type_mpz_set)(mpz_t,mpz_t);
typedef void (*type_mpz_set_ui)(mpz_t,unsigned long);
typedef void (*type_mpz_cmp_ui)(mpz_t,unsigned long);

typedef void (*type_mpz_add)(mpz_t,mpz_t,mpz_t);
typedef void (*type_mpz_sub)(mpz_t,mpz_t,mpz_t);
typedef void (*type_mpz_mul)(mpz_t,mpz_t,mpz_t);
typedef void (*type_mpz_tdiv_q)(mpz_t,mpz_t,mpz_t);
typedef void (*type_mpz_tdiv_r)(mpz_t,mpz_t,mpz_t);

type_mpz_init mympz_init;
type_mpz_clear mympz_clear;
type_mpz_out_str mympz_out_str;
type_mpz_set mympz_set;
type_mpz_set_ui mympz_set_ui;
type_mpz_cmp_ui mympz_cmp_ui;

type_mpz_add mympz_add;
type_mpz_sub mympz_sub;
type_mpz_mul mympz_mul;
type_mpz_tdiv_q mympz_tdiv_q;
type_mpz_tdiv_r mympz_tdiv_r;

void mul(mpz_t a1,mpz_t b1,mpz_t c1,mpz_t d1,mpz_t a2,mpz_t b2,mpz_t c2,mpz_t d2){
	mpz_t a0,b0,c0,d0,t,u;
	mympz_init(a0);
	mympz_init(b0);
	mympz_init(c0);
	mympz_init(d0);
	mympz_init(t);
	mympz_init(u);

	mympz_mul(t,a1,a2);
	mympz_mul(u,b1,c2);
	mympz_add(a0,t,u);
	mympz_mul(t,a1,b2);
	mympz_mul(u,b1,d2);
	mympz_add(b0,t,u);
	mympz_mul(t,c1,a2);
	mympz_mul(u,d1,c2);
	mympz_add(c0,t,u);
	mympz_mul(t,c1,b2);
	mympz_mul(u,d1,d2);
	mympz_add(d0,t,u);

	mympz_set(a1,a0);
	mympz_set(b1,b0);
	mympz_set(c1,c0);
	mympz_set(d1,d0);

	mympz_clear(a0);
	mympz_clear(b0);
	mympz_clear(c0);
	mympz_clear(d0);
	mympz_clear(t);
	mympz_clear(u);
}

int main(){
	//void *h=LoadLibraryA("/opt/local/lib/libgmp.dylib"); //MacPorts
	//void *h=LoadLibraryA("/usr/lib/i386-linux-gnu/libgmp.so.10.0.5"); //ideone-codeiq
	void *h=LoadLibraryA("/usr/lib/i386-linux-gnu/libgmp.so.10"); //ideone
	//void *h=LoadLibraryA("/usr/lib64/libgmp.so.10.0.2"); //wandbox
	//void *h=LoadLibraryA("/usr/lib64/libgmp.so.10"); //yukicoder

	mympz_init=(type_mpz_init)GetProcAddress(h,"__gmpz_init");
	mympz_clear=(type_mpz_clear)GetProcAddress(h,"__gmpz_clear");
	mympz_out_str=(type_mpz_out_str)GetProcAddress(h,"__gmpz_out_str");
	mympz_set=(type_mpz_set)GetProcAddress(h,"__gmpz_set");
	mympz_set_ui=(type_mpz_set_ui)GetProcAddress(h,"__gmpz_set_ui");
	mympz_cmp_ui=(type_mpz_cmp_ui)GetProcAddress(h,"__gmpz_cmp_ui");

	mympz_add=(type_mpz_add)GetProcAddress(h,"__gmpz_add");
	mympz_sub=(type_mpz_sub)GetProcAddress(h,"__gmpz_sub");
	mympz_mul=(type_mpz_mul)GetProcAddress(h,"__gmpz_mul");
	mympz_tdiv_q=(type_mpz_tdiv_q)GetProcAddress(h,"__gmpz_tdiv_q");
	mympz_tdiv_r=(type_mpz_tdiv_r)GetProcAddress(h,"__gmpz_tdiv_r");

	mpz_t a1,b1,c1,d1,a2,b2,c2,d2;
	mympz_init(a1);
	mympz_init(b1);
	mympz_init(c1);
	mympz_init(d1);
	mympz_init(a2);
	mympz_init(b2);
	mympz_init(c2);
	mympz_init(d2);

	mympz_set_ui(a1,1);
	mympz_set_ui(b1,0);
	mympz_set_ui(c1,0);
	mympz_set_ui(d1,1);
	mympz_set_ui(a2,1);
	mympz_set_ui(b2,1);
	mympz_set_ui(c2,1);
	mympz_set_ui(d2,0);
	
	int N;
	scanf("%d",&N);
	N=(N+3)/2*2;
	for(;N;N>>=1){
		if(N&1)mul(a1,b1,c1,d1,a2,b2,c2,d2);
		mul(a2,b2,c2,d2,a2,b2,c2,d2);
	}
	mympz_set_ui(a2,1);
	mympz_sub(c1,c1,a2);
	mympz_out_str(stdout,10,c1);
	puts("");

	mympz_clear(a1);
	mympz_clear(b1);
	mympz_clear(c1);
	mympz_clear(d1);
	mympz_clear(a2);
	mympz_clear(b2);
	mympz_clear(c2);
	mympz_clear(d2);

	FreeLibrary(h);
}