#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct Light
{
int id;
int x;
int y;
int r;
Light(int id, int x, int y, int r) : id(id), x(x), y(y), r(r)
{
}
};
bool compareByY(const Light& a, const Light& b)
{
return a.y < b.y;
}
bool compareByX(const Light& a, const Light& b)
{
return a.x < b.x;
}
int main()
{
int n;
cin >> n;
vector<Light> lights;
for(int i = 0; i < n; i++)
{
int id;
int x1;
int y1;
int x2;
int y2;
cin >> id >> x1 >> y1 >> x2 >> y2;
int x = (x1 + x2) / 2;
int y = (y1 + y2) / 2;
int r = (x2 - x1) / 2;
lights.emplace_back(id, x, y, r);
}
sort(lights.begin(), lights.end(), compareByY);
for(int i = 0; i < n; i++)
{
cout << lights[i].id << " ";
}
cout << endl;
string result;
int rowStartIndex = 0;
for(int i = 1; i < n; i++)
{
if(lights[i].y - lights[rowStartIndex].y > lights[rowStartIndex].r)
{
sort(lights.begin() + rowStartIndex, lights.begin() + i - 1, compareByX);
for(int j = rowStartIndex; j < i; j++)
{
result += to_string(lights[j].id) + " ";
}
rowStartIndex = i;
}
}
sort(lights.begin() + rowStartIndex, lights.end(), compareByX);
for(int i = rowStartIndex; i < n; i++)
{
result += to_string(lights[i].id) + " ";
}
cout << result << endl;
return 0;
}
5
1 0 0 2 2
2 3 0 5 3
3 6 0 8 2
4 0 6 2 7
5 4 6 6 7
1 2 3 4 5
5
1 0 0 2 2
2 6 1 8 3
3 3 2 5 4
5 5 4 7 6
4 0 4 2 6
1 2 3 4 5