Problem:
Reverse Sort

1 ∼ NまでのN個の数字の順列A1, A2, ……, ANが与えられる。
この順列に対して区間[i, j](1 ≤ i ≤ j ≤ N)の数字の順序を逆順にする操作reverse(i, j)を行うことが出来る。
例えば、[1, 2, 3, 4, 5]に対してreverse(2, 4)を適用すると[1, 4, 3, 2, 5]となる。
最小で何回の操作を行えば順列を昇順にソートされた状態にすることが出来るか計算せよ。

Input

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

N
A1 A2 …… AN

Constraints

Nは整数である

2 ≤ N ≤ 10

Output

問題の解を1行に出力せよ。

Sample Input 1

5
1 4 3 5 2

Output for the Sample Input 1

2

reverse(4,5):1 4 3 2 5

reverse(2,4):1 2 3 4 5

のようにすればよい。

Sample Input 2

5
3 1 5 2 4

Output for the Sample Input 2

4

例えば

reverse(1,2):1 3 5 2 4

reverse(3,5):1 3 4 2 5

reverse(2,4):1 2 4 3 5

reverse(3,4):1 2 3 4 5

のようにすればよい。

Sample Input 3

3
1 2 3

Output for the Sample Input 3

0

Sample Input 4

10
3 1 5 2 7 4 9 6 10 8

Output for the Sample Input 4

9

Solution in JAVA (judge verdict: Wrong Answer)

public class Main{
  public void run(java.io.InputStream in, java.io.PrintStream out){
    java.util.Scanner sc = new java.util.Scanner(in);
    int n, i, j, tmp;
    int[] a, b;

    n = sc.nextInt();
    a = new int[n]; b = new int[n];
    for(i = 0;i < n;i++){
      a[i] = sc.nextInt(); b[i] = a[i];
    }
    for(i = 0;i < n - 1;i++)for(j = 0;j < n - 1 - i;j++)if(b[j] > b[j + 1]){
      tmp = b[j]; b[j] = b[j + 1]; b[j + 1] = tmp;
    }
    out.println(solve(n, a, b));

    sc.close();
  }
  private static int solve(int n, int[] a, int[] b){
    int i, l, r, min, max, count, res1, res2;
    boolean x, y;
    l = 0; r = n - 1; count = 0; x = true; y = true;
    for(i = 0;i < n;i++){
      if(a[i] == b[i])count++;
      if(a[i] == b[i] && x)l++;
      else x = false;
      if(a[n - 1 - i] == b[n - 1 - i] && y)r--;
      else y = false;
    }
    if(count == n)return 0;

    min = l; max = l;
    for(i = l;i <= r;i++){
      if(a[min] > a[i])min = i;
      if(a[max] < a[i])max = i;
    }
    reverse(a, l, min);
    res1 = solve(n, a, b);
    reverse(a, l, min);
    reverse(a, max, r);
    res2 = solve(n, a, b);
    reverse(a, max, r);
    if(res1 > res2)res1 = res2;
    return res1 + 1;
  }
  private static void reverse(int[] a, int l, int r){
    int i, tmp;
    for(i = 0;i < (r - l + 1) / 2;i++){
      tmp = a[l + i]; a[l + i] = a[r - i]; a[r - i] = tmp;
    }
    return;
  }
  public static void main(String[] args){
    (new Main()).run(System.in, System.out);
  }
}