#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
struct node
{
int m[3][3];
node()
{
memset(m,0,sizeof m);
}
}x,y,z,k;
int mod;
node mul(node p,node q)
{
node sum;
for(int i=1;i<=2;i++)
{
for(int j=1;j<=2;j++)
{
for(int k=1;k<=2;k++)
sum.m[i][j]=(sum.m[i][j]+p.m[i][k]*q.m[k][j])%mod;
}
}
return sum;
}
node f(int n)
{
node sum=z,l=y;
while(n)
{
if(n&1) sum=mul(sum,l);
n>>=1;
l=mul(l,l);
}
return sum;
}
int main()
{
int t,a,b,n;
scanf("%d",&t);
while(t--)
{
scanf("%d %d %d %d",&a,&b,&n,&mod);
int l=mod;
mod=1;
while(l--) mod*=10;
if(n==0)
{
printf("%d\n",a%mod);continue;
}
if(n==1)
{
printf("%d\n",b%mod);continue;
}
x.m[1][1]=b;x.m[1][2]=a;
y.m[1][1]=y.m[1][2]=y.m[2][1]=1;
for(int i=0;i<=2;i++)
z.m[i][i]=1;
k=f(n-1);
k=mul(x,k);
printf("%d\n",k.m[1][1]);
}
return 0;
}