add explanation
add print method
add printing