아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

G-회피 수열

시간 제한1초메모리 제한128 MB

요약
집합의 순열 중에서 인접한 두 원소의 차가 G의 배수가 되지 않는 순열의 개수를 소수로 나눈 나머지를 구한다.
난이도

보통10점 중 7점

유형
동적 계획법, 조합론, 수학
정답자
아직 제출이 없습니다

문제

서로 다른 정수들의 집합 SS와 정수 GG가 주어진다. 다음 두 조건을 모두 만족하는 정수 수열을 G-회피 수열(G-Avoiding Sequence)이라고 한다.

  1. 수열은 SS의 모든 원소를 한 번씩 사용한 순열이다.
  2. 수열에서 인접한 두 원소 AA와 BB에 대해, A−BA - B가 GG로 나누어떨어지지 않는다.

G-회피 수열의 개수를 소수 1,234,567,891로 나눈 나머지를 구하여라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫째 줄에는 집합 SS의 크기 NN (1≤N≤2001 \le N \le 200)과 정수 GG (1≤G≤10001 \le G \le 1000)이 주어진다. 둘째 줄에는 SS의 원소인 NN개의 정수가 주어지며, 각 값은 00 이상 10610^6 이하이다.

입력의 마지막에는 N=G=0N = G = 0인 줄이 주어지며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 G-회피 수열의 개수를 1,234,567,891로 나눈 나머지를 한 줄에 하나씩 출력한다.

예제3

  1. 예제 1

    입력
    4 3
    1 2 3 4
    3 100
    10 110 42
    0 0
    
    예상 출력
    12
    2
    
  2. 예제 2

    입력
    1 5
    7
    0 0
    
    예상 출력
    1
    
  3. 예제 3

    입력
    2 3
    1 2
    0 0
    
    예상 출력
    2