#include <iostream>
#include <set>
#include <algorithm>
#include <math.h>
#include <vector>
using namespace std;
#define x second
#define y first
typedef pair<long long, long long> pll;
inline double dist(pll p1, pll p2)
{
return sqrt((double) (p2.y - p1.y)*(p2.y - p1.y) + (p2.x - p1.x)*(p2.x - p1.x));
}
int main(int argc, const char * argv[])
{
int numPoints;
cin >> numPoints;
vector <pll> points;
points.resize(numPoints);
for (int i = 0; i < numPoints; i++)
{
cin >> points[i].x >> points[i].y;
}
//Sorts the points by y coordinate (because y is first)
sort(points.begin(), points.end());
double shortestDistSoFar = INFINITY;
set <pll> boundingBox; //Bounding box maintained by y-coordinate
boundingBox.insert(points[0]);
int left = 0;
pll best1, best2;
for (int i = 1; i < numPoints; i++)
{
//Maintain only points to the left of the current point whose distance is less than bestDist
while ((left < i) && (points[i].x - points[left].x > shortestDistSoFar))
{
boundingBox.erase(points[left]);
left++;
}
//Consider only points within bestDist of the current point
for (auto it = boundingBox.lower_bound(pll(points[i].y - shortestDistSoFar, points[i].x - shortestDistSoFar));
it != boundingBox.end() && it->y <= points[i].y + shortestDistSoFar; it++)
{
if (dist(*it, points[i]) < shortestDistSoFar)
{
shortestDistSoFar = dist(*it, points[i]);
best1 = *it;
best2 = points[i];
}
}
boundingBox.insert(points[i]);
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8bWF0aC5oPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgeCBzZWNvbmQKI2RlZmluZSB5IGZpcnN0Cgp0eXBlZGVmIHBhaXI8bG9uZyBsb25nLCBsb25nIGxvbmc+IHBsbDsKCmlubGluZSBkb3VibGUgZGlzdChwbGwgcDEsIHBsbCBwMikKewogICAgcmV0dXJuIHNxcnQoKGRvdWJsZSkgKHAyLnkgLSBwMS55KSoocDIueSAtIHAxLnkpICsgKHAyLnggLSBwMS54KSoocDIueCAtIHAxLngpKTsKfQoKCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQp7CiAgICBpbnQgbnVtUG9pbnRzOwogICAgY2luID4+IG51bVBvaW50czsKICAgIAogICAgdmVjdG9yIDxwbGw+IHBvaW50czsKICAgIHBvaW50cy5yZXNpemUobnVtUG9pbnRzKTsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Qb2ludHM7IGkrKykKICAgIHsKICAgICAgICBjaW4gPj4gcG9pbnRzW2ldLnggPj4gcG9pbnRzW2ldLnk7CiAgICB9CiAgICAKICAgIC8vU29ydHMgdGhlIHBvaW50cyBieSB5IGNvb3JkaW5hdGUgKGJlY2F1c2UgeSBpcyBmaXJzdCkKICAgIHNvcnQocG9pbnRzLmJlZ2luKCksIHBvaW50cy5lbmQoKSk7CiAgICAKICAgIGRvdWJsZSBzaG9ydGVzdERpc3RTb0ZhciA9IElORklOSVRZOwogICAgc2V0IDxwbGw+IGJvdW5kaW5nQm94OyAvL0JvdW5kaW5nIGJveCBtYWludGFpbmVkIGJ5IHktY29vcmRpbmF0ZQogICAgYm91bmRpbmdCb3guaW5zZXJ0KHBvaW50c1swXSk7CiAgICAKICAgIGludCBsZWZ0ID0gMDsKICAgIAogICAgcGxsIGJlc3QxLCBiZXN0MjsKICAgIAogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBudW1Qb2ludHM7IGkrKykKICAgIHsKICAgICAgICAvL01haW50YWluIG9ubHkgcG9pbnRzIHRvIHRoZSBsZWZ0IG9mIHRoZSBjdXJyZW50IHBvaW50IHdob3NlIGRpc3RhbmNlIGlzIGxlc3MgdGhhbiBiZXN0RGlzdAogICAgICAgIHdoaWxlICgobGVmdCA8IGkpICYmIChwb2ludHNbaV0ueCAtIHBvaW50c1tsZWZ0XS54ID4gc2hvcnRlc3REaXN0U29GYXIpKQogICAgICAgIHsKICAgICAgICAgICAgYm91bmRpbmdCb3guZXJhc2UocG9pbnRzW2xlZnRdKTsKICAgICAgICAgICAgbGVmdCsrOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvL0NvbnNpZGVyIG9ubHkgcG9pbnRzIHdpdGhpbiBiZXN0RGlzdCBvZiB0aGUgY3VycmVudCBwb2ludAogICAgICAgIGZvciAoYXV0byBpdCA9IGJvdW5kaW5nQm94Lmxvd2VyX2JvdW5kKHBsbChwb2ludHNbaV0ueSAtIHNob3J0ZXN0RGlzdFNvRmFyLCBwb2ludHNbaV0ueCAtIHNob3J0ZXN0RGlzdFNvRmFyKSk7CiAgICAgICAgICAgICBpdCAhPSBib3VuZGluZ0JveC5lbmQoKSAmJiBpdC0+eSA8PSBwb2ludHNbaV0ueSArIHNob3J0ZXN0RGlzdFNvRmFyOyBpdCsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGRpc3QoKml0LCBwb2ludHNbaV0pIDwgc2hvcnRlc3REaXN0U29GYXIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNob3J0ZXN0RGlzdFNvRmFyID0gZGlzdCgqaXQsIHBvaW50c1tpXSk7CiAgICAgICAgICAgICAgICBiZXN0MSA9ICppdDsKICAgICAgICAgICAgICAgIGJlc3QyID0gcG9pbnRzW2ldOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGJvdW5kaW5nQm94Lmluc2VydChwb2ludHNbaV0pOwogICAgfQoKICAgIHJldHVybiAwOwp9Cgo=