P23537 [AtCoder] KD Tree
NOI
题目描述

Problem Statement

There are N points in a plane, the $i-th (1 \leq i \leq N)$ of which is (i,P_i).
Here, $(P_1,P_2,\cdots,P_N)$ is a permutation of $(1,2,\cdots,N)$.
You can arrange a non-empty set s of points, which is a recursive operation defined as follows.

  • If s contains exactly one point, arranging it creates a sequence composed of just that point.
  • If s contains two or more points, arranging it creates a sequence composed of those points by doing one of the following two operations.
  • Choose any integer x and divide s into two: the set a of points whose X-coordinates are less than x and the set b of the other points.
    Here, neither a nor b should be empty.
    Create a sequence by concatenating the sequence obtained by arranging a and the sequence obtained by arranging b in this order.
  • Choose any integer y and divide s into two: the set a of points whose Y-coordinates are less than y and the set b of the other points.
    Here, neither a nor b should be empty.
    Create a sequence by concatenating the sequence obtained by arranging a and the sequence obtained by arranging b in this order.

Find the number, modulo (10^9+7), of sequences that can be obtained by arranging the set of points ${(1,P_1),(2,P_2),\cdots,(N,P_N)$}.

Input

Input is given from Standard Input in the following format:
N
$P_1 P_2 \cdots P_N$

Output

Print the answer.

Constraints

  • $1 \leq N \leq 30$
  • $(P_1,P_2,\cdots,P_N)$ is a permutation of $(1,2,\cdots,N)$.
  • All values in input are integers.

Sample Input 1

3
3 1 2

Sample Output 1

3

The following three sequences can be obtained.

  • ((1,3),(2,1),(3,2))
  • ((2,1),(3,2),(1,3))
  • ((2,1),(1,3),(3,2))

For example, the sequence ((2,1),(1,3),(3,2)) can be obtained as follows.

  • Arrange the set {(1,3),(2,1),(3,2)} by dividing it to the set of points whose Y-coordinates are less than 2 (={(2,1)}) and the set of the other points (={(1,3),(3,2)}).
  • Arrange the set {(2,1)} to obtain the sequence ((2,1)).
  • Arrange the set {(1,3),(3,2)} by dividing it to the set of points whose X-coordinates are less than 3 and the set of the other points.
  • Arrange the set {(1,3)} to obtain the sequence ((1,3)).
  • Arrange the set {(3,2)} to obtain the sequence ((3,2)).
  • Concatenate the resulting two sequences to obtain the sequence ((1,3),(3,2)).

  • Concatenate the resulting two sequences to obtain the sequence ((2,1),(1,3),(3,2)).

Sample Input 2

5
1 2 3 4 5

Sample Output 2

1

Sample Input 3

10
3 6 4 8 7 2 10 5 9 1

Sample Output 3

1332

Sample Input 4

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

Sample Output 4

641915679

输入格式

见题面 Input 部分

输出格式

见题面 Output 部分

样例输入
3 3 1 2
样例输出
3