generate all combinations of a string