#arc152d. [arc152_d]Halftree

[arc152_d]Halftree

题目描述

我们有一个初始时没有边的无向图,有 NN 个顶点,编号从 00N1N-1。你可以随意添加边到这个图中。在添加完边之后,将会执行以下操作一次,使用给定的整数 KK

  • 对于你添加的每条边,设 uuvv 是它的端点,将会添加一条边连接两个顶点 (u+K)(u+K) mathrmmod\\mathrm{mod} NN(v+K)(v+K) mathrmmod\\mathrm{mod} NN。即使这两个顶点之间已经存在边,也会添加这条边,导致出现多重边。

对于给定的 NNKK,找到一组边,使得在执行操作之后,图形成一棵树。如果不存在这样的一组边,则指出这个事实。

约束条件

  • 2leqNleq2times1052\\leq N\\leq 2\\times 10^5
  • 1leqKleqN11\\leq K\\leq N-1
  • 输入中的所有值都是整数。

输入

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

NN KK

输出

如果存在一组满足要求的边,则令 MM 为边的数量,aia_ibib_i 是第 ii 条边连接的两个顶点,并按照以下格式输出解决方案。其中,必须满足 0leqMleqN0\\leq M\\leq N,并且所有的值都必须是整数。可以以任意顺序打印边,以及边的端点。

MM a1a_1 b1b_1 a2a_2 b2b_2 vdots\\vdots aMa_M bMb_M

如果存在多个解决方案,则接受任何一个。

如果不存在满足要求的边,则输出 -1


示例输入 1

5 2

示例输出 1

2
2 3
2 4

操作将添加边 44-0044-11。然后,图将成为一棵树,因此这是一个有效的输出。


示例输入 2

2 1

示例输出 2

-1

无法在操作之后形成一棵树。


示例输入 3

7 1

示例输出 3

3
0 1
2 3
4 5