#ATarc152d. [ARC152D] Halftree

[ARC152D] Halftree

题目描述

有一个包含 NN 个顶点的无向图,顶点编号为 00N1N-1,初始时没有任何边。你可以任意添加边到这个图中。然后,在你添加完所有边后,使用给定的 KK,执行如下操作恰好一次:

  • 对于你添加的每一条边,设其两端顶点为 u,vu, v,则在顶点 (u+K)modN(u+K)\bmod N(v+K)modN(v+K)\bmod N 之间也添加一条边。即使这两个顶点之间已经有边,也会再添加一条,因此可能会出现重边。

对于给定的 N,KN, K,请你构造一组你需要添加的边,使得经过上述操作后,最终的图是一个树。如果不存在这样的边集,请指出。

输入格式

输入从标准输入读入,格式如下:

NN KK

输出格式

如果存在满足条件的边集,输出边的数量 MM,以及每条边连接的两个顶点 ai,bia_i, b_i,格式如下。要求 0MN0\leq M\leq N,所有输出均为整数。边和顶点的顺序不限。

MM a1a_1 b1b_1 a2a_2 b2b_2 \cdots aMa_M bMb_M

如果不存在满足条件的边集,输出 -1

样例 1

输入

5 2

输出

2
2 3
2 4

样例 2

输入

2 1

输出

-1

样例 3

输入

7 1

输出

3
0 1
2 3
4 5

说明/提示

限制

  • 2N2×1052\leq N\leq 2\times 10^5
  • 1KN11\leq K\leq N-1
  • 输入的所有值均为整数

样例解释 1

执行操作后,会添加边 44-0044-11。因此,最终生成了一棵树,这是一种合法的输出。

样例解释 2

不存在一种方法使得操作后的图为树。

由 ChatGPT 4.1 翻译