Loid Forger trebuie să deblocheze un seif de înaltă securitate. Mecanismul de deblocare este protejat de un panou dreptunghiular reprezentat folosind o matrice de dimensiune în care fiecare celulă conține o oglindă dispusă pe una dintre cele două diagonale.
Poziția inițială a fiecărei oglinzi este reprezentată prin caracterele sau .
Panoul este înconjurat de un chenar format din pereți retrovizori care reflectă orice fascicul înapoi pe direcția din care a venit (marginile funcționează ca oglinzi: cele verticale reflectă orizontal, iar cele orizontale reflectă vertical).
Un fascicul laser se deplasează doar pe direcții orizontale sau verticale prin centrele celulelor sau pe segmentele dintre centrele acestora. Mișcarea sa respectă următoarele reguli:
- fasciculul se deplasează în linie dreaptă până când întâlnește o oglindă sau un perete;
- dacă întâlnește un perete exterior, își inversează direcția (la );
- dacă întâlnește o oglindă , atunci direcția se schimbă astfel (cu ): respectiv
- dacă întâlnește o oglindă , atunci direcția se schimbă astfel (cu ): respectiv
Considerăm toate stările posibile ale fasciculului, unde o stare este determinată de o poziție și o direcție de deplasare. Se poate demonstra că, pornind din orice stare, fasciculul va reveni din nou în acea stare. Astfel, toate stările se împart în cicluri disjuncte. Numim drum de laser un astfel de ciclu.
De exemplu, pentru configurația de de mai jos, există drumuri de laser: drumuri scurte care ating peretele exterior și un ciclu închis în centru.

Pentru fiecare celulă se cunoaște un număr întreg care reprezeinta costul pentru a efectua o operație de flip în celula respectivă. Folosind operația flip putem roti oglinda (înlocuind cu sau invers). Oglinda din fiecare celulă poate fi rotită cel mult o dată.
Scopul lui Loid este să aleagă un subset de oglinzi pentru care va aplica operația flip astfel încât:
- numărul total de drumuri de laser să fie minim posibil;
- dintre toate modurile de a ajunge într-o configurație cu un număr minim de drumuri, costul însumat al operațiilor flip să fie minim.
Date de intrare
Pe prima linie se află numerele și , cu semnificația din enunț.
Următoarele linii conțin câte un șir de lungime , format din caracterele și . Al -lea caracter de pe a -a linie dintre aceste reprezintă orientarea inițială a oglinzii din celula
Următoarele linii conțin câte numere întregi. Al -lea număr de pe a -a linie dintre aceste reprezintă valoarea .
Date de ieșire
Pe prima linie se vor afișa două numere: numărul minim de drumuri de laser și costul minim total.
Pe următoarele linii se va afișa o matrice de și ( pentru flip, pentru neschimbat).
Restricții și precizări
- Pentru subtask-urile 1, 2, 3, 4, 5, 6, 7, 8, 9, toate costurile sunt .
- Două drumuri de laser sunt distincte dacă mulțimile punctelor prin care trece fasciculul laser sunt distincte
- Dacă numărul minim de lanțuri este corect, se acordă din punctajul testului.
- Dacă numărul minim de lanțuri și costul minim sunt corecte, se acordă din punctajul testului.
- Dacă și matricea de
0/1este corectă, se acordă din punctajul testului.
| # | Scor | Restricții |
|---|---|---|
| 1 | 8 | |
| 2 | 5 | |
| 3 | 12 | |
| 4 | 15 | Există o soluție optimă cu exact un flip, iar |
| 5 | 12 | |
| 6 | 6 | Există o soluție optimă cu exact un flip |
| 7 | 7 | |
| 8 | 5 | pare, celula are / dacă și numai dacă și au aceeași paritate. |
| 9 | 11 | Toate costurile sunt |
| 10 | 19 | Fără alte restricții |
Exemplu 1
stdin
2 2
/\
\/
1 4
3 2
stdout
4 1
10
00
Explicație
Configurația inițială (cea din desenul de ) are drumuri. Prin operarea unui flip în poziția , numărul de drumuri scade la , acesta fiind minimul posibil pentru o matrice . Costul este .

Exemplu 2
stdin
1 1
/
-5
stdout
2 -5
1
Explicație
Indiferent de orientarea oglinzii, există mereu drumuri. Deoarece costul rotirii este , este optim să efectuăm un flip.
