#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(FILE *f, long pos, ev &evi, string &value, long &end) {
int c;
bool eo = true;
value = "";
fseek(f, pos, SEEK_SET);
while ((c = fgetc(f)) != EOF) {
eo = false;
if (isgraph(c))
break;
}
if (eo) {evi = EOFI; return;}
if (c == '[') {evi = ARR_BEGIN; end = ftell(f); return;}
if (c == ']') {evi = ARR_END; end = ftell(f); return;}
if (c == '{') {evi = OBJ_BEGIN; end = ftell(f); return;}
if (c == '}') {evi = OBJ_END; end = ftell(f); return;}
if (c == ':') {evi = TWOD; end = ftell(f); return;}
if (c == ',') {evi = COMMA; end = ftell(f); return;}
if (c == '\"') {
bool ign = false;
while ((c = fgetc(f)) != EOF) {
if (ign) {ign = false; continue;}
if (c == '\\') {ign = true; continue; }
if (c == '\"') {
ev ae;
string av;
long ap;
long axa = ftell(f);
getevi(f, ftell(f), ae, av, ap);
if (ae == TWOD) evi = KEY;
else evi = VAL;
end = axa;
return;
}
value += c;
}
return;
}
if (c <= '9' && c >= '0') {
evi = VAL;
value += c;
while ((c = fgetc(f)) != EOF) {
if (c == '}' || c == ']' || c == ',') {
end = ftell(f) - 1L;
return;
}
if (isspace(c) || !isgraph(c)) {end = ftell(f); return;}
value += c;
}
end = ftell(f);
return;
}
}
int main() {
FILE *f = fopen("convertor.in", "r");
FILE *g = fopen("convertor.out", "w");
long i = 0;
ev e;
bool hw = false;
string val, hr, dr;
getevi(f, i, e, val, i);
getevi(f, i, e, val, i);
while (e == OBJ_BEGIN) {
getevi(f, i, e, val, i);
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) fprintf(g, "%s\n", hr.c_str());;
fprintf(g, "%s\n", dr.c_str());;
hw = true;
getevi(f, i, e, val, i);
if (e == ARR_END) break;
getevi(f, i, e, val, i);
}
return 0;
}