import sys

from collections import deque  # 双方向キュー

from collections import defaultdict  # 初期化済み辞書

from heapq import heapify, heappush, heappop, heappushpop  # プライオリティキュー

from bisect import bisect_left, bisect_right  # 二分探索

#import numpy as np  # 1.8.2

#import scipy  # 0.13.3



s2nn = lambda s: [int(c) for c in s.split(' ')]

ss2nn = lambda ss: [int(s) for s in ss]

ss2nnn = lambda ss: [s2nn(s) for s in ss]

i2s = lambda: sys.stdin.readline().rstrip()

i2n = lambda: int(i2s())

i2nn = lambda: s2nn(i2s())

ii2ss = lambda n: [sys.stdin.readline().rstrip() for _ in range(n)]

ii2nn = lambda n: ss2nn(ii2ss(n))

ii2nnn = lambda n: ss2nnn(ii2ss(n))



def main():

    N = i2n()

    xy = ii2nnn(N)

    if N == 1:

        print((1))

        return

    dic = defaultdict(lambda: 0)

    for i in range(N):

        for j in range(N):

            if i == j:

                continue

            dx = xy[i][0] - xy[j][0]

            dy = xy[i][1] - xy[j][1]

            if dx == 0 and dy == 0:

                continue

            dic[(dx, dy)] += 1

    n = N - max(dic.values())

    print(n)



main()

import sys

s2nn = lambda s: [int(c) for c in s.split(' ')]

ss2nn = lambda ss: [int(s) for s in ss]

ss2nnn = lambda ss: [s2nn(s) for s in ss]

i2s = lambda: sys.stdin.readline().rstrip()

i2n = lambda: int(i2s())

i2nn = lambda: s2nn(i2s())

ii2ss = lambda n: [sys.stdin.readline().rstrip() for _ in range(n)]

ii2sss = lambda n: [list(sys.stdin.readline().rstrip()) for _ in range(n)]

ii2nn = lambda n: ss2nn(ii2ss(n))

ii2nnn = lambda n: ss2nnn(ii2ss(n))



from collections import defaultdict  # 初期化済み辞書



def main():

    N = i2n()

    XY = ii2nnn(N)

    # n <= 50 なので、xy[i] → xy[j] の全ての組み合わせについて、距離を全探索できちゃう

    # 距離 dx, dy をkeyに、その距離の i, j ペアの数をvalueとしてカウント

    d = defaultdict(lambda: 0)

    for i in range(N):

        xi, yi = XY[i]

        for j in range(N):

            if i == j:

                continue

            xj, yj = XY[j]

            dxy = (xj - xi, yj - yi)

            d[dxy] += 1

    # 基本はコストN

    # max(value) だけコストを減らせる

    n = N

    dv = list(d.values())

    if dv:

        n -= max(d.values())

    print(n)



main()

import sys
from collections import deque  # 双方向キュー
from collections import defaultdict  # 初期化済み辞書
from heapq import heapify, heappush, heappop, heappushpop  # プライオリティキュー
from bisect import bisect_left, bisect_right  # 二分探索

# import numpy as np  # 1.8.2
# import scipy  # 0.13.3
s2nn = lambda s: [int(c) for c in s.split(" ")]
ss2nn = lambda ss: [int(s) for s in ss]
ss2nnn = lambda ss: [s2nn(s) for s in ss]
i2s = lambda: sys.stdin.readline().rstrip()
i2n = lambda: int(i2s())
i2nn = lambda: s2nn(i2s())
ii2ss = lambda n: [sys.stdin.readline().rstrip() for _ in range(n)]
ii2nn = lambda n: ss2nn(ii2ss(n))
ii2nnn = lambda n: ss2nnn(ii2ss(n))


def main():
    N = i2n()
    xy = ii2nnn(N)
    if N == 1:
        print((1))
        return
    dic = defaultdict(lambda: 0)
    for i in range(N):
        for j in range(N):
            if i == j:
                continue
            dx = xy[i][0] - xy[j][0]
            dy = xy[i][1] - xy[j][1]
            if dx == 0 and dy == 0:
                continue
            dic[(dx, dy)] += 1
    n = N - max(dic.values())
    print(n)


main()

import sys

s2nn = lambda s: [int(c) for c in s.split(" ")]
ss2nn = lambda ss: [int(s) for s in ss]
ss2nnn = lambda ss: [s2nn(s) for s in ss]
i2s = lambda: sys.stdin.readline().rstrip()
i2n = lambda: int(i2s())
i2nn = lambda: s2nn(i2s())
ii2ss = lambda n: [sys.stdin.readline().rstrip() for _ in range(n)]
ii2sss = lambda n: [list(sys.stdin.readline().rstrip()) for _ in range(n)]
ii2nn = lambda n: ss2nn(ii2ss(n))
ii2nnn = lambda n: ss2nnn(ii2ss(n))
from collections import defaultdict  # 初期化済み辞書


def main():
    N = i2n()
    XY = ii2nnn(N)
    # n <= 50 なので、xy[i] → xy[j] の全ての組み合わせについて、距離を全探索できちゃう
    # 距離 dx, dy をkeyに、その距離の i, j ペアの数をvalueとしてカウント
    d = defaultdict(lambda: 0)
    for i in range(N):
        xi, yi = XY[i]
        for j in range(N):
            if i == j:
                continue
            xj, yj = XY[j]
            dxy = (xj - xi, yj - yi)
            d[dxy] += 1
    # 基本はコストN
    # max(value) だけコストを減らせる
    n = N
    dv = list(d.values())
    if dv:
        n -= max(d.values())
    print(n)


main()

-from collections import deque  # 双方向キュー -from collections import defaultdict  # 初期化済み辞書 -from heapq import heapify, heappush, heappop, heappushpop  # プライオリティキュー -from bisect import bisect_left, bisect_right  # 二分探索 -# import numpy as np  # 1.8.2 -# import scipy  # 0.13.3 +ii2sss = lambda n: [list(sys.stdin.readline().rstrip()) for _ in range(n)] +from collections import defaultdict  # 初期化済み辞書 -    xy = ii2nnn(N) -    if N == 1: -        print((1)) -        return -    dic = defaultdict(lambda: 0) +    XY = ii2nnn(N) +    # n <= 50 なので、xy[i] → xy[j] の全ての組み合わせについて、距離を全探索できちゃう +    # 距離 dx, dy をkeyに、その距離の i, j ペアの数をvalueとしてカウント +    d = defaultdict(lambda: 0) +        xi, yi = XY[i] -            dx = xy[i][0] - xy[j][0] -            dy = xy[i][1] - xy[j][1] -            if dx == 0 and dy == 0: -                continue -            dic[(dx, dy)] += 1 -    n = N - max(dic.values()) +            xj, yj = XY[j] +            dxy = (xj - xi, yj - yi) +            d[dxy] += 1 +    # 基本はコストN +    # max(value) だけコストを減らせる +    n = N +    dv = list(d.values()) +    if dv: +        n -= max(d.values())