問題文
セパくんはこれから N 箇所の街を訪問します。訪問する順番は自由ですが、移動距離を最短にしたいです。
i 番目の町は座標 (Xi,Yi) にあり、セパくんは最初に原点 (0,0) から出発し、全ての街を訪問した後原点に帰る予定です。
セパくんは上下左右いずれかに 1 ずつ進むことができます。
移動距離が最短である訪問の仕方は何通りか求めてください。
ただし、答えは非常に大きくなる可能性があるので 109+7 で割った余りを出力してください。
なお、訪問の仕方は、
(x1,y1),(x2,y2),...,(xk,yk)
という格子点を順にたどったものと
(x1′,y1′),(x2′,y2′),...,(xk′,yk′)
という格子点を順にたどったものについて、
(xi,yi)=(xi′,yi′) となる i が存在する時、
これらは異なるとします。
制約
- 入力は全て整数で与えられる
- 1≤N≤8
- −105≤Xi,Yi≤105
- (Xi,Yi)=(0,0)
- i=j なら (Xi,Yi)=(Xj,Yj)
入力
入力は以下の形式で与えられます。
出力
計算結果を一行に出力してください。
サンプル
訪問の仕方は、
(0,0)→(0,1)→(1,1)→(0,1)→(0,0)
(0,0)→(0,1)→(1,1)→(1,0)→(0,0)
(0,0)→(1,0)→(1,1)→(0,1)→(0,0)
(0,0)→(1,0)→(1,1)→(1,0)→(0,0)
の 4 通りです。
入力2
8
80322 -49123
-37059 54115
-72232 38756
-64835 55301
-98195 47165
60394 78898
53452 91985
25483 7030
109+7 で割った余りを出力することに注意してください。