N = int(eval(input()))

XY = sorted([tuple(map(int, input().split())) for _ in range(N)])

PQ = []

for i in range(N-1):

    for j in range(i, N):

        PQ.append((XY[j][0]-XY[i][0], XY[j][1]-XY[i][1]))

PQ = list(set(PQ))

ans = N

for p, q in PQ:

    tmp1 = 1

    check=[0]*N

    for i in range(N-1):

        if check[i]:

            continue

        else:

            check[i] = 1

            tmp2 = 1

        for j in range(i, N):

            if check[j]:

                continue

            else:

                if XY[j][0] - p == XY[i][0] and XY[j][1] - q == XY[i][1]:

                    check[j] == 1

                    tmp2 = 0

                    break

        tmp1 += tmp2        

    ans = min(ans, tmp1)

print(ans)





        





    

from collections import deque

from collections import defaultdict

from copy import copy

N = int(eval(input()))

XY = list(sorted([tuple(map(int, input().split())) for _ in range(N)]))

PQ = []

for i in range(N-1):

    for j in range(i, N):

        PQ.append((XY[j][0]-XY[i][0], XY[j][1]-XY[i][1]))

PQ = list(set(PQ))

ans = N

for p, q in PQ:

    tmp1 = 1

    T = deque(copy(XY))

    x, y = T.popleft()

    cnt = 1

    while cnt < N:

        tmp2 = 1

        for s, t in T:

            if s - p == x and t - q == y:

                tmp2 = 0

                break

        if tmp2:

            x, y = T.popleft()

        else:

            T.remove((s, t))

            x, y = s, t

        tmp1 += tmp2

        cnt += 1      

    ans = min(ans, tmp1)

print(ans)





        





    

N = int(eval(input()))
XY = sorted([tuple(map(int, input().split())) for _ in range(N)])
PQ = []
for i in range(N - 1):
    for j in range(i, N):
        PQ.append((XY[j][0] - XY[i][0], XY[j][1] - XY[i][1]))
PQ = list(set(PQ))
ans = N
for p, q in PQ:
    tmp1 = 1
    check = [0] * N
    for i in range(N - 1):
        if check[i]:
            continue
        else:
            check[i] = 1
            tmp2 = 1
        for j in range(i, N):
            if check[j]:
                continue
            else:
                if XY[j][0] - p == XY[i][0] and XY[j][1] - q == XY[i][1]:
                    check[j] == 1
                    tmp2 = 0
                    break
        tmp1 += tmp2
    ans = min(ans, tmp1)
print(ans)

from collections import deque
from collections import defaultdict
from copy import copy

N = int(eval(input()))
XY = list(sorted([tuple(map(int, input().split())) for _ in range(N)]))
PQ = []
for i in range(N - 1):
    for j in range(i, N):
        PQ.append((XY[j][0] - XY[i][0], XY[j][1] - XY[i][1]))
PQ = list(set(PQ))
ans = N
for p, q in PQ:
    tmp1 = 1
    T = deque(copy(XY))
    x, y = T.popleft()
    cnt = 1
    while cnt < N:
        tmp2 = 1
        for s, t in T:
            if s - p == x and t - q == y:
                tmp2 = 0
                break
        if tmp2:
            x, y = T.popleft()
        else:
            T.remove((s, t))
            x, y = s, t
        tmp1 += tmp2
        cnt += 1
    ans = min(ans, tmp1)
print(ans)

+from collections import deque +from collections import defaultdict +from copy import copy + -XY = sorted([tuple(map(int, input().split())) for _ in range(N)]) +XY = list(sorted([tuple(map(int, input().split())) for _ in range(N)])) -    check = [0] * N -    for i in range(N - 1): -        if check[i]: -            continue +    T = deque(copy(XY)) +    x, y = T.popleft() +    cnt = 1 +    while cnt < N: +        tmp2 = 1 +        for s, t in T: +            if s - p == x and t - q == y: +                tmp2 = 0 +                break +        if tmp2: +            x, y = T.popleft() -            check[i] = 1 -            tmp2 = 1 -        for j in range(i, N): -            if check[j]: -                continue -            else: -                if XY[j][0] - p == XY[i][0] and XY[j][1] - q == XY[i][1]: -                    check[j] == 1 -                    tmp2 = 0 -                    break +            T.remove((s, t)) +            x, y = s, t +        cnt += 1