## 의사코드 ##
# 스택 활용
# for s in string:
# s가 '{'인 경우
# stack.append(s)
# s가 '{'인 경우,
# 1) 스택이 비어있는 경우,
# 연산 수 + 1
# '{'로 바꿔서 스택.append()
# 2) 스택이 비어있지 않는 경우,
# 스택.pop()
# 최소 연산의 수 = ans + stack에 남아있는 원소의 개수 나누기 2
통과한 코드
idx = 0
while True:
string = input()
if '-' in string:
break
idx += 1 # 인덱스 + 1
stack = []
ans = 0 # 안정적으로 바꾸는데 필요한 최소 연산의 수
for s in string:
# 현재 문자가 '{'인 경우, stack에 삽입
if s == '{':
stack.append(s)
elif s == '}':
# stack이 비어있고 현재 문자가 '}'인 경우, 연산 수행
if len(stack) == 0:
ans += 1
stack.append('{')
# stack이 비어있지 않고 현재 문자가 '}'인 경우, stack의 마지막 원소 꺼냄
else:
stack.pop()
# 최소 연산의 수 = ans + stack에 남아있는 원소의 개수 나누기 2
ans += len(stack) // 2
print(f"{idx}.", ans)