#abc226d. [abc226_d]Teleportation

[abc226_d]Teleportation

问题描述

AtCoder 共有 NN 个城镇,编号为 1,2,ldots,N1,2,\\ldots,N。城镇 ii 位于 (xi,yi)(x_i, y_i),并且没有两个不同的城镇位于相同的坐标上。

该国有一种传送术。传送术由一对整数 (a,b)(a,b) 表示,施放传送术 (a,b)(a, b) 在坐标 (x,y)(x, y) 处将你传送到 (x+a,y+b)(x+a, y+b)

Snuke 是一名伟大的魔法师,可以针对他选择的任意整数对 (a,b)(a, b) 学习传送术 (a,b)(a, b)。他可以学习的传送术数量也是无限的。
为了能够使用传送术在城镇之间旅行,他决定学习一些传送术,以便对于每对不同的城镇 (i,j)(i, j) 都可以做到以下事情。

  • 从城镇 ii 到城镇 jj选择一个已经学会的传送术,并重复使用选择的传送术

Snuke 至少需要学习多少个传送术才能实现上述目标?

约束条件

  • 2leqNleq5002 \\leq N \\leq 500
  • 0leqxileq1090 \\leq x_i \\leq 10^9 (1leqileqN)(1 \\leq i \\leq N)
  • 0leqyileq1090 \\leq y_i \\leq 10^9 (1leqileqN)(1 \\leq i \\leq N)
  • 如果 ineqji \\neq j,则 (xi,yi)neq(xj,yj)(x_i, y_i) \\neq (x_j, y_j)

输入

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

NN x1x_1 y1y_1 x2x_2 y2y_2 \vdots xNx_N yNy_N

输出

打印 Snuke 需要学习的传送术的最少数量。


示例输入 1

3
1 2
3 6
7 4

示例输出 1

6

下图显示了城镇的位置(以及四个角的坐标)。

image

如果 Snuke 学习以下六种传送术,则对于每一对不同的 (i,j)(i,j)ineqji \\neq j),他可以使用其中一种传送术一次,实现他的目标。

  • (2,4)(2, 4)
  • (2,4)(-2, -4)
  • (4,2)(4, -2)
  • (4,2)(-4, 2)
  • (6,2)(-6, -2)
  • (6,2)(6, 2)

还有另一种选择是学习以下六种传送术。在这种情况下,对于每对不同的 (i,j)(i,j)ineqji \\neq j),他可以使用其中一种传送术两次,实现他的目标。

  • (1,2)(1, 2)
  • (1,2)(-1, -2)
  • (2,1)(2, -1)
  • (2,1)(-2, 1)
  • (3,1)(-3, -1)
  • (3,1)(3, 1)

没有少于六种传送术组合可以实现目标,因此我们应该打印 66


示例输入 2

3
1 2
2 2
4 2

示例输出 2

2

最佳选择是学习以下两种传送术:

  • (1,0)(1, 0)
  • (1,0)(-1, 0)

示例输入 3

4
0 0
0 1000000000
1000000000 0
1000000000 1000000000

示例输出 3

8