캥거루

한 줄로 놓인 N개의 칸을 캥거루가 cs에서 출발해 cf에서 멈추며 모두 정확히 한 번씩 방문할 때, 매 점프마다 방향을 바꾸는 경로의 수를 세는 문제이다.

보통7동적 계획법조합론아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

정원은 1번부터 NN번까지 번호가 붙은 칸이 한 줄로 늘어선 모양이다. 처음에는 모든 칸에 식물이 있다.

캥거루는 csc_s번 칸에 내려앉아 그 칸의 식물을 먹는다. 그다음부터는 칸에서 칸으로 뛰어다니며 내려앉은 칸의 식물을 먹고, NN개의 칸을 모두 정확히 한 번씩 방문한 뒤 cfc_f번 칸에서 멈춘다. 출발한 칸과 마지막 칸도 방문한 칸에 들어가므로 캥거루는 정확히 N1N-1번 뛴다.

캥거루는 잡히지 않으려고 한 번 뛸 때마다 다음에 뛸 방향을 바꾼다. prevprev번 칸에서 currentcurrent번 칸으로 뛴 다음 currentcurrent번 칸에서 nextnext번 칸으로 뛴다면 아래 두 조건이 성립한다.

  • prev<currentprev < current이면 next<currentnext < current이다.
  • current<prevcurrent < prev이면 current<nextcurrent < next이다.

칸의 수 NN과 출발 칸 csc_s, 마지막 칸 cfc_f가 주어질 때 캥거루가 지나갈 수 있는 서로 다른 경로의 수를 구하라.

입력

첫째 줄에 양의 정수 NN, csc_s, cfc_f가 공백으로 구분되어 주어진다.

  • 2N20002 \le N \le 2000
  • 1csN1 \le c_s \le N
  • 1cfN1 \le c_f \le N
  • cscfc_s \ne c_f
  • 경로는 칸을 방문하는 순서로 구분한다.
  • 규칙을 만족하는 경로가 적어도 하나 있는 입력만 주어진다.
  • 캥거루는 csc_s번 칸에서 어느 방향으로든 처음 뛸 수 있다.

출력

규칙을 만족하는 서로 다른 경로의 수를 10000000071000000007 (109+710^9 + 7)로 나눈 나머지를 한 줄에 출력한다.

힌트

첫 번째 예제에서 캥거루는 2번 칸에서 출발해 3번 칸에서 멈춘다. 규칙을 만족하는 경로는 2 → 1 → 4 → 3과 2 → 4 → 1 → 3, 두 가지다.