func_code_string: #include <bits/stdc++.h>   char _;   using namespace std;   int N, C, D;   pair<int, int> A[400000];   long long Z, ZO, ZOZ, O, OZ, OZO;   inline bool cmp(const pair<int, int>& a, const pair<int, int>& b) {     if ((b.second < 0) ^ (a.second < 0))       return 1LL * a.first * b.second > 1LL * b.first * a.second;     return 1LL * a.first * b.second < 1LL * b.first * a.second;   }   inline bool eq(const pair<int, int>& a, const pair<int, int>& b) {     return 1LL * a.first * b.second == 1LL * b.first * a.second;   }   int main() {     do {       while ((N = getchar()) <  0 )         ;       for (N -=  0 ;  0  <= (_ = getchar()); N = (N << 3) + (N << 1) + _ -  0 )         ;     } while (0);     do {       while ((C = getchar()) <  0 )         ;       for (C -=  0 ;  0  <= (_ = getchar()); C = (C << 3) + (C << 1) + _ -  0 )         ;     } while (0);     do {       while ((D = getchar()) <  0 )         ;       for (D -=  0 ;  0  <= (_ = getchar()); D = (D << 3) + (D << 1) + _ -  0 )         ;     } while (0);     for (int i = 0; i < N; i++) {       do {         while ((A[i].first = getchar()) <  0 )           ;         for (A[i].first -=  0 ;  0  <= (_ = getchar());              A[i].first = (A[i].first << 3) + (A[i].first << 1) + _ -  0 )           ;       } while (0);       do {         while ((A[i].second = getchar()) <  0 )           ;         for (A[i].second -=  0 ;  0  <= (_ = getchar());              A[i].second = (A[i].second << 3) + (A[i].second << 1) + _ -  0 )           ;       } while (0);       A[i].first -= C, A[i].second -= D;     }     sort(A, A + N, cmp);     for (int i = 0, j; i < N; i = j) {       long long NZ = Z, NZO = ZO, NZOZ = ZOZ, NO = O, NOZ = OZ, NOZO = OZO;       for (j = i; j < N && eq(A[i], A[j]); j++) {         if (A[j].second < 0) {           NOZO += OZ;           NZO += Z;           NO++;         } else {           NZOZ += ZO;           NOZ += O;           NZ++;         }       }       Z = NZ, ZO = NZO, ZOZ = NZOZ, O = NO, OZ = NOZ, OZO = NOZO;     }     int L = 0, R = 0, D = 0;     for (int i = 0; i < N; i++)       if (A[i].second == 0) {         if (A[i].first < 0)           L++;         else           R++;       }     for (int i = 0; i < N; i++)       if (A[i].second < 0) D++;     printf( %lld n , OZO + ZOZ - 1LL * L * R * D);     return 0;   }   