Data Structure and Algorithm in Java