function printTree(t, index, r, delim) {
var out = [],
prefix, res;
r = r || '';
delim = delim || ' ';
index = index || 0;
if (index < t.length) {
t = t.map(function(el) {
return el instanceof Array ? el : [el];
});
prefix = r ? r + delim : '';
for (var i = 0; i < t[index].length; i++) {
if (t[index][i] instanceof Array) {
res = printTree(t[index][i], 0, r, delim);
} else {
res = [prefix + t[index][i]];
}
for (var j = 0; j < res.length; j++) {
out = out.concat(printTree(t, index + 1, res[j], delim));
}
}
} else {
return [r];
}
return out;
}
var tests = [
[1, 2, 3],
[1, [2, 3]],
[
[1, 2], 3
],
[
[1, 2],
[3, 4]
],
[
[1, 2],
[3, [4, 5], 6]
],
[1, [2, [3, [4, 5]]]],
[
[1, 2],
[
[3, [4, 5, 6]], 7
]
],
[
[1, 2],
[
[3, [4, 5, 6]], 7
], 8
],
[
1,
[
2,
[
3,
[
4,
[5, 6]
],
7
],
8
],
9
],
[
1,
[
2,
[
3,
[
[
4,
[5, 6]
]
],
7
],
8
],
9
]
];
for (var i = 0; i < tests.length; i++) {
print(printTree(tests[i]).join('\n'));
print('\n')
}
ZnVuY3Rpb24gcHJpbnRUcmVlKHQsIGluZGV4LCByLCBkZWxpbSkgewogICAgdmFyIG91dCA9IFtdLAogICAgICAgIHByZWZpeCwgcmVzOwogICAgciA9IHIgfHwgJyc7CiAgICBkZWxpbSA9IGRlbGltIHx8ICcgJzsKICAgIGluZGV4ID0gaW5kZXggfHwgMDsKICAgIGlmIChpbmRleCA8IHQubGVuZ3RoKSB7CiAgICAgICAgdCA9IHQubWFwKGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgICAgIHJldHVybiBlbCBpbnN0YW5jZW9mIEFycmF5ID8gZWwgOiBbZWxdOwogICAgICAgIH0pOwogICAgICAgIHByZWZpeCA9IHIgPyByICsgZGVsaW0gOiAnJzsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRbaW5kZXhdLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICh0W2luZGV4XVtpXSBpbnN0YW5jZW9mIEFycmF5KSB7CiAgICAgICAgICAgICAgICByZXMgPSBwcmludFRyZWUodFtpbmRleF1baV0sIDAsIHIsIGRlbGltKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJlcyA9IFtwcmVmaXggKyB0W2luZGV4XVtpXV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgIG91dCA9IG91dC5jb25jYXQocHJpbnRUcmVlKHQsIGluZGV4ICsgMSwgcmVzW2pdLCBkZWxpbSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gW3JdOwogICAgfQogICAgcmV0dXJuIG91dDsKfQoKdmFyIHRlc3RzID0gWwogICAgWzEsIDIsIDNdLAogICAgWzEsIFsyLCAzXV0sCiAgICBbCiAgICAgICAgWzEsIDJdLCAzCiAgICBdLAogICAgWwogICAgICAgIFsxLCAyXSwKICAgICAgICBbMywgNF0KICAgIF0sCiAgICBbCiAgICAgICAgWzEsIDJdLAogICAgICAgIFszLCBbNCwgNV0sIDZdCiAgICBdLAogICAgWzEsIFsyLCBbMywgWzQsIDVdXV1dLAogICAgWwogICAgICAgIFsxLCAyXSwKICAgICAgICBbCiAgICAgICAgICAgIFszLCBbNCwgNSwgNl1dLCA3CiAgICAgICAgXQogICAgXSwKICAgIFsKICAgICAgICBbMSwgMl0sCiAgICAgICAgWwogICAgICAgICAgICBbMywgWzQsIDUsIDZdXSwgNwogICAgICAgIF0sIDgKICAgIF0sCiAgICBbCiAgICAJMSwgCiAgICAJWwogICAgCQkyLCAKICAgIAkJWwogICAgCQkJMywgCiAgICAJCQlbCiAgICAJCQkJNCwgCiAgICAJCQkJWzUsIDZdCiAgICAJCQldLCAKICAgIAkJCTcKICAgIAkJXSwgCiAgICAJCTgKICAgIAldLCAKICAgIAk5CiAgICBdLAogICAgWwogICAgCTEsIAogICAgCVsKICAgIAkJMiwgCiAgICAJCVsKICAgIAkJCTMsIAogICAgCQkJWwogICAgCQkJCVsKICAgIAkJCQkJNCwgCiAgICAJCQkJCVs1LCA2XQogICAgCQkJCV0KICAgIAkJCV0sIAogICAgCQkJNwogICAgCQldLCAKICAgIAkJOAogICAgCV0sIAogICAgCTkKICAgIF0KXTsKCmZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKICAgIHByaW50KHByaW50VHJlZSh0ZXN0c1tpXSkuam9pbignXG4nKSk7CiAgICBwcmludCgnXG4nKQp9