#include<bits/stdc++.h>
#define ll long long
#define LL long long
#define int long long
using namespace std;
const int maxn=1e4+10;
int a[maxn];
int b[maxn];
int p[100];
int pp[100];
int32_t main()
{
    int n; cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i]>>b[i];
    for(int i=1;i<=n;i++)
    {
        for(int j=64;j>=0;j--)
        {
            if( (a[i]>>j) & 1 )
            {
                if(!p[j])  { p[j]=a[i];  pp[j]=b[i]; break;  }
                else
                {
                    if(b[i]>pp[j])
                    {
                        swap(b[i],pp[j]);
                        swap(a[i],p[j]);
                    }
                    a[i]^=p[j];
                }
            }
        }
    }
    int ans=0;
    for(int i=0;i<=64;i++)
    {
        ans+=pp[i];
    }
    cout<<ans<<endl;

}

 另一种求线性基的方法

  for (int i = 1; i <= n; i++) {
        scanf("%d", &t);
        for (int j = 0; j < base.size(); j++) if((t^base[j]) < t) t ^= base[j];
        if(t) base.pb(t);
    }