#pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include #include #define rep(i, a, b) for (ll i = (ll)(a); i < (ll)(b); i++) using namespace atcoder; using namespace std; typedef long long ll; template vector> convex_hull(vector> pts) { // https://atcoder.jp/contests/typical90/submissions/71641592 if (pts.size() <= 1) return pts; sort(pts.begin(), pts.end()); pts.erase(unique(pts.begin(), pts.end()), pts.end()); if (pts.size() <= 2) return pts; auto cross = [](auto const &a, auto const &b, auto const &c) { return (b.first - a.first) * (c.second - a.second) - (b.second - a.second) * (c.first - a.first); }; vector> hull; hull.reserve(pts.size() * 2); for (auto const &p : pts) { while (hull.size() >= 2 && cross(hull[hull.size() - 2], hull[hull.size() - 1], p) <= 0) { hull.pop_back(); } hull.push_back(p); } size_t lower_size = hull.size(); for (auto it = pts.rbegin(); it != pts.rend(); ++it) { while (hull.size() >= lower_size + 1 && cross(hull[hull.size() - 2], hull[hull.size() - 1], *it) <= 0) { hull.pop_back(); } hull.push_back(*it); } hull.pop_back(); return hull; } unordered_map ma; const ll M = 5e9; ll f(pair p) { return p.first * M + p.second; } void solve() { ma.clear(); int n; cin >> n; vector> p(n); rep(i, 0, n) { ll x, y; cin >> x >> y; p[i] = {x, y}; } auto v = convex_hull(p); int m = v.size(); rep(i, 0, n) ma[f(p[i])] = i; vector ex(n), ansx(n), ansy(n); auto valid = [&](int id, pair q) { ll tar = p[id].first * q.first + p[id].second * q.second; rep(i, 0, n) { if (i == id) continue; ll val = p[i].first * q.first + p[i].second * q.second; if (val >= tar) return 0; } return 1; }; if (v.size() == 2) { rep(i, 0, m) { int id = ma[f(v[i])]; rep(k, 0, 4) { int x = "0211"[k] - '1'; int y = "1120"[k] - '1'; if (valid(id, {x, y})) { ex[id] = 1; ansx[id] = x; ansy[id] = y; break; } } } } else { rep(i, 0, m) { int pi = (i - 1 + m) % m; int ni = (i + 1 + m) % m; ll dx = v[ni].first - v[pi].first; ll dy = v[ni].second - v[pi].second; int id = ma[f(v[i])]; ex[id] = 1; ansx[id] = dy; ansy[id] = -dx; } } rep(i, 0, n) { if (ex[i]) { cout << ansx[i] << ' ' << ansy[i] << '\n'; } else { cout << "No\n"; } } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(15); int t; cin >> t; while (t--) solve(); }