#include <iostream>
#include <stdio.h>

using namespace std;

long long a[1000000],s2[100];
int mat[500001][61];
long long potrebno[61];

int main()
{
    int brIf;
    int sviIsti = 1;
    int sviNula = 1;
    int sviJedinice = 1;
    int okej=0; ///okej je ako nakon menjanja postoji kolona u kojoj ima i nula i jedinica sto je ekvivalentno sa potrebno[j] != s2[j]*n=0
    int n;
    int i,j;
    int xorr,andd;
    int maxst=0;
    long long pom;
    int iz,indexIz;
    scanf("%d",&n);
    scanf("%lld",&a[0]);
    if (a[0] != 0)
        sviNula = 0;
    if (a[0] != 1)
        sviJedinice = 0;
    xorr = a[0];
    andd = a[0];

    s2[0] = 1;
    for (i=1;i<=61;i++){
        s2[i] = s2[i-1] * 2;
    }

    for (j=0;j<=60;j++){
            pom = a[0];
            if (pom % s2[j+1] != pom % s2[j]){
                mat[0][j] = 1;
                if (j > maxst)
                    maxst = j;
            }

    }


    for(i=1;i<n;i++){
        scanf("%lld",&a[i]);
        if(a[i] != a[i-1])
            sviIsti = 0;
        if(a[i] != 0)
            sviNula = 0;
        if (a[i] != 1)
            sviJedinice = 0;
        xorr = xorr ^ a[i];
        andd = andd & a[i];
        for (j=0;j<=60;j++){
            pom = a[i];
            if (pom % s2[j+1] != pom % s2[j]){
                mat[i][j] = 1;
                if (j > maxst)
                    maxst = j;
            }
        }
    }
    //cout << maxst << endl;
    /*for(i=0;i<n;i++){
        for (j=0;j<=maxst;j++){
            cout << mat[i][j] << " ";
        }
        cout << endl;
    }*/

    for (j=0;j<=maxst;j++){
        for (i=0;i<n;i++)
            if(mat[i][j] == 0)
                potrebno[j]++;
        potrebno[j] *= s2[j];
    }
    //cout << xorr;
    /*for(j=0;j<=maxst;j++)
        cout << potrebno[j] << " ";*/
    if ((xorr > 0) && (andd > 0)){
        cout << 0;
        brIf = 1;
    }
    else if (sviNula == 1){
        iz = n+2;
        brIf = 2;
    }
    else if (sviJedinice == 1){
        iz = 3;
        brIf = 3;
    }
    else if (sviIsti == 1){
        iz = 1;
        brIf = 4;
    }
    else {
        brIf = 5;
        iz = potrebno[0];
        indexIz = 0;
        for (j=0;j<=maxst;j++){
            if (potrebno[j] < iz){
                iz = potrebno[j];
                indexIz = j;
            }
        }
        for (j=0;j<=maxst;j++){
            if (j!=indexIz){
                if((potrebno[j]!=0) && (potrebno[j]!=n*s2[j]))
                    okej = 1;
            }
        }
        if(okej == 0)
            iz++;
        //cout << potrebno[0] << potrebno[1] << potrebno [2];
    }
    cout << iz << endl;
    //cout << brIf << endl;

    return 0;
}