#include <bits/stdc++.h>
#define ulli unsigned long long int
#define MAXN 500500
using namespace std;
ulli a[MAXN];
ulli b[MAXN];

inline ulli busplus(int i,int k)
{
    if((a[i]>>k)&1)return 0;
    ulli z = 1;
    z=z<<k;
    return z-(a[i]%(z));
}
inline ulli busminus(int i,int k)
{
    if((a[i]>>k)&1)return 0;
    ulli z = 1;
    z=z<<k;
    if (a[i]<z) return ULONG_LONG_MAX;
    return a[i]%z+1;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n;
    cin>>n;
    for(int i=0;i<n;i++)cin>>a[i];

    if(n&1)///neparno
    {
        ulli s=ULONG_LONG_MAX;
        for(int j=0;j<64;j++)
        {
            ulli sx=0;
            for(int i=0;i<n;i++)sx+=min(busplus(i,j),busminus(i,j));
            if(sx<s)s=sx;
        }
        cout<<s;
    }
    else
    {
        ulli s=ULONG_LONG_MAX;
        vector<int> lol;
        for(int j=0;j<=64;j++)
        {
            ulli sx=0;
            for(int i=0;i<n;i++)sx+=min(busplus(i,j),busminus(i,j));
            if(sx<s){s=sx;lol.clear();}
            if(sx==s){lol.push_back(j);}
        }
        bool sup=false;
        for(int zzz=0;zzz<lol.size();zzz++)
        {
        int aha=lol[zzz];
            for(int i=0;i<n;i++)
                if(((a[i]>>aha)%2)==0)
                    {
                        b[i]=a[i]+((busplus(i,aha)<=busminus(i,aha))?busplus(i,aha):-busminus(i,aha));
                        if(busplus(i,aha)==busminus(i,aha))sup=true;
                    }

        ulli lezaja=0;
        for(int i=0;i<n;i++)lezaja^=b[i];
        if(lezaja!=0)sup=true;
        }
        if(sup)cout<<s;
        else cout<<s+2;
    }
    return 0;
}
/**
4
5 2 3 3

5
5 2 3 3 1

6
1 2 3 4 5 6

Baza podataka je uopsteni integrisani skup podataka
struktuiran prema prirodnim vezama izmedju podataka
i organizovan prema potrebama korisnika.
*/