Un pătrat latin de ordin este o matrice cu linii și coloane care conține simboluri distincte, astfel încât orice linie și orice coloană conține toate cele simboluri. Denumirea de pătrat latin provine din lucrările matematicianului Leonhard Euler, care a folosit ca simboluri litere din alfabetul latin.
Să considerăm un pătrat latin de ordin care conține numerele naturale de la la . Acesta poate conține la rândul său subpătrate latine. Un subpătrat de ordin () este format din elemente situate la intersecția a linii consecutive și coloane consecutive în pătratul dat. Subpătratul de ordin este considerat subpătrat latin dacă el conține numai numerele naturale de la la , astfel încât fiecare linie și fiecare coloană din subpătrat conține toate cele numere.
Cerință
Dat fiind un pătrat latin, să se determine toate subpătratele latine conținute de acesta.
Date de intrare
Fișierul de intrare latin.in
conține pe prima linie numărul natural . Pe următoarele linii se află câte numere naturale distincte cuprinse între și , separate prin spații, reprezentând elementele unui pătrat latin de ordin .
Date de ieșire
Fișierul de ieșire latin.out
va conține pe prima linie un număr natural , reprezentând numărul de subpătrate latine conținute de pătratul latin dat. Pe următoarele linii vor fi descrise subpătratele latine determinate, câte un subpătrat pe o linie. Linia care descrie un subpătrat va conține numere naturale separate prin câte un spațiu , unde și reprezintă linia, respectiv coloana colțului din stânga-sus al subpătratului, iar reprezintă ordinul acestuia. Subpătratele vor fi scrise în ordinea crescătoare a liniilor pe care se află colțul din stânga-sus; dacă există mai multe subpătrate cu colțul din stânga-sus pe aceeași linie, vor fi afișate crescător după ordin.
Restricții și precizări
- Liniile și coloanele sunt numerotate de la la .
Exemplul 1
latin.in
3
2 3 1
1 2 3
3 1 2
latin.out
0
Exemplul 2
latin.in
8
5 6 7 8 1 2 3 4
6 7 8 5 2 1 4 3
7 8 5 6 3 4 2 1
8 5 6 7 4 3 1 2
1 4 2 3 5 6 7 8
2 1 3 4 6 7 8 5
3 2 4 1 7 8 5 6
4 3 1 2 8 5 6 7
latin.out
4
1 5 2
1 5 4
3 7 2
5 1 4