#include<bits/stdc++.h>
#define maxn 500001
#define lg2 61
using namespace std;

int n;
short a[maxn][lg2];
long long niz[maxn];
long long veci[maxn];
long long manji[maxn];
long long vre[maxn][2];
short levo[maxn][lg2+1];
int maxlg;

long long precalc()
{
    for(int i=0;i<n;i++)
    {
        levo[i][maxlg+1]=-100;
        for(int j=maxlg;j>=0;j--)
        {
            levo[i][j]=levo[i][j+1];
            if(a[i][j]==1)levo[i][j]=j;
        }
    }

    unsigned long long res=-1;
    int curr=0;
    int prev=1;
    for(int j=0;j<=maxlg;j++)
    {
        for(int i=0;i<n;i++)
        {
            if(j==0)
            {
                vre[i][curr]=a[i][j];
            }
            else
            {
                vre[i][curr]=vre[i][prev]+a[i][j]*(1LL<<j);
            }
            if(j==0)
            {
                if(a[i][j]==1)
                {
                    veci[i]=niz[i];
                }
                else
                {
                    veci[i]=niz[i]+1;
                }
            }
            else
            {
                if(a[i][j]==1)
                {
                    veci[i]=niz[i];
                }
                else
                {
                    veci[i]=niz[i]-vre[i][prev]+(1LL<<j);
                }
            }
            if(levo[i][j]<0 || a[i][j]==1)
            {
                manji[i]=-1;
            }
            else
            {
                manji[i]=niz[i]-vre[i][curr]-(1LL<<(levo[i][j]))+(1LL<<(j+1))-1;
            }
        }

        long long tre=0;
        long long xorr=0;
        bool ext0=false;
        bool ext1=false;
        for(int i=0;i<n;i++)
        {
            long long razv=veci[i]-niz[i];
            if(manji[i]<0)
            {
                xorr^=veci[i];
                tre+=razv;
            }
            else
            {
                long long razm=niz[i]-manji[i];
                if(razv==razm)
                {
                    ext0=true;
                }
                if(abs(razv-razm)==1)
                {
                    ext1=true;
                }
                if(razv<razm)
                {
                    xorr^=veci[i];
                    tre+=razv;
                }
                else
                {
                    xorr^=manji[i];
                    tre+=razm;
                }
            }
        }

        if(xorr==0LL)
        {
            if(j==0)
            {
                if(!ext0 && !ext1)tre+=2;
                else if(ext1)tre+=1;
            }
            else
            {
                if(!ext0)tre+=1;
            }
        }
        if(tre<res || res==-1)
        {
            res=tre;
        }
        
        swap(curr,prev);
    }

    return res;
}


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    cin>>n;
    maxlg=0;
    for(int i=0;i<n;i++)
    {
        long long x;
        cin>>x;
        niz[i]=x;
        for(int j=0;j<lg2;j++)
        {
            a[i][j]=x%2;
            if(a[i][j]==1)maxlg=max(maxlg,j);
            x/=2;
        }
    }

    cout<<precalc()<<endl;

    return 0;
}