세계 일주 항공권
시간 제한5초메모리 제한512 MB
순서가 정해진 쿠폰의 부분수열로 ZAG에서 시작하고 ZAG에서 끝나는 서로 다른 도시 열의 개수를 10^9+7로 나눈 나머지를 구한다.
문제
미르코가 경품 행사에서 세계 일주 항공권을 받았다. 이 항공권은 장의 탑승 쿠폰 으로 이루어져 있고, 번째 쿠폰으로는 출발 도시 에서 도착 도시 로 가는 직항 한 편을 탈 수 있다. 흔한 세계 일주 항공권과 달리, 한 쿠폰의 도착 도시가 다음 쿠폰의 출발 도시와 같을 필요는 없다. 미르코는 각 쿠폰을 최대 한 번만 쓸 수 있고, 아예 쓰지 않아도 된다. 다만 쿠폰은 원래 순서대로만 쓸 수 있다. 즉 인 쿠폰 와 를 모두 쓴다면 를 보다 먼저 써야 한다.
여정은 여행에서 방문한 도시를 순서대로 나열한 수열이고, 같은 도시가 여러 번 나올 수도 있다. 여정의 첫 도시와 마지막 도시는 미르코가 사는 자그레브여야 하며, 여정에는 다른 도시가 적어도 하나 더 있어야 한다. 도시가 같은 순서로 나열되면 미르코가 서로 다른 쿠폰을 써서 날아갔더라도 같은 여정이다. 미르코가 이 항공권으로 만들 수 있는 서로 다른 여정의 수를 이라고 하자. 을 으로 나눈 나머지를 구하시오.
입력
첫 줄에 탑승 쿠폰의 수를 나타내는 자연수 ()이 주어진다.
이어지는 개 줄 중 번째 줄에는 번째 쿠폰의 출발 도시 코드 와 도착 도시 코드 가 주어지고, 두 코드는 서로 다르다. 모든 도시 코드는 알파벳 대문자 정확히 세 개로 이루어진 문자열이다. 자그레브의 코드는 ZAG이다.
출력
서로 다른 여정의 수를 으로 나눈 나머지를 출력한다.
힌트
첫 번째 예제에서 가능한 여정은 ZAG-SPU-ZAG과 ZAG-SPU-ZAG-SPU-ZAG 두 가지다. 앞의 여정은 쿠폰 두 장을 고르는 서로 다른 방법 세 가지로 만들 수 있지만 한 번만 센다.