#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<long long, null_type,less<>, rb_tree_tag,tree_order_statistics_node_update>
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using vll = vector<ll>;
using pll = pair<ll, ll>;
using mll = map<ll,ll>;
using sll = set<ll>;
#define iv(v) for(auto &i:v) cin >> i
#define ov(v) for(auto &i:v) cout << i << " "
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define yes cout << "YES\n"
#define no cout << "NO\n"
#ifdef ONLINE_JUDGE
#define Bismillah ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#else
#define Bismillah ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); \
freopen("in.txt", "r", stdin); \
freopen("out.txt", "w", stdout);
#endif
const ll MOD = 1e9 + 7;
ll add(ll a, ll b) {return ((a % MOD) + (b % MOD)) % MOD;}
ll mul(ll a, ll b) {return ((a % MOD) * (b % MOD)) % MOD;}
ll sub(ll a, ll b) {return (((a - b) % MOD) + MOD) % MOD;}
ll modExp(ll a, ll b) {
if (b <= 0) return 1;
ll ret = modExp(a * a % MOD, b / 2);
if (b % 2) ret = ret * a % MOD;
return ret;
}
ll inverse(ll b) {return modExp(b, MOD - 2);}
ll divv(ll a, ll b) {return ((a % MOD) * (inverse(b) % MOD)) % MOD;}
const ll N=1e7+1;
ll spf[N];
#define ll int
void sieve(int n){
for(ll i=1;i<=n;i++)spf[i]=i;
for(int i = 2; i * i <= n; i++){
if(spf[i]==i){
for(int j = i * i; j <= n; j += i)
if(spf[j]==j)spf[j]=i;
}
}
}
ll countDivisors(ll n) {
ll ans=1;
while (n>1) {
ll p=spf[n];
ll count=0;
while (n%p==0) {
n/=p;
count++;
}
ans*=(count+1);
}
return ans;
}
vector<int> divisors(int x){
vector<pair<int,int>> f;
while(x>1){
int p=spf[x], c=0;
while(x%p==0){ x/=p; c++; }
f.push_back({p,c});
}
vector<int> divs = {1};
for(auto &p:f){
int sz=divs.size();
for(int i=0;i<sz;i++){
int val = divs[i];
for(int k=0;k<p.second;k++){
val *= p.first;
divs.push_back(val);
}
}
}
sort(divs.begin(), divs.end());
return divs;
}
void solve() {
}
int main() {
Bismillah
ll t=1;
cin >> t;
vector<ll> v(1e5 + 1);
v[0] = 0;
v[1] = v[2] = v[3] = 1;
for (int i = 4; i <= 1e5; i++) v[i] = (v[i - 1] + v[i - 3]) % MOD;
int i = 1;
while (t--) {
//solve();
ll k, n;
cin >> k >> n;
cout << "Case " << i << ": " << ((2 * k) % MOD * v[n]) % MOD << '\n';
i++;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwojZGVmaW5lIG9yZGVyZWRfc2V0IHRyZWU8bG9uZyBsb25nLCBudWxsX3R5cGUsbGVzczw+LCByYl90cmVlX3RhZyx0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKdXNpbmcgdWxsID0gdW5zaWduZWQgbG9uZyBsb25nOwp1c2luZyBsZCA9IGxvbmcgZG91YmxlOwp1c2luZyB2bGwgPSB2ZWN0b3I8bGw+Owp1c2luZyBwbGwgPSBwYWlyPGxsLCBsbD47CnVzaW5nIG1sbCA9IG1hcDxsbCxsbD47CnVzaW5nIHNsbCA9IHNldDxsbD47CiNkZWZpbmUgaXYodikgZm9yKGF1dG8gJmk6dikgY2luID4+IGkKI2RlZmluZSBvdih2KSBmb3IoYXV0byAmaTp2KSBjb3V0IDw8IGkgPDwgIiAiCiNkZWZpbmUgYWxsKHYpIHYuYmVnaW4oKSwgdi5lbmQoKQojZGVmaW5lIHJhbGwodikgdi5yYmVnaW4oKSwgdi5yZW5kKCkKI2RlZmluZSB5ZXMgY291dCA8PCAiWUVTXG4iCiNkZWZpbmUgbm8gY291dCA8PCAiTk9cbiIKCiNpZmRlZiBPTkxJTkVfSlVER0UKI2RlZmluZSBCaXNtaWxsYWggaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUobnVsbHB0cik7IGNvdXQudGllKG51bGxwdHIpOwojZWxzZQojZGVmaW5lIEJpc21pbGxhaCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShudWxscHRyKTsgY291dC50aWUobnVsbHB0cik7IFwKZnJlb3BlbigiaW4udHh0IiwgInIiLCBzdGRpbik7IFwKZnJlb3Blbigib3V0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCgpjb25zdCBsbCBNT0QgPSAxZTkgKyA3OwoKbGwgYWRkKGxsIGEsIGxsIGIpIHtyZXR1cm4gKChhICUgTU9EKSArIChiICUgTU9EKSkgJSBNT0Q7fQpsbCBtdWwobGwgYSwgbGwgYikge3JldHVybiAoKGEgJSBNT0QpICogKGIgJSBNT0QpKSAlIE1PRDt9CmxsIHN1YihsbCBhLCBsbCBiKSB7cmV0dXJuICgoKGEgLSBiKSAlIE1PRCkgKyBNT0QpICUgTU9EO30KbGwgbW9kRXhwKGxsIGEsIGxsIGIpIHsKICAgIGlmIChiIDw9IDApIHJldHVybiAxOwogICAgbGwgcmV0ID0gbW9kRXhwKGEgKiBhICUgTU9ELCBiIC8gMik7CiAgICBpZiAoYiAlIDIpIHJldCA9IHJldCAqIGEgJSBNT0Q7CiAgICByZXR1cm4gcmV0Owp9CmxsIGludmVyc2UobGwgYikge3JldHVybiBtb2RFeHAoYiwgTU9EIC0gMik7fQpsbCBkaXZ2KGxsIGEsIGxsIGIpIHtyZXR1cm4gKChhICUgTU9EKSAqIChpbnZlcnNlKGIpICUgTU9EKSkgJSBNT0Q7fQpjb25zdCBsbCBOPTFlNysxOwoKbGwgc3BmW05dOwojZGVmaW5lIGxsIGludAoKdm9pZCBzaWV2ZShpbnQgbil7CiAgICBmb3IobGwgaT0xO2k8PW47aSsrKXNwZltpXT1pOwogICAgZm9yKGludCBpID0gMjsgaSAqIGkgPD0gbjsgaSsrKXsKICAgICAgICBpZihzcGZbaV09PWkpewogICAgICAgICAgICBmb3IoaW50IGogPSBpICogaTsgaiA8PSBuOyBqICs9IGkpCiAgICAgICAgICAgICAgICBpZihzcGZbal09PWopc3BmW2pdPWk7CiAgICAgICAgfQogICAgfQp9CgpsbCBjb3VudERpdmlzb3JzKGxsIG4pIHsKICAgIGxsIGFucz0xOwogICAgd2hpbGUgKG4+MSkgewogICAgICAgIGxsIHA9c3BmW25dOwogICAgICAgIGxsIGNvdW50PTA7CiAgICAgICAgd2hpbGUgKG4lcD09MCkgewogICAgICAgICAgICBuLz1wOwogICAgICAgICAgICBjb3VudCsrOwogICAgICAgIH0KICAgICAgICBhbnMqPShjb3VudCsxKTsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KCgp2ZWN0b3I8aW50PiBkaXZpc29ycyhpbnQgeCl7CiAgICB2ZWN0b3I8cGFpcjxpbnQsaW50Pj4gZjsKICAgIHdoaWxlKHg+MSl7CiAgICAgICAgaW50IHA9c3BmW3hdLCBjPTA7CiAgICAgICAgd2hpbGUoeCVwPT0wKXsgeC89cDsgYysrOyB9CiAgICAgICAgZi5wdXNoX2JhY2soe3AsY30pOwogICAgfQogICAgdmVjdG9yPGludD4gZGl2cyA9IHsxfTsKICAgIGZvcihhdXRvICZwOmYpewogICAgICAgIGludCBzej1kaXZzLnNpemUoKTsKICAgICAgICBmb3IoaW50IGk9MDtpPHN6O2krKyl7CiAgICAgICAgICAgIGludCB2YWwgPSBkaXZzW2ldOwogICAgICAgICAgICBmb3IoaW50IGs9MDtrPHAuc2Vjb25kO2srKyl7CiAgICAgICAgICAgICAgICB2YWwgKj0gcC5maXJzdDsKICAgICAgICAgICAgICAgIGRpdnMucHVzaF9iYWNrKHZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBzb3J0KGRpdnMuYmVnaW4oKSwgZGl2cy5lbmQoKSk7CiAgICByZXR1cm4gZGl2czsKfQp2b2lkIHNvbHZlKCkgewoKfQoKaW50IG1haW4oKSB7CiAgICBCaXNtaWxsYWgKICAgIGxsIHQ9MTsKICAgIGNpbiA+PiB0OwogICAgdmVjdG9yPGxsPiB2KDFlNSArIDEpOwogICAgdlswXSA9IDA7CiAgICB2WzFdID0gdlsyXSA9IHZbM10gPSAxOwogICAgZm9yIChpbnQgaSA9IDQ7IGkgPD0gMWU1OyBpKyspIHZbaV0gPSAodltpIC0gMV0gKyB2W2kgLSAzXSkgJSBNT0Q7CiAgICBpbnQgaSA9IDE7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgLy9zb2x2ZSgpOwogICAgICAgIGxsIGssIG47CiAgICAgICAgY2luID4+IGsgPj4gbjsKICAgICAgICBjb3V0IDw8ICJDYXNlICIgPDwgaSA8PCAiOiAiIDw8ICgoMiAqIGspICUgTU9EICogdltuXSkgJSBNT0QgPDwgJ1xuJzsKICAgICAgICBpKys7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==