Constellation(星座) - joi2012-day2

出典: 第11回日本情報オリンピック 日本代表選手選考会

時間制限: 1秒

メモリ制限: 64MB

JOI 君は星空の観察が大好きな少年である.毎晩のように星空を観察しては,それぞれの星がどの星座に属するのかを調べて楽しんでいる.

ある晩,JOI 君がいつものように星空を観察していると,見たことのない星を N 個発見した.これらの星がどの星座に属するのかが気になった JOI 君は,夜空を写真に撮り,翌日図書館でこれらの星について調べてみた.すると,これらの星はすべて星座 A か星座 B のどちらかに属することと,これらの星のうちいくつかの星がどちらに属しているかがわかった.だが,その他の星については,どちらの星座に属しているかがわからなかった.JOI 君は,星座 A と星座 B を構成する星の集合として考えられるものが何通りあるかが気になった.なお,星の大きさは十分小さいので,点とみなしてよい.

ただし,星座とは,写真上で 1 つ以上の星と,星 2 つを結ぶ線分いくつかからなり,以下の条件を満たす.星 1 つのみからなるものも星座とみなすことに注意せよ.

また,JOI 君の発見した星は,以下の条件を満たす.

課題

N 個の星の情報が与えられたとき,星座 A と星座 B を構成する星の集合として考えられるものの総数を 1\,000\,000\,007\,(=10^9+7) で割った余りを求めるプログラムを作成せよ.

制限

2 \leqq N \leqq 100\,000 JOI 君の発見した星の数
0 \leqq X_i \leqq 10^9, 0 \leqq Y_i \leqq 10^9 i の写真上での座標

入力

標準入力から以下の入力を読み込め.

出力

星座 A と星座 B を構成する星の集合として考えられるものの総数を 1\,000\,000\,007\,(=10^9+7) で割った余りを 1 行で出力せよ.そのような星の集合が存在しない場合,0 を出力せよ.

採点基準

入出力例

入力例1 出力例1
4
1 1 1
2 1 1
1 2 0
2 2 2
2

この入力例は,次の図に対応している.ただし,黒い点は星座 A に属する星を,白い点は星座 B に属する星を,×印はどちらの星座に属するかわからない星を,それぞれ表す.

[Constellation img1]

この入力に対する答えは,星 3 が星座 A に属する場合と星座 B に属する場合の 2 通りであり,それぞれの場合の星座の図の一例を以下に示す.星 3 が星座 A に属する場合,星座 A の線分の引き方は何通りか考えられるが,それらすべてをまとめて 1 通りと数えることに注意せよ.

[Constellation img2]