我在平面上画了 $n$ 个点和 $m$ 条连接这些点的直线段。没有任何线段穿过除其端点以外的点,也没有两条线段在除公共端点以外的任何点相交。此外,如果你从一个点出发,仅沿着线段移动,你可以到达任何其他点。所有 $n$ 个点的位置各不相同。
是的,这是一个连通图的平面嵌入,该图有 $n$ 个顶点和 $m$ 条边。你的任务是检查该图的每个面(包括外部面)是否都是三角形。当且仅当一个面由恰好 3 条边围成时,它才是一个三角形。如果一个面在某条边的两侧,则该边被计算两次。
追求卓越!请务必为你的算法寻求尽可能最优的复杂度。
输入格式
第一行包含两个整数 $n$ 和 $m$ ($3 \le n \le 10^5$, $n - 1 \le m \le 3 \cdot 10^5$),分别表示点的数量和线段的数量。
接下来的 $n$ 行包含点的坐标。所有坐标的绝对值均不超过 $10^9$。所有 $n$ 个点的位置各不相同。
接下来的 $m$ 行,每行包含两个整数 $u$ 和 $v$ ($1 \le u, v \le n, u \neq v$),表示由线段连接的点的编号。保证没有两条线段连接同一对点。
保证输入描述了一个连通图的有效平面嵌入,且所有边均绘制为直线段。
输出格式
如果给定图的每个面(包括外部面)都是三角形,则输出 “YES”,否则输出 “NO”。
样例
样例输入 1
3 3 0 0 1 0 0 1 1 2 2 3 3 1
样例输出 1
YES
样例输入 2
4 4 0 0 3 0 0 3 1 1 1 2 2 3 3 1 1 4
样例输出 2
NO
样例输入 3
4 6 0 0 3 0 0 3 1 1 1 2 2 3 3 1 1 4 2 4 3 4
样例输出 3
YES
样例输入 4
4 5 0 0 2 0 1 1 0 2 1 2 1 3 1 4 2 3 3 4
样例输出 4
NO
样例输入 5
4 3 0 0 0 1 1 1 1 2 1 2 2 3 3 4
样例输出 5
NO