class BalancingTree: def __init__(self, n): self.N = n self.root = self.node(1< v: prev = nd.value while True: if v < nd.value: prev = nd.value if nd.left: nd = nd.left else: return prev - 1 else: if nd.right: nd = nd.right else: return prev - 1 @property def max(self): return self.find_l((1< bool: return self.find_r(v - 1) == v class node: def __init__(self, v, p): self.value = v self.pivot = p self.left = None self.right = None def debug(self): def debug_info(nd_): return (nd_.value - 1, nd_.pivot - 1, nd_.left.value - 1 if nd_.left else -1, nd_.right.value - 1 if nd_.right else -1) def debug_node(nd): re = [] if nd.left: re += debug_node(nd.left) if nd.value: re.append(debug_info(nd)) if nd.right: re += debug_node(nd.right) return re print("Debug - root =", self.root.value - 1, debug_node(self.root)[:50]) def debug_list(self): def debug_node(nd): re = [] if nd.left: re += debug_node(nd.left) if nd.value: re.append(nd.value - 1) if nd.right: re += debug_node(nd.right) return re return debug_node(self.root)[:-1] n = int(input()) S = list(input()) board = ['A','T','C','G'] BT = BalancingTree(32) for i in range(1,n+1): BT.add(i) cnt = 0 for s in S: if s in board: cnt += 1 ans = 0 while cnt: index = BT.find_r(cnt-1) BT.delete(index) if S[index-1] in board: cnt -=1 ans += 1 print(ans)