#include using namespace std; #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)>(b)?(a):(b)) #define memo(a,v) memset(a,v,sizeof(a)) #define pb push_back #define all(a) a.begin(),a.end() #define eps (1e-9) #define inf (1<<29) #define i64 long long #define u64 unsigned i64 #define AIN(a,b,c) assert(a<=b && b<=c) #define MAXN 1000000000 #define MAX 500 #define MOD 1000000007 typedef pair pii; int mat[MAX][MAX],res[MAX][MAX],tmp[MAX][MAX]; void mult(int a[MAX][MAX],int b[MAX][MAX],int c[MAX][MAX],int n){ for(int i = 0;i pf, cnt; int main(){ int t, n, k, i,m, L, R, d, j, p, c, mask, nmask; scanf("%d",&t); AIN(1,t,10); while(t--){ scanf("%d %d %d %d",&n,&m,&L,&R); AIN(1,n,5000000); AIN(1,L,R); AIN(L,R,m); AIN(R,m,1000); int ans = 0; for(d = L;d<=R;d++){ int k = d; pf.clear(); cnt.clear(); for(i = 2;i*i<=k;i++){ if(k % i) continue; c = 0; while(k%i==0){ k/=i; c++; } pf.pb(i); cnt.pb(c); } if(k>1){ pf.pb(k); cnt.pb(1); } int p = pf.size(); memset(mat,0,sizeof(mat)); memset(res,0,sizeof(res)); for(mask = 0;mask < (1<=cnt[j]){ nmask |= (1<