import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Comparator; import java.util.LinkedList; import java.util.List; import java.util.Queue; public class Main { public static void main(String[] args) throws NumberFormatException, IOException{ ContestScanner in = new ContestScanner(); int n = in.nextInt(); Queue a = new LinkedList(); for(int i=0; i s){ if(d == 0 || s.size() <= 1) return 0; long mask = 1 << (d-1); Queue s1 = new LinkedList(); Queue s2 = new LinkedList(); while(!s.isEmpty()){ long val = s.poll(); if((mask & val) == 0){ s1.add(val); }else{ s2.add(val); } } if(s1.size() == 0){ return ~mask & minimax(d-1, s2); }else if(s2.size() == 0){ return minimax(d-1, s1); }else{ return Math.min(mask | minimax(d-1, s1), mask | minimax(d-1, s2)); } } } class MyComp implements Comparator{ public int compare(int[] a, int[] b) { return a[0] - b[0]; } } // //class Reverse implements Comparator{ // public int compare(Integer arg0, Integer arg1) { // return arg1 - arg0; // } //} class Node implements Comparable{ int id; int qNum; int xor; List edge = new ArrayList(); public Node(int id, int q, int xor){ this.id = id; qNum = q; this.xor = xor; } public void createEdge(Node node){ edge.add(node); } @Override public int compareTo(Node n) { return n.qNum - qNum; } } class MyMath{ public final static double PIhalf = Math.PI/2.0; public static double pAngle(double x, double y){ // ベクトル(1, 0)と(x, y)とのなす角を返す(rad:0 to 2pi) if(x == 0){ if(y == 0){ System.err.println("pAngle error: zero vector."); return 0; }else if(y < 0){ return PIhalf*3.0; }else{ return PIhalf; } } double rad = Math.atan(y/x); if(rad < 0){ rad += Math.PI*2.0; } return rad; } public static long fact(long n){ long res = 1; while(n > 0){ res *= n--; } return res; } public static long[][] pascalT(int n){ long[][] tri = new long[n][]; for(int i=0; i