PUBG 是一款多人在线大逃杀游戏。在游戏中,最多一百名玩家跳伞降落到一个岛屿上,搜寻武器和装备以击杀他人,同时避免自己被杀。空投是游戏中的一个关键要素,因为空投通常携带强力武器或大量补给,帮助玩家生存。
游戏中的空投(?)
将游戏战场视为一个二维平面。一个空投刚刚降落在点 $(x_0, y_0)$($x_0$ 和 $y_0$ 均为整数),战场上的所有 $n$ 名玩家(初始位置为 $(x_i, y_i)$,其中 $x_i$ 和 $y_i$ 均为整数)开始按照以下模式向空投移动:
- 如果一名存活玩家在当前时间单位开始时的位置不等于 $(x_0, y_0)$,他将开始下一次移动。
- 假设他当前位于点 $(x, y)$。在下一次移动中,他会考虑四个点:$(x, y-1)$、$(x, y+1)$、$(x-1, y)$ 和 $(x+1, y)$。
- 他会选择这四个点中到空投 $(x_0, y_0)$ 的曼哈顿距离最小的点作为下一次移动的目的地。回想一下,两点 $(x_a, y_a)$ 和 $(x_b, y_b)$ 之间的曼哈顿距离定义为 $|x_a - x_b| + |y_a - y_b|$。
- 如果两个或多个点到空投的曼哈顿距离相同,他将使用以下优先级规则来打破平局:$(x, y-1)$ 的优先级最高,$(x, y+1)$ 的优先级次之,$(x-1, y)$ 的优先级第三,$(x+1, y)$ 的优先级最低。
- 在该时间单位结束时,他到达目的地。
- 如果一名存活玩家在当前时间单位开始时的位置等于 $(x_0, y_0)$,他将继续在空投处补充背包中的补给,并停留在 $(x_0, y_0)$。
但战斗是残酷的,几乎不可能让所有玩家都安全到达空投处。如果两个或多个玩家在 $(x_0, y_0)$ 以外的某点 $(x', y')$ 相遇(其中 $x'$ 和 $y'$ 均为整数),他们会发生战斗并互相击杀,导致无人生还。
BaoBao 是该游戏的忠实粉丝,他对成功到达空投位置的玩家数量很感兴趣,但他不知道 $x_0$ 的值。给定 $y_0$ 的值以及每位玩家的初始位置,请帮助 BaoBao 计算对于所有 $x_0 \in \mathbb{Z}$(其中 $\mathbb{Z}$ 是所有整数的集合,注意 $x_0$ 可以是正数、零或负数),成功到达空投位置的玩家数量的最小值和最大值。
输入格式
输入包含多组测试数据。第一行包含一个整数 $T$,表示测试数据的组数。对于每组测试数据:
第一行包含两个整数 $n$ 和 $y_0$ ($1 \le n \le 10^5$, $1 \le y_0 \le 10^5$),分别表示玩家数量和空投的 $y$ 坐标。
接下来的 $n$ 行,第 $i$ 行包含两个整数 $x_i$ 和 $y_i$ ($1 \le x_i, y_i \le 10^5$),表示第 $i$ 位玩家的初始位置。
保证所有测试数据中 $n$ 的总和不超过 $10^6$,且在每组测试数据中,没有两名玩家拥有相同的初始位置。
输出格式
对于每组测试数据,输出一行,包含两个整数 $p_{\min}$ 和 $p_{\max}$,中间用空格隔开。$p_{\min}$ 表示成功到达空投位置的玩家数量的最小值,$p_{\max}$ 表示最大值。
样例
样例输入 1
3 3 2 1 2 2 1 3 5 3 3 2 1 2 5 4 3 2 3 1 3 4 3
样例输出 1
1 3 0 3 2 2
说明
我们现在解释第一组样例测试数据。
为了得到 $p_{\min} = 1$,应考虑 $x_0 = 3$。下表显示了当 $x_0 = 3$ 时,每位玩家在每个时间单位结束时的位置。
| 时间 | 玩家 1 | 玩家 2 | 玩家 3 |
|---|---|---|---|
| 0 | (1, 2) | (2, 1) | (3, 5) |
| 1 | (2, 2) | (2, 2) | (3, 4) |
| 2 | 被淘汰 | 被淘汰 | (3, 3) |
| 3 | 被淘汰 | 被淘汰 | (3, 2) |
为了得到 $p_{\max} = 3$,应考虑 $x_0 = 2$。下表显示了当 $x_0 = 2$ 时,每位玩家在每个时间单位结束时的位置。
| 时间 | 玩家 1 | 玩家 2 | 玩家 3 |
|---|---|---|---|
| 0 | (1, 2) | (2, 1) | (3, 5) |
| 1 | (2, 2) | (2, 2) | (3, 4) |
| 2 | (2, 2) | (2, 2) | (3, 3) |
| 3 | (2, 2) | (2, 2) | (3, 2) |
| 4 | (2, 2) | (2, 2) | (2, 2) |