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

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

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 k;

     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++)
           {
            x+=mov[k][0];
            y+=mov[k][1];
            if (0<=x && x<N && 0<=y && y<N && tab[x][y]==0)
                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;

  x=0;  y=0;
  tries(1);
  system("PAUSE");	
  return 0;
}
