{-# OPTIONS_GHC -threaded -rtsopts #-}
{-# OPTIONS_HADDOCK -show-extensions #-}
{-# LANGUAGE BangPatterns, NoImplicitPrelude #-}
module Phladiprelio.Ukrainian.ReverseConcatenations where
import Data.Tuple (snd)
import GHC.Base
import Data.List
import CaseBi.Arr (getBFstLSorted')
import Data.IntermediateStructures1 (mapI)
reverseConcatenations :: Int -> String -> String
reverseConcatenations :: Int -> [Char] -> [Char]
reverseConcatenations Int
n [Char]
xs
| [Char] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Char]
xs = []
| Bool
otherwise = [[Char]] -> [Char]
unlines ([[Char]] -> [Char]) -> ([Char] -> [[Char]]) -> [Char] -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char] -> [Char]) -> [[Char]] -> [[Char]]
forall a b. (a -> b) -> [a] -> [b]
map ([[Char]] -> [Char]
unwords ([[Char]] -> [Char]) -> ([Char] -> [[Char]]) -> [Char] -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char] -> Bool) -> ([Char] -> [[Char]]) -> [[Char]] -> [[Char]]
forall a. (a -> Bool) -> (a -> [a]) -> [a] -> [a]
mapI (Bool -> [Char] -> Bool
forall a b. a -> b -> a
const Bool
True) (Int -> [Char] -> [[Char]]
reverseConcat1 Int
n) ([[Char]] -> [[Char]])
-> ([Char] -> [[Char]]) -> [Char] -> [[Char]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> [[Char]]
words) ([[Char]] -> [[Char]])
-> ([Char] -> [[Char]]) -> [Char] -> [[Char]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> [[Char]]
lines ([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
xs
where yss :: [[Char]]
yss = [Char] -> [[Char]]
lines [Char]
xs
zsss :: [[[Char]]]
zsss = ([Char] -> [[Char]]) -> [[Char]] -> [[[Char]]]
forall a b. (a -> b) -> [a] -> [b]
map [Char] -> [[Char]]
words [[Char]]
yss
reverseConcat1 :: Int -> String -> [String]
reverseConcat1 :: Int -> [Char] -> [[Char]]
reverseConcat1 Int
n [Char]
xs
| [Char] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Char]
xs = []
| Bool
otherwise = [[Char]] -> [([Char], [[Char]])] -> [Char] -> [[Char]]
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstLSorted' (if Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
2 then Int -> [Char] -> [Char] -> [Char] -> [[Char]]
reverseConcat2 Int
n [Char]
xs [Char]
ts [Char]
us else [[Char]
xs]) [
Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1040\1073\1086"[Char]
us,
([Char]
"\1040\1076\1078", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1077" [Char]
"\1040\1076\1078\1077" [Char]
xs),
Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1040\1083\1077" [Char]
us,
([Char]
"\1040\1085\1110", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1078" [Char]
"\1040\1085\1110\1078" [Char]
xs),
([Char]
"\1041\1086\1076", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1072\1081" [Char]
"\1041\1086\1076\1072\1081" [Char]
xs),
([Char]
"\1041\1091\1094", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
4 [Char]
us [Char]
"\1110\1084\1090\1086" [Char]
"\1041\1091\1094\1110\1084\1090\1086" [Char]
xs),
Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1042\1078\1077" [Char]
us,
([Char]
"\1042\1083\1072", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
3 [Char]
us [Char]
"\1089\1085\1077" [Char]
"\1042\1083\1072\1089\1085\1077" [Char]
xs),
([Char]
"\1042\1090\1110", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1084" [Char]
"\1042\1090\1110\1084" [Char]
xs),
Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1044\1083\1103" [Char]
us,
([Char]
"\1047\1072\1088", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
3 [Char]
us [Char]
"\1072\1076\1080" [Char]
"\1047\1072\1088\1072\1076\1080" [Char]
xs),
([Char]
"\1050\1088\1110", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
2 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1079\1100" then [Char]
"\1050\1088\1110\1079\1100"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us)
else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
1 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1084" then [Char]
"\1050\1088\1110\1084"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
1 [Char]
us) else [[Char]
xs]),
([Char]
"\1053\1110\1073", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
3 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1080\1090\1086" then [Char]
"\1053\1110\1073\1080\1090\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us) else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
1 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1080" then [Char]
"\1053\1110\1073\1080"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
1 [Char]
us)
else [[Char]
xs]),
([Char]
"\1054\1082\1088", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1110\1084" [Char]
"\1054\1082\1088\1110\1084" [Char]
xs),
([Char]
"\1054\1090\1078", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1077" [Char]
"\1054\1090\1078\1077" [Char]
xs),
([Char]
"\1054\1090\1086", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1078" [Char]
"\1054\1090\1086\1078" [Char]
xs),
([Char]
"\1055\1088\1080", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
4 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1090\1086\1084\1091" then [Char]
"\1055\1088\1080\1090\1086\1084\1091"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
4 [Char]
us) else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
3 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1090\1110\1084"
then [Char]
"\1055\1088\1080\1090\1110\1084"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us) else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
4 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1095\1086\1084\1091"
then [Char]
"\1055\1088\1080\1095\1086\1084\1091"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
4 [Char]
us)
else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
3 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1095\1110\1084" then [Char]
"\1055\1088\1080\1095\1110\1084"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us)
else [[Char]
xs]),
([Char]
"\1057\1072\1084", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1077" [Char]
"\1057\1072\1084\1077" [Char]
xs),
([Char]
"\1057\1077\1073", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1090\1086" [Char]
"\1057\1077\1073\1090\1086" [Char]
xs),
([Char]
"\1058\1072\1082", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1080" [Char]
"\1058\1072\1082\1080" [Char]
xs),
([Char]
"\1058\1086\1073", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1090\1086" [Char]
"\1058\1086\1073\1090\1086" [Char]
xs),
Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1061\1072\1081" [Char]
us,
([Char]
"\1061\1110\1073", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1072" [Char]
"\1061\1110\1073\1072" [Char]
xs),
([Char]
"\1062\1077\1073", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1090\1086" [Char]
"\1062\1077\1073\1090\1086" [Char]
xs),
Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1065\1086\1073" [Char]
us,
([Char]
"\1071\1082\1073", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1080" [Char]
"\1071\1082\1073\1080" [Char]
xs),
([Char]
"\1071\1082\1088", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1072\1079" [Char]
"\1071\1082\1088\1072\1079" [Char]
xs),
([Char]
"\1071\1082\1097", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1086" [Char]
"\1071\1082\1097\1086" [Char]
xs),
Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1072\1073\1086" [Char]
us,([Char]
"\1072\1076\1078",
Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1077" [Char]
"\1072\1076\1078\1077" [Char]
xs),Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1072\1083\1077" [Char]
us,
([Char]
"\1072\1085\1110", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1078" [Char]
"\1072\1085\1110\1078" [Char]
xs),
([Char]
"\1073\1086\1076",Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1072\1081" [Char]
"\1073\1086\1076\1072\1081" [Char]
xs),
([Char]
"\1073\1091\1094",Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
4 [Char]
us [Char]
"\1110\1084\1090\1086" [Char]
"\1073\1091\1094\1110\1084\1090\1086" [Char]
xs),
Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1074\1078\1077" [Char]
us, ([Char]
"\1074\1080\1082",
Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
5 [Char]
us [Char]
"\1083\1102\1095\1085\1086" [Char]
"\1074\1080\1082\1083\1102\1095\1085\1086" [Char]
xs),
([Char]
"\1074\1083\1072",Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
3 [Char]
us [Char]
"\1089\1085\1077" [Char]
"\1074\1083\1072\1089\1085\1077" [Char]
xs),
([Char]
"\1074\1084\1110",if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
8 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1088\1091\1090\1086\1075\1086\1103\1082"
then [Char]
"\1074"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1084\1110\1088\1091"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1090\1086\1075\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1103\1082"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
11 [Char]
xs)
else [[Char]
xs]), ([Char]
"\1074\1090\1110",Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1084" [Char]
"\1074\1090\1110\1084" [Char]
xs),
([Char]
"\1076\1072\1074",Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1072\1081" [Char]
"\1076\1072\1074\1072\1081" [Char]
xs),
([Char]
"\1076\1072\1088",Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
4 [Char]
us [Char]
"\1084\1072\1097\1086" [Char]
"\1076\1072\1088\1084\1072\1097\1086" [Char]
xs),
([Char]
"\1076\1083\1103", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
7 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1090\1086\1075\1086\1097\1086\1073"
then [Char]
"\1076\1083\1103"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1090\1086\1075\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1097\1086\1073"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
7 [Char]
xs)
else [[Char]
xs]), ([Char]
"\1079\1072\1083", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
7 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1077\1078\1085\1086\1074\1110\1076"
then [Char]
"\1079\1072\1083\1077\1078\1085\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1074\1110\1076"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
7 [Char]
xs)
else [[Char]
xs]), ([Char]
"\1079\1072\1084", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
11 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1110\1089\1090\1100\1090\1086\1075\1086\1097\1086\1073"
then [Char]
"\1079\1072\1084\1110\1089\1090\1100"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1090\1086\1075\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1097\1086\1073"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
11 [Char]
xs) else [[Char]
xs]),
([Char]
"\1079\1072\1088", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
3 [Char]
us [Char]
"\1072\1076\1080" [Char]
"\1079\1072\1088\1072\1076\1080" [Char]
xs),
([Char]
"\1079\1072\1090", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1077" [Char]
"\1079\1072\1090\1077" [Char]
xs), ([Char]
"\1079\1090\1080",
if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
4 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1084\1097\1086\1073" then [Char]
"\1079"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1090\1080\1084"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1097\1086\1073"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
4 [Char]
xs) else [[Char]
xs]),
([Char]
"\1079\1090\1086", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
8 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1075\1086\1095\1072\1089\1091\1103\1082"
then [Char]
"\1079"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1090\1086\1075\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1095\1072\1089\1091"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1103\1082"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
8 [Char]
xs)
else [[Char]
xs]), ([Char]
"\1082\1086\1083", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1080" [Char]
"\1082\1086\1083\1080" [Char]
xs),
([Char]
"\1082\1088\1110", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
2 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1079\1100" then [Char]
"\1082\1088\1110\1079\1100"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us)
else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
1 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1084" then [Char]
"\1082\1088\1110\1084"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
1 [Char]
us) else [[Char]
xs]),
([Char]
"\1083\1077\1076", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1074\1077" [Char]
"\1083\1077\1076\1074\1077" [Char]
xs),
([Char]
"\1083\1080\1096", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1077" [Char]
"\1083\1080\1096\1077" [Char]
xs),
([Char]
"\1084\1072\1081", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1078\1077" [Char]
"\1084\1072\1081\1078\1077" [Char]
xs),
([Char]
"\1084\1086\1074", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
4 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1073\1080\1090\1086" then [Char]
"\1084\1086\1074\1073\1080\1090\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
4 [Char]
us)
else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
2 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1073\1080" then [Char]
"\1084\1086\1074\1073\1080"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us)
else ([Char], [[Char]]) -> [[Char]]
forall a b. (a, b) -> b
snd (Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1084\1086\1074" [Char]
us)),
([Char]
"\1085\1072\1074", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
3 [Char]
us [Char]
"\1110\1090\1100" [Char]
"\1085\1072\1074\1110\1090\1100" [Char]
xs),
([Char]
"\1085\1072\1089", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
6 [Char]
us [Char]
"\1082\1110\1083\1100\1082\1080" [Char]
"\1085\1072\1089\1082\1110\1083\1100\1082\1080" [Char]
xs),
([Char]
"\1085\1072\1095", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
4 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1077\1073\1090\1086" then [Char]
"\1085\1072\1095\1077\1073\1090\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
4 [Char]
us)
else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
2 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1077\1073" then [Char]
"\1085\1072\1095\1077\1073"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us)
else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
1 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1077"
then [Char]
"\1085\1072\1095\1077"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
1 [Char]
us) else [[Char]
xs]),([Char]
"\1085\1077\1074",
Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1078\1077" [Char]
"\1085\1077\1074\1078\1077" [Char]
xs),
([Char]
"\1085\1077\1079", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
9 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1072\1083\1077\1078\1085\1086\1074\1110\1076"
then [Char]
"\1085\1077\1079\1072\1083\1077\1078\1085\1086\1074\1110\1076"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
9 [Char]
us) else
if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
13 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1074\1072\1078\1072\1102\1095\1080\1085\1072\1090\1077\1097\1086"
then [Char]
"\1085\1077\1079\1074\1072\1078\1072\1102\1095\1080\1085\1072\1090\1077\1097\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
13 [Char]
us)
else [[Char]
xs]),([Char]
"\1085\1077\1084", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
6 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1086\1074\1073\1080\1090\1086"
then [Char]
"\1085\1077\1084\1086\1074\1073\1080\1090\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
6 [Char]
us)
else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
4 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1086\1074\1073\1080" then [Char]
"\1085\1077\1084\1086\1074\1073\1080"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
4 [Char]
us) else
if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
2 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1086\1074" then [Char]
"\1085\1077\1084\1086\1074"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us) else [[Char]
xs]),
([Char]
"\1085\1077\1085", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
6 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1072\1095\1077\1073\1090\1086"
then [Char]
"\1085\1077\1085\1072\1095\1077\1073\1090\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
6 [Char]
us)
else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
3 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1072\1095\1077" then [Char]
"\1085\1077\1085\1072\1095\1077"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us) else [[Char]
xs]),
([Char]
"\1085\1077\1093", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1072\1081" [Char]
"\1085\1077\1093\1072\1081" [Char]
xs),
([Char]
"\1085\1110\1073", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
3 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1080\1090\1086" then [Char]
"\1085\1110\1073\1080\1090\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us) else
if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
1 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1080" then [Char]
"\1085\1110\1073\1080"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
1 [Char]
us) else [[Char]
xs]),
Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1085\1110\1078" [Char]
us,
([Char]
"\1086\1082\1088", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1110\1084" [Char]
"\1086\1082\1088\1110\1084" [Char]
xs),
([Char]
"\1086\1090\1078", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1077" [Char]
"\1086\1090\1078\1077" [Char]
xs),
([Char]
"\1086\1090\1086", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1078" [Char]
"\1086\1090\1086\1078" [Char]
xs),
([Char]
"\1087\1086\1087", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
6 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1088\1080\1090\1077\1097\1086"
then [Char]
"\1087\1086\1087\1088\1080"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1090\1077"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1097\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
6 [Char]
us) else [[Char]
xs]),
([Char]
"\1087\1088\1080", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
4 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1090\1086\1084\1091" then [Char]
"\1087\1088\1080\1090\1086\1084\1091"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
4 [Char]
us)
else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
3 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1090\1110\1084" then [Char]
"\1087\1088\1080\1090\1110\1084"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us) else
if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
5 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1094\1100\1086\1084\1091" then [Char]
"\1087\1088\1080\1094\1100\1086\1084\1091"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
5 [Char]
us) else
if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
4 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1095\1086\1084\1091" then [Char]
"\1087\1088\1080\1095\1086\1084\1091"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
4 [Char]
us) else
if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
3 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1095\1110\1084" then [Char]
"\1087\1088\1080\1095\1110\1084"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us)
else [[Char]
xs]),
([Char]
"\1087\1088\1086", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1090\1077" [Char]
"\1087\1088\1086\1090\1077" [Char]
xs),
([Char]
"\1087\1110\1089", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
8 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1083\1103\1090\1086\1075\1086\1103\1082"
then [Char]
"\1087\1110\1089\1083\1103"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1090\1086\1075\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1103\1082"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
8 [Char]
us)
else [[Char]
xs]), ([Char]
"\1089\1072\1084", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1077" [Char]
"\1089\1072\1084\1077" [Char]
xs),
([Char]
"\1089\1077\1073", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1090\1086" [Char]
"\1089\1077\1073\1090\1086" [Char]
xs),
([Char]
"\1090\1072\1082", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
1 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1080" then [Char]
"\1090\1072\1082\1080"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
1 [Char]
us) else
if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
3 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1081\1072\1082" then [Char]
"\1090\1072\1082"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1103\1082"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us) else
if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
2 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1097\1086" then [Char]
"\1090\1072\1082"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1097\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us) else [[Char]
xs]),
([Char]
"\1090\1080\1084", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
8 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1095\1072\1089\1086\1084\1081\1072\1082"
then [Char]
"\1090\1080\1084"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1095\1072\1089\1086\1084"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1103\1082"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
8 [Char]
us) else [[Char]
xs]),
([Char]
"\1090\1086\1073", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1090\1086" [Char]
"\1090\1086\1073\1090\1086" [Char]
xs),
([Char]
"\1090\1086\1084", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
3 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1091\1097\1086" then [Char]
"\1090\1086\1084\1091"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1097\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us)
else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
3 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1091\1103\1082" then [Char]
"\1090\1086\1084\1091"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1103\1082"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:
Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us) else [[Char]
xs]),
([Char]
"\1090\1110\1083", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
3 [Char]
us [Char]
"\1100\1082\1080" [Char]
"\1090\1110\1083\1100\1082\1080" [Char]
xs),
([Char]
"\1091\1079\1074", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
6 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1081\1072\1079\1082\1091\1079"
then [Char]
"\1091"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1079\1074\x02BC\1103\1079\1082\1091"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1079"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
6 [Char]
us) else [[Char]
xs]),
([Char]
"\1091\1084\1110", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
8 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1088\1091\1090\1086\1075\1086\1103\1082"
then [Char]
"\1091"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1084\1110\1088\1091"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1090\1086\1075\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1103\1082"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
8 [Char]
us)
else [[Char]
xs]), Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1093\1072\1081" [Char]
us,([Char]
"\1093\1086\1095", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
2 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1073\1080"
then [Char]
"\1093\1086\1095"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1073\1080"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us) else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
2 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1072\1073"
then [Char]
"\1093\1086\1095\1072"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1073"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us) else [Char]
"\1093\1086\1095"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[[Char]
us]),
([Char]
"\1093\1110\1073", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1072" [Char]
"\1093\1110\1073\1072" [Char]
xs),
([Char]
"\1094\1077\1073", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1090\1086" [Char]
"\1094\1077\1073\1090\1086" [Char]
xs),
([Char]
"\1095\1077\1088", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
6 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1077\1079\1090\1077\1097\1086"
then [Char]
"\1095\1077\1088\1077\1079"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1090\1077"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:[Char]
"\1097\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
6 [Char]
us) else [[Char]
xs]),
Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1097\1086\1073" [Char]
us, ([Char]
"\1103\1082\1073",
Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1080" [Char]
"\1103\1082\1073\1080" [Char]
xs),
([Char]
"\1103\1082\1088", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1072\1079" [Char]
"\1103\1082\1088\1072\1079" [Char]
xs),
([Char]
"\1103\1082\1097", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1086" [Char]
"\1103\1082\1097\1086" [Char]
xs)] [Char]
ts
where ([Char]
ts,[Char]
us) = Int -> [Char] -> ([Char], [Char])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
3 [Char]
xs
reverseConcat2 :: Int -> String -> String -> String -> [String]
reverseConcat2 :: Int -> [Char] -> [Char] -> [Char] -> [[Char]]
reverseConcat2 Int
n [Char]
xs [Char]
ts [Char]
us =
[[Char]] -> [([Char], [[Char]])] -> [Char] -> [[Char]]
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstLSorted' [[Char]
xs] [([Char]
"\1041\1110\1083", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1103" [Char]
"\1041\1110\1083\1103" [Char]
xs),
([Char]
"\1042\1080\1082", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
5 [Char]
us [Char]
"\1083\1102\1095\1085\1086" [Char]
"\1042\1080\1082\1083\1102\1095\1085\1086" [Char]
xs),
([Char]
"\1044\1072\1074", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1072\1081" [Char]
"\1044\1072\1074\1072\1081" [Char]
xs),
([Char]
"\1047\1072\1090", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1077" [Char]
"\1047\1072\1090\1077" [Char]
xs),
([Char]
"\1050\1086\1083", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
1 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1080" then [Char]
"\1050\1086\1083\1080"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
1 [Char]
us)
else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
1 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1086" then [Char]
"\1050\1086\1083\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
1 [Char]
us) else [[Char]
xs]),
([Char]
"\1051\1080\1096", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1077" [Char]
"\1051\1080\1096\1077" [Char]
xs),
Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1053\1110\1078" [Char]
us,
([Char]
"\1055\1110\1089", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1083\1103" [Char]
"\1055\1110\1089\1083\1103" [Char]
xs),
([Char]
"\1057\1077\1088", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1077\1076" [Char]
"\1057\1077\1088\1077\1076" [Char]
xs),
([Char]
"\1058\1110\1083", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
3 [Char]
us [Char]
"\1100\1082\1080" [Char]
"\1058\1110\1083\1100\1082\1080" [Char]
xs),
([Char]
"\1073\1110\1083", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1103" [Char]
"\1073\1110\1083\1103" [Char]
xs),
([Char]
"\1076\1072\1074", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1072\1081" [Char]
"\1076\1072\1074\1072\1081" [Char]
xs),
([Char]
"\1079\1072\1090", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1077" [Char]
"\1079\1072\1090\1077" [Char]
xs),
([Char]
"\1082\1086\1083", if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
1 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1080" then [Char]
"\1082\1086\1083\1080"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n [Char]
xs
else if Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
1 [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"\1086" then [Char]
"\1082\1086\1083\1086"[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n [Char]
xs else [[Char]
xs]),
([Char]
"\1083\1080\1096", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
1 [Char]
us [Char]
"\1077" [Char]
"\1083\1080\1096\1077" [Char]
xs),
Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
n [Char]
"\1085\1110\1078" [Char]
us,
([Char]
"\1087\1077\1088", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1077\1076" [Char]
"\1087\1077\1088\1077\1076" [Char]
xs),
([Char]
"\1087\1110\1089", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1083\1103" [Char]
"\1087\1110\1089\1083\1103" [Char]
xs),
([Char]
"\1089\1077\1088", Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
n Int
2 [Char]
us [Char]
"\1077\1076" [Char]
"\1089\1077\1088\1077\1076" [Char]
xs)] [Char]
ts
howConcat1Word :: Int -> Int -> String -> String -> String -> String -> [String]
howConcat1Word :: Int -> Int -> [Char] -> [Char] -> [Char] -> [Char] -> [[Char]]
howConcat1Word Int
m Int
n [Char]
us [Char]
us' [Char]
us'' [Char]
xs
| Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
take Int
n [Char]
us [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
us' = [Char]
us''[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
m (Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
n [Char]
us)
| Bool
otherwise = [[Char]
xs]
{-# INLINE howConcat1Word #-}
howConcat1WordEntirely :: Int -> String -> String -> (String, [String])
howConcat1WordEntirely :: Int -> [Char] -> [Char] -> ([Char], [[Char]])
howConcat1WordEntirely Int
m [Char]
ts [Char]
us = ([Char]
ts,[Char]
ts[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
m [Char]
us)
{-# INLINE howConcat1WordEntirely #-}