#include <stdio.h>
#include <stdlib.h>

int N, N2;
int tab[8][8];
int mov[8][2]= {{1,2}, {-1,2}, {1,-2}, {-1,-2},{2,1}, {2,-1},{-2,1}, {-2,-1}};

void Print(int c)
{
     int i, j;
     static int count=0;
     printf("Sol. %d %s\n", ++count, c ? "(circular)\7" : "");
     for (i=0; i<N; i++)
       {
        for (j=0; j<N; j++)
           printf("%3d", tab[i][j]);
        printf("\n");
       }
    printf("\n");
}


void tries(int n, int x, int y)
{
     int k;

     if (0<=x && x<N && 0<=y && y<N && tab[x][y]==0)       
       {
        tab[x][y]= n;
        if (n>=N2)
            {
             int c= 0;
             for (k=0; k<8; k++)
                c|= (x+mov[k][0]==0 && y+mov[k][1]==0);
             Print(c); 
            }
        else
            for (k=0; k<8; k++)
               tries(n+1, x+mov[k][0], y+mov[k][1]);
        tab[x][y]= 0;
       }
}


int main(int argc, char *argv[])
{
  int i, j;
 
  printf("Dar N:\n");
  scanf("%d", &N); 
  N2= N*N;
  printf("%d %d\n", N, N2); 
  for (i=0; i<N; i++)
     for (j=0; j<N; j++)
         tab[i][j]= 0;
  
  tries(1,0,0);
  system("PAUSE");	
  return 0;
}
