부분집합 합의 피보나치 수

서로 다른 N개 수의 집합에서 크기 K인 모든 부분집합 s에 대해 F[sum(s)]의 합을 99991로 나눈 나머지를 구한다.

어려움8조합론동적 계획법수학정수론아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

피보나치 수는 다음과 같이 정의한다.

  • F[1]=1F[1] = 1
  • F[2]=1F[2] = 1
  • F[N]=F[N1]+F[N2]F[N] = F[N-1] + F[N-2] (N3N \ge 3)

원소가 NN개인 집합 SS와 정수 KK가 주어진다. 크기가 KKSS의 부분집합 ss마다 원소의 합 sum(s)\mathrm{sum}(s)를 구한 다음, F[sum(s)]F[\mathrm{sum}(s)]를 모두 더한 값을 구하는 프로그램을 작성하시오.

예를 들어 S={1,2,3,4,5}S = \{1, 2, 3, 4, 5\}이고 K=2K = 2이면 크기가 2인 부분집합은 {1,2}\{1, 2\}, {1,3}\{1, 3\}, {1,4}\{1, 4\}, {1,5}\{1, 5\}, {2,3}\{2, 3\}, {2,4}\{2, 4\}, {2,5}\{2, 5\}, {3,4}\{3, 4\}, {3,5}\{3, 5\}, {4,5}\{4, 5\}이다. 각 부분집합의 합은 차례대로 3, 4, 5, 6, 5, 6, 7, 7, 8, 9이므로 답은 F[3]+F[4]+F[5]+F[6]+F[5]+F[6]+F[7]+F[7]+F[8]+F[9]=112F[3] + F[4] + F[5] + F[6] + F[5] + F[6] + F[7] + F[7] + F[8] + F[9] = 112이다.

입력

첫째 줄에 NNKK가 주어진다. (1N500001 \le N \le 50\,000, 1KN1 \le K \le N)

둘째 줄에 집합 SS의 원소 NN개가 공백으로 구분되어 주어진다. 각 원소는 10910^9 이하의 자연수이고, 서로 다르다.

출력

크기가 KK인 부분집합 ss마다 구한 F[sum(s)]F[\mathrm{sum}(s)]의 합을 99991로 나눈 나머지를 첫째 줄에 출력한다.