#P9723. [EC Final 2022] Chinese Checker

[EC Final 2022] Chinese Checker

Description

棋盘上有 nn 个棋子,你需要求对于当前局面,下一次移动有多少种不同的走法。

一次移动由若干步组成。假设当前要移动的棋子为 aa,在每一步中,首先需要选择另一个棋子 bb 作为跳台,然后将 aa 走到关于 bb 的对称位置(在一次移动中,你无法更改需要移动的棋子 aa。并且在某一步中,棋子 aa 回到此次移动前所在的位置是不被允许的)。

关于跳台 bb 的选择有一些条件:

  • aabb 之间的连线应当平行于棋盘的某条坐标轴。注:棋盘上一共有三条坐标轴,其中一条与水平线平行,并且任意两条坐标轴之间的夹角均为 π3\frac{\pi}{3}

  • aabb 不必相邻。

  • 除了跳台 bb 以外,aa 和其关于 bb 的对称点的连线上不能有其他棋子。

  • 对称点的位置应当落在棋盘上,并且没有被其他棋子占据。

一次移动需要至少走一步。在第一步以后,你可以随时停下来。你可以选择棋盘上任意一个棋子作为移动棋子。请输出有多少种不同的走法。

两种走法不同当且仅当两次移动后所有棋子的位置组成的集合不同,并且棋子之间不可区分。

Input Format

第一行一个整数 TT,表示数据组数。

对于每组数据,第一行一个整数 nn,表示棋子数量。

接下来 nn 行,每行两个整数,表示棋子位置。第一个整数表示棋子所在行,第二个整数表示棋子所在列(棋子在这一行的第几个位置上,注意每一行的起始位置和列数有可能是不一样的)。行列的编号从 11 开始,分别从上到下,从左到右递增。

保证每个棋子的位置互不相同。

Output Format

输出 TT 行,每行一个整数,表示不同走法的数量。

5
1
1 1
2
1 1
2 1
2
9 4
9 6
10
1 1
2 1
2 2
3 1
3 2
3 3
4 1
4 2
4 3
4 4
10
1 1
2 1
2 2
5 7
3 2
3 3
4 1
4 2
4 3
4 4

0
1
2
6
13