퍼터
시간 제한8초메모리 제한512 MB
볼록 다각형 안에서 쏜 공이 벽에 튕기면서 모든 벽을 정확히 한 번씩 맞히는 순서를 셉니다.
문제
폭스 시엘은 퍼터 하나만 쓰는 골프인 미니 골프를 연습한다. 실력을 키우려면 공을 벽에 얼마나 잘 튕기느냐가 중요하다고 시엘은 생각한다.
미니 골프장은 2차원 평면 위에 있고, 볼록다각형을 이루는 개의 벽으로 둘러싸여 있다. 처음에 공은 경기장 안쪽의 점 에 놓여 있다. 공은 충분히 작아서 점으로 본다.
시엘은 공을 어느 방향으로든 칠 수 있고, 원하는 순간에 공을 멈출 수 있다. 공은 직선으로 움직인다. 공이 벽에 부딪히면 거울처럼 반사한다. 즉, 입사각과 반사각이 같다.
시엘은 다음 두 조건을 만족하는 샷을 한 번 친다.
- 공이 경기장의 각 벽에 정확히 한 번씩 부딪힌다.
- 공이 경기장의 꼭짓점에는 부딪히지 않는다.
공이 벽에 부딪히는 순서로 가능한 것이 몇 가지인지 세어라.
입력
입력은 여러 개의 데이터 세트로 이루어진다. 데이터 세트의 개수는 100개를 넘지 않는다. 각 데이터 세트의 형식은 다음과 같다.
N
sx sy
x1 y1
:
:
xN yN
첫 줄에 정수 ()이 주어진다. 둘째 줄에 공의 처음 위치를 나타내는 두 정수 와 ()가 주어진다. 이어지는 개의 줄에는 경기장 꼭짓점의 좌표를 나타내는 두 정수 와 ()가 주어진다. 꼭짓점은 반시계 방향으로 주어진다. 처음 위치 는 경기장 안쪽에 있고, 경기장은 볼록하다.
가능한 벽의 순서마다, 공이 마지막 벽에 부딪힐 때까지 공과 경기장의 꼭짓점 사이의 거리가 항상 보다 큰 발사 방향이 존재함이 보장된다.
마지막 데이터 세트 다음 줄에는 0 하나만 주어진다.
출력
각 데이터 세트마다 가능한 벽의 순서의 개수를 한 줄에 출력한다.