accept empty string