public class Ratsut {
    static int n;
    static int[][] ruudukko;
    static int laskuri;

    static void haku(int y, int x, int k) {
        if (y < 0 || x < 0 || y >= n || x >= n) return;
        if (ruudukko[y][x] != 0) return;
        if (k == n*n) {
            laskuri++;
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    System.out.print(ruudukko[i][j]+" ");
                }
                System.out.println();
            }
            System.out.println("ratkaisu "+laskuri);
            return;
        }
        ruudukko[y][x] = k;
        haku(y+1,x+2,k+1);
        haku(y+1,x-2,k+1);
        haku(y-1,x+2,k+1);
        haku(y-1,x-2,k+1);
        haku(y+2,x+1,k+1);
        haku(y+2,x-1,k+1);
        haku(y-2,x+1,k+1);
        haku(y-2,x-1,k+1);
        ruudukko[y][x] = 0;
    }

    public static void main(String[] args) {
        n = 5;
        ruudukko = new int[n][n];
        haku(0,0,1);
        System.out.println(laskuri);
    }
}
