input: Write a Python function that takes a 2D list of coordinates and a string representing tags. Each coordinate is associated with a tag from the string. The function should return the maximum number of points that can be contained within a square centered at the origin, with edges parallel to the coordinate axes and ensuring no two points within the square share the same tag. A point is considered inside if it lies on or within the square's borders, and the square's side length can be zero.
  
  Examples:
  >>> points = [[2,2],[-1,-2],[-4,4],[-3,1],[3,-3]], s = "abdca"
  2
  >>> points = [[1,1],[-2,-2],[-2,2]], s = "abb"
  1
  >>> points = [[1,1],[-1,-1],[2,-2]], s = "ccd"
  0
output: def max_points(points, s):
      def count_points(size):
          seen_tags = set()
          count = 0
          for i, (x, y) in enumerate(points):
              if abs(x) <= size // 2 and abs(y) <= size // 2:
                  if s[i] not in seen_tags:
                      seen_tags.add(s[i])
                      count += 1
          return count
  
      lo, hi = 0, max(max(abs(x), abs(y)) for x, y in points) * 2
      best = 0
  
      while lo <= hi:
          mid = (lo + hi) // 2
          count = count_points(mid)
          best = max(best, count)
          if count_points(mid + 1) <= count:
              hi = mid - 1
          else:
              lo = mid + 1
  
      return best