#include<bits/stdc++.h>
using namespace std;
class Color{
private:
int n_;
int m_;
int **Martix;
int *x;
int solution_num_;
bool OK(int k);
void Backtrack(int t);
void Print();
public:
Color(int n,int edgenum,int m):n_(n),m_(m){
solution_num_ = 0;
x = new int[n_+ 1];
for(int i=1;i<=n_;i++){
x[i] = 0;
}
Martix = new int*[n_+ 1];
for(int i=0;i<n_+ 1;i++){
Martix[i] = new int [n_+ 1];
}
for(int i=1;i<=n_;i++)
for(int j=1;j<=n_;j++)
Martix[i][j] = -1;
cout<<"input edges"<<endl;
for(int i=0;i<edgenum;i++){
int s,e;
cin>>s>>e;
Martix[s][e] = 1;
}
cout<<"solution is"<<endl;
Backtrack(1);
Print();
}
~Color(){
delete [] x;
delete [] Martix;
}
};
void Color::Backtrack(int t){
if(t>n_){
solution_num_++;
for(int i=1;i<=n_;i++){
cout<<x[i]<<" ";
}
cout<<endl;
}
else{
for(int i=1;i<=m_;i++){
x[t] = i;
if(OK(t)){
Backtrack(t+1);
}
}
}
}
bool Color::OK(int k){
for(int i=1;i<k;i++){
if(x[i]==x[k] && Martix[i][k]==1)
return false;
}
return true;
}
void Color::Print(){
cout<<"sum_solution is "<<solution_num_<<endl;
}
int main(){
int vertexnum,m,edgenum;
cout<<"input numbers of vertex and edge and color"<<endl;
cin>>vertexnum>>edgenum>>m;
Color color(vertexnum,edgenum,m);
return 0;
}