Listing: CUNOSTINTE.CPP 
 #include <stdio.h> 
 #include <stdlib.h> 
 
 int m,n,a[51][51],b[50][50],nr[50],sol[50], 
 ut[50]; 
 void lecture(void){ 
   int x,y; FILE *f=fopen("INPUT.TXT","rt"); 
   fscanf(f,"%d%d",&n,&m); 
   for (int i=0;i<m;i++){ 
     fscanf(f,"%d%d",&x,&y); 
     a[x-1][y-1]=a[y-1][x-1]=1; 
     b[x-1][nr[x-1]++]=y-1; 
     b[y-1][nr[y-1]++]=x-1; 
   } 
   for (i=0;i<n;i++) sol[i]=-1; 
 } 
  
 int possible(int k){ 
   if (ut[k]) return 0; 
   for (int i=0;i<nr[k]-1;i++) 
     for (int j=i+1;j<nr[k];j++) 
       if (!a[b[k][i]][b[k][j]]) 
        return 0; 
   return 1; 
 } 
  
 void ajoute(int x,int y){ 
   ut[y]=1; sol[x]=y; nr[y]=0; 
   for (int i=0;i<n;i++) a[i][y]=a[y][i]=0; 
   for (i=0;i<n;i++) 
     for (int j=0;j<nr[i];j++) 
       if (b[i][j]==y) 
         b[i][j]=b[i][(nr[i]--)-1]; 
 }
 
  
 void pas_de_solution(void){ 
   FILE *f=fopen("OUTPUT.TXT","wt"); 
   fprintf(f,"NO\n"); 
   fclose(f); exit(1); 
 } 
  
 void determination(void){ 
   for (int i=0;i<n;i++){ 
     for (int j=0;j<n;j++) 
       if (possible(j)){ajoute(i,j); break;} 
     if (sol[i]==-1) pas_de_solution(); 
   } 
 } 
  
 void solution(void){ 
   FILE *f=fopen("OUTPUT.TXT","wt"); 
   fprintf(f,"YES\n%d",sol[0]+1); 
   for (int i=1;i<n;i++)  
     fprintf(f," %d",sol[i]+1); 
   fclose(f); 
 } 
  
 void main(void){ 
   lecture(); determination(); solution(); 
 }

[cuprins]