#P14669. [ICPC 2025 Seoul R] Bay

[ICPC 2025 Seoul R] Bay

Description

我们有一个网格(点阵)图 G(n,n)G(n, n),其中 nn 是沿 xx 轴和 yy 轴的顶点数量,即行数和列数。图 G(n,n)G(n, n) 的顶点按行优先顺序从 11n2n^2 连续编号;从左上角的顶点开始,我们从上到下逐行遍历,在每一行内从左到右遍历。图 1 展示了两个带顶点编号的示例:G(5,5)G(5, 5)G(7,7)G(7, 7)

:::align{center}

图 1. 左:网格图 G(5,5)G(5, 5)。右:G(7,7)G(7, 7)。 :::

我们给定 G(n,n)G(n, n) 的一棵生成树 TT。图 2 左侧展示了 G(7,7)G(7, 7) 的一棵生成树 TT。如果我们添加一条不属于 TTG(n,n)G(n, n) 的边(称为非树边),那么恰好会创建一个简单环。我们将此环所围成的区域定义为一个 。非树边和湾之间存在一一对应关系,即每条非树边恰好对应一个湾。湾的面积定义为该环所围成的 1×11 \times 1 单位方格的数量。图 2 右侧展示了通过分别添加两条非树边 (u,v)(u, v)(p,q)(p, q) 所创建的两个湾(分别用蓝色和橙色标记)。注意,由 (u,v)(u, v)(p,q)(p, q) 创建的两个湾的面积分别为 441212

:::align{center}

图 2. 网格 G(7,7)G(7, 7) 的一棵生成树 TT 以及由 (u,v)(u, v)(p,q)(p, q) 创建的两个湾。 :::

给定网格图 G(n,n)G(n, n) 的一棵生成树 TT 和一个正整数 SS,请编写一个程序,找出所有创建面积为 SS 的湾的非树边,并输出其中按字典序排列的第一条非树边。

Input Format

你的程序需要从标准输入读取数据。输入的第一行包含两个整数 nnSS,其中 5n3005 \le n \le 300 对应于 G(n,n)G(n, n),且 1S(n1)21 \le S \le (n-1)^2。接下来的 n21n^2 - 1 行每行包含两个不同的整数 uuvv,表示生成树 TT 的一条边 (u,v)(u, v),其中 1u<vn21 \le u < v \le n^2

Output Format

你的程序需要向标准输出写入数据。第一行应输出创建面积为 SS 的湾的非树边的数量。第二行应输出两个不同的整数 uuvv (u<vu < v),表示在那些创建面积为 SS 的湾的非树边中,按字典序排列的第一条边 (u,v)(u, v)。两条边 (a,b)(a, b)(c,d)(c, d) 的字典序定义如下:当且仅当 a<ca < c 或 (a=ca = cb<db < d) 时,(a,b)(a, b) 排在 (c,d)(c, d) 之前。如果没有创建面积为 SS 的湾的非树边,则第一行打印 "0",第二行打印两个零 "0 0"。

图 3 展示了两个 n=5n = 5 的网格图的生成树,它们对应于样例输入和输出。

:::align{center}

图 3. G(5,5)G(5, 5) 的两棵生成树,分别对应样例 1 和样例 2。 :::

5 2
1 2
2 3
3 8
4 5
5 10
6 11
7 8
7 12
8 13
9 10
9 14
11 12
11 16
12 17
13 14
14 15
15 20
16 21
17 18
17 22
18 23
19 20
19 24
24 25
2
13 18
5 2
1 2
2 3
3 8
4 5
5 10
6 11
7 8
7 12
8 13
9 10
9 14
11 12
13 14
14 15
15 20
16 17
16 21
17 18
17 22
18 23
19 20
19 24
23 24
24 25
0
0 0

Hint

翻译由 DeepSeek V3 完成