#include
using namespace std;
int v,e,graph[100][100];//v顶点数, e边数, graph图的邻接矩阵
int c,color[100];//c颜色数 color当前边的颜色
int sum = 0;//着色方法的数目
//判断当前位置的颜色是否和相邻位置颜色重复
bool ok(int cur){
for(int i=1; i<=v; i++){
if(graph[cur][i] && color[cur] == color[i]){//如果坐标(cur,i)相邻 且 cur的颜色和i的颜色相同
return false;
}
}
return true;
}
void backtrace(int cur){
if(cur > v){
sum++;
} else {
for(int i=1; i<=c; i++){//分别为cur位置尝试第i中颜色
color[cur] = i;//表示cur位置图上第i种颜色
if(ok(cur)){
backtrace(cur+1);
}
color[cur] = 0;
}
}
}
int main(){
cout <
cin >> v >> c;
cout <
//输入邻接矩阵
for(int i=1; i<=v; i++){
for(int j=1; j<=v; j++){
cin >> graph[i][j];
}
}
backtrace(1);
cout <
}