AT_arc083_d [ARC083F] Collecting Balls

题目描述

在 $xy$ 平面上有 $2N$ 个球,第 $i$ 个球的位置为 $(x_i,\ y_i)$。这里,对于每个 $i$,$x_i,\ y_i$ 均为不小于 $1$ 且不大于 $N$ 的整数,且没有两个球处于同一位置。 Sune君为了收集这些球,准备了 $N$ 台 A 型机器人和 $N$ 台 B 型机器人。A 型机器人分别放置在 $(1,\ 0),\ (2,\ 0),\ ...,\ (N,\ 0)$,B 型机器人分别放置在 $(0,\ 1),\ (0,\ 2),\ ...,\ (0,\ N)$。 这两种类型的机器人启动时的动作如下: - A 型机器人从 $(a,\ 0)$ 启动后,会回收直线 $x = a$ 上纵坐标 $y$ 最小的球并停止。如果该直线上没有球,则不进行操作直接停止。 - B 型机器人从 $(0,\ b)$ 启动后,会回收直线 $y = b$ 上横坐标 $x$ 最小的球并停止。如果该直线上没有球,则不进行操作直接停止。 每个机器人在停止后无法再次启动。在有机器人正在工作时,必须等其停下才能启动下一台机器人。 Sune君发现,机器人的启动顺序可能会导致无法收集全部的球。 在所有可能的 $ (2N)! $ 种启动顺序中,能够收集所有球的有效顺序有多少种?请输出其对 $1,\!000,\!000,\!007$ 的余数。

输入格式

输入通过标准输入给出。 > $ N $ $ x_1 $ $ y_1 $ $ ... $ $ x_{2N} $ $ y_{2N} $

输出格式

输出能够收集所有球的机器启动顺序种数,结果对 $1,\!000,\!000,\!007$ 取余。

说明/提示

### 限制 - $2 \le N \le 10^5$ - $1 \le x_i \le N$ - $1 \le y_i \le N$ - 对于 $i \ne j$,有 $x_i \ne x_j$ 或 $y_i \ne y_j$ ### 样例解释 1 将放置在 $(1,0),\ (2,0)$ 的机器人分别记为 A1, A2,将放置在 $(0,1),\ (0,2)$ 的机器人分别记为 B1, B2。此时,满足条件的启动顺序共有如下 $8$ 种: - A1, B1, A2, B2 - A1, B1, B2, A2 - A1, B2, B1, A2 - A2, B1, A1, B2 - B1, A1, B2, A2 - B1, A1, A2, B2 - B1, A2, A1, B2 - B2, A1, B1, A2 因此输出 $8$。 ### 样例解释 5 如果不存在满足条件的启动顺序,则输出 $0$。 由 ChatGPT 5 翻译