# def find_next(number, p, q, x, y, load, max)
#   max_load = Array.new
#   number.times do |n|
#     next if load.include?(n)
#     # puts "load.last: #{load.last}"
#     # puts "#{x[load.last]}, #{y[load.last]}"
#     # puts "#{x[n]}, #{y[n]}"
#     if((x[load.last] - p == x[n]) && (y[load.last] - q == y[n]))
#       load.push(n)
#       # puts "find next"
#       # puts n
#       if max < load.length
#         max = load.length
#         max_load = load.dup
#       end
#       # puts "max: #{max}"
#       if max >= find_next(number, p, q, x, y, load, max)[0]
#         # puts("pop")
#         load.pop
#       end
#     end
#   end
#   return [max, max_load]
# end

N = gets.to_i
x, y = N.times.map{gets.split.map(&:to_i)}.transpose

hash = Hash.new

N.times do |i|
  N.times do |j|
    next if i == j
    # puts "compare #{i} and #{j}"
    new_x = x[i] - x[j]
    new_y = y[i] - y[j]
    hash["#{new_x} #{new_y}"] ||= 0
    hash["#{new_x} #{new_y}"] += 1
  end
end

# hash.sort{|a, b| b[1] <=> a[1]}
# puts hash
# max = 0
# hash.each do |key, value|
#   p, q = key.split.map(&:to_i)
#   N.times do |i|
#     # puts "i:#{i}"
#     # i からスタート
#     load = Array.new
#     load.push(i)
#     tmp_max = 0
#     tmp_max, tmp_load = find_next(N, p, q, x, y, load, tmp_max)
#
#     if max < tmp_max
#       # puts "p: #{p}, q: #{q}"
#       # puts "tmp_load"
#       # puts tmp_load
#       # puts "ここまで"
#       # puts "tmp_max #{tmp_max}"
#       max = tmp_max
#     end
#   end
# end
puts N - (hash.values.max || 0)
