민돌 투어

트램폴린 0은 모든 곳으로 갈 수 있고 트램폴린 i는 거리 A_i 이내의 트램폴린으로만 점프할 수 있을 때, 0에서 출발해 모든 트램폴린을 한 번씩 방문하고 0으로 돌아오는 해밀턴 투어의 수를 구한다.

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

문제

민돌은 세계 최고의 래퍼다. 100개국 투어로 번 돈으로 얼마 전 놀이공원 민돌 파크를 세웠다.

민돌 파크의 명물은 트램펄린 놀이기구다. 00번부터 NN번까지 번호가 붙은 트램펄린 N+1N+1개가 순서대로 놓여 있고, 트램펄린 사이를 뛰어다니며 논다. 00번 트램펄린은 시작 지점이라 여기에서는 다른 모든 트램펄린으로 한 번에 뛰어갈 수 있다. 1iN1 \le i \le Nii번 트램펄린에서는 번호 차이가 A_iA\_i 이하인 트램펄린, 즉 ijA_i|i - j| \le A\_ijj번 트램펄린으로만 한 번에 뛰어갈 수 있다. 안전을 위해 모든 트램펄린에서 00번 트램펄린으로 한 번에 뛰어갈 수 있게 만들었으므로 A_iiA\_i \ge i이다.

민돌의 팬인 민솔이는 민돌 파크에 놀러 가서, 해밀턴 투어를 본뜬 민돌 투어를 해 보기로 했다. 민돌 투어란 00번 트램펄린에서 출발해 나머지 NN개의 트램펄린을 각각 정확히 한 번씩 방문하고 다시 00번 트램펄린으로 돌아오는 것이다. 방문하는 순서가 다르면 서로 다른 투어이므로, 어떤 투어와 그 투어를 거꾸로 뒤집은 투어는 따로 센다.

민솔이는 가능한 민돌 투어를 모두 한 번씩 해 보고 집에 가려 한다. 놀이기구를 몇 번 타야 하는지 구하라.

입력

첫 번째 줄에 00번을 제외한 트램펄린의 개수 NN (1N2000001 \le N \le 200\,000)이 주어진다.

두 번째 줄에 A_1,A_2,,A_NA\_1, A\_2, \dots, A\_N (iA_iNi \le A\_i \le N)이 공백을 사이에 두고 주어진다.

출력

첫 번째 줄에 가능한 민돌 투어의 수를 109+710^9+7로 나눈 나머지를 출력한다.

노트

N=3N = 3이고 A=(1,3,3)A = (1, 3, 3)이면 가능한 투어는 012300 \rightarrow 1 \rightarrow 2 \rightarrow 3 \rightarrow 0, 023100 \rightarrow 2 \rightarrow 3 \rightarrow 1 \rightarrow 0, 031200 \rightarrow 3 \rightarrow 1 \rightarrow 2 \rightarrow 0, 032100 \rightarrow 3 \rightarrow 2 \rightarrow 1 \rightarrow 0의 네 가지다.