两次排序得到结果
const [n, m] = readline().split(' ').map(Number);
// arr: n * m * 4
let arr = [];
// id: n * m
const id = [];
for (let i = 0; i < n; i++) {
const temp = readline().split(' ').map(Number);
let arrTmp = [];
let idTmp = [];
for (let j = 0; j < m; j++) {
arrTmp.push(temp.slice(j * 4, j * 4 + 4));
}
// 按照x的值升序排列
arrTmp = arrTmp.sort((a, b) => a[1] - b[1]);
for (let j = 0; j < m; j++) {
// 存储每行的id排序
idTmp.push(arrTmp[j][0]);
}
id.push(idTmp);
// arr存储着每行的头和尾巴 n * m * 2
arr.push([arrTmp[0], arrTmp[m - 1]]);
}
for (let i = 0; i < n; i++) {
// 每行打印
console.log(id[i].join(' '));
}
// 按照y降序排列
arr = arr.sort((a, b) => b[0][2] - a[0][2]);
// 遍历所有头、再是所有尾巴
for (let i = 0; i < 2; i++) {
const temp = [];
for (let j = 0; j < n; j++) {
// 把每行的(头或尾)id打印下来
temp.push(arr[j][i][0]);
}
console.log(temp.join(' '));
}