import heapq


def solution(operations):
    min_heap = []
    max_heap = []
    min_count = 0
    max_count = 0

    for operation in operations:
        instruction, number = operation.split()

        if instruction == "D":
            if number == "1" and len(max_heap) > min_count:
                heapq.heappop(max_heap)
                max_count += 1
            elif number == "-1" and len(min_heap) > max_count:
                heapq.heappop(min_heap)
                min_count += 1

            if len(max_heap) == min_count:
                max_heap = []
                min_count = 0

            if len(min_heap) == max_count:
                min_heap = []
                max_count = 0
        else:
            number = int(number)
            heapq.heappush(min_heap, number)
            heapq.heappush(max_heap, -number)

    min_value = 0
    max_value = 0

    if len(min_heap) > max_count:
        min_value = heapq.heappop(min_heap)

    if len(max_heap) > min_count:
        max_value = -heapq.heappop(max_heap)

    return [max_value, min_value]


# 정확성  테스트
# 테스트 1 〉	통과 (0.03ms, 10.5MB)
# 테스트 2 〉	통과 (0.03ms, 10.3MB)
# 테스트 3 〉	통과 (0.03ms, 10.3MB)
# 테스트 4 〉	통과 (0.01ms, 10.2MB)
# 테스트 5 〉	통과 (0.02ms, 10.3MB)
# 테스트 6 〉	통과 (0.02ms, 10.4MB)
# 채점 결과
# 정확성: 100.0
# 합계: 100.0 / 100.0

assert (solution(["I 16", "D 1"]) == [0, 0])
assert (solution(["I 7", "I 5", "I -5", "D -1"]) == [7, 5])
assert (solution(["I 16", "I -5643", "D -1", "D 1", "D 1", "I 123", "D -1"]) == [0, 0])
assert (solution(["I 4", "I 3", "I 2", "I 1", "D 1", "D 1", "D -1", "D -1", "I 5", "I 6"]) == [6, 5])

# 통과하지 못하는 테스트 케이스가 있는데 프로그래머스에서는 통과됨
assert (solution(["I 6", "I 3", "D -1", "I 2", "I 1", "D 1", "D 1"]) == [1, 1])
