
int cyclic 7F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         CYCLIC 7                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(7);
    vector<Polynomial<eltType>> polcyclic 7;
    
	////////////
	//		CYCLIC 7		//
	// 7 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6]
	polcyclic 7.emplace_back("x0 + x1 + x2 + x3 + x4 + x5 + x6");
	polcyclic 7.emplace_back("x0*x1 + x1*x2 + x2*x3 + x3*x4 + x4*x5 + x0*x6 + x5*x6");
	polcyclic 7.emplace_back("x0*x1*x2 + x1*x2*x3 + x2*x3*x4 + x3*x4*x5 + x0*x1*x6 + x0*x5*x6 + x4*x5*x6");
	polcyclic 7.emplace_back("x0*x1*x2*x3 + x1*x2*x3*x4 + x2*x3*x4*x5 + x0*x1*x2*x6 + x0*x1*x5*x6 + x0*x4*x5*x6 + x3*x4*x5*x6");
	polcyclic 7.emplace_back("x0*x1*x2*x3*x4 + x1*x2*x3*x4*x5 + x0*x1*x2*x3*x6 + x0*x1*x2*x5*x6 + x0*x1*x4*x5*x6 + x0*x3*x4*x5*x6 + x2*x3*x4*x5*x6");
	polcyclic 7.emplace_back("x0*x1*x2*x3*x4*x5 + x0*x1*x2*x3*x4*x6 + x0*x1*x2*x3*x5*x6 + x0*x1*x2*x4*x5*x6 + x0*x1*x3*x4*x5*x6 + x0*x2*x3*x4*x5*x6 + x1*x2*x3*x4*x5*x6");
	polcyclic 7.emplace_back("x0*x1*x2*x3*x4*x5*x6 + 2147483646");
	////////////


    Ideal<eltType> cyclic 7(polcyclic 7, 7, 1000000);
    nbGen=cyclic 7.f4();
    if(magma)
    {
        cyclic 7.printReducedGroebnerBasis("CYCLIC 7", modulo);
    }
    return nbGen;
}


int cyclic 8F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         CYCLIC 8                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(8);
    vector<Polynomial<eltType>> polcyclic 8;
    
	////////////
	//		CYCLIC 8		//
	// 8 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6, x7]
	polcyclic 8.emplace_back("x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7");
	polcyclic 8.emplace_back("x0*x1 + x1*x2 + x2*x3 + x3*x4 + x4*x5 + x5*x6 + x0*x7 + x6*x7");
	polcyclic 8.emplace_back("x0*x1*x2 + x1*x2*x3 + x2*x3*x4 + x3*x4*x5 + x4*x5*x6 + x0*x1*x7 + x0*x6*x7 + x5*x6*x7");
	polcyclic 8.emplace_back("x0*x1*x2*x3 + x1*x2*x3*x4 + x2*x3*x4*x5 + x3*x4*x5*x6 + x0*x1*x2*x7 + x0*x1*x6*x7 + x0*x5*x6*x7 + x4*x5*x6*x7");
	polcyclic 8.emplace_back("x0*x1*x2*x3*x4 + x1*x2*x3*x4*x5 + x2*x3*x4*x5*x6 + x0*x1*x2*x3*x7 + x0*x1*x2*x6*x7 + x0*x1*x5*x6*x7 + x0*x4*x5*x6*x7 + x3*x4*x5*x6*x7");
	polcyclic 8.emplace_back("x0*x1*x2*x3*x4*x5 + x1*x2*x3*x4*x5*x6 + x0*x1*x2*x3*x4*x7 + x0*x1*x2*x3*x6*x7 + x0*x1*x2*x5*x6*x7 + x0*x1*x4*x5*x6*x7 + x0*x3*x4*x5*x6*x7 + x2*x3*x4*x5*x6*x7");
	polcyclic 8.emplace_back("x0*x1*x2*x3*x4*x5*x6 + x0*x1*x2*x3*x4*x5*x7 + x0*x1*x2*x3*x4*x6*x7 + x0*x1*x2*x3*x5*x6*x7 + x0*x1*x2*x4*x5*x6*x7 + x0*x1*x3*x4*x5*x6*x7 + x0*x2*x3*x4*x5*x6*x7 + x1*x2*x3*x4*x5*x6*x7");
	polcyclic 8.emplace_back("x0*x1*x2*x3*x4*x5*x6*x7 + 2147483646");
	////////////


    Ideal<eltType> cyclic 8(polcyclic 8, 8, 1000000);
    nbGen=cyclic 8.f4();
    if(magma)
    {
        cyclic 8.printReducedGroebnerBasis("CYCLIC 8", modulo);
    }
    return nbGen;
}


int cyclic 9F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         CYCLIC 9                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(9);
    vector<Polynomial<eltType>> polcyclic 9;
    
	////////////
	//		CYCLIC 9		//
	// 9 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6, x7, x8]
	polcyclic 9.emplace_back("x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8");
	polcyclic 9.emplace_back("x0*x1 + x1*x2 + x2*x3 + x3*x4 + x4*x5 + x5*x6 + x6*x7 + x0*x8 + x7*x8");
	polcyclic 9.emplace_back("x0*x1*x2 + x1*x2*x3 + x2*x3*x4 + x3*x4*x5 + x4*x5*x6 + x5*x6*x7 + x0*x1*x8 + x0*x7*x8 + x6*x7*x8");
	polcyclic 9.emplace_back("x0*x1*x2*x3 + x1*x2*x3*x4 + x2*x3*x4*x5 + x3*x4*x5*x6 + x4*x5*x6*x7 + x0*x1*x2*x8 + x0*x1*x7*x8 + x0*x6*x7*x8 + x5*x6*x7*x8");
	polcyclic 9.emplace_back("x0*x1*x2*x3*x4 + x1*x2*x3*x4*x5 + x2*x3*x4*x5*x6 + x3*x4*x5*x6*x7 + x0*x1*x2*x3*x8 + x0*x1*x2*x7*x8 + x0*x1*x6*x7*x8 + x0*x5*x6*x7*x8 + x4*x5*x6*x7*x8");
	polcyclic 9.emplace_back("x0*x1*x2*x3*x4*x5 + x1*x2*x3*x4*x5*x6 + x2*x3*x4*x5*x6*x7 + x0*x1*x2*x3*x4*x8 + x0*x1*x2*x3*x7*x8 + x0*x1*x2*x6*x7*x8 + x0*x1*x5*x6*x7*x8 + x0*x4*x5*x6*x7*x8 + x3*x4*x5*x6*x7*x8");
	polcyclic 9.emplace_back("x0*x1*x2*x3*x4*x5*x6 + x1*x2*x3*x4*x5*x6*x7 + x0*x1*x2*x3*x4*x5*x8 + x0*x1*x2*x3*x4*x7*x8 + x0*x1*x2*x3*x6*x7*x8 + x0*x1*x2*x5*x6*x7*x8 + x0*x1*x4*x5*x6*x7*x8 + x0*x3*x4*x5*x6*x7*x8 + x2*x3*x4*x5*x6*x7*x8");
	polcyclic 9.emplace_back("x0*x1*x2*x3*x4*x5*x6*x7 + x0*x1*x2*x3*x4*x5*x6*x8 + x0*x1*x2*x3*x4*x5*x7*x8 + x0*x1*x2*x3*x4*x6*x7*x8 + x0*x1*x2*x3*x5*x6*x7*x8 + x0*x1*x2*x4*x5*x6*x7*x8 + x0*x1*x3*x4*x5*x6*x7*x8 + x0*x2*x3*x4*x5*x6*x7*x8 + x1*x2*x3*x4*x5*x6*x7*x8");
	polcyclic 9.emplace_back("x0*x1*x2*x3*x4*x5*x6*x7*x8 + 2147483646");
	////////////


    Ideal<eltType> cyclic 9(polcyclic 9, 9, 1000000);
    nbGen=cyclic 9.f4();
    if(magma)
    {
        cyclic 9.printReducedGroebnerBasis("CYCLIC 9", modulo);
    }
    return nbGen;
}


int katsura 10F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         KATSURA 10                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(11);
    vector<Polynomial<eltType>> polkatsura 10;
    
	////////////
	//		KATSURA 10		//
	// 11 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10]
	polkatsura 10.emplace_back("x0^2 + 2*x1^2 + 2*x2^2 + 2*x3^2 + 2*x4^2 + 2*x5^2 + 2*x6^2 + 2*x7^2 + 2*x8^2 + 2*x9^2 + 2*x10^2 + 2147483646*x0");
	polkatsura 10.emplace_back("2*x0*x1 + 2*x1*x2 + 2*x2*x3 + 2*x3*x4 + 2*x4*x5 + 2*x5*x6 + 2*x6*x7 + 2*x7*x8 + 2*x8*x9 + 2*x9*x10 + 2147483646*x1");
	polkatsura 10.emplace_back("x1^2 + 2*x0*x2 + 2*x1*x3 + 2*x2*x4 + 2*x3*x5 + 2*x4*x6 + 2*x5*x7 + 2*x6*x8 + 2*x7*x9 + 2*x8*x10 + 2147483646*x2");
	polkatsura 10.emplace_back("2*x1*x2 + 2*x0*x3 + 2*x1*x4 + 2*x2*x5 + 2*x3*x6 + 2*x4*x7 + 2*x5*x8 + 2*x6*x9 + 2*x7*x10 + 2147483646*x3");
	polkatsura 10.emplace_back("x2^2 + 2*x1*x3 + 2*x0*x4 + 2*x1*x5 + 2*x2*x6 + 2*x3*x7 + 2*x4*x8 + 2*x5*x9 + 2*x6*x10 + 2147483646*x4");
	polkatsura 10.emplace_back("2*x2*x3 + 2*x1*x4 + 2*x0*x5 + 2*x1*x6 + 2*x2*x7 + 2*x3*x8 + 2*x4*x9 + 2*x5*x10 + 2147483646*x5");
	polkatsura 10.emplace_back("x3^2 + 2*x2*x4 + 2*x1*x5 + 2*x0*x6 + 2*x1*x7 + 2*x2*x8 + 2*x3*x9 + 2*x4*x10 + 2147483646*x6");
	polkatsura 10.emplace_back("2*x3*x4 + 2*x2*x5 + 2*x1*x6 + 2*x0*x7 + 2*x1*x8 + 2*x2*x9 + 2*x3*x10 + 2147483646*x7");
	polkatsura 10.emplace_back("x4^2 + 2*x3*x5 + 2*x2*x6 + 2*x1*x7 + 2*x0*x8 + 2*x1*x9 + 2*x2*x10 + 2147483646*x8");
	polkatsura 10.emplace_back("2*x4*x5 + 2*x3*x6 + 2*x2*x7 + 2*x1*x8 + 2*x0*x9 + 2*x1*x10 + 2147483646*x9");
	polkatsura 10.emplace_back("x0 + 2*x1 + 2*x2 + 2*x3 + 2*x4 + 2*x5 + 2*x6 + 2*x7 + 2*x8 + 2*x9 + 2*x10 + 2147483646");
	////////////


    Ideal<eltType> katsura 10(polkatsura 10, 11, 1000000);
    nbGen=katsura 10.f4();
    if(magma)
    {
        katsura 10.printReducedGroebnerBasis("KATSURA 10", modulo);
    }
    return nbGen;
}


int katsura 11F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         KATSURA 11                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(12);
    vector<Polynomial<eltType>> polkatsura 11;
    
	////////////
	//		KATSURA 11		//
	// 12 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11]
	polkatsura 11.emplace_back("x0^2 + 2*x1^2 + 2*x2^2 + 2*x3^2 + 2*x4^2 + 2*x5^2 + 2*x6^2 + 2*x7^2 + 2*x8^2 + 2*x9^2 + 2*x10^2 + 2*x11^2 + 2147483646*x0");
	polkatsura 11.emplace_back("2*x0*x1 + 2*x1*x2 + 2*x2*x3 + 2*x3*x4 + 2*x4*x5 + 2*x5*x6 + 2*x6*x7 + 2*x7*x8 + 2*x8*x9 + 2*x9*x10 + 2*x10*x11 + 2147483646*x1");
	polkatsura 11.emplace_back("x1^2 + 2*x0*x2 + 2*x1*x3 + 2*x2*x4 + 2*x3*x5 + 2*x4*x6 + 2*x5*x7 + 2*x6*x8 + 2*x7*x9 + 2*x8*x10 + 2*x9*x11 + 2147483646*x2");
	polkatsura 11.emplace_back("2*x1*x2 + 2*x0*x3 + 2*x1*x4 + 2*x2*x5 + 2*x3*x6 + 2*x4*x7 + 2*x5*x8 + 2*x6*x9 + 2*x7*x10 + 2*x8*x11 + 2147483646*x3");
	polkatsura 11.emplace_back("x2^2 + 2*x1*x3 + 2*x0*x4 + 2*x1*x5 + 2*x2*x6 + 2*x3*x7 + 2*x4*x8 + 2*x5*x9 + 2*x6*x10 + 2*x7*x11 + 2147483646*x4");
	polkatsura 11.emplace_back("2*x2*x3 + 2*x1*x4 + 2*x0*x5 + 2*x1*x6 + 2*x2*x7 + 2*x3*x8 + 2*x4*x9 + 2*x5*x10 + 2*x6*x11 + 2147483646*x5");
	polkatsura 11.emplace_back("x3^2 + 2*x2*x4 + 2*x1*x5 + 2*x0*x6 + 2*x1*x7 + 2*x2*x8 + 2*x3*x9 + 2*x4*x10 + 2*x5*x11 + 2147483646*x6");
	polkatsura 11.emplace_back("2*x3*x4 + 2*x2*x5 + 2*x1*x6 + 2*x0*x7 + 2*x1*x8 + 2*x2*x9 + 2*x3*x10 + 2*x4*x11 + 2147483646*x7");
	polkatsura 11.emplace_back("x4^2 + 2*x3*x5 + 2*x2*x6 + 2*x1*x7 + 2*x0*x8 + 2*x1*x9 + 2*x2*x10 + 2*x3*x11 + 2147483646*x8");
	polkatsura 11.emplace_back("2*x4*x5 + 2*x3*x6 + 2*x2*x7 + 2*x1*x8 + 2*x0*x9 + 2*x1*x10 + 2*x2*x11 + 2147483646*x9");
	polkatsura 11.emplace_back("x5^2 + 2*x4*x6 + 2*x3*x7 + 2*x2*x8 + 2*x1*x9 + 2*x0*x10 + 2*x1*x11 + 2147483646*x10");
	polkatsura 11.emplace_back("x0 + 2*x1 + 2*x2 + 2*x3 + 2*x4 + 2*x5 + 2*x6 + 2*x7 + 2*x8 + 2*x9 + 2*x10 + 2*x11 + 2147483646");
	////////////


    Ideal<eltType> katsura 11(polkatsura 11, 12, 1000000);
    nbGen=katsura 11.f4();
    if(magma)
    {
        katsura 11.printReducedGroebnerBasis("KATSURA 11", modulo);
    }
    return nbGen;
}


int katsura 12F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         KATSURA 12                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(13);
    vector<Polynomial<eltType>> polkatsura 12;
    
	////////////
	//		KATSURA 12		//
	// 13 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12]
	polkatsura 12.emplace_back("x0^2 + 2*x1^2 + 2*x2^2 + 2*x3^2 + 2*x4^2 + 2*x5^2 + 2*x6^2 + 2*x7^2 + 2*x8^2 + 2*x9^2 + 2*x10^2 + 2*x11^2 + 2*x12^2 + 2147483646*x0");
	polkatsura 12.emplace_back("2*x0*x1 + 2*x1*x2 + 2*x2*x3 + 2*x3*x4 + 2*x4*x5 + 2*x5*x6 + 2*x6*x7 + 2*x7*x8 + 2*x8*x9 + 2*x9*x10 + 2*x10*x11 + 2*x11*x12 + 2147483646*x1");
	polkatsura 12.emplace_back("x1^2 + 2*x0*x2 + 2*x1*x3 + 2*x2*x4 + 2*x3*x5 + 2*x4*x6 + 2*x5*x7 + 2*x6*x8 + 2*x7*x9 + 2*x8*x10 + 2*x9*x11 + 2*x10*x12 + 2147483646*x2");
	polkatsura 12.emplace_back("2*x1*x2 + 2*x0*x3 + 2*x1*x4 + 2*x2*x5 + 2*x3*x6 + 2*x4*x7 + 2*x5*x8 + 2*x6*x9 + 2*x7*x10 + 2*x8*x11 + 2*x9*x12 + 2147483646*x3");
	polkatsura 12.emplace_back("x2^2 + 2*x1*x3 + 2*x0*x4 + 2*x1*x5 + 2*x2*x6 + 2*x3*x7 + 2*x4*x8 + 2*x5*x9 + 2*x6*x10 + 2*x7*x11 + 2*x8*x12 + 2147483646*x4");
	polkatsura 12.emplace_back("2*x2*x3 + 2*x1*x4 + 2*x0*x5 + 2*x1*x6 + 2*x2*x7 + 2*x3*x8 + 2*x4*x9 + 2*x5*x10 + 2*x6*x11 + 2*x7*x12 + 2147483646*x5");
	polkatsura 12.emplace_back("x3^2 + 2*x2*x4 + 2*x1*x5 + 2*x0*x6 + 2*x1*x7 + 2*x2*x8 + 2*x3*x9 + 2*x4*x10 + 2*x5*x11 + 2*x6*x12 + 2147483646*x6");
	polkatsura 12.emplace_back("2*x3*x4 + 2*x2*x5 + 2*x1*x6 + 2*x0*x7 + 2*x1*x8 + 2*x2*x9 + 2*x3*x10 + 2*x4*x11 + 2*x5*x12 + 2147483646*x7");
	polkatsura 12.emplace_back("x4^2 + 2*x3*x5 + 2*x2*x6 + 2*x1*x7 + 2*x0*x8 + 2*x1*x9 + 2*x2*x10 + 2*x3*x11 + 2*x4*x12 + 2147483646*x8");
	polkatsura 12.emplace_back("2*x4*x5 + 2*x3*x6 + 2*x2*x7 + 2*x1*x8 + 2*x0*x9 + 2*x1*x10 + 2*x2*x11 + 2*x3*x12 + 2147483646*x9");
	polkatsura 12.emplace_back("x5^2 + 2*x4*x6 + 2*x3*x7 + 2*x2*x8 + 2*x1*x9 + 2*x0*x10 + 2*x1*x11 + 2*x2*x12 + 2147483646*x10");
	polkatsura 12.emplace_back("2*x5*x6 + 2*x4*x7 + 2*x3*x8 + 2*x2*x9 + 2*x1*x10 + 2*x0*x11 + 2*x1*x12 + 2147483646*x11");
	polkatsura 12.emplace_back("x0 + 2*x1 + 2*x2 + 2*x3 + 2*x4 + 2*x5 + 2*x6 + 2*x7 + 2*x8 + 2*x9 + 2*x10 + 2*x11 + 2*x12 + 2147483646");
	////////////


    Ideal<eltType> katsura 12(polkatsura 12, 13, 1000000);
    nbGen=katsura 12.f4();
    if(magma)
    {
        katsura 12.printReducedGroebnerBasis("KATSURA 12", modulo);
    }
    return nbGen;
}


int eco 11F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         ECO 11                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(11);
    vector<Polynomial<eltType>> poleco 11;
    
	////////////
	//		ECO 11		//
	// 11 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10]
	poleco 11.emplace_back("x0*x1*x10 + x1*x2*x10 + x2*x3*x10 + x3*x4*x10 + x4*x5*x10 + x5*x6*x10 + x6*x7*x10 + x7*x8*x10 + x8*x9*x10 + x0*x10 + 2147483646");
	poleco 11.emplace_back("x0*x2*x10 + x1*x3*x10 + x2*x4*x10 + x3*x5*x10 + x4*x6*x10 + x5*x7*x10 + x6*x8*x10 + x7*x9*x10 + x1*x10 + 2147483645");
	poleco 11.emplace_back("x0*x3*x10 + x1*x4*x10 + x2*x5*x10 + x3*x6*x10 + x4*x7*x10 + x5*x8*x10 + x6*x9*x10 + x2*x10 + 2147483644");
	poleco 11.emplace_back("x0*x4*x10 + x1*x5*x10 + x2*x6*x10 + x3*x7*x10 + x4*x8*x10 + x5*x9*x10 + x3*x10 + 2147483643");
	poleco 11.emplace_back("x0*x5*x10 + x1*x6*x10 + x2*x7*x10 + x3*x8*x10 + x4*x9*x10 + x4*x10 + 2147483642");
	poleco 11.emplace_back("x0*x6*x10 + x1*x7*x10 + x2*x8*x10 + x3*x9*x10 + x5*x10 + 2147483641");
	poleco 11.emplace_back("x0*x7*x10 + x1*x8*x10 + x2*x9*x10 + x6*x10 + 2147483640");
	poleco 11.emplace_back("x0*x8*x10 + x1*x9*x10 + x7*x10 + 2147483639");
	poleco 11.emplace_back("x0*x9*x10 + x8*x10 + 2147483638");
	poleco 11.emplace_back("x9*x10 + 2147483637");
	poleco 11.emplace_back("x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + 1");
	////////////


    Ideal<eltType> eco 11(poleco 11, 11, 1000000);
    nbGen=eco 11.f4();
    if(magma)
    {
        eco 11.printReducedGroebnerBasis("ECO 11", modulo);
    }
    return nbGen;
}


int eco 12F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         ECO 12                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(12);
    vector<Polynomial<eltType>> poleco 12;
    
	////////////
	//		ECO 12		//
	// 12 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11]
	poleco 12.emplace_back("x0*x1*x11 + x1*x2*x11 + x2*x3*x11 + x3*x4*x11 + x4*x5*x11 + x5*x6*x11 + x6*x7*x11 + x7*x8*x11 + x8*x9*x11 + x9*x10*x11 + x0*x11 + 2147483646");
	poleco 12.emplace_back("x0*x2*x11 + x1*x3*x11 + x2*x4*x11 + x3*x5*x11 + x4*x6*x11 + x5*x7*x11 + x6*x8*x11 + x7*x9*x11 + x8*x10*x11 + x1*x11 + 2147483645");
	poleco 12.emplace_back("x0*x3*x11 + x1*x4*x11 + x2*x5*x11 + x3*x6*x11 + x4*x7*x11 + x5*x8*x11 + x6*x9*x11 + x7*x10*x11 + x2*x11 + 2147483644");
	poleco 12.emplace_back("x0*x4*x11 + x1*x5*x11 + x2*x6*x11 + x3*x7*x11 + x4*x8*x11 + x5*x9*x11 + x6*x10*x11 + x3*x11 + 2147483643");
	poleco 12.emplace_back("x0*x5*x11 + x1*x6*x11 + x2*x7*x11 + x3*x8*x11 + x4*x9*x11 + x5*x10*x11 + x4*x11 + 2147483642");
	poleco 12.emplace_back("x0*x6*x11 + x1*x7*x11 + x2*x8*x11 + x3*x9*x11 + x4*x10*x11 + x5*x11 + 2147483641");
	poleco 12.emplace_back("x0*x7*x11 + x1*x8*x11 + x2*x9*x11 + x3*x10*x11 + x6*x11 + 2147483640");
	poleco 12.emplace_back("x0*x8*x11 + x1*x9*x11 + x2*x10*x11 + x7*x11 + 2147483639");
	poleco 12.emplace_back("x0*x9*x11 + x1*x10*x11 + x8*x11 + 2147483638");
	poleco 12.emplace_back("x0*x10*x11 + x9*x11 + 2147483637");
	poleco 12.emplace_back("x10*x11 + 2147483636");
	poleco 12.emplace_back("x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + 1");
	////////////


    Ideal<eltType> eco 12(poleco 12, 12, 1000000);
    nbGen=eco 12.f4();
    if(magma)
    {
        eco 12.printReducedGroebnerBasis("ECO 12", modulo);
    }
    return nbGen;
}


int eco 13F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         ECO 13                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(13);
    vector<Polynomial<eltType>> poleco 13;
    
	////////////
	//		ECO 13		//
	// 13 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12]
	poleco 13.emplace_back("x0*x1*x12 + x1*x2*x12 + x2*x3*x12 + x3*x4*x12 + x4*x5*x12 + x5*x6*x12 + x6*x7*x12 + x7*x8*x12 + x8*x9*x12 + x9*x10*x12 + x10*x11*x12 + x0*x12 + 2147483646");
	poleco 13.emplace_back("x0*x2*x12 + x1*x3*x12 + x2*x4*x12 + x3*x5*x12 + x4*x6*x12 + x5*x7*x12 + x6*x8*x12 + x7*x9*x12 + x8*x10*x12 + x9*x11*x12 + x1*x12 + 2147483645");
	poleco 13.emplace_back("x0*x3*x12 + x1*x4*x12 + x2*x5*x12 + x3*x6*x12 + x4*x7*x12 + x5*x8*x12 + x6*x9*x12 + x7*x10*x12 + x8*x11*x12 + x2*x12 + 2147483644");
	poleco 13.emplace_back("x0*x4*x12 + x1*x5*x12 + x2*x6*x12 + x3*x7*x12 + x4*x8*x12 + x5*x9*x12 + x6*x10*x12 + x7*x11*x12 + x3*x12 + 2147483643");
	poleco 13.emplace_back("x0*x5*x12 + x1*x6*x12 + x2*x7*x12 + x3*x8*x12 + x4*x9*x12 + x5*x10*x12 + x6*x11*x12 + x4*x12 + 2147483642");
	poleco 13.emplace_back("x0*x6*x12 + x1*x7*x12 + x2*x8*x12 + x3*x9*x12 + x4*x10*x12 + x5*x11*x12 + x5*x12 + 2147483641");
	poleco 13.emplace_back("x0*x7*x12 + x1*x8*x12 + x2*x9*x12 + x3*x10*x12 + x4*x11*x12 + x6*x12 + 2147483640");
	poleco 13.emplace_back("x0*x8*x12 + x1*x9*x12 + x2*x10*x12 + x3*x11*x12 + x7*x12 + 2147483639");
	poleco 13.emplace_back("x0*x9*x12 + x1*x10*x12 + x2*x11*x12 + x8*x12 + 2147483638");
	poleco 13.emplace_back("x0*x10*x12 + x1*x11*x12 + x9*x12 + 2147483637");
	poleco 13.emplace_back("x0*x11*x12 + x10*x12 + 2147483636");
	poleco 13.emplace_back("x11*x12 + 2147483635");
	poleco 13.emplace_back("x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + 1");
	////////////


    Ideal<eltType> eco 13(poleco 13, 13, 1000000);
    nbGen=eco 13.f4();
    if(magma)
    {
        eco 13.printReducedGroebnerBasis("ECO 13", modulo);
    }
    return nbGen;
}


int noon 7F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         NOON 7                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(7);
    vector<Polynomial<eltType>> polnoon 7;
    
	////////////
	//		NOON 7		//
	// 7 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6]
	polnoon 7.emplace_back("10*x0*x1^2 + 10*x0*x2^2 + 10*x0*x3^2 + 10*x0*x4^2 + 10*x0*x5^2 + 10*x0*x6^2 + 2147483636*x0 + 10");
	polnoon 7.emplace_back("10*x0^2*x1 + 10*x1*x2^2 + 10*x1*x3^2 + 10*x1*x4^2 + 10*x1*x5^2 + 10*x1*x6^2 + 2147483636*x1 + 10");
	polnoon 7.emplace_back("10*x0^2*x2 + 10*x1^2*x2 + 10*x2*x3^2 + 10*x2*x4^2 + 10*x2*x5^2 + 10*x2*x6^2 + 2147483636*x2 + 10");
	polnoon 7.emplace_back("10*x0^2*x3 + 10*x1^2*x3 + 10*x2^2*x3 + 10*x3*x4^2 + 10*x3*x5^2 + 10*x3*x6^2 + 2147483636*x3 + 10");
	polnoon 7.emplace_back("10*x0^2*x4 + 10*x1^2*x4 + 10*x2^2*x4 + 10*x3^2*x4 + 10*x4*x5^2 + 10*x4*x6^2 + 2147483636*x4 + 10");
	polnoon 7.emplace_back("10*x0^2*x5 + 10*x1^2*x5 + 10*x2^2*x5 + 10*x3^2*x5 + 10*x4^2*x5 + 10*x5*x6^2 + 2147483636*x5 + 10");
	polnoon 7.emplace_back("10*x0^2*x6 + 10*x1^2*x6 + 10*x2^2*x6 + 10*x3^2*x6 + 10*x4^2*x6 + 10*x5^2*x6 + 2147483636*x6 + 10");
	////////////


    Ideal<eltType> noon 7(polnoon 7, 7, 1000000);
    nbGen=noon 7.f4();
    if(magma)
    {
        noon 7.printReducedGroebnerBasis("NOON 7", modulo);
    }
    return nbGen;
}


int noon 8F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         NOON 8                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(8);
    vector<Polynomial<eltType>> polnoon 8;
    
	////////////
	//		NOON 8		//
	// 8 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6, x7]
	polnoon 8.emplace_back("10*x0*x1^2 + 10*x0*x2^2 + 10*x0*x3^2 + 10*x0*x4^2 + 10*x0*x5^2 + 10*x0*x6^2 + 10*x0*x7^2 + 2147483636*x0 + 10");
	polnoon 8.emplace_back("10*x0^2*x1 + 10*x1*x2^2 + 10*x1*x3^2 + 10*x1*x4^2 + 10*x1*x5^2 + 10*x1*x6^2 + 10*x1*x7^2 + 2147483636*x1 + 10");
	polnoon 8.emplace_back("10*x0^2*x2 + 10*x1^2*x2 + 10*x2*x3^2 + 10*x2*x4^2 + 10*x2*x5^2 + 10*x2*x6^2 + 10*x2*x7^2 + 2147483636*x2 + 10");
	polnoon 8.emplace_back("10*x0^2*x3 + 10*x1^2*x3 + 10*x2^2*x3 + 10*x3*x4^2 + 10*x3*x5^2 + 10*x3*x6^2 + 10*x3*x7^2 + 2147483636*x3 + 10");
	polnoon 8.emplace_back("10*x0^2*x4 + 10*x1^2*x4 + 10*x2^2*x4 + 10*x3^2*x4 + 10*x4*x5^2 + 10*x4*x6^2 + 10*x4*x7^2 + 2147483636*x4 + 10");
	polnoon 8.emplace_back("10*x0^2*x5 + 10*x1^2*x5 + 10*x2^2*x5 + 10*x3^2*x5 + 10*x4^2*x5 + 10*x5*x6^2 + 10*x5*x7^2 + 2147483636*x5 + 10");
	polnoon 8.emplace_back("10*x0^2*x6 + 10*x1^2*x6 + 10*x2^2*x6 + 10*x3^2*x6 + 10*x4^2*x6 + 10*x5^2*x6 + 10*x6*x7^2 + 2147483636*x6 + 10");
	polnoon 8.emplace_back("10*x0^2*x7 + 10*x1^2*x7 + 10*x2^2*x7 + 10*x3^2*x7 + 10*x4^2*x7 + 10*x5^2*x7 + 10*x6^2*x7 + 2147483636*x7 + 10");
	////////////


    Ideal<eltType> noon 8(polnoon 8, 8, 1000000);
    nbGen=noon 8.f4();
    if(magma)
    {
        noon 8.printReducedGroebnerBasis("NOON 8", modulo);
    }
    return nbGen;
}


int noon 9F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         NOON 9                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(9);
    vector<Polynomial<eltType>> polnoon 9;
    
	////////////
	//		NOON 9		//
	// 9 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6, x7, x8]
	polnoon 9.emplace_back("10*x0*x1^2 + 10*x0*x2^2 + 10*x0*x3^2 + 10*x0*x4^2 + 10*x0*x5^2 + 10*x0*x6^2 + 10*x0*x7^2 + 10*x0*x8^2 + 2147483636*x0 + 10");
	polnoon 9.emplace_back("10*x0^2*x1 + 10*x1*x2^2 + 10*x1*x3^2 + 10*x1*x4^2 + 10*x1*x5^2 + 10*x1*x6^2 + 10*x1*x7^2 + 10*x1*x8^2 + 2147483636*x1 + 10");
	polnoon 9.emplace_back("10*x0^2*x2 + 10*x1^2*x2 + 10*x2*x3^2 + 10*x2*x4^2 + 10*x2*x5^2 + 10*x2*x6^2 + 10*x2*x7^2 + 10*x2*x8^2 + 2147483636*x2 + 10");
	polnoon 9.emplace_back("10*x0^2*x3 + 10*x1^2*x3 + 10*x2^2*x3 + 10*x3*x4^2 + 10*x3*x5^2 + 10*x3*x6^2 + 10*x3*x7^2 + 10*x3*x8^2 + 2147483636*x3 + 10");
	polnoon 9.emplace_back("10*x0^2*x4 + 10*x1^2*x4 + 10*x2^2*x4 + 10*x3^2*x4 + 10*x4*x5^2 + 10*x4*x6^2 + 10*x4*x7^2 + 10*x4*x8^2 + 2147483636*x4 + 10");
	polnoon 9.emplace_back("10*x0^2*x5 + 10*x1^2*x5 + 10*x2^2*x5 + 10*x3^2*x5 + 10*x4^2*x5 + 10*x5*x6^2 + 10*x5*x7^2 + 10*x5*x8^2 + 2147483636*x5 + 10");
	polnoon 9.emplace_back("10*x0^2*x6 + 10*x1^2*x6 + 10*x2^2*x6 + 10*x3^2*x6 + 10*x4^2*x6 + 10*x5^2*x6 + 10*x6*x7^2 + 10*x6*x8^2 + 2147483636*x6 + 10");
	polnoon 9.emplace_back("10*x0^2*x7 + 10*x1^2*x7 + 10*x2^2*x7 + 10*x3^2*x7 + 10*x4^2*x7 + 10*x5^2*x7 + 10*x6^2*x7 + 10*x7*x8^2 + 2147483636*x7 + 10");
	polnoon 9.emplace_back("10*x0^2*x8 + 10*x1^2*x8 + 10*x2^2*x8 + 10*x3^2*x8 + 10*x4^2*x8 + 10*x5^2*x8 + 10*x6^2*x8 + 10*x7^2*x8 + 2147483636*x8 + 10");
	////////////


    Ideal<eltType> noon 9(polnoon 9, 9, 1000000);
    nbGen=noon 9.f4();
    if(magma)
    {
        noon 9.printReducedGroebnerBasis("NOON 9", modulo);
    }
    return nbGen;
}


int henrion 5F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         HENRION 5                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(6);
    vector<Polynomial<eltType>> polhenrion 5;
    
	////////////
	//		HENRION 5		//
	// 6 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5]
	polhenrion 5.emplace_back("2*x0*x1*x2*x3*x4 + 2137660372");
	polhenrion 5.emplace_back("5*x0*x1*x2*x3 + 1288490193*x0*x1*x2*x4 + 858993463*x0*x1*x3*x4 + 858993462*x0*x2*x3*x4 + 1288490190*x1*x2*x3*x4 + 2143018522");
	polhenrion 5.emplace_back("4*x0*x1*x2 + 6*x0*x1*x3 + 6*x0*x2*x3 + 4*x1*x2*x3 + 429496733*x0*x1*x4 + 1288490193*x0*x2*x4 + 429496733*x1*x2*x4 + 1288490191*x0*x3*x4 + 1288490191*x1*x3*x4 + 429496731*x2*x3*x4 + 2147042161");
	polhenrion 5.emplace_back("3*x0*x1 + 4*x0*x2 + 3*x1*x2 + 4*x0*x3 + 4*x1*x3 + 3*x2*x3 + 1717986920*x0*x4 + 1717986920*x1*x4 + 1717986920*x2*x4 + 1717986919*x3*x4 + 2147468149");
	polhenrion 5.emplace_back("2*x0 + 2*x1 + 2*x2 + 2*x3 + 858993460*x4 + 2147483432");
	polhenrion 5.emplace_back("x0 + 2*x1 + 3*x2 + 4*x3 + 5*x4 + 6*x5");
	////////////


    Ideal<eltType> henrion 5(polhenrion 5, 6, 1000000);
    nbGen=henrion 5.f4();
    if(magma)
    {
        henrion 5.printReducedGroebnerBasis("HENRION 5", modulo);
    }
    return nbGen;
}


int henrion 6F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         HENRION 6                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(6);
    vector<Polynomial<eltType>> polhenrion 6;
    
	////////////
	//		HENRION 6		//
	// 6 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5]
	polhenrion 6.emplace_back("2*x0*x1*x2*x3*x4*x5 + 742755322");
	polhenrion 6.emplace_back("6*x0*x1*x2*x3*x4 + 357913947*x0*x1*x2*x3*x5 + 1431655770*x0*x1*x2*x4*x5 + 1073741828*x0*x1*x3*x4*x5 + 1431655768*x0*x2*x3*x4*x5 + 357913943*x1*x2*x3*x4*x5 + 1499147497");
	polhenrion 6.emplace_back("5*x0*x1*x2*x3 + 8*x0*x1*x2*x4 + 9*x0*x1*x3*x4 + 8*x0*x2*x3*x4 + 5*x1*x2*x3*x4 + 715827887*x0*x1*x2*x5 + 7*x0*x1*x3*x5 + 7*x0*x2*x3*x5 + 715827887*x1*x2*x3*x5 + 4*x0*x1*x4*x5 + 1431655770*x0*x2*x4*x5 + 4*x1*x2*x4*x5 + 3*x0*x3*x4*x5 + 3*x1*x3*x4*x5 + 715827884*x2*x3*x4*x5 + 2079886024");
	polhenrion 6.emplace_back("4*x0*x1*x2 + 6*x0*x1*x3 + 6*x0*x2*x3 + 4*x1*x2*x3 + 6*x0*x1*x4 + 8*x0*x2*x4 + 6*x1*x2*x4 + 6*x0*x3*x4 + 6*x1*x3*x4 + 4*x2*x3*x4 + 1073741827*x0*x1*x5 + 715827887*x0*x2*x5 + 1073741827*x1*x2*x5 + 715827887*x0*x3*x5 + 715827887*x1*x3*x5 + 1073741827*x2*x3*x5 + 715827885*x0*x4*x5 + 715827885*x1*x4*x5 + 715827885*x2*x4*x5 + 1073741825*x3*x4*x5 + 2144825947");
	polhenrion 6.emplace_back("3*x0*x1 + 4*x0*x2 + 3*x1*x2 + 4*x0*x3 + 4*x1*x3 + 3*x2*x3 + 4*x0*x4 + 4*x1*x4 + 4*x2*x4 + 3*x3*x4 + 1431655767*x0*x5 + 1431655767*x1*x5 + 1431655767*x2*x5 + 1431655767*x3*x5 + 1431655766*x4*x5 + 2147437404");
	polhenrion 6.emplace_back("2*x0 + 2*x1 + 2*x2 + 2*x3 + 2*x4 + 1789569707*x5 + 2147483289");
	////////////


    Ideal<eltType> henrion 6(polhenrion 6, 6, 1000000);
    nbGen=henrion 6.f4();
    if(magma)
    {
        henrion 6.printReducedGroebnerBasis("HENRION 6", modulo);
    }
    return nbGen;
}


int henrion 7F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         HENRION 7                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(7);
    vector<Polynomial<eltType>> polhenrion 7;
    
	////////////
	//		HENRION 7		//
	// 7 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6]
	polhenrion 7.emplace_back("2*x0*x1*x2*x3*x4*x5*x6 + 955883441");
	polhenrion 7.emplace_back("7*x0*x1*x2*x3*x4*x5 + 306783385*x0*x1*x2*x3*x4*x6 + 1227133519*x0*x1*x2*x3*x5*x6 + 613566762*x0*x1*x2*x4*x5*x6 + 613566761*x0*x1*x3*x4*x5*x6 + 1227133516*x0*x2*x3*x4*x5*x6 + 306783380*x1*x2*x3*x4*x5*x6 + 1018741245");
	polhenrion 7.emplace_back("6*x0*x1*x2*x3*x4 + 10*x0*x1*x2*x3*x5 + 12*x0*x1*x2*x4*x5 + 12*x0*x1*x3*x4*x5 + 10*x0*x2*x3*x4*x5 + 6*x1*x2*x3*x4*x5 + 613566762*x0*x1*x2*x3*x6 + 1840700278*x0*x1*x2*x4*x6 + 1533916901*x0*x1*x3*x4*x6 + 1840700278*x0*x2*x3*x4*x6 + 613566762*x1*x2*x3*x4*x6 + 1840700274*x0*x1*x2*x5*x6 + 613566764*x0*x1*x3*x5*x6 + 613566764*x0*x2*x3*x5*x6 + 1840700274*x1*x2*x3*x5*x6 + 1533916895*x0*x1*x4*x5*x6 + 613566762*x0*x2*x4*x5*x6 + 1533916895*x1*x2*x4*x5*x6 + 1840700272*x0*x3*x4*x5*x6 + 1840700272*x1*x3*x4*x5*x6 + 613566758*x2*x3*x4*x5*x6 + 1202512894");
	polhenrion 7.emplace_back("5*x0*x1*x2*x3 + 8*x0*x1*x2*x4 + 9*x0*x1*x3*x4 + 8*x0*x2*x3*x4 + 5*x1*x2*x3*x4 + 8*x0*x1*x2*x5 + 12*x0*x1*x3*x5 + 12*x0*x2*x3*x5 + 8*x1*x2*x3*x5 + 9*x0*x1*x4*x5 + 12*x0*x2*x4*x5 + 9*x1*x2*x4*x5 + 8*x0*x3*x4*x5 + 8*x1*x3*x4*x5 + 5*x2*x3*x4*x5 + 920350139*x0*x1*x2*x6 + 306783385*x0*x1*x3*x6 + 306783385*x0*x2*x3*x6 + 920350139*x1*x2*x3*x6 + 306783385*x0*x1*x4*x6 + 1840700278*x0*x2*x4*x6 + 306783385*x1*x2*x4*x6 + 306783385*x0*x3*x4*x6 + 306783385*x1*x3*x4*x6 + 920350139*x2*x3*x4*x6 + 306783382*x0*x1*x5*x6 + 1840700274*x0*x2*x5*x6 + 306783382*x1*x2*x5*x6 + 1840700274*x0*x3*x5*x6 + 1840700274*x1*x3*x5*x6 + 306783382*x2*x3*x5*x6 + 306783381*x0*x4*x5*x6 + 306783381*x1*x4*x5*x6 + 306783381*x2*x4*x5*x6 + 920350136*x3*x4*x5*x6 + 1561634524");
	polhenrion 7.emplace_back("4*x0*x1*x2 + 6*x0*x1*x3 + 6*x0*x2*x3 + 4*x1*x2*x3 + 6*x0*x1*x4 + 8*x0*x2*x4 + 6*x1*x2*x4 + 6*x0*x3*x4 + 6*x1*x3*x4 + 4*x2*x3*x4 + 6*x0*x1*x5 + 8*x0*x2*x5 + 6*x1*x2*x5 + 8*x0*x3*x5 + 8*x1*x3*x5 + 6*x2*x3*x5 + 6*x0*x4*x5 + 6*x1*x4*x5 + 6*x2*x4*x5 + 4*x3*x4*x5 + 1227133516*x0*x1*x6 + 920350139*x0*x2*x6 + 1227133516*x1*x2*x6 + 920350139*x0*x3*x6 + 920350139*x1*x3*x6 + 1227133516*x2*x3*x6 + 920350139*x0*x4*x6 + 920350139*x1*x4*x6 + 920350139*x2*x4*x6 + 1227133516*x3*x4*x6 + 920350137*x0*x5*x6 + 920350137*x1*x5*x6 + 920350137*x2*x5*x6 + 920350137*x3*x5*x6 + 1227133514*x4*x5*x6 + 2135808562");
	polhenrion 7.emplace_back("3*x0*x1 + 4*x0*x2 + 3*x1*x2 + 4*x0*x3 + 4*x1*x3 + 3*x2*x3 + 4*x0*x4 + 4*x1*x4 + 4*x2*x4 + 3*x3*x4 + 4*x0*x5 + 4*x1*x5 + 4*x2*x5 + 4*x3*x5 + 3*x4*x5 + 1533916893*x0*x6 + 1533916893*x1*x6 + 1533916893*x2*x6 + 1533916893*x3*x6 + 1533916893*x4*x6 + 1533916892*x5*x6 + 2147367594");
	polhenrion 7.emplace_back("2*x0 + 2*x1 + 2*x2 + 2*x3 + 2*x4 + 2*x5 + 1840700270*x6 + 2147483094");
	////////////


    Ideal<eltType> henrion 7(polhenrion 7, 7, 1000000);
    nbGen=henrion 7.f4();
    if(magma)
    {
        henrion 7.printReducedGroebnerBasis("HENRION 7", modulo);
    }
    return nbGen;
}


int reimer 6F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         REIMER 6                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(6);
    vector<Polynomial<eltType>> polreimer 6;
    
	////////////
	//		REIMER 6		//
	// 6 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5]
	polreimer 6.emplace_back("2*x0^2 + 2147483645*x1^2 + 2*x2^2 + 2147483645*x3^2 + 2*x4^2 + 2147483645*x5^2 + 2147483646");
	polreimer 6.emplace_back("2*x0^3 + 2147483645*x1^3 + 2*x2^3 + 2147483645*x3^3 + 2*x4^3 + 2147483645*x5^3 + 2147483646");
	polreimer 6.emplace_back("2*x0^4 + 2147483645*x1^4 + 2*x2^4 + 2147483645*x3^4 + 2*x4^4 + 2147483645*x5^4 + 2147483646");
	polreimer 6.emplace_back("2*x0^5 + 2147483645*x1^5 + 2*x2^5 + 2147483645*x3^5 + 2*x4^5 + 2147483645*x5^5 + 2147483646");
	polreimer 6.emplace_back("2*x0^6 + 2147483645*x1^6 + 2*x2^6 + 2147483645*x3^6 + 2*x4^6 + 2147483645*x5^6 + 2147483646");
	polreimer 6.emplace_back("2*x0^7 + 2147483645*x1^7 + 2*x2^7 + 2147483645*x3^7 + 2*x4^7 + 2147483645*x5^7 + 2147483646");
	////////////


    Ideal<eltType> reimer 6(polreimer 6, 6, 1000000);
    nbGen=reimer 6.f4();
    if(magma)
    {
        reimer 6.printReducedGroebnerBasis("REIMER 6", modulo);
    }
    return nbGen;
}


int reimer 7F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         REIMER 7                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(7);
    vector<Polynomial<eltType>> polreimer 7;
    
	////////////
	//		REIMER 7		//
	// 7 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6]
	polreimer 7.emplace_back("2*x0^2 + 2147483645*x1^2 + 2*x2^2 + 2147483645*x3^2 + 2*x4^2 + 2147483645*x5^2 + 2*x6^2 + 2147483646");
	polreimer 7.emplace_back("2*x0^3 + 2147483645*x1^3 + 2*x2^3 + 2147483645*x3^3 + 2*x4^3 + 2147483645*x5^3 + 2*x6^3 + 2147483646");
	polreimer 7.emplace_back("2*x0^4 + 2147483645*x1^4 + 2*x2^4 + 2147483645*x3^4 + 2*x4^4 + 2147483645*x5^4 + 2*x6^4 + 2147483646");
	polreimer 7.emplace_back("2*x0^5 + 2147483645*x1^5 + 2*x2^5 + 2147483645*x3^5 + 2*x4^5 + 2147483645*x5^5 + 2*x6^5 + 2147483646");
	polreimer 7.emplace_back("2*x0^6 + 2147483645*x1^6 + 2*x2^6 + 2147483645*x3^6 + 2*x4^6 + 2147483645*x5^6 + 2*x6^6 + 2147483646");
	polreimer 7.emplace_back("2*x0^7 + 2147483645*x1^7 + 2*x2^7 + 2147483645*x3^7 + 2*x4^7 + 2147483645*x5^7 + 2*x6^7 + 2147483646");
	polreimer 7.emplace_back("2*x0^8 + 2147483645*x1^8 + 2*x2^8 + 2147483645*x3^8 + 2*x4^8 + 2147483645*x5^8 + 2*x6^8 + 2147483646");
	////////////


    Ideal<eltType> reimer 7(polreimer 7, 7, 1000000);
    nbGen=reimer 7.f4();
    if(magma)
    {
        reimer 7.printReducedGroebnerBasis("REIMER 7", modulo);
    }
    return nbGen;
}


int reimer 8F4(bool magma)
{
    cout << "#########################################################" << endl;
    cout << "#                         REIMER 8                        #" << endl;
    cout << "#########################################################" << endl << endl;
    eltType::setModulo(modulo);
    int nbGen;
    Monomial::initMonomial(8);
    vector<Polynomial<eltType>> polreimer 8;
    
	////////////
	//		REIMER 8		//
	// 8 vars: AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}[x0, x1, x2, x3, x4, x5, x6, x7]
	polreimer 8.emplace_back("2*x0^2 + 2147483645*x1^2 + 2*x2^2 + 2147483645*x3^2 + 2*x4^2 + 2147483645*x5^2 + 2*x6^2 + 2147483645*x7^2 + 2147483646");
	polreimer 8.emplace_back("2*x0^3 + 2147483645*x1^3 + 2*x2^3 + 2147483645*x3^3 + 2*x4^3 + 2147483645*x5^3 + 2*x6^3 + 2147483645*x7^3 + 2147483646");
	polreimer 8.emplace_back("2*x0^4 + 2147483645*x1^4 + 2*x2^4 + 2147483645*x3^4 + 2*x4^4 + 2147483645*x5^4 + 2*x6^4 + 2147483645*x7^4 + 2147483646");
	polreimer 8.emplace_back("2*x0^5 + 2147483645*x1^5 + 2*x2^5 + 2147483645*x3^5 + 2*x4^5 + 2147483645*x5^5 + 2*x6^5 + 2147483645*x7^5 + 2147483646");
	polreimer 8.emplace_back("2*x0^6 + 2147483645*x1^6 + 2*x2^6 + 2147483645*x3^6 + 2*x4^6 + 2147483645*x5^6 + 2*x6^6 + 2147483645*x7^6 + 2147483646");
	polreimer 8.emplace_back("2*x0^7 + 2147483645*x1^7 + 2*x2^7 + 2147483645*x3^7 + 2*x4^7 + 2147483645*x5^7 + 2*x6^7 + 2147483645*x7^7 + 2147483646");
	polreimer 8.emplace_back("2*x0^8 + 2147483645*x1^8 + 2*x2^8 + 2147483645*x3^8 + 2*x4^8 + 2147483645*x5^8 + 2*x6^8 + 2147483645*x7^8 + 2147483646");
	polreimer 8.emplace_back("2*x0^9 + 2147483645*x1^9 + 2*x2^9 + 2147483645*x3^9 + 2*x4^9 + 2147483645*x5^9 + 2*x6^9 + 2147483645*x7^9 + 2147483646");
	////////////


    Ideal<eltType> reimer 8(polreimer 8, 8, 1000000);
    nbGen=reimer 8.f4();
    if(magma)
    {
        reimer 8.printReducedGroebnerBasis("REIMER 8", modulo);
    }
    return nbGen;
}

