#include <bits/stdc++.h>   using namespace std;   const int MOD = 1e9 + 7;   const long double PI = 3.141592653589793238462643383279502884197;   long long fac[1] = {1}, inv[1] = {1};   long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }   long long mp(long long a, long long b) {     long long ret = 1;     while (b) {       if (b & 1) ret = ret * a % MOD;       a = a * a % MOD;       b >>= 1;     }     return ret;   }   long long cmb(long long r, long long c) {     return (c > r || c < 0) ? 0 : fac[r] * inv[c] % MOD * inv[r - c] % MOD;   }   pair<int, int> vec[6000];   int cnt[2][2];   int main() {     int n;     scanf( %d , &n);     for (int i = 0; i < n; i++) {       scanf( %d %d , &vec[i].first, &vec[i].second);       vec[i].first /= 2;       vec[i].second /= 2;       vec[i].first %= 2;       vec[i].second %= 2;       cnt[vec[i].first][vec[i].second]++;     }     long long ans = 0;     for (int i = 0; i < n; i++) {       for (int j = 0; j < n; j++) {         if (i == j) continue;         int g = 0;         if (vec[i].first != vec[j].first) g = 1;         if (vec[i].second != vec[j].second) g = 1;         for (int q = 0; q < 2; q++) {           for (int w = 0; w < 2; w++) {             int a = 0, b = 0;             if (q != vec[i].first || w != vec[i].second) a = 1;             if (q != vec[j].first || w != vec[j].second) b = 1;             if ((a ^ b ^ g) == 0) ans += cnt[q][w] - !a - !b;           }         }       }     }     printf( %lld n , ans / 6);   }   