private int GetMask(HyperEquation he)
        {
            int mask = 0x0;

            if (Hset.AddLastAble(he) && Hset.AddFirstAble(he))
            {
                mask |= 0x80;
            }
            if (Hset.AddLastAble(he.Flip12()) && Hset.AddFirstAble(he.Flip12()))
            {
                mask |= 0x40;
            }
            //if(Hset.AddLastAble(he) || Hset.AddLastAble(he.Flip12())) mask |= 0x20;
            if (Hset.AddLastAble(he))
            {
                mask |= 0x10;
            }
            if (Hset.AddLastAble(he.Flip12()))
            {
                mask |= 0x8;
            }
            //if(Hset.AddFirstAble(he) || Hset.AddFirstAble(he.Flip12())) mask |= 0x4;
            if (Hset.AddFirstAble(he))
            {
                mask |= 0x2;
            }
            if (Hset.AddFirstAble(he.Flip12()))
            {
                mask |= 0x1;
            }
            return(mask);
        }
        private void buttonAdd_Click(object sender, EventArgs e)
        {
            var tn = treeViewList.SelectedNode as TreeNodeHyperF;

            if (tn == null)
            {
                return;
            }
            treeViewList.SuspendLayout();
            treeViewCycle.SuspendLayout();
            var he = tn.G.Data;

            if (_k == 2)
            {
                he = (new HyperEquation(he[1], he[0], he[2]) - he[1].AbcShift).Simplify();
            }
            if (_k == 3)
            {
                he = (new HyperEquation(he[2], he[0], he[1]) - he[2].AbcShift).Simplify();
            }
            if (Hset.List != null)
            {
                if (Hset.List.GetLast().Data[2].AbcShift == -he[2].AbcShift)
                {
                    he = new HyperEquation(he[0], he[2], he[1])
                    {
                        FromEquations = he.FromEquations
                    }
                }
                ;
            }
            Converter <HyperEquation, TreeNodeHyperF> converter = h => new TreeNodeHyperF(
                h[1].AbcShift + @"," + h[2].AbcShift + @"  " + h.ToString()
                .Replace(@"*", @"").Replace(@"F", @"*F") + @" = 0")
            {
                G = new MultiCycle <HyperEquation>(h, tn.G.Link)
            };

            if (Hset.AddLast(he) || Hset.AddLast(he = he.Flip12()))
            {
                treeViewCycle.Nodes.Add(converter(he));
            }
            else if (Hset.AddFirst(he) || Hset.AddFirst(he = he.Flip12()))
            {
                treeViewCycle.Nodes.Insert(0, converter(he));
            }
            buttonBuild.Enabled         = Hset.List != null && Hset.AddLastAble(Hset.List.Data);
            buttonBuild.Text            = @"Побудувати дріб (m = " + (Hset.List == null ? @"0" : Hset.Count.ToString(CultureInfo.InvariantCulture)) + @")";
            buttonRemoveFirst.Enabled   = buttonRemoveLast.Enabled =
                buttonFindCycle.Enabled = true;
            AcceptButton = buttonBuild.Enabled ? buttonBuild : buttonAdd;
            Colorize();
            treeViewList.ResumeLayout();
            treeViewCycle.ResumeLayout();
            //treeViewList.Select();
            treeView_AfterSelect(treeViewList, new TreeViewEventArgs(treeViewList.SelectedNode, TreeViewAction.Unknown));
        }