Skip to content

Instantly share code, notes, and snippets.

@lmmx
Last active November 22, 2025 01:00
Show Gist options
  • Select an option

  • Save lmmx/16380d8a1229d5f5b0e4b2d2af7032bd to your computer and use it in GitHub Desktop.

Select an option

Save lmmx/16380d8a1229d5f5b0e4b2d2af7032bd to your computer and use it in GitHub Desktop.
Rust import ordering (what's the ordering?). Some illegal Rust identifier combinations were removed from the output
import itertools
# Generate and print every possible string (length 1–5) from the characters: _, a, A, z, Z
print(", ".join("".join(c) for r in range(1, 6) for c in itertools.product("_aAzZ", repeat=r)))
use a::{
a,
aA,
aAA,
aAAA,
aAAAA,
aAAAZ,
aAAA_,
aAAAa,
aAAAz,
aAAZ,
aAAZA,
aAAZZ,
aAAZ_,
aAAZa,
aAAZz,
aAA_,
aAA_A,
aAA_Z,
aAA__,
aAA_a,
aAA_z,
aAAa,
aAAaA,
aAAaZ,
aAAa_,
aAAaa,
aAAaz,
aAAz,
aAAzA,
aAAzZ,
aAAz_,
aAAza,
aAAzz,
aAZ,
aAZA,
aAZAA,
aAZAZ,
aAZA_,
aAZAa,
aAZAz,
aAZZ,
aAZZA,
aAZZZ,
aAZZ_,
aAZZa,
aAZZz,
aAZ_,
aAZ_A,
aAZ_Z,
aAZ__,
aAZ_a,
aAZ_z,
aAZa,
aAZaA,
aAZaZ,
aAZa_,
aAZaa,
aAZaz,
aAZz,
aAZzA,
aAZzZ,
aAZz_,
aAZza,
aAZzz,
aA_,
aA_A,
aA_AA,
aA_AZ,
aA_A_,
aA_Aa,
aA_Az,
aA_Z,
aA_ZA,
aA_ZZ,
aA_Z_,
aA_Za,
aA_Zz,
aA__,
aA__A,
aA__Z,
aA___,
aA__a,
aA__z,
aA_a,
aA_aA,
aA_aZ,
aA_a_,
aA_aa,
aA_az,
aA_z,
aA_zA,
aA_zZ,
aA_z_,
aA_za,
aA_zz,
aAa,
aAaA,
aAaAA,
aAaAZ,
aAaA_,
aAaAa,
aAaAz,
aAaZ,
aAaZA,
aAaZZ,
aAaZ_,
aAaZa,
aAaZz,
aAa_,
aAa_A,
aAa_Z,
aAa__,
aAa_a,
aAa_z,
aAaa,
aAaaA,
aAaaZ,
aAaa_,
aAaaa,
aAaaz,
aAaz,
aAazA,
aAazZ,
aAaz_,
aAaza,
aAazz,
aAz,
aAzA,
aAzAA,
aAzAZ,
aAzA_,
aAzAa,
aAzAz,
aAzZ,
aAzZA,
aAzZZ,
aAzZ_,
aAzZa,
aAzZz,
aAz_,
aAz_A,
aAz_Z,
aAz__,
aAz_a,
aAz_z,
aAza,
aAzaA,
aAzaZ,
aAza_,
aAzaa,
aAzaz,
aAzz,
aAzzA,
aAzzZ,
aAzz_,
aAzza,
aAzzz,
aZ,
aZA,
aZAA,
aZAAA,
aZAAZ,
aZAA_,
aZAAa,
aZAAz,
aZAZ,
aZAZA,
aZAZZ,
aZAZ_,
aZAZa,
aZAZz,
aZA_,
aZA_A,
aZA_Z,
aZA__,
aZA_a,
aZA_z,
aZAa,
aZAaA,
aZAaZ,
aZAa_,
aZAaa,
aZAaz,
aZAz,
aZAzA,
aZAzZ,
aZAz_,
aZAza,
aZAzz,
aZZ,
aZZA,
aZZAA,
aZZAZ,
aZZA_,
aZZAa,
aZZAz,
aZZZ,
aZZZA,
aZZZZ,
aZZZ_,
aZZZa,
aZZZz,
aZZ_,
aZZ_A,
aZZ_Z,
aZZ__,
aZZ_a,
aZZ_z,
aZZa,
aZZaA,
aZZaZ,
aZZa_,
aZZaa,
aZZaz,
aZZz,
aZZzA,
aZZzZ,
aZZz_,
aZZza,
aZZzz,
aZ_,
aZ_A,
aZ_AA,
aZ_AZ,
aZ_A_,
aZ_Aa,
aZ_Az,
aZ_Z,
aZ_ZA,
aZ_ZZ,
aZ_Z_,
aZ_Za,
aZ_Zz,
aZ__,
aZ__A,
aZ__Z,
aZ___,
aZ__a,
aZ__z,
aZ_a,
aZ_aA,
aZ_aZ,
aZ_a_,
aZ_aa,
aZ_az,
aZ_z,
aZ_zA,
aZ_zZ,
aZ_z_,
aZ_za,
aZ_zz,
aZa,
aZaA,
aZaAA,
aZaAZ,
aZaA_,
aZaAa,
aZaAz,
aZaZ,
aZaZA,
aZaZZ,
aZaZ_,
aZaZa,
aZaZz,
aZa_,
aZa_A,
aZa_Z,
aZa__,
aZa_a,
aZa_z,
aZaa,
aZaaA,
aZaaZ,
aZaa_,
aZaaa,
aZaaz,
aZaz,
aZazA,
aZazZ,
aZaz_,
aZaza,
aZazz,
aZz,
aZzA,
aZzAA,
aZzAZ,
aZzA_,
aZzAa,
aZzAz,
aZzZ,
aZzZA,
aZzZZ,
aZzZ_,
aZzZa,
aZzZz,
aZz_,
aZz_A,
aZz_Z,
aZz__,
aZz_a,
aZz_z,
aZza,
aZzaA,
aZzaZ,
aZza_,
aZzaa,
aZzaz,
aZzz,
aZzzA,
aZzzZ,
aZzz_,
aZzza,
aZzzz,
a_,
a_A,
a_AA,
a_AAA,
a_AAZ,
a_AA_,
a_AAa,
a_AAz,
a_AZ,
a_AZA,
a_AZZ,
a_AZ_,
a_AZa,
a_AZz,
a_A_,
a_A_A,
a_A_Z,
a_A__,
a_A_a,
a_A_z,
a_Aa,
a_AaA,
a_AaZ,
a_Aa_,
a_Aaa,
a_Aaz,
a_Az,
a_AzA,
a_AzZ,
a_Az_,
a_Aza,
a_Azz,
a_Z,
a_ZA,
a_ZAA,
a_ZAZ,
a_ZA_,
a_ZAa,
a_ZAz,
a_ZZ,
a_ZZA,
a_ZZZ,
a_ZZ_,
a_ZZa,
a_ZZz,
a_Z_,
a_Z_A,
a_Z_Z,
a_Z__,
a_Z_a,
a_Z_z,
a_Za,
a_ZaA,
a_ZaZ,
a_Za_,
a_Zaa,
a_Zaz,
a_Zz,
a_ZzA,
a_ZzZ,
a_Zz_,
a_Zza,
a_Zzz,
a__,
a__A,
a__AA,
a__AZ,
a__A_,
a__Aa,
a__Az,
a__Z,
a__ZA,
a__ZZ,
a__Z_,
a__Za,
a__Zz,
a___,
a___A,
a___Z,
a____,
a___a,
a___z,
a__a,
a__aA,
a__aZ,
a__a_,
a__aa,
a__az,
a__z,
a__zA,
a__zZ,
a__z_,
a__za,
a__zz,
a_a,
a_aA,
a_aAA,
a_aAZ,
a_aA_,
a_aAa,
a_aAz,
a_aZ,
a_aZA,
a_aZZ,
a_aZ_,
a_aZa,
a_aZz,
a_a_,
a_a_A,
a_a_Z,
a_a__,
a_a_a,
a_a_z,
a_aa,
a_aaA,
a_aaZ,
a_aa_,
a_aaa,
a_aaz,
a_az,
a_azA,
a_azZ,
a_az_,
a_aza,
a_azz,
a_z,
a_zA,
a_zAA,
a_zAZ,
a_zA_,
a_zAa,
a_zAz,
a_zZ,
a_zZA,
a_zZZ,
a_zZ_,
a_zZa,
a_zZz,
a_z_,
a_z_A,
a_z_Z,
a_z__,
a_z_a,
a_z_z,
a_za,
a_zaA,
a_zaZ,
a_za_,
a_zaa,
a_zaz,
a_zz,
a_zzA,
a_zzZ,
a_zz_,
a_zza,
a_zzz,
aa,
aaA,
aaAA,
aaAAA,
aaAAZ,
aaAA_,
aaAAa,
aaAAz,
aaAZ,
aaAZA,
aaAZZ,
aaAZ_,
aaAZa,
aaAZz,
aaA_,
aaA_A,
aaA_Z,
aaA__,
aaA_a,
aaA_z,
aaAa,
aaAaA,
aaAaZ,
aaAa_,
aaAaa,
aaAaz,
aaAz,
aaAzA,
aaAzZ,
aaAz_,
aaAza,
aaAzz,
aaZ,
aaZA,
aaZAA,
aaZAZ,
aaZA_,
aaZAa,
aaZAz,
aaZZ,
aaZZA,
aaZZZ,
aaZZ_,
aaZZa,
aaZZz,
aaZ_,
aaZ_A,
aaZ_Z,
aaZ__,
aaZ_a,
aaZ_z,
aaZa,
aaZaA,
aaZaZ,
aaZa_,
aaZaa,
aaZaz,
aaZz,
aaZzA,
aaZzZ,
aaZz_,
aaZza,
aaZzz,
aa_,
aa_A,
aa_AA,
aa_AZ,
aa_A_,
aa_Aa,
aa_Az,
aa_Z,
aa_ZA,
aa_ZZ,
aa_Z_,
aa_Za,
aa_Zz,
aa__,
aa__A,
aa__Z,
aa___,
aa__a,
aa__z,
aa_a,
aa_aA,
aa_aZ,
aa_a_,
aa_aa,
aa_az,
aa_z,
aa_zA,
aa_zZ,
aa_z_,
aa_za,
aa_zz,
aaa,
aaaA,
aaaAA,
aaaAZ,
aaaA_,
aaaAa,
aaaAz,
aaaZ,
aaaZA,
aaaZZ,
aaaZ_,
aaaZa,
aaaZz,
aaa_,
aaa_A,
aaa_Z,
aaa__,
aaa_a,
aaa_z,
aaaa,
aaaaA,
aaaaZ,
aaaa_,
aaaaa,
aaaaz,
aaaz,
aaazA,
aaazZ,
aaaz_,
aaaza,
aaazz,
aaz,
aazA,
aazAA,
aazAZ,
aazA_,
aazAa,
aazAz,
aazZ,
aazZA,
aazZZ,
aazZ_,
aazZa,
aazZz,
aaz_,
aaz_A,
aaz_Z,
aaz__,
aaz_a,
aaz_z,
aaza,
aazaA,
aazaZ,
aaza_,
aazaa,
aazaz,
aazz,
aazzA,
aazzZ,
aazz_,
aazza,
aazzz,
az,
azA,
azAA,
azAAA,
azAAZ,
azAA_,
azAAa,
azAAz,
azAZ,
azAZA,
azAZZ,
azAZ_,
azAZa,
azAZz,
azA_,
azA_A,
azA_Z,
azA__,
azA_a,
azA_z,
azAa,
azAaA,
azAaZ,
azAa_,
azAaa,
azAaz,
azAz,
azAzA,
azAzZ,
azAz_,
azAza,
azAzz,
azZ,
azZA,
azZAA,
azZAZ,
azZA_,
azZAa,
azZAz,
azZZ,
azZZA,
azZZZ,
azZZ_,
azZZa,
azZZz,
azZ_,
azZ_A,
azZ_Z,
azZ__,
azZ_a,
azZ_z,
azZa,
azZaA,
azZaZ,
azZa_,
azZaa,
azZaz,
azZz,
azZzA,
azZzZ,
azZz_,
azZza,
azZzz,
az_,
az_A,
az_AA,
az_AZ,
az_A_,
az_Aa,
az_Az,
az_Z,
az_ZA,
az_ZZ,
az_Z_,
az_Za,
az_Zz,
az__,
az__A,
az__Z,
az___,
az__a,
az__z,
az_a,
az_aA,
az_aZ,
az_a_,
az_aa,
az_az,
az_z,
az_zA,
az_zZ,
az_z_,
az_za,
az_zz,
aza,
azaA,
azaAA,
azaAZ,
azaA_,
azaAa,
azaAz,
azaZ,
azaZA,
azaZZ,
azaZ_,
azaZa,
azaZz,
aza_,
aza_A,
aza_Z,
aza__,
aza_a,
aza_z,
azaa,
azaaA,
azaaZ,
azaa_,
azaaa,
azaaz,
azaz,
azazA,
azazZ,
azaz_,
azaza,
azazz,
azz,
azzA,
azzAA,
azzAZ,
azzA_,
azzAa,
azzAz,
azzZ,
azzZA,
azzZZ,
azzZ_,
azzZa,
azzZz,
azz_,
azz_A,
azz_Z,
azz__,
azz_a,
azz_z,
azza,
azzaA,
azzaZ,
azza_,
azzaa,
azzaz,
azzz,
azzzA,
azzzZ,
azzz_,
azzza,
azzzz,
z,
zA,
zAA,
zAAA,
zAAAA,
zAAAZ,
zAAA_,
zAAAa,
zAAAz,
zAAZ,
zAAZA,
zAAZZ,
zAAZ_,
zAAZa,
zAAZz,
zAA_,
zAA_A,
zAA_Z,
zAA__,
zAA_a,
zAA_z,
zAAa,
zAAaA,
zAAaZ,
zAAa_,
zAAaa,
zAAaz,
zAAz,
zAAzA,
zAAzZ,
zAAz_,
zAAza,
zAAzz,
zAZ,
zAZA,
zAZAA,
zAZAZ,
zAZA_,
zAZAa,
zAZAz,
zAZZ,
zAZZA,
zAZZZ,
zAZZ_,
zAZZa,
zAZZz,
zAZ_,
zAZ_A,
zAZ_Z,
zAZ__,
zAZ_a,
zAZ_z,
zAZa,
zAZaA,
zAZaZ,
zAZa_,
zAZaa,
zAZaz,
zAZz,
zAZzA,
zAZzZ,
zAZz_,
zAZza,
zAZzz,
zA_,
zA_A,
zA_AA,
zA_AZ,
zA_A_,
zA_Aa,
zA_Az,
zA_Z,
zA_ZA,
zA_ZZ,
zA_Z_,
zA_Za,
zA_Zz,
zA__,
zA__A,
zA__Z,
zA___,
zA__a,
zA__z,
zA_a,
zA_aA,
zA_aZ,
zA_a_,
zA_aa,
zA_az,
zA_z,
zA_zA,
zA_zZ,
zA_z_,
zA_za,
zA_zz,
zAa,
zAaA,
zAaAA,
zAaAZ,
zAaA_,
zAaAa,
zAaAz,
zAaZ,
zAaZA,
zAaZZ,
zAaZ_,
zAaZa,
zAaZz,
zAa_,
zAa_A,
zAa_Z,
zAa__,
zAa_a,
zAa_z,
zAaa,
zAaaA,
zAaaZ,
zAaa_,
zAaaa,
zAaaz,
zAaz,
zAazA,
zAazZ,
zAaz_,
zAaza,
zAazz,
zAz,
zAzA,
zAzAA,
zAzAZ,
zAzA_,
zAzAa,
zAzAz,
zAzZ,
zAzZA,
zAzZZ,
zAzZ_,
zAzZa,
zAzZz,
zAz_,
zAz_A,
zAz_Z,
zAz__,
zAz_a,
zAz_z,
zAza,
zAzaA,
zAzaZ,
zAza_,
zAzaa,
zAzaz,
zAzz,
zAzzA,
zAzzZ,
zAzz_,
zAzza,
zAzzz,
zZ,
zZA,
zZAA,
zZAAA,
zZAAZ,
zZAA_,
zZAAa,
zZAAz,
zZAZ,
zZAZA,
zZAZZ,
zZAZ_,
zZAZa,
zZAZz,
zZA_,
zZA_A,
zZA_Z,
zZA__,
zZA_a,
zZA_z,
zZAa,
zZAaA,
zZAaZ,
zZAa_,
zZAaa,
zZAaz,
zZAz,
zZAzA,
zZAzZ,
zZAz_,
zZAza,
zZAzz,
zZZ,
zZZA,
zZZAA,
zZZAZ,
zZZA_,
zZZAa,
zZZAz,
zZZZ,
zZZZA,
zZZZZ,
zZZZ_,
zZZZa,
zZZZz,
zZZ_,
zZZ_A,
zZZ_Z,
zZZ__,
zZZ_a,
zZZ_z,
zZZa,
zZZaA,
zZZaZ,
zZZa_,
zZZaa,
zZZaz,
zZZz,
zZZzA,
zZZzZ,
zZZz_,
zZZza,
zZZzz,
zZ_,
zZ_A,
zZ_AA,
zZ_AZ,
zZ_A_,
zZ_Aa,
zZ_Az,
zZ_Z,
zZ_ZA,
zZ_ZZ,
zZ_Z_,
zZ_Za,
zZ_Zz,
zZ__,
zZ__A,
zZ__Z,
zZ___,
zZ__a,
zZ__z,
zZ_a,
zZ_aA,
zZ_aZ,
zZ_a_,
zZ_aa,
zZ_az,
zZ_z,
zZ_zA,
zZ_zZ,
zZ_z_,
zZ_za,
zZ_zz,
zZa,
zZaA,
zZaAA,
zZaAZ,
zZaA_,
zZaAa,
zZaAz,
zZaZ,
zZaZA,
zZaZZ,
zZaZ_,
zZaZa,
zZaZz,
zZa_,
zZa_A,
zZa_Z,
zZa__,
zZa_a,
zZa_z,
zZaa,
zZaaA,
zZaaZ,
zZaa_,
zZaaa,
zZaaz,
zZaz,
zZazA,
zZazZ,
zZaz_,
zZaza,
zZazz,
zZz,
zZzA,
zZzAA,
zZzAZ,
zZzA_,
zZzAa,
zZzAz,
zZzZ,
zZzZA,
zZzZZ,
zZzZ_,
zZzZa,
zZzZz,
zZz_,
zZz_A,
zZz_Z,
zZz__,
zZz_a,
zZz_z,
zZza,
zZzaA,
zZzaZ,
zZza_,
zZzaa,
zZzaz,
zZzz,
zZzzA,
zZzzZ,
zZzz_,
zZzza,
zZzzz,
z_,
z_A,
z_AA,
z_AAA,
z_AAZ,
z_AA_,
z_AAa,
z_AAz,
z_AZ,
z_AZA,
z_AZZ,
z_AZ_,
z_AZa,
z_AZz,
z_A_,
z_A_A,
z_A_Z,
z_A__,
z_A_a,
z_A_z,
z_Aa,
z_AaA,
z_AaZ,
z_Aa_,
z_Aaa,
z_Aaz,
z_Az,
z_AzA,
z_AzZ,
z_Az_,
z_Aza,
z_Azz,
z_Z,
z_ZA,
z_ZAA,
z_ZAZ,
z_ZA_,
z_ZAa,
z_ZAz,
z_ZZ,
z_ZZA,
z_ZZZ,
z_ZZ_,
z_ZZa,
z_ZZz,
z_Z_,
z_Z_A,
z_Z_Z,
z_Z__,
z_Z_a,
z_Z_z,
z_Za,
z_ZaA,
z_ZaZ,
z_Za_,
z_Zaa,
z_Zaz,
z_Zz,
z_ZzA,
z_ZzZ,
z_Zz_,
z_Zza,
z_Zzz,
z__,
z__A,
z__AA,
z__AZ,
z__A_,
z__Aa,
z__Az,
z__Z,
z__ZA,
z__ZZ,
z__Z_,
z__Za,
z__Zz,
z___,
z___A,
z___Z,
z____,
z___a,
z___z,
z__a,
z__aA,
z__aZ,
z__a_,
z__aa,
z__az,
z__z,
z__zA,
z__zZ,
z__z_,
z__za,
z__zz,
z_a,
z_aA,
z_aAA,
z_aAZ,
z_aA_,
z_aAa,
z_aAz,
z_aZ,
z_aZA,
z_aZZ,
z_aZ_,
z_aZa,
z_aZz,
z_a_,
z_a_A,
z_a_Z,
z_a__,
z_a_a,
z_a_z,
z_aa,
z_aaA,
z_aaZ,
z_aa_,
z_aaa,
z_aaz,
z_az,
z_azA,
z_azZ,
z_az_,
z_aza,
z_azz,
z_z,
z_zA,
z_zAA,
z_zAZ,
z_zA_,
z_zAa,
z_zAz,
z_zZ,
z_zZA,
z_zZZ,
z_zZ_,
z_zZa,
z_zZz,
z_z_,
z_z_A,
z_z_Z,
z_z__,
z_z_a,
z_z_z,
z_za,
z_zaA,
z_zaZ,
z_za_,
z_zaa,
z_zaz,
z_zz,
z_zzA,
z_zzZ,
z_zz_,
z_zza,
z_zzz,
za,
zaA,
zaAA,
zaAAA,
zaAAZ,
zaAA_,
zaAAa,
zaAAz,
zaAZ,
zaAZA,
zaAZZ,
zaAZ_,
zaAZa,
zaAZz,
zaA_,
zaA_A,
zaA_Z,
zaA__,
zaA_a,
zaA_z,
zaAa,
zaAaA,
zaAaZ,
zaAa_,
zaAaa,
zaAaz,
zaAz,
zaAzA,
zaAzZ,
zaAz_,
zaAza,
zaAzz,
zaZ,
zaZA,
zaZAA,
zaZAZ,
zaZA_,
zaZAa,
zaZAz,
zaZZ,
zaZZA,
zaZZZ,
zaZZ_,
zaZZa,
zaZZz,
zaZ_,
zaZ_A,
zaZ_Z,
zaZ__,
zaZ_a,
zaZ_z,
zaZa,
zaZaA,
zaZaZ,
zaZa_,
zaZaa,
zaZaz,
zaZz,
zaZzA,
zaZzZ,
zaZz_,
zaZza,
zaZzz,
za_,
za_A,
za_AA,
za_AZ,
za_A_,
za_Aa,
za_Az,
za_Z,
za_ZA,
za_ZZ,
za_Z_,
za_Za,
za_Zz,
za__,
za__A,
za__Z,
za___,
za__a,
za__z,
za_a,
za_aA,
za_aZ,
za_a_,
za_aa,
za_az,
za_z,
za_zA,
za_zZ,
za_z_,
za_za,
za_zz,
zaa,
zaaA,
zaaAA,
zaaAZ,
zaaA_,
zaaAa,
zaaAz,
zaaZ,
zaaZA,
zaaZZ,
zaaZ_,
zaaZa,
zaaZz,
zaa_,
zaa_A,
zaa_Z,
zaa__,
zaa_a,
zaa_z,
zaaa,
zaaaA,
zaaaZ,
zaaa_,
zaaaa,
zaaaz,
zaaz,
zaazA,
zaazZ,
zaaz_,
zaaza,
zaazz,
zaz,
zazA,
zazAA,
zazAZ,
zazA_,
zazAa,
zazAz,
zazZ,
zazZA,
zazZZ,
zazZ_,
zazZa,
zazZz,
zaz_,
zaz_A,
zaz_Z,
zaz__,
zaz_a,
zaz_z,
zaza,
zazaA,
zazaZ,
zaza_,
zazaa,
zazaz,
zazz,
zazzA,
zazzZ,
zazz_,
zazza,
zazzz,
zz,
zzA,
zzAA,
zzAAA,
zzAAZ,
zzAA_,
zzAAa,
zzAAz,
zzAZ,
zzAZA,
zzAZZ,
zzAZ_,
zzAZa,
zzAZz,
zzA_,
zzA_A,
zzA_Z,
zzA__,
zzA_a,
zzA_z,
zzAa,
zzAaA,
zzAaZ,
zzAa_,
zzAaa,
zzAaz,
zzAz,
zzAzA,
zzAzZ,
zzAz_,
zzAza,
zzAzz,
zzZ,
zzZA,
zzZAA,
zzZAZ,
zzZA_,
zzZAa,
zzZAz,
zzZZ,
zzZZA,
zzZZZ,
zzZZ_,
zzZZa,
zzZZz,
zzZ_,
zzZ_A,
zzZ_Z,
zzZ__,
zzZ_a,
zzZ_z,
zzZa,
zzZaA,
zzZaZ,
zzZa_,
zzZaa,
zzZaz,
zzZz,
zzZzA,
zzZzZ,
zzZz_,
zzZza,
zzZzz,
zz_,
zz_A,
zz_AA,
zz_AZ,
zz_A_,
zz_Aa,
zz_Az,
zz_Z,
zz_ZA,
zz_ZZ,
zz_Z_,
zz_Za,
zz_Zz,
zz__,
zz__A,
zz__Z,
zz___,
zz__a,
zz__z,
zz_a,
zz_aA,
zz_aZ,
zz_a_,
zz_aa,
zz_az,
zz_z,
zz_zA,
zz_zZ,
zz_z_,
zz_za,
zz_zz,
zza,
zzaA,
zzaAA,
zzaAZ,
zzaA_,
zzaAa,
zzaAz,
zzaZ,
zzaZA,
zzaZZ,
zzaZ_,
zzaZa,
zzaZz,
zza_,
zza_A,
zza_Z,
zza__,
zza_a,
zza_z,
zzaa,
zzaaA,
zzaaZ,
zzaa_,
zzaaa,
zzaaz,
zzaz,
zzazA,
zzazZ,
zzaz_,
zzaza,
zzazz,
zzz,
zzzA,
zzzAA,
zzzAZ,
zzzA_,
zzzAa,
zzzAz,
zzzZ,
zzzZA,
zzzZZ,
zzzZ_,
zzzZa,
zzzZz,
zzz_,
zzz_A,
zzz_Z,
zzz__,
zzz_a,
zzz_z,
zzza,
zzzaA,
zzzaZ,
zzza_,
zzzaa,
zzzaz,
zzzz,
zzzzA,
zzzzZ,
zzzz_,
zzzza,
zzzzz,
AAAAa,
AAAAz,
AAAZa,
AAAZz,
AAA_a,
AAA_z,
AAAa,
AAAaA,
AAAaZ,
AAAa_,
AAAaa,
AAAaz,
AAAz,
AAAzA,
AAAzZ,
AAAz_,
AAAza,
AAAzz,
AAZAa,
AAZAz,
AAZZa,
AAZZz,
AAZ_a,
AAZ_z,
AAZa,
AAZaA,
AAZaZ,
AAZa_,
AAZaa,
AAZaz,
AAZz,
AAZzA,
AAZzZ,
AAZz_,
AAZza,
AAZzz,
AA_Aa,
AA_Az,
AA_Za,
AA_Zz,
AA__a,
AA__z,
AA_a,
AA_aA,
AA_aZ,
AA_a_,
AA_aa,
AA_az,
AA_z,
AA_zA,
AA_zZ,
AA_z_,
AA_za,
AA_zz,
AAa,
AAaA,
AAaAA,
AAaAZ,
AAaA_,
AAaAa,
AAaAz,
AAaZ,
AAaZA,
AAaZZ,
AAaZ_,
AAaZa,
AAaZz,
AAa_,
AAa_A,
AAa_Z,
AAa__,
AAa_a,
AAa_z,
AAaa,
AAaaA,
AAaaZ,
AAaa_,
AAaaa,
AAaaz,
AAaz,
AAazA,
AAazZ,
AAaz_,
AAaza,
AAazz,
AAz,
AAzA,
AAzAA,
AAzAZ,
AAzA_,
AAzAa,
AAzAz,
AAzZ,
AAzZA,
AAzZZ,
AAzZ_,
AAzZa,
AAzZz,
AAz_,
AAz_A,
AAz_Z,
AAz__,
AAz_a,
AAz_z,
AAza,
AAzaA,
AAzaZ,
AAza_,
AAzaa,
AAzaz,
AAzz,
AAzzA,
AAzzZ,
AAzz_,
AAzza,
AAzzz,
AZAAa,
AZAAz,
AZAZa,
AZAZz,
AZA_a,
AZA_z,
AZAa,
AZAaA,
AZAaZ,
AZAa_,
AZAaa,
AZAaz,
AZAz,
AZAzA,
AZAzZ,
AZAz_,
AZAza,
AZAzz,
AZZAa,
AZZAz,
AZZZa,
AZZZz,
AZZ_a,
AZZ_z,
AZZa,
AZZaA,
AZZaZ,
AZZa_,
AZZaa,
AZZaz,
AZZz,
AZZzA,
AZZzZ,
AZZz_,
AZZza,
AZZzz,
AZ_Aa,
AZ_Az,
AZ_Za,
AZ_Zz,
AZ__a,
AZ__z,
AZ_a,
AZ_aA,
AZ_aZ,
AZ_a_,
AZ_aa,
AZ_az,
AZ_z,
AZ_zA,
AZ_zZ,
AZ_z_,
AZ_za,
AZ_zz,
AZa,
AZaA,
AZaAA,
AZaAZ,
AZaA_,
AZaAa,
AZaAz,
AZaZ,
AZaZA,
AZaZZ,
AZaZ_,
AZaZa,
AZaZz,
AZa_,
AZa_A,
AZa_Z,
AZa__,
AZa_a,
AZa_z,
AZaa,
AZaaA,
AZaaZ,
AZaa_,
AZaaa,
AZaaz,
AZaz,
AZazA,
AZazZ,
AZaz_,
AZaza,
AZazz,
AZz,
AZzA,
AZzAA,
AZzAZ,
AZzA_,
AZzAa,
AZzAz,
AZzZ,
AZzZA,
AZzZZ,
AZzZ_,
AZzZa,
AZzZz,
AZz_,
AZz_A,
AZz_Z,
AZz__,
AZz_a,
AZz_z,
AZza,
AZzaA,
AZzaZ,
AZza_,
AZzaa,
AZzaz,
AZzz,
AZzzA,
AZzzZ,
AZzz_,
AZzza,
AZzzz,
A_AAa,
A_AAz,
A_AZa,
A_AZz,
A_A_a,
A_A_z,
A_Aa,
A_AaA,
A_AaZ,
A_Aa_,
A_Aaa,
A_Aaz,
A_Az,
A_AzA,
A_AzZ,
A_Az_,
A_Aza,
A_Azz,
A_ZAa,
A_ZAz,
A_ZZa,
A_ZZz,
A_Z_a,
A_Z_z,
A_Za,
A_ZaA,
A_ZaZ,
A_Za_,
A_Zaa,
A_Zaz,
A_Zz,
A_ZzA,
A_ZzZ,
A_Zz_,
A_Zza,
A_Zzz,
A__Aa,
A__Az,
A__Za,
A__Zz,
A___a,
A___z,
A__a,
A__aA,
A__aZ,
A__a_,
A__aa,
A__az,
A__z,
A__zA,
A__zZ,
A__z_,
A__za,
A__zz,
A_a,
A_aA,
A_aAA,
A_aAZ,
A_aA_,
A_aAa,
A_aAz,
A_aZ,
A_aZA,
A_aZZ,
A_aZ_,
A_aZa,
A_aZz,
A_a_,
A_a_A,
A_a_Z,
A_a__,
A_a_a,
A_a_z,
A_aa,
A_aaA,
A_aaZ,
A_aa_,
A_aaa,
A_aaz,
A_az,
A_azA,
A_azZ,
A_az_,
A_aza,
A_azz,
A_z,
A_zA,
A_zAA,
A_zAZ,
A_zA_,
A_zAa,
A_zAz,
A_zZ,
A_zZA,
A_zZZ,
A_zZ_,
A_zZa,
A_zZz,
A_z_,
A_z_A,
A_z_Z,
A_z__,
A_z_a,
A_z_z,
A_za,
A_zaA,
A_zaZ,
A_za_,
A_zaa,
A_zaz,
A_zz,
A_zzA,
A_zzZ,
A_zz_,
A_zza,
A_zzz,
Aa,
AaA,
AaAA,
AaAAA,
AaAAZ,
AaAA_,
AaAAa,
AaAAz,
AaAZ,
AaAZA,
AaAZZ,
AaAZ_,
AaAZa,
AaAZz,
AaA_,
AaA_A,
AaA_Z,
AaA__,
AaA_a,
AaA_z,
AaAa,
AaAaA,
AaAaZ,
AaAa_,
AaAaa,
AaAaz,
AaAz,
AaAzA,
AaAzZ,
AaAz_,
AaAza,
AaAzz,
AaZ,
AaZA,
AaZAA,
AaZAZ,
AaZA_,
AaZAa,
AaZAz,
AaZZ,
AaZZA,
AaZZZ,
AaZZ_,
AaZZa,
AaZZz,
AaZ_,
AaZ_A,
AaZ_Z,
AaZ__,
AaZ_a,
AaZ_z,
AaZa,
AaZaA,
AaZaZ,
AaZa_,
AaZaa,
AaZaz,
AaZz,
AaZzA,
AaZzZ,
AaZz_,
AaZza,
AaZzz,
Aa_,
Aa_A,
Aa_AA,
Aa_AZ,
Aa_A_,
Aa_Aa,
Aa_Az,
Aa_Z,
Aa_ZA,
Aa_ZZ,
Aa_Z_,
Aa_Za,
Aa_Zz,
Aa__,
Aa__A,
Aa__Z,
Aa___,
Aa__a,
Aa__z,
Aa_a,
Aa_aA,
Aa_aZ,
Aa_a_,
Aa_aa,
Aa_az,
Aa_z,
Aa_zA,
Aa_zZ,
Aa_z_,
Aa_za,
Aa_zz,
Aaa,
AaaA,
AaaAA,
AaaAZ,
AaaA_,
AaaAa,
AaaAz,
AaaZ,
AaaZA,
AaaZZ,
AaaZ_,
AaaZa,
AaaZz,
Aaa_,
Aaa_A,
Aaa_Z,
Aaa__,
Aaa_a,
Aaa_z,
Aaaa,
AaaaA,
AaaaZ,
Aaaa_,
Aaaaa,
Aaaaz,
Aaaz,
AaazA,
AaazZ,
Aaaz_,
Aaaza,
Aaazz,
Aaz,
AazA,
AazAA,
AazAZ,
AazA_,
AazAa,
AazAz,
AazZ,
AazZA,
AazZZ,
AazZ_,
AazZa,
AazZz,
Aaz_,
Aaz_A,
Aaz_Z,
Aaz__,
Aaz_a,
Aaz_z,
Aaza,
AazaA,
AazaZ,
Aaza_,
Aazaa,
Aazaz,
Aazz,
AazzA,
AazzZ,
Aazz_,
Aazza,
Aazzz,
Az,
AzA,
AzAA,
AzAAA,
AzAAZ,
AzAA_,
AzAAa,
AzAAz,
AzAZ,
AzAZA,
AzAZZ,
AzAZ_,
AzAZa,
AzAZz,
AzA_,
AzA_A,
AzA_Z,
AzA__,
AzA_a,
AzA_z,
AzAa,
AzAaA,
AzAaZ,
AzAa_,
AzAaa,
AzAaz,
AzAz,
AzAzA,
AzAzZ,
AzAz_,
AzAza,
AzAzz,
AzZ,
AzZA,
AzZAA,
AzZAZ,
AzZA_,
AzZAa,
AzZAz,
AzZZ,
AzZZA,
AzZZZ,
AzZZ_,
AzZZa,
AzZZz,
AzZ_,
AzZ_A,
AzZ_Z,
AzZ__,
AzZ_a,
AzZ_z,
AzZa,
AzZaA,
AzZaZ,
AzZa_,
AzZaa,
AzZaz,
AzZz,
AzZzA,
AzZzZ,
AzZz_,
AzZza,
AzZzz,
Az_,
Az_A,
Az_AA,
Az_AZ,
Az_A_,
Az_Aa,
Az_Az,
Az_Z,
Az_ZA,
Az_ZZ,
Az_Z_,
Az_Za,
Az_Zz,
Az__,
Az__A,
Az__Z,
Az___,
Az__a,
Az__z,
Az_a,
Az_aA,
Az_aZ,
Az_a_,
Az_aa,
Az_az,
Az_z,
Az_zA,
Az_zZ,
Az_z_,
Az_za,
Az_zz,
Aza,
AzaA,
AzaAA,
AzaAZ,
AzaA_,
AzaAa,
AzaAz,
AzaZ,
AzaZA,
AzaZZ,
AzaZ_,
AzaZa,
AzaZz,
Aza_,
Aza_A,
Aza_Z,
Aza__,
Aza_a,
Aza_z,
Azaa,
AzaaA,
AzaaZ,
Azaa_,
Azaaa,
Azaaz,
Azaz,
AzazA,
AzazZ,
Azaz_,
Azaza,
Azazz,
Azz,
AzzA,
AzzAA,
AzzAZ,
AzzA_,
AzzAa,
AzzAz,
AzzZ,
AzzZA,
AzzZZ,
AzzZ_,
AzzZa,
AzzZz,
Azz_,
Azz_A,
Azz_Z,
Azz__,
Azz_a,
Azz_z,
Azza,
AzzaA,
AzzaZ,
Azza_,
Azzaa,
Azzaz,
Azzz,
AzzzA,
AzzzZ,
Azzz_,
Azzza,
Azzzz,
ZAAAa,
ZAAAz,
ZAAZa,
ZAAZz,
ZAA_a,
ZAA_z,
ZAAa,
ZAAaA,
ZAAaZ,
ZAAa_,
ZAAaa,
ZAAaz,
ZAAz,
ZAAzA,
ZAAzZ,
ZAAz_,
ZAAza,
ZAAzz,
ZAZAa,
ZAZAz,
ZAZZa,
ZAZZz,
ZAZ_a,
ZAZ_z,
ZAZa,
ZAZaA,
ZAZaZ,
ZAZa_,
ZAZaa,
ZAZaz,
ZAZz,
ZAZzA,
ZAZzZ,
ZAZz_,
ZAZza,
ZAZzz,
ZA_Aa,
ZA_Az,
ZA_Za,
ZA_Zz,
ZA__a,
ZA__z,
ZA_a,
ZA_aA,
ZA_aZ,
ZA_a_,
ZA_aa,
ZA_az,
ZA_z,
ZA_zA,
ZA_zZ,
ZA_z_,
ZA_za,
ZA_zz,
ZAa,
ZAaA,
ZAaAA,
ZAaAZ,
ZAaA_,
ZAaAa,
ZAaAz,
ZAaZ,
ZAaZA,
ZAaZZ,
ZAaZ_,
ZAaZa,
ZAaZz,
ZAa_,
ZAa_A,
ZAa_Z,
ZAa__,
ZAa_a,
ZAa_z,
ZAaa,
ZAaaA,
ZAaaZ,
ZAaa_,
ZAaaa,
ZAaaz,
ZAaz,
ZAazA,
ZAazZ,
ZAaz_,
ZAaza,
ZAazz,
ZAz,
ZAzA,
ZAzAA,
ZAzAZ,
ZAzA_,
ZAzAa,
ZAzAz,
ZAzZ,
ZAzZA,
ZAzZZ,
ZAzZ_,
ZAzZa,
ZAzZz,
ZAz_,
ZAz_A,
ZAz_Z,
ZAz__,
ZAz_a,
ZAz_z,
ZAza,
ZAzaA,
ZAzaZ,
ZAza_,
ZAzaa,
ZAzaz,
ZAzz,
ZAzzA,
ZAzzZ,
ZAzz_,
ZAzza,
ZAzzz,
ZZAAa,
ZZAAz,
ZZAZa,
ZZAZz,
ZZA_a,
ZZA_z,
ZZAa,
ZZAaA,
ZZAaZ,
ZZAa_,
ZZAaa,
ZZAaz,
ZZAz,
ZZAzA,
ZZAzZ,
ZZAz_,
ZZAza,
ZZAzz,
ZZZAa,
ZZZAz,
ZZZZa,
ZZZZz,
ZZZ_a,
ZZZ_z,
ZZZa,
ZZZaA,
ZZZaZ,
ZZZa_,
ZZZaa,
ZZZaz,
ZZZz,
ZZZzA,
ZZZzZ,
ZZZz_,
ZZZza,
ZZZzz,
ZZ_Aa,
ZZ_Az,
ZZ_Za,
ZZ_Zz,
ZZ__a,
ZZ__z,
ZZ_a,
ZZ_aA,
ZZ_aZ,
ZZ_a_,
ZZ_aa,
ZZ_az,
ZZ_z,
ZZ_zA,
ZZ_zZ,
ZZ_z_,
ZZ_za,
ZZ_zz,
ZZa,
ZZaA,
ZZaAA,
ZZaAZ,
ZZaA_,
ZZaAa,
ZZaAz,
ZZaZ,
ZZaZA,
ZZaZZ,
ZZaZ_,
ZZaZa,
ZZaZz,
ZZa_,
ZZa_A,
ZZa_Z,
ZZa__,
ZZa_a,
ZZa_z,
ZZaa,
ZZaaA,
ZZaaZ,
ZZaa_,
ZZaaa,
ZZaaz,
ZZaz,
ZZazA,
ZZazZ,
ZZaz_,
ZZaza,
ZZazz,
ZZz,
ZZzA,
ZZzAA,
ZZzAZ,
ZZzA_,
ZZzAa,
ZZzAz,
ZZzZ,
ZZzZA,
ZZzZZ,
ZZzZ_,
ZZzZa,
ZZzZz,
ZZz_,
ZZz_A,
ZZz_Z,
ZZz__,
ZZz_a,
ZZz_z,
ZZza,
ZZzaA,
ZZzaZ,
ZZza_,
ZZzaa,
ZZzaz,
ZZzz,
ZZzzA,
ZZzzZ,
ZZzz_,
ZZzza,
ZZzzz,
Z_AAa,
Z_AAz,
Z_AZa,
Z_AZz,
Z_A_a,
Z_A_z,
Z_Aa,
Z_AaA,
Z_AaZ,
Z_Aa_,
Z_Aaa,
Z_Aaz,
Z_Az,
Z_AzA,
Z_AzZ,
Z_Az_,
Z_Aza,
Z_Azz,
Z_ZAa,
Z_ZAz,
Z_ZZa,
Z_ZZz,
Z_Z_a,
Z_Z_z,
Z_Za,
Z_ZaA,
Z_ZaZ,
Z_Za_,
Z_Zaa,
Z_Zaz,
Z_Zz,
Z_ZzA,
Z_ZzZ,
Z_Zz_,
Z_Zza,
Z_Zzz,
Z__Aa,
Z__Az,
Z__Za,
Z__Zz,
Z___a,
Z___z,
Z__a,
Z__aA,
Z__aZ,
Z__a_,
Z__aa,
Z__az,
Z__z,
Z__zA,
Z__zZ,
Z__z_,
Z__za,
Z__zz,
Z_a,
Z_aA,
Z_aAA,
Z_aAZ,
Z_aA_,
Z_aAa,
Z_aAz,
Z_aZ,
Z_aZA,
Z_aZZ,
Z_aZ_,
Z_aZa,
Z_aZz,
Z_a_,
Z_a_A,
Z_a_Z,
Z_a__,
Z_a_a,
Z_a_z,
Z_aa,
Z_aaA,
Z_aaZ,
Z_aa_,
Z_aaa,
Z_aaz,
Z_az,
Z_azA,
Z_azZ,
Z_az_,
Z_aza,
Z_azz,
Z_z,
Z_zA,
Z_zAA,
Z_zAZ,
Z_zA_,
Z_zAa,
Z_zAz,
Z_zZ,
Z_zZA,
Z_zZZ,
Z_zZ_,
Z_zZa,
Z_zZz,
Z_z_,
Z_z_A,
Z_z_Z,
Z_z__,
Z_z_a,
Z_z_z,
Z_za,
Z_zaA,
Z_zaZ,
Z_za_,
Z_zaa,
Z_zaz,
Z_zz,
Z_zzA,
Z_zzZ,
Z_zz_,
Z_zza,
Z_zzz,
Za,
ZaA,
ZaAA,
ZaAAA,
ZaAAZ,
ZaAA_,
ZaAAa,
ZaAAz,
ZaAZ,
ZaAZA,
ZaAZZ,
ZaAZ_,
ZaAZa,
ZaAZz,
ZaA_,
ZaA_A,
ZaA_Z,
ZaA__,
ZaA_a,
ZaA_z,
ZaAa,
ZaAaA,
ZaAaZ,
ZaAa_,
ZaAaa,
ZaAaz,
ZaAz,
ZaAzA,
ZaAzZ,
ZaAz_,
ZaAza,
ZaAzz,
ZaZ,
ZaZA,
ZaZAA,
ZaZAZ,
ZaZA_,
ZaZAa,
ZaZAz,
ZaZZ,
ZaZZA,
ZaZZZ,
ZaZZ_,
ZaZZa,
ZaZZz,
ZaZ_,
ZaZ_A,
ZaZ_Z,
ZaZ__,
ZaZ_a,
ZaZ_z,
ZaZa,
ZaZaA,
ZaZaZ,
ZaZa_,
ZaZaa,
ZaZaz,
ZaZz,
ZaZzA,
ZaZzZ,
ZaZz_,
ZaZza,
ZaZzz,
Za_,
Za_A,
Za_AA,
Za_AZ,
Za_A_,
Za_Aa,
Za_Az,
Za_Z,
Za_ZA,
Za_ZZ,
Za_Z_,
Za_Za,
Za_Zz,
Za__,
Za__A,
Za__Z,
Za___,
Za__a,
Za__z,
Za_a,
Za_aA,
Za_aZ,
Za_a_,
Za_aa,
Za_az,
Za_z,
Za_zA,
Za_zZ,
Za_z_,
Za_za,
Za_zz,
Zaa,
ZaaA,
ZaaAA,
ZaaAZ,
ZaaA_,
ZaaAa,
ZaaAz,
ZaaZ,
ZaaZA,
ZaaZZ,
ZaaZ_,
ZaaZa,
ZaaZz,
Zaa_,
Zaa_A,
Zaa_Z,
Zaa__,
Zaa_a,
Zaa_z,
Zaaa,
ZaaaA,
ZaaaZ,
Zaaa_,
Zaaaa,
Zaaaz,
Zaaz,
ZaazA,
ZaazZ,
Zaaz_,
Zaaza,
Zaazz,
Zaz,
ZazA,
ZazAA,
ZazAZ,
ZazA_,
ZazAa,
ZazAz,
ZazZ,
ZazZA,
ZazZZ,
ZazZ_,
ZazZa,
ZazZz,
Zaz_,
Zaz_A,
Zaz_Z,
Zaz__,
Zaz_a,
Zaz_z,
Zaza,
ZazaA,
ZazaZ,
Zaza_,
Zazaa,
Zazaz,
Zazz,
ZazzA,
ZazzZ,
Zazz_,
Zazza,
Zazzz,
Zz,
ZzA,
ZzAA,
ZzAAA,
ZzAAZ,
ZzAA_,
ZzAAa,
ZzAAz,
ZzAZ,
ZzAZA,
ZzAZZ,
ZzAZ_,
ZzAZa,
ZzAZz,
ZzA_,
ZzA_A,
ZzA_Z,
ZzA__,
ZzA_a,
ZzA_z,
ZzAa,
ZzAaA,
ZzAaZ,
ZzAa_,
ZzAaa,
ZzAaz,
ZzAz,
ZzAzA,
ZzAzZ,
ZzAz_,
ZzAza,
ZzAzz,
ZzZ,
ZzZA,
ZzZAA,
ZzZAZ,
ZzZA_,
ZzZAa,
ZzZAz,
ZzZZ,
ZzZZA,
ZzZZZ,
ZzZZ_,
ZzZZa,
ZzZZz,
ZzZ_,
ZzZ_A,
ZzZ_Z,
ZzZ__,
ZzZ_a,
ZzZ_z,
ZzZa,
ZzZaA,
ZzZaZ,
ZzZa_,
ZzZaa,
ZzZaz,
ZzZz,
ZzZzA,
ZzZzZ,
ZzZz_,
ZzZza,
ZzZzz,
Zz_,
Zz_A,
Zz_AA,
Zz_AZ,
Zz_A_,
Zz_Aa,
Zz_Az,
Zz_Z,
Zz_ZA,
Zz_ZZ,
Zz_Z_,
Zz_Za,
Zz_Zz,
Zz__,
Zz__A,
Zz__Z,
Zz___,
Zz__a,
Zz__z,
Zz_a,
Zz_aA,
Zz_aZ,
Zz_a_,
Zz_aa,
Zz_az,
Zz_z,
Zz_zA,
Zz_zZ,
Zz_z_,
Zz_za,
Zz_zz,
Zza,
ZzaA,
ZzaAA,
ZzaAZ,
ZzaA_,
ZzaAa,
ZzaAz,
ZzaZ,
ZzaZA,
ZzaZZ,
ZzaZ_,
ZzaZa,
ZzaZz,
Zza_,
Zza_A,
Zza_Z,
Zza__,
Zza_a,
Zza_z,
Zzaa,
ZzaaA,
ZzaaZ,
Zzaa_,
Zzaaa,
Zzaaz,
Zzaz,
ZzazA,
ZzazZ,
Zzaz_,
Zzaza,
Zzazz,
Zzz,
ZzzA,
ZzzAA,
ZzzAZ,
ZzzA_,
ZzzAa,
ZzzAz,
ZzzZ,
ZzzZA,
ZzzZZ,
ZzzZ_,
ZzzZa,
ZzzZz,
Zzz_,
Zzz_A,
Zzz_Z,
Zzz__,
Zzz_a,
Zzz_z,
Zzza,
ZzzaA,
ZzzaZ,
Zzza_,
Zzzaa,
Zzzaz,
Zzzz,
ZzzzA,
ZzzzZ,
Zzzz_,
Zzzza,
Zzzzz,
_AAAa,
_AAAz,
_AAZa,
_AAZz,
_AA_a,
_AA_z,
_AAa,
_AAaA,
_AAaZ,
_AAa_,
_AAaa,
_AAaz,
_AAz,
_AAzA,
_AAzZ,
_AAz_,
_AAza,
_AAzz,
_AZAa,
_AZAz,
_AZZa,
_AZZz,
_AZ_a,
_AZ_z,
_AZa,
_AZaA,
_AZaZ,
_AZa_,
_AZaa,
_AZaz,
_AZz,
_AZzA,
_AZzZ,
_AZz_,
_AZza,
_AZzz,
_A_Aa,
_A_Az,
_A_Za,
_A_Zz,
_A__a,
_A__z,
_A_a,
_A_aA,
_A_aZ,
_A_a_,
_A_aa,
_A_az,
_A_z,
_A_zA,
_A_zZ,
_A_z_,
_A_za,
_A_zz,
_Aa,
_AaA,
_AaAA,
_AaAZ,
_AaA_,
_AaAa,
_AaAz,
_AaZ,
_AaZA,
_AaZZ,
_AaZ_,
_AaZa,
_AaZz,
_Aa_,
_Aa_A,
_Aa_Z,
_Aa__,
_Aa_a,
_Aa_z,
_Aaa,
_AaaA,
_AaaZ,
_Aaa_,
_Aaaa,
_Aaaz,
_Aaz,
_AazA,
_AazZ,
_Aaz_,
_Aaza,
_Aazz,
_Az,
_AzA,
_AzAA,
_AzAZ,
_AzA_,
_AzAa,
_AzAz,
_AzZ,
_AzZA,
_AzZZ,
_AzZ_,
_AzZa,
_AzZz,
_Az_,
_Az_A,
_Az_Z,
_Az__,
_Az_a,
_Az_z,
_Aza,
_AzaA,
_AzaZ,
_Aza_,
_Azaa,
_Azaz,
_Azz,
_AzzA,
_AzzZ,
_Azz_,
_Azza,
_Azzz,
_ZAAa,
_ZAAz,
_ZAZa,
_ZAZz,
_ZA_a,
_ZA_z,
_ZAa,
_ZAaA,
_ZAaZ,
_ZAa_,
_ZAaa,
_ZAaz,
_ZAz,
_ZAzA,
_ZAzZ,
_ZAz_,
_ZAza,
_ZAzz,
_ZZAa,
_ZZAz,
_ZZZa,
_ZZZz,
_ZZ_a,
_ZZ_z,
_ZZa,
_ZZaA,
_ZZaZ,
_ZZa_,
_ZZaa,
_ZZaz,
_ZZz,
_ZZzA,
_ZZzZ,
_ZZz_,
_ZZza,
_ZZzz,
_Z_Aa,
_Z_Az,
_Z_Za,
_Z_Zz,
_Z__a,
_Z__z,
_Z_a,
_Z_aA,
_Z_aZ,
_Z_a_,
_Z_aa,
_Z_az,
_Z_z,
_Z_zA,
_Z_zZ,
_Z_z_,
_Z_za,
_Z_zz,
_Za,
_ZaA,
_ZaAA,
_ZaAZ,
_ZaA_,
_ZaAa,
_ZaAz,
_ZaZ,
_ZaZA,
_ZaZZ,
_ZaZ_,
_ZaZa,
_ZaZz,
_Za_,
_Za_A,
_Za_Z,
_Za__,
_Za_a,
_Za_z,
_Zaa,
_ZaaA,
_ZaaZ,
_Zaa_,
_Zaaa,
_Zaaz,
_Zaz,
_ZazA,
_ZazZ,
_Zaz_,
_Zaza,
_Zazz,
_Zz,
_ZzA,
_ZzAA,
_ZzAZ,
_ZzA_,
_ZzAa,
_ZzAz,
_ZzZ,
_ZzZA,
_ZzZZ,
_ZzZ_,
_ZzZa,
_ZzZz,
_Zz_,
_Zz_A,
_Zz_Z,
_Zz__,
_Zz_a,
_Zz_z,
_Zza,
_ZzaA,
_ZzaZ,
_Zza_,
_Zzaa,
_Zzaz,
_Zzz,
_ZzzA,
_ZzzZ,
_Zzz_,
_Zzza,
_Zzzz,
__AAa,
__AAz,
__AZa,
__AZz,
__A_a,
__A_z,
__Aa,
__AaA,
__AaZ,
__Aa_,
__Aaa,
__Aaz,
__Az,
__AzA,
__AzZ,
__Az_,
__Aza,
__Azz,
__ZAa,
__ZAz,
__ZZa,
__ZZz,
__Z_a,
__Z_z,
__Za,
__ZaA,
__ZaZ,
__Za_,
__Zaa,
__Zaz,
__Zz,
__ZzA,
__ZzZ,
__Zz_,
__Zza,
__Zzz,
___Aa,
___Az,
___Za,
___Zz,
____a,
____z,
___a,
___aA,
___aZ,
___a_,
___aa,
___az,
___z,
___zA,
___zZ,
___z_,
___za,
___zz,
__a,
__aA,
__aAA,
__aAZ,
__aA_,
__aAa,
__aAz,
__aZ,
__aZA,
__aZZ,
__aZ_,
__aZa,
__aZz,
__a_,
__a_A,
__a_Z,
__a__,
__a_a,
__a_z,
__aa,
__aaA,
__aaZ,
__aa_,
__aaa,
__aaz,
__az,
__azA,
__azZ,
__az_,
__aza,
__azz,
__z,
__zA,
__zAA,
__zAZ,
__zA_,
__zAa,
__zAz,
__zZ,
__zZA,
__zZZ,
__zZ_,
__zZa,
__zZz,
__z_,
__z_A,
__z_Z,
__z__,
__z_a,
__z_z,
__za,
__zaA,
__zaZ,
__za_,
__zaa,
__zaz,
__zz,
__zzA,
__zzZ,
__zz_,
__zza,
__zzz,
_a,
_aA,
_aAA,
_aAAA,
_aAAZ,
_aAA_,
_aAAa,
_aAAz,
_aAZ,
_aAZA,
_aAZZ,
_aAZ_,
_aAZa,
_aAZz,
_aA_,
_aA_A,
_aA_Z,
_aA__,
_aA_a,
_aA_z,
_aAa,
_aAaA,
_aAaZ,
_aAa_,
_aAaa,
_aAaz,
_aAz,
_aAzA,
_aAzZ,
_aAz_,
_aAza,
_aAzz,
_aZ,
_aZA,
_aZAA,
_aZAZ,
_aZA_,
_aZAa,
_aZAz,
_aZZ,
_aZZA,
_aZZZ,
_aZZ_,
_aZZa,
_aZZz,
_aZ_,
_aZ_A,
_aZ_Z,
_aZ__,
_aZ_a,
_aZ_z,
_aZa,
_aZaA,
_aZaZ,
_aZa_,
_aZaa,
_aZaz,
_aZz,
_aZzA,
_aZzZ,
_aZz_,
_aZza,
_aZzz,
_a_,
_a_A,
_a_AA,
_a_AZ,
_a_A_,
_a_Aa,
_a_Az,
_a_Z,
_a_ZA,
_a_ZZ,
_a_Z_,
_a_Za,
_a_Zz,
_a__,
_a__A,
_a__Z,
_a___,
_a__a,
_a__z,
_a_a,
_a_aA,
_a_aZ,
_a_a_,
_a_aa,
_a_az,
_a_z,
_a_zA,
_a_zZ,
_a_z_,
_a_za,
_a_zz,
_aa,
_aaA,
_aaAA,
_aaAZ,
_aaA_,
_aaAa,
_aaAz,
_aaZ,
_aaZA,
_aaZZ,
_aaZ_,
_aaZa,
_aaZz,
_aa_,
_aa_A,
_aa_Z,
_aa__,
_aa_a,
_aa_z,
_aaa,
_aaaA,
_aaaZ,
_aaa_,
_aaaa,
_aaaz,
_aaz,
_aazA,
_aazZ,
_aaz_,
_aaza,
_aazz,
_az,
_azA,
_azAA,
_azAZ,
_azA_,
_azAa,
_azAz,
_azZ,
_azZA,
_azZZ,
_azZ_,
_azZa,
_azZz,
_az_,
_az_A,
_az_Z,
_az__,
_az_a,
_az_z,
_aza,
_azaA,
_azaZ,
_aza_,
_azaa,
_azaz,
_azz,
_azzA,
_azzZ,
_azz_,
_azza,
_azzz,
_z,
_zA,
_zAA,
_zAAA,
_zAAZ,
_zAA_,
_zAAa,
_zAAz,
_zAZ,
_zAZA,
_zAZZ,
_zAZ_,
_zAZa,
_zAZz,
_zA_,
_zA_A,
_zA_Z,
_zA__,
_zA_a,
_zA_z,
_zAa,
_zAaA,
_zAaZ,
_zAa_,
_zAaa,
_zAaz,
_zAz,
_zAzA,
_zAzZ,
_zAz_,
_zAza,
_zAzz,
_zZ,
_zZA,
_zZAA,
_zZAZ,
_zZA_,
_zZAa,
_zZAz,
_zZZ,
_zZZA,
_zZZZ,
_zZZ_,
_zZZa,
_zZZz,
_zZ_,
_zZ_A,
_zZ_Z,
_zZ__,
_zZ_a,
_zZ_z,
_zZa,
_zZaA,
_zZaZ,
_zZa_,
_zZaa,
_zZaz,
_zZz,
_zZzA,
_zZzZ,
_zZz_,
_zZza,
_zZzz,
_z_,
_z_A,
_z_AA,
_z_AZ,
_z_A_,
_z_Aa,
_z_Az,
_z_Z,
_z_ZA,
_z_ZZ,
_z_Z_,
_z_Za,
_z_Zz,
_z__,
_z__A,
_z__Z,
_z___,
_z__a,
_z__z,
_z_a,
_z_aA,
_z_aZ,
_z_a_,
_z_aa,
_z_az,
_z_z,
_z_zA,
_z_zZ,
_z_z_,
_z_za,
_z_zz,
_za,
_zaA,
_zaAA,
_zaAZ,
_zaA_,
_zaAa,
_zaAz,
_zaZ,
_zaZA,
_zaZZ,
_zaZ_,
_zaZa,
_zaZz,
_za_,
_za_A,
_za_Z,
_za__,
_za_a,
_za_z,
_zaa,
_zaaA,
_zaaZ,
_zaa_,
_zaaa,
_zaaz,
_zaz,
_zazA,
_zazZ,
_zaz_,
_zaza,
_zazz,
_zz,
_zzA,
_zzAA,
_zzAZ,
_zzA_,
_zzAa,
_zzAz,
_zzZ,
_zzZA,
_zzZZ,
_zzZ_,
_zzZa,
_zzZz,
_zz_,
_zz_A,
_zz_Z,
_zz__,
_zz_a,
_zz_z,
_zza,
_zzaA,
_zzaZ,
_zza_,
_zzaa,
_zzaz,
_zzz,
_zzzA,
_zzzZ,
_zzz_,
_zzza,
_zzzz,
A,
AA,
AAA,
AAAA,
AAAAA,
AAAAZ,
AAAA_,
AAAZ,
AAAZA,
AAAZZ,
AAAZ_,
AAA_,
AAA_A,
AAA_Z,
AAA__,
AAZ,
AAZA,
AAZAA,
AAZAZ,
AAZA_,
AAZZ,
AAZZA,
AAZZZ,
AAZZ_,
AAZ_,
AAZ_A,
AAZ_Z,
AAZ__,
AA_,
AA_A,
AA_AA,
AA_AZ,
AA_A_,
AA_Z,
AA_ZA,
AA_ZZ,
AA_Z_,
AA__,
AA__A,
AA__Z,
AA___,
AZ,
AZA,
AZAA,
AZAAA,
AZAAZ,
AZAA_,
AZAZ,
AZAZA,
AZAZZ,
AZAZ_,
AZA_,
AZA_A,
AZA_Z,
AZA__,
AZZ,
AZZA,
AZZAA,
AZZAZ,
AZZA_,
AZZZ,
AZZZA,
AZZZZ,
AZZZ_,
AZZ_,
AZZ_A,
AZZ_Z,
AZZ__,
AZ_,
AZ_A,
AZ_AA,
AZ_AZ,
AZ_A_,
AZ_Z,
AZ_ZA,
AZ_ZZ,
AZ_Z_,
AZ__,
AZ__A,
AZ__Z,
AZ___,
A_,
A_A,
A_AA,
A_AAA,
A_AAZ,
A_AA_,
A_AZ,
A_AZA,
A_AZZ,
A_AZ_,
A_A_,
A_A_A,
A_A_Z,
A_A__,
A_Z,
A_ZA,
A_ZAA,
A_ZAZ,
A_ZA_,
A_ZZ,
A_ZZA,
A_ZZZ,
A_ZZ_,
A_Z_,
A_Z_A,
A_Z_Z,
A_Z__,
A__,
A__A,
A__AA,
A__AZ,
A__A_,
A__Z,
A__ZA,
A__ZZ,
A__Z_,
A___,
A___A,
A___Z,
A____,
Z,
ZA,
ZAA,
ZAAA,
ZAAAA,
ZAAAZ,
ZAAA_,
ZAAZ,
ZAAZA,
ZAAZZ,
ZAAZ_,
ZAA_,
ZAA_A,
ZAA_Z,
ZAA__,
ZAZ,
ZAZA,
ZAZAA,
ZAZAZ,
ZAZA_,
ZAZZ,
ZAZZA,
ZAZZZ,
ZAZZ_,
ZAZ_,
ZAZ_A,
ZAZ_Z,
ZAZ__,
ZA_,
ZA_A,
ZA_AA,
ZA_AZ,
ZA_A_,
ZA_Z,
ZA_ZA,
ZA_ZZ,
ZA_Z_,
ZA__,
ZA__A,
ZA__Z,
ZA___,
ZZ,
ZZA,
ZZAA,
ZZAAA,
ZZAAZ,
ZZAA_,
ZZAZ,
ZZAZA,
ZZAZZ,
ZZAZ_,
ZZA_,
ZZA_A,
ZZA_Z,
ZZA__,
ZZZ,
ZZZA,
ZZZAA,
ZZZAZ,
ZZZA_,
ZZZZ,
ZZZZA,
ZZZZZ,
ZZZZ_,
ZZZ_,
ZZZ_A,
ZZZ_Z,
ZZZ__,
ZZ_,
ZZ_A,
ZZ_AA,
ZZ_AZ,
ZZ_A_,
ZZ_Z,
ZZ_ZA,
ZZ_ZZ,
ZZ_Z_,
ZZ__,
ZZ__A,
ZZ__Z,
ZZ___,
Z_,
Z_A,
Z_AA,
Z_AAA,
Z_AAZ,
Z_AA_,
Z_AZ,
Z_AZA,
Z_AZZ,
Z_AZ_,
Z_A_,
Z_A_A,
Z_A_Z,
Z_A__,
Z_Z,
Z_ZA,
Z_ZAA,
Z_ZAZ,
Z_ZA_,
Z_ZZ,
Z_ZZA,
Z_ZZZ,
Z_ZZ_,
Z_Z_,
Z_Z_A,
Z_Z_Z,
Z_Z__,
Z__,
Z__A,
Z__AA,
Z__AZ,
Z__A_,
Z__Z,
Z__ZA,
Z__ZZ,
Z__Z_,
Z___,
Z___A,
Z___Z,
Z____,
_A,
_AA,
_AAA,
_AAAA,
_AAAZ,
_AAA_,
_AAZ,
_AAZA,
_AAZZ,
_AAZ_,
_AA_,
_AA_A,
_AA_Z,
_AA__,
_AZ,
_AZA,
_AZAA,
_AZAZ,
_AZA_,
_AZZ,
_AZZA,
_AZZZ,
_AZZ_,
_AZ_,
_AZ_A,
_AZ_Z,
_AZ__,
_A_,
_A_A,
_A_AA,
_A_AZ,
_A_A_,
_A_Z,
_A_ZA,
_A_ZZ,
_A_Z_,
_A__,
_A__A,
_A__Z,
_A___,
_Z,
_ZA,
_ZAA,
_ZAAA,
_ZAAZ,
_ZAA_,
_ZAZ,
_ZAZA,
_ZAZZ,
_ZAZ_,
_ZA_,
_ZA_A,
_ZA_Z,
_ZA__,
_ZZ,
_ZZA,
_ZZAA,
_ZZAZ,
_ZZA_,
_ZZZ,
_ZZZA,
_ZZZZ,
_ZZZ_,
_ZZ_,
_ZZ_A,
_ZZ_Z,
_ZZ__,
_Z_,
_Z_A,
_Z_AA,
_Z_AZ,
_Z_A_,
_Z_Z,
_Z_ZA,
_Z_ZZ,
_Z_Z_,
_Z__,
_Z__A,
_Z__Z,
_Z___,
__A,
__AA,
__AAA,
__AAZ,
__AA_,
__AZ,
__AZA,
__AZZ,
__AZ_,
__A_,
__A_A,
__A_Z,
__A__,
__Z,
__ZA,
__ZAA,
__ZAZ,
__ZA_,
__ZZ,
__ZZA,
__ZZZ,
__ZZ_,
__Z_,
__Z_A,
__Z_Z,
__Z__,
___A,
___AA,
___AZ,
___A_,
___Z,
___ZA,
___ZZ,
___Z_,
____A,
____Z,
};
#!/usr/bin/env rust-script
use std::env;
use std::fs;
fn main() {
// Read the file path from command-line arguments
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
eprintln!("Usage: {} <file_path>", args[0]);
std::process::exit(1);
}
let path = &args[1];
// Read the file
let content = fs::read_to_string(&path)
.expect("Failed to read file");
// Parse and format
let formatted = format_imports(&content);
// Write back to file
fs::write(&path, formatted)
.expect("Failed to write file");
println!("Formatted: {}", path);
}
fn has_lowercase(s: &str) -> bool {
s.chars().any(|c| c.is_ascii_lowercase())
}
fn first_char_sort_key(c: char) -> (u8, char) {
// For first character: lowercase, uppercase, underscore
match c {
'a'..='z' => (0, c),
'A'..='Z' => (1, c),
'_' => (2, c),
_ => (3, c),
}
}
/// This is just ASCII order, this is the built in str Ord
fn suffix_char_sort_key(c: char) -> (u8, char) {
// For suffix characters: uppercase, underscore, lowercase
match c {
'A'..='Z' => (0, c),
'_' => (1, c),
'a'..='z' => (2, c),
_ => (3, c),
}
}
fn sort_key(s: &str) -> (u8, Vec<(u8, char)>) {
// Primary sort: strings with lowercase come before strings without lowercase
let primary = if has_lowercase(s) { 0 } else { 1 };
let mut chars = s.chars();
let mut secondary = Vec::new();
// First character uses different sort order
if let Some(first) = chars.next() {
secondary.push(first_char_sort_key(first));
}
// Remaining characters (suffix) use different sort order
for c in chars {
secondary.push(suffix_char_sort_key(c));
}
(primary, secondary)
}
fn format_imports(content: &str) -> String {
let lines: Vec<&str> = content.lines().collect();
// Find the use block boundaries
let start_idx = lines.iter().position(|l| l.trim().starts_with("use a::{"))
.expect("Could not find 'use a::{' start");
let end_idx = lines.iter().position(|l| l.trim() == "};")
.expect("Could not find '};' end");
// Extract import items (lines between start and end, excluding the braces)
let mut items: Vec<String> = Vec::new();
for i in (start_idx + 1)..end_idx {
let line = lines[i].trim();
if !line.is_empty() {
// Remove trailing comma if present
let item = line.trim_end_matches(',').trim().to_string();
items.push(item);
}
}
// Sort the items using custom sort key
items.sort_by_cached_key(|item| sort_key(item));
// Build the formatted use block
let mut result = String::new();
// Add everything before the use block
for i in 0..start_idx {
result.push_str(lines[i]);
result.push('\n');
}
// Add the formatted use block with vertical layout
result.push_str("use a::{\n");
for item in items {
result.push_str(&format!(" {},\n", item));
}
result.push_str("};\n");
// Add everything after the use block
for i in (end_idx + 1)..lines.len() {
result.push_str(lines[i]);
result.push('\n');
}
result
}
#!/usr/bin/env rust-script
use std::env;
use std::fs;
fn main() {
// Read the file path from command-line arguments
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
eprintln!("Usage: {} <file_path>", args[0]);
std::process::exit(1);
}
let path = &args[1];
// Read the file
let content = fs::read_to_string(&path)
.expect("Failed to read file");
// Parse and format
let formatted = format_imports(&content);
// Write back to file
fs::write(&path, formatted)
.expect("Failed to write file");
println!("Formatted: {}", path);
}
fn has_lowercase(s: &str) -> bool {
s.chars().any(|c| c.is_ascii_lowercase())
}
fn first_char_sort_key(c: char) -> (u8, char) {
// For first character: lowercase, uppercase, underscore
match c {
'a'..='z' => (0, c),
'A'..='Z' => (1, c),
'_' => (2, c),
_ => (3, c),
}
}
fn sort_key(s: &str) -> (u8, (u8, char), String) {
// Key 1: Primary sort - strings with lowercase come before strings without lowercase
let primary = if has_lowercase(s) { 0 } else { 1 };
let mut chars = s.chars();
// Key 2: First character uses custom sort order
let first = chars.next()
.map(first_char_sort_key)
.unwrap_or((0, '\0'));
// Key 3: Remaining characters use ASCII order (built-in String comparison)
let suffix: String = chars.collect();
(primary, first, suffix)
}
fn format_imports(content: &str) -> String {
let lines: Vec<&str> = content.lines().collect();
// Find the use block boundaries
let start_idx = lines.iter().position(|l| l.trim().starts_with("use a::{"))
.expect("Could not find 'use a::{' start");
let end_idx = lines.iter().position(|l| l.trim() == "};")
.expect("Could not find '};' end");
// Extract import items (lines between start and end, excluding the braces)
let mut items: Vec<String> = Vec::new();
for i in (start_idx + 1)..end_idx {
let line = lines[i].trim();
if !line.is_empty() {
// Remove trailing comma if present
let item = line.trim_end_matches(',').trim().to_string();
items.push(item);
}
}
// Sort the items using custom sort key
items.sort_by_cached_key(|item| sort_key(item));
// Build the formatted use block
let mut result = String::new();
// Add everything before the use block
for i in 0..start_idx {
result.push_str(lines[i]);
result.push('\n');
}
// Add the formatted use block with vertical layout
result.push_str("use a::{\n");
for item in items {
result.push_str(&format!(" {},\n", item));
}
result.push_str("};\n");
// Add everything after the use block
for i in (end_idx + 1)..lines.len() {
result.push_str(lines[i]);
result.push('\n');
}
result
}
#!/usr/bin/env rust-script
use std::env;
use std::fs;
fn main() {
// Read the file path from command-line arguments
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
eprintln!("Usage: {} <file_path>", args[0]);
std::process::exit(1);
}
let path = &args[1];
// Read the file
let content = fs::read_to_string(&path)
.expect("Failed to read file");
// Parse and format
let formatted = format_imports(&content);
// Write back to file
fs::write(&path, formatted)
.expect("Failed to write file");
println!("Formatted: {}", path);
}
fn has_lowercase(s: &str) -> bool {
s.chars().any(|c| c.is_ascii_lowercase())
}
/// 2-tuple key modifying ASCII ord so lowercase come first: (is_upper: bool, c: char)
fn first_char_sort_key(c: char) -> (bool, char) {
// For first character: lowercase letters sort first, then compare by ASCII value
// This gives order: a-z, A-Z, _ (since _ < a in ASCII but the bool moves it ahead)
(!c.is_ascii_lowercase(), c)
}
fn sort_key(s: &str) -> (u8, (bool, char), String) {
// Key 1: Primary sort - strings with lowercase come before strings without lowercase
let primary = if has_lowercase(s) { 0 } else { 1 };
let mut chars = s.chars();
// Key 2: First character uses custom sort order
let first = chars.next()
.map(first_char_sort_key)
.unwrap_or((false, '\0'));
// Key 3: Remaining characters use ASCII order (built-in String comparison)
let suffix: String = chars.collect();
(primary, first, suffix)
}
fn format_imports(content: &str) -> String {
let lines: Vec<&str> = content.lines().collect();
// Find the use block boundaries
let start_idx = lines.iter().position(|l| l.trim().starts_with("use a::{"))
.expect("Could not find 'use a::{' start");
let end_idx = lines.iter().position(|l| l.trim() == "};")
.expect("Could not find '};' end");
// Extract import items (lines between start and end, excluding the braces)
let mut items: Vec<String> = Vec::new();
for i in (start_idx + 1)..end_idx {
let line = lines[i].trim();
if !line.is_empty() {
// Remove trailing comma if present
let item = line.trim_end_matches(',').trim().to_string();
items.push(item);
}
}
// Sort the items using custom sort key
items.sort_by_cached_key(|item| sort_key(item));
// Build the formatted use block
let mut result = String::new();
// Add everything before the use block
for i in 0..start_idx {
result.push_str(lines[i]);
result.push('\n');
}
// Add the formatted use block with vertical layout
result.push_str("use a::{\n");
for item in items {
result.push_str(&format!(" {},\n", item));
}
result.push_str("};\n");
// Add everything after the use block
for i in (end_idx + 1)..lines.len() {
result.push_str(lines[i]);
result.push('\n');
}
result
}
#!/usr/bin/env rust-script
use std::env;
use std::fs;
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
eprintln!("Usage: {} <file_path>", args[0]);
std::process::exit(1);
}
let path = &args[1];
let content = fs::read_to_string(path).expect("Failed to read file");
let formatted = format_imports(&content);
fs::write(path, formatted).expect("Failed to write file");
println!("Formatted: {}", path);
}
fn has_lowercase(s: &str) -> bool {
s.chars().any(|c| c.is_ascii_lowercase())
}
fn first_char_sort_key(c: char) -> u8 {
match c {
'a'..='z' => 0,
'A'..='Z' => 1,
'_' => 2,
_ => 3,
}
}
fn sort_key(s: &str) -> (bool, u8, char, &str) {
let mut chars = s.chars();
let first = chars.next().unwrap_or('\0');
(
!has_lowercase(s), // false sorts before true
first_char_sort_key(first),
first,
chars.as_str(), // remaining string slice (no allocation!)
)
}
fn format_imports(content: &str) -> String {
let lines: Vec<&str> = content.lines().collect();
let start_idx = lines.iter().position(|l| l.trim().starts_with("use a::{"))
.expect("Could not find 'use a::{' start");
let end_idx = lines.iter().position(|l| l.trim() == "};")
.expect("Could not find '};' end");
let mut items: Vec<&str> = lines[(start_idx + 1)..end_idx]
.iter()
.map(|l| l.trim().trim_end_matches(','))
.filter(|l| !l.is_empty())
.collect();
items.sort_by_cached_key(|&item| sort_key(item));
let mut result = String::new();
for line in &lines[..start_idx] {
result.push_str(line);
result.push('\n');
}
result.push_str("use a::{\n");
for item in items {
result.push_str(&format!(" {},\n", item));
}
result.push_str("};\n");
for line in &lines[(end_idx + 1)..] {
result.push_str(line);
result.push('\n');
}
result
}
#!/usr/bin/env rust-script
use std::env;
use std::fs;
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
eprintln!("Usage: {} <file_path>", args[0]);
std::process::exit(1);
}
let path = &args[1];
let content = fs::read_to_string(path).expect("Failed to read file");
let formatted = format_imports(&content);
fs::write(path, formatted).expect("Failed to write file");
println!("Formatted: {}", path);
}
fn has_lowercase(s: &str) -> bool {
s.chars().any(|c| c.is_ascii_lowercase())
}
fn sort_key(s: &str) -> (bool, bool, char, &str) {
let mut chars = s.chars();
let first = chars.next().unwrap_or('\0');
(
!has_lowercase(s), // Key 1: false sorts before true (lowercase before ALL_CAPS)
!first.is_ascii_lowercase(), // Key 2a: false sorts before true (lowercase before uppercase/other)
first, // Key 2b: then by ASCII value of the char itself
chars.as_str(), // Key 3: remaining chars use ASCII order (no allocation!)
)
}
fn format_imports(content: &str) -> String {
let lines: Vec<&str> = content.lines().collect();
let start_idx = lines.iter().position(|l| l.trim().starts_with("use a::{"))
.expect("Could not find 'use a::{' start");
let end_idx = lines.iter().position(|l| l.trim() == "};")
.expect("Could not find '};' end");
let mut items: Vec<&str> = lines[(start_idx + 1)..end_idx]
.iter()
.map(|l| l.trim().trim_end_matches(','))
.filter(|l| !l.is_empty())
.collect();
items.sort_by_key(|&item| sort_key(item));
let mut result = String::new();
for line in &lines[..start_idx] {
result.push_str(line);
result.push('\n');
}
result.push_str("use a::{\n");
for item in items {
result.push_str(&format!(" {},\n", item));
}
result.push_str("};\n");
for line in &lines[(end_idx + 1)..] {
result.push_str(line);
result.push('\n');
}
result
}
#!/usr/bin/env rust-script
use std::env;
use std::fs;
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
eprintln!("Usage: {} <file_path>", args[0]);
std::process::exit(1);
}
let path = &args[1];
let content = fs::read_to_string(path).expect("Failed to read file");
let formatted = format_imports(&content);
fs::write(path, formatted).expect("Failed to write file");
println!("Formatted: {}", path);
}
fn has_lowercase(s: &str) -> bool {
s.as_bytes().iter().any(|&b| b.is_ascii_lowercase())
}
// Key 1: ALL_CAPS identifiers sort last
// Key 2: identifiers with uppercase initial sort after ones with lowercase initial
// Key 3: then by full string ASCII order
fn sort_key(s: &str) -> (bool, bool, &str) {
let first_is_lower = s.as_bytes().first()
.map_or(false, |&b| b.is_ascii_lowercase());
// Skip expensive scan if first char is lowercase (guarantees it has lowercase)
let is_all_caps = if first_is_lower { false } else { !has_lowercase(s) };
(is_all_caps, !first_is_lower, s)
}
fn format_imports(content: &str) -> String {
let lines: Vec<&str> = content.lines().collect();
let start_idx = lines.iter().position(|l| l.trim().starts_with("use a::{"))
.expect("Could not find 'use a::{' start");
let end_idx = lines.iter().position(|l| l.trim() == "};")
.expect("Could not find '};' end");
let mut items: Vec<&str> = lines[(start_idx + 1)..end_idx]
.iter()
.map(|l| l.trim().trim_end_matches(','))
.filter(|l| !l.is_empty())
.collect();
items.sort_by_key(|&item| sort_key(item));
let mut result = String::new();
for line in &lines[..start_idx] {
result.push_str(line);
result.push('\n');
}
result.push_str("use a::{\n");
for item in items {
result.push_str(&format!(" {},\n", item));
}
result.push_str("};\n");
for line in &lines[(end_idx + 1)..] {
result.push_str(line);
result.push('\n');
}
result
}
@lmmx
Copy link
Author

lmmx commented Nov 21, 2025

Formatted with rustfmt at max_width=205 and highlighted with syntect in bat with the Java language syntax (but it's Rust)

Screenshot from 2025-11-21 22-05-43

@lmmx
Copy link
Author

lmmx commented Nov 21, 2025

Edit:

  • reformatted with rustfmt in imports_layout=vertical
  • wrote a Rust-script program elucidating the order
  • wrote a simplified version using the fact that the suffix order is just ASCII order (which is str’s existing Ord)

In other words, the rustfmt import sort order is

  1. bool: has any lowercase (pushes all caps to the end)
  2. non-ASCII sort order for the first char, lowercase first (perhaps more intuitive to see this as combination of lowercase bool + lowercased ASCII ord)
  3. regular lex/ASCII ord for the rest of the chars

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment