#include<bits/stdc++.h>
using namespace std;
#define si(x) scanf("%d",&x)
#define sll(x) scanf("%lld",&x)
#define pri(x) printf("%d",x)
#define pll(x) printf("%lld",x)
#define sstr(s) scanf("%s",s)
#define nl printf("\n")
#define ll long long int
#define pii pair<int,int>
#define pLL pair<ll,ll>
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define fr first
#define se second
#define SZ 100005
#define FOR(i,x,y) for(int i=x;i<y;i++)
#define mod 1000000007
ll fact[200005];
ll invfact[200005];
ll power(ll a, ll b) {
ll ans = 1;
while(b) {
if(b&1) {
ans = (ans*a)%mod;
}
a = (a*a)%mod;
b = b>>1;
}
return ans;
}
void func() {
fact[0] = fact[1] = 1;
invfact[0] = invfact[1] = 1;
for(int i=2;i<=200000;i++) {
fact[i] = (1ll*fact[i-1]*i)%mod;
invfact[i] = (1ll*invfact[i-1]*power(i,mod-2))%mod;
}
}
ll answer(int x1, int y1, int x2, int y2) {
ll m = x2-x1;
ll n = y2-y1;
ll k = min(m,n);
ll ans = 0;
for(int i=0;i<=k;i++) {
ll t1 = (1ll*invfact[i]*invfact[n-i])%mod;
t1 = (1ll*t1*invfact[m-i])%mod;
ans = ans + (1ll*fact[n+m-i]*t1)%mod;
ans %= mod;
}
return ans;
}
int main()
{
func();
int t; si(t);
int tc=1;
while(t--) {
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
if(x1>x2 || y1>y2) {
cout<<"Case "<<tc++<<": "<<0<<endl;
continue;
}
cout<<"Case "<<tc++<<": "<<answer(x1,y1,x2,y2)<<endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIHNpKHgpIHNjYW5mKCIlZCIsJngpCiNkZWZpbmUgc2xsKHgpIHNjYW5mKCIlbGxkIiwmeCkKI2RlZmluZSBwcmkoeCkgcHJpbnRmKCIlZCIseCkKI2RlZmluZSBwbGwoeCkgcHJpbnRmKCIlbGxkIix4KQojZGVmaW5lIHNzdHIocykgc2NhbmYoIiVzIixzKQojZGVmaW5lIG5sIHByaW50ZigiXG4iKQojZGVmaW5lIGxsIGxvbmcgbG9uZyBpbnQKI2RlZmluZSBwaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIHBMTCBwYWlyPGxsLGxsPgojZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgZnIgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBTWiAxMDAwMDUKI2RlZmluZSBGT1IoaSx4LHkpIGZvcihpbnQgaT14O2k8eTtpKyspCiNkZWZpbmUgbW9kIDEwMDAwMDAwMDcKCmxsIGZhY3RbMjAwMDA1XTsKbGwgaW52ZmFjdFsyMDAwMDVdOwoKbGwgcG93ZXIobGwgYSwgbGwgYikgewogICAgbGwgYW5zID0gMTsKICAgIHdoaWxlKGIpIHsKCWlmKGImMSkgewoJICAgIGFucyA9IChhbnMqYSklbW9kOwoJfQoJYSA9IChhKmEpJW1vZDsKCWIgPSBiPj4xOwogICAgfQogICAgcmV0dXJuIGFuczsKfQoKdm9pZCBmdW5jKCkgewogICAgZmFjdFswXSA9IGZhY3RbMV0gPSAxOwogICAgaW52ZmFjdFswXSA9IGludmZhY3RbMV0gPSAxOwogICAgZm9yKGludCBpPTI7aTw9MjAwMDAwO2krKykgewoJZmFjdFtpXSA9ICgxbGwqZmFjdFtpLTFdKmkpJW1vZDsKCWludmZhY3RbaV0gPSAoMWxsKmludmZhY3RbaS0xXSpwb3dlcihpLG1vZC0yKSklbW9kOwogICAgfQp9CgpsbCBhbnN3ZXIoaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKSB7CiAgICBsbCBtID0geDIteDE7CiAgICBsbCBuID0geTIteTE7CiAgICBsbCBrID0gbWluKG0sbik7CiAgICBsbCBhbnMgPSAwOwogICAgZm9yKGludCBpPTA7aTw9aztpKyspIHsKCWxsIHQxID0gKDFsbCppbnZmYWN0W2ldKmludmZhY3Rbbi1pXSklbW9kOwoJdDEgPSAoMWxsKnQxKmludmZhY3RbbS1pXSklbW9kOwoJYW5zID0gYW5zICsgKDFsbCpmYWN0W24rbS1pXSp0MSklbW9kOwoJYW5zICU9IG1vZDsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KCmludCBtYWluKCkKewogICAgZnVuYygpOwogICAgaW50IHQ7IHNpKHQpOwogICAgaW50IHRjPTE7CiAgICB3aGlsZSh0LS0pIHsKCWludCB4MSx5MSx4Mix5MjsKCWNpbj4+eDE+PnkxPj54Mj4+eTI7CglpZih4MT54MiB8fCB5MT55MikgewoJICAgIGNvdXQ8PCJDYXNlICI8PHRjKys8PCI6ICI8PDA8PGVuZGw7CgkgICAgY29udGludWU7Cgl9Cgljb3V0PDwiQ2FzZSAiPDx0YysrPDwiOiAiPDxhbnN3ZXIoeDEseTEseDIseTIpPDxlbmRsOwogICAgfQogICAgcmV0dXJuIDA7Cn0=