201 패턴을 피하는 상승 수열
시간 제한2초메모리 제한512 MB
길이 n인 ascent sequence 가운데 패턴 201을 피하는 것의 개수를 소수 p로 나눈 나머지를 구한다. n은 최대 500이다.
문제
음이 아닌 정수로 이루어진 수열 을 생각하자. 수열의 상승은 인접한 두 원소 중에서 인덱스가 큰 쪽의 값이 더 큰 쌍이다. 예를 들어 수열 에는 두 개의 상승이 있다. 에서 로 가는 것과 에서 으로 가는 것이다. 수열의 처음 개 원소에 있는 상승의 개수를 라고 쓰자. 위의 예에서 , , , , 이다.
수열 가 상승 수열이라는 것은 이고, 모든 에 대해 부등식 이 성립한다는 뜻이다. 예를 들어 수열 은 이고 이므로 상승 수열이 아니다. 반면 수열 은 , , , 이므로 상승 수열이다.
음이 아닌 정수로 이루어진 수열 이 201 패턴을 피한다는 것은 이고 인 , , 가 존재하지 않는다는 뜻이다. 예를 들어 수열 은 201 패턴을 피하지만, 는 , , 에 대해 이므로 201 패턴을 피하지 않는다.
두 정수 과 가 주어진다. 201 패턴을 피하는 길이 의 상승 수열의 개수를 구하여 로 나눈 나머지를 출력하자.
입력
입력은 한 줄이며 두 정수 과 가 주어진다. (; ; 는 소수)
출력
201 패턴을 피하는 길이 의 상승 수열의 개수를 로 나눈 나머지를 한 줄에 출력한다.
힌트
첫 번째 예제에서 201 패턴을 피하는 길이 3의 상승 수열은 다섯 개이다. , , , , .
두 번째 예제에서 길이 5의 상승 수열은 53개이며, 을 제외한 나머지 모두가 201 패턴을 피한다.