#icpc2013autumne. [icpc2013autumn_e]Putter

[icpc2013autumn_e]Putter

问题描述

Fox Ciel正在练习迷你高尔夫,这是一种只用推杆球杆进行的高尔夫游戏。为了提高高尔夫球技,她认为球撞击墙壁的效果很重要。

迷你高尔夫场地位于二维平面上,被NN堵墙组成一个凸多边形。一开始,球放在场地内的(sx,sy)(s_x, s_y)位置。球足够小,可以视为一个点。

Ciel 可以将球朝任意方向射出,并在任何时候停下球。球会沿着直线运动。当球撞到墙壁时,会像镜面反射一样反弹(即入射角等于反射角)。

为了练习,Ciel 决定满足以下条件下进行一次射击:

  • 球精确地撞击场地的每堵墙一次。
  • 球不撞击场地的角落。

计算球撞击墙的可能顺序的数量。


输入

输入包含多个数据集。数据集的数量不超过100个。每个数据集的格式如下。

NN
s_xs\_x s_ys\_y
x_1x\_1 y_1y\_1
:
:
x_Nx\_N y_Ny\_N

第一行包含一个整数NN3N83 \leq N \leq 8)。接下来的一行包含两个整数s_xs\_xs_ys\_y50s_x,s_y50-50 \leq s\_x, s\_y \leq 50),描述球的初始位置的坐标。接下来的NN行中,每行包含两个整数x_ix\_iy_iy\_i50x_i,y_i50-50 \leq x\_i, y\_i \leq 50),描述场地的每个角落的坐标。角落以逆时针顺序给出。你可以假设给定的初始位置(s_x,s_y)(s\_x, s\_y)在场地内,并且场地是凸多边形。

保证存在一个射击方向,对于每个有效的墙壁顺序,满足以下条件:球与场地的角落(x_i,y_i)(x\_i, y\_i)之间的距离始终大于10610^{-6},直到球撞到最后一堵墙。

最后一个数据集后面跟随一行只包含一个零。

输出

对于输入中的每个数据集,在一行中打印墙壁有效顺序的数量。


样例输入

4
0 0
-10 -10
10 -10
10 10
-10 10
0```

### 样例输出

```plain
8```

---

### 资源名称

[JAG Practice Contest for ACM-ICPC Asia Regional 2013](http://acm-icpc.aitea.net/index.php?2013%2FPractice%2F%CC%CF%B5%BC%C3%CF%B6%E8%CD%BD%C1%AA)