#include <iostream>
using namespace std;
template<class T>
void f(T *a, int *mark, int i, int n) {
//a为集合,mark为标记数组,i为起点,n为元素个数
if (n == i) {
cout << "{";
for (int k = 0; k < n; k++) {
if (mark[k] == 1) {
cout << a[k] << " ";
}
}
cout << "}" << endl;
} else {
mark[i] = 0;
f(a, mark, i + 1, n);
mark[i] = 1;
f(a, mark, i + 1, n);
}
}
int main() {
string s;
getline(cin, s);
int count = 1;
for (int i = 1; i < s.length() - 1; i++) {
if (s[i] == ',') {
count++;
}
}
int mark[count];
char arr[count];
for (int i = 1, m = 0; i < s.length() - 1; i += 2) {
arr[m] = s[i];
m++;
}
f(arr, mark, 0, count);
}
(每层输出包含自身及之后元素的所有子集