pretty printing via toString