-- |
-- Module      :  Phladiprelio.Ukrainian.ReverseConcatenations
-- Copyright   :  (c) OleksandrZhabenko 2020-2023
-- License     :  MIT
-- Stability   :  Experimental
-- Maintainer  :  oleksandr.zhabenko@yahoo.com
--
-- Contains several functions that helps to reverse many of the phonetic languages approach concatenations
-- for the Ukrainian language.

{-# 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.List.InnToOut.Basic (mapI)

{-| Reverses many phonetic languages approach related concatenations for the Ukrainian text. Is intended to be used
with the text on several lines. -}
reverseConcatenations :: Int -> String -> String
reverseConcatenations :: Int -> [Char] -> [Char]
reverseConcatenations Int
n [Char]
xs
 | forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Char]
xs = []
 | Bool
otherwise = [[Char]] -> [Char]
unlines forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map ([[Char]] -> [Char]
unwords forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> (a -> [a]) -> [a] -> [a]
mapI (forall a b. a -> b -> a
const Bool
True) (Int -> [Char] -> [[Char]]
reverseConcat1 Int
n) forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> [[Char]]
words) forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> [[Char]]
lines forall a b. (a -> b) -> a -> b
$ [Char]
xs
     where yss :: [[Char]]
yss = [Char] -> [[Char]]
lines [Char]
xs
           zsss :: [[[Char]]]
zsss = forall a b. (a -> b) -> [a] -> [b]
map [Char] -> [[Char]]
words [[Char]]
yss

{-| Reverses many phonetic languages approach related concatenations for just one Ukrainian word. Is used
internally in the 'reverseConcatenations'. -}
reverseConcat1 :: Int -> String -> [String]
reverseConcat1 :: Int -> [Char] -> [[Char]]
reverseConcat1 Int
n [Char]
xs
 | forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Char]
xs = []
 | Bool
otherwise = forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstLSorted' (if Int
n 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 forall a. Int -> [a] -> [a]
take Int
2 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1079\1100" then [Char]
"\1050\1088\1110\1079\1100"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us)
    else if forall a. Int -> [a] -> [a]
take Int
1 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1084" then [Char]
"\1050\1088\1110\1084"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
1 [Char]
us) else [[Char]
xs]),
    ([Char]
"\1053\1110\1073", if forall a. Int -> [a] -> [a]
take Int
3 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1080\1090\1086" then [Char]
"\1053\1110\1073\1080\1090\1086"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us) else if forall a. Int -> [a] -> [a]
take Int
1 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1080" then [Char]
"\1053\1110\1073\1080"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
4 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1090\1086\1084\1091" then [Char]
"\1055\1088\1080\1090\1086\1084\1091"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
4 [Char]
us) else if forall a. Int -> [a] -> [a]
take Int
3 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1090\1110\1084"
    then [Char]
"\1055\1088\1080\1090\1110\1084"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us) else if forall a. Int -> [a] -> [a]
take Int
4 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1095\1086\1084\1091"
    then [Char]
"\1055\1088\1080\1095\1086\1084\1091"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
4 [Char]
us)
    else if forall a. Int -> [a] -> [a]
take Int
3 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1095\1110\1084" then [Char]
"\1055\1088\1080\1095\1110\1084"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
8 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1088\1091\1090\1086\1075\1086\1103\1082"
    then [Char]
"\1074"forall a. a -> [a] -> [a]
:[Char]
"\1084\1110\1088\1091"forall a. a -> [a] -> [a]
:[Char]
"\1090\1086\1075\1086"forall a. a -> [a] -> [a]
:[Char]
"\1103\1082"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
7 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1090\1086\1075\1086\1097\1086\1073"
    then [Char]
"\1076\1083\1103"forall a. a -> [a] -> [a]
:[Char]
"\1090\1086\1075\1086"forall a. a -> [a] -> [a]
:[Char]
"\1097\1086\1073"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
7 [Char]
xs)
    else [[Char]
xs]), ([Char]
"\1079\1072\1083", if forall a. Int -> [a] -> [a]
take Int
7 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1077\1078\1085\1086\1074\1110\1076"
    then [Char]
"\1079\1072\1083\1077\1078\1085\1086"forall a. a -> [a] -> [a]
:[Char]
"\1074\1110\1076"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
7 [Char]
xs)
    else [[Char]
xs]), ([Char]
"\1079\1072\1084", if forall a. Int -> [a] -> [a]
take Int
11 [Char]
us 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"forall a. a -> [a] -> [a]
:[Char]
"\1090\1086\1075\1086"forall a. a -> [a] -> [a]
:[Char]
"\1097\1086\1073"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
4 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1084\1097\1086\1073" then [Char]
"\1079"forall a. a -> [a] -> [a]
:[Char]
"\1090\1080\1084"forall a. a -> [a] -> [a]
:[Char]
"\1097\1086\1073"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
4 [Char]
xs) else [[Char]
xs]),
    ([Char]
"\1079\1090\1086", if forall a. Int -> [a] -> [a]
take Int
8 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1075\1086\1095\1072\1089\1091\1103\1082"
    then [Char]
"\1079"forall a. a -> [a] -> [a]
:[Char]
"\1090\1086\1075\1086"forall a. a -> [a] -> [a]
:[Char]
"\1095\1072\1089\1091"forall a. a -> [a] -> [a]
:[Char]
"\1103\1082"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
2 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1079\1100" then [Char]
"\1082\1088\1110\1079\1100"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us)
    else if forall a. Int -> [a] -> [a]
take Int
1 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1084" then [Char]
"\1082\1088\1110\1084"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
4 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1073\1080\1090\1086" then [Char]
"\1084\1086\1074\1073\1080\1090\1086"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
4 [Char]
us)
    else if forall a. Int -> [a] -> [a]
take Int
2 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1073\1080" then [Char]
"\1084\1086\1074\1073\1080"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us)
    else 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 forall a. Int -> [a] -> [a]
take Int
4 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1077\1073\1090\1086" then [Char]
"\1085\1072\1095\1077\1073\1090\1086"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
4 [Char]
us)
    else if forall a. Int -> [a] -> [a]
take Int
2 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1077\1073" then [Char]
"\1085\1072\1095\1077\1073"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us)
    else if forall a. Int -> [a] -> [a]
take Int
1 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1077"
    then [Char]
"\1085\1072\1095\1077"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
9 [Char]
us 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"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
9 [Char]
us) else
    if forall a. Int -> [a] -> [a]
take Int
13 [Char]
us 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"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
13 [Char]
us)
    else [[Char]
xs]),([Char]
"\1085\1077\1084", if forall a. Int -> [a] -> [a]
take Int
6 [Char]
us 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"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
6 [Char]
us)
    else if forall a. Int -> [a] -> [a]
take Int
4 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1086\1074\1073\1080" then [Char]
"\1085\1077\1084\1086\1074\1073\1080"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
4 [Char]
us) else
    if forall a. Int -> [a] -> [a]
take Int
2 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1086\1074" then [Char]
"\1085\1077\1084\1086\1074"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us) else [[Char]
xs]),
    ([Char]
"\1085\1077\1085", if forall a. Int -> [a] -> [a]
take Int
6 [Char]
us 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"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
6 [Char]
us)
    else if forall a. Int -> [a] -> [a]
take Int
3 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1072\1095\1077" then [Char]
"\1085\1077\1085\1072\1095\1077"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
3 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1080\1090\1086" then [Char]
"\1085\1110\1073\1080\1090\1086"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us) else
    if forall a. Int -> [a] -> [a]
take Int
1 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1080" then [Char]
"\1085\1110\1073\1080"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
6 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1088\1080\1090\1077\1097\1086"
    then [Char]
"\1087\1086\1087\1088\1080"forall a. a -> [a] -> [a]
:[Char]
"\1090\1077"forall a. a -> [a] -> [a]
:[Char]
"\1097\1086"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
6 [Char]
us) else [[Char]
xs]),
    ([Char]
"\1087\1088\1080", if forall a. Int -> [a] -> [a]
take Int
4 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1090\1086\1084\1091" then [Char]
"\1087\1088\1080\1090\1086\1084\1091"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
4 [Char]
us)
    else if forall a. Int -> [a] -> [a]
take Int
3 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1090\1110\1084" then [Char]
"\1087\1088\1080\1090\1110\1084"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us) else
    if forall a. Int -> [a] -> [a]
take Int
5 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1094\1100\1086\1084\1091" then [Char]
"\1087\1088\1080\1094\1100\1086\1084\1091"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
5 [Char]
us) else
    if forall a. Int -> [a] -> [a]
take Int
4 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1095\1086\1084\1091" then [Char]
"\1087\1088\1080\1095\1086\1084\1091"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
4 [Char]
us) else
    if forall a. Int -> [a] -> [a]
take Int
3 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1095\1110\1084" then [Char]
"\1087\1088\1080\1095\1110\1084"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
8 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1083\1103\1090\1086\1075\1086\1103\1082"
    then [Char]
"\1087\1110\1089\1083\1103"forall a. a -> [a] -> [a]
:[Char]
"\1090\1086\1075\1086"forall a. a -> [a] -> [a]
:[Char]
"\1103\1082"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
1 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1080" then [Char]
"\1090\1072\1082\1080"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
1 [Char]
us) else
    if forall a. Int -> [a] -> [a]
take Int
3 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1081\1072\1082" then [Char]
"\1090\1072\1082"forall a. a -> [a] -> [a]
:[Char]
"\1103\1082"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us) else
    if forall a. Int -> [a] -> [a]
take Int
2 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1097\1086" then [Char]
"\1090\1072\1082"forall a. a -> [a] -> [a]
:[Char]
"\1097\1086"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us) else [[Char]
xs]),
    ([Char]
"\1090\1080\1084", if forall a. Int -> [a] -> [a]
take Int
8 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1095\1072\1089\1086\1084\1081\1072\1082"
    then [Char]
"\1090\1080\1084"forall a. a -> [a] -> [a]
:[Char]
"\1095\1072\1089\1086\1084"forall a. a -> [a] -> [a]
:[Char]
"\1103\1082"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
3 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1091\1097\1086" then [Char]
"\1090\1086\1084\1091"forall a. a -> [a] -> [a]
:[Char]
"\1097\1086"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
3 [Char]
us)
    else if forall a. Int -> [a] -> [a]
take Int
3 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1091\1103\1082" then [Char]
"\1090\1086\1084\1091"forall a. a -> [a] -> [a]
:[Char]
"\1103\1082"forall a. a -> [a] -> [a]
:
    Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
6 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1081\1072\1079\1082\1091\1079"
    then [Char]
"\1091"forall a. a -> [a] -> [a]
:[Char]
"\1079\1074\x02BC\1103\1079\1082\1091"forall a. a -> [a] -> [a]
:[Char]
"\1079"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
6 [Char]
us) else [[Char]
xs]),
    ([Char]
"\1091\1084\1110", if forall a. Int -> [a] -> [a]
take Int
8 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1088\1091\1090\1086\1075\1086\1103\1082"
    then [Char]
"\1091"forall a. a -> [a] -> [a]
:[Char]
"\1084\1110\1088\1091"forall a. a -> [a] -> [a]
:[Char]
"\1090\1086\1075\1086"forall a. a -> [a] -> [a]
:[Char]
"\1103\1082"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
2 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1073\1080"
    then [Char]
"\1093\1086\1095"forall a. a -> [a] -> [a]
:[Char]
"\1073\1080"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us) else if forall a. Int -> [a] -> [a]
take Int
2 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1072\1073"
    then [Char]
"\1093\1086\1095\1072"forall a. a -> [a] -> [a]
:[Char]
"\1073"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
2 [Char]
us) else [Char]
"\1093\1086\1095"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 forall a. Int -> [a] -> [a]
take Int
6 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1077\1079\1090\1077\1097\1086"
    then [Char]
"\1095\1077\1088\1077\1079"forall a. a -> [a] -> [a]
:[Char]
"\1090\1077"forall a. a -> [a] -> [a]
:[Char]
"\1097\1086"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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) = 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 =
  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 forall a. Int -> [a] -> [a]
take Int
1 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1080" then [Char]
"\1050\1086\1083\1080"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (forall a. Int -> [a] -> [a]
drop Int
1 [Char]
us)
  else if forall a. Int -> [a] -> [a]
take Int
1 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1086" then [Char]
"\1050\1086\1083\1086"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n (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 forall a. Int -> [a] -> [a]
take Int
1 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1080" then [Char]
"\1082\1086\1083\1080"forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
n [Char]
xs
  else if forall a. Int -> [a] -> [a]
take Int
1 [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
"\1086" then [Char]
"\1082\1086\1083\1086"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
  | forall a. Int -> [a] -> [a]
take Int
n [Char]
us forall a. Eq a => a -> a -> Bool
== [Char]
us' = [Char]
us''forall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
m (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]
tsforall a. a -> [a] -> [a]
:Int -> [Char] -> [[Char]]
reverseConcat1 Int
m [Char]
us)
{-# INLINE howConcat1WordEntirely #-}