숨겨진 비밀번호

시간 제한2초메모리 제한128 MB

요약
문자열의 모든 좌측 순환 이동 중 사전순으로 가장 작은 것의 시작 위치를 찾고, 동일하면 가장 작은 인덱스를 출력합니다.
난이도

보통10점 중 6점

유형
문자열, 문자열 매칭, 그리디
정답자
아직 제출이 없습니다

문제

프로그래머들은 때때로 이상한 방법으로 비밀번호를 숨긴다. Billy "Hacker" Geits가 자신의 비밀번호를 숨기는 방법을 보자. Billy는 길이가 LL인 소문자 라틴 문자열 SS를 고른다. 그런 다음 이 문자열을 한 글자씩 왼쪽으로 순환 이동시킨 L−1L-1개의 문자열을 모두 만들고, (SS 자신을 포함한) 이 문자열들 중 사전순으로 가장 앞선 것의 접두사를 비밀번호로 삼는다.

예를 들어 문자열 alabala를 생각해 보자. (원래 문자열을 포함한) 한 글자 왼쪽 순환 이동 결과는 다음과 같다.

alabala
labalaa
abalaal
balaala
alaalab
laalaba
aalabal

이들 중 사전순으로 가장 앞선 것은 aalabal이다. 이 문자열의 첫 글자는 원래 문자열에서 위치 66에 있다. (위치는 00부터 센다.)

문자열 SS가 주어질 때, 이 문자열의 사전순으로 가장 앞선 한 글자 왼쪽 순환 이동의 시작 위치를 찾는 프로그램을 작성하시오. 가장 앞선 순환 이동이 여러 번 나타나면 가장 작은 시작 위치를 출력한다.

입력

입력의 첫째 줄에는 테스트 케이스의 개수 TT가 주어진다. 다음 TT개의 줄에는 각각 하나의 테스트 케이스가 주어진다. 먼저 문자열의 길이 LL (5≤L≤1000005 \le L \le 100000)이 주어지고, 공백 하나로 구분되어 문자열 SS가 주어진다.

출력

정확히 TT개의 줄을 출력하며, 각 줄에는 해당 테스트 케이스에 대해 찾은 시작 위치를 하나의 수로 출력한다.

예제1

  1. 예제 1

    입력
    2
    6 baabaa
    7 alabala
    
    예상 출력
    1
    6