Time Limit: 1 SecMemory Limit: 1024 MiB

문제

체스판은 격자판이며 각 행에는 부터 까지, 열에는 a부터 h까지 이름이 붙어 있다. 어떤 칸의 이름은 해당 칸의 열 이름과 행 이름을 붙인 것과 같다. 예를 들어, 아래 체스판에서 두 룩은 각각 c4, f4 칸에 있다.

체스의 기물 중 룩은 현재 위치한 칸과 다르면서 같은 행 또는 열에 속한 칸으로만 이동할 수 있으며, 도착하는 칸을 포함한 이동 경로에 다른 룩이 있다면 이동할 수 없다. 예를 들어, 아래 체스판에서 c4에 위치한 룩은 빨간색으로 색칠된 칸 중 하나로 이동할 수 있으며, f4에 위치한 룩에 막혀 f4, g4, h4 칸으로는 이동할 수 없다.

찬우는 검은 룩 두 개를 무작위로 골라 체스판에서 이리저리 움직이며 각 이동마다 도착한 칸만을 기록했다. 예를 들어, 아래 그림처럼 룩이 이동했다면 각 이동에서 f6, h4, h7이 기록된다.

어느 순간, 찬우는 도착한 칸만 기록한다면 특정 상황에서 실제 움직임을 복원할 수 없다는 사실을 깨달았다. 두 룩 모두 기록된 칸으로 이동할 수 있다면 어느 룩이 해당 칸으로 이동했는지 알 수 없기 때문이다. 물론 이후 기록을 참고하면 어떤 룩이 움직였는지 추론할 수 있을지도 모르지만, 안타깝게도 찬우는 이후 이동 기록을 참고하여 추론할 수 있을 만큼 똑똑하지 않다.

따라서 찬우는 좋은 기록, 모호한 기록, 불가능한 기록 세 가지로 나누기로 했다.

  • 모호한 기록은 두 룩 모두 도착 칸으로 갈 수 있는 이동이 존재하는 기록을 의미한다.
  • 불가능한 기록은 두 룩 모두 도착 칸으로 갈 수 없는 이동이 존재하는 기록을 의미한다.
  • 좋은 기록은 모호하거나, 불가능한 기록이 아닌 기록을 의미한다.

찬우는, 초기 위치부터 순서대로 룩을 이동시키다가, 모호하거나 불가능한 기록이라고 판단되면 이후 기록은 보지 않고 즉시 판단한다. 즉, 모호한 이동 이후 불가능한 이동을 한 경우 찬우는 모호한 기록이라고 판단한다.

찬우가 기록한 도착 칸이 이동 순서대로 주어진다. 주어지는 기록이 모호한지, 불가능한지, 좋은지 판별하는 프로그램을 작성해 보자.

입력

첫째 줄에 두 룩의 초기 위치가 공백으로 구분되어 주어진다. 처음에 두 룩은 항상 서로 다른 칸에 있다.

둘째 줄에는 찬우가 기록한 이동 수를 나타내는 정수 이 주어진다.

셋째 줄부터 개의 줄에 걸쳐 찬우의 기록이 주어진다. 그중 번째 줄에는 번째 이동에서 룩이 도착한 칸의 이름이 주어진다.

룩 위치는 지문에서 설명한 표기법을 따른다. 즉, 칸의 이름은 두 글자로 이루어져 있으며 이름의 첫 번째 글자는 ah 사이인 소문자 알파벳이고, 두 번째 글자는 이상 이하인 숫자이다.

출력

모호한 기록이라면 ambiguous, 불가능한 기록이라면 impossible, 좋은 기록이라면 good을 출력한다.

노트

두 번째 예제에서, 처음에 두 룩은 b3와 b8에 있다. 다음 도착 칸은 b6인데, b3과 b8의 룩 모두 b6로 갈 수 있다. 따라서 이는 모호한 기록이다.

네 번째 예제에서, 처음에 f5에 이미 룩이 있기 때문에 두 룩 모두 f5로 이동할 수 없다. 따라서 이는 불가능한 기록이다.

Example Input 1
a1 e7
3
a3
b7
d3
Example Output 1
good
Example Input 2
b3 b8
5
b6
b2
a2
a6
d1
Example Output 2
ambiguous
Example Input 3
b3 b8
5
d1
b6
b2
a2
a6
Example Output 3
impossible
Example Input 4
c2 f5
1
f5
Example Output 4
impossible