#include<stdio.h>
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<utility>
#define PB push_back
#define MP make_pair
#define LL long long int
#define M 1000000007
using namespace std;
LL ways[100001][30];
int fib[25]={1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393};
void solve()
{
int i,j,d,k,f;
for(j=0;j<30;j++)
{
ways[0][j] = 0;
ways[1][j] = 1;
}
for(i=0;i<24;i++)
{
for(j=0;j<25;j++)
{
if(fib[i] != fib[j])
ways[fib[i]][j]=1;
}
}
ways[1][0] = 0;
for(f=0;f<25;f++)
{
k = fib[f];
for(i=2;i<=100000;i++)
{
//if(binary_search(fib,fib+26,i))
{
for(j=0;j<25;j++)
{
if(fib[j] > i/2)
break;
if(fib[j] == k )
continue;
ways[i][f] = ways[i][f] + ways[i-fib[j]][f];
//if(i == fib[j])
//ways[i][f]++;
if(i == 8)
cout<<i<<" "<<f<<" "<<fib[j]<<" "<<ways[i][f]<<endl;
//cout<<i<<" "<<k<<" "<<fib[j]<<" "<<ways[i][f]<<endl;
//system("pause");
ways[i][f] %= M;
}
}
}
}
}
int main()
{
int t,i,j,k,n;
solve();
cin>>t;
while(t--)
{
cin>>n>>k;
for(i=0;i<25;i++)
{
if(fib[i] == k)
{
cout<<ways[n][i]<<endl;
break;
}
}
//cout<<ways[n][k]<<endl;
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNtYXRoPgojaW5jbHVkZTxzdHJpbmc+CiNpbmNsdWRlPGNzdHJpbmc+CiNpbmNsdWRlPGFsZ29yaXRobT4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxtYXA+CiNpbmNsdWRlPHV0aWxpdHk+CiNkZWZpbmUgUEIgcHVzaF9iYWNrCiNkZWZpbmUgTVAgbWFrZV9wYWlyCiNkZWZpbmUgTEwgbG9uZyBsb25nIGludAojZGVmaW5lIE0gMTAwMDAwMDAwNwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKTEwgd2F5c1sxMDAwMDFdWzMwXTsKaW50IGZpYlsyNV09ezEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQsIDU1LCA4OSwgMTQ0LCAyMzMsIDM3NywgNjEwLCA5ODcsIDE1OTcsIDI1ODQsIDQxODEsIDY3NjUsIDEwOTQ2LCAxNzcxMSwgMjg2NTcsIDQ2MzY4LCA3NTAyNSwgMTIxMzkzfTsKCnZvaWQgc29sdmUoKQp7CglpbnQgaSxqLGQsayxmOwoJZm9yKGo9MDtqPDMwO2orKykKCXsKCQl3YXlzWzBdW2pdID0gMDsKCQl3YXlzWzFdW2pdID0gMTsKCX0KCWZvcihpPTA7aTwyNDtpKyspCgl7CgkJZm9yKGo9MDtqPDI1O2orKykKCQl7CgkJCWlmKGZpYltpXSAhPSBmaWJbal0pCgkJCXdheXNbZmliW2ldXVtqXT0xOwoJCX0KCX0KCQoJd2F5c1sxXVswXSA9IDA7Cglmb3IoZj0wO2Y8MjU7ZisrKQoJewoJCWsgPSBmaWJbZl07CgkJZm9yKGk9MjtpPD0xMDAwMDA7aSsrKQoJCXsKCQkJLy9pZihiaW5hcnlfc2VhcmNoKGZpYixmaWIrMjYsaSkpCgkJCXsKCQkJCWZvcihqPTA7ajwyNTtqKyspCgkJCQl7CgoJCQkJCWlmKGZpYltqXSA+IGkvMikKCQkJCQlicmVhazsKCQkJCQlpZihmaWJbal0gPT0gayApCgkJCQkJY29udGludWU7CgkJCQkJd2F5c1tpXVtmXSA9IHdheXNbaV1bZl0gKyB3YXlzW2ktZmliW2pdXVtmXTsKCQkJCQkvL2lmKGkgPT0gZmliW2pdKQoJCQkJCS8vd2F5c1tpXVtmXSsrOwoJCQkJCWlmKGkgPT0gOCkKCQkJCQljb3V0PDxpPDwiICI8PGY8PCIgIjw8ZmliW2pdPDwiICI8PHdheXNbaV1bZl08PGVuZGw7CgoJCQkJCS8vY291dDw8aTw8IiAiPDxrPDwiICI8PGZpYltqXTw8IiAiPDx3YXlzW2ldW2ZdPDxlbmRsOwoJCQkJCS8vc3lzdGVtKCJwYXVzZSIpOwoJCQkJCXdheXNbaV1bZl0gJT0gTTsKCgkJCQl9CgkJCX0KCQl9Cgl9Cn0KCgppbnQgbWFpbigpCnsKCWludCB0LGksaixrLG47Cglzb2x2ZSgpOwoJY2luPj50OwoJd2hpbGUodC0tKQoJewoJCWNpbj4+bj4+azsKCQlmb3IoaT0wO2k8MjU7aSsrKQoJCXsKCQkJaWYoZmliW2ldID09IGspCgkJCXsKCQkJCWNvdXQ8PHdheXNbbl1baV08PGVuZGw7CgkJCQlicmVhazsKCQkJfQoJCX0KCQkvL2NvdXQ8PHdheXNbbl1ba108PGVuZGw7Cgl9CglyZXR1cm4gMDsKfQo=