#include <bits/stdc++.h>
#define int unsigned long long
using namespace std;
int a[500005];
struct day {
int m,d;
bool operator < (const day& x) {
return (m != x.m ? m < x.m : d < x.d);
}
} ans[500005];
int to_int(string s) {
int ans;
stringstream ss(s);
ss >> ans;
return ans;
}
signed main() {
int t; cin >> t;
while(t--) {
int n,k; cin >> n >> k;
int maxn = 0;
for(int i = 1;i <= n;i++) {
cin >> a[i];
maxn = max(maxn,a[i]);
}
if(k == 1) {
cout << 0 << endl << endl;
continue;
}
if(n == 1) {
int p = 1,ans = 0;
while(p <= a[1]) {
p *= k;
string P = to_string(p);
if(P.size() == 1) continue;
if(P[0] != '1') continue;
P[0] = ' ';
if(P[1] == '0') continue;
int PP = to_int(P);
if(PP <= a[1] && PP >= 1) {
ans++;
}
}
cout << ans << endl;
p = 1;
while(p <= a[1]) {
p *= k;
string P = to_string(p);
if(P.size() == 1) continue;
if(P[0] != '1') continue;
P[0] = ' ';
if(P[1] == '0') continue;
int PP = to_int(P);
if(PP <= a[1] && PP >= 1) {
cout << "1 " << PP << endl;
}
}
continue;
}
int siz = to_string(n).size() + to_string(maxn).size();
int p = 1;
int cur = 0;
while(to_string(p).size() <= siz+1) {
p *= k;
if(to_string(p).size() == 1) {
continue;
}
bool flag = false;
string P = to_string(p);
for(int i = 0;i < P.size()-1;i++) {
string s = P.substr(0,i+1),t = P.substr(i+1);
if(s[0] == '0' || t[0] == '0') continue;
int S = to_int(s),T = to_int(t);
if(S >= 1 && S <= n && T >= 1 && T <= a[S]) {
ans[++cur] = {S,T};
flag = true;
}
}
if(cur >= 19990) break;
}
sort(ans+1,ans+cur+1);
cout << cur << endl;
for(int i = 1;i <= cur;i++) cout << ans[i].m << ' ' << ans[i].d << endl;
}
return 0;
}