캡틴 오브비어스와 래빗맨
시간 제한6초메모리 제한128 MB
숨겨진 지수 결합의 거듭제곱합 p(1)부터 p(k)까지가 소수 모듈로로 주어질 때 숨은 점화식으로 p(k+1)을 구합니다.
문제
"너였구나, 캡틴 오브비어스!" 악당 래빗맨이 소리쳤다. "내 계획을 망치러 왔군!"
"그래, 나다." 캡틴 오브비어스가 답했다.
"그런데 내가 해바라기 거리 625번지에 있을 줄 어떻게 알았지? 내 암호를 풀었나?"
"풀었다. 사흘 전에 너는 해바라기 거리 5번지에서 은행을 털었고, 다음 날 25번지를 폭파했고, 어제는 125번지를 쑥대밭으로 만들었다. 모두 5의 거듭제곱이다. 작년에는 13의 거듭제곱으로 똑같은 짓을 했다. 래빗맨, 너는 피보나치 수를 참 좋아하는군."
"아직 안 끝났어! 내가 산수를 배워서..." 붙잡혀 끌려가며 래빗맨이 외쳤다. "다음에는 아무도 예측하지 못할 거다. 아악! 귀는 잡지 마, 멍청이들아!"
"그럴지도. 하지만 지금 너는 체포됐다." 캡틴이 자랑스럽게 덧붙였다.
불행히도 래빗맨은 그 뒤로 더 고급 산수를 익혔다. 그 내용을 설명하려면 먼저 피보나치 수열과 비슷한 수열 을 정의해야 한다.
래빗맨은 예전 계획을 모두 하나로 합쳤다. 번째 날에는 다음 식으로 정해지는 번지에서 범행을 저지른다.
와 정수 계수 는 고정되어 있다. 캡틴 오브비어스는 는 알아냈지만 계수는 모른다. 가 주어질 때 을 구해서 캡틴을 도와라. 수가 너무 커지지 않도록 모든 계산은 고정된 소수 으로 나눈 나머지에서 한다. 는 으로 나눈 나머지가 서로 다르다고 가정해도 된다. 또 주어진 입력의 답은 항상 유일하다고 가정해도 된다.
입력
첫 줄에 테스트 케이스의 개수 가 주어진다. 각 테스트 케이스는 두 줄로 이루어진다.
첫 줄에는 두 정수 와 이 주어진다 (, , 은 소수). 둘째 줄에는 를 으로 나눈 나머지 개가 공백으로 구분되어 주어진다.
출력
각 테스트 케이스마다 을 으로 나눈 나머지를 한 줄에 하나씩, 입력에 주어진 순서대로 출력한다. 나머지는 이상 이하의 값으로 출력한다.
힌트
첫 번째 테스트 케이스의 수열은 이므로 다음 항은 이다. 두 번째 테스트 케이스의 수열은 이다.