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"
#define ll long long
#define int ll
#define chl_jldi ios_base::sync_with_stdio(false); cin.tie(0)
#define vi vector<int>
#define vll vector<ll>
#define pb push_back
#define mp make_pair
#define pll pair<ll,ll>
#define ff first
#define ss second
#define null NULL
#define sz(xss) (xss.size())
#define uset unordered_set
#define nl "\n"
#define spc " "
#define pnl cout<<"\n"
#define isodd(xz2) (xz2&1) 
#define umap unordered_map
//==================================================================
#ifndef ONLINE_JUDGE
#define check(x9) cerr<<#x9<<" "; _error_(x9); cerr<<" \n"
#else
#define check(x9)
#endif
//=================================================================

using namespace std;


ll add_mod(ll a,ll b,ll m){return ((((a%m)+(b%m))%m + m)%m);}
ll subs_mod(ll a,ll b,ll m){return ((((a%m)-(b%m))%m + m)%m);}
ll mult_mod(ll a,ll b,ll m){return ((((a%m)*(b%m))%m + m)%m);}
template <class T> void _error_(T t) {cerr<< t;}
template <class T, class V> void _error_(pair <T, V> p) {cerr << "{"; _error_(p.ff); cerr << ","; _error_(p.ss); cerr << "}";}
template <class T> void _error_(vector <T> v) {cerr << "[ "; for (T i : v) {_error_(i); cerr << " ";} cerr << "]";}
template <class T> void _error_(set <T> v) {cerr << "[ "; for (T i : v) {_error_(i); cerr << " ";} cerr << "]";}
template <class T> void _error_(multiset <T> v) {cerr << "[ "; for (T i : v) {_error_(i); cerr << " ";} cerr << "]";}
template <class T, class V> void _error_(map <T, V> v) {cerr << "[ "; for (auto i : v) {_error_(i); cerr << " ";} cerr << "]";}


void istest(ll &test){
	test=1;

						//cin>>test;

	return;}
vi a;
vi b;
int n;

int total[5002][5002];

int makeit(int ind1,int ind2){

if(ind1==a.size()) return 0;
if(ind2==b.size()) return INT_MAX;

if(total[ind1][ind2]!=0) return total[ind1][ind2];

int chk=abs(a[ind1]-b[ind2]) + makeit(ind1+1,ind2+1);
total[ind1][ind2]=min(chk,makeit(ind1,ind2+1));


return total[ind1][ind2]; 



}



void solve(){

cin>>n;
int temp;
for(int i=0;i<n;i++){
	cin>>temp;
	if(temp) a.pb(i);
	else b.pb(i);
}

int cost=makeit(0,0);
cout<<cost;















//cout<<"error";
return;
}


signed main(){  
	chl_jldi;

#ifndef ONLINE_JUDGE
	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);
	freopen("error.txt","w",stderr);
#endif
ll test=1;

// ++++++++++++++++++++++++++++++++++++++++++  //

	istest(test);
				


// ++++++++++++++++++++++++++++++++++++++++++  //
ll koko=1;
while(koko<=test){

//cout<<"Case #"<<ko<<": ";


solve();

//pnl;


koko++;

}return 0;}