折射
refract.cpp/in/out
题目描述
小 Y 十分喜爱光学相关的问题,一天他正在研究折射。
他在平面上放置了 n 个折射装置,希望利用这些装置画出美丽的折线。折线将从某个装置出发,并且在经过一处装置时可以转向,若经过的装置坐标依次为 (x1,y1),(x2,y2),…,(xk,yk),则必须满足:
- ∀j∈(1,k], yj<yj−1
- ∀j∈(2,k], xj−2<xj<xj−1 或 xj−1<xj<xj−2
现在他希望你能告诉他,一共有多少种不同的光线能被他画出来,两种光线不同当且仅当经过的折射装置的集合不同。你只需要告诉他答案对 109+7 取模后的结果。
输入格式
第一行一个正整数 n,表示折射装置的数量。
接下来 n 行,每行两个整数 xi,yi 表示折射装置的坐标。
输出格式
输出一行一个整数,表示答案对 109+7 取模后的结果。
样例输入
样例输出
数据范围
- 对于 10% 的数据:n≤700,1≤xi,yi≤N。
- 对于 20% 的数据:n≤1000,1≤xi,yi≤N。
- 对于 50% 的数据:n≤4000,∣xi∣,∣yi∣≤109。
- 对于 100% 的数据:n≤6000,∣xi∣,∣yi∣≤109。
- 所有数据满足 ∀i=j, xi=xj 且 yi=yj。