#include<iostream>
#define NUM 100
using namespace std;
int n; // 图的顶点数量
int m; // 可用颜色数量
int a[NUM][NUM]; // 图的邻接矩阵
int x[NUM]; // 当前的解向量
int sum; // 已经找到的可m着色的方案数量
// 形参t是回溯的深度
bool same(int t){
int i;
for(i = 1; i<=n; i++)
if(a[t][i]==1 && x[i]==x[t])
return false;
return true;
}
void traceback(int t){
// 到达叶子结点, 获得一种着色方案
if(t > n){
sum++;
for(int i=1; i<=n; i++)
printf("%d", x[i]);
printf("\n");
return;
}
// 搜索当前扩展结点的m个孩子
for(int i=1; i<=m; i++){
x[t] = i;
if(same(t)) traceback(t+1);
x[t] = 0;
}
}