#include <iostream>
using namespace std;
// question link : https://h...content-available-to-author-only...s.com/contests/c/547/1045
int tileWaysDPCaller(int n, int m);
int tileWaysDP(int *dp, int n, int m, int i = 0);
int main()
{
int T;
cin >> T;
int i = 0;
int n, m;
while (i++ < T)
{
cin >> n >> m;
cout << tileWaysDPCaller(n, m)<< endl;
}
return 0;
}
int tileWaysDPCaller(int n, int m)
{
int dp[n + 1];
dp[0] = 1;
if (m == 0)
return 0;
else if (n == m)
return 2;
return tileWaysDP(dp, n, m, 1);
}
int tileWaysDP(int *dp, int n, int m, int i)
{
if (i == n + 1)
return dp[n];
if (i >= m){
dp[i] = dp[i - 1] + dp[i - m];
if(dp[i]>=1000000007)
dp[i]=dp[i]-1000000007;}
else
dp[i] = 1;
return tileWaysDP(dp, n, m, ++i);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gIHF1ZXN0aW9uIGxpbmsgOiBodHRwczovL2guLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnMuY29tL2NvbnRlc3RzL2MvNTQ3LzEwNDUKCmludCB0aWxlV2F5c0RQQ2FsbGVyKGludCBuLCBpbnQgbSk7CmludCB0aWxlV2F5c0RQKGludCAqZHAsIGludCBuLCBpbnQgbSwgaW50IGkgPSAwKTsKCmludCBtYWluKCkKewoKICAgIGludCBUOwogICAgY2luID4+IFQ7CiAgICBpbnQgaSA9IDA7CiAgICBpbnQgbiwgbTsKICAgIHdoaWxlIChpKysgPCBUKQogICAgewogICAgICAgIGNpbiA+PiBuID4+IG07CiAgICAgICAgY291dCA8PCB0aWxlV2F5c0RQQ2FsbGVyKG4sIG0pPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9CgoKaW50IHRpbGVXYXlzRFBDYWxsZXIoaW50IG4sIGludCBtKQp7CgogICAgaW50IGRwW24gKyAxXTsKICAgIGRwWzBdID0gMTsKICAgIGlmIChtID09IDApCiAgICAgICAgcmV0dXJuIDA7CiAgICBlbHNlIGlmIChuID09IG0pCiAgICAgICAgcmV0dXJuIDI7CiAgICByZXR1cm4gdGlsZVdheXNEUChkcCwgbiwgbSwgMSk7Cn0KaW50IHRpbGVXYXlzRFAoaW50ICpkcCwgaW50IG4sIGludCBtLCBpbnQgaSkKewogICAgaWYgKGkgPT0gbiArIDEpCiAgICAgICAgcmV0dXJuIGRwW25dOwoKICAgIGlmIChpID49IG0pewogICAgICAgIGRwW2ldID0gZHBbaSAtIDFdICsgZHBbaSAtIG1dOwogICAgICAgIGlmKGRwW2ldPj0xMDAwMDAwMDA3KQogICAgICAgIGRwW2ldPWRwW2ldLTEwMDAwMDAwMDc7fQogICAgZWxzZQogICAgICAgIGRwW2ldID0gMTsKCiAgICByZXR1cm4gdGlsZVdheXNEUChkcCwgbiwgbSwgKytpKTsKfQ==