#include #include #include #include using namespace std;const long long maxn=1000000+10;const long long mod=2147483648;long long prime[maxn],primes[maxn],cnt;struct T{ long long s[4][4]; T(){ memset(s,0,sizeof(s)); }};T operator * (T a,T b){ T res; for(long long i=1;i<=2;i++){ for(long long j=1;j<=2;j++){ for(long long k=1;k<=2;k++) res.s[i][j]=(res.s[i][j]+a.s[i][k]*b.s[k][j]%mod)%mod; } } return res;}long long matrix_pow(T a, long long x) { T ans; ans.s[1][1]=ans.s[2][2]=1; while(x) { if(x&1)ans=ans*a; a=a*a; x>>=1; } return ans.s[2][1];}void choose(){ for(long long i=2;i*i<=5000;i++){ if(!prime[i]){ for(long long j=i*i;j<=5000;j+=i)prime[j]=1; } } for(long long i=2;i<=5000;i++)if(!prime[i])primes[++cnt]=i;}int main(){ long long i,j,k,m,n; T ans1; ans1.s[1][1]=ans1.s[1][2]=ans1.s[2][1]=1; scanf("%lld",&n); long long z=matrix_pow(ans1,n); choose(); printf("%lld=",z); long long flag=0; for(i=2;i<=z;i++){ if(z%i)continue; if(z%i==0&&!prime[i]){ while(z%i==0){ if(!flag)printf("%lld",i); else printf("*%lld",i); flag=1; z/=i;} } } return 0;}