만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

공백 정렬

시간 제한1초메모리 제한2048 MB

요약
탭과 공백이 섞인 코드의 들여쓰기를 보고, 모든 줄의 들여쓰기가 하나의 단위의 배수가 되는 가장 작은 탭 너비를 구합니다. 불가능하면 -1을 출력합니다.
난이도

쉬움10점 중 3점

유형
완전 탐색, 구현, 수학
정답자
아직 제출이 없습니다

문제

여러 프로그래머와 함께 코딩 프로젝트를 진행하고 있다. 같은 파일 안에서 어떤 사람은 탭으로, 다른 사람은 스페이스로 들여쓰기를 해 왔다는 사실을 발견했다. 그런데 아무도 이 점을 이상하게 여기지 않았던 것 같다.

파일의 들여쓰기를 일관되게 만들려고 탭을 공백으로 바꾸려고 한다. 들여쓰기가 일관된다는 것은 중첩 깊이가 kk (k≥0k \ge 0)인 모든 줄에서 첫 번째 공백이 아닌 문자 앞에 정확히 k⋅ik \cdot i개의 공백이 있다는 뜻이다. 여기서 i>0i>0이다.

탭 하나를 고정된 개수의 공백으로 바꿔서 파일의 들여쓰기를 일관되게 만들 수 있는지 묻는다.

입력

첫 줄에 코드의 줄 수를 나타내는 정수 nn (2≤n≤1002 \le n \le 100)이 하나 주어진다. 이어지는 nn개 줄에는 문자 's'(공백)와 't'(탭)가 0개 이상 나온 뒤 { 또는 } 한 글자로 끝나는 문자열이 하나씩 주어진다. 각 줄은 최대 1000자이다.

첫 줄은 항상 { 한 글자이고, 마지막 줄은 항상 } 한 글자이다. 중괄호는 항상 짝이 맞는다. 중괄호만 골라 하나의 문자열로 보면, 부분 문자열 {}를 반복해서 지워 빈 문자열을 만들 수 있다.

출력

탭 하나를 바꿀 공백의 개수 중 0보다 큰 가장 작은 정수를 한 줄에 출력한다. 그런 개수가 없으면 -1을 출력한다.

예제1

  1. 예제 1

    입력
    10
    {
    ss{
    sts{
    tt}
    t}
    t{
    ss}
    }
    {
    }
    
    예상 출력
    2