impl finished. print has some bug yet