Yana、Mino、White 同 Huzz 係最好嘅朋友。
終於完成咗教練嚴苛嘅任務之後,Huzz 贏得咗休息嘅機會。喺一個慵懶嘅下晝,世界彷彿慢咗落嚟,籠罩喺黃昏將至嗰陣溫暖嘅金色薄霧入面。微風輕拂,只係吹動咗穿過大橡樹葉嘅陽光入面翩翩起舞嘅微塵。
喺呢個令人昏昏欲睡、舒適嘅空閒入面,Huzz 喺佢軟綿綿嘅鯊魚公仔入面發現咗一個排列。佢決定同朋友分享呢個排列嚟搵啲樂趣。
Mino 鍾意拆分。佢可以將呢個排列拆分成若干個連續段。
Yana 鍾意交換。佢可以揀一個連續段,並交換入面嘅最大值同最小值。
具體嚟講,佢哋可以按任意順序、進行任意多次以下兩種操作:
- 拆分(split):揀一個長度大過 $1$ 嘅連續段。然後喺佢內部揀一個位置,將佢拆分成兩個相鄰嘅連續段。例如,$(a_i, \dots, a_j)$ 可以被拆分成 $(a_i, \dots, a_k)$ 同 $(a_{k+1}, \dots, a_j)$,其中 $i \le k < j$。
- 交換(swap):揀一個連續段,並交換入面嘅最大值同最小值。
喺進行咗任意多次操作之後,佢哋停止操作,並將所有得到嘅連續段按原本嘅順序合併,從而形成一個新嘅排列。
White 鍾意計數。佢想知道——佢哋總共可以得到幾多個唔同嘅排列?
由於結果可能非常大,你只需要求出答案對 $998\,244\,353$ 取模之後嘅結果。
輸入格式
輸入嘅第一行包含一個整數 $n$($1 \le n \le 500$),代表排列嘅長度。
第二行包含 $n$ 個整數 $a_1, a_2, \cdots, a_n$($1 \le a_i \le n$),代表排列本身。保證 $\{a_n\}$ 係一個排列。
輸出格式
輸出一個整數,代表佢哋可以得到嘅唔同排列嘅數量對 $998\,244\,353$ 取模之後嘅結果。
範例
輸入
4 1 4 2 3
輸出
10
輸入
7 5 1 4 2 6 3 7
輸出
340
提示
喺第一個範例入面,以下係佢哋可以得到嘅所有可能排列:
$(1234), (1243), (1423), (1432), (4123), (4132), (4213), (4231), (4312), (4321)$