There are n armchairs, numbered from 1 to n from left to right. Some armchairs are occupied by people (at most one person per armchair), others are not. The number of occupied armchairs is not greater than n/2.

For some reason, you would like to tell people to move from their armchairs to some other ones. If the i-th armchair is occupied by someone and the j-th armchair is not, you can tell the person sitting in the i-th armchair to move to the j-th armchair. The time it takes a person to move from the i-th armchair to the j-th one is |i - j| minutes. You may perform this operation any number of times, but these operations must be done sequentially, i. e. you cannot tell a person to move until the person you asked to move in the last operation has finished moving to their destination armchair.

You want to achieve the following situation: every seat that was initially occupied must be free. What is the minimum time you need to do it?

Input

The first line contains one integer n (2 ≤ n ≤ 5000) — the number of armchairs.

The second line contains n integers a_1, a_2, ..., a_n (0 ≤ a_i ≤ 1). a_i = 1 means that the i-th armchair is initially occupied, a_i = 0 means that it is initially free. The number of occupied armchairs is at most n/2.

Output

Print one integer — the minimum number of minutes you have to spend to achieve the following situation: every seat that was initially occupied must be free.

Examples

Input


7
1 0 0 1 0 0 1


Output


3


Input


6
1 1 1 0 0 0


Output


9


Input


5
0 0 0 0 0


Output


0

Note

In the first test, you can perform the following sequence:

  1. ask a person to move from armchair 1 to armchair 2, it takes 1 minute; 
  2. ask a person to move from armchair 7 to armchair 6, it takes 1 minute; 
  3. ask a person to move from armchair 4 to armchair 5, it takes 1 minute. 



In the second test, you can perform the following sequence:

  1. ask a person to move from armchair 1 to armchair 4, it takes 3 minutes; 
  2. ask a person to move from armchair 2 to armchair 6, it takes 4 minutes; 
  3. ask a person to move from armchair 4 to armchair 5, it takes 1 minute; 
  4. ask a person to move from armchair 3 to armchair 4, it takes 1 minute. 



In the third test, no seat is occupied so your goal is achieved instantly.
#include <bits/stdc++.h>
using namespace std;

#define S size()
#define EN end()
#define BE begin()
#define LEN length()

#define endl "\n"
#define cnt count
#define in insert
#define er erase
#define fi first
#define se second
#define ld double
#define int long long

#define gcd __gcd
#define mp make_pair
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define bs binary_search
#define np next_permutation

#define si set<int>
#define sc set<char>
#define mll map<int,int>
#define vi vector<int>
#define vc vector<char>
#define pll pair<int,int>
#define vpi vector<pll>
#define msi multiset<int>
#define msc multiset<char>
#define vvi vector<vector<int>>

#define mod1 1000000007
#define mod2 998244353
#define inf (int)1e18
#define eness(x) __builtin_ctzll(x)
#define nhigh(x) __builtin_popcountll(x)
#define PI 3.1415926535897932384626433832

#define iter(s) for(auto it:s)
#define forl(i,n) for(int i=0;i<n;i++)
#define fore(i,n) for(int i=1;i<=n;i++)
#define forn(i,n) for(int i=n-1;i>=0;i--)
#define forls(i,l,r) for(int i=l;i<r;i++)
#define forns(i,l,r) for(int i=r-1;i>=l;i--)

#define all(v) v.BE,v.EN
#define SORT(ar,n) sort(ar,ar+n)
#define rall(v) v.rbegin(),v.rend()
#define RSORT(ar,n) sort(ar,ar+n,greater<int>())

#define pat int n;cin>>n;
#define wq int q;cin>>q;fore(_,q)
#define nokay cout<<(ok?"Yes\n":"No\n");
#define tak(s) string s;cin>>s;int n=s.LEN;
#define pat1 int n;cin>>n;int ar[n];forl(i,n) cin>>ar[i];
#define pat2 int n,k;cin>>n>>k;int ar[n];forl(i,n) cin>>ar[i];
#define fastio ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
 
bool debug_cerr=false;
#define Cerr if(!debug_cerr) {} else cerr
#define cerr_line Cerr<<"\n";
#define deb(x) Cerr<<#x<<"="<<x<<"\n";
#define dar(a,n) Cerr<<#a<<"="<<"{";forl(i,n) Cerr<<a[i]<<",}"[i == n-1];Cerr<<"\n";
#define dvi(v) Cerr<<#v<<"="<<"{";forl(i,v.S) Cerr<<v[i]<<",}"[i==v.S-1];Cerr<<"\n";
/*
inline int eness(x){int s=0;while(!(x&1)){x/=2;s++;} return s;}
inline int nhigh(x){int s=0;while(x){s+=(x&1);x/=2;} return s;}
*/
//**********************************
vi mf,mi;
int POW(int x,int y);
int MI(int x,int mod);
void pre_f(int x,int mod);
void pre_i(int x,int mod);
int C(int x,int y,int mod);
int bpow(int x,int y,int mod);

int POW(int x,int y){
    return bpow(x,y,inf);
}
int MI(int x,int mod=mod1){
    return bpow(x,mod-2,mod);
}
void pre_f(int x,int mod=mod1){
    mf=vi(x+1,1);
    forls(i,2,x+1){
        mf[i]=mf[i-1]*i;
        mf[i]%=mod;
    }
    return;
}
void pre_i(int x,int mod=mod1){
    mi=vi(x+1);
    forl(i,x+1){
        mi[i]=MI(mf[i],mod);
    }
    return;
}
int C(int x,int y,int mod=mod1){
    if(x<y) return 0;
    int n1=mf[x];
    int n2=mi[y];
    int n3=mi[x-y];
    int res=(n1*n2)%mod;
    res=(res*n3)%mod;
    return res;
}
int bpow(int x,int y,int mod=mod1){
    x%=mod;
    int res=1;
    while(y>0){
        if(y&1){
            res=res*x%mod;
        }
        x=x*x%mod;
        y>>=1;
    }
    return res;
}
//**********************************
int32_t main(){
    #ifndef ONLINE_JUDGE
        debug_cerr=true;
        freopen("./input.txt", "r", stdin);
        freopen("./output.txt", "w", stdout);
    #endif
    fastio;
    pat1;
    int x=0;
    forl(i,n){
        x+=ar[i];
    }
    if(x==0){
        cout<<0;
        return 0;
    }
    vi a,b;
    forl(i,n){
        if(ar[i]) a.pb(i);
        else b.pb(i);
    }
    int y=n-x;
    int dp[x][n-x];
    forl(i,x){
        forl(j,n-x){
            dp[i][j]=inf;
        }
    }
    forl(j,n-x){
        dp[0][j]=abs(a[0]-b[j]);
        if(j!=0) dp[0][j]=min(dp[0][j],dp[0][j-1]); 
    }
    fore(i,x-1){
        forls(j,i,y){
            dp[i][j]=min(dp[i][j],dp[i-1][j-1]+abs(a[i]-b[j]));
            if(j!=i){
                dp[i][j]=min(dp[i][j],dp[i][j-1]);
            }
        }
    }
    cout<<dp[x-1][y-1];
}