def finish?(flag)
  flag.each do |f|
    return false unless f
  end
  return true
end

def main(argv)
  n = gets.chomp.to_i
  
  x = [0] * n
  y = [0] * n
  n.times do |i|
    (x[i], y[i]) = gets.chomp.split(' ').map(&:to_i)
  end
  
  table = [nil] * n
  n.times do |i|
    table[i] = [nil] * n
  end
  
  n.times do |i|
    n.times do |j|
      next if i == j
      
      table[i][j] = [j]
      
      px = x[j] - x[i]
      py = y[j] - y[i]
      
      n.times do |k|
        next if (i == k) || (j == k)
        
        qx = x[k] - x[i]
        qy = y[k] - y[i]
        
        if px * qy == qx * py then
          table[i][j].push(k)
        end
      end
    end
  end
  
  count = 0
  flag = [false] * n
  while !finish?(flag) do
    max_index  = [-1, -1]
    max_length = 0
    
    n.times do |i|
      next if flag[i]
      n.times do |j|
        next if flag[j]
        if table[i][j] != nil then
          if max_length < table[i][j].size then
            max_length = table[i][j].size
            max_index = [i, j]
          end
        end
      end
    end
    
    (i, j) = max_index
    if i >= 0 && j >= 0 then
      flag[i] = true
      flag[j] = true
      table[i][j].each{ |t| flag[t] = true }
      table[i][j] = nil
      
      count += 1
    end
  end
  
  puts count.to_s
end

if self.to_s == 'main' then
  main(ARGV)
end