import
java.util.*;
public
class
Main
{
static
List<String> getProduct(List<String> lhs, List<String> rhs)
{
if
(lhs.size() ==
0
)
return
rhs;
List<String> ret =
new
ArrayList<>();
for
(String sl : lhs) {
for
(String sr : rhs) {
ret.add(sl + sr);
}
}
return
ret;
}
static
List<String> braceExpansion(String expression)
{
List<String> ret =
new
ArrayList<>();
List<String> cur =
new
ArrayList<>();
expression +=
','
;
int
len = expression.length();
for
(
int
i =
0
; i < len; i++) {
char
c = expression.charAt(i);
if
(c ==
'{'
) {
StringBuilder sub =
new
StringBuilder();
int
cnt =
1
;
while
(++i < len) {
if
(expression.charAt(i) ==
'{'
) {
cnt++;
}
else
if
(expression.charAt(i) ==
'}'
) {
cnt--;
}
if
(cnt ==
0
)
break
;
sub.append(expression.charAt(i));
}
List<String> subRet = braceExpansion(sub.toString());
cur = getProduct(cur, subRet);
}
else
if
(c ==
','
) {
ret.addAll(cur);
cur.clear();
}
else
{
List<String> tmp =
new
ArrayList<>();
tmp.add(
""
+ c);
cur = getProduct(cur, tmp);
}
}
Collections.sort(ret);
long
iter = ret.stream().distinct().count();
List<String> res =
new
ArrayList<String>();
for
(
int
i =
0
; i < iter; i++)
res.add(ret.get(i));
return
res;
}
public
static
void
main(String[] args)
{
String str =
"{a,b}{c,{d,e}}"
;
List<String> res =
new
ArrayList<String>();
res = braceExpansion(str);
for
(var ele : res)
System.out.print(ele +
" "
);
}
}