#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<queue>
using namespace std ;
const int SIGMA_SIZE=6 ;
const int MAXNODE=100 +20 ;
const int maxn=12 ;
int idx[10 ];
void init()
{
for (int i=0 ;i<6 ;i++){
idx[i+1 ]=i;
}
}
void Gauss(double A[MAXNODE][MAXNODE],int n)
{
int i,j,k,r;
for (i=0 ;i<n;i++){
r=i;
for (j=i+1 ;j<n;j++)
if (fabs (A[j][i])>fabs (A[r][i])) r=j;
if (r!=i) for (j=0 ;j<=n;j++) swap(A[r][j],A[i][j]);
for (k=i+1 ;k<n;k++){
double f=A[k][i]/A[i][i];
for (j=i;j<=n;j++) A[k][j]-=f*A[i][j];
}
}
for (i=n-1 ;i>=0 ;i--){
for (j=i+1 ;j<n;j++){
A[i][n]-=A[j][n]*A[i][j];
}
A[i][n]/=A[i][i];
}
}
struct ACAutomata{
int ch[MAXNODE][SIGMA_SIZE];
int f[MAXNODE];
int val[MAXNODE];
int last[MAXNODE];
int sz;
double A[MAXNODE][MAXNODE];
bool vis[MAXNODE];
void init()
{
memset (ch[0 ],0 ,sizeof (ch[0 ]));
sz=1 ;
}
void insert(int s[],int n,int v)
{
int u=0 ;
for (int i=0 ;i<n;i++){
int c=idx[s[i]];
if (!ch[u][c]){
memset (ch[sz],0 ,sizeof (ch[sz]));
val[sz]=0 ;
ch[u][c]=sz++;
}
u=ch[u][c];
}
val[u]=v;
}
void getFail()
{
queue <int > que;
int u=0 ;
f[0 ]=0 ;
for (int c=0 ;c<SIGMA_SIZE;c++){
u=ch[0 ][c];
if (u){
f[u]=0 ;last[u]=0 ;
que.push(u);
}
}
while (!que.empty()){
int r=que.front();que.pop();
for (int c=0 ;c<SIGMA_SIZE;c++){
u=ch[r][c];
if (!u){
ch[r][c]=ch[f[r]][c];
continue ;
}
que.push(u);
int v=f[r];
while (v&&!ch[v][c]){
v=f[v];
}
f[u]=ch[v][c];
last[u]=val[f[u]]?f[u]:last[f[u]];
if (!val[u]){
val[u]=val[f[u]]?1 :0 ;
}
}
}
}
double GetMatrix(int pos,int N)
{
memset (A,0 ,sizeof (A));
for (int u=0 ;u<sz;u++){
if (val[u]){
if (val[u]==pos){
A[u][sz]=1.0 ;
A[u][u]=1.0 ;
}
else {
A[u][u]=1.0 ;
A[u][sz]=0.0 ;
}
continue ;
}
else {
A[u][u]=6.0 ;
for (int i=0 ;i<SIGMA_SIZE;i++){
A[u][ch[u][i]]-=1.0 ;
}
}
}
Gauss(A,sz);
return A[0 ][sz];
}
};
ACAutomata ac;
int str[maxn][maxn];
int T,N;
int len;
void solve();
int main()
{
init();
scanf ("%d" ,&T);
while (T--){
solve();
}
return 0 ;
}
void solve()
{
ac.init();
scanf ("%d %d" ,&N,&len);
for (int i=1 ;i<=N;i++){
for (int j=0 ;j<len;j++){
scanf ("%d" ,&str[i][j]);
}
ac.insert(str[i],len,i);
}
ac.getFail();
for (int i=1 ;i<=N;i++){
double ans=ac.GetMatrix(i,N);
if (i!=1 ) printf (" " );
printf ("%0.6lf" ,ans);
}
printf ("\n" );
}