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