diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -46,3 +46,11 @@
 rules application) and "+a ... -a" (constraints). Updated documentation (especially new pdfs). 
 Added new lightweight dependencies. 
 
+## 0.4.0.0 -- 2023-05-24
+
+* Fourth 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/Phladiprelio/General/Simple.hs b/Phladiprelio/General/Simple.hs
--- a/Phladiprelio/General/Simple.hs
+++ b/Phladiprelio/General/Simple.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE NoImplicitPrelude, BangPatterns #-}
 
 module Phladiprelio.General.Simple where
 
@@ -41,9 +41,12 @@
  -> (Int8,[Int8])
  -> Bool
  -> Int -- ^ The hashing function step. The default value is 20. Is expected to be greater than 2, and better greater than 12. 
+ -> Bool 
  -> [String] 
  -> IO [()] 
-generalF wrs ks arr gs us vs h numTest hc (grps,mxms) descending hashStep universalSet = do
+generalF wrs ks arr gs us vs h numTest hc (grps,mxms) 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
    let syllN = countSyll wrs arr us vs . concat . take 1  $ universalSet
 --       universalSet = map unwords . permutations $ rss
        f grps mxms = sum . countHashes2G hashStep hc grps mxms . mconcat . h . createSyllablesPL wrs ks arr gs us vs
@@ -51,7 +54,10 @@
       hSetNewlineMode stdout universalNewlineMode
       putStrLn "Feet   Val  Stat   Proxim" 
       mapM (\(q,qs) -> let m = stat1 syllN (q,qs) in let max1 = maximumBy (comparing (f q qs)) universalSet in let mx = f 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 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 (u,w) = if descending then ((-1)*u,w) else (u,w) in sortOn h1) . map (\xss -> (f grps mxms xss, xss)) $ universalSet
+   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 (u,w) = if descending then ((-1)*u,w) else (u,w) in sortOn h1) . map (\xss -> (f 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]]
@@ -102,18 +108,22 @@
   args0 <- getArgs
   let (argsC, args) = takeCs1R ('+','-') cSpecs args0
       prepare = any (== "-p") args
-      argCs = catMaybes (fmap (readMaybeECG (l - 1)) -- . (showB l lstW2:)
+      emptyline = any (== "+l") args 
+      argCs = catMaybes (fmap (readMaybeECG l) -- . (showB l lstW2:)
                                                     . getC "+a" $ argsC)
       ll = take 7 . (if prepare then id else words . mconcat . prepareText ysss zsss xs . unwords) $ args
       l = length ll
-      perms 
+      argCBs = concat . getC "+b" $ argsC 
+      !perms 
+        | not (null argCBs) = filterGeneralConv l argCBs . genPermutationsL $ l
         | null argCs = genPermutationsL l
         | otherwise = decodeLConstraints argCs . genPermutationsL $ l 
       variants1 = uniquenessVariants2GNBL ' ' id id id perms ll
-  generalF wrs ks arr gs us vs h numTest hc (grps,mxms) descending hashStep variants1 >> return ()
+  generalF wrs ks arr gs us vs h numTest hc (grps,mxms) descending hashStep emptyline variants1 >> return ()
 
 -- | Specifies the group of the command line arguments for 'processingF', which specifies the
 -- PhLADiPreLiO constraints. For more information, see:
 -- https://oleksandr-zhabenko.github.io/uk/rhythmicity/PhLADiPreLiO.Eng.21.html#constraints 
 cSpecs :: CLSpecifications
-cSpecs = [("+a",-1)]
+cSpecs = zip ["+a","+b"] . cycle $ [-1]
+
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 The library is the new implementation of the ideas related to PhLADiPreLiO (Phonetic Languages
 Approach to Discovering the Preferred Line Options) for different languages. It uses hashes and
-has at the moment (as of the version 0.3.0.0) not the full functionality. The previous implementation 
+has at the moment (as of the version 0.4.0.0) not the full functionality. The previous implementation 
 and its documentation are at the links:
 
 https://hackage.haskell.org/package/phonetic-languages-simplified-generalized-examples-array
@@ -10,19 +10,16 @@
 [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 of the related prototype project for 
-Ukrainian 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 of the related prototype project for 
+Ukrainian is in the videos:
 
-Example of the new functionality in the version 0.3.3.0 of the related prototype project for
-Ukrainian 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/phladiprelio-general-simple.cabal b/phladiprelio-general-simple.cabal
--- a/phladiprelio-general-simple.cabal
+++ b/phladiprelio-general-simple.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.4
 name:               phladiprelio-general-simple
-version:            0.3.0.0
+version:            0.4.0.0
 
 -- A short (one-line) description of the package.
 synopsis:           A generalized functionality of PhLADiPreLiO for different languages that uses hash algorithms.
@@ -27,7 +27,7 @@
 
     -- LANGUAGE extensions used by modules in this package.
     other-extensions: NoImplicitPrelude
-    build-depends:    base >=4.13 && <5, rhythmic-sequences ==0.3.0.0, phonetic-languages-phonetics-basics ==0.10.0.2, phladiprelio-general-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
+    build-depends:    base >=4.13 && <5, rhythmic-sequences ==0.3.0.0, phonetic-languages-phonetics-basics ==0.10.0.2, phladiprelio-general-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:   .
     default-language: Haskell2010
 
