传送门:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <iostream>
#include <queue>
#include <bitset>
#include <cmath>
using namespace std;
#define ll long long
#define re register
#define fi first
#define se second
const int N=1e6+10;
inline void read(int &a)
{
a=0;
int d=1;
char ch;
while(ch=getchar(),ch>'9'||ch<'0')
if(ch=='-')
d=-1;
a=ch^48;
while(ch=getchar(),ch>='0'&&ch<='9')
a=(a<<3)+(a<<1)+(ch^48);
a*=d;
}
inline void write(int x)
{
if(x<0)
putchar(45),x=-x;
if(x>9)
write(x/10);
putchar(x%10+'0');
}
ll a[65];
struct note
{
ll x;
int y;
friend bool operator < (note a,note b){return a.y>b.y;}
}q[1005];
inline bool add(ll x)
{
for(re int i=62;i>=0;i--)
if(x&(1ll<<i))
{
if(!a[i])
{
a[i]=x;
break;
}
x^=a[i];
}
return x>0;
}
int main()
{
int n;
scanf("%d",&n);
for(re int i=1;i<=n;i++)
scanf("%lld %d",&q[i].x,&q[i].y);
sort(q+1,q+1+n);
int ans=0;
for(re int i=1;i<=n;i++)
ans+=q[i].y*add(q[i].x);
printf("%d
",ans);
return 0;
}