3929: part

内存限制:512 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:28 解决:4

题目描述

part.in/out



part(1s,512MB)

【问题描述】

Y受不了寂寞,准备举办一次 DOTA 比赛,为了能让所有人全部都参加比赛,他还特制了一张 DOTA 地图能够支持任意多人打任意多人。

现在问题来了, 怎么把这么多人分成两队?小Y的想法是, 每个人报上自己愿意同队的同学, 接着小Y会按如下要求将所有人分为两队:

对任意同学甲,和同学甲同队的人, 必须都是同学甲愿意同队的同学。
Y希望两队的人数差尽量小,如果这种分组不存在,那么输出“ No solution”。

【输入格式】

1 行为 N,表示一共有多少个学生。
之后 2~N+1 行,每行表示这个学生信任的同学的名单,以 0 结束。

【输出格式】

一行,如果解存在,输出两队的人数( 之间用一个空格隔开),将人数比较小的那
队放在前面。 如果解不存在,输出 No solution。

【样例输入1】

5
3 4 5 0
1 3 5 0
2 1 4 5 0
2 3 5 0
1 2 3 4 0

【样例输出1】

No solution

【样例输入2】

5
2 3 5 0
1 4 5 3 0
1 2 5 0
1 2 3 0
4 3 2 1 0

【样例输出2】

2 3

【数据规模】
30% N<=10;
100% N<=2000。








输入

第 1 行为 N,表示一共有多少个学生。 之后 2~N+1 行,每行表示这个学生信任的同学的名单,以 0 结束。

输出

一行,如果解存在,输出两队的人数( 之间用一个空格隔开),将人数比较小的那 队放在前面。 如果解不存在,输出 No solution。

样例输入 复制


样例输出 复制


来源/分类