class Solution {
List<String> ans = new ArrayList<>();
public String[] expand(String s) {
char[] array = s.toCharArray();
dfs(0, array, new StringBuilder());
String[] res = new String[ans.size()];
for (int i = 0; i < res.length; i++) {
res[i] = ans.get(i);
}
Arrays.sort(res);
return res;
}
private void dfs(int index, char[] array, StringBuilder sb) {
if (index == array.length) {
ans.add(sb.toString());
return;
}
char ch = array[index];
if (ch == ',') {
dfs(index + 1, array, sb);
} else if (ch == '{') {
int end = index;
while (array[end] != '}') end++;
for (int i = index + 1; i < end; i++) {
if (array[i] == ',') continue;
sb.append(array[i]);
dfs(end + 1, array, sb);
sb.deleteCharAt(sb.length() - 1);
}
} else {
sb.append(array[index]);
dfs(index + 1, array, sb);
sb.deleteCharAt(sb.length() - 1);
}
}
}