Șiruri

Time limit: 0.2s Memory limit: 64MB Input: siruri.in Output: siruri.out

Fie MM un tablou bidimensional (matrice), format din NN linii şi NN coloane, având elemente din mulţimea {0,1}\{0, 1\}. Liniile şi coloanele acestui tablou sunt numerotate de la 11 la NN. Un drum de lungime KK în acest tablou este un şir de perechi (xi,yi)(x_i, y_i), cu ii de la 11 de la KK, cu următoarele proprietăţi:

  • xix_i și yiy_i sunt valori numere naturale din intervalul [1,N][1, N], pentru ii de la 11 la KK;
  • (xixi+1=1(|x_i - x_{i+1}|=1 şi yi=yi+1)y_i = y_{i+1}) sau (yiyi+1=1(|y_i - y_{i+1}|= 1 şi xi=xi+1x_i = x_{i+1}), pentru ii de la 11 la K1K-1.

Altfel spus, un drum este o succesiune de poziții în tablou astfel încât două poziții consecutive sunt alăturate fie sus-jos, fie stânga-dreapta. Numim valoare a unui drum șirul de valori M[xi][yi]M[x_i][y_i], cu ii de la 11 la KK.

Prin anagramă a unui şir de valori vom înţelege orice rearanjare a elementelor acestuia. De exemplu, dacă şirul iniţial conţine elementele (1,0,0,1)(1, 0, 0, 1), atunci şirurile (1,0,0,1)(1, 0, 0, 1), (1,0,1,0)(1, 0, 1, 0), (1,1,0,0)(1, 1, 0, 0), (0,1,1,0)(0, 1, 1, 0) sunt anagrame ale acestuia.

Cerinţă

Cunoscând dimensiunea NN a tabloului, elementele tabloului MM și un șir SS, compus din KK elemente din mulţimea {0,1}\{0, 1\}, determinaţi un drum în tabloul MM, având ca valoare o anagramă a lui SS, dacă acest drum există.

Date de intrare

Datele de intrare se citesc din fişierul siruri.in, care are următoarea structură:

  • pe prima linie se află două numere naturale NN și KK, separate printr-un singur spaţiu, reprezentând dimensiunea tabloului, respectiv lungimea șirului SS;
  • pe fiecare din următoarele NN linii se află câte NN valori din mulţimea {0,1}\{0, 1\}, separate prin câte un spațiu, reprezentând valorile tabloului MM;
  • pe linia N+2N+2 se află KK numere, din mulţimea {0,1}\{0, 1\}, separate prin câte un spațiu, reprezentând valorile șirului SS.

Date de ieșire

Datele de ieşire se vor scrie în fişierul siruri.out, astfel:

  • Dacă nu există niciun drum care satisface cerința problemei, atunci se va scrie valoarea 1-1 ;
  • Dacă există un astfel de drum, atunci se vor scrie, pe linii separate, KK perechi de valori xi yix_i \ y_i, din mulţimea {1,2,,N}\{1,2, …,N\}, separate printr-un singur spaţiu, reprezentând drumul determinat.

Restricții și precizări

  • 1N1001 ≤ N ≤ 100
  • 1K100 0001 ≤ K ≤ 100 \ 000
  • Elementele tabloului MM și ale șirului SS sunt elemente din mulţimea {0,1}\{0, 1\}
  • Pentru teste în valoare de 2020 de puncte, şirul SS se găseşte pe o linie sau pe o coloană a matricei, aşa cum este dat în fişierul de intrare sau în ordine inversă;
  • Soluția nu este unică, se acceptă orice soluție

Exemplul 1

siruri.in

3 10
0 0 0
0 1 1
1 0 1
1 1 1 0 1 1 1 0 1 1

siruri.out

2 2
2 3
2 2
2 1
2 2
2 3
2 2
2 3
3 3
3 2

Explicație

Valoarea obţinută pentru drumul din fişierul de ieşire este (1,1,1,0,1,1,1,1,1,0)(1, 1, 1, 0, 1, 1, 1, 1, 1, 0) şi reprezintă o anagramă a şirului dat.

Exemplul 2

siruri.in

4 3
1 0 0 0
0 0 1 0
1 0 0 0
1 0 0 0
1 1 0

siruri.out

4 1
3 1
2 1

Explicație

Şirul SS se găseşte pe coloana 11 a matricei.

Exemplul 3

siruri.in

2 4
0 0
0 0
1 0 1 0

siruri.out

-1

Explicație

În tablou nu există valoarea 11, deci nu se poate obține un drum a cărui valoare să conțină 11.

Log in or sign up to be able to send submissions!