#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
struct Point {
int val[2];
Point() {}
void scan(int d = 2) {
for(int i = 0 ; i < d ; i++) {
int x;
scanf("%d", &x);
val[i] = x;
}
}
int operator *(Point other) const {
int ret = 0;
for(int i = 0 ; i < 2 ; i++) {
ret += val[i] * other.val[i];
}
return ret;
}
long long get_dist(Point other) {
long long ret = 0;
for(int i = 0 ; i < 2 ; i++) {
ret += 1ll * (val[i] - other.val[i]) * (val[i] - other.val[i]);
}
return ret;
}
};
struct KDTree {
vector<Point> points;
int dim;
KDTree(int _d = 1) {
dim = _d;
points.clear();
}
int get_size() {
return points.size();
}
void add(vector<Point> v) {
for(Point x : v) {
points.push_back(x);
}
}
void build() {
build(0, 0, points.size());
}
void build(int depth, int l, int r) {
if(l >= r) {
return;
}
int modd = depth % dim;
int mid = (l + r) / 2;
nth_element(points.begin() + l, points.begin() + mid, points.begin() + r, [&](Point a, Point b) {
return a.val[modd] < b.val[modd];
});
build(depth + 1, l, mid);
build(depth + 1, mid+1, r);
}
void query(int depth, int l, int r, Point tgt, long long &best) {
if(l >= r) {
return;
}
int modd = depth % dim;
int mid = (l + r) / 2;
long long cur = tgt.get_dist(points[mid]);
if(cur > 0)
best = min(best, cur);
int l1 = l;
int r1 = mid;
int l2 = mid+1;
int r2 = r;
if(tgt.val[modd] > points[mid].val[modd]) {
swap(l1, l2);
swap(r1, r2);
}
query(depth+1, l1, r1, tgt, best);
int delta = tgt.val[modd] - points[mid].val[modd];
long long delta2 = 1ll * delta * delta;
if(delta2 < best) {
query(depth+1, l2, r2, tgt, best);
}
}
long long query(Point tgt) {
long long ret = 4e18;
query(0, 0, points.size(), tgt, ret);
return ret;
}
};
KDTree tree;
int n;
vector<Point> arr;
void read() {
scanf("%d", &n);
arr.clear();
arr.resize(n);
for(int i = 0 ; i < n ; i++) {
arr[i].scan(2);
}
}
void init() {
tree = KDTree(2);
tree.add(arr);
tree.build();
}
long long query(Point p) {
return tree.query(p);
}
void work() {
for(int i = 0 ; i < n ; i++) {
printf("%lld\n", query(arr[i]));
}
}
int main() {
int t;
scanf("%d", &t);
for(int tc = 1 ; tc <= t ; tc++) {
read();
init();
work();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDFlNSArIDU7CgpzdHJ1Y3QgUG9pbnQgewogICAgaW50IHZhbFsyXTsKCiAgICBQb2ludCgpIHt9CgogICAgdm9pZCBzY2FuKGludCBkID0gMikgewogICAgICAgIGZvcihpbnQgaSA9IDAgOyBpIDwgZCA7IGkrKykgewogICAgICAgICAgICBpbnQgeDsKICAgICAgICAgICAgc2NhbmYoIiVkIiwgJngpOwogICAgICAgICAgICB2YWxbaV0gPSB4OwogICAgICAgIH0KICAgIH0KCiAgICBpbnQgb3BlcmF0b3IgKihQb2ludCBvdGhlcikgY29uc3QgewogICAgICAgIGludCByZXQgPSAwOwogICAgICAgIGZvcihpbnQgaSA9IDAgOyBpIDwgMiA7IGkrKykgewogICAgICAgICAgICByZXQgKz0gdmFsW2ldICogb3RoZXIudmFsW2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgfQoKICAgIGxvbmcgbG9uZyBnZXRfZGlzdChQb2ludCBvdGhlcikgewogICAgICAgIGxvbmcgbG9uZyByZXQgPSAwOwogICAgICAgIGZvcihpbnQgaSA9IDAgOyBpIDwgMiA7IGkrKykgewogICAgICAgICAgICByZXQgKz0gMWxsICogKHZhbFtpXSAtIG90aGVyLnZhbFtpXSkgKiAodmFsW2ldIC0gb3RoZXIudmFsW2ldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgIH0KfTsKCnN0cnVjdCBLRFRyZWUgewogICAgdmVjdG9yPFBvaW50PiBwb2ludHM7CiAgICBpbnQgZGltOwoKICAgIEtEVHJlZShpbnQgX2QgPSAxKSB7CiAgICAgICAgZGltID0gX2Q7CiAgICAgICAgcG9pbnRzLmNsZWFyKCk7CiAgICB9CgogICAgaW50IGdldF9zaXplKCkgewogICAgICAgIHJldHVybiBwb2ludHMuc2l6ZSgpOwogICAgfQoKICAgIHZvaWQgYWRkKHZlY3RvcjxQb2ludD4gdikgewogICAgICAgIGZvcihQb2ludCB4IDogdikgewogICAgICAgICAgICBwb2ludHMucHVzaF9iYWNrKHgpOwogICAgICAgIH0KICAgIH0KCiAgICB2b2lkIGJ1aWxkKCkgewogICAgICAgIGJ1aWxkKDAsIDAsIHBvaW50cy5zaXplKCkpOwogICAgfQoKICAgIHZvaWQgYnVpbGQoaW50IGRlcHRoLCBpbnQgbCwgaW50IHIpIHsKICAgICAgICBpZihsID49IHIpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaW50IG1vZGQgPSBkZXB0aCAlIGRpbTsKICAgICAgICBpbnQgbWlkID0gKGwgKyByKSAvIDI7CiAgICAgICAgbnRoX2VsZW1lbnQocG9pbnRzLmJlZ2luKCkgKyBsLCBwb2ludHMuYmVnaW4oKSArIG1pZCwgcG9pbnRzLmJlZ2luKCkgKyByLCBbJl0oUG9pbnQgYSwgUG9pbnQgYikgewogICAgICAgICAgICByZXR1cm4gYS52YWxbbW9kZF0gPCBiLnZhbFttb2RkXTsKICAgICAgICB9KTsKCiAgICAgICAgYnVpbGQoZGVwdGggKyAxLCBsLCBtaWQpOwogICAgICAgIGJ1aWxkKGRlcHRoICsgMSwgbWlkKzEsIHIpOwogICAgfQoKICAgIHZvaWQgcXVlcnkoaW50IGRlcHRoLCBpbnQgbCwgaW50IHIsIFBvaW50IHRndCwgbG9uZyBsb25nICZiZXN0KSB7CiAgICAgICAgaWYobCA+PSByKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGludCBtb2RkID0gZGVwdGggJSBkaW07CiAgICAgICAgaW50IG1pZCA9IChsICsgcikgLyAyOwogICAgICAgIGxvbmcgbG9uZyBjdXIgPSB0Z3QuZ2V0X2Rpc3QocG9pbnRzW21pZF0pOwoKICAgICAgICBpZihjdXIgPiAwKQogICAgICAgICAgICBiZXN0ID0gbWluKGJlc3QsIGN1cik7CgogICAgICAgIGludCBsMSA9IGw7CiAgICAgICAgaW50IHIxID0gbWlkOwogICAgICAgIGludCBsMiA9IG1pZCsxOwogICAgICAgIGludCByMiA9IHI7CgogICAgICAgIGlmKHRndC52YWxbbW9kZF0gPiBwb2ludHNbbWlkXS52YWxbbW9kZF0pIHsKICAgICAgICAgICAgc3dhcChsMSwgbDIpOwogICAgICAgICAgICBzd2FwKHIxLCByMik7CiAgICAgICAgfQoKICAgICAgICBxdWVyeShkZXB0aCsxLCBsMSwgcjEsIHRndCwgYmVzdCk7CgogICAgICAgIGludCBkZWx0YSA9IHRndC52YWxbbW9kZF0gLSBwb2ludHNbbWlkXS52YWxbbW9kZF07CiAgICAgICAgbG9uZyBsb25nIGRlbHRhMiA9IDFsbCAqIGRlbHRhICogZGVsdGE7CgogICAgICAgIGlmKGRlbHRhMiA8IGJlc3QpIHsKICAgICAgICAgICAgcXVlcnkoZGVwdGgrMSwgbDIsIHIyLCB0Z3QsIGJlc3QpOwogICAgICAgIH0KICAgIH0KCiAgICBsb25nIGxvbmcgcXVlcnkoUG9pbnQgdGd0KSB7CiAgICAgICAgbG9uZyBsb25nIHJldCA9IDRlMTg7CgogICAgICAgIHF1ZXJ5KDAsIDAsIHBvaW50cy5zaXplKCksIHRndCwgcmV0KTsKCiAgICAgICAgcmV0dXJuIHJldDsKICAgIH0KfTsKCktEVHJlZSB0cmVlOwppbnQgbjsKdmVjdG9yPFBvaW50PiBhcnI7Cgp2b2lkIHJlYWQoKSB7CiAgICBzY2FuZigiJWQiLCAmbik7CiAgICBhcnIuY2xlYXIoKTsKICAgIGFyci5yZXNpemUobik7CiAgICBmb3IoaW50IGkgPSAwIDsgaSA8IG4gOyBpKyspIHsKICAgICAgICBhcnJbaV0uc2NhbigyKTsKICAgIH0KfQoKdm9pZCBpbml0KCkgewogICAgdHJlZSA9IEtEVHJlZSgyKTsKICAgIHRyZWUuYWRkKGFycik7CiAgICB0cmVlLmJ1aWxkKCk7Cn0KCmxvbmcgbG9uZyBxdWVyeShQb2ludCBwKSB7CiAgICByZXR1cm4gdHJlZS5xdWVyeShwKTsKfQoKdm9pZCB3b3JrKCkgewogICAgZm9yKGludCBpID0gMCA7IGkgPCBuIDsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIlbGxkXG4iLCBxdWVyeShhcnJbaV0pKTsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpbnQgdDsKICAgIHNjYW5mKCIlZCIsICZ0KTsKCiAgICBmb3IoaW50IHRjID0gMSA7IHRjIDw9IHQgOyB0YysrKSB7CiAgICAgICAgcmVhZCgpOwogICAgICAgIGluaXQoKTsKICAgICAgICB3b3JrKCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==