#include #include #define foreach(T,p,c) for(T p = (c).begin(); p != (c).end(); p++) #define NW_SE(x,y) nw_se[(x)+(y)] #define NE_SW(x,y) ne_sw[(x)-(y)+(n-1)] using namespace std; int main(void) { int n; cin >> n; int y[50]; bool nw_se[99], ne_sw[99]; fill_n(y, n, -1); fill_n(nw_se, n * 2 - 1, false); fill_n(ne_sw, n * 2 - 1, false); for(int i = 0; i < n; i++) { int u, v; cin >> u >> v; --u, --v; if(y[u] >= 0 || NW_SE(u,v) || NE_SW(u,v)) u /= (u - u); y[u] = v; NW_SE(u,v) = NE_SW(u,v) = true; } int m = 0; for(int i = 0; i < n; i++) { NW_SE(i,y[i]) = NE_SW(i,y[i]) = false; for(int j = i + 1; j < n; j++) { NW_SE(j,y[j]) = NE_SW(j,y[j]) = false; for(int k = j + 1; k < n; k++) { NW_SE(k,y[k]) = NE_SW(k,y[k]) = false; if(!NW_SE(i,y[j]) && !NE_SW(i,y[j])) { NW_SE(i,y[j]) = NE_SW(i,y[j]) = true; if(!NW_SE(j,y[k]) && !NE_SW(j,y[k])) { NW_SE(j,y[k]) = NE_SW(j,y[k]) = true; if(!NW_SE(k,y[i]) && !NE_SW(k,y[i])) ++m; NW_SE(j,y[k]) = NE_SW(j,y[k]) = false; } NW_SE(i,y[j]) = NE_SW(i,y[j]) = false; } if(!NW_SE(i,y[k]) && !NE_SW(i,y[k])) { NW_SE(i,y[k]) = NE_SW(i,y[k]) = true; if(!NW_SE(j,y[i]) && !NE_SW(j,y[i])) { NW_SE(j,y[i]) = NE_SW(j,y[i]) = true; if(!NW_SE(k,y[j]) && !NE_SW(k,y[j])) ++m; NW_SE(j,y[i]) = NE_SW(j,y[i]) = false; } NW_SE(i,y[k]) = NE_SW(i,y[k]) = false; } NW_SE(k,y[k]) = NE_SW(k,y[k]) = true; } NW_SE(j,y[j]) = NE_SW(j,y[j]) = true; } NW_SE(i,y[i]) = NE_SW(i,y[i]) = true; } cout << m << endl; return 0; }