#include<iostream>
using namespace::std;
int **neighbor;
int t,c;//t is the amounts of node,and c is the kinds of color
int workable=0;
int *color;
void input();
void dye(int i);
int main()
{
input();
dye(0);
cout<<workable<<endl;
return 0;
}
void input()
{
cin>>t>>c;
neighbor=new int*[t];
color=new int[t];
for(int i=0;i<t;i++)
{
neighbor[i]=new int[t];
for(int j=0;j<t;j++)
{
cin>>neighbor[i][j];
}
}
}
void output()
{
for(int i=0;i<t-1;i++)
{
cout<<color[i]<<" ";
}
cout<<color[t-1]<<"/n";
}
void dye(int i)
{
if(i==t)
{
output();
workable++;
}
else
{
for(int brush=1;brush<=c;brush++)
{
int j=0;
for(;j<i;j++)
{
if(neighbor[j][i]==1&&color[j]==brush)break;
}
if(j!=i)continue;
else
{
color[i]=brush;
dye(i+1);
}
}
}
}