#include <bits/stdc++.h>
using namespace std;
void solve(vector<string>& ans, vector<string> vs, int n, int k, string t) {
if (k == n) {
ans.push_back(t);
return;
}
for (auto it: vs[k]) {
t += it;
solve(ans, vs, n, k+1, t);
t.pop_back();
}
}
int main() {
// your code goes here
string s = "{a,b,c}d{e,f}g{h,i,j}";
bool flag = false;
vector<string> vs;
int k = 0;
for (int i=0;i<s.length();i++) {
if (s[i] == '{') {
flag = true;
vs.push_back("");
continue;
}
if (s[i] == '}' && flag) {
flag = false;
k++;
continue;
}
if (s[i] == ',') { continue; }
if (flag) {
vs[k] += s[i];
} else {
string tmp = "";
tmp += s[i];
vs.push_back(tmp);
k++;
}
}
for (auto it: vs) {
cout<<it<<endl;
}
cout<<endl<<endl;
vector<string> ans;
solve(ans, vs, k, 0, "");
for (auto it: ans) {
cout<<it<<endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIHNvbHZlKHZlY3RvcjxzdHJpbmc+JiBhbnMsIHZlY3RvcjxzdHJpbmc+IHZzLCBpbnQgbiwgaW50IGssIHN0cmluZyB0KSB7CglpZiAoayA9PSBuKSB7CgkJYW5zLnB1c2hfYmFjayh0KTsKCQlyZXR1cm47Cgl9Cglmb3IgKGF1dG8gaXQ6IHZzW2tdKSB7CgkJdCArPSBpdDsKCQlzb2x2ZShhbnMsIHZzLCBuLCBrKzEsIHQpOwoJCXQucG9wX2JhY2soKTsKCX0KfQoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglzdHJpbmcgcyA9ICJ7YSxiLGN9ZHtlLGZ9Z3toLGksan0iOwoJYm9vbCBmbGFnID0gZmFsc2U7Cgl2ZWN0b3I8c3RyaW5nPiB2czsKCWludCBrID0gMDsKCWZvciAoaW50IGk9MDtpPHMubGVuZ3RoKCk7aSsrKSB7CgkJaWYgKHNbaV0gPT0gJ3snKSB7CgkJCWZsYWcgPSB0cnVlOwoJCQl2cy5wdXNoX2JhY2soIiIpOwoJCQljb250aW51ZTsKCQl9CgkJaWYgKHNbaV0gPT0gJ30nICYmIGZsYWcpIHsKCQkJZmxhZyA9IGZhbHNlOwoJCQlrKys7CgkJCWNvbnRpbnVlOwoJCX0KCQlpZiAoc1tpXSA9PSAnLCcpIHsgY29udGludWU7IH0KCQlpZiAoZmxhZykgewoJCQl2c1trXSArPSBzW2ldOwoJCX0gZWxzZSB7CgkJCXN0cmluZyB0bXAgPSAiIjsKCQkJdG1wICs9IHNbaV07CgkJCXZzLnB1c2hfYmFjayh0bXApOwoJCQlrKys7CgkJfQoJfQoJCglmb3IgKGF1dG8gaXQ6IHZzKSB7CgkJY291dDw8aXQ8PGVuZGw7Cgl9Cgljb3V0PDxlbmRsPDxlbmRsOwoJCgl2ZWN0b3I8c3RyaW5nPiBhbnM7Cglzb2x2ZShhbnMsIHZzLCBrLCAwLCAiIik7Cglmb3IgKGF1dG8gaXQ6IGFucykgewoJCWNvdXQ8PGl0PDxlbmRsOwoJfQoJcmV0dXJuIDA7Cn0=