Now that Griffy has made lots of friends, he would like to play a game with them! Hide and seek is a game where the seeker needs to find and tag stationary hiders, all around the school. Griffy volunteered to be the seeker first, so he can show off his super-sonic flying speed! The school is rows by columns, walls are represented by `X`

s, empty space is represented by `.`

s, Griffy's starting position will be `G`

, and the locations of the hiders are represented by `H`

. Griffy can fly one square up, down, left, or right of his current position in 1 second, and cannot fly through walls.

This, of course, is a great opportunity for you to hone your programming skills. Please determine the minimum amount of time it will take for Griffy to find all his hiding friends!

**Note:** It is guaranteed that a valid path exists.

#### Input Specification

First line: , , , space separated .

Next lines: characters per line, representing the school map.

#### Output Specification

Output one integer, the minimum time in seconds that Griffy will take to find all the hiders. It is guaranteed that Griffy can find all hiders.

#### Sample Input

```
3 5 2
..H..
..X.H
G...X
```

#### Sample Output

`7`

#### Explanation for Sample Output

The path that takes the least amount of time is 2 up, 4 right and 1 down, for a total of seconds.

## Comments

Is a greedy algorithm where you choose the nearest hider each time insufficient?

Imagine linear time TSP lmao.

Recursion isn't needed (this from a person who hasn't solved it yet).

There are many ways to solve a problem. The problem types list a few common ways; not all of them may be required.

Oh never mind. I'm dumb.