레페제
시간 제한2초메모리 제한1024 MB
볼록 다각형의 삼각분할에서 대각선을 뒤집는 연산을 반복할 때, 정점 x의 부채꼴 분할까지 필요한 최소 연산 수와 최단 순서의 개수를 구합니다.
문제
꼬마 프란은 정다각형 모양의 나무 틀을 선물로 받았다. 다각형의 꼭짓점이 개이므로, 가능한 대각선마다 하나씩 맞는 나무 막대 개도 함께 받았다. 꼭짓점에는 반시계 방향으로 1부터 까지 번호가 붙어 있다.
프란은 처음에 틀 안에 막대 개를 놓았다. 각 막대는 이웃하지 않은 두 꼭짓점을 잇고, 어떤 두 막대도 서로 교차하지 않는다. 즉, 막대들이 삼각분할을 이룬다.
프란은 다음 두 단계로 이루어진 연산으로 이 배치를 바꾸며 논다.
- 막대 하나를 제거한다.
- 새 막대를 하나 추가해서 새로운 삼각분할을 만든다.
연산은 순서쌍 로 나타낸다. 이는 꼭짓점 와 를 잇는 막대를 제거하고, 꼭짓점 와 를 잇는 막대를 추가했다는 뜻이다.
프란은 현재 삼각분할을 꼭짓점 에 대한 부채 삼각분할로 바꾸려면 연산이 몇 번 필요한지, 그리고 그렇게 하는 방법이 몇 가지인지 궁금해한다. 꼭짓점 에 대한 부채 삼각분할은 모든 대각선이 공통 끝점 를 갖는 삼각분할이다.
필요한 최소 연산 횟수를 이라고 하자. 번의 연산으로 목표 분할에 도달하는 연산 수열 과 을 생각한다. 어떤 인덱스 에 대해 이면 두 수열은 다르다. 이런 수열의 개수를 로 나눈 나머지로 구한다.
입력
첫 줄에 꼭짓점 수 과 이벤트 수 가 주어진다 (, ).
다음 개 줄에는 번째 막대가 잇는 꼭짓점 번호 와 가 주어진다 ().
다음 개 줄은 이벤트 종류 ()로 시작한다. 이면 정수 ()가 이어지며, 그 시점에 연산 를 수행한다. 이 연산은 가능한 연산임이 보장된다. 이면 정수 ()가 이어지며, 현재 삼각분할에 대해 꼭짓점 에 대한 부채 삼각분할의 정보를 구한다.
출력
인 이벤트마다 입력 순서대로 한 줄에 두 정수를 출력한다. 첫 번째는 필요한 최소 연산 횟수이고, 두 번째는 그 횟수로 목표 삼각분할에 도달하는 방법의 수를 로 나눈 나머지이다.