#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <random>
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef unsigned long long ull;
typedef tree<pair<int, int>, null_type, less<>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
#define AboTaha_on_da_code ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define X first
#define Y second
const int dx[8]={0, 0, 1, -1, 1, -1, -1, 1};
const int dy[8]={1, -1, 0, 0, 1, -1, 1, -1};
const double EPS = 1e-8;
const int mod = 1e9+7;
// BEFORE coding are you sure you understood the statement correctly?
// PLEASE do not forget to read the sample explanation carefully.
// WATCH out for overflows & RTs in general.
// TEST your idea or code on the corner cases.
// ANALYZE each idea you have thoroughly.
const double PI = acos(-1);
void burn(int tc)
{
int n; cin >> n;
vector <pair<int, int>> Ps(n);
for (auto &[x, y] : Ps) cin >> x >> y;
for (int i = 0; i < n; i++) {
int ans = n-1;
auto &p1 = Ps[i];
vector <double> angs;
for (int j = 0; j < n; j++) {
if (j == i) continue;
angs.push_back(fmod(atan2(Ps[j].Y-p1.Y, Ps[j].X-p1.X)+PI*2, PI*2));
}
sort(angs.begin(), angs.end());
int sz = n-1;
for (int j = 0; j < sz; j++) {
angs.push_back(angs[j]+PI*2);
}
for (int j = 0, r = 0; j < 2*sz; j++) {
while(r < 2*sz && angs[r]-angs[j] <= PI) r++;
ans = min(ans, sz-r+j);
}
ans = max(ans, 0);
cout << ans << '\n';
}
}
int main()
{
AboTaha_on_da_code
freopen("bedone.in", "r", stdin);
// freopen("Aout.txt", "w", stdout);
int T = 1; cin >> T;
for (int i = 1; i <= T; i++) {
// cout << "Case " << i << ": ";
burn(i);
// cout << '\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPHJhbmRvbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVsbDsKdHlwZWRlZiB0cmVlPHBhaXI8aW50LCBpbnQ+LCBudWxsX3R5cGUsIGxlc3M8PiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4gb3JkZXJlZF9zZXQ7CiNkZWZpbmUgQWJvVGFoYV9vbl9kYV9jb2RlIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKE5VTEwpOyBjb3V0LnRpZShOVUxMKTsKI2RlZmluZSBYIGZpcnN0CiNkZWZpbmUgWSBzZWNvbmQKCmNvbnN0IGludCBkeFs4XT17MCwgMCwgMSwgLTEsIDEsIC0xLCAtMSwgMX07CmNvbnN0IGludCBkeVs4XT17MSwgLTEsIDAsIDAsIDEsIC0xLCAxLCAtMX07CmNvbnN0IGRvdWJsZSBFUFMgPSAxZS04Owpjb25zdCBpbnQgbW9kID0gMWU5Kzc7Ci8vIEJFRk9SRSBjb2RpbmcgYXJlIHlvdSBzdXJlIHlvdSB1bmRlcnN0b29kIHRoZSBzdGF0ZW1lbnQgY29ycmVjdGx5PwovLyBQTEVBU0UgZG8gbm90IGZvcmdldCB0byByZWFkIHRoZSBzYW1wbGUgZXhwbGFuYXRpb24gY2FyZWZ1bGx5LgovLyBXQVRDSCBvdXQgZm9yIG92ZXJmbG93cyAmIFJUcyBpbiBnZW5lcmFsLgovLyBURVNUIHlvdXIgaWRlYSBvciBjb2RlIG9uIHRoZSBjb3JuZXIgY2FzZXMuCi8vIEFOQUxZWkUgZWFjaCBpZGVhIHlvdSBoYXZlIHRob3JvdWdobHkuCgpjb25zdCBkb3VibGUgUEkgPSBhY29zKC0xKTsKCnZvaWQgYnVybihpbnQgdGMpCnsKICAgIGludCBuOyBjaW4gPj4gbjsKICAgIHZlY3RvciA8cGFpcjxpbnQsIGludD4+IFBzKG4pOwogICAgZm9yIChhdXRvICZbeCwgeV0gOiBQcykgY2luID4+IHggPj4geTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGludCBhbnMgPSBuLTE7CiAgICAgICAgYXV0byAmcDEgPSBQc1tpXTsKICAgICAgICB2ZWN0b3IgPGRvdWJsZT4gYW5nczsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG47IGorKykgewogICAgICAgICAgICBpZiAoaiA9PSBpKSBjb250aW51ZTsKICAgICAgICAgICAgYW5ncy5wdXNoX2JhY2soZm1vZChhdGFuMihQc1tqXS5ZLXAxLlksIFBzW2pdLlgtcDEuWCkrUEkqMiwgUEkqMikpOwogICAgICAgIH0KICAgICAgICBzb3J0KGFuZ3MuYmVnaW4oKSwgYW5ncy5lbmQoKSk7CiAgICAgICAgaW50IHN6ID0gbi0xOwogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3o7IGorKykgewogICAgICAgICAgICBhbmdzLnB1c2hfYmFjayhhbmdzW2pdK1BJKjIpOwogICAgICAgIH0KICAgICAgICBmb3IgKGludCBqID0gMCwgciA9IDA7IGogPCAyKnN6OyBqKyspIHsKICAgICAgICAgICAgd2hpbGUociA8IDIqc3ogJiYgYW5nc1tyXS1hbmdzW2pdIDw9IFBJKSByKys7CiAgICAgICAgICAgIGFucyA9IG1pbihhbnMsIHN6LXIraik7CiAgICAgICAgfQogICAgICAgIGFucyA9IG1heChhbnMsIDApOwogICAgICAgIGNvdXQgPDwgYW5zIDw8ICdcbic7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgQWJvVGFoYV9vbl9kYV9jb2RlCgogICAgICBmcmVvcGVuKCJiZWRvbmUuaW4iLCAiciIsIHN0ZGluKTsKLy8gICAgZnJlb3BlbigiQW91dC50eHQiLCAidyIsIHN0ZG91dCk7CgogICAgaW50IFQgPSAxOyBjaW4gPj4gVDsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBUOyBpKyspIHsKLy8gICAgICAgIGNvdXQgPDwgIkNhc2UgIiA8PCBpIDw8ICI6ICI7CiAgICAgICAgYnVybihpKTsKLy8gICAgICAgIGNvdXQgPDwgJ1xuJzsKICAgIH0KICAgIHJldHVybiAwOwp9