在 Nlogonia,有几项旨在将自行车转变为该国主要交通工具的运动。推广自行车运动的举措之一是举办一场黑客马拉松,专注于开发能够促进骑行者日常生活的应用程序。
你们大学的团队有一个很有前途的想法。由于 Nlogonia 是一个多雨的国家,有时那些在雨中出行的人并非不想避雨,只是别无选择。因此,这个想法是开发一款应用程序,能够生成两条点之间的路线,并保证在旅途中不会被雨淋湿,同时确保没有其他具有相同保证且耗时更短的路线。
为了在黑客马拉松上展示原型,请考虑所有兴趣点都排列在笛卡尔平面上,且具有整数坐标。雨云被建模为简单多边形(不相连的边不相交),每条边都平行于坐标轴之一。每朵云在单位时间内沿基准方向(北、南、东或西)移动一个单位距离。骑行者也在单位时间内沿基准方向移动一个单位距离。骑行者可以在任何兴趣点改变方向;改变方向是瞬间完成的。此外,在旅途中,骑行者可以在任何兴趣点停留,根据需要避雨任意整数单位的时间。如果骑行者不在兴趣点(避雨)且上方至少有一朵云,他们就会被淋湿。当骑行者位于云的边界时,云不被视为在骑行者上方。
当团队的其他成员忙于生成数据和创建图形界面时,你的任务是开发软件中负责为想要在两个兴趣点之间旅行且不被淋湿的骑行者生成最佳路线的部分。
上图对应于前两个样例。在第一个样例中,随着云向东移动,骑行者可以直接前往目的地,先向西移动再向北移动,总共耗时七个单位。在第二个样例中,云向南移动,因此骑行者只能向西移动一个单位距离而不被淋湿。如果骑行者尝试第二次向西移动,云就会在他们上方。因此,最快的方法是在向西移动后等待一个单位的时间,然后沿着云的边界向北移动,最后向西前往目的地,总共耗时八个单位。
输入格式
第一行包含四个整数 $X_o, Y_o, X_d$ 和 $Y_d$ ($0 \le X_o, Y_o, X_d, Y_d \le 100$),表示骑行者从点 $(X_o, Y_o)$ 出发,想要到达点 $(X_d, Y_d)$。第二行包含一个整数 $N$ ($0 \le N \le 100$),表示雨云的数量。在此之后,有 $N$ 组行,每组描述一朵云。
在描述每朵云的组中,第一行包含一个字符 $C$ 和一个整数 $V$ ($4 \le V \le 100$)。字符 $C$ 是大写字母“N”、“S”、“E”或“W”之一,分别表示云向北($y$ 递增)、南($y$ 递减)、东($x$ 递增)或西($x$ 递减)移动。值 $V$ 表示建模云的多边形的顶点数。接下来的 $V$ 行中,每行包含两个整数 $X$ 和 $Y$ ($0 \le X, Y \le 100$),表示点 $(X, Y)$ 是多边形的一个顶点。顶点按顺时针顺序给出。所有给定的顶点都是多边形的实际角点。
输出格式
输出一行,包含一个整数,表示从 $(X_o, Y_o)$ 到 $(X_d, Y_d)$ 且不被淋湿所需的最少时间单位。
样例
输入 1
4 0 1 4 1 E 8 0 5 3 5 3 2 5 2 5 1 2 1 2 2 0 2
输出 1
7
输入 2
4 0 1 4 1 S 8 0 5 3 5 3 2 5 2 5 1 2 1 2 2 0 2
输出 2
8
输入 3
1 2 1 3 1 N 4 1 4 2 4 2 1 1 1
输出 3
1
输入 4
0 0 0 1 1 W 4 1 1 1 0 0 0 0 1
输出 4
2
输入 5
20 1 1 10 2 E 4 1 30 15 30 15 0 1 0 S 4 0 29 100 29 100 22 0 22
输出 5
32
输入 6
42 42 42 42 0
输出 6
0