improve to_string