Pokémon Go
题号:NC214052
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 64 M,其他语言128 M
64bit IO Format: %lld

题目描述

小智与皮卡丘接到了一个救援任务,需要去拯救陷入困境的

已知,一共有 陷入困境,该困境可看成是一个 的矩阵,其中,有 个不同的位置已被摧毁,任何一只 都无法踏足这些位置;同时,机智的皮卡丘发现了 个出口,遍布于困境的 个不同位置(不与已被摧毁地重合)

现在,对于任何一只 ,小智想知道,它到达出口的最少移动次数是多少?(到达任意一个出口均可)

只能上下左右移动,即:位于 只能选择移动到 这四个位置其中之一,当然,该位置不可以超过困境范围,同时不能是已被摧毁的位置。

输入描述:

第一行输入两个正整数 ,代表困境矩阵的行、列宽度。

第二行输入一个整数 ,代表摧毁位置的个数。

接下去 行,每行输入两个正整数 ,代表 这个位置已被摧毁,数据保证,被摧毁地不会重复出现。

行输入一个正整数 ,代表出口数量。

接下去 行,每行输入两个正整数 ,代表 这个位置是出口,数据保证,出口不会重复出现,且不会跟被摧毁地重叠。

行,输入一个正整数 ,代表陷入困境中的 数量。

最后 行,每行输入两个正整数 ,代表其中有一只 位于 这个位置上,不同的 有可能位于同一个位置,也可能直接位于出口处,但不会出现在被摧毁的位置上。

输出描述:

对于 ,按顺序输出  行,每行一个整数,代表这只  最少需要移动多少次才能到达出口。特殊的,如果无论如何都不能到达出口,那么输出  代表没有逃生路径。
示例1

输入

复制
3 3
3
3 1
2 2
3 3
1
1 1
2
3 2
2 3

输出

复制
-1
3