// ???????????????
        private SortedDictionary<int, int> AmountConnectedSubGraphsPerLevel(int numberNode,
            int level)
        {
            var retArray = new SortedDictionary<int, int>();

            if (level == container.Level)
            {
                retArray[1] = 1;
                return retArray;
            }
            BitArray node = container.TreeNode(level, numberNode);

            int powPK = Convert.ToInt32(Math.Pow(container.BranchIndex,
                container.Level - level - 1));
            var engForConnectedComponent = new EngineForConnectedComp();
            ArrayList arrConnComp =
                engForConnectedComponent.GetCountConnSGruph(container.nodeMatrixList(node),
                    container.BranchIndex);
            for (int i = 0; i < arrConnComp.Count; i++)
            {
                var countConnCompi = (int)arrConnComp[i];
                if (retArray.Keys.Contains(countConnCompi * powPK))
                    retArray[countConnCompi * powPK] += 1;
                else
                    retArray.Add(countConnCompi * powPK, 1);
            }

            return retArray;
        }
        private SortedDictionary<int, int> AmountConnectedSubGraphs(int numberNode, int level)
        {
            var retArray = new SortedDictionary<int, int>();

            if (level == container.Level)
            {
                retArray[1] = 1;
                return retArray;
            }
            BitArray node = container.TreeNode(level, numberNode);

            bool haveOne = false;
            for (int i = 0; i < container.BranchIndex; i++)
            {
                if (container.CountConnectedBlocks(node, i) == 0)
                {
                    SortedDictionary<int, int> array = AmountConnectedSubGraphs(numberNode * container.BranchIndex + i,
                        level + 1);

                    foreach (var kvt in array)
                    {
                        if (retArray.Keys.Contains(kvt.Key))
                            retArray[kvt.Key] += kvt.Value;
                        else
                            retArray.Add(kvt.Key, kvt.Value);
                    }
                }
                else
                    haveOne = true;
            }

            if (haveOne)
            {
                int powPK = Convert.ToInt32(Math.Pow(container.BranchIndex, container.Level - level - 1));
                var engForConnectedComponent = new EngineForConnectedComp();
                ArrayList arrConnComp = engForConnectedComponent.GetCountConnSGruph(container.nodeMatrixList(node),
                    container.BranchIndex);
                for (int i = 0; i < arrConnComp.Count; i++)
                {
                    var countConnCompi = (int)arrConnComp[i];
                    if (retArray.Keys.Contains(countConnCompi * powPK))
                        retArray[countConnCompi * powPK] += 1;
                    else
                        retArray.Add(countConnCompi * powPK, 1);
                }
            }

            return retArray;
        }