#USACO154. Checker Challenge

Checker Challenge

问题描述

检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行,每列,每条对角线(包括两条主对角线的所有对角线)上都至多有一个棋子,如下例,就是一种正确的布局。

0   1   2   3   4   5   6  
  -------------------------  
1 |   | O |   |   |   |   |
  -------------------------  
2 |   |   |   | O |   |   |
  -------------------------  
3 |   |   |   |   |   | O |
  -------------------------  
4 | O |   |   |   |   |   |
  -------------------------  
5 |   |   | O |   |   |   |
  -------------------------  
6 |   |   |   |   | O |   |
  -------------------------  

上面的布局可以用序列2 4 6 1 3 5来描述,第i个数字表示在第i行的相应位置有一个棋子,如下:
行号 1 2 3 4 5 6
列号 2 4 6 1 3 5
这只是跳棋放置的一个解。请写一个程序找出所有跳棋放置的解,并把它们以上面的序列方法输出。解按字典顺序排列,请输出前3个解,最后一行是解的总个数。

输入格式

一个数字N (6<=N<=14) 表示棋盘是N x N大小的。

输出格式

前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。

样例输入

6  

样例输出

2 4 6 1 3 5   
3 6 2 5 1 4   
4 1 5 2 6 3   
4