#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
typedef long long ll;
using namespace std;
int T,n,k,a[300005];
struct node {
ll m,d;
}ans[20005];
bool cmp(node a,node b) {
if (a.m==b.m) return a.d<b.d;
return a.m<b.m;
}
ll read() {
ll x=0,f=1;
char ch=getchar();
for(;!isdigit(ch);ch=getchar()) {
if (ch=='-') f=-1;
}
for(;isdigit(ch);ch=getchar()) {
x=x*10+ch-'0';
}
return x*f;
}
int main() {
T=read();
while(T--) {
scanf("%d %d",&n,&k);
ll t=k;
int sum=0;
for(int i=1;i<=n;i++) a[i]=read();
if (k==1) {
printf("0\n");
continue;
}
while(t<=1e16) {
if (t<=10) {
t*=k;
continue;
}
ll s=t;
int cnt=0;
while(s!=0) {
cnt++;
s/=10;
}
for(int i=cnt;i>=2;i--) {
ll x=t/ll(pow(10,i-1)),y=t%ll(pow(10,i-1));
if (y<pow(10,i-2)) continue;
if (x>n) break;
if (y<=a[x]) {
sum++;
ans[sum]={x,y};
}
}
t*=k;
}
printf("%d\n",sum);
sort(ans+1,ans+sum+1,cmp);
for(int i=1;i<=sum;i++) {
printf("%lld %lld\n",ans[i].m,ans[i].d);
ans[i].m=0;
ans[i].d=0;
}
}
return 0;
}