public static void main(String[] args) throws Exception {
        populateSets(args);
        
        System.out.println("Start reconciling");
        long start_time, end_time;
        start_time = System.currentTimeMillis();
                    
        int nmessages = 0;
        Vector<long[]> deltas = new Vector<long[]>();
        long[] n = Partition.root(0,Reconciler.getDatamax());
        while(!Partition.isDone(n)) { 
            nmessages++;
            long    begin = Partition.begin(n);
            long    end   = Partition.end(n);
            long[]  dB    = storeB.keySetArray(begin, end);
            int     mB    = dB.length;
            boolean sv    = Reconciler.isSV(mB, begin, end);
            long[]  eB    = Reconciler.syncArray(sv, dB);

            long[]  dA    = storeA.keySetArray(begin, end);
            int     mA    = dA.length;
            long[]  eA    = Reconciler.syncArray(sv, dA);
            
            //System.out.println(begin + " " + end + " " + mA + " " + mB + " " + (sv ? "SV" : "CPI"));
            boolean success = Reconciler.reconcile(sv, eA, eB, mA, mB, deltas);
            if(success) handleDeltas(deltas.get(0), deltas.get(1));
            Partition.next(success, n, n);
            deltas.clear();
        }
        
        end_time = System.currentTimeMillis();
        System.out.println("Time: " + (end_time-start_time));
        System.out.println("Messages: " + nmessages);
        System.out.println("A has: " + storeA.cardinality() + " B has: " + storeB.cardinality());  
    }