그래프 곱셈
시간 제한2초메모리 제한1024 MB
두 그래프 A, B가 주어질 때 카르테시안 곱, 텐서 곱, 강한 곱에서 G11부터 지정한 정점까지의 최단 거리를 쿼리마다 구합니다.
문제
그래프 이론에서 두 그래프의 곱은 여러 가지로 정의된다. 대표적으로 데카르트 곱, 텐서 곱, 강한 곱이 있다. 각 곱의 정의는 다음과 같다.
정점이 개인 그래프 의 정점을 ()라 하고, 정점이 개인 그래프 의 정점을 ()라 하자. 두 그래프를 곱한 그래프 는 개의 정점을 가진다. 각 정점에는 과 같이 번호를 붙인다.
연산별 간선은 다음과 같이 정의된다.
- 데카르트 곱: ()에 대해 와 가 인접하면, 모든 에 대해 와 가 인접한다. ()에 대해 와 가 인접하면, 모든 에 대해 와 가 인접한다.
- 텐서 곱: , (, )에 대해 와 가 인접하고 와 이 인접하면, 와 이 인접한다.
- 강한 곱: , 에 대해 와 이 데카르트 곱에서 인접하거나 텐서 곱에서 인접하면, 두 정점은 인접한다.
그림 1은 예시이다. 왼쪽의 두 그래프를 데카르트 곱하면 오른쪽의 9개 정점과 파란색 실선 간선이 나온다. 텐서 곱하면 같은 9개 정점과 빨간색 점선 간선이 나온다.

[그림 1] 데카르트 곱, 텐서 곱, 강한 곱을 그림으로 나타낸 예시.
두 그래프 와 가 주어졌을 때, 다음 형식의 쿼리 개에 답하는 프로그램을 작성하시오.
1 p q: 와 의 데카르트 곱 에서 정점 와 사이의 최단 경로 길이를 출력한다. 경로가 없으면-1을 출력한다.2 p q: 와 의 텐서 곱 에서 정점 와 사이의 최단 경로 길이를 출력한다. 경로가 없으면-1을 출력한다.3 p q: 와 의 강한 곱 에서 정점 와 사이의 최단 경로 길이를 출력한다. 경로가 없으면-1을 출력한다.
입력
첫 번째 줄에 그래프 의 정점 개수 과 간선 개수 가 공백으로 구분되어 주어진다.
두 번째 줄부터 개의 줄에 걸쳐 번째 줄에 그래프 의 번째 간선이 잇는 두 정점의 번호 와 가 공백으로 구분되어 주어진다.
그다음 줄에 그래프 의 정점 개수 과 간선 개수 가 공백으로 구분되어 주어진다.
그다음 줄부터 개의 줄에 걸쳐 번째 줄에 그래프 의 번째 간선이 잇는 두 정점의 번호 와 가 공백으로 구분되어 주어진다.
그다음 줄에 쿼리 개수 가 주어진다.
그다음 줄부터 개의 줄에 쿼리가 한 줄에 하나씩 주어진다. 쿼리 형식은 문제 설명을 참고한다.
주어지는 모든 입력은 정수이다.
출력
각 쿼리의 답을 한 줄에 하나씩 출력한다.
제한
- 각 쿼리에 대해 ,
- ()
- ()
- ()
- ()
- 에 대해 이면
- 에 대해 이면