Biến đổi xâu

Đề bài

Mô tả

Cho xâu s độ dài n gồm các chữ cái Latin in thường. Thực hiện phép biến đổi sau với một số nguyên k (1≤k≤n):

Với i chạy từ 1 đến n−k+1, lần lượt đảo ngược đoạn con s[i..i+k−1] của s.

Ví dụ, với s= qwer và k=2, xâu biến đổi theo từng bước:

  • qwer (ban đầu)
  • wqer (đảo ngược đoạn [1..2])
  • weqr (đảo ngược đoạn [2..3])
  • werq (đảo ngược đoạn [3..4])

Kết quả cuối cùng là werq.

Hãy tìm giá trị k sao cho xâu thu được sau phép biến đổi có thứ tự từ điển nhỏ nhất. Nếu có nhiều k cho cùng kết quả nhỏ nhất, xuất giá trị k nhỏ nhất trong số đó.

Dữ liệu vào

Dòng đầu chứa số nguyên t — số bộ test.

Mỗi bộ test gồm hai dòng:

  • Dòng đầu chứa số nguyên n — độ dài của xâu s.
  • Dòng thứ hai chứa xâu s độ dài n gồm các chữ cái Latin in thường.

Dữ liệu ra

Với mỗi bộ test, in ra hai dòng:

  • Dòng đầu: xâu có thứ tự từ điển nhỏ nhất có thể đạt được.
  • Dòng thứ hai: giá trị k nhỏ nhất tương ứng.

Ràng buộc

  • 1≤t≤5000
  • 1≤n≤5000
  • Tổng n trên tất cả bộ test không vượt quá 5000.

Ví dụ

Input Output Giải thích
6
4
abab
6
qwerty
5
aaaaa
6
alaska
9
lfpbavjsm
1
p
abab
1
ertyqw
3
aaaaa
1
aksala
6
avjsmbpfl
5
p
1
Với abab: k=1 giữ nguyên xâu, k=2 cho baba, k=3 cho abab, k=4 cho baba. Giá trị k nhỏ nhất cho xâu nhỏ nhất là 1.
1
3
bab
abb
2
Với k=2: bab → abb. Với k=3: bab → bab. Kết quả nhỏ nhất là abb với k=2.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0