#U1920FS2. Triangles

Triangles

Farmer John 想要给他的奶牛们建造一个三角形牧场。有 N(3≤N≤105^5)个栅栏柱子分别位于农场的二维平面上不同的点 (X1_1,Y1_1)…(XN_N,YN_N)。他可以选择其中三个点组成三角形牧场,只要三角形有一条边与x 轴平行,且有另一条边与 y 轴平行。

FJ 可以组成的所有可能的牧场的面积之和等于多少?

测试点性质:

  • 测试点 2 满足 N=200。
  • 测试点 3-4 满足 N≤5000。
  • 测试点 5-10 没有额外限制。

输入格式(文件名:triangles.in):

第一行包含N。以下 N 行每行包含两个整数 Xi 和 Yi,均在范围 −104^4…104^4 之内,描述一个栅栏柱子的位置。

输出格式(文件名:triangles.out):

由于面积之和不一定为整数且可能非常大,输出面积之和的两倍模 109^9+7 的余数。

输入样例:

4
0 0
0 1
1 0
1 2

输出样例:

3

栅栏木桩 (0,0)、(1,0) 和 (1,2) 组成了一个面积为 1 的三角形,(0,0)、(1,0) 和 (0,1) 组成了一个面积为 0.5 的三角形。所以答案为 2⋅(1+0.5)=3。