#P16530. [Dapc2024]Kitchens of Königsberg

[Dapc2024]Kitchens of Königsberg

题目背景

公元 1764 年,柯尼斯堡的桥梁已经成为组合数学爱好者的重要旅游景点。旅游宣传册声称,游客能够在走过恰好 kk 座桥后,在附近的街头厨房享用传统肉丸。然而这些厨房还没有建成,因此你需要选择若干城区来安置厨房,使宣传内容成为现实。

题目描述

将柯尼斯堡建模为一个无向多重图:

  • 河流分隔出的城区对应顶点;
  • 桥梁对应无向边;
  • 同一对城区之间可能存在多座桥,因此图中允许重边。

你需要选择一个城区子集,并在这些城区中设置厨房,使得恰好有 kk 条桥至少有一个端点位于所选城区中。

一条桥即使两个端点都位于所选城区中,也只计数一次。

下图展示了第一个样例。若在城区 AABB 设置厨房,则桥 a,b,c,d,e,fa,b,c,d,e,f 共六条桥被覆盖;在 BBCC 设置厨房也是一种合法方案。

第一个样例的柯尼斯堡地图

输入格式

第一行包含三个整数 n,m,kn,m,k,分别表示城区数量、桥梁数量以及需要被覆盖的桥梁数量。

接下来 mm 行,每行包含两个整数 a,ba,b,表示城区 aa 与城区 bb 之间有一座桥。

保证:

  • 1n50001\le n\le 5000
  • 0m500000\le m\le 50000
  • 1k61\le k\le 6
  • 1a<bn1\le a<b\le n
  • 同一对城区之间可以出现多条边。

输出格式

如果存在合法的城区子集,输出子集中的城区数量,随后输出这些城区的编号。城区编号的顺序不限,空白与换行方式不限。

如果不存在合法方案,输出:

impossible

如果存在多种合法方案,可以输出任意一种。

样例 1

输入

4 7 6
1 2
1 2
1 3
1 3
1 4
2 4
3 4

输出

2
1 2

样例 2

输入

7 9 5
1 2
2 3
1 3
1 4
4 5
1 5
1 6
6 7
1 7

输出

3
4 2 3

样例 3

输入

8 7 6
1 2
1 3
1 4
1 5
1 6
1 7
1 8

输出

6
8 7 6 4 3 2

样例 4

输入

5000 0 1

输出

impossible

样例 5

输入

4 6 2
1 2
1 3
1 4
2 3
2 4
3 4

输出

impossible