#include // Desargues #define n 10 int main(){ char av[n], p[n], r[n][n]; int cx=0, cy=0; char P[][3] = {{0, 1, 9}, {0, 2, 8}, {0, 3, 6}, {1, 2, 7}, {1, 4, 6}, {2, 5, 6}, {3, 4, 9}, {3, 5, 8}, {4, 5, 7}, {7, 8, 9}}; void pm(int k){int j = k; while(j--) {p[k-1] = av[j]; av[j] = av[k-1]; pm(k-1); av[j] = p[k-1];} if(k) return; {int j=10; while(j--) if(r[p[P[j][0]]][p[P[j][1]]] != p[P[j][2]]) goto xx;} ++cx; {int j=n; while(j--)printf("%d ", p[j]); printf("\n");} xx: ++cy;} {int j=n; while(j--) av[j] = j;} {int j=n; while(j--) {int k=n; while(k--) r[j][k] = -1;}} {int j=n; while(j--) {r[P[j][0]][P[j][1]] = r[P[j][1]][P[j][0]] = P[j][2]; r[P[j][0]][P[j][2]] = r[P[j][2]][P[j][0]] = P[j][1]; r[P[j][2]][P[j][1]] = r[P[j][1]][P[j][2]] = P[j][0];}} {int j=n; while(j--) {int k=n; while(k--) printf("%3d", r[j][k]); printf("\n");}} pm(n); printf("s %d %d\n", cx, cy); return 0;} // => 120