Hi Arora,
Your code tries to make us fool two places.
1- hardy.sleep(1000);
sleep(...) is a static method of the Thread class and it should be called in static context. hardy.sleep(...) never means that it will cause thread hardy to sleep.

Current thread will sleep.
2- laurel.wait();
wait() and notify() methods must be called in the synchronized context.
Otherwise, IllegalMonitorStateException is thrown, that is true with your code. Because you have handled that exception, S.O.P statement will get executed there, and control will continue to the next line after the try catch block.
Output sequence is not certain: but one of the possible outputs may be
A
D
E
F
C
Regards,
cmbhatt