type Bukvi = [Bukva]
type Cifri = [Cifra]
 
hitriyPerevorot :: Stroka -> Stroka
hitriyPerevorot stroka = zapolnitPropuski spisokBukvSPropuskamiVmestoCifr perevernutieCifri where
    zapolnitPropuski :: Bukvi -> Cifri -> Stroka
    zapolnitPropuski bukvi 
"" = concat bukvi
    zapolnitPropuski ("" : bukvi) (cifra : cifri) = cifra : zapolnitPropuski bukvi cifri
    zapolnitPropuski (bukva : bukvi) cifri = bukva ++ zapolnitPropuski bukvi cifri
    zapolnitPropuski 
[] cifri 
= error $ "Takogo ne mojet byt'! Lishnie cifri: " ++ cifri
    perevernutieCifri :: Cifri
    spisokBukvSPropuskamiVmestoCifr :: Bukvi
    spisokBukvSPropuskamiVmestoCifr 
= map (\x 
-> if isDigit x 
then [] else [x
]) stroka
 
main = do
    let str = "1аб2в345г6де78"
				aW1wb3J0IERhdGEuQ2hhcgoKdHlwZSBCdWt2YSA9IFtDaGFyXQp0eXBlIEJ1a3ZpID0gW0J1a3ZhXQp0eXBlIFN0cm9rYSA9IFtDaGFyXQp0eXBlIENpZnJhID0gQ2hhcgp0eXBlIENpZnJpID0gW0NpZnJhXQoKaGl0cml5UGVyZXZvcm90IDo6IFN0cm9rYSAtPiBTdHJva2EKaGl0cml5UGVyZXZvcm90IHN0cm9rYSA9IHphcG9sbml0UHJvcHVza2kgc3Bpc29rQnVrdlNQcm9wdXNrYW1pVm1lc3RvQ2lmciBwZXJldmVybnV0aWVDaWZyaSB3aGVyZQogICAgemFwb2xuaXRQcm9wdXNraSA6OiBCdWt2aSAtPiBDaWZyaSAtPiBTdHJva2EKICAgIHphcG9sbml0UHJvcHVza2kgYnVrdmkgIiIgPSBjb25jYXQgYnVrdmkKICAgIHphcG9sbml0UHJvcHVza2kgKCIiIDogYnVrdmkpIChjaWZyYSA6IGNpZnJpKSA9IGNpZnJhIDogemFwb2xuaXRQcm9wdXNraSBidWt2aSBjaWZyaQogICAgemFwb2xuaXRQcm9wdXNraSAoYnVrdmEgOiBidWt2aSkgY2lmcmkgPSBidWt2YSArKyB6YXBvbG5pdFByb3B1c2tpIGJ1a3ZpIGNpZnJpCiAgICB6YXBvbG5pdFByb3B1c2tpIFtdIGNpZnJpID0gZXJyb3IgJCAiVGFrb2dvIG5lIG1vamV0IGJ5dCchIExpc2huaWUgY2lmcmk6ICIgKysgY2lmcmkKICAgIHBlcmV2ZXJudXRpZUNpZnJpIDo6IENpZnJpCiAgICBwZXJldmVybnV0aWVDaWZyaSA9IHJldmVyc2UgJCBmaWx0ZXIgaXNEaWdpdCBzdHJva2EKICAgIHNwaXNva0J1a3ZTUHJvcHVza2FtaVZtZXN0b0NpZnIgOjogQnVrdmkKICAgIHNwaXNva0J1a3ZTUHJvcHVza2FtaVZtZXN0b0NpZnIgPSBtYXAgKFx4IC0+IGlmIGlzRGlnaXQgeCB0aGVuIFtdIGVsc2UgW3hdKSBzdHJva2EKCm1haW4gPSBkbwogICAgbGV0IHN0ciA9ICIx0LDQsTLQsjM0NdCzNtC00LU3OCIKICAgIHB1dFN0ckxuIHN0cgogICAgcHV0U3RyTG4gJCBoaXRyaXlQZXJldm9yb3Qgc3Ry