traseu

Time limit: 0.3s Memory limit: 16MB Input: traseu.in Output: traseu.out

Într-un oraș există un hotel de formă cubică, cu NN etaje, numerotate de la 11 la NN. Suprafața fiecărui etaj KK este pătratică și este împărțită în N×NN \times N camere identice alăturate, dispuse pe NN linii și NN coloane, fiecare cameră având drept etichetă un triplet de numere naturale (K,L,C)(K, L, C) (KK este etajul, LL este linia, CC este coloana, 1K,L,CN1 \leq K, L, C \leq N), ca în imaginea alăturată.

Dintre cele N×N×NN \times N \times N camere ale hotelului, una este specială deoarece în ea locuiește de mult timp un șoricel. Fiind isteț, el știe eticheta camerei în care se află precum și eticheta camerei în care bucătarul hotelului depozitează alimente.

Studiind hotelul, șoricelul a constatat că pe fiecare etaj, din orice cameră poate intra în toate camerele care au un perete comun cu aceasta (existând un mic orificiu pentru aerisire).

De asemenea, șoricelul a constatat că din orice cameră poate intra în camera situată imediat deasupra ei (dacă există) și în camera situată imediat sub ea (dacă există).
Fiind un șoricel binecrescut, el nu intră în nicio cameră ocupată de clienți ca să nu-i deranjeze.

Hotelul având mulți clienți, șoricelul trebuie să-și găsească cel mai scurt traseu de la camera lui la camera cu alimente, traseu care să treacă printr-un număr minim de camere, toate neocupate.

Cerință

Se cere să se determine:

  1. numărul de camere prin care trece cel mai scurt traseu al șoricelului de la camera lui la camera cu alimente (inclusiv camera lui şi camera cu alimente);
  2. etichetele camerelor prin care trece traseul determinat la punctul 1.

Date de intrare

Fişierul traseu.in conţine:

  • pe prima linie, două numere naturale NN și MM separate printr-un spațiu, NN cu semnificația din enunț iar MM reprezentând numărul de camere ocupate de clienţii hotelului;
  • pe a doua linie, trei numere naturale K1K_1, L1L_1, C1C_1, separate prin câte un spațiu, reprezentând eticheta camerei în care se află șoricelul;
  • pe a treia linie, trei numere naturale K2K_2, L2L_2, C2C_2, separate prin câte un spațiu, reprezentând eticheta camerei în care sunt depozitate alimentele;
  • pe fiecare dintre următoarele MM linii, câte trei numere naturale XX, YY, ZZ, separate prin câte un spaţiu, reprezentând etichetele celor MM camere ocupate de clienți.

Date de ieșire

Fişierul de ieşire traseu.out va conţine pe prima linie un număr natural TT reprezentând numărul de camere prin care trece cel mai scurt traseu al șoricelului de la camera lui la camera cu alimente determinat la punctul 1. Pe fiecare din următoarele TT linii, se vor scrie câte trei numere naturale XX, YY, ZZ, separate prin câte un spaţiu, reprezentând etichetele camerelor prin care trece traseul determinat la punctul 1, în ordinea în care sunt parcurse camerele de către șoricel pentru a ajunge din camera lui în camera cu alimente.

Restricții și precizări

  • 2N1002 \leq N \leq 100
  • 1M5 0001 \leq M \leq 5 \ 000
  • M<NN2M < N \cdot N - 2
  • Șoricelul nu intră decât în camere neocupate de clienți.
  • Camera șoricelului este o cameră neocupată de clienți.
  • Dacă există mai multe trasee ale șoricelului de la camera lui la camera de alimente care trec prin exact TT camere, atunci traseul afișat va fi cel mai mic traseu din punct de vedere lexicografic.
  • Eticheta (X1,Y1,Z1)(X_1, Y_1, Z_1) se consideră strict mai mică în sens lexicografic ca eticheta (X2,Y2,Z2)(X_2, Y_2, Z_2) dacă este satisfăcută doar una dintre condițiile:
    • X1<X2X_1 < X_2;
    • X1=X2X_1 = X_2 și Y1<Y2Y_1 < Y_2;
    • X1=X2X_1 = X_2 și Y1=Y2Y_1 = Y_2 și Z1<Z2Z_1 < Z_2.
  • Eticheta (X1,Y1,Z1)(X_1, Y_1, Z_1) se consideră egală cu eticheta (X2,Y2,Z2)(X_2, Y_2, Z_2) dacă X1=X2X_1 = X_2 și Y1=Y2Y_1 = Y_2 și Z1=Z2Z_1 = Z_2. Vom scrie egalitatea lor astfel: (X1,Y1,Z1)=(X2,Y2,Z2)(X_1, Y_1, Z_1) = (X_2, Y_2, Z_2).
  • Traseul ce trece (în această ordine) prin camerele cu etichetele (X1,Y1,Z1)(X_1, Y_1, Z_1), (X2,Y2,Z2)(X_2, Y_2, Z_2), ..., (XT,YT,ZT)(X_T, Y_T, Z_T) este mai mic din punct de vedere lexicografic ca traseul (A1,B1,C1)(A_1, B_1, C_1), (A2,B2,C2)(A_2, B_2, C_2), ..., (AT,BT,CT)(A_T, B_T, C_T) dacă există un indice JJ (1JT1 \leq J \leq T) astfel încât (X1,Y1,Z1)=(A1,B1,C1)(X_1, Y_1, Z_1) = (A_1, B_1, C_1), (X2,Y2,Z2)=(A2,B2,C2)(X_2, Y_2, Z_2) = (A_2, B_2, C_2), ..., (XJ1,YJ1,ZJ1)=(AJ1,BJ1,CJ1)(X_{J-1}, Y_{J-1}, Z_{J-1}) = (A_{J-1}, B_{J-1}, C_{J-1}) iar eticheta (XJ,YJ,ZJ)(X_J, Y_J, Z_J) este strict mai mică în sens lexicografic ca eticheta (AJ,BJ,CJ)(A_J, B_J, C_J).
  • Se acordă 40%40\% din punctaj pentru determinarea corectă a numărului TT și 100%100\% din punctaj pentru rezolvarea corectă a ambelor cerințe.
  • Se garantează că există soluție pentru ambele cerințe, pentru toate datele de test.

Exemplu

traseu.in

3 4
1 1 1 
3 3 3
3 3 1
2 1 1
3 1 1
3 1 3

traseu.out

7
1 1 1
1 1 2
1 1 3
1 2 3
1 3 3
2 3 3
3 3 3

Explicație

Hotelul are trei etaje (11, 22 şi 33). Pe fiecare etaj sunt 3×33 \times 3 camere. Șoricelul se află în camera cu eticheta (1,1,1)(1,1,1) iar camera cu alimente are eticheta (3,3,3)(3, 3, 3).

Sunt 44 camere ocupate de clienţi. Acestea au etichetele: (3,3,1)(3, 3, 1), (2,1,1)(2, 1, 1), (3,1,1)(3, 1, 1), (3,1,3)(3, 1, 3). Traseul cel mai scurt trece prin T=7T = 7 camere. Sunt mai multe astfel de trasee. Câteva exemple:

  1. (1,1,1)(1,1,1), (1,1,2)(1,1,2), (1,1,3)(1,1,3), (1,2,3)(1,2,3), (1,3,3)(1,3,3), (2,3,3)(2,3,3), (3,3,3)(3,3,3);
  2. (1,1,1)(1,1,1), (1,1,2)(1,1,2), (1,1,3)(1,1,3), (2,1,3)(2,1,3), (2,2,3)(2,2,3), (3,2,3)(3,2,3), (3,3,3)(3,3,3);
  3. (1,1,1)(1,1,1), (1,2,1)(1,2,1), (1,3,1)(1,3,1), (1,3,2)(1,3,2), (2,3,2)(2,3,2), (3,2,3)(3,2,3), (3,3,3)(3,3,3);

Traseul 1 din lista de mai sus este cel mai mic în sens lexicografic.

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