Astar

Time limit: 2s Memory limit: 64MB Input: Output:

Cerință

Se dă o hartă de N×NN \times N care conține spații libere (notate cu .) și spații ocupate (notate cu #). Să se răspundă la QQ interogări de forma i1 j1 i2 j2i_1\ j_1\ i_2\ j_2, unde se dorește să se afle distanța minimă de la celula (i1,j1)(i_1, j_1) la celula (i2,j2)(i_2, j_2).

Date de intrare

Pe prima linie se citește numărul NN.

Pe următoarele NN linii, se citește matricea AA, formată din caractere. Fiecare element al matricei poate fi fie . (punct), fie # (diez). Nu există spații între caracterele din fiecare linie.

După matrice, se citește un număr întreg QQ, care reprezintă numărul de interogări.

Pe următoarele QQ linii, fiecare linie conține câte patru numere întregi i1i_1, j1j_1, i2i_2 și j2j_2.

Date de ieșire

Pentru fiecare dintre cele QQ interogări, se afișează pe o linie separată rezultatul corespunzător.

Restricții și precizări

  • Se recomandă folosirea fastio.
  • 1N6901 \le N \le 690
  • 1Q100 0001 \le Q \le 100\ 000
  • 0i1,j1,i2,j2<N0 \le i_1, j_1, i_2, j_2 \lt N
  • Dacă nu există soluție, se va afișa -1.
  • Cel mult 1%1\% (rotunjit în sus) din toate celulele sunt ocupate (cu excepția exemplului).
  • Testele sunt generate random.

Exemplu

stdin

5
#...#
#....
#.#..
..#..
..#..
5
3 0 3 3
2 1 2 3
0 4 2 4
3 4 2 1
0 1 2 3

stdout

7
4
-1
6
4

Explicație

Pentru prima întrebare, distanța de la celula (3,0)(3, 0) la celula (3,3)(3, 3) este 77. Un drum posibil este următorul: (3,0)(3, 0), (3,1)(3, 1), (2,1)(2, 1), (1,1)(1, 1), (1,2)(1, 2), (1,3)(1, 3), (2,3)(2, 3), (3,3)(3, 3).

#...#
#***.
#*#*.
1*#2.
..#..

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