#include <stdio.h>
#include <stdlib.h>
#define MAXN 1000000

struct NF
{
  int * p;
  int * v;
  int * in;
  int L;
};

struct NF freey;
struct NF * freex; //freex[y] contains x <-> dx+y is free
int iperm[MAXN];
int perm[MAXN];
int usey[MAXN];
long long N,M,a,b,c,d,gcd;

int find(struct NF * f,int i)
{
  f->p[i]=f->p[f->p[i]];
  if(f->p[i]==i)return i;
  else return find(f,f->p[i]);
}

void unio(struct NF * f,int i,int j)
{
  int ii=find(f,i), jj=find(f,j);
  f->p[ii]=jj;
}

int next_free(struct NF * f,int i)
{
  return f->v[find(f,i)];
}

void add(struct NF * f,int i)
{
  f->in[i]=1;
  f->v[i]=((i+1)%(f->L));
  if(f->in[(i+1)%(f->L)])unio(f,i,(i+1)%(f->L));
  if(f->in[(i-1+f->L)%(f->L)])unio(f,(i-1+f->L)%(f->L),i);
}

void nfinit(struct NF * f,int L)
{
  int i;
  f->p=malloc(sizeof(int)*L);
  f->v=malloc(sizeof(int)*L);
  f->in=malloc(sizeof(int)*L);
  for(i=0;i<L;i++)
  {
    f->p[i]=i;
    f->v[i]=i;
    f->in[i]=0;
  }
  f->L=L;
}

void nffree(struct NF * f)
{
  free(f->p);
  free(f->v);
  free(f->in);
}

void addblock(int b,int p)
{
  long long x,y,xx,yy;
  y=p%gcd; x=iperm[p/gcd];
  yy=next_free(&freey,y);
  if(yy<y)x=iperm[((p+gcd)%N)/gcd];
  usey[yy]++; if(usey[yy]>=(N/gcd))add(&freey,yy);
  xx=next_free(&(freex[yy]),x);
  add(&(freex[yy]),xx);
  perm[(d*xx+yy)%N]=b;
}

int GCD(int a,int b)
{
  if(b==0)return a;
  else return GCD(b,a%b);
}

void constrperm()
{
  int i,C,T;
  gcd=GCD(N,d);
  nfinit(&freey,gcd);
  freex=malloc(sizeof(struct NF)*gcd);
  for(i=0;i<gcd;i++)
  {
    usey[i]=0;
    nfinit(&(freex[i]),N/gcd);
  }
  for(i=0,T=0;i<N/gcd;i++,T=(T+d)%N)iperm[T/gcd]=i;
  addblock(0,M%N);
  C=0;
  for(i=1;i<N;i++)
  {
    C=(C*a+b)%c;
    addblock(i,C%N);
  }
}

void deconstr()
{
  int i;
  nffree(&freey);
  for(i=0;i<gcd;i++)nffree(&(freex[i]));
  free(freex);
}

int compute()
{
  int R=N,i,j,k;
  if(perm[0]!=0)R-=2;
  for(i=0;i<N;i++)if(perm[i]!=-1)
  {
    if(perm[i]==i){
      R--;
      perm[i]=-1;
    }
    else
    {
      j=i;
      while(perm[j]!=-1){k=perm[j]; perm[j]=-1; j=k;}
      R++;
    }
  }
  return R;
}

int main()
{
  int K;
  scanf("%d ",&K);
  while(K--)
  {
    scanf("%lld %lld %lld %lld %lld %lld ",&N,&M,&a,&b,&c,&d);
    constrperm();
    printf("%d\n",compute());
    deconstr();
  }
  return 0;
}
