diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -24,5 +24,10 @@
 
 ## 0.2.2.0 -- 2021-01-20
 
-* Second version revised B. Removed the unneeded hiden dependencies of the vector related packages and functionality (that was 
+* Second version revised B. Removed the unneeded hidden dependencies of the vector related packages and functionality (that was 
 announced in the 0.1.2.0 version). Fully switched to the GHC.Arr arrays where needed.
+
+## 0.3.0.0 -- 2021-01-28
+
+* Third version. The package has the multiple variations mode for lineVariantsG3 executable that allows to use modifications in the text, e. g. synonyms, paraphrases etc. Added more variants of the properties based on the new dataset for
+r-glpk-phonetic-languages-ukrainian-durations package. Added a new module Phonetic.Languages.Parsing for the new functionality. Removed unneeded print-info dependency.
diff --git a/Phonetic/Languages/Parsing.hs b/Phonetic/Languages/Parsing.hs
new file mode 100644
--- /dev/null
+++ b/Phonetic/Languages/Parsing.hs
@@ -0,0 +1,75 @@
+{-# OPTIONS_GHC -threaded -rtsopts #-}
+{-# OPTIONS_HADDOCK show-extensions #-}
+{-# LANGUAGE BangPatterns #-}
+
+-- |
+-- Module      :  Phonetic.Languages.Parsing
+-- Copyright   :  (c) OleksandrZhabenko 2021
+-- License     :  MIT
+-- Stability   :  Experimental
+-- Maintainer  :  olexandr543@yahoo.com
+--
+-- The additional parsing library functions for the lineVariantsG3 executable.
+-- @ since 0.3.0.0
+-- 
+
+module Phonetic.Languages.Parsing (
+  -- * Predicates
+  isClosingCurlyBracket
+  , isSlash
+  , isOpeningCurlyBracket
+  , variations
+  -- * Transformations
+  , breakGroupOfStrings
+  , breakInSlashes
+  , combineVariants
+  , combineHeadsWithNexts
+  , transformToVariations
+) where
+
+isClosingCurlyBracket :: String -> Bool
+isClosingCurlyBracket = (== "}")
+
+isSlash :: String -> Bool
+isSlash (x:xs)
+ | x /= '/' = False
+ | null xs = True
+ | otherwise = False
+isSlash _ = False
+
+isOpeningCurlyBracket :: String -> Bool
+isOpeningCurlyBracket = (== "{")
+
+breakGroupOfStrings :: [String] -> (([String],[[String]]),[String])
+breakGroupOfStrings !xss = ((tss,breakInSlashes uss []), drop 1 zss)
+  where (!yss,!zss) = break isClosingCurlyBracket xss
+        (!tss,!uss) = (\(t1,t2) -> (t1,drop 1 t2)) . break isOpeningCurlyBracket $ yss
+
+breakInSlashes :: [String] -> [[String]] -> [[String]]
+breakInSlashes !wss !usss
+ | null lss = kss : usss
+ | otherwise = breakInSlashes (drop 1 lss) (kss : usss)
+  where (!kss,!lss) = break isSlash wss
+
+combineVariants :: ([String],[[String]]) -> [[String]]
+combineVariants (!xss, (!yss:ysss)) = (xss `mappend` yss) : combineVariants (xss, ysss)
+combineVariants _ = []
+
+combineHeadsWithNexts :: [[String]] -> [String] -> [[String]]
+combineHeadsWithNexts !xsss !yss
+ | null yss = xsss
+ | otherwise = combineHeadsWithNexts [xss `mappend` zss | xss <- xsss, zss <- zsss] uss
+     where (!t,!uss) = breakGroupOfStrings yss
+           !zsss = combineVariants t
+
+transformToVariations :: [String] -> [[String]]
+transformToVariations !yss
+ | null yss = []
+ | otherwise = combineHeadsWithNexts xsss tss
+  where (!y,!tss) = breakGroupOfStrings yss
+        !xsss = combineVariants y
+
+variations :: [String] -> Bool
+variations xss 
+ | any isSlash xss = if any isOpeningCurlyBracket xss && any isClosingCurlyBracket xss then True else False
+ | otherwise = False
diff --git a/Phonetic/Languages/Simple.hs b/Phonetic/Languages/Simple.hs
--- a/Phonetic/Languages/Simple.hs
+++ b/Phonetic/Languages/Simple.hs
@@ -13,6 +13,7 @@
 
 module Phonetic.Languages.Simple where
 
+import Phonetic.Languages.Parsing
 import Numeric
 import Languages.UniquenessPeriods.Array.Constraints.Encoded (decodeLConstraints,readMaybeECG)
 import GHC.Arr
@@ -20,13 +21,11 @@
 import Phonetic.Languages.Array.Ukrainian.PropertiesSyllablesG2
 import Phonetic.Languages.Filters (unsafeSwapVecIWithMaxI)
 import Phonetic.Languages.Simplified.StrictVG.Base
-import Phonetic.Languages.Ukrainian.PrepareText
 import Data.Char (isDigit,isAlpha)
 import qualified Data.List  as L (span,sort,zip4,isPrefixOf,nub)
 import Phonetic.Languages.Simplified.Array.Ukrainian.FuncRep2RelatedG2
 import Phonetic.Languages.Permutations.Arr
 import Data.SubG hiding (takeWhile,dropWhile)
-import System.Environment
 import Data.Maybe
 import Data.MinMax.Preconditions
 import Text.Read (readMaybe)
@@ -42,8 +41,28 @@
            (yss,zss) = splitAt l xss
 forMultiplePropertiesF _ = []
 
-generalProc2 :: FilePath -> Bool -> Bool -> [String] -> Coeffs2 -> [String] -> Bool -> IO ()
-generalProc2 toFile1 interactive jstL0 args0 coeffs args lstW2 = do
+-- |
+-- @ since 0.3.0.0
+-- Is used to do general processment.
+generalProc2G :: FilePath -> Bool -> Bool -> [String] -> Coeffs2 -> [String] -> Bool -> IO ()
+generalProc2G toFile1 interactive jstL0 args0 coeffs args lstW2
+ | variations args = do
+    let !zsss = transformToVariations args
+    print zsss
+    variantsG <- mapM (\xss -> generalProc2 interactive jstL0 args0 coeffs xss lstW2) zsss
+    interactivePrintResult id variantsG >>= \rs ->
+      case toFile1 of
+       "" -> return ()
+       ~fileName -> appendFile fileName (rs `mappend` newLineEnding)
+ | otherwise = generalProc2 interactive jstL0 args0 coeffs args lstW2 >>= \rs ->
+      case toFile1 of
+       "" -> return ()
+       ~fileName -> appendFile fileName (rs `mappend` newLineEnding)
+
+-- |
+-- @ since 0.3.0.0 The result is not 'IO' (), but 'IO' 'String'. The type also changed generally.
+generalProc2 :: Bool -> Bool -> [String] -> Coeffs2 -> [String] -> Bool -> IO String
+generalProc2 interactive jstL0 args0 coeffs args lstW2 = do
   let !argMss = take 5 . filter (not . null) . forMultiplePropertiesF . drop 1 . dropWhile (/= "+M") . takeWhile (/= "-M") $ args0
   if null argMss then do
    let (!numericArgs,!textualArgs) = L.span (all isDigit) $ args
@@ -56,18 +75,18 @@
        !intervalNmbrs = (\zs -> if null zs then [numberI] else L.nub zs) . L.sort . filter (<= numberI) .
            map (\t -> fromMaybe numberI $ (readMaybe t::Maybe Int)) . drop 2 $ numericArgs
    if compare l 2 == LT then let !frep20 = chooseMax id coeffs choice in let !wwss = (:[]) . toResultR frep20 $ xs in
-    if interactive then interactivePrintResult line toFile1 wwss else print1el jstL0 choice wwss
+    if interactive then interactivePrintResult line wwss else print1el jstL0 choice wwss
    else do
     let !subs = subG " 01-" xs
     if null argCs then let !perms = genPermutationsL l in do
           temp <- generalProcMs coeffs perms subs (intervalNmbrs, arg0, numberI, choice)
-          if interactive then interactivePrintResult line toFile1 temp else print1el jstL0 choice temp
+          if interactive then interactivePrintResult line temp else print1el jstL0 choice temp
     else do
      correct <- printWarning xs
-     if correct == "n" then putStrLn "You stopped the program, please, if needed, run it again with better arguments. "
+     if correct == "n" then putStrLn "You stopped the program, please, if needed, run it again with better arguments. " >> return "" -- for the multiple variations mode (with curly brackets and slash in the text) the program does not stop here, but the variation is made empty and is proposed further as a variant.
      else let !perms = decodeLConstraints argCs . genPermutationsL $ l in do
           temp <- generalProcMs coeffs perms subs (intervalNmbrs, arg0, numberI, choice)
-          if interactive then interactivePrintResult line toFile1 temp else print1el jstL0 choice temp
+          if interactive then interactivePrintResult line temp else print1el jstL0 choice temp
   else do
    let !choices = map fst argMss
        !numericArgss = map snd argMss
@@ -80,18 +99,20 @@
        !xs = concat . take 1 . fLines 0 . unwords $ args
        !l = length . words $ xs
        !argCs = catMaybes (fmap (readMaybeECG (l - 1)) . (showB l lstW2:) . drop 1 . dropWhile (/= "+A") . takeWhile (/= "-A") $ args0)
-   if compare l 2 == LT then let !frep20 = chooseMax id coeffs (concat . take 1 $ choices) in let !wwss = (:[]) . toResultR frep20 $ xs in if interactive then interactivePrintResult line toFile1 wwss else print1el jstL0 (concat . take 1 $ choices) wwss
+   if compare l 2 == LT then let !frep20 = chooseMax id coeffs (concat . take 1 $ choices) in let !wwss = (:[]) . toResultR frep20 $ xs in if interactive then interactivePrintResult line wwss else print1el jstL0 (concat . take 1 $ choices) wwss
    else do
     let !subs = subG " 01-" xs
-    if null argCs then let !perms = genPermutationsL l in generalProcMMs interactive toFile1 coeffs argsZipped perms subs
+    if null argCs then let !perms = genPermutationsL l in generalProcMMs interactive coeffs argsZipped perms subs
     else do
      correct <- printWarning xs
-     if correct == "n" then putStrLn "You stopped the program, please, if needed, run it again with better arguments. "
-     else let !perms = decodeLConstraints argCs . genPermutationsL $ l in generalProcMMs interactive toFile1 coeffs argsZipped perms subs
+     if correct == "n" then putStrLn "You stopped the program, please, if needed, run it again with better arguments. " >> return "" -- for the multiple variations mode (with curly brackets and slash in the text) the program does not stop here, but the variation is made empty and is proposed further as a variant.
+     else let !perms = decodeLConstraints argCs . genPermutationsL $ l in generalProcMMs interactive coeffs argsZipped perms subs
 
-interactivePrintResult :: (a -> String) -> String -> [a] -> IO ()
-interactivePrintResult f ys xss
-  | null xss = putStrLn ""
+-- |
+-- @ since 0.3.0.0 The result is not 'IO' (), but 'IO' 'String'. The type also changed generally.
+interactivePrintResult :: (a -> String) -> [a] -> IO String
+interactivePrintResult f xss
+  | null xss = putStrLn "" >> return ""
   | otherwise = do
      let !datas = map (\(idx,str) -> show idx `mappend` ('\t' : str)) . trans232 . map f $ xss
      mapM_ putStrLn datas
@@ -99,8 +120,9 @@
      putStrLn "Please, specify the variant which you would like to become the resulting string by its number. "
      number <- getLine
      let !lineRes = concat . filter ((number `mappend` "\t")`L.isPrefixOf`) $ datas
-     (\xs -> if null ys then putStrLn xs else putStrLn xs >> appendFile ys (xs `mappend` newLineEnding)) . drop 1 . dropWhile (/= '\t') $ lineRes
-
+         !ts = drop 1 . dropWhile (/= '\t') $ lineRes
+     putStrLn ts >> return ts
+     
 printWarning :: String -> IO String
 printWarning xs = do
   putStr "Please, check whether the line below corresponds and is consistent with the constraints you have specified between the +A and -A options. "
@@ -121,28 +143,36 @@
         !frep2 = chooseMax (unsafeSwapVecIWithMaxI minE maxE numberI intervalNmbrs) coeffs choice
     return . fst . maximumGroupsClassificationR arg0 . map (toResultR frep2) $ variants1
 
-generalProcMMs :: Bool -> FilePath -> Coeffs2 -> [([Int],Int,Int,String)] -> [Array Int Int] -> [String] -> IO ()
-generalProcMMs interactiveMM file coeffs rs perms subs =
+-- |
+-- @ since 0.3.0.0 The result is not 'IO' (), but 'IO' 'String'. The type also changed generally.
+generalProcMMs :: Bool -> Coeffs2 -> [([Int],Int,Int,String)] -> [Array Int Int] -> [String] -> IO String
+generalProcMMs interactiveMM coeffs rs perms subs =
  case length rs of
-  0 -> putStrLn "No data has been specified to control the computation process. "
+  0 -> putStrLn "No data has been specified to control the computation process. " >> return ""
   1 -> putStrLn "You have specified just one variant of the metrices. " >> do
         temp <- generalProcMs coeffs perms subs (head rs)
-        finalProc interactiveMM file line temp
+        finalProc interactiveMM line temp
   _ -> do
          genVariants <- mapM (generalProcMs coeffs perms subs) rs
-         finalProc interactiveMM file id . foldlI . map (map line) $ genVariants
+         finalProc interactiveMM id . foldlI . map (map line) $ genVariants
 
 foldlI :: [[String]] -> [String]
 foldlI (xs:ys:xss) = foldlI (intersectInterResults xs ys : xss)
 foldlI (xs:_) = xs
 foldlI _ = []
 
-finalProc :: Bool -> FilePath -> (a -> String) -> [a] -> IO ()
-finalProc bool ys f xss = if bool then interactivePrintResult f ys xss else mapM_ (putStrLn . f) xss
+-- |
+-- @ since 0.3.0.0 The result is not 'IO' (), but 'IO' 'String'. The type also changed generally.
+finalProc :: Bool -> (a -> String) -> [a] -> IO String
+finalProc bool f xss = if bool then interactivePrintResult f xss else putStrLn ts >> return ts
+  where ts = concatMap (\t -> f t `mappend` newLineEnding) xss
 
-print1el :: Bool -> String -> [Result [] Char Double Double] -> IO ()
-print1el jstlines choice (x:xs)
- | jstlines == True = putStrLn (line x) >> print1el True choice xs
- | otherwise = putStrLn (line x) >> putStrLn (showFFloat ch (propertiesF x) "") >> putStrLn (showFFloat ch (transPropertiesF x) "") >> print1el False choice xs
+-- |
+-- @ since 0.3.0.0 The result is not 'IO' (), but 'IO' 'String'. The type also changed generally.
+print1el :: Bool -> String -> [Result [] Char Double Double] -> IO String
+print1el jstlines choice y
+ | jstlines == True = putStrLn us >> return us
+ | otherwise = putStrLn zs >> return zs
        where !ch = precChoice choice
-print1el _ _ _ = return ()
+             !us = concatMap (\ys -> line ys `mappend` newLineEnding) y
+             !zs = concatMap (\ys -> line ys `mappend` newLineEnding `mappend` showFFloat ch (propertiesF ys) (newLineEnding `mappend` showFFloat ch (transPropertiesF ys) newLineEnding)) y
diff --git a/Phonetic/Languages/Simplified/Array/Ukrainian/FuncRep2RelatedG2.hs b/Phonetic/Languages/Simplified/Array/Ukrainian/FuncRep2RelatedG2.hs
--- a/Phonetic/Languages/Simplified/Array/Ukrainian/FuncRep2RelatedG2.hs
+++ b/Phonetic/Languages/Simplified/Array/Ukrainian/FuncRep2RelatedG2.hs
@@ -19,15 +19,17 @@
 -- | Allows to choose the variant of the computations in case of usual processment.
 chooseMax :: (Ord c) => (Double -> c) -> Coeffs2 -> String -> FuncRep2 String Double c
 chooseMax g coeffs choice
- | isPair coeffs = getBFstL' (procBoth3InvF g coeffs) [("02y",procRhythmicity23F g "02y" coeffs),
-    ("03y",procRhythmicity23F g "03y" coeffs), ("0y",procRhythmicity23F g "0y" coeffs),
-     ("y",procBothF g coeffs),("y0",procDiverse2F g),("y2",procBoth2F g coeffs),("y3",procBoth3F g coeffs),
-       ("yy",procBothInvF g coeffs),("yy2",procBoth2InvF g coeffs)] choice
- | otherwise = getBFstL' (procBoth3InvF g coeffs) [("02y",procRhythmicity23F g "02y" coeffs),
-    ("03y",procRhythmicity23F g "03y" coeffs),("0y",procRhythmicity23F g "0y" coeffs),
-     ("y",procBothF g coeffs),("y0",procDiverse2F g),("y2",procBoth2F g coeffs),("y3",procBoth3F g coeffs),
-       ("yy",procBothInvF g coeffs),("yy2",procBoth2InvF g coeffs)] choice
+ | isPair coeffs = getBFstL' (procBoth4InvF g coeffs) [("02y",procRhythmicity23F g "02y" coeffs),
+    ("03y",procRhythmicity23F g "03y" coeffs), ("04y",procRhythmicity23F g "04y" coeffs),
+     ("0y",procRhythmicity23F g "0y" coeffs), ("y",procBothF g coeffs),("y0",procDiverse2F g),
+      ("y2",procBoth2F g coeffs),("y3",procBoth3F g coeffs), ("y4",procBoth4F g coeffs), ("yy",procBothInvF g coeffs),
+       ("yy2",procBoth2InvF g coeffs),("yy3",procBoth3InvF g coeffs)] choice
+ | otherwise = getBFstL' (procBoth4InvF g coeffs) [("02y",procRhythmicity23F g "02y" coeffs),
+    ("03y",procRhythmicity23F g "03y" coeffs),("04y",procRhythmicity23F g "04y" coeffs),
+     ("0y",procRhythmicity23F g "0y" coeffs), ("y",procBothF g coeffs),("y0",procDiverse2F g),
+      ("y2",procBoth2F g coeffs),("y3",procBoth3F g coeffs), ("y4",procBoth4F g coeffs),
+       ("yy",procBothInvF g coeffs),("yy2",procBoth2InvF g coeffs),("yy3",procBoth3InvF g coeffs)] choice
 
 -- | Allows to choose precision in the Numeric.showFDouble function being given a choice parameter.
 precChoice :: String -> Maybe Int
-precChoice = getBFstL' (Just 4) [("02y",Just 0),("03y",Just 0),("0y",Just 0),("y",Just 0),("y0",Just 0),("y2",Just 0),("y3",Just 0)]
+precChoice = getBFstL' (Just 4) [("02y",Just 0),("03y",Just 0),("04y",Just 0),("0y",Just 0),("y",Just 0),("y0",Just 0),("y2",Just 0),("y3",Just 0), ("y4",Just 0)]
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 The short (possibly) instruction how to use the programs of the package phonetic-languages-simplified-examples-array
 in Ukrainian is here:
 
-https://web.archive.org/web/20210104162220/https://github.com/OleksandrZhabenko/uk/blob/master/Instruction_phonetic-languages-simplified-examples-array-0.2.0.0.pdf
+https://web.archive.org/web/20210127214219/https://oleksandrzhabenko.github.io/uk/Instruction_phonetic-languages-simplified-examples-array-0.3.0.0.pdf
 
 Since the version 0.2.0.0 there exist also comparative mode for the rewritePoemG3 executable. It allows to create from two
 files with the text variants the new one. For more information in Ukrainian, please, refer to the instruction above to the
@@ -22,11 +22,28 @@
 lineVariantsG3 10.0_1.2 yy2 садок вишневий коло хати хрущі над вишнями гудуть (the Ukrainian text here and further is
 from the Taras Shevchenko poem)
 
+lineVariantsG3 10.0_1.2 5 5 1 2 04y садок вишневий коло хати хрущі над вишнями гудуть 
+
 lineVariantsG3 +M 02y 3 03y 3 y0 10 -M ++BL <Ukrainian text>
 
 lineVariantsG3 ++I ++BL 4.3_ +M 02y 3 0y 3 y0 20 y2 40 -M садок вишневий коло хати хрущі над вишнями гудуть
 
-lineVariantsG3 +IF hello.txt -IF ++BL +M 02y 3 0y 3 y0 40 y2 50 -M садок вишневий коло хати хрущі над вишнями гудуть
+lineVariantsG3 +IF hello.txt -IF ++BL +M 02y 3 0y 3 04y 5 y0 40 y4 50 -M садок вишневий коло хати хрущі над вишнями гудуть
+
+You can also use multiple variations mode to look at the synonyms, paraphrases etc.
+
+For this, use instead of just the text as the last arguments the following special construction:
+
+{ <variant1 of the Ukrainian text> / <variant2 of the Ukrainian text> / ... / <variantN of the Ukrainian text> }
+
+with at least two variants inside the curly brackets. They will be processed in chain
+with the one variant of each and the possibility to choose at the end between
+these different ones, which finally results in a single line.
+
+Please, remember that the program provides processing for every combination of the variations
+so if you specify too many of them (e. g. 3 variants of one word and 4 variants of the another one will
+lead to 3*4 = 12 variations possible), the processing while getting the final result
+can become longer than expected.
 
 2) propertiesTextG3:
 
diff --git a/Simple/Main.hs b/Simple/Main.hs
--- a/Simple/Main.hs
+++ b/Simple/Main.hs
@@ -13,10 +13,8 @@
 
 module Main where
 
-import Languages.UniquenessPeriods.Array.Constraints.Encoded
 import Phonetic.Languages.Array.Ukrainian.PropertiesSyllablesG2
 import System.Environment (getArgs)
-import Text.Read (readMaybe)
 import Phonetic.Languages.Simple
 
 -- | Prints the rearrangements with the \"property\" information for the Ukrainian language text. The first command line argument must be a
@@ -37,12 +35,12 @@
      lstW = if any (\x -> x == "++B" || x == "++BL") args00 then True else False -- If one of the command line options is \"++B\" or \"++BL\" then the last word of the line will remain the last one.
      jstL0 = if any (\x -> x == "++L" || x == "++BL") args00 then True else False -- If one of the command line options is \"++L\" or \"++BL\" then the program outputs just lines without metrices values.
      toFileMode1 = concat . take 1 . drop 1 . dropWhile (/= "+IF") . takeWhile (/= "-IF") $ args0  -- Prints the last resulting line of the interactive mode processment (the last selected variant) to the file and also to the stdout.
-     interactiveP = if any (\xs -> xs == "++I" || xs == "+IF") args00 then True else False -- If one of the command line options is \"++I\", or \"+FIB\", or \"+IF\" then the program prints the variants and then prompts for the preferred variant. Afterwards, it prints just that variant alone.
+     interactiveP = if any (\xs -> xs == "++I" || xs == "+IF") args00 then True else False -- If one of the command line options is \"++I\", or \"+IF\" then the program prints the variants and then prompts for the preferred variant. Afterwards, it prints just that variant alone.
      args01 = takeWhile (/= "+A") args0 `mappend` (drop 1 . dropWhile (/= "-A") $ args0)
      args02
       | null toFileMode1 = filter (\xs -> xs /= "+IF" && xs /= "-IF") args01
       | otherwise = takeWhile (/= "+IF") args01 `mappend` (drop 1 . dropWhile (/= "-IF") $ args01)
      args = takeWhile (/= "+M") args02 `mappend` (drop 1 . dropWhile (/= "-M") $ args02)
-     coeffs = readCF . concat . take 1 $ args -- The first command line argument. If not sure, just pass \"1_\".
- if isPair coeffs then generalProc2 toFileMode1 interactiveP jstL0 args0 coeffs (drop 1 args) lstW
- else generalProc2 toFileMode1 interactiveP jstL0 args0 coeffs args lstW
+     coeffs = readCF . concat . take 1 $ args -- The first command line argument. 
+ if isPair coeffs then generalProc2G toFileMode1 interactiveP jstL0 args0 coeffs (drop 1 args) lstW
+ else generalProc2G toFileMode1 interactiveP jstL0 args0 coeffs args lstW
diff --git a/phonetic-languages-simplified-examples-array.cabal b/phonetic-languages-simplified-examples-array.cabal
--- a/phonetic-languages-simplified-examples-array.cabal
+++ b/phonetic-languages-simplified-examples-array.cabal
@@ -2,9 +2,9 @@
 -- further documentation, see http://haskell.org/cabal/users-guide/
 
 name:                phonetic-languages-simplified-examples-array
-version:             0.2.2.0
+version:             0.3.0.0
 synopsis:            Helps to create Ukrainian texts with the given phonetic properties.
-description:         Uses more functionality of the arrays and lists. The vector-related functionality is removed and this made the executables and libraries much more lightweight. Deal the Ukrainian as one of the phonetic languages. For the short introduction in English, please, refer to: https://functional-art.org/2020/papers/Poetry-OleksandrZhabenko.pdf.
+description:         Uses more functionality of the arrays and lists. The vector-related functionality is removed and this made the executables and libraries much more lightweight. Deal the Ukrainian as one of the phonetic languages. For the short introduction in English, please, refer to: https://functional-art.org/2020/papers/Poetry-OleksandrZhabenko.pdf. Since the version 0.3.0.0 the package has the multiple variations mode for @lineVariantsG3@ executable that allows to use modifications in the text, e. g. synonyms, paraphrases etc.
 homepage:            https://hackage.haskell.org/package/phonetic-languages-simplified-examples-array
 license:             MIT
 license-file:        LICENSE
@@ -17,36 +17,36 @@
 cabal-version:       >=1.10
 
 library
-  exposed-modules:     Phonetic.Languages.Simplified.Array.Ukrainian.FuncRep2RelatedG2, Phonetic.Languages.Simple, Phonetic.Languages.Lines, Phonetic.Languages.GetTextualInfo
+  exposed-modules:     Phonetic.Languages.Simplified.Array.Ukrainian.FuncRep2RelatedG2, Phonetic.Languages.Simple, Phonetic.Languages.Lines, Phonetic.Languages.GetTextualInfo, Phonetic.Languages.Parsing
   -- other-modules:
   other-extensions:    BangPatterns
-  build-depends:       base >=4.8 && <4.15, ukrainian-phonetics-basic-array >=0.1.1 && <1, phonetic-languages-simplified-base >=0.1 && <1, phonetic-languages-simplified-properties-array >=0.1.1 && <1, phonetic-languages-ukrainian-array >=0.1 && <1, phonetic-languages-filters-array >=0.1 && <1, uniqueness-periods-vector-stats >=0.2.1 && <1, parallel >=3.2.0.6 && <4, phonetic-languages-plus >=0.2 && <1, subG >= 0.4 && < 1, phonetic-languages-rhythmicity >=0.1.2 && <1, phonetic-languages-permutations-array >= 0.1 && <1, heaps >= 0.3.6.1 && <1, phonetic-languages-constraints-array >=0.1 && <1, phonetic-languages-simplified-examples-common >=0.1.1 && <1, mmsyn2-array >= 0.1.1 && <1
+  build-depends:       base >=4.8 && <4.15, ukrainian-phonetics-basic-array >=0.1.2 && <1, phonetic-languages-simplified-base >=0.1 && <1, phonetic-languages-simplified-properties-array >=0.1.2 && <1, phonetic-languages-ukrainian-array >=0.1 && <1, phonetic-languages-filters-array >=0.1 && <1, uniqueness-periods-vector-stats >=0.2.1 && <1, parallel >=3.2.0.6 && <4, phonetic-languages-plus >=0.2 && <1, subG >= 0.4 && < 1, phonetic-languages-rhythmicity >=0.1.2 && <1, phonetic-languages-permutations-array >= 0.1 && <1, heaps >= 0.3.6.1 && <1, phonetic-languages-constraints-array >=0.1 && <1, phonetic-languages-simplified-examples-common >=0.1.1 && <1, mmsyn2-array >= 0.1.1 && <1
   -- hs-source-dirs:
   default-language:    Haskell2010
 
 executable lineVariantsG3
   main-is:             Main.hs
-  other-modules:       Phonetic.Languages.Simplified.Array.Ukrainian.FuncRep2RelatedG2, Phonetic.Languages.Simple
+  other-modules:       Phonetic.Languages.Simplified.Array.Ukrainian.FuncRep2RelatedG2, Phonetic.Languages.Simple, Phonetic.Languages.Parsing
   other-extensions:    BangPatterns
-  build-depends:       base >=4.8 && <4.15, ukrainian-phonetics-basic-array >=0.1.1 && <1, phonetic-languages-simplified-base >=0.1 && <1, phonetic-languages-simplified-properties-array >=0.1.1 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian-array >=0.1 && <1, phonetic-languages-filters-array >=0.1 && <1, phonetic-languages-plus >=0.2 && <1, subG >=0.4 && < 1, mmsyn2-array >= 0.1.1 && <1, phonetic-languages-constraints-array >=0.1 && <1, phonetic-languages-permutations-array >= 0.1 && <1, heaps >= 0.3.6.1 && <1, phonetic-languages-simplified-examples-common >=0.1.1 && <1
+  build-depends:       base >=4.8 && <4.15, ukrainian-phonetics-basic-array >=0.1.2 && <1, phonetic-languages-simplified-base >=0.1 && <1, phonetic-languages-simplified-properties-array >=0.1.2 && <1, phonetic-languages-ukrainian-array >=0.1 && <1, phonetic-languages-filters-array >=0.1 && <1, phonetic-languages-plus >=0.2 && <1, subG >=0.4 && < 1, mmsyn2-array >= 0.1.1 && <1, phonetic-languages-constraints-array >=0.1 && <1, phonetic-languages-permutations-array >= 0.1 && <1, heaps >= 0.3.6.1 && <1, phonetic-languages-simplified-examples-common >=0.1.1 && <1
   ghc-options:         -threaded -rtsopts
   hs-source-dirs:      ., Simple
   default-language:    Haskell2010
 
 executable rewritePoemG3
   main-is:             Main.hs
-  other-modules:       Phonetic.Languages.Simplified.Array.Ukrainian.FuncRep2RelatedG2, Phonetic.Languages.Lines
+  other-modules:       Phonetic.Languages.Simplified.Array.Ukrainian.FuncRep2RelatedG2, Phonetic.Languages.Lines, Phonetic.Languages.Parsing
   other-extensions:    BangPatterns
-  build-depends:       base >=4.8 && <4.15, ukrainian-phonetics-basic-array >=0.1.1 && <1, phonetic-languages-simplified-base >=0.1 && <1, phonetic-languages-simplified-properties-array >=0.1.1 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian-array >=0.1 && <1, phonetic-languages-filters-array >=0.1 && <1, phonetic-languages-plus >=0.2 && <1, subG >= 0.4 && < 1, phonetic-languages-rhythmicity >=0.1.2 && <1, phonetic-languages-constraints-array >=0.1 && <1, phonetic-languages-permutations-array >= 0.1 && <1, heaps >= 0.3.6.1 && <1, phonetic-languages-simplified-examples-common >=0.1.1 && <1, mmsyn2-array >= 0.1.1 && <1
+  build-depends:       base >=4.8 && <4.15, ukrainian-phonetics-basic-array >=0.1.2 && <1, phonetic-languages-simplified-base >=0.1 && <1, phonetic-languages-simplified-properties-array >=0.1.2 && <1, phonetic-languages-ukrainian-array >=0.1 && <1, phonetic-languages-filters-array >=0.1 && <1, phonetic-languages-plus >=0.2 && <1, subG >= 0.4 && < 1, phonetic-languages-rhythmicity >=0.1.2 && <1, phonetic-languages-constraints-array >=0.1 && <1, phonetic-languages-permutations-array >= 0.1 && <1, heaps >= 0.3.6.1 && <1, phonetic-languages-simplified-examples-common >=0.1.1 && <1, mmsyn2-array >= 0.1.1 && <1
   ghc-options:         -threaded -rtsopts
   hs-source-dirs:      ., Lines
   default-language:    Haskell2010
 
 executable propertiesTextG3
   main-is:             Main.hs
-  other-modules:       Phonetic.Languages.Simplified.Array.Ukrainian.FuncRep2RelatedG2, Phonetic.Languages.GetTextualInfo
+  other-modules:       Phonetic.Languages.Simplified.Array.Ukrainian.FuncRep2RelatedG2, Phonetic.Languages.GetTextualInfo, Phonetic.Languages.Parsing
   other-extensions:    BangPatterns
-  build-depends:       base >=4.8 && <4.15, ukrainian-phonetics-basic-array >=0.1.1 && <1, phonetic-languages-simplified-base >=0.1 && <1, phonetic-languages-simplified-properties-array >=0.1.1 && <1, phonetic-languages-ukrainian-array >=0.1 && <1, phonetic-languages-filters-array >=0.1 && <1, uniqueness-periods-vector-stats >=0.2.1 && <1, parallel >=3.2.0.6 && <4, phonetic-languages-plus >=0.2 && <1, subG >= 0.4 && < 1, phonetic-languages-rhythmicity >=0.1.2 && <1, phonetic-languages-permutations-array >= 0.1 && <1, heaps >= 0.3.6.1 && <1, phonetic-languages-constraints-array >=0.1 && <1, phonetic-languages-simplified-examples-common >=0.1.1 && <1, mmsyn2-array >= 0.1.1 && <1
+  build-depends:       base >=4.8 && <4.15, ukrainian-phonetics-basic-array >=0.1.2 && <1, phonetic-languages-simplified-base >=0.1 && <1, phonetic-languages-simplified-properties-array >=0.1.2 && <1, phonetic-languages-ukrainian-array >=0.1 && <1, phonetic-languages-filters-array >=0.1 && <1, uniqueness-periods-vector-stats >=0.2.1 && <1, parallel >=3.2.0.6 && <4, phonetic-languages-plus >=0.2 && <1, subG >= 0.4 && < 1, phonetic-languages-rhythmicity >=0.1.2 && <1, phonetic-languages-permutations-array >= 0.1 && <1, heaps >= 0.3.6.1 && <1, phonetic-languages-constraints-array >=0.1 && <1, phonetic-languages-simplified-examples-common >=0.1.1 && <1, mmsyn2-array >= 0.1.1 && <1
   ghc-options:         -threaded -rtsopts
   hs-source-dirs:      ., GetInfo
   default-language:    Haskell2010
