Implemented
Handling all edge cases