Cerință
Avem o matrice patratică de dimensiune .
Toate elementele egal depărtate de marginea matricei spunem că sunt pe același pătrat concentric
. De exemplu, elementele de pe contur (linia , coloana , linia , coloana ), sunt pe primul pătrat concentric. Elementele de linia , coloana , linia , coloana , sunt pe al doilea pătrat concentric etc. Matricele din figura următoare au pătrate concentrice.
Se cunoaște că fiecare patrat concentric are elemente numere naturale, distincte, consecutive, incepand cu .
Fiecare astfel de pătrat poate fi rotit la stânga sau la dreapta. Rotirea are un cost dat de distanța pe care se deplasează elementele (de exemplu o rotire cu două poziții are costul fie că se face către stânga sau către dreapta).
Dorim să ducem toate elementele cu valoarea pe aceeași jumătate de diagonală (ca în unul dintre cele patru exemple de matrice de mai jos). Dorim, de asemenea, să realizăm acest lucru minimizând valoarea suma costurilor rotirilor tuturor pătratelor concentrice.
Date de intrare
Fișierul rotate.in
conține pe prima linie valoarea . Pe fiecare din următoarele linii sunt câte numere naturale, separate prin spațiu, reprezentând matricea dată.
Date de ieșire
Fișierul rotate.out
conține pe prima linie valoarea . Pe fiecare din următoarele linii sunt câte numere naturale, separate prin spațiu, reprezentând configurația matricei finale pentru a obține costul . Dacă sunt mai multe variante de a obține costul , se va afișa matricea care va avea ca jumătate de diagonală completată pe cea cu codul minim (în figură, sunt marcate în chenar roșu codurile jumătăților de diagonală, de la la ).
Restricții și precizări
- ;
- Elementele de de pe același pătrat concentric formează o permutare.
Exemplu
rotate.in
4
8 1 6 2
9 3 4 7
5 1 2 3
4 10 11 12
rotate.out
2
1 6 2 7
8 1 3 3
9 2 4 12
5 4 10 11
Explicație
Rotind cu o poziție la stânga atât pătratul și o poziție la dreapta pătratul , obținem costul și matricea prezentată în rotate.out
.