Most Complicated Java Program