const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void (async function () { // Write your code here function Solution(data) { let rounds = []; let result = []; for (let i = 0; i < data.length; i++) { let split = data[i].split(","); let o = [parseInt(split[0]), parseInt(split[1])]; rounds.push(o); } function canMerge(a, b) { if (a[0] < b[0]) { if (a[1] < b[0]) return false; else return true; } else if (b[0] < a[0]) { if (b[1] < a[0]) return false; else return true; } else if(a[0] === b[0]) return true } function merge(a, b) { return [Math.min(a[0], b[0]), Math.max(a[1], b[1])]; } function eqArray(a, b) { if (a.length !== b.length) return false; for (let i = 0; i < a.length; i++) { if (a[i] !== b[i]) return false; } return true; } function sortArr(arrString) { let result = [] for (let i = 0; i < arrString.length; i++) { let split = arrString[i].split(","); let o = [parseInt(split[0]), parseInt(split[1])]; result.push(o) } result.sort((a, b) => (a[0] - b[0])) result.forEach((item, index) => { result[index] = item.join(',') }) return result } for (let p = 0; p < rounds.length; p++) { let merged = false; for (let q = 0; q < rounds.length; q++) { if (p === q) continue; if (canMerge(rounds[p], rounds[q])) { result.push(merge(rounds[p], rounds[q]).toString()); merged = true; } } if (!merged) result.push(rounds[p].toString()); merged = false; } result = sortArr(result) const rt = [...new Set(result)]; if (eqArray(rt, data)) return rt.join(" "); else return Solution(rt).toString(); } while ((line = await readline())) { let tokens = line.split(" "); if (Array.isArray(tokens)) console.log(Solution(tokens)); } })();