#define int long long int f[65][4][2][2]; int stat[65],p[65]; int cnt; voidadd(int &x,int y){x=(x+y)%mod;} intget(int n){ if (n==0) return0; memset(f,0,sizeof(f)); memset(p,0,sizeof(p)); int tot=0; while (n) p[++tot]=n%2,n/=2; f[0][0][1][0]=1; int i,j,k,l,a,b,c; for (i=0;i<=60;i++) { for (j=0;j<=3;j++) { for (k=0;k<=1;k++) { for (l=0;l<=1;l++) { for (a=0;a<=1;a++) for (b=0;b<=1;b++) for (c=0;c<=1;c++) { int s=((a+b+c+j))%2; if ((s^a^c)==stat[i+1]) { int pus=0; if (s>p[i+1]||(l&&s==p[i+1])) pus=1; add(f[i+1][(j+a+b+c)/2][k&(b==0)][pus],f[i][j][k][l]); } } } } } } return f[60][0][0][0]; } voidsolve(void){ int i,n,m,s=0; read(n);read(m); memset(stat,0,sizeof(stat)); s=m; if (n%4>=1) s^=n; if (n%4>=2) s^=(n-1); if (n%4>=3) s^=(n-2); if (s==0) returnputs("0"),void(); cnt=0; while (s) stat[++cnt]=s%2,s/=2; int tmp1,tmp2; printf("%lld\n",(get(n)+get(m)-get(m-1)+mod)%mod); } signedmain(void){ int T; read(T);while (T--) solve(); return0; }