For this Question: Sid is super fascinated with Fibonacci numbers. Since he thinks a lot about Fibonacci numbers, this time he has come up with a strange problem on them, specially designed for you. As usual, he will give you a chapo if you can manage to solve this problem.
You are given four integers x, y, a, b. You need to compute:
The greatest common divisor of Fib(x**a - y**a), Fib(x**b - y**b) modulo 1000000007.
Here, Fib(i) refers to the ith Fibonacci number, Fib(0)=0, Fib(1)=1, Fib(i)=Fib(i-1)+Fib(i-2).
Note:
n**p refers to n raised to the power p.The only line of input contains four integers x, y, a, b.

Constraints
1 <= a, b <= 10000
1 <= y < x <= 1000000000
gcd(x, y) = 1Print a single integer, the answer to the given input.Sample Input
3 2 2 4

Sample Output
5, I have written this Solution Code: #pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#ifndef print
#define print(...)
#define trace(...)
#define endl '\n'
#endif
#define pb push_back
#define fi first
#define se second
#define int long long
typedef long long ll;
typedef long double f80;
#define double long double
#define pii pair<int,int>
#define pll pair<ll,ll>
#define sz(x) ((long long)x.size())
#define fr(a,b,c) for(int a=b; a<=c; a++)
#define rep(a,b,c) for(int a=b; a<c; a++)
#define trav(a,x) for(auto &a:x)
#define all(con) con.begin(),con.end()
const ll infl = 0x3f3f3f3f3f3f3f3fLL;
const int infi = 0x3f3f3f3f;
//const int mod=998244353;
const int mod = 1000000007;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> oset;
auto clk = clock();
mt19937_64 rang(chrono::high_resolution_clock::now().time_since_epoch().count());
int rng(int lim) { uniform_int_distribution<int> uid(0, lim - 1); return uid(rang); }
int powm(int a, int b, int mod) { int res = 1; while (b) { if (b & 1) res = (res * a) % mod; a = (a * a) % mod; b >>= 1; } return res; }

int pisano = 2000000016;
const int M = 1000000007;
map<int, int> F;

int f(int n) {
    if (F.count(n)) return F[n];
    int k=n/2;
    if (n%2==0) {
        return F[n] = ((f(k)*f(k))%M + (f(k-1)*f(k-1))%M) % M;
    } else {
        return F[n] = ((f(k)*f(k+1))%M + (f(k-1)*f(k))%M) % M;
    }
}

int32_t main() {
	ios::sync_with_stdio(false); cin.tie(NULL); cout.precision(10); srand(chrono::high_resolution_clock::now().time_since_epoch().count());
	int x, y, a, b;
	F[0] = 1, F[1] = 1;
	cin >> x >> y >> a >> b;
	a = __gcd(a, b);
	int y1 = (powm(x, a, pisano) - powm(y, a, pisano) + pisano) % pisano;
	y1--;
	y1 += pisano;
	y1 %= pisano;
	cout << f(y1);
}, In this Programming Language: C++, Now tell me if this Code is compilable or not?