interface MyComparable {
    public int compareTo(Object o);
}


class Auxiliaries {
public static MyComparable 
      findMax( MyComparable [] arr) {
	int maxIndex = 0;

        for (int i = 1; i < arr.length; i++) {
	    if( arr[i].compareTo( arr[ maxIndex ] ) > 0) 
		maxIndex = i;
	}
        return arr[ maxIndex ];
    }
}



class MyFindMax {

 
    public static void main( String [] args) {
	IntHolder [] arr1 = { new IntHolder(11), new IntHolder(21), new IntHolder(17), new IntHolder(34) };
	IntHolder ih = (IntHolder) Auxiliaries.findMax ( arr1);
        System.out.println(ih.i);

        Rectangl [] arr2 = {new Rectangl(5, 2), new Rectangl(5, 3), new Rectangl(6, 4), 
                            new Rectangl(6, 2)};
        Rectangl rect = (Rectangl) Auxiliaries.findMax(arr2);
        System.out.println(rect.length + ", " + rect.breadth);
    }
}

class IntHolder implements MyComparable {
    int i;
    public IntHolder (int i1) {
	i = i1;
    }
    public int compareTo(Object o) {
	IntHolder holder = (IntHolder) o;
        if (i > holder.i) return 1;
        if (i == holder.i) return 0;
        if (i < holder.i) return -1;
        return 0;
    }
}

class Rectangl implements MyComparable {
    int length, breadth;
    public Rectangl (int l, int b) {
	length = l; 
        breadth = b;
    }
    public int compareTo(Object o) {
        Rectangl rect = (Rectangl) o;
        if ( length * breadth > rect.length * rect.breadth ) return 1;
        if ( length * breadth == rect.length * rect.breadth ) return 0;
        if ( length * breadth < rect.length * rect.breadth ) return -1;
        return 0;
    }
}