#include <bits/stdc++.h>
using namespace std;
#define int __int128
const int N = 1e6 + 5, INF = 1e17;
int t, n, k, a[N], q[N];
vector<pair<int, int>> ans;
int f(int p) {
if(!p) return 0;
return f(p / 10) + 1;
}
inline int read() {
int r = 0, f = 1;
char c = getchar();
while(c != '-' && (c < '0' || c > '9')) c = getchar();
if(c == '-') {
f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
r *= 10; r += c - '0';
c = getchar();
}
return r * f;
}
inline void write(int x) {
if(x < 0) {
putchar('-');
x = -x;
}
if(x > 9) write(x / 10);
putchar(x % 10 + '0');
}
signed main() {
q[0] = 1;
for(int i = 1; i <= 18; i++) q[i] = q[i - 1] * 10;
t = read();
while(t--) {
ans.clear();
n = read(); k = read();
for(int i = 1; i <= n; i++) a[i] = read();
if(k == 1) {
write(0);
continue;
}
int b = k;
while(k <= INF) {
int l = f(k);
for(int i = 1; i < l; i++) {
int x = k / q[i], y = k % q[i];
if(x >= 1 && x <= n && y >= 1 && y <= a[x] && f(x) + f(y) == l) ans.push_back({x, y});
}
k *= b;
}
sort(ans.begin(), ans.end());
write(ans.size()); putchar('\n');
for(auto i : ans) {
write(i.first); putchar(' '); write(i.second); putchar('\n');
}
}
}