문자열 변환
시간 제한1초메모리 제한256 MB
주어진 두 균형 a/b 문자열을 모든 중간 문자열이 균형을 유지하도록 인접한 두 문자를 교환해 변환하는 최소 횟수를 구하고 불가능하면 -1을 출력합니다.
문제
좋은 문자열은 다음과 같이 정의한다.
ab는 좋은 문자열이다.- 문자열 가 좋은 문자열이면, 앞과 뒤에 각각
a와b를 붙인 도 좋은 문자열이다. - 문자열 와 가 좋은 문자열이면, 이어 붙인 도 좋은 문자열이다.
좋은 문자열 와 가 주어진다. 인접한 두 문자를 서로 바꾸는 연산만 써서 를 로 바꾸려고 한다. 바꾸는 도중에 나타나는 문자열도 모두 좋은 문자열이어야 한다. 필요한 연산의 최소 횟수를 구하는 프로그램을 작성하시오.
예를 들어 가 aabbabab이고 가 aaaabbbb이면 다섯 번의 연산으로 를 로 바꿀 수 있다. 대괄호는 그 단계에서 서로 바꾸는 두 문자이다.
aabba[ba]b → aab[ba]abb → aaba[ba]bb → aa[ba]abbb → aaa[ba]bbb → aaaabbbb
입력
첫 줄에 테스트 케이스의 수 가 주어진다.
이어서 각 테스트 케이스마다 한 줄에 문자열 와 가 공백으로 구분되어 주어진다. 와 는 좋은 문자열이고, 길이는 각각 2 이상 100,000 이하이다.
출력
각 테스트 케이스마다 를 로 바꾸는 데 필요한 연산의 최소 횟수를 한 줄에 하나씩 출력한다. 바꿀 수 없으면 -1을 출력한다.