diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -63,3 +63,12 @@
 * Fourth version. Added two new command line groups of arguments - "-p" (no Ukrainian minimal grammar
 rules application) and "+a ... -a" (constraints). Updated documentation (especially new pdfs). 
 Added new lightweight dependencies. 
+
+## 0.5.0.0 -- 2023-05-25
+
+* Fifth version. Added two new command line groups of arguments - "+l" (add empty line to output for 
+not test option) and +b ... -b with the extended group of constraints handling. Extended the 
+set of constraints with new ones and now  there are 12 types of them. Some documentation
+improvements. Fixed issues with the numbering in the constraints. 
+Updated the documentation and dependencies boundaries. 
+
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 The executable is the new implementation of the ideas related to PhLADiPreLiO (Phonetic Languages
 Approach to Discovering the Preferred Line Options) for Ukrainian language. It uses hashes and
-has at the moment (as of the version 0.4.0.0) not the full functionality. The previous implementation 
+has at the moment (as of the version 0.5.0.0) not the full functionality. The previous implementation 
 and its documentation are at the links:
 
 https://hackage.haskell.org/package/phonetic-languages-simplified-examples-array
@@ -10,17 +10,15 @@
 [English documentation](https://oleksandrzhabenko.github.io/uk/rhythmicity/PhLADiPreLiO.Eng.21.pdf)
 
 The documentation for  the  new implementation is available at the following links.
-[Новий текст теорії](https://oleksandr-zhabenko.github.io/uk/rhythmicity/phladiprelioUkr.new.4.pdf)
-
-[New implementation](https://oleksandr-zhabenko.github.io/uk/rhythmicity/phladiprelioEng.new.4.pdf)
+[Новий текст теорії](https://oleksandr-zhabenko.github.io/uk/rhythmicity/phladiprelioUkr.5.pdf)
 
-Example of the new functionality in the version 0.3.0.0 is in the video:
+[New implementation](https://oleksandr-zhabenko.github.io/uk/rhythmicity/phladiprelioEng.5.pdf)
 
-https://www.facebook.com/Oleksandr.S.Zhabenko/posts/pfbid0QT1BCWf9fmgQHasfUrSSqCenR9YT1C6CtL8PV4ieGrCTWGwatRh6TTUcxho8irkHl
+Examples of the new functionality in the version 0.5.0.0 is in the video:
 
-Example of the new functionality in the version 0.3.3.0 is in the video:
+https://www.facebook.com/Oleksandr.S.Zhabenko/posts/pfbid033gzq8MCRQsm65mPrzJL25MZNgvW7mezQSywULiVMnqmTBMtSW2jW4ABh6HVMWZNLl
 
-https://www.facebook.com/Oleksandr.S.Zhabenko/posts/pfbid03qAMdEk6ehnQjQXLqNeAULQiTMKJUpQYUjM1eipcJy7hkxLCMuoh7cvZVUEHUUAfl
+https://www.facebook.com/Oleksandr.S.Zhabenko/posts/pfbid05mMCUu5HVoA6aV4kLJ69tQZHyhTRZgXLRvtdLitWCm6JeB2T2ktfkd2opfjjgTxFl
 
 Video recordings as examples of the working prototype usage and how you can listen to 
 Ukrainian text using Google services are at the links below:
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE NoImplicitPrelude, BangPatterns #-}
 
 module Main where
 
@@ -29,9 +29,12 @@
 import Phladiprelio.ConstraintsEncoded
 import Phladiprelio.PermutationsArr
 import Phladiprelio.StrictVG
+import Numeric (showFFloat)
 
-generalF :: FilePath -> Int -> HashCorrections -> (Int8,[Int8]) -> Int -> Bool -> Int -> [String] -> IO [()]
-generalF file numTest hc (grps,mxms) k descending hashStep universalSet = do
+generalF :: FilePath -> Int -> HashCorrections -> (Int8,[Int8]) -> Int -> Bool -> Int -> Bool -> [String] -> IO [()]
+generalF file numTest hc (grps,mxms) k descending hashStep emptyline universalSet 
+  | null universalSet = mapM putStrLn ["You have specified the data and constraints on it that lead to no further possible options.", "Please, specify another data and constraints."]
+  | otherwise = do
    syllableDurationsDs <- readSyllableDurations file
    let syllN = countSyll . concat . take 1 $ universalSet
 --       universalSet = map unwords . permutations . words $ rs
@@ -41,9 +44,16 @@
    if numTest `elem` (0:[2..9]) then do
      hSetNewlineMode stdout universalNewlineMode
      putStrLn "Feet   Val  Stat   Proxim" 
-     mapM (\(q,qs) -> let m = stat1 syllN (q,qs) in let max1 = maximumBy (comparing (f syllableDurationsDs q qs)) universalSet in let mx = f syllableDurationsDs q qs max1 in putStrLn (show (fromEnum q) `mappend` "   |   " `mappend`  show mx `mappend` "     " `mappend` show m `mappend` "  -> " `mappend` show (100 * fromIntegral mx / fromIntegral m) `mappend` "%" `mappend` (if numTest >= 4 then let min1 = minimumBy (comparing (f syllableDurationsDs q qs)) universalSet in ("\n" `mappend` min1 `mappend` "\n" `mappend` max1 `mappend` "\n")  else ""))) .
-      zip [2..7] $ (sel numTest)
-    else  mapM (\(x,y) -> putStrLn (show x `mappend` (' ':y)))  . (let h1 = if descending then (\(u,w) -> ((-1) * u, w)) else id in sortOn h1) . map (\xss -> (f syllableDurationsDs grps mxms xss, xss)) $ universalSet
+     mapM (\(q,qs) -> let m = stat1 syllN (q,qs) in let max1 = maximumBy (comparing (f syllableDurationsDs q qs)) universalSet in let mx = f syllableDurationsDs q qs max1 in 
+                          putStrLn (show (fromEnum q) `mappend` "   |   " `mappend`  show mx `mappend` "     " `mappend` show m `mappend` "  -> " `mappend` 
+                          showFFloat (Just 3) (100 * fromIntegral mx / fromIntegral m) "%" `mappend` (if numTest >= 4 
+                                                                                                    then let min1 = minimumBy (comparing (f syllableDurationsDs q qs)) universalSet in 
+                                                                                                             ("\n" `mappend` min1 `mappend` "\n" `mappend` max1 `mappend` "\n")  
+                                                                                                    else ""))) . zip [2..7] $ (sel numTest) 
+   else (if emptyline 
+             then mapM (\tss -> mapM (\(x, y) -> putStrLn (show x `mappend` (' ':y))) tss >> putStrLn "") . groupBy (\(x1,_) (x2,_) -> x1 == x2)
+             else mapM (\(x,y) -> putStrLn (show x `mappend` (' ':y))))  
+                 . (let h1 = if descending then (\(u,w) -> ((-1) * u, w)) else id in sortOn h1) . map (\xss -> (f syllableDurationsDs grps mxms xss, xss)) $ universalSet
      where sel x 
               | x == 0 || x == 4 = [[1],[2,1],[3,2],[4,3,2],[5,4,3],[6,5,4,3,2]]
               | x == 2 || x == 5 = [[1],[2],[3],[4,3],[5,4],[6,5,4]]
@@ -67,14 +77,17 @@
       hc = readHashCorrections . concat . getB "+c" $ argsB
       prepare = oneA "-p" argsA
       grpp = grouppingR . concat . getB "+r" $ argsB
+      emptyline = oneA "+l" argsA
       numTest = fromMaybe 1 (readMaybe (concat . getB "-t" $ argsB)::Maybe Int)
       hashStep = fromMaybe 20 (readMaybe (concat . getB "+k" $ argsB)::Maybe Int)
       helpMessage = oneA "-h" argsA
-      argCs = catMaybes (fmap (readMaybeECG (l - 1)) -- . (showB l lstW2:)
+      argCs = catMaybes (fmap (readMaybeECG l) -- . (showB l lstW2:)
                                                     . getC "+a" $ argsC)
+      argCBs = concat . getC "+b" $ argsC
       ll = take 7 . (if prepare then id else words . mconcat . prepareText . unwords) $ arg2s
       l = length ll
-      perms 
+      !perms 
+        | not (null argCBs) = filterGeneralConv l argCBs . genPermutationsL $ l
         | null argCs = genPermutationsL l
         | otherwise = decodeLConstraints argCs . genPermutationsL $ l 
       descending = oneA "+n" argsA
@@ -82,36 +95,42 @@
   if helpMessage then do
       putStrLn "SYNOPSIS:"
       putStrLn ""
-      putStrLn "phladiprelioUkr [+a <PhLADiPreLiO constraints> -a] [+c <HashCorrections encoded>] [+n] [+d <FilePath to file with durations>] [+k <number - hash step>] [+r <groupping info>] [-t <number of the test or its absense if 1 is here>] [+s <syllable durations function number>] [-p] <Ukrainian textual line>"
+      putStrLn "phladiprelioUkr [+a <PhLADiPreLiO constraints> -a] [+b <extended algebraic PhLADiPreLiO constraints> -b] [+c <HashCorrections encoded>] [+n] [+l] [+d <FilePath to file with durations>] [+k <number - hash step>] [+r <groupping info>] [-t <number of the test or its absense if 1 is here>] [+s <syllable durations function number>] [-p] <Ukrainian textual line>"
       putStrLn ""
       putStrLn "+n \t— if specified then the order of sorting and printing is descending (the reverse one to the default otherwise). "
       putStrLn ""
+      putStrLn "+l \t— if specified then the output for one property (no tests) contains empty lines between the groups of the line option with the same value of property. "
+      putStrLn ""
       putStrLn "+s \t— the next is the digit from 1 to 4 included. The default one is 2. Influences the result in the case of +d parameter is not given. "
       putStrLn ""
       putStrLn "+d \t— see: https://web.archive.org/web/20220610171812/https://raw.githubusercontent.com/OleksandrZhabenko/phonetic-languages-data/main/0.20.0.0/56.csv as a format for the file."
       putStrLn ""
-      putStrLn "-p \t— if present the minimal grammar transformations (appending and prepending the dependent parts) is not applied. Can be useful also if the text is analyzed as a Ukrainian transcription of some other language text."
+      putStrLn "-p \t— if present the minimal grammar transformations (appending and prepending the dependent parts) are not applied. Can be useful also if the text is analyzed as a Ukrainian transcription of text in some other language."
       putStrLn ""
-      putStrLn "+a ... -a — \t if present contains a group of constraints for PhLADiPreLiO. For more information, see: "
+      putStrLn "+a ... -a \t— if present contains a group of constraints for PhLADiPreLiO. For more information, see: "
       putStrLn "https://oleksandr-zhabenko.github.io/uk/rhythmicity/PhLADiPreLiO.Eng.21.html#constraints in English or in Ukrainian: "
       putStrLn "https://oleksandr-zhabenko.github.io/uk/rhythmicity/PhLADiPreLiO.Ukr.21.html#%D0%BE%D0%B1%D0%BC%D0%B5%D0%B6%D0%B5%D0%BD%D0%BD%D1%8F-constraints"
       putStrLn ""
+      putStrLn "+b ... -b \t— if present takes precedence over those ones in the +a ... -a group (the latter ones have no effect). A group of constraints for PhLADiPreLiO using some boolean-based algebra. For more information, see:"
+      putStrLn "https://oleksandr-zhabenko.github.io/uk/rhythmicity/phladiprelioEng.5.pdf in English or: "
+      putStrLn "https://oleksandr-zhabenko.github.io/uk/rhythmicity/phladiprelioUkr.pdf in Ukrainian."
+      putStrLn ""
       putStrLn "+r \t— afterwards are several unique digits not greater than 8 in the descending order — the first one is the length of the group of syllables to be considered as a period, the rest — positions of the maximums and minimums. Example: \"543\" means that the line is splitted into groups of 5 syllables starting from the beginning, then the positions of the most maximum (4 = 5 - 1) and the next (smaller) maximum (3 = 4 - 1). If there are no duplicated values then the lowest possible value here is 0, that corresponds to the lowest minimum. If there are duplicates then the lowest value here is the number of the groups of duplicates, e. g. in the sequence 1,6,3,3,4,4,5 that is one group there are two groups of duplicates — with 3 and 4 — and, therefore, the corresponding data after +r should be 7...2. The values less than the lowest minimum are neglected."
       putStrLn ""
       putStrLn "+c \t— see explanation at the link: https://hackage.haskell.org/package/rhythmic-sequences-0.2.3.1/docs/src/Rhythmicity.MarkerSeqs.html#HashCorrections"
       putStrLn ""
-      putStrLn "-t \t— and afterwards the digit showing the test for \'smoothness\' (to be more accurate - absense or presense of some irregularities that influences the prosody) to be run - if 0 - more extended and strict, if 2 - less strict, more permissive, if 3 - the test for some values expected to be not the maximum nor the minimum ones in the line with no repetitions (the most common case), this option for its greatest values tends to give either more \'irregular\' lines (more jumping-like or wavy combinations) than other ones or more \'regular\' ones - it depends on the distribution of not included into account maximums and minimums; the lines with the minimum values here can be of different kinds but they are not \'stable\'; if 4 - similar  to 0, but additionally there are printed two options for every part of test - one that corresponds to minimum value and one that corresponds the maximum value;  if 5 - similar  to 2, but additionally there are printed two options for every part of test - one that corresponds to minimum value and one that corresponds the maximum value;  if 6 - similar  to 3, but additionally there are printed two options for every part of test - one that corresponds to minimum value and one that corresponds the maximum value; 7 if 7, 8, or 9 — then there are printed the mixmimum and maximum example strings for the minimums positions in the lines without repetitions during the period (feet), with more minimums taken into account with greater digit here, for 7 it is just 1 or 2 minimuums; otherwise - no tests at all (if no digit is here then it is likely that the first word can be used instead and it will be removed from the input)."
+      putStrLn "-t \t— and afterwards the digit showing the test for \'smoothness\' (to be more accurate - absense or presense of some irregularities that influences the prosody) to be run - if 0 - more extended and strict, if 2 - less strict, more permissive, if 3 - the test for some values expected to be not the maximum nor the minimum ones in the line with no repetitions (the most common case), this option for its greatest values tends to give either more \'irregular\' lines (more jumping-like or wavy combinations) than other ones or more \'regular\' ones - it depends on the distribution of not included into account maximums and minimums; the lines with the minimum values here can be of different kinds but they are not \'stable\'; if 4 - similar  to 0, but additionally there are printed two options for every part of test - one that corresponds to minimum value and one that corresponds the maximum value;  if 5 - similar  to 2, but additionally there are printed two options for every part of test - one that corresponds to minimum value and one that corresponds the maximum value;  if 6 - similar  to 3, but additionally there are printed two options for every part of test - one that corresponds to minimum value and one that corresponds the maximum value; if 7, 8, or 9 — then there are printed the mixmimum and maximum example strings for the minimums positions in the lines without repetitions during the period (feet), with more minimums taken into account with greater digit here, for 7 it is just 1 or 2 minimuums; otherwise - no tests at all (if no digit is here then it is likely that the first word can be used instead and it will be removed from the input)."
       putStrLn ""
       putStrLn "+k \t— and then the number greater than 2 (better, greater than 12, the default value if not specified is 20). The greater value leads to greater numbers. The number less than some infimum here leads to wiping of some information from the result and, therefore, probably is not the desired behaviour. For most cases the default value is just enough sensible, but you can give it a try for other values."
       putStrLn ""
-  else generalF fileDu numTest hc grpp sylD descending hashStep variants1 >> return ()
+  else generalF fileDu numTest hc grpp sylD descending hashStep emptyline variants1 >> return ()
 
 bSpecs :: CLSpecifications
 bSpecs = zip ["+c","+d","+k","+r","+s","-t"] . cycle $ [1]
 
 aSpecs :: CLSpecifications
-aSpecs = [("-h",0),("+n",0),("-p",0)]
+aSpecs = zip ["-h", "+l", "+n","-p"] . cycle $ [0]
 
 cSpecs :: CLSpecifications
-cSpecs = [("+a",-1)]
+cSpecs = zip ["+a","+b"] . cycle $ [-1]
 
diff --git a/phladiprelio-ukrainian-simple.cabal b/phladiprelio-ukrainian-simple.cabal
--- a/phladiprelio-ukrainian-simple.cabal
+++ b/phladiprelio-ukrainian-simple.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.4
 name:               phladiprelio-ukrainian-simple
-version:            0.4.0.0
+version:            0.5.0.0
 
 -- A short (one-line) description of the package.
 synopsis:           A PhLADiPreLiO implementation for Ukrainian that uses hashes
@@ -26,10 +26,10 @@
 
     -- Modules included in this executable, other than Main.
     -- other-modules:
-
+    -- ghc-options:      -threaded -rtsopts
     -- LANGUAGE extensions used by modules in this package.
-    -- other-extensions:
-    build-depends:    base >=4.13 && <5, rhythmic-sequences ==0.3.0.0, ukrainian-phonetics-basic-array ==0.7.0.0, phonetic-languages-ukrainian-array ==0.10.0.0, phladiprelio-ukrainian-shared ==0.1.0.0, cli-arguments ==0.7.0.0, phonetic-languages-permutations-array ==0.4.0.0, phonetic-languages-constraints-array ==0.2.0.0, phonetic-languages-simplified-base ==0.7.0.0
+    other-extensions: NoImplicitPrelude, BangPatterns
+    build-depends:    base >=4.13 && <5, rhythmic-sequences ==0.3.0.0, ukrainian-phonetics-basic-array ==0.7.0.0, phonetic-languages-ukrainian-array ==0.10.0.0, phladiprelio-ukrainian-shared ==0.1.0.0, cli-arguments ==0.7.0.0, phonetic-languages-permutations-array ==0.4.0.0, phonetic-languages-constraints-array ==0.6.1.1, phonetic-languages-simplified-base ==0.7.0.0
     hs-source-dirs:   app
     default-language: Haskell2010
 
