I=input R=range def m(X,Y): A=[[0,0],[0,0]] for i in R(2): for j in R(2): for k in R(2): for l in R(2): A[(i+k)&1][(j+l)&1]+=X[i][j]*Y[k][l]*[1,M][(i+k)>>1]*[1,L][(j+l)>>1] return[[x%B for x in v]for v in A] def p(X,N): A=[[1,0],[0,0]] while N: if N&1:A=m(A,X) X=m(X,X) N>>=1 return A for t in R(int(I())): N,M,L,B=map(int,I().split()) A=p([[0,1],[1,0]],N) print(A[0][N&1]%B)