状压dp做
inline void prepare()
{
memset(dp,0,sizeof(dp));
for(int i=1;i<=N;i++)
dp[f[i]]=1;
for(int i=0;i<=20;i++)
for(int j=0;j<=(1<<20);j++)
{
if((1<<i)&j)
dp[j^(1<<i)]=max(dp[j],dp[j^(1<<i)]);
}
}
inline int sol3()
{
prepare();
int ret=0;
for(int i=1;i<=N;i++)
{
int x=0;
for(int j=20;j>=0;j--)
{
if((1<<j)&f[i]) continue;
else x+=(1<<j);
if(dp[x])
continue;
else
x-=(1<<j);
}
int tmp=f[i]|x;
if(tmp>ret) ret=tmp;
}
return ret;
}