Help me in solving GCDMOD problem

My issue

My code

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define vi vector<int>
#define pb push_back
#define mod 1000000007
#define ff first
#define ss second
#define pi pair<int,int>
#define pii std::vector<pi>
#define lcm(a,b)  a*b / (__gcd(a,b))
#define mp  unordered_map<int,int>
#define REP(i,a,b)
#define SQ(a) (a)*(a)
#define MP make_pair
int pow(int n, int m){
    int ans = 1;
 while(m){
    if(m){
        m%=mod;
        n%=mod;
        ans*=n;
        ans%=mod;
        m--;
    }
    else{
        n = ((n%mod)*(n%mod))%mod;
        n%=mod;
        m/=2;
    }
}
return (ans%mod);
}

signed main(){
         int tc;
         cin>>tc;
         while(tc--){
             int A,B,N;
             cin>>A>>B>>N;
         int d1 = pow(A,N);
         int d2 = pow(B,N);
         int d = ((d1%mod)+(d2%mod))%mod;
         int p = (abs(A-B))%mod;
          int ans = __gcd(d, p)%mod;
          cout<<ans<<endl;
         }
}

Problem Link: GCDMOD Problem - CodeChef