#include <cstdlib>
#include <cmath>
#include <climits>
#include <cfloat>
#include <map>
#include <set>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iterator>
#include <bitset>
#include <unordered_set>
#include <unordered_map>
#include <fstream>
#include <iomanip>
#include <cassert>
#include <utility>
#include <memory>
#include <functional>
#include <deque>
#include <cctype>
#include <ctime>
#include <numeric>
#include <list>
#include <iomanip>
 
#if __cplusplus >= 201103L
#include <array>
#include <tuple>
#include <initializer_list>
#include <forward_list>
 
#define cauto const auto&
#else
 
#endif
 
using namespace std;
 
 
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
 
typedef vector<int> vint;
typedef vector<vector<int> > vvint;
typedef vector<long long> vll;
typedef vector<vector<long long> > vvll;
 
#define VV(T) vector<vector< T > >
 
template <class T>
void initvv(vector<vector<T> > &v, int a, int b, const T &t = T()){
    v.assign(a, vector<T>(b, t));
}
 
template <class F, class T>
void convert(const F &f, T &t){
    stringstream ss;
    ss << f;
    ss >> t;
}
 
#define GET_MACRO(_1, _2, _3, NAME, ...) NAME
#define _rep(i,n) _rep2((i),0,(n))
#define _rep2(i,a,b) for(int i=(a);i<(b);++i)
#define rep(...) GET_MACRO(__VA_ARGS__, _rep2, _rep)(__VA_ARGS__)
#define ALL(v) (v).begin(),(v).end()
#define PB push_back
#define fi first
#define se second
#define mkp make_pair
#define DEBUG
#ifdef DEBUG
#define dump(x)  cout << #x << " = " << (x) << endl;
#define debug(x) cout << #x << " = " << (x) << " (L" << __LINE__ << ")" << " " << __FILE__ << endl;
#else
#define dump(x) 
#define debug(x) 
#endif
 
#define MOD 1000000007LL
#define EPS 1e-8
#define INF 0x3f3f3f3f
#define INFL 0x3f3f3f3f3f3f3f3fLL
#define maxs(x,y) x=max(x,y)
#define mins(x,y) x=min(x,y)


int main() {
    int N;
    cin >> N;
    vector<pii> v(N);
    rep(i, N) {
        cin >> v[i].fi >> v[i].se;
    }

    int ans = 0;
    set<pii> se;
    rep(i, N) {
        se.insert(v[i]);
    }
    rep(i, N) {
        rep(j, N) {
            if (i == j) continue;
            pii a;
            a.fi = v[i].fi - v[j].fi;
            a.se = v[i].se - v[j].se;
            int cnt = 0;

            rep(k, N) {
                if (se.find(pii(v[k].fi - a.fi, v[k].se - a.se)) != se.end()) {
                    cnt++;
                }
            }

            maxs(ans, cnt);
            continue;

            pii b = v[i];
            b.fi += a.fi;
            b.se += a.se;
            while(1) {
                bool f = false;
                rep(k, N) {
                    if(b == v[k]) {
                        f = true;
                    }
                }
                if(!f) break;
                cnt++;
                b.fi += a.fi;
                b.se += a.se;
            }
            b = v[i];
            b.fi -= a.fi;
            b.se -= a.se;
            while(1) {
                bool f = false;
                rep(k, N) {
                    if(b == v[k]) {
                        f = true;
                    }
                }
                if(!f) break;
                cnt++;
                b.fi -= a.fi;
                b.se -= a.se;
            }
            maxs(ans, cnt);
        }
    }
    cout << N - ans << endl;
}

Measured memory_bytes: 256