CF300B Coach

题目描述

一位编程教练有 $n$ 名学生要教。我们知道 $n$ 可以被 $3$ 整除。假设所有学生的编号为 $1$ 到 $n$。 在大学编程锦标赛之前,教练希望将所有学生分成每组三人的小组。已知有一些学生对,希望和某些同学分在同一组。此外,如果第 $i$ 个学生希望和第 $j$ 个同组,则第 $j$ 个学生也希望和第 $i$ 个同组。为了让小组取得好成绩,教练要求:若第 $i$ 个学生希望与第 $j$ 个同组,则他们必须在同一组。同时,显然每个学生必须恰好在一支小组中。 请帮助教练按照他的期望将学生分组。

输入格式

输入的第一行为两个整数 $n$ 和 $m$,其中 $3 \leq n \leq 48$,$n$ 可以被 $3$ 整除。接下来 $m$ 行,每行包含一对整数 $a_i, b_i$ $(1 \leq a_i < b_i \leq n)$,表示编号为 $a_i$ 和 $b_i$ 的学生希望分在同一组。 保证 $n$ 可以被 $3$ 整除。保证每对 $a_i, b_i$ 在输入中最多出现一次。

输出格式

如果无法完成分组,输出 $-1$。否则,输出 $n/3$ 行,每行输出三个整数 $x_i, y_i, z_i$ $(1 \leq x_i, y_i, z_i \leq n)$,表示第 $i$ 组的成员编号。 如果有多种分组方案,可以输出任意一种。

说明/提示

由 ChatGPT 5 翻译