#include<bits/stdc++.h>
using namespace std;
inline void read(long long &n){
char ch;
long long x=0,f=1;
for(ch=getchar();!(ch>='0'&&ch<='9')&&ch!='-';ch=getchar());
if(ch=='-')
{
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<3)+(x<<1)+ch-'0';
ch=getchar();
}
n=x*f;
}
const int mod=1000000007;
long long n;
struct mul
{
long long a[105][105];
mul()
{
memset(a,0,sizeof a);
}
inline void bulid()
{
for(int i=1;i<=n;i++) a[i][i]=1;
}
}ans,a;
mul operator *(const mul &x,const mul &y)
{
mul z;
for(int k=1;k<=4;k++)
{
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
z.a[i][j]=(z.a[i][j]+x.a[i][k]*y.a[k][j])%mod;
}
}
}
return z;
}
mul operator +(const mul &x,const mul &y)
{
mul z;
for(int k=1;k<=4;k++)
{
for(int i=1;i<=4;i++)
{
for(int j=1;j<=1;j++)
{
z.a[i][j]=(z.a[i][j]+x.a[i][k]*y.a[k][j])%mod;
}
}
}
return z;
}
void pr(mul a)
{
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
printf("%lld ",a.a[i][j]);
}
printf("\n");
}
}
int main()
{
long long T;
read(T);
for(int _=1;_<=T;_++)
{
long long x,y,a1,a2;
read(n);read(a1);read(a2);read(x);read(y);
a.a[1][1]=1;a.a[1][2]=1;a.a[1][3]=0;a.a[1][4]=0;
a.a[2][1]=0;a.a[2][2]=x*x%mod;a.a[2][3]=y*y%mod;a.a[2][4]=2*x*y%mod;
a.a[3][1]=0;a.a[3][2]=1;a.a[3][3]=0;a.a[3][4]=0;
a.a[4][1]=0;a.a[4][2]=x;a.a[4][3]=0;a.a[4][4]=y;
ans.a[1][1]=a1*a1%mod;
ans.a[2][1]=a2*a2%mod;
ans.a[3][1]=a1*a1%mod;
ans.a[4][1]=a1*a2%mod;
n--;
do
{
if(n&1) ans=a+ans;
a=a*a;
n>>=1;
}while(n);
printf("%lld\n",ans.a[1][1]);
}
return 0;
}