#P14650. [IATI2017 day2]clubs

[IATI2017 day2]clubs

题目描述

X 城的市民非常喜欢参加各种各样的社团。多年来,城里的社团数量急剧增加,如今已经出现了很多成员完全相同的社团。市政府决定,是时候对社团体系进行一些规范了。

他们决定:城市中的社团系统必须满足如下要求:

(A) 对于任意两位市民,至少存在一个社团,使得这两人中恰有一人是该社团成员,而另一人不是。

一位市民可以参加多个社团,也可以一个社团都不参加。

由于维护每个社团都需要花费,因此社团总数应尽可能少。除此之外,每个社团还需要开会,但城市里没有足够大的会议厅,因此还要尽量减小最大社团的人数(即成员数最多的那个社团的人数)。当然,可能会有多个“最大社团”并列。

设 X 城共有 NN 位市民,编号为 11NN

请编写程序 clubs,求出满足要求 (A) 的最少社团数。同时你还需要构造出每个社团的成员安排,使得在社团总数最少的前提下,最大社团的人数也尽可能少。若有多种解,输出任意一种即可。

输入格式

输入仅一行,一个整数 NN,表示 X 城中的市民人数。

输出格式

第一行输出两个用空格分隔的整数:

  • 满足要求 (A) 所需的最少社团数;
  • 在此基础上,成员数最多的社团的最小可能人数。

接下来,对于你构造出的每个社团,各输出一行。每行第一个数表示该社团成员人数,后面跟着该社团所有成员的编号(顺序任意)。

数据范围

  • 2N1000002 \le N \le 100000

子任务

  • 10%10\% 的测试满足 N15N \le 15
  • 另外 20%20\% 的测试满足 N=2kN = 2^k

评分方式

每个测试点单独计分。

样例

输入

5

输出

3 2
2 2 4
2 3 4
1 5

样例解释

我们可以用最少的 33 个社团满足要求 (A),并且最大社团的人数可以最小到 22

要求 (A) 也可以用如下社团集合满足:

{2,4,5}\{2,4,5\}{3,4}\{3,4\}{5}\{5\}

但这种情况下,最大社团的人数是 33