CSES - String Transform | Biến đổi xâu

Xem PDF

Điểm: 1700 (p) Thời gian: 1.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Hãy xem xét phép biến đổi xâu sau:

  1. Nối ký tự # vào xâu (giả định rằng # có thứ tự từ điển nhỏ hơn so với tất cả các ký tự khác trong xâu).
  2. Tạo tất cả các vòng quay của xâu.
  3. Sắp xếp các vòng quay theo thứ tự từ điển tăng dần.
  4. Dựa vào thứ tự này, hãy tạo một xâu mới có chứa ký tự cuối cùng của mỗi vòng quay.

Ví dụ, xâu babc trở thành babc#. Sau đó, danh sách các phép quay được sắp xếp là #babc, abc#b, babc#, bc#bac#bab. Cuối cùng tạo được xâu cb#ab.

Input

  • Dòng đầu vào duy nhất chứa xâu đã biến đổi có độ dài \(n + 1\). Mỗi ký tự của xâu gốc là một trong những a - z.

Output

  • In ra xâu gốc có độ dài \(n\).

Constraints

  • \(1 \leq n \leq 10^6\)

Example

Sample input

cb#ab

Sample output

babc


Bình luận


  • 0
    Thanh72    10:11 p.m. 18 Tháng 8, 2023 chỉnh sửa 3

    Xét những phép biến đổi xâu sau:

    1. Thêm kí tự # vào phía sau xâu (Xem kí tự # có thứ tự từ điển nhỏ hơn tất cả các kí tự khác trong xâu).
    2. Tạo một tập gồm toàn bộ các hoán vị vòng quanh của xâu đó. (VD: Cho xâu \(S\) = abc thì tập các hoán vị vòng quanh của xâu \(S\) là {abc, bca, cab}).
    3. Sắp xếp các xâu trong tập tuân theo thứ tự từ điển.
    4. Tạo một xâu mới từ những kí tự cuối cùng của các xâu trong tập theo thứ tự.

    Ví dụ, ta biến xâu babc thành babc#. Sau đó, ta có tập các hoán vị vòng quanh của xâu theo thứ tự từ điển là: {#babc, abc#b, babc#, bc#ba, and c#bab}. Rồi ta tạo ra xâu mới cb#ab.

    Yêu cầu: Từ xâu đã qua biến đổi, hãy xây dựng lại và in ra xâu ban đầu.

    Input

    • Gồm một dòng chứa một xâu đã qua những phép biến đổi trên với độ dài \(n+1(1 \leq n \leq 10^6)\). Mọi chữ cái trong xâu là chữ cái latin thường.

    Output

    • Gồm một dòng chứa một xâu độ dài \(n\) là xâu ban đầu.

    Test 1

    Input
    cb#ab
    Output
    babc