#include <iostream>
using namespace std;
void multiply(int F[2][2], int M[2][2]) {
int a = F[0][0] * M[0][0] + F[0][1] * M[1][0];
int b= F[0][0] * M[0][1] + F[0][1] * M[1][1];
int c = F[1][0] * M[0][0] + F[1][1] * M[1][0];
int d = F[1][0] * M[0][1] + F[1][1] * M[1][1];
F[0][0] = a;
F[0][1] = b;
F[1][0] = c;
F[1][1] = d;
}
void power(int F[2][2], int n) {
if (n == 0 || n == 1)
return;
int M[2][2] = {{1,1},{1,0}};
power(F, n / 2);
multiply(F, F);
if (n % 2 != 0)
multiply(F, M);
}
int fibonacci_matrix(int n) {
int F[2][2] = {{1,1},{1,0}};
if (n == 0)
return 0;
power(F, n - 1);
return F[0][0];
}
int main() {
int n;
cout<<"Enter the number ";
cin>>n;
cout<<fibonacci_matrix(n)<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp2b2lkIG11bHRpcGx5KGludCBGWzJdWzJdLCBpbnQgTVsyXVsyXSkgewogICBpbnQgYSA9IEZbMF1bMF0gKiBNWzBdWzBdICsgRlswXVsxXSAqIE1bMV1bMF07CiAgIGludCBiPSBGWzBdWzBdICogTVswXVsxXSArIEZbMF1bMV0gKiBNWzFdWzFdOwogICBpbnQgYyA9IEZbMV1bMF0gKiBNWzBdWzBdICsgRlsxXVsxXSAqIE1bMV1bMF07CiAgIGludCBkID0gRlsxXVswXSAqIE1bMF1bMV0gKyBGWzFdWzFdICogTVsxXVsxXTsKICAgRlswXVswXSA9IGE7CiAgIEZbMF1bMV0gPSBiOwogICBGWzFdWzBdID0gYzsKICAgRlsxXVsxXSA9IGQ7Cn0Kdm9pZCBwb3dlcihpbnQgRlsyXVsyXSwgaW50IG4pIHsKICAgaWYgKG4gPT0gMCB8fCBuID09IDEpCiAgICAgIHJldHVybjsKICAgaW50IE1bMl1bMl0gPSB7ezEsMX0sezEsMH19OwogICBwb3dlcihGLCBuIC8gMik7CiAgIG11bHRpcGx5KEYsIEYpOwogICBpZiAobiAlIDIgIT0gMCkKICAgICAgbXVsdGlwbHkoRiwgTSk7Cn0KaW50IGZpYm9uYWNjaV9tYXRyaXgoaW50IG4pIHsKICAgaW50IEZbMl1bMl0gPSB7ezEsMX0sezEsMH19OwogICBpZiAobiA9PSAwKQogICAgICByZXR1cm4gMDsKICAgcG93ZXIoRiwgbiAtIDEpOwogICByZXR1cm4gRlswXVswXTsKfQppbnQgbWFpbigpIHsKICAgaW50IG47CiAgIGNvdXQ8PCJFbnRlciB0aGUgbnVtYmVyICI7CiAgIGNpbj4+bjsKICAgY291dDw8Zmlib25hY2NpX21hdHJpeChuKTw8ZW5kbDsKICAgcmV0dXJuIDA7Cn0=