#iroha2019day4k. [iroha2019_day4_k]世界線

[iroha2019_day4_k]世界線

配点 : 13001300

ストーリー

今度こそ、僕たちは敵を倒した。帰る途中、僕はあることを思い出していた。

世界の裏側には、この世界の基盤の以外にも基盤があった。それらは完全に壊れていて、すでに滅びてしまったのかもしれない。もしかしたら、その世界でも今回のようなことがあって、新しい基盤と世界が作られていったのかもしれない、だとしたら───僕たちはその連鎖を食い止めたんだ。

そんなことを考えていると、後ろからいろはちゃんの声がした。
「せーんぱい!」

問題文

NN つの世界が左右一列に並んでいます。
それぞれの世界は「自然さ」という固有の値を持っており、左からp1,p2,..,pNp_1,p_2,..,p_Nの順番に、11 から NN を並べ替えた数列をなしています。
この数列は、NN のみを要素とする長さ 11 の列をはじめとして、「項をひとつ選んで、その右隣にそれより小さな値を挿入する」という操作の繰り返しによって生まれたことがわかっています。
与えられる数列の生まれる方法が何通り考えられるか求め、109+710^9+7 で割った余りを求めてください。
ただし二つの”数列の生まれる方法”が異なるとは、ある 11 以上 N1N-1 以下の整数 kk が存在して、kk 回目の操作で選択した項と挿入した値の少なくともどちらか一方が異なることを意味します。

制約

  • 入力はすべて整数
  • 1leqNleq2times1051 \\leq N \\leq 2\\times 10^5
  • p1=Np_1 = N
  • p1,p2,...,pNp_1,p_2,...,p_N1,...,N\\{1,...,N\\} の順列

入力

入力は以下の形式で標準入力から与えられる。

NN p1p_1 p2p_2 ... pNp_N

出力

答えを出力してください。


入力例 1


4
4 2 3 1

出力例 1


3

この順列を生み出す操作の方法は以下に示した列の変化を実現する33通りです。
44,34,2,34,2,3,1{4}→{4,3}→{4,2,3}→{4,2,3,1}
44,34,3,14,2,3,1{4}→{4,3}→{4,3,1}→{4,2,3,1}
44,14,3,14,2,3,1{4}→{4,1}→{4,3,1}→{4,2,3,1}

入力例 2


4
4 3 2 1

出力例 2


6

入力例 3


7
7 6 3 4 1 2 5

出力例 3


36

入力例 4


30
30 4 26 15 21 19 14 8 12 7 16 20 2 5 25 13 3 23 18 29 10 27 1 28 9 6 11 24 22 17

出力例 4


321470237

解説

解説