校园里的计算机科学图书馆需要暂时关闭进行翻新,你被指派负责图书馆所有书籍的存储工作。在从被选中的震惊以及校园里竟然真的有计算机科学图书馆的震惊中恢复过来后,你开始着手工作。书籍已经被装入重量相同的相同箱子中。为了防止储藏室被淹,你想把这些箱子堆放在木制托盘上,但你遇到了一个小问题:你不知道在托盘因重量而坍塌之前,最多可以堆放多少个箱子。我们将托盘上可以放置的最大箱子数量称为“箱子上限”。
你可以按部就班地在托盘上放一个箱子,然后放第二个、第三个,以此类推,直到托盘损坏,但这似乎非常耗时(而且会导致一个非常无聊的竞赛题目)。但如果你有一个或多个托盘可以进行实验,你或许能更快地确定箱子上限。例如,假设由于箱子的大小和储藏室天花板的高度,任何堆叠中的最大箱子数量为 $3$。如果只有一个托盘,你可以先尝试放一个箱子。如果托盘坍塌了,好吧,你需要出去找一些更结实的托盘。如果托盘没塌,你可以尝试放第二个箱子。如果此时托盘坍塌了,你就知道箱子上限是 $1$;否则,你尝试放第三个箱子,这将让你知道箱子上限是 $2$(如果托盘坍塌)还是 $3$(如果托盘没有坍塌)。这种方法最多需要三次不同的实验。然而,如果你有两个托盘,你最多只需要两次实验就能确定箱子上限:首先,你在第一个托盘上尝试放两个箱子;如果它没塌,你再尝试放第三个箱子,这将让你知道箱子上限是 $2$ 还是 $3$。如果第一个托盘在第一次实验中坍塌了,你就拿出第二个托盘并在上面放一个箱子。该实验的结果会告诉你箱子上限是 $1$ 还是 $0$。
你不确定储藏室的高度(这决定了可能堆叠的最大箱子数量)或你手头有多少个托盘可供实验。你想要知道的是,在给定这些信息的情况下,采用最优策略时,你需要进行的最坏情况下的最少实验次数是多少。真可惜你没能早点了解计算机科学图书馆——也许书里会有什么东西能帮到你。
输入格式
输入包含一行,包含两个正整数 $n$ 和 $m$ ($n \le 5\,000, m \le 20$),其中 $n$ 表示可以堆叠的最大箱子数量(无论托盘是否会因此坍塌),$m$ 是可用于实验的托盘数量。
输出格式
输出最优策略所需的最坏情况下的最少实验次数,随后输出第一次实验中应使用的箱子数量。如果第一次实验中可以使用的箱子数量是一个范围,则显示该范围的最小值和最大值,中间用连字符分隔;如果只有一个这样的数字,则直接输出该数字。
样例
样例输入 1
3 1
样例输出 1
3 1
样例输入 2
3 2
样例输出 2
2 2
样例输入 3
4 2
样例输出 3
3 1-3