Làm rối mã nguồn

Đề bài

Mô tả

Một chương trình gốc chứa nhiều tên biến (mỗi tên là một dãy ký tự, chương trình không dùng tên biến chỉ có một chữ cái). Người ta làm rối chương trình bằng cách sau: xét tên biến đầu tiên xuất hiện, thay mọi lần xuất hiện của nó bằng chữ cái a; rồi xét tên biến tiếp theo chưa được thay, thay mọi lần xuất hiện của nó bằng chữ cái b; cứ như vậy dùng lần lượt a,b,c, theo đúng thứ tự bảng chữ cái. Chương trình có nhiều nhất 26 tên biến khác nhau.

Sau khi làm rối, người ta xoá hết dấu cách và ký tự xuống dòng, thu được một xâu S gồm các chữ cái thường. Cho xâu S, hãy kiểm tra xem S có thể là kết quả của quá trình làm rối nói trên hay không.

Nói cách khác, S hợp lệ khi và chỉ khi: khi duyệt S từ trái sang phải, một chữ cái mới chỉ được phép xuất hiện lần đầu nếu tất cả các chữ cái đứng trước nó trong bảng chữ cái đều đã xuất hiện trước đó. Đặc biệt, chữ cái xuất hiện đầu tiên trong S (nếu có) phải là a.

Dữ liệu vào

Một dòng duy nhất chứa xâu S gồm các chữ cái Latinh thường (1|S|500).

Dữ liệu ra

In ra YES nếu S có thể là kết quả của quá trình làm rối, ngược lại in ra NO (không có dấu ngoặc kép).

Ví dụ

Input Output Giải thích
abacaba YES Các chữ cái mới xuất hiện lần lượt là a rồi b rồi c, đúng thứ tự. Chẳng hạn ứng với danh sách tên biến "number string number character number string number".
jinotega NO Chữ cái đầu tiên là j chứ không phải a, nên không thể là kết quả làm rối.
ac NO Chữ cái c xuất hiện trong khi b chưa từng xuất hiện.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0