#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, long pos, ev &evi, char *value, long &end) {
char c;
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;
char *av = new char[1024];
long ap;
long axa = f.tellg();
getevi(f, f.tellg(), ae, av, ap);
delete av;
if (ae == TWOD) evi = KEY;
else evi = VAL;
end = axa;
value[i] = '\0';
return;
}
value[i] = c;
i++;
}
return;
}
if (c <= '9' && c >= '0') {
evi = VAL;
value[i] = c;
i++;
while (!f.eof()) {
f.get(c);
if (c == '}' || c == ']' || c == ',') {
end = f.tellg() - 1L;
value[i] = '\0';
return;
}
if (isspace(c) || !isgraph(c)) {end = f.tellg(); value[i] = '\0'; return;}
value[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;
char *val = new char[1024];
char *hr = new char[1024], *dr = new char[1024];
getevi(f, i, e, val, i);
getevi(f, i, e, val, i);
while (e == OBJ_BEGIN) {
getevi(f, i, e, val, i);
hr[0] = '\0'; dr[0] = '\0';
while (e == KEY) {
if (!hw) {strcat(hr, val); strcat(hr, ",");}
getevi(f, i, e, val, i);
getevi(f, i, e, val, i);
strcat(dr, val); strcat(dr, ",");
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;
}