class AssocPair {
    double key;
    String value;

    AssocPair(double aKey, String aValue) {
	key = aKey;
	value = aValue;
    }
}

class SkipListTestNoRemove {

    static AssocPair[] getAssocPairs(SkipListNode origin) {
	int l = SkipList.length(origin);
	AssocPair[] ret = new AssocPair[l];
	SkipListNode current = origin.next[0];
	for(int i=0; i<l; i++) {
	    ret[i] = new AssocPair(current.key, current.value);
	    current = current.next[0];
	}
	return ret;
    }

    static AssocPair[] getAssocPairs(java.util.Map<Double, String> s) {
	java.util.Set<java.util.Map.Entry<Double, String>>
	    entries = s.entrySet();
	AssocPair[] ret = new AssocPair[entries.size()];
	int k=0;
	
	for(java.util.Map.Entry<Double, String> entry : entries) {
	    ret[k++] = new AssocPair(entry.getKey(), entry.getValue());
	}
	assert(k==entries.size());
	return ret;
    }

    static boolean equalAssocPairArrays(AssocPair[] a1, AssocPair[] a2) {
	if (a1.length != a2.length) {
	    return false;
	}

	for(int i=0; i<a1.length; i++) {
	    if (a1[i].key != a2[i].key || !a1[i].value.equals(a2[i].value)) {
		return false;
	    }
	}
	return true;
    }

    public static void main(String[] args) {
	SkipListNode list = new SkipListNode();
	java.util.Map<Double, String> map = new java.util.TreeMap<Double, String> ();
	int n=Integer.parseInt(args[0]);
	for(int i=0; i<n; i++) {
	    int r = (int) (Math.random()*n);
	    SkipList.put(list, r, Integer.toString(r));
	    map.put((double)r, Integer.toString(r));
	}
	System.out.println(equalAssocPairArrays(getAssocPairs(map),
						getAssocPairs(list)));
    }
}

