Example #1
0
 private static void _combine(MultiCycle <HyperEquation> g, IEnumerable <HyperEquation> g1, IEnumerable <HyperEquation> g2, Predicate <Abc> pred)
 {
     if (g == null || g1 == null || g2 == null)
     {
         return;
     }
     foreach (var v2 in g2)            // Комбінує пари рівнянь
     {
         foreach (var v1 in g1)
         {
             if ((v1[1].AbcShift == v2[1].AbcShift && v1[2].AbcShift != v2[2].AbcShift && pred(v1[2].AbcShift ^ v2[2].AbcShift)) ||
                 (v1[2].AbcShift == v2[1].AbcShift && v1[1].AbcShift != v2[2].AbcShift && pred(v1[1].AbcShift ^ v2[2].AbcShift)))
             {
                 int i  = v1.GetIndex(v2[1].AbcShift);
                 var vv = (new HyperEquation(v1[0] * v2[1] - v2[0] * v1[i], v1[i ^ 3] * v2[1], -(v2[2] * v1[i]), v1, v2)) /*.Simplify()*/;
                 //vv.FromEquations = new MonoCycle<HyperEquation>(v1) { v2 };
                 var find = g.Link == null ? null : g.Link.Find(m =>
                                                                (m.Data.Data[1].AbcShift == vv[1].AbcShift && m.Data.Data[2].AbcShift == vv[2].AbcShift) ||
                                                                (m.Data.Data[2].AbcShift == vv[1].AbcShift && m.Data.Data[1].AbcShift == vv[2].AbcShift));
                 if (find == null)
                 {
                     g.Add(vv);
                 }
                 else
                 {
                     find.Data.Add(find.Data.Data[1].AbcShift == vv[1].AbcShift ? vv :
                                   new HyperEquation(vv[0], vv[2], vv[1], v1, v2));
                 }
             }
         }
     }
     //_minToTop(g);
 }
Example #2
0
 private static void Add1(MultiCycle <HyperEquation> g, string s0, int a0, int b0, int c0,
                          string s1, int a1, int b1, int c1, string s2, int a2, int b2, int c2)
 {
     g.Add((new HyperEquation(
                new Coef(s0, new Abc(a0, b0, c0)),
                new Coef(s1, new Abc(a1, b1, c1)),
                new Coef(s2, new Abc(a2, b2, c2)))).Simplify());
 }
Example #3
0
 private static void Add2(MultiCycle <HyperEquation> g, string s0,
                          string s1, int a1, int b1, int c1, string s2, int a2, int b2, int c2)
 {
     Add1(g, s0, 0, 0, 0, s1, a1, b1, c1, s2, a2, b2, c2);
     if (a1 == b1 && a2 == b2)
     {
         return;
     }
     Add1(g, s0.Replace('a', '#').Replace('b', 'a').Replace('#', 'b'), 0, 0, 0,
          s1.Replace('a', '#').Replace('b', 'a').Replace('#', 'b'), b1, a1, c1,
          s2.Replace('a', '#').Replace('b', 'a').Replace('#', 'b'), b2, a2, c2);
 }
Example #4
0
        private static void _shift(MultiCycle <HyperEquation> g, IEnumerable <HyperEquation> g1, int i0, int i1)
        {
            var i2 = i0 ^ i1 ^ 3;

            foreach (var v in g1)
            {
                var vv   = (new HyperEquation(v[i0], v[i1], v[i2], v) - v[i0].AbcShift) /*.Simplify()*/;
                var find = g.Link == null ? null : g.Link.Find(m =>
                                                               m.Data.Data[1].AbcShift == vv[1].AbcShift && m.Data.Data[2].AbcShift == vv[2].AbcShift);
                (find == null ? g : find.Data).Add(vv);
            }
            //_minToTop(g);
        }
Example #5
0
 private static void Add1(MultiCycle <HyperEquation> g, string s0,
                          string s1, int a1, int b1, int c1, string s2, int a2, int b2, int c2)
 {
     Add1(g, s0, 0, 0, 0, s1, a1, b1, c1, s2, a2, b2, c2);
 }
Example #6
0
 static HyperSet()
 {
     #region Create objects & arrays for G
     var mono3 = new MonoCycle <Abc>(new Abc(1, 0, 0))
     {
         new Abc(0, 1, 0), new Abc(0, 0, 1)
     };
     G = new[] {
         new MultiCycle <HyperEquation> [2], new MultiCycle <HyperEquation> [3], new MultiCycle <HyperEquation> [2],
         new MultiCycle <HyperEquation> [4], new MultiCycle <HyperEquation> [3], new MultiCycle <HyperEquation> [3]
     };
     for (int j = 0, len0 = G.GetLength(0); j < len0; ++j)
     {
         for (int k = 0, len1 = G[j].GetLength(0); k < len1; ++k)
         {
             G[j][k] = new MultiCycle <HyperEquation>();
         }
     }
     Coef c1 = new Coef("+a"), c2 = new Coef("+a+b"), c3 = new Coef("+a+b+c");
     G[0][0].Data = new HyperEquation(Coef.Zero, new Coef("-a"), c1);
     G[0][1].Data = new HyperEquation(Coef.Zero, new Coef("+b"), c1);
     G[1][0].Data = new HyperEquation(Coef.Zero, c1, c2);
     G[1][1].Data = new HyperEquation(Coef.Zero, new Coef("-a"), c2);
     G[1][2].Data = new HyperEquation(Coef.Zero, new Coef("+c"), c2);
     G[2][0].Data = new HyperEquation(Coef.Zero, c1, c3);
     G[2][1].Data = new HyperEquation(Coef.Zero, new Coef("-a"), c3);
     G[3][0].Data = new HyperEquation(Coef.Zero, new Coef("+a-b"), c2);
     G[3][1].Data = new HyperEquation(Coef.Zero, new Coef("-a-b"), c2);
     G[3][2].Data = new HyperEquation(Coef.Zero, new Coef("+a+c"), c2);
     G[3][3].Data = new HyperEquation(Coef.Zero, new Coef("-a+c"), c2);
     G[4][0].Data = new HyperEquation(Coef.Zero, c2, c3);
     G[4][1].Data = new HyperEquation(Coef.Zero, new Coef("+a-b"), c3);
     G[4][2].Data = new HyperEquation(Coef.Zero, new Coef("-a-b"), c3);
     G[5][0].Data = new HyperEquation(Coef.Zero, new Coef("+a+b-c"), c3);
     G[5][1].Data = new HyperEquation(Coef.Zero, new Coef("+a-b-c"), c3);
     G[5][2].Data = new HyperEquation(Coef.Zero, new Coef("-a-b-c"), c3);
     //αβγδλμπ
     #endregion
     //
     #region Init_Main_G
     //0.0
     Add2(G[0][0], "-(c-a-b+(a-b)(z-1))", "a(z-1)", 1, 0, 0, "c-a", -1, 0, 0);
     Add1(G[0][0], "-c((c-a-b)z+(c-1)(z-1))", "(c-a)(c-b)z", 0, 0, 1, "c(c-1)(z-1)", 0, 0, -1);
     //0.1
     Add1(G[0][1], "b-a", "a", 1, 0, 0, "-b", 0, 1, 0);
     Add2(G[0][1], "c-1-a", "a", 1, 0, 0, "-(c-1)", 0, 0, -1);
     Add2(G[0][1], "c(z-1)", "c", -1, 0, 0, "-(c-b)z", 0, 0, +1);
     Add2(G[0][1], "-(c-a-b)", "a(z-1)", 1, 0, 0, "c-b", 0, -1, 0);
     Add1(G[0][1], "(b-a)(z-1)", "c-a", -1, 0, 0, "-(c-b)", 0, -1, 0);
     Add2(G[0][1], "a-1-(c-1-b)z", "c-a", -1, 0, 0, "(c-1)(z-1)", 0, 0, -1);
     Add2(G[0][1], "c(a-(c-b)z)", "ac(z-1)", 1, 0, 0, "(c-a)(c-b)z", 0, 0, 1);
     #endregion
     //
     #region Init_Else_G
     #region Init_Else_G
     //1.0
     Add2(G[1][0], "-c", "c-a", 0, 0, 1, "a", 1, 0, 1);
     Add2(G[1][0], "-(a-1)", "a-1-b", -1, 0, 0, "b", -1, 1, 0);
     Add2(G[1][0], "c", "c(z-1)", 1, 0, 0, "-(c-b)z", 1, 0, 1);
     Add2(G[1][0], "a-1", "c-a", -1, 0, 0, "-(c-1)", -1, 0, -1);
     Add2(G[1][0], "c-1-a", "-(c-1-a-b)", 1, 0, 0, "b(z-1)", 1, 1, 0);
     Add2(G[1][0], "-(c-1-b)z", "(c-1)(z-1)", 0, 0, -1, "c-1", -1, 0, -1);
     Add2(G[1][0], "c-1-a", "(b-1-a)(z-1)", 1, 0, 0, "-(c-b)", 1, -1, 0);
     Add2(G[1][0], "(a-1)(z-1)", "-(c-a-b+1)", -1, 0, 0, "c-b", -1, -1, 0);
     Add2(G[1][0], "c(z-1)", "a-1-(c-b)z", 0, 0, 1, "c-a+1", -1, 0, 1);
     Add2(G[1][0], "c-1-a", "a-(c-1-b)z", 1, 0, 0, "(c-1)(z-1)", 1, 0, -1);
     Add2(G[1][0], "c(a-1)(z-1)", "c(a-1-(c-b)z)", -1, 0, 0, "(c-a+1)(c-b)z", -1, 0, 1);
     Add2(G[1][0], "(c-1-a)(c-1-b)z", "(c-1)(a-(c-1-b)z)", 0, 0, -1, "a(c-1)(z-1)", 1, 0, -1);
     //1.1
     Add2(G[1][1], "-(c-1-a+(a-b)z)", "a(z-1)", 1, 0, 0, "c-1", -1, 0, -1);
     Add2(G[1][1], "-c(c-a+(a-b)z)", "c(c-a)", -1, 0, 0, "a(c-b)z", 1, 0, 1);
     Add2(G[1][1], "c(c-1-(c-a)z)", "(c-a)(c-b)z", 0, 0, 1, "-c(c-1)", -1, 0, -1);
     Add2(G[1][1], "c(c-1-(c-1-a)z)", "c(c-1)(z-1)", 0, 0, -1, "-a(c-b)z", 1, 0, 1);
     Add2(G[1][1], "b(c-a)+(a-1-b)(a+(b-a)z)", "a(a-1-b)(z-1)", 1, 0, 0, "-b(c-a)", -1, 1, 0);
     Add2(G[1][1], "-(a(c-b)+(b-1-a)(c-a+(a-b)z))", "(b-1-a)(c-a)", -1, 0, 0, "a(c-b)", 1, -1, 0);
     Add2(G[1][1], "a(c-a-b)-(c-1-b)(c-a-bz)", "(c-a)(c-1-a-b)", -1, 0, 0, "ab(z-1)(z-1)", 1, 1, 0);
     Add2(G[1][1], "-((c-a)(c-a-b)+(b-1)(a-(c-b)z))", "a(c-a-b+1)(z-1)", 1, 0, 0, "(c-a)(c-b)", -1, -1, 0);
     Add2(G[1][1], "(c-1-a)(c-a-b)z+(a+(b-a)z)(a-1-(c-b-1)z)", "(c-a)(a-(c-b-1)z)", -1, 0, 0, "-a(c-1)(z-1)(z-1)", 1, 0, -1);
     Add2(G[1][1], "c((a-(c-b)z)(a-(c-1-b)z)-a(c-1-a)(z-1))", "(c-a)(c-b)(a-(c-b-1)z)z", 0, 0, 1, "-ac(c-1)(z-1)(z-1)", 1, 0, -1);
     Add2(G[1][1], "c((a-1-(c-1-b)z)(a-1-(c-b)z)-(c-a)(a-1)(z-1))", "c(c-1)(a-1-(c-b)z)(z-1)", 0, 0, -1, "-(c-a)(c-b)(c-a+1)z", -1, 0, 1);
     Add2(G[1][1], "-c((a-1)(a-bz)+((c-a-b)(c-a-b+1)+(b-a)(a-1-(c-b)(z-1)))z)", "-ac(a-1-(c-b)z)(z-1)", 1, 0, 0, "(c-b)(c-a)(c-a+1)z", -1, 0, 1);
     //1.2
     Add2(G[1][2], "-c", "c", -1, 0, 0, "bz", 0, 1, 1);
     Add2(G[1][2], "-(c-1-a)", "a(z-1)", 1, 0, 0, "c-1", 0, -1, -1);
     Add1(G[1][2], "c(z-1)", "-(c-a-b+1)z", 0, 0, 1, "c", -1, -1, 0);
     Add2(G[1][2], "a-1+(b-a)z", "c-a", -1, 0, 0, "-(c-1)", 0, -1, -1);
     Add2(G[1][2], "c(a+(b-a)z)", "ac(z-1)", 1, 0, 0, "-b(c-a)z", 0, 1, 1);
     Add2(G[1][2], "-c(a+(b-1-a)z)", "(c-a)(b-1-a)z", 0, 0, 1, "ac", 1, -1, 0);
     Add1(G[1][2], "(c-1-a)(c-1-b)", "-(c-1)(c-1-a-b)", 0, 0, -1, "ab(z-1)", 1, 1, 0);
     Add2(G[1][2], "(c-1-a)(b+(a-b)z)", "a(b-(c-1-a)z)", 1, 0, 0, "b(c-1)(z-1)", 0, 1, -1);
     Add2(G[1][2], "(c-1-a)(b-1-(b-1-a)z)", "(c-1)(b-1-a)(z-1)", 0, 0, -1, "-a(c-b)", 1, -1, 0);
     Add2(G[1][2], "c(b-1+(a-b)z)(z-1)", "c(b-1-(c-a)z)", -1, 0, 0, "(c-b)(c-b+1)z", 0, -1, 1);
     Add1(G[1][2], "(a-1)(b-1)(z-1)-(c-a-b)(c-a-b+1)z", "(c-1)(c-a-b+1)(z-1)", 0, 0, -1, "(c-a)(c-b)", -1, -1, 0);
     Add1(G[1][2], "c(ab(z-1)-(c-1-a-b)(c-a-b)z)", "(c-a)(c-b)(c-1-a-b)z", 0, 0, 1, "abc(z-1)(z-1)", 1, 1, 0);
     Add2(G[1][2], "(c-a-b)(b-(c-1-a)z)+b(c-1-b)(z-1)", "-(c-a)(b-(c-1-a)z)", -1, 0, 0, "b(c-1)(z-1)(z-1)", 0, 1, -1);
     Add2(G[1][2], "c(a(b-1)(z-1)-(c-a-b)(c-a-b+1)z)", "-ac(b-1-(c-a)z)(z-1)", 1, 0, 0, "(c-a)(c-b)(c-b+1)z", 0, -1, 1);
     //2.0
     Add2(G[2][0], "c", "-c", 1, 0, 0, "bz", 1, 1, 1);
     Add2(G[2][0], "(a-1)(z-1)", "-(c-a)", -1, 0, 0, "c-1", -1, -1, -1);
     Add2(G[2][0], "c-1-a", "a+(b-1-a)z", 1, 0, 0, "-(c-1)", 1, -1, -1);
     Add1(G[2][0], "-(c-a-b)z", "(c-1)(z-1)", 0, 0, -1, "c-1", -1, -1, -1);
     Add1(G[2][0], "-c(c-a-b)", "(c-a)(c-b)", 0, 0, 1, "ab(z-1)", 1, 1, 1);
     Add2(G[2][0], "c(a-1)(z-1)", "c(a-1-(a-b-1)z)", -1, 0, 0, "-b(c-a+1)z", -1, 1, 1);
     Add2(G[2][0], "(c-1-a)(b-1-a)z", "-(c-1)(a+(b-1-a)z)", 0, 0, -1, "a(c-1)", 1, -1, -1);
     Add2(G[2][0], "c(b-1-a)(z-1)", "(c-a)(b-1-(b-1-a)z)", 0, 0, 1, "-a(c-b+1)", 1, -1, 1);
     Add2(G[2][0], "(a-1)(b-(c-a)z)", "(c-a)(b+(a-1-b)z)", -1, 0, 0, "b(c-1)(z-1)", -1, 1, -1);
     Add2(G[2][0], "c(b-1-(c-1-a)z)", "c(b-1-(b-1-a)z)(z-1)", 1, 0, 0, "(c-b)(c-b+1)z", 1, -1, 1);
     Add1(G[2][0], "c(c-a-b+2)(z-1)", "(a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z", 0, 0, 1, "(c-a+1)(c-b+1)", -1, -1, 1);
     Add2(G[2][0], "(c-1-a)(b-(c-2-a)z)", "(c-2-a-b)(c-1-a-b)z-ab(z-1)", 1, 0, 0, "-b(c-1)(z-1)(z-1)", 1, 1, -1);
     Add1(G[2][0], "(c-1-a)(c-1-b)(c-2-a-b)z", "-(c-1)((c-2-a-b)(c-1-a-b)z-ab(z-1))", 0, 0, -1, "ab(c-1)(z-1)(z-1)", 1, 1, -1);
     Add2(G[2][0], "-c(a-1)(b-1-(c-a+1)z)(z-1)", "c((a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z)", -1, 0, 0, "(c-b)(c-a+1)(c-b+1)z", -1, -1, 1);
     //2.1
     Add1(G[2][1], "c(c-1)", "-c(c-1)", 0, 0, -1, "abz", 1, 1, 1);
     Add2(G[2][1], "-(c-a-1-(b-1)z)", "a(z-1)", 1, 0, 0, "c-1", -1, -1, -1);
     Add2(G[2][1], "-c(c-a-bz)", "c(c-a)", -1, 0, 0, "ab(z-1)z", 1, 1, 1);
     Add1(G[2][1], "c(c-1)(z-1)", "-(c-a)(c-b)z", 0, 0, 1, "c(c-1)", -1, -1, -1);
     Add2(G[2][1], "b(c-1-a)+(b-a)(a-1-b)z", "a(b+(a-1-b)z)", 1, 0, 0, "-b(c-1)", -1, 1, -1);
     Add2(G[2][1], "(a-1+(b-a)z)(a+(b-1-a)z)-(c-1-a)(b-1)z", "(c-a)(a+(b-1-a)z)", -1, 0, 0, "a(c-1)(z-1)", 1, -1, -1);
     Add2(G[2][1], "c((b-1)(c-a)+(a-b)(b-1-a)z)(z-1)", "c(c-a)(b-1-(b-a-1)z)", -1, 0, 0, "-a(c-b)(c-b+1)z", 1, -1, 1);
     Add2(G[2][1], "c((a-1-(a-1-b)z)(a+(b-a)z)-b(c-a)z)", "ac(a-1-(a-1-b)z)(z-1)", 1, 0, 0, "b(c-a)(c-a+1)z", -1, 1, 1);
     Add2(G[2][1], "c((a-(c-b)z)(a+(b-1-a)z)-a(c-1-a)(z-1))", "(c-a)(c-b)(a+(b-1-a)z)z", 0, 0, 1, "ac(c-1)(z-1)", 1, -1, -1);
     Add2(G[2][1], "c((c-1-(c-1-b)z)(a-1-(a-1-b)z)-b(c-a)z)", "c(c-1)(a-1-(a-b-1)z)(z-1)", 0, 0, -1, "b(c-a)(c-a+1)z", -1, 1, 1);
     Add2(G[2][1], "(c-1-a-b)(2ab(z-1)-(c-2-a-b)(c-a-bz))z+ab(a-1)(z-1)(z-1)", "(c-a)((c-2-a-b)(c-1-a-b)z-ab(z-1))", -1, 0, 0, "ab(c-1)(z-1)(z-1)(z-1)", 1, 1, -1);
     Add1(G[2][1], "-c((c-1-a-b)(c-2-a-b)(c-a-b)zz-ab(2(c-1-a-b)z+(c-1)(z-1))(z-1))", "(c-a)(c-b)((c-2-a-b)(c-1-a-b)z-ab(z-1))z", 0, 0, 1, "abc(c-1)(z-1)(z-1)(z-1)", 1, 1, -1);
     Add1(G[2][1], "-c((c-a-b)(c-a-b+1)(c-a-b+2)zz-(a-1)(b-1)(2(c-a-b+1)z+(c-1)(z-1))(z-1))", "c(c-1)((c-a-b+1)(c-a-b+2)z-(a-1)(b-1)(z-1))(z-1)", 0, 0, -1, "(c-a)(c-b)(c-a+1)(c-b+1)z", -1, -1, 1);
     Add2(G[2][1], "-c((b-1)(c-b)(a-1-(c-b+1)z)(z-1)+(c-a-b)((c-a-b+1)(c-a-b+2)z-(a-1)(b-1)(z-1)))", "ac((c-a-b+1)(c-a-b+2)z-(a-1)(b-1)(z-1))(z-1)", 1, 0, 0, "(c-a)(c-b)(c-a+1)(c-b+1)z", -1, -1, 1);
     //3.0
     Add2(G[3][0], "c(c-a-b+1+(a-b)(z-1))", "-(c-a)(c-a+1)", -1, 0, 1, "a(a-1-(c-b)z)", 1, 0, 1);
     Add2(G[3][0], "-(a-1)(c-a-b+1-(a-1-b)(z-1))", "b(c-a-b+1)", -1, 1, 0, "(c-b)(a-1-b)", -1, -1, 0);
     Add2(G[3][0], "c((c-1-a-b)z+(c-1)(z-1))", "c(c-1)(z-1)(z-1)", 1, 0, -1, "(c-b)(a-(c-1-b)z)z", 1, 0, 1);
     Add2(G[3][0], "(c-1-a)(c-1-a-b+(b-1-a)(z-1))", "-(c-b)(c-1-a-b)", 1, -1, 0, "b(b-1-a)(z-1)(z-1)", 1, 1, 0);
     Add2(G[3][0], "-c(a-1)(c-1-(c-a+c-b)z)", "(c-a)(c-a+1)(c-b)z", -1, 0, 1, "c(c-1)(a-1-(c-b)z)", -1, 0, -1);
     Add2(G[3][0], "(c-1-b)(c-1-a-b+(a-b)(z-1))z", "-a(c-1)(z-1)(z-1)", 1, 0, -1, "(c-1)(a-(c-1-b)z)", -1, 0, -1);
     //3.1
     Add2(G[3][1], "c(c-1+(a-b)z)", "-a(c-b)z", 1, 0, 1, "-c(c-1)", -1, 0, -1);
     Add1(G[3][1], "(b-a)(c-a(c-b)-b(c-a)-(b-1-a)(a-1-b)z)", "-a(c-b)(a-1-b)", 1, -1, 0, "b(c-a)(b-1-a)", -1, 1, 0);
     Add1(G[3][1], "-(c-a-b)((c-1-a-b)(c-(a+b-1)z)-2ab(z-1))", "ab(c-a-b+1)(z-1)(z-1)", 1, 1, 0, "(c-a)(c-b)(c-1-a-b)", -1, -1, 0);
     Add2(G[3][1], "c((z-1)(c-a)(c-b)(a-(c-1-b)z)z-((a-(c-b)z)(a-(c-1-b)z)-a(c-1-a)(z-1))(a-1-(c-b)z))", "(c-a)(c-b)(c-a+1)(a-(c-1-b)z)z", -1, 0, 1, "ac(c-1)(a-1-(c-b)z)(z-1)(z-1)", 1, 0, -1);
     //3.2
     Add2(G[3][2], "c", "(b-1-a)z", 1, 0, 1, "-c", 1, -1, 0);
     Add1(G[3][2], "(a-b)z", "-(c-1)", -1, 0, -1, "c-1", 0, -1, -1);
     Add1(G[3][2], "c(a-b)", "-a(c-b)", 1, 0, 1, "b(c-a)", 0, 1, 1);
     Add2(G[3][2], "-(a-1)(c-1-b)", "(c-1)(a-1-b)", -1, 0, -1, "b(c-a)", -1, 1, 0);
     Add2(G[3][2], "c(c-a-b+1)", "a(b-1-(c-a)z)", 1, 0, 1, "-(c-a)(c-b+1)", 0, -1, 1);
     Add2(G[3][2], "-(c-1-a)(c-1-b)", "(c-1)(c-1-a-b)", 1, 0, -1, "b(a-(c-1-b)z)", 1, 1, 0);
     Add2(G[3][2], "(a-1)(b-1-(c-a)z)", "(c-1)(c-a-b+1)", -1, 0, -1, "-(c-a)(c-b)", -1, -1, 0);
     Add2(G[3][2], "c(b-(c-1-a)z)", "(c-b)(c-1-a-b)z", 1, 0, 1, "-bc(z-1)(z-1)", 1, 1, 0);
     Add2(G[3][2], "-c(a-1)(z-1)(z-1)", "(c-a+1)(c-a-b+1)z", -1, 0, 1, "c(a-1-(c-b)z)", -1, -1, 0);
     Add2(G[3][2], "(c-1-b)(c-1-a-b)z", "(c-1)(b-(c-1-a)z)", -1, 0, -1, "-b(c-1)(z-1)(z-1)", 0, 1, -1);
     Add1(G[3][2], "c(a-b)(z-1)(z-1)", "(c-a+1)(b-1-(c-a)z)", -1, 0, 1, "-(c-b+1)(a-1-(c-b)z)", 0, -1, 1);
     Add2(G[3][2], "c(a-1)(b-(c-a+1)z)", "(c-b)(c-a+1)(a-1-b)z", -1, 0, 1, "-bc(a-1-(c-b)z)", -1, 1, 0);
     Add1(G[3][2], "(a-b)(c-1-a)(c-1-b)z", "a(c-1)(b-(c-1-a)z)", 1, 0, -1, "-b(c-1)(a-(c-1-b)z)", 0, 1, -1);
     Add2(G[3][2], "-(c-1-a)(b-1-(c-2-a)z)", "(c-1)(b-1-a)(z-1)(z-1)", 1, 0, -1, "(c-b)(a-(c-1-b)z)", 1, -1, 0);
     //3.3
     Add2(G[3][3], "-c(c-1)", "a(c-b)z", 1, 0, 1, "c(c-1)", 0, -1, -1);
     Add2(G[3][3], "-c(c-a-(b-1)z)", "a(c-a-b+1)z", 1, 0, 1, "c(c-a)", -1, -1, 0);
     Add2(G[3][3], "-(c-1-b)(c-1-a-bz)", "(c-1)(c-1-a-b)", -1, 0, -1, "ab(z-1)(z-1)", 1, 1, 0);
     Add2(G[3][3], "-((b-1)(c-1-a)-(b-1-a)(b-a)z)", "(c-1)(b-1-a)", -1, 0, -1, "a(c-b)", 1, -1, 0);
     Add2(G[3][3], "c(b(c-a)-(a-1-b)(a-b)z)", "a(c-b)(a-1-b)z", 1, 0, 1, "-bc(c-a)", -1, 1, 0);
     Add2(G[3][3], "-c(ab-(c-1-b)(bzz-a(z-1)(z-1)))", "b(c-a)(a-(c-1-b)z)z", 0, 1, 1, "ac(c-1)(z-1)(z-1)", 1, 0, -1);
     Add2(G[3][3], "c((a-1)(c-a)(z-1)-(a-1+(b-a)z)(a-1-(c-b)z))", "(c-a)(c-a+1)(c-b)z", -1, 0, 1, "c(c-1)(a-1-(c-b)z)", 0, -1, -1);
     Add2(G[3][3], "c((b-1)(a-1-(c-b)z)+(a-1+(b-a)z)(b-1-a)(z-1))", "(c-a)(c-a+1)(b-1-a)z", -1, 0, 1, "-ac(a-1-(c-b)z)", 1, -1, 0);
     Add2(G[3][3], "(c-1-b)((a-1-b)(bz-a(z-1))(z-1)-b(a-(c-1-b)z))", "a(a-1-b)(c-1)(z-1)(z-1)", 1, 0, -1, "b(c-a)(a-(c-1-b)z)", -1, 1, 0);
     Add2(G[3][3], "c((c-1-a-b)(c-a-b+1)(c-a)z-b(a-1-(c-b)z)(a-(c-1-b)z))", "-(c-a+1)(c-1-a-b)(c-a)(c-b)z", -1, 0, 1, "abc(a-1-(c-b)z)(z-1)(z-1)", 1, 1, 0);
     Add2(G[3][3], "a(c-1-a)(c-a-b+1)(z-1)+((c-a-b)(c-a)+(b-1)(a-(c-b)z))(a-(c-1-b)z)", "a(c-1)(c-a-b+1)(z-1)(z-1)", 1, 0, -1, "-(c-a)(c-b)(a-(c-1-b)z)", -1, -1, 0);
     Add2(G[3][3], "c(b(c-1-b)(a-1-(c-b)z)(z-1)+(b(a-1)(z-1)-(c-b-a+1)(c-b-a)z)(b-(c-1-a)z))", "(c-a)(c-b)(c-a+1)(b-(c-1-a)z)z", -1, 0, 1, "bc(c-1)(a-1-(c-b)z)(z-1)(z-1)", 0, 1, -1);
     //4.0
     Add2(G[4][0], "c", "-(c-b)", 1, 0, 1, "b(z-1)", 1, 1, 1);
     Add2(G[4][0], "(a-1)z", "-(c-1)", -1, 0, -1, "c-1", -1, -1, -1);
     Add1(G[4][0], "c", "c(z-1)", 1, 1, 0, "-(c-1-b-a)z", 1, 1, 1);
     Add2(G[4][0], "-c", "b-1-(b-1-a)z", 1, 0, 1, "c-b+1", 1, -1, 1);
     Add2(G[4][0], "-c(b-1)", "c(b-1-(b-1-a)z)", 1, -1, 0, "(c-b+1)(b-1-a)z", 1, -1, 1);
     Add1(G[4][0], "(a-1)(b-1)(z-1)", "(c-a)(c-b)", -1, -1, 0, "-(c-1)(c-a-b+1)", -1, -1, -1);
     Add2(G[4][0], "-(a-1)(c-1-b)z", "(c-1)(b+(a-1-b)z)", -1, 0, -1, "b(c-1)(z-1)", -1, 1, -1);
     Add2(G[4][0], "c(a-1)(z-1)", "(c-b)(bz-(a-1)(z-1))", -1, 0, 1, "b(a-1-(c-b)z)", -1, 1, 1);
     Add2(G[4][0], "(b-1)(c-1-a)", "-(c-b)(a+(b-1-a)z)", 1, -1, 0, "(c-1)(b-1-a)(z-1)", 1, -1, -1);
     Add2(G[4][0], "(c-a-2)(c-1-a)z", "(c-1)(a+(b-1-a)z)(z-1)", 1, 0, -1, "(c-1)(a-(c-1-b)z)", 1, -1, -1);
     Add1(G[4][0], "(c-1-a)(c-1-b)", "-((c-2-a-b)(c-1-a-b)z-ab(z-1))", 1, 1, 0, "(c-1)(c-1-a-b)(z-1)", 1, 1, -1);
     Add2(G[4][0], "c(a-1)(z-1)(z-1)", "(a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z", -1, 0, 1, "-(c-b+1)(a-1-(c-b)z)", -1, -1, 1);
     Add2(G[4][0], "-(c-1-a)(c-1-b)(c-a-2)z", "(c-1)((c-1-a-b)(c-a-b-2)z-ab(z-1))", 1, 0, -1, "b(c-1)(a-(c-1-b)z)(z-1)", 1, 1, -1);
     Add1(G[4][0], "c(a-1)(b-1)(z-1)(z-1)", "c((a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z)", -1, -1, 0, "(c-a+1)(c-b+1)(c-a-b+1)z", -1, -1, 1);
     //4.1
     Add2(G[4][1], "c(c-b+(b-1-a)z)", "-c(c-b)", 1, -1, 0, "b(b-1-a)(z-1)z", 1, 1, 1);
     Add2(G[4][1], "-(a-1)(c-1-b-(a-1-b)z)", "b(c-a)", -1, 1, 0, "(c-1)(a-1-b)", -1, -1, -1);
     Add2(G[4][1], "c(c-1-(c-1-b)z)", "c(c-1)(z-1)", 1, 0, -1, "b(a-(c-1-b)z)z", 1, 1, 1);
     Add2(G[4][1], "c(c-1-(c-b)z)", "-(c-b)(a+(b-1-a)z)z", 1, 0, 1, "c(c-1)(z-1)", 1, -1, -1);
     Add2(G[4][1], "(c-1-a)(c-1-b+(b-1-a)z)", "b(a+(b-1-a)z)(z-1)", 1, 1, 0, "-(c-1)(c-1-a-b)", 1, -1, -1);
     Add2(G[4][1], "c(a-1)(c-1-(c-1-b)z)", "-c(c-1)(a-1-(a-b-1)z)", -1, 0, -1, "b(c-a)(c-a+1)z", -1, 1, 1);
     Add2(G[4][1], "c(a-1)(c-1-(c-b)z)(z-1)", "(c-a)(c-a+1)(c-b)z", -1, 0, 1, "c(c-1)(a-1-(c-b)z)", -1, -1, -1);
     Add2(G[4][1], "-(a(c-1-b)+(b-1-a)(c-1-a+(a-b)z))z", "(c-1)(a+(b-1-a)z)", -1, 0, -1, "a(c-1)(z-1)", 1, -1, -1);
     Add2(G[4][1], "-c(b(c-b)-(a-1-b)(a-b)(z-1))", "a(c-b)(a-1-(a-1-b)z)", 1, 0, 1, "b(c-a)(c-a+1)", -1, 1, 1);
     Add2(G[4][1], "c(b-1)(c-a-(b-1-a)z)(z-1)", "c(c-a)(b-1-(b-1-a)z)", -1, -1, 0, "-a(c-b+1)(c-a-b+1)z", 1, -1, 1);
     Add2(G[4][1], "(b(c-a-b)-(c-1-a)(c-1-b-(a-1)z))z", "b(c-1)(z-1)(z-1)", 0, 1, -1, "-(c-1)(b-(c-1-a)z)", -1, -1, -1);
     Add2(G[4][1], "c((c-a-b)(c-a-b+1)-a(c-a)(z-1))", "-(c-b+1)(c-a)(c-b)", 0, -1, 1, "ab(z-1)(b-1-(c-a)z)", 1, 1, 1);
     Add2(G[4][1], "(c-1-b)(b(c-1-a)+(a-1-b)(a+(b-a)z))z", "a(c-1)(b+(a-1-b)z)(z-1)", 1, 0, -1, "b(c-1)(a-(c-1-b)z)", -1, 1, -1);
     Add2(G[4][1], "c((c-b)(a-1)-(a-1-b)(b-1+(a-b)z))(z-1)", "(c-b)(c-b+1)(a-1-(a-1-b)z)", 0, -1, 1, "b(c-a+1)(b-1-(c-a)z)", -1, 1, 1);
     Add2(G[4][1], "(b-1)((c-a-b+1)(a-(c-b)z)+(c-b)(a+(b-1-a)z)(z-1))", "(c-a)(c-b)(a+(b-1-a)z)", -1, -1, 0, "a(c-1)(c-b-a+1)(z-1)", 1, -1, -1);
     Add2(G[4][1], "c((c-a-b+2)(c-b-(a-1)z)-(a-1)(b-1)(z-1))", "b((a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z)", 0, 1, 1, "-(c-b)(c-a+1)(c-b+1)", -1, -1, 1);
     Add2(G[4][1], "-(c-1-a)((c-2-a-b)(c-1-b-az)-ab(z-1))z", "(c-1)((c-2-a-b)(c-1-a-b)z-ab(z-1))", 0, -1, -1, "ab(c-1)(z-1)(z-1)(z-1)", 1, 1, -1);
     Add2(G[4][1], "c((c-1-b)(a-1-(a-1-b)z)(z-1)+(a-1-(c-1-b)z)(c-1-a-b))", "ac(a-1-(a-1-b)z)(z-1)(z-1)", 1, 1, 0, "(c-a)(c-a+1)(c-1-a-b)z", -1, 1, 1);
     Add2(G[4][1], "c(b-1)((z-1)(c-b)(a+(b-1-a)z)-(a-(c-b)z)(b-1-(c-a)z))", "(c-a)(c-b)(c-b+1)(a+(b-1-a)z)z", 0, -1, 1, "-ac(c-1)(b-1-(c-a)z)(z-1)", 1, -1, -1);
     Add2(G[4][1], "c((c-1-b)(a-1-(a-1-b)z)(z-1)-(a-1-(c-1-b)z)(b-(c-1-a)z))", "c(c-1)(a-1-(a-1-b)z)(z-1)(z-1)", 0, 1, -1, "-(c-a)(c-a+1)(b-(c-1-a)z)z", -1, 1, 1);
     Add2(G[4][1], "c((c-2-a-b)(c-1-a-b)z-(ab+(c-1-b)(a-(c-2-b)z))(z-1))", "-(c-a)((c-2-a-b)(c-1-a-b)z-ab(z-1))z", 0, 1, 1, "ac(c-1)(z-1)(z-1)(z-1)", 1, 1, -1);
     Add2(G[4][1], "(c-1-b)((c-2-a-b)(c-1-a-b)z-(ab+(a-1-b)(a-(c-2-b)z))(z-1))", "-(c-a)((c-2-a-b)(c-1-a-b)z-ab(z-1))", -1, 1, 0, "a(c-1)(a-1-b)(z-1)(z-1)(z-1)", 1, 1, -1);
     Add2(G[4][1], "c(b-1)((c-a-b+1)(c-a-b+2)z-(a(a-1)+(b-1-a)(c-b+1)z)(z-1))", "ac((a-1)(b-1)(z-1)-(c-b-a+1)(c-b-a+2)z)", 1, -1, 0, "-(c-a)(c-a+1)(c-b+1)(b-1-a)z", -1, -1, 1);
     Add2(G[4][1], "c(b-1)((c-a-b+1)(c-a-b+2)z-((a-1)(b-1)+(c-b)(a-1-(c-b+1)z))(z-1))", "c(c-1)((a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z)", 0, -1, -1, "(c-a)(c-b)(c-a+1)(c-b+1)z", -1, -1, 1);
     //4.2
     Add2(G[4][2], "-c(c-1-bz)", "c(c-1)", -1, 0, -1, "ab(z-1)z", 1, 1, 1);
     Add2(G[4][2], "-c(c-1-(b-1)z)", "a(c-b)z", 1, 0, 1, "c(c-1)", -1, -1, -1);
     Add1(G[4][2], "-((c-1-a)(c-1-b)-(ab+(a+b-1)(c-1-a-b))z)", "ab(z-1)(z-1)", 1, 1, 0, "(c-1)(c-1-a-b)", -1, -1, -1);
     Add1(G[4][2], "-c((c-a)(c-b)-(ab+(c-a-b)(a+b-1))z)", "c(c-a)(c-b)", -1, -1, 0, "ab(c-a-b+1)(z-1)z", 1, 1, 1);
     Add2(G[4][2], "c(b(c-1-b)(z-1)-(b+(a-b)z)(b+(a-1-b)z))", "a(c-b)(b+(a-1-b)z)z", 1, 0, 1, "-bc(c-1)(z-1)", -1, 1, -1);
     Add2(G[4][2], "c((b-1+(a-b)z)(b-1-(b-a-1)z)-(b-1)(c-b)(z-1))", "-c(c-1)(b-1-(b-a-1)z)", -1, 0, -1, "a(c-b)(c-b+1)z", 1, -1, 1);
     Add2(G[4][2], "a(c-1-a)(b+(a-1-b)z)-(b(c-1-a)+(b-a)(a-1-b)z)(b-1-a)(z-1)", "-a(c-b)(b+(a-1-b)z)", 1, -1, 0, "b(b-1-a)(c-1)(z-1)", -1, 1, -1);
     Add2(G[4][2], "-c((c-a)(b+(a-1-b)z)(b-1-(b-1-a)z)+(c-b)(b-1-a)(a-1-b)(z-1)z)", "bc(c-a)(b-1-(b-1-a)z)", -1, 1, 0, "a(c-b)(c-b+1)(a-1-b)z", 1, -1, 1);
     Add2(G[4][2], "c((c-b)(a-1+(b-a)z)(a+(b-1-a)z)(z-1)-(b-1)(a-(c-b)z)(a-1-(c-b)z))", "(c-a)(c-a+1)(c-b)(a+(b-1-a)z)z", -1, 0, 1, "-ac(c-1)(a-1-(c-b)z)(z-1)", 1, -1, -1);
     Add2(G[4][2], "c((c-1-b)(a-1-(a-1-b)z)(a+(b-a)z)(z-1)-b(a-1-(c-1-b)z)(a-(c-1-b)z))", "ac(c-1)(a-1-(a-1-b)z)(z-1)(z-1)", 1, 0, -1, "-b(c-a)(c-a+1)(a-(c-1-b)z)z", -1, 1, 1);
     Add1(G[4][2], "(3ab(z-1)-(c-2-a-b)(c-(a+b-1)z))(c-1-a-b)(c-a-b)z-ab(a-1)(b-1)(z-1)(z-1)", "(c-a)(c-b)((c-2-a-b)(c-1-a-b)z-ab(z-1))", -1, -1, 0, "ab(c-1)(c-a-b+1)(z-1)(z-1)(z-1)", 1, 1, -1);
     Add1(G[4][2], "c(ab(a-1)(b-1)(z-1)(z-1)+((c+1-(a+b-1)z)(c-1-a-b)-3ab(z-1))(c-a-b)(c-a-b+1)z)", "abc((a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z)(z-1)(z-1)", 1, 1, 0, "-(c-a)(c-b)(c-a+1)(c-b+1)(c-1-a-b)z", -1, -1, 1);
     Add2(G[4][2], "c((b(a-1)(z-1)-(c-b-a+1)(c-b-a)z)((c-1-b-a)(c-2-b-a)z-ab(z-1))+b(c-1-b)(a-(c-2-b)z)(a-1-(c-b)z)(z-1))", "(c-a)(c-b)(c-a+1)((c-2-a-b)(c-1-a-b)z-ab(z-1))z", -1, 0, 1, "-abc(c-1)(a-1-(c-b)z)(z-1)(z-1)(z-1)", 1, 1, -1);
     Add2(G[4][2], "c(((c-a-b)(a-(c-1-b)z)+a(c-1-a)(z-1))((a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z)-(b-1)(c-b)(a-1-(c-b+1)z)(a-(c-1-b)z)(z-1))", "ac(c-1)((a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z)(z-1)(z-1)", 1, 0, -1, "(c-a)(c-b)(c-a+1)(c-b+1)(a-(c-1-b)z)z", -1, -1, 1);
     //5.0
     Add2(G[5][0], "-c(c-a-b+(a-1-b)(z-1))", "(c-a)(c-a+1)", -1, 1, 1, "a(a-1-(a-1-b)z)(z-1)", 1, 1, 1);
     Add2(G[5][0], "-(b-1)(c-a-b-(b-1-a)(z-1))z", "a(c-1)(z-1)", 1, -1, -1, "(c-1)(a+(b-1-a)z)", -1, -1, -1);
     Add1(G[5][0], "-c((c-1)(z-1)+(c-2-a-b)z)", "-c(c-1)(z-1)(z-1)", 1, 1, -1, "((c-2-a-b)(c-1-a-b)z-ab(z-1))z", 1, 1, 1);
     Add2(G[5][0], "c((a-1-(c-1-b)z)(b+(a-1-b)z)-(c-1-b)(a-1-(a-1-b)z)(z-1))", "(c-a)(c-a+1)(b+(a-1-b)z)z", -1, 1, 1, "c(c-1)(a-1-(a-1-b)z)(z-1)", -1, 1, -1);
     Add1(G[5][0], "c(a-1)(b-1)((c-1)(z-1)+(c-a-b+2)z)(z-1)", "(c-a)(c-b)(c-a+1)(c-b+1)z", -1, -1, 1, "c(c-1)((a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z)", -1, -1, -1);
     Add2(G[5][0], "(c-1-a)((b-(c-2-a)z)(a+(b-1-a)z)-((c-2-a-b)(c-1-a-b)z-ab(z-1)))", "(c-1)((c-2-a-b)(c-1-a-b)z-ab(z-1))", 1, -1, -1, "-b(c-1)(a+(b-1-a)z)(z-1)(z-1)", 1, 1, -1);
     Add2(G[5][0], "c((c-a-b+2)(c-b)(a-1-(a-1-b)z)-(a-1-b)((a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z))(z-1)", "b(c-a+1)((a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z)", -1, 1, 1, "(c-b)(c-a+1)(c-b+1)(a-1-(a-1-b)z)", -1, -1, 1);
     //5.1
     Add2(G[5][1], "c(c-1+(b-1-a)z)", "-c(c-1)", 1, -1, -1, "b(a+(b-1-a)z)z", 1, 1, 1);
     Add2(G[5][1], "c(a-1)(c-1-(a-b-1)z)(z-1)", "-b(c-a)(c-a+1)z", -1, 1, 1, "c(c-1)(a-1-(a-b-1)z)", -1, -1, -1);
     Add1(G[5][1], "(c-1)((c-1-b)(a-1-b)(a+(b-1-a)z)-(c-1-a)(b-1-a)(b+(a-1-b)z))z", "-a(c-1)(c-1)(b+(a-1-b)z)", 1, -1, -1, "b(c-1)(c-1)(a+(b-1-a)z)", -1, 1, -1);
     Add1(G[5][1], "c((c-a)(a-1-b)(b-1-(b-1-a)z)-(c-b)(b-1-a)(a-1-(a-1-b)z))(z-1)", "-b(c-a)(c-a+1)(b-1-(b-1-a)z)", -1, 1, 1, "a(c-b)(c-b+1)(a-1-(a-1-b)z)", 1, -1, 1);
     Add1(G[5][1], "((c-1-a)(c-1-b)(c-2-a-b)(z-1)-(c-a-b)((c-2-a-b)(c-1-a-b)z-ab(z-1)))z", "ab(c-1)(z-1)(z-1)(z-1)", 1, 1, -1, "(c-1)((c-2-a-b)(c-1-a-b)z-ab(z-1))", -1, -1, -1);
     Add1(G[5][1], "c((c-a)(c-b)(c-a-b+2)(z-1)+(c-a-b)((a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z))", "(c-a)(c-b)(c-a+1)(c-b+1)", -1, -1, 1, "-ab((a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z)(z-1)", 1, 1, 1);
     Add2(G[5][1], "c((a-1-(c-1-b)z)((c-1-b-a)(c-2-b-a)z-ab(z-1))-(c-1-b)(a-(c-2-b)z)(a-1-(a-1-b)z)(z-1))", "(c-a)(c-a+1)((c-2-b-a)(c-1-b-a)z-ab(z-1))z", -1, 1, 1, "ac(c-1)(a-1-(a-1-b)z)(z-1)(z-1)(z-1)", 1, 1, -1);
     Add2(G[5][1], "c(b-1)((a-(c-b)z)((a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z)+(c-b)(a-1-(c-b+1)z)(a+(b-1-a)z)(z-1))", "ac(c-1)((a-1)(b-1)(z-1)-(c-a-b+1)(c-a-b+2)z)(z-1)", 1, -1, -1, "-(c-a)(c-b)(c-a+1)(c-b+1)(a+(b-1-a)z)z", -1, -1, 1);
     //5.2
     Add1(G[5][2], "-c(c-1-(a+b-1)z)", "ab(z-1)z", 1, 1, 1, "c(c-1)", -1, -1, -1);
     Add2(G[5][2], "c(a(b-1-(c-1-a)z)(b+(a-1-b)z)+((a-b)(b+(a-1-b)z)-b(c-1-b))(b-1-(b-1-a)z)(z-1))", "a(c-b)(c-b+1)(b+(a-1-b)z)z", 1, -1, 1, "bc(c-1)(az-(b-1)(z-1))(z-1)", -1, 1, -1);
     Add1(G[5][2], "-c(((c-b)(c-a-b)(c-a-b+2)z-(a-1)(b-(c-a)z)(b-1-(c-a+1)z))((c-2-a-b)(c-1-a-b)z-ab(z-1))+b(c-1-b)(a-(c-2-b)z)((c-a-b+1)(c-a-b+2)z-(a-1)(b-1)(z-1))(z-1))", "(c-a)(c-b)(c-a+1)(c-b+1)((c-2-a-b)(c-1-a-b)z-ab(z-1))z", -1, -1, 1, "abc(c-1)((c-a-b+1)(c-a-b+2)z-(a-1)(b-1)(z-1))(z-1)(z-1)(z-1)", 1, 1, -1);
     #endregion
     //*/
     #endregion
     //
     #region Find_Else_G
     //
     Func <int, Predicate <Abc> >
     fe1 = k => s => s.A == k || s.B == k || s.C == k,
         fe2 = k => s => s.A == k ? s.B == k || s.C == k : s.B == k && s.C == k,
         fe3 = k => s => s.A == k && s.B == k && s.C == k,
         fn3 = k => s => s.A != k && s.B != k && s.C != k;
     Predicate <Abc> pTrue = s => true, p1M2 = fe1(-2), p2M2 = fe2(-2), p3N0 = fn3(0);
     //
     _shift(G[1][0], G[0][1], 1, 0);
     _shift(G[1][0], G[0][1], 2, 0);
     //
     _combine(G[1][1], G[0][0], G[1][0], pTrue);
     _combine(G[1][1], G[0][1], G[1][0], p1M2);
     _combine(G[1][2], G[0][1], G[1][0], p3N0);
     //
     _shift(G[2][0], G[1][2], 1, 0);
     //
     _combine(G[2][1], G[0][0], G[2][0], pTrue);
     _combine(G[2][1], G[0][1], G[2][0], p1M2);
     //
     _combine(G[3][0], G[1][0], G[1][0], p1M2);
     _combine(G[3][1], G[1][1], G[1][0], p2M2);
     _combine(G[3][2], G[1][0], G[1][0], fn3(-2));
     _combine(G[3][3], G[1][1], G[1][0], p3N0);
     _combine(G[3][3], G[1][2], G[1][0], p3N0);
     //
     _shift(G[4][0], G[1][2], 2, 0);
     _shift(G[4][0], G[2][0], 2, 1);
     //
     _combine(G[4][1], G[1][0], G[2][0], p1M2);
     _combine(G[4][2], G[1][0], G[2][1], p2M2);
     _combine(G[4][2], G[1][1], G[2][0], p2M2);
     _combine(G[4][2], G[1][2], G[2][0], p2M2);
     //
     // // // G[5][0], G[0][0], G[4][0], pTrue);
     _combine(G[5][0], G[2][0], G[2][0], fe2(0));
     _combine(G[5][0], G[4][0], G[4][0], pTrue);
     _combine(G[5][1], G[2][0], G[2][0], p2M2);
     _combine(G[5][2], G[2][1], G[2][0], fe3(-2));
     //*/
     #endregion
     //
     #region Init_Gplus
     Gplus = new MultiCycle <HyperEquation>();
     Add1(Gplus,
          "-(a-1)c((c-(a-1)-(b+1)+1)(c-(a-1)-(b+1))(c-(a-1)-(b+1)-1)z+((b+1)((a-1)-1)(c-1)-((b+1)(c-(b+1)-1)(c-1+c-(a-1)-(b+1))-(c-(a-1)-(b+1))(c-(a-1)-1)(c-(a-1)+1))z)(z-1))",                //1, -1, 0,
          "(c-(a-1)+1)(c-(a-1))(c-(a-1)-1)((a-1)(c-(a-1)-(b+1)-1)z+((b+1)((b+1)-1)-((b+1)-(a-1))((b+1)-(a-1)-1)z)(z-1))z", -2, 1, 1,
          "(b+1)c(c-1)(((b+1)-1)(c-(a-1)-(b+1)+1)z+((a-1)((a-1)-1)-((b+1)-(a-1))((b+1)-(a-1)-1)z)(z-1))(z-1)(z-1)", -1, 2, -1);
     #endregion
     //
     #region Init_Fa2czSet
     Fa2czSet = new MultiCycle <HyperEquation>();            // b = 1
     //
     Add1(Fa2czSet, "-(c-2-(a-1)z)", 0, 0, 0, "z-1", 0, 1, 0, "c-1", 0, -1, 0);
     Add1(Fa2czSet, "-a(c-2-(a-1)z)", 1, 0, 0, "c-1-a", 0, 1, 0, "(a-1)(c-1)", 0, -1, 0);
     Add1(Fa2czSet, "-(c-1)(c-2-(a-1)z)", 0, 0, -1, "(c-1-a)z", 0, 1, 0, "(c-2)(c-1)", 0, -1, 0);
     Add1(Fa2czSet, "-a(c-2-(a-1)z)z", 1, 0, 1, "c(z-1)", 0, 1, 0, "c(1+(a-1)z)", 0, -1, 0);
     Add1(Fa2czSet, "-(c-1)(c-2-(a-1)z)", -1, 0, -1, "(a-1)(z-1)z", 0, 1, 0, "(c-1)(c-2)", 0, -1, 0);
     Add1(Fa2czSet, "-(c-a)(c-2-(a-1)z)", -1, 0, 0, "(a-1)(z-1)(z-1)", 0, 1, 0, "(c-1-a)(c-1)", 0, -1, 0);
     Add1(Fa2czSet, "-(c-a)(c-2-(a-1)z)z", 0, 0, 1, "c(z-1)(z-1)", 0, 1, 0, "-c(1-(c-a)z)", 0, -1, 0);
     Add1(Fa2czSet, "-a(c-1)(c-2-(a-1)z)(z-1)", 1, 0, -1, "(c-2-a)(c-1-a)z", 0, 1, 0, "-(c-2)(c-1)(a-(a-1)z)", 0, -1, 0);
     Add1(Fa2czSet, "-(c-a)(c-a+1)(c-2-(a-1)z)z", -1, 0, 1, "c(a-1)(z-1)(z-1)(z-1)", 0, 1, 0, "c((c-1-a)(c-a)z-(a-1)(z-1))", 0, -1, 0);
     //*/
     #endregion
     //
     #region Find_Fa2czSet
     //
     foreach (var multiCycle in new[] { G[0][0], G[1][1], G[2][1],
                                        G[3][0], G[3][1], G[3][3], G[4][1], G[4][2], G[5][0], G[5][1], G[5][2] })
     {
         foreach (var mc in (IEnumerable <HyperEquation>)multiCycle)
         {
             if (!((mc[1].AbcShift.B == 1 && mc[2].AbcShift.B == -1) || (mc[1].AbcShift.B == -1 && mc[2].AbcShift.B == 1)))
             {
                 continue;
             }
             var h = (mc[1].AbcShift.B == 1 && mc[2].AbcShift.B == -1 ? mc : new HyperEquation(mc[0], mc[2], mc[1])) /*.Simplify()*/;
             h = (h - new Abc(h[1].AbcShift.A, 0, h[1].AbcShift.C)) /*.Simplify()*/;
             h = new HyperEquation(new Coef(h[0].StrFunc.Replace('b', '1'), h[0].AbcShift),
                                   new Coef(h[1].StrFunc.Replace('b', '1'), h[1].AbcShift),                                         // h[1].AbcShift = new Abc(0, 1, 0)
                                   new Coef(h[2].StrFunc.Replace('b', '1'), new Abc(0, -1, 0)), mc);
             var find = Fa2czSet.Link == null ? null : Fa2czSet.Link.Find(m => m.Data.Data[0].AbcShift == h[0].AbcShift);
             if (find == null)
             {
                 Fa2czSet.Add(h);
             }
             else
             {
                 var fdd = find.Data.Data;
                 if (fdd.ToString().Length > h.ToString().Length)
                 {
                     (find.Data.Data = h).FromEquations.Add(fdd.FromEquations);
                 }
                 else if (fdd.FromEquations == null)
                 {
                     fdd.FromEquations = h.FromEquations;
                 }
                 else
                 {
                     fdd.FromEquations.Add(h.FromEquations);
                 }
             }
         }
     }            //*/
     #endregion
     //
     #region Init_Fa1czSet
     Fa1czSet = new MultiCycle <HyperEquation> [CountG];           // b = 0 | 1
     for (int i = 0; i < CountG; ++i)
     {
         Fa1czSet[i] = new MultiCycle <HyperEquation>();
     }
     //
     #endregion
     //
     #region Find_Fa1czSet
     //
     #endregion
     //
 }