1052
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <math.h>
#include <limits.h>
 
using namespace std;
 
// Datatypes
typedef vector<int> vi; 
typedef vector<string> vs;
typedef vector<vi> vvi; 
typedef pair<int,int> ii; 
typedef long long ll;
typedef long double ld;
 
// Define
#define sz(a)             int((a).size()) 
#define pb                push_back 
#define all(c)            (c).begin(),(c).end() 
#define present(c,x)      ((c).find(x) != (c).end()) 
#define cpresent(c,x)     (find(all(c),x) != (c).end()) 
#define FOR(_i,_n)        for(int (_i) = 0; (_i) < (_n); (_i)++)
#define mp                make_pair
 
struct point
{
    int x,y;
};
 
struct line
{
    int a,b,c;
};
 
void buildLine(point& a, point& b, line &l)
{
    l.a = a.y - b.y;
    l.b = b.x - a.x;
    l.c = -l.a*a.x - l.b*a.y;
}
 
bool onLine(point& a, line& l)
{
    if((l.a*a.x + l.b*a.y + l.c) == 0)
        return true;
    else
        return false;
}
 
int main(void)
{
    int n;
    point m[200];
    int s[200][200] = {0};
 
    cin >> n;
 
    FOR(i,n)
        cin >> m[i].x >> m[i].y;
 
    FOR(i,n)
    {
        FOR(j,n)
        {
            if(i == j) continue;
 
            line l;
            bool p = false;
 
            s[i][j] = 2;
 
            if((m[i].x == m[j].x) && (m[i].y == m[j].y))
                p = true;
 
            if(!p)
                buildLine(m[i], m[j], l);
 
            FOR(t,n)
            {
                if((t == i) || (t == j)) continue;
                if(p)
                {
                    if((m[i].x == m[t].x) && (m[i].y == m[t].y))
                        s[i][j]++;
                }
                else
                {
                    if(onLine(m[t], l))
                        s[i][j]++;
                }
            }
        }
    }
 
    int r = 0;
    FOR(i, n)
    {
        FOR(j,n)
        {
            r = max(r,s[i][j]);
        }
    }
 
    cout << r;
 
    return 0;
}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.