add constructor and Reverse()