diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -40,3 +40,8 @@
 
 * Third version revised C. Fixed issue with the reverse order of the output for the rewritePoemG executable.
 
+## 0.4.0.0 -- 2020-11-12
+
+* Fourth version. Added the possibility to use constraints from the phonetic-languages-constraints package (it is also a new leightweight dependency)
+in the lineVariantsG executable. They allows to reduce number of computations needed and explicitly apply additional needed grammar rules, extend
+the extent of understandable text and so on.
diff --git a/Simple/Main.hs b/Simple/Main.hs
--- a/Simple/Main.hs
+++ b/Simple/Main.hs
@@ -15,6 +15,7 @@
 module Main where
 
 import Control.Parallel.Strategies
+import Languages.UniquenessPeriods.Vector.Constraints.Encoded (decodeLConstraints,readMaybeECG)
 import qualified Data.Vector as VB
 import Data.Print.Info
 import Languages.UniquenessPeriods.Vector.General.DebugG
@@ -30,7 +31,7 @@
 import Melodics.ByteString.Ukrainian (isUkrainianL)
 import qualified Data.List  as L (span,sort,permutations)
 import Languages.UniquenessPeriods.Vector.FuncRepRelatedG
-import Data.SubG
+import Data.SubG hiding (takeWhile,dropWhile)
 import System.Environment
 import Data.Maybe
 import Text.Read (readMaybe)
@@ -45,33 +46,32 @@
 -- The rest of the command line arguments is the Ukrainian text.
 --
 -- The most interesting is the first line of the output. But other ones also are noteworthy.
+--
+-- You can specify constraints according to the 'decodeLConstraints' function between +A and -A command line arguments. If so, the program will
+-- ask you additional question before proceeding.
 main :: IO ()
 main = do
- args <- getArgs
- let coeffs = readCF . concat . take 1 $ args -- The first command line argument. If not sure, just pass \"1_\".
+ args0 <- getArgs
+ let args = takeWhile (/= "+A") args0 `mappend` (drop 1 . dropWhile (/= "-A") $ args0)
+     (!numericArgs,!textualArgs) = L.span (all isDigit) . drop 1 $ args
+     !xs = concat . take 1 . fLines . unwords . drop 1 $ textualArgs
+     !l = length . words $ xs
+     argCs = catMaybes (fmap (readMaybeECG l) . drop 1 . dropWhile (/= "+A") . takeWhile (/= "-A") $ args0)
+     coeffs = readCF . concat . take 1 $ args -- The first command line argument. If not sure, just pass \"1_\".
      !whspss = VB.fromList " 01-"
- if isPair coeffs then do
-  let (!numericArgs,!textualArgs) = L.span (all isDigit) . drop 1 $ args
-      !arg0 = fromMaybe 1 $ (readMaybe (concat . take 1 $ numericArgs)::Maybe Int)
-      !numberI = fromMaybe 1 $ (readMaybe (concat . drop 1 . take 2 $ numericArgs)::Maybe Int)
-      !choice = concat . take 1 $ textualArgs
-      !xs = concat . take 1 . fLines . unwords . drop 1 $ textualArgs
-      !l = length . words $ xs
-      !v = VB.fromList xs
-      !perms = genPermutations l
-      !subs = subG whspss v
-  generalProc1 coeffs numericArgs arg0 numberI choice l perms subs v
+     !arg0 = fromMaybe 1 $ (readMaybe (concat . take 1 $ numericArgs)::Maybe Int)
+     !numberI = fromMaybe 1 $ (readMaybe (concat . drop 1 . take 2 $ numericArgs)::Maybe Int)
+     !choice = concat . take 1 $ textualArgs
+     !v = VB.fromList xs
+     !subs = subG whspss v
+ if null argCs then let !perms = genPermutations l in generalProc1 coeffs numericArgs arg0 numberI choice l perms subs v
  else do
-  let (!numericArgs,!textualArgs) = L.span (all isDigit) args
-      !arg0 = fromMaybe 1 $ (readMaybe (concat . take 1 $ numericArgs)::Maybe Int)
-      !numberI = fromMaybe 1 $ (readMaybe (concat . drop 1 . take 2 $ numericArgs)::Maybe Int)
-      !choice = concat . take 1 $ textualArgs
-      !xs = concat . take 1 . fLines . unwords . drop 1 $ textualArgs
-      !l = length . words $ xs
-      !v = VB.fromList xs
-      !perms = genPermutations l
-      !subs = subG whspss v
-  generalProc1 coeffs numericArgs arg0 numberI choice l perms subs v
+   putStr "Please, check whether the line below corresponds and is consistent with the data you have specified between the +A and -A optins. "
+   putStrLn "If it is inconsistent then enter further \"n\", press Enter and then run the program again with better arguments. "
+   putStrLn "If the line is consistent with your input between +A and -A then just press Enter to proceed further. "
+   correct <- getLine
+   if correct == "n" then putStrLn "You stopped the program, please, if needed, run it again with better arguments. "
+   else let !perms = decodeLConstraints argCs . genPermutations $ l in generalProc1 coeffs numericArgs arg0 numberI choice l perms subs v
 
 generalProc1 :: Coeffs2 -> [String] -> Int -> Int -> String -> Int -> VB.Vector (VB.Vector Int) -> VB.Vector (VB.Vector Char) -> VB.Vector Char -> IO ()
 generalProc1 coeffs numericArgs arg0 numberI choice l perms subs v = do
diff --git a/phonetic-languages-examples.cabal b/phonetic-languages-examples.cabal
--- a/phonetic-languages-examples.cabal
+++ b/phonetic-languages-examples.cabal
@@ -2,7 +2,7 @@
 -- further documentation, see http://haskell.org/cabal/users-guide/
 
 name:                phonetic-languages-examples
-version:             0.3.3.0
+version:             0.4.0.0
 synopsis:            A generalization of the uniqueness-periods-vector-examples functionality.
 description:         Is intended to use more functionality of the Data.Vector, Data.Foldable, Data.Monoid and Data.SubG modules.
 homepage:            https://hackage.haskell.org/package/phonetic-languages-examples
@@ -20,7 +20,7 @@
   exposed-modules:     Languages.UniquenessPeriods.Vector.FuncRepRelatedG
   -- other-modules:
   other-extensions:    BangPatterns
-  build-depends:       base >=4.7 && <4.15, phonetic-languages-vector >=0.1 && <1, phonetic-languages-common >=0.1.1 && <1, phonetic-languages-properties >=0.3 && <1, vector >=0.11 && < 0.14, mmsyn2 >=0.3 && <1
+  build-depends:       base >=4.7 && <4.15, phonetic-languages-vector >=0.1 && <1, phonetic-languages-common >=0.1.1 && <1, phonetic-languages-properties >=0.3 && <1, vector >=0.11 && < 0.14, mmsyn2 >=0.3 && <1, phonetic-languages-constraints >=0.3.1 && <1
   -- hs-source-dirs:
   default-language:    Haskell2010
 
@@ -28,7 +28,7 @@
   main-is:             Main.hs
   other-modules:       Languages.UniquenessPeriods.Vector.FuncRepRelatedG
   other-extensions:    BangPatterns
-  build-depends:       base >=4.7 && <4.15, ukrainian-phonetics-basic >=0.2.0.2 && <1, vector >=0.11 && <0.14, phonetic-languages-vector >=0.1 && <1, phonetic-languages-general >=0.1 && < 1, phonetic-languages-common >=0.1.1 && <1, phonetic-languages-properties >=0.3 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian >=0.2.3 && <1, parallel >=3.2.0.6 && <4, uniqueness-periods-vector-filters >=0.3 && <1, vector >=0.11 && <0.14, phonetic-languages-plus >=0.1 && <1, subG >=0.1.1.1 && < 1, mmsyn2 >= 0.3 && <1
+  build-depends:       base >=4.7 && <4.15, ukrainian-phonetics-basic >=0.2.0.2 && <1, vector >=0.11 && <0.14, phonetic-languages-vector >=0.1 && <1, phonetic-languages-general >=0.1 && < 1, phonetic-languages-common >=0.1.1 && <1, phonetic-languages-properties >=0.3 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian >=0.2.3 && <1, parallel >=3.2.0.6 && <4, uniqueness-periods-vector-filters >=0.3 && <1, vector >=0.11 && <0.14, phonetic-languages-plus >=0.1 && <1, subG >=0.1.1.1 && < 1, mmsyn2 >= 0.3 && <1, phonetic-languages-constraints >=0.3.1 && <1
   ghc-options:         -threaded -rtsopts
   hs-source-dirs:      ., Simple
   default-language:    Haskell2010
@@ -37,7 +37,7 @@
   main-is:             Main.hs
   other-modules:       Languages.UniquenessPeriods.Vector.FuncRepRelatedG
   other-extensions:    BangPatterns
-  build-depends:       base >=4.7 && <4.15, ukrainian-phonetics-basic >=0.2.0.2 && <1, vector >=0.11 && <0.14, phonetic-languages-vector >=0.1 && <1, phonetic-languages-general >=0.1 && < 1, phonetic-languages-common >=0.1.1 && <1, phonetic-languages-properties >=0.3 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian >=0.2.3 && <1, parallel >=3.2.0.6 && <4, uniqueness-periods-vector-filters >=0.3 && <1, vector >=0.11 && <0.14, phonetic-languages-plus >=0.1 && <1, subG >= 0.1.1.1 && < 1, phonetic-languages-rhythmicity >=0.1.2 && <1, mmsyn2 >=0.3 && <1
+  build-depends:       base >=4.7 && <4.15, ukrainian-phonetics-basic >=0.2.0.2 && <1, vector >=0.11 && <0.14, phonetic-languages-vector >=0.1 && <1, phonetic-languages-general >=0.1 && < 1, phonetic-languages-common >=0.1.1 && <1, phonetic-languages-properties >=0.3 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian >=0.2.3 && <1, parallel >=3.2.0.6 && <4, uniqueness-periods-vector-filters >=0.3 && <1, vector >=0.11 && <0.14, phonetic-languages-plus >=0.1 && <1, subG >= 0.1.1.1 && < 1, phonetic-languages-rhythmicity >=0.1.2 && <1, mmsyn2 >=0.3 && <1, phonetic-languages-constraints >=0.3.1 && <1
   ghc-options:         -threaded -rtsopts
   hs-source-dirs:      ., Lines
   default-language:    Haskell2010
@@ -46,7 +46,7 @@
   main-is:             Main.hs
   other-modules:       Languages.UniquenessPeriods.Vector.FuncRepRelatedG
   other-extensions:    BangPatterns
-  build-depends:       base >=4.7 && <4.15, ukrainian-phonetics-basic >=0.2.0.2 && <1, vector >=0.11 && <0.14, phonetic-languages-vector >=0.1 && <1, phonetic-languages-general >=0.1 && < 1, phonetic-languages-common >=0.1.1 && <1, phonetic-languages-properties >=0.3 && <1, phonetic-languages-ukrainian >=0.2.3 && <1, uniqueness-periods-vector-filters >=0.3 && <1, uniqueness-periods-vector-stats >=0.1.2 && <1, parallel >=3.2.0.6 && <4, phonetic-languages-plus >=0.1 && <1, subG >= 0.1.1.1 && < 1, phonetic-languages-rhythmicity >=0.1.2 && <1, mmsyn2 >=0.3 && <1
+  build-depends:       base >=4.7 && <4.15, ukrainian-phonetics-basic >=0.2.0.2 && <1, vector >=0.11 && <0.14, phonetic-languages-vector >=0.1 && <1, phonetic-languages-general >=0.1 && < 1, phonetic-languages-common >=0.1.1 && <1, phonetic-languages-properties >=0.3 && <1, phonetic-languages-ukrainian >=0.2.3 && <1, uniqueness-periods-vector-filters >=0.3 && <1, uniqueness-periods-vector-stats >=0.1.2 && <1, parallel >=3.2.0.6 && <4, phonetic-languages-plus >=0.1 && <1, subG >= 0.1.1.1 && < 1, phonetic-languages-rhythmicity >=0.1.2 && <1, mmsyn2 >=0.3 && <1, phonetic-languages-constraints >=0.3.1 && <1
   ghc-options:         -threaded -rtsopts
   hs-source-dirs:      ., GetInfo
   default-language:    Haskell2010
