def search_step2(n, table, p, q)
	m = 0
	
  n.times do |i|
    n.times do |j|
      next if i == j
      next if table[i][j] == nil
			
      next if i == p && j == q
			next if i == q && j == p
			
			s = (table[p][q] | table[i][j]).size
      m = [m, n - s + 1].max
    end
  end
	
	return m
end

def search_step1(n, table)
	m = 0
	
  n.times do |i|
    n.times do |j|
      next if i == j
      next if table[i][j] == nil
      
			
			s = table[i][j].size
			t = search_step2(n, table, i, j)
			m = [m, t].max
			
			if t == 0 && s > 0 then
				m = [m, n - s + 1].max
      end
    end
  end
	
	return m
end

def search(n, table)
  return search_step1(n, table)
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
  
    n.times do |j|
      next if i == j
      
      table[i][j] = [i, 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
  
  puts search(n, table).to_s
end

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