Almost done, todo:
1. Reverse method should be provided.
2. Coding style should be improved.