Un păianjen a ţesut o plasă, în care nodurile sunt dispuse sub forma unui caroiaj cu linii (numerotate de la la ) şi coloane (numerotate de la la ) ca în figură. Iniţial, Oricare două noduri vecine (pe orizontală sau verticală) erau unite prin segmente de plasă de lungime . În timp unele porţiuni ale plasei s-au deteriorat, devenind nesigure. Pe plasă, la un moment dat, se găsesc păianjenul şi o muscă, în noduri de coordonate cunoscute.
Cerinţă
Să se determine lungimea celui mai scurt traseu pe care trebuie să-l parcurgă păianjenul, folosind doar porţiunile sigure ale plasei, pentru a ajunge la muscă. De asemenea, se cere un astfel de traseu.
Date de intrare
Fişierul de intrare paianjen.in
conţine:
- pe prima linie două numere naturale , , separate printr-un spaţiu, reprezentând numărul de linii şi respectiv numărul de coloane ale plasei;
- pe a doua linie două numere naturale , , separate printr-un spaţiu, reprezentând linia şi respectiv coloana nodului în care se află iniţial păianjenul;
- pe linia a treia două numere naturale , separate printr-un spaţiu, reprezentând linia şi respectiv coloana pe care se află iniţial musca;
- pe linia a patra, un număr natural , reprezentând numărul de porţiuni de plasă deteriorate;
- pe fiecare dintre următoarele linii, câte patru valori naturale , , , , separate prin câte un spaţiu, reprezentând coordonatele capetelor celor porţiuni de plasă deteriorate (linia şi apoi coloana pentru fiecare capăt).
Date de ieșire
Fişierul de ieşire paianjen.out
va conţine pe prima linie un număr natural min reprezentând lungimea drumului minim parcurs de păianjen, exprimat în număr de segmente de lungime . Pe următoarele min+1 linii sunt scrise nodurile prin care trece păianjenul, câte un nod pe o linie. Pentru fiecare nod sunt scrise linia şi coloana pe care se află, separate printr-un spaţiu.
Restricții și precizări
- ;
- ;
- Lungimea drumului minim este cel mult
- Pentru datele de test există întotdeauna soluţie. Dacă problema are mai multe soluţii, se va afişa una singură.
- Porţiunile nesigure sunt specificate în fişierul de intrare într-o ordine oarecare. Oricare două porţiuni nesigure orizontale se pot intersecta cel mult într-un capăt. De asemenea, oricare două porţiuni nesigure verticale se pot intersecta cel mult într-un capăt.
- Se acordă din punctaj pentru determinarea lungimii drumului minim şi pentru rezolvarea ambelor cerinţe.
Exemplu
paianjen.in
9 7
2 3
7 4
8
2 4 2 5
2 3 3 3
3 0 3 1
3 3 3 5
4 4 5 4
6 4 6 5
6 5 7 5
7 2 7 3
paianjen.out
8
2 3
2 2
3 2
4 2
5 2
6 2
6 3
7 3
7 4
Explicație
Problema corespunde figurii de mai sus. Traseul optim este desenat cu linie groasă, iar porţiunile nesigure sunt desenate punctat.