#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
typedef enum {
ARR_BEGIN,
ARR_END,
OBJ_BEGIN,
OBJ_END,
KEY,
VAL,
COMMA,
TWOD,
EOFI
} ev;
void getevi(ifstream &f, string &buf, long pos, ev &evi, string &value, long &end) {
char c;
value = "";
long i;
while(true) {
for (i = pos; i < buf.length(); i++) {
c = buf.at(i);
if (isgraph(c)) break;
}
if (i == buf.length()) {
if (f.eof()) {evi = EOFI; return;}
getline(f, buf);
pos = 0;
} else break;
}
if (c == '[') {evi = ARR_BEGIN; end = i + 1; return;}
if (c == ']') {evi = ARR_END; end = i + 1; return;}
if (c == '{') {evi = OBJ_BEGIN; end = i + 1; return;}
if (c == '}') {evi = OBJ_END; end = i + 1; return;}
if (c == ':') {evi = TWOD; end = i + 1; return;}
if (c == ',') {evi = COMMA; end = i + 1; return;}
if (c == '\"') {
bool ign = false;
for (i = i + 1; i < buf.length(); i++) {
c = buf.at(i);
if (ign) {ign = false; continue;}
if (c == '\\') {ign = true; continue; }
if (c == '\"') {
ev ae;
string av;
long ap;
getevi(f, buf, i + 1, ae, av, ap);
if (ae == TWOD) evi = KEY;
else evi = VAL;
end = i + 1;
return;
}
value += c;
}
end = i;
return;
}
if (c <= '9' && c >= '0') {
evi = VAL;
value += c;
for (i = i + 1; i < buf.length(); i++) {
c = buf.at(i);
if (c == '}' || c == ']' || c == ',') {
end = i;
return;
}
if (isspace(c) || !isgraph(c)) {end = i; return;}
value += c;
}
end = i;
return;
}
}
int main() {
ifstream f("convertor.in");
ofstream g("convertor.out");
long i = 0;
ev e;
bool hw = false;
string val, hr, dr;
string buf;
getline(f, buf);
getevi(f, buf, i, e, val, i);
getevi(f, buf, i, e, val, i);
while (e == OBJ_BEGIN) {
getevi(f, buf, i, e, val, i);
hr = ""; dr = "";
while (e == KEY) {
if (!hw) hr = hr + val + ",";
getevi(f, buf, i, e, val, i);
getevi(f, buf, i, e, val, i);
dr = dr + val + ",";
getevi(f, buf, i, e, val, i);
if (e == OBJ_END) break;
getevi(f, buf, i, e, val, i);
}
if (!hw) g << hr << endl;
g << dr << endl;
hw = true;
getevi(f, buf, i, e, val, i);
if (e == ARR_END) break;
getevi(f, buf, i, e, val, i);
}
return 0;
}