private string CountingResult(string acid, string hydroxide)
    {
        string metalIon, acidReduceIon;

        if (hydroxide.Contains("Fe"))
        {
            if (hydroxide == "Fe(OH)2")
            {
                metalIon      = "Fe";
                acidReduceIon = pattern.TransformToAcidReduceIon(acid);
                if (oxidationDegree1.Contains(acidReduceIon))
                {
                    if (acidReduceIon == "I" || acidReduceIon == "Cl" || acidReduceIon == "Br" || acidReduceIon == "F")
                    {
                        return(metalIon + acidReduceIon + "2");
                    }
                    else
                    {
                        return(metalIon + "(" + acidReduceIon + ")2");
                    }
                }
                if (oxidationDegree2.Contains(acidReduceIon))
                {
                    return(metalIon + acidReduceIon);
                }
                if (oxidationDegree3.Contains(acidReduceIon))
                {
                    if (acidReduceIon == "I" || acidReduceIon == "Cl" || acidReduceIon == "Br" || acidReduceIon == "F" || acidReduceIon == "S")
                    {
                        return(metalIon + "3" + acidReduceIon + "2");
                    }
                    else
                    {
                        return(metalIon + "3(" + acidReduceIon + ")2");
                    }
                }
            }

            if (hydroxide == "Fe(OH)3")
            {
                metalIon      = "Fe";
                acidReduceIon = pattern.TransformToAcidReduceIon(acid);
                if (oxidationDegree1.Contains(acidReduceIon))
                {
                    if (acidReduceIon == "I" || acidReduceIon == "Cl" || acidReduceIon == "Br" || acidReduceIon == "F")
                    {
                        return(metalIon + acidReduceIon + "3");
                    }
                    else
                    {
                        return(metalIon + "(" + acidReduceIon + ")3");
                    }
                }
                if (oxidationDegree2.Contains(acidReduceIon))
                {
                    if (acidReduceIon == "I" || acidReduceIon == "Cl" || acidReduceIon == "Br" || acidReduceIon == "F" || acidReduceIon == "S")
                    {
                        return(metalIon + "2" + acidReduceIon + "3");
                    }
                    else
                    {
                        return(metalIon + "2(" + acidReduceIon + ")3");
                    }
                }
                if (oxidationDegree3.Contains(acidReduceIon))
                {
                    return(metalIon + acidReduceIon);
                }
            }
            return("X");
        }
        else
        {
            metalIon      = pattern.TransformHydroxideToMetalIon(hydroxide);
            acidReduceIon = pattern.TransformToAcidReduceIon(acid);
            return(GettingSubstance(metalIon, acidReduceIon));
        }
    }
    private string CountingResult(string hydroxide, string oxide)
    {
        string acidIon, metalIon;

        if (oxide == "CaO" || hydroxide == "Fe(OH)2" || hydroxide == "Fe(OH)3")
        {
            if (oxide == "CaO")
            {
                return("X");
            }
            if (hydroxide == "Fe(OH)2")
            {
                metalIon = "Fe";
                acidIon  = TransformToAcidReduceIon(oxide);
                if (oxidationDegree1.Contains(acidIon))
                {
                    return(metalIon + "(" + acidIon + ")2");
                }
                if (oxidationDegree2.Contains(acidIon))
                {
                    return(metalIon + acidIon);
                }
                if (oxidationDegree3.Contains(acidIon))
                {
                    return(metalIon + "3(" + acidIon + ")2");
                }
            }

            if (hydroxide == "Fe(OH)3")
            {
                metalIon = "Fe";
                acidIon  = TransformToAcidReduceIon(oxide);
                if (oxidationDegree1.Contains(acidIon))
                {
                    return(metalIon + "(" + acidIon + ")3");
                }
                if (oxidationDegree2.Contains(acidIon))
                {
                    return(metalIon + "2(" + acidIon + ")3");
                }
                if (oxidationDegree3.Contains(acidIon))
                {
                    return(metalIon + acidIon);
                }
            }
            return("X");
        }
        else
        {
            metalIon = pattern.TransformHydroxideToMetalIon(hydroxide);
            acidIon  = TransformToAcidReduceIon(oxide);

            if (oxidationDegree1.Contains(metalIon) && oxidationDegree1.Contains(acidIon) ||
                oxidationDegree2.Contains(metalIon) && oxidationDegree2.Contains(acidIon))
            {
                return(metalIon + acidIon);
            }

            if (oxidationDegree2.Contains(metalIon) && oxidationDegree1.Contains(acidIon))
            {
                return(metalIon + "(" + acidIon + ")2");
            }

            if (oxidationDegree1.Contains(metalIon) && oxidationDegree2.Contains(acidIon))
            {
                return(metalIon + "2" + acidIon);
            }

            if (oxidationDegree3.Contains(metalIon) && oxidationDegree1.Contains(acidIon))
            {
                return(metalIon + "(" + acidIon + ")3");
            }

            if (oxidationDegree3.Contains(metalIon) && oxidationDegree2.Contains(acidIon))
            {
                return(metalIon + "2(" + acidIon + ")3");
            }
            return("X");
        }
    }