#include #include #include using namespace std; #define RANGE 201 int main() { //FILE *fp; //fp = fopen("o.in", "r"); int t = 0; int n = 0; //fscanf(fp,"%d", &t); scanf("%d", &t); while (t > 0) { int ans = 0; int X[RANGE][RANGE] = {0}; int Y[RANGE][RANGE] = {0}; int minX[RANGE] = {0}; int maxX[RANGE] = {0}; int minY[RANGE] = {0}; int maxY[RANGE] = {0}; int countX[RANGE] = {0}; int countY[RANGE] = {0}; int grstX[RANGE] = {0}; int grstY[RANGE] = {0}; vector grX, grY; //fscanf(fp,"%d", &n); scanf("%d", &n); for (int p = 0; p < n; p++) { int x = 0, y = 0; //fscanf(fp,"%d%d", &x, &y); scanf("%d%d", &x, &y); x = x + 100; y = y + 100; if (countX[x] == 0) { minX[x] = y; maxX[x] = y; } else { minX[x] = (minX[x] > y ? y : minX[x]); maxX[x] = (maxX[x] < y ? y : maxX[x]); } if (countY[y] == 0) { minY[y] = x; maxY[y] = x; } else { minY[y] = (minY[y] > x ? x : minY[y]); maxY[y] = (maxY[y] < x ? x : maxY[y]); } if (X[x][y] == 0) { countX[x]++; } if (Y[y][x] == 0) { countY[y]++; } X[x][y]++; Y[y][x]++; if ((countX[x] >= 2) && grstX[x] == 0) { grstX[x] = 1; grX.push_back(x);//new Integer(x)); } if ((countY[y] >= 2) && grstY[y] == 0) { grstY[y] = 1; grY.push_back(y); //new Integer(y)); } } for (int k = 0; k< grX.size(); k++) { int ex = grX[k]; // System.out.println("Group X " + ex); for (int j = 0; j 0) { continue; } if ((minY[ey] < ex) && (ex < maxY[ey]) && (ey < maxX[ex]) && (minX[ex] < ey)) { //System.out.println(ex + " , " + ey); ans++; } } } printf("%d\n", ans); t--; } }