#include <iostream>
using namespace std;

int flag;
int flag1;

void MaxI(int a[], int mid, int lastp, int lastn[], int len) {
    for (int i = lastp + 1; i < mid; i++) {
        if (a[i] < a[mid] && a[i] > lastn[lastn[0]]) {
            len++;
            lastn[++lastn[0]] = a[i];
            if (len > flag)
                flag = len;
            MaxI(a, mid, i, lastn, len);
            len--;
            lastn[0]--;
        }
    }
}//mid点左边最大增序列的长度
void MinI(int a[], int mid, int lastp, int lastn[], int len) {
    for (int i = lastp - 1; i > mid; i--) {
        if (a[i] < a[mid] && a[i] > lastn[lastn[0]]) {
            len++;
            lastn[++lastn[0]] = a[i];
            if (len > flag1)
                flag1 = len;
            MinI(a, mid, i, lastn, len);
            len--;
            lastn[0]--;
        }
    }
}//mid点右边最大减序列的长度
int M(int a[], int mid, int len) {
    flag = 0;
    int lastn[len];
    lastn[0] = 0;
    MaxI(a, mid, -1, lastn, 0);
    flag1 = 0;
    int lastm[len];
    lastm[0] = 0;
    MinI(a, mid, len, lastm, 0);
    return flag + flag1 + 1;
}
int main() {
    int a;
    while (cin >> a) { // 注意 while 处理多个 case
        int b[a];
        for (int i = 0; i < a; i++)
            cin >> b[i];
        int c,d=0;
        for (int i = 0; i < a; i++) {
            c= M(b, i, a);
            if(c>d)
            d=c;
        }
        cout << a-d << endl;

    }
}
// 64 位输出请用 printf("%lld")