#include <iostream>
#include <vector>
#include <queue>
#include <set>
#include <algorithm>

using namespace std;

// Hàm kiểm tra xem dãy đã được sắp xếp tăng dần hay chưa
bool isSorted(const vector<int>& arr) {
    for (size_t i = 1; i < arr.size(); ++i) {
        if (arr[i - 1] > arr[i]) {
            return false;
        }
    }
    return true;
}

// Hàm thực hiện BFS để tìm số bước ít nhất
int minFlipsToSort(vector<int> arr) {
    int n = arr.size();
    vector<int> target(n);
    for (int i = 0; i < n; ++i) {
        target[i] = i + 1;
    }

    // Nếu dãy đã sắp xếp, không cần thao tác nào
    if (arr == target) {
        return 0;
    }

    // Hàng đợi lưu trữ các trạng thái và số bước
    queue<pair<vector<int>, int>> q;
    q.push({arr, 0});

    // Tập hợp lưu các trạng thái đã thăm
    set<vector<int>> visited;
    visited.insert(arr);

    while (!q.empty()) {
        auto [current, steps] = q.front();
        q.pop();

        // Thử tất cả các phép đảo ngược đoạn đầu có thể
        for (int i = 1; i < n; ++i) {
            vector<int> next = current;
            reverse(next.begin(), next.begin() + i + 1);

            // Nếu đạt được dãy mục tiêu, trả về số bước
            if (next == target) {
                return steps + 1;
            }

            // Nếu trạng thái mới chưa được thăm, thêm vào hàng đợi
            if (visited.find(next) == visited.end()) {
                visited.insert(next);
                q.push({next, steps + 1});
            }
        }
    }

    // Trường hợp không tìm thấy (không xảy ra với n ≤ 8)
    return -1;
}

int main() {
    int n;
    cin >> n;
    vector<int> arr(n);
    for (int& x : arr) {
        cin >> x;
    }

    int result = minFlipsToSort(arr);
    cout << result << endl;

    return 0;
}