공백 정렬
시간 제한1초메모리 제한2048 MB
탭과 공백이 섞인 코드의 들여쓰기를 보고, 모든 줄의 들여쓰기가 하나의 단위의 배수가 되는 가장 작은 탭 너비를 구합니다. 불가능하면 -1을 출력합니다.
문제
여러 프로그래머와 함께 코딩 프로젝트를 진행하고 있다. 같은 파일 안에서 어떤 사람은 탭으로, 다른 사람은 스페이스로 들여쓰기를 해 왔다는 사실을 발견했다. 그런데 아무도 이 점을 이상하게 여기지 않았던 것 같다.
파일의 들여쓰기를 일관되게 만들려고 탭을 공백으로 바꾸려고 한다. 들여쓰기가 일관된다는 것은 중첩 깊이가 ()인 모든 줄에서 첫 번째 공백이 아닌 문자 앞에 정확히 개의 공백이 있다는 뜻이다. 여기서 이다.
탭 하나를 고정된 개수의 공백으로 바꿔서 파일의 들여쓰기를 일관되게 만들 수 있는지 묻는다.
입력
첫 줄에 코드의 줄 수를 나타내는 정수 ()이 하나 주어진다. 이어지는 개 줄에는 문자 's'(공백)와 't'(탭)가 0개 이상 나온 뒤 { 또는 } 한 글자로 끝나는 문자열이 하나씩 주어진다. 각 줄은 최대 1000자이다.
첫 줄은 항상 { 한 글자이고, 마지막 줄은 항상 } 한 글자이다. 중괄호는 항상 짝이 맞는다. 중괄호만 골라 하나의 문자열로 보면, 부분 문자열 {}를 반복해서 지워 빈 문자열을 만들 수 있다.
출력
탭 하나를 바꿀 공백의 개수 중 0보다 큰 가장 작은 정수를 한 줄에 출력한다. 그런 개수가 없으면 -1을 출력한다.