#include <stdio.h>
#include <math.h>
#include <string.h>
int kk[55];
int aa[55];
int okb[3605];
int bb[3605];
int p=0;
int L,R;
void fei1(int a,int b){
//puts("1");
kk[0]=1,kk[1]=1;
int i=1;
while(kk[i]<=R){
i++;
kk[i]=a*kk[i-1]+b*kk[i-2];
//printf("%d ",kk[i]);
}
}//数列X
void fei2(int c,int d){
//puts("2");
aa[0]=1,aa[1]=1;
int i=1;
while(aa[i]<=R){
i++;
aa[i]=c*aa[i-1]+d*aa[i-2];
}
//puts("2.1");
}//数列Y
void fei3(){
//puts("3");
p=0;
for(int i=0;i<55;i++){
if(kk[i]==0) break;
for(int j=0;j<55;j++){
if(aa[j]==0) continue;
okb[p]=kk[i]+aa[j];
//printf("%d ",okb[p]);
p++;
}
}
//puts("");
}//数列Z
void paixu(){
//puts("4");
// for(int i=0;i<p;i++){
// printf("%d ",okb[i]);
// }
// puts("");
for(int i=0;i<p;i++){
for(int j=i+1;j<p;j++){
if(okb[i]==okb[j]) {
//puts("做了");
for(int k=j+1;k<p;k++){
bb[k]=okb[k];
}
for(int k=j+1;k<p;k++){
okb[k-1]=bb[k];
}
p--;
j--;
}
}
}
// for(int i=0;i<p;i++){
// printf("%d ",okb[i]);
// }
// puts("");
for(int i=0;i<p-1;i++){
for(int j=0;j<p-i-1;j++){
if(okb[j]>okb[j+1]){
int temp;
temp=okb[j];
okb[j]=okb[j+1];
okb[j+1]=temp;
}
}
}
// for(int i=0;i<p;i++){
// printf("%d ",okb[i]);
// }
// puts("shabi");
}//排序和把相同的数筛去;
int choose(){
//puts("5");
int i=0;
while(okb[i]<L){
i++;
}
int x=i;
while(okb[i]<=R){
i++;
}
i--;
int y=i;
int max=0,m=0;
int g=x;
//printf("%d %d \n",g,y);
while(g<y-1){
int f=0;
for(int j=g;j<=y-1;j++){
//printf(" %d %d\n",okb[j],okb[j+1]);
if(okb[j]==okb[j+1]-1) {
g=j;
f++;
}
else if(okb[j]!=okb[j+1]-1) {
g=j+1;
// puts("1");
break;
}
}
if(max<f) max=f+1;
//printf("%d\n",max);
}
return max;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
scanf("%d%d",&L,&R);
fei1(a,b);
fei2(c,d);
fei3();
paixu();
printf("%d\n",choose());
memset(kk,0,sizeof(kk));
memset(aa,0,sizeof(aa));
memset(okb,0,sizeof(okb));
memset(bb,0,sizeof(bb));
}
}