#include #include #include #include #include #include #include #include using namespace std; typedef long long LL; const LL mod=1e9+7; const LL mod2=(mod+1)*(mod-1); int T; LL aa,b,x,y,z; LL now; LL ans[3][3],a[3][3],dq[3][3]; LL mul_mod(LL a,LL b,LL c) { return (a*b-(long long)(a/(long double)c*b+1e-3)*c+c)%c; } LL powmod(LL a,LL b,LL c) { LL ans=1; while (b) { if (b%2==1) ans=mul_mod(ans,a,c); b/=2; a=mul_mod(a,a,c); } return ans; } void work(LL x) { for (int i=1;i<=2;++i) for (int j=1;j<=2;++j) ans[i][j]=0; ans[1][1]=ans[2][2]=1; while (x) { if (x%2==1) { memset(dq,0,sizeof(dq)); for (int k=1;k<=2;++k) for (int i=1;i<=2;++i) for (int j=1;j<=2;++j) dq[i][j]=(dq[i][j]+ans[i][k]*a[k][j]%mod)%mod; for (int i=1;i<=2;++i) for (int j=1;j<=2;++j) ans[i][j]=dq[i][j]; } x/=2; memset(dq,0,sizeof(dq)); for (int k=1;k<=2;++k) for (int i=1;i<=2;++i) for (int j=1;j<=2;++j) dq[i][j]=(dq[i][j]+a[i][k]*a[k][j]%mod)%mod; for (int i=1;i<=2;++i) for (int j=1;j<=2;++j) a[i][j]=dq[i][j]; } } int main() { cin>>T; while (T--) { cin>>aa>>b>>x>>y; z=powmod(x,y,mod2); z=z-1; z%=mod2;z+=mod2;z%=mod2; a[1][1]=2*aa%mod; a[1][2]=b-aa*aa%mod; a[1][2]%=mod; a[1][2]+=mod; a[1][2]%=mod; a[2][1]=1;a[2][2]=0; work(z); now=2*aa%mod*ans[1][1]%mod; now=now+ans[1][2]*2%mod; now%=mod; cout<