格点染色
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

n 个格子,当你位于第 x 个格子时,你可以进行以下两种操作:
  1. 走到第 个格子。
  2.  如果第 x 个格子未被染上色,把第 x 个格子染成黑色,然后跳到第 a_x 个格子。
现在你要从第 1 个格子开始,回答把所有格子染成黑色的顺序有多少种。
答案对 取模。

输入描述:

第一行一个正整数 n 
第二行包括 n 个整数,第 i 个数表示 。保证 a_i 单调不降。

输出描述:

输出一行包括一个整数,表示答案对  取模后的值。
示例1

输入

复制
3
1 1 2

输出

复制
4

说明

样例中以下四种顺序是可能出现的:
[1,2,3][1,3,2][2,1,3][3,2,1]