#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int N = 2e5, oo = 2e18, MOD = 1e9+7;
int po[20];
int x;
string s;
int n;
pair<int, int> dp[20][163][2];
bool vis[20][163][2];
pair<int, int> ans(int i, int sum, bool tight) {
if (i >= n) {
return {sum == x, 0};
}
auto& ret = dp[i][sum][tight];
if (vis[i][sum][tight]) {
return ret;
}
vis[i][sum][tight] = 1;
ret = {0, 0};
int en = (tight ? 9 : s[i] - '0');
for (int d = 0; d <= en; d++) {
auto cur = ans(i + 1, sum + d, ((tight || d < en)));
ret.first += cur.first;
ret.second = (cur.second + ret.second) % MOD;
int pos = n - i - 1;
int contrib = d * po[pos] % MOD;
int add = contrib * cur.first % MOD;
ret.second = (ret.second + add) % MOD;
}
return ret;
}
pair<int, int> count(int x) {
s = to_string(x);
n = s.size();
memset(vis, 0, sizeof vis);
return ans(0, 0, 0);
}
void solve() {
int k;
cin >> x >> k;
n = s.size();
int ans = -1;
int l = 1, r = 1e18;
while (l <= r) {
int mid = (l + r) / 2;
auto cur = count(mid);
if (cur.first >= k) {
ans = cur.second;
r = mid - 1;
} else {
l = mid + 1;
}
}
cout << ans << endl;
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
// #ifndef ONLINE_JUDGE
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
// #endif
int t; t = 1;
po[0] = 1;
for (int i = 1; i < 20; i++) po[i] = (10 * po[i-1]) % MOD;
cin >> t;
while (t--) solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGVuZGwgICAgICdcbicKI2RlZmluZSBpbnQgICAgICBsb25nIGxvbmcKCmNvbnN0IGludCBOID0gMmU1LCBvbyA9IDJlMTgsIE1PRCA9IDFlOSs3OwoKCmludCBwb1syMF07CgppbnQgeDsKc3RyaW5nIHM7IAppbnQgbjsKcGFpcjxpbnQsIGludD4gZHBbMjBdWzE2M11bMl07CmJvb2wgdmlzWzIwXVsxNjNdWzJdOwpwYWlyPGludCwgaW50PiBhbnMoaW50IGksIGludCBzdW0sIGJvb2wgdGlnaHQpIHsKICAgIGlmIChpID49IG4pIHsKICAgICAgICByZXR1cm4ge3N1bSA9PSB4LCAwfTsKICAgIH0KICAgIGF1dG8mIHJldCA9IGRwW2ldW3N1bV1bdGlnaHRdOwogICAgaWYgKHZpc1tpXVtzdW1dW3RpZ2h0XSkgewogICAgICAgIHJldHVybiByZXQ7CiAgICB9CiAgICB2aXNbaV1bc3VtXVt0aWdodF0gPSAxOwogICAgcmV0ID0gezAsIDB9OwogICAgaW50IGVuID0gKHRpZ2h0ID8gOSA6IHNbaV0gLSAnMCcpOwogICAgZm9yIChpbnQgZCA9IDA7IGQgPD0gZW47IGQrKykgewogICAgICAgIGF1dG8gY3VyID0gYW5zKGkgKyAxLCBzdW0gKyBkLCAoKHRpZ2h0IHx8IGQgPCBlbikpKTsKICAgICAgICByZXQuZmlyc3QgKz0gY3VyLmZpcnN0OwogICAgICAgIHJldC5zZWNvbmQgPSAoY3VyLnNlY29uZCArIHJldC5zZWNvbmQpICUgTU9EOwogICAgICAgIGludCBwb3MgPSBuIC0gaSAtIDE7CiAgICAgICAgaW50IGNvbnRyaWIgPSBkICogcG9bcG9zXSAlIE1PRDsKICAgICAgICBpbnQgYWRkID0gY29udHJpYiAqIGN1ci5maXJzdCAlIE1PRDsKICAgICAgICByZXQuc2Vjb25kID0gKHJldC5zZWNvbmQgKyBhZGQpICUgTU9EOwogICAgfQogICAgcmV0dXJuIHJldDsKfQpwYWlyPGludCwgaW50PiBjb3VudChpbnQgeCkgewogICAgcyA9IHRvX3N0cmluZyh4KTsKICAgIG4gPSAgcy5zaXplKCk7CiAgICBtZW1zZXQodmlzLCAwLCBzaXplb2YgdmlzKTsKICAgIHJldHVybiBhbnMoMCwgMCwgMCk7Cn0Kdm9pZCBzb2x2ZSgpIHsKICAgIGludCBrOwogICAgY2luID4+IHggPj4gazsKICAgIG4gPSBzLnNpemUoKTsKICAgIGludCBhbnMgPSAtMTsKICAgIGludCBsID0gMSwgciA9IDFlMTg7CiAgICB3aGlsZSAobCA8PSByKSB7CiAgICAgICAgaW50IG1pZCA9IChsICsgcikgLyAyOwogICAgICAgIGF1dG8gY3VyID0gY291bnQobWlkKTsKICAgICAgICBpZiAoY3VyLmZpcnN0ID49IGspIHsKICAgICAgICAgICAgYW5zID0gY3VyLnNlY29uZDsKICAgICAgICAgICAgciA9IG1pZCAtIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbCA9IG1pZCArIDE7CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBhbnMgPDwgZW5kbDsKfQoKCnNpZ25lZCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAogICAgY2luLnRpZShOVUxMKTsgY291dC50aWUoTlVMTCk7CiAgICAvLyAjaWZuZGVmIE9OTElORV9KVURHRSAKICAgIC8vICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOyAKICAgIC8vICAgIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7IAogICAgLy8gI2VuZGlmIAogICAgaW50IHQ7IHQgPSAxOwogICAgcG9bMF0gPSAxOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCAyMDsgaSsrKSBwb1tpXSA9ICgxMCAqIHBvW2ktMV0pICUgTU9EOwogICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0K