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)$