만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

거듭제곱 탑

시간 제한2초메모리 제한512 MB

요약
양의 정수 목록이 주어질 때, 값이 매우 커질 수 있는 거듭제곱 탑을 주어진 M으로 나눈 나머지를 각각 구한다.
난이도

어려움10점 중 8점

유형
정수론, 재귀, 수학, 구현
정답자
아직 제출이 없습니다

문제

비어 있지 않은 양의 정수 목록 [x1,x2,…,xN][x_1, x_2, \dots, x_N]이 주어진다. 이 목록에 대응하는 거듭제곱 탑은 다음 수이다.

x1x2⋅⋅⋅xNx_1^{x_2^{\cdot^{\cdot^{\cdot^{x_N}}}}}

지수는 위쪽부터 차례로 계산한다. 즉 x1(x2(⋯xN))x_1^{\left(x_2^{\left(\cdots^{x_N}\right)}\right)}이다.

거듭제곱 탑은 목록이 작은 정수 몇 개로만 이루어져 있어도 매우 큰 수가 된다. 목록 [2,3,2][2, 3, 2]의 거듭제곱 탑은 232=29=5122^{3^2} = 2^9 = 512이고, 목록 [5,2,3,2][5, 2, 3, 2]의 거듭제곱 탑은 55125^{512}로 십진수 358자리이다.

거듭제곱 탑을 주어진 양의 정수 MM으로 나눈 나머지를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 양의 정수 TT와 MM이 주어진다. 이어지는 TT개의 줄에는 각각 양의 정수 NN과 그 뒤로 NN개의 양의 정수 x1,x2,…,xNx_1, x_2, \dots, x_N이 주어진다. 한 줄에서 이웃한 두 수 사이에는 공백이 정확히 하나 있다.

출력

TT개의 줄을 출력한다. kk번째 줄에는 kk번째 목록의 거듭제곱 탑을 MM으로 나눈 나머지를 출력한다.

제한

  • 1≤T≤10001 \le T \le 1000
  • 모든 목록의 길이 NN을 더한 값은 10610^6 이하이다.
  • 1≤xi≤1061 \le x_i \le 10^6
  • 1≤M≤1091 \le M \le 10^9

힌트

M=10M = 10이면 각 거듭제곱 탑의 마지막 자리 숫자를 구하는 셈이다. 예제 입력에 있는 목록은 대부분 거듭제곱 탑이 32비트나 64비트 정수에 담기지 않을 만큼 크다.

예제1

  1. 예제 1

    입력
    9 10
    1 42
    2 2 2
    4 2 2 2 2
    5 2 2 2 2 2
    3 3 4 5
    3 4 3 6
    3 7 6 21
    3 937640 767456 981242
    10 42 1 17 17 17 17 17 17 17 17
    
    예상 출력
    2
    4
    6
    6
    1
    4
    1
    0
    2