pax_global_header00006660000000000000000000000064140152716420014514gustar00rootroot0000000000000052 comment=cbda56e8bb0d706f8cd7e6594a8a034797f53eb5 frobby-0.9.5/000077500000000000000000000000001401527164200130125ustar00rootroot00000000000000frobby-0.9.5/.depend000066400000000000000000001027231401527164200142570ustar00rootroot00000000000000$(outdir)main.o: src/main.cpp src/stdinc.h src/main.h src/Action.h \ src/BoolParameter.h src/Parameter.h src/DebugAllocator.h src/error.h $(outdir)Action.o: src/Action.cpp src/stdinc.h src/Action.h src/BoolParameter.h \ src/Parameter.h src/error.h src/NameFactory.h \ src/IrreducibleDecomAction.h src/IOParameters.h src/ParameterGroup.h \ src/StringParameter.h src/IOHandler.h src/SliceParameters.h \ src/TransformAction.h src/HelpAction.h src/DynamicFrobeniusAction.h \ src/GenerateIdealAction.h src/IntegerParameter.h \ src/GenerateFrobeniusAction.h src/FrobeniusAction.h src/AnalyzeAction.h \ src/LatticeFormatAction.h src/IntersectionAction.h \ src/AssociatedPrimesAction.h src/AlexanderDualAction.h \ src/HilbertAction.h src/PolyTransformAction.h src/TestAction.h \ src/PrimaryDecomAction.h src/OptimizeAction.h \ src/MaximalStandardAction.h $(outdir)IOParameters.o: src/IOParameters.cpp src/stdinc.h src/IOParameters.h \ src/ParameterGroup.h src/Parameter.h src/StringParameter.h \ src/IOHandler.h src/IOFacade.h src/Facade.h src/Timer.h \ src/MonosIOHandler.h src/IOHandlerCommon.h src/Scanner.h src/error.h \ src/FrobbyStringStream.h src/DataType.h $(outdir)IrreducibleDecomAction.o: src/IrreducibleDecomAction.cpp src/stdinc.h \ src/IrreducibleDecomAction.h src/Action.h src/BoolParameter.h \ src/Parameter.h src/IOParameters.h src/ParameterGroup.h \ src/StringParameter.h src/IOHandler.h src/SliceParameters.h \ src/BigIdeal.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/SliceFacade.h \ src/SplitStrategy.h src/Ideal.h src/TermTranslator.h src/Facade.h \ src/Timer.h src/TermConsumer.h src/CoefTermConsumer.h src/IOFacade.h \ src/Scanner.h src/DataType.h $(outdir)fplllIO.o: src/fplllIO.cpp src/stdinc.h src/fplllIO.h src/BigIdeal.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h src/Scanner.h src/error.h \ src/FrobbyStringStream.h $(outdir)IOHandler.o: src/IOHandler.cpp src/stdinc.h src/IOHandler.h src/Scanner.h \ src/BigIdeal.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/TermTranslator.h \ src/Ideal.h src/Term.h src/TermConsumer.h src/CoefTermConsumer.h \ src/Polynomial.h src/BigPolynomial.h src/NameFactory.h src/error.h \ src/FrobbyStringStream.h src/ElementDeleter.h src/BigTermConsumer.h \ src/BigTermRecorder.h src/TranslatingTermConsumer.h \ src/IrreducibleIdealSplitter.h src/DataType.h src/IdealConsolidator.h \ src/CoefBigTermConsumer.h src/TranslatingCoefTermConsumer.h \ src/NewMonosIOHandler.h src/MonosIOHandler.h src/IOHandlerCommon.h \ src/Macaulay2IOHandler.h src/Fourti2IOHandler.h src/NullIOHandler.h \ src/CoCoA4IOHandler.h src/SingularIOHandler.h $(outdir)fourti2.o: src/fourti2.cpp src/stdinc.h src/fourti2.h src/BigIdeal.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h src/Scanner.h src/IOHandler.h src/error.h $(outdir)randomDataGenerators.o: src/randomDataGenerators.cpp src/stdinc.h \ src/randomDataGenerators.h src/BigIdeal.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/Ideal.h src/Term.h src/error.h src/FrobbyStringStream.h $(outdir)MonosIOHandler.o: src/MonosIOHandler.cpp src/stdinc.h \ src/MonosIOHandler.h src/IOHandlerCommon.h src/IOHandler.h \ src/BigIdeal.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/Scanner.h \ src/error.h src/BigTermConsumer.h src/TermConsumer.h src/DataType.h $(outdir)BigIdeal.o: src/BigIdeal.cpp src/stdinc.h src/BigIdeal.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/TermTranslator.h src/Ideal.h src/VarSorter.h src/Term.h $(outdir)TransformAction.o: src/TransformAction.cpp src/stdinc.h \ src/TransformAction.h src/Action.h src/BoolParameter.h src/Parameter.h \ src/IOParameters.h src/ParameterGroup.h src/StringParameter.h \ src/IOHandler.h src/BigIdeal.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/IOFacade.h \ src/Facade.h src/Timer.h src/IdealFacade.h src/Scanner.h \ src/ElementDeleter.h src/VarSorter.h src/Term.h src/DataType.h $(outdir)Macaulay2IOHandler.o: src/Macaulay2IOHandler.cpp src/stdinc.h \ src/Macaulay2IOHandler.h src/IOHandlerCommon.h src/IOHandler.h \ src/Scanner.h src/BigIdeal.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/BigPolynomial.h \ src/TermTranslator.h src/BigTermConsumer.h src/TermConsumer.h \ src/error.h src/DataType.h src/CoefBigTermConsumer.h \ src/CoefTermConsumer.h $(outdir)NewMonosIOHandler.o: src/NewMonosIOHandler.cpp src/stdinc.h \ src/NewMonosIOHandler.h src/IOHandler.h src/Scanner.h src/BigIdeal.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h src/error.h src/BigTermConsumer.h \ src/TermConsumer.h src/DataType.h $(outdir)HelpAction.o: src/HelpAction.cpp src/stdinc.h src/HelpAction.h \ src/Action.h src/BoolParameter.h src/Parameter.h src/IOHandler.h \ src/error.h src/DataType.h $(outdir)DynamicFrobeniusAction.o: src/DynamicFrobeniusAction.cpp src/stdinc.h \ src/DynamicFrobeniusAction.h src/Action.h src/BoolParameter.h \ src/Parameter.h src/IOFacade.h src/Facade.h src/Timer.h \ src/DynamicFrobeniusFacade.h src/Scanner.h $(outdir)dynamicFrobeniusAlgorithm.o: src/dynamicFrobeniusAlgorithm.cpp \ src/stdinc.h src/dynamicFrobeniusAlgorithm.h $(outdir)GenerateIdealAction.o: src/GenerateIdealAction.cpp src/stdinc.h \ src/GenerateIdealAction.h src/Action.h src/BoolParameter.h \ src/Parameter.h src/StringParameter.h src/IntegerParameter.h \ src/IOParameters.h src/ParameterGroup.h src/IOHandler.h src/BigIdeal.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h src/GenerateDataFacade.h src/Facade.h \ src/Timer.h src/IOFacade.h src/error.h src/DataType.h $(outdir)GenerateFrobeniusAction.o: src/GenerateFrobeniusAction.cpp src/stdinc.h \ src/GenerateFrobeniusAction.h src/Action.h src/BoolParameter.h \ src/Parameter.h src/BigIdeal.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/GenerateDataFacade.h src/Facade.h src/Timer.h src/IOFacade.h $(outdir)intersect.o: src/intersect.cpp src/stdinc.h src/intersect.h src/Ideal.h \ src/Term.h $(outdir)FrobeniusAction.o: src/FrobeniusAction.cpp src/stdinc.h \ src/FrobeniusAction.h src/Action.h src/BoolParameter.h src/Parameter.h \ src/SliceParameters.h src/ParameterGroup.h src/StringParameter.h \ src/BigIdeal.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/IOFacade.h \ src/Facade.h src/Timer.h src/SliceFacade.h src/SplitStrategy.h \ src/Ideal.h src/TermTranslator.h src/TermConsumer.h \ src/CoefTermConsumer.h src/BigTermRecorder.h src/BigTermConsumer.h \ src/ElementDeleter.h src/Scanner.h $(outdir)Facade.o: src/Facade.cpp src/stdinc.h src/Facade.h src/Timer.h $(outdir)IOFacade.o: src/IOFacade.cpp src/stdinc.h src/IOFacade.h src/Facade.h \ src/Timer.h src/IOHandler.h src/fourti2.h src/BigIdeal.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/fplllIO.h src/Scanner.h src/ElementDeleter.h src/error.h \ src/FrobbyStringStream.h src/BigTermRecorder.h src/BigTermConsumer.h \ src/TermConsumer.h src/CoefBigTermConsumer.h src/CoefTermConsumer.h \ src/CoefBigTermRecorder.h $(outdir)DynamicFrobeniusFacade.o: src/DynamicFrobeniusFacade.cpp src/stdinc.h \ src/DynamicFrobeniusFacade.h src/Facade.h src/Timer.h \ src/dynamicFrobeniusAlgorithm.h $(outdir)GenerateDataFacade.o: src/GenerateDataFacade.cpp src/stdinc.h \ src/GenerateDataFacade.h src/Facade.h src/Timer.h \ src/randomDataGenerators.h src/error.h $(outdir)AnalyzeAction.o: src/AnalyzeAction.cpp src/stdinc.h src/AnalyzeAction.h \ src/Action.h src/BoolParameter.h src/Parameter.h src/IOParameters.h \ src/ParameterGroup.h src/StringParameter.h src/IOHandler.h \ src/IntegerParameter.h src/BigIdeal.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/IOFacade.h src/Facade.h src/Timer.h src/IdealFacade.h src/Scanner.h \ src/BigTermConsumer.h src/TermConsumer.h src/DataType.h $(outdir)IdealFacade.o: src/IdealFacade.cpp src/stdinc.h src/IdealFacade.h \ src/Facade.h src/Timer.h src/BigIdeal.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/Ideal.h src/TermTranslator.h src/IOHandler.h src/SliceAlgorithm.h \ src/IOFacade.h src/Macaulay2IOHandler.h src/IOHandlerCommon.h \ src/CanonicalCoefTermConsumer.h src/CoefTermConsumer.h src/Polynomial.h \ src/Term.h src/error.h src/FrobbyStringStream.h $(outdir)Parameter.o: src/Parameter.cpp src/stdinc.h src/Parameter.h src/error.h \ src/FrobbyStringStream.h $(outdir)ParameterGroup.o: src/ParameterGroup.cpp src/stdinc.h \ src/ParameterGroup.h src/Parameter.h src/error.h $(outdir)IntegerParameter.o: src/IntegerParameter.cpp src/stdinc.h \ src/IntegerParameter.h src/Parameter.h src/error.h \ src/FrobbyStringStream.h $(outdir)SliceParameters.o: src/SliceParameters.cpp src/stdinc.h \ src/SliceParameters.h src/ParameterGroup.h src/Parameter.h \ src/BoolParameter.h src/StringParameter.h src/SliceFacade.h \ src/SplitStrategy.h src/Ideal.h src/TermTranslator.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/Facade.h src/Timer.h src/TermConsumer.h src/CoefTermConsumer.h \ src/error.h $(outdir)BoolParameter.o: src/BoolParameter.cpp src/stdinc.h src/BoolParameter.h \ src/Parameter.h src/error.h src/FrobbyStringStream.h $(outdir)Scanner.o: src/Scanner.cpp src/stdinc.h src/Scanner.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/IOHandler.h src/error.h src/FrobbyStringStream.h $(outdir)Partition.o: src/Partition.cpp src/stdinc.h src/Partition.h $(outdir)StringParameter.o: src/StringParameter.cpp src/stdinc.h \ src/StringParameter.h src/Parameter.h $(outdir)Term.o: src/Term.cpp src/stdinc.h src/Term.h $(outdir)TermTranslator.o: src/TermTranslator.cpp src/stdinc.h \ src/TermTranslator.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/Term.h src/Ideal.h \ src/BigIdeal.h src/FrobbyStringStream.h src/ElementDeleter.h $(outdir)Timer.o: src/Timer.cpp src/stdinc.h src/Timer.h $(outdir)VarNames.o: src/VarNames.cpp src/stdinc.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/error.h src/FrobbyStringStream.h $(outdir)LatticeFormatAction.o: src/LatticeFormatAction.cpp src/stdinc.h \ src/LatticeFormatAction.h src/Action.h src/BoolParameter.h \ src/Parameter.h src/StringParameter.h src/BigIdeal.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/IOFacade.h src/Facade.h src/Timer.h src/fplllIO.h \ src/LatticeFacade.h src/Scanner.h src/error.h $(outdir)SliceAlgorithm.o: src/SliceAlgorithm.cpp src/stdinc.h \ src/SliceAlgorithm.h src/Slice.h src/Ideal.h src/Term.h \ src/MsmStrategy.h src/SliceStrategyCommon.h src/SliceStrategy.h \ src/SplitStrategy.h src/TermConsumer.h src/IndependenceSplitter.h \ src/Partition.h src/Projection.h src/MsmSlice.h src/HilbertStrategy.h \ src/ElementDeleter.h src/HilbertIndependenceConsumer.h \ src/CoefTermConsumer.h src/SliceEvent.h src/DebugStrategy.h $(outdir)Ideal.o: src/Ideal.cpp src/stdinc.h src/Ideal.h src/Term.h \ src/Minimizer.h $(outdir)IntersectionAction.o: src/IntersectionAction.cpp src/stdinc.h \ src/IntersectionAction.h src/Action.h src/BoolParameter.h \ src/Parameter.h src/IOParameters.h src/ParameterGroup.h \ src/StringParameter.h src/IOHandler.h src/BigIdeal.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/IOFacade.h src/Facade.h src/Timer.h src/IntersectFacade.h \ src/Scanner.h src/IdealFacade.h src/VarSorter.h src/Term.h \ src/ElementDeleter.h src/DataType.h $(outdir)IntersectFacade.o: src/IntersectFacade.cpp src/stdinc.h \ src/IntersectFacade.h src/Facade.h src/Timer.h src/Term.h \ src/BigIdeal.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/Ideal.h \ src/intersect.h src/TermTranslator.h src/ElementDeleter.h $(outdir)AssociatedPrimesAction.o: src/AssociatedPrimesAction.cpp src/stdinc.h \ src/AssociatedPrimesAction.h src/Action.h src/BoolParameter.h \ src/Parameter.h src/IOParameters.h src/ParameterGroup.h \ src/StringParameter.h src/IOHandler.h src/SliceParameters.h \ src/BigIdeal.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/IOFacade.h \ src/Facade.h src/Timer.h src/SliceFacade.h src/SplitStrategy.h \ src/Ideal.h src/TermTranslator.h src/TermConsumer.h \ src/CoefTermConsumer.h src/Scanner.h src/BigTermConsumer.h \ src/DataType.h $(outdir)MsmSlice.o: src/MsmSlice.cpp src/stdinc.h src/MsmSlice.h src/Slice.h \ src/Ideal.h src/Term.h src/TermConsumer.h $(outdir)IndependenceSplitter.o: src/IndependenceSplitter.cpp src/stdinc.h \ src/IndependenceSplitter.h src/Partition.h src/Projection.h src/Ideal.h \ src/MsmSlice.h src/Slice.h src/Term.h $(outdir)Projection.o: src/Projection.cpp src/stdinc.h src/Projection.h src/Term.h \ src/Partition.h $(outdir)MsmStrategy.o: src/MsmStrategy.cpp src/stdinc.h src/MsmStrategy.h \ src/SliceStrategyCommon.h src/SliceStrategy.h src/SplitStrategy.h \ src/Term.h src/TermConsumer.h src/IndependenceSplitter.h \ src/Partition.h src/Projection.h src/Ideal.h src/MsmSlice.h src/Slice.h \ src/TermTranslator.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/SliceAlgorithm.h \ src/TermGrader.h src/SliceEvent.h $(outdir)lattice.o: src/lattice.cpp src/stdinc.h src/lattice.h src/BigIdeal.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h $(outdir)LatticeFacade.o: src/LatticeFacade.cpp src/stdinc.h src/LatticeFacade.h \ src/Facade.h src/Timer.h src/lattice.h $(outdir)DecomRecorder.o: src/DecomRecorder.cpp src/stdinc.h src/DecomRecorder.h \ src/TermConsumer.h src/Term.h src/Ideal.h $(outdir)TermGrader.o: src/TermGrader.cpp src/stdinc.h src/TermGrader.h \ src/Projection.h src/TermTranslator.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/Term.h $(outdir)Fourti2IOHandler.o: src/Fourti2IOHandler.cpp src/stdinc.h \ src/Fourti2IOHandler.h src/IOHandler.h src/Scanner.h src/BigIdeal.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h src/Term.h src/TermTranslator.h \ src/BigPolynomial.h src/error.h src/BigTermConsumer.h \ src/TermConsumer.h src/DataType.h src/FrobbyStringStream.h \ src/IdealConsolidator.h src/PolynomialConsolidator.h \ src/CoefBigTermConsumer.h src/CoefTermConsumer.h $(outdir)NullIOHandler.o: src/NullIOHandler.cpp src/stdinc.h src/NullIOHandler.h \ src/IOHandler.h src/BigIdeal.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/NullCoefTermConsumer.h src/CoefBigTermConsumer.h \ src/CoefTermConsumer.h src/NullTermConsumer.h src/BigTermConsumer.h \ src/TermConsumer.h src/BigPolynomial.h src/DataType.h $(outdir)Minimizer.o: src/Minimizer.cpp src/stdinc.h src/Minimizer.h src/Term.h $(outdir)AlexanderDualAction.o: src/AlexanderDualAction.cpp src/stdinc.h \ src/AlexanderDualAction.h src/Action.h src/BoolParameter.h \ src/Parameter.h src/SliceParameters.h src/ParameterGroup.h \ src/StringParameter.h src/IOParameters.h src/IOHandler.h src/BigIdeal.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h src/IOFacade.h src/Facade.h src/Timer.h \ src/Scanner.h src/SliceFacade.h src/SplitStrategy.h src/Ideal.h \ src/TermTranslator.h src/TermConsumer.h src/CoefTermConsumer.h \ src/DataType.h $(outdir)frobby.o: src/frobby.cpp src/stdinc.h src/frobby.h src/BigIdeal.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h src/SliceFacade.h src/SplitStrategy.h \ src/Ideal.h src/TermTranslator.h src/Facade.h src/Timer.h \ src/TermConsumer.h src/CoefTermConsumer.h src/SliceParameters.h \ src/ParameterGroup.h src/Parameter.h src/BoolParameter.h \ src/StringParameter.h src/BigTermConsumer.h src/Term.h \ src/CoefBigTermConsumer.h $(outdir)BigTermConsumer.o: src/BigTermConsumer.cpp src/stdinc.h \ src/BigTermConsumer.h src/TermConsumer.h src/Term.h \ src/TermTranslator.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/BigIdeal.h $(outdir)TranslatingTermConsumer.o: src/TranslatingTermConsumer.cpp src/stdinc.h \ src/TranslatingTermConsumer.h src/BigTermConsumer.h src/TermConsumer.h \ src/Term.h src/TermTranslator.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h $(outdir)HilbertAction.o: src/HilbertAction.cpp src/stdinc.h src/HilbertAction.h \ src/Action.h src/BoolParameter.h src/Parameter.h src/IOParameters.h \ src/ParameterGroup.h src/StringParameter.h src/IOHandler.h \ src/SliceParameters.h src/BigIdeal.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/IOFacade.h src/Facade.h src/Timer.h src/SliceFacade.h \ src/SplitStrategy.h src/Ideal.h src/TermTranslator.h src/TermConsumer.h \ src/CoefTermConsumer.h src/Scanner.h src/DataType.h $(outdir)HilbertSlice.o: src/HilbertSlice.cpp src/stdinc.h src/HilbertSlice.h \ src/Slice.h src/Ideal.h src/Term.h src/CoefTermConsumer.h \ src/HilbertBasecase.h src/ElementDeleter.h $(outdir)Polynomial.o: src/Polynomial.cpp src/stdinc.h src/Polynomial.h src/Term.h $(outdir)CanonicalCoefTermConsumer.o: src/CanonicalCoefTermConsumer.cpp \ src/stdinc.h src/CanonicalCoefTermConsumer.h src/CoefTermConsumer.h \ src/Polynomial.h src/Term.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h $(outdir)HilbertStrategy.o: src/HilbertStrategy.cpp src/stdinc.h \ src/HilbertStrategy.h src/IndependenceSplitter.h src/Partition.h \ src/Projection.h src/Ideal.h src/MsmSlice.h src/Slice.h src/Term.h \ src/SliceStrategyCommon.h src/SliceStrategy.h src/SplitStrategy.h \ src/ElementDeleter.h src/HilbertIndependenceConsumer.h \ src/CoefTermConsumer.h src/SliceEvent.h src/HilbertSlice.h $(outdir)Slice.o: src/Slice.cpp src/stdinc.h src/Slice.h src/Ideal.h src/Term.h \ src/Projection.h $(outdir)SliceStrategyCommon.o: src/SliceStrategyCommon.cpp src/stdinc.h \ src/SliceStrategyCommon.h src/SliceStrategy.h src/SplitStrategy.h \ src/Term.h src/ElementDeleter.h src/Slice.h src/Ideal.h $(outdir)DebugStrategy.o: src/DebugStrategy.cpp src/stdinc.h src/DebugStrategy.h \ src/SliceStrategy.h src/Slice.h src/Ideal.h src/Term.h $(outdir)FrobeniusStrategy.o: src/FrobeniusStrategy.cpp src/stdinc.h \ src/FrobeniusStrategy.h src/MsmStrategy.h src/SliceStrategyCommon.h \ src/SliceStrategy.h src/SplitStrategy.h src/Term.h src/TermConsumer.h \ src/IndependenceSplitter.h src/Partition.h src/Projection.h src/Ideal.h \ src/MsmSlice.h src/Slice.h src/TermGrader.h $(outdir)SliceFacade.o: src/SliceFacade.cpp src/stdinc.h src/SliceFacade.h \ src/SplitStrategy.h src/Ideal.h src/TermTranslator.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/Facade.h src/Timer.h src/TermConsumer.h src/CoefTermConsumer.h \ src/BigTermConsumer.h src/CoefBigTermConsumer.h src/BigIdeal.h \ src/Term.h src/MsmStrategy.h src/SliceStrategyCommon.h \ src/SliceStrategy.h src/IndependenceSplitter.h src/Partition.h \ src/Projection.h src/MsmSlice.h src/Slice.h \ src/TranslatingTermConsumer.h src/TranslatingCoefTermConsumer.h \ src/DebugStrategy.h src/SliceAlgorithm.h src/DecomRecorder.h \ src/TermGrader.h src/FrobeniusStrategy.h \ src/CanonicalCoefTermConsumer.h src/Polynomial.h src/HilbertStrategy.h \ src/ElementDeleter.h src/HilbertIndependenceConsumer.h src/SliceEvent.h \ src/IOHandler.h src/BigPolynomial.h src/TotalDegreeCoefTermConsumer.h \ src/CoefBigTermRecorder.h src/CanonicalTermConsumer.h src/VarSorter.h \ src/StatisticsStrategy.h src/error.h src/IrreducibleIdealSplitter.h $(outdir)BigTermRecorder.o: src/BigTermRecorder.cpp src/stdinc.h \ src/BigTermRecorder.h src/BigTermConsumer.h src/TermConsumer.h \ src/ElementDeleter.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/BigIdeal.h \ src/Term.h src/TermTranslator.h $(outdir)CoCoA4IOHandler.o: src/CoCoA4IOHandler.cpp src/stdinc.h \ src/CoCoA4IOHandler.h src/IOHandlerCommon.h src/IOHandler.h \ src/Scanner.h src/BigIdeal.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/CoefTermConsumer.h \ src/Term.h src/TermTranslator.h src/BigPolynomial.h src/error.h \ src/FrobbyStringStream.h src/BigTermConsumer.h src/TermConsumer.h \ src/DataType.h src/CoefBigTermConsumer.h $(outdir)SingularIOHandler.o: src/SingularIOHandler.cpp src/stdinc.h \ src/SingularIOHandler.h src/IOHandlerCommon.h src/IOHandler.h \ src/Scanner.h src/BigIdeal.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/CoefTermConsumer.h \ src/BigPolynomial.h src/error.h src/BigTermConsumer.h \ src/TermConsumer.h src/FrobbyStringStream.h src/DataType.h \ src/CoefBigTermConsumer.h $(outdir)TotalDegreeCoefTermConsumer.o: src/TotalDegreeCoefTermConsumer.cpp \ src/stdinc.h src/TotalDegreeCoefTermConsumer.h src/CoefTermConsumer.h \ src/CoefBigTermConsumer.h src/TermTranslator.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/Term.h $(outdir)BigPolynomial.o: src/BigPolynomial.cpp src/stdinc.h src/BigPolynomial.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h src/Term.h src/TermTranslator.h src/VarSorter.h $(outdir)CoefBigTermRecorder.o: src/CoefBigTermRecorder.cpp src/stdinc.h \ src/CoefBigTermRecorder.h src/CoefBigTermConsumer.h \ src/CoefTermConsumer.h src/BigPolynomial.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h $(outdir)PolyTransformAction.o: src/PolyTransformAction.cpp src/stdinc.h \ src/PolyTransformAction.h src/Action.h src/BoolParameter.h \ src/Parameter.h src/IOParameters.h src/ParameterGroup.h \ src/StringParameter.h src/IOHandler.h src/Scanner.h src/IOFacade.h \ src/Facade.h src/Timer.h src/BigPolynomial.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/PolynomialFacade.h src/DataType.h $(outdir)VarSorter.o: src/VarSorter.cpp src/stdinc.h src/VarSorter.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h src/Term.h src/TermTranslator.h $(outdir)SliceEvent.o: src/SliceEvent.cpp src/stdinc.h src/SliceEvent.h $(outdir)TermConsumer.o: src/TermConsumer.cpp src/stdinc.h src/TermConsumer.h \ src/Term.h src/Ideal.h $(outdir)NullTermConsumer.o: src/NullTermConsumer.cpp src/stdinc.h \ src/NullTermConsumer.h src/BigTermConsumer.h src/TermConsumer.h $(outdir)CoefTermConsumer.o: src/CoefTermConsumer.cpp src/stdinc.h \ src/CoefTermConsumer.h $(outdir)NullCoefTermConsumer.o: src/NullCoefTermConsumer.cpp src/stdinc.h \ src/NullCoefTermConsumer.h src/CoefBigTermConsumer.h \ src/CoefTermConsumer.h $(outdir)TranslatingCoefTermConsumer.o: src/TranslatingCoefTermConsumer.cpp \ src/stdinc.h src/TranslatingCoefTermConsumer.h \ src/CoefBigTermConsumer.h src/CoefTermConsumer.h src/Term.h \ src/TermTranslator.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h $(outdir)PolynomialFacade.o: src/PolynomialFacade.cpp src/stdinc.h \ src/PolynomialFacade.h src/Facade.h src/Timer.h src/BigPolynomial.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h $(outdir)HilbertBasecase.o: src/HilbertBasecase.cpp src/stdinc.h \ src/HilbertBasecase.h src/Term.h src/ElementDeleter.h src/Ideal.h \ src/error.h $(outdir)HilbertIndependenceConsumer.o: src/HilbertIndependenceConsumer.cpp \ src/stdinc.h src/HilbertIndependenceConsumer.h src/Projection.h \ src/Term.h src/Ideal.h src/CoefTermConsumer.h src/SliceEvent.h \ src/IndependenceSplitter.h src/Partition.h src/MsmSlice.h src/Slice.h \ src/HilbertStrategy.h src/SliceStrategyCommon.h src/SliceStrategy.h \ src/SplitStrategy.h src/ElementDeleter.h $(outdir)SplitStrategy.o: src/SplitStrategy.cpp src/stdinc.h src/SplitStrategy.h \ src/Slice.h src/Ideal.h src/Term.h src/NameFactory.h src/error.h $(outdir)CanonicalTermConsumer.o: src/CanonicalTermConsumer.cpp src/stdinc.h \ src/CanonicalTermConsumer.h src/TermConsumer.h src/Ideal.h \ src/ElementDeleter.h src/TermTranslator.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/IdealComparator.h src/Term.h $(outdir)StatisticsStrategy.o: src/StatisticsStrategy.cpp src/stdinc.h \ src/StatisticsStrategy.h src/SliceStrategy.h src/Slice.h src/Ideal.h \ src/Term.h $(outdir)TestAction.o: src/TestAction.cpp src/stdinc.h src/TestAction.h \ src/Action.h src/BoolParameter.h src/Parameter.h src/test/all.h \ src/test/TestCase.h src/test/Test.h src/test/TestSuite.h \ src/test/macroes.h src/test/asserts.h src/test/TestRunner.h \ src/test/TestQualifier.h src/test/TestVisitor.h $(outdir)NameFactory.o: src/NameFactory.cpp src/stdinc.h src/NameFactory.h $(outdir)error.o: src/error.cpp src/stdinc.h src/error.h src/Scanner.h \ src/FrobbyStringStream.h $(outdir)DebugAllocator.o: src/DebugAllocator.cpp src/stdinc.h \ src/DebugAllocator.h src/main.h src/error.h src/Ideal.h $(outdir)FrobbyStringStream.o: src/FrobbyStringStream.cpp src/stdinc.h \ src/FrobbyStringStream.h $(outdir)SliceStrategy.o: src/SliceStrategy.cpp src/stdinc.h src/SliceStrategy.h $(outdir)PrimaryDecomAction.o: src/PrimaryDecomAction.cpp src/stdinc.h \ src/PrimaryDecomAction.h src/Action.h src/BoolParameter.h \ src/Parameter.h src/SliceParameters.h src/ParameterGroup.h \ src/StringParameter.h src/IOParameters.h src/IOHandler.h src/BigIdeal.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h src/IOFacade.h src/Facade.h src/Timer.h \ src/error.h src/Scanner.h src/SliceFacade.h src/SplitStrategy.h \ src/Ideal.h src/TermTranslator.h src/TermConsumer.h \ src/CoefTermConsumer.h src/DataType.h $(outdir)IdealComparator.o: src/IdealComparator.cpp src/stdinc.h \ src/IdealComparator.h src/BigIdeal.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h \ src/Ideal.h src/TermTranslator.h src/Term.h $(outdir)IOHandlerCommon.o: src/IOHandlerCommon.cpp src/stdinc.h \ src/IOHandlerCommon.h src/IOHandler.h src/Scanner.h src/BigIdeal.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h src/BigTermRecorder.h src/BigTermConsumer.h \ src/TermConsumer.h src/ElementDeleter.h $(outdir)IrreducibleIdealSplitter.o: src/IrreducibleIdealSplitter.cpp src/stdinc.h \ src/IrreducibleIdealSplitter.h src/BigTermConsumer.h src/TermConsumer.h \ src/Term.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/TermTranslator.h $(outdir)DataType.o: src/DataType.cpp src/stdinc.h src/DataType.h $(outdir)IdealConsolidator.o: src/IdealConsolidator.cpp src/stdinc.h \ src/IdealConsolidator.h src/BigTermConsumer.h src/TermConsumer.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h src/BigIdeal.h src/Term.h src/TermTranslator.h $(outdir)CoefBigTermConsumer.o: src/CoefBigTermConsumer.cpp src/stdinc.h \ src/CoefBigTermConsumer.h src/CoefTermConsumer.h src/BigPolynomial.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h src/Term.h $(outdir)PolynomialConsolidator.o: src/PolynomialConsolidator.cpp src/stdinc.h \ src/PolynomialConsolidator.h src/CoefBigTermConsumer.h \ src/CoefTermConsumer.h src/BigPolynomial.h src/VarNames.h \ src/hash_map/hash_map src/hash_map/hashtable.h src/hash_map/hash_fun.h $(outdir)OptimizeAction.o: src/OptimizeAction.cpp src/stdinc.h \ src/OptimizeAction.h src/Action.h src/BoolParameter.h src/Parameter.h \ src/SliceParameters.h src/ParameterGroup.h src/StringParameter.h \ src/IntegerParameter.h src/IOParameters.h src/IOHandler.h \ src/DataType.h src/IOFacade.h src/Facade.h src/Timer.h \ src/SliceFacade.h src/SplitStrategy.h src/Ideal.h src/TermTranslator.h \ src/VarNames.h src/hash_map/hash_map src/hash_map/hashtable.h \ src/hash_map/hash_fun.h src/TermConsumer.h src/CoefTermConsumer.h \ src/Scanner.h src/BigIdeal.h src/BigTermConsumer.h \ src/NullTermConsumer.h $(outdir)MaximalStandardAction.o: src/MaximalStandardAction.cpp src/stdinc.h \ src/MaximalStandardAction.h src/Action.h src/BoolParameter.h \ src/Parameter.h src/IOParameters.h src/ParameterGroup.h \ src/StringParameter.h src/IOHandler.h src/SliceParameters.h \ src/BigIdeal.h src/VarNames.h src/hash_map/hash_map \ src/hash_map/hashtable.h src/hash_map/hash_fun.h src/SliceFacade.h \ src/SplitStrategy.h src/Ideal.h src/TermTranslator.h src/Facade.h \ src/Timer.h src/TermConsumer.h src/CoefTermConsumer.h src/IOFacade.h \ src/Scanner.h src/DataType.h $(outdir)Test.o: src/test/Test.cpp src/test/stdinc.h src/test/../stdinc.h \ src/test/Test.h $(outdir)TestCase.o: src/test/TestCase.cpp src/test/stdinc.h src/test/../stdinc.h \ src/test/TestCase.h src/test/Test.h src/test/TestVisitor.h $(outdir)TestQualifier.o: src/test/TestQualifier.cpp src/test/stdinc.h \ src/test/../stdinc.h src/test/TestQualifier.h src/test/TestVisitor.h \ src/test/TestSuite.h src/test/Test.h $(outdir)TestRunner.o: src/test/TestRunner.cpp src/test/stdinc.h \ src/test/../stdinc.h src/test/TestRunner.h src/test/TestQualifier.h \ src/test/TestVisitor.h src/test/TestCase.h src/test/Test.h $(outdir)TestSuite.o: src/test/TestSuite.cpp src/test/stdinc.h \ src/test/../stdinc.h src/test/TestSuite.h src/test/Test.h \ src/test/TestVisitor.h $(outdir)TestVisitor.o: src/test/TestVisitor.cpp src/test/stdinc.h \ src/test/../stdinc.h src/test/TestVisitor.h $(outdir)macroes.o: src/test/macroes.cpp src/test/stdinc.h src/test/../stdinc.h \ src/test/macroes.h src/test/TestSuite.h src/test/Test.h $(outdir)asserts.o: src/test/asserts.cpp src/test/stdinc.h src/test/../stdinc.h \ src/test/asserts.h $(outdir)AlexanderDualTests.o: src/libraryTest/AlexanderDualTests.cpp \ src/libraryTest/AlexanderDualTests.h src/libraryTest/../frobby.h \ src/libraryTest/MyAsserts.h src/libraryTest/MyIdeal.h \ src/libraryTest/MyPolynomial.h src/libraryTest/MyIdealCreators.h \ src/libraryTest/MyConsumers.h src/libraryTest/../test/all.h \ src/libraryTest/../test/TestCase.h src/libraryTest/../test/Test.h \ src/libraryTest/../test/TestSuite.h src/libraryTest/../test/macroes.h \ src/libraryTest/../test/asserts.h $(outdir)HilbertPoincareTests.o: src/libraryTest/HilbertPoincareTests.cpp \ src/libraryTest/HilbertPoincareTests.h src/libraryTest/../frobby.h \ src/libraryTest/MyAsserts.h src/libraryTest/MyIdeal.h \ src/libraryTest/MyPolynomial.h src/libraryTest/MyIdealCreators.h \ src/libraryTest/MyConsumers.h src/libraryTest/MyPolynomialCreators.h $(outdir)IrreducibleDecomTests.o: src/libraryTest/IrreducibleDecomTests.cpp \ src/libraryTest/IrreducibleDecomTests.h src/libraryTest/../frobby.h \ src/libraryTest/MyAsserts.h src/libraryTest/MyIdeal.h \ src/libraryTest/MyPolynomial.h src/libraryTest/MyConsumers.h \ src/libraryTest/MyIdealCreators.h $(outdir)MyAsserts.o: src/libraryTest/MyAsserts.cpp src/libraryTest/MyAsserts.h \ src/libraryTest/MyIdeal.h src/libraryTest/../frobby.h \ src/libraryTest/MyPolynomial.h $(outdir)MyConsumers.o: src/libraryTest/MyConsumers.cpp \ src/libraryTest/MyConsumers.h src/libraryTest/../frobby.h \ src/libraryTest/MyIdeal.h src/libraryTest/MyPolynomial.h $(outdir)MyIdeal.o: src/libraryTest/MyIdeal.cpp src/libraryTest/stdinc.h \ src/libraryTest/../stdinc.h src/libraryTest/MyIdeal.h \ src/libraryTest/../frobby.h $(outdir)MyIdealCreators.o: src/libraryTest/MyIdealCreators.cpp \ src/libraryTest/MyIdealCreators.h src/libraryTest/MyIdeal.h \ src/libraryTest/../frobby.h $(outdir)MyPolynomial.o: src/libraryTest/MyPolynomial.cpp src/libraryTest/stdinc.h \ src/libraryTest/../stdinc.h src/libraryTest/MyPolynomial.h \ src/libraryTest/MyIdeal.h src/libraryTest/../frobby.h $(outdir)MyPolynomialCreators.o: src/libraryTest/MyPolynomialCreators.cpp \ src/libraryTest/MyPolynomialCreators.h src/libraryTest/MyPolynomial.h \ src/libraryTest/MyIdeal.h src/libraryTest/../frobby.h $(outdir)example.o: src/libraryTest/example.cpp src/libraryTest/MyIdeal.h \ src/libraryTest/../frobby.h src/libraryTest/MyPolynomial.h \ src/libraryTest/MyAsserts.h src/libraryTest/MyConsumers.h \ src/libraryTest/MyIdealCreators.h \ src/libraryTest/MyPolynomialCreators.h \ src/libraryTest/AlexanderDualTests.h \ src/libraryTest/HilbertPoincareTests.h \ src/libraryTest/IrreducibleDecomTests.h \ src/libraryTest/standardProgramTests.h \ src/libraryTest/maximalStandardMonomialTests.h $(outdir)maximalStandardMonomialTests.o: \ src/libraryTest/maximalStandardMonomialTests.cpp \ src/libraryTest/maximalStandardMonomialTests.h \ src/libraryTest/../frobby.h src/libraryTest/MyAsserts.h \ src/libraryTest/MyIdeal.h src/libraryTest/MyPolynomial.h \ src/libraryTest/MyConsumers.h src/libraryTest/MyIdealCreators.h $(outdir)standardProgramTests.o: src/libraryTest/standardProgramTests.cpp \ src/libraryTest/standardProgramTests.h src/libraryTest/../frobby.h \ src/libraryTest/MyAsserts.h src/libraryTest/MyIdeal.h \ src/libraryTest/MyPolynomial.h src/libraryTest/MyConsumers.h \ src/libraryTest/MyIdealCreators.h frobby-0.9.5/.gitignore000066400000000000000000000002261401527164200150020ustar00rootroot00000000000000syntax: glob *~ ._* data frobby.lnk *.stackdump core *.orig 4ti2/* disttmp tmp sage ex/ ideals/ bin/ tmp/ *_standard* test/messages/errorTestHelperTmpfrobby-0.9.5/4ti2/000077500000000000000000000000001401527164200135745ustar00rootroot00000000000000frobby-0.9.5/4ti2/README000066400000000000000000000001201401527164200144450ustar00rootroot00000000000000put a 4ti2 installation here in this directory. you only need the file 4ti2gmp. frobby-0.9.5/CMakeLists.txt000066400000000000000000000136121401527164200155550ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.12) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) project(frobby VERSION 0.9.5 LANGUAGES CXX) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) option(WITH_MPIR "Build with MPIR or not" off) if(WITH_MPIR) find_package(MPIR 3.0.0 REQUIRED) set(GMP_LIBRARIES ${MPIR_LIBRARIES}) set(GMP_INCLUDE_DIRS ${MPIR_INCLUDE_DIRS}) else() find_package(GMP 6.0.0 REQUIRED) endif() add_compile_options( -DPACKAGE_NAME="${PROJECT_NAME}" -DPACKAGE_TARNAME="${PROJECT_NAME}" -DPACKAGE_VERSION="${PROJECT_VERSION}" -DPACKAGE_STRING="${PROJECT_NAME} ${PROJECT_VERSION}" -DPACKAGE_BUGREPORT="" -DPACKAGE_URL="" -DPACKAGE="${PROJECT_NAME}" -DVERSION="${PROJECT_VERSION}" -Wno-uninitialized -Wno-unused-parameter ) add_library(frobby STATIC src/main.cpp src/display.cpp src/dynamicFrobeniusAlgorithm.cpp src/error.cpp src/fourti2.cpp src/fplllIO.cpp src/frobby.cpp src/intersect.cpp src/lattice.cpp src/randomDataGenerators.cpp src/stdinc.h src/Action.cpp src/ActionPrinter.cpp src/AlexanderDualAction.cpp src/AnalyzeAction.cpp src/Arena.cpp src/AssociatedPrimesAction.cpp src/BigIdeal.cpp src/BigIntVector.cpp src/BigPolynomial.cpp src/BigTermConsumer.cpp src/BigTermRecorder.cpp src/BigattiBaseCase.cpp src/BigattiFacade.cpp src/BigattiHilbertAlgorithm.cpp src/BigattiParams.cpp src/BigattiPivotStrategy.cpp src/BigattiState.cpp src/BoolParameter.cpp src/CanonicalCoefTermConsumer.cpp src/CanonicalTermConsumer.cpp src/CliParams.cpp src/CoCoA4IOHandler.cpp src/CoefBigTermConsumer.cpp src/CoefBigTermRecorder.cpp src/CoefTermConsumer.cpp src/ColumnPrinter.cpp src/CommonParams.cpp src/CommonParamsHelper.cpp src/CountingIOHandler.cpp src/DataType.cpp src/DebugAllocator.cpp src/DebugStrategy.cpp src/DecomRecorder.cpp src/Deformer.cpp src/DimensionAction.cpp src/DynamicFrobeniusAction.cpp src/DynamicFrobeniusFacade.cpp src/EulerAction.cpp src/EulerState.cpp src/Facade.cpp src/Fourti2IOHandler.cpp src/FrobbyStringStream.cpp src/FrobeniusAction.cpp src/GenerateDataFacade.cpp src/GenerateFrobeniusAction.cpp src/GenerateIdealAction.cpp src/HashPolynomial.cpp src/HelpAction.cpp src/HilbertAction.cpp src/HilbertBasecase.cpp src/HilbertIndependenceConsumer.cpp src/HilbertSlice.cpp src/HilbertStrategy.cpp src/IOFacade.cpp src/IOHandler.cpp src/IOHandlerCommon.cpp src/IOHandlerImpl.cpp src/IOParameters.cpp src/Ideal.cpp src/IdealComparator.cpp src/IdealConsolidator.cpp src/IdealFacade.cpp src/IdealFactory.cpp src/IdealOrderer.cpp src/IdealTree.cpp src/IdealWriter.cpp src/IndependenceSplitter.cpp src/InputConsumer.cpp src/IntegerParameter.cpp src/IntersectFacade.cpp src/IntersectionAction.cpp src/IrreducibleDecomAction.cpp src/IrreducibleIdealSplitter.cpp src/LatticeAlgs.cpp src/LatticeAnalyzeAction.cpp src/LatticeFacade.cpp src/LatticeFormatAction.cpp src/LocalArray.cpp src/Macaulay2IOHandler.cpp src/Matrix.cpp src/MaximalStandardAction.cpp src/Minimizer.cpp src/MonosIOHandler.cpp src/MsmSlice.cpp src/MsmStrategy.cpp src/NameFactory.cpp src/NewMonosIOHandler.cpp src/NullCoefTermConsumer.cpp src/NullIOHandler.cpp src/NullTermConsumer.cpp src/ObjectCache.cpp src/OptimizeAction.cpp src/OptimizeStrategy.cpp src/Parameter.cpp src/ParameterGroup.cpp src/Partition.cpp src/PivotEulerAlg.cpp src/PivotStrategy.cpp src/PolyTransformAction.cpp src/PolyWriter.cpp src/Polynomial.cpp src/PolynomialConsolidator.cpp src/PolynomialFacade.cpp src/PolynomialFactory.cpp src/PrimaryDecomAction.cpp src/Projection.cpp src/RawSquareFreeIdeal.cpp src/RawSquareFreeTerm.cpp src/SatBinomConsumer.cpp src/SatBinomIdeal.cpp src/SatBinomRecorder.cpp src/Scanner.cpp src/ScarfFacade.cpp src/ScarfHilbertAlgorithm.cpp src/ScarfParams.cpp src/SingularIOHandler.cpp src/SizeMaxIndepSetAlg.cpp src/Slice.cpp src/SliceFacade.cpp src/SliceLikeParams.cpp src/SliceParameters.cpp src/SliceParams.cpp src/SliceStrategy.cpp src/SliceStrategyCommon.cpp src/SplitStrategy.cpp src/SquareFreeIdeal.cpp src/StatisticsStrategy.cpp src/StringParameter.cpp src/Task.cpp src/TaskEngine.cpp src/Term.cpp src/TermConsumer.cpp src/TermExtra.cpp src/TermGrader.cpp src/TermPredicate.cpp src/TermTranslator.cpp src/TestAction.cpp src/Timer.cpp src/TotalDegreeCoefTermConsumer.cpp src/TransformAction.cpp src/TranslatingCoefTermConsumer.cpp src/TranslatingTermConsumer.cpp src/UniHashPolynomial.cpp src/VarNames.cpp src/VarSorter.cpp src/test/Test.cpp src/test/TestCase.cpp src/test/TestQualifier.cpp src/test/TestRunner.cpp src/test/TestSorter.cpp src/test/TestSuite.cpp src/test/TestVisitor.cpp src/test/asserts.cpp src/test/macroes.cpp ) target_link_libraries(frobby ${GMP_LIBRARIES}) target_include_directories(frobby PUBLIC $ $ $ ) set_target_properties(frobby PROPERTIES PUBLIC_HEADER src/frobby.h) install(TARGETS frobby LIBRARY DESTINATION lib) install(FILES GPL-header COPYING DESTINATION licenses/frobby) include(CTest) if(BUILD_TESTING) add_executable(frobby-tests src/ArenaTest.cpp src/IdealTest.cpp src/LibAlexanderDualTest.cpp src/LibAssociatedPrimesTest.cpp src/LibDimensionTest.cpp src/LibHilbertPoincareTest.cpp src/LibIrreducibleDecomTest.cpp src/LibMaxStdTest.cpp src/LibPrimaryDecomTest.cpp src/LibStdProgramTest.cpp src/LibTest.cpp src/MatrixTest.cpp src/OptimizeStrategyTest.cpp src/RawSquareFreeIdealTest.cpp src/RawSquareFreeTermTest.cpp src/TermGraderTest.cpp src/TermTest.cpp src/TermTranslatorTest.cpp ) target_link_libraries(frobby-tests frobby) # TODO: see testing section in Makefile # add_test() endif() frobby-0.9.5/COPYING000066400000000000000000000431031401527164200140460ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. frobby-0.9.5/GPL-header000066400000000000000000000013711401527164200146070ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ frobby-0.9.5/Makefile000066400000000000000000000300761401527164200144600ustar00rootroot00000000000000# ***** Variables # ======================== # >>>>> GMP set-up <<<<< # ======================== # For GMP set **both** GMP_INC_DIR **and** ldflags_for_gmp # If you have a system installation of GMP with C++ support use next 2 lines: # GMP_INC_DIR= # ldflags_for_gmp=-lgmpxx -lgmp GMP_INC_DIR=/usr/local/include ldflags_for_gmp=-L/usr/local/lib -lgmpxx -lgmp rawSources := main.cpp Action.cpp IOParameters.cpp \ IrreducibleDecomAction.cpp fplllIO.cpp IOHandler.cpp fourti2.cpp \ randomDataGenerators.cpp MonosIOHandler.cpp BigIdeal.cpp \ TransformAction.cpp Macaulay2IOHandler.cpp NewMonosIOHandler.cpp \ HelpAction.cpp DynamicFrobeniusAction.cpp \ dynamicFrobeniusAlgorithm.cpp GenerateIdealAction.cpp \ GenerateFrobeniusAction.cpp intersect.cpp FrobeniusAction.cpp \ Facade.cpp IOFacade.cpp DynamicFrobeniusFacade.cpp \ GenerateDataFacade.cpp AnalyzeAction.cpp IdealFacade.cpp \ Parameter.cpp ParameterGroup.cpp IntegerParameter.cpp \ SliceParameters.cpp BoolParameter.cpp Scanner.cpp Partition.cpp \ StringParameter.cpp Term.cpp TermTranslator.cpp Timer.cpp \ VarNames.cpp LatticeFormatAction.cpp Ideal.cpp \ IntersectionAction.cpp IntersectFacade.cpp \ AssociatedPrimesAction.cpp MsmSlice.cpp IndependenceSplitter.cpp \ Projection.cpp MsmStrategy.cpp lattice.cpp LatticeFacade.cpp \ DecomRecorder.cpp TermGrader.cpp Fourti2IOHandler.cpp \ NullIOHandler.cpp Minimizer.cpp AlexanderDualAction.cpp frobby.cpp \ BigTermConsumer.cpp TranslatingTermConsumer.cpp HilbertAction.cpp \ HilbertSlice.cpp Polynomial.cpp CanonicalCoefTermConsumer.cpp \ HilbertStrategy.cpp Slice.cpp SliceStrategyCommon.cpp \ DebugStrategy.cpp OptimizeStrategy.cpp SliceFacade.cpp \ BigTermRecorder.cpp CoCoA4IOHandler.cpp SingularIOHandler.cpp \ TotalDegreeCoefTermConsumer.cpp BigPolynomial.cpp \ CoefBigTermRecorder.cpp PolyTransformAction.cpp VarSorter.cpp \ TermConsumer.cpp NullTermConsumer.cpp CoefTermConsumer.cpp \ NullCoefTermConsumer.cpp TranslatingCoefTermConsumer.cpp \ PolynomialFacade.cpp HilbertBasecase.cpp \ HilbertIndependenceConsumer.cpp SplitStrategy.cpp \ CanonicalTermConsumer.cpp StatisticsStrategy.cpp TestAction.cpp \ NameFactory.cpp error.cpp DebugAllocator.cpp FrobbyStringStream.cpp \ SliceStrategy.cpp PrimaryDecomAction.cpp IdealComparator.cpp \ IrreducibleIdealSplitter.cpp DataType.cpp IdealConsolidator.cpp \ CoefBigTermConsumer.cpp PolynomialConsolidator.cpp \ OptimizeAction.cpp MaximalStandardAction.cpp test/Test.cpp \ test/TestCase.cpp test/TestQualifier.cpp test/TestRunner.cpp \ test/TestSuite.cpp test/TestVisitor.cpp test/macroes.cpp \ test/asserts.cpp IdealFactory.cpp PolynomialFactory.cpp \ LatticeAnalyzeAction.cpp SatBinomIdeal.cpp SatBinomConsumer.cpp \ SatBinomRecorder.cpp CountingIOHandler.cpp test/TestSorter.cpp \ DimensionAction.cpp SizeMaxIndepSetAlg.cpp TaskEngine.cpp Task.cpp \ BigattiHilbertAlgorithm.cpp BigattiState.cpp ObjectCache.cpp \ HashPolynomial.cpp BigattiBaseCase.cpp BigattiPivotStrategy.cpp \ BigattiFacade.cpp UniHashPolynomial.cpp CommonParams.cpp \ CliParams.cpp SliceParams.cpp SliceLikeParams.cpp BigattiParams.cpp \ IOHandlerImpl.cpp IdealWriter.cpp PolyWriter.cpp IOHandlerCommon.cpp \ CommonParamsHelper.cpp ActionPrinter.cpp ScarfHilbertAlgorithm.cpp \ ScarfFacade.cpp Deformer.cpp IdealTree.cpp TermPredicate.cpp \ ScarfParams.cpp IdealOrderer.cpp TermExtra.cpp display.cpp \ Matrix.cpp BigIntVector.cpp ColumnPrinter.cpp EulerAction.cpp \ RawSquareFreeTerm.cpp RawSquareFreeIdeal.cpp PivotEulerAlg.cpp \ EulerState.cpp PivotStrategy.cpp Arena.cpp LocalArray.cpp \ LatticeAlgs.cpp InputConsumer.cpp SquareFreeIdeal.cpp rawTests := LibAlexanderDualTest.cpp LibHilbertPoincareTest.cpp \ LibIrreducibleDecomTest.cpp LibMaxStdTest.cpp LibStdProgramTest.cpp \ LibTest.cpp OptimizeStrategyTest.cpp TermTest.cpp \ TermTranslatorTest.cpp RawSquareFreeTermTest.cpp \ RawSquareFreeIdealTest.cpp LibPrimaryDecomTest.cpp \ LibAssociatedPrimesTest.cpp MatrixTest.cpp IdealTest.cpp \ LibDimensionTest.cpp TermGraderTest.cpp ArenaTest.cpp ifndef CXX CXX = "g++" endif ifndef BIN_INSTALL_DIR BIN_INSTALL_DIR = "/usr/local/bin/" endif cxxflags = $(CXXFLAGS) $(CPPFLAGS) -I $(GMP_INC_DIR) -Wno-uninitialized -Wno-unused-parameter program = frobby library = libfrobby.a benchArgs = $(FROBBYARGS) ifndef MODE MODE=release endif ifndef ldflags ldflags = $(LDFLAGS) -lgmpxx -lgmp endif MATCH=false ifeq ($(MODE), release) outdir = bin/release/ cxxflags += -O2 MATCH=true endif ifeq ($(MODE), debug) rawSources := $(rawSources) $(rawTests) outdir = bin/debug/ cxxflags += -g -D DEBUG -fno-inline -Werror -Wextra -Wno-uninitialized \ -Wno-unused-parameter MATCH=true endif ifeq ($(MODE), shared) outdir = bin/shared/ cxxflags += -O2 -fPIC library = libfrobby.so MATCH=true endif ifeq ($(MODE), profile) outdir = bin/profile/ cxxflags += -g -pg -O2 -D PROFILE ldflags += -pg MATCH=true benchArgs = _profile $(FROBBYARGS) endif ifeq ($(MODE), analysis) rawSources := $(rawSources) $(rawTests) outdir = bin/analysis/ cxxflags += -Wextra -fsyntax-only -O1 -Wfloat-equal -Wundef \ -Wno-endif-labels -Wshadow -Wlarger-than-1000 -Wpointer-arith \ -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wsign-compare \ -Waggregate-return -Wmissing-noreturn -Wmissing-format-attribute \ -Wno-multichar -Wno-deprecated-declarations -Wpacked \ -Wno-redundant-decls -Wunreachable-code -Winline \ -Wno-invalid-offsetof -Winvalid-pch -Wlong-long \ -Wdisabled-optimization -D DEBUG -Werror MATCH=true endif ifeq ($(MATCH), false) $(error Unknown value of MODE: "$(MODE)") endif sources = $(patsubst %.cpp, src/%.cpp, $(rawSources)) objs = $(patsubst %.cpp, $(outdir)%.o, $(rawSources)) # ***** Compilation .PHONY: all depend clean bin/$(program) test library distribution clear fixspace all: bin/$(program) $(outdir)$(program) # ****************** Testing # use TESTARGS of # _valgrind to run under valgrind. # _debugAlloc to test recovery when running out of memory. # _full to obtain extra tests by verifying relations # between outputs of different actions, and generally testing # everything that can be tested. # _full cannot follow the other options because it is picked up at an earlier # point in the test system than they are. There are more options - see # test/testScripts/testhelper for a full list. # # Only miniTest and bareTest support TESTARGS, and some options are not # available unless MODE=debug. # The correct choice to do a reasonably thorough test of an # installation of Frobby. test: all test/runTests # Run all tests that it makes sense to run. fullTest: all test/runTests _full test/runSplitTests _full # Good for testing Frobby after a small change. microTest: all test/runTests _few $(TESTARGS) miniTest: all test/runTests $(TESTARGS) # Runs all tests and allows full control over the arguments. bareTest: all test/runTests $(TESTARGS) test/runSplitTests $(TESTARGS) # Run benchmarks to detect performance regressions. When MODE=profile, # profile files for the benchmarked actions will be placed in bin/. bench: all cd test/bench; ./runbench $(benchArgs) benchHilbert: all cd test/bench; ./run_hilbert_bench $(benchArgs) benchOptimize: all cd test/bench; ./run_optimize_bench $(benchArgs) benchAlexdual: all cd test/bench; ./run_alexdual_bench $(benchArgs) bin/: mkdir bin/; # Make symbolic link to program from bin/ bin/$(program): $(outdir)$(program) bin/ ifneq ($(MODE), analysis) cd bin; rm -f $(program); ln -s ../$(outdir)$(program) $(program); cd .. endif # Link object files into executable $(outdir)$(program): $(objs) | $(outdir) @mkdir -p $(dir $@) ifeq ($(MODE), analysis) echo > $@ endif ifneq ($(MODE), analysis) $(CXX) $(objs) $(ldflags) -o $@ if [ -f $@.exe ]; then \ mv -f $@.exe $@; \ fi endif ifeq ($(MODE), release) strip $@ endif # Link object files into library library: bin/$(library) bin/$(library): $(objs) | bin/ rm -f bin/$(library) ifeq ($(MODE), shared) $(CXX) -shared -o bin/$(library) $(ldflags) \ $(patsubst $(outdir)main.o,,$(objs)) -lgmp -lgmpxx else ar crs bin/$(library) $(patsubst $(outdir)main.o,,$(objs)) $(RANLIB) bin/$(library) endif # Compile and output object files. # In analysis mode no file is created, so create one # to allow dependency analysis to work. $(outdir)%.o: src/%.cpp @mkdir -p $(dir $@) $(CXX) ${cxxflags} -c $< -o $@ $(CXX) $(cxxflags) -MM -c $< > $(@:.o=.d).tmp # using /usr/bin/env echo to get the non-built-in echo on OS X, since # the built-in one does not understand the parameter -n. @/usr/bin/env echo -n "$(dir $@)" > $(@:.o=.d) @cat $(@:.o=.d).tmp >> $(@:.o=.d) @sed -e 's/.*://' -e 's/\\$$//' < $(@:.o=.d).tmp | fmt -1 | \ sed -e 's/^ *//' -e 's/$$/:/' >> $(@:.o=.d) @rm -f $(@:.o=.d).tmp ifeq ($(MODE), analysis) echo > $@ endif -include $(objs:.o=.d) PREFIX ?= /usr/local MAN1DIR ?= $(PREFIX)/share/man/man1 # Installation. install: install -d $(DESTDIR)$(BIN_INSTALL_DIR) install bin/frobby $(DESTDIR)$(BIN_INSTALL_DIR) mkdir -p $(DESTDIR)$(MAN1DIR) install -m 644 doc/frobby.1 $(DESTDIR)$(MAN1DIR) # ***** Documentation # We need to run latex three times to make sure that references are done # properly in the output. doc: docPs docPdf docPs: rm -rf bin/doc mkdir bin/doc for i in 1 2 3; do latex -output-directory=bin/doc/ doc/manual.tex; done cd bin; dvips doc/manual.dvi docPdf: rm -rf bin/doc mkdir bin/doc for i in 1 2 3; do pdflatex -output-directory=bin/doc/ doc/manual.tex; done mv bin/doc/manual.pdf bin docDviOnce: # Useful to view changes when writing the manual latex -output-directory=bin/doc doc/manual.tex # It may seem wasteful to run doxygen three times to generate three # kinds of output. However, the latex output for creating a pdf file # and for creating a PostScript file is different, and so at least two # runs are necessary. Making the HTML output a third run is cleaner # than tacking it onto one or both of the other two targets. bin/develDoc/: bin/ mkdir bin/develDoc develDoc: develDocHtml develDocPdf develDocPs develDocHtml: bin/develDoc/ cat doc/doxygen.conf doc/doxHtml|doxygen - develDocPdf: bin/develDoc/ rm -rf bin/develDoc/latexPdf bin/develDoc/warningLog cat doc/doxygen.conf doc/doxPdf|doxygen - cd bin/develDoc/latexPdf; for f in `ls *.eps`; do epstopdf $$f; done # Cygwin fix cd bin/develDoc/latexPdf/; make refman.pdf; mv refman.pdf ../develDoc.pdf develDocPs: bin/develDoc/ rm -rf bin/develDoc/latexPs bin/develDoc/warningLog cat doc/doxygen.conf doc/doxPs|doxygen - cd bin/develDoc/latexPs/; make refman.ps; mv refman.ps ../develDoc.ps clean: tidy rm -rf bin # ***** Miscellaneous tidy: find .|grep -x ".*~\|.*/\#.*\#|.*\.stackdump\|gmon\.out\|.*\.orig\|.*/core\|core"|xargs rm -f # Fixes various white space related issues. fixspace: find src/ doc/ -type f|xargs ./fixspace; commit: test echo hg commit -m "$(MSG)" # ***** Distribution remoteUrl = ssh://daimi/projs/frobby pull: hg pull $(remoteUrl) push: hg push $(remoteUrl) distribution: ifndef VER echo "Please specify version of Frobby distribution using VER=x.y.z"; exit 1; endif rm -fr frobby_v$(VER).tar.gz frobby_v$(VER) mkdir frobby_v$(VER) cp -r changelog.txt frobgrob COPYING Makefile src test doc frobby_v$(VER) mkdir frobby_v$(VER)/4ti2 tar --create --gzip --file=frobby_v$(VER).tar.gz frobby_v$(VER)/ rm -fr frobby_v$(VER) ls -l frobby_v$(VER).tar.gz spkg: tidy depend ifndef VER echo "Please specify version of Frobby spkg using VER=x.y.z"; exit 1; endif if [ "$$SAGE_LOCAL" = "" ]; then \ echo "SAGE_LOCAL undefined ... exiting"; \ echo "Maybe run 'sage -sh?'" \ exit 1; \ fi if [ ! -d sage/ ]; then echo "sage/ directory not found."; exit 1; fi # Ensure that previous builds have been cleaned up rm -rf bin/sagetmp bin/frobby-$(VER) bin/frobby-$(VER).spkg hg clone sage bin/sagetmp mkdir bin/sagetmp/src cp -r COPYING Makefile src test bin/sagetmp/src mv bin/sagetmp bin/frobby-$(VER) cd bin/; $(SAGE_ROOT)/sage -pkg `pwd`/frobby-$(VER) rm -rf bin/frobby-$(VER) frobby-0.9.5/README000066400000000000000000000005301401527164200136700ustar00rootroot00000000000000To bump the version number, change it in these places: CMakeLists.txt project(frobby VERSION 0.9.5 LANGUAGES CXX) doc/doxygen.conf PROJECT_NUMBER = 0.9.5 src/frobby.h const char* const version = "0.9.5"; test/messages/help-noparam.err Frobby version 0.9.5 Copyright (C) 2007 Bjarke Hammersholt Roune frobby-0.9.5/changelog.txt000066400000000000000000000162451401527164200155120ustar00rootroot00000000000000*** Version 0.9.4 2018-08-16 - >>>> UNOFFICIAL <<<< - Improved portability - guilty party: John Abbott *** Version 0.9.0, 2011-09-23 - Added support for computing Euler characteristic - Added a deformation algorithm for computing Hilbert-Poincare series - Added the Bigatti et al. algorithm for computing Hilbert-Poincare series - Improved the Slice algorithm implementation for computing H-P series - All option names can now be given as a unique prefix just as for action names - The analyze action can now report on strong and weak genericity - The library interface now supports primary decomposition - The library interface now supports associated primes - Reading input monomial ideals is now significantly faster The new Euler characteristic code uses a new algorithm that is joint work with Eduardo Saenz-de-Cabezon. As documented in our paper, the Frobby implementation of this algorithm is much faster than implementations of Euler characteristic algorithms in other systems. The euler action has many options, but the default should be the fastest for nearly all ideals. The Hilbert-Poincare series code was written to compare the Slice algorithm, the deformation algorithm and the Bigatti et al. algorithm. The deformation has as far as I know never previously been implemented or even very explicitly described in the litterature. The Bigatti algorithm wasn't faster initially after implementing it as described in the litterature, but with some additional improvements it got significantly better. It still is not faster for all ideals, but the improved version is still usually the best algorithm which is why it is the default algorithm used. *** Version 0.8.2, 2009-07-07 New features and improvements in this version include - Fast dimension and codimension of monomial ideals - Various speed improvements (see below) - Generation of random edge ideals - Optimization over maximal standard monomials with negative objective function. The new (co)dimension code uses an algorithm gleaned from the source code of Macaulay 2, though the code in Frobby is substantially faster due to a few improvements. It is not known to me who to credit with this algorithm. Now that Frobby supports negative objective functions, the more general optimize action can also be used to compute the dimension, but this is not nearly as fast. There are also many smaller improvements. They are too many to list here, but the more visible ones are shown below. ** Performance improvements - Actions frobgrob and optimize are substantially faster due to code improvements and due to the bound optimization now being accessible. It had been turned off by mistake in the previous release, even when explicitly requested via the command line option -bound. The bound optimization itself has been improved to work with objective funtions with negative entries. - Improved the pure power split selection strategies to choose a middle variable in case of ties instead of the left-most variable. This makes no difference for most inputs, but leads to dramatic speed-ups for some particular highly non-generic inputs. - All slice-based algorithms are slightly faster due to low-level code improvements. - The action optimize now uses the degree split strategy by default instead of median, which is faster. ** Deprecated functionality - The action frobgrob is deprecated and will be removed in a future version of Frobby. Use the action optimize with options chopFirstAndSubtract and maxStandard to achieve the same effect. - The split selection strategy named frob is now deprecated and will be removed in a future version of Frobby. Use the name degree to achieve the same effect. ** Miscellaneous improvements - The polynomial ring is named R in the Macaulay 2 format, which is a problem if there is also a variable named R in the ring, since then Macaulay 2 will report an error on reading the file. Frobby now renames the ring to R1 in that case, or R2 if there is also a variable named R1 and so on. - All formats now support underscores as part of variable names. - There is now an output format "count" that just prints the total number of generators. ** Technical Improvements - A benchmark suite has been added to detect preformance regressions, such as the above situation with the bound optimization getting turned off. There is also support for profiling to detect the lines of code that are taking the most time. - The amount of information in the developer documentation, which is generated based on source code comments, has increased substantially. - The design for how internal C++ tests are done is much improved and the number of tests bas been expanded substantially. - Code file dependency tracking is much improved. It is now fully automatic, so the Makefile target depend is removed. - All Frobby files now use unix-style line endings, rather than the mix that was there before. - Frobby now explicitly refuses to use independence splits when solving Frobenius problems and other optimization problems. They were never implemented for that case. - The install makefile target now uses sudo, so that it does not have to be run as root to install Frobby. This is not the case on Cygwin, which does not seem to have sudo. - Option -chopFirstAndSubtract now fails gracefully when there are no variables, such as when using -iformat null. In general actions now deal well with -iformat null, and this is now part of the testsuite. - Numerous small improvements to performance, design and comments all over the codebase. *** Version 0.8.1, 2009-04-30 This is a minor update. - There is now a manual in doc/manual.tex. - Frobby no longer crashes when using the -stats and -debug options. - The developer documentation can now be built on Cygwin. - The example/ directory is now named liraryTest/ to avoid confusion. - The Makefile now has an "install" target. *** Version 0.8.0, 2009-02-12 This version adds support for - Hilbert-Poincare series. - Primary decomposition. - Maximal standard monomials. - Linear optimization problems over monomial ideals. - The format cocoa4 that can be processed by CoCoA 4. - The format singular, which can be processed by Singular. - Manipulation of polynomials for formats where it makes sense. The library interface is expanded and is now tested in the testsuite. This interface is being used by Macaulay 2 and CoCoA to perform some of their computations on monomial ideals. The library interface, and Frobby in general, is now exception-safe and deals gracefully with running out of memory. Frobby is also included with Sage as an optional package. The testsuite for every functionality has been greatly extended and improved, with the consequence that the tests now take much longer to run, as they are testing many more aspects of Frobby and there is more testing going on. Having Frobby included with Macaulay 2 and CoCoA has resulted in a number of improvements to make Frobby build correctly on the many platforms that these systems support. Thanks goes to Daniel R. Grayson, Michael Stillman and Anna Bigatti for their work on this. ** Changes were not tracked prior to version 0.8.0 frobby-0.9.5/cmake/000077500000000000000000000000001401527164200140725ustar00rootroot00000000000000frobby-0.9.5/cmake/FindGMP.cmake000066400000000000000000000075171401527164200163320ustar00rootroot00000000000000# Try to find the GNU Multiple Precision Arithmetic Library (GMP) # See http://gmplib.org/ # # This module supports requiring a minimum version, e.g. you can do # find_package(GMP 6.1.0) # to require version 6.1.0 to newer of GMP. # # Once done this will define # # GMP_FOUND - system has GMP lib # GMP_INCLUDE_DIRS - the GMP include directory # GMP_LIBRARIES - Libraries needed to use GMP # GMP_VERSION - GMP version # Copyright (c) 2016 Jack Poulson, # Copyright (c) 2020, Mahrud Sayrafi, # Redistribution and use is allowed according to the terms of the BSD license. # Set GMP_FIND_VERSION to 1.0.0 if no minimum version is specified if(NOT GMP_FIND_VERSION) if(NOT GMP_FIND_VERSION_MAJOR) set(GMP_FIND_VERSION_MAJOR 5) endif() if(NOT GMP_FIND_VERSION_MINOR) set(GMP_FIND_VERSION_MINOR 1) endif() if(NOT GMP_FIND_VERSION_PATCH) set(GMP_FIND_VERSION_PATCH 0) endif() set(GMP_FIND_VERSION "${GMP_FIND_VERSION_MAJOR}.${GMP_FIND_VERSION_MINOR}.${GMP_FIND_VERSION_PATCH}") endif() macro(_gmp_check_version) # Since the GMP version macros may be in a file included by gmp.h of the form # gmp-.*[_]?.*.h (e.g., gmp-x86_64.h), we search each of them. file(GLOB GMP_HEADERS "${GMP_INCLUDE_DIRS}/gmp.h" "${GMP_INCLUDE_DIRS}/gmp-*.h") foreach(gmp_header_filename ${GMP_HEADERS}) file(READ "${gmp_header_filename}" _gmp_version_header) string(REGEX MATCH "define[ \t]+__GNU_MP_VERSION[ \t]+([0-9]+)" _gmp_major_version_match "${_gmp_version_header}") if(_gmp_major_version_match) set(GMP_MAJOR_VERSION "${CMAKE_MATCH_1}") string(REGEX MATCH "define[ \t]+__GNU_MP_VERSION_MINOR[ \t]+([0-9]+)" _gmp_minor_version_match "${_gmp_version_header}") set(GMP_MINOR_VERSION "${CMAKE_MATCH_1}") string(REGEX MATCH "define[ \t]+__GNU_MP_VERSION_PATCHLEVEL[ \t]+([0-9]+)" _gmp_patchlevel_version_match "${_gmp_version_header}") set(GMP_PATCHLEVEL_VERSION "${CMAKE_MATCH_1}") set(GMP_VERSION ${GMP_MAJOR_VERSION}.${GMP_MINOR_VERSION}.${GMP_PATCHLEVEL_VERSION}) endif() endforeach() set(GMP_VERSION ${GMP_MAJOR_VERSION}.${GMP_MINOR_VERSION}.${GMP_PATCHLEVEL_VERSION}) # Check whether found version exists and exceeds the minimum requirement if(NOT GMP_VERSION) set(GMP_VERSION_OK FALSE) message(STATUS "GMP version was not detected") elseif(${GMP_VERSION} VERSION_LESS ${GMP_FIND_VERSION}) set(GMP_VERSION_OK FALSE) message(STATUS "GMP version ${GMP_VERSION} found in ${GMP_INCLUDE_DIRS}, " "but at least version ${GMP_FIND_VERSION} is required") else() set(GMP_VERSION_OK TRUE) endif() endmacro(_gmp_check_version) if(NOT GMP_VERSION_OK) set(GMP_INCLUDE_DIRS NOTFOUND) set(GMP_LIBRARIES NOTFOUND) set(GMPXX_LIBRARIES NOTFOUND) # search first if an GMPConfig.cmake is available in the system, # if successful this would set GMP_INCLUDE_DIRS and the rest of # the script will work as usual find_package(GMP ${GMP_FIND_VERSION} NO_MODULE QUIET) if(NOT GMP_INCLUDE_DIRS) find_path(GMP_INCLUDE_DIRS NAMES gmp.h HINTS ENV GMPDIR ENV GMPDIR PATHS ${INCLUDE_INSTALL_DIR} ${CMAKE_INSTALL_PREFIX}/include) endif() if(GMP_INCLUDE_DIRS) _GMP_check_version() endif() if(NOT GMP_LIBRARIES) find_library(GMP_LIBRARIES NAMES gmp HINTS ENV GMPDIR ENV GMPDIR PATHS ${LIB_INSTALL_DIR} ${CMAKE_INSTALL_PREFIX}/lib) find_library(GMPXX_LIBRARIES NAMES gmpxx HINTS ENV GMPDIR ENV GMPDIR PATHS ${LIB_INSTALL_DIR} ${CMAKE_INSTALL_PREFIX}/lib) set(GMP_LIBRARIES ${GMPXX_LIBRARIES} ${GMP_LIBRARIES}) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GMP DEFAULT_MSG GMP_INCLUDE_DIRS GMP_LIBRARIES GMP_VERSION_OK) mark_as_advanced(GMP_INCLUDE_DIRS GMP_LIBRARIES) endif() frobby-0.9.5/cmake/FindMPIR.cmake000066400000000000000000000064011401527164200164450ustar00rootroot00000000000000# Try to find the MPIR libraries # See http://www.mpir.org/ # # This module supports requiring a minimum version, e.g. you can do # find_package(MPIR 3.0.0) # to require version 3.0.0 to newer of MPIR. # # Once done this will define # # MPIR_FOUND - system has MPIR lib # MPIR_INCLUDE_DIRS - the MPIR include directory # MPIR_LIBRARIES - Libraries needed to use MPIR # MPIR_VERSION - MPIR version # Copyright (c) 2020, Mahrud Sayrafi, # Redistribution and use is allowed according to the terms of the BSD license. # Set MPIR_FIND_VERSION to 1.0.0 if no minimum version is specified if(NOT MPIR_FIND_VERSION) if(NOT MPIR_FIND_VERSION_MAJOR) set(MPIR_FIND_VERSION_MAJOR 1) endif() if(NOT MPIR_FIND_VERSION_MINOR) set(MPIR_FIND_VERSION_MINOR 0) endif() if(NOT MPIR_FIND_VERSION_PATCH) set(MPIR_FIND_VERSION_PATCH 0) endif() set(MPIR_FIND_VERSION "${MPIR_FIND_VERSION_MAJOR}.${MPIR_FIND_VERSION_MINOR}.${MPIR_FIND_VERSION_PATCH}") endif() macro(_mpir_check_version) # Query MPIR_VERSION file(READ "${MPIR_INCLUDE_DIRS}/mpir.h" _mpir_version_header) string(REGEX MATCH "define[ \t]+__MPIR_VERSION[ \t]+([0-9]+)" _mpir_major_version_match "${_mpir_version_header}") set(MPIR_MAJOR_VERSION "${CMAKE_MATCH_1}") string(REGEX MATCH "define[ \t]+__MPIR_VERSION_MINOR[ \t]+([0-9]+)" _mpir_minor_version_match "${_mpir_version_header}") set(MPIR_MINOR_VERSION "${CMAKE_MATCH_1}") string(REGEX MATCH "define[ \t]+__MPIR_VERSION_PATCHLEVEL[ \t]+([0-9]+)" _mpir_patchlevel_version_match "${_mpir_version_header}") set(MPIR_PATCHLEVEL_VERSION "${CMAKE_MATCH_1}") set(MPIR_VERSION ${MPIR_MAJOR_VERSION}.${MPIR_MINOR_VERSION}.${MPIR_PATCHLEVEL_VERSION}) # Check whether found version exceeds minimum required if(${MPIR_VERSION} VERSION_LESS ${MPIR_FIND_VERSION}) set(MPIR_VERSION_OK FALSE) message(STATUS "MPIR version ${MPIR_VERSION} found in ${MPIR_INCLUDE_DIRS}, " "but at least version ${MPIR_FIND_VERSION} is required") else() set(MPIR_VERSION_OK TRUE) endif() endmacro(_mpir_check_version) if(NOT MPIR_VERSION_OK) set(MPIR_INCLUDE_DIRS NOTFOUND) set(MPIR_LIBRARIES NOTFOUND) set(MPIRXX_LIBRARIES NOTFOUND) # search first if an MPIRConfig.cmake is available in the system, # if successful this would set MPIR_INCLUDE_DIRS and the rest of # the script will work as usual find_package(MPIR ${MPIR_FIND_VERSION} NO_MODULE QUIET) if(NOT MPIR_INCLUDE_DIRS) find_path(MPIR_INCLUDE_DIRS NAMES mpir.h HINTS ENV MPIRDIR ENV GMPDIR PATHS ${INCLUDE_INSTALL_DIR} ${CMAKE_INSTALL_PREFIX}/include) endif() if(MPIR_INCLUDE_DIRS) _MPIR_check_version() endif() if(NOT MPIR_LIBRARIES) find_library(MPIR_LIBRARIES NAMES mpir HINTS ENV MPIRDIR ENV GMPDIR PATHS ${LIB_INSTALL_DIR} ${CMAKE_INSTALL_PREFIX}/lib) find_library(MPIRXX_LIBRARIES NAMES mpirxx HINTS ENV MPIRDIR ENV GMPDIR PATHS ${LIB_INSTALL_DIR} ${CMAKE_INSTALL_PREFIX}/lib) set(MPIR_LIBRARIES ${MPIRXX_LIBRARIES} ${MPIR_LIBRARIES}) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(MPIR DEFAULT_MSG MPIR_INCLUDE_DIRS MPIR_LIBRARIES MPIR_VERSION_OK) mark_as_advanced(MPIR_INCLUDE_DIRS MPIR_LIBRARIES) endif() frobby-0.9.5/doc/000077500000000000000000000000001401527164200135575ustar00rootroot00000000000000frobby-0.9.5/doc/doxHtml000066400000000000000000000133421401527164200151240ustar00rootroot00000000000000# This file sets options that are appropriate for HTML output using doxygen. # The most important such option is to actually generate HTML output. # This file is intended to be appended to doxygen.conf. # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 frobby-0.9.5/doc/doxPdf000066400000000000000000000021341401527164200147260ustar00rootroot00000000000000# This file sets options that are appropriate for PDF output using doxygen. # The most important such option is to actually generate PDF output. # This file is intended to be appended to doxygen.conf. # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latexPdf frobby-0.9.5/doc/doxPs000066400000000000000000000021431401527164200145770ustar00rootroot00000000000000# This file sets options that are appropriate for PostScript output # using doxygen. The most important such option is to actually # generate PDF output. This file is intended to be appended to # doxygen.conf. # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latexPs frobby-0.9.5/doc/doxygen.conf000066400000000000000000001404241401527164200161100ustar00rootroot00000000000000# Doxyfile 1.5.5 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = Frobby # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = 0.9.5 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = "bin/develDoc/" # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, # and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = bin/develDoc/warningLog #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = src/ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.h *.cpp # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentstion. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HMTL output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = ../../../doc/frobbyLatex # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is enabled by default, which results in a transparent # background. Warning: Depending on the platform used, enabling this option # may lead to badly anti-aliased labels on the edges of a graph (i.e. they # become hard to read). DOT_TRANSPARENT = YES # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO frobby-0.9.5/doc/frobby.1000066400000000000000000000034331401527164200151270ustar00rootroot00000000000000.TH FROBBY "1" "March 2015" .SH NAME Frobby \- Computations with monomial ideals .SH DESCRIPTION Frobby performs a number of computations related to monomial ideals. You run it by typing `frobby ACTION', where ACTION is one of the following. .HP alexdual \- Compute the Alexander dual of the input ideal. .HP analyze \- Display information about the input ideal. .HP assoprimes \- Compute the associated primes of the input ideal. .HP dimension \- Compute the (co)dimension of the input ideal. .HP euler \- Compute the Euler characteristic. .HP frobdyn \- Compute Frobenius number using dynamic programming. .HP genfrob \- Generate a random Frobenius problem instance. .HP genideal \- Generate a random monomial ideal. .HP hilbert \- Compute the Hilbert\-Poincare series of the input ideal. .HP intersection \- Intersect the input ideals. .HP irrdecom \- Compute the irreducible decomposition of the input ideal. .HP latformat \- Change the representation of the input lattice. .HP maxstandard \- Compute the maximal standard monomials of the input ideal. .HP optimize \- Solve optimization problems related to the input ideal. .HP primdecom \- Compute the primary decomposition of monomial ideals. .HP ptransform \- Change the representation of the input polynomial. .HP transform \- Change the representation of the input ideal. .PP Type 'frobby help ACTION' to get more details on a specific action. Note that all input and output is done via the standard streams. Type 'frobby help io' for more information on input and output formats. See www.broune.com for further information and new versions of Frobby. .SH AUTHORS Frobby was written by Bjarke Hammersholt Roune . This manual page was written by Doug Torrance for the Debian project (but may be used by others). frobby-0.9.5/doc/frobbyLatex.sty000066400000000000000000000026341401527164200166060ustar00rootroot00000000000000\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{frobbyLatex} \RequirePackage{amsopn} % This file defines latex commands that are included by Doxygen for % use in the developer documentation that it generates. Thus these % commands can be used in comments in the Frobby source. \DeclareMathOperator{\lcm}{lcm} \DeclareMathOperator{\supp}{supp} \DeclareMathOperator{\hilbSym}{hilb} \DeclareMathOperator{\msmSym}{msm} \DeclareMathOperator{\conSym}{con} \newcommand{\projSym}{\ensuremath{\pi}} \newcommand{\R}{\mathbb{R}} \newcommand{\Q}{\mathbb{Q}} \newcommand{\Z}{\mathbb{Z}} \newcommand{\N}{\mathbb{N}} \newcommand{\s}{\ensuremath{^*}} \newcommand{\p}{\ensuremath{^\prime}} \newcommand{\pp}{\ensuremath{^{\prime\prime}}} \newcommand{\biimp}{\Leftrightarrow} \newcommand{\imp}{\Rightarrow} \newcommand{\impby}{\Leftarrow} \newcommand{\setBuilder}[2]{\left\{#1\left|#2\right.\right\}} \newcommand{\idealBuilder}[2]{\left\langle#1\left|#2\right.\right\rangle} \newcommand{\card}[1]{\left|#1\right|} \newcommand{\msm}[1]{\msmSym\left({#1}\right)} \newcommand{\hilb}[1]{\hilbSym\left({#1}\right)} \newcommand{\con}[3]{\conSym\left({#1},{#2},{#3}\right)} \newcommand{\cont}[1]{\conSym\left({#1}\right)} \newcommand{\ming}[1]{\min\left({#1}\right)} \newcommand{\ideal}[1]{\left\langle#1\right\rangle} \newcommand{\set}[1]{\left\{{#1}\right\}} \newcommand{\codeVar}[1]{\textrm{#1}} \newcommand{\proj}[1]{\ensuremath{\projSym\left({#1}\right)}} frobby-0.9.5/doc/manual.tex000066400000000000000000000566001401527164200155650ustar00rootroot00000000000000\documentclass{amsart} \usepackage{enumerate} \usepackage{amssymb} \usepackage{graphicx} \usepackage{url} \author{Bjarke Hammersholt Roune} \newcommand{\frobbyVersion}{0.8.2} \title{Frobby User Manual - Version \frobbyVersion} \theoremstyle{definition} \newtheorem{theorem}{Theorem} \newtheorem{lemma}[theorem]{Lemma} \newtheorem{definition}[theorem]{Definition} \newtheorem{proposition}[theorem]{Proposition} \newtheorem{corollary}[theorem]{Corollary} \newtheorem{algorithm}[theorem]{Algorithm} \newtheorem{example}[theorem]{Example} \DeclareMathOperator{\lcm}{lcm} \DeclareMathOperator{\irr}{irr} \DeclareMathOperator{\supp}{supp} \DeclareMathOperator{\hilbSym}{hilb} \DeclareMathOperator{\msmSym}{msm} \DeclareMathOperator{\conSym}{con} \DeclareMathOperator{\lcmLatSym}{lat} \def\cocoa{{\hbox{\rm C\kern-.13em o\kern-.07em C\kern-.13em o\kern-.15em A}}} \newcommand{\hp}{Hilbert-Poincar\'e} \newcommand{\hps}{Hilbert-Poincar\'e series} \newcommand{\R}{\mathbb{R}} \newcommand{\Q}{\mathbb{Q}} \newcommand{\Z}{\mathbb{Z}} \newcommand{\N}{\mathbb{N}} \newcommand{\La}{{\mathcal{L}_p}} \newcommand{\s}{\ensuremath{^*}} \newcommand{\p}{\ensuremath{^\prime}} \newcommand{\pp}{\ensuremath{^{\prime\prime}}} \newcommand{\biimp}{\Leftrightarrow} \newcommand{\imp}{\Rightarrow} \newcommand{\impby}{\Leftarrow} \newcommand{\setBuilder}[2]{\left\{#1\left|#2\right.\right\}} \newcommand{\idealBuilder}[2]{\left\langle#1\left|#2\right.\right\rangle} \newcommand{\card}[1]{\left|#1\right|} \newcommand{\grobner}{Gr\"obner} \newcommand{\proofPart}[1]{{\bf $\boldsymbol{#1}$:}} \newcommand{\proofCase}[1]{\proofPart{\text{The case }#1}} \newcommand{\proofSubPart}[1]{{\underline{${#1}$:}}} \newcommand{\icode}[1]{\hspace{20pt}\mbox{#1}} \newcommand{\msm}[1]{\msmSym\left({#1}\right)} \newcommand{\con}[3]{\conSym\left({#1},{#2},{#3}\right)} \newcommand{\cont}[1]{\conSym\left({#1}\right)} \newcommand{\hilb}[1]{\hilbSym\left({#1}\right)} \newcommand{\decom}[1]{\irr\left({#1}\right)} \newcommand{\ming}[1]{\min\left({#1}\right)} \newcommand{\deSym}{\phi} \newcommand{\de}[1]{\deSym\left(#1\right)} \newcommand{\ideal}[1]{\left<#1\right>} \newcommand{\mono}[1]{\text{M}\left(#1\right)} \newcommand{\expo}[2]{e_{#1}\left({#2}\right)} \newcommand{\set}[1]{\left\{{#1}\right\}} \newcommand{\lcmlat}[1]{\lcmLatSym\left({#1}\right)} \newcommand{\lcmlatp}[1]{\lcmLatSym^\prime\left({#1}\right)} \newcommand{\degx}[2]{\ensuremath{\deg_{x_{#1}}\!\!\left({#2}\right)}} \newcommand{\projSym}{\ensuremath{\pi}} \newcommand{\proj}[1]{\ensuremath{\projSym\left({#1}\right)}} \begin{document} \maketitle \tableofcontents This is a minimal manual for Frobby. At present it contains information on how to install Frobby on your system, as well as documentation in the form of a tutorial which shows how to do most things that Frobby can do. The most complete reference for the functionality of Frobby is the help system built into Frobby. However that system may be \emph{too} complete to serve as a good introduction, and this manual is intended to cover that area. This manual will be expanded in time to cover the algorithms that Frobby uses, explain the file formats in detail and cover the mathematical meaning of the computations that Frobby performs. \section{Installation} Frobby is tested to work on Linux, Mac OS 10.5 and Cygwin on Windows. It may work on other platforms, but that has not been tested. Although the procedure to install Frobby is the same on these platforms, Frobby requires the GMP library, which is installed in different ways depending on platform. \subsection{Cygwin preparation} Before installing Frobby, first run the Cygwin file setup.exe, and then install the following Cygwin packages. \begin{description} \item[libgmp-devel] In category libs. For infinite-precision integers. \item[make] In category devel. To build Frobby. \item[gcc-g++] In category devel. To compile Frobby. \item[diffutils] In category utils. For Frobby's test system, which uses diff. \end{description} \subsection{Mac OS 10.5 preparation using Fink} If you have fink installed on your system, simply type \begin{verbatim} fink install gmp-shlibs libgmpxx-shlibs \end{verbatim} \subsection{Linux or Mac preparation without Fink} Download the newest version of GMP from \url{http://gmplib.org/} and unpack it somewhere. Then start a terminal, go to the directory where you unpacked it, and type \begin{verbatim} ./configure --enable-cxx make make check make install \end{verbatim} Typing ``make check'' is optional but recommended to make sure that your system compiled GMP properly. If you have trouble installing GMP, first consult the GMP manual and then ask for help on the gmp-discuss@gmplib.org mailing list. \subsection{Installation of Frobby} This step is the same on all platforms. First download the latest version of Frobby from \url{http://www.broune.com/frobby/}. Then open a terminal, go to the directory where you downloaded Frobby, and type \begin{verbatim} tar -xvf frobby_v0.8.2.tar.gz cd frobby_v0.8.2 make make install \end{verbatim} To see if your installation of Frobby is working, type \begin{verbatim} frobby \end{verbatim} You should now be looking at information about Frobby and its help system. If you instead get a message along the lines of ``command not found'', type \begin{verbatim} bin/frobby \end{verbatim} If that works, the install script was not able to place Frobby in a convenient place on your system, probably because you don't have the access rights to install programs centrally on your system. In that case you can simply call Frobby as bin/frobby from the directory where you unpacked it, or you can place the binary somewhere on your path where you do have access rights to put it. If you want to check that your Frobby compiled correctly, type \begin{verbatim} make test \end{verbatim} This will run a comprehensive battery of tests on Frobby, which can take a while, especially on Cygwin, which is generally a slower platform. \section{Tutorial} This is a tutorial on how to use the command line interface for Frobby. \subsection{File formats} All of the file formats that Frobby understands are files that will make sense to some other piece of mathematical software as well. In general Frobby will figure out by itself which of the possible formats you are using, and will produce output in that same format, so this is not something you normally have to think about. In this tutorial we will be using the Macaulay 2 format, which looks like this: \begin{verbatim} R = QQ[a, b, c, d]; I = monomialIdeal( a^2, a*b^5, c ); \end{verbatim} This describes the monomial ideal $\ideal{a^2,a*b^5,c}$ as an ideal in the polynomial ring $\Q[a,b,c]$. There is some syntaxtic noice in this file format, such as ``I = monomialIdeal('', which is solely there so that Macaulay 2 will understand the file. In general, if the variables are $x_1,\ldots,x_n$ and the generators are $g_1,\ldots,g_k$, then the corresponding file will look like \begin{verbatim} R = QQ[x1,...,xn]; I = monomialIdeal( g1, ..., gk ); \end{verbatim} It is important to note that Frobby does not understand Macaulay 2 code at all -- it merely reads this very specific file format. This is why Frobby is so fussy about this precise syntax being used. E.g. this is not valid: \begin{verbatim} T = QQ[a, b, c, d]; I = monomialIdeal( a^2, a*b^5, c ); \end{verbatim} The error is that it must be ``R='' and not ``T='', so Frobby will display the error \begin{verbatim} SYNTAX ERROR (format m2, line 1): Expected R, but got "T". \end{verbatim} Likewise, this will also result in an error: \begin{verbatim} R = QQ[a, b, c, d]; I = monomialideal( a\^2, a*b\^5, c ); \end{verbatim} The error is that the second i in ``monomialIdeal'' is lower-case, and it is supposed to be upper-case. Frobby will diplay the error \begin{verbatim} SYNTAX ERROR (format m2, line 2): Expected monomialIdeal, but got "monomialideal". \end{verbatim} There is one particular error that is easy to make, namely that indeterminates in the same monomial must be separated by an asterisk *. This is because indeterminates can have names of more than one character, so otherwise there is no way to distinguish between the product of a and b and a single indeterminate named ab. Thus on this input: \begin{verbatim} R = QQ[a, b, c]; I = monomialIdeal( a^2b, b*c^2, c^3*a^3 ); \end{verbatim} Frobby will produce the following error: \begin{verbatim} SYNTAX ERROR (format m2, line 3): Expected ), but got "b". \end{verbatim} Frobby is expecting a right parenthesis because that would make sense after the 2 on line 3, seeing as there is no * there. Note that Frobby does not care about additional space, and it does not distinguish between a space and a newline. To see a list of all file formats that Frobby supports, type \begin{verbatim} frobby help io \end{verbatim} To see an example of a monomial ideal in a format X, type \begin{verbatim} frobby genideal -oformat X \end{verbatim} If you do not specify a format, the Macaulay 2 format will be used, so if you type simply \begin{verbatim} frobby genideal \end{verbatim} You will get something like \begin{verbatim} R = QQ[x1, x2, x3]; I = monomialIdeal( x1^3*x2^5*x3^6, x1^2*x2^6*x3, x1^5*x2^2*x3^8, x1^8*x2*x3^3, x1^5*x2^4*x3^7 ); \end{verbatim} However, genideal generates a random ideal, so every time you run it, you will likely get a different ideal. \subsection{An example file and transformation} We will need an example to run the following commands on, so take the following lines and put them into a file called ``input''. \begin{verbatim} R = QQ[a, b, c]; I = monomialIdeal( a^2*b, b*c^2, c^3*a^3 ); \end{verbatim} To check that you wrote the format correctly, try to get Frobby to read the file by typing \begin{verbatim} frobby transform < input \end{verbatim} If you get an error from Frobby, then you didn't type the file in correctly. Note how transform produced output in the Macaulay 2 format. If you want to transform your file into a different format, you can do so by typing \begin{verbatim} frobby transform < input -oformat monos \end{verbatim} which will produce output in a format that can be understood by the program Monos. It will print \begin{verbatim} vars a, b, c; [ a^2*b, b*c^2, a^3*c^3 ]; \end{verbatim} In general Frobby uses the first non-space character of an input file to figure out what format it is in, and it then produces output in that same format, unless you specify the input or output format explicitly using the command-line options -oformat and -iformat. In general you tell frobby to do something by typing \begin{verbatim} frobby ACTION OPTIONS \end{verbatim} where ACTION is something to do, and OPTIONS is a possibly empty list of options that specify how to do that thing. Thus you can make the transform action behave in a number of different ways depending on the options you give it. To take a look at everything that transform can do, type \begin{verbatim} frobby help transform \end{verbatim} In general you can get information on any action by typing \begin{verbatim} frobby help ACTION \end{verbatim} where ACTION is the name of the action. To get a list of all actions, type \begin{verbatim} frobby help \end{verbatim} \subsection{Compute the Alexander dual of an ideal} To compute the Alexander dual of our ideal, type \begin{verbatim} frobby alexdual < input \end{verbatim} which produces the output \begin{verbatim} R = QQ[a, b, c]; I = monomialIdeal( b*c, a^2*c^2, a*b ); \end{verbatim} And it is indeed true that the Alexander dual of $\ideal{a^2b,bc^2,a^3c^3}$ is $\ideal{bc,a^2c^2,ab}$. By default Frobby will compute the Alexander dual of the input according to the point that is the least common multiple of the minimal generators of the input ideal. To use some other point, append that monomial at the end of the file. We can append a line by using echo and cat like this: \begin{verbatim} echo a^10*b^10*c^10|cat input - \end{verbatim} which prints \begin{verbatim} R = QQ[a, b, c]; I = monomialIdeal( b*c, a^2*c^2, a*b ); a^10*b^10*c^10 \end{verbatim} so if we feed this to alexdual like this: \begin{verbatim} echo a^10*b^10*c^10|cat input -|frobby alexdual \end{verbatim} we get the Alexander dual of the ideal according to $a^{10}b^{10}c^{10}$, which is \begin{verbatim} R = QQ[a, b, c]; I = monomialIdeal( b^10*c^8, a^9*c^9, a^8*b^10 ); \end{verbatim} To see the options that alexdual accepts, type \begin{verbatim} frobby help alexdual \end{verbatim} Also note that you generally don't have to type actions out, you only have to specify a unique prefix. So to get the Alexander dual, it is sufficient to type \begin{verbatim} frobby al < input \end{verbatim} However, it is not enough to just type \begin{verbatim} frobby a < input \end{verbatim} Since this is ambigous with the actions assoprimes and analyze, that also have ``a'' as a prefix. In this case, Frobby reports that: \begin{verbatim} ERROR: Prefix "a" is ambigous. Possibilities are: alexdual assoprimes analyze \end{verbatim} \subsection{\hp{} Series} To get the \hps{}, type \begin{verbatim} frobby hilbert < input \end{verbatim} which produces the output \begin{verbatim} R = QQ[a, b, c]; p = 1 + -b*c^2 + -a^2*b + a^2*b*c^2 + -a^3*c^3 + a^3*b*c^3; \end{verbatim} This means that the numerator of the \hps{} of $\ideal{a^2b,bc^2,a^3c^3}$ is \[ 1 -bc^2 -a^2b + a^2bc^2 -a^3c^3 + a^3bc^3 \] so the series itself is \[ \frac{ 1 -bc^2 -a^2b + a^2bc^2 -a^3c^3 + a^3bc^3 }{ (1-a)(1-b)(1-c)} \] This is the multivariate, $\N^n$-graded hilbert series. You may want the numerator of the univariate \hps{}, which you get by typing \begin{verbatim} frobby hilbert < input -univariate \end{verbatim} This produces the output \begin{verbatim} R = QQ[t]; p = t^7 + -t^6 + t^5 + -2*t^3 + 1; \end{verbatim} so the univariate \hps{} is \[ \frac{ t^7 -t^6 + t^5 -2t^3 + 1}{(1-t)^3} \] Frobby always uses the variable $t$ for the univariate series. The univariate series is gotten from the multivariate series by substituting $t$ for each of the variables in the ring, in this case $a=t$, $b=t$ and $c=t$. \subsection{Intersection of ideals} We will now intersect two ideals, so we need another file with an ideal in it. Type the following ideal into a file named input2: \begin{verbatim} R = QQ[d, b, c]; I = monomialIdeal( d*b*c, b^2*c ); \end{verbatim} This is the ideal $\ideal{dbc,b^2c}$. To intersect that with the ideal $\ideal{a^2b,bc^2,a^3c^3}$, we will need to concatenate the two files representing these two ideals. This is done by typing \begin{verbatim} cat input input2 \end{verbatim} which produces the output \begin{verbatim} R = QQ[a, b, c]; I = monomialIdeal( a^2*b, b*c^2, a^3*c^3 ); R = QQ[d, b, c]; I = monomialIdeal( d*b*c, b^2*c ); \end{verbatim} If we pass this to the intersect action, we will get the intersection. So type \begin{verbatim} cat input input2|frobby intersect \end{verbatim} to get the output \begin{verbatim} R = QQ[a, b, c, d]; I = monomialIdeal( b*c^2*d, b^2*c^2, a^2*b*c*d, a^2*b^2*c ); \end{verbatim} Note that we now have 4 variables in the first line, since the two ideals together used these 4 variables. We see that the intersection is \[ \ideal{ bc^2d, b^2c^2, a^2bcd, a^2b^2c} \] \subsection{Irreducible decomposition} To get the irreducible decomposition, type \begin{verbatim} frobby irrdecom < input \end{verbatim} which produces the output \begin{verbatim} R = QQ[a, b, c]; I = monomialIdeal( b, c^3 ); I = monomialIdeal( a^2, c^2 ); I = monomialIdeal( a^3, b ); \end{verbatim} Note how the list of the variables does not have to be repeated because all three ideals lie in the same ring. This is saying that the irreducible decomposition of $\ideal{a^2b,bc^2,a^3c^3}$ is \[ \set{\ideal{b,c^3},\ideal{a^2,c^2},\ideal{a^3,b}} \] Then it should be true that the intersection of these three ideals is the original ideal, and indeed, if we type \begin{verbatim} frobby irrdecom < input|frobby intersection \end{verbatim} we get the output \begin{verbatim} R = QQ[a, b, c]; I = monomialIdeal( b*c^2, a^2*b, a^3*c^3 ); \end{verbatim} This format for a list of the irreducible components takes up a lot of space and is not the easiest to read. We can get a more compact notation by encoding each irreducible ideal as the product of its generators, noting that this is a bijection between irreducible ideals and monomials. Do this by typing \begin{verbatim} frobby irrdecom < input -encode \end{verbatim} to get the output \begin{verbatim} R = QQ[a, b, c]; I = monomialIdeal( b*c^3, a^2*c^2, a^3*b ); \end{verbatim} Here the monomial generator $bc^3$ corresponds to the irreducible ideal $\ideal{b,c^3}$. \subsection{Primary decomposition} Frobby can compute primary decompositions as well as irreducible decompositions. We need an example where there is a difference between these two things, so type this into a file named input3: \begin{verbatim} R = QQ[d, b, c]; I = monomialIdeal( d*b*c, b^2*c, b^10, d^10 ); \end{verbatim} To get the primary decomposition, type \begin{verbatim} frobby primdecom < input3 \end{verbatim} which produces the decomposition \begin{verbatim} R = QQ[d, b, c]; I = monomialIdeal( d^10, b^10, c ); I = monomialIdeal( d*b, d^10, b^2 ); \end{verbatim} Note that these two ideals are primary, and that their intersection equals the original ideal (you should know how to check the intersection yourself by now). An irreducble decomposition is also a primary decomposition, since an irreducible ideal is primary, but the irreducible decomposition can have many more elements than the primary decomposition does. In this case it has one more, since we get the irreducible decomposition by typing \begin{verbatim} frobby irrdecom < input3 \end{verbatim} which produces the output \begin{verbatim} R = QQ[d, b, c]; I = monomialIdeal( d, b^2 ); I = monomialIdeal( d^10, b ); I = monomialIdeal( d^10, b^10, c ); \end{verbatim} The primary decomposition is not unique, but Frobby computes the ``nicest'' primary decomposition, which is the one gotten by intersecting irreducible components of the same support, and that primary decomposition is unique. \subsection{Associated primes} You get the associated primes by typing \begin{verbatim} frobby assoprimes < input3 \end{verbatim} \begin{verbatim} R = QQ[d, b, c]; I = monomialIdeal( d*b, d*b*c ); \end{verbatim} Each generator encodes an associated prime. In this case the associated primes are $\ideal{d,b}$ and $\ideal{d,b,c}$. You can check that these are the radicals of the primary components, \subsection{Transform a polynomial} Transform does a number of things to ideals, and ptransform is the corresponding action for polynomials. Put a polynomial into the file pinput by typing \begin{verbatim} frobby hilbert < input > pinput \end{verbatim} Then type \begin{verbatim} cat pinput \end{verbatim} to get \begin{verbatim} R = QQ[a, b, c]; p = 1 + -b*c^2 + -a^2*b + a^2*b*c^2 + -a^3*c^3 + a^3*b*c^3; \end{verbatim} This is a file that Macaulay 2 can understand. To change the format of this file to something that Singular can understand, type \begin{verbatim} frobby ptransform < pinput -oformat singular \end{verbatim} to get \begin{verbatim} ring R = 0, (a, b, c), lp; int noVars = 0; poly p = 1 -b*c^2 -a^2*b +a^2*b*c^2 -a^3*c^3 +a^3*b*c^3; \end{verbatim} You might notice that the Singular format has something called noVars. This is there merely because all Frobby formats must be able to represent a ring with no variables, and Singular has no such concept. Thus Frobby gets around that by always giving the ring at least one variable, but writing noVars=1 if there really should not be any, and noVars=0 otherwise. To get the polynomial into a format that 4ti2 might have produced, if it had a concept of polynomials, type \begin{verbatim} frobby ptransform < pinput -oformat 4ti2 \end{verbatim} to get \begin{verbatim} 6 4 1 0 0 0 -1 0 1 2 -1 2 1 0 1 2 1 2 -1 3 0 3 1 3 1 3 (coefficient) a b c \end{verbatim} The first line indicates the size of the matrix, and each row of the matrix is a term, with the first number being the coefficient, and the remaining numbers being the exponent vector. I.e. the exponent of $a$, $b$ and $c$ respectively in that order. To see what else ptransform can do, type \begin{verbatim} frobby help ptransform \end{verbatim} Note that if we knew in advance that we wanted to change the format to, say, 4ti2 format, we could have produced the file pinput in that format directly by typing \begin{verbatim} frobby hilbert < input > pinput -oformat 4ti2 \end{verbatim} \subsection{Maximal standard monomials} To produce the maximal standard monomials, type \begin{verbatim} frobby maxstandard < input3 \end{verbatim} to get \begin{verbatim} R = QQ[d, b, c]; I = monomialIdeal( d^9*b^9 ); \end{verbatim} \subsection{The Frobenius problem} Given an input vector $p=(p_1,\ldots,p_n)$ of positive relatively prime integers, the Frobenius number of $p$ is the largest integer that cannot be written as a linear combination of $p_1,\ldots,p_n$ where the coefficients in the combination are non-negative integers. To work with this, put the following example in a file named frob \begin{verbatim} 6 10 15 \end{verbatim} and type \begin{verbatim} frobby frobdyn < frob \end{verbatim} to get as output that the Frobenius number is \begin{verbatim} 29 \end{verbatim} The frobdyn action uses an obscenely slow dynamic programming algorithm to compute the Frobenius number. If you install the program 4ti2 and put it into the empty 4ti2 subfolder of the Frobby folder, you can use an algorithm that is much faster when the Frobenius number itself is moderately large. Assume that you have installed 4ti2 in that folder. Then, within the Frobby folder, type \begin{verbatim} ./frobgrob frob \end{verbatim} which will produce the same output, namely \begin{verbatim} 29 \end{verbatim} Now put this input into a file named frob2 \begin{verbatim} 1234567890001 348461546433 6484646532513541 45464188888115164 1561484651561864468465310 \end{verbatim} and type \begin{verbatim} ./frobgrob frob2 \end{verbatim} to get that the Frobenius number is \begin{verbatim} 15111053020091472900 \end{verbatim} This computation would never have completed using the dynfrob action. Note that you get better performance if you sort the numbers in increasing order. Note that ./frobgrob is a script that uses 4ti2 and the frobgrob action of Frobby. This is a bit annoying to get right, which is why there is a script doing it. To get a hint on how to do this yourself directly without using the script, take a look at the script, look at the documentation for 4ti2, and type \begin{verbatim} frobby help frobgrob \end{verbatim} to get an idea about what input frobgrob expects. You can also generate random Frobenius instances by typing \begin{verbatim} frobby genfrob \end{verbatim} to produce something like \begin{verbatim} 4259 8346 12295 18936 22645 27086 34182 69298 74617 84570 \end{verbatim} The output is random, so you will likely get a different instance. \subsection{Analyze an ideal} To get Frobby to analyze the ideal and tell you what it figured out about it, type \begin{verbatim} frobby analyze < input \end{verbatim} which produces the output \begin{verbatim} 3 generators 3 variables \end{verbatim} This is admittedly not an impressive level of analysis being performed. To see a few more things that analyze can do, type \begin{verbatim} frobby help analyze \end{verbatim} The idea is that this action will be expanded to provide actual valuable information, such as whether the ideal is strongly generic, if it is weakly generic, strongly/weakly co-generic, how many irreducible and primary components it has, if any of the given generators are non-minimal and various things like that. \begin{verbatim} \end{verbatim} \end{document} frobby-0.9.5/fixspace000077500000000000000000000040741401527164200145470ustar00rootroot00000000000000#!/bin/bash # Does the following operations on the files passed as arguments: # - Remove trailing space from lines # - Remove trailing blank lines # - Remove/convert DOS-style line breaks # - Expand tabs to spaces with a tabspace of 4 # I once had an error where the conversion had an error (the computer # didn't have dos2unix), resulting in the converted files being empty. # The result was that every file got replaced by an empty file! That # was not so nice, so this script stops operation as soon as any error # occurs, and it also checks that only space has been changed before # it overwrites the original file with a space-fixed version. for f in $*; do echo $f; tr -d '\r' < $f > __spaceTmp1; if [ $? != 0 ]; then echo "There was an error removing DOS-style line breaks."; exit 1; fi; sed 's/[[:blank:]]*$//g' < __spaceTmp1 > __spaceTmp2; if [ $? != 0 ]; then echo "There was an error eliminating trailing space from lines."; exit 1; fi; # Make completely sure that we only changed the spaces diff -EbwB -q $f __spaceTmp2; if [ $? != 0 ]; then echo "There was an error. Conversion not confirmed correct."; exit 1; fi; sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' < __spaceTmp2 > __spaceTmp3; if [ $? != 0 ]; then echo "There was an error eliminating trailing blank lines."; exit 1; fi; # We have to do diff twice, because diff will not ignore trailing # lines that consist only of spaces. It will ignore changes to space and removal of # completely empty lines, so if we do it twice we get the right thing. # Make completely sure that we only changed the spaces diff -EbwB -q __spaceTmp2 __spaceTmp3; if [ $? != 0 ]; then echo "There was an error. Conversion not confirmed correct."; exit 1; fi; diff -q $f __spaceTmp3 1>/dev/null; if [ $? != 0 ]; then mv -f __spaceTmp3 $f; if [ $? != 0 ]; then echo "There was an error moving fixed file into place."; exit 1; fi; echo "Fixed space issue for $f." fi rm -f __spaceTmp1 __spaceTmp2 __spaceTmp3; if [ $? != 0 ]; then echo "There was an error removing temporary files."; exit 1; fi; done; frobby-0.9.5/frobgrob000077500000000000000000000012161401527164200145420ustar00rootroot00000000000000#!/bin/bash file="$1" # the input file shift # important as any remaining options are passed on to Frobby fti2=4ti2/4ti2gmp # where to find 4ti2 # make input file $file.out.mat from $file in the format that 4ti2 expects echo -n "1 " > $file.out.mat wc $file | sed "s/ *[0-9]* *\([0-9]*\) *.*/\1/" >> $file.out.mat cat $file >> $file.out.mat # run 4ti2 to compute Grobner basis $fti2 zbasis $file.out > /dev/null # make $file.out.lat (not required) $fti2 groebner $file.out > /dev/null # make $file.out.gro # run frobby to compute Frobenius number from Grobner basis cat $file.out.gro $file | bin/frobby optimize -chopFirstAndSubtract -maxStandard $* frobby-0.9.5/refgrob000077500000000000000000000001351401527164200143650ustar00rootroot00000000000000#!/bin/bash cat data/frob/$1.gro data/frob/$1 | bin/frobby frobgrob $2 $3 $4 $5 $6 $7 $8 $9 frobby-0.9.5/refgrob2000077500000000000000000000001411401527164200144440ustar00rootroot00000000000000#!/bin/bash cat test/frob/$1.out.gro test/frob/$1 | bin/frobby frobgrob $2 $3 $4 $5 $6 $7 $8 $9 frobby-0.9.5/save/000077500000000000000000000000001401527164200137505ustar00rootroot00000000000000frobby-0.9.5/save/InputAction.h000066400000000000000000000071241401527164200163620ustar00rootroot00000000000000class FrobeniusInputAction : public InputAction { public: FrobeniusInputAction(const string& filename, bool loadGrobnerBasis): _filename(filename), _loadGrobnerBasis(loadGrobnerBasis) { } virtual ~FrobeniusInputAction() { } virtual void execute(BigIdeal& ideal, vector& grading, const Configuration& configuration) { readDegreesLog(_filename, grading, configuration); sort(grading.begin(), grading.end()); if (_loadGrobnerBasis) { fourti2::readGrobnerBasisLog(_filename + ".gro", ideal, configuration); } else { BigIdeal basis; fourti2::computeKernelLatticeBasisLog (grading, basis, _filename + ".4ti2", configuration); if (configuration.getLllReduce()) fplll::reduceLatticeBasisLog(basis, configuration); if (configuration.getAdjustBasis()) fplll::makeZeroesInLatticeBasisLog(basis, configuration); fourti2::writeLatticeBasis(_filename + ".lat", basis); fourti2::computeGrobnerBasisLog (basis, ideal, _filename + ".gro", configuration); } } virtual void adjustDefaults(Configuration& configuration) { configuration.setComputeFrobeniusNumber(true); configuration.setUseBound(true); configuration.setUsePartition(false); configuration.setSkipRedundant(false); } private: void readDegreesLog(const string& filename, vector& degrees, const Configuration& configuration) { Timer timer; if (configuration.getPrintActions()) cerr << "Reading Frobenius input from file \"" << filename << "\". " << flush; readDegrees(filename, degrees); if (configuration.getPrintActions()) cerr << timer << endl; } void readDegrees(const string& filename, vector& degrees) { degrees.clear(); ifstream in(filename.c_str()); string number; while (in >> number) { for (unsigned int i = 0; i < number.size(); ++i) { if (!('0' <= number[i] && number[i] <= '9')) { cerr << "ERROR: Input file \"" << filename << "\" contains the character \"" << number[i] << "\"." << endl; cerr << "Only whitespace and the digits 0-9 are valid." << endl; exit(0); } } // number cannot represent a negative number as '-' is not // valid in the input and would have been caught above. Degree n(number); if (n == 0 || n == 1) { cerr << "ERROR: Input file \"" << filename << "\" contains the number " << n << "." << endl; cerr << "Only integers strictly larger than 1 are valid." << endl; exit(0); } degrees.push_back(Degree(number)); } if (degrees.size() <= 1) { cerr << "ERROR: Input file \"" << filename; if (degrees.empty()) cerr << "\" does not contain any numbers." << endl; else cerr << "\" only contains one number." << endl; cerr << "At least 2 numbers are required." << endl; exit(0); } Degree gcd = degrees[0]; for (unsigned int i = 1; i < degrees.size(); ++i) mpz_gcd(gcd.get_mpz_t(), gcd.get_mpz_t(), degrees[i].get_mpz_t()); if (gcd != 1) { cerr << "ERROR: The numbers contained in input file \"" << filename << " are not relatively prime." << endl; cerr << "The numbers are required to be relatively prime." << endl; cerr << "A list of integers are relatively prime if and only if "; cerr << "one is the greatest number that divides all of them." << endl; cerr << "In this case " << gcd << " divides all the numbers, "; cerr << "so they are not relatively prime." << endl; exit(0); } } string _filename; bool _loadGrobnerBasis; }; frobby-0.9.5/save/Lexer.cpp000066400000000000000000000066651401527164200155500ustar00rootroot00000000000000class Lexer { enum TokenType { INTEGER = 0, END_OF_FILE = 1, IDENTIFIER = 2, CHARACTER = 3 } _tokenType; public: Lexer(istream& in): _in(in) { nextToken(); } bool match(char c) { if ((_tokenType == IDENTIFIER && _identifier.size() == 1 && _identifier[0] == c) || (_tokenType == CHARACTER && _character == c)) { nextToken(); return true; } else return false; } bool match(const char* str) { if (_tokenType == IDENTIFIER && _identifier == str) { nextToken(); return true; } else return false; } void expect(char expected) { if (!match(expected)) { cerr << "ERROR: expected '" << expected << "' but got "; printToken(cerr); cerr << '.' << endl; exit(0); } } void expectIdentifier(const char* str) { if (!match(str)) { cerr << "ERROR: expected \"" << str << "\" but got "; printToken(cerr); cerr << '.' << endl; exit(0); } } void expectEOF() { ensureType(END_OF_FILE); } void readInteger(mpz_class& integer) { ensureType(INTEGER); integer = _integer; nextToken(); } void readInteger(unsigned int& i) { ensureType(INTEGER); if (!_integer.fits_uint_p()) { cerr << "ERROR: expected 32 bit unsigned integer but got " << _integer << "." << endl; exit(0); } i = _integer.get_ui(); nextToken(); } void readIdentifier(string& identifier) { ensureType(IDENTIFIER); identifier = _identifier; nextToken(); } private: int getChar() { return _in.get(); } int peek() { return _in.peek(); } void ensureType(TokenType type) { if (_tokenType != type) { cerr << "Expected "; printTokenType(cerr, type); cerr << " but got "; printToken(cerr); cerr << '.' << endl; exit(0); } } void eatWhite() { while (isspace(peek())) getChar(); } void nextToken() { eatWhite(); int c = peek(); if (c == EOF) _tokenType = END_OF_FILE; else if (isdigit(c)) { _tokenType = INTEGER; _in >> _integer; } else if (c == '-' || c == '+') { getChar(); eatWhite(); if (isdigit(peek())) { _tokenType = INTEGER; _in >> _integer; if (c == '-') _integer *= -1; // TODO: look up more efficient way to swap sign } else { _tokenType = CHARACTER; _character = c; } } else if (isalpha(c)) { _tokenType = IDENTIFIER; _identifier.clear(); do _identifier += getChar(); while (isalnum(peek())); } else { _tokenType = CHARACTER; _character = getChar(); } } void printTokenType(ostream& out, TokenType type) { switch (type) { case END_OF_FILE: out << "end of file"; break; case INTEGER: out << "an integer"; break; case CHARACTER: out << "a character"; break; case IDENTIFIER: out << "an identifier"; break; default: ASSERT(false); } } void printToken(ostream& out) { switch (_tokenType) { case END_OF_FILE: out << "end of file"; break; case INTEGER: out << _integer; break; case CHARACTER: out << '\'' << _character << '\''; break; case IDENTIFIER: out << '"' << _identifier << '"'; break; default: ASSERT(false); } } mpz_class _integer; string _identifier; char _character; istream& _in; }; frobby-0.9.5/save/MlfbAlgorithm.cpp2000066400000000000000000000316251401527164200172740ustar00rootroot00000000000000#include class MlfbAlgorithm { public: MlfbAlgorithm(const mpz_class& initialNumber, const vector >& terms, const Degree** degrees, /*TranspositionTable& transpositionTable,*/ bool printProgress = false): _dim(terms[0].size()), _maximumDegreeSeen(0), _printProgress(printProgress), _degrees(degrees), _handler(_dim, terms), _solution(_dim), _callCounts(_dim), _lastProgressPos(0) { ExternalTerm b(_handler); SortedTermList termList(_handler); recurse(b, -initialNumber, termList); //* for (int i = 0; i < _dim; ++i) cout << "Level " << i + 1 << " had " << _callCounts[i] << " calls. " << endl; //*/ } Degree getCalculatedFrobeniusNumber() { return _maximumDegreeSeen; } private: vector bs; void recurse(const ExternalTerm& b, const Degree& degree, const SortedTermList& terms) { ASSERT(!terms.empty()); int position = terms.position(); ++_callCounts[position]; if (position == _dim - 2) { baseCase(b, degree, terms); return; } //cout << " at " << position << "with b="< 0); ASSERT(_handler.getExponent(&*term, position + 1) > 0); newB.setExponent(position, _handler.getExponent(&*nextTerm, position) - 1); newB.setExponent(position + 1, _handler.getExponent(&*term, position + 1) - 1); _solution[position] = &*nextTerm; _solution[position + 1] = &*term; newDegree = degree + _degrees[position][newB[position]] + _degrees[position + 1][newB[position + 1]]; registerSolution(newB, newDegree); ++term; ++nextTerm; } } void improveB(ExternalTerm& b, const SortedTermList& terms) { int position = terms.position() + 1; ExternalTerm lcm(b); SortedTermList::iterator end = terms.end(); for (SortedTermList::iterator it = terms.begin(); it != end; ++it) _handler.lcm(lcm, lcm, &*it, position); vector gcds; gcds.reserve(_dim); for (int i = 0; i < _dim; ++i) gcds.push_back(lcm); for (SortedTermList::iterator it = terms.begin(); it != end; ++it) { for (int i = position; i < _dim; ++i) { Exponent exponent = _handler.getExponent(&*it, i); if (exponent > b[i]) _handler.gcd(gcds[i], gcds[i], &*it, position); } } for (int i = position; i < _dim; ++i) { gcds[i][i] -= 1; _handler.lcm(b, b, gcds[i].getTerm(), position); } } bool canSkipDueToUpperBound(const SortedTermList& terms, const Degree& degree) { int position = terms.position(); if (position > _dim - 3) return false; ExternalTerm lcm(_handler); SortedTermList::iterator end = terms.end(); for (SortedTermList::iterator it = terms.begin(); it != end; ++it) _handler.lcm(lcm, lcm, &*it, position); Degree upperBound = degree; for (int i = position; i < _dim; ++i) { ASSERT(lcm[i] > 0); upperBound += _degrees[i][lcm[i] - 1]; } if (upperBound <= _maximumDegreeSeen) return true; if (false) { // too expensive to compute due to GMP being called Degree maxMinLoss = 0; // loss of degree for (SortedTermList::iterator it = terms.begin(); it != end; ++it) { Degree minLoss = -1; for (int i = position; i < _dim; ++i) { Degree loss = _degrees[i][lcm[i] - 1] - _degrees[i][_handler.getExponent(&*it, i)]; if (minLoss == -1 || loss < minLoss) minLoss = loss; } if (minLoss > maxMinLoss) maxMinLoss = minLoss; } if (upperBound - maxMinLoss <= _maximumDegreeSeen) return true; } // This works almost as well while being much faster to compute. // It is still too expensive a bound. if (false) { SortedTermList::iterator bestCandidate = end; int maxMinValue = -1; for (SortedTermList::iterator it = terms.begin(); it != end; ++it) { int minValue = -1; for (int i = position; i < _dim; ++i) { int value = lcm[i] - _handler.getExponent(&*it, i); if (minValue == -1 || value < minValue) { minValue = value; } } if (maxMinValue == -1 || minValue > maxMinValue) { maxMinValue = minValue; bestCandidate = it; } } ASSERT(bestCandidate != end); Degree minLoss = -1; for (int i = position; i < _dim; ++i) { Degree loss = _degrees[i][lcm[i] - 1] - _degrees[i][_handler.getExponent(&*bestCandidate, i)]; if (minLoss == -1 || loss < minLoss) minLoss = loss; } if (upperBound - minLoss <= _maximumDegreeSeen) return true; } return false; } void registerSolution(const ExternalTerm& b, const Degree& degree) { //cout << "solution: " << b << endl; ++_callCounts[_dim - 1]; //static map > seen; //static int co = 0, dupCo = 0; // if (!seen[b].empty()) { /* cout << "!!!!!!!!!!!!" << endl; cout << "solution " << b; cout << " attained by two different label vectors." << endl; cout << "vector1:" << endl; for (unsigned int i = 0; i < seen[b].size(); ++i) { cout << i + 1 << ": "; _handler.write(seen[b][i], cout); cout << endl; } cout << "vector2:" << endl; for (unsigned int i = 0; i < _solution.size(); ++i) { cout << i + 1 << ": "; _handler.write(_solution[i], cout); cout << endl; } exit(0); */ // ++dupCo; //} // seen[b] = _solution; //++co; //cout << co << ' ' << dupCo << ' '<< ((double)dupCo)/ co << '\n'; if (degree > _maximumDegreeSeen) _maximumDegreeSeen = degree; } void printProgress(const SortedTermList& terms, SortedTermList::iterator it) { // Do not print progress more than once every 5 seconds. if (terms.position() >= _lastProgressPos && _progressTimer.getSeconds() < 5) return; _progressTimer.reset(); _lastProgressPos = terms.position(); // begin is the place we actually start the work from. SortedTermList::iterator begin = terms.begin(); terms.getFirstLarger(0, begin); int doneCount = distance(begin, it); int all = terms.size() - distance(terms.begin(), begin); double doneRatio = ((double)doneCount)/all; cout << "At level=" << terms.position() << ": " << setprecision(3) << doneCount << '/' << all << '=' << doneRatio * 100.0 << "% done in " << _timer << '.' << endl; } int _dim; Degree _maximumDegreeSeen; bool _printProgress; const Degree** _degrees; Timer _timer; Timer _progressTimer; TermHandler _handler; vector _solution; // TranspositionTable& _transpositionTable; vector _callCounts; int _lastProgressPos; }; // returns the maximal id in this position. inline Exponent compressRange(const vector >& input, vector >& output, const mpz_class& degree, Degree*& precomputedDegrees, int position) { // Collect the exponents. vector exponents; for (unsigned int i = 0; i < input.size(); ++i) exponents.push_back(input[i][position]); // Sort the exponents and remove duplicates. sort(exponents.begin(), exponents.end()); vector::iterator uniqueEnd = unique(exponents.begin(), exponents.end()); exponents.erase(uniqueEnd, exponents.end()); // Construct a map from the exponent values that we will need to // look at to the id numbers we will be working on from now on. // // The set of id numbers must be such that every exponent that // appears has an id. Also, each exponent minus one must have an id, // as the partial solution will use such values. The ids must have // the same sorted order as the numbers they are ids for. // // This of course makes it impossible to see how much an entry // should contribute towards the degree just from looking at the id, // so we must precompute the degree that corresponds to each id. map rangeReduction; rangeReduction[0] = 0; precomputedDegrees = new Degree[exponents.size() * 2 + 1]; precomputedDegrees[0] = 0; // range is the largest id we have assigned so far. unsigned int range = 0; mpz_class lastExponent = 0; ASSERT(exponents[0] == 0); for (unsigned int i = 1; i < exponents.size(); ++i) { const mpz_class& exponent = exponents[i]; // We must only assign exponent - 1 a new id if // we have not already done so. if (exponent > lastExponent + 1) { ++range; rangeReduction[exponent - 1] = range; precomputedDegrees[range] = (exponent - 1) * degree; } ++range; rangeReduction[exponent] = range; precomputedDegrees[range] = exponent * degree; lastExponent = exponent; } // Apply the range compression map. for (unsigned int i = 0; i < input.size(); ++i) output[i][position] = rangeReduction[input[i][position]]; return range; } inline mpz_class computeFrobeniusNumber(const vector >& terms, const vector& degrees, bool printProgress = false) { ASSERT(!terms.empty()); if (degrees.size() == 2) return degrees[0] * degrees[1] - degrees[0] - degrees[1]; // Before we can use MlfbAlgorithm, we need to compress the range of // the inputs so that we are sure the exponents will fit in 32 bits. unsigned int dimension = terms[0].size(); vector > rangeReducedTerms(terms.size()); for (unsigned int i = 0; i < terms.size(); ++i) rangeReducedTerms[i].resize(dimension); Degree** precomputedDegrees = new Degree*[dimension]; // TranspositionTable transpositionTable(dimension); for (unsigned int position = 0; position < dimension; ++position) { /*Exponent range = */compressRange(terms, rangeReducedTerms, degrees[position + 1], precomputedDegrees[position], position); // transpositionTable.setRange(position, range); } // Now we can use MlfbAlgorithm with the compressed range. MlfbAlgorithm algo(degrees[0], rangeReducedTerms, (const Degree**)precomputedDegrees, // transpositionTable, printProgress); // Clean up the allocated memory. for (unsigned int i = 0; i < dimension; ++i) delete[] precomputedDegrees[i]; delete[] precomputedDegrees; return algo.getCalculatedFrobeniusNumber(); } frobby-0.9.5/save/PackedTermHandler.cpp000066400000000000000000000346131401527164200200000ustar00rootroot00000000000000 class PackedTermHandler { class RankCompare; class LexComparator; public: class ExternalTerm; class Term { public: unsigned int getIndex() const { return index; } private: friend class PackedTermHandler; friend class PackedTermHandler::RankCompare; friend class PackedTermHandler::ExternalTerm; int index; mutable const Term* lastDivider; unsigned int support; Exponent exponents[1]; }; unsigned int getTermSizeInBytes() const { return sizeof(Exponent) * (_exponentWords + 3); } typedef Ranker Ranker; static bool vectorCompare(const vector& a, const vector& b) { ASSERT(a.size() == b.size()); for (int i = 0; i < (int)a.size(); ++i) { if (a[i] < b[i]) return true; if (a[i] > b[i]) return false; } return false; } PackedTermHandler(int dimension, const vector >& termsUnsorted): _rankers(0) { vector > terms(termsUnsorted); std::sort(terms.begin(), terms.end(), vectorCompare); _size = terms.size(); _dimension = dimension; _exponentWords = (_dimension + 3) >> 2; _termMemory = (Term*)new char[terms.size() * getTermSizeInBytes()]; for (int i = 0; i < (int)terms.size(); ++i) { Term* term = (Term*)indexToMemory(i); initializeExponents(term, terms[i].begin(), terms[i].end()); term->support = computeSupport(term); term->lastDivider = 0; term->index = i; } computeRanks(); } ~PackedTermHandler() { delete[] _rankers; delete[] _termMemory; } void fillArraySorted(const Term** array) { for (int i = 0; i < (int)size(); ++i) array[i] = indexToMemory(i); } Ranker::Predicate getLexPredicate(int position) { return _rankers[position].getPredicate(); } int getDimension() const { return _dimension; } size_t size() const { return _size; } void getFirstLarger(const Term**& begin, const Term** end, Exponent largerThanThisE, int position) const { unsigned int largerThanThis = (unsigned int)largerThanThisE; unsigned int mask = 0xFF000000 >> ((position & 3) << 3); largerThanThis = largerThanThis << ((3 - (position & 3)) << 3); position = position >> 2; /* if (begin == end) return; // cout << "at getFirstLarger begin="; // write(*begin, cout); cout << " largerThanThis=" << largerThanThis << " largerThanThisE=" << largerThanThisE; */ while (begin != end && (((*begin)->exponents[position]) & mask) <= largerThanThis) ++begin; } void lcm(ExternalTerm& target, const ExternalTerm& source1, const Term* source2, int position) { /* cout << "doing lcm. target="; write(target._term, cout); cout << " source1="; write(source1._term, cout); cout << " source2="; write(source2, cout); cout << " position=" << position << endl;*/ position = position >> 2; for (int i = position; i < _exponentWords; ++i) { Exponent e1 = source1._term->exponents[i]; Exponent e2 = source2->exponents[i]; Exponent exponent = 0xFF000000 & max(e1, e2); Exponent result = exponent; exponent = max(e1 & 0x00FF0000, e2 & 0x00FF0000); result |= exponent; exponent = max(e1 & 0x0000FF00, e2 & 0x0000FF00); result |= exponent; exponent = max(e1 & 0x000000FF, e2 & 0x000000FF); result |= exponent; target._term->exponents[i] = result; } /* for (int i = position; i < _dimension; ++i) { Exponent e1 = getExponent(source1._term, i); Exponent e2 = getExponent(source2, i); target.setExponent(i, e1 > e2 ? e1 : e2); } */ #ifdef PROFILE if (_dimension == 1000000) { combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); } #endif } bool someDivides(const Term** begin, const Term** end, const Term* term, const Term*& divisorParam, int originalPosition) { ASSERT(originalPosition != _dimension); // cout << "dpos=" << originalPosition; unsigned int mask = 0x80808080 >> ((originalPosition & 3) << 3); int position = originalPosition >> 2; unsigned int support = term->support; const Exponent* exponents = term->exponents + position; const Exponent* exponentsEnd = term->exponents + _exponentWords; for (const Term** it = begin; it != end; ++it) { const Term* divisor = *it; if (supportsPrecludeDivision(divisor->support, support, originalPosition)) { // cout << " [support " << divisor->support << ' ' << support << ' ' << originalPosition << ']'; goto DoesNotDivide; } { const Exponent* divIt = divisor->exponents + position; const Exponent* exp = exponents; if ((*exp - *divIt) & mask) { // cout << "[first]"; goto DoesNotDivide; } ++divIt; ++exp; for (; exp != exponentsEnd; ++divIt, ++exp) if ((*exp - *divIt) & 0x80808080) goto DoesNotDivide; /* write(*it, cout); cout << " divides "; write(term, cout); cout << endl;*/ divisorParam = divisor; return true; } DoesNotDivide:; /* write(*it, cout); cout << " does not divide "; write(term, cout); cout << endl;*/ } #ifdef PROFILE if (_dimension == 1000000) { combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); } #endif return false; } bool someDivides(const Term** begin, const Term** end, const ExternalTerm& term, const Term*& divisorParam, int position) { return someDivides(begin, end, term._term, divisorParam, position); } bool divides(const Term* divisor, const ExternalTerm& divided, int position) { ASSERT(position != _dimension); /* cout << "does "; write(divisor, cout); cout << " divide "; write(divided._term, cout); cout << "?" << endl;*/ if ((divisor->support & ~(divided._term->support)) >> position) return false; unsigned int mask = 0x80808080 >> ((position & 3) << 3); position = position >> 2; const Exponent* divisorIt = divisor->exponents + position; const Exponent* dividedIt = divided._term->exponents + position; const Exponent* dividedEnd = divided._term->exponents + _exponentWords; if ((*dividedIt - *divisorIt) & mask) return false; ++dividedIt; ++divisorIt; for (; dividedIt != dividedEnd; ++dividedIt, ++divisorIt) if ((*dividedIt - *divisorIt) & 0x80808080) return false; // cout << "yes" << endl; #ifdef PROFILE if (_dimension == 1000000) { combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); combatInlining();combatInlining();combatInlining();combatInlining();combatInlining();combatInlining(); } #endif return true; } const Term* getLastDivider(const Term* term) { return term->lastDivider; } void setLastDivider(const Term* term, const Term* divider) { term->lastDivider = divider; } Exponent getExponent(const Term* term, int position) const { unsigned int adjustment = (3 - (position & 3)) << 3; position = position >> 2; return (term->exponents[position] >> adjustment) & 0x000000FF; } Exponent getWord(const Term* term, int position) const { return term->exponents[position]; } int getWordCount() const { return _exponentWords; } bool write(const Term* term, ostream& out) const { out << '(' << getExponent(term, 0); for (int i = 1; i < _dimension; ++i) out << ", " << getExponent(term, i); out << ')'; /* out << "~[" << getWord(term, 0); for (int i = 1; i < _exponentWords; ++i) out << ", " << getWord(term, i); out << ']';*/ return out; } private: void initializeExponents(Term* term, vector::iterator begin, vector::iterator end) { Exponent* exponent = term->exponents; ASSERT(distance(begin,end) == _dimension); int variablesToGo = _dimension; while (variablesToGo > 0) { int value = 0; for (int i = 0; i < 4; ++i) { value <<= 8; if (variablesToGo == 0) continue; if (begin != end) { ASSERT(*begin <= 127); value |= *begin; ++begin; --variablesToGo; } } *exponent = value; ++exponent; } } unsigned int computeSupport(const Term* term) const { unsigned int support = 0; for (int i = _exponentWords - 1; i >= 0; --i) { // hex 7F is binary 0111111, so adding 7F to 0aaaaaaa will give // 1bbbbbbb exactly if any a is different from 0. So doing this // and anding with hex 80 (which is 10000000) tests for zero. unsigned int spreadSubSupport = term->exponents[i] + 0x7F7F7F7F; unsigned int subSupport = ((spreadSubSupport & 0x80000000) >> 31) | ((spreadSubSupport & 0x00800000) >> 22) | ((spreadSubSupport & 0x00008000) >> 13) | ((spreadSubSupport & 0x00000080) >> 4); // subSupport now contains the support of exponents[i] in // the lower 4 bits. if (i == _exponentWords - 1) { int bits = ((_dimension - 1) & 3) + 1; support = (support << bits) | (subSupport >> (4 - bits)); } else support = (support << 4) | subSupport; } /* cout << hex << "the support of"; write(term, cout); cout << " is " << support << endl;*/ return support; } static unsigned int supportsPrecludeDivision(unsigned int divisor, unsigned int divided, int position) { return (divisor & ~divided) >> position; } class LexComparator { public: LexComparator(PackedTermHandler& handler, int position): _handler(handler), _position(position) { } bool operator()(const Term* a, const Term* b) const { /* _handler.write(a, cout); cout << "<"; _handler.write(b,cout); cout << " for position=" << _position << "? ";*/ unsigned int mask = 0xFFFFFFFF >> ((_position & 3) << 3); for (int i = _position >> 2; i < _handler.getWordCount(); ++i) { Exponent aEntry = _handler.getWord(a, i) & mask; Exponent bEntry = _handler.getWord(b, i) & mask; mask = 0xFFFFFFFF; // Yes, this actually does lex comparison on the exponents // contained within. if (aEntry < bEntry) { // cout << "true" << endl; return true; } if (aEntry > bEntry) { // cout << "false" << endl; return false; } } // cout << "false" << endl; return false; } private: PackedTermHandler& _handler; int _position; }; void computeRanks() { const Term** buffer = new const Term*[_size]; fillArraySorted(buffer); _rankers = new Ranker[_dimension]; for (int position = 0; position < _dimension; ++position) _rankers[position].init(buffer, buffer + _size, LexComparator(*this, position)); delete[] buffer; } int indexOf(const Term* term) const { return term->index; } const Term* indexToMemory(int index) const { return (const Term*)((char*)_termMemory + index * getTermSizeInBytes()); } void combatInlining() const { ((PackedTermHandler*)this)->computeRanks(); } void setExponent(Term* term, int position, Exponent value) const { // cout << "(setting " << value << ")"; value = value << ((3 - (position & 3)) << 3); unsigned int mask = 0xFF000000 >> ((position & 3) << 3); position = position >> 2; term->exponents[position] = (term->exponents[position] & ~mask) | value; } int _dimension; int _exponentWords; Ranker* _rankers; Term* _termMemory; size_t _size; public: friend class ExternalTerm; class ExternalTerm { friend class PackedTermHandler; public: ExternalTerm(const ExternalTerm& term): _handler(term._handler) { _term = (Term*)new char[_handler.getTermSizeInBytes()]; _term->support = term._term->support; copy(term._term->exponents, term._term->exponents + _handler.getWordCount(), _term->exponents); } ExternalTerm(const PackedTermHandler& handler): _handler(handler) { _term = (Term*)new char[_handler.getTermSizeInBytes()]; _term->support = 0; fill_n(_term->exponents, _handler.getWordCount(), 0); } ~ExternalTerm() { delete[] _term; } const Exponent* begin(int position) const { return _term->exponents + position; } const Exponent* end() const { return _term->exponents + _handler.getDimension(); } bool write(ostream& out) const { return _handler.write(_term, out); } Exponent operator[](int position) const { return _handler.getExponent(_term, position); } void setExponent(int position, Exponent value) const { _handler.setExponent(_term, position, value); } unsigned int getSupport() const { return _term->support; } void updateSupport() { _term->support = _handler.computeSupport(_term); } private: Term* _term; const PackedTermHandler& _handler; }; }; /* typedef PackedTermHandler TermHandler; typedef PackedTermHandler::Term Term; typedef PackedTermHandler::ExternalTerm ExternalTerm; */ ostream& operator<<(ostream& out, const PackedTermHandler::ExternalTerm& term) { term.write(out); return out; } frobby-0.9.5/save/PrimaryDecomAction.cpp000066400000000000000000000023441401527164200202100ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "PrimaryDecomAction.h" #include "BigIdeal.h" #include "IOFacade.h" PrimaryDecomAction::PrimaryDecomAction(): Action (staticGetName(), "Computes the primary decomposition of monomial ideals.", "TODO", false) { } void PrimaryDecomAction::obtainParameters(vector& parameters) { Action::obtainParameters(parameters); } void PrimaryDecomAction::perform() { // TODO } const char* PrimaryDecomAction::staticGetName() { return "primdecom"; } frobby-0.9.5/save/PrimaryDecomAction.h000066400000000000000000000020601401527164200176500ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef PRIMARY_DECOM_ACTION_GUARD #define PRIMARY_DECOM_ACTION_GUARD #include "Action.h" class PrimaryDecomAction : public Action { public: PrimaryDecomAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); }; #endif frobby-0.9.5/save/TermTreeWalkerAlgos000066400000000000000000000074331401527164200175650ustar00rootroot00000000000000 bool getDivisor(const Term* term) const { if (empty()) return false; _walker->goToRoot(); _walker->stepDown(); while (true) { while (_walker->getNode()->getExponent() <= _handler->getExponent(term, _position + _walker->getLevel() - 1)) { if (!_walker->canStepDown()) return true; _walker->stepDown(); } while (!_walker->canStepRight()) { _walker->stepUp(); if (_walker->atRoot()) return false; } _walker->stepRight(); } } // mergeSubtree assumes the sub-trees are of equal height and // non-empty. TODO: adjust for _threshold. bool mergeSubtree(TreeWalker& toWalker, TreeWalker& fromWalker) { if (!fromWalker.canStepDown()) return false; bool changed = false; int rootLevel = fromWalker.getLevel(); // The goto's in this method are unfortunate, but I have not found // a good way to get rid of them. stepDown: fromWalker.stepDown(); if (toWalker.getNode()->getChild()->getExponent() > fromWalker.getNode()->getExponent()) { toWalker.insertUnder(fromWalker.getNode()->getExponent()); toWalker.stepDown(); copySubtree(toWalker, fromWalker); changed = true; goto moveOn; } toWalker.stepDown(); while (true) { // Now toWalker's exponent <= fromWalker's exponent. Then we // step toWalker right as long as this property is preserved. while (toWalker.canStepRight() && toWalker.getNode()->getNext()->getExponent() <= fromWalker.getNode()->getExponent()) toWalker.stepRight(); // If the exponents are equal then we need to merge the subtrees // of the current positions. if (toWalker.getNode()->getExponent() == fromWalker.getNode()->getExponent()) { if (fromWalker.canStepDown()) goto stepDown; } else { ASSERT(toWalker.getNode()->getExponent() < fromWalker.getNode()->getExponent()); // Due to the previous right-stepping of toWalker, we know that // the correct place to insert the new subtree is immediately to // the right of toWalker. toWalker.insertRightOf(fromWalker.getNode()->getExponent()); toWalker.stepRight(); copySubtree(toWalker, fromWalker); changed = true; } moveOn: while (!fromWalker.canStepRight()) { fromWalker.stepUp(); toWalker.stepUp(); if (fromWalker.getLevel() == rootLevel) return changed; } fromWalker.stepRight(); } } void copySubtree(TreeWalker& toWalker, TreeWalker& fromWalker) { if (!fromWalker.canStepDown()) return; int rootLevel = fromWalker.getLevel(); while (true) { while (fromWalker.canStepDown()) { fromWalker.stepDown(); toWalker.insertUnder(fromWalker.getNode()->getExponent()); toWalker.stepDown(); } while (!fromWalker.canStepRight()) { fromWalker.stepUp(); toWalker.stepUp(); if (fromWalker.getLevel() == rootLevel) return; } fromWalker.stepRight(); toWalker.insertRightOf(fromWalker.getNode()->getExponent()); toWalker.stepRight(); } } bool insertProjectionOf(const TermTree& tree, Exponent from, Exponent to) { if (tree.empty()) return false; ExternalTerm term(*_handler); TreeWalker* toWalker = _walker;//(*this); TreeWalker* fromWalker = tree._walker;//((TermTree&)tree); toWalker->goToRoot(); fromWalker->goToRoot(); fromWalker->stepDown(); bool changed = false; while (true) { if (to < fromWalker->getNode()->getExponent()) break; if (from <= fromWalker->getNode()->getExponent()) { if (empty()) { copySubtree(*toWalker, *fromWalker); changed = true; } else changed |= mergeSubtree(*toWalker, *fromWalker); } if (!fromWalker->canStepRight()) break; fromWalker->stepRight(); } return changed; } frobby-0.9.5/save/bounds000066400000000000000000000113531401527164200151700ustar00rootroot00000000000000class FrobeniusStrategy : public Strategy { public: FrobeniusStrategy(const vector& degrees, mpz_class* frobeniusNumber, TermHandler& handler): _dimension(handler.getDimension()), _partialDegrees(handler.getDimension()), _degreeMultiples(0), _initialDegree(degrees[0]), _handler(handler), _frobeniusNumber(frobeniusNumber) { ASSERT(_dimension >= 3); // TODO: handle the case _dimension == 3 ASSERT(degrees.size() == _dimension + 1); ASSERT(frobeniusNumber != 0); createDegreeMultiples(degrees); } virtual ~FrobeniusStrategy() { ASSERT(_degreeMultiples != 0); for (unsigned int i = 0; i < _dimension; ++i) delete[] _degreeMultiples[i]; delete[] _degreeMultiples; *_frobeniusNumber = _maximumDegreeSeen; } virtual bool consideringCall(const ExternalTerm& b, SortedTermList::iterator it, const SortedTermList& terms) { return true; } virtual bool startingCall(const ExternalTerm& b, const SortedTermList& terms) { int position = terms.position(); if (position == 0) _partialDegrees[0] = -_initialDegree; else { const Degree& degree = _degreeMultiples[position - 1][b[position - 1]]; _partialDegrees[position] = _partialDegrees[position - 1] + degree; } return !canSkipDueToUpperBound(terms, _partialDegrees[position]); } virtual void endingCall(const ExternalTerm& b, const SortedTermList& terms) { } virtual void foundSolution(const ExternalTerm& b) { Degree degree = _partialDegrees[_dimension - 2] + _degreeMultiples[_dimension - 2][b[_dimension - 2]] + _degreeMultiples[_dimension - 1][b[_dimension - 1]]; if (degree > _maximumDegreeSeen) _maximumDegreeSeen = degree; } private: bool canSkipDueToUpperBound(const SortedTermList& terms, const Degree& degree) { unsigned int position = terms.position(); if (position > _dimension - 3) return false; ExternalTerm lcm(_handler); SortedTermList::iterator end = terms.end(); for (SortedTermList::iterator it = terms.begin(); it != end; ++it) _handler.lcm(lcm, lcm, &*it, position); Degree upperBound = degree; for (unsigned int i = position; i < _dimension; ++i) { ASSERT(lcm[i] > 0); upperBound += _degreeMultiples[i][lcm[i] - 1]; } if (upperBound <= _maximumDegreeSeen) return true; if (false) { // too expensive to compute Degree maxMinLoss = 0; // loss of degree for (SortedTermList::iterator it = terms.begin(); it != end; ++it) { Degree minLoss = -1; for (unsigned int i = position; i < _dimension; ++i) { Degree loss = _degreeMultiples[i][lcm[i] - 1] - _degreeMultiples[i][_handler.getExponent(&*it, i)]; if (minLoss == -1 || loss < minLoss) minLoss = loss; } if (minLoss > maxMinLoss) maxMinLoss = minLoss; } if (upperBound - maxMinLoss <= _maximumDegreeSeen) return true; } // This works almost as well while being much faster to compute. // It is still too expensive a bound. if (false) { SortedTermList::iterator bestCandidate = end; int maxMinValue = -1; for (SortedTermList::iterator it = terms.begin(); it != end; ++it) { int minValue = -1; for (unsigned int i = position; i < _dimension; ++i) { int value = lcm[i] - _handler.getExponent(&*it, i); if (minValue == -1 || value < minValue) { minValue = value; } } if (maxMinValue == -1 || minValue > maxMinValue) { maxMinValue = minValue; bestCandidate = it; } } ASSERT(bestCandidate != end); Degree minLoss = -1; for (unsigned int i = position; i < _dimension; ++i) { Degree loss = _degreeMultiples[i][lcm[i] - 1] - _degreeMultiples[i][_handler.getExponent(&*bestCandidate, i)]; if (minLoss == -1 || loss < minLoss) minLoss = loss; } if (upperBound - minLoss <= _maximumDegreeSeen) return true; } return false; } void createDegreeMultiples(const vector& degrees) { ASSERT(_degreeMultiples == 0); ASSERT(degrees.size() == _dimension + 1); _degreeMultiples = new Degree*[_dimension]; for (unsigned int position = 0; position < _dimension; ++position) { const vector& decompressionMap = _handler.getDecompressionMap(position); _degreeMultiples[position] = new Degree[decompressionMap.size()]; for (Exponent exponent = 0; exponent < decompressionMap.size(); ++exponent) _degreeMultiples[position][exponent] = _handler.getDecompressionMap(position)[exponent] * degrees[position + 1]; } } unsigned int _dimension; vector _partialDegrees; Degree** _degreeMultiples; Degree _initialDegree; Degree _maximumDegreeSeen; TermHandler& _handler; mpz_class* _frobeniusNumber; }; frobby-0.9.5/save/debugMsmStrategy000066400000000000000000000041411401527164200171610ustar00rootroot00000000000000class DebugMsmStrategy : public DecoratorMsmStrategy { public: DebugMsmStrategy(MsmStrategy* strategy): DecoratorMsmStrategy(strategy), _level(0) { } virtual void doingIndependenceSplit(const MsmSlice& slice, Ideal* mixedProjectionSubtract) { fprintf(stderr, "DEBUG %lu: doing independence split.\n", (unsigned long)_level); fflush(stderr); DecoratorMsmStrategy::doingIndependenceSplit (slice, mixedProjectionSubtract); } virtual void doingIndependentPart(const Projection& projection, bool last) { fprintf(stderr, "DEBUG %lu: doing independent part\n", (unsigned long)_level); if (last) fputs(" (last)", stderr); fputs(".\n", stderr); fflush(stderr); DecoratorMsmStrategy::doingIndependentPart(projection, last); } virtual bool doneWithIndependentPart() { fprintf(stderr, "DEBUG %lu: done with that independent part.\n", (unsigned long)_level); fflush(stderr); return DecoratorMsmStrategy::doneWithIndependentPart(); } virtual void doneWithIndependenceSplit() { fprintf(stderr, "DEBUG %lu: done with independence split.\n", (unsigned long)_level); fflush(stderr); DecoratorMsmStrategy::doneWithIndependenceSplit(); } void getPivot(Term& pivot, MsmSlice& slice) { DecoratorMsmStrategy::getPivot(pivot, slice); fprintf(stderr, "DEBUG %lu: performing pivot split on ", (unsigned long)_level); pivot.print(stderr); fputs(".\n", stderr); fflush(stderr); } size_t getLabelSplitVariable(const MsmSlice& slice) { size_t var = DecoratorMsmStrategy::getLabelSplitVariable(slice); fprintf(stderr, "DEBUG %lu: performing label split on var %lu.\n", (unsigned long)_level, (unsigned long)var); fflush(stderr); return var; } void consume(const Term& term) { fprintf(stderr, "DEBUG %lu: Writing ", (unsigned long)_level); term.print(stderr); fputs(" to output.\n", stderr); fflush(stderr); DecoratorMsmStrategy::consume(term); } private: size_t _level; }; frobby-0.9.5/save/decompose.ms000066400000000000000000000001671401527164200162730ustar00rootroot00000000000000$g := read(data-source($1)); $t := current-time(); $d := decompose($g); write(lex-order($d)); write($d); write(";\n"); frobby-0.9.5/save/decomposeAlexanderDual.scm000066400000000000000000000003651401527164200210700ustar00rootroot00000000000000(let* ((file (vector-ref command-line-arguments 0)) (input (open-input-file file)) (generator (eval (read input)) ) (decomposition (decompose-ideal generator direction: #t method: 'alex-dual) ) ) (write decomposition) ) frobby-0.9.5/save/decomposeScarfComplex.scm000066400000000000000000000003531401527164200207420ustar00rootroot00000000000000(let* ((file (vector-ref command-line-arguments 0)) (input (open-input-file file)) (generator (eval (read input)) ) (decomposition (decompose-ideal generator method: 'scarf-complex) ) ) (write decomposition) ) frobby-0.9.5/save/fourti2Runner000066400000000000000000000023321401527164200164570ustar00rootroot00000000000000 void computeKernelLatticeBasis(const vector& degrees, BigIdeal& basis, const string& originalFilename) { string filename = "__4ti2.tmp"; deleteFile(filename + ".lat"); deleteFile(filename + ".mat"); deleteFile(filename); writeDegrees(degrees, filename); string cmd = "zbasis -parb --quiet " + filename + " > /dev/null"; system(cmd.c_str()); readLatticeBasis(filename + ".lat", basis); deleteFile(filename + ".lat"); cmd = "mv -f " + filename + " " + originalFilename + ".mat"; system(cmd.c_str()); } void computeGrobnerBasis(const BigIdeal& latticeBasis, BigIdeal& grobnerBasis, const string& outputFilename) { string filename = "__4ti2.tmp"; deleteFile(filename + ".gro"); deleteFile(filename + ".lat"); deleteFile(filename); writeLatticeBasis(filename + ".lat", latticeBasis); string cmd = "groebner -parb --quiet " + filename + " > /dev/null"; system(cmd.c_str()); readGrobnerBasis(filename + ".gro", grobnerBasis); deleteFile(outputFilename); cmd = "mv -f " + filename + ".gro " + outputFilename; system(cmd.c_str()); deleteFile(filename + ".lat"); } frobby-0.9.5/save/fplllRunner000066400000000000000000000010031401527164200161700ustar00rootroot00000000000000 void reduceLatticeBasis(BigIdeal& basis) { ASSERT(!basis.empty()); string filename = "__4ti2.tmp"; unsigned int rowCount = basis.size(); unsigned int columnCount = basis[0].size(); writeLatticeBasis(filename, basis); stringstream cmd; cmd << "~/Desktop/fplll-1.3/fast m " << rowCount << ' ' << columnCount << " < " + filename << " > " + filename + ".out"; system(cmd.str().c_str()); readLatticeBasis(filename + ".out", rowCount, columnCount, basis); } frobby-0.9.5/save/improveB000066400000000000000000000013621401527164200154600ustar00rootroot00000000000000 void improveB(ExternalTerm& b, const TermTree& tree) { int position = tree.getPosition() + 1; if (_dimension - position < 10) return; ExternalTerm lcm(_dimension); tree.lcm(lcm); vector gcds; gcds.reserve(_dimension); for (int i = 0; i < (int)_dimension; ++i) gcds.push_back(lcm); ExternalTerm term(_dimension); TermTree::TreeIterator treeIt((TermTree&)tree); while (!treeIt.atEnd()) { treeIt.getTerm(term); for (int i = position; i < (int)_dimension; ++i) if (term[i] > b[i]) gcds[i].gcd(gcds[i], term, position); ++treeIt; } for (int i = position; i < (int)_dimension; ++i) { gcds[i][i] -= 1; b.lcm(b, gcds[i], position); } } frobby-0.9.5/save/labelling000066400000000000000000000037621401527164200156340ustar00rootroot00000000000000void IrreducibleDecomFacade:: printLabels(BigIdeal& bigIdeal, FILE* out, const string& format) { Ideal ideal(bigIdeal.getVarCount()); TermTranslator translator(bigIdeal, ideal); Ideal idealCopy(ideal); Ideal decom(ideal.getVarCount()); if (idealCopy.getGeneratorCount() > 0) translator.addArtinianPowers(idealCopy); computeIrreducibleDecom(idealCopy, new DecomRecorder(&decom)); // idealCopy gets cleared here, which is why we make a copy. beginAction("Computing labels"); IdealWriter* writer = IOHandler::getIOHandler(format)->createWriter(out, &translator); size_t varCount = decom.getVarCount(); Ideal::const_iterator decomEnd = decom.end(); for (Ideal::const_iterator d = decom.begin(); d != decomEnd; ++d) { Term de(*d, varCount); fputc('*', out); writer->writeJustATerm(de); fputc('\n', out); for (size_t var = 0; var < varCount; ++var) if (de[var] == 0) de[var] = translator.getMaxId(var); vector > labels(varCount + 1); Ideal::const_iterator end = ideal.end(); for (Ideal::const_iterator it = ideal.begin(); it != end; ++it) { if (de.dominates(*it)) { size_t equalVar = 0; size_t equalCount = 0; for (size_t var = 0; var < varCount; ++var) { if (de[var] == (*it)[var]) { equalVar = var; ++equalCount; } } if (equalCount == 1) labels[equalVar].push_back(*it); else labels[varCount].push_back(*it); } } for (size_t var = 0; var <= varCount; ++var) { if (var == varCount && labels[var].empty()) continue; if (var < varCount) fprintf(out, " %s:", translator.getNames().getName(var).c_str()); else fputs(" other:", out); if (var < varCount && de[var] == translator.getMaxId(var)) fputs(" unbounded", out); for (size_t i = 0; i < labels[var].size(); ++i) { if (i != 0) fputc(',', out); writer->writeJustATerm(Term(labels[var][i], varCount)); } fputc('\n', out); } fputc('\n', out); } endAction(); } frobby-0.9.5/save/m2Script000066400000000000000000000002721401527164200153770ustar00rootroot00000000000000load "__m2tmp.in"; file = "__m2tmp.out" << ""; file << "R = ZZ[" << toString(generators(R)) << "];" << endl; file << toString(irreducibleDecomposition(I)) << ";" << endl << close; quit; frobby-0.9.5/save/m2Script2000066400000000000000000000002721401527164200154610ustar00rootroot00000000000000load "__m2tmp.in"; file = "__m2tmp.out" << ""; file << "R = ZZ[" << toString(generators(R)) << "];" << endl; file << toString(irreducibleDecomposition(I)) << ";" << endl << close; quit; frobby-0.9.5/save/monosScript000066400000000000000000000002041401527164200162070ustar00rootroot00000000000000cp $1 ~/Desktop/monos/src cd ~/Desktop/monos/src run $3 decompose.ms $1 > $2 rm $1 cd ~/Desktop/frobby mv ~/Desktop/monos/src/$2 $2 frobby-0.9.5/save/packedTerm.h000066400000000000000000000215341401527164200162050ustar00rootroot00000000000000#ifndef _PACKED_TERM_H_GUARD #define _PACKED_TERM_H_GUARD #include #include #include "Integer.h" #include class PackedTerm; ostream& operator<<(ostream& out, const PackedTerm& term); #define PACKED_TERM_NO_SUPPORT // defining PACKED_TERM_NO_SUPPORT removes the optimization of storing // the support. This may improve performance or it may degrade it, // depending on the input. #ifdef PACKED_TERM_NO_SUPPORT #define SUPPORT(X) #else #define SUPPORT(X) X #endif // This class represents a term by packing four 7-bit exponents into a // single 32 bit word like this: 0aaaaaaa0bbbbbbb0ccccccc0ddddddd // where aaaaaaa is the exponent at offset 0, bbbbbbb is the exponent // at offset 1 and so on. The zeroes waste 1 bit per exponent, but // they are necessary to check for overflow without resorting to // assembly code. They also make it possible to check for overflow // more efficiently than otherwise. // // Settings::VariableCount has to be less than or equal to 32 because // the support of the term is stored in a 32-bit int. Enlarging this // int or just turning this optimization off (by defining // PACKED_TERM_NO_SUPPORT) will remove this limitation. // // Nitpick: making Settings::VariableCount so astronomically large // that the degree of a term might possible be unrepresentable in a // 31-bit unsigned integer will necessitate adding checks for degree // overflow. // // See SimpleTerm for documentation of the interface. class PackedTerm { // divide by 4 and round up static const unsigned int wordCount = (Settings::VariableCount + 3) / 4; public: typedef unsigned int Exponent; static Exponent getMaximalExponent() {return 127;} struct Uninit {}; PackedTerm(Uninit) {} PackedTerm(): sumOfExps(0) { SUPPORT(support = 0); for (unsigned int i = 0; i < wordCount; ++i) exponents[i] = 0; } PackedTerm(Exponent e0, Exponent e1, Exponent e2, Exponent e3 = 0): sumOfExps(e0 + e1 + e2 + e3) { ASSERT(Settings::VariableCount >= 4); if (e0 > getMaximalExponent() || e1 > getMaximalExponent() || e2 > getMaximalExponent() || e3 > getMaximalExponent()) overflow(); exponents[0] = e3 | (e2 << 8) | (e1 << 16) | (e0 << 24); for (unsigned int i = 1; i < wordCount; ++i) exponents[i] = 0; SUPPORT(recalculateSupport()); } template PackedTerm(iter begin, iter end): sumOfExps(0) { SUPPORT(support = 0); Exponent* expsIt = exponents; int variablesToGo = Settings::VariableCount; for (; begin != end && variablesToGo > 0; ++expsIt) { int v = 0; for (int i = 0; i < 4; ++i) { v <<= 8; if (variablesToGo == 0) continue; if (begin != end) { if (*begin > getMaximalExponent()) overflow(); v |= *begin; sumOfExps += *begin; ++begin; --variablesToGo; } } *expsIt = v; } Exponent* expsEnd = exponents + wordCount; for (; expsIt != expsEnd; ++expsIt) *expsIt = 0; SUPPORT(recalculateSupport()); } void multiply(const PackedTerm& a, const PackedTerm& b) { SUPPORT(result.support = a.support | b.support); sumOfExps = a.sumOfExps + b.sumOfExps; for (unsigned int i = 0; i < wordCount; ++i) exponents[i] = a.exponents[i] + b.exponents[i]; // If the sum of the exponents is within bounds, surely the // exponents are too. Otherwise, we need to check that they are. if (sumOfExps > getMaximalExponent()) for (unsigned int i = 0; i < wordCount; ++i) if (exponents[i] & 0x80808080) overflow(); } void divide(const PackedTerm& a, const PackedTerm& b) { ASSERT(a.isDivisibleBy(b)); sumOfExps = a.sumOfExps - b.sumOfExps; for (unsigned int i = 0; i < wordCount; ++i) exponents[i] = a.exponents[i] - b.exponents[i]; SUPPORT(recalculateSupport()); } bool isDivisibleBy(const PackedTerm& term) const { if (sumOfExps < term.sumOfExps SUPPORT(|| (term.support & ~support))) return false; for (unsigned int i = 0; i < wordCount; ++i) if ((exponents[i] - term.exponents[i]) & 0x80808080) return false; return true; } bool hasDisjunctSupport(const PackedTerm& term) const { #ifdef PACKED_TERM_NO_SUPPORT // hex 7F is binary 0111111, so adding 7F to 0aaaaaaa will give // 1bbbbbbb exactly if any a is different from 0. So doing this // and and-ing with hex 80 (which is 10000000) tests for zero. for (unsigned int i = 0; i < wordCount; ++i) if ((exponents[i] + 0x7F7F7F7F) & (term.exponents[i] + 0x7F7F7F7F) & 0x80808080) return false; return true; #else return (support & term.support) == 0; #endif } Exponent degree() const { return sumOfExps; } unsigned int max(unsigned int a, unsigned int b) const {return a > b ? a : b;} void leastCommonMultiple(const PackedTerm& a, const PackedTerm& b) { sumOfExps = 0; for (unsigned int i = 0; i < wordCount; ++i) { unsigned int ae = a.exponents[i]; unsigned int be = b.exponents[i]; unsigned int exponent = 0xFF000000 & max(ae, be); sumOfExps += exponent >> 24; unsigned int result = exponent; exponent = max(ae & 0x00FF0000, be & 0x00FF0000); sumOfExps += exponent >> 16; result |= exponent; exponent = max(ae & 0x0000FF00, be & 0x0000FF00); sumOfExps += exponent >> 8; result |= exponent; exponent = max(ae & 0x000000FF, be & 0x000000FF); sumOfExps += exponent; result |= exponent; exponents[i] = result; } SUPPORT(recalculateSupport()); } const Exponent operator[](int i) const { ASSERT(0 <= i && i < (int)Settings::VariableCount); // The endianness on an x86 is backwards from what we need, so we // have to turn around the value modulo 4. This could probably be // done more efficiently by working at the word level and doing // bit manipulation, but this function is not called anywhere that // needs to be efficient. int j = i & 3; // notice that "& 3" is the same as "% 4" return (int)((unsigned char*)exponents)[i - j + 3 - j]; } bool operator==(const PackedTerm& term) const { if (sumOfExps != term.sumOfExps SUPPORT(|| support != term.support)) return false; for (unsigned int i = 0; i < wordCount; ++i) if (exponents[i] != term.exponents[i]) return false; return true; } bool operator<(const PackedTerm& term) const { return compare(*this, term) < 0; } static int compare(const PackedTerm& a, const PackedTerm& b) { int sumDiff = a.sumOfExps - b.sumOfExps; if (sumDiff != 0) return sumDiff; #ifndef PACKED_TERM_NO_SUPPORT // I think this is a net win, but maybe not. Should do more // testing. The point is that we know that the terms are // different, so we do not have to test for i < wordCount. if (a.support != b.support) { for (unsigned int i = 0;; ++i) { Exponent ea = a.exponents[i]; Exponent eb = b.exponents[i]; if (ea == eb) continue; return (int)(eb - ea); } } #endif for (unsigned int i = 0; i < wordCount; ++i) { Exponent ea = a.exponents[i]; Exponent eb = b.exponents[i]; if (ea == eb) continue; // This only works because the high order bit is 0 in both ea // and eb. This combines with unsigned overflow/underflow to // give a correct signed value. return (int)(eb - ea); } return 0; } void printDebug(ostream& out) const { cout << *this << " has total degree " << sumOfExps << " and data "; for (unsigned int i = 0; i < wordCount; ++i) cout << hex << exponents[i] << ' '; cout << endl << dec; } private: #ifndef PACKED_TERM_NO_SUPPORT void recalculateSupport() { support = 0; for (unsigned int i = 0; i < wordCount; ++i) { // hex 7F is binary 0111111, so adding 7F to 0aaaaaaa will give // 1bbbbbbb exactly if any a is different from 0. So doing this // and anding with hex 80 (which is 10000000) tests for zero. unsigned int spreadSubSupport = exponents[i] + 0x7F7F7F7F; unsigned int subSupport = (spreadSubSupport & 0x80000000); subSupport |= (spreadSubSupport & 0x00800000) << 7; subSupport |= (spreadSubSupport & 0x00008000) << 14; subSupport |= (spreadSubSupport & 0x00000080) << 21; // subSupport now contains the support of exponents[i] in // the higher 4 bits. support |= subSupport >> (i << 2); } } unsigned int support; #endif static void overflow() { ::overflow("exponent"); } Exponent exponents[wordCount]; Exponent sumOfExps; }; inline ostream& operator<<(ostream& out, const PackedTerm& term) { int lastNonZero = Settings::VariableCount - 1; for (; lastNonZero >= 0; --lastNonZero) if (term[lastNonZero] != 0) break; if (lastNonZero == -1) out << '1'; else { for (int i = 0; i <= lastNonZero; ++i) { if (term[i] != 0) { out << 'x' << i; if (term[i] != 1) out << '^' << term[i]; } } } return out; } #endif frobby-0.9.5/save/profile000066400000000000000000000001541401527164200153330ustar00rootroot00000000000000g++ frobw.cpp -lgmpxx -lgmp -O2 -pg -g $* a.out gen t -genMinGenCount = 2000 -genVarCount=3 gprof a.out|headfrobby-0.9.5/save/pruneRedundant000066400000000000000000000007551401527164200167000ustar00rootroot00000000000000class SkipRedundantStrategy : public Strategy { public: virtual bool startingCall(const ExternalTerm& b, const TermTree& tree, bool startingPartition) { unsigned int position = tree.getPosition(); // ... if (_dimension - position > 10) { ExternalTerm lcm(_dimension); tree.lcm(lcm); for (int i = position; i < (int)_dimension; ++i) { ASSERT(lcm[i] > 0); lcm[i] -= 1; } _skip[position].removeNonDivisors(lcm); } // ... } };frobby-0.9.5/save/runMacaulay2000066400000000000000000000000331401527164200162320ustar00rootroot00000000000000M2 $2 $3 $4 $5 < $frobby/$1frobby-0.9.5/save/runMonos000066400000000000000000000000751401527164200155150ustar00rootroot00000000000000java -cp $frobby/monos.jar com.milowski.monos.run $frobby/$* frobby-0.9.5/save/runNewMonos000066400000000000000000000000501401527164200161600ustar00rootroot00000000000000~/monos-1.0.rc2/bin/monos -f $frobby/$* frobby-0.9.5/save/statisticsMsmStrategy000066400000000000000000000036141401527164200202710ustar00rootroot00000000000000class StatisticsMsmStrategy : public DecoratorMsmStrategy { public: StatisticsMsmStrategy(MsmStrategy* strategy): DecoratorMsmStrategy(strategy), _level(0), _consumeCount(0), _independenceSplitCount(0) { } ~StatisticsMsmStrategy() { fputs("**** Statistics\n", stderr); size_t sum = 0; size_t baseSum = 0; size_t emptySum = 0; for (size_t l = 0; l < _calls.size(); ++l) { sum += _calls[l]; baseSum += _baseCases[l]; emptySum += _empty[l]; if (false) { fprintf(stderr, "Level %lu had %lu calls of which %lu were base cases.\n", (unsigned long)l + 1, (unsigned long)_calls[l], (unsigned long)_baseCases[l]); } } fprintf(stderr, "* recursive levels: %lu\n" "* decom size: %lu\n" "* empty slices: %lu\n" "* base case slices: %lu\n" "* independence splits: %lu\n" "* (numbers not corrected for independence splits)\n" "****\n", (unsigned long)_calls.size(), (unsigned long)_consumeCount, (unsigned long)emptySum, (unsigned long)baseSum, (unsigned long)_independenceSplitCount); } virtual void doingIndependenceSplit(const MsmSlice& slice, Ideal* mixedProjectionSubtract) { ++_independenceSplitCount; DecoratorMsmStrategy::doingIndependenceSplit(slice, mixedProjectionSubtract); } void consume(const Term& term) { for (size_t level = _level; level > 0; --level) { if (!_isEmpty[level - 1]) break; // The remaining entries are already false _isEmpty[level - 1] = false; } ++_consumeCount; DecoratorMsmStrategy::consume(term); } private: size_t _level; vector _calls; vector _baseCases; vector _isBaseCase; vector _empty; vector _isEmpty; size_t _consumeCount; size_t _independenceSplitCount; }; frobby-0.9.5/save/testM2-hilbert000077500000000000000000000007331401527164200165060ustar00rootroot00000000000000#!/bin/bash cd ../../scripts/ ./m2-hilbert-multi ../test/hilbert/$1.test /tmp/t ../bin/frobby ptransform -canon < /tmp/t > /tmp/t2 ../bin/frobby ptransform -canon < ../test/hilbert/$1.multi > /tmp/t3 diff /tmp/t2 /tmp/t3 if [ $? != 0 ]; then exit 1; fi ./m2-hilbert-uni ../test/hilbert/$1.test /tmp/t ../bin/frobby ptransform -canon < /tmp/t > /tmp/t2 ../bin/frobby ptransform -canon < ../test/hilbert/$1.uni > /tmp/t3 diff /tmp/t2 /tmp/t3 if [ $? != 0 ]; then exit 1; fi frobby-0.9.5/save/useBoundInConsideringCall000066400000000000000000000017001401527164200207250ustar00rootroot00000000000000add to FrobeniusStrategy: virtual bool consideringCall(const ExternalTerm& b, bool sameExponentAsNext, const TermTree& tree) { unsigned int position = tree.getPosition(); return _bounds[position] + _degreeMultiples[position][b[position]] > _maximumDegreeSeen; } bool canSkipDueToUpperBound(const TermTree& tree, const Degree& degree) { unsigned int position = tree.getPosition(); // Computing the bounds takes more time tham it saves in this // case. if (position > _dimension - 3) return false; ExternalTerm lcm(_dimension); tree.lcm(lcm); Degree upperBound = degree; for (unsigned int i = position; i < _dimension; ++i) { ASSERT(lcm[i] > 0); upperBound += _degreeMultiples[i][lcm[i] - 1]; } _bounds[position] = upperBound - _degreeMultiples[position][lcm[position] - 1]; return upperBound <= _maximumDegreeSeen; } vector _bounds; frobby-0.9.5/scripts/000077500000000000000000000000001401527164200145015ustar00rootroot00000000000000frobby-0.9.5/scripts/frobgrob000077500000000000000000000012431401527164200162310ustar00rootroot00000000000000#!/bin/bash file="$1" # the input file shift # important as any remaining options are passed on to Frobby frobby=../bin/frobby fti2=../4ti2/4ti2gmp # where to find 4ti2 # make input file $file.out.mat from $file in the format that 4ti2 expects echo -n "1 " > $file.out.mat wc $file | sed "s/ *[0-9]* *\([0-9]*\) *.*/\1/" >> $file.out.mat cat $file >> $file.out.mat # run 4ti2 to compute Grobner basis $fti2 zbasis $file.out > /dev/null # make $file.out.lat (not required) $fti2 groebner $file.out > /dev/null # make $file.out.gro # run frobby to compute Frobenius number from Grobner basis cat $file.out.gro $file | $frobby optimize -chopFirstAndSubtract -maxStandard $* frobby-0.9.5/scripts/hilbert.m2000066400000000000000000000021221401527164200163670ustar00rootroot00000000000000multiHilbert = id -> ( gradedRing := varCount -> ( x := symbol x; variables := apply(1..varCount, k -> x_k); listApply := args -> toList(apply args); makeVector := i -> listApply(1..varCount, k -> if k == i then 1 else 0); vectors := listApply(1..varCount, makeVector); return ZZ[variables, Degrees=>vectors]; ); R := ring id; gR := gradedRing(#(gens R)); toGRMapping := apply(gens R, gens gR, (a, b) -> a => b); gHilbert := poincare(sub(id, toGRMapping)); toRMapping := apply(gens(ring gHilbert), gens R, (a, b) -> a => b); return sub(gHilbert, toRMapping); ); uniHilbert = id -> ( R := ring id; uni := poincare id; tR := QQ[t]; toSmallTMapping := apply(gens(ring uni), gens tR, (a, b) -> a => b); return sub(uni, toSmallTMapping); ); printPoly = (poly, ofile) -> ( ofile << "R = " << describe ring poly << ";" << endl << "p = " << toString poly << ";" << endl; ); printIdeal = (id, ofile) -> ( ofile << "R = " << describe ring id << ";" << endl << "I = " << toString id << ";" << endl; ); frobby-0.9.5/scripts/hilbert.singular000066400000000000000000000015161401527164200177030ustar00rootroot00000000000000// This is a Singular 3-0-4 script for computing univariate // Hilbert-Poincare series. Singular 3-0-4 does not support // computing multigraded Hilbert-Poincare series. // // Define I to be the monomial ideal of interest. // // Define output to something true to output the computed // rational function in Macaulay 2 format to standard out. // // -Bjarke Hammersholt Roune (www.broune.com) // 2008-05-21 if (not(defined(output))) { int output = 0; } if (output) { I = std(I); // To avoid hilb generating extra output. } intvec h = hilb(I, 1); if (not(output)) { exit; } // Convert to polynomial ring r = 0, t, lp; poly p = 0; for (int i = 1; i <= size(h); i = i + 1) { p = p + h[i] * t^(i-1); } // Write output short=0; write("", "R = QQ[t];"); write("", "p = " + string(p) + ";"); exit; frobby-0.9.5/scripts/lata000077500000000000000000000006011401527164200153450ustar00rootroot00000000000000#!/bin/bash file=$1 shift fti2=../4ti2/4ti2gmp.exe frobby=../bin/frobby ./frobgrob $file 2> /dev/null > /dev/null cat $file.out.gro $file.out.lat|$frobby lata 2>/dev/null > /dev/null f=$? if [ $f == 2 ]; then echo "not generic"; exit 0; fi if [ $f != 0 ]; then echo "found counterexample"; cat $file.out.gro $file.out.lat|$frobby lata > $file.ana; exit $f; fi echo generic exit 0; frobby-0.9.5/scripts/m2-hilbert-multi000077500000000000000000000001161401527164200175220ustar00rootroot00000000000000#!/bin/bash echo "printPoly(multiHilbert I, \"$2\");"|cat $1 hilbert.m2 -|M2 frobby-0.9.5/scripts/m2-hilbert-uni000077500000000000000000000001141401527164200171610ustar00rootroot00000000000000#!/bin/bash echo "printPoly(uniHilbert I, \"$2\");"|cat $1 hilbert.m2 -|M2 frobby-0.9.5/scripts/nice-hilbert.m2000066400000000000000000000014271401527164200173120ustar00rootroot00000000000000gradedRing = varCount -> ( x := symbol x; variables := apply(1..varCount, k -> x_k); listApply := args -> toList(apply args); makeVector := i -> listApply(1..varCount, k -> if k == i then 1 else 0); vectors := listApply(1..varCount, makeVector); return ZZ[variables, Degrees=>vectors]; ) coerceMonomial = R -> m -> ( exps := first exponents m; return product apply(gens R, exps, (v, e) -> v^e); ) toGrade = id -> ( R := ring id; gR := gradedRing(#(gens R)); return monomialIdeal(apply(id_*, coerceMonomial gR)); ) niceHilbert = id -> ( R := ring id; gR := gradedRing(#(gens R)); gId := monomialIdeal(apply(id_*, coerceMonomial gR)); badHilbert = poincare gId; mapping := apply(gens(ring badHilbert), gens R, (a, b) -> a => b); return sub(badHilbert, mapping) ) frobby-0.9.5/scripts/sc000066400000000000000000000007071401527164200150350ustar00rootroot00000000000000loadPackage "SimplicialComplexes" eul = I -> ( R := ring I; if not isSquareFree I then ( print "not square free!"; exit 1; ); if I == monomialIdeal(1_R) then return (if gens R == {} then -1 else 0); if I == monomialIdeal(0_R) then return 0; h := fVector simplicialComplex dual I; eulerC := 0; for i in keys h do eulerC = eulerC + h#i * (-1)^i; return eulerC; ); stderr << (eul I) << "\n"; frobby-0.9.5/scripts/search000077500000000000000000000004521401527164200156750ustar00rootroot00000000000000#!/bin/bash digits=8 entries=4 for (( c=1; c<=1000000; c++ )) do echo -n "try $c. ($entries entries of $digits digits) "; ../bin/frobby genfrob -entryCount $entries -maxEntryDigits $digits > ../tmp/w 2>/dev/null; ./lata ../tmp/w; if [ $? != 0 ]; then echo "found one!"; exit 42; fi done frobby-0.9.5/scripts/sing000066400000000000000000000002731401527164200153660ustar00rootroot00000000000000// the singular format ring R = 0, (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10), lp; ideal I = x1^5*x2^4*x3^5*x4^7*x5^10*x7*x8^4*x9^3*x10^3, x2^7*x3^2*x4^7*x5^6*x6^3*x8^5*x9^7*x10^9; frobby-0.9.5/src/000077500000000000000000000000001401527164200136015ustar00rootroot00000000000000frobby-0.9.5/src/Action.cpp000066400000000000000000000107701401527164200155270ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Action.h" #include "error.h" #include "NameFactory.h" #include "IrreducibleDecomAction.h" #include "TransformAction.h" #include "HelpAction.h" #include "DynamicFrobeniusAction.h" #include "GenerateIdealAction.h" #include "GenerateFrobeniusAction.h" #include "FrobeniusAction.h" #include "AnalyzeAction.h" #include "LatticeFormatAction.h" #include "IntersectionAction.h" #include "AssociatedPrimesAction.h" #include "AlexanderDualAction.h" #include "HilbertAction.h" #include "PolyTransformAction.h" #include "HelpAction.h" #include "TestAction.h" #include "PrimaryDecomAction.h" #include "OptimizeAction.h" #include "MaximalStandardAction.h" #include "LatticeAnalyzeAction.h" #include "DimensionAction.h" #include "EulerAction.h" Action::Action(const char* name, const char* shortDescription, const char* description, bool acceptsNonParameterParam): _name(name), _shortDescription(shortDescription), _description(description), _acceptsNonParameter(acceptsNonParameterParam), _printActions("time", "Display and time each subcomputation.", false) { _params.add(_printActions); } Action::~Action() { } namespace { typedef NameFactory ActionFactory; ActionFactory getActionFactory() { ActionFactory factory("action"); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); return factory; } } bool Action::displayAction() const { return true; } const Parameter& Action::getParam(const string& name) const { return _params.getParam(name); } void Action::getActionNames(vector& names) { getActionFactory().getNamesWithPrefix("", names); } auto_ptr Action::createActionWithPrefix(const string& prefix) { return createWithPrefix(getActionFactory(), prefix); } const char* Action::getName() const { return _name; } const char* Action::getShortDescription() const { return _shortDescription; } const char* Action::getDescription() const { return _description; } bool Action::acceptsNonParameter() const { return _acceptsNonParameter; } void Action::processNonParameter(const char*) { reportInternalError("Action::processNonParameter called."); } void Action::obtainParameters(vector& parameters) { parameters.insert(parameters.end(), _params.begin(), _params.end()); } void Action::parseCommandLine(unsigned int tokenCount, const char** tokens) { vector tmp; obtainParameters(tmp); for (size_t i = 0; i < tmp.size(); ++i) if (!_params.hasParam(tmp[i]->getName())) _params.add(*tmp[i]); if (acceptsNonParameter() && tokenCount > 0 && tokens[0][0] != '-') { processNonParameter(tokens[0]); --tokenCount; ++tokens; } _params.parseCommandLine(tokenCount, tokens); } frobby-0.9.5/src/Action.h000066400000000000000000000040331401527164200151670ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef ACTION_GUARD #define ACTION_GUARD #include "BoolParameter.h" #include "CliParams.h" class Parameter; class Action { public: Action(const char* name, const char* shortDescription, const char* description, bool acceptsNonParameter); virtual ~Action(); const char* getName() const; const char* getShortDescription() const; const char* getDescription() const; // processNonParameter() can be called at most once, and only if // acceptsNonParameter() returns true. bool acceptsNonParameter() const; virtual void processNonParameter(const char* str); virtual void obtainParameters(vector& parameters); virtual void parseCommandLine(unsigned int tokenCount, const char** tokens); virtual void perform() = 0; /** Returns whether this action should be shown to the user by the help action.*/ virtual bool displayAction() const; const Parameter& getParam(const string& name) const; static void getActionNames(vector& names); static auto_ptr createActionWithPrefix(const string& prefix); protected: CliParams _params; const char* _name; const char* _shortDescription; const char* _description; bool _acceptsNonParameter; BoolParameter _printActions; }; #endif frobby-0.9.5/src/ActionPrinter.cpp000066400000000000000000000032271401527164200170720ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "ActionPrinter.h" ActionPrinter::ActionPrinter(bool printActions): _printActions(printActions), _actionBegun(false) { } ActionPrinter::ActionPrinter(bool printActions, const char* message): _printActions(printActions), _actionBegun(true) { printMessage(message); } ActionPrinter::~ActionPrinter() { if (_actionBegun) endAction(); } void ActionPrinter::printMessage(const char* message) { if (_printActions) { fputs(message, stderr); fflush(stderr); } } void ActionPrinter::beginAction(const char* message) { ASSERT(!_actionBegun); printMessage(message); _actionBegun = true; _timer.reset(); } void ActionPrinter::endAction() { ASSERT(_actionBegun); _actionBegun = false; if (_printActions) { fputc(' ', stderr); _timer.print(stderr); fputc('\n', stderr); fflush(stderr); } } frobby-0.9.5/src/ActionPrinter.h000066400000000000000000000023171401527164200165360ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef ACTION_PRINTER_GUARD #define ACTION_PRINTER_GUARD #include "Timer.h" class ActionPrinter { public: ActionPrinter(bool printActions); ActionPrinter(bool printActions, const char* message); ~ActionPrinter(); void printMessage(const char* message); void beginAction(const char* message); void endAction(); private: const bool _printActions; bool _actionBegun; Timer _timer; }; #endif frobby-0.9.5/src/AlexanderDualAction.cpp000066400000000000000000000045211401527164200201560ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "AlexanderDualAction.h" #include "BigIdeal.h" #include "IOFacade.h" #include "Scanner.h" #include "SliceFacade.h" #include "SliceParams.h" #include "DataType.h" #include "BigTermConsumer.h" AlexanderDualAction::AlexanderDualAction(): Action (staticGetName(), "Compute the Alexander dual of the input ideal.", "Compute the alexander dual of the input monomial ideal.\n\n" "The computation is done using irreducible decomposition, which is why " "there are\n" "a number of options related to that. See the help topic on irrdecom for " "details.", false), _io(DataType::getMonomialIdealType(), DataType::getMonomialIdealType()) { } void AlexanderDualAction::obtainParameters(vector& parameters) { Action::obtainParameters(parameters); _sliceParams.obtainParameters(parameters); _io.obtainParameters(parameters); } void AlexanderDualAction::perform() { SliceParams params(_params); validateSplit(params, true, false); BigIdeal ideal; vector point; bool pointSpecified; { Scanner in(_io.getInputFormat(), stdin); _io.autoDetectInputFormat(in); _io.validateFormats(); IOFacade ioFacade(_printActions); pointSpecified = ioFacade.readAlexanderDualInstance(in, ideal, point); in.expectEOF(); } auto_ptr output = _io.createOutputHandler()->createIdealWriter(stdout); SliceFacade facade(params, ideal, *output); if (pointSpecified) facade.computeAlexanderDual(point); else facade.computeAlexanderDual(); } const char* AlexanderDualAction::staticGetName() { return "alexdual"; } frobby-0.9.5/src/AlexanderDualAction.h000066400000000000000000000022361401527164200176240ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef ALEXANDER_DUAL_ACTION #define ALEXANDER_DUAL_ACTION #include "Action.h" #include "SliceParameters.h" #include "IOParameters.h" class AlexanderDualAction : public Action { public: AlexanderDualAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); private: SliceParameters _sliceParams; IOParameters _io; }; #endif frobby-0.9.5/src/AnalyzeAction.cpp000066400000000000000000000133371401527164200170550ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "AnalyzeAction.h" #include "BigIdeal.h" #include "IOFacade.h" #include "IdealFacade.h" #include "Scanner.h" #include "IOHandler.h" #include "BigTermConsumer.h" #include "DataType.h" #include class AnalyzeConsumer : public BigTermConsumer { public: AnalyzeConsumer(): _generatorCount(0) { } virtual void consumeRing(const VarNames& names) { _names = names; _lcm.clear(); _lcm.resize(_names.getVarCount()); } virtual void beginConsuming() { } using BigTermConsumer::consume; virtual void consume(const Term& term, const TermTranslator& translator) { BigTermConsumer::consume(term, translator); } virtual void consume(const vector& term) { ASSERT(term.size() == _names.getVarCount()); ++_generatorCount; for (size_t var = 0; var < term.size(); ++var) if (_lcm[var] < term[var]) _lcm[var] = term[var]; } virtual void doneConsuming() { } size_t getGeneratorCount() const { return _generatorCount; } const VarNames& getNames() const { return _names; } const vector& getLcm() const { return _lcm; } const mpz_class& getMaximumExponent() const { ASSERT(_lcm.size() > 0); return *max_element(_lcm.begin(), _lcm.end()); } private: VarNames _names; size_t _generatorCount; vector _lcm; }; AnalyzeAction::AnalyzeAction(): Action (staticGetName(), "Display information about the input ideal.", "Display information about input ideal. This is useful for getting a quick\n" "impression of how the ideal looks like, and it can be used in scripts\n" "that need information about the ideal.", false), _io(DataType::getMonomialIdealType(), DataType::getMonomialIdealType()), _summaryLevel ("summaryLevel", "If non-zero, then print a summary of the ideal to the error output\n" "stream. A higher summary level results in more expensive analysis in\n" "order to provide more information. Currently levels 0, 1 and 2 are\n" "available.", 1), _printLcm ("lcm", "Print the least common multiple of the generators.", false), _printVarCount ("varCount", "Print the number of variables.", false), _printGeneratorCount ("genCount", "Print the number of generators.", false), _printMaximumExponent ("maxExp", "Print the largest exponent that appears in the input file", false), _printMinimal ("minimal", "Print 1 if the ideal has no non-minimal generators. Print 0 otherwise.", false) { } void AnalyzeAction::obtainParameters(vector& parameters) { parameters.push_back(&_summaryLevel); parameters.push_back(&_printLcm); parameters.push_back(&_printVarCount); parameters.push_back(&_printGeneratorCount); parameters.push_back(&_printMaximumExponent); parameters.push_back(&_printMinimal); _io.obtainParameters(parameters); Action::obtainParameters(parameters); } void AnalyzeAction::perform() { Scanner in(_io.getInputFormat(), stdin); _io.autoDetectInputFormat(in); _io.validateFormats(); AnalyzeConsumer consumer; // We only read the entire ideal into memory at once if we have to. IOFacade ioFacade(_printActions); if (!requiresWholeIdeal()) { ioFacade.readIdeal(in, consumer); in.expectEOF(); analyzeStreaming(consumer); } else { BigIdeal ideal; ioFacade.readIdeal(in, ideal); in.expectEOF(); consumer.consume(ideal); analyzeStreaming(consumer); analyzeIdeal(ideal); } } bool AnalyzeAction::requiresWholeIdeal() const { return _printMinimal || _summaryLevel > 1; } void AnalyzeAction::analyzeIdeal(BigIdeal& ideal) const { IdealFacade idealFacade(_printActions); if (_printMinimal) { size_t generatorCount = ideal.getGeneratorCount(); idealFacade.sortAllAndMinimize(ideal); if (generatorCount == ideal.getGeneratorCount()) fputs("1\n", stdout); else fputs("0\n", stdout); } if (_summaryLevel >= 2) { idealFacade.printAnalysis(stdout, ideal); } } void AnalyzeAction::analyzeStreaming(AnalyzeConsumer& consumer) const { IOFacade ioFacade(_printActions); if (_printLcm) { auto_ptr output = _io.createOutputHandler(); ioFacade.writeTerm(consumer.getLcm(), consumer.getNames(), output.get(), stdout); fputc('\n', stdout); } if (_printVarCount) fprintf(stdout, "%lu\n", (unsigned long)consumer.getNames().getVarCount()); if (_printGeneratorCount) fprintf(stdout, "%lu\n", (unsigned long)consumer.getGeneratorCount()); if (_printMaximumExponent) { if (consumer.getNames().getVarCount() == 0) fputs("0\n", stdout); else gmp_fprintf(stdout, "%Zd\n", consumer.getMaximumExponent().get_mpz_t()); } if (_summaryLevel.getValue() == 1) { fprintf(stdout, "%lu generators\n", (unsigned long)consumer.getGeneratorCount()); fprintf(stdout, "%lu variables\n", (unsigned long)consumer.getNames().getVarCount()); } } const char* AnalyzeAction::staticGetName() { return "analyze"; } frobby-0.9.5/src/AnalyzeAction.h000066400000000000000000000027701401527164200165210ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef ANALYZE_ACTION_GUARD #define ANALYZE_ACTION_GUARD #include "Action.h" #include "BoolParameter.h" #include "IOParameters.h" #include "IntegerParameter.h" class AnalyzeConsumer; class AnalyzeAction : public Action { public: AnalyzeAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); private: bool requiresWholeIdeal() const; void analyzeStreaming(AnalyzeConsumer& consumer) const; void analyzeIdeal(BigIdeal& ideal) const; IOParameters _io; IntegerParameter _summaryLevel; BoolParameter _printLcm; BoolParameter _printVarCount; BoolParameter _printGeneratorCount; BoolParameter _printMaximumExponent; BoolParameter _printMinimal; }; #endif frobby-0.9.5/src/Arena.cpp000066400000000000000000000065401401527164200153400ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Arena.h" #include #include Arena Arena::_scratchArena; Arena::Arena() { } Arena::~Arena() { while (_block.hasPreviousBlock()) discardPreviousBlock(); delete[] _block._blockBegin; } Arena::Block::Block(): _blockBegin(0), _freeBegin(0), _blockEnd(0), _previousBlock(0) { } void Arena::growCapacity(const size_t needed) { // ** Calcuate size of block (doubles capacity) size_t size = std::max(needed, _block.getSize()); if (size > std::numeric_limits::max() / 2) throw bad_alloc(); // size * 2 overflows size *= 2; const size_t minimumAlloc = 16 * 1024 - sizeof(Block) - 16; size = std::max(size, minimumAlloc); // avoid many small blocks // align size by rounding down size = size & ~(MemoryAlignment - 1); // works because m.a. is a power of 2 ASSERT(size >= needed); // is satisfied because we multiplied by 2 ASSERT(size % MemoryAlignment == 0); if (size > std::numeric_limits::max() - sizeof(Block)) throw bad_alloc(); // size + sizeof(block) overflows // ** Save current block information at end of memory area if (!_block.isNull()) { Block* previousBlock = reinterpret_cast(_block._blockEnd); *previousBlock = _block; _block._previousBlock = previousBlock; } // ** Allocate buffer and update _block char* buffer = new char[size + sizeof(Block)]; _block._blockBegin = buffer; _block._freeBegin = buffer; _block._blockEnd = buffer + size; } void Arena::freeTopFromOldBlock(void* ptr) { ASSERT(ptr != 0); ASSERT(_block.isEmpty()); ASSERT(_block._previousBlock != 0); ASSERT(_block._previousBlock->debugIsValid(ptr)); _block._previousBlock->_freeBegin = static_cast(ptr); if (_block._previousBlock->isEmpty()) discardPreviousBlock(); } void Arena::freeAndAllAfterFromOldBlock(void* ptr) { ASSERT(!_block.isInBlock(ptr)); ASSERT(_block._previousBlock != 0); _block._freeBegin = _block._blockBegin; while (!(_block._previousBlock->isInBlock(ptr))) { discardPreviousBlock(); ASSERT(_block._previousBlock != 0); } ASSERT(_block._previousBlock->debugIsValid(ptr)); _block._previousBlock->_freeBegin = static_cast(ptr); if (_block._previousBlock->isEmpty()) discardPreviousBlock(); } void Arena::discardPreviousBlock() { ASSERT(_block._previousBlock != 0); Block* before = _block._previousBlock->_previousBlock; delete[] _block._previousBlock->_blockBegin; _block._previousBlock = before; } #ifdef DEBUG bool Arena::Block::debugIsValid(const void* ptr) const { return _blockBegin <= ptr && ptr < _freeBegin; } #endif frobby-0.9.5/src/Arena.h000066400000000000000000000234101401527164200150000ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef ARENA_GUARD #define ARENA_GUARD #include #ifdef DEBUG #include #endif /** This is an arena allocator. Arena allocators are very fast at the cost of imposing limitations on how memory can be deallocated. Allocation and deallocation must occur in stack order (LIFO). In other words, only the most recently allocated buffer that has not been deallocated yet can be deallocated. It is also possible to deallocate all buffers that were deallocated after a given buffer. In DEBUG mode stack order is enforced by ASSERTs. Arena satisfies allocation requests out of a larger block of memory. When a block is exhausted another block must be allocated using new. This new block is at least twice the size of the previous block. Old blocks are never re-used though they will be deallocated if they become old. So the current block is replaced if and only if it becomes exhausted. The scheme of geometric block growth is used because it allows a very fast implementation with excellent locality of reference. This can consume memory beyond that which the user of the Arena needs - all allocators have memory overhead. Optimal performance on both speed and memory consumption can usully be reached by all code using the same Arena object when that is possible given the stack-order limitation on deallocation. All methods throw bad_alloc if backing memory allocation using new fails. */ class Arena { public: Arena(); ~Arena(); // ***** Basic void* interface ***** /** Returns a pointer to a buffer of size bytes. Throws bad_alloc if that is not possible. All allocated and not freed buffers have unique addresses even when size is zero. */ void* alloc(size_t size); /** Frees the buffer pointed to by ptr. That buffer must be the most recently allocated buffer from this Arena that has not yet been freed. Double frees are not allowed. ptr must not be null. */ void freeTop(void* ptr); /** Frees the buffer pointed to by ptr and all not yet freed allocations that have happened since that buffer was allocated. ptr must not be null. */ void freeAndAllAfter(void* ptr); // ***** Array interface ***** /** As alloc(elementCount * sizeof(T)). Constructors for the elements of the array are not called. */ template pair allocArrayNoCon(size_t elementCount); /** As allocArrayNoCon except that constructors for the elements of the array are called. The constructors are called in increasing order of index. Constructed objects are destructed in reverse order if a constructor throws an exception. */ template pair allocArray(size_t elementCount); /** As freeTop(array) except that the elements of the array in the range (array, arrayEnd] are deconstructed in decreasing order of index. The destructors must not throw exceptions. array and arrayEnd must not be zero. */ template void freeTopArray(T* array, T* arrayEnd); /** As freeTopArray(p.first, p.second). */ template void freeTopArray(pair p) {freeTopArray(p.first, p.second);} /** As freeAndAllAfter(array) except that the elements of the array in the range (array, arrayEnd] are deconstructed in decreasing order of index. The destructors must not throw exceptions. */ template void freeArrayAndAllAfter(T* array, T* arrayEnd); /** As freeTopArrayAndAllAfter(p.first, p.second). */ template void freeArrayAndAllAfter(pair p) { freeArrayAndAllAfter(p.first, p.second); } // ***** Miscellaneous ***** /** Returns true if there are no live allocations for this Arena. */ bool isEmpty() const {return !_block.hasPreviousBlock() && _block.isEmpty();} /** Returns an arena object that can be used for non-thread safe scratch memory after static objects have been initialized. The default contract is that each function leaves this arena with the exact same objects allocated as before the function was entered. It is fine for functions to collaborate for example by using the arena to return variable size objects without calling new, though care should be used in such cases. */ static Arena& getArena() {return _scratchArena;} private: /** Allocate a new block with at least needed bytes. */ void growCapacity(size_t needed); /** As Arena::freeTop where ptr was allocated from an old block. */ void freeTopFromOldBlock(void* ptr); /** As Arena::freeAndAllAfter where ptr was allocated from an old block. */ void freeAndAllAfterFromOldBlock(void* ptr); /** Free the memory for the previous block. */ void discardPreviousBlock(); /** Rounds value up to the nearest multiple of MemoryAlignment. This number must be representable in a size_t. */ static size_t alignNoOverflow(size_t value); struct Block { Block(); inline bool isInBlock(const void* ptr) const; size_t getSize() const {return _blockEnd - _blockBegin;} size_t getFreeCapacity() const {return _blockEnd - _freeBegin;} bool isEmpty() const {return _blockBegin == _freeBegin;} bool isNull() const {return _blockBegin == 0;} bool hasPreviousBlock() const {return _previousBlock != 0;} IF_DEBUG(bool debugIsValid(const void* ptr) const;) char* _blockBegin; /// beginning of current block (aligned) char* _freeBegin; /// pointer to first free byte (aligned) char* _blockEnd; /// one past last byte (aligned) Block* _previousBlock; /// null if none } _block; static Arena _scratchArena; IF_DEBUG(stack _debugAllocs;) }; inline size_t Arena::alignNoOverflow(const size_t value) { const size_t decAlign = MemoryAlignment - 1; // compile time constant // This works because MemoryAlignment is a power of 2. const size_t aligned = (value + decAlign) & (~decAlign); ASSERT(aligned % MemoryAlignment == 0); // alignment ASSERT(aligned >= value); // no overflow ASSERT(aligned - value < MemoryAlignment); // adjustment minimal return aligned; } inline void* Arena::alloc(size_t size) { // It is OK to check capacity before aligning size as capacity is aligned. // This single if checks for three different special circumstances: // * size is 0 (size - 1 will overflow) // * there is not enough capacity (size > capacity) // * aligning size would cause an overflow (capacity is aligned) const size_t capacity = _block.getFreeCapacity(); ASSERT(capacity % MemoryAlignment == 0); if (size - 1 >= capacity) { ASSERT(size == 0 || size > capacity); if (size == 0) { size = 1; if (capacity > 0) goto capacityOK; } growCapacity(size); } capacityOK: ASSERT(0 < size); ASSERT(size <= _block.getFreeCapacity()); ASSERT(alignNoOverflow(size) <= _block.getFreeCapacity()); void* ptr = _block._freeBegin; _block._freeBegin += alignNoOverflow(size); IF_DEBUG(_debugAllocs.push(ptr)); return ptr; } inline void Arena::freeTop(void* ptr) { ASSERT(ptr != 0); #ifdef DEBUG ASSERT(!_debugAllocs.empty()); ASSERT(_debugAllocs.top() == ptr); _debugAllocs.pop(); #endif if (!_block.isEmpty()) { ASSERT(_block.debugIsValid(ptr)); _block._freeBegin = static_cast(ptr); } else freeTopFromOldBlock(ptr); } inline void Arena::freeAndAllAfter(void* ptr) { ASSERT(ptr != 0); #ifdef DEBUG while (!_debugAllocs.empty() && ptr != _debugAllocs.top()) _debugAllocs.pop(); ASSERT(!_debugAllocs.empty()); ASSERT(_debugAllocs.top() == ptr); _debugAllocs.pop(); #endif if (_block.isInBlock(ptr)) { ASSERT(_block.debugIsValid(ptr)); _block._freeBegin = static_cast(ptr); } else freeAndAllAfterFromOldBlock(ptr); } inline bool Arena::Block::isInBlock(const void* ptr) const { const char* p = static_cast(ptr); const size_t offset = static_cast(p - _blockBegin); // if _blockBegin > ptr then offset overflows to a large integer ASSERT((offset < getSize()) == (_blockBegin <= p && p < _blockEnd)); return offset < getSize(); } template pair Arena::allocArrayNoCon(size_t elementCount) { if (elementCount > static_cast(-1) / sizeof(T)) throw bad_alloc(); const size_t size = elementCount * sizeof(T); ASSERT(size / sizeof(T) == elementCount); char* buffer = static_cast(alloc(size)); T* array = reinterpret_cast(buffer); T* arrayEnd = reinterpret_cast(buffer + size); return make_pair(array, arrayEnd); } #undef new template pair Arena::allocArray(size_t elementCount) { pair p = allocArrayNoCon(elementCount); T* it = p.first; try { for (; it != p.second; ++it) new (it) T(); } catch (...) { freeTopArray(p.first, it); throw; } return p; } #ifdef NEW_MACRO #define new NEW_MACRO #endif template void Arena::freeTopArray(T* array, T* arrayEnd) { ASSERT(array != 0); ASSERT(array <= arrayEnd); while (arrayEnd != array) { --arrayEnd; arrayEnd->~T(); } freeTop(array); } template void Arena::freeArrayAndAllAfter(T* array, T* arrayEnd) { ASSERT(array != 0); ASSERT(array <= arrayEnd); while (arrayEnd != array) { --arrayEnd; arrayEnd->~T(); } freeAndAllAfter(array); } #endif frobby-0.9.5/src/ArenaTest.cpp000066400000000000000000000122001401527164200161660ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Arena.h" #include "tests.h" #include #include TEST_SUITE(Arena) TEST(Arena, NoOp) { Arena arena; } TEST(Arena, Big) { Arena arena; void* a = arena.alloc(5); arena.freeTop(arena.alloc(1024 * 1024)); arena.freeTop(arena.alloc(1024 * 1024)); ASSERT_FALSE(arena.isEmpty()); arena.freeTop(a); ASSERT_TRUE(arena.isEmpty()); } TEST(Arena, Zero) { Arena arena; void* a = arena.alloc(0); void* b = arena.alloc(0); void* c = arena.alloc(0); ASSERT_NEQ(a, b); ASSERT_NEQ(a, c); ASSERT_NEQ(b, c); ASSERT_FALSE(arena.isEmpty()); } TEST(Arena, Many) { Arena arena; vector > allocs; for (size_t i = 3; i < 10; ++i) { for (size_t size = 0; size < 100; ++size) { char* a = static_cast(arena.alloc(size)); pair p(a, a + size); for (size_t j = 0; j < allocs.size(); ++j) { pair p2 = allocs[j]; if (p.first <= p2.first) ASSERT_FALSE_SILENT(p2.first < p.second); else ASSERT_FALSE_SILENT(p.first < p2.second); } fill(p.first, p.second, static_cast(-1)); allocs.push_back(p); } while (allocs.size() > 10 * i) { arena.freeTop(allocs.back().first); allocs.pop_back(); } arena.freeAndAllAfter(allocs[5 * i].first); allocs.resize(5 * i); } ASSERT_FALSE(arena.isEmpty()); arena.freeAndAllAfter(allocs.front().first); ASSERT_TRUE(arena.isEmpty()); } TEST(Arena, BigAndOverflow) { Arena arena; // aligning size causes overflow ASSERT_EXCEPTION(arena.alloc(static_cast(-1)), bad_alloc); // 2x size is an overflow ASSERT_EXCEPTION(arena.alloc(static_cast(-1)/2 + 1), bad_alloc); // causes attempt at allocating almost the entire virtual memory space // which cannot succeed ASSERT_EXCEPTION(arena.alloc(static_cast(-1)/2 - 100), bad_alloc); // sizeof(long) * x overflows to a smaller value (0). const size_t smallerOverflow = 1ul << (8*sizeof(long) - 1); ASSERT(smallerOverflow > 0); ASSERT(smallerOverflow * sizeof(long) == 0); ASSERT_EXCEPTION(arena.allocArray(smallerOverflow), bad_alloc); // sizeof(int) * x overflows to a greater value const size_t greaterOverflow = (~(0ul)) >> 1; ASSERT(sizeof(long) >= 4); ASSERT(greaterOverflow * sizeof(long) > greaterOverflow); ASSERT(greaterOverflow != (greaterOverflow * sizeof(long)) / sizeof(long)); ASSERT_EXCEPTION(arena.allocArray(greaterOverflow), bad_alloc); ASSERT_TRUE(arena.isEmpty()); } namespace { template class _frobby_Helper { public: _frobby_Helper() { _id = ++_count; if (_id == ThrowAt) { _log << 'T' << _id; throw _id; } else _log << '+' << _id; } ~_frobby_Helper() { _log << '-' << _id; } void setId(size_t id) {_id = id;} static string getLog() {return _log.str();} private: size_t _id; static size_t _count; static ostringstream _log; }; template size_t _frobby_Helper::_count = 0; template ostringstream _frobby_Helper::_log; } #define MAKE_HELPER(NAME, THROW_AT) \ namespace { \ struct _frobby_##NAME##HelperTag {}; \ typedef _frobby_Helper<_frobby_##NAME##HelperTag, THROW_AT> NAME##Helper; \ } MAKE_HELPER(ConDecon, 0) TEST(Arena, ConDecon) { Arena arena; arena.freeTopArray(arena.allocArray(0)); arena.freeTopArray(arena.allocArray(3)); arena.freeTopArray(arena.allocArray(0)); ASSERT_EQ(ConDeconHelper::getLog(), "+1+2+3-3-2-1"); ASSERT_TRUE(arena.isEmpty()) } MAKE_HELPER(ConExcep, 4) TEST(Arena, ConExcep) { Arena arena; ASSERT_EXCEPTION(arena.allocArray(10), size_t); ASSERT_EQ(ConExcepHelper::getLog(), "+1+2+3T4-3-2-1"); ASSERT_TRUE(arena.isEmpty()); } MAKE_HELPER(NoConDecon, 0) TEST(Arena, NoConDecon) { Arena arena; pair p = arena.allocArrayNoCon(3); p.first[0].setId(1); p.first[1].setId(2); p.first[2].setId(3); arena.freeTopArray(p); ASSERT_EQ(NoConDeconHelper::getLog(), "-3-2-1"); ASSERT_TRUE(arena.isEmpty()) } MAKE_HELPER(ConNoDecon, 0) TEST(Arena, ConNoDecon) { Arena arena; arena.freeTop(arena.allocArray(3).first); ASSERT_EQ(ConNoDeconHelper::getLog(), "+1+2+3"); ASSERT_TRUE(arena.isEmpty()) } frobby-0.9.5/src/AssociatedPrimesAction.cpp000066400000000000000000000035451401527164200207110ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "AssociatedPrimesAction.h" #include "SliceFacade.h" #include "SliceParams.h" #include "DataType.h" AssociatedPrimesAction::AssociatedPrimesAction(): Action (staticGetName(), "Compute the associated primes of the input ideal.", "Computes the associated prime ideals of the input monomial ideal. The\n" "computation is accomplished using irreducible decomposition. The quality " "of the\n" "algorithm for computing associated primes is expected to be much improved " "in a\n" "future version of Frobby.", false), _io(DataType::getMonomialIdealType(), DataType::getMonomialIdealType()) { } void AssociatedPrimesAction::obtainParameters(vector& parameters) { _io.obtainParameters(parameters); _sliceParams.obtainParameters(parameters); Action::obtainParameters(parameters); } void AssociatedPrimesAction::perform() { SliceParams params(_params); validateSplit(params, true, false); SliceFacade facade(params, DataType::getMonomialIdealListType()); facade.computeAssociatedPrimes(); } const char* AssociatedPrimesAction::staticGetName() { return "assoprimes"; } frobby-0.9.5/src/AssociatedPrimesAction.h000066400000000000000000000022701401527164200203500ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef ASSOCIATED_PRIMES_ACTION_GUARD #define ASSOCIATED_PRIMES_ACTION_GUARD #include "Action.h" #include "IOParameters.h" #include "SliceParameters.h" class AssociatedPrimesAction : public Action { public: AssociatedPrimesAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); protected: SliceParameters _sliceParams; IOParameters _io; }; #endif frobby-0.9.5/src/BigIdeal.cpp000066400000000000000000000234431401527164200157530ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "BigIdeal.h" #include "VarNames.h" #include "TermTranslator.h" #include "Ideal.h" #include "VarSorter.h" #include "RawSquareFreeTerm.h" #include "SquareFreeIdeal.h" #include class OffsetTermCompare { public: OffsetTermCompare(const BigIdeal& ideal): _ideal(ideal) { } bool operator()(size_t aa, size_t bb) const { const vector& a = _ideal.getTerm(aa); const vector& b = _ideal.getTerm(bb); ASSERT(a.size() == b.size()); for (size_t i = 0; i < a.size(); ++i) { if (a[i] > b[i]) return true; if (a[i] < b[i]) return false; } return false; } private: void operator=(const OffsetTermCompare&); // To make this inaccessible. const BigIdeal& _ideal; }; BigIdeal::BigIdeal() { } BigIdeal::BigIdeal(const VarNames& names): _names(names) { } void BigIdeal::insert(const Ideal& ideal) { reserve(getGeneratorCount() + ideal.getGeneratorCount()); Ideal::const_iterator it = ideal.begin(); for (; it != ideal.end(); ++it) { newLastTerm(); for (size_t var = 0; var < _names.getVarCount(); ++var) getLastTermExponentRef(var) = (*it)[var]; } } void BigIdeal::insert(const Ideal& ideal, const TermTranslator& translator) { reserve(getGeneratorCount() + ideal.getGeneratorCount()); Ideal::const_iterator it = ideal.begin(); for (; it != ideal.end(); ++it) { newLastTerm(); for (size_t var = 0; var < _names.getVarCount(); ++var) getLastTermExponentRef(var) = translator.getExponent(var, (*it)[var]); } } void BigIdeal::insert(const SquareFreeIdeal& ideal) { reserve(getGeneratorCount() + ideal.getGeneratorCount()); SquareFreeIdeal::const_iterator it = ideal.begin(); for (; it != ideal.end(); ++it) { newLastTerm(); for (size_t var = 0; var < _names.getVarCount(); ++var) getLastTermExponentRef(var) = SquareFreeTermOps::getExponent(*it, var); } } void BigIdeal::insert(const vector& term) { newLastTerm(); getLastTermRef() = term; } void BigIdeal::renameVars(const VarNames& names) { ASSERT(names.getVarCount() == _names.getVarCount()); _names = names; } void BigIdeal::newLastTerm() { if (_terms.size() == _terms.capacity()) reserve(getVarCount() * _terms.size()); _terms.resize(_terms.size() + 1); _terms.back().resize(_names.getVarCount()); } void BigIdeal::reserve(size_t capacity) { // std::vector can do reallocations by itself, but the version here // is much faster. if (capacity <= _terms.capacity()) return; // We grow the capacity at a rate of getVarCount() instead of a // doubling because each *used* entry allocates at least // getVarCount() memory anyway, so we will still only use at most // double the memory than we need. // // We make tmp have the capacity we need, then we move the data // entry by entry to tmp, and then we swap tmp and _terms. This // will also swap the excess capacity into _terms. If allowed to // reallocate by itself, the implementation of STL (GCC 3.4.4) I'm // using will *copy* the data instead of swapping it, which is // very bad. vector > tmp; size_t newCapacity = getVarCount() * _terms.size(); if (capacity > newCapacity) newCapacity = capacity; tmp.reserve(newCapacity); tmp.resize(_terms.size()); size_t size = _terms.size(); for (size_t i = 0; i < size; ++i) tmp[i].swap(_terms[i]); tmp.swap(_terms); } void BigIdeal::getLcm(vector& lcm) const { lcm.clear(); lcm.resize(getVarCount()); for (vector >::const_iterator it = _terms.begin(); it != _terms.end(); ++it) for (size_t var = 0; var < getVarCount(); ++var) if (lcm[var] < (*it)[var]) lcm[var] = (*it)[var]; } bool BigIdeal::operator==(const BigIdeal& b) const { return _terms == b._terms; } void BigIdeal::projectVar(size_t var) { ASSERT(var < getVarCount()); for (size_t gen = 0; gen < getGeneratorCount(); ++gen) _terms[gen].erase(_terms[gen].begin() + var); _names.projectVar(var); } bool BigIdeal::operator<(const BigIdeal& ideal) const { if (getNames() < ideal.getNames()) return true; if (ideal.getNames() < getNames()) return false; for (size_t t = 0; t < _terms.size(); ++t) { if (t == ideal._terms.size()) return true; const vector& a = _terms[t]; const vector& b = ideal._terms[t]; ASSERT(a.size() == b.size()); for (size_t i = 0; i < a.size(); ++i) { if (a[i] > b[i]) return true; if (a[i] < b[i]) return false; } } return false; } bool BigIdeal::empty() const { return _terms.empty(); } bool BigIdeal::containsIdentity() const { for (size_t gen = 0; gen < getGeneratorCount(); ++gen) { for (size_t var = 0; var < getVarCount(); ++var) if (_terms[gen][var] != 0) goto notIdentity; return true; notIdentity:; } return false; } bool BigIdeal::contains(const vector& term) const { for (size_t gen = 0; gen < getGeneratorCount(); ++gen) { for (size_t var = 0; var < getVarCount(); ++var) if (_terms[gen][var] > term[var]) goto notDivisor; return true; notDivisor:; } return false; } void BigIdeal::clear() { _terms.clear(); } void BigIdeal::clearAndSetNames(const VarNames& names) { clear(); _names = names; } bool BigIdeal::addVarToClearedIdeal(const char* var) { ASSERT(getGeneratorCount() == 0); return _names.addVar(var); } void BigIdeal::eraseVar(size_t varToErase) { ASSERT(varToErase < getVarCount()); VarNames newNames; for (size_t var = 0; var < getVarCount(); ++var) if (var != varToErase) newNames.addVar(_names.getName(var)); try { _names = newNames; for (size_t term = 0; term < getGeneratorCount(); ++term) _terms[term].erase(_terms[term].begin() + varToErase); } catch (...) { // To leave in valid state, which requires that _names has the same // number of variables as each generator. clear(); throw; } } const VarNames& BigIdeal::getNames() const { return _names; } void BigIdeal::deform() { for (size_t gen = 0; gen < getGeneratorCount(); ++gen) for (size_t var = 0; var < getVarCount(); ++var) if (_terms[gen][var] > 0) _terms[gen][var] = _terms[gen][var] * getGeneratorCount() + gen; } void BigIdeal::takeRadical() { vector >::iterator end = _terms.end(); for (vector >::iterator it = _terms.begin(); it != end; ++it) for (size_t var = 0; var < getVarCount(); ++var) if ((*it)[var] > 1) (*it)[var] = 1; } void BigIdeal::sortGeneratorsUnique() { sortGenerators(); vector >::iterator newEnd = unique(_terms.begin(), _terms.end()); _terms.erase(newEnd, _terms.end()); } void BigIdeal::sortGenerators() { size_t size = _terms.size(); vector sortedOffsets(size); for (size_t term = 0; term < size; ++term) sortedOffsets[term] = term; std::sort(sortedOffsets.begin(), sortedOffsets.end(), OffsetTermCompare(*this)); vector > sorted; sorted.reserve(_terms.capacity()); sorted.resize(size); for (size_t term = 0; term < size; ++term) sorted[term].swap(_terms[sortedOffsets[term]]); _terms.swap(sorted); } void BigIdeal::sortVariables() { VarSorter sorter(_names); sorter.getOrderedNames(_names); for (size_t i = 0; i < _terms.size(); ++i) sorter.permute(_terms[i]); } void BigIdeal::swap(BigIdeal& ideal) { _terms.swap(ideal._terms); _names.swap(ideal._names); } void BigIdeal::print(FILE* file) const { ostringstream out; out << *this; fputs(out.str().c_str(), file); } void BigIdeal::print(ostream& out) const { out << "/---- BigIdeal of " << _terms.size() << " terms:\n"; for (vector >::const_iterator it = _terms.begin(); it != _terms.end(); ++it) { for (vector::const_iterator entry = it->begin(); entry != it->end(); ++entry) out << *entry << ' '; out << '\n'; } out << "----/ End of list.\n"; } const mpz_class& BigIdeal::getExponent(size_t term, size_t var) const { ASSERT(term < _terms.size()); ASSERT(var < _names.getVarCount()); return _terms[term][var]; } mpz_class& BigIdeal::getExponent(size_t term, size_t var) { ASSERT(term < _terms.size()); ASSERT(var < _names.getVarCount()); return _terms[term][var]; } void BigIdeal::setExponent(size_t term, size_t var, const mpz_class& exp) { ASSERT(term < _terms.size()); ASSERT(var < _names.getVarCount()); _terms[term][var] = exp; } bool BigIdeal::bigTermCompare(const vector& a, const vector& b) { ASSERT(a.size() == b.size()); for (size_t i = 0; i < a.size(); ++i) { if (a[i] > b[i]) return true; if (a[i] < b[i]) return false; } return false; } ostream& operator<<(ostream& out, const BigIdeal& ideal) { ideal.print(out); return out; } ostream& operator<<(ostream& out, const vector& ideals) { out << "List of " << ideals.size() << " ideals:\n"; for (size_t i = 0; i < ideals.size(); ++i) out << ideals[i]; return out; } frobby-0.9.5/src/BigIdeal.h000066400000000000000000000101071401527164200154110ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef BIG_IDEAL_GUARD #define BIG_IDEAL_GUARD #include "VarNames.h" #include class TermTranslator; class Ideal; class SquareFreeIdeal; class BigIdeal { public: BigIdeal(); BigIdeal(const VarNames& names); void insert(const Ideal& ideal); void insert(const Ideal& ideal, const TermTranslator& translator); void insert(const SquareFreeIdeal& ideal); void insert(const vector& term); void renameVars(const VarNames& names); void newLastTerm(); void reserve(size_t capacity); mpz_class& getLastTermExponentRef(size_t var); vector& getLastTermRef(); const vector& getTerm(size_t term) const; void getLcm(vector& lcm) const; const mpz_class& getExponent(size_t term, size_t var) const; mpz_class& getExponent(size_t term, size_t var); void setExponent(size_t term, size_t var, const mpz_class& exp); bool operator==(const BigIdeal& b) const; vector& operator[](size_t index); const vector& operator[](size_t index) const; void projectVar(size_t var); // This also depends on the order of the variables. bool operator<(const BigIdeal& ideal) const; bool empty() const; bool containsIdentity() const; bool contains(const vector& term) const; void clear(); inline size_t getGeneratorCount() const; size_t getVarCount() const; void clearAndSetNames(const VarNames& names); // Adds a variable to the VarNames associated to the ideal. It is an // error to call this method when the ideal has any generators. If // var is already a known variable, nothing is changed, and the // return value is false. Otherwise, the return value is true. bool addVarToClearedIdeal(const char* var); // Remove variable from each generator and from the ring. void eraseVar(size_t var); const VarNames& getNames() const; // Applies a generic deformation. void deform(); // Takes the radical of every generator. void takeRadical(); // Sorts the generators and removes duplicates. void sortGeneratorsUnique(); // Sorts the generators. void sortGenerators(); // Sorts the variables. void sortVariables(); void swap(BigIdeal& ideal); void print(FILE* file) const; void print(ostream& out) const; static bool bigTermCompare(const vector& a, const vector& b); private: vector > _terms; VarNames _names; }; ostream& operator<<(ostream& out, const BigIdeal& ideal); ostream& operator<<(ostream& out, const vector& ideals); inline vector& BigIdeal::operator[](size_t index) { ASSERT(index < _terms.size()); return _terms[index]; } inline const vector& BigIdeal::operator[](size_t index) const { ASSERT(index < _terms.size()); return _terms[index]; } inline mpz_class& BigIdeal::getLastTermExponentRef(size_t var) { ASSERT(!empty()); ASSERT(var < _names.getVarCount()); return _terms.back()[var]; } inline vector& BigIdeal::getLastTermRef() { ASSERT(!empty()); return _terms.back(); } inline const vector& BigIdeal::getTerm(size_t term) const { ASSERT(term < getGeneratorCount()); return _terms[term]; } inline size_t BigIdeal::getGeneratorCount() const { return _terms.size(); } inline size_t BigIdeal::getVarCount() const { return _names.getVarCount(); } #endif frobby-0.9.5/src/BigIntVector.cpp000066400000000000000000000023421401527164200166450ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "BigIntVector.h" bool operator==(const BigIntVector& a, const BigIntVector& b) { if (a.getSize() != b.getSize()) return false; for (size_t i = 0; i < a.getSize(); ++i) if (a[i] != b[i]) return false; return true; } ostream& operator<<(ostream& out, const BigIntVector& v) { if (v.getSize() > 0) out << v[0]; for (size_t i = 1; i < v.getSize(); ++i) out << ' ' << v[i]; return out; } frobby-0.9.5/src/BigIntVector.h000066400000000000000000000026541401527164200163200ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef BIG_INT_VECTOR_GUARD #define BIG_INT_VECTOR_GUARD #include #include class BigIntVector { public: BigIntVector(size_t size): _entries(size) {} mpz_class& operator[](size_t i) { ASSERT(i < getSize()); return _entries[i]; } const mpz_class& operator[](size_t i) const { ASSERT(i < getSize()); return _entries[i]; } size_t getSize() const {return _entries.size();} void resize(size_t size) {_entries.resize(size);} private: vector _entries; }; bool operator==(const BigIntVector& a, const BigIntVector& b); ostream& operator<<(ostream& out, const BigIntVector& v); #endif frobby-0.9.5/src/BigPolynomial.cpp000066400000000000000000000106541401527164200170600ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "BigPolynomial.h" #include "Term.h" #include "TermTranslator.h" #include "VarSorter.h" #include #include BigPolynomial::BigPolynomial() { } BigPolynomial::BigPolynomial(const VarNames& names): _names(names) { } size_t BigPolynomial::getTermCount() const { return _coefTerms.size(); } size_t BigPolynomial::getVarCount() const { return _names.getVarCount(); } const VarNames& BigPolynomial::getNames() const { return _names; } void BigPolynomial::sortTermsReverseLex() { sort(_coefTerms.begin(), _coefTerms.end(), compareCoefTermsReverseLex); } void BigPolynomial::sortVariables() { VarSorter sorter(_names); sorter.getOrderedNames(_names); for (size_t i = 0; i < _coefTerms.size(); ++i) sorter.permute(_coefTerms[i].term); } void BigPolynomial::clear() { _coefTerms.clear(); } void BigPolynomial::clearAndSetNames(const VarNames& names) { clear(); _names = names; } const mpz_class& BigPolynomial::getCoef(size_t index) const { ASSERT(index < getTermCount()); return _coefTerms[index].coef; } const vector& BigPolynomial::getTerm(size_t index) const { ASSERT(index < getTermCount()); return _coefTerms[index].term; } void BigPolynomial::newLastTerm() { _coefTerms.resize(_coefTerms.size() + 1); _coefTerms.back().term.resize(getVarCount()); } vector& BigPolynomial::getLastTerm() { ASSERT(getTermCount() > 0); return _coefTerms.back().term; } mpz_class& BigPolynomial::getLastCoef() { ASSERT(getTermCount() > 0); return _coefTerms.back().coef; } void BigPolynomial::renameVars(const VarNames& names) { ASSERT(names.getVarCount() == _names.getVarCount()); _names = names; } void BigPolynomial::add(const mpz_class& coef, const vector term) { ASSERT(term.size() == getVarCount()); _coefTerms.resize(_coefTerms.size() + 1); _coefTerms.back().coef = coef; _coefTerms.back().term = term; } void BigPolynomial::add(const mpz_class& coef, const Term& term, const TermTranslator& translator) { ASSERT(term.getVarCount() == getVarCount()); ASSERT(translator.getVarCount() == getVarCount()); _coefTerms.resize(_coefTerms.size() + 1); _coefTerms.back().coef = coef; vector& bigTerm = _coefTerms.back().term; bigTerm.reserve(term.getVarCount()); for (size_t var = 0; var < term.getVarCount(); ++var) bigTerm.push_back(translator.getExponent(var, term)); } bool BigPolynomial::operator==(const BigPolynomial& poly) const { return _names == poly._names && _coefTerms == poly._coefTerms; } bool BigPolynomial::BigCoefTerm::operator==(const BigCoefTerm& coefTerm) const { return coef == coefTerm.coef && term == coefTerm.term; } void BigPolynomial::print(FILE* file) const { ostringstream out; out << *this; fputs(out.str().c_str(), file); } void BigPolynomial::print(ostream& out) const { out << "/---- BigPolynomial of " << _coefTerms.size() << " terms:\n"; for (vector::const_iterator it = _coefTerms.begin(); it != _coefTerms.end(); ++it) { out << ' ' << it->coef << " "; for (vector::const_iterator entry = it->term.begin(); entry != it->term.end(); ++entry) out << ' ' << *entry; out << '\n'; } out << "----/ End of list.\n"; } bool BigPolynomial::compareCoefTermsReverseLex(const BigCoefTerm& a, const BigCoefTerm& b) { for (size_t var = 0; var < a.term.size(); ++var) if (a.term[var] != b.term[var]) return a.term[var] > b.term[var]; return a.coef < b.coef; } ostream& operator<<(ostream& out, const BigPolynomial& poly) { poly.print(out); return out; } frobby-0.9.5/src/BigPolynomial.h000066400000000000000000000043371401527164200165260ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef BIG_POLYNOMIAL_GUARD #define BIG_POLYNOMIAL_GUARD class VarNames; class Term; class TermTranslator; #include "VarNames.h" #include class BigPolynomial { public: BigPolynomial(); BigPolynomial(const VarNames& names); size_t getTermCount() const; size_t getVarCount() const; const VarNames& getNames() const; // Removes all terms but does not change getNames(). void clear(); void clearAndSetNames(const VarNames& names); void sortTermsReverseLex(); void sortVariables(); const mpz_class& getCoef(size_t index) const; const vector& getTerm(size_t index) const; void newLastTerm(); vector& getLastTerm(); mpz_class& getLastCoef(); void renameVars(const VarNames& names); void add(const mpz_class& coef, const vector term); void add(const mpz_class& coef, const Term& term, const TermTranslator& translator); bool operator==(const BigPolynomial& poly) const; void print(FILE* file) const; void print(ostream& out) const; private: struct BigCoefTerm { mpz_class coef; vector term; bool operator==(const BigCoefTerm& coefTerm) const; }; typedef vector::iterator iterator; typedef vector::const_iterator const_iterator; static bool compareCoefTermsReverseLex (const BigCoefTerm& a, const BigCoefTerm& b); VarNames _names; vector _coefTerms; }; ostream& operator<<(ostream& out, const BigPolynomial& ideal); #endif frobby-0.9.5/src/BigTermConsumer.cpp000066400000000000000000000040741401527164200173570ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "BigTermConsumer.h" #include "Term.h" #include "TermTranslator.h" #include "BigIdeal.h" BigTermConsumer::~BigTermConsumer() { } // Do not use this implementation for anything time-critical, since // the allocation of a new vector and mpz_class'es each time really is // not efficient. void BigTermConsumer::consume (const Term& term, const TermTranslator& translator) { ASSERT(term.getVarCount() == translator.getVarCount()); vector bigTerm(term.getVarCount()); for (size_t var = 0; var < term.getVarCount(); ++var) bigTerm[var] = translator.getExponent(var, term); consume(bigTerm); } // Do not use this implementation for anything time-critical. void BigTermConsumer::consume(const Term& term) { vector bigTerm(term.getVarCount()); for (size_t var = 0; var < term.getVarCount(); ++var) bigTerm[var] = term[var]; consume(bigTerm); } void BigTermConsumer::beginConsuming(const VarNames& names) { consumeRing(names); beginConsuming(); } void BigTermConsumer::consume(const BigIdeal& ideal) { consumeRing(ideal.getNames()); beginConsuming(ideal.getNames()); for (size_t term = 0; term < ideal.getGeneratorCount(); ++term) consume(ideal.getTerm(term)); doneConsuming(); } void BigTermConsumer::consume(auto_ptr ideal) { consume(*ideal); } frobby-0.9.5/src/BigTermConsumer.h000066400000000000000000000030741401527164200170230ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef BIG_TERM_CONSUMER_GUARD #define BIG_TERM_CONSUMER_GUARD #include "TermConsumer.h" #include class Term; class TermTranslator; class VarNames; class BigIdeal; class BigTermConsumer : public TermConsumer { public: virtual ~BigTermConsumer(); virtual void consumeRing(const VarNames& names) = 0; virtual void beginConsuming() = 0; virtual void consume(const vector& term) = 0; virtual void doneConsuming() = 0; virtual void consume(const Term& term); virtual void consume(const Term& term, const TermTranslator& translator) = 0; virtual void consume(const BigIdeal& ideal); virtual void consume(auto_ptr ideal); // Calling this convenience method is equivalent to // consumeRing(names); // beginConsuming(); void beginConsuming(const VarNames& names); }; #endif frobby-0.9.5/src/BigTermRecorder.cpp000066400000000000000000000045321401527164200173300ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "BigTermRecorder.h" #include "BigIdeal.h" #include "Term.h" #include "TermTranslator.h" BigTermRecorder::BigTermRecorder(): _ideals(), _idealsDeleter(_ideals) { } void BigTermRecorder::consumeRing(const VarNames& names) { _names = names; } void BigTermRecorder::consume(auto_ptr ideal) { consumeRing(ideal->getNames()); exceptionSafePushBack(_ideals, ideal); } void BigTermRecorder::beginConsuming() { auto_ptr ideal(new BigIdeal(_names)); exceptionSafePushBack(_ideals, ideal); } void BigTermRecorder::consume (const Term& term, const TermTranslator& translator) { ASSERT(!_ideals.empty()); BigIdeal& ideal = *(_ideals.back()); ASSERT(term.getVarCount() == ideal.getVarCount()); ASSERT(translator.getVarCount() == ideal.getVarCount()); ideal.newLastTerm(); size_t varCount = ideal.getVarCount(); for (size_t var = 0; var < varCount; ++var) ideal.getLastTermExponentRef(var) = translator.getExponent(var, term); } void BigTermRecorder::consume(const vector& term) { ASSERT(!_ideals.empty()); BigIdeal& ideal = *(_ideals.back()); ideal.newLastTerm(); size_t varCount = ideal.getVarCount(); for (size_t var = 0; var < varCount; ++var) ideal.getLastTermExponentRef(var) = term[var]; } void BigTermRecorder::doneConsuming() { } bool BigTermRecorder::empty() const { return _ideals.empty(); } auto_ptr BigTermRecorder::releaseIdeal() { ASSERT(!empty()); auto_ptr ideal(_ideals.front()); _ideals.pop_front(); return ideal; } const VarNames& BigTermRecorder::getRing() { return _names; } frobby-0.9.5/src/BigTermRecorder.h000066400000000000000000000035751401527164200170030ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef BIG_TERM_RECORDER_GUARD #define BIG_TERM_RECORDER_GUARD #include "BigTermConsumer.h" #include "ElementDeleter.h" #include "VarNames.h" #include class BigIdeal; class TermTranslator; /** BigTermRecorder records all the terms it consumes into an ideal. */ class BigTermRecorder : public BigTermConsumer { public: BigTermRecorder(); virtual void consumeRing(const VarNames& names); virtual void beginConsuming(); virtual void consume(const Term& term, const TermTranslator& translator); virtual void consume(const vector& term); virtual void doneConsuming(); virtual void consume(auto_ptr ideal); // Returns true if this object currently stores no ideals. bool empty() const; // Returns the least recently consumed ideal from this and returns it. // It is a precondition that empty() is false. auto_ptr releaseIdeal(); // Returns the most recently consumed ring. const VarNames& getRing(); private: VarNames _names; size_t _idealCount; list _ideals; // zero entries are treated as if not there. ElementDeleter > _idealsDeleter; }; #endif frobby-0.9.5/src/BigattiBaseCase.cpp000066400000000000000000000210571401527164200172640ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "BigattiBaseCase.h" #include "BigattiState.h" #include "TermTranslator.h" #include BigattiBaseCase::BigattiBaseCase(const TermTranslator& translator): _maxCount(translator.getVarCount()), _lcm(translator.getVarCount()), _outputMultivariate(translator.getVarCount()), _computeUnivariate(false), _translator(translator), _totalBaseCasesEver(0), _totalTermsOutputEver(0), _printDebug(false) { } bool BigattiBaseCase::genericBaseCase(const BigattiState& state) { if (baseCase(state)) return true; if (!state.getIdeal().isWeaklyGeneric()) return false; enumerateScarfComplex(state, false); ++_totalBaseCasesEver; return true; } bool BigattiBaseCase::baseCase(const BigattiState& state) { ASSERT(_maxCount.size() == state.getVarCount()); if (simpleBaseCase(state)) return true; if (state.getIdeal().getGeneratorCount() > state.getVarCount()) return false; state.getIdeal().getLcm(_lcm); if (state.getIdeal().getGeneratorCount() > _lcm.getSizeOfSupport()) return false; fill(_maxCount.begin(), _maxCount.end(), 0); Ideal::const_iterator end = state.getIdeal().end(); Ideal::const_iterator it = state.getIdeal().begin(); for (; it != end; ++it) { bool hasMax = false; for (size_t var = 0; var < state.getVarCount(); ++var) { ASSERT((*it)[var] <= _lcm[var]); if ((*it)[var] == _lcm[var] && _lcm[var] > 0) { hasMax = true; _maxCount[var] += 1; if (_maxCount[var] > 1) return false; } } if (!hasMax) return false; } enumerateScarfComplex(state, true); ++_totalBaseCasesEver; return true; } void BigattiBaseCase::output(bool plus, const Term& term) { if (_printDebug) { fputs("Debug: Outputting term ", stderr); fputc(plus ? '+' : '-', stderr); term.print(stderr); fputs(".\n", stderr); } ++_totalTermsOutputEver; if (_computeUnivariate) { if (term.getVarCount() == 0) _tmp = 0; else _tmp = _translator.getExponent(0, term); for (size_t var = 1; var < term.getVarCount(); ++var) _tmp += _translator.getExponent(var, term); _outputUnivariate.add(plus, _tmp); } else _outputMultivariate.add(plus, term); } void BigattiBaseCase::feedOutputTo (CoefBigTermConsumer& consumer, bool inCanonicalOrder) { if (_computeUnivariate) _outputUnivariate.feedTo(consumer, inCanonicalOrder); else _outputMultivariate.feedTo(_translator, consumer, inCanonicalOrder); } void BigattiBaseCase::setPrintDebug(bool value) { _printDebug = value; } void BigattiBaseCase::setComputeUnivariate(bool value) { _computeUnivariate = value; } size_t BigattiBaseCase::getTotalBaseCasesEver() const { return _totalBaseCasesEver; } size_t BigattiBaseCase::getTotalTermsOutputEver() const { return _totalTermsOutputEver; } size_t BigattiBaseCase::getTotalTermsInOutput() const { if (_computeUnivariate) return _outputUnivariate.getTermCount(); else return _outputMultivariate.getTermCount(); } bool BigattiBaseCase::simpleBaseCase(const BigattiState& state) { const Ideal& ideal = state.getIdeal(); size_t genCount = ideal.getGeneratorCount(); const Term& multiply = state.getMultiply(); if (genCount > 2) return false; output(true, multiply); if (genCount == 0) return true; _lcm.product(multiply, ideal[0]); output(false, _lcm); if (genCount == 1) return true; ASSERT(genCount == 2); _lcm.product(multiply, ideal[1]); output(false, _lcm); _lcm.lcm(ideal[0], ideal[1]); _lcm.product(_lcm, multiply); output(true, _lcm); ++_totalBaseCasesEver; return true; } bool BigattiBaseCase::univariateAllFaces(const BigattiState& state) { ASSERT(_computeUnivariate); const Ideal& ideal = state.getIdeal(); const Term& multiply = state.getMultiply(); if (!ideal.disjointSupport()) return false; if (ideal.getGeneratorCount() > 30) return false; // Coefficients may not fit in 32 bits Term max(ideal.getVarCount()); ideal.getLcm(max); max.product(max, multiply); _tmp = 0; for (size_t var = 0; var < max.getVarCount(); ++var) _tmp += _translator.getExponent(var, max); if (_tmp > 1024*1024) return false; // Too high memory requirement. ASSERT(_tmp.fits_uint_p()); size_t maxDegree = _tmp.get_ui(); size_t approxWorkForScarfComplex = (1 << ideal.getGeneratorCount()); if (approxWorkForScarfComplex < maxDegree) return false; // Scarf complex is on par or faster. // At this point we have made sure that this instance makes sense to // solve using this method. We have also determined that we can do // everything in machine ints. vector poly; poly.reserve(maxDegree); poly.push_back(1); // TODO: sort with smallest first to decrease work in early // iterations. for (size_t i = 0; i < ideal.getGeneratorCount(); ++i) { ASSERT(poly.back() != 0); const Exponent* gen = ideal[i]; // calculate degree int degree = 0; for (size_t var = 0; var < max.getVarCount(); ++var) degree += _translator.getExponent(var, multiply[var] + gen[var]).get_ui() - _translator.getExponent(var, multiply[var]).get_ui(); // replace poly P by (1-t^degree)*P = P-P*t^degree. size_t oldSize = poly.size(); poly.resize(oldSize + degree); for (size_t e = oldSize; e > 0;) { --e; poly[e+degree] -= poly[e]; } } int degree = 0; for (size_t var = 0; var < max.getVarCount(); ++var) degree += _translator.getExponent(var, multiply).get_ui(); for (size_t e = 0; e < poly.size(); ++e) { if (_printDebug) { fprintf(stderr, "Debug: Outputting term %i*t^%u.\n", poly[e], (unsigned int)(e + degree)); } ++_totalTermsOutputEver; _outputUnivariate.add(poly[e], e+degree); } return true; } void BigattiBaseCase::enumerateScarfComplex(const BigattiState& state, bool allFaces) { if (allFaces && _computeUnivariate && univariateAllFaces(state)) { return; } const Ideal& ideal = state.getIdeal(); // Set up _states with enough entries of the right size. size_t needed = ideal.getGeneratorCount() + 1; if (_states.size() < needed) _states.resize(needed); for (size_t i = 0; i < _states.size(); ++i) _states[i].term.reset(state.getVarCount()); // Set up the initial state ASSERT(!ideal.isZeroIdeal()); _states[0].plus = true; _states[0].pos = ideal.begin(); ASSERT(_states[0].term.isIdentity()); // Cache this to avoid repeated calls to end(). Ideal::const_iterator stop = ideal.end(); // Iterate until all states are done. The active entries of _states // are those from index 0 up to and including _current. size_t current = 0; while (true) { ASSERT(current < _states.size()); State& currentState = _states[current]; if (currentState.pos == stop) { // This is a base case since we have considered all minimal // generators. _lcm.product(currentState.term, state.getMultiply()); output(currentState.plus, _lcm); // We are done with this entry, so go back to the previous // active entry. if (current == 0) break; // Nothing remains to be done. --current; } else { // Split into two cases according to whether we put the minimal // generator at pos into the face or not. ASSERT(current + 1 < _states.size()); State& next = _states[current + 1]; next.term.lcm(currentState.term, *currentState.pos); ++currentState.pos; if (allFaces || !ideal.strictlyContains(next.term)) { // If allFaces is true we do not need to check the condition // since we know it should always hold. ASSERT(!ideal.strictlyContains(next.term)); next.plus = !currentState.plus; next.pos = currentState.pos; ++current; } } } } frobby-0.9.5/src/BigattiBaseCase.h000066400000000000000000000106711401527164200167310ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef BIGATTI_BASE_CASE_GUARD #define BIGATTI_BASE_CASE_GUARD class BigattiState; class TermTranslator; #include "Term.h" #include "Ideal.h" #include "HashPolynomial.h" #include "UniHashPolynomial.h" #include /** This class handles the base cases for the Hilbert-Poincare series by Bigatti et.al. */ class BigattiBaseCase { public: /** Initialize this object to handle the computation of Hilbert-Poincare series numerator polynomials in a polynomial ring with varCount variables. */ BigattiBaseCase(const TermTranslator& translator); /** Returns ture if state is a base case slice while also considering genericity. This generalizes the functionality of baseCase(). */ bool genericBaseCase(const BigattiState& state); /** Returns true if state is a base case slice without considering genericity. */ bool baseCase(const BigattiState& state); /** Add +term or -term to the output polynomial when plus is true or false respectively. */ void output(bool plus, const Term& term); /** Feed the output Hilbert-Poincare numerator polynomial computed so far to the consumer. This is done in canonical order if inCanonicalOrder is true. */ void feedOutputTo(CoefBigTermConsumer& consumer, bool inCanonicalOrder); /** Starts to print debug output on what happens if value is true. */ void setPrintDebug(bool value); /** Use the fine grading if value is false, otherwise grade each variable by the same variable t. */ void setComputeUnivariate(bool value); /** Returns the total number of base cases this object has seen. */ size_t getTotalBaseCasesEver() const; /** Returns the total number of terms this object has output. This can be substantially more than the number of terms in the output polynomial, since the sum of two terms can be just one term or even zero. */ size_t getTotalTermsOutputEver() const; /** Returns the number of terms in the output polynomial right now. */ size_t getTotalTermsInOutput() const; private: /** Computes the Hilbert-Poincare series of state and returns true if state is a particularly simple and easily detected case. */ bool simpleBaseCase(const BigattiState& state); bool univariateAllFaces(const BigattiState& state); /** The ideal in state must be weakly generic. Then the Hilbert-Poincare series is computed by enumerating the facet of the Scarf complex. @param allFaces If true then every subset of monomial ideals is a facet of the Scarf complex. This allows for faster computation if true but yields incorrect results if not. */ void enumerateScarfComplex(const BigattiState& state, bool allFaces); vector _maxCount; Term _lcm; mpz_class _tmp; /** The part of the finely graded Hilbert-Poincare numerator polynomial computed so far. */ HashPolynomial _outputMultivariate; /** The part of the coarsely graded Hilbert-Poincare numerator polynomial computed so far. */ UniHashPolynomial _outputUnivariate; /** Used in enumerateScarfComplex and necessary to have here to define _states. */ struct State { Term term; Ideal::const_iterator pos; bool plus; }; /** Used in enumerateScarfCompex. Is not a local variable to avoid the cost of re-allocation at every call. */ vector _states; /** Use the fine grading if false, otherwise grade each variable by the same variable t. */ bool _computeUnivariate; /** Used to translate the output from ints. */ const TermTranslator& _translator; /** For statistics. Can overflow. */ size_t _totalBaseCasesEver; /** For statistics. Can overflow. */ size_t _totalTermsOutputEver; bool _printDebug; }; #endif frobby-0.9.5/src/BigattiFacade.cpp000066400000000000000000000042411401527164200167550ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "BigattiFacade.h" #include "BigattiHilbertAlgorithm.h" #include "BigattiParams.h" #include "BigattiPivotStrategy.h" BigattiFacade::BigattiFacade(const BigattiParams& params): Facade(params.getPrintActions()), _pivot(BigattiPivotStrategy::createStrategy (params.getPivot(), params.getWidenPivot())), _params(params) { _common.readIdealAndSetPolyOutput(params); } BigattiFacade::~BigattiFacade() { // Destructor defined so auto_ptr in the header does not need // definition of T. } void BigattiFacade::computeMultigradedHilbertSeries() { beginAction("Computing multigraded Hilbert-Poincare series."); BigattiHilbertAlgorithm alg(_common.takeIdeal(), _common.getTranslator(), _params, _pivot, _common.getPolyConsumer()); alg.setComputeUnivariate(false); alg.run(); endAction(); } void BigattiFacade::computeUnivariateHilbertSeries() { beginAction("Computing univariate Hilbert-Poincare series"); BigattiHilbertAlgorithm alg(_common.takeIdeal(), _common.getTranslator(), _params, _pivot, _common.getPolyConsumer()); alg.setComputeUnivariate(true); alg.run(); endAction(); } frobby-0.9.5/src/BigattiFacade.h000066400000000000000000000033101401527164200164160ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef BIGATTI_FACADE_GUARD #define BIGATTI_FACADE_GUARD #include "Facade.h" #include "CommonParamsHelper.h" #include "BigattiParams.h" class BigattiPivotStrategy; /** A facade for computing Hilbert series of monomial ideals using the divide-and-conquer algorithm by Bigatti et.al. @ingroup Facade */ class BigattiFacade : public Facade { public: BigattiFacade(const BigattiParams& params); ~BigattiFacade(); /** Computes the numerator of the multigraded Hilbert-Poincare series with no cancellation of common terms in numerator and denominator. */ void computeMultigradedHilbertSeries(); /** Computes the numerator of the univariate Hilbert-Poincare series with no cancellation of common terms in numerator and denominator. */ void computeUnivariateHilbertSeries(); private: auto_ptr _pivot; BigattiParams _params; CommonParamsHelper _common; }; #endif frobby-0.9.5/src/BigattiHilbertAlgorithm.cpp000066400000000000000000000077301401527164200210600ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "BigattiHilbertAlgorithm.h" #include "Ideal.h" #include "CoefBigTermConsumer.h" #include "BigattiState.h" BigattiHilbertAlgorithm:: BigattiHilbertAlgorithm (auto_ptr ideal, const TermTranslator& translator, const BigattiParams& params, auto_ptr pivot, CoefBigTermConsumer& consumer): _translator(translator), _consumer(&consumer), _baseCase(translator), _pivot(pivot), _computeUnivariate(false), _params(params) { ASSERT(ideal.get() != 0); ASSERT(ideal->isMinimallyGenerated()); _varCount = ideal->getVarCount(); _tmp_simplify_gcd.reset(_varCount); _baseCase.setPrintDebug(_params.getPrintDebug()); // TODO: use swap to avoid copy of ideal. _tasks.addTask(new BigattiState(this, *ideal, Term(_varCount))); } void BigattiHilbertAlgorithm::setComputeUnivariate(bool value) { _computeUnivariate = value; } void BigattiHilbertAlgorithm::run() { if (_pivot.get() == 0) _pivot = BigattiPivotStrategy::createStrategy("median", true); _baseCase.setComputeUnivariate(_computeUnivariate); _tasks.runTasks(); _baseCase.feedOutputTo(*_consumer, _params.getProduceCanonicalOutput()); if (_params.getPrintStatistics()) { fputs("*** Statistics for run of Bigatti algorithm ***\n", stderr); fprintf(stderr, " %u states processed.\n", (unsigned int)_tasks.getTotalTasksEver()); fprintf(stderr, " %u base cases.\n", (unsigned int)_baseCase.getTotalBaseCasesEver()); fprintf(stderr, " %u terms output.\n", (unsigned int)_baseCase.getTotalTermsOutputEver()); fprintf(stderr, " %u terms in final output.\n", (unsigned int)_baseCase.getTotalTermsInOutput()); } } void BigattiHilbertAlgorithm::processState(auto_ptr state) { if (_params.getUseSimplification()) simplify(*state); if (_params.getPrintDebug()) { fputs("Debug: Processing state.\n", stderr); state->print(stderr); } bool isBaseCase = _params.getUseGenericBaseCase() ? _baseCase.genericBaseCase(*state) : _baseCase.baseCase(*state); if (isBaseCase) { freeState(state); return; } const Term& pivot = _pivot->getPivot(*state); if (_params.getPrintDebug()) { fputs("Debug: Performing pivot split on ", stderr); pivot.print(stderr); fputs(".\n", stderr); } ASSERT(!pivot.isIdentity()); ASSERT(!state->getIdeal().contains(pivot)); auto_ptr colonState(_stateCache.newObjectCopy(*state)); colonState->colonStep(pivot); _tasks.addTask(colonState.release()); state->addStep(pivot); _tasks.addTask(state.release()); } void BigattiHilbertAlgorithm::simplify(BigattiState& state) { Term& gcd = _tmp_simplify_gcd; ASSERT(gcd.getVarCount() == _varCount); state.getIdeal().getGcd(gcd); if (!gcd.isIdentity()) { // Do colon and output multiply-gcd*multiply. _baseCase.output(true, state.getMultiply()); state.colonStep(gcd); _baseCase.output(false, state.getMultiply()); } IF_DEBUG(state.getIdeal().getGcd(gcd)); ASSERT(gcd.isIdentity()); } void BigattiHilbertAlgorithm::freeState(auto_ptr state) { state->getIdeal().clear(); // To preserve memory _stateCache.freeObject(state); } frobby-0.9.5/src/BigattiHilbertAlgorithm.h000066400000000000000000000046251401527164200205250ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef BIGATTI_HILBERT_ALGORITHM_GUARD #define BIGATTI_HILBERT_ALGORITHM_GUARD #include "TaskEngine.h" #include "Ideal.h" #include "ObjectCache.h" #include "BigattiState.h" #include "BigattiBaseCase.h" #include "BigattiPivotStrategy.h" #include "BigattiParams.h" class CoefBigTermConsumer; class Term; class BigattiHilbertAlgorithm { public: /** Construct an object for running the Bigatti et.al. algorithm on ideal. Both translator and consumer must remain valid for the lifetime of this object. */ BigattiHilbertAlgorithm(auto_ptr ideal, const TermTranslator& translator, const BigattiParams& params, auto_ptr pivot, CoefBigTermConsumer& consumer); void setPrintStatistics(bool value); void setPrintDebug(bool value); void setUseSimplification(bool value); void setDoCanonicalOutput(bool value); void setComputeUnivariate(bool value); void run(); private: void processState(auto_ptr state); void getPivot(BigattiState& state, size_t& var, Exponent& e); void simplify(BigattiState& state); void freeState(auto_ptr state); size_t _varCount; const TermTranslator& _translator; CoefBigTermConsumer* _consumer; TaskEngine _tasks; ObjectCache _stateCache; Term _tmp_processState_pivot; Term _tmp_simplify_gcd; BigattiBaseCase _baseCase; auto_ptr _pivot; bool _computeUnivariate; BigattiParams _params; friend class BigattiState; }; #endif frobby-0.9.5/src/BigattiParams.cpp000066400000000000000000000030421401527164200170330ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "BigattiParams.h" #include "CliParams.h" BigattiParams::BigattiParams(const CliParams& cli): _pivot("median"), _widenPivot(true), _useGenericBaseCase(true) { extractCliValues(*this, cli); } namespace { static const char* PivotParamName = "split"; static const char* GenericBaseCaseName = "genericBase"; static const char* WidenPivotName = "widenPivot"; } void addBigattParams(CliParams& params) { } void extractCliValues(BigattiParams& bigatti, const CliParams& cli) { extractCliValues(static_cast(bigatti), cli); bigatti.setPivot(getString(cli, PivotParamName)); bigatti.useGenericBaseCase(getBool(cli, GenericBaseCaseName)); bigatti.widenPivot(getBool(cli, WidenPivotName)); } frobby-0.9.5/src/BigattiParams.h000066400000000000000000000034011401527164200164770ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef BIGATTI_PARAMS_GUARD #define BIGATTI_PARAMS_GUARD #include "SliceLikeParams.h" class CliParams; class BigattiParams : public SliceLikeParams { public: BigattiParams(const CliParams& cli); /** Returns whether to detect generic monomial ideals as a base case. */ bool getUseGenericBaseCase() const {return _useGenericBaseCase;} void setPivot(const string& name) {_pivot = name;} /** Returns the name of the pivot selection strategy used for pivots splits. */ const string& getPivot() const {return _pivot;} void useGenericBaseCase(bool value) {_useGenericBaseCase = value;} /** Returns whether to widen the pivots of pivot splits. */ bool getWidenPivot() const {return _widenPivot;} void widenPivot(bool value) {_widenPivot = value;} private: string _pivot; bool _widenPivot; bool _useGenericBaseCase; }; void addBigattiParams(CliParams& params); void extractCliValues(BigattiParams& slice, const CliParams& cli); #endif frobby-0.9.5/src/BigattiPivotStrategy.cpp000066400000000000000000000257311401527164200204450ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "BigattiPivotStrategy.h" #include "BigattiState.h" #include "Ideal.h" #include "Term.h" #include "NameFactory.h" #include "error.h" BigattiPivotStrategy::BigattiPivotStrategy() { } BigattiPivotStrategy::~BigattiPivotStrategy() { } namespace { class MedianPivot : public BigattiPivotStrategy { public: const Term& getPivot(BigattiState& state) { _counts.reset(state.getVarCount()); state.getIdeal().getSupportCounts(_counts); size_t var = _counts.getFirstMaxExponent(); _pivot.reset(state.getVarCount()); _pivot[var] = state.getMedianPositiveExponentOf(var); return _pivot; } virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "median"; } private: Term _counts; Term _pivot; }; /** Common base class for pivot strategies depending on genericity with code that makes that convenient. */ class GenericPivotCommon : public BigattiPivotStrategy { public: virtual const Term& getPivot(BigattiState& state) { _state = &state; _ideal = &(state.getIdeal()); driveMe(); return _pivot; } protected: /** Sub-classes should override driveMe and call a considerX method to consider some specific degree var^exp, and then call a selectX method to select a pivot that is computed based on the considered degree. */ virtual void driveMe() = 0; void considerTypical() { size_t count = _ideal->getTypicalExponent(_var, _exp); if (count <= 1) _exp = 0; // fall back to median. } void considerMostNonGeneric() { _ideal->getMostNonGenericExponent(_var, _exp); } void considerTypicalNonGeneric() { _ideal->getTypicalNonGenericExponent(_var, _exp); } void considerSomeNonGeneric() { _ideal->getNonGenericExponent(_var, _exp); } void selectPurePower() { if (_exp == 0) _pivot = getMedian(); else { _pivot.reset(_ideal->getVarCount()); _pivot[_var] = _exp; } } void selectGcd() { if (_exp == 0) _pivot = getMedian(); else { _pivot.reset(_ideal->getVarCount()); _ideal->getGcdAtExponent(_pivot, _var, _exp); ASSERT(!_pivot.isIdentity()); } } void selectTight() { if (_exp == 0) { _pivot = getMedian(); return; } _ideal->singleDegreeSort(_var); Ideal::const_iterator blockBegin = _ideal->begin(); Ideal::const_iterator stop = _ideal->end(); ASSERT(blockBegin != stop); // Find the start of the relevant block. while ((*blockBegin)[_var] != _exp) { ++blockBegin; ASSERT(blockBegin != stop); } ASSERT((*blockBegin)[_var] == _exp); Ideal::const_iterator blockEnd = blockBegin; do { ++blockEnd; } while (blockEnd != stop && (*blockEnd)[_var] == _exp); // At this point the range [blockBegin, blockEnd) contains every // generator that raises _var to _exp. bool first = true; _pivot.reset(_ideal->getVarCount()); Term lcm(_ideal->getVarCount()); // For a temporary value for (; blockBegin != blockEnd; ++blockBegin) { Ideal::const_iterator it = blockBegin; for (++it; it != blockEnd; ++it) { lcm.lcm(*blockBegin, *it); if (!_ideal->strictlyContains(lcm)) { // We only need to have the pivot remove one of // *blockBegin and *it. We choose to let it be *blockBegin // that is included in the gcd (and thus removed for sure) // just because that is easier to keep track of. if (first) { first = false; _pivot.gcd(*blockBegin, *it); } else { _pivot.gcd(_pivot, *blockBegin); _pivot.gcd(_pivot, *it); } break; } } } if (first) _pivot[_var] = _exp; ASSERT(!_pivot.isIdentity()); } private: Term _pivot; BigattiState* _state; Ideal* _ideal; size_t _var; Exponent _exp; /** The generic pivot strategies are designed to do away with non-genericity. If we have turned detecting of generic ideals as a base case off, they can then be faced with completely generic ideals for which they have nothing sensible to do. Thus it is necessary to have a fall-back for those cases, which is what getMedian offers. */ const Term& getMedian() { return _median.getPivot(*_state); } /** Used by getMedian(). */ MedianPivot _median; }; class MostNGPurePivot : public GenericPivotCommon { public: virtual void driveMe() { considerMostNonGeneric(); selectPurePower(); } virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "mostNGPure"; } }; class MostNGGcdPivot : public GenericPivotCommon { public: virtual void driveMe() { considerMostNonGeneric(); selectGcd(); } virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "mostNGGcd"; } }; class MostNGTightPivot : public GenericPivotCommon { public: virtual void driveMe() { considerMostNonGeneric(); selectTight(); } virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "mostNGTight"; } }; class TypicalNGPurePivot : public GenericPivotCommon { public: virtual void driveMe() { considerTypicalNonGeneric(); selectPurePower(); } virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "typicalNGPure"; } }; class TypicalNGGcdPivot : public GenericPivotCommon { public: virtual void driveMe() { considerTypicalNonGeneric(); selectGcd(); } virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "typicalNGGcd"; } }; class TypicalNGTightPivot : public GenericPivotCommon { public: virtual void driveMe() { considerTypicalNonGeneric(); selectTight(); } virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "typicalNGTight"; } }; class TypicalPurePivot : public GenericPivotCommon { public: virtual void driveMe() { considerTypical(); selectPurePower(); } virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "typicalPure"; } }; class TypicalGcdPivot : public GenericPivotCommon { public: virtual void driveMe() { considerTypical(); selectGcd(); } virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "typicalGcd"; } }; class TypicalTightPivot : public GenericPivotCommon { public: virtual void driveMe() { considerTypical(); selectTight(); } virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "typicalTight"; } }; class SomeNGPurePivot : public GenericPivotCommon { public: virtual void driveMe() { considerSomeNonGeneric(); selectPurePower(); } virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "someNGPure"; } }; class SomeNGGcdPivot : public GenericPivotCommon { public: virtual void driveMe() { considerSomeNonGeneric(); selectGcd(); } virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "someNGGcd"; } }; class SomeNGTightPivot : public GenericPivotCommon { public: virtual void driveMe() { considerSomeNonGeneric(); selectTight(); } virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "someNGTight"; } }; /** Widens the pivots selected by another pivot selection strategy. */ class WidenPivot : public BigattiPivotStrategy { public: WidenPivot(auto_ptr strategy): _strategy(strategy) { _name = _strategy->getName(); _name += " (wide)"; } const Term& getPivot(BigattiState& state) { const Term& pivot = _strategy->getPivot(state); _widePivot.reset(state.getVarCount()); state.getIdeal().getGcdOfMultiplesOf(_widePivot, pivot); return _widePivot; } virtual const char* getName() const { return _name.c_str(); } private: auto_ptr _strategy; string _name; Term _widePivot; }; typedef NameFactory StrategyFactory; StrategyFactory makeStrategyFactory() { StrategyFactory factory("Bigatti et.al. pivot strategy"); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); return factory; } } auto_ptr BigattiPivotStrategy:: createStrategy(const string& prefix, bool widen) { auto_ptr strategy = createWithPrefix(makeStrategyFactory(), prefix); ASSERT(strategy.get() != 0); if (widen) strategy = auto_ptr(new WidenPivot(strategy)); return strategy; } frobby-0.9.5/src/BigattiPivotStrategy.h000066400000000000000000000043631401527164200201100ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef BIGATTI_PIVOT_STRATEGY_GUARD #define BIGATTI_PIVOT_STRATEGY_GUARD class Term; class BigattiState; /** A BigattiPivotStrategy is an implementation of a pivot selection strategy for the Hilbert series algorithm by Bigatti et.al.. */ class BigattiPivotStrategy { public: virtual ~BigattiPivotStrategy(); /** Returns the pivot of a pivot split of state. The state is not changed mathematically, but e.g. the generators of the ideal may be permuted. The returned object will be valid until the next non-const method on this object is called, such as getPivot or a destructor. */ virtual const Term& getPivot(BigattiState& state) = 0; /** Returns the name of the strategy. */ virtual const char* getName() const = 0; /** Returns the strategy whose name has the given prefix. This function is the only way to create a BigattiPivotStrategy. A pivot p is widened by replacing it by \f$\gcd(\min(I)\cap\langle p\rangle/f$. This may be an improvement for the state with colon while being almost as good for the state with add. */ static auto_ptr createStrategy (const string& prefix, bool widen); protected: BigattiPivotStrategy(); // To make these inaccessible. They are not implemented. BigattiPivotStrategy(const BigattiPivotStrategy&); BigattiPivotStrategy& operator=(const BigattiPivotStrategy&); bool operator==(const BigattiPivotStrategy&); }; #endif frobby-0.9.5/src/BigattiState.cpp000066400000000000000000000056601401527164200167000ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "BigattiState.h" #include "BigattiHilbertAlgorithm.h" #include BigattiState::BigattiState(BigattiHilbertAlgorithm* algorithm, const Ideal& ideal, const Term& multiply): _algorithm(algorithm), _ideal(ideal), _multiply(multiply) { ASSERT(_algorithm != 0); ASSERT(_ideal.getVarCount() == _multiply.getVarCount()); } const Ideal& BigattiState::getIdeal() const { return _ideal; } const Term& BigattiState::getMultiply() const { return _multiply; } Ideal& BigattiState::getIdeal() { return _ideal; } Term& BigattiState::getMultiply() { return _multiply; } size_t BigattiState::getVarCount() const { ASSERT(_multiply.getVarCount() == _ideal.getVarCount()); return _ideal.getVarCount(); } Exponent BigattiState::getMedianPositiveExponentOf(size_t var) { ASSERT(var < getVarCount()); _ideal.singleDegreeSort(var); Ideal::const_iterator end = _ideal.end(); Ideal::const_iterator begin = _ideal.begin(); while ((*begin)[var] == 0) { ++begin; ASSERT(begin != end); } // This picks the lower median in case of a tie. Exponent median = (*(begin + (distance(begin, end) - 1) / 2))[var]; ASSERT(median > 0); return median; } size_t BigattiState::getTypicalExponent(size_t& var, Exponent& exp) { return _ideal.getTypicalExponent(var, exp); } void BigattiState::singleDegreeSort(size_t var) { _ideal.singleDegreeSort(var); } void BigattiState::colonStep(const Term& pivot) { ASSERT(pivot.getVarCount() == getVarCount()); _ideal.colonReminimize(pivot); _multiply.product(_multiply, pivot); } void BigattiState::addStep(const Term& pivot) { ASSERT(pivot.getVarCount() == getVarCount()); _ideal.insertReminimize(pivot); } void BigattiState::run(TaskEngine& tasks) { _algorithm->processState(auto_ptr(this)); } void BigattiState::dispose() { _algorithm->freeState(auto_ptr(this)); } void BigattiState::print(FILE* out) { ostringstream str; print(str); fputs(str.str().c_str(), out); } void BigattiState::print(ostream& out) { out << "BigattiState(multiply: " << _multiply << "\n" << _ideal << ")\n"; } frobby-0.9.5/src/BigattiState.h000066400000000000000000000032351401527164200163410ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef BIGATTI_STATE_GUARD #define BIGATTI_STATE_GUARD #include "Task.h" #include "Ideal.h" #include "Term.h" class BigattiHilbertAlgorithm; class BigattiState : public Task { public: BigattiState(BigattiHilbertAlgorithm* algorithm, const Ideal& ideal, const Term& _multiply); const Ideal& getIdeal() const; const Term& getMultiply() const; size_t getVarCount() const; Ideal& getIdeal(); Term& getMultiply(); Exponent getMedianPositiveExponentOf(size_t var); size_t getTypicalExponent(size_t& var, Exponent& exp); void singleDegreeSort(size_t var); void colonStep(const Term& term); void addStep(const Term& term); virtual void run(TaskEngine& tasks); virtual void dispose(); void print(FILE* out); void print(ostream& out); private: BigattiHilbertAlgorithm* _algorithm; Ideal _ideal; Term _multiply; }; #endif frobby-0.9.5/src/BoolParameter.cpp000066400000000000000000000035401401527164200170430ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "BoolParameter.h" #include "error.h" #include "FrobbyStringStream.h" BoolParameter::BoolParameter(const string& name, const string& description, bool defaultValue): Parameter(name, description), _value(defaultValue) { } string BoolParameter::doGetArgumentType() const { return "[BOOL]"; } string BoolParameter::doGetValueAsString() const { if (_value) return "on"; else return "off"; } pair BoolParameter::doGetArgumentCountRange() const { return make_pair(0, 1); } void BoolParameter::doProcessArguments(const char** args, size_t argCount) { if (argCount == 0) { _value = true; return; } ASSERT(argCount == 1); string arg(args[0]); if (arg == "off") _value = false; else if (arg == "on") _value = true; else { FrobbyStringStream errorMsg; errorMsg << "Option -" << getName() << " was given the argument \"" << arg << "\". The only valid arguments are \"on\" and \"off\"."; reportError(errorMsg); } } frobby-0.9.5/src/BoolParameter.h000066400000000000000000000027271401527164200165160ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef BOOL_PARAMETER_GUARD #define BOOL_PARAMETER_GUARD #include "Parameter.h" #include #include class BoolParameter : public Parameter { public: BoolParameter(const string& name, const string& description, bool defaultValue); bool getValue() const {return _value;} void setValue(bool value) {_value = value;} operator bool() const {return getValue();} void operator=(bool value) {return setValue(value);} private: virtual string doGetArgumentType() const; virtual string doGetValueAsString() const; virtual pair doGetArgumentCountRange() const; virtual void doProcessArguments(const char** args, size_t argCount); bool _value; }; #endif frobby-0.9.5/src/CanonicalCoefTermConsumer.cpp000066400000000000000000000032771401527164200213460ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "CanonicalCoefTermConsumer.h" #include "Term.h" CanonicalCoefTermConsumer:: CanonicalCoefTermConsumer(auto_ptr consumer): _consumer(consumer) { ASSERT(_consumer.get() != 0); } void CanonicalCoefTermConsumer::consumeRing(const VarNames& names) { _polynomial.clearAndSetVarCount(names.getVarCount()); _names = names; } void CanonicalCoefTermConsumer::beginConsuming() { } void CanonicalCoefTermConsumer::consume (const mpz_class& coef, const Term& term) { ASSERT(term.getVarCount() == _polynomial.getVarCount()); _polynomial.add(coef, term); } void CanonicalCoefTermConsumer::doneConsuming() { _polynomial.sortTermsReverseLex(); _consumer->consumeRing(_names); _consumer->beginConsuming(); for (size_t index = 0; index < _polynomial.getTermCount(); ++index) _consumer->consume(_polynomial.getCoef(index), _polynomial.getTerm(index)); _consumer->doneConsuming(); _polynomial.clear(); } frobby-0.9.5/src/CanonicalCoefTermConsumer.h000066400000000000000000000027051401527164200210060ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef CANONICAL_COEF_TERM_CONSUMER_GUARD #define CANONICAL_COEF_TERM_CONSUMER_GUARD #include "CoefTermConsumer.h" #include "Polynomial.h" #include "VarNames.h" class Term; // Passes consumed items on in a canonical order. This requires // storing all items before any can be passed on. class CanonicalCoefTermConsumer : public CoefTermConsumer { public: CanonicalCoefTermConsumer(auto_ptr consumer); virtual void consumeRing(const VarNames& names); virtual void beginConsuming(); virtual void consume(const mpz_class& coef, const Term& term); virtual void doneConsuming(); private: auto_ptr _consumer; Polynomial _polynomial; VarNames _names; }; #endif frobby-0.9.5/src/CanonicalTermConsumer.cpp000066400000000000000000000065571401527164200205550ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "CanonicalTermConsumer.h" #include "TermTranslator.h" #include "IdealComparator.h" #include "Term.h" CanonicalTermConsumer::CanonicalTermConsumer(auto_ptr consumer, size_t varCount, TermTranslator* translator): _varCount(varCount), _storingList(false), _ideals(), _idealsDeleter(_ideals), _consumer(consumer), _translator(translator) { ASSERT(_consumer.get() != 0); } void CanonicalTermConsumer::consumeRing(const VarNames& names) { _consumer->consumeRing(names); } void CanonicalTermConsumer::beginConsumingList() { ASSERT(!_storingList); ASSERT(_ideals.empty()); _storingList = true; } void CanonicalTermConsumer::beginConsuming() { ASSERT(_storingList || _ideals.empty()); auto_ptr ideal(new Ideal(_varCount)); exceptionSafePushBack(_ideals, ideal); } void CanonicalTermConsumer::consume(const Term& term) { ASSERT(term.getVarCount() == _varCount); ASSERT(!_ideals.empty()); _ideals.back()->insert(term); } void CanonicalTermConsumer::doneConsuming() { if (!_storingList) { ASSERT(_ideals.size() == 1); passLastIdeal(); ASSERT(_ideals.empty()); } } void CanonicalTermConsumer::doneConsumingList() { ASSERT(_storingList); vector::iterator end = _ideals.end(); for (vector::iterator it = _ideals.begin(); it != end; ++it) canonicalizeIdeal(**it); // We are sorting in reverse because we are processing the ideals from // the back, so they get passed on in the correct order. if (_translator == 0) { IdealComparator comparator; sort(_ideals.rbegin(), _ideals.rend(), comparator); } else { TranslatedIdealComparator comparator(*_translator); sort(_ideals.rbegin(), _ideals.rend(), comparator); } _consumer->beginConsumingList(); while (!_ideals.empty()) passLastIdeal(); _consumer->doneConsumingList(); } void CanonicalTermConsumer::passLastIdeal() { ASSERT(!_ideals.empty()); ASSERT(_ideals.back() != 0); auto_ptr ideal(_ideals.back()); _ideals.pop_back(); canonicalizeIdeal(*ideal); _consumer->beginConsuming(); Term tmp(_varCount); Ideal::const_iterator end = ideal->end(); for (Ideal::const_iterator it = ideal->begin(); it != end; ++it) { tmp = *it; _consumer->consume(tmp); } ideal.reset(0); _consumer->doneConsuming(); } void CanonicalTermConsumer::canonicalizeIdeal(Ideal& ideal) { if (_translator == 0) ideal.sortReverseLex(); else { TranslatedReverseLexComparator comparator(*_translator); sort(ideal.begin(), ideal.end(), comparator); } } frobby-0.9.5/src/CanonicalTermConsumer.h000066400000000000000000000047001401527164200202060ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef CANONICAL_TERM_CONSUMER_GUARD #define CANONICAL_TERM_CONSUMER_GUARD #include "TermConsumer.h" #include "Ideal.h" #include "ElementDeleter.h" class Term; class TermTranslator; /** Passes consumed items on in a canonical order. This requires storing all items before any can be passed on, which can take a lot of memory. The ideals are not minimized, so adding non-minimal generators can have an effect on the sorted order. */ class CanonicalTermConsumer : public TermConsumer { public: /** The translator, if non-null, is used to identify exponents that map to zero, which influences the sorted order. */ CanonicalTermConsumer(auto_ptr consumer, size_t varCount, TermTranslator* translator = 0); /** Passes on the call immediately. Thus the ordering between when this gets called and when consume gets called on the wrapped consumer can be switched around if consumeRing is called while consuming a list of ideals. @todo fix this. */ virtual void consumeRing(const VarNames& names); /** This method is not required to be called. If it is called, the list of ideals will be sorted and then passed on. If it is not called, each ideal will be passed on immediately. */ virtual void beginConsumingList(); virtual void beginConsuming(); virtual void consume(const Term& term); virtual void doneConsuming(); virtual void doneConsumingList(); private: void passLastIdeal(); void canonicalizeIdeal(Ideal& ideal); size_t _varCount; bool _storingList; vector _ideals; ElementDeleter > _idealsDeleter; auto_ptr _consumer; TermTranslator* _translator; }; #endif frobby-0.9.5/src/CliParams.cpp000066400000000000000000000107621401527164200161660ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "CliParams.h" #include "error.h" #include "ParameterGroup.h" #include "IntegerParameter.h" #include "BoolParameter.h" #include "StringParameter.h" #include "NameFactory.h" namespace { typedef void* Dummy; typedef NameFactory ParamNames; ParamNames getParamNames(vector params) { struct HoldsFunction { static auto_ptr dummyCreate() { return auto_ptr(0); } }; ParamNames names("option"); for (size_t i = 0; i < params.size(); ++i) names.registerProduct(params[i]->getName(), HoldsFunction::dummyCreate); return names; } } CliParams::CliParams(): _paramsDeleter(_ownedParams) { } void CliParams::parseCommandLine(unsigned int tokenCount, const char** tokens) { ParamNames names = getParamNames(_params); unsigned int i = 0; while (i < tokenCount) { if (tokens[i][0] != '-') reportError(string("Expected an option when reading \"") + tokens[i] + "\", but options start with a dash (-).\n"); string prefix(tokens[i] + 1); // +1 to skip the '-' string name = getUniqueNameWithPrefix(names, prefix); // Parse list of arguments to option. size_t argCount = 0; while (i + 1 + argCount < tokenCount && tokens[i + 1 + argCount][0] != '-') ++argCount; processOption(name, tokens + i + 1, argCount); i += argCount + 1; } } void CliParams::processOption(const string& optionName, const char** args, unsigned int argCount) { for (vector::iterator it = _params.begin(); it != _params.end(); ++it) { if ((*it)->getName() == optionName) { (*it)->processArguments(args, argCount); return; } } reportInternalError("Processing non-existent option \"" + optionName + "\"."); } void CliParams::add(auto_ptr param) { ASSERT(!hasParam(param->getName())); Parameter& paramRef = *param; exceptionSafePushBack(_ownedParams, param); add(paramRef); } void CliParams::add(Parameter& param) { ASSERT(!hasParam(param.getName())); _params.push_back(¶m); } void CliParams::add(ParameterGroup& params) { for (ParameterGroup::iterator it = params.begin(); it != params.end(); ++it) add(**it); } bool CliParams::hasParam(const string& name) const { for (const_iterator it = _params.begin(); it != _params.end(); ++it) if ((*it)->getName() == name) return true; return false; } const Parameter& CliParams::getParam(const string& name) const { return const_cast(this)->getParam(name); } Parameter& CliParams::getParam(const string& name) { for (const_iterator it = _params.begin(); it != _params.end(); ++it) if ((*it)->getName() == name) return **it; INTERNAL_ERROR("Unknown parameter " + name + "."); } bool getBool(const CliParams& params, const string& name) { const Parameter& param = params.getParam(name); ASSERT(dynamic_cast(¶m) != 0); return static_cast(param); } const string& getString(const CliParams& params, const string& name) { const Parameter& param = params.getParam(name); ASSERT(dynamic_cast(¶m) != 0); return static_cast(param); } unsigned int getInt(const CliParams& params, const string& name) { const Parameter& param = params.getParam(name); ASSERT(dynamic_cast(¶m) != 0); return static_cast(param); } void setBool(CliParams& params, const string& name, bool newValue) { Parameter& param = params.getParam(name); ASSERT(dynamic_cast(¶m) != 0); static_cast(param) = newValue; } frobby-0.9.5/src/CliParams.h000066400000000000000000000041721401527164200156310ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef CLI_PARAMS_GUARD #define CLI_PARAMS_GUARD #include "Parameter.h" #include "ElementDeleter.h" #include #include class ParameterGroup; class CliParams { public: typedef vector::iterator iterator; typedef vector::const_iterator const_iterator; CliParams(); const_iterator begin() const {return _params.begin();} const_iterator end() const {return _params.end();} /** @todo: fix that this doesn't actually take over ownership */ void add(auto_ptr param); void add(Parameter& param); void add(ParameterGroup& params); bool hasParam(const string& name) const; const Parameter& getParam(const string& name) const; Parameter& getParam(const string& name); void parseCommandLine(unsigned int tokenCount, const char** tokens); void processOption(const string& optionName, const char** params, unsigned int paramCount); private: vector _params; vector _ownedParams; ElementDeleter > _paramsDeleter; }; bool getBool(const CliParams& params, const string& name); const string& getString(const CliParams& params, const string& name); unsigned int getInt(const CliParams& params, const string& name); void setBool(CliParams& params, const string& name, bool newValue); #endif frobby-0.9.5/src/CoCoA4IOHandler.cpp000066400000000000000000000267731401527164200170620ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "CoCoA4IOHandler.h" #include "Scanner.h" #include "VarNames.h" #include "Term.h" #include "TermTranslator.h" #include "FrobbyStringStream.h" #include "DataType.h" #include "IdealWriter.h" #include "PolyWriter.h" #include "error.h" #include "InputConsumer.h" #include namespace IO { namespace CoCoA4 { void writeRing(const VarNames& names, FILE* out); void writeTermProduct(const Term& term, const TermTranslator& translator, FILE* out); void writeTermProduct(const vector& term, const VarNames& names, FILE* out); void readTerm(Scanner& in, vector& term); void readTerm(Scanner& in, InputConsumer& consumer); void readVarPower(vector& term, Scanner& in); void readVarPower(Scanner& in, InputConsumer& consumer); void readCoefTerm(mpz_class& coef, vector& term, bool firstTerm, Scanner& in); } namespace C = CoCoA4; class CoCoA4IdealWriter : public IdealWriter { public: CoCoA4IdealWriter(FILE* out): IdealWriter(out) { } private: virtual void doWriteHeader(bool first) { C::writeRing(getNames(), getFile()); fputs("I := Ideal(", getFile()); } virtual void doWriteTerm(const Term& term, const TermTranslator& translator, bool first) { fputs(first ? "\n " : ",\n ", getFile()); C::writeTermProduct(term, translator, getFile()); } virtual void doWriteTerm(const vector& term, bool first) { fputs(first ? "\n " : ",\n ", getFile()); C::writeTermProduct(term, getNames(), getFile()); } virtual void doWriteFooter(bool wasZeroIdeal) { fputs("\n);\n", getFile()); } virtual void doWriteEmptyList() { C::writeRing(getNames(), getFile()); } }; class CoCoA4PolyWriter : public PolyWriter { public: CoCoA4PolyWriter(FILE* out): PolyWriter(out) { } virtual void doWriteHeader() { C::writeRing(getNames(), getFile()); fputs("p :=", getFile()); } virtual void doWriteTerm(const mpz_class& coef, const Term& term, const TermTranslator& translator, bool firstGenerator) { fputs("\n ", getFile()); if (coef >= 0 && !firstGenerator) fputc('+', getFile()); if (term.isIdentity()) { gmp_fprintf(getFile(), "%Zd", coef.get_mpz_t()); return; } if (coef == -1) fputc('-', getFile()); else if (coef != 1) gmp_fprintf(getFile(), "%Zd", coef.get_mpz_t()); C::writeTermProduct(term, translator, getFile()); } virtual void doWriteTerm(const mpz_class& coef, const vector& term, bool firstGenerator) { fputs("\n ", getFile()); if (coef >= 0 && !firstGenerator) fputc('+', getFile()); bool isIdentity = true; for (size_t var = 0; var < term.size(); ++var) if (term[var] != 0) isIdentity = false; if (isIdentity) { gmp_fprintf(getFile(), "%Zd", coef.get_mpz_t()); return; } if (coef == -1) fputc('-', getFile()); else if (coef != 1) gmp_fprintf(getFile(), "%Zd", coef.get_mpz_t()); C::writeTermProduct(term, getNames(), getFile()); } virtual void doWriteFooter(bool wasZero) { if (wasZero) fputs("\n 0", getFile()); fputs(";\n", getFile()); } }; IO::CoCoA4IOHandler::CoCoA4IOHandler(): IOHandlerCommon(staticGetName(), "Format understandable by the program CoCoA 4.") { registerInput(DataType::getMonomialIdealType()); registerInput(DataType::getMonomialIdealListType()); registerInput(DataType::getPolynomialType()); registerOutput(DataType::getMonomialIdealType()); registerOutput(DataType::getPolynomialType()); } const char* CoCoA4IOHandler::staticGetName() { return "cocoa4"; } BigTermConsumer* CoCoA4IOHandler::doCreateIdealWriter(FILE* out) { return new CoCoA4IdealWriter(out); } CoefBigTermConsumer* CoCoA4IOHandler::doCreatePolynomialWriter(FILE* out) { return new CoCoA4PolyWriter(out); } void CoCoA4IOHandler::doWriteTerm(const vector& term, const VarNames& names, FILE* out) { C::writeTermProduct(term, names, out); } void CoCoA4IOHandler::doReadTerm(Scanner& in, InputConsumer& consumer) { C::readTerm(in, consumer); } void CoCoA4IOHandler::doReadRing(Scanner& in, VarNames& names) { names.clear(); in.expect("Use"); in.expect('R'); in.expect("::="); in.expect('Q'); in.expect('['); in.expect('x'); size_t varCount = 0; if (in.match('[')) { in.expect('1'); in.expect(".."); in.readSizeT(varCount); in.expect(']'); } in.expect(']'); in.expect(';'); in.expect("Names"); in.expect(":="); in.expect('['); for (size_t var = 0; var < varCount; ++var) { in.expect('\"'); if (in.peekWhite()) reportSyntaxError(in, "Variable name contains space."); names.addVarSyntaxCheckUnique(in, in.readIdentifier()); if (in.peekWhite()) reportSyntaxError(in, "Variable name contains space."); in.expect('\"'); if (var < varCount - 1) in.expect(','); } in.expect(']'); in.expect(';'); } bool CoCoA4IOHandler::doPeekRing(Scanner& in) { return in.peek('U') || in.peek('u'); } void CoCoA4IOHandler::doReadBareIdeal (Scanner& in, InputConsumer& consumer) { consumer.beginIdeal(); in.expect('I'); in.expect(":="); in.expect("Ideal"); in.expect('('); if (!in.match(')')) { do { C::readTerm(in, consumer); } while (in.match(',')); in.expect(')'); } in.match(';'); consumer.endIdeal(); } void CoCoA4IOHandler::doReadBarePolynomial(Scanner& in, const VarNames& names, CoefBigTermConsumer& consumer) { consumer.consumeRing(names); vector term(names.getVarCount()); mpz_class coef; in.expect('p'); in.expect(":="); consumer.beginConsuming(); bool first = true; do { C::readCoefTerm(coef, term, first, in); consumer.consume(coef, term); first = false; } while (!in.match(';')); consumer.doneConsuming(); } void C::writeRing(const VarNames& names, FILE* out) { if (names.getVarCount() == 0) { fputs("Use R ::= Q[x];\nNames := [];\n", out); return; } fprintf(out, "Use R ::= Q[x[1..%lu]];\n", (unsigned long)names.getVarCount()); fputs("Names := [", out); const char* pre = "\""; for (size_t i = 0; i < names.getVarCount(); ++i) { fputs(pre, out); fputs(names.getName(i).c_str(), out); pre = "\", \""; } fputs("\"];\n", out); } void C::writeTermProduct(const Term& term, const TermTranslator& translator, FILE* out) { bool seenNonZero = false; size_t varCount = term.getVarCount(); for (size_t var = 0; var < varCount; ++var) { const char* exp = translator.getExponentString(var, term[var]); if (exp == 0) continue; seenNonZero = true; fprintf(out, "x[%lu]", (unsigned long)(var + 1)); if (exp[0] != '1' || exp[1] != '\0') { fputc('^', out); fputs(exp, out); } } if (!seenNonZero) fputc('1', out); } void C::writeTermProduct(const vector& term, const VarNames& names, FILE* out) { bool seenNonZero = false; size_t varCount = term.size(); for (size_t var = 0; var < varCount; ++var) { if (term[var] == 0) continue; seenNonZero = true; fprintf(out, "x[%lu]", (unsigned long)(var + 1)); if (term[var] != 1) { fputc('^', out); mpz_out_str(out, 10, term[var].get_mpz_t()); } } if (!seenNonZero) fputc('1', out); } void C::readTerm(Scanner& in, vector& term) { for (size_t var = 0; var < term.size(); ++var) term[var] = 0; if (in.match('1')) return; do { C::readVarPower(term, in); in.eatWhite(); } while (in.peek() == 'x'); } void C::readTerm(Scanner& in, InputConsumer& consumer) { consumer.beginTerm(); if (!in.match('1')) { do { C::readVarPower(in, consumer); in.eatWhite(); } while (in.peek() == 'x'); } consumer.endTerm(); } void C::readVarPower(vector& term, Scanner& in) { in.expect('x'); in.expect('['); size_t var; in.readSizeT(var); if (var == 0 || var > term.size()) { FrobbyStringStream errorMsg; errorMsg << "There is no variable x[" << var << "]."; reportSyntaxError(in, errorMsg); } --var; in.expect(']'); if (term[var] != 0) { FrobbyStringStream errorMsg; errorMsg << "The variable x[" << (var + 1) << "] appears twice in the same monomial."; reportSyntaxError(in, errorMsg); } if (in.match('^')) { in.readInteger(term[var]); if (term[var] <= 0) { FrobbyStringStream errorMsg; errorMsg << "Expected positive integer as exponent but got " << term[var] << '.'; reportSyntaxError(in, errorMsg); } } else term[var] = 1; } void C::readVarPower(Scanner& in, InputConsumer& consumer) { in.expect('x'); in.expect('['); size_t var = consumer.consumeVarNumber(in); in.expect(']'); if (in.match('^')) consumer.consumeVarExponent(var, in); else consumer.consumeVarExponentOne(var, in); } void C::readCoefTerm(mpz_class& coef, vector& term, bool firstTerm, Scanner& in) { for (size_t var = 0; var < term.size(); ++var) term[var] = 0; bool positive = true; if (!firstTerm && in.match('+')) positive = !in.match('-'); else if (in.match('-')) positive = false; else if (!firstTerm) { in.expect('+'); return; } if (in.match('+') || in.match('-')) reportSyntaxError(in, "Too many adjacent signs."); if (in.peekIdentifier()) { coef = 1; C::readVarPower(term, in); } else in.readInteger(coef); in.eatWhite(); while (in.peek() == 'x') { C::readVarPower(term, in); in.eatWhite(); } if (!positive) coef = -coef; } } frobby-0.9.5/src/CoCoA4IOHandler.h000066400000000000000000000034751401527164200165210ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef COCOA_4_IO_HANDLER_GUARD #define COCOA_4_IO_HANDLER_GUARD #include "IOHandlerCommon.h" #include class VarNames; class Scanner; class BigTermConsumer; class CoefBigTermConsumer; class InputConsumer; namespace IO { class CoCoA4IOHandler : public IOHandlerCommon { public: CoCoA4IOHandler(); static const char* staticGetName(); private: virtual BigTermConsumer* doCreateIdealWriter(FILE* out); virtual CoefBigTermConsumer* doCreatePolynomialWriter(FILE* out); virtual void doWriteTerm(const vector& term, const VarNames& names, FILE* out); virtual void doReadTerm(Scanner& in, InputConsumer& consumer); virtual void doReadRing(Scanner& in, VarNames& names); virtual bool doPeekRing(Scanner& in); virtual void doReadBareIdeal(Scanner& in, InputConsumer& consumer); virtual void doReadBarePolynomial(Scanner& in, const VarNames& names, CoefBigTermConsumer& consumer); }; } #endif frobby-0.9.5/src/CoefBigTermConsumer.cpp000066400000000000000000000027531401527164200201560ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "CoefBigTermConsumer.h" #include "BigPolynomial.h" #include "Term.h" // Do not use this implementation when in need of high performance, since // allocating a new big term each time is not very efficient. void CoefBigTermConsumer::consume(const mpz_class& coef, const Term& term) { vector bigTerm; bigTerm.reserve(term.getVarCount()); for (size_t var = 0; var < term.getVarCount(); ++var) bigTerm.push_back(term[var]); consume(coef, bigTerm); } void CoefBigTermConsumer::consume(const BigPolynomial& poly) { consumeRing(poly.getNames()); beginConsuming(); for (size_t index = 0; index < poly.getTermCount(); ++index) consume(poly.getCoef(index), poly.getTerm(index)); doneConsuming(); } frobby-0.9.5/src/CoefBigTermConsumer.h000066400000000000000000000027131401527164200176170ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef COEF_BIG_TERM_CONSUMER_GUARD #define COEF_BIG_TERM_CONSUMER_GUARD #include "CoefTermConsumer.h" #include class Term; class TermTranslator; class BigPolynomial; class VarNames; class CoefBigTermConsumer : public CoefTermConsumer { public: virtual void consumeRing(const VarNames& names) = 0; virtual void beginConsuming() = 0; virtual void consume(const mpz_class& coef, const Term& term); virtual void consume (const mpz_class& coef, const Term& term, const TermTranslator& translator) = 0; virtual void consume (const mpz_class& coef, const vector& term) = 0; virtual void doneConsuming() = 0; virtual void consume(const BigPolynomial& poly); }; #endif frobby-0.9.5/src/CoefBigTermRecorder.cpp000066400000000000000000000030231401527164200201170ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "CoefBigTermRecorder.h" #include "BigPolynomial.h" CoefBigTermRecorder::CoefBigTermRecorder(BigPolynomial* recordInto): _recordInto(recordInto) { ASSERT(recordInto != 0); } void CoefBigTermRecorder::consumeRing(const VarNames& names) { _recordInto->clearAndSetNames(names); } void CoefBigTermRecorder::beginConsuming() { } void CoefBigTermRecorder::consume(const mpz_class& coef, const Term& term, const TermTranslator& translator) { _recordInto->add(coef, term, translator); } void CoefBigTermRecorder::consume(const mpz_class& coef, const vector& term) { _recordInto->add(coef, term); } void CoefBigTermRecorder::doneConsuming() { } frobby-0.9.5/src/CoefBigTermRecorder.h000066400000000000000000000030151401527164200175650ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef COEF_BIG_TERM_RECORDER_GUARD #define COEF_BIG_TERM_RECORDER_GUARD #include "CoefBigTermConsumer.h" class TermTranslator; class BigPolynomial; // This records what it is fed into a passed-in polynomial. class CoefBigTermRecorder : public CoefBigTermConsumer { public: CoefBigTermRecorder(BigPolynomial* recordInto); // Clears the ideal and sets the ring. virtual void consumeRing(const VarNames& names); virtual void beginConsuming(); virtual void consume(const mpz_class& coef, const Term& term, const TermTranslator& translator); virtual void consume(const mpz_class& coef, const vector& term); virtual void doneConsuming(); private: BigPolynomial* _recordInto; }; #endif frobby-0.9.5/src/CoefTermConsumer.cpp000066400000000000000000000021101401527164200175170ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "CoefTermConsumer.h" #include "Polynomial.h" CoefTermConsumer::~CoefTermConsumer() { } void CoefTermConsumer::consume(const Polynomial& poly) { beginConsuming(); for (size_t index = 0; index < poly.getTermCount(); ++index) consume(poly.getCoef(index), poly.getTerm(index)); doneConsuming(); } frobby-0.9.5/src/CoefTermConsumer.h000066400000000000000000000022571401527164200172000ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef COEF_TERM_CONSUMER_GUARD #define COEF_TERM_CONSUMER_GUARD class Term; class VarNames; class Polynomial; class CoefTermConsumer { public: virtual ~CoefTermConsumer(); virtual void consume(const Polynomial& poly); virtual void consumeRing(const VarNames& names) = 0; virtual void beginConsuming() = 0; virtual void consume(const mpz_class& coef, const Term& term) = 0; virtual void doneConsuming() = 0; }; #endif frobby-0.9.5/src/ColumnPrinter.cpp000066400000000000000000000067511401527164200171170ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "ColumnPrinter.h" #include "FrobbyStringStream.h" namespace { size_t getLineWidth(const string& str, size_t pos) { size_t startPos = pos; while (pos < str.size() && str[pos] != '\n') ++pos; return pos - startPos; } void printSpaces(ostream& out, size_t howMany) { while (howMany > 0) { out << ' '; --howMany; } } } ColumnPrinter::ColumnPrinter(size_t columnCount): _cols(), _colsDeleter(_cols) { while (columnCount > 0) { addColumn(); --columnCount; } } void ColumnPrinter::setPrefix(const string& prefix) { _prefix = prefix; } void ColumnPrinter::addColumn(bool flushLeft, const string& prefix, const string& suffix) { auto_ptr col(new Col()); col->prefix = prefix; col->suffix = suffix; col->flushLeft = flushLeft; exceptionSafePushBack(_cols, col); } size_t ColumnPrinter::getColumnCount() const { return _cols.size(); } ostream& ColumnPrinter::operator[](size_t col) { ASSERT(col < getColumnCount()); return _cols[col]->text; } void ColumnPrinter::print(ostream& out) const { // Calculate the width of each column. vector widths(getColumnCount()); for (size_t col = 0; col < getColumnCount(); ++col) { const string& text = _cols[col]->text.str(); size_t maxWidth = 0; size_t pos = 0; while (pos < text.size()) { size_t width = getLineWidth(text, pos); if (width > maxWidth) maxWidth = width; // We can't just increment pos unconditionally by width + 1, as // that could result in an overflow. pos += width; if (text[pos] == '\n') ++pos; } widths[col] = maxWidth; } // Print each row vector poses(getColumnCount()); while (true) { bool done = true; for (size_t col = 0; col < getColumnCount(); ++col) { if (poses[col] < _cols[col]->text.str().size()) { done = false; break; } } if (done) break; out << _prefix; for (size_t col = 0; col < getColumnCount(); ++col) { out << _cols[col]->prefix; const string& text = _cols[col]->text.str(); size_t& pos = poses[col]; size_t width = getLineWidth(text, pos); if (!_cols[col]->flushLeft) printSpaces(out, widths[col] - width); while (pos < text.size()) { if (text[pos] == '\n') { ++pos; break; } out << text[pos]; ++pos; } if (_cols[col]->flushLeft) printSpaces(out, widths[col] - width); out << _cols[col]->suffix; } out << '\n'; } } void ColumnPrinter::print(FrobbyStringStream& out) const { ostringstream tmp; print(tmp); out << tmp.str().c_str(); } ostream& operator<<(ostream& out, const ColumnPrinter& printer) { printer.print(out); return out; } void print(FILE* out, const ColumnPrinter& pr) { ostringstream str; str << pr; fputs(str.str().c_str(), out); } frobby-0.9.5/src/ColumnPrinter.h000066400000000000000000000030651401527164200165570ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef COLUMN_PRINTER_GUARD #define COLUMN_PRINTER_GUARD #include "ElementDeleter.h" #include #include class FrobbyStringStream; class ColumnPrinter { public: ColumnPrinter(size_t columnCount = 0); void setPrefix(const string& prefix); void addColumn(bool flushLeft = true, const string& prefix = " ", const string& suffix = ""); size_t getColumnCount() const; ostream& operator[](size_t col); void print(ostream& out) const; void print(FrobbyStringStream& out) const; private: struct Col { string prefix; stringstream text; string suffix; bool flushLeft; }; vector _cols; ElementDeleter > _colsDeleter; string _prefix; }; ostream& operator<<(ostream& out, const ColumnPrinter& printer); void print(FILE* out, const ColumnPrinter& pr); #endif frobby-0.9.5/src/CommonParams.cpp000066400000000000000000000050221401527164200167000ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "CommonParams.h" #include "CliParams.h" #include "IOHandler.h" #include "BoolParameter.h" CommonParams::CommonParams(): _idealIsMinimal(false), _printActions(false), _produceCanonicalOutput(false), _printDebug(false), _printStatistics(false), _inputFormat(getFormatNameIndicatingToGuessTheInputFormat()), _outputFormat(getFormatNameIndicatingToUseInputFormatAsOutputFormat()) { } namespace { static const char* IdealIsMinimalName = "minimal"; static const char* PrintActionsName = "time"; static const char* CanonicalName = "canon"; static const char* InputFormatParamName = "iformat"; static const char* OutputFormatParamName = "oformat"; static const char* PrintDebugName = "debug"; static const char* PrintStatisticsName = "stats"; } void addDebugParam(CliParams& params) { ASSERT(!params.hasParam(PrintDebugName)); params.add (auto_ptr (new BoolParameter ("debug", "Print what the algorithm does at each step.", false))); } void addCommonParams(CliParams& params) { addDebugParam(params); } void extractCliValues(CommonParams& common, const CliParams& cli) { common.idealIsMinimal(getBool(cli, IdealIsMinimalName)); common.printActions(getBool(cli, PrintActionsName)); common.produceCanonicalOutput(getBool(cli, CanonicalName)); if (cli.hasParam(InputFormatParamName)) common.setInputFormat(getString(cli, InputFormatParamName)); if (cli.hasParam(OutputFormatParamName)) common.setOutputFormat(getString(cli, OutputFormatParamName)); if (cli.hasParam(PrintDebugName)) common.printDebug(getBool(cli, PrintDebugName)); if (cli.hasParam(PrintStatisticsName)) common.printStatistics(getBool(cli, PrintStatisticsName)); } frobby-0.9.5/src/CommonParams.h000066400000000000000000000061421401527164200163510ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef COMMON_PARAMS_GUARD #define COMMON_PARAMS_GUARD #include class CliParams; class CommonParams { public: CommonParams(); /** Returns whether the input ideal is known to be minimally generated. This option is off by default. If the ideal is minimally generated, setting this option can improve performance. However, if this option is set and the ideal is not actually minimally generated, then Frobby will exhibit undefined behavior. Possibilities for what might happen include crashing, going into an infinite loop and producing incorrect results. */ bool getIdealIsMinimal() const {return _idealIsMinimal;} void idealIsMinimal(bool value) {_idealIsMinimal = value;} /** Returns whether to print and time the large-scale actions that Frobby performs. */ bool getPrintActions() const {return _printActions;} void printActions(bool value) {_printActions = value;} /** Returns the format used for parsing input. */ const string& getInputFormat() const {return _inputFormat;} void setInputFormat(const string& value) {_inputFormat = value;} /** Returns the format in which output is produced. */ const string& getOutputFormat() const {return _outputFormat;} void setOutputFormat(const string& value) {_outputFormat = value;} /** Returns whether to produce output in a canonical representation. */ bool getProduceCanonicalOutput() const {return _produceCanonicalOutput;} void produceCanonicalOutput(bool value) {_produceCanonicalOutput = value;} /** Returns whether to print information about what the algorithm is doing to standard error as it runs. */ bool getPrintDebug() const {return _printDebug;} void printDebug(bool value) {_printDebug = value;} /** Returns whether to print statistics on what the algorithm did to standard error after it has run. */ bool getPrintStatistics() const {return _printStatistics;} void printStatistics(bool value) {_printStatistics = value;} private: bool _idealIsMinimal; bool _printActions; bool _produceCanonicalOutput; bool _printDebug; bool _printStatistics; string _inputFormat; string _outputFormat; }; void addCommonParams(CliParams& params); void addDebugParam(CliParams& params); void extractCliValues(CommonParams& common, const CliParams& cli); #endif frobby-0.9.5/src/CommonParamsHelper.cpp000066400000000000000000000156161401527164200200520ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "CommonParamsHelper.h" #include "CommonParams.h" #include "IOFacade.h" #include "BigIdeal.h" #include "Ideal.h" #include "TermTranslator.h" #include "VarSorter.h" #include "Scanner.h" #include "IOHandler.h" #include "DataType.h" #include "error.h" #include "BigTermConsumer.h" #include "CoefBigTermConsumer.h" #include "ActionPrinter.h" #include "NullTermConsumer.h" #include "NullCoefTermConsumer.h" #include "IrreducibleIdealSplitter.h" #include "TranslatingTermConsumer.h" #include "TranslatingCoefTermConsumer.h" #include "CanonicalTermConsumer.h" #include "CanonicalCoefTermConsumer.h" #include "TotalDegreeCoefTermConsumer.h" CommonParamsHelper::CommonParamsHelper(): _idealConsumer(0), _polyConsumer(0), _produceCanonicalOutput(false) { } CommonParamsHelper::~CommonParamsHelper() { // Constructor defined so auto_ptr in the header does not need // definition of T. } void CommonParamsHelper::readIdealAndSetOutput(const CommonParams& params, const DataType& output) { _produceCanonicalOutput = params.getProduceCanonicalOutput(); Scanner in(params.getInputFormat(), stdin); auto_ptr outputHandler = createOHandler(in.getFormat(), params.getOutputFormat()); if (output == DataType::getPolynomialType()) { _polyConsumerDeleter = outputHandler->createPolynomialWriter(stdout); _polyConsumer = _polyConsumerDeleter.get(); } else if (output == DataType::getMonomialIdealType()) { _idealConsumerDeleter = outputHandler->createIdealWriter(stdout); _idealConsumer = _idealConsumerDeleter.get(); } else if (output == DataType::getMonomialIdealListType()) { _idealConsumerDeleter = outputHandler->createIdealListWriter(stdout); _idealConsumer = _idealConsumerDeleter.get(); } else if (output == DataType::getNullType()) { _idealConsumerDeleter.reset(new NullTermConsumer()); _idealConsumer = _idealConsumerDeleter.get(); _polyConsumerDeleter.reset(new NullCoefTermConsumer()); _polyConsumer = _polyConsumerDeleter.get(); } else { string msg = "Unsupported output type of "; msg += output.getName(); msg += '.'; INTERNAL_ERROR(msg); } readIdeal(params, in); } void CommonParamsHelper::readIdealAndSetPolyOutput(const CommonParams& params) { _produceCanonicalOutput = params.getProduceCanonicalOutput(); Scanner in(params.getInputFormat(), stdin); auto_ptr outputHandler = createOHandler(in.getFormat(), params.getOutputFormat()); _polyConsumerDeleter = outputHandler->createPolynomialWriter(stdout); _polyConsumer = _polyConsumerDeleter.get(); readIdeal(params, in); } void CommonParamsHelper::readIdealAndSetIdealOutput (const CommonParams& params) { _produceCanonicalOutput = params.getProduceCanonicalOutput(); Scanner in(params.getInputFormat(), stdin); auto_ptr outputHandler = createOHandler(in.getFormat(), params.getOutputFormat()); _idealConsumerDeleter = outputHandler->createIdealWriter(stdout); _idealConsumer = _idealConsumerDeleter.get(); readIdeal(params, in); } void CommonParamsHelper::setIdealAndIdealOutput(const CommonParams& params, const BigIdeal& input, BigTermConsumer& output) { _produceCanonicalOutput = params.getProduceCanonicalOutput(); _idealConsumer = &output; setIdeal(params, input); } void CommonParamsHelper::setIdealAndPolyOutput(const CommonParams& params, const BigIdeal& input, CoefBigTermConsumer& output) { _produceCanonicalOutput = params.getProduceCanonicalOutput(); _polyConsumer = &output; setIdeal(params, input); } auto_ptr CommonParamsHelper:: makeTranslatedIdealConsumer(bool split) { auto_ptr translated; if (split) { auto_ptr splitter (new IrreducibleIdealSplitter(*_idealConsumer)); translated.reset (new TranslatingTermConsumer(splitter, getTranslator())); } else translated.reset (new TranslatingTermConsumer(*_idealConsumer, getTranslator())); if (_produceCanonicalOutput) { return auto_ptr (new CanonicalTermConsumer(translated, getIdeal().getVarCount(), &getTranslator())); } else return translated; } auto_ptr CommonParamsHelper::makeTranslatedPolyConsumer() { auto_ptr translated (new TranslatingCoefTermConsumer(*_polyConsumer, getTranslator())); if (_produceCanonicalOutput) return auto_ptr (new CanonicalCoefTermConsumer(translated)); else return translated; } auto_ptr CommonParamsHelper::makeToUnivariatePolyConsumer() { return auto_ptr (new TotalDegreeCoefTermConsumer(*_polyConsumer, getTranslator())); } void CommonParamsHelper::addPurePowersAtInfinity() { _translator->addPurePowersAtInfinity(*_ideal); } void CommonParamsHelper::readIdeal(const CommonParams& params, Scanner& in) { BigIdeal bigIdeal; IOFacade facade(params.getPrintActions()); facade.readIdeal(in, bigIdeal); in.expectEOF(); setIdeal(params, bigIdeal); } void CommonParamsHelper::setIdeal(const CommonParams& params, const BigIdeal& bigIdeal) { ActionPrinter printer(params.getPrintActions()); printer.beginAction("Translating ideal to internal data structure."); _ideal.reset(new Ideal()); _translator.reset(new TermTranslator(bigIdeal, *_ideal, false)); printer.endAction(); if (!params.getIdealIsMinimal()) { printer.beginAction("Minimizing ideal."); _ideal->minimize(); printer.endAction(); } if (params.getProduceCanonicalOutput()) { printer.beginAction("Sorting variables for canonical representation."); VarSorter sorter(_translator->getNames()); sorter.permute(_translator.get()); Ideal::iterator stop = _ideal->end(); for (Ideal::iterator it = _ideal->begin(); it != stop; ++it) sorter.permute(*it); printer.endAction(); } } frobby-0.9.5/src/CommonParamsHelper.h000066400000000000000000000067551401527164200175230ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef COMMON_PARAMS_HELPER #define COMMON_PARAMS_HELPER #include "CoefTermConsumer.h" #include "TermConsumer.h" #include "TermTranslator.h" #include "Ideal.h" class CommonParams; class Ideal; class DataType; class Scanner; class CommonParams; class BigIdeal; class BigTermConsumer; class CoefBigTermConsumer; class TermTranslator; /** Utility class for dealing with the contents of CommonParams. Throws an appropriate exception if given invalid data. */ class CommonParamsHelper { public: CommonParamsHelper(); ~CommonParamsHelper(); /** Read input ideal and support specified kind of output. */ void readIdealAndSetOutput(const CommonParams& params, const DataType& output); /** Read input and support polynomial output. */ void readIdealAndSetPolyOutput(const CommonParams& params); /** Read input and support ideal output. */ void readIdealAndSetIdealOutput(const CommonParams& params); /** Use given ideal and support ideal output. */ void setIdealAndIdealOutput(const CommonParams& params, const BigIdeal& input, BigTermConsumer& output); /** Use given ideal and support polynomial output. */ void setIdealAndPolyOutput(const CommonParams& params, const BigIdeal& input, CoefBigTermConsumer& output); const VarNames& getNames() {return _translator->getNames();} Ideal& getIdeal() {return *_ideal;} const Ideal& getIdeal() const {return *_ideal;} auto_ptr takeIdeal() {return _ideal;} bool hasIdeal() const {return _ideal.get() != 0;} TermTranslator& getTranslator() {return *_translator;} const TermTranslator& getTranslator() const {return *_translator;} auto_ptr takeTranslator() {return _translator;} BigTermConsumer& getIdealConsumer() {return *_idealConsumer;} auto_ptr makeTranslatedIdealConsumer(bool split = false); CoefBigTermConsumer& getPolyConsumer() {return *_polyConsumer;} auto_ptr makeTranslatedPolyConsumer(); auto_ptr makeToUnivariatePolyConsumer(); void addPurePowersAtInfinity(); private: // No copies CommonParamsHelper(const CommonParamsHelper&); CommonParamsHelper& operator=(const CommonParamsHelper&); void readIdeal(const CommonParams& params, Scanner& in); void setIdeal(const CommonParams& params, const BigIdeal& ideal); auto_ptr _ideal; auto_ptr _translator; BigTermConsumer* _idealConsumer; auto_ptr _idealConsumerDeleter; CoefBigTermConsumer* _polyConsumer; auto_ptr _polyConsumerDeleter; bool _produceCanonicalOutput; }; #endif frobby-0.9.5/src/CountingIOHandler.cpp000066400000000000000000000072571401527164200176340ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "CountingIOHandler.h" #include "BigTermConsumer.h" #include "CoefBigTermConsumer.h" #include "DataType.h" #include "BigIdeal.h" #include "BigPolynomial.h" namespace IO { namespace { /** This class is a helper class for CountingIOHandler. It counts the number of terms that it consumes. */ class CountingConsumer : public BigTermConsumer, public CoefBigTermConsumer { public: CountingConsumer(FILE* out): _termCount(0), _out(out) { } /** This destructor writes the final number out. @todo This should not be happening in a destructor. Make a doneAllConsuming or something like that to do the output. */ virtual ~CountingConsumer() { // Destructors must not throw exceptions. As far as I know, // bad_alloc is the only thing that could be thrown from // gmp_fprintf. } virtual void consumeRing(const VarNames& names) { } virtual void beginConsuming() { _termCount = 0; } virtual void consume(const Term& term, const TermTranslator& translator) { ++_termCount; } virtual void consume(const vector& term) { ++_termCount; } virtual void consume(const BigIdeal& ideal) { beginConsuming(); _termCount += ideal.getGeneratorCount(); doneConsuming(); } virtual void consume(const mpz_class& coef, const Term& term) { ++_termCount; } virtual void consume(const mpz_class& coef, const Term& term, const TermTranslator& translator) { ++_termCount; } virtual void consume(const mpz_class& coef, const vector& term) { ++_termCount; } virtual void consume(const BigPolynomial& poly) { beginConsuming(); _termCount += poly.getTermCount(); doneConsuming(); } virtual void doneConsuming() { gmp_fprintf(_out, "%Zd\n", _termCount.get_mpz_t()); } private: mpz_class _termCount; FILE* _out; }; } CountingIOHandler::CountingIOHandler(): IOHandlerImpl(staticGetName(), "Writes the number of output terms.") { registerOutput(DataType::getMonomialIdealType()); registerOutput(DataType::getPolynomialType()); registerOutput(DataType::getMonomialIdealListType()); } const char* CountingIOHandler::staticGetName() { return "count"; } BigTermConsumer* CountingIOHandler::doCreateIdealWriter(FILE* out) { return new CountingConsumer(out); } CoefBigTermConsumer* CountingIOHandler::doCreatePolynomialWriter(FILE* out) { return new CountingConsumer(out); } void CountingIOHandler::doWriteTerm(const vector& term, const VarNames& names, FILE* out) { fputc('1', out); } } frobby-0.9.5/src/CountingIOHandler.h000066400000000000000000000027741401527164200173000ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef COUNTING_IO_HANDLER_GUARD #define COUNTING_IO_HANDLER_GUARD #include "IOHandlerImpl.h" #include class VarNames; class Scanner; class BigTermConsumer; class CoefBigTermConsumer; namespace IO { /** This class displays the total number of things written to output, without actually displaying those things. */ class CountingIOHandler : public IOHandlerImpl { public: CountingIOHandler(); static const char* staticGetName(); private: virtual BigTermConsumer* doCreateIdealWriter(FILE* out); virtual CoefBigTermConsumer* doCreatePolynomialWriter(FILE* out); virtual void doWriteTerm(const vector& term, const VarNames& names, FILE* out); }; } #endif frobby-0.9.5/src/DataType.cpp000066400000000000000000000040331401527164200160200ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "DataType.h" DataType::DataType(const char* name): _name(name) { } const char* DataType::getName() const { return _name; } bool DataType::isNull() const { return *this == getNullType(); } bool DataType::operator==(const DataType& type) const { return this == &type; // There is only one object of each kind. } bool DataType::operator!=(const DataType& type) const { return this != &type; // There is only one object of each kind. } const DataType& DataType::getNullType() { static DataType type("nothing"); return type; } const DataType& DataType::getMonomialIdealType() { static DataType type("a monomial ideal"); return type; } const DataType& DataType::getPolynomialType() { static DataType type("a polynomial"); return type; } const DataType& DataType::getMonomialIdealListType() { static DataType type("a list of monomial ideals"); return type; } const DataType& DataType::getSatBinomIdealType() { static DataType type("a saturated binomial ideal"); return type; } vector DataType::getTypes() { vector types; types.push_back(&getMonomialIdealType()); types.push_back(&getMonomialIdealListType()); types.push_back(&getPolynomialType()); types.push_back(&getSatBinomIdealType()); return types; } frobby-0.9.5/src/DataType.h000066400000000000000000000044351401527164200154730ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef DATA_TYPE_GUARD #define DATA_TYPE_GUARD #include /** The intention of this class is to describe the different kinds of mathematical structures that Frobby supports, such as a monomial ideal or a polynomial. This is useful for the IO subsystem. There is only one instance of each kind, so pointer equality is the same as equality. */ class DataType { public: /** Returns the name of the structure. */ const char* getName() const; /** Returns true if this object was returned by getNullType(). */ bool isNull() const; bool operator==(const DataType& type) const; bool operator!=(const DataType& type) const; /** Returns the one and only instance for null. */ static const DataType& getNullType(); /** Returns the one and only instance for monomial ideals. */ static const DataType& getMonomialIdealType(); /** Returns the one and only instance for polynomials. */ static const DataType& getPolynomialType(); /** Returns the one and only instance for saturated binomial ideals. */ static const DataType& getSatBinomIdealType(); /** Returns the one and only instance for monomial ideal lists. */ static const DataType& getMonomialIdealListType(); /** Returns a vector of all types except null. */ static vector getTypes(); private: /** Private to avoid copies. */ DataType(const DataType&); /** Private to avoid copies. */ void operator=(const DataType&); /** Private to ensure only one instance of each kind. */ DataType(const char* name); const char* _name; }; #endif frobby-0.9.5/src/DebugAllocator.cpp000066400000000000000000000214711401527164200172010ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "DebugAllocator.h" #include "main.h" #include "error.h" #include "Ideal.h" #include "test/TestCase.h" #include "IOHandler.h" #include // Must not include code below if not debugging. For one, then Frobby // cannot be built as a library as this code calls main. // The code only applies to debug builds anyway. #ifdef DEBUG #undef new static const size_t AllocationLimitsTryFirst = 500; static const size_t AllocationLimitsTryLast = 200; static const size_t AllocationLimitsStepRatio = 1000; DebugAllocator& DebugAllocator::getSingleton() { static DebugAllocator singleton; return singleton; } void DebugAllocator::rewindInput() { if (_inputFile != "") if (!freopen(_inputFile.c_str(), "r", stdin)) reportError("Could not open file \"" + _inputFile + "\" for input."); } /** @todo consider off-by-one conditions on the allocation limit conditions in this method. @todo at the end, make sure each identifiable allocation site has been hit. Some can be missed now when the stepsize is larger than 1. This would require having a set of sites that have been hit. */ int DebugAllocator::runDebugMain(int argc, const char** argv) { processDebugOptions(argc, argv); // Run all the way through once to count the number of allocations // and to produce the correct output. Note that the number of // allocations on subsequent runs can be a bit less due to static // caches. rewindInput(); _allocationCount = 0; int exitCode = frobbyMain(argc, argv); size_t maxAllocations = _allocationCount; if (_actionIsTest || !_debugAllocation) return exitCode; fclose(stdout); // Output has already been produced. fputs("DEBUG: Now debugging out-of-memory conditions.\n", stderr); fprintf(stderr, "DEBUG: There are %i allocations in total on this input.\n", (int)maxAllocations); // If maxAllocations is small then just try every possible limit. if (maxAllocations < AllocationLimitsTryFirst + AllocationLimitsTryLast) { fputs("DEBUG: This is few, so am now running through " "every possible condition.\n", stderr); for (size_t limit = 0; limit < maxAllocations; ++limit) runWithLimit(argc, argv, limit); return ExitCodeSuccess; } fprintf(stderr, "DEBUG: Trying the first %i allocations.\n", (int)AllocationLimitsTryFirst); for (size_t limit = 0; limit < AllocationLimitsTryFirst; ++limit) runWithLimit(argc, argv, limit); fprintf(stderr, "DEBUG: Trying the last %i allocations.\n", (int)AllocationLimitsTryLast); for (size_t limit = 0; limit < AllocationLimitsTryLast; ++limit) runWithLimit(argc, argv, maxAllocations - limit); size_t limitsLeft = maxAllocations - AllocationLimitsTryFirst - AllocationLimitsTryLast; size_t stepSize = limitsLeft / AllocationLimitsStepRatio + 1; fprintf(stderr, "DEBUG: Going through the %i remaining allocations " "with steps of size %i.\n", (int)limitsLeft, (int)stepSize); for (size_t limit = AllocationLimitsTryFirst; limit < maxAllocations - AllocationLimitsTryLast; limit += stepSize) runWithLimit(argc, argv, limit); return ExitCodeSuccess; } void DebugAllocator::runWithLimit(int argc, const char** argv, size_t limit) { if (_detailAllocation) fprintf(stderr, "DEBUG: Trying allocation limit of %i\n", (int)limit); // To make each run more similar. Ideal::clearStaticCache(); _limitAllocation = true; _allocationLimit = limit; _allocationCount = 0; // We use this to distinguish genuinely running out of memory from // our artificial limit-induced throwing of bad_alloc. _expectBadAllocException = false; rewindInput(); try { frobbyMain(argc, argv); } catch (const bad_alloc&) { if (!_expectBadAllocException) throw; } _limitAllocation = false; } void DebugAllocator::processDebugOptions(int& argc, const char**& argv) { const char* originalArgvZero = argv[0]; while (true) { if (argc <= 1 || argv[1][0] != '_') break; string option(argv[1] + 1); ++argv; --argc; if (option == "debugAlloc") _debugAllocation = true; else if (option == "detailAlloc") _detailAllocation = true; else if (option == "input") { if (argc <= 1) reportError("Debug option _input requries an argument."); _inputFile = argv[1]; ++argv; --argc; } else reportError("Unknown debug option \"" + option + "\"."); } if (argc >= 2 && string(argv[1]) == "test") _actionIsTest = true; argv[0] = originalArgvZero; } void DebugAllocator::runTest(TestCase& test, const string& name) { test.run(name.c_str(), true); if (!_debugAllocation) return; _limitAllocation = true; for (_allocationLimit = 0; _allocationLimit < numeric_limits::max(); ++_allocationLimit) { if (_detailAllocation) fprintf(stderr, "DEBUG: Trying test allocation limit of %i\n", (int)_allocationLimit); // To make each run more similar. Ideal::clearStaticCache(); _allocationCount = 0; _expectBadAllocException = false; rewindInput(); try { test.run(name.c_str(), false); // At this point test has completed within allocation limit. break; } catch (const bad_alloc&) { if (!_expectBadAllocException) throw; // Continue and try next limit. } } _limitAllocation = false; } void* DebugAllocator::allocate(size_t size) { return allocate(size, 0, 0); } void* DebugAllocator::allocate(size_t size, const char* file, size_t lineNumber) { if (_detailAllocation) { if (file != 0) fprintf(stderr, "DEBUG: Allocating %i bytes at %s:%i.\n", (int)size, file, (int)lineNumber); if (file == 0) fprintf(stderr, "DEBUG: Allocating %i bytes at an unknown point.\n", (int)size); } if (_limitAllocation && _allocationCount >= _allocationLimit) { if (_detailAllocation) fputs("DEBUG: Throwing bad_alloc due to artifically imposed limit.\n", stderr); _expectBadAllocException = true; throw bad_alloc(); } ++_allocationCount; void* p = malloc(size); if (p == 0) throw bad_alloc(); return p; } DebugAllocator::DebugAllocator(): _debugAllocation(false), _detailAllocation(false), _limitAllocation(false), _expectBadAllocException(false), _actionIsTest(false), _allocationCount(0), _allocationLimit(0) { } void* operator new(size_t size, const char* file, size_t lineNumber) throw(bad_alloc) { return DebugAllocator::getSingleton().allocate(size, file, lineNumber); } void* operator new[](size_t size, const char* file, size_t lineNumber) throw(bad_alloc) { return DebugAllocator::getSingleton().allocate(size, file, lineNumber); } void* operator new(size_t size) throw (bad_alloc) { return DebugAllocator::getSingleton().allocate(size); } void* operator new[](size_t size) throw (bad_alloc) { return DebugAllocator::getSingleton().allocate(size); } void operator delete(void* buffer) throw() { free(buffer); } void operator delete[](void* buffer) throw() { free(buffer); } /** Note that these overloads to operator delete are strictly necessary, even though they will only be called in the very special circumstance where an exception gets thrown while an object allocated using the new above has been *partially* constructed. However, when that happens, this overload gets called. The compiler will happily substitute its own automatically generated version, which does *not* deallocate the memory, leading to a memory leak. It is also important that these overloads are declared in each translation unit, as otherwise the compiler generated do-nothing version will be used in those translation units that have no such declaration. To me this all falls into the category of "Insane but true". @todo Make sure this doc. is displayed and apply it to the array operator delete too. */ void operator delete(void* buffer, const char* file, size_t line) { free(buffer); } void operator delete[](void* buffer, const char* file, size_t line) { free(buffer); } #endif frobby-0.9.5/src/DebugAllocator.h000066400000000000000000000135011401527164200166410ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef DEBUG_ALLOCATOR_GUARD #define DEBUG_ALLOCATOR_GUARD class TestCase; #include #ifdef DEBUG /** This class is reponsible for testing how Frobby recovers when running out of memory and encountering exceptions in general. It does this by running Frobby until the i'th allocation, and then letting that allocation fail. This is done for i=0,1,... until all allocation sites have been tested. For cases with many allocations, all allocations in the beginning and end are tested, and every t'th allocation in the middle is tested, for some t such that the running time does not explode too much. Note that this re-running requires rewinding the input, which is only possible when using a file directly as input rather than using standard input. DebugAllocator follows the Singleton Pattern, and it works by intercepting all allocations and deallocations. This has some overhead, even when DebugAllocator isn't being used, so this is only turned on in debug builds. Testing recovery from running out of memory is important, as it can lead not just to memory leaks, but to crashes, especially from destructors throwing exceptions while being destructed due to an exception (yes, this crashes a C++ program). Other than that, this is the only way to test code in this situation. This object accepts special debug-only command line options that are preceded by an underscore and placed BEFORE the action. These are listed below. -debugAlloc Test recovery from running out of memory. -detailAlloc Print details on what allocations are being carried out from where. -input Takes an argument that is a string indicating that input should be read from this file instead of standard input. Note that this class aids the test action by running each testcase individually for the purpose of testing allocation, i.e. when test 54 is run, test 1 to 53 are not rerun in order to get to the next allocation site in test 54. */ class DebugAllocator { public: /** Runs ::frobbyMain after having processed the special debug-only options. Tests recovery from running out of memory if that option has been specified. */ int runDebugMain(int argc, const char** argv); /** Allocates a buffer of size bytes. */ void* allocate(size_t size); /** Allocates a bufer of size bytes. The parameters file and lineNumer indicate the location of the allocation site. */ void* allocate(size_t size, const char* file, size_t lineNumber); /** Runs a test case. Tests recovery from running out of memory if that option has been specified. */ void runTest(TestCase& test, const string& name); /** Returns the one and only instance of this class. */ static DebugAllocator& getSingleton(); private: /** This constructor is private to ensure that there is only one instance of this object as per the Singleton Pattern. */ DebugAllocator(); /** Parse and skip past debug-related options, such as _input and _debugAlloc. */ void processDebugOptions(int& argc, const char**& argv); /** Start reading the input from the beginning again. This only works if an input file has been specified, not if using standard input. */ void rewindInput(); /** Run frobbyMain and simulate running out of memory after limit allocations. */ void runWithLimit(int argc, const char** argv, size_t limit); /** Indicates whether the option has been specified to test recovery. Otherwise Frobby runs normally with no interference by this object to allocation. */ bool _debugAllocation; /** Indicates whether to print information about allocations to standard error. This can help to figure out which allocation site has caused a problem. */ bool _detailAllocation; /** Indicates whether a limit has been set on the number of allocations to allow, after which limit allocations should be defined. */ bool _limitAllocation; /** Is set to true when a bad_alloc exception has been thrown by DebugAllocator, and so DebugAllocator should expect to see this exception. This helps to detect cases where bad_alloc is inappropriately caught and cases where bad_alloc is thrown due to genuinely running out of memory, and in both cases some error should be flagged. */ bool _expectBadAllocException; /** Indicates whether the action being performed is test, in which case this object should cooperate with test so that each testcase is tested individually. */ bool _actionIsTest; /** If we are limiting the number of successful allocations, this indicates how many allocations have been allowed (since this field was last reset to zero). */ size_t _allocationCount; /** If we are limiting the number of successful allocations, this indicates how many allocations to allow before letting them all fail. */ size_t _allocationLimit; /** The file input is gotten from. Uses standard input if this is the empty string. */ string _inputFile; }; #endif #endif frobby-0.9.5/src/DebugStrategy.cpp000066400000000000000000000044441401527164200170640ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "DebugStrategy.h" #include "Slice.h" DebugStrategy::DebugStrategy(SliceStrategy* strategy, FILE* out): _strategy(strategy), _out(out) { ASSERT(strategy != 0); fputs("DEBUG: Starting slice computation.\n", _out); } DebugStrategy::~DebugStrategy() { } void DebugStrategy::run(const Ideal& ideal) { fputs("DEBUG: Starting Slice Algorithm. Input ideal is:\n", _out); ideal.print(_out); _strategy->run(ideal); fputs("DEBUG: Slice computation done.\n", _out); } bool DebugStrategy::processSlice(TaskEngine& tasks, auto_ptr slice) { fputs("DEBUG: Processing slice.\n", _out); slice->print(stderr); bool wasBaseCase = _strategy->processSlice(tasks, slice); if (wasBaseCase) fputs("DEBUG: Determined that slice is base case.\n", _out); else fputs("DEBUG: Determined that slice is not base case.\n", _out); return wasBaseCase; } void DebugStrategy::setUseIndependence(bool use) { if (use) fputs("DEBUG: Turning on independence splits.", _out); else fputs("DEBUG: Turning off independence splits.", _out); _strategy->setUseIndependence(use); } void DebugStrategy::setUseSimplification(bool use) { if (use) fputs("DEBUG: Turning on simplification.", _out); else fputs("DEBUG: Turning off simplification.", _out); _strategy->setUseSimplification(use); } bool DebugStrategy::getUseSimplification() const { return _strategy->getUseSimplification(); } void DebugStrategy::freeSlice(auto_ptr slice) { fputs("DEBUG: Freeing slice.\n", _out); _strategy->freeSlice(slice); } frobby-0.9.5/src/DebugStrategy.h000066400000000000000000000030461401527164200165260ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef DEBUG_STRATEGY #define DEBUG_STRATEGY #include "SliceStrategy.h" /** A wrapper for a SliceStrategy that prints out what is going out for debugging purposes, while delegating everything to the strategy being wrapped. */ class DebugStrategy : public SliceStrategy { public: /** Debug information is written to out, and every call is delegated to strategy. */ DebugStrategy(SliceStrategy* strategy, FILE* out); virtual ~DebugStrategy(); virtual void run(const Ideal& ideal); bool processSlice(TaskEngine& tasks, auto_ptr slice); virtual void setUseIndependence(bool use); virtual void setUseSimplification(bool use); virtual bool getUseSimplification() const; virtual void freeSlice(auto_ptr slice); private: SliceStrategy* _strategy; FILE* _out; }; #endif frobby-0.9.5/src/DecomRecorder.cpp000066400000000000000000000022061401527164200170220ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "DecomRecorder.h" #include "Ideal.h" DecomRecorder::DecomRecorder(Ideal* recordInto): _recordInto(recordInto) { ASSERT(recordInto != 0); } void DecomRecorder::beginConsuming() { } void DecomRecorder::consume(const Term& term) { ASSERT(term.getVarCount() == _recordInto->getVarCount()); _recordInto->insert(term); } void DecomRecorder::doneConsuming() { } frobby-0.9.5/src/DecomRecorder.h000066400000000000000000000022351401527164200164710ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef DECOM_RECORDER_GUARD #define DECOM_RECORDER_GUARD #include "TermConsumer.h" #include "Term.h" class Ideal; class DecomRecorder : public TermConsumer { public: // DecomRecorder does not take over ownership of recordInto. DecomRecorder(Ideal* recordInto); virtual void beginConsuming(); virtual void consume(const Term& term); virtual void doneConsuming(); private: Ideal* _recordInto; }; #endif frobby-0.9.5/src/Deformer.cpp000066400000000000000000000064441401527164200160600ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Deformer.h" #include "Term.h" #include "TermPredicate.h" #include "Ideal.h" #include "TermPredicate.h" #include "error.h" #include "IdealOrderer.h" #include namespace { void deform(Ideal& ideal, vector& undeform, size_t var, bool stronglyGeneric) { ASSERT(undeform.empty()); map > exps; Ideal::const_iterator end = ideal.end(); for (Ideal::const_iterator it = ideal.begin(); it != end; ++it) { Exponent& e = (*it)[var]; if (e == 0) continue; exps[e].push_back(*it); } Term tmp(ideal.getVarCount()); undeform.push_back(0); // zero always maps to zero for (map >::iterator it = exps.begin(); it != exps.end(); ++it) { vector& block = it->second; typedef vector::iterator BlockIt; if (stronglyGeneric) { for (BlockIt blockIt = block.begin(); blockIt != block.end(); ++blockIt) { undeform.push_back((*blockIt)[var]); (*blockIt)[var] = undeform.size() - 1; } } else { undeform.push_back(block.front()[var]); Exponent sharedDeformedExponent = undeform.size() - 1; for (BlockIt blockIt = block.begin(); blockIt != block.end(); ++blockIt) { bool canUseShared = true; for (BlockIt other = blockIt + 1; other != block.end(); ++other) { tmp.lcm(*blockIt, *other); if (!ideal.strictlyContains(tmp)) { canUseShared = false; break; } } if (canUseShared) (*blockIt)[var] = sharedDeformedExponent; else { undeform.push_back((*blockIt)[var]); (*blockIt)[var] = undeform.size() - 1; } } } } } } Deformer::Deformer(Ideal& ideal, const IdealOrderer& orderer, bool stronglyGeneric): _undeform(ideal.getVarCount()) { orderer.order(ideal); for (size_t var = 0; var < ideal.getVarCount(); ++var) deform(ideal, _undeform[var], var, stronglyGeneric); ASSERT(!stronglyGeneric || ideal.isStronglyGeneric()); ASSERT(ideal.isWeaklyGeneric()); } void Deformer::undeform(Term& term) const { ASSERT(term.getVarCount() == _undeform.size()); for (size_t var = 0; var < term.getVarCount(); ++var) { ASSERT(term[var] < _undeform[var].size()); term[var] = _undeform[var][term[var]]; } } frobby-0.9.5/src/Deformer.h000066400000000000000000000034321401527164200155170ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef DEFORMER_GUARD #define DEFORMER_GUARD #include #include class Ideal; class Term; class TermPredicate; class IdealOrderer; /** Objects of this class encapsulate the process of applying a generic deformation to a monomial ideal. */ class Deformer { public: /** Apply a generic deformation to ideal such that it becomes generic. @param deformationOrder The ordering to decide how to deform like exponents. @param makeStronglyGeneric Deform to a strongly generic ideal if true. Otherwise deform to a weakly generic ideal. @todo Implement makeStronglyGeneric == false. */ Deformer(Ideal& ideal, const IdealOrderer& deformationOrder, bool makeStronglyGeneric = true); /** Apply the reverse transformation on term than that applied to the Ideal passed to the constructor. */ void undeform(Term& term) const; private: /** var^e undeforms to var^(_undeform[var][e]). */ vector > _undeform; }; #endif frobby-0.9.5/src/DimensionAction.cpp000066400000000000000000000064061401527164200173760ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "DimensionAction.h" #include "DataType.h" #include "IOFacade.h" #include "IdealFacade.h" #include "Scanner.h" #include "BigIdeal.h" #include "BigTermConsumer.h" #include "SliceFacade.h" #include "SliceParams.h" #include "NullTermConsumer.h" #include "SliceParameters.h" #include "error.h" #include /** @todo Expand the description of this action. */ DimensionAction::DimensionAction(): Action (staticGetName(), "Compute the (co)dimension of the input ideal.", "Compute the dimension or codimension of the input ideal. This is the\n" "dimension of the zero set of the ideal. The ideal containing the identity\n" "has an empty zero set, and we define the dimension of this to be -1.\n" "All other ideals have non-negative dimension.", false), _codimension ("codim", "Compute the codimension instead of the dimension. The codimension is the\n" "number of variables in the polynomial ring minus the dimension.", false), _squareFreeAndMinimal ("squareFreeAndMinimal", "State that the input ideal is square free and minimally generated. This\n" "can speed up the the computation, but will result in unpredictable\n" "behavior if it is not true.", false), _useSlice ("useSlice", "Use the Slice Algorithm to compute the dimension instead of the usual\n" "algorithm.", false), _io(DataType::getMonomialIdealType(), DataType::getNullType()) { } void DimensionAction::obtainParameters(vector& parameters) { parameters.push_back(&_codimension); parameters.push_back(&_squareFreeAndMinimal); parameters.push_back(&_useSlice); _io.obtainParameters(parameters); Action::obtainParameters(parameters); } void DimensionAction::perform() { mpz_class result; if (_useSlice) { SliceParams params; params.useIndependenceSplits(false); // not supported validateSplit(params, true, false); SliceFacade facade(params, DataType::getNullType()); result = facade.computeDimension(_codimension); } else { BigIdeal ideal; Scanner in(_io.getInputFormat(), stdin); _io.autoDetectInputFormat(in); _io.validateFormats(); IOFacade ioFacade(_printActions); ioFacade.readIdeal(in, ideal); in.expectEOF(); IdealFacade facade(_printActions); result = facade.computeDimension(ideal, _codimension, _squareFreeAndMinimal); } gmp_fprintf(stdout, "%Zd\n", result.get_mpz_t()); } const char* DimensionAction::staticGetName() { return "dimension"; } frobby-0.9.5/src/DimensionAction.h000066400000000000000000000024251401527164200170400ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef DIMENSION_ACTION_GUARD #define DIMENSION_ACTION_GUARD #include "Action.h" #include "BoolParameter.h" #include "IOParameters.h" /** Implements the command line interface action dimension. */ class DimensionAction : public Action { public: DimensionAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); private: BoolParameter _codimension; BoolParameter _squareFreeAndMinimal; BoolParameter _useSlice; IOParameters _io; }; #endif frobby-0.9.5/src/DynamicFrobeniusAction.cpp000066400000000000000000000036061401527164200207110ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "DynamicFrobeniusAction.h" #include "IOFacade.h" #include "DynamicFrobeniusFacade.h" #include "Scanner.h" DynamicFrobeniusAction::DynamicFrobeniusAction(): Action (staticGetName(), "Compute Frobenius number using dynamic programming.", "Compute the Frobenius number of the input Frobenius instance using a " "simple\n" "and quite slow dynamic programming algorithm. This functionality has " "mainly\n" "been implemented to check the answers of the Grobner basis-based Frobenius\n" "solver.", false) { } void DynamicFrobeniusAction::obtainParameters(vector& parameters) { Action::obtainParameters(parameters); } void DynamicFrobeniusAction::perform() { vector instance; IOFacade ioFacade(_printActions); Scanner in("", stdin); ioFacade.readFrobeniusInstance(in, instance); in.expectEOF(); mpz_class frobeniusNumber; DynamicFrobeniusFacade frobeniusFacade(_printActions); frobeniusFacade.computeFrobeniusNumber(instance, frobeniusNumber); gmp_fprintf(stdout, "%Zd\n", frobeniusNumber.get_mpz_t()); } const char* DynamicFrobeniusAction::staticGetName() { return "frobdyn"; } frobby-0.9.5/src/DynamicFrobeniusAction.h000066400000000000000000000021001401527164200203420ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef DYNAMIC_FROBENIUS_ACTION_GUARD #define DYNAMIC_FROBENIUS_ACTION_GUARD #include "Action.h" class DynamicFrobeniusAction : public Action { public: DynamicFrobeniusAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); }; #endif frobby-0.9.5/src/DynamicFrobeniusFacade.cpp000066400000000000000000000023411401527164200206320ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "DynamicFrobeniusFacade.h" #include "dynamicFrobeniusAlgorithm.h" DynamicFrobeniusFacade:: DynamicFrobeniusFacade(bool printActions): Facade(printActions) { } void DynamicFrobeniusFacade:: computeFrobeniusNumber(const vector& instance, mpz_class& frobeniusNumber) { beginAction ("Computing Frobenius number using dynamic programming algorithm."); frobeniusNumber = dynamicFrobeniusAlgorithm(instance); endAction(); } frobby-0.9.5/src/DynamicFrobeniusFacade.h000066400000000000000000000023171401527164200203020ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef DYNAMIC_FROBENIUS_FACADE_GUARD #define DYNAMIC_FROBENIUS_FACADE_GUARD #include "Facade.h" #include class Configuration; /** A facade for using the dynamic programming Frobenius problem algorithm. @ingroup Facade */ class DynamicFrobeniusFacade : private Facade { public: DynamicFrobeniusFacade(bool printActions); void computeFrobeniusNumber(const vector& instance, mpz_class& frobeniusNumber); }; #endif frobby-0.9.5/src/ElementDeleter.cpp000066400000000000000000000014511401527164200172040ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "ElementDeleter.h" frobby-0.9.5/src/ElementDeleter.h000066400000000000000000000130731401527164200166540ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef ELEMENT_DELETER_GUARD #define ELEMENT_DELETER_GUARD // The purpose of this class is to call delete on the elements of a // standard library container which holds pointers. It removes the // elements from the container as they are being deleted, but it does // not delete the container itself. Do not use this class to // deallocate a vector of built-in arrays, since those require // deallocation using delete[] rather than delete. // // This can be a convenience when coding, but the real purpose is to // avoid memory leaks in the face of an exception being thrown. When a // standard library container goes out of scope, its destructor is // called, but the destructor does not deallocate pointer elements, so // they will leak unless special care is taken to aovid that, such as // using this class. // // The most straight-forward solution may seem to use // e.g. vector> in place of vector, but this does not // work because storing auto_ptr in a standard library container is // never safe (look this up on the internet to get the details). // // The reference counting smart pointer class shared_ptr from Boost or // TR1 would solve this issue even better by using // vector> instead of vector, but that would require // a dependency on Boost or on having a very recent compiler which // incorporates TR1. // // TODO: make an AutoVector that wraps std::vector instead of or as a // supplement to this class. // // Container::value_type is required to be a pointer type. template class ElementDeleter { public: // Only the constructor can attach an ElementDeleter to a container, // and this helps ensure (but does not guarantee) the precondition // of the destructor of ElementDeleter. ElementDeleter(Container& container): _container(&container) { } // Calls deleteElements() and shares its precondition. ~ElementDeleter() { deleteElements(); } // Call release() to prevent this ElementDeleter from manipulating // the container in any way. void release() { _container = 0; } // If release has been called, this method does nothing. Otherwise // the container must still be valid, and then delete is called on // each element of the array and clear is called on the container. void deleteElements() { if (_container == 0) return; // The code below may seem obviously correct, but it is a // non-trivial fact that it works in the face of exceptions. // // First of all, we are allowed to assume that destructors do not // throw exceptions, so the loop will run to completion. // // Normally clear() *can* throw an exception according to the // standard (which is weird), but if the copy constructor and // assignment operator do not throw exceptions, then it does // not. In our case, we require the element type to be a pointer // type, so for this reason only do we know that clear will not // throw an exception. Thus we do not have to worry about leaving // around a container full of invalid pointers if clear() should // throw an exception. typename Container::iterator end = _container->end(); typename Container::iterator it = _container->begin(); for (; it != end; ++it) delete *it; _container->clear(); } private: Container* _container; }; // exceptionSafePushBack is designed to work around the fact that this // code can leak memory: // // vector vec; // ElementDeleter > elementDeleter(vec); // auto_ptr p(new int()); // vec.push_back(p.release()) // // This is because push_back can fail by throwing a bad_alloc, and at // that point the pointer in p has already been released, so that // pointer is now lost and hence the memory is leaked. // // This can be fixed by replacing // // vec.push_back(p.release()) // // by // // vec.push_back(0); // vec.back() = p.release(); // // but this is annoying and looks quite strange. It is much clearer to // write // // exceptionSafePushBack(vec, p); // template void exceptionSafePushBack(Container& container, auto_ptr pointer) { container.push_back(0); container.back() = pointer.release(); } // Serves the same purpose as exceptionSafePushBack, except that this // overload will simply ignore an exception without propagating it. // Thus if there is not enough memory to add the element to the container, // the element will simply get deleted and the container will remain // unchanged. This works well if e.g. adding an element to a cache, where // it is no great problem if the element gets deleted rather than added. template void noThrowPushBack(Container& container, auto_ptr pointer) throw () { try { exceptionSafePushBack(container, pointer); } catch (const bad_alloc&) { // Ignore the exception. } } #endif frobby-0.9.5/src/EulerAction.cpp000066400000000000000000000213131401527164200165170ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "EulerAction.h" #include "DataType.h" #include "IOFacade.h" #include "Scanner.h" #include "BigIdeal.h" #include "BigTermConsumer.h" #include "error.h" #include "PivotEulerAlg.h" #include "Ideal.h" #include "HilbertBasecase.h" #include "PivotStrategy.h" #include "SquareFreeIdeal.h" #include "ActionPrinter.h" #include #include #include EulerAction::EulerAction(): Action (staticGetName(), "Compute the Euler characteristic.", "Compute the Euler characteristic of a monomial ideal I. This is defined as " "the Euler characteristic of the simplicial complex D where I is the dual of " "the Stanley-Reisner ideal of D. The translation between I and D is " "computationally efficient. Define f by\n" "\n" " f(v) = product of all variables not in the set v\n" "\n" "Then f is a bijection from the facets of D to the minimal generators of I. " "So this action can easily be used to compute Euler characteristics of " "abstract simplicial complexes given by their facets. If you have an input " "file where the 0-1 exponents are opposite of what you need for this " "action, use the -swap01 option.", false), _pivot ("pivot", "Which kind of pivots to use. Options are\n" " std: Use standard pivots only.\n" " gen: Use generator pivots only.\n" " hybrid: Use a heuristic to choose at each split.\n", "gen"), _stdPivot ("stdPivot", "Which kind of standard pivots to use. The options are\n" " popvar: Use a popular variable as pivot.\n" " rarevar: Use a rare variable as pivot.\n" " popgcd: Use the gcd of 3 generators divisible by a popular variable.\n" " any: Use some variable in a way that does not vary between runs.\n" " random: Use a random variable. Choices may vary between runs.\n" "A rare variable is a variable that divides a minimum number of " "generators. A popular variable is a variable that divides a " "maximum number of generators.\n" "\n" "In addition, widen_X where X is one of the strategies above will " "compute a preliminary pivot according to X, and then select the actual " "pivot to be the gcd of all generators that the preliminary pivot divides.", "popvar"), _genPivot ("genPivot", "Which kind of generator pivots to use. The options are\n" " rarevar: Pick a generator divisible by a rare variable.\n" " popvar: Pick a generator divisible by a popular variable.\n" " maxsupp: Pick a generator with maximum support.\n" " minsupp: Pick a generator with minimum support.\n" " any: Pick some generator in a way that does not vary between runs.\n" " random: Pick a random generator. Choices may vary between runs.\n" " rarest: Pick a generator that is divisible by a maximum number of\n" " rare variables. Break ties by picking the generator that is divisible\n" " by the maximum number of second-most-rare variables and so on.\n" " raremax: as rarevar_maxsupp.\n" "A rare variable is a variable that divides a minimum number of " "generators. A popular variable is a variable that divides a " "maximum number of generators.\n" "\n" "All of these strategies except any and random can have ties. Combine " "strategies A and B by writing A_B. If A has a tie then A_B will use " "B to break the tie. For example rarevar_minsupp will pick some rare " "variable " "and select the generator with maximum support divisible by that variable. " "For another example, rarevar_minsupp_random will do the same thing, but " "if two generators divisible by the rare variable has the same " "maximal support " "then it will pick one at random instead of deterministically.\n" "\n" "All choices implicitly have _any appended to them, so any remaining " "ties are broken arbitrarily in a deterministic way. If a strategy would " "eliminate all candidates for a pivot it will instead preserve all the " "candidates. This can happen for example in minsupp_rarevar where the " "minsupp strategy might have eliminated all generators that are divisible " "by the rare variable that rarevar selects. Then rarevar cannot make a " "choice so it will refrain from doing so.", "raremax"), _autoTranspose ("autotranspose", "The two algorithms prefer more variables and more generators " "respectively. Transposing the variable-generator divides " "matrix swaps the number of variables and generators without " "changing the Euler characteristic. If this option is on it " "will transpose at each step if the preferred one of " "variables and generators is not larger. If this option is " "set to \"once\", it will do this but only at the first step. " "If this option is off, no transposes are done.", "on"), _printDebug ("debug", "Print what the algorithm does at each step.", false), _printStatistics ("stats", "Print statistics on what the algorithm did.", false), _useUniqueDivSimplify ("uniqueDiv", "Simplify ideals at each step where a variable divides only one generator.", true), _useManyDivSimplify ("manyDiv", "Simplify ideals at each step where a variable divides all generators " "except up to 2.", true), _useAllPairsSimplify ("impliedDiv", "Simplify ideals at each step with variables X and Y such that all " "generators divisible by A are also divisible by B.", false), _swap01 ("swap01", "Change all 0 exponents to 1 and vice versa.", false), _io(DataType::getMonomialIdealType(), DataType::getNullType()) { } void EulerAction::obtainParameters(vector& parameters) { _io.obtainParameters(parameters); parameters.push_back(&_pivot); parameters.push_back(&_stdPivot); parameters.push_back(&_genPivot); parameters.push_back(&_autoTranspose); parameters.push_back(&_printDebug); parameters.push_back(&_printStatistics); parameters.push_back(&_useUniqueDivSimplify); parameters.push_back(&_useManyDivSimplify); parameters.push_back(&_useAllPairsSimplify); parameters.push_back(&_swap01); Action::obtainParameters(parameters); } void EulerAction::perform() { auto_ptr stdStrat = newStdPivotStrategy(_stdPivot.getValue()); auto_ptr genStrat = newGenPivotStrategy(_genPivot.getValue()); auto_ptr strat; if (_pivot == "std") strat = stdStrat; else if (_pivot == "gen") strat = genStrat; else if (_pivot == "hybrid") strat = newHybridPivotStrategy(stdStrat, genStrat); else reportError("Unknown kind of pivot strategy \"" + _pivot.getValue() + "\"."); if (_printDebug) strat = newDebugPivotStrategy(strat, stderr); if (_printStatistics) strat = newStatisticsPivotStrategy(strat, stderr); PivotEulerAlg alg; alg.setPivotStrategy(strat); alg.setUseUniqueDivSimplify(_useUniqueDivSimplify); alg.setUseManyDivSimplify(_useManyDivSimplify); alg.setUseAllPairsSimplify(_useAllPairsSimplify); IOFacade ioFacade(_printActions); SquareFreeIdeal ideal; { Scanner in(_io.getInputFormat(), stdin); _io.autoDetectInputFormat(in); _io.validateFormats(); ioFacade.readSquareFreeIdeal(in, ideal); in.expectEOF(); } if (_swap01) { ActionPrinter pr(_printActions, "Inverting ideal."); ideal.swap01Exponents(); } { ActionPrinter pr(_printActions, "Minimizing ideal."); ideal.minimize(); } if (_autoTranspose == "on") { alg.setAutoTranspose(true); alg.setInitialAutoTranspose(true); } else if (_autoTranspose == "once") { alg.setAutoTranspose(false); alg.setInitialAutoTranspose(true); } else if (_autoTranspose == "off") { alg.setAutoTranspose(false); alg.setInitialAutoTranspose(false); } else reportError("Unknown setting for -autoTranspose of \"" + _autoTranspose.getValue() + "\"."); mpz_class euler; { ActionPrinter pr(_printActions, "Computing Euler characteristic."); euler = alg.computeEulerCharacteristic(*ideal.getRawIdeal()); } gmp_fprintf(stdout, "%Zd\n", euler.get_mpz_t()); } const char* EulerAction::staticGetName() { return "euler"; } frobby-0.9.5/src/EulerAction.h000066400000000000000000000027761401527164200162000ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef EULER_ACTION_GUARD #define EULER_ACTION_GUARD #include "Action.h" #include "IOParameters.h" #include "BoolParameter.h" #include "StringParameter.h" /** Implements the command line interface action euler. */ class EulerAction : public Action { public: EulerAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); private: StringParameter _pivot; StringParameter _stdPivot; StringParameter _genPivot; StringParameter _autoTranspose; BoolParameter _printDebug; BoolParameter _printStatistics; BoolParameter _useUniqueDivSimplify; BoolParameter _useManyDivSimplify; BoolParameter _useAllPairsSimplify; BoolParameter _swap01; IOParameters _io; }; #endif frobby-0.9.5/src/EulerState.cpp000066400000000000000000000166751401527164200164010ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "EulerState.h" #include "RawSquareFreeTerm.h" #include "Ideal.h" #include "Arena.h" #include namespace Ops = SquareFreeTermOps; EulerState* EulerState::construct(const Ideal& idealParam, Arena* arena) { ASSERT(arena != 0); const size_t varCount = idealParam.getVarCount(); const size_t capacity = idealParam.getGeneratorCount(); EulerState* state = rawConstruct(varCount, capacity, arena); state->ideal->insert(idealParam); Ops::setToIdentity(state->eliminated, varCount); ASSERT(state->debugIsValid()); return state; } EulerState* EulerState::construct (const RawSquareFreeIdeal& idealParam, Arena* arena) { ASSERT(arena != 0); const size_t varCount = idealParam.getVarCount(); const size_t capacity = idealParam.getGeneratorCount(); EulerState* state = rawConstruct(varCount, capacity, arena); state->ideal->insert(idealParam); Ops::setToIdentity(state->eliminated, varCount); ASSERT(state->debugIsValid()); return state; } EulerState* EulerState::rawConstruct(size_t varCount, size_t capacity, Arena* arena) { ASSERT(arena != 0); // Do both ways around to support transpose. size_t bytesIdeal = std::max( RawSquareFreeIdeal::getBytesOfMemoryFor(varCount, capacity), RawSquareFreeIdeal::getBytesOfMemoryFor(capacity, varCount)); size_t wordsElim = std::max( Ops::getWordCount(varCount), Ops::getWordCount(capacity)); if (bytesIdeal == 0 || wordsElim == 0) throw bad_alloc(); EulerState* state = static_cast(arena->alloc(sizeof(EulerState))); state->_alloc = arena; state->ideal = RawSquareFreeIdeal::construct(arena->alloc(bytesIdeal), varCount); state->eliminated = arena->allocArrayNoCon(wordsElim).first; state->sign = 1; state->_parent = 0; return state; } EulerState* EulerState::inPlaceStdSplit(size_t pivotVar) { ASSERT(pivotVar < getVarCount()); EulerState* subState = makeSumSubState(pivotVar); toColonSubState(pivotVar); return subState; } EulerState* EulerState::inPlaceStdSplit(Word* pivot) { ASSERT(pivot != 0); EulerState* subState = makeSumSubState(pivot); toColonSubState(pivot); return subState; } EulerState* EulerState::inPlaceGenSplit(size_t pivotIndex) { ASSERT(pivotIndex < getIdeal().getGeneratorCount()); const size_t varCount = ideal->getVarCount(); const size_t capacity = ideal->getGeneratorCount(); EulerState* subState = rawConstruct(varCount, capacity, _alloc); subState->_parent = this; *subState->ideal = *ideal; Ops::assign(subState->eliminated, eliminated, varCount); subState->sign = sign; const Word* pivot = getIdeal().getGenerator(pivotIndex); subState->removeGenerator(pivotIndex); subState->toColonSubState(pivot); subState->flipSign(); removeGenerator(pivotIndex); ASSERT(subState->debugIsValid()); return subState; } bool EulerState::toColonSubState(const Word* pivot) { ASSERT(pivot != 0); ASSERT(Ops::isRelativelyPrime(pivot, getEliminatedVars(), getVarCount())); const size_t genCountBefore = getIdeal().getGeneratorCount(); ideal->colonReminimize(pivot); Ops::lcmInPlace(eliminated, pivot, ideal->getVarCount()); ASSERT(debugIsValid()); return genCountBefore != getIdeal().getGeneratorCount(); } bool EulerState::toColonSubState(size_t pivotVar) { ASSERT(pivotVar < getVarCount()); ASSERT(Ops::getExponent(getEliminatedVars(), pivotVar) == 0); const size_t genCountBefore = getIdeal().getGeneratorCount(); ideal->colonReminimize(pivotVar); Ops::setExponent(eliminated, pivotVar, true); ASSERT(debugIsValid()); return genCountBefore != getIdeal().getGeneratorCount(); } void EulerState::toColonSubStateNoReminimizeNecessary(size_t pivotVar) { ASSERT(pivotVar < getVarCount()); ASSERT(Ops::getExponent(getEliminatedVars(), pivotVar) == 0); ideal->colon(pivotVar); Ops::setExponent(eliminated, pivotVar, true); ASSERT(debugIsValid()); } void EulerState::toColonSubStateNoReminimizeNecessary(Word* pivot) { ASSERT(pivot != 0); ASSERT(Ops::isRelativelyPrime(getEliminatedVars(), pivot, getVarCount())); ideal->colon(pivot); Ops::lcmInPlace(eliminated, pivot, getVarCount()); ASSERT(debugIsValid()); } EulerState* EulerState::makeSumSubState(size_t pivotVar) { const size_t varCount = ideal->getVarCount(); const size_t capacity = ideal->getGeneratorCount(); EulerState* subState = rawConstruct(varCount, capacity, _alloc); subState->_parent = this; subState->ideal->insertNonMultiples(pivotVar, *ideal); Ops::assign(subState->eliminated, eliminated, varCount); Ops::setExponent(subState->eliminated, pivotVar, 1); subState->sign = sign; subState->flipSign(); ASSERT(subState->debugIsValid()); return subState; } EulerState* EulerState::makeSumSubState(Word* pivot) { const size_t varCount = ideal->getVarCount(); const size_t capacity = ideal->getGeneratorCount() + 1; EulerState* subState = rawConstruct(varCount, capacity, _alloc); subState->_parent = this; subState->ideal->insertNonMultiples(pivot, *ideal); ASSERT(subState->ideal->getGeneratorCount() < ideal->getGeneratorCount()); subState->ideal->insert(pivot); Ops::assign(subState->eliminated, eliminated, varCount); subState->sign = sign; ASSERT(subState->debugIsValid()); return subState; } void EulerState::transpose() { ideal->transpose(eliminated); ideal->minimize(); Ops::setToIdentity(eliminated, ideal->getVarCount()); } void EulerState::compactEliminatedVariablesIfProfitable() { const size_t varCount = getVarCount(); const size_t varsLeft = getNonEliminatedVarCount(); if (Ops::getWordCount(varCount) > Ops::getWordCount(varsLeft)) { ideal->compact(eliminated); Ops::setToIdentity(eliminated, ideal->getVarCount()); ASSERT(debugIsValid()); } } void EulerState::print(FILE* out) { fputs("** an Euler characteristic algorithm state:\n", out); fprintf(out, "State sign: %s\n", sign == 1 ? "+1" : "-1"); fputs("Eliminated: ", out); Ops::print(out, eliminated, ideal->getVarCount()); fputc('\n', out); ideal->print(out); } #ifdef DEBUG bool EulerState::debugIsValid() const { if (ideal == 0 || eliminated == 0 || _alloc == 0) return false; if (sign != 1 && sign != -1) return false; if (!Ops::isValid(eliminated, ideal->getVarCount())) return false; if (!ideal->isMinimallyGenerated()) return false; if (ideal->getVarCount() != 0 && ideal->getNotRelativelyPrime(eliminated) != ideal->getGeneratorCount()) return false; return true; } #endif void EulerState::toZero() { ideal = 0; eliminated = 0; sign = 1; _parent = 0; } size_t EulerState::getNonEliminatedVarCount() const { const size_t eliminatedVarCount = Ops::getSizeOfSupport(getEliminatedVars(), getVarCount()); ASSERT(getVarCount() >= eliminatedVarCount); return getVarCount() - eliminatedVarCount; } frobby-0.9.5/src/EulerState.h000066400000000000000000000046701401527164200160360ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef EULER_STATE_GUARD #define EULER_STATE_GUARD #include "RawSquareFreeIdeal.h" class Ideal; class Arena; class EulerState { public: static EulerState* construct(const Ideal& idealParam, Arena* arena); static EulerState* construct (const RawSquareFreeIdeal& idealParam, Arena* arena); EulerState* inPlaceStdSplit(size_t pivotVar); EulerState* inPlaceStdSplit(Word* pivot); EulerState* inPlaceGenSplit(size_t pivotIndex); bool toColonSubState(const Word* pivot); bool toColonSubState(size_t pivotVar); void toColonSubStateNoReminimizeNecessary(size_t pivotVar); void toColonSubStateNoReminimizeNecessary(Word* pivot); EulerState* makeSumSubState(size_t pivotVar); EulerState* makeSumSubState(Word* pivot); void flipSign() {sign = -sign;} int getSign() const {return sign;} void transpose(); EulerState* getParent() {return _parent;} RawSquareFreeIdeal& getIdeal() {return *ideal;} const RawSquareFreeIdeal& getIdeal() const {return *ideal;} const Word* getEliminatedVars() const {return eliminated;} size_t getVarCount() const {return getIdeal().getVarCount();} size_t getNonEliminatedVarCount() const; void removeGenerator(size_t index) {ideal->removeGenerator(index);} void compactEliminatedVariablesIfProfitable(); void print(FILE* out); #ifdef DEBUG bool debugIsValid() const; #endif private: EulerState(const EulerState&); // unavailable static EulerState* rawConstruct(size_t varCount, size_t capacity, Arena* arena); void toZero(); void allocateIdealAndEliminated(size_t varCount, size_t capacity); void deallocate(); RawSquareFreeIdeal* ideal; Word* eliminated; int sign; Arena* _alloc; EulerState* _parent; }; #endif frobby-0.9.5/src/Facade.cpp000066400000000000000000000030321401527164200154460ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Facade.h" Facade::Facade(bool printActions): _printActions(printActions) #ifdef DEBUG , _doingAnAction(false) #endif { } Facade::~Facade() { } void Facade::printMessage(const char* message) { if (_printActions) { fputs(message, stderr); fflush(stderr); } } void Facade::beginAction(const char* message) { #ifdef DEBUG ASSERT(!_doingAnAction); _doingAnAction = true; #endif if (!_printActions) return; printMessage(message); _timer.reset(); } void Facade::endAction() { #ifdef DEBUG ASSERT(_doingAnAction); _doingAnAction = false; #endif if (!_printActions) return; fputc(' ', stderr); _timer.print(stderr); fputc('\n', stderr); fflush(stderr); } bool Facade::isPrintingActions() const { return _printActions; } frobby-0.9.5/src/Facade.h000066400000000000000000000045711401527164200151240ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef FACADE_GUARD #define FACADE_GUARD #include "Timer.h" /** This is the super class of all facades. It offers protected methods that are convenient for derived classes to print out what they are doing and how long it took, and to be able to turn this on and off with a boolean flag. @ingroup Facade @todo Replace this with ActionPrinter using aggregation instead of inheritance. */ class Facade { protected: /** Constructs a facade that prints out what it is doing if printActions is true. */ Facade(bool printActions); virtual ~Facade(); /** Prints message to standard error if printing is turned on. */ void printMessage(const char* message); /** Prints message to standard error if printing is turned on, and records the time when the action started. endAction() must be called in-between two calls to beginAction. */ void beginAction(const char* message); /** Prints to standard error the time since the last call to beginAction. endAction() can only be called once after each call to beginAction. */ void endAction(); /** Returns true if printing actions. */ bool isPrintingActions() const; private: /** Keeps track of the time between calls to beginAction() and endAction(). */ Timer _timer; /** Keeps track of whether we are printing. */ bool _printActions; #ifdef DEBUG /** A debug field to assert if beginAction() is called twice without a call to endAction() in between, or if endAction() is called without a preceding call to beginAction() that has not already been ended. */ bool _doingAnAction; #endif }; #endif frobby-0.9.5/src/Fourti2IOHandler.cpp000066400000000000000000000322371401527164200173740ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Fourti2IOHandler.h" #include "Scanner.h" #include "BigIdeal.h" #include "Term.h" #include "TermTranslator.h" #include "BigPolynomial.h" #include "BigTermConsumer.h" #include "DataType.h" #include "IdealConsolidator.h" #include "PolynomialConsolidator.h" #include "SatBinomIdeal.h" #include "SatBinomConsumer.h" #include "IdealWriter.h" #include "PolyWriter.h" #include "error.h" #include "display.h" #include "InputConsumer.h" namespace IO { namespace Fourti2 { void writeRing(const VarNames& names, FILE* out); void writeRingWithoutHeader(const VarNames& names, FILE* out); void readTerm(Scanner& in, InputConsumer& consumer); void readRing(Scanner& in, VarNames& names); void readRing(Scanner& in, VarNames& names, size_t varCount); void writeTerm(const vector& term, FILE* out); void writeTerm(const Term& term, const TermTranslator& translator, FILE* out); void readIdeal(Scanner& in, InputConsumer& consumer, size_t generatorCount, size_t varCount); void readSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer, size_t generatorCount, size_t varCount); void display4ti2Warning(); } namespace F = Fourti2; class Fourti2IdealWriter : public IdealWriter { public: Fourti2IdealWriter(FILE* out): IdealWriter(out) { } private: virtual void doWriteHeader(bool first) { INTERNAL_ERROR_UNIMPLEMENTED(); } virtual void doWriteHeader(bool first, size_t generatorCount) { fprintf(getFile(), "%lu %lu\n", (unsigned long)generatorCount, (unsigned long)getNames().getVarCount()); } virtual void doWriteTerm(const Term& term, const TermTranslator& translator, bool first) { F::writeTerm(term, translator, getFile()); } virtual void doWriteTerm(const vector& term, bool first) { F::writeTerm(term, getFile()); } virtual void doWriteFooter(bool wasZeroIdeal) { if (!getNames().namesAreDefault()) F::writeRingWithoutHeader(getNames(), getFile()); } virtual void doWriteEmptyList() { F::writeRing(getNames(), getFile()); } }; class Fourti2PolyWriter : public PolyWriter { public: Fourti2PolyWriter(FILE* out): PolyWriter(out) { } private: virtual void doWriteHeader() { INTERNAL_ERROR_UNIMPLEMENTED(); } virtual void doWriteHeader(size_t termCount) { fprintf(getFile(), "%lu %lu\n", (unsigned long)termCount, (unsigned long)getNames().getVarCount() + 1); } virtual void doWriteTerm(const mpz_class& coef, const Term& term, const TermTranslator& translator, bool firstGenerator) { ASSERT(term.getVarCount() == translator.getVarCount()); mpz_out_str(getFile(), 10, coef.get_mpz_t()); if (term.getVarCount() > 0) { fputc(' ', getFile()); F::writeTerm(term, translator, getFile()); } else fputc('\n', getFile()); } virtual void doWriteTerm(const mpz_class& coef, const vector& term, bool firstGenerator) { ASSERT(term.size() == getNames().getVarCount()); mpz_out_str(getFile(), 10, coef.get_mpz_t()); if (!term.empty()) { fputc(' ', getFile()); F::writeTerm(term, getFile()); } else fputc('\n', getFile()); } virtual void doWriteFooter(bool wasZero) { fputs("(coefficient)", getFile()); if (!getNames().namesAreDefault()) F::writeRingWithoutHeader(getNames(), getFile()); else fputc('\n', getFile()); }; }; Fourti2IOHandler::Fourti2IOHandler(): IOHandlerImpl(staticGetName(), "Format used by the software package 4ti2.") { registerInput(DataType::getMonomialIdealType()); registerInput(DataType::getMonomialIdealListType()); registerInput(DataType::getPolynomialType()); registerInput(DataType::getSatBinomIdealType()); registerOutput(DataType::getMonomialIdealType()); registerOutput(DataType::getMonomialIdealListType()); registerOutput(DataType::getPolynomialType()); } const char* Fourti2IOHandler::staticGetName() { return "4ti2"; } BigTermConsumer* Fourti2IOHandler::doCreateIdealWriter(FILE* out) { F::display4ti2Warning(); auto_ptr writer(new Fourti2IdealWriter(out)); return new IdealConsolidator(writer); } CoefBigTermConsumer* Fourti2IOHandler::doCreatePolynomialWriter(FILE* out) { F::display4ti2Warning(); auto_ptr writer(new Fourti2PolyWriter(out)); return new PolynomialConsolidator(writer); } void Fourti2IOHandler::doWriteTerm(const vector& term, const VarNames& names, FILE* out) { if (term.empty()) { // Otherwise we will print nothing, which would be OK inside an // ideal since then it is possible to see what happened from the // number of generators and variables. We do not have that // information here, so we have to print something. fputs("_fourtitwo_identity", out); } F::writeTerm(term, out); } void Fourti2IOHandler::doReadTerm(Scanner& in, InputConsumer& consumer) { F::readTerm(in, consumer); } void Fourti2IOHandler::doReadIdeal(Scanner& in, InputConsumer& consumer) { size_t generatorCount; in.readSizeT(generatorCount); size_t varCount; in.readSizeT(varCount); F::readIdeal(in, consumer, generatorCount, varCount); } void Fourti2IOHandler::doReadIdeals(Scanner& in, InputConsumer& consumer) { // An empty list is just a ring by itself, and this has a special // syntax. So we first decipher whether we are looking at a ring or // an ideal. At the point where we can tell that it is an ideal, we // have already read part of the ideal, so we have to do something // to pass the read information on to the code for reading the rest // of the ideal. size_t generatorCount; in.readSizeT(generatorCount); if (generatorCount == 42 && in.peekIdentifier()) { in.expect("ring"); VarNames names; F::readRing(in, names); consumer.consumeRing(names); in.expectEOF(); return; } size_t varCount; in.readSizeT(varCount); F::readIdeal(in, consumer, generatorCount, varCount); while (hasMoreInput(in)) doReadIdeal(in, consumer); } void Fourti2IOHandler::doReadPolynomial(Scanner& in, CoefBigTermConsumer& consumer) { size_t generatorCount; size_t varCount; in.readSizeT(generatorCount); in.readSizeT(varCount); if (varCount == 0) reportError ("A polynomial has at least one column in the matrix," "but this matrix has no columns."); // The first column is the coefficient and so does not represent a // variable. --varCount; BigPolynomial polynomial((VarNames(varCount))); for (size_t t = 0; t < generatorCount; ++t) { // Read a term polynomial.newLastTerm(); in.readInteger(polynomial.getLastCoef()); vector& term = polynomial.getLastTerm(); for (size_t var = 0; var < varCount; ++var) { ASSERT(var < term.size()); in.readIntegerAndNegativeAsZero(term[var]); } } if (!in.match('(')) { // This expect will fail which improves the error message compared // to just expect('('). in.expect("(coefficient)"); } in.expect("coefficient"); in.expect(')'); if (in.peekIdentifier()) { VarNames names; for (size_t var = 0; var < varCount; ++var) names.addVar(in.readIdentifier()); polynomial.renameVars(names); } consumer.consume(polynomial); } void Fourti2IOHandler::doReadSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer) { size_t generatorCount; in.readSizeT(generatorCount); size_t varCount; in.readSizeT(varCount); F::readSatBinomIdeal(in, consumer, generatorCount, varCount); } void F::writeRing(const VarNames& names, FILE* out) { fputs("42 ring\n", out); writeRingWithoutHeader(names, out); } void F::writeRingWithoutHeader(const VarNames& names, FILE* out) { if (names.getVarCount() == 0) return; fputc(' ', out); for (size_t var = 0; var < names.getVarCount(); ++var) { if (var > 0) fputc(' ', out); fputs(names.getName(var).c_str(), out); } fputc('\n', out); } void F::readTerm(Scanner& in, InputConsumer& consumer) { consumer.beginTerm(); const size_t varCount = consumer.getRing().getVarCount(); if (varCount == 0) in.expect("_fourtitwo_identity"); else { for (size_t var = 0; var < varCount; ++var) { if (in.match('-')) in.expectIntegerNoSign(); else consumer.consumeVarExponent(var, in); } } consumer.endTerm(); } void F::readRing(Scanner& in, VarNames& names) { names.clear(); while (in.peekIdentifier()) names.addVarSyntaxCheckUnique(in, in.readIdentifier()); } void F::readRing(Scanner& in, VarNames& names, size_t varCount) { names.clear(); for (size_t var = 0; var < varCount; ++var) names.addVarSyntaxCheckUnique(in, in.readIdentifier()); } void F::writeTerm(const vector& term, FILE* out) { size_t varCount = term.size(); for (size_t var = 0; var < varCount; ++var) { fputc(' ', out); mpz_out_str(out, 10, term[var].get_mpz_t()); } if (varCount != 0) fputc('\n', out); } void F::writeTerm(const Term& term, const TermTranslator& translator, FILE* out) { ASSERT(term.getVarCount() == translator.getVarCount()); size_t varCount = term.getVarCount(); for (size_t var = 0; var < varCount; ++var) { fputc(' ', out); const char* exp = translator.getExponentString(var, term[var]); if (exp == 0) exp = "0"; fputs(exp, out); } if (varCount != 0) fputc('\n', out); } /** The parsing of the header with the number of generators and variables has to be separate from the code below reading the rest of the ideal, since in some contexts what looks like the header of an ideal could be a ring description, while in other contexts this cannot happen. The code below is the common code for these two cases. */ void F::readIdeal(Scanner& in, InputConsumer& consumer, size_t generatorCount, size_t varCount) { consumer.consumeRing(VarNames(varCount)); consumer.beginIdeal(); if (varCount == 0) { for (size_t t = 0; t < generatorCount; ++t) { consumer.beginTerm(); consumer.endTerm(); } } else { for (size_t t = 0; t < generatorCount; ++t) F::readTerm(in, consumer); } if (in.peekIdentifier()) { VarNames names; F::readRing(in, names, varCount); consumer.consumeRing(names); } consumer.endIdeal(); } void F::readSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer, size_t generatorCount, size_t varCount) { // We have to read the entire ideal before we can tell whether there is // a ring associated to it, so we have to store the ideal here until // that time. SatBinomIdeal ideal((VarNames(varCount))); ideal.reserve(generatorCount); for (size_t t = 0; t < generatorCount; ++t) { // Read a term ideal.newLastTerm(); vector& binom = ideal.getLastBinomRef(); for (size_t var = 0; var < varCount; ++var) in.readInteger(binom[var]); } if (in.peekIdentifier()) { VarNames names; F::readRing(in, names, varCount); ideal.renameVars(names); } consumer.consume(ideal); } void F::display4ti2Warning() { string msg = "Using the format "; msg += Fourti2IOHandler::staticGetName(); msg += " makes it necessary to store all of the output in " "memory before writing it out. This increases " "memory consumption and decreases performance."; displayNote(msg); } } frobby-0.9.5/src/Fourti2IOHandler.h000066400000000000000000000035111401527164200170320ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef FOURTI2_IO_HANDLER_GUARD #define FOURTI2_IO_HANDLER_GUARD #include "IOHandlerImpl.h" #include class Scanner; class VarNames; class BigTermConsumer; class BigCoefTermConsumer; class SatBinomConsumer; namespace IO { class Fourti2IOHandler : public IOHandlerImpl { public: Fourti2IOHandler(); static const char* staticGetName(); private: virtual BigTermConsumer* doCreateIdealWriter(FILE* out); virtual CoefBigTermConsumer* doCreatePolynomialWriter(FILE* out); virtual void doWriteTerm(const vector& term, const VarNames& names, FILE* out); virtual void doReadTerm(Scanner& in, InputConsumer& consumer); virtual void doReadIdeal(Scanner& in, InputConsumer& consumer); virtual void doReadIdeals(Scanner& in, InputConsumer& consumer); virtual void doReadPolynomial(Scanner& in, CoefBigTermConsumer& consumer); virtual void doReadSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer); }; } #endif frobby-0.9.5/src/FrobbyStringStream.cpp000066400000000000000000000075361401527164200201060ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "FrobbyStringStream.h" #include #include // This is a replacement for stringstream, which may seem weird since // stringstream should work perfectly fine for any purpose where // FrobbyStringStream could be used. Unfortunately this is not the // case. // // The sad truth is that stringstream is unusable due to its behavior // when running out of memory - it just stops what it is doing and // then returns without propagating the bad_alloc exception. Setting // exception flags with the exception() method does not change this // behavior. This is for GCC v. 3.4.4 and on GCC 4.1.2 I have tested // that at least without setting exception() it fails silently, though // not whether that can be changed by using exception(). // // The advantage of FrobbyStringStream is that it does not try to be // clever in any way, and so it avoids these issues. FrobbyStringStream& FrobbyStringStream::operator<<(char character) { _str += character; return *this; } FrobbyStringStream& FrobbyStringStream::operator<<(unsigned long long integer) { appendIntegerToString(_str, integer); return *this; } FrobbyStringStream& FrobbyStringStream::operator<<(unsigned long integer) { appendIntegerToString(_str, integer); return *this; } FrobbyStringStream& FrobbyStringStream::operator<<(unsigned int integer) { appendIntegerToString(_str, integer); return *this; } FrobbyStringStream& FrobbyStringStream::operator<<(const mpz_class& integer) { appendIntegerToString(_str, integer); return *this; } FrobbyStringStream& FrobbyStringStream::operator<<(const string& text) { _str += text; return *this; } FrobbyStringStream& FrobbyStringStream::operator<<(const char* text) { _str += text; return *this; } string& FrobbyStringStream::str() { return _str; } const string& FrobbyStringStream::str() const { return _str; } FrobbyStringStream::operator const string&() const { return _str; } void FrobbyStringStream::appendIntegerToString(string& str, unsigned long integer) { unsigned long initialLength = str.size(); // Append string representation of integer with digits in reverse // order. do { unsigned long quotient = integer / 10; unsigned long remainder = integer - quotient * 10; // faster than % char digit = static_cast(remainder + '0'); str += digit; integer = quotient; // condition at end so that zero maps to "0" rather than "". } while (integer != 0); // Reverse the digits (and only the digits) to get the correct // order. reverse(str.begin() + initialLength, str.end()); } void FrobbyStringStream::appendIntegerToString(string& str, const mpz_class& integer) { str += integer.get_str(); } void FrobbyStringStream::parseInteger(mpz_class& integer, const string& str) { if (integer.set_str(str, 10) != 0) throw NotAnIntegerException ("Argument to FrobbyStringStream::parseInteger not a valid integer."); } FrobbyStringStream::NotAnIntegerException::NotAnIntegerException (const string& str): runtime_error(str) { } frobby-0.9.5/src/FrobbyStringStream.h000066400000000000000000000042741401527164200175470ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef FROBBY_STRING_STREAM_GUARD #define FROBBY_STRING_STREAM_GUARD #include #include /** A replacement for stringstream. See the .cpp file for a motivation to use this instead of the regular stringstream. It should not be used for operations that need to be efficient. */ class FrobbyStringStream { public: FrobbyStringStream& operator<<(unsigned long long integer); FrobbyStringStream& operator<<(unsigned long integer); FrobbyStringStream& operator<<(unsigned int integer); FrobbyStringStream& operator<<(const mpz_class& integer); FrobbyStringStream& operator<<(const string& text); FrobbyStringStream& operator<<(const char* text); /** This overload actually appends the character to the stream instead of appending a string representation of the number. This is different from stringstream. */ FrobbyStringStream& operator<<(char character); string& str(); const string& str() const; operator const string&() const; void clear() {_str.clear();} static void appendIntegerToString(string& str, unsigned long integer); static void appendIntegerToString(string& str, const mpz_class& integer); /** Throws NotAnIntegerException if str is not the string representation of an integer. */ static void parseInteger(mpz_class& integer, const string& str); class NotAnIntegerException : public runtime_error { public: NotAnIntegerException(const string&); }; private: string _str; }; #endif frobby-0.9.5/src/FrobeniusAction.cpp000066400000000000000000000066001401527164200174010ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "FrobeniusAction.h" #include "BigIdeal.h" #include "IOFacade.h" #include "SliceFacade.h" #include "SliceParams.h" #include "BigTermRecorder.h" #include "Scanner.h" #include "display.h" FrobeniusAction::FrobeniusAction(): Action (staticGetName(), "Compute Frobenius number using a Grobner basis algorithm.", "Compute the Frobenius number of the passed-in Frobenius instance. This " "instance\n" "must be preceded in the input by a deg-rev-lex lattice ideal Grobner basis " "as\n" "produced by the program 4ti2.\n\n" "The algorithm for this uses irreducible decomposition to compute the " "Frobenius\n" "number, which is why this action accepts parameters related to that. See " "the\n" "paper \"Solving Thousand Digit Frobenius Problems Using Grobner Bases\"\n" "at www.broune.com for more details.", false), _sliceParams(true, false), _displaySolution ("vector", "Display the vector that achieves the optimal value.", false) { _sliceParams.setSplit("frob"); } void FrobeniusAction::obtainParameters(vector& parameters) { Action::obtainParameters(parameters); _sliceParams.obtainParameters(parameters); parameters.push_back(&_displaySolution); } void FrobeniusAction::perform() { displayNote ("The action frobgrob is DEPRECATED, and will be removed in a future " "release of Frobby. Use the action optimize with options " "-chopFirstAndSubtract and -maxStandard instead to get the same effect."); SliceParams params(_params); validateSplit(params, true, true); vector instance; BigIdeal ideal; IOFacade ioFacade(_printActions); Scanner in("", stdin); ioFacade.readFrobeniusInstanceWithGrobnerBasis(in, ideal, instance); in.expectEOF(); vector shiftedDegrees(instance.begin() + 1, instance.end()); vector bigVector; BigTermRecorder recorder; SliceFacade facade(params, ideal, recorder); mpz_class dummy; facade.solveStandardProgram(shiftedDegrees, dummy, false); BigIdeal maxSolution = *(recorder.releaseIdeal()); ASSERT(maxSolution.getGeneratorCount() == 1); bigVector = maxSolution[0]; mpz_class frobeniusNumber = -instance[0]; for (size_t i = 1; i < instance.size(); ++i) frobeniusNumber += bigVector[i - 1] * instance[i]; if (_displaySolution) { fputs("(-1", stdout); for (size_t i = 0; i < bigVector.size(); ++i) gmp_fprintf(stdout, ", %Zd", bigVector[i].get_mpz_t()); fputs(")\n", stdout); } gmp_fprintf(stdout, "%Zd\n", frobeniusNumber.get_mpz_t()); } const char* FrobeniusAction::staticGetName() { return "frobgrob"; } bool FrobeniusAction::displayAction() const { return false; } frobby-0.9.5/src/FrobeniusAction.h000066400000000000000000000023161401527164200170460ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef FROBENIUS_ACTION_GUARD #define FROBENIUS_ACTION_GUARD #include "Action.h" #include "SliceParameters.h" #include "BoolParameter.h" class FrobeniusAction : public Action { public: FrobeniusAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); virtual bool displayAction() const; static const char* staticGetName(); private: SliceParameters _sliceParams; BoolParameter _displaySolution; }; #endif frobby-0.9.5/src/GenerateDataFacade.cpp000066400000000000000000000065741401527164200177310ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "GenerateDataFacade.h" #include "randomDataGenerators.h" #include "display.h" GenerateDataFacade::GenerateDataFacade(bool printActions): Facade(printActions) { } void GenerateDataFacade::generateListIdeal(BigIdeal& ideal, size_t varCount) { beginAction("Generating list ideal."); ::generateLinkedListIdeal(ideal, varCount); endAction(); } void GenerateDataFacade::generateKingChessIdeal(BigIdeal& ideal, unsigned int rowsAndColumns) { beginAction("Generating king ideal."); ::generateKingChessIdeal(ideal, rowsAndColumns); endAction(); } void GenerateDataFacade::generateKnightChessIdeal (BigIdeal& ideal, unsigned int rowsAndColumns) { beginAction("Generating knight ideal."); ::generateKnightChessIdeal(ideal, rowsAndColumns); endAction(); } void GenerateDataFacade::generateRookChessIdeal (BigIdeal& ideal, unsigned int n, unsigned int k) { beginAction("Generating rook ideal."); ::generateRookChessIdeal(ideal, n, k); endAction(); } void GenerateDataFacade::generateMatchingIdeal (BigIdeal& ideal, unsigned int n) { beginAction("Generating matching ideal."); ::generateMatchingIdeal(ideal, n); endAction(); } void GenerateDataFacade::generateTreeIdeal (BigIdeal& ideal, unsigned int varCount) { beginAction("Generating tree ideal."); ::generateTreeIdeal(ideal, varCount); endAction(); } void GenerateDataFacade::generateEdgeIdeal (BigIdeal& ideal, size_t varCount, size_t generatorCount) { beginAction("Generating random edge ideal."); bool fullSize = ::generateRandomEdgeIdeal(ideal, varCount, generatorCount); if (!fullSize) displayNote("Generated ideal has fewer minimal " "generators than requested.\n"); endAction(); } void GenerateDataFacade::generateIdeal(BigIdeal& ideal, size_t exponentRange, size_t varCount, size_t generatorCount) { beginAction("Generating random monomial ideal."); bool fullSize = ::generateRandomIdeal(ideal, exponentRange, varCount, generatorCount); if (!fullSize) displayNote("Generated ideal has fewer minimal " "generators than requested.\n"); endAction(); } void GenerateDataFacade:: generateFrobeniusInstance(vector& instance, size_t entryCount, const mpz_class& maxEntry) { beginAction("Generating random Frobenius instance."); ::generateRandomFrobeniusInstance(instance, entryCount, maxEntry); endAction(); } frobby-0.9.5/src/GenerateDataFacade.h000066400000000000000000000036031401527164200173640ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef GENERATE_DATA_FACADE_GUARD #define GENERATE_DATA_FACADE_GUARD #include "Facade.h" #include class BigIdeal; /** A facade for random and other kinds of data. @ingroup Facade */ class GenerateDataFacade : private Facade { public: GenerateDataFacade(bool printActions); void generateListIdeal(BigIdeal& ideal, size_t varCount); void generateKingChessIdeal(BigIdeal& ideal, unsigned int rowsAndColumns); void generateKnightChessIdeal(BigIdeal& ideal, unsigned int rowsAndColumns); void generateRookChessIdeal(BigIdeal& ideal, unsigned int n, unsigned int k); void generateMatchingIdeal(BigIdeal& ideal, unsigned int n); void generateTreeIdeal(BigIdeal& ideal, unsigned int varCount); void generateEdgeIdeal (BigIdeal& ideal, size_t varCount, size_t generatorCount); void generateIdeal(BigIdeal& ideal, size_t exponentRange, size_t varCount, size_t generatorCount); void generateFrobeniusInstance(vector& instance, size_t entryCount, const mpz_class& maxEntry); }; #endif frobby-0.9.5/src/GenerateFrobeniusAction.cpp000066400000000000000000000042261401527164200210560ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "GenerateFrobeniusAction.h" #include "BigIdeal.h" #include "GenerateDataFacade.h" #include "IOFacade.h" #include "error.h" GenerateFrobeniusAction::GenerateFrobeniusAction(): Action (staticGetName(), "Generate a random Frobenius problem instance.", "Generate a random Frobenius problem instance.", false), _entryCount ("entryCount", "The number of entries in the random instance.", 4), _maxEntryDigits ("maxEntryDigits", "The largest allowed number of decimal digits for entries in the\n" "random instance.", 2) { } void GenerateFrobeniusAction:: obtainParameters(vector& parameters) { Action::obtainParameters(parameters); parameters.push_back(&_entryCount); parameters.push_back(&_maxEntryDigits); } void GenerateFrobeniusAction::perform() { vector instance; if (_entryCount < 1) reportError("There must be at least one entry."); if (_maxEntryDigits < 1) reportError("The largest allowed number of digits must be at least 1."); mpz_class maxEntry; mpz_ui_pow_ui(maxEntry.get_mpz_t(), 10, _maxEntryDigits.getValue()); GenerateDataFacade generator(_printActions); generator.generateFrobeniusInstance (instance, _entryCount.getValue(), maxEntry); IOFacade ioFacade(_printActions); ioFacade.writeFrobeniusInstance(stdout, instance); } const char* GenerateFrobeniusAction::staticGetName() { return "genfrob"; } frobby-0.9.5/src/GenerateFrobeniusAction.h000066400000000000000000000022631401527164200205220ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef GENERATOR_FROBENIUS_ACTION_GUARD #define GENERATOR_FROBENIUS_ACTION_GUARD #include "Action.h" #include "IntegerParameter.h" class GenerateFrobeniusAction : public Action { public: GenerateFrobeniusAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); private: IntegerParameter _entryCount; IntegerParameter _maxEntryDigits; }; #endif frobby-0.9.5/src/GenerateIdealAction.cpp000066400000000000000000000067121401527164200201420ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "GenerateIdealAction.h" #include "BigIdeal.h" #include "GenerateDataFacade.h" #include "IOFacade.h" #include "error.h" #include "DataType.h" GenerateIdealAction::GenerateIdealAction(): Action (staticGetName(), "Generate a random monomial ideal.", "Generate a monomial ideal. The default is to generate a random one,\n" "and in certain rare cases the generated ideal may have less than the " "requested\n" "number of minimial generators. This can be alleviated by increasing the\n" "exponent range or the number of variables.\n\n" "The other types of ideals are not random, and they use the number of " "variables\n" "as a parameter and may thus have more generators, depending on the type.", false), _type ("type", "The supported types of ideals are random, edge, list, king, knight, rook, matching and tree.", "random"), _variableCount("varCount", "The number of variables.", 3), _generatorCount("genCount", "The number of minimal generators.", 5), _exponentRange ("expRange", "Exponents are chosen uniformly in the range [0,INTEGER].", 9), _io(DataType::getNullType(), DataType::getMonomialIdealType()) { } void GenerateIdealAction::obtainParameters(vector& parameters) { Action::obtainParameters(parameters); _io.obtainParameters(parameters); parameters.push_back(&_exponentRange); parameters.push_back(&_variableCount); parameters.push_back(&_generatorCount); parameters.push_back(&_type); } void GenerateIdealAction::perform() { _io.validateFormats(); BigIdeal ideal; GenerateDataFacade generator(_printActions); const string& type = _type; if (type == "random") generator.generateIdeal(ideal, _exponentRange, _variableCount, _generatorCount); else if (type == "list") generator.generateListIdeal(ideal, _variableCount); else if (type == "edge") generator.generateEdgeIdeal(ideal, _variableCount, _generatorCount); else if (type == "king") generator.generateKingChessIdeal(ideal, _variableCount); else if (type == "knight") generator.generateKnightChessIdeal(ideal, _variableCount); else if (type == "rook") generator.generateRookChessIdeal(ideal, _variableCount, _generatorCount); else if (type == "matching") generator.generateMatchingIdeal(ideal, _variableCount); else if (type == "tree") generator.generateTreeIdeal(ideal, _variableCount); else reportError("Unknown ideal type \"" + type + "\"."); IOFacade ioFacade(_printActions); auto_ptr output = _io.createOutputHandler(); ioFacade.writeIdeal(ideal, output.get(), stdout); } const char* GenerateIdealAction::staticGetName() { return "genideal"; } frobby-0.9.5/src/GenerateIdealAction.h000066400000000000000000000024571401527164200176110ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef GENERATOR_IDEAL_ACTION_GUARD #define GENERATOR_IDEAL_ACTION_GUARD #include "Action.h" #include "StringParameter.h" #include "IntegerParameter.h" #include "IOParameters.h" class GenerateIdealAction : public Action { public: GenerateIdealAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); private: StringParameter _type; IntegerParameter _variableCount; IntegerParameter _generatorCount; IntegerParameter _exponentRange; IOParameters _io; }; #endif frobby-0.9.5/src/HashMap.h000066400000000000000000000056221401527164200153000ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef HASH_MAP_GUARD #define HASH_MAP_GUARD /** \file The purpose of this file is to provide a definition of a hash map whenever possible. This needs to be done separately since various compilers put their hash maps in different places. GCC even moves it around for different versions and issues warnings for some placements. This has been fixed by including GCCs hash_map with Frobby to get a consistent and warning-free place to get it from. If the current compiler is not recognized, we use a comparison-based map as a fall-back. */ template class FrobbyHash {}; // ********************************************************* #if defined(__GNUC__) || defined(__clang__) #if 0 #include "hash_map/hash_map" #include #endif #include template class HashMap : public std::unordered_map> { }; #if 0 template<> class FrobbyHash : public __gnu_cxx::hash { }; template class HashMap : public __gnu_cxx::hash_map > { }; #endif #else // ********************************************************* #ifdef _MSC_VER // Only Microsoft C++ defines this macro #include #include template class HashWrapper : public stdext::hash_compare >, FrobbyHash { public: size_t operator()(const Key& key) const { return FrobbyHash::operator()(key); } bool operator()(const Key& a, const Key& b) const { return stdext::hash_compare >::operator()(a, b); } }; template<> class HashWrapper : public stdext::hash_compare > { }; template class HashMap : public stdext::hash_map > { }; // ********************************************************* #else // Fall-back for unknown compilers #include template class HashMap : #if __cplusplus < 201103 public std::map #else public std::unordered_map #endif {}; #endif #endif #endif frobby-0.9.5/src/HashPolynomial.cpp000066400000000000000000000070371401527164200172430ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "HashPolynomial.h" #include "CoefBigTermConsumer.h" #include "TermTranslator.h" #include "TermPredicate.h" #include #include HashPolynomial::HashPolynomial(size_t varCount): _varCount(varCount) { } void HashPolynomial::clearAndSetVarCount(size_t varCount) { _terms.clear(); _varCount = varCount; } void HashPolynomial::add(const mpz_class& coef, const Term& term) { ASSERT(_varCount == term.getVarCount()); if (coef == 0) return; // Doing it this way incurs the penalty of looking up term twice if // ref ends up zero. I don't know how to avoid two look-ups in all // cases, especially when the interface of _terms is not fixed, // e.g. lowerbound doesn't exist for GCC's hash_map, so we can't use // that. mpz_class& ref = _terms[term]; ref += coef; if (ref == 0) _terms.erase(term); } void HashPolynomial::add(bool plus, const Term& term) { ASSERT(_varCount == term.getVarCount()); mpz_class& ref = _terms[term]; if (plus) ++ref; else --ref; if (ref == 0) _terms.erase(term); } namespace { /** Helper class for feedTo. */ class RefCompare { public: typedef HashMap TermMap; bool operator()(TermMap::const_iterator a, TermMap::const_iterator b) { return lexCompare(a->first, b->first) > 0; } }; } void HashPolynomial::feedTo (const TermTranslator& translator, CoefBigTermConsumer& consumer, bool inCanonicalOrder) const { consumer.consumeRing(translator.getNames()); consumer.beginConsuming(); if (!inCanonicalOrder) { // Output the terms in whatever order _terms is storing them. TermMap::const_iterator termsEnd = _terms.end(); TermMap::const_iterator it = _terms.begin(); for (; it != termsEnd; ++it) consumer.consume(it->second, it->first, translator); } else { // Fill refs with references to the terms in order to sort // them. We can't sort _terms since HashMap doesn't support that, // so we have to sort references into _terms instead. vector refs; refs.reserve(_terms.size()); TermMap::const_iterator termsEnd = _terms.end(); TermMap::const_iterator it = _terms.begin(); for (; it != termsEnd; ++it) refs.push_back(it); // Sort the references. sort(refs.begin(), refs.end(), RefCompare()); // Output the terms in the sorted order specified by refs. vector::const_iterator refsEnd = refs.end(); vector::const_iterator refIt = refs.begin(); for (; refIt != refsEnd; ++refIt) consumer.consume((*refIt)->second, (*refIt)->first, translator); } consumer.doneConsuming(); } size_t HashPolynomial::getTermCount() const { return _terms.size(); } frobby-0.9.5/src/HashPolynomial.h000066400000000000000000000037241401527164200167070ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef HASH_POLYNOMIAL_GUARD #define HASH_POLYNOMIAL_GUARD #include "Term.h" #include "HashMap.h" class CoefBigTermConsumer; class TermTranslator; /** This template specialization makes the hash code of a term available to the implementation of HashMap. */ template<> class FrobbyHash { public: size_t operator()(const Term& t) const { return t.getHashCode(); } }; /** A sparse multivariate polynomial represented by a hash table mapping terms to coefficients. This allows to avoid duplicate terms without a large overhead. */ class HashPolynomial { public: HashPolynomial(size_t varCount = 0); void clearAndSetVarCount(size_t varCount); /** Add coef*term to the polynomial. */ void add(const mpz_class& coef, const Term& term); /** Add +term or -term to the polynomial depending on whether plus is true or false, respectively. */ void add(bool plus, const Term& term); void feedTo(const TermTranslator& translator, CoefBigTermConsumer& consumer, bool inCanonicalOrder) const; size_t getTermCount() const; private: size_t _varCount; typedef HashMap TermMap; TermMap _terms; }; #endif frobby-0.9.5/src/HelpAction.cpp000066400000000000000000000150251401527164200163360ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "frobby.h" #include "stdinc.h" #include "HelpAction.h" #include "Parameter.h" #include "IOHandler.h" #include "DataType.h" #include "error.h" #include "display.h" #include "FrobbyStringStream.h" #include "ColumnPrinter.h" #include HelpAction::HelpAction(): Action (staticGetName(), "Display this help screen.", "Typing `frobby help' displays a list of the available actions.\n" "Typing `frobby help ACTION' displays a detailed description of that " "action.\n\n" "As an example, typing `frobby help irrdecom' will yield detailed " "information\n" "about the irrdecom action.", true) { } void HelpAction::obtainParameters(vector& parameters) { } void HelpAction::processNonParameter(const char* str) { _topic = str; } namespace { // Helper function for displayActionHelp(). bool paramCmp(Parameter* a, Parameter* b) { ASSERT(a != 0); ASSERT(b != 0); return string(a->getName()) < b->getName(); } } void HelpAction::displayActionHelp(Action& action) { FrobbyStringStream out; out << "Displaying information on action: " << action.getName() << "\n\n"; out << action.getDescription() << "\n"; vector parameters; action.obtainParameters(parameters); sort(parameters.begin(), parameters.end(), paramCmp); display(out); if (!parameters.empty()) { fprintf(stderr, "\nThe parameters accepted by %s are as follows.\n", action.getName()); typedef vector::const_iterator cit; for (cit it = parameters.begin(); it != parameters.end(); ++it) { string defaultValue = (*it)->getValueAsString(); fprintf(stderr, "\n -%s %s (default is %s)\n", (*it)->getName().c_str(), (*it)->getArgumentType().c_str(), (*it)->getValueAsString().c_str()); display((*it)->getDescription(), " "); } } } void HelpAction::displayIOHelp() { display ("Displaying information on topic: io\n" "\n" "Frobby understands several file formats. These are not documented, " "but they are simple enough that seeing an example should be enough " "to figure them out. Getting an example is as simple as making " "Frobby produce output in that format. " "\n\n" "It is true of all the formats that white-space is insignificant, " "but other than that Frobby is quite fuzzy about how the input " "must look. E.g. a Macaulay 2 file containing a monomial ideal " "must start with \"R = \", so writing \"r = \" with a lower-case r " "is an error. To help with this, Frobby tries to say what is wrong " "if there is an error." "\n\n" "If no input format is specified, Frobby will guess at the format, " "and it will guess correctly if there are no errors in the input. " "If no output format is specified, Frobby will use the same format " "for output as for input. If you want to force Frobby to use a " "specific format, use the -iformat and -oformat options. Using " "these with the transform action allows translation between formats. " "\n\n" "The formats available in Frobby and the types of data they " "support are as follows. " "\n"); vector names; getIOHandlerNames(names); for (vector::const_iterator name = names.begin(); name != names.end(); ++name) { auto_ptr handler = createIOHandler(*name); ASSERT(handler.get() != 0); fprintf(stderr, "\n* The format %s: %s\n", handler->getName(), handler->getDescription()); vector types = DataType::getTypes(); for (vector::const_iterator typeIt = types.begin(); typeIt != types.end(); ++typeIt) { const DataType& type = **typeIt; bool input = handler->supportsInput(type); bool output = handler->supportsOutput(type); const char* formatStr = ""; if (input && output) formatStr = " - supports input and output of %s.\n"; else if (input) formatStr = " - supports input of %s.\n"; else if (output) formatStr = " - supports output of %s.\n"; fprintf(stderr, formatStr, type.getName()); } } } void HelpAction::perform() { if (_topic != "") { if (_topic == "io") displayIOHelp(); else displayActionHelp(*Action::createActionWithPrefix(_topic)); return; } FrobbyStringStream out; out << "Frobby version " << frobby_version << " Copyright (C) 2007 Bjarke Hammersholt Roune\n"; out << "Frobby performs a number of computations related to monomial " "ideals.\nYou run it by typing `frobby ACTION', where ACTION is " "one of the following. " "\n\n"; ColumnPrinter printer; printer.addColumn(false, " "); printer.addColumn(true, " - "); vector names; Action::getActionNames(names); for (vector::const_iterator it = names.begin(); it != names.end(); ++it) { auto_ptr action(Action::createActionWithPrefix(*it)); if (action->displayAction()) { printer[0] << action->getName() << '\n'; printer[1] << action->getShortDescription() << '\n'; } } printer.print(out); out << "\nType 'frobby help ACTION' to get more details on a specific action.\n" "Note that all input and output is done via the standard streams.\n" "Type 'frobby help io' for more information on input and output formats.\n" "See www.broune.com for further information and new versions of Frobby.\n" "\n" "Frobby is free software and you are welcome to redistribute it under certain " "conditions. Frobby comes with ABSOLUTELY NO WARRANTY. See the GNU General " "Public License version 2.0 in the file COPYING for details.\n"; display(out); } const char* HelpAction::staticGetName() { return "help"; } bool HelpAction::displayAction() const { return false; } frobby-0.9.5/src/HelpAction.h000066400000000000000000000023331401527164200160010ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef HELP_ACTION_GUARD #define HELP_ACTION_GUARD #include "Action.h" #include class HelpAction : public Action { public: HelpAction(); virtual void obtainParameters(vector& parameters); virtual void processNonParameter(const char* str); virtual void perform(); static const char* staticGetName(); virtual bool displayAction() const; private: void displayActionHelp(Action& action); void displayIOHelp(); string _topic; }; #endif frobby-0.9.5/src/HilbertAction.cpp000066400000000000000000000060611401527164200170370ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABIL-ITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "HilbertAction.h" #include "SliceFacade.h" #include "SliceParams.h" #include "BigattiFacade.h" #include "BigattiParams.h" #include "ScarfFacade.h" #include "DataType.h" #include "ScarfParams.h" #include "error.h" HilbertAction::HilbertAction(): Action (staticGetName(), "Compute the Hilbert-Poincare series of the input ideal.", "Compute the multigraded Hilbert-Poincare series of the input\n" "ideal. Use the -univariate option to get the univariate series.\n\n" "The Hilbert-Poincare series of a monomial ideal is the sum of all\n" "monomials not in the ideal. This sum can be written as a (finite)\n" "rational function with (x1-1)(x2-1)...(xn-1) in the denominator,\n" "assuming the variables of the ring are x1,x2,...,xn. This action\n" "computes the polynomial in the numerator of this fraction.", false), _io(DataType::getMonomialIdealType(), DataType::getPolynomialType()), _sliceParams(false, true, true), _univariate ("univariate", "Output a univariate polynomial by substituting t for each variable.", false), _algorithm ("algorithm", "Which algorithm to use. Options are slice, bigatti and deform.", "bigatti") { _params.add(_io); _params.add(_sliceParams); _params.add(_univariate); _params.add(_algorithm); addScarfParams(_params); } void HilbertAction::perform() { if (_algorithm.getValue() == "bigatti") { BigattiParams params(_params); BigattiFacade facade(params); if (_univariate) facade.computeUnivariateHilbertSeries(); else facade.computeMultigradedHilbertSeries(); } else if (_algorithm.getValue() == "slice") { SliceParams params(_params); validateSplit(params, false, false); SliceFacade sliceFacade(params, DataType::getPolynomialType()); if (_univariate) sliceFacade.computeUnivariateHilbertSeries(); else sliceFacade.computeMultigradedHilbertSeries(); } else if (_algorithm.getValue() == "deform") { ScarfParams params(_params); ScarfFacade facade(params); if (_univariate) facade.computeUnivariateHilbertSeries(); else facade.computeMultigradedHilbertSeries(); } else reportError("Unknown Hilbert-Poincare series algorithm \"" + _algorithm.getValue() + "\"."); } const char* HilbertAction::staticGetName() { return "hilbert"; } frobby-0.9.5/src/HilbertAction.h000066400000000000000000000023011401527164200164750ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef HILBERT_ACTION_GUARD #define HILBERT_ACTION_GUARD #include "Action.h" #include "IOParameters.h" #include "BoolParameter.h" #include "SliceParameters.h" #include "StringParameter.h" class HilbertAction : public Action { public: HilbertAction(); virtual void perform(); static const char* staticGetName(); private: IOParameters _io; SliceParameters _sliceParams; BoolParameter _univariate; StringParameter _algorithm; }; #endif frobby-0.9.5/src/HilbertBasecase.cpp000066400000000000000000000204301401527164200173240ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "HilbertBasecase.h" #include "Ideal.h" #include "Term.h" #include "error.h" HilbertBasecase::HilbertBasecase(): _idealCacheDeleter(_idealCache), _stepsPerformed(0) { } HilbertBasecase::~HilbertBasecase() { ASSERT(_todo.empty()); } // Performs one or more steps of computation. Steps are performed on // entry until entry becomes a base case, or until it needs to be // split into two. // // If entry becomes a base case, then false is returned, entry can be // discarded and newEntry is unchanged. // // If entry needs to be split into two, then true is returned, entry // becomes one of the subcomputations, and newEntry becomes the other. bool HilbertBasecase::stepComputation(Entry& entry, Entry& newEntry) { ++_stepsPerformed; size_t varCount = entry.ideal->getVarCount(); // This loops keeps iterating as long as entry is not a base case // and there is some computation that can be done on entry that does // not require splitting it into two. while (true) { // Here _term is used to contain support counts to choose best pivot and // to detect base case. // We start off checking different ways that entry can be a base // case. entry.ideal->getSupportCounts(_term); if (_term.getSizeOfSupport() + entry.extraSupport != varCount) return false; if (_term.isSquareFree()) { if ((entry.ideal->getGeneratorCount() % 2) == 1) entry.negate = !entry.negate; if (entry.negate) --_sum; else ++_sum; return false; } if (entry.ideal->getGeneratorCount() == 2) { if (entry.negate) --_sum; else ++_sum; return false; } // This is a simplification step, and if we can perform it, we // just start over with the new entry we get that way. This is // necessary because the base case checks below assume that this // simplification has been performed. size_t ridden = eliminate1Counts(*entry.ideal, _term, entry.negate); if (ridden != 0) { entry.extraSupport += ridden; continue; } if (entry.ideal->getGeneratorCount() == 3) { if (entry.negate) _sum -= 2; else _sum += 2; return false; } if (entry.ideal->getGeneratorCount() == 4 && _term[_term.getFirstMaxExponent()] == 2 && _term.getSizeOfSupport() == 4) { if (entry.negate) ++_sum; else --_sum; return false; } // At this point entry is not a base case, and it cannot be // simplified, so we have to split it into two. size_t bestPivotVar = _term.getFirstMaxExponent(); // Handle outer slice. auto_ptr outer = getNewIdeal(); outer->clearAndSetVarCount(varCount); outer->insertNonMultiples(bestPivotVar, 1, *entry.ideal); // outer is subtracted instead of added due to having added the // pivot to the ideal. newEntry.negate = !entry.negate; newEntry.extraSupport = entry.extraSupport + 1; newEntry.ideal = outer.get(); // Handle inner slice in-place on entry. entry.ideal->colonReminimize(bestPivotVar, 1); ++entry.extraSupport; outer.release(); return true; } } void HilbertBasecase::computeCoefficient(Ideal& originalIdeal) { ASSERT(_todo.empty()); try { // Here to clear _todo in case of an exception // _sum is updated as a side-effect of calling stepComputation. _sum = 0; // _term is reused for several different purposes in order to avoid // having to allocate and deallocate the underlying data structure. _term.reset(originalIdeal.getVarCount()); // entry is the Entry currently being processed. Additional entries // are added to _todo, though this only happens if there are two, // since otherwise entry can just be updated to the next value // directly and so we avoid the overhead of using _todo when we can. Entry entry; entry.negate = false; entry.extraSupport = 0; entry.ideal = &originalIdeal; // This should normally point to entry.ideal, but since we do not // have ownership of originalIdeal, it starts out pointing nowhere. auto_ptr entryIdealDeleter; while (true) { // Do an inner loop since there is no reason to add entry to _todo // and then immediately take it off again. Entry newEntry; while (stepComputation(entry, newEntry)) { auto_ptr newEntryIdealDeleter(newEntry.ideal); _todo.push_back(newEntry); newEntryIdealDeleter.release(); } if (_todo.empty()) break; if (entryIdealDeleter.get() != 0) freeIdeal(entryIdealDeleter); entry = _todo.back(); _todo.pop_back(); ASSERT(entryIdealDeleter.get() == 0); entryIdealDeleter.reset(entry.ideal); } ASSERT(_todo.empty()); // originalIdeal is in some state that depends on the particular // steps the algorithm took. This information should not escape // HilbertBasecase, and we ensure this by clearing originalIdeal. originalIdeal.clear(); } catch (...) { for (vector::iterator it = _todo.begin(); it != _todo.end(); ++it) delete it->ideal; _todo.clear(); throw; } } const mpz_class& HilbertBasecase::getLastCoefficient() { return _sum; } bool HilbertBasecase::canSimplify(size_t var, const Ideal& ideal, const Term& counts) { if (counts[var] == 0) return false; Ideal::const_iterator stop = ideal.end(); size_t varCount = counts.getVarCount(); for (size_t other = 0; other < varCount; ++other) { if (other == var || counts[other] == 0) continue; // todo: the answer is always no, I think, if var appears in less // generators than other does, since then there must be some // generator that other appears in that var does not. bool can = true; for (Ideal::const_iterator it = ideal.begin(); it != stop; ++it) { if ((*it)[var] == 0 && (*it)[other] > 0) { can = false; break; } } if (can) return true; } return false; } size_t HilbertBasecase::eliminate1Counts(Ideal& ideal, Term& counts, bool& negate) { size_t varCount = ideal.getVarCount(); size_t adj = 0; for (size_t var = 0; var < varCount; ++var) { if (counts[var] != 1) continue; Ideal::const_iterator it = ideal.getMultiple(var); ASSERT(it != ideal.end()); for (size_t other = 0; other < varCount; ++other) { if ((*it)[other] > 0) { ++adj; if (counts[other] == 1) counts[other] = 0; } else counts[other] = 0; } for (size_t other = 0; other < varCount; ++other) { if (counts[other] > 0) { if (!ideal.colonReminimize(other, 1)) { ideal.clear(); return 1; } } } it = ideal.getMultiple(var); if (it == ideal.end()) { ideal.clear(); return 1; } ideal.remove(it); negate = !negate; return adj; } for (size_t var = 0; var < varCount; ++var) { if (canSimplify(var, ideal, counts)) { if (!ideal.colonReminimize(var, 1)) ideal.clear(); return adj + 1; } } return adj; } auto_ptr HilbertBasecase::getNewIdeal() { if (_idealCache.empty()) return auto_ptr(new Ideal()); auto_ptr ideal(_idealCache.back()); _idealCache.pop_back(); return ideal; } void HilbertBasecase::freeIdeal(auto_ptr ideal) { ASSERT(ideal.get() != 0); ideal->clear(); exceptionSafePushBack(_idealCache, ideal); } frobby-0.9.5/src/HilbertBasecase.h000066400000000000000000000031561401527164200167770ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef HILBERT_BASECASE_GUARD #define HILBERT_BASECASE_GUARD class Ideal; #include "Term.h" #include "ElementDeleter.h" #include class HilbertBasecase { public: HilbertBasecase(); ~HilbertBasecase(); // Clears ideal. void computeCoefficient(Ideal& ideal); const mpz_class& getLastCoefficient(); private: struct Entry { bool negate; size_t extraSupport; Ideal* ideal; }; vector _todo; void clearTodo(); bool stepComputation(Entry& entry, Entry& newEntry); auto_ptr getNewIdeal(); void freeIdeal(auto_ptr ideal); vector _idealCache; ElementDeleter > _idealCacheDeleter; bool canSimplify(size_t var, const Ideal& ideal, const Term& counts); size_t eliminate1Counts(Ideal& ideal, Term& counts, bool& negate); mpz_class _sum; Term _term; size_t _stepsPerformed; }; #endif frobby-0.9.5/src/HilbertIndependenceConsumer.cpp000066400000000000000000000103401401527164200217120ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "HilbertIndependenceConsumer.h" #include "IndependenceSplitter.h" #include "HilbertStrategy.h" HilbertIndependenceConsumer:: HilbertIndependenceConsumer(HilbertStrategy* strategy): _rightConsumer(this), _strategy(strategy) { ASSERT(strategy != 0); clear(); } void HilbertIndependenceConsumer::reset(CoefTermConsumer* parent, IndependenceSplitter& splitter, size_t varCount) { ASSERT(parent != 0); _tmpTerm.reset(varCount); _parent = parent; splitter.getBigProjection(_leftProjection); splitter.getRestProjection(_rightProjection); _rightTerms.clearAndSetVarCount(_rightProjection.getRangeVarCount()); } void HilbertIndependenceConsumer::clear() { _parent = 0; _rightTerms.clear(); _rightCoefs.clear(); } void HilbertIndependenceConsumer::dispose() { ASSERT(_strategy != 0); _strategy->freeConsumer(auto_ptr(this)); } void HilbertIndependenceConsumer::run(TaskEngine&) { dispose(); } CoefTermConsumer* HilbertIndependenceConsumer::getLeftConsumer() { ASSERT(_parent != 0); return this; } void HilbertIndependenceConsumer::consumeRing(const VarNames& names) { } void HilbertIndependenceConsumer::beginConsuming() { } void HilbertIndependenceConsumer::doneConsuming() { } void HilbertIndependenceConsumer::consume(const mpz_class& coef, const Term& term) { ASSERT(_parent != 0); ASSERT(coef != 0); consumeLeft(coef, term); } CoefTermConsumer* HilbertIndependenceConsumer::getRightConsumer() { ASSERT(_parent != 0); return &_rightConsumer; } const Projection& HilbertIndependenceConsumer::getLeftProjection() const { ASSERT(_parent != 0); return _leftProjection; } const Projection& HilbertIndependenceConsumer::getRightProjection() const { ASSERT(_parent != 0); return _rightProjection; } HilbertIndependenceConsumer::RightConsumer:: RightConsumer(HilbertIndependenceConsumer* parent): _parent(parent) { } void HilbertIndependenceConsumer::RightConsumer::consumeRing (const VarNames& names) { } void HilbertIndependenceConsumer::RightConsumer::beginConsuming() { } void HilbertIndependenceConsumer::RightConsumer:: consume(const mpz_class& coef, const Term& term) { _parent->consumeRight(coef, term); } void HilbertIndependenceConsumer::RightConsumer::doneConsuming() { } void HilbertIndependenceConsumer::consumeLeft(const mpz_class& leftCoef, const Term& leftTerm) { ASSERT(_tmpTerm.getVarCount() == _leftProjection.getRangeVarCount() + _rightProjection.getRangeVarCount()); _leftProjection.inverseProject(_tmpTerm, leftTerm); size_t rightSize = _rightTerms.getGeneratorCount(); ASSERT(rightSize == _rightCoefs.size()); for (size_t right = 0; right < rightSize; ++right) { _rightProjection.inverseProject(_tmpTerm, *(_rightTerms.begin() + right)); ASSERT(leftCoef != 0); ASSERT(_rightCoefs[right] != 0); _tmpCoef = leftCoef * _rightCoefs[right]; ASSERT(_tmpCoef != 0); _parent->consume(_tmpCoef, _tmpTerm); } } void HilbertIndependenceConsumer::consumeRight(const mpz_class& coef, const Term& term) { ASSERT(term.getVarCount() == _rightProjection.getRangeVarCount()); ASSERT(_rightTerms.getVarCount() == term.getVarCount()); ASSERT(coef != 0); _rightTerms.insert(term); _rightCoefs.push_back(coef); } frobby-0.9.5/src/HilbertIndependenceConsumer.h000066400000000000000000000050571401527164200213700ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef HILBERT_INDEPENDENCE_CONSUMER #define HILBERT_INDEPENDENCE_CONSUMER #include "Projection.h" #include "Term.h" #include "Ideal.h" #include "CoefTermConsumer.h" #include "Task.h" #include class IndependenceSplitter; class HilbertStrategy; class HilbertIndependenceConsumer : public CoefTermConsumer, public Task { public: HilbertIndependenceConsumer(HilbertStrategy* strategy); void reset(CoefTermConsumer* parent, IndependenceSplitter& splitter, size_t varCount); void clear(); virtual void run(TaskEngine& engine); virtual void dispose(); CoefTermConsumer* getLeftConsumer(); virtual void consumeRing(const VarNames& names); // Does nothing. virtual void beginConsuming(); // Does nothing. virtual void consume(const mpz_class& coef, const Term& term); virtual void doneConsuming(); // Does nothing. CoefTermConsumer* getRightConsumer(); const Projection& getLeftProjection() const; const Projection& getRightProjection() const; private: class RightConsumer : public CoefTermConsumer { public: RightConsumer(HilbertIndependenceConsumer* parent); virtual void consumeRing(const VarNames& names); // Does nothing. virtual void beginConsuming(); // Does nothing. virtual void consume(const mpz_class& coef, const Term& term); virtual void doneConsuming(); // Does nothing. private: HilbertIndependenceConsumer* _parent; }; virtual void consumeLeft(const mpz_class& leftCoef, const Term& leftTerm); virtual void consumeRight(const mpz_class& coef, const Term& term); Term _tmpTerm; mpz_class _tmpCoef; CoefTermConsumer* _parent; Projection _leftProjection; Projection _rightProjection; Ideal _rightTerms; vector _rightCoefs; RightConsumer _rightConsumer; HilbertStrategy* _strategy; }; #endif frobby-0.9.5/src/HilbertSlice.cpp000066400000000000000000000064171401527164200166660ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "HilbertSlice.h" #include "CoefTermConsumer.h" #include "HilbertBasecase.h" #include "HilbertStrategy.h" HilbertSlice::HilbertSlice(HilbertStrategy& strategy): Slice(strategy), _consumer(0) { } HilbertSlice::HilbertSlice(HilbertStrategy& strategy, const Ideal& ideal, const Ideal& subtract, const Term& multiply, CoefTermConsumer* consumer): Slice(strategy, ideal, subtract, multiply), _consumer(consumer) { ASSERT(consumer != 0); } bool HilbertSlice::baseCase(bool simplified) { ASSERT(_consumer != 0); // Check that each variable appears in some minimal generator. if (getLcm().getSizeOfSupport() < _varCount) return true; if (!getLcm().isSquareFree()) return false; if (_varCount == 0) return true; // TODO: find a way other than static to use the same basecase // object every time, instead of allocating a new one. This provides // around a 4% speed-up, at least on Cygwin. We cannot use static // since the base case has an mpz_class, and static mpz_class // crashes on Mac OS X. HilbertBasecase basecase; basecase.computeCoefficient(_ideal); const mpz_class& coef = basecase.getLastCoefficient(); if (coef != 0) _consumer->consume(coef, getMultiply()); clearIdealAndSubtract(); return true; } Slice& HilbertSlice::operator=(const Slice& slice) { ASSERT(dynamic_cast(&slice) != 0); Slice::operator=(slice); _consumer = ((HilbertSlice&)slice)._consumer; return *this; } bool HilbertSlice::simplifyStep() { if (applyLowerBound()) return true; pruneSubtract(); return false; } void HilbertSlice::setToProjOf(const Slice& slice, const Projection& projection, CoefTermConsumer* consumer) { ASSERT(consumer != 0); Slice::setToProjOf(slice, projection); _consumer = consumer; } void HilbertSlice::swap(HilbertSlice& slice) { Slice::swap(slice); std::swap(_consumer, slice._consumer); } bool HilbertSlice::getLowerBound(Term& bound, size_t var) const { bool seenAny = false; Ideal::const_iterator stop = getIdeal().end(); for (Ideal::const_iterator it = getIdeal().begin(); it != stop; ++it) { if ((*it)[var] == 0) continue; if (seenAny) bound.gcd(bound, *it); else { bound = *it; seenAny = true; } } if (seenAny) { ASSERT(bound[var] >= 1); bound.decrement(); return true; } else { // In this case the content is empty. return false; } } frobby-0.9.5/src/HilbertSlice.h000066400000000000000000000036311401527164200163260ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef HILBERT_SLICE_GUARD #define HILBERT_SLICE_GUARD #include "Slice.h" #include "Term.h" #include "Ideal.h" class CoefTermConsumer; class HilbertStrategy; class HilbertSlice : public Slice { public: HilbertSlice(HilbertStrategy& strategy); HilbertSlice(HilbertStrategy& strategy, const Ideal& ideal, const Ideal& subtract, const Term& multiply, CoefTermConsumer* consumer); CoefTermConsumer* getConsumer() {return _consumer;} // *** Mutators virtual bool baseCase(bool simplified); virtual Slice& operator=(const Slice& slice); virtual bool simplifyStep(); void setToProjOf(const Slice& slice, const Projection& projection, CoefTermConsumer* consumer); // Efficiently swaps the values of *this and slice while avoiding // copies. void swap(HilbertSlice& slice); private: // Returns a lower bound on the content of the slice. Returns false // if a base case is detected. virtual bool getLowerBound(Term& bound, size_t var) const; CoefTermConsumer* _consumer; }; inline void swap(HilbertSlice& a, HilbertSlice& b) { a.swap(b); } #endif frobby-0.9.5/src/HilbertStrategy.cpp000066400000000000000000000113371401527164200174260ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "HilbertStrategy.h" #include "Term.h" #include "HilbertSlice.h" #include "Ideal.h" #include "CoefTermConsumer.h" #include "Projection.h" #include "IndependenceSplitter.h" #include "HilbertIndependenceConsumer.h" #include "ElementDeleter.h" HilbertStrategy::HilbertStrategy(CoefTermConsumer* consumer, const SplitStrategy* splitStrategy): SliceStrategyCommon(splitStrategy), _consumerCache(), _consumerCacheDeleter(_consumerCache), _consumer(consumer) { } void HilbertStrategy::run(const Ideal& ideal) { ASSERT(_consumer != 0); size_t varCount = ideal.getVarCount(); Ideal sliceIdeal(varCount); if (!ideal.contains(Term(varCount))) { _consumer->consume(1, Term(varCount)); if (ideal.getGeneratorCount() > 0) { Term allOnes(varCount); for (size_t var = 0; var < varCount; ++var) allOnes[var] = 1; sliceIdeal = ideal; sliceIdeal.product(allOnes); } } auto_ptr slice (new HilbertSlice(*this, sliceIdeal, Ideal(varCount), Term(varCount), _consumer)); simplify(*slice); _tasks.addTask(slice.release()); _tasks.runTasks(); _consumerCacheDeleter.deleteElements(); } bool HilbertStrategy::processSlice (TaskEngine& tasks, auto_ptr slice) { ASSERT(slice.get() != 0); ASSERT(debugIsValidSlice(slice.get())); if (slice->baseCase(getUseSimplification())) { freeSlice(slice); return true; } if (getUseIndependence() && _indepSplitter.analyze(*slice)) { independenceSplit(slice); } else { ASSERT(_split->isPivotSplit()); pivotSplit(auto_ptr(slice)); } return false; } auto_ptr HilbertStrategy::newHilbertSlice() { auto_ptr slice(newSlice()); ASSERT(debugIsValidSlice(slice.get())); return auto_ptr(static_cast(slice.release())); } auto_ptr HilbertStrategy::allocateSlice() { return auto_ptr(new HilbertSlice(*this)); } bool HilbertStrategy::debugIsValidSlice(Slice* slice) { ASSERT(slice != 0); ASSERT(dynamic_cast(slice) != 0); return true; } void HilbertStrategy::getPivot(Term& term, Slice& slice) { ASSERT(term.getVarCount() == slice.getVarCount()); _split->getPivot(term, slice); } void HilbertStrategy::freeConsumer(auto_ptr consumer) { ASSERT(consumer.get() != 0); ASSERT(std::find(_consumerCache.begin(), _consumerCache.end(), consumer.get()) == _consumerCache.end()); consumer->clear(); noThrowPushBack(_consumerCache, consumer); } void HilbertStrategy::independenceSplit(auto_ptr sliceParam) { ASSERT(sliceParam.get() != 0); ASSERT(debugIsValidSlice(sliceParam.get())); auto_ptr slice (static_cast(sliceParam.release())); // Construct split object. auto_ptr autoSplit = newConsumer(); autoSplit->reset(slice->getConsumer(), _indepSplitter, slice->getVarCount()); HilbertIndependenceConsumer* split = autoSplit.release(); _tasks.addTask(split); // Runs when we are done with all of this split. // Construct left slice. auto_ptr leftSlice(newHilbertSlice()); leftSlice->setToProjOf(*slice, split->getLeftProjection(), split->getLeftConsumer()); _tasks.addTask(leftSlice.release()); // Construct right slice. auto_ptr rightSlice(newHilbertSlice()); rightSlice->setToProjOf(*slice, split->getRightProjection(), split->getRightConsumer()); _tasks.addTask(rightSlice.release()); // Deal with slice. freeSlice(auto_ptr(slice)); } auto_ptr HilbertStrategy::newConsumer() { if (_consumerCache.empty()) return auto_ptr (new HilbertIndependenceConsumer(this)); auto_ptr consumer(_consumerCache.back()); _consumerCache.pop_back(); return consumer; } frobby-0.9.5/src/HilbertStrategy.h000066400000000000000000000036751401527164200171010ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef HILBERT_STRATEGY_GUARD #define HILBERT_STRATEGY_GUARD #include #include "IndependenceSplitter.h" #include "SliceStrategyCommon.h" #include "ElementDeleter.h" #include "HilbertIndependenceConsumer.h" class HilbertSlice; class Ideal; class CoefTermConsumer; class SliceEvent; class Slice; class SplitStrategy; class HilbertStrategy : public SliceStrategyCommon { public: HilbertStrategy(CoefTermConsumer* consumer, const SplitStrategy* splitStrategy); virtual void run(const Ideal& ideal); virtual bool processSlice(TaskEngine& tasks, auto_ptr slice); void freeConsumer(auto_ptr consumer); private: auto_ptr newConsumer(); auto_ptr newHilbertSlice(); virtual auto_ptr allocateSlice(); virtual bool debugIsValidSlice(Slice* slice); virtual void getPivot(Term& term, Slice& slice); IndependenceSplitter _indepSplitter; void independenceSplit(auto_ptr slice); vector _consumerCache; ElementDeleter > _consumerCacheDeleter; CoefTermConsumer* _consumer; bool _useIndependence; }; #endif frobby-0.9.5/src/IOFacade.cpp000066400000000000000000000217741401527164200157130ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IOFacade.h" #include "IOHandler.h" #include "fourti2.h" #include "BigIdeal.h" #include "fplllIO.h" #include "Scanner.h" #include "ElementDeleter.h" #include "error.h" #include "FrobbyStringStream.h" #include "BigTermRecorder.h" #include "CoefBigTermConsumer.h" #include "CoefBigTermRecorder.h" #include "SatBinomIdeal.h" #include "SatBinomRecorder.h" #include "InputConsumer.h" #include "SquareFreeIdeal.h" #include "RawSquareFreeIdeal.h" #include IOFacade::IOFacade(bool printActions): Facade(printActions) { } bool IOFacade::isValidMonomialIdealFormat(const string& format) { beginAction("Validating monomial ideal format name."); bool valid = true; try { createIOHandler(format).get(); } catch (const UnknownNameException&) { valid = false; } endAction(); return valid; } void IOFacade::readSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer) { beginAction("Reading saturated binomial ideal."); auto_ptr handler(in.createIOHandler()); ASSERT(handler.get() != 0); handler->readSatBinomIdeal(in, consumer); endAction(); } void IOFacade::readSatBinomIdeal(Scanner& in, SatBinomIdeal& ideal) { beginAction("Reading saturated binomial ideal."); auto_ptr handler(in.createIOHandler()); ASSERT(handler.get() != 0); ideal.clear(); SatBinomRecorder recorder(ideal); handler->readSatBinomIdeal(in, recorder); endAction(); } void IOFacade::readIdeal(Scanner& in, BigTermConsumer& consumer) { beginAction("Reading monomial ideal."); auto_ptr handler(in.createIOHandler()); ASSERT(handler.get() != 0); InputConsumer middleman; handler->readIdeal(in, middleman); // todo: find a way to generate the input as it comes in rather than // storing it and only then letting it go on. ASSERT(!middleman.empty()); consumer.consume(middleman.releaseBigIdeal()); ASSERT(middleman.empty()); endAction(); } void IOFacade::readIdeal(Scanner& in, BigIdeal& ideal) { beginAction("Reading monomial ideal."); auto_ptr handler(in.createIOHandler()); ASSERT(handler.get() != 0); InputConsumer recorder; handler->readIdeal(in, recorder); ASSERT(!recorder.empty()); ideal.swap(*(recorder.releaseBigIdeal())); ASSERT(recorder.empty()); endAction(); } /** Read a square free ideal from in and place it in the parameter ideal. */ void IOFacade::readSquareFreeIdeal(Scanner& in, SquareFreeIdeal& ideal) { beginAction("Reading square free ideal."); auto_ptr handler(in.createIOHandler()); ASSERT(handler.get() != 0); InputConsumer consumer; consumer.requireSquareFree(); handler->readIdeal(in, consumer); ASSERT(!consumer.empty()); ideal.swap(*consumer.releaseSquareFreeIdeal()); ASSERT(consumer.empty()); endAction(); } void IOFacade::readIdeals(Scanner& in, vector& ideals, VarNames& names) { beginAction("Reading monomial ideals."); // To make it clear what needs to be deleted in case of an exception. ASSERT(ideals.empty()); ElementDeleter > idealsDeleter(ideals); auto_ptr handler(in.createIOHandler()); //BigTermRecorder recorder; InputConsumer recorder; handler->readIdeals(in, recorder); names = recorder.getRing(); while (!recorder.empty()) exceptionSafePushBack(ideals, recorder.releaseBigIdeal()); idealsDeleter.release(); endAction(); } void IOFacade::writeIdeal(const BigIdeal& ideal, IOHandler* handler, FILE* out) { ASSERT(handler != 0); beginAction("Writing monomial ideal."); handler->createIdealWriter(out)->consume(ideal); endAction(); } void IOFacade::writeIdeals(const vector& ideals, const VarNames& names, IOHandler* handler, FILE* out) { ASSERT(handler != 0); beginAction("Writing monomial ideals."); { auto_ptr consumer = handler->createIdealWriter(out); consumer->beginConsumingList(); consumer->consumeRing(names); for (vector::const_iterator it = ideals.begin(); it != ideals.end(); ++it) consumer->consume(**it); consumer->doneConsumingList(); } endAction(); } void IOFacade::readPolynomial(Scanner& in, BigPolynomial& polynomial) { beginAction("Reading polynomial."); auto_ptr handler(in.createIOHandler()); ASSERT(handler.get() != 0); CoefBigTermRecorder recorder(&polynomial); handler->readPolynomial(in, recorder); endAction(); } void IOFacade::writePolynomial(const BigPolynomial& polynomial, IOHandler* handler, FILE* out) { ASSERT(handler != 0); ASSERT(out != 0); beginAction("Writing polynomial."); handler->createPolynomialWriter(out)->consume(polynomial); endAction(); } void IOFacade::writeTerm(const vector& term, const VarNames& names, IOHandler* handler, FILE* out) { beginAction("Writing monomial."); handler->writeTerm(term, names, out); endAction(); } bool IOFacade::readAlexanderDualInstance (Scanner& in, BigIdeal& ideal, vector& term) { beginAction("Reading Alexander dual input."); auto_ptr handler(in.createIOHandler()); ASSERT(handler.get() != 0); InputConsumer recorder; handler->readIdeal(in, recorder); // TODO: return value instead of this copy. ASSERT(!recorder.empty()); ideal = *(recorder.releaseBigIdeal()); ASSERT(recorder.empty()); bool pointSpecified = false; if (handler->hasMoreInput(in)) { handler->readTerm(in, ideal.getNames(), term); pointSpecified = true; } endAction(); return pointSpecified; } void IOFacade::readVector (Scanner& in, vector& v, size_t integerCount) { beginAction("Reading vector."); v.resize(integerCount); for (size_t i = 0; i < integerCount; ++i) in.readInteger(v[i]); endAction(); } void IOFacade:: readFrobeniusInstance(Scanner& in, vector& instance) { beginAction("Reading Frobenius instance."); ::readFrobeniusInstance(in, instance); endAction(); } void IOFacade::readFrobeniusInstanceWithGrobnerBasis (Scanner& in, BigIdeal& ideal, vector& instance) { beginAction("Reading frobenius instance with Grobner basis."); fourti2::readGrobnerBasis(in, ideal); ::readFrobeniusInstance(in, instance); if (instance.size() != ideal.getVarCount() + 1) { if (instance.empty()) reportSyntaxError (in, "The Grobner basis is not followed by a Frobenius instance."); else { // Note that we add one since the first entry of the rows encoding // the Grobner basis is chopped off. FrobbyStringStream errorMsg; errorMsg << "The Grobner basis has " << ideal.getVarCount() + 1 << " entries, and the Frobenius instance should then also have " << ideal.getVarCount() + 1 << " entries, but in fact it has " << instance.size() << " entries."; reportSyntaxError(in, errorMsg); } } endAction(); } void IOFacade:: writeFrobeniusInstance(FILE* out, vector& instance) { beginAction("Writing Frobenius instance."); for (size_t i = 0; i < instance.size(); ++i) { if (i > 0) fputc(' ', out); gmp_fprintf(out, "%Zd", instance[i].get_mpz_t()); } fputc('\n', out); endAction(); } bool IOFacade::isValidLatticeFormat(const string& format) { beginAction("Validating lattice format name."); bool valid = (format == "4ti2" || format == "fplll"); endAction(); return valid; } void IOFacade:: readLattice(Scanner& in, BigIdeal& ideal) { beginAction("Reading lattice basis."); if (in.getFormat() == "4ti2") fourti2::readLatticeBasis(in, ideal); else if (in.getFormat() == "fplll") fplll::readLatticeBasis(in, ideal); else { ASSERT(false); } endAction(); } void IOFacade:: writeLattice(FILE* out, const BigIdeal& ideal, const string& format) { beginAction("Writing lattice basis."); if (format == "4ti2") fourti2::writeLatticeBasis(out, ideal); else if (format == "fplll") fplll::writeLatticeBasis(out, ideal); else { ASSERT(false); } endAction(); } frobby-0.9.5/src/IOFacade.h000066400000000000000000000066061401527164200153550ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IO_FACADE_GUARD #define IO_FACADE_GUARD #include "Facade.h" #include class BigIdeal; class Scanner; class IOHandler; class BigPolynomial; class VarNames; class BigTermConsumer; class SatBinomIdeal; class SatBinomConsumer; class SquareFreeIdeal; /** A facade for input and output of mathematical objects. @TODO: Consider letting Scanner play the role of IOFacade. @ingroup Facade @ingroup IO */ class IOFacade : private Facade { public: IOFacade(bool printActions); bool isValidMonomialIdealFormat(const string& format); /** Read a saturated binomial ideal from in and feed it to consumer. */ void readSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer); /** Read a saturated binomial ideal from in and place it in the parameter ideal. */ void readSatBinomIdeal(Scanner& in, SatBinomIdeal& ideal); /** Read an ideal from in and feed it to consumer. */ void readIdeal(Scanner& in, BigTermConsumer& consumer); /** Read an ideal from in and place it in the parameter ideal. */ void readIdeal(Scanner& in, BigIdeal& ideal); /** Read a square free ideal from in and place it in the parameter ideal. */ void readSquareFreeIdeal(Scanner& in, SquareFreeIdeal& ideal); /** Insert the ideals that are read into the parameter ideals. The parameter ideals is required to be empty. Names contains the last ring read, even if there are no ideals. */ void readIdeals(Scanner& in, vector& ideals, VarNames& names); void writeIdeal(const BigIdeal& ideal, IOHandler* handler, FILE* out); void writeIdeals(const vector& ideals, const VarNames& names, IOHandler* handler, FILE* out); void readPolynomial(Scanner& in, BigPolynomial& polynomial); void writePolynomial(const BigPolynomial& polynomial, IOHandler* handler, FILE* out); void writeTerm(const vector& term, const VarNames& names, IOHandler* handler, FILE* out); void readFrobeniusInstance(Scanner& in, vector& instance); void readFrobeniusInstanceWithGrobnerBasis (Scanner& in, BigIdeal& ideal, vector& instance); void writeFrobeniusInstance(FILE* out, vector& instance); bool readAlexanderDualInstance (Scanner& in, BigIdeal& ideal, vector& term); void readVector(Scanner& in, vector& v, size_t integerCount); bool isValidLatticeFormat(const string& format); void readLattice(Scanner& in, BigIdeal& ideal); void writeLattice(FILE* out, const BigIdeal& ideal, const string& format); }; #endif frobby-0.9.5/src/IOHandler.cpp000066400000000000000000000160521401527164200161160ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IOHandler.h" #include "Scanner.h" #include "VarNames.h" #include "NameFactory.h" #include "FrobbyStringStream.h" #include "DataType.h" #include "BigTermConsumer.h" #include "CoefBigTermConsumer.h" #include "CountingIOHandler.h" #include "NewMonosIOHandler.h" #include "MonosIOHandler.h" #include "Macaulay2IOHandler.h" #include "Fourti2IOHandler.h" #include "NullIOHandler.h" #include "CoCoA4IOHandler.h" #include "SingularIOHandler.h" #include "error.h" #include "BigTermRecorder.h" #include "InputConsumer.h" IOHandler::~IOHandler() { } void IOHandler::readIdeal(Scanner& in, InputConsumer& consumer) { doReadIdeal(in, consumer); } void IOHandler::readIdeals(Scanner& in, InputConsumer& consumer) { doReadIdeals(in, consumer); } void IOHandler::readTerm (Scanner& in, const VarNames& names, vector& term) { InputConsumer consumer; consumer.consumeRing(names); consumer.beginIdeal(); doReadTerm(in, consumer); consumer.endIdeal(); ASSERT(!consumer.empty()); auto_ptr ideal = consumer.releaseBigIdeal(); ASSERT(consumer.empty()); ASSERT(ideal->getGeneratorCount() == 1); term = (*ideal)[0]; } void IOHandler::readPolynomial(Scanner& in, CoefBigTermConsumer& consumer) { doReadPolynomial(in, consumer); } void IOHandler::readSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer) { doReadSatBinomIdeal(in, consumer); } void IOHandler::writeTerm(const vector& term, const VarNames& names, FILE* out) { doWriteTerm(term, names, out); } bool IOHandler::hasMoreInput(Scanner& in) const { return doHasMoreInput(in); } const char* IOHandler::getName() const { return doGetName(); } const char* IOHandler::getDescription() const { return doGetDescription(); } auto_ptr IOHandler::createIdealWriter(FILE* out) { if (!supportsOutput(DataType::getMonomialIdealType())) { throwError ("The " + string(getName()) + " format does not support output of a monomial ideal."); } return auto_ptr(doCreateIdealWriter(out)); } auto_ptr IOHandler::createIdealListWriter(FILE* out) { if (!supportsOutput(DataType::getMonomialIdealListType())) { throwError ("The " + string(getName()) + " format does not support output of a list of monomial ideals."); } // This is the same kind of object as for a non-list ideal // writer. The only difference is that we checked for support for // output of lists above. return auto_ptr(doCreateIdealWriter(out)); } auto_ptr IOHandler::createPolynomialWriter(FILE* out) { if (!supportsOutput(DataType::getPolynomialType())) { throwError ("The " + string(getName()) + " format does not support output of a polynomial."); } return auto_ptr(doCreatePolynomialWriter(out)); } bool IOHandler::supportsInput(const DataType& type) const { return doSupportsInput(type); } bool IOHandler::supportsOutput(const DataType& type) const { return doSupportsOutput(type); } namespace { typedef NameFactory IOHandlerFactory; IOHandlerFactory getIOHandlerFactory() { IOHandlerFactory factory("format"); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); return factory; } } auto_ptr createIOHandler(const string& prefix) { return createWithPrefix(getIOHandlerFactory(), prefix); } auto_ptr createOHandler(const string& input, const string& output) { if (output == getFormatNameIndicatingToUseInputFormatAsOutputFormat()) return createIOHandler(input); else return createIOHandler(output); } void getIOHandlerNames(vector& names) { getIOHandlerFactory().getNamesWithPrefix("", names); } void readFrobeniusInstance(Scanner& in, vector& numbers) { numbers.clear(); string number; mpz_class n; while (!in.matchEOF()) { in.readInteger(n); if (n <= 1) { FrobbyStringStream errorMsg; errorMsg << "Read the number " << n << " while reading Frobenius instance. " << "Only integers strictly larger than 1 are valid."; reportSyntaxError(in, errorMsg); } numbers.push_back(n); } if (numbers.empty()) reportSyntaxError (in, "Read empty Frobenius instance, which is not allowed."); mpz_class gcd = numbers[0]; for (size_t i = 1; i < numbers.size(); ++i) mpz_gcd(gcd.get_mpz_t(), gcd.get_mpz_t(), numbers[i].get_mpz_t()); if (gcd != 1) { // Maybe not strictly speaking a syntax error, but that category // of errors still fits best. FrobbyStringStream errorMsg; errorMsg << "The numbers in the Frobenius instance are not " << "relatively prime. They are all divisible by " << gcd << '.'; reportSyntaxError(in, errorMsg); } } string autoDetectFormat(Scanner& in) { // We guess based on the initial non-whitespace character. We detect // more than the correct initial character to try to guess the // intended format in the face of mistakes. in.eatWhite(); switch (in.peek()) { case 'U': // correct case 'u': // incorrect return IO::CoCoA4IOHandler::staticGetName(); case 'r': // correct return IO::SingularIOHandler::staticGetName(); case '(': // correct case 'l': // incorrect case ')': // incorrect return IO::NewMonosIOHandler::staticGetName(); case '0': case '1': case '2': case '3': case '4': // correct case '5': case '6': case '7': case '8': case '9': // correct case '+': case '-': // incorrect return IO::Fourti2IOHandler::staticGetName(); case 'v': // correct return IO::MonosIOHandler::staticGetName(); case 'R': // correct default: // incorrect return IO::Macaulay2IOHandler::staticGetName(); } } string getFormatNameIndicatingToUseInputFormatAsOutputFormat() { return "input"; } string getFormatNameIndicatingToGuessTheInputFormat() { return "autodetect"; } frobby-0.9.5/src/IOHandler.h000066400000000000000000000106711401527164200155640ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IO_HANDLER_GUARD #define IO_HANDLER_GUARD #include class Term; class Scanner; class BigIdeal; class VarNames; class BigTermConsumer; class DataType; class CoefBigTermConsumer; class SatBinomConsumer; class InputConsumer; /** An IOHandler implements input and output for some format in such a way that client code does not need to know which format is being used. An IOHandler need have no mutable state of its own. If it needs to track state, that state is either passed through each method call, or the IOHandler returns an object that takes care of further IO and which itself has state. @ingroup IO */ class IOHandler { public: virtual ~IOHandler(); /** Read an ideal and feed it to the consumer. */ void readIdeal(Scanner& in, InputConsumer& consumer); /** Read a number of ideals and feed them to the consumer. */ void readIdeals(Scanner& in, InputConsumer& consumer); void readTerm (Scanner& in, const VarNames& names, vector& term); void readPolynomial(Scanner& in, CoefBigTermConsumer& consumer); void readSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer); void writeTerm (const vector& term, const VarNames& names, FILE* out); bool hasMoreInput(Scanner& in) const; const char* getName() const; const char* getDescription() const; auto_ptr createIdealWriter(FILE* out); auto_ptr createIdealListWriter(FILE* out); auto_ptr createPolynomialWriter(FILE* out); bool supportsInput(const DataType& type) const; bool supportsOutput(const DataType& type) const; protected: virtual BigTermConsumer* doCreateIdealWriter(FILE* out) = 0; virtual CoefBigTermConsumer* doCreatePolynomialWriter(FILE* out) = 0; private: virtual const char* doGetName() const = 0; virtual const char* doGetDescription() const = 0; virtual void doReadIdeal(Scanner& in, InputConsumer& consumer) = 0; virtual void doReadIdeals(Scanner& in, InputConsumer& consumer) = 0; virtual void doReadTerm(Scanner& in, InputConsumer& consumer) = 0; virtual void doReadPolynomial(Scanner& in, CoefBigTermConsumer& consumer) = 0; virtual void doReadSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer) = 0; virtual void doWriteTerm(const vector& term, const VarNames& names, FILE* out) = 0; virtual bool doHasMoreInput(Scanner& in) const = 0; virtual bool doSupportsInput(const DataType& type) const = 0; virtual bool doSupportsOutput(const DataType& type) const = 0; }; /** Returns an IOHandler for the format whose name has the given prefix. */ auto_ptr createIOHandler(const string& prefix); /** Returns an IOHandler for the output format. This can depend on the input format since the output name can specify to let the output format be the input format. */ auto_ptr createOHandler(const string& input, const string& output); /** Add the name of each fomat to names. */ void getIOHandlerNames(vector& names); void readFrobeniusInstance(Scanner& in, vector& numbers); /** Return the format of what in is reading based on the first non-whitespace character. */ string autoDetectFormat(Scanner& in); /** Using the returned string in place of an (input) format name indicates to guess the format based on what is being read. This was the shortest clear name that I could come up with. */ string getFormatNameIndicatingToGuessTheInputFormat(); /** Using the returned string in place of an (output) format name indicates to use the input format as the output format. This was the shortest clear name that I could come up with. */ string getFormatNameIndicatingToUseInputFormatAsOutputFormat(); #endif frobby-0.9.5/src/IOHandlerCommon.cpp000066400000000000000000000054501401527164200172670ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IOHandlerCommon.h" #include "VarNames.h" #include "BigTermConsumer.h" #include "BigTermRecorder.h" #include "error.h" #include "InputConsumer.h" IO::IOHandlerCommon::IOHandlerCommon(const char* formatName, const char* formatDescription): IOHandlerImpl(formatName, formatDescription) { } void IO::IOHandlerCommon::readRing(Scanner& in, VarNames& names) { doReadRing(in, names); } bool IO::IOHandlerCommon::peekRing(Scanner& in) { return doPeekRing(in); } void IO::IOHandlerCommon::readBareIdeal(Scanner& in, InputConsumer& consumer) { doReadBareIdeal(in, consumer); } void IO::IOHandlerCommon::readBarePolynomial(Scanner& in, const VarNames& names, CoefBigTermConsumer& consumer) { doReadBarePolynomial(in, names, consumer); } void IO::IOHandlerCommon::doReadIdeal(Scanner& in, InputConsumer& consumer) { VarNames names; readRing(in, names); consumer.consumeRing(names); readBareIdeal(in, consumer); } void IO::IOHandlerCommon::doReadIdeals(Scanner& in, InputConsumer& consumer) { VarNames names; readRing(in, names); consumer.consumeRing(names); if (!hasMoreInput(in)) return; readBareIdeal(in, consumer); while (hasMoreInput(in)) { if (peekRing(in)) { readRing(in, names); consumer.consumeRing(names); } readBareIdeal(in, consumer); } } void IO::IOHandlerCommon::doReadPolynomial(Scanner& in, CoefBigTermConsumer& consumer) { VarNames names; readRing(in, names); readBarePolynomial(in, names, consumer); } void IO::IOHandlerCommon::doReadBarePolynomial(Scanner& in, const VarNames& names, CoefBigTermConsumer& consumer) { INTERNAL_ERROR_UNIMPLEMENTED(); } void IO::IOHandlerCommon::doReadBareIdeal (Scanner& in, InputConsumer& consumer) { INTERNAL_ERROR_UNIMPLEMENTED(); } frobby-0.9.5/src/IOHandlerCommon.h000066400000000000000000000051671401527164200167410ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IO_HANDLER_COMMON_GUARD #define IO_HANDLER_COMMON_GUARD #include "IOHandlerImpl.h" class Scanner; class VarNames; class BigTermConsumer; class CoefBigTermConsumer; class InputConsumer; namespace IO { /** This class contains further functionality that makes it more convenient to derive from than IOHandlerImpl in most but not all cases. */ class IOHandlerCommon : public IOHandlerImpl { public: IOHandlerCommon(const char* formatName, const char* formatDescription); /** Reads a ring, i.e. the names of the variables. */ void readRing(Scanner& in, VarNames& names); /** Returns true if what follows in the input is a ring, assuming there are no syntax errors. */ bool peekRing(Scanner& in); /** Reads an ideal without a ring preceding it. */ void readBareIdeal(Scanner& in, InputConsumer& consumer); /** Reads a polynomial without a ring preceding it. */ void readBarePolynomial(Scanner& in, const VarNames& names, CoefBigTermConsumer& consumer); private: // The following methods are implemented in terms of the new methods. virtual void doReadIdeal(Scanner& in, InputConsumer& consumer); virtual void doReadIdeals(Scanner& in, InputConsumer& consumer); virtual void doReadPolynomial(Scanner& in, CoefBigTermConsumer& consumer); // Override these methods except for those that do input // of un-supported type. virtual void doReadRing(Scanner& in, VarNames& names) = 0; virtual bool doPeekRing(Scanner& in) = 0; virtual void doReadBareIdeal(Scanner& in, InputConsumer& consumer); virtual void doReadBarePolynomial(Scanner& in, const VarNames& names, CoefBigTermConsumer& consumer); }; } #endif frobby-0.9.5/src/IOHandlerImpl.cpp000066400000000000000000000173371401527164200167470ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IOHandlerImpl.h" #include "Scanner.h" #include "BigIdeal.h" #include "TermTranslator.h" #include "Term.h" #include "TermConsumer.h" #include "VarNames.h" #include "CoefTermConsumer.h" #include "Polynomial.h" #include "BigPolynomial.h" #include "FrobbyStringStream.h" #include "BigTermConsumer.h" #include "DataType.h" #include "error.h" #include "InputConsumer.h" #include IO::IOHandlerImpl::IOHandlerImpl(const char* formatName, const char* formatDescription): _formatName(formatName), _formatDescription(formatDescription) { } BigTermConsumer* IO::IOHandlerImpl::doCreateIdealWriter(FILE* out) { INTERNAL_ERROR_UNIMPLEMENTED(); } CoefBigTermConsumer* IO::IOHandlerImpl::doCreatePolynomialWriter(FILE* out) { INTERNAL_ERROR_UNIMPLEMENTED(); } bool IO::IOHandlerImpl::doSupportsInput(const DataType& type) const { return std::find(_supportedInputs.begin(), _supportedInputs.end(), &type) != _supportedInputs.end(); } bool IO::IOHandlerImpl::doSupportsOutput(const DataType& type) const { return std::find(_supportedOutputs.begin(), _supportedOutputs.end(), &type) != _supportedOutputs.end(); } void IO::IOHandlerImpl::registerInput(const DataType& type) { ASSERT(!type.isNull()); ASSERT(!supportsInput(type)); _supportedInputs.push_back(&type); } void IO::IOHandlerImpl::registerOutput(const DataType& type) { ASSERT(!type.isNull()); ASSERT(!supportsOutput(type)); _supportedOutputs.push_back(&type); } void IO::IOHandlerImpl::doReadTerm(Scanner& in, InputConsumer& consumer) { INTERNAL_ERROR_UNIMPLEMENTED(); } void IO::IOHandlerImpl::doReadIdeal(Scanner& in, InputConsumer& consumer) { INTERNAL_ERROR_UNIMPLEMENTED(); } void IO::IOHandlerImpl::doReadIdeals(Scanner& in, InputConsumer& consumer) { INTERNAL_ERROR_UNIMPLEMENTED(); } void IO::IOHandlerImpl::doReadPolynomial(Scanner& in, CoefBigTermConsumer& consumer) { INTERNAL_ERROR_UNIMPLEMENTED(); } void IO::IOHandlerImpl::doReadSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer) { INTERNAL_ERROR_UNIMPLEMENTED(); } bool IO::IOHandlerImpl::doHasMoreInput(Scanner& in) const { return !in.matchEOF(); } const char* IO::IOHandlerImpl::doGetName() const { return _formatName; } const char* IO::IOHandlerImpl::doGetDescription() const { return _formatDescription; } void IO::readTermProduct(Scanner& in, const VarNames& names, vector& term) { term.resize(names.getVarCount()); for (size_t var = 0; var < term.size(); ++var) term[var] = 0; if (in.match('1')) return; do { readVarPower(term, names, in); } while (in.match('*')); } void IO::writeCoefTermProduct(const mpz_class& coef, const Term& term, const TermTranslator& translator, bool hidePlus, FILE* out) { if (coef >= 0 && !hidePlus) fputc('+', out); if (term.isIdentity()) { gmp_fprintf(out, "%Zd", coef.get_mpz_t()); return; } if (coef == -1) fputc('-', out); else if (coef != 1) gmp_fprintf(out, "%Zd*", coef.get_mpz_t()); writeTermProduct(term, translator, out); } void IO::writeCoefTermProduct(const mpz_class& coef, const vector& term, const VarNames& names, bool hidePlus, FILE* out) { if (coef >= 0 && !hidePlus) fputc('+', out); bool isIdentity = true; for (size_t var = 0; var < term.size(); ++var) if (term[var] != 0) isIdentity = false; if (isIdentity) { gmp_fprintf(out, "%Zd", coef.get_mpz_t()); return; } if (coef == -1) fputc('-', out); else if (coef != 1) gmp_fprintf(out, "%Zd*", coef.get_mpz_t()); writeTermProduct(term, names, out); } void IO::writeTermProduct(const Term& term, const TermTranslator& translator, FILE* out) { bool seenNonZero = false; size_t varCount = term.getVarCount(); for (size_t var = 0; var < varCount; ++var) { const char* exp = translator.getVarExponentString(var, term[var]); if (exp == 0) continue; if (seenNonZero) putc('*', out); else seenNonZero = true; fputs(exp, out); } if (!seenNonZero) fputc('1', out); } void IO::writeTermProduct(const vector& term, const VarNames& names, FILE* out) { bool seenNonZero = false; size_t varCount = term.size(); for (size_t var = 0; var < varCount; ++var) { if (term[var] == 0) continue; if (seenNonZero) fputc('*', out); else seenNonZero = true; fputs(names.getName(var).c_str(), out); if ((term[var]) != 1) { fputc('^', out); mpz_out_str(out, 10, term[var].get_mpz_t()); } } if (!seenNonZero) fputc('1', out); } void IO::readTermProduct(BigIdeal& ideal, Scanner& in) { ideal.newLastTerm(); if (in.match('1')) return; do { readVarPower(ideal.getLastTermRef(), ideal.getNames(), in); } while (in.match('*')); } void IO::readCoefTerm(mpz_class& coef, vector& term, const VarNames& names, bool firstTerm, Scanner& in) { term.resize(names.getVarCount()); for (size_t var = 0; var < term.size(); ++var) term[var] = 0; bool positive = true; if (!firstTerm && in.match('+')) positive = !in.match('-'); else if (in.match('-')) positive = false; else if (!firstTerm) { in.expect('+'); return; } if (in.match('+') || in.match('-')) reportSyntaxError(in, "Too many adjacent signs."); if (in.peekIdentifier()) { coef = 1; readVarPower(term, names, in); } else in.readInteger(coef); while (in.match('*')) readVarPower(term, names, in); if (!positive) coef = -coef; } void IO::readCoefTerm(BigPolynomial& polynomial, bool firstTerm, Scanner& in) { polynomial.newLastTerm(); mpz_class& coef = polynomial.getLastCoef(); vector& term = polynomial.getLastTerm(); readCoefTerm(coef, term, polynomial.getNames(), firstTerm, in); } void IO::readVarPower(vector& term, const VarNames& names, Scanner& in) { size_t var = in.readVariable(names); if (term[var] != 0) { const string& name = names.getName(var); reportSyntaxError(in, "The variable " + name + " appears more than once in monomial."); } if (in.match('^')) { in.readInteger(term[var]); if (term[var] <= 0) { FrobbyStringStream errorMsg; errorMsg << "Expected positive integer as exponent but got " << term[var] << "."; reportSyntaxError(in, errorMsg); } } else term[var] = 1; } frobby-0.9.5/src/IOHandlerImpl.h000066400000000000000000000100631401527164200164010ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IO_HANDLER_IMPL_GUARD #define IO_HANDLER_IMPL_GUARD #include "IOHandler.h" #include class Term; class Scanner; class BigIdeal; class VarNames; class BigTermConsumer; class DataType; class CoefBigTermConsumer; class SatBinomConsumer; class TermTranslator; class BigPolynomial; namespace IO { /** This class contains a minimum level of functionality that makes it more convenient to derive from than IOHandler. */ class IOHandlerImpl : public IOHandler { protected: IOHandlerImpl(const char* formatName, const char* formatDescription); /** Specify that input of the argument type is supported. */ void registerInput(const DataType& type); /** Specify that output of the argument type is supported. */ void registerOutput(const DataType& type); private: // The following methods have implementations that merely report // an internal error. Make sure to override those you register // support for. virtual BigTermConsumer* doCreateIdealWriter(FILE* out) = 0; virtual CoefBigTermConsumer* doCreatePolynomialWriter(FILE* out); virtual void doReadTerm(Scanner& in, InputConsumer& term); virtual void doReadIdeal(Scanner& in, InputConsumer& consumer); virtual void doReadIdeals(Scanner& in, InputConsumer& consumer); virtual void doReadPolynomial(Scanner& in, CoefBigTermConsumer& consumer); virtual void doReadSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer); // The following methods are implemented with the suggested // behavior virtual const char* doGetName() const; virtual const char* doGetDescription() const; virtual bool doSupportsInput(const DataType& type) const; virtual bool doSupportsOutput(const DataType& type) const; virtual bool doHasMoreInput(Scanner& in) const; vector _supportedInputs; vector _supportedOutputs; const char* _formatName; const char* _formatDescription; }; void writeCoefTermProduct(const mpz_class& coef, const Term& term, const TermTranslator& translator, bool hidePlus, FILE* out); void writeCoefTermProduct(const mpz_class& coef, const vector& term, const VarNames& names, bool hidePlus, FILE* out); void writeTermProduct(const Term& term, const TermTranslator& translator, FILE* out); void writeTermProduct(const vector& term, const VarNames& names, FILE* out); void readTermProduct(Scanner& in, const VarNames& names, vector& term); void readTermProduct(BigIdeal& ideal, Scanner& in); void readCoefTerm(BigPolynomial& polynomial, bool firstTerm, Scanner& in); void readCoefTerm(mpz_class& coef, vector& term, const VarNames& names, bool firstTerm, Scanner& in); void readVarPower(vector& term, const VarNames& names, Scanner& in); } #endif frobby-0.9.5/src/IOParameters.cpp000066400000000000000000000125221401527164200166420ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IOParameters.h" #include "IOFacade.h" #include "Macaulay2IOHandler.h" #include "Scanner.h" #include "error.h" #include "FrobbyStringStream.h" #include "DataType.h" IOParameters::IOParameters(const DataType& input, const DataType& output): _inputType(input), _outputType(output), _inputFormat(0), _outputFormat(0) { string inputFormats; string outputFormats; string defaultOutput; if (!_inputType.isNull()) defaultOutput = getFormatNameIndicatingToUseInputFormatAsOutputFormat(); else { defaultOutput = IO::Macaulay2IOHandler::staticGetName(); ASSERT(createIOHandler(defaultOutput)->supportsOutput(_outputType)); } vector names; getIOHandlerNames(names); for (vector::const_iterator name = names.begin(); name != names.end(); ++name) { auto_ptr handler = createIOHandler(*name); ASSERT(handler.get() != 0); if (handler->supportsInput(_inputType)) { inputFormats += ' '; inputFormats += handler->getName(); } if (handler->supportsOutput(_outputType)) { outputFormats += ' '; outputFormats += handler->getName(); } } if (!_inputType.isNull()) { string desc = "The format used to read the input. " "This action supports the formats:\n " + inputFormats + ".\n" "The format \"" + getFormatNameIndicatingToGuessTheInputFormat() + "\" instructs Frobby to guess the format.\n" "Type 'frobby help io' for more information on input formats."; _inputFormat.reset (new StringParameter ("iformat", desc.c_str(), getFormatNameIndicatingToGuessTheInputFormat())); addParameter(_inputFormat.get()); } if (!output.isNull()) { string desc = "The format used to write the output. " "This action supports the formats:\n " + outputFormats + ".\n"; if (!_inputType.isNull()) { desc += "The format \"" + getFormatNameIndicatingToUseInputFormatAsOutputFormat() + "\" instructs Frobby to use the input format.\n"; } desc += "Type 'frobby help io' for more information on output formats."; _outputFormat.reset (new StringParameter("oformat", desc.c_str(), defaultOutput)); addParameter(_outputFormat.get()); } } void IOParameters::setOutputFormat(const string& format) { ASSERT(!_inputType.isNull()); ASSERT(_outputFormat.get() != 0); *_outputFormat = format; } void IOParameters::setInputFormat(const string& format) { ASSERT(!_outputType.isNull()); *_inputFormat = format; } const string& IOParameters::getInputFormat() const { ASSERT(!_inputType.isNull()); ASSERT(_inputFormat.get() != 0); return *_inputFormat; } const string& IOParameters::getOutputFormat() const { ASSERT(!_outputType.isNull()); ASSERT(_outputFormat.get() != 0); if (!_inputType.isNull() && _outputFormat->getValue() == getFormatNameIndicatingToUseInputFormatAsOutputFormat()) { ASSERT(_inputFormat.get() != 0); return *_inputFormat; } return *_outputFormat; } auto_ptr IOParameters::createInputHandler() const { auto_ptr handler(createIOHandler(getInputFormat())); ASSERT(handler.get() != 0); return handler; } auto_ptr IOParameters::createOutputHandler() const { auto_ptr handler(createIOHandler(getOutputFormat())); ASSERT(handler.get() != 0); return handler; } void IOParameters::autoDetectInputFormat(Scanner& in) { ASSERT(!_inputType.isNull()); ASSERT(_inputFormat.get() != 0); if (_inputFormat->getValue() == getFormatNameIndicatingToGuessTheInputFormat()) *_inputFormat = autoDetectFormat(in); if (in.getFormat() == getFormatNameIndicatingToGuessTheInputFormat()) in.setFormat(*_inputFormat); } void IOParameters::validateFormats() const { IOFacade facade(false); if (!_inputType.isNull()) { auto_ptr handler(createIOHandler(getInputFormat())); if (!handler->supportsInput(_inputType)) { FrobbyStringStream errorMsg; errorMsg << "The " << handler->getName() << " format does not support input of " << _inputType.getName() << '.'; reportError(errorMsg); } } if (!_outputType.isNull()) { auto_ptr handler(createIOHandler(getOutputFormat())); /* if (!handler->supportsOutput(_outputType)) { FrobbyStringStream errorMsg; errorMsg << "The " << handler->getName() << " format does not support output of " << _outputType.getName() << '.'; reportError(errorMsg); } */ } } frobby-0.9.5/src/IOParameters.h000066400000000000000000000035761401527164200163200ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IO_PARAMETERS_GUARD #define IO_PARAMETERS_GUARD #include "ParameterGroup.h" #include "StringParameter.h" #include "IOHandler.h" class Scanner; class DataType; class IOParameters : public ParameterGroup { public: IOParameters(const DataType& input, const DataType& output); void setOutputFormat(const string& format); void setInputFormat(const string& format); const string& getInputFormat() const; const string& getOutputFormat() const; auto_ptr createInputHandler() const; auto_ptr createOutputHandler() const; /** If using the input format, this must be called before validating the ideals, since the auto detect format is not a valid format other than as a place holder for the auto detected format. If the format on in is auto detect, it will (also) be set. */ void autoDetectInputFormat(Scanner& in); // Exits with an error message if the input or output format is not // known. void validateFormats() const; private: const DataType& _inputType; const DataType& _outputType; auto_ptr _inputFormat; auto_ptr _outputFormat; }; #endif frobby-0.9.5/src/Ideal.cpp000066400000000000000000000504661401527164200153360ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Ideal.h" #include "TermPredicate.h" #include "Term.h" #include "Minimizer.h" #include #include #include Ideal::~Ideal() { } Ideal::Ideal(size_t varCount): _varCount(varCount), _allocator(varCount) { } Ideal::Ideal(const Term& term): _varCount(term.getVarCount()), _allocator(term.getVarCount()) { insert(term); } Ideal::Ideal(const Ideal& ideal): _varCount(ideal.getVarCount()), _allocator(ideal.getVarCount()) { insert(ideal); } bool Ideal::isIncomparable(const Exponent* term) const { const_iterator stop = _terms.end(); for (const_iterator it = _terms.begin(); it != stop; ++it) if (Term::dominates(term, *it, _varCount) || Term::divides(term, *it, _varCount)) return false; return true; } bool Ideal::contains(const Exponent* term) const { const_iterator stop = _terms.end(); for (const_iterator it = _terms.begin(); it != stop; ++it) if (Term::dominates(term, *it, _varCount)) return true; return false; } bool Ideal::containsIdentity() const { const_iterator stop = _terms.end(); for (const_iterator it = _terms.begin(); it != stop; ++it) if (Term::isIdentity(*it, _varCount)) return true; return false; } bool Ideal::strictlyContains(const Exponent* term) const { const_iterator stop = _terms.end(); for (const_iterator it = _terms.begin(); it != stop; ++it) if (Term::strictlyDivides(*it, term, _varCount)) return true; return false; } bool Ideal::isMinimallyGenerated() const { Minimizer minimizer(_varCount); return minimizer.isMinimallyGenerated(_terms.begin(), _terms.end()); } bool Ideal::isZeroIdeal() const { return _terms.empty(); } bool Ideal::isIrreducible() const { const_iterator stop = _terms.end(); for (const_iterator it = _terms.begin(); it != stop; ++it) if (Term::getSizeOfSupport(*it, _varCount) != 1) return false; return true; } bool Ideal::isSquareFree() const { const_iterator stop = _terms.end(); for (const_iterator it = _terms.begin(); it != stop; ++it) if (!Term::isSquareFree(*it, _varCount)) return false; return true; } bool Ideal::isStronglyGeneric() { for (size_t var = 0; var < _varCount; ++var) { singleDegreeSort(var); Exponent lastExponent = 0; const_iterator stop = _terms.end(); for (const_iterator it = _terms.begin(); it != stop; ++it) { if (lastExponent != 0 && lastExponent == (*it)[var]) return false; lastExponent = (*it)[var]; } } return true; } bool Ideal::isWeaklyGeneric() const { Term lcm(getVarCount()); const_iterator stop = _terms.end(); for (const_iterator itA = _terms.begin(); itA != stop; ++itA) { for (const_iterator itB = itA + 1; itB != stop; ++itB) { if (!Term::sharesNonZeroExponent(*itA, *itB, _varCount)) continue; lcm.lcm(*itA, *itB); for (const_iterator itC = _terms.begin(); itC != stop; ++itC) if (Term::strictlyDivides(*itC, lcm, _varCount)) goto foundStrictDivisor; return false; foundStrictDivisor:; } } return true; } bool Ideal::disjointSupport() const { for (size_t var = 0; var < getVarCount(); ++var) { bool seen = false; for (const_iterator it = _terms.begin(); it != _terms.end(); ++it) { if ((*it)[var] > 0) { if (seen) return false; else seen = true; } } } return true; } void Ideal::getLcm(Exponent* lcm) const { Term::setToIdentity(lcm, _varCount); const_iterator stop = _terms.end(); for (const_iterator it = _terms.begin(); it != stop; ++it) Term::lcm(lcm, lcm, *it, _varCount); } void Ideal::getGcd(Exponent* gcd) const { if (_terms.empty()) { Term::setToIdentity(gcd, _varCount); return; } copy(_terms[0], _terms[0] + _varCount, gcd); const_iterator stop = _terms.end(); const_iterator it = _terms.begin(); for (++it; it != stop; ++it) Term::gcd(gcd, gcd, *it, _varCount); } void Ideal::getGcdAtExponent(Exponent* gcd, size_t var, Exponent exp) { bool first = true; const_iterator stop = _terms.end(); const_iterator it = _terms.begin(); for (; it != stop; ++it) { Exponent* m = *it; if (m[var] == exp) { if (first) { first = false; copy(m, m + _varCount, gcd); } else Term::gcd(gcd, gcd, m, _varCount); } } if (first) Term::setToIdentity(gcd, _varCount); } void Ideal::getGcdOfMultiplesOf(Exponent* gcd, const Exponent* divisor) { bool first = true; const_iterator stop = _terms.end(); const_iterator it = _terms.begin(); for (; it != stop; ++it) { Exponent* m = *it; if (Term::divides(divisor, m, _varCount)) { if (first) { first = false; copy(m, m + _varCount, gcd); } else Term::gcd(gcd, gcd, m, _varCount); } } if (first) Term::setToIdentity(gcd, _varCount); } void Ideal::getLeastExponents(Exponent* least) const { Term::setToIdentity(least, _varCount); const_iterator stop = _terms.end(); for (const_iterator it = _terms.begin(); it != stop; ++it) for (size_t var = 0; var < _varCount; ++var) if (least[var] == 0 || ((*it)[var] < least[var] && (*it)[var] > 0)) least[var] = (*it)[var]; } void Ideal::getSupportCounts(Exponent* counts) const { Term::setToIdentity(counts, _varCount); const_iterator stop = _terms.end(); for (const_iterator it = begin(); it != stop; ++it) for (size_t var = 0; var < _varCount; ++var) if ((*it)[var] > 0) counts[var] += 1; } size_t Ideal:: getTypicalExponent(size_t& typicalVar, Exponent& typicalExponent) { size_t maxCount = 0; typicalVar = 0; typicalExponent = 0; for (size_t var = 0; var < _varCount; ++var) { singleDegreeSort(var); Exponent lastExponent = 0; size_t count = 0; const_iterator stop = _terms.end(); for (const_iterator it = _terms.begin(); it != stop; ++it) { Exponent exponent = (*it)[var]; if (exponent == 0) continue; if (lastExponent == exponent) ++count; else count = 1; if (count > maxCount) { maxCount = count; typicalVar = var; typicalExponent = exponent; } lastExponent = exponent; } } return maxCount; } size_t Ideal::getMostNonGenericExponent (size_t& mostNGVar, Exponent& mostNGExponent) { Term lcm(getVarCount()); size_t maxCount = 0; mostNGVar = 0; mostNGExponent = 0; for (size_t var = 0; var < _varCount; ++var) { singleDegreeSort(var); const_iterator blockBegin = _terms.begin(); const_iterator stop = _terms.end(); while (blockBegin != stop) { Exponent blockExponent = (*blockBegin)[var]; const_iterator blockEnd = blockBegin; do { ++blockEnd; } while (blockEnd != stop && (*blockEnd)[var] == blockExponent); // At this point the range [blockBegin, blockEnd) contains every // generator that raises var to blockExponent. Each pair of // these is potentially non-generic, and we count the number // that actually are non-generic. size_t span = blockEnd - blockBegin; if (blockExponent == 0 || (span * (span + 1)) / 2 <= maxCount) { blockBegin = blockEnd; continue; } size_t nonGenericCount = 0; for (; blockBegin != blockEnd; ++blockBegin) { const_iterator it = blockBegin; for (++it; it != blockEnd; ++it) { lcm.lcm(*blockBegin, *it); if (!strictlyContains(lcm)) { // The pair (*blockBegin, *it) is non-generic. ++nonGenericCount; } } } if (nonGenericCount > maxCount) { maxCount = nonGenericCount; mostNGVar = var; mostNGExponent = blockExponent; } } } return maxCount; } size_t Ideal::getTypicalNonGenericExponent (size_t& typicalVar, Exponent& typicalExponent) { Term lcm(getVarCount()); size_t maxCount = 0; typicalVar = 0; typicalExponent = 0; for (size_t var = 0; var < _varCount; ++var) { singleDegreeSort(var); const_iterator blockBegin = _terms.begin(); const_iterator stop = _terms.end(); while (blockBegin != stop) { Exponent blockExponent = (*blockBegin)[var]; const_iterator blockEnd = blockBegin; do { ++blockEnd; } while (blockEnd != stop && (*blockEnd)[var] == blockExponent); // At this point the range [blockBegin, blockEnd) contains every // generator that raises var to blockExponent. Each pair of // these is potentially non-generic, and we count the number // that actually are non-generic. size_t count = blockEnd - blockBegin; if (blockExponent == 0 || count <= maxCount) { blockBegin = blockEnd; continue; } for (; blockBegin != blockEnd; ++blockBegin) { const_iterator it = blockBegin; for (++it; it != blockEnd; ++it) { lcm.lcm(*blockBegin, *it); if (!strictlyContains(lcm)) { // The pair (*blockBegin, *it) is non-generic. ASSERT(maxCount < count); maxCount = count; typicalVar = var; typicalExponent = blockExponent; blockBegin = blockEnd; goto blockDone; } } } blockDone:; } } return maxCount; } bool Ideal::getNonGenericExponent (size_t& ngVar, Exponent& ngExponent) { Term lcm(getVarCount()); ngVar = 0; ngExponent = 0; for (size_t var = 0; var < _varCount; ++var) { singleDegreeSort(var); const_iterator blockBegin = _terms.begin(); const_iterator stop = _terms.end(); while (blockBegin != stop) { Exponent blockExponent = (*blockBegin)[var]; const_iterator blockEnd = blockBegin; do { ++blockEnd; } while (blockEnd != stop && (*blockEnd)[var] == blockExponent); // At this point the range [blockBegin, blockEnd) contains every // generator that raises var to blockExponent. Each pair of // these is potentially non-generic. if (blockExponent == 0) { blockBegin = blockEnd; continue; } for (; blockBegin != blockEnd; ++blockBegin) { const_iterator it = blockBegin; for (++it; it != blockEnd; ++it) { lcm.lcm(*blockBegin, *it); if (!strictlyContains(lcm)) { // The pair (*blockBegin, *it) is non-generic. ngVar = var; ngExponent = blockExponent; return true; } } } } } return false; } bool Ideal::operator==(const Ideal& ideal) const { if (getVarCount() != ideal.getVarCount()) return false; if (getGeneratorCount() != ideal.getGeneratorCount()) return false; const_iterator stop = _terms.end(); const_iterator it = begin(); const_iterator it2 = ideal.begin(); for (; it != stop; ++it, ++it2) if (!equals(*it, *it2, getVarCount())) return false; return true; } void Ideal::print(FILE* file) const { ostringstream out; print(out); fputs(out.str().c_str(), file); } void Ideal::print(ostream& out) const { out << "//------------ Ideal:\n"; for (const_iterator it = _terms.begin(); it != _terms.end(); ++it) { Term::print(out, *it, _varCount); out << '\n'; } out << "------------\\\\\n"; } void Ideal::insert(const Exponent* exponents) { Exponent* term = _allocator.allocate(); IF_DEBUG(if (_varCount > 0)) // avoid copy asserting on null pointer copy(exponents, exponents + _varCount, term); // push_back could throw bad_alloc, but the allocator is already // keeping track of the allocated memory, so there is not a memory // leak. _terms.push_back(term); } void Ideal::insert(const Ideal& ideal) { _terms.reserve(_terms.size() + ideal._terms.size()); Ideal::const_iterator stop = ideal.end(); for (Ideal::const_iterator it = ideal.begin(); it != stop; ++it) insert(*it); } void Ideal::insert(size_t var, Exponent e) { Exponent* term = _allocator.allocate(); fill_n(term, _varCount, 0); term[var] = e; // push_back could throw bad_alloc, but the allocator is already // keeping track of the allocated memory, so there is not a memory // leak. _terms.push_back(term); } void Ideal::insertReminimize(const Exponent* term) { ASSERT(isMinimallyGenerated()); if (contains(term)) return; removeMultiples(term); insert(term); ASSERT(isMinimallyGenerated()); } void Ideal::insertReminimize(size_t var, Exponent e) { ASSERT(isMinimallyGenerated()); removeMultiples(var, e); insert(var, e); ASSERT(isMinimallyGenerated()); } void Ideal::minimize() { if (_terms.empty()) return; Minimizer minimizer(_varCount); _terms.erase(minimizer.minimize(_terms.begin(), _terms.end()), _terms.end()); ASSERT(isMinimallyGenerated()); } void Ideal::sortReverseLex() { std::sort(_terms.begin(), _terms.end(), ReverseLexComparator(_varCount)); } void Ideal::sortLex() { std::sort(_terms.begin(), _terms.end(), LexComparator(_varCount)); } void Ideal::singleDegreeSort(size_t var) { ASSERT(var < _varCount); std::sort(_terms.begin(), _terms.end(), SingleDegreeComparator(var, _varCount)); } void Ideal::product(const Exponent* by) { iterator stop = _terms.end(); for (iterator it = _terms.begin(); it != stop; ++it) Term::product(*it, *it, by, _varCount); } void Ideal::colon(const Exponent* by) { iterator stop = _terms.end(); for (iterator it = _terms.begin(); it != stop; ++it) Term::colon(*it, *it, by, _varCount); } void Ideal::colon(size_t var, Exponent e) { iterator stop = _terms.end(); for (iterator it = _terms.begin(); it != stop; ++it) { Exponent& ite = (*it)[var]; if (ite != 0) { if (ite > e) ite -= e; else ite = 0; } } } bool Ideal::colonReminimize(const Exponent* by) { ASSERT(isMinimallyGenerated()); Minimizer minimizer(_varCount); pair pair = minimizer.colonReminimize(_terms.begin(), _terms.end(), by); _terms.erase(pair.first, _terms.end()); ASSERT(isMinimallyGenerated()); return pair.second; } bool Ideal::colonReminimize(size_t var, Exponent e) { ASSERT(isMinimallyGenerated()); Minimizer minimizer(_varCount); pair pair = minimizer.colonReminimize(_terms.begin(), _terms.end(), var, e); _terms.erase(pair.first, _terms.end()); ASSERT(isMinimallyGenerated()); return pair.second; } void Ideal::remove(const_iterator it) { ASSERT(begin() <= it); ASSERT(it < end()); std::swap(const_cast(*it), *(_terms.end() - 1)); _terms.pop_back(); } void Ideal::removeMultiples(const Exponent* term) { iterator newEnd = _terms.begin(); iterator stop = _terms.end(); for (iterator it = _terms.begin(); it != stop; ++it) { if (!Term::divides(term, *it, _varCount)) { *newEnd = *it; ++newEnd; } } _terms.erase(newEnd, stop); } void Ideal::removeMultiples(size_t var, Exponent e) { iterator newEnd = _terms.begin(); iterator stop = _terms.end(); for (iterator it = _terms.begin(); it != stop; ++it) { if ((*it)[var] < e) { *newEnd = *it; ++newEnd; } } _terms.erase(newEnd, stop); } void Ideal::insertNonMultiples(const Exponent* term, const Ideal& ideal) { const_iterator stop = ideal.end(); for (const_iterator it = ideal.begin(); it != stop; ++it) if (!Term::divides(term, *it, _varCount)) insert(*it); } void Ideal::insertNonMultiples(size_t var, Exponent e, const Ideal& ideal) { const_iterator stop = ideal.end(); for (const_iterator it = ideal.begin(); it != stop; ++it) if ((*it)[var] < e) insert(*it); } void Ideal::removeStrictMultiples(const Exponent* term) { iterator newEnd = _terms.begin(); iterator stop = _terms.end(); for (iterator it = _terms.begin(); it != stop; ++it) { if (!Term::strictlyDivides(term, *it, _varCount)) { *newEnd = *it; ++newEnd; } } _terms.erase(newEnd, stop); } void Ideal::removeDuplicates() { std::sort(_terms.begin(), _terms.end(), LexComparator(_varCount)); iterator newEnd = unique(_terms.begin(), _terms.end(), EqualsPredicate(_varCount)); _terms.erase(newEnd, _terms.end()); } void Ideal::clear() { _terms.clear(); _allocator.reset(_varCount); } void Ideal::clearAndSetVarCount(size_t varCount) { _varCount = varCount; _terms.clear(); _allocator.reset(varCount); } void Ideal::mapExponentsToZeroNoMinimize(const Term& zeroExponents) { iterator stop = _terms.end(); for (iterator it = _terms.begin(); it != stop; ++it) for (size_t var = 0; var < _varCount; ++var) if ((*it)[var] == zeroExponents[var]) (*it)[var] = 0; } void Ideal::takeRadicalNoMinimize() { iterator stop = _terms.end(); for (iterator it = _terms.begin(); it != stop; ++it) for (size_t var = 0; var < _varCount; ++var) if ((*it)[var] > 1) (*it)[var] = 1; } Ideal::const_iterator Ideal::getMultiple(size_t var) const { const_iterator stop = _terms.end(); for (const_iterator it = _terms.begin(); it != stop; ++it) if ((*it)[var] > 0) return it; return stop; } Ideal& Ideal::operator=(const Ideal& ideal) { clearAndSetVarCount(ideal.getVarCount()); insert(ideal); return *this; } void Ideal::swap(Ideal& ideal) { std::swap(_varCount, ideal._varCount); _terms.swap(ideal._terms); _allocator.swap(ideal._allocator); } // ---------------------*************** const int ExponentsPerChunk = 1024; const int MinTermsPerChunk = 2; class ChunkPool { public: Exponent* allocate() { if (_chunks.empty()) return new Exponent[ExponentsPerChunk]; Exponent* chunk = _chunks.back(); _chunks.pop_back(); return chunk; } void deallocate(Exponent* chunk) { // deallocate can be called from a destructor, so no exceptions // can be allowed to escape from it. try { _chunks.push_back(chunk); } catch (const bad_alloc&) { delete[] chunk; } } void clear() { for (size_t i = 0; i < _chunks.size(); ++i) delete[] _chunks[i]; _chunks.clear(); } ~ChunkPool() { clear(); } private: vector _chunks; } globalChunkPool; Ideal::ExponentAllocator::ExponentAllocator(size_t varCount): _varCount(varCount), _chunkIterator(0), _chunkEnd(0) { if (_varCount == 0) _varCount = 1; } Ideal::ExponentAllocator::~ExponentAllocator() { reset(0); } Exponent* Ideal::ExponentAllocator::allocate() { if (_chunkIterator + _varCount > _chunkEnd) { if (useSingleChunking()) { Exponent* term = new Exponent[_varCount]; try { _chunks.push_back(term); } catch (...) { delete[] term; throw; } return term; } _chunkIterator = globalChunkPool.allocate(); _chunkEnd = _chunkIterator + ExponentsPerChunk; try { _chunks.push_back(_chunkIterator); } catch (...) { globalChunkPool.deallocate(_chunkIterator); throw; } } Exponent* term = _chunkIterator; _chunkIterator += _varCount; ASSERT(_chunkIterator <= _chunkEnd); return term; } void Ideal::ExponentAllocator::reset(size_t newVarCount) { _varCount = newVarCount; if (useSingleChunking()) { for (size_t i = 0; i < _chunks.size(); ++i) delete[] _chunks[i]; _chunks.clear(); } else { _chunkIterator = 0; _chunkEnd = 0; for (size_t i = 0; i < _chunks.size(); ++i) globalChunkPool.deallocate(_chunks[i]); _chunks.clear(); } } void Ideal::ExponentAllocator::swap(ExponentAllocator& allocator) { std::swap(_varCount, allocator._varCount); std::swap(_chunkIterator, allocator._chunkIterator); std::swap(_chunkEnd, allocator._chunkEnd); _chunks.swap(allocator._chunks); } bool Ideal::ExponentAllocator::useSingleChunking() const { return _varCount > ExponentsPerChunk / MinTermsPerChunk; } void Ideal::clearStaticCache() { globalChunkPool.clear(); } frobby-0.9.5/src/Ideal.h000066400000000000000000000270461401527164200150010ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IDEAL_GUARD #define IDEAL_GUARD class Term; #include #include #include /// Represents a monomial ideal with int exponents. class Ideal { typedef vector Cont; public: /** Initialize this object to the zero ideal in varCount variables. */ Ideal(size_t varCount = 0); /** Initialize this object to the ideal generated by term. */ explicit Ideal(const Term& term); /** Initialize this object to be a copy of ideal. */ Ideal(const Ideal& ideal); ~Ideal(); // *** Accessors typedef Cont::const_iterator const_iterator; typedef Cont::iterator iterator; typedef Cont::const_reverse_iterator const_reverse_iterator; typedef Cont::reverse_iterator reverse_iterator; const_iterator begin() const {return _terms.begin();} const_iterator end() const {return _terms.end();} const Exponent* operator[](size_t index) const {return _terms[index];} iterator begin() {return _terms.begin();} iterator end() {return _terms.end();} Exponent*& operator[](size_t index) {return _terms[index];} size_t getVarCount() const {return _varCount;} size_t getGeneratorCount() const {return _terms.size();} bool isIncomparable(const Exponent* term) const; // Returns true if any generator divides term. bool contains(const Exponent* term) const; // Returns true if the identity is one of the generators. bool containsIdentity() const; // Returns true if some minimal generator strictly divides term. bool strictlyContains(const Exponent* term) const; // Returns true if no generator divides another. bool isMinimallyGenerated() const; // Returns true if there are no generators. bool isZeroIdeal() const; // Returns true if all generators are pure powers. This only // corresponds to the mathematical definition of an irreducible // polynomial ideal if the ideal is minimally generated. bool isIrreducible() const; // Returns true if all generators are square free. bool isSquareFree() const; // Returns true if no non-zero exponent of the same variable appears // in two distinct generators. This only corresponds to the // mathematical definition of strongly generic if the ideal is // minimally generated. This method is not const because it permutes // the generators. bool isStronglyGeneric(); // Returns true if for every pair of distinct generators a and b // with a[i]=b[i]>0 there is some third generator that strictly // divides lcm(a,b). This only corresponds to the mathematical // definition of weak genericity if the ideal is minimally // generated. bool isWeaklyGeneric() const; /** Returns true if all pairs of generators have disjoint support. I.e. if each var divides at most one generator. */ bool disjointSupport() const; /** Sets lcm to the least common multiple of all generators. If there are no generators then we define the lcm as the identity. */ void getLcm(Exponent* lcm) const; /** Sets gcd to the greatest common divisor of all generators. If there are no generators then we define the gcd as the identity. */ void getGcd(Exponent* gcd) const; /** Sets gcd to the greatest common divisor of those generators that raise the variable var to the power exp. If there are no such generators then we define the gcd as the identity. */ void getGcdAtExponent(Exponent* gcd, size_t var, Exponent exp); /** Sets gcd to the greatest common divisor of those generators that are divisible by divisor. If there are no such generators then we define the gcd as the identity. */ void getGcdOfMultiplesOf(Exponent* gcd, const Exponent* divisor); // least[var] will be the smallest non-zero exponent of var that // appears among the generators. void getLeastExponents(Exponent* least) const; /** counts[var] will be the number of generators divisible by var. @todo Make counts a vector. */ void getSupportCounts(Exponent* counts) const; /** Sets var and exp such that var^exp is the typical non-zero exponent. The typical exponent is the exponent of a specific variable that occurs most often among the generators. In case of ties some deterministic choice is made. If there are no non-zero generators then var=exp=0 is chosen and the return value is zero. The returned value is the number of times the typical non-zero exponent occurs. This method is not const since it may re-arrange the generators for efficiency. */ size_t getTypicalExponent(size_t& var, Exponent& exp); /** Sets var and exp such that var^exp is the most non-generic degree. A unordered pair of generators a and b is non-generic if a and b raise some var to the same non-zero exponent and lcm(a,b) is not strictly divisible by any generator. The most non-generic degree is the exponent that occurs most often as the shared degree for non-generic pairs. In case of ties some deterministic choice is made. The return value is the number of non-generic pairs that concern the most non-generic degree. If there are no non-generic pairs (i.e. the ideal is generic) then the return value is zero and var=exp=0. This method is not const since it may re-arrange the generators for efficiency. */ size_t getMostNonGenericExponent(size_t& var, Exponent& exp); /** Sets var and exp such that var^exp is the typical non-generic degree. A unordered pair of generators a and b is non-generic if a and b raise some var to the same non-zero exponent and lcm(a,b) is not strictly divisible by any generator. A degree var^exp is non-generic if it occurs as the shared degree for some non-generic pair. The typical non-generic degree is the non-generic degree that occurs most often among all generators. So it does not matter how non-generic the degree is, just that it is non-generic at all. The return value is the number of generators that raise var to exp. If there are no non-generic pairs (i.e. the ideal is generic) then the return value is zero and var=exp=0. This method is not const since it may re-arrange the generators for efficiency. */ size_t getTypicalNonGenericExponent(size_t& var, Exponent& exp); /** Sets var and exp such that var^exp is some non-generic degree. Returns true if there are any non-generic degrees and otherwise returns false. This method is not const since it may re-arrange the generators for efficiency. */ bool getNonGenericExponent(size_t& var, Exponent& exp); // returns the first generator that var divides or end() if no such // generator exists. const_iterator getMultiple(size_t var) const; /** Rereturns true if *this equals ideal. This comparison takes non-minimal generators and the order of the generators into account. */ bool operator==(const Ideal& ideal) const; void print(FILE* file) const; void print(ostream& out) const; // *** Mutators // Insert generators into the ideal. void insert(const Exponent* term); void insert(const Ideal& ideal); void insert(size_t var, Exponent e); // This is equivalent to calling insert and then minimize. void insertReminimize(const Exponent* term); void insertReminimize(size_t var, Exponent e); // Remove non-redundant generators. void minimize(); // Sorts the generators in the specified order void sortReverseLex(); // reverse lexicographic order void sortLex(); // lexicographic order from left // Sort the generators in ascending order according to the exponent of var. void singleDegreeSort(size_t var); // Replace each generator g by g * term. void product(const Exponent* term); // Replace each generator g by g : by. The second overload has by // equal to var raised to e. void colon(const Exponent* by); void colon(size_t var, Exponent e); // Equivalent to calling colon(by) and then minimize. The second // overload has by equal to var raised to e. Returns true if the support // of any generator was changed. bool colonReminimize(const Exponent* colon); bool colonReminimize(size_t var, Exponent e); // Swaps it and the last element, and then removes the last element, // which is the element originally pointed to by it. void remove(const_iterator it); // Removes those generators that are multiples of term. The second // overload has term equal to var raised to e. void removeMultiples(const Exponent* term); void removeMultiples(size_t var, Exponent e); // Insert those generators of ideal that are not multiples of // term. The second overload has term equal to var raised to e. void insertNonMultiples(const Exponent* term, const Ideal& ideal); void insertNonMultiples(size_t var, Exponent e, const Ideal& ideal); // Removes those generators that are strict multiples of term. void removeStrictMultiples(const Exponent* term); // Remove duplicate generators. void removeDuplicates(); // Removes all generators, and optionally sets the number of variables. void clear(); void clearAndSetVarCount(size_t varCount); /** Replaces the exponents from zeroExponents with zero and does not remove any non-minimal generators this may produce. If a generator raises var to precisely the power t, and zeroExponents also raises var to precisely the power t, then that generator is changed to instead raise var to the power zero. */ void mapExponentsToZeroNoMinimize(const Term& zeroExponents); /** Replaces all generators with their support and does not remove any non-minimal generators this may produce. */ void takeRadicalNoMinimize(); Ideal& operator=(const Ideal& ideal); void swap(Ideal& ideal); /** Removes those generators m such that pred(m) evaluates to true. Returns true if any generators were removed. */ template bool removeIf(Predicate pred); /** Ideal caches memory allocated with new internally and reuses it to avoid calling new all the time. Call this method to release the cache. */ static void clearStaticCache(); protected: class ExponentAllocator { public: ExponentAllocator(size_t varCount); ~ExponentAllocator(); Exponent* allocate(); void reset(size_t newVarCount); void swap(ExponentAllocator& allocator); private: ExponentAllocator(const ExponentAllocator&); ExponentAllocator& operator=(const ExponentAllocator&); bool useSingleChunking() const; size_t _varCount; Exponent* _chunk; Exponent* _chunkIterator; Exponent* _chunkEnd; vector _chunks; }; size_t _varCount; vector _terms; ExponentAllocator _allocator; }; template inline bool Ideal::removeIf(Predicate pred) { iterator newEnd = std::remove_if(_terms.begin(), _terms.end(), pred); if (newEnd != _terms.end()) { _terms.erase(newEnd, _terms.end()); return true; } else return false; } inline ostream& operator<<(ostream& out, const Ideal& ideal) { ideal.print(out); return out; } #endif frobby-0.9.5/src/IdealComparator.cpp000066400000000000000000000045231401527164200173570ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IdealComparator.h" #include "BigIdeal.h" #include "Ideal.h" #include "TermTranslator.h" #include "TermPredicate.h" #include "Term.h" TranslatedIdealComparator:: TranslatedIdealComparator(TermTranslator& translator): _translator(translator) { } namespace IdealComparatorHelpers { template bool idealLessThanImpl(const MyIdeal& a, const MyIdeal& b, const MyTermCompare& predicate) { ASSERT(a.getVarCount() == b.getVarCount()); for (size_t term = 0; term < a.getGeneratorCount(); ++term) { if (term == b.getGeneratorCount()) return true; if (predicate(a[term], b[term])) return true; if (predicate(b[term], a[term])) return false; } ASSERT(a.getGeneratorCount() <= b.getGeneratorCount()); return false; } bool idealLessThan(const BigIdeal& a, const BigIdeal& b) { if (a.getNames() < b.getNames()) return true; if (b.getNames() < a.getNames()) return false; return idealLessThanImpl(a, b, BigIdeal::bigTermCompare); } bool idealLessThan(const Ideal& a, const Ideal& b) { ASSERT(a.getVarCount() == b.getVarCount()); return idealLessThanImpl(a, b, ReverseLexComparator(a.getVarCount())); } bool idealLessThan(const Ideal& a, const Ideal& b, TermTranslator& translator) { ASSERT(a.getVarCount() == translator.getVarCount()); ASSERT(b.getVarCount() == translator.getVarCount()); return idealLessThanImpl(a, b, TranslatedReverseLexComparator(translator)); } } frobby-0.9.5/src/IdealComparator.h000066400000000000000000000070351401527164200170250ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IDEAL_COMPARATOR_GUARD #define IDEAL_COMPARATOR_GUARD class Ideal; class BigIdeal; class TermTranslator; // These three classes are in the same file because they use // templates in a way so that they all have the same implementation. // They all define the same order given the natural bijection between // the three different objects, and it is true of all of them that the // order of the generators matter, and that non-minimal generators // also matter. So to get an actual canonical order on the ideals as // mathematical objects, each ideal must be in a canonical form already. // Defines a total order on Ideal. The ideals compared must have the same // number of variables, though the number can vary between individual // calls to operator(). class IdealComparator { public: bool operator()(const Ideal& a, const Ideal& b) const; bool operator()(const Ideal* a, const Ideal* b) const; }; // Defines a total order on Ideal based on the translated values. Each // ideal must have the same number of variables as the translator. class TranslatedIdealComparator { public: TranslatedIdealComparator(TermTranslator& translator); bool operator()(const Ideal& a, const Ideal& b) const; bool operator()(const Ideal* a, const Ideal* b) const; private: TermTranslator& _translator; }; // Defines a total order on BigIdeal. class BigIdealComparator { public: bool operator()(const BigIdeal& a, const BigIdeal& b) const; bool operator()(const BigIdeal* a, const BigIdeal* b) const; }; namespace IdealComparatorHelpers { bool idealLessThan(const BigIdeal& a, const BigIdeal& b); bool idealLessThan(const Ideal& a, const Ideal& b); bool idealLessThan(const Ideal& a, const Ideal& b, TermTranslator& translator); } inline bool IdealComparator::operator()(const Ideal& a, const Ideal& b) const { return IdealComparatorHelpers::idealLessThan(a, b); } inline bool IdealComparator::operator()(const Ideal* a, const Ideal* b) const { return IdealComparatorHelpers::idealLessThan(*a, *b); } inline bool TranslatedIdealComparator::operator()(const Ideal& a, const Ideal& b) const { return IdealComparatorHelpers::idealLessThan(a, b, _translator); } inline bool TranslatedIdealComparator::operator()(const Ideal* a, const Ideal* b) const { return IdealComparatorHelpers::idealLessThan(*a, *b, _translator); } inline bool BigIdealComparator::operator()(const BigIdeal& a, const BigIdeal& b) const { return IdealComparatorHelpers::idealLessThan(a, b); } inline bool BigIdealComparator::operator()(const BigIdeal* a, const BigIdeal* b) const { return IdealComparatorHelpers::idealLessThan(*a, *b); } #endif frobby-0.9.5/src/IdealConsolidator.cpp000066400000000000000000000046561401527164200177170ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IdealConsolidator.h" #include "Term.h" #include "TermTranslator.h" IdealConsolidator::IdealConsolidator(auto_ptr consumer): _consumer(consumer), _inList(false), _inIdeal(false) { } void IdealConsolidator::consumeRing(const VarNames& names) { ASSERT(!_inIdeal); _consumer->consumeRing(names); _names = names; _ideal.clearAndSetNames(names); _tmp.resize(names.getVarCount()); } void IdealConsolidator::beginConsumingList() { ASSERT(!_inList); ASSERT(!_inIdeal); _consumer->beginConsumingList(); _inList = true; } void IdealConsolidator::beginConsuming() { ASSERT(!_inIdeal); _inIdeal = true; } void IdealConsolidator::consume(const Term& term) { ASSERT(term.getVarCount() == _tmp.size()); for (size_t var = 0; var < term.getVarCount(); ++var) _tmp[var] = term[var]; consume(_tmp); } void IdealConsolidator::consume (const Term& term, const TermTranslator& translator) { ASSERT(term.getVarCount() == _tmp.size()); for (size_t var = 0; var < term.getVarCount(); ++var) _tmp[var] = translator.getExponent(var, term); consume(_tmp); } void IdealConsolidator::consume(const vector& term) { ASSERT(term.size() == _ideal.getVarCount()); // TODO: Add a method to BigIdeal that does this in one step. _ideal.newLastTerm(); _ideal.getLastTermRef() = term; } void IdealConsolidator::doneConsuming() { ASSERT(_inIdeal); _inIdeal = false; _consumer->consume(_ideal); _ideal.clear(); } void IdealConsolidator::doneConsumingList() { ASSERT(_inList); _inList = false; _consumer->doneConsumingList(); } void IdealConsolidator::consume(const BigIdeal& ideal) { _consumer->consume(ideal); } frobby-0.9.5/src/IdealConsolidator.h000066400000000000000000000034101401527164200173470ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IDEAL_CONSOLIDATOR_GUARD #define IDEAL_CONSOLIDATOR_GUARD #include "BigTermConsumer.h" #include "VarNames.h" #include "BigIdeal.h" #include // This consumer forwards everything it consumes to the wrapped // consumer. When it consumes an ideal one term at a time, it will // store the ideal and pass it along as one big ideal. class IdealConsolidator : public BigTermConsumer { public: IdealConsolidator(auto_ptr consumer); virtual void beginConsumingList(); virtual void consumeRing(const VarNames& names); virtual void beginConsuming(); virtual void consume(const Term& term); virtual void consume(const Term& term, const TermTranslator& translator); virtual void consume(const vector& term); virtual void doneConsuming(); virtual void consume(const BigIdeal& ideal); virtual void doneConsumingList(); private: const auto_ptr _consumer; BigIdeal _ideal; VarNames _names; bool _inList; bool _inIdeal; vector _tmp; }; #endif frobby-0.9.5/src/IdealFacade.cpp000066400000000000000000000170541401527164200164160ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IdealFacade.h" #include "BigIdeal.h" #include "Ideal.h" #include "TermTranslator.h" #include "IOHandler.h" #include "IOFacade.h" #include "Macaulay2IOHandler.h" #include "CanonicalCoefTermConsumer.h" #include "error.h" #include "FrobbyStringStream.h" #include "SizeMaxIndepSetAlg.h" #include "HilbertBasecase.h" #include "PivotEulerAlg.h" IdealFacade::IdealFacade(bool printActions): Facade(printActions) { } void IdealFacade::deform(BigIdeal& bigIdeal) { beginAction("Applying generic deformation to ideal."); bigIdeal.deform(); // Reduce range of exponents Ideal ideal(bigIdeal.getVarCount()); TermTranslator translator(bigIdeal, ideal, false); bigIdeal.clear(); bigIdeal.insert(ideal); endAction(); } void IdealFacade::takeRadical(BigIdeal& bigIdeal) { beginAction("Taking radical of ideal."); bigIdeal.takeRadical(); Ideal ideal(bigIdeal.getVarCount()); TermTranslator translator(bigIdeal, ideal, false); bigIdeal.clear(); bigIdeal.insert(ideal, translator); endAction(); } void IdealFacade::swap01(BigIdeal& bigIdeal) { beginAction("Swapping 0 and 1 exponents."); const size_t genCount = bigIdeal.getGeneratorCount(); const size_t varCount = bigIdeal.getVarCount(); for (size_t gen = 0; gen < genCount; ++gen) { for (size_t var = 0; var < varCount; ++var) { if (bigIdeal[gen][var] == 1) bigIdeal[gen][var] = 0; else if (bigIdeal[gen][var] == 0) bigIdeal[gen][var] = 1; } } endAction(); } mpz_class IdealFacade::computeDimension(const BigIdeal& bigIdeal, bool codimension, bool squareFreeAndMinimal) { beginAction("Computing dimension of ideal."); size_t varCount = bigIdeal.getVarCount(); size_t genCount = bigIdeal.getGeneratorCount(); Ideal radical(varCount); Term tmp(varCount); for (size_t term = 0; term < genCount; ++term) { for (size_t var = 0; var < varCount; ++var) { ASSERT(!squareFreeAndMinimal || bigIdeal[term][var] <= 1); if (bigIdeal[term][var] == 0) tmp[var] = 0; else tmp[var] = 1; } radical.insert(tmp); } ASSERT(!squareFreeAndMinimal || radical.isMinimallyGenerated()); if (!squareFreeAndMinimal) radical.minimize(); SizeMaxIndepSetAlg alg; alg.run(radical); mpz_class result = alg.getMaxIndepSetSize(); endAction(); if (codimension) return varCount - result; else return result; } void IdealFacade::takeProducts(const vector& ideals, BigIdeal& ideal) { beginAction("Taking products."); size_t idealCount = ideals.size(); for (size_t i = 0; i < idealCount; ++i) { ASSERT(ideals[i] != 0); if (!(ideal.getNames() == ideals[i]->getNames())) { FrobbyStringStream errorMsg; errorMsg << "Taking products of ideals in rings with different variable lists.\n"; string list; ideal.getNames().toString(list); errorMsg << "One ring has variables\n " << list << ",\n"; ideals[i]->getNames().toString(list); errorMsg << "while another has variables\n " << list << ".\nContact the Frobby developers if you need this functionality."; reportError(errorMsg); } size_t genCount = ideals[i]->getGeneratorCount(); size_t varCount = ideals[i]->getVarCount(); ideal.newLastTerm(); for (size_t t = 0; t < genCount; ++t) for (size_t var = 0; var < varCount; ++var) ideal.getLastTermExponentRef(var) += (*ideals[i])[t][var]; } endAction(); } void IdealFacade::sortAllAndMinimize(BigIdeal& bigIdeal) { beginAction("Minimizing ideal."); Ideal ideal(bigIdeal.getVarCount()); TermTranslator translator(bigIdeal, ideal, false); bigIdeal.clear(); ideal.minimize(); ideal.sortReverseLex(); bigIdeal.insert(ideal, translator); endAction(); } void IdealFacade::projectVar(BigIdeal& bigIdeal, size_t var) { beginAction("Projecting a variable away."); ASSERT(var < bigIdeal.getVarCount()); bigIdeal.projectVar(var); endAction(); } #include void IdealFacade::trimVariables(const vector& ideals, VarNames& names) { beginAction("Removing unused variables."); vector used(names.getVarCount()); for (size_t i = 0; i < ideals.size(); ++i) { BigIdeal& ideal = *(ideals[i]); ASSERT(ideal.getNames() == names); for (size_t gen = 0; gen < ideal.getGeneratorCount(); ++gen) for (size_t var = 0; var < ideal.getVarCount(); ++var) if (ideal[gen][var] != 0) used[var] = true; } // Go from high to low to avoid removing variable i interfering with // the offset of variable j, as it would when i < j. for (size_t var = names.getVarCount(); var > 0;) { --var; if (!used[var]) { names.projectVar(var); for (size_t i = 0; i < ideals.size(); ++i) ideals[i]->projectVar(var); } } endAction(); } void IdealFacade::addPurePowers(BigIdeal& bigIdeal) { beginAction("Adding pure powers."); vector lcm; bigIdeal.getLcm(lcm); vector purePower(bigIdeal.getVarCount()); for (size_t var = 0; var < bigIdeal.getVarCount(); ++var) { purePower[var] = lcm[var] + 1; if (!bigIdeal.contains(purePower)) bigIdeal.insert(purePower); ASSERT(bigIdeal.contains(purePower)); purePower[var] = 0; } endAction(); } void IdealFacade::sortGeneratorsUnique(BigIdeal& ideal) { beginAction("Sorting generators and removing duplicates."); ideal.sortGeneratorsUnique(); endAction(); } void IdealFacade::sortGenerators(BigIdeal& ideal) { beginAction("Sorting generators."); ideal.sortGenerators(); endAction(); } void IdealFacade::sortVariables(BigIdeal& ideal) { beginAction("Sorting variables."); ideal.sortVariables(); endAction(); } void IdealFacade::printAnalysis(FILE* out, BigIdeal& bigIdeal) { beginAction("Computing and printing analysis."); Ideal ideal(bigIdeal.getVarCount()); TermTranslator translator(bigIdeal, ideal, false); fprintf(stdout, "generators: %lu\n", (unsigned long)ideal.getGeneratorCount()); fprintf(stdout, "variables: %lu\n", (unsigned long)ideal.getVarCount()); size_t sizeBeforeMinimize = ideal.getGeneratorCount(); ideal.minimize(); fprintf(stdout, "minimally generated: %s\n", ideal.getGeneratorCount() == sizeBeforeMinimize ? "yes" : "no"); fprintf(out, "strongly generic: %s\n", ideal.isStronglyGeneric() ? "yes" : "no"); fprintf(out, "weakly generic: %s\n", ideal.isWeaklyGeneric() ? "yes" : "no"); endAction(); } void IdealFacade::printLcm(BigIdeal& ideal, IOHandler* handler, FILE* out) { beginAction("Computing lcm"); vector lcm; ideal.getLcm(lcm); IOFacade ioFacade(isPrintingActions()); ioFacade.writeTerm(lcm, ideal.getNames(), handler, out); fputc('\n', out); endAction(); } frobby-0.9.5/src/IdealFacade.h000066400000000000000000000065101401527164200160560ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IDEAL_FACADE_GUARD #define IDEAL_FACADE_GUARD #include "Facade.h" #include "BigattiPivotStrategy.h" #include class VarNames; class BigIdeal; class IOHandler; /** A facade for performing operations on BigIdeal. These operations should not fit somewhere else, such as on SliceFacade. @ingroup Facade */ class IdealFacade : private Facade { public: IdealFacade(bool printActions); /** Applies some generic deformation to the ideal. */ void deform(BigIdeal& ideal); /** Takes the radical of the generators of ideal. Non-minimal generators that may appear due to this are not removed. */ void takeRadical(BigIdeal& ideal); /** Change all 0 exponents to 1 and vice versa. */ void swap01(BigIdeal& ideal); /** Compute the Krull dimension of ideal. By convention, this is -1 if ideal is generated by the identity. The algorithm is lifted from Macaulay 2. @param squareFreeAndMinimal If true, then ideal must be square free and minimally generated. This can speed up the computation, but will result in undefined behavior if it is not true. @param codimension If true, return the codimension instead. */ mpz_class computeDimension(const BigIdeal& ideal, bool codimension = false, bool squareFreeAndMinimal = false); /** Take the product of the minimal generators of each ideal, and add the resulting monomials as generators of ideal. Requires that each ideal have the same names, including ideal. */ void takeProducts(const vector& ideals, BigIdeal& ideal); /** Remove redundant generators from ideal. */ void sortAllAndMinimize(BigIdeal& bigIdeal); /** Remove the variable var from the ideal and ring by substituting it by 1 */ void projectVar(BigIdeal& bigIdeal, size_t var); /** Remove those variables that do not appear in any generator. */ void trimVariables(const vector& ideals, VarNames& names); /** Adds x_i^(l_i+1) to the ideal for each i where that will be a minimal generator, where x^l is the lcm of the generators of bigIdeal. */ void addPurePowers(BigIdeal& bigIdeal); /** Sorts the generators of ideal and removes duplicates. */ void sortGeneratorsUnique(BigIdeal& ideal); /** Sorts the generators of ideal. */ void sortGenerators(BigIdeal& ideal); /** Sorts the variables of ideal. */ void sortVariables(BigIdeal& ideal); /** @todo: describe. */ void printAnalysis(FILE* out, BigIdeal& ideal); /** @todo: describe. */ void printLcm(BigIdeal& ideal, IOHandler* handler, FILE* out); }; #endif frobby-0.9.5/src/IdealFactory.cpp000066400000000000000000000104161401527164200166550ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IdealFactory.h" #include VarNames IdealFactory::ring_xyzt() { VarNames names; names.addVar("x"); names.addVar("y"); names.addVar("z"); names.addVar("t"); return names; } BigIdeal IdealFactory::xx_yy_xz_yz() { BigIdeal ideal(ring_xyzt()); ideal.insert(makeTerm(2, 0, 0, 0)); ideal.insert(makeTerm(0, 2, 0, 0)); ideal.insert(makeTerm(1, 0, 1, 0)); ideal.insert(makeTerm(0, 1, 1, 0)); ideal.sortGenerators(); return ideal; } BigIdeal IdealFactory::x_y() { BigIdeal ideal(ring_xyzt()); ideal.insert(makeTerm(1, 0, 0, 0)); ideal.insert(makeTerm(0, 1, 0, 0)); ideal.sortGenerators(); return ideal; } BigIdeal IdealFactory::x_y_z() { BigIdeal ideal(ring_xyzt()); ideal.insert(makeTerm(1, 0, 0, 0)); ideal.insert(makeTerm(0, 1, 0, 0)); ideal.insert(makeTerm(0, 0, 1, 0)); ideal.sortGenerators(); return ideal; } BigIdeal IdealFactory::xyzzz_xxyy() { BigIdeal ideal(ring_xyzt()); ideal.insert(makeTerm(1, 1, 3, 0)); ideal.insert(makeTerm(2, 2, 0, 0)); ideal.sortGenerators(); return ideal; } BigIdeal IdealFactory::xyz_xxyy() { BigIdeal ideal(ring_xyzt()); ideal.insert(makeTerm(1, 1, 1, 0)); ideal.insert(makeTerm(2, 2, 0, 0)); ideal.sortGenerators(); return ideal; } BigIdeal IdealFactory::xx_yy_z() { BigIdeal ideal(ring_xyzt()); ideal.insert(makeTerm(2, 0, 0, 0)); ideal.insert(makeTerm(0, 2, 0, 0)); ideal.insert(makeTerm(0, 0, 1, 0)); ideal.sortGenerators(); return ideal; } BigIdeal IdealFactory::xy_xxyyz() { BigIdeal ideal(ring_xyzt()); ideal.insert(makeTerm(1, 1, 0, 0)); ideal.insert(makeTerm(2, 2, 1, 0)); ideal.sortGenerators(); return ideal; } BigIdeal IdealFactory::xx_yy_zz_t_xz_yz() { BigIdeal ideal(ring_xyzt()); ideal.insert(makeTerm(2, 0, 0, 0)); ideal.insert(makeTerm(0, 2, 0, 0)); ideal.insert(makeTerm(0, 0, 2, 0)); ideal.insert(makeTerm(0, 0, 0, 1)); ideal.insert(makeTerm(1, 0, 1, 0)); ideal.insert(makeTerm(0, 1, 1, 0)); ideal.sortGenerators(); return ideal; } BigIdeal IdealFactory::xy_z() { BigIdeal ideal(ring_xyzt()); ideal.insert(makeTerm(1, 1, 0, 0)); ideal.insert(makeTerm(0, 0, 1, 0)); ideal.sortGenerators(); return ideal; } BigIdeal IdealFactory::xy_xz() { BigIdeal ideal(ring_xyzt()); ideal.insert(makeTerm(1, 1, 0, 0)); ideal.insert(makeTerm(1, 0, 1, 0)); ideal.sortGenerators(); return ideal; } BigIdeal IdealFactory::xy() { BigIdeal ideal(ring_xyzt()); ideal.insert(makeTerm(1, 1, 0, 0)); ideal.sortGenerators(); return ideal; } BigIdeal IdealFactory::z() { BigIdeal ideal(ring_xyzt()); ideal.insert(makeTerm(0, 0, 1, 0)); ideal.sortGenerators(); return ideal; } vector IdealFactory::irrdecom_xx_yy_xz_yz() { vector ideals; ideals.push_back(x_y()); ideals.push_back(xx_yy_z()); sort(ideals.begin(), ideals.end()); return ideals; } vector IdealFactory::assoprimes_xx_yy_xz_yz() { vector ideals; ideals.push_back(x_y()); ideals.push_back(x_y_z()); sort(ideals.begin(), ideals.end()); return ideals; } BigIdeal IdealFactory::wholeRing(size_t varCount) { BigIdeal ideal((VarNames(varCount))); ideal.insert(vector(varCount)); return ideal; } BigIdeal IdealFactory::zeroIdeal(size_t varCount) { return BigIdeal(VarNames(varCount)); } vector IdealFactory::makeTerm(int a, int b, int c, int d) { vector t(4); t[0] = a; t[1] = b; t[2] = c; t[3] = d; return t; } vector IdealFactory::makeTerm(int a) { vector t(1); t[0] = a; return t; } frobby-0.9.5/src/IdealFactory.h000066400000000000000000000056331401527164200163270ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef MY_IDEAL_FACTORY #define MY_IDEAL_FACTORY #include "BigIdeal.h" #include "VarNames.h" #include /** This class has static methods that return various ideals. This provides a convenient way to obtain ideals for tests. The data returned by this class is all in a canonical form suitable for comparison using operator==(). */ class IdealFactory { public: /** Returns the ring in the four variables \f$x\f$, \f$y\f$, \f$z\f$ and \f$t\f$. This ring is used for the ideals returned by the methods of this class unless otherwise noted. */ static VarNames ring_xyzt(); /** Returns \f$\ideal{x^2, y^2, x*z, y*z}\f$. */ static BigIdeal xx_yy_xz_yz(); /** Returns \f$\ideal{x, y}\f$. */ static BigIdeal x_y(); /** Returns \f$\ideal{x, y, z}\f$. */ static BigIdeal x_y_z(); /** Returns \f$\ideal{x*y*z^3, x^2y^2}\f$. */ static BigIdeal xyzzz_xxyy(); /** Returns \f$\ideal{x*y*z, x^2, y^2}\f$. */ static BigIdeal xyz_xxyy(); /** Returns \f$\ideal{x^2, y^2, z}\f$. */ static BigIdeal xx_yy_z(); /** Returns \f$\ideal{x*y, x^2*y^2*z}\f$. */ static BigIdeal xy_xxyyz(); /** Returns \f$\ideal{x^2, y^2, z^2, t, x*z, y*z}\f$. */ static BigIdeal xx_yy_zz_t_xz_yz(); /** Returns \f$\ideal{x*y, z}\f$. */ static BigIdeal xy_z(); /** Returns \f$\ideal{x*y, x*z}\f$. */ static BigIdeal xy_xz(); /** Returns \f$\ideal{x*y}\f$. */ static BigIdeal xy(); /** Returns \f$\ideal{z}\f$. */ static BigIdeal z(); /** Returns \f$\ideal{1}\f$ in the ring VarNames(varCount). */ static BigIdeal wholeRing(size_t varCount); /** Returns the ideal \f$\ideal{0}\f$ in the ring VarNames(varCount). */ static BigIdeal zeroIdeal(size_t varCount); /** Returns the irreducible decomposition of \f$\ideal{x^2, y^2, x*z, y*z}\f$. */ static vector irrdecom_xx_yy_xz_yz(); /** Returns the associated primes of \f$\ideal{x^2, y^2, x*z, y*z}\f$. */ static vector assoprimes_xx_yy_xz_yz(); /** Returns a vector representing \f$x^(a,b,c,d)\f$. */ static vector makeTerm(int a, int b, int c, int d); /** Returns a vector representing \f$x^(a)\f$. */ static vector makeTerm(int a); }; #endif frobby-0.9.5/src/IdealOrderer.cpp000066400000000000000000000217541401527164200166570ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IdealOrderer.h" #include "Ideal.h" #include "TermPredicate.h" #include "IdealOrderer.h" #include "NameFactory.h" #include "TermExtra.h" #include "ElementDeleter.h" #include #include #include IdealOrderer::~IdealOrderer() { } namespace { template class IdealSorter : public IdealOrderer { public: static const char* staticGetName() { return Pred::staticGetName(); } private: virtual void doOrder(Ideal& ideal) const { Pred pred; pred.setVarCount(ideal.getVarCount()); stable_sort(ideal.begin(), ideal.end(), pred); } }; class RandomOrderer : public IdealOrderer { public: static const char* staticGetName() {return "random";} private: void doOrder(Ideal& ideal) const { random_shuffle(ideal.begin(), ideal.end()); } }; class TotalDegreeComparator : public TermPredicate { public: static const char* staticGetName() {return "tdeg";} private: virtual bool doPredicate(const Exponent* a, const Exponent* b) const { totalDegree(_degA, a, getVarCount()); totalDegree(_degB, b, getVarCount()); return _degA < _degB; } mutable mpz_class _degA; // member to avoid repeated allocation mutable mpz_class _degB; }; class MedianComparator : public TermPredicate { public: static const char* staticGetName() {return "median";} private: virtual bool doPredicate(const Exponent* a, const Exponent* b) const { return median(a, getVarCount()) < median(b, getVarCount()); } }; class MedianPositiveComparator : public TermPredicate { public: static const char* staticGetName() {return "posMedian";} private: virtual bool doPredicate(const Exponent* a, const Exponent* b) const { return medianPositive(a, getVarCount()) < medianPositive(b, getVarCount()); } }; class MinimumPositiveComparator : public TermPredicate { public: static const char* staticGetName() {return "minPos";} private: virtual bool doPredicate(const Exponent* a, const Exponent* b) const { return minimumPositive(a, getVarCount()) < minimumPositive(b, getVarCount()); } }; class MaximumComparator : public TermPredicate { public: static const char* staticGetName() {return "max";} private: virtual bool doPredicate(const Exponent* a, const Exponent* b) const { return maximum(a, getVarCount()) < maximum(b, getVarCount()); } }; class SupportComparator : public TermPredicate { public: static const char* staticGetName() {return "support";} private: virtual bool doPredicate(const Exponent* a, const Exponent* b) const { return Term::getSizeOfSupport(a, getVarCount()) < Term::getSizeOfSupport(b, getVarCount()); } }; class StrongGenericityOrderer : public IdealOrderer { public: static const char* staticGetName() {return "strongGenericity";} protected: void orderGenericity(Ideal& ideal, bool strong) const { // Using a map here is the prettier of several ugly // alternaties. Only trade more ugly for efficiency if this // method turns up as a significant consumer of time in a // profiler. UnGenMap degeneracy; // Make degeneracy[gen] be the number of other generators that // shares a positive exponent with gen. Term tmp(ideal.getVarCount()); for (cit a = ideal.begin(); a != ideal.end(); ++a) { for (cit b = a + 1; b != ideal.end(); ++b) { if (Term::sharesNonZeroExponent(*a, *b, ideal.getVarCount())) { if (!strong) { tmp.lcm(*a, *b); if (ideal.strictlyContains(tmp)) continue; } ++degeneracy[*a]; ++degeneracy[*b]; } } } Pred pred(degeneracy); stable_sort(ideal.begin(), ideal.end(), pred); } private: typedef Ideal::const_iterator cit; typedef map UnGenMap; virtual void doOrder(Ideal& ideal) const { orderGenericity(ideal, true); } class Pred { public: Pred(UnGenMap& degeneracy): _degeneracy(degeneracy) {} bool operator()(const Exponent* a, const Exponent* b) const { return _degeneracy[a] < _degeneracy[b]; } private: UnGenMap& _degeneracy; }; }; class NullOrderer : public IdealOrderer { public: static const char* staticGetName() {return "null";} private: virtual void doOrder(Ideal& ideal) const {} }; /** @todo: do this more elegantly than with inheritance. */ class WeakGenericityOrderer : public StrongGenericityOrderer { public: static const char* staticGetName() {return "weakGenericity";} private: virtual void doOrder(Ideal& ideal) const { orderGenericity(ideal, false); } }; /** Sorts in the reverse order of the orderer passed to the constructor. */ class ReverseOrderer : public IdealOrderer { public: ReverseOrderer(auto_ptr orderer): _orderer(orderer) {} private: virtual void doOrder(Ideal& ideal) const { // Could probably be done more efficiently by trying to interact // with the orderer, but that would be so much more trouble. The // first reverse is necessary to ensure the ordering is stable. reverse(ideal.begin(), ideal.end()); _orderer->order(ideal); reverse(ideal.begin(), ideal.end()); } auto_ptr _orderer; }; class CompositeOrderer : public IdealOrderer { public: CompositeOrderer(): _orderersDeleter(_orderers) {} void refineOrderingWith(auto_ptr orderer) { exceptionSafePushBack(_orderers, orderer); } private: typedef vector Container; typedef Container::const_reverse_iterator rev_cit; virtual void doOrder(Ideal& ideal) const { // This works because orderes that define a non-total order // (i.e. those that can be interestingly refined) use a stable // sorting algorithm. rev_cit rbegin(_orderers.end()); rev_cit rend(_orderers.begin()); for (rev_cit it = rbegin; it != rend; ++it) (*it)->order(ideal); } Container _orderers; ElementDeleter _orderersDeleter; }; typedef NameFactory OrdererFactory; OrdererFactory getOrdererFactory() { OrdererFactory factory("ordering of terms"); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister >(factory); nameFactoryRegister >(factory); nameFactoryRegister >(factory); nameFactoryRegister >(factory); nameFactoryRegister >(factory); nameFactoryRegister >(factory); nameFactoryRegister >(factory); nameFactoryRegister >(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); return factory; } auto_ptr createNonCompositeOrderer(const string& prefix) { if (prefix.substr(0, 3) == "rev") { auto_ptr orderer = createWithPrefix(getOrdererFactory(), prefix.substr(3)); return auto_ptr(new ReverseOrderer(orderer)); } else return createWithPrefix(getOrdererFactory(), prefix); } } auto_ptr createIdealOrderer(const string& prefix) { if (prefix.find('_') == string::npos) return createNonCompositeOrderer(prefix); auto_ptr composite(new CompositeOrderer()); size_t pos = 0; while (true) { size_t nextUnderscore = prefix.find('_', pos); string subPrefix = prefix.substr(pos, nextUnderscore - pos); composite->refineOrderingWith(createNonCompositeOrderer(subPrefix)); if (nextUnderscore == string::npos) break; pos = nextUnderscore + 1; } return auto_ptr(composite.release()); } frobby-0.9.5/src/IdealOrderer.h000066400000000000000000000021531401527164200163140ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IDEAL_ORDERER_GUARD #define IDEAL_ORDERER_GUARD class Ideal; class IdealOrderer { public: virtual ~IdealOrderer(); void order(Ideal& ideal) const {doOrder(ideal);} private: virtual void doOrder(Ideal& ideal) const = 0; }; auto_ptr createIdealOrderer(const string& name); #endif frobby-0.9.5/src/IdealTest.cpp000066400000000000000000000024021401527164200161610ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Ideal.h" #include "tests.h" #include "Term.h" TEST_SUITE(Ideal) TEST(Ideal, IsWeaklyGeneric1) { Ideal id(4); id.insert(Term("0 2 1 1")); id.insert(Term("0 1 2 2")); id.insert(Term("0 3 2 0")); // The first generator strictly divides the lcm of the other two. ASSERT_TRUE(id.isWeaklyGeneric()); } TEST(Ideal, IsWeaklyGeneric2) { Ideal id(4); id.insert(Term("0 2 1 1")); id.insert(Term("0 1 2 2")); id.insert(Term("0 2 2 0")); ASSERT_FALSE(id.isWeaklyGeneric()); } frobby-0.9.5/src/IdealTree.cpp000066400000000000000000000116401401527164200161450ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IdealTree.h" #include "Ideal.h" #include "Term.h" namespace { const size_t MaxLeafSize = 60; bool rawStrictlyDivides(Ideal::const_iterator begin, Ideal::const_iterator end, const Exponent* term, size_t varCount) { for (; begin != end; ++begin) if (Term::strictlyDivides(*begin, term, varCount)) return true; return false; } } class IdealTree::Node { public: Node(Ideal::iterator begin, Ideal::iterator end, size_t varCount): _begin(begin), _end(end), _varCount(varCount) { makeTree(); } void makeTree(); bool strictlyContains(const Exponent* term) const; size_t getVarCount() const {return _varCount;} private: auto_ptr _lessOrEqual; auto_ptr _greater; Ideal::iterator _begin; Ideal::iterator _end; size_t _varCount; size_t _var; size_t _pivot; }; void IdealTree::Node::makeTree() { if ((size_t)distance(_begin, _end) <= MaxLeafSize) return; Term lcm(_varCount); Term gcd(*_begin, _varCount); for (Ideal::const_iterator it = _begin; it != _end; ++it) { lcm.lcm(lcm, *it); gcd.gcd(gcd, *it); } while (true) { size_t maxVar = 0; for (size_t var = 1; var < _varCount; ++var) if (lcm[var] - gcd[var] > lcm[maxVar] - gcd[maxVar]) maxVar = var; // TODO: could this ever happen? if (lcm[maxVar] == 0) break; // we are not making any progress anyway. ASSERT(lcm[maxVar] >= 1); _var = maxVar; // It's significant that we are rounding down to ensure that // neither of _lessOrEqual and _greater becomes empty. _pivot = (lcm[maxVar] + gcd[maxVar]) >> 1; // Note: x >> 1 == x / 2 Ideal::iterator left = _begin; Ideal::iterator right = _end - 1; // put those strictly divisible by _var^_pivot to right and the // rest to the left. while (left != right) { // Find left-most element that should go right. while ((*left)[_var] <= _pivot && left != right) ++left; // Find right-most element that should go left. while ((*right)[_var] > _pivot && left != right) --right; // Swap the two found elements so that they both go into the // right place. using std::swap; swap(*left, *right); } ASSERT((*(_end - 1))[_var] > _pivot); ASSERT((*_begin)[_var] <= _pivot); // Make middle the first element that went right, so that the two // ranges become [_begin, middle) and [middle, _end). ASSERT((*right)[_var] > _pivot) Ideal::iterator middle = right; while ((*middle)[_var] > _pivot) { ASSERT(middle != _begin); --middle; } ++middle; ASSERT(_begin < middle && middle <= _end); ASSERT((*middle)[_var] > _pivot); ASSERT((*(middle - 1))[_var] <= _pivot); _lessOrEqual.reset(new Node(_begin, middle, _varCount)); _greater.reset(new Node(middle, _end, _varCount)); _lessOrEqual->makeTree(); _greater->makeTree(); return; } } bool IdealTree::Node::strictlyContains(const Exponent* term) const { if (_lessOrEqual.get() != 0) { ASSERT(_greater.get() != 0); bool returnValue = _lessOrEqual->strictlyContains(term) || _greater->strictlyContains(term); ASSERT(returnValue == rawStrictlyDivides(_begin, _end, term, _varCount)); return returnValue; } else { ASSERT(_greater.get() == 0); return rawStrictlyDivides(_begin, _end, term, _varCount); } } IdealTree::IdealTree(const Ideal& ideal) { // not using initialization for this to avoid depending on order of // initialization of members. _storage.reset(new Ideal(ideal)); _root.reset (new Node(_storage->begin(), _storage->end(), ideal.getVarCount())); } IdealTree::~IdealTree() { // Destructor defined so auto_ptr in the header does not need // definition of T. } bool IdealTree::strictlyContains(const Exponent* term) const { ASSERT(_root.get() != 0); return _root->strictlyContains(term); } size_t IdealTree::getVarCount() const { ASSERT(_root.get() != 0); return _root->getVarCount(); } frobby-0.9.5/src/IdealTree.h000066400000000000000000000024431401527164200156130ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IDEAL_TREE_GUARD #define IDEAL_TREE_GUARD class Ideal; /** Objects of this class represents a monomial ideal. The representation uses a tree that speeds up some operations compared to a flat list. @todo: avoid unbounded recursion. */ class IdealTree { public: IdealTree(const Ideal& ideal); ~IdealTree(); bool strictlyContains(const Exponent* term) const; size_t getVarCount() const; private: class Node; auto_ptr _storage; auto_ptr _root; }; #endif frobby-0.9.5/src/IdealWriter.cpp000066400000000000000000000047151401527164200165270ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IdealWriter.h" #include "BigIdeal.h" #include "Term.h" namespace IO { IdealWriter::IdealWriter(FILE* out): _out(out), _firstIdeal(true), _firstGenerator(true) { } void IdealWriter::consumeRing(const VarNames& names) { if (_names != names) { _names = names; _firstIdeal = true; } } void IdealWriter::beginConsumingList() { _firstIdeal = true; } void IdealWriter::beginConsuming() { _firstGenerator = true; doWriteHeader(_firstIdeal); } void IdealWriter::consume(const Term& term, const TermTranslator& translator) { ASSERT(term.getVarCount() == _names.getVarCount()); bool firstGenerator = _firstGenerator; // To get tail recursion. _firstGenerator = false; doWriteTerm(term, translator, firstGenerator); } void IdealWriter::consume(const vector& term) { ASSERT(term.size() == _names.getVarCount()); bool firstGenerator = _firstGenerator; // To get tail recursion. _firstGenerator = false; doWriteTerm(term, firstGenerator); } void IdealWriter::doneConsuming() { _firstIdeal = false; doWriteFooter(_firstGenerator); } void IdealWriter::doneConsumingList() { if (_firstIdeal) doWriteEmptyList(); } void IdealWriter::consume(const BigIdeal& ideal) { consumeRing(ideal.getNames()); _firstGenerator = true; doWriteHeader(_firstIdeal, ideal.getGeneratorCount()); for (size_t term = 0; term < ideal.getGeneratorCount(); ++term) consume(ideal.getTerm(term)); doneConsuming(); } void IdealWriter::doWriteHeader(bool firstIdeal, size_t generatorCount) { doWriteHeader(firstIdeal); } } frobby-0.9.5/src/IdealWriter.h000066400000000000000000000041451401527164200161710ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IDEAL_WRITER_GUARD #define IDEAL_WRITER_GUARD #include "VarNames.h" #include "BigTermConsumer.h" class TermTranslator; class Term; namespace IO { class IdealWriter : public BigTermConsumer { public: IdealWriter(FILE* out); virtual void consumeRing(const VarNames& names); virtual void beginConsumingList(); virtual void beginConsuming(); virtual void consume(const Term& term, const TermTranslator& translator); virtual void consume(const vector& term); virtual void doneConsuming(); virtual void doneConsumingList(); virtual void consume(const BigIdeal& ideal); FILE* getFile() {return _out;} const VarNames& getNames() {return _names;} private: virtual void doWriteHeader(bool firstIdeal, size_t generatorCount); virtual void doWriteHeader(bool firstIdeal) = 0; virtual void doWriteTerm(const Term& term, const TermTranslator& translator, bool firstGenerator) = 0; virtual void doWriteTerm(const vector& term, bool firstGenerator) = 0; virtual void doWriteFooter(bool wasZeroIdeal) = 0; virtual void doWriteEmptyList() = 0; FILE* const _out; bool _firstIdeal; bool _firstGenerator; VarNames _names; }; } #endif frobby-0.9.5/src/IndependenceSplitter.cpp000066400000000000000000000062541401527164200204240ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IndependenceSplitter.h" #include "Ideal.h" #include "Term.h" #include "Projection.h" void IndependenceSplitter::getBigProjection(Projection& projection) const { projection.reset(_partition, _bigSet); } void IndependenceSplitter::getRestProjection(Projection& projection) const { projection.reset(_partition, 1 - _bigSet); } bool IndependenceSplitter::analyze(const Slice& slice) { _partition.reset(slice.getVarCount()); Ideal::const_iterator stop = slice.getIdeal().end(); for (Ideal::const_iterator it = slice.getIdeal().begin(); it != stop; ++it) { size_t first = Term::getFirstNonZeroExponent(*it, slice.getVarCount()); if (first == slice.getVarCount()) return false; _partition.addToSet(first); for (size_t var = first + 1; var < slice.getVarCount(); ++var) if ((*it)[var] > 0) if (_partition.join(first, var)) if (_partition.getSetCount() == 1) return false; } stop = slice.getSubtract().end(); for (Ideal::const_iterator it = slice.getSubtract().begin(); it != stop; ++it) { size_t first = Term::getFirstNonZeroExponent(*it, slice.getVarCount()); for (size_t var = first + 1; var < slice.getVarCount(); ++var) if ((*it)[var] > 0) _partition.join(first, var); } size_t childCount = _partition.getSetCount(); if (childCount == 1) return false; size_t hasTwo = 0; for (size_t i = 0; i < childCount; ++i) if (_partition.getSetSize(i) >= 2) ++hasTwo; if (hasTwo < 2) return false; if (_partition.getSetCount() > 2) { size_t maxSet = 0; for (size_t set = 1; set < _partition.getSize(); ++set) if (_partition.getSizeOfClassOf(set) > _partition.getSizeOfClassOf(maxSet)) maxSet = _partition.getRoot(set); size_t nonMaxSet = 0; for (size_t set = 0; set < _partition.getSize(); ++set) if (_partition.getRoot(maxSet) != _partition.getRoot(set)) nonMaxSet = set; ASSERT(_partition.getRoot(maxSet) != _partition.getRoot(nonMaxSet)); for (size_t set = 0; set < _partition.getSize(); ++set) if (_partition.getRoot(set) != _partition.getRoot(maxSet)) _partition.join(set, nonMaxSet); } ASSERT(_partition.getSetCount() == 2); if (_partition.getSetSize(0) > _partition.getSetSize(1)) _bigSet = 0; else _bigSet = 1; return true; } size_t IndependenceSplitter::getVarCount() const { return _partition.getSize(); } frobby-0.9.5/src/IndependenceSplitter.h000066400000000000000000000034101401527164200200600ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef INDEPENDENCE_SPLITTER_GUARD #define INDEPENDENCE_SPLITTER_GUARD #include "Partition.h" #include "Projection.h" #include "Ideal.h" #include #include "MsmSlice.h" class Ideal; class Term; class IndependenceSplitter { public: // Returns true if there are independent subsets of variables. The // other methods should only be called when the most recent call to // analyze returned true. bool analyze(const Slice& slice); size_t getVarCount() const; size_t getOneVarCount() const {return _oneVarCount;} size_t getTwoVarCount() const {return _twoVarCount;} size_t getMoreThanTwoCount() const {return _moreThanTwoVarCount;} // Get the projection to the biggest independent subset of variables. void getBigProjection(Projection& projection) const; // Get the projection to the rest of the variables. void getRestProjection(Projection& projection) const; private: Partition _partition; size_t _oneVarCount; size_t _twoVarCount; size_t _moreThanTwoVarCount; size_t _bigSet; }; #endif frobby-0.9.5/src/InputConsumer.cpp000066400000000000000000000150171401527164200171240ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "InputConsumer.h" #include "Scanner.h" #include "FrobbyStringStream.h" #include "error.h" #include "RawSquareFreeTerm.h" #include InputConsumer::InputConsumer(): _idealsDeleter(_ideals), _inIdeal(false), _requireSquareFree(false) { } void InputConsumer::consumeRing(const VarNames& names) { VarNames nameCopy(names); // exception safety: copy and swap if (_inIdeal) { ASSERT(names.getVarCount() == _names.getVarCount()); if (_sqfIdeal.get() != 0) _sqfIdeal->renameVars(names); else _bigIdeal->renameVars(names); } _names.swap(nameCopy); } void InputConsumer::requireSquareFree() { ASSERT(!_inIdeal); _requireSquareFree = true; } void InputConsumer::beginIdeal() { ASSERT(!_inIdeal); _inIdeal = true; _sqfIdeal.reset(new SquareFreeIdeal(_names)); _term.resize(_names.getVarCount()); } void InputConsumer::hintGenCount(size_t hintGenCountParam) { ASSERT(_inIdeal); _bigIdeal->reserve(hintGenCountParam); } void InputConsumer::beginTerm() { ASSERT(_inIdeal); ASSERT(_term.size() == _names.getVarCount()); #ifdef DEBUG for (size_t var = 0; var < _term.size(); ++var) { ASSERT(_term[var].empty()); } #endif if (_sqfIdeal.get() != 0) _sqfIdeal->insertIdentity(); else _bigIdeal->newLastTerm(); } size_t InputConsumer::consumeVarNumber(Scanner& in) { ASSERT(_inIdeal); size_t var; in.readSizeT(var); if (var == 0 || var > _names.getVarCount()) { FrobbyStringStream errorMsg; errorMsg << "There is no variable number " << var << '.'; reportSyntaxError(in, errorMsg); } return var - 1; } size_t InputConsumer::consumeVar(Scanner& in) { ASSERT(_inIdeal); in.readIdentifier(_tmpString); size_t var = _names.getIndex(_tmpString); if (var == VarNames::invalidIndex) { FrobbyStringStream errorMsg; errorMsg << "Unknown variable \"" << _tmpString << "\". Maybe you forgot a *."; reportSyntaxError(in, errorMsg); } return var; } void InputConsumer::consumeVarExponentOne(size_t var, const Scanner& in) { ASSERT(_inIdeal); ASSERT(var < _names.getVarCount()); if (_sqfIdeal.get() != 0) { Word* back = _sqfIdeal->back(); if (!SquareFreeTermOps::getExponent(back, var)) { SquareFreeTermOps::setExponent(back, var, true); return; } } else { mpz_class& exponent = _bigIdeal->getLastTermExponentRef(var); if (exponent == 0) { exponent = 1; return; } } errorVariableAppearsTwice(in, var); } void InputConsumer::consumeVarExponent(size_t var, Scanner& in) { ASSERT(_inIdeal); ASSERT(var < _names.getVarCount()); if (_sqfIdeal.get() != 0) { in.readIntegerNoSign(_tmpString); Word* back = _sqfIdeal->back(); if (!SquareFreeTermOps::getExponent(back, var)) { if (_tmpString == "1") SquareFreeTermOps::setExponent(back, var, true); else if (_tmpString != "0") { idealNotSquareFree(); _bigIdeal->getLastTermExponentRef(var) = _tmpString; } return; } } else { mpz_class& exponent = _bigIdeal->getLastTermExponentRef(var); if (exponent == 0) { in.readIntegerNoSign(exponent); return; } } errorVariableAppearsTwice(in, var); } void InputConsumer::consumeTermProductNotation(Scanner& in) { ASSERT(_inIdeal); beginTerm(); if (!in.match('1')) { do { const size_t var = consumeVar(in); if (in.match('^')) consumeVarExponent(var, in); else consumeVarExponentOne(var, in); } while (in.match('*')); } endTerm(); } void InputConsumer::endTerm() { ASSERT(_inIdeal); /* const size_t varCount = _names.getVarCount(); if (_sqfIdeal.get() != 0) { if (_sqfIdeal->insert(_term)) { for (size_t var = 0; var < varCount; ++var) _term[var].clear(); return; } if (_requireSquareFree) reportError("Expected square free term."); toBigIdeal(_sqfIdeal, _bigIdeal); } ASSERT(!_requireSquareFree); ASSERT(_bigIdeal.get() != 0); _bigIdeal->newLastTerm(); for (size_t var = 0; var < varCount; ++var) { std::string& str = _term[var]; if (str.empty()) continue; mpz_class& integer = _bigIdeal->getLastTermExponentRef(var); mpz_set_str(integer.get_mpz_t(), str.c_str(), 10); str.clear(); }*/ } void InputConsumer::endIdeal() { ASSERT(_inIdeal); _inIdeal = false; auto_ptr entry(new Entry()); entry->_big = _bigIdeal; entry->_sqf = _sqfIdeal; exceptionSafePushBack(_ideals, entry); } void InputConsumer::releaseIdeal(auto_ptr& sqf, auto_ptr& big) { ASSERT(!_inIdeal); ASSERT(!empty()); Entry entry; releaseIdeal(entry); sqf = entry._sqf; big = entry._big; } auto_ptr InputConsumer::releaseBigIdeal() { ASSERT(!_inIdeal); ASSERT(!empty()); Entry entry; releaseIdeal(entry); toBigIdeal(entry._sqf, entry._big); return entry._big; } auto_ptr InputConsumer::releaseSquareFreeIdeal() { ASSERT(!_inIdeal); ASSERT(!empty()); ASSERT(_ideals.front()->_sqf.get() != 0); Entry entry; releaseIdeal(entry); return entry._sqf; } void InputConsumer::releaseIdeal(Entry& entry) { ASSERT(!_inIdeal); ASSERT(!empty()); entry = *_ideals.front(); _ideals.pop_front(); } void InputConsumer::errorVariableAppearsTwice(const Scanner& in, size_t var) { FrobbyStringStream errorMsg; errorMsg << "The variable " << _names.getName(var) << " appears twice in the same monomial."; reportSyntaxError(in, errorMsg); } void InputConsumer::idealNotSquareFree() { if (_requireSquareFree) reportError("Expected square free term."); toBigIdeal(_sqfIdeal, _bigIdeal); } void InputConsumer::toBigIdeal(std::auto_ptr& sqf, std::auto_ptr& big) { if (big.get() != 0) return; ASSERT(sqf.get() != 0); big.reset(new BigIdeal(sqf->getNames())); big->insert(*sqf); sqf.reset(0); } frobby-0.9.5/src/InputConsumer.h000066400000000000000000000067521401527164200165770ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef INPUT_CONSUMER_GUARD #define INPUT_CONSUMER_GUARD #include "BigIdeal.h" #include "SquareFreeIdeal.h" #include "VarNames.h" #include "ElementDeleter.h" #include #include #include class Scanner; class InputConsumer { public: InputConsumer(); void consumeRing(const VarNames& names); void requireSquareFree(); /** Start consuming an ideal. */ void beginIdeal(); /** Suggest that the current ideal will have the given number of generators. This helps in preallocating the right amount of memory. */ void hintGenCount(size_t hintGenCount); /** Start consuming a term. */ void beginTerm(); /** Reads variable and returns id. Does not return if there is an error. */ size_t consumeVar(Scanner& in); /** Reads variable as a number so that the first variable is 1. Does not return if there is an error. */ size_t consumeVarNumber(Scanner& in); /** Consumes var raised to the exponent 1. */ void consumeVarExponentOne(size_t var, const Scanner& in); /** Consumes var raised to an exponent read from in. Does not return if there is an error. */ void consumeVarExponent(size_t var, Scanner& in); /** Done reading a term. */ void endTerm(); /** Reads a term in a format like "a^4*b*c^2" */ void consumeTermProductNotation(Scanner& in); /** Done reading an ideal. */ void endIdeal(); /** Returns true if there are ideals stored. */ bool empty() const {return _ideals.empty();} /** Struct that keeps either a BigIdeal or a SquareFreeIdeal. */ /** Assigns the least recently read ideal that has not been released to the parameter of the type that the ideal was read as. */ void releaseIdeal(auto_ptr& sqf, auto_ptr& big); /** Returns the least recently read ideal that has not been released. Converts the ideal to a BigIdeal if it had been read as something else. */ auto_ptr releaseBigIdeal(); /** Returns the least recently read ideal that has not been released. That ideal must have been read as a SquareFreeIdeal. */ auto_ptr releaseSquareFreeIdeal(); /** Returns the current ring. */ const VarNames& getRing() const {return _names;} private: struct Entry { auto_ptr _big; auto_ptr _sqf; }; void releaseIdeal(Entry& e); void errorVariableAppearsTwice(const Scanner& in, size_t var); void idealNotSquareFree(); static void toBigIdeal (auto_ptr& sqf, auto_ptr& big); string _tmpString; VarNames _names; auto_ptr _bigIdeal; auto_ptr _sqfIdeal; vector _term; std::list _ideals; ElementDeleter > _idealsDeleter; bool _inIdeal; bool _requireSquareFree; }; #endif frobby-0.9.5/src/IntegerParameter.cpp000066400000000000000000000037561401527164200175560ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IntegerParameter.h" #include "error.h" #include "FrobbyStringStream.h" IntegerParameter::IntegerParameter(const string& name, const string& description, unsigned int defaultValue): Parameter(name, description), _value(defaultValue) { } string IntegerParameter::doGetArgumentType() const { return "INTEGER"; } string IntegerParameter::doGetValueAsString() const { FrobbyStringStream str; str << getValue(); return str.str(); } pair IntegerParameter::doGetArgumentCountRange() const { return make_pair(1, 1); } void IntegerParameter::doProcessArguments(const char** args, size_t argCount) { ASSERT(argCount == 1); bool ok = true; mpz_class integer; try { FrobbyStringStream::parseInteger(integer, args[0]); } catch (const FrobbyStringStream::NotAnIntegerException&) { ok = false; } if (!ok || !integer.fits_uint_p()) { FrobbyStringStream errorMsg; errorMsg << "Option -" << getName() << " was given the parameter \"" << args[0] << "\", which is not an integer in the range [0, 2^31-1]."; reportError(errorMsg); } _value = integer.get_ui(); } frobby-0.9.5/src/IntegerParameter.h000066400000000000000000000030221401527164200172050ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef INTEGER_PARAMETER_GUARD #define INTEGER_PARAMETER_GUARD #include "Parameter.h" #include #include class IntegerParameter : public Parameter { public: IntegerParameter(const string& name, const string& description, unsigned int defaultValue); unsigned int getValue() const {return _value;} void setValue(unsigned int value) {_value = value;} operator unsigned int() const {return getValue();} void operator=(unsigned int value) {setValue(value);} private: virtual string doGetArgumentType() const; virtual string doGetValueAsString() const; virtual pair doGetArgumentCountRange() const; virtual void doProcessArguments(const char** args, size_t argCount); unsigned int _value; }; #endif frobby-0.9.5/src/IntersectFacade.cpp000066400000000000000000000041461401527164200173360ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IntersectFacade.h" #include "Term.h" #include "BigIdeal.h" #include "Ideal.h" #include "intersect.h" #include "Ideal.h" #include "TermTranslator.h" #include "ElementDeleter.h" IntersectFacade::IntersectFacade(bool printActions): Facade(printActions) { } auto_ptr IntersectFacade::intersect(const vector& ideals, const VarNames& emptyNames) { beginAction("Intersecting ideals."); if (ideals.empty()) { auto_ptr entireRing(new BigIdeal(emptyNames)); entireRing->newLastTerm(); return entireRing; } vector ideals2; ElementDeleter > ideals2Deleter(ideals2); TermTranslator translator(ideals, ideals2); const VarNames& names = translator.getNames(); size_t variableCount = names.getVarCount(); auto_ptr intersection(new Ideal(variableCount)); Term identity(variableCount); intersection->insert(identity); for (size_t i = 0; i < ideals2.size(); ++i) { ideals2[i]->minimize(); // Compute intersection auto_ptr tmp(new Ideal(variableCount)); ::intersect(tmp.get(), intersection.get(), ideals2[i]); // Handle bookkeeping intersection = tmp; } auto_ptr bigIdeal(new BigIdeal(names)); bigIdeal->insert(*intersection, translator); endAction(); return bigIdeal; } frobby-0.9.5/src/IntersectFacade.h000066400000000000000000000025741401527164200170060ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef INTERSECT_FACADE_GUARD #define INTERSECT_FACADE_GUARD #include #include "Facade.h" class BigIdeal; class VarNames; /** A facade for intersecting monomial ideals. @todo Merge this into IdealFacade. @ingroup Facade */ class IntersectFacade : Facade { public: IntersectFacade(bool printActions); /** Returns the intersection of ideals. If ideals is empty, then the whole ring is the intersection, which requires knowing the ring, and this is what names contains. */ auto_ptr intersect(const vector& ideals, const VarNames& names); }; #endif frobby-0.9.5/src/IntersectionAction.cpp000066400000000000000000000050141401527164200201110ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IntersectionAction.h" #include "BigIdeal.h" #include "IOFacade.h" #include "IntersectFacade.h" #include "Scanner.h" #include "IdealFacade.h" #include "VarSorter.h" #include "ElementDeleter.h" #include "DataType.h" IntersectionAction::IntersectionAction(): Action (staticGetName(), "Intersect the input ideals.", "Computes the intersection of the input ideals. Simply concatenate " "the textual\n" "representations of the ideals in order to intersect them.\n\n" "Note that this operation is currently implemented in a rather slow way.", false), _io(DataType::getMonomialIdealListType(), DataType::getMonomialIdealType()), _canonical ("canon", "Sort the generators and variables to get a canonical output.", false) { } void IntersectionAction::obtainParameters(vector& parameters) { _io.obtainParameters(parameters); parameters.push_back(&_canonical); Action::obtainParameters(parameters); } void IntersectionAction::perform() { Scanner in(_io.getInputFormat(), stdin); _io.autoDetectInputFormat(in); _io.validateFormats(); vector ideals; ElementDeleter > idealsDeleter(ideals); IOFacade ioFacade(_printActions); VarNames names; ioFacade.readIdeals(in, ideals, names); in.expectEOF(); IntersectFacade facade(_printActions); auto_ptr intersection(facade.intersect(ideals, names)); idealsDeleter.deleteElements(); if (_canonical) { IdealFacade idealFacade(_printActions); idealFacade.sortVariables(*intersection); idealFacade.sortGenerators(*intersection); } auto_ptr output = _io.createOutputHandler(); ioFacade.writeIdeal(*intersection, output.get(), stdout); } const char* IntersectionAction::staticGetName() { return "intersection"; } frobby-0.9.5/src/IntersectionAction.h000066400000000000000000000022361401527164200175610ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef INTERSECTION_ACTION_GUARD #define INTERSECTION_ACTION_GUARD #include "Action.h" #include "IOParameters.h" #include "BoolParameter.h" class IntersectionAction : public Action { public: IntersectionAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); private: IOParameters _io; BoolParameter _canonical; }; #endif frobby-0.9.5/src/IrreducibleDecomAction.cpp000066400000000000000000000042061401527164200206460ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IrreducibleDecomAction.h" #include "SliceFacade.h" #include "SliceParams.h" #include "DataType.h" IrreducibleDecomAction::IrreducibleDecomAction(): Action (staticGetName(), "Compute the irreducible decomposition of the input ideal.", "Compute the irredundant irreducible decomposition of the input monomial " "ideal.\n\n" "The decomposition is computed using the Slice Algorithm. This algorithm is\n" "described in the paper `The Slice Algorithm For Irreducible Decomposition " "of\n" "Monomial Ideals', which is available at www.broune.com .", false), _encode("encode", "Encode the decomposition as monomials generating an ideal.", false), _io(DataType::getMonomialIdealType(), DataType::getMonomialIdealType()) { } void IrreducibleDecomAction::obtainParameters(vector& parameters) { _io.obtainParameters(parameters); parameters.push_back(&_encode); _sliceParams.obtainParameters(parameters); Action::obtainParameters(parameters); } void IrreducibleDecomAction::perform() { SliceParams params(_params); validateSplit(params, true, false); const DataType& output = _encode ? DataType::getMonomialIdealType() : DataType::getMonomialIdealListType(); SliceFacade facade(params, output); facade.computeIrreducibleDecomposition(_encode); } const char* IrreducibleDecomAction::staticGetName() { return "irrdecom"; } frobby-0.9.5/src/IrreducibleDecomAction.h000066400000000000000000000023361401527164200203150ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IRREDUCIBLE_DECOM_ACTION #define IRREDUCIBLE_DECOM_ACTION #include "Action.h" #include "IOParameters.h" #include "SliceParameters.h" #include "BoolParameter.h" class IrreducibleDecomAction : public Action { public: IrreducibleDecomAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); private: BoolParameter _encode; SliceParameters _sliceParams; IOParameters _io; }; #endif frobby-0.9.5/src/IrreducibleIdealSplitter.cpp000066400000000000000000000062251401527164200212310ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "IrreducibleIdealSplitter.h" #include "VarNames.h" #include "TermTranslator.h" IrreducibleIdealSplitter::IrreducibleIdealSplitter (BigTermConsumer& consumer): _consumer(consumer), _inList(false) { } IrreducibleIdealSplitter::IrreducibleIdealSplitter (auto_ptr consumer): _consumer(*consumer), _consumerDeleter(consumer), _inList(false) { } void IrreducibleIdealSplitter::consumeRing(const VarNames& names) { _tmp.reset(names.getVarCount()); _bigTmp.resize(names.getVarCount()); _consumer.consumeRing(names); ASSERT(_tmp.isIdentity()); ASSERT(_bigTmp == vector(_bigTmp.size())); } void IrreducibleIdealSplitter::beginConsumingList() { ASSERT(!_inList); _inList = true; _consumer.beginConsumingList(); } void IrreducibleIdealSplitter::beginConsuming() { if (!_inList) _consumer.beginConsumingList(); } void IrreducibleIdealSplitter::consume(const Term& term) { ASSERT(term.getVarCount() == _tmp.getVarCount()); ASSERT(_tmp.isIdentity()); _consumer.beginConsuming(); for (size_t var = 0; var < term.getVarCount(); ++var) { if (term[var] != 0) { _tmp[var] = term[var]; _consumer.consume(_tmp); _tmp[var] = 0; } } _consumer.doneConsuming(); ASSERT(_tmp.isIdentity()); } void IrreducibleIdealSplitter::consume (const Term& term, const TermTranslator& translator) { ASSERT(term.getVarCount() == _tmp.getVarCount()); ASSERT(_tmp.isIdentity()); _consumer.beginConsuming(); for (size_t var = 0; var < term.getVarCount(); ++var) { if (translator.getExponent(var, term) != 0) { _tmp[var] = term[var]; _consumer.consume(_tmp, translator); _tmp[var] = 0; } } _consumer.doneConsuming(); ASSERT(_tmp.isIdentity()); } void IrreducibleIdealSplitter::consume(const vector& term) { ASSERT(term.size() == _bigTmp.size()); ASSERT(_bigTmp == vector(_bigTmp.size())); _consumer.beginConsuming(); for (size_t var = 0; var < term.size(); ++var) { if (term[var] != 0) { _bigTmp[var] = term[var]; _consumer.consume(_bigTmp); _bigTmp[var] = 0; } } _consumer.doneConsuming(); ASSERT(_bigTmp == vector(_bigTmp.size())); } void IrreducibleIdealSplitter::doneConsuming() { if (!_inList) _consumer.doneConsumingList(); } void IrreducibleIdealSplitter::doneConsumingList() { ASSERT(_inList); _consumer.doneConsumingList(); } frobby-0.9.5/src/IrreducibleIdealSplitter.h000066400000000000000000000031161401527164200206720ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IRREDUCIBLE_IDEAL_SPLITTER_GUARD #define IRREDUCIBLE_IDEAL_SPLITTER_GUARD #include "BigTermConsumer.h" #include "Term.h" #include class IrreducibleIdealSplitter : public BigTermConsumer { public: IrreducibleIdealSplitter(BigTermConsumer& consumer); IrreducibleIdealSplitter(auto_ptr consumer); virtual void consumeRing(const VarNames& names); virtual void beginConsumingList(); virtual void beginConsuming(); virtual void consume(const Term& term); virtual void consume(const Term& term, const TermTranslator& translator); virtual void consume(const vector& term); virtual void doneConsuming(); virtual void doneConsumingList(); private: BigTermConsumer& _consumer; auto_ptr _consumerDeleter; Term _tmp; vector _bigTmp; bool _inList; }; #endif frobby-0.9.5/src/LatticeAlgs.cpp000066400000000000000000001220151401527164200165020ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "LatticeAlgs.h" #include void getThinPlanes(vector& planes, const GrobLat& lat) { planes.clear(); for (size_t a = 0; a <= lat.getNeighborCount(); ++a) { Neighbor an(lat); if (a < lat.getNeighborCount()) an = lat.getNeighbor(a); for (size_t b = 0; b < lat.getNeighborCount(); ++b) { for (size_t c = 0; c < lat.getNeighborCount(); ++c) { TriPlane plane(an, lat.getNeighbor(b), lat.getNeighbor(c)); if (plane.isLine()) continue; // points are collinear ASSERT(plane.isParallel(plane)); bool parallel = false; for (size_t p = 0; p < planes.size(); ++p) { if (plane.isParallel(planes[p])) { parallel = true; break; } } if (parallel) continue; // already got this plane bool isThin = true; for (size_t n = 0; n < lat.getNeighborCount(); ++n) { if (!plane.closeToPlane(lat.getNeighbor(n))) { isThin = false; break; } } if (isThin) planes.push_back(plane); } } } } /* void checkParallelFaces(const vector& mlfbs, const vector planes) { vector facePlanes; for (size_t m = 0; m < mlfbs.size(); ++m) { const Mlfb& mlfb = mlfbs[m]; cout << mlfb.getName() << facePlanes.size() << endl; Neighbor a = mlfb.getPoint(0); Neighbor b = mlfb.getPoint(1); Neighbor c = mlfb.getPoint(2); Neighbor d = mlfb.getPoint(3); facePlanes.push_back(TriPlane(b, c, d)); facePlanes.push_back(TriPlane(a, c, d)); facePlanes.push_back(TriPlane(a, b, d)); facePlanes.push_back(TriPlane(a, b, c)); } for (size_t i = 0; i < facePlanes.size(); ++i) { const TriPlane& plane = facePlanes[i]; bool thin = false; for (size_t p = 0; p < planes.size(); ++p) { if (plane.isParallel(planes[p])) { thin = true; break; } } if (thin) continue; size_t parallelCount = 0; for (size_t j = 0; j < facePlanes.size(); ++j) if (plane.isParallel(facePlanes[j])) {cout << ' ' << j << endl; ++parallelCount;} cout << parallelCount << ' ' << plane.getNormal() << endl; CHECK(parallelCount == 2); // not satisfied } } */ void checkPlanes(const vector& thinPlanes, const vector& dtPlanes) { CHECK(thinPlanes.size() == dtPlanes.size()); for (size_t thin = 0; thin < thinPlanes.size(); ++thin) { bool parallel = false; for (size_t dt = 0; dt < dtPlanes.size(); ++dt) { if (thinPlanes[thin].isParallel(dtPlanes[dt])) { parallel = true; break; } } CHECK(parallel); } bool found = false; for (size_t dt = 0; dt < dtPlanes.size(); ++dt) { const Plane& plane = dtPlanes[dt]; size_t sum = plane.tri.getASideMlfbs().size() + plane.tri.getBSideMlfbs().size(); if (sum == 3) found = true; /* if (plane.flatSeq.empty()) { if (sum == 4) found = true; } else { CHECK(sum == 3); found = true; } */ } CHECK(dtPlanes.size() == 6 || found); } char getPlaceCode(NeighborPlace place) { switch (place) { case InPlane: return 'P'; case UnderPlane: return 'U'; case OverPlane: return 'O'; case NoPlace: return ' '; default: return 'E'; } } size_t pushOutFacetPositive(size_t facetPushOut, const vector& rhs, const GrobLat& lat) { size_t onFacet = numeric_limits::max(); mpq_class leastEntry; for (size_t n = 0; n < lat.getNeighborCount(); ++n) { for (size_t i = 0; i < lat.getYDim(); ++i) { if (i == facetPushOut) continue; if (lat.getYMatrix()(n, i) >= rhs[i]) goto notOnFacet; } if (onFacet == numeric_limits::max() || leastEntry > lat.getYMatrix()(n, facetPushOut)) { leastEntry = lat.getYMatrix()(n, facetPushOut); onFacet = n; } notOnFacet:; } return onFacet; } size_t pushOutFacetZero(const vector& rhs, const GrobLat& lat) { size_t onFacet = numeric_limits::max(); mpq_class leastEntry; for (size_t n = 0; n < lat.getNeighborCount(); ++n) { for (size_t i = 1; i < lat.getYDim(); ++i) if (-lat.getYMatrix()(n, i) >= rhs[i]) goto notOnFacet; if (onFacet == numeric_limits::max() || leastEntry > -lat.getYMatrix()(n, 0)) { leastEntry = -lat.getYMatrix()(n, 0); onFacet = n; } notOnFacet:; } return onFacet; } void computeRhs(vector& rhs, const vector points) { ASSERT(!points.empty()); const GrobLat& lat = points[0].getGrobLat(); rhs.resize(lat.getYDim()); for (size_t var = 0; var < lat.getYDim(); ++var) { rhs[var] = points[0].getY(var); for (size_t p = 1; p < points.size(); ++p) if (rhs[var] < points[p].getY(var)) rhs[var] = points[p].getY(var); } } void Mlfb::reset(size_t offset, const vector& points) { ASSERT(!points.empty()); _points = points; _offset = offset; const GrobLat& lat = points[0].getGrobLat(); computeRhs(_rhs, points); // order to have maxima along diagonal if possible. if (getPointCount() == lat.getYDim()) { for (size_t i = 0; i < lat.getYDim(); ++i) for (size_t p = 0; p < getPointCount(); ++p) if (getPoint(p).getY(i) == getRhs()[i]) swap(_points[i], _points[p]); } // Compute MLFB index. if (getPointCount() - 1 == lat.getHDim()) { Matrix mat(getPointCount() - 1, lat.getHDim()); for (size_t point = 1; point < getPointCount(); ++point) for (size_t var = 0; var < lat.getHDim(); ++var) mat(point - 1, var) = getPoint(point).getH(var); index = determinant(mat); } if (getPointCount() == 4) { Matrix mat(4, lat.getHDim()); for (size_t point = 0; point < getPointCount(); ++point) for (size_t var = 0; var < lat.getHDim(); ++var) mat(point, var) = getPoint(point).getH(var); _isParallelogram = ::isParallelogram(mat); } else _isParallelogram = false; } void computeMlfbs(vector& mlfbs, const GrobLat& lat) { BigIdeal initialIdeal; lat.getInitialIdeal(initialIdeal); BigTermRecorder recorder; SliceParams params; SliceFacade facade(params, initialIdeal, recorder); facade.computeIrreducibleDecomposition(true); auto_ptr rhsesOwner = recorder.releaseIdeal(); BigIdeal& rhses = *rhsesOwner; ASSERT(recorder.empty()); mlfbs.clear(); mlfbs.resize(rhses.getGeneratorCount()); vector points; for (size_t i = 0; i < mlfbs.size(); ++i) { Mlfb& mlfb = mlfbs[i]; points.clear(); points.push_back(Neighbor(lat)); for (size_t gen = 0; gen < initialIdeal.getGeneratorCount(); ++gen) { for (size_t var = 0; var < initialIdeal.getVarCount(); ++var) if (initialIdeal[gen][var] > rhses[i][var]) goto skipIt; points.push_back(Neighbor(lat, gen)); skipIt:; } mlfb.reset(i, points); CHECK(rhses[i] == mlfb.getRhs()); } Matrix nullSpaceBasis; nullSpace(nullSpaceBasis, lat.getMatrix()); transpose(nullSpaceBasis, nullSpaceBasis); // the basis is the rows of NullSpaceBasis at this point. for (size_t m = 0; m < mlfbs.size(); ++m) { Mlfb& mlfb = mlfbs[m]; if (mlfb.getPointCount() != lat.getYDim()) continue; // Compute minInitialFacet. mlfb.minInitialFacet = 0; mpq_class minInitial = 0; for (size_t i = 0; i < mlfb.getPointCount(); ++i) { mpq_class initial = mlfb.getPoint(i).getY(0); if (minInitial > initial) { minInitial = initial; mlfb.minInitialFacet = i; } } // Compute dot degree. if (nullSpaceBasis.getRowCount() == 1 && lat.getYDim() == nullSpaceBasis.getColCount()) { mlfb.dotDegree = 0; for (size_t r = 0; r < nullSpaceBasis.getRowCount(); ++r) for (size_t c = 0; c < nullSpaceBasis.getColCount(); ++c) mlfb.dotDegree += nullSpaceBasis(r, c) * mlfb.getRhs()[c]; } // Compute Scarf edges. mlfb.edges.resize(lat.getYDim()); mlfb.edgeHitsFacet.resize(lat.getYDim()); for (size_t facetPushIn = 0; facetPushIn < lat.getYDim(); ++facetPushIn) { mpq_class secondLargest; size_t facetPushOut = numeric_limits::max(); for (size_t neigh = 0; neigh < lat.getYDim(); ++neigh) { mpq_class entry = 0; // neigh == 0 represents zero. if (neigh > 0) entry = mlfb.getPoint(neigh).getY(facetPushIn); if (neigh == facetPushIn) { if (entry != mlfb.getRhs()[facetPushIn]) goto skipBecauseNotGeneric; } else { if (entry == secondLargest && facetPushOut != numeric_limits::max()) goto skipBecauseNotGeneric; if (entry > secondLargest || facetPushOut == numeric_limits::max()) { secondLargest = entry; facetPushOut = neigh; } } } // ---------------------------------------------- // ** Case 1: facetPushIn > 0 and facetPushOut > 0 // // We push in facetPushIn (discarding the non-zero neighbor // previously on that facet) and hit a non-zero neighbor // that is already on the MLFB. That neighbor now instead // lies on facetPushIn and we push out facetPushOut in the // straight forward way until it hits what will be the new // neighbor on facetPushOut. // // ---------------------------------------------- // ** Case 2: facetPushIn > 0 and facetPushOut == 0 // // We push in facetPushIn (discarding the non-zero neighbor // previously on that facet) and hit zero. Zero now instead // lies on facetPushIn and we push out facetPushOut. It will // be pushing into the area on the opposite side from the // half-set of neighbors that we are looking at, so to find // the replacement neighbor to put on facetPushOut // (i.e. facet zero) we need to consider the negative of the // neighbors we have. When that neighbor -v has been found, // we need to translate the whole body by +v so that zero // will once again lie on facet zero. // // ---------------------------------------------- // ** case 3: facetPushIn == 0 and facetPushOut > 0 // // We push in facetPushIn (discarding the zero previously on // that facet) and hit a non-zero neighbor v on // facetPushOut. Then v lies on facetPushIn (i.e. facet // zero), so for the MLFB to have zero on facet 0 we need to // translate it by -v. We then relax facetPushOut to find a // replacement neighbor as in Case 1. ASSERT(facetPushIn == 0 || secondLargest >= 0); // In all cases the neighbor we hit moves to facetPushIn. vector rhs(mlfb.getRhs()); rhs[facetPushIn] = secondLargest; if (facetPushIn == 0) { // Case 3: the neighbor hit moves to facet 0 so translate // the body to make that neighbor zero. for (size_t i = 0; i < lat.getYDim(); ++i) rhs[i] -= mlfb.getPoint(facetPushOut).getY(i); } if (facetPushOut > 0) { // Case 1 or 3: push out in the usual way. size_t newNeighbor = pushOutFacetPositive(facetPushOut, rhs, lat); if (newNeighbor == numeric_limits::max()) goto skipBecauseNotGeneric; rhs[facetPushOut] = lat.getYMatrix()(newNeighbor, facetPushOut); } if (facetPushOut == 0) { // Case 2: push out into negative neighbors size_t newNeighbor = pushOutFacetZero(rhs, lat); if (newNeighbor == numeric_limits::max()) goto skipBecauseNotGeneric; for (size_t i = 0; i < lat.getYDim(); ++i) rhs[i] += lat.getYMatrix()(newNeighbor, i); rhs[0] = 0; } // Find the MLFB with the right hand side that we have // computed. for (size_t mi = 0; mi < mlfbs.size(); ++mi) { if (mlfbs[mi].getRhs() == rhs) { mlfb.edges[facetPushIn] = &(mlfbs[mi]); mlfb.edgeHitsFacet[facetPushIn] = facetPushOut; goto foundMatch; } } goto skipBecauseNotGeneric; foundMatch:; } continue; skipBecauseNotGeneric: mlfb.edges.clear(); mlfb.edgeHitsFacet.clear(); } } SeqPos nextInSeq(SeqPos pos) { size_t pushIn; for (pushIn = 0;; ++pushIn) { ASSERT(pushIn < 4); if (pushIn != pos.fixFacet1 && pushIn != pos.fixFacet2 && pushIn != pos.comingFromFacet) break; } size_t hits = pos.mlfb->getHitsFacet(pushIn); ASSERT(hits != pushIn); SeqPos next = pos; next.mlfb = pos.mlfb->getEdge(pushIn); next.comingFromFacet = hits; if (pos.fixFacet1 == hits) next.fixFacet1 = pushIn; else if (pos.fixFacet2 == hits) next.fixFacet2 = pushIn; next.order(); return next; } SeqPos prevInSeq(SeqPos pos) { return nextInSeq(pos.getReverse()).getReverse(); } size_t computeFlatIntervalCount(const vector& flatSeq) { if (flatSeq.empty()) return 0u; const Mlfb& leftFlat = *(flatSeq.front().mlfb); size_t sumFacet = leftFlat.getMinInitialFacet(); size_t aFacet = 4; for (size_t j = 0; j < 4; ++j) { if (j != 0 && j != sumFacet) { aFacet = j; break; } } CHECK(aFacet != 4); size_t subSeqCount = 1; for (size_t i = 1; i < flatSeq.size() - 1; ++i) { const Mlfb& prev = *(flatSeq[i - 1].mlfb); const Mlfb& flat = *(flatSeq[i].mlfb); if (flat.getHitsFacet(aFacet) != prev.getHitsFacet(aFacet)) ++subSeqCount; } return subSeqCount; } void computeFlatSeq(vector& seq, const vector& mlfbs, const Plane& plane) { // ** compute left most flat const Mlfb* leftFlat = 0; for (size_t m = 0; m < mlfbs.size(); ++m) { if (!plane.isFlat(mlfbs[m])) continue; const Mlfb* toLeft = mlfbs[m].getEdge(0); if (!plane.isFlat(*toLeft)) { CHECK(leftFlat == 0 || leftFlat == toLeft); // left flat unique leftFlat = &(mlfbs[m]); } } seq.clear(); if (leftFlat == 0) { ASSERT(!plane.hasFlat()); return; } // ** go right as long as there is a flat there SeqPos pos; pos.mlfb = leftFlat; while (plane.isFlat(*pos.mlfb)) { ASSERT(seq.empty() || seq.back().mlfb != pos.mlfb); seq.push_back(pos); bool moved = false; for (size_t facet = 1; facet < 4; ++facet) { if (pos.mlfb->getEdge(facet)->getEdge(0) == pos.mlfb) { pos.mlfb = pos.mlfb->getEdge(facet); moved = true; break; } } if (!moved) break; } } void computePlanes(vector& planes, const GrobLat& lat, vector& mlfbs) { const size_t neighborCount = lat.getNeighborCount(); for (size_t gen1 = 0; gen1 < neighborCount; ++gen1) { for (size_t gen2 = gen1 + 1; gen2 < neighborCount; ++gen2) { Neighbor a = lat.getNeighbor(gen1); Neighbor b = lat.getNeighbor(gen2); Neighbor sum = lat.getSum(a, b); if (!sum.isValid()) continue; if (!lat.isPointFreeBody(a, sum)) continue; if (!lat.isPointFreeBody(b, sum)) continue; if (lat.isPointFreeBody(a, b, sum)) continue; // only looking for non-flat double triangles right now Matrix rowAB(2, lat.getHDim()); copyRow(rowAB, 0, lat.getHMatrix(), gen1); copyRow(rowAB, 1, lat.getHMatrix(), gen2); planes.push_back(Plane(a, b, sum, mlfbs, lat)); Plane& plane = planes.back(); plane.rowAB = rowAB; nullSpace(plane.nullSpaceBasis, rowAB); Matrix prod; product(prod, lat.getHMatrix(), plane.nullSpaceBasis); plane.neighborPlace.resize(lat.getNeighborCount()); for (size_t gen = 0; gen < lat.getNeighborCount(); ++gen) { mpq_class& value = prod(gen, 0); NeighborPlace place = InPlane; if (value < 0) place = UnderPlane; else if (value > 0) place = OverPlane; plane.neighborPlace[gen] = place; } transpose(plane.nullSpaceBasis); } } for (size_t p = 0; p < planes.size(); ++p) { Plane& plane = planes[p]; for (size_t i = 0; i < mlfbs.size(); ++i) plane.typeCounts[plane.getType(mlfbs[i])] += 1; computeFlatSeq(plane.flatSeq, mlfbs, plane); computePivots(plane.pivots, mlfbs, plane, plane.flatSeq); plane.flatIntervalCount = computeFlatIntervalCount(plane.flatSeq); } } Tri::Tri(Neighbor a, Neighbor b, Neighbor sum, const vector& mlfbs, const GrobLat& lat): _a(a), _b(b), _sum(sum) { // find MLFBs containing {0,a,a+b} for (size_t m = 0; m < mlfbs.size(); ++m) if (mlfbs[m].hasPoint(a) && mlfbs[m].hasPoint(sum)) _aSideMlfbs.push_back(&(mlfbs[m])); // find MLFBs containing {0,b,a+b} for (size_t m = 0; m < mlfbs.size(); ++m) if (mlfbs[m].hasPoint(b) && mlfbs[m].hasPoint(sum)) _bSideMlfbs.push_back(&(mlfbs[m])); // find additional neighbors in the body defined by {0,a,b,a+b} vector points; points.push_back(Neighbor(lat)); // add zero; points.push_back(a); points.push_back(b); points.push_back(sum); vector rhs; computeRhs(rhs, points); _boundary.push_back(Neighbor(lat)); // add zero for (size_t n = 0; n < lat.getNeighborCount(); ++n) { Neighbor neighbor = lat.getNeighbor(n); bool boundary = true; bool interior = true; for (size_t i = 0; i < rhs.size(); ++i) { if (neighbor.getY(i) == rhs[i]) interior = false; else if (neighbor.getY(i) > rhs[i]) { interior = false; boundary = false; break; } } if (interior) _interior.push_back(neighbor); else if (boundary) _boundary.push_back(neighbor); } } void check0Graph(const vector& mlfbs) { vector ok(mlfbs.size()); bool sawFlat = false; for (size_t i =0 ; i < mlfbs.size(); ++i) { ok[i] = (mlfbs[i].index == 0); if (ok[i]) sawFlat = true; } if (!sawFlat) return; while (true) { bool done = true; for (size_t i = 0; i < mlfbs.size(); ++i) { if (!ok[i]) { size_t to = mlfbs[i].getEdge(0)->getOffset(); if (ok[to]) { done = false; ok[i] = true; } } } if (done) break; } for (size_t i = 0; i < mlfbs.size(); ++i) { CHECK(ok[i]); } } void checkMlfbs(const vector& mlfbs, const GrobLat& lat) { CHECK(mlfbs.size() == lat.getNeighborCount() - 1); for (size_t m = 0; m < mlfbs.size(); ++m) { CHECK(mlfbs[m].isParallelogram() == (mlfbs[m].index == 0)); } } void checkDoubleTrianglePlanes(const vector& planes, const GrobLat& lat, const vector& mlfbs) { // Check no two planes are parallel. Otherwise there would a plane // with two non-flat double triangles in it. for (size_t p1 = 0; p1 < planes.size(); ++p1) { for (size_t p2 = 0; p2 < p1; ++p2) { CHECK(!hasSameRowSpace(planes[p1].rowAB, planes[p2].rowAB)); } } // Check that all parallelograms lie in a plane. Otherwise there // would be a plane defined by a flat that does not have a double // triangle in it. for (size_t m = 0; m < mlfbs.size(); ++m) { if (mlfbs[m].isParallelogram()) { bool liesInSomePlane = false; for (size_t p = 0; p < planes.size(); ++p) { if (planes[p].isFlat(mlfbs[m])) { liesInSomePlane = true; break; } } CHECK(liesInSomePlane); } } bool multipleIntervals = false; bool anyFlat = false; bool flatWith4Pivots = false; for (size_t p = 0; p < planes.size(); ++p) { if (planes[p].flatIntervalCount > 1) multipleIntervals = true; if (planes[p].hasFlat()) { anyFlat = true; if (planes[p].pivots.size() == 4) flatWith4Pivots = true; } } if (multipleIntervals) { ASSERT(anyFlat); //CHECK(flatWith4Pivots); CHECK(planes.size() == 1); } if (planes.size() == 6) { CHECK(!anyFlat); CHECK(planes.size() == 6); for (size_t p = 0; p < planes.size(); ++p) { CHECK(planes[p].pivots.size() == 4); } CHECK(lat.getNeighborCount() == 7); CHECK(mlfbs.size() == 6); } if (anyFlat) { //check0Graph(mlfbs); //CHECK(flatWith4Pivots); CHECK(planes.size() < 6); } } void checkPlane(const Plane& plane, const vector& mlfbs) { for (size_t i = 0; i < mlfbs.size(); ++i) { if (plane.isPivot(mlfbs[i])) { CHECK(mlfbs[i].index == -1 || mlfbs[i].index == 1); } else if (plane.isFlat(mlfbs[i])) { CHECK(mlfbs[i].index == 0); } } } /** Returns the facet to push in of pivot to get to a flat. Pivot must be a pivot. */ size_t pivotToFlatFacet(const Mlfb& pivot, const Plane& plane) { size_t facet = 4; for (size_t push = 0; push < 4; ++push) { if (plane.isFlat(*pivot.getEdge(push))) { CHECK(facet == 4); // adjacent to no more than one flat facet = push; } } CHECK(facet != 4); // adjacent to at least one flat return facet; } bool disjointSeqs(const vector& a, const vector& b) { for (size_t i = 0; i < a.size(); ++i) for (size_t j = 0; j < b.size(); ++j) if (a[i].mlfb == b[j].mlfb) return false; return true; } void computePivots(vector& pivots, const vector& mlfbs, const Plane& plane, const vector& flatSeq) { pivots.clear(); for (size_t m = 0; m < mlfbs.size(); ++m) if (plane.isPivot(mlfbs[m])) pivots.push_back(&(mlfbs[m])); if (pivots.size() != 4 || flatSeq.empty()) return; // no idea about proper order in this case pivots.clear(); // use flat sequence to impose correct order size_t sumFacet = flatSeq.front().mlfb->getMinInitialFacet(); pivots.push_back(flatSeq.front().mlfb->getEdge(0)); pivots.push_back(flatSeq.front().mlfb->getEdge(sumFacet)); sumFacet = flatSeq.back().mlfb->getMinInitialFacet(); for (size_t i = 0; i < 4; ++i) if (i != 0 && i != sumFacet) pivots.push_back(flatSeq.back().mlfb->getEdge(i)); } void computeSeqs(vector >& left, vector >& right, const vector& mlfbs, const Plane& plane) { vector > seqs; for (size_t m = 0; m < mlfbs.size(); ++m) { if (!plane.isPivot(mlfbs[m])) continue; const Mlfb& p = mlfbs[m]; for (size_t i = 0; i < 4; ++i) { const Mlfb& e = *(p.getEdge(i)); if (plane.isPivot(e) || plane.isFlat(e)) continue; bool doneBefore = false; for (size_t s = 0; s < seqs.size(); ++s) { if (*(seqs[s][seqs[s].size() - 1].mlfb) == p && *(seqs[s][seqs[s].size() - 2].mlfb) == e) { doneBefore = true; break; } } if (doneBefore) continue; size_t prevFacet; for (prevFacet = 0; prevFacet < 4; ++prevFacet) if (*(e.getEdge(prevFacet)) == p) break; ASSERT(prevFacet < 4); NeighborPlace place = plane.getPlace(e.getPoint(prevFacet)); size_t nextFacet; for (nextFacet = 0; nextFacet < 4; ++nextFacet) { if (nextFacet != prevFacet && place == plane.getPlace(e.getPoint(nextFacet))) break; } SeqPos pos = prevInSeq(SeqPos(&e, nextFacet, prevFacet)); seqs.resize(seqs.size() + 1); vector& seq = seqs.back(); seq.push_back(pos); do { pos = nextInSeq(pos); seq.push_back(pos); } while (!(plane.isPivot(*pos.mlfb))); } } CHECK(!seqs.empty()); ASSERT(!seqs.front().empty()); // now we've got all the sequences. Time to look at the sides. stack pending; // put a side pivot on the left arbitrarily and explore the // connected component vector leftSeen(mlfbs.size()); pending.push(seqs.front().front().mlfb); while (!pending.empty()) { const Mlfb& m = *pending.top(); pending.pop(); if (leftSeen[m.getOffset()]) continue; leftSeen[m.getOffset()] = true; for (size_t s = 0; s < seqs.size(); ++s) { if (*(seqs[s].front().mlfb) == m) pending.push(seqs[s].back().mlfb); if (*(seqs[s].back().mlfb) == m) pending.push(seqs[s].front().mlfb); } } // find a non-left side pivot size_t m; for (m = 0; m < mlfbs.size(); ++m) if (plane.isSidePivot(mlfbs[m]) && !leftSeen[m]) break; CHECK(m < mlfbs.size()); // put the non-left pivot on the right and explore the connected // component vector rightSeen(mlfbs.size()); pending.push(&(mlfbs[m])); while (!pending.empty()) { const Mlfb& pm = *pending.top(); pending.pop(); if (rightSeen[pm.getOffset()]) continue; rightSeen[pm.getOffset()] = true; for (size_t s = 0; s < seqs.size(); ++s) { if (*(seqs[s].front().mlfb) == pm) pending.push(seqs[s].back().mlfb); if (*(seqs[s].back().mlfb) == pm) pending.push(seqs[s].front().mlfb); } } left.clear(); right.clear(); for (size_t s = 0; s < seqs.size(); ++s) { const size_t offset = seqs[s].front().mlfb->getOffset(); if (leftSeen[offset]) { CHECK(!rightSeen[offset]); left.push_back(seqs[s]); } else if (rightSeen[offset]) right.push_back(seqs[s]); } } void computePivotSeqs(vector >& seqs, const Mlfb& pivot, const Plane& plane) { ASSERT(plane.pivots.size() == 4); ASSERT(plane.isPivot(pivot)); size_t flatFacet = pivotToFlatFacet(pivot, plane); seqs.clear(); for (size_t facet = 0; facet < 4; ++facet) { if (facet == flatFacet) continue; seqs.resize(seqs.size() + 1); vector& seq = seqs.back(); SeqPos pos(&pivot, facet, flatFacet); seq.push_back(pos); do { pos = nextInSeq(pos); seq.push_back(pos); } while (!(plane.isPivot(*pos.mlfb))); } } void checkSeq(vector& seenOnSide, const vector& seq, const Plane& plane) { CHECK(seq.size() >= 3); // each seq must have at least one 2-2. CHECK(plane.isSidePivot(*(seq.front().mlfb))); // start is a pivot CHECK(plane.isSidePivot(*(seq.back().mlfb))); // end is a pivot CHECK(seq.front().mlfb != seq.back().mlfb); // no loops for (size_t m = 1; m < seq.size() - 1 ; ++m) { const Mlfb* prev = seq[m - 1].mlfb; const Mlfb* current = seq[m].mlfb; const Mlfb* next = seq[m + 1].mlfb; const SeqPos& pos = seq[m]; // ** Check on 2-2 appears twice and update seenOnSide CHECK(!seenOnSide[current->getOffset()]); seenOnSide[current->getOffset()] = true; // ** middle elements are 2-2s. CHECK(plane.is22(*current)); // ** SeqPos fields agrees with sequence order size_t prevFacet = pos.getBackFacet(); size_t nextFacet = pos.getForwardFacet(); CHECK(current->getEdge(prevFacet) == prev); CHECK(current->getEdge(nextFacet) == next); // ** in-coming and out-going facets are on same plane CHECK(plane.getPlace(current->getPoint(prevFacet)) == plane.getPlace(current->getPoint(nextFacet))); } } void checkSide(vector& pivotOnSide, const vector >& side, const Plane& plane, const vector& mlfbs) { CHECK(side.size() == 2 || side.size() == 3); vector seenOnSide(mlfbs.size()); for (size_t s = 0; s < side.size(); ++s){ // check sequence local properties and update seen checkSeq(seenOnSide, side[s], plane); // compute onSide pivotOnSide[side[s].front().mlfb->getOffset()] = true; pivotOnSide[side[s].back().mlfb->getOffset()] = true; } /* // must have seen all 2-2s on this side. for (size_t m = 0; m < mlfbs.size(); ++m) if (plane.is22(mlfbs[m])) CHECK(seenOnSide[m]);*/ // 2,3 or 4 sidepivots size_t sidePivots = 0; for (size_t m = 0; m < mlfbs.size(); ++m) if (pivotOnSide[m]) ++sidePivots; CHECK(sidePivots == 2 || sidePivots == 3 || sidePivots == 4); } void checkSeqs(const vector >& left, const vector >& right, const Plane& plane, const vector& mlfbs) { vector isLeftPivot(mlfbs.size()); checkSide(isLeftPivot, left, plane, mlfbs); vector isRightPivot(mlfbs.size()); checkSide(isRightPivot, right, plane, mlfbs); // all side pivots are on one and only one side for (size_t m = 0; m < mlfbs.size(); ++m) { if (plane.isSidePivot(mlfbs[m])) CHECK((isLeftPivot[m] + isRightPivot[m]) == 1); else CHECK((isLeftPivot[m] + isRightPivot[m]) == 0); } } void checkMiddle(const Plane& plane, const vector& mlfbs) { // ** check that the subgraph of pivots and flat is connected. vector seen(mlfbs.size()); stack pending; // find a pivot or flat size_t m; for (m = 0; m < mlfbs.size(); ++m) if (plane.isFlat(mlfbs[m]) || plane.isPivot(mlfbs[m])) break; ASSERT(m < mlfbs.size()); // explore the graph of pivots and flats that is connected to the // one we found. pending.push(&(mlfbs[m])); while (!pending.empty()) { const Mlfb& mlfb = *(pending.top()); pending.pop(); if (seen[mlfb.getOffset()]) continue; seen[mlfb.getOffset()] = true; for (size_t i = 0; i < 4; ++i) pending.push(mlfb.getEdge(i)); } // check that we have reached all pivots and flats for (m = 0; m < mlfbs.size(); ++m) if (plane.isFlat(mlfbs[m]) || plane.isPivot(mlfbs[m])) CHECK(seen[m]); } void checkGraphOnPlane(const Plane& plane, const vector& mlfbs) { // no flat is adjacent to a 2-2 for (size_t m = 0; m < mlfbs.size(); ++m) { const Mlfb& mlfb = mlfbs[m]; if (plane.isFlat(mlfb)) for (size_t i = 0; i < 4; ++i) CHECK(!plane.is22(*(mlfb.getEdge(i)))); } // parallelograms can't be flats and non-flat parallelograms are not // adjacent to a flat for (size_t m = 0; m < mlfbs.size(); ++m) { const Mlfb& mlfb = mlfbs[m]; if (mlfb.isParallelogram()) { CHECK(!plane.isPivot(mlfb)); if (!plane.isFlat(mlfb)) { for (size_t i = 0; i < 4; ++i) { const Mlfb& adj = *(mlfb.getEdge(i)); CHECK(!plane.isFlat(adj)); } } } } } void checkDoubleTriangle(const Plane& plane, const vector& mlfbs) { size_t aSideCount = plane.tri.getASideMlfbs().size(); size_t bSideCount = plane.tri.getBSideMlfbs().size(); CHECK(aSideCount == 1 || aSideCount == 2); CHECK(bSideCount == 1 || bSideCount == 2); for (size_t m = 0; m < aSideCount; ++m) { const Mlfb& mlfb = *plane.tri.getASideMlfbs()[m]; CHECK(plane.isFlat(mlfb) || plane.isPivot(mlfb)); } for (size_t m = 0; m < bSideCount; ++m) { const Mlfb& mlfb = *plane.tri.getBSideMlfbs()[m]; CHECK(plane.isFlat(mlfb) || plane.isPivot(mlfb)); } } void checkGraph(const vector& mlfbs) { // All non-parallelograms have out-degree 2. Parallelograms have // out-degree equal to 4 minus the number of other adjacent // parallelograms. for (size_t m = 0; m < mlfbs.size(); ++m) { const Mlfb& mlfb = mlfbs[m]; set adjParas; set adjNodes; for (size_t i = 0; i < 4; ++i) { const Mlfb& adj = *(mlfb.getEdge(i)); adjNodes.insert(adj.getOffset()); if (adj.isParallelogram()) adjParas.insert(adj.getOffset()); } const size_t outDegree = adjNodes.size(); if (!mlfb.isParallelogram()) CHECK(outDegree == 4); else CHECK(outDegree == 4 - adjParas.size()); } // if there is an edge (a,b) then there is also an edge (b,a). for (size_t m = 0; m < mlfbs.size(); ++m) { const Mlfb& mlfb = mlfbs[m]; for (size_t i = 0; i < 4; ++i) { size_t hitsFacet = mlfb.getHitsFacet(i); const Mlfb& adj = *(mlfb.getEdge(i)); CHECK(mlfb == *(adj.getEdge(hitsFacet))); } } } void checkPivotSeqs(vector >& pivotSeqs, const Plane& plane, const vector& mlfbs, const vector& flatSeq) { CHECK(pivotSeqs.size() == 3); CHECK(pivotSeqs[0].size() >= 2); const Mlfb* pivot1 = pivotSeqs[0].front().mlfb; const Mlfb* pivot2 = pivotSeqs[0].back().mlfb; CHECK(plane.isPivot(*pivot1)); CHECK(plane.isPivot(*pivot2)); bool foundPlace = false; NeighborPlace place; for (size_t i = 0; i < 3; ++i) { CHECK(pivotSeqs[i].size() >= 2); // ** all sequences on same side between same pivots CHECK((pivotSeqs[i].front().mlfb == pivot1 && pivotSeqs[i].back().mlfb == pivot2) || (pivotSeqs[i].front().mlfb == pivot2 && pivotSeqs[i].back().mlfb == pivot1)); for (size_t j = 1; j < pivotSeqs[i].size() - 1; ++j) { const Mlfb* prev = pivotSeqs[i][j - 1].mlfb; const Mlfb* current = pivotSeqs[i][j].mlfb; const Mlfb* next = pivotSeqs[i][j + 1].mlfb; // ** middle mlfbs are 2-2's CHECK(plane.getType(*current) == 2); // ** SeqPos agrees with sequence order const SeqPos& pos = pivotSeqs[i][j]; size_t prevFacet = pos.getBackFacet(); size_t nextFacet = pos.getForwardFacet(); CHECK(current->getEdge(prevFacet) == prev); CHECK(current->getEdge(nextFacet) == next); // ** in-coming and out-going facets are on same plane CHECK(plane.getPlace(current->getPoint(prevFacet)) == plane.getPlace(current->getPoint(nextFacet))); // ** active facets are the same for all sequences on same side if (!foundPlace) { place = plane.getPlace(current->getPoint(prevFacet)); } CHECK(place == plane.getPlace(current->getPoint(prevFacet))); } } // ** Check that the sequences are a partition of the set of 2-2 mlfbs vector seen(mlfbs.size()); for (size_t i = 0; i < 3; ++i) { for (size_t j = 1; j < pivotSeqs[i].size() - 1; ++j) { CHECK(!seen[pivotSeqs[i][j].mlfb->getOffset()]); // sequences must be disjoint seen[pivotSeqs[i][j].mlfb->getOffset()] = true; } } /* for (size_t i = 0; i < mlfbs.size(); ++i) { if (plane.isPivot(mlfbs[i]) || plane.isFlat(mlfbs[i])) continue; CHECK(seen[i]); // all 2-2s in some sequence }*/ } void checkNonSums(const GrobLat& lat) { const vector& nonSums = lat.getNonSums(); CHECK(nonSums.size() == 3 || nonSums.size() == 4); if (nonSums.size() == 3) { Matrix mat(3, 3); for (size_t ns = 0; ns < 3; ++ns) for (size_t var = 0; var < 3; ++var) mat(ns, var) = nonSums[ns].getH(var); mpq_class det = determinant(mat); CHECK(det == 1 || det == -1); } else { Matrix mat(4, 3); for (size_t ns = 0; ns < 4; ++ns) for (size_t var = 0; var < 3; ++var) mat(ns, var) = nonSums[ns].getY(var); CHECK(isParallelogram(mat)); return; // not checking this as it seems to not be true mpq_class areaSq = getParallelogramAreaSq(mat); CHECK(areaSq == 1); } } void checkFlatSeq(const vector& flatSeq, const GrobLat& lat, const Plane& plane) { if (flatSeq.empty()) return; size_t sumf = flatSeq.front().mlfb->getMinInitialFacet(); CHECK(sumf != 0); size_t af = 4; for (size_t j = 0; j < 4; ++j) { if (j != 0 && j != sumf) { af = j; break; } } size_t bf = 4; for (size_t j = 0; j < 4; ++j) { if (j != 0 && j != sumf && j != af) { bf = j; break; } } for (size_t i = 0; i < flatSeq.size(); ++i) { const Mlfb& flat = *(flatSeq[i].mlfb); Neighbor sum = flat.getPoint(sumf); Neighbor a = flat.getPoint(af); Neighbor b = flat.getPoint(bf); CHECK(sumf == flat.getMinInitialFacet()); CHECK(lat.getSum(a, b) == sum); // right-going edges if (i < flatSeq.size() - 1) { // not at right end CHECK(flat.getEdge(af) == flat.getEdge(bf)); const Mlfb& next = *(flatSeq[i + 1].mlfb); CHECK(flat.getEdge(af) == &next); if (flat.getHitsFacet(af) == sumf) { CHECK(flat.getHitsFacet(bf) == 0); CHECK(next.hasPoint(b)); CHECK(next.hasPoint(sum)); CHECK(next.hasPoint(lat.getSum(sum, b))); } else { CHECK(flat.getHitsFacet(af) == 0); CHECK(flat.getHitsFacet(bf) == sumf); CHECK(next.hasPoint(a)); CHECK(next.hasPoint(sum)); CHECK(next.hasPoint(lat.getSum(sum, a))); } } else { // at right end CHECK(plane.isPivot(*flat.getEdge(af))); CHECK(plane.isPivot(*flat.getEdge(bf))); CHECK(flat.getEdge(af) != flat.getEdge(bf)); } // left-going edges if (i > 0) { // not at left end CHECK(flat.getEdge(0) == flat.getEdge(sumf)); const Mlfb& prev = *(flatSeq[i - 1].mlfb); CHECK(flat.getEdge(0) == &prev); if (flat.getHitsFacet(0) == af) { CHECK(flat.getHitsFacet(sumf) == bf); } else { CHECK(flat.getHitsFacet(0) == bf); CHECK(flat.getHitsFacet(sumf) == af); } } else { // at left end CHECK(plane.isPivot(*flat.getEdge(0))); CHECK(plane.isPivot(*flat.getEdge(sumf))); CHECK(flat.getEdge(0) != flat.getEdge(sumf)); } } } void checkPlaneTri(const GrobLat& lat, const vector& mlfbs, const vector& pivots, const Plane& plane) { const Tri& tri = plane.tri; Neighbor a = tri.getA(); Neighbor b = tri.getB(); Neighbor sum = tri.getSum(); // ** tri is not a flat for (size_t i = 0; i < mlfbs.size(); ++i) { if (plane.isFlat(mlfbs[i])) { CHECK(!mlfbs[i].hasPoint(a) || !mlfbs[i].hasPoint(b) || !mlfbs[i].hasPoint(sum)); } } // ** find unique non-flat MLFB with {0,a,a+b} const Mlfb* mlfbA = 0; for (size_t i = 0; i < mlfbs.size(); ++i) { if (!plane.isFlat(mlfbs[i]) && mlfbs[i].hasPoint(a) && mlfbs[i].hasPoint(sum)) { CHECK(mlfbA == 0); mlfbA = &(mlfbs[i]); } } CHECK(mlfbA != 0); // ** find unique non-flat MLFB with {0,b,a+b} const Mlfb* mlfbB = 0; for (size_t i = 0; i < mlfbs.size(); ++i) { if (!plane.isFlat(mlfbs[i]) && mlfbs[i].hasPoint(b) && mlfbs[i].hasPoint(sum)) { CHECK(mlfbB == 0); mlfbB = &(mlfbs[i]); } } CHECK(mlfbB != 0); // ** both parts must be pivots CHECK(plane.isPivot(*mlfbA)); CHECK(plane.isPivot(*mlfbB)); // ** the two pivots must be on the left CHECK((mlfbA == pivots[0] && mlfbB == pivots[1]) || (mlfbA == pivots[1] && mlfbB == pivots[0])); } const char* getEdgePos(size_t index) { switch (index) { case 0: return "sw"; case 1: return "se"; case 2: return "ne"; case 3: return "nw"; default: ASSERT(false); return "ERROR"; } } mpq_class getIndexSum(const vector& mlfbs) { mpq_class sum; for (size_t m = 0; m < mlfbs.size(); ++m) sum += mlfbs[m].index; return sum; } SeqPos::SeqPos() {} SeqPos::SeqPos(const Mlfb* mlfbParam, size_t nextFacet, size_t previousFacet) { ASSERT(mlfbParam != 0); ASSERT(nextFacet != previousFacet); ASSERT(nextFacet < 4); ASSERT(previousFacet < 4); mlfb = mlfbParam; comingFromFacet = previousFacet; for (size_t f = 0; f < 4; ++f) if (f != previousFacet && f != nextFacet) fixFacet1 = f; for (size_t f = 0; f < 4; ++f) if (f != previousFacet && f != nextFacet && f != fixFacet1) fixFacet2 = f; } size_t SeqPos::getForwardFacet() const { for (size_t i = 0; ; ++i) { ASSERT(i < 4); if (i != fixFacet1 && i != fixFacet2 && i != comingFromFacet) return i; } } size_t SeqPos::getBackFacet() const { return comingFromFacet; } SeqPos SeqPos::getReverse() const { size_t to; for (to = 0; to < 4; ++to) { if (to != fixFacet1 && to != fixFacet2 && to != comingFromFacet) break; } ASSERT(to != 4); SeqPos reverse = *this; reverse.comingFromFacet = to; return reverse; } void SeqPos::order() { if (fixFacet1 > fixFacet2) swap(fixFacet1, fixFacet2); } bool SeqPos::operator<(const SeqPos& pos) const { if (mlfb->getOffset() < pos.mlfb->getOffset()) return true; if (mlfb->getOffset() > pos.mlfb->getOffset()) return false; if (fixFacet1 < pos.fixFacet1) return true; if (fixFacet1 > pos.fixFacet1) return false; if (fixFacet2 < pos.fixFacet2) return true; if (fixFacet2 > pos.fixFacet2) return false; if (comingFromFacet < pos.comingFromFacet) return true; if (comingFromFacet > pos.comingFromFacet) return false; return false; } Neighbor::Neighbor(): _lat(0), _row(0) { } Neighbor::Neighbor(const GrobLat& lat): _lat(&lat), _row(lat.getNeighborCount() + 1) { } Neighbor::Neighbor(const GrobLat& lat, const size_t row): _lat(&lat), _row(row) { } const mpq_class& Neighbor::getH(size_t i) const { ASSERT(isValid()); ASSERT(i < getHDim()); if (isZero()) return _lat->getZero(); else return _lat->getHMatrix()(_row, i); } size_t Neighbor::getHDim() const { ASSERT(isValid()); return _lat->getHDim(); } const mpq_class& Neighbor::getY(size_t i) const { ASSERT(isValid()); ASSERT(i < getYDim()); if (isZero()) return _lat->getZero(); else return _lat->getYMatrix()(_row, i); } size_t Neighbor::getYDim() const { ASSERT(isValid()); return _lat->getYDim(); } bool Neighbor::isZero() const { ASSERT(isValid()); return _row == _lat->getNeighborCount() + 1; } bool Neighbor::isValid() const { return _lat != 0; } size_t Plane::getTypeCount(size_t type) const { map::const_iterator it = typeCounts.find(type); if (it == typeCounts.end()) return 0u; else return it->second; } size_t Plane::getMaxType() const { if (typeCounts.empty()) return 0u; else return typeCounts.rbegin()->first; } NeighborPlace Plane::getPlace(Neighbor neighbor) const { if (neighbor.isZero()) return InPlane; ASSERT(neighbor.getRow() < neighborPlace.size()); return neighborPlace[neighbor.getRow()]; } bool Plane::inPlane(Neighbor neighbor) const { return getPlace(neighbor) == InPlane; } bool Plane::isPivot(const Mlfb& mlfb) const { const size_t type = getType(mlfb); return type == 1 || type == 3; } bool Plane::isSidePivot(const Mlfb& mlfb) const { if (!isPivot(mlfb)) return false; for (size_t i = 0; i < 4; ++i) if (is22(*(mlfb.getEdge(i)))) return true; return false; } bool Plane::is22(const Mlfb& mlfb) const { const size_t type = getType(mlfb); return type == 2; } bool Plane::isFlat(const Mlfb& mlfb) const { return getType(mlfb) == 4; } bool Neighbor::isSpecial() const { ASSERT(isValid()); for (size_t i = 1; i < _lat->getYDim(); ++i) if (getY(i) <= 0) return false; return true; } bool Neighbor::isGenerator() const { if (isZero()) return false; else return !_lat->isSum(*this); } size_t Plane::getType(const Mlfb& mlfb) const { size_t type = 0; for (size_t i = 0; i < mlfb.getPointCount(); ++i) if (inPlane(mlfb.getPoint(i))) ++type; return type; } string Neighbor::getName() const { if (isZero()) return "zero"; if (!isValid()) return "none"; ostringstream name; name << 'n' << (getRow() + 1); if (isSpecial()) name << 's'; if (isGenerator()) name << 'g'; return name.str(); } GrobLat::GrobLat(const Matrix& matrix, const SatBinomIdeal& ideal) { _ideal = ideal; _ideal.getMatrix(_y); // transpose in preparation for solve transpose(_y); transpose(_mat, matrix); solve(_h, _mat, _y); // un-transpose transpose(_mat); transpose(_y); transpose(_h); _isSumRow.resize(getNeighborCount()); for (size_t i = 0; i < getNeighborCount(); ++i) { for (size_t j = 0; j < i; ++j) { Neighbor sum = getSum(getNeighbor(i), getNeighbor(j)); if (sum.isValid()) _isSumRow[sum.getRow()] = true; } } _nonSums.clear(); for (size_t i = 0; i < _isSumRow.size(); ++i) if (!_isSumRow[i]) _nonSums.push_back(getNeighbor(i)); } frobby-0.9.5/src/LatticeAlgs.h000066400000000000000000000330011401527164200161430ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef LATTICE_ALGS_GUARD #define LATTICE_ALGS_GUARD #include "SatBinomIdeal.h" #include "IOFacade.h" #include "Scanner.h" #include "IOHandler.h" #include "DataType.h" #include "BigIdeal.h" #include "MsmStrategy.h" #include "TermTranslator.h" #include "TranslatingTermConsumer.h" #include "DebugStrategy.h" #include "Matrix.h" #include "BigTermRecorder.h" #include "SliceParams.h" #include "SliceFacade.h" #include #include #include #include #include #include // Computations and data structures on lattices. // Support for LatticeAnalyzeAction. #include // wrapped in do .. while(false) to make it act like a single statement. #define CHECK(X) \ do { \ if (!(X)) { \ cout << "Check condition on line " \ << __LINE__ << " of file " << __FILE__ \ << " not satisfied:\n "#X << endl; \ exit(1); \ } \ } while (false) enum NeighborPlace { InPlane, UnderPlane, OverPlane, NoPlace }; char getPlaceCode(NeighborPlace place); class Mlfb; struct SeqPos { SeqPos(); SeqPos(const Mlfb* mlfb, size_t nextFacet, size_t previousFacet); size_t getForwardFacet() const; size_t getBackFacet() const; SeqPos getReverse() const; void order(); bool operator<(const SeqPos& pos) const; const Mlfb* mlfb; size_t fixFacet1; size_t fixFacet2; size_t comingFromFacet; }; class GrobLat; class Neighbor { public: Neighbor(); // invalid Neighbor(const GrobLat& lat); // zero Neighbor(const GrobLat& lat, const size_t row); // row of lat Neighbor& operator=(const Neighbor& neighbor) { _lat = neighbor._lat; _row = neighbor._row; return *this; } bool operator==(const Neighbor& neighbor) const { return _lat == neighbor._lat && getRow() == neighbor.getRow(); } const mpq_class& getH(size_t i) const; size_t getHDim() const; const mpq_class& getY(size_t i) const; size_t getYDim() const; size_t getRow() const {return _row;} bool isZero() const; bool isValid() const; bool isSpecial() const; bool isGenerator() const; string getName() const; const GrobLat& getGrobLat() const {return *_lat;} private: const GrobLat* _lat; size_t _row; }; /** A lattice with associated Grobner basis/neighbors. */ class GrobLat { public: GrobLat(const Matrix& matrix, const SatBinomIdeal& ideal); Neighbor getNeighbor(size_t row) const { ASSERT(row < getNeighborCount()); return Neighbor(*this, row); } size_t getNeighborCount() const { ASSERT(_h.getRowCount() == _y.getRowCount()); return _y.getRowCount(); } const Matrix& getYMatrix() const {return _y;} const Matrix& getHMatrix() const {return _h;} const Matrix& getMatrix() const {return _mat;} const SatBinomIdeal& getIdeal() const {return _ideal;} Neighbor getSum(Neighbor a, Neighbor b) const { vector sum(getHDim()); for (size_t i = 0; i < getHDim(); ++i) sum[i] = _h(a.getRow(), i) + _h(b.getRow(), i); for (size_t row = 0; row < _h.getRowCount(); ++row) { bool match = true; for (size_t col = 0; col < _h.getColCount(); ++col) if (sum[col] != _h(row, col)) match = false; if (match) return Neighbor(*this, row); } return Neighbor(); } Neighbor getSum(size_t a, size_t b) const { vector sum(getHDim()); for (size_t i = 0; i < getHDim(); ++i) sum[i] = _h(a, i) + _h(b, i); for (size_t row = 0; row < _h.getRowCount(); ++row) { bool match = true; for (size_t col = 0; col < _h.getColCount(); ++col) if (sum[col] != _h(row, col)) match = false; if (match) return Neighbor(*this, row); } return Neighbor(); } size_t getYDim() const { ASSERT(_y.getColCount() == _ideal.getVarCount()); return _y.getColCount(); } size_t getHDim() const { return _h.getColCount(); } bool hasZeroEntryY() const { return _ideal.hasZeroEntry(); } void getInitialIdeal(BigIdeal& ideal) const { _ideal.getInitialIdeal(ideal); } bool isSum(Neighbor n) const { ASSERT(n.isValid()); ASSERT(&n.getGrobLat() == this); ASSERT(n.getRow() < _isSumRow.size()); return _isSumRow[n.getRow()]; } const vector& getNonSums() const {return _nonSums;} const mpq_class& getZero() const {return _zero;} // todo: remove /// Returns true if the smallest body containing zero, a and b has /// no neighbor in its interior. bool isPointFreeBody(Neighbor a, Neighbor b) const { return _ideal.isPointFreeBody(_ideal.getGenerator(a.getRow()), _ideal.getGenerator(b.getRow())); } /// Returns true if the smallest body containing zero, a, b and c /// has no neighbor in its interior. bool isPointFreeBody(Neighbor a, Neighbor b, Neighbor c) const { return _ideal.isPointFreeBody(_ideal.getGenerator(a.getRow()), _ideal.getGenerator(b.getRow()), _ideal.getGenerator(c.getRow())); } bool isInterior(Neighbor a, Neighbor b) const { if (!isPointFreeBody(a, b)) return false; for (size_t var = 1; var < a.getYDim(); ++var) if (a.getY(var) <= 0 && b.getY(var) <= 0) return false; return true; } private: vector _isSumRow; vector _nonSums; Matrix _y; // rows are neighbors in y-space Matrix _h; // rows are neighbors in h-space Matrix _mat; // matrix that defines lattice SatBinomIdeal _ideal; // other representation of _y, necessary for now mpq_class _zero; }; class Tri { public: Tri(Neighbor a, Neighbor b, Neighbor sum, const vector& mlfbs, const GrobLat& lat); Neighbor getA() const {return _a;} Neighbor getB() const {return _b;} Neighbor getSum() const {return _sum;} const vector& getASideMlfbs() const {return _aSideMlfbs;} const vector& getBSideMlfbs() const {return _bSideMlfbs;} const vector& getNeighborsOnBoundary() const {return _boundary;} const vector& getNeighborsInInterior() const {return _interior;} private: Neighbor _a; Neighbor _b; Neighbor _sum; // neighbor that is sum of a and b vector _aSideMlfbs; // MLFBs containing {0,a,sum} vector _bSideMlfbs; // MLFBs containing {0,b,sum} vector _interior; // neighbors on boundary of <0,a,b,sum> vector _boundary; // neighbors in interior of <0,a,b,sum> }; class Plane { public: Plane(Neighbor a, Neighbor b, Neighbor sum, const vector& mlfbs, const GrobLat& lat): tri(a, b, sum, mlfbs, lat) {} size_t getTypeCount(size_t type) const; size_t getMaxType() const; NeighborPlace getPlace(Neighbor neighbor) const; bool inPlane(Neighbor neighbor) const; bool isPivot(const Mlfb& mlfb) const; bool isSidePivot(const Mlfb& mlfb) const; bool isFlat(const Mlfb& mlfb) const; bool is22(const Mlfb& mlfb) const; size_t getType(const Mlfb& mlfb) const; bool hasFlat() const { return getTypeCount(4) > 0; } Matrix nullSpaceBasis; Tri tri; Matrix rowAB; size_t flatIntervalCount; map typeCounts; vector neighborPlace; vector flatSeq; vector pivots; }; class Mlfb { public: size_t getMinInitialFacet() const { return minInitialFacet; } bool hasPoint(Neighbor n) const { for (size_t i = 0; i < _points.size(); ++i) if (_points[i] == n) return true; return false; } Neighbor getPoint(size_t offset) const { ASSERT(offset < getPointCount()); return _points[offset]; } size_t getPointCount() const { return _points.size(); } bool operator==(const Mlfb& mlfb) const { return _offset == mlfb._offset; } size_t getOffset() const { return _offset; } const vector& getRhs() const { return _rhs; } string getName() const { ostringstream name; name << 'm' << (getOffset() + 1); return name.str(); } string getName(const Plane& plane) const { if (plane.isPivot(*this)) return getName() + 'P'; if (plane.isFlat(*this)) return getName() + 'F'; return getName(); } Neighbor getHitsNeighbor(size_t indexParam) const { ASSERT(indexParam < edgeHitsFacet.size()); return getPoint(getHitsFacet(indexParam)); } size_t getHitsFacet(size_t indexParam) const { ASSERT(indexParam < edgeHitsFacet.size()); return edgeHitsFacet[indexParam]; } const Mlfb* getEdge(size_t indexParam) const { ASSERT(indexParam < edges.size()); return edges[indexParam]; } Mlfb* getEdge(size_t indexParam) { ASSERT(indexParam < edges.size()); return edges[indexParam]; } size_t getFacetOf(const Mlfb& adjacent) const { for (size_t i = 0; i < 4; ++i) if (*getEdge(i) == adjacent) return i; return 4; } bool isParallelogram() const { return _isParallelogram; } mpq_class index; mpz_class dotDegree; vector edges; vector edgeHitsFacet; size_t minInitialFacet; void reset(size_t offset, const vector& points); private: vector _rhs; vector _points; size_t _offset; bool _isParallelogram; }; class TriPlane { public: TriPlane(Neighbor a, Neighbor b, Neighbor c): _a(a), _b(b), _c(c) { Matrix mat(2, 3); for (size_t col = 0; col < 3; ++col) { mat(0, col) = a.getH(col) - c.getH(col); mat(1, col) = b.getH(col) - c.getH(col); } nullSpace(_normal, mat); transpose(_normal, _normal); _line = (_normal.getRowCount() != 1); } bool isLine() const { return _line; } bool closeToPlane(Neighbor a) { ASSERT(!isLine()); mpz_class dn = dotNormal(a); return dn == 0 || dn == 1 || dn == -1; } bool inPlane(Neighbor a) const { return dotNormal(a) == 0; } mpz_class dotNormal(Neighbor a) const { mpz_class prod = 0; for (size_t i = 0; i < 3; ++i) prod += a.getH(i) * _normal(0, i); return prod; } bool isParallel(const TriPlane& plane) const { ASSERT(!isLine()); ASSERT(!plane.isLine()); mpz_class da = plane.dotNormal(_a); return plane.dotNormal(_b) == da && plane.dotNormal(_c) == da; } bool isParallel(const Plane& plane) const { ASSERT(!isLine()); return plane.nullSpaceBasis == getNormal(); } /// returns the normal of the plane as the row of a matrix. const Matrix& getNormal() const { return _normal; } private: Neighbor _a, _b, _c; Matrix _normal; bool _line; }; void getThinPlanes(vector& planes, const GrobLat& lat); void checkPlanes(const vector& thinPlanes, const vector& dtPlanes); size_t pushOutFacetPositive(size_t facetPushOut, const vector& rhs, const GrobLat& lat); size_t pushOutFacetZero(const vector& rhs, const GrobLat& lat); void computeMlfbs(vector& mlfbs, const GrobLat& lat); void computeSeqs(vector >& left, vector >& right, const vector& mlfbs, const Plane& plane); /** Starting at pivot (which must be a pivot), follow the three non-flat sequences starting at pivot. */ void computePivotSeqs(vector >& seqs, const Mlfb& pivot, const Plane& plane); void checkSeqs(const vector >& left, const vector >& right, const Plane& plane, const vector& mlfbs); void checkMiddle(const Plane& plane, const vector& mlfbs); void checkDoubleTriangle(const Plane& plane, const vector& mlfbs); void checkGraph(const vector& mlfbs); void checkGraphOnPlane(const Plane& plane, const vector& mlfbs); /** Perform checks where pivotSeqs are the 3 non-flat sequences on one side. */ void checkPivotSeqs(vector >& pivotSeqs, const Plane& plane, const vector& mlfbs, const vector& flatSeq); void checkPlaneTri(const GrobLat& lat, const vector& mlfbs, const vector& pivots, const Plane& plane); void computePlanes(vector& planes, const GrobLat& lat, vector& mlfbs); /** Set the plane vertex count for each mlfb and count how many MLFBs have each possible number of vertices. */ void setupPlaneCountsAndOrder(vector& mlfbs, const Plane& plane, map& typeCounts); bool disjointSeqs(const vector& a, const vector& b); /** Put all pivots into pivots. flatSeq must be the sequence of flats. If flatSeq is not empty, then offsets 0,1 will be the left pivots while 2,3 will be the right pivots. */ void computePivots(vector& pivots, const vector& mlfbs, const Plane& plane, const vector& flatSeq); void checkNonSums(const GrobLat& lat); void checkFlatSeq(const vector& flatSeq, const GrobLat& lat, const Plane& plane); const char* getEdgePos(size_t index); mpq_class getIndexSum(const vector& mlfbs); void checkMlfbs(const vector& mlfbs, const GrobLat& lat); void checkDoubleTrianglePlanes(const vector& planes, const GrobLat& lat, const vector& mlfbs); void checkPlane(const Plane& plane, const vector& mlfbs); #endif frobby-0.9.5/src/LatticeAnalyzeAction.cpp000066400000000000000000000401051401527164200203540ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "LatticeAnalyzeAction.h" #include "SatBinomIdeal.h" #include "IOFacade.h" #include "Scanner.h" #include "IOHandler.h" #include "DataType.h" #include "BigIdeal.h" #include "MsmStrategy.h" #include "TermTranslator.h" #include "TranslatingTermConsumer.h" #include "DebugStrategy.h" #include "Matrix.h" #include "ColumnPrinter.h" #include "BigTermRecorder.h" #include "SliceParams.h" #include "SliceFacade.h" #include #include #include #include #include #include #include "LatticeAlgs.h" /** This file has stuff I'm using in my work with Scarf. It's just whatever code gets the job done so we can figure out the structure of these lattices. -Bjarke H. Roune @todo: do not use cout @todo: move functionality into proper classes away from this file. */ #include namespace { void printIndentedMatrix(const Matrix& matrix) { ColumnPrinter pr; pr.setPrefix(" "); print(pr, matrix); fputc('\n', stdout); print(stdout, pr); fputc('\n', stdout); } void printNullSpace(const Matrix& matrix) { Matrix nullSpaceBasis; nullSpace(nullSpaceBasis, matrix); transpose(nullSpaceBasis, nullSpaceBasis); fputs("The right null space is spanned by the rows of\n", stdout); printIndentedMatrix(nullSpaceBasis); } class NeighborPrinter { public: NeighborPrinter(const GrobLat& lat): _lat(lat) { // "gXYZ:" label _labelIndex = _pr.getColumnCount(); _pr.addColumn(false, " "); // h space _hHeader = _pr.getColumnCount(); _pr.addColumn(false, " ", ""); _hIndex = _pr.getColumnCount(); for (size_t i = 0; i < _lat.getHDim(); ++i) _pr.addColumn(false, i == 0 ? " " : " "); _comma = _pr.getColumnCount(); _pr.addColumn(false, "", " "); // y space _yHeader = _pr.getColumnCount(); _pr.addColumn(false, " ", ""); _yIndex = _pr.getColumnCount(); for (size_t i = 0; i < _lat.getYDim(); ++i) _pr.addColumn(false, i == 0 ? " " : " "); // hits _hitsHeader = _pr.getColumnCount(); _pr.addColumn(false, " ", ""); _hits = _pr.getColumnCount(); _pr.addColumn(false, " ", ""); // edges _edgeHeader = _pr.getColumnCount(); _pr.addColumn(false, " ", ""); _edge = _pr.getColumnCount(); _pr.addColumn(false, " ", ""); } void addNeighbor(Neighbor neighbor) { printNeighborOnly(neighbor); _pr[_hitsHeader] << '\n'; _pr[_hits] << '\n'; _pr[_edgeHeader] << '\n'; _pr[_edge] << '\n'; } void addMlfbPoint(Neighbor neighbor, const Plane& plane, Neighbor hits, Mlfb& edge) { printNeighborOnly(neighbor, plane.getPlace(neighbor)); _pr[_hitsHeader] << "hits\n"; _pr[_hits] << hits.getName() << '\n'; _pr[_edgeHeader] << "push to\n"; _pr[_edge] << edge.getName(plane) << '\n'; } void addEmptyLine() { for (size_t i = 0; i < _pr.getColumnCount(); ++i) _pr[i] << '\n'; } void print(FILE* out) { ::print(out, _pr); } void print(ostream& out) { out << _pr; } private: void printNeighborOnly(Neighbor neighbor, NeighborPlace place = NoPlace) { _pr[_labelIndex] << neighbor.getName() << ':'; if (place != NoPlace) _pr[_labelIndex] << ' ' << getPlaceCode(place); _pr[_labelIndex] << '\n'; _pr[_yHeader] << "y=\n"; for (size_t i = 0; i < neighbor.getYDim(); ++i) _pr[_yIndex + i] << neighbor.getY(i) << '\n'; _pr[_comma] << ",\n"; _pr[_hHeader] << "h=\n"; for (size_t i = 0; i < neighbor.getHDim(); ++i) _pr[_hIndex + i] << neighbor.getH(i) << '\n'; } const GrobLat& _lat; ColumnPrinter _pr; size_t _labelIndex; size_t _comma; size_t _yHeader; size_t _yIndex; size_t _hHeader; size_t _hIndex; size_t _hitsHeader; size_t _hits; size_t _edgeHeader; size_t _edge; }; void printMinDotDegreeMlfb(vector& mlfbs) { Mlfb* min = &(mlfbs[0]); for (size_t i = 1; i < mlfbs.size(); ++i) { Mlfb& mlfb = mlfbs[i]; if (mlfb.dotDegree < min->dotDegree) min = &mlfb; } cout << "The MLFB " << min->getName() << " has minimal rhs dot product.\n"; } void printNeighbors(const GrobLat& lat) { NeighborPrinter pr(lat); pr.addNeighbor(Neighbor(lat)); for (size_t n = 0; n < lat.getNeighborCount(); ++n) pr.addNeighbor(lat.getNeighbor(n)); fprintf(stdout, "\nThe %u neighbors in y-space and h-space are\n", (unsigned int)lat.getNeighborCount()); pr.print(stdout); fputc('\n', stdout); } class MlfbPtrCmp { public: MlfbPtrCmp(const Plane& plane): _plane(plane) {} bool operator()(const Mlfb* a, const Mlfb* b) { size_t ta = _plane.getType(*a); size_t tb = _plane.getType(*b); if (ta == 1) ta = 3; if (tb == 1) tb = 3; if (ta != tb) return ta > tb; else return a->getOffset() < b->getOffset(); } private: const Plane& _plane; }; void printMlfbs(vector& mlfbs, const Plane& plane, const GrobLat& lat) { vector order; for (size_t i = 0; i < mlfbs.size(); ++i) order.push_back(&(mlfbs[i])); sort(order.begin(), order.end(), MlfbPtrCmp(plane)); cout << "\n\n"; for (size_t i = 0; i < order.size(); ++i) { Mlfb& mlfb = *(order[i]); cout << "*** MLFB " << mlfb.getName(plane) << " with rhs"; for (size_t var = 0; var < lat.getYDim(); ++var) cout << ' ' << mlfb.getRhs()[var]; cout << " contains the neighbors\n"; NeighborPrinter pr(lat); for (size_t j = 0; j < mlfb.getPointCount(); ++j) { pr.addMlfbPoint(mlfb.getPoint(j), plane, mlfb.getHitsNeighbor(j), *mlfb.getEdge(j)); } pr.print(cout); cout << "Its index is " << mlfb.index << ", its rhs dot product is " << mlfb.dotDegree << " and it has " << plane.getType(mlfb) << " plane neighbors.\n\n"; } } void prSeq(const vector& seq, const Plane& plane) { cout << " Seq: "; for (size_t i = 0; i < seq.size(); ++i) cout << (i > 0 ? "->" : "") << seq[i].mlfb->getName(plane); cout << endl; } void printPlane(vector& mlfbs, const Plane& plane, const GrobLat& lat) { cout << "The plane's null space is spanned by the rows of\n"; printIndentedMatrix(plane.nullSpaceBasis); cout << '\n'; const vector& flatSeq = plane.flatSeq; cout << "The flat sequence has " << plane.flatIntervalCount << (plane.flatIntervalCount == 1 ? " interval.\n" : " intervals.\n"); for (size_t i = plane.getMaxType(); i > 0; --i) cout << "There are " << plane.getTypeCount(i) << " MLFBs with " << i << " plane neighbors.\n"; cout << '\n'; const Tri& tri = plane.tri; cout << "The non-flat triangle of the plane is " << "{zero," << tri.getA().getName() << ',' << tri.getSum().getName() << "}," << "{zero," << tri.getB().getName() << ',' << tri.getSum().getName() << "}."; cout << "\nThe MLFBs containing {zero," << tri.getA().getName() << ',' << tri.getSum().getName() << "} are:"; for (size_t i = 0; i < tri.getASideMlfbs().size(); ++i) cout << ' ' << tri.getASideMlfbs()[i]->getName(plane); cout << "\nThe MLFBs containing {zero," << tri.getB().getName() << ',' << tri.getSum().getName() << "} are:"; for (size_t i = 0; i < tri.getBSideMlfbs().size(); ++i) cout << ' ' << tri.getBSideMlfbs()[i]->getName(plane); cout << "\nThe neighbors on the boundary of the body defined by {zero," << tri.getA().getName() << ',' << tri.getB().getName() << ',' << tri.getSum().getName() << "} are\n"; { NeighborPrinter pr(lat); for (size_t i = 0; i < tri.getNeighborsOnBoundary().size(); ++i) pr.addNeighbor(tri.getNeighborsOnBoundary()[i]); pr.print(stdout); } cout << "and those in the interior are\n"; { NeighborPrinter pr(lat); for (size_t i = 0; i < tri.getNeighborsInInterior().size(); ++i) pr.addNeighbor(tri.getNeighborsInInterior()[i]); pr.print(stdout); } printMlfbs(mlfbs, plane, lat); const vector& pivots = plane.pivots; CHECK((pivots.size() % 2) == 0); CHECK(!(tri.getASideMlfbs().size() == 2 && tri.getBSideMlfbs().size() == 2 && pivots.size() == 4 && flatSeq.size() > 0)); if (flatSeq.size() == 0 || pivots.size() != 4) { cout << "(Falling back to general framework as no flats or more than 4 pivots)\n\n"; vector > left; vector > right; computeSeqs(left, right, mlfbs, plane); cout << "The left sequences are:\n"; for (size_t j = 0; j < left.size(); ++j) prSeq(left[j], plane); cout << "The right sequences are:\n"; for (size_t j = 0; j < right.size(); ++j) prSeq(right[j], plane); checkSeqs(left, right, plane, mlfbs); checkMiddle(plane, mlfbs); checkGraphOnPlane(plane, mlfbs); checkDoubleTriangle(plane, mlfbs); } else { cout << endl; vector > leftSeqs; vector > rightSeqs; computePivotSeqs(leftSeqs, *(pivots[0]), plane); computePivotSeqs(rightSeqs, *(pivots[2]), plane); cout << "The left sequences are:\n"; for (size_t j = 0; j < leftSeqs.size(); ++j) prSeq(leftSeqs[j], plane); cout << "The flat sequence is:\n"; prSeq(flatSeq, plane); cout << "The right sequences are:\n"; for (size_t j = 0; j < rightSeqs.size(); ++j) prSeq(rightSeqs[j], plane); checkPivotSeqs(leftSeqs, plane, mlfbs, flatSeq); checkPivotSeqs(rightSeqs, plane, mlfbs, flatSeq); checkPlaneTri(lat, mlfbs, pivots, plane); checkFlatSeq(flatSeq, lat, plane); } } void printInteriorNeighborGraph(const GrobLat& lat, const vector& mlfbs, const vector& planes) { ofstream out("interior.dot"); out << "digraph G {\n" << flush; for (size_t gen1 = 0; gen1 < lat.getNeighborCount(); ++gen1) { Neighbor from = lat.getNeighbor(gen1); out << ' ' << from.getName() << ";\n"; for (size_t gen2 = 0; gen2 < lat.getNeighborCount(); ++gen2) { if (gen1 == gen2) continue; Neighbor to = lat.getNeighbor(gen2); Neighbor sum = lat.getSum(from, to); if (!sum.isValid() || !lat.isInterior(to, sum)) continue; out << " " << from.getName() << " -> " << sum.getName() << " [label=\"" << to.getName(); for (size_t m = 0; m < mlfbs.size(); ++m) { const Mlfb& mlfb = mlfbs[m]; if (mlfb.hasPoint(to) && mlfb.hasPoint(sum)) { out << ' ' << mlfb.getName(); } } if (lat.isPointFreeBody(from, sum)) { for (size_t p = 0; p < planes.size(); ++p) { const Plane& plane = planes[p]; if (plane.inPlane(sum) && plane.inPlane(to) && plane.inPlane(from)) out << " p" << (p + 1); } out << "\",style=dotted,arrowhead=empty"; } else out << "\""; out << "];\n"; } } out << "}\n"; } void printScarfGraph(const vector& mlfbs) { ofstream out("graph.dot"); out << "graph G {\n"; for (size_t m = 0; m < mlfbs.size(); ++m) { const Mlfb& mlfb = mlfbs[m]; out << " " << mlfb.getName() << "[label=\""; out << mlfb.getName() << "\\nindex " << mlfb.index; out << "\", shape=box];\n"; for (size_t e = 0; e < mlfb.edges.size(); ++e) { size_t hits = mlfb.edgeHitsFacet[e]; if (mlfb.getOffset() < mlfb.edges[e]->getOffset()) continue; out << " " << mlfb.getName() << " -- " << mlfb.edges[e]->getName() << " ["; out << "headport=" << getEdgePos(hits) << ", "; out << "tailport=" << getEdgePos(e) << "];\n"; } } out << "}\n"; } void printMathematica3D(vector& mlfbs, const GrobLat& lat) { ofstream out("ma3d"); out << "a={\n"; for (size_t m = 0; m < mlfbs.size(); ++m) { out << " Graphics3D[{RGBColor["; for (size_t i = 0; i < 3; ++i) { if (i > 0) out << ','; out << "0." << (rand() % 10000); } out << "],Polygon[{"; Mlfb& mlfb = mlfbs[m]; for (size_t p = 1; p < mlfb.getPointCount(); ++p) { if (p > 1) out << ','; out << '{'; for (size_t i = 0; i < lat.getHDim(); ++i) { if (i > 1) out << ','; out << mlfb.getPoint(p).getH(i); } out << '}'; } out << "}]}],\n"; } out << " Graphics3D[Point[{0,0,0}]]\n};\ng=Show[{a},Boxed->False];\n"; } void printThinPlanes(const vector& thinPlanes) { Matrix matrix(thinPlanes.size(), 3); for (size_t p = 0; p < thinPlanes.size(); ++p) copyRow(matrix, p, thinPlanes[p].getNormal(), 0); cout << "The " << thinPlanes.size() << " thin planes' normals are the rows of" << endl; cout << matrix; } } LatticeAnalyzeAction::LatticeAnalyzeAction(): Action (staticGetName(), "Display information about the input ideal.", "This action is not ready for general use.\n\n" "Display information about input Grobner basis of lattice.", false), _io(DataType::getSatBinomIdealType(), DataType::getMonomialIdealType()) { } void LatticeAnalyzeAction::obtainParameters(vector& parameters) { _io.obtainParameters(parameters); Action::obtainParameters(parameters); } bool LatticeAnalyzeAction::displayAction() const { return false; } void LatticeAnalyzeAction::perform() { cerr << "** Reading input " << endl; Scanner in(_io.getInputFormat(), stdin); _io.autoDetectInputFormat(in); _io.validateFormats(); IOFacade ioFacade(_printActions); SatBinomIdeal ideal; ioFacade.readSatBinomIdeal(in, ideal); Matrix matrix; { SatBinomIdeal matrixIdeal; ioFacade.readSatBinomIdeal(in, matrixIdeal); matrixIdeal.getMatrix(matrix); } cerr << "** Computing matrix and its nullspace" << endl; cout << "Analysis of the " << matrix.getRowCount() << " by " << matrix.getColCount() << " matrix\n"; printIndentedMatrix(matrix); printNullSpace(matrix); cerr << "** Computing h-space vectors" << endl; GrobLat lat(matrix, ideal); if (lat.hasZeroEntryY()) { cout << "matrix not generic." << endl; exit(2); } cerr << "** Computing MLFBs" << endl; vector mlfbs; computeMlfbs(mlfbs, lat); cerr << "** Computing thin planes" << endl; vector thinPlanes; getThinPlanes(thinPlanes, lat); cerr << "** Computing double triangle planes and associated structures" << endl; vector planes; computePlanes(planes, lat, mlfbs); size_t paraMlfbCount = 0; for (size_t mlfb = 0; mlfb < mlfbs.size(); ++mlfb) { if (mlfbs[mlfb].index == 0) ++paraMlfbCount; } cerr << "** Producing output" << endl; if (lat.hasZeroEntryY()) cout << "A neighbor has a zero entry.\n"; else cout << "No neighbor has a zero entry.\n"; mpq_class indexSum = getIndexSum(mlfbs); cout << "There are " << lat.getNeighborCount() << " neighbors excluding zero.\n"; cout << "There are " << mlfbs.size() << " MLFBs.\n"; cout << "There are " << paraMlfbCount << " parallelogram MLFBs.\n"; cout << "There are " << planes.size() << " distinct double triangle planes.\n"; cout << "The sum of MLFB indexes is " << indexSum << ".\n"; CHECK(indexSum == 6 || indexSum == -6); printMinDotDegreeMlfb(mlfbs); printNeighbors(lat); const vector& nonSums = lat.getNonSums(); cout << "The " << nonSums.size() << " non-sum neighbors are:"; for (size_t i = 0; i < nonSums.size(); ++i) cout << ' ' << nonSums[i].getName(); cout << endl; printThinPlanes(thinPlanes); for (size_t plane = 0; plane < planes.size(); ++plane) { cout << "\n\n*** Plane " << (plane + 1) << " of " << planes.size() << "\n\n"; printPlane(mlfbs, planes[plane], lat); checkPlane(planes[plane], mlfbs); } checkMlfbs(mlfbs, lat); checkDoubleTrianglePlanes(planes, lat, mlfbs); checkPlanes(thinPlanes, planes); printInteriorNeighborGraph(lat, mlfbs, planes); printScarfGraph(mlfbs); printMathematica3D(mlfbs, lat); checkNonSums(lat); checkGraph(mlfbs); } const char* LatticeAnalyzeAction::staticGetName() { return "latanal"; } frobby-0.9.5/src/LatticeAnalyzeAction.h000066400000000000000000000024531401527164200200250ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef LATTICE_ANALYZE_ACTION_GUARD #define LATTICE_ANALYZE_ACTION_GUARD #include "Action.h" #include "BoolParameter.h" #include "IOParameters.h" #include "IntegerParameter.h" class LatticeAnalyzeAction : public Action { public: LatticeAnalyzeAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); /// This action isn't done yet, so it should not be displayed by /// the help action. virtual bool displayAction() const; private: IOParameters _io; }; #endif frobby-0.9.5/src/LatticeFacade.cpp000066400000000000000000000021211401527164200167520ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "LatticeFacade.h" #include "lattice.h" LatticeFacade::LatticeFacade(bool printActions): Facade(printActions) { } void LatticeFacade::makeZeroesInLatticeBasis(BigIdeal& basis) { beginAction("Adjusting lattice basis to increse number of zero entries."); ::makeZeroesInLatticeBasis(basis); endAction(); } frobby-0.9.5/src/LatticeFacade.h000066400000000000000000000020541401527164200164240ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef LATTICE_FACADE_GUARD #define LATTICE_FACADE_GUARD #include "Facade.h" class BigIdeal; /** A facade for operations on lattices. @ingroup Facade */ class LatticeFacade : public Facade { public: LatticeFacade(bool printActions); void makeZeroesInLatticeBasis(BigIdeal& basis); }; #endif frobby-0.9.5/src/LatticeFormatAction.cpp000066400000000000000000000052601401527164200202040ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "LatticeFormatAction.h" #include "BigIdeal.h" #include "IOFacade.h" #include "fplllIO.h" #include "LatticeFacade.h" #include "Scanner.h" #include "error.h" #include "IOHandler.h" LatticeFormatAction::LatticeFormatAction(): Action (staticGetName(), "Change the representation of the input lattice.", "By default, latformat simply writes the input lattice to output.\n" "The main functionality is to change the format.", false), _inputFormat ("iformat", "The input format. The available formats are 4ti2 and fplll.", "4ti2"), _outputFormat ("oformat", "The output format. The additional format \"" + getFormatNameIndicatingToUseInputFormatAsOutputFormat() + "\" means use input format.", getFormatNameIndicatingToUseInputFormatAsOutputFormat()), _zero ("zero", "Adjust lattice basis to increase the number of zero entries.", false) { } void LatticeFormatAction::obtainParameters(vector& parameters) { Action::obtainParameters(parameters); parameters.push_back(&_inputFormat); parameters.push_back(&_outputFormat); parameters.push_back(&_zero); } void LatticeFormatAction::perform() { string iformat = _inputFormat.getValue(); string oformat = _outputFormat.getValue(); if (oformat == getFormatNameIndicatingToUseInputFormatAsOutputFormat()) oformat = iformat; IOFacade facade(_printActions); if (!facade.isValidLatticeFormat(iformat)) reportError("Unknown lattice input format \"" + iformat + "\"."); if (!facade.isValidLatticeFormat(oformat)) reportError("Unknown lattice output format \"" + oformat + "\"."); BigIdeal basis; Scanner in(iformat, stdin); facade.readLattice(in, basis); in.expectEOF(); if (_zero) { LatticeFacade latticeFacade(_printActions); latticeFacade.makeZeroesInLatticeBasis(basis); } facade.writeLattice(stdout, basis, oformat); } const char* LatticeFormatAction::staticGetName() { return "latformat"; } frobby-0.9.5/src/LatticeFormatAction.h000066400000000000000000000023171401527164200176510ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef LATTICE_FORMAT_ACTION_GUARD #define LATTICE_FORMAT_ACTION_GUARD #include "Action.h" #include "StringParameter.h" #include "BoolParameter.h" class LatticeFormatAction : public Action { public: LatticeFormatAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); private: StringParameter _inputFormat; StringParameter _outputFormat; BoolParameter _zero; }; #endif frobby-0.9.5/src/LibAlexanderDualTest.cpp000066400000000000000000000043161401527164200203110ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "frobby.h" #include "tests.h" #include "BigIdeal.h" #include "IdealFactory.h" #include "LibTest.h" TEST_SUITE2(LibraryInterface, AlexanderDual) TEST(AlexanderDual, ImplicitPoint) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::xx_yy_xz_yz()); LibIdealConsumer consumer(IdealFactory::ring_xyzt()); Frobby::alexanderDual(ideal, 0, consumer); ASSERT_EQ(consumer.getIdeal(), IdealFactory::xyz_xxyy()); } TEST(AlexanderDual, ExplicitPoint) { vector pointLcm(4); pointLcm[0] = 2; pointLcm[1] = 2; pointLcm[2] = 3; pointLcm[3] = 100; Frobby::Ideal ideal = toLibIdeal(IdealFactory::xx_yy_xz_yz()); LibIdealConsumer consumer(IdealFactory::ring_xyzt()); Frobby::alexanderDual(ideal, castLibArray(pointLcm), consumer); ASSERT_EQ(consumer.getIdeal(), IdealFactory::xyzzz_xxyy()); } TEST(AlexanderDual, ZeroIdeal) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal ideal(varCount); LibIdealConsumer consumer((VarNames(varCount))); Frobby::alexanderDual(ideal, 0, consumer); ASSERT_EQ(consumer.getIdeal(), IdealFactory::wholeRing(varCount)); } } TEST(AlexanderDual, WholeRing) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::wholeRing(varCount)); LibIdealConsumer consumer((VarNames(varCount))); Frobby::alexanderDual(ideal, 0, consumer); ASSERT_EQ(consumer.getIdeal(), IdealFactory::zeroIdeal(varCount)); } } frobby-0.9.5/src/LibAssociatedPrimesTest.cpp000066400000000000000000000037431401527164200210420ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "frobby.h" #include "tests.h" #include "IdealFactory.h" #include "LibTest.h" #include "BigIdeal.h" #include TEST_SUITE2(LibraryInterface, AssociatedPrimes) TEST(AssociatedPrimes, Typical) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::xx_yy_xz_yz()); LibIdealsConsumer consumer(IdealFactory::ring_xyzt()); Frobby::associatedPrimes(ideal, consumer); ASSERT_EQ(consumer.getIdeals(), IdealFactory::assoprimes_xx_yy_xz_yz()); } TEST(AssociatedPrimes, ZeroIdeal) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal frobbyInputIdeal(varCount); LibIdealsConsumer consumer((VarNames(varCount))); Frobby::associatedPrimes(frobbyInputIdeal, consumer); vector ideals; ideals.push_back(IdealFactory::zeroIdeal(varCount)); ASSERT_EQ(consumer.getIdeals(), ideals); } } TEST(AssociatedPrimes, WholeRing) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::wholeRing(varCount)); LibIdealsConsumer consumer((VarNames(varCount))); Frobby::associatedPrimes(ideal, consumer); ASSERT_EQ(consumer.getIdeals(), vector()); } } frobby-0.9.5/src/LibDimensionTest.cpp000066400000000000000000000042071401527164200175240ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "frobby.h" #include "tests.h" #include "BigIdeal.h" #include "IdealFactory.h" #include "LibTest.h" TEST_SUITE2(LibraryInterface, DimensionAndCodimension) namespace { /** Helper function for tests of Frobby::dimension. */ mpz_class dimension(const BigIdeal& ideal) { mpz_class dim; Frobby::dimension(toLibIdeal(ideal), dim.get_mpz_t()); return dim; } /** Helper function for tests of Frobby::codimension. */ mpz_class codimension(const BigIdeal& ideal) { mpz_class codim; Frobby::codimension(toLibIdeal(ideal), codim.get_mpz_t()); return codim; } } TEST(DimensionAndCodimension, WholeRing) { ASSERT_EQ(dimension(IdealFactory::wholeRing(0)), -1); ASSERT_EQ(codimension(IdealFactory::wholeRing(0)), 1); ASSERT_EQ(dimension(IdealFactory::wholeRing(5)), -1); ASSERT_EQ(codimension(IdealFactory::wholeRing(5)), 6); } TEST(DimensionAndCodimension, ZeroIdeal) { ASSERT_EQ(dimension(IdealFactory::zeroIdeal(0)), 0); ASSERT_EQ(codimension(IdealFactory::zeroIdeal(0)), 0); ASSERT_EQ(dimension(IdealFactory::zeroIdeal(5)), 5); ASSERT_EQ(codimension(IdealFactory::zeroIdeal(5)), 0); } TEST(DimensionAndCodimension, Typical) { ASSERT_EQ(dimension(IdealFactory::xy_xz()), 3); ASSERT_EQ(codimension(IdealFactory::xy_xz()), 1); ASSERT_EQ(dimension(IdealFactory::xx_yy_xz_yz()), 2); ASSERT_EQ(codimension(IdealFactory::xx_yy_xz_yz()), 2); } frobby-0.9.5/src/LibHilbertPoincareTest.cpp000066400000000000000000000060151401527164200206500ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "frobby.h" #include "tests.h" #include "BigIdeal.h" #include "BigPolynomial.h" #include "IdealFactory.h" #include "PolynomialFactory.h" #include "LibTest.h" TEST_SUITE2(LibraryInterface, HilbertPoincare) TEST(HilbertPoincare, TypicalMultigraded) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::xx_yy_xz_yz()); LibPolynomialConsumer consumer(IdealFactory::ring_xyzt()); Frobby::multigradedHilbertPoincareSeries(ideal, consumer); ASSERT_EQ(consumer.getPolynomial(), PolynomialFactory::hilbert_xx_yy_xz_yz()); } TEST(HilbertPoincare, TypicalUnivariate) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::xx_yy_xz_yz()); BigPolynomial output = PolynomialFactory::one_minus4tt_3ttt_tttt_minusttttt(); LibPolynomialConsumer consumer(output.getNames()); Frobby::univariateHilbertPoincareSeries(ideal, consumer); ASSERT_EQ(consumer.getPolynomial(), output); } TEST(HilbertPoincare, ZeroIdealMultigraded) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal ideal(varCount); LibPolynomialConsumer consumer((VarNames(varCount))); Frobby::multigradedHilbertPoincareSeries(ideal, consumer); ASSERT_EQ(consumer.getPolynomial(), PolynomialFactory::one(varCount)); } } TEST(HilbertPoincare, ZeroIdealUnivariate) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal ideal(varCount); LibPolynomialConsumer consumer((VarNames(1))); Frobby::univariateHilbertPoincareSeries(ideal, consumer); ASSERT_EQ(consumer.getPolynomial(), PolynomialFactory::one(1)); } } TEST(HilbertPoincare, WholeRingMultigraded) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::wholeRing(varCount)); LibPolynomialConsumer consumer((VarNames(varCount))); Frobby::multigradedHilbertPoincareSeries(ideal, consumer); ASSERT_EQ(consumer.getPolynomial(), PolynomialFactory::zero(varCount)); } } TEST(HilbertPoincare, WholeRingUnivariate) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::wholeRing(varCount)); LibPolynomialConsumer consumer((VarNames(1))); Frobby::univariateHilbertPoincareSeries(ideal, consumer); ASSERT_EQ(consumer.getPolynomial(), PolynomialFactory::zero(1)); } } frobby-0.9.5/src/LibIrreducibleDecomTest.cpp000066400000000000000000000062541401527164200210040ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "frobby.h" #include "tests.h" #include "IdealFactory.h" #include "LibTest.h" #include "BigIdeal.h" #include TEST_SUITE2(LibraryInterface, IrreducibleDecom) TEST(IrreducibleDecom, TypicalEncoded) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::xx_yy_xz_yz()); LibIdealConsumer consumer(IdealFactory::ring_xyzt()); bool returnValue = Frobby::irreducibleDecompositionAsMonomials(ideal, consumer); ASSERT_TRUE(returnValue); ASSERT_EQ(consumer.getIdeal(), IdealFactory::xy_xxyyz()); ASSERT_TRUE(consumer.hasAnyOutput()); } TEST(IrreducibleDecom, Typical) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::xx_yy_xz_yz()); LibIdealsConsumer consumer(IdealFactory::ring_xyzt()); Frobby::irreducibleDecompositionAsIdeals(ideal, consumer); ASSERT_EQ(consumer.getIdeals(), IdealFactory::irrdecom_xx_yy_xz_yz()); } TEST(IrreducibleDecom, ZeroIdealEncoded) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal frobbyInputIdeal(varCount); LibIdealConsumer consumer((VarNames(varCount))); bool returnValue = Frobby::irreducibleDecompositionAsMonomials(frobbyInputIdeal, consumer); ASSERT_FALSE(returnValue); ASSERT_FALSE(consumer.hasAnyOutput()); } } TEST(IrreducibleDecom, ZeroIdeal) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal frobbyInputIdeal(varCount); LibIdealsConsumer consumer((VarNames(varCount))); Frobby::irreducibleDecompositionAsIdeals(frobbyInputIdeal, consumer); vector ideals; ideals.push_back(IdealFactory::zeroIdeal(varCount)); ASSERT_EQ(consumer.getIdeals(), ideals); } } TEST(IrreducibleDecom, WholeRingEncoded) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::wholeRing(varCount)); LibIdealConsumer consumer((VarNames(varCount))); bool returnValue = Frobby::irreducibleDecompositionAsMonomials(ideal, consumer); ASSERT_TRUE(returnValue); ASSERT_TRUE(consumer.hasAnyOutput()); ASSERT_EQ(consumer.getIdeal(), IdealFactory::zeroIdeal(varCount)); } } TEST(IrreducibleDecom, WholeRing) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::wholeRing(varCount)); LibIdealsConsumer consumer((VarNames(varCount))); Frobby::irreducibleDecompositionAsIdeals(ideal, consumer); ASSERT_EQ(consumer.getIdeals(), vector()); } } frobby-0.9.5/src/LibMaxStdTest.cpp000066400000000000000000000036521401527164200170020ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "frobby.h" #include "tests.h" #include "BigIdeal.h" #include "IdealFactory.h" #include "LibTest.h" TEST_SUITE2(LibraryInterface, MaxStd) TEST(MaxStd, Typical) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::xx_yy_zz_t_xz_yz()); LibIdealConsumer consumer(IdealFactory::ring_xyzt()); Frobby::maximalStandardMonomials(ideal, consumer); ASSERT_EQ(consumer.getIdeal(), IdealFactory::xy_z()); } TEST(MaxStd, ZeroIdeal) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal ideal(varCount); LibIdealConsumer consumer((VarNames(varCount))); Frobby::maximalStandardMonomials(ideal, consumer); if (varCount == 0) { ASSERT_EQ(consumer.getIdeal(), IdealFactory::wholeRing(varCount)); } else { ASSERT_EQ(consumer.getIdeal(), IdealFactory::zeroIdeal(varCount)); } } } TEST(MaxStd, WholeRing) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::wholeRing(varCount)); LibIdealConsumer consumer((VarNames(varCount))); Frobby::maximalStandardMonomials(ideal, consumer); ASSERT_EQ(consumer.getIdeal(), IdealFactory::zeroIdeal(varCount)); } } frobby-0.9.5/src/LibPrimaryDecomTest.cpp000066400000000000000000000037351401527164200201770ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "frobby.h" #include "tests.h" #include "IdealFactory.h" #include "LibTest.h" #include "BigIdeal.h" #include TEST_SUITE2(LibraryInterface, PrimaryDecom) TEST(PrimaryDecom, Typical) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::xx_yy_xz_yz()); LibIdealsConsumer consumer(IdealFactory::ring_xyzt()); Frobby::primaryDecomposition(ideal, consumer); ASSERT_EQ(consumer.getIdeals(), IdealFactory::irrdecom_xx_yy_xz_yz()); } TEST(PrimaryDecom, ZeroIdeal) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal frobbyInputIdeal(varCount); LibIdealsConsumer consumer((VarNames(varCount))); Frobby::primaryDecomposition(frobbyInputIdeal, consumer); vector ideals; ideals.push_back(IdealFactory::zeroIdeal(varCount)); ASSERT_EQ(consumer.getIdeals(), ideals); } } TEST(PrimaryDecom, WholeRing) { for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::wholeRing(varCount)); LibIdealsConsumer consumer((VarNames(varCount))); Frobby::primaryDecomposition(ideal, consumer); ASSERT_EQ(consumer.getIdeals(), vector()); } } frobby-0.9.5/src/LibStdProgramTest.cpp000066400000000000000000000061111401527164200176550ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "frobby.h" #include "tests.h" #include "BigIdeal.h" #include "IdealFactory.h" #include "LibTest.h" TEST_SUITE2(LibraryInterface, StandardProgram) TEST(StandardProgram, TypicalNonNegative) { vector grading(4); grading[0] = 0; grading[1] = 100; grading[2] = 10000; grading[3] = "1000000000000000000000000000000000000"; Frobby::Ideal ideal = toLibIdeal(IdealFactory::xx_yy_zz_t_xz_yz()); LibIdealConsumer consumer(IdealFactory::ring_xyzt()); bool returnValue = Frobby::solveStandardMonomialProgram (ideal, castLibArray(grading), consumer); ASSERT_TRUE(returnValue); ASSERT_EQ(consumer.getIdeal(), IdealFactory::z()); } TEST(StandardProgram, TypicalNegative) { vector grading(4); grading[0] = 0; grading[1] = 100; grading[2] = -10000; grading[3] = "1000000000000000000000000000000000000"; Frobby::Ideal ideal = toLibIdeal(IdealFactory::xx_yy_zz_t_xz_yz()); LibIdealConsumer consumer(IdealFactory::ring_xyzt()); bool returnValue = Frobby::solveStandardMonomialProgram(ideal, castLibArray(grading), consumer); ASSERT_TRUE(returnValue); ASSERT_EQ(consumer.getIdeal(), IdealFactory::xy()); } TEST(StandardProgram, ZeroIdeal) { vector grading(3); grading[0] = 0; grading[1] = 100; grading[2] = -10000; for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal ideal(varCount); LibIdealConsumer consumer((VarNames(varCount))); bool returnValue = Frobby::solveStandardMonomialProgram (ideal, castLibArray(grading), consumer); if (varCount == 0) { ASSERT_TRUE(returnValue); ASSERT_EQ(consumer.getIdeal(), IdealFactory::wholeRing(varCount)); } else { ASSERT_FALSE(returnValue); ASSERT_EQ(consumer.getIdeal(), IdealFactory::zeroIdeal(varCount)); } } } TEST(StandardProgram, WholeRing) { vector grading(3); grading[0] = 0; grading[1] = 100; grading[2] = -10000; for (size_t varCount = 0; varCount <= 3; ++varCount) { Frobby::Ideal ideal = toLibIdeal(IdealFactory::wholeRing(varCount)); LibIdealConsumer consumer((VarNames(varCount))); bool returnValue = Frobby::solveStandardMonomialProgram (ideal, castLibArray(grading), consumer); ASSERT_FALSE(returnValue); ASSERT_EQ(consumer.getIdeal(), IdealFactory::zeroIdeal(varCount)); } } frobby-0.9.5/src/LibTest.cpp000066400000000000000000000066541401527164200156660ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "LibTest.h" #include "tests.h" #include TEST_SUITE(LibraryInterface) Frobby::Ideal toLibIdeal(const BigIdeal& ideal) { size_t varCount = ideal.getVarCount(); Frobby::Ideal libIdeal(varCount); for (size_t generator = 0; generator < ideal.getGeneratorCount(); ++generator) { if (varCount == 0) libIdeal.addExponent(0); else for (size_t var = 0; var < varCount; ++var) libIdeal.addExponent(ideal[generator][var].get_mpz_t()); } return libIdeal; } const mpz_t* castLibArray(const vector& vect) { // The following cast depends on knowing that mpz_class just // consists of a single mpz_t, so (nearly) assert that that is true. ASSERT(sizeof(mpz_class) == sizeof(mpz_t)); return reinterpret_cast(&(vect[0])); } LibIdealConsumer::LibIdealConsumer(const VarNames& names): _hasAnyOutput(false), _ideal(names) { } void LibIdealConsumer::idealBegin(size_t varCount) { ASSERT(varCount == _ideal.getVarCount()); _ideal.clear(); _hasAnyOutput = true; } void LibIdealConsumer::consume(mpz_ptr* exponentVector) { _ideal.newLastTerm(); for (size_t var = 0; var < _ideal.getVarCount(); ++var) _ideal.getLastTermRef()[var] = mpz_class(exponentVector[var]); } const BigIdeal& LibIdealConsumer::getIdeal() const { _ideal.sortGenerators(); return _ideal; } bool LibIdealConsumer::hasAnyOutput() const { return _hasAnyOutput; } LibIdealsConsumer::LibIdealsConsumer(const VarNames& names): _names(names) { } void LibIdealsConsumer::idealBegin(size_t varCount) { ASSERT(_names.getVarCount() == varCount); _ideals.push_back(BigIdeal(_names)); } void LibIdealsConsumer::consume(mpz_ptr* exponentVector) { _ideals.back().newLastTerm(); for (size_t var = 0; var < _names.getVarCount(); ++var) _ideals.back().getLastTermRef()[var] = mpz_class(exponentVector[var]); } const vector& LibIdealsConsumer::getIdeals() const { for (size_t i = 0; i < _ideals.size(); ++i) _ideals[i].sortGenerators(); sort(_ideals.begin(), _ideals.end()); return _ideals; } LibPolynomialConsumer::LibPolynomialConsumer(const VarNames& names): _polynomial(names) { } void LibPolynomialConsumer::polynomialBegin(size_t varCount) { ASSERT(varCount == _polynomial.getVarCount()); } void LibPolynomialConsumer::consume(const mpz_t coef, mpz_ptr* exponentVector) { _polynomial.newLastTerm(); _polynomial.getLastCoef() = mpz_class(coef); for (size_t var = 0; var < _polynomial.getVarCount(); ++var) _polynomial.getLastTerm()[var] = mpz_class(exponentVector[var]); } const BigPolynomial& LibPolynomialConsumer::getPolynomial() const { _polynomial.sortTermsReverseLex(); return _polynomial; } frobby-0.9.5/src/LibTest.h000066400000000000000000000052631401527164200153260ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef LIB_TEST_GUARD #define LIB_TEST_GUARD #include "frobby.h" #include "BigIdeal.h" #include "BigPolynomial.h" #include /** Returns a library interface ideal that corresponds to the parameter ideal. */ Frobby::Ideal toLibIdeal(const BigIdeal& ideal); /** Returns a pointer to an array of mpt_t that represents the entries in the mpz_class. The array is actually just the memory of the vector, so the life time of the array is until the vector deallocates or reallocates its array. */ const mpz_t* castLibArray(const vector& vect); /** Records library interface output into a BigIdeal. */ class LibIdealConsumer : public Frobby::IdealConsumer { public: LibIdealConsumer(const VarNames& names); virtual void idealBegin(size_t varCount); virtual void consume(mpz_ptr* exponentVector); /** Returns the recorded ideal in a canonical form. */ const BigIdeal& getIdeal() const; /** Returns whether any ideal has been recorded. */ bool hasAnyOutput() const; private: bool _hasAnyOutput; mutable BigIdeal _ideal; }; /** Records library interface output into a vector of BigIdeals. */ class LibIdealsConsumer : public Frobby::IdealConsumer { public: LibIdealsConsumer(const VarNames& names); virtual void idealBegin(size_t varCount); virtual void consume(mpz_ptr* exponentVector); /** Returns the recorded ideals in a canonical form. */ const vector& getIdeals() const; private: mutable vector _ideals; VarNames _names; }; /** Records library interface output into a BigPolynomial. */ class LibPolynomialConsumer : public Frobby::PolynomialConsumer { public: LibPolynomialConsumer(const VarNames& names); virtual void polynomialBegin(size_t varCount); virtual void consume(const mpz_t coef, mpz_ptr* exponentVector); /** Returns the recorded polynomial in a canonical form. */ const BigPolynomial& getPolynomial() const; private: mutable BigPolynomial _polynomial; }; #endif frobby-0.9.5/src/LocalArray.cpp000066400000000000000000000015351401527164200163420ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "LocalArray.h" frobby-0.9.5/src/LocalArray.h000066400000000000000000000051631401527164200160100ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef LOCAL_ARRAY_GUARD #define LOCAL_ARRAY_GUARD #include "Arena.h" #include /** Emulates stack allocation of an array using an Arena. The scoping rules of C++ ensure stack order allocation and deallocation if the Arena is only accessed using objects like this. T is the type of the objects to make an array of. ArenaSource is any type that has a public and static getArena function. That function must return a reference to the same Arena each time it is called. ArenaSource is useful for testing. */ template class LocalArray { public: LocalArray(const size_t sizeParam): _size(sizeParam), _range(gccWorkAround(sizeParam)) { ASSERT(this->size() == static_cast(end() - begin())); } ~LocalArray() { ASSERT(size() == static_cast(end() - begin())); ArenaSource::getArena().freeTopArray(begin(), end()); } T& operator[](const size_t i) const { ASSERT(i < size()); return begin()[i]; } T* begin() const {return _range.first;} T* end() const {return _range.second;} size_t size() const {return _size;} private: static const pair gccWorkAround(const size_t size) { // for some reason Cygwin's GCC 4.3.4 will not accept this code: // ArenaSource::getArena().allocArray(size) // but arena.allocArray(size) is fine. So don't change it back. // Unfortunately we need to put this in an initializer so it has to // fit on one line so the work-around has to go in a separate function. Arena& arena = ArenaSource::getArena(); return arena.allocArray(size); } // Everything is inline and should be on the stack and be unlikely // to have its address taken. So the compiler should be able to // eliminate any of these member variables that are not used. const size_t _size; const pair _range; }; #endif frobby-0.9.5/src/Macaulay2IOHandler.cpp000066400000000000000000000210461401527164200176540ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Macaulay2IOHandler.h" #include "Scanner.h" #include "VarNames.h" #include "TermTranslator.h" #include "DataType.h" #include "Term.h" #include "IdealWriter.h" #include "PolyWriter.h" #include "error.h" #include "display.h" #include "InputConsumer.h" #include namespace IO { namespace { string m2GetRingName(const VarNames& names); void m2WriteRing(const VarNames& names, FILE* out); } class M2IdealWriter : public IdealWriter { public: M2IdealWriter(FILE* out): IdealWriter(out) { } private: virtual void doWriteHeader(bool first) { if (first) m2WriteRing(getNames(), getFile()); fputs("I = monomialIdeal(", getFile()); } virtual void doWriteTerm(const Term& term, const TermTranslator& translator, bool first) { fputs(first ? "\n " : ",\n ", getFile()); writeTermProduct(term, translator, getFile()); const size_t varCount = translator.getVarCount(); for (size_t var = 0; var < varCount; ++var) if (translator.getExponent(var, term) != 0) return; fputc('_', getFile()); fputs(m2GetRingName(translator.getNames()).c_str(), getFile()); } virtual void doWriteTerm(const vector& term, bool first) { fputs(first ? "\n " : ",\n ", getFile()); writeTermProduct(term, getNames(), getFile()); const size_t varCount = term.size(); for (size_t var = 0; var < varCount; ++var) if (term[var] != 0) return; fputc('_', getFile()); fputs(m2GetRingName(getNames()).c_str(), getFile()); } virtual void doWriteFooter(bool wasZeroIdeal) { if (wasZeroIdeal) { // Macaulay 2's monomialIdeal reports an error if we give it an // empty list, so to get the zero ideal we have to explicitly // specify zero as a generator. fprintf(getFile(), "0_%s);\n", m2GetRingName(getNames()).c_str()); } else fputs("\n);\n", getFile()); } virtual void doWriteEmptyList() { m2WriteRing(getNames(), getFile()); } }; class M2PolyWriter : public PolyWriter { public: M2PolyWriter(FILE* out): PolyWriter(out) { } virtual void doWriteHeader() { m2WriteRing(getNames(), getFile()); fputs("p =", getFile()); } virtual void doWriteTerm(const mpz_class& coef, const Term& term, const TermTranslator& translator, bool firstGenerator) { if (firstGenerator) fputs("\n ", getFile()); else fputs(" +\n ", getFile()); writeCoefTermProduct(coef, term, translator, true, getFile()); } virtual void doWriteTerm(const mpz_class& coef, const vector& term, bool firstGenerator) { if (firstGenerator) fputs("\n ", getFile()); else fputs(" +\n ", getFile()); writeCoefTermProduct(coef, term, getNames(), true, getFile()); } virtual void doWriteFooter(bool wasZero) { if (wasZero) fputs("\n 0", getFile()); fputs(";\n", getFile()); } }; Macaulay2IOHandler::Macaulay2IOHandler(): IOHandlerCommon(staticGetName(), "Format understandable by the program Macaulay 2.") { registerInput(DataType::getMonomialIdealType()); registerInput(DataType::getMonomialIdealListType()); registerInput(DataType::getPolynomialType()); registerOutput(DataType::getMonomialIdealType()); registerOutput(DataType::getMonomialIdealListType()); registerOutput(DataType::getPolynomialType()); } const char* Macaulay2IOHandler::staticGetName() { return "m2"; } BigTermConsumer* Macaulay2IOHandler::doCreateIdealWriter(FILE* out) { return new M2IdealWriter(out); } CoefBigTermConsumer* Macaulay2IOHandler::doCreatePolynomialWriter(FILE* out) { return new M2PolyWriter(out); } void Macaulay2IOHandler::doWriteTerm(const vector& term, const VarNames& names, FILE* out) { writeTermProduct(term, names, out); } void Macaulay2IOHandler::doReadTerm(Scanner& in, InputConsumer& consumer) { consumer.consumeTermProductNotation(in); if (in.match('_')) in.readIdentifier(); } void Macaulay2IOHandler::doReadRing(Scanner& in, VarNames& names) { names.clear(); const char* ringName = in.readIdentifier(); ASSERT(ringName != 0 && string(ringName) != ""); if (ringName[0] != 'R') { reportSyntaxError (in, "Expected name of ring to start with an upper case R."); ASSERT(false); // shouldn't reach here. } in.expect('='); in.eatWhite(); if (in.peek() == 'Z') { displayNote("In the Macaulay 2 format, writing ZZ as the ground field " "instead of QQ is deprecated and may not work in future " "releases of Frobby."); in.expect("ZZ"); } else in.expect("QQ"); in.expect('['); // The enclosing braces are optional, but if the start brace is // there, then the end brace should be there too. bool readBrace = in.match('{'); if (readBrace) { displayNote("In the Macaulay 2 format, putting braces { } around the " "variables is deprecated and may not work in future " "releases of Frobby."); } if (in.peekIdentifier()) { do { names.addVarSyntaxCheckUnique(in, in.readIdentifier()); } while (in.match(',')); } if (readBrace) in.expect('}'); in.expect(']'); in.expect(';'); } bool Macaulay2IOHandler::doPeekRing(Scanner& in) { return in.peek('R') || in.peek('r'); } void Macaulay2IOHandler::doReadBareIdeal (Scanner& in, InputConsumer& consumer) { consumer.beginIdeal(); in.expect('I'); in.expect('='); in.expect("monomialIdeal"); in.expect('('); if (in.match('0')) { if (in.match('_')) in.readIdentifier(); } else { do { consumer.consumeTermProductNotation(in); if (in.match('_')) in.readIdentifier(); } while (in.match(',')); } in.expect(')'); in.expect(';'); consumer.endIdeal(); } void Macaulay2IOHandler::doReadBarePolynomial(Scanner& in, const VarNames& names, CoefBigTermConsumer& consumer) { consumer.consumeRing(names); vector term(names.getVarCount()); mpz_class coef; in.expect('p'); in.expect('='); consumer.beginConsuming(); bool first = true; do { readCoefTerm(coef, term, names, first, in); consumer.consume(coef, term); first = false; } while (!in.match(';')); consumer.doneConsuming(); } namespace { string m2GetRingName(const VarNames& names) { string name = "R"; if (!names.contains(name)) return name; for (mpz_class i = 1; true; ++i) { name = "R" + i.get_str(); if (!names.contains(name)) return name; } } void m2WriteRing(const VarNames& names, FILE* out) { fputs(m2GetRingName(names).c_str(), out); fputs(" = QQ[", out); const char* pre = ""; for (unsigned int i = 0; i < names.getVarCount(); ++i) { fputs(pre, out); if (names.getName(i) == "R") { string msg = "The name of the ring in Macaulay 2 format is usually named R,\n" "but in this case there is already a variable named R. Thus,\n" "the ring has been renamed to " + m2GetRingName(names) + '.'; displayNote(msg); } fputs(names.getName(i).c_str(), out); pre = ", "; } fputs("];\n", out); } } } frobby-0.9.5/src/Macaulay2IOHandler.h000066400000000000000000000035061401527164200173220ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef MACAULAY_2_IO_HANDLER_GUARD #define MACAULAY_2_IO_HANDLER_GUARD #include "IOHandlerCommon.h" #include class VarNames; class Scanner; class BigTermConsumer; class CoefBigTermConsumer; class InputConsumer; namespace IO { class Macaulay2IOHandler : public IOHandlerCommon { public: Macaulay2IOHandler(); static const char* staticGetName(); private: virtual BigTermConsumer* doCreateIdealWriter(FILE* out); virtual CoefBigTermConsumer* doCreatePolynomialWriter(FILE* out); virtual void doWriteTerm(const vector& term, const VarNames& names, FILE* out); virtual void doReadTerm(Scanner& in, InputConsumer& consumer); virtual void doReadRing(Scanner& in, VarNames& names); virtual bool doPeekRing(Scanner& in); virtual void doReadBareIdeal(Scanner& in, InputConsumer& consumer); virtual void doReadBarePolynomial(Scanner& in, const VarNames& names, CoefBigTermConsumer& consumer); }; } #endif frobby-0.9.5/src/Matrix.cpp000066400000000000000000000310371401527164200155550ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Matrix.h" #include "BigIntVector.h" #include "ColumnPrinter.h" #include #include namespace { /** Multiplies column col of mat by a positive fractional number such that that column becomes integral and primitive. A vector is primitive if the gcd of its entries is 1. */ void makeColumnIntegralPrimitive(Matrix& mat, size_t col) { ASSERT(col < mat.getColCount()); if (mat.getRowCount() == 0) return; // Obtain gcd of numerators and lcm of denominators. mpz_class numGcd = mat(0, col).get_num(); mpz_class denLcm = mat(0, col).get_den(); for (size_t row = 1; row < mat.getRowCount(); ++row) { mpz_gcd(numGcd.get_mpz_t(), numGcd.get_mpz_t(), mat(row, col).get_num_mpz_t()); mpz_lcm(denLcm.get_mpz_t(), denLcm.get_mpz_t(), mat(row, col).get_den_mpz_t()); } ASSERT(numGcd > 0); ASSERT(denLcm > 0); for (size_t row = 0; row < mat.getRowCount(); ++row) { mat(row, col) /= numGcd; mat(row, col) *= denLcm; ASSERT(mat(row, col).get_den() == 1); } } } Matrix::Matrix(size_t rowCount, size_t colCount): _rowCount(rowCount), _colCount(colCount), _entries(rowCount * colCount) { } void Matrix::resize(size_t rowCount, size_t colCount) { if (rowCount == getRowCount() && colCount == getColCount()) return; Matrix mat(rowCount, colCount); size_t copyRowCount = std::min(rowCount, getRowCount()); size_t copyColCount = std::min(colCount, getColCount()); for (size_t row = 0; row < copyRowCount; ++row) for (size_t col = 0; col < copyColCount; ++col) mat(row, col) = (*this)(row, col); swap(mat); } void Matrix::swap(Matrix& mat) { using std::swap; _entries.swap(mat._entries); swap(_rowCount, mat._rowCount); swap(_colCount, mat._colCount); } bool operator==(const Matrix& a, const Matrix& b) { if (a.getRowCount() != b.getRowCount() || a.getColCount() != b.getColCount()) return false; for (size_t row = 0; row < a.getRowCount(); ++row) for (size_t col = 0; col < a.getColCount(); ++col) if (a(row, col) != b(row, col)) return false; return true; } ostream& operator<<(ostream& out, const Matrix& mat) { ColumnPrinter pr; print(pr, mat); pr.print(out); return out; } void print(FILE* file, const Matrix& mat) { ostringstream out; out << mat; fputs(out.str().c_str(), file); } void print(ColumnPrinter& pr, const Matrix& mat) { size_t baseCol = pr.getColumnCount(); for (size_t i = 0; i < mat.getColCount(); ++i) pr.addColumn(false); for (size_t col = 0; col < mat.getColCount(); ++col) for (size_t row = 0; row < mat.getRowCount(); ++row) pr[baseCol + col] << mat(row, col) << '\n'; } void product(Matrix& prod, const Matrix& a, const Matrix& b) { ASSERT(a.getColCount() == b.getRowCount()); prod.resize(a.getRowCount(), b.getColCount()); for (size_t r = 0; r < a.getRowCount(); ++r) { for (size_t c = 0; c < b.getColCount(); ++c) { prod(r, c) = 0; for (size_t i = 0; i < a.getColCount(); ++i) prod(r, c) += a(r, i) * b(i, c); } } } void transpose(Matrix& trans, const Matrix& mat) { if (&trans == &mat) { transpose(trans); return; } trans.resize(mat.getColCount(), mat.getRowCount()); for (size_t row = 0; row < mat.getRowCount(); ++row) for (size_t col = 0; col < mat.getColCount(); ++col) trans(col, row) = mat(row, col); } void transpose(Matrix& mat) { Matrix tmp(mat); transpose(mat, tmp); } void addMultiplyRow(Matrix& mat, size_t resultRow, size_t sourceRow, const mpq_class& mult) { ASSERT(resultRow < mat.getRowCount()); ASSERT(sourceRow < mat.getRowCount()); for (size_t col = 0; col < mat.getColCount(); ++col) mat(resultRow, col) += mat(sourceRow, col) * mult; } void multiplyRow(Matrix& mat, size_t row, const mpq_class& mult) { for (size_t col = 0; col < mat.getColCount(); ++col) mat(row, col) *= mult; } void swapRows(Matrix& mat, size_t row1, size_t row2) { ASSERT(row1 < mat.getRowCount()); ASSERT(row2 < mat.getRowCount()); for (size_t col = 0; col < mat.getColCount(); ++col) swap(mat(row1, col), mat(row2, col)); } bool rowReduce(Matrix& mat) { bool permutationOdd = false; size_t rowsDone = 0; for (size_t pivotCol = 0; pivotCol < mat.getColCount(); ++pivotCol) { size_t pivotRow = rowsDone; for (; pivotRow < mat.getRowCount(); ++pivotRow) if (mat(pivotRow, pivotCol) != 0) break; if (pivotRow == mat.getRowCount()) continue; if (rowsDone != pivotRow) { permutationOdd = !permutationOdd; swapRows(mat, rowsDone, pivotRow); } pivotRow = rowsDone; ++rowsDone; for (size_t row = pivotRow + 1; row < mat.getRowCount(); ++row) { if (row != pivotRow && mat(row, pivotCol) != 0) { addMultiplyRow(mat, row, pivotRow, -mat(row, pivotCol) / mat(pivotRow, pivotCol)); ASSERT(mat(row, pivotCol) == 0); } } } return permutationOdd; } void rowReduceFully(Matrix& mat) { rowReduce(mat); /// @todo: do back substitution instead. size_t pivotCol = 0; size_t pivotRow = 0; while (pivotRow < mat.getRowCount() && pivotCol < mat.getColCount()) { if (mat(pivotRow, pivotCol) == 0) { ++pivotCol; } else { multiplyRow(mat, pivotRow, 1 / mat(pivotRow, pivotCol)); ASSERT(mat(pivotRow, pivotCol) == 1); for (size_t row = 0; row < pivotRow; ++row) { if (row != pivotRow && mat(row, pivotCol) != 0) { addMultiplyRow(mat, row, pivotRow, -mat(row, pivotCol)); ASSERT(mat(row, pivotCol) == 0); } } ++pivotRow; } } } void subMatrix(Matrix& sub, const Matrix& mat, size_t rowBegin, size_t rowEnd, size_t colBegin, size_t colEnd) { ASSERT(rowBegin <= rowEnd); ASSERT(rowEnd <= mat.getRowCount()); ASSERT(colBegin <= colEnd); ASSERT(colEnd <= mat.getColCount()); if (&sub == &mat) { Matrix tmp; subMatrix(tmp, mat, rowBegin, rowEnd, colBegin, colEnd); sub.swap(tmp); return; } sub.resize(rowEnd - rowBegin, colEnd - colBegin); for (size_t row = rowBegin; row < rowEnd; ++row) for (size_t col = colBegin; col < colEnd; ++col) sub(row - rowBegin, col - colBegin) = mat(row, col); } void copyRow(Matrix& target, size_t targetRow, const Matrix& source, size_t sourceRow) { ASSERT(target.getColCount() == source.getColCount()); ASSERT(targetRow < target.getRowCount()); ASSERT(sourceRow < source.getRowCount()); size_t colCount = target.getColCount(); for (size_t col = 0; col < colCount; ++col) target(targetRow, col) = source(sourceRow, col); } bool inverse(Matrix& inv, const Matrix& mat) { ASSERT(mat.getRowCount() == mat.getColCount()); size_t size = mat.getRowCount(); inv = mat; // Append identity matrix inv.resize(size, size + size); for (size_t i = 0; i < size; ++i) inv(i, size + i) = 1; rowReduceFully(inv); if (inv(size - 1, size - 1) == 0) return false; // not invertible subMatrix(inv, inv, 0, size, size, 2 * size); return true; } size_t matrixRank(const Matrix& matParam) { Matrix mat(matParam); rowReduceFully(mat); // Find pivots size_t rank = 0; size_t col = 0; size_t row = 0; while (row < mat.getRowCount() && col < mat.getColCount()) { if (mat(row, col) == 0) { ++col; } else { ++rank; ++row; } } return rank; } void nullSpace(Matrix& basis, const Matrix& matParam) { Matrix mat(matParam); rowReduceFully(mat); // Find pivots size_t rank = 0; vector colHasPivot(mat.getColCount()); { size_t col = 0; size_t row = 0; while (row < mat.getRowCount() && col < mat.getColCount()) { if (mat(row, col) == 0) { ++col; } else { ++rank; colHasPivot[col] = true; ++row; } } } // Construct basis basis.resize(mat.getColCount(), mat.getColCount() - rank); size_t nullCol = 0; for (size_t col = 0; col < mat.getColCount(); ++col) { ASSERT(nullCol <= basis.getColCount()); if (colHasPivot[col]) continue; ASSERT(nullCol < basis.getColCount()); size_t row = 0; for (size_t nullRow = 0; nullRow < basis.getRowCount(); ++nullRow) { if (colHasPivot[nullRow]) { basis(nullRow, nullCol) = -mat(row, col); ++row; } else if (nullRow == col) basis(nullRow, nullCol) = 1; else basis(nullRow, nullCol) = 0; } ++nullCol; } ASSERT(nullCol == basis.getColCount()); // Make basis integer for (size_t col = 0; col < basis.getColCount(); ++col) makeColumnIntegralPrimitive(basis, col); } bool solve(Matrix& sol, const Matrix& lhs, const Matrix& rhs) { ASSERT(lhs.getRowCount() == rhs.getRowCount()); // Append lhs|rhs and reduce Matrix system = lhs; system.resize(system.getRowCount(), system.getColCount() + rhs.getColCount()); size_t midCol = lhs.getColCount(); for (size_t col = 0; col < rhs.getColCount(); ++col) for (size_t row = 0; row < rhs.getRowCount(); ++row) system(row, midCol + col) = rhs(row, col); rowReduceFully(system); // Check if system has a solution for (size_t row = 0; row < system.getRowCount(); ++row) { for (size_t col = 0; col < midCol; ++col) if (system(row, col) != 0) goto hasLeftPivot; for (size_t col = midCol; col < system.getColCount(); ++col) if (system(row, col) != 0) return false; hasLeftPivot:; } // Extract solution sol.resize(lhs.getColCount(), rhs.getColCount()); size_t row = 0; for (size_t col = 0; col < midCol; ++col) { if (row == system.getRowCount() || system(row, col) == 0) { for (size_t r = 0; r < sol.getColCount(); ++r) sol(col, r) = 0; } else { ASSERT(system(row, col) == 1); for (size_t r = 0; r < sol.getColCount(); ++r) sol(col, r) = system(row, midCol + r); ++row; } } return true; } bool hasSameRowSpace(const Matrix& a, const Matrix& b) { Matrix trA; transpose(trA, a); Matrix trB; transpose(trB, b); return hasSameColSpace(trA, trB); } bool hasSameColSpace(const Matrix& a, const Matrix& b) { if (a.getRowCount() != b.getRowCount()) return false; // A single row reduction of each of a and b would be a little more // efficient. Matrix dummy; return solve(dummy, a, b) && solve(dummy, b, a); } mpq_class determinant(const Matrix& mat) { ASSERT(mat.getRowCount() == mat.getColCount()); Matrix reduced(mat); bool permutationOdd = rowReduce(reduced); mpq_class det = permutationOdd ? -1 : 1; for (size_t i = 0; i < reduced.getRowCount(); ++i) det *= reduced(i, i); return det; } namespace { size_t getOppositeZeroRow(const Matrix& mat) { // Let a,d and b,c be opposite vertices in a parallelogram. Then // and only then b + c == d + a. We return the index of the row opposite // to row 0. If the rows of mat are not the vertices of a parallelogram // then we return mat.getRowCount(). if (mat.getRowCount() != 4) return mat.getRowCount(); mpq_class tmp; for (size_t opposite = 1; opposite < 4; ++opposite) { bool isPara = true; for (size_t col = 0; col < mat.getColCount(); ++col) { tmp = mat(0, col) + mat(opposite, col); for (size_t row = 1; row < 4; ++row) if (row != opposite) tmp -= mat(row, col); if (tmp != 0) { isPara = false; break; } } if (isPara) return opposite; } return mat.getRowCount(); } } bool isParallelogram(const Matrix& mat) { return getOppositeZeroRow(mat) != mat.getRowCount(); } mpq_class getParallelogramAreaSq(const Matrix& mat) { ASSERT(isParallelogram(mat)); size_t opposite = getOppositeZeroRow(mat); size_t a; for (a = 1; a < 4; ++a) if (a != opposite) break; ASSERT(a < 4); size_t b; for (b = a + 1; b < 4; ++b) if (b != opposite) break; ASSERT(b < 4); // Translate to zero and drop the zero and sum vertices. Matrix tmp(2, mat.getColCount()); for (size_t col = 0; col < mat.getColCount(); ++col) { tmp(0, col) = mat(a, col) - mat(0, col); tmp(1, col) = mat(b, col) - mat(0, col); } // Now the square of the area is det(tmp*transpose(tmp)). Matrix trans; transpose(trans, tmp); Matrix prod; product(prod, tmp, trans); return determinant(prod); } frobby-0.9.5/src/Matrix.h000066400000000000000000000115261401527164200152230ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef MATRIX_GUARD #define MATRIX_GUARD #include class BigIntVector; class ColumnPrinter; class Matrix { public: Matrix(size_t rowCount = 0, size_t colCount = 0); size_t getRowCount() const {return _rowCount;} size_t getColCount() const {return _colCount;} /** Set the number of rows and columns. Preserves the value of entries that are still present. New entries are initialized to zero. */ void resize(size_t rowCount, size_t colCount); const mpq_class& operator()(size_t row, size_t col) const {return _entries[toIndex(row, col)];} mpq_class& operator()(size_t row, size_t col) {return _entries[toIndex(row, col)];} void swap(Matrix& mat); private: size_t toIndex(size_t row, size_t col) const { ASSERT(row < _rowCount); ASSERT(col < _colCount); ASSERT(_entries.size() == _rowCount * _colCount); size_t index = col + row * _colCount; ASSERT(index < _entries.size()); return index; } size_t _rowCount; size_t _colCount; vector _entries; }; bool operator==(const Matrix& a, const Matrix& b); ostream& operator<<(ostream& out, const Matrix& mat); void print(FILE* file, const Matrix& mat); void print(ColumnPrinter& printer, const Matrix& mat); /** Sets prod to a * b. */ void product(Matrix& prod, const Matrix& a, const Matrix& b); /** Sets trans to the transpose of mat. */ void transpose(Matrix& trans, const Matrix& mat); /** Transpose mat inplace. */ void transpose(Matrix& mat); /** Adds mult times row sourceRow to row resultRow of mat. */ void addMultiplyRow(Matrix& mat, size_t resultRow, size_t sourceRow, const mpq_class& mult); /** Multiplies row row with mult. */ void multiplyRow(Matrix& mat, size_t row, const mpq_class& mult); /** Swaps row row1 and row row2 of mat. */ void swapRows(Matrix& mat, size_t row1, size_t row2); /** Reduces mat to row-echelon form, i.e. make it upper triangular. This does not include making the pivot entries 1. Returns true if the permutation made of the rows is odd. */ bool rowReduce(Matrix& mat); /** Returns the rank of mat. */ size_t matrixRank(const Matrix& mat); /** Reduces mat to reduced row-echelon form, i.e. a row-echelon matrix such that no column contains two non-zero entries and all entries are zero or one. */ void rowReduceFully(Matrix& mat); /** Sets sub to the sub-matrix of mat with rows in the interval [rowBegin, rowEnd) and columns in the interval [colBegin, colEnd). */ void subMatrix(Matrix& sub, const Matrix& mat, size_t rowBegin, size_t rowEnd, size_t colBegin, size_t colEnd); /** Copies row sourceRow from source to row targetRow of target. source and target must have the same number of columns. */ void copyRow(Matrix& target, size_t targetRow, const Matrix& source, size_t sourceRow); /** Sets inv to the inverse of mat. mat must be a square matrix. Returns true if mat is invertible. Returns false and leaves inv in some valid but unspecified state if mat is not invertible. */ bool inverse(Matrix& inv, const Matrix& mat); /** Sets the columns of basis to a basis of the null space of mat. */ void nullSpace(Matrix& basis, const Matrix& mat); /** Sets sol to some matrix such that lhs*sol=rhs and returns true if such a matrix exists. Otherwise returns false and does not change sol. */ bool solve(Matrix& sol, const Matrix& lhs, const Matrix& rhs); /** Returns true if a and b have the same column space. */ bool hasSameColSpace(const Matrix& a, const Matrix& b); /** Returns true if a and b have the same row space. */ bool hasSameRowSpace(const Matrix& a, const Matrix& b); /** Returns the determinant of mat. */ mpq_class determinant(const Matrix& mat); /** Returns true if the rows of mat are the (4) vertices of a parallelogram. */ bool isParallelogram(const Matrix& mat); /** Returns the square of the area of the parallelogram whose vertices are the 4 rows of mat. Mat must be a parallelogram. The square of the are is integer if the entries of mat are integer and otherwise it is rational. The are itself can be an irrational number. */ mpq_class getParallelogramAreaSq(const Matrix& mat); #endif frobby-0.9.5/src/MatrixTest.cpp000066400000000000000000000234411401527164200164150ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Matrix.h" #include "tests.h" #include "BigIntVector.h" TEST_SUITE(Matrix) namespace { Matrix makeMatrix(size_t colCount, const char* entries) { Matrix mat; istringstream in(entries); mpq_class entry; while (in >> entry) { mat.resize(mat.getRowCount() + 1, colCount); mat(mat.getRowCount() - 1, 0) = entry; for (size_t col = 1; col < colCount; ++col) in >> mat(mat.getRowCount() - 1, col); } return mat; } Matrix make123() { return makeMatrix(4, "1 2 3 1\n" "4 5 6 1\n" "7 8 9 1\n"); } BigIntVector makeVector(const char* entries) { BigIntVector vec(0); istringstream in(entries); mpz_class entry; while (in >> entry) { vec.resize(vec.getSize() + 1); vec[vec.getSize() - 1] = entry; } return vec; } } TEST(Matrix, Basic) { Matrix mat = make123(); ASSERT_EQ(mat.getRowCount(), 3u); ASSERT_EQ(mat.getColCount(), 4u); ASSERT_EQ(mat(0, 0), 1); ASSERT_EQ(mat(2, 3), 1); ASSERT_EQ(mat(0, 1), 2); const Matrix con = mat; ASSERT_EQ(con.getRowCount(), 3u); ASSERT_EQ(con.getColCount(), 4u); ASSERT_EQ(con(0, 0), 1); ASSERT_EQ(con(2, 3), 1); ASSERT_EQ(con(0, 1), 2); } TEST(Matrix, Resize) { Matrix mat = make123(); mat.resize(10, 10); ASSERT_EQ(mat.getRowCount(), 10u); ASSERT_EQ(mat.getColCount(), 10u); ASSERT_EQ(mat(0, 1), 2); ASSERT_EQ(mat(2, 3), 1); ASSERT_EQ(mat(9, 9), 0); mat.resize(1, 2); ASSERT_EQ(mat.getRowCount(), 1u); ASSERT_EQ(mat.getColCount(), 2u); ASSERT_EQ(mat(0, 1), 2); mat.resize(0, 0); ASSERT_EQ(mat.getRowCount(), 0u); ASSERT_EQ(mat.getColCount(), 0u); mat.resize(2, 1); ASSERT_EQ(mat.getRowCount(), 2u); ASSERT_EQ(mat.getColCount(), 1u); ASSERT_EQ(mat(1, 0), 0); } TEST(Matrix, Swap) { Matrix mat1 = make123(); Matrix mat2(2, 1); mat2(1, 0) = 42; Matrix mat2Copy = mat2; swap(mat1, mat2); ASSERT_EQ(mat2, make123()); ASSERT_EQ(mat1, mat2Copy); } TEST(Matrix, Transpose) { Matrix mat = make123(); Matrix trans; transpose(trans, mat); ASSERT_EQ(trans.getRowCount(), 4u); ASSERT_EQ(trans.getColCount(), 3u); ASSERT_EQ(trans(3, 2), 1); ASSERT_EQ(trans(2, 2), 9); } TEST(Matrix, AddMultiplyRow) { Matrix mat = make123(); addMultiplyRow(mat, 2, 0, -3); ASSERT_EQ(mat, makeMatrix(4, "1 2 3 1\n" "4 5 6 1\n" "4 2 0 -2\n")); addMultiplyRow(mat, 0, 2, mpq_class("-3/2")); ASSERT_EQ(mat, makeMatrix(4, "-5 -1 3 4\n" "4 5 6 1\n" "4 2 0 -2\n")); addMultiplyRow(mat, 2, 2, 2); ASSERT_EQ(mat, makeMatrix(4, "-5 -1 3 4\n" "4 5 6 1\n" "12 6 0 -6\n")); } TEST(Matrix, MultiplyRows) { Matrix mat = make123(); multiplyRow(mat, 1, 2); ASSERT_EQ(mat, makeMatrix(4, "1 2 3 1\n" "8 10 12 2\n" "7 8 9 1\n")); } TEST(Matrix, SwapRows) { Matrix mat = make123(); swapRows(mat, 1, 1); ASSERT_EQ(mat, make123()); swapRows(mat, 0, 2); ASSERT_EQ(mat, makeMatrix(4, "7 8 9 1\n" "4 5 6 1\n" "1 2 3 1\n")); } TEST(Matrix, RowReduceAndFully1) { Matrix mat = make123(); rowReduce(mat); ASSERT_EQ(mat, makeMatrix(4, "1 2 3 1\n" "0 -3 -6 -3\n" "0 0 0 0\n")); rowReduceFully(mat); ASSERT_EQ(mat, makeMatrix(4, "1 0 -1 -1\n" "0 1 2 1\n" "0 0 0 0\n")); } TEST(Matrix, RowReduceAndFully2) { Matrix mat = makeMatrix(5, "-4 -8 3 0 23\n" "-4 -8 2 -1 8\n" " 2 4 -1 3/2 4\n"); Matrix red = makeMatrix(5, "1 2 0 0 -1/2\n" "0 0 1 0 7\n" "0 0 0 1 8\n"); rowReduceFully(mat); ASSERT_EQ(mat, red); rowReduce(mat); ASSERT_EQ(mat, red); rowReduceFully(mat); ASSERT_EQ(mat, red); } TEST(Matrix, RowReduceAndFully3) { Matrix mat(0, 0); rowReduce(mat); ASSERT_EQ(mat, Matrix(0, 0)); rowReduceFully(mat); ASSERT_EQ(mat, Matrix(0, 0)); } TEST(Matrix, RowReduceAndFully4) { Matrix mat(3, 7); rowReduce(mat); ASSERT_EQ(mat, Matrix(3, 7)); rowReduceFully(mat); ASSERT_EQ(mat, Matrix(3, 7)); } TEST(Matrix, SubMatrix) { Matrix mat = make123(); Matrix sub; subMatrix(sub, mat, 0, 3, 0, 4); ASSERT_EQ(sub, mat); subMatrix(sub, mat, 1, 1, 0, 0); ASSERT_EQ(sub, Matrix(0, 0)); subMatrix(sub, mat, 0, 2, 2, 3); ASSERT_EQ(sub, makeMatrix(1, "3\n6\n")); subMatrix(mat, mat, 1, 2, 2, 3); ASSERT_EQ(mat, makeMatrix(1, "6\n")); } TEST(Matrix, Inverse) { Matrix mat = makeMatrix(3, "1 3 3\n" "1 4 3\n" "1 3 4\n"); Matrix inv; inverse(inv, mat); ASSERT_EQ(inv, makeMatrix(3, " 7 -3 -3\n" "-1 1 0\n" "-1 0 1\n")); inverse(mat, mat); ASSERT_EQ(inv, mat); } TEST(Matrix, NullSpace1) { Matrix mat = makeMatrix(6, "1 2 0 0 3 0\n" "0 0 1 0 7 0\n" "0 0 0 1 8 0\n" "0 0 0 0 0 0\n"); Matrix basis; nullSpace(basis, mat); ASSERT_EQ(basis, makeMatrix(3, "-2 -3 0\n" " 1 0 0\n" " 0 -7 0\n" " 0 -8 0\n" " 0 1 0\n" " 0 0 1\n")); } TEST(Matrix, NullSpace2) { Matrix mat = make123(); Matrix basis; nullSpace(basis, mat); ASSERT_EQ(basis, makeMatrix(2, " 1 1\n" "-2 -1\n" " 1 0\n" " 0 1\n")); } TEST(Matrix, NullSpace3) { Matrix mat = makeMatrix(6, "13 -171 29 41 37 17\n" "11 61 -278 131 19 23\n" "-3 53 123 -317 41 7\n" "11 97 23 47 -297 41\n" "13 19 11 37 61 -143\n"); Matrix basis; nullSpace(basis, mat); ASSERT_EQ(basis, makeMatrix(1, "36441469497\n" " 6795794100\n" " 5893319208\n" " 4007175176\n" " 5788247217\n" " 8175064786\n")); } TEST(Matrix, Solve1) { Matrix lhs = make123(); Matrix rhs = makeMatrix(2, "5 5\n" "14 13\n" "26 23\n"); bool hasSolution = solve(lhs, lhs, rhs); ASSERT_FALSE(hasSolution); ASSERT_EQ(lhs, make123()); // no change if no solution } TEST(Matrix, Solve2) { Matrix lhs = make123(); Matrix rhs = makeMatrix(1, "5\n14\n23\n"); Matrix sol; bool hasSolution = solve(sol, lhs, rhs); ASSERT_TRUE(hasSolution); ASSERT_EQ(sol, makeMatrix(1, "1\n2\n0\n0")); } TEST(Matrix, Solve3) { Matrix lhs = makeMatrix(1, "2"); Matrix rhs = makeMatrix(2, "-1 8"); Matrix sol; bool hasSolution = solve(sol, lhs, rhs); ASSERT_TRUE(hasSolution); ASSERT_EQ(sol, makeMatrix(2, "-1/2\n4\n")); } TEST(Matrix, Print) { const char* str = " 13 -171 29 41 37 17\n" " 11 61 -278 131 19 23\n" " -3 53 123 -317 41 7\n" " 11 97 23 47 -297 41\n" " 13 19 11 37 61 -143\n"; ostringstream pr; pr << makeMatrix(6, str); ASSERT_EQ(pr.str(), str); } TEST(Matrix, Determinant) { Matrix mat1 = makeMatrix (3, " 4 1 1\n" "-1 -2 1\n" " 2 -1 0\n"); ASSERT_EQ(determinant(mat1), 11); Matrix mat2 = makeMatrix (2, " 0 3\n" " 2 0\n"); ASSERT_EQ(determinant(mat2), -6); Matrix mat3 = makeMatrix (3, " 0 1 0\n" " 2 0 100\n" " 0 0 7\n"); ASSERT_EQ(determinant(mat3), -14); Matrix mat4 = makeMatrix (1, "-2\n"); ASSERT_EQ(determinant(mat4), -2); } TEST(Matrix, IsParallelogram) { // zeroes and variations of number of pointsx for (size_t dim = 0; dim < 5; ++dim) { ASSERT_FALSE(isParallelogram(Matrix(0, dim))); ASSERT_FALSE(isParallelogram(Matrix(3, dim))); ASSERT_TRUE(isParallelogram(Matrix(4, dim))); ASSERT_FALSE(isParallelogram(Matrix(5, dim))); } // permutations ASSERT_TRUE(isParallelogram(makeMatrix(2, "1 1\n 2 3\n 3 1\n 4 3\n"))); ASSERT_TRUE(isParallelogram(makeMatrix(2, "2 3\n 1 1\n 3 1\n 4 3\n"))); ASSERT_TRUE(isParallelogram(makeMatrix(2, "2 3\n 1 1\n 4 3\n 3 1\n"))); ASSERT_TRUE(isParallelogram(makeMatrix(2, "2 3\n 4 3\n 1 1\n 3 1\n"))); ASSERT_TRUE(isParallelogram(makeMatrix(2, "4 3\n 2 3\n 1 1\n 3 1\n"))); ASSERT_FALSE(isParallelogram(makeMatrix(2, "4 3\n 2 3\n 1 1\n 3 3\n"))); // higher dimension ASSERT_TRUE(isParallelogram(makeMatrix(3,"1 1 4\n 2 3 6\n 3 1 7\n 4 3 9\n"))); ASSERT_FALSE(isParallelogram(makeMatrix(3,"1 1 5\n2 3 6\n 3 1 7\n 4 3 9\n"))); // lower dimension ASSERT_TRUE(isParallelogram(makeMatrix(1, "1\n 2\n 3\n 4\n"))); ASSERT_FALSE(isParallelogram(makeMatrix(1, "1\n 1\n 3\n 4\n"))); } TEST(Matrix, GetParallelogramArea) { ASSERT_EQ(0, getParallelogramAreaSq(makeMatrix(1, "1\n1\n1\n1"))); ASSERT_EQ(0, getParallelogramAreaSq(makeMatrix(2, "1 2\n1 2\n3 5\n3 5"))); ASSERT_EQ(1, getParallelogramAreaSq(makeMatrix(2, "0 0\n0 1\n1 0\n1 1"))); ASSERT_EQ(4, getParallelogramAreaSq(makeMatrix(2, "0 0\n0 2\n1 0\n1 2"))); ASSERT_EQ(4, getParallelogramAreaSq(makeMatrix(2, "1 2\n1 4\n2 2\n2 4"))); ASSERT_EQ(4, getParallelogramAreaSq (makeMatrix(3, "1 2 1\n1 4 1\n2 2 1\n2 4 1"))); ASSERT_EQ(44, getParallelogramAreaSq (makeMatrix(3, "1 2 0\n1 4 2\n2 2 3\n2 4 5"))); ASSERT_EQ(19277, getParallelogramAreaSq (makeMatrix(3, "5 -1 6\n 13 -5 5\n -14 5 -7\n -6 1 -8"))); ASSERT_EQ(2580644, getParallelogramAreaSq (makeMatrix(4, "-17 -15 -16 29\n -16 7 -24 18\n" "-2 -10 27 -14\n -1 12 19 -25"))); } frobby-0.9.5/src/MaximalStandardAction.cpp000066400000000000000000000042351401527164200205200ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "MaximalStandardAction.h" #include "SliceFacade.h" #include "SliceParams.h" #include "DataType.h" MaximalStandardAction::MaximalStandardAction(): Action (staticGetName(), "Compute the maximal standard monomials of the input ideal.", "Compute the maximal standard monomials of the input ideal. A standard " "monomial\nis a monomial that does not lie in the ideal, while a " "maximal\nstandard monomial m is a standard monomial such that m * v does " "lie in the\nideal for every variable v in the ambient polynomial ring of I.", false), _io(DataType::getMonomialIdealType(), DataType::getMonomialIdealType()), _increment ("increment", "Increase each entry of the output by 1 to compute maximal staircase\n" "monomials in place of maximal standard monomials.", false) { } const char* MaximalStandardAction::staticGetName() { return "maxstandard"; } void MaximalStandardAction::obtainParameters(vector& parameters) { _io.obtainParameters(parameters); _sliceParams.obtainParameters(parameters); parameters.push_back(&_increment); Action::obtainParameters(parameters); } void MaximalStandardAction::perform() { SliceParams params(_params); validateSplit(params, true, false); SliceFacade facade(params, DataType::getMonomialIdealListType()); if (_increment) facade.computeMaximalStaircaseMonomials(); else facade.computeMaximalStandardMonomials(); } frobby-0.9.5/src/MaximalStandardAction.h000066400000000000000000000023351401527164200201640ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef MAXIMAL_STANDARD_ACTION #define MAXIMAL_STANDARD_ACTION #include "Action.h" #include "IOParameters.h" #include "SliceParameters.h" #include "BoolParameter.h" class MaximalStandardAction : public Action { public: MaximalStandardAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); private: SliceParameters _sliceParams; IOParameters _io; BoolParameter _increment; }; #endif frobby-0.9.5/src/Minimizer.cpp000066400000000000000000000245721401527164200162620ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Minimizer.h" #include "TermPredicate.h" #include "Term.h" #include /** @todo: Convert everything in this file to be in terms of IdealTree. After that, consider converting all clients of this code to use IdealTree directly. */ namespace { typedef vector::iterator TermIterator; } TermIterator simpleMinimize(TermIterator begin, TermIterator end, size_t varCount) { if (begin == end) return end; std::sort(begin, end, LexComparator(varCount)); TermIterator newEnd = begin; ++newEnd; // The first one is always kept TermIterator dominator = newEnd; for (; dominator != end; ++dominator) { bool remove = false; for (TermIterator divisor = begin; divisor != newEnd; ++divisor) { if (Term::divides(*divisor, *dominator, varCount)) { remove = true; break; } } if (!remove) { *newEnd = *dominator; ++newEnd; } } return newEnd; } TermIterator twoVarMinimize(TermIterator begin, TermIterator end) { if (begin == end) return end; std::sort(begin, end, LexComparator(2)); TermIterator last = begin; TermIterator it = begin; ++it; for (; it != end; ++it) { if ((*it)[1] < (*last)[1]) { ++last; *last = *it; } } ++last; return last; } class TreeNode { typedef vector::iterator iterator; public: TreeNode(iterator begin, iterator end, size_t varCount): _lessOrEqual(0), _greater(0), _var(0), _pivot(0), _varCount(varCount), _begin(begin), _end(end) { } ~TreeNode() { delete _lessOrEqual; delete _greater; } void makeTree() { ASSERT(_greater == 0); ASSERT(_lessOrEqual == 0); if (distance(_begin, _end) > 20) { Term lcm(_varCount); for (iterator it = _begin; it != _end; ++it) lcm.lcm(lcm, *it); while (true) { size_t maxVar = 0; for (size_t var = 0; var < _varCount; ++var) if (lcm[var] > lcm[maxVar]) maxVar = var; if (lcm[maxVar] == 0) { break; // we are not making any progress anyway } ASSERT(lcm[maxVar] >= 1); _var = maxVar; _pivot = lcm[maxVar] / 4; lcm[maxVar] = 0; // So we do not process this same var again. iterator left = _begin; iterator right = _end - 1; while (left != right) { while ((*left)[_var] <= _pivot && left != right) ++left; while ((*right)[_var] > _pivot && left != right) --right; swap(*left, *right); } ASSERT((*right)[_var] > _pivot); if ((*_begin)[_var] > _pivot) continue; iterator middle = right; while ((*middle)[maxVar] > _pivot) --middle; ++middle; ASSERT(middle != _begin); _lessOrEqual = new TreeNode(_begin, middle, _varCount); _greater = new TreeNode(middle, _end, _varCount); _end = _begin; _lessOrEqual->makeTree(); _greater->makeTree(); return; } } _end = simpleMinimize(_begin, _end, _varCount); } bool isRedundant(const Exponent* term) { if (_begin != _end) { ASSERT(_lessOrEqual == 0); ASSERT(_greater == 0); for (iterator it = _begin; it != _end; ++it) if (Term::dominates(term, *it, _varCount)) return true; return false; } else { ASSERT(_lessOrEqual != 0); ASSERT(_greater != 0); if (term[_var] > _pivot && _greater->isRedundant(term)) return true; if (_lessOrEqual->isRedundant(term)) return true; return false; } } void collect(vector& terms) { if (_begin != _end) { ASSERT(_lessOrEqual == 0); ASSERT(_greater == 0); terms.insert(terms.end(), _begin, _end); return; } ASSERT(_lessOrEqual != 0); ASSERT(_greater != 0); size_t oldSize = terms.size(); _greater->collect(terms); for (size_t i = oldSize; i < terms.size();) { if (_lessOrEqual->isRedundant(terms[i])) { swap(terms[i], terms.back()); terms.pop_back(); } else ++i; } _lessOrEqual->collect(terms); } void print(FILE* out) { if (_begin == _end) { ASSERT(_lessOrEqual != 0); ASSERT(_greater != 0); fprintf(out, "NODE (pivot=%lu^%lu, varCount = %lu\n", (unsigned long)_var, (unsigned long)_pivot, (unsigned long)_varCount); fputs("-lessOrEqual: ", out); _lessOrEqual->print(out); fputs("-greater: ", out); _greater->print(out); fputs(")\n", out); } else { ASSERT(_lessOrEqual == 0); ASSERT(_greater == 0); fprintf(out, "NODE (_varCount = %lu terms:\n", (unsigned long)_varCount); for (iterator it = _begin; it != _end; ++it) { fputc(' ', out); Term::print(out, *it, _varCount); fprintf(out, " %p\n", (void*)*it); } fputs(")\n", out); } } private: TreeNode* _lessOrEqual; TreeNode* _greater; size_t _var; Exponent _pivot; size_t _varCount; iterator _begin; iterator _end; }; Minimizer::iterator Minimizer::minimize(iterator begin, iterator end) const { if (_varCount == 2) return twoVarMinimize(begin, end); if (distance(begin, end) < 1000 || _varCount == 0) return simpleMinimize(begin, end, _varCount); vector terms; terms.clear(); terms.reserve(distance(begin, end)); TreeNode node(begin, end, _varCount); node.makeTree(); node.collect(terms); return copy(terms.begin(), terms.end(), begin); } pair Minimizer::colonReminimize (iterator begin, iterator end, const Exponent* colon) { ASSERT(isMinimallyGenerated(begin, end)); if (Term::getSizeOfSupport(colon, _varCount) == 1) { size_t var = Term::getFirstNonZeroExponent(colon, _varCount); return colonReminimize(begin, end, var, colon[var]); } iterator blockBegin = end; for (iterator it = begin; it != blockBegin;) { bool block = true; bool strictDivision = true; for (size_t var = 0; var < _varCount; ++var) { if (colon[var] >= (*it)[var]) { if ((*it)[var] > 0) block = false; if (colon[var] > 0) strictDivision = false; (*it)[var] = 0; } else (*it)[var] -= colon[var]; } if (strictDivision) { swap(*begin, *it); ++begin; ++it; } else if (block) { --blockBegin; swap(*it, *blockBegin); } else ++it; } if (begin == blockBegin) return make_pair(end, false); iterator newEnd = minimize(begin, blockBegin); for (iterator it = blockBegin; it != end; ++it) { if (!dominatesAny(begin, blockBegin, *it)) { *newEnd = *it; ++newEnd; } } ASSERT(isMinimallyGenerated(begin, newEnd)); return make_pair(newEnd, true); } bool Minimizer::isMinimallyGenerated (const_iterator begin, const_iterator end) { if (distance(begin, end) < 1000 || _varCount == 0) { for (const_iterator divisor = begin; divisor != end; ++divisor) for (const_iterator dominator = begin; dominator != end; ++dominator) if (Term::divides(*divisor, *dominator, _varCount) && divisor != dominator) return false; return true; } vector terms(begin, end); TreeNode node(terms.begin(), terms.end(), _varCount); node.makeTree(); vector terms2; node.collect(terms2); return terms.size() == terms2.size(); } bool Minimizer::dominatesAny (iterator begin, iterator end, const Exponent* term) { for (; begin != end; ++begin) if (Term::dominates(term, *begin, _varCount)) return true; return false; } bool Minimizer::dividesAny (iterator begin, iterator end, const Exponent* term) { for (; begin != end; ++begin) if (Term::divides(term, *begin, _varCount)) return true; return false; } pair Minimizer::colonReminimize (iterator begin, iterator end, size_t var, Exponent exponent) { // Sort in descending order according to exponent of var while // ignoring everything that is strictly divisible by // var^exponent. We put the zero entries at the right end // immediately, before calling sort, because there are likely to be // many of them, and we can do so while we are anyway looking for // the strictly divisible monomials. The combination of these // significantly reduce the number of monomials that need to be // sorted. iterator zeroBegin = end; for (iterator it = begin; it != zeroBegin;) { if ((*it)[var] > exponent) { (*it)[var] -= exponent; // apply colon swap(*it, *begin); ++begin; ++it; } else if ((*it)[var] == 0) { // no need to apply colon in this case --zeroBegin; swap(*it, *zeroBegin); } else ++it; } if (begin == zeroBegin) return make_pair(end, false); // Sort the part of the array that we have not handled yet. std::sort(begin, zeroBegin, ReverseSingleDegreeComparator(var, _varCount)); // We group terms into blocks according to term[var]. iterator previousBlockEnd = begin; iterator newEnd = begin; Exponent block = (*begin)[var]; for (iterator it = begin; it != end; ++it) { // Detect if we are moving on to next block. if ((*it)[var] != block) { block = (*it)[var]; previousBlockEnd = newEnd; } ASSERT((*it)[var] <= exponent); (*it)[var] = 0; bool remove = false; for (iterator divisor = begin; divisor != previousBlockEnd; ++divisor) { if (Term::divides(*divisor, *it, _varCount)) { remove = true; break; } } if (!remove) { *newEnd = *it; ++newEnd; } } return make_pair(newEnd, true); } frobby-0.9.5/src/Minimizer.h000066400000000000000000000031421401527164200157150ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef IDEAL_MINIMIZER_GUARD #define IDEAL_MINIMIZER_GUARD #include class Minimizer { private: typedef vector::iterator iterator; typedef vector::const_iterator const_iterator; public: Minimizer(size_t varCount): _varCount(varCount) {} iterator minimize(iterator begin, iterator end) const; pair colonReminimize(iterator begin, iterator end, const Exponent* colon); pair colonReminimize(iterator begin, iterator end, size_t var, Exponent exponent); bool dominatesAny(iterator begin, iterator end, const Exponent* term); bool dividesAny(iterator begin, iterator end, const Exponent* term); bool isMinimallyGenerated(const_iterator begin, const_iterator end); private: size_t _varCount; }; #endif frobby-0.9.5/src/MonosIOHandler.cpp000066400000000000000000000075661401527164200171440ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "MonosIOHandler.h" #include "Scanner.h" #include "BigTermConsumer.h" #include "DataType.h" #include "IdealWriter.h" #include "error.h" #include "InputConsumer.h" #include namespace IO { namespace Monos { void writeRing(const VarNames& names, FILE* out); } namespace M = Monos; class MonosIdealWriter : public IdealWriter { public: MonosIdealWriter(FILE* out): IdealWriter(out) { } private: virtual void doWriteHeader(bool first) { M::writeRing(getNames(), getFile()); fputc('[', getFile()); } virtual void doWriteTerm(const Term& term, const TermTranslator& translator, bool first) { fputs(first ? "\n " : ",\n ", getFile()); writeTermProduct(term, translator, getFile()); } virtual void doWriteTerm(const vector& term, bool first) { fputs(first ? "\n " : ",\n ", getFile()); writeTermProduct(term, getNames(), getFile()); } virtual void doWriteFooter(bool wasZeroIdeal) { fputs("\n];\n", getFile()); } virtual void doWriteEmptyList() { M::writeRing(getNames(), getFile()); } }; MonosIOHandler::MonosIOHandler(): IOHandlerCommon(staticGetName(), "Older format used by the program Monos.") { registerInput(DataType::getMonomialIdealType()); registerInput(DataType::getMonomialIdealListType()); registerOutput(DataType::getMonomialIdealType()); registerOutput(DataType::getMonomialIdealListType()); } const char* MonosIOHandler::staticGetName() { return "monos"; } BigTermConsumer* MonosIOHandler::doCreateIdealWriter(FILE* out) { return new MonosIdealWriter(out); } void MonosIOHandler::doWriteTerm(const vector& term, const VarNames& names, FILE* out) { writeTermProduct(term, names, out); } void MonosIOHandler::doReadTerm(Scanner& in, InputConsumer& consumer) { consumer.consumeTermProductNotation(in); } void MonosIOHandler::doReadRing(Scanner& in, VarNames& names) { names.clear(); in.expect("vars"); if (!in.match(';')) { do { names.addVarSyntaxCheckUnique(in, in.readIdentifier()); } while (in.match(',')); in.expect(';'); } } bool MonosIOHandler::doPeekRing(Scanner& in) { return in.peek('v'); } void MonosIOHandler::doReadBareIdeal(Scanner& in, InputConsumer& consumer) { consumer.beginIdeal(); in.expect('['); if (!in.match(']')) { do { consumer.consumeTermProductNotation(in); } while (in.match(',')); if (!in.match(']')) { if (in.peekIdentifier()) in.expect('*'); else in.expect(']'); } } in.expect(';'); consumer.endIdeal(); } void M::writeRing(const VarNames& names, FILE* out) { fputs("vars ", out); const char* pre = ""; for (unsigned int i = 0; i < names.getVarCount(); ++i) { fputs(pre, out); fputs(names.getName(i).c_str(), out); pre = ", "; } fputs(";\n", out); } } frobby-0.9.5/src/MonosIOHandler.h000066400000000000000000000030131401527164200165700ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef MONOS_IO_HANDLER_GUARD #define MONOS_IO_HANDLER_GUARD #include "IOHandlerCommon.h" #include class Scanner; class VarNames; class BigTermConsumer; namespace IO { class MonosIOHandler : public IOHandlerCommon { public: MonosIOHandler(); static const char* staticGetName(); private: virtual BigTermConsumer* doCreateIdealWriter(FILE* out); virtual void doWriteTerm(const vector& term, const VarNames& names, FILE* out); virtual void doReadTerm(Scanner& in, InputConsumer& consumer); virtual void doReadRing(Scanner& in, VarNames& names); virtual bool doPeekRing(Scanner& in); virtual void doReadBareIdeal(Scanner& in, InputConsumer& consumer); }; } #endif frobby-0.9.5/src/MsmSlice.cpp000066400000000000000000000241151401527164200160240ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "MsmSlice.h" #include "TermConsumer.h" #include "MsmStrategy.h" MsmSlice::MsmSlice(MsmStrategy& strategy): Slice(strategy), _consumer(0) { } MsmSlice::MsmSlice(MsmStrategy& strategy, const Ideal& ideal, const Ideal& subtract, const Term& multiply, TermConsumer* consumer): Slice(strategy, ideal, subtract, multiply), _consumer(consumer) { ASSERT(consumer != 0); removeDoubleLcm(); } bool MsmSlice::baseCase(bool simplified) { ASSERT(_consumer != 0); if (getIdeal().getGeneratorCount() < _varCount) return true; // Check that each variable appears in some minimal generator. if (getLcm().getSizeOfSupport() < _varCount) return true; ASSERT(!removeDoubleLcm()); if (_varCount == 0) { if (getIdeal().isZeroIdeal()) _consumer->consume(_multiply); return true; } if (_varCount == 1) { _consumer->consume(_multiply); return true; } if (!simplified) { if (getLcm().isSquareFree()) { // We know this since !removeDoubleLcm(). ASSERT(getIdeal().isIrreducible()); _consumer->consume(_multiply); return true; } if (getIdeal().getGeneratorCount() == _varCount) { if (getSubtract().isZeroIdeal()) { _lcm.decrement(); _multiply.product(_multiply, _lcm); } else { Term tmp(getLcm()); tmp.decrement(); innerSlice(tmp); if (getIdeal().getGeneratorCount() < _varCount) return true; } _consumer->consume(_multiply); return true; } return false; } if (_varCount == 2) { twoVarBaseCase(); return true; } if (getIdeal().getGeneratorCount() > _varCount) { if (getIdeal().getGeneratorCount() == _varCount + 1) { oneMoreGeneratorBaseCase(); return true; } if (twoNonMaxBaseCase()) return true; return false; } // These things are ensured since the slice is simplified. ASSERT(getLcm().isSquareFree()); ASSERT(getIdeal().isIrreducible()); _consumer->consume(_multiply); return true; } Slice& MsmSlice::operator=(const Slice& slice) { ASSERT(dynamic_cast(&slice) != 0); Slice::operator=(slice); _consumer = ((MsmSlice&)slice)._consumer; return *this; } bool MsmSlice::simplifyStep() { ASSERT(!removeDoubleLcm()); if (applyLowerBound()) return true; pruneSubtract(); ASSERT(!removeDoubleLcm()); return false; } void MsmSlice::setToProjOf(const MsmSlice& slice, const Projection& projection, TermConsumer* consumer) { ASSERT(consumer != 0); Slice::setToProjOf(slice, projection); _consumer = consumer; } bool MsmSlice::innerSlice(const Term& pivot) { ASSERT(!removeDoubleLcm()); bool changedMuch = Slice::innerSlice(pivot); if (!_lcmUpdated) changedMuch = removeDoubleLcm() || changedMuch; ASSERT(getLcm().getSizeOfSupport() < getVarCount() || !removeDoubleLcm()); return changedMuch; } void MsmSlice::outerSlice(const Term& pivot) { ASSERT(!removeDoubleLcm()); Slice::outerSlice(pivot); if (!_lcmUpdated) removeDoubleLcm(); ASSERT(!removeDoubleLcm()); } void MsmSlice::swap(MsmSlice& slice) { Slice::swap(slice); std::swap(_consumer, slice._consumer); } // Helper class for removeDoubleLcm(). class DoubleLcmPredicate { public: DoubleLcmPredicate(const Term& lcm): _lcm(lcm) { } bool operator()(const Exponent* term) { bool seenMatch = false; for (size_t var = 0; var < _lcm.getVarCount(); ++var) { if (term[var] == _lcm[var]) { if (seenMatch) return true; seenMatch = true; } } return false; } private: void operator=(const DoubleLcmPredicate&); // To make it inaccessible. const Term& _lcm; }; bool MsmSlice::removeDoubleLcm() { if (_ideal.getGeneratorCount() == 0) return false; bool removedAny = false; while (true) { DoubleLcmPredicate pred(getLcm()); if (!_ideal.removeIf(pred)) break; removedAny = true; _lcmUpdated = false; }; return removedAny; } bool MsmSlice::getLowerBound(Term& bound, size_t var) const { const Term& lcm = getLcm(); bound = lcm; Ideal::const_iterator stop = getIdeal().end(); for (Ideal::const_iterator it = getIdeal().begin(); it != stop; ++it) { Exponent* term = *it; if (term[var] == 0) continue; // Use the fact that terms with a maximal exponent somewhere not // at var cannot be a var-label. for (size_t var2 = 0; var2 < _varCount; ++var2) if (term[var2] == lcm[var2] && var2 != var) goto skip; bound.gcd(bound, *it); skip:; } ASSERT(_varCount >= 2); if (bound[0] == lcm[0] && bound[1] == lcm[1]) { // No possible var-label, so the content is empty. return false; } ASSERT(bound[var] >= 1); bound[var] -= 1; return true; } void MsmSlice::twoVarBaseCase() { ASSERT(_varCount == 2); singleDegreeSortIdeal(0); // We use _lcm to store the maximal standard monomial in, since we // are not going to be using _lcm later anyway, and this way we // avoid having to do a potentially costly allocation of an array of // size 2 in this method that can be called a lot on small ideals. _lcmUpdated = false; Ideal::const_iterator stop = getIdeal().end(); Ideal::const_iterator it = getIdeal().begin(); if (it == stop) return; while (true) { _lcm[1] = (*it)[1] - 1; ++it; if (it == stop) break; _lcm[0] = (*it)[0] - 1; ASSERT(!getIdeal().contains(_lcm)); if (!_subtract.contains(_lcm)) { _lcm[0] += _multiply[0]; _lcm[1] += _multiply[1]; _consumer->consume(_lcm); } } } void MsmSlice::oneMoreGeneratorBaseCase() { ASSERT(_varCount + 1 == getIdeal().getGeneratorCount()); // Since the slice is fully simplified, we must be dealing with an // artinian power in each variable, and then a single generator // whose support is at least 2. We can then simply run through all // the possibilities for that generator to be a label. Ideal::const_iterator it = getIdeal().begin(); while (Term::getSizeOfSupport(*it, _varCount) == 1) { ++it; ASSERT(it != getIdeal().end()); } Term msm(_varCount); for (size_t var = 0; var < _varCount; ++var) { ASSERT((*it)[var] <= 1); ASSERT((*it)[var] < getLcm()[var]); msm[var] = getLcm()[var] - 1; _multiply[var] += msm[var]; } for (size_t var = 0; var < _varCount; ++var) { if ((*it)[var] == 1) { msm[var] = 0; // try *it as var-label if (!getSubtract().contains(msm)) { _multiply[var] -= getLcm()[var] - 1; _consumer->consume(_multiply); _multiply[var] += getLcm()[var] - 1; } msm[var] = getLcm()[var] - 1; } } } // Helper function for the method twoNonMaxBaseCase. bool getTheOnlyTwoNonMax(Ideal::const_iterator it, const Exponent*& first, const Exponent*& second, Ideal::const_iterator end, const Term& lcm) { size_t count = 0; for (; it != end; ++it) { bool nonMax = true; for (size_t var = 0; var < lcm.getVarCount(); ++var) { if ((*it)[var] == lcm[var]) { nonMax = false; break; } } if (nonMax) { if (count == 0) first = *it; else if (count == 1) second = *it; else return false; ++count; } } return count == 2; } bool MsmSlice::twoNonMaxBaseCase() { const Term& lcm = getLcm(); Ideal::const_iterator stop = getIdeal().end(); const Exponent* nonMax1; const Exponent* nonMax2; if (!getTheOnlyTwoNonMax(getIdeal().begin(), nonMax1, nonMax2, stop, lcm)) return false; Term msm(_lcm); for (size_t var = 0; var < _varCount; ++var) msm[var] -= 1; Term tmp(_varCount); for (size_t var1 = 0; var1 < _varCount; ++var1) { if (nonMax1[var1] == 0) continue; if (nonMax1[var1] <= nonMax2[var1]) continue; for (size_t var2 = 0; var2 < _varCount; ++var2) { if (var1 == var2 || nonMax2[var2] == 0) continue; if (nonMax2[var2] <= nonMax1[var2]) continue; // Use tmp to record those variables for which labels have been // found. If some variable has no label, then we are not dealing // with an actual maximal standard monomial. tmp.setToIdentity(); tmp[var1] = true; tmp[var2] = true; for (Ideal::const_iterator it = getIdeal().begin(); it != stop; ++it) { if ((*it)[var1] >= nonMax1[var1] || (*it)[var2] >= nonMax2[var2]) continue; for (size_t var = 0; var < lcm.getVarCount(); ++var) { if ((*it)[var] == lcm[var]) { tmp[var] = true; break; } } } if (tmp.getSizeOfSupport() < _varCount) continue; msm[var1] = nonMax1[var1] - 1; msm[var2] = nonMax2[var2] - 1; if (!getSubtract().contains(msm)) { tmp.product(msm, _multiply); _consumer->consume(tmp); } msm[var2] = lcm[var2] - 1; msm[var1] = lcm[var1] - 1; } } for (size_t var = 0; var < _varCount; ++var) { Exponent e; if (nonMax1[var] < nonMax2[var]) e = nonMax1[var]; else e = nonMax2[var]; if (e == 0) continue; msm[var] = e - 1; if (!getSubtract().contains(msm)) { tmp.product(msm, _multiply); _consumer->consume(tmp); } msm[var] = lcm[var] - 1; } return true; } frobby-0.9.5/src/MsmSlice.h000066400000000000000000000066371401527164200155020ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef MSM_SLICE_GUARD #define MSM_SLICE_GUARD #include "Slice.h" #include "Term.h" #include "Ideal.h" class TermConsumer; class Projection; class MsmStrategy; /** Invariant: either the slice is a trivial base case, or removeDoubleLcm returns false. @todo expand and check comments. */ class MsmSlice : public Slice { public: MsmSlice(MsmStrategy& strategy); MsmSlice(MsmStrategy& strategy, const Ideal& ideal, const Ideal& subtract, const Term& multiply, TermConsumer* consumer); TermConsumer* getConsumer() {return _consumer;} // *** Mutators // A base case is reached if not all variables divide the lcm of // getIdeal(), or if getGeneratorCount() is 2, or if getIdeal() is // square free. virtual bool baseCase(bool simplified); virtual Slice& operator=(const Slice& slice); virtual bool simplifyStep(); void setToProjOf(const MsmSlice& slice, const Projection& projection, TermConsumer* consumer); // Efficiently swaps the values of *this and slice. void swap(MsmSlice& slice); virtual bool innerSlice(const Term& pivot); virtual void outerSlice(const Term& pivot); private: // Removes those generators g of getIdeal() such that g[i] equals // getLcm()[i] for two distinct i. This is done iteratively until no // more generators can be removed in this way. Returns true if any // generators were removed. bool removeDoubleLcm(); // Calculates the gcd of those generators of getIdeal() that are // divisible by var. This gcd is then divided by var to yield a // lower bound on the content of the slice. Returns false if a base // case is detected. The real functionality is slight more // sophisticated. virtual bool getLowerBound(Term& bound, size_t var) const; // Outputs the content of the slice to consumer. It is a // precondition that the slice is fully simplified and that // getVarCount() returns 2. void twoVarBaseCase(); // Outputs the content of the slice to consumer. It is a // precondition that the slice is fully simplified and that // getVarCount() plus one equals // getIdeal().getGeneratorCount(). This will, due to simplification, // be true if there is exactly one generator that is nowhere equal // to the lcm of getIdeal(). void oneMoreGeneratorBaseCase(); // Outputs the content of the slice to consumer or returns false. It // is a precondition that the slice is fully simplified. Returns // true if there are exactly two generators that are nowhere equal // to the lcm of getIdeal(). bool twoNonMaxBaseCase(); TermConsumer* _consumer; }; inline void swap(MsmSlice& a, MsmSlice& b) { a.swap(b); } #endif frobby-0.9.5/src/MsmStrategy.cpp000066400000000000000000000170531401527164200165720ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "MsmStrategy.h" #include "MsmSlice.h" #include "Term.h" #include "Ideal.h" #include "TermTranslator.h" #include #include "Projection.h" #include "TermGrader.h" MsmStrategy::MsmStrategy(TermConsumer* consumer, const SplitStrategy* splitStrategy): SliceStrategyCommon(splitStrategy), _consumer(consumer), _initialSubtract(0) { ASSERT(consumer != 0); } MsmStrategy::MsmStrategy(TermConsumer* consumer, const SplitStrategy* splitStrategy, const Ideal& initialSubtract): SliceStrategyCommon(splitStrategy), _consumer(consumer), _initialSubtract(new Ideal(initialSubtract)) { ASSERT(consumer != 0); } void MsmStrategy::run(const Ideal& ideal) { ASSERT(_initialSubtract.get() == 0 || _initialSubtract->getVarCount() == ideal.getVarCount()); _consumer->beginConsuming(); size_t varCount = ideal.getVarCount(); if (_initialSubtract.get() == 0) _initialSubtract = auto_ptr(new Ideal(varCount)); Term sliceMultiply(varCount); for (size_t var = 0; var < varCount; ++var) sliceMultiply[var] = 1; auto_ptr slice (new MsmSlice(*this, ideal, *_initialSubtract, sliceMultiply, _consumer)); simplify(*slice); _initialSubtract.reset(); _tasks.addTask(slice.release()); _tasks.runTasks(); _consumer->doneConsuming(); } bool MsmStrategy::processSlice(TaskEngine& tasks, auto_ptr slice) { ASSERT(slice.get() != 0); if (slice->baseCase(getUseSimplification())) { freeSlice(slice); return true; } if (getUseIndependence() && _indep.analyze(*slice)) independenceSplit(slice); else if (_split->isLabelSplit()) labelSplit(slice); else { ASSERT(_split->isPivotSplit()); pivotSplit(auto_ptr(slice)); } return false; } auto_ptr MsmStrategy::newMsmSlice() { auto_ptr slice(newSlice()); ASSERT(dynamic_cast(slice.get()) != 0); return auto_ptr(static_cast(slice.release())); } auto_ptr MsmStrategy::allocateSlice() { return auto_ptr(new MsmSlice(*this)); } bool MsmStrategy::debugIsValidSlice(Slice* slice) { ASSERT(slice != 0); ASSERT(dynamic_cast(slice) != 0); return true; } void MsmStrategy::labelSplit(auto_ptr sliceParam) { ASSERT(sliceParam.get() != 0); ASSERT(debugIsValidSlice(sliceParam.get())); auto_ptr slice (static_cast(sliceParam.release())); ASSERT(!slice->adjustMultiply()); ASSERT(!slice->normalize()); ASSERT(_split != 0); size_t var = _split->getLabelSplitVariable(*slice); Term term(slice->getVarCount()); const Term& lcm = slice->getLcm(); Ideal::const_iterator stop = slice->getIdeal().end(); Ideal::const_iterator label = stop; bool hasTwoLabels = false; for (Ideal::const_iterator it = slice->getIdeal().begin(); it != stop; ++it) { if ((*it)[var] == 1) { term = *it; term[var] -= 1; bool couldBeLabel = !slice->getSubtract().contains(term); if (couldBeLabel) { for (size_t v = 0; v < slice->getVarCount(); ++v) { if (term[v] == lcm[v]) { couldBeLabel = false; break; } } } if (couldBeLabel) { if (label == stop) label = it; else { hasTwoLabels = true; break; } } } } auto_ptr hasLabelSlice; if (label != stop) { term = *label; term[var] -= 1; hasLabelSlice = newSlice(); *hasLabelSlice = *slice; hasLabelSlice->innerSlice(term); if (hasTwoLabels) slice->outerSlice(term); } if (!hasTwoLabels) { term.setToIdentity(); term[var] = 1; slice->innerSlice(term); } if (hasLabelSlice.get() != 0) { simplify(*hasLabelSlice); _tasks.addTask(hasLabelSlice.release()); } simplify(*slice); _tasks.addTask(slice.release()); } class MsmIndependenceSplit : public TermConsumer, public Task { public: Task* getLeftEvent() { return this; } TermConsumer* getLeftConsumer() { return this; } TermConsumer* getRightConsumer() { return &_rightConsumer; } const Projection& getLeftProjection() { return _leftProjection; } const Projection& getRightProjection() { return _rightProjection; } void reset(TermConsumer* consumer, IndependenceSplitter& splitter) { _consumer = consumer; _tmpTerm.reset(splitter.getVarCount()); splitter.getBigProjection(_leftProjection); splitter.getRestProjection(_rightProjection); _rightConsumer._decom.clearAndSetVarCount (_rightProjection.getRangeVarCount()); } private: virtual void run(TaskEngine& engine) { dispose(); } virtual void dispose() { delete this; } virtual void beginConsuming() { } virtual void doneConsuming() { } virtual void consume(const Term& term) { _leftProjection.inverseProject(_tmpTerm, term); Ideal::const_iterator stop = _rightConsumer._decom.end(); for (Ideal::const_iterator it = _rightConsumer._decom.begin(); it != stop; ++it) { _rightProjection.inverseProject(_tmpTerm, *it); _consumer->consume(_tmpTerm); } } struct RightConsumer : public TermConsumer { virtual void beginConsuming() { } virtual void doneConsuming() { } virtual void consume(const Term& term) { _decom.insert(term); } Ideal _decom; } _rightConsumer; TermConsumer* _consumer; Projection _leftProjection; Projection _rightProjection; Term _tmpTerm; }; void MsmStrategy::independenceSplit(auto_ptr sliceParam) { ASSERT(sliceParam.get() != 0); ASSERT(debugIsValidSlice(sliceParam.get())); auto_ptr slice (static_cast(sliceParam.release())); // Construct split object auto_ptr autoSplit(new MsmIndependenceSplit()); autoSplit->reset(slice->getConsumer(), _indep); MsmIndependenceSplit* split = autoSplit.release(); _tasks.addTask(split); // Runs when we are done with all of this split. // Construct left slice. auto_ptr leftSlice(new MsmSlice(*this)); leftSlice->setToProjOf(*slice, split->getLeftProjection(), split); _tasks.addTask(leftSlice.release()); // Construct right slice. auto_ptr rightSlice(new MsmSlice(*this)); rightSlice->setToProjOf(*slice, split->getRightProjection(), split->getRightConsumer()); _tasks.addTask(rightSlice.release()); // Deal with slice. freeSlice(auto_ptr(slice)); } void MsmStrategy::getPivot(Term& pivot, Slice& slice) { ASSERT(_split != 0); ASSERT(_split->isPivotSplit()); _split->getPivot(pivot, slice); } void MsmStrategy::getPivot(Term& pivot, Slice& slice, const TermGrader& grader) { ASSERT(_split != 0); ASSERT(_split->isPivotSplit()); _split->getPivot(pivot, slice, grader); } frobby-0.9.5/src/MsmStrategy.h000066400000000000000000000037661401527164200162450ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef MSM_STRATEGY_GUARD #define MSM_STRATEGY_GUARD #include "SliceStrategyCommon.h" #include #include "TermConsumer.h" #include #include "SplitStrategy.h" #include "IndependenceSplitter.h" class MsmSlice; class Term; class TermTranslator; class Projection; class Ideal; class TermGrader; class IndependenceSplitter; class SliceEvent; class TermConsumer; class MsmStrategy : public SliceStrategyCommon { public: MsmStrategy(TermConsumer* consumer, const SplitStrategy* splitStrategy); MsmStrategy(TermConsumer* consumer, const SplitStrategy* splitStrategy, const Ideal& initialSubtract); virtual void run(const Ideal& ideal); virtual bool processSlice(TaskEngine& tasks, auto_ptr slice); protected: virtual void getPivot(Term& pivot, Slice& slice); virtual void getPivot(Term& pivot, Slice& slice, const TermGrader& grader); private: auto_ptr newMsmSlice(); virtual auto_ptr allocateSlice(); virtual bool debugIsValidSlice(Slice* slice); void labelSplit(auto_ptr slice); void independenceSplit(auto_ptr slice); size_t getLabelSplitVariable(const Slice& slice); IndependenceSplitter _indep; TermConsumer* _consumer; auto_ptr _initialSubtract; }; #endif frobby-0.9.5/src/NameFactory.cpp000066400000000000000000000014461401527164200165220ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "NameFactory.h" frobby-0.9.5/src/NameFactory.h000066400000000000000000000147551401527164200161760ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef NAME_FACTORY_GUARD #define NAME_FACTORY_GUARD #include "error.h" #include #include #include /** A NameFactory takes a name and then creates an instance of a class that has been previously registered under that name. This is done in a general way using templates. None of this is very efficient. However, the interface can be implemented much more efficiently if that becomes necessary. */ template class NameFactory { public: /** @param abstractName The name for those things that are being generated in general. Used for error messages. */ NameFactory(const char* abstractName): _abstractName(abstractName) {} typedef auto_ptr (*FactoryFunction)(); void registerProduct(const string& name, FactoryFunction function); /** Calls the function registered to the parameter name and returns the result. Returns null if name has not been registered. Can still throw an exception for example if out of memory. */ auto_ptr createNoThrow(const string& name) const; /** Calls the function registered to the parameter name and returns the result. Throws an exception if name has not been registered. */ auto_ptr create(const string& name) const; /** Inserts into names all registered names that have the indicated prefix in lexicographic increasing order. */ void getNamesWithPrefix(const string& prefix, vector& names) const; /** Returns true if no names have been registered. */ bool empty() const; string getAbstractProductName() const; private: typedef pair Pair; typedef typename vector::const_iterator const_iterator; vector _pairs; const string _abstractName; }; /** Registers the string returned by ConcreteProduct::getStaticName() to a function that default-constructs a ConcreteProduct. */ template void nameFactoryRegister(NameFactory& factory); /** Creates the unique product that has the indicated prefix, or create the actual product that has name equal to the indicated prefix. Exceptions thrown are as for getUniqueNamesWithPrefix(). */ template auto_ptr createWithPrefix (const NameFactory& factory, const string& prefix); /** Returns the unique product name that has the indicated prefix, or return prefix itself if it is the actual name of a product. @exception UnknownNameException If no product has the indicated prefix. @exception AmbiguousNameException If more than one product has the indicated prefix and the prefix is not the actual name of any product. */ template string getUniqueNameWithPrefix (const NameFactory& factory, const string& prefix); // ************************************************************** // These are implementations that have to be included here due // to being templates. template auto_ptr NameFactory:: createNoThrow(const string& name) const { for (const_iterator it = _pairs.begin(); it != _pairs.end(); ++it) if (it->first == name) return it->second(); return auto_ptr(); } template auto_ptr NameFactory:: create(const string& name) const { auto_ptr product = createNoThrow(name); if (product.get() == 0) throwError( "Unknown " + getAbstractProductName() + " \"" + name + "\"."); return product; } template void NameFactory:: registerProduct(const string& name, FactoryFunction function) { _pairs.push_back(Pair(name, function)); } template void NameFactory:: getNamesWithPrefix(const string& prefix, vector& names) const { for (const_iterator it = _pairs.begin(); it != _pairs.end(); ++it) if (it->first.compare(0, prefix.size(), prefix) == 0) names.push_back(it->first); sort(names.begin(), names.end()); } template bool NameFactory::empty() const { return _pairs.empty(); } template string NameFactory::getAbstractProductName() const { return _abstractName; } template void nameFactoryRegister(NameFactory& factory) { struct HoldsFunction { static auto_ptr createConcreteProduct() { return auto_ptr(new ConcreteProduct()); } }; factory.registerProduct(ConcreteProduct::staticGetName(), HoldsFunction::createConcreteProduct); } template auto_ptr createWithPrefix (const NameFactory& factory, const string& prefix) { return factory.createNoThrow(getUniqueNameWithPrefix(factory, prefix)); } template string getUniqueNameWithPrefix (const NameFactory& factory, const string& prefix) { vector names; factory.getNamesWithPrefix(prefix, names); if (find(names.begin(), names.end(), prefix) != names.end()) { names.clear(); names.push_back(prefix); } if (names.empty()) { throwError ("No " + factory.getAbstractProductName() + " has the prefix \"" + prefix + "\"."); } if (names.size() >= 2) { string errorMsg = "More than one " + factory.getAbstractProductName() + " has prefix \"" + prefix + "\":\n "; for (size_t name = 0; name < names.size(); ++name) errorMsg += ' ' + names[name]; throwError(errorMsg); } ASSERT(names.size() == 1); return names.back(); } #endif frobby-0.9.5/src/NewMonosIOHandler.cpp000066400000000000000000000102631401527164200176020ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "NewMonosIOHandler.h" #include "Scanner.h" #include "VarNames.h" #include "BigTermConsumer.h" #include "DataType.h" #include "IdealWriter.h" #include "error.h" #include "InputConsumer.h" #include namespace IO { namespace NewMonos { void writeRing(const VarNames& names, FILE* out); void readRingNoLeftParen(Scanner& in, VarNames& names); void readIdealNoLeftParen(Scanner& in, InputConsumer& consumer); } namespace N = NewMonos; class NewMonosIdealWriter : public IdealWriter { public: NewMonosIdealWriter(FILE* out): IdealWriter(out) { } private: virtual void doWriteHeader(bool first) { fputs("(monomial-ideal-with-order\n ", getFile()); N::writeRing(getNames(), getFile()); } virtual void doWriteTerm(const Term& term, const TermTranslator& translator, bool first) { fputs("\n ", getFile()); writeTermProduct(term, translator, getFile()); } virtual void doWriteTerm(const vector& term, bool first) { fputs("\n ", getFile()); writeTermProduct(term, getNames(), getFile()); } virtual void doWriteFooter(bool wasZeroIdeal) { fputs("\n)\n", getFile()); } virtual void doWriteEmptyList() { N::writeRing(getNames(), getFile()); } }; NewMonosIOHandler::NewMonosIOHandler(): IOHandlerImpl(staticGetName(), "Newer format used by the program Monos.") { registerInput(DataType::getMonomialIdealType()); registerInput(DataType::getMonomialIdealListType()); registerOutput(DataType::getMonomialIdealType()); } const char* NewMonosIOHandler::staticGetName() { return "newmonos"; } BigTermConsumer* NewMonosIOHandler::doCreateIdealWriter(FILE* out) { return new NewMonosIdealWriter(out); } void NewMonosIOHandler::doWriteTerm(const vector& term, const VarNames& names, FILE* out) { writeTermProduct(term, names, out); } void NewMonosIOHandler::doReadTerm(Scanner& in, InputConsumer& consumer) { consumer.consumeTermProductNotation(in); } void NewMonosIOHandler::doReadIdeal(Scanner& in, InputConsumer& consumer) { in.expect('('); N::readIdealNoLeftParen(in, consumer); } void NewMonosIOHandler::doReadIdeals(Scanner& in, InputConsumer& consumer) { in.expect('('); if (in.peek('l') || in.peek('L')) { VarNames names; N::readRingNoLeftParen(in, names); consumer.consumeRing(names); return; } do { N::readIdealNoLeftParen(in, consumer); } while (in.match('(')); } void N::writeRing(const VarNames& names, FILE* out) { fputs("(lex-order", out); for (unsigned int i = 0; i < names.getVarCount(); ++i) { putc(' ', out); fputs(names.getName(i).c_str(), out); } fputc(')', out); } void N::readRingNoLeftParen(Scanner& in, VarNames& names) { in.expect("lex-order"); while (!in.match(')')) names.addVarSyntaxCheckUnique(in, in.readIdentifier()); } void N::readIdealNoLeftParen(Scanner& in, InputConsumer& consumer) { in.expect("monomial-ideal-with-order"); VarNames names; in.expect('('); N::readRingNoLeftParen(in, names); consumer.consumeRing(names); consumer.beginIdeal(); while (!in.match(')')) consumer.consumeTermProductNotation(in); consumer.endIdeal(); } } frobby-0.9.5/src/NewMonosIOHandler.h000066400000000000000000000027251401527164200172530ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef NEW_MONOS_HANDLER_IO #define NEW_MONOS_HANDLER_IO #include "IOHandlerImpl.h" #include class Scanner; class VarNames; class BigTermConsumer; namespace IO { class NewMonosIOHandler : public IOHandlerImpl { public: NewMonosIOHandler(); static const char* staticGetName(); private: virtual BigTermConsumer* doCreateIdealWriter(FILE* out); virtual void doWriteTerm(const vector& term, const VarNames& names, FILE* out); virtual void doReadTerm(Scanner& in, InputConsumer& consumer); void doReadIdeal(Scanner& in, InputConsumer& consumer); void doReadIdeals(Scanner& in, InputConsumer& consumer); }; } #endif frobby-0.9.5/src/NullCoefTermConsumer.cpp000066400000000000000000000024721401527164200203650ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "NullCoefTermConsumer.h" void NullCoefTermConsumer::consumeRing(const VarNames& names) { } void NullCoefTermConsumer::beginConsuming() { } void NullCoefTermConsumer::consume(const mpz_class& coef, const Term& term) { } void NullCoefTermConsumer::consume (const mpz_class& coef, const Term& term, const TermTranslator& translator) { } void NullCoefTermConsumer::consume (const mpz_class& coef, const vector& term) { } void NullCoefTermConsumer::doneConsuming() { } void NullCoefTermConsumer::consume(const BigPolynomial& poly) { } frobby-0.9.5/src/NullCoefTermConsumer.h000066400000000000000000000027651401527164200200370ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef NULL_COEF_TERM_CONSUMER_GUARD #define NULL_COEF_TERM_CONSUMER_GUARD #include "CoefBigTermConsumer.h" class VarNames; class Term; class TermTranslator; #include /** This follows the null object pattern. None of the methods do anything. */ class NullCoefTermConsumer : public CoefBigTermConsumer { public: virtual void consumeRing(const VarNames& names); virtual void beginConsuming(); virtual void consume(const mpz_class& coef, const Term& term); virtual void consume (const mpz_class& coef, const Term& term, const TermTranslator& translator); virtual void consume(const mpz_class& coef, const vector& term); virtual void doneConsuming(); virtual void consume(const BigPolynomial& poly); }; #endif frobby-0.9.5/src/NullIOHandler.cpp000066400000000000000000000052611401527164200167510ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "NullIOHandler.h" #include "BigIdeal.h" #include "NullCoefTermConsumer.h" #include "NullTermConsumer.h" #include "BigPolynomial.h" #include "VarNames.h" #include "DataType.h" #include "SatBinomConsumer.h" #include "SatBinomIdeal.h" #include "InputConsumer.h" namespace IO { NullIOHandler::NullIOHandler(): IOHandlerImpl(staticGetName(), "Ignores input and produces no output.") { registerInput(DataType::getMonomialIdealType()); registerInput(DataType::getPolynomialType()); registerInput(DataType::getMonomialIdealListType()); registerOutput(DataType::getMonomialIdealType()); registerOutput(DataType::getPolynomialType()); registerOutput(DataType::getMonomialIdealListType()); } const char* NullIOHandler::staticGetName() { return "null"; } BigTermConsumer* NullIOHandler::doCreateIdealWriter(FILE* out) { return new NullTermConsumer(); } CoefBigTermConsumer* NullIOHandler::doCreatePolynomialWriter(FILE* out) { return new NullCoefTermConsumer(); } void NullIOHandler::doWriteTerm(const vector& term, const VarNames& names, FILE* out) { } void NullIOHandler::doReadIdeal(Scanner& in, InputConsumer& consumer) { consumer.consumeRing(VarNames()); consumer.beginIdeal(); consumer.endIdeal(); } void NullIOHandler::doReadIdeals(Scanner& in, InputConsumer& consumer) { consumer.consumeRing(VarNames()); } void NullIOHandler::doReadTerm(Scanner& in, InputConsumer& consumer) { consumer.beginTerm(); consumer.endTerm(); } void NullIOHandler::doReadPolynomial(Scanner& in, CoefBigTermConsumer& consumer) { consumer.consume(BigPolynomial()); } void NullIOHandler::doReadSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer) { consumer.consume(SatBinomIdeal()); } bool NullIOHandler::doHasMoreInput(Scanner& in) const { return false; } } frobby-0.9.5/src/NullIOHandler.h000066400000000000000000000035401401527164200164140ustar00rootroot00000000000000 /* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef NULL_IO_HANDLER_GUARD #define NULL_IO_HANDLER_GUARD #include "IOHandlerImpl.h" class VarNames; class Scanner; class BigIdeal; class BigPolynomial; class SatBinomConsumer; class InputConsumer; namespace IO { /** This class ignores the input and discards all output. */ class NullIOHandler : public IOHandlerImpl { public: NullIOHandler(); static const char* staticGetName(); private: virtual BigTermConsumer* doCreateIdealWriter(FILE* out); virtual CoefBigTermConsumer* doCreatePolynomialWriter(FILE* out); virtual void doWriteTerm(const vector& term, const VarNames& names, FILE* out); virtual void doReadIdeal(Scanner& in, InputConsumer& consumer); virtual void doReadIdeals(Scanner& in, InputConsumer& consumer); virtual void doReadTerm(Scanner& in, InputConsumer& consumer); virtual void doReadPolynomial(Scanner& in, CoefBigTermConsumer& consumer); virtual void doReadSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer); virtual bool doHasMoreInput(Scanner& in) const; }; } #endif frobby-0.9.5/src/NullTermConsumer.cpp000066400000000000000000000024611401527164200175660ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "NullTermConsumer.h" void NullTermConsumer::beginConsumingList() { } void NullTermConsumer::consumeRing(const VarNames& names) { } void NullTermConsumer::beginConsuming() { } void NullTermConsumer::consume(const Term& term) { } void NullTermConsumer::consume(const vector& term) { } void NullTermConsumer::consume (const Term& term, const TermTranslator& translator) { } void NullTermConsumer::doneConsuming() { } void NullTermConsumer::doneConsumingList() { } void NullTermConsumer::consume(const BigIdeal& ideal) { } frobby-0.9.5/src/NullTermConsumer.h000066400000000000000000000026131401527164200172320ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef NULL_TERM_CONSUMER_GUARD #define NULL_TERM_CONSUMER_GUARD #include "BigTermConsumer.h" /** This follows the null object pattern. None of the methods do anything. */ class NullTermConsumer : public BigTermConsumer { public: virtual void beginConsumingList(); virtual void consumeRing(const VarNames& names); virtual void beginConsuming(); virtual void consume(const Term& term); virtual void consume(const vector& term); virtual void consume(const Term& term, const TermTranslator& translator); virtual void doneConsuming(); virtual void doneConsumingList(); virtual void consume(const BigIdeal& ideal); }; #endif frobby-0.9.5/src/ObjectCache.cpp000066400000000000000000000015361401527164200164440ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "ObjectCache.h" frobby-0.9.5/src/ObjectCache.h000066400000000000000000000055141401527164200161110ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef OBJECT_CACHE_GUARD #define OBJECT_CACHE_GUARD #include "ElementDeleter.h" #include /** An ObjectCache keeps a cache of previously-used objects to cut down on the number of allocations. The cache accepts unused objects that would otherwise be due for deallocation, and returns them in place of a new object when asked for one. If the cache is asked for an object and it is not storing any, it will transparently allocate one to satisfy the request. Stored objects are not freed until the cache is destructed. */ template class ObjectCache { public: ObjectCache(); /** Returns an object. The new object is constructed using the standard constructor, or it is an object previously passed to freeObject(). */ auto_ptr newObject(); /** Returns a copy of copyOf. The new object is constructed using the copy constructor, or it is an object previously passed to freeObject() that has copyOf assigned to it. */ template auto_ptr newObjectCopy(const S& copyOf); /** Insert an object into the cache. */ template void freeObject(auto_ptr object); private: vector _cache; ElementDeleter > _cacheDeleter; }; // The implementation has to be inline because we are using templates. template inline ObjectCache::ObjectCache(): _cache(), _cacheDeleter(_cache) { } template auto_ptr ObjectCache::newObject() { if (_cache.empty()) return auto_ptr(new T()); auto_ptr object(_cache.back()); _cache.pop_back(); return object; } template template auto_ptr ObjectCache::newObjectCopy(const S& copyOf) { if (_cache.empty()) return auto_ptr(new T(copyOf)); auto_ptr object(_cache.back()); _cache.pop_back(); *object = copyOf; return object; } template template void ObjectCache::freeObject(auto_ptr object) { ASSERT(dynamic_cast(object.get()) != 0); auto_ptr casted(static_cast(object.release())); noThrowPushBack(_cache, casted); } #endif frobby-0.9.5/src/OptSliceParams.h000066400000000000000000000013431401527164200166410ustar00rootroot00000000000000 SliceParams& useBoundElimination(bool value); SliceParams& useBoundSimplification(bool value); bool _useBoundElimination; bool _useBoundSimplification; slice.useBoundElimination(getBool(cli, UseBoundEliminationName)); slice.useBoundSimplification(getBool(cli, UseBoundSimplificationName)); const char* UseBoundEliminationName = "bound"; const char* UseBoundSimplificationName = "boundSimplify"; SliceParams& SliceParams::useBoundElimination(bool value) { _useBoundElimination = value; return *this; } SliceParams& SliceParams::useBoundSimplification(bool value) { _useBoundSimplification = value; return *this; } _useBoundElimination(true), _useBoundSimplification(true) frobby-0.9.5/src/OptimizeAction.cpp000066400000000000000000000130461401527164200172470ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "OptimizeAction.h" #include "DataType.h" #include "IOFacade.h" #include "SliceFacade.h" #include "Scanner.h" #include "BigIdeal.h" #include "BigTermConsumer.h" #include "NullTermConsumer.h" #include "SliceParams.h" #include "error.h" #include #include OptimizeAction::OptimizeAction(): Action (staticGetName(), "Solve optimization problems related to the input ideal.", "Solves an optimization program defined by the input monomial ideal I, and " "an\ninput vector of integers v. The optimization program is \n" "\n" " maximize v * e such that e encodes an irreducible component of I,\n" "\n" "where * is dot product and e is a vector of integers that uniquely encodes " "an\nirreducible ideal by being the exponent vector of the product of the\n" "minimal generators.\n" "\n" "The input is composed of the ideal I in any format, optionally followed by " "the\nentries of v in a space separated list. If v is not explicitly " "specified,\nthen every entry is assumed to 1, i.e. then v is of the form " "(1, ..., 1).\n" "\n" "This action has options for displaying the optimal value or not and for\n" "displaying zero, one or all of the optimal solutions. The algorithm used " "to\nsolve the optimization program is the Slice Algorithm using the bound\n" "optimization. Thus this action also has options related to that.", false), _sliceParams(true, false), _displayLevel ("displayLevel", "Controls how many optimal solutions to display. If the value is 0 or " "1,\nFrobby displays 0 or 1 solutions respectively. If the value is 2 or " "more,\nall solutions are displayed. The output is presented as generators " "of a\nmonomial ideal.", 0), _displayValue ("displayValue", "Display the optimal value of the optimization program.", true), _maxStandard ("maxStandard", "Solve the optimization program for maximal standard monomials instead " "of\nfor monomials representing irreducible components.", false), _chopFirstAndSubtract ("chopFirstAndSubtract", "Remove the first variable from generators, from the ring and from v, " "and\nsubtract the value of the first entry of v from the reported " "optimal value.\nThis is useful for Frobenius number calculations.", false), _minimizeValue ("minValue", "Minimize the value of v * e above. If this option is not set, maximize " "v * e\ninstead, as is the stated default above.", false), _io(DataType::getMonomialIdealType(), DataType::getMonomialIdealType()) { _sliceParams.setSplit("degree"); } void OptimizeAction::obtainParameters(vector& parameters) { parameters.push_back(&_displayLevel); parameters.push_back(&_displayValue); parameters.push_back(&_maxStandard); parameters.push_back(&_chopFirstAndSubtract); parameters.push_back(&_minimizeValue); _io.obtainParameters(parameters); _sliceParams.obtainParameters(parameters); Action::obtainParameters(parameters); } void OptimizeAction::perform() { SliceParams params(_params); validateSplit(params, true, true); BigIdeal ideal; vector v; { Scanner in(_io.getInputFormat(), stdin); _io.autoDetectInputFormat(in); _io.validateFormats(); IOFacade ioFacade(_printActions); ioFacade.readIdeal(in, ideal); if (!in.matchEOF()) ioFacade.readVector(in, v, ideal.getVarCount()); else fill_n(back_inserter(v), ideal.getVarCount(), 1); in.expectEOF(); } mpz_class subtract = 0; if (_chopFirstAndSubtract) { if (v.empty()) { _chopFirstAndSubtract = false; } else { subtract = v[0]; v.erase(v.begin()); ideal.eraseVar(0); } } if (_minimizeValue) { for (size_t var = 0; var < v.size(); ++var) v[var] = -v[var]; } auto_ptr handler; auto_ptr output; if (_displayLevel > 0) { handler = _io.createOutputHandler(); output = handler->createIdealWriter(stdout); } else output.reset(new NullTermConsumer()); SliceFacade facade(params, ideal, *output); mpz_class optimalValue = 0; bool displayAll = (_displayLevel >= 2); bool anySolution; if (_maxStandard) anySolution = facade.solveStandardProgram (v, optimalValue, displayAll); else anySolution = facade.solveIrreducibleDecompositionProgram (v, optimalValue, displayAll); if (_displayValue) { if (!anySolution) fputs("no solution.\n", stdout); else { if (_minimizeValue) { // We flipped the sign of the vector to optimize before, so we // need to flip the sign of the value again. optimalValue = -optimalValue; } if (_chopFirstAndSubtract) optimalValue -= subtract; gmp_fprintf(stdout, "%Zd\n", optimalValue.get_mpz_t()); } } } const char* OptimizeAction::staticGetName() { return "optimize"; } frobby-0.9.5/src/OptimizeAction.h000066400000000000000000000025631401527164200167160ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef OPTIMIZE_ACTION_GUARD #define OPTIMIZE_ACTION_GUARD #include "Action.h" #include "SliceParameters.h" #include "BoolParameter.h" #include "IntegerParameter.h" #include "IOParameters.h" class OptimizeAction : public Action { public: OptimizeAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); private: SliceParameters _sliceParams; IntegerParameter _displayLevel; BoolParameter _displayValue; BoolParameter _maxStandard; BoolParameter _chopFirstAndSubtract; BoolParameter _minimizeValue; IOParameters _io; }; #endif frobby-0.9.5/src/OptimizeStrategy.cpp000066400000000000000000000250721401527164200176360ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "OptimizeStrategy.h" #include "TermGrader.h" #include "Slice.h" OptimizeStrategy::OptimizeStrategy(TermGrader& grader, const SplitStrategy* splitStrategy, bool reportAllSolutions, BoundSetting boundSetting): MsmStrategy(this, splitStrategy), _grader(grader), _maxSolutions(grader.getVarCount()), _reportAllSolutions(reportAllSolutions), _boundSetting(boundSetting), _simplify_tmpDominator(grader.getVarCount()), _simplify_tmpOldDominator(grader.getVarCount()), _simplify_tmpOldDivisor(grader.getVarCount()), _boundSimplify_tmpPivot(grader.getVarCount()) { MsmStrategy::setUseIndependence(false); } const Ideal& OptimizeStrategy::getMaximalSolutions() { return _maxSolutions; } const mpz_class& OptimizeStrategy::getMaximalValue() { ASSERT(!_maxSolutions.isZeroIdeal()); return _maxValue; } void OptimizeStrategy::setUseIndependence(bool use) { ASSERT(!use); } void OptimizeStrategy::beginConsuming() { _maxSolutions.clear(); } void OptimizeStrategy::consume(const Term& term) { mpz_class& degree = _consume_tmpDegree; _grader.getDegree(term, degree); if (_maxSolutions.isZeroIdeal() || degree > _maxValueToBeat) { if (_reportAllSolutions && degree == _maxValue) _maxSolutions.insert(term); else { _maxValue = degree; _maxValueToBeat = degree - _reportAllSolutions; _maxSolutions.clear(); _maxSolutions.insert(term); } } } void OptimizeStrategy::doneConsuming() { } void OptimizeStrategy::getPivot(Term& pivot, Slice& slice) { MsmStrategy::getPivot(pivot, slice, _grader); } bool OptimizeStrategy::simplify(Slice& slice) { ASSERT(slice.getVarCount() == getVarCount()); if (slice.getIdeal().getGeneratorCount() == 0) return false; if (_boundSetting == DoNotUseBound || _maxSolutions.isZeroIdeal()) return MsmStrategy::simplify(slice); Term& dominator = _simplify_tmpDominator; Term& oldDominator = _simplify_tmpOldDominator; Term& oldDivisor = _simplify_tmpOldDivisor; ASSERT(dominator.getVarCount() == getVarCount()); ASSERT(oldDominator.getVarCount() == getVarCount()); if (!getDominator(slice, dominator)) return true; // Slice is now a base case. bool changedSlice = false; for (bool firstLoop = true; true ; firstLoop = false) { // It is an invariant at this point that dominator is what is // gotten by calling getDominator(slice, dominator). // Obtain upper bound on the degree of elements of msm(I). mpz_class& upperBound = _simplify_tmpUpperBound; _grader.getUpperBound(slice.getMultiply(), dominator, upperBound); // Check if improvement on the best value found so far is possible // from this slice according to the bound. If it is not, then // there is no point in looking further at this slice. if (upperBound <= _maxValueToBeat) { slice.clearIdealAndSubtract(); return true; } if (_boundSetting == UseBoundToEliminate) { // This achieves the sequence 1) check bound, 2) simplify and // then 3) check bound again if changed. As checking the bound // takes much less time than simplifying, this is the best way // to do it. I haven't actually benchmarked that claim, though. bool changed = MsmStrategy::simplify(slice); if (firstLoop && changed) { changedSlice = true; continue; } return changedSlice || changed; } ASSERT(_boundSetting == UseBoundToEliminateAndSimplify); oldDivisor = slice.getMultiply(); oldDominator = dominator; if (boundSimplify(slice, dominator, upperBound)) { changedSlice = true; if (!getDominator(slice, dominator)) return true; // Slice is now a base case. if (changedInWayRelevantToBound (oldDivisor, oldDominator, slice.getMultiply(), dominator)) continue; // Iterate using new divisor/dominator. } // Simplify the slice in the usual non-bound way. if (MsmStrategy::simplify(slice)) { changedSlice = true; if (!getDominator(slice, dominator)) return true; // Slice is now a base case. if (changedInWayRelevantToBound (oldDivisor, oldDominator, slice.getMultiply(), dominator)) continue; // Iterate using new divisor/dominator. } // Slice is now a fixed point of the operations above. break; } return changedSlice; } bool OptimizeStrategy::changedInWayRelevantToBound (const Term& oldDivisor, const Term& oldDominator, const Term& newDivisor, const Term& newDominator) const { ASSERT(oldDivisor.getVarCount() == getVarCount()); ASSERT(newDivisor.getVarCount() == getVarCount()); ASSERT(oldDominator.getVarCount() == getVarCount()); ASSERT(newDominator.getVarCount() == getVarCount()); ASSERT(oldDivisor.divides(newDivisor)); ASSERT(newDivisor.divides(newDominator)); ASSERT(newDominator.divides(oldDominator)); for (size_t var = 0; var < getVarCount(); ++var) { if (oldDivisor[var] == newDivisor[var] && oldDominator[var] == newDominator[var]) continue; int sign = _grader.getGradeSign(var); if (sign < 0) { if (newDivisor[var] > oldDivisor[var]) return true; // Case 1 from the documentation. ASSERT(newDivisor[var] == oldDivisor[var]); ASSERT(newDominator[var] < oldDominator[var]); if (oldDominator[var] == _grader.getMaxExponent(var)) return true; // Case 2 from the documentation. } else if (sign > 0) { if (newDominator[var] < oldDominator[var]) { // Case 3 from the documentation. return newDominator[var] < _grader.getMaxExponent(var) - 1; } else { ASSERT(newDominator[var] == oldDominator[var]); ASSERT(newDivisor[var] > oldDivisor[var]); if (newDivisor[var] == newDominator[var] && newDominator[var] == _grader.getMaxExponent(var)) return true; // Case 4 from the documentation. } } } return false; } bool OptimizeStrategy::boundSimplify (Slice& slice, const Term& dominator, const mpz_class& upperBound) { Term& pivot = _boundSimplify_tmpPivot; if (getInnerSimplify(slice.getMultiply(), dominator, upperBound, pivot)) slice.innerSlice(pivot); else if (getOuterSimplify(slice.getMultiply(), dominator, upperBound, pivot)) slice.outerSlice(pivot); else return false; return true; } bool OptimizeStrategy::getInnerSimplify (const Term& divisor, const Term& dominator, const mpz_class& upperBound, Term& pivot) { bool simplifiedAny = false; for (size_t var = 0; var < getVarCount(); ++var) { ASSERT(_grader.getGrade(var, 0) == _grader.getGrade(var, _grader.getMaxExponent(var))); ASSERT(divisor[var] <= dominator[var]); pivot[var] = 0; if (divisor[var] == dominator[var]) continue; int sign = _grader.getGradeSign(var); if (sign > 0) { Exponent B; if (dominator[var] != _grader.getMaxExponent(var)) B = dominator[var]; else { B = dominator[var] - 1; if (divisor[var] == B) continue; } _tmpC = _maxValueToBeat - upperBound; _tmpC += _grader.getGrade(var, B); Exponent tPrime; bool foundNonImproving = _grader.getMaxIndexLessThan (var, divisor[var], B - 1, tPrime, _tmpC); if (foundNonImproving) { simplifiedAny = true; pivot[var] = tPrime - divisor[var] + 1; ASSERT(pivot[var] > 0); } } else if (sign < 0) { if (dominator[var] != _grader.getMaxExponent(var)) continue; _tmpC = upperBound - _grader.getGrade(var, dominator[var]); _tmpC += _grader.getGrade(var, divisor[var]); if (_tmpC <= _maxValueToBeat) { simplifiedAny = true; pivot[var] = dominator[var] - divisor[var]; ASSERT(pivot[var] > 0); } } } ASSERT(simplifiedAny == !pivot.isIdentity()); return simplifiedAny; } bool OptimizeStrategy::getOuterSimplify (const Term& divisor, const Term& dominator, const mpz_class& upperBound, Term& pivot) { for (size_t var = 0; var < getVarCount(); ++var) { ASSERT(_grader.getGrade(var, 0) == _grader.getGrade(var, _grader.getMaxExponent(var))); ASSERT(divisor[var] <= dominator[var]); if (divisor[var] == dominator[var]) continue; int sign = _grader.getGradeSign(var); if (sign < 0) { if (dominator[var] == _grader.getMaxExponent(var)) continue; _tmpC = _maxValueToBeat - upperBound; _tmpC += _grader.getGrade(var, divisor[var]); Exponent tPrime; bool foundNonImproving = _grader.getMinIndexLessThan (var, divisor[var] + 1, dominator[var], tPrime, _tmpC); if (foundNonImproving) { pivot.setToIdentity(); pivot[var] = tPrime - divisor[var]; ASSERT(pivot[var] > 0); return true; } } else if (sign > 0) { if (dominator[var] != _grader.getMaxExponent(var)) continue; _tmpC = upperBound - _grader.getGrade(var, dominator[var] - 1); _tmpC += _grader.getGrade(var, dominator[var]); if (_tmpC <= _maxValueToBeat) { pivot.setToIdentity(); pivot[var] = dominator[var] - divisor[var]; ASSERT(pivot[var] > 0); return true; } } } return false; } bool OptimizeStrategy::getDominator(Slice& slice, Term& dominator) { ASSERT(dominator.getVarCount() == slice.getVarCount()); // The dominator is pi(lcm(min I)), where I is the ideal represented // by the slice, and pi decrements each exponent by one. const Term& multiply = slice.getMultiply(); const Term& lcm = slice.getLcm(); for (size_t var = 0; var < dominator.getVarCount(); ++var) { if (lcm[var] == 0) { slice.clearIdealAndSubtract(); return false; } dominator[var] = multiply[var] + lcm[var] - 1; } return true; } size_t OptimizeStrategy::getVarCount() const { return _grader.getVarCount(); } frobby-0.9.5/src/OptimizeStrategy.h000066400000000000000000000413041401527164200172770ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef OPTIMIZE_STRATEGY_GUARD #define OPTIMIZE_STRATEGY_GUARD #include "MsmStrategy.h" #include "Term.h" #include "TermConsumer.h" #include "tests.h" class Slice; class TermGrader; /** OptimizeStrategy optimizes a function on the maximal standard monomials of a monomial ideal using branch-and-bound. Branch-and-bound is an algorithmic technique. In this case, it amounts to having a bound, which is a function that assigns a value to each slice. This value is an non-strict upper bound on the value of each maximal standard monomial in the content of that slice. If the value of the bound is worse than the best value of an msm found so far, then we do not have to consider that slice further. Such a slice is called non-improving. Whenever a slice is non-improving, we avoid some computation by ignoring it. We exploit this further, by purposefully seeking to generate slices that are non-improving. */ class OptimizeStrategy : public MsmStrategy, public TermConsumer { public: /** The values of BoundSetting indicate how to use the bound. */ enum BoundSetting { /** Make no use of the bound. */ DoNotUseBound, /** Eliminate non-improving slices, achieving a branch-and-bound algorithm in place of the usual backtracking. */ UseBoundToEliminate, /** Eliminate non-improving slices and simplify slices by trying to generate non-improving slices that are then eliminated, allowing to move to the other slice. */ UseBoundToEliminateAndSimplify }; /** Construct an OptimizeStrategy. @param grader This object assigns values to monomials. @param splitStrategy The split selection strategy to use. @param reportAllSolutions Compute all msm's of optimal value if true. Otherwise compute a single msm of optimal value. @param boundSetting Indicates how much to use the bound. */ OptimizeStrategy(TermGrader& grader, const SplitStrategy* splitStrategy, bool reportAllSolutions, BoundSetting boundSetting); /** Returns one of or all of the msm's with optimal value found so far, depending on the value of reportAllSolutions passed to the constructor. */ const Ideal& getMaximalSolutions(); /** The optimal value associated to all entries from getMaximalSolutions(). This method can only be called if getMaximalSolutions() is not the zero ideal. */ const mpz_class& getMaximalValue(); /** Independence splits are not supported, so calling this method does nothing. Will assert in debug mode if use is true. */ virtual void setUseIndependence(bool use); virtual void getPivot(Term& pivot, Slice& slice); /** This method calls MsmStrategy::simplify to perform the usual simplification of slice, which then occurs if and only if the usual simplification has been turned on. Independent of whether usual simplification has been turned on, this method also eliminates non-improving slices, and uses bound-driven simplification, depending on the value of BoundSetting passed to the constructor. */ virtual bool simplify(Slice& slice); virtual void beginConsuming(); virtual void consume(const Term& term); virtual void doneConsuming(); private: /** Returns true if iterating bound-based simplification might do something. There are four cases where it makes sense to iterate the bound-based simplification after the slice has changed. - Case 1: The sign is negative, and the divisor has increased. This is relevant whether or not we are using a fake power, since if so there still is an effect on the bound for a split that gets rid of the pure power. - Case 2: The sign is negative, and we were using a fake power to get the value of zero, but now it is gone. - Case 3: The sign is positive, and the dominator has decreased, and it did not just remove a fake power exponent. - Case 4: The sign is positive, and the dominator has a fake power exponent, and the divisor has increased so that we are forced to use it. */ bool changedInWayRelevantToBound (const Term& oldDivisor, const Term& oldDominator, const Term& newDivisor, const Term& newDominator) const; /** This method simplifies a slice based on generating non-improving outer and inner slices. The idea is conceptually simple, but it has been quite a challenge to get the code to be correct, efficient and as good as possible in terms of simplifying as much as possible. This is why there are so many tests related to this, and why the comments for this and related methods are so detailed. To each slice we associate a divisor \f$x^a\f$ and a dominator \f$x^b\f$, which respectively divide and dominate each msm \f$m\f$ in the content of the slice. I.e. \f$x^a|m|x^b\f$. We summarize this as a pair \f$(a,b)\f$. Let \f$d(a,b)\f$ be the associated upper bound, i.e. the largest possible value that the grader associates to a monomial \f$x^v\f$ such that \f$a\leq v\leq b\f$. Thus \f$d(a,b)\f$ is an uppper bound on the value of any msm in the content of the slice to which \f$(a,b)\f$ is associated. To be more exact, for a slice \f$(I,S,q)\f$, \f$q\f$ is the divisor, while \f$q\textrm{lcm}(\min(I)):x_1\cdots x_n\f$ is the dominator. Also, let \f$d_i(t)\f$ be the value of \f$x_i^t\f$ and let \f$\max\f$ be the highest value according to the grader of an msm found so far. This allows us to discard slices that are non-improving, in that they do not improve on the best value found so far. Note that whether "improve" means "strictly improve" or "weakly improve" depends on whether we are reporting all optimal msm's or just one. In the following discussion we will assume that we are looking for just one msm, so that a slice is non-improving if it does not strictly improve. This method is called when the slice itself cannot be seen to be non-improving from the divisor and dominator. However, if we consider pivot splits on pivots that are pure powers, i.e. of the form \f$x_i^t\f$, then we can compute a divisor and dominator for both the inner and outer slice just from the divisor and dominator of the current slice. Note that the divisor and dominator assigned in this way are not necessarily as tight as the ones we would get if we actually computed the inner and outer slice. It may be that we can see that the inner or outer slice from above is non-improving. If the inner slice is non-improving, then we can discard it and replace the current slice with the outer slice, and vice versa if the outer slice is non-improving. This is bound-driven simplification of a slice, and it is efficient since we can perform these calculations looking only at the two monomials divisor and dominator. Consider a pivot split on \f$x_i^t\f$. Then the outer slice has \f$(a, b^\prime)\f$, where \f$b^\prime\f$ is equal to \f$b\f$ except that \f$b_i^\prime:= a_i+t-1\f$. The inner slice will have \f$(a^\prime,b)\f$, where \f$a^\prime\f$ is equal to \f$a\f$ except that \f$a^\prime_i := a_i + t\f$. Note that the sensible \f$t\f$'s to consider are those for which \f$a_i // This whole thing was exceedingly hard to get right, which is why // there are so many tests here. TEST_SUITE(SliceStrategy) TEST_SUITE2(SliceStrategy, OptimizeStrategy) namespace { vector makeVector(mpz_class a, mpz_class b, mpz_class c, mpz_class d) { vector vec(4); vec[0] = a; vec[1] = b; vec[2] = c; vec[3] = d; return vec; } } TEST(OptimizeStrategy, Simplify) { Ideal ideal; TermTranslator translator(IdealFactory::xx_yy_zz_t_xz_yz(), ideal, false); TermGrader grader(makeVector(0, 100, 10000, mpz_class("300000000000000007")), translator); auto_ptr splitStrategy = SplitStrategy::createStrategy("median"); OptimizeStrategy strategy (grader, splitStrategy.get(), false, OptimizeStrategy::UseBoundToEliminateAndSimplify); strategy.run(ideal); ASSERT_EQ(strategy.getMaximalSolutions(), Ideal(Term("1 1 2 1"))); ASSERT_EQ(strategy.getMaximalValue(), mpz_class("300000000000020107")); } TEST(OptimizeStrategy, ChangedInWayRelevantToBound) { TermTranslator translator(4, 10); TermGrader grader(makeVector(1, -1, 0, 0), translator); auto_ptr splitStrategy = SplitStrategy::createStrategy("median"); OptimizeStrategy opt (grader, splitStrategy.get(), true, OptimizeStrategy::UseBoundToEliminateAndSimplify); // Case 1 from the documentation. ASSERT_TRUE(opt.changedInWayRelevantToBound (Term("0 0 0 0"), Term("0 2 0 0"), Term("0 1 0 0"), Term("0 2 0 0"))); // Case 2 from the documentation. ASSERT_TRUE(opt.changedInWayRelevantToBound (Term("0 0 0 0"), Term("0 10 0 0"), Term("0 0 0 0"), Term("0 9 0 0"))); // Case 3 from the documentation. ASSERT_TRUE(opt.changedInWayRelevantToBound (Term("0 0 0 0"), Term("9 0 0 0"), Term("0 0 0 0"), Term("8 0 0 0"))); // Case 4 from the documentation. ASSERT_TRUE(opt.changedInWayRelevantToBound (Term(" 9 0 0 0"), Term("10 0 0 0"), Term("10 0 0 0"), Term("10 0 0 0"))); // Nothing changed. ASSERT_FALSE(opt.changedInWayRelevantToBound (Term("0 0 0 0"), Term("0 0 0 0"), Term("0 0 0 0"), Term("0 0 0 0"))); // No case applies. ASSERT_FALSE(opt.changedInWayRelevantToBound (Term("1 2 3 3"), Term("10 9 10 9"), Term("1 2 4 4"), Term(" 9 5 9 4"))); } #define INNER_SIMP_TEST(strat, div, dom, degree, expectPivot) \ { \ Term gotPivot(Term(expectPivot).getVarCount()); \ bool expectSimplify = !Term(expectPivot).isIdentity(); \ ASSERT_EQ(strat.getInnerSimplify \ (Term(div), Term(dom), degree, gotPivot), \ expectSimplify); \ if (expectSimplify) { \ ASSERT_EQ(gotPivot, Term(expectPivot)); \ } \ } #define OUTER_SIMP_TEST(strat, div, dom, degree, expectPivot) \ { \ Term gotPivot(Term(expectPivot).getVarCount()); \ bool expectSimplify = !Term(expectPivot).isIdentity(); \ ASSERT_EQ(strat.getOuterSimplify \ (Term(div), Term(dom), degree, gotPivot), \ expectSimplify); \ if (expectSimplify) { \ ASSERT_EQ(gotPivot, Term(expectPivot)); \ } \ } TEST(OptimizeStrategy, SimplifyPositiveGrading) { TermTranslator translator(4, 10); TermGrader grader(makeVector(100, 10, 1, 0), translator); auto_ptr splitStrategy = SplitStrategy::createStrategy("median"); OptimizeStrategy all // Report all optimal solutions. (grader, splitStrategy.get(), true, OptimizeStrategy::UseBoundToEliminateAndSimplify); OptimizeStrategy one // Report one optimal solution. (grader, splitStrategy.get(), false, OptimizeStrategy::UseBoundToEliminateAndSimplify); all.beginConsuming(); all.consume(Term("1 2 3 4")); ASSERT_EQ(all.getMaximalValue(), mpz_class("123")); one.beginConsuming(); one.consume(Term("1 2 3 4")); ASSERT_EQ(one.getMaximalValue(), mpz_class("123")); // No improvement. INNER_SIMP_TEST(all, "1 2 3 4", "1 2 4 4", 124, "0 0 0 0"); INNER_SIMP_TEST(one, "1 2 4 4", "1 2 5 4", 125, "0 0 0 0"); // Improvement depends on reporting. INNER_SIMP_TEST(all, "1 2 1 1", "1 2 5 1", 125, "0 0 2 0"); INNER_SIMP_TEST(one, "1 2 1 1", "1 2 5 1", 125, "0 0 3 0"); // Improvement in more than one variable, varying with reporting. INNER_SIMP_TEST(all, "1 0 0 4", "1 2 4 8", 124, "0 2 3 0"); INNER_SIMP_TEST(one, "1 0 0 4", "1 2 4 9", 124, "0 2 4 0"); // Improvement due to 10 mapping to zero. OUTER_SIMP_TEST(all, "1 2 3 4", "1 10 3 4", 193, "0 8 0 0"); OUTER_SIMP_TEST(one, "1 2 3 4", "1 10 3 4", 193, "0 8 0 0"); // No improvement as 10 to zero does not get below bound. OUTER_SIMP_TEST(all, "2 2 3 4", "2 10 3 4", 293, "0 0 0 0"); OUTER_SIMP_TEST(one, "2 2 3 4", "2 10 3 4", 293, "0 0 0 0"); // Regressions, i.e. tests that capture past actual bugs. INNER_SIMP_TEST(one, "1 2 0 1", "1 2 10 1", 129, "0 0 4 0"); } TEST(OptimizeStrategy, SimplifyNegativeGrading) { TermTranslator translator(4, 10); TermGrader grader(makeVector(-100, -10, -1, 0), translator); auto_ptr splitStrategy = SplitStrategy::createStrategy("median"); OptimizeStrategy all // Report all optimal solutions. (grader, splitStrategy.get(), true, OptimizeStrategy::UseBoundToEliminateAndSimplify); OptimizeStrategy one // Report one optimal solution. (grader, splitStrategy.get(), false, OptimizeStrategy::UseBoundToEliminateAndSimplify); all.beginConsuming(); all.consume(Term("1 2 3 4")); ASSERT_EQ(all.getMaximalValue(), mpz_class("-123")); one.beginConsuming(); one.consume(Term("1 2 3 4")); ASSERT_EQ(one.getMaximalValue(), mpz_class("-123")); // No improvement. OUTER_SIMP_TEST(all, "1 2 3 4", "1 2 3 4", -123, "0 0 0 0"); OUTER_SIMP_TEST(one, "1 2 2 4", "1 2 2 4", -122, "0 0 0 0"); // Improvement depends on reporting one or all. OUTER_SIMP_TEST(all, "1 2 2 4", "1 2 3 5", -122, "0 0 0 0"); OUTER_SIMP_TEST(one, "1 2 2 4", "1 2 3 5", -122, "0 0 1 0"); // Improvement in more than one variable, only see the first. OUTER_SIMP_TEST(all, "1 2 1 4", "1 5 5 7", -121, "0 1 0 0"); OUTER_SIMP_TEST(one, "1 2 1 4", "1 5 5 7", -121, "0 1 0 0"); // Improvement due to 10 mapping to zero. INNER_SIMP_TEST(all, "1 5 3 4", "1 10 3 4", -103, "0 5 0 0"); INNER_SIMP_TEST(one, "1 5 2 4", "1 10 2 4", -103, "0 5 0 0"); // No improvement as 10 to zero is not necessary to get below bound. INNER_SIMP_TEST(all, "10 5 3 4", "10 10 3 4", -3, "0 0 0 0"); INNER_SIMP_TEST(one, "10 5 2 4", "10 10 2 4", -3, "0 0 0 0"); // No improvement due to zero both at 0 and 10. INNER_SIMP_TEST(all, "1 0 3 4", "1 10 3 4", -103, "0 0 0 0"); INNER_SIMP_TEST(one, "1 0 2 4", "1 10 2 4", -103, "0 0 0 0"); } frobby-0.9.5/src/Parameter.cpp000066400000000000000000000052741401527164200162350ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Parameter.h" #include "error.h" #include "FrobbyStringStream.h" Parameter::Parameter(const string& name, const string& description): _name(name), _description(description) { } Parameter::~Parameter() { } void Parameter::appendToDescription(const char* str) { _description += str; } void Parameter::processArguments(const char** args, size_t argCount) { ASSERT(args != 0); pair range = doGetArgumentCountRange(); checkCorrectParameterCount(range.first, range.second, args, argCount); doProcessArguments(args, argCount); } void Parameter::checkCorrectParameterCount(unsigned int from, unsigned int to, const char** params, unsigned int paramCount) { if (from <= paramCount && paramCount <= to) return; FrobbyStringStream errorMsg; errorMsg << "Option -" << getName() << " takes "; if (from == to) { if (from == 1) errorMsg << "one parameter, "; else errorMsg << from << " parameters, "; } else errorMsg << "from " << from << " to " << to << " parameters, "; if (paramCount == 0) errorMsg << "but no parameters were provided.\n"; else { if (paramCount == 1) errorMsg << "but one parameter was provided."; else errorMsg << "but " << paramCount << " parameters were provided."; errorMsg << '\n'; errorMsg << "The provided parameters were: "; const char* prefix = ""; for (unsigned int i = 0; i < paramCount; ++i) { errorMsg << prefix << params[i]; prefix = ", "; } errorMsg << ".\n"; if (paramCount > to) errorMsg << "(Did you forget to put a - in front of one of the options?)\n"; } errorMsg << "The option -" << getName() << " has the following description:\n " << getDescription(); reportError(errorMsg); } frobby-0.9.5/src/Parameter.h000066400000000000000000000035051401527164200156750ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef PARAMETER_GUARD #define PARAMETER_GUARD #include #include /** @todo: rename to CliParam */ class Parameter { public: Parameter(const string& name, const string& description); virtual ~Parameter(); const string& getName() const {return _name;} const string& getDescription() const {return _description;} string getArgumentType() const {return doGetArgumentType();} string getValueAsString() const {return doGetValueAsString();} void appendToDescription(const char* str); void processArguments(const char** args, size_t argCount); private: virtual string doGetArgumentType() const = 0; virtual string doGetValueAsString() const = 0; virtual pair doGetArgumentCountRange() const = 0; virtual void doProcessArguments(const char** args, size_t argCount) = 0; void checkCorrectParameterCount(unsigned int from, unsigned int to, const char** params, unsigned int paramCount); string _name; string _description; }; #endif frobby-0.9.5/src/ParameterGroup.cpp000066400000000000000000000024141401527164200172430ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "ParameterGroup.h" #include "error.h" ParameterGroup::ParameterGroup() { } ParameterGroup::~ParameterGroup() { } void ParameterGroup::getValue(string& str) const { str = "..."; } void ParameterGroup::addParameter(Parameter* parameter) { ASSERT(parameter != 0); _parameters.push_back(parameter); } void ParameterGroup::obtainParameters(vector& parameters) { parameters.insert(parameters.end(), _parameters.begin(), _parameters.end()); } frobby-0.9.5/src/ParameterGroup.h000066400000000000000000000024151401527164200167110ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef PARAMETER_GROUP_GUARD #define PARAMETER_GROUP_GUARD #include "Parameter.h" #include class ParameterGroup { public: typedef vector::iterator iterator; iterator begin() {return _parameters.begin();} iterator end() {return _parameters.end();} ParameterGroup(); virtual ~ParameterGroup(); void addParameter(Parameter* parameter); void obtainParameters(vector& parameters); virtual void getValue(string& str) const; private: vector _parameters; }; #endif frobby-0.9.5/src/Partition.cpp000066400000000000000000000057361401527164200162710ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Partition.h" Partition::Partition(): _partitions(0), _size(0), _capacity(0) { } Partition::Partition(const Partition& partition): _size(partition._size), _capacity(partition._size), _setCount(partition._setCount) { _partitions = new int[_size]; std::copy(partition._partitions, partition._partitions + _size, _partitions); } Partition::~Partition() { delete[] _partitions; } void Partition::reset(size_t size) { if (size > _capacity) { delete[] _partitions; _partitions = new int[size]; _capacity = size; } _size = size; _setCount = size; fill_n(_partitions, _size, -1); } bool Partition::join(size_t i, size_t j) { ASSERT(i < _size); ASSERT(j < _size); size_t rootI = getRoot(i); size_t rootJ = getRoot(j); if (rootI == rootJ) return false; ASSERT(_partitions[rootJ] < 0); ASSERT(_partitions[rootI] < 0); // +1 to subtract the initial -1 _partitions[rootI] += _partitions[rootJ] + 1; _partitions[rootJ] = rootI; --_setCount; return true; } size_t Partition::getSetCount() const { #ifdef DEBUG size_t setCount = 0; for (size_t i = 0; i < _size; ++i) if (i == getRoot(i)) ++setCount; ASSERT(_setCount == setCount); #endif return _setCount; } size_t Partition::getSizeOfClassOf(size_t i) const { return -_partitions[getRoot(i)]; } size_t Partition::getSetSize(size_t set) const { for (size_t i = 0; i < _size; ++i) { if (i == getRoot(i)) { if (set == 0) { ASSERT(_partitions[i] < 0); return -(_partitions[i] + 1); // +1 to offset the initial -1 } --set; } } ASSERT(false); return 0; } size_t Partition::getRoot(size_t i) const { ASSERT(i < _size); if (_partitions[i] >= 0) { _partitions[i] = getRoot(_partitions[i]); return _partitions[i]; } else return i; } void Partition::addToSet(size_t i) { ASSERT(i < _size); ASSERT(_partitions[getRoot(i)] < 0); _partitions[getRoot(i)] -= 1; } size_t Partition::getSize() const { return _size; } void Partition::print(FILE* file) const { fprintf(file, "Partition(size=%lu sets:", (unsigned long)_size); for (size_t i = 0; i < _size; ++i) fprintf(file, " %li", (long)_partitions[i]); fputc('\n', file); } frobby-0.9.5/src/Partition.h000066400000000000000000000025661401527164200157340ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef PARTITION_GUARD #define PARTITION_GUARD class Partition { public: Partition(); Partition(const Partition& partition); ~Partition(); void reset(size_t size); bool join(size_t i, size_t j); size_t getSize() const; size_t getSetCount() const; size_t getSetSize(size_t set) const; size_t getRoot(size_t i) const; void addToSet(size_t i); size_t getSizeOfClassOf(size_t i) const; void print(FILE* file) const; private: // Made private since it is not implemented. Partition& operator=(const Partition&); int* _partitions; size_t _size; size_t _capacity; size_t _setCount; }; #endif frobby-0.9.5/src/PivotEulerAlg.cpp000066400000000000000000000224301401527164200170300ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "PivotEulerAlg.h" #include "Ideal.h" #include "RawSquareFreeTerm.h" #include "RawSquareFreeIdeal.h" #include "Task.h" #include "TaskEngine.h" #include "ElementDeleter.h" #include "EulerState.h" #include "PivotStrategy.h" #include "Arena.h" #include "LocalArray.h" #include #include namespace Ops = SquareFreeTermOps; //typedef vector DivCounts; typedef size_t* DivCounts; namespace { bool baseCaseSimple1(mpz_class& accumulator, const EulerState& state) { const size_t varCount = state.getVarCount(); const RawSquareFreeIdeal& ideal = state.getIdeal(); const Word* eliminated = state.getEliminatedVars(); const size_t genCount = ideal.getGeneratorCount(); if (!ideal.hasFullSupport(eliminated)) return true; if (genCount > 2) return false; if (genCount == 0) accumulator += state.getSign(); else if (genCount == 2) accumulator += state.getSign(); else { ASSERT(genCount == 1); if (!Ops::hasFullSupport(eliminated, varCount)) accumulator -= state.getSign(); } return true; } bool optimizeSimpleFromDivCounts(mpz_class& accumulator, EulerState& state, DivCounts& divCounts, Word* termTmp) { const size_t varCount = state.getVarCount(); const size_t genCount = state.getIdeal().getGeneratorCount(); ASSERT(genCount > 2); for (size_t var = 0; var < varCount; ++var) { ASSERT(genCount == state.getIdeal().getGeneratorCount()); ASSERT(genCount > 2); if (divCounts[var] < genCount - 2) continue; if (divCounts[var] == genCount - 1) { const Word* nonMultiple = state.getIdeal().getGenerator(state.getIdeal().getNonMultiple(var)); Ops::lcm(termTmp, nonMultiple, state.getEliminatedVars(), varCount); Ops::setExponent(termTmp, var, 1); if (Ops::hasFullSupport(termTmp, varCount)) accumulator += state.getSign(); if (state.toColonSubState(var)) return true; divCounts[var] = 0; } else if (divCounts[var] == genCount - 2) { state.getIdeal().getLcmOfNonMultiples(termTmp, var); Ops::lcmInPlace(termTmp, state.getEliminatedVars(), varCount); Ops::setExponent(termTmp, var, 1); if (Ops::hasFullSupport(termTmp, varCount)) accumulator -= state.getSign(); if (state.toColonSubState(var)) return true; divCounts[var] = 0; } else { ASSERT(divCounts[var] == genCount); state.toColonSubStateNoReminimizeNecessary(var); divCounts[var] = 0; } } return false; } bool baseCaseSimple2(mpz_class& accumulator, const EulerState& state, const DivCounts& divCounts) { const size_t varCount = state.getVarCount(); const RawSquareFreeIdeal& ideal = state.getIdeal(); const size_t genCount = state.getIdeal().getGeneratorCount(); for (size_t var = 0; var < varCount; ++var) if (divCounts[var] != 1 && divCounts[var] != genCount) return false; if ((ideal.getGeneratorCount() & 1) == 0) accumulator += state.getSign(); else accumulator -= state.getSign(); return true; } bool baseCasePreconditionSimplified(mpz_class& accumulator, const EulerState& state) { const RawSquareFreeIdeal& ideal = state.getIdeal(); if (ideal.getGeneratorCount() == 3) { accumulator += state.getSign() + state.getSign(); return true; } return false; } bool optimizeOneDivCounts(EulerState& state, DivCounts& divCounts, Word* tmp) { const size_t varCount = state.getVarCount(); const RawSquareFreeIdeal& ideal = state.getIdeal(); size_t var = 0; for (; var < varCount; ++var) { if (divCounts[var] != 1) continue; size_t index = ideal.getMultiple(var); ASSERT(ideal.getGeneratorCount() > index); Ops::assign(tmp, ideal.getGenerator(index), varCount); state.removeGenerator(index); state.flipSign(); goto searchForMore; } return false; searchForMore: for (++var; var < varCount; ++var) { if (divCounts[var] != 1 || Ops::getExponent(tmp, var) == 1) continue; size_t index = ideal.getMultiple(var); ASSERT(ideal.getGeneratorCount() > index); Ops::lcmInPlace(tmp, ideal.getGenerator(index), varCount); state.removeGenerator(index); state.flipSign(); } if (state.toColonSubState(tmp) || ideal.getGeneratorCount() <= 2) return true; Ops::toZeroAtSupport(tmp, &(divCounts[0]), varCount); return false; } bool optimizeVarPairs(EulerState& state, Word* tmp, DivCounts& divCounts) { const size_t varCount = state.getVarCount(); const RawSquareFreeIdeal& ideal = state.getIdeal(); const Word* eliminated = state.getEliminatedVars(); for (size_t var = 0; var < varCount; ++var) { if (Ops::getExponent(eliminated, var) == 1) continue; ideal.getLcmOfNonMultiples(tmp, var); Ops::lcmInPlace(tmp, state.getEliminatedVars(), varCount); Ops::setExponent(tmp, var, true); if (!Ops::hasFullSupport(tmp, varCount)) { if (state.toColonSubState(var)) return true; divCounts[var] = 0; } } return false; } } EulerState* PivotEulerAlg::processState(EulerState& state) { state.compactEliminatedVariablesIfProfitable(); // ** First optimize state and return false if a base case is detected. while (true) { ASSERT(state.debugIsValid()); if (baseCaseSimple1(_euler, state)) return 0; state.getIdeal().getVarDividesCounts(_divCountsTmp); size_t* divCountsTmp = &(_divCountsTmp[0]); if (_useUniqueDivSimplify && optimizeOneDivCounts(state, divCountsTmp, _termTmp)) continue; if (_useManyDivSimplify && optimizeSimpleFromDivCounts(_euler, state, divCountsTmp, _termTmp)) continue; if (_useAllPairsSimplify) { if (optimizeVarPairs(state, _termTmp, divCountsTmp)) continue; if (baseCasePreconditionSimplified(_euler, state)) return 0; } if (_autoTranspose && autoTranspose(state)) continue; break; } // ** State is not a base case so perform a split while putting the // two sub-states into state and newState. size_t* divCountsTmp = &(_divCountsTmp[0]); ASSERT(_pivotStrategy.get() != 0); EulerState* next = _pivotStrategy->doPivot(state, divCountsTmp); return next; } void PivotEulerAlg::getPivot(const EulerState& state, Word* pivot) { ASSERT(false); } PivotEulerAlg::PivotEulerAlg(): _euler(0), _termTmp(0), _useUniqueDivSimplify(true), _useManyDivSimplify(true), _useAllPairsSimplify(false), _autoTranspose(true), _initialAutoTranspose(true) { } const mpz_class& PivotEulerAlg::computeEulerCharacteristic(const Ideal& ideal) { if (_pivotStrategy.get() == 0) _pivotStrategy = newDefaultPivotStrategy(); if (ideal.getGeneratorCount() == 0) _euler = 0; else if (ideal.getVarCount() == 0) _euler = -1; else { const size_t maxDim = std::max(ideal.getVarCount(), ideal.getGeneratorCount()); LocalArray termTmp(Ops::getWordCount(maxDim)); _termTmp = termTmp.begin(); EulerState* state = EulerState::construct(ideal, &(Arena::getArena())); computeEuler(state); _termTmp = 0; } _pivotStrategy->computationCompleted(*this); return _euler; } const mpz_class& PivotEulerAlg::computeEulerCharacteristic (const RawSquareFreeIdeal& ideal) { if (_pivotStrategy.get() == 0) _pivotStrategy = newDefaultPivotStrategy(); if (ideal.getGeneratorCount() == 0) _euler = 0; else if (ideal.getVarCount() == 0) _euler = -1; else { const size_t maxDim = std::max(ideal.getVarCount(), ideal.getGeneratorCount()); LocalArray termTmp(Ops::getWordCount(maxDim)); _termTmp = termTmp.begin(); EulerState* state = EulerState::construct(ideal, &(Arena::getArena())); computeEuler(state); _termTmp = 0; } _pivotStrategy->computationCompleted(*this); return _euler; } void PivotEulerAlg::computeEuler(EulerState* state) { _euler = 0; if (_initialAutoTranspose) autoTranspose(*state); while (state != 0) { EulerState* nextState = processState(*state); if (nextState == 0) { nextState = state->getParent(); Arena::getArena().freeAndAllAfter(state); } state = nextState; } } bool PivotEulerAlg::autoTranspose(EulerState& state) { if (!_pivotStrategy->shouldTranspose(state)) return false; state.transpose(); return true; } frobby-0.9.5/src/PivotEulerAlg.h000066400000000000000000000047371401527164200165070ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef PIVOT_EULER_ALG_GUARD #define PIVOT_EULER_ALG_GUARD #include "PivotStrategy.h" #include #include class Ideal; class RawSquareFreeIdeal; class EulerState; class PivotEulerAlg { public: PivotEulerAlg(); const mpz_class& computeEulerCharacteristic(const Ideal& ideal); const mpz_class& computeEulerCharacteristic(const RawSquareFreeIdeal& ideal); const mpz_class& getComputedEulerCharacteristic() const {return _euler;} void setPivotStrategy(auto_ptr strategy) { _pivotStrategy = strategy; } void setInitialAutoTranspose(bool value) {_initialAutoTranspose = value;} bool getInitialAutoTranspose() const {return _initialAutoTranspose;} void setAutoTranspose(bool value) {_autoTranspose = value;} bool getAutoTranspose() const {return _autoTranspose;} void setUseUniqueDivSimplify(bool value) {_useUniqueDivSimplify = value;} bool getUseUniqueDivSimplify() const {return _useUniqueDivSimplify;} void setUseManyDivSimplify(bool value) {_useManyDivSimplify = value;} bool getUseManyDivSimplify() const {return _useManyDivSimplify;} void setUseAllPairsSimplify(bool value) {_useAllPairsSimplify = value;} bool getUseAllPairsSimplify() const {return _useAllPairsSimplify;} private: void computeEuler(EulerState* state); bool autoTranspose(EulerState& state); EulerState* processState(EulerState& state); void getPivot(const EulerState& state, Word* pivot); mpz_class _euler; Word* _termTmp; vector _divCountsTmp; bool _useUniqueDivSimplify; bool _useManyDivSimplify; bool _useAllPairsSimplify; bool _autoTranspose; bool _initialAutoTranspose; auto_ptr _pivotStrategy; }; #endif frobby-0.9.5/src/PivotStrategy.cpp000066400000000000000000000651721401527164200171440ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "PivotStrategy.h" #include "EulerState.h" #include "NameFactory.h" #include "RawSquareFreeTerm.h" #include "ElementDeleter.h" #include "PivotEulerAlg.h" #include #include namespace Ops = SquareFreeTermOps; namespace { inline size_t getPopVar(const size_t* divCounts, const size_t varCount) { return max_element(divCounts, divCounts + varCount) - divCounts; } inline size_t getRareVar(const size_t* divCounts, const size_t varCount) { const size_t* end = divCounts + varCount; const size_t* rare = divCounts; while (*rare == 0) { ++rare; ASSERT(rare != end); // not all zero } const size_t* it = rare + 1; for (; it != end; ++it) if (*it > 0 && *it < *rare) rare = it; return rare - divCounts; } inline void makeRareVarsMask (Word* mask, const size_t* divCounts, const size_t varCount) { const size_t rareVar = getRareVar(divCounts, varCount); ASSERT(rareVar < varCount); // not all zero const size_t maxCount = divCounts[rareVar]; Ops::setToIdentity(mask, varCount); for (size_t var = 0; var < varCount; ++var) if (divCounts[var] == maxCount) Ops::setExponent(mask, var, true); } class RawSquareFreeTerm { public: RawSquareFreeTerm(): _term(0), _capacity(0) {} ~RawSquareFreeTerm() {delete _term;} operator Word*() {return _term;} operator const Word*() const {return _term;} void reserve(const size_t varCount) { if (varCount > _capacity) { Ops::deleteTerm(_term); _term = Ops::newTerm(varCount); _capacity = varCount; } } private: Word* _term; size_t _capacity; }; class WithPivotTerm : public PivotStrategy { protected: Word* termWithCapacity(const size_t varCount) { _term.reserve(varCount); return _term; } private: RawSquareFreeTerm _term; }; class StdStrategy : public WithPivotTerm { public: virtual Word* getPivot(const EulerState& state, const size_t* divCounts) = 0; virtual void computationCompleted(const PivotEulerAlg& alg) {} virtual bool shouldTranspose(const EulerState& state) const { return state.getVarCount() > state.getIdeal().getGeneratorCount(); } }; class StdPopVar : public StdStrategy { public: virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { const size_t varCount = state.getVarCount(); return state.inPlaceStdSplit(getPopVar(divCounts, varCount)); } virtual Word* getPivot(const EulerState& state, const size_t* divCounts) { const size_t varCount = state.getVarCount(); Word* pivot = termWithCapacity(varCount); Ops::setToIdentity(pivot, varCount); Ops::setExponent(pivot, getPopVar(divCounts, varCount), 1); return pivot; } static const char* staticGetName() { return "popvar"; } virtual void getName(ostream& out) const { out << staticGetName(); } }; class StdRareVar : public StdStrategy { public: virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { const size_t varCount = state.getVarCount(); return state.inPlaceStdSplit(getRareVar(divCounts, varCount)); } virtual Word* getPivot(const EulerState& state, const size_t* divCounts) { const size_t varCount = state.getVarCount(); Word* pivot = termWithCapacity(varCount); Ops::setToIdentity(pivot, varCount); Ops::setExponent(pivot, getRareVar(divCounts, varCount), 1); return pivot; } static const char* staticGetName() { return "rarevar"; } virtual void getName(ostream& out) const { out << staticGetName(); } }; class StdPopGcd : public StdStrategy { public: virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { return state.inPlaceStdSplit(getPivot(state, divCounts)); } virtual Word* getPivot(const EulerState& state, const size_t* divCounts) { const size_t varCount = state.getVarCount(); const size_t popVar = getPopVar(divCounts, varCount); Word* pivot = termWithCapacity(varCount); if (divCounts[popVar] == 1) { Ops::setToIdentity(pivot, varCount); Ops::setExponent(pivot, getPopVar(divCounts, varCount), 1); return pivot; } size_t seen = 0; RawSquareFreeIdeal::const_iterator it = state.getIdeal().begin(); RawSquareFreeIdeal::const_iterator end = state.getIdeal().end(); for (; it != end; ++it) { if (Ops::getExponent(*it, popVar) != 0) { if (seen == 0) Ops::assign(pivot, *it, varCount); else Ops::gcdInPlace(pivot, *it, varCount); ++seen; if (seen == 3) break; } } ASSERT(seen > 1); return pivot; } static const char* staticGetName() { return "popgcd"; } virtual void getName(ostream& out) const { out << staticGetName(); } }; class StdRandom : public StdStrategy { public: virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { const size_t random = getRandomNotEliminatedVar(state); return state.inPlaceStdSplit(random); } virtual Word* getPivot(const EulerState& state, const size_t* divCounts) { const size_t varCount = state.getVarCount(); const size_t random = getRandomNotEliminatedVar(state); Word* pivot = termWithCapacity(varCount); Ops::setToIdentity(pivot, varCount); Ops::setExponent(pivot, random, 1); return pivot; } static const char* staticGetName() { return "random"; } virtual void getName(ostream& out) const { out << staticGetName(); } private: size_t getRandomNotEliminatedVar(const EulerState& state) { while (true) { size_t random = rand() % state.getVarCount(); if (Ops::getExponent(state.getEliminatedVars(), random) == 0) return random; } } }; class StdAny : public StdStrategy { public: virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { const size_t any = getAnyNotEliminatedVar(state); return state.inPlaceStdSplit(any); } virtual Word* getPivot(const EulerState& state, const size_t* divCounts) { const size_t varCount = state.getVarCount(); const size_t any = getAnyNotEliminatedVar(state); Word* pivot = termWithCapacity(varCount); Ops::setToIdentity(pivot, varCount); Ops::setExponent(pivot, any, 1); return pivot; } static const char* staticGetName() { return "any"; } virtual void getName(ostream& out) const { out << staticGetName(); } private: size_t getAnyNotEliminatedVar(const EulerState& state) { for (size_t var = 0; ; ++var) { ASSERT(var < state.getVarCount()); if (Ops::getExponent(state.getEliminatedVars(), var) == 0) return var; } } }; class StdWiden : public WithPivotTerm { public: StdWiden(auto_ptr strat): _strat(strat) { ASSERT(_strat.get() != 0); } virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { const size_t varCount = state.getVarCount(); Word* narrow = _strat->getPivot(state, divCounts); Word* wide = termWithCapacity(varCount); state.getIdeal().getGcdOfMultiples(wide, narrow); return state.inPlaceStdSplit(wide); } virtual void getName(ostream& out) const { out << "widen_"; _strat->getName(out); } virtual void computationCompleted(const PivotEulerAlg& alg) { _strat->computationCompleted(alg); } virtual bool shouldTranspose(const EulerState& state) const { return _strat->shouldTranspose(state); } private: auto_ptr _strat; }; class GenStrategy : public WithPivotTerm { public: typedef RawSquareFreeIdeal::iterator iterator; virtual iterator filter(iterator begin, iterator end, const size_t* divCounts, const size_t varCount) = 0; virtual void computationCompleted(const PivotEulerAlg& alg) {} virtual bool shouldTranspose(const EulerState& state) const { return state.getVarCount() < state.getIdeal().getGeneratorCount(); } }; class GenPopVar : public GenStrategy { public: virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { const size_t varCount = state.getVarCount(); size_t pivotIndex = state.getIdeal().getMultiple(getPopVar(divCounts, varCount)); return state.inPlaceGenSplit(pivotIndex); } virtual iterator filter(iterator begin, iterator end, const size_t* divCounts, const size_t varCount) { size_t popVar = getPopVar(divCounts, varCount); Word* term = termWithCapacity(varCount); Ops::setToIdentity(term, varCount); for (size_t var = 0; var < varCount; ++var) if (divCounts[var] == divCounts[popVar]) Ops::setExponent(term, var, 1); iterator newEnd = begin; for (iterator it = begin; it != end; ++it) { if (Ops::isRelativelyPrime(term, *it, varCount)) continue; Ops::swap(*it, *newEnd, varCount); ++newEnd; } return newEnd; } static const char* staticGetName() { return "popvar"; } virtual void getName(ostream& out) const { out << staticGetName(); } }; class GenRareMax : public GenStrategy { public: virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { typedef RawSquareFreeIdeal::const_iterator const_iterator; const RawSquareFreeIdeal& ideal = state.getIdeal(); const size_t varCount = state.getVarCount(); const size_t rareVar = getRareVar(divCounts, varCount); const const_iterator end = ideal.end(); size_t bestSupport = 0; const_iterator best = end; for (const_iterator it = ideal.begin(); it != end; ++it) { if (!Ops::getExponent(*it, rareVar)) continue; const size_t support = Ops::getSizeOfSupport(*it, varCount); if (bestSupport < support) { bestSupport = support; best = it; } } ASSERT(best != end); return state.inPlaceGenSplit(best - ideal.begin()); } virtual iterator filter(iterator begin, iterator end, const size_t* divCounts, const size_t varCount) { const size_t rareVar = getRareVar(divCounts, varCount); size_t bestSupport = 0; iterator newEnd = begin; for (iterator it = begin; it != end; ++it) { if (!Ops::getExponent(*it, rareVar)) continue; const size_t support = Ops::getSizeOfSupport(*it, varCount); if (bestSupport > support) continue; if (bestSupport < support) { newEnd = begin; bestSupport = support; } Ops::swap(*it, *newEnd, varCount); ++newEnd; } return newEnd; } static const char* staticGetName() { return "raremax"; } virtual void getName(ostream& out) const { out << staticGetName(); } }; class GenRareVar : public GenStrategy { public: virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { const size_t varCount = state.getVarCount(); size_t pivotIndex = state.getIdeal().getMultiple(getRareVar(divCounts, varCount)); return state.inPlaceGenSplit(pivotIndex); } virtual iterator filter(iterator begin, iterator end, const size_t* divCounts, const size_t varCount) { size_t rareVar = getRareVar(divCounts, varCount); iterator newEnd = begin; for (iterator it = begin; it != end; ++it) { if (Ops::getExponent(*it, rareVar) == 0) continue; Ops::swap(*it, *newEnd, varCount); ++newEnd; } return newEnd; } static const char* staticGetName() { return "rarevar"; } virtual void getName(ostream& out) const { out << staticGetName(); } }; class GenComposite : public PivotStrategy { public: GenComposite(): _filters(0), _filtersDeleter(_filters) { } typedef RawSquareFreeIdeal::iterator iterator; void addStrategy(auto_ptr strat) { exceptionSafePushBack(_filters, strat); } virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { const size_t varCount = state.getVarCount(); const iterator begin = state.getIdeal().begin(); iterator end = state.getIdeal().end(); ASSERT(end - begin > 0); for (size_t i = 0; i < _filters.size(); ++i) end = _filters[i]->filter(begin, end, divCounts, varCount); ASSERT(end - begin > 0); return state.inPlaceGenSplit(0); } virtual void getName(ostream& out) const { for (size_t i = 0; i < _filters.size(); ++i) { if (i > 0) out << '_'; _filters[i]->getName(out); } } virtual void computationCompleted(const PivotEulerAlg& alg) { for (size_t i = 0; i < _filters.size(); ++i) _filters[i]->computationCompleted(alg); } virtual bool shouldTranspose(const EulerState& state) const { return _filters.front()->shouldTranspose(state); } private: vector _filters; ElementDeleter > _filtersDeleter; }; class GenRarestVars : public GenStrategy { public: virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { const size_t varCount = state.getVarCount(); filter(state.getIdeal().begin(), state.getIdeal().end(), divCounts, varCount); return state.inPlaceGenSplit(0); } virtual iterator filter(iterator begin, iterator end, const size_t* divCounts, const size_t varCount) { size_t lastDivCount = 0; while (end - begin > 1) { size_t minDivCount = numeric_limits::max(); for (size_t var = 0; var < varCount; ++var) if (divCounts[var] > lastDivCount && minDivCount > divCounts[var]) minDivCount = divCounts[var]; if (minDivCount == numeric_limits::max()) break; end = filter(begin, end, divCounts, varCount, minDivCount); lastDivCount = minDivCount; } return end; } static const char* staticGetName() { return "rarest"; } virtual void getName(ostream& out) const { out << staticGetName(); } private: iterator filter(iterator begin, iterator end, const size_t* divCounts, const size_t varCount, size_t divCount) { // Set the support of term to be the vars of the specified rarity Word* term = termWithCapacity(varCount); Ops::setToIdentity(term, varCount); for (size_t var = 0; var < varCount; ++var) if (divCounts[var] == divCount) Ops::setExponent(term, var, 1); // Select the generators that are divisible by the most vars with // the specified rarity. iterator newEnd = begin; size_t maxRareCount = 0; _tmp.reserve(varCount); Word* tmp = _tmp; for (iterator it = begin; it != end; ++it) { if (Ops::isRelativelyPrime(term, *it, varCount)) continue; // no rare vars in *it Ops::gcd(tmp, term, *it, varCount); const size_t rareCount = Ops::getSizeOfSupport(tmp, varCount); if (maxRareCount > rareCount) continue; if (maxRareCount < rareCount) { maxRareCount = rareCount; newEnd = begin; } Ops::swap(*newEnd, *it, varCount); ++newEnd; } if (newEnd != begin) return newEnd; else return end; // no rare vars in any generator, so we can't discard any } size_t getRarest(const RawSquareFreeIdeal& ideal, const size_t* divCounts) { const size_t varCount = ideal.getVarCount(); RawSquareFreeIdeal::const_iterator it = ideal.begin(); const RawSquareFreeIdeal::const_iterator stop = ideal.end(); RawSquareFreeIdeal::const_iterator rarest = it; for (; it != stop; ++it) if (rarer(*it, *rarest, divCounts, varCount)) rarest = it; return rarest - ideal.begin(); } /** return (a,b) where a is the minimum divCount > above in the support of term and b is the number of times that that divCount appears in the support. */ pair getRarity(const Word* const term, const size_t* divCounts, const size_t varCount, size_t above) { size_t rarity = varCount; size_t multiplicity = 0; for (size_t var = 0; var < varCount; ++var) { const size_t co = divCounts[var]; if (Ops::getExponent(term, var) != 0 && co <= rarity && co > above) { ASSERT(divCounts[var] != 0); if (co == rarity) ++multiplicity; else { rarity = divCounts[var]; multiplicity = 1; } } } return make_pair(rarity, multiplicity); } bool rarer(const Word* const a, const Word* const b, const size_t* divCounts, const size_t varCount) { size_t lookAbove = 0; while (true) { pair rarityA = getRarity(a, divCounts, varCount, lookAbove); pair rarityB = getRarity(b, divCounts, varCount, lookAbove); if (rarityA.first < rarityB.first) return true; if (rarityA.first > rarityB.first) return false; if (rarityA.second > rarityB.second) return true; if (rarityA.second < rarityB.second) return false; if (rarityA.second == 0) return false; // a and b are equally rare lookAbove = rarityA.first; } } RawSquareFreeTerm _tmp; }; class GenMaxSupport : public GenStrategy { public: virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { return state.inPlaceGenSplit(state.getIdeal().getMaxSupportGen()); } virtual iterator filter(iterator begin, iterator end, const size_t* divCounts, const size_t varCount) { size_t maxSupp = 0; iterator newEnd = begin; for (iterator it = begin; it != end; ++it) { const size_t supp = Ops::getSizeOfSupport(*it, varCount); if (maxSupp > supp) continue; if (maxSupp < supp) { maxSupp = supp; newEnd = begin; } Ops::swap(*newEnd, *it, varCount); ++newEnd; } return newEnd; } static const char* staticGetName() { return "maxsupp"; } virtual void getName(ostream& out) const { out << staticGetName(); } }; class GenMinSupport : public GenStrategy { public: virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { return state.inPlaceGenSplit(state.getIdeal().getMinSupportGen()); } virtual iterator filter(iterator begin, iterator end, const size_t* divCounts, const size_t varCount) { size_t minSupp = varCount; iterator newEnd = begin; for (iterator it = begin; it != end; ++it) { const size_t supp = Ops::getSizeOfSupport(*it, varCount); if (minSupp < supp) continue; if (minSupp > supp) { minSupp = supp; newEnd = begin; } Ops::swap(*newEnd, *it, varCount); ++newEnd; } return newEnd; } static const char* staticGetName() { return "minsupp"; } virtual void getName(ostream& out) const { out << staticGetName(); } }; class GenAny : public GenStrategy { public: virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { return state.inPlaceGenSplit(0); } virtual iterator filter(iterator begin, iterator end, const size_t* divCounts, const size_t varCount) { return ++begin; } static const char* staticGetName() { return "any"; } virtual void getName(ostream& out) const { out << staticGetName(); } }; class GenRandom : public GenStrategy { public: virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { size_t pivotIndex = rand() % state.getIdeal().getGeneratorCount(); return state.inPlaceGenSplit(pivotIndex); } virtual iterator filter(iterator begin, iterator end, const size_t* divCounts, const size_t varCount) { const size_t genCount = end - begin; const size_t choice = rand() % genCount; Ops::swap(*begin, *(begin + choice), varCount); return ++begin; } static const char* staticGetName() { return "random"; } virtual void getName(ostream& out) const { out << staticGetName(); } }; class HybridPivotStrategy : public PivotStrategy { public: HybridPivotStrategy(auto_ptr stdStrat, auto_ptr genStrat): _stdStrat(stdStrat), _genStrat(genStrat) {} virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { if (state.getNonEliminatedVarCount() < state.getIdeal().getGeneratorCount()) return _stdStrat->doPivot(state, divCounts); else return _genStrat->doPivot(state, divCounts); } virtual void getName(ostream& out) const { out << "hybrid ("; _stdStrat->getName(out); out << ", "; _genStrat->getName(out); out << ')'; } virtual void computationCompleted(const PivotEulerAlg& alg) { _stdStrat->computationCompleted(alg); _genStrat->computationCompleted(alg); } virtual bool shouldTranspose(const EulerState& state) const { return false; } private: auto_ptr _stdStrat; auto_ptr _genStrat; }; class DebugStrategy : public PivotStrategy { public: DebugStrategy(auto_ptr strat, FILE* out): _strat(strat), _out(out) {} virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { const char* str1 = "\n\n\n" "********************************(debug output)********************************\n" "********** Processing this simplified state that is not a base case **********\n"; fputs(str1, _out); state.print(_out); EulerState* subState = _strat->doPivot(state, divCounts); ASSERT(subState != 0); const char* str2 = "<<<<<<<<<<<<<<<<<<<<<<<<<<<< Substate 1 of 2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"; fputs(str2, _out); state.print(_out); const char* str3 = "<<<<<<<<<<<<<<<<<<<<<<<<<<<< Substate 2 of 2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"; fputs(str3, _out); subState->print(_out); return subState; } virtual void getName(ostream& out) const { _strat->getName(out); } virtual void computationCompleted(const PivotEulerAlg& alg) { _strat->computationCompleted(alg); fputs("Debug: Euler characteristic computation completed.\n", _out); gmp_fprintf(_out, "Debug: Computed Euler characteristics was %Zd.\n", alg.getComputedEulerCharacteristic().get_mpz_t()); } virtual bool shouldTranspose(const EulerState& state) const { return _strat->shouldTranspose(state); } private: auto_ptr _strat; FILE* _out; }; class StatisticsStrategy : public PivotStrategy { public: StatisticsStrategy(auto_ptr strat, FILE* out): _strat(strat), _out(out), _statesSplit(0), _transposes(0) {} virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) { ++_statesSplit; return _strat->doPivot(state, divCounts); } virtual void getName(ostream& out) const { _strat->getName(out); } virtual void computationCompleted(const PivotEulerAlg& alg) { _strat->computationCompleted(alg); fputs("******** Statistics for Euler characteristic computation *****\n", _out); fprintf(_out, "* Using unique div simplify: %s\n", alg.getUseUniqueDivSimplify() ? "yes" : "no"); fprintf(_out, "* Using many div simplify: %s\n", alg.getUseManyDivSimplify() ? "yes" : "no"); fprintf(_out, "* Using implied div simplify: %s\n", alg.getUseAllPairsSimplify() ? "yes" : "no"); fprintf(_out, "* Do initial autotranspose: %s\n", alg.getInitialAutoTranspose() ? "yes" : "no"); fprintf(_out, "* Do autotranspose at each step: %s\n", alg.getAutoTranspose() ? "yes" : "no"); ostringstream strategyName; getName(strategyName); fprintf(_out, "* Pivot strategy: %s\n", strategyName.str().c_str()); // The computation is a binary tree and we only see the internal // nodes that each generate two more nodes. The number of leaves // in a binary tree is one plus the number of internal nodes. unsigned long totalStates = 2 * _statesSplit + 1; fprintf(_out, "* States processed: %lu\n", (unsigned long)totalStates); fprintf(_out, "* Transposes taken: %lu\n", (unsigned long)_transposes); fputs("********\n", _out); } virtual bool shouldTranspose(const EulerState& state) const { const bool should = _strat->shouldTranspose(state); if (should) ++_transposes; return should; } private: auto_ptr _strat; FILE* _out; unsigned long _statesSplit; mutable unsigned long _transposes; }; typedef NameFactory StdFactory; StdFactory getStdStratFactory() { StdFactory factory("standard pivot strategy"); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); return factory; } typedef NameFactory GenFactory; GenFactory getGenStratFactory() { GenFactory factory("generator pivot strategy"); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); return factory; } } auto_ptr newStdPivotStrategy(const string& name) { if (name.compare(0, 6, "widen_") != 0) { auto_ptr strat = getStdStratFactory().create(name); return auto_ptr(strat.release()); } auto_ptr subStrat = getStdStratFactory().create(name.substr(6, name.size() - 6)); return auto_ptr(new StdWiden(subStrat)); } auto_ptr newGenPivotStrategy(const string& name) { GenFactory factory = getGenStratFactory(); if (name.find('_') == string::npos) { auto_ptr strat = factory.create(name); return auto_ptr(strat.release()); } auto_ptr composite(new GenComposite()); size_t pos = 0; string part; do { size_t nextPos = name.find('_', pos); if (nextPos == string::npos) { part = name.substr(pos, string::npos); pos = string::npos; } else { part = name.substr(pos, nextPos - pos); pos = nextPos + 1; } auto_ptr strat = factory.create(part); composite->addStrategy(strat); } while (pos != string::npos); return auto_ptr(composite.release()); } auto_ptr newHybridPivotStrategy (auto_ptr stdStrat, auto_ptr genStrat) { PivotStrategy* strat = new HybridPivotStrategy(stdStrat, genStrat); return auto_ptr(strat); } auto_ptr newDebugPivotStrategy(auto_ptr strat, FILE* out) { return auto_ptr(new DebugStrategy(strat, out)); } auto_ptr newStatisticsPivotStrategy (auto_ptr strat, FILE* out) { return auto_ptr(new StatisticsStrategy(strat, out)); } auto_ptr newDefaultPivotStrategy() { return newStdPivotStrategy("pivot"); } frobby-0.9.5/src/PivotStrategy.h000066400000000000000000000044471401527164200166070ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef PIVOT_EULER_STRATEGY_GUARD #define PIVOT_EULER_STRATEGY_GUARD #include #include #include class EulerState; class PivotEulerAlg; /** A pivot selection strategy for the Euler algorithm. */ class PivotStrategy { public: virtual ~PivotStrategy() {} /** Split state. Returns null if state was a base case. Otherwise state and the return value become the two substates. divCounts[var] must be the number of generators that div divides. */ virtual EulerState* doPivot(EulerState& state, const size_t* divCounts) = 0; /** Prints the name of the strategy to out. */ virtual void getName(ostream& out) const = 0; /** Call this function once when computation is complete. */ virtual void computationCompleted(const PivotEulerAlg& alg) = 0; /** Returns true if transposing state is adviced. */ virtual bool shouldTranspose(const EulerState& state) const = 0; protected: PivotStrategy() {} private: PivotStrategy(const PivotStrategy&); // not available void operator=(const PivotStrategy&); // not available }; auto_ptr newDefaultPivotStrategy(); auto_ptr newStdPivotStrategy(const string& name); auto_ptr newGenPivotStrategy(const string& name); auto_ptr newHybridPivotStrategy (auto_ptr stdStrat, auto_ptr genStrat); auto_ptr newDebugPivotStrategy(auto_ptr strat, FILE* out); auto_ptr newStatisticsPivotStrategy (auto_ptr strat, FILE* out); #endif frobby-0.9.5/src/PolyTransformAction.cpp000066400000000000000000000044661401527164200202740ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "PolyTransformAction.h" #include "Scanner.h" #include "IOFacade.h" #include "BigPolynomial.h" #include "PolynomialFacade.h" #include "DataType.h" PolyTransformAction::PolyTransformAction(): Action (staticGetName(), "Change the representation of the input polynomial.", "By default, transform simply writes the input polynomial to output. A\n" "number of parameters allow one to transform the input polynomial in various\n" "ways.", false), _io(DataType::getPolynomialType(), DataType::getPolynomialType()), _canonicalize ("canon", "Sort variables and generators to get a canonical representation.", false), _sortTerms ("sort", "Sort the terms.", false) { } void PolyTransformAction::obtainParameters(vector& parameters) { Action::obtainParameters(parameters); _io.obtainParameters(parameters); parameters.push_back(&_canonicalize); parameters.push_back(&_sortTerms); } void PolyTransformAction::perform() { Scanner in(_io.getInputFormat(), stdin); _io.autoDetectInputFormat(in); _io.validateFormats(); IOFacade facade(_printActions); BigPolynomial polynomial; facade.readPolynomial(in, polynomial); in.expectEOF(); PolynomialFacade polyFacade(_printActions); if (_canonicalize) polyFacade.sortVariables(polynomial); if (_sortTerms || _canonicalize) polyFacade.sortTerms(polynomial); auto_ptr output = _io.createOutputHandler(); facade.writePolynomial(polynomial, output.get(), stdout); } const char* PolyTransformAction::staticGetName() { return "ptransform"; } frobby-0.9.5/src/PolyTransformAction.h000066400000000000000000000023241401527164200177300ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef POLY_TRANSFORM_ACTION_GUARD #define POLY_TRANSFORM_ACTION_GUARD #include "Action.h" #include "IOParameters.h" #include "BoolParameter.h" class BigIdeal; class PolyTransformAction : public Action { public: PolyTransformAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); private: IOParameters _io; BoolParameter _canonicalize; BoolParameter _sortTerms; }; #endif frobby-0.9.5/src/PolyWriter.cpp000066400000000000000000000042771401527164200164370ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) Copyright (C) 2009 University of Aarhus This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "PolyWriter.h" #include "BigPolynomial.h" #include "Term.h" namespace IO { PolyWriter::PolyWriter(FILE* out): _out(out), _firstTerm(true) { } void PolyWriter::consumeRing(const VarNames& names) { _names = names; } void PolyWriter::beginConsuming() { _firstTerm = true; doWriteHeader(); } void PolyWriter::consume(const mpz_class& coef, const Term& term, const TermTranslator& translator) { ASSERT(term.getVarCount() == _names.getVarCount()); bool firstTerm = _firstTerm; // To get tail recursion. _firstTerm = false; doWriteTerm(coef, term, translator, firstTerm); } void PolyWriter::consume(const mpz_class& coef, const vector& term) { ASSERT(term.size() == _names.getVarCount()); bool firstTerm = _firstTerm; // To get tail recursion. _firstTerm = false; doWriteTerm(coef, term, firstTerm); } void PolyWriter::doneConsuming() { doWriteFooter(_firstTerm); } void PolyWriter::consume(const BigPolynomial& poly) { consumeRing(poly.getNames()); _firstTerm = true; doWriteHeader(poly.getTermCount()); for (size_t index = 0; index < poly.getTermCount(); ++index) consume(poly.getCoef(index), poly.getTerm(index)); doneConsuming(); } void PolyWriter::doWriteHeader(size_t generatorCount) { doWriteHeader(); } } frobby-0.9.5/src/PolyWriter.h000066400000000000000000000041251401527164200160740ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) Copyright (C) 2009 University of Aarhus This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef POLY_WRITER_GUARD #define POLY_WRITER_GUARD #include "CoefBigTermConsumer.h" #include "VarNames.h" namespace IO { class PolyWriter : public CoefBigTermConsumer { public: PolyWriter(FILE* out); virtual void consumeRing(const VarNames& names); virtual void beginConsuming(); virtual void consume(const mpz_class& coef, const Term& term, const TermTranslator& translator); virtual void consume(const mpz_class& coef, const vector& term); virtual void doneConsuming(); virtual void consume(const BigPolynomial& poly); FILE* getFile() {return _out;} const VarNames& getNames() const {return _names;} private: virtual void doWriteHeader(size_t generatorCount); virtual void doWriteHeader() = 0; virtual void doWriteTerm(const mpz_class& coef, const Term& term, const TermTranslator& translator, bool firstGenerator) = 0; virtual void doWriteTerm(const mpz_class& coef, const vector& term, bool firstGenerator) = 0; virtual void doWriteFooter(bool wasZero) = 0; FILE* const _out; bool _firstTerm; VarNames _names; }; } #endif frobby-0.9.5/src/Polynomial.cpp000066400000000000000000000056671401527164200164460ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Polynomial.h" #include "TermPredicate.h" #include #include Polynomial::Polynomial(): _varCount(0) { } Polynomial::Polynomial(size_t varCount): _varCount(varCount) { } size_t Polynomial::getVarCount() const { return _varCount; } size_t Polynomial::getTermCount() const { return _terms.size(); } const mpz_class& Polynomial::getCoef(size_t index) const { ASSERT(index < getTermCount()); return _terms[index].coef; } const Term& Polynomial::getTerm(size_t index) const { ASSERT(index < getTermCount()); return _terms[index].term; } void Polynomial::clearAndSetVarCount(size_t varCount) { clear(); _varCount = varCount; } void Polynomial::add(const mpz_class& coef, const Term& term) { ASSERT(_varCount == term.getVarCount()); if (coef == 0) return; _terms.resize(_terms.size() + 1); try { _terms.back().coef = coef; _terms.back().term = term; } catch (const std::bad_alloc&) { _terms.pop_back(); throw; } } void Polynomial::sortTermsReverseLex(bool collect) { if (_terms.empty()) return; sort(_terms.begin(), _terms.end()); if (!collect) return; // TODO: improve collection. E.g. have it be its own method. size_t last = 0; for (size_t i = 1; i < _terms.size(); ++i) { if (_terms[last].term == _terms[i].term) _terms[last].coef += _terms[i].coef; else { if (_terms[last].coef == 0) _terms[last] = _terms[i]; else { ++last; if (last != i) _terms[last] = _terms[i]; } } } ASSERT(last < _terms.size()); _terms.erase(_terms.begin() + last + 1, _terms.end()); } bool Polynomial::CoefTerm::operator<(const CoefTerm& coefTerm) const { ASSERT(term.getVarCount() == coefTerm.term.getVarCount()); return reverseLexCompare(term, coefTerm.term, term.getVarCount()) < 0; } void Polynomial::clear() { _terms.clear(); } void Polynomial::print(FILE* out) { ostringstream str; print(str); fputs(str.str().c_str(), out); } void Polynomial::print(ostream& out) { out << "//------- Polynomial:\n"; for (size_t i = 0; i < _terms.size(); ++i) out << getCoef(i) << "*" << getTerm(i) << '\n'; out << "----------\\\\\n"; } frobby-0.9.5/src/Polynomial.h000066400000000000000000000033201401527164200160730ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef POLYNOMIAL_GUARD #define POLYNOMIAL_GUARD #include "Term.h" #include class Polynomial { public: Polynomial(); Polynomial(size_t varCount); size_t getVarCount() const; size_t getTermCount() const; const mpz_class& getCoef(size_t index) const; const Term& getTerm(size_t index) const; // Add coef*term to the polynomial. Does not collect terms with the // same exponents. Does nothing if coef is zero. void add(const mpz_class& coef, const Term& term); // Sort the terms in reverse lexicographic order. Also adds // same-monomial terms and removes zero coefficients if collect is // true. void sortTermsReverseLex(bool collect = true); void clear(); void clearAndSetVarCount(size_t varCount); void print(FILE* out); void print(ostream& out); private: struct CoefTerm { bool operator<(const CoefTerm& coefTerm) const; mpz_class coef; Term term; }; vector _terms; size_t _varCount; }; #endif frobby-0.9.5/src/PolynomialConsolidator.cpp000066400000000000000000000030731401527164200210140ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "PolynomialConsolidator.h" PolynomialConsolidator::PolynomialConsolidator (auto_ptr consumer): _consumer(consumer) { } void PolynomialConsolidator::consumeRing(const VarNames& names) { _poly.clearAndSetNames(names); } void PolynomialConsolidator::beginConsuming() { ASSERT(_poly.getTermCount() == 0); } void PolynomialConsolidator::consume (const mpz_class& coef, const Term& term, const TermTranslator& translator) { _poly.add(coef, term, translator); } void PolynomialConsolidator::consume (const mpz_class& coef, const vector& term) { _poly.add(coef, term); } void PolynomialConsolidator::doneConsuming() { _consumer->consume(_poly); _poly.clear(); } void PolynomialConsolidator::consume(const BigPolynomial& poly) { _consumer->consume(poly); } frobby-0.9.5/src/PolynomialConsolidator.h000066400000000000000000000031401401527164200204540ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef POLYNOMIAL_CONSOLIDATOR_GUARD #define POLYNOMIAL_CONSOLIDATOR_GUARD #include "CoefBigTermConsumer.h" #include "BigPolynomial.h" // Consolidates polynomials that are consumed one term at a time into // a polynomial and then passes the polynomial along in one piece. class PolynomialConsolidator : public CoefBigTermConsumer { public: PolynomialConsolidator(auto_ptr consumer); virtual void consumeRing(const VarNames& names); virtual void beginConsuming(); virtual void consume (const mpz_class& coef, const Term& term, const TermTranslator& translator); virtual void consume (const mpz_class& coef, const vector& term); virtual void doneConsuming(); virtual void consume(const BigPolynomial& poly); private: const auto_ptr _consumer; BigPolynomial _poly; }; #endif frobby-0.9.5/src/PolynomialFacade.cpp000066400000000000000000000023221401527164200175130ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "PolynomialFacade.h" #include "BigPolynomial.h" PolynomialFacade::PolynomialFacade(bool printActions): Facade(printActions) { } void PolynomialFacade::sortTerms(BigPolynomial& poly) { beginAction("Sorting terms of polynomial.\n"); poly.sortTermsReverseLex(); endAction(); } void PolynomialFacade::sortVariables(BigPolynomial& poly) { beginAction("Sorting variables of polynomial.\n"); poly.sortVariables(); endAction(); } frobby-0.9.5/src/PolynomialFacade.h000066400000000000000000000022511401527164200171610ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef POLYNOMIAL_FACADE_GUARD #define POLYNOMIAL_FACADE_GUARD #include "Facade.h" class BigPolynomial; /** A facade for operations on polynomials. @ingroup Facade */ class PolynomialFacade : private Facade { public: PolynomialFacade(bool printActions); /** Sort the terms of poly. */ void sortTerms(BigPolynomial& poly); /** Sort the variables of poly. */ void sortVariables(BigPolynomial& poly); }; #endif frobby-0.9.5/src/PolynomialFactory.cpp000066400000000000000000000044531401527164200177660ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "PolynomialFactory.h" #include "IdealFactory.h" BigPolynomial PolynomialFactory::hilbert_xx_yy_xz_yz() { BigPolynomial poly(IdealFactory::ring_xyzt()); poly.add(-1, IdealFactory::makeTerm(2, 2, 1, 0)); poly.add(-1, IdealFactory::makeTerm(0, 1, 1, 0)); poly.add(-1, IdealFactory::makeTerm(0, 2, 0, 0)); poly.add(+1, IdealFactory::makeTerm(0, 2, 1, 0)); poly.add(-1, IdealFactory::makeTerm(2, 0, 0, 0)); poly.add(+1, IdealFactory::makeTerm(2, 0, 1, 0)); poly.add(-1, IdealFactory::makeTerm(1, 0, 1, 0)); poly.add(+1, IdealFactory::makeTerm(1, 1, 1, 0)); poly.add(+1, IdealFactory::makeTerm(0, 0, 0, 0)); poly.add(+1, IdealFactory::makeTerm(2, 2, 0, 0)); poly.sortTermsReverseLex(); return poly; } BigPolynomial PolynomialFactory::one_minus4tt_3ttt_tttt_minusttttt() { VarNames names; names.addVar("t"); BigPolynomial poly(names); poly.add(+1, IdealFactory::makeTerm(0)); poly.add(-4, IdealFactory::makeTerm(2)); poly.add(+3, IdealFactory::makeTerm(3)); poly.add(+1, IdealFactory::makeTerm(4)); poly.add(-1, IdealFactory::makeTerm(5)); poly.sortTermsReverseLex(); return poly; } BigPolynomial PolynomialFactory::one(size_t varCount) { BigPolynomial poly((VarNames(varCount))); poly.add(1, vector(varCount)); return poly; } BigPolynomial PolynomialFactory::one(const VarNames& names) { BigPolynomial poly(names); poly.add(1, vector(names.getVarCount())); return poly; } BigPolynomial PolynomialFactory::zero(size_t varCount) { return BigPolynomial((VarNames(varCount))); } frobby-0.9.5/src/PolynomialFactory.h000066400000000000000000000033211401527164200174240ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef POLYNOMIAL_FACTORY_GUARD #define POLYNOMIAL_FACTORY_GUARD #include "BigPolynomial.h" /** This class has static methods that return various polynomials. This provides a convenient way to obtain polynomials for tests. The data returned by this class is all in a canonical form suitable for comparison using operator==. */ class PolynomialFactory { public: /** Returns the multigraded Hilbert-Poincare series numerator of the ideal . */ static BigPolynomial hilbert_xx_yy_xz_yz(); /** Returns the polynomial 1 - 4t^2 + 3t^3 + t^4 - t^5. */ static BigPolynomial one_minus4tt_3ttt_tttt_minusttttt(); /** Returns the polynomial 1 in the ring VarNames(varCount). */ static BigPolynomial one(size_t varCount); /** Returns the polynomial 1 in the ring names. */ static BigPolynomial one(const VarNames& names); /** Return the zero polynomial in the ring VarNames(varCount). */ static BigPolynomial zero(size_t varCount); }; #endif frobby-0.9.5/src/PrimaryDecomAction.cpp000066400000000000000000000034621401527164200200430ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "PrimaryDecomAction.h" #include "SliceFacade.h" #include "SliceParams.h" #include "DataType.h" PrimaryDecomAction::PrimaryDecomAction(): Action (staticGetName(), "Compute the primary decomposition of monomial ideals.", "This feature is experimental which means that it isn't correctly\n" "implemented yet. I.e. it doesn't work yet - don't use it other than\n" "because you are developing Frobby or curious to see how this\n" "functionality is coming along.", false), _io(DataType::getMonomialIdealType(), DataType::getMonomialIdealListType()) { } void PrimaryDecomAction::obtainParameters(vector& parameters) { _io.obtainParameters(parameters); _sliceParams.obtainParameters(parameters); Action::obtainParameters(parameters); } void PrimaryDecomAction::perform() { SliceParams params(_params); validateSplit(params, true, false); SliceFacade facade(params, DataType::getMonomialIdealListType()); facade.computePrimaryDecomposition(); } const char* PrimaryDecomAction::staticGetName() { return "primdecom"; } frobby-0.9.5/src/PrimaryDecomAction.h000066400000000000000000000022471401527164200175100ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef PRIMARY_DECOM_ACTION_GUARD #define PRIMARY_DECOM_ACTION_GUARD #include "Action.h" #include "SliceParameters.h" #include "IOParameters.h" class PrimaryDecomAction : public Action { public: PrimaryDecomAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); private: SliceParameters _sliceParams; IOParameters _io; }; #endif frobby-0.9.5/src/Projection.cpp000066400000000000000000000070371401527164200164300ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Projection.h" #include "Term.h" #include "Partition.h" #include size_t Projection::getRangeVarCount() const { return _offsets.size(); } void Projection::reset(const Partition& partition, int number) { _offsets.clear(); size_t root = 0xFFFFFFFF; for (size_t i = 0; i < partition.getSize(); ++i) { if (i == partition.getRoot(i)) { if (number == 0) { root = i; break; } --number; } } ASSERT(number == 0 && root != 0xFFFFFFFF); for (size_t i = 0; i < partition.getSize(); ++i) { if (partition.getRoot(i) != root) continue; _offsets.push_back(i); } updateHasProjections(); } void Projection::reset(const vector& inverseProjections) { _offsets = inverseProjections; updateHasProjections(); } void Projection::setToIdentity(size_t varCount) { _offsets.clear(); for (size_t var = 0; var < varCount; ++var) _offsets.push_back(var); updateHasProjections(); } size_t Projection::getDomainVar(size_t rangeVar) { ASSERT(rangeVar < getRangeVarCount()); return _offsets[rangeVar]; } void Projection::project(Exponent* to, const Exponent* from) const { size_t size = _offsets.size(); for (size_t i = 0; i < size; ++i) to[i] = from[_offsets[i]]; } void Projection::inverseProject(Term& to, const Exponent* from) const { size_t size = _offsets.size(); for (size_t i = 0; i < size; ++i) to[_offsets[i]] = from[i]; } size_t Projection::inverseProjectVar(size_t rangeVar) const { ASSERT(rangeVar < _offsets.size()); return _offsets[rangeVar]; } bool Projection::domainVarHasProjection(size_t var) const { if (var >= _domainVarHasProjection.size()) _domainVarHasProjection.resize(var + 1); #ifdef DEBUG bool has = false; for (size_t rangeVar = 0; rangeVar < _offsets.size(); ++rangeVar) if (var == inverseProjectVar(rangeVar)) has = true; ASSERT(has == static_cast(_domainVarHasProjection[var])); #endif return _domainVarHasProjection[var]; } void Projection::print(FILE* file) const { fputs("Projection:", file); for (size_t var = 0; var < _offsets.size(); ++var) fprintf(file, " %lu", (unsigned long)_offsets[var]); fputc('\n', file); } void Projection::swap(Projection& projection) { _offsets.swap(projection._offsets); _domainVarHasProjection.swap(projection._domainVarHasProjection); } void Projection::updateHasProjections() { _domainVarHasProjection.clear(); if (_offsets.empty()) return; size_t max = *max_element(_offsets.begin(), _offsets.end()); _domainVarHasProjection.resize(max + 1); for (size_t rangeVar = 0; rangeVar < _offsets.size(); ++rangeVar) { ASSERT(inverseProjectVar(rangeVar) < _domainVarHasProjection.size()); _domainVarHasProjection[inverseProjectVar(rangeVar)] = true; } } frobby-0.9.5/src/Projection.h000066400000000000000000000033501401527164200160670ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef PROJECTION_GUARD #define PROJECTION_GUARD #include class Partition; class Term; // Recall that a function maps elements from its domain to its // range. Projection represents a function that maps variables from // its range ring to its domain ring, where some variables can be // mapped to zero. class Projection { public: Projection() {} void reset(const Partition& partition, int set); void reset(const vector& inverseProjections); void setToIdentity(size_t varCount); size_t getRangeVarCount() const; size_t getDomainVar(size_t rangeVar); void project(Exponent* to, const Exponent* from) const; void inverseProject(Term& to, const Exponent* from) const; size_t inverseProjectVar(size_t rangeVar) const; void swap(Projection& projection); void print(FILE* file) const; bool domainVarHasProjection(size_t var) const; private: void updateHasProjections(); vector _offsets; mutable vector _domainVarHasProjection; }; #endif frobby-0.9.5/src/RawSquareFreeIdeal.cpp000066400000000000000000000575521401527164200177760ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "RawSquareFreeIdeal.h" #include "Arena.h" #include "Ideal.h" #include "RawSquareFreeTerm.h" #include "BigIdeal.h" #include #include #include #include typedef RawSquareFreeIdeal RSFIdeal; namespace Ops = SquareFreeTermOps; namespace { /** As the STL function std::partition except specialized to work with the iterators we get from SquareFreeIdeal. std::partition cannot be used with these. Rearranges the elements in the range [begin, end) and returns an iterator middle. Middle has the property that pred(x) is true for x in [begin,middle) and false for x in [middle, end). */ template inline Iter RsfPartition(Iter begin, Iter end, Pred pred, size_t varCount) { // The invariant of the loop is that pred(x) is true if x precedes // begin and pred(x) is false if x is at or after end. while (true) { if (begin == end) return begin; while (pred(*begin)) if (++begin == end) return begin; // now pred(*begin) is true and begin < end. if (begin == --end) return begin; while (!pred(*end)) if (begin == --end) return begin; // now pred(*end) is false and begin < end. // This swap is the reason that std::partition doesn't work Ops::swap(*begin, *end, varCount); ++begin; } } /** Removes those elements of [begin, end) that are not minimal. The result is in the sub-range [begin, newEnd) where newEnd is the returned value. */ RSFIdeal::iterator minimize(RSFIdeal::iterator begin, RSFIdeal::iterator end, const size_t wordCount) { for (RSFIdeal::iterator it = begin; it != end;) { for (RSFIdeal::const_iterator div = begin; div != end; ++div) { if (Ops::divides(*div, *div + wordCount, *it) && div != it) { --end; Ops::assign(*it, *it + wordCount, *end); goto next; } } ++it; next:; } return end; } } RSFIdeal* RSFIdeal::construct(void* buffer, size_t varCount) { RSFIdeal* p = static_cast(buffer); p->_varCount = varCount; p->_wordsPerTerm = Ops::getWordCount(varCount); p->_genCount = 0; p->_memoryEnd = p->_memory; ASSERT(p->isValid()); return p; } RSFIdeal* RSFIdeal::construct(void* buffer, const Ideal& ideal) { RSFIdeal* p = construct(buffer, ideal.getVarCount()); p->insert(ideal); ASSERT(p->isValid()); return p; } RSFIdeal* RSFIdeal::construct(void* buffer, const RawSquareFreeIdeal& ideal) { RSFIdeal* p = construct(buffer, ideal.getVarCount()); p->insert(ideal); ASSERT(p->isValid()); return p; } size_t RSFIdeal::getBytesOfMemoryFor(size_t varCount, size_t generatorCount) { // This calculation is tricky because there are many overflows that // can occur. If most cases if an overflow occurs or nearly occurs // then the amount of memory needed could not be allocated on the // system. In this case 0 is returned to signal the error. Note that // x / y rounded up is (x - 1) / y + 1 for x, y > 0. The // multiplication a * b does not overflow if a <= MAX / // b. Otherwise, there may not be an overflow, but a * b will still // be too much to reasonably allocate. size_t bytesForStruct = sizeof(RSFIdeal) - sizeof(Word); if (generatorCount == 0) return bytesForStruct; // Compute bytes per generator taking into account memory alignment. size_t bytesPerGenUnaligned = varCount == 0 ? 1 : (varCount - 1) / 8 + 1; size_t wordsPerGen = (bytesPerGenUnaligned - 1) / sizeof(Word) + 1; if (wordsPerGen > numeric_limits::max() / sizeof(Word)) return 0; size_t bytesPerGen = wordsPerGen * sizeof(Word); // Compute bytes in all. if (bytesPerGen > numeric_limits::max() / generatorCount) return 0; size_t bytesForGens = bytesPerGen * generatorCount; if (bytesForGens > numeric_limits::max() - bytesForStruct) return 0; return bytesForStruct + bytesForGens; } void RSFIdeal::setToTransposeOf(const RawSquareFreeIdeal& ideal, Word* eraseVars) { if (this == &ideal) { transpose(eraseVars); return; } const size_t idealVarCount = ideal.getVarCount(); const size_t idealGenCount = ideal.getGeneratorCount(); _varCount = idealGenCount; _wordsPerTerm = Ops::getWordCount(_varCount); _genCount = 0; _memoryEnd = _memory; for (size_t var = 0; var < idealVarCount; ++var) { if (eraseVars != 0 && Ops::getExponent(eraseVars, var)) continue; insertIdentity(); Word* newTransposedGen = back(); for (size_t gen = 0; gen < idealGenCount; ++gen) { const bool value = Ops::getExponent(ideal.getGenerator(gen), var); Ops::setExponent(newTransposedGen, gen, value); } } ASSERT(isValid()); } void RSFIdeal::transpose(Word* eraseVars) { const size_t varCount = getVarCount(); const size_t genCount = getGeneratorCount(); const size_t bytes = RSFIdeal::getBytesOfMemoryFor(varCount, genCount); Arena& arena = Arena::getArena(); void* buffer = arena.alloc(bytes); RSFIdeal* copy = RSFIdeal::construct(buffer, *this); setToTransposeOf(*copy, eraseVars); arena.freeTop(buffer); } void RSFIdeal::print(FILE* file) const { ostringstream out; print(out); fputs(out.str().c_str(), file); } void RSFIdeal::print(ostream& out) const { const size_t varCount = getVarCount(); out << "//------------ Ideal (Square Free):\n"; for (size_t gen = 0; gen < getGeneratorCount(); ++gen) { for (size_t var = 0; var < varCount; ++var) out << Ops::getExponent(getGenerator(gen), var); out << '\n'; } out << "------------\\\\\n"; } size_t RSFIdeal::insert(const Ideal& ideal) { ASSERT(getVarCount() == ideal.getVarCount()); size_t gen = 0; for (; gen < ideal.getGeneratorCount(); ++gen) { if (!Ops::encodeTerm(_memoryEnd, ideal[gen], getVarCount())) break; ++_genCount; _memoryEnd += getWordsPerTerm(); } ASSERT(isValid()); return gen; } size_t RSFIdeal::insert(const BigIdeal& ideal) { ASSERT(getVarCount() == ideal.getVarCount()); size_t gen = 0; for (; gen < ideal.getGeneratorCount(); ++gen) { if (!Ops::encodeTerm(_memoryEnd, ideal[gen], getVarCount())) break; ++_genCount; _memoryEnd += getWordsPerTerm(); } ASSERT(isValid()); return gen; } void RSFIdeal::insert(const RawSquareFreeIdeal& ideal) { const_iterator stop = ideal.end(); for (const_iterator it = ideal.begin(); it != stop; ++it) insert(*it); ASSERT(isValid()); } bool RSFIdeal::insert(const std::vector& term) { ASSERT(term.size() == getVarCount()); if (!Ops::encodeTerm(_memoryEnd, term, getVarCount())) return false; ++_genCount; _memoryEnd += getWordsPerTerm(); ASSERT(isValid()); return true; } void RSFIdeal::minimize() { iterator newEnd = ::minimize(begin(), end(), getWordsPerTerm()); _genCount = newEnd - begin(); _memoryEnd = *newEnd; ASSERT(isValid()); } void RSFIdeal::colon(const Word* by) { const size_t wordCount = getWordsPerTerm(); const iterator stop = end(); for (iterator it = begin(); it != stop; ++it) Ops::colonInPlace(*it, *it + wordCount, by); ASSERT(isValid()); } void RSFIdeal::colon(size_t var) { const iterator stop = end(); for (iterator it = begin(); it != stop; ++it) Ops::setExponent(*it, var, false); ASSERT(isValid()); } void RSFIdeal::compact(const Word* remove) { const size_t oldVarCount = getVarCount(); const iterator oldBegin = begin(); const iterator oldStop = end(); // Compact each term without moving that term. size_t varCompact = 0; for (size_t var = 0; var < oldVarCount; ++var) { if (Ops::getExponent(remove, var) != 0) continue; for (iterator oldIt = oldBegin; oldIt != oldStop; ++oldIt) Ops::setExponent(*oldIt, varCompact, Ops::getExponent(*oldIt, var)); ++varCompact; } // varCompact is now the number of variables in the compacted ideal. // The last word in each term must have zeroes at those positions // that are past the number of actual variables. So we need to go through and const size_t bitOffset = Ops::getBitOffset(varCompact); const size_t wordOffset = Ops::getWordOffset(varCompact); if (bitOffset != 0) { const Word mask = (((Word)1) << bitOffset) - 1; for (iterator oldIt = oldBegin; oldIt != oldStop; ++oldIt) *(*oldIt + wordOffset) &= mask; } // Copy the new compacted terms to remove the space between them. We // couldn't do that before because those spaces contained exponents // that we had not extracted yet. const size_t newWordCount = Ops::getWordCount(varCompact); iterator newIt(_memory, newWordCount); for (iterator oldIt = oldBegin; oldIt != oldStop; ++oldIt, ++newIt) Ops::assign(*newIt, (*newIt) + newWordCount, *oldIt); _varCount = varCompact; _wordsPerTerm = newWordCount; _memoryEnd = *newIt; ASSERT(isValid()); } void RSFIdeal::getLcmOfNonMultiples(Word* lcm, size_t var) const { ASSERT(var < getVarCount()); const Word* const lcmEnd = lcm + getWordsPerTerm(); Ops::setToIdentity(lcm, lcmEnd); const const_iterator stop = end(); for (const_iterator it = begin(); it != stop; ++it) if (Ops::getExponent(*it, var) == 0) Ops::lcmInPlace(lcm, lcmEnd, *it); ASSERT(isValid()); } static inline void countVarDividesBlockUpTo15(const Word* it, size_t genCount, const size_t wordsPerTerm, size_t* counts) { // mask has the bit pattern 0001 0001 ... 0001 const Word mask = ~((Word)0u) / 15u; Word a0, a1, a2, a3; if ((genCount & 1) == 1) { const Word a = *it; a0 = a & mask; a1 = (a >> 1) & mask; a2 = (a >> 2) & mask; a3 = (a >> 3) & mask; it += wordsPerTerm; } else a0 = a1 = a2 = a3 = 0; genCount >>= 1; for (size_t i = 0; i < genCount; ++i) { const Word a = *it; it += wordsPerTerm; const Word aa = *it; it += wordsPerTerm; a0 += a & mask; a1 += (a >> 1) & mask; a2 += (a >> 2) & mask; a3 += (a >> 3) & mask; a0 += aa & mask; a1 += (aa >> 1) & mask; a2 += (aa >> 2) & mask; a3 += (aa >> 3) & mask; } for (size_t i = 0; i < BitsPerWord / 4; ++i) { *(counts + 0) += a0 & 0xF; *(counts + 1) += a1 & 0xF; *(counts + 2) += a2 & 0xF; *(counts + 3) += a3 & 0xF; a0 >>= 4; a1 >>= 4; a2 >>= 4; a3 >>= 4; counts += 4; } } void RSFIdeal::getVarDividesCounts(vector& divCounts) const { const size_t varCount = getVarCount(); const size_t wordCount = getWordsPerTerm(); // We reserve BitsPerWord extra space. Otherwise we would have to // make sure not to index past the end of the vector of counts when // dealing with variables in the unused part of the last word. divCounts.reserve(getVarCount() + BitsPerWord); divCounts.resize(getVarCount()); size_t* divCountsBasePtr = &(divCounts.front()); size_t* divCountsEnd = divCountsBasePtr + BitsPerWord * wordCount; memset(divCountsBasePtr, 0, sizeof(size_t) * varCount); size_t generatorsToGo = getGeneratorCount(); const_iterator blockBegin = begin(); while (generatorsToGo > 0) { const size_t blockSize = generatorsToGo >= 15 ? 15 : generatorsToGo; size_t* counts = divCountsBasePtr; const Word* genOffset = *blockBegin; for (; counts != divCountsEnd; counts += BitsPerWord, ++genOffset) countVarDividesBlockUpTo15(genOffset, blockSize, wordCount, counts); generatorsToGo -= blockSize; blockBegin = blockBegin + blockSize; } } size_t RSFIdeal::getMultiple(size_t var) const { ASSERT(var < getVarCount()); const const_iterator stop = end(); const const_iterator start = begin(); for (const_iterator it = start; it != stop; ++it) if (Ops::getExponent(*it, var) == 1) return it - start; return getGeneratorCount(); } size_t RSFIdeal::getNonMultiple(size_t var) const { ASSERT(var < getVarCount()); const const_iterator stop = end(); const const_iterator start = begin(); for (const_iterator it = start; it != stop; ++it) if (Ops::getExponent(*it, var) == 0) return it - start; return getGeneratorCount(); } size_t RSFIdeal::getMaxSupportGen() const { const_iterator it = begin(); const const_iterator stop = end(); if (it == stop) return 0; const size_t varCount = getVarCount(); size_t maxSupp = Ops::getSizeOfSupport(*it, varCount); const_iterator maxSuppIt = it; for (++it; it != stop; ++it) { const size_t supp = Ops::getSizeOfSupport(*it, varCount); if (maxSupp < supp) { maxSupp = supp; maxSuppIt = it; } } return maxSuppIt - begin(); } size_t RSFIdeal::getMinSupportGen() const { const_iterator it = begin(); const const_iterator stop = end(); if (it == stop) return 0; const size_t varCount = getVarCount(); size_t minSupp = Ops::getSizeOfSupport(*it, varCount); const_iterator minSuppIt = it; for (++it; it != stop; ++it) { const size_t supp = Ops::getSizeOfSupport(*it, varCount); if (minSupp > supp) { minSupp = supp; minSuppIt = it; } } return minSuppIt - begin(); } void RSFIdeal::getGcdOfMultiples(Word* gcd, size_t var) const { ASSERT(var < getVarCount()); const Word* const gcdEnd = gcd + getWordsPerTerm(); Ops::setToAllVarProd(gcd, getVarCount()); const const_iterator stop = end(); for (const_iterator it = begin(); it != stop; ++it) if (Ops::getExponent(*it, var) == 1) Ops::gcdInPlace(gcd, gcdEnd, *it); } void RSFIdeal::getGcdOfMultiples(Word* gcd, const Word* div) const { const size_t varCount = getVarCount(); const size_t wordCount = getWordsPerTerm(); const Word* const gcdEnd = gcd + wordCount; const Word* divEnd = div + wordCount; Ops::setToAllVarProd(gcd, varCount); const const_iterator stop = end(); for (const_iterator it = begin(); it != stop; ++it) if (Ops::divides(div, divEnd, *it)) Ops::gcdInPlace(gcd, gcdEnd, *it); } void RSFIdeal::removeGenerator(size_t gen) { Word* term = getGenerator(gen); Word* last = _memoryEnd - getWordsPerTerm(); if (term != last) Ops::assign(term, term + getWordsPerTerm(), last); --_genCount; _memoryEnd -= getWordsPerTerm(); ASSERT(isValid()); } void RSFIdeal::insertNonMultiples(const Word* term, const RawSquareFreeIdeal& ideal) { ASSERT(getVarCount() == ideal.getVarCount()); const Word* termEnd = term + getWordsPerTerm(); const_iterator stop = ideal.end(); for (const_iterator it = ideal.begin(); it != stop; ++it) if (!Ops::divides(term, termEnd, *it)) insert(*it); ASSERT(isValid()); } void RSFIdeal::insertNonMultiples(size_t var, const RawSquareFreeIdeal& ideal) { ASSERT(getVarCount() == ideal.getVarCount()); const_iterator stop = ideal.end(); for (const_iterator it = ideal.begin(); it != stop; ++it) if (Ops::getExponent(*it, var) == 0) insert(*it); ASSERT(isValid()); } size_t RSFIdeal::getNotRelativelyPrime(const Word* term) { const size_t wordCount = getWordsPerTerm(); for (size_t gen = 0; gen < getGeneratorCount(); ++gen) if (!Ops::isRelativelyPrime(term, term + wordCount, getGenerator(gen))) return gen; return getGeneratorCount(); } size_t RSFIdeal::getExclusiveVarGenerator() { const size_t wordCount = getWordsPerTerm(); for (size_t offset = 0; offset < wordCount; ++offset) { Word once = 0; Word twice = 0; for (size_t gen = 0; gen < _genCount; ++gen) { Word word = getGenerator(gen)[offset]; twice |= once & word; once |= word; } const Word onceOnly = once & ~twice; if (onceOnly != 0) { for (size_t gen = 0; ; ++gen) { ASSERT(gen < _genCount); Word word = getGenerator(gen)[offset]; if (word & onceOnly) return gen; } ASSERT(false); } } return getGeneratorCount(); } bool RSFIdeal::hasFullSupport(const Word* ignore) const { ASSERT(ignore != 0); const size_t wordCount = getWordsPerTerm(); const Word allOnes = ~((Word)0); const Word* firstGenOffset = _memory; const Word* endGenOffset = _memoryEnd; size_t varsLeft = getVarCount(); while (true) { const Word* gen = firstGenOffset; Word support = *ignore; while (gen != endGenOffset) { support |= *gen; gen += wordCount; } if (varsLeft > BitsPerWord) { if (support != allOnes) return false; } else { if (varsLeft == BitsPerWord) return support == allOnes; const Word fullSupportWord = (((Word)1) << varsLeft) - 1; return support == fullSupportWord; } varsLeft -= BitsPerWord; ++ignore; ++firstGenOffset; ++endGenOffset; } return true; } bool RSFIdeal::isMinimallyGenerated() const { size_t wordCount = getWordsPerTerm(); for (size_t i = 0; i < _genCount; ++i) for (size_t div = 0; div < _genCount; ++div) if (div != i && Ops::divides(getGenerator(div), getGenerator(div) + wordCount, getGenerator(i))) return false; return true; } void RSFIdeal::swap(size_t a, size_t b) { ASSERT(a < getGeneratorCount()); ASSERT(b < getGeneratorCount()); Ops::swap(getGenerator(a), getGenerator(b), getVarCount()); ASSERT(isValid()); } bool RSFIdeal::operator==(const RawSquareFreeIdeal& ideal) const { if (getVarCount() != ideal.getVarCount()) return false; if (getGeneratorCount() != ideal.getGeneratorCount()) return false; const size_t varCount = getVarCount(); const_iterator stop = end(); const_iterator it = begin(); const_iterator it2 = ideal.begin(); for (; it != stop; ++it, ++it2) if (!Ops::equals(*it, *it2, varCount)) return false; return true; } namespace { struct CmpForSortLexAscending : std::binary_function { bool operator()(size_t a, size_t b) const { return Ops::lexLess(ideal->getGenerator(a), ideal->getGenerator(b), ideal->getVarCount()); } RawSquareFreeIdeal* ideal; }; } void RSFIdeal::sortLexAscending() { vector sorted(getGeneratorCount()); for (size_t gen = 0; gen < getGeneratorCount(); ++gen) sorted[gen] = gen; { CmpForSortLexAscending cmp; cmp.ideal = this; std::sort(sorted.begin(), sorted.end(), cmp); } RawSquareFreeIdeal* clone = newRawSquareFreeIdeal(getVarCount(), getGeneratorCount()); for (size_t gen = 0; gen < getGeneratorCount(); ++gen) clone->insert(getGenerator(gen)); for (size_t gen = 0; gen < getGeneratorCount(); ++gen) Ops::assign(getGenerator(gen), clone->getGenerator(sorted[gen]), getVarCount()); deleteRawSquareFreeIdeal(clone); ASSERT(isValid()); } void RSFIdeal::insert(const Word* term) { Ops::assign(_memoryEnd, _memoryEnd + getWordsPerTerm(), term); ++_genCount; _memoryEnd += getWordsPerTerm(); ASSERT(isValid()); } void RSFIdeal::swap01Exponents() { const iterator stop = end(); const size_t varCount = getVarCount(); for (iterator it = begin(); it != stop; ++it) Ops::invert(*it, varCount); } void RSFIdeal::insertIdentity() { Ops::setToIdentity(_memoryEnd, _memoryEnd + getWordsPerTerm()); ++_genCount; _memoryEnd += getWordsPerTerm(); ASSERT(isValid()); } namespace { struct ColonReminimizeTermHelper { bool operator()(const Word* term) { return !Ops::isRelativelyPrime(colon, colonEnd, term); } const Word* colon; const Word* colonEnd; }; } void RSFIdeal::colonReminimize(const Word* by) { ASSERT(by != 0); const size_t varCount = getVarCount(); const size_t wordCount = getWordsPerTerm(); const iterator start = begin(); iterator stop = end(); ColonReminimizeTermHelper colonIsRelativelyPrime; colonIsRelativelyPrime.colon = by; colonIsRelativelyPrime.colonEnd = by + wordCount; iterator middle = RsfPartition(start, stop, colonIsRelativelyPrime, varCount); if (middle == start) { ASSERT(isValid()); return; // colon is relatively prime to all generators } for (iterator it = start; it != middle; ++it) Ops::colonInPlace(*it, *it + wordCount, by); // var is not relatively prime to [start, middle) and is relatively // prime to [middle, end). iterator newMiddle = ::minimize(start, middle, getWordsPerTerm()); iterator newEnd = newMiddle; for (iterator it = middle; it != stop; ++it) { for (const_iterator div = start; div != newMiddle; ++div) if (Ops::divides(*div, *div + wordCount, *it)) goto next; Ops::assign(*newEnd, *newEnd + wordCount, *it); ++newEnd; next:; } _memoryEnd = *newEnd; _genCount = newEnd - start; ASSERT(isValid()); } namespace { struct ColonReminimizeVarHelper { bool operator()(const Word* term) { return Ops::getExponent(term, var) != 0; } size_t var; }; } void RSFIdeal::colonReminimize(size_t var) { ASSERT(var < getVarCount()); const size_t varCount = getVarCount(); const size_t wordCount = getWordsPerTerm(); const iterator start = begin(); iterator stop = end(); ColonReminimizeVarHelper varDivides; varDivides.var = var; iterator middle = RsfPartition(start, stop, varDivides, varCount); if (middle == start) { ASSERT(isValid()); return; // var divides no generators } for (iterator it = start; it != middle; ++it) Ops::setExponent(*it, var, 0); if (middle == stop) { ASSERT(isValid()); return; // var divides all } // var divided [start, middle) and did (does) not divide [middle, // end). Both of these ranges are minimized on their own, and no // element of [middle, end) divides an element of [start, middle). for (iterator it = middle; it != stop;) { for (const_iterator div = start; div != middle; ++div) { if (Ops::divides(*div, *div + wordCount, *it)) { --stop; Ops::assign(*it, *it + wordCount, *stop); --_genCount; goto next; } } ++it; next:; } _memoryEnd = *stop; ASSERT(isValid()); } void RSFIdeal::getLcm(Word* lcm) const { Word* lcmEnd = lcm + getWordsPerTerm(); Ops::setToIdentity(lcm, lcmEnd); const const_iterator stop = end(); for (const_iterator it = begin(); it != stop; ++it) Ops::lcmInPlace(lcm, lcmEnd, *it); ASSERT(isValid()); } bool RSFIdeal::isValid() const { const size_t varCount = getVarCount(); const size_t wordCount = getWordsPerTerm(); const size_t genCount = getGeneratorCount(); if (varCount != _varCount) return false; if (wordCount != _wordsPerTerm) return false; if (_genCount != genCount) return false; if (wordCount != Ops::getWordCount(varCount)) return false; if (_memoryEnd != _memory + wordCount * genCount) return false; if (_memoryEnd < _memory) return false; // happens on overflow for (const Word* p = _memory; p != _memoryEnd; p += wordCount) Ops::isValid(p, varCount); return true; } RSFIdeal* newRawSquareFreeIdeal(size_t varCount, size_t capacity) { size_t byteCount = RSFIdeal::getBytesOfMemoryFor(varCount, capacity); if (byteCount == 0) throw bad_alloc(); void* buffer = new char[byteCount]; RSFIdeal* ideal = RSFIdeal::construct(buffer, varCount); ASSERT(ideal->isValid()); return ideal; } RawSquareFreeIdeal* newRawSquareFreeIdeal(const RawSquareFreeIdeal& ideal) { size_t byteCount = RSFIdeal::getBytesOfMemoryFor(ideal.getVarCount(), ideal.getGeneratorCount()); if (byteCount == 0) throw bad_alloc(); void* buffer = new char[byteCount]; RawSquareFreeIdeal* p = RSFIdeal::construct(buffer, ideal.getVarCount()); p->insert(ideal); ASSERT(p->isValid()); return p; } RawSquareFreeIdeal* newRawSquareFreeIdealParse(const char* str) { istringstream in(str); vector lines; string line; while (getline(in, line)) if (line != "") lines.push_back(line); const size_t varCount = lines.empty() ? 0 : lines.front().size(); RawSquareFreeIdeal* ideal = newRawSquareFreeIdeal(varCount, lines.size()); for (size_t gen = 0; gen < lines.size(); ++gen) { ASSERT(lines[gen].size() == varCount); Word* term = Ops::newTermParse(lines[gen].c_str()); ideal->insert(term); Ops::deleteTerm(term); } ASSERT(ideal->isValid()); return ideal; } void deleteRawSquareFreeIdeal(RSFIdeal* ideal) { delete[] reinterpret_cast(ideal); } frobby-0.9.5/src/RawSquareFreeIdeal.h000066400000000000000000000316701401527164200174340ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef RAW_SQUARE_FREE_IDEAL_GUARD #define RAW_SQUARE_FREE_IDEAL_GUARD #include #include class Ideal; class BigIdeal; /** A bit packed square free ideal placed in a pre-allocated buffer. Use SquareFreeIdeal for a more pleasant interface. This class allocates none of its own memory. It must be initialized using the member function construct() in a buffer of sufficient size. What is sufficient memory for a given ideal can be determined by getBytesOfMemoryFor(). The buffer must be correctly aligned to support the data members that this class has. */ class RawSquareFreeIdeal { public: static RawSquareFreeIdeal* construct(void* buffer, size_t varCount = 0); static RawSquareFreeIdeal* construct(void* buffer, const Ideal& ideal); static RawSquareFreeIdeal* construct(void* buffer, const RawSquareFreeIdeal& ideal); /** Returns the number of bytes of memory necessary to contain an ideal with the given parameters. This size is padded to ensure proper alignment if ideals are placed one after the other. This function return zero if the number of bytes cannot be represented in a size_t, or nearly cannot be represented in a size_t. The returned value is otherwise positive. */ static size_t getBytesOfMemoryFor(size_t varCount, size_t generatorCount); /** Resets this object to be a copy of ideal. */ RawSquareFreeIdeal& operator=(const RawSquareFreeIdeal& ideal) {return *construct(this, ideal);} /** Resets this object to the transpose of ideal. Let M be a matrix with variable-labeled columns and generator-labeled rows. Entry (g,v) is 1 if and only if v divides g and otherwise it is 0. There is a bijection between such matrices and generating sets of ideals. Take a generating set, construct its matric and transpose the matrix. The generating set corresponding to the transposed matrix generates the transpose ideal. The eraseVars parameter is used as for compact(). So the variables who have a 1 at their index into eraseVars (as bits) will not be taken into the matrix that is transposed. A null value indicates to take along all variables. */ void setToTransposeOf(const RawSquareFreeIdeal& ideal, Word* eraseVars = 0); /** Equivalent to setToTransposeOf(this, eraseVars). */ void transpose(Word* eraseVars = 0); /** Removes the variables that divide remove. Unless remove is the identity this will decrease varCount. The operation is much like colon, except that the exponents are remove entirely instead of just set to zero. The relative order of the remaining variables is preserved. */ void compact(const Word* remove); /** Print a debug-suitable representation of this object to file. */ void print(FILE* file) const; /** Print a debug-suitable representation of this object to out. */ void print(ostream& out) const; /** Inserts the generators of ideal from index 0 onward until reaching a non-squarefree generator or all generators have been inserted. Returns the number of generators that has been inserted. There must be enough capacity for all the generators even if not all are actually inserted. */ size_t insert(const Ideal& ideal); size_t insert(const BigIdeal& ideal); /** Inserts all the generators of ideal. */ void insert(const RawSquareFreeIdeal& ideal); void insert(const Word* term); void insertIdentity(); /** Returns false if the strings in term are not all "", "1" or "0". */ bool insert(const std::vector& term); void minimize(); void colon(const Word* by); void colon(size_t var); /** Performs a colon and minimize. Object must be already minimized. */ void colonReminimize(const Word* colon); /** Performs a colon by var and minimize. Object must be already minimized. */ void colonReminimize(size_t var); /** Change 0 exponents into 1 and vice versa. */ void swap01Exponents(); /** Puts the least common multiple of the generators of the ideal into lcm. */ void getLcm(Word* lcm) const; size_t getGeneratorCount() const {return _genCount;} size_t getVarCount() const {return _varCount;} size_t getWordsPerTerm() const {return _wordsPerTerm;} /** Returns the generator at index. */ Word* getGenerator(size_t index); /** Returns the generator at index. */ const Word* getGenerator(size_t index) const; /** Returns a pointer to the memory where a generator at index would be, even if index is equal to or greater than getGeneratorCount(). */ Word* getGeneratorUnsafe(size_t index); /** Returns a pointer to the memory where a generator at index would be, even if index is equal to or greater than getGeneratorCount(). */ const Word* getGeneratorUnsafe(size_t index) const; /** Sets lcm to be the least common multple of those generators that var does not divide. */ void getLcmOfNonMultiples(Word* lcm, size_t var) const; /** Sets gcd to be the greatest common denominator of those generators that are divisible by var. */ void getGcdOfMultiples(Word* gcd, size_t var) const; /** Sets gcd to be the greatest common denominator of those generators that are divisible by div. */ void getGcdOfMultiples(Word* gcd, const Word* div) const; /** Sets counts[var] to the number of generators that var divides. */ void getVarDividesCounts(vector& counts) const; /** Returns the index of the first generator that var divides or getGeneratorCount() if no such generator exists. */ size_t getMultiple(size_t var) const; /** Returns the index of the first generator that var does not divide or getGeneratorCount() if no such generator exists. */ size_t getNonMultiple(size_t var) const; /** Returns the index of a generator with maximum support. Returns 0 if there are no generators. */ size_t getMaxSupportGen() const; /** Returns the index of a generator with minimum support. Returns 0 if there are no generators. */ size_t getMinSupportGen() const; /** Removes the generator at index. */ void removeGenerator(size_t index); /** Insert those generators of ideal that are not multiples of term. */ void insertNonMultiples(const Word* term, const RawSquareFreeIdeal& ideal); /** Insert those generators of ideal that are not multiples of var. */ void insertNonMultiples(size_t var, const RawSquareFreeIdeal& ideal); /** Returns the index of the first generator that is not relatively prime with term. Returns getGeneratorCount() if no such generator exists. */ size_t getNotRelativelyPrime(const Word* term); /** Returns the index of a generator that is the only one to be divisible by some variable. Returns getGeneratorCount() if there is no such generator. */ size_t getExclusiveVarGenerator(); /** Returns true if for every variable it either divides ignore or it divides some (not necessarily minimal) generator. */ bool hasFullSupport(const Word* ignore) const; /** Returns true if no generator divides another. */ bool isMinimallyGenerated() const; void swap(size_t a, size_t b); /** Returns true if *this equals ideal. This comparison takes non-minimal generators and the order of the generators into account. */ bool operator==(const RawSquareFreeIdeal& ideal) const; bool operator!=(const RawSquareFreeIdeal& ideal) const { return !(*this == ideal); } Word* back() {iterator e = end(); --e; return *e;} const Word* back() const {const_iterator e = end(); --e; return *e;} /** Sorts the generators in ascending lex order. */ void sortLexAscending(); /** const_iterator doesn't have all it needs to be a proper STL iterator. Extend it if that becomes necessary. */ class const_iterator { public: const_iterator(const Word* term, size_t wordsPerTerm): _term(term), _wordsPerTerm(wordsPerTerm) { } const Word* operator*() const {return _term;} const_iterator operator++() {_term += _wordsPerTerm; return *this;} const_iterator operator--() {_term -= _wordsPerTerm; return *this;} bool operator==(const const_iterator& it) const { ASSERT(_wordsPerTerm == it._wordsPerTerm); return _term == it._term; } bool operator!=(const const_iterator& it) const { ASSERT(_wordsPerTerm == it._wordsPerTerm); return _term != it._term; } ptrdiff_t operator-(const const_iterator& it) const { ASSERT(_wordsPerTerm == it._wordsPerTerm); return (_term - it._term) / _wordsPerTerm; } const_iterator operator+(ptrdiff_t i) const { return const_iterator(_term + i * _wordsPerTerm, _wordsPerTerm); } const_iterator& operator=(const const_iterator& it) { ASSERT(it._wordsPerTerm == _wordsPerTerm); _term = it._term; return *this; } private: const Word* _term; const size_t _wordsPerTerm; }; /** iterator doesn't have all it needs to be a proper STL iterator. Extend it if that becomes necessary. */ class iterator { public: iterator(Word* term, size_t wordsPerTerm): _term(term), _wordsPerTerm(wordsPerTerm) { } operator const_iterator() const { return const_iterator(_term, _wordsPerTerm); } Word* operator*() const {return _term;} iterator operator++() {_term += _wordsPerTerm; return *this;} iterator operator--() {_term -= _wordsPerTerm; return *this;} bool operator==(const iterator& it) const { ASSERT(_wordsPerTerm == it._wordsPerTerm); return _term == it._term; } bool operator!=(const iterator& it) const { ASSERT(_wordsPerTerm == it._wordsPerTerm); return _term != it._term; } ptrdiff_t operator-(const iterator& it) const { ASSERT(_wordsPerTerm == it._wordsPerTerm); return (_term - it._term) / _wordsPerTerm; } iterator operator+(ptrdiff_t i) const { return iterator(_term + i * _wordsPerTerm, _wordsPerTerm); } iterator& operator=(const iterator& it) { ASSERT(it._wordsPerTerm == _wordsPerTerm); _term = it._term; return *this; } private: Word* _term; const size_t _wordsPerTerm; }; iterator begin() {return iterator(_memory, getWordsPerTerm());} const_iterator begin() const {return const_iterator(_memory, getWordsPerTerm());} iterator end() {return iterator(_memoryEnd, getWordsPerTerm());} const_iterator end() const {return const_iterator(_memoryEnd, getWordsPerTerm());} /** Returns true if the internal invariants of ideal are satisfied. Useful for debugging and tests. */ bool isValid() const; private: RawSquareFreeIdeal(); // Not available RawSquareFreeIdeal(const RawSquareFreeIdeal&); // Not available size_t _varCount; size_t _wordsPerTerm; size_t _genCount; Word* _memoryEnd; Word _memory[1]; // variable size array }; /** Allocates object with enough memory for capacity generators in varCount variables. Pointer must be deallocated using deleteRawSquareFreeIdeal. */ RawSquareFreeIdeal* newRawSquareFreeIdeal(size_t varCount, size_t capacity); /** Allocates a copy of ideal with no extra capacity. */ RawSquareFreeIdeal* newRawSquareFreeIdeal(const RawSquareFreeIdeal& ideal); /** Allocates and returns an ideal based on str. The returned ideal must be deallocated using deleteRawSquareFreeIdeal. str is parsed with a generator on each line as parsed by newTermParse. Results are undefined if str does not have that format. The parsing is inefficient and is intended for constructing ideals in testing. */ RawSquareFreeIdeal* newRawSquareFreeIdealParse(const char* str); /** Deallocates memory returned by newRawSquareFreeIdeal(). */ void deleteRawSquareFreeIdeal(RawSquareFreeIdeal* ideal); inline ostream& operator<<(ostream& out, const RawSquareFreeIdeal& ideal) { ideal.print(out); return out; } inline Word* RawSquareFreeIdeal::getGenerator(size_t index) { ASSERT(index < getGeneratorCount()); return _memory + index * getWordsPerTerm(); } inline const Word* RawSquareFreeIdeal::getGenerator(size_t index) const { ASSERT(index < getGeneratorCount()); return _memory + index * getWordsPerTerm(); } inline Word* RawSquareFreeIdeal::getGeneratorUnsafe(size_t index) { // no assert to check index is valid as this method specifically // allows out-of-bounds access. return _memory + index * getWordsPerTerm(); } inline const Word* RawSquareFreeIdeal::getGeneratorUnsafe(size_t index) const { // no assert to check index is valid as this method specifically // allows out-of-bounds access. return _memory + index * getWordsPerTerm(); } #endif frobby-0.9.5/src/RawSquareFreeIdealTest.cpp000066400000000000000000000355741401527164200206360ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "RawSquareFreeIdeal.h" #include "tests.h" #include "RawSquareFreeTerm.h" using namespace SquareFreeTermOps; typedef RawSquareFreeIdeal RSFIdeal; TEST_SUITE(RawSquareFreeIdeal) namespace { bool sortedEqual(const RawSquareFreeIdeal& a, const RawSquareFreeIdeal& b) { RSFIdeal* aCopy = newRawSquareFreeIdeal(a); RSFIdeal* bCopy = newRawSquareFreeIdeal(b); aCopy->sortLexAscending(); bCopy->sortLexAscending(); bool equal = (*aCopy == *bCopy); deleteRawSquareFreeIdeal(aCopy); deleteRawSquareFreeIdeal(bCopy); return equal; } } TEST(RawSquareFreeIdeal, Insert_Term) { const size_t varCount = 5; Word* a = newTermParse("11111"); Word* b = newTermParse("00000"); Word* c = newTermParse("10101"); RSFIdeal* ideal = newRawSquareFreeIdeal(5, 3); ASSERT_TRUE(ideal->getGeneratorCount() == 0); ideal->insert(a); ideal->insert(b); ideal->insert(c); ASSERT_TRUE(ideal->getGeneratorCount() == 3); ASSERT_TRUE(equals(ideal->getGenerator(0), a, varCount)); ASSERT_TRUE(equals(ideal->getGenerator(1), b, varCount)); ASSERT_TRUE(equals(ideal->getGenerator(2), c, varCount)); deleteRawSquareFreeIdeal(ideal); deleteTerm(a); deleteTerm(b); deleteTerm(c); } TEST(RawSquareFreeIdeal, NewIdealParse) { const size_t varCount = 5; Word* a = newTermParse("11111"); Word* b = newTermParse("00000"); RSFIdeal* ideal = newRawSquareFreeIdealParse("11111\n00000\n"); ASSERT_TRUE(ideal->getGeneratorCount() == 2); ASSERT_TRUE(equals(ideal->getGenerator(0), a, varCount)); ASSERT_TRUE(equals(ideal->getGenerator(1), b, varCount)); deleteRawSquareFreeIdeal(ideal); deleteTerm(a); deleteTerm(b); } TEST(RawSquareFreeIdeal, Equality) { vector ideals; ideals.push_back (newRawSquareFreeIdealParse ("000\n" "001\n" "010\n" "011\n" "100\n" "101\n" "110\n" "111\n")); ideals.push_back (newRawSquareFreeIdealParse ("001\n" "000\n" "010\n" "011\n" "100\n" "101\n" "110\n" "111\n")); ideals.push_back(newRawSquareFreeIdealParse("1")); ideals.push_back(newRawSquareFreeIdealParse("0")); ideals.push_back(newRawSquareFreeIdealParse("")); for (size_t i = 0; i < ideals.size(); ++i) { for (size_t j = 0; j < ideals.size(); ++j) { if (i == j) ASSERT_EQ(*ideals[i], *ideals[j]); else ASSERT_NEQ(*ideals[i], *ideals[j]); } } for (size_t i = 0; i < ideals.size(); ++i) deleteRawSquareFreeIdeal(ideals[i]); } TEST(RawSquareFreeIdeal, SortLexAscending) { RSFIdeal* sorted = newRawSquareFreeIdealParse ("000\n" "001\n" "010\n" "011\n" "100\n" "101\n" "110\n" "111\n"); RSFIdeal* shuffled = newRawSquareFreeIdealParse ("111\n" "000\n" "101\n" "011\n" "100\n" "001\n" "110\n" "010\n"); shuffled->sortLexAscending(); ASSERT_EQ(*sorted, *shuffled); deleteRawSquareFreeIdeal(sorted); deleteRawSquareFreeIdeal(shuffled); } #define TEST_MINIMIZE(idealStr, minimizedStr) { \ RSFIdeal* ideal = newRawSquareFreeIdealParse(idealStr); \ RSFIdeal* minimized = newRawSquareFreeIdealParse(minimizedStr); \ ASSERT_FALSE(ideal->isMinimallyGenerated()); \ ideal->minimize(); \ ASSERT_TRUE(sortedEqual(*ideal, *minimized)); \ ASSERT_TRUE(ideal->isMinimallyGenerated()); \ ideal->minimize(); \ ASSERT_TRUE(sortedEqual(*ideal, *minimized)); \ deleteRawSquareFreeIdeal(ideal); \ deleteRawSquareFreeIdeal(minimized); \ } TEST(RawSquareFreeIdeal, MinimizeAndMinimizable) { TEST_MINIMIZE("000\n000\n000\n001\n001\n001\n001", "000"); TEST_MINIMIZE("111\n111\n111\n111\n111\n111", "111"); TEST_MINIMIZE("0\n1", "0"); TEST_MINIMIZE("1\n0", "0"); TEST_MINIMIZE ("111111111111111111110000000000000000000000011111111111111111111111101\n" "111111111111111111111111111111111111111111111111111111111111111111111\n" "000000000000000000000000000000000000000000000000000000000000000000010\n", "111111111111111111110000000000000000000000011111111111111111111111101\n" "000000000000000000000000000000000000000000000000000000000000000000010\n"); TEST_MINIMIZE ("1001\n" "1010\n" "1100\n" "0101\n" "0100\n" "0001\n" "0110\n" "0011\n", "1010\n" "0100\n" "0001\n"); } #define TEST_COLON_REMINIMIZE_TERM(idealStr, colonStr, minimizedStr) { \ RSFIdeal* ideal = newRawSquareFreeIdealParse(idealStr); \ Word* colon = newTermParse(colonStr); \ RSFIdeal* minimized = newRawSquareFreeIdealParse(minimizedStr); \ ideal->colonReminimize(colon); \ ASSERT_TRUE2(sortedEqual(*ideal, *minimized), *ideal, *minimized); \ ASSERT_TRUE(ideal->isMinimallyGenerated()); \ deleteRawSquareFreeIdeal(ideal); \ deleteTerm(colon); \ deleteRawSquareFreeIdeal(minimized); \ } #define TEST_COLON_REMINIMIZE_VAR(idealStr, colonVar, minimizedStr) { \ RSFIdeal* idealVar = newRawSquareFreeIdealParse(idealStr); \ RSFIdeal* idealTerm = newRawSquareFreeIdealParse(idealStr); \ Word* colon = newTerm(idealTerm->getVarCount()); \ setExponent(colon, colonVar, 1); \ RSFIdeal* minimized = newRawSquareFreeIdealParse(minimizedStr); \ idealVar->colonReminimize((size_t)colonVar); \ ASSERT_TRUE2(sortedEqual(*idealVar, *minimized), *idealVar, *minimized); \ idealTerm->colonReminimize(colon); \ ASSERT_TRUE2(sortedEqual(*idealTerm, *minimized), *idealVar, *minimized); \ deleteRawSquareFreeIdeal(idealVar); \ deleteRawSquareFreeIdeal(idealTerm); \ deleteTerm(colon); \ deleteRawSquareFreeIdeal(minimized); \ } TEST(RawSquareFreeIdeal, ColonReminimizeMinimize_VarAndTerm) { TEST_COLON_REMINIMIZE_VAR("0", 0, "0"); TEST_COLON_REMINIMIZE_VAR("1", 0, "0"); TEST_COLON_REMINIMIZE_VAR("111", 1, "101"); TEST_COLON_REMINIMIZE_VAR("101\n110", 1, "100"); TEST_COLON_REMINIMIZE_VAR("110\n101\n011", 2, "100\n010"); TEST_COLON_REMINIMIZE_VAR("1100\n1010\n0110", 3, "1100\n1010\n0110"); TEST_COLON_REMINIMIZE_VAR("1101\n1011\n0111", 3, "1100\n1010\n0110"); TEST_COLON_REMINIMIZE_VAR ("011111111111111111110000000000000000000000011111111111111111111111101\n" "011111111111111111111111111111111111111111111011111111111111111111101\n" "000000000000000000000000000000000000000000000100000000000000000000010\n", 67, "011111111111111111111111111111111111111111111011111111111111111111101\n" "000000000000000000000000000000000000000000000100000000000000000000000\n"); TEST_COLON_REMINIMIZE_VAR ("100000000000000\n" "010000000000000\n" "001000000000000\n" "000100000000000\n" "000010000000000\n" "000001000000000\n" "000000100000000\n" "000000010000000\n" "000000001000000\n" "000000000100000\n" "000000000010000\n" "000000000001000\n" "000000000000100\n" "000000000000010\n" "000000000000001\n", 0, "000000000000000\n"); TEST_COLON_REMINIMIZE_TERM("", "", ""); TEST_COLON_REMINIMIZE_TERM("0", "0", "0"); TEST_COLON_REMINIMIZE_TERM("0", "1", "0"); TEST_COLON_REMINIMIZE_TERM("1", "0", "1"); TEST_COLON_REMINIMIZE_TERM("1", "1", "0"); TEST_COLON_REMINIMIZE_TERM("111", "001", "110"); TEST_COLON_REMINIMIZE_TERM("111", "110", "001"); TEST_COLON_REMINIMIZE_TERM("1101\n1110", "1001", "0100"); TEST_COLON_REMINIMIZE_TERM("1101\n1011\n0110", "0011", "1000\n0100"); TEST_COLON_REMINIMIZE_TERM("11000\n10100\n01100", "00011", "11000\n10100\n01100"); TEST_COLON_REMINIMIZE_TERM("11011\n10111\n01111", "00011", "11000\n10100\n01100"); TEST_COLON_REMINIMIZE_TERM ("011111111111111111110000000000000000000000011111111111111111111111101\n" "011111111111111111111111111111111111111111111011111111111111111111101\n" "100000000000000000000000000000000000000000000100000000000000000000010\n", "100000000000000000000000000000000000000000000000000000100000000000010", "011111111111111111111111111111111111111111111011111111011111111111101\n" "000000000000000000000000000000000000000000000100000000000000000000000\n"); TEST_COLON_REMINIMIZE_TERM ("100000000000000\n" "010000000000000\n" "001000000000000\n" "000100000000000\n" "000010000000000\n" "000001000000000\n" "000000100000000\n" "000000010000000\n" "000000001000000\n" "000000000100000\n" "000000000010000\n" "000000000001000\n" "000000000000100\n" "000000000000010\n" "000000000000001\n", "100000000000001", "000000000000000\n"); } TEST(RawSquareFreeIdeal, GetVarDividesCounts) { const size_t varCount = 2 * BitsPerWord + 1; RSFIdeal* ideal = newRawSquareFreeIdeal(varCount, varCount + 33); Word* term = newTerm(varCount); vector countsCorrect(varCount); vector counts; ideal->getVarDividesCounts(counts); ASSERT_EQ(counts, countsCorrect); setToAllVarProd(term, varCount); const size_t insertAllOnesCount = varCount < 33 ? varCount : 33; for (size_t i = 0; i < insertAllOnesCount; ++i) { ideal->insert(term); for (size_t var = 0; var < varCount; ++var) countsCorrect[var] += 1; ideal->getVarDividesCounts(counts); ASSERT_EQ(counts, countsCorrect); } ASSERT(ideal->getGeneratorCount() <= varCount); setToIdentity(term, varCount); for (size_t i = 0; i < varCount; ++i) { setExponent(ideal->getGenerator(i % insertAllOnesCount), i, 0); ideal->insert(term); countsCorrect[i] -= 1; ideal->getVarDividesCounts(counts); ASSERT_EQ(counts, countsCorrect); } deleteRawSquareFreeIdeal(ideal); deleteTerm(term); } #define TEST_HASFULLSUPPORT(idealStr, _extraStr, value) { \ const char* extraStr = _extraStr; \ Word* extra = extraStr == 0 ? 0 : newTermParse(extraStr); \ RSFIdeal* ideal = newRawSquareFreeIdealParse(idealStr); \ if (value) { \ ASSERT_TRUE2(ideal->hasFullSupport(extra), *ideal, extraStr); \ } else { \ ASSERT_FALSE2(ideal->hasFullSupport(extra), *ideal, extraStr); \ } \ deleteRawSquareFreeIdeal(ideal); \ deleteTerm(extra); \ } TEST(RawSquareFreeIdeal, HasFullSupport) { TEST_HASFULLSUPPORT("", "", true); TEST_HASFULLSUPPORT("0", "0", false); TEST_HASFULLSUPPORT("0\n0", "0", false); TEST_HASFULLSUPPORT("1\n0", "0", true); TEST_HASFULLSUPPORT("0\n1", "0", true); TEST_HASFULLSUPPORT("1\n1", "0", true); TEST_HASFULLSUPPORT("0\n0", "1", true); TEST_HASFULLSUPPORT("1\n0", "1", true); TEST_HASFULLSUPPORT("0\n1", "1", true); TEST_HASFULLSUPPORT("1\n1", "1", true); TEST_HASFULLSUPPORT ("011111111111111111110000000000000000000000011011111111111111111111101\n" "111111111111111111111111111111111111111111111011111111111111111111101\n" "000000000000000000000000000000000000000000000000000000000000000000010\n", "000000000000000000000000000000000000000000000100000000000000000000000", true); TEST_HASFULLSUPPORT ("011111111111111111110000000000000000000000011011111111111111111111101\n" "111111111111111111111111111111111111111111111011111111111111111111101\n" "000000000000000000000000000000000000000000000000000000000000000000010\n", "000000000000000000000000000000000000000000000000000000000000000000000", false); TEST_HASFULLSUPPORT ("011111111111111111110000000000000000000000011011111111111111111111101\n" "111111111111111111111111111111111111111111111011111111111111111111101\n" "000000000000000000000000000000000000000000000000000000000000000000000\n", "000000000000000000000000000000000000000000000100000000000000000000000", false); TEST_HASFULLSUPPORT // this triggered a bug ("11111111111111111111111111111111\n", "00000000000000000000000000000000", true); } #define TEST_COMPACT(beforeStr, removeStr, afterStr) { \ RSFIdeal* before = newRawSquareFreeIdealParse(beforeStr); \ Word* remove = newTermParse(removeStr); \ RSFIdeal* after = newRawSquareFreeIdealParse(afterStr); \ before->compact(remove); \ ASSERT_EQ(*before, *after); \ deleteRawSquareFreeIdeal(before); \ deleteTerm(remove); \ deleteRawSquareFreeIdeal(after); \ } TEST(RawSquareFreeIdeal, Compact) { TEST_COMPACT("101", "110", "1"); TEST_COMPACT("101", "101", "0"); TEST_COMPACT("101", "000", "101"); TEST_COMPACT("111\n000\n001\n101", "110", "1\n0\n1\n1\n"); TEST_COMPACT ("011111111111111111110000000000000000000000011011111111111111111111101\n" "111111111111111111111111111111111111111111111011111111111111111111101\n" "000000000000000000000000010000000000000000000000000000000000000000010\n", "111111110000000000000000000000000000000000000000000000000000000000001", "111111111111000000000000000000000001101111111111111111111110\n" "111111111111111111111111111111111111101111111111111111111110\n" "000000000000000001000000000000000000000000000000000000000001\n"); } #define TEST_TRANSPOSE(beforeStr, removeStr, afterStr) { \ RSFIdeal* before = newRawSquareFreeIdealParse(beforeStr); \ Word* remove = removeStr == 0 ? 0 : newTermParse(removeStr);\ RSFIdeal* after = newRawSquareFreeIdealParse(afterStr); \ const size_t maxDim = before->getGeneratorCount() > before->getVarCount() ?\ before->getGeneratorCount() : before->getVarCount(); \ RSFIdeal* calculated = newRawSquareFreeIdeal(maxDim, maxDim);\ calculated->setToTransposeOf(*before, remove); \ ASSERT_EQ(*calculated, *after); \ calculated->setToTransposeOf(*calculated); \ calculated->transpose(); \ ASSERT_EQ(*calculated, *after); \ deleteRawSquareFreeIdeal(before); \ deleteTerm(remove); \ deleteRawSquareFreeIdeal(after); \ deleteRawSquareFreeIdeal(calculated); \ } TEST(RawSquareFreeIdeal, Transpose) { TEST_TRANSPOSE("\n", 0, "\n"); TEST_TRANSPOSE("\n", "", "\n"); TEST_TRANSPOSE("01\n", 0, "0\n1\n"); TEST_TRANSPOSE("01\n", "00", "0\n1\n"); TEST_TRANSPOSE("01\n", "10", "1\n"); TEST_TRANSPOSE("01\n", "01", "0\n"); TEST_TRANSPOSE("11\n01\n", 0, "10\n11\n"); TEST_TRANSPOSE("1110101\n" "0011100\n" "1011111\n", "0010000", "101\n100\n011\n111\n001\n101\n"); string myBefore; string myRemove; string myAfter; for (size_t i = 0; i < 200; ++i) { myBefore += "0101"; myRemove += "0011"; myAfter += "0\n1\n"; } TEST_TRANSPOSE(myBefore.c_str(), myRemove.c_str(), myAfter.c_str()); } frobby-0.9.5/src/RawSquareFreeTerm.cpp000066400000000000000000000252661401527164200176640ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "RawSquareFreeTerm.h" #include #include namespace SquareFreeTermOps { Word* newTermParse(const char* strParam) { string str(strParam); Word* term = newTerm(str.size()); for (size_t var = 0; var < str.size(); ++var) { ASSERT(str[var] == '0' || str[var] == '1'); setExponent(term, var, str[var] == '1' ? 1 : 0); } return term; } void print(FILE* file, const Word* term, size_t varCount) { ostringstream out; print(out, term, varCount); fputs(out.str().c_str(), file); } void print(ostream& out, const Word* term, size_t varCount) { ASSERT(term != 0 || varCount == 0); out << '('; for (size_t var = 0; var < varCount; ++var) { out << getExponent(term, var); } out << ')'; } bool isIdentity(const Word* a, Word* aEnd) { for (; a != aEnd; ++a) if (*a != 0) return false; return true; } bool isIdentity(const Word* a, size_t varCount) { if (varCount == 0) return true; while (true) { if (*a != 0) return false; if (varCount <= BitsPerWord) return true; ++a; varCount -= BitsPerWord; } } size_t getSizeOfSupport(const Word* a, size_t varCount) { if (varCount == 0) return 0; size_t count = 0; while (true) { Word word = *a; // TODO: should be able to improve this set bit counting algorithm. while (word != 0) { if ((word & 1) != 0) ++count; word >>= 1; } if (varCount <= BitsPerWord) return count; ++a; varCount -= BitsPerWord; } } size_t getWordCount(size_t varCount) { // Compute varCount / BitsPerWord rounded up. Special case for // varCount == 0 as formula has underflow issue for that input. if (varCount == 0) return 1; else return ((varCount - 1) / BitsPerWord) + 1; } void compact(Word* compacted, const Word* term, const Word* remove, size_t varCount) { size_t newVarCount = 0; for (size_t var = 0; var < varCount; ++var) { if (getExponent(remove, var) != 0) continue; setExponent(compacted, newVarCount, getExponent(term, var)); ++newVarCount; } for (; newVarCount % BitsPerWord != 0; ++newVarCount) setExponent(compacted, newVarCount, 0); ASSERT(isValid(compacted, newVarCount)); } void setToIdentity(Word* res, const Word* resEnd) { for (; res != resEnd; ++res) *res = 0; } void setToIdentity(Word* res, size_t varCount) { for (; varCount >= BitsPerWord; ++res, varCount -= BitsPerWord) *res = 0; if (varCount > 0) *res = 0; } /** Sets all exponents of res to 1. */ void setToAllVarProd(Word* res, size_t varCount) { for (; varCount >= BitsPerWord; ++res, varCount -= BitsPerWord) *res = ~0; if (varCount > 0) { const Word fullSupportWord = (((Word)1) << varCount) - 1; *res = fullSupportWord; } } /** Returns identity term of varCount variables. Must deallocate with deleteTerm(). */ Word* newTerm(size_t varCount) { const size_t wordCount = getWordCount(varCount); Word* word = new Word[wordCount]; setToIdentity(word, word + wordCount); return word; } /** Allocates and returns a term based on str. The returned term must be deallocated using deleteTerm. str is parsed as a list of exponent vector entries that must be '0' or '1'. The string can contain no other characters. The parsing is inefficient and is intended for constructing terms in testing. */ Word* newTermParse(const char* str); /** Deletes term previously returned by newTerm(). Term can be null. */ void deleteTerm(Word* term) { delete[] term; } bool lexLess(const Word* a, const Word* b, size_t varCount) { if (varCount == 0) return false; while (true) { if (*a != *b) { Word xorAB = (*a) ^ (*b); ASSERT(xorAB != 0); Word leastSignificantBit = xorAB & (-xorAB); return (*a & leastSignificantBit) == 0; } if (varCount <= BitsPerWord) return false; // a and b are equal ++a; ++b; varCount -= BitsPerWord; } } void colon(Word* res, const Word* resEnd, const Word* a, const Word* b) { for (; res != resEnd; ++res, ++a, ++b) *res = (*a) & (~*b); } void colonInPlace(Word* res, const Word* resEnd, const Word* b) { for (; res != resEnd; ++res, ++b) *res &= ~*b; } void assign(Word* a, const Word* b, size_t varCount) { for (; varCount >= BitsPerWord; ++a, ++b, varCount -= BitsPerWord) *a = *b; if (varCount > 0) *a = *b; } bool encodeTerm(Word* encoded, const Exponent* term, const size_t varCount) { size_t var = 0; while (var < varCount) { Word bit = 1; *encoded = 0; do { if (term[var] == 1) *encoded |= bit; else if (term[var] != 0) return false; bit <<= 1; ++var; } while (bit != 0 && var < varCount); ++encoded; } return true; } bool encodeTerm(Word* encoded, const std::vector& term, const size_t varCount) { size_t var = 0; while (var < varCount) { Word bit = 1; *encoded = 0; do { if (term[var] == 1) *encoded |= bit; else if (term[var] != 0) return false; bit <<= 1; ++var; } while (bit != 0 && var < varCount); ++encoded; } return true; } bool encodeTerm(Word* encoded, const std::vector& term, const size_t varCount) { size_t var = 0; while (var < varCount) { Word bit = 1; *encoded = 0; do { if (!term[var].empty()) { if (term[var].size() > 1) return false; if (term[var][0] == '1') *encoded |= bit; else if (term[var][0] != '0') return false; } bit <<= 1; ++var; } while (bit != 0 && var < varCount); ++encoded; } return true; } void lcm(Word* res, const Word* resEnd, const Word* a, const Word* b) { for (; res != resEnd; ++a, ++b, ++res) *res = (*a) | (*b); } void lcm(Word* res, const Word* a, const Word* b, size_t varCount) { for (; varCount >= BitsPerWord; ++a, ++b, ++res, varCount -= BitsPerWord) *res = (*a) | (*b); if (varCount != 0) *res = (*a) | (*b); } void lcmInPlace(Word* res, const Word* resEnd, const Word* a) { for (; res != resEnd; ++a, ++res) *res |= *a; } void lcmInPlace(Word* res, const Word* a, size_t varCount) { for (; varCount >= BitsPerWord; ++a, ++res, varCount -= BitsPerWord) *res |= *a; if (varCount != 0) *res |= *a; } void gcd(Word* res, const Word* resEnd, const Word* a, const Word* b) { for (; res != resEnd; ++a, ++b, ++res) *res = (*a) & (*b); } void gcd(Word* res, const Word* a, const Word* b, size_t varCount) { for (; varCount >= BitsPerWord; ++a, ++b, ++res, varCount -= BitsPerWord) *res = (*a) & (*b); if (varCount != 0) *res = (*a) & (*b); } void gcdInPlace(Word* res, const Word* resEnd, const Word* a) { for (; res != resEnd; ++a, ++res) *res &= *a; } void gcdInPlace(Word* res, const Word* a, size_t varCount) { for (; varCount >= BitsPerWord; ++a, ++res, varCount -= BitsPerWord) *res &= *a; if (varCount != 0) *res &= *a; } bool isRelativelyPrime(const Word* a, const Word* b, size_t varCount) { for (; varCount >= BitsPerWord; ++a, ++b, varCount -= BitsPerWord) if ((*a) & (*b)) return false; if (varCount != 0) if ((*a) & (*b)) return false; return true; } /** Make 0 exponents 1 and make 1 exponents 0. */ void invert(Word* a, size_t varCount) { for (; varCount >= BitsPerWord; ++a, varCount -= BitsPerWord) *a = ~*a; if (varCount > 0) { const Word fullSupportWord = (((Word)1) << varCount) - 1; *a = (~*a) & fullSupportWord; } } /** Returns var if a equals var. If a is the identity or the product of more than one variable then returns varCount. */ size_t getVarIfPure(const Word* const a, size_t varCount) { const Word* hit = 0; size_t varsToGo = varCount; const Word* it = a; for (; varsToGo >= BitsPerWord; ++it, varsToGo -= BitsPerWord) { if (*it != 0) { if (hit != 0) return varCount; hit = it; } } if (varsToGo != 0) { if (*it != 0) { if (hit != 0) return varCount; hit = it; } } if (hit == 0) return varCount; size_t hitVar = (hit - a) * BitsPerWord; Word word = *hit; while ((word & 1) == 0) { ASSERT(word != 0); ++hitVar; word >>= 1; } word >>= 1; if (word != 0) return varCount; return hitVar; } /** For every variable var that divides a, decrement inc[var] by one. */ void decrementAtSupport(const Word* a, size_t* inc, size_t varCount) { if (varCount == 0) return; while (true) { Word word = *a; size_t* intraWordInc = inc; while (word != 0) { *intraWordInc -= word & 1; // -1 if bit set ++intraWordInc; word = word >> 1; } if (varCount <= BitsPerWord) return; varCount -= BitsPerWord; inc += BitsPerWord; ++a; } } /** For every variable var that divides a, set inc[var] to zero. */ void toZeroAtSupport(const Word* a, size_t* inc, size_t varCount) { if (varCount == 0) return; while (true) { Word word = *a; size_t* intraWordInc = inc; while (word != 0) { if (word & 1) *intraWordInc = 0; ++intraWordInc; word = word >> 1; } if (varCount <= BitsPerWord) return; varCount -= BitsPerWord; inc += BitsPerWord; ++a; } } /** Returns true if a equals b. */ bool equals(const Word* a, const Word* b, size_t varCount) { if (varCount == 0) return true; while (true) { if (*a != *b) return false; if (varCount <= BitsPerWord) return true; ++a; ++b; varCount -= BitsPerWord; } } /** The unused bits at the end of the last word must be zero for the functions here to work correctly. They should all maintain this invariant. This function is useful in tests to ensure that that is true. */ bool isValid(const Word* a, size_t varCount) { size_t offset = varCount / BitsPerWord; a += offset; varCount -= BitsPerWord * offset; if (varCount == 0) return true; const Word fullSupportWord = (((Word)1) << varCount) - 1; return ((*a) & ~fullSupportWord) == 0; } void swap(Word* a, Word* b, size_t varCount) { for (; varCount >= BitsPerWord; ++a, ++b, varCount -= BitsPerWord) std::swap(*a, *b); if (varCount > 0) std::swap(*a, *b); } } frobby-0.9.5/src/RawSquareFreeTerm.h000066400000000000000000000160021401527164200173150ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef RAW_SQUARE_FREE_TERM_GUARD #define RAW_SQUARE_FREE_TERM_GUARD #include #include #include namespace SquareFreeTermOps { bool isIdentity(const Word* a, Word* aEnd); bool isIdentity(const Word* a, size_t varCount); size_t getSizeOfSupport(const Word* a, size_t varCount); size_t getWordCount(size_t varCount); /** For every variable var that divides remove, remove the space for that variable in term and put the result in compacted. So the operation performed is a colon, except that the bits are removed instead of just set to zero. The remaining bits are moved into the gaps so that compacted may take up less space than term does. The relative order of the remaining variables is preserved. The result is placed in res. It is allowed for compacted to equal term. Otherwise its memory must be disjoint from that of term. The memory for remove must always be disjoint from that of term. */ void compact(Word* compacted, const Word* term, const Word* remove, size_t varCount); void setToIdentity(Word* res, const Word* resEnd); void setToIdentity(Word* res, size_t varCount); /** Sets all exponents of res to 1. */ void setToAllVarProd(Word* res, size_t varCount); /** Returns identity term of varCount variables. Must deallocate with deleteTerm(). */ Word* newTerm(size_t varCount); /** Allocates and returns a term based on str. The returned term must be deallocated using deleteTerm. str is parsed as a list of exponent vector entries that must be '0' or '1'. The string can contain no other characters. The parsing is inefficient and is intended for constructing terms in testing. */ Word* newTermParse(const char* str); /** Deletes term previously returned by newTerm(). Term can be null. */ void deleteTerm(Word* term); /** Returns true if a divides b. */ bool divides(const Word* a, const Word* aEnd, const Word* b); bool lexLess(const Word* a, const Word* b, size_t varCount); void colon(Word* res, const Word* resEnd, const Word* a, const Word* b); void colonInPlace(Word* res, const Word* resEnd, const Word* b); void assign(Word* a, const Word* aEnd, const Word* b); void assign(Word* a, const Word* b, size_t varCount); /** Assigns the RawSquareFreeTerm-encoded form of term to encoded and returns true if term is square free. Otherwise returns false. */ bool encodeTerm(Word* encoded, const Exponent* term, const size_t varCount); bool encodeTerm(Word* encoded, const std::vector& term, const size_t varCount); bool encodeTerm(Word* encoded, const std::vector& it, const size_t varCount); inline size_t getBitOffset(size_t var); inline size_t getWordOffset(size_t var); bool hasFullSupport(const Word* a, size_t varCount); void lcm(Word* res, const Word* resEnd, const Word* a, const Word* b); void lcm(Word* res, const Word* a, const Word* b, size_t varCount); void lcmInPlace(Word* res, const Word* resEnd, const Word* a); void lcmInPlace(Word* res, const Word* a, size_t varCount); void gcd(Word* res, const Word* resEnd, const Word* a, const Word* b); void gcd(Word* res, const Word* a, const Word* b, size_t varCount); void gcdInPlace(Word* res, const Word* resEnd, const Word* a); void gcdInPlace(Word* res, const Word* a, size_t varCount); bool isRelativelyPrime(const Word* a, const Word* aEnd, const Word* b); bool isRelativelyPrime(const Word* a, const Word* b, size_t varCount); void setExponent(Word* a, size_t var, bool value); /** returns true if var divides a and false otherwise. */ bool getExponent(const Word* a, size_t var); void swap(Word* a, Word* b, size_t varCount); void swap(Word* a, Word* aEnd, Word* b); /** Make 0 exponents 1 and make 1 exponents 0. */ void invert(Word* a, size_t varCount); /** Returns var if a equals var. If a is the identity or the product of more than one variable then returns varCount. */ size_t getVarIfPure(const Word* const a, size_t varCount); /** For every variable var that divides a, decrement inc[var] by one. */ void decrementAtSupport(const Word* a, size_t* inc, size_t varCount); /** For every variable var that divides a, set inc[var] to zero. */ void toZeroAtSupport(const Word* a, size_t* inc, size_t varCount); /** Returns true if a equals b. */ bool equals(const Word* a, const Word* b, size_t varCount); /** The unused bits at the end of the last word must be zero for the functions here to work correctly. They should all maintain this invariant. This function is useful in tests to ensure that that is true. */ bool isValid(const Word* a, size_t varCount); inline bool divides(const Word* a, const Word* aEnd, const Word* b) { for (; a != aEnd; ++a, ++b) if ((*a & (~*b)) != 0) return false; return true; } inline bool getExponent(const Word* a, size_t var) { const Word word = a[getWordOffset(var)]; const Word bitMask = ((Word)1) << getBitOffset(var); return word & bitMask; } inline size_t getBitOffset(size_t var) { return var % BitsPerWord; } inline size_t getWordOffset(size_t var) { return var / BitsPerWord; } inline void assign(Word* a, const Word* aEnd, const Word* b) { for (; a != aEnd; ++a, ++b) *a = *b; } inline void setExponent(Word* a, size_t var, bool value) { Word& word = a[getWordOffset(var)]; const size_t bitOffset = getBitOffset(var); const Word setBit = ((Word)1) << bitOffset; const Word valueBit = ((Word)value) << bitOffset; word = (word & (~setBit)) | valueBit; } inline void swap(Word* a, Word* aEnd, Word* b) { for (; a != aEnd; ++a, ++b) std::swap(*a, *b); } inline bool hasFullSupport(const Word* a, size_t varCount) { const Word allOnes = ~((Word)0); for (; varCount >= BitsPerWord; varCount -= BitsPerWord, ++a) if (*a != allOnes) return false; if (varCount == 0) return true; const Word fullSupportWord = (((Word)1) << varCount) - 1; return *a == fullSupportWord; } inline bool isRelativelyPrime(const Word* a, const Word* aEnd, const Word* b) { for (; a != aEnd; ++a, ++b) if ((*a) & (*b)) return false; return true; } void print(FILE* file, const Word* term, size_t varCount); void print(ostream& out, const Word* term, size_t varCount); } #endif frobby-0.9.5/src/RawSquareFreeTermTest.cpp000066400000000000000000000377041401527164200205240ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "RawSquareFreeTerm.h" #include "tests.h" TEST_SUITE(RawSquareFreeTerm) using namespace SquareFreeTermOps; namespace Ops = SquareFreeTermOps; TEST(RawSquareFreeTerm, getWordCount) { ASSERT_EQ(getWordCount(0), 1u); ASSERT_EQ(getWordCount(1), 1u); ASSERT_EQ(getWordCount(BitsPerWord - 1), 1u); ASSERT_EQ(getWordCount(BitsPerWord), 1u); ASSERT_EQ(getWordCount(BitsPerWord + 1), 2u); ASSERT_EQ(getWordCount(10 * BitsPerWord - 1), 10u); ASSERT_EQ(getWordCount(10 * BitsPerWord), 10u); ASSERT_EQ(getWordCount(10 * BitsPerWord + 1), 11u); } TEST(RawSquareFreeTerm, SetAndGetExponent) { const size_t varCount = BitsPerWord * 2; Word* term = newTerm(varCount); for (size_t var = 0; var < varCount; ++var) { ASSERT_FALSE(getExponent(term, var)); setExponent(term, var, true); ASSERT_TRUE(getExponent(term, var)); } for (size_t var = 0; var < varCount; ++var) { ASSERT_TRUE(getExponent(term, var)); setExponent(term, var, false); ASSERT_FALSE(getExponent(term, var)); } } TEST(RawSquareFreeTerm, Assign) { const size_t varCount = BitsPerWord * 2; const size_t wordCount = getWordCount(varCount); Word* a = newTerm(varCount); Word* b = newTerm(varCount); setExponent(a, 1, true); ASSERT_TRUE(getExponent(a, 1)); ASSERT_FALSE(getExponent(b, 1)); assign(b, b + wordCount, a); ASSERT_TRUE(getExponent(a, 1)); ASSERT_TRUE(getExponent(b, 1)); setExponent(a, 1, false); ASSERT_FALSE(getExponent(a, 1)); ASSERT_TRUE(getExponent(b, 1)); deleteTerm(a); deleteTerm(b); } TEST(RawSquareFreeTerm, HasFullSupport) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* term = newTerm(varCount); for (size_t var = 0; var < varCount; ++var) { ASSERT_FALSE_SILENT(hasFullSupport(term, varCount)); setExponent(term, var, true); } ASSERT_TRUE_SILENT(hasFullSupport(term, varCount)); for (size_t var = 0; var < varCount; ++var) { ASSERT_TRUE_SILENT(hasFullSupport(term, varCount)); setExponent(term, var, false); ASSERT_FALSE_SILENT(hasFullSupport(term, varCount)); setExponent(term, var, true); } ASSERT_TRUE(hasFullSupport(term, varCount)); deleteTerm(term); } } TEST(RawSquareFreeTerm, IsIdentity) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* term = newTerm(varCount); Word* termEnd = term + getWordCount(varCount); ASSERT_TRUE(isIdentity(term, termEnd)); for (size_t var = 0; var < varCount; ++var) { ASSERT_TRUE_SILENT(isIdentity(term, termEnd)); setExponent(term, var, true); ASSERT_FALSE_SILENT(isIdentity(term, termEnd)); setExponent(term, var, false); } ASSERT_TRUE(isIdentity(term, termEnd)); deleteTerm(term); } } TEST(RawSquareFreeTerm, GetSizeOfSupport) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* term = newTerm(varCount); ASSERT_EQ(getSizeOfSupport(term, varCount), 0u); for (size_t var = 0; var < varCount; ++var) { setExponent(term, var, 1); ASSERT_EQ_SILENT(getSizeOfSupport(term, varCount), 1u); setExponent(term, var, 0); } for (size_t var = 0; var < varCount; ++var) { setExponent(term, var, 1); ASSERT_EQ_SILENT(getSizeOfSupport(term, varCount), var + 1); } deleteTerm(term); } } TEST(RawSquareFreeTerm, SetToIdentity) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* term = newTerm(varCount); Word* termEnd = term + getWordCount(varCount); ASSERT_TRUE(isIdentity(term, termEnd)); for (size_t var = 0; var < varCount; ++var) { setExponent(term, var, true); setToIdentity(term, termEnd); ASSERT_TRUE_SILENT(isIdentity(term, termEnd)); setExponent(term, var, true); setToIdentity(term, varCount); ASSERT_TRUE_SILENT(isIdentity(term, termEnd)); } deleteTerm(term); } } TEST(RawSquareFreeTerm, SetToAllVarProd) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* term = newTerm(varCount); setToAllVarProd(term, varCount); ASSERT_TRUE(hasFullSupport(term, varCount)); for (size_t var = 0; var < varCount; ++var) { setExponent(term, var, false); setToAllVarProd(term, varCount); ASSERT_TRUE_SILENT(isValid(term, varCount)); ASSERT_TRUE_SILENT(hasFullSupport(term, varCount)); } deleteTerm(term); } } TEST(RawSquareFreeTerm, IsRelativelyPrime) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* a = newTerm(varCount); Word* aEnd = a + getWordCount(varCount); Word* b = newTerm(varCount); Word* bEnd = b + getWordCount(varCount); ASSERT_TRUE(isRelativelyPrime(a, aEnd, b)); ASSERT_TRUE(isRelativelyPrime(b, bEnd, a)); for (size_t var = 0; var < varCount; ++var) { setExponent(a, var, true); ASSERT_TRUE_SILENT(isRelativelyPrime(a, aEnd, b)); ASSERT_TRUE_SILENT(isRelativelyPrime(b, bEnd, a)); setExponent(b, var, true); ASSERT_FALSE_SILENT(isRelativelyPrime(a, aEnd, b)); ASSERT_FALSE_SILENT(isRelativelyPrime(b, bEnd, a)); setExponent(a, var, false); } deleteTerm(a); deleteTerm(b); } } TEST(RawSquareFreeTerm, Lcm) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* a = newTerm(varCount); Word* b = newTerm(varCount); Word* c = newTerm(varCount); Word* cEnd = c + getWordCount(varCount); lcm(c, cEnd, a, b); ASSERT_TRUE(isIdentity(c, cEnd)); if (varCount < 4) continue; // a becomes 1001 at end. // b becomes 1100 at end. setExponent(a, varCount - 1, true); setExponent(a, varCount - 4, true); setExponent(b, varCount - 3, true); setExponent(b, varCount - 4, true); lcm(c, cEnd, a, b); // c should be 1101 at end. ASSERT_TRUE(getExponent(c, varCount - 1)); ASSERT_FALSE(getExponent(c, varCount - 2)); ASSERT_TRUE(getExponent(c, varCount - 3)); ASSERT_TRUE(getExponent(c, varCount - 4)); // no other bits should be set. setExponent(c, varCount - 1, false); setExponent(c, varCount - 3, false); setExponent(c, varCount - 4, false); ASSERT_TRUE(isIdentity(c, cEnd)); deleteTerm(a); deleteTerm(b); deleteTerm(c); } } TEST(RawSquareFreeTerm, Gcd) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* a = newTerm(varCount); Word* b = newTerm(varCount); Word* c = newTerm(varCount); Word* cEnd = c + getWordCount(varCount); gcd(c, cEnd, a, b); ASSERT_TRUE(isIdentity(c, cEnd)); if (varCount < 4) continue; // a becomes 1001 at end. // b becomes 1100 at end. setExponent(a, varCount - 1, true); setExponent(a, varCount - 4, true); setExponent(b, varCount - 3, true); setExponent(b, varCount - 4, true); gcd(c, cEnd, a, b); // c should be 1000 at end. ASSERT_FALSE(getExponent(c, varCount - 1)); ASSERT_FALSE(getExponent(c, varCount - 2)); ASSERT_FALSE(getExponent(c, varCount - 3)); ASSERT_TRUE(getExponent(c, varCount - 4)); // no other bits should be set. setExponent(c, varCount - 4, false); ASSERT_TRUE(isIdentity(c, cEnd)); deleteTerm(a); deleteTerm(b); deleteTerm(c); } } TEST(RawSquareFreeTerm, Colon) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* a = newTerm(varCount); Word* b = newTerm(varCount); Word* c = newTerm(varCount); Word* cEnd = c + getWordCount(varCount); colon(c, cEnd, a, b); ASSERT_TRUE(isIdentity(c, cEnd)); if (varCount < 4) continue; // a becomes 1001 at end. // b becomes 1100 at end. setExponent(a, varCount - 1, true); setExponent(a, varCount - 4, true); setExponent(b, varCount - 3, true); setExponent(b, varCount - 4, true); colon(c, cEnd, a, b); // c should be 0001 at end. ASSERT_TRUE(getExponent(c, varCount - 1)); ASSERT_FALSE(getExponent(c, varCount - 2)); ASSERT_FALSE(getExponent(c, varCount - 3)); ASSERT_FALSE(getExponent(c, varCount - 4)); // no other bits should be set. setExponent(c, varCount - 1, false); ASSERT_TRUE(isIdentity(c, cEnd)); deleteTerm(a); deleteTerm(b); deleteTerm(c); } } TEST(RawSquareFreeTerm, Divides) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* a = newTerm(varCount); Word* aEnd = a + getWordCount(varCount); Word* b = newTerm(varCount); Word* bEnd = b + getWordCount(varCount); ASSERT_TRUE(Ops::divides(a, aEnd, b)); for (size_t var = 0; var < varCount; ++var) { setExponent(a, var, true); ASSERT_FALSE_SILENT(Ops::divides(a, aEnd, b)); ASSERT_TRUE_SILENT(Ops::divides(b, bEnd, a)); setExponent(b, var, true); ASSERT_TRUE_SILENT(Ops::divides(a, aEnd, b)); } deleteTerm(a); deleteTerm(b); } } TEST(RawSquareFreeTerm, LexLess) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* a = newTerm(varCount); Word* b = newTerm(varCount); ASSERT_FALSE(lexLess(a, b, varCount)); if (varCount == 0) continue; setExponent(b, varCount - 1, 1); ASSERT_TRUE_SILENT(lexLess(a, b, varCount)); ASSERT_FALSE_SILENT(lexLess(b, a, varCount)); for (size_t var = 0; var < varCount - 1; ++var) { setExponent(a, var, 1); ASSERT_FALSE_SILENT(lexLess(a, b, varCount)); ASSERT_TRUE_SILENT(lexLess(b, a, varCount)); setExponent(b, var, 1); ASSERT_TRUE_SILENT(lexLess(a, b, varCount)); ASSERT_FALSE_SILENT(lexLess(b, a, varCount)); if (var % 3 == 1) { // vary the pattern of the vars we've already been at. setExponent(a, var, 0); setExponent(b, var, 0); } } deleteTerm(a); deleteTerm(b); } } TEST(RawSquareFreeTerm, Invert) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* a = newTerm(varCount); ASSERT_TRUE(isIdentity(a, varCount)); invert(a, varCount); ASSERT_TRUE(hasFullSupport(a, varCount)); ASSERT_TRUE(isValid(a, varCount)); if (varCount < 1) continue; setExponent(a, 0, false); setExponent(a, varCount - 1, false); invert(a, varCount); ASSERT_TRUE(getExponent(a, 0)); ASSERT_TRUE(getExponent(a, varCount - 1)); invert(a, varCount); ASSERT_FALSE(getExponent(a, 0)); ASSERT_FALSE(getExponent(a, varCount - 1)); deleteTerm(a); } } TEST(RawSquareFreeTerm, GetVarIfPure) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* a = newTerm(varCount); ASSERT_EQ(getVarIfPure(a, varCount), varCount); for (size_t v1 = 0; v1 < varCount; ++v1) { setExponent(a, v1, 1); ASSERT_EQ_SILENT(getVarIfPure(a, varCount), v1); for (size_t v2 = 0; v2 < varCount; ++v2) { if (v1 != v2) { setExponent(a, v2, 1); ASSERT_EQ_SILENT(getVarIfPure(a, varCount), varCount); setExponent(a, v2, 0); } } setExponent(a, v1, 0); } deleteTerm(a); } } /* TEST(RawSquareFreeTerm, IncrementAtSupport) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* every = newTerm(varCount); Word* second = newTerm(varCount); Word* third = newTerm(varCount); vector counts(varCount); vector countsCorrect(varCount); size_t* countsPtr = &counts.front(); incrementAtSupport(every, countsPtr, varCount); ASSERT_TRUE_SILENT(counts == vector(varCount)); for (size_t var = 0; var < varCount; ++var) { setExponent(every, var, 1); countsCorrect[var] += 1; if (var % 2 == 0) { setExponent(second, var, 1); countsCorrect[var] += 1; } if (var % 3 == 0) { setExponent(third, var, 1); countsCorrect[var] += 1; } } incrementAtSupport(every, countsPtr, varCount); incrementAtSupport(second, countsPtr, varCount); incrementAtSupport(third, countsPtr, varCount); ASSERT_TRUE(counts == countsCorrect); deleteTerm(every); deleteTerm(second); deleteTerm(third); } } */ TEST(RawSquareFreeTerm, IsValid) { const size_t varCount = 2 * BitsPerWord; Word* a = newTerm(varCount); ASSERT_TRUE(isValid(a, varCount)); setExponent(a, 1, true); ASSERT_FALSE(isValid(a, 1)); ASSERT_TRUE(isValid(a, 2)); setExponent(a, BitsPerWord, true); ASSERT_TRUE(isValid(a, BitsPerWord)); ASSERT_TRUE(isValid(a, BitsPerWord + 1)); setExponent(a, BitsPerWord + 1, true); ASSERT_FALSE(isValid(a, BitsPerWord + 1)); ASSERT_TRUE(isValid(a, BitsPerWord + 2)); setExponent(a, varCount - 1, true); ASSERT_FALSE(isValid(a, varCount - 1)); ASSERT_TRUE(isValid(a, varCount)); deleteTerm(a); } TEST(RawSquareFreeTerm, NewTermParse) { Word* ref = newTerm(65); setExponent(ref, 0, 1); setExponent(ref, 1, 1); setExponent(ref, 3, 1); setExponent(ref, 4, 1); setExponent(ref, 64, 1); // 0 1 2 3 4 5 6 7 // 1234567890123456789012345678901234567890123456789012345678901234567890 Word* parsed = newTermParse ("11011000000000000000000000000000000000000000000000000000000000001"); ASSERT_TRUE(equals(ref, parsed, 65)); deleteTerm(parsed); deleteTerm(ref); ref = newTerm(1); setExponent(ref, 0, 1); parsed = newTermParse("1"); ASSERT_TRUE(equals(ref, parsed, 1)); deleteTerm(parsed); deleteTerm(ref); } TEST(RawSquareFreeTerm, Equals) { const size_t maxVarCount = 2 * BitsPerWord + 1; for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) { Word* a = newTerm(varCount); Word* b = newTerm(varCount); ASSERT_TRUE(equals(a, b, varCount)); for (size_t var = 0; var < varCount; ++var) { setExponent(a, var, 1); ASSERT_FALSE_SILENT(equals(a, b, varCount)); ASSERT_FALSE_SILENT(equals(b, a, varCount)); setExponent(b, var, 1); ASSERT_TRUE_SILENT(equals(a, b, varCount)); ASSERT_TRUE_SILENT(equals(b, a, varCount)); } deleteTerm(a); deleteTerm(b); } } #define TEST_COMPACT(A,B,C) { \ size_t varCount = strlen(A); \ Word* a = newTermParse(A); \ Word* b = newTermParse(B); \ Word* c = newTermParse(C); \ size_t varCountAfter = strlen(C); \ Word* d = newTerm(varCountAfter); \ compact(d, a, b, varCount); \ ASSERT_TRUE(equals(d, c, varCountAfter)); \ compact(a, a, b, varCount); \ ASSERT_TRUE(equals(a, c, varCountAfter)); \ deleteTerm(a); \ deleteTerm(b); \ deleteTerm(c); \ deleteTerm(d); \ } TEST(RawSquareFreeTerm, Compact) { TEST_COMPACT("0", "0", "0"); TEST_COMPACT("1", "0", "1"); TEST_COMPACT("0", "1", ""); TEST_COMPACT("1", "1", ""); TEST_COMPACT("001", "010", "01"); TEST_COMPACT("000000000000000000001111111111111111111111111111", "000000000000000000000000000000000000000000000000", "000000000000000000001111111111111111111111111111"); TEST_COMPACT("000000000000000000001111111111111111111111111111", "111111111111111111111111111111111111111111111111", ""); TEST_COMPACT("111100001111000011110000111100001111000011110000", "101010101010101010101010101010101010101010101010", "110011001100110011001100"); TEST_COMPACT("000000000000000000000000000000100000000000000001", "011111111111111111111111111111011111111111111101", "010"); TEST_COMPACT("011111111111111111111111111111011111111111111101", "000000000000000000000000000000100000000000000001", "0111111111111111111111111111111111111111111110"); } frobby-0.9.5/src/SatBinomConsumer.cpp000066400000000000000000000023021401527164200175320ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "SatBinomConsumer.h" #include "SatBinomIdeal.h" SatBinomConsumer::~SatBinomConsumer() { } void SatBinomConsumer::beginConsuming(const VarNames& names) { consumeRing(names); beginConsuming(); } void SatBinomConsumer::consume(const SatBinomIdeal& ideal) { beginConsuming(ideal.getNames()); for (size_t binom = 0; binom < ideal.getGeneratorCount(); ++binom) consume(ideal.getGenerator(binom)); doneConsuming(); } frobby-0.9.5/src/SatBinomConsumer.h000066400000000000000000000025131401527164200172030ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SAT_BINOM_CONSUMER_GUARD #define SAT_BINOM_CONSUMER_GUARD #include class VarNames; class SatBinomIdeal; class SatBinomConsumer { public: virtual ~SatBinomConsumer(); virtual void consumeRing(const VarNames& names) = 0; virtual void beginConsuming() = 0; virtual void consume(const vector& term) = 0; virtual void doneConsuming() = 0; virtual void consume(const SatBinomIdeal& ideal); // Calling this convenience method is equivalent to // consumeRing(names); // beginConsuming(); void beginConsuming(const VarNames& names); }; #endif frobby-0.9.5/src/SatBinomIdeal.cpp000066400000000000000000000230301401527164200167560ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "SatBinomIdeal.h" #include "BigIdeal.h" #include "Matrix.h" #include #include SatBinomIdeal::SatBinomIdeal() { } SatBinomIdeal::SatBinomIdeal(const VarNames& names): _names(names) { } void SatBinomIdeal::insert(const vector& binom) { ASSERT(binom.size() == getVarCount()); _gens.push_back(binom); } const vector& SatBinomIdeal::getGenerator(size_t index) const { ASSERT(index < getGeneratorCount()); return _gens[index]; } size_t SatBinomIdeal::getGeneratorCount() const { return _gens.size(); } void SatBinomIdeal::print(FILE* out) const { ostringstream tmp; print(tmp); fputs(tmp.str().c_str(), out); } void SatBinomIdeal::print(ostream& out) const { out << "/---- SatBinomIdeal of " << _gens.size() << " generators:\n"; for (vector >::const_iterator it = _gens.begin(); it != _gens.end(); ++it) { for (vector::const_iterator entry = it->begin(); entry != it->end(); ++entry) out << *entry << ' '; out << '\n'; } out << "----/ End of list.\n"; } void SatBinomIdeal::clearAndSetNames(const VarNames& names) { _gens.clear(); _names = names; } size_t SatBinomIdeal::getVarCount() const { return _names.getVarCount(); } void SatBinomIdeal::renameVars(const VarNames& names) { ASSERT(names.getVarCount() == getVarCount()); _names = names; } const VarNames& SatBinomIdeal::getNames() const { return _names; } void SatBinomIdeal::clear() { _gens.clear(); _names.clear(); } void SatBinomIdeal::reserve(size_t size) { _gens.reserve(size); } void SatBinomIdeal::removeGeneratorsWithLeadingZero() { size_t gen = 0; while (gen < getGeneratorCount()) { if (getGenerator(gen)[0] == 0) { _gens[gen] = _gens.back(); _gens.pop_back(); } else ++gen; } } void SatBinomIdeal::removeGeneratorsWithoutLeadingZero() { size_t gen = 0; while (gen < getGeneratorCount()) { if (getGenerator(gen)[0] != 0) { _gens[gen] = _gens.back(); _gens.pop_back(); } else ++gen; } } void SatBinomIdeal::getInitialIdeal(BigIdeal& ideal) const { ideal.clearAndSetNames(getNames()); ideal.reserve(getGeneratorCount()); for (size_t gen = 0; gen < getGeneratorCount(); ++gen) { ideal.newLastTerm(); for (size_t var = 0; var < getVarCount(); ++var) if (getGenerator(gen)[var] > 0) ideal.getLastTermExponentRef(var) = getGenerator(gen)[var]; } } vector& SatBinomIdeal::getLastBinomRef() { ASSERT(!_gens.empty()); return _gens.back(); } void SatBinomIdeal::newLastTerm() { _gens.resize(_gens.size() + 1); _gens.back().resize(_names.getVarCount()); } bool SatBinomIdeal::hasZeroEntry() const { for (size_t gen = 0; gen < getGeneratorCount(); ++gen) for (size_t var = 0; var < getVarCount(); ++var) if (getGenerator(gen)[var] == 0) return true; return false; } bool SatBinomIdeal::initialIdealIsWeaklyGeneric() const { vector v(getVarCount()); for (size_t gen1 = 0; gen1 < getGeneratorCount(); ++gen1) { for (size_t gen2 = gen1 + 1; gen2 < getGeneratorCount(); ++gen2) { const vector& g1 = getGenerator(gen1); const vector& g2 = getGenerator(gen2); // Skip if g1 and g2 are different in each entry. bool sharesEntry = false; for (size_t var = 0; var < getVarCount(); ++var) { if (g1[var] == g2[var] && g1[var] > 0) { sharesEntry = true; break; } } if (!sharesEntry) continue; if (isPointFreeBody(g1, g2)) return false; } } return true; } bool SatBinomIdeal::isPointFreeBody(const vector& a, const vector& b) const { ASSERT(a.size() == getVarCount()); ASSERT(b.size() == getVarCount()); vector rhs(getVarCount()); // Set rhs to max(0,g1,g2)-1. for (size_t var = 0; var < getVarCount(); ++var) { rhs[var] = a[var] > b[var] ? a[var] : b[var]; if (rhs[var] < 0) rhs[var] = 0; rhs[var] -= 1; } return !isDominating(rhs); } bool SatBinomIdeal::isPointFreeBody(const vector& a, const vector& b, const vector& c) const { ASSERT(a.size() == getVarCount()); ASSERT(b.size() == getVarCount()); vector rhs(getVarCount()); // Set rhs to max(0,g1,g1+g2)-1. for (size_t var = 0; var < getVarCount(); ++var) { rhs[var] = a[var] > b[var] ? a[var] : b[var]; rhs[var] = rhs[var] > c[var] ? rhs[var] : c[var]; if (rhs[var] < 0) rhs[var] = 0; rhs[var] -= 1; } return !isDominating(rhs); } bool SatBinomIdeal::isInterior(const vector& a, const vector& b) const { ASSERT(a.size() == b.size()); if (!isPointFreeBody(a, b)) return false; for (size_t var = 1; var < a.size(); ++var) if (a[var] <= 0 && b[var] <= 0) return false; return true; } namespace { bool hasCycle(size_t gen, vector& color, const SatBinomIdeal& ideal) { // 0 = Not seen before. // 1 = Exploring now. // 2 = Already explored. Does not lead to cycle. if (color[gen] == 1) return true; if (color[gen] == 2) return false; color[gen] = 1; for (size_t g = 0; g < ideal.getGeneratorCount(); ++g) if (ideal.isInteriorEdge(gen, g) && !ideal.isTerminatingEdge(gen, g) && hasCycle(g, color, ideal)) return true; color[gen] = 2; return false; } } bool SatBinomIdeal::validate() const { // check the graph satisifies what we think it should. bool generic = !hasZeroEntry(); if (!generic) return true; // termination. vector color(getGeneratorCount()); for (size_t gen = 0; gen < getGeneratorCount(); ++gen) if (hasCycle(gen, color, *this)) return false; // out-degree 1 when generic for (size_t from = 0; from < getGeneratorCount(); ++from) { const vector& fromGen = getGenerator(from); size_t outDegree = 0; for (size_t to = 0; to < getGeneratorCount(); ++to) { if (isInteriorEdge(from, to)) ++outDegree; } if (isInterior(fromGen, fromGen)) { if (outDegree != 0) return false; } else { if (outDegree != 1) return false; } } return true; } bool SatBinomIdeal::isInteriorEdge(size_t from, size_t to) const { const vector& fromGen = getGenerator(from); const vector& toGen = getGenerator(to); if (isInterior(fromGen, fromGen)) return false; if (isInterior(toGen, toGen)) return false; vector sum(fromGen.size()); for (size_t var = 0; var < fromGen.size(); ++var) sum[var] = fromGen[var] + toGen[var]; return isInterior(toGen, sum); } bool SatBinomIdeal::isTerminatingEdge(size_t from, size_t to) const { if (!isInteriorEdge(from, to)) return false; const vector fromGen = getGenerator(from); const vector toGen = getGenerator(to); vector sum(fromGen.size()); for (size_t var = 0; var < fromGen.size(); ++var) sum[var] = fromGen[var] + toGen[var]; return isPointFreeBody(fromGen, sum); } void SatBinomIdeal::getDoubleTriangleCount(mpz_class& count) const { vector sum(getVarCount()); count = 0; for (size_t gen1 = 0; gen1 < getGeneratorCount(); ++gen1) { for (size_t gen2 = gen1 + 1; gen2 < getGeneratorCount(); ++gen2) { const vector& g1 = getGenerator(gen1); const vector& g2 = getGenerator(gen2); // Set sum = g1 + g2. for (size_t var = 0; var < getVarCount(); ++var) sum[var] = g1[var] + g2[var]; if (isPointFreeBody(g1, sum) && isPointFreeBody(g2, sum)) ++count; } } } bool SatBinomIdeal::isGeneric() const { return !hasZeroEntry() && initialIdealIsWeaklyGeneric(); } SatBinomIdeal& SatBinomIdeal::operator=(const SatBinomIdeal& ideal) { _gens = ideal._gens; _names = ideal._names; return *this; } bool SatBinomIdeal::isDominating(const vector& v) const { for (size_t gen = 0; gen < getGeneratorCount(); ++gen) { bool dom = true; for (size_t var = 0; var < getVarCount(); ++var) { if (v[var] < getGenerator(gen)[var]) { dom = false; break; } } if (dom) return true; } return false; } bool SatBinomIdeal::isGenerator (const vector& v) const { for (size_t gen = 0; gen < getGeneratorCount(); ++gen) if (getGenerator(gen) == v) return true; return false; } void SatBinomIdeal::projectVar(size_t var) { ASSERT(var < getVarCount()); for (size_t gen = 0; gen < getGeneratorCount(); ++gen) _gens[gen].erase(_gens[gen].begin() + var); _names.projectVar(var); } void SatBinomIdeal::getMatrix(Matrix& matrix) const { matrix.resize(getGeneratorCount(), getVarCount()); for (size_t gen = 0; gen < getGeneratorCount(); ++gen) for (size_t var = 0; var < getVarCount(); ++var) matrix(gen, var) = _gens[gen][var]; } frobby-0.9.5/src/SatBinomIdeal.h000066400000000000000000000100471401527164200164270ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SAT_BINOM_IDEAL_GUARD #define SAT_BINOM_IDEAL_GUARD #include "VarNames.h" #include class BigIdeal; class Matrix; /// Represents a saturated binomial ideal. class SatBinomIdeal { public: SatBinomIdeal(); SatBinomIdeal(const VarNames& names); void insert(const vector& binom); const vector& getGenerator(size_t index) const; size_t getGeneratorCount() const; void print(FILE* file) const; void print(ostream& out) const; void clearAndSetNames(const VarNames& names); void removeGeneratorsWithLeadingZero(); void removeGeneratorsWithoutLeadingZero(); void getInitialIdeal(BigIdeal& ideal) const; /// Requires that names.getVarCount() equals getVarCount(). void renameVars(const VarNames& names); size_t getVarCount() const; void clear(); void reserve(size_t size); vector& getLastBinomRef(); void newLastTerm(); const VarNames& getNames() const; /// Returns true if any generator does not involve every variable, /// i.e. the vector representing the generator has a zero entry. bool hasZeroEntry() const; /// Returns true if the initial ideal is weakly generic. bool initialIdealIsWeaklyGeneric() const; /// Returns true if the generating set is generic, i.e. no /// generator has a zero entry. /// /// This concept of genericity comes from Scarf's theory of /// maximal lattice-free bodies, and this link is preserved if the /// generating set is a graded reverse-lex toric Grobner basis of a /// primitive vector. bool isGeneric() const; /// Returns the number of pairs of generators a and b such that /// {0,a,a+b} and {0,b,a+b} are both interior point-free bodies. void getDoubleTriangleCount(mpz_class& count) const; /// Returns true if the smallest body containing zero, a and b has /// no generator in its interior. bool isPointFreeBody(const vector& a, const vector& b) const; /// Returns true if the smallest body containing zero, a, b and c /// has no generator in its interior. bool isPointFreeBody(const vector& a, const vector& b, const vector& c) const; /** Returns true if max(0,a,b) is strictly positive in every element. */ bool isInterior(const vector& a, const vector& b) const; /** Returns whether {to,to+from} is an interior edge of Top. */ bool isInteriorEdge(size_t from, size_t to) const; /** Returns wehther {from,to+from} is an interior edge of Top and also {to,to+from} is an edge of Top (not necessarily interior). */ bool isTerminatingEdge(size_t from, size_t to) const; /** Temporary. Returns whether the graph satisfies some conditions that it should if some hypotheses are correct. */ bool validate() const; /// Returns true if any generator, considered as an integer vector, /// is dominated by v. bool isDominating(const vector& v) const; /// Returns true if v is a generator. bool isGenerator(const vector& v) const; void projectVar(size_t var); SatBinomIdeal& operator=(const SatBinomIdeal& ideal); void getMatrix(Matrix& matrix) const; private: vector > _gens; VarNames _names; }; ostream& operator<<(ostream& out, const SatBinomIdeal& ideal); #endif frobby-0.9.5/src/SatBinomRecorder.cpp000066400000000000000000000022621401527164200175110ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "SatBinomRecorder.h" #include "SatBinomIdeal.h" SatBinomRecorder::SatBinomRecorder(SatBinomIdeal& ideal): _ideal(ideal) { } void SatBinomRecorder::consumeRing(const VarNames& names) { _ideal.clearAndSetNames(names); } void SatBinomRecorder::beginConsuming() { } void SatBinomRecorder::consume(const vector& satBinom) { _ideal.insert(satBinom); } void SatBinomRecorder::doneConsuming() { } frobby-0.9.5/src/SatBinomRecorder.h000066400000000000000000000024401401527164200171540ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SAT_BINOM_RECORDER_GUARD #define SAT_BINOM_RECORDER_GUARD #include "SatBinomConsumer.h" #include "VarNames.h" class SatBinomIdeal; /// SatBinomRecorder records all consumed saturated binomials into a /// passed-in ideal. class SatBinomRecorder : public SatBinomConsumer { public: SatBinomRecorder(SatBinomIdeal& ideal); virtual void consumeRing(const VarNames& names); virtual void beginConsuming(); virtual void consume(const vector& term); virtual void doneConsuming(); private: SatBinomIdeal& _ideal; }; #endif frobby-0.9.5/src/Scanner.cpp000066400000000000000000000206671401527164200157110ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Scanner.h" #include "VarNames.h" #include "IOHandler.h" #include "error.h" #include "FrobbyStringStream.h" #include static const size_t BufferSize = 10024; Scanner::Scanner(const string& formatName, FILE* in): _in(in), _lineNumber(1), _char(' '), _tmpString(0), _tmpStringCapacity(16), _formatName(formatName), _buffer(BufferSize), _bufferPos(_buffer.end()) { if (getFormat() == getFormatNameIndicatingToGuessTheInputFormat()) setFormat(autoDetectFormat(*this)); _tmpString = new char[16]; } auto_ptr Scanner::createIOHandler() const { return ::createIOHandler(getFormat()); } void Scanner::expect(const char* str) { ASSERT(str != 0); eatWhite(); const char* it = str; while (*it != '\0') { int character = getChar(); if (*it == character) { ++it; continue; } // Read the rest of what is there to improve error message. // TODO: read at least one char in total even if not alnum. FrobbyStringStream got; if (character == EOF && it == str) got << "no more input"; else { got << '\"' << string(str, it); if (isalnum(character)) got << static_cast(character); while (isalnum(peek())) got << static_cast(getChar()); got << '\"'; } reportErrorUnexpectedToken(str, got); } } void Scanner::expectEOF() { // TODO: get this moved into the null format itself. if (_formatName == "null") return; eatWhite(); if (getChar() != EOF) reportErrorUnexpectedToken("no more input", ""); } void Scanner::errorExpectTwo(char a, char b, int got) { ASSERT(a != got && b != got); FrobbyStringStream err; err << a << " or " << b; reportErrorUnexpectedToken(err, got); } void Scanner::errorExpectOne(char expected, int got) { ASSERT(expected != got); string expectedStr; expectedStr += expected; reportErrorUnexpectedToken(expectedStr, got); } size_t Scanner::readIntegerString() { eatWhite(); ASSERT(_tmpStringCapacity > 1); if (peek() == '-' || peek() == '+') _tmpString[0] = static_cast(getChar()); else _tmpString[0] = '+'; size_t size = 1; while (isdigit(peek())) { _tmpString[size] = static_cast(getChar()); ++size; if (size == _tmpStringCapacity) growTmpString(); } _tmpString[size] = '\0'; if (size == 1) reportErrorUnexpectedToken("an integer", ""); return size; } size_t Scanner::readIntegerStringNoSign() { eatWhite(); if (peek() == '-' || peek() == '+') reportErrorUnexpectedToken("integer without preceding sign", peek()); // todo: remove code duplication with readIntegerString. ASSERT(_tmpStringCapacity > 1); size_t size = 0; while (isdigit(peek())) { _tmpString[size] = static_cast(getChar()); ++size; if (size == _tmpStringCapacity) growTmpString(); } _tmpString[size] = '\0'; if (size == 0) reportErrorUnexpectedToken("an integer", ""); return size; } void Scanner::parseInteger(mpz_class& integer, size_t size) { // This code has a fast path for small integers and a slower path // for longer integers. The largest number representable in 32 bits // has 10 digits in base 10 and 1 char for the sign. If the number // we are reading has less than 10 digits, then we calculate it // directly without consulting GMP, which is faster. if (size < 10) { signed long l = 0; for (size_t i = 1; i < size; ++i) l = 10 * l + (_tmpString[i] - '0'); if (_tmpString[0] == '-') l = -l; integer = l; } else { // For whatever reason mp_set_str does not support a + as the // first character. mpz_set_str(integer.get_mpz_t(), _tmpString + (_tmpString[0] != '-'), 10); } } void Scanner::readIntegerAndNegativeAsZero(mpz_class& integer) { // Fast path for common case of reading a zero. if (peek() == '0') { getChar(); if (!isdigit(peek())) { integer = 0; return; } } size_t size = readIntegerString(); if (_tmpString[0] == '-') integer = 0; else parseInteger(integer, size); } void Scanner::readIntegerAndNegativeAsZero(string& integer) { // Fast path for common case of reading a zero. if (peek() == '0') { getChar(); if (!isdigit(peek())) { integer = '0'; return; } } readIntegerString(); if (_tmpString[0] == '-') integer = '0'; else integer = _tmpString + 1; } void Scanner::readSizeT(size_t& size) { readInteger(_integer); // Deal with different possibilities for how large size_t is. if (sizeof(size_t) == sizeof(unsigned int)) { if (!_integer.fits_uint_p()) { FrobbyStringStream errorMsg; errorMsg << "expected non-negative integer of size at most " << numeric_limits::max() << " but got " << _integer << '.'; reportSyntaxError(*this, errorMsg); } size = (unsigned int)_integer.get_ui(); } else if (sizeof(size_t) == sizeof(unsigned long)) { if (!_integer.fits_ulong_p()) { FrobbyStringStream errorMsg; errorMsg << "expected non-negative integer of size at most " << numeric_limits::max() << " but got " << _integer << '.'; reportSyntaxError(*this, errorMsg); } size = _integer.get_ui(); // returns an unsigned long despite the name. } else { FrobbyStringStream errorMsg; errorMsg << "Frobby does not work on this machine due to an " "unexpected technical issue.\n" "Please contact the developers of Frobby about this.\n" "\n" "Details that will be useful to the developers:\n" " error location: Scanner::readSizeT\n" " sizeof(size_t) = " << sizeof(size_t) << "\n" " sizeof(unsigned int) = " << sizeof(unsigned int) << "\n" " sizeof(unsigned long) = " << sizeof(unsigned long) << "\n"; reportInternalError(errorMsg); } } void Scanner::growTmpString() { ASSERT(_tmpStringCapacity > 0); size_t newCapacity = _tmpStringCapacity * 2; char* str = new char[newCapacity]; for (size_t i = 0; i < _tmpStringCapacity; ++i) str[i] = _tmpString[i]; delete[] _tmpString; _tmpString = str; _tmpStringCapacity = newCapacity; } const char* Scanner::readIdentifier() { eatWhite(); if (!isalpha(peek())) errorReadIdentifier(); ASSERT(_tmpStringCapacity > 0); size_t size = 0; while (isalnum(peek()) || peek() == '_') { _tmpString[size] = static_cast(getChar()); ++size; if (size == _tmpStringCapacity) growTmpString(); } _tmpString[size] = '\0'; return _tmpString; } void Scanner::errorReadIdentifier() { reportErrorUnexpectedToken("an identifier", ""); } void Scanner::errorReadVariable(const char* name) { FrobbyStringStream errorMsg; errorMsg << "Unknown variable \"" << name << "\". Maybe you forgot a *."; reportSyntaxError(*this, errorMsg); } void Scanner::reportErrorUnexpectedToken (const string& expected, int got) { FrobbyStringStream gotDescription; if (got == EOF) gotDescription << "no more input"; else gotDescription << '\"' << static_cast(got)<< '\"'; reportErrorUnexpectedToken(expected, gotDescription); } void Scanner::reportErrorUnexpectedToken (const string& expected, const string& got) { FrobbyStringStream errorMsg; errorMsg << "Expected " << expected; if (got != "") errorMsg << ", but got " << got; errorMsg << '.'; reportSyntaxError(*this, errorMsg); } int Scanner::readBuffer() { if (_buffer.size() < _buffer.capacity() && (feof(_in) || ferror(_in))) return EOF; _buffer.resize(_buffer.capacity()); size_t read = fread(&_buffer[0], 1, _buffer.capacity(), _in); _buffer.resize(read); _bufferPos = _buffer.begin(); if (read == 0) return EOF; char c = *_bufferPos; ++_bufferPos; return c; } frobby-0.9.5/src/Scanner.h000066400000000000000000000176441401527164200153570ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SCANNER_GUARD #define SCANNER_GUARD #include "VarNames.h" #include class IOHandler; /** This class offers an input interface which is more convenient and for some purposes more efficient than dealing with a FILE* directly. It keeps track of the current line number to report better error messages. Only one Scanner should be reading from a given FILE*, since otherwise the line numbers will be inaccurate. All input methods whose documentation does not specifically say otherwise skip whitespace as defined by the standard isspace() method. There are four concepts for consuming input through a Scanner: Read X: Require an X to be in the input, and return what is read. Expect X: Require the exact value X to be in the input and skip past it. Match X: Return true if the exact value X is in the input, and in that case skip past it. Otherwise return false and do nothing else. Peek X: Return true if X is the next thing int he input. Do not skip past anything. May or may not skip whitespace depending on what X is. If a requirement is not met, Scanner reports a syntax error using the functions in the error.h header. */ class Scanner { public: /** Construct a Scanner object. @param formatName The format being read. Is used for e.g. error messages. @param in The file to read input from. */ Scanner(const string& formatName, FILE* in); ~Scanner() {delete[] _tmpString;} const string& getFormat() const {return _formatName;} void setFormat(const string& format) {_formatName = format;} auto_ptr createIOHandler() const; /** Return true if the next character is c, and in that case skip past it. */ bool match(char c); /** Return true if no more input. */ bool matchEOF(); /** Require the next character to be equal to expected. This character is skipped past. */ void expect(char expected); /** Require the next character to be equal to a or b. This character is skipped past. */ void expect(char a, char b); /** Require the following characters to be equal to str. These characters are skipped past. */ void expect(const char* str); /** Require the following characters to be equal to str. These characters are skipped past. */ void expect(const string& str) {expect(str.c_str());} /** Require that there is no more input. */ void expectEOF(); /** Read an arbitrary-precision integer. */ void expectIntegerNoSign(); /** Read an arbitrary-precision integer. */ void readInteger(mpz_class& integer); /** Read an arbitrary-precision integer. */ void readIntegerNoSign(string& str); /** Read an arbitrary-precision integer. */ void readIntegerNoSign(mpz_class& str); /** Read an integer and set it to zero if it is negative. This is more efficient because the sign can be detected before the integer is read. */ void readIntegerAndNegativeAsZero(mpz_class& integer); /** Read an integer and set it to zero if it is negative. This is more efficient because the sign can be detected before the integer is read. */ void readIntegerAndNegativeAsZero(std::string& integer); /** Reads a size_t, where the representable range of that type determines when the number is too big. The number is required to be non-negative. */ void readSizeT(size_t& size); /** The returned string is only valid until the next method on this object gets called. */ const char* readIdentifier(); /** Reads an identifier into str. str must be empty. */ void readIdentifier(string& str); /** Reads an identifier and returns the index of that identifier as the index of a variable in names. Throws an exception if there is no identifier or the identifier is not a variable in names. */ size_t readVariable(const VarNames& names); /** Skips whitespace and returns true if the next token is an identifier. */ bool peekIdentifier(); /** Returns true if the next character is whitespace. Does not, obviously, skip whitespace. */ bool peekWhite() {return isspace(peek());} /** Skips whitespace and returns true if the next character is equal to the parameter(s). */ bool peek(char character); /** Returns the number of newlines seen. Does not skip whitespace. */ unsigned int getLineNumber() const {return _lineNumber;} /** Returns the next character or EOF. Does not skip whitespace. */ int peek() {return _char;} /** Reads past any whitespace, where whitespace is defined by the standard function isspace(). */ inline void eatWhite(); private: /** Returns the size of the string. */ size_t readIntegerString(); /** Returns the size of the string. */ size_t readIntegerStringNoSign(); void parseInteger(mpz_class& integer, size_t size); void errorExpectTwo(char a, char b, int got); void errorExpectOne(char expected, int got); void errorReadVariable(const char* name); void errorReadIdentifier(); void reportErrorUnexpectedToken(const string& expected, int got); void reportErrorUnexpectedToken(const string& expected, const string& got); inline int getChar(); void growTmpString(); int readBuffer(); mpz_class _integer; FILE* _in; unsigned long _lineNumber; int _char; // next character on stream char* _tmpString; size_t _tmpStringCapacity; string _formatName; vector _buffer; vector::iterator _bufferPos; }; inline void Scanner::readIdentifier(string& str) { eatWhite(); if (!isalpha(peek())) errorReadIdentifier(); str.clear(); do { str += static_cast(getChar()); } while (isalnum(peek()) || peek() == '_'); } inline size_t Scanner::readVariable(const VarNames& names) { const char* name = readIdentifier(); size_t var = names.getIndex(name); if (var == VarNames::invalidIndex) errorReadVariable(name); return var; } inline bool Scanner::matchEOF() { eatWhite(); return peek() == EOF; } inline bool Scanner::match(char c) { eatWhite(); if (c == peek()) { getChar(); return true; } else return false; } inline void Scanner::expect(char a, char b) { eatWhite(); int got = getChar(); if (got != a && got != b) errorExpectTwo(a, b, got); } inline void Scanner::expect(char expected) { eatWhite(); int got = getChar(); if (got != expected) errorExpectOne(expected, got); } inline void Scanner::readInteger(mpz_class& integer) { size_t size = readIntegerString(); parseInteger(integer, size); } inline void Scanner::expectIntegerNoSign() { readIntegerStringNoSign(); } inline void Scanner::readIntegerNoSign(mpz_class& integer) { readIntegerStringNoSign(); integer = _tmpString; } inline void Scanner::readIntegerNoSign(string& integer) { readIntegerStringNoSign(); integer = _tmpString; } inline bool Scanner::peekIdentifier() { eatWhite(); return isalpha(peek()); } inline bool Scanner::peek(char character) { eatWhite(); return peek() == character; } inline void Scanner::eatWhite() { while (isspace(peek())) getChar(); } inline int Scanner::getChar() { if (_char == '\n') ++_lineNumber; int oldChar = _char; if (_bufferPos == _buffer.end()) _char = readBuffer(); else { _char = *_bufferPos; ++_bufferPos; } return oldChar; } #endif frobby-0.9.5/src/ScarfFacade.cpp000066400000000000000000000046641401527164200164410ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "ScarfFacade.h" #include "DataType.h" #include "ScarfHilbertAlgorithm.h" #include "TranslatingCoefTermConsumer.h" #include "TotalDegreeCoefTermConsumer.h" #include "IdealOrderer.h" ScarfFacade::ScarfFacade(const ScarfParams& params): Facade(params.getPrintActions()), _params(params) { // Create predicate before reading the input to display errors on // options before potentially spending a long time reading the // input. _enumerationOrder = createIdealOrderer(params.getEnumerationOrder()); _deformationOrder = createIdealOrderer(params.getDeformationOrder()); _helper.readIdealAndSetPolyOutput(params); } ScarfFacade::~ScarfFacade() { } void ScarfFacade::computeMultigradedHilbertSeries() { beginAction("Computing multigraded Hilbert-Poincare series."); ScarfHilbertAlgorithm alg(_helper.getTranslator(), _params, _enumerationOrder, _deformationOrder); alg.runGeneric(_helper.getIdeal(), _helper.getPolyConsumer(), false, _params.getProduceCanonicalOutput()); endAction(); } void ScarfFacade::computeUnivariateHilbertSeries() { beginAction("Computing univariate Hilbert-Poincare series."); ScarfHilbertAlgorithm alg(_helper.getTranslator(), _params, _enumerationOrder, _deformationOrder); alg.runGeneric(_helper.getIdeal(), _helper.getPolyConsumer(), true, _params.getProduceCanonicalOutput()); endAction(); } frobby-0.9.5/src/ScarfFacade.h000066400000000000000000000031231401527164200160730ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SCARF_FACADE_GUARD #define SCARF_FACADE_GUARD #include "Facade.h" #include "CommonParamsHelper.h" #include "ScarfParams.h" class IdealOrderer; class ScarfFacade : public Facade { public: ScarfFacade(const ScarfParams& params); ~ScarfFacade(); /** Computes the numerator of the multigraded Hilbert-Poincare series with no cancellation of common terms in numerator and denominator. */ void computeMultigradedHilbertSeries(); /** Computes the numerator of the univariate Hilbert-Poincare series with no cancellation of common terms in numerator and denominator. */ void computeUnivariateHilbertSeries(); private: ScarfParams _params; CommonParamsHelper _helper; auto_ptr _enumerationOrder; auto_ptr _deformationOrder; }; #endif frobby-0.9.5/src/ScarfHilbertAlgorithm.cpp000066400000000000000000000212461401527164200205310ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "ScarfHilbertAlgorithm.h" #include "CoefTermConsumer.h" #include "TermTranslator.h" #include "Deformer.h" #include "CoefBigTermConsumer.h" #include "HashPolynomial.h" #include "UniHashPolynomial.h" #include "ScarfParams.h" #include "IdealTree.h" #include "IdealOrderer.h" class UndeformConsumer : public CoefTermConsumer { public: UndeformConsumer(Ideal& toDeform, const TermTranslator& translator, CoefBigTermConsumer& consumer, const IdealOrderer& order, bool univar, bool canonical, bool doStrongDeformation): _univar(univar), _tmp(toDeform.getVarCount()), _deformer(toDeform, order, doStrongDeformation), _translator(translator), _canonical(canonical), _consumer(consumer), _poly(toDeform.getVarCount()) { } virtual void consumeRing(const VarNames& names) { ASSERT(names == _translator.getNames()); } virtual void beginConsuming() { } virtual void consume(const mpz_class& coef, const Term& term) { ASSERT(term.getVarCount() == _tmp.getVarCount()); _tmp = term; _deformer.undeform(_tmp); if (_univar) { if (_tmp.getVarCount() == 0) _tdeg = 0; else _tdeg = _translator.getExponent(0, _tmp); for (size_t var = 1; var < _tmp.getVarCount(); ++var) _tdeg += _translator.getExponent(var, _tmp); _uniPoly.add(coef, _tdeg); } else _poly.add(coef, _tmp); } virtual void doneConsuming() { if (_univar) _uniPoly.feedTo(_consumer, _canonical); else _poly.feedTo(_translator, _consumer, _canonical); } private: bool _univar; Term _tmp; Deformer _deformer; const TermTranslator& _translator; bool _canonical; CoefBigTermConsumer& _consumer; HashPolynomial _poly; UniHashPolynomial _uniPoly; mpz_class _tdeg; }; ScarfHilbertAlgorithm::ScarfHilbertAlgorithm (const TermTranslator& translator, const ScarfParams& params, auto_ptr enumerationOrder, auto_ptr deformationOrder): _translator(translator), _params(params), _enumerationOrder(enumerationOrder), _deformationOrder(deformationOrder), _totalStates(0), _totalFaces(0) { ASSERT(_enumerationOrder.get() != 0); ASSERT(_deformationOrder.get() != 0); } ScarfHilbertAlgorithm::~ScarfHilbertAlgorithm() { // Destructor defined so auto_ptr in the header does not need // definition of T. } void ScarfHilbertAlgorithm::runGeneric(const Ideal& ideal, CoefBigTermConsumer& consumer, bool univariate, bool canonical) { Ideal deformed(ideal); UndeformConsumer undeformer(deformed, _translator, consumer, *_deformationOrder, univariate, canonical, _params.getDeformToStronglyGeneric()); undeformer.consumeRing(_translator.getNames()); undeformer.beginConsuming(); ASSERT(_enumerationOrder.get() != 0); _enumerationOrder->order(deformed); enumerateScarfComplex(deformed, undeformer); undeformer.doneConsuming(); if (_params.getPrintStatistics()) { fputs("*** Statistics ***\n", stderr); fprintf(stderr, "Total states considered: %u\n", static_cast(_totalStates)); fprintf(stderr, "Total faces accepted: %u\n", static_cast(_totalFaces)); } } void ScarfHilbertAlgorithm::initializeEnumeration(const Ideal& ideal, size_t& activeStateCount) { ASSERT(ideal.getVarCount() == _translator.getVarCount()); if (_params.getPrintDebug()) { fputs("Enumerating faces of Scarf complex of:\n", stderr); ideal.print(stderr); } // Set up _states with enough entries. The maximal number of active // entries at any time is one for each generator plus one for the // empty face. We need one more than this because we take a // reference to the next state even when there is no next state. size_t statesNeeded = ideal.getGeneratorCount() + 2; if (_states.size() < statesNeeded) { _states.resize(statesNeeded); for (size_t i = 0; i < _states.size(); ++i) { _states[i].term.reset(ideal.getVarCount()); _states[i].face.reserve(ideal.getVarCount()); } } // Set up the initial state activeStateCount = 0; if (ideal.containsIdentity()) return; ++activeStateCount; _states[0].plus = true; _states[0].pos = ideal.begin(); ASSERT(_states[0].term.isIdentity()); } bool ScarfHilbertAlgorithm::doEnumerationStep(const Ideal& ideal, const IdealTree& tree, State& state, State& nextState) { if (_params.getPrintDebug()) { fputs("DEBUG:*Looking at element ", stderr); if (state.pos == ideal.end()) fputs("end", stderr); else Term::print(stderr, *state.pos, ideal.getVarCount()); fputs(" with lcm(face)=", stderr); state.term.print(stderr); fputs(" and face=", stderr); if (state.face.empty()) fputs("empty", stderr); for (size_t i = 0; i < state.face.size(); ++i) { fputs("\nDEBUG: ", stderr); Term::print(stderr, state.face[i], ideal.getVarCount()); } fputc('\n', stderr); fflush(stderr); } Exponent* termToAdd; while (true) { ++_totalStates; if (state.face.size() == ideal.getVarCount() || state.pos == ideal.end()) return false; // A base case termToAdd = *state.pos; // This accounts for the possibility of not adding termToAdd to the // face. We do that in-place on state. ++state.pos; // The other possibility is to add termToAdd to the face. We record // this only if that is still a face of the complex, i.e. if no // generator strictly divides the lcm of the set. nextState.term.lcm(state.term, termToAdd); // The elements of face are more likely to become strict divisors // than a random generator, so check those first. for (size_t i = 0; i < state.face.size(); ++i) { if (Term::strictlyDivides(state.face[i], nextState.term, ideal.getVarCount())) { goto doNext; } } if (tree.strictlyContains(nextState.term)) goto doNext; ASSERT(!ideal.strictlyContains(nextState.term)); break; doNext:; ASSERT(ideal.strictlyContains(nextState.term)); } nextState.plus = !state.plus; nextState.pos = state.pos; nextState.face = state.face; nextState.face.push_back(termToAdd); return true; } void ScarfHilbertAlgorithm::doEnumerationBaseCase(const State& state, CoefTermConsumer& consumer) { if (_params.getPrintDebug()) { fputs("DEBUG: Found base case with lcm(face)=", stderr); state.term.print(stderr); fputc('\n', stderr); fflush(stderr); } consumer.consume(state.plus ? 1 : -1, state.term); // Every face ends up as a base case exactly once, so this is a // convenient place to count them. ++_totalFaces; } void ScarfHilbertAlgorithm::enumerateScarfComplex(const Ideal& ideal, CoefTermConsumer& consumer) { ASSERT(Ideal(ideal).isWeaklyGeneric()); IdealTree tree(ideal); size_t activeStateCount = 0; initializeEnumeration(ideal, activeStateCount); while (activeStateCount > 0) { ASSERT(activeStateCount < _states.size()); State& currentState = _states[activeStateCount - 1]; State& nextState = _states[activeStateCount]; if (doEnumerationStep(ideal, tree, currentState, nextState)) ++activeStateCount; else { doEnumerationBaseCase(currentState, consumer); --activeStateCount; } } } frobby-0.9.5/src/ScarfHilbertAlgorithm.h000066400000000000000000000045531401527164200202000ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SCARF_HILBERT_ALGORITHM_GUARD #define SCARF_HILBERT_ALGORITHM_GUARD class Consumer; class CoefTermConsumer; class TermTranslator; class CoefBigTermConsumer; class ScarfParams; class IdealOrderer; class IdealTree; #include "Term.h" #include "Ideal.h" class ScarfHilbertAlgorithm { public: ScarfHilbertAlgorithm(const TermTranslator& translator, const ScarfParams& params, auto_ptr enumerationOrder, auto_ptr deformationOrder); ~ScarfHilbertAlgorithm(); void runGeneric(const Ideal& ideal, CoefBigTermConsumer& consumer, bool univariate, bool canonical); private: struct State { Term term; Ideal::const_iterator pos; vector face; bool plus; }; vector _states; void enumerateScarfComplex(const Ideal& ideal, CoefTermConsumer& consumer); void initializeEnumeration(const Ideal& ideal, size_t& activeStateCount); bool doEnumerationStep(const Ideal& ideal, const IdealTree& tree, State& state, State& nextState); void doEnumerationBaseCase(const State& state, CoefTermConsumer& consumer); const TermTranslator& _translator; const ScarfParams& _params; const auto_ptr _enumerationOrder; const auto_ptr _deformationOrder; size_t _totalStates; size_t _totalFaces; }; #endif frobby-0.9.5/src/ScarfParams.cpp000066400000000000000000000051431401527164200165120ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "ScarfParams.h" #include "CliParams.h" #include "StringParameter.h" #include "BoolParameter.h" namespace { static const char* DeformToStrongName = "deformStrong"; static const bool DeformToStrongDefault = false; static const char* EnumerationOrderName = "enum"; static const char* EnumerationOrderDefault = "revlex"; static const char* DeformationOrderName = "deformationOrder"; static const char* DeformationOrderDefault = "tdeg_lex"; } ScarfParams::ScarfParams(CliParams& cli): _deformStrong(DeformToStrongDefault), _enumerationOrder(EnumerationOrderDefault), _deformationOrder(DeformationOrderDefault) { extractCliValues(*this, cli); } void addScarfParams(CliParams& params) { ASSERT(!params.hasParam(DeformToStrongName)); params.add (auto_ptr (new BoolParameter (DeformToStrongName, "Deform to a strongly generic ideal if true. " "Otherwise deform to a weakly generic ideal.", DeformToStrongDefault))); ASSERT(!params.hasParam(EnumerationOrderName)); params.add (auto_ptr (new StringParameter (EnumerationOrderName, "The enumeration order used for the deformation algorithm.", EnumerationOrderDefault))); ASSERT(!params.hasParam(DeformationOrderName)); params.add (auto_ptr (new StringParameter (DeformationOrderName, "The deformation order used for the deformation algorithm.", DeformationOrderDefault))); } void extractCliValues(ScarfParams& scarf, const CliParams& cli) { extractCliValues(static_cast(scarf), cli); scarf.setDeformToStronglyGeneric(getBool(cli, DeformToStrongName)); scarf.setEnumerationOrder(getString(cli, EnumerationOrderName)); scarf.setDeformationOrder(getString(cli, DeformationOrderName)); } frobby-0.9.5/src/ScarfParams.h000066400000000000000000000035041401527164200161560ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SCARF_PARAMS_GUARD #define SCARF_PARAMS_GUARD #include "CommonParams.h" #include class CliParams; class ScarfParams : public CommonParams { public: ScarfParams(CliParams& cli); /** Returns true if deforming to a strongly generic ideal. Returns false otherwise. */ bool getDeformToStronglyGeneric() const {return _deformStrong;} void setDeformToStronglyGeneric(bool value) {_deformStrong = value;} /** Returns the name of the enumeration ordering. */ const string& getEnumerationOrder() const {return _enumerationOrder;} void setEnumerationOrder(const string& name) {_enumerationOrder = name;} /** Returns the name of the deformation ordering. */ const string& getDeformationOrder() const {return _deformationOrder;} void setDeformationOrder(const string& name) {_deformationOrder = name;} private: bool _deformStrong; string _enumerationOrder; string _deformationOrder; }; void addScarfParams(CliParams& params); void extractCliValues(ScarfParams& scarf, const CliParams& cli); #endif frobby-0.9.5/src/SingularIOHandler.cpp000066400000000000000000000171361401527164200176270ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "SingularIOHandler.h" #include "Scanner.h" #include "VarNames.h" #include "BigTermConsumer.h" #include "FrobbyStringStream.h" #include "DataType.h" #include "CoefBigTermConsumer.h" #include "IdealWriter.h" #include "PolyWriter.h" #include "error.h" #include "InputConsumer.h" #include namespace IO { namespace Singular { void writeRing(const VarNames& names, FILE* out); } namespace S = Singular; class SingularIdealWriter : public IdealWriter { public: SingularIdealWriter(FILE* out): IdealWriter(out) { } private: virtual void doWriteHeader(bool first) { S::writeRing(getNames(), getFile()); fputs("ideal I =", getFile()); } virtual void doWriteTerm(const Term& term, const TermTranslator& translator, bool first) { fputs(first ? "\n " : ",\n ", getFile()); IO::writeTermProduct(term, translator, getFile()); } virtual void doWriteTerm(const vector& term, bool first) { fputs(first ? "\n " : ",\n ", getFile()); writeTermProduct(term, getNames(), getFile()); } virtual void doWriteFooter(bool wasZeroIdeal) { if (wasZeroIdeal) fputs("\n 0", getFile()); fputs(";\n", getFile()); } virtual void doWriteEmptyList() { S::writeRing(getNames(), getFile()); } }; class SingularPolyWriter : public PolyWriter { public: SingularPolyWriter(FILE* out): PolyWriter(out) { } virtual void doWriteHeader() { S::writeRing(getNames(), getFile()); fputs("poly p =", getFile()); } virtual void doWriteTerm(const mpz_class& coef, const Term& term, const TermTranslator& translator, bool firstGenerator) { fputs("\n ", getFile()); writeCoefTermProduct(coef, term, translator, firstGenerator, getFile()); } virtual void doWriteTerm(const mpz_class& coef, const vector& term, bool firstGenerator) { fputs("\n ", getFile()); writeCoefTermProduct(coef, term, getNames(), firstGenerator, getFile()); } virtual void doWriteFooter(bool wasZero) { if (wasZero) fputs("\n 0", getFile()); fputs(";\n", getFile()); } }; SingularIOHandler::SingularIOHandler(): IOHandlerCommon(staticGetName(), "Format understandable by the program Singular.") { registerInput(DataType::getMonomialIdealType()); registerInput(DataType::getMonomialIdealListType()); registerInput(DataType::getPolynomialType()); registerOutput(DataType::getMonomialIdealType()); registerOutput(DataType::getPolynomialType()); } const char* SingularIOHandler::staticGetName() { return "singular"; } BigTermConsumer* SingularIOHandler::doCreateIdealWriter(FILE* out) { return new SingularIdealWriter(out); } CoefBigTermConsumer* SingularIOHandler:: doCreatePolynomialWriter(FILE* out) { return new SingularPolyWriter(out); } void SingularIOHandler::doWriteTerm(const vector& term, const VarNames& names, FILE* out) { writeTermProduct(term, names, out); } void SingularIOHandler::doReadTerm(Scanner& in, const VarNames& names, vector& term) { readTermProduct(in, names, term); } void SingularIOHandler::doReadTerm(Scanner& in, InputConsumer& consumer) { consumer.consumeTermProductNotation(in); } void SingularIOHandler::doReadRing(Scanner& in, VarNames& names) { names.clear(); in.expect("ring"); in.expect('R'); in.expect('='); in.expect('0'); in.expect(','); in.expect('('); do { names.addVarSyntaxCheckUnique(in, in.readIdentifier()); } while (in.match(',')); in.expect(')'); in.expect(','); in.expect("lp"); in.expect(';'); in.expect("int"); in.expect("noVars"); in.expect("="); if (in.match('1')) { if (names.getVarCount() != 1 || names.getName(0) != string("dummy")) { FrobbyStringStream errorMsg; errorMsg << "A singular ring with no actual variables must have a single " "place-holder variable named \"dummy\", and in this case "; if (names.getVarCount() != 1) errorMsg << "there are " << names.getVarCount() << " place-holder variables."; else errorMsg << "it has the name \"" << names.getName(0) << "\"."; reportSyntaxError(in, errorMsg); } names.clear(); } else if (!in.match('0')) { // TODO: Replace following line with: in.expect('0', '1'); reportSyntaxError(in, "noVars must be either 0 or 1."); } in.expect(';'); } bool SingularIOHandler::doPeekRing(Scanner& in) { return in.peek('r') || in.peek('R'); } void SingularIOHandler::doReadBareIdeal(Scanner& in, const VarNames& names, BigTermConsumer& consumer) { consumer.beginConsuming(names); vector term(names.getVarCount()); in.expect("ideal"); in.expect('I'); in.expect('='); if (!in.match('0')) { do { readTerm(in, names, term); consumer.consume(term); } while (in.match(',')); } in.expect(';'); consumer.doneConsuming(); } void SingularIOHandler::doReadBareIdeal (Scanner& in, InputConsumer& consumer) { consumer.beginIdeal(); in.expect("ideal"); in.expect('I'); in.expect('='); if (!in.match('0')) { do { consumer.consumeTermProductNotation(in); } while (in.match(',')); } in.expect(';'); consumer.endIdeal(); } void SingularIOHandler::doReadBarePolynomial(Scanner& in, const VarNames& names, CoefBigTermConsumer& consumer) { consumer.consumeRing(names); vector term(names.getVarCount()); mpz_class coef; in.expect("poly"); in.expect('p'); in.expect('='); consumer.beginConsuming(); bool first = true; do { readCoefTerm(coef, term, names, first, in); consumer.consume(coef, term); first = false; } while (!in.match(';')); consumer.doneConsuming(); } void S::writeRing(const VarNames& names, FILE* out) { if (names.getVarCount() == 0) fputs("ring R = 0, (dummy), lp;\nint noVars = 1;\n", out); else { fputs("ring R = 0, (", out); const char* pre = ""; for (unsigned int i = 0; i < names.getVarCount(); ++i) { fputs(pre, out); fputs(names.getName(i).c_str(), out); pre = ", "; } fputs("), lp;\nint noVars = 0;\n", out); } } } frobby-0.9.5/src/SingularIOHandler.h000066400000000000000000000041371401527164200172710ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SINGULAR_IO_HANDLER_GUARD #define SINGULAR_IO_HANDLER_GUARD #include "IOHandlerCommon.h" #include class VarNames; class Scanner; class BigTermConsumer; class CoefBigTermConsumer; namespace IO { class SingularIOHandler : public IOHandlerCommon { public: SingularIOHandler(); static const char* staticGetName(); private: virtual BigTermConsumer* doCreateIdealWriter(FILE* out); virtual CoefBigTermConsumer* doCreatePolynomialWriter(FILE* out); virtual void doWriteTerm(const vector& term, const VarNames& names, FILE* out); virtual void doReadTerm(Scanner& in, const VarNames& names, vector& term); virtual void doReadTerm(Scanner& in, InputConsumer& term); virtual void doReadRing(Scanner& in, VarNames& names); virtual bool doPeekRing(Scanner& in); virtual void doReadBareIdeal(Scanner& in, const VarNames& names, BigTermConsumer& consumer); virtual void doReadBareIdeal(Scanner& in, InputConsumer& consumer); virtual void doReadBarePolynomial(Scanner& in, const VarNames& names, CoefBigTermConsumer& consumer); }; } #endif frobby-0.9.5/src/SizeMaxIndepSetAlg.cpp000066400000000000000000000144651401527164200177570ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "SizeMaxIndepSetAlg.h" #include "Ideal.h" #include "Term.h" void SizeMaxIndepSetAlg::run(Ideal& ideal) { ASSERT(ideal.isSquareFree()); ASSERT(ideal.isMinimallyGenerated()); if (ideal.getGeneratorCount() == 1 && // for efficiency ideal.containsIdentity()) { _noIndependentSets = true; return; } else _noIndependentSets = false; // Improves efficiency by putting related edges together. ideal.sortReverseLex(); _varCount = ideal.getVarCount(); // OK since we now know that ideal does have independent sets. _minExcluded = _varCount; // Allocate this now so we don't have to ensure this at every step // in the algorithm. _undo.resize(_varCount + 1); // Encode the hypergraph of the ideal into _edges. for (size_t term = 0; term < ideal.getGeneratorCount(); ++term) { _edges.push_back(Term::getSizeOfSupport(ideal[term], _varCount)); for (size_t var = 0; var < _varCount; ++var) { if (ideal[term][var] != 0) { ASSERT(ideal[term][var] == 1); _edges.push_back(var); } } } _endPos = _edges.size(); // Make state _state.clear(); _state.resize(_varCount); // Run the algorithm. recurse(0, 0); } mpz_class SizeMaxIndepSetAlg::getMaxIndepSetSize() { // We can't just let _minExcluded itself be _varCount + 1, as that // may cause an overflow due to non-infinite precision of size_t. if (_noIndependentSets) return -1; else { ASSERT(_varCount >= _minExcluded); return _varCount - _minExcluded; } } bool SizeMaxIndepSetAlg::isIndependentIncludingMaybe(size_t pos) { while (pos != _endPos) { size_t nextPos = pos + _edges[pos] + 1; while (true) { ++pos; if (pos == nextPos) return false; if (_state[_edges[pos]] == IsNotInSet) break; } pos = nextPos; } return true; } inline bool SizeMaxIndepSetAlg::couldBeDependence(size_t pos, size_t nextPos, size_t& maybeCount) { maybeCount = 0; for (size_t p = pos + 1; p != nextPos; ++p) { VarState varState = _state[_edges[p]]; if (varState == IsNotInSet) { // In this case the term cannot make the set dependent. return false; } else if (varState == IsMaybeInSet) ++maybeCount; } return true; } void SizeMaxIndepSetAlg::recurse(size_t pos, size_t excluded) { ASSERT(_undo[excluded].empty()); ASSERT(pos <= _endPos); ASSERT(excluded <= _varCount); // Branch-and-bound criterion. if (excluded >= _minExcluded) return; // An optimization made possible by branch-and-bound. If we are only // 1 node from being excluded by the branch-and-bound criterion // above, then every IsMaybeInSet must be a InSet if we are to make // an improvement. So there is no need for further backtracking - it // only matters if the set we are looking at now is independent // where maybe's are treated as yes. if (excluded + 1 == _minExcluded) { if (isIndependentIncludingMaybe(pos)) _minExcluded = excluded; return; } // Run through the edges only one becomes undecided (and then // consider cases) or we know that the set is independent according // to all edges. while (true) { // The set is independent according to all edges. if (pos == _endPos) { // The set has not been eliminated by brand-and-bound, so there // must be an improvement. ASSERT(excluded < _minExcluded); _minExcluded = excluded; break; } // The starting point of the encoding of the next term. size_t nextPos = pos + _edges[pos] + 1; // Set to the number of maybe's in the support of the term at pos. size_t maybeCount; if (!couldBeDependence(pos, nextPos, maybeCount)) { // This edge cannot make the set dependent, so move on to the // next one. pos = nextPos; continue; } if (maybeCount == 0) { // This edge definitely makes the set dependent, so stop looking // at this further. break; } // Now we consider the two cases for each undecided variable. vector& undo = _undo[excluded]; // for convenience for (size_t p = pos + 1; p != nextPos; ++p) { size_t var = _edges[p]; VarState& varState = _state[var]; if (varState != IsMaybeInSet) continue; // The case of var definitely not in the set. varState = IsNotInSet; recurse(nextPos, excluded + 1); // recurse may change temporarily change _state, but it restores // it to the way it was before it returns, so consider it as // though this call did not change _state. This is done because // this way is more efficient than copying since often // maybeCount is much less than _varCount. // We have considered the other case, so now let var definitely // be in the set, moving on to the next undecided variable, if // any. if (maybeCount == 1) { // There are no more undecided vars, so restore _state to the // way it was when we were called and then return to the // caller. varState = IsMaybeInSet; while (!undo.empty()) { _state[undo.back()] = IsMaybeInSet; undo.pop_back(); } // On gcc 3.4.4 on Cygwin (at least), putting break here // instead of return is on the order of 15% faster. So that is // why it says break, and then break again below, even though // a return would be more natural. break; } varState = IsInSet; --maybeCount; // Store information needed to restore _state to the way it was // before. undo.push_back(var); } break; } } frobby-0.9.5/src/SizeMaxIndepSetAlg.h000066400000000000000000000134001401527164200174100ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SIZE_MAX_INDEP_SET_ALG #define SIZE_MAX_INDEP_SET_ALG #include "Ideal.h" /** Encapsulates an algorithm for computing size-maximal independent sets of a hypergraph. Currently the only functionality is to compute the size of such a set. This amounts to finding the dimension of a monomial ideal, which can be done by taking the radical and then using this algorithm. The algorithm is a branch-and-bound algorithm lifted from Macaulay 2, though the implementation here is much faster as of July 2009. I don't know why it is so much faster, since it is nearly equivalent to what Macalay 2 does. The state of the algortihm is a partially-decided set of nodes of the hypergraph, where each node can be definitely in the set, definitely not in the set or undecided. In the beginning every variable is undecided. The algorithm then scans through the edges. For each edge, it may be that it definitely does not make the current set dependent. If so, we skip past the edge. It may also definitely make the current set dependent. If so, we discard the current set. If it is undecided whether the edge makes the set dependent, we choose some undecided node that makes this happen, and recurse on the possibility where it is not in the set (and so makes the set not dependent according to this edge). When we are done, we then consider the case where the node is definitely in the set, restarting the case-distinctions above. The bound used is simply the number of definitely excluded nodes. If this is more than or equal to the least number of excluded nodes seen so far, then there is no reason to consider such a set further, since it can lead to no improvement. Note that in the base case, not every independent set considered is maximal according to inclusion, but since we only consider the size-maximal ones, the ones we care about are maximal with respect to inclusion. */ class SizeMaxIndepSetAlg { public: /** Run the algorithm on ideal. Should work but has not been tested when called more than once on the same object. May rearrange the generators of ideal. ideal must be square free and minimally generated. Thus ideal is the edge ideal of some hypergraph, and it is this hypergraph that the algorithm runs on. */ void run(Ideal& ideal); /** Returns the largest size over all independent sets of the hypergraph passed to \ref run. Returns varCount + 1 if the hypergraph has no independent sets, which is to say that ideal is generated by the identity. The returned value is undefined if run has not been called first. */ mpz_class getMaxIndepSetSize(); private: /** Is used for encoding the state of a partially-decided set of nodes/variables in the backtracking algorithm. */ enum VarState { IsMaybeInSet = 0, IsNotInSet = 1, IsInSet = 2 }; /** Returns true if \ref _state is an independent set according to every term in _edges from pos and forward. */ bool isIndependentIncludingMaybe(size_t pos); /** Returns true if the term encoded in _edges between pos and nextPos makes or might make the set in _state dependent. If so, maybeCount is set to the number of IsMaybeInSet from _state on the support of that term. */ bool couldBeDependence(size_t pos, size_t nextPos, size_t& maybeCount); /** The recursive method that implements the algortihm. See the description for this class for a description of the algortihm. Pos is the current term, while excluded is the number of definitely excluded elements, and also an index into _undo, which works since it increases by one at each recursive sub-call. */ void recurse(size_t pos, size_t excluded); /** The number of variables in the ideal passed to \ref run. I.e. the number of nodes in the hypergraph. */ size_t _varCount; /** The minimal number of excluded elements in any independent set found so far. */ size_t _minExcluded; /** The current state of the backtracking algorithm. Recurse changes this as it runs, and then restores the previous value using information stored in \ref _undo. */ vector _state; /** Stores information on how to restore the state of _state after having done backtracking on one possibility. */ vector > _undo; /** Is true if there are no independent sets for the argument to \ref run. */ bool _noIndependentSets; /** Sparse encoding of the parameter to \ref run. The encoding is that the first entry is the size \f$n\f$ of the support of a term/edge, and the next \f$n\f$ entries are the variables/nodes that are included in that term. Then the next term follows, encoded in the same way. It is efficient to store all of this in one place to increase locality of reference for the cache. */ vector _edges; /** The size of _edges. Stored like this for efficiency. */ size_t _endPos; }; #endif frobby-0.9.5/src/Slice.cpp000066400000000000000000000201111401527164200153370ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Slice.h" #include "Projection.h" #include "TaskEngine.h" #include "SliceStrategy.h" // The lcm is technically correct, but _lcmUpdated defaulting to false // is still a sensible choice. Slice::Slice(SliceStrategy& strategy): _varCount(0), _lcmUpdated(false), _lowerBoundHint(0), _strategy(strategy) { } Slice::Slice(SliceStrategy& strategy, const Ideal& ideal, const Ideal& subtract, const Term& multiply): _ideal(ideal), _subtract(subtract), _multiply(multiply), _varCount(multiply.getVarCount()), _lcm(multiply.getVarCount()), _lcmUpdated(false), _lowerBoundHint(0), _strategy(strategy) { ASSERT(multiply.getVarCount() == ideal.getVarCount()); ASSERT(multiply.getVarCount() == subtract.getVarCount()); } Slice::~Slice() { // We are defining this do-nothing destructor in order to make it // virtual. } const Term& Slice::getLcm() const { #ifdef DEBUG if (_lcmUpdated) { Term tmp(_varCount); _ideal.getLcm(tmp); ASSERT(tmp == _lcm); } #endif if (!_lcmUpdated) { getIdeal().getLcm(_lcm); _lcmUpdated = true; } return _lcm; } void Slice::print(FILE* file) const { fputs("Slice (multiply: ", file); _multiply.print(file); fputs("\n ideal: ", file); getIdeal().print(file); fputs(" subtract: ", file); _subtract.print(file); } Slice& Slice::operator=(const Slice& slice) { _varCount = slice._varCount; _ideal = slice._ideal; _subtract = slice._subtract; _multiply = slice._multiply; _lcm = slice._lcm; _lcmUpdated = slice._lcmUpdated; _lowerBoundHint = slice._lowerBoundHint; return *this; } void Slice::resetAndSetVarCount(size_t varCount) { _varCount = varCount; _ideal.clearAndSetVarCount(varCount); _subtract.clearAndSetVarCount(varCount); _multiply.reset(varCount); _lcm.reset(varCount); _lcmUpdated = false; _lowerBoundHint = 0; } void Slice::clearIdealAndSubtract() { _ideal.clear(); _subtract.clear(); _lcmUpdated = false; _lowerBoundHint = 0; } void Slice::singleDegreeSortIdeal(size_t var) { _ideal.singleDegreeSort(var); } bool Slice::innerSlice(const Term& pivot) { ASSERT(getVarCount() == pivot.getVarCount()); size_t count = _ideal.getGeneratorCount(); _multiply.product(_multiply, pivot); bool idealChanged = _ideal.colonReminimize(pivot); bool subtractChanged = _subtract.colonReminimize(pivot); bool changed = idealChanged || subtractChanged; if (changed) { normalize(); _lowerBoundHint = pivot.getFirstNonZeroExponent(); } if (_ideal.getGeneratorCount() == count) _lcm.colon(_lcm, pivot); else _lcmUpdated = false; return changed; } void Slice::outerSlice(const Term& pivot) { ASSERT(getVarCount() == pivot.getVarCount()); size_t count = getIdeal().getGeneratorCount(); _ideal.removeStrictMultiples(pivot); if (getIdeal().getGeneratorCount() != count) _lcmUpdated = false; if (pivot.getSizeOfSupport() > 1) getSubtract().insertReminimize(pivot); _lowerBoundHint = pivot.getFirstNonZeroExponent(); } // Helper class for normalize(). class StrictMultiplePredicate { public: StrictMultiplePredicate(const Exponent* term, size_t varCount): _term(term), _varCount(varCount) { } bool operator()(const Exponent* term) { return Term::strictlyDivides(_term, term, _varCount); } private: const Exponent* _term; size_t _varCount; }; bool Slice::adjustMultiply() { bool changed = false; while (true) { Term lowerBound(_varCount); Ideal::const_iterator end = getIdeal().end(); for (Ideal::const_iterator it = getIdeal().begin(); it != end; ++it) { for (size_t var = 0; var < _varCount; ++var) { if ((*it)[var] == 0) continue; if (lowerBound[var] == 0 || lowerBound[var] > (*it)[var]) lowerBound[var] = (*it)[var]; } } lowerBound.decrement(); if (lowerBound.isIdentity()) break; changed = true; bool sawRealChange = innerSlice(lowerBound); if (!sawRealChange) break; } return changed; } bool Slice::normalize() { bool removedAny = false; Ideal::const_iterator stop = _subtract.end(); for (Ideal::const_iterator it = _subtract.begin(); it != stop; ++it) { StrictMultiplePredicate pred(*it, _varCount); if (_ideal.removeIf(pred)) { removedAny = true; _lcmUpdated = false; } } return removedAny; } bool Slice::simplify() { ASSERT(!normalize()); bool lowerBoundChange = applyLowerBound(); bool pruneSubtractChange = pruneSubtract(); ASSERT(!normalize()); ASSERT(!pruneSubtract()); ASSERT(!applyLowerBound()); return lowerBoundChange || pruneSubtractChange; } void Slice::setToProjOf (const Slice& slice, const Projection& projection) { resetAndSetVarCount(projection.getRangeVarCount()); Ideal::const_iterator stop = slice.getIdeal().end(); for (Ideal::const_iterator it = slice.getIdeal().begin(); it != stop; ++it) { size_t var = Term::getFirstNonZeroExponent(*it, slice.getVarCount()); if (var == slice.getVarCount() || projection.domainVarHasProjection(var)) { // Use _lcm as temporary. projection.project(_lcm, *it); _ideal.insert(_lcm); } } stop = slice.getSubtract().end(); for (Ideal::const_iterator it = slice.getSubtract().begin(); it != stop; ++it) { size_t var = Term::getFirstNonZeroExponent(*it, slice.getVarCount()); if (var == slice.getVarCount() || projection.domainVarHasProjection(var)) { projection.project(_lcm, *it); getSubtract().insert(_lcm); } } projection.project(getMultiply(), slice.getMultiply()); if (slice._lcmUpdated) { projection.project(_lcm, slice._lcm); _lcmUpdated = true; } else _lcmUpdated = false; } void Slice::swap(Slice& slice) { std::swap(_varCount, slice._varCount); _multiply.swap(slice._multiply); _lcm.swap(slice._lcm); std::swap(_lcmUpdated, slice._lcmUpdated); _ideal.swap(slice._ideal); _subtract.swap(slice._subtract); std::swap(_lowerBoundHint, slice._lowerBoundHint); } namespace { /** This is a helper class for Slice::pruneSubtract(). */ class PruneSubtractPredicate { public: PruneSubtractPredicate(const Ideal& ideal, const Term& lcm): _ideal(ideal), _lcm(lcm) {} bool operator()(const Exponent* term) { return !Term::strictlyDivides(term, _lcm, _lcm.getVarCount()) || _ideal.contains(term); } private: const Ideal& _ideal; const Term& _lcm; }; } bool Slice::pruneSubtract() { if (_subtract.getGeneratorCount() == 0) return false; PruneSubtractPredicate pred(getIdeal(), getLcm()); return _subtract.removeIf(pred); } bool Slice::applyLowerBound() { if (_ideal.getGeneratorCount() == 0) return false; if (getVarCount() == 1) return adjustMultiply(); bool changed = false; size_t stepsWithNoChange = 0; Term bound(_varCount); size_t var = _lowerBoundHint; while (stepsWithNoChange < _varCount) { if (!getLowerBound(bound, var)) { clearIdealAndSubtract(); return true; } if (!bound.isIdentity()) { changed = true; if (innerSlice(bound)) stepsWithNoChange = 0; else ++stepsWithNoChange; } else ++stepsWithNoChange; var = (var + 1) % _varCount; } return changed; } void Slice::run(TaskEngine& tasks) { _strategy.processSlice(tasks, auto_ptr(this)); } void Slice::dispose() { _strategy.freeSlice(auto_ptr(this)); } frobby-0.9.5/src/Slice.h000066400000000000000000000264501401527164200150200ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SLICE_GUARD #define SLICE_GUARD #include "Ideal.h" #include "Term.h" #include "Task.h" class Projection; class SliceStrategy; /** This class represents a slice, which is the central data structure of the %Slice Algorithm. To be precise, a slice is mathematically a 3-tuple \f$(I,S,q)\f$ where \f$I\f$ and \f$S\f$ are monomial ideals and \f$q\f$ is a monomial. Each slice then represents some part of the output, which is known as its content. Usually the content is a set, and the content obeys the pivot split equation, which is \f[ \con I S q = \con {I:p} {S:p} {qp} \cup \con I {S+p} q \f] where \f$p\f$ is a monomial called the pivot, and the union is disjoint. There are three slices in this equation, which are known in order from left to right as the current slice, the inner slice and the outer slice. The ideal \f$I\f$ is regarded as the base data of the slice, and is known as simply the ideal of the slice. The ideal \f$S\f$ is regarded as specifying monomials that are not to be regarded as part of the content, i.e. \f$S\f$ is subtracted from the content, so \f$S\f$ is known as the subtract of the slice. The monomial \f$q\f$ is multiplied onto the content, so it is known as the multiply of the slice. These parts of the slice do not actually have names, since in mathematics they are conveniently referred to as simply \f$I\f$, \f$S\f$ and \f$q\f$. We are introducing names for these symbols to have something to call them in the code. There are two base cases of the %Slice Algorithm. A trivial base case slice is when \f$\lcm(min(I))\f$ is not divisible by some variable, i.e. some variable does not appear in any element of \f$\min(I)\f$. In this case the content is empty. A non-trivial base case is when \f$I\f$ is square-free and the base case is not trivial. This is equivalent to \f$\lcm(min(I))\f$ being equal to the product of all variables in the ambient polynomial ring. The %Slice Algorithm has a notion of simplification, which is to replace a slice with a different slice that is simpler and has the same content. This class implements the notions of the %Slice Algorithm that are common among different versions of the %Slice Algorithm, while leaving derived classes to introduce code that is specific to a particular version. A derivative of Slice thus cooperates with a derivative of SliceStrategy to implement a specific version of the %Slice Algorithm. As the kind of output generated by a non-trivial base case slice depends on what is being computed, the general Slice interface does not provide a way to obtain the output. The suggested mechanism is for each slice derivative to store a Consumer and to provide the output to that consumer. */ class Slice : public Task { public: /** Construct the slice \f$(\ideal 0, \ideal 0, 1)\f$ in a ring of zero variables. */ Slice(SliceStrategy& strategy); /** Construct the slice \f$(\codeVar{ideal}, \codeVar{subtract}, \codeVar{multiply})\f$. */ Slice(SliceStrategy& strategy, const Ideal& ideal, const Ideal& subtract, const Term& multiply); virtual ~Slice(); /** @name Accessors */ //@{ /** Returns the number of variables in the ambient ring. */ size_t getVarCount() const {return _varCount;} /** Returns \f$I\f$ for a slice \f$(I,S,q)\f$. There is no non-const getIdeal() because Slice caches properties of the ideal, and it is not possible to efficiently track changes performed directly on the ideal. To compensate for this, Slice provides a subset of the mutable interface of Ideal which allows to manipulate the ideal. */ const Ideal& getIdeal() const {return _ideal;} /** Returns \f$S\f$ for a slice \f$(I,S,q)\f$. */ Ideal& getSubtract() {return _subtract;} /** Returns \f$S\f$ for a slice \f$(I,S,q)\f$. */ const Ideal& getSubtract() const {return _subtract;} /** Returns \f$q\f$ for a slice \f$(I,S,q)\f$. */ Term& getMultiply() {return _multiply;} /** Returns \f$q\f$ for a slice \f$(I,S,q)\f$. */ const Term& getMultiply() const {return _multiply;} /** Returns the least common multiple of the generators of getIdeal(). The lcm is stored and is only recomputed once after each time the ideal changes. The lcm is always needed after each change, e.g. to detect if the slice is a base case slice, so calling this method should be regarded as an inexpensive operation. */ const Term& getLcm() const; /** Write a text representation of this object to file in a format appropriate for debugging. */ void print(FILE* file) const; //@} /** @name Mutators */ //@{ /** Returns true if this slice is a base case slice, and in that case produces output in a derivative-specific way. If simplified is true, then the slice must be fully simplified when calling baseCase(), while otherwise there is no such requirement. */ virtual bool baseCase(bool simplified) = 0; /** Performs a deep copy of slice into this object. */ virtual Slice& operator=(const Slice& slice) = 0; /** Resets this slice to \f$(\ideal 0, \ideal 0, 1)\f$ in an ambient polynomial ring of varCount variables. */ void resetAndSetVarCount(size_t varCount); /** Clears getIdeal() and getSubtract() and does not change getMultiply(). This is useful to induce this slice to be clearly a trivial base case slice, and to clear memory in preparation for reusing this slice later without having to construct a new Slice. getMultiply() is left unchanged since changing it is unnecessary for these purposes. */ void clearIdealAndSubtract(); /** Calls Ideal::singleDegreeSort on getIdeal(). */ void singleDegreeSortIdeal(size_t var); /** Sets this object to the inner slice according to pivot. To be precise, the slice \f$(I,S,q)\f$ is replaced by \f$(I:p,S:p,qp)\f$ where \f$p\f$ is the pivot, and the slice is then normalized (see \ref normalize). Returns true if any of the colon operations \f$I:p\f$ and \f$S:p\f$ were non-trivial in the sense that it changed the support of any minimal generator. */ virtual bool innerSlice(const Term& pivot); /** Sets this object to the outer slice according to pivot. To be precise, the slice \f$(I,S,q)\f$ is replaced by \f$(I,S+\ideal p,q)\f$ where \f$p\f$ is the pivot, and the slice is then normalized (see \ref normalize). Note that if pivot is a pure power, then pivot is not actually inserted into \f$S\f$ since doing so has no effect on the content after the normalization. */ virtual void outerSlice(const Term& pivot); /** Removes those generators of getIdeal() that are strictly divisible by some generator of getSubtract(). Note that this does not change the content of the slice. Returns true if any generators were removed. See ::strictlyDivides for the definition of strict divisibility. */ bool normalize(); /** Ensure that for each var, var appears to the first power in some generator of getIdeal(). Note that this does not change the content of the slice. Returns true if the slice changed. */ bool adjustMultiply(); /** Simplifies this object such that it may become simpler without changing the content. It is a precondition that the slice is already normalized. */ virtual bool simplify(); /** Like simplify(), except that only one simplification step is performed. If the return value is true, then the Slice may not be fully simplified yet. Iterating simplifyStep() has the same result as calling simplify(), though the performance characteristics can be worse. @todo Is this method actually used, and does it return true iff this object changed? */ virtual bool simplifyStep() = 0; //@} virtual void run(TaskEngine& tasks); virtual void dispose(); protected: /** Set this object to be the projection of slice according to projection. I.e. each of getIdeal(), getSubtract() and getMultiply() are projected. */ void setToProjOf(const Slice& slice, const Projection& projection); /** Simultaneously set the value of this object to that of slice and vice versa. This is an inexpensive operation because no copy is necessary. */ void swap(Slice& slice); /** Removes those generators of subtract that do not strictly divide the lcm of getIdeal(), or that belong to getIdeal(). Note that removing these generators does not change the content. Returns true if any generators were removed. */ bool pruneSubtract(); /** Calculates a lower bound on the content of the slice using getLowerBound() and calls innerSlice with that lower bound. Note that this does not change the content of the slice. This is repeated until a fixed point is reached. Returns false if no minimal generator of getIdeal() or getSubtract() has had their support changed or if a trivial base case is detected. @todo Rename lower bound to divisor. */ bool applyLowerBound(); /** Calculates a lower bound that depends on var. To be precise, the lower bound that is calculated is \f[ \frac{1}{x_i}\gcd(\min(I)\cap\ideal{x_i}) \f] where \f$i\f$ is var. Note that the real functionality is slightly more sophisticated. Returns false and does not set bound if a base case is detected (a base case is not guaranteed to be detected). @todo rename lower bound to divisor. @todo describe how the real functionality is slightly more sophisticated. */ virtual bool getLowerBound(Term& bound, size_t var) const = 0; /** The \f$I\f$ of a slice \f$(I,S,q)\f$. */ Ideal _ideal; /** The \f$S\f$ of a slice \f$(I,S,q)\f$. */ Ideal _subtract; /** The \f$q\f$ of a slice \f$(I,S,q)\f$. */ Term _multiply; /** The number of variables in the ambient polynomial ring. */ size_t _varCount; /** The lcm of getIdeal() if _lcmUpdated is true, and otherwise the value is undefind. _lcm will always have the correct number of variables, even when _lcmUpdated is false. This member variable is mutable since it has to be updated by \ref getLcm in case _lcmUpdated is false, but \ref getLcm should be const. */ mutable Term _lcm; /** Indicates whether _lcm is correct. This member variable is mutable since it has to be updated by \ref getLcm in case _lcmUpdated is false, but \ref getLcm should be const. */ mutable bool _lcmUpdated; /** A hint that starting simplification through a lower bound at the variable indicated by _lowerBoundHint is likely to yield a simplification, or at least more likely than a random other variable. The point of this is to detect variables that can be simplified sooner in order to speed up simplification. */ size_t _lowerBoundHint; SliceStrategy& _strategy; }; #endif frobby-0.9.5/src/SliceFacade.cpp000066400000000000000000000344521401527164200164400ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "SliceFacade.h" #include "BigTermConsumer.h" #include "CoefBigTermConsumer.h" #include "TermTranslator.h" #include "BigIdeal.h" #include "Ideal.h" #include "Term.h" #include "MsmStrategy.h" #include "TranslatingTermConsumer.h" #include "TranslatingCoefTermConsumer.h" #include "DebugStrategy.h" #include "DecomRecorder.h" #include "TermGrader.h" #include "OptimizeStrategy.h" #include "CanonicalCoefTermConsumer.h" #include "HilbertStrategy.h" #include "IOHandler.h" #include "BigPolynomial.h" #include "TotalDegreeCoefTermConsumer.h" #include "CoefBigTermRecorder.h" #include "CanonicalTermConsumer.h" #include "VarSorter.h" #include "StatisticsStrategy.h" #include "IrreducibleIdealSplitter.h" #include "SizeMaxIndepSetAlg.h" #include "SliceParams.h" #include "error.h" #include "display.h" #include SliceFacade::SliceFacade(const SliceParams& params, const DataType& output): Facade(params.getPrintActions()), _params(params) { _split = SplitStrategy::createStrategy(params.getSplit().c_str()); _common.readIdealAndSetOutput(params, output); } SliceFacade::SliceFacade(const SliceParams& params, const BigIdeal& ideal, BigTermConsumer& consumer): Facade(params.getPrintActions()), _params(params) { _split = SplitStrategy::createStrategy(params.getSplit().c_str()); _common.setIdealAndIdealOutput(params, ideal, consumer); } SliceFacade::SliceFacade(const SliceParams& params, const BigIdeal& ideal, CoefBigTermConsumer& consumer): Facade(params.getPrintActions()), _params(params) { _split = SplitStrategy::createStrategy(params.getSplit().c_str()); _common.setIdealAndPolyOutput(params, ideal, consumer); } SliceFacade::~SliceFacade() { } void SliceFacade::computeMultigradedHilbertSeries() { ASSERT(isFirstComputation()); beginAction("Computing multigraded Hilbert-Poincare series."); auto_ptr consumer = _common.makeTranslatedPolyConsumer(); consumer->consumeRing(_common.getNames()); consumer->beginConsuming(); HilbertStrategy strategy(consumer.get(), _split.get()); runSliceAlgorithmWithOptions(strategy); consumer->doneConsuming(); endAction(); } void SliceFacade::computeUnivariateHilbertSeries() { ASSERT(isFirstComputation()); beginAction("Computing univariate Hilbert-Poincare series."); auto_ptr consumer = _common.makeToUnivariatePolyConsumer(); consumer->consumeRing(_common.getNames()); consumer->beginConsuming(); HilbertStrategy strategy(consumer.get(), _split.get()); runSliceAlgorithmWithOptions(strategy); consumer->doneConsuming(); endAction(); } void SliceFacade::computeIrreducibleDecomposition(bool encode) { ASSERT(isFirstComputation()); produceEncodedIrrDecom(*_common.makeTranslatedIdealConsumer(!encode)); } mpz_class SliceFacade::computeDimension(bool codimension) { ASSERT(isFirstComputation()); if (_common.getIdeal().containsIdentity()) { if (codimension) { // convert to mpz_class before increment to ensure no overflow. return mpz_class(_common.getIdeal().getVarCount()) + 1; } else return -1; } // todo: inline? takeRadical(); beginAction("Preparing to compute dimension."); vector v; fill_n(back_inserter(v), _common.getIdeal().getVarCount(), -1); endAction(); mpz_class minusCodimension; #ifdef DEBUG // Only define hasComponents when DEBUG is defined since otherwise // GCC will warn about hasComponents not being used. bool hasComponents = #endif solveIrreducibleDecompositionProgram(v, minusCodimension, false); ASSERT(hasComponents); if (codimension) return -minusCodimension; else return v.size() + minusCodimension; } void SliceFacade::computePrimaryDecomposition() { ASSERT(isFirstComputation()); size_t varCount = _common.getIdeal().getVarCount(); Ideal irreducibleDecom(varCount); { DecomRecorder recorder(&irreducibleDecom); produceEncodedIrrDecom(recorder); } beginAction ("Computing primary decomposition from irreducible decomposition."); // Do intersection of each component also using irreducible // decomposition of the dual. We can't use the Alexander dual // methods, since those switch around the translator to emit altered // big integers, while keeping the small integers the same, but we // want to keep this in small integers. So we have to do the dual // thing here. // To get actual supports. _common.getTranslator().setInfinityPowersToZero(irreducibleDecom); // To collect same-support vectors together. irreducibleDecom.sortReverseLex(); Term lcm(varCount); irreducibleDecom.getLcm(lcm); Term tmp(varCount); Term support(varCount); _common.getIdeal().clear(); Ideal& primaryComponentDual = _common.getIdeal(); Ideal primaryComponent(varCount); DecomRecorder recorder(&primaryComponent); auto_ptr consumer = _common.makeTranslatedIdealConsumer(); consumer->consumeRing(_common.getNames()); consumer->beginConsumingList(); Ideal::const_iterator stop = irreducibleDecom.end(); Ideal::const_iterator it = irreducibleDecom.begin(); while (it != stop) { // Get all vectors with same support. support = *it; do { tmp.encodedDual(*it, lcm); primaryComponentDual.insert(tmp); ++it; } while (it != stop && support.hasSameSupport(*it)); ASSERT(!primaryComponentDual.isZeroIdeal()); _common.getTranslator().addPurePowersAtInfinity(primaryComponentDual); { MsmStrategy strategy(&recorder, _split.get()); runSliceAlgorithmWithOptions(strategy); } _common.getTranslator().setInfinityPowersToZero(primaryComponent); consumer->beginConsuming(); for (Ideal::const_iterator dualTerm = primaryComponent.begin(); dualTerm != primaryComponent.end(); ++dualTerm) { tmp.encodedDual(*dualTerm, lcm); consumer->consume(tmp); } consumer->doneConsuming(); primaryComponent.clear(); primaryComponentDual.clear(); } consumer->doneConsumingList(); endAction(); } void SliceFacade::computeMaximalStaircaseMonomials() { ASSERT(isFirstComputation()); beginAction("Computing maximal staircase monomials."); auto_ptr consumer = _common.makeTranslatedIdealConsumer(); consumer->consumeRing(_common.getNames()); MsmStrategy strategy(consumer.get(), _split.get()); runSliceAlgorithmWithOptions(strategy); endAction(); } void SliceFacade::computeMaximalStandardMonomials() { ASSERT(isFirstComputation()); beginAction("Preparing to compute maximal standard monomials."); _common.getTranslator().decrement(); endAction(); computeMaximalStaircaseMonomials(); } void SliceFacade::computeAlexanderDual(const vector& point) { ASSERT(isFirstComputation()); ASSERT(point.size() == _common.getIdeal().getVarCount()); beginAction("Ensuring specified point is divisible by lcm."); vector lcm; getLcmOfIdeal(lcm); for (size_t var = 0; var < lcm.size(); ++var) { if (lcm[var] > point[var]) { endAction(); reportError ("The specified point to dualize on is not divisible by the " "least common multiple of the minimal generators of the ideal."); } } endAction(); beginAction("Preparing to compute Alexander dual."); _common.getTranslator().dualize(point); endAction(); produceEncodedIrrDecom(*_common.makeTranslatedIdealConsumer()); } void SliceFacade::computeAlexanderDual() { ASSERT(isFirstComputation()); beginAction("Computing lcm for Alexander dual."); vector lcm; getLcmOfIdeal(lcm); endAction(); computeAlexanderDual(lcm); } void SliceFacade::computeAssociatedPrimes() { ASSERT(isFirstComputation()); size_t varCount = _common.getIdeal().getVarCount(); // Obtain generators of radical from irreducible decomposition. Ideal radical(varCount); { Ideal decom(varCount); DecomRecorder recorder(&decom); produceEncodedIrrDecom(recorder); beginAction("Computing associated primes from irreducible decomposition."); Term tmp(varCount); Ideal::const_iterator stop = decom.end(); for (Ideal::const_iterator it = decom.begin(); it != stop; ++it) { for (size_t var = 0; var < varCount; ++var) { // We cannot just check whether (*it)[var] == 0, since the // added fake pure powers map to zero but are not themselves // zero. if (_common.getTranslator().getExponent(var, (*it)[var]) == 0) tmp[var] = 0; else tmp[var] = 1; } radical.insert(tmp); } } radical.removeDuplicates(); // Output associated primes. setToZeroOne(_common.getTranslator()); auto_ptr consumer = _common.makeTranslatedIdealConsumer(); consumer->consumeRing(_common.getNames()); consumer->beginConsuming(); Term tmp(varCount); Ideal::const_iterator stop = radical.end(); for (Ideal::const_iterator it = radical.begin(); it != stop; ++it) { tmp = *it; consumer->consume(tmp); } consumer->doneConsuming(); endAction(); } bool SliceFacade::solveIrreducibleDecompositionProgram (const vector& grading, mpz_class& optimalValue, bool reportAllSolutions) { ASSERT(isFirstComputation()); ASSERT(grading.size() == _common.getIdeal().getVarCount()); beginAction("Preparing to solve optimization program."); if (!_common.getIdeal().containsIdentity()) _common.addPurePowersAtInfinity(); endAction(); return solveProgram(grading, optimalValue, reportAllSolutions); } bool SliceFacade::solveStandardProgram (const vector& grading, mpz_class& optimalValue, bool reportAllSolutions) { ASSERT(isFirstComputation()); ASSERT(grading.size() == _common.getIdeal().getVarCount()); _common.getTranslator().decrement(); return solveProgram(grading, optimalValue, reportAllSolutions); } void SliceFacade::produceEncodedIrrDecom(TermConsumer& consumer) { ASSERT(isFirstComputation()); beginAction("Computing irreducible decomposition."); _common.addPurePowersAtInfinity(); MsmStrategy strategy(&consumer, _split.get()); consumer.consumeRing(_common.getNames()); runSliceAlgorithmWithOptions(strategy); endAction(); } bool SliceFacade::solveProgram(const vector& grading, mpz_class& optimalValue, bool reportAllSolutions) { ASSERT(isFirstComputation()); ASSERT(grading.size() == _common.getIdeal().getVarCount()); if (_params.getUseIndependenceSplits()) { displayNote ("Turning off Independence splits as they are not supported\n" "for optimization."); _params.useIndependenceSplits(false); } if (_params.getUseBoundSimplification() && !_params.getUseBoundElimination()) { displayNote ("Bound simplification requires using the bound to eliminate\n" "non-improving slices, which has been turned off. Am now turning\n" "this on."); _params.useBoundElimination(true); } beginAction("Solving optimization program."); OptimizeStrategy::BoundSetting boundSetting; if (_params.getUseBoundSimplification()) { ASSERT(_params.getUseBoundElimination()); boundSetting = OptimizeStrategy::UseBoundToEliminateAndSimplify; } else if (_params.getUseBoundElimination()) boundSetting = OptimizeStrategy::UseBoundToEliminate; else boundSetting = OptimizeStrategy::DoNotUseBound; TermGrader grader(grading, _common.getTranslator()); OptimizeStrategy strategy (grader, _split.get(), reportAllSolutions, boundSetting); runSliceAlgorithmWithOptions(strategy); endAction(); const Ideal& solution = strategy.getMaximalSolutions(); auto_ptr consumer = _common.makeTranslatedIdealConsumer(); consumer->consumeRing(_common.getNames()); consumer->consume(solution); if (solution.isZeroIdeal()) return false; else { optimalValue = strategy.getMaximalValue(); return true; } } bool SliceFacade::isFirstComputation() const { return _common.hasIdeal(); } void SliceFacade::takeRadical() { ASSERT(isFirstComputation()); beginAction("Taking radical of ideal."); bool skip = false; Term lcm(_common.getIdeal().getVarCount()); _common.getIdeal().getLcm(lcm); if (lcm.isSquareFree()) skip = true; if (!skip) { _common.getTranslator().setInfinityPowersToZero(_common.getIdeal()); _common.getIdeal().takeRadicalNoMinimize(); _common.getIdeal().minimize(); } setToZeroOne(_common.getTranslator()); endAction(); } void SliceFacade::getLcmOfIdeal(vector& bigLcm) { ASSERT(isFirstComputation()); Term lcm(_common.getIdeal().getVarCount()); _common.getIdeal().getLcm(lcm); bigLcm.clear(); bigLcm.reserve(_common.getIdeal().getVarCount()); for (size_t var = 0; var < _common.getIdeal().getVarCount(); ++var) bigLcm.push_back(_common.getTranslator().getExponent(var, lcm)); } void SliceFacade::runSliceAlgorithmWithOptions(SliceStrategy& strategy) { ASSERT(isFirstComputation()); strategy.setUseIndependence(_params.getUseIndependenceSplits()); strategy.setUseSimplification(_params.getUseSimplification()); SliceStrategy* strategyWithOptions = &strategy; auto_ptr debugStrategy; if (_params.getPrintDebug()) { debugStrategy.reset (new DebugStrategy(strategyWithOptions, stderr)); strategyWithOptions = debugStrategy.get(); } auto_ptr statisticsStrategy; if (_params.getPrintStatistics()) { statisticsStrategy.reset (new StatisticsStrategy(strategyWithOptions, stderr)); strategyWithOptions = statisticsStrategy.get(); } ASSERT(strategyWithOptions != 0); strategyWithOptions->run(_common.getIdeal()); } frobby-0.9.5/src/SliceFacade.h000066400000000000000000000172761401527164200161120ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SLICE_FACADE_GUARD #define SLICE_FACADE_GUARD #include "SplitStrategy.h" #include "Ideal.h" #include "Facade.h" #include "SliceParams.h" #include "TermConsumer.h" #include "CoefTermConsumer.h" #include "CommonParamsHelper.h" #include #include #include class BigIdeal; class BigTermConsumer; class CoefBigTermConsumer; class SliceStrategy; class IOHandler; class DataType; /** A facade for operations on monomial ideals using the Slice Algorithm. @ingroup Facade */ class SliceFacade : public Facade { public: SliceFacade(const SliceParams& params, const DataType& output); SliceFacade(const SliceParams& params, const BigIdeal& ideal, BigTermConsumer& consumer); SliceFacade(const SliceParams& params, const BigIdeal& ideal, CoefBigTermConsumer& consumer); ~SliceFacade(); /** Compute the numerator of the multigraded Hilbert-Poincare series. This series is the sum of all monomials not in the ideal. The multigraded Hilbert-Poincare series can be written as a single fraction with a polynomial as the numerator and the product of (1-x) as the denominator where x varies over all the variable in the ambient ring. It is this numerator that is computed. */ void computeMultigradedHilbertSeries(); /** Compute the numerator of the univariate Hilbert-Poincare series. This is defined as the multivariate Hilbert-Poincare series where every variable has been substituted with the same single variable t. See the documentation for computeMultigradedHilbertSeries() for more information. The terms of the output polynomial are provided in ascending order according to exponent. */ void computeUnivariateHilbertSeries(); /** Compute the unique irredundant set of irreducible ideals whose intersection equals ideal. If encode is false, then each irreducible component is output as a separate ideal, which is only supported when writing to a file. If encode is true, then each irreducible component is provided as a term, where missing pure powers are encoded as a zero exponent. The irreducible components are provided in arbitrary order. @param encode Specifies whether to encode the irreducible component as monomials. @todo Check whether encode being false is really only supported for writing to a file. If so, fix it and update this documention. */ void computeIrreducibleDecomposition(bool encode); /** Compute the Krull dimension of ideal. By convention, this is -1 if ideal is generated by the identity. Compute the codimension if the codimension is true, which is the number of variables in the ambient ring minus the dimension. */ mpz_class computeDimension(bool codimension = false); /** Compute the dimension of ideal. This is defined as the dimension of the zero set of the ideal. The ideal generated by the identity has the special property of having an empty zero set, and we define that to have dimension -1. @todo Nope, it is the Krull dimension. although that may be the same. Fix this doc. @todo why are there two dimension methods? */ void computeDimension(mpz_class& dimension); /** Compute the unique "nicest" primary decomposition of the ideal. This is defined as the primary decomposition where each primary component is the intersection of the irreducible components with that same support. Each primary component is provided as a separate ideal in arbitrary order. */ void computePrimaryDecomposition(); /** Compute the maximal staircase monomials of the ideal. A monomial m is a staircase monomial if it belongs to the ideal, while the monomial m : (x_1 ... x_n) does not. A monomial m is a maximal staircase monomial if m is a staircase monomial and m * x_i is not for every variable x_i. The output monomials are provided in arbitrary order. */ void computeMaximalStaircaseMonomials(); /** Compute the maximal standard monomials of the ideal. A monomial m is a standard monomial if it does not belong to the ideal. A monomial m is a maximal standard monomial if it is standard and m * x_i is not standard for every variable x_i. The output monomials are provided in arbitrary order. */ void computeMaximalStandardMonomials(); /** Compute the Alexander dual of the ideal. The output monomials are provided in arbitrary order. It is an error if any minimal generator of ideal does not divide point. It is acceptable for a non-minimal generator to not divide point. @param point The point to dualize on. */ void computeAlexanderDual(const vector& point); /** Compute the Alexander dual of the ideal. The point to dualize on is the least common multiple of the minimal generators of the ideal. The output monomials are provided in arbitrary order. */ void computeAlexanderDual(); /** Compute the associated primes of the ideal. These are represented as generators of an ideal and are provided in arbitrary order. @todo Add a bool encode option to choose between output as actual ideals or as it is being done now. */ void computeAssociatedPrimes(); /** Solve an optimization program over maximal standard monomials. The optimization program being solved is maximize \f$\textrm{v} * \textrm{grading}\f$ subject to \f$x ^ \textrm{v}\f$ being a maximal standard monomial of the ideal. @param grading The vector to optimize. @param value Will be set to the value of the program, if any. @param reportAllSolutions Output all optimal solutions if true, otherwise report some optimal solution if there are any. @returns true if there are any maximal standard monomials. */ bool solveStandardProgram (const vector& grading, mpz_class& value, bool reportAllSolutions); /** Solve an optimization program over irreducible components. The optimization program being solved is maximize \f$\textrm{v} * \textrm{grading}\f$ subject to \p v encoding an irreducible component of the ideal. @param grading The vector to optimize. @param optimalValue Will be set to the value of the program, if any. @param reportAllSolutions Output all optimal solutions if true, otherwise report some single optimal solution if there is one. @returns true if there are any irreducible components. */ bool solveIrreducibleDecompositionProgram (const vector& grading, mpz_class& optimalValue, bool reportAllSolutions); private: void produceEncodedIrrDecom(TermConsumer& consumer); bool solveProgram(const vector& grading, mpz_class& optimalValue, bool reportAllSolutions); bool isFirstComputation() const; void takeRadical(); void getLcmOfIdeal(vector& lcm); void runSliceAlgorithmWithOptions(SliceStrategy& strategy); SliceParams _params; CommonParamsHelper _common; auto_ptr _split; }; #endif frobby-0.9.5/src/SliceLikeParams.cpp000066400000000000000000000023731401527164200173220ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "SliceLikeParams.h" #include "CliParams.h" SliceLikeParams::SliceLikeParams(): _useSimplification(true) { } namespace { static const char* UseSimplificationName = "simplify"; } void addSliceLikeParams(CliParams& params) { } void extractCliValues(SliceLikeParams& slice, const CliParams& cli) { extractCliValues(static_cast(slice), cli); slice.useSimplification(getBool(cli, UseSimplificationName)); } frobby-0.9.5/src/SliceLikeParams.h000066400000000000000000000026521401527164200167670ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SLICE_LIKE_PARAMS #define SLICE_LIKE_PARAMS #include "CommonParams.h" class CliParams; class SliceLikeParams : public CommonParams { public: SliceLikeParams(); /** Apply simplification to the state of the algorithm when possible. E.g. slices have a notion of simplification, as does the Bigatti algorithm. */ bool getUseSimplification() const {return _useSimplification;} void useSimplification(bool value) {_useSimplification = value;} private: bool _useSimplification; }; void addSliceLikeParams(CliParams& params); void extractCliValues(SliceLikeParams& slice, const CliParams& cli); #endif frobby-0.9.5/src/SliceParameters.cpp000066400000000000000000000141521401527164200173730ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "SliceParameters.h" #include "SliceFacade.h" #include "error.h" #include "BigattiPivotStrategy.h" #include "BigattiFacade.h" SliceParameters::SliceParameters(bool exposeBoundParam, bool exposeIndependenceParam, bool supportBigattiAlgorithm): _exposeBoundParam(exposeBoundParam), _exposeIndependenceParam(exposeIndependenceParam), _printDebug ("debug", "Print what the algorithm does at each step.", false), _printStatistics ("stats", "Print statistics on what the algorithm did.", false), _useBoundElimination ("bound", "Use the bound optimization to solve optimization problems faster\n" "by eliminating non-improving slices.", exposeBoundParam), _useBoundSimplification ("boundSimplify", "Use the bound optimization to solve optimization problems faster by\n" "simplifying slices through seeking to generate non-improving slices.\n" "This requires turning elimination of non-improving slices on.", exposeBoundParam), _useIndependence ("independence", "Perform independence splits when possible.", exposeIndependenceParam), _useSimplification ("simplify", "Perform simplification when possible.", true), _minimal ("minimal", "Specifies that the input ideal is minimally generated by the given\n" "generators. Turning this on can improve performance, but if it is not\n" "true then Frobby may go into an infinite loop or produce incorrect results.", false), _canonical ("canon", "Sort the output, including the variables, to get a canonical\n" "representation. This requires storing the entire output in memory, which\n" "can increase run time modestly and increase memory consumption greatly.", false), _useBigattiGeneric ("genericBase", "Detect generic ideals as a base case of the Bigatti algorithm.", true), _widenPivot ("widenPivot", "Widen selected pivots when performing pivot splits.\n" "Bigatti et.al. algorithm only.", true), _split ("split", "The split selection strategy to use. Slice options are maxlabel, minlabel,\n" "varlabel, minimum, median, maximum, mingen, indep and gcd. Optimization\n" "computations support the specialized strategy degree as well.", "median") { addParameter(&_minimal); addParameter(&_split); addParameter(&_printStatistics); if (exposeIndependenceParam) addParameter(&_useIndependence); addParameter(&_useSimplification); addParameter(&_printDebug); if (_exposeBoundParam) { addParameter(&_useBoundSimplification); addParameter(&_useBoundElimination); } addParameter(&_canonical); if (supportBigattiAlgorithm) { addParameter(&_useBigattiGeneric); addParameter(&_widenPivot); _printDebug.appendToDescription (" Slice algorithm only."); _printStatistics.appendToDescription (" Slice algorithm only."); _useIndependence.appendToDescription (" Slice algorithm only."); _minimal.appendToDescription ("\nSlice algorithm only."); _canonical.appendToDescription ("\nThe impact for the Bigatti et.al. algorithm is much less than for the" "\nSlice Algorithm since the Bigatti et.al. algorithm always has to\n" "store the entire output in memory regardless of this option."); _split.appendToDescription ("\nBigatti et.al. options are median, mostNGPure, mostNGGcd,\n" "mostNGTight, typicalPure, typicalGcd, typicalTight, typicalNGPure,\n" "typicalNGGcd, typicalNGTight, someNGPure, someNGGcd and someNGTight."); } } void SliceParameters::setUseIndependence(bool value) { _useIndependence = value; } void SliceParameters::setSplit(const string& split) { _split = split; } bool SliceParameters::getUseBoundElimination() const { return _useBoundElimination; } bool SliceParameters::getUseBoundSimplification() const { return _useBoundSimplification; } bool SliceParameters::getCanonical() const { return _canonical; } const string& SliceParameters::getSplit() const { return _split.getValue(); } void SliceParameters::validateSplit(bool allowLabel, bool allowDegree) { auto_ptr split(SplitStrategy::createStrategy(_split.getValue().c_str())); if (split.get() == 0) reportError("Unknown Slice split strategy \"" + _split.getValue() + "\"."); if (!allowLabel && split->isLabelSplit()) reportError("Label split strategy is not appropriate " "in this context."); // TODO: implement degree when there is no grading too, so that it // is always appropriate. if (!allowDegree && _split.getValue() == "degree") { reportError("The split strategy degree is not appropriate " "in this context."); } // TODO: remove the deprecated frob. if (!allowDegree && _split.getValue() == "frob") { reportError("The split strategy frob is not appropriate " "in this context."); } } void SliceParameters::validateSplitHilbert() { auto_ptr split = BigattiPivotStrategy::createStrategy (_split.getValue().c_str(), _widenPivot); if (split.get() == 0) reportError("Unknown Bigatti et.al. pivot strategy \"" + _split.getValue() + "\"."); } bool SliceParameters::getPrintDebug() const { return _printDebug; } bool SliceParameters::getPrintStatistics() const { return _printStatistics; } frobby-0.9.5/src/SliceParameters.h000066400000000000000000000071141401527164200170400ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SLICE_PARAMETERS_GUARD #define SLICE_PARAMETERS_GUARD #include "ParameterGroup.h" #include "BoolParameter.h" #include "StringParameter.h" class SliceFacade; class BigattiFacade; /** This class represents the parameters associated to the Slice Algorithm and the similar Bigatti et.al. Hilbert-Poincare series algorithm. This allows actions to share these options without code duplication. Note that SliceParameters is able to set up a SliceFacade and BigattiFacade according to the parameters it encapsulates. */ class SliceParameters : public ParameterGroup { public: /** Construct the parameters with default values. @param exposeBoundParams Make available parameters related to the bound optimization. @param exposeIndependenceParam Make available the parameter to turn independence splits on or off. @param supportBigattiAlgorithm Adjust messages */ SliceParameters(bool exposeBoundParams = false, bool exposeIndependenceParam = true, bool supportBigattiAlgorithm = false); /** Set the value of the independence split option. This is useful for setting the default value before parsing the user-supplied options. */ void setUseIndependence(bool value); /** Set the value of the option for choosing the split selection strategy. This is useful for setting the default value before parsing the user-supplied options. */ void setSplit(const string& split); /** Checks that the slice split selection strategy specified is valid. Reports an error otherwise. */ void validateSplit(bool allowLabel, bool allowDegree); /** Checks that the Bigatti Et.al. pivot selection strategy specified is valid. Reports an error otherwise. */ void validateSplitHilbert(); /** Get the value of the bound elimination option. This value has to be exposed as it is not part of the state of a SliceFacade. */ bool getUseBoundElimination() const; /** Get the value of the bound simplification option. This value has to be exposed as it is not part of the state of a SliceFacade. */ bool getUseBoundSimplification() const; /** Get the value of the canonical option. */ bool getCanonical() const; /** Get the value of the split option. */ const string& getSplit() const; /** Returns the value of the debug option. */ bool getPrintDebug() const; /** Returns the value of the stats option. */ bool getPrintStatistics() const; private: bool _exposeBoundParam; bool _exposeIndependenceParam; BoolParameter _printDebug; BoolParameter _printStatistics; BoolParameter _useBoundElimination; BoolParameter _useBoundSimplification; BoolParameter _useIndependence; BoolParameter _useSimplification; BoolParameter _minimal; BoolParameter _canonical; BoolParameter _useBigattiGeneric; BoolParameter _widenPivot; StringParameter _split; }; #endif frobby-0.9.5/src/SliceParams.cpp000066400000000000000000000054561401527164200165220ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "SliceParams.h" #include "SplitStrategy.h" #include "error.h" #include "CliParams.h" SliceParams::SliceParams(): _split("median"), _useIndependence(true), _useBoundElimination(true), _useBoundSimplification(true) { } SliceParams::SliceParams(const CliParams& cli): _split("median"), _useIndependence(true), _useBoundElimination(true), _useBoundSimplification(true) { extractCliValues(*this, cli); } namespace { const char* SplitParamName = "split"; const char* UseIndependenceName = "independence"; const char* UseBoundElimination = "bound"; const char* UseBoundSimplification = "boundSimplify"; } void addSliceParams(CliParams& params) { } void extractCliValues(SliceParams& slice, const CliParams& cli) { extractCliValues(static_cast(slice), cli); slice.setSplit(getString(cli, SplitParamName)); if (cli.hasParam(UseIndependenceName)) slice.useIndependenceSplits(getBool(cli, UseIndependenceName)); if (cli.hasParam(UseBoundElimination)) slice.useBoundElimination(getBool(cli, UseBoundElimination)); if (cli.hasParam(UseBoundSimplification)) slice.useBoundElimination(getBool(cli, UseBoundSimplification)); } void validateSplit(const SliceParams& params, bool allowLabel, bool allowDegree) { auto_ptr split(SplitStrategy::createStrategy(params.getSplit())); ASSERT(split.get() != 0) if (!allowLabel && split->isLabelSplit()) reportError("Label split strategy is not appropriate " "in this context."); // TODO: implement degree when there is no grading too, so that it // is always appropriate. if (!allowDegree && params.getSplit() == "degree") { reportError("The split strategy degree is not appropriate " "in this context."); } // TODO: remove the deprecated frob. if (!allowDegree && params.getSplit() == "frob") { reportError("The split strategy frob is not appropriate " "in this context."); } } frobby-0.9.5/src/SliceParams.h000066400000000000000000000043211401527164200161550ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SLICE_PARAMS_GUARD #define SLICE_PARAMS_GUARD #include "SliceLikeParams.h" #include class CliParams; class SliceParams : public SliceLikeParams { public: SliceParams(); SliceParams(const CliParams& params); const string& getSplit() const {return _split;} void setSplit(const string& name) {_split = name;} bool getUseIndependenceSplits() const {return _useIndependence;} void useIndependenceSplits(bool value) {_useIndependence = value;} /** Returns whether to use branch-and-bound to speed up Slice optimization computations by eliminating non-improving slices. */ bool getUseBoundElimination() const {return _useBoundElimination;} void useBoundElimination(bool value) {_useBoundElimination = value;} /** Returns whether to simplify slices by seeking to generate non-improving slices that are then eliminated. This requires that elimination of non-improving slices is turned on. */ bool getUseBoundSimplification() const {return _useBoundSimplification;} void useBoundSimplification(bool value) {_useBoundSimplification = value;} private: string _split; bool _useIndependence; bool _useBoundElimination; bool _useBoundSimplification; }; void addIdealParams(CliParams& params); void extractCliValues(SliceParams& slice, const CliParams& cli); void validateSplit(const SliceParams& params, bool allowLabel, bool allowDegree); #endif frobby-0.9.5/src/SliceStrategy.cpp000066400000000000000000000015151401527164200170710ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "SliceStrategy.h" SliceStrategy::~SliceStrategy() { } frobby-0.9.5/src/SliceStrategy.h000066400000000000000000000040201401527164200165300ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SLICE_STRATEGY_GUARD #define SLICE_STRATEGY_GUARD class Slice; class Term; class SliceEvent; class Ideal; class TaskEngine; /** This class describes the interface of a strategy object for the Slice Algorithm. It determines what goes on when the algorithm runs, allowing to specialize the algorithm to do several different computations. @todo Inspect comments. */ class SliceStrategy { public: virtual ~SliceStrategy(); /** Run the Slice algorithm. */ virtual void run(const Ideal& ideal) = 0; /** Process the parameter slice. Returns true if this is a base case and false otherwise. */ virtual bool processSlice(TaskEngine& tasks, auto_ptr slice) = 0; /** This method should only be called before calling run(). */ virtual void setUseIndependence(bool use) = 0; /** This method should only be called before calling run(). */ virtual void setUseSimplification(bool use) = 0; virtual bool getUseSimplification() const = 0; /** It is allowed to delete returned slices directly, but it is better to use freeSlice. freeSlice can only be called on slices obtained from a method of the same strategy. This allows caching of slices to avoid frequent allocation and deallocation. */ virtual void freeSlice(auto_ptr slice) = 0; }; #endif frobby-0.9.5/src/SliceStrategyCommon.cpp000066400000000000000000000065161401527164200202500ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "SliceStrategyCommon.h" #include "ElementDeleter.h" #include "TaskEngine.h" #include "Slice.h" SliceStrategyCommon::SliceStrategyCommon(const SplitStrategy* splitStrategy): _split(splitStrategy), _useIndependence(true), _useSimplification(true) { ASSERT(splitStrategy != 0); } SliceStrategyCommon::~SliceStrategyCommon() { // TODO: use ElementDeleter instead while (!_sliceCache.empty()) { delete _sliceCache.back(); _sliceCache.pop_back(); } } void SliceStrategyCommon::freeSlice(auto_ptr slice) { ASSERT(slice.get() != 0); ASSERT(debugIsValidSlice(slice.get())); slice->clearIdealAndSubtract(); // To preserve memory. noThrowPushBack(_sliceCache, slice); } void SliceStrategyCommon::setUseIndependence(bool use) { _useIndependence = use; } void SliceStrategyCommon::setUseSimplification(bool use) { _useSimplification = use; } bool SliceStrategyCommon::simplify(Slice& slice) { if (getUseSimplification()) return slice.simplify(); else if (_split->isLabelSplit()) { // The label split code requires at least this simplification. return slice.adjustMultiply(); } return false; } auto_ptr SliceStrategyCommon::newSlice() { auto_ptr slice; if (!_sliceCache.empty()) { slice.reset(_sliceCache.back()); _sliceCache.pop_back(); } else slice = allocateSlice(); ASSERT(debugIsValidSlice(slice.get())); return slice; } void SliceStrategyCommon::pivotSplit(auto_ptr slice) { ASSERT(slice.get() != 0); _pivotTmp.reset(slice->getVarCount()); getPivot(_pivotTmp, *slice); // Assert valid pivot. ASSERT(_pivotTmp.getVarCount() == slice->getVarCount()); ASSERT(!_pivotTmp.isIdentity()); ASSERT(!slice->getIdeal().contains(_pivotTmp)); ASSERT(!slice->getSubtract().contains(_pivotTmp)); // Set slice2 to the inner slice. auto_ptr slice2 = newSlice(); *slice2 = *slice; slice2->innerSlice(_pivotTmp); simplify(*slice2); // Set slice to the outer slice. slice->outerSlice(_pivotTmp); simplify(*slice); // Process the smaller slice first to preserve memory. if (slice2->getIdeal().getGeneratorCount() < slice->getIdeal().getGeneratorCount()) { // std::swap() may not work correctly on auto_ptr, so we have to // do the swap by hand. auto_ptr tmp = slice2; slice2 = slice; slice = tmp; } _tasks.addTask(slice2.release()); _tasks.addTask(slice.release()); } bool SliceStrategyCommon::getUseIndependence() const { return _useIndependence; } bool SliceStrategyCommon::getUseSimplification() const { return _useSimplification; } frobby-0.9.5/src/SliceStrategyCommon.h000066400000000000000000000060631401527164200177120ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SLICE_STRATEGY_COMMON #define SLICE_STRATEGY_COMMON #include "SliceStrategy.h" #include "SplitStrategy.h" #include "TaskEngine.h" #include #include #include "Term.h" class Slice; class SplitStrategy; /** This class adds code to the SliceStrategy base class that is useful for derived classes. The public interface is unchanged. */ class SliceStrategyCommon : public SliceStrategy { public: SliceStrategyCommon(const SplitStrategy* splitStrategy); virtual ~SliceStrategyCommon(); virtual void freeSlice(auto_ptr slice); virtual void setUseIndependence(bool use); virtual void setUseSimplification(bool use); protected: /** Simplifies slice and returns true if it changed. */ virtual bool simplify(Slice& slice); /** Directly allocate a slice of the correct type using new. */ virtual auto_ptr allocateSlice() = 0; /** Check that this slice is valid for use with this strategy. No check need be performed unless DEBUG is defined, making it acceptable to check things using ASSERT. This method should not be called if DEBUG is not defined. */ virtual bool debugIsValidSlice(Slice* slice) = 0; /** Returns a slice from the cache that freeSlice adds to, or allocate a new one using allocateSlice. This method should be used in place of allocating new slices directly. */ auto_ptr newSlice(); /** Takes over ownership of slice. Uses the pivot gotten through getPivot. */ virtual void pivotSplit(auto_ptr slice); /** Used by pivotSplit to obtain a pivot. */ virtual void getPivot(Term& pivot, Slice& slice) = 0; /** Returns true if independence splits should be performed when possible. */ bool getUseIndependence() const; /** Returns true if slices should be simplified. */ bool getUseSimplification() const; const SplitStrategy* _split; /** This keeps track of pending tasks to process. These are slices and other events. */ TaskEngine _tasks; private: bool _useIndependence; bool _useSimplification; /** This is the cache maintained through newSlice and freeSlice. It would make more sense with a stack, but that class has (surprisingly!) proven to have too high overhead, even when it seems to be implemented in terms of vector. */ vector _sliceCache; Term _pivotTmp; }; #endif frobby-0.9.5/src/SplitStrategy.cpp000066400000000000000000000322751401527164200171340ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "SplitStrategy.h" #include "Slice.h" #include "Term.h" #include "Ideal.h" #include "NameFactory.h" #include "TermGrader.h" #include "error.h" #include "display.h" SplitStrategy::SplitStrategy() { } SplitStrategy::~SplitStrategy() { } /** This common base class provides code that is useful for writing pivot split strategies. */ class SplitStrategyCommon : public SplitStrategy { public: virtual void getPivot(Term& pivot, Slice& slice) const { ASSERT(false); reportInternalError("Requested pivot split of non-pivot split strategy.\n"); } virtual void getPivot(Term& pivot, Slice& slice, const TermGrader& grader) const { getPivot(pivot, slice); } virtual size_t getLabelSplitVariable(const Slice& slice) const { ASSERT(false); reportInternalError("Requested label split of non-label split strategy."); return 0; // To avoid spurious warnings from static analyses. } virtual bool isPivotSplit() const { return false; } virtual bool isLabelSplit() const { return false; } protected: Exponent getMedianPositiveExponentOf(Slice& slice, size_t var) const { slice.singleDegreeSortIdeal(var); Ideal::const_iterator end = slice.getIdeal().end(); Ideal::const_iterator begin = slice.getIdeal().begin(); while ((*begin)[var] == 0) { ++begin; ASSERT(begin != end); } return (*(begin + (distance(begin, end) ) / 2))[var]; } // Returns the variable that divides the most minimal generators of // those where some minimal generator is divisible by the square of // that variable. mutable Term coVariableForGetBestVar; size_t getBestVar(const Slice& slice) const { Term& co = coVariableForGetBestVar; co.reset(slice.getVarCount()); slice.getIdeal().getSupportCounts(co); const Term& lcm = slice.getLcm(); for (size_t var = 0; var < slice.getVarCount(); ++var) if (lcm[var] <= 1) co[var] = 0; ASSERT(!co.isIdentity()); Exponent maxCount = co[co.getFirstMaxExponent()]; for (size_t var = 0; var < slice.getVarCount(); ++var) if (co[var] < maxCount) co[var] = 0; // Choose the middle variable among those that are best. This // is better at avoiding a bad pattern than just choosing the // first one. return co.getMiddleNonZeroExponent(); } }; class LabelSplit : public SplitStrategyCommon { protected: mutable Term _counts; void setCounts(const Slice& slice) const { _counts.reset(slice.getVarCount()); slice.getIdeal().getSupportCounts(_counts); } mutable Term _oneCounts; void setOneCounts(const Slice& slice) const { ASSERT(!const_cast(slice).adjustMultiply()); ASSERT(!const_cast(slice).baseCase(false)); // For each variable, count number of terms with exponent equal to 1, // not counting pure powers. _oneCounts.reset(slice.getVarCount()); Ideal::const_iterator end = slice.getIdeal().end(); for (Ideal::const_iterator it = slice.getIdeal().begin(); it != end; ++it) { if (Term::getSizeOfSupport(*it, slice.getVarCount()) == 1) continue; // Not counting pure powers. for (size_t var = 0; var < slice.getVarCount(); ++var) if ((*it)[var] == 1) _oneCounts[var] += 1; } } virtual bool isLabelSplit() const { return true; } }; // Use the variable that divides the most minimal generators. class MaxLabelSplit : public LabelSplit { public: virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "maxlabel"; } virtual size_t getLabelSplitVariable(const Slice& slice) const { setCounts(slice); return _counts.getFirstMaxExponent(); } }; // Use the first variable that is valid for a label split. class VarLabelSplit : public LabelSplit { public: virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "varlabel"; } virtual size_t getLabelSplitVariable(const Slice& slice) const { setOneCounts(slice); for (size_t var = 0; ; ++var) { ASSERT(var < slice.getVarCount()); if (_oneCounts[var] > 0) return var; } } }; // Among those variables with least number of exponents equal to one, // use the variable that divides the most minimal generators. class MinLabelSplit : public LabelSplit { public: virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "minlabel"; } virtual size_t getLabelSplitVariable(const Slice& slice) const { setCounts(slice); setOneCounts(slice); // Zero those variables of _counts that have more than the least number // of exponent 1 minimal generators. size_t mostGeneric = 0; for (size_t var = 1; var < slice.getVarCount(); ++var) if (mostGeneric == 0 || (mostGeneric > _oneCounts[var] && _oneCounts[var] > 0)) mostGeneric = _oneCounts[var]; for (size_t var = 0; var < slice.getVarCount(); ++var) if (_oneCounts[var] != mostGeneric) _counts[var] = 0; return _counts.getFirstMaxExponent(); } }; class PivotSplit : public SplitStrategyCommon { public: virtual bool isPivotSplit() const { return true; } }; class MinimumSplit : public PivotSplit { public: virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "minimum"; } virtual void getPivot(Term& pivot, Slice& slice) const { size_t var = getBestVar(slice); pivot.setToIdentity(); pivot[var] = 1; } }; class MedianSplit : public PivotSplit { public: virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "median"; } virtual void getPivot(Term& pivot, Slice& slice) const { size_t var = getBestVar(slice); pivot.setToIdentity(); pivot[var] = getMedianPositiveExponentOf(slice, var); if (pivot[var] == slice.getLcm()[var]) pivot[var] -= 1; } }; class MaximumSplit : public PivotSplit { public: virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "maximum"; } virtual void getPivot(Term& pivot, Slice& slice) const { size_t var = getBestVar(slice); pivot.setToIdentity(); pivot[var] = slice.getLcm()[var] - 1; } }; class IndependencePivotSplit : public MedianSplit { public: virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "indep"; } virtual void getPivot(Term& pivot, Slice& slice) const { if (slice.getVarCount() == 1) { MedianSplit::getPivot(pivot, slice); return; } for (int attempts = 0; attempts < 10; ++attempts) { // Pick two distinct variables. size_t var1 = rand() % slice.getVarCount(); size_t var2 = rand() % (slice.getVarCount() - 1); if (var2 >= var1) ++var2; // Make pivot as big as it can be while making var1 and var2 // independent of each other. bool first = true; Ideal::const_iterator end = slice.getIdeal().end(); for (Ideal::const_iterator it = slice.getIdeal().begin(); it != end; ++it) { if ((*it)[var1] == 0 || (*it)[var2] == 0) continue; if (first) pivot = *it; else { for (size_t var = 0; var < slice.getVarCount(); ++var) if (pivot[var] >= (*it)[var]) pivot[var] = (*it)[var] - 1; } } if (!first && !pivot.isIdentity()) return; } MedianSplit::getPivot(pivot, slice); } }; class GcdSplit : public PivotSplit { public: virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "gcd"; } virtual void getPivot(Term& pivot, Slice& slice) const { size_t var = getBestVar(slice); size_t nonDivisibleCount = 0; Ideal::const_iterator end = slice.getIdeal().end(); for (Ideal::const_iterator it = slice.getIdeal().begin(); it != end; ++it) if ((*it)[var] >= 2) ++nonDivisibleCount; for (int i = 0; i < 3; ++i) { size_t selected = rand() % nonDivisibleCount; for (Ideal::const_iterator it = slice.getIdeal().begin(); ; ++it) { ASSERT(it != end); if ((*it)[var] < 2) continue; if (selected == 0) { if (i == 0) pivot = *it; else pivot.gcd(pivot, *it); break; } --selected; } } pivot.decrement(); } }; class MinGenSplit : public PivotSplit { public: virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "mingen"; } virtual void getPivot(Term& pivot, Slice& slice) const { size_t nonSquareFreeCount = 0; Ideal::const_iterator end = slice.getIdeal().end(); for (Ideal::const_iterator it = slice.getIdeal().begin(); it != end; ++it) if (!Term::isSquareFree(*it, slice.getVarCount())) ++nonSquareFreeCount; size_t selected = rand() % nonSquareFreeCount; for (Ideal::const_iterator it = slice.getIdeal().begin(); ; ++it) { ASSERT(it != end); if (Term::isSquareFree(*it, slice.getVarCount())) continue; if (selected == 0) { pivot = *it; break; } --selected; } pivot.decrement(); } }; class DegreeSplit : public PivotSplit { public: virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "degree"; } virtual void getPivot(Term& pivot, Slice& slice) const { reportInternalError("Called getPivot directly on FrobeniusSplit."); } virtual void getPivot(Term& pivot, Slice& slice, const TermGrader& grader) const { const Term& lcm = slice.getLcm(); // TODO: pick a middle variable in case of ties. _maxDiff = -1; size_t maxOffset = 0u; for (size_t var = 0; var < slice.getVarCount(); ++var) { if (lcm[var] <= 1) continue; Exponent base = slice.getMultiply()[var]; Exponent mid = base + lcm[var] / 2; // We could be looking at an added pure power whose exponent is // defined to have degree 0. We don't want to look at that. if (mid == grader.getMaxExponent(var) && mid > base) --mid; _diff = grader.getGrade(var, mid) - grader.getGrade(var, base); if (grader.getGradeSign(var) < 0) _diff = -_diff; ASSERT(_diff >= 0 || base == mid); if (_diff > _maxDiff) { maxOffset = var; _maxDiff = _diff; } } pivot.setToIdentity(); pivot[maxOffset] = lcm[maxOffset] / 2; } private: /** This is member variable used by getPivot. It has been made a field of the object to avoid having to reinitialize the object with each call. */ mutable mpz_class _maxDiff; /** This is member variable used by getPivot. It has been made a field of the object to avoid having to reinitialize the object with each call. */ mutable mpz_class _diff; }; /** This class is deprecated and is only here to create the alias "frob" for the degree split. */ class DeprecatedFrobeniusSplit : public DegreeSplit { public: DeprecatedFrobeniusSplit() { displayNote ("The split selection strategy \"frob\" is deprecated and will be " "removed in a future version of Frobby. Use the name \"degree\" " "to achieve the same thing."); } virtual const char* getName() const { return staticGetName(); } static const char* staticGetName() { return "frob"; } }; namespace { typedef NameFactory SplitFactory; SplitFactory getSplitFactory() { SplitFactory factory("Slice split strategy"); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); nameFactoryRegister(factory); return factory; } } auto_ptr SplitStrategy::createStrategy(const string& prefix) { auto_ptr split = createWithPrefix(getSplitFactory(), prefix); ASSERT(split.get() != 0); return split; } frobby-0.9.5/src/SplitStrategy.h000066400000000000000000000052331401527164200165730ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SPLIT_STRATEGY_GUARD #define SPLIT_STRATEGY_GUARD class Term; class Slice; class Ideal; class TermGrader; /** A SplitStrategy is an implementation of a split selection strategy for the Slice Algorithm. Specifically, it makes a decision about what kind of splits to perform, and how to make any choices involved in performing such a split. */ class SplitStrategy { public: virtual ~SplitStrategy(); /** Sets pivot to the pivot of a pivot split on slice. The slice is not changed mathematically, but e.g. the generators may be permuted. This method must only be called if isPivotSplit() returns true. */ virtual void getPivot(Term& pivot, Slice& slice) const = 0; /** Sets pivot to the pivot of a pivot split on slice. Some pivot selection strategies make use of a grading. The slice is not changed mathematically, but e.g. the generators may be permuted. This method must only be called if isPivotSplit() returns true. */ virtual void getPivot(Term& pivot, Slice& slice, const TermGrader& grader) const = 0; /** Returns the variable to perform a label split on. This method must only be called if isLabelSplit() returns true. */ virtual size_t getLabelSplitVariable(const Slice& slice) const = 0; /** If returns true, only call getPivot. */ virtual bool isPivotSplit() const = 0; /** If returns true, only call getLabelSplitVariable. */ virtual bool isLabelSplit() const = 0; /** Returns the name of the strategy. */ virtual const char* getName() const = 0; /** Returns the strategy whose name has the given prefix. This is the only way to create a SplitStrategy. */ static auto_ptr createStrategy(const string& prefix); protected: SplitStrategy(); // To make these inaccessible. They are not implemented. SplitStrategy(const SplitStrategy&); SplitStrategy& operator=(const SplitStrategy&); bool operator==(const SplitStrategy&); }; #endif frobby-0.9.5/src/SquareFreeIdeal.cpp000066400000000000000000000060711401527164200173120ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "SquareFreeIdeal.h" #include "RawSquareFreeIdeal.h" #include "Ideal.h" #include "BigIdeal.h" SquareFreeIdeal::SquareFreeIdeal(): _ideal(0), _capacity(0) {} SquareFreeIdeal::SquareFreeIdeal (const SquareFreeIdeal& ideal, size_t capacity): _names(ideal.getNames()) { _capacity = capacity; if (_capacity < ideal.getGeneratorCount()) _capacity = ideal.getGeneratorCount(); _ideal = newRawSquareFreeIdeal(_names.getVarCount(), _capacity); _ideal->insert(*ideal._ideal); } SquareFreeIdeal::SquareFreeIdeal(const BigIdeal& ideal): _names(ideal.getNames()) { _capacity = ideal.getGeneratorCount(); _ideal = newRawSquareFreeIdeal(_names.getVarCount(), _capacity); _ideal->insert(ideal); } SquareFreeIdeal::~SquareFreeIdeal() { clear(); } SquareFreeIdeal& SquareFreeIdeal::operator=(const BigIdeal& ideal) { SquareFreeIdeal copy(ideal); swap(copy); return *this; } void SquareFreeIdeal::minimize() { ASSERT(_ideal != 0); _ideal->minimize(); } void SquareFreeIdeal::renameVars(const VarNames& names) { ASSERT(_ideal != 0); ASSERT(_names.getVarCount() == names.getVarCount()); _names = names; } void SquareFreeIdeal::insertIdentity() { if (getGeneratorCount() == getCapacity()) reserve(getCapacity() == 0 ? 16 : getCapacity() * 2); _ideal->insertIdentity(); } void SquareFreeIdeal::insert(Word* term) { ASSERT(term != 0); ASSERT(getGeneratorCount() <= getCapacity()); if (getGeneratorCount() == getCapacity()) reserve(getCapacity() == 0 ? 16 : getCapacity() * 2); ASSERT(getGeneratorCount() < getCapacity()); _ideal->insert(term); } bool SquareFreeIdeal::insert(const std::vector& term) { ASSERT(term.size() == getVarCount()); ASSERT(getGeneratorCount() <= getCapacity()); if (getGeneratorCount() == getCapacity()) reserve(getCapacity() == 0 ? 16 : getCapacity() * 2); ASSERT(getGeneratorCount() < getCapacity()); return _ideal->insert(term); } void SquareFreeIdeal::clear() { _names.clear(); deleteRawSquareFreeIdeal(_ideal); _ideal = 0; _capacity = 0; } void SquareFreeIdeal::swap(SquareFreeIdeal& ideal) { std::swap(_names, ideal._names); std::swap(_ideal, ideal._ideal); std::swap(_capacity, ideal._capacity); } void SquareFreeIdeal::reserve(size_t capacity) { if (getCapacity() < capacity) SquareFreeIdeal(*this, capacity).swap(*this); } frobby-0.9.5/src/SquareFreeIdeal.h000066400000000000000000000053251401527164200167600ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2011 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef SQUARE_FREE_IDEAL_GUARD #define SQUARE_FREE_IDEAL_GUARD #include "VarNames.h" #include "RawSquareFreeIdeal.h" class BigIdeal; class SquareFreeIdeal { public: SquareFreeIdeal(); SquareFreeIdeal(const SquareFreeIdeal& ideal, size_t capacity); SquareFreeIdeal(const BigIdeal& ideal); ~SquareFreeIdeal(); SquareFreeIdeal& operator=(const BigIdeal& ideal); void minimize(); void renameVars(const VarNames& names); void insert(Word* term); void insertIdentity(); /** Returns false if the strings in term are not all "", "1" or "0". */ bool insert(const std::vector& term); /** Change 0 exponents into 1 and vice versa. */ void swap01Exponents() {_ideal->swap01Exponents();} void clear(); void swap(SquareFreeIdeal& ideal); void reserve(size_t capacity); const VarNames& getNames() const {return _names;} size_t getVarCount() const; size_t getGeneratorCount() const; size_t getCapacity() const {return _capacity;} Word* back() {return _ideal->back();} const Word* back() const {return _ideal->back();} typedef RawSquareFreeIdeal::iterator iterator; iterator begin() {return _ideal->begin();} iterator end() {return _ideal->end();} typedef RawSquareFreeIdeal::const_iterator const_iterator; const_iterator begin() const {return _ideal->begin();} const_iterator end() const {return _ideal->end();} const RawSquareFreeIdeal* getRawIdeal() const {return _ideal;} RawSquareFreeIdeal* getRawIdeal() {return _ideal;} private: SquareFreeIdeal(const SquareFreeIdeal&); // not available SquareFreeIdeal& operator=(const SquareFreeIdeal&); // not available VarNames _names; RawSquareFreeIdeal* _ideal; size_t _capacity; }; inline size_t SquareFreeIdeal::getVarCount() const { ASSERT(_ideal != 0); ASSERT(_names.getVarCount() == _ideal->getVarCount()); return _names.getVarCount(); } inline size_t SquareFreeIdeal::getGeneratorCount() const { ASSERT(_ideal != 0); return _ideal->getGeneratorCount(); } #endif frobby-0.9.5/src/StatisticsStrategy.cpp000066400000000000000000000106221401527164200201630ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "StatisticsStrategy.h" #include "Slice.h" #include StatisticsStrategy::StatisticsStrategy(SliceStrategy* strategy, FILE* out): _strategy(strategy), _out(out), _internalTracker("internal nodes"), _leafTracker("leaf nodes") { ASSERT(strategy != 0); } StatisticsStrategy::~StatisticsStrategy() { } void StatisticsStrategy::run(const Ideal& ideal) { _strategy->run(ideal); fputs("**** Slice Algorithm Statistics ****\n", _out); _internalTracker.printReport(_out); _leafTracker.printReport(_out); } bool StatisticsStrategy::processSlice (TaskEngine& tasks, auto_ptr slice) { _internalTracker.preliminaryRecord(*slice); _leafTracker.preliminaryRecord(*slice); bool wasBaseCase = _strategy->processSlice(tasks, slice); if (wasBaseCase) _leafTracker.commitRecord(); else _internalTracker.commitRecord(); return wasBaseCase; } void StatisticsStrategy::setUseIndependence(bool use) { _strategy->setUseIndependence(use); } void StatisticsStrategy::setUseSimplification(bool use) { _strategy->setUseSimplification(use); } bool StatisticsStrategy::getUseSimplification() const { return _strategy->getUseSimplification(); } void StatisticsStrategy::freeSlice(auto_ptr slice) { _strategy->freeSlice(slice); } StatisticsStrategy::StatTracker::StatTracker(const string& title): _title(title) { } void StatisticsStrategy::StatTracker::preliminaryRecord(const Slice& slice) { _prelimIdealGenCount = slice.getIdeal().getGeneratorCount(); _prelimSubGenCount = slice.getSubtract().getGeneratorCount(); _prelimVarCount = slice.getVarCount(); } void StatisticsStrategy::StatTracker::commitRecord() { ++_nodeCount; _idealGenSum += _prelimIdealGenCount; _subGenSum += _prelimSubGenCount; _varSum += _prelimVarCount; size_t genCountLog2 = 0; if (_prelimIdealGenCount > 0) genCountLog2 = (size_t)(log((double)_prelimIdealGenCount) / log((double)2)); _nodesByGenCount[genCountLog2] += 1; } void StatisticsStrategy::StatTracker::printReport(FILE* out) const { fprintf(out, "|-%s:\n", _title.c_str()); gmp_fprintf(out, " | %Zd nodes\n", getNodeCount().get_mpz_t()); fprintf(out, " | %f generators of ideal on avg.\n", getAvgIdealGenCount()); fprintf(out, " | %f generators of subtract on avg.\n", getAvgSubGenCount()); fprintf(out, " | %f variables of ambient ring on avg.\n", getAvgVarCount()); if (!_nodesByGenCount.empty()) { fputs(" |- nodes by log base 2 of ideal generator count:\n", out); size_t genCountLog2 = _nodesByGenCount.rbegin()->first; while (true) { mpz_class nodeCount = 0; map::const_iterator it = _nodesByGenCount.find(genCountLog2); if (it != _nodesByGenCount.end()) nodeCount = it->second; gmp_fprintf(out, " | %Zd nodes has log2(#gens) = %Zd.\n", nodeCount.get_mpz_t(), mpz_class(genCountLog2).get_mpz_t()); if (genCountLog2 == 0) break; --genCountLog2; } } } const mpz_class& StatisticsStrategy::StatTracker::getNodeCount() const { return _nodeCount; } double StatisticsStrategy::StatTracker::getAvgIdealGenCount() const { if (_nodeCount == 0) return 0.0; else { mpq_class q = mpq_class(_idealGenSum) / _nodeCount; return q.get_d(); } } double StatisticsStrategy::StatTracker::getAvgSubGenCount() const { if (_nodeCount == 0) return 0.0; else { mpq_class q = mpq_class(_subGenSum) / _nodeCount; return q.get_d(); } } double StatisticsStrategy::StatTracker::getAvgVarCount() const { if (_nodeCount == 0) return 0.0; else { mpq_class q = mpq_class(_varSum) / _nodeCount; return q.get_d(); } } frobby-0.9.5/src/StatisticsStrategy.h000066400000000000000000000054351401527164200176360ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef STATISTICS_STRATEGY #define STATISTICS_STRATEGY #include "SliceStrategy.h" #include /** A wrapper for a SliceStrategy that collects statistics on what is going on, while delegating everything to the strategy being wrapped. */ class StatisticsStrategy : public SliceStrategy { public: /** Statistics are written to out, and every call is delegated to strategy. */ StatisticsStrategy(SliceStrategy* strategy, FILE* out); virtual ~StatisticsStrategy(); virtual void run(const Ideal& ideal); virtual bool processSlice(TaskEngine& tasks, auto_ptr slice); virtual void setUseIndependence(bool use); virtual void setUseSimplification(bool use); virtual bool getUseSimplification() const; virtual void freeSlice(auto_ptr slice); private: SliceStrategy* _strategy; FILE* _out; /** Tracks statistics on slices. */ struct StatTracker { /** The title parameter indicates what is to be printed when calling printReport(). */ StatTracker(const string& title); /** Record information about slice, but store it only until this method is next called on this object. */ void preliminaryRecord(const Slice& slice); /** Commit the most recent argument to preliminaryTrack permanently to the record. */ void commitRecord(); /** Print a report on statistics of the recorded slices to the file out. */ void printReport(FILE* out) const; const mpz_class& getNodeCount() const; double getAvgIdealGenCount() const; double getAvgSubGenCount() const; double getAvgVarCount() const; private: string _title; size_t _prelimIdealGenCount; size_t _prelimSubGenCount; size_t _prelimVarCount; mpz_class _nodeCount; mpz_class _idealGenSum; mpz_class _subGenSum; mpz_class _varSum; /** _nodesByGenCount[l] records how many slices have been recorded whose ideal has approximately 2^l generators. */ map _nodesByGenCount; }; StatTracker _internalTracker; StatTracker _leafTracker; }; #endif frobby-0.9.5/src/StringParameter.cpp000066400000000000000000000026141401527164200174170ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "StringParameter.h" StringParameter::StringParameter(const string& name, const string& description, const string& defaultValue): Parameter(name, description), _value(defaultValue) { } string StringParameter::doGetArgumentType() const { return "STRING"; } string StringParameter::doGetValueAsString() const { return _value; } pair StringParameter::doGetArgumentCountRange() const { return make_pair(1, 1); } void StringParameter::doProcessArguments(const char** args, size_t argCount) { ASSERT(argCount == 1); _value = args[0]; } frobby-0.9.5/src/StringParameter.h000066400000000000000000000031221401527164200170570ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef STRING_PARAMETER_GUARD #define STRING_PARAMETER_GUARD #include "Parameter.h" #include #include class StringParameter : public Parameter { public: StringParameter(const string& name, const string& description, const string& defaultValue); const string& getValue() const {return _value;} void setValue(const string& value) {_value = value;} operator const string&() const {return getValue();} void operator=(const string& value) {setValue(value);} bool operator==(const string& str) const {return getValue() == str;} private: virtual string doGetArgumentType() const; virtual string doGetValueAsString() const; virtual pair doGetArgumentCountRange() const; virtual void doProcessArguments(const char** args, size_t argCount); string _value; }; #endif frobby-0.9.5/src/Task.cpp000066400000000000000000000015521401527164200152120ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Task.h" Task::~Task() { } frobby-0.9.5/src/Task.h000066400000000000000000000027261401527164200146630ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TASK_GUARD #define TASK_GUARD class TaskEngine; /** A Task object represents a unit of work that is performed when the method run() is called. Tasks are intended to be used with a TaskEngine. */ class Task { public: virtual ~Task(); /** Does whatever work this task represents. The parameter can be used to schedule additional tasks. */ virtual void run(TaskEngine& engine) = 0; /** Called when the task is no longer used but run has not and will not be called. This can happen from a destructor being called due to an exception, so dispose must not throw an exception under any circumstances. */ virtual void dispose() = 0; }; #endif frobby-0.9.5/src/TaskEngine.cpp000066400000000000000000000035701401527164200163420ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TaskEngine.h" #include "Task.h" #include "display.h" TaskEngine::TaskEngine(): _totalTasksEver(0) { } TaskEngine::~TaskEngine() { while (!_tasks.empty()) { dispose(_tasks.back()); _tasks.pop_back(); } } void TaskEngine::addTask(Task* task) { ASSERT(task != 0); try { _tasks.push_back(task); } catch (...) { // We should only get an exception if insertion failed. ASSERT(_tasks.empty() || _tasks.back() != task); dispose(task); throw; } ++_totalTasksEver; } bool TaskEngine::runNextTask() { if (_tasks.empty()) return false; Task* task = _tasks.back(); _tasks.pop_back(); task->run(*this); return true; } void TaskEngine::runTasks() { while (runNextTask()) ; } size_t TaskEngine::getTotalTasksEver() { return _totalTasksEver; } void TaskEngine::dispose(Task* task) { ASSERT(task != 0); try { task->dispose(); } catch (...) { displayInternalError("Task::dispose() threw an exception."); ASSERT(false); throw; // Lesser evil compared to ignoring the exception. } } frobby-0.9.5/src/TaskEngine.h000066400000000000000000000052311401527164200160030ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TASK_ENGINE_GUARD #define TASK_ENGINE_GUARD #include class Task; /** TaskEngine handles a list of tasks that are to be carried out. Pending tasks are run in last-in-first-out order. TaskEngine passes itself to tasks that are run so that tasks can schedule more tasks. Using TaskEngine is an alternative to using recursion to schedule sub-computations. TaskEngine does what the stack would do in a recursive computation. An advantage of TaskEngine over recursion is that stack overflow does not occur. The maximum number of pending tasks is limited only by the size of the memory. TaskEngine is also the first step towards an implementation where sub-computations can be run in parallel. At that time TaskEngine will need support for specifying dependencies among tasks. */ class TaskEngine { public: TaskEngine(); ~TaskEngine(); /** Add a task at the head of the list of pending tasks. TaskEngine guarantees to call either run() or dispose() on the task at some point. It is allowed to add the same task several times, though then run() or dispose() will be called as many times as the task has been added. */ void addTask(Task* task); /** Run the most recently added task that has not been run yet. Returns true if a task has been run. Returns false if there are no pending tasks. */ bool runNextTask(); /** Runs all pending tasks. If a task adds new tasks, those are run as well. */ void runTasks(); /** Returns the number of times addTask has been successfully called. This value may overflow if it becomes too large to contain in a size_t. */ size_t getTotalTasksEver(); private: void dispose(Task* task); /** This is used for statistics so that it is not a disaster if this overflows for very long-running computations. */ size_t _totalTasksEver; vector _tasks; }; #endif frobby-0.9.5/src/Term.cpp000066400000000000000000000057631401527164200152270ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Term.h" #include "TermPredicate.h" #include #include const unsigned int PoolCount = 50; const unsigned int ObjectPoolSize = 1000; Term::Term(const string& str): _exponents(0), _varCount(0) { istringstream in(str); vector exponents; mpz_class ex; while (in >> ex) { ASSERT(ex.fits_uint_p()); exponents.push_back(ex.get_ui()); } if (!exponents.empty()) initialize(&(exponents[0]), exponents.size()); } namespace { struct ObjectPool { ObjectPool(): objectsStored(0), objects(0) {} void ensureInit() { if (objects == 0) objects = new Exponent*[ObjectPoolSize]; } bool empty() const { return objectsStored == 0; } bool canStoreMore() const { return objectsStored < ObjectPoolSize; } Exponent* removeObject() { ASSERT(!empty()); --objectsStored; return objects[objectsStored]; } void addObject(Exponent* object) { ASSERT(canStoreMore()); ASSERT(objects != 0); objects[objectsStored] = object; ++objectsStored; } ~ObjectPool() { if (objects == 0) return; for (size_t i = 0; i < objectsStored; ++i) delete[] objects[i]; delete[] objects; } unsigned int objectsStored; Exponent** objects; } pools[PoolCount]; } Exponent* Term::allocate(size_t size) { ASSERT(size > 0); if (size < PoolCount) { pools[size].ensureInit(); if (!pools[size].empty()) return pools[size].removeObject(); } return new Exponent[size]; } void Term::deallocate(Exponent* p, size_t size) { if (p == 0) return; ASSERT(size > 0); if (size < PoolCount && pools[size].canStoreMore()) pools[size].addObject(p); else delete[] p; } void Term::print(FILE* file, const Exponent* e, size_t varCount) { ostringstream out; print(out, e, varCount); fputs(out.str().c_str(), file); } void Term::print(ostream& out, const Exponent* e, size_t varCount) { ASSERT(e != 0 || varCount == 0); out << '('; for (size_t var = 0; var < varCount; ++var) { if (var != 0) out << ", "; out << e[var]; } out << ')'; } bool Term::operator==(const Exponent* term) const { return equals(begin(), term, getVarCount()); } frobby-0.9.5/src/Term.h000066400000000000000000000436611401527164200146730ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TERM_GUARD #define TERM_GUARD #include /** Term represents a product of variables which does not include a coefficient. This concept is also sometimes called a monomial or power product. A term is represented as an array of Exponent and an integer indicating the length of the array, i.e. the number of variables. It is sometimes desirable to separate the length from the array, e.g. when representing an array of terms all of the same length, such as in representing the generators of a monomial ideal, in which case representing the length once for each generator would be wasteful. Thus Term has static versions of most methods where the number of variables is a separate parameter. In these cases it is allowed for the exponent array pointer to be null (i.e. equal to 0) if the length is zero. Most methods on Term are inline to avoid function call overhead. This is significant because these methods tend to be called in the innermost loops of monomial ideal algorithms. @todo Move the inline code out of the class declaration and add them as inline below the class declaration. @todo Duplicate the comments for overloads using the copydoc Doxygen command. @todo Rename term.h to Term.h. */ class Term { public: Term(): _exponents(0), _varCount(0) {} Term(const Term& term) {initialize(term._exponents, term._varCount);} Term(const Exponent* exponents, size_t varCount) { initialize(exponents, varCount); } /** This object is initialized to the identity, i.e.\ the exponent vector is the zero vector. */ Term(size_t varCount): _varCount(varCount) { if (varCount > 0) { _exponents = allocate(varCount); setToIdentity(); } else _exponents = 0; } /** Accepts a whitespace-separated list of integers as exponent vector. */ Term(const string& str); ~Term() {deallocate(_exponents, _varCount);} operator Exponent*() {return _exponents;} operator const Exponent*() const {return _exponents;} Exponent* begin() {return _exponents;} const Exponent* begin() const {return _exponents;} Exponent* end() {return _exponents + _varCount;} const Exponent* end() const {return _exponents + _varCount;} size_t getVarCount() const {return _varCount;} // We need all these versions to make everything work out on // different platforms. Exponent operator[](int offset) const { ASSERT(0 <= offset); ASSERT((unsigned int)offset < _varCount); return _exponents[offset]; } Exponent operator[](unsigned int offset) const { ASSERT(offset < _varCount); return _exponents[offset]; } Exponent operator[](unsigned long offset) const { ASSERT(offset < _varCount); return _exponents[offset]; } Exponent operator[](unsigned long long offset) const { ASSERT(offset < _varCount); return _exponents[offset]; } Exponent& operator[](int offset) { ASSERT(0 <= offset); ASSERT((unsigned int)offset < _varCount); return _exponents[offset]; } Exponent& operator[](unsigned int offset) { ASSERT(offset < _varCount); return _exponents[offset]; } Exponent& operator[](unsigned long offset) { ASSERT(offset < _varCount); return _exponents[offset]; } Exponent& operator[](unsigned long long offset) { ASSERT(offset < _varCount); return _exponents[offset]; } bool operator==(const Term& term) const { ASSERT(_varCount == term._varCount); return (*this) == term._exponents; } bool operator==(const Exponent* term) const; bool operator!=(const Term& term) const {return !(*this == term);} bool operator!=(const Exponent* term) const {return !(*this == term);} Term& operator=(const Term& term) { if (_varCount != term._varCount) { Exponent* newBuffer = allocate(term._varCount); deallocate(_exponents, _varCount); _exponents = newBuffer; _varCount = term._varCount; } ASSERT(_varCount == term._varCount); return (*this) = term._exponents; } Term& operator=(const Exponent* exponents) { IF_DEBUG(if (_varCount > 0)) // avoid copy asserting on null pointer copy(exponents, exponents + _varCount, _exponents); return *this; } /** Returns whether a divides b. */ inline static bool divides(const Exponent* a, const Exponent* b, size_t varCount) { ASSERT(a != 0 || varCount == 0); ASSERT(b != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) if (a[var] > b[var]) return false; return true; } bool divides(const Term& term) const { ASSERT(_varCount == term._varCount); return divides(_exponents, term._exponents, _varCount); } bool divides(const Exponent* term) const { return divides(_exponents, term, _varCount); } /** Returns whether a dominates b, i.e.\ whether b divides a. */ inline static bool dominates(const Exponent* a, const Exponent* b, size_t varCount) { ASSERT(a != 0 || varCount == 0); ASSERT(b != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) if (a[var] < b[var]) return false; return true; } bool dominates(const Term& term) const { ASSERT(_varCount == term._varCount); return dominates(_exponents, term._exponents, _varCount); } bool dominates(const Exponent* term) const { return dominates(_exponents, term, _varCount); } /** Returns whether a strictly divides b. \f$a\f$ strictly divides \f$b\f$ if \f$a * gcd(a, x_1...x_n)\f$ divides \f$b\f$ and \f$b\neq 1\f$, i.e.\ if, for each \f$i\f$, \f$u_i= b[var] && a[var] != 0) return false; if (b[var] != 0) bIsIdentity = false; } return !bIsIdentity; } bool strictlyDivides(const Term& term) const { ASSERT(_varCount == term._varCount); return strictlyDivides(_exponents, term._exponents, _varCount); } bool strictlyDivides(const Exponent* term) const { return strictlyDivides(_exponents, term, _varCount); } /** Sets res equal to the least commom multiple of a and b. */ inline static void lcm(Exponent* res, const Exponent* a, const Exponent* b, size_t varCount) { ASSERT(res != 0 || varCount == 0); ASSERT(a != 0 || varCount == 0); ASSERT(b != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) { if (a[var] > b[var]) res[var] = a[var]; else res[var] = b[var]; } } void lcm(const Term& a, const Term& b, int position) { ASSERT(_varCount == a._varCount); ASSERT(_varCount == b._varCount); lcm(_exponents + position, a._exponents + position, b._exponents + position, _varCount - position); } void lcm(const Term& a, const Term& b) { ASSERT(_varCount == a._varCount); ASSERT(_varCount == b._varCount); lcm(_exponents, a._exponents, b._exponents, _varCount); } void lcm(const Exponent* a, const Exponent* b) { lcm(_exponents, a, b, _varCount); } /** Sets res equal to the greatest common divisor of a and b. */ inline static void gcd(Exponent* res, const Exponent* a, const Exponent* b, size_t varCount) { ASSERT(res != 0 || varCount == 0); ASSERT(a != 0 || varCount == 0); ASSERT(b != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) { if (a[var] < b[var]) res[var] = a[var]; else res[var] = b[var]; } } void gcd(const Term& a, const Term& b) { ASSERT(_varCount == a._varCount); ASSERT(_varCount == b._varCount); gcd(a._exponents, b._exponents); } void gcd(const Exponent* a, const Exponent* b) { gcd(_exponents, a, b, _varCount); } /** Sets res equal to the product of a and b. */ inline static void product(Exponent* res, const Exponent* a, const Exponent* b, size_t varCount) { ASSERT(res != 0 || varCount == 0); ASSERT(a != 0 || varCount == 0); ASSERT(b != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) res[var] = a[var] + b[var]; } /** Set this object equal to the product of a and b. */ void product(const Term& a, const Term& b) { ASSERT(_varCount == a._varCount); ASSERT(_varCount == b._varCount); product(_exponents, a._exponents, b._exponents, _varCount); } void product(const Exponent* a, const Exponent* b) { product(_exponents, a, b, _varCount); } /** Set res equal to \f$1=x^{(0,\ldots,0)}\f$, i.e.\ set each entry of res equal to 0. */ inline static void setToIdentity(Exponent* res, size_t varCount) { ASSERT(res != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) res[var] = 0; } void setToIdentity() { setToIdentity(_exponents, _varCount); } /** Returns whether a is 1, i.e.\ whether all entries of a are 0. */ inline static bool isIdentity(const Exponent* a, size_t varCount) { ASSERT(a != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) if (a[var] != 0) return false; return true; } bool isIdentity() const { return isIdentity(_exponents, _varCount); } /** Returns whether a is square free, i.e.\ \f$v_i\leq 1\f$ for each \f$i\f$ where \f$a=x^v\f$. */ inline static bool isSquareFree(const Exponent* a, size_t varCount) { ASSERT(a != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) if (a[var] >= 2) return false; return true; } bool isSquareFree() const { return isSquareFree(_exponents, _varCount); } /** Returns least var such that a[var] is non-zero. Returns varCount if the entries of a are all zero. */ inline static size_t getFirstNonZeroExponent(const Exponent* a, size_t varCount) { ASSERT(a != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) if (a[var] != 0) return var; return varCount; } size_t getFirstNonZeroExponent() const { return getFirstNonZeroExponent(_exponents, _varCount); } /** Returns a median element of the set of var's such that a[var] is non-zero. Returns varCount is the entries of a are all zero. */ inline static size_t getMiddleNonZeroExponent(const Exponent* a, size_t varCount) { ASSERT(a != 0 || varCount == 0); size_t nonZeroOffset = getSizeOfSupport(a, varCount) / 2; for (size_t var = 0; var < varCount; ++var) { if (a[var] != 0) { if (nonZeroOffset == 0) return var; --nonZeroOffset; } } ASSERT(isIdentity(a, varCount)); return varCount; } size_t getMiddleNonZeroExponent() const { return getMiddleNonZeroExponent(_exponents, _varCount); } /** Returns a var such that a[var] >= a[i] for all i. */ inline static size_t getFirstMaxExponent(const Exponent* a, size_t varCount) { ASSERT(a != 0 || varCount == 0); size_t max = 0; for (size_t var = 1; var < varCount; ++var) if (a[max] < a[var]) max = var; return max; } size_t getFirstMaxExponent() const { return getFirstMaxExponent(_exponents, _varCount); } size_t getMaxExponent() const { ASSERT(_varCount > 0); return _exponents[getFirstMaxExponent()]; } /** Returns the number of variables \f$x_i\f$ such that \f$x_i\f$ divides \f$a\f$. */ inline static size_t getSizeOfSupport(const Exponent* a, size_t varCount) { ASSERT(a != 0 || varCount == 0); size_t size = 0; for (size_t var = 0; var < varCount; ++var) if (a[var] != 0) ++size; return size; } size_t getSizeOfSupport() const { return getSizeOfSupport(_exponents, _varCount); } /** Returns whether there is some \f$i\f$ such that \f$a_i=b_i>0\f$. */ static bool sharesNonZeroExponent(const Exponent* a, const Exponent* b, size_t varCount) { for (size_t var = 0; var < varCount; ++var) if (a[var] != 0 && a[var] == b[var]) return true; return false; } inline static size_t getHashCode(const Exponent* a, size_t varCount) { size_t hashCode = varCount; for (size_t var = 0; var < varCount; ++var) hashCode = 31 * hashCode + a[var]; return hashCode; } size_t getHashCode() const { return getHashCode(_exponents, _varCount); } bool sharesNonZeroExponent(const Exponent* a) const { return sharesNonZeroExponent(_exponents, a, _varCount); } bool sharesNonZeroExponent(const Term& a) const { return sharesNonZeroExponent(a._exponents); } /** Returns whether \f$x_i|a\Leftrightarrow x_i|b\f$ for every variable \f$x_i\f$. */ inline static bool hasSameSupport(const Exponent* a, const Exponent* b, size_t varCount) { ASSERT(a != 0 || varCount == 0); ASSERT(b != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) { if (a[var] == 0) { if (b[var] != 0) return false; } else { ASSERT(a[var] != 0); if (b[var] == 0) return false; } } return true; } bool hasSameSupport(const Term& a) const { ASSERT(_varCount == a._varCount); return hasSameSupport(a._exponents); } bool hasSameSupport(const Exponent* a) const { return hasSameSupport(_exponents, a, _varCount); } /** Sets res equal to \f$a : b\f$. \f$a : b\f$ is read as "a colon b", and it is defined as \f$lcm(a, b) / b\f$. */ inline static void colon(Exponent* res, const Exponent* a, const Exponent* b, size_t varCount) { ASSERT(res != 0 || varCount == 0); ASSERT(a != 0 || varCount == 0); ASSERT(b != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) { if (a[var] > b[var]) res[var] = a[var] - b[var]; else res[var] = 0; } } void colon(const Term& a, const Term& b) { ASSERT(_varCount == a._varCount); ASSERT(_varCount == b._varCount); colon(a._exponents, b._exponents); } void colon(const Exponent* a, const Exponent* b) { colon(_exponents, a, b, _varCount); } /** The parameter dualOf is interpreted to encode an irreducible ideal, and the dual of that reflected in point is a principal ideal. The generated of this ideal is written to res. This requires that dualOf divides point, as otherwise that dual is not defined. */ inline static void encodedDual(Exponent* res, const Exponent* dualOf, const Exponent* point, size_t varCount) { ASSERT(res != 0 || varCount == 0); ASSERT(dualOf != 0 || varCount == 0); ASSERT(point != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) { ASSERT(dualOf[var] <= point[var]); if (dualOf[var] != 0) res[var] = point[var] - dualOf[var] + 1; else res[var] = 0; } } void encodedDual(const Term& dualOf, const Term& point) { ASSERT(_varCount == dualOf._varCount); ASSERT(_varCount == point._varCount); encodedDual(dualOf._exponents, point._exponents); } void encodedDual(const Exponent* dualOf, const Exponent* point) { encodedDual(_exponents, dualOf, point, _varCount); } /** Decrements each positive entry of a by one. */ inline static void decrement(Exponent* a, size_t varCount) { ASSERT(a != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) if (a[var] > 0) a[var] -= 1; } void decrement() { decrement(_exponents, _varCount); } void swap(Term& term) { std::swap(_varCount, term._varCount); Exponent* tmp = _exponents; _exponents = term._exponents; term._exponents = tmp; } void reset(size_t newVarCount) { if (newVarCount != _varCount) { Exponent* newBuffer = allocate(newVarCount); deallocate(_exponents, _varCount); _varCount = newVarCount; _exponents = newBuffer; } setToIdentity(); } void clear() { deallocate(_exponents, _varCount); _exponents = 0; _varCount = 0; } /** Writes e to file in a format suitable for debug output. */ static void print(FILE* file, const Exponent* e, size_t varCount); /** Writes e to out in a format suitable for debug output. */ static void print(ostream& out, const Exponent* e, size_t varCount); void print(FILE* file) const { print(file, _exponents, _varCount); } void print(ostream& out) const { print(out, _exponents, _varCount); } private: static Exponent* allocate(size_t size); static void deallocate(Exponent* p, size_t size); void initialize(const Exponent* exponents, size_t varCount) { if (varCount > 0) { ASSERT(exponents != 0); _exponents = allocate(varCount); copy(exponents, exponents + varCount, _exponents); } else _exponents = 0; _varCount = varCount; } Exponent* _exponents; size_t _varCount; }; inline void swap(Term& a, Term& b) { a.swap(b); } inline ostream& operator<<(ostream& out, const Term& term) { term.print(out); return out; } #endif frobby-0.9.5/src/TermConsumer.cpp000066400000000000000000000023611401527164200167320ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TermConsumer.h" #include "Term.h" #include "Ideal.h" TermConsumer::~TermConsumer() { } void TermConsumer::consumeRing(const VarNames& names) { } void TermConsumer::beginConsumingList() { } void TermConsumer::doneConsumingList() { } void TermConsumer::consume(const Ideal& ideal) { beginConsuming(); Term tmp(ideal.getVarCount()); for (size_t term = 0; term < ideal.getGeneratorCount(); ++term) { tmp = ideal[term]; consume(tmp); } doneConsuming(); } frobby-0.9.5/src/TermConsumer.h000066400000000000000000000054311401527164200164000ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TERM_CONSUMER_GUARD #define TERM_CONSUMER_GUARD class Term; class VarNames; class Ideal; /** This class is used to transfer terms one at a time from one part of the program to another, and possibly to perform computations on those terms. These can be divided into ideals (lists of terms) and lists of ideals. Using a consumer for output, for example, allows to move the output from memory onto the disk without having to wait for the entire computation to be done, while still making it possible to store the output in memory in a convenient form just by using a different consumer. @todo: consider merging this with BigTermConsumer; */ class TermConsumer { public: virtual ~TermConsumer(); /** Tell the consumer which ring is being used. */ virtual void consumeRing(const VarNames& names); /** Tell the consumer that the ideals that are consumed until the next call to doneConsumingList are to be considered as one list of ideals, rather than as a number of separate ideals. The default implementation is to ignore this, but the consumer is free to do something special in this case. It is thus not in general required to call this method, but if you don't, make sure that every consumer that you want to use does what you want if you output more than a single ideal. */ virtual void beginConsumingList(); /** Tell the consumer to begin consuming an ideal. It is required to call this method before calling consume(). */ virtual void beginConsuming() = 0; /** Consume a term. */ virtual void consume(const Term& term) = 0; /** Must be called once after each time beginConsuming has been called. */ virtual void doneConsuming() = 0; /** Must be called once after each time beginConsumingList has been called. */ virtual void doneConsumingList(); /** This is a non-virtual utility method that calls the other methods to achieve its effect of calling beginConsuming, then consuming all generators, and then calling doneConsuming. */ void consume(const Ideal& ideal); }; #endif frobby-0.9.5/src/TermExtra.cpp000066400000000000000000000042441401527164200162240ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TermExtra.h" #include #include Exponent median(const Exponent* a, size_t varCount) { if (varCount == 0) return 0; Term t(a, varCount); Exponent* middle = t.begin() + varCount / 2; nth_element(t.begin(), middle, t.end()); return *middle; } Exponent medianPositive(const Exponent* a, size_t varCount) { vector exps; exps.reserve(varCount); for (size_t var = 0; var < varCount; ++var) if (a[var] > 0) exps.push_back(a[var]); if (exps.empty()) return 0; vector::iterator middle = exps.begin() + exps.size() / 2; nth_element(exps.begin(), middle, exps.end()); return *middle; } void totalDegree(mpz_class& res, const Exponent* a, size_t varCount) { res = a[0]; for (size_t var = 1; var < varCount; ++var) res += a[var]; } Exponent minimumPositive(const Exponent* a, size_t varCount) { for (size_t var = 0; var < varCount; ++var) { if (a[var] != 0) { Exponent min = a[var]; for (; var < varCount; ++var) if (a[var] != 0 && a[var] < min) min = a[var]; return min; } } return 0; } Exponent maximum(const Exponent* a, size_t varCount) { Exponent max = 0; for (size_t var = 0; var < varCount; ++var) if (a[var] > max) max = a[var]; return max; } frobby-0.9.5/src/TermExtra.h000066400000000000000000000046751401527164200157010ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TERM_EXTRA_GUARD #define TERM_EXTRA_GUARD #include "Term.h" /** @file This file contains additional operations involving Term that are less commonly used. This makes Term.h smaller which cuts down on compilation and especially recompilation time since Term.h is included in many places. */ /** Returns the lower median exponent of a. Returns zero if varCount is zero. */ Exponent median(const Exponent* a, size_t varCount); inline Exponent median(const Term& a) { return median(a.begin(), a.getVarCount()); } /** Returns the lower median of the positive exponents of a. Returns zero if all terms of a are zero. */ Exponent medianPositive(const Exponent* a, size_t varCount); inline Exponent medianPositive(const Term& a) { return medianPositive(a.begin(), a.getVarCount()); } /** Puts the sum of the entries of a into res. res has to be an mpz_class as opposed to an Exponent since the sum could cause an overflow. */ void totalDegree(mpz_class& res, const Exponent* a, size_t varCount); inline void totalDegree(mpz_class& res, const Term& a) { totalDegree(res, a.begin(), a.getVarCount()); } /** Returns the smallest positive exponent of a. Returns zero if all entries of a are zero. */ Exponent minimumPositive(const Exponent* a, size_t varCount); inline Exponent minimumPositive(const Term& a) { return minimumPositive(a.begin(), a.getVarCount()); } /** Returns the largest exponent of a. Returns zero if varCount is zero. */ Exponent maximum(const Exponent* a, size_t varCount); inline Exponent maximum(const Term& a) { return maximum(a.begin(), a.getVarCount()); } #endif frobby-0.9.5/src/TermGrader.cpp000066400000000000000000000211301401527164200163360ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TermGrader.h" #include "Projection.h" #include "TermTranslator.h" #include "Term.h" TermGrader::TermGrader(const vector& varDegrees, const TermTranslator& translator): _grades(varDegrees.size()) { // Set up _signs. _signs.resize(varDegrees.size()); for (size_t var = 0; var < varDegrees.size(); ++var) { if (varDegrees[var] > 0) _signs[var] = 1; else if (varDegrees[var] < 0) _signs[var] = -1; } // Set up _grades. for (size_t var = 0; var < varDegrees.size(); ++var) { size_t maxId = translator.getMaxId(var); _grades[var].resize(maxId + 1); for (Exponent e = 0; e <= maxId; ++e) _grades[var][e] = varDegrees[var] * translator.getExponent(var, e); } } mpz_class TermGrader::getDegree(const Term& term) const { mpz_class degree; getDegree(term, degree); return degree; } void TermGrader::getDegree(const Term& term, mpz_class& degree) const { ASSERT(term.getVarCount() == _grades.size()); degree = 0; for (size_t var = 0; var < term.getVarCount(); ++var) degree += getGrade(var, term[var]); } void TermGrader::getDegree(const Term& term, const Projection& projection, mpz_class& degree) const { ASSERT(term.getVarCount() == projection.getRangeVarCount()); degree = 0; for (size_t var = 0; var < term.getVarCount(); ++var) degree += getGrade(projection.inverseProjectVar(var), term[var]); } void TermGrader::getUpperBound(const Term& divisor, const Term& dominator, mpz_class& bound) const { ASSERT(divisor.getVarCount() == getVarCount()); ASSERT(dominator.getVarCount() == getVarCount()); ASSERT(divisor.divides(dominator)); bound = 0; size_t varCount = getVarCount(); for (size_t var = 0; var < varCount; ++var) { int sign = getGradeSign(var); if (sign == 0) continue; Exponent div = divisor[var]; Exponent dom = dominator[var]; Exponent optimalExponent; if (div == dom) optimalExponent = div; // Nothing to decide in this case. else if (sign > 0) { // In this case we normally prefer a high exponent. // // When computing irreducible decomposition or Alexander dual, // we add pure powers of maximal degree that map to zero, in // which case we want to avoid using that degree. This happens // for dom == getMaxExponent(var). if (dom == getMaxExponent(var)) { ASSERT(getGrade(var, dom - 1) > getGrade(var, dom)); optimalExponent = dom - 1; // OK as div < dom. } else optimalExponent = dom; } else { ASSERT(sign < 0); // In this case we normally prefer a low exponent. However, as // above, we need to consider that the highest exponent could // map to zero, which may be better. if (dom == getMaxExponent(var)) { ASSERT(getGrade(var, dom) > getGrade(var, div)); optimalExponent = dom; } else optimalExponent = div; } bound += getGrade(var, optimalExponent); } } mpz_class TermGrader::getUpperBound(const Term& divisor, const Term& dominator) const { mpz_class bound; getUpperBound(divisor, dominator, bound); return bound; } bool TermGrader::getMinIndexLessThan (size_t var, Exponent from, Exponent to, Exponent& index, const mpz_class& maxDegree) const { ASSERT(var < getVarCount()); ASSERT(from < _grades[var].size()); ASSERT(to < _grades[var].size()); if (from > to) return false; Exponent e = from; while (true) { const mpz_class& exp = _grades[var][e]; if (exp <= maxDegree) { index = e; return true; } if (e == to) return false; ++e; } } bool TermGrader::getMaxIndexLessThan (size_t var, Exponent from, Exponent to, Exponent& index, const mpz_class& maxDegree) const { ASSERT(var < getVarCount()); ASSERT(from < _grades[var].size()); ASSERT(to < _grades[var].size()); if (from > to) return false; Exponent e = to; while (true) { const mpz_class& exp = _grades[var][e]; if (exp <= maxDegree) { index = e; return true; } if (e == from) return false; --e; } } Exponent TermGrader::getLargestLessThan2 (size_t var, const mpz_class& value, bool strict) const { ASSERT(var < getVarCount()); ASSERT(!_grades[var].empty()); bool first = true; size_t best = 0; for (size_t e = 1; e < _grades[var].size(); ++e) { const mpz_class& exp = _grades[var][e]; if (exp <= value && (first || exp > _grades[var][best])) { best = e; first = false; } } return best; } Exponent TermGrader::getLargestLessThan2(size_t var, Exponent from, Exponent to, const mpz_class& value, bool strict) const { ASSERT(from <= to); // If sign is negative, reverse the roles of < and > below. int sign = getGradeSign(var); if (sign == 0) return 0; bool positive = sign > 0; // We are expecting that the correct value will usually be close to // from, so we start with an exponential search starting at from and // then move to a binary search when the endpoints become close. Exponent low = from; Exponent high = to; // We carry on as though strict is true, and adjust the value // below. The invariant is that degree(low) <= value < degree(high + // 1), if that is true to begin with. You can check that both the // cases value < degree(from) and degree(high + 1) <= value work out // also. while (true) { ASSERT(low <= high); size_t gap = high - low; if (gap == 0) break; Exponent lowDelta = low - from; // pivot is the point we do binary or exponential search on. Exponent pivot; if (lowDelta < gap) { // In this case we have not moved much from the lower endpoint, // so we double the distance, and add one in case lowDelta is // zero. pivot = low + lowDelta + 1; } else { // We use binary search. This formula sets pivot to be the // average of low and high rounded up, while avoiding the // possible overflow inherent in adding low and high. pivot = low + (gap + 1) / 2; } ASSERT(low < pivot); ASSERT(pivot <= high); if (positive ? getGrade(var, pivot) <= value : getGrade(var, pivot) >= value) { low = pivot; } else { high = pivot - 1; } } ASSERT(low == high); #ifdef DEBUG Exponent reference = getLargestLessThan2(var, value, strict); if (reference < from) reference = from; if (reference > to) reference = to; ASSERT(low == reference); #endif return low; } void TermGrader::getIncrementedDegree(const Term& term, const Projection& projection, mpz_class& degree) const { ASSERT(term.getVarCount() == projection.getRangeVarCount()); degree = 0; for (size_t var = 0; var < term.getVarCount(); ++var) degree += getGrade(projection.inverseProjectVar(var), term[var] + 1); } const mpz_class& TermGrader::getGrade(size_t var, Exponent exponent) const { ASSERT(var < _grades.size()); ASSERT(exponent < _grades[var].size()); return _grades[var][exponent]; } Exponent TermGrader::getMaxExponent(size_t var) const { ASSERT(!_grades[var].empty()); return _grades[var].size() - 1; } size_t TermGrader::getVarCount() const { return _grades.size(); } void TermGrader::print(ostream& out) const { out << "TermGrader (\n"; for (size_t var = 0; var < _grades.size(); ++var) { out << " var " << var << ':'; for (size_t e = 0; e < _grades[var].size(); ++e) out << ' ' << _grades[var][e]; out << '\n'; } out << ")\n"; } int TermGrader::getGradeSign(size_t var) const { ASSERT(var < _grades.size()); return _signs[var]; } ostream& operator<<(ostream& out, const TermGrader& grader) { grader.print(out); return out; } frobby-0.9.5/src/TermGrader.h000066400000000000000000000105411401527164200160070ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TERM_GRADER_GUARD #define TERM_GRADER_GUARD #include class Projection; class Term; class TermTranslator; /** A TermGrader assigns a value, the degree, to each monomial. */ class TermGrader { public: TermGrader(const vector& varDegrees, const TermTranslator& translator); /** Returns the degree of term. */ mpz_class getDegree(const Term& term) const; /** Assigns the degree of term to degree. */ void getDegree(const Term& term, mpz_class& degree) const; /** Assigns the degree of the preimage of term through the projection to degree. */ void getDegree(const Term& term, const Projection& projection, mpz_class& degree) const; /** Assigns to bound the degree of the largest term v such that divisor divides v and v divides dominator. */ void getUpperBound(const Term& divisor, const Term& dominator, mpz_class& bound) const; /** Returns the degree of the largest term v such that divisor divides v and v divides dominator. Returning the value implies a copy so that this overload is less efficient than the one placing the value in a parameter. This purpose of this method is to be more convenient for tests. */ mpz_class getUpperBound(const Term& divisor, const Term& dominator) const; /** Returns the index of the largest stored exponent of var that is less than value. If strict is true, then it is strictly less than, otherwise it is less than or equal to. If no such exponent exists, then the return value is 0. If the sign is zero, then 0 is returned. Uses a linear scan, and is only really used to check the output of the other overload. */ Exponent getLargestLessThan2(size_t var, const mpz_class& value, bool strict = true) const; /** Returns the value in the interval [from, to] that is closest to getLargestLessThan(var, value, strict). Only uses a logarithmic number of comparisons. */ Exponent getLargestLessThan2(size_t var, Exponent from, Exponent to, const mpz_class& value, bool strict = true) const; void getIncrementedDegree(const Term& term, const Projection& projection, mpz_class& degree) const; /** Finds minimal index in [from, to] to such that degree(t) <= maxDegree. Returns true if such a t exists, and false otherwise. */ bool getMinIndexLessThan(size_t var, Exponent from, Exponent to, Exponent& index, const mpz_class& maxDegree) const; /** Finds maximal index in [from, to] to such that degree(t) <= maxDegree. Returns true if such a t exists, and false otherwise. */ bool getMaxIndexLessThan(size_t var, Exponent from, Exponent to, Exponent& index, const mpz_class& maxDegree) const; const mpz_class& getGrade(size_t var, Exponent exponent) const; Exponent getMaxExponent(size_t var) const; size_t getVarCount() const; void print(ostream& out) const; /** Returns 1 if the grade strictly increases with the exponent of var, returns -1 if it strictly decreases, and returns 0 if changing the exponent has no impact on the grade. */ int getGradeSign(size_t var) const; private: vector > _grades; vector _signs; }; ostream& operator<<(ostream& out, const TermGrader& grader); #endif frobby-0.9.5/src/TermGraderTest.cpp000066400000000000000000000160451401527164200172070ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TermGrader.h" #include "tests.h" #include "TermTranslator.h" #include "Term.h" TEST_SUITE(TermGrader) TEST(TermGrader, getUpperBound) { vector v(3); v[0] = -10; v[1] = 0; v[2] = 10; TermGrader grader(v, TermTranslator(3, 9)); // Simple cases. ASSERT_EQ(grader.getUpperBound(Term("0 0 0"), Term("0 0 0")), 0); ASSERT_EQ(grader.getUpperBound(Term("1 0 0"), Term("2 0 0")), -10); ASSERT_EQ(grader.getUpperBound(Term("0 1 0"), Term("0 2 0")), 0); ASSERT_EQ(grader.getUpperBound(Term("0 0 1"), Term("0 0 2")), 20); ASSERT_EQ(grader.getUpperBound(Term("1 1 1"), Term("2 2 2")), 10); // Test handling of highest value mapping to zero. ASSERT_EQ(grader.getUpperBound(Term("9 9 9"), Term("9 9 9")), 0); ASSERT_EQ(grader.getUpperBound(Term("1 0 0"), Term("9 0 0")), 0); ASSERT_EQ(grader.getUpperBound(Term("0 0 0"), Term("0 9 0")), 0); ASSERT_EQ(grader.getUpperBound(Term("0 0 0"), Term("0 0 9")), 80); ASSERT_EQ(grader.getUpperBound(Term("1 1 1"), Term("9 9 9")), 80); } #define MIN_INDEX_TEST(from, to, maxDegree, strict, expectFind, expectedIndex) \ { \ Exponent foundIndex = 0; \ bool returnValue = grader.getMinIndexLessThan \ (0, from, to, foundIndex, maxDegree - strict); \ if (expectFind) { \ ASSERT_TRUE(returnValue); \ ASSERT_EQ(foundIndex, (Exponent)expectedIndex); \ } else { \ ASSERT_FALSE(returnValue); \ } \ } TEST(TermGrader, getMinIndexLessThanNegative) { vector v; v.push_back(-2); TermGrader grader(v, TermTranslator(1, 10)); // General case of represented degree MIN_INDEX_TEST(0, 10, -12, true, true, 7); // -14 < -12 MIN_INDEX_TEST(0, 10, -12, false, true, 6); // -12 <= -12 // General case not of represented degree MIN_INDEX_TEST(0, 10, -5, true, true, 3); // -6 < -5 MIN_INDEX_TEST(0, 10, -5, false, true, 3); // -6 <= -5 // The zero at 0 MIN_INDEX_TEST(0, 10, 0, true, true, 1); // -2 < 0 MIN_INDEX_TEST(0, 10, 0, false, true, 0); // 0 <= 0 // The zero at 10 MIN_INDEX_TEST(10, 10, 1, true, true, 10); // 0 < 1 MIN_INDEX_TEST(10, 10, 0, false, true, 10); // 0 <= 0 // Left of interval MIN_INDEX_TEST(4, 10, -6, true, true, 4); MIN_INDEX_TEST(4, 10, -5, false, true, 4); // Right of interval MIN_INDEX_TEST(0, 3, -6, true, false, 0); // no [0,-6] < -6 MIN_INDEX_TEST(0, 3, -7, false, false, 0); // no [0,-6] <= -7 // Empty interval MIN_INDEX_TEST(10, 0, -5, true, false, 0); MIN_INDEX_TEST(10, 0, -5, false, false, 0); } TEST(TermGrader, getMinIndexLessThanPositive) { vector v; v.push_back(2); TermGrader grader(v, TermTranslator(1, 10)); // General case MIN_INDEX_TEST(0, 10, 12, true, true, 0); // 0 < 12 MIN_INDEX_TEST(0, 10, 12, false, true, 0); // 0 <= 12 // The zero at 0 MIN_INDEX_TEST(0, 10, 0, true, false, 0); // 0 not < [0,18] MIN_INDEX_TEST(0, 10, 0, false, true, 0); // 0 <= 0 // The zero at 10 MIN_INDEX_TEST(10, 10, 0, true, false, 0); // 0 not < 0 MIN_INDEX_TEST(10, 10, 0, false, true, 10); // 0 <= 0 // Search at -1. MIN_INDEX_TEST(0, 10, -1, true, false, 0); MIN_INDEX_TEST(0, 10, -1, false, false, 0); // Empty interval MIN_INDEX_TEST(10, 0, -5, true, false, 0); MIN_INDEX_TEST(10, 0, -5, false, false, 0); } TEST(TermGrader, getMinIndexLessThanZero) { vector v; v.push_back(0); TermGrader grader(v, TermTranslator(1, 10)); // Search above 0. MIN_INDEX_TEST(5, 10, 1, true, true, 5); MIN_INDEX_TEST(5, 10, 1, false, true, 5); // Search at 0. MIN_INDEX_TEST(5, 10, 0, true, false, 0); MIN_INDEX_TEST(5, 10, 0, false, true, 5); // Search at -1. MIN_INDEX_TEST(0, 10, -1, true, false, 0); MIN_INDEX_TEST(0, 10, -1, false, false, 0); // Empty interval MIN_INDEX_TEST(10, 0, -5, true, false, 0); MIN_INDEX_TEST(10, 0, -5, false, false, 0); } #define MAX_INDEX_TEST(from, to, maxDegree, strict, expectFind, expectedIndex) \ { \ Exponent foundIndex = 0; \ bool returnValue = grader.getMaxIndexLessThan \ (0, from, to, foundIndex, maxDegree - strict); \ if (expectFind) { \ ASSERT_TRUE(returnValue); \ ASSERT_EQ(foundIndex, (Exponent)expectedIndex); \ } else { \ ASSERT_FALSE(returnValue); \ } \ } TEST(TermGrader, getMaxIndexLessThanNegative) { vector v; v.push_back(-2); TermGrader grader(v, TermTranslator(1, 10)); // General case MAX_INDEX_TEST(0, 10, -12, true, true, 9); // -18 < -12 MAX_INDEX_TEST(0, 10, -12, false, true, 9); // -18 <= 12 // The zero at 10 MAX_INDEX_TEST(10, 10, 0, true, false, 0); // 0 not < 0 MAX_INDEX_TEST(0, 10, 0, false, true, 10); // 0 <= 0 // The zero at 0 MAX_INDEX_TEST(0, 0, 0, true, false, 0); // 0 not < 0 MAX_INDEX_TEST(0, 0, 0, false, true, 0); // 0 <= 0 } TEST(TermGrader, getMaxIndexLessThanPositive) { vector v; v.push_back(2); TermGrader grader(v, TermTranslator(1, 10)); // General case of represented degree MAX_INDEX_TEST(0, 9, 12, true, true, 5); // 10 < 12 MAX_INDEX_TEST(0, 9, 12, false, true, 6); // 12 <= 12 // General case not of represented degree MAX_INDEX_TEST(0, 9, 5, true, true, 2); // 4 < 5 MAX_INDEX_TEST(0, 9, 5, false, true, 2); // 4 <= 5 // The zero at 0 MAX_INDEX_TEST(0, 9, 1, true, true, 0); // 0 < 1 MAX_INDEX_TEST(0, 9, 0, false, true, 0); // 0 <= 0 // The zero at 10 MAX_INDEX_TEST(0, 10, 1, true, true, 10); // 0 < 1 MAX_INDEX_TEST(0, 10, 0, false, true, 10); // 0 <= 0 // Left of interval MAX_INDEX_TEST(4, 9, 7, true, false, 0); // no [8, 18] < 7 MAX_INDEX_TEST(4, 9, 7, false, false, 0); // no [8, 18] <= 7 // Right of interval MAX_INDEX_TEST(1, 5, 12, true, true, 5); // 10 < 12 MAX_INDEX_TEST(1, 5, 12, false, true, 5); // 10 <= 12 // Search at -1. MAX_INDEX_TEST(0, 10, -1, true, false, 0); // no [0,18] < -1 MAX_INDEX_TEST(0, 10, -1, false, false, 0); // no [0,18] <= -1 } TEST(TermGrader, getMaxIndexLessThanZero) { vector v; v.push_back(0); TermGrader grader(v, TermTranslator(1, 10)); // Search above 0. MAX_INDEX_TEST(5, 10, 1, true, true, 10); MAX_INDEX_TEST(5, 10, 1, false, true, 10); // Search at 0. MAX_INDEX_TEST(5, 10, 0, true, false, 0); MAX_INDEX_TEST(5, 10, 0, false, true, 10); // Search at -1. MAX_INDEX_TEST(0, 10, -1, true, false, 0); MAX_INDEX_TEST(0, 10, -1, false, false, 0); } frobby-0.9.5/src/TermIgnorer.h000066400000000000000000000017541401527164200162160ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TERM_IGNORER_GUARD #define TERM_IGNORER_GUARD #include "TermConsumer.h" class Term; // Simply ignores everything it consumes. class TermIgnorer : public TermConsumer { public: virtual void consume(const Term& term) {} }; #endif frobby-0.9.5/src/TermPredicate.cpp000066400000000000000000000061751401527164200170460ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TermPredicate.h" #include "NameFactory.h" TermPredicate::TermPredicate(size_t varCount): _varCount(varCount) { } TermPredicate::~TermPredicate() { } namespace { typedef NameFactory PredFactory; PredFactory getPredFactory() { PredFactory factory("Term ordering"); nameFactoryRegister(factory); nameFactoryRegister(factory); return factory; } } auto_ptr createTermPredicate(const string& prefix, size_t varCount) { auto_ptr pred = createWithPrefix(getPredFactory(), prefix); ASSERT(pred.get() != 0); pred->setVarCount(varCount); return pred; } int lexCompare(const Exponent* a, const Exponent* b, size_t varCount) { ASSERT(a != 0 || varCount == 0); ASSERT(b != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) { if (a[var] == b[var]) continue; if (a[var] < b[var]) return -1; else return 1; } return 0; } int lexCompare(const Term& a, const Term& b) { ASSERT(a.getVarCount() == b.getVarCount()); return lexCompare(a.begin(), b.begin(), a.getVarCount()); } int reverseLexCompare(const Exponent* a, const Exponent* b, size_t varCount) { ASSERT(a != 0 || varCount == 0); ASSERT(b != 0 || varCount == 0); return -lexCompare(a, b, varCount); } bool equals(const Exponent* a, const Exponent* b, size_t varCount) { ASSERT(a != 0 || varCount == 0); ASSERT(b != 0 || varCount == 0); for (size_t var = 0; var < varCount; ++var) if (a[var] != b[var]) return false; return true; } LexComparator::LexComparator(size_t varCount): TermPredicate(varCount) { } const char* LexComparator::staticGetName() { return "lex"; } ReverseLexComparator::ReverseLexComparator(size_t varCount): TermPredicate(varCount) { } const char* ReverseLexComparator::staticGetName() { return "revlex"; } SingleDegreeComparator::SingleDegreeComparator(size_t var, size_t varCount): TermPredicate(varCount), _var(var) { } ReverseSingleDegreeComparator::ReverseSingleDegreeComparator(size_t var, size_t varCount): TermPredicate(varCount), _var(var) { } EqualsPredicate::EqualsPredicate(size_t varCount): TermPredicate(varCount) { } frobby-0.9.5/src/TermPredicate.h000066400000000000000000000121361401527164200165050ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TERM_ORDER_GUARD #define TERM_ORDER_GUARD #include "Term.h" class TermPredicate { public: TermPredicate(size_t varCount = 0); virtual ~TermPredicate(); bool operator()(const Term& a, const Term& b) const { ASSERT(a.getVarCount() == getVarCount()); ASSERT(b.getVarCount() == getVarCount()); return doPredicate(a.begin(), b.begin()); } bool operator()(const Term& a, const Exponent* b) const { ASSERT(a.getVarCount() == getVarCount()); ASSERT(b != 0 || getVarCount() == 0); return doPredicate(a.begin(), b); } bool operator()(const Exponent* a, const Term& b) const { ASSERT(b.getVarCount() == getVarCount()); ASSERT(a != 0 || getVarCount() == 0); return doPredicate(a, b.begin()); } bool operator()(const Exponent* a, const Exponent* b) const { ASSERT(a != 0 || getVarCount() == 0); ASSERT(b != 0 || getVarCount() == 0); return doPredicate(a, b); } size_t getVarCount() const {return _varCount;} void setVarCount(size_t varCount) {_varCount = varCount;} private: virtual bool doPredicate(const Exponent* a, const Exponent* b) const = 0; size_t _varCount; }; /** Adapter for TermPredicate which allows it to be used as a predicate in STL. */ class StlTermPredicate { public: StlTermPredicate(const TermPredicate& pred): _pred(pred) {} template bool operator()(const T& a, const T& b) const {return _pred(a, b);} private: const TermPredicate& _pred; }; /** Returns the predicate whose name has the given prefix. */ auto_ptr createTermPredicate(const string& prefix, size_t varCount = 0); /** Indicates how a relates to b according to the lexicographic term order where \f$x_1>\cdots>x_n\f$. Returns -1 if a < b, returns 0 if a = b and returns 1 if a > b. As an example \f$x^(0,0) < x^(0,1) < x^(1,0)\f$. */ int lexCompare(const Exponent* a, const Exponent* b, size_t varCount); int lexCompare(const Term& a, const Term& b); /** Indicates how a relates to b according to the reverse lexicographic term order where \f$x_1<\cdots b. As an example \f$x^(0,0) < x^(1,0) < x^(0,1)\f$. */ int reverseLexCompare(const Exponent* a, const Exponent* b, size_t varCount); /** Returns whether the entries of a are equal to the entries of b. */ bool equals(const Exponent* a, const Exponent* b, size_t varCount); /** A predicate that sorts terms according to lexicographic order. */ class LexComparator : public TermPredicate { public: LexComparator(size_t varCount = 0); static const char* staticGetName(); private: virtual bool doPredicate(const Exponent* a, const Exponent* b) const { return lexCompare(a, b, getVarCount()) < 0; } }; /** A predicate that sorts according to reverse lexicographic order. */ class ReverseLexComparator : public TermPredicate { public: ReverseLexComparator(size_t varCount = 0); static const char* staticGetName(); private: virtual bool doPredicate(const Exponent* a, const Exponent* b) const { return reverseLexCompare(a, b, getVarCount()) < 0; } }; /** A predicate that sorts terms in weakly ascending order according to degree of the specified variable. */ class SingleDegreeComparator : public TermPredicate { public: SingleDegreeComparator(size_t var, size_t varCount = 0); private: virtual bool doPredicate(const Exponent* a, const Exponent* b) const { return a[_var] < b[_var]; } size_t _var; }; /** A predicate that sorts terms in weakly descending order according to degree of the specified variable. */ class ReverseSingleDegreeComparator : public TermPredicate { public: ReverseSingleDegreeComparator(size_t var, size_t varCount = 0); private: virtual bool doPredicate(const Exponent* a, const Exponent* b) const { return a[_var] > b[_var]; } size_t _var; }; /** A predicate that compares for equality. */ class EqualsPredicate : public TermPredicate { public: EqualsPredicate(size_t varCount = 0); private: virtual bool doPredicate(const Exponent* a, const Exponent* b) const { return equals(a, b, getVarCount()); } }; #endif frobby-0.9.5/src/TermTest.cpp000066400000000000000000000023041401527164200160530ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Term.h" #include "tests.h" TEST_SUITE(Term) TEST(Term, ParseStringConstructorNull) { ASSERT_EQ(Term(""), Term()); } TEST(Term, ParseStringConstructor) { Term term(3); term[0] = 3; term[1] = 9; term[2] = 7; ASSERT_EQ(Term("3 9 7"), term); } TEST(Term, ShareNonZeroExponent) { ASSERT_TRUE(Term("0 1 2").sharesNonZeroExponent(Term("2 1 0"))); ASSERT_FALSE(Term("0 1 2").sharesNonZeroExponent(Term("0 2 1"))); } frobby-0.9.5/src/TermTranslator.cpp000066400000000000000000000354461401527164200173020ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TermTranslator.h" #include "Term.h" #include "Ideal.h" #include "BigIdeal.h" #include "VarNames.h" #include "FrobbyStringStream.h" #include "ElementDeleter.h" #include #include #include #include TermTranslator::TermTranslator(size_t varCount, size_t upToExponent): _exponents(varCount), _names(varCount) { if (varCount > 0) { _exponents[0].reserve(upToExponent + 1); for (size_t i = 0; i < upToExponent; ++i) _exponents[0].push_back(i); _exponents[0].push_back(0); for (size_t var = 1; var < varCount; ++var) _exponents[var] = _exponents[0]; } } TermTranslator::TermTranslator(const BigIdeal& bigIdeal, Ideal& ideal, bool sortVars) { vector bigIdeals; bigIdeals.push_back(const_cast(&bigIdeal)); initialize(bigIdeals, sortVars); shrinkBigIdeal(bigIdeal, ideal); } TermTranslator::TermTranslator(const vector& bigIdeals, vector& ideals) { ASSERT(!bigIdeals.empty()); ideals.clear(); ElementDeleter > idealsDeleter(ideals); initialize(bigIdeals, true); for (size_t i = 0; i < bigIdeals.size(); ++i) { exceptionSafePushBack(ideals, auto_ptr(new Ideal())); shrinkBigIdeal(*(bigIdeals[i]), *(ideals.back())); } idealsDeleter.release(); } // Helper function for extractExponents. bool mpzClassPointerLess(const mpz_class* a, const mpz_class* b) { return *a < *b; } // Helper function for extractExponents. bool mpzClassPointerEqual(const mpz_class* a, const mpz_class* b) { return *a == *b; } // Helper function for initialize. // // Assign int IDs to big integer exponents. The correspondence // preserves order, except that the largest ID maps to 0, which is // necessary to support adding pure powers. Only the exponents // that actually appear in generators of the ideals are translated, // except that 0 is guaranteed to be included and to be assigned the // ID 0, and that a maximal ID is added, which also maps to zero. // // extractExponents changes the exponents that it extracts. void extractExponents(const vector& ideals, vector& exponents, const string& varName) { vector exponentRefs; mpz_class zero(0); exponentRefs.push_back(&zero); // 0 must be included // Reserve sufficient capacity for the exponentRefs. size_t termCount = 0; for (size_t i = 0; i < ideals.size(); ++i) termCount += ideals[i]->getGeneratorCount(); exponentRefs.reserve(termCount + 1); // + 1 because we added the 0 above. // Collect the exponents const int MaxSmall = 900; bool seen[MaxSmall + 1]; // avoid adding small numbers more than once fill_n(seen, MaxSmall + 1, false); seen[0] = true; for (size_t i = 0; i < ideals.size(); ++i) { BigIdeal& ideal = *(ideals[i]); size_t var = ideal.getNames().getIndex(varName); if (var == VarNames::invalidIndex) continue; size_t generatorCount = ideal.getGeneratorCount(); for (size_t term = 0; term < generatorCount; ++term) { const mpz_class& e = ideal.getExponent(term, var); if (e <= MaxSmall) { ASSERT(e.fits_uint_p()); unsigned int ui = e.get_ui(); if (seen[ui]) continue; seen[ui] = true; } exponentRefs.push_back(&(ideal.getExponent(term, var))); } } // Sort and remove duplicates. std::sort(exponentRefs.begin(), exponentRefs.end(), mpzClassPointerLess); exponentRefs.erase (unique(exponentRefs.begin(), exponentRefs.end(), mpzClassPointerEqual), exponentRefs.end()); exponentRefs.push_back(&zero); exponents.clear(); exponents.resize(exponentRefs.size()); size_t size = exponentRefs.size(); for (size_t e = 0; e < size; ++e) exponents[e] = *(exponentRefs[e]); } void TermTranslator::clearStrings() { for (size_t i = 0; i < _stringExponents.size(); ++i) for (size_t j = 0; j < _stringExponents[i].size(); ++j) delete[] _stringExponents[i][j]; _stringExponents.clear(); for (size_t i = 0; i < _stringVarExponents.size(); ++i) for (size_t j = 0; j < _stringVarExponents[i].size(); ++j) delete[] _stringVarExponents[i][j]; _stringVarExponents.clear(); } bool TermTranslatorInitializeHelper_StringPointerCompareLess (const string* a, const string* b) { return *a < *b; } bool TermTranslatorInitializeHelper_StringPointerCompareEqual (const string* a, const string* b) { return *a == *b; } void TermTranslator::initialize(const vector& bigIdeals, bool sortVars) { ASSERT(!bigIdeals.empty()); if (sortVars) { vector variables; for (size_t ideal = 0; ideal < bigIdeals.size(); ++ideal) { const VarNames& names = bigIdeals[ideal]->getNames(); if (ideal != 0 && names == bigIdeals[ideal - 1]->getNames()) continue; for (size_t var = 0; var < bigIdeals[ideal]->getVarCount(); ++var) variables.push_back(&(names.getName(var))); } std::sort(variables.begin(), variables.end(), TermTranslatorInitializeHelper_StringPointerCompareLess); variables.erase (std::unique(variables.begin(), variables.end(), TermTranslatorInitializeHelper_StringPointerCompareEqual), variables.end()); for (vector::const_iterator var = variables.begin(); var != variables.end(); ++var) _names.addVar(**var); } else { ASSERT(bigIdeals.size() == 1); _names = bigIdeals[0]->getNames(); } _exponents.resize(_names.getVarCount()); for (size_t var = 0; var < _names.getVarCount(); ++var) extractExponents(bigIdeals, _exponents[var], _names.getName(var)); } void TermTranslator::shrinkBigIdeal(const BigIdeal& bigIdeal, Ideal& ideal) const { ideal.clearAndSetVarCount(_names.getVarCount()); // Figure out how bigIdeal's names map onto _names. vector newVars; newVars.reserve(bigIdeal.getVarCount()); if (bigIdeal.getNames() == _names) { for (size_t var = 0; var < bigIdeal.getVarCount(); ++var) newVars.push_back(var); } else { for (size_t var = 0; var < bigIdeal.getVarCount(); ++var) { const string& name = bigIdeal.getNames().getName(var); size_t newVar = _names.getIndex(name); newVars.push_back(newVar); ASSERT(newVar != VarNames::invalidIndex); } } // Insert generators after translating exponents and variables. Term term(ideal.getVarCount()); size_t varCount = bigIdeal.getVarCount(); for (size_t i = 0; i < bigIdeal.getGeneratorCount(); ++i) { for (size_t var = 0; var < varCount; ++var) { size_t newVar = newVars[var]; term[newVar] = shrinkExponent(newVar, bigIdeal.getExponent(i, var)); } ideal.insert(term); } } void TermTranslator::addPurePowersAtInfinity(Ideal& ideal) const { size_t varCount = ideal.getVarCount(); // Find out which variables already have pure powers. vector hasPurePower(varCount); Ideal::const_iterator stop = ideal.end(); for (Ideal::const_iterator term = ideal.begin(); term != stop; ++term) { if (Term::getSizeOfSupport(*term, varCount) > 1) continue; size_t var = Term::getFirstNonZeroExponent(*term, varCount); if (var == varCount) return; // The ideal is <1> so we need add nothing. hasPurePower[var] = true; } // Add any missing pure powers. for (size_t var = 0; var < varCount; ++var) { if (hasPurePower[var]) continue; Term purePower(varCount); purePower[var] = _exponents[var].size() - 1; ideal.insert(purePower); } } /** @todo Figure out what is going on with the continue in this method. Also, make it use the methods of ideal, instead of rolling its own iteration code. */ void TermTranslator::setInfinityPowersToZero(Ideal& ideal) const { size_t varCount = ideal.getVarCount(); Ideal::iterator term = ideal.begin(); while (term != ideal.end()) { bool changed = false; for (size_t var = 0; var < varCount; ++var) { if ((*term)[var] == getMaxId(var)) { ASSERT(getExponent(var, (*term)[var]) == 0); (*term)[var] = 0; changed = true; } } ++term; continue; // uhm... ? if (changed && Term::isIdentity(*term, varCount)) { bool last = (term + 1 == ideal.end()); ideal.remove(term); if (last) break; } else ++term; } } void TermTranslator::dualize(const vector& a) { clearStrings(); for (size_t var = 0; var < _exponents.size(); ++var) for (size_t exp = 0; exp < _exponents[var].size(); ++exp) if (_exponents[var][exp] != 0) _exponents[var][exp] = a[var] - _exponents[var][exp] + 1; } void TermTranslator::decrement() { clearStrings(); for (size_t var = 0; var < _exponents.size(); ++var) for (size_t exp = 0; exp < _exponents[var].size(); ++exp) _exponents[var][exp] -= 1; } void TermTranslator::renameVariables(const VarNames& names) { ASSERT(getVarCount() == names.getVarCount()); clearStrings(); _names = names; } void TermTranslator::swapVariables(size_t a, size_t b) { ASSERT(a < getVarCount()); ASSERT(b < getVarCount()); if (a == b) return; std::swap(_exponents[a], _exponents[b]); if (!_stringExponents.empty()) std::swap(_stringExponents[a], _stringExponents[b]); if (!_stringVarExponents.empty()) std::swap(_stringVarExponents[a], _stringVarExponents[b]); _names.swapVariables(a, b); } void TermTranslator::print(ostream& out) const { out << "TermTranslator(\n"; for (size_t var = 0; var < _exponents.size(); ++var) { out << " var " << var + 1 << ':'; for (size_t e = 0; e < _exponents[var].size(); ++e) { out << ' ' << _exponents[var][e]; } out << '\n'; } out << ")\n"; } string TermTranslator::toString() const { ostringstream out; print(out); return out.str(); } void TermTranslator::makeStrings(bool includeVar) const { vector >& strings = includeVar ? _stringVarExponents : _stringExponents; ASSERT(strings.empty()); strings.resize(_exponents.size()); for (unsigned int i = 0; i < _exponents.size(); ++i) { strings[i].resize(_exponents[i].size()); for (unsigned int j = 0; j < _exponents[i].size(); ++j) { char* str = 0; if (_exponents[i][j] != 0 || !includeVar) { FrobbyStringStream out; if (!includeVar) out << _exponents[i][j]; else { out << _names.getName(i); if (_exponents[i][j] != 1) out << '^' << _exponents[i][j]; } str = new char[out.str().size() + 1]; strcpy(str, out.str().c_str()); } strings[i][j] = str; } } } TermTranslator::TermTranslator(const TermTranslator& translator) { *this = translator; } TermTranslator& TermTranslator::operator=(const TermTranslator& translator) { clearStrings(); _exponents = translator._exponents; _names = translator._names; return *this; } TermTranslator::~TermTranslator() { clearStrings(); } const mpz_class& TermTranslator:: getExponent(size_t variable, Exponent exponent) const { ASSERT(variable < _exponents.size()); ASSERT(exponent < _exponents[variable].size()); return _exponents[variable][exponent]; } const char* TermTranslator:: getVarExponentString(size_t variable, Exponent exponent) const { ASSERT(variable < _exponents.size()); ASSERT(exponent < _exponents[variable].size()); if (_stringVarExponents.empty()) makeStrings(true); return _stringVarExponents[variable][exponent]; } const char* TermTranslator:: getExponentString(size_t variable, Exponent exponent) const { ASSERT(variable < _exponents.size()); ASSERT(exponent < _exponents[variable].size()); if (_stringExponents.empty()) makeStrings(false); return _stringExponents[variable][exponent]; } const mpz_class& TermTranslator:: getExponent(size_t variable, const Term& term) const { return getExponent(variable, term[variable]); } Exponent TermTranslator::getMaxId(size_t variable) const { ASSERT(variable < _exponents.size()); return _exponents[variable].size() - 1; } Exponent TermTranslator::shrinkExponent(size_t var, const mpz_class& exponent) const { const vector& exponents = _exponents[var]; // We subtract 1 from exponents.end() to skip past the 0 that is // added there. Otherwise the range would not be sorted. vector::const_iterator it = lower_bound(exponents.begin(), exponents.end() - 1, exponent); ASSERT(*it == exponent); return it - exponents.begin(); } const VarNames& TermTranslator::getNames() const { return _names; } size_t TermTranslator::getVarCount() const { return _names.getVarCount(); } bool TermTranslator:: lessThanReverseLex(const Exponent* a, const Exponent* b) const { size_t varCount = getVarCount(); for (size_t var = 0; var < varCount; ++var) { const mpz_class& ae = getExponent(var, a[var]); const mpz_class& be = getExponent(var, b[var]); if (ae != be) return ae > be; } return 0; } bool TranslatedReverseLexComparator::operator()(const Term& a, const Term& b) const { ASSERT(a.getVarCount() == _translator.getVarCount()); ASSERT(b.getVarCount() == _translator.getVarCount()); return operator()(a.begin(), b.begin()); } bool TranslatedReverseLexComparator::operator()(const Exponent* a, const Exponent* b) const { ASSERT(a != 0 || _translator.getVarCount() == 0); ASSERT(b != 0 || _translator.getVarCount() == 0); return _translator.lessThanReverseLex(a, b); } void setToZeroOne(TermTranslator& translator) { BigIdeal zeroOneIdeal(translator.getNames()); zeroOneIdeal.newLastTerm(); // Add term with all exponents zero. zeroOneIdeal.newLastTerm(); // Add term with all exponents one. for (size_t var = 0; var < translator.getVarCount(); ++var) zeroOneIdeal.getLastTermExponentRef(var) = 1; Ideal dummy; translator = TermTranslator(zeroOneIdeal, dummy, false); } ostream& operator<<(ostream& out, const TermTranslator& translator) { translator.print(out); return out; } frobby-0.9.5/src/TermTranslator.h000066400000000000000000000123051401527164200167340ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TERM_TRANSLATOR_GUARD #define TERM_TRANSLATOR_GUARD #include "VarNames.h" #include #include class BigIdeal; class Ideal; class Term; /** TermTranslator handles translation between terms whose exponents are infinite precision integers and terms whose exponents are 32 bit integers. This is done by assigning the big integers IDs that are 32 bit integers such that the assignment of IDs preserves order of exponents for each variable. The translation is done at the level of whole ideals. The big integer 0 is always assigned the ID 0. */ class TermTranslator { public: /** Constructs a translator of varCount variables that translates each number to itself, up to and not including upToExponent. */ TermTranslator(size_t varCount, size_t upToExponent); /** Translates bigIdeal into ideal, and construct a translator to translate back. sortVars indicates whether or not the order of the variable names should be sorted. */ TermTranslator(const BigIdeal& bigIdeal, Ideal& ideal, bool sortVars = true); /** Translates bigIdeals into ideals, while constructing a translator to translate back. The variable names will be sorted, and the ideals will be embedded in a ring with the union of all variables present in bigIdeals. */ TermTranslator(const vector& bigIdeals, vector& ideals); TermTranslator(const TermTranslator& translator); ~TermTranslator(); TermTranslator& operator=(const TermTranslator& translator); /** This method translates from IDs to arbitrary precision integers. */ const mpz_class& getExponent(size_t variable, Exponent exponent) const; /** This method translates from IDs to arbitrary precision integers. */ const mpz_class& getExponent(size_t variable, const Term& term) const; /** As getExponent, except the string "var^e" is returned or null if the exponent is zero, where var is the variable and e is the exponent. */ const char* getVarExponentString(size_t variable, Exponent exponent) const; /** as getExponent, except the string "e" is returned, where e is the exponent. */ const char* getExponentString(size_t variable, Exponent exponent) const; /** The assigned IDs are those in the range [0, getMaxId(var)]. As a special case, getMaxId(var) maps to the same exponent as 0 does. */ Exponent getMaxId(size_t variable) const; /** Adds a generator of the form v^e, e > 0, for any variable v where generator of that form is not already present. e is chosen to be larger than any exponent (i.e. ID) already present, and it maps to 0. Note that this does NOT preserve order - the highest ID always maps to 0. The reason for this is that this is what is needed for computing irreducible decompositions. */ void addPurePowersAtInfinity(Ideal& ideal) const; /** The method addPurePowersAtInfinity adds high exponents that map to zero. This method replaces those high powers with the power zero. */ void setInfinityPowersToZero(Ideal& ideal) const; const VarNames& getNames() const; size_t getVarCount() const; /** Replaces var^v by var^(a[i] - v) except that var^0 is left alone. */ void dualize(const vector& a); /** Replaces var^v by var^(v-1). */ void decrement(); void renameVariables(const VarNames& names); void swapVariables(size_t a, size_t b); bool lessThanReverseLex(const Exponent* a, const Exponent* b) const; void print(ostream& out) const; string toString() const; private: void makeStrings(bool includeVar) const; void clearStrings(); void initialize(const vector& bigIdeals, bool sortVars); void shrinkBigIdeal(const BigIdeal& bigIdeal, Ideal& ideal) const; Exponent shrinkExponent(size_t var, const mpz_class& exponent) const; vector > _exponents; mutable vector > _stringExponents; mutable vector > _stringVarExponents; VarNames _names; }; /** A predicate that sorts according to reverse lexicographic order on the translated values of a term. */ class TranslatedReverseLexComparator { public: TranslatedReverseLexComparator(const TermTranslator& translator): _translator(translator) { } bool operator()(const Term& a, const Term& b) const; bool operator()(const Exponent* a, const Exponent* b) const; private: const TermTranslator& _translator; }; void setToZeroOne(TermTranslator& translator); ostream& operator<<(ostream& out, const TermTranslator& translator); #endif frobby-0.9.5/src/TermTranslatorTest.cpp000066400000000000000000000022141401527164200201250ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TermTranslator.h" #include "tests.h" TEST_SUITE(TermTranslator) TEST(TermTranslator, IdentityConstructor) { TermTranslator translator(3, 10); ASSERT_EQ(translator.toString(), "TermTranslator(\n" " var 1: 0 1 2 3 4 5 6 7 8 9 0\n" " var 2: 0 1 2 3 4 5 6 7 8 9 0\n" " var 3: 0 1 2 3 4 5 6 7 8 9 0\n" ")\n"); } frobby-0.9.5/src/TestAction.cpp000066400000000000000000000031001401527164200163540ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TestAction.h" #include "error.h" #include "test/all.h" #include "test/TestSorter.h" #include "test/TestRunner.h" TestAction::TestAction(): Action (staticGetName(), "Perform tests of C++ Frobby library interface.", "Perform tests of C++ Frobby library interface and other internal tests.", false) { } void TestAction::obtainParameters(vector& parameters) { } void TestAction::perform() { try { TestSorter sorter; GET_TEST_SUITE(root).accept(sorter); TestRunner runner; GET_TEST_SUITE(root).accept(runner); } catch (const FrobbyException& e) { fputs(e.what(), stderr); } catch (const AssertException& e) { fputs(e.what(), stderr); } } const char* TestAction::staticGetName() { return "test"; } bool TestAction::displayAction() const { return false; } frobby-0.9.5/src/TestAction.h000066400000000000000000000021061401527164200160260ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TEST_ACTION_GUARD #define TEST_ACTION_GUARD #include "Action.h" #include class TestAction : public Action { public: TestAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); virtual bool displayAction() const; static const char* staticGetName(); }; #endif frobby-0.9.5/src/Timer.cpp000066400000000000000000000031131401527164200153630ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Timer.h" unsigned long Timer::getMilliseconds() const { const double floatSpan = clock() - _clocksAtReset; const double floatMilliseconds = 1000 * (floatSpan / CLOCKS_PER_SEC); unsigned long milliseconds = static_cast(floatMilliseconds); if (floatMilliseconds - milliseconds >= 0.5) ++milliseconds; return milliseconds; } void Timer::print(FILE* out) const { unsigned long milliseconds = getMilliseconds(); unsigned long seconds = milliseconds / 1000; unsigned long minutes = seconds / 60; unsigned long hours = minutes / 60; milliseconds %= 1000; seconds %= 60; minutes %= 60; fputc('(', out); if (hours != 0) fprintf(out, "%luh", hours); if (minutes != 0 || hours != 0) fprintf(out, "%lum", minutes); fprintf(out, "%lu.%03lus)", seconds, milliseconds); } frobby-0.9.5/src/Timer.h000066400000000000000000000030011401527164200150240ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TIMER_GUARD #define TIMER_GUARD #include /** Measures spans of CPU time. The internal record of time can overflow quickly. If clock_t is 32 bits unsigned and CLOCKS_PER_TIC is one million then overflow will occur after 71 minutes. */ class Timer { public: Timer() {reset();} /** Resets the amount of elapsed CPU time to zero. */ void reset() {_clocksAtReset = clock();} /** Returns the number of CPU milliseconds since the last reset. See class description for time span overflow limitations. */ unsigned long getMilliseconds() const; /** Prints the elapsed time in a human readable format. See class description for time span overflow limitations. */ void print(FILE* out) const; private: std::clock_t _clocksAtReset; }; #endif frobby-0.9.5/src/TotalDegreeCoefTermConsumer.cpp000066400000000000000000000040451401527164200216500ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TotalDegreeCoefTermConsumer.h" #include "CoefBigTermConsumer.h" #include "TermTranslator.h" #include "Term.h" TotalDegreeCoefTermConsumer:: TotalDegreeCoefTermConsumer(auto_ptr consumer, const TermTranslator& translator): _consumer(*consumer), _consumerOwner(consumer), _translator(translator) { ASSERT(_consumerOwner.get() != 0); } TotalDegreeCoefTermConsumer:: TotalDegreeCoefTermConsumer(CoefBigTermConsumer& consumer, const TermTranslator& translator): _consumer(consumer), _translator(translator) { } void TotalDegreeCoefTermConsumer::consumeRing(const VarNames& names) { // Do nothing since taking the total degree discards the original // ring. } void TotalDegreeCoefTermConsumer::beginConsuming() { } void TotalDegreeCoefTermConsumer::consume(const mpz_class& coef, const Term& term) { ASSERT(term.getVarCount() == _translator.getVarCount()); if (coef == 0) return; // Compute total degree using _tmp. _tmp = 0; for (size_t var = 0; var < term.getVarCount(); ++var) _tmp += _translator.getExponent(var, term); _poly.add(coef, _tmp); } void TotalDegreeCoefTermConsumer::doneConsuming() { _poly.feedTo(_consumer, true); } frobby-0.9.5/src/TotalDegreeCoefTermConsumer.h000066400000000000000000000037141401527164200213170ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TOTAL_DEGREE_COEF_TERM_CONSUMER_GUARD #define TOTAL_DEGREE_COEF_TERM_CONSUMER_GUARD #include "CoefTermConsumer.h" #include "UniHashPolynomial.h" class Term; class CoefBigTermConsumer; class TermTranslator; #include // Substitutes the same single variable for each variable, in effect // grading by the total degree. Passes consumed items on in descending // order of exponent, i.e. reverse lex order. This requires storing // all items before any can be passed on. // // TODO: get rid of translator in constructor. class TotalDegreeCoefTermConsumer : public CoefTermConsumer { public: TotalDegreeCoefTermConsumer(auto_ptr consumer, const TermTranslator& translator); TotalDegreeCoefTermConsumer(CoefBigTermConsumer& consumer, const TermTranslator& translator); virtual void consumeRing(const VarNames& names); virtual void beginConsuming(); virtual void consume(const mpz_class& coef, const Term& term); virtual void doneConsuming(); private: CoefBigTermConsumer& _consumer; auto_ptr _consumerOwner; const TermTranslator& _translator; mpz_class _tmp; UniHashPolynomial _poly; }; #endif frobby-0.9.5/src/TransformAction.cpp000066400000000000000000000140621401527164200174210ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TransformAction.h" #include "BigIdeal.h" #include "IOFacade.h" #include "IdealFacade.h" #include "Scanner.h" #include "ElementDeleter.h" #include "VarSorter.h" #include "DataType.h" #include TransformAction::TransformAction(): Action (staticGetName(), "Change the representation of the input ideal.", "By default, transform simply writes the input ideals to output. A " "number of parameters allow one to transform the input ideal in various ways.", false), _io(DataType::getMonomialIdealType(), DataType::getMonomialIdealType()), _canonicalize ("canon", "Sort variables, generators and ideals to get canonical representation.", false), _sort ("sort", "Sort generators according to the reverse lexicographic order.", false), _unique ("unique", "Remove duplicate generators.", false), _minimize ("minimize", "Remove non-minimial generators.", false), _deform ("deform", "Apply a generic deformation to the input ideal.", false), _radical ("radical", "Take the radical of the generators. Combine this with -minimize to " "get rid of any non-minimal ones.", false), _product ("product", "Replace each ideal with the product of its generators.", false), _addPurePowers ("addPurePowers", "Adds a pure power for each variable that does not already have a pure " "power in the ideal. Each exponent is chosen to be one larger than the " "maximal exponent of that variable that appears in the ideal.", false), _trimVariables ("trimVariables", "Remove variables that divide none of the generators.", false), _transpose ("transpose", "Exchange variables and minimal generators. Let M be a matrix whose " "rows are labeled by minimal generators and whose columns are labeled " "by variables. The entry at row g and column x is the number of times " "that x divides g. This options transposes that matrix.", false), _swap01 ("swap01", "Change all 0 exponents to 1 and vice versa.", false), _projectVar ("projectVar", "Project away the i'th variable counting from 1. No action is taken " "for a value of 0 or more than the number of variables in the ring.", 0) { } void TransformAction::obtainParameters(vector& parameters) { _io.obtainParameters(parameters); parameters.push_back(&_canonicalize); parameters.push_back(&_minimize); parameters.push_back(&_sort); parameters.push_back(&_unique); parameters.push_back(&_deform); parameters.push_back(&_radical); parameters.push_back(&_product); parameters.push_back(&_addPurePowers); parameters.push_back(&_trimVariables); parameters.push_back(&_swap01); parameters.push_back(&_projectVar); parameters.push_back(&_transpose); Action::obtainParameters(parameters); } void TransformAction::perform() { Scanner in(_io.getInputFormat(), stdin); _io.autoDetectInputFormat(in); _io.validateFormats(); IOFacade facade(_printActions); vector ideals; ElementDeleter > idealsDeleter(ideals); VarNames names; facade.readIdeals(in, ideals, names); in.expectEOF(); IdealFacade idealFacade(_printActions); if (_transpose) { names.clear(); for (size_t i = 0; i < ideals.size(); ++i) { const BigIdeal& ideal = *(ideals[i]); BigIdeal trans(VarNames(ideal.getGeneratorCount())); trans.reserve(ideal.getVarCount()); for (size_t var = 0; var < ideal.getVarCount(); ++var) { trans.newLastTerm(); for (size_t gen = 0; gen < ideal.getGeneratorCount(); ++gen) trans.getLastTermRef()[gen] = ideal[gen][var]; } (*ideals[i]) = trans; if (i == ideals.size() - 1) names = ideal.getNames(); } } if (0 < _projectVar && _projectVar <= names.getVarCount()) { size_t var = _projectVar - 1; names.projectVar(var); for (size_t i = 0; i < ideals.size(); ++i) { BigIdeal& ideal = *(ideals[i]); idealFacade.projectVar(ideal, var); } } if (_product) { auto_ptr ideal; ideal.reset(new BigIdeal(names)); idealFacade.takeProducts(ideals, *ideal); idealsDeleter.deleteElements(); exceptionSafePushBack(ideals, ideal); } for (size_t i = 0; i < ideals.size(); ++i) { BigIdeal& ideal = *(ideals[i]); if (_radical) idealFacade.takeRadical(ideal); if (_swap01) idealFacade.swap01(ideal); if (_minimize) idealFacade.sortAllAndMinimize(ideal); if (_deform) idealFacade.deform(ideal); } if (_trimVariables) idealFacade.trimVariables(ideals, names); for (size_t i = 0; i < ideals.size(); ++i) { BigIdeal& ideal = *(ideals[i]); if (_addPurePowers) idealFacade.addPurePowers(ideal); if (_canonicalize) idealFacade.sortVariables(ideal); if (_unique) idealFacade.sortGeneratorsUnique(ideal); else if (_sort || _canonicalize) idealFacade.sortGenerators(ideal); } if (_canonicalize) { VarSorter sorter(names); sorter.getOrderedNames(names); sort(ideals.begin(), ideals.end(), compareIdeals); } auto_ptr output(_io.createOutputHandler()); facade.writeIdeals(ideals, names, output.get(), stdout); } const char* TransformAction::staticGetName() { return "transform"; } bool TransformAction::compareIdeals(const BigIdeal* a, const BigIdeal* b) { return *a < *b; } frobby-0.9.5/src/TransformAction.h000066400000000000000000000030651401527164200170670ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TRANSFORM_ACTION_GUARD #define TRANSFORM_ACTION_GUARD #include "Action.h" #include "IOParameters.h" #include "BoolParameter.h" #include "IntegerParameter.h" class BigIdeal; class TransformAction : public Action { public: TransformAction(); virtual void obtainParameters(vector& parameters); virtual void perform(); static const char* staticGetName(); private: static bool compareIdeals(const BigIdeal* a, const BigIdeal* b); IOParameters _io; BoolParameter _canonicalize; BoolParameter _sort; BoolParameter _unique; BoolParameter _minimize; BoolParameter _deform; BoolParameter _radical; BoolParameter _product; BoolParameter _addPurePowers; BoolParameter _trimVariables; BoolParameter _transpose; BoolParameter _swap01; IntegerParameter _projectVar; }; #endif frobby-0.9.5/src/TranslatingCoefTermConsumer.cpp000066400000000000000000000042371401527164200217420ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TranslatingCoefTermConsumer.h" #include "CoefBigTermConsumer.h" #include "Term.h" #include "TermTranslator.h" TranslatingCoefTermConsumer::TranslatingCoefTermConsumer (CoefBigTermConsumer& consumer, const TermTranslator& translator): _translator(translator), _consumer(consumer) { } TranslatingCoefTermConsumer::TranslatingCoefTermConsumer (auto_ptr consumer, const TermTranslator& translator): _translator(translator), _consumer(*consumer), _consumerOwner(consumer) { ASSERT(_consumerOwner.get() != 0); } void TranslatingCoefTermConsumer::beginConsuming() { _consumer.beginConsuming(); } void TranslatingCoefTermConsumer::consumeRing(const VarNames& names) { _consumer.consumeRing(names); } void TranslatingCoefTermConsumer::consume (const mpz_class& coef, const Term& term, const TermTranslator& translator) { _consumer.consume(coef, term, translator); } void TranslatingCoefTermConsumer::consume (const mpz_class& coef, const vector& term) { _consumer.consume(coef, term); } void TranslatingCoefTermConsumer:: consume(const mpz_class& coef, const Term& term) { ASSERT(term.getVarCount() == _translator.getVarCount()); _consumer.consume(coef, term, _translator); } void TranslatingCoefTermConsumer::doneConsuming() { _consumer.doneConsuming(); } void TranslatingCoefTermConsumer::consume(const BigPolynomial& poly) { _consumer.consume(poly); } frobby-0.9.5/src/TranslatingCoefTermConsumer.h000066400000000000000000000034771401527164200214140ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TRANSLATING_COEF_TERM_CONSUMER_GUARD #define TRANSLATING_COEF_TERM_CONSUMER_GUARD #include "CoefBigTermConsumer.h" class CoefBigTermConsumer; class Term; class TermTranslator; class TranslatingCoefTermConsumer : public CoefBigTermConsumer { public: TranslatingCoefTermConsumer (CoefBigTermConsumer& consumer, const TermTranslator& translator); TranslatingCoefTermConsumer (auto_ptr consumer, const TermTranslator& translator); virtual void consumeRing(const VarNames& names); virtual void beginConsuming(); virtual void consume(const mpz_class& coef, const Term& term); virtual void consume(const mpz_class& coef, const Term& term, const TermTranslator& translator); virtual void consume(const mpz_class& coef, const vector& term); virtual void doneConsuming(); virtual void consume(const BigPolynomial& poly); private: const TermTranslator& _translator; CoefBigTermConsumer& _consumer; auto_ptr _consumerOwner; }; #endif frobby-0.9.5/src/TranslatingTermConsumer.cpp000066400000000000000000000042651401527164200211460ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TranslatingTermConsumer.h" #include "Term.h" #include "TermTranslator.h" #include "BigTermConsumer.h" TranslatingTermConsumer::TranslatingTermConsumer (BigTermConsumer& consumer, const TermTranslator& translator): _translator(translator), _consumer(consumer) { } TranslatingTermConsumer::TranslatingTermConsumer (auto_ptr consumer, const TermTranslator& translator): _translator(translator), _consumer(*consumer) { ASSERT(consumer.get() != 0); _consumerOwner = consumer; } void TranslatingTermConsumer::beginConsumingList() { _consumer.beginConsumingList(); } void TranslatingTermConsumer::consumeRing(const VarNames& names) { _consumer.consumeRing(names); } void TranslatingTermConsumer::beginConsuming() { _consumer.beginConsuming(); } void TranslatingTermConsumer::consume(const Term& term) { ASSERT(term.getVarCount() == _translator.getVarCount()); _consumer.consume(term, _translator); } void TranslatingTermConsumer::consume(const vector& term) { _consumer.consume(term); } void TranslatingTermConsumer::consume (const Term& term, const TermTranslator& translator) { _consumer.consume(term, translator); } void TranslatingTermConsumer::doneConsuming() { _consumer.doneConsuming(); } void TranslatingTermConsumer::doneConsumingList() { _consumer.doneConsumingList(); } void TranslatingTermConsumer::consume(const BigIdeal& ideal) { _consumer.consume(ideal); } frobby-0.9.5/src/TranslatingTermConsumer.h000066400000000000000000000045151401527164200206110ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TRANSLATING_TERM_CONSUMER_GUARD #define TRANSLATING_TERM_CONSUMER_GUARD #include "BigTermConsumer.h" class BigTermConsumer; class TermTranslator; class VarNames; class Term; // The purpose of this class is to replace calls to consume(term) by // consume(term, translator) when term is a Term. Thus untranslated // terms get translated by the translator specified in the translator. class TranslatingTermConsumer : public BigTermConsumer { public: // Does not copy the consumer or translator, so they need to remain // valid for the lifetime of this object. Does not take over // ownership of consumer, as is strongly indicated by it being a // reference as opposed to an auto_ptr. TranslatingTermConsumer(BigTermConsumer& consumer, const TermTranslator& translator); // Does not copy the translator, so it needs to remain valid for the // lifetime of this object. Takes over ownership of consumer. TranslatingTermConsumer(auto_ptr consumer, const TermTranslator& translator); virtual void beginConsumingList(); virtual void consumeRing(const VarNames& names); virtual void beginConsuming(); virtual void consume(const Term& term); virtual void consume(const vector& term); virtual void consume(const Term& term, const TermTranslator& translator); virtual void doneConsuming(); virtual void doneConsumingList(); virtual void consume(const BigIdeal& ideal); private: const TermTranslator& _translator; BigTermConsumer& _consumer; auto_ptr _consumerOwner; }; #endif frobby-0.9.5/src/UniHashPolynomial.cpp000066400000000000000000000064101401527164200177110ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "UniHashPolynomial.h" #include "CoefBigTermConsumer.h" #include "VarNames.h" #include void UniHashPolynomial::add(bool plus, const mpz_class& exponent) { mpz_class& ref = _terms[exponent]; if (plus) ++ref; else --ref; if (ref == 0) _terms.erase(exponent); } void UniHashPolynomial::add(int coef, size_t exponent) { if (coef == 0) return; mpz_class& ref = _terms[exponent]; ref += coef; if (ref == 0) _terms.erase(exponent); } void UniHashPolynomial::add(const mpz_class& coef, const mpz_class& exponent) { if (coef == 0) return; mpz_class& ref = _terms[exponent]; ref += coef; if (ref == 0) _terms.erase(exponent); } namespace { /** Helper class for feedTo. */ class RefCompare { public: typedef HashMap TermMap; bool operator()(TermMap::const_iterator a, TermMap::const_iterator b) { return a->first > b->first; } }; } void UniHashPolynomial::feedTo(CoefBigTermConsumer& consumer, bool inCanonicalOrder) const { VarNames names; names.addVar("t"); consumer.consumeRing(names); vector term(1); consumer.beginConsuming(); if (!inCanonicalOrder) { // Output the terms in whatever order _terms is storing them. TermMap::const_iterator termsEnd = _terms.end(); TermMap::const_iterator it = _terms.begin(); for (; it != termsEnd; ++it) { ASSERT(it->second != 0); term[0] = it->first; consumer.consume(it->second, term); } } else { // Fill refs with references in order to sort them. We can't sort // _terms since HashMap doesn't support that, so we have to sort // references into _terms instead. vector refs; refs.reserve(_terms.size()); TermMap::const_iterator termsEnd = _terms.end(); for (TermMap::const_iterator it = _terms.begin(); it != termsEnd; ++it) refs.push_back(it); sort(refs.begin(), refs.end(), RefCompare()); // Output the terms in the sorted order specified by refs. vector::const_iterator refsEnd = refs.end(); vector::const_iterator refIt = refs.begin(); for (; refIt != refsEnd; ++refIt) { TermMap::const_iterator it = *refIt; ASSERT(it->second != 0); term[0] = it->first; consumer.consume(it->second, term); } } consumer.doneConsuming(); } size_t UniHashPolynomial::getTermCount() const { return _terms.size(); } frobby-0.9.5/src/UniHashPolynomial.h000066400000000000000000000037761401527164200173720ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef UNI_HASH_POLYNOMIAL_GUARD #define UNI_HASH_POLYNOMIAL_GUARD #include "HashMap.h" class CoefBigTermConsumer; /** This template specialization makes the hash code of an mpz_clas available to the implementation of HashMap. */ template<> class FrobbyHash { public: size_t operator()(const mpz_class& i) const { // The constant is a prime. This method needs to be improved. return mpz_fdiv_ui(i.get_mpz_t(), 2106945901u); } }; /** A sparse univariate polynomial represented by a hash table mapping terms to coefficients. This allows to avoid duplicate terms without a large overhead. */ class UniHashPolynomial { public: /** Add +t^exponent or -t^exponent to the polynomial depending on whether plus is true or false, respectively. */ void add(bool plus, const mpz_class& exponent); /** Add coef*t^exponent to the polynomial. */ void add(int coef, size_t exponent); /** Add coef*t^exponent to the polynomial. */ void add(const mpz_class& coef, const mpz_class& exponent); void feedTo(CoefBigTermConsumer& consumer, bool inCanonicalOrder = false) const; size_t getTermCount() const; private: typedef HashMap TermMap; TermMap _terms; }; #endif frobby-0.9.5/src/VarNames.cpp000066400000000000000000000113561401527164200160270ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "VarNames.h" #include "error.h" #include "FrobbyStringStream.h" #include VarNames::VarNames() { } VarNames::VarNames(size_t varCount) { for (size_t i = 0; i < varCount; ++i) { FrobbyStringStream out; out << 'x' << (i + 1); addVar(out); } } VarNames::VarNames(const VarNames& names) { *this = names; } VarNames::~VarNames() { clear(); } bool VarNames::addVar(const string& name) { ASSERT(name != ""); pair p =_nameToIndex.insert (make_pair(name, _indexToName.size())); if (!p.second) { ASSERT(contains(name)); return false; } try { _indexToName.push_back(&(p.first->first)); // TODO: fix to vector of iters } catch (...) { _nameToIndex.erase(p.first); throw; } if (getVarCount() == invalidIndex) reportError("Too many variable names"); ASSERT(contains(name)); return true; } void VarNames::addVarSyntaxCheckUnique(const Scanner& in, const string& name) { if (!addVar(name)) reportSyntaxError(in, "The variable " + name + " is declared twice."); ASSERT(contains(name)); } bool VarNames::operator<(const VarNames& names) const { return lexicographical_compare(_indexToName.begin(), _indexToName.end(), names._indexToName.begin(), names._indexToName.end(), compareNames); } size_t VarNames::getIndex(const string& name) const { VarNameMap::const_iterator it = _nameToIndex.find(name); if (it == _nameToIndex.end()) return invalidIndex; else return it->second; } bool VarNames::contains(const string& name) const { return getIndex(name) != invalidIndex; } bool VarNames::namesAreDefault() const { VarNames names(getVarCount()); return *this == names; } const string& VarNames::getName(size_t index) const { ASSERT(index < _indexToName.size()); return *(_indexToName[index]); } void VarNames::clear() { _nameToIndex.clear(); _indexToName.clear(); } bool VarNames::empty() const { return _indexToName.empty(); } VarNames& VarNames::operator=(const VarNames& names) { if (this != &names) { clear(); _indexToName.reserve(names.getVarCount()); for (size_t var = 0; var < names.getVarCount(); ++var) addVar(names.getName(var)); } return *this; } bool VarNames::operator==(const VarNames& names) const { if (getVarCount() != names.getVarCount()) return false; for (size_t var = 0; var < getVarCount(); ++var) if (getName(var) != names.getName(var)) return false; return true; } bool VarNames::operator!=(const VarNames& names) const { return !operator==(names); } void VarNames::swapVariables(size_t a, size_t b) { ASSERT(a < getVarCount()); ASSERT(b < getVarCount()); ASSERT(_nameToIndex[*_indexToName[a]] == a); ASSERT(_nameToIndex[*_indexToName[b]] == b); if (a == b) return; std::swap(_indexToName[a], _indexToName[b]); _nameToIndex[*_indexToName[a]] = a; _nameToIndex[*_indexToName[b]] = b; ASSERT(_nameToIndex[*_indexToName[a]] == a); ASSERT(_nameToIndex[*_indexToName[b]] == b); } void VarNames::projectVar(size_t index) { ASSERT(index < getVarCount()); VarNames names; for (size_t var = 0; var < getVarCount(); ++var) if (var != index) names.addVar(getName(var)); *this = names; } void VarNames::toString(string& str) const { str.clear(); for (size_t i = 0; i < getVarCount(); ++i) { if (i != 0) str += ", "; str += getName(i); } } void VarNames::print(FILE* file) const { fputs("VarNames(", file); for (size_t i = 0; i < getVarCount(); ++i) { if (i != 0) fputs(", ", file); fprintf(file, "%lu<->\"%s\"", (unsigned long)i, getName(i).c_str()); } fputs(")\n", file); } void VarNames::swap(VarNames& names) { _indexToName.swap(names._indexToName); _nameToIndex.swap(names._nameToIndex); } bool VarNames::compareNames(const string* a, const string* b) { return *a < *b; } frobby-0.9.5/src/VarNames.h000066400000000000000000000065741401527164200155020ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef VAR_NAMES_GUARD #define VAR_NAMES_GUARD #include "HashMap.h" #include #include #include class Scanner; /** Defines the variables of a polynomial ring and facilities IO involving them. @todo Rename to Ring or a similar name. @todo make this class immutable and make a VarNamesBuilder. @todo make copies share the same memory and use reference counting to deallocate the shared memory. @todo make equality check for the same memory and thus return true very quickly if that is the case. */ class VarNames { public: VarNames(); VarNames(size_t varCount); VarNames(const VarNames& names); ~VarNames(); /** Adds the variable and returns true if name is not already a variable. Otherwise it returns false without adding the variable (again). */ bool addVar(const string& name); /** As addvar, except it reports a syntax error if name is already a variable. @todo Move this somewhere more appropriate. */ void addVarSyntaxCheckUnique(const Scanner& in, const string& name); /** This also depends on the order of the names. */ bool operator<(const VarNames& names) const; /** Returns VarNames::invalidIndex() if name is not known. */ size_t getIndex(const string& name) const; /** Returns true if name is the name of a variable. */ bool contains(const string& name) const; /** Returns true if the names are x1, x2 and so on. */ bool namesAreDefault() const; /** The returned reference can become invalid next time addVar is called. */ const string& getName(size_t index) const; /** Returns the current number of variables. */ size_t getVarCount() const; /** Resets the number of variables to zero. */ void clear(); /** Returns true if the number of variables is zero. */ bool empty() const; VarNames& operator=(const VarNames& names); bool operator==(const VarNames& names) const; bool operator!=(const VarNames& names) const; /** Swaps the variables with indexes a and b. */ void swapVariables(size_t a, size_t b); void projectVar(size_t index); void toString(string& str) const; void print(FILE* file) const; // For debug void swap(VarNames& names); /** Returns a fixed variable offset that is always invalid. */ static const size_t invalidIndex = static_cast(-1); private: static bool compareNames(const string* a, const string* b); typedef unordered_map VarNameMap; //typedef HashMap VarNameMap; VarNameMap _nameToIndex; vector _indexToName; }; inline size_t VarNames::getVarCount() const { return _indexToName.size(); } #endif frobby-0.9.5/src/VarSorter.cpp000066400000000000000000000050721401527164200162400ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "VarSorter.h" #include "TermTranslator.h" #include class VarSorterCompare { public: VarSorterCompare(const VarNames& names): _names(names) { } bool operator()(size_t a, size_t b) const { return _names.getName(a) < _names.getName(b); } private: void operator=(const VarSorterCompare&); // To make unaccessible. const VarNames& _names; }; VarSorter::VarSorter(const VarNames& names): _names(names), _bigTmpTerm(names.getVarCount()), _tmpTerm(names.getVarCount()) { _permutation.reserve(names.getVarCount()); for (size_t i = 0; i < names.getVarCount(); ++i) _permutation.push_back(i); sort(_permutation.begin(), _permutation.end(), VarSorterCompare(_names)); } void VarSorter::getOrderedNames(VarNames& names) { names.clear(); for (size_t i = 0; i < _permutation.size(); ++i) names.addVar(_names.getName(_permutation[i])); } void VarSorter::permute(vector& term) { ASSERT(term.size() == _bigTmpTerm.size()); _bigTmpTerm.swap(term); for (size_t i = 0; i < _permutation.size(); ++i) mpz_swap(term[i].get_mpz_t(), _bigTmpTerm[_permutation[i]].get_mpz_t()); } void VarSorter::permute(Exponent* term) { _tmpTerm = term; for (size_t i = 0; i < _permutation.size(); ++i) std::swap(term[i], _tmpTerm[_permutation[i]]); } void VarSorter::permute(TermTranslator* translator) { ASSERT(translator->getVarCount() == _permutation.size()); size_t varCount = _permutation.size(); vector done(translator->getVarCount()); for (size_t var = 0; var < varCount; ++var) { if (done[var]) continue; size_t v = var; while (true) { done[v] = true; size_t nextInCycle = _permutation[v]; if (done[nextInCycle]) break; translator->swapVariables(v, nextInCycle); v = nextInCycle; } } } frobby-0.9.5/src/VarSorter.h000066400000000000000000000026731401527164200157110ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef VAR_SORTER_GUARD #define VAR_SORTER_GUARD #include "VarNames.h" #include #include "Term.h" class TermTranslator; struct VarSorter { // Makes this object represent a sorted permutation of names. VarSorter(const VarNames& names); // Permute the variables according to the permutation generated at // construction. void permute(vector& term); void permute(Exponent* term); void permute(TermTranslator* translator); // Set the parameter equal the names this object represents in // sorted order. void getOrderedNames(VarNames& names); private: vector _permutation; VarNames _names; vector _bigTmpTerm; Term _tmpTerm; }; #endif frobby-0.9.5/src/display.cpp000066400000000000000000000102301401527164200157460ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "display.h" #include namespace { /** Automatically break lines at this width. */ static const size_t ConsoleWidth = 79; /** Helper class for display(). */ class Printer { public: Printer(const string& msg, const string& prepend): _pos(0), _lineSize(0), _msg(msg), _prefix(prepend) { string wordSpacePrefix; while (_pos < _msg.size()) { // We are always at the start of a line at this point. ASSERT(_lineSize == 0); readIndentation(); printRaw(_prefix); printRaw(_indentation); if (_pos == _msg.size()) break; if (_msg[_pos] == '\n') { newLine(); ++_pos; continue; } wordSpacePrefix.clear(); while (_pos < _msg.size()) { if (_msg[_pos] == '\n') { ++_pos; break; } if (isspace(_msg[_pos])) { wordSpacePrefix += _msg[_pos]; ++_pos; continue; } ASSERT(!isspace(_msg[_pos])); ASSERT(_msg[_pos] != '\n'); ASSERT(_pos < _msg.size()); string word; while (_pos < _msg.size() && _msg[_pos] != '\n' && !isspace(_msg[_pos])) { word += _msg[_pos]; ++_pos; } ASSERT(!word.empty()); printWord(wordSpacePrefix, word); wordSpacePrefix.clear(); } newLine(); } } private: void newLine() { printRaw('\n'); _lineSize = 0; } void readIndentation() { // Read whitespace at beginning of line. _indentation.clear(); while (_pos < _msg.size() && _msg[_pos] != '\n' && isspace(_msg[_pos])) { _indentation += _msg[_pos]; ++_pos; } } void printWord(const string& wordSpacePrefix, const string& word) { ASSERT(!word.empty()); // Note that this will print beyond the console width if word is // the first thing we are printing on this line. That is because // there then is no way to fit the word on one line. size_t wordAndPrefixSize = word.size() + wordSpacePrefix.size(); if (_lineSize != 0 && _lineSize + wordAndPrefixSize > ConsoleWidth) { // we skip space before word if inserting newline newLine(); printRaw(_prefix); printRaw(_indentation); } else printRaw(wordSpacePrefix); printRaw(word); } void printRaw(const string& word) { fputs(word.c_str(), stderr); _lineSize += word.size(); } void printRaw(char c) { fputc(c, stderr); ++_lineSize; } size_t _pos; size_t _lineSize; const string& _msg; const string& _prefix; string _indentation; }; } void display(const string& msg, const string& prepend) { Printer(msg, prepend); } void displayNote(const string& msg) { display("NOTE: " + msg + "\n"); } void displayError(const string& msg) { display("ERROR: " + msg + "\n"); } void displayInternalError(const string& msg) { display("INTERNAL ERROR: " + msg + "\n"); } void displayException(const std::exception& exception) { try { display(exception.what()); } catch (...) { fputs("\n\n*** Error while printing error! ***\n", stderr); fflush(stderr); fputs("*** Retrying display of error using simpler display method. ***\n", stderr); fflush(stderr); fputs(exception.what(), stderr); fflush(stderr); throw; } } frobby-0.9.5/src/display.h000066400000000000000000000036071401527164200154250ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2010 University of Aarhus Contact Bjarke Hammersholt Roune for license information (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef DISPLAY_GUARD #define DISPLAY_GUARD /** @file display.h This file contains functions for printing strings to standard error. They all perform automatic line breaking suitable for printing to a console. */ /** Display msg to standard error with automatic line breaking. If a automatically broken line begins with whitespace, that whitespace is repeated in front of every line that is generated from breaking it. @param prepend Print this in front of every line that is printed. */ void display(const string& msg, const string& prepend = ""); /** Display msg to standard error in a way that indicates that this is something that the user should take note of but that is not an error. */ void displayNote(const string& msg); /** Display msg to standard error in a way that indicates that it is an error. */ void displayError(const string& msg); /** Display msg to standard in a way that indicates that it is an internal error. */ void displayInternalError(const string& errorMsg); /** Display the message of exception. */ void displayException(const std::exception& exception); #endif frobby-0.9.5/src/doxygen.cpp000066400000000000000000000123751401527164200157720ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ /** @file doxygen.cpp This file contains content for the Doxygen-generated documentation that does not fit elsewhere. @todo Add all Frobby code to a FrobbyImpl namespace or some such. Perhaps do it by starting the namespace in stdinc.h, and then adding an include to the bottom of every .cpp file that closes the namespace. @todo Do something to automatically get a Doxygen module of all things not in a Doxygen module. This is a good way to capture those things falling through the cracks by forgetting an ingroup directive. Perhaps do this as for the idea with a namespace above, but instead start a weakgroup in stdinc.h and end it in the bottom include. @todo Go through the documentation in frobby.h and properly Doxify it and use LaTeX. Explain the mathematical background a bit, including definitions of each operation. @todo Add a gradedHilbertPoincareSeries function to library interface which dots each multigraded piece with some given vector, rather than (1,...,1) as for univariateHilbertPointcareSeries. @todo Make a Slice Algorithm Module. Look into this set of classes and remove any smeels. Then document those classes that need it. @todo Add examples sections to library interface documentation. I believe there is a command for this in Doxygen. Especially specify what happens with the zero ideal, the whole ring ideal and when there are no variables. @todo Take a look at MsmSlice::baseCase for the case where the ideal is not simplified. Some of the base cases for the simplified case should apply as well for the non-simplified case, or at least it should be possible to modify them to apply. @todo See if this idea works: If m is a minimal generator of I, and m has maximal exponent in some var, and has the unique minimum exponent in some other var, than we can do an inner split on that other var. @todo Grep for TODO in upper case and add everything found by that as Doxygen todo's. */ /** \defgroup Facade The Facade Module The facades follow the %Facade Pattern, which is to say that they put a convenient interface on an underlying system whose interface is more difficult to use. Apart from implementing this pattern, the facades also take on the responsibility for printing out actions that are being carried out, and how long each step took, if asked to do so. This is a convenient way to do this, since each call to a facade corresponds to some concrete action to carry out, and the printing code does not belong in the code doing the actual computations and it would be much duplicated if it resided in the public interface code. That the facades take on this responsibility implies that public interface code must never call computational code without using a facade, as then that computation will not be printed. This has the occasional result that facades are put on code whose interface is simple enough that it otherwise would not need a facade. @todo Document each facade. */ /** \defgroup IO The Input/Output Module @todo Describe the IO module. @todo Add the IO classes to the IO module. @todo Take a look at the IO module, change it if it needs it, and then document it. */ /** \mainpage %Frobby is a program and library for performing computations related to monomial ideals, such as Hilbert-Poincare series and irreducible decomposition. %Frobby is loosely structured into a number of layers. These are the bottom layer which performs the actual computations, the middle layer that gives the functionality in the bottom layer a more convenient interface, and the top layer which consists of Frobby's interface to the world as a library or console program. The interface to %Frobby as a library is in the file frobby.h. The console layer has more code to it, where the central classes are those derived from the classes Action and IOHandler. The middle layer is composed of a number of classes following the %Facade design pattern, and they all derive from the class Facade. The bottom layer consists of various classes and functions that perform calculations on monomial ideals. The main functionality is accessed by using the function \ref runSliceAlgorithm, which runs the Slice Algorithm on a monomial ideal. The Slice Algorithm can be specialized to compute a number of things, and these specializations are implemented as derived classes of SliceStrategy, which can be passed as a parameter to \ref runSliceAlgorithm. */ frobby-0.9.5/src/dynamicFrobeniusAlgorithm.cpp000066400000000000000000000033341401527164200214600ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "dynamicFrobeniusAlgorithm.h" #include #include mpz_class dynamicFrobeniusAlgorithm(const vector& numbers) { if (numbers.size() == 2) return numbers[0] * numbers[1] - numbers[0] - numbers[1]; set representable; representable.insert(0); mpz_class minNumber = *min_element(numbers.begin(), numbers.end()); mpz_class maximumNotRepresentable = 0; int representableRun = 0; mpz_class number = 1; while (representableRun < minNumber) { bool isNumberRepresentable = false; for (size_t i = 0; i < numbers.size(); ++i) { if (representable.find(number - numbers[i]) != representable.end()) { isNumberRepresentable = true; break; } } if (isNumberRepresentable) { representable.insert(number); ++representableRun; } else { maximumNotRepresentable = number; representableRun = 0; } ++number; } return maximumNotRepresentable; } frobby-0.9.5/src/dynamicFrobeniusAlgorithm.h000066400000000000000000000016601401527164200211250ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef DYNAMIC_FROBENIUS_ALGORITHM_GUARD #define DYNAMIC_FROBENIUS_ALGORITHM_GUARD #include mpz_class dynamicFrobeniusAlgorithm(const vector& degrees); #endif frobby-0.9.5/src/error.cpp000066400000000000000000000033651401527164200154450ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "error.h" #include "Scanner.h" #include "FrobbyStringStream.h" void reportError(const string& errorMsg) { FrobbyStringStream err; err << "ERROR: " << errorMsg; throw FrobbyException(err); } void reportInternalError(const string& errorMsg) { FrobbyStringStream err; err << "INTERNAL ERROR: " << errorMsg << '\n'; throw InternalFrobbyException(err); } void reportInternalError (const string& errorMsg, const char* file, unsigned int lineNumber) { FrobbyStringStream err; err << errorMsg << '\n' << "The internal error occurred in file " << file << " on line " << lineNumber << '.'; reportInternalError(err); } void reportSyntaxError(const Scanner& scanner, const string& errorMsg) { FrobbyStringStream err; err << "SYNTAX ERROR ("; if (scanner.getFormat() != "") err << "format " << scanner.getFormat() << ", "; err << "line " << scanner.getLineNumber() << "):\n " << errorMsg << '\n'; throw FrobbyException(err); } frobby-0.9.5/src/error.h000066400000000000000000000046111401527164200151050ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef ERROR_GUARD #define ERROR_GUARD #include #include class Scanner; /** This is the base of the Frobby exception hierarchy for exceptions that can occur due to expected error conditions. */ class FrobbyException : public std::runtime_error { public: FrobbyException(const string& str): runtime_error(str) {} }; /** This exception signals that a bug in Frobby has been detected. */ class InternalFrobbyException : public std::logic_error { public: InternalFrobbyException(const string& str): logic_error(str) {} }; // The do {...} while (0) is to collect everything into a single // statement that still requires a semicolon after it. The throw is to // prevent spurious compiler warnings about a missing return // statement. #define INTERNAL_ERROR(msg) \ do { \ reportInternalError(msg, __FILE__, __LINE__); \ throw; \ } while (false) #define INTERNAL_ERROR_UNIMPLEMENTED() \ INTERNAL_ERROR("Called function that has not been implemented.") // These methods throw exceptions. void reportError(const string& errorMsg); void reportInternalError(const string& errorMsg); void reportInternalError (const string& errorMsg, const char* file, unsigned int lineNumber); void reportSyntaxError(const Scanner& scanner, const string& errorMsg); template void throwError(const string& errorMsg) { throw Exception("ERROR: " + errorMsg + '\n'); } #define DEFINE_EXCEPTION(NAME) \ class NAME##Exception : public FrobbyException { \ public: \ NAME##Exception(const string& str): FrobbyException(str) {} \ } DEFINE_EXCEPTION(UnknownName); DEFINE_EXCEPTION(AmbiguousName); DEFINE_EXCEPTION(Unsupported); #endif frobby-0.9.5/src/fourti2.cpp000066400000000000000000000055071401527164200157060ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "fourti2.h" #include "BigIdeal.h" #include "Scanner.h" #include "IOHandler.h" #include "error.h" namespace fourti2 { void readTerm(BigIdeal& ideal, Scanner& scanner) { ideal.newLastTerm(); mpz_class tmp; scanner.readIntegerAndNegativeAsZero(tmp); if (tmp > 0) reportError("Encountered positive entry as first entry in term. " "This is impossible if using the required degree reverse " "lexicographic term order.\n"); for (size_t i = 0; i < ideal.getVarCount(); ++i) { scanner.readIntegerAndNegativeAsZero(tmp); if (tmp > 0) ideal.getLastTermExponentRef(i) = tmp; } } void readGrobnerBasis(Scanner& scanner, BigIdeal& basis) { size_t termCount; size_t varCount; scanner.readSizeT(termCount); scanner.readSizeT(varCount); if (varCount == 0) reportError ("The matrix defining the Frobenius-related Grobner basis must " "have at least one column, and this one has none."); VarNames names(varCount - 1); basis.clearAndSetNames(names); for (size_t i = 0; i < termCount; ++i) readTerm(basis, scanner); } void readLatticeBasis(Scanner& scanner, BigIdeal& basis) { size_t rowCount; size_t columnCount; scanner.readSizeT(rowCount); scanner.readSizeT(columnCount); VarNames names(columnCount); basis.clearAndSetNames(names); for (unsigned int i = 0; i < rowCount; ++i) { basis.newLastTerm(); for (unsigned int j = 0; j < columnCount; ++j) scanner.readInteger(basis.getLastTermExponentRef(j)); } } void writeLatticeBasis(FILE* out, const BigIdeal& basis) { fprintf(out, "%lu %lu\n", (unsigned long)basis.getGeneratorCount(), (unsigned long)basis.getVarCount()); for (unsigned int i = 0; i < basis.getGeneratorCount(); ++i) { const char* prefix = ""; for (unsigned int j = 0; j < basis[i].size(); ++j) { gmp_fprintf(out, "%s%Zd", prefix, basis[i][j].get_mpz_t()); prefix = " "; } fputc('\n', out); } } } frobby-0.9.5/src/fourti2.h000066400000000000000000000020311401527164200153400ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef FOURTI2_GUARD #define FOURTI2_GUARD class BigIdeal; class Scanner; namespace fourti2 { void readGrobnerBasis(Scanner& scanner, BigIdeal& basis); void readLatticeBasis(Scanner& scanner, BigIdeal& basis); void writeLatticeBasis(FILE* out, const BigIdeal& basis); } #endif frobby-0.9.5/src/fplllIO.cpp000066400000000000000000000045321401527164200156520ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "fplllIO.h" #include "BigIdeal.h" #include "Scanner.h" #include "error.h" #include "FrobbyStringStream.h" namespace fplll { void readLatticeBasis(Scanner& scanner, BigIdeal& basis) { vector > tmp; scanner.expect('['); while (!scanner.match(']')) { scanner.expect('['); tmp.resize(tmp.size() + 1); while (!scanner.match(']')) { mpz_class integer; scanner.readInteger(integer); tmp.back().push_back(integer); } if (tmp.front().size() != tmp.back().size()) { FrobbyStringStream errorMsg; errorMsg << "Row 1 has " << tmp.front().size() << " entries, while row " << tmp.size() << " has " << tmp.back().size() << " entries."; reportSyntaxError(scanner, errorMsg); } } VarNames names(tmp.empty() ? 0 : tmp.front().size()); basis.clearAndSetNames(names); for (unsigned int i = 0; i < tmp.size(); ++i) { basis.newLastTerm(); for (unsigned int j = 0; j < tmp[i].size(); ++j) basis.getLastTermExponentRef(j) = tmp[i][j]; } } void writeLatticeBasis(FILE* out, const BigIdeal& basis) { fputs("[\n", out); for (unsigned int i = 0; i < basis.getGeneratorCount(); ++i) { fputs(" [", out); const char* prefix = ""; for (unsigned int j = 0; j < basis[i].size(); ++j) { gmp_fprintf(out, "%s%Zd", prefix, basis[i][j].get_mpz_t()); prefix = " "; } fputs("]\n", out); } fputs("]\n", out); } } frobby-0.9.5/src/fplllIO.h000066400000000000000000000017351401527164200153210ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef FPLLL_IO_GUARD #define FPLLL_IO_GUARD class BigIdeal; class Scanner; namespace fplll { void readLatticeBasis(Scanner& scanner, BigIdeal& basis); void writeLatticeBasis(FILE* out, const BigIdeal& basis); } #endif frobby-0.9.5/src/frobby.cpp000066400000000000000000000322341401527164200155740ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "frobby.h" #include "BigIdeal.h" #include "SliceFacade.h" #include "BigTermConsumer.h" #include "TermTranslator.h" #include "Term.h" #include "error.h" #include "CoefBigTermConsumer.h" #include "IdealFacade.h" #include "SliceParams.h" const char* const frobby_version = "0.9.5"; class ConsumerWrapper { protected: ConsumerWrapper(size_t varCount): _varCount(varCount), _term(new mpz_ptr[varCount]) { } virtual ~ConsumerWrapper() { delete[] _term; } void setTerm(const Term& term, const TermTranslator& translator) { ASSERT(term.getVarCount() == _varCount); ASSERT(translator.getVarCount() == _varCount); for (size_t var = 0; var < _varCount; ++var) _term[var] = const_cast (translator.getExponent(var, term).get_mpz_t()); } void setTerm(const vector& term) { ASSERT(term.size() == _varCount); for (size_t var = 0; var < _varCount; ++var) _term[var] = const_cast(term[var].get_mpz_t()); } size_t _varCount; mpz_ptr* _term; }; class ExternalIdealConsumerWrapper : public BigTermConsumer, public ConsumerWrapper { public: ExternalIdealConsumerWrapper(Frobby::IdealConsumer* consumer, size_t varCount): ConsumerWrapper(varCount), _consumer(consumer) { ASSERT(_consumer != 0); } virtual void consumeRing(const VarNames& names) { ASSERT(names.getVarCount() == _varCount); } virtual void beginConsuming() { _consumer->idealBegin(_varCount); } virtual void consume(const Term& term, const TermTranslator& translator) { ASSERT(term.getVarCount() == _varCount); ASSERT(translator.getVarCount() == _varCount); setTerm(term, translator); _consumer->consume(_term); } virtual void consume(const vector& term) { ASSERT(term.size() == _varCount); setTerm(term); _consumer->consume(_term); } virtual void doneConsuming() { _consumer->idealEnd(); } private: Frobby::IdealConsumer* _consumer; }; class ExternalPolynomialConsumerWrapper : public CoefBigTermConsumer, public ConsumerWrapper { public: ExternalPolynomialConsumerWrapper(Frobby::PolynomialConsumer* consumer, size_t varCount): ConsumerWrapper(varCount), _consumer(consumer), _varCount(varCount) { ASSERT(consumer != 0); } virtual void consumeRing(const VarNames& names) { ASSERT(names.getVarCount() == _varCount); } virtual void beginConsuming() { _consumer->polynomialBegin(_varCount); } virtual void consume(const mpz_class& coef, const Term& term, const TermTranslator& translator) { ASSERT(term.getVarCount() == _varCount); ASSERT(translator.getVarCount() == _varCount); setTerm(term, translator); _consumer->consume(coef.get_mpz_t(), _term); } virtual void consume(const mpz_class& coef, const vector& term) { ASSERT(term.size() == _varCount); for (size_t var = 0; var < _varCount; ++var) _term[var] = const_cast(term[var].get_mpz_t()); _consumer->consume(coef.get_mpz_t(), _term); } // TODO: make a note somewhere that in case of an exception, // polynomialEnd might not get called, this being because it is too // much of a burden to require it not to throw any // exceptions. Hmm... maybe there is an alternative solution. virtual void doneConsuming() { _consumer->polynomialEnd(); } private: Frobby::PolynomialConsumer* _consumer; size_t _varCount; }; Frobby::IdealConsumer::~IdealConsumer() { } void Frobby::IdealConsumer::idealBegin(size_t varCount) { } void Frobby::IdealConsumer::idealEnd() { } Frobby::PolynomialConsumer::~PolynomialConsumer() { } void Frobby::PolynomialConsumer::polynomialBegin(size_t varCount) { } void Frobby::PolynomialConsumer::polynomialEnd() { } namespace FrobbyImpl { using ::BigIdeal; class FrobbyIdealHelper { public: FrobbyIdealHelper(size_t variableCount): _ideal(VarNames(variableCount)), _atVariable(variableCount) { } static const BigIdeal& getIdeal(const Frobby::Ideal& ideal) { return ideal._data->_ideal; } private: friend class Frobby::Ideal; BigIdeal _ideal; size_t _atVariable; }; } Frobby::Ideal::Ideal(size_t variableCount) { _data = new FrobbyImpl::FrobbyIdealHelper(variableCount); } Frobby::Ideal::Ideal(const Ideal& ideal) { _data = new FrobbyImpl::FrobbyIdealHelper(*ideal._data); } Frobby::Ideal::~Ideal() { delete _data; } Frobby::Ideal& Frobby::Ideal::operator=(const Ideal& ideal) { // Allocate new object before deleting old object to leave *this // in a valid state in case of new throwing an exception. FrobbyImpl::FrobbyIdealHelper* newValue = new FrobbyImpl::FrobbyIdealHelper(*ideal._data); delete _data; _data = newValue; return *this; } void Frobby::Ideal::addExponent(const mpz_t exponent) { ASSERT(_data->_atVariable <= _data->_ideal.getVarCount()); if (_data->_atVariable == _data->_ideal.getVarCount()) { _data->_ideal.newLastTerm(); _data->_atVariable = 0; if (_data->_ideal.getVarCount() == 0) return; } mpz_class& ref = _data->_ideal.getLastTermExponentRef(_data->_atVariable); mpz_set(ref.get_mpz_t(), exponent); ++_data->_atVariable; } void Frobby::Ideal::addExponent(int exponent) { mpz_class tmp(exponent); addExponent(tmp.get_mpz_t()); } void Frobby::Ideal::addExponent(unsigned int exponent) { mpz_class tmp(exponent); addExponent(tmp.get_mpz_t()); } bool Frobby::alexanderDual(const Ideal& ideal, const mpz_t* reflectionMonomial, IdealConsumer& consumer) { const BigIdeal& bigIdeal = FrobbyImpl::FrobbyIdealHelper::getIdeal(ideal); ExternalIdealConsumerWrapper wrappedConsumer (&consumer, bigIdeal.getVarCount()); SliceParams params; SliceFacade facade(params, bigIdeal, wrappedConsumer); if (reflectionMonomial == 0) facade.computeAlexanderDual(); else { vector point; point.resize(bigIdeal.getVarCount()); for (size_t var = 0; var < bigIdeal.getVarCount(); ++var) mpz_set(point[var].get_mpz_t(), reflectionMonomial[var]); // We guarantee not to retain a reference to reflectionMonomial // when providing terms to the consumer. reflectionMonomial = 0; try { facade.computeAlexanderDual(point); } catch (const FrobbyException&) { return false; } } return true; } bool Frobby::alexanderDual(const Ideal& ideal, const Ideal& reflectionMonomial, IdealConsumer& consumer) { const BigIdeal& bigIdeal = FrobbyImpl::FrobbyIdealHelper::getIdeal(ideal); const BigIdeal& reflectionIdeal = FrobbyImpl::FrobbyIdealHelper::getIdeal(reflectionMonomial); if (reflectionIdeal.getGeneratorCount() != 1) return false; if (reflectionIdeal.getVarCount() != bigIdeal.getVarCount()) return false; const vector& monomial = reflectionIdeal.getTerm(0); const mpz_t* monomialPtr = 0; if (reflectionIdeal.getVarCount() > 0) monomialPtr = (const mpz_t*)&(monomial[0]); return alexanderDual(ideal, monomialPtr, consumer); } void Frobby::multigradedHilbertPoincareSeries(const Ideal& ideal, PolynomialConsumer& consumer) { const BigIdeal& bigIdeal = FrobbyImpl::FrobbyIdealHelper::getIdeal(ideal); ExternalPolynomialConsumerWrapper wrappedConsumer (&consumer, bigIdeal.getVarCount()); SliceParams params; SliceFacade facade(params, bigIdeal, wrappedConsumer); facade.computeMultigradedHilbertSeries(); } void Frobby::univariateHilbertPoincareSeries(const Ideal& ideal, PolynomialConsumer& consumer) { const BigIdeal& bigIdeal = FrobbyImpl::FrobbyIdealHelper::getIdeal(ideal); ExternalPolynomialConsumerWrapper wrappedConsumer(&consumer, 1); SliceParams params; SliceFacade facade(params, bigIdeal, wrappedConsumer); facade.computeUnivariateHilbertSeries(); } /** @todo: This seems redundant with IdealSplitter. Investigate. */ class IrreducibleIdealDecoder : public Frobby::IdealConsumer { public: IrreducibleIdealDecoder(IdealConsumer* consumer): _varCount(0), _consumer(consumer), _term(0) { ASSERT(_consumer != 0); } ~IrreducibleIdealDecoder() { } virtual void idealBegin(size_t varCount) { _varCount = varCount; _term.resize(varCount); for (size_t var = 0; var < _varCount; ++var) _term[var] = _zero.get_mpz_t(); } virtual void idealEnd() { _term.clear(); } virtual void consume(mpz_ptr* exponentVector) { _consumer->idealBegin(_varCount); bool isIdentity = true; for (size_t var = 0; var < _varCount; ++var) { if (mpz_cmp_ui(exponentVector[var], 0) != 0) { isIdentity = false; _term[var] = exponentVector[var]; _consumer->consume(&*(_term.begin())); _term[var] = _zero.get_mpz_t(); } } _consumer->idealEnd(); } private: size_t _varCount; IdealConsumer* _consumer; vector _term; mpz_class _zero; }; void Frobby::irreducibleDecompositionAsIdeals(const Ideal& ideal, IdealConsumer& consumer) { IrreducibleIdealDecoder wrappedConsumer(&consumer); if (!irreducibleDecompositionAsMonomials(ideal, wrappedConsumer)) { const BigIdeal& bigIdeal = FrobbyImpl::FrobbyIdealHelper::getIdeal(ideal); consumer.idealBegin(bigIdeal.getVarCount()); consumer.idealEnd(); } } bool Frobby::irreducibleDecompositionAsMonomials(const Ideal& ideal, IdealConsumer& consumer) { const BigIdeal& bigIdeal = FrobbyImpl::FrobbyIdealHelper::getIdeal(ideal); if (bigIdeal.getGeneratorCount() == 0) return false; ExternalIdealConsumerWrapper wrappedConsumer (&consumer, bigIdeal.getVarCount()); SliceParams params; SliceFacade facade(params, bigIdeal, wrappedConsumer); facade.computeIrreducibleDecomposition(true); return true; } void Frobby::primaryDecomposition(const Ideal& ideal, IdealConsumer& consumer) { const BigIdeal& bigIdeal = FrobbyImpl::FrobbyIdealHelper::getIdeal(ideal); ExternalIdealConsumerWrapper wrappedConsumer (&consumer, bigIdeal.getVarCount()); SliceParams params; SliceFacade facade(params, bigIdeal, wrappedConsumer); facade.computePrimaryDecomposition(); } void Frobby::maximalStandardMonomials(const Ideal& ideal, IdealConsumer& consumer) { const BigIdeal& bigIdeal = FrobbyImpl::FrobbyIdealHelper::getIdeal(ideal); ExternalIdealConsumerWrapper wrappedConsumer (&consumer, bigIdeal.getVarCount()); SliceParams params; SliceFacade facade(params, bigIdeal, wrappedConsumer); facade.computeMaximalStandardMonomials(); } bool Frobby::solveStandardMonomialProgram(const Ideal& ideal, const mpz_t* l, IdealConsumer& consumer) { ASSERT(l != 0); const BigIdeal& bigIdeal = FrobbyImpl::FrobbyIdealHelper::getIdeal(ideal); vector grading; for (size_t var = 0; var < bigIdeal.getVarCount(); ++var) grading.push_back(mpz_class(l[var])); ExternalIdealConsumerWrapper wrappedConsumer (&consumer, bigIdeal.getVarCount()); SliceParams params; params.useIndependenceSplits(false); // not supported SliceFacade facade(params, bigIdeal, wrappedConsumer); mpz_class dummy; return facade.solveStandardProgram(grading, dummy, false); } void Frobby::codimension(const Ideal& ideal, mpz_t codim) { const BigIdeal& bigIdeal = FrobbyImpl::FrobbyIdealHelper::getIdeal(ideal); dimension(ideal, codim); mpz_ui_sub(codim, bigIdeal.getVarCount(), codim); } void Frobby::dimension(const Ideal& ideal, mpz_t dim) { const BigIdeal& bigIdeal = FrobbyImpl::FrobbyIdealHelper::getIdeal(ideal); IdealFacade facade(false); mpz_class dimen = facade.computeDimension(bigIdeal, false); mpz_set(dim, dimen.get_mpz_t()); } void Frobby::associatedPrimes(const Ideal& ideal, IdealConsumer& consumer) { const BigIdeal& bigIdeal = FrobbyImpl::FrobbyIdealHelper::getIdeal(ideal); IrreducibleIdealDecoder decodingConsumer(&consumer); ExternalIdealConsumerWrapper wrappedConsumer (&decodingConsumer, bigIdeal.getVarCount()); SliceParams params; SliceFacade facade(params, bigIdeal, wrappedConsumer); facade.computeAssociatedPrimes(); } frobby-0.9.5/src/frobby.h000066400000000000000000000327071401527164200152460ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef FROBBY_INCLUSION_GUARD #define FROBBY_INCLUSION_GUARD // This file contains the public library interface of Frobby. #include "gmp.h" extern "C" const char* const frobby_version; /** The namespace FrobbyImpl is for internal use inside Frobby only. It is not part of the public interface of Frobby. */ namespace FrobbyImpl { class FrobbyIdealHelper; } /** The namespace Frobby contains the public interface of Frobby. */ namespace Frobby { class Ideal { public: // Construct an ideal with variableCount variables. Ideal(size_t variableCount); Ideal(const Ideal& ideal); ~Ideal(); Ideal& operator=(const Ideal& ideal); /** Call addExponent once for each variable to add a term one exponent at a time. This object keeps track of how many times you called addExponent to know which variable is to be raised to the passed-in exponent. Frobby does not alter the passed-in exponent and retains no reference to it. The exponent must be non-negative. It is allowed to mix the different overloads even within the same term. If the number of variables is zero, then a call to addExponent adds the element 1 as a generator. In that case it makes no difference what the value of exponent is. */ void addExponent(const mpz_t exponent); void addExponent(int exponent); void addExponent(unsigned int exponent); private: friend class FrobbyImpl::FrobbyIdealHelper; FrobbyImpl::FrobbyIdealHelper* _data; }; /** This class provides a way to get monomial ideals as output from Frobby one generator at a time. Many computations performed by Frobby can produce output continously instead of having to wait for the computation to be done to be able to produce any output. Often the output can be processed, such as writing it to disk, as it is produced, and in these cases there is no reason to store all of the output before processing any of it. Often just storing the output can consume many times the amount of memory Frobby otherwise needs to carry out the computation. */ class IdealConsumer { public: /** The provided implementation does nothing. */ virtual ~IdealConsumer(); /** Called before output of a monomial ideal. varCount is the number of variables of the ring within which the output ideal lies. The provided implementation does nothing. */ virtual void idealBegin(size_t varCount); /** For output of a generator of the ideal. exponentVector is an array containing the exponents of the generator. The parameter exponentVector and its entries must not be altered or deallocated, and no reference to them can be retained after the consume method has returned. If the output must be stored, then a copy must be made. */ virtual void consume(mpz_ptr* exponentVector) = 0; /** Called after output of a monomial ideal. The provided implementation does nothing. */ virtual void idealEnd(); }; /** This class provides a way to get polynomials as output from Frobby one term at a time. Many computations performed by Frobby can produce output continously instead of having to wait for the computation to be done to be able to produce any output. Often the output can be processed, such as writing it to disk, as it is produced, and in these cases there is no reason to store all of the output before processing any of it. Often just storing the output can consume many times the amount of memory Frobby otherwise needs to carry out the computation. */ class PolynomialConsumer { public: /** The provided implementation does nothing. */ virtual ~PolynomialConsumer(); /** Called before output of a polynomial. varCount is the number of variables in the ring within which the output polynomial lies. The provided implementation does nothing. */ virtual void polynomialBegin(size_t varCount); /** For output of a term of the polynomial. coefficient contains the coefficient of the term, and exponentVector is an array containing the exponents of the term. The parameters coefficient, exponentVector and its entries must not be altered or deallocated, and no reference to them can be retained after the consume method has returned. If the output must be stored, then a copy must be made. */ virtual void consume(const mpz_t coefficient, mpz_ptr* exponentVector) = 0; /** Called after output of a polynomial. The provided implementation does nothing. */ virtual void polynomialEnd(); }; /** Compute the Alexander dual of ideal using the point reflectionMonomial. The minimal generators of the dual are provided to the consumer in some arbitrary order. If reflectionMonomial is null (i.e. equal to 0), then the lcm of the minimal generators of ideal are used. Note that this lcm does not include any non-minimal generators that may have been added to ideal. If reflectionMonomial is not null, then it must be divisible by this lcm. This function returns true if and only if reflectionMonomial is valid. The parameter reflectionMonomial must be either null or an array of size at least the number of variables of ideal. Frobby does not alter or retain a reference to the passed-in reflectionMonomial or its elements. This is also true when the consumer gets called, so it is allowed for the consumer to change or delete reflectionMonomial. The overload taking an Ideal for reflectionMonomial simply uses the generator of that ideal, and it is required that there be exactly one generator. @todo don't use exceptions to propagate false internally. */ bool alexanderDual(const Ideal& ideal, const mpz_t* reflectionMonomial, IdealConsumer& consumer); /** @todo doc. and test */ bool alexanderDual(const Ideal& ideal, const Ideal& reflectionMonomial, IdealConsumer& consumer); /** Compute the multigraded Hilbert-Poincare series of ideal. More precisely, compute the numerator polynomial of the series expressed as a rational function with (1-x1)...(1-xn) in the denominator where x1,...,xn are the variables in the polynomial ring. The multigraded Hilbert-Poincare series of a monomial ideal is the possibly infinite sum of all monomials not in that ideal. */ void multigradedHilbertPoincareSeries(const Ideal& ideal, PolynomialConsumer& consumer); /** Compute the univariate Hilbert-Poincare series of ideal. The univariate series can be obtained from the multigraded one by substituting the same variable for each other variable. The univariate series thus lives in a ring with one variable only. */ void univariateHilbertPoincareSeries(const Ideal& ideal, PolynomialConsumer& consumer); /** Compute the irreducible decomposition of ideal. Every monomial ideal can be written uniquely as the irredundant intersection of irreducible monomial ideals, and each intersectand in this intersection is called an irreducible component. A monomial ideal is irreducible if and only if each minimal generator is a pure power, i.e. has the form x^e for a variable x and an integer exponent e. The output is each of the irreducible components. These are provided to the consumer in some arbitrary order. The ideal generated by the identity has no irreducible components, since the intersection of no ideals is the entire ring, i.e. the ideal generated by the identity. The output for the zero ideal is a single ideal which is the zero ideal itself, which is also an irreducible ideal since it is generated by the empty set, which is trivially a set of pure powers. */ void irreducibleDecompositionAsIdeals(const Ideal& ideal, IdealConsumer& consumer); /** Compute the irreducible decomposition of ideal, and encode each irreducible component as a monomial. This is done by multiplyng the minimal generators of the irreducible ideal, which defines a bijection between irreducible monomial ideals and monomials. Note that the ideal generated by the identity has no irreducible components, so the output is the zero ideal, since that ideal has no generators. The zero ideal as input presents a problem, since no monomial corresponds to the zero ideal, which would be the correct output. If ideal is the zero ideal, then there is no output (i.e. idealBegin does not get called on the consumer), and the return value is false. Otherwise the return value is true. @todo This can be improved to have no special cases, since the zero ideal does correpond to the identity, since the product of the zero ideal's generators is the empty product, which is the identity. At the same time we don't need the identity otherwise, since the whole ring is always redundant as an intersectand. */ bool irreducibleDecompositionAsMonomials(const Ideal& ideal, IdealConsumer& consumer); /** Compute the maximal standard monomials of ideal. A standard monomial of an ideal is a monomial that does not lie in that ideal. A maximal standard monomial is a standard monomial m such that mx is not standard for each variable x in the polynomial ring within which the ideal resides. Note that many ideals have no maximal standard monomials. E.g. every monomial is a standard monomial of the zero ideal, so none of them are maximal. In contrast, the ideal generated by the identity has no standard monomials, maximal or otherwise. The maximal standard monomials are output to the consumer as the generators of a single ideal. If ideal has no maximal standard monomials, then the output is the zero ideal. */ void maximalStandardMonomials(const Ideal& ideal, IdealConsumer& consumer); /** Solve the optimization program maximize l*d subject to d being the exponent vector of a maximal standard monomial of ideal If ideal has any maximal standard monomials, then the return value is true, and an ideal with a single generator representing an optimal solution to the optimization program is written to the consumer. If ideal has no maximal standard monomials, then the return value is false, and nothing is written to the consumer. l must be an array of at least ideal.getVarCount() entries. The algorithm used is significantly faster than computing all the maximal standard monomials and seeing which exponent vector yields a maximum value. */ bool solveStandardMonomialProgram(const Ideal& ideal, const mpz_t* l, IdealConsumer& consumer); /** Compute the codimension of a monomial ideal. We define the codimension by the property that the sum of the Krull dimension and codimension is the number of variables in the ambient polynomial ring of the ideal. Thus the codimension of the ideal that is generated by the identity is the number of variables plus one. The codimension of a monomial ideal is the minimal size of support among the irreducible components of that ideal. @param codim This mpz_t must be initialized before calling this function. It will be set to the codimension. */ void codimension(const Ideal& ideal, mpz_t codim); /** Compute the Krull dimension of a monomial ideal. Note that by convention the ideal generated by the identity has dimension -1. The sum of the dimension and codimension is the number of variables in the ambient polynomial ring of the ideal. @param codim This mpz_t must be initialized before calling this function. It will be set to the dimension. */ void dimension(const Ideal& ideal, mpz_t dim); /** Compute the canonical primary decomposition of a monomial ideal. This is defined as the primary decomposition where each primary component is the intersection of the irreducible components with that same support. I.e. the set of irreducible components of the canonical primary components are precisely the irreducible components of the ideal itself. So each canonical primary component has as few irreducible components as possible. This is not true of just any primary decomposition. Each canonical primary component is provided to the consumer as a separate ideal in an arbitrary order. */ void primaryDecomposition(const Ideal& ideal, IdealConsumer& consumer); /** Compute the associated primes of the ideal. The prime ideals are passed to the consumer in arbitrary order. */ void associatedPrimes(const Ideal& ideal, IdealConsumer& consumer); } #endif frobby-0.9.5/src/hash_map/000077500000000000000000000000001401527164200153615ustar00rootroot00000000000000frobby-0.9.5/src/hash_map/hash_fun.h000066400000000000000000000110141401527164200173220ustar00rootroot00000000000000// 'struct hash' from SGI -*- C++ -*- // Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 2, or (at your option) // any later version. // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING. If not, write to the Free // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, // USA. // As a special exception, you may use this file as part of a free software // library without restriction. Specifically, if other files instantiate // templates or use macros or inline functions from this file, or you compile // this file and link it with other files to produce an executable, this // file does not by itself cause the resulting executable to be covered by // the GNU General Public License. This exception does not however // invalidate any other reasons why the executable file might be covered by // the GNU General Public License. /* * Copyright (c) 1996-1998 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Silicon Graphics makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. * * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Hewlett-Packard Company makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. * */ /** * This file is a GNU extension to the Standard C++ Library (possibly * containing extensions from the HP/SGI STL subset). */ #ifndef _HASH_FUN_H #define _HASH_FUN_H 1 #include #include namespace __gnu_cxx { using std::size_t; template struct hash { }; inline size_t __stl_hash_string(const char* __s) { unsigned long __h = 0; for ( ; *__s; ++__s) __h = 5 * __h + *__s; return size_t(__h); } template<> struct hash { size_t operator()(const char* __s) const { return __stl_hash_string(__s); } }; template<> struct hash { size_t operator()(const char* __s) const { return __stl_hash_string(__s); } }; template<> struct hash { size_t operator()(const string& str) const { return __stl_hash_string(str.c_str()); } }; template<> struct hash { size_t operator()(char __x) const { return __x; } }; template<> struct hash { size_t operator()(unsigned char __x) const { return __x; } }; template<> struct hash { size_t operator()(unsigned char __x) const { return __x; } }; template<> struct hash { size_t operator()(short __x) const { return __x; } }; template<> struct hash { size_t operator()(unsigned short __x) const { return __x; } }; template<> struct hash { size_t operator()(int __x) const { return __x; } }; template<> struct hash { size_t operator()(unsigned int __x) const { return __x; } }; template<> struct hash { size_t operator()(long __x) const { return __x; } }; template<> struct hash { size_t operator()(unsigned long __x) const { return __x; } }; } #endif frobby-0.9.5/src/hash_map/hash_map000066400000000000000000000352071401527164200170730ustar00rootroot00000000000000// Hashing map implementation -*- C++ -*- // Copyright (C) 2001, 2002, 2004, 2005, 2006 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 2, or (at your option) // any later version. // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING. If not, write to the Free // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, // USA. // As a special exception, you may use this file as part of a free software // library without restriction. Specifically, if other files instantiate // templates or use macros or inline functions from this file, or you compile // this file and link it with other files to produce an executable, this // file does not by itself cause the resulting executable to be covered by // the GNU General Public License. This exception does not however // invalidate any other reasons why the executable file might be covered by // the GNU General Public License. /* * Copyright (c) 1996 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Silicon Graphics makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. * * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Hewlett-Packard Company makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. * */ /** @file backward/hash_map * This file is a GNU extension to the Standard C++ Library (possibly * containing extensions from the HP/SGI STL subset). */ #ifndef _HASH_MAP #define _HASH_MAP 1 #include "hashtable.h" namespace __gnu_cxx { using std::equal_to; using std::allocator; using std::pair; using std::_Select1st; /** * This is an SGI extension. * @ingroup SGIextensions * @doctodo */ template, class _EqualKey = equal_to<_Key>, class _Alloc = allocator<_Tp> > class hash_map { private: typedef hashtable,_Key, _HashFn, _Select1st >, _EqualKey, _Alloc> _Ht; _Ht _M_ht; public: typedef typename _Ht::key_type key_type; typedef _Tp data_type; typedef _Tp mapped_type; typedef typename _Ht::value_type value_type; typedef typename _Ht::hasher hasher; typedef typename _Ht::key_equal key_equal; typedef typename _Ht::size_type size_type; typedef typename _Ht::difference_type difference_type; typedef typename _Ht::pointer pointer; typedef typename _Ht::const_pointer const_pointer; typedef typename _Ht::reference reference; typedef typename _Ht::const_reference const_reference; typedef typename _Ht::iterator iterator; typedef typename _Ht::const_iterator const_iterator; typedef typename _Ht::allocator_type allocator_type; hasher hash_funct() const { return _M_ht.hash_funct(); } key_equal key_eq() const { return _M_ht.key_eq(); } allocator_type get_allocator() const { return _M_ht.get_allocator(); } hash_map() : _M_ht(100, hasher(), key_equal(), allocator_type()) {} explicit hash_map(size_type __n) : _M_ht(__n, hasher(), key_equal(), allocator_type()) {} hash_map(size_type __n, const hasher& __hf) : _M_ht(__n, __hf, key_equal(), allocator_type()) {} hash_map(size_type __n, const hasher& __hf, const key_equal& __eql, const allocator_type& __a = allocator_type()) : _M_ht(__n, __hf, __eql, __a) {} template hash_map(_InputIterator __f, _InputIterator __l) : _M_ht(100, hasher(), key_equal(), allocator_type()) { _M_ht.insert_unique(__f, __l); } template hash_map(_InputIterator __f, _InputIterator __l, size_type __n) : _M_ht(__n, hasher(), key_equal(), allocator_type()) { _M_ht.insert_unique(__f, __l); } template hash_map(_InputIterator __f, _InputIterator __l, size_type __n, const hasher& __hf) : _M_ht(__n, __hf, key_equal(), allocator_type()) { _M_ht.insert_unique(__f, __l); } template hash_map(_InputIterator __f, _InputIterator __l, size_type __n, const hasher& __hf, const key_equal& __eql, const allocator_type& __a = allocator_type()) : _M_ht(__n, __hf, __eql, __a) { _M_ht.insert_unique(__f, __l); } size_type size() const { return _M_ht.size(); } size_type max_size() const { return _M_ht.max_size(); } bool empty() const { return _M_ht.empty(); } void swap(hash_map& __hs) { _M_ht.swap(__hs._M_ht); } template friend bool operator== (const hash_map<_K1, _T1, _HF, _EqK, _Al>&, const hash_map<_K1, _T1, _HF, _EqK, _Al>&); iterator begin() { return _M_ht.begin(); } iterator end() { return _M_ht.end(); } const_iterator begin() const { return _M_ht.begin(); } const_iterator end() const { return _M_ht.end(); } pair insert(const value_type& __obj) { return _M_ht.insert_unique(__obj); } template void insert(_InputIterator __f, _InputIterator __l) { _M_ht.insert_unique(__f, __l); } pair insert_noresize(const value_type& __obj) { return _M_ht.insert_unique_noresize(__obj); } iterator find(const key_type& __key) { return _M_ht.find(__key); } const_iterator find(const key_type& __key) const { return _M_ht.find(__key); } _Tp& operator[](const key_type& __key) { return _M_ht.find_or_insert(value_type(__key, _Tp())).second; } size_type count(const key_type& __key) const { return _M_ht.count(__key); } pair equal_range(const key_type& __key) { return _M_ht.equal_range(__key); } pair equal_range(const key_type& __key) const { return _M_ht.equal_range(__key); } size_type erase(const key_type& __key) {return _M_ht.erase(__key); } void erase(iterator __it) { _M_ht.erase(__it); } void erase(iterator __f, iterator __l) { _M_ht.erase(__f, __l); } void clear() { _M_ht.clear(); } void resize(size_type __hint) { _M_ht.resize(__hint); } size_type bucket_count() const { return _M_ht.bucket_count(); } size_type max_bucket_count() const { return _M_ht.max_bucket_count(); } size_type elems_in_bucket(size_type __n) const { return _M_ht.elems_in_bucket(__n); } }; template inline bool operator==(const hash_map<_Key, _Tp, _HashFn, _EqlKey, _Alloc>& __hm1, const hash_map<_Key, _Tp, _HashFn, _EqlKey, _Alloc>& __hm2) { return __hm1._M_ht == __hm2._M_ht; } template inline bool operator!=(const hash_map<_Key, _Tp, _HashFn, _EqlKey, _Alloc>& __hm1, const hash_map<_Key, _Tp, _HashFn, _EqlKey, _Alloc>& __hm2) { return !(__hm1 == __hm2); } template inline void swap(hash_map<_Key, _Tp, _HashFn, _EqlKey, _Alloc>& __hm1, hash_map<_Key, _Tp, _HashFn, _EqlKey, _Alloc>& __hm2) { __hm1.swap(__hm2); } /** * This is an SGI extension. * @ingroup SGIextensions * @doctodo */ template, class _EqualKey = equal_to<_Key>, class _Alloc = allocator<_Tp> > class hash_multimap { private: typedef hashtable, _Key, _HashFn, _Select1st >, _EqualKey, _Alloc> _Ht; _Ht _M_ht; public: typedef typename _Ht::key_type key_type; typedef _Tp data_type; typedef _Tp mapped_type; typedef typename _Ht::value_type value_type; typedef typename _Ht::hasher hasher; typedef typename _Ht::key_equal key_equal; typedef typename _Ht::size_type size_type; typedef typename _Ht::difference_type difference_type; typedef typename _Ht::pointer pointer; typedef typename _Ht::const_pointer const_pointer; typedef typename _Ht::reference reference; typedef typename _Ht::const_reference const_reference; typedef typename _Ht::iterator iterator; typedef typename _Ht::const_iterator const_iterator; typedef typename _Ht::allocator_type allocator_type; hasher hash_funct() const { return _M_ht.hash_funct(); } key_equal key_eq() const { return _M_ht.key_eq(); } allocator_type get_allocator() const { return _M_ht.get_allocator(); } hash_multimap() : _M_ht(100, hasher(), key_equal(), allocator_type()) {} explicit hash_multimap(size_type __n) : _M_ht(__n, hasher(), key_equal(), allocator_type()) {} hash_multimap(size_type __n, const hasher& __hf) : _M_ht(__n, __hf, key_equal(), allocator_type()) {} hash_multimap(size_type __n, const hasher& __hf, const key_equal& __eql, const allocator_type& __a = allocator_type()) : _M_ht(__n, __hf, __eql, __a) {} template hash_multimap(_InputIterator __f, _InputIterator __l) : _M_ht(100, hasher(), key_equal(), allocator_type()) { _M_ht.insert_equal(__f, __l); } template hash_multimap(_InputIterator __f, _InputIterator __l, size_type __n) : _M_ht(__n, hasher(), key_equal(), allocator_type()) { _M_ht.insert_equal(__f, __l); } template hash_multimap(_InputIterator __f, _InputIterator __l, size_type __n, const hasher& __hf) : _M_ht(__n, __hf, key_equal(), allocator_type()) { _M_ht.insert_equal(__f, __l); } template hash_multimap(_InputIterator __f, _InputIterator __l, size_type __n, const hasher& __hf, const key_equal& __eql, const allocator_type& __a = allocator_type()) : _M_ht(__n, __hf, __eql, __a) { _M_ht.insert_equal(__f, __l); } size_type size() const { return _M_ht.size(); } size_type max_size() const { return _M_ht.max_size(); } bool empty() const { return _M_ht.empty(); } void swap(hash_multimap& __hs) { _M_ht.swap(__hs._M_ht); } template friend bool operator==(const hash_multimap<_K1, _T1, _HF, _EqK, _Al>&, const hash_multimap<_K1, _T1, _HF, _EqK, _Al>&); iterator begin() { return _M_ht.begin(); } iterator end() { return _M_ht.end(); } const_iterator begin() const { return _M_ht.begin(); } const_iterator end() const { return _M_ht.end(); } iterator insert(const value_type& __obj) { return _M_ht.insert_equal(__obj); } template void insert(_InputIterator __f, _InputIterator __l) { _M_ht.insert_equal(__f,__l); } iterator insert_noresize(const value_type& __obj) { return _M_ht.insert_equal_noresize(__obj); } iterator find(const key_type& __key) { return _M_ht.find(__key); } const_iterator find(const key_type& __key) const { return _M_ht.find(__key); } size_type count(const key_type& __key) const { return _M_ht.count(__key); } pair equal_range(const key_type& __key) { return _M_ht.equal_range(__key); } pair equal_range(const key_type& __key) const { return _M_ht.equal_range(__key); } size_type erase(const key_type& __key) { return _M_ht.erase(__key); } void erase(iterator __it) { _M_ht.erase(__it); } void erase(iterator __f, iterator __l) { _M_ht.erase(__f, __l); } void clear() { _M_ht.clear(); } void resize(size_type __hint) { _M_ht.resize(__hint); } size_type bucket_count() const { return _M_ht.bucket_count(); } size_type max_bucket_count() const { return _M_ht.max_bucket_count(); } size_type elems_in_bucket(size_type __n) const { return _M_ht.elems_in_bucket(__n); } }; template inline bool operator==(const hash_multimap<_Key, _Tp, _HF, _EqKey, _Alloc>& __hm1, const hash_multimap<_Key, _Tp, _HF, _EqKey, _Alloc>& __hm2) { return __hm1._M_ht == __hm2._M_ht; } template inline bool operator!=(const hash_multimap<_Key, _Tp, _HF, _EqKey, _Alloc>& __hm1, const hash_multimap<_Key, _Tp, _HF, _EqKey, _Alloc>& __hm2) { return !(__hm1 == __hm2); } template inline void swap(hash_multimap<_Key, _Tp, _HashFn, _EqlKey, _Alloc>& __hm1, hash_multimap<_Key, _Tp, _HashFn, _EqlKey, _Alloc>& __hm2) { __hm1.swap(__hm2); } } #endif frobby-0.9.5/src/hash_map/hashtable.h000066400000000000000000001032151401527164200174670ustar00rootroot00000000000000// Hashtable implementation used by containers -*- C++ -*- // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 2, or (at your option) // any later version. // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING. If not, write to the Free // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, // USA. // As a special exception, you may use this file as part of a free software // library without restriction. Specifically, if other files instantiate // templates or use macros or inline functions from this file, or you compile // this file and link it with other files to produce an executable, this // file does not by itself cause the resulting executable to be covered by // the GNU General Public License. This exception does not however // invalidate any other reasons why the executable file might be covered by // the GNU General Public License. /* * Copyright (c) 1996,1997 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Silicon Graphics makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. * * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Hewlett-Packard Company makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. * */ /** * This file is a GNU extension to the Standard C++ Library (possibly * containing extensions from the HP/SGI STL subset). */ #ifndef _HASHTABLE_H #define _HASHTABLE_H 1 // Hashtable class, used to implement the hashed associative containers // hash_set, hash_map, hash_multiset, and hash_multimap. #include #include #include #include "hash_fun.h" namespace __gnu_cxx { using std::size_t; using std::ptrdiff_t; using std::forward_iterator_tag; using std::input_iterator_tag; using std::_Construct; using std::_Destroy; using std::distance; using std::vector; using std::pair; using std::__iterator_category; template struct _Hashtable_node { _Hashtable_node* _M_next; _Val _M_val; }; template > class hashtable; template struct _Hashtable_iterator; template struct _Hashtable_const_iterator; template struct _Hashtable_iterator { typedef hashtable<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey, _Alloc> _Hashtable; typedef _Hashtable_iterator<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey, _Alloc> iterator; typedef _Hashtable_const_iterator<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey, _Alloc> const_iterator; typedef _Hashtable_node<_Val> _Node; typedef forward_iterator_tag iterator_category; typedef _Val value_type; typedef ptrdiff_t difference_type; typedef size_t size_type; typedef _Val& reference; typedef _Val* pointer; _Node* _M_cur; _Hashtable* _M_ht; _Hashtable_iterator(_Node* __n, _Hashtable* __tab) : _M_cur(__n), _M_ht(__tab) { } _Hashtable_iterator() { } reference operator*() const { return _M_cur->_M_val; } pointer operator->() const { return &(operator*()); } iterator& operator++(); iterator operator++(int); bool operator==(const iterator& __it) const { return _M_cur == __it._M_cur; } bool operator!=(const iterator& __it) const { return _M_cur != __it._M_cur; } }; template struct _Hashtable_const_iterator { typedef hashtable<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey, _Alloc> _Hashtable; typedef _Hashtable_iterator<_Val,_Key,_HashFcn, _ExtractKey,_EqualKey,_Alloc> iterator; typedef _Hashtable_const_iterator<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey, _Alloc> const_iterator; typedef _Hashtable_node<_Val> _Node; typedef forward_iterator_tag iterator_category; typedef _Val value_type; typedef ptrdiff_t difference_type; typedef size_t size_type; typedef const _Val& reference; typedef const _Val* pointer; const _Node* _M_cur; const _Hashtable* _M_ht; _Hashtable_const_iterator(const _Node* __n, const _Hashtable* __tab) : _M_cur(__n), _M_ht(__tab) { } _Hashtable_const_iterator() { } _Hashtable_const_iterator(const iterator& __it) : _M_cur(__it._M_cur), _M_ht(__it._M_ht) { } reference operator*() const { return _M_cur->_M_val; } pointer operator->() const { return &(operator*()); } const_iterator& operator++(); const_iterator operator++(int); bool operator==(const const_iterator& __it) const { return _M_cur == __it._M_cur; } bool operator!=(const const_iterator& __it) const { return _M_cur != __it._M_cur; } }; // Note: assumes long is at least 32 bits. enum { _S_num_primes = 28 }; static const unsigned long __stl_prime_list[_S_num_primes] = { 53ul, 97ul, 193ul, 389ul, 769ul, 1543ul, 3079ul, 6151ul, 12289ul, 24593ul, 49157ul, 98317ul, 196613ul, 393241ul, 786433ul, 1572869ul, 3145739ul, 6291469ul, 12582917ul, 25165843ul, 50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul, 1610612741ul, 3221225473ul, 4294967291ul }; inline unsigned long __stl_next_prime(unsigned long __n) { const unsigned long* __first = __stl_prime_list; const unsigned long* __last = __stl_prime_list + (int)_S_num_primes; const unsigned long* pos = std::lower_bound(__first, __last, __n); return pos == __last ? *(__last - 1) : *pos; } // Forward declaration of operator==. template class hashtable; template bool operator==(const hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>& __ht1, const hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>& __ht2); // Hashtables handle allocators a bit differently than other // containers do. If we're using standard-conforming allocators, then // a hashtable unconditionally has a member variable to hold its // allocator, even if it so happens that all instances of the // allocator type are identical. This is because, for hashtables, // this extra storage is negligible. Additionally, a base class // wouldn't serve any other purposes; it wouldn't, for example, // simplify the exception-handling code. template class hashtable { public: typedef _Key key_type; typedef _Val value_type; typedef _HashFcn hasher; typedef _EqualKey key_equal; typedef size_t size_type; typedef ptrdiff_t difference_type; typedef value_type* pointer; typedef const value_type* const_pointer; typedef value_type& reference; typedef const value_type& const_reference; hasher hash_funct() const { return _M_hash; } key_equal key_eq() const { return _M_equals; } private: typedef _Hashtable_node<_Val> _Node; public: typedef typename _Alloc::template rebind::other allocator_type; allocator_type get_allocator() const { return _M_node_allocator; } private: typedef typename _Alloc::template rebind<_Node>::other _Node_Alloc; typedef typename _Alloc::template rebind<_Node*>::other _Nodeptr_Alloc; typedef vector<_Node*, _Nodeptr_Alloc> _Vector_type; _Node_Alloc _M_node_allocator; _Node* _M_get_node() { return _M_node_allocator.allocate(1); } void _M_put_node(_Node* __p) { _M_node_allocator.deallocate(__p, 1); } private: hasher _M_hash; key_equal _M_equals; _ExtractKey _M_get_key; _Vector_type _M_buckets; size_type _M_num_elements; public: typedef _Hashtable_iterator<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey, _Alloc> iterator; typedef _Hashtable_const_iterator<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey, _Alloc> const_iterator; friend struct _Hashtable_iterator<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey, _Alloc>; friend struct _Hashtable_const_iterator<_Val, _Key, _HashFcn, _ExtractKey, _EqualKey, _Alloc>; public: hashtable(size_type __n, const _HashFcn& __hf, const _EqualKey& __eql, const _ExtractKey& __ext, const allocator_type& __a = allocator_type()) : _M_node_allocator(__a), _M_hash(__hf), _M_equals(__eql), _M_get_key(__ext), _M_buckets(__a), _M_num_elements(0) { _M_initialize_buckets(__n); } hashtable(size_type __n, const _HashFcn& __hf, const _EqualKey& __eql, const allocator_type& __a = allocator_type()) : _M_node_allocator(__a), _M_hash(__hf), _M_equals(__eql), _M_get_key(_ExtractKey()), _M_buckets(__a), _M_num_elements(0) { _M_initialize_buckets(__n); } hashtable(const hashtable& __ht) : _M_node_allocator(__ht.get_allocator()), _M_hash(__ht._M_hash), _M_equals(__ht._M_equals), _M_get_key(__ht._M_get_key), _M_buckets(__ht.get_allocator()), _M_num_elements(0) { _M_copy_from(__ht); } hashtable& operator= (const hashtable& __ht) { if (&__ht != this) { clear(); _M_hash = __ht._M_hash; _M_equals = __ht._M_equals; _M_get_key = __ht._M_get_key; _M_copy_from(__ht); } return *this; } ~hashtable() { clear(); } size_type size() const { return _M_num_elements; } size_type max_size() const { return size_type(-1); } bool empty() const { return size() == 0; } void swap(hashtable& __ht) { std::swap(_M_hash, __ht._M_hash); std::swap(_M_equals, __ht._M_equals); std::swap(_M_get_key, __ht._M_get_key); _M_buckets.swap(__ht._M_buckets); std::swap(_M_num_elements, __ht._M_num_elements); } iterator begin() { for (size_type __n = 0; __n < _M_buckets.size(); ++__n) if (_M_buckets[__n]) return iterator(_M_buckets[__n], this); return end(); } iterator end() { return iterator(0, this); } const_iterator begin() const { for (size_type __n = 0; __n < _M_buckets.size(); ++__n) if (_M_buckets[__n]) return const_iterator(_M_buckets[__n], this); return end(); } const_iterator end() const { return const_iterator(0, this); } template friend bool operator==(const hashtable<_Vl, _Ky, _HF, _Ex, _Eq, _Al>&, const hashtable<_Vl, _Ky, _HF, _Ex, _Eq, _Al>&); public: size_type bucket_count() const { return _M_buckets.size(); } size_type max_bucket_count() const { return __stl_prime_list[(int)_S_num_primes - 1]; } size_type elems_in_bucket(size_type __bucket) const { size_type __result = 0; for (_Node* __n = _M_buckets[__bucket]; __n; __n = __n->_M_next) __result += 1; return __result; } pair insert_unique(const value_type& __obj) { resize(_M_num_elements + 1); return insert_unique_noresize(__obj); } iterator insert_equal(const value_type& __obj) { resize(_M_num_elements + 1); return insert_equal_noresize(__obj); } pair insert_unique_noresize(const value_type& __obj); iterator insert_equal_noresize(const value_type& __obj); template void insert_unique(_InputIterator __f, _InputIterator __l) { insert_unique(__f, __l, __iterator_category(__f)); } template void insert_equal(_InputIterator __f, _InputIterator __l) { insert_equal(__f, __l, __iterator_category(__f)); } template void insert_unique(_InputIterator __f, _InputIterator __l, input_iterator_tag) { for ( ; __f != __l; ++__f) insert_unique(*__f); } template void insert_equal(_InputIterator __f, _InputIterator __l, input_iterator_tag) { for ( ; __f != __l; ++__f) insert_equal(*__f); } template void insert_unique(_ForwardIterator __f, _ForwardIterator __l, forward_iterator_tag) { size_type __n = distance(__f, __l); resize(_M_num_elements + __n); for ( ; __n > 0; --__n, ++__f) insert_unique_noresize(*__f); } template void insert_equal(_ForwardIterator __f, _ForwardIterator __l, forward_iterator_tag) { size_type __n = distance(__f, __l); resize(_M_num_elements + __n); for ( ; __n > 0; --__n, ++__f) insert_equal_noresize(*__f); } reference find_or_insert(const value_type& __obj); iterator find(const key_type& __key) { size_type __n = _M_bkt_num_key(__key); _Node* __first; for (__first = _M_buckets[__n]; __first && !_M_equals(_M_get_key(__first->_M_val), __key); __first = __first->_M_next) { } return iterator(__first, this); } const_iterator find(const key_type& __key) const { size_type __n = _M_bkt_num_key(__key); const _Node* __first; for (__first = _M_buckets[__n]; __first && !_M_equals(_M_get_key(__first->_M_val), __key); __first = __first->_M_next) { } return const_iterator(__first, this); } size_type count(const key_type& __key) const { const size_type __n = _M_bkt_num_key(__key); size_type __result = 0; for (const _Node* __cur = _M_buckets[__n]; __cur; __cur = __cur->_M_next) if (_M_equals(_M_get_key(__cur->_M_val), __key)) ++__result; return __result; } pair equal_range(const key_type& __key); pair equal_range(const key_type& __key) const; size_type erase(const key_type& __key); void erase(const iterator& __it); void erase(iterator __first, iterator __last); void erase(const const_iterator& __it); void erase(const_iterator __first, const_iterator __last); void resize(size_type __num_elements_hint); void clear(); private: size_type _M_next_size(size_type __n) const { return __stl_next_prime(__n); } void _M_initialize_buckets(size_type __n) { const size_type __n_buckets = _M_next_size(__n); _M_buckets.reserve(__n_buckets); _M_buckets.insert(_M_buckets.end(), __n_buckets, (_Node*) 0); _M_num_elements = 0; } size_type _M_bkt_num_key(const key_type& __key) const { return _M_bkt_num_key(__key, _M_buckets.size()); } size_type _M_bkt_num(const value_type& __obj) const { return _M_bkt_num_key(_M_get_key(__obj)); } size_type _M_bkt_num_key(const key_type& __key, size_t __n) const { return _M_hash(__key) % __n; } size_type _M_bkt_num(const value_type& __obj, size_t __n) const { return _M_bkt_num_key(_M_get_key(__obj), __n); } _Node* _M_new_node(const value_type& __obj) { _Node* __n = _M_get_node(); __n->_M_next = 0; try { this->get_allocator().construct(&__n->_M_val, __obj); return __n; } catch(...) { _M_put_node(__n); __throw_exception_again; } } void _M_delete_node(_Node* __n) { this->get_allocator().destroy(&__n->_M_val); _M_put_node(__n); } void _M_erase_bucket(const size_type __n, _Node* __first, _Node* __last); void _M_erase_bucket(const size_type __n, _Node* __last); void _M_copy_from(const hashtable& __ht); }; template _Hashtable_iterator<_Val, _Key, _HF, _ExK, _EqK, _All>& _Hashtable_iterator<_Val, _Key, _HF, _ExK, _EqK, _All>:: operator++() { const _Node* __old = _M_cur; _M_cur = _M_cur->_M_next; if (!_M_cur) { size_type __bucket = _M_ht->_M_bkt_num(__old->_M_val); while (!_M_cur && ++__bucket < _M_ht->_M_buckets.size()) _M_cur = _M_ht->_M_buckets[__bucket]; } return *this; } template inline _Hashtable_iterator<_Val, _Key, _HF, _ExK, _EqK, _All> _Hashtable_iterator<_Val, _Key, _HF, _ExK, _EqK, _All>:: operator++(int) { iterator __tmp = *this; ++*this; return __tmp; } template _Hashtable_const_iterator<_Val, _Key, _HF, _ExK, _EqK, _All>& _Hashtable_const_iterator<_Val, _Key, _HF, _ExK, _EqK, _All>:: operator++() { const _Node* __old = _M_cur; _M_cur = _M_cur->_M_next; if (!_M_cur) { size_type __bucket = _M_ht->_M_bkt_num(__old->_M_val); while (!_M_cur && ++__bucket < _M_ht->_M_buckets.size()) _M_cur = _M_ht->_M_buckets[__bucket]; } return *this; } template inline _Hashtable_const_iterator<_Val, _Key, _HF, _ExK, _EqK, _All> _Hashtable_const_iterator<_Val, _Key, _HF, _ExK, _EqK, _All>:: operator++(int) { const_iterator __tmp = *this; ++*this; return __tmp; } template bool operator==(const hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>& __ht1, const hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>& __ht2) { typedef typename hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>::_Node _Node; if (__ht1._M_buckets.size() != __ht2._M_buckets.size()) return false; for (size_t __n = 0; __n < __ht1._M_buckets.size(); ++__n) { _Node* __cur1 = __ht1._M_buckets[__n]; _Node* __cur2 = __ht2._M_buckets[__n]; // Check same length of lists for (; __cur1 && __cur2; __cur1 = __cur1->_M_next, __cur2 = __cur2->_M_next) { } if (__cur1 || __cur2) return false; // Now check one's elements are in the other for (__cur1 = __ht1._M_buckets[__n] ; __cur1; __cur1 = __cur1->_M_next) { bool _found__cur1 = false; for (__cur2 = __ht2._M_buckets[__n]; __cur2; __cur2 = __cur2->_M_next) { if (__cur1->_M_val == __cur2->_M_val) { _found__cur1 = true; break; } } if (!_found__cur1) return false; } } return true; } template inline bool operator!=(const hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>& __ht1, const hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>& __ht2) { return !(__ht1 == __ht2); } template inline void swap(hashtable<_Val, _Key, _HF, _Extract, _EqKey, _All>& __ht1, hashtable<_Val, _Key, _HF, _Extract, _EqKey, _All>& __ht2) { __ht1.swap(__ht2); } template pair::iterator, bool> hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: insert_unique_noresize(const value_type& __obj) { const size_type __n = _M_bkt_num(__obj); _Node* __first = _M_buckets[__n]; for (_Node* __cur = __first; __cur; __cur = __cur->_M_next) if (_M_equals(_M_get_key(__cur->_M_val), _M_get_key(__obj))) return pair(iterator(__cur, this), false); _Node* __tmp = _M_new_node(__obj); __tmp->_M_next = __first; _M_buckets[__n] = __tmp; ++_M_num_elements; return pair(iterator(__tmp, this), true); } template typename hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>::iterator hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: insert_equal_noresize(const value_type& __obj) { const size_type __n = _M_bkt_num(__obj); _Node* __first = _M_buckets[__n]; for (_Node* __cur = __first; __cur; __cur = __cur->_M_next) if (_M_equals(_M_get_key(__cur->_M_val), _M_get_key(__obj))) { _Node* __tmp = _M_new_node(__obj); __tmp->_M_next = __cur->_M_next; __cur->_M_next = __tmp; ++_M_num_elements; return iterator(__tmp, this); } _Node* __tmp = _M_new_node(__obj); __tmp->_M_next = __first; _M_buckets[__n] = __tmp; ++_M_num_elements; return iterator(__tmp, this); } template typename hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>::reference hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: find_or_insert(const value_type& __obj) { resize(_M_num_elements + 1); size_type __n = _M_bkt_num(__obj); _Node* __first = _M_buckets[__n]; for (_Node* __cur = __first; __cur; __cur = __cur->_M_next) if (_M_equals(_M_get_key(__cur->_M_val), _M_get_key(__obj))) return __cur->_M_val; _Node* __tmp = _M_new_node(__obj); __tmp->_M_next = __first; _M_buckets[__n] = __tmp; ++_M_num_elements; return __tmp->_M_val; } template pair::iterator, typename hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>::iterator> hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: equal_range(const key_type& __key) { typedef pair _Pii; const size_type __n = _M_bkt_num_key(__key); for (_Node* __first = _M_buckets[__n]; __first; __first = __first->_M_next) if (_M_equals(_M_get_key(__first->_M_val), __key)) { for (_Node* __cur = __first->_M_next; __cur; __cur = __cur->_M_next) if (!_M_equals(_M_get_key(__cur->_M_val), __key)) return _Pii(iterator(__first, this), iterator(__cur, this)); for (size_type __m = __n + 1; __m < _M_buckets.size(); ++__m) if (_M_buckets[__m]) return _Pii(iterator(__first, this), iterator(_M_buckets[__m], this)); return _Pii(iterator(__first, this), end()); } return _Pii(end(), end()); } template pair::const_iterator, typename hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>::const_iterator> hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: equal_range(const key_type& __key) const { typedef pair _Pii; const size_type __n = _M_bkt_num_key(__key); for (const _Node* __first = _M_buckets[__n]; __first; __first = __first->_M_next) { if (_M_equals(_M_get_key(__first->_M_val), __key)) { for (const _Node* __cur = __first->_M_next; __cur; __cur = __cur->_M_next) if (!_M_equals(_M_get_key(__cur->_M_val), __key)) return _Pii(const_iterator(__first, this), const_iterator(__cur, this)); for (size_type __m = __n + 1; __m < _M_buckets.size(); ++__m) if (_M_buckets[__m]) return _Pii(const_iterator(__first, this), const_iterator(_M_buckets[__m], this)); return _Pii(const_iterator(__first, this), end()); } } return _Pii(end(), end()); } template typename hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>::size_type hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: erase(const key_type& __key) { const size_type __n = _M_bkt_num_key(__key); _Node* __first = _M_buckets[__n]; size_type __erased = 0; if (__first) { _Node* __cur = __first; _Node* __next = __cur->_M_next; while (__next) { if (_M_equals(_M_get_key(__next->_M_val), __key)) { __cur->_M_next = __next->_M_next; _M_delete_node(__next); __next = __cur->_M_next; ++__erased; --_M_num_elements; } else { __cur = __next; __next = __cur->_M_next; } } if (_M_equals(_M_get_key(__first->_M_val), __key)) { _M_buckets[__n] = __first->_M_next; _M_delete_node(__first); ++__erased; --_M_num_elements; } } return __erased; } template void hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: erase(const iterator& __it) { _Node* __p = __it._M_cur; if (__p) { const size_type __n = _M_bkt_num(__p->_M_val); _Node* __cur = _M_buckets[__n]; if (__cur == __p) { _M_buckets[__n] = __cur->_M_next; _M_delete_node(__cur); --_M_num_elements; } else { _Node* __next = __cur->_M_next; while (__next) { if (__next == __p) { __cur->_M_next = __next->_M_next; _M_delete_node(__next); --_M_num_elements; break; } else { __cur = __next; __next = __cur->_M_next; } } } } } template void hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: erase(iterator __first, iterator __last) { size_type __f_bucket = __first._M_cur ? _M_bkt_num(__first._M_cur->_M_val) : _M_buckets.size(); size_type __l_bucket = __last._M_cur ? _M_bkt_num(__last._M_cur->_M_val) : _M_buckets.size(); if (__first._M_cur == __last._M_cur) return; else if (__f_bucket == __l_bucket) _M_erase_bucket(__f_bucket, __first._M_cur, __last._M_cur); else { _M_erase_bucket(__f_bucket, __first._M_cur, 0); for (size_type __n = __f_bucket + 1; __n < __l_bucket; ++__n) _M_erase_bucket(__n, 0); if (__l_bucket != _M_buckets.size()) _M_erase_bucket(__l_bucket, __last._M_cur); } } template inline void hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: erase(const_iterator __first, const_iterator __last) { erase(iterator(const_cast<_Node*>(__first._M_cur), const_cast(__first._M_ht)), iterator(const_cast<_Node*>(__last._M_cur), const_cast(__last._M_ht))); } template inline void hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: erase(const const_iterator& __it) { erase(iterator(const_cast<_Node*>(__it._M_cur), const_cast(__it._M_ht))); } template void hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: resize(size_type __num_elements_hint) { const size_type __old_n = _M_buckets.size(); if (__num_elements_hint > __old_n) { const size_type __n = _M_next_size(__num_elements_hint); if (__n > __old_n) { _Vector_type __tmp(__n, (_Node*)(0), _M_buckets.get_allocator()); try { for (size_type __bucket = 0; __bucket < __old_n; ++__bucket) { _Node* __first = _M_buckets[__bucket]; while (__first) { size_type __new_bucket = _M_bkt_num(__first->_M_val, __n); _M_buckets[__bucket] = __first->_M_next; __first->_M_next = __tmp[__new_bucket]; __tmp[__new_bucket] = __first; __first = _M_buckets[__bucket]; } } _M_buckets.swap(__tmp); } catch(...) { for (size_type __bucket = 0; __bucket < __tmp.size(); ++__bucket) { while (__tmp[__bucket]) { _Node* __next = __tmp[__bucket]->_M_next; _M_delete_node(__tmp[__bucket]); __tmp[__bucket] = __next; } } __throw_exception_again; } } } } template void hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: _M_erase_bucket(const size_type __n, _Node* __first, _Node* __last) { _Node* __cur = _M_buckets[__n]; if (__cur == __first) _M_erase_bucket(__n, __last); else { _Node* __next; for (__next = __cur->_M_next; __next != __first; __cur = __next, __next = __cur->_M_next) ; while (__next != __last) { __cur->_M_next = __next->_M_next; _M_delete_node(__next); __next = __cur->_M_next; --_M_num_elements; } } } template void hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: _M_erase_bucket(const size_type __n, _Node* __last) { _Node* __cur = _M_buckets[__n]; while (__cur != __last) { _Node* __next = __cur->_M_next; _M_delete_node(__cur); __cur = __next; _M_buckets[__n] = __cur; --_M_num_elements; } } template void hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: clear() { for (size_type __i = 0; __i < _M_buckets.size(); ++__i) { _Node* __cur = _M_buckets[__i]; while (__cur != 0) { _Node* __next = __cur->_M_next; _M_delete_node(__cur); __cur = __next; } _M_buckets[__i] = 0; } _M_num_elements = 0; } template void hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: _M_copy_from(const hashtable& __ht) { _M_buckets.clear(); _M_buckets.reserve(__ht._M_buckets.size()); _M_buckets.insert(_M_buckets.end(), __ht._M_buckets.size(), (_Node*) 0); try { for (size_type __i = 0; __i < __ht._M_buckets.size(); ++__i) { const _Node* __cur = __ht._M_buckets[__i]; if (__cur) { _Node* __local_copy = _M_new_node(__cur->_M_val); _M_buckets[__i] = __local_copy; for (_Node* __next = __cur->_M_next; __next; __cur = __next, __next = __cur->_M_next) { __local_copy->_M_next = _M_new_node(__next->_M_val); __local_copy = __local_copy->_M_next; } } } _M_num_elements = __ht._M_num_elements; } catch(...) { clear(); __throw_exception_again; } } } #endif frobby-0.9.5/src/intersect.cpp000066400000000000000000000023341401527164200163070ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "intersect.h" #include "Ideal.h" #include "Term.h" void intersect(Ideal* output, const Ideal* a, const Ideal* b) { ASSERT(a->getVarCount() == b->getVarCount()); output->clear(); Term term(a->getVarCount()); for (Ideal::const_iterator aIt = a->begin(); aIt != a->end(); ++aIt) { for (Ideal::const_iterator bIt = b->begin(); bIt != b->end();++bIt) { term.lcm(*aIt, *bIt); output->insert(term); } } output->minimize(); } frobby-0.9.5/src/intersect.h000066400000000000000000000016541401527164200157600ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef INTERSECT_GUARD #define INTERSECT_GUARD class Ideal; // Makes output the intersection of a and b. void intersect(Ideal* output, const Ideal* a, const Ideal* b); #endif frobby-0.9.5/src/lattice.cpp000066400000000000000000000032261401527164200157350ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "lattice.h" #include "BigIdeal.h" void addMultiple(BigIdeal& basis, unsigned int add, unsigned int addTo, const mpz_class& mult) { if (mult == 0) return; for (unsigned int i = 0; i < basis[0].size(); ++i) basis[addTo][i] += basis[add][i] * mult; } void makeZeroesInLatticeBasis(BigIdeal& basis) { ASSERT(!basis.empty()); unsigned int rowCount = basis.getGeneratorCount(); unsigned int columnCount = basis[0].size(); for (unsigned int col = columnCount - 1; col >= 1; --col) { for (unsigned int i = 0; i < rowCount; ++i) { mpz_class sign; if (basis[i][col] == 1) sign = 1; else if (basis[i][col] == -1) sign = -1; else continue; for (unsigned int j = 0; j < rowCount; ++j) { if (j == i) continue; addMultiple(basis, i, j, -1 * sign * basis[j][col]); } break; } } } frobby-0.9.5/src/lattice.h000066400000000000000000000015571401527164200154070ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef LATTICE_GUARD #define LATTICE_GUARD class BigIdeal; void makeZeroesInLatticeBasis(BigIdeal& basis); #endif frobby-0.9.5/src/main.cpp000066400000000000000000000067421401527164200152420ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "main.h" #include "Action.h" #include "DebugAllocator.h" #include "error.h" #include "display.h" #include #include #include #include /** This function runs the Frobby console interface. the ::main function calls this function after having set up DEBUG-specific things, catching exceptions, setting the random seed and so on. */ int frobbyMain(int argc, const char** argv) { string prefix; if (argc > 1) { prefix = argv[1]; --argc; ++argv; } else prefix = "help"; const auto_ptr action(Action::createActionWithPrefix(prefix)); action->parseCommandLine(argc - 1, argv + 1); action->perform(); return ExitCodeSuccess; } /** A replacement for the default C++ built-in terminate() function. Do not call this method or cause it to be called. */ void frobbyTerminate() { fputs("INTERNAL ERROR: Something caused terminate() to be called. " "This should never happen.\nPlease contact the Frobby developers.\n", stderr); fflush(stderr); ASSERT(false); abort(); } /** A replacement for the default C++ built-in unexpected() function. Do not call this method or cause it to be called. */ void frobbyUnexpected() { fputs("INTERNAL ERROR: Something caused unexpected() to be called. " "This should never happen.\nPlease contact the Frobby developers.\n", stderr); fflush(stderr); ASSERT(false); abort(); } /** This function is the entry point for Frobby as a console program. It does some DEBUG-specific things, sets the random seed and so on before calling ::frobbyMain. */ int main(int argc, const char** argv) { try { set_terminate(frobbyTerminate); set_unexpected(frobbyUnexpected); srand((unsigned int)time(0) + #ifdef __GNUC__ // Only GCC defines this macro. (unsigned int)getpid() + #endif (unsigned int)clock()); #ifdef PROFILE fputs("This is a PROFILE build of Frobby. It is therefore SLOW.\n", stderr); #endif #ifdef DEBUG fputs("This is a DEBUG build of Frobby. It is therefore SLOW.\n", stderr); #endif #ifdef DEBUG return DebugAllocator::getSingleton().runDebugMain(argc, argv); #else return frobbyMain(argc, argv); #endif } catch (const bad_alloc&) { displayError("Ran out of memory."); return ExitCodeOutOfMemory; } catch (const InternalFrobbyException& e) { displayException(e); return ExitCodeInternalError; } catch (const FrobbyException& e) { displayException(e); return ExitCodeError; } catch (...) { try { throw; } catch (const exception& e) { try { displayError(e.what()); } catch (...) { } } catch (...) { } return ExitCodeUnknownError; } } frobby-0.9.5/src/main.h000066400000000000000000000033361401527164200147030ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef MAIN_GUARD #define MAIN_GUARD // This function plays the role that main() usually would. int frobbyMain(int argc, const char** argv); // This wraps around frobbyMain and adds debug capabilities when DEBUG // is defined. int main(int argc, const char** argv); // The exit codes below are returned from frobbyMain and main. The // only part of these codes that can be counted on in future versions // of Frobby is that a zero exit code means success, while a non-zero // exit code indicates some kind of error. // Everything went well static const int ExitCodeSuccess = 0; // A normal error occured, such as a syntax error. static const int ExitCodeError = 1; // An error that should be impossible to trigger occured. This // indicates a bug in Frobby. static const int ExitCodeInternalError = 2; // Frobby ran out of memory. static const int ExitCodeOutOfMemory = 3; // Frobby encountered an exception that it does not know about. static const int ExitCodeUnknownError = 4; #endif frobby-0.9.5/src/randomDataGenerators.cpp000066400000000000000000000332511401527164200204150ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "randomDataGenerators.h" #include "BigIdeal.h" #include "Ideal.h" #include "Term.h" #include "error.h" #include "FrobbyStringStream.h" #include #include #include #include void generateLinkedListIdeal(BigIdeal& ideal, size_t variableCount) { VarNames names(variableCount); ideal.clearAndSetNames(variableCount); ideal.reserve(variableCount); for (size_t var = 1; var < variableCount; ++var) { ideal.newLastTerm(); ideal.getLastTermExponentRef(var) = 1; ideal.getLastTermExponentRef(var - 1) = 1; } } void generateChessIdeal(BigIdeal& bigIdeal, size_t rowCount, size_t columnCount, int deltaRow[], int deltaColumn[], size_t deltaCount) { if (mpz_class(rowCount) * mpz_class(columnCount) > numeric_limits::max()) reportError("Number of positions on requested chess board too large."); // Generate names VarNames names; for (size_t row = 0; row < rowCount; ++row) { for (size_t column = 0; column < columnCount; ++column) { FrobbyStringStream name; name << 'r' << (row + 1) << 'c' << (column + 1); names.addVar(name); } } bigIdeal.clearAndSetNames(names); Ideal ideal(bigIdeal.getVarCount()); // Generate ideal for (size_t row = 0; row < rowCount; ++row) { for (size_t column = 0; column < columnCount; ++column) { for (size_t delta = 0; delta < deltaCount; ++delta) { // Check that the target position is within the board. if (deltaRow[delta] == numeric_limits::min() || (deltaRow[delta] < 0 && row < (size_t)-deltaRow[delta]) || (deltaRow[delta] > 0 && rowCount - row <= (size_t)deltaRow[delta])) continue; if (deltaColumn[delta] == numeric_limits::min() || (deltaColumn[delta] < 0 && column < (size_t)-deltaColumn[delta]) || (deltaColumn[delta] > 0 && columnCount - column <= (size_t)deltaColumn[delta])) continue; Term chessMove(ideal.getVarCount()); chessMove[row * columnCount + column] = 1; size_t targetRow = row + deltaRow[delta]; size_t targetColumn = column + deltaColumn[delta]; ASSERT(targetRow < rowCount); ASSERT(targetColumn < columnCount); chessMove[targetRow * columnCount + targetColumn] = 1; ideal.insert(chessMove); } } } ideal.sortReverseLex(); bigIdeal.insert(ideal); } void generateKingChessIdeal(BigIdeal& ideal, size_t rowsAndColumns) { int deltaRow[] = {-1, 0, 1, 1}; // the other moves follow by symmetry int deltaColumn[] = { 1, 1, 1, 0}; ASSERT(sizeof(deltaRow) == sizeof(deltaColumn)); size_t deltaCount = sizeof(deltaRow) / sizeof(int); generateChessIdeal(ideal, rowsAndColumns, rowsAndColumns, deltaRow, deltaColumn, deltaCount); } void generateKnightChessIdeal(BigIdeal& ideal, size_t rowsAndColumns) { int deltaRow[] = {-1, 1, 2, 2}; // the other moves follow by symmetry int deltaColumn[] = { 2, 2, 1, -1}; ASSERT(sizeof(deltaRow) == sizeof(deltaColumn)); size_t deltaCount = sizeof(deltaRow) / sizeof(int); generateChessIdeal(ideal, rowsAndColumns, rowsAndColumns, deltaRow, deltaColumn, deltaCount); } namespace { /** Consider the entries of pattern as the bits in a binary number. This method adds 1 and returns true if the resulting pattern is all zeroes. */ bool nextBitPattern(vector& pattern) { typedef vector::iterator iterator; for (iterator it = pattern.begin(); it != pattern.end(); ++it) { if (*it) *it = 0; else { *it = 1; ASSERT(pattern != vector(pattern.size())); return true; } } ASSERT(pattern == vector(pattern.size())); return false; } } void generateTreeIdeal(BigIdeal& ideal, size_t varCount) { ideal.clearAndSetNames(VarNames(varCount)); // Declare outside of loop to avoid repeated initialization. mpz_class exponent; // Using vector to avoid vector which has special // properties. Going through all "bit" patterns by simulating adding // one at each step. pattern starts at all zero, which represents // the identity, so we take the next bit pattern even in the first // iteration to go past that. vector pattern(varCount); while (nextBitPattern(pattern)) { size_t setSize = 0; typedef vector::iterator iterator; for (iterator it = pattern.begin(); it != pattern.end(); ++it) setSize += (size_t)*it; exponent = varCount - setSize + 1; ideal.newLastTerm(); for (size_t var = 0; var < varCount; ++var) if (pattern[var]) ideal.getLastTermExponentRef(var) = exponent; } } void generateRookChessIdeal(BigIdeal& bigIdeal, size_t n, size_t k) { if (n == 0 || k == 0) reportError("One side of rook ideal has zero vertices."); if (n > 1000 || k > 1000) reportError("Number of variables in rook ideal too large."); if (n > k) std::swap(n, k); size_t varCount = n * k; Ideal ideal(varCount); Term term(varCount); vector taken(k); vector choice(n); size_t level = 0; while (true) { if (choice[level] == k) { if (level == 0) break; --level; ASSERT(static_cast(taken[choice[level]]) == true); ASSERT(term[level * k + choice[level]] == 1); taken[choice[level]] = false; term[level * k + choice[level]] = 0; ++choice[level]; continue; } if (taken[choice[level]]) { ++choice[level]; continue; } taken[choice[level]] = true; ASSERT(term[level * k + choice[level]] == 0); term[level * k + choice[level]] = 1; if (level < n - 1) { ++level; choice[level] = 0; } else { ideal.insert(term); ASSERT(static_cast(taken[choice[level]]) == true); ASSERT(term[level * k + choice[level]] == 1); taken[choice[level]] = false; term[level * k + choice[level]] = 0; ++choice[level]; } } VarNames names(varCount); bigIdeal.clearAndSetNames(names); bigIdeal.insert(ideal); } void generateMatchingIdeal(BigIdeal& bigIdeal, size_t n) { if (n == 0) reportError("Too few variables in matching ideal."); if (n > 1000 || n > 1000) reportError("Number of variables in matching ideal too large."); class State { public: State(size_t nodeCount): _notTaken(-1), _nodes(nodeCount), _isAnchor(nodeCount) { std::fill(_nodes.begin(), _nodes.end(), _notTaken); const size_t varCount = nodeCount * (nodeCount - 1) / 2; // n choose 2 _term.reset(varCount); } void takeEdge(size_t anchor, size_t other) { ASSERT(anchor < _nodes.size()); ASSERT(other < _nodes.size()); ASSERT(!isTaken(anchor)); ASSERT(!isTaken(other)); _nodes[anchor] = other; _nodes[other] = anchor; _isAnchor[anchor] = true; const size_t var = edgeToVar(anchor, other); ASSERT(_term[var] == 0); _term[var] = 1; } void takeNode(size_t node) { ASSERT(node < getNodeCount()); ASSERT(!isTaken(node)); ASSERT(!isAnchor(node)); _nodes[node] = node; } void dropNode(size_t node) { ASSERT(node < getNodeCount()); ASSERT(isTaken(node)); ASSERT(!isAnchor(node)); ASSERT(_nodes[node] == node); _nodes[node] = _notTaken; } void dropEdge(size_t anchor) { ASSERT(anchor < _nodes.size()); ASSERT(isTaken(anchor)); ASSERT(isAnchor(anchor)); _isAnchor[anchor] = false; const size_t other = _nodes[anchor]; _nodes[other] = _notTaken; _nodes[anchor] = _notTaken; const size_t var = edgeToVar(anchor, other); ASSERT(_term[var] == 1); _term[var] = 0; } size_t getNeighbor(size_t node) const { ASSERT(isTaken(node)); return _nodes[node]; } bool isAnchor(size_t node) const { ASSERT(node < _nodes.size()); return _isAnchor[node]; } bool isTaken(size_t node) const { ASSERT(node < _nodes.size()); return _nodes[node] != _notTaken; } const Term& getTerm() const {return _term;} size_t getNodeCount() const {return _nodes.size();} // Returns static_cast(-1) if there are no anchors to the // left (negative direction). size_t getAnchorLeft(size_t node) const { ASSERT(node <= getNodeCount()); for (--node; node != static_cast(-1); --node) if (isAnchor(node)) break; return node; } // returns getNodeCount() if all are taken to right (positive // direction). size_t getNotTakenRight(size_t node) const { ASSERT(node < getNodeCount()); for (++node; node < getNodeCount(); ++node) if (!isTaken(node)) break; return node; } private: size_t edgeToVar(size_t a, size_t b) const { ASSERT(a != b); ASSERT(a < _nodes.size()); ASSERT(b < _nodes.size()); if (a < b) std::swap(a, b); const size_t var = (a * (a - 1)) / 2 + b; ASSERT(var < _term.getVarCount()); return var; } const size_t _notTaken; // cannot be static when local class std::vector _nodes; std::vector _isAnchor; Term _term; }; State state(n); Ideal ideal(state.getTerm().getVarCount()); size_t node = 0; // one node cannot be used in maximum matching if odd number of nodes. size_t notUsed = state.getNodeCount(); if (state.getNodeCount() % 2 == 1) { notUsed = 0; state.takeNode(notUsed); ++node; } while (true) { if (node == static_cast(-1)) { if (notUsed < state.getNodeCount()) { state.dropNode(notUsed); ++notUsed; } if (notUsed == state.getNodeCount()) break; state.takeNode(notUsed); node = 0; // start over with next node unused } ASSERT(node <= state.getNodeCount()); if (node == state.getNodeCount()) { ideal.insert(state.getTerm()); node = state.getAnchorLeft(node); } else if (!state.isTaken(node)) { const size_t neighbor = state.getNotTakenRight(node); if (neighbor == state.getNodeCount()) { node = state.getAnchorLeft(node); } else { state.takeEdge(node, neighbor); node = state.getNotTakenRight(neighbor); } } else { ASSERT(state.isTaken(node)); ASSERT(state.isAnchor(node)); const size_t neighbor = state.getNeighbor(node); const size_t nextNeighbor = state.getNotTakenRight(neighbor); state.dropEdge(node); if (nextNeighbor == state.getNodeCount()) { node = state.getAnchorLeft(node); } else { state.takeEdge(node, nextNeighbor); node = state.getNotTakenRight(node); } } } VarNames names(state.getTerm().getVarCount()); bigIdeal.clearAndSetNames(names); bigIdeal.insert(ideal); } bool generateRandomEdgeIdeal (BigIdeal& bigIdeal, size_t variableCount, size_t generatorCount) { Ideal ideal(variableCount); Term term(variableCount); size_t generatorsToGo = generatorCount; size_t triesLeft = (size_t)4 * 1000 * 1000; while (generatorsToGo > 0 && triesLeft > 0) { --triesLeft; size_t a = rand() % variableCount; size_t b = rand() % variableCount; if (a == b) continue; term[a] = 1; term[b] = 1; if (ideal.isIncomparable(term)) { ideal.insert(term); --generatorsToGo; } term[a] = 0; term[b] = 0; --triesLeft; } VarNames names(variableCount); bigIdeal.clearAndSetNames(names); bigIdeal.insert(ideal); return generatorsToGo == 0; } bool generateRandomIdeal(BigIdeal& bigIdeal, size_t exponentRange, size_t variableCount, size_t generatorCount) { Ideal ideal(variableCount); Term term(variableCount); size_t generatorsToGo = generatorCount; size_t triesLeft = (size_t)4 * 1000 * 1000; while (generatorsToGo > 0 && triesLeft > 0) { --triesLeft; for (size_t var = 0; var < variableCount; ++var) { term[var] = rand(); if (exponentRange != numeric_limits::max()) term[var] %= exponentRange + 1; } if (ideal.isIncomparable(term)) { ideal.insert(term); --generatorsToGo; } } VarNames names(variableCount); bigIdeal.clearAndSetNames(names); bigIdeal.insert(ideal); return generatorsToGo == 0; } void generateRandomFrobeniusInstance(vector& instance, size_t entryCount, const mpz_class& maxEntry) { ASSERT(entryCount >= 1); ASSERT(maxEntry >= 1); gmp_randclass random(gmp_randinit_default); /// @todo: preserve state across calls. random.seed((unsigned long)time(0) + #ifdef __GNUC__ // Only GCC defines this macro. (unsigned long)getpid() + #endif (unsigned long)clock()); instance.resize(entryCount); // Populate instance with random numbers in range [1,maxEntry]. for (size_t i = 0; i < entryCount; ++i) instance[i] = random.get_z_range(maxEntry) + 1; // Calculate greatest common divisor of instance. mpz_class gcd = instance[0]; for (size_t i = 1; i < entryCount; ++i) mpz_gcd(gcd.get_mpz_t(), gcd.get_mpz_t(), instance[i].get_mpz_t()); // Ensure that instance are relatively prime. instance.front() /= gcd; sort(instance.begin(), instance.end()); } frobby-0.9.5/src/randomDataGenerators.h000066400000000000000000000076351401527164200200710ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef RANDOM_DATA_GENERATORS_GUARD #define RANDOM_DATA_GENERATORS_GUARD #include class BigIdeal; /** @file This file contains functions that generate data. They are NOT all random. @todo Fix the name of the file, since not everything here is random, and consider the structure of the code. E.g. does generating Frobenius instances belong with the code generating monomial ideals? Should these methods be free functions? Should there be a facade which does nearly nothing but to call these functions? Should this be the place where the description of these ideals is presented? Shouldn't these be returning their output using a consumer? Shouldn't there be a clear mapping between these ideals' names as strings and the function creating them, rather than just having a static list in the Action that creates these? */ /** Generate an ideal of the form \f$x_1*x_2\f$, \f$x_2*x_3\f$ and so on. */ void generateLinkedListIdeal(BigIdeal& ideal, size_t varCount); /** Generate an ideal where \f$x_(a,b)*x_(c,d)\f$ is a generator when \f$(a,b)\f$ and \f$(c,d)\f$ indicate coordinates on a square chessboard where the move is a valid king's move. */ void generateKingChessIdeal(BigIdeal& ideal, size_t rowsAndColumns); /** Generate an ideal where \f$x_(a,b)*x_(c,d)\f$ is a generator when \f$(a,b)\f$ and \f$(c,d)\f$ indicate coordinates on a square chessboard where the move is a valid knight's move. */ void generateKnightChessIdeal(BigIdeal& ideal, size_t rowsAndColumns); /** Generate an ideal in n*k variables. Each facet corresponds to a way of placing rooks on an n*k chessboard without any rooks being able to take any other rook in one move. */ void generateRookChessIdeal(BigIdeal& bigIdeal, size_t n, size_t k); /** Generate an ideal whose facets are the maximum matchings in an n-clique. */ void generateMatchingIdeal(BigIdeal& bigIdeal, size_t n); /** Generate an ideal in varCount variables with minimal generators given by \f[ \left\langle \left. \left( \prod_{i\in F}x_i \right)^{n-|F|+1} \right| \emptyset\neq F\subseteq \left\{ 1,\ldots,n \right\} \right\rangle ,\f] i.e. to get the minimal generators, take each square free monomial except the identity, and raise it to the power of varCount + 1 minus it's total degree. */ void generateTreeIdeal(BigIdeal& ideal, size_t varCount); /** Generate a random ideal where every edge is a product of two different variables. Returns true if the requested number of generators was achieved. */ bool generateRandomEdgeIdeal (BigIdeal& ideal, size_t varCount, size_t generatorCount); /** Generate a random ideal with exponents in the range [0, exponentRange]. Returns true if the requested number of generators was achieved. */ bool generateRandomIdeal(BigIdeal& bigIdeal, size_t exponentRange, size_t varCount, size_t generatorCount); /** Generate a random vector of numbers whose gcd is 1. */ void generateRandomFrobeniusInstance(vector& degrees, size_t entryCount, const mpz_class& maxEntry); #endif frobby-0.9.5/src/stdinc.h000066400000000000000000000070401401527164200152370ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ /** \file stdinc.h This header file includes common definitions and is included as the first line of code in every implementation file (.cpp). Thus it is never necessary to include it in headers, and anything defined here is defined everywhere throughout the code base. */ #ifdef _MSC_VER // For Microsoft Compiler in Visual Studio C++. #define _SCL_SECURE_NO_WARNINGS #pragma warning (push, 1) // Reduce warning level for GMP headers. #endif // Some versions of GMP do not define gmp_fprintf unless cstdio is // included first, so we have to include it here. #include #include #include #include #ifdef _MSC_VER // For Microsoft Compiler in Visual Studio C++. #pragma warning (pop) // Go back to previous warning level. #pragma warning (disable: 4996) // std::copy is flagged as dangerous. #pragma warning (disable: 4290) // VC++ ignores throw () specification. #pragma warning (disable: 4127) // Warns about using "while (true)". #pragma warning (disable: 4100) // Warns about unused parameters. #pragma warning (disable: 4800) // Warns on int to bool conversion. #pragma warning (disable: 4146) // Warns on unary minus on unsigned (bit trick) // This warning warns about using the this pointer in base member // initializer lists. This is a pretty good warning as that can // obviously easily go wrong, but it is pretty useful to do as well, // so the warning is turned off. #pragma warning (disable: 4355) #ifdef _DEBUG #ifndef DEBUG #define DEBUG #endif #endif #ifdef DEBUG // MSC's map header has an issue where you get a syntax error if you // define a macro for new like we do below. We work around this by including // map before we define the macro. #include #endif #endif #include #include using namespace std; #ifdef DEBUG #include // Useful for debugging. #define PRINT #define IF_DEBUG(X) X #include #define ASSERT(X) assert(X); void* operator new(size_t s, const char* file, size_t line) throw (std::bad_alloc); void* operator new[](size_t s, const char* file, size_t line) throw (std::bad_alloc); void operator delete(void* s, const char* file, size_t line); void operator delete[](void* s, const char* file, size_t line); #define NEW_MACRO new (__FILE__, __LINE__) #define new NEW_MACRO #else #define IF_DEBUG(X) #define ASSERT(X) #endif typedef unsigned int Exponent; /// The native unsigned type for the CPU. An incorrect type can result in /// worse performance but all computations must still be correct. typedef unsigned long Word; static const size_t BitsPerWord = 8 * sizeof(Word); /// The alignment that memory allocators must ensure. In other words /// allocators must return pointer addresses that are divisible by /// MemoryAlignment. MemoryAlignment must be a power of 2. static const size_t MemoryAlignment = sizeof(long); frobby-0.9.5/src/test/000077500000000000000000000000001401527164200145605ustar00rootroot00000000000000frobby-0.9.5/src/test/Test.cpp000066400000000000000000000017651401527164200162140ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "Test.h" Test::Test(const string& name): _name(name) { } Test::~Test() { } const string& Test::getName() const { return _name; } bool Test::operator<(const Test& test) const { return getName() < test.getName(); } frobby-0.9.5/src/test/Test.h000066400000000000000000000027671401527164200156640ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TEST_GUARD #define TEST_GUARD #include #include class TestVisitor; /** This class represents a test or a suite of tests according to the Composite Pattern. The hierarchy of tests can be traversed according to the Visitor Pattern. */ class Test { public: /** Construct a Test with the given name. */ Test(const string& name); virtual ~Test(); /** Makes the visitor visit this object as per the Visitor Pattern. */ virtual bool accept(TestVisitor& visitor) = 0; /** Returns the name passed to the constructor. */ const string& getName() const; /** Compares names lexicographically. */ bool operator<(const Test& test) const; private: /** The name passed to the constructor. */ string _name; }; #endif frobby-0.9.5/src/test/TestCase.cpp000066400000000000000000000017071401527164200170040ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TestCase.h" #include "TestVisitor.h" TestCase::TestCase(const string& name): Test(name) { } bool TestCase::accept(TestVisitor& visitor) { return visitor.visit(*this); } frobby-0.9.5/src/test/TestCase.h000066400000000000000000000031421401527164200164440ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TEST_CASE_GUARD #define TEST_CASE_GUARD #include "Test.h" class TestVisitor; /** Represents a test case, which is usually created through a macro that defines a subclass. This class is a leaf of the Composite Pattern, and can be visited by a TestVisitor according to the Visitor Pattern. */ class TestCase : public Test { public: /** Construct a test case with the given name. */ TestCase(const string& name); virtual bool accept(TestVisitor& visitor); /** Run the test and record the name of the test as __nameOfTest. This can be a more detailed name, and it can be derived from the name that is returned by getName(), or it can be unrelated. This provides needed flexibility. printDots indicates whether to print dots when individual assertions succeed. */ virtual void run(const char* nameOfTest, bool printDots) = 0; }; #endif frobby-0.9.5/src/test/TestQualifier.cpp000066400000000000000000000023571401527164200200540ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TestQualifier.h" #include "TestSuite.h" bool TestQualifier::visitEnter(TestSuite& suite) { if (!suite.getName().empty()) { _path += suite.getName(); _path += '.'; } return true; } bool TestQualifier::visitLeave(TestSuite& suite) { if (!suite.getName().empty()) { // The -1 to remove the dot as well. _path.resize(_path.size() - suite.getName().size() - 1); } return true; } const string& TestQualifier::getPath() const { return _path; } frobby-0.9.5/src/test/TestQualifier.h000066400000000000000000000024441401527164200175160ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TEST_QUALIFIER_GUARD #define TEST_QUALIFIER_GUARD #include "TestVisitor.h" class TestSuite; /** Visits a tree of Test while keeping track of the path taken from the root to the current node as a dot-separated string. */ class TestQualifier : public TestVisitor { public: virtual bool visitEnter(TestSuite& suite); virtual bool visitLeave(TestSuite& suite); /** Returns the path taken from the root of the tree to the current node as a dot-separated string. */ const string& getPath() const; private: string _path; }; #endif frobby-0.9.5/src/test/TestRunner.cpp000066400000000000000000000022671401527164200174040ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TestRunner.h" #include "TestCase.h" #include "../DebugAllocator.h" bool TestRunner::visit(TestCase& test) { string qualifiedName = getPath() + test.getName(); fputs(qualifiedName.c_str(), stdout); fputs(": ", stdout); #ifdef DEBUG DebugAllocator::getSingleton().runTest(test, qualifiedName); #else test.run(qualifiedName.c_str(), true); #endif fputc('\n', stdout); fflush(stdout); return true; } frobby-0.9.5/src/test/TestRunner.h000066400000000000000000000017371401527164200170520ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TEST_RUNNER_GUARD #define TEST_RUNNER_GUARD #include "TestQualifier.h" class TestCase; /** Runs every test in forward order. */ class TestRunner : public TestQualifier { virtual bool visit(TestCase& test); }; #endif frobby-0.9.5/src/test/TestSorter.cpp000066400000000000000000000020731401527164200174040ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TestSorter.h" #include "TestSuite.h" bool TestSorter::visitEnter(TestSuite& suite) { // This does not invalidate or alter the value of an iterator in // visit(TestSuite&), since visitEnter is called before any other // processing of a TestSuite. suite.sortTests(); return true; } frobby-0.9.5/src/test/TestSorter.h000066400000000000000000000021361401527164200170510ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TEST_SORTER_GUARD #define TEST_SORTER_GUARD #include "TestVisitor.h" class TestCase; /** Sorts tests to avoid using the order imposed by the order of construction of global objects, since this is inconsistent across compilers and platforms. */ class TestSorter : public TestVisitor { virtual bool visitEnter(TestSuite& testSuite); }; #endif frobby-0.9.5/src/test/TestSuite.cpp000066400000000000000000000030111401527164200172100ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TestSuite.h" #include "TestVisitor.h" #include TestSuite::TestSuite(const string& name): Test(name) { } void TestSuite::add(Test* test) { ASSERT(test != 0); _tests.push_back(test); } namespace { /** Follows pointers before comparing values. Helper function for TestSuite::sortTests. */ bool comparePointedToValue(const Test* a, const Test* b) { ASSERT(a != 0); ASSERT(b != 0); return *a < *b; } } void TestSuite::sortTests() { std::sort(begin(), end(), comparePointedToValue); } TestSuite::TestIterator TestSuite::begin() { return _tests.begin(); } TestSuite::TestIterator TestSuite::end() { return _tests.end(); } bool TestSuite::accept(TestVisitor& visitor) { return visitor.visit(*this); } frobby-0.9.5/src/test/TestSuite.h000066400000000000000000000034731401527164200166710ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TEST_SUITE_GUARD #define TEST_SUITE_GUARD #include "Test.h" class TestVisitor; /** Represents a collection of tests, be they individual tests or yet other collections of tests. This class is a composite as per the Composite pattern, and can be visited by a TestVisitor according to the Visitor Pattern. */ class TestSuite : public Test { public: /** Constructs a test suite with the given name. */ TestSuite(const string& name); /** Adds a test to the test suite. This can be another TestSuite or an individual TestCase. */ void add(Test* test); /** Sorts the added tests in some canonical order. */ void sortTests(); /** An iterator for the added tests*/ typedef vector::iterator TestIterator; /** Returns an iterator to the beginning of the range of added tests. */ TestIterator begin(); /** Returns an iterator just past the end of the range of added tests. */ TestIterator end(); virtual bool accept(TestVisitor& visitor); private: /** The collection of tests of added tests. */ vector _tests; }; #endif frobby-0.9.5/src/test/TestVisitor.cpp000066400000000000000000000025041401527164200175640ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "TestVisitor.h" #include "TestSuite.h" TestVisitor::~TestVisitor() { } bool TestVisitor::visitEnter(TestSuite&) { return true; } bool TestVisitor::visit(TestCase& testCase) { return true; } bool TestVisitor::visit(TestSuite& testSuite) { if (visitEnter(testSuite)) { TestSuite::TestIterator end = testSuite.end(); for (TestSuite::TestIterator it = testSuite.begin(); it != end; ++it) if (!(*it)->accept(*this)) return false; } return visitLeave(testSuite); } bool TestVisitor::visitLeave(TestSuite&) { return true; } frobby-0.9.5/src/test/TestVisitor.h000066400000000000000000000053541401527164200172370ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TEST_VISITOR_GUARD #define TEST_VISITOR_GUARD class TestSuite; class TestCase; /** This class is a visitor for classes derived from Test according to the Visitor Pattern. */ class TestVisitor { public: virtual ~TestVisitor(); /** Returns true if the testSuite should be iterated through. Is called before testSuite is processed in any other way, and if return value is false, the testSuite will not be iterated through, according to the default implemenation of visit(TestCase&). The default implementation always returns true. */ virtual bool visitEnter(TestSuite& testSuite); /** Visits a testCase and returns true if visiting of any other objects should continue after the testSuite has been visited. The visiting process will stop if return value is false, according to the default implementation of visit(TestSuite&). The default implementation always returns true. */ virtual bool visit(TestCase& testCase); /** The default implementation calls visitEnter and visits the added objects in forward order if the return value is true. If no visit returns false, then calls visitLeave and returns its return value. Returns false and visits no more objects and does not call visitLeave if return value of any visit is false. The return value of visitEnter only governs whether to iterate through the added tests, it does not prevent calling visitLeave and it does not directly influence the return value. Usually it will be sufficient to overload visitEnter and visitLeave, as opposed to overloading this method. */ virtual bool visit(TestSuite& testSuite); /** Returns true if visiting of any other objects should continue after the testSuite has been visited. Is called as last step of visiting testSuite, and the visiting process will stop if return value is false, according to the default implementation of visit(TestSuite&). The default implementation always returns true. */ virtual bool visitLeave(TestSuite&); }; #endif frobby-0.9.5/src/test/all.h000066400000000000000000000020001401527164200154710ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef ALL_GUARD #define ALL_GUARD // This is the file clients of the test system should include to create // new tests. It does not include things such as runners. #include "TestCase.h" #include "TestSuite.h" #include "macroes.h" #include "asserts.h" #endif frobby-0.9.5/src/test/asserts.cpp000066400000000000000000000166361401527164200167640ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "asserts.h" #include AssertException::AssertException(const string& str): logic_error(str) { } AssertException::AssertException(const AssertException& e): logic_error(e) { } namespace TestInternal { void assertOK(const StdData& data) { if (data.printDot) { fputc('.', stdout); fflush(stdout); } } void assertFail(const char* cond, const char* expected, const StdData& data) { ASSERT(false); stringstream msg; msg << "Unit test " << data.testName << " failed in file " << data.file << " on line " << data.line << ".\n" << "Expected \n " << cond << "\nto be\n " << expected << "\nbut it was not."; if (!msg) { // This means msg has run out of memory, and so no message will be // printed. In this case it is better to indicate running out of // memory. As it happens, this also avoids the need for some // special cases for tests when being run as a test for recovery // from running out of memory. E.g. when precisely this thing // happens with stringstream just ignoring its input without an // exception causes tests to fail. throw bad_alloc(); } throw AssertException(msg.str()); } void assertFail1(const char* cond, const char* expected, const StdData& data, const char* exp1, string exp1Value) { ASSERT(false); stringstream msg; msg << "Unit test " << data.testName << " failed in file " << data.file << " on line " << data.line << ".\n" << "Expected \n " << cond << "\nto equal\n " << expected << "\nbut it did not.\n" << "The value of the expression\n " << exp1 << "\nprints as\n " << exp1Value << '\n'; if (!msg) { // This means msg has run out of memory, and so no message will be // printed. In this case it is better to indicate running out of // memory. As it happens, this also avoids the need for some // special cases for tests when being run as a test for recovery // from running out of memory. E.g. when precisely this thing // happens with stringstream just ignoring its input without an // exception causes tests to fail. throw bad_alloc(); } throw AssertException(msg.str()); } void assertFail2(const char* cond, const char* expected, const StdData& data, const char* exp1, string exp1Value, const char* exp2, string exp2Value) { ASSERT(false); stringstream msg; msg << "Unit test " << data.testName << " failed in file " << data.file << " on line " << data.line << ".\n" << "Expected \n " << cond << "\nto equal\n " << expected << "\nbut it did not.\n" << "The value of the expression\n " << exp1 << "\nprints as\n " << exp1Value << '\n' << "The value of the expression\n " << exp2 << "\nprints as\n " << exp2Value << '\n'; if (!msg) { // This means msg has run out of memory, and so no message will be // printed. In this case it is better to indicate running out of // memory. As it happens, this also avoids the need for some // special cases for tests when being run as a test for recovery // from running out of memory. E.g. when precisely this thing // happens with stringstream just ignoring its input without an // exception causes tests to fail. throw bad_alloc(); } throw AssertException(msg.str()); } void assertSucceeded(bool printDot) { if (printDot) { fputc('.', stdout); fflush(stdout); } } void assertFailed(const char* errorMsg, const char* testName, const char* file, size_t line) { if (testName == 0) testName = ""; ASSERT(false); stringstream msg; msg << "Unit test " << testName << " failed in file " << file << " on line " << line << ".\n" << errorMsg; if (!msg) { // This means msg has run out of memory, and so no message will be // printed. In this case it is better to indicate running out of // memory. As it happens, this also avoids the need for some // special cases for tests when being run as a test for recovery // from running out of memory. E.g. when precisely this thing // happens with stringstream just ignoring its input without an // exception causes tests to fail. throw bad_alloc(); } throw AssertException(msg.str()); } void assertFailed2(const char* errorMsg, const char* testName, const char* file, size_t line, const char* expression1, const char* expression1Value, const char* expression2, const char* expression2Value) { stringstream msg; msg << errorMsg << "The value of the expression\n " << expression1 << "\nprints as\n " << expression1Value << '\n' << "and the value of the expression\n " << expression2 << "\nprints as\n " << expression2Value << '\n'; assertFailed(msg.str().c_str(), testName, file, line); } void assertTrue(bool value, const char* valueString, const char* testName, const char* file, size_t line, bool printDot) { if (value) { assertSucceeded(printDot); return; } stringstream msg; msg << "Expected \n " << valueString << "\nto be true, but it was not.\n"; assertFailed(msg.str().c_str(), testName, file, line); } void assertTrue2Failed(const char* valueString, const char* testName, const char* file, size_t line, const char* expression1, const char* expression1Value, const char* expression2, const char* expression2Value) { stringstream msg; msg << "Expected \n " << valueString << "\nto be true, but it was not.\n"; assertFailed2(msg.str().c_str(), testName, file, line, expression1, expression1Value, expression2, expression2Value); } void assertFalse(bool value, const char* valueString, const char* testName, const char* file, size_t line, bool printDot) { if (!value) { assertSucceeded(printDot); return; } stringstream msg; msg << "Expected \n " << valueString << "\nto be false, but it was not.\n"; assertFailed(msg.str().c_str(), testName, file, line); } void assertEqualFailed(const char* a, const char* b, const char* aString, const char* bString, const char* testName, const char* file, size_t line) { stringstream msg; msg << "Expected " << aString << " == " << bString << ",\n" << "but operator== returned false. " << "The left hand side prints as\n" << a << "\nwhile " << "the right hand side prints as\n" << b << ".\n"; assertFailed(msg.str().c_str(), testName, file, line); } void assertNotEqualFailed(const char* a, const char* b, const char* aString, const char* bString, const char* testName, const char* file, size_t line) { stringstream msg; msg << "Expected " << aString << " != " << bString << ",\n" << "but operator!= returned false. " << "The left hand side prints as\n" << a << "\nwhile " << "the right hand side prints as\n" << b << ".\n"; assertFailed(msg.str().c_str(), testName, file, line); } } frobby-0.9.5/src/test/asserts.h000066400000000000000000000154341401527164200164240ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef ASSERTS_GUARD #define ASSERTS_GUARD #include #include #include #include class AssertException : public logic_error { public: AssertException(const string& str); AssertException(const AssertException& e); }; namespace TestInternal { struct StdData { StdData(size_t lineParam, const char* fileParam, const char* testNameParam, bool printDotParam): line(lineParam), file(fileParam), testName(testNameParam), printDot(printDotParam) {} size_t line; const char* file; const char* testName; bool printDot; }; #define STD_DATA TestInternal::StdData(__LINE__, __FILE__, __nameOfTest, __printDots) #define SILENT(X) \ {bool ___printDots = __printDots; __printDots = false; X; __printDots = ___printDots;} template string toStr(const T& t) {stringstream out;out << t;return out.str();} void assertOK(const StdData&); void assertFail(const char* cond, const char* expected, const StdData&); void assertFail1(const char* cond, const char* expected, const StdData&, const char* exp1, string exp1Value); void assertFail2(const char* cond, const char* expected, const StdData&, const char* exp1, string exp1Value, const char* exp2, string exp2Value); void assertSucceeded(bool printDot); void assertFailed(const char* errorMsg, const char* testName, const char* file, size_t line); void assertTrue(bool value, const char* condition, const char* testName, const char* file, size_t line, bool printDot); #define ASSERT_EXCEPTION(CODE, EXCEPTION_TYPE) \ {bool _frobby_sawException = false; \ try {CODE;} catch (EXCEPTION_TYPE) {_frobby_sawException = true;} \ if (_frobby_sawException)assertOK(STD_DATA); \ else assertFail(#CODE,"throw exception of type " #EXCEPTION_TYPE,STD_DATA);} #define ASSERT_TRUE(VALUE) \ {if(VALUE)assertOK(STD_DATA);else assertFail(#VALUE,"true",STD_DATA);} #define ASSERT_TRUE_SILENT(VALUE) SILENT(ASSERT_TRUE(VALUE)) #define ASSERT_TRUE1(VALUE, X) \ {if(VALUE)assertOK(STD_DATA);else assertFail1(#VALUE,"true",STD_DATA,#X,TestInternal::toStr(X));} #define ASSERT_FALSE1(VALUE, X) \ {if(!VALUE)assertOK(STD_DATA);else assertFail1(#VALUE,"false",STD_DATA,#X,TestInternal::toStr(X));} #define ASSERT_TRUE2(VALUE, X, Y) \ {if(VALUE)assertOK(STD_DATA);else assertFail2(#VALUE,"true",STD_DATA,#X,TestInternal::toStr(X),#Y,TestInternal::toStr(Y));} #define ASSERT_FALSE2(VALUE, X, Y) \ {if(!VALUE)assertOK(STD_DATA);else assertFail2(#VALUE,"false",STD_DATA,#X,TestInternal::toStr(X),#Y,TestInternal::toStr(Y));} void assertTrue2Failed(const char* valueString, const char* testName, const char* file, size_t line, const char* expression1, const char* expression1Value, const char* expression2, const char* expression2Value); template void assertTrue2(bool value, const char* valueString, const char* testName, const char* file, size_t line, const char* expression1, const A& a, const char* expression2, const B& b, bool printDot) { if (value) { assertSucceeded(printDot); return; } stringstream aValue; aValue << a; stringstream bValue; bValue << b; assertTrue2Failed(valueString, testName, file, line, expression1, aValue.str().c_str(), expression2, bValue.str().c_str()); } #define ASSERT_TRUE2_SILENT(VALUE, A, B) \ TestInternal::assertTrue2(VALUE, #VALUE, __nameOfTest, __FILE__, __LINE__, \ #A,A,#B,B, false); void assertFalse(bool value, const char* condition, const char* testName, const char* file, size_t line, bool printDot); #define ASSERT_FALSE(VALUE) \ TestInternal::assertFalse(VALUE, #VALUE, __nameOfTest, __FILE__, __LINE__, __printDots) #define ASSERT_FALSE_SILENT(VALUE) \ TestInternal::assertFalse(VALUE, #VALUE, __nameOfTest, __FILE__, __LINE__, false) void assertEqualFailed(const char* a, const char* b, const char* aString, const char* bString, const char* testName, const char* file, size_t line); template void assertEqual(const T1& a, const T2& b, const char* aString, const char* bString, const char* testName, const char* file, size_t line, bool printDot) { if (a == b) { assertSucceeded(printDot); return; } stringstream aValue; aValue << a; stringstream bValue; bValue << b; assertEqualFailed(aValue.str().c_str(), bValue.str().c_str(), aString, bString, testName, file, line); } #define ASSERT_EQ(A, B) \ TestInternal::assertEqual(A, B, #A, #B, __nameOfTest, __FILE__, __LINE__, __printDots) #define ASSERT_EQ_SILENT(A, B) \ TestInternal::assertEqual(A, B, #A, #B, __nameOfTest, __FILE__, __LINE__, false) void assertNotEqualFailed(const char* a, const char* b, const char* aString, const char* bString, const char* testName, const char* file, size_t line); template void assertNotEqual(const T1& a, const T2& b, const char* aString, const char* bString, const char* testName, const char* file, size_t line, bool printDot) { if (a != b) { assertSucceeded(printDot); return; } stringstream aValue; aValue << a; stringstream bValue; bValue << b; assertNotEqualFailed(aValue.str().c_str(), bValue.str().c_str(), aString, bString, testName, file, line); } #define ASSERT_NEQ(A, B) \ TestInternal::assertNotEqual(A, B, #A, #B, __nameOfTest, __FILE__, __LINE__, __printDots) #define ASSERT_NEQ_SILENT(A, B) \ TestInternal::assertNotEqual(A, B, #A, #B, __nameOfTest, __FILE__, __LINE__, false) /** Prints out a vector. This is useful when vectors are used in tests. The operator is only defined in this namespace so it does not escape to pollute the global namespce. */ template ostream& operator<<(ostream& out, const vector& v) { out << " std::vector<>: "; for (typename vector::const_iterator it = v.begin(); it != v.end(); ++it) out << (it == v.begin() ? "" : ", ") << *it; out << '\n'; return out; } } #endif frobby-0.9.5/src/test/macroes.cpp000066400000000000000000000016151401527164200167200ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "macroes.h" #include "TestSuite.h" TestSuite& GET_TEST_SUITE(root) { static TestSuite suite(""); return suite; } frobby-0.9.5/src/test/macroes.h000066400000000000000000000040271401527164200163650ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef MACROES_GUARD #define MACROES_GUARD #define GET_TEST_SUITE(SUITE) \ getTestSuite_##SUITE##_() class TestSuite; TestSuite& GET_TEST_SUITE(root); #define TEST_SUITE(SUITE) TEST_SUITE2(root, SUITE) #define TEST_SUITE2(PARENT, SUITE) \ TestSuite& GET_TEST_SUITE(PARENT); \ TestSuite& GET_TEST_SUITE(SUITE) { \ static TestSuite suite(#SUITE); \ return suite; \ } \ class _Helper_Suite_##SUITE { \ public: \ _Helper_Suite_##SUITE() { \ GET_TEST_SUITE(PARENT).add(&GET_TEST_SUITE(SUITE)); \ } \ } _Helper_Suite_##SUITE; #define TEST(SUITE, TEST_NAME) \ TestSuite& GET_TEST_SUITE(SUITE); \ class _testCase_##SUITE##_##TEST_NAME : public TestCase { \ public: \ void run(const char* __nameOfTest, bool _printDots); \ _testCase_##SUITE##_##TEST_NAME(): \ TestCase(#TEST_NAME) {} \ }; \ class _Helper_testCase_##SUITE##_##TEST_NAME { \ public: \ _Helper_testCase_##SUITE##_##TEST_NAME() { \ static _testCase_##SUITE##_##TEST_NAME test; \ GET_TEST_SUITE(SUITE).add(&test); \ } \ } static _helper_testCase_##SUITE##_##TEST_NAME; \ void _testCase_##SUITE##_##TEST_NAME::run \ (const char* __nameOfTest, bool __printDots) #define FRIEND_TEST(SUITE, TEST_NAME) \ friend class _testCase_##SUITE##_##TEST_NAME #endif frobby-0.9.5/src/test/stdinc.h000066400000000000000000000017301401527164200162160ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ // This file is just here for convenience to be able to type // #include "stdinc.h" // instead of // #include "../stdinc.h" // This is nice since then every .cpp file must start with the former. #include "../stdinc.h" frobby-0.9.5/src/test/testmain.cpp000066400000000000000000000025501401527164200171120ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #include "stdinc.h" #include "all.h" #include "TestRunner.h" #include "asserts.h" TEST(root, qbob) { cout << "inside qbob" << endl; } TEST(bob1, bab1) { cout << "inside bob11" << endl; } TEST(bob1, bab2) { cout << "inside bob12" << endl; } TEST(bob2, bab1) { cout << "inside bob21" << endl; ASSERT_EQ(3,4); } TEST(bob2, bab2) { cout << "inside bob22" << endl; } TEST_SUITE2(bob2,bob1) TEST_SUITE(bob2) int main() { try { TestRunner runner; GET_TEST_SUITE(root).accept(runner); } catch (std::exception& e) { cout << "caught exception!" << endl; cout << e.what() << endl; } return 0; } frobby-0.9.5/src/tests.h000066400000000000000000000016771401527164200151270ustar00rootroot00000000000000/* Frobby: Software for monomial ideal computations. Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ #ifndef TESTS_GUARD #define TESTS_GUARD // Include this file when writing tests. #include "test/TestCase.h" #include "test/TestSuite.h" #include "test/macroes.h" #include "test/asserts.h" #endif frobby-0.9.5/test/000077500000000000000000000000001401527164200137715ustar00rootroot00000000000000frobby-0.9.5/test/bench/000077500000000000000000000000001401527164200150505ustar00rootroot00000000000000frobby-0.9.5/test/bench/benchHelper000077500000000000000000000041021401527164200172120ustar00rootroot00000000000000#!/usr/bin/env bash # This runs a benchmark while measuring the time taken. # $1 The Frobby action to run (e.g. alexdual) # $2 The name of one or more space-separated input files # $3+ Parameters to Frobby # # The time printed is the user CPU time that Frobby took to complete # the computation. # # Parameter 2 can contain more than one file if this script has been called # as e.g. "../thisscript action "file1 file2" # # If $3 is _profile, then the warning Frobby issues on running # a profile build is not displayed. # # If $3 is _runs, then $4 must be an integer, and the benchmark will # be run that many times # # If $3 is _noDetails, then do not display what action is being taken # on which file, as is otherwise done. # # If $3 is _noOFormat, then -oformat null is not applied to # Frobby. This is useful in case the action does not support oformat. frobby=../../bin/frobby TIMEFORMAT="%1Us " action="$1" inputFile="$2" shift shift runsToMake=1; suppresProfile=0; displayDetails=1; oformat="-oformat null" changed=1; while [ $changed = 1 ]; do changed=0; if [ "$1" = "_profile" ]; then changed=1; suppressProfile=1; shift; fi if [ "$1" = "_runs" ]; then changed=1; runsToMake="$2"; shift; shift; fi if [ "$1" = "_noDetails" ]; then changed=1; displayDetails=0; shift; fi if [ "$1" = "_noOFormat" ]; then changed=1; oformat=""; shift; fi done params="$*" function runFrobby { cat $inputFile|$frobby $action $oformat $params 1>/dev/null 2>&1 } function suppressFrobby { if [ "$suppressProfile" = "1" ]; then runFrobby|sed /PROFILE/d else runFrobby fi } function timeFrobby { # Creating a subshell and using tr is the only way I know of to get # rid of the trailing newline that time appends to the end. We have # to get rid of this to put more than one benchmark time on the same # line. (time suppressFrobby) 2>&1|tr -d '\012' } if [ "$displayDetails" = "1" ]; then echo -n "$action `basename $inputFile .test`: " fi for ((run=0; run<$runsToMake; ++run)) do timeFrobby done echo frobby-0.9.5/test/bench/descriptions000066400000000000000000000002741401527164200175040ustar00rootroot00000000000000* n11d11 This is a big ideal with 27037 generators in 11 variables. It is generated from the random Frobenius problem instance in n11d11 with 11 random numbers of 11 decimal digits each. frobby-0.9.5/test/bench/edgeV90G600.test000066400000000000000000000143241401527164200175150ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63, x64, x65, x66, x67, x68, x69, x70, x71, x72, x73, x74, x75, x76, x77, x78, x79, x80, x81, x82, x83, x84, x85, x86, x87, x88, x89, x90]; I = monomialIdeal( x25*x88, x33*x59, x16*x25, x8*x38, x41*x53, x67*x77, x54*x72, x24*x27, x27*x71, x24*x70, x25*x83, x7*x53, x52*x90, x39*x77, x18*x28, x8*x57, x31*x67, x14*x48, x6*x51, x29*x67, x34*x58, x28*x51, x15*x68, x34*x52, x34*x87, x49*x67, x67*x90, x25*x37, x1*x60, x63*x75, x23*x88, x22*x33, x13*x51, x10*x64, x2*x67, x39*x90, x33*x71, x2*x28, x48*x77, x57*x70, x64*x81, x73*x74, x73*x86, x20*x51, x41*x58, x11*x55, x5*x60, x14*x35, x59*x90, x17*x24, x28*x62, x18*x84, x28*x45, x16*x69, x3*x12, x36*x89, x78*x87, x16*x59, x52*x75, x31*x88, x13*x75, x3*x54, x2*x83, x11*x88, x9*x35, x21*x51, x1*x31, x25*x72, x3*x23, x49*x74, x40*x70, x4*x69, x32*x36, x36*x38, x44*x68, x64*x71, x28*x78, x18*x75, x1*x77, x48*x83, x56*x82, x13*x20, x69*x87, x6*x65, x40*x47, x2*x48, x30*x87, x48*x58, x64*x74, x13*x89, x36*x61, x26*x58, x44*x48, x3*x57, x21*x69, x40*x65, x32*x76, x12*x66, x6*x10, x17*x72, x50*x82, x8*x23, x5*x81, x20*x67, x2*x54, x39*x76, x60*x77, x26*x74, x59*x74, x27*x46, x73*x76, x36*x78, x23*x69, x8*x58, x37*x84, x2*x65, x10*x76, x23*x82, x26*x50, x19*x70, x22*x61, x17*x55, x45*x51, x7*x32, x75*x79, x8*x41, x55*x73, x6*x31, x73*x84, x38*x62, x43*x51, x14*x16, x41*x89, x71*x73, x22*x23, x40*x90, x3*x5, x8*x82, x74*x81, x23*x84, x26*x61, x14*x19, x21*x23, x2*x6, x7*x21, x35*x40, x10*x85, x64*x80, x3*x55, x36*x84, x6*x22, x35*x45, x27*x43, x8*x26, x62*x79, x40*x86, x36*x45, x55*x83, x7*x87, x3*x72, x32*x60, x20*x48, x6*x84, x8*x35, x54*x74, x3*x46, x41*x68, x4*x6, x23*x72, x14*x43, x18*x74, x61*x74, x50*x57, x21*x71, x12*x57, x10*x36, x28*x35, x73*x75, x43*x57, x25*x33, x9*x71, x6*x43, x15*x44, x4*x57, x2*x56, x59*x68, x21*x77, x24*x73, x30*x47, x3*x85, x86*x87, x40*x57, x15*x34, x23*x51, x46*x67, x9*x43, x12*x78, x31*x38, x85*x86, x33*x72, x74*x77, x1*x41, x20*x52, x15*x27, x25*x31, x57*x63, x25*x28, x25*x61, x50*x72, x34*x57, x3*x7, x29*x34, x16*x63, x69*x81, x52*x59, x21*x76, x41*x48, x58*x59, x6*x39, x6*x63, x21*x52, x65*x78, x54*x81, x29*x89, x65*x80, x9*x63, x12*x90, x41*x62, x56*x83, x46*x82, x20*x68, x15*x42, x15*x89, x56*x58, x59*x66, x41*x42, x22*x45, x33*x63, x15*x53, x46*x75, x38*x45, x9*x56, x45*x62, x54*x60, x6*x42, x40*x41, x8*x63, x7*x63, x26*x78, x40*x85, x75*x76, x10*x23, x10*x56, x11*x66, x41*x50, x43*x56, x22*x37, x58*x78, x61*x73, x12*x85, x14*x55, x11*x20, x24*x34, x20*x27, x22*x77, x49*x56, x12*x28, x8*x20, x66*x76, x15*x22, x16*x81, x59*x89, x54*x55, x34*x35, x1*x75, x1*x33, x11*x56, x27*x57, x13*x67, x3*x51, x51*x85, x9*x27, x10*x51, x5*x20, x18*x38, x61*x70, x1*x70, x53*x84, x27*x80, x34*x37, x30*x46, x20*x35, x55*x80, x13*x43, x55*x58, x11*x43, x41*x45, x21*x89, x56*x76, x6*x12, x18*x80, x64*x83, x41*x56, x35*x84, x23*x44, x24*x90, x56*x67, x53*x68, x5*x17, x10*x78, x42*x84, x68*x84, x17*x18, x8*x75, x20*x56, x18*x69, x40*x82, x19*x84, x29*x40, x26*x85, x15*x59, x45*x72, x53*x76, x42*x53, x25*x56, x43*x80, x8*x33, x17*x54, x47*x56, x62*x84, x15*x51, x45*x63, x33*x69, x41*x46, x29*x66, x52*x83, x49*x54, x26*x87, x28*x42, x22*x43, x14*x30, x12*x51, x25*x65, x28*x58, x12*x54, x5*x40, x3*x86, x59*x71, x57*x73, x11*x38, x7*x8, x51*x68, x20*x44, x10*x79, x56*x61, x11*x12, x24*x42, x21*x63, x6*x64, x23*x34, x17*x34, x16*x36, x21*x57, x30*x79, x21*x47, x26*x88, x66*x73, x66*x75, x42*x77, x12*x25, x2*x36, x71*x85, x7*x30, x19*x89, x38*x49, x30*x81, x33*x79, x9*x79, x47*x72, x50*x77, x22*x82, x55*x76, x54*x89, x77*x81, x4*x86, x22*x36, x1*x11, x22*x31, x25*x44, x54*x82, x21*x37, x10*x80, x43*x72, x36*x69, x40*x63, x45*x89, x18*x81, x18*x54, x63*x67, x31*x42, x2*x8, x39*x89, x20*x88, x42*x56, x22*x87, x45*x57, x14*x68, x15*x43, x22*x32, x63*x65, x7*x48, x13*x65, x69*x83, x32*x64, x3*x60, x15*x57, x20*x50, x63*x87, x63*x70, x3*x32, x7*x34, x41*x60, x8*x46, x54*x69, x57*x79, x17*x48, x4*x41, x31*x58, x43*x62, x58*x66, x51*x82, x5*x24, x30*x49, x12*x67, x5*x83, x19*x54, x63*x86, x25*x36, x18*x19, x17*x80, x36*x46, x20*x82, x81*x86, x42*x64, x71*x88, x22*x84, x82*x90, x25*x81, x15*x20, x41*x84, x37*x51, x55*x86, x68*x78, x42*x76, x38*x55, x75*x78, x81*x82, x36*x41, x45*x76, x73*x79, x69*x71, x18*x25, x73*x87, x17*x32, x16*x46, x12*x43, x52*x73, x32*x62, x22*x58, x6*x88, x35*x61, x38*x87, x5*x52, x19*x76, x2*x68, x6*x54, x67*x70, x66*x78, x39*x66, x13*x35, x27*x88, x32*x37, x7*x13, x71*x74, x3*x56, x22*x27, x29*x32, x71*x83, x37*x39, x32*x35, x45*x55, x19*x41, x30*x64, x13*x90, x32*x53, x11*x71, x14*x26, x20*x39, x10*x62, x31*x66, x7*x55, x60*x84, x4*x40, x17*x50, x35*x68, x47*x50, x14*x47, x35*x66, x48*x72, x21*x66, x37*x68, x24*x32, x5*x82, x43*x66, x53*x59, x25*x45, x66*x84, x26*x65, x30*x44, x43*x53, x74*x82, x25*x66, x27*x82, x56*x70, x56*x77, x31*x65, x35*x55, x4*x81, x9*x31, x23*x29, x1*x71, x2*x87, x33*x81, x36*x54, x9*x39, x20*x66, x51*x56, x79*x85, x61*x82, x54*x71, x62*x67, x40*x52, x21*x90, x49*x52, x11*x49, x6*x11, x26*x43, x66*x77, x66*x74, x70*x79, x54*x87, x70*x84, x17*x56, x54*x80, x27*x35, x10*x28, x24*x49, x6*x50, x20*x90, x26*x30, x20*x79, x28*x29, x37*x74, x21*x38, x23*x32, x4*x13, x4*x47, x27*x33, x76*x83, x15*x26, x33*x35, x10*x41, x8*x64, x6*x21, x15*x61, x61*x77, x44*x54, x12*x48, x49*x86, x32*x39, x27*x83, x25*x62, x41*x73, x18*x85, x32*x69, x77*x80, x51*x57, x50*x54, x37*x87, x25*x73, x8*x17, x15*x80, x52*x78, x78*x83, x84*x86, x47*x60, x16*x34, x1*x2, x21*x48, x30*x74 ); frobby-0.9.5/test/bench/king9.test000066400000000000000000000062031401527164200167730ustar00rootroot00000000000000R = QQ[r1c1, r1c2, r1c3, r1c4, r1c5, r1c6, r1c7, r1c8, r1c9, r2c1, r2c2, r2c3, r2c4, r2c5, r2c6, r2c7, r2c8, r2c9, r3c1, r3c2, r3c3, r3c4, r3c5, r3c6, r3c7, r3c8, r3c9, r4c1, r4c2, r4c3, r4c4, r4c5, r4c6, r4c7, r4c8, r4c9, r5c1, r5c2, r5c3, r5c4, r5c5, r5c6, r5c7, r5c8, r5c9, r6c1, r6c2, r6c3, r6c4, r6c5, r6c6, r6c7, r6c8, r6c9, r7c1, r7c2, r7c3, r7c4, r7c5, r7c6, r7c7, r7c8, r7c9, r8c1, r8c2, r8c3, r8c4, r8c5, r8c6, r8c7, r8c8, r8c9, r9c1, r9c2, r9c3, r9c4, r9c5, r9c6, r9c7, r9c8, r9c9]; I = monomialIdeal( r1c1*r2c3, r1c1*r3c2, r1c2*r2c4, r1c2*r3c1, r1c2*r3c3, r1c3*r2c1, r1c3*r2c5, r1c3*r3c2, r1c3*r3c4, r1c4*r2c2, r1c4*r2c6, r1c4*r3c3, r1c4*r3c5, r1c5*r2c3, r1c5*r2c7, r1c5*r3c4, r1c5*r3c6, r1c6*r2c4, r1c6*r2c8, r1c6*r3c5, r1c6*r3c7, r1c7*r2c5, r1c7*r2c9, r1c7*r3c6, r1c7*r3c8, r1c8*r2c6, r1c8*r3c7, r1c8*r3c9, r1c9*r2c7, r1c9*r3c8, r2c1*r3c3, r2c1*r4c2, r2c2*r3c4, r2c2*r4c1, r2c2*r4c3, r2c3*r3c1, r2c3*r3c5, r2c3*r4c2, r2c3*r4c4, r2c4*r3c2, r2c4*r3c6, r2c4*r4c3, r2c4*r4c5, r2c5*r3c3, r2c5*r3c7, r2c5*r4c4, r2c5*r4c6, r2c6*r3c4, r2c6*r3c8, r2c6*r4c5, r2c6*r4c7, r2c7*r3c5, r2c7*r3c9, r2c7*r4c6, r2c7*r4c8, r2c8*r3c6, r2c8*r4c7, r2c8*r4c9, r2c9*r3c7, r2c9*r4c8, r3c1*r4c3, r3c1*r5c2, r3c2*r4c4, r3c2*r5c1, r3c2*r5c3, r3c3*r4c1, r3c3*r4c5, r3c3*r5c2, r3c3*r5c4, r3c4*r4c2, r3c4*r4c6, r3c4*r5c3, r3c4*r5c5, r3c5*r4c3, r3c5*r4c7, r3c5*r5c4, r3c5*r5c6, r3c6*r4c4, r3c6*r4c8, r3c6*r5c5, r3c6*r5c7, r3c7*r4c5, r3c7*r4c9, r3c7*r5c6, r3c7*r5c8, r3c8*r4c6, r3c8*r5c7, r3c8*r5c9, r3c9*r4c7, r3c9*r5c8, r4c1*r5c3, r4c1*r6c2, r4c2*r5c4, r4c2*r6c1, r4c2*r6c3, r4c3*r5c1, r4c3*r5c5, r4c3*r6c2, r4c3*r6c4, r4c4*r5c2, r4c4*r5c6, r4c4*r6c3, r4c4*r6c5, r4c5*r5c3, r4c5*r5c7, r4c5*r6c4, r4c5*r6c6, r4c6*r5c4, r4c6*r5c8, r4c6*r6c5, r4c6*r6c7, r4c7*r5c5, r4c7*r5c9, r4c7*r6c6, r4c7*r6c8, r4c8*r5c6, r4c8*r6c7, r4c8*r6c9, r4c9*r5c7, r4c9*r6c8, r5c1*r6c3, r5c1*r7c2, r5c2*r6c4, r5c2*r7c1, r5c2*r7c3, r5c3*r6c1, r5c3*r6c5, r5c3*r7c2, r5c3*r7c4, r5c4*r6c2, r5c4*r6c6, r5c4*r7c3, r5c4*r7c5, r5c5*r6c3, r5c5*r6c7, r5c5*r7c4, r5c5*r7c6, r5c6*r6c4, r5c6*r6c8, r5c6*r7c5, r5c6*r7c7, r5c7*r6c5, r5c7*r6c9, r5c7*r7c6, r5c7*r7c8, r5c8*r6c6, r5c8*r7c7, r5c8*r7c9, r5c9*r6c7, r5c9*r7c8, r6c1*r7c3, r6c1*r8c2, r6c2*r7c4, r6c2*r8c1, r6c2*r8c3, r6c3*r7c1, r6c3*r7c5, r6c3*r8c2, r6c3*r8c4, r6c4*r7c2, r6c4*r7c6, r6c4*r8c3, r6c4*r8c5, r6c5*r7c3, r6c5*r7c7, r6c5*r8c4, r6c5*r8c6, r6c6*r7c4, r6c6*r7c8, r6c6*r8c5, r6c6*r8c7, r6c7*r7c5, r6c7*r7c9, r6c7*r8c6, r6c7*r8c8, r6c8*r7c6, r6c8*r8c7, r6c8*r8c9, r6c9*r7c7, r6c9*r8c8, r7c1*r8c3, r7c1*r9c2, r7c2*r8c4, r7c2*r9c1, r7c2*r9c3, r7c3*r8c1, r7c3*r8c5, r7c3*r9c2, r7c3*r9c4, r7c4*r8c2, r7c4*r8c6, r7c4*r9c3, r7c4*r9c5, r7c5*r8c3, r7c5*r8c7, r7c5*r9c4, r7c5*r9c6, r7c6*r8c4, r7c6*r8c8, r7c6*r9c5, r7c6*r9c7, r7c7*r8c5, r7c7*r8c9, r7c7*r9c6, r7c7*r9c8, r7c8*r8c6, r7c8*r9c7, r7c8*r9c9, r7c9*r8c7, r7c9*r9c8, r8c1*r9c3, r8c2*r9c4, r8c3*r9c1, r8c3*r9c5, r8c4*r9c2, r8c4*r9c6, r8c5*r9c3, r8c5*r9c7, r8c6*r9c4, r8c6*r9c8, r8c7*r9c5, r8c7*r9c9, r8c8*r9c6, r8c9*r9c7 ); frobby-0.9.5/test/bench/n11d11000066400000000000000000000002041401527164200156740ustar00rootroot0000000000000010000000000 18543816066 27129592681 27275963647 43226644830 73514433751 74355454078 78522678316 89114826334 91314621669 92498011383 frobby-0.9.5/test/bench/n11d11.test000066400000000000000000020266151401527164200166720ustar00rootroot00000000000000R=QQ[a,b,c,d,e,f,g,h,i,j,k]; I=monomialIdeal( b^7*c^2*d^11*h^9*j^7*k^4,b^8*c^14*d^13*e*f^7*g^5*i^4*k,c^4*d^7*e^6*f^4*g^5*h*i^3*j^2*k^5,b^3*c^17*e^2*f^16*g*i*k^6,b^34*d*e*i^12*j*k^5,b^48*d^12*e*f*g^8*h^5,c^16*d^10*e^3*f^12*h^2*j^5,d^18*f^3*g^5*i*j*k^11,b^10*c^15*f^4*g*h^3*i*j^4*k^5,b^31*c^6*e^23*h^4*i^2*j,c^5*e^4*f*g*h^4*j^7*k^9,e^2*f^7*h^4*i^7*j^9,c^6*d^41*f^2*g^4*h^3*i*j^3,c^14*d^17*h^7*j^9,b^40*c^3*e^5*f^2*g^9*k^4,b^92*c^2*d^3*e^4*f^3,b^17*c^4*e^8*f^8*g^2*i^3*j^4*k^3,b^38*c^9*d^8*e^12*f^2*h^2*i*k^2,c^29*e^2*f^16*g*i*j^2,b^27*c^11*d^7*e*i^12*j^3,b^68*e^3*f^5*g^5*h*j^2,b^14*c^7*d^3*e^11*f^4*g^5*h^6,b^3*c^9*d^2*f^2*g^5*i^11*j^5,b^51*c^2*e^6*h^3*i^9,b^2*d^15*e^6*f^4*g^3*i^6*k^6,b^3*c^27*d^6*f^4*g*h*i*j^6,b^5*c^2*d^25*f^3*g^11*h*i^4*j,b^13*d^4*e^2*f^7*g^2*i*j^3*k^9,b^34*c^2*d^19*e^6*f*h*k^8,c^17*e^4*f*g*h^2*j^9*k^3,c^2*d^3*e^11*f^4*g^18*j^2,b^13*c^13*d*e^20*f^11*k,d^32*e^7*g^2*h^4*i^5*j,c^5*d^5*f^12*g^7*i*j^2*k^2,b^2*c^3*e^25*f^8*j*k^5,b^21*c^10*d^20*f^6*g^5*h^4*k,b^48*e^2*f^10*g^2*h^2*k^5,b^14*c^6*d^27*f^6*g*i*j^5,b^16*c^28*d^4*e^2*f^2*g^13*k,c^13*d^5*e*f*g^3*h*i^4*k^13,c^11*e^19*f^13*g^5,b^3*d^21*e^3*f^3*g*j^8*k^2,b^20*c^42*e^13*h^2*i,c^26*e*f^4*g^18,c^8*d^4*e^17*f^2*g^3*i^7*j^2,b^4*d^2*e^4*f*h^3*i^3*j*k^10,b^14*c^3*d^32*e^13*f*g^4*i*k^2,b^31*c^21*d^14*e^12*f^2*i,b^58*c^9*e^14*f^6*i,c^6*e^13*f^5*g^2*i^2*j^9*k,b^20*c^11*d^8*e^17*h*j^2,c^8*d^3*f^6*g^4*h^6*i^3*k^3,c*d^49*f^2*g^2*h^2*i^4*k,b^9*c*d^2*e^22*h^2*j^5*k^4,c*d^27*e^12*f^3*g^9*h,b^5*c^9*d^25*h^6*i^3*j^3,b^18*c^21*e^6*h^15,c^32*e^7*f^2*g^3*i^6*k,c^9*d^3*e^16*f*g^5*h^5*j^4,c^15*e^7*g^9*h^4*i^8,b^27*c^45*d^10*e^2*f^2,c^5*d^8*f^4*g^12*i^4*j*k^2,b^8*e*f^6*h^8*i^2*j^5,b^16*c^35*d^4*e^7*h*k^3,b^24*d^9*g^3*h^6*j^11,b^29*d^15*e^5*h^13,c^11*d^21*e^6*f^4*g^3*i^6,d^4*f^17*h^2*k^7,b^22*d*e^8*f^8*i^6*k^4,c*d^15*e^11*f*g^3*i^5*j*k^4,b^3*d^16*e^6*f*g^9*h^2*i^8,b^17*c^14*d^6*e^5*g^2*i^3*j^10,c^2*d^37*e^13*i^5*j^4,b^5*d^10*e^4*f^2*g^3*h^17,b^27*c^14*d^25*e^6*f*k^2,b^54*c^2*d^5*e^8*f^5*k^6,c^11*d*g*h^13*i^5*k^4,c^29*d^6*e^4*f*g*j^11,c^4*d^25*g^11*i^3*j^6,c^6*d^10*g^4*h^11*i^3*j^4*k^2,b^14*d^5*e^2*f^4*g^8*i^3*j^6,c^19*e^9*g*h*j^14*k,b^29*c^28*e*h^2*i^7,b^41*c^10*d^6*e^2*f^10*g^2,c^7*d^5*e*f^9*g^7*j^7,c^9*f^3*h^9*j^5*k^7,b^8*c^4*d^10*f^2*g^3*i^14,b^30*e^7*f^7*g^2*h*k^3,c^25*d^11*e*f*g^3*i^4*k^7,d^4*e^5*g^3*i^13*j^2*k,c^18*d^12*f*g^9*h^2*i^7,b^11*d^15*e^5*g^11*h^7*j,b^13*c^38*d^2*g^2*i^2*j^7,b^23*d^7*e^5*f^7*j^10,b^61*c^31*e*h^3*k^2,d^21*e^8*g*j^13,c^8*d^6*e*g^9*h^3*i^6*k^3,b^17*c^8*d*e*f^12*g^7*h^4,b^40*c^7*d^14*i^7,e^6*g^9*h^4*i^5*j^2*k^7,e^28*g*h*i^11,c^9*e^4*f^18*h*i^2*j^3,b^14*d^41*e^4*f^5*g^5*h,b^29*d^8*e^5*h*i^6*j^2*k^3,e^9*f^15*h^2*i*j^6,c^4*d^32*f^3*g^3*i^4*k^6,d^2*e^4*f^9*g^3*j^12,c^6*f*g^8*i*j^6*k^6,b^8*c^22*d^14*f^4*i^4,b^20*c^11*d^10*e*g^6*h^4*k^5,b^35*c^10*e*f^8*i^4*k^4,b^72*c^10*d^18*h*k,d^26*e^5*g^3*i^3*k^10,c^36*e^8*g^2*h^12*k,c^12*d^8*e^4*f*h*i^3*j^3*k^4,b^2*c^4*i^19*j^2*k^2,b^5*c^5*d^54*e^2*i^4*k^2,b^13*c^7*d^17*g^2*i*j^9*k^2,b^16*c^5*d^9*f*g^5*h^4*i^6*j,c^2*d^2*e^9*h^2*i^2*j^6*k^8,e^9*f^4*g^2*h^7*i^7*k^2,c^18*g^3*i^12*k^4,c^5*d^32*e^18*g^4*j,b^5*d^3*e^4*g^5*h^5*i^5*j^4,b^34*c^7*f^4*g^8*h^5*k^2,b^42*d^37*g^6*h,c^8*g^3*h*i^11*j^2*k^8,c^18*e^27*f^2*h^2*i*j,c^9*d^5*g^11*h^8*j*k^2,d^10*e^2*g*i^7*j^14,b^8*c^10*f^4*j^10*k^7,b^11*c^8*f^10*g*h^2*i^3*j^2*k,b^19*c*d^35*f^6*i^4,b^27*c^3*f^4*g^4*i*j^8,b^48*c^8*d^13*g^2*h^5*j,c^10*d^3*e^3*f^3*g^4*h^5*i^2*j^5*k,c^3*d^49*e*g^2*h*i^3*j^2,b^8*d^29*e^3*f^3*i^3*j^2*k^3,b^21*c^3*e^9*f*h^8*k^4,b^25*c^21*d^4*h*i^5*k^6,b^37*d^7*e^4*g^2*h^6*j^4*k^2,c^5*d^7*f^14*g^4*k^8,b^9*f*i^2*j^21,c^34*e^12*g^3*i^5*j^4,c^6*d^29*e^2*f^8*j^3*k^4,d^30*f^8*g^4*h^2*i^3*j,d^20*e^26*f^4*i,b^10*c^5*h^2*i^11*j^4*k,d^24*e^2*f^5*g^4*h^3*i^2*j^4,c^11*d*e^6*f*g^16*i*k^3,c^3*d^12*e^17*f^2*g*i^10,c*e^8*f^3*g^4*h^12*k,b*c^7*d^6*e*f^6*h^6*i^2*j^7,b^5*d^39*e^6*g^2*h^8,b^9*c^47*d^10*e^7*j,b^38*c^10*d^9*e^5*f^2*g^7*i^2,e^6*f^3*h^7*i*j^10,c^2*d^10*f^17*j^2*k,c^37*d^4*e^12*j^4*k,c^12*d^23*e^8*g^10*i,b^27*d^3*e^10*g^7*i*k^3,b^42*c^8*d*h^3*i^4*j^4*k^3,d^4*e^3*f^14*h*j^5*k^5,c^25*e^17*g^3*h^6*i^2,c^43*e^3*g^4*i^7*k,b^4*c*d*e^13*f^5*i^5*j^3*k^2,b^6*c^25*d^9*e^4*f^7*g^6,b^8*c^19*d^7*g*i^10*j^4*k^4,b^20*d^10*e^8*g^3*i^3*j^9,c^27*d^23*e^7*g^9,c^5*d^19*i*j^2*k^10,b^14*d^10*e^22*h*i^2*k^5,b^20*f^4*i*j^2*k^14,b^47*c^14*d^11*e^8*f^5,c^23*d^7*g*h^11*i^5,d^13*e^3*h*j^5*k^14,c^11*d^10*e^7*f^4*g^2*j^10*k,c^25*e^22*f*i^8*j^2,b^3*e^9*f*g^12*h^2*j,b^9*c^16*d^25*e^11*j^3,b^18*c^6*g*h^7*i^3*j^6,b^43*c^20*d^3*f^3*g*i^8,b^55*d^6*e^8*f^2*g^3*i*j,b^66*e^3*h^10*i*k^3,c^13*d*e^5*g*h^12*i^4*j^3*k^2,e^12*f^7*g^5*i^4*j^5,c^11*d^10*e^21*f*h*k^6,d^15*f^15*g^8*i*j^3,d^27*e^5*h^6*i^5*k^4,b*c^4*d^11*e^16*f*g^3*h^4*i^2,b^5*c^71*d^6,b^6*d*e^11*g*i^18,b^7*c*f^9*g*h*i*j*k^7,b^26*d*f^9*g^7*h^4*i^4,d^5*e^21*g^3*h^5*i*j*k^2,f^6*g*h^2*j^4*k^11,b^3*f^15*h*i^8*j^3,b^7*c^26*d^11*h^12,b^11*c^35*d^3*f^8*i^5*k,b^23*c^12*d^6*e^7*f^7*g^2*j^2,b^25*c^6*d^4*e^2*i^9*j^9*k,c^11*e*h^8*j^10*k^5,d^39*e^6*g^15*h^2,c^25*e^3*f^5*i^4*k^5,b^12*c^2*e^12*f^4*g^2*j^5*k,b^13*d^8*e*f^6*h^7*i^5*k,b^16*c^20*d^6*g^3*i^2*j^6*k^3,b^17*c^8*d^14*f*i^10*k^3,b^31*d*e^7*f^4*g^8*h^3*j^3,b^64*c^13*d*e^4*k^6,c*e^15*f^2*h*i^14*j*k,d^22*e^4*g*h^10*i^4*j^2*k,c^20*d^12*e*g^9*h*i^6*j,c^2*d^25*e^2*f^11*g^11,b*c^6*d^18*g*h^5*j^4*k^9,b^8*c^8*e^3*f^2*g^6*i^6*j*k,b^10*c^32*f^4*g^12*h,b^35*d^3*f^12*h^2*i*j^3,b^72*e^4*g^4*i^2*k^2,c^10*d^6*e^6*g^9*h^2*i^5*j^4*k,c^5*d^8*f^11*h^7*i^2*k^2,d^4*e^2*f^2*g^4*h^11*k^7,d^17*f^5*h^5*j^6,c^22*f*g^12*h^2*k^3,b^5*c^7*f*j^2*k^21,b^5*c^26*e^21*g*j^4,b^5*c^40*d^21*e*k^3,b^6*c^14*d^5*e^10*f^2*h*i^8,b^11*e^8*g^14*h^7*j^3,b^22*c^9*d^14*e^5*i^6*j^4,b^49*e^7*i^6*j^4*k,b^51*c^21*d^2*f^2*g^3,c^23*e^2*f^7*g^5*i^3*j^2*k^2,d^11*f^2*h^6*j^9*k^4,c^30*d^15*e^6*j^3*k^7,c^4*e^15*h^2*i^7*j*k^3,c^28*d^7*e^6*f*g^3*h^4*i*k,b^7*d^26*e^4*h^11*j^2*k^3,b^9*c^5*d^10*e^15*g^5*h^9,b^11*c^4*d^18*e^2*f^7*i^4*k^4,b^13*c^23*d^16*e*g^6*h^2*j,b^40*c^11*e^3*g^3*j*k^3,c^8*e^2*g^8*j^11*k^4,d^33*g^9*i^6,d^12*e^7*f^4*i^3*j^2*k^8,b^17*c^12*e^6*f^5*i^3*j^5*k^2,b^19*c^36*d^2*f^7*g^2,b^33*c^7*d^3*e*i*j^11,b^83*c^24*d^6*k,c^14*d^8*e^9*i^2*j^8*k^2,c^12*e^9*f^4*g^2*h^5*i^7,c*e^11*g^9*h^9*i^2*k,c^3*d^27*f*g^3*h^14*j,d^4*f^2*g^4*i^12*k^8,b^6*c^2*e^11*f^2*i^2*j^8*k^6,b^8*c^26*e^2*f^4*g^2*j^2*k^4,b^10*c*d^15*f^3*g^12*k^2,b^21*d^7*f^5*h^12*j,b^25*e^6*f^2*g^2*h*i^5*j^6,b^25*f^16*g^2*i^4*k,b^25*c^9*d^13*g*h^5*i^2*j^2*k^2,b^46*d^4*e^10*h^6*i^3,b^72*c^14*e^3*h*j*k^5,c^4*d^2*e^14*h*i*j^11*k^6,c^2*e^14*f*g^2*h^6*i^6*j^3,c^20*g^3*i^11*j^4*k^2,c^2*d^13*e*f^9*g^5*i^3*j*k,d^3*e^30*f^5*i*k^4,c^4*f^3*h^8*i^3*k^8,d^9*e^3*g^12*h*k^6,b^5*d^12*e^25*g*j^6*k^2,b^5*c^19*g^20*k^2,b^8*c^7*d^28*e^5*f^3*g^3*h^2*i,b^14*e^3*f^13*g^2*i^3*j*k^5,b^16*c^9*e^2*f*g^8*h^4*j^3,b^24*c^2*d^37*g^6,b^51*d^17*e^2*f*g^3*k^2,d^7*e^6*f^6*g^5*i^2*j^4*k^5,c^10*e^5*f^7*g*h*i^2*j^7,c^24*d^13*f^5*h^5*j^3*k^3,d^22*e^10*g^3*h^3*k^4,c^7*d^6*e^21*f^4*g^10*h,b*c*d^4*e^16*g^5*i^8*j^2*k^2,b*c^50*e^11*g*j*k^2,b^3*d^11*f^8*g*k^13,b^9*c^5*f*g^4*j^13,b^13*d^31*e^5*g^6*h*j^3*k^2,b^14*c^15*d^4*e^9*f*h^6,b^18*c^33*d^10*i^5*j,b^57*e^6*h^2*j^6,b^59*c^22*d*f*g^5*h^4,e^26*f*g^10*h^2*k^2,d^29*e^8*i^2*j^7*k,c^17*d^37*f^2*g^5*j,e^5*g^4*j^16*k,b*c^7*d^8*f^2*g^6*h^9*i*j^4,b^3*c^5*e^14*h^7*j^3*k^2,b^7*c^23*d^4*i^4*j^4*k^4,b^8*e^9*h^3*i^15*j^2,b^9*d^23*g^10*i^7*k^2,b^11*d^44*e^12*h^3,b^19*d^7*e^9*g^2*h^5*j^9,b^19*c^5*d^17*e*f^6*g^2*j*k^3,b^22*c^3*d^9*e*f^12*g^5*h^3*i,b^44*c^14*d^14*e^11*g^2*i^2,b^48*c^12*e^2*g^5*h^5*j^3*k^2,d^8*f^11*g^10*h*i^2*j^3,e^29*f^7*g^3*j^2*k,d^2*g^6*h^10*j^7*k^3,c^7*d^8*g*h^17*k^4,c^25*d^13*e^3*g*h^4*j^7,c^11*e^5*g^3*h^6*i^8*k^2,d*e^12*g^17*i^3,b^3*c^17*d^3*i^11*j^6,b^7*c^39*d*e^18*i^3,b^8*d^11*e^6*f^3*g^2*j^4*k^7,b^11*d^3*e^6*f^9*g^5*h^4*k,b^25*c^13*e^5*f^4*h^2*j^7*k,b^32*c^29*f^5*g^2*i^5,b^41*c^8*d^2*g*j^13,b^42*d^10*h^7*i*j^7,c^8*d^2*e^2*f*i*j^2*k^15,d*e^9*f^15*h*i^4,c^13*e^8*f^3*g^4*h^10*j^2,c^31*d^5*g^5*h^3*i^4*j^3,b^2*c^2*e^10*g^11*h^14*j,b^4*d^10*e^4*f^9*g*i^2*j^6,b^4*d^24*h^10*j^10,b^4*c*d^3*f*g^6*i^4*k^7,b^4*c^3*d^34*f^7*h^3*j^2*k^2,b^8*c^11*d^8*e^24*f^7,b^12*c^29*d^14*e^10*f^2*g*k,b^18*c^2*d^14*f^2*g^14*h^5*k,b^22*c^6*e^3*g^16*j^4,b^23*d^4*f*g^12*h*i^7,b^25*d^25*e^8*f^3*h^4,b^27*c^16*d^2*e^12*g^11*h,b^33*c*f^15*g^4,b^56*d^11*f^2*i^5*k^3,c^28*e^4*h*j^8*k^9,c^26*e^4*f*g^2*h^6*i^5*k^3,c^13*d*e^11*g^16*j*k,c^3*e^13*g^4*h^11*j^5,c^2*d*f^7*i^8*j^4*k^6,d^39*e^11*g^2*h^7*j^2,e^2*g^6*i^3*j^3*k^11,d^28*f^4*h^4*j^5*k^6,c^3*d^12*f^8*g^7*h^2*j^3,d^20*f^10*g^3*h^9*i^3,c*d^2*e^29*f^4*j^2*k^3,b^2*e^24*f^3*i^9*j*k,b^10*c^2*f^21*j^4,b^14*c^8*d^6*g^18*h^4*k,b^16*d^3*e^24*f^4*g^6*h^3,b^21*d^17*f*g^3*h^3*i^9,b^22*e^2*f^12*g^4*j^3*k^4,b^35*c^20*d^7*h*i^4*j^6,b^47*e^12*f^3*g^4*i*j*k,b^64*c^32*f^2*h,e^11*h^6*j^15,c^4*d^10*e^3*f^14*j^7,d^10*e^9*h*i^5*k^9,c^9*d^4*f^6*g^11*h*i^4,c^7*e^20*f^2*g^4*i^2*k^3,c^21*d^18*g^3*h^3*k^7,c^25*e^6*g^5*i^7*k^5,c*d^15*e^2*f^7*i^13,b^2*f^8*h^13*i^2*j^3,b^6*c^17*d^2*f^3*h^6*i^7*j^4,b^9*c^4*d^34*e^2*f^2*g*h^2*j^6,b^22*c^16*d^3*e^8*g*h^11*j^2,b^24*c^10*d*e^3*h^2*i^3*j^9*k,b^36*d^14*e^4*f^6*j^6,b^36*c^4*d^7*g^3*k^9,b^53*c^22*h^2*j^3*k^3,e^25*g^4*i*j*k^7,c^3*d*e^18*f^2*i^4*j^8,d^9*e^7*f^4*h*i^12*j^2,f^19*h^7*k^5,c^29*e^4*h^7*k^5,b*d^20*e^7*f^5*g^4*h^8*j,b^5*c^10*d^26*g^5*h*i^4*j^2,b^7*c^8*d^16*e^22*i^2*j,b^12*d^5*e^2*h^19*k,b^13*c^5*d^5*f^4*i*j^4*k^8,b^25*d*e^2*g^3*j^3*k^13,b^32*d^6*f^4*g^2*i^4*j^2,e*g^11*h^3*i^2*j^5*k^8,c^7*d^19*e^3*j^7*k^8,c^5*d^11*e^3*f^3*g^2*h^4*i^5*k^2,d^22*e^10*g^16,d^57*e*i^6,d^20*g^5*h^2*i^3*j^5,d^10*e^27*i*j^4*k^3,c^10*d^4*e^9*f*g^12*j^3,d^2*e^27*g*h^5*i^6,c^41*i^10*j^3,b^2*e^5*f*j^7*k^12,b^21*f*g^2*i^3*j^5*k^4,b^23*c^12*d^8*f^3*g^8*h^2*k^2,c^5*e^19*f^4*g^9*h^3*i,e^3*h*i^20*j*k^4,c^23*d^16*e^21*f*j^2,d^6*e^3*g^8*h^8*i^7,c^4*d^2*e^18*g^2*i^10*k^3,c^6*d^33*e^5*h^4*i^5*j^2,c^9*d*e*g^2*j^4*k^14,d^9*f^2*h^7*i*k^14,e^8*f^14*h^6*j^2,c^13*d^6*f^9*g*i*j^3*k,b^4*d^39*f^2*g^3*h*k^6,b^8*c^6*d^52*f^5*i^2,b^10*e^5*g^2*h*i^2*j^8*k^8,b^21*c^4*e^18*f^5*i^2,b^31*d^3*g^14*h^6,b^43*f^7*g*j^9*k^3,b^64*c*d^10*f*j^2*k^2,c^29*d^8*e^12*g*i^8,d^18*f^5*g^5*j^3*k^11,c^6*d^11*e^21*g^3*h^3*i*j^3,c^20*d^35*e*g^2*h^7,c^3*f^6*g*j^6*k^5,c*f^12*g^4*h^5*i^5,d^9*e^24*f*g^4*i*k^6,c^4*e^21*g^12*i^3*k^2,d^38*f^8*g^2*h*i^6,b*e*g^8*h^4*j^5*k^10,b^5*d^9*g^4*j^12*k^3,b^8*d*f^6*g^7*h^3*i^3*j^4,b^10*e^23*f^2*h*i*j^3,b^10*c^8*d^15*e^3*h^5*k^4,b^13*c^6*d^7*e^3*f^6*g^2*h^10*i^3,b^14*c^12*e^9*g*i^6*j^4*k^2,b^15*d^5*h*i^14*k^2,b^16*c^36*d^5*g^7,b^28*c^13*d^8*e^9*g^9*h*j^3,b^29*c*d^16*g^5*h^8*i,b^31*d^14*i^12*j^4,b^41*c^14*d*i^3*k^10,b^53*d^4*h*j^5*k^6,c^23*e*h^6*j^12,c^3*d^25*f^13*g^10*i,d^5*e^26*g^3*h^4*j^6,c*d^15*e^18*f^9*g^3*k^3,e^4*f^3*g*h*j^9*k^9,d^32*e^2*f^5*g^2*h^2*i^5*k,c^37*d^3*e^3*f^5*i^4*j^2,f^3*g^7*h^4*i^2*j^7*k,b*c^8*e^19*f*g^6*h^4*k^2,b^2*d*e^8*f^3*g^2*h^11*i^2*k^2,b^3*c^4*d^22*e*j^9*k,b^3*c^7*d*e^6*f^8*g*i^4*k^9,b^3*c^16*d^15*i^2*j^3*k^10,b^6*c^2*d^14*e*f^6*h^5*i^5*j,b^18*d^10*e^3*g^5*h^9,b^18*c^40*g*h^11,b^20*e^32*h^7*k^3,b^22*d^23*g*h^3*i^3*j^7,b^24*c^19*g^13*i^2,b^45*e^5*f*g^2*h^7*k^4,b^57*c^25*d^7*e^4*j,e^2*f^9*h*i^6*j^11,c^11*d*f^11*g^6*h^3*j^5,c^15*d^5*f^4*h*i^11*k^3,c^2*d^16*e^4*f*g^10*i^6*k,c^2*d^37*e^20*f^3*j,d^16*e^6*h*j^12*k^5,c^4*e^17*f*g^2*j^10,c^18*d^24*g*h^3*j^6*k^3,d^8*e^6*f^3*h^6*i^4*j^4,c^6*d^32*f*h^10*i*k^3,c^2*e^17*f^7*g^5*h^4*i*j^2,c^16*d^16*f^5*g^4*h^8,c*e^4*f^14*i^11*j,b*c^34*d^22*g^5*h*i^3,b^21*c^6*d^4*f^3*h*j^6*k^7,b^26*f^2*i^9*j^5*k^5,b^28*c^22*d^2*f^4*g^2*i^3*k^3,b^30*c^20*e^14*i*k^6,b^38*e^3*f*h^2*i^2*j^10*k,b^42*e^23*h^2*j^3*k^2,d^41*f^4*g^4*j^5,g^31*j*k,c^6*d^10*e^2*f^2*g^4*h^9*j*k,f*g^2*h^5*i^13,c^22*d^6*e^17*j*k^6,c^34*f*g^12,c^26*d^11*e^10*f^2*i^8,d^21*f^8*g*j^5*k^4,b*c^5*e^2*f^15*h^3*i^2*j^2,b^2*c*d^19*g^7*h^7*j^7,b^4*c^4*d^19*e^18*f^6*k^5,b^8*c^8*d*e^24*f^3*g^2*j^3*k^3,b^13*e^4*f^6*g*h^7*j*k^5,b^17*d^3*f^9*h*j^8,b^17*c^12*f*g^2*i^2*j^2*k^7,b^21*d^12*e^22*f^4*i*j^2,b^25*d^18*e^8*g*i^6*j^3*k,b^27*c^15*d^26*f*g^7,b^29*g^4*h^5*j^7*k^3,b^36*c^5*f*g^8*h^3*i^5,b^54*c^3*d^6*e*f^5*g^4*k^3,b^55*d^4*h^6*i^9,c^19*d*g^2*h^5*i^3*k^9,c^2*d^17*f^2*h^4*j^11,e^2*g^2*h^6*i^12*j^3*k^3,c^24*e^4*g^12*h*j^3*k,e^29*f^4*h^7*i^2*j^2,c^16*d^5*e^15*i^7*j^3,d^7*e^3*f^11*g^4*h^4*i^4*k^2,d^5*e^2*g^10*h^13*j^2,d^5*f^4*g^9*i*j^7*k^4,c^5*d*e^17*g^4*h^4*i^2*j^2*k^2,b^6*c^2*g^2*h*i*j^5*k^11,b^9*c^2*d^13*f^10*h^11*i,b^10*d^6*e^27*f*j^5*k^3,b^13*c^6*f^7*g*i^9*j^4,b^15*c^18*d^9*f*h^2*i^4*k^5,b^16*c^5*d^20*e^4*g^7*k^3,b^19*c^3*d^12*e^4*f^4*g^10*i^4,b^21*c^46*g*i^6*k,b^25*g^8*h^4*i^4*j^3*k^3,b^31*c^4*d^4*e^4*f^11*i^4*j*k^2,b^43*e^6*f^2*g^4*k^7,b^47*d^13*f^5*i^2*j^7,b^68*c^4*d^28*e^3,b^77*h*i^5*j^3,c^2*g^8*h^9*i^5*k^5,c^4*d^27*f^3*g^2*h^14*j^2,c^30*d^7*e^11*g^3*h^3,c^27*f^6*g*j^3*k^8,d^22*f^13*g^6*h*j^4,d^5*e^14*f*g^4*k^9,c^2*d^36*e*f^7*h^3*k^4,c^6*d^18*e^7*f^4*i^3*j^4*k^2,d^10*e^3*f^2*g^7*h^3*i*j^9*k^4,c^4*f^5*g^3*h^5*j^8*k^4,d^7*f^7*h^12*j^2*k^4,b^2*f^4*g*h*i^8*j^7*k^2,b^4*c^8*d^3*e^2*h^3*i^3*j^2*k^9,b^4*c^20*f^6*g^7*h^3*i^2*j,b^6*e^18*g^4*i^9*j*k^3,b^6*c^18*e^13*f^2*h*k^3,b^8*d^6*e^9*f*g^10*h*i^3*k,b^9*c*d^27*e^2*g^3*i*j^10,b^11*c^10*e^8*f*i^16*k,b^18*g^4*i^6*j^13,b^22*c^13*e^8*g^3*j^6*k,b^23*c*d^4*h^6*i^6*k,b^24*c^37*d^4*g^9*h,b^31*c^29*d^15*e^10*i,b^50*f^2*h^4*i^6*k^5,d^9*f^2*g^11*h*i*j*k^10,d^12*e^12*f*i^2*j^7*k^6,c^3*d^18*g^2*h^9*i^5*j^3*k,c^12*d^10*f^2*g^4*i^12*k^2,f*g*h^2*i^7*j^10*k^6,c^10*f^3*g^7*h^4*i*j^4*k^4,c^22*d^5*h^6*k^11,c^14*e^11*f^2*i^2*j^10,c^2*d^2*f^4*h^3*i^10*j^4,b*d^44*f^7*h*j^7,b*c^3*d^37*g^5*i^2*j*k^2,b^2*c^26*d^10*f^6*h^5*i^4,b^6*d^19*e^16*f*g*h^3*i^5,b^9*d^16*f^3*j^3*k^14,b^12*e^2*h^7*i^5*j^3*k^5,b^14*c^3*d^13*f^5*h^10*j^3,b^16*d^11*h*i^8*j^10,b^20*c^19*d^9*e^15*h*j^3,b^30*c*d*f^7*g^9,b^45*c^9*f^4*h*i^2*j^4,b^66*e^12*h^2*i^3*j,e^17*f^4*g^3*i^6*j^2*k^4,g^7*h^5*j^7*k^8,e*f^3*g^24*h^3,c^6*f^3*g^3*i^3*j^14*k,e^10*f^8*h^13,d^31*g^5*h*i*j^4*k^6,d^15*e*g^2*h^4*i^12*j^2*k^2,c^16*d^4*f^3*h^6*i^3*j*k^2,c^3*d^15*e^3*g^12*j^2,d^23*f^2*g^8*h^6*i^6,c^20*e^2*i^11*j^6,c^9*d^50*h^2*i^4,b*d^2*f^6*h*i^3*k^12,b^3*d^7*e^5*f^2*h^11*j^6,b^3*c^5*g^5*h^10*k^7,b^7*e^11*g^2*i^4*j^11,b^7*c^2*e^3*f^13*g^2*i^3*j^3,b^7*c^11*d^13*g*h^4*i*j^7,b^9*c^21*e^2*f*g^8*h^2*j^5,b^12*c^7*e^20*h^7*i^4,b^26*d^30*f^3*i^4*k^4,b^34*f*h^2*i*j^7*k^4,b^36*c^9*e^4*f^5*g^5*j^5,b^38*c^21*e^13*h^2*k^5,b^55*c^4*d^8*h^7*k^3,b^71*d^3*e^4*f^5*j^2,c^4*d^13*e^6*f^6*g^5*i^2*j^6,d^15*f^22*h*j^2,c^6*e*h^7*i^2*j^4*k^6,c^9*d^28*e^10*g^3*h,e^8*f^10*g^2*i^2*j^6*k^3,c*d^7*g*h^5*j^10*k^4,g^4*h^10*i^5*j^2,b*e^25*h^8*i^3*j*k,b^13*c^24*f^9*h*j^5*k,b^15*d^24*e*h*i^3*j*k^8,b^15*d^18*f^8*g^7*h*i^2,b^17*d^8*e^12*f^4*k^2,b^21*c^10*d^4*e^6*g*i^6*j^8*k,b^21*c^15*d^14*g*i^5*k^4,b^32*c^5*d^6*f*h^4*i^3*j^4*k^2,b^33*d^17*e^7*g^3*j^5,b^34*c^15*e^11*f^5*h^2*j^2,b^51*d^7*f*h^7*i^6*j^2,c^12*e^10*f^4*g*i*j^12,c^26*d^13*f^2*h^4*j^8*k,d^22*e^15*g^3*h^2*j^2*k^2,c^40*d*e^5*i^6,d^11*f^5*g*j^5*k^11,d^3*f^11*g^4*h^4*i^3*k^5,d^6*h^5*i^7*j^12,c^12*d^30*f^8*i*k^5,c^17*d^4*e^14*h^5*j^5,c^5*d^12*e^3*h^12*i^7,b^2*c^14*f^6*h^2*j^8*k^5,b^4*d^12*f^5*g^7*h^2*i*j^3*k^3,b^5*c^12*f^12*h^7*i^3,b^6*d^2*e^17*f*j^2*k^6,b^6*f^9*g^14*j,b^8*e^28*f^5*g^7,b^11*e^12*i^15*j*k^4,b^13*d^7*e^10*f^10*i^7*j,b^13*c^3*e^3*f^2*g^4*i^9*k^2,b^23*c^5*e^16*f^2*h^3*j^5,b^24*c^6*d^19*e^3*g^9*j^2*k^2,b^29*c^47*g^3,b^30*c^21*e^2*f^3*h*i^9,b^48*c^28*d^5*e^6*h*i^2*k,c^32*d^5*g^4*h^3*i^7*j^4*k,c^7*d^45*f*g*h^6*i^3,f^8*g^4*h^5*i^2*k^9,c^3*g^10*h^14*j^2*k^4,c^2*d^24*f^5*h*j^2*k^9,c^7*e^19*h^6*j^8,c^12*d^8*e^11*f^9*k^3,d^6*e^8*h^13*i^6*j^2,c^5*e^19*f*g^2*h^11*i^3,c^19*d^14*g*h^15,c^25*d^4*e^5*i^3*j^9*k^2,c^4*e^6*f^8*i^13*k,d^23*e*g^10*i^6*j^4,c^2*f^9*h^8*i^2*j^3*k^3,c*d^4*e^13*g^6*h^3*k^8,d^12*f^7*g*i^2*k^15,c^20*d^6*f^6*h^4*j^5*k^3,b*c^7*d^17*e^6*f^3*g^2*j^6*k,b^2*e^8*g^4*i^8*k^6,b^2*d^25*f^5*h^4*i^3*k,b^4*d^15*e^24*f*h^2*i*k^4,b^4*c^17*d^2*f*g^10*h*i^2*k^4,b^6*d^7*e*f^2*i^11*j^5,b^6*c^48*f^5*i^2*j^4,b^8*c^13*d^52*f^2*i*j^2*k,b^10*f^3*g^3*h^6*j^9*k,b^10*c^21*d^5*e^21*i^3,b^14*c^19*e^12*f*g^2*h^6*j^2*k^2,b^18*d^34*g*h^2*i*j^6,b^19*c^11*e^7*h^2*i^8*j,b^20*d^18*e*f^3*g^8*j^4,b^21*c^11*e^23*f^2*h^5*i*j^2,b^22*c^12*d^32*e^10*h^2,b^31*e^8*f^13*g^2,b^31*c^2*d^3*g*h^11*j^2,b^35*c^11*f^8*g^3*i^5*k,b^49*d^12*e^12*f*k^4,b^56*c^16*d^10*f^2*g*i^3,b^64*c^18*g^6*j,b^99*g*i*k^2,d^39*g*h^7*i^2*j^3*k,c^5*e^22*g^14*i^4,c^2*d^2*e^16*f^6*j^3*k^7,c^9*d^8*e^4*g*h^16*k^2,c^20*d^8*e^2*f*i*j^4*k^9,c^6*d^7*e^9*f^15*i^4*j^2,c^18*e^2*f^7*g^3*i^6*k^3,d^19*f^2*h^5*i^2*j^3*k^5,d^3*e^11*f^6*g^5*h^3*j,c^3*d^46*e^2*h*j^5*k^5,c^13*d^9*f*g^6*i^4*j^2*k,c*d^17*f^3*g^2*h^3*i^12*k,g^3*h^7*j^12*k^5,c^11*e^26*i^2*j*k^4,b*d^49*e^9*f^2*g^3,b^3*f^3*h*i^2*j^19,b^4*e^6*h^14*k^6,b^8*c^3*d*f^3*h^8*i^2*j^6,b^9*d^12*e^6*g^8*h*j^7,b^14*c^31*f^2*g^2*i^4*j^5,b^16*d^16*e^10*i^8*j*k^2,b^16*c^43*d^5*e^5*h*k^2,b^20*e*g*h^12*j^5*k^4,b^24*d^10*h^6*j^12,b^24*c*f^5*g^3*i^4*j^2*k^5,b^29*c^8*d^16*e^3*h^13,b^41*c^19*f^6*i^4*j^5,b^45*d^11*e^10*f^7*j,b^45*c^6*d^4*e^3*g*i^2*k^4,b^56*e^5*f*h^11*k^2,b^62*c^24*e^2*h^2*i^2,c^8*e^7*f^4*g^3*i^5*k^7,e^16*f^3*g^5*h^4*j^4*k^3,c^5*d^34*f^4*h^2*j^7,c^52*f*g^2*j^4*k^5,d^11*g^2*h^4*i^11*k^5,c^13*e^13*f^2*g^13*j^3,c^15*d^17*e^11*k^12,c^27*d^11*g^12*k^3,c*d^16*e^18*f^6*h^5*i,c^19*d^22*e^4*f*i^6,d^5*f^14*h^2*j*k^6,d^14*g^4*h^9*i^4*j^4*k,c^3*e^15*f^4*g*h^7*j^7,b^3*c^26*f^13*g^2*i^2*k^2,b^4*c^9*f*h^7*i^11*j^2,b^5*d^4*g^12*i^6*j^3,b^7*d^25*e^13*h^3*j^4,b^13*e^4*f^2*g^3*i^3*j^5*k^9,b^13*d^14*f^8*j^7*k^4,b^13*c^5*d^7*g^2*j*k^13,b^16*d^6*f^14*h^5*i^3,b^18*d^10*e^8*h^14*j^2*k^2,b^23*c^3*d^27*e*g^7*j^4*k^2,b^24*c^31*d^10*f^7*k,b^32*f^2*g^9*i^6*j^3*k,b^32*d^8*g^8*h^2*i^3*k^5,b^38*c^2*d^11*e*i^4*j^5*k,c^2*e^5*f^10*g^2*i^12*j,d^28*f*h^3*j^10*k^4,c^17*d^5*g^12*j^2*k^7,e^7*f*g^9*h^3*i^7*k^3,d^20*f^7*g^3*h^8*i^2*j^2,d^10*e^23*f^3*h^6*j*k,c^11*d^26*f^2*g^4*h*i^7*j^3,c^9*d^16*e^9*i^5*j^2*k^3,e*f^11*h^3*j^4*k^10,c^33*d^24*g^3*h*k,c^7*h^12*j^6*k^5,c^5*f^5*g^3*h^17,c^16*f^10*g^2*i*j^3*k^6,e^2*g^12*h*i^5*j^6*k,d^12*e^11*g^4*h^3*j*k^8,d^43*h^8*j^3*k^3,c^10*d^6*g^18*h^3,c^10*d^27*e^9*g^5*h^6*j,d^35*f*g*h^13,c^9*d^35*f^6*i^2*k^4,b*c^27*e^8*h^2*i^5*j^5,b^2*d*g^2*j^4*k^17,b^2*c^28*d^33*g^6*j^2,b^3*c^2*d^17*e^4*g^3*h^2*i^8,b^7*g^6*h^15*j^4,b^8*c^11*f^4*g^5*j^9*k^4,b^9*d^6*f^6*g*i^7*j^3*k^4,b^11*d^27*f^8*h^2*j^4*k^2,b^13*c^7*e^22*f^6*g*i^2*k,b^13*c^21*d^4*e^2*f^4*k^5,b^23*f*g^15*h*k^3,b^25*d^7*e^11*f^3*g^2*h^4*j*k,b^29*c^16*d^13*g^3*j^2*k^3,b^30*e^6*f^2*i^8,b^30*c^39*e*f^5*h^2,b^75*f^2*g^6,e^5*f*g^5*i^9*j^10,c^36*f^4*g*j^9,c^11*d^4*f^3*g^11*i^3*j^4,c^9*e^25*g^4*i*j^3*k,c^23*d^18*e^5*g^3*h^2*k^5,c^6*d^6*f^19*h^5,c^13*g^4*h^11*i^3*j^2*k^5,d^29*e*f^3*i*j^3*k^8,d^11*e^9*g^3*h^3*i^7*j^3,c^41*e^4*h^5*j^2,e*f^8*h^7*i*j^5*k^6,c^2*e^20*g^10*h*i^4*j,f^3*g*i^6*j^6*k^8,f^7*g^8*i^3*j^4*k^2,c*d^14*h^2*i*j*k^15,b^2*c^11*e^7*f*k^9,b^4*d^17*e^3*g^10*i*k^7,b^5*c^6*d^11*e^2*h^17*j,b^6*c^17*d^11*f^4*i*j^6*k^2,b^8*d^30*f^3*g^6*i^4*j,b^9*c^15*d^3*f^10*i^6,b^15*d^9*e^5*f^2*h^12*k^5,b^16*f*g^11*i*j^10,b^19*e^11*h*i^7*j^3*k^3,b^21*c^4*e^2*f*g^6*h^3*i*k,b^31*d^4*e^12*f^12*g^2*k^2,b^32*e^4*f^3*h^15*j,b^35*c^24*e*h*j^8*k,b^37*d^8*g^9*h*j^3,b^56*d^25*e^2*f*g*i^2*k^3,c*e*g^11*h*i^2*j^7*k^2,c^17*d^17*e^3*f^3*g^2*h^2*i^5*j,f^16*h^6*j^3*k^3,c^14*d^6*f^11*i^4*j^4*k^5,c^19*d^2*h^13*i^5*k^3,c^6*d^13*e^5*g^9*h^6*k,c^37*d^7*e^2*j^12,d^3*g^7*h^2*i^16,d^9*f^10*g^2*h^4*j^9*k,c^3*d^2*f^2*g^7*h^3*j^3*k^10,c*e^12*h*j^2*k^13,c^7*d^5*e^5*f*j^9*k^6,c^5*e^5*f^7*i^5*j,b^2*c^23*d^3*f^2*i^10*j^2*k^2,b^10*e^7*g^6*h^4*k^5,b^14*d^6*f*g^2*i^3*j^7,b^15*c^35*h^2*i^7*k^3,b^16*e^29*i*j^6*k,b^16*c^3*d^6*e^21*f^11*k^4,b^18*c^22*d^4*e^20*g,b^27*c^17*f^13*g^2*k^2,b^41*e^2*f^5*i^3*j^7*k^2,b^43*c^12*f^7*g^5*j,b^62*d*e^6*h*i*k,c^7*d^11*e^8*g^2*h^3*i^4*j^4,d*e^3*i^20*j^3,d^57*e^6*i^5*j,c^14*f^12*g^7*j^5*k^3,c^7*d^30*f^8*g^5*i*j^2*k,c^30*d^3*f^15*i^3,d^2*e^32*g*h^4*i^5*j,e^10*f^4*h*i^4*j^4*k^4,c^9*d^15*f^2*h^5*i*k^8,c^19*e*f^6*g^5*h^3*k^2,c*d^4*e^3*f^7*i^7*j^11,d^37*e^8*i^5*j*k^2,c^12*d^45*f^2*g^3,b^3*e^5*g^2*i^2*j^10*k^2,b^3*c^39*f*h*j^9*k^2,b^5*c^14*d^8*g^8*h*j^4,b^6*c^2*d^16*f^2*g^4*h^8*i^4,b^6*c^37*f^7*g*h^6*j,b^7*d^27*g^18*h,b^7*c^12*e^25*g*j^3*k^3,b^8*e^34*h^2*i^5*j,b^10*c^6*g^6*i^12*j^3,b^10*c^10*e^25*f^2*g^4*h^4,b^16*c^7*e^3*f^10*g^2*h*k^6,b^20*c^13*f^13*i*j^5,b^24*d^15*e^9*h^4*j^3*k,b^24*d^25*e*f^6*k^4,b^28*c^4*d^7*e^7*f^3*g^2*i^7*k^2,b^30*d^4*h*j^6*k^10,b^32*c^2*f^4*g^5*j^4*k^4,b^41*c^18*d^7*f^7,b^51*e^11*h^2*j^3*k^5,d^9*h^6*j^3*k^12,c^9*e^6*f^3*g^5*h^4*j*k^6,e^8*f^4*i^6*j^14*k,c^15*d^6*f^6*g*j^8,c*e*f^2*g^3*i^13*k^4,d^25*f^5*g^11*i^3*j^3,c*d^4*e^17*f^4*h^3*i^6*j*k^2,c^13*f^12*g^4*h^3*i^5,d^15*e^24*f*g^4*i*j^2,c^2*d^39*e^4*g^3*k^4,c^8*d^52*f^2*i*j^5,d^4*e^4*f^4*g^3*h^16*k^2,c^17*h^9*j^6*k^6,c^4*d^2*e*g^8*h^2*j^7*k^4,e^10*f*g^5*h^5*i^6*j^5,d^10*g^4*h^9*i^3*j*k^4,c^2*e*f^3*g^11*h^7,d^5*e^8*g^25,b*d^13*e^12*h*i^4*j^7,b*c^8*d^6*e^5*i^6*j*k^9,b*c^20*g^12*i^5,b^3*c^6*e^23*f^2*i*j^5,b^3*c^20*d^21*e^3*h^3*j,b^5*d^40*g^9*h^3*i,b^8*c^12*d^11*i^14,b^9*c^3*e*f^10*j^8*k^3,b^11*c^27*f^12*g^4*j^2*k,b^12*c*e*f^16*g*h*i^5,b^12*c^10*h^12*i^3*j^4,b^12*c^15*d^2*f^14*h^5*i^2*k,b^13*d^19*e^6*f^3*k^8,b^13*d^3*g^14*h^5*j^5,b^17*d^32*f^6*i*j^5*k,b^19*c^18*d^9*e^3*f^2*g^8*k^4,b^20*c*d^7*g^4*h^3*i^9*k,b^30*d^12*e^10*f*i^7*j^2*k^2,b^30*c^8*d*e^5*f^4*h*j*k^2,b^32*d^20*e*f^3*g^6*h*i,b^34*c^26*d^7*i^3*j^2*k^4,b^46*c^3*d^10*j^7,b^51*e^29*h^2,c^5*e^4*f^3*g*j^11*k^3,c^3*e^4*f^9*g^4*h^4*i^4*j^3,c^17*d^16*f^7*g^3*h^8*i*k,c^33*d^12*i^4*k^6,d^38*e^2*f^5*g^2*i^5,c^43*e^10*f^2*g^4*i,e^6*g^11*h^8*j^2*k^2,d^17*h^4*i^5*j^11*k,d*f^3*g^7*h^2*i^2*j^9,e^28*j^8,c^10*d^15*e^8*h^4*j^4*k^2,d^23*h^11*i^5*k^2,d^34*e^4*g^9*h^4,c^20*e^19*f*g^6*h^2*j^2,c^8*d^7*e^8*f^3*g^2*h^9*i^2,c^16*d^28*e*j^11,c^19*d^7*e^6*f^8*g*i^4*j*k^3,c^2*d^5*e^3*i^13*j^3,c^51*h^2*i^4*j^2,c^3*d^61*e^6*j,c^17*f^9*g^4*j^5*k^5,b*c^5*f^11*h^6*i*k^5,b^2*d^13*e^11*j*k^12,b^2*e*g^14*h^6*j^8,b^2*d^7*f^8*g^14*k^3,b^3*c^15*f^15*g^7*h^4,b^9*d^18*e^4*f^9*i^5,b^9*d^11*f*g^4*i^7*k^8,b^17*e*f^7*g^4*i^2*j^9,b^17*d^5*f^5*g^3*h^4*j^5*k^3,b^21*d^14*e^6*g^6*h^2*k^4,b^21*c^8*e^21*f^5*g^3*j^2,b^21*c^22*d^3*e*f^3*g^2*h^4*k^4,b^22*c^5*d*h^18*k,b^26*c^2*e^3*f^10*h*i^5*j^3,b^26*c^14*f^2*i^7*k^2,b^27*c*d^4*e^3*g^14*i^2,b^38*e^5*f*g^2*h^5*j^2,b^38*d^6*f^15*g^2*k,b^60*c^7*d^11*e^7*k^4,c^35*f^3*g^11*i^2*j*k,d^32*e^7*f^2*g^2*h*i^4*j^3,d^56*g*h^5*i*k^3,e^4*g^7*h^3*i*j^12,d^5*f^14*g^7*j^4*k^2,d*e^13*g^2*h^10*i,c^6*d^22*e^6*j^14,c^9*d*e^11*f^5*g*i^3*j^4*k^7,c^4*d^14*e^6*f^3*h^4*i^4*j^6,c^16*d^7*g^3*h^3*i^6*k^2,f^8*h^7*j^2*k^9,c^26*e^10*g^10*h*i^3,c^8*g*i^22,d^12*e^9*f^6*i^4*j^3*k^3,c^35*f*k^12,c^6*e*h^15*i^4*j^4,e^13*f^2*g^11*i^3*k^6,d^20*f^8*g^5*h*k,b^4*c^2*d^2*e^6*f^5*g^7*i^6*j^2,b^8*f^6*g^10*h^3*j^6*k,b^14*c^18*d^10*f^3*j^8*k,b^15*e^8*f^7*h^2*i^4*j^6,b^15*d^4*f^21*i^3,b^15*c^4*e*h*i^6*k^6,b^16*d^29*f^2*g^8*j^3,b^17*c^16*d^2*f^9*g*h^4,b^17*c^28*f*g^6*h^3*k^4,b^19*c^10*f^2*i^9*j^7,b^23*c^32*e^14*i,b^27*e^10*g^2*h^6*j^5*k^2,b^27*e^2*f^12*g^2*k^5,b^29*c^5*e*g^8*h^8,b^31*d^3*e^3*f*i^2*j^12,b^31*g^3*i^4*j^6*k^4,b^33*c^23*d^4*g^9*h*k^2,b^35*c^9*d*e^23*j^5,b^44*c^4*e*f^13*h^2,b^52*c^4*d^11*g*h^4*i^2*k^3,b^81*c^4*d^6*f*h^5,d^18*e^3*f^14*i^2*j,c^6*d*e^4*g^3*h^4*i^5*j^3*k^6,c^8*d^32*h^9*j^5*k,c*d^3*f^8*h^9*i^2*k^7,d^14*e^5*f^5*g^5*h^2*k^5,d^4*e^34*f*k^8,e^16*f^9*g^12,c^31*d*f*j^6*k^9,c^6*d^20*g^6*i^2*j*k^7,c^17*e^2*f^15*h*i^2*j^4,c^29*f^7*i^4*k^3,c^2*d^2*e^20*f^2*g^2*i^5*k^4,b^3*c^8*d^4*e^4*j^11*k^5,b^4*e^5*f^18*i^2*j*k^4,b^4*e^6*h^2*i^5*j^3*k^10,b^4*d^12*f^2*h^7*j^5*k^5,b^4*f^10*i^4*k^13,b^5*d^23*g^8*j^6*k^3,b^6*c^6*e^4*f^6*g*h^5*j^3,b^8*i^8*j^10*k^3,b^10*d^5*e^29*f*g^4*h^3,b^10*c^24*d^2*f*g^2*i^2*j^4*k,b^12*d^21*g^12*i^5,b^14*d^42*e^2*f^2*h,b^14*c^46*e^10*g*k^2,b^16*e^7*f^9*g^2*k^9,b^19*g^4*h^16*k^4,b^20*f^4*g^3*i^2*j*k^11,b^22*c*d^5*g^4*h^3*j^9,b^23*e*g^6*h^5*i^8*j*k^2,b^23*d^13*f^2*h^10*i^3*j^3,b^25*d^3*e^17*h^8*i*j^2,b^27*g^2*i^11*j^8,b^29*c^5*d^9*e^3*h*i^6*j^3*k^2,b^41*d^22*e^4*f^6*k,b^58*c^3*e^16*f*i^3*j,b^74*c^12*d^6*j^3*k^2,e^3*g^28*k,c^31*d^7*g^2*h^3*i^3*j*k^3,c*d^5*e*f^3*g^3*i^3*k^13,e^2*g^2*h^4*i^12*j^5,c^7*e^7*f^12*h^2*i*j^7,c^19*f^4*h*i^3*j*k^7,d^6*f^3*g^9*h*i^6*k^5,d^9*e^18*f^2*i^7*j^2*k,c^12*d^33*i^4*k^5,c^22*d^17*e^9*f^4*g^4*i,f^5*h^13*i^4*k^3,d^9*e^5*f^2*g^11*h^6*j*k,e^15*g^3*i^4*j^11*k,c^2*d^3*e^2*f^6*j^13,c^14*g^2*i*j^7*k^5,e^4*f^2*h^2*i^12*j^5*k,c^2*d^4*h^6*i^9*j*k^5,b*d^15*g^12*i^4*j^2*k^3,b^2*c^2*d^25*f^2*h^9*i^2*j^2*k^3,b^2*c^12*f^4*g^5*h^4*i^6,b^3*d^36*e^7*h^2*j^3*k,b^3*e^2*f*g^19*i,b^4*c^12*d^9*e^11*f^6*h^7,b^5*d^20*e^18*f^3*g^6*j,b^8*c^30*d^15*f*i^4*j,b^9*c^17*d^26*e^4*g^7*j^2,b^10*c^5*d^34*g^3*i^7,b^12*c^19*f^18*h^2*j,b^14*e^4*f^3*g^7*h^9*j^4,b^15*d^12*j^19,b^16*c*d^5*e^13*h^11*k^2,b^16*c^32*h^2*i*j^10,b^20*c^10*e^11*f^8*g*i*k^3,b^20*c^19*d^11*h^4*k^4,b^25*c^11*d*i^15*k^2,b^26*c^2*f^2*i*j^7*k^9,b^36*c^5*d^6*e^6*f^2*g^4*j^2*k,b^37*d^14*f^4*i^7*k,b^49*c^17*e^12*g^4*k^2,e*g^9*h^2*i^5*k^9,d^5*e^28*f^6*g^3*h^3*k,c^39*d^2*f^6*g*j^5*k^2,c^13*f^10*h*i^10*j^3,c^2*d^27*e^3*i^3*j*k^9,c^12*d^11*e^14*f*g^4*k^3,c^4*d*e^9*g^2*i^16*k,e^7*f^3*h*j^16,f^23*i^2,c^2*f*g^5*h^5*i^5*j^2*k^3,c^2*d^3*e^16*f^3*h^8*j^3*k,d^22*e^12*f^2*g^2*h^8*i,c^20*d^9*e^2*h*i^3*j^4*k^3,c^30*g^13*i^7*j,d^28*g^3*h*i^6*k,c^30*e^13*f^2*j^2,b*d^49*e^14*h^4,b^4*d^6*e^2*j^22,b^5*c^3*f^2*g^13*h^12*j,b^5*c^22*h^3*j^13*k^3,b^9*e^16*f^5*g*k^7,b^12*d^4*e^11*f^3*h^11*i*j,b^13*c^15*d^18*i*j^10*k,b^16*c^13*d^10*h^4*i^6*j^2,b^17*c^4*f^9*h*j^10*k^2,b^26*d^8*f*i^6*k^5,b^28*c^2*d^6*g^6*h^8*i*j,b^34*c^11*d^19*e^13*f^2*i,b^38*d^11*e^9*g^2*h^4*j^4*k,b^43*c*f^2*h^2*i^6*j^2,c^4*d^15*f^2*g^11*i*j^3*k^4,c^8*d^18*e^12*f*i^2*j^9,e^4*f^20*i*j^3*k,d^7*f^4*h^11*j^7*k^2,f*g*i^7*j^12,d^22*e^3*g^3*h^2*i^5*j^2*k^5,c^20*e^18*j^5*k,c^34*d^11*h^4*j*k^5,c^8*e^7*f*h^7*i^7*k,d^6*e^14*g^10*i^2,d^37*e*f^4*g^4*h^5*j^2,c^44*e^9*f*g^6*h^2,c^26*d*i^12*k^3,c^4*d^9*e*k^15,c^4*d^10*f^16*g^9*j^3,d^35*e^4*f^7*g^5*k^4,b*d^22*h^16*k,b*c^2*d*e*f^6*g^3*h^4*i*k^9,b^2*e^14*f^5*i^2*j^9*k^4,b^2*c^5*d^12*e^2*j^13*k^5,b^2*c^10*d^22*f^3*j^5*k^8,b^5*c^3*d^4*e^2*h^5*i^5*j^5,b^6*d^25*e*f^6*g^13,b^13*c^10*f^7*g^4*i*j^6*k^2,b^15*d^2*e^5*i^5*j^2*k^9,b^17*e^16*f^2*g^7*i^2*k^3,b^21*c^3*d^23*f^3*g^2*i^2*j^3,b^23*c*d^13*e^18*j^2*k^3,b^31*c^17*j^7*k^7,b^32*e^4*h^3*i^5*j^5*k^3,b^34*d^3*g^6*h^3*i^8*k,b^34*c^15*f*g^2*h^5*k,b^35*c^2*d^3*e^2*g^16,b^39*c^7*h*i^15,b^50*c^10*d*g^5*h^3*j^5,b^86*c^14*f^2*h^2,c^17*f^6*g^4*h^5*i^2*j^3*k^4,c^10*d^28*f^2*g^2*h*i^3*k^2,c^63*f^2*i^2*j^4,e^19*g^10*h*i*j^3*k^3,e*f^3*g^24*h*j^2,c^22*e^3*g^2*h^10*k^3,c^5*d^37*g^5*i*j^6,c^28*d^10*f^3*h^4*i^3*j^3,g^17*h^12*k,e^12*g^4*h^15*j,d^15*e^6*f^14*i*j^6,d^8*f^6*i^3*k^6,c^8*e^10*f^10*g^6,f^12*g^2*h^4*i^8,c^40*e^2*f*h^13,c^26*f^5*g^7*i^5*k^2,b^2*f^4*g^4*h*j^9*k^6,b^2*c^33*d^2*e^13*i*j^2*k^6,b^4*c^10*d^52*g^3*h^4,b^5*h^10*i^3*k^13,b^6*d^4*e*g^6*h^3*k^11,b^8*e^12*f*g^13*h*k^5,b^10*d^17*g^2*i*j^6*k^4,b^11*c^16*f^7*h^2*i^3*j^3,b^13*d^9*f^6*g^5*h^2*i^6,b^14*c^15*d^15*e^14*g*k^5,b^17*c^13*d^7*e^14*f^4*g^4*h^2,b^21*e*f^10*i^3*k^10,b^23*e^7*f^6*h^7*j^8,b^23*d^3*f^20,b^27*c^11*f*i*j^9,b^28*h^2*i^14*j*k^3,b^30*e^11*h^5*i^7*j^2*k,b^31*d^32*h^2*k^3,b^31*c^33*e^13*j^2,b^39*g^5*h^4*j^8*k^3,b^58*d^12*k^7,b^60*e^11*f^2*g^4*k,b^75*c^4*h^3*j^2*k,c^13*f^6*i^4*j^13*k,d^22*e^2*g^2*h^2*i^2*j^3*k^6,d^31*g^5*j^9*k^4,c^18*d^4*e*h^5*i^2*j^6,d^23*g^8*h^5*i^5*j,d^13*e^26*g*h^3*i^3*k,d^2*e^4*f^3*i^2*j^3*k^10,d^17*e^2*f^13*h^3*j^3,d^8*g*h^16*i^5*k^5,c^18*d^23*f^8*g*j^4*k,d^7*f^12*i^10*j^2,d^32*e^13*f^3*g^4*k^2,c^23*d^19*e^5*h^10,e^10*f*h^9*k^11,c^32*j^8*k^8,c^6*e^3*f^4*h^3*i^2*j^6*k^4,c^11*f^18*i*k^7,c^18*h^2*i^4*k^13,b*c^7*d^19*g^8*j^3*k^6,b^2*d^3*f^3*g^5*h^3*i^5*j*k^2,b^3*c^17*d^3*e*f^3*g^15*j,b^4*e^28*h*i^3*k^5,b^6*c^3*d*e^19*f*g^4*h^3*k^3,b^6*c^48*f*g^2*i*j*k^4,b^7*c^22*f^5*h*i^12,b^8*c^9*f^2*g^13*i^7,b^9*c^22*d^3*e^5*f^7*h^4*i^5,b^10*d^49*g^3*i^6,b^10*c^9*d^14*e^12*f^4*j,b^11*e^14*g^2*i^13*k,b^12*f^9*g^2*k^12,b^13*c^19*e^5*f^2*g^8*h*i^7,b^15*c*d^4*e^7*f^3*i^16,b^16*c*h*j^12*k^2,b^16*c^6*d^3*f^12*j^4*k^5,b^19*f^4*g*h^6*i^5*j^4,b^19*c^13*d^9*f^2*h^10*i^2,b^21*c^11*e^7*h^8*k^3,b^22*d^10*e^14*g^7*h*k,b^23*c^21*e^18*f^2*h^6,b^25*c^29*d^5*h*i^5*k^5,b^27*d^31*h^2*i^6*j,b^37*e^14*f^8*j,b^37*c^6*d^8*e^2*h^6*j^5*k,b^41*c^15*f^3*i^5*j^2*k^2,b^66*c^18*h^6*k^3,c^8*e^6*h^6*i*j^9*k^4,c^13*d^8*f^11*j*k^7,c^2*d^4*f^2*g^5*h^3*k^12,c^6*d^9*f^11*g^4*h^2*i^3,c^4*e^22*f^7*i*k^2,c^22*d^5*e^8*f^2*i^6*k^4,c*f^15*j*k^11,c^41*d^3*e^7*g^4*h^2*i*j,e^4*g^5*h^4*i^4*j^4*k^6,c^20*f^3*g*h^6*j^3*k^6,c^18*f^9*g^4*h^11,d^10*f^3*g*i^7*j^11,c^26*f^6*j^10,c^12*f^2*h^2*i^11*j^2*k^4,d^24*e^6*i^2*j^6*k^6,c*d^17*i^4*k^15,c*d^18*f^5*g^7*i*j^5,c^12*e^10*f^4*h^5*i^4*j^3*k^2,d^8*e^17*f*j^4,c^13*d^32*h^2*k^4,c^23*f*g^19,d^16*e^6*f^3*h^5*i^7,b*c^23*d^16*e^8*f^3*g^6,b^2*c^9*e^10*g^8*h^2*i^6*k^3,b^5*c^8*f*g^3*j*k^18,b^6*c^5*d^43*e^8*h*i^5,b^6*c^15*d^6*e^3*f^2*g^4*i^9,b^6*c^64*f^5,b^8*f^15*g*i^3*k^3,b^8*c^3*d^3*h^11*i*j^3*k^4,b^11*e*g^21*h^2*j^2,b^12*c^7*g^2*i^9*j^8*k^2,b^12*c^11*e^23*h^7*k,b^14*c^7*d^6*e^5*h^3*i^2*j^9,b^14*c^31*g^8*h^2*i^3*j^2,b^16*c^17*e^16*f^2*h*j^7,b^24*f^9*g^4*i*j^5*k,b^28*c^11*e^10*f^7*g^3*k^2,b^43*d^5*e^3*f*h*i^5*j^4*k^2,c^6*d^13*e^25*h^3*j*k^2,d^3*f^8*g^4*h^3*i^2*j^2*k^3,e^27*f^4*h*j*k^6,d^49*f^4*g^2*i^3*k,c^36*d^7*e^4*f*g^4*k^6,f^2*h^14*i^2*k^10,g^11*h^7*j*k^8,d^12*f^2*g^7*h*j^8*k,d^2*e^22*j^7*k^4,c*e^4*f^6*g^14*j^6,c^3*d^26*e^2*h^3*j^3*k^8,c^13*d^10*e^13*g^6*h*j*k^2,c*d^18*e^2*f^2*g^2*h^8*k^2,d^29*e^9*g^16*h,d^16*i^11*j^2*k^6,c^5*e^8*g^4*i^8,c^54*e^3*f^2,d^8*f*h^4*i^16,f^12*g*h*i^2*j^2*k^7,h^12*j^6*k^8,c^5*d^21*e^24*f*i*j,c^3*g^7*h^10*j^4*k^2,b*g^17*h^10,b*d^10*h^6*i^3*j^13*k,b^3*c^33*d^11*e^21*i^3,b^5*d^29*f^8*i^3*k^5,b^7*e^10*g^11*h*i^3*k^5,b^7*d^27*g^5*h^6*j,b^8*c^19*e*f^3*h^11,b^9*d^17*e^26*h^4*k^3,b^9*c^30*f^8*i^2*j^3*k^3,b^10*c^13*h^2*i^11*j^5,b^13*f^6*g^4*j^8*k^5,b^17*c*e^15*f^4*g^3*j*k^6,b^20*e^15*f^10*g^6*h^4,b^22*d^11*f^9*i^3*j^2,b^22*c^7*d^4*f*i^5*k^8,b^34*d^7*g^2*h^4*j*k^4,b^36*e^10*f^4*g^9*h^2,b^39*i^14*k^2,b^40*c^12*g^10,b^42*c^12*d^18*e^12*f*j,b^45*c^22*d^3*e^5*g^5*h^2*k,b^47*c^4*d^8*e^7*i^9,b^51*c^2*f*h^7*j^4,b^92*c^11*d^5*g*i,d^27*e^12*f^5*g^9,c^32*d^14*e^2*f*i*j^6*k^3,c^7*d^33*g^10*i^4*j*k,c^30*d^6*e^2*f^7*g^3*i^6,c^4*e^2*f^6*h^7*i*j^8*k,d^12*e^7*g^2*h^9*k^6,c*e^18*f^3*g^9*h^7,d^25*f^2*h^3*i^2*j^5,c^9*d^18*g^3*h^2*i^4*k^8,c^44*e^8*j^2*k^4,d^15*e^29*h*j^4*k^2,c^7*d^9*e^11*f^6*g^5*h*j^3,c^19*d^23*e^20*h^3,c^50*e*f^2*i*j^9,g^3*h^5*j^14,c^23*d^5*e^26*i^2*j^3,c^9*e^6*h^12*j,d^13*f^4*g^7*i^4*j*k^5,d^44*f^10*g*j^3,b*c^15*d^7*f^3*h^6*i^2*j^8,b*c^27*h^5*i^4*j^2*k^2,b^2*d^3*e^29*i^2*k^8,b^2*c*e*h^8*i^15,b^3*c^37*e^3*g^6*h^3*i,b^10*c^11*d^21*f^2*j^7*k^7,b^11*d^5*e^2*f^6*h*i^2*j^5*k^3,b^11*i^4*k^12,b^13*d^24*f^5*g^5*h*i^5*k,b^13*e^13*f^10*g^2*j^3,b^13*c^9*d^13*f^8*g*h^3*k,b^15*c^3*d^11*f*i^7*j^6*k^5,b^17*d^22*e^18*f^3*g^4*h*k^2,b^18*c*d^3*f^7*i^12,b^19*c^25*d^9*e^8*k^6,b^34*d^4*e^17*f^4*h^4,b^38*c^18*d^10*e^3*g*i^2,b^40*f^12*h*k^5,b^47*c^8*g^2*h^6*i^7,b^81*c*g*j^3,c^4*d^49*f^9*g*k^2,c^2*e^21*f^9*g^2*h^4,c^20*e^7*f^4*g^3*i^5*j*k,f^4*g^16*h^10*k,c^13*d^46*e^5*g*i^6,d^19*e^5*h^4*i*j^8*k^3,f*g^18*i^5*j^5,d^3*e^16*f^3*g^5*h^2*j^6,c^9*e^9*g^10*h*k^6,c^11*d^27*f*g^4*h^6*j^2*k,c^15*d^9*e^2*g^6*i^3*j^7,c^3*d^17*g^2*h^2*i^11*j,c*d^7*e^20*i^9*k^2,c*f*g^5*h^15*j^5*k,i*j^24,c^23*e^2*g^4*h^15*k^2,c^5*d*e^4*h^7*i*j^11,c^10*d^11*f^14*j^3,d^34*e^9*h^9*j*k^2,c^2*d^18*e^20*g^3*h^7,c*d^26*e^7*f^4*i^6*k^3,c^45*d^5*e^10*j^5,c^57*e^3*k^9,e^7*f^3*h^2*i*j^8*k^7,b^2*d^7*f^5*g*h^4*j^2*k^5,b^4*c^9*e^9*f^9*g^8*h^2,b^5*f^11*g^4*h^9,b^6*c^3*e^4*f^2*g^3*i^3*j^7*k^3,b^6*c^5*d^20*f^8*j^9,b^6*c^17*d^13*g^2*j^3*k^7,b^7*f^4*i^11*j*k^3,b^9*c^15*d^5*f^6*g^5*h^2*i^5*k,b^10*d^53*f*k^3,b^13*c^37*d^3*e^4*f^4*g^4*h^2*k^2,b^19*e^2*f^3*g*h^5*i^4*j^6,b^19*c^17*f^6*h^7*j^5,b^23*c^35*f*j^6*k,b^25*f^2*g^9*i^6*j^5,b^25*d^20*i^4*j^2*k^8,b^25*c^10*d^14*g^8*i^3*j,b^27*c^8*d^4*e^8*g*i*k^2,b^27*c^57*e^3*k^2,b^35*c^12*h^5*j^11,b^52*f^4*g^5*i^3*j*k^3,b^54*e^10*i*k^6,c^10*e^12*f*g^3*i^4*j^4*k^5,d^11*g^2*h^3*i^10*j^4*k^3,c^3*e^7*f*g^9*h*i^7*j^2,e^9*h^8*j^14*k,d^5*e*f^11*h*j^6*k^4,e*f^17*h^6*i^4,c^5*d*e^18*h^15*j*k^2,c^17*f^5*g^3*h^15,c*d^4*e^23*f^5*g^5*i^2*k,c^10*d^18*e^11*g^4*h*j^3*k^2,c^15*d^28*e^3*f^3*g^4*k^5,d^14*f^5*j^12*k^2,f*h*i^10*j^4*k^7,c^5*e^7*f^9*g^4*j^10,d^6*f^11*h^4*i^2*j^4,c^5*f^3*g^5*h^3*i^4*k^5,d^47*e*h*j^2*k^7,d^10*g^19*k^3,e^25*f^7*h^2*j^3,c^15*f^7*g^12*h*i,b^2*d^39*e*f^4*g^2*h^6*k,b^5*d^10*f^4*h^2*i^13*k,b^6*c^33*d^10*e^2*f^4,b^8*d^4*f^14*g*i^2*j*k^6,b^8*c^7*e^2*f^3*h^8*j^8*k^3,b^8*c^12*f^17*h*k^6,b^10*d^2*f^2*g^7*h^8*j^3*k,b^12*c^25*h*j^9*k^5,b^14*d^8*g^8*h*i^2*j^4*k^3,b^15*c^23*f^4*g*h^6*i^4*j,b^16*e^13*g*j^3*k^6,b^16*c^3*d^8*e^5*f^7*g*k^9,b^16*c^10*f*g^15*j^2,b^17*c^21*e^17*h^4*i^2*k^2,b^18*d^48*g^5*h^4,b^18*c^10*d^13*e^11*f^3*g^2*h^2*j^3,b^19*e^13*g^4*h^4*i^5,b^19*c*e^5*f^13*g^4*i^4*k^3,b^19*c^17*i^8*j^9*k,b^20*c^4*d^11*e^6*i^3*j^10,b^22*f*j^6*k^15,b^23*c^2*d^3*e^6*f^2*i^8*j^2,b^35*d^9*f^7*g^7*i^2*k,b^43*d^2*h*k^14,b^45*d^28*f^2*g^2*h^2*k^3,b^45*e^13*f^7*j^3,b^50*c^4*d^7*f^4*i^5*k,b^64*c^3*e*g^10*h^2,b^68*c^9*f^2*g^6*j^2,b^116*c^2*g,c^17*e^3*g^15*h^4,c^2*h*j^3*k^17,e^6*f^14*h^7*i^3*j*k^2,c^7*e^5*f^2*g^3*h^16*j^3,d^8*f^6*g^12*i^3*j^3*k^2,c^16*e^3*f^13*g^5*i^5,d^35*e^3*g*h^12,c^11*d^35*e*f^3*i*j^5*k^2,e*f^8*h^5*i*j^7,d^10*f^22*k^3,g^5*h^4*i^3*j*k^9,d^9*e^26*f^3*g^3*h^3*i^2*j*k,d^33*e^6*f*g^2*h^7*k^5,c*d^6*f^3*g*i^6*j^8*k^2,c^5*e^21*f^6*h^5*k,c*d^27*e^3*f^5*h*j^9,c^13*d^20*i*j^3*k^9,c^9*e^27*f^3*g*i*j^5,c^23*d^4*e^7*f*j*k^3,e^16*f^5*h*i^9,c^6*d^2*e^4*h^12*i^7*j^3,d^23*e^3*g^10*i*k,c^2*f^14*h^2*j^3*k^10,c^21*e^7*f^7*g^3*h^3*i^3,f^20*h^7*k^4,c^15*e^2*i^14*k,b*c^4*d^36*f^3*g^6*i^4*j^3,b^3*d^2*g^8*h^2*i*j^7*k^7,b^4*c^6*f^23*h*j^2,b^4*c^13*f*g*h^7*i^3*j^4*k^3,b^5*g^15*j^5*k,b^7*d^7*e^16*g^2*h^3*j^6,b^8*d^15*e^5*f^2*h^10,b^10*d^13*h*i^10*j^7*k^3,b^10*c^31*d^2*h^3*i*j^6*k^3,b^12*e^11*i^7*j^5,b^12*d^7*e^3*f^13*i^6,b^12*c^6*d^21*h^3*i^4*j*k,b^12*c^41*e^6*f^2*h*j^4,b^14*c^4*d^11*e^20*h*i^2*k^4,b^14*c^16*d^5*e^2*f*g^6*h*i,b^17*d^11*i^20,b^20*c^13*f^9*g^4*j^2*k^4,b^22*d^19*i^4*k^11,b^25*c^9*e^9*f^11*h*i^3*k,b^30*c^4*d^30*e^7*f*k^5,b^39*d*f*h*i^4*j*k^5,b^41*c^4*e^4*f^5*g^3*i,b^49*d^31*e^2*f*g*i^2,b^57*g^6*j^5,b^58*d^2*f*g^2*h^4*i^7,b^59*c^11*d^8*e^8*k^4,b^62*c^9*e^8*g*h^4,d^37*e^6*g^13*h*k,c*d^29*e^6*j^8*k^6,d^21*e^6*f^6*g^3*i^5,g*i^5*j^11*k^6,c*e^3*f^4*g^8*i^2*j^9,c^15*d^8*f^2*g^7*h*j^5*k^4,c^13*e^12*j^4*k^7,e^21*f^2*h^2*i^8*j^2*k^3,c*d^6*e*h^6*i^5*k^7,d^17*e^8*g^10*k^5,c^37*d^6*e^3*g^6*h*k^5,c^11*e^12*f^4*g^3*h^4*i^2*k,c^20*d^4*g^2*h^15*k^2,c^19*d^11*e^5*f*j^11,c^29*g^4*i^7*k^3,c^3*e^7*f^3*g*i^18,f^20*h^2*j^5*k,c^29*d^17*e^14*f*k,c^4*d^36*e^10*g*i^3,e^21*f^3*g^5*h^9*j,b*e^16*i^6*j^8*k,b*d^15*h^4*i^3*j^4*k^5,b^3*c^6*e^7*g^6*h^2*j^2,b^3*c^11*d^9*f^12*g^6*k^2,b^3*c^55*e^2*f*g^2*h^4*j,b^4*d^7*g^2*h^9*i^8,b^6*c^4*e^7*f^4*g^9*h^7*i^5,b^9*c^3*f^6*g^4*j^5*k^8,b^14*e^9*h^14*j^6,b^14*e^14*f^8*h^2*i^2*k^5,b^16*c^20*f^2*h^16,b^18*c^14*h^7*i^3*j^7,b^20*c^29*f^13*g^2,b^22*d^6*e^20*h^5*i^4*j,b^26*e^18*f*i^11*k,b^26*c^5*d^12*e^6*i^9*j^2*k^2,b^26*c^54*d*e*j*k^2,b^30*e^9*f^2*g^3*j^2*k^3,b^34*e^2*f^5*i^3*j^9,b^34*c^14*d^16*f^3*j^5,b^35*i^13*k^5,b^37*d^14*f*h^3*i^6*k^3,b^38*d^25*e^7*g*i*k,b^38*c^36*d^14*e^2*f*k,b^47*g^2*h^5*i^6*j^2*k,b^49*c*d^4*g^8*h^7,b^55*c^5*d^7*e^6*i*j^2,c^3*d^39*f*g^2*i*k^8,e^22*f^7*g^10*i*j,d^5*f^2*g^24*j,c*e^17*f*g^3*h^5*i*k^5,c^3*d^15*e^4*f^7*h^10*j,c^7*e^10*f^4*i^4*j^6,c^12*d^7*e^2*f^18*i^3*k,c^21*d^21*f^2*h^3*i*j^2*k^2,d^5*f^6*h^6*i^12,c^19*d^11*e^19*h*j*k^5,c^31*d^5*e*f^6*g^5*h,c^25*d^3*i^9*j^7,c^29*e^30*f^2,c^47*d*e^16*i*k,d^19*f^5*i*k^12,d^3*g^13*h^5*i*j^6,c^2*e^4*f^20*h^4*i*j^2,d^24*f*h^8*j^7,d*e*g^2*h^10*i^7*k^3,c^20*d*e^3*g^12*h^5*k,e^12*f*g^9*h^8*i^4,c^7*d^16*f^12*g^2*i*j^4,c^16*d^30*g*h*j^8,d^14*h^4*i^10*j^6,c^37*e^2*h*i^6*j^3*k,d^39*e^10*g^4*j^2*k,c^24*d^4*e^25*g*j^5,b*c^12*d^12*e^14*h^4*i^2,b^5*c^10*e^5*h^17*j^3,b^7*e^12*f^8*i^4*j^6*k^2,b^7*c^7*e^5*g*i^6*k^11,b^7*c^9*d*f^6*h*i*j^2*k^6,b^9*d^20*f^5*g^5*h*i^4*k^4,b^9*c^19*e^3*f^10*g^2,b^10*c^2*h^13*i^7*j^2,b^11*d^4*f^9*g^12*i,b^17*d^7*e^21*f^8*g*i^2*j,b^17*c^12*d^31*e*f^6,b^23*e*g^19*h^3*k^3,b^23*e^7*f^2*i^2*j^12,b^23*c^4*d^10*j^8*k^4,b^25*c^14*f^4*g^5*j^6,b^26*g^7*i^9*k^3,b^26*c^2*d^2*f^6*g*h^4*i^4,b^28*e^16*f^2*h^2*i^2*k,b^32*c^18*e^2*i^7*k^3,b^44*d*e^11*j^5,b^45*d^9*h^7*i^8,b^46*c^19*d^9*e^2*g^3*h^2,b^73*c^7*e^4*f^2*k,b^90*d^6*h^5,e^15*f*i^3*j^9*k^2,c^21*e^6*f^3*g^5*h^2*j^3,d^18*e^2*f^2*g^15*h^2,c^13*e*f^2*g^3*i^13*j^2,c^14*d^45*e^4*g^3,d^10*e^4*f^4*g^3*h^14*j^2,e^10*g^2*i*j^15,d^10*e^2*f^9*g^2*j^7*k^3,c^16*d^8*e*g^8*j^9,e^10*f*g^5*h^3*i^6*j^7,c^4*d^16*g^4*h^7*i^3*j^3,c^9*d^26*f^13*g^4*i^2*k,c^2*d^6*e^19*h^5*i*j^2*k,c^12*e^30*g^4*h^3,e^19*f*h^10*i^6,c^11*e^17*f^6*i^8*k^2,c^20*d^12*e^5*i^6*j^3*k^3,f^3*h^2*j^5*k^10,d^21*f^10*h^3*i*j^6,d^14*f^2*g^5*h^2*i^3*k^8,c^9*e^8*f^7*g^2*j^3*k^4,d^4*e^22*i*k^11,b*c^16*g^4*h^16,b^2*c^15*e*f^10*j^10,b^3*c*e^3*f^6*i^13*j^2*k^2,b^3*c^3*f^12*h*i^8*j^4,b^3*c^15*f^4*i^10*k^6,b^4*c^2*d^4*f*g^13*i^5*k^4,b^5*c^15*d^14*f^6*h^3*i^3*k^4,b^6*d^15*e^14*h^3*j^8,b^6*c^2*d^25*e^6*f^3*k^2,b^7*d^2*e^8*g^2*i^11*k^7,b^12*d^4*j^11*k^8,b^14*c^4*e^3*f*g^5*j^9*k^2,b^15*f^3*g*h^5*i^3*j^3*k^2,b^16*d^7*g^15*j^4,b^17*c^2*e^3*f^7*g^8*h^3*j,b^19*g^3*i^11*j^8,b^19*c^14*e^12*f*h^5*k^3,b^21*c^10*d^23*h*i*j^5*k^2,b^21*c^20*f^2*g^9*i^5*j^2,b^22*d^34*e*g^3*j^6,b^23*c^20*d^7*e^5*f^4*j^3,b^25*d^26*e*f^3*g^6*i,b^31*d^5*g^4*h^3*i*j^9,b^33*d^5*e^8*f^7*k^6,b^35*c^9*d^3*e^7*g^3*h^3*j^2*k,b^38*c^7*e^7*f*g^6*h^8,b^62*e^9*h*j^2*k^5,c^34*e^2*f*g^3*i^3*j*k^8,d*f^2*g*h^10*i^4*k^4,c^27*f*g^9*h*i^6,e^7*f^12*g^5*i^4*j^2*k,d^10*g^4*h^8*i^2*j^6*k^2,d^20*f^10*g^4*h*i*k^5,c^17*f^3*h^13*i^4*j^3,c^4*e^6*g^11*h^6*j^4,c^9*d^4*f^14*g^11,c^15*d^16*e^2*f*i^4*k^10,c^34*d^14*e*g^4*h*k^5,c^13*f^2*g*h^5*j^2*k^12,c^5*e^6*f^7*j^13*k,c^5*f*h*i^9*j*k^10,c^5*d^8*e^4*f^3*h^4*i^2*j^2*k^8,c^15*f^5*g^6*i^6*k^4,c^17*d^2*f^11*h^4*i*j,d^19*e^11*j^3*k^6,c^4*d^13*f^8*g^14*j^2,c^6*d^43*h*k^10,c^2*d^3*e^22*f^4*g^7*j,d^11*e^11*f^6*g^3*h^2*i^2,d^25*g^2*h^13*k,d^32*e^4*f^3*j^10,b^2*d^24*e^4*f^9*i^5*j^2,b^2*d^54*e^2*i^3*k^6,b^2*c^3*d^7*e^5*g^4*h^2*i^8*j^4,b^2*c^8*d^17*f*g^4*i^7*k^2,b^2*c^52*h^4*j^3,b^4*g*h^6*i^2*j^6*k^6,b^4*f^14*g*i*k^9,b^7*e*f*g*j^19,b^7*c^4*e^26*f^3*i^10,b^8*g^2*i^7*j^7*k^8,b^11*f*g^5*h^4*i^12*k^2,b^12*c^10*d*e^10*f*j^6,b^13*d^9*f^3*h^7*i^5,b^14*d^20*e^6*g^6*j,b^14*c^34*d^9*e*f^3*g^2*h^2,b^15*e^28*h^5*i^3*k^3,b^16*c^28*d^7*i^2*j^7*k^2,b^17*c^16*d^15*i^10*j*k^2,b^19*c^26*f^2*i^7,b^20*c^13*d^10*e^3*g^14*i^2,b^21*f*h^9*i^2*j^9,b^23*g^7*h^9*i^5*j^4,b^25*d^5*e*h^11*k^5,b^29*f^5*g*i^7*k^6,b^31*c^3*d^2*e^5*f*g^2*h^3*j^4,b^33*c^15*d^16*e^14*h^5,b^37*f^9*j^7*k,b^41*e^8*f^4*g^3*j*k^2,b^41*c^22*e^3*f^7*k^2,b^43*d^8*f^6*g^9,c^17*e^2*g^9*h^2*i^5*j^2*k^4,c^45*e^15*g^4*j^2,d^4*e^21*f^3*k^12,c^10*d^7*e^13*g^2*h^8*i*j,c*f^5*g^4*h^11*k^10,c^9*d^15*f^7*i^11*k,c^9*d^4*f^2*j^12*k^9,c^7*f^8*h^5*j^4*k^3,c^38*e^10*g^10*i^3,d^7*f^5*g^14*j^5*k,d^5*e^16*f^3*g^3*h^3*i*k^4,d^7*e^2*f^9*h^4*i^9*j^4,c^11*f*h^3*i^11*k^8,d^11*e^2*g^4*i^6*k^6,d^42*f^4*h*i*j*k,c^47*f*k^6,c^8*e^13*f^2*g^11*i^3,c^10*d^26*f^8*g^5,c^17*d^9*e*g^10*h^5*i*j*k,c^8*d^16*e^29*f^4,e^6*f^4*g^4*i*j^14,c^2*d^5*f^2*g^3*h^3*j^10*k,c^26*d^22*e^15*i,f^20*i^8,b^2*d^3*e^4*h^8*i^4*j^3*k^4,b^4*d^22*g^2*h^8*i^7*k^2,b^4*e^15*f^4*h^6*i*j,b^4*c^7*d*e^3*h^17*j^5,b^5*e^22*f*g^13*j^2,b^5*d^22*e^2*g^12*h^3,b^8*c^4*e^8*f^7*i^4*j^8,b^8*c^16*e*i^6*j^2,b^8*c^65*f^2*h*j,b^9*e^10*f^3*h^2*i^17,b^9*c^3*d^4*e^8*g^14*i*j^3,b^10*c^40*d*f*g^6*h,b^12*d^33*e^13*h^2*i^2,b^14*g^13*h^12*j,b^14*c*d^17*e^24*f^4*g^4,b^17*d^14*e^2*f^6*j^7*k^5,b^18*d^12*h^6*i^2*j^9*k^2,b^18*d^15*i^3*k^14,b^19*c^11*f^15*h^4*i^3*k,b^20*e^10*g^2*h^4*j^7,b^20*d^6*e^2*f^12*g^2,b^21*d^4*h^11*i^7*j,b^27*e^14*h^2*i^10*j*k,b^27*c^9*g^6*h^2*i^9,b^35*c^4*e^3*f^3*i^6*j^2*k^4,b^35*c^18*f*h*i^3*k^8,b^38*c^5*d^29*e^6*k^4,b^43*d^19*e*i^7*k^2,b^47*h^6*j^3*k^4,b^51*i^4*j^8*k^2,b^54*c^11*f*g^2*h^4*i^6,b^58*c^33*g*h^4*k,b^72*c^4*e^2*i^2*j*k,c^23*e^9*h^4*i^7*k^2,d*e^18*g^2*h^9*j^4,c^18*d^7*e^4*g^3*h^2*i^5*j^5,f^5*h^6*j^7*k^7,c^2*f^19*k^10,d^36*f*h^2*j^4*k^5,c^37*e^2*j*k^10,c^13*d^9*f^8*h^7*i^2*j*k,d^20*e^5*f^5*g^5*j^2,d^10*e^34*f*j*k^2,c^41*f^7*i^4,g^3*h^4*j^13*k^5,c^16*d^16*e^20*j^2*k^4,e^29*i^11,c^14*d^8*e^20*f^2*g^2*i^5,d^12*f^2*j^20,e^20*f*h^7*j^4*k^2,c^2*d^5*h^11*k^6,e^2*g^32,e^16*g^9*h^7*i^3,f^5*g*h^16*i^2,c^20*d^10*e^4*j^13,e^13*f^4*h*i^3*j^11,d^4*e^5*f^18*i^2*j^3,c^6*e^6*i^5*j^5*k^4,c^8*d^18*f^2*h^5*j^7,c^11*f^10*i^4*k^7,c^20*d^11*h^4*i^2*j*k^8,d^29*g^8*j^8,d^37*f*g^4*h^5*i^3*j^2,c^16*e^17*g^7*i^2*j^3,c^18*d^2*e^4*f^6*g*h^3*j^5,c^30*g^6*h^2*k^2,d^16*e^11*h^10*i^6*k^2,c^4*e^6*f^2*g^3*h^5*i^10,b*d^21*f^5*g^11*h^3,b*c^12*i^8*j^12,b^3*d^11*e^29*f*g^4*h,b^4*c^10*f^5*i^13*j^4,b^5*c^34*e^19*j^5,b^6*c^22*d^6*e^8*h*i^8,b^7*c^11*d^48*e^2*f^2*j^2,b^7*c^25*e^4*f^2*j*k^14,b^9*e^7*f^9*g^2*j^2*k^3,b^9*d^14*g*h^9*j^6*k^4,b^9*f*g^7*k^12,b^11*c^7*e^6*g^8*h^7*j^4,b^12*d^6*g^4*h^14,b^13*c*e*g^3*i^3*j^11*k^2,b^13*c^6*d^6*f^4*g^3*i^2*j^3*k^5,b^14*c^29*f^11*i^4*k,b^16*d^35*f^8*h*i^3*k^3,b^16*e*g^6*h^3*i^8*j^3,b^22*c^29*d^8*i^8*k^5,b^24*f^6*h^3*j^7*k^3,b^25*d^9*e^2*f^3*g^5*j^8*k,b^26*d^17*f^5*g*h^3*i^3*j^2*k,b^26*c^6*e^6*f^10*h*j^5,b^26*c^18*f^2*g^3*k^6,b^27*c^5*e^6*g^17*k^4,b^28*d^7*e^20*f*h*i*j*k^4,b^28*d*e^2*f^9*g^8*h,b^30*d^15*e^11*f^3*h^3*k^2,b^34*c^6*d^11*e^5*g*h^3*i*j^4*k,b^40*d^7*h*j^13*k,b^43*c*g^2*h^5*i^5*k^4,b^51*c^29*d^3,c^13*d^11*e*f^3*g^3*i^3*k^7,d^14*e^10*f^2*g^5*h*j^5*k^3,c^13*e^14*f^9*h^6*j^2,c^31*f^4*i^3*j^3*k,c^6*d^12*f^3*g^9*i^6,c^4*d^2*e^25*g^2*i^4*k^2,e^10*f^15*i*j^6*k^2,d^12*h^6*j^10*k^3,c^8*e^9*f^3*g*h^4*j^8,d^4*f^5*h^11*i^4*j^2,c^2*e^4*i^7*j^15*k,e^27*f*h^9*i^2*j,d^5*e^34*g^4*h^2*j^2,c^14*d^10*h^4*i^9*j^3,d^10*e*f^2*h*j^7*k^13,c*d^42*e^7*j^5,c^13*d^35*g^4*k^4,c^48*e^15*g*j^2,c^22*e^24*i^4,d^3*e^20*g^8*i^7,d^34*e^7*f^5*g^2*h^5*i^2,b*g^4*h^15*j*k^2,b^2*f*g^3*i*j^6*k^9,b^3*e^11*g^11*h^13,b^3*c^16*h^9*j^13,b^3*c^19*e^2*f^8*i^3*j^3*k^5,b^4*c^3*d^5*e^4*g^4*h^2*j^14,b^5*d^13*h^9*i^2*j^8,b^5*f^7*g^6*i^6*k^3,b^5*c^38*e*g^2*h^6*j^5,b^6*c^18*e^18*g^2*k^10,b^6*c^26*h^13*i^6,b^7*d^13*e^14*f^9*k,b^7*c*e^4*f^3*g^7*h^7*j^6,b^9*c^4*e^25*f^13,b^9*c^13*d^11*e^13*h^9*j,b^11*c^7*d^9*e^8*i^5*j^8,b^12*d^30*e^7*f*g^8*j*k,b^15*d^11*f^2*g*h^4*i^2*j^5*k^5,b^15*e^11*f^7*h^2*j^8*k,b^15*c*e^3*f^21*k^4,b^15*c^8*e^4*g^3*h*j^2*k^10,b^15*c^10*f^5*h^6*j^4*k^5,b^16*d^8*f^7*h^13*i*k^5,b^17*e^7*f^6*g^8*h^2*j^3,b^19*c^14*f^2*i*j^9*k^3,b^21*d*f*g^9*i^4*j^4*k,b^22*c^2*d^11*e^2*f^6*h^5*i^2*j^4*k,b^23*c*d^15*e^2*g*k^8,b^26*d^7*e^2*f*g^4*h^2*i^4*k^2,b^30*c^5*d^20*f^4*i^7,b^34*c*g^9*h^4*i*k^2,b^40*c^19*e*j^2*k^2,b^41*e^10*h^3*i^10,b^44*c^4*e^8*g^14,b^52*c*d^10*e^2*f^9*k,b^53*d^8*h^12*j,b^86*h*i^2,c^3*d^5*e^6*g^3*i^2*j^3*k^11,c^7*d^10*f^9*g^2*i^10*j^2,c^21*e^5*f*i^2*j^6*k^5,d^6*e*g^9*i^5*j*k^3,e^30*g^2*i^3*k^6,c^6*d^11*e^28*f^6*g^3*h,c^5*d^9*f^2*k^19,c^24*d^17*e^14*f*g^4*j,e^14*g*h^5*j^11*k,e^3*f^2*h^12*i^3*j^5*k,c^10*d^6*f^4*g^3*h^14,c^16*g^2*j^12*k^3,e^9*h*i^11*j^10,c^4*d^4*h^5*i^8*j^6*k^3,c^14*f*g^5*h^3*i^5*j^4,c^28*d^12*g^4*h^7*i^2*k,d^15*e^17*f^4*g^5*k^7,c^26*d^2*e^9*h^5*k^4,c^7*d^34*g^3*i^6*j,d^9*e*f^8*g^4*j^9*k^2,d^17*f^10*h^3*j^3*k^2,d^10*f^2*g^5*h^2*i^2*k^11,c^33*f^7*g^2*k^7,d^7*e^19*f^6*h*j^2*k^5,d*e*f^14*g^7*h*j,d^31*f^4*h^5*k^9,f^7*g^2*i^8*j^8,e^30*f^10,c^3*d^5*e^18*h^10*j^4,b*c*e^18*g^2*h^15,b^2*c^12*e^16*f^5*g*j*k,b^4*d^30*g^10*h^3*i,b^4*f^2*h^7*j^7*k^9,b^5*c^24*d^13*f^9*g^3*h*i^2,b^6*c^30*d^3*e^2*g^2*i^5*j^2*k^3,b^7*f^8*h^12*k^3,b^7*c^4*e^11*f^4*i^16,b^7*c^13*d*i^14*j^4,b^8*c^4*e^2*j^12*k^7,b^10*c^5*d^43*e^14*f*i,b^11*c^2*e^2*f^5*g^2*h*i^5*j^4*k,b^11*c^16*f^3*g*h^5*i^2*k^5,b^12*d^9*e^7*g*j^2*k^12,b^15*d^8*e^14*f^6*h^4*i,b^16*d^22*i*j^9*k^5,b^17*c^13*d^9*g^10*h^5*k^4,b^18*c^7*d^6*e^11*g^4*j^7,b^19*d^14*f*i^6*j,b^19*c^44*d^3*f^4,b^23*f^2*g^3*h^10*j^5*k,b^27*g^5*i^3*j^10,b^27*c^2*f^13*g^5*i^2*j^2*k^2,b^31*d^10*e^2*g^7*h*i*k^4,b^31*c^33*g^3*h^3*k^4,b^32*c^7*e^6*h^6*i^3,b^32*c^9*d^14*f^5*h^11,b^32*c^12*f^13*i^2*k^3,b^36*c^13*f^2*i^6*j^4,b^48*c^7*d^2*f^7*g^3*k,b^66*d*e^17*k^2,b^69*c^12*d^17*f*g*h^2,c^21*d^12*f^8*g^8*i^3,d^13*g^5*i^7*j^11,c^27*g^3*i^11*j^2*k^5,c^2*d^19*e^8*h^2*i^7*k,f*g^3*h^15*j^2*k^3,c^4*e^5*g^5*h^4*i^4*j^7*k,c^9*f^12*g^5*i^3*k^4,c^28*g^11*h^6*j,c^22*d^9*e^7*i^2*j^9*k,d^28*e^3*g^3*i^5*j^4,c^46*d^17*h^2*j^3,c^20*d*e^7*f*h^5*i^7*j,c^9*d^43*e*f^4*g^4*h^3*j^4,e^6*f^11*g^7*h^2*j^4,d^9*e^15*f^5*h^4*k^7,c^4*d*f^6*g^8*i*j^5*k^2,c^27*f^13*g*i^3*j^2,c^16*d^15*e*k^9,d^30*f^10*h^5*i^2,d^41*e^4*f^7*g^5*j,d^34*g^10*k^7,d^4*e^16*h^10*j^6,c^9*e^9*g^3*h^9*i^2,c^14*d^7*e*f^6*g^3*h^2*i*k^3,c^8*d^5*i^12*k^7,d^47*f^2*g^6*i^2*j^2,c^20*d^20*f^9*i^4,c^27*d^3*g^4*h^2*i^7*j*k^2,c^6*e^5*f^6*j^15,f^8*h^7*j^9,d^3*f^22*j*k^3,c^6*g*h^6*i*j^3*k^9,b^2*c^7*d^53*f^2*g*i^2*k,b^2*c^16*f^4*g^8*h^4*j*k^3,b^3*c^3*e^5*f*g^22*j^2*k,b^4*d^2*e^19*f^3*h^5*j^3*k,b^4*d^26*f*h^9*k^5,b^4*c^12*f^3*i^4*j^10*k^2,b^5*e*g^32,b^5*d^10*g^11*j^11,b^7*e^16*g^4*j^10*k^3,b^7*f*h^5*i^10*j^3*k^5,b^8*d^8*e^5*i^5*j^4*k^3,b^8*c^34*f*j^3*k^3,b^10*e^16*f^2*g^7*i^2*j^2,b^10*d^23*e^3*f^8*g*h*j^4,b^10*c^9*d^16*g^6*k,b^12*c^19*e^7*f^4*g^13,b^15*c*d^6*g^4*i^15,b^18*c^4*e^3*f^4*k^13,b^19*g^7*h^9*i^4*j*k,b^20*g^21*h^2*j^2,b^21*e^11*h^7*i^2*k^4,b^21*d^8*f^2*h^12*j^2,b^21*c^2*e^3*f^10*i*k^7,b^25*c^3*e^4*h*i^5*j^7,b^25*c^8*f^13*i^4,b^27*c^27*f*g^2*h^3*j,b^34*d^4*j^6*k^11,b^37*d^3*e^5*f^12*j^4,b^37*f^4*g^3*k^5,b^54*c^15*f^5*h*j,b^62*c^8*d^24*f,c^11*d^6*f^5*g^8*i^2*j^2*k^4,c^9*e^29*f*g*j*k^7,c^6*d^15*g^11*j^8*k^2,c^2*e^24*f*g^7*h*i^3,e^2*f^9*g^5*i^2*j^2*k^8,c^34*d^3*e^3*g^2*h^8,c^28*d*i^11*j^5*k,c^6*d^9*e^6*j^3*k^13,c^4*d*e^6*f^3*g^3*h^3*k^7,e*i^11*j^2*k^11,c^10*d^14*f^6*i^3*j^2,e^8*f^10*i^14,e*f^2*g*i^16*k^5,c^34*d^22*f^8*g^5,d^6*f^4*g^6*h^8*i*j^7*k^2,d^47*e^4*g*i*k^5,c^2*h*i^3*j^13*k^6,c^12*f^4*g^4*j^11,c^36*e^25*f*i^3,f^6*h^6*i^8*j^5,c^24*e^5*h*j^6*k^7,d^6*e*f^8*h^9*i*j^6,c^12*h^8*i^3*k^7,d^17*e^8*f^5*g*h^2*j^7,d^10*e*g^6*h*j*k^5,c^22*e^5*f^4*h^6*k,b*e^30*k^8,b*c^9*e^12*f*g^13,b^2*d^2*e*f^3*g^9*h^6*i^3,b^3*e^14*f^2*g^3*i^4*j^12,b^3*c^5*d^23*g^2*i*j^8,b^4*g^4*i^14*k^3,b^4*e^30*g^2*h^4*i*k^2,b^4*c^16*d^2*e^16*i^4*j^6*k^3,b^4*c^28*f^7*i^3*j^5,b^4*c^40*i^5*k^3,b^5*c^27*g^14*k,b^6*d^21*e^12*i^7*j*k,b^6*c^3*d^15*f^6*g^5*i^6,b^7*c^27*d^21*e^14*g*j,b^8*c*d^5*e^23*f^2*i^4,b^10*d^2*e^3*h^13*j^5*k^3,b^10*f*g^14*h^8*j^2,b^12*c^19*d^11*e^9*i^9,b^14*e^9*h^2*i^4*j^10*k,b^14*e*f^10*i^3*j^2*k^4,b^14*c^7*d^8*h^6*i*j^6*k^5,b^16*c^17*g^2*h^4*j^4,b^16*c^22*d^2*f^12*g^2*k^2,b^17*c^5*h^11*i^6,b^20*c^2*e^7*f*g^19*h^2,b^21*c^9*i^14*j^3,b^26*e^3*f*g^3*j*k^9,b^29*d^3*h^16*j^3,b^30*d^3*f^4*i*j^8*k^2,b^33*f^10*g^2*i^6,b^34*c^15*d*e^16*f^2*j*k^3,b^35*e^13*h^7*i^2*j^3,b^39*c^7*e^11*f*i^9*k,b^43*c^5*e^2*f^2*h^2*j^4*k^3,b^51*d^18*j*k,b^59*g^2*j^10*k,b^84*c^14*f*g^2*i*k,c^12*d^28*e^2*g^2*i^2*j^5,c^30*d^10*e*h^3*i^2*j^8,e^11*g^3*h^4*k^11,d^8*e^4*f^3*i^2*j^5*k^4,c^24*d^16*f^5*g^5*k^2,e^4*f^9*g^2*h^3*i^7,c^7*d^14*g*h^14*i^5*j,f^2*i^18*j^4*k^2,c^28*e*f^2*g^7*i^4*j^4,d^54*e^2*i^3*j^2*k^2,c^2*h^9*i^2*j^3*k^11,d^4*e^6*g^6*h^2*j^4*k^9,c^5*e^9*f^23*h,d^17*g^2*j^11*k^2,c^44*d^6*j^10*k^2,d*e^8*f*i^11*j^9,c^18*e^3*f^4*h*i^2*j^8,c^23*f^18*i*k,c^30*i^4*j^2*k^7,d^9*f^3*g^5*h*i^5*j^3,c^7*d^33*f*g^4*h^5*i^2,c^42*f^6*g*h^3*j^2,e^28*i^3*j^2,c^3*e^10*f^7*g^12*i^2*j,c^36*i^7*j^9,c^15*d^7*e^19*f*g^4*h,b*c^9*d^5*e^14*i^8*j^3*k,b*c^58*e^9*j^2*k,b^2*e^8*f^2*h^19*k,b^3*e^6*f^7*i^2*j^5*k^8,b^3*d^2*h^7*j^9*k^9,b^3*c^2*d^12*f^5*j*k^12,b^4*c^7*e^14*g^2*i^13,b^5*d^3*e^4*f^17*j^5,b^5*c^12*f^9*g^2*k^6,b^6*h^12*i^5*j*k^3,b^7*d^5*e*g^12*h^5*j^2*k,b^8*c^5*e^5*f*g^5*h^10*i^2,b^8*c^10*f^15*g^5*h^3*i,b^8*c^19*d^2*g^4*h^14*k,b^9*e^12*g^19*h^3,b^9*c^13*j^14,b^12*c^23*g^6*h^3*i^7,b^13*d^18*e^15*f^7*g,b^13*d^32*e^3*h*j^4*k,b^13*c^5*d^42*f^5*k^4,b^14*c^23*d^5*e^7*h^6*j,b^17*c^9*d^24*e*f^2*g^2*i^5*j*k^2,b^18*d^7*f^10*h^10*k^2,b^21*c^7*d^5*f^3*g^5*j^5*k^4,b^22*e*f^7*g^2*i^5*j^3,b^22*c^30*f^10*h*j^2,b^24*d^3*e^10*f*h*k^7,b^24*c^5*f^9*g^8*h,b^26*f^2*g^3*i^10*j^4*k^2,b^28*c^11*d^9*i^5*k^9,b^30*c^9*e^14*f^8*j^3,b^30*c^21*e^7*g^2*i^2*k^3,b^30*c^30*d^7*g*h^3*j*k^4,b^36*c*f^2*j^14,b^39*c^11*g^3*h*i^7*k^3,b^40*d^12*e^5*j^4*k^5,b^43*d^4*e^5*f*h^4*i^3,b^46*c^16*d^2*e^2*g^5*j^3*k,b^59*c^30*d^2*h^4*j,b^69*f*k^7,b^88*d*f*g^6*h^2,c^7*f^14*g^10*h*i^2*j*k,c^20*d^4*e^6*h^4*i*j^11,d^2*e^9*i*j^8*k^8,c^14*d^10*f^2*g^5*h*j^2*k^6,e^9*f^6*g^2*h^4*i^6*k^2,c^6*f*g^3*i^11*j*k^4,c^34*d^11*e^8*f^2*i^6*j,c^8*e^8*f*h^2*i*j^11*k^2,c^13*f^15*j^3*k^5,d^3*e^4*g^5*h^2*i^4*j^6,g^10*h*i^6*k^9,c^32*f^3*g*h^4*j^5,c^20*f^5*h^11*i^3,d^17*e^13*h^4*j*k^7,d^48*h^9*j^3*k^2,c^7*d^11*f^2*g^11*h^4,c^5*d*e^24*g^4*h^2*k,d^9*e^13*h^9*i^4*k,c^24*f^2*i^11*j^4,d^6*f^2*h*j^4*k^16,d^22*e^6*f^3*h^3*i^7,d^32*f^9*h^2*j^5*k^5,d^57*g^9,c^2*e^2*f^6*g^2*j^2*k^10,d^5*f^16*h^7*i*j^2*k,c^9*d^6*e^17*f^7*g^3*h*i^4,c^21*e^10*g^8*i^6,e^9*f^20*h^5,d^3*f^4*h^16*j^4,e^2*f^12*g^5*h^4*k^4,c^8*d^3*f^9*j^9*k^3,c^20*f*g^3*j^3*k^12,b*c^6*f^15*g*i^3*j,b*c^15*d^9*h^9*i*j^5,b^2*d^36*f^2*k^8,b^3*c^13*e^12*h^7*j^4*k,b^5*d^18*e^8*g^3*h^7*i^2,b^5*d^28*f^8*g^3*i*k^2,b^7*c^31*d^5*i^4*j^5*k^3,b^8*c^9*d^2*e^17*f^3*g^9*i*j^2,b^9*c^6*d^24*g^4*i^7*k,b^9*c^46*e*f^8*g,b^10*g^5*j^8*k^8,b^11*c^20*e*f^7*h^2*j^5*k^4,b^13*f^6*g^8*h^2*k^2,b^15*g^3*i^9*j^7*k^6,b^18*c^36*f^8*g^2*i^5,b^19*e^19*f^5*j^6,b^19*c^8*d^8*e^7*h^5*j^10,b^19*c^11*e^12*g^2*i*k^7,b^19*c^13*d^18*f^3*j^2*k^2,b^20*d^2*e^8*f^7*h*i^7,b^21*d^37*f^2*g^6,b^23*c^17*e^5*i^4*j^7,b^27*c^15*f*g*j^11*k^2,b^29*g^11*j^6,b^32*c^25*e^5*f*h^7*k^3,b^34*d^6*e*g^6*h^7*k,b^36*d^11*e^3*f*i^5*j^6,b^36*d^4*g*i^7*k^5,b^36*c^29*e^11*i*j^3*k,b^38*c^6*d^19*f^3*g^2*h,b^40*c^4*d^9*e^23,b^44*h^5*j^11,b^44*c^22*d^15*e^9*i^2,b^65*f^7,b^82*c^24*h*i*k,c^27*d*g^3*i*k^14,c^13*e^3*f^14*g*h^3*i^4,g^3*i^10*j^4*k^8,c^45*f*i*j^3*k^8,c^8*d^9*f^8*g^4*h*i^2*j^4,c^20*d^2*g^9*i^4*k^6,c^6*e^27*f^4*j^3,c^24*d^5*e^13*i^5*j^4*k^2,c^48*d^13*e^4*f*g^4,d^5*g^11*h^5*j^3*k^2,c^3*d^18*f^2*g^7*j^10,c*d^8*e^22*j^9,c^15*d^32*e^2*h*j^5*k^2,d^16*e^11*h^4*i^6*j^3,d^51*g^9*h,e^22*f^4*g^3*h^2*i^3*j,c^13*d^24*e^2*f^2*g^2*h^6,e^51*i,i^7*k^16,f^12*g*i^2*j^4*k,d^19*f^2*h^3*j*k^14,c^5*d^3*h^10*j^8*k^2,c^10*d^13*f^10*h^3*k^5,c^8*d^3*e^9*f^6*h*k^8,c^20*f^14*g^7*h,d^22*e^5*f^5*g^3*h*k^6,d^6*g^17*h^8*j,c*e^17*h^13*i^3,d^6*e^16*f^9*g^10,c^25*e^8*g^2*h^15,d^35*f^8*i^3*j,d^18*g^4*h*i^6*j^3*k^5,c^33*d^14*e*h^4*j^8,d*g*h^5*j^5*k^12,c^6*d^2*e^10*g^11*i^3*j,b*c^31*d^6*e*f^3*h^9,b^4*d^4*f^2*g^18*h^3*k^4,b^6*f^6*g^4*j^10,b^7*c^26*f^5*g^2*h*i^4*j*k^4,b^8*c^3*d^12*e^4*j^5*k^6,b^8*c^15*d^5*g*k^15,b^9*e^13*f^4*h^2*i^6*j^3*k^2,b^10*d^31*g^6*k^4,b^10*c^13*e^15*f^4*g^3*j^3,b^11*e^24*f^8*i^3*j,b^11*c*d^4*e^4*f^6*h^4,b^12*d^15*e^11*f^3*g^13,b^14*c^31*d^2*e*g^4*j^4*k^2,b^15*c^5*e^10*f^3*g*i^8*j^2,b^15*c^14*h^4*i^6*j^6,b^15*c^19*d^10*f*i^5*k^2,b^16*f^5*i^16,b^16*c^6*d^21*g^14,b^17*f^14*h*k^9,b^17*c^29*e*f^5*g^7*i^2,b^18*c^6*d^42*e^13*g,b^19*d^50*e^2*f^2*i,b^19*c^3*e*f^4*g^4*h^6*j^6,b^19*c^36*e^18*h^4,b^21*d^2*e^7*f^9*k^10,b^21*f^3*g^14*h^6*j,b^25*d^5*e^8*i^4*j^9,b^25*e*g*i^6*j^3*k^9,b^25*c^21*e^3*f*h^2*j^8,b^27*d^13*g^2*h^2*j^3,b^29*d^3*e^28*j^2*k,b^32*d^3*i^14*j^2,b^33*c^24*d^3*g^10*j^2,b^38*h^13*j*k^5,b^38*c*f^2*g*h*i^2*k^13,b^40*c^8*e^5*g^2*h^11,b^56*d^12*f^3*g^9*i,b^58*c^2*i^3*j^4*k^4,b^60*c^12*f^3*g^7*j^2,b^71*c^14*h^2*k^5,c^3*e^8*f^11*g*h^4*i^3*j*k^3,d^3*e^3*f^5*g^4*h^2*i*j^7*k,c^20*e^7*f*g^16*k^4,d^49*e*f*g^2*i^2*j^4,c^12*e^18*f^2*g*i^9,h^13*i*j^5*k^8,c^3*d^18*e^7*g^2*h^7,c^9*d^31*f^2*h*i^2*j^7,c^21*d^24*g^3*i^4*j*k^2,c^56*e^8*j^4,d^8*e^2*h^3*i^15,e^5*f^9*g*i*j^7*k^5,d^7*f^7*h^4*j^3*k^9,c^31*d^8*e^4*g^10*i,c^10*f^11*g^7*h^2*j*k^3,d^29*e^3*f^5*i^2*j^4*k^3,c^28*d^18*f^8*j^3*k^3,c^2*d^2*e^7*f^12*h*i^4*j,c^14*f^4*i^6*k^8,d^13*e^14*f^9*g^6*j^2,c*d^6*e^7*f*g^11*i*k^6,c^3*d^37*f^7*g^5*k,c^32*e^4*f^5*i*j^8*k,c^7*d^19*f^4*g^7*i^4*j^3,f^3*g^4*j^13*k^3,c^5*d^9*e^29*i^2*j^2*k^2,f^5*h^5*i^7*j^7*k^3,c^49*e^3*g^6*h*i*j^2,c^5*e^2*g*j^2*k^19,c^5*f^5*g^10*j^7*k,f^9*g^7*h^3*i^4*j^5,d^14*h^7*i^2*j^2*k^10,c^3*e^20*f*g^3*j^6*k^4,e^9*f^3*h^5*k^4,b^2*c*e^20*f^7*g^6*h^3,b^4*d^11*e^2*f^6*i^2*j^7,b^4*c^9*d^4*i^4*j*k^6,b^4*c^11*d^35*f^4*h^3*j^3*k,b^6*c^7*e^13*f^10*g^2*j^5,b^6*c^19*e^6*f^2*g^7*i,b^6*c^21*d^19*f^8*g*h*j,b^6*c^33*d^12*g^6*k^4,b^8*d^44*e^7*h*k^2,b^9*c*i^20*k^4,b^10*d^28*e^18*f^3*g^4,b^10*c^8*d^52*f*g^3*h^3,b^15*h^10*i^2*j^5*k^4,b^15*c^9*f^2*g^8*h^5*i^6*j^2,b^16*d^7*e^4*g^2*h^3*j^6*k^2,b^17*c^9*e^8*f^4*h^8*j^3,b^18*c^10*d^15*g^8*h^5,b^20*d^20*j^13,b^20*e^2*f^8*g^4*i^4*j^3*k^3,b^21*c^27*h*i^4*j^4,b^22*c^14*e*g^10*j^5,b^23*d^11*e^8*h*i^8*k^7,b^23*c^2*d^5*g^6*h*i^7,b^23*c^51*f*g^2*h^3,b^25*c^2*d^26*e^6*h^4,b^27*c^12*d^10*e^17*f^4*h^2,b^31*f^2*i^4*j*k^10,b^33*c^4*e^3*h^6*j^9,b^33*c^9*f^12*j,b^41*d^14*e^6*f^2*g^2*i^2*k^2,b^41*c^9*d^28*g*h*k^3,b^49*c^2*e^3*g^7*j^5*k^2,b^52*d^6*e^8*f^4*h^2,b^68*d^8*k^7,b^70*c^9*d^23*h^2,d^18*e^22*f^8*g^6,c^2*e^23*g*i^8*j^2*k^4,d^25*e^5*h^2*i*j^10,c^2*d^4*e^10*f^7*g^4*i^5*k^5,c^4*d^35*f^13*j^2,d^2*e^7*h^4*i^14*j^2*k^2,c^21*d^2*e^9*g^10*j^2,c^4*e^5*f*h*i^5*k^12,d^31*f^4*g^5*j*k^5,c^16*d^4*e^3*f^11*h^4*k,d^2*h^18*i^6,d^13*e^5*f*g^7*i^3*j^6*k^3,d^13*e^28*f^6*g*h^2*k^2,c^29*h^4*i^3*j^7,c^34*d^10*f^6*i^2*k^3,c^8*f^10*i^13,c^2*d^9*e^22*g^2*h^2*i^4*j*k,c^7*d^19*e^14*f*g^2*i^3*k^4,d^5*e^7*f^3*i*j^10*k,d^15*f^17*j^2*k^4,i^3*j^4*k^10,c*d^29*f*h^4*j^6*k^5,d^24*e^3*f^2*g^5*i^4*j^5,e^18*f^7*g^2*j^8,c^9*e^11*g^7*j^2*k^4,c^11*d^13*f^5*g*h^2*j^4,e^7*f^9*h^5*i^6*j^2,f*g^3*h^4*i^8*k^4,d^32*f^4*g^11*h^2,c^9*d^3*e^27*f*j^3*k^2,d^11*e^16*f^3*h^7*i*k^2,c^9*d^5*f^11*g^4*h^7,d^22*e^23*g^4,c^8*d^9*g^23,c^3*d^3*f^4*i^11*j^3,c^7*e^27*f^7*h^5,c^40*e^6*i^3*j^3*k^6,b*d^14*f*g^13*i^6*j^4,b^3*c^2*d^28*e^9*g^5*i*k^2,b^3*c^4*d^59*f*j,b^3*c^37*e^24*g^2*j^2,b^4*f^11*h^4*k^11,b^4*c*f^5*g^2*h^11*j^7,b^4*c^25*d*e^13*f^2*i^3,b^5*d^11*e*f^8*g^2*j*k^9,b^6*e^13*f*h^9*j^6*k^2,b^8*e^9*g^5*h^9*i*j,b^8*d^3*e*f^14*g^5*h^2*k^3,b^9*d^14*e^2*j^16,b^9*d^17*f^3*g^3*j^2*k^11,b^9*c^11*f^5*h^18,b^11*c^6*d^22*g^4*j^10,b^12*g^6*h^2*i^6*j^2*k^2,b^12*c^27*e^10*g^3*j^5,b^13*c^15*f^2*h^7*i^8,b^14*e^16*f^5*i^3*k^8,b^14*c^2*e^6*g^13*i^3,b^16*c^2*d^4*e^22*f*h^3*j,b^17*c^33*i^13,b^19*c^33*e*h^3*i^6*j,b^20*c*d^2*h*k^18,b^21*e^17*i^12,b^22*f^9*j^4*k^3,b^23*c^18*d^2*e^8*f^2*g^4*h*i^6,b^24*d^12*f^8*g^8*k,b^25*f^15*g*h^5,b^25*c^6*h^16,b^26*c^17*f^4*j^5*k^5,b^29*c^15*f^10*g^2*i^5,b^30*d^8*e^11*g^2*i*k^6,b^32*c^9*d^6*e^10*g^8*j*k,b^41*e^13*f*h^3*j^3*k^4,b^41*c^4*f*g^9*h^2*k^4,b^43*d^19*e^9*h^3*i^2*k^2,b^47*c^8*e^10*i*j^2,b^48*f^2*h*i^9,b^57*g^12*j^2*k^2,b^58*c^22*f^2*g^5*h^5,b^59*d^17*h^3*j^3,b^64*d^7*i^7*j^2,b^93*c^3*f^2*i,c^10*d^8*e*f^3*h^3*i^12,d^4*e^3*g^6*h^7*i^7*k^4,c^24*d^4*f^3*i*j^2*k^7,d^2*f^6*i*k^17,c*d^7*e^3*f^2*g*h^3*j^7*k^3,d*e^4*f^20*i^4*k^2,d^5*e^21*h^8*k^6,e^3*f^8*g^4*h^8,c^5*e^9*g^3*i^2*j^12*k,c^10*e*f^13*g^3*i*j^4*k^4,f*i^10*j^6*k,c^29*f*g^9*j^6,c^17*d^5*f^3*g^5*h*i^4,d^53*e*j^4*k,c^15*e^18*i^2*k^2,d^45*e*f^4*g^2*h^4,c^39*d^3*e^9*f*g^4*h,c^27*d^11*f^3*h^8*i^4,c^33*d*e^4*i^7*k^4,c*f^2*h^19*k^4,c^9*d^16*f^4*i^13,c^10*d^51*g^3*i^5,b*d^24*h^8*j^7*k,b*c^24*f^17*j^2,b^2*e^3*f^21*h^2*i^4,b^2*c^5*e^4*h^8*i^7*j^2*k^2,b^2*c^7*f^5*h^13*i^2*j^4,b^3*e^11*g^13*h*i^2*j^3,b^3*d^8*f^2*g^7*h^6*j^5,b^3*d^17*e*k^16,b^5*d^6*g^2*i^8*j^12,b^5*e^27*h^4*j^4,b^5*d^8*e^19*f^12*k,b^5*c^6*d^22*e^7*h^8*k^2,b^5*c^37*j^11,b^6*d^6*e^16*h^11*i^3,b^7*c^12*d^14*g^8*i^2*j^6,b^9*c^10*d^4*e^13*g*j^5,b^9*c^12*d^35*h^2*j^7,b^9*c^15*d^14*e^5*f^7*g*k^3,b^10*d^12*e^2*h^4*i^8,b^10*c^33*e^17*h^2*i^2*j^2,b^11*c*g^3*j*k^16,b^12*c^8*e^13*g^4*h^2*i^5,b^13*d^6*e*f^5*g^8*h*j^2*k^5,b^14*h^17*j^3*k^2,b^15*c^7*f*j^8*k^9,b^18*c^5*f^7*g^2*i^4*k^3,b^20*c^3*e^20*f^3*i^2*k^6,b^22*d^25*e^3*f^8*h^2,b^22*d^18*g^4*h*i^2*k^8,b^25*c^10*d^23*f*g^4*j^3*k,b^26*d^31*f^3*i^5*k,b^26*c^33*e^4*f^8,b^30*f^6*g^4*h^4*j^5,b^34*f*g^5*i^2*j^6*k,b^36*e^15*j^5*k^4,b^36*d^15*e^2*f^3*j^7,b^36*c^12*d^8*j*k^8,b^38*c^22*e^6*g^4*k^2,b^39*c^10*f*h^4*i^2*k^2,b^47*c^12*g^5*h^6*j^2*k^2,b^49*d^5*e^5*f^12*k^3,b^51*d^3*e^4*g^2*h^9,b^52*d^3*e^2*f^5*g*j^3*k^5,b^55*c^5*d^9*g^3*h^2,b^82*k^4,b^109*c^14*d*g,d^2*e^6*h^4*i^11*j^3*k^3,d^16*g^3*j^2*k^17,c^17*d^9*e^21*g*h^2*i*j^2*k^2,c^14*j^5*k^11,d^17*g^9*i^3*k^9,d^22*e^22*f^5*g^3*k,d^12*e^17*f^4*g*i^9,e^8*f^5*g^4*h^9*j^2*k,d^14*e*f^2*j^17,e^3*i^9*j^9*k^5,d^6*e*f^8*h^3*i*j^9,d^16*f^22*j,c^7*g^5*h^2*i^3*j^3*k^3,c^5*e^23*i*j^2*k^6,c^7*d^20*e^10*f^2*h^5*j^4*k,c^17*e^5*f^4*g^12*j,d^39*e^6*f*g^2*h^5,c^17*d^5*e^3*h^9*i^3*k^4,d^10*e^5*f*h*i^12*j^3,d^45*g^3*i^4*k,c^35*d^10*e^7*f*j^3,c^9*e^16*f^5*i^9*j,c^23*d^18*f^3*h^3*i^6,d^4*e^4*f^11*g*i*j^6*k^4,f^3*g^6*i^3*k^13,c^9*e^7*h^7*j^13*k,c^14*f^14*j^5*k^4,e^8*f^18*h^3*i^3*j^3,c^2*d*f^16*h^7*k^4,d^2*e^3*g^7*h^7*j^8,d^12*f^13*g^7*k^2,c^2*d^8*g^8*i*j^9*k,d^8*e^12*g^2*h^14,c^30*f^15*g*i^2,e^18*g*j^8*k^4,c^2*d^29*e^5*h^3*j^10,c^5*d^8*e^10*f^4*g*k^7,c^12*g^15*j^7,b*e^18*g^4*h^3*i^4,b*d^21*e^5*f^2*h^8*j^2,b*c^3*e^10*f^10*g^4*i^3*k,b*c^47*e^13*h^5,b^3*e^5*f^3*i^14*k^5,b^5*c^4*d^3*e^11*i^7*j^7,b^5*c^16*e^4*g^5*i^9*j,b^5*c^53*e^6*f^2*j^6,b^6*d^11*f*h^4*i^15*j,b^7*f^4*g^2*i^3*j^3*k^7,b^7*c^28*d^11*e^2*f*g^6*i*j,b^11*d^19*e^8*f^5*h^3*k^3,b^11*c*f^7*i^6*j^10,b^13*d^3*e^19*f^9*g^6*h,b^15*d^25*i^4*k^5,b^15*c^23*e^9*f^5*j^3*k,b^16*c^11*f^7*h*i^6*k,b^17*d^9*e^5*f^4*g^7*i,b^19*c^5*d^13*e^22*h^3*j*k^3,b^23*g^5*i*j^9*k^5,b^23*c^16*d^36*e^7*f,b^25*c^2*d^2*j^4*k^12,b^26*f^4*g^8*h^3*i^6*j,b^28*d*e^7*f^6*h^6*j^2,b^30*c^10*e^11*f^2*g^7*h^3,b^31*c^18*e^4*j^9,b^32*c^6*d^7*f*i^4*j^3,b^32*c^53*e*k^4,b^34*c^16*e^4*f^5*g^3*i*j,b^36*c^28*d^5*e^13,b^40*c^8*g*h*i*j^12,b^44*d^10*e^2*h^4*j^8,b^44*d^3*g^3*h^3*j^2*k^4,b^46*c^5*e^6*g^10*h,b^55*c^21*d^6*e^8*g*h^2,b^65*d^4*e^11*f^2*g^2*k^2,b^80*d^2*h^2*i^2*k^2,c^2*e^4*f^3*g^2*h^5*i^4*k^9,c^8*f^6*i^7*j^7*k^2,c^48*d*e^3*i^4*j*k^5,d^10*f^19*j^4*k,g^5*h^3*i^2*j^6*k^7,c^21*d*g^11*h^5*k^5,c^3*d^6*g*i^5*j^13,c^25*d^4*e^12*j^6*k,c^13*d^12*e*h^4*i^5*k,d^23*e^8*g^10*j,c^49*d^12*e^3*g^6,c^11*f*h^17*j^4*k^3,c^41*d^2*g^4*i^7,d^9*e*g^3*h^2*j^18,d^2*g^8*h*j^12*k^5,c^20*f^12*g*i*j*k^4,d^10*e^4*f^3*i^5*k^11,c^3*d^4*e^3*f^2*h^16*i^3*j^4,e^15*f^7*g^4*i^2*k^5,d^25*e^2*f^13*h^2,c^2*d^8*e^3*g^3*h^8*k^6,c^7*d^18*f^5*g^3*h*k^9,c*d^15*e^8*f^4*j^10*k^4,e^16*i^6*j^10,d^7*e^8*f^10*i^5*j^2,c^8*d^21*h^2*i^3*j^6,c^11*e*f^2*g^5*i^7*k^7,c^13*d^31*f^8*i^2*k^2,g*h^5*j^2*k^15,c^6*d^11*e^25*i*j^5*k^2,c^6*d^13*g^2*h^7*i^8,f^11*g^3*h^4*j^6,f^4*i^5*j^13*k^4,c^7*e^21*g*h*k^12,b^2*h^5*j^21,b^2*c^15*f^6*g^4*j^7*k^2,b^3*f^10*g*i^10*j^5,b^3*c*f^2*g^6*i^12*k^7,b^4*c^13*e^14*f^2*j^6*k^5,b^4*c^27*d^8*j^2*k^9,b^5*c*e^3*f^4*h^2*i^5*k^5,b^6*d^3*e^10*f*g^7*j*k^3,b^6*d^34*f^7*g*j^3,b^6*c^2*d^27*g^6*k^7,b^6*c^37*e^5*f^4*g^3*k^3,b^7*c^11*e^14*f^8*i^2,b^7*c^13*d^7*e*f^14*h^5,b^7*c^25*f^6*h^4*k^3,b^8*c^12*d^11*e*f^3*g^13*k,b^11*d^9*e^19*f*g^2*h^2*k^4,b^11*c^29*f^3*g*i^7*k,b^12*c^16*e^7*g^15*i^2,b^17*e^12*f^3*h^7*j^5*k,b^17*d^5*e^4*f^17*k^4,b^17*f^9*k^13,b^17*c^2*f^3*g^14*h^6*k,b^19*e^16*g^7*h^4*k^4,b^19*c^2*d^3*e^3*f^5*g*h^9,b^21*d*i^3*j^6*k^3,b^23*c^6*e^9*f^2*g^3*j^4,b^23*c^20*d^9*g^2*h^2*k,b^24*f^4*h^5*i^8,b^25*d^4*e^5*f*g^13*i^3,b^25*c^18*e^18*k^4,b^28*c^12*i^13,b^28*c^16*e^18*f^2*h^5,b^30*c^12*d^20*f*h*i^6,b^32*c*f^16*g^4*i^4,b^33*d^7*f^3*g^3*k^11,b^40*d^2*g^2*h^3*i^6*j^4,b^42*c*d^16*e^2*h^5*i*k^2,b^50*f*g^3*i^6*j*k^5,b^71*e^15*h,e^2*f^9*g*h^5*i^11*j^2,d^8*e^18*g^7*i*k^5,c*d^21*e^11*f^3*g^3*i^4*j^5,f^8*g^5*j*k^14,d^10*f^6*g^2*h^14*i*j^3,c^3*d^6*e^6*h^5*i^4*j^3*k^5,c^13*e^17*f*g^3*h^3*i*j,e*h*i^20*j^2*k^3,c^31*e^3*g^4*i^6*j^2*k,c^5*e^12*g*i^17,d^52*e^4*h*i^5*k^3,c^10*f^9*g*j^4*k^8,d^12*f^2*g^3*h^2*k^13,c^4*g^17*h^9*j*k,c^4*d^17*e^6*g^4*h^12*j^2,d^25*h^19,d*e^13*f^7*i^4*j^5*k^2,c^3*d^25*f^5*i*j*k^6,c^13*d^9*e^4*f^9*g^6,d^7*e*g^2*h^8*i^7*j,c*d^17*f^11*g^2*h*i^6,c^7*d^7*f^2*g*i^9*j^6*k^4,e^30*h^6*i^5,c^6*e^12*f*g^9*h^6*i^4,c^29*d^5*e^19*i*k^5,c^12*d^3*e^16*i^10*j*k^2,e^8*f*h^3*i^4*j^3*k^9,c^3*f^9*g^7*h^3*i^3*j^2,d^21*g^6*k^11,d^5*e^4*g^3*h^3*i^7*k^7,c*e^19*f^5*h*i*j*k^3,c^3*d*e^6*f^11*h^6*j^3,c^15*f^3*h^5*k^7,c^2*d^5*e^6*g^13*k^5,d^20*e^2*f^10*g^4*h^6,d^34*g^2*j^7*k^4,c^33*e^3*f^4*j^10,d^10*e^31*f^6*h^4,e^6*f^6*g^16*h^3,c^12*e^4*f^22*i^3,c^19*e^5*g*i^6*j^2*k^5,c^21*d^7*f^6*i*j^4,b*e*f^10*h^2*i^12*j^2,b*c^7*f^2*h*i^14*k^5,b*c^8*d^18*f^3*g^9*j^5,b^2*d^26*f^5*g^5*i^4,b^2*c^31*e^3*f^10*g^2*j^2,b^2*c^45*d^15*f^8*g*h,b^3*c^6*d^8*e^28*g^2*j^4*k,b^4*d^16*e^17*f*i^2*k,b^4*d^47*e^4*f^7*h^2,b^4*c^8*d^40*h*k^5,b^6*c^4*e^28*f^5*g^5,b^6*c^18*d^24*e^8*f^3*g^4,b^8*c^12*d^22*e^3*i^7*k^3,b^8*c^47*e^18*f*i*j^2,b^10*e^3*h*i^2*j^9*k^7,b^10*d^5*f^9*i*j*k^10,b^10*f^3*g^10*h*i*j^8,b^11*c^10*d^14*e^3*f^2*g^2*i^12,b^12*e^14*g^3*j^7*k,b^12*d^10*e*f^5*h^4*j^9,b^12*c*e^6*f^13*g^3*k^4,b^12*c^10*d^3*g^2*h^3*j^3*k^5,b^13*e^3*f*h^6*i^7*j*k,b^13*d^11*h^10*i^4*k^5,b^14*e^10*g^13*i^2*j^2,b^14*c^20*e^5*f*g^9*h*j,b^15*c^8*f^3*g^5*h^8*i,b^16*d^6*e*g^19*h,b^16*c^2*e^7*f^2*i^2*j^14,b^16*c^16*d^16*j^10,b^17*f^4*i^10*j^8,b^17*c^2*i^12*j^2*k^3,b^17*c^6*e^23*h^6*k^2,b^18*c^38*g^10*j^2*k,b^19*c^2*d^14*e^5*h^2*i^5*j^3*k,b^19*c^12*g^7*i^9,b^20*c^3*d^49*k^3,b^21*c^12*e^16*f^2*i^2*j,b^22*d*g^3*k^15,b^25*e^4*f^14*g*h^4,b^28*e*f^7*g^6*j^5*k^2,b^29*d^6*f^9*g^2*i^4*k^2,b^31*c^3*d^4*g^8*h^6*j,b^35*d^2*e^5*i^7*k^7,b^37*c^19*e^4*g^2*i^2*j*k^2,b^39*f*h*j^3*k^9,b^41*d^2*g^9*h*k^7,b^47*d^5*e^14*j^4*k^3,b^47*d^29*k^7,b^48*c^14*d^2*f^4*h^2*k^3,b^49*c*d^13*e^5*f*g^4*k,b^58*f*g^5*h^4*j*k,b^64*c^9*d^11*j^3*k,b^66*c^19*e^4*f^2*j,b^110*f^2*h*j,c^5*d^39*g^2*j^4*k^6,c^5*f^2*g^10*h^6*i^2*j^5,c^3*e^22*g^3*h^4*j^4*k^3,d^13*e^4*i^6*j^13*k^2,c^9*e^15*f*i^3*j^11,d^30*e^20*g*i*j*k,d^19*f^2*j^4*k^10,c^5*d^34*f^12*j^4,d*e^6*g^2*h^9*i^6*j^4*k,c^31*d^15*e^4*f*g^2*i^2*k^7,c^5*e^13*f^5*i^13*k^3,d^5*e^3*f^22*k^5,c^5*e^4*h^6*k^11,d^3*f^10*h^14*i^3*k^2,d^7*g^9*h^6*k^9,c^11*d*f^3*j^7*k^4,e^6*f^7*h^3*i^11*j^5,d^20*f^2*g^5*i^3*j^2*k^2,c^33*e*g^7*k^7,e^15*f*h^5*i^6*k^7,c^9*f^9*h^5*i^5,d^10*e^22*i*j*k^5,d^4*e^4*f^6*g^12,c^15*e^3*i^8*j^12*k^2,c^8*d^18*e^13*g^4*k^3,c^39*f^2*g^3*i^2*j^6,d^2*e^22*f^4*g*h^3*i^6,d^26*e^2*f^2*h^7*i^3*k^3,c^27*f^4*i^10,d^37*e^9*g^14*k,c^2*d^16*e^8*i^6*j^2*k^7,c^27*d^20*f^6*h*i^3*j,g^10*h^2*j^11*k^2,c^61*e^14*g^2*k,d^8*e^8*g^2*i^11*k,c^2*d^39*f^5*h*i^6,c^49*e^3*f^2*i^2*k,b*g^2*h^4*j^6*k^9,b^2*e^7*f^20*h*i^3*j^2,b^2*c^12*d^23*e^6*f^9*g^3*i^3,b^4*g^5*h^9*k^3,b^4*d^20*f^6*h^14,b^4*c^3*f^14*g^5*h^2*k^6,b^5*e^6*g^19*h^2*k,b^5*c^6*d^10*j^13*k^2,b^6*e*f*h*i^9*j^11,b^6*d^10*e^15*f^2*h^12*k,b^6*c^29*f^4*h^3*j^10,b^8*c^2*e^5*g^7*i^8*j^3*k,b^8*c^4*d^2*f^3*g*h^3*i^3*j^5,b^8*c^16*g^6*h^2*i^5*k^5,b^8*c^51*g^3*j^2*k,b^9*d^13*g^15*j^6,b^10*c^2*e^21*h*i*j^4,b^10*c^16*d^16*e*h^5*k^3,b^10*c^26*g^13*i^2,b^11*c^3*d^27*e^8*g^7*j*k,b^12*c^26*e^12*f*h^3,b^16*c^44*d^6*g,b^17*c^18*e^7*i^11,b^18*f^6*g^2*i^3*j^2*k^6,b^18*c^9*e^10*f^11*j^5*k^2,b^20*e^6*f^10*g^9,b^20*d^14*e^4*k^13,b^21*c^16*f*g*h^12*j,b^22*e^15*f^4*g*k^7,b^26*c^2*d^11*e^8*f^7*j^2,b^26*c^14*d^4*e*g^2*k^9,b^29*e^16*h^4*i^4*j^2,b^29*d^3*e^8*f^13*i^3,b^29*c^12*e*f^5*g^5*i^5*k^3,b^31*c^19*d*e^7*f*g^6*h^6,b^35*f^7*h*i^3*j^5,b^35*c^4*g^3*i^5*k^9,b^39*d^15*h^3*i*k^5,b^43*c^32*k^3,b^51*f*g*i*j^11,b^53*d^5*h*j^6*k^5,b^55*c^9*e^9*j^4,b^56*f*h^6*i,b^74*c^2*e^4*g^6*h^2*j^2,c^46*e^2*f*g^3*i^3*j^3*k^2,e^20*i^2*j^14,c^11*d^7*f^2*g*h^8*i^4*j^2,c^27*d^3*e^15*i^7*j^2*k^3,d^20*e*f^15*g^3*h^6,d^3*e^2*g^8*h^12*j*k^3,c^9*f^4*g^10*i^6*k^4,c^11*d^26*f^10*g^4*i,c^4*d^6*e^24*h^4*j^7,c^9*d^16*e^16*f^6*k^2,c*d^6*e^11*f^5*i^15,c*e^2*h*j^10*k^8,c^25*d^3*f^2*g*h^3*j^4*k^6,e^2*f^6*h^6*i^4*j^2*k^2,e^9*f^3*g^12*j^3,d^22*f*g^11*h^3*k^4,d^20*e^7*h^8*i^2*k^7,c^17*f*i^9*j^3*k^4,c^6*d^35*f^4*g^7*j^6,c^17*d^14*e^4*f^3*h^2*i^2*j^4*k^2,c^4*d^25*e^11*j^5,d^33*f^2*h^2*i^5,c^39*e^8*i*k^5,c^28*d^33*e^2*f^2*g^6,c^2*d^17*e^11*f^6*g^3*i^2,c^9*e^12*g^8*h^6*i^5,e^3*f^19*h^4*k,e^4*g^5*h^10*j*k^7,d^15*e^6*i^13*j^4,d^7*e^40*f^2,e^2*f^2*g^4*i*j^6*k^14,c^19*e*f*h^4*j^13*k^2,c^11*f^12*g^5*j^6*k^3,g*h^4*i^2*j^8,d^6*f^14*g*i*k^3,c^6*d^10*e^6*h^6*j^3*k^7,c^16*e*g^13*h*i*k^3,c^18*d^4*f^2*g^7*h^6*j^2,b*d^9*f^3*i^5*j^15,b*c^16*e^17*h^4*j*k,b*c^47*i*j^12,b^2*c^4*d^2*e^6*h^11*i^2*k,b^3*e^33*g^11,b^3*c^12*d^23*j^10,b^3*c^15*d^2*e^4*f^5*i^4*k^8,b^4*d^21*e^2*g^6*h^11*i^5,b^4*c^2*d^13*e^11*f^2*g^9*j*k^6,b^5*c^22*d^7*e^10*f*j^8,b^5*c^34*e^3*g*j^2*k^3,b^6*c^8*e^12*i^10,b^6*c^10*d^15*f^3*h^5*i^5*j^2,b^7*e*h^7*i^18,b^7*d^26*e^6*g^6*j^3,b^8*c^8*d^5*e^28*h^3*i^3*j,b^8*c^32*e^3*g^4*h^2*i^4,b^10*c^6*e^3*g*h^13*j^4*k,b^14*c^5*e^6*f^7*i^2*j^4*k^6,b^15*d^5*e^13*f^4*j^5*k^4,b^15*c^4*e^6*g^2*k^13,b^16*d^13*e^2*f^6*i^5*k^4,b^17*c^16*d^13*e^4*f^6*g^3*k^2,b^18*d^11*e*h^9*j,b^18*c^4*d^21*f^8*h^2*k^2,b^20*d*e^30*h^7*k^2,b^22*c^8*d^3*f^5*g*i^7,b^28*c^4*e^19*f^2*h^2*j*k^5,b^32*c^22*e^5*j^2*k^7,b^33*e*f^7*h^3*i^5*j^2,b^34*d^6*e^8*f^4*g^3*j^3,b^34*d^30*f^2*g^2,b^43*c^13*d^18*e^3*i^5,b^44*e^14*j^7*k^3,b^45*e^3*h^7*j*k^3,b^47*c^11*g^2*h^9*k,b^49*d^4*f*h*i^3*j^8,b^49*c^5*i^5*j^2*k^5,b^51*c^15*g^4*i^2,b^82*d*e^14*f^2,c*d*e^5*g*h^9*i^3*j^5*k^2,d^47*e^3*h^5*i^4*j^2,e^12*f^9*g^5*i^3*j^7,d^10*g^4*h^7*i*j^11,c*d^20*f^7*g^4*j^3*k^3,c^27*e^18*f^2*g^5*j*k^2,c^13*f^5*g^4*h^9*k^4,e^5*f^2*g^18*h^2*k^2,f^6*h*i^6*j^12,c^7*i^8*j^6*k^8,d^29*f*g^7*j^9*k,c^7*d^8*e^9*h^3*i*j^7*k^6,c^19*d^2*f^8*h^3*j^6,d^19*e^16*j^8*k^4,c^8*d^43*j^4*k^8,d^27*e^5*h^3*i^4*j^2*k^4,c^29*e^13*k^9,c^31*d^16*f^2*h^5*j*k^4,d^11*e^16*f^3*g^3*h*i,c^6*d^35*f*g^2*h^5*k^2,d*e^45*k,c^23*d^6*f*h*i^11*k^2,c^10*d^17*e^2*g^4*i^6*j,c^59*d^6*f,d*e^11*f^2*g*i^17,e^2*g*h^5*i*j^11*k^4,f^11*g*j^3*k^7,d^57*e^14*g*i^2,c*d^14*e^3*f^5*k^14,c^8*g^7*h^7*j^5*k^2,d^3*i^4*j^18,d^6*e^3*f^11*h^5*k^8,d*f^2*g^24*h^5,g^5*h^3*i^11*j^4,c^4*e^22*f*g^3*h^10,c^18*d^4*e^2*g^2*h^14*k^3,c^12*d*e^15*j^11,d^9*e^4*h^6*i^4*j^5,c^12*d^2*h^5*i^6*k^7,d^30*e^3*f^11*g^6,d^13*e^4*g^11*i*k^5,c*d^44*g^5*h^3*j^2,c^10*e^15*f^4*h^4*i*j^3,c^15*d^3*e^7*f^18,c^24*d^17*f^2*h^8,c^27*f^10*g^4*i^2*k^4,d^10*e^40*j^5,c^30*d^7*e*i*j^12,c*f^9*g*h^7*k^8,h^2*i^20*j^4,b*c^28*e*i^6*j^4,b^3*c^7*f^12*h*j^6*k,b^5*d*f^11*g^7*h*i^3*j,b^5*c^3*d^39*e^13*i^2,b^7*e^18*f^7*i*k^2,b^7*d^5*e^6*h^10*j^4*k^3,b^9*d^5*e^27*f*h*k^9,b^9*c^4*e^9*f^9*g^6*h,b^10*d^7*f^11*g^2*h^8*i^3,b^10*c^12*d^20*e^2*f^6*j^9,b^11*e^4*f^2*g*i^6*j*k^4,b^11*d^28*f^8*i*j^3,b^11*c^47*f^5*k^4,b^13*c^17*e^3*g^7*h*i*j^3,b^13*c^22*d^5*f^4*g^7*k^2,b^16*c^8*d^3*e^13*f^2*i^6*k^5,b^21*c^14*d^5*h*j^7*k^6,b^24*d^8*e^2*f^3*h^4*i^7,b^24*c^10*e^10*g*h*i^3*k^5,b^24*c^12*f^6*h^6,b^25*d^8*e^4*f^3*g^9,b^28*d^14*i^12*j*k^2,b^28*d^6*e^22*f*h^4*k,b^28*c^30*d^3*f*i^3*k^2,b^29*c^17*d^14*g^10*j,b^30*c^5*d^22*g^6*i^6,b^32*c^52*d*e^3*k^3,b^38*e*h^2*i^2*j^11,b^38*d*f^4*i^3*k^12,b^40*c^7*d^6*h^4*j^5,b^42*d^25*g^8*h^4,b^45*i^12*j^4,b^48*d^21*e^3*g^2*i^2*k,b^48*c^47*d^10*k,b^69*d^5*f^3*g^5*h^2,b^78*c^33*f^3,d^5*e^2*f^10*g*h^3*i*k^9,d^7*e^3*f^2*g^14*j^10,d^5*e^21*g^3*h^2*j^3*k^2,d^29*e*g^2*h^6*k^6,c^13*h^2*i^10*j^3*k^6,c^2*d^42*f*j^6,c^49*e^2*j^3*k^4,c^23*e^11*f^2*i^7*j,f^8*g*j^6*k^11,c^10*e^18*g^11*i^2*j^2,g^7*h^8*j^8*k^6,f^2*g^10*h^13,c^4*d^5*g^3*h^2*j^15,f^17*i^7*j^5,d^13*e*f^11*i^2*k^5,c^2*e^2*h^6*i^5*j^2*k^11,c*d*g^25*j^2,e^20*f*h^5*j^6,c^5*e^12*f^15,c^14*d^11*h^9*j^2,d^16*e^2*h*i^6*j^15,c^12*d^3*f^5*g*h^14*i^2,c^18*e^6*i^5*j^7,c^23*d^3*f^10*i^4*k,c^32*d^17*h^2*i^2*j^3*k^2,c^6*d*h^5*i^13*j,d^43*f*g^4*h^3*i^3*j^4,f^9*h^2*j^9*k^5,c^9*f*g^2*h*i*j^3*k^14,c^30*d^7*e^15*j^2*k^5,c^42*d*g^6*j,c^6*d^22*e^11*h^8*i^6*j^2,f^8*g^7*h^2*i^2*j^4*k^3,c^3*e^13*g^17*i^5,c^4*h^18*i^2*j^5,e^23*f^4*j^3*k^6,d^9*e^3*f^2*h^4*k^10,d*e^3*f^8*g^2*h^9*i^2*k^4,c^2*d^14*e^7*f^3*j^12*k^3,d^12*e^4*h^5*i*j^14,e^9*g*i^5*j^4*k^8,d^22*f^5*j^6*k^3,c^2*d^15*i^2*k^12,c^37*e^4*f^2*j^3*k^8,b*c^13*f^12*h^3*i^2*j^3,b^2*d^41*f^4*g^5*i^3*j*k,b^2*d^6*e^7*f^9*g^2*j^4,b^2*c^12*f*g^7*k^6,b^2*c^14*d^30*f^7*g*k,b^3*g^3*h^9*i^8*k^3,b^3*c^35*e^4*f^8*i*k^2,b^5*d^4*e^25*f^7*h*i^3,b^5*e^18*i^5*k^9,b^5*c^7*d^12*g^4*h^12,b^5*c^10*f^7*g^10*i^4,b^8*c^16*d^2*e^22*j^4*k^2,b^10*d^4*f^2*g^10*j^10*k,b^13*c^2*e^2*f^3*h^7*j^2*k^4,b^15*d^10*f^2*g^5*h^7*k^2,b^16*e^2*f^9*h^12*i^2,b^17*c^6*e^8*i^5*j^7*k^2,b^17*c^8*d^4*f^6*h*j^9,b^17*c^20*i^2*j^3*k^6,b^19*e^4*g^7*i^8*j^2,b^19*d^23*f^5*g*h*i^3*j^4,b^19*c^30*f^2*g^3*j,b^20*f*g^3*h^3*i^16,b^20*c^4*e^8*f^6*h*i^10,b^20*c^18*f^4*h^5*i^7,b^21*d^37*h^3*k^2,b^21*c^5*f*g^13*i^2,b^23*c^5*d^21*e^11*f^3*h,b^25*d^19*e^6*i^6*j^4,b^27*f*i^2*k^16,b^29*h^5*j^8*k^2,b^29*e^2*f^5*g^4*k^10,b^31*c^12*f^15*g^5,b^32*f^3*g*h^10,b^44*c^41*d^9*j,b^50*d*e^13*f^7,b^54*c^6*e^7*i*j^6,b^54*c^11*d^7*f^2*k^2,b^58*g^5*h^3*j^3*k^4,b^63*c*f^2*h*i^5*j*k^2,b^64*g^13*j^2,b^67*c^23*e^5*h*k^3,b^69*e*g^8*h*k,b^71*e^3*i^9*j^2,e^17*g*i^6*j*k^10,c^25*d^17*e*f^3*g^3*i^3*j^2*k,e*f^8*g^3*h^10*i^3*j^4,c^15*d^9*e^3*f^5*h^6*i*j^6,d^28*f^4*g*h^6*i^4*j,c^37*e^7*f*g^3*h^3*k^2,d^10*e^39*j^6,d^18*e^28*h^4*i^2,d*f^16*g^6*h*j^2,e^17*f^12*j*k^3,c^4*d^5*e^5*h^10*j^5*k^4,d^13*h^17*i^4*k^4,c^2*e^5*f^2*g*h^15*i,c^13*e^3*f^7*i^3*j^2*k^5,h^6*i^12*j^4*k^2,c^32*e^2*g^6*h*j^4,d^16*e*f^2*j^9*k^7,d^9*i*j^3*k^16,c^3*e^5*f^9*h^4*i*j^6*k^3,c^15*f*h^3*i^3*k^12,d^35*f*g^5*i^2*j^4*k^5,e^12*f^6*g^2*j^7*k,c^2*e^5*g^7*j*k^10,c^4*d^24*f^4*g*h*j^3*k^5,d^8*e*f^8*h^4*i^4*j*k,e^30*f^4*h^2*i^2*k^4,d^22*e^10*f^2*h^6*k^8,d^6*g^4*h^13*j^3,c^2*d^16*f^10*g^4*h^6,c^8*d^6*f*g^3*i*j^8*k^3,d^14*f^3*i^9*j^2*k^3,d^6*e^21*f^6*h^4*k^2,c^7*e^11*g^11*h^11*j,c^31*e^2*f^8*i^3*j^5,c^45*d^3*f^6*j*k^3,d^35*e^3*f^5*i^2*j^3*k,c^6*f^7*g^6*i^6,c^8*d^29*f^13*i*j^2,c^30*d^4*e^18*g^2*j*k^4,c^4*e^27*f^3*i^4,c^13*d^2*e^15*h^4*i^2*j^3*k,c^18*d^12*e^7*f*i*k^4,b^2*d^31*e^3*g^8*i^4*k^2,b^2*f^14*h*k^11,b^4*d^4*e^3*g^5*h^8*k^6,b^4*f*g^4*i^6*j^11*k^3,b^4*c^2*e^18*f^4*g^2*h^6*j^3*k^2,b^5*f^20*h^6*k^5,b^5*c^10*d^2*e^2*i^17*k^2,b^8*d^17*f^2*g*h^2*i^2*j^7,b^8*d^10*g^6*h*i^4*j*k^8,b^8*c^8*e^11*f^7*j^10,b^8*c^13*e^3*f^21*j^2,b^8*c^20*e^4*g^3*j^4*k^4,b^8*c^22*d^6*f^5*h^4*j^6,b^9*c^8*f*h^6*i^6*k^4,b^9*c^10*d^14*f^7*h^11*i,b^10*d^7*e^25*j^6*k^2,b^10*e^18*i^2*k^11,b^10*g^13*i*k^2,b^10*d^25*f^4*g^7*h^4*j,b^12*e^2*g^3*i^10*j^12,b^12*e^36*f^2*g*j^4,b^12*d^15*e^16*h^2,b^12*c^19*d^2*g^19*h,b^12*c^26*f^2*i*j^11,b^13*c^26*i^11*k^6,b^16*e^22*g^2*i^2*j^5,b^16*e^4*f^2*h^5*i^15,b^16*c^13*d^21*e^2*g*j*k^2,b^17*d^5*e^11*i^10,b^17*c^36*e^6*f^2*i,b^18*d^4*f^8*j^3*k^9,b^19*c^11*d^13*e^2*f*g^4*i^4,b^21*e^2*g*h^11*j^3,b^21*d^10*h^15*k^4,b^21*c^5*d^11*i^15,b^22*f^5*i*j^8*k^7,b^25*f^3*h^5*i^2*j^10,b^25*d^9*f^17*i*j^2,b^25*c^8*d^2*f^9*g^2*i^3*k^5,b^26*d^3*g^16*j^5,b^27*c^6*e^9*f^5*i*k^8,b^27*c^13*g^9*h^2*i*j^2,b^33*c^31*d^3*e*j^4,b^39*e^18*f^4*k^4,b^43*c*d*e^4*j*k^6,b^56*d^12*e^2*h^5*k^2,b^62*d^2*g^4*i^2,c^33*e^5*f*i^2*j^8,c^8*d^12*e*g^9*i^5*j^3,e^10*g*h^16*k^2,d^12*e^3*h^5*j^15*k,c^17*d^15*f^2*j*k^13,c^10*e^14*g*h^3*j^13,c^15*d^6*e^6*f^14*g*j^5,c^3*d^14*f^16*h^3*i^2,c^10*g^2*h^9*i^5*j*k^4,d^25*e^2*f^13*g^11,c^6*d^21*e^17*f^4*g^5*k,e^17*f^3*g^2*j^10*k^5,d^18*f*g*h^2*j^6*k^9,e^5*g^4*h^14*j^6,d^10*f^7*g^4*h^7*k^3,e^3*g^3*j^11*k^7,d^23*f^10*h*j^5,c^10*d^16*f^2*g^5*i^2*k^5,f^6*g^2*h^3*i^13*k,c^8*d^7*e*f^14*g^7*j^3,c^10*d^37*f^4*h^3*k^3,c^20*f^6*g^12,d^14*e*h^5*i^8*k^8,c^32*d^14*e^3*g^4*k^6,c^6*e^12*f^4*g*h^3*i^5*k^2,c^13*d^3*e^18*g^2*h^13,d^38*e*g^4*i^6,c^12*d^11*e^5*f^7*i^8,c^24*d^4*g^2*i^10*k^4,d^11*e*g*h^3*i*j^10*k^3,e^16*f^4*h*j^13,c^12*f^2*h^5*j^9*k^3,e^5*f^6*h^8*i^3*j^7,h^7*i^5*j*k^8,d^8*f^4*h^12*j^3*k^3,d^19*f*g^7*h^5*j^4*k,f^3*g^27*j,d^44*e^10*i^6,c^8*e^9*f^2*g^6*h^5*i^2*k^2,c^10*f^8*h^10*j,b*d^9*e^21*h^3*j^3*k^4,b*d^3*e^3*f^5*g^14*h^3*j^2,b*c^16*e^2*j^14*k,b^2*d^17*e^10*h^10*i*k^4,b^2*c^8*e^25*f^4*h^8,b^3*c^5*d^25*g^8*j^5*k^3,b^4*d^9*g^5*h*i^11*j^3,b^4*d*e^21*f^3*g^3*h^8,b^4*d^25*e*f*g^2*h^12*k^2,b^4*c^4*d^11*e^7*f^3*h^4*i*j^9,b^4*c^28*f^3*g*h^3*i^2*j^2,b^5*d*e^19*f^8*g^2*k^5,b^5*c^3*d^15*e^7*g*j^4*k^6,b^5*c^8*d^25*f^6*g*k^9,b^6*d^30*e^3*f^2*h^4*i^4*j^4,b^6*c^26*e^11*h*j*k^2,b^7*c^13*e^18*g^8*j^2,b^7*c^14*f*h^8*i^8*k^2,b^8*c^50*e^2*f*h^3,b^9*d^15*h^8*i^11,b^9*c^9*d^28*i*j^11,b^10*c^11*e^18*f^2*g^11,b^12*g^7*h^14*k^2,b^12*c^7*d^20*f*i^6*j^3,b^14*h^6*i*j^13,b^14*f^6*g^2*i^2*k^9,b^16*e^14*f^2*k^12,b^16*c^3*e^4*g^9*h^3*j^5,b^17*c^40*f*g*h^12,b^18*i^6*j^14,b^18*c^3*e^20*h^6*j^6,b^19*e^9*h^13*i,b^19*d^9*e*f^14*h^6*k,b^22*c^21*e^6*j^7,b^22*c^26*d^7*f^7*k^3,b^23*c^9*d^5*h^6*i^6*j,b^35*d*h^10*i*k^5,b^39*e^2*f^5*i^6*j^3,b^39*c^9*d^24*f^3*i^3*k,b^50*h^4*i^6*j*k^4,b^52*c^7*e^8*f^3*h^2*i^3,b^52*c^21*f*h^6*k^2,b^64*h^11,b^68*c^2*e^3*i*j^5,c^23*e^10*i*j^11*k^3,d^6*e^6*g^9*i^4*j^6*k,d^8*f^13*h^4*i*j^2*k^2,c^21*f^12*g^5*i^3*j,d^4*e^2*f^4*g^4*h^8*j*k^7,d^17*f^7*h^2*j^8,d^10*g^5*h*i*j^2*k^9,e^17*j*k^12,d*e^6*f^11*g^7*j^6,d^31*e^4*f*h^4*j^3*k^7,c^10*f^3*g^12*k^3,c^10*d^15*e^15*f^5*h^2*j*k,e^17*f*g*h^4*i^4*k^6,c^28*d^21*e*j^2*k^3,c^2*d^5*e^10*f^4*i^7,c^2*e*h^6*j^12*k^7,c^3*d^40*g^10*k,e^2*f^17*h^2*i*j^2*k^6,d^2*f*h^13*j^6*k^7,c^26*d^13*e*f^6*g^3*i,c^3*d^61*e^13*f,e*f^5*h^11*j^4*k,c^5*f^19*h^4*k^4,c^20*d^11*i^12*j*k,c^24*d^3*e^30*f^2,d^5*f^4*g^10*h^11,h^2*i^7*j^11*k^5,c^4*e^7*f^2*g^2*i^4*j^9,c^9*f^16*g^2*i^3*j*k^2,c^18*g*h^4*i*j^5*k^3,f^4*h^7*i^12*j^3,c^5*d^3*g^15*j^6*k,e^3*f*g^12*i^7*j^4,c^16*e^16*h^2*j^4*k^6,d*e^12*g^4*h^2*i^2*k^4,d^32*f*h^7*j,d^11*e^4*f^9*g^4*i*k^7,c^26*e^27*g*j^2,c^10*i^17*j^4*k,c*e^23*g^11,c^10*d^3*f*h^3*i^10*j^5,b*d^14*e^5*i^5*j^6,b*c^9*d^7*g^5*i^7*k^6,b*c^11*d^38*i^2*j^2*k,b*c^46*d^3*f*j^5,b^3*f^3*g^2*i*j^2*k^13,b^3*c^21*d^22*g^6,b^4*c^32*d*e^18*h^3*i^2,b^4*c^56*g^4*h^2*i^3,b^5*g^3*h^9*j^10,b^5*d^5*f^13*g^3*h^2*j^2*k^2,b^5*c^19*d^12*e^25,b^6*f^17*h^5*i^4,b^8*d^3*e^6*f^11*h^7*k^5,b^8*c^17*d^4*e^25*f^2*g^2*h*i^2,b^9*c^4*f^10*g^5*i*j^7,b^10*c^5*d*e^5*h^16,b^11*c^16*d*e^3*f^4*j^2*k^7,b^12*h^7*i^5*j^4*k^4,b^14*c^2*e^10*f^18,b^14*c^9*e^11*h^5*i^2*j^2,b^14*c^14*e^3*f^10*i*k,b^17*d^2*e^5*g^9*i^7*j^2*k^3,b^18*c^15*e^4*i^5*j^9,b^24*d^12*e*f^5*h^5*j*k^3,b^28*e^7*f^2*i^5*j^6*k,b^28*d^18*i^2*j^2*k^5,b^30*c^9*d^2*f^4*g^3,b^32*c^7*e^27*k^2,b^33*e^16*f^2*h*i^5*k^2,b^42*g^10*k^4,b^43*c^21*e^4*f^2*g^3*h^5,b^48*c^3*e^4*h^6*i^8*k^2,b^49*d^9*e^11*i^3,b^49*c^39*e^6*h,b^57*f^8*k^3,b^59*c^16*g^6*h^3*j^2,b^78*c^2*e^4*f^2*k^2,b^94*d^6*g,c^21*d^2*e^29*f*g*j^3*k,c^4*d^19*e^13*h*i^6*j^3,f^2*g^2*h^4*i^2*k^15,c^4*d^38*f^5*g^3*i^3*j,c^6*d*f^3*g^8*j^10,c^43*f^8*h^3*j^3,c^18*d^15*e^6*j^5*k^7,e^15*f*i^6*j^3*k^3,c^6*d^23*h^3*i^3*k^7,d^34*e^2*g^10*k^5,c^16*d^7*e^6*f^3*g^3*h*k,c^8*e*f^2*g*i^16,c*d^3*f^19*j^6*k,c^8*g*h^5*j^8*k^7,c^9*d^53*e^4*g*i,c^30*e^21*i^8,g^18*h^3*j,c^14*i^3*j^15,c^6*e^8*f^5*h^13*j,d^18*e^4*f^4*g*h^13*i,e^3*h^4*i^9*j^8*k^3,d^8*e^10*i^4*j^9*k,e^44*h^4*j,d^18*e^2*f^9*i^3*j*k^4,d*e^3*g^5*i^6*j^3*k^10,c*d^32*h*i*j^5*k^5,c^36*e^5*j^8*k,c^3*e^8*g^13*h^10,c^24*d^5*h^6*i^3*j^2*k,g^2*j^5*k^17,d^23*e^8*f^5*g*j^9,c^11*d^16*e*g^6*j^3,e^10*f*g^3*h^2*i^9*j,d^24*g^2*h^6*i^6,c^34*e^5*f^4*h^4,f^10*g^3*h^3*j^5*k^6,c^9*d^6*e^30*j^2*k^2,c^21*e^12*f*g^13*j,e^39*i^7,c^9*d^8*e*f^3*g^9*h^4*i^3,c^20*d^8*f^8*g^8*i^5,e*f^2*g^6*h^15*j^5,c^3*d^6*g^4*i^14*j^2,c^7*e^30*g^2*h^2*i,d^2*h^4*j^20,f^7*g^5*j^10*k^4,e^10*h^17*k^4,c^6*e^8*f*j^5*k^11,b*d^3*f^3*h*i^3*k^11,b*c*g^7*h^8*i^3*j^6,b*c^6*f^11*g^7*h*i^2*k^2,b^2*d^14*e^4*g^7*k^9,b^3*d^29*f^10*h^2*i^4,b^3*e^15*f^15*j^3,b^3*c*d^8*e^3*h^11*j^7,b^3*c^4*e^8*f^7*k^5,b^3*c^13*d*h^10*j*k^6,b^6*c^2*e^8*f^13*g^3*h^4*i^5,b^7*c^5*e^9*i^4*j^12,b^7*c^10*e*f^10*i^3*j^4,b^7*c^19*d^14*h^4*i*j^8,b^7*c^24*d^24*f^8*k^2,b^8*e^3*f^6*i^16*k^3,b^10*c^17*d^6*h^9*i^6,b^11*d^33*e^6*f^3*i*k^3,b^15*e^17*f^6*g^2*h^4*j^2*k,b^15*c*d^15*e^12*i^9*k,b^19*e^3*f*g^3*j^3*k^3,b^19*c*d^27*f^7*h^2*j^5,b^19*c^13*d^20*g^2*h*k^7,b^22*e^3*f^7*g^6*h^2*i^3,b^23*c^5*d^9*f^4*i*j^10,b^23*c^17*d^2*g^4*i^3*j^4*k^5,b^24*g*i^14*j^2*k,b^24*c^9*d^2*e^12*f*h^4*k^4,b^25*c^27*g^11*j^2,b^26*c^15*f^2*g^7*i^8,b^29*c*e^7*i^14*k^2,b^32*d^7*e*f^2*g*h^9*j^2,b^36*c^17*e^2*f^2*j^6,b^36*c^31*d^2*h^4*j^2*k,b^38*f*g^9*i*j,b^38*c^6*d^21*g^8*h^4,b^47*c^8*d^16*f^4*h*i^4,b^53*h^5*i^4*j^6,b^57*c^22*e^6*h^5,b^60*c^8*d^12*g^6*i*k,b^90*d^5*f^2*i^2*j,d^32*e^5*f^2*g^3*i^2*j^4*k^4,e^2*f^6*g^11*i^4*j^5,d^17*h^4*i^2*j^2*k^11,c^6*d*e^11*g^3*h^2*k^5,c^12*d^14*e^4*f^3*i^2*j^7,e^6*g*i^15*k^3,d^33*f^2*g^9*i^5*j^2,c^22*f*g^7*i^9*k,c^34*d^12*e^24*f,d^12*e^7*f^6*i^2*j^4*k^8,g^14*i^2*j^11,c^14*h^7*i^2*j^5*k^5,c*d^10*e^6*g^6*j^6*k^3,d^18*g^2*h^7*i^5*k^3,c^24*e^10*f*h^5*j^3,c^29*e^2*f^15*k^2,d^2*e^6*g^9*h^5*i^2,c^4*d^12*f^14*g^9*i,c^30*e^3*f^4*i^2*j^10,c^42*i^4*j^4*k,c^17*d^8*g^10*i^7,c^54*d^3*e^5*k^8,c^30*d^18*e*h^8*i^5,e^2*h^2*i^2*j^2*k^15,f^16*g^2*h^3*j^7,c^17*d^29*e^8*h,e^13*f^4*k^9,d^12*f^10*h^5*j^2*k^4,c^27*d^13*e^19*f*g^4,c^2*d^32*e^15*g^14,c^6*e^11*f^14*g*h^3,e^8*f^2*h^17*j^2,e^6*f^7*i^2*j^7*k^2,c^12*g*i^4*j*k^11,c^14*d^18*f^5*j^3*k^6,f*i^12*k^11,c^24*d^2*f^9*g^2*j,e^6*f^13*i^7,c^7*h^10*i^5*j^3,c^12*d^10*f^11*h^3*i^4,d^58*f^6*h*k^2,d^21*f^8*g^12,b*c^10*e^15*f^7*h*i^2*k^3,b*c^31*d^8*g^4*h^12,b^2*d^11*e^22*f^4*g^5*k,b^3*d^19*e^11*f^6*g*h*i^5*k,b^4*c^40*e^12*j*k^5,b^8*e^8*g^3*j^6*k^7,b^8*d^21*f^4*h^3*j^8*k^2,b^8*f^12*g^3*k^10,b^10*c^13*g^9*k^5,b^11*d^13*f^10*h^8,b^11*g^5*h^14*j^2*k^2,b^12*d^3*e*f*j^13,b^13*d^3*e^24*f^6*h^6,b^13*c^30*i^4*j^4*k^5,b^13*c^44*i*k^9,b^15*e*f^7*g^2*i^5*j^5,b^15*d^25*h*i^3*j^2*k^7,b^15*c^7*d^19*f^5*g*h*i^2*j,b^17*c^5*d^9*e^10*f*k,b^19*d^28*e^6*g^4*i^3,b^22*e^5*i^16,b^25*c^7*e^7*h*j^9*k,b^25*c^12*f^13*j*k^4,b^25*c^21*h^5*j^5*k^5,b^26*f*h^8*i^5*j^3*k,b^27*e^3*g^9*h*j^4,b^28*c^19*f^3*g*h^10,b^29*c^6*g^15*h^3,b^31*g^10*i^5*j^5*k,b^32*c^23*g^3*i^7*j^2,b^33*d^18*e^5*j^6,b^33*c^12*d^11*g^2*k^8,b^36*d^10*e^5*f*h^2*i^3,b^44*e^12*f^5*k^5,b^46*c^17*e^3*f^7*k^3,b^62*c^12*d^6*f*k,b^79*e^2*i*j^4,b^81*c^5*d^7*f*g^6,d^5*f*g^10*h^5*j^4*k^6,c^2*d^8*e^9*i*j^10*k^2,d^16*f^2*h^4*i^9*j^4*k^2,c^26*d^16*f^2*g^5*j^4,e^9*f^6*g^2*h^2*i^6*j^2,c*d^35*f*g^15,e^38*f^2*i^4*j,c^18*d^6*f*g^3*i^11*j^3,h^6*i^6*j^13*k^2,c^3*g^20*h*j^8,c^2*e^4*h^13*i^6*k^3,e^11*g^9*h^6*i*j*k,d^27*f^3*g^3*h^11*j^3,c^25*f^15*j^5,c^34*d^14*h^4*j^9,d^9*e^4*g^5*i^4*j^8,c^7*d^2*g^10*i^6*j^2*k^3,c^9*d^33*g^4*h^4*i*j^4,c^7*d^23*e^13*h^2*j^3*k,c^17*e^8*g^17*i^3,c^17*d^7*e^24*g^4*j,c^5*d^15*e^13*h^7*i^4,f^5*g^2*h^10*k^11,c^4*d^12*f^2*j^6*k^10,c^16*d^5*k^19,d^31*f*g^5*i*j*k^8,c^14*e^2*f^6*g^2*j^4*k^4,e^11*f^10*i^6*j^2,d^11*f^16*h^5*i*j^4,c^2*d^4*f^8*h^4*i^3*k^4,d^15*f^5*g^12*k^2,e^20*f^4*h^2*i*k^7,e^9*f^20*h^3*j^2,c^12*e^2*f^12*g^5*h^2,c^21*d^2*g^4*h^13,d^36*e^14*f^7,c^6*f^5*i^11*j^3*k^2,e^4*f^2*g^14*i^6*j^4,c^13*e^3*f*g*h^3*i^4*j^11,c^18*e^6*i^6*k^9,c^18*d*f^15*g*i^3*j^3,c^2*d^32*e^8*j^9,c^4*f^6*g^3*h^6*j^7*k^4,c^37*e^5*h^4*i*k^4,c^42*d^8*f*k^7,c^13*d^13*e*h^12*i^7,c^16*e^6*f^5*i^11*k^3,d^9*e*f^19*i*j*k^5,c^5*d^34*f^8*g^3*i,d^7*f^7*h^9*j^3,g^5*h^8*k^9,b^2*c^8*e^10*f^5*i*j^13,b^3*c^9*d^5*g^5*j^10*k^2,b^4*d^3*f^2*g^22*h^6*k,b^4*e^6*f^4*g^2*i^4*j^8,b^4*g^7*i^6*j^2*k^7,b^4*d^13*f^2*g*h^2*i*j^4*k^2,b^4*c^32*e*f^7*j^7,b^6*d^3*e^15*j^3*k^5,b^6*c^5*e^10*g^14*i^3*k,b^6*c^7*f^6*g^8*j^2,b^6*c^9*d^27*h^4*k^9,b^7*d^11*e^4*h^7*i^7*k^5,b^8*c*g^3*i^9*j^9,b^8*c^5*e^26*f^2*g*j,b^8*c^19*d^11*e^6*h^2*k^3,b^9*e^15*f^4*h^5*i^4,b^9*d^5*e^7*f^18*i^3*k^2,b^10*d^6*e^22*f*g^11,b^10*d^30*e^2*g^10*h^2*k,b^10*c*d^16*e^8*f*i^2*j^10,b^11*e^10*i^15*j^2*k^3,b^12*d^59*i^2*j,b^12*c^23*e^12*g^2*i*j^2*k,b^13*e^21*f*i^12,b^13*c^11*d*e*i^9*k,b^13*c^60*f^2*k,b^14*d^43*f^2*g^6,b^14*c^2*e^4*f^10*j^4*k^8,b^17*e^4*f^16*g^2*k^2,b^18*g^15*h^4*j*k,b^19*f*h^3*i^7*j^13,b^20*d^22*g^4*j^10,b^22*d^12*e^10*j^9*k^3,b^22*c^2*d^5*e^3*g^2*j^3*k^12,b^22*c^2*d^6*g^11*j^8,b^23*c^13*e^14*h^3*j^6,b^23*c^37*g^9*h^2,b^24*c^14*d^20*e*g^3*j^3*k,b^25*d^4*e^10*h^3*i^2*j,b^25*c^37*e^5*f*h^5,b^27*c^12*d^12*e*g^6*h^5,b^28*c^23*d^12*f^5*g^5*k^2,b^29*c^6*d^10*g*i^7*j^2,b^29*c^55*j,b^33*f^10*g^5*j^2,b^33*c^9*d*f^8*g^4*h^2*k^4,b^35*c^7*e^8*f^4*k^7,b^40*e^3*f^3*i^9*k^5,b^41*d^6*g^8*i^2*j*k^4,b^52*e^12*f^2*h*i^2*j*k,b^52*d^8*h^5*k^5,b^58*d^11*e^14*j^3*k,b^58*c^6*d^5*f^7*j^2,b^58*c^18*g^4*i*k,b^70*d*g^6*h*j,b^122*d^9*j,c^13*e^5*f^4*i^12*k^4,c^16*d^10*e^5*g^5*j^7*k^4,c^4*d^18*f*g*h^7*i^2*j*k^4,c^8*g^3*i^10*j^6*k^2,c^57*f*i*j^5*k^2,d^8*h^3*i^18*k^2,c^32*d^8*g^9*i^4,c^7*d^48*e^3*f*g^6*h,c^16*g*h^16*k^5,d^3*e^9*g^5*h*i^3*j^11,c^13*e^5*f^18*i^4,c^9*d^11*g^11*h^3*j^5,c^7*d*e^29*g^4*h*j^4,c^13*d^15*e^4*g*h*i^8*k,c^48*e^19*i^2*j^2,c^4*e^7*f^3*g^2*j^7*k^8,f^5*h^5*i^2*j*k^8,d^9*e^3*f^2*g^12*j^2*k^6,e^6*f^31,c^2*e^7*f^9*g^5*h^3*k^2,d^11*f^8*i^5*j^8*k,c^10*d^4*i^7*j^2*k^10,c^17*d^9*h^8*j^10,c^22*d^19*f^10*h*j^2,d^36*e^5*j^4*k^6,c^20*d^9*e^9*f^6*j*k^2,d^28*e^5*f^5*g^3,c^44*d^17*f^8*h,c^12*e^4*f^5*i^13,c^37*e^8*g^2*h^13,c^8*d^24*g^4*i^6*j^5,c^13*d^34*g^4*i^5*k^2,e^11*f*g^2*i^3*j^11*k^2,e^3*f^15*g^2*i^2*j^3*k^5,d^7*g*h^3*j^7*k^6,c^22*e^6*f^4*h*j^10*k^2,c^10*f^6*h^8*i^2*j^4*k^2,e^2*f^3*g^8*h*j^5,d^21*h^5*j^2*k^13,c^9*d^16*e^20*f^2*i^8,d^10*f^2*g^18*h,d^20*f^2*i^3*j^14,e^31*g*j^4*k^3,c^9*d^5*e^11*h^3*k^7,d^20*e^7*f^7*h^11,d^13*h^10*k^7,e^27*g^11*k,e^2*g^30*k,c^3*d^4*f^6*g^4*j^12,c^15*g^9*i^2*j^6*k^2,f^2*g^6*i^13*j^4,d^12*f^8*h^2*i^8*j^6,c^3*d^5*g^5*h*i^10*k^2,c^7*e^11*f^3*g^3*h^8*k,c^38*f^5*g^2*i^4*j^3,b*c^15*d^18*e^4*j^7,b*c^27*d^11*g*j*k^9,b^2*d^2*e^13*f^4*i^6*j^5,b^2*c*e^6*i^8*k^5,b^2*c^3*d^26*f^2*h^4*i^3*j,b^2*c^50*e*h*k^5,b^3*d^5*f^2*g^2*j^4*k^16,b^3*d^37*g^6*j^2,b^4*c*d^16*e^22*h^2*i*k^3,b^4*c^11*e^17*g^5*i^5,b^4*c^13*d^10*e^4*f^6*h^2,b^5*e^6*f^2*g*h^4*i^13,b^6*g*h^12*j^3*k^7,b^6*c^7*d^8*i^11*j^6,b^6*c^35*e^8*f^2*g^11,b^6*c^56*f^2*i^2*j^5,b^8*d^43*e^9*g*h^4,b^8*c^9*e^8*f*g^8*h^10*j*k,b^8*c^31*d^16*f*i^5,b^10*d^5*f^6*j^3*k^12,b^10*c^5*h^6*j^10,b^10*c^10*f^14*j^2*k^3,b^10*c^29*d^6*e^19*i^3,b^11*g^11*j^11,b^13*e^18*f^7*g^4*j^2*k^4,b^14*d^8*e^7*f^9*k^4,b^14*f^3*g^14*h^4*j^3,b^14*d*f*g^5*i^2*k^13,b^15*c^15*h^13*k,b^18*d^4*e*g*i^6*j^5*k^3,b^18*d^35*h^2*i*j^7,b^18*c^33*e^3*f*j^10,b^20*d^4*e^22*i^3*k^9,b^20*c^8*d^19*g^2*j^5,b^20*c^11*e^4*f^8*g^8*i^2,b^22*c^6*d^9*e^28*j^4,b^24*e^13*f*h*k^11,b^25*g^7*h^15*j,b^26*c^5*d^8*f^8*j^8*k,b^29*c^3*f^14*g^3*h^2*i^2,b^30*d^17*e^2*f^3*g^3*j^2*k^2,b^31*c*e^6*f^10,b^31*c^10*d^4*h^11*j^3,b^31*c^13*f^2*g*i^2*k^7,b^35*c^19*f^5*i^5,b^44*d^7*e*j^13*k^2,b^47*e*f^4*j^5,b^47*c^10*d^23*f^2*h^2*j,b^49*c^8*d^13*e^10*k^3,b^56*c^24*d^11*i^3,b^59*e^3*g^6*h^2*j^4*k,b^64*c^26*j^2,b^99*c^7*i*k,c^4*e^10*f^2*g^8*h^6*j^2*k^2,c^10*d^9*e^3*f^5*g^4*i*j^9,d^42*e^8*g^6*h^2,d^31*f^6*g^4*j^2*k^9,c^12*h^11*i*j^7*k^2,c^4*d^15*f^10*g^11*k^3,d^13*g^7*h^11*i^4*j^2,e^5*f^2*g^14*h^9*i,c^17*d^32*e^7*j^10,d^26*e^8*f^11*i^4,e*f^2*h^6*i*j^4*k^12,c^15*d^24*e^7*g^2*h^5*j^2,e^5*f^9*g*i*j^9,c^7*d^3*h^9*j^13,c^10*f*g^6*i^3*j^3*k^8,c^12*d^13*f^7*h^2*j^5*k^3,c^10*d^3*e^14*f^3*j^4*k^6,d^22*e^10*f^2*g^3*k^4,d^16*f^10*g^17,c^17*d^9*e^2*h^16*k,d^6*e^21*f^6*g^10,d^35*e^3*f^5*i^2*j^6,c^3*d^28*g^4*i^4*k^6,c^5*d^59*f^3*j^2*k,c^26*d*f^4*i^6*k^2,c^13*d^12*e^7*f*g^11*i,d^10*e^25*i^7*k^3,c*d^41*e^12*f^5*h*i^2,d*f^4*g^10*h^11*k^2,f^3*g^4*j^15,c^7*d^22*f*g^3*j^11*k,d^6*f^5*h^3*i^7*j^9,g^5*h^2*i^9*j^3*k^6,d^22*e^3*f^6*h^14,c^5*d^12*e^9*j^10*k^4,c^17*d^5*e^2*g*j^4*k^13,e^18*f*h*i^5*j^8,d^6*e^10*f^15*i^4*k^3,f^9*g^7*h*i^4*j^7,d^20*h^5*i^2*j^4*k^4,c^3*f*g^12*i^6*j,c^15*e^20*f*g^3*j^8,c*e^22*g^5*i^4*k^3,c^3*d^4*e^9*f^3*h^3*j^2,c^8*d^14*e*f^17*k,c^50*e^17*g*k^3,d^15*e^16*g^13*j^3,c^4*d^39*g^12,d^23*e^5*f^2*g^9*h^3*i^2,d^2*e^4*i^10*j^9*k^2,c*e^38*h*j*k,c^25*e^13*g^11*k,c^46*i*j^8*k^2,c*e^9*f^9*g^2*h^8*i^4,c^9*d^17*e^2*f^6*i^2*j^9,c^12*e^7*f^14*g*i^6,c^21*d^10*i^4*j^3,e^4*f^2*i^15*j,h^7*j^13*k^4,f^11*j^5*k^7,c^31*e^6*f^2*g^7*i*j,c^45*d^18*g^6,b*d^50*e^7,b*c^10*f^15*g^4*j^3*k,b^2*c^17*e^24*i^7,b^3*d^2*e^12*f^6*k^8,b^3*e^2*g^14*h^5*j^6,b^4*c^5*e^4*h^14*k^5,b^6*c^11*g*h^5*i^9*j^6,b^7*d^8*f*g*i^4*k^10,b^8*c^11*d^2*h^8*i^2*j^7,b^9*d^13*e^4*g^2*h*j^8,b^9*c^10*d^6*g^7*j^2*k^5,b^10*c^26*f^18,b^10*c^33*e*h^5*i*k,b^12*d^5*e^4*f^3*g^5*h^6*i^2,b^12*c*d^14*e^7*f*i^4*k^11,b^14*e^33*h^4,b^14*d^5*e^25*f^13,b^14*c^39*i^4*j^6,b^16*c^2*d^17*e^8*i^8*j^2*k,b^20*e^11*f^7*h*j^2*k^2,b^20*h^12*j^6*k^3,b^20*c^3*e^4*g*i*k^11,b^22*d^3*e^7*f^6*g^6*h*i^2,b^22*c^15*e^2*f^9*g^2*h^3,b^23*c^3*f^11*h^10*i,b^24*c^9*f^2*i^4*j^3*k^4,b^24*c^11*d^21*f^8*j^5,b^24*c^23*d^14*i*k^8,b^26*c^19*e^8*f^6*g^4*i*j,b^26*c^21*d^5*f^12*j^3,b^26*c^33*f^4*g^3*k^2,b^28*d^30*e^9*f^3,b^29*c^19*e^6*f^2*h*i^4*k^5,b^36*e^6*f*j^8,b^36*d^3*f^15*k^3,b^36*d^17*h^3*j^4*k^4,b^38*c^10*d*f^3*g^5*h*j^2,b^39*g^7*h^3*i^4*k^3,b^40*c^4*i^2*j^9*k^2,b^41*d^7*i^10*j^3*k^2,b^41*e^15*f*h^6*k,b^43*c^2*f^2*g^3*i^7*j,b^45*c^2*d^12*e^8*f^4*j^2,b^56*c^4*e^3*h^11*k,b^57*d^8*e^10*h^4*j,b^61*e^8*f^6*i^2,b^61*c^9*d^14*j^2*k,b^91*i^5,d^3*e^8*f^2*g^4*h*j^12,c^10*d^9*e^17*f^2*h^8,c^28*d^15*e^3*h*i^5*k^2,c^10*d^28*e^4*f^10*g^2*k,e^10*f^6*g*j^12*k^3,g^2*h^5*i^10*k^12,f^10*g^3*h^8*i^2*k,d^29*e^8*f^2*i*j^9*k,c^16*e^5*f*i^5*k^6,c^3*d^6*e^12*g^11*j*k^4,c^5*d^37*f^4*g^5*j^3,d^21*e^8*f^8*g^2*i^6*j,d^14*e*g^7*i^8*k^4,c^40*d^3*f^3*g^3*h*k^4,c*d^19*e^28*f^6*g,c^44*d^6*e^18*f^2,c^7*f^2*g^10*j^12,d^8*f^4*g^6*h^6*j^6,e^14*h^4*j^5*k^2,d^8*e^6*f^14*k^5,c^7*d^22*h^8*j*k^6,c^17*g^18*h^3*k^2,c^17*d^6*e^5*f^2*g^5*h^6,c^4*d^21*f^17*j^4,c^11*d^4*i^3*j^6*k^4,c^13*d^35*f*h^2*j^8,c^16*d^14*f^9*i^2*k^7,e^9*i^14*j^4,d^12*h^4*i^11*k^4,c^3*d^4*e^23*h^11*k^3,d^23*g^10*i^6*j*k^2,c^2*g^2*j^2*k^20,c^35*d^12*g^6*k^2,d^33*e^5*h^7*i^4*j*k^2,c^9*f*g^3*h^2*i^8,c^58*f^4*h^4,d^44*e^12*j^2,c^33*d^2*e^20*k^5,f^14*h^6*i^2*k^5,h^17*j^4*k^6,c^9*d^17*e^16*f^3*h^5*i,f^17*i^5*j^7,c^27*d^23*e^2*i^6,c*e^2*h^9*i*j^10*k^2,c^4*e^7*f^5*i^5*k^10,c^6*d^6*f^11*h^2*j^2*k^5,d^7*e^9*g^2*h^2*j^11,e^14*f^2*g^8*j*k^8,d^17*e*f^8*g^2*j^3*k^3,e^2*g^7*h*j^5*k^9,c^5*d^10*g^7*k^12,d*e^10*f^12*i^6*j,c^11*e^13*f*h^7*j^8,c^16*e^5*f^15,c^28*f^7*k^8,b*d^15*e^19*f^6*i*k^6,b*d^9*e*f^14*g^5,b*d^23*g^4*h^11,b^2*e^7*f^5*g^4*i^3*j^8*k,b^2*c^6*d^13*g^3*i*j^12*k^2,b^2*c^21*e^6*g^3*h^11*i^5,b^2*c^23*f^5*h^16,b^3*d^7*f^7*i^11*j^2*k,b^3*c*e^23*f^2*g^3*k^9,b^3*c^29*i^3*j^9,b^5*d^21*e^5*f*i^6*k^8,b^7*c^2*e^24*i^4*j^3,b^7*c^7*d^5*e^16*f^5*i^3*k^2,b^7*c^16*d^19*e^4*h^2*i*k^3,b^8*c^3*d^30*e^11*g^12*k,b^9*c^14*d^10*e^22*f*h*j^3,b^11*c^5*e^7*f^6*g^2*h^4*k^4,b^12*f^8*h^11*k^4,b^13*e^2*i^3*j^6*k^8,b^13*c*d^15*f^5*j^8*k^3,b^13*c^13*d^8*j^2*k^12,b^15*d^34*f^4*g*i*j^3*k,b^15*c^9*e^13*f^3*g^4*j^4*k^2,b^15*c^11*f^9*j^6,b^16*e^2*f^5*i^8*k^2,b^16*d^7*f^11*h^5*i^3,b^17*d^18*f^8*g^8*j,b^18*e^18*f^7*h^3*i,b^18*c^9*f^15*g*h^3,b^18*c^21*f^7*g^6*h^2*i^2,b^19*d^8*e^25*f^4*g,b^19*d^32*e^5*f^2*k^2,b^20*c^3*f^8*i^11*j^5,b^22*c^15*d^3*e^4*f^2*i^6*k^2,b^23*c^2*d^14*e^11*g^2*i*j,b^23*c^51*d^3*e^6*f^2,b^24*c^39*d^11*f^4,b^28*d^3*f^2*g*h^9*k^2,b^29*d^14*g^15*h^2,b^32*g^3*i^6*j^4,b^32*d^16*f^5*h^3*i*j^6,b^32*c^6*d^9*g^2*h^2*i^3*k^4,b^34*d^6*e^13*f*h*j^5,b^34*c^4*e^6*i*k^7,b^34*c^16*f*g^9,b^36*c^2*e^24*f^5*j^3,b^37*c^2*e^6*h^5*i^6*k,b^40*c^20*e^10*i*j^4,b^41*c^8*d^4*f^2*i^9,b^42*e^2*f^13*j^6*k,b^50*e^13*f^3*i*j*k^4,b^50*d^8*e*j^5*k^5,b^63*d^5*e^11*f^4*i^2,b^63*c^4*e^6*f^7*h,b^86*c^15*d*f^2*i,c^28*e^19*g^7*i*j,d^22*e^9*f^7*g^2*k^5,d^6*f^10*h^3*i^4*j^10,c^6*e^10*i^4*j^3*k^10,c^18*f^6*g^11*i^3*j^2*k,d^31*e^4*f*g^5*j^6*k^3,c^30*e*g^3*h^2*k^8,d^23*e^4*f^7*g^8*h^3,d^13*e^33*f^3*g*h,c^22*g*i^14*k^6,d^2*f*g^6*h^7*j^9*k^3,e^19*f^3*g^2*h^10*i^2,d^8*f*g*h^14*k^4,d^5*e^12*j^15,c*e^5*i^2*j^9*k^8,c^3*d^29*h^3*j^11*k^3,c^13*g^14*i*j^8,d^7*e^4*f^20*i^4,e^5*g^3*h^3*i^7*j*k^2,d*e^12*g^17*i^2*j^2,d^11*e^21*h^6*j^2,c^23*g^9*h^5*i,g*i^23,c^4*d^28*e^14*g^5*j^4,f^8*h^3*j^5*k^9,c^8*f^16*g^2*h^3*j^4,c^27*d*e^18*i^2*j,c^15*d^9*e^7*f*h^4*i^10,c^4*d^51*e*f^4*g^2*h^2,c^51*d^9*e^9*f*g^4,d^3*e^6*f^11*g^5*h*k,c^13*f^2*h^17,d*e^5*g^11*h^10,c^24*f^7*i*j^4*k^5,g^6*h*i^5*j^7,d^30*h^6*j^9,d^9*f^6*g^6*i^4*k^3,c*d^40*f^12*j,d^7*g^2*h^8*i^13*j,c^17*e^4*h^6*i^7*j^4,c^22*f^13*i^6,c^31*h^10*i^4,f^5*g^3*h^5*j^9*k^7,e^21*f^2*i^2*k^6,d^30*e^8*f^8*k,c^6*d^13*e^9*h^3*j^2*k^7,c^11*d^23*e*k^10,e*h^7*j^4*k^14,c^16*e^20*g^5*h*k,c^18*d^28*e^7*h^6*j^2,d^12*e^16*h^9*i^3,e^21*f^8*g^2*i^7,c^15*d^5*e^7*i^7*k^8,b*c^4*d^47*e*g^8*j^2*k,b^2*d^9*f^2*h*j^11*k^7,b^2*c^3*d^2*j^5*k^16,b^4*d^28*f*g*h*j^6*k^5,b^4*c*e^5*f^6*j^9*k,b^4*c^13*g^3*j^3*k^10,b^5*c*h^5*i^4*k^10,b^5*c^20*d^2*e^13*g^4*i^5,b^6*d^12*e*f^5*g^8*j^4,b^6*c^8*d^10*e^2*f*h^7*i^13,b^7*c^8*h^15*j^5,b^7*c^11*f^4*g^6*h^3*i*k^4,b^7*c^13*d^9*f^10*h^8,b^8*e^5*f*g^20*k^2,b^8*c^19*f*j^10*k^3,b^9*d^10*e^19*f^3*h^4*i^3*k^2,b^9*f^5*i^10*j^8,b^9*c^7*d^7*f^3*i^7*j^4*k^3,b^9*c^9*e^27*h*k^7,b^10*d^18*g^9*i^2*j^5*k,b^11*c^5*e^9*i^5*j^3*k^6,b^11*c^17*f^7*g^2*i^4*j^2,b^12*c^6*d^32*g*k^8,b^13*c^29*d^5*f*k^4,b^14*c^3*e^9*f^5*h^2*i^10,b^15*d^14*e^4*g^4*h^6*i^3,b^15*c^4*d^24*g^4*i^2*k^2,b^18*c^21*i^15*k^2,b^19*c^57*g^2*i,b^20*d^2*g*j^15,b^21*e^2*g^3*i^5*j^7*k^4,b^21*c^31*h*j^6*k^4,b^23*f^6*g^4*h^2*j^7,b^23*d^3*e^3*f^4*k^14,b^23*c^6*g^9*h*j*k^2,b^25*c^6*d^8*e^9*h^4*j^2,b^26*d^16*f^2*h^11,b^27*d^27*e^5*g^6*h^4,b^27*c^12*f*g^5*i^2*j^8,b^28*c^4*e^9*f^6*h^9,b^29*c^10*e^15*j^7,b^29*c^15*e^7*f^11*k,b^29*c^24*d^14*j^3*k^2,b^30*e^4*i^8*j,b^30*c^47*f^2*h^2,b^31*c*f^2*j^3*k^14,b^32*c^22*d^6*f*h^2*i^2,b^36*g^7*h^13,b^41*c^4*e^9*f^2*g^5*k^6,b^42*d^4*f^4*g*i^2*k^6,b^44*d^9*e^4*g^2*h^7,b^45*c^10*d^9*e^2*f^5*g*j^5,b^48*d^7*e^20*f^3*i^3*k^2,b^49*h^3*i^11,b^54*d^7*e^7*f^3*g^3*h^2*k^2,b^58*c^22*e^8*f^3*g*j,b^59*c^10*f^5*i^2,b^75*c^5*j,c^6*e^13*f^11*g*h^9,c^26*d^4*j^7*k^5,c*d^23*g^9*i^3*j^2*k^3,c^24*f^6*g^2*h^2*i^5,c^11*d^7*e^6*f^3*g^16,d^36*e^11*f^7*h^5*i,d^2*e^2*f^3*j^4*k^15,c^3*d^7*e^8*g*h^2*j^12*k,d*e^9*f^17*i^3*j^2,d^15*f*h^9*i*j^6*k,c*e^8*f^5*g^4*h^7*j^4,d^3*e^8*g^23*k^2,c^12*e^6*f^10*g^3*j^9*k^2,e^3*i^9*j^11,c^44*f*j^10,c^19*d^5*g^5*i^3*j^5,c^17*e^23*i*j^4,c^31*d^19*e^3*h^2*k^4,d^45*e^6*f*g^2*h^3*j,c^3*e^3*h^18*j^2*k^2,e^10*g^11*h^11*j^3,c^28*d^8*f^2*j^3*k^13,c^59*d^9*g^5,d^3*f^3*g^6*i^3*j^2*k^7,d^34*f^9*j^4*k^2,c^26*f^14*j^7,c^14*d^7*f^16*h^5*j,d^8*e^3*g^7*h^5*j^10,c*d^18*f^13*g^7*j^2,d^30*e*h^14,d^9*e^6*f^3*g*h^2*i^3*k^8,c^7*d^30*i*j^4*k^7,c^6*d^14*e^12*g^2*h^12,c^30*d^3*e^3*f^7*i^3*j*k^3,c^5*d^22*f^6*i^6*k,e^10*f^3*j^12*k^5,c*d^47*g^10*j,f^5*h^7*i*j^6*k^5,h^6*i^3*k^14,d^6*e^6*f^2*g^8*j^7*k^3,e^10*f^9*g*h^5*j^4,c*e^3*f*g^6*h^4*k^8,c^3*d^3*f^7*h^9*k^3,c^9*d^4*e^5*f^3*i^14*j,c^9*j^13*k^7,d*i^6*j^7*k^7,c^10*d^60*e^8,d^12*e^15*f^2*g^3*h^7*k^4,d^2*f^26*j^3,c^7*f^4*g^2*i^3*j^5*k,c^21*d^9*f^2*g*h^2*j*k^5,b*e^3*f*g^16*j^6,b*f^6*h^5*i^11*k,b^2*d^4*f^3*g^12*i^6,b^2*c^5*e^25*i*j^4*k^4,b^2*c^19*e^5*k^8,b^2*c^31*f^6*g^8,b^3*d^14*e*f^8*h^8*i^4,b^3*c^6*d^10*e^12*g^8*j*k^6,b^3*c^7*d^7*h^7*i^6*k^8,b^4*d^25*e^8*f^5*h*j,b^4*c^29*e^16*f^2*g*k^2,b^5*c^3*e^25*f^6*h*i^6,b^5*c^17*e^5*f^4*h^5*i^3*k^2,b^6*d^9*e^19*f^9*g^6,b^6*c^4*d^2*e^12*f*g^11,b^6*c^25*d^12*f*i*j^7*k,b^7*d^10*e*f^3*g^7*h^5*i^6,b^8*e^7*g^6*i^9*k^4,b^8*d^31*i^4*j^2,b^8*c^47*e^2*g^2*k^4,b^9*c^21*e^11*f*i^11,b^9*c^23*d^4*f^7*i^6,b^9*c^35*i^8*k^4,b^10*f^7*g^3*i^3*j^2*k^11,b^10*d^7*f^5*g^2*k^15,b^10*d^21*e^23*i^2*j*k^2,b^10*c^9*f^3*h*i^19,b^10*c^10*d^15*e^5*f^4*g^7*i,b^11*f^6*h^10*i*j^9,b^12*e^5*f^3*g^4*h^3*j^10,b^12*d^12*f*g^3*h^7*j^6*k,b^13*d^6*f^19*h^3*i^3,b^13*d^13*e^23*f^2*i^7,b^13*c^10*d^37*e^3*h*i^4,b^14*c^6*e^9*g^16*j^2,b^15*d^10*e^3*h^12*k^4,b^16*c^2*g^5*i*j^11,b^17*d^2*g*h^3*i^9*j^5,b^17*e^14*f^3*h^10,b^18*c^2*d^15*e^7*j^12,b^18*c^14*d^8*j^6*k^6,b^19*e^9*h*i^7*j^4*k^2,b^20*d^34*e^3*g^2*j^7,b^21*e^20*g*i^4*j^2,b^21*d^7*e^7*f^6*h^4*j^4,b^21*c^12*h^3*i,b^25*d^3*e^7*f*g^17*h*i,b^25*c^30*d^6*g*i^6*k^2,b^27*d^32*g^6*i^7,b^27*i*j^2*k^18,b^27*c^9*f^6*j*k^9,b^29*c^7*e^7*f^2*k^12,b^31*d^5*e^10*f^9*j*k,b^32*c^2*e^2*h^15*j^2,b^35*d*e^4*i^5*j^10,b^39*c^5*e^24*j^3*k,b^48*e^2*f^2*h*i*k^4,b^52*c^6*f^5*i^4*j^5,b^56*d^26*i^2*k^2,b^58*c^3*d^10*e^11*f^2*g^2,b^60*d^8*e^6*i^10,b^64*j^4*k^2,b^66*c^19*g^6*h,d^8*e^5*f^2*g^6*i^4*k^9,c^16*e^4*j^10*k^9,c^14*e^4*f^3*g^2*h^3*i^4*j^2*k^3,c*d*e^11*g^16*j^3*k,c^7*d^36*e^2*i^5*k,d^3*e^5*f^16*g^4*h*k^2,d^39*e^11*g^2*h^4*j^4,d^2*e^6*g^22*i^2*j,c^5*e^28*g*h^4*i^5,c^2*d^45*g^3*i^3*j^5,e^2*g^6*i^2*j^5*k^11,c^4*d*f^13*h^6*j^4*k^2,d^12*f^10*g^7*j^5,c^3*d^5*f^2*g^12*k^9,d^20*f^12*g^3*h^6*i^2,d^2*e^29*f^6*j^4*k^3,d^8*e^17*g^2*h^13,c^9*d^39*e^2*f^7*j^7,d^16*e^4*f^3*i^5*k^5,d^47*f^9*h^2*j,c^5*e^15*f^7*g^4*i^2,c^14*d^14*e^3*g^3*h^6*j,c^19*d^24*f^5*g^3*k^3,c^37*e^7*h^11*i^2,f^4*h^10*j^3*k^7,c^23*d^6*e*f^2*g^5*i^7*k,e*f*g^2*i^2*j^8*k^5,d^10*f^7*h^4*j^10,c^2*f^15*g^2*i*k^8,c^11*d^3*g*h^3*j^4*k^9,g^12*i^5*j^3*k^3,c^9*f^5*g^4*h^8*i^4*k^3,d^19*e^13*f^2*h^2*j^4*k,d^12*e^6*g^4*h*k^10,d^6*f^2*g^18*h*k,c^3*f^4*i^5*j^15,c^19*e^21*g*j*k^6,c^33*d*e*h^3*k^10,d^2*e^9*f^23,c^7*e^10*f*h^6*i^2*k^6,c^12*e^2*f^15*i*k^9,d^3*e^24*f^6*g^6*j^2,e^17*g^11*k^4,d^27*e^4*f^4*g^5*h^4,c^15*d^6*e^3*j^10*k^5,d^4*e^6*g^7*h^6*i^5*k^4,e^53*f^2*j,d^56*f^3*j^7,c^4*d^49*j*k^7,c^25*e^14*f^2*j^8,c^39*d^14*j^4*k^3,c^11*e^16*i^10*k^4,c^13*e^3*f^4*i^5*j^2,c^25*i^7*k^8,e^5*h^2*i^18*k^4,d^9*e^10*f*g^7*j^3,c^2*d^40*f^7*g*j^5,c^12*d^2*e^3*g^12*i^2*k^6,c^14*d^33*g^6*k,d^10*g^8*i^10*k^6,c^35*e^7*g^5*i^4*k^2,c^37*d^6*f^6*h^2,b*e^39*j^2,b*c^43*i^2*j^9*k,b^2*f^16*h^4*i^2*k^4,b^2*d^7*e^28*i^6,b^2*d*e^10*f^7*g^10*i^5,b^2*c^2*e^6*f^21*h^2*j^2,b^2*c^10*e^3*g^15*i^7,b^2*c^35*e^23*f^2,b^4*f^4*g^6*h^13*j,b^4*c^10*d^15*e^19*f*g^2,b^4*c^41*f^3*g*i^7*j,b^6*e^19*h^11*k^2,b^6*d^12*h^15*k^6,b^6*c^4*d^13*e^14*i^11*k^2,b^6*c^6*d^44*e*i^6,b^6*c^15*f^2*h^2*i^2*j^11,b^8*f*g^8*h^2*i^5*j^6,b^8*d^11*f^7*g^2*h^7*j^8,b^8*c^4*d^4*g^7*h^6*i^2*j^2*k,b^9*c^2*d^5*e^14*i^16,b^10*d*e^12*f^3*h^5*j^7,b^10*c^2*e^5*h^4*j*k^4,b^10*c^7*d^4*f^9*k^7,b^12*c^12*e^16*g^7*h^2,b^12*c^26*d^2*g^6*h^6*k^2,b^13*e^5*f*g^3*h^9*i^5,b^14*c^8*d^7*i^3*j^8,b^15*i^16*k^2,b^15*d^15*h^5*i^11*j^2,b^16*f^3*h*j^4*k^13,b^16*c^11*d^7*e^19*f^8*k^3,b^16*c^18*e^9*f^2*g^3*j^6,b^16*c^30*e^2*g^8*i^2,b^17*c^6*f^4*h^3*i^8,b^17*c^43*e^11*h^5,b^18*d^10*e^5*f*g^13*i^3*j,b^18*d^40*e^3*i*k^2,b^18*c^30*d^5*e^18*j,b^22*g^7*h*k^12,b^23*c^3*f^12*i^7*j^3,b^23*c^16*h^18,b^25*c*e^5*f^8*i^5*j^2*k^3,b^26*e^12*f^5*g^4*j^3*k,b^26*d^3*g^3*h^2*j^7*k^2,b^26*c^2*d^13*f^3*g^3*k^5,b^27*c^25*f^10*k,b^28*d^3*e^21*k^8,b^29*d^11*e^10*f*i^3*k^8,b^29*d^5*f^9*g^6*i^2,b^31*e^21*f^5*k^2,b^32*c^18*d^9*e^7*k^10,b^33*d^24*e^3*f^4*i^6*k,b^41*f^2*i^3*j^8*k,b^41*c^10*d^11*j^4*k^5,b^43*c^20*f^4*j^2,b^45*d^14*f^3*g^9,b^53*e^2*j^7*k^6,b^62*c*d^2*e^4*h*i*j,b^62*c^13*f^4*g^5*h,c^4*e^9*g^2*h^4*i^3*j^5*k^7,d^30*e^7*i^4*j^2*k^5,c^7*d^14*e^18*g^7*i,e^4*g^5*h^2*i*j^11*k^5,c^4*d^3*f^8*g^5*j^3*k^8,e^4*g^8*h^7*i^6*j^3,c^25*e^17*f*g^3*h*i*j^3,c^22*f^9*g*j^6*k^2,d^10*e^9*i^4*j^2*k^9,d^4*f^8*g^11*i^3*j,c^34*e^4*f^3*j*k^9,e^20*f^4*g^4*i*k^3,c^9*d^18*f^2*g^3*k^7,c^13*e^6*g^5*i^6*j*k^5,e^3*g*h^3*i^15*j^3*k^2,c*g*h^4*j^7*k^13,c^32*e^5*g^11*i*j^3,c^11*g^8*h^2*j^5*k^7,f^2*g^4*h^9*i^3*k^7,g^18*h^2*k^5,d^10*e^2*f^4*h^12*k^5,c^5*d^2*f^5*h^3*i^6*j^6,d^9*e^7*f^23*i*j^3,c^3*e^8*f*h*i^4*j^5*k^3,c^8*d^2*f^15*i^3*k^6,c^15*e*i^6*k^12,c^17*d^16*h^5*i*j*k^7,c^4*d^27*g^6*j^2*k^5,d^11*e^4*g^3*h*i^7*k,d^4*g^8*i^9*k^10,d^35*g^2*h^5*i^4*k^5,c^27*f^3*h^3*k,c^14*d^11*e^6*g^13,d^32*e^20*f^2*h^4*j,c^2*d^19*f^2*g^9*h^3*i,c^21*i^9*j^6*k^5,e^3*i^20*j^4*k,e^32*g^2*h^8*j,d^9*e^24*g^2*h*k^2,c^31*e^5*g*i^6*j^4,c^19*f^2*i^14,f^8*g*i^6*j^3*k^10,d^38*e^6*i^5*j^2*k,c^8*d^32*f^5*g^5*i^4*j,d^6*e^2*j^4*k^17,d^5*f^4*g^2*h^8*j^11,g^7*h^7*i*j^5*k^5,c^4*e^30*g^4*i^7,c^6*d^22*e^17*f*i^2,c^20*d^46,e^2*f^17*h^6*i*j*k^4,c^41*e^14*i^6,d^5*e^9*f^14*j^2*k^2,d^19*h^10*j^6*k^3,e^2*f^6*k^11,b*d*g^24*h^5*i,b*c^2*e^21*g^7*h^3*j^2*k^2,b*c^4*d^3*e^8*f^2*g*h^8*j^4,b^2*d^11*f^4*h^15,b^2*e^2*f^12*g^3*h^3*i^3*k^5,b^3*d*e^3*i^2*j^11*k,b^3*c^3*d^11*f^9*i*j^3*k^4,b^3*c^10*f^3*g^10*i*j^10,b^3*c^15*d^4*f*g*i^3*k^13,b^5*c*d*e^24*f^5*j^2*k^7,b^5*c^8*e^14*g^3*j^9,b^5*c^22*d^9*g^2*h*j^5,b^6*e^3*f*h^4*i^7*j^3,b^6*c*d^3*f^15*i^6,b^6*c^8*g^4*h^3*i^9*k^4,b^6*c^10*d^17*h^8*i^4,b^6*c^45*f^4*h^6*j^2,b^7*e^3*g^18*i^4*k^2,b^7*d^28*g^12*h,b^7*f^4*g^5*j^5*k^11,b^7*c^20*e^23*j^4*k^2,b^8*c^8*d^7*e^12*h^6*i^2*k^2,b^8*c^18*e^7*g^11*h*i^6,b^8*c^20*d*f^3*g^5*h^6*i,b^9*d^18*e^19*g^5,b^9*d^49*e^6*h^4*j,b^9*c^7*d^12*e*g^19,b^10*c^14*i^12*j^4,b^10*c^18*e^23*h^4,b^11*c^2*d^7*h^4*i^20,b^12*c^26*d^13*i^7*k^4,b^14*c^3*f^13*g^4*i^3*j^4,b^15*e^17*f^2*g^4*j^6*k^5,b^15*d^14*e^4*f^8*j^8,b^15*d^7*g^3*j^2*k^9,b^16*e^6*f^4*i^7*k^5,b^16*c^15*e*f^7*h*k^5,b^16*c^60*d^5*g^5,b^18*e^5*g^6*h^8*i^2*j^2,b^19*d^20*f^3*j^9*k^2,b^20*c^33*f^2*i^3*k^7,b^22*d^12*f^9*g^2*i^4*j,b^24*d^2*e^19*f^5*i^2,b^24*c^3*d^16*e^7*h^4*j^4,b^24*c^8*d^26*f^3*k^3,b^28*c^12*d^8*e^5*i^7*j*k,b^30*d^5*h*j^7*k^9,b^32*c^10*f*j^5*k^3,b^34*d^8*g^9*k,b^36*d^29*e^8*f^2*h^2*j,b^37*c^2*i^12*j^4*k,b^37*c^6*e^25*f^3*h^2,b^39*c^2*e^7*f^2*i^5*j^5,b^40*d^11*e^14*j^6,b^40*c*d^4*e^7*g^3*i^2*k^6,b^40*c^3*d^35*j^2*k,b^41*c^26*d^8*f^4,b^43*c^48*e^2*g^2,b^49*i^5*j^9,b^49*d^6*h^4*i^2*j^5*k,b^51*e^9*h^2*j^4*k^4,b^51*c^3*f*g^5*h^2*j^3,b^53*c*e^20*j^2,b^53*c^15*d^4*h^4*k^2,b^56*c^13*f*h^9,b^58*c^7*i^10,b^69*c*e^7*f^5*g,b^99*h^5,d^8*e^23*g^7*j^3*k^3,c^38*e^13*g*i^7*j*k,e*f^5*g^5*j^6*k^12,c^3*e^11*h^9*i^8,f^5*g^11*i^2*j^4*k^4,d^12*e^5*g^3*h*k^11,d^25*h^18*j,c^5*d^25*f^2*j^6*k^4,d^2*g*i^13*k^9,c^28*e^2*f^9*i^2*j^3,c^3*d^17*f^8*g^2*i^5,f^7*h^11*j^8*k^2,c^7*d^10*h^6*j^4*k^11,d^28*e^7*f*g*j^11,c^10*d^11*e^3*f^22,c^17*e^4*h^4*j^2*k^5,e^20*f*g^10*i^3*j,d^13*g^9*h^4*k^3,c^2*e^11*f^3*g^16*h^2,c^23*d^7*f^3*j^9,c^35*i^2*j^3*k^7,e^6*f^7*h*i^11*j^7,c^9*i^13*j*k^3,d^26*f^2*g^5*i^3*j^4,d^3*g^7*i^16*k,c^9*d^5*e^15*f*h^3*i^6*j^2*k,d^16*e^22*i*j^3,c^10*d^40*e^2*k^3,c^20*d^3*g^17*i^2,c^45*d^5*e^17*f*j^2,d^59*g^7*i*k,c^20*d^24*e^13*g^4,d^8*e^22*f^4*g*h*i^6,c*e^10*i^22*j,d^5*e^2*f*h^16*j*k,c^37*e^12*i^8*j,d^5*f^6*j^6*k^8,c^5*g*i^2*k^17,e^19*g^3*j^12,e^8*h^5*i^6*j^6,e*g^4*h^4*i^8*k^8,d^11*h^9*i^3*j^2*k^3,d^2*e^6*f^8*h^8*j^6,c^3*d^11*e^9*f^6*k^9,c^3*d^12*f^22*h,c^10*g^5*h^7,c^15*d^5*f^14*g^5,d^6*e^6*g^19*j,d^30*e^5*f^5*g*i^3*k^7,e*f*i^9*j^13,c^8*e^28*h^5,c^9*d^3*f^7*i^10*k^4,c^10*d^16*e^15*f^2*h^10*j,c^13*e^20*f^10*k^3,c^53*i^2*j^6*k,d*h^5*i^19*j*k,e^17*h^12*i^6,b*e^6*f^3*g^22*h^5,b*c^9*d^24*e^2*f^9*i^3*k^2,b*c^16*d^7*e^3*i^6*j^2*k^8,b*c^28*d*g^6*i^5*j,b^2*d^4*e^22*g^7*i^3*k^5,b^2*d^35*e^9*f^6*g*j,b^2*c^2*g^3*h^3*i^16,b^2*c^5*d^49*j^5*k,b^2*c^20*d*e^8*h^14,b^3*h^4*j^4*k^15,b^3*c^14*e^21*i*j^6,b^3*c^26*e^14*i^3*k^2,b^3*c^28*d^22*e*h^3*j^2,b^4*d*e^2*g^3*j^5*k^13,b^4*c^14*e^3*h^5*i^11*k^2,b^5*d^16*f^7*h^5*i*j^5*k^4,b^5*c^3*d^41*g^3*h^3*i,b^5*c^5*e^6*f^4*h^2*j^2*k^9,b^5*c^17*g*h*k^18,b^5*c^38*d^6*e^12*f*h,b^5*c^50*e^5*g^5,b^7*c^13*d^25*e^8*g^10*h,b^8*c^3*e^6*f^10*h^7*i^2*k^3,b^9*c^4*d*f^5*g^12*h^4*k^5,b^9*c^11*f^7*j^9*k^2,b^11*d^6*f^6*g^2*i^3*j^4,b^11*g^7*i^5*k^9,b^11*d^30*f^4*g*k^4,b^12*c^9*f^13*h*i^5*j,b^13*e^24*f^2*i*j^3*k^3,b^13*e^6*f^10*g^9*j^2,b^13*d^20*e^4*k^7,b^13*c^10*d^13*k^16,b^13*c^10*d^14*f^8*g^8,b^15*c^8*d^4*e^15*f^4*g*k,b^16*d^12*e^4*f^6*h^3*i^3*k,b^17*c^2*d^2*e^10*i^6*j^4*k^5,b^17*c^4*d^33*f^3*i*j^6,b^18*c^6*e^15*f^10*g^4*h,b^18*c^39*f^2*i^5*k^5,b^19*c^21*e^9*g^2*i*j^6,b^19*c^26*d^10*e*g^2*k^3,b^20*e^10*f^3*i^11,b^20*c^9*d^8*h^3*i^9,b^21*e*j^8*k^7,b^24*e*f^4*g^2*h^5*k,b^25*d^10*g^15*h^2*k^3,b^25*c^6*f*j^15,b^26*d^4*f^3*h*i^6*j^9,b^26*c^6*i^8*j^3*k^9,b^28*c^16*g^3*i^5*j*k^3,b^28*c^18*d^12*f^5*h^3*j^3,b^29*c^3*g^17*j^2*k,b^30*d^13*e^8*i^7*j^3*k,b^30*c^16*d^2*e^3*f*h*j^2*k,b^31*c^3*d^13*e^10*g^4*j^3,b^32*d^21*h*i,b^34*d^11*e^28*k^2,b^34*c*d^5*e^10*f^4*g^7,b^34*c^13*e^3*g^12*k^2,b^35*c^8*i^14*j,b^36*c^44*j,b^40*g^5*h^3*j^6,b^40*f^12*g^5*k^2,b^42*e^17*f^8*k^5,b^44*f*g*i*j^13,b^45*c^3*e^5*h^10,b^47*h*i^9*k^4,b^49*c^9*d^3*f*h^4*i,b^59*d*e*f^4*i*k^3,b^61*c^3*d^9*f^6*g^3*h*k,b^63*d^7*i^6*k^5,b^65*c^7*f^3*g^5*i^3,c^5*d^31*e*f*g^5*h^3*i^4*j,d^19*e^3*j^9*k^8,d^11*e^3*f^5*g^2*h*i^4*j*k^2,d*e^32*f*i^2*k^5,c^3*e^14*f^9*g^9*i,c^21*d*f^4*g^10*i^6,h^12*i^4*k^9,d^7*e^5*g^9*h^5*k^7,d*f^4*g^23*h^5,c^13*d*e^2*j^12*k^2,c*d^9*f^2*h^6*i^7*j^6*k^2,d^20*g^5*i^2*j^7,c^11*e^2*f^6*h^4*i^4*j^4,d^10*e^27*j^6*k^3,d^34*e^7*h*j^2*k^7,c^10*e^2*g^17*i*k^3,c^12*d^28*f*g^11*h*j,c^10*d^18*e^18*g^4*k,d^2*e^27*f*g*h^2*i^5,d^26*e^7*h^6*i^2*k,c^29*f*i^9*j^5,d^7*g^3*h^19*k^3,c^2*d^8*e^13*g^2*i^10,c^4*d^39*f^2*i^5*j,c^51*e^8*i,d^16*e^2*h^2*i^18,d^12*f*h^11*j^11,e^5*f^9*i^4*j*k^6,d^5*h^10*i^2*j^5*k^7,f*g^4*i^6*k^15,c^26*d^16*e^4*g^8*i^4,d^6*e^3*f^19*h^2*j,e^4*g^5*h^8*j^3*k,c^5*f^11*g^5*h*k^4,i^10*j^10*k^5,d^18*h^4*i^5*j^12,f^4*i^9*j^2*k^8,d^18*e^7*f^6*i^2*j^3*k^6,c^6*d^2*g*h^2*i^2*j^10,c^11*d^12*f^14*g*i*j^2,g^3*h^4*i^15*j^2,c^10*e^13*h^15*k^2,c^41*h^6*i^6*j,c^4*e^26*j^9,c^18*d^16*e^6*h^4*j^5*k,c^21*e^11*f^2*i*k^9,c^28*e*g^13*i*j^2,c^30*d^9*h^3*k^10,e^15*h^7*i^8*j^3,d^10*e^7*f^12*i^7,c^6*d^24*h^11*i^5*k,c^9*d^3*f^4*i^9*k^9,d^35*e^2*g^3*h^4,c^28*e^17*h^2*j^3,c^14*e^19*g^2*h^4*i^7,c^16*d^8*e^6*h^9*i^2,e^7*g^6*h^3*k^11,h^6*i^2*j^21,c^27*d^8*e^4*f^5*i^4*j^2*k^2,d^27*e^2*g^6*h^9*i^5,c^10*d^6*e*i^13*j^4,c*e^4*f^4*j^12*k^6,f^3*g^2*i^2*j^7*k^4,d^24*f*g*h*j^3*k^8,c^11*e^15*f^8*j^10,b*e^4*f^10*h^2*i^4*j^4,b*c*d^3*e^2*h^6*i^2*j*k^13,b*c^11*f^2*h*i^6*k^9,b*c^44*e^3*g^4*i^4,b^2*d^14*e^9*j^2*k^11,b^2*e^4*g^14*i*k^7,b^2*d^8*f^5*g^8*j*k^2,b^4*d^27*f^4*g^18,b^4*e^20*f*g*k^5,b^4*c^12*d^22*h*k^9,b^5*d^6*e^9*f^3*h^4*i^2*k^5,b^5*d^20*h^15*k^6,b^5*e^2*g^2*h^3*i^4*k^14,b^6*d^17*e^16*g^11*k^3,b^7*d^11*e^15*h^14*j^2,b^7*d^29*f^10*i^7*j^2,b^7*e^20*f^7*g^4*h^2,b^7*c^5*d^4*e^8*g^3*h^13,b^7*c^17*e^6*f^7*i^2*j^6,b^8*c^4*d^11*e^13*f^4*j^7,b^8*c^16*d^4*e^6*g^2*j*k^7,b^8*c^18*d^35*f^2*j^3*k^2,b^9*d^19*e^2*f^6*i^5*j,b^9*d^2*e^3*h^4*i^8*j^3*k^4,b^9*c^4*d^12*i^7*k^7,b^9*c^6*d^43*f^4*h^2*i^2*k^2,b^10*d^30*e^9*f^3*g^7*j^2,b^11*c^2*d^3*e^13*f^10*i^2,b^11*c^14*e^6*f^2*g^5*i^4*k,b^11*c^16*d^27*f^8,b^12*f^2*g^2*j^19*k,b^12*c^2*d^4*f^4*g*h^2*i^12*k,b^13*e^6*f*g^2*h^6*j^3*k^5,b^13*f^7*h^11*j^5,b^13*c^8*e*i^15*k^5,b^15*d^36*e^18*f^3*g^2,b^16*c^20*g*j^12*k^2,b^17*f^4*i^2*j^10,b^17*f^18*i*j^2*k,b^17*c^8*d^6*f^2*h^4*j^6*k^2,b^19*c^6*e^8*h^2*j^5*k^5,b^19*c^18*e*h*k^14,b^20*d^4*h^9*i^5*k^5,b^21*e^24*g*i^3*j^4,b^21*d^15*e^4*h^2*k^3,b^21*d^9*f^5*g^14*h^2,b^21*c^16*e^19*f^2*j^3,b^21*c^30*d^4*h^4*k^3,b^22*c^9*f^18*i*k^2,b^22*c^13*d^2*h^18*j,b^23*c^3*e^8*g^12*k^6,b^23*c^5*d^23*g^6*h^4*k,b^23*c^12*d^9*e*f*j^12,b^24*d^7*e^4*f^3*g^3*h^7*i^5,b^25*c^34*e^5*j^4*k,b^26*d^5*i^16*k,b^26*c^22*i^7*k,b^27*d^12*e^8*f^4*g^3*j^5,b^27*c^9*d^5*e*g^8*i^2,b^27*c^58*g^4,b^28*c^22*d^15*e^10*f*h^3,b^30*c^7*e*f^2*g^11*i^7,b^31*d^2*e^2*f^3*k^13,b^32*e*f*g^8*h^9*i^2*j,b^32*g^7*h^13*k,b^32*c^7*d^18*e^17*f^4*h,b^33*g*j^16,b^36*g^9*h^2*i^7*j^2,b^36*c*d^7*f^2*g^3*h^7*i^2*j^4,b^38*e^3*h^5*j^3,b^38*c^4*d^7*f^12,b^39*d*e^3*g^15*k^4,b^39*d^32*g^9*h^2,b^40*c^21*e^7*g^8*h^2,b^42*c^17*d^3*i^5*j^4,b^46*c^39*d*e^9,b^48*e^6*f*k^7,b^50*d^3*f^3*g^3*h^2*k^5,b^54*e^3*g^5*i^2*k^3,b^54*d^16*f^6*j,b^55*c^10*e^12*f^5*h*k^3,b^65*c*d*h^7*k^5,b^71*c^15*e^2*f*g*i^2*j^2,b^71*c^29*k,b^73*d^23*e^3*i,b^75*c^2*e^7*g^3*k^2,c^13*d^7*e^5*g*h^7*i^3*j^7,d^29*g*h^6*k^10,e^19*f^6*g^9*j^2,c^50*j^4*k^8,c^11*e^5*f*g^10*i^5*j^3*k^2,c^13*d^26*f^7*g^4*j^5,d^59*g^6*k^2,c*e^7*f^3*h^5*i^3*j^7,c^6*f^17*i^2*k^3,c^2*d^22*g^11*h^2*j^4*k^2,d^6*e^3*f^2*g^8*h^5*i^6*j^2,e^32*g*h^3*i^4*j*k,d^20*e^12*h^7*i*k^5,c^19*i^8*j^8*k^2,d^4*e^23*g^7*h^5,c^19*d^14*e^9*h*i*j^9,c^43*d*g^5*i^2*j^2,d^33*e^5*h*i^4*j^4,c^41*e^13*j*k^3,d*e*f^2*g^2*j^6*k^14,c^18*d^41*f*g^2*h^3,e^8*f^16*h^3*j^4,e*f^8*g^5*h^2*k^8,g*h^16*i^6*k^5,d^6*f^6*g^2*h^19,e^2*g*h^3*i*j^13,c*d^6*f^11*g*j^5*k,c^13*d^20*e^3*f^5*k^8,c^6*g^9*h^7*i^8*k,d^15*e^19*f^6*g^4*i*k^2,e^2*g^23*i^3,c^18*e^22*h^3*j^6,c^6*d^2*e^11*h^10*i,c^11*d^12*e^3*f^11*h^3*k^2,c^5*d^10*f^4*i^11*k^6,d^21*e^5*f*g^5*i^6*k^4,d^52*f^7*i*j^2,c^36*e^8*g*j^7*k,c^15*e^9*f^8*i^8,c^24*d^8*h^3*i^6*j*k,e^5*g^2*i*j^10*k^8,e^6*h^6*i^17,c^11*d^19*e^4*g^11*i*j^2,c^15*f^3*j^9*k^8,c^34*e^8*g^4*h*i^3,d^2*f^2*g^8*j^4*k^6,d^10*f^4*g^4*h^7*i^3*k^6,c^4*d^58*e*f^7*i,c^13*f^9*g*h^5*j*k^2,e^25*g*j^3*k^9,e^7*f^6*g^15*j^2,e^14*h^5*i*k^9,c^9*d^4*f^8*h*i^3*j^10*k,d^15*f^5*g^4*j^11,f*g^6*i^11*j^3*k^4,e^13*g^3*h^14*k^4,d^8*e^5*f^2*g^3*h^7*k^7,c^7*e^11*f^4*i*j^9*k^4,c^31*f^4*g^2*i^2*j^2*k^4,d^5*e^18*f*j^10*k^2,c^5*f^8*h*i^13,c^6*e^11*g^2*j^4*k^11,c^8*d^29*j^6*k^6,d^13*e^7*f^3*i^4*j^4*k^2,d^6*i^6*k^11,d^7*f^11*g^7*i^3*j^3,d^37*f*h^3*i*k^6,c^6*f^3*g^12*i^5*k^2,c^29*e^15*j*k^7,c^31*d^2*e^2*f^6*h*j^3*k^2,d^32*e^3*f^2*g^3*i^7,e^18*f^7*i*j^2,c^4*e^11*g^5*i^3*k^5,c^6*d^21*f^5*h,c^18*d^14*g^4*k^9,b^2*c^4*d^11*e^27*f*k^3,b^2*c^28*e^2*f*g^11*k^3,b^2*c^49*d^8*f*j^4*k^4,b^4*c^10*d^3*e^4*f^2*g*i^6*j^3,b^4*c^12*d^34*f^8*i*j^5,b^4*c^59*f^5*j^2,b^5*d^11*f^4*i^14,b^5*c^2*d^3*e^27*f^7*h^4*i,b^6*e^4*f*h*i*j^13*k^2,b^6*h^5*j^9*k^6,b^8*c^32*d*e^24,b^9*e^4*f^7*g*h^6*i^6*j^5,b^9*f^5*h^10*i^3*j,b^9*c^20*d^9*e^13*f^2*i^6,b^10*d^3*f^2*g^14*h^3*j^2,b^11*e^13*f*h^8*i*k^3,b^11*e^5*f^15*h*k^6,b^12*e^20*g^7*h*j*k,b^12*c^12*e*g^6*i^3*j^12,b^13*d*e^9*g^3*h^8*i^4*k,b^13*f^2*g^2*i^11*j^6,b^13*c^14*g*h^3*i^8*j^2*k^2,b^14*c^24*e^10*j^7*k^5,b^14*c^26*d^11*j^9,b^15*e^4*i^15*j^2*k^5,b^15*e^6*f^4*h^2*i^4*j^7,b^15*c^5*d^5*f^18*i^3,b^15*c^12*h*i^6*j*k^5,b^16*e^6*g^8*i*j^2*k^3,b^16*c*d^30*g^2*j^4,b^16*c^11*f*g^22*j,b^17*d^7*g^4*h*i^9*k^3,b^17*c^22*e^10*g*i^3,b^17*c^24*d^3*f^6*h^4*j,b^17*c^36*h^3*k^3,b^18*d^20*e^22*j^3*k,b^18*c^10*f^2*h^6*i^11,b^18*c^23*d^7*g^14*k,b^19*e^6*g^11*i^6,b^19*d^22*f^5*g^5*h^4*i,b^19*c^18*d*i^9*j^8,b^21*d^12*e^22*f*h^2,b^21*c^9*d^5*e^15*g^3*h*i*k^4,b^22*g*j^19,b^22*c^4*e^10*i^15*j*k,b^23*c^40*e^12*i*j,b^25*d*g^3*h^8*i*j^7,b^25*c^15*d^18*e^8*i^4,b^27*e^8*h^6*j^6*k,b^27*d*f^9*k^4,b^27*c^6*f*g*k^13,b^27*c^13*g^15*h^5*k,b^29*d^10*e^4*g^6*h^6*i^2*j,b^29*c^13*g^2*h^8,b^31*e^6*f^6*i^6*j^3*k^2,b^31*c^7*i^4*j^7*k^3,b^33*c^19*d^12*h^2*j^7,b^33*c^22*f^8*g^4,b^34*c^5*h^4*i^9,b^35*f^7*g*h*j^7*k^4,b^35*c^29*e^14*k^4,b^36*c^5*d^10*e^10*h^7*i^2,b^44*c^12*f^10*h^2*j,b^48*e^17*i*k^8,b^52*c^3*e^10*i^4*k,b^54*c^27*d^6*e*f^2*g^2,b^56*c*e*f*h^6*k^3,b^64*d*e^19*j,b^64*d^25*h^2*k,b^68*d^7*e^5*i^2*j^2,b^97*c^10*g^2*k,b^108*f^2*h^3,c^8*d^11*e^2*f^10*g*h*i*j^2*k^3,d^7*e^4*f*g^8*h^5*j*k^8,g^6*h*i^12*k^6,c^25*e*g^16*k^4,c*d^12*f^10*g^7*h^4*i^4,d^2*e^26*f^6*h^2*i^2,c^17*d^8*e^12*f*g*i^7,d^8*f*g^14*h^8,c^7*f*g^2*h^4*i^12*j^3,d^11*e^21*g^3*j^5,c^6*d^4*e^14*g^8*i^2*k^5,c^8*d^35*e*g^2*h^4*j,c^18*g^22*i,c^25*d^6*i^10*j^5,f^8*g*j^8*k^5,c^3*d^14*e^8*f^2*j^3*k^12,f^14*g^4*h^2*i^4,d^33*e^4*f*g^3*k^10,c^13*e^19*f^6*j*k^6,c^8*f^2*g^10*h^11*j^2,c^20*d^4*e^7*g^2*h^13*k,c^7*d^19*e*f^11*i^2*j^2,e^21*f^2*g^12*i^2*j*k^2,c^24*e^13*g^4*h^2*i^2*j^2,c^29*e^5*f^7*g^4*i*k^2,e*g^8*h*j^7*k^10,c^9*f^9*j^11,d*f^8*g^7*i^2*j^6,g^12*i^4*k^6,c^9*d^4*f^5*h^9*i^2*k^6,e^23*f^4*j^5,e^16*g^5*i^2*k^9,d^15*e^3*f^2*h^2*j*k^4,c^8*d^8*g^4*h*k^13,c^19*e^7*f^9*h^7,d^5*e^32*k^7,c^6*e^14*f^6*g^6,d^7*e^3*f^8*g^2*h^7*i^2,c^6*g^7*h^6*i^4*k^7,e^9*g*i^5*j^6*k^2,c^2*d^28*f^5*j^8,c^5*d^7*e*f^13*g*i^4*k^5,c^14*d^21*i^2*j^2*k^6,d^5*f*i^13*k^2,c^37*f^4*i^4*k^2,c^24*d^5*f*g^7,d^20*f^11*h*i^5,d^61*e*k^2,g^4*h^4*j^10*k^4,f^2*h^11*i^2*j^4*k^4,e^38*f*i^8,d^10*e^25*f^7*i^3,c^10*d^3*e^18*i^5*k^3,c^22*f^7*g^10*i^4,d^45*e^12*f^2*g^4,h^13*k^11,c*e^3*f^4*h*i*k^19,c^34*d^11*e^9*f*g^2*k,b*d^5*f*g^20*h^6,b*c^9*f*j^4*k^18,b^2*d^26*e*f^3*h^14,b^2*g^2*i^10*j^9*k^2,b^2*f^5*h^5*i^5*j^11,b^2*e^29*f^2*h^7*j*k,b^2*d^9*f^19*i^4*j^3,b^2*c^4*g*h^4*i^7*j^5*k^6,b^2*c^8*e^9*h^11*k^5,b^2*c^16*d^16*e^11*f^2*i^8,b^4*e^3*f^15*i^2*j^2*k^3,b^4*c^2*e^4*h^2*i^5*j^4*k^9,b^4*c^4*d^13*h^7*j^6*k^4,b^4*c^14*f*g^8*h^2*i^4*j^3,b^4*c^16*d^7*f^7*g^2*h^7*j^5,b^5*e^18*g^3*j^11,b^5*d^24*g^2*j^7*k^2,b^6*d*g^4*h^2*i^8*k^7,b^6*c^12*e^15*g*i^2*j^2*k^3,b^6*c^14*e^2*f^3*h^5*j^4,b^6*c^19*d^7*f^17*k,b^6*c^26*h^4*k^7,b^8*d^16*f^2*g^5*h^5,b^8*c*d^9*g^10*h^4*i^2*k^5,b^8*c^8*i^8*j^11*k^2,b^8*c^36*e^6*g^7*h^2*k,b^9*c^24*f*g^3*h^9*i^4*k,b^10*d^14*i^11*j^6,b^10*d^6*e^27*h^3,b^10*e^9*f^6*g^12*h^3,b^10*c^11*e^2*g^17*h^2,b^10*c^23*f^14*i^4*j,b^10*c^32*d^3*i^2*j^5,b^12*e^4*g^7*i^8*j^4,b^12*c^7*d^22*g^6*i^5,b^12*c^30*e^17*j^4*k^3,b^12*c^56*d^11*g^2,b^13*c^30*f^4*h^3*i^7,b^14*c^5*d^12*e^13*i^3*k,b^14*c^7*d^43*h*j,b^14*c^54*d*e^8*k,b^16*e^5*f^6*j*k^8,b^16*g*k^17,b^17*c^3*d^4*e^13*g^2*h*i^8,b^18*d^14*e*f^5*g^6*k^6,b^18*c^3*e^4*g^2*h^9*j^3*k^3,b^19*d*h^16*k^3,b^20*d^8*f^9*j^8*k,b^20*c^2*d*f*i^2*j^2*k^10,b^21*c*e^4*g^5*h^14,b^22*c^9*d^6*h^3*j^10,b^22*c^12*e^2*f^5*g^4*k^4,b^23*f^15*i^5,b^23*h^5*i^8*j^2*k,b^23*d^14*h^10*i^3*j^4,b^23*f^7*i^7*k^4,b^24*e^6*g^14*i^3*j^3,b^24*c^31*e*g^10*j^2,b^25*c^12*d^7*f*i^2*k^11,b^26*d^9*e^4*g^15*h*j^3,b^27*c^17*e^19*h^5*k^2,b^30*c^5*d^31*f*g^2*k^2,b^32*d^4*j^7*k^6,b^33*c^2*e^4*f^7*h^3*j^4*k^2,b^37*e^4*f^2*g^14*k^3,b^39*d^2*f*g^3*i^5*k^2,b^39*d^33*f^7*h*j^2,b^41*d^23*e^2*f^3*j,b^41*c^7*d^16*k^9,b^43*c^5*d^7*e^13*f^7,b^43*c^17*e^6*g^2*k^3,b^44*c^5*d^8*f*h^3*i^5*k^3,b^47*c^23*d^13*f^2,b^49*f*h*j^10,b^51*d^5*g^5*h*j^5,b^54*c^7*e^8*f*h^8*k,b^56*d^11*e^4*h^8,b^57*g^13*j^4,b^58*c^25*h*k^3,b^59*c^12*d^9*e*g^5*k,b^60*d^17*g*h*i^3*k,b^60*c^35*e^5,b^62*c^10*d*e*g^8,b^68*c^2*g^6*h^3*j^2*k,b^89*e^3*f^3*g^5,b^99*e*h^4*k,d^5*e^7*f^7*g*h^2*j^5*k^7,c^7*d^2*e^17*g*i^6*j^3*k^4,c^31*d^10*e^8*g^7*k^2,e^7*f^21*h^3*j^5,f*h^16*i^3*j*k^6,c^16*d^6*f^16*j^6*k^2,d^25*f^15*g^10*j,d^29*e^6*g^2*h^5*j^4*k^4,c^8*e*g^22*j,d^21*e^6*f*g^5*h^10*i,d^3*e^12*g^7*i^9*j,c^49*e^7*f*g^3*h,e^3*g^10*h^12*j^5,d^13*e^6*f^8*i*j^5*k^3,c^9*d^6*i^3*k^12,c^9*d^7*f^16*g^6*j^4,d^32*e^2*f^7*g^2*i^4*k,c^7*e^17*f^12*j^3,c^2*d^30*g^7*i*j^7*k^3,c^25*d^3*e^3*f^7*i^3*j^4,f^5*g^7*h*i*j^9*k,d^12*e^28*f^2*g^3*i^4,c^7*d^26*e^16*g^2*i^2*j^2*k,d^9*e^8*h^3*j^4*k^8,d^3*f^7*g^13*h^3*j^3,d*e^8*f^5*g^2*h^8*i*k^2,d^15*g*h^19*k^3,d^22*e*f^2*j^11*k,d*e^6*f^10*g*i^3*j*k^9,c^4*d^15*i*j^5*k^10,e^3*i^12*j^3*k^6,c^15*e^5*f^9*h^2*i*j^8,c^27*f*h*i^3*j^2*k^6,d^41*f*g^5*i^2*j^6,c^14*e^5*g^7*j^3*k^4,c^16*d^30*f^4*g*j^5,d^14*e*f^8*h^2*i^4*j^3,c^2*d^7*g^3*h*i^6*k^4,c^14*d^20*e^21*j^4*k^2,d^4*e^30*f^4*i^2*j^2,e^12*f^12*g^5*i*j,c^2*d^28*e^10*f^2*h^4*k^2,c^12*e^5*f^4*g^10*i^3,d^39*e^17*g^4,c^6*g^5*i^14*j^2*k^2,c^12*d^12*e^21*f^6*h^2,c^24*d^5*e^14*g^2*h*k^5,j^20*k,g*i^22*k^2,c^6*d^10*e^16*i^7*j^3,c^7*d^45*e^3*g^5*k^2,e*f^4*i^3*k^16,c^4*g^8*h^3*i^3*j^6*k^4,c^30*d^18*e^7*f*i,c^4*d^2*e^16*f^5*i^12,d^12*e^4*f^11*i^4*k^5,d^8*e^6*f^22*j^5,c^4*e^7*h^6*j^7*k^2,c^5*d^37*e^3*g^8*i^4,c^9*d*f^14*k^5,c^16*h^5*j*k^11,f^2*h^13*i^4*j*k^2,d^10*e^3*g^5*h^6*j^2,d^3*g^10*h^5*i*k^9,c^10*f*g^4*i^6*j^13,c^26*e^11*g^7*h^3*k^5,c^2*e^7*f^6*h^11*i,c^7*f^20*h^4,c^14*g^3*h^10*i^3*k^5,e^32*h^4*j*k^3,c*e^7*g^17*h^3*k^3,c^10*d^4*f^3*j^14,c^13*e^5*f^11*i^3*j^4*k^3,c^22*i*j^8*k^4,e^2*h^2*i^12*j^6,c^9*d^8*g^10*j^9*k^2,c^14*e^16*h^13*k^3,b*d^16*g^6*i^4*j^3*k^2,b*d^47*h^4*j^5,b*c*d^8*e^23*g^4*h^6*k,b*c^32*e^4*g^3*j^6,b*c^46*d^5*g^2*h*j^2*k^2,b^2*g^3*h^2*i^15*j,b^2*c^20*f*h^4*i^6,b^3*d^13*e^25*j^8,b^3*d^6*e^18*i^2*j^2*k^5,b^3*d^37*e^5*h^2*j^4,b^3*c^7*g^13*i*j,b^3*c^9*d^30*h*k^9,b^4*c^32*d^3*e^2*h^6*i*k^5,b^5*c^5*e^29*g^6,b^5*c^7*d^21*e^16*j^2,b^5*c^19*d^14*e^9*g^5*k^3,b^5*c^21*d^45*h^4,b^6*e^18*g^2*h^2*i^7,b^6*d^29*e^5*f^2*h^7*i^2,b^6*c^7*d^22*g*h^6*i^4*k^3,b^6*c^38*i^11*j,b^6*c^42*e^13*h^4,b^6*c^63*i*j^7,b^7*d^33*e^5*g^15*k,b^7*c^12*i^22,b^8*c^5*d^13*e^16*f^6*g^3*h^5,b^9*c^6*d^19*j*k^18,b^10*d^11*e^11*i^10*j,b^10*c^11*d^4*e^4*g^3*i^12*k,b^10*c^13*d^35*i^7,b^10*c^27*f^13*g^4*i^2*j*k,b^10*c^48*e^6*f^2*i,b^10*c^60*i^3*k,b^11*e^2*h^4*j^13,b^11*c^2*e^7*f^2*g^4*j^3*k^8,b^11*c^4*d^10*f^8*j^5*k^3,b^12*e^3*f^12*i^4*j^3,b^12*d^18*f^10*h^4*i*k^3,b^14*e^2*g*h^9*j^5,b^14*c^2*d^2*f^14*g*h^2,b^14*c^9*g^6*h^8*i*k^3,b^14*c^11*d^16*h^13*j,b^15*d^19*e^19*f^3*g*k^4,b^15*e^2*g^20*h*k,b^15*c^8*f^5*i*j^10*k,b^16*f^7*i^9*j^4*k,b^16*e^23*f^10,b^16*c^9*d^6*e^11*h^11*k,b^18*c^6*f^11*g^3*i^6*j^2,b^18*c^8*d^14*f*i^4*k^8,b^20*c^13*e^17*i^2*j^5,b^20*c^18*e^9*f^5*i*k^2,b^20*c^27*d^12*h^4*j*k^3,b^21*c*e^6*h^7*i^10,b^22*c^42*d^6*f^7*g,b^24*e^5*f^3*g^2*h^4*j^2*k^4,b^26*c^55*d^2*g^2*i,b^28*g^3*i^4*j^3*k^6,b^30*d^17*e^7*j^4*k^4,b^30*e^2*f^2*g^10*i*j,b^30*d^10*k^13,b^30*c^9*d^4*g^9*k^4,b^32*d^36*e^3*k^2,b^32*d*e^18*f^4*j^2,b^32*c^7*e^11*g^2*k^7,b^32*c^9*d^25*f^2*h^2*k^2,b^35*c^5*e^11*f^2*g^5*h^2*i*k,b^35*c^26*f^2*i^4*j^2*k^2,b^36*c^13*d^7*e^4*j^3,b^37*c*d^15*f*i^7,b^40*g^5*h^2*j^8*k^2,b^41*f^2*h^11*j*k^2,b^41*c^23*d^13*e^13*k,b^45*c^3*i^4*j^6,b^49*d^18*e^2*h^3*j^2,b^49*d^11*g*h^2*i^2*k^5,b^49*c^25*e^10*k,b^51*e^6*g^8,b^54*c^19*f^2*h*i^7,b^55*c^6*d^8*g^4*i^2*j,b^59*d^5*f^6*k^6,b^66*c^8*h^5*i^2,b^82*e*f^3*g*i^2*j,b^103*d^3*e^5,c^21*d^4*e^13*g^7*k^6,d^38*f^15*g*i^2,c^27*e*h^9*i^7,e^4*i^2*j^2*k^16,c^23*d^8*g^3*h*k^14,c^4*e^10*g*h^14*j^2,c^15*e^8*f^4*i^2*j^7*k^3,c^3*d^5*f^6*i^10*j*k^3,c^27*d^13*f^8*g^2*i^4*k,c*f^7*h^11*j^5*k^5,c^6*d^24*f*g*j^8*k^3,d^8*e^6*f^5*h^3*i^3*j^6,d*g^3*h^2*i^5*k^8,c^29*e*f^8*h^5*j^5,e^17*f^9*g^5*h*j^4,c^2*e^10*f*g^10*i^2*k^2,c^4*d^16*f^7*g^4*h^5,c^16*d^9*g^9*h^4*k^6,c^10*d^6*e^3*g^3*j^13*k,d^14*i^8*j^7*k,c^2*d^6*e^26*f^3*h^3,c^47*d^3*f^3*j^6*k,d^35*e^8*f^2*i*j^8,c^10*d^28*e*i^3*j^2*k^8,c^22*d^22*f^2*g^5*i^2*j,d^6*f^6*g^2*h*i^13,c^20*d^12*e^12*k^2,e^21*f^2*i^11,d^62*f^3*g^2*h,e^4*f^11*j^2*k^9,c^44*d^20*e^3*g^4,e*h^14*i^3*j^4*k^6,d^14*f^10*g^5*k^7,d^12*g*h^14*i^6*k^4,e^4*f^17*h^5*k^3,c^6*d*f*h^16*k^4,c^12*d^2*e^7*i^16,e^5*h*j^17,c^12*j^11*k^8,d^27*f^13*g*j^4,d^41*h^5*j^8*k,c^27*e*f^10*g^3*j*k^5,e^5*f^6*h^6*i^3*j^9,c^3*f^20*i^2*j,c^10*h^5*i^5*j^3*k^2,c^15*f^12*i^4*k^5,e^5*g^13*j^4,c^2*d^4*f^9*g^13*k^3,d^2*g^9*h^5*i^8,c^20*e^9*f^2*g^6*h^3*i^2*j,d^15*e^21*h*j^5,c^2*d^25*e^13*f^11*k,c^21*d^2*g^19,d^23*e^10*h^8*i,d^16*e^3*g*h^7*i^3*k^7,c^32*e^18*h^5*k^3,d^15*g^5*i^11*j^5,d^7*e^21*f^3*g^3*h^6,c^7*e^14*g^8*h^5*k,c^6*d^7*e^19*f^8*g^2*j^2,c^15*d^21*e^7*g*j^6,e^50*h^4,c*e^9*g^3*i^11*k^5,c^3*d^29*h*i^6,c^38*e^11*j^3,c^50*e^4*i^2*k^5,d^4*f^5*j^8*k^7,c^6*g^3*j^2*k^16,b*e^8*f^9*h*i^3*j^6*k^3,b*e*f*i^5*k^12,b^3*e^7*g*h^10*j^8,b^3*f^11*g*h^3*k,b^3*c*d^10*h^14*j^4*k^2,b^3*c^4*f^3*g^6*h^2*k^10,b^4*e^5*f^2*j^13*k^5,b^5*c^2*e^21*k^13,b^6*d^2*f*g^3*h^19,b^7*d^5*e^24*f^6*g^4*h*k^2,b^7*h^4*i*j^15,b^7*e^5*f^8*g^3*i^5*j^5,b^7*d^9*f^14*j^7,b^7*c^10*d^2*f^6*g^2*i^2*j*k^3,b^8*e^16*h^17,b^9*c^8*e^14*f^2*k^6,b^9*c^10*d^23*e*f^8*j^2*k,b^9*c^22*d^16*k^10,b^10*e^3*f^4*h*i^8*k^6,b^11*c^32*e^5*f^4*g*k^4,b^12*c^6*e^14*f^8*i^5,b^12*c^15*e^2*h^10*i^3*k,b^13*c^14*d^5*e^7*f^5*i^3*j^7,b^13*c^26*i^5*j*k^8,b^14*c^2*d^13*f^7*i^11*j,b^15*c^3*d^48*f^2*i^3*k,b^16*c^19*e^8*i^11*j,b^18*c^31*e^6*h^2*i^3*j,b^19*d^5*f^5*g^4*h*j^6,b^19*g^9*k^8,b^20*d^13*f^7*h^8*i^3,b^20*c^22*f^4*g^2*h^5*k^4,b^21*e^23*f*j^5*k^2,b^21*c^9*f*g^16*k^2,b^23*f^2*g^6*i^3*j^11,b^23*c^5*d^11*g^5*j^7*k,b^24*d^11*e^3*f^5*h^8,b^25*c^3*d*e^9*j^6*k^4,b^26*d^9*i^6*k^4,b^26*c^3*d^3*f^6*g^8*i^5,b^26*c^40*f*h*k^4,b^28*c*e^9*f^2*g*i^3,b^28*c^3*d^24*f^8*h^2,b^28*c^10*d^7*h^8*i*j^2,b^28*c^15*d^17*h*k^2,b^30*c*d^14*e^25*f^4,b^30*c^13*d^7*e^18*k^5,b^30*c^25*d*f^4*g^7,b^32*c^19*g^2*i^8,b^34*h*i^3*j^9*k^4,b^34*d^3*f^2*h^6*j^11,b^34*f^10*i^2*j*k^7,b^36*c^8*f^14*g^6*k,b^37*f^2*g^2*h^6*i^8*j,b^38*d^12*e^7*h^4*j^5,b^38*c^15*e^15*h*j^2*k^5,b^39*c^5*d^9*f^2*h^13,b^43*c^9*h^2*i^6*j^3,b^44*c^10*d^26*g^3,b^45*d^10*h^2*i^9,b^45*c^33*f*h^4,b^46*c^8*d^16*e^13*k^3,b^49*c^6*d^8*e^13*h^2*i,b^50*f^4*g^2*j^7*k^5,b^55*d^4*f^12,b^55*h^6*i*j^2*k^3,b^55*c^3*f^4*k^6,b^57*c^10*d^2*h^9*j^2,b^57*c^13*e^2*f^8*g^4,b^71*e^6*g*i*j^4,b^71*d^6*k^4,b^73*c^8*f^2*g^7,b^76*e^15*i*k,b^77*c^2*d^9*e^8*j^6,b^90*d^7*g^6*i,c^3*e^13*f^7*g^3*i^6*j^2*k,d^10*e^2*f^4*g^4*h^6*j^3*k,e^31*h^4*j^2*k^4,d^23*f^7*j^10,c^3*d^2*f^15*g^6*i^3*k^2,c^12*d^16*g^5*i*j^4*k^3,f^3*g^2*h^2*i^12*j^2,c^10*d^6*e^17*j^3*k^6,c^12*d^37*e^4*f*h^2*j^5*k,c^22*f^3*g^12*j^2,e^26*i^10*j*k^2,c^10*d^8*f^5*g^8*h^4*i^6,d^56*g^2*h^2,c*e^2*k^22,c^34*d^14*e^8*g^4*k^4,c^8*e^17*f*g*h^2*i^4,c^17*d^12*e^5*h^13*i^2*k,h^17*j*k^8,d^11*e^6*g*h^2*j^15*k,e^12*i^20,c^14*e*h^4*j^14*k,e^2*f^17*i*j^4,c^2*d^8*f*h^11*j^8*k,c^5*f^9*i^3*k^9,g^9*h^6*i^7*j*k^4,d^27*g^3*h^11*i^2*j^3,c^17*d^2*f^19*h^2,d^19*e^18*f^8*k^5,c^6*i^7*j^13,c^7*d^25*g^8*j^10*k,d*e^26*g^3*h^7,d^25*e^6*g^2*h^11,c^30*g*h^2*i*j^7,c^5*d^15*e^12*g*j^9*k^4,d^40*f^13*i^2*j,c^28*e^16*j^6,c^16*e^5*h^7*i^7,c^8*d^17*e^4*f^9*g^4*i*k,c^52*e^7*h^2,d^15*e*h^7*i^10,e^4*f^8*g*h^4*j^3*k^5,c*e^41*k,c^2*d^15*f^2*i^12*k^5,c^27*d^15*e^3*g^10*h^2,c*e^12*f*g^7*h^5*i^7,c^34*d^2*i^12*j*k^2,d^9*f^7*g^11*h^4*k^3,c*e^3*g^7*h^13*j^5,c^44*e^2*i^9,f^3*g^2*i*j^4*k^7,f^7*i^12*j^2*k^3,d^15*f^2*g^12*i^4*k^5,e^19*j^3*k^10,d^17*e^6*f^5*j^5*k^5,c^10*e*f^7*g^9*j^2*k,c^12*d^10*k^14,d^9*f*h^14*i^2*j^6,d^19*f^15*h^7*i,d^36*e^2*f^4*k^3,c^6*d^9*f^6*i^4*j^11,c^10*d*e^17*f^9*j^3,c^22*e^10*f*g*k^8,b*f^2*i^17*j^3*k^5,b*e^19*f^5*i^4*k^4,b*c^5*e^7*h^11*i^2*k^5,b*c^7*d^23*h^16*j,b*c^10*d^2*f^3*h^4*i*k^8,b^2*d^20*e^13*f^8*g^6,b^2*d^13*e^6*g^11*k^6,b^2*c^4*e^12*f^2*i^2*j^10*k^3,b^3*c^4*d*f^12*g*i^9*j^3,b^3*c^17*d^7*e^5*h^14,b^4*d^42*i^2*j*k^5,b^4*c^28*d^7*e^3*f^4*j^4*k,b^5*c^2*e^12*f^8*i^7*j^2,b^5*c^16*d^15*f^6*i^4*k,b^6*c*e^12*g^13*i^4*k^4,b^6*c^3*d^26*f^3*g^7,b^7*c^26*e^3*f^10*i,b^8*f^2*g^4*h^2*j^9*k^3,b^8*c*d^16*e^28*k^2,b^9*d^7*f^4*h^9*i^2*j^3*k^3,b^9*c^33*d^3*e^20*h^5,b^13*d^5*e^8*f^2*h^9*k^4,b^13*c^18*f^4*i*j^7*k,b^15*d^3*e^3*i^5*j^3*k^8,b^15*f^3*g^8*i^4*j^2,b^17*e^14*g*i^2*j*k^2,b^17*d^18*e*f^5*h^3*j^3,b^17*d*e^2*h^9*j^5*k^3,b^17*c^40*e^9*f^2*k^2,b^19*c^3*d*e^23*k^9,b^19*c^3*d^2*e^12*f^9*g^2*h*j,b^19*c^15*e^5*f*g^7,b^20*c^3*d^3*f^3*g^3*h^7*i^4,b^21*d^14*e*g^17,b^21*e^7*f^2*i^5*j^8,b^21*c^9*g^2*i^7*j^2*k^4,b^21*c^11*d^24*i^2*j^4,b^22*d*i^15*k^4,b^22*c*e^23*h^5*i^2*k^3,b^23*c^2*f^5*k^15,b^23*c^9*d^14*e^16*j^3*k^2,b^23*c^21*d^8*f^4*g^3*j^2,b^24*e^7*f^8*i^10,b^24*c^7*g^5*i^12,b^24*c^9*d^16*f^6*h*i^7,b^25*e*f*k^18,b^27*d^9*g*k^16,b^28*d^3*h^14*j*k^4,b^28*c^5*f*g^8*h^9*i,b^29*c^13*g*j^13,b^30*c*h^5*i^7*j^7,b^30*c^5*e^7*f^3*h^12,b^32*e^2*h^3*i^5*j^6*k^2,b^32*c^4*f^10*i^4*k^5,b^33*e^9*g^4*j^7,b^33*d^6*e*f^7*g^4*k^3,b^34*d^4*h^3*i^8*j,b^34*c^9*e^13*h*i^2*j^4,b^34*c^23*h^5,b^38*d^2*e^18*h^3*k,b^44*f*k^10,b^46*e^2*h^10*j^5,b^46*c^3*e^7*f^5*g^4*k^4,b^48*d^4*f^4*i^2*j^4*k^3,b^50*c^9*f^8*j^2,b^62*e^2*g^7*j*k^2,b^69*e^13*i^3*j,b^69*c^4*d^19*k^2,b^71*c^14*d^3*e^4*f^2,b^114*e*j,c^7*d*f^2*g^2*h^2*i^2*j*k^9,f*i^18*k^7,c^11*d^6*f^11*g*h*i^10,d^47*i^3*k^7,c^25*f^3*h^5*i^2*j^4*k^3,d^2*f^2*g^8*h^5*i^5*k,d^13*g^22,e^22*g*h^3*i^3*k^4,d^23*e^9*f^4*h^8,c^16*e^8*g^2*i^8*k^6,e^7*f^14*h*j^7*k^4,f^6*i^2*j*k^13,c^28*d^13*e^6*f^3*g^3,d^7*e^3*f^13*g^4*h*i^3*j^2*k^2,c^7*f^16*h^3*j*k^2,f^4*h^17*i^3*j^3,d^5*e^2*f*g^10*h^10*j^4,d^3*g^5*h*i^9*j^11*k,c^20*g*h^3*j^10*k,d^3*e^20*h^15*i^4,f^15*i^10,d*e^17*g^4*h*i*j^4*k^2,d^11*e^9*f^6*g^4*k^5,d^42*f^12,c^5*g^18*h*j^3,c^30*e*h^10*k^2,c^5*d^17*g^6*h^10*i^3,c^4*d^24*e^2*f^9*i^3*j^3,c^13*d^38*i*j^7,c^34*e^7*i^8*j^2,e^2*f^8*j^13*k^2,g^2*j^7*k^11,d^6*e^10*f*g^3*i^9*j^3,c^58*g^4*h*i^2,c^2*d^5*f^10*g^3*h*j^7,c^14*f^2*g^8*j*k^9,d^13*f^12*h^8*j,d^30*e^7*f*h*j^3*k^7,d^3*e^11*f^8*h^6*k^3,e^4*h^5*k^12,c^7*g^11*h^12*j,c^19*d^4*e^30*g^2*i,c^6*f^7*g^5*j^12,f^9*g*i^8*j^6,c^6*f*g^6*i^10*k^7,c^7*d*e^10*h^15*j^2,c^18*d*e^8*f*j^7*k^5,d^16*e^4*f^11*i*j^7,c*e^5*h^6*i^4*j^9*k^2,c^4*e^10*i^8*k^10,c^6*d^9*f^3*i^3*j*k^5,d^20*e^4*g^7*j^2*k^3,d^51*f^6*g*j^4,d^28*f^2*g^3*i^6*k^3,c^4*e^26*i*k^8,c^4*e^15*f^15*j^5,c^16*e^8*f^7,c^28*e*g^5*i^2*k^8,c^30*d^17*f^5*h*k^3,c^4*d*f^9*h^4*i^8,d*f*h^10*i*j^6*k^7,d^49*e^9*f^4*h^2*k,d^12*e^4*f^6*g^10*i^3,f^20*h*j*k^6,f^2*i^19*k^3,c^34*f^2*g*i^5*k,b*d^6*f^2*j^19,b*c^21*d^10*e*g^15*j,b^2*d^55*i^4*k^3,b^2*c^8*f*h*j^10*k^5,b^2*c^13*f^15*j^2*k^8,b^4*g^8*h*i^3*j^5*k^3,b^4*c^16*d^22*e^7*g^3*i^4*k^3,b^5*d^16*e^8*i^14*k^2,b^5*d*f^5*h^11*i*j^5*k^3,b^5*c^6*f^7*g*h^6*i^5*j^2,b^6*e^19*g*i*j^4*k^6,b^6*d^12*e^6*f^2*h^4*j^6*k,b^6*e*f^4*g^15*j^3,b^6*d^5*h^3*k^10,b^6*c^7*f^2*g^14*h^3*k,b^8*d^31*e^2*f*g^5*h^4*j,b^8*e^30*g^8*j^2,b^8*e^17*f^6*g^2*h^2*j^4,b^8*c^5*e^10*g^7*h*k^4,b^9*g^3*h^8*i^3*k^4,b^10*d^8*e^6*g^17*h*k^2,b^10*e^12*i^4*j^11,b^10*d^4*e^4*f^13*i^3*j^3*k^2,b^10*e^5*g^2*i^6*j^5*k^8,b^10*c*d^18*i*j^7*k^3,b^11*c^3*e^10*f^4*g^10*h^6,b^11*c^24*f^4*h^2*i^3*j^4,b^12*c^11*d^2*e^3*f*g^3*j^5,b^13*d^10*f^3*h^2*i^6,b^13*c^11*d^3*g^4*h*i^8*k^6,b^13*c^46*g*i^2*k^2,b^14*d^21*g^13*i,b^15*e^21*i^4,b^15*c^9*e^3*f^7*g^6*i^3,b^15*c^11*d^24*e*h^4*i*k^4,b^15*c^21*g^11*i^5,b^16*d^35*e^8*g^5*k^2,b^17*c^3*g*i^14*j^4,b^17*c^21*d^8*e^12*f*h^2,b^19*d^27*e^8*g^8*h^2*i,b^20*c^4*d^48*e*g*j^2,b^21*e^8*g^5*h^13,b^21*f^7*i^3*j*k^9,b^21*c^6*f^15*g^4*i^2,b^21*c^15*g^3*h^8*j^4*k,b^22*d^21*e*h^2*j^12,b^22*c^13*e^7*i^14,b^23*c*e^5*f^3*h^7*j^9,b^23*c^4*e^10*f^11*k^3,b^23*c^6*d^4*f^17*j,b^23*c^18*f^9*k^7,b^25*d^6*g^6*h^6*i*k^2,b^27*e^5*g^13*h^4,b^27*c^19*i*j^10,b^29*d^19*g^2*i^4*j^5,b^30*c^5*e^9*h^5*i^7*j^3,b^31*d^19*e^8*f^7*i*k,b^31*c^4*d^2*e^9*i^4*k^7,b^31*c^6*d^33*h^2*k^2,b^33*e*h*k^14,b^39*e^5*f^5*j^5*k,b^39*c^11*g^5*k^10,b^42*c^11*f^9*g^2*h^2,b^44*c^9*e^14*f^5*k^2,b^46*d^7*e^10*f^4*g^5*i,b^46*c^5*d^17*f^4*i^4*j*k,b^47*d^28*e^3*f*j^2,b^55*g^3*j^11,b^58*d^13*k^6,b^58*c^6*d^7*f^3*g^5,b^60*c^4*e^9,b^64*c^22*d^3*i*k^2,b^69*h^7*i*j,b^79*e^4*g^4*h,b^106*d^2*f*h^3,c^9*d^10*e*f^9*g^3*h^6*j^4*k^2,c*f^8*g*h^2*i^9*j^3,c^2*d^56*f^5*g*h^2*j,g^8*h^6*i^4*j^2*k^5,d^9*f^2*g^4*i^7*j^9,e^20*i^5*j^8*k,c^18*g^16*i^6*j*k,c^18*d^7*e^11*g^3*j^2,e^20*f^4*h^3*i^10,c^6*d^15*f^2*h^7*i^7,c^10*e^6*g*i^15*j,d^7*g^16*h^13*j,c^15*f^8*g*j^5*k^8,c^13*f^14*g^4*h^2*i^3*k^2,e^4*g^18*h^2*j^6,c^2*d^29*f*g^3*k^13,c^20*e^6*h^11*k^6,d^18*e^9*f*g*h^12*j,d^28*e*f^15*g*h^5,d^18*e^7*f^6*i^2*j^6*k^2,c^3*d^32*j^10*k^3,c^5*e^13*g^13*h^9,c^26*d^5*h^5*i^2*j^7,c^16*e^11*f^2*g^12*i*k^5,c*d^24*g^2*h^5*i^5*j^2,f^7*g^3*h^2*j^10*k^4,f^25*i*k^3,f^6*g*i^7*j^9*k^2,c^2*d^5*e^7*f^7*h^9*k^5,d^3*e^2*i^2*j^4*k^9,c^8*f^8*g^7*i*j^3,d^22*g^3*i^5*k^7,c^6*e^13*f^4*j^2*k^3,c^8*d^18*f^10*h^3*j^4,c^15*d*e*h^9*j^6*k^4,c^20*d^11*f^2*h^2*k^7,e^20*f*g^14*j^3*k,e^2*f^6*h^5*i^7*k^3,d^37*f^9*g^4*h^3,c^18*d^3*f^8*g^2*h^7*i*k,c^12*e^6*f^7*i^2*j^9,c^24*g*i^4*j^3*k^5,d^8*f^9*i^10*j^3,c^12*d*f*i^12*k^5,h^2*j^13*k^9,d^12*g^11*i^7*k^3,c*d^43*f^4*g^5*i^2,e^24*f^5*i^8*j^2,d^33*e^11*k,c^6*d^16*e^12*g^3*i^3*j*k^7,c^34*e^8*i^4*k^6,d^9*f^5*k^17,d^25*e^11*f^6*g*i^5,g^4*i^5*j^15,e^15*g^7*h^2*j*k^8,c^3*d^15*e^17*i^8*j^4,c^7*f^3*g^21*h^2,e^11*f^5*h^10*j,d^8*e^3*f^19*h^3*k^2,d*f^11*g^3*h^2*i*k^11,c^14*g^2*i^9*j^6*k^5,d^19*e^4*f^2*j^16,d^12*j^10*k^7,e^2*f^2*g^2*i^4*k^15,c^3*d^6*f^2*g^10*j^9,c^14*e*f*h^3*i^2*j^7*k^3,c^19*f^15*i*k^6,b*c*e^8*g^3*j^8*k,b*c^3*d^27*f^4*h*j^10,b*c^6*d^6*f^12*g^3*k^4,b*c^13*e*g^8*j^2*k^10,b*c^15*d^20*g^2*j^4*k^5,b^2*d^4*h^3*i^5*j^2*k,b^2*c^3*d^28*h^7*i^2*k^5,b^2*c^29*e^4*f^19,b^3*d^15*e^4*g^13*j^3,b^3*c^25*d^4*g^9*j^2,b^4*e^26*h*i^3*j*k^4,b^4*e^8*f^4*g^6*h*i^2,b^4*c*d^18*e^6*h^5*k^8,b^4*c^11*e*g^11*i^4*k^4,b^4*c^13*d^12*f^2*g^5*h^5,b^5*e^8*g^25*k^2,b^5*d^23*g^19,b^5*c^7*d^9*e*f*j^15,b^6*e^37,b^6*c^7*d^10*i^10*j^3*k^3,b^6*c^11*d^2*e^17*h^3*k^2,b^6*c^42*i^4*j^6,b^6*c^56*i*j^2*k^3,b^7*i^21*j,b^7*d^10*e^6*h^10*i^5*k^2,b^8*c^17*g^7*i^7*j,b^8*c^31*d^18*g^6*i^4*k,b^8*c^54*e^7*j*k^6,b^9*c^5*d^2*f*g^3*h*i^15,b^9*c^9*e^17*f^4*g*h^8*i^2,b^9*c^30*d^4*e^3*f^4*h^4*i^5*j,b^10*d^50*i^6,b^10*f^12*g^4*i*j^3*k^4,b^10*c^15*e^23*i^5,b^10*c^17*d^15*e^10*f*j^2,b^10*c^29*d^8*e^3*i^2*k^4,b^11*c^3*e^12*i^13,b^12*d^2*f^3*i^5*k^11,b^12*d^34*e^6*g^4*i^3,b^12*e^15*f^8*j^2*k^7,b^13*c^27*e^3*g^2*h*i^7,b^15*e^2*f^20*h^6,b^15*c*e^3*h^12*i^2*k^2,b^15*c^3*d^4*f^4*h^17,b^15*c^6*f^12*h^5*i*k^5,b^16*c^9*h*j^13*k,b^16*c^14*d^4*f^9*j^5*k^4,b^16*c^26*f*i*k^13,b^18*d^23*f^8*g^2*i^2*k^2,b^18*c^24*f^13*j^3,b^18*c^33*d^2*h^3*j^7,b^19*d^2*e^6*f^7*i^5*k^7,b^19*c^7*f*h^6*i^5*j^5,b^20*d^3*e^21*i*j^7*k^2,b^20*c^8*d^21*g^8*h^3*j^2,b^21*c^19*e^5*h^8*k^2,b^21*c^31*f^3*g*h^8,b^22*e^24*f^8*g^2,b^22*c^6*d^11*e^12*g*h*j,b^22*c^11*d^21*e^4*f^6*g*k^3,b^22*c^18*d^5*g^15*h,b^23*c^29*e^16*h^6,b^26*f^6*g^7*j^9*k^2,b^26*c^15*d^3*e^10*f^3*g^3*i^2*k,b^28*d^7*f^8*j^10,b^28*c^3*j^4*k^9,b^29*c^10*d^16*e^5*f*i^3,b^30*c^13*e*f^4*g^6*j^2*k^3,b^31*e^10*f^8*g^3*i^2,b^31*g^2*h^10*j^4,b^31*c*f^6*g^2*h^3*k^3,b^33*e^19*f^2*h*k^6,b^35*d^11*e*f*i^3*j^4*k^5,b^37*c^5*e^12*f^5*j^2,b^37*c^14*d^9*h^6*j^6,b^38*c^6*d^30*g^4*k,b^39*c^29*d^3*e^3*f^7,b^45*i^3*j^8*k^3,b^47*e^5*f^2*g^6*j^6,b^47*d*g^5*h*j^2*k,b^49*e^14*j*k^4,b^52*c^6*d^7*h^8*k^2,b^54*d^12*f*i^6*j^2,b^56*e^7*f^5*i^3,b^56*c^10*g^2*i^5,b^56*c^12*d^20*f^3*h^2,b^66*d^8*h^4*i*j*k^2,b^72*d^5*e^2*i*j^6,c^31*e^7*g*i^5*k^7,c^8*d*e^16*g^3*h*j^5*k^3,d^9*e^5*h^8*i^6*k^3,c^6*e^16*f^3*g^6*h^6*i^3,c^24*e^2*g^7*i^8,e*f^19*h^4*j^6,f^33,c^3*f^11*g^4*h^3*i^2*k^6,d^23*g^3*k^17,c^16*e^4*h^6*i*j^10*k^3,d^4*e^12*f^9*g^3*i^6*j,d^18*g^2*h^6*i^4*j^5*k,d^28*f^7*g^2*i^3*k^4,c*d^2*e^11*g^9*h^4*i*j^3,c^6*d^12*e^3*f^11*g^9,c^38*f^2*g*h^13,c^44*e*i^3*j^9,f^5*g^7*h*j^6*k^4,d^16*e^3*g^3*h*i^4*j^2*k^11,e^18*f*j^5*k^7,d^12*e^5*f^7*h^4*j^7*k^2,c^10*d^5*h^3*j*k^11,e^14*g^10*i*k^5,d^31*e*f^6*g^4*h^4*j^2,d^24*g^9*h^3*k^9,c^3*e^6*g^2*h^15*i*j*k^2,c^8*f^5*g^2*h^8*k^5,d^8*e^5*f^2*g^16*h*k^3,c^2*e^11*f^4*i*j^12,c^16*d^18*f^2*j^8*k^4,d^2*f^6*i^9*j^6,c^2*i^11*k^9,c^26*d^2*e^2*f^6*g^2*j^6,c^38*g^7*k^7,c^12*e^4*f^2*g^4*i^8*k^3,c^14*d^10*f^8*h^2*i^3,c^26*d^3*g^3*h*i^5*k^7,d^58*e^3*f^3*j^4,c*d^21*f^5*g^12*j,c^12*e^20*f^4*i*k,c^24*e^2*f^12*g^5,c^13*d^35*e^7*g^4*k^3,d^19*e^16*f^3*g*i^4,c*d^43*f*h^4*i*k^3,c^30*d^6*e^6*i^6*k^3,g^10*j^12*k^2,c^17*d^17*e^13*g^6*i*j*k,c^19*d^48*f^2*j^3,e^13*g^3*j^11*k^5,d^21*f*h^2*j^13,e^5*f^9*g^3*j^3*k^8,e^2*h^4*i^4*j^5*k^5,e^13*f*g^6*h^2*i*j^3,d^13*f^7*h^7*j^5,d^23*f^21,c^3*d^6*g^5*h^6*k^3,d^17*g^19*k,d^3*e^6*j^18,c^26*f^6*h^11,d^11*i^7*j^12,e^42*j^2*k^2,d^3*e^29*f^3*h^5*j^4,c*e^22*h^4*k^6,c^3*d^27*e^9*f*h^9*k,c^34*f^3*j^11,e^6*f^4*g^2*i^4*j^10,d^25*e^4*i^2*j^7*k^5,d^4*e^9*f^2*i^6*k^13,c^7*g^7*i^6*j^4*k,c^9*d^19*f^2*g*i*j^6,g^3*h^2*i^14*k,e^22*f*g*h^9*i,c^30*e^3*f^3*i^8*j,d^44*i^5*j^2*k^3,f^9*g^4*j^6*k^8,f^7*g^3*h^3*j^2*k^12,c^7*d^9*e^15*j^5,c^19*d^2*e^8*i*k^8,c^21*d^33*h^2*j*k^3,c^31*g^13,e^17*i^12*k^4,d^17*e^4*h^5*i^7,b*f^3*h*j*k^15,b*c^17*e^26*f^2*g*j^3,b*c^29*e^19*g^6*k^2,b*c^31*d^17*e^6,b^2*c^5*d*e^15*f^4*h^3*i^4,b^2*c^17*e^8*g^2*h^2*i^6*k^2,b^3*d^11*e^3*f^10*g*h^2*j^2*k^4,b^3*d^4*f^2*g^6*h*k^13,b^3*d^12*e^22*f*g^11,b^3*c^4*d^5*e^15*g^16*i,b^3*c^6*d^36*e^2*g^10,b^4*f^9*h^6*k^9,b^5*d^34*g^5*i^7*j,b^5*c^16*j^2*k^17,b^5*c^35*e^12*g^2*i*j^4,b^5*c^49*d^23*g,b^6*c^13*d^44*e^6*h*i^5*j,b^6*c^23*d^7*e*i^9,b^6*c^72*f^2,b^7*d^17*f^5*g^2*i*j^3*k^6,b^7*c^9*e^3*i^22,b^7*c^14*e^4*f^10*j^6*k^2,b^7*c^23*h^4*j^10*k^3,b^8*c^2*f^12*i^3*k^2,b^9*d*f^9*g^9*j,b^9*d^15*g^8*h^4*j^5*k,b^10*d^47*e^13*i^5,b^11*e^29*f^5*g^2*k^3,b^11*c*d^15*e^9*f^3*g*k^7,b^11*c^8*g^15*h^2*j^3,b^12*e^26*h^5*i^5*j^2,b^12*d^13*e^6*h^9*i^2*k^4,b^12*d^7*g^11*h^9*i,b^12*c^15*i^9*j^9*k,b^14*d^7*e^9*f^9*g^4*k,b^14*c^15*d^7*e^3*h^3*i^2*j^10,b^14*c^39*g^2*h^2*i^3*j^3,b^15*c^5*e^15*g^3*i*j*k^5,b^15*c^7*d^28*e^2*f^6*j^3,b^16*d^36*f^8*i^4,b^16*c^37*e^7*i*j^2*k^2,b^16*c^42*f^5*k^5,b^17*j^7*k^13,b^18*c^12*d^3*e^3*g^5*i^4,b^18*c^49*e^5*f*h^3*j^2,b^18*c^61*g*h^2,b^24*e*g^4*i^6*j^4*k^5,b^24*f^6*i*j^6,b^24*c^9*g^3*i^3*k^9,b^26*c^7*e^10*i*k^12,b^26*c^9*d^13*j*k^7,b^26*c^21*d^7*f^8*g^4,b^27*f^12*g*h^3*i^6,b^28*d^32*k^5,b^28*c^19*e^8*f^4*k,b^29*c^5*e^10*i^6*k^6,b^29*c^7*d^5*f^6*h^5*i*k,b^30*d^16*e^4*f^3*g^7,b^31*c*d^3*i^12*k^5,b^32*c^37*d^3*k^3,b^33*c^11*e^3*f^3*i^9,b^40*d^8*g*j^12,b^43*d^6*e*h*i^5*j^5*k,b^45*e^12*f^2*i^2*j^3,b^45*c^2*d^14*h^3,b^47*d^4*e^21*h*k^2,b^47*c^12*e^3*f^4*g^3*h,b^49*c^6*i^7*j^4,b^58*c^14*h^12,b^64*d^15*g^2*h^6*i^2,b^82*d^7*e^4*g^3*h*k,e^21*g^6*h^7*i^2*k,c^2*e^14*f^3*g^2*h*i^5*j^7,c^14*e^7*g^7*i^7*j*k^3,c^16*d^24*f*g*h^5*i^2*j^3,c^28*g*h^14,f^2*g^7*h^2*j^9*k^8,d^31*e^7*h^8*i^6*j^2,e^3*f^2*g^2*h^9*k^9,e^5*f^3*h*i^8*j^9*k^4,c^16*e^7*f^3*g^2*j^9*k^2,c^4*d^4*f^5*h^3*i^2*j^3*k^2,c^16*g^3*h^2*i^4*k^11,e^5*f^9*h^6*i^13*j,d^15*e^3*f^2*g^12*j^4,d^23*f^4*g^8*h^3*i^5,c^2*e^25*f*h*j^2*k^5,c^14*e^7*f^9*g^5*h*j,c^26*f*g^10*i*k^5,c^28*d^12*f^7*g^4*h^5,d^13*e^21*g*h*i^3*k^3,d^37*e*h^5*k^7,c^9*d^42*e^5*j^6,d^50*f*i^3,c^44*d^8*e^2*k^5,d^2*f^8*i^2*k^12,f^2*g^13*h^5*i^2*j^7,c^5*d^3*e^18*g^9*i^5,c^6*h^14*i^2*j*k^9,d^7*e^5*f^4*h^8*j^8,d^17*f^18*h*k,g^5*h^7*j^2*k^7,e^7*g^2*h^10*i^8*k^3,c^3*e^9*g^12*h^5*k,d^3*e^5*g^22*h^5,e^11*f*g^2*i^3*j^13,e^3*f^15*g^2*i^2*j^5,d^13*g*h*j^9,c^22*f^6*h^6*i^2*j^6,d^3*e^20*j^8*k^3,d^34*e^7*f*h^4*j^10,c^9*e^2*f^3*g^8*j^7,d^5*f^5*g^4*h^6*i^5*j,c^9*g^9*h^5*i^7*k^3,d^22*e^16*g^4*i*j^3*k,c^3*g^3*i^8*j^14,c^21*d^11*e^11*h*j^2*k,e^20*f*h^4*i^3,d^5*e^12*f^15*i^2,c^7*e^13*g^2*h^3*i^5*k^6,c^9*d^19*h^8*k,d^30*e^7*g^10*h,e^49*h^2*i,c^3*d^17*i^11*j^3*k^5,c^19*d^3*e^11*f^3*g^3*h^6,c^25*e^17*g^2*j^7,c^13*d*e^6*i^8*j,c^62*e,c*d^9*h^4*i^16,c^2*d^43*g^6*j^4,c^4*e^9*f^7*j^9*k^6,f^9*h*i^2*j^3*k^6,c^4*f*i^4*k^15,c^13*d^22*e^22*i*j^2,c^11*e^6*f^2*g*h^2*i^13,d^3*f^8*g^5*h*i^5*k^4,d^35*f^5*g^9*i^3,c^2*e^9*f^13*g^2*j,c^4*f^19*h^4*j^3,c^11*g*h^10*j^5*k,c^35*e^26,e^6*f*h^13*i^8*j^3,e^4*g^15*h^3*j^6,h^17*i^5*k,c^3*d^3*f^8*g^15*k^2,b*d^17*e^3*f^2*h^3*k^11,b*d*g^11*h^10,b*c^10*f^4*i^7*j^4*k^8,b^3*d^22*e^9*h^13*j,b^3*d*e^14*f^6*g^4*h*k^5,b^3*c^5*d*e^8*h^4*i*j^13*k^3,b^3*c^10*d^11*f^6*j^5*k^6,b^3*c^17*h^4*j^12,b^4*d^22*e^7*f^3*j^6*k^4,b^4*c^3*h^6*i^13*j^4,b^4*c^7*e^2*f^5*g^17*j^3,b^4*c^9*d^15*g^2*k^13,b^5*d^30*f^5*i^3*k^4,b^5*d^14*g^7*h^4*i^3*j^7,b^5*c^29*d^9*h^6*j^7*k,b^5*c^32*e^4*f^2*k^9,b^7*d^14*e^7*f^9,b^7*c^2*e^8*g^5*h*i^3*k^4,b^7*c^4*d^28*h^6*j^2,b^7*c^7*d^7*f*g^5*i^2*k^7,b^7*c^9*d^38*f^7*k^2,b^8*c^25*e^12*h^6*i^5,b^8*c^27*d*h^11,b^9*c^2*d^18*e^24*h^4*j*k^2,b^10*d^6*e^7*f^15*g^3*i^5,b^10*c^25*d^12*e^4*f^2*g^5*j^5,b^13*f^3*j^9*k^4,b^13*d^3*f^17*j*k^7,b^13*c^11*d^10*e^22*i^3*k^3,b^14*d^8*e^19*i^12,b^14*c^55*h^2*i^2,b^15*d^12*f^2*g^8*i^3*j^4*k^2,b^15*e^4*f^7*g^5*j^7,b^15*d^7*e^2*h*j^4*k^11,b^15*c^9*g^10*j*k^7,b^15*c^11*k^20,b^15*c^11*d*f^5*g^4*h*j^3*k^2,b^16*d^9*f^7*h^8*i^2*k^2,b^17*d^2*e^18*g*i*j^3*k^5,b^17*d^26*h*k^9,b^17*d^20*f^4*g^14*h,b^17*c^9*e^13*f*j^2*k^5,b^18*e^22*f^5*h^2*i^3*k,b^18*e^2*f^3*h^6*k^5,b^19*d^10*e^9*g^7*k^3,b^19*c^15*f^2*g^6*i^2*j^8,b^20*c^3*f^4*g^2*i^10*j^2,b^20*c^7*e^13*f^7*h^4,b^20*c^16*e*h^15,b^21*c^27*j^3*k^7,b^22*d^2*e^9*f^6*g^10*h^4,b^22*c*e^8*i^8*j*k^3,b^22*c^3*d^12*f^6*i^3*j^3,b^22*c^15*d^5*i^5*k^7,b^23*d^23*e^2*f^3*g^3*j^4,b^23*d^6*e^3*g^8*i*j^6*k^2,b^23*c^2*d^16*g^8*k^5,b^24*d^31*f^5*i^6,b^24*c*d^2*e^24*f^2*i*j^2*k,b^24*c^13*e^6*f^10*j,b^24*c^25*f^2*g*i^2*k,b^25*e^8*f^6*i^13,b^25*c^12*e^6*g^15,b^26*f*h^8*j^5*k^5,b^26*d^8*f*g^11*i^5,b^28*g^8*h^8*k^3,b^28*d^29*e^11*f^3,b^28*c^31*d^2*f^5*i^5*j^2,b^30*c^43*d^16*e*k,b^31*e^2*k^17,b^32*f^3*g^4*h^2*i^3*j^7,b^34*e^17*i*j^6,b^34*d^8*h^4*j^2*k^3,b^34*c^2*g^16*i^2,b^36*c^2*e^8*f*g^3*h^2,b^36*c^7*d^2*f^15*g^3,b^36*c^14*e*g^8*h*k^6,b^36*c^16*d^16*g^2*h^6*k,b^39*i^14*j*k,b^40*c^8*d^5*e*f^4*j^7,b^40*c^20*g^4*j,b^41*c^8*d^6*h^2*i^8,b^43*c^6*e^12*i^6*k^2,b^44*d^6*k^13,b^45*c^30*d^4*e^3*h^2,b^50*d^3*e^4*f^7*j^4,b^51*c^10*h^7*j^5,b^59*c*d^5*e^7*i^4,b^67*c^8*g*j*k^3,b^80*f*h^5*i,b^86*c^15*d^3*g^6,b^88*c*e^7*f^2,b^88*c^13*k^2,b^104*c^8*d^2*g^2,b^107*d*e^2*f^2*h^2,c^39*e*f^3*g^6*i^5,d^4*e^11*f^14*g^2*i^3*j^2*k,c^6*d^18*g*h^6*i*j^6*k^2,c^4*d^6*g^10*i^3*j^2*k^8,c^2*d^19*e^15*f^8*i,e*f^2*h^4*i*j^6*k^6,c^4*e^12*f^6*g^5*h^2*j^4,d^11*f^5*i^4*j^13,c^10*f^3*g^2*h^2*i^11*k^2,d^44*i^2*j^3*k^4,c^34*d^2*e^7*k^9,c^10*d^17*e^3*f^5*h^5*i^4,d^28*e^10*f^2*g^3*j,d^11*e^2*f^15*h^2*j^3*k^5,d^4*f^7*g^5*h*k^14,d^17*f^5*g^2*h^18,d^7*g*h^2*j^12*k^4,c^12*f^3*h^7*i*j^9,c^17*f^17*j*k^3,c^4*d*f^14*g^8*j^2*k,f^2*g^4*h^7*i^4*j^4,d^9*f^16*g^4*i^3*k,e^25*h^5*i^2*j^3*k,d^13*e^5*h^9*k^5,c^5*d^5*g^5*i^9*j^5,c^9*e^16*g^3*h^7,c^29*d^11*e^2*g*j^6*k^7,d^2*e^18*f*i^5*j^10,c^3*e^11*i^7*j^4*k^3,c^5*d^26*h^3*i^2*j^6,c^8*d^5*e^3*f^7*i^6*k^6,c^10*d^36*f^13*i*k,c^52*e^6*j^3*k^3,c^4*d^30*g^11*j*k^5,d^2*f^4*h^6*j^2*k^14,c^15*d^10*e^9*f^3*h*j^4,c^27*d^3*e^2*g^4*i*k,c*e^11*g*h^3*i^12,c^6*e^3*f^13*g*i^11,c^15*d^11*h^7*i^9*k,d^29*e^5*f^2*g^9*h*i^2,e*f^16*h^5*j^6,c^2*d^22*g^14*i^4,c^4*d^53*g^8*h^5,c^13*d^2*e^9*f^9*g^2*h^6*i^4,c^2*d^43*e^14*g*h^3,e^2*g^4*h^16*i,d^3*g^6*i^9*j^2*k^10,c^3*f^27*j^3,c^7*h^5*j^15,c^12*f^11*j^7*k,f^15*h*i^9*j^5,f^7*i^11*k^6,d^18*f^10*g^7*i*j^2,c^8*d^56*e^7*j,c^22*e^9*k^13,e^5*f^9*h^3*i^4*k^4,c^10*f*h^2*i^6*k^13,c^10*f^17*h^3*i^3,d^8*e^12*f^6*j*k^2,e^2*g^14*h^3*j^8,d^22*h^7*j^5*k^3,d*e^5*g^5*i*k^11,d^2*f^14*g^14,d^32*f^4*k^6,c^4*g^19*h^2*i*j^2,d^6*e^9*h^10*i^8*j^3,d^16*e*f^8*h^3*i^7*k^2,c^17*e^4*h^12*j^2,c^9*d^16*e^3*f^8*g^6,e^12*f^12*g^3*h*i^4,c^15*d^6*e^9*g^5*j^8*k^4,d^4*e^6*g*i^5*j^10*k,c^3*d^14*f*g*i^4*j^2*k^4,c^5*d^45*f^7*j^4,c^47*e*j^9*k,b*e^7*f^5*i^15,b*d^4*e^29*h^10,b*c^2*e^11*g^9*h^10,b*c^26*e^2*f^8*i^6,b^2*j^12*k^8,b^2*c*d^4*e^27*i^2*j*k^7,b^2*c^13*e^9*f^5*g^8*i,b^2*c^22*d^12*g^7*j^4,b^3*c^45*e*h^3*i*j,b^4*c*f^2*g^4*h^2*j^6*k^6,b^4*c^20*d^2*e^26*j^3*k^2,b^5*f^6*g*h^5*i^4*j^4*k^2,b^5*d^3*f^4*h^9*i*k^6,b^5*c^8*d^10*e^15*h^3*i^5*k^2,b^5*c^8*d^11*e^4*f^3*g^5*h^4*i^2*j^2,b^6*e^18*j^5*k^9,b^7*d^3*f^14*k^12,b^8*d^4*e^14*g^7*k^7,b^8*c^5*g^6*i*j^11*k^4,b^9*f*g^2*i^9*j^5*k^4,b^9*e^18*f^4*h^5*k^3,b^11*d^6*f^3*h*i^2*j^6*k^2,b^11*c^3*f^5*g^9*i^6*j^3,b^11*c^5*i^4*k^11,b^11*c^5*f^11*g^3*h*i*j^5,b^12*d^17*e^7*g^3*j^7,b^12*c^4*d^4*g^22,b^13*d^25*f^2*h*i^5*j,b^13*e^29*j^5*k^5,b^13*c^3*e^11*f^7*j^4,b^13*c^8*e^3*f^21,b^13*c^15*e^4*g*i*k^5,b^13*c^17*d^14*f^5*h^3,b^14*c^2*e^11*g^15*k^3,b^14*c^4*d^25*f^2*g^9*j,b^15*d^2*g^11*i^4*k^3,b^15*c^15*d^4*e^20*f*h*k^3,b^15*c^27*e^2*f^9*g^2*h,b^16*c^13*e^4*f^5*g^4*h^3*i^6,b^17*d^23*e^16*h*k,b^17*c^14*d^10*g^17*k,b^17*c^21*f^2*i^4*j^5,b^18*c^9*d^4*f^4*i^12,b^19*d^15*f*g^7*i^7,b^19*c^10*d^39*g^6*i^4,b^19*c^33*d^10*e^6*k^5,b^20*c^7*e^15*i^10*k,b^21*g^4*h^3*i^2*j^10,b^21*f^14*g^4*i*j^2*k^3,b^21*d^36*e^9*f^3*j,b^21*c^8*d^29*e^2*i^2*k^3,b^21*c^43*e^17,b^22*f^21*h*i^3,b^24*c^5*e^6*f*h^10*j^2*k^3,b^24*c^6*d^21*e^2*f*g^2*i^7,b^25*e^5*f^12*g^3*k^4,b^27*f^5*i^4*j^2*k^8,b^27*c^12*d^2*g^11*i*j^5,b^28*c^4*d^2*f^2*g^5*h^12,b^29*e^6*f*j^10,b^29*c^3*d^9*f^15*j^2,b^29*c^10*g^4*j^4*k^3,b^29*c^12*d^23*h*j^6,b^30*h^3*i^7*k^3,b^30*c^33*e^3*h*i*j,b^31*d^11*g^14*i^2*k,b^32*e^24*h^2*i^3*j^3,b^32*e^6*f^7*g^2*h^2*i^2*j^2,b^32*c^8*g^7*h*i^4,b^32*c^10*d^15*f^5*g*h^6,b^33*c^16*d^5*i^2*j^11,b^34*c^8*d^5*e^15*f*h^4,b^34*c^20*e^8*h^3*k^4,b^38*c^26*d^11*e*i^2,b^40*d^5*f^6*i^5*j*k^4,b^40*e*h^8*j^8*k,b^41*d^5*f^6*g^6*j*k^2,b^41*c^24*d^3*e*f^2*h^2*i^7,b^42*d^3*g^2*h^8*j^3,b^45*e^6*f^3*g^8*j^6,b^48*e*f*g^5*j^8,b^48*d^9*e^4*i^2*k^7,b^49*c^16*d^3*e^3*h^9*j^2,b^50*c^15*d^7*e^3*g^2*h*k^2,b^52*c^2*d^22*f^2*i^5*j^2,b^53*c*d^6*e^10*f*h^7,b^55*c^7*i^13,b^56*e*g*j^4*k^7,b^60*d^12*e^13*k^3,b^60*c^4*i^2*j^11,b^65*c^14*e^3*i^2*k,b^66*c*d^2*e^10*g^6,b^67*c^38*f^2,b^77*e^12*j^3,b^77*c^3*e^5*k^6,b^80*c*e^5*g^2*h^4*i^2,c^4*d^33*e^18*f*g^3*h^3,c^22*d^15*e^17*f^2*h^6*j,d^13*e^20*f^5*h*k^4,c^8*f*g^4*h^7*j^3*k^8,e^10*f^6*g*j^14,g^2*h^3*i^10*j^2*k^6,c^12*d^5*f^10*g^3*h^6*i^2*j^2,d^22*e^15*g^3*j^4*k^2,c^10*e^19*f^6*h^4*j,c^11*d^30*e^6*f*g^9*h,c^28*d*e^5*f*i^5*j^2,c^15*d^12*e^12*g^11*j^3,c^7*f^14*h*j^4*k^7,e*g^4*h^8*i^3*j^7*k^2,d^3*f^13*g^4*h*i^2*k^5,c*d*f*g^10*h^10*j,d^6*f^2*h^2*i^6*j^14,g^5*h*i^8*j^8*k^4,e^21*g^3*h^8*k^3,e^23*i^4*j^13,d^20*e^3*h^4*i*j^9*k^2,e^8*f^4*i^5*k^10,c^5*g^12*i^5*j^6,d^39*g^2*h^4*i^4*j^4,c^5*d^4*e^14*h^2*j^7,c^10*d^14*e^6*f^14,c^17*e^7*g^4*h*j*k^5,c^19*d^28*h^6*j^3,c^29*g^18*h,f^5*g*h^5*j^3*k^12,c^15*e^7*g^7*h^6*i^5,c^28*d^20*f^9*i^2*k,c^9*e^2*g^2*i^16*k^3,c^2*f^8*j^10*k^5,c^14*g^2*j^4*k^14,c^9*d^8*e^18*i^9*j*k,c^21*d^2*f*g^3*i^8,d^12*f^7*g^7*j^5*k^3,c^45*d^8*e^20*j,f^14*h^4*i^2*j^2,d^2*e^17*f^3*j^4*k^6,f^11*g^14*j^3,d^26*f*h*k^10,c^12*e*f^8*h^6*k^6,c^43*e^20*g^2,d^8*e^5*g^2*h^13*i*k,d^18*f^7*g^2*h^6*k^4,d^2*f*g^16*h^13,c^31*h^15*k,c^42*f*j^4*k^8,c^13*d^2*e^2*h^7*i*j^12,c^18*d^12*f^11*j^4,c^3*e^14*f^2*g^8*j^3*k^2,c^4*f^7*h^2*i^13*k^4,c^5*d^23*e*f^8*g^2*j^5,c^12*d^6*e^2*g^7*j^7*k^3,c^17*d^16*g^7*k^6,d^31*f^10*i^3,c^40*f^7*k^2,c^27*e^5*f^4*g^14,f*h^10*j^3*k^10,d^21*e^19*f^6*i,d^5*e^9*g^5*h^5*i*j^5,d^35*e^7*h^9*j^2*k,c^3*d^15*e*f^14*g^5,c^5*d^45*f^4*h^2*k^4,c^14*f^6*h^8*j^6*k^6,c^15*d^8*f^6*g^10*i^2,d^13*f^7*i^11*j^4,c^13*e^23*f^2*g^3*k^3,f^6*i^6*j^14,c*e^3*h^10*k^11,c^9*d^27*e^5*f*i^6*k^2,c^32*f*h*j^7*k^8,d^69*f^4*j^2,e^5*h^2*i*j^9*k^6,d^10*f^14*j*k^9,f^8*g^3*h^2*j^8,c^7*g^8*h*i^2*j^2*k^6,b^2*d^19*e*h^2*i^4*j^4*k^4,b^2*e^16*f^4*j^7,b^2*e^8*f^18*k^3,b^2*c^2*e^4*h^11*j^11*k,b^2*c^5*e^9*g*j*k^9,b^2*c^7*d^8*f^2*h^4*j^3*k^4,b^2*c^17*f^4*g^15,b^3*e^5*f^6*h^7*i^6*j,b^3*h^6*i^8*k^9,b^4*d^3*e^12*f^3*g^6*i*j^2,b^4*c^5*e^25*h^2*j^2*k^7,b^4*c^17*e^7*f^6*g^2*h^2*j,b^5*c^3*e^9*f^2*g^4*h^4*i^5*k^3,b^5*c^5*f^8*h^9,b^5*c^17*g^3*h^8*i^2*k^7,b^6*d^17*e^21*h^2*k^5,b^6*d^11*e^3*f^5*g^12*h^2,b^6*e^4*g^17*h^8*k^2,b^6*c^4*d^4*g^17*h*k^5,b^6*c^4*d^7*e*f^21*j^6,b^6*c^11*e^2*i^3*j^8*k^2,b^6*c^16*f^13*i^2*k^5,b^6*c^25*d^14*j^4*k^6,b^7*f*i^11*j^2*k^2,b^7*c^3*e^25*f^4*h^7*k,b^8*d^33*g^6*i^3*k^4,b^8*c^35*f*g^3*j^2,b^9*d^17*g^3*i^14,b^9*d^9*e^21*f^3*g*h^7*i,b^9*d^19*e^7*f^3*h^3*i^4*j^3,b^9*c^9*e^2*f^5*i^8,b^9*c^23*d^6*f^3*h^2*i^5,b^10*d^30*e^14*j^4,b^10*e^9*f^2*g^14*i^3*j,b^10*d^23*e^7*i*k^7,b^10*d^54*k^2,b^10*c^10*d^17*g^13,b^11*c^9*d^3*e^18*f^7*h*i*j,b^11*c^21*e^11*i^3*k^3,b^11*c^21*f^15*g*h,b^12*d^6*f^5*k^14,b^12*d^14*e^25*f^4*g*j^2,b^12*c^8*d^7*e^18*g^6*k,b^13*d^15*e^7*g^2*i^6*k,b^13*c^27*g*i^13*j,b^15*e^7*h^11*i*k^5,b^15*c^6*e^18*f^2*g^9*i^3,b^16*d^12*j*k^16,b^17*c^9*d^11*e*g^3*i^12,b^18*e^11*j^13,b^18*d^3*e^3*f^12*j^5*k,b^18*e^4*g^4*j^7*k^7,b^18*c^2*d^17*h^2*j^9*k^2,b^19*d*h^5*i^4*j^7,b^19*c^30*f^17*k,b^21*e^4*g^7*h^2*i^3*k,b^21*d^9*f^2*g*h^7*j,b^22*c^6*i*j^14,b^23*d^7*i^9*j^8,b^23*e^20*h^5,b^25*d^7*e^7*f^5*i^6*k^6,b^25*c^18*d^15*g^2*i^3*j^2,b^26*f*h^3*i^14,b^27*c^16*d^5*e^6*i*j*k,b^27*c^28*f*g^9,b^28*c^4*d^13*h^5*i^9*k,b^29*d^24*e^2*g^5*i^4,b^35*d^20*f^8*i*j^5,b^35*d^13*g^3*i^3*k^8,b^36*c^11*f^7*i^5*k^4,b^37*g^10*i*j^5,b^37*f^4*g^10*k^2,b^39*d^18*e^7*f^6,b^39*c^10*d^11*g^2*k^9,b^43*c^2*e^13*f^3*i*j^3,b^43*c^11*d^14*e*j^7,b^44*e^3*i^12*k^4,b^52*c^6*f*i^3*j^2*k^2,b^54*c^4*e^8*i*j*k^5,b^54*c^16*f^5*g^6,b^55*d^27*e^2*j^4,b^56*d^35*f^2*h,b^56*c^28*k^3,b^57*c^2*e^8*f^3*h*i^6,b^58*c^3*d^12*g^8*k,b^65*c^18*h^7*k^3,b^69*d^4*h^10,b^72*c^23*d^2*g*j*k,b^73*e^3*i^4,b^73*c^11*d^10*h^3*i*k,c^12*d^28*e^9*f^7*g^2*j^2,c^4*d^7*f*h^2*j^13*k^5,c^2*f^7*g^3*h^7*i*j^5,d^14*e^6*g^7*i^7*k^2,d^45*f^3*g*h^3*i^2*j^2,c^42*d^3*e*g^3*k^2,c^16*e^10*f^4*h^3*i^9,d^8*f*g^6*h^5*j^11,c^2*d^18*f^15*g^6*j^3,d^8*e^11*f^11*j^2*k^3,d^6*e^8*h^10*i^5*j^4,e*h^9*i^7*k^9,e^19*f^3*g^2*h^8*i^2*j^2,c^7*d^14*f*g*h^12,c^13*d^4*e^5*i^2*j^11*k^2,c^11*e^5*g^3*h*i^7*j^3,c^25*d^20*g^2*h^5*i^4,c^60*f*h^3*j^2,d^4*h^8*i^15,f^11*h^5*i*j^5*k^3,f^25*k^6,d^20*e^2*h^2*j^3*k^14,c^2*e^6*f^5*h^7*k^10,d^4*e^13*f^2*g^6*j*k^8,c^3*e^7*h^8*j^15,c^8*d^6*f^8*h*j^7*k^3,c^20*i*j*k^12,d^17*e^6*f^5*g^2*j^8*k,c^7*d^10*g^7*j^2*k^10,d^25*f^7*h*i^2*j^2*k,d^18*g^3*i^4*k^10,c^30*e^3*f^4*k^6,c^6*f^14*h^6*i^4,c^13*h^12*i^7*j*k^3,c^17*e^10*f*g^14*k^4,d^15*e^24*f^3*j*k^4,d^9*e^6*f^11*g^5,e^7*g^10*h^5*i^2*j^2*k,c^5*d^2*f^3*g^10*i*k^4,e^12*f^2*g^4*i^2*j^13,c^13*d^23*g^3*j^9*k^3,g^5*i^12*j*k^8,c^5*d^23*e^15*f^5*h*k^2,c^36*f^7*i*j^6,d^21*e^10*i^5*j^2*k^6,c*d^52*f^4*j^4*k,c^11*d^15*f^6*g^6*i^4*j,f^5*g^3*h^3*j^11*k,g^8*h^2*i*j^5*k^10,c^9*d^5*e^21*f^2*i^2,c^18*d^19*e^9*h*j^4*k,c^23*d^29*e*k^4,d^13*e^10*f^4*i^10,c^4*e^11*h^3*i^13*k^6,d^2*e*h^5*j^6*k^8,c^7*e^12*f^3*g^2*h^3*j^4*k^2,c^27*d^11*e^7*i^7*j*k^2,e*f^5*h^10*k^2,d^4*f^19*h^3*k^5,c^7*g^3*h^9*i*k^11,d^5*e^8*f^2*g^12*h^3,c*e^7*i^2*j^11*k^6,c^3*d^15*f^2*j^13*k,c^6*f^10*i*j^3*k^9,c^13*f^4*g^11*i*j^10,c^15*d^8*j^7*k^10,h*i^10*j^5*k^6,d^34*f*g*j^8,d^27*g^6*i^2*j^2*k^8,c^11*e^18*g^4*j^9,c^13*e^5*f^6*j^11,c^25*g^3*j^5*k^4,d^11*g^3*h*i^13*k^4,e^7*f^2*i^7*j^3,c*d^6*e^5*h^3*i^5*k^13,c*d^7*f^8*h^4*i^2*j^5,c^13*h^3*i^4*k^4,d^48*h*j^3*k^6,d*e^2*g^13*h^3*j^8,d^11*g^13*k^2,c^2*d^42*f^3*g^7*h*j^2,e^23*f^4*h^2*j^4,c^11*e^16*h*i^2*k^7,c^11*e^5*f^12*g*h^2*j^3,c^23*f^4*g^6*h*i,b*d*e^23*g^6*k^5,b*d^32*e^10*j,b^2*d^9*e^12*g^2*h*i^5*k^5,b^2*d^40*f*h^6,b^2*d^33*g*h^5*i^2*k^9,b^2*c^17*g*i^12*j^4*k^2,b^2*c^21*e^27*k,b^2*c^66*i^3*j^3*k^2,b^3*d^51*e^6*g^10,b^3*c^4*g^15*i^7*j^5,b^3*c^5*i^20*k^2,b^3*c^9*e^16*f^2*h^6*i^7*k,b^4*f^2*g^13*h^12*j^2,b^4*e^23*g^9*i^2,b^4*d^24*e^10*f^5*g^3*h^4,b^4*c^10*d^17*e^3*g^8*h^3*k^3,b^4*c^17*d^3*e^9*i^5*j^5,b^5*c^4*d^14*e^16*g^2*j^6,b^5*c^5*d^11*f*h^2*i^13,b^5*c^18*d^38*g*j^2*k^2,b^6*d^5*e^6*g^3*h*i^11*j^2*k^4,b^6*c^6*d^46*i^5*k^2,b^6*c^39*e^13*i^4*k^3,b^6*c^41*d^11*f,b^7*e*f*g^4*j^2*k^14,b^8*d^5*f^11*i^2*j^2*k^5,b^8*c^15*h^8*j^9*k^2,b^9*d^14*e^5*f^4*g*i^13,b^10*e^8*f^15*g^2,b^10*d^3*g*h^8*j^4,b^11*c*d^3*f^4*j^9*k^7,b^11*c^13*f^6*h^13*j,b^12*c^12*g^13*h^5*k^3,b^14*e^2*g^3*i^5*j^9,b^14*d^16*f^2*h^2*j^11,b^14*f^10*g^3*i^4*j*k,b^14*c^8*d^9*g^2*h*i^2*j^5*k^2,b^15*h^4*i^13*j^3,b^15*d^9*e^5*h^15*k,b^16*e^23*f^6*i^2*k^4,b^16*c^6*e^11*j^4*k^5,b^16*c^6*f^6*g^4*j^9,b^16*c^8*d^30*h^4*j^6,b^16*c^11*d^9*e^3*f^4*k^8,b^16*c^18*g^9*j^3,b^17*d^7*h^6*i^8*k^5,b^17*c^6*d*g^5*h^6*i^7,b^18*c^16*e^22*g^2*j^2,b^18*c^30*d^7*e^2*g*h*k^3,b^19*i^18*j^4,b^19*c^4*e^11*h^4*i^5,b^19*c^9*d*e^3*f^10*i^4*k^2,b^20*d^33*e^5*g^6*h^2,b^20*c^5*d^26*g^11*h*k,b^21*c^28*e^2*g^4*h^6,b^23*c^2*e^2*g*h^17*k,b^23*c^10*d^4*e^4*i^8*j^3,b^23*c^22*i^10*k,b^24*d^14*f^5*j^8*k^3,b^24*c^13*f^2*j^5*k^8,b^25*f^12*h^2*i^2*j^5,b^26*f*g^10*k^6,b^27*c^11*f^8*g^3*i*k^2,b^27*c^13*f^14*h^4,b^28*d^12*e^12*f^3*j*k^4,b^28*d^5*e^5*g^2*k^13,b^29*d^20*e*f^5*h^4*k^4,b^29*c^11*e^16*f^10*h^2,b^31*e^5*f*g^5*h*k^7,b^31*c^31*d*f^9*i,b^32*e^18*j^6*k^2,b^32*c^6*d^18*j^2*k^6,b^33*c^29*e^2*f^5*k^2,b^34*c^16*d^2*e^9*f^2*g^5,b^35*c^4*d^10*f^4*g*i^2,b^37*c^11*d^15*e^4*g^2*h^5*j^2,b^41*i^2*j^5*k^6,b^42*c^3*d^5*h*i^11*j,b^43*c^6*f^2*g^6*j^3,b^45*d^29*h^2*j*k^2,b^45*c^18*e^4*k^7,b^47*d^13*e^7*f^3*g^3,b^47*d^6*g^8*k^5,b^48*c^16*e^4*f^2*g*h^4*k,b^50*c^12*d^8*f*i^5,b^51*d^19*g^4,b^52*c^22*f^5*i^2,b^53*d^9*e^22*k,b^53*c^8*f*i^15,b^56*d^8*f*g^3*h^13,b^56*d*e^22*i^3,b^56*c^9*d^25*e^2,b^62*e^8*i^3*j^2*k,b^64*c^11*g^4*h^2,b^68*c^17*d*j^3,b^78*f^2*g*k^2,b^83*d^5*e^4*f^2*k^3,b^91*e*g*k^3,b^116*c^10,d^6*f^7*h^2*i^3*j^15,c^6*e^15*f*h^4*i^8*k^2,e^22*g^14*i^3*j,d^13*e^38*g*j^2,c^38*d^10*j^9,c^13*d^29*g^9*i^3*j^4,c^36*d^2*f^6*g^2*i^5*j,d^8*e^4*g*h^13*j*k^2,c^8*d^8*e^2*f^3*j^6*k^9,d^16*f^5*i^8*k^9,c*e^10*g^3*h^2*i^6*j^6,c^8*d^31*f^15,c^25*e*g^9*h^4,d^54*e^2*h^9,c^23*e^30*g^2*h^2*k,f^3*g*i^5*j^9*k^9,e^4*f^5*h^2*j^10*k^7,d^46*f^5*g*i^6*k,c^10*h*j^4*k^16,d^19*f^4*h^2*i*j^5*k^5,d^12*g^3*h*i^3*k^14,c^8*e^15*f^9*j^8*k,e^4*f^11*h^7*i^3*j^2*k,d^3*e^11*f^8*g^5*j^3,e^4*g^10*k^8,c*d^9*f^3*g^6*i^3*j^4*k,c^3*d^40*f^9*j^6,d^17*f^5*g^2*i^11*k,c^24*e*f^10*i^5*j,e^26*i*j^3*k^4,c^13*d^23*e^6*k^8,d^6*f^10*j*k^15,c^6*d^5*e^14*g*h^7*i^4,c^11*d^15*e^6*f^3*g*i^3*k^2,e^6*f^2*h^11*j*k^6,g^3*h^10*k^15,d^55*g^4*i^4*j,c^15*e^12*g^3*i^11,c^24*d^11*g^2*i^9*k,d^28*g*j^11*k^3,c^3*e^10*f^3*j^14,c^3*d^5*e*f^2*i^19,c^15*e^3*g^3*j^8*k^8,d*f^5*h^5*i*j^8,d^11*f^19*k^2,c^3*h^4*i^3*j^2*k^8,d^12*e^6*f^2*g^8*j^9,d^22*f^16*g^8*j,c^4*d^61*e^4*i^4,c^13*e^3*f*g^6*h^2*k^2,c^15*d^9*f^7*h^7*j^2,e^10*g^20*j,c^21*j^15*k,d^10*e^24*h^3*i^2*j^2,d^34*e^4*h^7*k^4,f^16*i^8*j^5,c^9*d^7*i^6*j^9*k,c^13*e^19*f^3*h^5*j,c*d^7*e^8*f^5*h^12*i,d^18*e^15*f^2*g^3*h^5,d^5*e^3*h^3*i^12*j^2*k^4,c^5*g^4*i^16,c^8*d^32*e*g*j^5*k^6,d^16*e^10*i^7*j^3*k^2,d^47*f*h*i^2*j^5,d^10*f^3*g^12*i^6*j^2,d^40*i^4*k^6,c^31*d^5*e^5*j^2*k^2,c^5*e^14*f^2*h*i^9,c^19*d^13*h^5*i^6*k^2,e^2*f^8*i*j^5*k^9,e^21*g^5*i^4*j,d^31*e^8*f^5*j^3,c^6*d^24*e*g^4*i,c^8*d^55*f^3*h^3,c^41*e^16*f^2*g,c^55*d^13,d^8*e^10*f*g*h*i^12,c^29*e^5*f^4*h^3*i^3,e*g*h^9*j^7*k^4,d^7*f^10*g*h^2*k^7,c^4*d^14*e^30*k^3,c^16*d^8*e^12*f*g^11,d^5*h^16*i^4*j*k^4,c^3*e^5*f^3*h^14*j^4,c^4*d^16*e*f^3*g^7*h^3*i^6,c^15*h^13*k^9,c^23*i^14*j,b*c^12*d^37*i^4*j^4,b*c^59*e^2*g^2*j,b^2*c^2*d^6*e^30*h*i^4,b^3*d^10*h^3*j^14,b^3*f^7*g^3*i^3*j^4*k^5,b^3*c^3*d^13*f^5*g^2*k^9,b^3*c^33*e^2*j^11*k^2,b^4*d^3*e^10*h^16*k^5,b^4*e^5*g^16*h^11*k,b^5*e^23*h*j^13,b^5*e^16*j^7*k^9,b^5*e^5*f^3*g^4*h*j^12,b^5*c*d^3*e^8*f*k^12,b^5*c^8*g^9*j^6,b^5*c^13*f^9*g^9*k^3,b^6*g^5*h^7*i^6,b^6*d^26*f^3*h^12*i*j^2,b^6*c^31*e^2*f^2*g^2*h^5*j^3,b^7*c^4*d^16*i^4*j^15,b^7*c^11*e^19*f^5*g^2*k^6,b^8*e^16*h^5*i^4*k^3,b^8*d^16*e^3*h^10*j,b^8*e^8*f^7*i^3*k^6,b^9*d^20*e^3*g^11*h^2*k^5,b^9*c^7*d^16*e*f^4*i*j^6*k^5,b^10*c^2*d^8*g*h*i^9*j^7,b^10*c^4*e^27*g^5*h^3*i,b^10*c^6*e^14*f^3*h^8,b^10*c^18*e^7*g^4*h^7*k,b^11*c^26*d^14*j^8,b^12*e^9*i^7*j^6,b^12*c^5*d^8*e*f^10*i^6,b^12*c^12*e^2*i^9*k^5,b^12*c^14*d^22*h^3*i^4*j^2,b^13*d^6*h^6*i^15,b^14*c^24*d^6*h*i,b^16*d^25*g^10*h*i^4,b^16*c*e^5*f^5*g^3*k^6,b^18*c*e^21*f^7*h^3*j*k^4,b^20*d^6*f^3*g^2*i^9*j^4*k^3,b^20*c^7*f^8*i^3*j^7,b^20*c^21*f^6*j^3*k^3,b^22*d^20*i^4*k^10,b^22*d^14*f^5*g^8*i^3*k,b^22*c^33*d^9*k^10,b^24*d^11*e^10*f^9*j^3,b^24*d^4*e^3*f*g*i*k^4,b^24*d^35*f^7*h,b^24*c^8*d^28*k^8,b^24*c^43*f^4*k^4,b^26*d^25*e^19*f^3*k^2,b^26*c*d^9*e^9*g^2*h^6*j^5,b^26*c^13*d^2*e^2*g^7*h^5,b^26*c^18*d^12*f^3*g^7*k^2,b^28*e^9*g^3*i^9*j^2*k^2,b^28*d^17*f^4*i^4*j^4,b^29*d*e^9*f^3*g^5*h^11,b^30*c^22*g^9*i^3,b^32*g^6*j^6*k^4,b^32*f^5*h^3*j^8,b^33*f*g^2*h^5*i^6*k^4,b^33*d^6*f^7*h^10*i*j^2,b^33*c^19*e^4*f^6*h^3*j^3,b^36*d^7*e^12*g^3*h*j^2,b^36*c^2*f^2*g^2*i*j^13,b^36*c^16*d^4*g*j^9*k,b^37*d^15*e*f^2*h^8*i^2,b^37*c^6*e^9*g*h^5*k^5,b^39*c^2*d^2*h*i^4*j^2*k^4,b^41*c^12*e^2*f^2*i,b^41*c^26*d^10*h^3*k^2,b^42*e^9*g^11*j,b^43*d^5*f*g^7*i^4,b^45*d^19*e^7*h*k^3,b^49*c^12*d^15*e*h*i^5*k^2,b^53*c*e^4*g^4*h^3*k^3,b^53*c^3*d^13*h^8*j,b^57*c^7*j^6,b^57*c^12*d^5*f^10,b^58*d^3*h^4*i^7,b^60*e^15*h^2*i^5,b^61*d^28*e^2*g^2*k,b^62*c^17*d*e^6*h^4,b^67*g*j^3*k^6,b^84*j^6,b^103*c^2*g^2*h^2,b^105*e^3,c^8*d^14*e^5*f^2*g^6*i^4*j*k^3,c^26*e^4*f^3*g^2*h*i^4*j^4,c*d^36*e^16*f^4*h^4,e^7*f^6*g^3*i^4*j*k^7,c^15*e^6*g^9*h^5*j^3*k^2,c^2*d^7*f^9*i^7*j^8,c^8*d^38*e^4*g^7*h,c^4*f^3*h*i^7*j^6*k^7,d^34*f^6*j^9,c^5*d^27*g^5*j^3*k^9,d^11*f^2*g^2*h*i^10*j*k^5,c^14*e^6*f^7*i^4*j^4*k,c^15*d^11*f^2*g^12*j*k^3,c^26*e^15*f*h*k^8,c*d^9*e^11*g*h*i^2*k^6,e^29*f^12*g^3,c^7*d^22*e^4*f^3*i^5*j,c^14*d^5*e^5*g^2*h*i^8*j^3*k^5,e^6*i^18*k^4,e^4*f^2*h^6*j^11*k^3,d^5*f^16*j^3*k^6,h^5*i^2*j^5*k^12,f^8*i*k^15,c^5*d^14*e^4*f^9*i^10,d^14*f*g^4*h^6*i^3*j^6*k,c^5*d^3*f^4*h^8*j^5*k,d^11*f^6*h^15*i^2*k,c*e^8*f^4*g^9*h^8*i^4,c^3*f^10*g^3*h^13,d^12*e^20*g^3*h^6*k^2,c^2*g^22*h^5*k^2,c^9*e*f*g^2*i^2*j^10,c^14*f^15*g^2*i*j^2*k^2,c^23*d^9*g*h*j^6*k^3,f^3*h^4*i^10*j^4,c^9*g^3*h^3*i^12*k^8,d^4*g^12*i^5*j^5,c^21*e^10*j^5*k^6,c^33*f^3*g^8*j^4,e^19*h^2*i^8*j^3*k^2,c^9*d^7*h^6*i^5*k^6,d^25*e^13*f^2*j^6,d^18*e^6*g^4*k^4,d^49*h^4*j^2,c^8*d^12*f^2*g^18,c^31*e^21*g*j^3,c^45*d^7*e*h*k^4,d^2*e^15*g*h^2*i^11,c^19*e^10*f*h^4*i^2,c^24*d*e^2*f^15*i*k^3,d*f^7*g*h^3*j^2*k^11,c^6*d^2*e^17*g^11,c^27*d^12*e^3*j^12,c^2*d^31*i^3*j^7,c^7*d^41*f^11*i^2,c^49*e^7*g^2*j^4*k^2,e^6*g^4*h^15*j^2*k^2,e^35*h^2*i^3*k,c^37*i^7*k^2,d^4*h^4*j^17*k,d^7*f^2*g^2*j^3*k^13,c^11*e^5*i^18,c^24*d^8*e^3*g^12*i^2,c^4*f^17*h^2*j^6,c^12*d^16*g^8*i^10,e^3*g^9*h*j^9*k^4,d^12*g^3*h^6*j^11,d^5*e^2*h*i^5*k^16,d^6*f^16*h^2*i^2*j,d^20*h^13*j^5,d^13*e^28*i^6,c^5*e^29*g*h^2*i^9,c^12*d^37*e^8*i^3,c^22*e^3*g^15*i^7,c^26*f^13*g^2*k^3,c*e^24*f^2*g^2*k^10,c^9*f*h^13*i^7,c^15*d^5*e^4*g*k^14,e^20*f^12*k,d^10*e^8*h^11*j^4*k^2,d^20*f^10*h^4*k^5,e^3*g^12*h^6*i^2*j,d^4*f^4*g^6*h^11*j^3,c*f^12*g^12*i*k,c^22*d^21*e^19*f*g^2,d^10*e^6*f*j^9*k^9,c^9*d^4*f^9*g^5*j^8,d^29*e^4*g^2*h^11*i,e^19*h^9*j^2,d^12*f^11*g*i^7*j^2,e^24*f^8*g^5*k^4,c^8*e^12*g^4*h^8*k^5,c^10*d^18*h^13,e*h^15*i^5*k^5,c^16*d^8*e^5*j^11*k^4,b*e^14*i^6*j^9,b*d^23*e*h^5*i*j^11,b*d^2*e^6*f^7*i^5*j*k^3,b*c^4*d^16*h^4*i^3*j^5*k^4,b*c^7*i^7*k^12,b*c^7*f^15*g^8*i^4,b*c^9*d^26*f^5*i^2*k^7,b*c^16*d^10*g^7*h^4*i^2*j^4,b^3*c^14*e^5*h^2*j^3,b^3*c^19*d^10*f^9*k,b^3*c^63*h^4*j^2,b^4*c^2*d^8*h^9*i^8,b^4*c^5*f^5*g^2*i^12*k^6,b^5*e^10*f^2*g^3*h*j^3*k^10,b^5*c^13*d^8*f^2*i^10*j^2*k^5,b^6*c^12*e^5*f*g^3*h^7*i^5,b^7*d^9*e^30*g^3*i,b^7*d^19*e^22*f^4*g^3*k^2,b^7*d^3*e^12*g^17,b^7*c^23*e^3*f^6*g^2*i^7,b^8*c^6*i^16*j^2,b^9*g^2*i^8*j^7*k^7,b^9*e^3*f^5*i^2*j^10*k^3,b^9*c^11*f^3*j^6*k^7,b^11*f^4*g^9*i^5*j^5*k,b^11*d^8*f^2*g^8*i^2*j*k^5,b^11*c^7*d^46*e^3*i,b^11*c^23*d^3*h*j*k^14,b^12*e^3*f^11*g^2*i^7*j^2,b^12*c^9*f^9*g*h^4*i^4*k,b^13*e^8*g*k^8,b^13*d^29*f^4*h^2*j^2*k^3,b^13*c^33*e^3*f*k^8,b^14*c^9*d^2*f^11*h^7,b^15*d^19*e^24*j*k^6,b^15*d^13*e^6*f^8*g^2,b^15*c^8*d^6*g^7*k^6,b^16*c^2*d^3*e^12*g*j^13*k,b^17*d^11*e*f*i^3*j^7*k,b^17*e^2*g^2*i^6*j^9*k^7,b^18*c*e^7*g^10*h^11,b^18*c^25*i^7*k^6,b^19*e^12*f^5*g^4*j^5,b^19*c^9*d^9*g^3*j^9,b^19*c^14*d^19*f^3*g^3*j,b^20*d^3*e*f^7*i^8,b^20*g^5*i^10*k^4,b^20*c^2*d^27*f^5*i^5,b^20*c^25*e^14*f^2*k^4,b^21*c^12*d^9*e^21*k^2,b^21*c^23*f^6*i^12,b^22*f^20*i^2*j*k^2,b^22*d^7*e^18*h^5*i^4*j^2,b^22*d^17*e^10*f*i^3*k^2,b^22*c^7*d*g^6*h^5*i^3*j,b^24*e^5*f^2*g^9*h^4*i^2*j*k^2,b^24*d^8*f^6*g^2*h^13*k,b^24*c^5*e^29*h^3*i,b^24*c^6*d^9*f^2*g*i^13,b^24*c^10*d*e^21*f^5,b^25*g^2*j^16*k,b^26*f*i^8*j^10*k,b^26*e*f^2*h^11*k^4,b^26*c^4*e^16*i^11,b^28*c^4*f^3*g^4*h^2*i^2*j^4,b^29*d*g^18*j^5,b^30*c^2*e^7*j^3*k^2,b^30*c^4*d^11*f^5*h^5*j^5,b^31*c^3*d^15*g^10*k^4,b^32*c^26*f*g^3*h^2,b^33*c^2*d^3*f^11*h^10,b^35*e^2*i^16*j^2,b^36*d^36*g^2*i^3*j,b^36*c^32*d*f^4*j^4,b^38*d^26*e^5*i,b^38*c^44*d^15,b^40*e^10*f^2*k^12,b^40*d^2*k^16,b^40*c^17*d^3*e^9*g^7*k^3,b^41*d^18*e^5*f*h*i^6,b^43*e^5*h^12*i*j^2,b^44*g^7*j^10,b^46*e^2*j^9,b^46*c^2*f^7*j*k^3,b^47*h^5*i^6*j^3,b^49*c^9*d^5*g^2*h^7,b^51*c^7*e^11*h^5*k,b^55*c^25*d*i^3*k^3,b^63*d^16*f^3*i^3*j*k,b^64*f^2*h*i^6*k^6,b^65*d^6*e^7*i*k^4,b^67*c^2*d^4*e^6*h^3*j^2,b^67*c^7*d^14*f*k^2,b^70*e^6*g*h^8*i,b^71*c^11*e^4*i^3,b^76*e^4*f^3*h*i^3*j,b^80*c*g*i^8*j^2,b^82*c*e^6*i*j^3,b^92*g^2*h^3*j^3,c^9*d^36*e^7*i^4*j^4,d^12*f*g^2*h*k^15,d^3*e^10*f^13*g^4*j^4,c^16*d^9*f^8*g^5*j^5*k^2,c^21*d^5*e^13*h^7*i,c^4*e^11*f^4*i^3*j^7*k^5,c^18*f^2*h^4*j^3*k^9,c^5*d^5*g^12*j^4*k^7,d^13*f*g^8*h^4*i^3*k^7,d^3*e^16*g*h^2*i*k^10,c^3*f^5*g^15*h^2*k,c*e^27*f*g^8*k^4,c^3*d^18*e^14*f^7*g^2*h^5,d^16*e^9*i^4*j^4*k^3,d^47*f^6*h*j^6,c^11*d^40*i*k^7,f^5*k^19,c^7*e^20*f^4*g^4*i*j^2,c^21*d^24*f^2*g^3*k,d^8*e^9*f^6*h*i^9,d^7*f^15*h^2*k^8,d^5*f^3*h^16*i*j^2*k^5,d^2*e^2*f^2*h*i^2*j^21,c^25*d^6*e^6*g^5*i^6*j^3,f^7*g^3*h^14,c^13*d^3*g*h^2*j^9*k^7,h^5*i^9*j^7*k^3,c^23*g^8*j^7*k,e^6*f^4*g^5*h^3*i^6*j^5,d*e^4*h^7*i^4*j^2*k^10,c^11*f^2*g^4*h^7*i^3*j*k,d^43*h^5*j^5*k^3,d^6*g^18*j^2,d^20*h^7*i^7*k^8,c^9*e^15*h^5*i*k^4,c^11*d^16*e^2*f^4*h^10*j^2,e^22*g^11*j*k^2,d^4*e^11*g^7*h^5*i^4*k^2,d^35*f^3*g*h^10,c^33*e^6*g^3*h^7*k^2,d^35*f^8*i*j^2*k^4,c^20*d^8*f^15*i^3,c^27*e*i^6*j*k^6,c^29*d^22*h^3*i*j^3*k,c^3*d^6*f^3*h^6*i^12*j,c^16*d^33*g^6*j^4,d^17*e^4*g^3*i^7*j^2,c^2*d^10*g^8*i^9*k^4,c^4*d^41*g^2*h^3*i^4,c^39*d^6*f^3*h*j,c^51*g^4*k^4,f^13*h^3*i*j^4*k^2,c^2*d^31*e^13*h*i^2*k^2,c^12*e^8*g^15*i^6,c^16*e^4*f^10*g^2*j*k^7,f*g^6*h^12*j^6,c^12*d^15*e^24*g^2,f^6*g^5*j^11*k^4,c^23*g^4*h^16*k^2,g*h^3*i^7*j^13*k,d^6*f^8*g*i^6*j^5*k^4,c^11*d^12*e^2*j^6*k^11,e^11*f^4*i^4*j^4*k^7,e^4*i^6*k^16,f^12*g^8*i^3*j^3,d^20*f^2*i*k^11,d^31*g^7*j*k^9,d^4*e^4*f*g*h^19,c^10*e^2*f^17*h^4*i*j^3,d^46*f^9*i^2*j,d*e^17*h^4*j^12,c^4*e^10*h^3*j^6*k^2,c^6*d^25*h^8*j^8,c^9*d^4*e^2*f^6*k^5,c^21*g^5*k^14,d^2*h^10*i^7*k^2,d^7*g^24*h^3*i,c^28*d^2*e*g^6*h^5,d^3*e^9*f^20*h^2*i,c^2*e^10*g^3*h^8*i^4,c^7*e^2*f^12*g^3*h*i^3,c^16*d^10*g^2*h^12*i,c^10*d^7*e^3*i^2*j^13,c^13*e^8*f^3*g^2*i^6*j^3*k^3,c^15*d^17*f^9*i*j^5,c^22*g*i^4*j^7*k^4,c^27*d^10*f*g*i^3*k^7,c*f^5*i^14*k^3,c^2*d^7*e^26*h^11,c^14*e^19*h^10*k^3,d^36*f^8*g^6*i^4,c^37*f^5*g^8*k,c*d^15*e^13*f^7*i^7*k,c^10*d^29*e*h^6*i^5*j^2*k^2,c^20*g^4*h*i^9,c^22*d^23*h^6*i^4*j,c^69*h^3,d^9*f^7*g^3*h*j^10,d^2*g^8*i*j^4*k^9,d^40*e^8*j^3,c^2*d^50*f^2*k^3,c^9*d^33*e*g^3*i^2*k^9,c^11*f^4*g^5*j^7*k^5,c^44*e^16*k^5,b*e^8*f^8*g^2*h*i^6*j^5*k,b*f^14*h^6*i*j^7,b*e*g^7*i^8*k^10,b*f^6*g*h^5*i^3*j*k^5,b*c^13*f^4*h^9*k^9,b*c^20*d^13*e^12*h^4*i^2,b^2*e^20*f^3*j^9*k^3,b^2*e^13*g*j^3*k^12,b^2*d^23*f*h^3*j^5*k^7,b^2*d^10*f*g^14*h^2*k^7,b^2*c^7*d^24*e^19*g^5*j,b^3*e^2*h^5*i^7*k^12,b^3*d^32*e^8*g*h^4*i^5,b^3*d^42*f^8*g*i^4,b^3*c^9*f^10*g^8*h^3,b^3*c^11*h^7*k^12,b^3*c^30*e^23*h^2,b^3*c^42*e^16*g^3*h*i,b^4*d^7*e^11*f^5*g^2*h*j^3*k,b^4*e^4*g^7*k^10,b^4*c^6*d^32*e^6*i^7*k,b^5*d^5*e^8*h^15*j^5,b^5*d^15*f^7*h^8*k,b^5*f*i^7*j^9*k^7,b^5*c^7*e^28*f^6*g*h*k^2,b^5*c^17*f*g^2*i^8*j^2*k^7,b^6*f^6*g^11*i*j^9,b^6*d^29*j^6*k^9,b^7*c^3*e^10*f^5*i^4*j^7*k,b^7*c^15*e^3*i^6*j*k^10,b^7*c^17*d^2*f^3*h*i*j^3*k^5,b^7*c^48*d^3*e^9*i^4,b^8*e^17*f^2*g^4*j^8,b^8*d^20*e^4*f^8*j^10,b^8*e^9*f^16*g^4*k^2,b^8*d^3*e^5*g^3*h*j^12,b^8*c^4*d^13*g^3*j^4*k^3,b^9*e^6*f^4*i^7*j^2,b^9*d^21*f^2*h*i^4*k^3,b^9*c^27*e*f^7*j,b^10*d^32*g^13*k,b^10*c^13*e^3*f^3*h*i^11*k^4,b^11*d^11*e^15*i^2*k^6,b^11*e^5*g^6*h^6*i^2*j^4,b^11*c^2*d^5*f^6*g^6*i,b^12*e^5*g^25*k,b^12*c^8*e^3*g^5*i^4*j^9*k,b^13*e^34*h^4*j^3,b^13*d^3*g*i^12*j^3*k,b^13*e^26*f^2,b^13*c^9*d^9*e^14*h^8*k,b^13*c^14*d^19*e^6*h*k^4,b^13*c^45*f^2*i^3*j^2*k,b^14*f^2*j^21,b^15*c^20*d^11*f*g^7*i^6,b^16*d^59*g*j*k,b^16*c^7*d*e^14*g*h^13*i^2,b^17*e^3*f^2*g^5*i^4*j^11,b^17*f^6*i*k^15,b^17*g^4*h^3*i*j^7*k^3,b^17*c^6*d^8*e^19*f^5*i^2*j^2,b^17*c^13*e^20*i^5*j^4,b^17*c^18*d*e^12*i^4*k^2,b^18*c^6*d^9*e*i^12*k^2,b^19*e^12*h*j^6*k^6,b^19*d^5*f^2*h^6*j^8*k,b^19*e^4*f^10*k^9,b^21*e^8*g^7*h*i^2*j*k^4,b^21*c^2*e^23*g^4*j^4,b^21*c^4*e^10*f^6*h^4*j^6,b^21*c^16*e^3*g^3*h^3*k^4,b^22*f^8*h^11,b^22*c^4*h^10*i*k^4,b^23*d*g^13*h^3*k^2,b^23*c^12*d^11*j^9*k^3,b^25*d^30*g^2*i^2*j^4*k,b^25*c^22*f*j^7,b^26*c^8*g*i^9*k^2,b^26*c^10*d^3*f^3*h^4*i^4*j,b^27*d^20*e^10*j^3*k^4,b^27*d^13*e^3*i^2*k^13,b^27*d^14*g^9*j^2,b^28*c^8*e^14*h^2*i^2,b^28*c^32*g^7*h*i^3,b^29*c^9*d^28*e*g*k^2,b^30*d^12*e^10*h^2*i^5,b^30*e*f^14*g^5*h*k^3,b^30*c^32*d*e^5*f*h^4,b^32*c^7*d^20*e*g^4*h^4,b^35*f^4*j^4*k^7,b^36*d*f^6*i^4*k^7,b^36*c^60*e^2*g^2,b^38*g^2*h^8*k^2,b^40*e^16*h^6*k^5,b^40*c^2*e^8*f^4*k^8,b^42*c^5*d^12*h^2*i^2*j^7,b^44*c^3*d^2*e^9*j^6,b^44*c^8*d^12*e*f^7*k,b^44*c^15*e^2*i^2*k^7,b^45*d^23*e^8*f^4*g^5,b^46*c^27*d^10*h^2,b^47*c*e^9*h^5*i^5,b^48*c^4*e^5*f^2*h*k^8,b^51*c^19*i^10,b^52*d^10*i^2*j^4*k^5,b^54*f^4*g^6*j^2,b^56*d^8*e^3*k^6,b^59*e^3*f^4*g*h^2,b^60*c*e^9*i^2*j^2*k^4,b^63*d^3*e^4*h^3*i^3*j^4,b^67*f^2*g^6*h^4,b^71*c^17*f^3*g*h^2*j,b^73*d*e^7*i^3*j,b^73*c^15*e^2,b^75*d^9*g^4,b^92*c^8*h^3,c^4*e*f^11*g^8*i^4,e^3*f^2*g^15*h^3*k^5,d^12*e^19*f^4*g^2*h^6*k^3,c^24*f^6*g*j^11,d^4*f^5*g^11*i^2*j^6,e^25*f*g^4*j^5*k,c^11*d^18*e^5*g^3*j*k^5,d^26*f*h^6*i^5*k^5,c^9*d^10*e^5*f^5*g^6*h^4*i^2,c^17*d^31*f^2*j^8,c^3*d^8*g*i^13*k^3,f^7*h^9*j^10,d^6*f^21*h^2*j^2,c*g^4*h^8*i^2*j^4*k^5,c^6*f^13*g^4*h*i*k^8,d^29*e^3*g*h^11*k,c^11*h^15*i^2*k^6,c^5*e^13*i^3*j^10*k,c^6*d^27*g^6*j^7*k^3,d^11*e^9*g^3*i^6*j^5,d^35*g^2*h^4*i^3*j*k^3,c^29*e^4*h^2*j^4,d^26*e^7*f^7*g^4*h^3*j^5,c^2*e^13*g^15*i^5*k^2,c^4*d^19*g^9*h^2,c^27*e^4*f^6*g^2*h^7*i^2,c^2*d^9*e^29*g^2,c^14*d^3*e^11*f^3*g^16,c^45*f*g^3*i^7,d^14*j^3*k^15,g^7*h^6*j^10*k^3,e^24*i^14,c^10*e^2*f^16*g*i^4*j^3,e^7*f^3*j*k^9,c*d^29*f^9*h^2*j^3*k^4,c^13*d^22*f*h*k^13,e^15*g^3*h^9*i^3*j,e^7*f^9*g^3*h^2*i^2*k^3,c^6*d^4*g^2*h^13*k^4,d*e^8*i*j^16,c^5*d^11*f^6*j^8*k^2,c^17*d^4*g*i^2*j^2*k^11,d^30*f^5*g^6*i^3*j^3,c^29*d^19*f^8*g^2*j^2,e^8*h^3*i^6*j^8,c^3*d^3*f^12*i^5,c^10*e*g^4*h^2*i^8*j^2*k^2,c^12*d^17*h^7*i^3*j^4,e^8*g^18*i^3*j^3,c*e^4*f*g^5*j^10*k^9,c^2*d^7*f*g^18*i^2*k^3,f^25*j^2*k^3,f^9*h^11*j^6*k^4,c*e^29*f^8*i^3,c^10*d^7*e^17*h^5*i*j^3,c^22*d*g^5*h^5*j^2,d^18*e^24*g^5*j^4,c^2*d^28*e^16*f^3*g^5*k,d^36*e^5*f^5*g*i^3*k,c^20*e^28*h^3*j,d^57*f^2*i*j^5,c^8*e^17*h^10*i^6,d^9*e^5*f^4*h^9*k^5,f^6*i^5*j^11*k^2,f^3*g^11*j^12,c^7*h^2*j^6*k^9,c^38*e^14*i^3*j^2,c^52*d^21,e^22*g^4*j^11*k^3,e^11*f*i^6*j^5*k^3,d^22*f^7*h^3*i*j^7,d^15*h^2*i^3*j*k^7,c^17*e^6*f^4*j^4*k^3,c^29*g*k^12,c^31*d^4*f^2*h^4*k^7,c^3*e^8*h^2*i^10*k^8,c^5*f^6*h^7*i^5*k^3,d^5*e^20*i*k^10,e^2*f^3*g^6*k,d^29*h^4*k^14,b*d^10*e^9*g^20,b*d^20*j^14,b*c^15*e^6*f^10*h^5*i^2,b*c^24*h^16,b^2*d^55*e^3*h^5*k^3,b^2*e^31*k^4,b^2*d^20*e^18*f^5*h^3,b^2*c^2*e^13*f^7*g^13,b^2*c^4*d^13*e^11*h^2*k^8,b^2*c^14*e^6*g^18*k^4,b^2*c^23*f^7*j^11,b^2*c^35*i^2*j^5*k^5,b^3*c*f*g*h^15*k^10,b^3*c^9*e*f^3*i^13*j^3*k,b^4*d^12*f^6*g^2*i^3*j^6,b^4*c^5*g^7*i^6*j^8,b^4*c^10*d^5*g^7*i^5*k^3,b^4*c^12*d^36*f^4*g*j^2,b^5*c^2*d^5*e^11*f^3*g*h^7*k^2,b^5*c^33*f^5*i^7,b^6*d^2*e^24*f^2*i*j^5,b^6*c^5*d^16*e^12*h^3*j^9,b^6*c^8*e^17*i^3*k^6,b^6*c^10*d^26*e^4*j*k,b^6*c^22*d^20*f^8*g^8,b^7*d^10*e^13*f^4*i^9,b^7*d^3*e^6*i^11*k^6,b^7*c^45*e*i^2*k^6,b^8*d^45*g^4*i,b^8*d^9*f^13*j^3*k^8,b^8*f*g^11*h^2*j^8*k,b^8*c^27*e^16*g^6*j*k,b^8*c^32*d^3*e^8*g^6*k^4,b^9*e^24*f^8*i^6,b^9*c^3*d^8*e^12*h^8*i^4*j,b^9*c^6*e^17*g^3*i^8,b^9*c^8*d^18*e^4*f^6*h*i^3,b^9*c^15*d*e^5*g^2*h^7*i^6*k,b^9*c^20*d^11*g^2*i^5*k^4,b^10*g^21*h^2*j^3,b^10*i^3*j^17,b^10*e^6*f^2*h^3*i^16,b^10*c^2*d^12*e^12*g^16*i,b^11*e^4*f^5*h^12*j^3,b^11*d*f^19*h^5*k^2,b^11*c^2*d^16*i^14,b^12*c^2*d^5*j^12*k^7,b^12*c^5*f^2*i^2*j^2*k^15,b^12*c^14*f^2*g^6*j^11,b^12*c^38*d^16*e*g^2,b^13*c^4*e^8*f*g^6*h^9*k^2,b^13*c^6*f^7*h^14,b^14*c^12*e*j^10*k,b^14*c^17*f^12*j^2*k^4,b^15*e^29*h^10,b^15*e^10*f^2*h*i^6*j^8,b^15*e^2*f^16*i^5,b^15*e^3*g*i^8*j^2*k^6,b^15*h^5*i^3*j^4*k,b^15*c^5*d^7*f^14*i^2*k^4,b^16*d^8*g^9*j^5,b^17*c^10*e*f^4*g^2*h^3*j^2,b^17*c^24*d^5*f^2*g*h^7,b^18*e^26*g^2*j^4*k^2,b^18*e^8*f*g^16*j^3,b^18*c^9*e*g^21*k^2,b^18*c^11*d^16*g^15,b^19*d^6*e^15*h^3*i^4*k^2,b^19*c^18*d^3*i^8*j^5*k^3,b^19*c^22*e^10*h^5*k^2,b^20*h*i^19*j^3,b^21*e^18*f^13*g^5,b^21*d^14*e^6*g^4*h^5,b^22*c^5*d^35*j^7,b^22*c^8*d^14*e^4*f^2*g^3*k^7,b^22*c^15*g^17*j^4,b^23*d^12*e*i^9*k^4,b^23*c^28*d^8*e^3*f*j^4,b^23*c^40*d*k^4,b^24*e^4*f*j^7*k^11,b^24*c^14*e^5*h*i^11,b^25*f^3*i^3*j*k^11,b^25*c^3*d^27*i,b^25*c^10*d^10*g^5*h^5*i^4*j,b^26*d^4*e*g^2*h*i^14,b^27*h^10*j^9,b^29*e^13*f*k^12,b^29*e^3*g^9*h^7*j,b^31*d^6*h^3*i*j^10,b^31*f^2*g^4*i^5*k^7,b^31*d^16*f^8*j^2*k^2,b^33*d^6*e^6*f^4*j*k^5,b^33*c^10*f^12*g^5,b^34*g*h^8*i^6*j^2,b^35*d^25*e^2*f^3*g*i*k^3,b^35*c^3*e^25*j^7,b^35*c^8*e^17*f^8,b^36*e^6*f^10*i^3,b^36*c^5*d^12*h^10*i,b^36*c^8*f^2*i^5*k^8,b^37*d^23*e*g^7*h^3,b^38*c^15*e^5*h^8,b^39*c^26*e^3*f^3*k,b^40*c^9*i^9*j^2,b^43*f*g^6*j^5*k^3,b^44*e^3*f^8*h*j^2,b^45*d^2*e^8*k^10,b^45*f^3*g^12*k,b^48*c^16*f^3*i^5*j^3*k,b^50*d^23*i^4*j*k^3,b^52*d^7*e*f^4*i,b^52*c^3*g^2*i^3*k^6,b^52*c^5*d^31*f^2*h*k,b^54*c^10*d^5*g^3*h^6*j,b^55*c*f^2*g^5*h*i^8,b^56*c^9*d^13*i^6,b^60*c^7*g*h^3*j^4*k,b^63*h^8*i*k^4,b^64*d^3*e^3*g^4*h*k^2,b^65*c^3*e^7*f^2*h^6,b^69*e^18*i^2*j^3,b^81*e^2*h^4*j,b^100*d^2*e^7*f^2,c^6*d^3*e^15*f^2*h^2*k^11,c*d^12*e^10*g^3*j^4*k^9,c^13*d^6*f^4*g^17*j^3,d^20*h^7*i^4*k^9,d^4*e^10*f^2*g^6*h^5*i*k^3,c^7*d^25*e^3*j^11*k^2,c^5*d^17*e^3*f^5*g^2*i^4*j^3,f^10*g^4*h^2*k^12,c^7*d^2*h^10*i^4*j*k^3,d^13*e^5*g^9*h^3*j^2*k,c^31*d^10*f*g*h^12*k,d^3*e^34*g^2*h*j*k^4,c^11*e^4*i^12*j^6*k,h^6*i^20*k,d^3*g^7*i^15*j,c^35*g^3*h*i^6,c^3*d^26*e^19*f^9,c^12*d^40*e^7*j^4*k,c^22*d^3*e^2*g^17*i*j,e^12*j^4*k^13,d^8*e^27*f*g*i^5,c^10*d^32*e^7*h^4*i^2,c^57*e^15*g^2*h,d^5*g^3*h*i^2*j^20,g^2*h^14*k^8,c*d^8*f^4*g^2*h^7*k^11,d^5*e^5*f^3*j^11*k^6,c^7*g*i*j^5*k^15,e^5*f^9*i^4*j^3,c^2*d^11*h^8*i^2*j^7*k,c^5*d^11*e^14*f^3*k^7,c^5*d^12*e^3*f^19*j^3,c^12*e^4*g^5*h^6*j^5,c^17*d^5*f^11*g^5,d^3*g*h^13*i^7,c^11*d^3*f^4*i^9*j^4*k^2,e^22*h^11*i^5,d^14*f*g^14*i^4*j^5,e^2*f^7*g^4*i*j^12,c^28*e^19*i^2*j^5,c^33*d*e^11*f^2*i*k^3,c^42*d^15*h*j*k^4,c^21*d^9*f^4*i^9*k^3,d^16*e^3*f^4*h^4*j^10*k^2,d^9*h^3*i^2*j^4*k^11,c^5*d^41*e^2*g^3*h^2*j^2,c^7*e^11*f*h*j^7*k^7,c^52*e^10*g^5,f^3*h^8*i^4*j*k^7,e^7*g^6*h*j^2*k^5,d^24*f^6*h^6*j^4,c^15*d^25*e^13*g^10,c^3*d^33*e^2*g^6*h^7*i^5,c^5*e^11*f^7*h^6*i*k,c^14*h^17*j^3*k^2,c^6*d*f^2*g^12*h^3*k^3,c^13*e^4*f^4*j^14,c*f^6*h^2*i^7*j^8,c^13*h*i^9*j^2*k^9,d^6*f^3*g^2*i^2*j^9,g^7*i^4*j^3*k^7,c^2*d^30*f*g*j^5*k^2,c^37*f^6*j^8,e^16*g*h^8*k^6,c^23*f^2*i^6*k^3,c^25*d^3*f^8*h^4*i*j^2,e^22*i^2*j^2*k^10,d^20*e^9*j^4*k^5,c^10*e^4*g^14*i*j*k,c^12*d^14*f^5*g^8*j^3,c^14*d^44*h*k^9,e^11*i^10*k^10,d^28*h^4*i^5*k^5,d^22*f^7*g^4*h^4*i^4,c^35*e^6*h*i*k^10,d^39*e^5*g^4*k^3,f^2*k^21,c^10*d^4*e^20*f*g*j^2,c^24*d^28*k^3,c^55*d*f*j^9,e^29*f^5*i^5,e^22*g^3*i^7*k^4,d^12*e^9*f^3*h^2*i^2,c^5*e^10*g^2*h^8*i^5*k^5,c^5*g^11*h^9*i^2*j^3,c^7*d^26*h^13,c^10*d^5*e^2*g^2*h*i^4*k^8,c^45*e^17*k^4,d^23*e^16*g^11,d^47*g^10*k,c^6*d^33*e^2*j^11,e*f^16*h^6*k^6,e^2*h^12*k^12,d^2*e^38*k^2,c^8*e^20*f^7*g^4,c^17*d^10*e^8*g^3*h^11,c^20*e^13*g^9*i*k^2,c^41*i^4*j^2*k^3,b*c^28*d^10*e^6*g^2*j^3*k,b^2*f^4*h^15*k,b^2*c^2*e^15*i^10*j,b^2*c^11*d^8*e^3*h^2*i^8*j^5,b^2*c^16*d^18*i^7*k,b^3*d^2*e^4*f^2*i^18,b^3*c^2*e^6*j^13*k^5,b^3*c^3*d^29*e^2*g^12*i^2,b^3*c^7*f^9*j^5*k^8,b^4*d^8*f^19*j^5,b^4*h^6*i^2*j^7*k^5,b^4*d*f^11*i*k^8,b^5*c^9*e^3*g*h^7*i^13,b^6*e^5*f^23*j^3,b^6*e^6*f*g^2*h^4*j^5,b^6*c^2*d^6*f^7*h^9*j^7,b^6*c^5*f^15*g^2*k^2,b^6*c^14*g*h^8*j*k^3,b^6*c^20*e*i^15*j^2,b^7*c*d^10*g^15*h*j^2*k,b^7*c^35*e^3*h^8*i^3*k^4,b^8*d^4*i^5*j^14,b^8*f^8*i^9*j^4*k^6,b^10*e^31*g^5*h^2,b^10*d^8*e^11*g^4*h^6*k^4,b^10*e^6*g^24*h*i,b^10*c^11*f^18*i*j^4,b^10*c^18*g^3*i^4*j^6*k,b^10*c^20*d^12*f^2*h^2*j^8,b^11*e*i^15*j^4,b^11*d^8*e^9*g^3*k^11,b^11*c^5*g^17*j^7,b^11*c^6*h^4*i^12*k,b^11*c^10*e^15*f*h^11,b^12*g^13*i^7*j,b^12*d^31*f*g^7*h^2*i^2*j^3,b^12*c^18*d^2*e^8*j^7,b^12*c^28*e^3*g^10*i*j^4,b^12*c^30*e*j*k^8,b^13*e^11*g^7*h^11*i^2,b^13*c^6*d^10*h^7*i^5*j,b^14*d^21*e^4*j^2,b^14*d^4*e^5*g^5*h^6*i^3*j^4*k^3,b^14*c^5*d^14*g^5*i^2*k^6,b^14*c^40*e^12*g^2*k^2,b^14*c^42*d^10*h^2*j,b^15*e^6*g^2*h^2*i^13*k^2,b^15*c^4*e^26*h^5*i^3*k^2,b^15*c^28*e*h^4*i^4*k^2,b^16*c^3*d^5*e^15*f*g^7,b^16*c^15*e^8*g^12,b^17*d^13*e^4*f^3*g^3*h^5*i^5,b^17*c^3*d^6*g^8*h^4*i^7,b^19*d^11*i^16*j,b^19*c^34*i^7,b^20*e^2*f^7*i^2*j^9*k^2,b^20*g^4*i^4*j^3*k^11,b^20*d^10*f^5*j^5*k^6,b^20*c^2*d^3*g^3*i*k^15,b^20*c^21*d^11*e*g^8*i^2*j,b^22*e*g^5*h^2*j^11,b^22*e^4*k^18,b^22*f^9*g^5*j^3,b^22*c^2*d^24*k^13,b^23*d^2*f^11*g*h^2*i^4,b^24*e^22*f^5*j^2*k^3,b^24*c^12*d^8*e^2*f^3*k^7,b^25*d^6*h^11*k^4,b^25*c^7*g^7*h^11,b^27*c^5*e^10*h^9,b^27*c^10*e^2*f^9*h^2*k,b^28*c^16*e^8*j^3*k^5,b^29*d^5*e^4*f^10*i^5*j^3,b^29*e^5*i^8*j^5*k^2,b^29*c^4*f^2*i^7*k^5,b^30*d^9*e^4*g^9*i^2*k^3,b^31*c^11*d^3*e^3*h^3*j^5,b^31*c^23*g*h^2*i^2,b^33*e^8*f^5*h^2*j^5*k^3,b^37*j^9*k^9,b^37*c^8*f^6*j^8,b^37*c^20*i*j^2*k^9,b^39*g^10*i^7*j*k^3,b^41*d*e^6*f*j^2*k,b^41*g^2*i^2*k^10,b^41*f^9*g^11*j,b^41*d^25*h^2*k^5,b^41*c^30*e*f^4*j*k,b^43*c^3*e^10*g^9*k^4,b^43*c^5*d^9*f^3*g^3,b^44*g^5*h^2*i^7*k^4,b^45*d^7*i^5*j^3*k^3,b^45*c^3*e^26*k^2,b^46*e*i^16*j,b^46*c^22*f^3*i^7,b^47*c^9*e^3*g^5*i^2*j,b^47*c^11*d^22*f^6*j^3,b^52*c^19*e^12*i^2,b^57*d^10*e*j^8,b^58*d^18*h^3*i^6*j^2,b^58*c^11*i^2*k^4,b^58*c^13*d^7*h^5*j,b^59*e^5*g^12*k^2,d^2*e^13*f^8*h^2*i^5*k^2,d^11*e^8*f^2*g^2*i^3*j^6,c^19*d^19*f^4*g^8*h^2,c^17*d^9*e^28*g*k,d^57*e^6*i^4*j^3,c^7*e^14*g^2*h^9*j^2*k,c^21*d^4*g*h^13*k^5,d^20*e^3*g^5*i*j^12,c^13*e^7*f^3*h^3*i^3*j^9,c^18*d^3*f^17*i^2*j,c^25*g^3*h^2*i^5*j^3*k^3,c^14*d^28*g^11*j^6,e^25*g^6*i^6*k^4,d^26*e^12*h^5*i,c^31*i^8*j^10,c^17*e^11*h*i^14*j^3,d^16*e^7*h*i^17,e^10*f^6*i^3*j^6*k^4,e^3*g^4*i^5*k^13,d^15*f^4*h^2*j^2*k^8,d^5*e^19*j*k^11,c^2*e^9*g^5*h^7*j^8,c^7*e*f^8*g^5*k^2,g*h^14*i^6*j^2,d^8*e^5*g^15*h^7*i*j^3,d^18*f^7*g^15,c*f*i^8*j^7*k^6,c^5*e^30*f^4*k^5,c^8*d^2*e^2*g*h*i*j^15,c^12*e^18*h^14,d^61*i*k^6,c^23*e^16*k^7,d^10*e^12*f^9*i^6,c^8*d^24*h^10*i^4*j^4,d^3*e*h^4*i*j^7*k^15,d^35*e^7*g^3*h^3*j^5,d^45*f^4*g^3,c^7*d^28*g^8*h^2*i*k^6,c^30*d*e^4*g*h^7*i^3*k^2,d^18*f^3*h^7*j^7*k^4,e^3*g^12*h^4*k^7,c^4*d^27*e^5*f*g^5*i^6*j^2,d^10*f^9*g^3*h^12,e^5*g^2*i*j^12*k^2,d^24*g*j^8*k^6,c^27*f^3*j^11*k^2,d^8*f^2*h^3*i^9*j^6*k^2,c*e^9*f^7*h*i^3*j^9,c^13*e^2*i^5*j^3*k^7,c^15*f^5*h^5*j^5*k^2,c^46*e^8*g^4*i^3*j,c^2*d^8*f^2*g^8*j^6,d^16*f^4*g^4*h^5*i^3,e^25*g*j^5*k^3,d^6*e^14*h^3*i*k^3,e^9*f^2*g^17*i^5,e^7*g^2*h^2*i^3*k^12,f^8*g^11*h^3,c^2*d^30*h^7*k^7,d^17*e^21*g^11*k,f*g^6*i^11*j^5,e^25*f^4*g^4*h,c^7*d^4*e^13*g^3*h^12*j,c^12*d^14*e^5*f^2*g^3*h^5*k,c^19*e^11*f^4*i*j^11,c^43*f^4*g^2*i^2*j^4,d^12*e^2*h^19*i^4,d^19*e^7*f^3*i^4*j^6,e^54,c^6*d^12*i^6*k^5,c^8*d^43*f*h*i*j^2,c^18*d^6*f^3*g^12*i^5,c^55*d*k^5,e^9*i^17*k,c^29*e^4*f^2*h*i^8*k,f^8*j^2*k^12,c^16*e^11*g^5*i^3,c^18*d^27*f^5,c^25*d^10*g^4*h^5*i*j^2,c^30*d^20*g^4*k^3,c^4*d^4*f*g*h*i^11,f^4*h^10*j^10,e^3*f^12*g^2*k^6,d^10*f^18*h^3*j^2*k,c^4*g*h^9*j^4*k^7,h^12*i^6*j^2*k^3,d*h^16*i^3*k^7,c^11*d^9*e^6*g^2*h^11*i^4,e^7*g^12*h^5*i*j^3*k,c^5*d^60*e^3*g*h,e^11*f^4*g^5*h^10*i^3,c^2*f^2*g^4*h^14*k,c^26*d^2*e^20*h*i^3,d^9*e^23*h^8*j^4,g^18*h^7,e^4*f*i*j^15,c*f^15*j^7,c^10*d^6*h^3*j^11,c^13*f^7*g^3*i^2*j*k^8,c^34*d^23*e^13*i,f^17*i^8*j,h^5*i^11*j^3*k^5,d^17*g^11*j^12,e^20*h^12*k^4,b*c^8*e^13*h*j^10*k^3,b^2*d^4*e^2*h^8*i^4*j^4*k^3,b^2*c^6*g^6*h^3*i^8*j,b^2*c^8*h^7*i^6*k^12,b^2*c^8*f^5*h^8*i^3*j^3,b^2*c^13*d^8*f^19*h*i^2,b^3*d^15*e^9*h*j^5*k,b^3*d^25*e*f^8*k^4,b^3*d^8*e^2*g^5*i*k^10,b^3*d^9*f^2*g^14*h*j^4,b^3*d^18*g^5*k^13,b^3*c^7*d^2*g^19*k,b^4*d^23*h^8*i^7*k,b^4*c^6*e^13*f*h^6*i*j^2,b^4*c^11*e^5*f^15,b^4*c^18*e^6*h^5*i^3*k^6,b^4*c^20*d^12*h^10*k,b^5*e^20*g^7*j^3,b^5*c^5*e^13*g^12*k^4,b^5*c^7*d^23*g^6*h^3,b^6*d^7*e^9*g^3*h^6*i^4,b^6*e^2*g^8*h^5*i^6*k^4,b^6*c^26*d^4*g*h*i^8*j^4,b^6*c^28*e^17*g^5*h^3,b^7*d^7*e^7*f^5*g^2*i^6*j^2*k^2,b^7*d^11*e^3*g*h*i^5*j^14,b^8*d^5*e^4*i^15*j^4,b^8*c^24*i^6*j^3,b^9*g^3*j^2*k^19,b^9*e^8*h^2*i^17*j,b^9*c^11*d^5*e^6*g^8*i*j^4,b^9*c^16*d^15*f^7*g^8,b^10*d^13*g^4*i^9,b^10*c*d^44*f*h^4*i^4,b^10*c^3*d^5*e^29*g^2*h^6,b^10*c^48*d^2*h,b^11*f^6*g^5*j^6*k^4,b^11*c^4*d^12*f^4*g^4*j^2*k^8,b^12*f^8*g*h^3*i^3*k^4,b^12*d^3*e^24*i^7,b^12*d^34*e^11*h^2*i^2,b^12*c^9*e^6*g^11*i^6,b^12*c^13*e^2*f^13*h*j^3,b^12*c^46*e^19,b^14*e^16*f^4*h*i*k^7,b^14*g^7*h^12*j^2,b^14*c^21*d^11*e^15*g^3*i,b^15*g*j^21,b^15*c^8*f*g^6*j^7*k^6,b^16*e^15*h^10*j*k^2,b^16*d^2*f^3*g^2*i^8*j*k^6,b^16*e^7*f^6*h^3*k^5,b^16*c^31*f^8*i^2*j^4*k^2,b^17*c^8*d^15*f^3*j^8*k^4,b^18*e^9*f^7*i^4*j^6,b^18*d^13*h^6*i^2*j^10*k,b^18*e^2*i^6*k^9,b^18*d^23*f^5*i*j^2*k^4,b^18*c^3*d^7*g^3*h^6*i*j^9,b^19*d^34*f^2*g^3*j^3*k^2,b^19*c^7*g^2*h^19,b^20*d^42*f^4*i^4*k^2,b^20*c*e^8*h^4*j^8,b^20*c^4*e^13*f^3*g^2*i^3*k^3,b^20*c^6*d^7*f^9,b^20*c^13*e*g*h^3*i*j^2*k^4,b^20*c^18*f*g*k^7,b^22*d^26*f^8*g^6*i,b^22*d^5*f^2*i^9*j^7*k^2,b^22*c^25*d^5*g^2*h^6*j^2,b^23*c^4*f^15*h^2*i^3,b^23*c^11*e*g^4*h^8*i^6,b^23*c^16*f^7*g^4*h*i^5*k,b^23*c^36*d^5*f^2*g*j^7,b^24*d^16*e^25*f^4,b^24*e^8*g^18*h*i,b^24*c^19*d^3*i^4*j^9,b^26*c^22*d^3*e^15*i*k^3,b^27*g^8*j^12*k^2,b^28*d^5*f^2*g^4*h*i*j^6*k^2,b^28*d^22*e^11*i^4*k,b^28*c^8*f^7*g*j^9,b^28*c^22*f^5*h^3*j^5*k^2,b^30*e^4*g^2*i*k^14,b^30*d^13*f^4*g^10*h^3,b^32*d^3*e^2*g^3*h*k^3,b^35*c^12*e*i^6*j^3*k^3,b^36*e^8*g^5*i*j^4*k,b^36*c*d^16*f^3*j^6,b^36*c^4*f^11*g^5*k^4,b^36*c^13*d^9*g^4*k^5,b^37*c^36*f^2*k,b^38*d^6*e^24*j^5,b^38*c^23*g^11,b^39*d^14*e^13*f*i^2,b^39*d^7*e^6*i^4*k^8,b^39*c^11*d*f*g^7*i^3,b^41*e^24*f^5,b^41*c^11*d^22*e^4*f^3*h^2,b^42*e^6*h^4*i^9*k^2,b^43*c^5*d^20*i^7*k,b^47*c^3*d*h^6*j^4*k^3,b^48*f*h^9*i^7*j^2,b^49*c^13*e*f*h^4*j^2,b^52*d^4*f^5*g^8*j^2*k^2,b^54*c^5*i^9*j,b^55*d^16*e*i^2*k^6,b^57*d^7*e^19*j^3,b^57*c^4*e^12*g^3,b^57*c^6*d^31,b^58*d^8*e*h^2*i^7,b^72*c^12*i^2*j^2,b^76*h^4*k^5,b^87*c^4*g^2*h^2*i*k^2,c*d^3*g^6*i^12*j^2,c^2*d^59*e^2*g^6,c^15*d^3*f^4*h^13*i^4,d^9*f*h^3*j^5*k^12,c^20*d^41*e*g^2*h^2*j^3,e^6*f^5*g^5*h*j^3*k^6,c^3*d^6*f^8*g*j^10,c^15*g^6*i*j^4*k^8,c*f^14*g^4*i^4*j^2,c^3*d^28*f^4*h^4*i^2*k^6,c^8*g^9*h^6*i^7*j^4,c^13*f^6*g^9*i^6*k^2,d^39*e^4*f*g^3*k^4,c^25*d^5*e*g*h*i*k^9,d^52*f^4*j^7,c^18*d^29*e*g^11,c^5*f^2*h^6*j^8*k^6,c^36*e^13*g^4*i^2*j^4,d^2*e*g^8*j^9*k^4,e^10*f^3*g^5*h^2*i^5*j^7,d^10*f*g^4*h^6*i^2*j^3*k^4,d^17*e^27*i^6,c^15*e^5*f^6*g*h^4*j^6,c^3*f^8*h^11*i^4,e*f^5*g^11*h^4*j,c^2*g^16*h^3*i*k^7,c^2*d^8*e^10*g^3*h^6*k^5,c^33*f*g^2*i*j^7*k^2,c^7*f^5*i^12*j^5,d^13*e^12*i^3*j^9,d^37*h^2*j^5*k^4,c^8*g^12*i^4*j^2,c^33*d^2*e^7*f^3*j^8,c^8*d^21*e^3*f^2*j^3,c^15*d^4*e^4*g^4*h^6*j^5*k^4,c^20*d^14*g^4*k^7,c^55*e^11*g*k^3,e^5*g*h^2*i^10*k^3,d^29*f^4*h^7*i^5,d^40*f*g^9,c^30*e^7*g^11*k,c^6*d^13*e^3*f^8*g^2*h^5*i^2,c^12*d^3*e^9*g*i^5*j^8,d^11*f*i^13*j^2,c^49*f^4*i^4*j,f^6*i^9*k^12,e^12*f*h^18*k^3,c*d^67*e,c^8*d^50*e^2*g^2*h^2*i*j^2*k^2,c^15*f^14*g^4*j^4*k,f^2*h^9*i^2*j^6,c^3*d^2*f^16*h^2*i*k,c^22*d^9*e^18*i^5,d^19*e^6*f^5*k^8,d^3*g^14*h^2*j^7,e^18*h^7*j^5*k,c*e^10*f^12*k^4,c^10*d^6*h^11*j*k^5,e^7*h^14*i^8*k,d*e^14*g^3*h^7*i^3,d^11*e^6*f^11*g^3*i^2*k^2,d^25*g^2*h^11*k^3,d^11*h^3*i^6*j^14,c^7*f^13*g^2*i^9*j^3,c^3*d^9*g^15*i^2*j^8,c^8*f^2*h^16*i^2,d^19*f^13*g^9*h^2,c^2*e^11*f*h*i^3*j^12,c^7*d^5*e^3*f^15*i^2*j^4,c^14*e^4*i^5*j^6*k^3,c^16*d^19*h^5*j^8,c^19*f^7*i^4*k^6,c^3*d^30*g^2*j^9,c^8*d^40*f^10*g^2*j,d^7*g^4*i^8*j*k,d^38*h^5*i^3*j^3,c*d*g^18*i^7,c^24*e^15*g*i^2*j^4,c^26*d^3*e^2*f^3*h^3*j^6,c^38*h^2*k,c^2*d^17*e^9*h^10*i^6*j*k,c^12*e^4*h^5*i^10,c^25*d^7*e^2*g^14*j,c^26*d^4*h^9*i^7*k,b*f^5*g*h^4*i^2*j^3*k^8,b*e^11*g^11*i^5,b*c*d^21*e^9*h^2*i^3*k^8,b*c*d^22*f^2*g^5*h^3*j,b*c^13*d^15*g^10*h^2*i^2,b*c^15*f^2*g^3*h*k^13,b^2*g^7*h^5*i^13,b^2*c^7*d^12*e^4*g^4*i^3*j^14,b^3*d^12*e^27*h,b^3*c^11*d^5*e^20*g^3*k^2,b^3*c^13*d^36*e^7*h^5,b^3*c^23*e^2*g^17,b^4*d^13*e^9*h^7*i^8*k^2,b^4*c^10*h^18*j^2,b^5*d^3*f^8*i^5*j^10*k,b^5*e^12*f^3*h^4*k^9,b^5*e^2*g^14*h^11*j^3,b^6*d^9*e^5*j^11*k^8,b^6*c^30*d^7*e^6*h*i^8,b^7*d^17*f^2*j^5*k^8,b^7*d*g^3*h^7*j^12,b^7*f^4*g^9*i^4*j^2*k^4,b^7*d^10*i^2*k^17,b^7*d^11*f^10*g^3*j^4,b^7*c^10*d^4*f^2*g^8*i*k^8,b^7*c^17*d^18*e^13*i^3*j,b^8*c^3*e^15*g*i^16,b^8*c^19*f^11*g^2*i^6,b^9*d^36*f*i^3*k^6,b^9*e^13*h^5*j^11,b^9*e^18*g^2*i^2*j*k^7,b^9*d*e^5*f^6*j^3*k^2,b^9*c^8*g*k^11,b^10*d^9*f^8*h^5*i^5*k^2,b^10*c^15*d^10*e^13*g^2*i^8,b^11*d^20*e*f^5*g^6,b^11*c^6*e^16*f^10*g^3*j,b^11*c^15*e^4*g^2*h^7*j^5,b^11*c^18*e^9*f^2*g^8*k^5,b^11*c^20*d^9*f^8*g^2,b^12*e^5*f^12*h^3*i^2,b^12*c^3*d^7*h^14,b^12*c^6*f^4*g^4*h^2*i^4*k^5,b^12*c^26*e^2*g*j^10*k^4,b^13*e^5*f*g^18*k^3,b^13*e^11*f^3*i^5*j^8,b^13*c^2*d^14*f^9*j^10,b^13*c^9*i^3*j^12*k,b^13*c^14*d^7*f*i^2*j^4*k^4,b^14*c*e^22*h^12,b^14*c^2*d^15*f^3*i^10*k^4,b^14*c^37*f^8*i^4*j,b^15*c^21*d^12*h*j^12,b^15*c^24*e^2*f^5*g^4*j^2,b^16*c^7*h^3*i^8*j^4,b^16*c^12*f^7*i^7,b^17*d^47*e^3*f^2,b^17*c*d^40*k^9,b^17*c^36*d^5*e^11*k^5,b^18*c^19*d^4*f^3*g*h^6*j^4,b^18*c^24*d^13*f*i^2*k^5,b^19*e^27*g^7,b^19*c^6*d^14*e^15*g^6,b^20*d^32*g^2*i^5*k^3,b^20*c^29*e^19*h^3,b^22*d^13*e^22*g^4*h^4*i,b^22*c^4*f*i^7*j^7*k^4,b^22*c^8*e^11*f^4*h^7*k^3,b^25*d^10*j^9,b^26*e^2*g*i^8*j*k^5,b^26*d^18*f^2*h^3*i^3*j^3,b^26*c^14*e^4*f^7*h*j^6,b^26*c^26*k^5,b^27*c^13*e^4*g^11*j*k^3,b^28*d^8*e^18*h*i*j^2*k^3,b^28*d^2*f^6*g^2*h*j,b^28*c*g^7*i^2*k^3,b^30*i^11*j^8,b^30*e^22*k^6,b^30*c*d^16*e^9*h^3*k,b^30*c^11*e^4*f^2*g^14,b^32*d^35*e^5*g^4*h^3,b^32*c^7*d^8*f*g^3*i^5*j^2,b^33*d^8*e^9*f^6*h^8,b^34*h^5*j^12,b^34*c^5*e^15*i^3*j,b^34*c^7*d^29*e^2*f^3*j^3,b^36*f^2*k^15,b^36*d^5*f^8*k^10,b^39*h^12*k,b^40*d^8*h*j^14,b^42*c^9*f*j^12,b^43*e*h*i^8*j^4,b^43*c^9*h^5*i^5*k^3,b^46*c^8*d^18*g^2*k^8,b^47*d^2*e^6*h^3*i^6*k^4,b^47*c^19*e^8*f*h^6,b^49*c^6*d^10*g^5*h^5*k^2,b^50*c^5*d^17*e^2*f^5,b^51*d^15*i^9*j,b^55*e^2*f^10*j,b^55*h^10*j^5,b^59*f^5*i^5*j^2,b^61*c^7*d^2*k^7,b^63*c^26*h^3*k^2,b^72*c^7*f^3*h*i^2*k,b^73*d^5*e^6*j^2*k^3,b^78*c^25*k,b^80*d^3*i^3,b^92*d^6*e*h^2,c^10*d^11*e^7*f^7*g*j^7*k,e^9*f^4*g^11*h^9,c*d^2*e^31*f^3*h*i*j^4,c^15*d^26*e^11*f*h^5,c^22*f^13*g^4*j*k^3,c^5*f*h^14*i^3*j^3,d^8*e^4*g^14*h^7*j^4,e^4*f^5*g*j^13*k^3,c^28*e*f^4*i^2*j^4*k^8,c^17*d^8*f^7*g^7*j^7*k,e^4*f^11*g^4*h*i^3*j^5,c^5*d^16*f^9*g^3*h^5*j*k,c*e^26*g^2*i^3*k^9,c^21*d^12*i^3*j*k^6,e^8*f^4*i^14*k^2,c^14*e^7*h^8*i^9*j,c^19*d^4*f^6*h*i^8,c*d^5*e^14*g^14*h*i^4*j^2,f^5*h^12*i^3*j^3*k^4,e^6*f^2*g^11*h^5*j^4*k^2,d^7*e^2*f*g^21*h^5*i,d^17*f*h*i^4*j^13*k,d^2*e^15*g^3*h^7*k^9,c^4*f^4*g^17*h^7,d*f^5*g^7*i*j^11,g^12*i^3*j^5*k^4,c^21*f^4*g^5*h^3*i^5*j^2,d^15*e^8*h*j^6*k^2,c^10*d^8*e*g^4*k^11,c^22*d^2*g^18*k^2,d^23*f*h^8*i^4*k^2,d^34*e^4*g^9*h*j,c^20*e^12*g^11*k^5,d^7*e^8*f^5*g^2*h^6*i,c^8*e*g^7*h^5*i^3*k^5,c^10*d^31*f^3*g*h^10,d^18*e^15*f^2*g^16,c^2*e^14*g*i^4*j^11,c^7*d^7*e^6*f^10*g*i^3*j^3*k^3,c^11*d^11*e^2*h*i^2*j^15*k,c^16*d^21*i*j^7*k^4,d^5*e^3*i^12*j^5,c^39*f*i^3*j^4,d^13*h^4*i^20,c^14*d^13*g^3*i^6,c^63*d^2*f^3*h,e^3*f^4*h^2*i^17,d^61*e^6*j^3,h^10*i*j^9*k^2,f^13*h^3*j*k^5,c^12*d^3*e^23*i^4*k,c^28*e*f^18*h*j^4*k,d^53*e^6*f*h^2*i^2,c^36*d^11*e^14*g^2,c^24*d^19*e^3*h^6*i^6,e^3*h^17*i*k^3,d^3*e^10*g^9*h^10*k,e^8*f^12*i*j^7*k,c^6*d^13*h^6*j^11*k^2,d^3*e^8*f*g^8*j^2*k^8,d^34*f^7*g^2*j^4*k^3,d^18*e^4*f^11*i^4*j^2,d^32*h^6*i^2*j^6,d^11*f^3*g^4*i^6*k^8,d^42*f^9*i*k^3,g^18*h*i^6*j^3,c^16*e^7*h^4*j^9,c^21*d^7*f^14*j,c^28*h^3*j^3*k^5,c^33*f^6*k^8,e^8*f^18*i^6,c^4*d^5*f^2*h^11*i^4*j^3,e^16*g^11*i^4*j^2,d^16*e^3*g^5*h^4*j^4,d^26*f^13*g^5,e^4*g^10*h^10*i^2*j^6,c^3*d^9*g^10*h^3*i*k^3,c^5*d^40*g^4*h^8,d^24*f*g*h^11*i^7,c^2*d^16*e*f^4*g^4*i*j^9*k,c^12*e^20*g^4*h^4*i^6,c^26*g^3*h^8*i^3,d^6*e^32*h^2*j^3,c*e^25*g^3*h*k^6,c*e^14*f^3*g^12*h^2*j^2,c^3*d^30*e^12*h^6*k,c^13*e^7*g^17*h,c^34*d^3*i*j^10,d^8*e*f^10*g^7*i^6*j,c^2*d^38*i^4*k^8,d^6*g^3*i^15*j^3,e^25*g^6*h^6*i^4,c*d^22*e^12*h^11,c^20*d*e^11*h^2*i^7*j^3*k,e*f^9*g^4*i*j^11,f*g^9*i^3*j^5*k^8,d^5*f^7*g^3*h*j^7*k^3,e^30*f^6*i^4,c^7*d^12*e^18*i^2*j^4,c^12*d^22*e^10*f^4*i*k^2,c^19*d^6*g^13*i*j^3,c^21*d^36*k^3,c^7*d^14*g^9*h^2*i^9,c^9*f^8*g^2*h*i^5*j^2*k^4,c^30*e^22*i^4*j,d^62*e*g^3*j,e^10*f^3*j^6*k^6,d^5*e^2*f^17*k^9,e^3*g*k^15,d^19*f*h^3*j^2*k^10,c^31*d^20*e^9*g^5,c^5*d^4*e^18*g^2*i^7,d^14*e^6*f^2*g^6*j*k^4,f^4*g^5*i^6*j^12*k,e^21*f^7*g^3*j^4,c^10*d^3*e*f^5*g^2*h*k^4,b*e^2*f^23*k^3,b*d*h^15*j^2*k,b*e^3*f*g^4*h^3*i^3*k^9,b^2*e^17*f^6*g^13,b^2*d^8*e^3*f^6*j^13,b^2*c^4*d*i*j^7*k^8,b^2*c^8*e^30*f*k^7,b^3*d^9*i^9*j*k^8,b^3*c^3*e^9*g^5*h^13,b^3*c^27*f^5*i^3*j^4*k^4,b^3*c^72*i^3,b^4*c^11*d^6*e^2*h^2*j^15,b^4*c^14*e^7*f^2*g^4*j^5*k^2,b^5*e^3*f^12*i^4*j^5,b^5*d^30*e*f^2*h^2*i^2*j^2*k^6,b^5*e^4*h^4*i^7*j^7,b^5*c^2*f^4*i^6*k^2,b^5*c^4*d^24*f^10*h^2*i*j,b^5*c^16*d^17*f^2*h*i^3*k^6,b^6*d^4*e^3*f*g^14*i,b^6*d^35*f^7*g^8*j^2,b^6*c^38*f^4*g^10,b^7*f^17*h*j*k^9,b^7*c^2*d^14*e^12*f^6,b^7*c^9*e^2*g*h^7*j^7,b^7*c^12*e^7*f^8*g^7*i^3,b^7*c^14*d^7*e^5*i*k^9,b^7*c^14*d^8*f^14*g,b^7*c^21*g^6*h^6*i*j,b^7*c^26*d*f^6*g^6,b^8*d^25*e^19*f^3*g*j,b^8*c^3*d^49*f*k^2,b^9*d^33*e^8*f^5*i^2,b^9*d^26*e*g^2*i^4*k^7,b^9*c^12*e^23*f^10,b^9*c^19*e^24*h^4,b^9*c^20*g*i^11*k^4,b^9*c^24*e^16*f^2*k^3,b^9*c^33*d^5*e^4*h^8*k^4,b^10*e^25*f^6*i^9,b^11*h*i^6*j^10*k^8,b^11*e^20*g^9*h^4*i^2,b^11*d^10*e^12*f*g^9*i*k,b^12*c^7*d^31*e^5*g^2*j^2,b^13*d^14*f^6*h^13,b^13*d^15*e^14*f^2*i^10,b^13*d^39*i^7,b^13*c^4*f^2*g^5*i^3*j^8*k^2,b^13*c^11*f^22*j^2,b^13*c^25*e^17*i^2*j^7,b^14*g^4*j^6*k^13,b^15*d^12*h^4*i^2*j^6*k^4,b^15*f*g^15*i^6*j^3,b^15*c^4*e^9*f^4*h^2*j^9,b^15*c^9*e*f^18*j*k^3,b^15*c^12*d^6*e^6*g^10*i^7,b^15*c^16*e^2*h*j^3*k^9,b^15*c^18*d*f^2*h^6*j^5*k^4,b^15*c^49*d^2*e^8*g*j,b^16*f^6*h^9*i^4*j^3,b^16*c^5*d^12*g^5*j^6*k^2,b^17*e^5*f^3*g^2*h^2*j^4,b^17*g^7*h*i*k^7,b^17*c^26*e^13*g^4*j*k^3,b^17*c^28*f^6*h^4*j^3,b^18*c^7*e*f^24,b^18*c^14*e^2*f^2*h^6*i^3*k^3,b^19*d^10*e^14*h^4*k^5,b^19*c*e^9*g^14*k,b^19*c^3*d^4*f^5*g^8*h^4,b^19*c^22*i*j^10*k^2,b^21*d^2*g^3*i^4*j^5,b^21*d^33*f^4*j^7,b^21*c*e^25*f*g*h^2,b^21*c^32*e^6*f^3*j^8,b^22*d^10*h^2*i^12,b^22*d^2*e^14*f^3*h^9,b^23*d^2*e^12*f^8*i*k^6,b^23*c^9*d^16*k^7,b^23*c^21*d^10*g^9,b^24*e^9*i^10*k^3,b^24*c^32*e^4*h^2*i*k^3,b^25*c^7*d^7*e^18*f^4*j^4,b^25*c^19*e^11*g^2*k,b^26*e^20*i^7,b^26*c^7*d^8*h^2*i^4*k,b^27*e^3*f^9*k^8,b^28*c^5*e^18*f^10*h,b^28*c^17*e^11*f^2*g^5*i,b^29*c^25*d^13*e^4*j^5,b^30*c^11*e^6*i^12,b^30*c^13*d^21*f*i^7,b^31*e^4*j^15,b^32*h^7*i^2*j^9,b^32*d^4*f^14*i*j*k,b^32*c^4*f^6*i^3*k^10,b^33*c^23*g*h^2*j^9,b^34*c^2*f^18,b^34*c^9*g^3*h^4*i*j*k,b^34*c^14*f^10*g^3*k^4,b^35*e^4*g^17*j^2,b^36*c^9*e^13*h^7*j^2,b^36*c^19*e^8*g^10*h^2,b^37*c^10*d^27*g^3*h^4*k,b^38*d^11*e^9*h^7,b^39*d^11*e^7*f^2*j^2*k^4,b^40*c^27*j^3*k,b^42*d^24*e^2*h*j^4,b^42*c^2*d^17*g*i^2,b^42*c^37*e^10*j,b^44*e^7*f^7*j^4*k^2,b^44*d^7*e^24*k^2,b^44*c^12*d*e^6*g^8,b^48*f^2*i^4*j^5*k^4,b^48*d^13*f^8*j^7,b^48*d^6*i*j*k^8,b^52*c^7*e^13*k^5,b^52*c^9*d^11*f^6,b^53*e^2*f^2*i^4*k^5,b^55*c^2*e^8*h^10,b^55*c^14*e*g*h^9,b^55*c^19*f^4*g*h^2*k^3,b^58*d^12*e^2*f^2*g^5*i^2,b^61*h^2*i*j*k^5,b^63*d^8*e^19*h*i^3,b^64*d^7*e^2*h^2*k^5,b^69*i^2*k^3,b^69*d^28*f^2*h^3,b^71*e^8*g^5,b^71*c^2*d^12*f^6*h,b^71*c^14*d^5*g^4*k,b^73*d^10*i^5*j^5,b^81*e^6*h^3*j^3,d^21*e^11*g^5*h^9*j,e^2*g^9*h*i^4*j^2*k^10,d^10*f^6*g^3*h^6*j^4*k^5,c^5*f^10*g^10*h^4*j^2,c^3*e^29*f^6*g^3*h^2*j*k^2,e^24*f^5*g*i^10,c^9*e^4*f^3*h^2*i^7*k^4,c^4*f^23*i*j^3,c^13*f^7*h^9*j^7,d^9*e^13*h^2*j^9*k^6,d*e^13*f^2*g^2*h^7*j,d^11*e^5*f^16*g^2*k^3,d^25*g*h^11*k^4,c^10*f^2*g^21*h^6*i,d^22*e^6*j^16,c^29*e^3*i^2*j^7*k^4,d^14*e^6*f^5*h*i^3*j^8,d^24*f^19*i^2,c^4*d^7*g^3*i^5*j^2*k^2,e^8*f*h^3*i^16,c^27*e^3*f^4*h^5*i^7,f^10*h^4*j^4*k^9,c^2*e^28*i^3*j*k^5,c^4*d^28*e^15*h^3*j^3,c^14*e^10*f*g^10*i^2,c^28*d^15*g^9*h^2,d^47*e^11*h^3*i,c^26*d^5*e^19*g^2*k^3,g*i^21*j,e^28*h^3*i^8,c^45*i^12,c*d^24*e^15*g^12*k,c^32*g^11*i^7*j,c^8*d^12*f^6*g^2*i^13*j,d^53*g*i^6,c^32*d^18*e^12*j^2,e^19*g^2*h^16*k,c^18*e^14*i^13*k,d^5*e^2*g^4*i^5*k^12,c^6*e^12*h^5*j^12,c^9*d^68*f^3*g^2,c^11*d*e^4*f^11*j^4*k^3,e*h^12*i^3*j^6,d^9*f^13*h^5*i^2*k^3,c^6*h^11*i^5*k^9,d^10*e^8*g^5*h^5*j^7,d^20*f^10*g^5*k,d^3*e*g^10*h^4*j*k^7,c^9*e^4*f^17*h^3,c^18*d^7*f*h^14,c^3*e^12*g^17*h^2*k,c^24*j^13*k^2,d^2*e^8*f^2*g^8*h^10*i^3,f^8*h^13*k^10,d^2*e^6*f^7*g^7*i^5*j^4,d^16*g^6*i^3*j^8,c^3*d^8*e^28*g^4*h^5,d^2*e^29*f^12*g*h,d^16*e^17*h^12,c^15*d^5*e^8*f^4*i^5*k^8,c^22*h^3*i^5*j^5,c^27*f^12*i^4,d^6*e^23*i*j^7*k^3,c^2*d^16*e^15*f*k^6,c^4*d^47*e^2*f^7*j*k,c^11*d^30*e^3*j^3*k^7,d^8*g^9*h^3*i^8,c^34*d^3*e^7*h^5*k^3,c^46*g^5*h^5,d^13*h^4*j^5*k^14,c^21*d^14*e^14*g^5*j*k,e^23*g^2*h*i^6,d^29*e^10*h^6*i*j,d^8*e^15*f^7*g^2*i^5,c^9*d^22*e^3*g*h^5*i^3*k,d^12*f^7*j^17,d^33*e^10*g^15,e^6*f^2*g^2*h^2*j^3*k^8,c^7*d^13*e^21*f^3*g^3*h^4,d^16*e^2*f*g^12*h^2*k^6,c^31*h^2*j^3*k^12,c*d^12*h*i^19,c^4*e^12*g^4*j^8*k^6,c^6*d^10*f^5*j^10*k,c^18*d^3*g^3*j^4*k^10,e^8*f^9*i^3*j^8,e*f*i^5*j^2*k^6,d^18*f^7*h^3*j^4*k,c^6*d^11*h^2*i^2*k^10,d^29*f^4*g^8*j^5,d^3*e^16*f^2*g*i^14,d^37*f^6*g^4*h^3*i^3,d^8*e^17*f^3*h*j^3*k^4,e^7*g*h^8*j^10,c^2*e^12*f^5*g^7*i^2,c^4*d*e^10*k^13,c^4*d^2*f^11*g*h*j^2,c^6*d^32*f*h^5*k^8,c^16*f^3*g^6*k^4,d^19*e^24*g*j^4*k^2,d^43*e^4*k^6,c^3*d^6*g^20*k^2,c^10*e^5*f^2*j^15,d^27*e^13*f^2*h*i*k^2,d^20*e^6*g^2*i^3*k^11,d^21*f^10*g^11*h,f^4*i^8*j^9,c^2*e^28*f^7*j,c^10*g*i^10*j^3*k^8,c^14*e^21*k^7,c^16*d^16*e^8*f^5*h^3*k^2,c^28*d^9*e*h^2*k^11,i^21*j*k^4,d*i^18*k^8,d^14*e^5*h^17*i,c^2*e^10*f*h^5*i^5*k^7,c^3*d^27*e^15*f^2*g^7,c^11*d^8*f*g^3*h^17,d^11*e^24*f^6*g^4,d^25*e^12*g^3*h^10,d^4*e^17*g^9*k^5,d^35*e^4*f^4*g^3*h^3,c^3*d^28*g^8*h^2*k^9,c^22*d^8*f^6*g^2*i^2*j^3,b*f^10*i^13*j,b*d^56*f*j^7,b*c^8*f^2*g^4*i^15*k^2,b*c^9*e^16*h^15,b*c^10*d^16*f^8*h*i^10,b^2*d^8*e^4*f^3*h^14*j^2*k^4,b^2*d*e^53*f^2,b^2*d^64*f^3*i*j,b^2*c^20*e^14*f^2*j^2,b^2*c^34*d^22*k^4,b^3*d*g^4*j*k^20,b^3*c^7*d^9*e^21*g^9*j^3,b^3*c^8*d^6*e^3*f^4*i^8,b^4*d^6*h^5*i*j^9*k^8,b^4*d^48*f^7,b^4*c^2*e^11*g^10*i^6*k^4,b^4*c^4*d^31*g^4*h^3*i*j,b^4*c^9*d^41*g^4*k^2,b^5*c^27*d^4*e^2*h^8*i^3,b^5*c^30*e^7*g^3*i^7*k^3,b^6*e^10*g^2*h^3*j^7*k^2,b^6*e^2*f^14*g^2*k^5,b^6*e^3*g^7*h^2*j*k^11,b^6*d^14*g*h^7*j^3*k^6,b^6*g^21*h^2*k^2,b^6*c^14*d^15*e^9*g^11*h,b^6*c^26*d^8*e^2*g^16*k^2,b^7*d^30*e^5*g^2*h^9*i^4,b^7*e^6*f^21*h*k,b^8*e*f^2*g^8*h^5*j,b^8*c^12*j^13*k^6,b^10*g^3*i^3*j^8*k^4,b^10*d^27*f*h*j^10,b^10*e^30*g*h^3*k^3,b^10*d^6*f^9*g^3*i^2*k^7,b^10*c*d^20*g^2*j^4*k^8,b^11*e^19*h^10*k^3,b^11*d^6*e^5*h^6*i*j^8*k^4,b^11*c^10*f^2*h*i^5*j^5,b^11*c^24*h^5*i^2*j*k^4,b^12*d^17*e^12*j^9*k^2,b^12*d^10*e^5*j^3*k^11,b^12*d^11*f^5*g^4*j^8,b^12*c^11*d^3*k^20,b^12*c^11*d^4*g^9*j^2*k^2,b^13*f*g^6*h*i^8,b^13*d^12*g^5*h^5*i^5*k^2,b^13*c^34*f^4*g^2*h^3,b^14*c^9*e^16*g^2*j*k^5,b^14*c^11*d^25*e^3*h*j^3,b^14*c^21*f*g^16,b^15*d^9*e^12*f^3*h^4*i*j,b^15*d^2*e^5*h^3*i^3*k^5,b^15*d^3*f^11*g^7*h^4,b^15*c^32*e^20*h*k,b^16*d^13*e^12*g^12*k^3,b^16*d^44*g^6*h,b^16*c^33*d^2*e^7*g^8*k^3,b^17*e^23*f^7*h^2,b^17*c^3*g^7*i^13*j,b^17*c^7*e^16*g^5*h,b^17*c^16*e^4*g^4*h^12,b^17*c^21*d^10*g^4*h^5*k^3,b^17*c^28*e^2*i^3*j^7,b^17*c^52*g^3*i^4,b^18*e^5*f*g*h^8*i^8,b^18*c^15*d^7*e^9*j^8,b^19*c*e^11*i^11*k^3,b^19*c^3*d^15*i^6*j^2,b^19*c^52*d^4*f*j,b^21*f^11*h*j^4*k^5,b^21*f^3*i^2*k^14,b^21*c^13*e^9*f^2*g*i^3,b^22*c^13*g*h^3*j^12,b^22*c^13*g^2*h*i^13*k,b^23*e^9*f*h^6*j^10,b^23*c*h^10*j^6,b^25*d^7*e^15*f^6*i*k^6,b^27*d^5*e^14*h^8*k,b^27*d^8*g^5*k^13,b^27*c^5*i^3*j^11,b^27*c^10*f^10*i^2*j^3*k,b^29*g^9*i^6*j^6,b^29*c^5*e^11*h^2*j^12,b^29*c^22*d^2*f^4*k^8,b^30*c^9*d^13*e^3*f*g^5*k^6,b^31*d^18*e^7*h^2*j^7,b^31*e^12*f^5*g^2*i^3*k^2,b^31*d^11*g*h*i*j*k^3,b^31*c^4*d^5*g^15*h,b^31*c^27*e^15*j^4,b^32*c^17*d^15*f^2*h^11,b^33*c^2*e^11*g^8,b^33*c^4*d^26*g^2*h^4*j,b^34*d^3*g^4*h^6*i^6,b^35*c*d^3*g^3*i^8*k^4,b^37*j^4*k^12,b^38*d^16*i^9,b^39*f^9*g*j^8,b^39*c*d^15*f^7*h*j^4*k,b^40*c^22*f^8*h*k^2,b^41*d^5*e^5*f^3*j^3*k^4,b^41*c^11*k^13,b^42*c^18*d^14*e^13*i,b^43*d^24*e*f^2*g^3*k^2,b^46*f^2*i^6*j^2*k^2,b^47*c^27*e^2*f^2*g*j^2,b^48*c*e^11*f^6*i^3,b^48*c^10*h^4*i*j^4,b^48*c^15*d^3*f^4,b^52*d^12*e^16*i*k,b^52*c^19*f*i^8*j,b^58*e^2*i*j*k^7,b^58*f*g^12,b^60*d^6*f^3*h^2*j,b^64*c^10*d^12*j^2,b^65*f^2*i^9,b^65*d^20*h^2*i^6,b^70*d^4*e^3*f^6*k^6,b^75*e*h^2*i*j^4*k,b^85*c*d^3*e^10,c^16*d^5*e^13*g^13*h*i*j^3,c^25*d^8*g^3*j*k^12,e^9*h^3*i^6*k^8,c^17*e^13*f*i*j^12*k,c^29*d^13*f^5*g^2*i^3,e^5*f^20*j^6*k^2,d^5*f^3*g^9*h^10*i*j^5*k,c^7*f*g*i^6*j^15*k,d^3*e^9*f*g^8*h^10*k^2,d^18*e^3*f^16*i*j^3,d*e^4*g^3*h*i^4*j^5*k^6,d^32*h^6*j^7*k,c^4*e^15*g^10*i*j^3,c^6*d^16*e^2*f^4*g^4*h^4*j^5,c^18*d^9*g^9*h^3*k^4,e^4*g^6*h^6*i^9,d^24*f^6*h^11*i^4,c^41*f^3*g^2*h^8,c^28*e^6*g^16*h,c^49*d^3*j^11,c^35*i^11*j^3*k^4,d^6*f^3*g^2*i^12*j^4,g^2*h^8*j^16*k,c^10*d^20*e^6*h^2*i^7,d^62*g^2*j^2,c^13*e^2*j*k^16,d^3*f^10*h^6*i*j*k^7,c^20*d^4*e^17*f*g*i^4,d^14*e^5*f^7*g^5*j^2*k^5,e^9*f^14*h^4*k,c^8*d*h^15*j^3*k^2,d^17*e^6*g*j^17,d^4*e^4*f*g^14*h^13,c^12*e^3*h^4*i^4*j^8,c^17*f^9*i^3*k^3,d^2*g^9*h^4*i^7*j^3,d^2*e^20*f^4*g^2*i^4*k^4,d^16*e^8*g*h^6*i^2*k^5,c^4*d^26*f^2*g*i*k^8,f*h^10*k^12,d^7*e^26*g^3*h^5*j^2,c^9*e^19*g^8*h^4,d^15*e^13*f^7*i^7*j,c^5*d^29*e*i^5*j^5,c^8*d^8*e^6*g^3*i^9*k^6,c^10*d^39*f^5*i^4*k,d^6*e^3*h^2*i^18*k^3,d^4*e^4*f^2*j^13*k^5,c^28*d^2*e^5*h^5*i^7*j^2,e^13*f^6*i^2*j^11*k,d^12*f^4*h^4*j^7*k^5,d^5*h^3*i*j*k^14,c^31*e*f*h*j^4*k^10,h^6*i^12*k^10,d^23*f*g^8*j^8*k^3,e^17*f^2*g^7*i*j^3*k^4,e^4*f^8*g*h^2*j^5,c^6*g^6*h*k^8,d^4*f^10*h^9*i^4,d^21*e^18*h^2*j*k^6,f*i^7*j^12*k^3,c^6*d^10*e^13*f^2*h^4*k^6,c*d^2*g^3*h^18*j,d^5*e^29*f^3*g^4,e^4*f^3*g^23,c^12*d^2*f^3*g^2*i*j^6*k,f^7*i^12*j^4,g^4*i^14*k^6,d^13*g^16*j^7,d^10*f^5*h^2*i^9*k,c^4*d^2*e^13*f^8*h^9,d^21*f^2*g^12*i^4*j,c^10*e^19*j^5*k^4,c^24*d^16*j*k^8,e^8*f*i^7*k^4,d*f^17*h*i^4*j^4,c^10*f^9*g^5*i^6,c^13*d^58*g^2*j^4*k,d^42*e^2*f^4*j^2,d^35*g^4*k^6,c^34*e^10*f*g*k^2,c^8*e^19*f^5*i^4,c^17*e^7*h^9*i^2*j,c^22*d^8*f^3*h^2*i*k^2,d^26*e^13*f^8*g^6,c^4*d^9*e^14*g^11*h^2*j^2,c^9*d^19*e^6*g^11,c^13*e^2*f^14*j*k^9,d^17*e^3*g^7*h^9*i^5,f^2*h^13*j^3*k^6,c^6*f^4*g^14*h^8*k^2,e^6*g^8*h^6*j^4*k^4,e^3*i^23*k^2,d^24*e^8*f*g*i^5*j^7,c^5*d^48*i^2*j^3,c^15*e^7*h^14*i^7,f*g^4*h^13*k^4,d^17*e^24*i^2*k^3,c^6*e^10*f^6*g*h^11*j,c^26*e^5*i^9,c^28*d^21*f^6*i^4,e^8*j^17,e*g^3*i^2*j^11*k^8,f^6*g^3*i*j^3*k^11,c^7*f*g^14*h^8*k^2,c^15*d^32*f^3*g^7*j,e^5*h^2*i^4*j^8*k^4,c^2*f^5*h^7*j^10,c^7*d^4*f^19*j^2*k^2,c^14*h^6*i*j^4*k^8,c^33*e^11*h*i^2*j^6,c^45*e^4*g^5*i^4,b*d^5*f^2*g^4*j^11,b*d^14*e^2*k^18,b*c*g^9*j^5*k^6,b*c^3*d^29*g^3*h^4*j^7*k,b^2*e*g^6*h^2*i^7*j^3*k^2,b^2*d^13*f^4*h^7*i^2*j^5,b^2*d^6*g^5*h^6*i^4*k^6,b^2*c^8*d^13*e^18*g*i^8*k^2,b^2*c^10*e^16*f^3*g^3*i*j^6,b^2*c^24*f*g^2*h^4*j^2*k^2,b^3*e^5*f^5*h^7*i^9,b^3*c^11*e^3*g^16*j^3,b^4*d^3*e^17*h^5*j^4,b^4*e^12*f^2*g^13*i^4*j,b^4*e^10*h^4*i^2*k^9,b^4*d^27*h^9*k^4,b^4*g^12*h^4*i,b^5*d*g^26,b^5*d^18*f^5*j^18,b^5*c^7*d^11*g^5*j^12,b^5*c^11*d^3*e^19*g^3*j^4,b^5*c^25*d^27*g^2*h^4*k^2,b^6*f*g^2*i^10*j^10,b^6*d^19*g*i^7*j^6,b^6*e^21*g^5*h^2*k^3,b^6*d^11*e^8*f^2*h^7,b^6*c^30*f^4*i*j^9,b^6*c^42*g^3*i^3*j^3*k^4,b^7*c^5*d*e^14*j^11*k^2,b^7*c^16*i^14*j,b^8*d^9*e^3*i^5*j^5*k^2,b^8*d^19*f^9*i^4*k^5,b^8*c^5*d^2*i^7*k^11,b^8*c^5*d^3*f^3*g^8*i^4*j^4,b^8*c^17*g^13*i^6*k^2,b^8*c^42*j^4*k^2,b^10*h*i*j*k^18,b^10*c^3*e^14*g*i^2*j^3,b^10*c^5*d^24*e*f^5*h*j^5,b^10*c^8*d^3*e^6*f^13*g*i,b^10*c^12*d^7*e^2*h^7*j^7,b^10*c^15*e^7*g^6*i^4*k^5,b^10*c^17*d^17,b^11*d*e^3*f*h^3*i^10,b^11*c^3*g^2*h^2*i^12*k^5,b^11*c^4*d^28*e*g^14,b^12*c^15*d^7*e^23*k^3,b^12*c^27*d*e^5*f*g^7,b^13*c^13*e^7*g^9*i^9,b^14*d^26*e^19*g^3*k,b^14*c^2*d^20*e*g^17,b^14*c^6*f^14*g^4*h^2*k,b^14*c^21*g^2*i^7*j^4,b^15*f^2*h^16*j,b^15*c^9*d^7*i^15,b^15*c^13*e^23*h^3*i^2,b^16*d^3*h^5*j^16,b^16*f^7*i*j^6*k^5,b^16*c^14*d^6*f^5*j^2*k^9,b^17*c*e^3*h^18*k^5,b^18*c^12*e*f*j*k^12,b^19*g^2*h^5*i^7*j^6,b^19*f^13*g^2*i^6,b^19*d^5*f^19*h^3*i,b^19*c^7*g*h^9*i^4*j^2,b^20*d^15*g*k^10,b^20*g^15*h^2*j^3,b^21*c^7*d^9*h^12*j^3,b^21*c^10*e*f^7*i*k^6,b^22*e^16*g^8*j^2*k,b^22*d^30*f^10*g^2,b^23*e^5*g^4*h^7*i^5*k,b^23*d^7*f^6*g^4*i^4*k^4,b^23*c^5*d^20*e*f*g*j^9*k^3,b^23*c^17*e^7*f^3*h^10*j,b^23*c^29*h^9*k,b^24*d^28*f^3*i^2*j^3*k^3,b^24*c^40*k^8,b^25*c^4*d^5*g^10*h^9,b^25*c^16*d*f^10*i^4,b^25*c^23*i^7*j^2*k^5,b^26*d^2*e^9*g^4*j^9,b^26*c^3*d^12*e*f^7*g^4*j,b^27*d^10*h*i^8*j^3,b^27*c^35*h^3*j^2,b^28*c^10*d^16*e^18*j^4*k,b^29*d^24*e^7*h^3*i^3*k,b^29*c^8*e^2*g^12*i^7,b^29*c^10*d^18*g^6*h^3*i^2,b^30*c*e^3*k^17,b^30*c*f^8*g^7*j^5,b^31*c^8*d^8*e^18*h,b^31*c^20*d^2*f*g^13*h,b^32*d^18*e^6*g^3*j*k^6,b^35*f^7*g^5*i^4*j^4,b^35*c^7*d^7*f^5*g^4*i*k,b^37*e^16*f^3*i^2*j^3,b^37*d^4*e^3*f^9*j^5,b^37*e^4*h^5*j^7*k,b^37*c^5*f*k^4,b^39*c^15*e^7*f^5*g^4,b^41*e^3*f^4*g^14,b^41*d^30*e*k^9,b^45*d^2*f^2*h^3*j^11,b^45*d^19*e^14*i^3,b^46*f*h^7*i^4*j^2*k^4,b^47*c^15*d^10*e^6*g^7*k^2,b^48*c^43*e^2*i*k,b^49*e^5*h^3*j^4,b^50*d^8*f^2*h^10,b^50*c^3*e^22*f*h^3*k,b^51*c^6*d^8*f^2*g^5*h^5,b^52*g^7*h^7*k^3,b^53*e^3*f^11*g*j*k,b^53*d^6*j^5*k^2,b^54*i^8*j^3,b^54*d^14*h^3*i^5*k^2,b^54*c^23*f^2*h*j^2,b^55*c^10*e^2*g^7*j^3,b^56*f*g^3*h*i^2,b^58*e^20,b^58*c^10*d^12*h^3*k^3,b^74*e^15*j^2,b^74*c^5*d^21*h*k,b^89*c^4*d^5*f^2,b^104*h^4,b^120*d^2*g*h^2,c*d*e^12*f^7*g*h^7*j^2*k,c^19*d^7*f^2*g^2*i^2*j^3*k^3,e^7*f^6*h^3*i^13*j,d^47*e^10*f^3*h^3,c^11*f*i^18*j^2*k,c^12*d^53*i^3*k,d^5*e*f^5*g^3*i^2*k^13,d^10*e^7*f*g^4*h^5*j^8,c*d^20*f^15*g^4*k^2,c^31*e^4*g^2*h^9*k^4,c^6*g^12*h^9*i^2*k^2,c^14*d^16*g^5*j^9*k,e^2*g^2*h*i^11*j^7,c^6*d^16*e^16*f*h^12,c^12*d^8*f^2*g^8*h^3*i^5*j,d^56*e^5*g^2*h*j^5,c^10*e^22*g*h*i^3,c^24*d^22*e^2*h^5*k^2,c^4*f*g^6*i^21,e^9*g^14*h^14,c^7*f^6*i^2*j^3*k^7,c^31*f^8*g^5*k^5,c^14*g*h^14*i^5*k^2,d^20*e^5*g*k^12,d^21*f^15*g^10*h,c*d^4*g^15*h^7,d^11*f^6*g^9*j^11,c^14*d^14*e^4*h^17,d*e^31*g^3*h^6*j^5,d^11*e^23*f^11*g^3,c*d^25*e^11*g^2*h^10*j,c^32*g*h*j^12,d^2*e^11*g^3*i^8*k^10,d^33*f^2*i^3*k^5,c^18*e^10*h^6*i^6*j^5,c^5*d^7*e^17*g^4*i*j^6,c^10*d^17*e^9*f^6*g^4,d^15*e^6*h^6*i^9,e^9*f^5*g*h^3*j^8*k^3,e^2*g^6*h^2*j^2*k^12,f^7*h^10*i^3*j^2*k^3,c^3*e^17*g^7*h^4*i^6,c^6*e^13*f*g^13*k^6,g^3*h^19*j^4,d^6*f^9*g^3*h^12*k,e^34*g^4*h*j^2*k^4,c^2*g^2*j^9*k^5,d^4*f^2*h^3*i^8*j^3*k^5,d^15*g^12*i^3*j^4*k^3,c^2*d^17*e^11*f^2*j^10*k^3,e^13*h*i^6*j^2*k^8,f^6*g^5*h*i^5*j,c^12*g^10*i^7*k^8,c^33*d^19*e^12*i^6,d^36*e^7*f*j^5*k,e^2*f^3*g^19*j^2,d^29*g^4*k^10,c*d^23*f*g^18*k,c^24*e^15*g*j^2*k^6,d^44*f^3*h^6*i^4*k,e^24*f^2*i^3*k^2,c^12*d^2*e^4*h^3*k^6,c^12*d^3*f^16*g^6*h^4*j,d^13*e^11*g^11*k^4,c*d^44*f^3*g^5*h,d^21*g^7*h^3*i^3*k^4,c^31*e^3*g^3*h^12*k,c^43*e*f^4*j^8*k,c^5*e^12*h^15*i^6,d^5*e^11*f^3*g^14*h,c^18*d^15*f^3*i^3*j^3,c^30*d^8*i^5*k^8,e^6*f^7*i^14*j,c^4*i^16*k^4,c^5*d^26*e^4*g^7*j^4,d^24*e*g^3*h^4*i^7*j^6,d^34*f^2*g^3*i^6,k^24,c^4*h^7*j^7*k^12,c^16*d^5*e^26*i*j^2*k^2,c^42*d^23*f^5,e^4*g^4*h*j^14*k,d^7*f*h^8*i*j^8*k,d^17*f^15*h*k^4,c^5*d^48*e^2*i*k^4,c^7*f^20*j^3,c^10*d*e^5*g^15*h*i^6,c^14*e*g^2*h^5*j^5*k^6,c^15*d^11*g^15*i^5,c^40*d^13*e^17*f,f^8*h^13*i^3*j^5,c^2*h^12*i^5*k^6,c^3*d^7*f*g^10*h^3*j^8,g^12*h^5*k^4,c^15*d^32*e^13*g^2,c^2*e^6*f^2*h^15*k^4,g^2*i^9*j^13,d^5*e^13*h^8*j*k^2,c*e^6*g^4*h^7*k^11,c^11*d^61*i^4,c^20*f*j^12,d^13*e^2*f*h^15*i*k^2,d^3*g^32,c^8*f^3*h^6*i^8*j^6,d^34*h^4*j^10*k,g^8*i^3*j^7,e^24*f^3*g^6*h^6,d^7*f^14*g^8*i^2,c^32*e^3*h*j^7*k^6,c*d^21*f^3*g*h^17,c^8*d^7*f^5*h^9*i*j^7,e^19*g*i*j^6,d^18*e^6*f^2*h^2*j^8,e^11*f^10*g*k^3,d^28*f^16,c^2*d*e^7*h^8*j^10*k,c^7*d^11*h*j^2*k^4,c^17*g^20*i^2,c^19*d^5*f^2*g^14*h*j,e^8*h^4*i^9,d^26*f^4*h^9*i^4*j^2,e*g^2*h^3*i^11*k^9,d^19*h^8*i^6*k^4,c^30*e^3*f*h^6,b*d^30*g^10*h*i*k^2,b*f^7*h^5*j^4*k^11,b*d^8*e^35*j^7,b*c^5*d*e^28*j*k^7,b*c^5*d^2*e^17*f^6*g^2*j^6,b*c^17*e^10*g^7,b^2*e^11*f^16*g^4*i^5,b^2*c^3*e^12*g^9*h*i^8*k^3,b^2*c^5*d^3*g^3*h^6*i^3,b^3*d^20*e^24*g^3*k^5,b^3*d^14*e^6*g^17,b^3*e^12*i^4*j^13,b^3*c^11*e^5*g^2*i^6*j^7*k^2,b^3*c^13*d^24*i*j^9,b^3*c^16*d^3*f^5*g^2*i^5*k^5,b^3*c^60*j^6*k^2,b^4*h^17*j^4*k^2,b^4*d*i^14*j*k^2,b^4*c^3*e^28*h^4*i*k,b^4*c^8*d^3*e^20*f^10*k^4,b^4*c^24*d^3*e^14*i^4*j^7*k^2,b^5*d^3*e^16*f^2*h^3*k^12,b^5*f^4*j^9*k^9,b^5*c^4*f^2*j^5*k^13,b^5*c^35*d*g^8*j,b^6*d^22*e^10*i^7*j^2,b^6*c^11*d^16*f^3*i^6*j,b^6*c^23*d^9*g^4*i^8,b^6*c^58*g*i^2,b^6*c^72*h,b^7*d^43*e^9*f^6*i*k,b^7*e^3*h^4*j^17,b^7*d^57*k^2,b^8*g*h^10*i^3*j^5*k^4,b^8*c^9*d^6*e^21*i^4,b^8*c^21*e^14*i^6*k^3,b^8*c^33*g^11*i^5,b^9*d^9*e^2*g*k^14,b^9*c^10*d^41*e^8*g^5,b^9*c^26*k^14,b^10*d^3*e*h^13*j^6*k^2,b^10*d^49*g*h^2*i^4,b^10*e^6*f^4*h*k^10,b^10*c^2*d^13*f^10*h^6*k^5,b^10*c^7*g^8*h^8*j^3,b^10*c^33*d^14*e^12*f,b^10*c^45*d^7*e^5*g^3*k,b^11*d^24*f^7*g^2*k^3,b^11*c^8*d*g^21*h^5,b^12*d*e^2*f^3*g^4*h*i^3*k^8,b^12*e^24*f^16,b^12*c^7*e^12*h^11*j^4,b^12*c^8*d^5*f^11*i^5*j^4,b^12*c^10*e^17*f^8*g*k^4,b^12*c^12*e^4*f^14*h^4,b^13*d^22*i*j^6*k^7,b^14*d^6*e^8*g^5*h^11,b^14*c*e^7*h^2*i^4*j^11,b^14*c^6*f^7*i^3*j^3*k^3,b^15*d^6*e^6*f^4*g^4*j^4*k,b^15*c^2*d^20*g^3*j^8*k^2,b^15*c^5*g^9*k^10,b^15*c^17*e^5*g^3*h^15,b^16*d^4*e^3*h^2*i^7*j^6,b^16*d^14*f^6*i^6*k,b^16*c^25*h^4*j^5,b^16*c^30*d^3*f^9*k,b^18*d^12*g^6*h^4*i,b^18*c^5*d^22*f^8*g^6,b^19*f^5*g^7*h*j^8*k^3,b^20*d^2*e^23*h^2,b^20*c^10*e^5*g^13*h^2,b^20*c^22*g^18*h,b^20*c^34*f^6*i^5*j^2,b^22*c^46*e^5*k^6,b^24*f^4*g^5*i^3*j^7*k,b^24*d*f^2*g^4*h*j^3*k^5,b^24*c^16*d^8*e^9*i^4*k,b^26*e*j^2*k^8,b^26*d^22*f^4*h^4*j^4*k^3,b^28*d^10*g^7*i*k^6,b^28*c^5*e^12*f^2*g^4*k^2,b^28*c^7*d^6*f^8*h^2*j^2,b^28*c^19*g^3*h*k^6,b^29*e^8*f^12*h^5*i,b^30*c*d^4*f*i*j^9*k,b^30*c^13*i^3*j^3*k^10,b^31*d^12*f^3*i^9*j^3*k,b^32*d^23*g^3*i^4*j^4,b^32*c^11*e^5*f^5*j^7,b^33*f^7*i^6*j,b^33*c^11*g*i^8*k^4,b^34*c^23*d^2*e^14*j^2*k^2,b^35*c^11*d^10*e^3*f*i*k^2,b^35*c^23*d^4*f^9*g^2,b^36*d^21*e^10*g^2,b^36*c^47*d^10*e^5*f,b^39*d^2*h^11*j*k^4,b^39*d^13*e^10*f^4*g^5*i,b^40*d^2*e*g^5*h^6*j*k^2,b^40*c^4*d^34*e^3*f*j^4,b^42*d^7*e^3*j^14,b^42*j^8*k^6,b^43*c^13*h^2*j^5*k^2,b^44*c^2*d^15*f^2*g*j^8,b^45*g^3*h^2*i,b^47*d^13*e^12*h^5*j,b^49*d^5*f*i^4*j^7,b^49*c^6*g^4*i^6*j*k^2,b^50*e^5*h^9*i*k,b^51*c^6*d^19*j^2,b^52*d^3*e^7*h*i^10,b^53*c^16*d^3*e^9,b^54*c^2*e^11*i^9,b^54*c^4*d^11*f*h^3*i^4,b^63*d*e^12*f^2*k^4,b^64*c^18*e^4*h^7*k,b^66*d^7*g*h^7,b^67*c^4*d^7*i*k^6,b^70*d^20*h*i^2,b^72*f^2*i*k^4,b^97*i^2,d^4*e^10*f^2*g^19*i,c^13*d^6*f^8*g*i^9*j^5,c^12*d^31*e^12*g^7*j,c^2*d^2*g^8*h^4*i^4*j^4,e^27*g*h^2*i^2*j^3*k^2,g^6*i^20*j^3,d^48*g^6*i^5*j,e^5*f^3*i*j^6*k^11,c^18*d^21*f^2*h^5*i^7,e*f^2*g^9*i^4*j*k^9,c^9*e^3*f^13*h^2*j^6,c^21*f^5*g^5*h*k^9,d^15*f^12*g^10*h^2*j,d^5*e^28*f^8*g^3*k,c^22*g*h^2*j^15,c^27*d^2*f^8*g*j^7*k^2,c*f^12*i^9*j^5,d^27*e^3*i^2*j^3*k^9,d^11*g^11*h^2*i^2*j^10,c^13*e^7*f^6*i^4*k^5,c^25*f^14*g^4*i^3,d*e^22*g^4*j^9,d^11*e^14*f^3*g^4*j*k^3,d^9*e^11*h^7*i^8*j^3,d^19*e^3*f^5*i^7*k^3,c^7*d^17*e^2*g^6*h^9*i^2,f^6*g^3*h^13*k^5,e^7*f^5*j^18,g^2*j^12*k^9,c^28*d*e^11*f^2*g^12*i,c^15*e^4*f^4*h^2*i*j^9*k^5,c^60*e^3*g^4*i*j,c^4*d^5*f^7*g^3*j^12,c^16*g^8*j^6*k^7,f^25*i*j^2,f^3*g^5*h^2*i^4*j^4*k^3,c^4*d^6*f*g^4*h^6*i*k^7,d^3*e^16*f^5*h^5*j^5*k,e^11*f^7*g^12*i*j^2,c^2*e^9*h^4*k^10,c*d*f^2*g^25,d^22*e^12*f^4*g^2*h^5,f^6*g*i^7*j^11,c^12*e^20*f*g^4*h^2*k^4,c^14*d^11*e^7*f^7*h^7,c^8*d^9*e^2*i^2*j^6*k^3,c^20*d^2*i^4*k^12,e^4*i^15*k^8,c^7*e^15*g*h^19,d^28*g^3*i^5*j*k,c^32*d^17*f^2*k,c^4*e^15*g^2*i^12*k^2,d^42*e^7*k^8,d^43*f^9*g^4*h*j,c^5*d^5*e^2*g^15*i^4*k^4,c^7*d^36*f*g^9,f^19*h^7*i*k^4,c^30*d^9*f^8*g^2*h^5*i,e*f^16*g^7*j*k^2,c^5*d^26*e^18*g^2*k^2,c^36*g*i^4*j^5,d^10*e^27*f*h*i^8,c^2*e^6*f*g^5*h^11*i*k^4,c^24*d^7*f*i^12,c^11*d^18*g^11*i^7,d^7*e^7*h^16*k^6,g^8*i^2*j^10*k,d^15*g*h^18*k^4,d^16*e^13*i^13,d*e^4*f^2*h^10*j^10*k,c^8*f^4*g*h^5*i^4*j^7,c^10*h^9*i^2*j^4*k^10,d^12*e^11*h^3*j^11,e^16*f^7*g*j*k^7,d^5*e^4*h^2*j^5*k^8,f^15*g^15,c^2*d^15*f^5*k^11,c^9*g^5*h*k^17,c^9*g^14*h^2*j^4,d^20*f*h^10*i^3*j^5,c^13*e^7*f^20*h,c^25*f^12*k^7,d^24*g^10*h^2*k^6,c^7*e^15*g^7*j^3*k^2,c^8*h^14*i^7*k^4,c^21*d^13*g^6*h^4*k^6,e^24*g^4*h^3*i^5*j,d^4*e^11*f^5*h^8*j^3,d^14*e^3*f^19*h,e^4*g^3*h^7*i^2*k^2,d^28*f^3*h^12,d^7*f^11*g^3*i*k^5,d^8*e^11*g^17,d^39*g^11*h^5,d^2*f^2*g^31,c^3*d^18*j^12*k,c^6*e^2*f^2*g^2*i^4*j^2*k^9,d^2*e^6*i^11*j^10,d^18*e^20*h^10,c^31*d*f^15*i*j,c^38*i^4*j^3*k^6,c^13*d^2*e^8*g^3*j^10,c^18*d^12*f^12*g^3*j^2,c*d^10*h*i^5*j^4,c^48*e^5*g*i*j,c^50*f^3*h^3*j^3,c^22*e^14*f*h*i^12,f^13*h^5*j^6*k^2,d^3*f^27*k^5,f^5*g*h^4*i*k^11,e^26*i^3*j^3,c^11*e^8*f^4*g^6*i^2*j^2,c^13*d^24*e^6*h^3*k^2,c^23*e*g^11*i^4,c^25*d^18*f^2*g^5*h^3,d^2*f^6*g^2*h^6*i^10,d^35*e^13*g^5,d^43*e^2*g*h^3*i^3,d^7*f^7*h^7*j*k^9,c^4*d*f^15*g^2*h^7,c^23*d^8*e^17*h,c^35*d*e^10*g^3*k^5,d^18*e^5*f^4*g^2*j^2*k^7,i^21*j^3,c^9*e^19*h^3*i^10*k,c^11*d^16*e^6*h^8*i^5,b*e^7*g^4*h^2*i^2*k^12,b*f^10*i^7*j^11,b*h^5*i^5*j^15*k,b*f^2*g^3*i^9*j^5*k^9,b*f^8*i^4*j^7*k^4,b*d^27*e^13*g^8*h,b*e^22*f^5*g*k^8,b*c^2*e^9*f^11*h^5*k^3,b^2*c^5*d^14*e*i^16,b^3*e^13*g^5*h^12*j^2,b^3*e^4*f^4*i^2*j^6*k^7,b^3*c*f^18*i*k^10,b^3*c^3*g^4*h^3*i^2*j^13,b^3*c^8*i^4*k^16,b^3*c^8*f^12*g^4*i*j^5,b^3*c^10*d^13*f^2*j^2*k^11,b^3*c^22*d^7*f^10*g^3*j*k^2,b^3*c^27*e^23*i^5*j^2,b^4*e^11*f*g^4*j^7*k^5,b^4*d^31*f^7*j^9,b^4*d^24*g^3*j^3*k^9,b^4*c^15*e^12*i^13,b^5*d^8*f^3*i^5*j*k^5,b^5*d^32*f*i^2*k^9,b^5*c*e^23*h*j^12,b^5*c^6*e^15*f^8*j^4*k,b^5*c^8*d^4*e^2*f^14*j^6,b^5*c^15*e^3*h^5*j^8*k^2,b^5*c^18*e^8*g^2*i*k^10,b^5*c^20*f^6*k^5,b^6*c^3*h^12*i^5*j^2*k^2,b^6*c^6*f^2*i^9*k^10,b^7*e^29*i^3*k^8,b^7*e^11*f^7*g^7*i^2,b^7*d^22*e^9*k^12,b^7*d^6*g^6*h^5*j^3,b^8*c^13*e^3*h^10*i^2,b^8*c^18*f^12*h^3*i,b^9*e^28*h^3*j^2*k^3,b^9*d^6*e^20*f*k^6,b^9*d^37*e^7*f^7*h*k,b^9*e^10*g^13*h^3*j,b^9*c^7*d^30*k^10,b^9*c^38*d^3*f*i*j*k^7,b^10*g^9*h^10*i^5,b^11*d^19*g^2*i^3*j^10,b^11*f^2*g^8*i^7*k,b^11*c*d^29*f^8*g^2*i^2*j^2,b^12*g^4*h*i^16*j^2,b^12*e^20*f^7*g^2*h*i^2,b^12*d^12*e^8*g*h^12*k,b^12*c^31*h^3*i^7*j,b^13*d^19*e^13*f^4*j,b^13*c^6*d^2*e^14*i^3*j^3*k^5,b^13*c^8*d^33*e*h*j^5,b^13*c^11*d^12*e^6*i^2*k^8,b^13*c^13*d^43*f^2*k^3,b^14*d^11*g^5*h^4*i^8*j^2,b^14*c^31*d^6*e^5*h^6*j^2,b^14*c^43*f^3*g*h^6*j,b^15*f^9*k^15,b^15*c^30*d^10*e^5*g^6*k^3,b^16*c^4*e^14*g^3*h*i^8,b^16*c^9*d^4*e^6*f^2*g^3*i^7*k^2,b^16*c^41*e^16*h^4,b^17*d^4*e^2*g^7*k^10,b^17*d^8*f^2*i^2*j^13*k^2,b^17*e^4*f^5*h^3*j^5*k,b^18*d^8*f^7*h^10*k,b^18*c^16*d^9*e^12*g^4*h^4,b^19*d^19*f^4*g^8*h^3,b^20*d^6*h*i^8*j^6*k^5,b^20*c^10*d^7*e^7*i^11*j^2,b^21*d^9*e^29*g*h*k^2,b^21*c*e^10*f^2*j^10,b^21*c^15*d^6*j^6*k^3,b^22*f^4*i^5*j^4,b^22*c*g*i^7*k^8,b^22*c^3*d^14*f^2*h^3*i^2*k^3,b^23*d^25*g^9*j*k,b^24*c*d^4*e^8*h*k^6,b^24*c^13*f^6*g^2*h,b^25*c^37*d^4*e^10*k^4,b^26*d^23*e^4*h*i^3*k^4,b^26*c^7*i^10*j^5*k,b^26*c^11*e^19*f^2,b^26*c^25*d^12*h^3*k^4,b^28*d^31*g^4*h^3*k^2,b^28*c^7*d^17*e*f*i^3*j^6,b^28*c^31*d^4*f*g^3*i^4,b^30*c^29*e^5*i^2*k^2,b^31*d^4*f^3*j^3*k^13,b^32*c^53*d^2*g^2,b^33*d^9*g*h*j^11,b^34*d^3*f^17*j,b^34*e*g^3*h^3*j^3*k^4,b^34*c^13*e^16*h*j^6,b^36*c^2*g^9*h^5*k^2,b^36*c^9*j^15,b^37*c*d*f^10*g^3*j^8,b^38*i^3*j^10,b^38*e^28*f*h^4*j^2,b^38*c^2*d^15*e^8*h^8,b^39*c^19*h*i^7*j*k^2,b^40*d^13*e^3*j^5*k^4,b^40*c^8*d^7*g^5*j^4,b^41*d^15*f^2*g*h^6*i^5,b^42*d^32*g*i*k^2,b^42*c^6*e^14*j^3,b^43*d^5*e^3*h^4*i^3,b^45*c^16*e^7*g^6*h*i^2*k,b^45*c^18*d^13*h^6,b^46*e^2*f^8*g^5*h*k^3,b^47*c^12*d^11*i^8,b^49*c^22*g^2*i^5,b^50*g^6*h*j^9*k^2,b^51*h^6*j^6,b^51*c*f^10*k,b^55*d*e^5*g*h^8*k^3,b^55*d^11*f^3*g*h*k^6,b^58*c^6*d^16*e*f^4*g*j,b^59*d^14*h^2*i*j^3,b^61*e^9*g^4*j,b^63*d^6*f^3*i^8,b^67*c^10*d^11*f^2*g*h*k^3,b^69*d^12*e*i*k^6,b^69*c^8*d*k^6,b^76*c^24*i^2*k^2,b^86*i*j^3,b^88*c*d^2*h^2,d^9*g^4*i^6*j^14,c^8*d^15*e^5*h^6*i^6*j,c^6*g^2*h^19*j^5,c^17*f^5*g*j^10*k^6,d^15*f^4*g^11*j^5*k^4,c^15*f^11*g^4*h*i^2*j^2,c^4*d^29*g^3*k^11,d^13*e^8*f^2*h*i^6*k^7,c^3*d^24*g^2*h^4*i^4*j^7,e^4*f^22*j^5*k,c^25*d*e^4*g^14*h*i^3,c^4*f^2*g^11*h^5*j*k^5,f^3*g*i^6*j^14,d^3*e^7*i*j^9*k^7,c^3*d^13*f^11*j*k^10,c^10*f^5*g^7*j^8,c^8*e^18*f*j^7*k,e^7*f^3*h^4*i^6*j*k,c^8*g*h^3*i^8*k^10,d^6*e^14*g^10*i*j^2,d^37*e*f^6*g^4*h^2*j^4,d^30*g^9*h*k^3,c^32*e^9*f^3*g^6*j,c^20*d^3*f^5*g^2*h^6,d^20*e^23*g^2*k^6,d^51*e^10*h^4*k,c^7*d^14*e^5*f^2*g^16,c^31*d^3*f^10*g*i^2*k^6,c^14*d*i^11*j^2*k^3,c*d^12*g^11*i^6*j^3*k,c^3*d^43*f*g^5*i*j^5,d^12*e^23*g^5*h^4*i,c^73*f^5,c*d^33*e^16*j^4,c^3*f^15*g*i^2*j^2*k^4,c^12*h^10*j^6*k^5,d^9*e*f^2*k^15,c^13*d^49*f*h^2*i,e^9*g^3*h^8*i*k^6,d^22*h^13*j^2*k,d*e*f^8*g^3*h*k^9,f^2*g^17*h^8,g^31*h,f*i^11*k^13,c^9*g^9*h^10*k^4,c^16*e^6*h^2*i*j^12*k,c^21*f^12*j^4*k^4,d^14*f^6*h^18*i,c^3*e^13*g^3*j^13,c^8*d^6*e^5*f^9*g^3*j^5*k^2,d^4*e^2*h^2*i^4*j^7,d^14*f^11*i^3*k^2,c^3*g^4*h*i^6*j*k^8,c^5*d^28*h^6*i*j^3*k^3,c^28*d*f^2*h^11*i^3,c^3*d^18*e^11*h^4*j^2*k^6,c^8*d^28*e^3*f^5*k^9,c^13*e^6*g^11*i^3*k^2,c^15*d^12*g^5*h^4*j,e^2*f^3*g^2*h^7*i^9,c^3*d^20*f*g*h^11*i^6,d^13*e^27*g^2*i^5*j,d^37*e^7*g*h^4*i^2*k^4,e^2*g^21*i^6,d^31*g^15*h^4*i,f^8*g*i^11*j^4,c^13*d^2*e^22*h^2,c^25*e^15*g^3*h*k^9,c^58*j^7*k,c*d^10*e^11*h^9*i^4,c^32*i^11*j^5,d^21*e^18*g^8*h^2,c^7*d^2*g^3*i^14,c^11*e^22*f*g*h^7*i,c^25*d^18*e^2*h^11,d^50*i^5*j^4,g^4*h^4*i*j^16,f^9*g^4*j^8*k^2,d^7*h*j^5*k^15,c^31*d^8*e^8*i*j*k^2,c^5*e^17*i^12,d^2*e^5*i^4*j^4*k^9,e^20*f^5*j^7*k^5,c^8*d^58*g^3,c^10*f^3*j^3*k^9,e^9*f^7*h^2*i^6*j*k^5,f^5*h^6*i^3*k^9,c^29*e^8*g^2*i^6,d^17*e^3*f^10*g*j^4,e^4*g^6*h^6*j^6*k^4,d^10*f^2*g^6*k^7,c^34*f^5*g^2*h*k^7,e^7*f^17*h^5*j,c*f^31,c^3*e^8*h^11*i*j^3,c^5*d^4*f*h^16*j^5,c^8*f^9*h^4*k^3,c^17*h^15*k^4,e^25*k^10,d^25*f^12*g^7*h^2,c^16*d^4*f^6*j^10*k^2,c^28*j^4*k^11,d^23*g^3*h^16,d^2*f^8*g^9*h^4*i^3*k,e^2*f^10*i^9*j^8,c^2*f^2*i^11*j^2*k^7,c^3*d^15*f^3*g^6*j^11,c^4*d^12*f^8*i^6*j^4*k^2,c^16*d^5*i^8*k^11,e^9*f^7*g^3*i^4*j^9,d^13*g^2*i^2*j^13,e^2*g^8*i^6*j^3*k^5,d^23*f^5*g^2*i*j^5,d^15*e^23*f^8,c^4*d^29*e^11*h^11*j,c^35*d^2*h^2*j^12,b*f*g^4*i^14*k^5,b*d^16*e^5*f^2*g*h^6*k^8,b*c^2*g^15*h^13,b*c^2*d^2*e^11*f^4*i^4*j^3*k^5,b*c^12*e^6*f^6*g*i^8*k,b*c^14*f^12*i^3*j^2,b*c^26*f^4*i^5*k^5,b^2*d^3*e^26*j^12,b^2*e^3*h^7*i^17*j^2,b^2*e^19*i^2*j^6*k^9,b^2*d^27*e^6*h^2*j^8*k^4,b^2*c*d^6*e^11*i*k^12,b^2*c*d^7*f^9*g^9*j^3,b^2*c^3*d^37*k^7,b^2*c^8*e*g^14*i*j^5,b^2*c^13*f*g^14*k^3,b^3*d^21*e^7*f^3*i^7*k^3,b^3*f^3*h^8*j^6*k^9,b^3*c^12*e^22*f^8*i*j,b^3*c^31*e^5*g^7*h^2*i^3*j^2,b^4*e^29*f^5*g^2*j^2,b^4*c^13*d^21*e^9*f^3*g*k,b^4*c^20*d^5*g^15*j^5,b^5*d^5*e^18*f^7*i^4,b^5*d^19*e^6*h^7*i^2,b^5*e^11*g^3*i^6*k^6,b^5*c*d^29*f^5*i*k,b^5*c^8*d^12*g^2*h^6*i^4*k^7,b^5*c^8*d^13*g^11*h^7*i,b^5*c^10*f^7*g^4*h^6*j^4*k^3,b^6*e^9*f^2*h^4*j^8*k^5,b^6*d^4*e*f^16*k^8,b^6*e^2*g^3*h^3*j^2*k^14,b^7*d^2*f^4*h^11*j^2*k^5,b^7*c^6*d^3*e^17*g^4*h^5,b^7*c^11*d^13*e^9*f^9*g^4,b^7*c^30*e^8*f^3*i^6*j^2*k,b^8*d^13*e^5*f*g^8*h^4*j^3*k^3,b^8*d^11*e^6*h^12*i^7,b^8*f*j*k^21,b^8*c^11*d^2*f^4*g^4*h^6*j^2*k^3,b^8*c^17*d^3*e^15*g^3*i*j^3,b^9*d^10*f^6*h^13*k^3,b^9*c^5*d^11*e^4*f^2*i^9,b^9*c^54*f^5,b^10*c^5*j^9*k^7,b^11*e^4*f*i^4*j^7*k^3,b^11*d^15*f^7*h^5*j^9,b^11*c^24*d^9*e^3*g^5*i^4,b^12*c^15*e^6*f*g^6*j^7*k,b^13*d^3*g^6*i^7*j^2*k,b^13*e^15*f^5*g^3*i*j^5,b^13*e^3*g^2*h^9*j^9,b^13*c^3*f^3*g^2*h^2*j*k,b^14*d^3*e^2*g^16*j^2,b^15*d^11*f^2*g^12*h^2*i,b^15*i^9*j^8*k^5,b^15*c*e^24*k^4,b^15*c^25*g^14*k^4,b^17*d*e^20*g^5*k^2,b^17*g^24*k^2,b^17*c^9*d^5*f^6*i*j^8,b^17*c^21*g^3*i^3*j^2*k^3,b^18*f^2*i^14,b^18*e^24*f^5*h^5*i,b^18*c^9*d^6*h^2*i^11*k^3,b^19*c^7*e^17*f^2*j^7,b^19*c^19*e^10*i*j*k^6,b^19*c^31*f^2*g^10,b^20*d^3*e^6*f^4*h*i^7*j,b^20*c^7*i^9*k^6,b^20*c^7*f^12*g*h*i^6,b^21*d^6*f^2*i*k^17,b^21*d^14*e^13*f*g*i^2*j^2,b^21*d^38,b^21*c^43*e*g^2*k^4,b^22*c^17*e^10*i^6,b^22*c^31*d^4*h^2*i^3*k^4,b^23*c^6*d^22*e^4*f^3*g^7,b^23*c^13*d^5*e^5*g^12*h^2,b^23*c^25*d*e^3*i^4*j^8,b^24*e^6*g^9*i^9,b^24*c^13*d^9*i^12*j^2,b^24*c^41*e*f^2*g^5,b^25*e^4*f^2*g^4*h^7*j^6,b^25*d^5*f^16*g^4,b^25*d^20*g^2*i^7*j^3,b^26*d^20*e^22*f*h*i^2,b^26*c^23*e^3*f^3*i^9,b^27*i^2*j^13*k,b^27*f*g^4*i^3*k^13,b^28*e^3*f^2*h^3*i^4*j^10,b^28*c^16*f^14*k^4,b^29*d*g^5*j^7,b^30*d^9*g*h^7*i^4*j,b^30*c^33*g^3*h^4*k^4,b^30*c^35*f^2*h^9,b^31*e^19*j^6*k^2,b^31*c*d*e^11*f^7*k^5,b^32*e^8*h^5*i^2*k^2,b^32*f^3*g^8*h^5*i,b^32*c*d^2*f*i^3*k^14,b^32*c^33*e^3*h^7*k^2,b^33*c^20*e^10*g^4,b^34*c^8*d^7*h^7,b^35*c^19*d^7*f^2*k^7,b^36*d^12*e*i^5*j^7,b^36*c^2*d^5*i^7*j*k^4,b^36*c^14*g^9*i^6,b^36*c^37*e^9*i*j^4,b^36*c^51*k^4,b^38*c^14*d^20*h*j,b^38*c^61,b^39*d^6*f^8*g*j^10,b^39*h^3*i^12,b^40*f^7*j*k^5,b^40*c^24*d^3*e^14*k^5,b^48*d^8*e^3*h^3*j^6,b^48*d^18*f^3*k^3,b^53*c*d^8*g^6*h^10,b^54*c^12*d^8*f^2*g^5*i,b^58*g^12*j^2*k,b^61*e*f*h^5*k^4,b^63*c^2*f^2*g^6*i^6,b^65*e^7*i^4*k^2,b^65*c^2*f^4*j,b^65*c^14*i*k^6,b^69*d^9*e^19,b^77*h^3*k^2,c^17*d^2*f^4*g^7*h^4*i*j^5,d^9*e^10*h^7*i^5*j^4*k,c^3*d^19*e^2*f^10*i^4*k^4,f^30*j^3,c^5*f^8*g^4*h^2*i*j^5*k^4,d^28*f^4*g^2*i^2*j^2*k^2,e*g^11*h^6*j^4*k^9,c^51*f^4*i*j^6,f^2*g^7*j^11*k^2,d^10*f*g^17*i^2*j^6,e^23*j^10*k^5,d^24*g^9*h^2*j*k^7,e^23*f^4*g^3*h^3*i^2*j^2,c^10*e^3*f^2*g^2*h^7*k^3,d^8*e^10*g^16*k,d^16*f*g^12*h^7*i^2*k,d^2*e^5*f^3*i^8*j^11,c^53*i*j^4*k^7,d^37*g^5*j^8,c^16*d^10*f^5*h*i^2*j^5,c^28*d^3*g^3*i^4*k^5,c^2*f*h^3*i^15*k,c^14*e^25*f*j^4,c^38*f*g^10*i,d^19*e^21*g*i^3,c^3*d^43*e*h^3*k,d^2*e^13*f^13*h^3*j*k^4,g^17*h^9*j^2*k,c^13*d^27*e^12*f^2*g^7*h,d^8*e*f^3*h^19,e^7*h^3*i^3*j^10*k^3,d^8*f^8*i^2*j^2*k^6,d*g^4*i^4*k^15,c^5*d^6*g^5*h^5*j^4*k,c^10*d^16*f^10*g^5*k^4,e^7*g^2*h^8*i^8*j^2,f^14*g^2*h*i^7,d^14*g*h^12*i^5*k,c^3*e^27*h^3*j^3*k^4,c^8*d^6*e^19*f^6*k^7,c^3*f^2*g^8*h^10*i^2,d^9*e^5*g^22*h^3,c^11*d^19*g*j^11,c^14*f^7*g^7*i^4*j*k^2,g^3*h*i^13*j^3,c*e^27*g*h^8,c^46*h^3*i^4*j^2,f^6*g^4*j^11*k^6,c^21*d^2*e^13*j^4*k^6,c^26*d^12*e^5*f*k^9,d^17*e^9*h^4*i^6*j^4,c^2*d^27*e*f^11*i^5,c^21*d^4*g^9*h^3*i^7,d^52*g^3*h*j,e^5*j^6*k^13,f^2*h^7*i^2*k^13,c^7*d*e^20*f*h^2*i^3*j^2,c^19*e^13*g^2*h*i^5,c^21*d^25*h^6,c^24*d^4*e^5*f^7*g^2*i^4*k^3,c^28*d^8*e*g*h^12*i^3*k,d^11*e^8*f^7*g*h*j^7*k^2,d^4*e*g^6*j*k^11,c^7*d^2*e^2*h^8*i^13,c^8*d^36*e^7*g^10,c^12*e^3*f^10*h^3*j^6*k^2,c^24*f^2*g^2*h^2*k^11,e^4*f^28*k,d^44*g^6*h^6*i^3,e^5*f^6*h^5*k^7,d^19*f^9*g^7*h^3*j,d^12*f*g^12*h^2*k^9,c^6*f^3*j^13*k^6,c^7*d^44*f^3*g^5*i^5,d^7*e^2*g^2*h*i*j^16*k,d^17*f^2*g^2*j^8*k^4,d^9*e^28*f^5*h*k^3,d*e^3*f^6*i^11*j^6,g^4*i^13*k^9,g^15*h^14,e^6*h^6*i^3*j^13,c^4*f^9*i^2*j^5,c^13*d^4*h^10*j^9*k,c^16*f*i^4*k^9,d*e^5*f^6*g^9*j^6,f^11*h^6*i^10,c^3*g^14*k^7,c^23*e^6*f^2*g*i^13,d^15*e^12*i^6*j*k^7,d^9*f^8*g^5*i^5,c^2*e^27*f^5*j^4*k^3,c^16*d^4*e^7*f^3*h*k^7,c^28*f^11*g*h,d^57*e^6*f^3*j^4,c^3*d^15*e^14*g*j*k^5,c^5*d^46*e*f^6*j^3,c^11*h^15*i^5*j,e^23*f^4*i^3*k,e^16*g^3*i^5*k^10,d^23*e^3*f^2*h*k^5,d^6*e^4*g^2*h^7*i^3*k^11,d^7*g^11*h^8*j^2,c^3*d^17*f^10*g^11*h,c^9*e^15*h^13*i^3,c^9*d^7*f*g^10*i^2*j^7,e^22*g^4*h^6*j,c*d^7*e^14*f^6*g^4,c^8*e^4*g^18*h^6,c^10*d^21*e^2*g^3*h^10,d^15*e^3*f^8*h^6*i^5,c^7*e^20*g^3*j^6*k^3,c^8*e^2*f^2*i^13*k^5,c^33*e^6*h^15,d^4*f^3*h^14*k^7,d^5*e^9*i^8*k^3,d^36*f^5*i^3*j^2,c^6*f^7*h*j^14,c^44*e^4*f^2*k^3,d^3*e^6*h^4*i^17*j^2,d^47*e^3*f^2*g^7*j^3,c^8*d^13*e^2*g^6*h^15,c^31*d^5*e^11*g^9*k,e^9*h*i^3*j^10*k^7,e*f^12*i^2*j^2*k^10,f^6*g^10*h*i^2*j^9,d^2*h^5*j^6*k^11,d^12*f^10*k^14,f^4*g^9*h^5*j^5*k^2,c^2*d^10*e^15*i*j^8,c^7*d^20*e^7*f^9,c^14*d^3*e^8*g^5*i^3*j^2,c^16*d^34*h^4*j^4,c^18*e^4*f*h^3*j^9*k^7,c^19*d^13*f*g^5*i^2*k,c^26*e*g^10*i^5*k^7,b*d^20*e^3*f*g^4*j^13,b*e^9*f^5*g^2*i^13,b*c^2*d^11*g*h^6*i^11,b*c^7*d^9*f^4*h*j^12,b*c^19*d^2*g^5*j^6*k^9,b^2*d^28*f^3*h^6*i*j^7,b^2*e^20*f^2*g^3*j^8*k,b^2*e^7*f^8*h^4*j^10,b^2*d^3*f^22*j^2,b^2*g^2*h^3*j^4*k^5,b^2*d^32*g^15*i^5,b^2*f^14*g^2*k^8,b^2*c^7*d^10*g*h^7*k^9,b^2*c^38*d^11*g^11*h,b^3*d^2*e^15*f*g^3*h^5*i^6,b^4*d^5*g^12*h^3*k^3,b^4*c^3*e^11*f^4*g^9*h*j^2,b^4*c^17*f^2*g^8*h^5*k^3,b^5*d^9*f^12*h^13,b^5*c^4*d^5*g^22*k,b^6*e^25*g^5*h*k^6,b^6*d^26*e^12*f*h^6*k,b^6*e^6*g^4*i^5*j^9*k^3,b^6*f^3*j^11,b^6*c^4*d^8*f*i^2*k^19,b^6*c^4*d^9*f^17*j^3*k,b^6*c^13*d^23*f*h*j^7*k^2,b^6*c^17*d^15*e^7*f^4*h^8*k,b^7*i^13*j^3*k^3,b^7*e^17*h^17*k^3,b^7*c^67*i^2,b^8*c^11*d^13*e^2*j^6*k^5,b^8*c^21*g^10*j^3*k,b^8*c^23*d^6*k^14,b^9*e^4*h*i^8*k^10,b^9*f^9*g*h^2*i^5*j^3,b^9*c^9*f*g^6*h*i^7*k,b^9*c^11*d^15*f^7*h^6*i^2,b^10*d^32*j*k^3,b^10*d^26*f^4*g^14,b^10*c^21*e^13*f*j^4,b^11*d^16*e^7*h^2*i^9,b^11*e^22*f^5*i^3*j^2,b^11*c^7*e^15*i^5*k^4,b^11*c^9*d^5*e^2*f^3*h^4,b^12*d^16*e^9*g^7,b^12*c^8*d^9*e^2*g^12*k^6,b^13*d^14*e^6*g^3*h^11*i^4*j,b^13*d^24*f^2*g^3*h^4*i^3,b^13*c^31*e^6*g^5*h*k^2,b^14*e*f^13*g^4*h*j*k^4,b^14*c^39*d^3*j^5*k,b^15*d^8*e^9*f^6*g^10*h^2,b^15*c^6*d*e^2*g^15*h*i^2,b^15*c^13*e^8*i^8*j^3,b^15*c^18*f^14*i^7,b^15*c^25*e*i^10*k^6,b^15*c^27*d^11*i^5*k,b^16*c*f^2*i^16,b^16*c^14*d^22*g^8,b^17*d^37*f^5*i^6,b^17*f^13*i^2*j^5*k^4,b^17*c*h^8*j^9*k^5,b^17*c^37*f^2*g*i^2,b^19*c^2*d^51*i,b^19*c^11*f*h^6*j^7,b^19*c^16*f^15*k^2,b^19*c^49*d^9*e^8*k^2,b^20*c^12*d^3*g^11*h^3*j^4*k,b^21*d^3*e^5*f^6*k^9,b^21*g^8*h^6*j^2,b^21*i^2*k^18,b^22*c^10*e^15*g^4*h*j^3*k^4,b^23*d*e^4*h^8*k^4,b^23*c^3*d^11*f^8*h*k^7,b^23*c^29*i^2*j^8*k,b^24*c^9*d*e^2*j^2*k^11,b^25*d^6*e^6*i^4*j^10,b^25*i^6*j^4*k^8,b^25*f^3*g^4*i^3*j^9,b^25*c^29*e*h^2*j^9,b^26*e^4*g^3*h^13,b^27*e^17*i*j^8,b^27*e^9*f^13,b^27*c^2*e^10*g^2*i^3*j^2*k^2,b^27*c^4*d^14*h^2*j^4,b^27*c^7*e^2*f^5*g^2*i^2*k^5,b^27*c^28*d*g^15*h,b^27*c^51*e^5*j*k^2,b^29*d^33*g^6*h^2*i,b^29*c^2*d^4*e^26*j^3,b^29*c^14*e^19*k^9,b^29*c^14*e^8*f*g^3*j^2,b^29*c^26*e*g^8,b^30*c^2*d^6*f^3*h^7*i^3,b^31*c*d^10*g^18,b^31*c^8*e^3*i^6*j^9,b^32*g*h^17*k^4,b^33*i^2*j^5*k^11,b^33*c*d^3*f^5*j^7*k^6,b^33*c^32*d^4*g^4*j^3,b^34*c^20*d^12*i^8,b^36*f^13*i^5*j^3,b^37*d^12*j*k^7,b^38*e^4*f^7*h^2*k^3,b^38*c^9*h*i^2*k^12,b^38*c^42*d^10*e^3,b^39*e^11*f^4*g^4*k,b^39*d^27*f^10*j,b^40*d^4*f^6*h^2*i^3*k,b^40*c^16*e^3*h^11,b^42*d^2*g^6*h^11,b^43*d^9*e^4*f^7*j^6,b^43*c^2*d^2*g^5*k^3,b^44*d^2*e^20*f^4*h^2*k^2,b^44*c^25*e*f^6*i^2,b^46*d^15*g^2*h^5*i*j^2,b^48*d^5*e^21*h^3*j,b^48*c^7*e^14*h^2*i*k,b^48*c^12*d^8*e^6*k^4,b^50*d^13*e^8*i^9,b^52*d^4*f^5*h^2*j^5,b^52*c^25*d^4*g*i^6*k^3,b^56*d^13*g^3*i,b^56*c^2*e^10*f^5*j^2,b^56*c^16*d^2*f^3*h^2,b^60*c^20*g*j^3,b^64*c^2*d^7*e^9*g^3*j,b^65*c^30*e^5,b^67*c^4*e^5*h^9*k^2,b^73*f*h^3*i*j^2,b^75*d^9*e^3*h^5,b^77*c^3*d*i^6*j^3,b^81*c^25,d^6*e^13*f^5*g^9*j^3,c^10*d^20*e^22*g*k^7,c^6*d^4*e*f^2*h^2*i*j^8,c^11*d^14*f^16*k^3,c^18*g^3*h*i^3*j^2*k^9,e^3*h^4*i^14*k^5,c^28*e^5*g^10*k^3,c^30*d^12*f^4*g^4*h^4*j^2,c^4*e*f^8*g*h^7*i^6,d^13*e^26*g*i^2*j^2*k,d^37*e^6*h^4*k^5,c^3*d^21*e^17*g^7*h^2,c^10*d^8*e^5*i^12*j^2*k^5,c^22*d^2*f^3*g^2*i^11*j,d^50*i^2*j^5,c^20*e^16*i^9,d^2*e^4*f^5*i*j^5*k^10,c^44*e^7*f*g*i^3,d^17*e^2*f^15*j^5,e^3*g^5*h^6*j^7*k^5,d^10*f^7*g^5*k^8,d^8*g*h^13*i^4*j*k^5,e^24*f^3*k^11,e^3*g^8*h^11*i,d^23*f^5*g^2*h^16*j,c*d^13*g*j^14,d^7*f^14*i^9*j^4,c^23*g^13*j^6*k,d^21*e^6*f^8*i^4*k^4,d^5*f^2*g^4*h^5*i^4*j^6,c^11*g^9*h^4*i^6*k,c^46*e^4*g^6*h^2*j^3,d^9*g^23*i*j,c^3*e^12*g^3*h^18*i,c^9*e^18*g^2*h^2*i^4*k^4,c^11*d^19*e^5*h^7*j,d^38*g^5*i^4*j*k^4,c^3*g^7*i^22,c^9*d^11*e^5*f^2*h^12*i^4,c^20*d^11*e^3*f^7*i^6,d^51*g^2*h*i^5*j^3,e^3*f^6*i*j^8*k^4,f^20*k^7,c^8*d^8*f^4*h^4*j^4*k^8,c^13*e^11*g*h*i^12,d^3*f^5*g^5*i^4*j^3*k^2,g^10*i^6*k^11,c^4*e^14*f^10*g^2*j^6,c^6*e^12*h^2*j^3*k^11,c^18*f^8*g*h^2*j^2*k^2,e^3*f^12*h^5*i^6,c*h^16*i^4*j^4,c^5*d^3*e*f^5*g^15*j^3,c^6*f^10*h^9*i^3*k^2,e^28*f*i^2*j^2*k^5,e^10*f^9*g^12*i*j,d*g^11*h^9*j^5,d^11*f^7*g^11*h^2,d*g^10*i*j^10*k^4,d*e^19*f^3*g^4*k^3,c^36*f^3*g^2*j^3*k^4,e^16*h^14*i^5,d^9*e^8*f^5*h^7*i^4*k^3,c^10*f^7*i^11*j,d^30*e*f^2*i^2*j^5*k^2,d^23*i^4*k^11,c*d^54*j*k^6,c^8*e^18*f^3*i^9*k^3,c^10*d^3*e^5*f^9*h*i^4*j^2,c^22*f*i^6*k^7,d^49*f*g^3*i^5,d^4*e^20*h*j^11,d^14*e^12*f^6*j^3,c^4*e^13*g^5*i^2*j^5*k^2,c^4*e^2*g^14*h*j^10,c^6*d^28*h^5*j^7,c^9*d^7*e^5*g^5*i*k^5,c^11*d^38*f^4,c^58*f*g*k^5,d^22*e*f^8*h*i^7,e^5*g^2*h^4*j^7*k^9,f^11*g^2*k^12,d^4*e^41*f^2*j^2,c^28*d^5*e^4*g^11*h^2,c^33*d^15*g^11*k^3,c^40*d*e^2*f^2*i*j^9,d^5*f^21*h^5*i*k^3,h^11*i^4*j*k^9,d^6*e^12*f^12*g^3*i^4,c^2*e^13*g^8*h^5*i^7,c^4*d^20*g^2*h^10*i^2,c^7*e^5*f^4*g^8*i^6,e*g^12*h^4*j^2*k^7,e^3*f^7*g^3*h^7*j^7,c^7*g^8*h^6*j*k^7,c^15*d^20*f*g*i^4*j^4,d^3*f^9*h^14*j,c*g^3*i^17*k^3,c^2*d^10*e^29*h^8,j^14*k^2,d^3*f^14*j^6*k^5,d*f^2*h^5*i^7*j^8*k^2,h^4*i^9*j^2*k^11,d^17*e*f^3*h^16*k^5,c^57*e*h*i*j^3,d^12*g^8*i^2*j^9,d^60*e^10*f^2,d^10*h^6*i^18,d^43*e^11*g^3*i^3*j^2,e^9*f^4*g^5*j^12,c*d^7*e^7*j^9*k^9,c^11*e^2*g^10*j^6*k^5,c^13*j^3*k^18,c^13*d*f^2*g^4*j^8,f^6*g*h^3*i^4*j^6,d^15*h^7*i^2*j^3*k^9,g^6*h^2*i^6*k^5,c*d^9*f^4*h^7*i*j^2,c^6*d^19*f^18*k^3,c^20*d^16*e^15*h*i^5,c^34*e^6*f^3*g^3*j^3*k,d^2*e^23*g*j^8*k^3,d^26*e^3*j^4*k^7,d^6*f^3*i^2*j^21,d^10*e^16*f^5*i^15,c^11*e^18*j^7*k^3,e^27*f^2*h*i^2*j^5,d^16*e^6*f^22,e^20*i^4*k^8,e^7*h^5*j*k^3,f^16*g^2*h^6*j^6,c^4*d^9*f^14*k^6,c^9*e^2*f^2*g^13*i^3,c^11*h^4*i*k^12,c^23*g^12*h^4*k^3,c^30*e^26*g^3*i^2,b*d^10*e^14*g^7*j^2*k,b*d^41*e*f^3*g*h^3*j^4,b*d^34*g^6*h^2*k^5,b*c^35*e^9*g^3*j*k,b^2*d^18*e^3*g^3*h^5*i^2*k,b^2*d^11*g^8*h^4*i^4*k^10,b^2*c^5*f*g^2*i^9*j^7,b^2*c^9*e^18*f^4*h^3,b^2*c^19*d^15*g*i^6*j^3*k^2,b^2*c^23*d^7*f^2*h^7*k,b^3*f^3*h^3*i^17*j,b^3*e^7*f^6*h^10*i^4,b^3*c^2*d*f^20*h^3*i^3,b^3*c^10*d^18*e^5*g^13,b^3*c^29*e^4*j^8*k^5,b^4*e^7*g^15*h^2*i*k^4,b^4*c^3*e^13*i^7*j^6*k,b^4*c^5*d^12*f^3*i^2*j^8,b^4*c^17*d^5*i^4*j^2*k^5,b^4*c^29*f^3*g^8*i^3*j,b^4*c^52*e^8*j^5*k,b^5*e^2*h*i^15*k,b^5*d^23*e^7*g^3*j^9,b^5*c^4*d^16*g^8*j^3*k^3,b^6*d^31*f^2*i^5*j^3,b^6*d^24*g^4*i^7*k^3,b^6*d^55*h^3*i^2,b^6*d^16*e^23*g^2*h^5*k^2,b^6*c^3*d^2*e^29*j^7,b^6*c^8*h*k^21,b^6*c^13*e^24*f*g^2*i^4*j^4,b^6*c^15*e^11*f^7*j^6,b^6*c^27*e^4*g*i,b^6*c^29*d^20*f^5*h*j^2,b^6*c^41*d^13*k^3,b^7*f^5*g^5*j^5*k^10,b^7*c*e^13*f^3*i^12,b^7*c^14*e^11*g^15*j,b^7*c^15*f*h^3*i^9,b^8*d^4*f*h^10*j^13,b^8*d^21*e^25*i^3*j^2,b^8*d^14*e^18*i^5*k^6,b^8*d^45*e^5*h*k,b^8*c^2*d^8*g^11*i^4,b^8*c^4*d^39*f^4*g^5*h,b^8*c^6*f^12*j^2*k^6,b^8*c^27*d^10*e^20*f*j,b^8*c^39*d^3*e^13*k^6,b^9*d^13*e*k^17,b^10*e^10*f^3*k^13,b^10*g^8*h^7*j^5*k,b^10*e^29*g^4*i^2,b^10*c^2*d^29*e^16,b^10*c^9*d^12*e^17*g^3*h^5*k,b^10*c^14*d^22*e^9*g^3*k^4,b^11*d^2*g*j^20,b^11*d^6*e^18*h*i^10,b^11*e^4*f^4*g*h^12*i*j^2,b^11*c^37*e^13*h^3*i,b^12*d^2*e^16*h^10*j^6,b^12*g^14*h^9,b^12*c^5*g^5*h*k^20,b^14*d^10*e^3*f^6*i^2*j^5*k^6,b^14*g^4*h*i^2*j^12,b^14*d^10*e^7*f*g*h^12,b^14*c^6*d^11*e^22*i^5*j,b^16*e^14*f^10*j^3,b^16*d^8*e^2*h^3*j^7*k,b^16*e^7*f^2*g^2*i*k^9,b^16*d^18*f^8*k^4,b^16*c^4*g^16*i*j^4,b^16*c^18*g^15*h^2*k,b^17*d^2*e^3*f^12*i^7,b^17*d^10*f^4*g^6*h^10*i^4,b^17*c^22*f^15*h,b^18*d^27*g^6*h^3*j^2,b^18*c^4*e^13*g^3*h*j^5,b^18*c^16*e^6*g^8*k^4,b^18*c^18*d^16*g^2*h^5*j,b^19*e^2*h^8*i^2,b^19*c^4*g^4*h^7*i^4*k^4,b^20*d^11*e^9*g^13*h,b^20*d^4*e^2*g^18*k^2,b^20*c^3*f^5*i^4*j^4*k^2,b^21*e^31*h^6,b^22*c^22*g^4*j^6,b^23*c^10*d^6*h*i^7,b^24*c*f^6*g*j^8*k^4,b^25*c^8*e^17*i^5,b^25*c^8*e^6*f^7*g^2*i^2*j^4,b^25*c^10*d^27*e^4*h^4*j,b^25*c^20*g^7*i^4,b^26*c^13*j^3*k^11,b^27*g^4*h^10*j^8,b^27*f^12*g^4*h^3,b^27*c^32*d^4*e^8*h,b^28*d^21*e^3*f^7*h*j^4,b^28*d^14*g^3*k^9,b^29*d^30*e^11*g^4*h^2,b^29*e^20*f^8*h*k,b^29*c^7*f^3*i^6*j^3*k^6,b^29*c^11*f^6*h^5*k^5,b^31*e^4*g^6*h^12,b^31*c^5*i^4*j^2*k^9,b^31*c^17*f^7*g^5*i^3*j,b^32*d^3*e^9*f^4*j^9,b^33*d^4*g*i^7*k^7,b^33*c^15*e^6*f^3*i*k^3,b^33*c^17*f^9*j^2,b^33*c^24*h^5*j^4*k^4,b^35*d^25*e^7*k^5,b^35*d^9*g^2*h^6*j^5,b^36*d^9*g*i^2*j^10,b^37*d^9*e^18*f^4,b^37*e^8*g^9*h^4*j^3,b^37*c^4*d^33*f^2*h*k^3,b^37*c^9*e*g^14*h^3,b^41*f^2*h^3*j^8*k^2,b^41*c^8*d^15*e^4*i^2*k,b^43*f^12*k^8,b^43*j*k^14,b^44*h^8*i^5*j*k^5,b^44*c*e^12*h^2*i^8,b^45*d^7*g^3*h*j^2*k^3,b^45*c^6*h^3*j*k^3,b^46*c^13*d^12*e^10*f*h^5,b^47*d*f*j^14,b^49*c^10*e*g*j^6*k,b^50*i^7*k,b^52*d^7*e^6*f*h^2*j,b^52*c^10*d*f^9*h^2,b^52*c^22*f*g^3*h*i,b^54*c^20*e^10*k^2,b^56*d^3*e^6*g^6*i^2,b^62*f^12,b^68*e^6*f^3*i^2*k^5,b^68*c^5*d^9*j*k^6,b^68*c^17*d^3*g^6,b^70*c^3*e^12*j^5,b^70*c^15*e^5,b^72*d^12*e*g^9,b^89*d*e^7*h*j^3,b^89*c^8*g^5,b^95*c^5*g^3*k,b^116*e^2*g^2,c^13*d^28*f^9*g*j^3*k^3,c^2*d^24*g^8*h^2*j^2*k^8,c^4*d^19*e^20*f^5,e^6*h^3*j^11*k^4,c*d^8*f^13*j^3*k^7,c^20*d^6*f*g^4*h^5*j^5*k^2,d^25*g^14*h^5,c^12*g^2*h*i^10*j^4,c^13*d^52*g^2*h*j^2,c^34*e^12*g*h*i^2*k,d^4*f^4*g^5*j^2*k^12,c^14*e^5*h^6*j^14,c^19*f^14*j^6*k,d^9*f^13*g^4*i^2*j,c*g^9*h^5*i^5*j^3*k^5,e^22*f^9*k^2,c^7*d^5*g^5*i^8*j^10,c^11*e^21*g^3*h^6*j^2,d^5*e^10*h^13*i^3,c^10*d^5*e^8*f^4*i^5*j*k^4,c^12*d^36*f^10*j^3,d^16*e^15*f*g^12*j^2*k^2,e^8*f^3*h*j^11*k^8,c^29*d^3*e^7*g^4*j^3,c^34*d^13*f^6*g^4*k^2,c^3*e^16*g*h^2*i^11*j,c^4*d^22*e^3*g^14*i^3,c^6*d^53*g^8*h^4,c^8*f^5*g*h^3*j^5*k^6,f^7*h^10*i^2*k^6,d^5*f^4*g^11*h^3*k^4,c^6*f^11*g^4*h^8,c^15*g^3*h^19*j*k,e^24*g^4*h*k^7,c^14*f^8*j^12,f^4*i^10*j^4*k^4,d^24*e^6*i*j^8*k^6,c*d^11*g^12*i^2*j*k^6,e^10*f^6*h^2*i^3*j^5*k^2,c^12*e^3*h*i^5*k^11,c^12*f^14*h^2*i^2*j^4,c^24*f^6*g^5*h*i^4*k^2,d*e^10*g^5*k^9,c*d^32*f*j^2*k^4,c^11*f^3*g^19,d^16*e^6*f^5*h^2*i^6,d^9*g*h*i^8*k^9,c^22*e^14*f^2*i^2*k^5,c^24*d^5*e*f^8*h^4,c^36*h^3*k^9,c^11*d^16*e^8*f^5*g^6,c^23*d^9*e*g^11*k^7,e^17*f^9*g^3*i^3,d^14*e^5*g^2*h^11*i*j^2,e^10*f*g^8*i^5*k^3,d^24*f^7*g^2*h^4,c^11*d^17*g^7*h^3*i^2*k^7,c^5*d^14*e^3*g*i^3*j^7*k^2,d^14*e^26*f^3*h^2*k,c^4*e^16*g^9*h^9,c^16*f^7*i^13,c^29*d^22*g^7*j,e^11*g^4*i^9*j^7,c^15*g^9*i^10*k^5,c^40*d*e^16*k^5,c^52*f^7,d^6*g^8*i*j^12*k^4,d^4*h^7*i^17*j,c^3*g^4*h*j^11*k^4,d^3*f*h^8*j^5*k^4,d^13*f^15*h*k^7,c*e^32*i^6,c^15*d^20*e^12*i^3*k^3,c^26*f^6*h^6*j^8,d^3*e^4*f^11*k^10,d^35*e^6*g*h^4*j^7,d^12*e^8*g^3*h^6*i*k^5,g^2*i^8*j^10*k^2,e^23*f*h^4*j^2*k,c^6*d^18*e^2*f^21*h^2,c^13*d*e^3*h^8*k^5,c^44*f*j^9*k^2,c*d^9*f*h^15*k^5,d^6*e^5*i*j^11,e^10*f^8*i^5*j*k^8,d^16*f^14*j^3*k^3,c^7*i^3*j^5*k^9,c^7*f^8*g^3*j^10,c^19*g^8*i^2*j^4,d^41*g^2*j^8*k^2,d^25*e*i^4*j^6,d^18*g^4*i^6*k^7,c^5*e^16*f^4*j^9,c^10*e^8*f^18*j,c^17*e^9*g*j^3*k^3,c^19*d^14*f^2*h^2*j^5,c^22*e*f^10*g*k^6,c^31*d^7*h*k^7,d^2*e^3*g*h^2*i^17*k^3,e^18*i^11*j,e^5*f^6*h^5*i^6*j^3,d^8*f^20*i^5,c^5*h^4*i^8*k^3,c^7*d^22*f^4*h^9*i^3,d*f^4*g*h^3*j^2*k^14,d^2*e^5*g^11*i^3*k,d^33*f*g^5*h^2,e*f^9*h*j^5*k^10,c^6*d^26*g^10*h*k^5,c^8*f*g^3*k^19,c^17*d^4*e^25*j^4*k,c^27*e^20*g^8*j,c^5*d^12*e^14*h^7*i*k,c^15*e^9*f^2*g^4*h^2*i^5,c^17*d^6*f^8*h^7,c^29*g^3*h^6*i^2*k,e^41*j^3,d^23*e^21,c^4*d^17*e^3*f^5*g^12,c^11*e^4*g^17*h^6,c^16*d^10*g^17,c^23*e^2*i^3*j^10,e^23*h^2*i^9*k^4,d^31*e^10*h^7*i^4,e^9*f*g*h^13*j^5*k,c^3*h^17*j*k^5,c^11*d^4*f*i^11*j^4,c^23*i^13*k^5,c^27*e^18*h^4*k^4,c^48*e^4*i^3*j^4*k^5,b*e^2*h^2*j^20,b*d^15*g^7*i^6*j^5,b*c^12*d^39*g^6*i^3*j,b*c^47*d^4*f*g^3*j^4,b^2*d^15*e^21*f^3*g*h^5*i,b^2*c^4*d^39*e*f*h^9,b^2*c^23*d^18*i^6*k^3,b^3*g^4*h^2*i*j^15,b^3*f^11*g^4*j^7*k,b^3*d^22*f^9*g^3*j^3*k^5,b^3*c*d^15*e^19*f^8*i^3,b^3*c^10*d^29*e^7*i*k,b^3*c^12*d^60*j^2,b^4*d^13*e^16*i^12,b^4*f^18*i^2*j^4,b^4*c^12*f^10*g^2*i^4*k^6,b^4*c^14*f^16*h^4*k,b^4*c^33*d^2*e^11*i^3,b^5*d^2*e^7*h^4*j^10*k^5,b^5*e^12*g^2*k^13,b^5*d^12*f^5*j^2*k^8,b^5*g*h^3*j^4*k^14,b^5*c*d^5*g*k^17,b^6*c^7*e^11*h^9*j^7*k,b^6*c^8*d^21*e^7*g^2*i^6,b^6*c^57*d^10*e^2*f,b^7*e^18*g^3*h^2*j^8,b^7*e^10*f^9*g^3*k^2,b^7*c^8*d^10*g^2*h^6*j^4*k^3,b^7*c^18*g^22*h*j,b^8*e^7*h^9*i*j^2,b^8*d^4*f^11*h^2*k^2,b^8*f^3*g^4*h*i^2*k^11,b^9*d^15*j^17,b^9*e^5*f^2*i^3*j^7*k^6,b^9*c^7*d^18*j^3*k^10,b^10*d^9*e^5*f^7*h^12*j^2,b^10*c^6*d^2*g^5*h^11,b^11*e^11*j^15,b^11*c^5*d^9*e^3*f^12*j^7,b^11*c^12*e^4*g^4*j^9*k,b^11*c^17*d^2*f^4*g^4*j*k^4,b^12*d^7*h^3*i^4*j^9,b^12*e^5*f^8*g*i^8,b^12*h^2*i^6*j^3*k,b^12*c^4*e^27*h^9,b^12*c^5*d^10*f^6*i^5*k^4,b^12*c^35*e^8*j^6,b^13*c^36*g^10*j^3,b^14*e^11*f^4*g^2*h*i*j^7,b^14*c^3*e^14*f^2*i^3*k^7,b^14*c^10*e^4*g^7*i^3*j,b^14*c^12*d^15*f^2*g*h^5*j^3,b^14*c^24*d^8*g^6*h^4,b^14*c^59*g^3*h^2,b^16*c^10*d^5*e^20*h^3*j^2,b^16*c^22*e^13*h^2*k^2,b^17*c*e^14*f^8*i^8*k,b^19*c^20*e^13*g^2*h^7*i^3,b^20*c^7*f^4*g^5*i^2*j^4*k^4,b^20*c^9*d^4*f^10*h^2*j^6,b^20*c^28*d^11*e^6*i*j^3,b^21*d^21*j^8*k^6,b^22*d^5*e^3*f^3*i^4*j^6*k^2,b^22*g*i^6*k^11,b^22*c^3*d^30*e^2*g^5*i^4,b^22*c^7*f^6*j^5*k^2,b^22*c^19*k^11,b^24*d^3*e^2*g^2*h^7*j^8,b^24*d^13*f^5*g^2,b^24*c^31*d^2*f^8*h^2,b^25*c^3*e^11*f^6*g*i^5*k,b^25*c^5*f^12*h^5,b^26*d^3*e^23*f*k^3,b^26*e^16*k^12,b^26*e^5*f^9*g^9,b^26*e^6*g^14*h^4,b^26*c^4*f*g^14*k^3,b^26*c^25*f*j^6*k^4,b^28*f^2*g^4*i^6*j^5,b^28*d^19*g^3*i^3*j*k^2,b^29*c^11*e^2*i^6*k^7,b^29*c^23*f^7*i^5,b^30*d^9*e^9*i*k^5,b^32*c^17*d^7*e^8*g^2*j^2,b^33*e^17*h^3*i^7,b^33*d*e^9*f^2*i^6,b^33*c^10*d^25*i^3*k^3,b^35*c^3*d^6*e^15*h^6,b^36*c^2*g^8*j^10*k^2,b^37*c^9*e^3*i^12*j,b^38*c^2*d^3*j^11,b^39*i^6*j^3*k^5,b^39*d^11*f^2*h^5*i*j^5,b^41*c^12*g^3*h^2*k^3,b^41*c^47*e*f^3,b^43*d^20*e^7*h^3*i^2*k,b^43*e^22*f^2*h*j^2,b^43*c^10*e^15*k^6,b^43*c^12*d^9*e^2*h^5*k,b^44*d^20*e^9*g^4,b^45*e^11*g^6*i*k^4,b^47*c^16*e^8*i*j^3,b^47*c^30*d^15*k^3,b^48*c^4*h*i^9,b^49*c^40,b^51*f^9*k^4,b^53*g^5*h^7*j^2,b^55*f^4*i^3*j*k^6,b^57*c^7*g^6*j^3*k,b^59*d^4*e^9*f^10,b^59*c^5*e^10*j^2*k^4,b^62*c^3*e^10*g^2*h^3*i,b^62*c^5*d^10*h^8,b^62*c^8*e^2*f^8*g^2*k,b^62*c^17*d^3*g*h^7*k^2,b^68*f^2*k^7,b^71*e^11*f*g*k^3,b^78*e^5*g^5*h,b^78*c^3*f^2*g^5,b^85*c^2*g^4*i^7,b^93*c^11*i,c*d^14*e*f^12*g^4*h^4*i^3*k,d^13*e^25*f^2*j^3*k^2,c^8*d^37*e^5*h^4*k^6,d^8*h^13*i*j^2*k^6,c^8*e^2*f^4*g^7*h^11,c^16*d^13*f*j^15,d^7*f^19*i^6*j^5,c^2*g^2*h^2*i^9*j^7*k^4,d^30*e^9*h^5*i^5*j^3,c^24*e^17*g*h^2*i*k^5,c^30*d*e^10*i^4*j^7,d^3*f^10*g^4*i*j^4*k^3,c^7*e^2*f^17*h^5*i^3*j,c^3*d*g^10*h^9*j^6,c^6*d*e^18*f^8*g^3*k^4,e^15*h^14*i^2*k,e^13*f*i^4*j^4*k^8,c^14*d^23*i*k^12,d^49*f^6*g^2*i^2*j*k,c^7*d^4*e^19*h*j^12,c^7*d^5*e*h^7*i^7*k^3,f^4*h^11*i*j^2*k^10,f*g^11*h^4*j^3*k^8,f*i^9*j^7*k^8,d^12*f^4*g^7*j^10*k,c^2*f^11*h^3*i*j^7,c^7*f^25,c^14*f^3*g^5*h^2*i^3*j*k^6,d^26*e^2*j^5*k^8,d^3*e^4*g*h^2*i^7*k^13,d^34*h^7*i^2*k^8,c^12*e^19*i*k^9,c^14*e^6*f^5*h^5*j^2*k^4,c*d^10*e^13*f^2*g^6*j^3*k^2,e^22*f^6*g^3*h*i^2*j,d^18*e^2*f^4*g^2*h^5*k^2,d^2*g^16*h^12*j^4,e^51*f^2*k,d^2*e^13*f^8*g^9*h^3,c^32*d^5*i*j^3*k^6,e^6*f*i^21*j^2*k^2,c^6*e*f^4*h*i^12*j*k^2,e^8*f*g^4*i^7*j^2,d^31*f^7*i^2*j^4,c^7*d^24*g^3*i^4*k^4,d^8*f^3*h*i^15,d^7*f^12*h^2*k^11,c^7*d^45*e^4*f*h*k^2,c^17*d^8*f^3*g^10*i,d^64*h,f^2*g^7*h^7*j^6*k^2,e^2*k^23,c^11*d^6*g^5*i^12*j^3*k^2,c^15*e^28*g^3*k,c^3*d^6*e^17*f*h*i^7*k,f*g^17*h^7*j,d^10*f*h^3*i^2*j^15*k,f^5*g^3*h*j^13,c^2*d^3*f^3*i*k^16,c^9*g^8*i*j^7*k^4,g^4*h^7*i^9*j*k^4,c*e^8*f^2*g^2*h^14*k^3,c^16*d^2*e^11*h*i^13,d^19*e^6*h*i^3*j^9*k^2,e^13*f^15*j^4*k,c^9*d^8*e*h^3*j^8*k^2,c^19*f*g^15*j^5,c^21*d*h^2*j^2*k^11,e^10*f^3*h^6*i^5*j^6,d^2*e^2*f^17*i^4*k,e^3*h^5*i^7*k^7,d^16*f*h^10*i^2*j^2*k^2,e^10*g^11*i^2*j*k^5,d^27*g^5*h^3*j^3,g^25*i,c^31*e^5*g^7*k^5,c^5*e^14*g^4*h^3*i^4*k,c^7*e*f^5*h^8,c^12*d^10*f^19*h,c^19*g^3*h^7*i*k^5,c^6*d^4*e*g^17*k^3,c^13*e^7*i^2*j^13,c^18*f^10*i*j^5*k^3,c*i^10*j^7,d^6*h^6*i^18*j,c^2*d^33*g^6*i^2*j^4*k^2,c^6*d^25*e^17*g^4*h^3*k,c^37*g^3*j^7,d^17*g^3*i^13*j^2,d^9*e^26*g*h^6,d^33*e^6*h^10*k,c^4*e*g^20*h^5*i,c^23*g^5*i^9*k^3,c^25*d^6*h*i^4*j,d^9*e^24*f^5*i^2*k^4,f^4*h^4*i^15,c^2*d^54*j^5,c^12*d^17*g^13*j^2,c^14*d^47*k^9,d^32*f^7*g^4*h^2*i^5*j^2,f^15*h*i*j^7*k,d^25*g^9*h*i^7,c^2*f^7*g^2*i^3*j*k^10,c^23*e^16*i^2*k,c^23*e^5*f^12*g*j^5,c^35*f^4*g^6*i,d^6*e^4*f^2*j^5*k^12,g*k^21,c^11*d^4*e^5*h^6*i^10*k,f^14*g^7*h*i^4*j^2,d^14*f^4*h^5*i^2*k^12,d^15*e^12*g^2*i^5,d^16*e*f^11*g^11*i^2,d^46*f*h^4,c^3*d^25*e^4*f^9*g^2*i^4*k^2,c^7*d^29*g*h^10*i^3,c^12*d^39*g*h^3*i^2*k^3,c^33*e^27,c^47*d^4*e^7*h,e^15*f^6*g^3*j^3*k^6,d^21*e^2*f^12*h*j^5*k,c^3*d^14*f^4*g^2*k^10,e^4*f^8*h^3*k^6,g^4*h^2*i*k^15,d^6*g^12*h^14,c^8*e^23*g^9*i^2,c^22*d^23*e^3*g^8*h,e^16*f*h^15*i^2*j^2,d^12*j^6*k^14,c*d^4*e^24*k^13,c^9*h^19*k^3,c^17*d^17*f*i^13*j,e^3*g^5*h^12*k,c^53*d^17*f*j,d^3*e^8*f^9*j^10,c^4*d^17*h*j^14,c^7*e*f*g^4*j^4*k^8,c^39*e^2*i^12,b*d*e^5*h^4*i^3*j^12,b*h^3*i^5*j^6*k^5,b*d^25*h^8*j^8,b*d^4*f^3*i^4*k^8,b*d^35*f^9*h*k^3,b*c^4*d^18*h^7*i^2*j^2*k^9,b*c^9*d^28*f*i*k^12,b*c^27*h^6*j^11,b*c^30*e^5*f^8*j*k^4,b^2*c^13*e^2*h^8*i^7*j^3*k,b^3*d*e^26*f^7*j^3*k^2,b^3*e^19*i^2*k^11,b^3*e^8*f^15*g^2*j^2,b^3*d^25*e^6*f^5*k^6,b^3*c^2*d^9*g*h^6*j^6,b^3*c^5*e*f^7*g^7*i*k^2,b^3*c^7*d^18*k^15,b^3*c^14*d^2*g^6*h^5*k^3,b^3*c^49*e^4*g^3*h^3*j^3,b^4*c^13*d^9*f^4*j^11*k,b^4*c^23*e^13*h^6*i^4*j,b^4*c^28*e^5*f^14*i^3,b^4*c^37*h^10*i,b^5*d^20*e^22*f^6*i^3,b^5*d^7*i^8*j^13,b^5*g^2*i^12*j^3*k^6,b^5*e^25*h^4*j^5,b^5*c^3*e^30*f^3*k^5,b^5*c^5*d^9*e^17*f^9,b^5*c^12*e^18*h^3*k^6,b^5*c^24*g^13*h^3,b^6*d^7*e^14*h^11*i^3,b^6*e^7*h^10*i^5*k^6,b^6*d*f^5*g^4*h^11*i^2,b^7*d^5*g^23*h^3,b^7*c^6*e^2*g^3*i^5*j^11,b^7*c^11*d*f^10*g^3*i^4*j^3,b^7*c^20*d^15*g^2*i^2*j^7,b^7*c^24*d^7*e^16*h^6,b^8*e^25*f*h^9,b^8*d^42*g^2*j*k^6,b^8*c^6*g^4*h*i^15*k,b^8*c^10*e^18*g^2*h^8*i^2,b^8*c^12*d^15*e^5*h^13,b^9*f*g^5*i*j^7*k^8,b^9*f^7*h^3*j^9*k^3,b^9*c^9*e^23*f^6*i^2*j^2,b^9*c^18*d^5*e^11*j^6,b^9*c^23*d^15*e^3*f^4*k^2,b^9*c^30*e^4*i^2*k^8,b^9*c^30*g^9*j^5,b^10*c^6*d^13*h^4*i^8,b^10*c^10*d^26*e^10*f*g^9,b^11*e^3*f^3*h*j^8*k^6,b^11*d^34*f^3*g^5*i^2,b^11*c^2*f^17*k^9,b^11*c^7*d^48*g^4*h*k,b^11*c^9*j^2*k^15,b^11*c^42*d^13*e^2*g,b^12*c^16*e^11*h^2*i^5,b^13*d^7*f^2*g^2*h*j^3*k^4,b^13*g^7*k^13,b^13*c^5*d^39*e^5*g^6*j,b^13*c^21*f^5*h^3*j^2*k^4,b^14*e^3*f^9*h^6,b^14*f^23*k^3,b^15*d^26*f*g^12*h*k^2,b^15*e^10*f^6*g^9*j,b^15*e^3*g^14*k^7,b^15*d^15*f^4*g^8*h^3*k^2,b^16*c^3*d^2*h*i^7*j^3*k^8,b^16*c^14*e^2*g*h^15*j^2,b^17*e^5*g^4*i^5*j^8*k^2,b^17*d^20*f^5*j^10,b^17*d^5*e^19*g*h*k^5,b^17*c^25*f^2*j^7*k^2,b^18*c^13*f^4*i^4*j*k^2,b^19*f*g^10*j^2,b^19*c^2*d^27*k^13,b^20*g^6*h^6*i^8*j^4,b^20*c^11*e^18*i^2*k^5,b^20*c^13*d^7*e^5*f^6*h^2*j^2,b^20*c^23*f^8*g^3*i,b^20*c^25*h*k^9,b^21*e^25*g^3*j*k^3,b^21*d^18*e^12*f^3*j^3,b^21*c^12*d^11*e^5*g^2*k^7,b^22*e^14*i^5*k^3,b^22*d^26*e*f^5*h^2,b^22*f^7*h^8*j^9,b^22*d^19*h*i^2*k^7,b^22*c^35*e^9*f^2*k^3,b^23*f^8*k^14,b^24*d^10*e^12*f^9,b^24*c^10*d^3*e^5*f*g^5*k,b^25*e^3*f^4*h^8*j^7,b^25*c^3*d^9*f^18*h*k^3,b^26*d^8*e^7*f^2*i^8*j^2,b^26*e^8*i^11*j^4*k^2,b^26*c^4*d*i^10*k^5,b^28*d^5*h^6*j^8*k^4,b^28*c^11*d^6*e^6*g*i^3*j^4,b^28*c^23*g^6*i^5,b^29*c^2*g^3*i^15,b^29*c^16*d^5*g*h*j^8*k^2,b^30*f^3*h^4*j^6,b^30*f^17*k,b^30*c^37*e^6*h*j^3*k^3,b^32*e^27*h^2*j^5*k,b^32*c^12*e^2*g^10*h*k,b^34*e^4*i^5*j^11,b^34*c^8*i^2*j^7,b^34*c^12*e^18*f*h^4,b^36*c^8*d^16*j^8,b^36*c^20*d^9*j^2*k^7,b^37*e^2*h^2*i^8*k^3,b^38*d^35*j^3,b^38*f*g^16*i^2,b^38*c^30*e^4*k,b^39*d^12*h^2*i^11*k,b^39*c^4*e^13*i^5,b^40*d^2*e^8*g^8*h^4*j^3,b^40*c^5*d^12*g^8,b^43*d^10*e^18*h^2*i^3*k^2,b^43*c^22*i^10,b^46*g*h^2*j^12,b^47*c^20*h^6*j^3*k,b^48*e^7*k^11,b^49*d^6*e^3*f^9*k^2,b^49*d^14*f*g^3*h^11,b^50*c^7*e^13*h^2*j^5,b^51*d^4*e^2*h^9,b^51*e^7*f^5*g^2*k^5,b^55*e^8*i^3*j^4,b^55*c^13*d^10*h^2,b^57*c^23*g^4,b^67*e^2*g^5*k^3,b^68*c^16*e^6*f^6,b^70*e^2*f^5*g^8*i^2,b^71*d^5*f^2*g*j^2,b^80*c^3*g*h^2*i^2*j,b^82*c*k^3,b^84*c^11*e*g,b^92*c^11*d^3*g^4*i*k,b^96*c^2*d*g^2*h^7,b^119*e,d^5*e^16*g^4*i^8*k^2,c^4*f^4*g^3*h^6*j^10,c^44*d^3*e^6*g^3*j^4,c^32*d^11*h^6*i^5,e^23*f^5*g^3*h*k^8,c^2*d^9*f^2*h*i^5*k^10,e^16*f^14*g^2,c^13*e^10*g^3*i^6*j^8,c^18*d^6*e^2*f^9*g^3*i^5,c*d^4*h^7*i^14*j^2,e^2*f^8*h^4*j^10*k,f^22*j^2*k^4,c^37*d^4*e*g^9*h^2*j^2,d^12*e^7*f*g^2*h^6*k^6,c^10*f^3*g*i^5*j^11*k^3,e^18*f^5*g^9*h^4,c^10*d^6*e^4*f^5*j^12*k,c^22*j^6*k^10,d^25*f^4*i*j^7,d^18*g^3*i^3*j*k^8,c^32*e^8*f*j^4*k^4,c^6*e^17*f^5*i^8*j^2,d^15*e^29*j^6*k^2,c^7*d^2*e^4*g^10*k^2,d^17*f^10*g*h^5*i^6,c^39*g^2*h^13,c^7*d^23*e^20*f^2,e^22*h^2*i^6*k^5,c^2*d^15*g^7*h^14*i*j,c^17*d^8*e^13*g^5*h^4*k^3,f^2*g^3*h^2*j^16,j^3*k^20,g^8*h*j^10*k^8,c^11*d^5*e^26*i*j^5,c^25*d^29*e^6*j*k^2,d^13*e^15*f*i^9,d^48*e^2*g^8*i,c^4*d^12*f^10*j^3*k^9,c^16*d^5*f^2*k^18,e^7*f^14*i^3*j*k^5,d^10*h^11*i*j^5*k^6,f^6*i^5*k^14,c^18*d^11*e^14*g*h^5*i^4*j,c^23*d^21*e^6*f^3*g*i^3,g^25*j^3,c^9*e^8*g^3*i^16*k,d^2*h^2*i^11*j^11*k,e^6*f^2*h^9*j^3,c^2*d^4*f^16*h^2*k^3,c^9*g^3*h^8*k^9,e*i^9*j^10*k^4,c^21*d^2*f^4*g^4*h^11,d^11*g^3*i^12*j^5*k^2,d^3*e^31*g*h^7*k,e^6*g^20*h^6*k,c*e^12*i^6*j^8,c^15*h^2*i^3*j^4*k^2,e*f*h^5*i^14*j^2,e^11*f^10*g^14*j,c^2*d^11*g^13*j^5,d^19*g^9*h^2*i^6,c^13*e^21*i*j^3*k^5,c^13*e^10*f^9*g*h*j^8,c^25*e^3*f*g^6*j^2,c^27*d^15*f^7*h^5*j^4,c^2*d^32*e^15*j^6,c^13*f^3*g^2*h^7*i^8,d^9*e^17*g^2*i^4*k^3,d^40*e^4*h^5,d^23*e^5*g*h^11*i^2*j^2*k^4,e^3*g^3*h^11*j^12,d^3*g^16*i^3,c^2*d^33*g*h^4*i*k^7,c^4*f^14*g^3*h^4*j^4*k^3,c^37*e^12*h^2*k^3,d^8*f*g^2*h*j^2*k^14,c^7*i^19*j^3,c^11*e^21*h^5*i^6,c^25*d^6*e*h^9*i^3*k^3,e^9*f^5*h^4*k^10,h^7*i*j^21,e^28*g^9*i,d^24*e^15*f^2*g^3*h^3,c^12*d^17*e^8*g^8*h^2*k,d^32*e^4*f^4*h^10*i^4,c^8*d^46*i^4*j,c^10*f*j^6*k^14,c^43*d^11*e^5*j^4,d^21*f^4*j^9*k^7,c^9*e^12*h^18*k,c^31*d^19*h^3*i^6,e^10*h^5*i^2*j^15,d^5*e^2*f^8*i*j^7*k^3,i^3*j*k^12,d^29*f^6*h^2*j^3*k^7,d^22*h*k^16,d^14*e^10*f*g*i^12,e^6*f^15*h^3*i^3*j^4,d^24*f^7*g^5*i^4*j^2*k,e^13*f^12*g^2*j^5,d^3*e*g*h^7*j^9,d^12*e^4*k^19,d^13*f^10*g*j*k,c^4*g^6*h^6*j^3*k^7,c^9*d^6*f^2*g^6*k^10,d^11*h^14*i^4*j^3,c^27*h^11*k^3,d^38*e^7*f*k^8,d^3*e^22*f^6*k^4,c^5*e^17*f^8*g^14,c^7*e^15*k^13,c^9*d^27*e^2*f^4*h^2*k^8,c^14*e^5*g^13*h^4*j*k,e*f^2*g^4*h^12*i*j,d^4*e^4*h^4*i^3*k^13,c^2*g^9*h^11*i^3*k,c^4*d^19*g^3*h^16,d^22*e^18*f^5*g^4*k^2,e*g^23*h^4,e^7*g^3*i^4*j^14,d^16*h*j^16,c*f^7*g^3*i^3*j^6,c^10*d^9*g^2*i*j^10,c^13*g^8*i^5*k^8,c^14*d*e^21*h^7*j^2,c^15*d^19*f^5*g^2*j^2*k^3,e^30*h^10,d^3*f^9*i^11,d^17*h^7*i^9*j^4,c*f*g^4*i^13*k^8,c^2*d^9*e^10*h^14,c^26*e*f^4*i^3*k^8,e^28*f^3*i*j^5*k^2,c^8*e^16*j^9*k^3,c^13*d^9*e^8*f*j*k^6,e^17*f^5*i^9*k^2,d^24*e^4*f^11*i^4*j,d^7*e^5*h^5*i^7*j^3*k^3,c*d^17*f^3*i^6*k^6,c^8*d*g^5*h^5*i^6*j^2,d^49*h^3*j^6,d^28*e^4*g^5*i*k^4,d^59*f^6,b*d^12*e^13*f^4*g^2*i^12,b*f^2*h^9*i*j^5*k^10,b*c^6*e^16*h^3*i^4*j,b*c^11*d*e^8*f^7*i^3,b*c^20*d^15*h^7*i*k,b^2*d*e^4*g^2*h^2*j^6*k^8,b^2*d^2*e^23*g^12*j^2,b^2*c^7*d^26*e^3*g^11,b^2*c^11*f^2*h^4*j^5*k^8,b^3*e*h^6*k^13,b^3*f^4*h^11*k^8,b^3*c^5*e^3*i^14*k^4,b^3*c^30*e^7*g^4*h^5,b^4*d^9*f*g^8*h^4*k^6,b^4*c^18*d^7*h^12*i^6,b^4*c^41*e^5*g^3*k^2,b^5*c^4*e^7*g*h^16*j^5,b^5*c^17*d^14*e*f^10*i^6,b^5*c^24*e^2*i^9*j^2,b^5*c^29*d^7*f^2*i^8*k^2,b^6*d^14*f^2*j^13*k,b^6*e^6*f^5*g^15*h^2,b^6*e^11*i^20,b^6*c^15*e^5*j^10*k^6,b^7*e*f^9*h*i*j^10,b^7*f^23*j^2,b^7*c*d^47*g^3*h*i^7,b^7*c^3*f*i^3*j^4*k^6,b^7*c^5*d^11*f^7*h^5*j^6*k,b^9*g^6*i^6*k^4,b^9*c*e^23*i*j^3*k^9,b^9*c^3*d*e^10*f^3*h^3*j^5*k^4,b^9*c^13*e^5*f^5*g^3*j^2,b^9*c^27*f^3*g^2*h^2*k^4,b^10*d^12*e^17*j^6*k^2,b^10*d^9*f^5*h^10*i^4*k^4,b^10*c^2*d^5*e^10*g^2*k^11,b^10*c^14*g^16*k^2,b^11*d^20*e^6*f^2*h^3*k^2,b^11*d^14*f^10*g^7*h^3,b^11*c^2*d^7*f^2*g^12*h^2*k^2,b^11*c^25*e^14*k^7,b^12*c^14*d^20*e^8*f^2*g^3,b^13*d^39*e^2*f*g^3*h^3*i^2,b^13*d^4*e^17*f^6*h,b^13*e^10*g^5*k^5,b^14*d^5*g*h^7*i^6*k^5,b^14*c^8*d^18*e^3*j^7*k^4,b^14*c^19*f^2*i^13*k^2,b^15*d^26*i^4*j*k^4,b^15*c^8*d^20*f^5*g^8*i^3,b^15*c^31*e^7*f^2*j^4,b^15*c^43*k^9,b^16*d^10*e*f*i^15,b^16*d^10*e^5*g^2*h^17,b^16*c^18*d^2*e^14*g^5*j^5,b^16*c^19*f^4*h*i^6,b^17*d^2*f^2*k^20,b^17*c*e^11*g*h*i^2*j^7,b^17*c^6*d^10*e^3*f*g*i,b^17*c^13*e^4*g^6*i^4*j*k^4,b^17*c^55*f^4,b^18*d^8*h^8*i^10*j,b^19*d^66*e^4,b^19*e^3*h^5*j^9*k^2,b^19*d^29*g^11*i^4,b^19*f^14*j*k^5,b^19*c^25*d^8*e^2*g^7*h^3*j,b^20*f^2*h^12*i^4*j^3*k^2,b^20*e^11*g^4*h^6*i^7,b^20*c^4*d^2*e^3*f^7*g^4*i^6,b^21*g^6*i^3*j^11*k,b^21*c^4*f^2*g^4*h^7*j^3,b^22*e^3*f^6*g*h^10*i*j,b^22*d^2*e*g^18*j^4,b^22*f^4*h^14,b^22*i^17,b^22*c^16*d^16*e^12*f*h*i,b^23*d^10*f*g^14*h^7,b^23*d^20*f*h^3*j^12,b^23*c^3*f^9*j^2*k^7,b^24*e^12*h^12*k^3,b^24*c^5*d^5*e^4*i^10*j^6,b^25*c^8*g^6*j^8,b^25*c^10*d^3*j^5*k^11,b^25*c^10*d^4*f^5*h*j^10,b^25*c^13*f^13*g^6*k,b^25*c^22*g^5*j^4*k^2,b^26*d^8*e^8*g^3*h^12*k,b^26*f*g^2*h^3*i^6*j^2,b^26*d^12*f^7*h^8*i*j^4,b^26*c^10*d^5*g*h^7*i^3*k^2,b^27*g^16*i*j^3,b^27*c^20*e^9*j^3*k^5,b^28*e^18*h*i^4*j*k,b^28*d^2*e^5*f^3*h^6*j^3,b^28*e^10*f^11*i^3*k^4,b^28*c^8*h^5*i*k^5,b^29*d^13*e^12*g^3*j^4,b^29*d^6*e^5*g^8*k^3,b^29*d^37*g^2*h^3,b^30*c^18*e^9*g*h^3,b^30*c^32*d^3*h^7*k^3,b^31*c^26*e^2*j^10,b^32*e^5*g^11*h^3*i,b^32*c^5*e^3*f^14*i^6,b^32*c^14*d^8*i^4*j^4,b^33*c*d^19*g^4*j^5,b^34*c^24*e^2*f^2*i*j^2,b^34*c^38*d^16*h,b^35*d^2*f^8*g*j^7*k^3,b^35*d^9*e^27*j^4,b^35*c^10*e^4*i^14,b^36*d^11*f*g^7*i^4,b^36*c*e^7*f^9*j^2*k^4,b^36*c^15*f^7*k^8,b^36*c^36*d^6*e^11,b^37*g^7*h^5*j^9,b^38*e^8*f^6*h*k^6,b^38*f^14*g^4*h,b^38*d*e^27*i^2,b^38*c^11*d^25*e^7,b^39*c^2*e^10*f^6*k^4,b^42*c^9*d^6*g^2*h^12,b^44*e^13*i^2*j^7,b^44*e^5*f^5*i*k^2,b^44*c^3*d^4*h^3*j^3*k^3,b^46*c^13*e^4*g^4*h*j,b^46*c^18*f^7*g^4,b^47*c*h^8*i^4,b^48*c^12*i^6*k^4,b^51*c^7*d^9*h^2*i^7*j^2,b^52*d^36*e^3*f*i^2,b^52*e^2*f^3*g^3*j^8*k^2,b^53*c^17*f^2*g^3*i^4,b^56*d^17*f^2*h*k^2,b^57*c^6*e^11*f^3*h*k^3,b^59*e^2*g^2*h^13,b^60*g*j^5,b^61*d^7*f*i^7,b^61*c^26*f^4,b^62*c^13*d^7*f*g^7,b^65*d^5*e^9*k,b^71*h*j^3*k^7,b^73*c*e^6*g*j*k,b^84*d^6*e^4*g^2*i^2,b^106*d^4*f*g^3,d^30*e^8*f^3*h^5*i^2*j^4*k,c^4*e^14*f*h^14*k^2,d^3*e^3*h^2*i^4*k^14,d^8*e^9*g*h^12*j^6,c^4*d^18*e*f^9*g*h^5*k^3,c^8*e^7*f^6*g^3*i^4*j^3*k,d^8*f^8*h*i^12*k,d^19*e^5*f*h*j^10*k^3,d^12*g^3*i^2*j^4*k^12,e^9*g^10*j^2*k^6,d^27*f^3*g^4*h^3*j^4*k,d^35*f^5*h^10*i^2*k,c^21*d^4*g^16*k^4,c^3*d^9*e^2*g^6*i^2*j^9,d^17*f^2*g^2*i^10*j^3,d^9*e^25*f^5*h^6,c^38*e^15*f*j*k^2,c^6*k^22,c^13*d^15*e^11*g*i^2,e^20*f^4*h^2*i^13,c^11*e^2*f*g^4*h^12*k^2,c^17*e^17*g^3*i^10*j,d^4*f^3*h^19*k^2,c^5*d^5*e^6*i^18,d^11*f^16*j^5,c^5*h^3*i^2*j^7*k^6,c^10*d^4*f^8*i*k^9,d^30*f^15*g^4*i^2,d^13*g^9*h^3*i^5*j^2*k^4,c^29*d^2*g^5*h^5*j*k^4,c^3*g^2*h^8*i^7,e^4*g^16*h*i^2,c^11*d^7*i^5*j^14,c^3*d^7*e^13*f^2*h^11,c^15*d*f^10*g^3*h^11,e^33*g^9*k,d^18*e^20*g^3*h^4*j,c^4*d^42*g^2*h^8,c^14*d^5*g^22*h^3,c^9*f^3*h^2*i^10*j^6,c^21*g^3*h*i^12*k^2,d^26*e^7*f^6*i^5*k^3,c^33*d^5*e^10*j^7,c^45*e^3*j*k^9,c^21*d^13*h^4*i^5*j,e^7*f^5*j^10*k^7,i^2*j^4*k^16,c^8*d^24*e^6*g^4*j^2,c^10*d^55*h^2*j^4,c^13*d^34*f^8*g^4*k,d^8*e^15*g*i^11,c^43*e^3*g^2*h*i^4*k^3,d^7*f^7*g*h*j^4*k^5,g^6*k^14,c^6*d^16*e^6*g^7*h^2*i^5,c^8*e^15*f^8*h*i*k^6,e^6*g^4*h^13*j^4,f^13*g^4*h^6,d^13*g^3*h^17,c^4*f^7*i^7*j^8*k^5,d^16*e^23*f^2*g^4*k^6,d^10*h^2*j^19,d^3*g^2*h*j^13*k^4,c^9*d^5*e^18*f^5*h*k^6,f^6*i^10*j^3*k^3,d^21*f^4*h*i^7*k^7,c^28*f^9*i*j^2*k^3,c^3*d^3*e^13*j^4*k^10,c^15*f^6*g^9*j^3*k,d^11*e^2*i^5*k^10,d^12*f^16*i^2*j^3,g^5*h^6*i^5*j^5,d^26*h^11*j^7,c^3*d^5*f^8*g^5*i^4*k,c^13*e^24*f^2*g^2*j^2*k^4,c^27*d^11*e^4*g*k^8,c*e^13*f^4*i^2*k^4,c^3*d^26*f^10*h^2,c^10*d^9*e*h^8*k^5,c^15*d^19*f^2*h*k^8,d^5*e*f^10*g^2*j*k^15,d^6*e^20*f*g^12*k^2,d^20*e^8*g^11*h*j*k^3,c^2*d^30*g^11*k^6,c^33*e^5*h^13*i^2*k,d^45*f^9*g^2*h^2,c^4*d^8*g*i^8*j^12,c^8*e^19*h^7*j^4,c^20*e^12*g^4*h^6,c^25*d^3*e^4*f^6*g^4*k^2,d^3*g^8*h^5*j^3*k^10,c^8*d*e*h^13*i^5,d^22*f^5*g^14,c^19*d*i^7*k^6,e^8*f^3*i^18*k^2,c^2*h^4*i^16*k^3,c^8*d^43*f^2*g^7,e^6*f^6*h^2*j^13*k,d^5*f^4*h^6*j^9*k^5,c^26*d^6*e^5*j^5,c^31*d^16*f^9,c^38*g^5*i^2*k,d^16*f*g^4*j^10*k^3,c^12*e^7*g^2*h^2*i^13,c^14*d^14*h^7*i^8,c^17*f^5*g^2*i^12,e^2*f^5*g*h^2*i^3*j^8,g^6*h*i^5*j^2*k^8,d^24*f^3*h^6*j^4*k^3,d^32*e^8*f^2*g^5*h*i*j^6,e^17*f^10*j^11,e^9*f^24*j^3,c*d^25*e*g^10*i^3,c^3*e^10*f^2*g^3*j^5*k^4,c^5*f^8*h^4*j^7,c^8*e^2*f^16*g^3*k^7,c^13*d^18*g^15*i^5,c^17*g^2*h^3*j*k^8,c^50*d^14*g^6*h^2,f^10*h^11*i^2*j,c^24*e^5*f*g^3*h^5*i^5,e^24*i^3*j*k^11,d^14*e^11*h^4*j^3*k^6,e^6*f*g^13*i^2*k^2,d^7*e^4*h^3*k^15,d^8*f^7*g^7*h^4*j^2,d*g^12*h^3*k^6,d^15*e^30*g^3*i,c^15*e^19*h*k^11,c^18*d^49*e^2*f^2*g^2,c^27*e*f^4*g^9*h*k^2,b*c*e^10*f^8*g^6*h^4*i^4,b*c^4*d^14*e^13*g^3*j^3*k^4,b^2*d^6*g^2*i^8*j^9*k,b^2*e^22*f^3*h^2*j,b^2*e^15*g^5*h*k^9,b^2*d^22*e^2*f*h^6*k^4,b^2*c^2*f^3*g^19*h,b^2*c^9*e^3*f^5*i^2*j^12,b^2*c^23*f^3*j^8*k,b^3*d^6*e^11*f^5*h^9*i^3,b^3*e^4*g*h^8*i^5*k^9,b^3*e^5*f*g*i^15*j^4*k^2,b^3*f^7*i^10*j^6,b^3*c^9*i^12*k^6,b^3*c^10*d^6*g^12*j^9,b^3*c^13*e^19*f^2*h^6*k^5,b^4*d^27*e^4*f^2*i*j^10,b^4*d^14*f^2*g^8*i^2*j^3,b^4*c^21*e^12*j^7*k^4,b^4*c^35*d^9*j^3*k^8,b^5*c^9*e*f*h^2*i^5*j*k^4,b^6*d^4*e^8*g*j^2*k^2,b^6*d^35*f^4*j^4,b^6*c^5*d^18*h^6*j^6*k^3,b^6*c^8*f^6*g^15*j,b^6*c^10*d^28*k^6,b^6*c^45*e^3*f*j*k^2,b^7*e^17*f^2*i^11,b^7*d^12*h^2*i^8*k^2,b^7*c^31*e^5*i^4*k^7,b^8*d^23*e^4*g^11*i^3,b^8*f^11*j^4*k^9,b^8*c^6*e^19*f^2*g^8,b^8*c^20*d^12*g^7,b^9*e^8*f^4*g^4*i^5,b^9*c^3*d^10*g^3*h^11*i^3,b^9*c^8*d^20*f^2*g^3*h^4*i^2,b^10*d^2*f^21*h^2*j^4,b^10*g^4*h^8*j^6*k^4,b^10*f^13*g^4*h*k^7,b^10*e^14*g^3*i^8*j^7,b^10*c*i^21*k^2,b^10*c^2*d^17*e*f*i^3*j^9,b^10*c^9*e^2*g^2*i^6*j^11*k,b^10*c^18*d^2*e^28*k^3,b^11*f*h^15*k^4,b^11*e^3*i^16*j,b^11*c*e^25*h^9*i,b^11*c^6*d^10*e^17*h^2*k^3,b^11*c^37*i^7,b^12*e*j^19,b^12*f^6*j^5*k^11,b^12*c^24*e^5*g^9*i^2*j,b^13*d^9*e*f^7*i^8*j,b^13*c^12*d^2*g^5*i^10,b^13*c^61*f^2*g*i,b^14*d^50*e^6*i,b^14*e^5*g^6*j^11*k^2,b^14*f^2*h^2*j^13,b^14*c^5*d^7*k^18,b^15*g^2*h^4*i^5*j^5*k^2,b^15*f^12*g^2*i^4*k^5,b^15*c^12*d^23*e^10*f*i^3,b^15*c^19*d^7*g^6*h^3*i^3*j^3,b^15*c^26*e*f^17*k,b^15*c^35*f*h^6*j^4*k^2,b^16*e*g^16*j^6,b^16*e^12*i^16*k,b^16*d^34*e^17*g^6,b^17*e^10*h^7*j^6,b^17*d^6*e^2*f^14*k^3,b^17*e^5*f^2*g^9*h^2*i^2*j^3,b^17*c^3*f^6*k^12,b^17*c^10*g^8*h^6,b^18*g^22,b^19*d^15*e^6*h^7*i*j,b^19*f*i^8*j^12,b^19*c^8*e^14*g*h^4*k^3,b^19*c^10*d^4*e*f^2*h^9,b^20*d^15*e^8*g^9*h^2*j,b^21*c^4*d^2*i^3*j^7*k^2,b^22*d^13*e^3*g^4*j^8,b^23*d^21*i^6*j^2,b^23*c^14*e^7*j^5,b^23*c^19*f^13,b^23*c^28*d^10*h^2*j,b^24*e^9*i^13*k,b^24*c^2*f*h^5*i^8,b^24*c^15*d^21*g^10*j^2,b^25*d^5*e^3*g^7*i^3,b^25*c*g^12*i^5*k^3,b^25*c^3*d^29*g^6*h^2,b^25*c^26*e^16*k^3,b^25*c^38*f*g^3,b^26*c^24*g^5*h^2*i^7,b^27*f^11*g^4*h^2*j^2*k,b^27*e^32*i,b^27*d^5*e^24*f^8,b^27*c*d^19*e^12*k,b^27*c^13*d^13*g^13,b^28*c^24*e^16*h^5,b^30*d^11*e^12*g^2*h^5*i^3,b^31*f^6*g^5*i^2*j^3*k^3,b^31*e^3*g^2*h^13*k^3,b^31*c^14*d^15*e^6*i^4*j^4,b^32*e^3*f^5*i^5*j*k^8,b^33*e^10*f^2*j^2*k^6,b^33*d^15*f^8*j^4*k,b^33*f^10*g^12*j,b^33*d^8*k^10,b^35*c^3*e^9*g^4*h^2*j^4*k,b^35*c^5*d^13*h^7*j^6,b^35*c^8*e*f^4*g^4*k^4,b^36*e^5*h^10*i*j^4,b^36*h^9*i^3*k,b^37*c^2*i^5*j^3*k^8,b^38*c^3*d^5*f^2*g*h^12,b^38*c^6*e*f^10*g^7,b^39*c^9*e^2*j^11,b^40*c^9*g*h^2*i^8*k^3,b^42*d^3*e^12*f^5*i^3,b^43*d^28*e^7*g^2*j,b^44*c^19*d*e^11*h^3,b^46*c^18*d^9*i^8*k^2,b^47*e^10*f^3*g^6*j,b^48*c^18*f^5*h^2*j^2*k,b^50*d*i^6*j^2*k^4,b^50*c^2*e^9*f^3*j^5,b^51*c^3*d*g^7*j^2*k^2,b^52*d^16*f^8*h*j^2,b^52*d^9*g^3*k^2,b^52*c^26*f^5,b^54*e^14*k^5,b^54*d^30*e*f^2*h^3,b^54*c*f^4*g^10,b^56*g^5*i^8*j,b^57*c^8*d*f^2*i^6*j,b^58*d^12*e^7*i*j^2,b^58*c^7*d^5*i^3*k^7,b^63*d*f^2*h^12,b^64*c^17*d*f^2*g*h^7,b^69*e^2*h^3*i*k^5,b^69*c^9*f*h^3,b^70*d^2*g^13,b^73*e^9*g^2*h*i,b^87*c^2*e^8*j^4,d^25*f^9*j^8,c^12*d^18*f*g^2*j^2*k^9,d^29*f^2*h^11*i*j*k^5,c^10*e^18*f*g^3*h^4*j^2*k^6,d^11*g^2*i^9*j^6*k^3,c^30*f^2*h^2*j^5*k^3,c^5*d^19*f*g^8*h^2*i^3*k,c^3*d^9*e^16*g*i*k^4,c^15*d^3*f^5*g^15,f^5*j^2*k^13,c^7*d^14*e^9*f^6*i^9,c^7*d^3*f*h^7*j^10,c^12*d^13*f^15*j^2*k^2,e*f^19*h^3*i^3,e^2*g^2*h^9*i^6*j^2*k^4,d^11*f^3*h^14*i*j^4,c^3*e^13*f*g^9*h^7*i^3,c^5*f^7*g^3*h^12*j^2,d^12*e^25*g^3*h^5*j^4,c^4*g^22*h^4,c^16*f^12*g^2*j^7,c^25*d^9*g*j^11*k,h^3*i^9*j^9,c^11*g^3*h^2*i^11*j^3*k^6,c^23*e^15*j^10*k^4,c^11*d^7*e^4*h^5*i^4*j^4*k^4,d^4*e^23*f^7*g^5*i*j*k,d^18*e^11*g^4*j^5*k^2,c^3*d^28*e^3*f^5*g^4*k^5,d^26*h^5*i^7*k^2,c^21*e^15*h^3*i*j^2,d*e^3*f^4*g*h^2*j^7*k^9,c^22*d^26*e^2*g^10,d^41*f^3*g*h^8,c^45*e^6*g^3*h^5,c^3*h*i^20*j^3*k^2,c^9*d^41*f^8*i*j^4,e^3*f^10*g^4*h^7*k^3,e^40*h*i^2,c^39*e*i^6*j^3,f^3*i^9*j^6*k^7,c^18*f^6*j^5*k^7,d^6*f^13*h*i*j^6,f^5*g^5*i^3*k^5,c^28*e^4*f^10*g^2*j^3*k,d^47*e*j^4*k^7,e^18*f*i*k^8,d^20*e^5*f^7*h^3*j*k^3,d^4*f*g^6*h^10*j^8,c^3*f^9*g^12,c^5*d^13*h^2*k^12,c^5*d^14*f^15*g^6*h^3,d^2*g*h*i^7*j^15,c^15*e^9*f^3*g^4*k^6,d^2*e^13*h^15*i^2*j,e^6*h^14*i^4*k^3,c^3*d^5*f^5*h^7*i^3*k^6,d^2*e^11*f^4*i^4*j^6*k,c^6*d^16*h^3*i^2*j^10*k^2,c^9*e^4*i^6*k^10,c^11*d^26*f^2*i*j^2*k^5,c^23*d^20*f^10*g^7*j,d^10*f^6*i^12*k,d^37*g^7*j^3*k^3,c^10*d^10*e^4*f*g*h^17,f^3*g^10*h^2*j^9*k^5,c^16*e^10*h*j^8,c^21*d^10*e^2*f^6,c^28*e^3*g^5*i*j^2*k^5,c^33*d^3*g^5*k^8,c^4*d^8*h^8*i^7*j^2,c^9*d^18*f^8*h*i^6,d^4*f^16*g*i*j^3*k^6,d^18*h^7*j^7*k^7,d^19*e^6*g^10*h*i^2*j^3,e^11*g^16*i^6*k^2,e^2*f^5*h^5*j^10*k^3,d^29*f^5*g^10*i,f^19*j^2*k^6,f^7*h^12*i*j^4*k^3,h^11*i^3*k^12,c^7*d^8*e^20*f^4*i^4*k^2,c^14*e^10*g^3*h^6*i^4,c^19*d^2*e^2*f^12*g^3*i^3,c^28*d^16*g^2*h^10*i,d^2*f^4*g^7*h^5*j^5*k,g^12*h^4*k^10,d^19*e^27*f*g^3,c^8*d^43*e^7*g^2*k^4,e^2*f^11*h^10*j^2,c^13*f^5*i^14,g^2*i^7*j^12*k^5,e^27*h^3*j^4*k^4,d^16*e^7*h^7*k^8,c^13*j^11*k^5,e^16*f^2*h^10*i^2*k^4,i^11*j^3*k^10,c*f^2*h^5*i^6*j^5*k^5,d^8*g^8*i*j^6*k^3,e^18*f^2*g^6*h^5*k^2,c^2*d^32*g^7*h^2*j^2*k^7,c^14*d^56*f^2,c^37*f^2*g^4*j^5*k^3,e^15*g^2*h^19,d^4*e^5*f^20*i*j^2*k^2,e^8*f^8*g^2*i^6*j^7,e^6*h^3*i^4*j^4*k^8,c^4*f^28*j,c^9*e*g^7*i^8*j*k^4,c^11*f^6*g*h^3*i^3*j^3,c^25*d^5*f^4*h^7*k^3,e^13*g*j^5*k^6,d^29*f*h*j^7*k,d^8*e^5*f^9*g*k^9,f^3*g^15*j^4,d^22*j*k^10,c^12*d^16*f*g^14*k,c^35*e^8*j^4*k^6,d^6*e^2*h^3*i^7*k^6,c^9*e^17*f^2*h*i*j^2*k^2,c^11*d^2*e^4*f^8*h^6*j^4,c^23*h^5*k^6,d^48*g^5*h*j^2,e^24*g^8*j^3,c^10*d^6*e^4*g^7*k^4,c^12*d^37*f^3*g*h^3*j,d^21*f^7*h^6,e^5*f^15*g^4*i^3*k^3,e^6*g^9*i^6*k^9,c^5*f*i^7*j^11*k,c^29*f*g^2*i^8*j^4*k,e^3*f^18*h^3*j^7*k^2,f^10*g^4*h^2*j*k^11,d^3*e^40*f*j^4,c^6*d^35*j^8*k^3,c^10*d^27*e^20*h*k^2,c^21*f^6*h^10*i^3,c^41*e*f*j^11,h^16*j^3*k^8,d^11*e^29*f^3*h^4,d^12*i^12*k^8,d^4*e^22*h^3*k^7,d^35*e^9*f*h^8*k^2,c^3*e^12*g^10*h^10,c^8*e^4*f^3*g^10*h^3,c^20*e^2*f^19*i^3*j,c^27*e^3*i^6*j^3*k^4,c^29*d^8*f^3*i*j^5,b*i^23*k^4,b*c*e^12*f*i^17*j,b*c^2*e^17*f^2*g^4*j^10,b*c^3*f^7*h^2*i^12*j^3,b*c^15*h*i^14*k^4,b*c^16*d^19*g^3*j^6,b*c^28*d^12*g^8*k^6,b^2*d^3*e^6*f^4*i^7*j^4,b^2*c^2*g^5*i^9*k^2,b^2*c^4*d^27*f^2*i^4,b^2*c^27*e^19*j^4*k^2,b^2*c^37*e^14*f*g^2*i^3*j,b^2*c^39*e*f^7*j^3,b^2*c^51*g*k^2,b^2*c^53*d^16*f^5*h,b^3*h^3*j^16*k,b^3*c^15*d^6*e^8*f*h^4*i^7*k^2,b^3*c^25*e^3*f^3*i^11,b^4*f^17*i*j^6,b^4*f*h^10*j^10*k,b^4*f^9*g^2*i^3*k^9,b^4*g*h^9*i*j^4*k^10,b^4*d^3*f^7*g*h^2*k^13,b^4*c^2*d^17*e^15*i^2,b^4*c^4*d^48*e^2*f^4*h^2*j,b^4*c^14*d^11*f^6*g^6*i,b^4*c^16*d^41*h*k^4,b^4*c^26*d^4*g^11*i^3,b^4*c^51*d^6*e^10*f,b^5*c^3*d^52*e^2*g^5*k^2,b^6*d^36*e^11*g^2*i^5,b^6*f^5*g^3*h^8*j^8,b^6*f^3*k^16,b^6*g^8*h^7*j^2*k^4,b^6*c^2*d^8*f^3*g^2*h^12*j^4,b^6*c^8*d^9*g*i^12*j^5,b^6*c^12*d*e^26*f^2,b^6*c^26*d^25*e^6,b^7*e^23*h^9*i^8,b^7*d^5*f^2*j^23,b^7*e^28*g*i^12,b^7*d^9*e^15*f^4*h^2*i^7,b^7*c^12*d^2*e^8*h*i^9*k^3,b^7*c^23*f^4*g*h^12,b^8*d^19*e^3*f^10*h*k^5,b^8*d^12*f^2*g^4*i*k^14,b^8*i^7*j^15,b^8*e^18*f^15*k,b^8*e^6*h^10*j^3*k^2,b^8*c*d^44*e^2*g^8,b^8*c^10*e*f*g^15*h^5,b^9*e^15*f^3*h^13*i^2*j,b^9*d^6*f*h^17*k^2,b^10*e*h*i^2*j^10*k^6,b^10*d^6*f^6*i*j^2*k^9,b^10*c^11*f^14*g^4*j,b^10*c^20*d^14*g^3*h^5*j^5*k,b^10*c^24*d^6*f*g*h^12,b^10*c^30*d^7*e^12*i^4,b^11*d^17*f^3*g^4*j^3*k^7,b^11*e^6*f^5*h^15,b^11*c^13*d^5*e^9*h^2*i^13,b^11*c^18*d^15*e*i^12,b^12*d^15*h*i^5*j^5*k^4,b^12*d^25*f^5*i^4*k^7,b^12*c^4*e^12*j^8,b^12*c^6*d^11*f^2*h^4*j^10,b^12*c^9*e^4*f^10*k^3,b^12*c^18*d^4*h^3*j^4*k^4,b^12*c^28*g^16*j,b^13*d^5*f^20*i^4,b^13*e*h^6*i^7*j^2,b^14*e^8*g^7*i^2*j^3,b^14*d^30*f*g*h^4*j^5,b^14*d^9*f^9*g^7*i*k,b^14*d^23*g^6*h^3*k^2,b^14*c^28*e^3*g^3*h*j^2,b^15*d^9*e^17*h^9*j^3,b^15*c^7*e^4*f^16*i^3,b^15*c^14*e^5*g^5*h^3*i^6*k^3,b^15*c^16*h^8*i,b^15*c^21*d^6*f^14*h*k,b^16*d^13*e^17*h*k^5,b^16*c^3*d^7*g^13*h,b^16*c^27*f^5*i^3*j*k^5,b^17*c^14*e^21*h^6*k,b^18*d^36*g^2*i^2*j^6,b^18*c*e^28*g^6,b^18*c^34*d*f*j^9,b^19*d^5*e^17*g^2*h^6*i^2,b^19*c^20*g*i^9*j,b^19*c^34*d^2*h*i^6,b^20*d^5*e^15*g*i^4*k^6,b^20*c^9*d^20*g^9*j^4,b^21*c^20*e^14*i^2*j^2,b^21*c^32*f^7*g^2*i*j,b^22*d^2*j*k^14,b^22*c^7*d^10*e^21*g^2*j^3,b^23*d^18*e^10*i^5,b^23*c^7*d^11*e^3*g^3*i^7*k,b^23*c^44*d^7*e^5*f*h^2,b^23*c^56*h*k,b^24*e^13*f^9*j^5,b^24*e^6*f*g^4*k^8,b^24*d^17*f^7*h*j*k^3,b^25*d*e^2*f^11*h^4,b^25*d^15*h^15*j^3,b^26*d^5*e^2*g^14*k^6,b^26*d^15*j^8*k^7,b^27*e*g*h^13*j,b^28*e^7*j^14,b^28*c^4*f^4*j^6*k,b^28*c^16*g^5*k^10,b^29*h^4*i^5*j^8,b^29*d^7*f^6*i^4*k,b^29*c^4*g*i^6*k^10,b^30*d^18*f^3*g^10*j,b^31*e^17*f^2*i^2*k^4,b^31*d^28*e^4*f^8*j,b^31*c^2*f^10*g^3*i,b^31*c^4*d^21*k^8,b^31*c^11*d^5*g^2*h^6*j^2,b^33*d^16*e^13*f*i^5*k^2,b^33*c^9*e^16*h^4*j,b^33*c^14*d^5*e^8*f^4*k^2,b^35*d^24*e^4*f^3*g^5,b^35*c^8*d^3*e^3*i^7*k^6,b^37*f^4*g*i*j^9*k,b^37*c^27*d*e^2*i^2*j^2*k,b^37*c^32*d^11*i*k^4,b^38*c^6*e^3*f^3*i^12,b^39*d^37*f^6*g*i^2,b^39*c^2*d^20*g^6*i^5,b^40*c^25*e^2*h^2*i^7,b^41*d^3*g^3*h*k^6,b^41*c^16*e^5*f^2*j^2*k^2,b^43*e*f*g^10,b^43*c^12*f*j^11*k,b^45*d^16*i^2*j^6,b^45*d^8*e^17*f^3*h^2,b^46*e^5*i^5*j^4*k^4,b^46*c^8*f*i^9*j,b^46*c^22*i^6*k^4,b^47*f^4*g^6*j^4,b^47*d^30*j*k^6,b^48*d^14*e*i^8*k^2,b^48*c^22*d^3*f*h^2*k^2,b^49*e^23*j^3,b^49*c^9*d^14*e^3,b^50*e^12*f^2*i^5,b^52*c^2*e^11*g*h^7,b^52*c^7*d^6*e^3*f^4*g,b^53*c^13*e^9*i^2*j^4,b^54*c*d^4*i^10,b^55*j^16,b^58*e^9*i^2*j^6,b^58*h^4*j^2,b^59*g^13*j^3,b^60*e^18*h^2*j*k^3,b^65*h^3*i^8*j^2,b^66*g^3*i^5*k^3,b^66*d^31,b^68*c^2*d^15*g^4,b^76*e^5*f^2*k^4,b^80*c^15*k^6,b^85*c^20*h,b^95*f^2*g,d^4*f^4*g^5*h^5*i^4*k^7,c^6*e^16*f*i^2*j^12*k^3,c^20*h^3*j^8*k^7,d^13*g^8*h^3*i^2*j^3*k^5,c^18*f^5*g*h^8*i^4*k,d^3*e^21*g*h*j^2*k^8,c^5*e^3*f^2*g^15*h*j,f^2*j^5*k^17,c^23*d^24*e^5*g^3*j^3,d^8*e^14*f^3*i^8*j,c^11*d^32*f*h^4*i^5,c^58*e^2*g*h*i*k^4,d^43*e*g^13,c^15*d^14*g*i^13*j^2,h^4*i^8*j^12*k,c^6*d^12*f^21*j^4,c^18*d^5*f^13*g^4*i*k^2,e^9*h^11*i^8*k^2,d^4*e^16*g^7*h^4*i^3,d^35*e^3*g*h^9*j^2,f^2*g^21*h^4*i^2,c^35*e^11*g^3*h^6,c^23*d*h^13*i^2,c^34*d*f^4*i^4*k^7,d^27*e*f^11*g^3*i^5,c^6*d^41*g^2*h^2*i^3*j^3,c^41*d^6*e^4*j^6,c^53*g^4*k^2,e*f^10*h^2*j^9,f^2*g^5*h*i^2*j^3*k^9,c^4*d^31*e^18*i*j^2,c^16*d^25*g^9*j,f^31*i,c^6*f^9*h^6*i^4*k^5,g^6*h^11*j^11,d^8*f^12*g^6*h^4*j^3,e^38*h*i^9,e^21*f^8*h^2*j^2*k,c^3*d^30*f^3*i^2*j^6*k^6,f^4*g^9*h^16*j^3,e^3*f^2*h^8*i^2*k^10,c*d^20*j^5*k^9,c^13*d^14*f^7*g^7*j^4,d^4*e^9*g*h^18,c^24*f^6*h^2*i^2*j^2*k^5,d^46*f^6*i*j^6,d^39*g^3*i^3*k^7,c^6*e^15*h^2*j^11,c^11*d^4*e^7*f^3*j^3*k^3,c^13*d^35*f^9*j^5,c^23*g^5*k^12,e^16*f^7*i^8*j,e^9*g^2*i^10*k^8,c^11*d^5*g*h*i^7*k^12,d^2*e^25*f*i^3*k^6,c^9*e^7*f^9*g^3*i^2,c^18*d^10*g^2*h^11,c^21*f*g^8*i^4*k^6,c^29*d^10*g*i^2*j^4*k^5,f^6*h^15*j*k^5,c^3*e^2*f^2*i^13*j^2*k,f^5*j^20,d^29*e^12*f^2*g^5*h^2*k^2,c^22*e*g^4*i^8*j^4,d^9*f^4*g^3*j^15,d^2*g^8*j^9*k^7,c^4*d^50*e^5*k,c^13*e^4*f*g^5*j^12*k^3,f^25*j^4,c*f^3*g*h^4*i^2*j^6*k^3,c^3*d^6*f^9*h^9*j^8,c^15*f*h^8*j^2*k^7,e^25*j^14*k,d^23*e^5*h^2*j^10*k^5,g^15*j^7*k,d^32*e^13*g*h^3*i^4,e^22*h^2*j^5*k^6,c*e^9*f^5*h^7*j^7*k,c^6*d^6*e*f^19*k^4,c^11*e^4*f^7*g^8*h^2*j^4,d^5*g^25*j^2,d^4*f^7*h^14*i^3*j*k,e^9*g^7*j^2*k^8,c^2*d^31*g*h^4*j^4*k^3,c^12*f^2*g^21*j,e^18*g^4*h^2*i^3*k^4,d^15*e^5*f^4*h^7*j^2,d^8*g^3*h^6*k^8,g^17*h^13*j^3,d^2*f^4*g^17*h^6,c^7*f^6*i^5*j^13,c^23*e^13*f*h^4*k^4,e^9*f^11*h^12,d^8*f*g^2*i^2*j*k^15,c^8*d^23*f*g^10*j^10,c^10*e^20*g^14*k^2,e^9*g^10*h^4*k^2,c^5*e^15*f^2*i^3*j^12,c^19*d^2*j^8*k^3,e^4*f^4*h^3*i^11*j^6,c^6*d^13*e^2*g^3*j^9*k,e^11*f*i^6*j^7,d^7*e^3*f^15*i^5,e^4*g^5*i^8*j*k^6,d^21*i^3*j^3*k,d^13*e^25*f^2*h^7,c^4*f*g^19*i^7,c^41*g*k^6,c^15*e^8*i^10*k^2,c^17*f^6*h^5*i^5,d^11*e^20*i*j^2*k^4,d^42*e^7*f*h^3*j^4,c*d^26*h^10*j^11,c^2*e^15*g^12*i^5,c^4*d^5*e^2*f^3*g^6*j,c^6*d^35*h^2*k^8,c^16*g^11*i^2*k^4,c^15*e^24*f^2*h^3*i^3,f^16*g^3*h^2*j^3*k^2,d^3*g*i^11*j^8,c^2*e^31,c^16*d^19*e^11*k^2,c^26*e^6*g^18,c^47*i^2*j^7,f^4*h^16*i^3*j^5,j^26,d^3*e^20*f*h^3*i^6,d^18*f*g^3*h^15*i*j^3,c^2*e^13*h^2*i^8*k^7,c^2*e^2*f^9*g^9*h^3*i^5,c^4*d^27*h^7*i^3*k^2,c^13*f*g*h^13*j^2*k^4,c^35*f*i^10*j,d^6*e*g^4*h*k^18,d^38*e^7*g^8,d^2*e^3*f^10*h^4*k^9,c^2*f^4*g^9*h^11*j^5,c^22*d^11*g^7*i^5*j^2,h^18*k^6,f^2*g^4*i^16,c^9*d*e^19*g*h^12*i,c^14*d^11*e^11*f^3*g*h^5,d^67*i^4,f^3*j^5*k^13,g^4*h^2*j^12*k,c*f^11*g^4*j^4*k^4,c^14*e^2*g*h^13*k^4,c^20*d*e^17*i^3*j,c^22*d^32*e^4*j^3,c^8*d^9*e^6*i^11,c^12*e^2*f^10*i^2*j^2*k^9,c^24*f^18*i*j,c^33*d^11*e^26*i*j,c^57*e*i^2,b*d^19*f^2*i^3*k^11,b*d^5*e^4*h^5*j^13,b*d^51*g^4*i,b*e^9*f^7*j^3*k^7,b*c^4*d^34*e*g^9*i^4,b*c^6*f*g^11*j^10,b*c^8*h^4*j^7*k^8,b*c^11*e^2*g^2*k^16,b*c^11*f^15*g^11*j^2,b*c^44*d^9*e^8*g^6,b^2*e^5*f^17*h*i^3*j^3,b^2*c^8*f*g^6*h^11*i^2,b^2*c^18*e^17*g^3*i^8,b^2*c^32*d^17*g^2*i^5,b^3*c^6*d*e^6*f^2*h*i^16,b^4*d*e^2*g^3*h^7*i^9*k^2,b^4*e^17*h^5*i^3*j^3,b^4*e^4*f^5*h^10*j^5,b^4*e^9*f^13*i^2*k,b^4*d^7*f^19*h^3,b^4*c^6*h^9*k^2,b^4*c^8*d^21*f^3*h^14*j,b^4*c^11*f^11*h^2*k^5,b^5*d*e^4*g^13*h^2,b^5*d^32*g^7*h^7*j^2,b^5*c^5*e^2*f^10*j^10,b^5*c^14*d^11*j^14*k,b^5*c^17*f^2*i^2*j^4*k^9,b^6*h*i^9*j^12,b^6*c^6*d^11*e^13*h^12,b^7*d^30*g^2*i*j^9,b^7*c^24*e*j^12,b^8*e^22*g^2*h^7*i*k^3,b^8*d^9*e^14*f^6*g^2*k^6,b^8*e^4*g^16*h^7,b^8*c^10*e^3*g*i^8*j^4,b^8*c^12*d^3*h^3*i^3*j^6,b^8*c^24*h^2*i^5*k^4,b^9*d^30*e^7*f^3*k^5,b^9*h^5*i^16,b^9*d^13*e^8*i*j^2*k^11,b^9*d^14*g^9*j^7,b^9*c^4*d^23*k^14,b^10*c^10*e^19*h*i*j^5,b^10*c^15*d^3*e^11*f^10*k,b^10*c^34*g^7*i^2,b^11*j^4*k^18,b^11*d^4*e^26*g^2*j^6,b^11*c^21*e*g^21,b^12*d^12*e^15*h*i^4,b^12*d^5*e^8*g^3*i^6*k^5,b^12*d^6*f^3*g^12*h*i^3,b^12*e^6*f^11*g^5*j^4*k,b^12*c^2*d^15*f*g^3*i^5*k^8,b^12*c^9*g^17*i^5,b^12*c^34*d*e^10*h^3,b^13*c^2*d^4*g^3*h*k^16,b^13*c^22*d^9*h^10*i^3,b^14*e^26*g^5*i,b^14*d^6*e^18*f^13*g^5,b^14*c^7*e^19*g^10*i^3,b^14*c^9*d^20*e^6*g^4*h^3,b^15*d^3*f^5*g^7*j^10*k^2,b^15*e^9*f^8*g^5*j^2*k,b^16*e^6*g*h^14*j^4,b^16*d^3*f^10*g*h^7*k,b^16*d^4*e^13*f^6*i^11,b^16*c^7*f^4*j^8*k^7,b^16*c^52*d^7,b^17*e^4*f*j^9*k^5,b^17*d^3*f^15*j*k^8,b^18*d*f^3*i^3*j^3*k^5,b^18*c^7*d*g^7*h^16,b^18*c^29*e*k^10,b^19*c*d^10*e*g^2*i^14,b^20*e^4*f^7*g^3*j,b^20*d^15*e^2*k^12,b^20*c*g^2*h^7*j^5,b^20*c^6*d^9*f^5*g^2*k^3,b^22*d^10*e^18*i^4*k^6,b^22*d^34*i*k^10,b^22*c^4*e^13*f*k^6,b^24*c^7*d^12*h*i*j^12,b^24*c^10*f^2*g^4*i^5*j^2*k,b^24*c^12*d^22*f^8*j^4,b^24*c^19*d^5*g^3*i^3*j^6*k^2,b^25*d^2*g^18*j^3,b^25*f^4*i^13*k,b^25*c^2*e^13*f^7*h^3,b^25*c^11*d^5*e*h^14*k,b^25*c^23*d*f^7*i^3*j^2*k,b^26*c^10*d^12*e^6*f^4*j^3,b^26*c^22*d^5*k^8,b^27*c^5*d^4*g*h^6*i^6*j^4,b^28*d^31*e^2*f^3*g*i,b^28*c^41*d^3*g^2*k^3,b^29*c^3*e^14*h^4*i^4*j^3,b^29*c^8*d^4*e^6*f^10*i^3,b^29*c^20*f^2*i^5*k^2,b^30*d^4*e^2*f^2*h^3*j^8*k,b^30*c^4*d^29*e*g^7*h,b^30*c^7*d^8*e^6*g^13,b^31*f^15*k^9,b^31*c^27*d^2*e^5*h^6,b^31*c^39*g^5*h^5,b^32*e^6*g^10*k^4,b^32*d^12*f^4*g^4*h^5*j^2,b^33*c^4*e^10*f^5*g^3*h^5,b^33*c^21*i^9*j^4,b^34*d^2*e^22*h^3*j*k^2,b^34*c^12*e^3*f^2*j^12,b^35*f^4*h*i^3*j^6,b^35*c^12*i^5*k^8,b^36*f*g^6*j^7,b^37*e^21*i*j^5*k^2,b^37*c^22*g^4*i^2*k^2,b^38*d^8*e^8*j^2*k^4,b^39*e^17*i^4,b^39*d^16*h^3*i*k^4,b^39*c^22*e^12*f^2*h,b^40*d^27*e^4*g^8*k^2,b^40*c^23*d^16*g^4*k^2,b^41*e^8*f*g*h,b^41*c^6*d^14*h^12,b^41*c^9*e*g^6*k^7,b^43*e^3*i^9*j*k^2,b^43*c^40*k^2,b^45*c^3*d^13*e*f^4*i*j,b^45*c^15*d^6*g^2*i^3,b^46*e^3*i^14,b^46*c^3*d^14*h*i^11,b^47*h^5*j^5*k^4,b^47*f^9*k^7,b^48*e^9*h^7*i^7*j,b^49*e^5*g^6*h^3*j^3,b^51*i*j^12,b^56*c^5*h^6*i,b^57*d^9*e^3*g^4,b^58*c^27*g^2*h^3*k,b^68*h^10*k^3,b^74*c^10*e^2*h^2*j^3,b^84*e^5*g,b^93*d^8*e^7*f^2,d^11*f^4*g*i^6*j^7*k^4,c^18*d^9*e^15*f^2*k^5,c^19*f*g^21*h^4*k,c*d^4*e*f^2*g^11*i*j^11,c*d^26*h^5*i^4*k^3,c^54*i^3*j^4*k,c^3*g^4*h^7*i*j^9*k^3,c^8*f^10*g^4*j*k^6,c^13*e^5*h^14*i*k^4,d^21*e^6*f^8*g^3*i^4*j^2,d^35*g^2*h^3*i^2*j^6*k,d^14*g^8*i^6*k^9,c^31*e^9*h*j^9,c^6*d^19*e^5*g^9*h*j^4,c^29*e^9*f^3*g^2*h^6*i*j,f*g^11*h^4*k^11,f^2*g*i^4*j^13*k^6,c^3*d^8*f^4*g^7*j^7*k^4,c*e^12*j^6*k^7,d^6*e*f^2*h^3*i^4*k^7,c^25*d^6*e^3*f^2*g^6*k^5,e^12*f^6*g^3*h*i*k,c^8*d^4*g^2*h^12*j^2*k^2,c^13*d^14*f^4*g^2*h^5*k^5,c^7*d^11*e^5*f^3*j^13,c^17*f*g^4*i^6*k^3,d^20*e^30*j^7*k,h^8*i^15*j,c^4*d^7*e^5*g^18*i*k,c^5*d^4*f^3*h*i^14*k^3,g*h^5*i*j^9*k^7,f^14*g*j*k^10,c^5*h^9*j^5*k^11,c^12*d^9*g*h^11*i^7*j,d^36*e^10*f^2*g*i^2,c*d^50*h^8,c^39*e^18*g^3*k^4,c^27*d^2*e^7*f*h*i^6*k^4,d^2*e^3*g^3*h^7*k^12,f*g^17*h^7*k^3,f^3*i^4*j^16,c*e^7*h^12*i*k^8,d^17*e*f^3*g^4*h^10*k,c^9*h*j^11*k^7,c^10*d^42*g^2*i^7*k,c^7*f*g^5*h^3*i^11*j^2*k^3,e^16*i^5*j^10*k,d^15*h*i^2*j^6*k^5,d^8*g^4*i^4*k^14,c^19*e^11*f*j^9*k,e^5*h^4*i^13*j^4*k,d^5*f^25*i*j,c^7*f^3*h^6*i^4*j^3*k,e^7*g^6*j^4,d^9*f^14*g^6*k^2,c^6*g^11*i*k^8,c^8*d^23*g^5*h^3*k^3,d^7*f^2*g^2*h^6*i^7,c^29*e^4*g^4*h^3*i^3*k^4,c^31*f^5*h^8,e^2*g*i^10*j^11*k^3,e^36*j^3*k^2,c^6*d^13*e^16*h*k^6,e^25*h^4*i^5*k^2,e^7*f^6*g^9*h^4*i^4,d^21*e^5*h^8*i^2*k^6,c^13*d*f^6*i^7*j^10,c^25*i^9*j^4*k^3,c^29*e^20*f*h^6*k^2,c^12*d^5*g^7*i^4*j^5*k,c^14*d^36*f*g*j^7,d^13*g^3*i^12*k,c^4*d^5*e^16*g*h^6,c^35*f^2*i^6*j^2,c^49*d^2*h*i^3*k,c^10*e^22*i^2*j^4*k^4,c^12*d^26*e^9*j^6,c^22*e^4*g^14*i*j^3,d^3*e^11*i^10*k^4,d^34*h^2*i^5,c^47*e^6*i*k^4,d^13*i^2*j^3*k^15,d^45*e^5*g^4*j,c^3*d^2*f^2*j^2*k^15,c^10*d^18*e^9*f^3*i^2,c^17*d*e^10*g^2*h^6*i^5,c^22*d^11*e^2*g^2*i^4*k^2,c^57*e^17,c^71*h*k^2,d^28*f^9*g*j^3*k^4,i^2*j^22,e^11*h^2*i^15,c*e^12*f^14*j^6,c^10*d^7*h^8*j^10*k,c^13*e^5*f^6*g^3*k^9,d*e*f^16*h^4,e^2*h^10*j^2*k^6,d^15*h^15*j^4*k,c*f^8*h^3*k^9,c^8*f^2*g^13*h^10*j,c^32*e^13*g^9*i,e^7*f^7*j^13*k^4,c^7*i*j^7*k^13,d^3*g^9*h^10*i^2*k^4,d^51*e^14*h^2,c^6*e^13*g^6*h^8,c^8*f^4*h^13*j^2,c^2*d^8*e^4*f^2*i^18,c^6*f^16*i^9*j^4,c^14*e^6*j^15,c^19*f^9*j^7*k^2,c^31*f*g^4*j*k^11,d^8*h^2*i^11*j^10,d^3*e^19*f^3*g^2*h*k^10,e*f^11*g^16*h*k,e^15*i^5*j^13,d^13*e^5*f^3*i^2*j^2*k^11,c^2*h^4*i^2*j^9,c^5*f^5*g*i^6*k^7,c^6*e^29*h^11*j,c^7*d^7*f^11*i*j*k^2,d^8*e^2*g^9*j^10,e^7*f^2*g^15*i*k^5,d^18*f^8*g^9*j^2,c^3*d^32*g^8*h*j^6*k,d^16*g^5*h^4*i^5*j^4,d^26*f^10*g^5*i^4,c^5*e^16*f^7*k^5,c^7*d^28*e^3*f^13*j^2,c^17*f^15*g^2,c^26*d^5*g*h^6*j^3,d^8*e^23*f^4*g^2*j*k^3,c^5*f^17*h^2*i^6,c^14*d^13*f*h^13*i^4,c^47*e^3*h^6*i^3,b*d^6*e^20*h^2*i^3*j^3,b*d^16*e^12*f^6*i^2*k^3,b*e^2*g^12*h^2*i^2*j^2,b*d^30*h^6*k^4,b*d^9*e^5*g^3*i^4*k^12,b*g^17*h*i^4,b*c*d^24*g^11*h^6,b*c^11*f^8*i^9*j^6,b*c^20*d^3*i^7*j^10*k,b*c^24*e^15*h^4*j^2,b^2*d^5*e^3*f*h^3*j^7*k^11,b^2*e^24*h^7*i^5,b^2*c^12*d^3*e^4*h^11*i^2,b^2*c^24*f^5*g^4*h^11*i,b^3*e^31*g^5*j,b^3*e^23*f^10*g^5,b^3*d^14*e^11*g^4*h^4,b^3*c^4*d^24*e^3*f^8*g^4*k,b^3*c^23*d^3*e^2*f^2*i^4*j*k^7,b^4*d^24*g^8*h^3*j^2*k^9,b^4*d^22*h^11*i^5,b^4*c^4*d^13*f^3*g^4*h^5*j*k^9,b^4*c^10*d^14*e^9*g^3*j^2*k^5,b^4*c^34*e^8*g^2*h^8*i*k^3,b^5*e^3*f^7*g*h^8*k^5,b^5*d^12*e^6*i^8*j^4*k^2,b^5*d^4*e^40*h^2*k,b^5*d^22*f*i^7*k^5,b^5*c^9*f^9*j^10*k^2,b^5*c^42*d*e*j^3*k^2,b^6*c^16*e^10*i^10*j,b^6*c^30*d^9*h^4*i^7*k^2,b^7*i^2*j^6*k^9,b^7*c^3*e^17*g^6*i^5*j^2,b^7*c^5*d^27*e^4*j^4,b^7*c^8*d^6*e^9*f^5*g^6*i^4,b^7*c^17*d^20*g^5*i^2,b^7*c^19*d^51*h^2,b^7*c^52*e^12*g^2*j,b^8*d^4*e^6*g^2*i^13,b^8*e^2*f^7*h^4*i^4*j^3*k^5,b^8*c^8*g^6*j^6*k^7,b^8*c^40*e*h^2*i^4,b^9*d^14*g^6*i^5*j*k^7,b^9*e^9*f^4*g^3*j^4*k^3,b^9*d^10*f^10*h^2*j^6,b^9*g^2*h^8*j^8*k^4,b^9*d^3*f^2*g^2*h*k^7,b^9*c^15*d^10*e^26*k^3,b^9*c^27*d^4*e^8*g^12,b^10*c^3*d^19*e^4*f^3*g^3*h^3*i^5,b^10*c^14*e*h^13*j^5,b^10*c^15*d^12*g^8*h^2*i^7,b^10*c^17*e^6*f^3*g*h*i^3*k^8,b^11*e^18*k^10,b^11*c^6*f^6*g^9*k,b^13*d^19*e^21*f^5,b^13*d^6*h^2*j^15,b^13*g^4*i^4*j^5*k^5,b^13*c^2*d^16*f^5*j^7,b^13*c^14*d^9*g^3*i*j*k^9,b^14*f*i^12*k^5,b^14*e^18*f^4*h^4*k^4,b^14*c*e^6*h^15*k^5,b^14*c*f^4*g^6*h^16,b^14*c^13*e^4*f^4*i^2*j^5*k^5,b^14*c^37*f^4*i^3*k^5,b^15*d^6*e^11*f*j^6*k^3,b^15*c^12*e^4*k^12,b^15*c^12*f^9*g^5*j^5,b^15*c^24*f*g^10*k^3,b^16*d^14*f^3*i^5*k^3,b^16*d^8*f^11*g*i^4,b^16*c^7*g^6*h^6*i^7*j,b^16*c^12*d*f^3*g^6*i^6*k^3,b^17*d^25*e^7*g*j*k,b^17*d^18*g^6*i^2*k^10,b^17*d^49*k^5,b^17*c^10*e^22*f^5*j^4,b^17*c^24*d^14*e^2*f^3*k,b^18*e^11*f^7*i^2,b^18*c^5*e^12*h^4*i^5*k^3,b^18*c^7*d^12*h^9*j^2,b^18*c^10*e^4*i^4*k^6,b^19*d^2*e^11*g^13*k^4,b^19*c^18*d^12*i^2*j^7*k^5,b^20*c^17*e^10*h^7,b^20*c^22*d^6*e^2*f^9,b^20*c^34*f*g^5*k^4,b^21*d^6*f*g^4*h^6*j^5*k^3,b^21*c^28*e^8*j^5,b^22*d^15*e^2*i^16,b^22*d^31*e^16*k^2,b^22*e^15*f^2*g^3*h^6*k^4,b^22*c^16*d^4*f^2*i^7,b^23*c^3*d^15*e^4*g^9*i^2,b^24*f*h^2*i^2*j^9*k^3,b^25*e^4*g^6*j^10*k,b^26*g^2*h^2*i^5*j^4*k,b^26*d^28*g^6*h*i^3*j^2,b^26*e^8*f^5*j^7,b^26*c^5*f^19,b^26*c^14*f^3*h^4*j^3*k,b^26*c^38*d^2*e^17,b^27*c*g^12*j^4,b^28*d^4*f^2*g^8*h^4,b^28*c^12*e^17*h^2*j^2*k^4,b^29*c^13*d^10*e^4*g^4*k^6,b^30*e^6*g^6*h*k^11,b^30*c^18*i^4*j^8,b^30*c^32*i*j^4*k^3,b^32*g^10*i^7*j^3,b^33*e*g^3*h^18,b^33*d^10*f^2*g^3*h^11,b^33*c^6*f^4*h^3*i^5*j^3,b^34*d^7*e^6*f*j^4,b^34*c^5*g^2*i^2*k^4,b^34*c^7*d^31,b^34*c^40*e^14*j,b^34*c^54*k^4,b^35*c^18*d^10*e^8*h^5*k^4,b^35*c^28*e^3*i^4,b^36*f^6*k^11,b^36*c^15*e^10*g^9,b^36*c^17*d^15*f^3*g^3,b^37*e^6*f^7*h*i^5,b^37*c^3*g^5*i^7,b^38*f^2*h^9*j^8,b^38*h*k^18,b^38*f^16*h^2,b^39*c^3*d^13*e^15*f*h^3,b^40*j^15*k,b^40*c^2*f*i*j*k^13,b^42*e^3*g^2*j^13,b^42*c^9*g*h^2*j^9,b^42*c^33*d^11*e^12,b^43*f*h^5*i^5*j^7,b^43*d^2*h^9*i^2*j^3,b^44*d^5*e^9*f^4*j*k^5,b^45*e*h^7*j^2*k^2,b^45*c^31*d^3*e^12*i^2,b^46*d^3*e^8*g^4*j^3,b^47*d^11*h^7*i^3,b^47*c^5*e^12*h^5,b^47*c^19*h^9,b^49*c^13*i^5*j^3*k^4,b^53*d^32*g^2*h^3,b^55*c^5*d^5*e^11*h^7*i,b^55*c^12*e*f^11*g^2*j,b^61*d^11*f^3*k^3,b^63*c^5*f^7,b^65*i^5*j^5*k,b^67*c^23*d*f^2*g,b^82*d^2*e^12,b^89*c^2*i^8,b^115*c^11,b^127,c^24*d*e^6*g^4*i^7*k^5,f^7*g^4*h*j^4*k^10,c^29*e^12*g^14*i^2,d^50*e^13*g^4*i,h^2*i^3*j^19,c^3*e^10*h^15*k^8,d^21*g^5*h^9*i^6*j,c^33*d^10*g*h^11,d^2*f*g^7*j^10*k^8,f^7*g^10*h^4*i^2*j^2*k^2,c^12*d^32*e^12*h^3*i*j,e^17*f^3*g^3*h^2*j*k^5,c^3*d^8*f*g^2*h^6*k^9,e^10*f^6*i^3*j^8,d^7*e^2*f^20*i^2*k,c^4*d^11*h^7*i*j^12,c^9*d^21*f^4*j^4*k^2,d^5*f^8*h^3*i^11*j^2,h^2*i^13*k^7,d^40*f^3*g^8*i^3,c^7*d^11*e^19*j^3*k^5,c^19*d^5*e*f^8*g^5*j^2,c^31*g^10*k^5,c^7*d^13*f^10*g*h^5*i^5,c^13*d^3*f*i^8*j^9,c^6*d^38*e^6*f*g^7*k,c^2*d^67*i*j,c^35*d*e^16*j^2*k,d^9*e*h^2*i*j^9*k^9,d^3*f*g^13*h^2*j^8,e^4*f^22*h*j^4,e^5*h^7*i^3*j^6*k^5,d^24*f^3*h^5*j^9,d*e*g^2*h^7*i^6*j*k^3,c^7*e^16*f^4*h^5*j^4,c^21*f^2*h^9*k^3,d^12*e^8*g^16*i*j^2*k,c^8*d*e^3*g^12*h^2*j*k,e^12*f^3*g^9*h^5*i^3,g^8*h^16*i*j^3,c^2*g^7*i^3*j^8*k^5,c^4*d^30*g*j^10,d^14*f^2*h*i^9*j^8,d^7*g^3*i^11*j^2*k^5,e^21*g*h^7*k^4,c^25*e^2*i^5*j^5*k,c^2*d^20*e^14*j^9*k^3,c^5*e^19*f^2*k^11,c^13*f*h^5*i^13*k,e^5*f^6*g^5*i^6*j^6,g^10*i^8,c^2*d^22*f^4*g^4*h^3*i^3*j^2,c^49*f*g^6,j^5*k^19,c^26*d^28*e^5*j^3*k,d^12*e^14*h*i*j,c^5*d^22*e^6*f^14,c^12*d^5*e^7*g^2*i^3*k^6,c^12*d^6*f^8*g^11*h,c^14*d^36*h^5*k,c^24*g^16*i^2,c*d^47*e*g^10,e^6*f^13*h^5*j^3*k^4,e*f^15*g^14,f^5*h^4*k^13,g^13*h^11*j^4*k,d^2*e^43,c^10*e^25*f^4*g^4,c^22*e^18*g^9,d^4*e^14*f^6*h^6*i^6,c^10*e^7*g^5*h^5*i^8,e^5*f*h^14*j^5,c^3*d^3*f^15*h^7*k^2,c^18*d^18*i^6*j^2,c^67*d^7*j,d^2*e^9*i^17,c^41*e^4*f^2*i^8,h^5*i*j^12*k^3,d*f^8*j^4*k^6,c^9*i^2*k^15,d^12*f^5*g^9*j^5*k^4,c^16*d^10*f*g*i^11,d^10*g^5*h^5*i^4*j^7*k,d^20*f^7*g^5*i^3*k^4,d^58*e^12*i^2,c^7*e^3*f^12*g^2*j^2,c^9*d^15*e*f^2*k^13,c^16*g*h^7*j^6*k,h^10*i^6*j^4,f^14*h^3*i^5,c^3*d^10*g^15*j^7,c^4*d^7*h^14*i^3*k,d^10*e^17*f^3*i*k^7,d^4*f^11*g^12,d^18*g^11*h^7*j,c^17*d^66*e^3*g,c^2*e^9*h^12*i*k^4,c^4*d^28*h^17*j,c^14*f^2*g^4*h^12,d^8*e^16*g^4*h^5*k^2,c*d^2*g^18*h^5,c^22*d^12*h*j^13,f^11*i^13*j,c*d^5*f*i^11*k^11,c^8*h^3*i^11*j^5,c^12*e^20*h^10,d^16*e^3*i^6*k^9,g^13*i^6*j^6,d^31*g^7*h*i*j^8,f^6*j^13*k^6,c^20*d^2*e^13*j^12,c^32*e^6*j^6*k^6,c^37*d^5*f*k^9,e^16*g^7*h^10*i,c*d^24*g^6*h^14,c^8*d^10*e^2*h^6*i^4*j^6,c^11*e^7*f^5*i^8*k^5,c^20*d^4*f^5*h^6*i^3*j^5,f^5*g^10*j^8*k^4,d^21*e^9*j^7,e^14*f^2*g^6*i^3*k^3,d^31*e*f^8,c^7*d^14*e^2*g^5*i*j*k^4,c^9*d^45*h^3*j^3,c^12*d^24*g^5*k^7,c^19*d^8*g^19,e^11*g^2*h*i^12,d^29*h^6*i^7*j,f^12*g^3*h^5*i^2*j^5,c^30*e^6*h^3*i^3,c^32*d^18*h^8,c^35*f^7*i^2*k^3,d^4*e*f^7*h^3*j^9*k^2,g^2*h^2*j^3*k^11,d^11*e^38*j^6,d^21*e^30*f^4*k,c^17*e^13*g^12,c^19*d^29*g^6*h*j,d^13*e^9*g^3*h^4*i^4,c^5*d^6*e^2*g^8*h^3*i^6,c^7*e^11*g*h^2*i^2*k^12,c^7*d^37*g^2*h^8*i,c^54*g^4*h^5,d^54*e^14*g^2*h,e^12*f^11*g^4*h*j^7,d^12*f^9*g^3*h^5*j^3,b*c^3*e^20*f^4*g^10*h^2*i,b*c^36*i^6*j^5,b^2*e*f^2*g^19*k^3,b^2*e^7*f^4*i*j^14,b^2*h^3*j^18*k,b^2*g^4*i^3*j^8*k^9,b^2*d^10*f^2*j^10*k^4,b^2*d^2*e^21*f^5*h^3*j^2*k^3,b^2*c^4*d^3*g^3*j^4*k^13,b^2*c^8*e^14*g*h^2*k^12,b^3*f^6*i^9*j^8,b^3*i^11*j^2*k^9,b^3*c^3*e^9*f*h*i*j^8*k^9,b^3*c^15*f^9*h*j^7,b^3*c^60*d^8,b^4*d^29*f*g^8*i*j^5*k^2,b^4*d^3*e^4*g*i^20,b^4*e^16*j^9*k^7,b^4*g^6*i^22,b^4*c^2*f^6*g^5*j^8,b^4*c^14*g^10*j^2*k^7,b^5*f^2*g^7*i^8*k^3,b^5*d*i^6*k^16,b^5*d^2*f^8*g*h*i^3*j^2,b^5*d^16*h^12*i*j^6,b^5*c^2*g^6*i^5*k^7,b^5*c^4*d^26*f^6*h^5*k^2,b^5*c^37*f^5*g^3*k^3,b^6*d^13*f^5*g^15*j^3,b^6*d^43*k^9,b^6*c*e^9*f^7*h^6*i^6*k^3,b^6*c^11*e^4*f^9*h*i^10,b^6*c^14*d^8*e^7*j^3*k^5,b^7*d^27*e*h*i^7*k^5,b^7*e^16*f^4*i*j*k,b^7*d^6*e^4*h^10*j^5*k^2,b^7*e^9*i^3*k^10,b^7*c^2*d^16*f^2*h^3*k^5,b^7*c^9*g^7*h^10*j^4,b^7*c^14*d^10*f^10*g^7*h^3,b^8*d^3*e^23*f*g^8*j^2,b^8*d^27*e^3*g^7*k^3,b^8*d^58*f^5*g*h,b^8*f*g^27,b^8*c^38*d^16*f^2*g^3*k^3,b^9*e^27*f^8*g,b^9*c^7*e^15*h^8*j^3,b^9*c^8*d^8*f^3*g^2*i^8*j^3,b^9*c^12*e^7*f^6*h,b^10*d^8*f^8*h^8*i^3,b^10*c^18*e^13*j^8*k^3,b^11*d^19*e^3*f^5*g^10*h,b^11*c*e^10*i^7*j^10,b^11*c^6*e^2*i^6*j^2*k^3,b^11*c^8*d^29*f^5*i*j^4,b^12*e^11*f^3*i^17,b^12*d^9*e^9*g^9*i*j^3*k,b^12*c^2*d^23*g^8*j^7*k^2,b^12*c^19*d^6*g^2*h^17,b^12*c^42*e^4*g^5*j^2*k,b^13*d^5*f^10*k^14,b^13*c^18*d^13*f^9*j^2,b^13*c^25*e*g*h*i*j^4,b^13*c^30*d^6*f*g*k,b^14*d^13*f*h*j^15,b^14*c^4*e^2*f^5*i^11,b^14*c^13*d^4*h^8*i^9,b^15*f^11*g^2*i^3*k^8,b^15*d^38*e^14*i^2,b^15*e^13*f^2*h*j^10*k,b^15*d^32*f^8*g^6*i,b^15*e^5*f^16*j^2*k^4,b^15*d^15*g^11*h*i^4,b^15*c^4*h^5*j^6*k^5,b^15*c^5*d^25*g^11*i^3,b^16*f^2*h^12*i^3*k^5,b^17*g^8*h^5*j*k^3,b^17*d^22*e^25*f^4,b^17*d^5*e^26*g^4*i^2,b^17*d^36*e^13*h^4,b^17*c^10*e^8*g^18*i,b^18*e^6*g^7*h^5*i^5*k^4,b^18*c^2*f^6*g*h^10,b^18*c^15*g^18*j*k,b^19*c^3*d^6*f*g^14*h^7*k,b^20*f^5*h^6*i^6*j^7,b^21*g^10*i^6*j^6*k,b^21*d^11*f^2*g^4*i*j^8,b^21*d^3*e^16*f^5*g^2*h^6,b^21*d^4*g^9*i^3*j^2*k^5,b^21*d^35*g^3*h^3*j^4,b^21*c^9*d^28*e^11*i^4,b^22*d^4*g^3*h^12*k^4,b^22*e^4*f*h^4*i^4*j^6*k,b^23*d*e^11*j^7,b^23*e^4*g^2*i*j*k^8,b^23*d^25*h*j^3*k^3,b^23*d^4*f^4*g^2*k^11,b^23*c^7*g^16,b^23*c^32*e^6*f*j^6,b^23*c^44*k^8,b^24*d^9*h^4*i^7*j,b^24*c^18*e^8*h*i^3*k^4,b^24*c^20*f^3*h^6,b^25*f^3*j^3*k^15,b^25*c^7*d^9*e^2*g^3*j,b^25*c^19*d^2*g^8*k^6,b^26*e^11*f^4*h^2*i^4,b^26*e^4*g^5*h*i^6*k^2,b^27*e^11*g^19*i,b^27*c*d^7*i^4*j^8*k,b^28*d^15*i^12*j^2*k,b^28*d^7*e^20*h^4,b^28*c^5*d*e^2*f^6*g^6*h^4,b^29*j^4*k^17,b^29*c^11*e^8*g^5*i*j^6,b^29*c^16*d*f^11*g^5,b^29*c^25*d^15*g^4*j^2,b^30*g*i^9,b^30*c^13*d^23*i^6,b^30*c^48*f^2,b^31*f^10*g^2*j^8*k^2,b^31*c^23*d^5*e^17*j*k^2,b^31*c^35*g^11,b^32*f^12*i^3*j^2*k^2,b^32*h^10*i*j^6*k^3,b^32*c^11*d^13*e^6*i^4*k^2,b^32*c^60*d^2*e*k^2,b^34*f^16*g^5,b^34*f^6*h*k^9,b^34*g^4*h^8*j^4,b^34*c^2*f^14*g^4*h,b^34*c^21*e^17*i,b^35*d^7*e^5*f^3*g^4*k^7,b^35*c^9*d^5*e^6*h^2*i^9,b^36*e^17*h^6*j^3,b^38*h^2*i^2*j^12,b^40*c^6*e^2*f^13*j^2,b^41*c*h^6*i^9*k^2,b^42*g^8*i^4,b^42*d^26*g^2*h^4*j,b^42*c^25*e*f*h^2*j^4,b^43*d*f^7*g^3*h*j^9*k^2,b^44*d^16*e^15*h^2,b^44*d^9*e^8*h*k^7,b^44*d^10*g^9*h^2,b^47*c^31*d^5*h^2*i^6,b^48*c^6*d^22*e*i^2*j,b^50*d^5*j^3*k^7,b^50*f^2*g^13*k^3,b^50*c^16*d^6*e^12*g^3,b^51*c^4*d^14*e*i^7,b^52*e^4*f^4*j*k,b^55*c^2*g^2*h^13,b^56*c^13*g*j^2*k^3,b^57*d^6*e^18*f*h^2*i^2*k^2,b^57*f^3*i^9,b^57*h^4*i^7*j^4,b^57*c*d^3*f*i^6*k^3,b^60*d^35*e^2,b^69*d^6*h^2*j,b^70*e^5*f*h^2*i^6,b^71*f^4*g^6,b^71*g^11*k^2,b^75*c^6*g^7*i,b^123*g^2,c^14*e^11*f^11*g^2*h*k^2,c^32*f^6*g^3*i^3*k^4,c^2*d^5*e*g^13*h*i^7*j^3,c^2*d^26*e^17*h^4*j^4,d^2*e^2*g^2*h^7*k^13,e^15*f^3*i^2*j^11*k^2,d^15*f*h*j^7*k^6,h^3*i^12*k^11,d^34*g^8*h*i^2*j^2*k^4,c^9*e^6*f^5*g^5*j^5,d^7*f^7*g*h^6*i^4,d^18*e^2*f^4*g^15,c^3*e*i^7*j^12*k^4,c^15*d^13*f^2*g^2*i^9*k^2,c^50*f^7*i^3*j^3,c^25*f^6*g^9*i^6,c^2*d^45*e^4*f*g^3*j^2,d^3*g^8*h^10*k^5,c^17*f^2*h^4*j^10,c^4*d^8*e*g^8*j^11,e^10*f^3*g^5*i^5*j^9,e^3*g^10*i^7*j^3*k^3,d^16*f*g^4*h^4*i^2*j^5,d^26*f^15*g^4*i*k,c^4*d^9*g^9*h^3*i^4*k^7,d^6*e^19*h^2*j^4*k,e^14*g^17*i^4*j,c^2*e^12*g^2*h*i^2*k^10,c^2*e*f^5*g^11*h^2*j^3,c^4*d^30*h^6*k^5,c^14*g^16*h*i*k,c^14*d^14*e^10*g^3*h^4,e^19*f^3*h^7*i^5,e^12*g^5*h^6*i^7*k^4,c^2*d^22*f*h^11*i^2,c^8*d^12*e^5*i^5*j^5*k^3,c^10*d^43*j^7,c^57*d*j^4*k^3,c^31*e^9*i^7*j^2,f^5*j^7*k^10,i*j*k^19,c^18*e^16*g^5*i^2*j^3,c^32*d^20*g^4*k,c^6*d^4*e^5*g*i^10,d^14*f^4*g^5*i^2*j^2*k^8,e^8*f^9*g^2*j^5*k^4,d^10*f^15*h^2*j^7,c^6*g*h^8*j^9*k^5,c^11*d^3*f^7*g*h*j*k^8,f^11*h^4*i^4*k^4,d*h^15*i^2*j^3*k^5,c^30*d^12*g^7*h^2*i^4,d^4*e^22*j*k^11,c^7*d^60*e^8*g,d*e^6*f^5*h^6*k^11,d^2*f^21*h^7,c^4*g^4*h^13*j,c^28*d^2*e^25*i^2,f^14*i^7*j^6,h^4*i^10*j^8*k^3,c^3*f^6*i^9*k^6,c^16*e^5*h^15*k^6,c^27*e^3*j*k^13,d^4*e^7*h^7*i^3*j^9*k,c^3*d^14*f^8*i^2*j*k^4,c^10*f^2*h^7*i^2*j^8,c^15*d^8*f^16*i,c^27*d*f^8*g^5*i^3*k^4,d^15*e^14*j^10,e^19*g^6*i^2*k^7,d^25*e^6*f^5*j^2*k^2,d^8*e^7*g^5*j^4*k^8,d^9*g^14*j^9,d^39*h^4*j^6*k^3,c^2*d^18*g^5*k^11,c^9*d^2*g^19*j^3,c^39*d^14*e*f^8*j*k^2,d^9*e^15*f^9*i^8,d^33*f^7*i^5*k^2,c^8*e^18*h^5*j^7,c^13*e^10*f^12,c^20*e^11*h^4*i^2*j*k^4,c^25*e^3*f^4*i*k^7,e^7*h^12*i^8*j,c^7*e^18*g^12*j^2*k^2,h^10*i^2*k^15,d^7*e^14*g^3*h^5*i^3*j^2,d^17*e^6*f^11*g^3*i^2,e^7*g^8*h^4*i^5*k^2,d^31*g^2*h^9,e^3*f^3*h^8*j^3*k^11,d^10*f^3*g^8*i^4*k^5,c^2*d^41*f^9*g^2*h^2,d^6*f^6*g^3*h^6*j^6*k^4,d^7*e^12*f^2*g^2*i^5*j^7,c^8*d^31*g*i^2*j^3*k^4,c^20*d^4*f^2*h^14*i^2,e^43*h^3*i*j,d^15*e*f^4*i^13*j,e^28*g*i^2*k^8,c^7*d^15*e^5*g^9*h^7,c^26*e^4*i^5*j^8,c^31*d^4*f^7*i^4,d^4*j^13*k^8,c*d^13*g^4*i^8*j^3,c^3*d^44*h^3*i^3*j^5,c^50*d^2*j^2,e^3*f^3*g^5*j^11*k^2,f^5*g*h^2*i^2*j^5*k^2,g^6*h*i^4*k^11,d^20*f^3*h^6*j*k^6,c^4*d^13*e^21*f^2*i^5*k,c^11*e^11*g^11*i^5*j,c^13*d^27*e^9*i^3*k^2,c^13*d^28*f^2*g^5*h*j^3,c^25*d^21*g^10*i^2,c^27*f^2*g^3*j^2*k^7,d^7*f^2*g^15*j^6,d^5*g^7*h^3*i^13,c*e^9*f^6*h^2*i^9*k^3,c^16*f^5*g^11*j^5,e^21*f*j^4*k^5,e^3*f^9*g^8*j^3,d^10*e*h^4*k^9,d^11*f^15*g^2*h^5*j^5,g^7*h^11*j^7,c^2*f*g^13*i*k^5,c^4*d^4*f^7*g^7*h^4,c^23*d^11*e^20*g^3,d^15*f^4*g^21,c^10*g^6*j^12*k^4,c^28*d^10*e^3*g^3*k^7,d^5*e^17*g^4*i^3*k^3,d^36*e^4*f^6*h^5*j,f^2*g^3*i^10*j^10,e^32*f^5*g*j^2,d^2*g^2*i^7*j^6*k^4,c^2*e^12*f^3*h^2*k^3,c^12*d^26*g*i^4*j^2*k^8,c^33*f^5*i*j^9,e^9*h^16*i^3,d^2*e*f^5*h^9*i^2*k^3,c^2*g*h^8*i^4*k^12,c^9*i^10*j^4*k^9,d^13*e^8*f^2*g^10*h^2*k,e^14*f^4*i^3*j^11,e^7*i^5*j^5*k^7,d^23*f^2*j^7*k^2,c*f^2*g^29*h*k,c*d^2*f^10*i^4*k^10,c^8*f^4*g^9*i^4*j^4,c^10*d^16*i^2*j*k^11,c^22*d^10*f^2*g^8*i*k^2,c^45*e^2*j^4*k^7,b*i^13*k^7,b*d*f^14*h*i^10*j^4,b*d^34*e*g^3*j^8,b*d^27*g^8*j^2*k^9,b*e^12*f^9*g^3*h^7,b*c^9*g^2*h^18,b*c^19*e^11*f^3*i^7*j^2*k^3,b^2*d^11*e^3*g^5*i^8*k^5,b^2*d^42*f*i^3*j^2,b^2*c^3*e^13*h^3*j^13,b^2*c^6*e^18*g^2*i^2*j^3*k,b^2*c^8*d^7*e^5*f^6*j^5,b^2*c^15*e^6*g*h^2*j^7*k^2,b^2*c^20*g*k^5,b^2*c^22*d^31*f^4*j,b^3*e^7*f^2*i^10*k,b^3*d^15*f^8*h^3*i^5,b^3*c^3*h^9*i^8*j*k^2,b^3*c^8*d^8*h^2*i^7*k^5,b^4*d^26*e*f^5*g^6,b^4*d^56*k^7,b^4*h^6*j^9*k^9,b^4*d^50*f^3*g^5,b^4*f^11*j*k^12,b^4*c^2*d^5*i^8*j^12,b^4*c^30*e^9*f^2*g^8,b^5*h^13*i^2*j^3*k^9,b^5*d^5*e^23*f^4*h*i^3,b^5*c^6*e^5*f^12*h*i^2,b^5*c^13*e^6*g^4*h^7*i^5,b^5*c^15*d^13*h^12*j,b^5*c^18*f^4*g^4*i^4,b^5*c^27*d^6*g^3*h^11*i^2,b^6*e*f^4*g^3*h^7*j^10,b^6*d^8*e^4*f^2*k^19,b^6*d^16*e^30*f,b^6*d^9*e^23*g^4*k^6,b^6*d^40*e^10*k,b^6*e^13*g^18,b^6*c^5*d^3*e^5*f*g^18,b^6*c^26*d^13*f*i^2*j^6,b^7*f^3*g*h^11*j*k^3,b^7*c^12*i^15*k^3,b^8*e^5*g^15*h^4*j^2*k,b^8*c*d^32*g^7*i^5*j,b^9*d^32*e^10*f^5*g*h^3,b^9*c^12*d^11*e^9*i^8*k,b^9*c^19*h*i^8*j^6,b^10*d^5*g^4*j^11,b^10*e^21*f^2*g^2*h^7*j^3,b^10*d^22*e^16*i^3,b^10*c*d^53*e^3*f^2*j^2,b^10*c^13*d^46*k^3,b^10*c^24*f^2*h^2*j^10,b^10*c^48*d^11*e^11,b^11*e*f^12*i^2*j*k^8,b^11*e^4*g^3*i^7*j^6*k,b^11*f^6*h^5*i^2*j^8,b^11*c^3*f^20*i,b^11*c^10*g^2*h^4*i^4*j^2*k^5,b^11*c^12*d^2*f^4*h^9*j^4,b^12*e^9*g^2*j^4*k^12,b^12*e*f*g^2*k^15,b^12*d^13*f*g^10*h^2*j^5,b^13*e^20*f^2*h^3*j^7,b^13*d^14*e^16*f^2*g^3*i^8,b^13*c*e^12*f^16*k^2,b^13*c^3*d^9*f^22*h*j,b^13*c^6*d^28*e^4*g^2*h^3*i^6,b^13*c^10*h^7*j^3*k^3,b^13*c^41*e^19*h,b^14*e^27*g^4*j^8,b^14*e^19*f^13*g^4,b^14*d^3*e^7*g^3*j^4*k,b^15*e^8*f^15*i^2,b^15*d^11*h^7*k,b^15*c^20*e^11*f^4*h^5*j,b^15*c^34*f^2*h^9*k,b^16*d^22*e^3*g^13,b^16*c^7*e^18*f*g^10*j^2,b^16*c^8*f^6*h^12*i^2,b^16*c^21*d^11*g^9*h^2,b^17*d*e^25*h^5*k^4,b^17*d^3*g^8*i^10*j^4,b^17*e^7*f^3*g^6*h^5,b^17*c^7*g^11*h^4*k^4,b^17*c^14*e^6*i^5*j^8*k,b^17*c^28*i^2*j^4*k^5,b^18*c*e^13*g^5*j^9,b^18*c^3*d^16*j^11,b^18*c^6*e^5*f^8*g^5*j*k^2,b^18*c^10*e*g^4*j^13,b^18*c^15*d^9*g^4*j^5*k^3,b^19*e^2*g*i^8*j^3,b^19*d^24*f^2*h*i^3*j^5,b^19*c^3*d^17*i^5*k^3,b^19*c^38*j^2,b^20*d*h^3*i^16,b^20*d^28*g^14*k,b^20*c^12*e^6*f^3*h*i^10,b^21*f^9*i^2*j^5*k^6,b^21*c*d^7*e^11*i^3*k^6,b^21*c*d^8*f^6*g^2*j^3,b^21*c^8*e*g^7*h^5*i^3*j^5,b^21*c^13*d*g^7*i^2,b^21*c^50*e^6*k^6,b^21*c^62*f*g^3,b^22*d^12*g^21,b^23*g^4*h^9*j^7*k,b^23*f^11*g^4*h^2*k^4,b^23*c^11*e^22,b^23*c^13*d^22*e^9*h,b^23*c^25*d^15*e^2*k^4,b^24*e^11*h^3*i^8,b^24*f^12*g^5*h^4*i^5,b^27*d^3*f^6*j^7*k^6,b^27*f^8*g^6*i^4*j^4*k^2,b^27*i^2*j*k^15,b^28*d^14*e^3*f^3*j^8*k^4,b^28*e^2*h^16*k^2,b^29*e^7*f^10*j^5,b^29*c^5*d*h^5*j^9*k,b^29*c^8*f^2*k^9,b^30*g^9*h^16,b^30*f^12*h*i^5,b^30*e^7*g^12*k^7,b^31*d^6*e^3*f^9*g^3,b^31*e^4*g^8*i^3*j^2*k^4,b^31*f*g^8*i^2*k^7,b^31*c^18*e^11*f^6*g^5*k^3,b^31*c^20*f^12,b^32*c^3*h^10*j,b^32*c^6*f^8*g*i^4*k^3,b^32*c^8*d^3*f^14*h^3,b^33*d^10*e^20*h^3*j^3*k^2,b^33*d^4*e^2*g^9*h^3*j^2,b^33*c^2*g^14*h^2*k^2,b^37*d^16*e^6*i*j^4*k^4,b^37*c*d^26*k^7,b^40*d^8*e^6*h*i^6,b^40*d^18*f^4*i^5*k,b^40*c^6*d^2*g^13*h*i^5,b^41*e^9*f*j^4*k^5,b^42*c^6*d^23*e^4*h^4,b^42*c^18*d^16*g^5*h^3,b^43*d^2*e^5*g^10*k^3,b^44*g^2*h^14,b^45*c^3*g*j^5*k^7,b^46*d^4*f^6*i^3*j^5,b^46*i^5*k^7,b^48*d^18*h*k^5,b^48*d^2*h^8*j^7,b^48*c*f^2*g^4*i^2*k,b^48*c^3*d^12*f^8*h,b^48*c^10*g^3*h^7*j*k^2,b^48*c^15*d^5*g^3*k^5,b^50*c*d^2*e^11*f^4,b^54*c^19*d^8*k,b^56*c^3*g^9*j^6*k,b^57*c^17*f^5*i^5,b^58*h^3*j^4*k^3,b^60*e^4*f*g^6*h*j^2,b^60*d^8*g^5*h^5*k,b^62*e^13*h^3*k^4,b^64*g^7*j^3,b^65*g^3*h*i^8,b^66*e^19*j^2*k^2,b^66*d^11*e^6*j^4,b^66*c^8*d^4*k^6,b^67*d^19*h^4*i,b^69*d^3*e^6*f^4*h^2,b^69*c^6*g^2*h,b^85*c*d^5*g^5,d^21*g^4*h^9*i^3*j^2,c^17*d^3*f*h^12*i^3*j^5,e^11*f^2*g^5*j^8*k^4,d*f^4*g*h^7*i^3*j^2*k^4,c^40*e*f^4*i^2*j^6*k^2,c^15*f^3*g^9*i^5*j,d^39*e^9*g^3*j^5*k^2,c^2*d^2*e^4*g^23*j^2,d^47*h^3*i^4*k^2,c^27*d^5*e^6*g*k^7,c*e^15*f*h^3*i^11*k^3,d^31*e^9*f^4*g^6*h*i,c^33*d^18*i^3*j^3,e^6*f^2*g*h^16*k^5,d^10*g^4*h^5*i*j^8*k^2,d^20*f^12*g^4*k^5,c^5*f^5*h^10*i^3*j^5,e^6*f^2*g^11*h^3*j^6,d^4*f^16*g^11,c^4*g^16*h^2*k^5,c^6*d^18*g^10*h^7*j^2,c^17*e^8*h^12*k^5,e^24*h^8*i^4,d^16*e^4*h^12*i*k^3,c^3*d^16*e^2*f^3*i^3*k^10,c^2*e^15*f^2*g^6*h^10,c^10*d^21*e^8*j^8,c^13*e^13*f^7*g^5*k^4,c^22*d^14*e*g^4*j^2*k^5,e^10*g*h*i^9*k,d^29*f*h^6*i^4*j^2,c^31*e^25*i^3*j^3,d^40*e^4*g^9*j^3,c*f^4*g*h^2*j^4*k^12,c^32*e^12*g^11,c^6*e^21*g^8*i^6,c^8*d^13*e^8*f^5*g^2*h^4*i,c^20*d^6*e*g^7*h^3*i^3,e^13*f^12*g^5*h^3*k^2,f^10*g^4*h^7*k^6,c^18*e^30*h*i*k^2,c^30*e^12*f*g^14*h,g^14*h^14*i*k,f^3*i^8*j^3*k^10,d^3*e^3*f^4*i^17,d^8*e^4*f^5*h*i*j^4*k^8,h^8*i*j^11,c^5*d^2*f^13*h*j^3,c^17*f^5*g^5*i^2*k^8,c^24*d^9*e^23*i^4,d^3*e*g^14*h*j^12,d^27*f^4*h*i^4*k^6,c*d^59*e^6*f*i^2,c^3*e^15*f^9*j^2*k^2,c^15*e^8*f*k^11,d^3*e^22*f^6*g^7*j^3,d^14*h^17*i^4*k^3,d^11*e^11*f^8*g^3*i,e*f^2*g^17*h^6*i*j^4,d^25*g^2*h^10*j*k,d^4*e^4*g^8*i^3*k^9,d^25*g*i*j^6*k^8,c^10*e^3*h^15*i,c^2*d^19*e^2*f^10*g^9*h,c^21*e*f^4*i^3*j^3*k^4,c^4*h^6*i^12*j^5*k,c^9*d^6*f^6*i^11*k^4,d^7*e^5*g^4*i^7*j^6,d^17*f^3*g^4*i^6*k^2,d^48*f^9*i,c^3*g^9*i^9*k^8,c^5*d^31*g^3*h^3*i^4*j^2*k^3,c^28*d^3*e^7*h^2*j^11,c^40*h*j^5,c^45*d^6*f^6*k^2,d^15*h^6*i^15,c^28*d^4*h^8*i^6,f^2*g*h^3*i*j^8*k^6,f^16*g*k^9,d^14*h^7*j^4*k^10,d^38*e^13*f^5,c^3*d^22*e^3*g^5*h^2*j^6,c^6*d*e^8*f^7*g^11*i^3,c^8*d^31*e^6*i*k^9,c^15*d^15*g^10*h*i,e*f^9*h^8*i^3*j^5*k^2,c^5*f*h^7*i^5*k^11,c^6*f^2*g^11*j^8*k^4,f^4*g^7*h^5*j^2*k^4,c*d^12*e^32*j^5,c^13*d^5*e^25*g^3,c^18*d^15*e^17*f*g^3*k^3,c^25*e^7*g^17,e*f^3*g*j^21,e^26*f^5*i^9,c*d^13*e^14*h^6*i^7,c^3*e^12*f^13*g*h^6*j^3,c^6*d^23*e^6*f^3*i^6*k^3,c^17*f^11*h^10,d^3*f^5*i^4*j^15,g^2*i^6*j^9*k^8,e^17*h^3*j*k^7,c^6*d^12*h^7*k^11,e^6*f^2*h^10*i*k^7,c^13*d^28*e^12*h^9,d^17*j^10*k^6,d^10*i*j^4*k^15,d^11*f^7*g^3*j^9,c^12*d^4*g^8*j^3*k^6,e^5*g^2*h^19*k^2,c^11*e^3*f^6*h^4*i*j^7*k^2,d^12*e^15*i^5*j^9,d^36*i^2*j^5*k^4,d*e^10*f^3*j^8,c^3*d^11*e^2*f^17*k^3,c^10*e^3*g*j^2*k^9,c^22*f^3*g^15*j,e^12*i^9*k^5,d^9*f^5*h^4*i^4*j^2,d^2*h^3*i^6*k^9,d^3*f^13*g^6*h^4*i^3*j,d^33*f^3*h^8*i*k^4,c^35*f^8*h^6*j,d^20*e^6*f^2*g^6*j^3,d^13*g^11*i*k^7,d^44*g^5*h*k^2,d^7*f^2*g^25,c^20*e^14*g^8*k^3,c^22*d^9*e*f^5*g^2*j^2,c^34*d^2*g^7*k^7,e^28*f*h^2*i^2*j*k^3,e^10*f^9*h^2*i,c*d^3*e^2*f^23,c^5*d^7*h^13*j^4,c^8*e^3*f*g^4*h*i^3*k^3,c^10*d^17*f^7*h^6,c^13*f^15*g^4*i^2*k^6,c^17*g^3*h^12*i*k^4,c^22*d^10*g^3*h^5*k^7,d^10*e^35*j^2*k,e^10*g^18*k,d^28*f^4*g^12,c^2*e^16*i^4*j^13,c^16*d^7*i*j^9*k^2,c^20*e^30*f*j*k,d^18*e^24*h^2*i^5*k,d^5*g^14*h*i^6*k,c^4*d^15*i^9*j^3*k^2,c^8*d^7*e^19*f^3*h^4*k,d^26*g^7*i^4*j^4,d^57*f^3*g*j^6,c^3*g*h^18*i^4,c^26*e^7*f^2*g^4*j^7,d^26*e^15*f^2*g*h^4,c^4*d^36*e*f^2*i^2*j^4,c^14*f^4*i^6*j,c^26*g^5*i^8*k^5,c^28*d^23*f^2*i^3,c^51*e^9*j*k^5,d^16*e^21*i^2*j^3*k^3,e^7*f*g*j^17,g^2*i^19*k,c*d^10*e^3*f*g^14*i*j^2,c^2*d^7*f^6*h^2*i^14,c^3*d^40*e*k^7,c^14*h^3*j^13*k^4,c^15*d^34*g^13,e^15*f*h^15*k^3,f^3*h^6*i*j^11,f^17*j^3*k^3,g^2*h^5*i^3*j^5*k^9,c^2*f*h^10*j^7*k^4,c^12*e^25*i^4,c^21*d^4*e^2*g*h^5*j^9,c^26*d^13*e^5*i*k^3,c^36*g^12*i^5,b*e^3*g^11*j^12,b*d^7*g^10*h^3*j^8*k^2,b*e^17*f*g^8*h^10*k,b*e^32*g^7*j,b*e^14*f^2*i^12,b*c^13*d^24*e^12*g^6*k,b*c^15*d^55*f,b^2*d*f^16*g^7*i^3*k,b^2*d^8*e^21*g^3*i^7,b^2*d^39*e^8*f^5*i^2,b^2*d^3*e^4*f^19*h^2*j^4*k,b^2*d^22*e^9*g^2*h^4*i^5,b^2*e^5*h^8*j^6*k^7,b^2*c*d^32*e*g^2*i^4*k,b^2*c^3*d^63*f^3*h^2,b^2*c^12*f^5*g^3*h^8*j^5,b^2*c^36*e^16*f^2,b^3*e^12*g^3*h*j^7*k^5,b^3*d^28*h^6*j^9,b^3*d^7*e^4*f^8*g^3*k^8,b^3*f^2*g^17*h*j^6,b^3*c*d^21*g^2*h^5*j^3*k^9,b^3*c^24*d^5*e^5*f^4*h^2*i^6,b^4*d^5*e*h^8*j*k^5,b^4*f^4*g^13*h^8,b^4*c^6*i^6*j^12*k^2,b^4*c^6*d^6*e^20*g^9*h^2*i^2,b^4*c^10*e^16*f*h^6*j^4*k,b^4*c^11*d^16*e^12*f*g^9*i,b^5*e^5*f^3*h^13*i*k,b^5*c^3*f^17*h^6*k^4,b^5*c^11*d^5*e^3*g^9*h^3*j*k^3,b^6*e^12*g^6*h^6,b^6*c^6*h^2*j^13,b^6*c^7*d^45*i^7,b^6*c^54*d^3*e^2*i^3,b^7*d^10*e^5*j^14,b^7*e^10*f^5*g^5*j^4*k^6,b^7*c^22*f^5*h^15,b^8*e^7*g*i^7*j^6*k^3,b^8*d^18*h^2*i^2*j^8,b^8*f^7*g*i^6*k^6,b^8*d^11*h*i^4*j^2*k^7,b^8*d^12*f^7*g^9*h^2*i*j^7,b^8*c^5*d^5*g^14*h*i^3*j,b^8*c^21*e*f^18*j^3,b^8*c^28*e^2*j^5*k^3,b^8*c^30*d^7*f^2*h^4*j^7,b^9*h^4*i^15*k^3,b^9*c^2*e^11*h^2*i^9*j^3,b^9*c^9*d*f^20*i^3,b^9*c^16*h^6*i^6*k^3,b^10*d^8*e^23*j^7*k,b^10*d*e^16*i^2*j*k^10,b^10*d^2*e^5*f^3*g^2*j^6,b^10*d^11*e^8*f*i*k^13,b^10*c^3*g^7*i*k,b^10*c^5*d^26*f*g*h^4*j^2,b^10*c^52*g^3*h*k,b^11*d^10*f^5*h^7*i^7,b^11*d^6*e^5*g^21*j,b^11*e^21*g*h^13,b^11*c^16*d^5*e^7*h^9*k,b^11*c^26*e^2*f^2*h^4*i^3,b^12*i^10*j^13,b^12*e^34*j^5,b^12*d^2*e^26*f^13,b^12*c*e^27*k^4,b^12*c^3*d^16*e^14*h^2*j,b^12*c^6*e^19*f^5*k^7,b^12*c^13*e^9*g^14,b^12*c^15*d^9*e^7*h*k^8,b^12*c^15*d^10*f^5*g^8*h^2,b^12*c^27*d^3*g^13*h,b^12*c^34*i*j^12,b^13*e^16*h^4*i^7*k^4,b^14*d^35*e^10*g^4*h^2,b^14*e^5*g^24*i,b^14*c^9*d^8*g^3*i^4*j^7,b^15*g^5*i^17,b^15*e^22*h^14*j,b^15*d^16*i^12*j,b^15*c*d^8*e^14*f^3*h^7,b^15*c^13*d*e^7*g^2*h^6*i*k^2,b^16*h^4*j^17,b^16*f^3*g^5*j^3*k^10,b^16*c^2*d^15*f^9*h*j^5*k^5,b^16*c^7*e^20*i^2*j^6,b^17*d^6*e^9*i^10,b^17*c^7*e^2*i^12*k^6,b^17*c^44*e^4*i,b^18*d^41*g^5*i^2,b^18*e^5*j^2*k^13,b^18*d^5*f^5*j^4*k^8,b^18*c^31*d^6*e^11*g^2,b^19*d^7*f^15*g^2*h^6,b^19*c^5*e^20*i^7,b^19*c^14*d^4*e^8*h^7*i^5*j^2,b^19*c^19*d^14*i^4,b^20*e^8*f^6*g^3*j^3*k^2,b^20*d^14*g^2*h^6*j^7*k^3,b^20*c^6*d^25*e^7*g^12,b^20*c^10*e^3*f^9*j^2*k^2,b^21*e^12*f^13*i,b^21*h^11*j^4,b^21*e^5*f^5*g*i^3*k^7,b^21*f^11*h^4*k^2,b^22*d^8*f^8*g^9,b^22*c^4*f^2*i*j^9*k^6,b^23*f^4*i^9*j^3*k^6,b^23*e^21*f^7*h^2*k^5,b^23*c^17*g*h^13,b^24*c^4*d^6*g^15*h^6,b^24*c^23*j^11*k,b^25*d^16*e^3*f^6*i^2*j^4*k^4,b^25*e^6*i^7*j^9,b^25*c^2*f^8*i^6*j,b^25*c^11*h^4*i^4*j^5*k,b^25*c^16*d^3*f^6*i^3*k^4,b^26*d^20*e^3*k^11,b^26*d^4*g^10*j^6,b^26*c^3*d^14*f^3*g^10*k^2,b^27*c^2*e^14*f^10*j^2,b^27*c^14*e^7*f^2*i*k^7,b^27*c^21*g^3*h^2*i*j^3,b^27*c^26*f^10*g^3,b^29*d^2*e^11*h^2*i^5*k^2,b^29*d^3*f^3*g^8*h^3*i^2*j^4,b^29*d^12*e^3*f*i^4*k^5,b^29*c^33*e^6*h^4*k^2,b^31*c^8*d^10*e^2*g^5*h^4,b^32*c^7*d^17*e^7*f^2*j^4,b^33*c^2*d^8*i^10*k^4,b^35*f^3*i^2*j^8*k^2,b^35*i^4*j^2*k^11,b^35*c^14*d^23*g*i^2,b^36*c^5*f^3*g^2*j^8,b^37*d^17*f^2*g^2*i^5*j^3,b^37*e^7*f^7*j^6,b^37*h^9*j^10,b^37*g^4*i*k^5,b^37*d^6*f^5*h^2*j^2,b^37*c^5*g^3*h*k^9,b^39*e^16*f*j*k^3,b^39*c*e^11*f^3*g^11,b^39*c^3*e^9*k^12,b^39*c^3*f^9*g^5,b^41*d^15*e^12*g*k,b^41*f^2*i^4*j^7,b^41*c^6*d^2*h^2*i^2*j^11,b^41*c^11*d^12*i*j^3*k^2,b^41*c^15*d^4*e^7*f^3*h^2*k,b^43*c^9*d^2*e^2*j^2*k^5,b^44*e^11*i^10*k,b^45*d^21*g^2*i^2*k^3,b^45*c^19*e^13,b^46*c^2*e^10*h^5*i^5*j^2,b^46*c^7*e^2*f^2*i^4,b^47*d^5*e^9*g^9,b^53*g^7*j^6*k^3,b^53*d^15*g*j^8,b^54*c^9*i*j^3,b^54*c^23*h^4*k^3,b^56*d^13*h^5*j*k,b^57*c^10*d^13*e^2*j,b^58*e^11*f*h^3,b^58*e^4*g^2*h^2*k^4,b^62*c^2*d^3*i^2,b^65*f^2*g*h*i^7,b^74*d^6*e^6*h*j^5,b^74*g^5*k^2,b^89*i^2*k,b^91*c^14*f^2*g,b^103*f*g^3*h,b^126*d^7,c^12*d^7*f^12*h^6*i*k,d^8*f^4*h^2*i^5*j^12*k,e^9*f^8*g^4*i^2*j^10,c^5*e^2*g^9*i^4*j^4*k^4,c^17*e^11*g*h*k^11,d^25*e^14*f*g^6*h^2,d^62*f^2*g*j^3,c^33*e^15*f*g^4*j^4,c^47*d^20*g^3*k^2,c^21*d^4*e^4*f^3*i^7,d^14*f^9*g^4*j^3*k^9,f^16*h^4*i*k^5,d^10*e^9*h^13*k^7,d^15*e^13*j^11,d^2*e^7*f^6*g*i^7*k^8,d^16*h^6*i^5*k^9,d^7*e^13*f^2*g^2*h^5*j^3,c^3*d^17*e^5*f^16*g^2,c^10*e^6*g^7*h^4*i^2*k^3,c^12*d^31*g*h^9,d^42*g^15*h^2,e^42*h^3*j^2,c^41*e^3*i^2*j^9,c^16*d^13*g^3*i^5*j^4,e^8*f*h*i^16*j^2,d^2*e^9*f^2*h^2*j^7*k^12,h^9*j^14,f^10*h^2*j^6*k^3,d^15*f^9*g^10*h^2*i^2*j*k,d^53*e^11*h*i,e^20*f^6*j^5*k^6,c^19*d^4*f^12*g^6*h^4*k,f^16*g^3*h^7*i^4,d^5*e^16*f^5*g^3*k^4,f^13*g^17,d^29*f^3*g^2*h^4*k^8,e^8*h^16*j*k,f^3*i^10*k^8,d^11*e^2*g^4*i^5*j*k^6,d^42*f^6*j^3*k,d^35*g^3*i^2*k^10,c^35*f^3*k^6,c^6*d^5*e*h^10*i^3*j^8,c^11*d^15*f^13*h^3*i^2,e^13*f^4*g^11*i^2,d^26*f^10*g^5*j,c^5*d^9*e*g^10*h^2*j^3*k,d^24*g*h^10*i^6*j^3,c^21*e^4*f^17*h,c^28*e^5*g^3*h^7*i^2,f*g^7*h^6*j^5*k^8,d^16*e^29*f^6,c^3*e^30*g^3*j^2*k^4,c^8*d^9*e^22*g^3*k^7,c^15*e^12*g^17*j,d^17*e^11*i^5*k^7,d^8*e^29*f^12*g,c^34*h*i^5*j^7,f^4*g^24*h^4,d^5*f^4*g^3*j^12*k,c^14*d^22*e^15*f*j,f^22*i^7*j^2,e^2*f*g^2*h^13*k^9,c^9*d^14*g^9*h*i^8*j^2,d^30*i*j^8*k^8,e^15*j^11*k^4,d^55*g^8*i,e^8*g*j^5*k^13,c^2*d^19*h^2*j^7*k^8,d^3*e^4*f^2*h^5*i^3*j^5*k^4,h^4*i^5*k^13,c^7*d^4*e^23*g^2*i^6*j,c^35*f^7*g^8*h^2*j,c^56*e^18*h,d*g^25*k^2,c^12*d^3*e^6*f^2*g^2*j^5*k^2,d^22*f*g^2*h^5*i^6*k^2,e^15*f^6*h^3*j^3,e^7*f^20*k,e^8*g^4*h^2*i^2*k^7,d^11*f^4*h^7*k^2,c^7*g^3*h^13*j*k^8,c^12*d^4*g^3*h^6*k^11,d^22*e^2*f*g^12,c^6*d*e*j^12*k^6,d*e^24*h^5*k^5,c^8*e^19*f^2*g^11*k,c^22*g^10*h^4*k^5,c^43*j^5*k^6,f*h*i^19*j^4*k^2,e^3*g*h^19*i^3,d^30*e^6*h*i*j^7*k^4,c^4*e*f*i^5*j^4,c^9*d^3*f^15*i^4*k^3,c^13*d^7*h^7*i^3*j^8*k,c^18*d^17*i^2*k^4,c^53*f^4*j^3,d*f^3*h^3*i^13,c^17*d^3*e^10*f^6*h^6*i^3*j^4,d^49*e^2*h*i^4*j^2*k^2,d^43*f^6*g^4*h*i^3*j,f^6*g^2*i*k^16,f^12*h^4*j^2*k^11,c^11*e^7*g*h^6*j^12,c^16*d^7*e^10*k^7,c^16*d^8*f^11*g*j^4,c^28*d*f^3*g^6,e^19*h*i^11*k^3,c^4*d^15*h^5*i^8*k^7,c^5*d^49*e^4*j^2,d^2*e^26*g^3*i^6*k,d^33*e^13*f^2*i,d^26*e^6*g^2*i^3*k^5,d^27*f^10*g^11,d^57*h^3,c^2*f^2*g^3*h^9*j^8*k^2,c^16*g^2*h^13*j^4*k^6,c^26*e^21*k,c^40*d^15*e*k^5,f^4*h^16*i^2*j^2*k^2,e^30*f^3*i^8,c^14*e^10*f*h^3*i^5*k,e^6*h^9*j^4*k^9,f*g^13*h^9*j^3,e^25*g^9*h^3*i,d^3*f*h^5*j^17*k,d^31*e^12*g^3*h^8*j^2,c*d^10*e^17*g^9,d^3*f^6*h^19*j^3,d^24*f^17*h^5*k,d^7*g^5*h^11*k^7,d^39*i^6*j,c^44*e^7*i^2*k^3,f*g*h^5*i^10*j^7,e^21*f^4*h^12,d^7*g^4*j^3*k^14,c^20*d^12*e^3*f^4*i^8,c^32*d^5*i^10*k^3,d^12*h^3*i*j^11*k^2,e^4*f^4*g*i^5*j*k^10,d^15*f^2*i^2*k^14,c^6*e^14*f*h*j^14,c^6*e^5*i^21,c^20*d*h^5*j^10*k^2,f*g^8*h^16*k,e^3*f^3*h^8*i^3*j^8,f^17*h*i^2*k,c^6*h^7*i^5*j^2*k^7,c^7*d^12*e*g^5*j^11,c^42*e^7*g^3*i^7,e^10*g^2*h*j^9,d^6*e^2*f^14*g^2*j,e^3*g^7*j^3*k^5,d^20*g*h^5*j^5,c^5*g^21*j^2,g^3*h^7*i^8*k^5,c^7*d^45*e^8*i^6,c^9*e^6*f^21,c^16*e^7*h^5*i^2*k,c^21*f^13*i*k^4,c^30*h^9*k^5,b*e^24*f^2*k^11,b*c^3*e^14*g^14*j,b*c^5*d^3*e^12*h^2*k^12,b*c^5*d^4*e*f^2*g^8*h^3*j^3,b*c^17*g^13*h^2*k^3,b*c^24*j^15,b^2*d^18*e^8*h^10*i*k^3,b^2*d^12*f^4*g^4*h^10,b^2*c^5*d^5*g^9*h^9*i^2*k^3,b^3*d^29*e^15*g^4*h^3*k,b^3*d^23*f*g^18*h^3,b^3*d^2*g^3*i^3*j^10,b^3*c^3*e^30*g*h*j^2,b^3*c^4*d^12*f^9*g^3*i^2*j^2*k,b^3*c^13*d^26*g^2*j^6*k^2,b^3*c^17*d^18*e^10*h^5*k,b^3*c^48*j^9,b^4*d^10*h*i^11*j^4,b^4*d^2*e^19*h^8,b^4*c^3*e^12*g^2*h^7*k^6,b^4*c^5*d^26*h^12*k,b^4*c^12*d^12*e^5*h^4*i*j^10,b^4*c^34*g*i^7*j*k^3,b^4*c^36*h^3*i^2*j^3,b^5*g^5*j^6*k^14,b^5*e^25*i*j^9*k,b^5*c^2*d^2*e^17*f^5*j*k^4,b^5*c^8*e^2*h*i^18,b^5*c^11*d^16*e^5*j^5*k^5,b^5*c^16*d^26*f^3*k^8,b^5*c^23*d^9*k^14,b^5*c^23*d^10*g^9*j^4,b^6*d*e^3*f^9*g*i^6*j^8,b^6*d^31*e*h^4*i^4*j^5,b^6*f*g^6*i^8*j^2,b^6*d^24*h^3*i^6*k^5,b^6*d^25*f^7*h^4*i^3*j^4,b^6*c^11*d^18*g^5*h^3*i^5,b^6*c^34*e^9*h*j^2*k,b^7*d^35*e*g^5*i*k^3,b^7*f^2*j^7*k^12,b^7*c^2*j*k^21,b^7*c^2*f^10*g^6*j^6*k^3,b^7*c^21*e^16*g^2*j^3,b^8*e^25*i^6*j,b^8*c^9*d^8*e^5*h*i^3,b^8*c^14*d^18*f^9*i^2*k^2,b^8*c^21*d^2*f^3*g^12*h*i^2,b^8*c^44*e^20,b^8*c^58*h^3,b^9*d^18*f*g^2*j^2*k^10,b^9*d^19*e^12*g^12,b^9*d^50*g^6,b^9*e^8*f^6*j^5*k^6,b^9*c^3*d^2*e^13*g^17*i*k^3,b^10*e^17*f^10*h*j^3*k^2,b^10*c^7*e^23*f^7*j,b^10*c^19*e^16*g^5,b^10*c^28*d^6*e^4*g^4*h^10,b^10*c^33*d^16*g^4*h^3,b^11*c^7*e^5*f*g*h^6*i^8,b^12*e*g^5*h^12*i*j^2*k,b^12*e^16*g^2*h^10*j^5,b^12*e^8*f^12*g^2*h^3,b^12*c^7*g*h^14*j*k,b^12*c^8*d^7*f^7*g^3*i^4*j*k^5,b^12*c^13*e^11*i^11*j^2,b^12*c^15*d^21*i^6*j^4,b^13*g^4*i^3*j^7*k^8,b^13*e^3*g^15*h^7*j^2,b^13*c*i^19,b^13*c^18*f*j^6*k^8,b^14*e^3*f^5*i^5*j^4*k^4,b^14*d^4*f^11*j^6,b^14*c*h^5*i^3*j^8*k^5,b^14*c^6*f^3*i^2*k^8,b^14*c^25*d^5*e^9*f^2*g*i^3*j^2,b^14*c^37*e^2*g^6*i^5,b^15*d^8*g^10*j*k^6,b^16*e^19*f^7*j^5*k^2,b^16*c^2*e^14*f^9*g^4*i^2*j^2,b^16*c^2*d^54*e^3*i^4,b^16*c^4*e^12*k^11,b^16*c^6*d^18*f^5*h*j*k^6,b^16*c^13*d^2*h^8*j^8,b^16*c^16*f^7*g^3*k^2,b^17*h^10*i^8,b^18*d^13*e^15*f^6*i,b^18*d^6*e^8*i^3*k^9,b^18*d^37*f^4*h*k^4,b^19*d^3*e^25*g^4*j^8,b^19*e^7*h^13*i*j,b^19*c^11*f^5*h^13,b^20*d^11*e^14*h^6*j^2,b^20*e^19*f^2*g^6*k^3,b^20*d^21*e^6*f^8,b^20*d^4*e^7*g^5*h^5*k^4,b^20*d^5*f^2*g^14*h^6*j,b^20*c^3*d^14*g^5*k^7,b^21*d^11*e^12*j^7*k^2,b^21*c^26*e^3*f^7*h^3*k^3,b^22*e^25*g^7*h^4,b^22*c^29*e^4*j^8,b^22*c^34*d^8*f^4*k^2,b^23*c^8*e^5*f^8*i^8,b^24*d^3*e^12*f^5*g^2*i^3,b^24*c^4*d^17*g*i*j^3,b^24*c^9*d^27*f^3*g,b^24*c^16*d^11*g^15*j^2,b^26*f^2*h^3*j^5*k^4,b^26*c^2*d^7*e^29*j^2,b^26*c^7*d^17*e^21*k^3,b^26*c^14*d*e^11*g^8*j,b^26*c^19*d^11*e^3*f^7*g^8,b^27*c^2*d^9*g^4*h^4*i^6,b^28*e^3*f^6*g^5*h*j^3,b^28*c^3*d^16*f*g^6*i^2*j^7*k^3,b^28*c^5*g^10*k^7,b^28*c^7*d^8*f^4*g^4*h^5*k^2,b^28*c^13*d^9*g^3*i^8,b^29*d^6*h^19*j,b^30*i^3*j^10*k^2,b^30*c*d^6*j^6*k^6,b^30*c^5*e^12*h^3*k^5,b^32*c^11*f*g^6*j^4,b^33*d^4*h*i^6*k^9,b^33*d^5*f^11*h^2*i^3*j^4,b^33*f^3*g^2*h*i^5,b^33*c^22*e^11*j^2*k^5,b^34*d^15*e^3*g^2*i*k^7,b^34*c^11*d^11*e^5*f^3*j^5,b^34*c^23*d^4*k^7,b^35*e^14*f^7*i*j^3,b^35*e^7*i^3*k^3,b^37*c^16*e^6*g*h^8,b^37*c^21*f*g*h*k,b^38*d^3*e*f*h^8*j^10,b^39*c^3*d*f^2*i^6*j^4,b^39*c^15*i^8*k^5,b^43*e^4*h*j^6*k^3,b^43*c^4*f^11*k^6,b^44*g^8*j^9,b^45*d^8*e^24*i^2,b^45*d^18*e^16*i,b^45*c^7*d^2*e^6*g^14*i,b^45*c^23*g^6*h^3*k,b^46*e^9*f*h^11*i*j*k,b^46*d^7*e^7*h*j^4*k^3,b^47*e^16*h^4*j^2,b^49*e^7*g^3*h^6,b^50*d^7*f^2*h^13,b^51*e^2*i*j^3*k,b^52*c^15*e^6*h^2*i^3,b^53*c^4*d^12*f^3*j^3,b^53*c^16*d^5*g^4,b^54*c^4*d^13*h^6*i^3,b^62*f^9*h^2*k^2,b^63*d^10*e^3*f^6,b^69*c^2*f^5*g^8,b^70*g^4*i^4*j,b^72*d^12*e^6*h^2,b^80*c^4*g*k^3,b^89*c^20*d^4*f^2,b^92*e^4*g^3*h^2*j^2,b^97*d^2*h^2*i*k,c^2*d*f^9*h^7*j^3*k^5,d^47*f^5*h^3*i*k^3,d^10*f^3*g^3*h^5*j^9*k^3,d^56*g*h*j^6*k,c^11*e^9*h*i^6*j*k^2,c^3*e^4*i^22,d*e^18*g^2*h^6*j^6,d^11*e^10*f^13*g^2*k,e^11*g^7*h^5*i*k^7,c^2*d^25*g*h^10*j^2*k^2,d^2*g^2*i^11*k^14,c^6*d^7*e^4*g^3*i^4*j^7,c^11*d^17*f^8*g^3*i^3*k^3,d^15*h^6*i^12*j,c^30*d^15*g^9*h*j,c^4*e^4*g^6*h^4*i^9,c^3*f^2*g*i^3*j^10*k^9,d^36*f^3*j^6*k^5,c^25*e^2*j^3*k^10,e^11*f^4*i^6*j*k^6,c*d^9*f^10*h^4*i*j^3*k,d^13*g^10*k^8,c^2*d^44*f^5*g^4*h*k^3,d^28*f^9*g*h^4*i^4,c^11*e^9*f^14*h^2*j,c^23*e^2*f^6*g^3*h*k^4,d^26*g^7*h^13,d^16*e^22*h^11,d^26*e^14*f^7*h^4,c^29*f^9*i^3*j^2,c^4*d^16*e^20*j^4*k^4,d^55*f^6*i^2,d^8*g^9*h^2*i^7*j^5,d^7*e*f^13*i*k^11,c^2*d^8*e^20*f^4*g^2*i^4,c^11*d^22*e^8*g*h^4*i^2,d^16*e^9*f^6*i^12,c^2*e^11*g^2*h*j^8*k^6,d^5*f*h^8*j^2*k^6,f^3*g^18*h^3*k^2,d^10*e^2*f^2*i^5*j^15*k,f^2*g^7*i^6*j^8*k,f^7*g*h^13*i,c^3*d^12*e^3*i^18,c^8*d^10*e^4*f^2*j^15,e^13*f^6*i^2*j^13,e^6*i^4*j^7*k^4,d^18*f^4*h^2*j^9,f^12*i^3*k^7,c^20*d^5*f^4*g^13*h*j^2,h^4*i^12*j*k^4,d^6*e^2*g^10*i^7*j^2*k^2,d^8*e^22*j^8*k^2,c^6*d*e^15*j^2*k^11,c^6*d^2*e^4*f^8*g*j^7,c^18*g^6*j*k^2,d^10*f^10*h^7*i^4*j,c^6*d^3*f^2*g^2*h^6*i^6*k^2,c^41*e*f^7*h^4,d^27*e^18*j^3,d^20*e^11*g^2*i^2*k^9,d^21*f^7*g^11*j^2,d^14*g^16*i,f*i^7*j^14,c^16*e^26*k^5,c^18*d^16*e^13*f^2*h^2*j^2,e^22*f^6*h^5*i^2,c^4*e^15*h^4*i^4*k^5,c^4*e^4*f^14*g^4*h^5*i,c^6*d^24*e^2*f^4*h^9,d^4*e^22*g^9*k^3,d^35*e^9*f*g^3*h^2,d^43*f^3*h^9*i^2,c^10*g^4*i^14,c^12*d^16*f^5*i^9*j^2,c^14*e^26*f^2*g^2*h^2*i,c^28*d*e^6*g*h^6*k^3,d^18*e*f^14*h^6*k^5,d^64*j^6,c*d^57*i^2*k^6,c^22*e^19*j^7,c^36*d^22*j^3*k^2,c^2*e^6*h^17*k^7,c^10*d^6*e^8*f*i^7*j,c^22*e*i^9*k^7,d^9*i*k^18,c^11*d^41*g^4,f^14*h^2*i*j^3*k^5,c*f^6*h*i^3*k^14,c^8*g^7*h^8*i^3*j^4*k^2,c^34*d^14*f^3*i,e^7*f^11*g^2*j^4*k^3,d^14*g*h^6*j^8*k^4,d^7*g^6*h^5*j^2*k^13,d^8*f^13*h^2*i^4*k^3,e^11*f^18*j,c^4*d^23*e^3*g^7*h^7*i^5,c^8*f^2*h^11*j^5,c^9*d^33*f^2*g^7*i^4,c^11*e^4*f^10*k^8,c^20*h^10*k^9,c^32*d^4*e^28,e^6*g^8*h^4*j^6,f^4*h^18*i^4,d^8*f^13*g^8*k,c^2*e^3*i^23,d^6*f*g^4*h^11,c^32*f^4*h^13,e*g^3*i^2*j^13*k^2,e^35*g*h^2*j^5*k,c^19*d^6*f*g^14*h^6,c^38*j^12*k^2,d^4*h^2*i^10*j^7*k^2,e^24*h^9*k,d^14*f^8*i^9*k^5,d^20*e^4*h^13*k^5,c^2*d^6*e^10*h^5*j^13*k^2,c^5*g^16*h^8*k,c^7*d^16*e^2*f^11*j^5*k^5,c^12*e^5*i^4*j^10,c^17*f^13*i^3*j^2*k,c^26*h^4*i*j^6*k^2,e^7*h^2*i^17*j^2*k^3,f*h^7*i^12*j^4,c*d^10*e^10*j^8*k^9,c*d^11*f^2*g^4*j^13,c^6*d^20*e^2*k^12,c^13*d^4*g^9*j^7,e*g^6*i^7*j^5,d^19*f^4*h^5*i^2*j^7,f^12*g^6*i^6,c*d^12*g^5*h^4*i^4*j,c^36*f*g^2*h^2*j^4,d^46*e^5*f^7*j*k,d^12*e^4*f*h^18,c^12*e^3*h^9*i^7*k^5,d^9*e^17*h^3*j^6,e^22*f^8*i^4*k^2,d^19*e^9*f^14,d^2*e^10*h^2*i^2*k^3,d^3*f^8*g^7*h^3*j^5,c*d^33*h^7*j^2,c^4*d^12*e^2*f^6*i*k^6,c^9*e^5*g^18*i^6,c^11*e^3*g^3*h*i^4*k^12,c^11*g^12*h^2*i,c^34*e^25*j^3,d^13*e^17*g^12*j*k,d^44*e^4*g^6*j^3,d^7*g^26,d^21*e^6*g^8*h^2*i^5*k,e^2*f^5*h^6*j^2*k^10,e^28*f^4*h*j^4,d^10*i^12*k^10,c^9*e^21*g^5,c^11*d^17*e^8*f^2*h^5,c^23*d^10*e*g^4*h^4*k,d^2*g^3*i^20,e^10*g*h^7*i^7,c^2*d^4*e^2*f^12*g*i^6,c^11*d^18*h^11*i^4*k,c^17*d^7*e^14*j^13,c^34*d^10*g^3*k^8,b*e^13*f^9*g^2*h^4*k^4,b*e*g*h^15*j^4*k^5,b*d^29*g^14*h^4,b*c^2*f^7*g*h^8*k^8,b*c^5*d^15*e^3*i^5*j^7,b*c^10*d^25*f^9*i^4,b*c^17*d^8*i^7*j*k^5,b^2*e^5*i^18*k,b^2*d^2*f^5*i^17*k^4,b^2*d^15*e^26*h^10,b^2*d^36*e^2*f^6*g^8,b^2*c^4*e^16*g^2*h^17,b^2*c^40*i^9*k,b^3*f^8*j^9*k^3,b^3*i*j^3*k^12,b^3*d^22*f^6*h^4*j^5*k^7,b^3*c^15*e^14*g*i^2*j^5,b^3*c^20*d^9*e^6*f^13*g*i,b^3*c^24*d^13*e^2*h^5*j^9,b^3*c^27*e^7*g^6*i^4,b^3*c^29*d^23*j,b^4*d^9*e^2*f^5*g^5*j^10*k,b^4*c*e^16*g^3*i^15,b^4*c^3*d^7*e^3*f*h*i^10,b^4*c^15*g^2*i^12,b^4*c^64*h^2*i^3,b^5*d^17*f^7*g*i^2*j^4*k,b^5*d^10*g^6*i^4*k^10,b^5*d^48*e^8*i^3*k,b^5*e^6*f^12*j^7,b^5*d^12*e^4*f^2*h^2*j^4*k^10,b^5*c^3*h^9*j^11,b^5*c^6*f^4*g^3*j*k^6,b^5*c^8*d^6*f^10*h^2*j^3*k,b^5*c^27*d^13*e^23,b^6*d^7*e*g^11*h^2*j^12,b^6*d^17*f^7*g^11*j^4,b^6*c^15*d^21*e^12*h^3*i^5,b^6*c^27*d^15*f^3*g^3*h^3*i^4,b^7*d^7*e^20*f^3*j^3*k^4,b^7*e^13*i^2*k^13,b^7*d^25*f^9*g^7*h^2,b^7*c^2*d^32*e^19*g^3,b^7*c^4*e^28*k^9,b^7*c^18*e^8*k^13,b^7*c^18*f^14*g^4*j,b^8*e^7*g^6*h^9*i^4*j,b^8*c^4*f^10*g^6*h^2*i^3,b^8*c^7*d^31*e^2*f*g^3*k^6,b^8*c^25*d^5*e^23*h*i^2,b^9*d^15*e^11*f^5*k^2,b^9*e*g^14*h^7*j^4,b^9*d^8*e^4*g^5*k^11,b^9*g^19*h^6,b^9*c^12*f^7*i*j^8,b^9*c^21*d^2*h^2*j^12,b^9*c^26*d^12*f^5*j^4*k^3,b^10*f^3*g*i^14*k^4,b^10*f^9*i^9*j^2,b^10*c^2*e^28*f^6*i*k^3,b^10*c^13*d^2*e^3*h^16,b^11*d^37*i^2*k^10,b^11*c^24*d^2*e*f*j^3*k^6,b^12*e^10*f^5*i^7*j*k^2,b^12*c^24*d^4*f^11*g*i^3,b^13*e^17*f^2*g^2*i^2*j^2,b^13*d^28*e^4*f^8*j^4,b^13*d^11*e^5*g*j^6*k,b^13*d^21*g*k^4,b^13*c^6*d^5*g^15*j^5,b^14*d^5*e^6*f^4*i^10,b^14*c^22*e*f^7*i,b^14*c^31*d^8*h^9*k,b^15*c^9*d^5*e^8*f^4*g^8,b^16*d^3*e^5*g^4*h^5*i^5,b^16*e*f^6*h^9*j^5*k^4,b^16*d^13*f^6*g^4*i^4,b^16*c^9*g^8*j^8*k^6,b^16*c^16*i^12*j^2*k^4,b^16*c^41*h^7,b^17*e*g^10*h*k^11,b^17*c^5*d^34*f^3*i^2*j^5,b^17*c^52*j^2*k^2,b^18*f^5*g*h^9*k^2,b^18*d^11*i^15*k^2,b^18*c^9*d^27*e^6*k^5,b^18*c^40*f^2*i^6*k^2,b^19*c^27*d^11*g^9*i,b^20*i^10*j^7*k^6,b^20*d^16*i^8*j^5,b^20*c^10*d^9*g^5*i^10,b^20*c^59*g*i,b^21*c*g^6*j^7*k^4,b^21*c^3*d^15*f^4*j^9,b^22*e^3*f^2*g^3*i^7*j^5,b^22*g^2*h^2*i^4*j*k^4,b^22*c^13*d^9*e^12*i^7*k^3,b^22*c^24*f^5*j^4,b^23*d^8*f*g^3*h^4*i^13,b^23*c*d^5*e^10*j^8*k^2,b^23*c^13*e^3*j^2*k^11,b^23*c^13*f^8*g^7*j^7,b^24*e^19*f^4*h*j^6,b^24*e^12*i^2*k^7,b^24*d^13*f^2*h^5*j^2*k^2,b^24*f^4*g^9*i,b^24*c^13*f^2*g^8*h^4*k^2,b^25*c^25*d^13*e*f^2*j^2,b^26*d*e^8*g^5*i^5*k^5,b^26*g^4*i^12*j^6*k^2,b^26*d^5*f^3*i^7*j^8,b^26*e^10*f^6*h^3,b^26*c^11*e^3*g*h^2*k^5,b^27*d*e^10*g^15*k^3,b^27*h^9*i^4*k^5,b^27*d^32*f*g^9,b^28*e^7*g^11*h^9,b^28*d^9*g^11*h^2*k^3,b^28*e^5*i^5*j^7,b^28*d^5*f^13*i^4*k^3,b^28*c^5*i^7*j*k^9,b^28*c^7*d^19*i^2*j^3*k^4,b^28*c^17*g^10*i^6,b^29*d^30*g^4*j^4*k^2,b^29*c^9*e^3*f^4*g^4*h^7*i,b^30*d^14*e*g*i^8*j^2,b^30*c^12*e^4*h^3*j^9,b^30*c^17*d^3*f*j,b^30*c^24*g^2*h^2*i^2*j^3*k^4,b^31*c^3*i^12*k^3,b^32*d^12*g^7*h^3*i^3*j^4,b^32*e*f^8*j*k^10,b^33*e^3*g^8*j^12,b^33*c^15*f^7*h*i^4,b^34*g^4*h^7*j^6,b^34*d^2*e^29*h*i*j^3,b^34*d^12*e^21,b^34*c^4*d^36*e*k^3,b^35*c^9*i^15,b^36*d^3*f*g^10*h^9,b^37*c*e^5*h^14*k^3,b^38*e^12*g^3*h^7*k,b^40*d*f^4*k^8,b^40*g^3*i^2*k^14,b^40*g^12*j^5,b^41*c^5*e^11*h^3*i^2*j^3*k,b^41*c^55*e^2*i,b^42*d^6*e^5*h*j^6,b^42*c^6*g^4*k^3,b^43*d^14*f^2*h^8,b^44*c^18*d^14*f^2*g^5*h^3,b^45*c^4*g^7*h^5,b^47*d^20*h*i^5*j,b^47*c^2*e^27*h^3,b^47*c^47*i*k,b^48*c^11*e^2*h^6*i^8*k,b^49*d^10*e^9*i^3,b^49*c^10*d^4*f*g^3*i^2,b^51*c^8*e^20,b^53*e^12*f^10*h,b^56*d^10*g*j^4*k^6,b^57*c^5*f^5*j*k^2,b^58*e^5*f^2*g^8*j^2,b^59*d^2*f^4*g^4*i^2,b^59*d^16*g^3*h^5*k,b^59*c^24*h^3*j^3,b^61*d^6*e^11*h^3*k^4,b^65*d^29*f,b^67*c^3*d^3*e^15*j^4,b^69*g*k^7,b^73*j^7,b^74*f*i^5*j,b^76*c^12*d^8*f^3*h,b^78*c^10*e^2*k,b^94*c^5*d^7,b^97*c^3*h^2,b^119*f*j,d^25*e^13*f^6*g^5*h^2*j*k,d^17*f^3*j^19,c^31*d^13*f^2*g^2*i^2*j^5,c^6*d^32*f*g^12*i^5,d^11*e^3*g^4*h^16,c*d^11*e*f^5*g^3*i^2*j^2*k^7,e^9*g^6*h^5*i^8*j^2,d^24*f^3*h^10*i^3*j^4,d^28*g^19*h^2,f^8*g^2*h^13*k^9,d^22*f^6*g*h^5*i^3*j*k^3,c^13*e^7*f^3*g^3*h^2*k^8,e^3*f^2*g^13*h^2*i^2*k^6,c^8*e^2*f*h^19,c^19*f^6*i^2*j^5*k,c^5*e^2*f^2*g*i^15*k^6,d^12*f^5*g^9*i^5,c^43*d*f^8*g^5,d^2*e^25*f*g^2*i^3*k^2,d^33*e^12*f^7*j,c^6*d^26*e^5*g*k^6,c^12*d^39*f^2*i^3*j^2,e^11*i^3*j^10*k^8,d^12*f*h^3*j^12*k^3,d^5*h^2*j^6*k^12,d^31*g^4*h^3*i*j^7*k,e^9*f^5*g*h*j^10,c^8*e^2*g^6*j^4*k^6,c^10*d^20*f^3*h^5*j^6*k,c^22*d^13*g^5*h^4*k^10,d^4*f^7*h^8*i^3*j^4,g^2*h^7*i^5*k^6,d^8*g^16*k^4,e^27*f^3*h^6*i*j^3,d^18*e^7*f*h^10*k^4,c^6*e^2*f^3*g^9*h^5*i^2,c^8*d^12*f^9*g^3*h^10,d^5*e^34*g^4*j^4,d^29*e^14*g^3*h^3*k^2,c^14*d^2*g^2*j^11,c^14*d^3*g^3*i^10*k^8,c^26*d^16*e^4*j^6*k^6,e^13*i^6*j^4*k^2,c^12*f^6*g^5*i^5*j^3,c^14*d^24*h^3*i^3*k^6,c^24*g^10*i^7*k^2,c^49*e^8*f*h*j^3*k^2,d^11*e^20*g^5*i*j^5,d^42*e^7*f*j^7,d^21*e^12*f^9*g^5*k^3,c*d^35*g^4*j*k^4,c^36*e^15*g*j^4,c^10*e^24*f^2*i^3*j^2,c^24*d^8*e^4*h,d^18*f^6*g*j^3*k^11,c^10*e^6*h^3*i^13*k^5,d^2*e*f^10*h^3*i^3*j*k^7,d^34*e^7*f^7*g^2*h^2*i,d^27*g^7*h*i^3,c^7*d^48*i*j^8,g^4*h^12*j^3*k^2,d^17*e^29*i*k,c^9*d^11*e^11*f^3*g^14,c^28*e^10*i^8*j^3,f^3*g^3*j^8*k^9,e^4*f^5*h^17,d^8*f^5*i^8*j^2*k^9,d^8*g^10*h^14,c^16*h^5*j^9*k^6,c^21*f^8*j*k^9,c^52*e*g^5*i^2,c^3*g^9*j^10*k^4,d^13*f*h^6*i*j^10,d^23*f^15*j^2,d^6*g^5*h^5*i^3*j^4*k^4,c^31*f^12*g^2*k^3,d^2*e^7*f^14*h^4*i^3*k^3,c^5*e^2*f^16*i^7,c^14*h^10*i^5*j,d^13*e^14*f^11*j*k,e^15*h^3*i*j^3*k^7,e^4*f^5*g^7*h^4*j^8,d^6*e^7*f^3*k^10,c*g^12*h^3*j^2,g^8*h^10*i^8,d^46*g^2*h^8,e^25*f^15,d^19*g*i^6*j^11,e^26*g^5*h*j*k,c^6*d^21*e^5*f^13,c^13*d^4*e^6*g^4*h^5*k^5,c^15*d^35*h^10,d^19*e^2*f*h^13*i,d^2*e^3*h^19*i^4*k^2,c*d^12*h^12*i^3*k^5,c^2*d^46*g^12*h^3,f^4*g*h^9*k^12,d^9*e^8*i^4*j^10,e^13*i^8*k^8,d^19*f^6*i^3*j^2*k^3,c^7*d^2*e*i^6*j^4*k^9,c^44*e^3*j^9,d^11*f^2*g^4*h^4*i^11*j^3,d^3*e^13*f^5*g^2*h^11,c^23*e^4*f^13*i^5,f^5*h*j^12*k^7,j^6*k^16,c^10*d^3*e^11*f^10*g,c^19*d^17*j^4,c^22*e^4*f^2*g^6*i^2*k^6,c^31*d^10*g^5*k^7,d*e^8*h^2*i^9*j^2,d^11*f^12*i^8,c^5*e*g^2*h*i^11*k^3,c^7*d^25*h^6*i^6,c^10*d^4*f^4*g^2*i^10*k^6,c^42*e^3*f*h^4*j,d^11*f^4*g*h*i*j^7*k^5,d^43*e^2*f*g^5*j^5,e^11*f^9*j^10*k,d^36*g^10*i,e^4*f*g^3*j^4*k^10,f^7*h^3*j^6*k^5,c^10*g^2*h^2*k^14,c^17*d^7*e^28*j^3*k,c^29*d*e^10*g^7*j^2,f^11*h^6*i^3*j^4*k,d^8*f^9*h^10*k^5,c^5*d^15*e^17*h^4*i^4*k,c^17*d^9*g^3*h^4*i^3,g^13*k^8,i^3*j^13*k^9,d^57*e^11*h^2,c^4*d^20*e^6*g^17,c^6*d^50*e^4*g^2*h*k^3,c^8*e^2*f^11*g^4*h*j^4,c^28*d^9*f^5*g^2*i^5*j,d^3*f^10*g^4*h^6*i^6,e^11*f^15*g*h^4*j^2,h^15*j^6,f^13*h^8,c*d^2*f^27*h*k^2,c^11*d^7*i^14*j^3,c^15*e^28*h^2*i,d^9*e^16*f^2*h*k^6,d^3*f^10*g^14*h,d^33*h^5*k^10,c^2*f^4*j^11*k^3,c^16*d^6*f^2*j^7*k^7,c^20*e^11*f^5*h^3*k^6,f^6*i^8*j^5*k^3,c^2*i^10*k^12,d*f^3*g^9*i^3*j^6*k,e^27*f^6*g^7,d^25*f*g^8*j^2*k^5,c^9*g*i^19,c^12*d^63*j,b*d*e^16*f^8*g^3*h^6,b*d^15*e^4*g^2*h^17*k,b*d^11*e^2*f^8*h^2*i*j^6*k,b*f^10*g^2*i^5*j^3,b*c^2*d^4*h*i^3*k^10,b*c^2*d^5*f^16*h^2*j^5,b*c^9*g*h^8*i^3*j^7,b*c^12*f^2*g^7*i^7*k^6,b*c^14*f^8*g*h*i^2*k,b*c^33*d^5*e^14*i^6,b^2*e^22*g^2*i*j^5*k^4,b^2*d^5*e^10*g*h*j^9*k^5,b^2*d^15*e^2*g*j*k^8,b^2*g^15*h*j^8,b^2*c*d^9*f^5*g^15,b^2*c^38*d^4*k^8,b^3*d^30*f^7*h^2*i^4*j,b^3*e^26*f^6*i^3*j^2,b^3*e^13*f^12*j^4,b^3*c^9*d^9*e*h^11*j^8,b^3*c^10*d^55*g*i^4,b^3*c^12*e^6*f^4*k^4,b^3*c^14*d^19*f^10*h^4,b^4*e^13*f*g^8*k^2,b^4*c*d^30*f^7*g^2*j,b^4*c^13*d^23*g^7*k^6,b^5*e^10*g^4*h^6*i^4*j,b^5*d^28*h^11*j^3,b^5*d^7*e^2*f^3*g^4*i^3*k^2,b^5*g^9*i^5*k^11,b^5*c*d^31*f*g^3*h^3*k^6,b^5*c^12*d^9*e^22*f^6*h^2*k^2,b^5*c^31*e^5*h^8,b^5*c^36*f^6*h*k^2,b^6*d^18*e^3*i^2*j^16,b^6*d^20*e^29*f^3,b^6*c^5*e^14*h^11*i^6,b^6*c^10*e^6*f^10*h^4*i^5,b^6*c^24*d^4*f^8*h^8*i^2*k^2,b^7*d^5*i^14*k^6,b^7*d^12*e^8*g^5*h^9*j,b^7*e^13*f^7*g^11,b^7*c^6*d^5*e*g^10*h^8,b^7*c^11*d^15*f^5*g^10*h,b^7*c^18*d*f^7*i^3*j^5,b^7*c^25*i^6*j^7*k^3,b^7*c^30*i^5*k^6,b^8*c^4*e*f^3*i^16*k^2,b^8*c^5*d^12*e^6*f^4*g^4*j^6,b^8*c^17*d^5*g^9*k^4,b^9*d^10*e^3*i^7*j^8,b^9*d^20*f^6*i^6,b^9*d^3*g^5*i^9*j^2*k,b^9*c^4*e^30*g^3*h^6,b^9*c^5*d^13*g^5*i^8*k^4,b^9*c^7*d^44*f^4*i^3,b^9*c^9*d^5*e^22*f*g^3*k^3,b^9*c^37*h^2*j^7,b^9*c^49*g*h*j*k,b^10*f^2*g^2*i^19,b^10*d^9*f*h*j^12*k^3,b^10*c^4*e^17*f^5*i^9,b^11*f^5*h^4*i*j^10,b^11*d^3*f^19*j^2*k^2,b^11*f^11*g^2*i^2*k^11,b^11*d^10*e^24*f^2*i^4,b^11*d^25*e*f^2*g*h^3*j^8,b^11*c^3*d^3*e^17*i^6*k^7,b^11*c^5*d^34*e^4*i*k^2,b^11*c^10*e^7*g^12*i^6,b^11*c^12*d^18*g^6*h^2*i*j^2,b^11*c^14*e^3*f^2*h*j^7*k^4,b^11*c^15*f^2*g^12*i^5,b^11*c^19*f^16*k^7,b^11*c^24*d^11*g^11*h*i^3,b^12*d^2*e^3*g^3*h^5*i^12,b^12*c^3*f^5*g^7*j^10,b^13*d^53*g^2*i^4,b^13*f*g^9*h*j^2*k^2,b^13*d*f^7*g^3*h^6*j^4,b^13*c^10*d^8*e^23*j,b^13*c^22*d*e^16*g^4*i*k^2,b^13*c^22*d^2*e^5*g^13,b^14*e^6*g^23*j^3,b^14*g^2*j^17*k,b^14*d^16*e^12*h^7*i^7,b^14*c*e^17*g*i^11*k,b^14*c^12*e^3*f^8*g^2*h^6*i^2,b^14*c^15*d^7*e^6*h*j^5*k^4,b^15*i^6*j^11*k,b^15*e^28*g^2*j*k^5,b^15*e^15*f^3*h^4*j^3,b^15*d*e^7*f^17*k^3,b^16*e^4*f^5*h^11*i,b^16*d^26*e^2*g^9*h*k^2,b^17*d^20*f^2*j^12,b^17*f^4*g^5*i^3*j^9,b^17*c^9*d^7*f^2*g^4*j^5,b^17*c^13*e^6*f^5*g^2*h^6,b^18*g^7*i^16*j,b^18*e^8*f*g^4*h^8*k^3,b^18*c*d^7*f^7*h^13,b^19*d^8*e^6*g*i^7*j^5*k^2,b^19*e^21*i*j^8,b^19*e^13*f^14*k,b^19*c^7*e*j^4*k^2,b^19*c^9*d^28*f^4*h^2*j^6,b^20*e^10*f^2*i^9*j^2,b^20*d^5*h^4*i^6*k^2,b^20*c^7*f^8*g^7*h^4*i^5,b^20*c^30*e^5*f^5*h^2*j,b^21*d^6*e^5*g^7*h^4*i^2*j^7,b^21*d^16*g^7*i,b^21*c^17*e^12*f^2*g^4*j^2,b^21*c^19*d^12*f^8*j^4,b^21*c^31*d^5*g^3,b^22*c^5*e*f^4*h^2*i^3,b^22*c^17*g^5*h*i^5*k^5,b^22*c^19*d^13*f^2*h^6,b^23*d^6*e^26*k^3,b^23*d^37*e^13,b^23*e^8*f*g^14,b^23*d^31*f^7*g^8,b^23*e^9*g^19*h*i,b^23*c^4*e*g^19*k^3,b^23*c^13*d^10*f*i*j^11,b^23*c^25*d^3*i^3*j^5*k^4,b^24*i^14*j^3,b^24*c^3*e^30*i,b^24*c^17*d^3*e^10*h^4*k^3,b^25*c^35*g^5*j^3,b^26*d^22*e^6*g^2*h^4*i*k,b^26*c^23*g*i^8,b^27*c^9*g^2*j^13*k^2,b^27*c^10*d^6*g^15*i^3,b^28*e^6*h^15*k^5,b^28*c^2*f^12*i^2*k^5,b^28*c^23*d^16*e^3*f*i,b^29*e^4*f*j*k^12,b^29*f^9*g^12*k^3,b^29*c^10*d^27*e^10*g^2,b^30*e^3*h^9*j^8,b^30*c^2*f^14*h^2*k^3,b^30*c^5*d^18*g^3*h^4*i^7,b^30*c^7*f^2*g^5*h^4*j^5,b^30*c^12*f^16*g^5,b^30*c^45*e^7,b^31*e^10*h^2*j^9,b^31*c*d^3*f^3*g^4*k^10,b^32*d^8*h^9*j^3,b^32*c^5*e^27*h^2*j^4,b^32*c^19*e^7*h^6*k^3,b^33*c^8*d^8*e*g^5*h^4*j^3,b^34*e^10*f^3*g^2*h^7*j,b^34*e^3*g^7*h^6*k,b^34*d^16*f*g*h^11,b^35*e^8*f^8*g*j^6,b^35*c^2*d^6*j^10,b^35*c^5*e*g^6*k^8,b^35*c^6*e^30*h^2*j^2,b^35*c^17*e^7*f^2*h^11,b^36*f^10*i^6,b^36*d^14*h^2*i^4*j^4,b^36*c^25*j^7,b^37*c^17*f^10*g^7,b^38*g^3*i*j^2,b^38*c^14*d^22*g^2*h^4,b^40*e^25*j,b^40*c^3*e^17*f^8,b^40*c^12*d^12*e^5*h^2*k,b^41*e^14*h^5*i^7,b^42*d^31*e*g^5*h^2,b^43*d^6*e^4*f^2*g^6*k^6,b^43*c^10*d^4*e^5*h^7*i,b^44*f^6*g*j^5*k^3,b^45*c^4*d^2*i^12,b^46*e^3*f^2*j^4*k^6,b^47*c^28*d^10*i^6,b^48*f*g^4*i*k^4,b^49*c^2*h^11*i*k,b^51*c^12*e^2*g^3*h^9,b^53*d^2*e^8*f*h^2*i*k^5,b^55*c^11*e^5*f^5*i,b^56*d^7*e^12*f^2,b^57*d^5*e^9*h^3*i^5*j,b^59*c^5*d^13*g*h^5,b^61*d^11*i^10*j^2,b^63*i^4*j^4*k^4,b^65*f^2*i*j^2,b^65*c^2*d^2*h^2*k^2,b^67*e^7*k^5,b^67*c^12*f^4*g^6,b^69*d^11*e^3*g^2*k^3,b^71*c^6*d^5*j^4,b^73*d^24*i^2,b^75*c^3*d*g^10*i,b^78*e^4*h^7,b^86*e^2*h^3,b^90*d^6*i^2*j^2,b^102*d^2*g*h*j,c^9*d^15*f*h^6*i^9*j^2*k,d^28*f^14*h^4*i,c^8*e^5*g^12*h^8*i,d^10*f^11*g^2*i^9*j^4,c^12*e^27*g*i^2*j^5,c^18*d^12*e^2*i^15,c^9*e^5*f^3*i*j^8*k^5,c^14*f^17*k^8,e^7*g*i^14*k^10,d^6*e*f^2*g^9*i^4*j^3*k^3,d^37*f^8*g^3*h^2*j^5,d^30*g^8*h*i*k^7,c^33*f^5*g^5*j^2*k^3,c^16*g*h^13*i^4*j^4,e^30*g^2*i^2*j^2*k^6,d^20*e^10*g*k^10,c^2*d^33*e^3*i^2*j^5*k^3,c^12*d^17*e^14*f^3*g^4*j^3,d^25*e^3*f^5*i^7,d^8*f^18*h^2*i*k^4,g^2*h^8*i^4*j*k^10,f*g^30*h*j,e^7*g^9*h^6*i*k^4,d^6*f^6*g^3*h^11*j,c^27*e^4*f^4*i*j^11,c^5*d^63*e^12*g^2,c^2*f^3*g^5*i^4*j^6,c^4*d^18*h^4*i^2*j^3*k^10,c^14*g^10*i^6*k^6,c^16*d^12*f*g^4*h^4*i*j^2*k,f^5*g*h^7*i^12,d^7*f^2*g^15*i^7*j,e^29*i^2*j^5,c^14*d^2*e^9*h^2*j*k^4,c*d^13*e^16*g^11*j^2*k^2,c^2*d^10*h^9*i^7*k^4,e^25*g^8*i^5,d^28*e^12*f^4*g^2*h^3*j^2,d^21*e^5*g^7*h^2*i^2*k^2,c^8*d^2*g^2*i^17*j,c^12*e^9*f^3*h^7*i^4,c^17*d^4*e*f^17*i^3*k,d^4*f^9*g^4*h^6*k^9,d^5*e^16*g^14,c^20*d^15*e^2*i^2*j^8,c^32*d^8*i^4*j^2*k^6,c^6*e^4*i^15*k^2,d^34*g^3*i^5*j^3,c^9*d^58*g^2*i^2,c^42*e^6*g^5*i,c^44*d^23*f^2*j^2,c^16*e^15*g^2*i^12,c^18*d^7*e^2*f^6*h*i^7,c^30*g*i^9,d^7*h^7*j^13,d^17*f^12*j^5*k^2,d^10*f^4*g^5*i*k^11,c^7*d^48*e^7*k^2,c^17*d^11*e^2*g^15*i^4,c^21*f^9*g^2*j^2*k^7,f^19*h^5*i*j^2,d*e*f^16*g^7*j^3,d^31*f^6*h^2*k^9,e^2*g^12*h^4*j^5*k^2,d^15*g^6*h^9*j^7,d^25*f^14*g^6*h^2,d*f^2*h*j^25,d^16*e^27*f*i^8,d^3*g^22*h^4*i^2,f^9*g^2*i^7*j^10,d^13*g*i^5*j^14*k,d^5*e^18*h^7*j^6,d^15*e^10*f^10*k^3,c^5*d^29*h^11*j^2*k^4,d^13*e^7*h^14,c^3*g^14*h^13*i,c^28*d^2*e^2*f*h^16,g^8*i^2*j^12,c^2*d^6*i^4*k^16,e^18*f^2*g^2*h^12,c*e^11*g^7*h^11*k^3,c^3*d^21*g*h^16,e^24*g*j^11,d^18*e^11*h*j^13,e^16*f^7*g*j^3*k,c^9*d^11*e^4*j^7*k^2,c^14*d^21*f^5*k^5,c^21*d^4*g^5*j*k^11,c^21*d^5*g^14*j^6,d^19*h^7*i^5*j*k^2,f*g^2*i^9*k^10,c^2*d^29*f^7*i^4*k^5,d^30*g^10*j^2,f^4*h^4*j^9*k^9,c^20*h^12*i^7,d^20*e^3*f^19,c^7*d^3*e^4*g^3*h^5*i^2,c^12*d^13*f^11*g^3*i,c^18*d^3*e^2*f^2*g^2*i^4*j^4*k^3,f^10*h^9*j*k^3,c^6*d^11*f^4*i^12*k^3,c^10*d^3*e^25*f^7*k^2,c^50*i^4*j^5,d*e^22*h^10*i^8,f^3*i^7*j^8*k^7,e^5*f^4*h^11*k^10,c^25*d^9*g^4*i^7,c^74,g^9*i^2*j^9*k^5,d^43*e^14*f^3,g*h*i^18,c^2*d^57*e^2*j^4,c^16*f^3*g^5*j^8*k^5,d^3*f^2*g^5*i^10*j^3*k^5,e^2*f^7*g^2*i^4*j^6*k,h^2*i^2*j^3*k^14,c^4*f^5*g*h^2*i*j^2*k^5,d^9*e^7*g*j^4*k^12,d^40*j^6*k^7,f^4*i^2*j^21,d^17*h^2*i^5*k^12,d^49*e^2*g*h*i^3,c^2*e^11*f*j*k^8,c^4*d^13*f^7*h^5*j^3*k^3,c^14*f^9*g^8,c^16*d^6*h^4*k^12,c^35*d^14*e^17,c^47*d^7*e^10*g^3,e^18*g^8*j^2*k^6,d^24*e^5*f^4*g^2*j^4*k,d^5*f^3*h^19*i^2*j^4,c^2*f^11*g^4*h^7*i^6,c^3*d^17*g^7*k^10,c^23*d^22*e^6*h^6*i^5,d*e^7*g^4*i^2*k^6,d^2*f^16*g^13*h*j,d^32*f^6*h^5*k,c^10*d^5*f^8*i^4*j^9,c^10*d^33*e^13*g^8,c^12*e^22*f^5*g*k^2,c^14*e^9*f^11*h^3*j,c^22*g^2*i^6*j^3*k^7,c^26*e^2*f^3*h^2*k^6,d^22*j^11*k^5,f^4*i^17*j*k^3,e^6*h^17*j^3,e^11*f^7*h^5*i^4*k^2,c^9*h^16*i^2*k^3,c^13*d*e^9*g^14*k^4,c^14*f^5*h^9*i*k^6,d^6*e^13*g^5*h^10*j^4,e^18*f^4*g^11,e^6*g^10*h^9*k,c*d^9*f^2*g^10*h^2*k^4,c^8*e^4*f^4*i^2*j^8*k,c^13*d^5*f^18*i*k^4,c^20*i^4*j^2*k^10,c^32*f^4*g^9*i^3*j*k,e^6*i^15*k^6,d^6*e^11*f*g^4*j^9,d^3*f^6*h*i^10*j^2*k,c^4*d^20*g^3*j^13,c^9*d^30*g^3*j^5*k^3,c^13*d^22*e^25*f^2*g*k^2,d^4*e^8*h*i^6*j^11,d^14*f^3*i^5*j^3,d^45*f^9*j^5,e*g^5*i^8*j^5*k^5,d^28*h^5*i^3*j^7,d^7*g^5*i^7*k^8,d^38*f*i^2*k^3,e^27*g^3*k^7,c^27*e^3*h^3*j^10,c^30*e^8*g^2*i*k^4,c^32*d^3*f^6*j^2,c^4*e^17*f^4*i^12,c^6*e^4*f^10*i^7,c^18*f^2*i^9*k^4,e^11*f^7*g^7*i^2*j,d^29*f^13*g*j^3,d^59*f^3*h*k,e^12*g^12*i^5*j^3,c^2*d^12*g^6*h^3*j^5,c^5*e^4*g^12*i^4*k^2,c^7*d^22*f^5*g^6,b*c^30*f^12*h*i,b*c^42*f^4*g^4*i^3*k^2,b^2*d^47*e^5*g^2*i^3*k^4,b^2*f^4*g^3*h^7*j^7*k,b^2*e^40*f^3,b^2*g^8*h^6*j*k^10,b^2*d^2*e^28*h*j^4,b^2*c^5*d^12*e^20*f,b^2*c^12*e^21*g^4*k^6,b^2*c^12*e^10*g^13*h*j^3,b^2*c^14*d^26*e^8*h^5*k,b^2*c^19*d^36*k^4,b^2*c^29*f*g^18,b^3*d^6*f*g^17*j^8,b^3*d^10*e^17*h^8*i^6,b^3*d^20*e^9*f^3*h*i^5,b^3*d^4*g^9*h^8*i^5,b^3*c^2*e^8*f^5*g^2*h^7*i*j^2*k^2,b^3*c^5*d*e^11*h^2*j^8*k^8,b^3*c^5*d^13*e^2*i^7*k^9,b^4*d^31*e^16*g^9,b^4*e^15*f^2*g^16*j^3,b^4*c^3*g^15*h^4*k^4,b^5*e^9*f^2*h^12*k^4,b^5*d^2*g^4*i^16*j^4,b^5*e^28*g^2*h^6*i^3,b^5*c^3*d^4*e^20*f^7*g^2*i^2,b^5*c^12*d^18*e^8*g*h^10,b^6*f*g^5*i^2*j^12,b^6*f^15*g^5*i*j^4*k^2,b^6*d*g^4*j^8*k^3,b^6*c^3*e^11*f^2*g^2*h^7*k^2,b^6*c^9*e^26*g*i^5*j,b^6*c^23*d^18*e^6*i^2*k^2,b^7*f^3*g*h^3*i^10*j^6,b^7*d*f^4*h^14*k^2,b^7*d^2*e^15*i^13,b^7*c^6*d^16*e^3*h*i^11,b^7*c^8*e*f^8*h*i^4*j^9,b^7*c^11*d^14*e^4*j^15*k,b^7*c^20*g^3*i^6*j^3*k^4,b^8*e^6*j^7*k^6,b^8*d^22*f*h^3*j^9*k,b^8*c^2*d*f^9*k^9,b^8*c^9*g^2*j*k^15,b^8*c^14*f*g^2*k^18,b^8*c^23*d^9*f*g^10*h^2*j^2*k,b^9*d^33*g^5*j^10,b^9*c^16*e^14*g^3*i^8,b^9*c^21*d^10*e^6*f^2*g^3*i^7,b^9*c^30*d^24*g^2*h^3*i^5,b^10*d^10*e^2*g^7*j^2*k^4,b^10*c^5*d^14*f^2*i^2*j^15,b^10*c^7*e^17*g^4*j^5,b^10*c^9*d^6*e^4*f^5*h*j^7,b^10*c^21*g^3*j*k^4,b^11*e^5*f^23,b^11*e^6*f*h^3*i^2,b^11*d^14*f^7*h^8*j,b^11*f^15*i*k^3,b^11*c^4*h^14*j^3*k,b^11*c^9*d^7*h^7*k^4,b^11*c^44*e*f^4*h^5,b^12*e^13*g^14,b^12*d^25*f^4*g^8*h*j^2,b^12*c^3*d^4*j^14,b^12*c^31*e^8*f*g^10,b^13*d^12*i^8*j^8,b^13*d^4*e^22*f^3*h^6,b^13*c^7*e^4*f^11*g*h^6,b^13*c^15*g^8*i^9*j,b^13*c^19*f^3*g^6*h^5,b^14*d^15*e^29*g*j,b^14*d^39*e^9*h^3,b^14*c^27*d^12*j^8,b^15*d^16*e^11*g^2*h^5*k^5,b^15*c*f^4*i^5*j^6,b^15*c^13*g*i^7*k^2,b^15*c^15*d^20*f^2*h*i^2*j^2,b^15*c^62*k^2,b^16*g^15*i^2*j,b^16*c*h^3*i^15*k^2,b^16*c^2*d^31*g^9*j^3,b^16*c^26*e*f*h^6*i^5*k^2,b^17*d^39*f*g^5*h*i^5,b^17*f^9*i*j^2*k^9,b^17*e^22*g^9*h^3,b^17*c^13*d^10*e^8*j,b^17*c^23*e^3*g^8*i^4,b^17*c^25*d^4*f^6*g^2,b^17*c^37*g^7*i,b^19*e^17*g^4*i^8*k^3,b^19*d^29*e^4*i^3,b^19*e^3*g^5*h^5*j^8,b^19*g^18*i^7,b^19*c^2*f^13*g^5*k^3,b^19*c^23*e^19*f^2,b^19*c^35*e^12*k^3,b^20*f*g*h^12*i^7*j^2,b^20*g^4*k^14,b^20*c^23*e*h^3*i^7*k^3,b^21*d^2*e^4*h^10*j^6*k^2,b^21*d^12*f^10*h^3*k^5,b^21*d^13*e^15*f*g^5,b^22*d^2*e^6*g^5*h^5*j^6,b^22*f*h^19*k^2,b^22*c^3*d^12*f^10*g^5*k^3,b^22*c^5*e^3*i^16,b^23*e^7*f^14*g^2*h,b^23*d^10*g*h^12,b^23*c^41*e^5*i^2,b^24*d^10*f^3*j^5*k^7,b^25*e^10*i^6*j^11,b^25*e^2*f^7*i^5*j^3*k^3,b^25*d^2*g^10*h^3*i^2*j^6,b^25*e^6*f^2*g^8*h^10,b^25*c^15*e^5*h*j^10,b^25*c^16*d^19*e*g^6*i^5,b^26*c^3*h^8*i^5*j^4,b^27*d^8*e^11*f*k^10,b^27*e*g^3*h*j^5,b^27*d^2*f^9*g^3*k,b^27*c^2*g^8*i^2*k^7,b^27*c^4*d^16*g^2*h^5*j*k^2,b^28*h^8*i^8,b^28*c^27*h^10,b^29*e^30*j^4*k,b^29*e^22*f^5*k^4,b^29*c^2*d^6*e^10*h^3*k^5,b^29*c^2*d^7*f^5*g^4*h^4*j^5,b^29*c^14*g^9*h^3,b^30*d^15*f^7*h^11,b^31*e^28*f*h^2*j^4,b^32*d^6*h*i^13,b^32*e^10*h^8,b^32*c^5*d^8*e^2*f^9*h*k^2,b^33*f^3*g*j^8*k^7,b^33*d^5*e^15*f^8*j^3,b^33*c^8*d^19*e^3*j^7,b^33*c^11*e^8*i^2*k^6,b^33*c^13*d^29*f^6*k,b^33*c^20*d^12*j*k^7,b^33*c^20*d^13*g^5*j^6,b^34*e^5*i^11*k^3,b^34*d^6*f^2*i^10*k^6,b^36*c^4*e^16*i^8,b^36*c^6*d^11*e^3*h^2*i^3,b^36*c^18*d^4*h*i^5*k,b^39*g^10*k^6,b^41*d^3*f*i^3*j^9*k,b^42*c*i^7*k^6,b^42*c^3*f^6*i^2*j^2*k,b^42*c^15*i^4*k^10,b^44*c*e^10*f^2*j*k^4,b^44*c^13*f^10,b^45*d*e^17*j^2*k^2,b^45*f^7*g^13*j,b^45*c^2*d^25*k^6,b^46*d^9*e^6*f*i^3*k^2,b^46*c^25*e*f^4*k^2,b^48*d^7*e^5*g*h^6,b^48*d^17*f^3*g,b^49*c^6*d^7*e^3*j^3*k^4,b^50*f^2*h^10*k^4,b^51*c^17*f^3*i^10,b^52*c^13*d^13*g^2*i^3,b^53*h^2*i^14,b^54*e^3*j^5*k^2,b^54*c^23*e^2*g^9,b^55*d^12*h^5*i^6,b^56*c^2*f*g^6*h,b^58*d^5*e^8*g^2*h*k^7,b^58*d^9*j^8,b^60*c^20*g^7*k^2,b^61*d^7*h^2*i^6*j*k^2,b^61*d*f^6*h^2*i^5,b^62*d^18*e*i*j^2,b^62*c^20*d^7*j,b^63*e^5*f^2*i^3,b^64*d^2*e^12*g^5,b^64*e^5*g^10*k^3,b^65*c^18*f^4*h^2,b^79*i*j^5,b^81*c^13*d^8,b^91*e^2*g*h^2*j^4,b^91*d^6*f*g*k^2,b^108*c*f^2,e^10*j^11*k^9,c^23*e*f^2*g^5*j^5*k^7,e^10*f^6*g^2*h^3*i^5*j^3*k^3,c^11*f^4*g*h^7*i^2*k^7,d^8*f*g^15*k^5,d^13*e^22*f^7*h^6*i,c^15*f*g^3*i^10*j^4*k^5,c^2*d^11*e^19*g^4*j^6*k,c^16*d^35*g^3*j^2*k^5,d^19*e^8*f^2*i^6*k,d^3*e^19*f^6*g^7*i^3,e^48*f^2*i,h^3*i^6*j^11*k^7,c^18*d^9*e^5*f*g^8*i^8,e^5*g^5*h*i^3*j^9*k,f^14*g^5*i^2*j*k^4,d*e*g^15*h*i^6*j^4,c^4*e^14*h^3*j^4*k^8,d^46*g*h^8*j*k,d^9*f*g^21*h^3,c^14*e^25*g^4*h*j^2*k^2,c^2*e^14*h^8*i^3*k^2,d^17*h^4*i^9*j^5*k,c^20*e^18*f*j^9,c^8*d*e^7*f^3*h^2*i^6*j^3,c^20*g*h*i^8*k^4,d^4*f*g^5*j^2*k^15,c^9*d^36*g^9,f^16*h^6*j^5*k^2,f^8*h^5*i^2*k^11,c^32*d^9*f^5*g^2*h^4,d^3*f^15*g^3*h^6*i^3,d^34*e^12*h^4*i^4,c^26*d^7*i^11*j^4,c^30*e^27*f*h^2,d^3*f^15*g^13*h,d*f^3*g^9*h^15*j^2,h^6*i^6*j^14*k,d^15*e^3*g*h^17*k^2,d^16*e^18*i^12,c^15*f^15*g*i^2*j^4,c^29*f^13*h*k^2,d^22*e^8*f^10*j^8,d^5*e^9*h*j^10*k^6,c^4*d^15*e*f^2*j^2*k^9,e^10*f^6*i^6*k^5,d^30*f^12*h^2*i*j^2,c^4*d^17*f^12*g^10*h*i^2,c^27*e^5*f^9*k^5,c^10*e^2*h^13*i^6*j*k^2,d^4*e^16*f^2*h^7*j^8,d^14*e^8*f^16,e^9*g^3*h^6*i*j^2,d^28*h^11*j^4,c^2*d^7*e*f^8*g^3*k^3,c^9*f^2*g^17*h^6*j,c^34*h^15,d^5*f*i^11*j*k^7,e^30*f^4*k^6,d^20*f^6*h^16*i,c^3*d^10*e^2*i^4*j^9,c^8*d^20*f^11*i^3*j,c^15*d^3*g^4*i^6*j^3*k^2,c^64*h*j^2*k^2,e^4*g*h^2*i^17*j,e^14*f^2*g^19*i^3,d^61*k^7,f^10*h^4*j^11,f^2*g*h^3*j^5*k^9,c^6*d^10*e^23*f^7*i,c^15*d^24*e^11*h^2*j^4,c^25*e^6*g^11*i^3*j,c^27*d^18*g^5*h^2*j^3,c^30*f^7*g^11*i^2,c*d^2*e^2*f^3*g^2*h^5*i^9*j,d^12*f^9*g^6*h^4*i*j^6,d^43*e^7*g*h^2*i^2,d^7*e^3*f^4*h^6*j^6*k^7,d^53*f^4*g*i*k,c^4*f^6*g^8*h*j^3*k^3,c^6*d*f^12*g^2*h^6*j^5,c^25*d^8*e^22*j^2,c^37*d*e^15*g^3*k^3,e^31*h^3*i^7,c^11*e^24*h^2*i^9,c^13*d^16*e^11*h^7*i^4,d^2*e^19*f^5*h^2*j^5*k,e^12*g^4*h*i*k^10,d^26*f^3*h^6*j*k^5,f^5*i^3*j^12*k^2,d^27*e^18*g^8,c^2*e^27*f^2*g*j^2*k^6,c^4*e^14*f^8*h^4*j^4*k,e^3*f^10*h^11*k,c^23*e^22*f*g*h^5*i,d^10*e^10*f^7*g^5*h^4,d^3*e^3*g^10*h^3*k^8,e^9*f*i*j^11*k^5,c^3*e*f^15*j^3*k^8,c^8*d^49*g^2*i^7,c^48*d^24*f^4,e^16*g^4*j^12*k^3,f^3*h^2*i^9*j^5*k^5,h*i^11*k^14,d^8*e^5*i^4*j^6*k^3,d^39*f^6*j^8,d*g^5*i^6*k^12,d^32*i*j^2*k^7,c^22*f^3*j^5*k^3,d^16*f^2*h^2*i^12*k^3,e^9*f^7*i^6*j^3,d^12*f^13*h^5*i*j^5,c^8*e^2*i^8*k^8,c^10*d^5*f^5*h^4*i^3*k^3,d^27*e*g^10*i^7*j*k,d^6*e^4*g^6*h^4*j^8,e^9*g^12*i^3*k^6,d^16*f^2*g^6*k,c^4*g^11*h^3*i*j^2*k^7,c^9*d^9*g^11*k^10,c^11*d^40*g^5*h*k^5,d^14*g^2*h^11*i^7*j^2,c^8*e^18*f*h^2*i*k^6,c^20*f^9*h^2,d^6*e^25*k^4,d^37*e^12*f^4*j,c^6*e^2*f^5*g*h^4*i^13*k^2,c^7*e^7*f^6*g^13,c^9*d^30*e^5*k^8,e^34*f^2*i^7,d^4*e^22*h^9*i^5*j*k,d^15*e^3*f^16*g^4*h^3*i,e^4*g^9*h^9*i^4,d^29*g^3*h^14*j^2,d^8*f^8*g^9*h^2*i^3,c^6*g*h^12*j*k^10,c^7*d*g^14*h*i^5*k^4,c^14*f^2*i^11*j^4*k,c^28*d^11*i^8*k^5,c*e^2*g^8*i^6*j^5,c^2*f^4*i^19*k,e^33*g^2*h^7*i^2,d^6*f*g^4*i^14,e^25*f^4*g^2*i,c^2*d^12*e^13*g*h^11,c^7*d^22*e^5*f^2*g*h^4*k^2,c^26*d*e^4*i^6*k^8,c^26*d^2*f^12*i^3*j^4,c^33*h^2*i^6*j^6,c^38*f^4*i^5,d^2*f^4*h^2*j^17,g^4*h*j^11*k^7,d^5*f^10*g^4*j^3*k^10,c^2*d^16*f^6*h^3*i^12,c^10*d^33*e^6*j^10,c^13*d^12*e^11*i*k^6,c^15*d^43*j^2*k,c^20*e*g^14*i*j^7,e^5*f*h^15*k^6,e^20*i^12*k^2,d^27*e^7*f^3*i^7,d^11*g^5*h^3*i^7*j^7,e^6*f^5*h^2*i^3*j^12,c^3*f^19*i^2*j^4*k^2,c^12*f^3*h^6*j^8*k^3,c^17*f^17*k^6,c^36*e^15*i^3*k^2,d^52*e^2*g^4*j^5,d^62*g^4,g^11*j^9*k,c^25*d^27*e^9*f^3*g,e^7*f^2*h^7*i^2*j^10*k,d^10*f^16*i*j^2*k^4,f^2*g^7*h^6*i^3*j^3*k,d^11*e^18*f^7*i^4,c*d^11*g^6*h^10*k^5,c^6*e^19*g^3*i^7,c^8*d^25*e^6*h^5*i^2*j^2,c^11*d^4*e^11*g^3*i^6,c^13*d^35*f^5*i,c^20*d^18*g^2*h^4*i^4*k,d^35*g*h^4*j^7*k^3,g^21*j^4,d^8*i*j^18,e^4*f*h^11*i^6*j*k^6,e^9*f^2*h^2*j^10,d^12*f*i^14,c^4*d^10*e*f^16*j^2*k^2,c^7*d^29*e^6*g^16,c^11*e^2*g^3*h*j^4*k^8,e^10*f^20,e^11*h^4*i*j^2*k^4,d^8*f^4*h^9*j^4,e^3*f^12*k^7,e^6*g^20*i^5,f^6*g^14*h^4*j,d*h^8*k^8,c^4*d^11*f^10*h*k^11,c^18*d^9*e^17*g^4*h^3,c^30*d^2*e^10*g^9*h^2*i,b*d^6*f*g^27*h,b*c^10*d*f*j^3*k^15,b^2*e^27*h^7*j^3*k^2,b^2*f^5*g^3*i^6*j^10,b^2*e^22*f^2*g^7*h^2,b^2*e^9*f^8*g*h^7*j^2,b^2*d^68*e^3,b^2*c^9*e^2*g^6*h^6*k^2,b^2*c^11*d^16*f^6*h^11,b^2*c^17*d^17*e^4*f^2*i^9,b^2*c^30*h^2*j^10*k^3,b^2*c^73*i^3,b^3*d^17*g^3*i^2*j^12*k,b^3*d^9*e^34*g*j^4,b^3*e^9*g^20,b^3*d^27*f^3*g^14*h^4,b^3*d^15*e*h*i^18*j,b^3*c^3*e^15*j^15,b^3*c^8*e^7*f^13*j^7,b^3*c^17*d^6*j^11*k,b^3*c^21*d^10*e^20*i^6*k,b^4*d^17*e^23*h^7,b^4*d^4*g^16*h^6,b^4*e^4*f*i^4*j^9,b^4*e^51*k,b^4*f^15*i^3*j,b^4*c^3*g*i^6*j^3*k^6,b^4*c^5*d^14*h^2*i*j^5*k,b^4*c^9*d^6*e^18*f^2*h^9,b^4*c^29*d*g^14*h*i^2*k,b^4*c^40*f^4*j^8,b^4*c^52*j^2*k^6,b^5*e^6*i^17*j*k^2,b^5*f^3*h^5*i^12*j^3,b^5*d^25*g^9*j^6,b^5*c^10*e^12*g^2*i^15,b^6*c^3*d^4*e^13*j^4*k^4,b^6*c^5*d^35*f*h^5*j^6,b^6*c^13*e^8*g^8*i^3*j,b^6*c^15*e^6*i*k^13,b^6*c^15*f^3*g^2*j^3,b^6*c^27*g^7*k^4,b^6*c^29*d^22*f*g*h^4,b^7*d^12*e^2*h^7*i^7*k^4,b^7*c*g^4*h^2*i^11,b^7*c^2*d^9*e^2*g^16*j^4,b^7*c^3*d^6*f^5*h^7*i^6,b^7*c^26*e^17*f^2*h^5*i*j,b^8*d^23*e^9*i^2*k^2,b^8*d^16*e^2*g^3*i^4*k^11,b^8*d^17*f^2*g^12*i,b^8*f^10*g^5*j^3*k^7,b^8*c^9*i^9*j^10,b^8*c^13*e^24*j^2,b^9*d^4*i^17*j^4,b^9*c*e^13*f*h^5*i^4,b^10*d^7*e^20*g^5,b^10*d^38*e^7*f^4*h^3,b^10*e^13*g^10*i*k^5,b^10*c^2*d^31*g^4*h^2,b^10*c^33*d^4*g^3*i^3*j^4,b^10*c^37*e^15*f*g,b^11*d^6*e^3*f^7*g^5*j*k^7,b^11*e^8*i^15*j^3*k^2,b^11*g^7*h^15*k^2,b^11*c^21*d^12*i^11,b^11*c^25*d^4*e^4*f^3*h^7,b^12*d^4*g*h^13*j^3*k^4,b^12*e*g*i*j^18,b^12*d^21*e^29*k^3,b^12*c^31*e^10*i*j^3,b^13*e^4*f^2*h^18,b^13*c^19*d^2*i^9,b^13*c^68,b^14*e^11*g^8*h^11*j,b^14*c^3*d^34*e*h^3*j^8,b^14*c^6*d^13*e^6*g^6*i^4,b^14*c^8*d^44,b^14*c^10*e^2*f^7*j^5*k^7,b^14*c^55*d^2*e*g^2,b^15*d^9*e^4*g*j^16,b^15*c^38*h^7*i^4,b^16*e^6*g^3*h^2*j^8*k^2,b^16*f^6*g^3*k^5,b^16*c^25*d^11*e^5*g^12,b^17*h^9*i^7*j^2*k^2,b^17*c^4*d^5*e^6*g^9*i^9,b^17*c^8*e^2*f^13*k,b^18*d*e^4*f^2*g^4*h^5*j^8,b^18*e^9*f^10*g^10,b^18*d^10*e^7*k^12,b^18*c^4*g^9*h^4*j^2,b^19*e^6*g^6*h^7*i^4,b^19*d^9*f^4*h^12*j^2,b^19*d^2*g^5*h^11*i,b^19*c^27*e*f*g^2*h^9,b^20*i^2*j^15,b^20*d^9*f^9*i*j^7,b^20*d^23*j^11,b^20*c^3*d^2*f*g^4*i^3*j*k^7,b^20*c^5*d^33*f^7*j^3*k^2,b^21*e^15*h^9*k^3,b^21*c^7*g^3*h*k^15,b^21*c^21*i^6*j^6,b^22*d^13*e^8*j^10*k^2,b^22*c*e^13*i*k^10,b^22*c^10*d^7*g^5*j^9,b^23*d^7*e^9*f^7*i^7*k,b^23*f*g^2*h*i^7*j^7,b^23*g^7*i^9*j,b^23*d^15*g*h^5*i^4*j^3,b^23*c^26*e^4*f^10*k,b^23*c^45*g^3*h^2,b^24*c^13*d^7*e^11*f^7,b^25*d^5*e^8*h^3*i^2*j^2,b^25*e^13*f^3*i^6*k^4,b^25*c*d^15*f^9*i,b^25*c^8*e*h^2*i^4*k^5,b^25*c^8*f^3*g^8*h^3*i*j,b^25*c^13*d^8*f*i^3*k^8,b^25*c^45*e^3*h^5*j,b^26*d^9*e^8*g^13*k^3,b^27*f^10*g^11*h^2*j,b^27*c^18*e^12*g^6*i,b^27*c^20*d^13*h^5,b^28*e^7*f^5*g^5*j^5*k,b^28*c^11*e^2*f^8*g*h^2*j^4*k,b^28*c^31*d^13*f^2*j*k,b^29*d^7*f^7*g*h^7*k,b^29*f^10*h^9*k,b^29*c^14*d^11*i^7*j^3,b^30*d^7*f^7*g^11*h^2,b^31*i^6*j^3*k^10,b^31*f^3*i*j^5*k^5,b^31*c^5*i^3*k^14,b^32*d^5*g^6*j^6*k^3,b^32*c^12*d^3*h*i^12,b^33*d^13*f^2*g^2*i^4*k^3,b^33*c^3*f^7*j^3,b^33*c^15*g^4*k^8,b^33*c^17*d^2*f^5*h^2*k^3,b^34*f^9*h^5*i^6,b^35*d^3*e^11*i^2*k^6,b^35*c^15*e^6*f*k^6,b^36*c^4*d^34*f^4*j,b^37*d*e^10*g*h^7*j*k,b^37*d^11*e^2*g*k^4,b^37*g^15*h^7,b^37*c^21*f^2*i^3*j^4*k,b^39*d^3*f*g^10*i^6,b^40*c^7*e*i^9*k^4,b^41*d^14*e^3*h*j^8,b^41*d^24*f^3,b^41*c^3*d^7*g^2*i^2*j^2*k^3,b^41*c^8*d^17*g^2*i*k^6,b^41*c^43*e^3*k^2,b^42*d*i^12*k^2,b^42*c^7*d^3*e^17*f^2*i^2*k^2,b^42*c^31*f^2*i^3*k^2,b^43*c^13*e^7*g^9,b^43*c^18*d*g^9,b^44*c*g^5*h^5*i^7,b^44*c^6*f^2*g^4*j^10,b^45*g^6*h^2*j^2*k^4,b^49*f*g^2*j^9,b^49*c^16*d^3*e^6*f^2*h^7,b^50*c^33*k^2,b^52*e^10*h*i^2*j^2,b^52*d^9*h^5*k^4,b^53*c^20*e^12*g*j^2,b^54*c^8*e*f*h^3,b^56*d^12*g^7*h^3,b^58*c^2*d^12*e^12*j^4,b^58*c^26*i,b^62*d^8*e^12*g*i^2*k,b^68*i^2*j^2*k^7,b^70*c^3*d^2*h*j^2,b^80*g*k^6,b^89*d^3*g^6*h^4,b^97*j^2,b^106*c^7*d*f^2,c^11*d^20*e^9*f*k^11,c*f*g*h^8*i*j^2*k^11,d^13*e^13*i^5*j^3*k^5,d^37*h^4*i^2*k^9,e^24*f^3*g^7*i^2*j,c^4*d^21*e^4*f*g^6*h^2*k^3,e^53*k^2,c^8*d^3*e^10*g^8*i^7*j^2*k,c^10*d^34*f^4*g^2*i^2*j^4,c^57*e^5*f*g^4*j*k,d^11*g^4*i^15*k,c*d^10*f^9*g^4*k^12,f*g^7*h^11*i^4*k^3,c^17*d^6*i*k^17,c^10*e^5*g*h^2*i^7*k^8,d^30*g^9*j^3*k,c^22*d^3*e^3*f^2*g^2*h^5,e^12*g^18*i^7,d^22*f*g^12*h^5*i^2,g^9*h^16*j^5,c^28*d^16*f^5*i^2*j^7,c^14*f*h*i^15,c^5*e*f^12*g*i*j^7*k^2,c^7*f^2*h^2*j^4*k^15,d^9*e^6*j^5*k^13,d^17*f*h^2*i^2*k^13,c^15*d^49*e*h,c^29*f^14*g^7*j,d*e^6*f^5*g^3*k^7,g^17*h^7*j^4,e^3*h^14*i^8*k^4,d^14*e*f^3*h^17,d^4*e^7*h*i^3*j^12,d^14*f^8*i^2*j^4,c^5*g^4*i^5*j^6*k^6,c^9*e^5*g^12*h^14,c^21*e^3*f^15*i^4*j,c^22*d^22*f^10*g^5,c^29*d^5*g^10*h^2*k^4,e^7*g^2*h^6*i^8*j^4,d^6*f^14*g^2*i^7,c^3*g^7*h^5*i^10,c^5*d^20*g*h^10*i^5,f^9*g^2*h^7*j^8*k^2,c^15*d^2*e^27*h*j^5,c^3*d^10*e^16*h^8*i^3,c^20*d^13*e*i^4*k^10,d^21*e^23*g^8*h,e*h^11*k^14,c^13*e^27*g*h^6,c^58*h*i^4*j^4,f^6*g^4*j^13,c*d^2*e^16*h^13*i^8,f^8*h^3*i^7*j^7,g^5*h^2*i^9*j*k^9,d^12*e^2*f^11*i^2*j*k^10,c^12*e^5*j^8*k^7,e^14*f^4*h*i^5*j^6*k^3,d^6*e*f^10*h^6*j^8,f^2*h^5*i^2*j^2*k^7,c^31*e^13*g^2*i^5,d^10*e*g^6*j^3*k^5,d^41*f^5*h^3*j^5,c*d^34*g^5*h^2*k^9,c^36*f^2*g^2*j^2*k^5,d^18*f*g^2*h^5*i^5*k^5,c^3*e^4*f^28,c^8*d^50*g^6*h^4*i^3,c^10*e^5*f^6*h^3*k,e^30*j^2*k^8,e^12*f^3*g^13*j,c^11*d^18*f*g^12*k^3,c^30*j^9*k^9,d^2*e*f^5*g^9*h^3*i^2,c^6*d^12*f^5*i^5*j^9,c^7*d^47*g*j^6*k^2,c^17*g*h^19*i^2,g^4*i^13*j^2*k^3,d^6*e^18*g*h^12*k^3,d^16*e^10*g*h^5*k^6,c^4*g^15*h^12,c^28*f*i^4*j*k^3,c^30*d^20*f^7*h*j^3,d^13*e^23*j^9*k,c^2*f^5*i^15,c^5*d^37*e^3*j^5*k^5,c^15*g^14*j^2*k,c^16*f^3*h^3*i^12*k^3,d^45*h*i^3*k^5,c^2*h^7*j^11*k^7,c^3*d^8*g^10*i^7*k,c^5*d^39*f^6*g^4*h*i^2,c^7*e^21*f^3*g^8*h^3,c^28*d^10*e^7*f^3*j^2*k,c^35*g*h^6*j^9,c^40*d^3*k^10,c^15*d^21*e^14*g*j^3,f^5*i^2*k^17,d^5*e^23*f^4*i^3*j,c*e^16*g^3*i^5*k^4,c^3*d^29*e^3*f^2,c^10*d^12*e^4*g^2*h^5*i^3*k^5,c^10*d^13*g^11*h^6*j^4,c^15*d^22*g^2*i^2*k^8,c^50*e^11*k^4,c^52*d^18*f^5*h,e^14*h^3*j^13*k^3,d^6*e^5*h*i^13*k^4,f^6*h^12*i^4*j^3*k,d^2*e^3*f*h^10*j^7*k^3,d^48*f*g^7*i^3,f^3*g^14*h^5*j^4,h^9*j*k^12,c*f*g^13*h^9*k^3,c*d^19*e^32*k^2,c^8*d^3*e^22*g^4*h^4*j^3,c^20*e^15*g^9*h^3,c^25*d^6*e^7*g^9*k^2,d^10*f^3*h^17*i^3*j*k^3,d^11*e^11*h^11*i^6,c*d^21*e^3*f^8*h^4*i^5,c^20*e^2*f^2*i^13*j,e^7*g^6*h^7*k^6,c*d^10*f^3*h^12*j*k,c^7*d^11*e^9*i^8*j^2,e^2*f*h^6*i^8*j^11*k^3,c^2*d^2*h*i^19*k^3,e^9*i^3*j^12*k,e*f^12*i^2*j^4*k^4,d^8*h^3*j^8*k^5,f^4*g*i^4*k^13,e^23*h^10*k^4,c^5*g^15*i^4*j^5*k,c^7*d*h^2*i^2*j^2*k^14,c^30*e^4*f*h*j^11*k,c^31*d^19*f*g^5*i^2,h^6*i^11*j^6*k,d^19*g^9*j^9*k^3,e^7*f^3*g^9*h^12,c^5*d^3*e^9*f^5*g^2*i^13,c^9*e^5*f^19*i^4*j,d^3*e^5*g^6*i^6*j^7,e^20*f^2*g^3*j^10,e^7*f^8*h^2*j^12,d^9*f^22*j^4,c^5*g^2*h*j^6,c^10*d^2*f^14*g^2*k^2,c^17*g^7*k^8,c^19*d^16*g*h^5*j^2*k^3,c^29*d^9*e^29,d^11*g^2*h^6*i^14*j,e*f^18*i^7,f^2*h^8*i^5,c^17*d^17*e^18*i^8,c^26*e^17*f*g*h*i^4*j,c^28*e^4*f^7*h^6*j^3,e^9*g^18*i^5*k^2,d^11*g^12*h*j,i^8*j^13*k^3,c^3*e^29*j^5*k^2,c^4*f^7*i^7*j^5*k^6,c^27*e^4*g^14*k^2,c^29*f^2*g^8*h^3,e^18*h^6*i^3*k^2,d^21*e^5*f^4*h^11*j,d*f^28,c*e^13*g^11*h*i^7,c^5*d^14*h^10*k^6,c^6*d^48*e^3*g^2*h*j^4,c^17*d^8*f^4*g^4*h^10,d*e^25*g^5,d^32*e^12*f*h^4*j^2,d^11*e^17*f^9*g^5*k^3,e^7*f^3*g^19,d^25*e^5*g^4*h^3*k^4,d^56*h^8,c^2*g^24,c^11*d^5*f^3*j^13,c^16*d^14*f*i^2*k^13,c^23*g^3*i^2*j^7*k,c^27*e^20*g*h,d^9*e^14*g*h^6*i^6,i^13*j^5,d^13*f^5*h^2*i^8*j^7,c*e^29*f^2*h^4,c^11*d^6*h*i^10*j*k,c^15*e^9*h^8,b*d^8*f^6*g*h^7*k^11,b*f^10*g*j^13*k^4,b*d^16*e^23*f^5*g^6*h^2,b*d^17*g^13*i^5*j^2,b*c^21*e^15*j^6*k^4,b*c^33*g^10*j^5,b*c^35*d^12*j^2*k^8,b^2*d^17*e^5*g^7*h^8,b^2*d^3*e^11*f*i^6*j^6,b^2*e^4*f*g^14*h^14,b^2*c^9*e^4*i^8*k^4,b^2*c^11*d^27*h^4*i^3*j^2,b^2*c^21*f*g^6*i^7,b^2*c^58*h*k^4,b^3*d^6*j^5*k^15,b^3*d^28*e^6*h^4*j^11,b^3*d^38*j^3,b^3*c^3*d^48*f^10,b^3*c^5*d^21*g^5*h^3*i*j^5*k^3,b^3*c^8*d*g^20*i^2,b^3*c^10*d^31*g^5*k^6,b^3*c^12*j^2*k^20,b^3*c^33*d^3*e^13*f*j^6,b^3*c^45*e^6*g^2*k^2,b^4*d^15*g^2*i^11*k^2,b^4*f^6*h^3*i^2*j^2*k^11,b^4*c^19*e^15*i^5,b^4*c^21*d^11*e^2*f^3*h^2,b^4*c^33*d^4*h*i^2*k^2,b^5*e^3*f^3*g^3*j^3*k^9,b^5*d^21*f^9*h*j^5*k^4,b^5*d^14*f*g^2*k^13,b^5*c^6*e^22*g^13,b^5*c^7*e^4*h^4*i^13,b^5*c^8*d^22*e^9*g^7*j,b^5*c^15*d^5*e^10*g^12*h*j^3,b^6*e^11*g^9*i^8,b^6*d^30*f^2*g^3*h^2*i^3,b^6*e^7*f^10*h*k^5,b^6*c^8*d^23*g^8*h*i^5,b^6*c^10*f^2*g*i*k^14,b^6*c^43*e^6*g^5,b^7*e^9*g^4*h^6*j^11,b^7*d^5*e*f^13*g^4*j^3,b^7*d^19*g^3*h^10*j^7,b^7*c^2*d^20*e^4*g^2*i^6*j^8,b^7*c^3*d^17*i^19*j,b^8*d^20*e^27*i,b^8*c*d^3*e^28*g*h^6*i^4,b^8*c^6*d^13*e^20*g*i^3*k^3,b^8*c^17*e^6*g^2*h^10*j^2,b^8*c^18*d^7*e^2*g^15*i^2,b^8*c^37*e*i^10,b^9*d^7*g^19*h^5*k^2,b^9*e^4*i*j^18,b^9*d^3*f^6*j^10*k^2,b^9*g^4*i^2*j^4*k^11,b^9*d^27*f^4*j^6*k^6,b^9*e^7*f^16*h^6*i^4,b^9*d^19*e^10*f^7*h*k^5,b^10*e^2*g^12*h^10,b^10*e^8*h^2*i^3*j^15,b^10*c^16*f^5*i^4*j*k^7,b^10*c^18*f^11*j^3*k^2,b^10*c^49*d*f^2*g*i^2,b^11*d^8*e^2*f^2*j^18,b^11*d^17*e^5*j^5*k^9,b^11*d*g^5*j^12,b^11*c^5*d^10*k^18,b^12*d*e^14*f^4*i^6*j^3*k^5,b^12*f^12*g^2*i^5*j^2,b^12*d^9*g*h^6*i^3*j^6,b^12*d*e^18*h^13,b^12*d^19*f^10*g*i^2,b^12*c^12*d^26*e^13*i^6,b^12*c^26*e^4*f^9*g^4*i*k,b^12*c^28*f^15*j,b^13*d^2*h^19*k^5,b^13*c^3*d*e^16*f^4*j^3*k^3,b^13*c^9*e*h^6*i^10*j,b^14*e^18*i^5*k^8,b^14*d^9*e^5*f^6*k^3,b^14*e^8*g^14*i^5*j^2,b^14*g^8*h^4*j^4,b^14*c^3*d^2*i^2*k^12,b^14*c^10*g^13*h^3*i^2,b^15*g^27,b^15*c^9*f^5*g^7*i^2*j^9,b^15*c^22*e^15*g^4*j^5,b^15*c^23*h^13,b^16*d^28*e*f^5*g^4*i^3*k,b^16*c*e^16*f^10*g,b^16*c^10*d^7*e^4*h^6,b^16*c^13*e^9*f^2*g^6*k^6,b^16*c^15*d^17*f^8*k,b^16*c^41*i^2*j^10,b^17*d*e^5*f^12*h^2*i^5,b^17*e^6*g^2*h^8*i^8*k^3,b^17*c*f^4*g^2*h*i^7*k^6,b^17*c^21*d^7*e^2*j^4*k^5,b^18*f^7*h^10*j*k^5,b^18*e^11*f^3*i^8*j^2*k,b^18*c^4*d^5*i^6*j^6*k^2,b^18*c^9*d^15*f*i^5*k^5,b^19*c^8*e^4*g^3*h^11,b^20*h*j^8*k^9,b^20*i^2*j^2*k^18,b^20*c^14*e^10*g^2*i^3*j^4,b^20*c^16*d^20*j^6,b^20*c^19*e^2*f^5*g^2*i^2,b^20*c^28*d^13*g,b^21*g^6*j^9*k^7,b^21*c^2*h^2*i^11,b^22*e^2*f^4*j^6*k^3,b^22*f^18*k^6,b^22*c^5*g^4*k^12,b^22*c^26*d^3*e^19*k^3,b^22*c^38*e*g^8,b^24*f^3*g^9*j*k,b^25*e^2*f^10*g^2*h^4*i^2,b^25*g*h^15*j^2,b^25*c^24*e^19*h^2*i^3,b^26*d^12*e^14*f^5*h^2*j^2,b^26*d^5*e^7*g*h*k^8,b^26*c^11*i^2*j^7*k^5,b^26*c^13*d^9*f^5*j^9,b^26*c^25*d^2*j^3*k^9,b^27*f*i^10*j*k^5,b^28*g^10*i^5*j^2*k^3,b^29*e^6*i^8*k^8,b^29*c^11*d*f^11*h^2*i^2*j,b^30*d^8*e^8*h^2*j^11,b^30*d^18*j^3*k,b^30*d*e*g^2*h*i*j^5*k^7,b^30*d^11*g^2*k^10,b^31*e^2*i^11*k^6,b^31*c^7*e^17*f*i^5*k^2,b^31*c^9*e^4*f^7,b^31*c^21*i^2*k^6,b^32*d^2*e^11*f^4*g^4*j,b^32*c^3*e^12*g^9*j^3*k,b^32*c^8*e^4*g^9*k^4,b^32*c^10*d^26*f^2*g^3,b^33*e^8*h^7*i^4*j^3,b^33*d^10*f^6*i^3,b^34*f*h^8*j^7*k^3,b^34*c^8*d^16*e^20*k^2,b^35*d^24*e^9*h^2*k^2,b^35*c^3*d^8*g^6*h^9,b^35*c^6*e^4*f^2*g^12*i^2,b^35*c^27*f^2*i^5*j,b^36*c^14*d^8*g^5*j^2,b^37*c^6*d^8*e^20*f^4,b^38*g^2*j^12*k,b^39*h^4*i^3*j^6*k,b^39*c^2*d^37*e^2*f^3*i,b^39*c^23*h*j^3*k^6,b^41*f^4*g^5*h^2*j^4,b^41*g^10*h*i^2*k^4,b^41*f^2*g^4*h^6,b^41*c^19*d^4*e^14*i,b^41*c^24*d^14*e^6,b^42*c^24*d^3*h*j*k^6,b^43*e^6*h^4*k^2,b^43*c^3*f^12*k^5,b^45*d^6*e^2*g^7*h^4,b^45*f^5*i^5*k^9,b^45*c^6*d^10*f^5*j^7,b^45*c^18*d^3*g^5*i^2*j*k,b^46*c^10*d^3*f^2*h^13,b^47*c^4*f*j^6,b^47*c^16*k^4,b^48*e*i^11,b^49*g*k^16,b^49*c^28*d^8*f^3,b^50*c^14*g*h^2*i^5,b^51*d^9*e^24,b^51*d^33*e^4,b^51*c*g^15,b^52*c^14*d^6*e^8*f*h^5,b^54*c^20*f^2*i^8,b^58*d^7*e^10*i^9,b^58*e^6*f^11*k,b^59*e*h^2*j^5,b^59*d^6*f^6*k^3,b^60*d^4*h^9*i,b^61*c^17*d^4*g^6*h^4,b^63*c^2*f^3*g^2*j^2*k,b^64*d^10*h^2*i^6*k^2,b^66*c^9*g^4*i^3,b^74*c^6*d^4*f^3*j^2*k^3,b^84*c^2*e^11*j^3,b^84*c^7*d^3*e^3,b^88*c^5*g^3*h^2*k^2,b^93*g*i^3,b^95*e^5*h,b^114*c^2*h^3*i,c^5*d^19*e^7*f^7*i^3*j*k^2,f*h^3*i^3*j^12*k^8,d^28*e^2*f*g^2*i*j^7,c^21*e^19*f^2*g*i^8*j^2*k,c^35*h*i^5*k^5,c^14*d^16*e^17*i^9,c^12*e^8*g^2*h^6*j^3*k,d^5*f*h^13*i^6*k,d^16*e^4*g^12*h^6*i,c^18*d^10*e*f^2*i*j^10,c^30*d^3*g^3*i^3*j^4*k^3,c^5*d^43*e^6*h^2,f^10*g^17*h*k^2,d^8*e^4*f^5*i*j^7*k^4,c^12*d^16*f^7*g^5*j*k^2,e^4*f^11*g^2*i^6,d^14*g*h^11*i^4*j^3,d^24*f^9*g*h^4*i^3*k^2,d^14*e^13*f^5*h^2*i*k^5,c^5*e^3*g^8*h^9*i*j,c^10*d^8*f^13*g^8*h^2,c^2*e^19*f^2*i^9*k^3,d^52*e*g^3*j^6,h^6*i*j^5*k^11,c^21*e^18*g^2*i^4*j,c^23*d^25*e^5*h^5*j^3,c^14*d^12*f^6*i^11*k,d^12*g^2*h^6*i^4*k^9,e^9*f^25*j,d^44*e*g^6*h^5*i^2,e^10*f^3*h^4*j^3*k^5,c^5*e^2*f^17*k^8,c*d^12*g^12*h*k^7,e^6*f^2*g^9*h^4*i*k^3,e^5*g^15*h^13,d^4*f^4*g^15*h^6*k,c^6*e^3*f^6*i*j^10,c^18*i^3*j^4*k^7,e^5*f^2*i^14*j^2*k^3,f^8*h^5*i^9*j^4,c^7*d^25*f*g^8*j^7,d^9*f^5*g^5*i^4*j^5,d^2*g^10*i^6*k^5,d^33*f^3*g^4*h^2*i*j,c^18*d^4*e^12*j^5*k^5,c^30*f^8*g*j^4,c^42*g^6*k^5,e^28*f*i^2*j^4,d^23*e^8*k^3,d^7*g^11*h^7*j^7,c^3*e^3*f*g^17*i^3,c^5*d^16*e*g^2*i*k^12,c^5*d^17*f^7*g^11,c^17*d^10*g^16*k^3,e^10*h^2*i^12*k^8,d^6*f^12*h^4*j^2*k^10,c^3*d^7*e^19*f^3*g^4,c^15*e^12*g^9*k^6,d^5*e^16*h^12*i^5,e^21*g^6*i^9*k^2,d^15*e^8*f^5*h^5*i^4,c^5*d^39*f^3*h^9*i*k,d^4*h^13*j^4*k^5,d^5*e^14*i^7*j^5*k,d^36*e*f^2*i^2*j^7,c*e^48,c^11*d^29*i^4*j*k^5,c^13*d^60*j^3,d^13*e^3*i^15*k,c^34*d^2*f*i^6*k,d^12*f^7*j^3*k^12,c^18*d^34*h^3*j^9,c^21*d^13*e^5*g^5*i,e^14*f^2*g^2*i^12,d^28*e*f^8*i^7,c^4*d^11*e^2*g*h^5*i^10*j,c^58*d^10*f^3,d^38*f^14*j^4*k,e^5*g^2*h^2*j^9*k^3,d^32*e*g^15*i^4,d^17*f^3*h^7*j^11,f^11*g^2*j*k^6,c^9*d^10*g*h^6*j^5*k^7,h^9*i^4*j^3*k^3,c^14*e^13*g^8*h^3*i^7,c^23*e*f^18*k^2,d^5*e*g^12*h^2*j^4*k,c^19*g^8*h^4*j^3*k,e^4*f^25*h,e^5*f^3*g^5*h^7*i*j,c^7*d^2*f*g^4*h^11*k,c^31*d^19*e^14*i,e^30*g^5*j^3*k^4,e^12*g^19*j^2,c*j^16,c^6*d^8*e*i*j^3*k^17,c^17*e^25*g*h^2*j^2*k^4,d^34*e^6*h^12,d^7*f^2*h^3*i^7*j^10,e^34*h^5,c*h^2*i^9*j^4*k^5,c^5*e^14*h^9*k^4,c^7*d^23*e*f^3*h^14,h^5*i^20*j^2*k,d^42*g^7*j^7,e^3*h^16*i^4*k^4,e^16*h*i^5*j^9,d^7*e^8*f^12*i^4*j*k^2,f^6*g*h*i^4*j^8,c*d^21*h^5*i^2*j^5*k^3,c^4*e*f^4*i^6*k^11,c^11*g^6*i^6*j^2,c^13*d^15*f^4*h^5*i*j^4,c^60*f*g^2*h^2*j,d^18*e^15*f^9*g*j^2,f^2*g^3*h^3*i^17,d^32*e^3*j^6*k,d^11*e^8*f*g^6*i*k^9,d^42*f^7*k^4,g^20*i*j^3,g^2*h^7*i^14,d^25*g^5*k^10,c^23*e^18*j^9,d^9*e^5*g^2*i^10*k^6,c^9*e^20*i^4*j*k^2,c^11*d^5*e^7*h^3*j^3,c^16*d^15*f^14,c^23*h^2*i*k^6,c^23*f^8*g^7*h^3*j^2,c^58*e^15*k^2,d^8*g^2*h*j^2*k^17,e^27*g^13*j^2,d^47*e*f^3*g*h*j^6,c^12*d^40*g^6,c^47*d^5*e^9*g^3*j^3,e^16*g^9*i^7,d^24*e^3*g^3*h^3*i^2,d^7*e^4*g^8*h^9*i^5*k,f^15*g^10*h^2*j^2,d^48*g^2*h^7,c^33*e^11*g^5,c^54*i*j^9*k,e^6*f^10*g^4*j^6*k^2,f^2*g^9*k^11,c^7*e^20*g^2*h^3*i^9,c^21*g*h^7*i^6,c^41*d^3*e^4*j^10,d^7*f^12*h^7*k^2,d^8*e^14*f^3*g^10*h,c^8*d*e^7*g^15*i,c^17*d^18*f^3*i^2*j^10,c^20*e^5*f^11*i^6,e*f^3*j^13*k^6,h^18*i*k^4,c*d^7*f^12*g^10*h^2,c^3*e^2*i^15*j^2,c^16*d^22*g^8*j^5,d^5*g^6*h^16*j^2,e^5*f^10*i*j^10*k^2,e^3*j^7*k^15,c^4*d^30*g^4*i^7,c^6*d^61*h*i^2*j,c^8*f^8*j^6*k^6,c^8*d^22*e^23*g^2*h^3,c^20*k^15,c^39*e^4*g*i*j^2,c^53*d^19,d^5*f^5*g^5*j^7*k^4,e^26*f^8*g^3*k^3,c^5*e^11*f*g^5*h^16,c^27*d^3*f*h*i^9,b*e*f^9*g^2*i^4*j^5,b*f*g^7*i^6*k^9,b*d^13*f^7*g*i*j*k^4,b*c^4*d^51*e^5,b*c^13*e^4*h^5*j^12,b*c^14*d^14*g^11*i^4,b*c^16*e^9*f^6*g^4*j^2*k^5,b*c^18*f^12*j^4,b*c^30*f^4*g^3*k^9,b^2*e^5*f^16*h*i^6*j^2,b^2*e^6*h^7*i^9*j^4*k^2,b^2*c^4*f^8*i^8*k^5,b^2*c^6*f^14*h^5*i^3,b^2*c^7*d^19*e*j^2*k^11,b^2*c^25*e^22*i^7,b^3*d^3*e^10*f^3*k^7,b^3*g^8*h^5*j^7,b^3*e^3*i*k^16,b^3*f^11*g^8,b^3*c^2*d^11*g^7*h^9*j^3,b^3*c^12*d^4*e^29*g^4*i^2,b^3*c^21*d^18*e^17*g^3*h^3,b^3*c^26*d^28*e^9*g^3,b^4*d^14*e^17*g^8*j*k^5,b^4*d^12*e^18*i^10,b^4*c^25*f^2*h^14,b^4*c^49*d*e^13*h*i,b^5*e^21*f^7*g*k,b^5*d*e^9*h^7*j^2*k^2,b^5*c*d^19*f^2*g^2*i^6*j^2*k^6,b^5*c^5*d^11*e*f^5*k^5,b^5*c^17*d^4*g^5*k^14,b^5*c^36*f^7*j^5*k^2,b^6*e^18*h^10*i^5,b^6*d^3*f^6*i^17*k^2,b^6*e^3*f*g^2*h^2*i^6*k^10,b^7*d^20*e^5*g^10*h^7,b^7*e^4*i^5*j^9*k^6,b^7*g^4*i^2*j^14,b^7*d^9*i^4*j*k^9,b^7*c^10*e^20*g^7*h^5,b^7*c^11*d^3*f^6*g^9*i^3,b^7*c^12*d^16*e^7*f*g*h^10*j^2,b^8*e^5*f^2*i^15*k^5,b^8*d*g^5*h^5*i^12*j^2,b^8*e^9*g^3*h^12,b^8*c^3*d^3*e*f^11*g^3*h^5,b^9*e^14*f^10*j^5,b^9*c^4*e^15*g^2*i^2*j^7,b^9*c^6*d^14*e^2*h*j^9,b^9*c^9*e^7*f^2*g^2*i*k^3,b^9*c^11*d^24*f^8*j,b^9*c^18*d^7*g*j^3*k^4,b^9*c^30*d*g^15*j^2,b^10*d^8*e^3*f^12*i^7,b^10*e^4*h^3*i^10*j,b^10*d*f^4*i^9*k^3,b^10*c^6*d^15*h^7*i^7*k^4,b^10*c^41*h^5*i,b^11*d^33*g^6*h*j^4,b^11*d^12*e^3*f*g^12*i^4*k,b^11*f^15*j*k^10,b^11*c^28*e^6*g^8*j,b^12*c^4*d^6*e^2*h^6*i^2*j,b^12*c^7*e^7*f^8*g^5*i^6,b^12*c^16*g^4*h^5*i^4,b^13*d^33*e^19*f^3,b^13*d^16*e^20*g^4*k^5,b^13*d^47*e^7*h^3,b^13*c^3*d^10*e^2*g^18,b^14*e^7*f^7*g^2*h^5*i*j*k,b^14*f^5*g*h^9*k^5,b^14*c*e^2*f*i^17*k,b^14*c^3*d^14*f^7*i^12,b^14*c^7*d^6*e^23*f^10,b^14*c^10*i^15*j^2*k^2,b^14*c^19*e^16*f^2*i*k^4,b^16*f^6*h*i^7*j^10,b^16*c^22*d^12*i^7*j^2,b^17*d^22*f*g^4*j^7*k^2,b^17*d^14*e^10*f^4*g^2*h^5*k,b^17*h^2*i^18,b^17*c^2*d^9*f*g^23*k^2,b^17*c^2*d^39*e^5*i^2*k,b^17*c^13*f^6*g*j^10,b^17*c^27*d^11*f^4*j^6*k^2,b^18*d^6*f^5*g*h*i^10*j^5,b^18*f^2*g^3*i^6*j^2*k^3,b^18*c^32*g^7*i^4,b^19*d^12*e^5*j^6*k^5,b^19*g^17*i*j^3*k,b^19*d^5*g^2*k^14,b^19*g^16*k^5,b^19*c^2*d^30*f^3*g^10*j,b^19*c^25*d*j^5*k^5,b^20*d^20*h^3*i^5*k^5,b^20*e^9*f^4*h*j^3*k,b^20*c^4*e*f^18*k^4,b^20*c^11*e^2*i*k^10,b^20*c^13*d^9*f^2*h^5*k^5,b^20*c^44*d^10*e^8,b^21*e^16*f*g^4*j^4,b^21*d^27*e^3*f^7*j^6,b^21*d^10*e^4*g^3*h^5*j^8,b^21*d^20*g^3*k^3,b^22*d^4*e^5*f^3*h*i^2,b^22*g^5*i^4*k^8,b^22*c^9*e^20*f^8*j,b^22*c^19*d*f^3*i^6*j^5,b^22*c^21*e^13*g^2*k^4,b^22*c^23*f^6*h^3,b^23*d^18*i^2*j^7*k^7,b^23*c^9*e^2*f^2*h^5*i^6*k^4,b^24*d^2*e^4*g^6*h^10,b^24*e^9*g^12*i*k^2,b^24*d^12*f^5*g^6*h^3,b^24*c^17*i^4*j^4*k^3,b^24*c^31*d^15*i*k^7,b^25*c^4*d^2*e^2*g^5*j^5*k,b^25*c^5*f*h*i^12*k^3,b^26*g*h*i^8*j^7,b^26*d^10*g*i^7*k,b^26*d^2*e^25*f*h,b^26*c^27*e^6*f^3*i*j^2,b^26*c^36*h^3*j^6,b^26*c^41*f*k,b^27*c^5*d^20*f^3*h^4*i^5*k,b^28*h^5*i^2*j^9*k^5,b^28*f^11*i*j*k^8,b^28*d^31*e^7,b^28*c^2*e^2*f^2*g^8*i^4,b^28*c^11*d^8*g^7*h^3*i^2*j,b^29*c^2*g^8*j^9*k^3,b^30*f^15*g^5*k^2,b^30*g^4*h^7*j^3*k^3,b^30*c^2*d^15*e^18*f^4,b^30*c^9*e^19*h,b^30*c^14*d^8*e^11*k^2,b^30*c^21*e*g^14*h,b^31*d^7*g^5*h^9*i^5,b^31*c^2*d^4*e^9*h^3*j^10*k,b^31*c^2*d^16*h*i^7*k^2,b^32*e^6*g^17*k^2,b^32*f^3*g^11*h^5*j,b^34*e^7*g^7*h^5*k^4,b^34*g^6*i^4*j^8*k,b^34*d^4*f^2*h*j^10,b^34*e^9*f^5*h^8*j^2,b^35*h^14*k^4,b^35*c^6*e^6*i^15,b^36*e^4*j^9,b^36*d^4*f^12*j*k^2,b^36*c^6*j^3*k^8,b^36*c^18*g^12*j^2,b^37*d^2*h^6*i^5*j^3,b^38*c^16*e^8*g^5*j*k^2,b^38*c^18*d^2*h*j^3,b^39*c^4*g*h^3*i^4*k^2,b^39*c^6*d^10*f^2*h^8,b^40*e^4*g^15,b^40*d^21*g^9*h,b^41*e^33*h^2,b^41*d^8*i^10*j^4*k,b^41*c^4*e^13*h^6,b^41*c^14*e^8*g^8*h*i,b^42*c^22*e*g*j^8,b^43*c^10*i^7*j^2,b^45*c^10*d^13*e^6*f*j^3,b^45*c^22*d^6*i^2*k^2,b^47*d^32*e^2*i^3,b^47*c^32*e^10,b^48*f^3*k^7,b^49*h^10*j^2*k^4,b^49*c^7*d^9*e^6*g^6*i^2,b^50*c^7*g^6*h^5*j^2*k^2,b^51*e^6*g^3*h^8,b^52*d^13*f^6*j^7,b^55*h^2*j^7,b^55*g^4*h*i^2*j,b^55*c^4*f^4*g^4*i*k^3,b^57*d^9*e^8*h^4*j^2,b^57*c^2*e^13*k^6,b^57*c^4*d^19*f^6*k,b^57*c^11*d^3*g^5*h^4*j,b^60*d*e^8*h^9,b^61*c^8*d*e^6*f^3*i^2,b^63*h*j^5*k^7,b^63*c^27*e^5*j,b^65*c^2*d^18*e*g^9,b^66*h*i^4*k^6,b^67*d*f^3*g^6,b^71*d^7*g^7*k,b^73*e^8*k^4,b^73*d^28,b^76*e^8*g^3*i^2,b^76*c^4*d^3*g^2*h^6,b^86*d^8*e^6*h^2,b^92*e^3*g^6,f^16*g^10*i*j^3*k,c^7*d*e^5*f^10*g^2*k^8,e^2*h^14*i^5*k^5,c^8*d^4*e^6*h*j^13,c^13*d^14*f^13*j^5*k,c^5*d^21*e^22*g^7*h*j,d^2*e^9*f^2*j^10*k^8,c^46*e^12*g*i^2,c^2*d^10*f^4*g^5*j^4*k^6,e^9*f^8*g^2*h*i^5*j^2*k^2,d^2*f^10*g^8*h^3,e^29*f^6*g*h*k^3,c^43*f^6*i*j^2*k^4,c^13*g^9*h^3*i^5*j^5,c^16*e^15*f*g^2*i^2*k^5,c^23*d^3*e^21*g^3*h^4*j^4,c^11*d^11*e^10*h^11*i^3,c^2*f^4*g*h^14*k^7,e^8*f^3*j^13*k^2,f^5*h^6*i^8*j^7*k^2,h^5*i^10*j*k^11,d^19*g^8*j^10*k^4,d^3*e^4*f^2*g^5*i^3*j^8,g^10*i^5*j^2*k^9,d^27*g^4*h^3*j^4*k^4,c^20*f^5*g*h*j^7,d^11*f^4*g*h^6*i^11*j^2,c^6*e*f*g^3*h^3*i^7*k^5,c^8*f^7*h^8*i^2*j,e^33*i*j^7*k^3,e^8*g^17*i^2*k^3,d^11*f^4*g^11*h*j^2,d*e^24*g^4*j*k,c^7*d^25*e^4*g^3*h^3*k^5,c^17*g^23*k,d^9*e^13*f^2*h^6*i^3*k,c^12*f^4*i^10*j^6,d^30*e^6*i*j^10,e^24*f^6*g^7*h^4,c^5*d^17*e^4*f^4*g^6*h^8,c^12*d^3*e^10*f^6*i^3*j^7,c^24*e^3*i^5*j*k^5,d^49*e^2*g^3*i^4*j^5,c^11*d^7*e^10*g^5*j^2*k^3,c^13*d^38*f*j^4,e^19*g^2*i^11,d^22*e^6*f^5*i^6*j^2,e^53*f^2*h^2,d^5*e^7*g*h^6*i^9*j^4,d^15*g*i^8*k^3,c^34*e^14*f^2*i^2,c^36*d^11*e*f^8*h^2*j,c^48*d^4*h*k^3,e^8*f*h^2*i^19,e^2*f^8*g^2*j^4*k^10,c^4*d^14*f^6*g*k^14,c^35*d^15*e*g^11*k,d^5*f^18*h^4*j^4*k,h^10*i^3*j^6*k^7,f^10*h^3*i^2*k^10,c^9*e^10*f*g^8*i^5,c^23*d^23*g^7*h*i^2*k,d^3*f^6*h^13*j^6,d^13*f^20*h^6,g^4*h^12*k^5,c^2*d^6*f^12*g^4*h^5*k^8,c^3*e^5*g^3*i^16*j*k,c^9*d^20*e^26*f^3,e^3*j^19,e^28*h^2*i^11,d*h^4*i^6*j^13,h^3*i^8*j^7*k^9,d^4*f^5*i^7*k^12,d^17*e^6*h^15*j*k^3,c^7*e*f^2*g^11*h^10,c^15*d*g^4*j^13,c^3*d^9*f*h^6*j^7,c^8*d^19*f^15*k,c^15*d^2*g^5*h^5*i^2*j*k^7,e^3*g^20*j^6*k,e^19*h^15*k^2,c^24*f^2*h^6*i^7*j^2,c*e^12*h^4*j^6*k,c^6*d^9*e^4*f^11*k^4,c^11*e^7*g^13*i^2*j^3,c^13*e^5*h^3*k^10,c^13*f^5*g^7*h^4*j^5,c^25*g^12*h^3*k,d^7*e*h^11*i^6*k,c^2*d^34*g^6*h*j^3*k^3,d^18*e^8*g^3*h^4*i*j,d^11*e*g^8*h^3*i^3*k^8,d^5*g^22*h^3*i^2,c^7*g^2*i^8*j^12,c^11*e^23*f*h^2*j^4,c^25*d^7*e^3*h^6,e^12*f^3*h^9*i^3,c^4*d*e^4*f^17*h^2*i^2,c^11*e^5*g*h^8*i^5*k^4,c^13*d^15*f*h^13,d*f^9*h^8*j^3*k^6,d^2*e^19*g^10*h^2,e^12*g^15*h*k^2,d^26*g^9*h^6,c^19*d^5*i^3*j^7*k^3,f^8*h^12*k^11,c^11*d^5*e^21*h^11*k^2,d^24*g^4*i^6*j^2*k,d^55*h^2*i*j^4,c^10*j^3*k^19,c^29*e^9*g*j^5,c^43*d^13*j*k,f^2*g^5*j^10*k^8,c^17*h^2*i^8,c^31*d^21*h^6*i^5*k,c^66*f*h^4,d^7*f^4*g*h*j^4*k^8,d^14*e^23*i^4*j*k^4,c^3*e^9*h^6*j^15*k,c^4*d^8*e^5*g^11*i^3,c^6*d^38*e^3*i*k^8,c^6*d^39*f*g^5*j^2,c^8*e*f^9*j^7*k^4,c^18*d^32*g^10,c^20*f*g^3*j*k^13,c^41*d^3*e^18*k^4,f^11*h^6*i^2*j*k^4,c^17*d^18*e^14*h^5*i,c^29*d^12*f^8*h^5,e^15*j^3*k^11,f^8*g^8*j^2*k^2,d^21*h^3*k^15,d^22*f^14*g^2*h^4*j^4,d^5*g^7*h^10*j^6*k^3,d^2*g*j^25,d^6*e^23*i^9,d^37*e^10*h^5*i^4,e^19*f^7*h^4*k^7,c*e^9*f*g*h^11*j^7,c^6*e*f^15*g*h^4,c^15*h^15*j^3,c^35*d^3*i^13,c^39*e^18*h^2,d^16*e^11*g^4*i*k^9,f*g^3*i^8*j^9*k^6,d^20*f^7*i^3*j^11*k,e^26*f^4*g*j*k^5,d^5*e^6*f^2*h*k^9,c^7*g^5*k^18,d^20*e^2*f^12*h^9,d^3*e^3*h^15*i*k^6,g^10*h^15,e^34*g^7*i^6,c^2*d^21*e^21*f^3*g*h^3*i,c^16*d^45*e*f*h^7,g^4*i*j^17,d^34*f*j^6*k^8,c*f^3*g^9*i^2*j^3*k^4,c^2*d^10*e^12*g*h^11*j^5,c^3*d^28*f^9*g^3*j^5,d^18*e*h^18,e^6*f^8*g^3*h^6*k^3,e^12*f^10*i^3*j^7,c^2*d^11*g^2*h^17*k^4,c^12*e^5*f^2*i^5*j*k^9,c^24*f^10*g^2*i^4,d^53*i*j*k^6,e^19*f^7*j^8,d^8*e^7*h^2*j^12,e^12*g^2*j^2*k^7,c*d^18*f^5*j^4*k^2,c^8*d*g*h*j^6*k^8,c^11*e^18*f*h^18,c^13*d^11*g*k^11,d^2*e^8*f^9*i^6*j^2,e*f*i^8*k^7,d^26*f^7*h^2*i^3*k^2,d^10*f*g^6*h^9*i^3*j^5,c*d^19*h*i^5*k^11,c*d^20*f^15*g^6*h^2*i^2,c^24*e^3*f^12*j,d^37*f^4*g^6,c^6*e^18*g^3*j^10,c^11*d^2*e^10*f^9*g^3*j^2,c^23*e^3*f*g^8*k^5,c^25*d^26*f^7*g^2,b*e^7*h^7*i*j^4,b*e^12*f^5*g^5*i^5*k,b*d^10*f^11,b*c^6*g^4*h^6*i^3*k^2,b*c^8*d^24*h^11,b*c^11*d^3*f^3*g^4*i^2*k^5,b*c^41*e^15*g*h^4*j,b^2*d^4*e^7*g^18,b^2*f^6*h^8*j^8*k^4,b^2*c^5*e^5*f^2*i^3*j^9,b^2*c^14*d^14*i*j^13*k,b^2*c^17*g^3*i^5*j^3*k^9,b^2*c^29*e^4*h^11*i^5,b^3*f^2*g*h^10*k^9,b^3*d^8*f^4*i^11*j^3,b^3*e^28*f^7,b^3*c^6*d^14*e^16*h^9,b^3*c^9*e^21*k^8,b^3*c^21*e^3*f^7*g^11,b^3*c^42*f^7*i^2*j^2,b^5*f^3*h^2*i^6*j^13*k^4,b^5*d^43*e^4*f^4*g*h^2*k,b^5*f^12*g^2*h^13,b^5*d^13*h*i^4*j^11,b^5*c^3*e^5*f^8*g*i^8*j,b^5*c^12*d^6*i^6*j^5,b^5*c^17*d^16*f^6*i^5,b^5*c^61*h^2*j^4,b^6*e^2*h^3*i^17*j^3,b^6*d^64*f*j,b^6*d^14*h^7*i^14,b^6*c^3*f^2*g^2*i^18*k^3,b^6*c^17*d^5*f*h*j^9*k^6,b^7*d^16*e^4*f^3*h^13*k^5,b^7*f^21*i^2*j^3*k,b^7*g^3*i^5*j^5*k^7,b^7*f^5*h^4*j^7*k^2,b^7*f^19*k^5,b^7*c^10*e^22*i^4*j^4,b^7*c^15*d^6*e^14*f^2*i^3*k,b^7*c^22*e^4*g^7*i^3*j^3,b^7*c^24*d^20*e^2*h^2*i*k^2,b^7*c^36*d^14*g^6*h^2,b^7*c^38*f^2*h*j^4*k^7,b^8*f^2*g^11*j^8,b^8*c^10*g^3*h^5*i^11,b^9*d^8*f^4*g^7*h^4*i^3*j^2,b^9*d^46*e^5*h^3*i^2*j,b^9*e^14*f*h^2*j^6*k^5,b^9*d^25*e^10*f*g^3*i^6,b^9*d^10*e*f^7*h^7*j^8,b^9*d^39*g^2*h^2*i^4,b^9*c*f^9*g^4*h^2*j^5,b^9*c^4*d^49*g^2*i^3*k^3,b^9*c^13*f*g^9*h*k^5,b^9*c^15*f^7*g^3*h^6*j,b^9*c^22*d^11*e^20*h*j^4,b^9*c^34*d^4*e^13,b^10*e^21*g^4*j^7*k^3,b^10*d^21*e^8*f^4*j^9,b^10*d^14*e*g^3*j^3*k^7,b^10*g^23*k^3,b^10*c^3*d^5*f^9*h^13*i^2,b^10*c^22*d^12*e^2*h^7*i^6,b^10*c^39*d^3*h*j^2*k^7,b^11*e^10*h^2*i*j*k^3,b^11*d^8*e^2*f^14*k^6,b^11*f^2*i^8*j^12,b^11*d^30*e^16*g^4*h,b^11*e^25*f^5*j^4,b^11*c^9*i^5*j^8*k^4,b^11*c^9*d^23*e^9*g^9*i,b^11*c^11*e^18*g^2*k^8,b^11*c^13*e^5*f^3*h^4*k^3,b^12*e^6*f^21*i^2*k^2,b^12*e^12*g^10*j*k,b^12*c*f^5*h^11*k^3,b^13*e^9*g^6*h^11*j^3,b^13*d^6*e*f^2*g^6*h^4*k,b^13*c^7*i^3*j^7*k^7,b^13*c^9*d^16*f^2*j^9*k^2,b^13*c^21*d^9*j^3*k^11,b^13*c^33*d^3*f^2*g^4*j^2*k^2,b^14*e^7*g^5*j^8*k^5,b^14*d^27*j^10,b^14*d^6*f^7*g^5*k^8,b^15*d^4*g*i^6*j^2*k^5,b^15*d^35*f*i*j^4,b^15*e^30*h^2*k^4,b^15*d^28*i^3*k^9,b^15*c^17*e^11*j^5*k,b^15*c^19*f^6*j^7,b^15*c^31*j*k^5,b^16*e^5*i^17*k,b^16*c^5*f^2*i^8*k,b^17*d^9*e^2*g^2*h^5*j^10,b^17*e^7*g^8*i^3,b^17*d^18*e^5*i*k^12,b^17*d^19*f^5*g^2*j^2,b^17*c*d^2*g^7*h^4*i*j^4,b^17*c^6*d^12*g^7*k^3,b^17*c^8*d^43*f^3*g*h^2,b^17*c^41*e^2*f^2*g^4,b^17*c^43*d^8*f^8*j,b^18*f*g^4*i^11,b^18*c^5*e^16*f^4*h^3*i,b^18*c^15*e^11*f^6*g*i^5,b^18*c^17*f^12*h^3,b^18*c^29*f^4*h^2*i^2,b^19*d^44*e^8*i^2*k,b^19*d^9*e^23*f*j,b^19*e^24*h^2*j^3*k^3,b^19*c^4*d^2*e^16*k^6,b^19*c^6*d^33*e^3*k,b^19*c^16*f*g^14,b^19*c^37*d^6*f*j^8,b^20*e^3*f^19*h^2*k^2,b^20*c^27*e^20*k^2,b^21*c^12*d^25*g^3*i^3*j^3,b^21*c^59*g^5*k,b^22*d*e^23*f^7*h*i,b^22*d^15*e^11*h^12,b^22*c^2*e^16*g^3*i^3,b^22*c^16*d^18*g^2*h^4*k^4,b^22*c^35*f^7*i^5,b^23*h^2*j^13,b^23*c^10*d^15*e^9*i*j^2,b^25*e^2*j^6*k^12,b^25*c*f*k^15,b^26*d^6*f^11*i^3*k^6,b^26*g^9*h^2*i^8*j^3,b^26*c^3*e^17*h*i^7*j^2,b^26*c^8*d^7*e^9*f^2*i^6,b^27*d^7*e^5*g^3*j^7*k,b^27*c^8*h^2*j^6*k,b^28*e^9*f*h^5*i*j^4,b^28*d^4*h^9*k,b^28*f^7*g*i^2*k^9,b^29*e^9*g^15*k^4,b^29*d^15*g^9*h^2*j,b^29*c^7*d^4*f^4*j^5*k^8,b^29*c^32*d^4*g^5*h^4,b^30*c^6*f^3*g^2*h^7,b^30*c^20*d^12*f*g*h^11,b^31*e^7*g^16,b^31*c^14*d^9*j^13,b^31*c^17*f^8*g*j^3*k^2,b^32*i^6*j^5,b^32*c^14*d^10*h^2*i^3*j*k^3,b^34*d^7*e^11*h*j^6,b^34*c^12*e^4*i*k^6,b^34*c^12*d*f^6*h*j^5,b^34*c^24*g^3,b^35*d^15*h^8*i^7,b^36*d^19*i^4*k^4,b^36*f^13*g*j^5,b^36*c*f^5*g^6*k^9,b^36*c^22*e^15,b^36*c^24*d^15*e^2*h^3,b^37*c^10*e^4*h^5*i^6,b^38*d^3*e^11*g^6*i,b^38*d^34*h^3,b^39*d^9*e*f^10*g*j^3,b^39*c^2*d^2*f^2*g^6*k^9,b^41*c^16*d^5*i^9,b^42*i^6*j^2*k^9,b^42*c^52*d^5,b^44*f^9*j^2,b^44*d^13*h^7*j^6,b^44*f*g^4*k^7,b^46*d^13*e^5*f^3*k^5,b^46*c*g^5*h^5*j^4,b^47*d^5*g*h^12*i,b^48*d^32*e*f^2*g*k^3,b^48*e^24*h^3*j^3,b^48*d^5*f^4*i^3*j^3,b^48*c^4*e^16*f^7,b^50*e^11*i*j^2*k^3,b^50*c^7*d^9*j^6*k^4,b^52*c^22*d^3*e^2*f^2*k,b^53*c^5*d*h^3*i^4,b^55*c^20*e^2*f^8*g^2,b^56*g^6*j*k^3,b^56*c^20*f^3*g^2*h^2*k^3,b^57*c^4*f^2*h^2*i^5*j^2*k^4,b^57*c^14*f*i^11,b^59*c^2*i^3*j*k^7,b^61*c^12*f^2*k,b^62*g^14,b^63*d^6*e^9*f*i^2*j,b^63*c^12*e^4*f^4*h,b^64*d^6*e^11*f*g*j,b^65*d^14*f^3*h,b^65*e*g^2*h^7*k^3,b^65*d^7*g^2*k^6,b^67*c^30*d*j*k,b^69*e^6*i^4,b^69*d^10*h*i^2*j^4,b^69*c^5*d^20*i,b^71*c^15*d^4*f^2*g^5,b^80*e*h*i^4*k^2,b^82*g^2*h*i^7,b^82*c^3*e^12*i,b^82*c^17*h^3,b^86*c^23*d^2*i,b^96*f^2*i*k^3,b^98*c^12*g*h,b^108*d^3*f*j,c^2*d^16*e^3*f^3*g^11*h^6,c^20*d^43*e^5*h^2*j,c^3*d^8*e^3*f^10*j^8*k^5,c^15*d*f^2*g^3*j^2*k^14,c*e^3*f^16*g*i^3,c^10*d^14*h^11*i*j^4,c^14*g^2*i^9*j^9,c^36*e^17*g*i*j^2,d^12*f^3*g*h^6*i*j*k^10,g^3*i^9*j^6*k^8,d^9*f^10*g^4*i*j^6,c^8*d^2*f^2*g^9*i^3*k^6,c^6*e^20*g^2*i*k^9,c^18*e^2*f^6*g^16,c*d^5*e^15*h^12*i^2*j,c^12*d^5*e^13*f*i^4*j^6*k^2,c^36*d^13*e^4*f^3*g^4,c^19*d^11*e*h^5*i^7*j^2,e^9*g^5*i^2*j^11*k^4,c^11*d^32*f^2*g^14*i,c^15*f^16*g*j^2*k^7,e^5*f^20*i^3*k^3,f^4*h^9*i*j^4*k^4,d^5*f*g^11*h^2*j^5*k^2,d^13*f^3*g^7*h^9*i^4*k^2,c*e^3*f^30*h,c^8*e^4*f^8*g^4*h^7*j^2,d^24*g^21*h^2,e^29*g^4*j^4*k^5,c^2*f*i^9*j^9*k^2,d^18*f^4*g^7*j^12,c^2*e^15*f^3*h*i^2*j^10,c^26*f^3*g^5*i^3*j^3,d^8*e^22*j^11,f^7*g^2*h^3*i^14*j,c^3*d^32*e^2*j^7*k^2,c^13*g^19*j^4,d^16*e^11*f^2*h*i^5*j^5,d^9*e^4*g*i^7*k^7,d^40*h^5*i^2*j*k^2,c*d^3*f^2*g^15*i^6,c^24*e^19*i*j^2*k^3,c^14*d^13*f^7*h^10*i^4,e^15*g^8*i^4*k,c*d^24*e^2*f^4*g^2*h^3,c^8*d^7*e^3*g^7*h^9*i^2*j*k^2,c^48*e^10*f*g^4*k,d^14*e^31*h,c^23*d*e^6*g^14,c^17*e*g^9*i^9*k^3,f^14*g*i*j^6*k,d^19*f^4*j^3*k^14,d^3*h^7*j^10*k^2,d^13*f^12*j^2*k^5,c^17*d^20*e^17*i^2*k,c^19*d^51*e^4*f*j,d^70,d^3*e^9*f^8*j*k^8,c*d^53*e*g^5*h^5*i^3,c^3*f^2*g^7*h^5*j^8,c^8*e^2*k^17,c^8*f^16*g^7,c^27*d^4*e^28*g^3,c^15*d^12*e^17*f*i^7,d^6*f*g^17*h^5*j^3,g^2*i^7*j^15,e^17*h^10*i^2*j,e^9*f^14*h^3*i*k^2,c^3*d^9*h^14*k^3,d^20*e^4*g^9*h^7*k,d^6*e^10*j^16,c^9*f^5*g^3*j^15,c^9*d*g^4*h^5*i^9*j^3,c^13*e^8*f^2*g^2*h^12,d^35*f^10*i^2*j^3,c^19*e^14*g*j^8*k,c^33*d^7*j^4*k^5,d^2*e^8*g*h*i^16*j^3*k,e^10*f^3*h^4*i^5*j^8,d^8*e^2*f^17*i^4,c^7*e^3*h^3*i^7*j^2*k,d*f*g*h^2*j^7*k^12,d^2*e^10*g^11*i^2*j^3,d^33*g^5*h*j^5,c^8*d^26*g^10*k^3,c^17*e^14*g^4*h*i^4,c^19*d^6*e*f^5*h^6*j^2,c^31*g^3*h^5*i,c^5*e^3*f*h^8*i^12,c^6*d^16*e^19*g^3*k^6,c^30*d^6*f^10*i*j^7,e^28*h*i^8*k^2,e^10*g^14*h*i^7,d^25*f^4*g^8*h^6*i^2,e^6*f^12*g*h^5*j^2*k^2,c^62*f*i*j^8,d^4*f^4*g^18*k^4,e^11*h^2*k^13,i^23*j,d^15*e^26*g*h^4,c^6*d^39*e^6*h^8,f^8*g^4*j^12,c^3*d^15*e^24*f^5*i^2*j,d^6*f^10*h*i^7*j^6,f^2*g^5*i^9*k^8,c^11*h^10*j^13,c^14*f^7*g^2*i^3*j^3*k^4,c^16*f^13*h^3*j^5,c^35*d^2*e^16*i^2*j^2,d^12*e^4*f^2*j^7*k^6,c^3*d^5*g*j*k^15,e^13*f^6*i^5*j^5*k^2,e^6*i^7*k^11,d^20*f^4*h^3*i^2*j*k^6,f^6*g^12*i^6*k^2,d^14*f^12*g^6*h^3*i,c^12*d^52*f*h^2,c^14*e^8*f^9*h*j^4*k^2,c^26*e*f*k^11,c^59*d^10*e^7,d^31*f*g^6*j^2*k^4,c*e^15*f^6*g^3*j^5,c^2*f^11*h^8*i^4*k^2,c^15*d^20*f^4*g^2*j*k^4,e^12*h^8*j^7,d^4*e^4*f^8*h,d^18*h^12*j^3*k,c*g^4*i*k^9,c*f^16*g^13*h,c^3*d^28*f^6*h^5*k^4,d^15*e^11*f^5*g^13,g^32*j,e^10*i^2*j^12*k^4,c^13*d^10*e^24*k^7,c^21*h^17,c^24*e*f^7*h^5*i^3*k^5,d^23*f^7*g^9*h*i^2,i^12*k^13,c*d^18*e^13*f^2*h^3*k^7,c^8*d^2*e^3*g^5*h^10*j,c^13*d^12*f^10*g^5*h^3,d^17*f^6*h^18*j,e^4*f^14*g^2*h^6*i^4,c^6*e^3*f^8*i^12*j^3,c^19*d^2*e*f*g^4*j^6*k^2,d^13*e^29*f^3*g^2*k,c^2*h*i^5*j^8,c^7*d^10*f^3*i^4*k^2,c^9*d^41*f^9*j^2,c^11*d^2*e^24*f^6*h*k,c^14*g^5*i^7*j^2*k^8,c^16*d^24*h^5*i^2*j^4*k^3,f^7*i^15,d^8*h^8*i^13*j^2,e^21*h^15,c^18*e*f^18*i^4*j^3,c^20*d^20*f^8*h^4*i^2*k^2,c^30*f^10*i^6,f^2*h^5*j^10*k^6,f^10*g^3*i^3*k^14,f^16*j^2*k^9,d^21*e^20*f^5*g^8*h,e^4*f^3*h^16*k^9,e^16*f*g^2*j^12,c^5*e^19*i^2*k^5,c^5*d*e^8*f^15*g^2*j^4,c^14*d^15*g*h^4*j^8,c^17*e*f^7*g^7*i,c^26*d^8*g^6*h^3*j^2,d^9*f^17*i^7,d^42*e^13*f^2*g*j^2,g^3*h^6*i^10,d^2*f*g^7*h^5*i^2*j^5*k^4,d^50*e^2*f^4,d^33*e^3*g^2*h^3*i^3*k^4,e*f^6*g^4*h^3*j^8,h^7*j^5*k^13,d^7*f^10*k^16,g^22*i^7,c^3*g^9*h^2*j^2*k^9,c^5*f^4*g^3*h^7*j^4*k^4,c^11*g^2*i^12*j^5,c^24*e^18*h*j,c^29*d^8*e^10*f*k^3,f^8*h^10*i^4*j^2,f^6*h^14*i*k^4,e^27*h^4*i^8,f^3*j^23,f^2*i^20,c^3*e^19*f^5*i^7,c^12*d^6*e^7*h^8*i^5,c^12*d^7*f^5*g^4*h^9*i^2,e^15*h^3*j^4*k^7,d^2*e^7*f^11*k^10,f^5*g^14*h^3*j^3,d^16*h^7*k^11,d^10*f^3*g^13*h^7*k^2,f^5*i^2*j^17,i^4*j^11*k^8,d^17*e^14*g^9*h,c*d^48*e*g^3*h^6,c^4*f^11*i^3*j^3*k^11,c^4*d^27*e^6*g^9*k,c^13*e^5*f^2*g^16*k^3,b*f^2*h^12*k^7,b*d^23*e^4*f^3*g^4*h^3*j^6,b*c^4*d^16*g^9*h^2*k^9,b*c^10*e^25*f*h^7,b*c^12*d^48*g^2*j^3,b*c^22*e^18*g^2*h^6*i^2,b^2*e^6*g^6*h^5*k^5,b^2*d^31*f^5*h^10,b^2*d^10*h*j^12*k^6,b^2*d^56*i^5,b^2*c^9*f*g^5*i*j^9*k^2,b^2*c^11*d^4*f^7*h*j^11,b^2*c^14*f^15*g^5*j*k^5,b^2*c^35*d^21*e^3*f^4,b^3*d^21*j^13*k^4,b^3*f^3*g*h^3*i^9*j^3*k^2,b^3*e^23*g^5*h^5*i*k^6,b^3*c*e^10*f^6*h^10*k,b^3*c^11*d^5*f*h^7*i^6*k^6,b^3*c^14*e^8*g^16*k^3,b^3*c^16*e^13*i^13,b^3*c^21*e^5*i^12*k,b^4*d^5*e^8*i^3*j^11,b^4*e*g*i^5*j^5*k^9,b^4*d^29*h*j^7*k^4,b^4*g^15*i^4*j^4,b^4*d^23*f^6*g^9*h*j^6,b^4*e^5*g^12*h^14,b^4*c^7*e^16*j^8*k^5,b^4*c^9*e^3*f^3*j^10,b^4*c^10*d^40*f^3*g^5*i^2,b^4*c^14*d^4*f^17*j^2*k^3,b^4*c^21*j^4*k^9,b^5*e^4*f^21*i^4,b^5*e^5*h*i^7*j^2*k^5,b^5*d^2*f^5*h^6*i^2*j^4,b^5*c^9*h^5*i^4*k^9,b^5*c^28*d^3*e^11*i^5,b^5*c^40*e^4*g^3*i^7,b^6*d^3*e^7*g^2*h^6*j^13,b^6*e^12*g^8*i^2*j^3*k^3,b^6*d^13*f^2*g^2*j^5,b^6*g^7*h^5*j^7*k^4,b^6*d^6*g^7*k^7,b^6*d^37*g*h^3*j*k^2,b^6*c^8*f^2*g^21,b^6*c^16*d^11*h^7*i^13,b^6*c^31*e^7*g^4*j^2*k^3,b^6*c^33*d^2*f^5*h*j^4,b^7*d^21*f^4*h^6*i^5,b^7*e^21*f*h^4*j^3*k^3,b^7*c^5*e^16*f^3*g*i^4,b^7*c^12*f^23,b^7*c^19*f*h^3*i*k^3,b^7*c^21*d^10*f^7*h^8,b^7*c^52*d^11*e^2*g^4*h^2,b^8*d*e^8*g^18*i^5*k,b^8*d^3*e^28*j^4*k,b^8*e^5*f^5*h^6*i^12,b^8*e^21*k^10,b^8*e^10*f^6*g^9*j^3,b^8*c^6*e^3*g^14*k,b^8*c^8*d^20*e*k^14,b^8*c^8*d^21*f^4*g^8*h,b^8*c^27*j^11*k^2,b^9*d^11*e^17*h^4*i^3*k,b^9*d^5*f^8*g^5*h^4*i^2,b^9*c^17*e^25*h*k^6,b^10*d^46*e^4*g^4*h*k^3,b^10*d^9*g^24,b^10*e^5*g^4*i^5*j^10,b^10*c^2*d^19*g^3*i^2*j^6,b^10*c^6*d^11*e^19*g,b^10*c^37*f^2*j^9,b^11*d^30*e^13*g*h^4*i^6,b^11*e^28*f^4*h^2,b^11*d^9*e^16*h^13,b^11*e^21*g^3*h*i^2*k^4,b^11*c*d^2*e^9*g^2*h^12*k^5,b^11*c^13*e^7*i^5*j^4*k^5,b^11*c^23*e^2*g^2*i^9*j*k,b^11*c^25*f^4*i^4*j^3,b^11*c^72*f*k,b^12*f^2*g^5*j^2*k^16,b^12*d^9*e^14*j^5*k^3,b^12*c^11*i^17*k,b^13*d^17*e^3*i^8*k^3,b^13*d^48*f*h^2*i^3*j,b^13*d*g^6*h^4*i^8*j^6,b^13*c^2*f^11*i^3*j^3*k^8,b^13*c^23*e^18*i^2*j^2,b^13*c^37*d^6*k^3,b^14*d^59*j^2,b^14*j*k^19,b^14*c^4*d^4*e*g^5*h^10*i^4*k^2,b^15*f^8*h*i^2*j*k^10,b^15*f^16*g^3*h*i*k,b^15*f^3*h^19*k,b^15*d*e^14*i^5,b^15*d^32*e*f^5,b^15*c^10*e^7*g^4*i^7*k^6,b^15*c^12*d^25*i^2*k,b^15*c^21*g^5*h^5*j^5*k^3,b^15*c^47*e^9*f^2,b^16*d^9*e^3*f*h^2*i^13,b^16*e^5*h^3*j^9*k^5,b^16*d^2*h*i^15*k^6,b^16*c^3*f^8*j*k^8,b^17*e^14*h^6*j^7*k,b^17*e^6*f^12*k^4,b^17*h^10*j^3*k^5,b^17*f^4*g*i*k^13,b^17*c^17*e^13*g^5*h^4,b^17*c^22*d^9*e^5*f*g^5,b^18*e^14*f^5*g^2*i^10,b^18*c^22*g^5*h^5*j^3*k^3,b^19*e^5*g^2*h^8*j,b^19*c*f^14*g^2*h*k^2,b^19*c^16*d^7*i^10,b^19*c^65*i,b^20*e^12*g^16*h*j^2,b^20*c^4*d^15*i^18,b^21*i^5*j^8*k^3,b^21*d^11*h^4*j^10,b^21*f^7*i^4*k^6,b^22*c^14*g^3*i^15,b^23*g^7*i^8*j^3*k,b^23*e^11*g^4*i^2*j^6,b^23*c^2*f^3*h^2*j^8,b^23*c^7*d^4*e*f*k^13,b^23*c^7*d^5*f^17,b^23*c^14*g^3*h*j^2*k,b^24*h^4*i^10,b^24*c*g^17*j^3,b^24*c^2*h^8*i^7*k,b^25*d^30*e^4*f^8*k^2,b^25*d^13*e^5*h*i^3*k^8,b^25*d^14*f^2*g^8*h^2*j^3,b^25*d^23*i^2*k^11,b^25*d^7*g^13*h*i^2,b^25*f^2*g^6*j^2*k^13,b^25*e^27*j^7,b^25*c^5*e^19*f^13,b^25*c^24*e^2*g^10,b^26*e^9*h^6*i^5*k^4,b^27*d^28*e^3*h^4,b^27*g^20,b^27*c^20*d*i^2*j^9,b^28*g^6*k^13,b^28*d^28*e*f*j^3*k^4,b^28*c^6*g*i^15*j,b^28*c^12*d*e^7*f^3*h^9,b^28*c^24*h^8*k^2,b^29*c^11*d^5*e^7*g^12*h,b^29*c^23*d*e^5*f^8,b^29*c^32*d^15*j^4*k,b^30*c^6*e^2*i^8*j^2,b^31*d^10*e^9*g^2*i^3*j^3,b^31*c^7*d^34*g,b^32*f^11*g^5*i^6*j,b^33*e*f^6*j^5*k^2,b^33*g^4*k^11,b^33*c^24*d*e*g^13*h,b^34*e^5*f^13*h^2*j^2,b^35*d^12*f^5*g^9,b^35*d^7*e^10*k^9,b^35*g^5*h^6*j^7,b^35*e^5*f^2*g^11*k^5,b^35*d*f^8*g^5,b^36*g*h^13*j,b^36*c^3*d^16*e^18*i^3,b^37*f*i^2*j^6*k^4,b^39*d^4*g*j^14,b^39*f^5*g^7*j^4,b^40*e^5*i^8*k^7,b^40*d^5*g^2*h^6*i^5*j^2,b^41*c^12*e^7*k^5,b^42*d^12*e^3*f^9,b^42*e^4*h^4*i^3*j*k^2,b^42*d^5*f*i^2*k^5,b^43*d^6*e^11*g^9*j^2,b^44*c^7*d^10*e^2*h^7*j,b^44*c^10*e^7*f^5*g^2,b^44*c^19*d^3*g*h^6,b^46*c^4*e^2*i^10*k^3,b^46*c^6*d^18*f^4*i^5,b^48*c^25*d^16*j^2,b^50*d^10*f^2*h^2*i^3*j^5,b^50*f^7*j^8,b^50*c^2*j^2*k^5,b^53*c^3*d^24*k^5,b^54*d^8*e^5*h^2*k,b^56*c*d^16*f^2*g^3*h^4,b^58*e^11*i^3*j^3,b^58*d^14*k^3,b^59*i^11,b^59*c^18*f^2*i^2,b^60*c^5*e^2*g^5,b^63*h^11*j*k,b^63*d^11*g^2*h^10,b^63*c^3*e^2*f^5*g^8*i^2,b^71*e^17,b^71*e^4*f*h^5*j,b^79*d^5*e^15*i,b^87*e^4*f^3*g^2*k,b^99*d^5*g^3*k,b^112*c^4*d^6*e,b^116*c^2*f*h^3*j,e^8*f^13*g*h*i^2*j^3*k^3,c^15*d^2*f^15*g^7*h^3*k,c^9*f^8*g^2*i^7*j^4*k^5,d^6*g*h^7*j^4*k^14,d^3*e^3*f^7*g^4*j^9*k,g^9*i^2*j^3*k^10,c^10*d^11*f^9*g^10*h*j^3,c^8*d*e^23*f^5*g^3*j^2*k^2,d^9*e^12*f^7*h^6*k^2,c^2*e^18*i^3*j^9*k^6,d^49*e*f^3*g^2*i*j^6,e^18*f^4*g*i^8*j,c^9*d^5*e^6*h^6*i^6*j^5*k,c^14*d^15*f^2*i^5*k^4,f*h^10*j^7*k^8,f^15*h^3*k^11,d^7*g^7*h^10*i^3*j^2*k^6,e^5*f^4*g^14*h^8,d^3*e^9*g*h*i^6*j^2*k^11,c^16*d*f^12*g^2*h^11*i^2,e^20*g^8*i^3*k^5,d^18*e^7*f*g^2*h^4*j^2,c^3*d^11*g^7*h^3*k^9,c^26*e^4*h^8*i^2*k^5,c*d^2*e^18*f^5*g^9*h^2,c^13*e^11*g^14*h*k^3,e^13*g^4*i^6*j^7,c^44*e^8*f*j^6,d^8*e^2*i^14*j,f*g^5*k^18,c^19*d^8*e^4*g^10*j,d^23*f^10*g*h^3*i^6*j,d^53*h^7*i^4,c^7*d^16*f^2*g^6*h^2*i^8,d^64*e^5,e^4*g^7*h^6*j^11,f^13*g^7*j^3*k^3,f^15*g^3*h^6*i^2*k^3,c^5*d^6*e^22*i^6,d^3*e^2*h^15*k^7,c^5*f^3*g^9*h^15,f^2*g^3*j^18,c^4*d^3*j^5*k^14,c^11*g^8*j^12*k^2,g^4*h^6*i^8*j^6*k^2,c^3*e^13*g^2*h^13*k,d^22*g^4*i^3*k^12,c^23*d*h*j^7*k^9,c^28*d^11*f^2*k^12,d^2*e^7*f^14*i^3*j^3,d^16*h^9*i*j^7,c^2*f^6*i^5*k^8,d^27*e^2*g^5*h^2*j^8,d^20*g^10*h*j^2*k^7,d^4*e^4*g^7*h^4*i^9*k^3,d^35*g*h^9*i^4*j^2,c^9*e^6*f^2*h^7*j^5,c^14*d^10*f^16,c^21*g^3*h^6*k^3,c^26*d^3*f^8*g^3*k^6,d^17*e^31*j^7*k,c^8*d^4*e^6*g^17*k,c^20*e^4*f^7*j^10*k,d^19*e^2*f*g^8*h^7*i,f^7*h^10*j*k^10,c^3*e*i^9*j^12,c^12*e^27*f^12,c^52*j^11,d^19*f^6*g^7*i^3*j^5,d^9*e^31*g*h^5,d^2*e^24*g^6*h^4*i*k^4,d^33*e^11*h^9,c^27*d^6*i^3*j^6,c*e*f*h^3*i^14*j^4,f^7*h^2*i^6*j^9*k^3,c^2*d^25*g^9*i^6*j,c^18*f^2*g*h^3*j^2*k^12,c^25*e^21*i*j^5,c^51*d^14*g^5*h^2,e^2*g*j^4*k^19,f^7*g^10*j^9*k,d^14*f*h^4*i*j^4*k^10,d^8*f^9*g^6*h^4*j^3*k,d*f*g^11*h^3*i^2*k^10,d^15*e^17*g^2*i^4,c^2*d^46*e^4*h^3*j^2,c^5*d^25*e^9*f^6*g^2*i^3,c^49*d^4*e^12,c^5*d^14*f*g^2*j^4*k^8,d^33*g^2*h^4*i^4*k^8,e^9*f^5*h^2*j^2*k^4,e^2*g^4*h*k^13,d^22*f^3*h^6*k^8,c^24*d^23*e^8*g^8,c^2*e^13*f^12*h^7,c^11*e*h^18*j^3*k,c^47*e^12*f*g*h^5,e^20*f^9*g^6,e^8*g^5*h^11*j^4,c*e^13*f*g^11*k^7,c^3*d^6*f^7*g^5*h^4*k^2,d^4*g*h^18*i,d^11*e^2*f^8*i*j^9,e^3*h^2*i^4*j^11*k^3,d^4*i^3*j^3*k^6,d^35*f^6*j^5*k,c^11*d^28*k^10,e^4*f^4*i^14*j*k^2,d^12*f^2*h^2*i^11*k^6,c^20*f^7*i^5*k^2,e^24*i*j^2*k^9,c^4*d^9*e*g*h^5*j^11,c^7*e^6*f^4*g^7*j,c^9*d^18*e^4*k^13,c^9*d^19*f^10*g*j^3,c^16*d^2*g^6*h^4*j^5*k,c^21*d^12*f^2*g^6*k^4,d^3*e^2*f^14*h*i^6*j,d^33*f^4*h^5*i^4*k^4,e^3*g^3*h^7*i^9*j^3,d^27*f^12*h^5*i^3,d^60*j*k^6,c^4*d^10*g^2*h^11*i^6*k,d^44*e^7*f*k^2,c^7*d^9*e^22*f^6*j^2,c^19*d^2*e^15*k^7,c^21*d^33*e^2*f^4*k^2,c^26*e^5*g^13*h^2*j^3,f^3*h^15*j*k^8,i^19*j^2*k^4,c^2*e^12*h^9*i^4*k^4,c^2*d*e*f^2*g^4*h^10*i*j^3,c^4*d^31*h^14,c^7*d^10*e^4*h^2*i^3*k^7,c^7*d^11*f^16*g^4*h^3,d^11*e^19*g^9*h^2*k^2,d^52*f^3*g^3,c*d^5*e*g^23*h^2,c*d^7*e^17*i^4*j^9*k^2,e^30*h^8*j^2,c^5*d*e^22*f^12*h,c^8*g^4*i^14*j^4,c^12*e^23*g^2*h^7*i,c^14*d^15*e^10*h^12,d^9*f*g^3*i^4*j^15*k,d*e^18*f^4*g*h^7*j^7,d^25*f^2*h^11*j^3*k^4,f^4*g^20*h^6,f^6*j^18,d^50*i^4*k^4,g^5*j^12*k^6,c*f^4*h^2*j^14*k,c^25*d^15*e^8*f*j^3,c^37*d^8*e*k^9,f^22*i^5*j^4,e^17*f^5*i^9*j,c^13*d^23*f^3*i^6,c^20*d^7*g^5*h^3*i^6*j^4,d^2*f^3*g*i^3*k^16,d^55*h*j^8,e^8*j^13*k^4,i^19*k^5,d^34*e^4*g^5*i,c^9*d^48*g^4*j^2,c^11*e*j^7*k^13,c^49*d^23*f^3*g,f^2*h^7*i*j^7*k^4,d^6*f^16*k^7,f^4*g^8*h^2*i^5*j^4,c^18*e^16*h*i^4*j^3,c^30*f*g^12*h*i^3*j^2,c^32*d^21*h^5*i,c^35*e*g^3*i^5*k^3,d^7*e^4*g^2*j^8*k^2,d^17*f^13*g^2*k^5,g^7*j^2*k^11,d^31*g*h^4*j^4*k^6,c^6*d^5*e^5*h^8*i^12,c^23*f^2*h^2*j^7*k^2,c^35*g^3*h*j*k^11,e^6*g^4*h^2*i^9*k^7,d^15*f*h^7*i^4*j^2*k^2,f^3*i^11*j^13,e^21*g*i^3*j^3*k^3,d^47*g^2*h^6*i^2,e^8*f^6*h^5*j^5,c^2*f^20*k,c^9*e*h^4*k^7,c^11*d^4*f^4*h^9*j*k^2,c^17*d^5*e^3*i^14*j^2,e^33*j^7*k^5,e^8*g^14*k^5,d^15*f*g^8*h^2*j^2,d^23*f^3*g^4*h^9,d^9*f^5*h*i^4*j^14,c^9*e^17*h^7*k^5,c^19*e^12*f^2*g^7*h^2*k,c^21*f^8*g*h^7,d^3*e^4*g^24*k^3,e^10*g^4*i^4*j^13,d^20*f^2*j^15,d^3*g^3*i^2*j^17*k,d^13*g^3*i*j^9*k^4,d^5*e^24*g*j*k^3,c^8*e^6*f^5*g^15,c^9*f^10*h^14,c^18*d^61*e^6,c^27*e^5*j^12,i^12*j^7,e^33*f*h^3,d^13*e^13*h^7*k^3,e^3*g^11*h^14*j^2,e^19*f*i^2*j^13,e^8*f*g^17*h^2,c^3*g^16*h^13,c^3*e*f^9*i*j^12,c^5*d^23*h^3*j^9*k^4,c^8*g^16*h^6*k^3,c^15*f*i^3*j^6,c^29*d^10*h^2*j^2*k^4,b*d^5*h^3*i^20*j,b*e^3*f^5*h*i^14*j^4,b*c*i^16*k^5,b*c^2*e*g^10*j^7,b*c^3*f^3*h^5*i^11,b*c^7*d^7*f^12*g^10*k,b^2*d^5*g^6*i^6*j,b^2*d^36*f^6*h^3*i*j^3,b^2*e^24*f^3*g^4*h^5,b^2*c^4*d^29*g^5*h^2*i^3*k^2,b^2*c^8*d^21*e^4*f*g^3*h^9*k,b^2*c^13*e^23*i*j^5*k^3,b^2*c^15*d^7*e^10*f^3*h*j^7,b^2*c^27*e^3*j*k^7,b^2*c^27*d*f^11*h*j^6,b^2*c^39*f^3*g^2,b^3*d^5*e^13*f^5*h^12*i,b^3*e^30*g^3*j^6*k,b^3*c*e^12*h^3*i^9*k^3,b^3*c^2*d^18*e^17*j^8,b^3*c^3*d^15*f^5*h^8*i^4*j,b^3*c^14*d^11*e^10*g^2*j^2*k^5,b^3*c^26*d^5*g^16*j,b^3*c^27*d^2*f^5*h^7*i^5,b^4*f^13*g^3*h^2*j^3*k^5,b^4*e^19*i^4*k,b^4*d^26*e^6*f^2*h*j^2,b^4*d^5*e^11*f^10*i^3*k^4,b^4*d^10*g^7*h^8*j^9,b^4*e^12*g^4*i^6*k^10,b^4*c^2*d^19*i*k^5,b^4*c^2*d^20*f^10*g^7*h*j,b^4*c^4*f^18*j^6*k,b^4*c^4*d^50*h^5,b^4*c^9*d^2*g^3*h^6*i^4*k^11,b^4*c^14*d^13*f^2*g^12,b^4*c^37*e^14*k,b^5*d^3*e^8*h^3*i^12*k,b^5*e^2*f^5*j^4*k^12,b^5*c*d^5*e^28*f*h^6*i^2*k,b^5*c^11*e^23*f^3*h*i^6,b^5*c^25*e^3*f*h^5*i^3*k,b^5*c^26*d^26*e^8*f^2*g^3*j^2,b^6*d^2*f^7*h^4*k^12,b^6*f*g^9*h^11*j^5,b^6*d^16*e^35*j,b^6*e^30*g^6*i,b^6*d^10*e^17*f^6,b^6*c^7*e^18*g^5*h^5*j^2,b^6*c^12*d^3*e^10*g^5,b^6*c^33*d^13*i*j^8,b^6*c^57*g^3*i^2*j,b^7*g^4*i^22,b^7*d*e^7*g*h^12*i^7,b^7*e^3*h^16*j^3*k^5,b^7*e^8*f*h^7*j^12,b^7*d^11*g*h^5*i^6,b^7*c^5*d^9*f^15*j^4*k,b^7*c^19*i^14*k^5,b^8*d^22*e^6*g^15*i,b^8*c*d^18*f^6*g^3*i^2*k^11,b^8*c^6*d*e^5*i^9*j*k^3,b^8*c^17*g*j^15,b^8*c^36*d^11*e*g^11,b^8*c^55*k^3,b^9*c^7*d^16*e^5*g^2*h^15,b^9*c^31*d^5*f^4*i^6,b^10*f^4*i^3*j^3*k^10,b^10*d^15*f^10*j^5*k^5,b^10*d^8*f^2*k^14,b^10*c^18*d^16*e^3*f*g*i*j,b^10*c^25*e^4*g^6*i^4*j^3,b^10*c^30*d^9*g^6*i^3*k,b^10*c^67*d^5*f^4,b^11*e^12*f^5*i^12,b^11*e^8*g^22*h^4,b^11*c^4*e^5*g^3*i^14,b^11*c^18*d^5*g*j^13,b^11*c^22*d^9*e^19*h^5,b^12*d^34*f^9*g*i*k^3,b^12*e^3*h^3*j^11,b^12*e^8*f^8*g^4*j*k^4,b^12*f^14*j^3,b^12*c^4*g^3*h^2*j^5*k^5,b^12*c^6*d^13*h^7*j^7,b^12*c^9*f^6*g^3*k^8,b^13*d^7*f^16*h^3*i^3,b^13*h^9*i^6*k^5,b^13*c^4*d^14*e^21*i^7,b^13*c^11*e^11*g^4*h^4*i^7*j,b^13*c^28*d*g^9*i^8,b^14*d^17*e^2*i*k^15,b^14*d^39*e^16*g^3*h,b^14*c^5*d^49*e^8*g^3,b^14*c^7*e^17*f^2*k^11,b^14*c^14*e^7*g^10*j^3,b^14*c^16*f^2*g^4*h^5*j^5,b^15*e^6*f^4*i^3*k^11,b^15*c^2*g^6*h^7*i^3,b^15*c^4*d^5*f^4*h^12,b^15*c^7*f^12*g^6*i^2*k^2,b^15*c^10*d^6*i^17,b^15*c^37*e^11*f^3*g^3*h^5,b^16*d^8*e^20*f^9*g,b^16*d^32*f^7*k^4,b^16*e^3*g^20,b^16*d^16*f*g^14*h^5,b^16*c^10*i*j^12,b^16*c^15*d^5*f^9*j^4*k,b^17*d^3*h^3*i^9*j^6,b^17*e^25*h^5*i*k^2,b^17*c^2*e^12*h^10,b^18*c^22*d^9*j^7*k^5,b^18*c^25*e^3*k^13,b^19*d^14*e^8*g^3*h^10,b^19*e^7*h*i^7*j^5*k,b^19*c*d^3*f^7*i^6*k^4,b^19*c^22*d^11*g*h^5*i^3,b^20*f^7*g^6*j^9*k^3,b^20*d^35*e*j^8,b^20*d^14*e^6*f^4*g^2*i*k^2,b^20*g^16*i*j^5,b^20*d^28*g*j^2*k^3,b^20*c^32*e^9*j^5,b^20*c^37*d^3*e*f^7*k^2,b^21*d^12*e^3*h*i^10,b^21*f^8*g^5*i^5*j^4*k^4,b^21*c^6*e^18*i^4*j^3,b^21*c^8*d^8*e^5*f^3*h^4*j^5,b^21*c^11*e^10*f^11*i^3,b^22*f^17*k^9,b^22*e^7*h^6*i^12,b^22*d^19*e^12*g^3*j^6,b^22*c^7*d^12*e^5*g^8,b^22*c^56*d*g^4,b^23*d^27*e*f^2*h^4*i^2,b^23*d^30*f^8*g^4*i^3,b^24*f^5*g^5*j^2*k^4,b^25*e^6*f^9*g^2*h^3*i,b^25*d^3*f^7*g*h^7*k^4,b^25*d^10*e^23*h*i^2,b^25*d^11*e^12*f^6*g^6*h^2,b^25*c^5*d^4*e^5*g^11*h*i,b^26*i*j^9*k^8,b^27*d*g^7*h^16,b^27*d^2*g^6*i^12,b^27*c*d^33*i^7*j,b^27*c^17*f^3*j^2*k^8,b^27*c^36*e^2*f^2*i*j^4,b^28*d^8*f^8*g*j^9,b^29*f^4*g^3*i^6*j*k^2,b^29*d^16*f^10*h*i*j^3,b^29*d^9*f^2*g^2*i^3*k^6,b^29*c^13*e^7*f^9*j^4,b^29*c^15*e^5*j*k^11,b^29*c^27*f^7*k^2,b^31*d^6*e^8*f^6*j^2,b^31*g^4*h^6*j^9,b^31*e*i*k^9,b^31*f^14*g^4*j,b^31*d^30*f^4*h^3*k^4,b^31*g^9*h^5*i*j^3,b^31*c^2*f^6*g^9,b^33*d^25*e^4*f^5*i^2,b^33*e^19*f^10,b^33*d^4*e^7*h^8*j^4,b^33*e^12*f^2*g^2*k^3,b^33*c^2*d^14*f^8*h,b^33*c^14*d^7*g*k^7,b^35*d^2*e^8*f*g^12*i*k,b^35*d^2*e^2*i^5*j^11,b^35*d^12*f*i^4*j^3*k^2,b^36*e^7*h^13,b^36*c^7*g^4*h^12*i,b^37*c^6*e^5*f^5*i*j,b^37*c^15*d^10*h*j^5,b^38*e^7*f*i^14*k,b^38*c*h^3*i^12*k^2,b^38*c^6*i^11*k^5,b^39*j^5*k^9,b^41*d^19*e^18,b^41*d^29*e^10*k,b^42*f^2*g^3*h^5*i^3*k^3,b^43*d^2*e^10*h^3*j*k^5,b^43*c^16*e^5*h^5*k^5,b^45*d^10*e*g^3*h^5*k^3,b^47*d^8*j^2*k^7,b^47*d^2*g^12*j,b^48*e^5*i^10*k^3,b^48*c^8*h*i*k^3,b^48*c^41*d^13*e^6,b^49*e^7*g^5*k,b^49*d^23*f^2*j^2,b^50*g*h*i^4*k,b^50*c^18*e^11*f^3,b^50*c^32*f*h^3*k,b^52*c^2*g^7*h^10,b^52*c^7*d^8*g^7*h^3,b^53*c*d^5*g*j^7,b^54*d^13*f*i^7*j,b^54*c^5*e^16*h*k^2,b^55*e^11*i^10,b^56*f^5*g^4*i^4,b^56*c*d^27*i^2*k,b^58*c^6*d*e^17*h^2*j^2,b^58*c^11*d^11*e^9,b^58*c^18*e^10*g*h*i^2*k,b^59*d^19*f*h^2*i^7,b^60*e*f^12*k^2,b^60*e^4*g^13*h*j,b^63*e^2*g*h^10*i*k^2,b^64*c^3*j^5*k,b^66*c^13*e^6*g*j^3,b^66*c^27*h,b^70*d^7*e^11*g^3,b^71*d^15*h^6*i^2,b^74*c^6*d^20*e^4,b^83*h^2*i^2*j^3,b^85*e^11*f^3,b^101*e^6,d^5*f^6*g^10*h^2*j^6*k^3,c^4*d^9*e^3*i^4*k^8,c^32*g^8*i^6*k^4,c^8*d^14*f^8*i^12,f^19*j^7*k^2,c^4*f^3*g^8*h^7*i^6*j*k^2,e^7*g^22*i*j^2,e^23*f^2*g^9*h^3*j^3,d^4*e^12*f^4*g^5*h^10*i^2,d^2*e^7*h*i^13*j^4*k^2,d^10*g^6*h^3*i^7,d^41*f^5*h^8*i^2,e^27*h*i^5*k^3,g^9*h^16*j^2*k^2,c^7*d^15*e^25*f^5*h^4,e^2*g^3*h*j^21,f^7*g^4*i^6*j*k^9,c^18*d^5*j^2*k^16,e^5*f^3*i^4*k^12,c*d^4*f^3*g^5*h^10*j^9,e^11*h^8*j^8,c^2*e^16*f^7*g^4*i*k^6,d^2*f*h^15*i^5*j^2,d^23*f^12*g^8*h,d^2*f^6*i^7*j^7*k^5,c^11*d^10*f^3*h^17,d^13*e^28*f^8*g*k^2,e^11*g^20*h^5,c^5*d^7*e^4*f^2*h^2*j^15,c^17*h*i^2*j^9,c^22*d^10*f^8*i*j*k^3,f^12*i^12,d^19*g^9*h*i^5*j^4,c^15*g^2*h^6*i^7*j,c^20*d^2*f^14*g^2*i^6,c^29*d^16*g*h^10*i^4,d^9*e^22*g^2*i^3*j^3*k,d^19*e^14*f^3*g^2*i^2*k^4,c^2*d^3*e^4*g^16*i^2*j^2,c^4*d^33*e^2*g*h^3*k^5,c^39*e^17*h*j^2*k,c^27*d^6*e^6*h^8*i^2*k,e^14*f^2*h^3*j^5*k^8,e^33*g^9*j,c^2*d^24*e^20*g^3*h^2*j^3,c^14*d^17*e^13*g^8*h,d*e^22*g^5*h^4*i^8,c^2*d^25*e^2*g^4*h^8*i^5,c^37*e^17*g*h^6,e^5*f^4*g^5*h^5*k^6,c*d^32*e^7*f^6*i^5*j^2,e^2*g*h^19*j*k^3,d^5*e^7*f^5*j^12*k,i^2*j^6*k^10,c^10*e^4*f^4*h*i^4*j^3*k^6,c^12*d^2*f^10*h^6*j^5*k,c^43*d^3*e^10*f*i^2*j,c^55*e^3*g^2*i^4,d^3*e^6*g*h^6*j^14,d^13*f^7*g*j^6,c^11*d^6*g^6*k^8,d^14*f*g^2*h^5*i^4*k^8,c^18*d^22*e^6*g^7*i^5,d*e^7*g^17*i^2*k^2,d^3*e^27*f^3*j^5*k^2,c^9*e^20*k^11,d^11*e^16*f^5*h^4*k^2,e^6*g^4*h^11*j^6,e^11*f^7*g^10*i^4,d^4*e^9*h^3*i^2*k^11,d^5*f^13*g^4*h^4,c^4*g^9*h^10*i^2,c^6*d^19*g^3*h^15*j^2,c^9*f^5*g^9*h^3*i*k^2,d^46*e^3*g^3*h*k^4,d^9*f^2*g^23,d^16*j^21,c^3*e^4*f^4*g^3*i^2*j^11,c^12*d^9*g^2*j^15,e*h^2*i^11*j^13,d^3*f^6*i^10*j^5,e^27*f^9*h^2,c^3*g^4*i^12*k^6,c^4*d^9*e^15*h^13*j,c^5*d^27*f^4*i^7*j*k,c^7*e^20*f*g^2*h*k^5,c^9*d^19*e^7*f^7*h^6,c^21*d^12*g*h^5*k^9,c^15*d^9*e^13*j^6*k^4,c^3*d^17*e^2*i^5*k^4,c^15*d^11*f^8*g^5*i^4,d*e^11*f^4*i^16,d^28*e^9*g^5*j*k^2,d^59*f^3*j^3,d^42*g^4*h*j^5*k^3,c^2*d*e^15*h^18,e^2*h^8*j^10*k^8,f^13*h*j^2*k^11,f^7*g^2*h^8*j^9,c^13*d*e^13*f^4*i^2,c^15*d^32*f^10,c^22*d^15*e*h^6*j^2,c^25*e^6*g^3*i^4*k^7,c^27*d^25*f^2*k^2,d*e^9*g^2*h*j^11*k^6,d^11*e*f^10*g^2*j^3*k^9,e^15*i^15*k^3,d^12*e^20*f*g^12,c*d^9*e^2*f^6*h^2*i^10,c^13*e^4*h^3*j^10*k^6,c^13*d^2*h*i^12*k^7,d^57*e^14*f*i,e^13*f^3*h^6*j^8*k^2,d^51*f^9*g^2,e^5*f^17*k^5,c*f*h^10*j^4*k^6,c^2*d^44*f*g^7*i^2,c^4*f^9*k^14,c^32*e^12*g^4*h^4,d^9*g^8*h^3*j^5*k^4,d^6*f^3*h^17*i^2*k^6,g^28*j^2,c^8*d^14*e^8*f^2*h^12*i^3,c^10*d^65*j^4,c^20*d^7*e*h^11*i^5,e^9*f^2*g^5*h^6*j^3,d^3*e*f^16*g^5*k^3,d^3*f^2*h^2*i^3*j^17*k,c^31*d^7*i^7,d^14*e^2*j^18,e^11*f^2*g^15*h*j^3,f^7*h^15,c^5*e^8*f^3*i^18,d*f^4*g^11*h^8,e^6*f^6*j^15,f^20*j^7,c^5*i^2*j^9*k^4,c^10*f^12*i*j*k^7,c^19*d^4*h^3*j^5*k^8,d^5*f^22*i^7*j,h^6*i^10*j^3*k^4,g^6*i^5*j^4*k^2,d^30*f^3*h^4*j^6,d^23*g^5*h^3*i^2*k^6,c^6*d^47*e^11*i^3,c^15*e^10*f^2*g^3*j^7,c^29*g^2*h*j^3*k^2,e^4*f*g^3*h^2*i^16*j^2,d^7*g^2*h^6*i^13*k^2,e^18*f^2*h^13*k,d^9*e^4*f^2*h^9*i^3*j^4*k^2,c^3*f^4*h^4*i^7*j,c^17*f^2*h^8*i^4*k^2,e^24*i^3*j^3*k^5,d^20*e^11*h^2*j^5,e^16*f^7*i^2*k^8,e^6*f*g^13*i^2*j^2,d^13*e^4*h*k^9,d^14*f^7*g^7*h^2*j^4,d^23*f^5*k^12,g^12*h^8*j^6,c^4*d^6*g^3*i^2*k^18,c^4*d^7*g^12*h,c^27*e^19*j^2*k^5,c*e^28*h^2*i^5*k,c^15*e^8*h^6*i^2*k^5,c^17*d^17*f^4*h^11,d^39*e^7*g^3*h^2*i,d^12*g^2*i^8*j^11,d^4*e^22*f^3*j^3,d^36*g*i^5*j^7,c^2*e^15*g^5*k^3,c^2*e^4*f^11*g^14*j^2,c^4*d^28*e^2*f*h^4,c^35*d*f^3*j^10,c^47*g^3*i*j^4*k^4,e^12*g*h^13*i^6,d^5*e^4*g*h^6*i^5*k^3,d^3*e^5*f^12*h*j^7*k^5,e^10*i^11*j^9,c^21*i^12*j^2,c^25*e^19*f^2*h^4,d^16*e^11*g^15*k,d^47*g^9*h^4,e^51*j^2,d^57*j^8,c*d^5*e^2*f^2*i^7*k^10,c^3*d^36*f^8*i^2*k^5,c^10*d^20*f^2*g^8*i^2*j^5,c^26*d^5*e^6*g^11*h*k,c^33*e^12*j^9,c^45*e^5*j^3*k^7,e^4*h^17*j*k^7,d^3*i^16*k^7,e^22*f^9*g^3*h^5,d^10*e^10*g^2*h^16,e^15*f*g^8*h^4*i^2,c^2*d^20*e^2*f^7*g^2*h^9,c^21*e*f*i^5*j^3,c^33*i^7*k^7,d^2*j^2*k^18,c^3*e^16*g*i*j^12,c^8*d^10*e^8*g*j^4,c^10*d^41*f^4*j^6,c^17*d^24*h^4*j^8,c^22*d^34,c^57*e^3*f*j^3,e^10*g^3*i^13*k,e*h^11*j^13*k^2,d^18*i^8,e^44*g*h^2,c^3*d*g^2*h^6*i^11*k^2,c^8*d^11*g^2*i^10*k^5,c^10*f^16*g^4*i^3*j^2*k,c^12*d^3*e^24*h^6*k^4,c^43*e^5*i^4*k,c^45*d^7*f^3*h^2,c^57*h*i*k^5,b*d^28*f^6*g*j^3*k^7,b*e^8*h^4*j^14,b*d^29*e^4*g^11*i^3,b*d^59*e^2*i*k^7,b*f^11*j^6*k^3,b*f^3*g^3*k^12,b*c^17*e^14*f*i^15,b*c^32*d^18*g^7,b^2*h^11*i^3*j^8,b^2*d*f^13*h^4*i^2*k^3,b^2*d^8*e^26*i^6,b^2*c^6*d^2*e^8*f^4*g^4*i^5,b^2*c^8*d^32*e^6*h^2*i^3*k^3,b^2*c^10*e^4*f^18*h^2*j^3,b^2*c^18*e*g^9*i^7,b^3*d^12*f^10*g^8*j*k,b^3*d^8*f^21*j^6,b^3*c^11*d*f^13*g^4*k,b^4*e*g^6*h^8*i^2*k^3,b^4*f*h^13*j^2,b^4*d^9*f^15*h^6*k,b^4*e^3*i^16*j^3,b^4*c^18*d^16*e^17,b^5*d^2*e^25*f^6*g*k^4,b^5*d^26*e^5*f^4*k^8,b^5*d^10*g^14*h^6*j^3,b^5*e*j^21,b^5*c^5*e^10*h^18*k^3,b^5*c^5*f^6*j^7*k^5,b^5*c^9*e^20*f^9*k^4,b^5*c^15*e^5*f^2*h^13*i^4,b^6*d^24*e^2*h^13*i*k^5,b^6*d^3*e^7*g^2*h*i^5*k^13,b^6*h^4*i^8*j^9*k^2,b^6*f^2*g*i^12*k^10,b^6*e^17*h^11*j*k,b^6*d^7*f^8*i^7*j*k^5,b^6*e^9*f^11*h^4*k^4,b^7*c*d^56*e^6*i*j,b^7*c^12*d^3*e^3*j^10*k^9,b^7*c^12*d^4*f^2*j^15,b^7*c^17*d^13*j^2*k^12,b^8*d^8*e^13*g^3*h^11,b^8*e^4*f^4*i^5*k^8,b^8*g^2*h^2*i^5*j^7,b^8*d^12*f^4*h^7*j^9,b^8*c^3*f^12*g^2*i^4,b^8*c^12*d^5*g*h^6*i^2*j^3,b^8*c^16*e^8*h^13,b^8*c^17*d^15*f^10*g*i*k^3,b^9*d^29*e^6*j^11,b^9*d^8*e^11*f*g^2*j*k^6,b^9*e*g^16*j^8,b^9*d^22*g*j^5*k^7,b^9*d^32*g*k^10,b^9*d^16*g^15*j^4,b^9*c^22*e^14*j^8*k^3,b^10*d^16*f^3*i^8*k^6,b^10*e^23*i^3*j^6,b^10*d^2*e^10*h^5*j^8,b^10*d^48*e^6*g^2*i^6,b^10*c*e^15*f^8*i^2*k^2,b^10*c^10*e^3*h^4*j^2*k^3,b^10*c^13*e^8*i^4*k^11,b^10*c^15*d^5*f^6*k^6,b^10*c^20*g^14*i^4,b^11*d^6*e^10*g^8*j^3*k,b^11*d^37*g^2*h^2*j^5,b^11*c^46*e^5*g^4*j^2*k,b^12*d^14*g^4*h^4*i^3*k,b^12*c^20*e^14*g*h^2,b^12*c^34*d^3*h^6*k,b^13*e^2*f^2*g^5*h*j^5*k^8,b^13*c*d^4*e^2*f^20*h^3*i^2,b^13*c^8*e^3*h^9*i^5,b^13*c^9*d^21*e^8*g^9*j^3,b^13*c^13*f^12*h^2*i^4,b^13*c^22*d^11*h^13*i^2*k,b^13*c^45*d^3*j*k^8,b^14*d^4*e^28*h^2*i*k^4,b^14*d^5*e^17*f^3*g^6*h^3*j,b^14*e^10*g^11*h^2,b^14*d^8*e^2*f^9*g^11,b^14*c^19*e*f^3*i^7*k^4,b^14*c^28*d*i^5*j^3*k^5,b^15*c^2*i^16*j*k,b^15*c^3*d^19*e^3*g^4*j^10,b^15*c^32*g^3*h^11,b^16*d^27*i^6*j^4,b^16*e*f^2*i^2*j^9*k^8,b^16*c^7*h*j^5*k^12,b^16*c^26*e^7*j^7,b^16*c^31*d^2*f^13,b^16*c^38*g^2*i^2*j,b^16*c^40*d^16*j^3,b^17*c^12*e^9*i^13,b^17*c^14*f*h^3*i^8*j,b^17*c^51*e^9*h^5*j,b^18*f*g^3*i^5*j^4*k^6,b^18*d^10*f^7*h^2*j^6*k,b^18*d^3*g^2*h*i^2*k^10,b^18*c*d^11*e^3*g^7*i^3*j^2,b^18*c^3*e^12*f^6*j^7*k^2,b^18*c^3*d^41*e*i*k,b^18*c^13*d^4*g^12*i^5,b^18*c^17*f^4*j^3*k^6,b^18*c^50*f*g^3*j,b^20*e^13*f^3*j^5*k^4,b^20*e^6*k^13,b^20*f^11*g^4*j^4,b^20*f^3*g^9*k^4,b^20*d^18*f^9*g^3*h^4,b^20*d*e^32*i*j,b^20*c^13*d^25*e^12,b^20*c^20*d^8*e^13*g^4*h^4*i*k,b^21*c^4*e^15*f^3*j^5*k^2,b^21*c^10*g^2*h^11*i^2*j^3,b^21*c^36*e^16*h^3,b^22*d^19*e^9*f^2*i*k^2,b^22*e^24*f^7*j^3,b^22*e^17*g^2*k^7,b^22*d^8*e^4*f^5*h^2*k^2,b^22*c^4*d*g*h*k^11,b^23*f*g^6*h^16,b^24*d^27*f^4*g^6*h^2,b^24*f^6*g^5*i^2*j^5,b^24*c^11*d^6*e^3*g^2*h^11*j,b^24*c^12*d^24*f^4*g^4*j*k,b^25*e^12*h^14,b^25*e^5*g^4*h^13*k^2,b^25*d^14*h^18,b^25*c^2*f^3*g^4*h^6*k^5,b^25*c^9*e^3*f^5*i^5*j^3*k^2,b^26*e^10*f^2*j^4,b^26*d^21*f^8*j^6,b^26*c^5*d^4*h^2*j^8*k,b^26*c^8*e^3*g^3*i^2*k^9,b^26*c^10*d^14*k^4,b^26*c^17*g^2*h*j^2*k^10,b^27*f^4*i^8,b^27*c^33*f^7,b^28*c^20*e*f^4*g^4,b^29*d^3*e^5*h^8*i*j^6,b^29*c^3*h^7*i^3,b^29*c^6*e^3*g^6*i^7*k^3,b^29*c^8*d^6*f^6*i^2,b^30*d^13*e^23*j^2*k^2,b^30*d^7*e^5*g^14*j,b^30*c^2*g^19*k^2,b^30*c^14*i^5*j^5*k^2,b^31*c^2*d^4*i^13*k^2,b^31*c^6*e^19*f^2*k,b^31*c^15*d^11*f^2*g*h^10,b^31*c^18*e*f^10*g^7,b^32*c^21*d*e^2*j^13,b^32*c^38*d^4*g^5,b^33*c^21*d^2*g*i^8*j,b^33*c^26*d^12*f*g*i^7,b^35*f^2*i^5*j^7,b^35*h^4*i^2*j^3*k^4,b^37*d^6*f^2*h^7*j^4*k^2,b^37*c^3*f^10*k^10,b^37*c^10*f^4*g^5*h^2*j,b^37*c^31*d^7*e^11*h,b^37*c^43*e^4,b^37*c^48*d^10*k,b^38*d^17*j^5,b^38*d^10*g^4*k^9,b^39*c^8*e^16*k,b^39*c^22*h^4*k^5,b^40*e^5*f^2*h^7*i^5*k,b^40*d*e^10*f^3*g^6*j^3,b^40*c^11*d^25*f*g^5*h^2,b^41*g^7*h^11,b^41*c^4*i^3*j^9,b^43*d^7*i^6*j^4,b^43*e^28*f*h^3,b^43*d^31*i^3*k^2,b^45*d^22*f^8*j^4,b^45*c^3*d^15*g^3,b^47*h^9*j^8,b^47*c*d^5*e^14,b^47*c^3*d^36*e*f^2*h,b^47*c^15*d^29*k^3,b^48*d^13*e^3*h^3*i^6,b^50*e^14*f^2*h*i^3,b^51*e^5*h^9*j*k,b^51*c^19*d^11*i^3*k,b^53*j^8*k^5,b^54*c^17*d^3*i^8,b^55*c^3*e^11*g*j^6,b^55*c^8*e^3*f^8*g*k^2,b^55*c^17*h^2*j^2*k^3,b^56*h^5*i^3,b^56*c^5*h^9*k^3,b^62*c^9*d^3*e^2*h*i*j^2,b^62*c^21*f*h*j,b^64*f^8*g^2*j*k^2,b^66*d^6*e^9*g^2*i,b^67*d^5*f^5*g^2*k^2,b^72*h^3*i*j^6,b^72*f^4,b^74*e^16*k^3,b^74*e^4*h^5*j*k^4,b^76*d^4*e^12*g^3*i*k,b^80*c^26*e,b^85*c^3*f^2*h^5*k,b^88*d^4*g^3*j^4,b^101*g^3*h^3,c^6*d^18*e^6*f^6*g*h^4*j^3*k,c^10*e^12*f^3*g^3*i^3*j^8,d^8*e*f^5*i^11*j^2,d^64*e^4*f^2,f^6*g^2*h^13*j^6*k,d^19*e^10*j^15*k,d^4*e^3*g^6*h^4*i^6*j*k^4,c^22*e^18*f*g^3*h^2*j^4,c^36*g^2*h^6*k^4,d^17*g^2*i^9*j^8,c^11*d^33*e^10*h^9,c^42*d^6*f^2*j^7,g^5*h^11*j^12,c^15*d^15*e^16*g*i*j,e^25*f*h*i^12,c^6*e*f^2*g^3*h*k^14,e^8*f^16*g*h^7,c*d^4*h^18,c^7*e^2*h^2*i*j^12*k^4,c^12*d^4*f^5*j^4*k^7,d^3*e*f^19*h*i^3*j^2,c^5*e^2*g^2*h^7*i^6*j^4,d^7*e*f^8*g^16,c^16*d^5*g^22*h^2,d^32*h^3*i^7*j,c^33*e^15*h*i*j^4,c^45*e^8*g^2*i^3*k,d^7*e^3*f^4*g*j^9*k^3,c*g^6*j^3*k^12,d*e^4*f^22*i^3*k^2,e^5*g^3*h^2*i^6*j*k^8,d^8*g^2*h^6*i^3*k^12,c^24*f^3*h^4*k^8,e^3*f^10*g^4*h^5*j,f^2*g^9*h^4*k^6,e^9*f*g^3*i*j^14*k,c^11*d^5*e^23*f^2*j^2*k^4,f^3*i^9*j^8*k,e^32*f^6*h^3,g^4*i^11*j^2*k^10,c^30*f^6*j^7*k,d^24*e^19*f*g^10*k^2,c^16*f^2*i^13*k^6,c^5*d^5*f^5*g^5*i^3*j^2,c^42*e^2*j^2*k^8,f^9*g^2*h*i^14,e^20*h^19,d^13*f^7*g*h^5*i^11,c^3*e^18*f*i*j*k^2,c^5*d^26*e^5*f^7*h*j^3,c^17*d^19*k^6,c^4*d^30*e^5*g^11*k^4,d^45*e*f^6*g^2*h,d^28*e^2*g^7*h^7*i^2*k,c^27*d^3*e^9*f^3*g^4,c*e^18*f^7*g*h*i^6,c^10*d*e^6*h^12*i^4,c^15*d^11*f^5*h^5*i^3,g^3*h^2*i^3*j^13*k^5,c^15*h^13*j*k^8,c^21*d*e^4*i^6*j^2*k^4,e^3*f*g*h^14*i^7*k^4,f^4*h^16*k^4,e^13*i^17,d^16*f^6*i^12*j^2,e^5*f*g^11*h^9*k^2,f^9*j^4*k^11,c^7*f^3*g^10*j^11,c^40*e^3*g^5*i*j^4,c^45*d^9*g^5*k^2,d^16*g^4*j^15*k,d^10*f^16*g*i*j^5,g^6*i^4*j^7*k^6,d^24*h^5*j^9*k,c^5*e^15*g^3*j^10*k^2,c^7*d*f^4*h*i^19,c^12*f^19*j^4,c^15*d^18*g^15*i^4,e^4*f*h^5*i^6*j^4*k^2,f^7*h^10*i*j^6,d^7*f^21*h^3,c^7*h^9*i^3*k^6,c^8*d^24*g^10*j^9,c^26*e^10*g^3*h^4*i^4*j^2,d^7*e^9*h^2*j^2*k^13,d^8*f^4*g^7*h^3*j^7,d*g^12*h^2*j*k^4,g^9*h^5*i^9,e^20*f^3*h^8*j^5,c^3*e^15*f^5*g^6*h^3*i^3*j^2,c^19*d^5*f^9*h^12,d^6*g^2*i^7*j^14,e^27*h*j^6,e^20*g^5*k^7,d^22*e^7*h^5*j^2*k^2,c^4*e^2*g^19,c^25*j^13,d^6*e^16*f^2*h^8*i^2,e^9*g*h^7*i^4*k^7,d^30*h^12*k^2,c^13*d^3*f^2*h^3*i^6*j^7,c^15*e^24*h^5*k^3,d^4*g^29,d^30*f^5*i*j*k^9,d^14*g^8*i*j^8,c^3*e^13*f*h^12*i^6*k^3,c^5*d^24*f^13*g^8,d^4*e^15*g^2*h^17*j^2,e^20*g^8*h^5*i*k,d^14*e^7*f^4*g^2*h^10,c^11*e^6*h*i^4*j^6*k^2,c^16*d^3*f^12*i^3*k^5,c^35*g^6*i^5*k^2,d^4*e^13*g*j^7,c^3*d^14*e^5*f^9*g*k^3,c^12*d^28*j^3*k^4,c^22*g^20,c^47*e^8*j^6,d^12*e^2*h*i^7*j,d^6*f^5*g^11*h*i^6,d^36*h^5*i^4*k^4,c^21*e^17*f^2*i*j^4,c^35*d*h^3,g^3*j^3*k^16,c^9*e^6*f^4*h^6*i^9,c^22*d^12*e^4*g^7*j,f^10*h^5*i*j^3*k^7,d^33*e^18*h^4*j^2,e^13*f*g^4*i^4,d^27*f^7*h^4*j,c*d^6*e^5*f^15*g^4*i^3,c^5*d^10*e*g^3*h^10*i^2*j^3,c^8*e^6*g^9*i^6*k^3,c^10*d^20*g^3*h^3*i,f*g*h*j^25,d^4*e^2*f^3*h^6*i^12,e^4*g^4*h^7*j^11*k^2,c*f^10*g^4*j^3*k^5,e^5*f^14*g*h^3*j*k,h^14*j^5*k^2,d^3*f^12*h^7*k^5,e^42*i^2,d^4*f^8*i^14*k,d^17*e^29*f^3*h^2,c^8*d^10*e^22*h*k,c^20*d^4*e^4*f^3*g^10*h,d^20*e^10*f*k^12,d^4*g^14*h^7*j^6,f^3*j^10*k^9,c^5*e^10*h^14*i^3*k^3,c^27*i^14,d*f^5*i^6*j^4*k^9,e^4*f^2*g^7*h^12*j^3,c^2*d^9*e^6*f^4*i^7*j^6,c^4*d^39*e^4*i^5*j^3,c^8*d*g^6*h^16,c^14*d^2*g^5*i^9,c^51*e*f^7*j^5,c^63*g,c^14*g^5*j^12*k^4,f*g^17*h^12,g^2*h^3*i^4*j^10,d^6*f*h^8*j^12,f^9*g^2*i^3*j^2*k^3,d^15*i*k^16,d^16*f^15*h*j^4,c^2*g*h^7*i*j^6*k^4,c^7*d^9*f^7*g*k^7,c^14*d^23*e^15*i^2*j,c^26*d^17*f^6*g^6*i,c^33*g^11*h*i^4*j^2,c^37*h^5*j^9,f^6*g^16*j^3*k,d^26*g*k^14,e^17*i^15,c^6*f^14*h^6*i*j^2*k^3,d^10*e^5*i^7*k^10,d^4*f^8*g^12*i^6*k,d^42*e^11*g^2*i^5,e^20*f^5*i*j*k^6,d^6*e^7*f^11*j^3*k,d^56*g*h^6*i^3,f^5*g^3*h^6*j^10,c^2*d^20*h^10*j^7*k^2,c^3*e^2*f^13*g^9,c^5*f^3*k^10,c^12*g^8*h^5*j^4,c^17*k^19,c^24*d^7*e^26*f^2,c^36*e^19*g^4*i,e^27*f^2*g^9*j^2*k^4,f^7*h^13*i^4*j^4,d^31*e^2*g^2*h^3*j^8,d^10*e^7*g^8*k^8,d^41*f^6*g^2*k^3,c*d^24*g^7*h^2*j^2*k^9,c^2*d^22*f^5*h^17*i,c^24*d^8*e^8*i^9,b*d^25*e^3*f^10,b*d^8*e^4*g^4*h^5*i^2*k^5,b*d^18*f^2*g^4*i*k^8,b*d^2*g^18*h^5*i,b*c^8*d^12*h*i^4*j^13,b*c^15*e^11*f^7*g*k^4,b*c^24*h^7*k^5,b^2*e^7*f^17*h^4*i,b^2*e^8*h^10*i^4*k,b^2*d^12*f*h^15,b^2*c^3*f^9*h^3*i^3*k^4,b^2*c^15*f*g^2*h^2*i^5*k^13,b^3*d^23*e^2*g^5*h^8,b^3*c^6*d^2*e*i^2*j^12,b^3*c^11*d^12*f^6*i*j^4*k^3,b^4*e^2*f^10*i^12*j^2,b^4*f*g^11*h^4*j^2*k^10,b^4*d^23*f^3*g^4*j^5*k,b^4*c^6*d^4*f^2*h^6*i^9*j^5,b^4*c^8*e^19*g^4*h^8*i,b^4*c^10*d^16*g^9*k^10,b^4*c^22*g^3*h^12,b^5*d^21*i^5*j^7,b^5*e^2*g^6*i^9*k^6,b^5*d^31*f^5*i^4*k,b^5*d^14*g^5*i^7*j*k^7,b^5*d^15*g^14*i^4*j^6,b^5*c^21*e^4*f^10*j^2,b^5*c^30*d^10*h*j^6,b^6*c^4*e*h^4*i^7*j^4,b^6*c^16*h^3*i^9*k^3,b^7*d^4*f^4*h^3*j^9*k^5,b^7*e^3*h^6*i^20,b^7*d^35*e^6*h*j^2*k^5,b^7*d^36*f*g*h^2*j^7,b^7*d^15*f^9*g^7*i,b^7*d^45*k^8,b^7*c^3*e*g^12*i^4*k,b^7*c^5*d^29*g^6*h*j,b^7*c^7*f*j^6*k^10,b^7*c^8*d^8*f*g^12*i^3*k^4,b^7*c^40*e^3*g^3*j^4,b^8*d^13*g^3*h^4*i^10,b^8*c^26*e^5*g^5*h*i^6,b^8*c^28*d^2*h^6*i,b^9*f^8*g^4*h*j^7,b^9*g^9*j*k^8,b^9*c^3*d^19*e^17,b^9*c^15*d^13*g^13,b^9*c^17*d^43*h^3*k^3,b^9*c^27*d^6*g^18,b^10*c^5*f^7*g^2*h^5*k^4,b^10*c^26*e^21*h^4,b^11*d^13*e^14*h*j^3*k^6,b^12*c*f^6*h*i^6*j^7*k^3,b^12*c*d^11*e^17*g^2*h^4*i^2,b^13*f^3*g^5*i*j^8*k,b^13*e^20*f^6*g^3*h,b^13*c*e^8*g^2*h^12*j^4*k,b^13*c^2*d^18*f*g^4*j^4*k^5,b^13*c^6*d^10*f^4*g^2*h^5*k^4,b^13*c^12*d^11*e^15*g*i^4,b^14*d^2*f^5*g*h*i^9*j^2*k,b^14*d^4*e*f^22*h*k^3,b^14*d^8*h^19*k,b^14*d^9*e^12*i^13,b^14*e^8*f^2*i^4*j^6*k^6,b^15*e^15*j^7*k^4,b^15*d^15*e^2*f^5*j^9,b^15*f^7*g^12*j^6,b^15*d^8*j^3*k^8,b^15*c^10*g^17*k^4,b^16*e^4*f*i^7*j*k^4,b^16*d^23*f^7*h^4*i^2*j^3,b^16*f^9*g^8*i^6,b^16*g^7*h^10*i^4*j^4,b^16*d^10*f^7*g^7*h^3*i^3,b^16*c^7*d^24*e^10*i^5,b^16*c^23*f^4*h*k^4,b^17*d^3*e^11*g^8*i^2*j^2*k^2,b^17*d^17*g^7*h^3*j^6*k^3,b^17*e^13*f^9*j^7,b^17*c^10*e^6*f*g^4*j*k^2,b^17*c^12*d^23*f^7*j^3,b^18*d^11*g^4*i^10*k^2,b^18*e^15*f^5*g*i^4,b^18*d^7*e^2*f^11*h^2*j,b^18*e^3*h^8*i^2*j^3,b^18*f^3*h*i*k^2,b^19*d^48*e^7*k^4,b^19*d^11*e^2*g^14,b^19*c^4*e*i^4*j^8*k^6,b^19*c^6*d^21*j^10*k,b^20*d^19*f^2*g^10*h*i^4,b^20*e^32*h^6*j^2*k^2,b^20*i^12*j^2*k^6,b^20*e^24*k^5,b^20*c^5*d^5*e*g*h^11*j^3,b^20*c^8*e^6*f^7*g^7,b^20*c^22*d^8*f^5*g^6*h^3,b^21*d^32*e^18*f^2*g,b^21*f^9*g^3*h^6*i^6,b^21*c^16*d^5*f^4*j^8,b^22*d^9*e^20*g^3*i^2*k^3,b^22*d^3*h^2*i^5*j^10,b^22*c^2*e*g^2*i^9,b^22*c^4*d^13*f^6*i^4*j^2,b^22*c^11*g*h*i^7*j^4*k,b^22*c^16*d^6*g*i^6*k^4,b^22*c^20*e^15*f*h*k^3,b^22*c^51*f^3,b^23*c^15*e^10*f^5*i^7,b^24*c^2*d^3*e^17*f^2*i^2*j,b^24*c^11*d^17*e^5*h^4*j^5,b^24*c^14*f^10*g^3*i,b^24*c^16*d^27*k^2,b^24*c^21*g^8*i^4*j^2,b^24*c^26*f^2*g^8*i^3,b^25*d^6*k^18,b^26*d^36*e*h^4*i^3,b^26*f*g^5*h^3*j^4*k^2,b^26*c^33*e^9*h*k^2,b^26*c^33*g^9*h^2*j^2,b^27*d^11*e^4*h*j^8*k^4,b^27*g^19*j^5,b^27*c^12*e^10*i^9*k,b^28*d^5*e^5*f^14*k^3,b^28*f^6*g*i*k^12,b^28*g^15*h^3*i,b^28*d^20*e^12*g^5*h^2,b^28*e^21*h*j^3*k^5,b^28*e^8*f^3*h^6*j^5,b^28*c*d^30*e^4*f^3*g^5,b^28*c^5*f^17*k^3,b^29*f^5*h^13,b^29*e^8*g^11*k^7,b^29*c*d^19*g^5*h^3*j^2*k^2,b^30*d^3*e^4*f^2*g^2*h^6,b^30*c^20*f^2*h*j^7,b^31*e^10*g*j^13*k^2,b^32*d*i^5*j^7*k^2,b^32*e^8*g^14*h^3*k,b^33*e^3*f^2*h^2*i^7*j^4,b^33*c^6*h^6*i^4*k^2,b^34*e^10*g^4*i^2*j^5,b^34*d^16*f^5*j^7,b^34*e^2*f^13*g^4*i,b^34*g^3*h^6*j^9,b^34*d^9*g^3*j,b^34*c^28*e^5*f^2*j^4,b^34*c^42*h,b^35*c^4*e^12*h^4*i^2*k^5,b^36*e^19*k^3,b^36*c^3*e*f*g^10,b^36*c^5*d^23*h*k^7,b^36*c^15*g^15*k^3,b^38*c^3*d^14*e^17*f^3,b^38*c^15*d^7*e^10*g^2*k,b^39*e^19*h^2*i^2,b^39*c^3*d^15*h^6*k,b^39*c^10*d*e^5*i^5*j^6,b^40*c^2*d^22*e^4*f^10,b^41*c^34*d^9*f,b^42*g^8*h*j^10,b^43*d^4*e^12*f^2*i^5,b^43*c^7*e^5*i^7,b^43*c^56,b^44*d^7*g^4*k^10,b^44*d^5*h^2*i^15,b^44*e^8*f^5*g*j*k^6,b^45*c^19*d^12*e^3*f^4*g,b^47*c^5*g^3*h^8*k,b^47*c^7*d^9*f*h^13,b^47*c^13*d^10*i^10,b^49*c*d^7*h^4*i^2*j^6,b^51*e^7*h^2*j^5*k^3,b^51*c^11*h^2*j^4,b^52*h^9*i^7,b^53*d^16*e^3*h^2*i^3*k,b^53*f^5*g^2*h*j^4*k^6,b^53*c^23*d^5*h^4*k,b^54*e^7*h^7*i^5,b^55*d^10*e^6*f^7*g^2,b^55*d^24*g*h^4,b^56*f^2*g^2*h*j^2*k^6,b^57*c^32*f^3*i*k^2,b^59*c^4*d^37*j,b^61*f*j*k^4,b^63*e^3*f^5*g^7,b^63*d^4*f^11*g*j,b^65*g*i^4*j^2*k^6,b^66*e*f*h^4*k^5,b^67*c^9*g^8*i,b^69*c^9*e^5*f^2*j,b^70*d^8*f^4*i^2,b^71*d^2*e^2*g^10*k^2,b^72*c^19*g^3*i*k,b^74*h^6*k^5,b^80*c^11*h^2*k^5,b^82*d^4*h^2*k^3,b^86*e^2*i^5*k,b^88*c^2*d*f^2*g,b^88*c^14*g^6,b^89*c^2*d^2*g^2*i^7,e^17*g^3*i^2*j^11*k^3,c^12*d^10*f^4*g^5*h^3*i^4*k,d^21*e^4*f*g^19,c^10*e^26*h*i^2*k^4,c^5*d^56*g^3*i^5,d^11*e*g^2*i^8*j^11*k,c^32*h*j^10*k,c^7*d^19*g^8*h*i^2*j^5,c^30*f^5*g*h^6*i^4*j^2,c^5*d^9*e^21*g*j^4*k^2,c^17*d^3*e^3*f^2*g^15*j^3,c^3*d*e^21*g^4*h^4*i^5,e*h^19*j^2*k^4,c^2*f^2*j^7*k^11,d^17*f*g^9*i^2*j^2*k^9,e^6*f^16*h^2*i^2*j^5,f^8*g^2*h*i^4*k^5,c*h^2*i^8*j^14,d^44*j^4*k^9,d^12*e^17*f^6*g*i^8,d^26*e^5*h^4*i^6*j^4,d^36*f^4*i^5*k^3,d*e^8*f*g*h*j^12*k^7,e^8*f^7*g^4*h^6*j^4*k,e*g^9*h^5*k^10,e^45*i*j,e^3*i^8*j^11*k^5,f^2*g^5*i^2*j^5*k^3,c^9*d^23*g^4*h^3*j*k^7,d^7*f^4*g*h^6*i^10*k^3,d^18*f*g^15*i^5*k,e^23*j^4*k^6,c^5*e^5*f^6*g^12*j^3,c^7*d^13*e^3*h*k^10,c^19*d^7*f^4*g^11*h*k,e^12*h^4*i^8*k^6,d^28*f^6*h^9*i^3*k,d^39*e^6*f^3*g^2*h^2*j,d^32*g^7*h*k^8,c^17*e^14*g^4*k^4,f*g^3*i^18*j^4*k,e^23*f^4*g*h^2*i^5,e^11*h^13*i^3*k,c*d^13*g^2*i^15*k^5,c^5*d^5*e^3*f^2*h^6*i^2*k^4,d^2*e^16*f*i^3*j^11,c^13*d^26*j^7*k^3,d^10*e^5*f^3*i^11*j^5,d^3*i^13*k^8,c^12*d^10*e^9*g*h^16,c^36*f^6*i^2*j^4,d^45*g^3*i^3*j^2*k,c^18*e^15*j^13,c^23*d^10*e^7*f^3*j^5,c^35*d^3*g^5*k^6,c^9*e^9*g^2*i^10*k^2,c^11*d^18*f^5*i^5,e^16*g^16*i^5,f*h^2*i^18*k^2,d^29*e^3*f^2*g^10,f^4*h^11*j^9*k,d*f^18*h^4*j*k^4,h^10*i^2*j^3*k^10,c^9*d^8*e^25*f*i^3,c^33*f*g^8*i^4,d^2*e^3*f*g^7*h^4*j^10,g^12*h^3*j^4*k^8,d^19*e^32*g^3,d^10*f^3*g^3*h^11*i^3*j^4,d^51*e*h^2*i^3*k^2,f^22*h^2,c^7*g^5*h^8*j*k^4,d^24*e*h^13*k^6,e^3*g^29*h,d^8*g^8*j^11*k,e^5*f^4*h^18*k^2,d^8*e^12*f*g^2*h^11,c^6*e^3*f^9*i^2*j*k^9,c^13*f^3*g*h^2*i^2*j^8,c^27*d^5*f*h^6*j^4*k,d^8*e^10*f^6*g*j^2*k^7,g^15*j^9,c^2*d^22*j^6*k^8,d^6*e^7*h^2*i^6*j^4*k^4,d^37*h^7*i*j^6,g^2*h*i^8*k^13,d^30*h^6*i^3*k^8,c^2*d^24*g^10*h^6*i^2,c^11*e^22*j^7,e^11*f*h^7*i^8*j,e^18*g^4*i^3*j^2,d^21*e^5*f^4*h^5*j^4,e^10*f^12*g^4*i^2*k,d^4*e^6*g^3*h^11*i*j^6,e^11*g^9*i^5*k^7,d^14*g^3*h^4*k^2,c^2*d^45*f^2*h^9,c^35*e^13*f*h^2*j,e^7*h^7*i^11,d^25*e^5*g^17,e*f^7*g^4*h*j^6*k^9,d^21*e^3*f^9*j^9,c^11*d^14*f*g^2*i^2*j^3*k^9,c^23*e^2*f^3*h^9*i^2,f^9*h^8*k^9,c^10*e^9*g^10*h^2,c^31*d^8*j^10,c^43*d*i^2*j^4*k^6,c^17*i^13*j^2*k^2,d^17*e^5*g^20*h^2,c*d^17*h^5*i^4*j^13,c^4*e^4*g^5*i^8*j^3,c^6*d^27*i^3*j^5,c^53*g*j^2,e^2*h^2*j^21,d^4*g*i^16,e^27*h^7*i^3,d^2*f^10*j^13*k^2,c^29*f^6*h^3*i^5*j^2,c^41*h^2*i^7,f^28*j^3*k,d^10*f^12*h^2*j^7*k^2,g*h^8*j^9*k^8,d^3*f^4*g*h*j*k^11,c^4*d^17*e^20*i*j^4,c^18*d^41*k^2,c^28*d^4*g^11*i^2,d^60*g*i,e^5*k^14,c^9*d^18*f^14*g^2*h^4*j,c^28*d^25*e^11,d^2*f^18*h^7*i^2,d^35*f^3*g^2*j^3*k^7,c^2*d^9*e^20*f*h*i^6,c^14*d^2*e^13*i^8*k,d^19*e^8*f^7*j*k^3,d^12*e*g^4*k^12,f^9*i^5*j^12,d^6*h^2*i^3*j^16*k,c*f*g^3*i^7*j^6*k^9,c^5*e^16*f^4*g*k^8,c^7*d^8*e^3*f^10*h^2*k^3,c^19*d*f^2*h*k^12,d^6*h^16*j^2,e^5*f^6*h^4*i^2*k^8,g^11*h^11*i^2,c^2*h^15*k^9,c*d^6*f^3*j^7*k^7,c^8*g^4*j^14,c^13*f^11*g^4*j^6,i^13*k^12,d^14*f^5*i^8*j*k^7,e^24*g^4*h^9,e^11*f^2*h^14,c*d^8*f^13*i^7,c^3*e^16*f^10*g^4*h^2*k^2,c^5*e^3*f^16*h^7,c^12*e^4*g^3*h^13*k^3,c^24*e^2*f^10*i^2*j^4*k^3,d*e^14*f^4*g*i^6*j^6*k,d^15*e^2*i^4*j^10*k^2,e^7*g^6*i^8*k^10,d^25*f^2*i^3*j^2*k^5,d^56*f^8*j^4,c^6*e^17*j^13,c^8*d^11*e^4*h^3*j^15,c^9*d^57*g^4*i,c^11*e^9*f^7*j^5*k,c^20*d^4*h^2*j^9*k^2,c^23*e^2*g^2*k^10,d^2*g^13*h^13*k,e^6*h^5*i^6*j^7,f^9*i^5*k,c^8*d^12*h^9*i^3*j^3*k^2,c^11*f*i^7*k^10,d^9*e^5*f^6*g^7,d^40*f^12*g*j^2,e^6*g^12*i^3*j^2*k^5,d^23*g^6*h^2*j^4,d^2*g^12*i^2*k^8,c^30*e^8*g^3*j^7,c^6*d^3*e^4*f^5*h^8*j^7,c^9*e^9*f^13*i^2,c^11*d^13*f^19*h,c^18*h^7*j,c^21*e^2*f^5*g^5*i^4*k^4,c^23*d^6*f^11,e^34*f^2*k^2,d^13*e^22*j^3*k^3,d^54*e*f^6*k,c^5*d^7*e^4*g^13*j^2,c^6*d^4*h^14*i^8,c^7*d^37*e^2*h^4*k^7,c^17*g^18*k^3,c^29*f^2*i^2*j^6*k^3,f^7*h^9*i^3*j^4*k^3,d^22*f^4*g^4*h^8*i*j^2,d^31*e^3*f^2*i^3*k^6,e*f^26*k^2,d^15*g^9*h^7*i^3,e^2*f^4*g^2*h^6*j*k^8,d^25*f^10*g^9*i^2,d*i^9*j^14,c^3*e^4*f^6*i^13*j^4,c^15*i^15*k^8,c^16*e^26*h^5,c^17*d^4*f^4*i^10*k^3,f^7*g^10*h^4*j^4*k,d^2*h^5*i^19*j^2,c^4*e^15*h^12*i^6,c^4*d^15*f*g^8*i^5*j*k,c^6*d^46*f^7*g^2*j^3,c^19*d^52*h^7,b*d^12*e^29*h^6*j,b*d^5*e^22*g^2*h^5*i,b*d^15*e^14*f^6*g^2,b*c^3*e^4*g^16*h^5,b*c^5*d^29*e^2*g*h^9*k,b*c^10*d^39*f^4*g*h^2*k^4,b*c^24*d^9*h*i^3*j^8,b*c^27*f^8*g*i^7,b*c^36*d^2*i^5*j^2,b^2*g^5*j^11*k^5,b^2*d^4*e^5*f*g^2*h^6*k^8,b^2*c^2*d^5*e^20*g*i^3*k^4,b^2*c^11*d^20*g^9*j^9,b^2*c^16*d^29*k^8,b^2*c^28*d^2*e^6*h^14,b^3*f^2*g*h^2*i^8*j^5*k^5,b^3*d^44*f^5*i^6,b^3*d^28*g^5*h*i^6*j^3,b^3*c*f^7*i^2*j^8*k,b^3*c^13*g^3*i^4*j^2*k^10,b^3*c^15*f^5*h^4*j^4*k^5,b^3*c^34*e^12*i^3*j*k,b^3*c^34*e*f^4*g^2*j^6,b^3*c^39*d^2*e^4*f^2*i^2*k^4,b^4*f^3*h^2*i^15*k^6,b^4*e^2*f^4*g^12*j^9,b^4*d^2*j^6*k^12,b^5*e^9*i^6*j^4*k^8,b^5*d^17*f^4*h^5*i*j^6*k^3,b^5*f^6*g^8*i^5*j^3,b^5*d^4*f^4*g^7*h^4*i^2*k^3,b^5*d^18*e^15*i^4*j^2,b^5*c^2*d^28*e^7*f^9*i^3,b^5*c^9*d^11*e^8*g^3*i^6,b^5*c^9*d^12*f^3*g^12*i^3*j,b^5*c^11*d^42*h^3*i,b^5*c^13*e^4*f*h^2*j^3*k^8,b^5*c^14*d^21*f*g^3*i^5*k^2,b^5*c^46*d^7*e^10*h*j,b^5*c^58*e^3,b^6*d^15*f*g^21*k,b^6*e^11*g^4*j^4*k^6,b^6*c^2*d^17*f^4*j^6*k,b^6*c^14*d^10*g^3*k^10,b^7*d^5*e^5*g^4*i^9*k^6,b^7*e^20*f^2*g*i^3*j^2*k^2,b^7*h^2*k^6,b^7*d^25*f^6*h^7*k,b^7*d^4*f^14*k^9,b^7*g^5*h*i^2*k^15,b^7*c^21*d^26*e^6*g^4*h,b^8*d^5*e^7*g^14*k^4,b^8*d^36*f^3*g^8*j,b^8*c^11*e^4*f^7*h^7*i^2*k^2,b^8*c^24*e^2*g^10*k^4,b^9*e^2*f*i^9*j^11*k,b^9*d^15*e^16*f^2*h^5*k^4,b^9*e^6*g*h^12*j^6,b^9*e^11*f^4*g^7,b^9*d^9*f^10*g*h^5,b^9*c^7*g^6*h^11*k,b^9*c^12*d^2*f^2*g^6*h^4*k^4,b^9*c^19*f^4*j^10*k,b^10*f^6*g^3*h^7*i^5,b^10*c^6*e^4*f*j^11,b^10*c^11*d^9*f^15*j^3*k^2,b^10*c^18*g^5*j^5*k^8,b^11*d^3*e^25*g^3*i*k^7,b^11*e*h^3*i^4*j^13,b^11*e^6*g^2*i^8*j^3*k^4,b^11*d^7*f^3*i^3*j^5,b^11*e^27*f^6*h^3,b^11*c*g*h^2*i^6*j^7*k^5,b^11*c^6*g*i^5*k^8,b^11*c^8*d^31*f*j*k^3,b^11*c^41*e*j^2*k^4,b^12*i^16*k^4,b^12*d^18*g^10*j^6,b^12*d^15*f^5*h^3*i^11,b^12*c^5*g^9*h^16,b^13*f^8*j*k^15,b^13*e^22*i*j^4*k^2,b^13*c*d^12*h^6*j^13,b^13*c^4*e^4*f^7*g^3*j^3,b^13*c^6*d^21*e^2*k^6,b^13*c^18*d^15*f^5*g^2,b^14*f^9*h*i^8,b^14*c*d^13*h^12*i^6*j,b^14*c^4*f*g^4*i^10*k^2,b^14*c^24*d^5*g*j^12*k,b^14*c^39*e*f^6*g*i^4,b^15*f*g^3*h^7*i*j^10*k,b^15*d^16*e^18*i^4,b^15*d^40*i*k^4,b^15*e*g^18*i^6,b^15*f^4*h^9*j^9*k,b^15*f^18*h^2*j*k^4,b^15*c^11*e^21*h^3*j^6,b^15*c^16*d^5*e^13*f,b^16*f*g^13*h^2*j^10,b^16*c^4*d^13*e^2*f^3*h^3*i^3,b^16*c^51*e^10*k^5,b^17*d^14*e^17*g^5*h^3*j,b^17*d^24*e^9*g^5,b^17*d^7*e^10*g^10*h^2*i*k^4,b^17*d^8*g^19*h^3,b^17*c^5*d^48*g^4*k^2,b^18*d^32*f^2*g*h^3*i^6,b^18*f^4*g^8*h^9*i^2,b^18*d^11*i^14*k^4,b^18*c^23*d^11*e*h^12,b^18*c^26*e^6*g^3*i^2*k^3,b^19*e^9*g^2*h^7*j^3*k^2,b^19*d^7*e*f^13*g^2*k^5,b^19*f*g*j^14,b^19*c^20*e^19*i^3*j^3,b^19*c^34*d^11*k^2,b^20*f^3*h^5*i^8*j^8,b^20*e^13*f^6*h^12,b^20*c*d^9*e^2*g^13*i^5*k,b^20*c^8*e^8*i^11,b^21*d^5*f^6*i^3*j^2*k^9,b^21*d^5*f*g^8*h^9,b^21*d^37*e^2*f^3*g*i,b^21*c^4*d^20*e^3*g^6*i^4*j^2,b^21*c^8*j^9*k^6,b^21*c^9*d^30*g^6*i^3,b^22*d^14*e^4*g^3*i^14,b^22*f^5*h^8*i*j^9,b^22*d^9*f^19*h*j,b^22*c^32*d^3*f^2*i^5,b^23*e^7*f^10*g^4*k^3,b^23*d^3*g^3*j^4*k^4,b^23*c^32*h^2*j^3*k^4,b^24*e^4*h^3*i^9*j^2,b^24*f^23,b^24*c^4*e^12*g^2*i^5*k^5,b^24*c^6*f*h^5*j,b^24*c^11*f^15*k^3,b^25*e^6*g^10*j^2,b^25*d^18*f^4*g^4*h^3*j^4,b^25*c^7*d^11*g^9*h^2*k^2,b^26*g^6*h^5*i^3,b^26*d^5*f^14*g^6*i^2*k,b^26*c^4*e^28*h^3*k^3,b^27*e*g^5*i^6*j^9*k^2,b^27*d^8*e^22*h*j^3,b^28*e^24*h^3*i*k,b^28*e^16*f^10*k^4,b^28*d^9*e^4*h^7*k^5,b^28*e^10*i^4*j^9*k^2,b^28*c^5*d^3*f^2*g^12*h^7,b^28*c^24*i^5*j^2*k^2,b^28*c^26*d^13*f^2*h^3*j^4,b^29*h*i^16,b^29*f*g^6*j^9,b^29*c^4*d^9*e^2*k^12,b^29*c^11*g^11*j^3,b^29*c^16*e^8*f*h^12*k,b^30*d^14*e^6*i^7*j^4,b^30*d^8*f^3*g^2*i^6*j^3,b^30*d*g^7*i^8,b^30*c*d^32*f*g*h^3*i^3,b^30*c^24*d^3*e*h*j^3,b^31*c^11*d^14*e^8*j^4,b^32*e^17*i^4*j^2,b^32*e^10*i^6*k^3,b^32*c^2*d*e^2*f^5*i^5*k^6,b^32*c^13*f^13*g*j^2*k^3,b^32*c^46*e^5*k^3,b^33*c^2*k^14,b^34*e^2*f^4*k^10,b^34*c^9*d^6*e^8*f*g,b^34*c^21*e*g^6*k,b^35*c^9*g*h^7*j^8,b^36*e^5*f^11*g^2*h*i,b^36*e^8*h^10*j^6,b^36*d^3*h^14*j^2,b^36*c^3*d^4*e^3*i^9*j^3,b^39*e*g^6*h^14,b^39*c*e^3*i^14,b^40*e^6*f^11*j^3,b^40*d*e^4*f*k^10,b^40*c*h^3*j^7,b^40*c^6*f^9*k,b^42*d^20*i*k^8,b^42*c^4*e^15*f^5*k^4,b^43*d^14*h^13*j^2,b^43*c^13*d*g*h^12,b^44*d^4*e^11*f^4*g^2*k^2,b^44*c^23*e^14*h^3,b^44*c^24*d*f^4*i^2*k^3,b^45*c^11*e^3*h^10,b^46*c^3*d^12*e^2*f^6*g^8,b^46*c^22*e*k^6,b^47*c^5*h*i^9*j*k^3,b^48*d^31*j^4,b^48*d^10*g^3*i^3*k^4,b^48*c^41*j*k,b^50*c^16*d^8*g^9,b^51*c^39*g^2*h,b^52*f^8*g*h*j^4,b^53*c^4*e^12*f^9*h,b^54*d^12*e^4*f^2*h^3*k^4,b^56*g^2*h*j^13,b^57*d^12*f^5*h*i^3,b^57*c^22*f^4*g*i^2,b^58*e^10*j^4*k^2,b^59*d^2*f*i*k^2,b^60*c^23*d^2*e*f*g,b^61*e^10*f^5,b^61*c^6*h^8,b^61*c^9*e^3*g^3*k^5,b^61*c^11*d^10*f^3*h,b^65*c^15*i^3,b^73*d^13*f^2*h^6,b^77*e^5*g*j^2,b^78*d^3*f*h^2*i^4,b^86*c^20*d^7*i,b^88*h^6*k,c^2*d^4*e^2*f*g^5*h^4*i^3*j^2*k^5,c^30*g^13*i^5*j*k,e^26*g^4*h^5*i^4,c^13*d^32*h^3*i^4*j^2,c^60*e^7*g*k^2,c^16*f*g^5*j^4*k^13,e^4*f^5*g^2*h^2*i^3*j^2*k^9,c^2*e^2*f^15*g^3*h^5*j^2,f^8*i^6*j^9*k^2,c^8*g^3*i^8*j^3*k^11,d^30*e^2*f*i^4*k^7,c^25*d*e^5*h^12*i,c^36*d*e^3*f*i^3*j^3*k^5,c^11*d^20*g^8*i^6*k^3,e^6*f^7*h*j^14,g^5*i*j^8*k^7,d*f*g*h^7*i^9*j^2*k^7,c^8*e^3*f^6*h^5*i^3*j^5*k^3,c^9*d*f*g^11*h^2*j^2*k^5,e^6*f^2*g^22*i*j,d^6*f^2*g*i^4*j^15,c^5*d^30*i*j^11*k^4,e^8*h^7*i*k^8,d^9*f^13*k^11,d^4*f^4*g^28,c^13*d^4*e^12*j^8*k,c*d^12*e*f^2*h*i^4*j^2*k,c^13*d^5*g*i^6*k^10,c^48*e^9*k^6,e^3*h^3*i^17*k^6,d^31*f*g^6*h*i^7,d^2*e^30*i^2*j*k^4,c^11*e^12*f^6*g^3*i,c^23*e^5*g^8*i^3*k^4,c^25*d^20*f^4*g^2*h^3,d^4*e*f^8*h^6*i^9,e^4*f^19*h^3*j^2*k^2,d^2*f*i^20*j,d^29*e^17*g^5*h,c^29*d^2*f*g^4*i^6*j,c^17*d^10*f^3*i^14,d^2*e^17*g^2*h^12*k^4,d^58*i^5,c^3*g*h^3*i*j^11*k,c^8*f^14*g*j^3*k^4,c^17*h^7*j^7*k^5,c^15*e^16*i^12,d^10*e^4*f^5*i^4*k^11,c^18*d^66,c^27*f^2*g^7*h^5*j^5,c^51*e^18*g^3,c^3*h^12*i^4*k^8,e^23*g^4*h*i^2*j^5*k^2,d^25*e^2*f^15,d^8*e^3*g^3*h^5*j*k^6,c^2*d^2*f*g^17*h^5,c^13*e^7*h^10*i*k^2,e^14*g^10*h^3,c^21*d^2*j^13*k,e^3*g^6*h^10*i^4,e*f^15*i^9*j^3,c^37*f^2*g^2*h^12,e^16*i^5*j^12,d^21*i^2*j^8,e*f^4*g^5*i^6*k^7,d^13*e^30*h^6,c^8*d^14*g^4*i^4*j^2*k^8,c^31*e^11*f*j^11,g*h*i^15*k^4,e^32*h^8*i^2*k^3,c^19*f^3*h^4*i^4*j^5,c^24*d^4*f^17*i^3,f*g*h^2*j^4*k^15,d^11*e^25*j^7*k^2,d^21*e^17*f^6*k^5,c^11*d^15*f^14*g^6,c^18*g^11*i*k^2,c^20*d^29*g^5*h*j^2,d^13*f^2*g^2*h^4*i^7,c^6*d^6*g^7*h^3*i^9*k^2,c^8*d^37*g*h^8*i^4,c^41*e^4*g^4*h*i^3,e^4*f^10*g^7*i^2*j^9,d^54*e*g*h*k^4,d^48*g^15*h,d^3*e^2*g*i^10*j^13,c^5*d^13*f^7*g*i^9*j^5,c^18*d^19*e^16*j,c^49*i*j^12,d^3*e^25*h^2*i^5,c^4*e^18*h*i^7*k^5,c^4*e^7*f^6*g^9*h^2*i^4,c^6*d^27*e^5*h^6*i^2,c^9*d^6*e^10*f^4*i^6*k^8,c^16*g^14*h*i^6,c^37*i^9*j^6,d^10*f^4*i*j^11*k^8,d^2*e^8*f^7*h^3*j^3*k^7,c^9*f^15*g^9*h^3*j^2,c^11*d*e^24*g*h^11*j,c^16*d^11*e^16*g*h^4,d^21*e^4*f^6*g^5*h^3*k^5,g^4*h*j^17,c^3*f^8*g^4*j^9*k^2,c^22*d*e^22*i^2*j^6,d^19*e*g*h^17*k^2,c^10*d^9*e^11*i^10,c^12*d^40*i^5*j^2,c^59*e^6*i,d^19*i^2*j^5*k^9,d^17*h^2*i^18,c*e^14*f^4*j^8*k^5,c^3*d^15*e*f^10*j^10,c^10*e^2*h^3*j^12*k^6,c^15*d^8*f^2*j^4*k^9,d^13*h^11*j^12,e^3*f^6*i^4*j^2*k^5,d^23*f^12*h^4*j^4,d^6*h^10*i^2*j^6*k^6,c*i^6*k^14,c*f^14*g^7*i^3*j,c^3*d^16*f^4*h^3*i*k^9,c^15*d^10*f^12*g^6*h^3,c^34*d^17*e^2*g^2*i^4,d^34*f^9*g*j^5,d^17*g^6*h^3*j^7*k^4,d^27*f*g^6*k^7,c^8*d*e^11*i^15,c^25*e^5*f^6*g^3*j^2*k^3,e^14*f^10*i,c*d^7*e*f^16*h^2*j^2,c^8*e^2*h^8*j^4,c^13*f^8*h*k^3,c^25*g^4*k^12,e^3*f^12*h^4*i^9,h^15*i^7,d^11*e*f^5*g^13*k,d^32*e^15*f^7*h^2*k,d^5*f^9*i^7*j^9,c^7*f*i^9*j^3*k^7,c^11*e^23*f^4*k^6,c^23*e^5*f^12*g^6,d^40*f^4*g^2*j^6,d^32*e^17*f^7,c^20*d^6*g*h^17*i,c^43*f*g^4*j^3*k^5,e^27*g^2*h^6*k,d^48*f^6*i^7,d^9*e^19*f^3*g^2*k^4,e^9*g^16*h^6,d^3*e*f^11*g^16,d^33*f*g*h^3*k^8,c^14*d^3*h^2*i^2*j^11,c^19*d^13*f^11*i*j^3,c^26*h*i^4*j^5*k^2,e^25*g*i^2*j^3*k^8,h^4*i^15*j^3,c^4*e^7*f^2*g^15*i*j^2,c^5*f^7*i^14*k,f^4*h*i*j^11*k^5,d^14*e^25*g^3*h^9,c*d^15*g^10*h*i^7,c^5*f^2*h^5*j^7*k^9,c^29*e^9*i*k^8,c^36*g^7*i*j^3,d^49*e^8*g^5*k,c^12*f^3*h^7*i^7*j^3,c^17*d^4*f*i^9*k^8,d^5*f^9*g^2*h^6*j^8,f*g^7*h^5*i*j^2*k^7,d^12*e^20*i^3*j^5,e^25*g^4*i^7*k^2,d^22*e^12*f^6*i^2,d^5*e^13*g^3*i^5*k^3,d^6*e^2*g^12*i^2*j^4,c*e^11*f^8*g^5*j^9,c*d^36*h^4*j,c^4*d^15*e^5*g^3*i^4*k^6,c^6*d^46*f^4*k,c^11*g^17*i^4,c^13*d^29*g^2*h^3*i^2*k^7,c^15*f^6*g^4*h^3*j^5*k^3,c^48*e^8*h*k^3,e^14*f^2*i^15*k^2,d^13*e^2*h^6*i^13*k^3,f^10*g*h^6*i^6*j^3,h^10*i^4*k^12,d^11*e^3*f*h*j^9*k^5,c^4*d^4*g^3*j^3*k^14,f^2*g^18*h*i^7*j*k,e^12*f^5*h^4*j^7*k,d^5*e^4*f^19*k^4,e^5*h^3*j*k^10,d^19*f^3*h^8*j^3*k^5,f^11*k^13,f^5*g^14*h^3*k,d^12*h^7*k^14,e^31*g^5*j^3,c^2*d^6*e^23*f^10*g^5,c^11*d^20*e^11*g^4*h^2,c^14*e^16*f^2*g^10*i,c^23*d^13*e^4*g^9*h*k,d^30*g^8*h*j^4*k^3,f^2*g^28*j,d^28*h^9*i^5,c^2*e^14*f^5*g^5*j^7,c^6*e*f^18*h*k^9,c^16*d^19*f^3*g^4*h^3*j^3*k^3,c^46*e^8*g^2*h^6*i,d^14*e^8*f^4*g^5*h^4*j^2,d^7*e*g^10*h^3*i^2*k^8,e^16*f*g^7*h*k^4,d^3*e^3*f^7*g*h^6*j,d^35*f^2*g^2*h^3*i*j^5*k^4,c^2*g^6*h^5*k^8,c^9*e^2*f*j^13*k^5,c^10*d^28*f*i^7,c^35*f^7*h*j^8,d^14*e^10*f^4*g^15*j^2,d^11*f^9*h^13,e^8*g*i^21*k,c^7*f^5*g^2*i^11*j^4*k,c^11*e^20*f^8*h^6,c^14*d^9*e^23*h*j^2*k^6,e^6*h^4*i^3*j^16,d*i^2*j^8*k^3,d^11*f^14*i*k^6,f^2*g^16*i^6*j^5,d^25*h*j^4*k^7,c*d^4*f^6*g*i^3*k^15,c^10*d^19*f^6*g^9*h*j^3,c^17*d^33*e^4*j^6,b*d^9*f^2*h^4*i^10*j^2*k^3,b*c^3*d^10*e^6*g^2*i^13,b*c^7*e^2*f^7*h^2*i^4*j^5,b*c^9*d^4*h^6*i^2*j^2*k^12,b*c^19*h*i^6*k^8,b*c^21*f^5*h^6*i*j*k^3,b*c^52*e*i^4,b^2*d^20*g^6*i^5*j^3*k,b^2*d^12*e^28*f^2*g^4*h^4,b^2*e^3*f^2*g^23*h^3,b^2*e^9*f^4*g^3*j^6,b^2*d^15*e^7*j^3*k^10,b^2*d^16*f^10*j^8,b^2*c^3*g^2*h^6*j^10,b^2*c^6*e^2*g^8*i*k^6,b^2*c^8*d^8*k^19,b^2*c^8*d^9*f^2*g^2*j^2*k,b^3*f^6*h^2*i^7,b^3*d^3*f^20*i^6,b^3*g^4*h*i^9*k^6,b^3*d^17*f^4*h^6*i^4*k,b^3*c^19*e^11*f*h^4*k^6,b^3*c^29*e^6*f^3*g*i^3*k^2,b^4*d^10*e^23*i^3*j^2*k^4,b^4*d^34*e^3*k^8,b^4*g^18*i^4*k^4,b^4*d^28*f*g^12,b^4*e^38*j^5,b^4*c^6*e^18*j*k^4,b^4*c^16*e^13*g^15,b^4*c^18*e^11*k^13,b^4*c^18*f^6*g^9,b^4*c^30*g^14*k^4,b^4*c^37*i*j^12*k,b^5*e^27*f^2*i^5,b^5*d^7*e^7*h^4*i^2*k^4,b^5*d^8*f^16*h^5,b^5*c*g^5*h^11*i^2*j^2,b^5*c^4*e^2*f^2*g^11*i^6,b^5*c^6*d*f^8*g^5*h^4*i,b^6*e^34*g^6,b^6*d^8*e^22*g^5*h^4*j^4,b^6*d^18*e^14*g^5*k^2,b^6*d^49*e*f^3*h^2,b^6*g^24*h^3,b^6*c^12*g^4*i^4*j^7,b^6*c^16*e^29*f^2*g^2,b^6*c^26*d^15*g^3*i*j^3*k^3,b^6*c^30*d^7*e^9*g*k^2,b^6*c^61*f^2*j^6,b^7*d^2*e^23*f*g^2*i^8,b^7*d^26*e^3*g*h^4*i^5*k^2,b^7*e^26*h^9*j,b^7*d^2*e^2*g^18*j^8,b^7*f^2*j^25,b^7*f*i^12*j,b^7*c^4*e^18*f^4*h^2,b^7*c^13*d^5*e^6*h^13,b^7*c^16*e^11*g^3*h*i*k^7,b^7*c^25*d*e^4*f^4*i^2*j^7,b^7*c^49*f^4*i^3,b^8*d*e^6*f^10*g^2*h*k^9,b^8*c^5*d^26*e^5*g^11,b^8*c^12*d^12*e^11*f*j^8,b^8*c^24*d^5*e^4*j^2*k^6,b^9*e^13*i^10*k^2,b^9*d^20*f^3*i^5*j^2,b^9*c^24*d^7*f^3*g^6*i^6,b^9*c^47*e^8*i*k^2,b^10*d^31*e^7*g*j^3,b^10*d^24*g^6*i^2*k^4,b^10*c*d^55,b^10*c^34*e^15*g^3,b^11*f^8*h*i*k^13,b^11*f^2*g^3*h^8*i*j^5*k,b^11*c^8*e^24*f*i^7,b^11*c^10*d^4*e^11*f^7*i^2,b^11*c^17*e^12*h^2*i^5*j^2,b^11*c^22*e^4*i^4,b^11*c^71*f^2,b^12*d^4*e^7*h^2*j^13,b^12*g^3*h*j^7*k^8,b^12*d^7*f^5*g^3*k^11,b^12*g^17*h*j^6,b^12*e^13*f^3*i^15,b^12*c^10*d^5*f*h^2*i^12,b^13*e^3*f^20*j^2,b^13*d^6*e^8*g^9*h^2*i^8,b^13*e^4*h^6*j^4*k^4,b^13*d^16*g^9*i^7,b^13*d*f^4*h^11*j^6,b^13*c*f^12*k^7,b^13*c^6*g^16*h*i^3*j,b^13*c^29*d^2*e^10*h^5*j^2,b^13*c^41*e^3*g^5*h^4,b^13*c^46*d^5*f*g^5,b^14*h^13*i^7*k^4,b^14*d^12*f*g^4*h^4*j^7,b^14*c^9*f*g^23*h^3,b^14*c^17*d^10*h^12*i^5,b^15*g^6*h^6*i^2*k^2,b^15*d^37*e^16,b^15*c^6*e^15*f^2*g^3*h^4*j^2,b^15*c^20*g^2*h^8*k^2,b^15*c^28*d^10*f^2*i^7*j,b^16*d^10*j^14*k,b^16*e^4*f^4*h^11*i^4,b^16*c^7*e^2*g^16*h,b^17*g^12*h^8,b^17*c^2*f*i^2*j^11,b^17*c^16*d^7*h^4*j^7*k,b^18*e^4*g^6*j^12,b^18*c^3*d^18*g^5*j^8,b^18*c^7*d^10*e^18*g^3*h^4,b^18*c^21*e^5*h*i^13*j,b^19*d^2*g^2*i^5*j^6,b^19*d^26*g*h^4*i^2*j^2,b^19*c^24*e*g^4*i*j^3,b^19*c^26*h*k^13,b^19*c^26*f^3*h^2*j^5,b^19*c^31*d*f^17,b^19*c^38*g^3*h*k^4,b^20*e^25*f^8*j^3*k,b^20*c*d^8*e^13*j^7*k^2,b^20*c^12*h^4*i^9,b^20*c^14*f^5*h^9*i^4,b^21*e^22*i^3*j^5,b^21*e^15*i^5*k^7,b^21*d^16*e^2*h^2*j*k^2,b^21*e^7*f^2*i^4*k^10,b^21*g^14*i^4,b^21*c*d^9*h*i^2*k^11,b^21*c*d^10*f^2*g^8*h^2,b^21*c^3*f^10*g*h*j^5*k^7,b^21*c^24*e^17*j^4,b^22*j^3*k^18,b^23*e^13*g,b^23*c^11*e^6*g^6*k^5,b^23*c^13*d^24*h^4,b^24*d^8*e^2*h^7*i^5,b^24*d*g^2*h^6*i^7*k^5,b^24*c^4*f^7*g*h*j^3*k^7,b^25*e^10*f^8*g^2*h^2*j^2*k^3,b^25*e^8*i^8*j^6,b^25*d^8*f^5*i^7*k^3,b^26*e^2*h^18*j^3,b^26*d^6*i^16,b^26*c^11*d^16*f^2*g^3*h^9,b^26*c^30*i^7,b^27*f^4*i^2*j^8*k^7,b^27*d^5*f^2*j^4*k^11,b^27*i*k^20,b^27*c^5*d^13*e^6*f*j^6,b^27*c^12*e^7*g^2*i^3*j^8,b^27*c^17*d^6*g^2*i^2,b^27*c^66,b^28*e^8*i^13,b^28*c^5*d^14*i^10,b^29*f^3*g^3*i^5*j^3*k^5,b^29*e^4*g^5*i*k^10,b^29*f^6*j^2*k^5,b^30*c^3*d^5*e^6*f^7*i^5,b^30*c^15*g^5*i^7,b^31*d^14*e^5*k^12,b^31*d^8*f^5*g^9*k^3,b^31*d^29*e^12*g^4*h^2*i,b^31*c^3*f^2*h^7*j^10,b^31*c^6*e^2*f^10*g^6,b^31*c^8*d^3*k^12,b^31*c^8*d^4*f^16*j^2,b^31*c^15*g^5*h^6*j^4,b^32*g^2*h^9*i^2*j^2,b^32*f^12*g^2*h^2*i,b^32*c^3*g*h^13,b^32*c^15*d^19*e^15*f*h,b^33*d^29*e^3*f^7*k,b^33*f^3*g*i^4*j^7*k^3,b^33*c^14*f*i*j^3*k^7,b^34*e^20*f^8*k^2,b^34*c*e^8*h^11*k^3,b^35*c^21*g*j^11,b^36*e^2*f^7*i^5*j^2*k,b^36*i^7*k^10,b^36*c^12*f^7*g^3*i^6*k,b^37*d^11*e^9*f^4*j^3,b^37*d^4*e^2*g^3*i^2*k^8,b^37*d^35*f^2*k^3,b^38*c^7*e*h^5*j^4,b^39*c^6*d^2*e*g^9*k^3,b^41*f^5*g*h^2*j^7*k,b^42*d*e^8*g^7*h^3,b^42*e^17*f^6*h^2*j^2*k^2,b^42*c^4*e*g^12*h^2*i^2,b^45*g^2*j^8*k^3,b^45*e^20*f^3*h^2*k^2,b^46*d^6*f^2*h^2*i^2*j^2*k^3,b^46*d^13*e^12*i^6,b^46*c^3*d^23*e^4*i^5*k^2,b^48*e^4*j*k^6,b^48*i^2*k^15,b^48*f^6*g^5,b^49*c^13*e^6*g*j*k^4,b^50*d^15*g*i^3*k^4,b^50*e^15*f^2,b^50*c*d^4*h^2*k^4,b^52*d^9*f*i^3*j^8,b^52*e^13*f^12*h,b^52*c^7*f*g^6*i^4*j,b^54*c^5*e*i^2*k^2,b^54*c^7*d^17*f^3*j^2,b^55*c^18*e^10*f^2*h*k^2,b^56*c^17*d*f^7,b^57*c^17*d^2*f*g*i^4,b^58*d^3*g^15,b^61*c^39*e*k,b^62*d^7*e^4*h^7,b^62*d^32*i^3,b^65*e^3*h^3*j^4,b^66*d^13*j*k^2,b^67*h^3*i^3,b^68*c^6*e*g^7,b^69*e^3*g^9*i^2*k,b^69*d^5*g^3*h^5,b^71*d^3*i^8,b^71*c^37,b^73*d^24*e*i*j,b^73*d^18*f^3,b^75*d^8*e^12,b^75*c^10*d*e^5*k,b^112*g^3*h,b^120*c^5*d^5,d^11*f*g*i^5*j^12*k^2,c^8*d^17*e^9*f*h^6*i^5*k^3,d^28*e^16*g^10*k,c^3*e^5*f^21*h^2*j^6,c^8*d^36*f^9*i^2*k^4,c^13*d^10*e^15*g^6*h^2*j^3,c^10*f^7*g^4*j^6*k^4,c^8*f^13*g^7*h^4*i^4,d^8*e^18*f^2*g^7*k^5,d^32*g^6*h*k^9,c^14*d^3*i^10*k^9,c^26*d^18*f^10*i^2,c^3*f^17*i*k^10,g^11*h^3*j^5*k^9,c^5*d^8*f*g^7*j^12*k^2,d^8*e^11*f^6*g*h^11*k,d^6*e^6*h^2*i^3*j^5*k^5,c*e*f*g^16*i^7*j^2*k,c^3*g*h*i^5*k^14,c^3*f^7*g^10*h^2*i^2*j^4,d^25*e^2*g^6*h^2*i^6*k^3,c*e^17*f^3*g^3*j^3,c^15*d^14*f*g^2*h^4*k^3,e^6*f^5*h^7*i^8,c^2*d^25*e^4*g^16*k,d^33*g^12*h^4*k,d^19*f^2*i^6*j^12,c^19*e^3*g^4*i^5*j^4*k,c^68*f*j^3*k,d^11*f^8*h*i^11*j^4,c^7*d^4*i^13*k,c^11*e^26*f^3*h^7,c^7*d^25*e^8*f^2*h^3*i^6,d^36*e^15*g*i,c^8*d^60*k,c^29*d^2*e^12*i^5*k^2,d^12*f^4*g^3*k^13,i^3*j^21,e^11*f^19*h^5,c^53*d^10*e^3*g^5*h^2,d^25*f^2*h^16,d^15*e*i*j^11*k^3,d^9*f*g^13*j^10,c^9*e^5*h^5*i^3*j^8,c^14*f^14*i^2*k^2,c*d^9*e^4*f^11*g^6*j,c^10*d^23*g^5*h^2*j^5*k,d^7*e*g^2*h^5*i^6*j^3,d^31*g*h^9*i^3*k,c^8*d^13*e^21*j^4*k^4,e^12*f^3*g^9*h^3*i^3*j,d^21*e^10*h^7*i*k^4,c^8*d^15*f*g^8*h^7,c^27*i^8*j^9*k,d^32*e^17*g^8*k^2,c^14*d^5*g^7*i^3*j^10,c^2*d^13*g^3*i^11*j^4,c^6*d^5*e^21*g*h^5,c^37*e^2*i^5*j^7,f^5*g^4*j^12*k^6,d^13*e^10*h^12*i^6,c^17*d^5*e^19*f^2*j*k^5,c^2*d^34*e^3*h*i^4*j^5,c^26*d^21*g^9*i^5,c^49*e^11*j^2*k^2,c^5*d^2*j^7*k^13,d^53*h*i^7,f^11*g^7*i^2*j^4,d^10*f*h^4*j*k^13,g^6*h^11*j^8*k,c^10*e^27*g^3*i^6*j,c^12*d^18*e^14*i*j^3,c^24*d^11*e^7*g^2*i^3,c^29*d^21*f^6*g^2*i^2*k^3,e^16*h*i^14,c^29*d^10*f*g^2*j*k^11,d^5*e^4*f^2*g^3*i^6*k^7,e^19*f^7*j^3*k^3,d*e^6*f^13*h^3*j^5,c^3*f^5*h^2*k^7,c^15*g^4*h*k^16,h^16*i^6*j*k^4,d^5*e^6*f^2*g^13*k^5,d^36*f^8*g^7*j^2,d^3*e^3*g^9*h^9*i*j^2*k^2,d^13*f^4*g^9*h^2*k^5,d^7*f^3*h^19*j,c*f^11*g^2*h^7*i^2*k,c^10*g*h^18*k^2,d^3*e^24*g^2*k^8,e^6*f^8*g^16,c^4*h^3*i*j^14,c^9*d^7*f^8*j^6,c^21*i^2*k^9,e*f^12*i^11*j^4,f^4*i^13*k^5,d^18*f^5*g^9*j^7,d^15*f^10*h^3*i^8,c^9*d^8*f^2*h^2*i^10*k^9,d^26*f^7*g^5*i^3*j,d^11*e^15*f^2*g^8*h^2*k^6,c^19*e^14*k^12,c^28*d^5*g*h^5*j^8,c^31*f^4*g^7*k^3,c^7*f^14*h*i^5,c^14*g^3*h^7*i^8,f^6*g^2*h^7*j^11*k^2,d^6*e^25*h*i^2*j^8,d^16*e^17*f^3*i*k,d^30*e^5*h^5*j^4*k^2,d^9*e^10*g^3*i^3*k^10,d^40*f*k^5,c*g^17*i^3*j,c^3*d^23*g^2*h^4*i*k^11,c^3*d^24*g^11*h^5*j^3,c^43*e^5*k^10,c^14*d^3*e^9*h^10*i*j,c^19*d^13*e*f^8*h^3*k,c^26*f^2*g^4*h^10,e^28*f^7*g^5,c*d^14*e^16*g^4*h^3*j^2,c^6*d^24*e^8*f^5*g^4,c^25*d^3*e^7*i^3*j^6*k^5,d^8*e^17*f^9*g*i^6,d^22*e^5*h^10*i^4,d^32*f^7*h^3*i^3,c^13*d^11*f*i^11*k^5,c^36*e^13*g^2*h^7*k,d^22*e^3*i^6*j*k^3,c^2*d^53*f^4*i*j^3,c^11*f^6*j^15,c^44*d*e^6*j^8,c^49*d^11*f*k^3,d^5*f^6*h^14*k^3,f^8*h^5*i^5*j^9,c^23*e^7*f^5*i^8,e^3*i*j^11*k^7,d^5*f^11*j^3*k^10,f^5*g^10*j^10,d^13*f^3*g^9*h^2*j^6*k^2,c^10*d^6*e^14*f^2*g^6*i^3,c^19*d^20*e^2*g^5*i*j^3,c^23*j^10*k^7,c^24*d^30*g^5*k,d^4*e^11*g^2*i^12*j,e^7*f^4*h^3*i^3*j^8*k^3,d^14*e^3*f^4*g^2*i^11,c^2*f^18*i^2*k^6,c^11*f^2*h^7*j^4*k^7,c^42*e^6*h*i^3,c^47*d^3*f^7*i^2,d^45*f^2*h^3*j^8,e^14*f*g^3*j^9*k,e^6*f^15*g^3*j*k^4,d^20*f^21*j^3,d^3*g^2*j^5*k^5,c^3*d^13*f^13*g^2*k^8,e^3*f^3*h^3*i^6*j^3*k,g^4*h^2*i^8*k^10,d^11*f*h^7*i^3*k^5,c^5*d^18*e^20*h*i^7*k,c^5*d^19*e^9*g^3*h^2*i^4*j,c^17*d^12*e^2*g^8*h*i^6,c^19*e^11*g*i^2*k^6,c^21*f^6*h^5*j^2*k,c^33*h^4*k^10,c^41*d*i^13*k,d^22*g^12*k^3,d^60*e^14*g^2,c^8*e^5*f^3*g^9*j^3,c^10*d^18*f^9*g^3*h^3*j^5,c^22*d^11*f*g^8*h^2*k^3,d^6*f^2*g^9*h^3*i^9,e^14*f^7*g^6*h*i^3*j,d*e^12*h^5*i*k^8,d^2*e*f^13*h^6*j^3,d^32*f^3*h^10*k^3,e^2*g^5*h^12*i*j^5,e^7*g^11*i^5*k^4,f^5*g^5*h^5,d^12*e^19*g^5*k^6,d^43*e^6*h^3*j*k,d^6*e*f^2*g^19,d^30*g^18*h^2*k,d^6*h*j^20,c^2*g^4*i^3*j^10*k^3,c^4*d^16*f^2*j^12,c^7*f^10*g^4*i^2*j^2*k^6,c^20*d*e^14*g*k^6,d^20*e^8*g*h^5*i^4*k^6,e^43*f^3*i,i^11*j^4*k^3,e^23*f*h^3*k^2,d^16*e^10*f^7*h^8,c^3*e^11*h^14*k^3,c^3*f*g^6*h^15*j^5,c^4*d^17*i^8*k^7,c^8*d^9*e^3*h^7*k^6,c^15*e^9*f*i*j^10*k^3,c^18*f*g^17*h^2*k^2,c^39*f*i^2*j^3*k^3,d*h^3*i^19*k^3,d^35*f*g^8*i*j^7,e^30*g^12,d^27*e^17*f^4*g^6*h,c^2*d^6*e^16*j^11*k,c^13*f^5*h*i^13*j,c^14*f^6*g^5*j^10,c^26*g^10*j^4*k,d^4*e^19*g^8*h^3*i,d^14*e^5*i^4*j^5*k,f^2*g^7*i^8*j^2,c^2*d^7*i^6*k^10,c^2*d^8*f^8*g*i^3*j^4,c^4*d^38*h^3*i*j*k^5,c^14*d*g^6*i^5*k,c^37*e^13*j^2*k^6,c^39*d^3*f^3*h*j^4*k,c^51*k^10,d^25*e^12*g*j^6,d^49*j^2*k^3,c*e^11*h^19*i,c*d^12*g^20,c^6*d*e^3*f^5*h^12,c^38*d^7*g^2*k^8,d^2*e^14*g^3*i^12*k^4,d^33*e*i^7,f^21*h^3*j^6,e^29*i^6*j,e^16*f^4*i*j^3,c^5*d^8*e^8*f^18,c^12*e^9*i^3*k^4,c^12*f^12*g^8*j^2,c^14*d^22*f^2*h,c^17*d*e*f^10*i^2*k^7,c^26*d^15*k^8,b*d*f^2*g^3*j^2*k^15,b*e^18*i^14,b*d^6*e^5*f^6*h^4*i^9,b*d^2*e^16*g^13*k^2,b*h^3*i^11*k^4,b*c*d^33*e^3*g^7,b*c^3*d^64*f^5*g*j^2,b^2*d^48*f^9*h^2,b^2*e^13*g^9*h^3*i^7,b^2*d^31*g^3*h^8*i^2*j^2,b^2*d^10*e^5*g^9*i^6*k^2,b^2*d^41*f*g^3*h*i,b^2*e*f^9*k^11,b^2*f^3*g^10*h^7*j^6,b^2*c*d^34*g^8*i^3*k^6,b^2*c^3*f*g*k^20,b^2*c^12*d^12*e^25*k^2,b^2*c^19*e^15*h^6*j^5,b^2*c^22*e^20*g^6,b^2*c^31*e^8*g^5*h^5,b^2*c^36*g^5*k^2,b^3*d^6*e^3*g^4*h^5*j^10*k,b^3*d^4*i^20*j^4,b^3*c^7*d^4*e^4*h^13*i^4,b^3*c^10*e^9*f^2*g^2*h*i^8,b^3*c^12*d^14*f^8*h^6*i^3,b^3*c^19*g*h^12*i^6,b^3*c^24*d^7*g*h^5*i^5*k^2,b^4*e^4*f^16*g*h,b^4*e^5*g^6*h^7*i*j^2*k^6,b^4*d^14*h^12*j^4*k,b^4*e^16*g^16*i^3,b^4*f^16*i^2*j^7*k,b^4*d^25*e^3*f^5*g^10,b^4*c^3*f^19*h^3,b^4*c^11*d^18*g^15,b^4*c^18*d^4*e^2*i^6*j^4,b^4*c^30*i^8*k^6,b^5*e^9*f*h^12*i^3*k^2,b^5*e*f^15*h^5*i^2*k^5,b^5*h^16*k^6,b^5*d^14*g^10*h^7*j^4,b^5*c^4*e^4*i^19*k^2,b^6*e^2*h*i*j^14*k,b^6*c^6*d*h^5*j^10*k^5,b^6*c^7*d^47*g^4*i^6,b^6*c^11*d^11*f^10*j^2*k^8,b^6*c^37*d^2*e*g*i*j^6,b^7*d^19*f*j^17,b^7*e*f^9*g^6*j^7*k^2,b^7*c^8*f^3*g^5*h^14,b^7*c^16*e^2*f^5*i^11,b^8*g^2*h*i^4*j^9,b^8*e^32*h^8*j,b^8*d^6*f^11*g^2*i^3*j*k^2,b^8*d^12*e^12*h^12*k^2,b^8*d^44*e^14*i^2,b^8*c^2*e^13*f^2*j^12,b^8*c^5*d^37*e^7*i^4*k^2,b^8*c^7*e^5*f^16*j^4,b^8*c^14*e^6*g^4*j^6*k^4,b^8*c^16*h^3*j^8,b^8*c^19*f^8*g^4*k^7,b^8*c^21*f^14*k^2,b^9*e^2*f^4*h^6*i^6*j^6,b^9*f^18*i^5,b^9*c^2*h^5*i^8*k^4,b^9*c^3*g^12*j^9,b^9*c^4*f^2*h^10*i^3*j^2,b^10*e^27*i^2*j^8*k^2,b^10*d^20*f^5*k^9,b^10*d^4*g^8*h^3*j^3,b^10*d^13*k^18,b^11*c^2*e^11*h^8*i*j*k^2,b^11*c^12*e^6*g^7*h^3*i^5,b^12*e^18*g*h*j^2,b^12*d^4*e^10*f^9*g*k^3,b^12*c*e^11*g^6*k^9,b^12*c^13*g^20,b^12*c^34*j^9*k,b^12*c^38*e^13*h^3*j,b^13*d^2*e^7*h^8*i^4,b^13*c^12*e^22*f^2*h^6,b^13*c^24*e^15*h^5*k^5,b^13*c^26*e^2*h^10,b^14*c*d^9*e^16*f^5*g^2*h^4*j^2,b^14*c^9*d^10*g^9*i^3*j^4,b^14*c^13*d^2*e^9*g^7*h^3,b^15*g^6*i^14*j^2,b^15*e^6*g^3*h^17,b^15*c*d^10*g^3*h^10,b^15*c^8*e^4*f*h^2*i^4*j^8,b^15*c^20*h*i^6*j^2*k^4,b^16*j^7*k^15,b^16*e^6*h^4*i^17,b^16*d^7*e^11*j^9,b^16*e^16*f^6*g^3*i^3*k,b^16*c^7*e^4*g^2*i*j^3*k^2,b^16*c^9*d^31*j^5,b^16*c^12*d^10*f^4*g^2*k^5,b^16*c^56*j^2*k^2,b^17*e^13*i^12*j,b^17*d^15*h^2*i^7*j^3,b^17*e^5*f^8*i^11*k,b^17*d^8*h*i^9*k^2,b^17*c^30*e^8*i^3,b^17*c^32*d^4*f^3*h^4*j^2,b^18*d^19*g^12*i^4,b^18*f^3*j^5*k^9,b^18*c^19*d^15*e^2*g^3*j^3,b^18*c^31*d^8*g^8,b^19*e^11*f^4*i^4*j,b^19*d^29*e^9*h^4*i^2,b^19*d^9*e^3*f^18*i^3,b^19*c^5*e^4*g^5*i^6,b^19*c^7*d^23*f^2*h^4*i,b^19*c^10*d^2*f^10*g^5*i^5,b^19*c^19*d^16*g^4*h^3*i^3,b^19*c^54*g*h,b^20*d^2*f^2*g^9*k^7,b^20*d^3*e^11*g^19*i,b^20*g*h^6*i^14,b^20*f^13*h*j^5,b^20*c*d^17*g^18*h^3,b^20*c^10*f^5*g^5*k^7,b^21*f^9*g^2*h^3*k^3,b^21*g*h^14*j*k^4,b^21*i^17*j^2,b^21*c^5*d^13*e^20*h^2,b^21*c^17*d^6*e^13*h*i*k^3,b^21*c^17*d^7*e^2*f^6*g^6*h^2,b^21*c^29*g^11*h,b^22*j^20,b^22*c^4*j^6*k^11,b^22*c^16*h^19,b^23*i^8*k^11,b^23*c^3*g^8*h^12,b^23*c^11*d^5*g*i^9*j^2,b^23*c^60*f^2*j,b^24*c^2*f^10*g^2*j^10,b^24*c^11*g*h*j^14,b^24*c^14*f^2*g^7*j^4*k^5,b^24*c^16*d^4*f^8*g*j^6,b^25*f^12*i^3*j^4,b^25*d^2*h^8*i*j^8,b^25*c^2*f^4*g^3*i^5*k^5,b^25*c^4*d^12*f^10*h,b^26*d^5*e^14*f*j^6*k^3,b^26*e^7*g^3*i*k^12,b^26*d^29*j^2*k^7,b^26*f*g^17*k^3,b^27*d^13*e^3*f^3*i^7*k^3,b^27*e^6*h^6*j^7,b^27*e^11*i^3*k^8,b^27*c^2*d^2*f^6*k^3,b^27*c^7*e*g^10*h*i^3*j^4,b^27*c^14*k^12,b^28*d^13*e^5*f^3*g^4*k,b^28*g^18*j^7,b^28*c^38*d^2*f^6*k,b^29*d^11*e^2*h^6*i^2*j^2,b^29*d^21*f^5*i*k,b^29*c^12*e^9*f^10,b^29*c^26*d^10*f^8*h*k,b^30*f^12*h^4*i^3,b^31*d*e^31*h^4*j*k,b^31*d^5*e^5*f^9*g^7,b^31*e^6*g^12*h^3*i*k,b^31*f*g^12*k^4,b^31*c^15*i^4*j^8*k^2,b^31*c^18*i^8*k^10,b^31*c^20*d^8*f*i^3*k^5,b^32*c^7*d^19*g^5*j*k^3,b^32*c^19*h^13,b^33*d^17*g*i^7*j^3,b^33*d^19*e^14*f^3*k^2,b^33*c^25*e^3*i*j^6,b^33*c^30*f^5,b^35*f*i^4*j^9*k^3,b^35*d^8*e^6*g^3*i^2*j^7,b^35*d*g^8*i^4*j,b^37*f^3*g^5*h*j^3*k,b^37*d^8*f*g^4*h^5*k^5,b^37*c^12*d^15*e^8*k,b^38*g^19*j^4,b^38*e^17*h^2*i^10,b^39*d^9*e^5*g*h*i^2*k^8,b^39*e^2*f^7*g^12*j,b^39*c*g^17*k^4,b^40*d^14*e^15*h^5*i^2,b^42*c^8*i^6*j^2*k^8,b^43*d*e^7*g^14*h,b^43*e^6*i*j^3*k^6,b^43*d^11*j^5*k,b^43*f^8*k^9,b^43*c^9*d^4*k^10,b^44*i^9*k^6,b^44*d^19*f^2*h^4*i^4*k,b^45*d^30*g^3,b^45*c^7*e^4*f^4*j^3,b^46*e*h^9*i^2*j^5,b^46*d^3*f^6*h^2*i,b^46*c^2*g*h^8*i^4*k,b^46*c^7*g*h*i^3*k^4,b^46*c^42*e*f^3,b^47*e*g^15*h,b^48*e^22*f^2,b^48*c^17*f^2*g^8,b^51*d^26*e^4*i^2*k^4,b^51*j^14*k,b^51*c^3*e^15*h^4*i^6*k,b^54*d^8*e^12*i^8,b^54*d^18*e^4*i^7,b^54*c^30*e^7*h^2,b^55*e^7*f^7*g*k^5,b^55*d^7*h*j^4*k^6,b^56*e^4*h^4*i^2*j^2*k^2,b^56*c^9*h^6*j*k^2,b^57*e^6*g^7*j^2,b^58*g^3*h^6,b^61*c*h^2*i^9,b^62*d^12*j^3,b^62*c^2*d^5*g^4*i*k^2,b^62*c^37*g,b^63*c*e^10*h^5*i^2*j,b^64*d^2*e^17*j^2,b^64*e^10*k^5,b^64*f^4*g^6*j,b^64*c^2*d^26*h^2,b^67*e^10*h^2*i^4,b^72*d^10*f^3*k^3,b^76*e*g^13*h^2,b^83*e^5*g^3*i^2,b^83*d^6*f^2*g^3*i,b^97*c^18,b^106*c^8*i,b^110*d^7*h^3,c^8*e^25*f^2*g^3*h^5*i*k,d^30*e*f^6*i*k^8,d^12*e^9*g^2*h^10*i^7,f^4*g^4*j^9*k^8,d^10*e^14*f*g^13*k^7,c^16*d^12*f^7*h*i*j^3*k^2,d^31*f^6*g^5*h*i^4,c^44*d^2*f^6*g^3*i^3*j^2,c^9*d^58*f^3*i^2,f^4*g^10*h^3*i*j^7,c^5*d^8*e^2*g^2*h^5*j^2*k^7,c^15*g^22*k^3,e^15*f^3*i^2*j^13,c^11*d^21*f*j^9,h*i^12*j*k^5,d^40*g^8*i^2*j^4,c^9*d^13*f^7*g*h^4*i^4*j,d^54*h*k^5,c^7*d^3*e^24*f^3*h^2*i^2,d^46*g^3*h^6*i^2,d^19*h^17*j*k^3,c^25*d^9*e^10*i^7*j,c^4*e^2*f^11*i*j^3*k^6,c^5*d^27*f^6*g^5*k^8,d*e^6*g^2*h^6*i^5*j^6*k,d^11*f^10*g^2*i^4*k^4,c^11*f*h^15*i^4*k,d^9*g^8*h^8,d^7*g^3*i^10*j^7*k^3,e^26*g*h^6*k^2,c*d^9*e^18*f^8*g*k^5,c^8*e^8*f^2*g^15*h^6,c^15*h^4*i^12*j^4,c^4*d^22*f*g^4*h^2*i^2*j^7,c^51*g^6*j^4,g^6*h^4*i^15,c^8*d^15*e^6*g^3*h^15,c^2*d^12*e^19*j^6,c^14*d^5*e^12*g^2*i^2*k^4,c^14*d^6*e*f^5*g^11*j^5,c^26*g^16*i,e^21*h^2*i^13,d^55*g^6*h^4,e^4*f^2*h^3*j^2*k^11,d^4*e^19*f^3*h^5*i^5,c^12*e^12*g^5*h^4*i^7,d^7*f*g^9*h^3*k^9,c*d^11*f^9*g^2*i*j^10*k,c^5*d^3*e^2*f^12*h^6*j^2,e^4*f^8*g^2*h^8*i*k^5,d*f^5*j^9*k^4,c^11*i*j^3*k^13,f*i^12*j*k^9,c^67*f*i,d^20*f^4*g^5*i^2*j^4*k^2,c^9*e^8*f^9*g^2*j^7,c^18*g*h^6*j^11,c^23*d^9*f^7*g*j^3*k^2,c^35*d^2*g^6*k^11,f^11*h^2*i^4*j,c^9*f^3*g^3*h*i^6*k^7,d^10*e^22*j^3*k^5,d^34*e^2*k^9,d^18*g^11*h^6*j^6,g^17*i*k^5,d^28*f^6*g^11,e^26*f^7*i^2*k,c^4*e^14*h^11*j^4*k^2,c^9*d^7*e^6*f^5*h^4*k^5,c^16*g^4*h^11*j^3,d^8*e^21*g^4*h^4*j^5,d^18*e^13*f^2*g^4*k^3,d^49*f^8*h^2,c^10*d^42*g^3*h*k^7,c^15*g^23*h^3,d^2*e^22*f^6*g*i^5,d^16*e^10*h^11*i^3,d^26*e^2*f^4*h^4*i^2*k^3,c^28*d^5*e^5*h^13,c^39*d^5*e^3*j^3*k^7,e^2*f^3*h^15*j*k^7,e^21*g^7*h^9,c^3*d^24*e*g^6*h^13,c^6*d^3*e^6*g^12*h*i*k^6,c^13*e^12*f^2*i^7*j*k^3,c^15*d^20*f^8*i^2*j^3,c^27*d^13*i^4*k^7,e^19*g^6*i^2*j^2*k,c*e*f^4*i^15*k^3,c^2*d^31*e^6*f^5*j^4,c^9*d^14*e^7*g^5*j^6*k^2,c^14*d^24*g^5*k^5,c^16*d^55*f^3,d^39*f^7*i^5,c*h^8*j^7*k^11,c^4*d^63*f^5*h^2*i^2,c^32*e^11*h^2*i^2*j^3,c^37*e^3*f^4*i*k,d^4*e^6*f^4*h^2*j^14,g^2*h*j^8*k^9,d^7*f^10*g^2*k^12,c^33*d^22*g^11,c^2*d^53*e^4*f*k^3,c^4*e^2*f^25*j^3,c^7*d^6*e^7*g^8*h^2*i^5,c^9*d^37*g^2*h^7,c^11*e^3*f^3*h^6*j^5*k^5,c^12*d^16*f^3*g^8*i^4,c^56*e^2*g^4*h^4,d^12*f^6*g^3*h^4*j^8,c^12*d^5*g^8*h^3*j^2*k^7,e^4*g^9*h^4*i^8*j*k^3,d^6*f^24,f^2*g^5*h^6*k^3,d^20*f^8*h^11*j^2,f^16*g^5*k^6,c^5*e^25*f*g^10*h*j^2,c^10*d^6*e^28*g*i^2*k^2,e^6*g^19*j*k,h^2*j^23,c^10*e^19*g*h*j*k^10,c^22*e*f^2*g^15*h*k,e*f^3*i^8*j^13,i^10*j^7*k^7,d^18*f*h^2*i^5*j^9*k^2,d^10*e^15*f^4*h^9*j*k,e^10*f^6*g^12*h^4,c^17*f^6*j^12,d^21*e^22*f*g^6*h^2*j^2,d^18*e^4*f^6*h^16*k,d^8*f*g^25*h,d^29*e^11*f^3*g^2*h^9,d^2*f^5*g*i^2*j^7,c*d^16*h^11*j^11,c^4*g^6*i^4*j*k^5,c^6*d^26*f^3*h^4*j^3,c^39*f^2*g^3*j^4*k,c^53*g^2*h*k^5,d^10*f^7*h^7*i^10*j,d^43*j^5*k^7,d^3*g^2*h^6*i^12*k^5,e^8*f^2*h^13*k^4,c*d^5*f^16*h^6*k^7,c^11*d^11*g^7*h*i^13,e^21*f*j^6,d^6*e^9*h^9*j^10,c^2*e^14*i^2*k^8,c^4*d^16*e*h^2*j^2*k^3,c^14*f*g^13*i,c^16*d^9*h*k^12,c^16*d^10*f^7*g^7*h^2*j,c^28*d^3*g^12*h*k^3,e^10*f^3*h^5*i^8,e^3*h^4*i^10*k^8,d^27*e^8*g^7*j^3*k,c*e^3*g^27,c^27*e^5*f^6*h^7,d^35*g^3*h^2*k,g^23*i^4,c^10*d^8*g^2*i^7*j^8,c^14*e^12*f^3,c^26*e^5*g^5*k^6,c^28*d^24*f*h^4*k,e^9*h^14*i^3*j^2,e^14*g^2*h^2*i^7*k^2,c^2*d^8*e*f^5*h^7*i^2,c^7*d^18*f^19*i,c^9*e^2*g*h^13*i^5*k^3,c^21*i^10*j^6*k^3,d*e^46*i,d^19*e^8*f^2*g^10,e^4*f^16*h^4*j^2*k^4,d^2*e^9*g^15*h^6*k,c^3*d^43*g^9*h^4,c^8*e^7*i^5*j^7*k,c^10*d^29*f^2*j^9,c^13*d^8*f^10*i^4*k^4,c^20*i^7*j*k^10,c^57*e^2*j^6*k,h^17*k^10,d^6*i^13*j*k,e^30*f*h^5,c^12*e^12*f^9*g^3*h^5,c^21*d^6*g^2*h^16,c^45*f*i^4*k,d^2*f^15*g^7*h^4*k^2,d^17*e^3*g^5*i^8*j^2,d^2*f*h^7*j^19,d^48*f*i^3*j^4,d^31*g^4*h^2*i^6*j^6,d^41*g^4*i^5*k^3,f*i*j^3*k^17,c*d^5*f^7*j^5*k^12,c^13*f^15*g^5*j^4*k^3,c^18*e^18*g^2*i^2*j^5,c^20*d^13*e^5*f^6*j^7,c^27*e^6*g*j^9,c^32*d^6*g*j,f^3*g^3*h^18,d^13*e*j^20,e^25*i^11*k^4,d^27*e^12*h*i^6*j^2,c^6*e^7*f^2*i^10,c^15*d^4*h^7*i^8*j^3,c^20*d^14*i^7,e^3*g^2*h^2*i^3*j^12*k^3,f^8*g^2*i^2*j^4*k^6,d^24*f^6*g*k^10,e^18*j^15,e^9*i^23,d*e^14*g^12*i^5,f^4*h^3*i^18,d^32*e*f^5*g^6*j^2,e^10*f^13*j^7*k^2,d^62*k,c^2*d^15*e^2*g^11*i^3*j^4,c^6*h^4*j^11*k^3,c^7*d^25*g^11*i^2,c^11*f^11*j^3*k^6,f^15*i^4*j*k^2,d^4*f^21*h^5*j^3,h^11*i^2*j^5*k^3,f^7*i^6*k^11,f^13*h^4*i*k^6,c^6*d^11*e^23*f^4*i^3,c^18*d^4*e^16*i^5*k^2,c^18*d^5*e^5*f^12*i^2,c^30*f^4*g^4*i^4,e^6*f^12*g^9*j^2,d^14*e^4*f^2*k^13,g^8*h^4*j^6*k,d^22*e^30*f*j,c^5*d^15*e^23*g^4,c^17*d^9*e^5*f*g^18,c^19*d^39*e^3*g^3*k^4,c^30*g^4*h^6*j^5*k,d^6*g^4*h^11*i^5*k,e^17*f*g^2*h^18,d^8*e^3*f*h^14*j^6*k,c^2*e^11*g^7*h^4*i^4*j*k^2,c^4*f^3*g*h^9*j^3,c^9*e*f*h*i*k^18,c^18*f*h^13*k,c^24*i^15,c^28*e^27*i^2,c^42*d^12*e^7,b*e^23*g*h^2*j^5*k^4,b*e^15*f^6*g*k^7,b*d^12*e^3*h^6*j*k^8,b*f^14*g^15,b*d^22*f^4*k^11,b*c^5*d^6*g^14*h^6,b*c^15*f^8*i*j^8*k^4,b*c^29*f^6*j^4*k^8,b^2*e^12*h^9*i^3*k^4,b^2*d^27*h^14*j,b^2*f^2*g^11*h^9*i^2,b^2*g^2*h*i^4*k^16,b^2*f^16*g^11*h^2*i,b^2*i^10*j^10*k,b^2*c^2*e^27*h^7*j^2,b^2*c^16*e^7*h^11*k^4,b^2*c^31*d*i^8*j^8,b^3*d^11*g^4*j^13,b^3*d^3*e^21*f^2*g^2*h^5*j^5,b^3*c^3*e^14*g^7*h^4*k^2,b^3*c^5*d^27*e*g*h^9*j,b^4*e^23*g^4*h^7,b^4*d^11*e^10*f^4*h^12,b^4*e^15*f^12*g^4*k,b^4*d^4*e^3*g^3*h^11*k^2,b^4*e^9*h^3*i^3*j^11,b^4*c^3*e*f^12*i^2*j^3*k^2,b^4*c^8*e^4*g^3*i^7*j^8,b^4*c^13*f^14*g^3*i^6,b^4*c^22*g^2*h^2*i^4*j^4,b^4*c^27*f^12*g^2*i^3*k^2,b^4*c^57*f^3*j^7,b^5*d*e^16*j^12,b^5*d^11*e^8*f^9*j^4,b^5*f^2*h^5*i^15*j^2,b^5*e^9*g^2*j^6*k^6,b^5*f^3*g^11*j^11,b^5*d^25*j^8*k,b^5*c^2*d^4*e*f*g^2*k^9,b^5*c^4*d^35*f^7*k^4,b^5*c^9*g^16*j^5,b^5*c^11*d^18*g*j^2*k^10,b^5*c^14*e^7*f^3*h^16,b^6*d^2*h^2*i^8*k^6,b^6*d^3*f^5*g^7*h^3*i^5*j^5,b^6*d^27*f^3*g^6*h^7*i^2*j,b^6*c^20*e^13*i^2*j^3*k^2,b^6*c^22*h^5*j^5,b^6*c^34*h^4*k^6,b^7*c^9*d^9*e^7*g^3*j^6,b^7*c^21*d^2*g^8*k^4,b^7*c^58*e^2*j^5,b^8*e^16*f*h*i^3*j^4,b^8*d^3*e^8*f^15*i^2,b^8*e^9*g^5*i^5,b^8*d^17*h^5,b^8*e*f^7*g^5*i^4*k^3,b^8*c^4*g^4*h^11*i^3*j^2*k,b^8*c^9*d^10*g^4*h^4*i^2*k^4,b^8*c^30*e^24*g^2*j,b^8*c^44*e^4*g*h^2,b^9*g*h^7*i^13,b^9*f^10*h^2*j^8*k^2,b^9*f^2*g^5*h*j^2*k^11,b^9*c^3*d^7*e^2*i^3*j^13,b^9*c^8*e^18*h^10*i^3,b^9*c^8*d^17*f^4*i^2*j^5*k^2,b^9*c^18*e^13*h^5*i^7,b^9*c^20*f^6*h^10*i^2,b^9*c^32*h^9*i^4,b^10*d^7*e^25*h^3,b^10*c^7*d*e^7*f^3*g^6*h^3,b^10*c^19*g^11*h^2,b^11*c^15*d^22*j^13,b^12*g^8*h^13*j^2*k^2,b^12*g^2*h^18*j^4,b^12*c*e^2*g*i^8*j^5,b^12*c^3*d^30*f^2*i^3*j^7,b^12*c^15*d^23*i^5*j,b^13*d*e^24*f^5*g^3*j^2*k^3,b^13*d^7*h*i^16,b^13*c*g^2*i^18*k^2,b^13*c^4*g^7*j^7*k^9,b^13*c^5*e^18*h^7*i^5*k,b^13*c^10*d^2*e^10*f^7*i^4*k^4,b^13*c^16*e^4*f*g*h^18,b^13*c^36*i^12,b^14*f^9*i^2*j^7,b^14*h^9*j^11*k,b^14*f*g^3*i^4*j*k^9,b^14*d^6*f^7*h^2*j^3*k^4,b^14*c^4*e^23*f^6*i^5,b^14*c^6*g^2*h*i*k^13,b^14*c^13*d^13*e^11*i^3,b^14*c^25*d^7*g^7*i^2,b^16*d^32*e^7*g^3*i^6,b^16*e^16*i^2*k^12,b^16*d^63*h*i,b^16*e^3*f^3*j^2*k^7,b^16*d^42*f^3*g^3*i^5*k,b^16*g^4*h^7*j^9,b^16*c^2*f^5*g^10*i*k^3,b^16*c^4*k^16,b^16*c^4*f^11*g^4*j,b^16*c^23*e^22,b^17*c^11*d^5*e^11*h*i^8,b^18*d^15*f^2*k^5,b^18*d^8*g^5*i^2*k^14,b^18*d^9*f^10*g^14,b^18*f^4*i^7*j^8*k^2,b^18*d^47*e^5*g^4,b^18*c^2*e^14*f^7*k,b^18*c^14*e^7*g^2*k^10,b^18*c^16*d^4*f^5*h^2*k^5,b^19*e^3*f^9*h^5*i^2*k,b^19*d^2*h^16*k^2,b^19*c^3*d^15*e*f^2*g^10*k^3,b^20*e^10*f^6*g^7,b^20*d^13*g^6*h^9,b^20*d^9*f^6*j^9,b^20*c^10*d^2*i^2*j^3*k^9,b^20*c^22*f^6*g^5*i*j^2,b^21*d^7*f^8*g^3*h^5*i^5,b^21*d^20*e^3*f^3*j^10,b^21*d^13*g^5*j^4*k^7,b^21*c^9*e^2*h^14,b^21*c^14*f^11*h^7,b^21*c^33*f^5*i^4*k^5,b^22*e^5*g^2*i^8*j^2*k^3,b^22*d^28*f^5*i^3*j^4,b^22*d^13*e^19*k^6,b^22*c*d^7*e*f^8*g^13,b^22*c^8*e^7*f^10*j^7,b^22*c^20*f^2*j*k^3,b^22*c^29*h^2*j^5*k^4,b^22*c^34*d^10*k^7,b^23*d^5*g^9*h^14,b^23*e^4*h^6*i^6*j^9,b^23*e^9*f^6*i^10,b^23*d*f^12*i^5*j,b^23*c^3*h^5*i^8*j^3,b^23*c^7*e^7*g^12*j^2*k,b^24*e^4*g^8*i^3*j^4,b^24*d^5*f*g^8*i^2*k,b^24*c^4*d^19*g^7*h^2*k^2,b^25*c^15*h^8*j^3,b^25*c^18*f^8*g*i^4,b^25*c^32*d^2*f^6*i*k,b^26*d^16*e^20*h*j^5,b^26*d^26*e^12*f^3,b^26*c^2*d^9*e^13*k^5,b^26*c^2*d^10*e^2*g^9*h*j^4,b^26*c^7*d^19*e^5*k^8,b^26*c^14*d^3*g^14,b^27*f^7*h^7*j^3*k,b^27*f^21*k^4,b^27*c^12*f*i^15*k,b^27*c^25*e^17*h^5*k,b^27*c^30*e^9*f^2*k^4,b^28*f^2*g^11*h^4*k^3,b^29*d^2*e^2*f^3*g^12*h^6,b^29*c^5*d^11*e^5*f*g^3*i^2*k^2,b^30*d^7*e^3*f^4*h^7*j*k,b^30*d^8*e^18*i^3*j^2,b^30*c^13*d^32*k,b^31*c^10*f^2*i^4*j^4*k^3,b^32*d^5*j^8*k^5,b^32*g^13*j^5*k,b^32*j^2*k^14,b^32*f^5*g^7*j^7,b^33*i^8*k^10,b^33*d^13*h^5*i^3*j^2*k^5,b^33*f*g^9*i^7*k,b^33*g^8*h^4*i^4*k^5,b^33*c^6*d^14*e^6*i^6,b^33*c^10*e^2*f^4*h^3*j^5*k,b^34*e^9*f*j^6,b^34*c^11*d^13*j^2*k^3,b^35*d^8*e^3*h*i^9*j,b^35*f^3*h^3,b^35*c^32*e^6*k^4,b^36*d*g^15*k^6,b^36*c^21*f^3*g^6,b^37*e^27*h*k^2,b^37*c^7*e^2*g^8*k^2,b^38*f*g^4*h^7*i^7*k^2,b^38*c^15*g*j^7*k,b^39*d^6*e^23*h*i,b^39*g^18*i^2,b^39*c^3*d^3*i^5*j*k,b^39*c^7*e^18*f*h^3,b^41*c*e^2*f^10*j^5,b^41*c^3*d^24*j^2,b^41*c^13*f^2*g^4*i^2,b^41*c^15*d^18*f^8*j,b^41*c^22*d*g^3*h^5*j^3,b^43*d^12*e^9*i^6*k^2,b^43*f*g*h^5*j^9,b^43*c^13*d^8*e^11*f^4,b^43*c^25*d*e^4*k^2,b^44*e^13*i^8,b^45*e*f^6*k^9,b^45*d^20*g^6,b^46*d^16*g*h^5*j^7,b^47*g^3*h^7*k^4,b^47*c^31*d^14*j,b^48*e^4*f*h^12,b^50*h^8*i^3*j^5,b^51*d^6*h*j^6,b^51*g^4*k^6,b^52*c*e^10*h*i^5*j,b^52*c^17*d^3*f^2*h^10,b^53*e^4*f*g^6*j^4,b^53*c^2*g^11,b^55*d^12*i^3*j^7,b^55*c^2*d^4*e^13*h,b^56*d^12*e^2*h^8,b^57*c*d^12*f^2*k^5,b^58*d^4*g^3*i^8,b^59*c^11*e^11*f^6,b^60*e^8*i^6,b^60*c^8*d^18*h*i^3,b^61*d^4*j^3*k^7,b^62*f^7*h*k^3,b^62*c^6*d^9*e^6*f^4,b^62*c^18*d^2*g^2,b^68*d^4*e^2*f^4*j^2*k^3,b^68*c*f^6*g*i^2,b^68*c^10*h^3*j^3,b^70*c^13*e^6*k^6,b^72*e^10*g^3*h*i*k,b^72*e^2*g^3*k^4,b^74*c^19*f^3*j,b^80*d^5*g^6*i*j,b^80*f^3*g^2*h,b^89*c^6*e,b^99*d*h^4,b^105*c*g^2,e*f^3*g^10*h^8*i^2*j^4*k^2,c^18*d^26*e^3*h^4*j^6*k^2,f^10*g^3*i^5*j^11,c^6*d^6*e^5*f^4*h^2*j^6*k^6,c^4*e^5*f^10*h^7*i^5,c^23*e^4*g^4*h^16,c^34*e^2*f^3*g^3*i^2*j^5*k^2,c^22*d^4*f^5*i^10*k^2,c^9*d^15*f^2*g^13*i^5,d^12*f^9*g^2*k^14,e^7*f*g^5*h^11*k^5,c*d^15*j^12*k^4,d^34*g^8*i*j^7*k^2,c^11*e^11*f^2*g^5*j^10,d^7*f^4*g*h^5*i^3*j^4,c^11*g^6*h^4*i^5*k^7,e^29*h^3*i*j^3*k,c^21*d^5*e^20*f^2*h^5,d^53*h*i^4*j,c^6*i^2*k^19,c^25*e^26*g^2*i^3*j^2,c^39*d^11*e^6*g*k,d^21*f^3*g^5*j^3*k^12,c^13*e^15*f*h*i^11,d^5*e^3*f^7*g^2*i^3*j*k^8,c*h^16*i^3*j^2*k^5,d^3*e^2*g^8*h^9*j^3*k^3,c^11*e^6*f^2*g*h^14,c^19*h^3*j^15,c^31*h^2*j^9*k^7,d^26*f^12*g^4*j^2,c^22*f^19*h*i^2,d^6*e^24*h*j^9,c^9*d^9*e^9*g^2*k^11,c^16*g^16*j^2,e^24*h^6*i^4*j,c^2*e^17*g^5*h^5*i^6*k^2,c^4*d^22*e^4*h^10*i,e^2*f^2*j^12*k^8,c^8*d^4*e^10*g*i^9*j^2,c^10*d^35*f*h^4*i^4*j^4,c^13*d^14*e^2*f^9*g*i^8,c^57*e^5*h*j,d^12*h^6*i^17,c^13*d^3*f^4*g*j^6*k^6,e^2*f^8*h^3*i^3*j^4*k^2,f^22*i^2*k^5,g^3*h^2*i^5*k^11,d^6*f^7*g^8*h^3*i^6,e^13*f^12*g^5*h*j^2,d*e^11*f^2*h^5*k^9,d^2*f^18*h^6*j^4,c^11*f^10*g^4*h^5,c^30*d^2*e^30*i,d^12*e^18*g^4*k^7,h^19*i^6,d^20*e^7*f*h^5*i*k^7,c^5*f^3*i^8*j^5*k^4,c^5*d^14*e^4*f^5*i*j^6*k^2,c^12*h^6*i*j^13,c^17*d^7*i^3*k^11,c^17*d^8*f^13*j^5,c^29*d*f^5*g^5*i^2*k^2,c^3*f^9*g^2*h*i^13,d^33*f^4*i^4*j,c^27*e^8*f*k^5,c*e^17*f^5*i^11*k,e^12*g^8*h^3*i^4*j,d^31*g^2*h^8*j^3,c^2*d^10*e^4*g^8*i^3*k^3,c^4*d^41*f^6*g^2*h,d^6*e^2*f^3*g^3*h^5*j^11*k^2,c^10*d^31*g*i*j^8*k^2,c^22*d^4*e^3*h^13*i,c^34*h^12*i^3,e^3*f^21*h*j*k,e^33*g*i*k^6,c^2*d^31*e^20*f^2*k,c^12*e^15*f^4*g^15,c^33*d^4*e*f^4*i^3*j^5,c^21*d^12*f^6*i^11,c^8*d^23*f^3*g^4*i^6,c^8*d^12*g^4*j^12*k^4,f^2*g*h*i*j^10,d^6*f^16*g*j^2*k^3,g^6*i^3*j^4*k^9,d^20*h^5*j^6*k^4,d^12*e^11*f^3*h^12*k^3,c^6*d^13*e^26*i^4,c^15*d^28*e^3*g^5*j^8,c^27*d^21*g^10*i*j^2,c^50*g^3*h^4*i^3,d^15*f*g^11*h*i^4*j^5,e^26*j^9*k^3,d^10*e^6*h^3*j^5*k^7,c*g^7*h^10*j^12,c^6*d^4*f^4*g^7*h^3*j^4,c^18*g^12*h^2*k^7,c^30*d^21*e^17*f*g^3,d^52*g*h*j^8,g^9*h^5*i^8*k^3,d^12*f^6*g^3*h^10*i^3,e^34*i^10,c^13*d^19*e^14*h^4*i^7,d^5*e^22*g^4*i^2*j^4*k,d^29*e^2*g^3*h^3*k^5,d^23*f^3*g^17*h^3,d^2*g^2*i^6*j^11*k^2,c^4*e^17*h*j^3*k,c^18*d^18*h^5*k^5,c^28*g^19*k,c^49*j^10*k^2,d^2*e^6*f^2*h^8*i*k,d^12*f^16*h*k^4,c^4*g*h^7*i^3*k^10,c^6*d^26*h^12*k^5,d^13*e^13*g^10*h,d^44*f^5*g^4*h^6,d^23*j^12,c^3*d^2*e^4*f^7*i^3*j^2*k^8,c^24*d^10*g^8*j^5,c^28*d^2*e^8*f^2*g^6*h^3,d^21*e^2*f*g^6*h^8*i^4,c^2*e^17*f^6*g^3*h^6,c^11*e^5*g^2*h^17,c^16*d^10*f^4*g^2*h^10,c^35*h*i^3*j^3*k^5,d^42*i^2*j^7,c^3*d^21*e^4*f*g^16*h^3,c^13*e^15*f^11*g^2*k^2,c^22*e^3*g*j^4*k^3,e^12*i^9*j^2,d^15*f^5*h^2*i^4*j^4,c^10*d^8*h*i^6*k^3,c^12*d^39*f^3*h^6*i,c^14*e^26*h^8*k^2,c^22*d^2*f^5*g^11*h*i^5,c^45*e^7*f^2*j,d^18*f^3*g*j^3*k^14,e*f*h^4*i^17,d^19*g^11*i*k,d^50*g^5*j,c*f^8*j^6*k^10,c^13*g^3*k^19,c^32*e^14*g^8*j^2,f^18*h^6*j^6*k,f^4*i^5*k^15,f^10*h^5*k^10,d^5*e^28*f*i^2*j^3,c^8*e^10*f^9*i*j^2,c^10*d^29*e^8*h^4*k,c^20*e^3*f*g^4*i^3,c^29*d^6*g^3*h^10*i,c^32*g^9*i^5*k^6,c^34*d^16*g^3*h^3*k,c^69*f^4*h,d^16*e^35*j^4,d^7*f^11*h^7*i^9,d^40*e^15,c^7*d^3*e^10*g^18,c^8*f^3*h^6*i^11,c^28*d^13*i*j^11,d^17*f^17*h^6*i*j,d^48*e^4*h^4*i^2,e^3*g*h^10*j^6*k,d^11*g^14*i^6,f^14*g*h^3*k^4,c^8*h^14*j^2*k^5,c^14*i^14*j^3*k,d^16*f*k^15,c^2*i^22*k,c^15*d^5*g*h^16*i^4,e^9*f^5*h^3*i*k^11,g^11*h^10*i*j,h^6*i^4*j^15,d^4*f^13*i^3*j^7*k^3,d^32*e^15*f^2*g*h^2,c^9*d^56*h^6,d^5*g^4*j^16,d^7*e^18*f^13*g^2,d^8*f^2*g^9*j^2*k^10,c*d^22*e^21*i^2*j^5,c^15*d^46*e*j*k,d^13*h^6*i^7*j^10,e^8*g^3*h^12*k^6,e^6*f^9*i*j^6*k^6,e^9*g^3*i^6*j^11,c^3*d^54*i^7*k,c^5*f*i^3*k^15,c^5*f^17*j^5,c^14*d^2*f*h^8*j^9,c^17*f^9*g^2*i^2*k^6,c^19*d^12*f^15*h*j*k,d^19*e*h*j^11*k^5,e^6*g^2*j*k^13,d^29*f^4*j^3*k^8,c^4*e^12*h^17*k^2,c^6*d^22*g*k^17,d^13*e^2*f^8*i^4*j*k^4,e^3*h^3*i^7*j^3*k^10,d^7*f^16*g^7*i^3,d^21*g^6*h^8*i*j^4,e^25*h^2*j^12,d^14*e^21*g^3*i^7,c*d^45*e^8*f^5*i^2,c^3*e^17*f^13*j^4,c^8*d^28*e^9*g^2*h^2*i^5*j,c^12*e^5*h^6*j^8*k,c^13*d^38*e*g^2*i^4,c^15*e^10*f^5*k^9,c^17*d^2*f^11*k^4,c^22*g^9*h*j^5,c^48*d^3*e^16*f^2,c^60*e^9*g^4,e^6*f^15*h^2*i^6,d^3*e^12*g^3*j^9,h^13*i^4*j^2*k,c^11*f^2*g^17*j^8,c^13*d^27*g^2*h^3*j^5*k^3,e^13*f^12*i,e^14*g^5*h*i^4*j*k^4,d^11*e*h^6*j^3,e^6*f^4*g^5*i^3*k^7,d^21*f^10*k^2,g^19*h*i^3,d^4*g^4*h^5*i*k^8,d^5*f^4*g^13*h^6*j^2,c^4*d^14*f^2*g^4*k^11,c^11*g^18*h^5,c^20*e^29*g^2*j^4,c^22*e^16*f*h^4*j^6,d^5*e^2*f^14*h^2*i^9,d^11*f*i*j^8*k^6,c^8*e^18*h^6*i^6,c^10*e^5*f^3*h^11*i,c^15*f^17*h^4,c^22*h^10*i^3*k^4,c^23*d^11*e^3*g^9*h*j^3,f^9*h^10*j^5*k^6,f*g*h^9*k^15,d*e^30*h^4*j^2*k^2,e^25*g^12*i,e^12*g^6*h^4*j,d^26*f^6*h^9*j^3,c^9*e^5*g^11*h^3*k^2,c^18*d^5*j^15,c^30*i*j^9*k^3,d^3*e*f^2*g^2*h^11*i^4,g^7*h^10*i^6*k^2,d^30*g^19*h,d^27*g*h^15*i,c^8*e^10*f^5*g^5*j^6,b*d^7*e*g^21*h^3*i,b*e^7*g*i^7*j^8,b*e^41*h^2,b*d^3*f^7*g*i^6,b*d^7*h^6*i^5*j^12,b*c^3*g^6*i^9*j^2*k^6,b*c^5*d^17*i^4*j^4*k,b*c^10*d^27*f^5*i^3*k^4,b*c^40*e^2*j^7,b^2*d*h^2*i^15*j^2,b^2*e^30*h^9*i^2,b^2*d^17*e^10*h^13,b^2*e^15*f^4*h*i^3*k^8,b^2*c^28*h^4*i^6*j,b^3*f^6*i*j^10*k^4,b^3*f^4*h^3*j^6*k^8,b^3*d^14*e^23*j^9,b^3*c^3*d^7*e^16*i^2*j^3*k^4,b^3*c^3*d^8*e^5*f^3*g^2*j^8,b^3*c^8*d^17*e^8*f*i*k^7,b^3*c^15*d*g^7*i*j^2,b^3*c^17*d^32*f*g*h^2*j^4,b^3*c^20*d^11*f^9*g^7,b^3*c^52*f^6*j^7,b^4*d^15*e^5*h^4*i^10*k^4,b^4*c^3*d^9*g^3*h^4*i^9,b^4*c^7*d*e^21*g*h^11,b^5*f^5*g^8*i^4*j^5*k^2,b^5*d^57*h^2,b^5*d^36*e^4*g^3*i^4*k^5,b^5*g^4*h^8*j^12,b^5*e^3*f^2*g^10*j^2*k^7,b^5*e*k^20,b^5*f^8*g^4*h*j^4*k^2,b^5*c*e^34*j^7,b^5*c^6*g^9*k^11,b^5*c^6*d^8*e^26*f^13,b^5*c^8*d^8*f^6*g^3*h^5*k^6,b^5*c^13*e^27*j,b^5*c^14*d^9*f^2*g^2*i^11*j*k^2,b^5*c^15*d^22*e^14*j^3,b^5*c^27*d^15*e^7*k^2,b^6*f^10*h^8*i^3*k^2,b^6*d^6*e^23*f*h^3*i^5*j,b^6*d^7*i^20*j^3,b^6*c*e^16*h^2*i^7,b^6*c*e^5*f^9*g^5*h^3*i^4,b^6*c^3*d^30*e^3*h^7*i^2,b^6*c^6*d^9*e^8*f^7*i^6*k,b^6*c^50*e^11*h^4,b^7*d^9*e^4*h*k^9,b^7*d^2*g^5*i*k^18,b^7*d^3*f^7*g^14*h,b^7*f*i^6*j^11*k^6,b^7*d^41*e^10*g^4,b^7*e^19*f^4*j^3*k^5,b^7*d^4*e^5*g^24*i,b^7*c^25*d^6*e^25*f*g*j,b^8*e^8*f^6*h^6*i*k^5,b^8*c^13*d^14*e^14*f^3*h^5,b^8*c^25*d^7*e^7*g^2*h^4*i,b^9*d^24*e^2*f^9*g*h^4,b^9*f^5*g^6*i^3*j^9,b^9*c^12*f^3*g^5*j^5*k^4,b^10*d*e^4*f^5*g^3*h^6*i^4*k^3,b^10*d^14*e^8*j^13*k^2,b^10*f^7*g^2*i^11*j^3,b^10*e^19*f^10*h^4,b^10*e^7*h^15,b^10*f^5*g*h*i^8*k^4,b^10*c^4*f^8*h^8*k^3,b^10*c^11*e^5*f^10*i*j^9,b^10*c^19*d^5*e^2*i^12,b^10*c^56*d*e^4*i*j,b^11*d^22*f^2*i^2*j^7*k^2,b^11*e^12*f^7*j^10,b^11*c^10*e^5*j^4*k^7,b^11*c^12*d^11*f^5*j^6*k^2,b^11*c^24*d^4*k^11,b^12*e*f^9*i^4*j^4,b^12*f*i^6*k^7,b^12*d^19*f^7*h^4*i*k^2,b^12*c^11*e^5*f^4*h^18,b^12*c^17*e^20*i^7,b^13*e*g^8*i*k^5,b^13*d^30*f^4*g^2*j,b^13*c^5*d^4*e^9*f^2*h*i^15,b^13*c^22*e^3*f^9*j^4,b^14*d^7*g^4*i^9*k^5,b^14*d^9*e^10*f^3*h^2*k^5,b^14*c^5*h^9*j^6,b^14*c^8*e^5*f^5*g*i^3*k,b^14*c^10*d^3*f^11*h^2,b^14*c^17*h^8*i*k^2,b^14*c^22*f^3*h*k^5,b^15*d^10*e^25*h^2*j^8,b^15*d^20*e^17*k^3,b^15*d^13*e^10*k^12,b^15*d^14*f^8*g^9,b^15*d^44*k^7,b^15*c^4*g^14*h*j,b^15*c^9*d^7*g^14*k^3,b^15*c^16*f^2*i*j^11,b^16*d^28*e^6*f^2*h^2*i^2*k^3,b^16*d^12*g^5*h^9*i^2*j,b^16*e*f^4*g^11*i^6,b^16*f^18*h*k^8,b^16*d^15*f^2*g^10*h*i^3*k^3,b^16*c^4*d*f^4*i^9*j^5,b^16*c^8*e^21*f^7,b^17*d^12*f*g^4*i^4*j^6,b^17*c^5*d^36*g^3*i*j^2*k^2,b^17*c^9*d^28*e^8*f^2*g*k,b^18*d^2*e^25*h^7,b^18*e^18*g^3*h^6*i^2*k^3,b^18*e^7*g^12*h^7,b^18*d^5*e^10*g^3*i*k^6,b^18*c^4*d^22*e^3*f^6*i^2*j^6,b^18*c^23*h^2*i^4*j^7,b^18*c^35*g*h*i^6*j*k^4,b^19*c^3*d^26*e^3*j*k^5,b^20*h*i^3*j^7*k^7,b^20*c^21*e^15*i^2*j^6,b^20*c^26*e^7*f^2*i*k,b^21*f^2*g^7*j^10,b^21*d^2*k^21,b^21*c^9*e^4*h^7*i^10,b^21*c^13*d^10*e^14*g^3,b^22*d*f^4*g^3*h^6*i*j^4,b^22*d^8*e^11*i^5*j,b^22*d^9*f^3*g^8*h*i^2*j^6,b^22*e^7*f*h^4*j^8*k^5,b^22*c*d^18*e^3*f*i^4,b^22*c^8*d*e^4*g^4*i^7*k^5,b^22*c^8*d^2*g^13*i^4,b^22*c^10*d^32*h^4*i^2,b^22*c^45*e^6*h^2,b^23*e^14*j^9*k^3,b^23*f^5*g^2*h^6*i^8*k,b^23*c*d^7*h*j^5*k^7,b^24*e^3*h^4*j^3*k^3,b^24*d*f^14*k^6,b^24*f^6*g*k^15,b^24*g^15*h^3*k^3,b^24*c^8*d^23*e^9*h^3*j,b^24*c^20*d^16*e^2*g^5*h^2,b^25*e^7*f^7*h^9*i,b^25*e^12*f^8*g*j^9,b^25*c^7*g^8*j^11*k^2,b^25*c^11*e^5*g^6*j^3*k,b^26*d^10*g^6*h^4*i^2*k,b^26*e^7*g^8*h*k^6,b^26*f^2*g^2*h^6*k,b^26*c^4*d^9*f^16*g^2*k^4,b^26*c^5*e^9*g*i^12,b^26*c^14*d^14*i^10*j^2,b^26*c^63*d^3*i*j,b^27*d^10*e*g^16,b^27*e^7*f*j^16,b^27*c^10*f^7*g*j^2*k^8,b^28*d^4*f^3*i^2*j^10,b^28*i^4*j^4*k^5,b^28*c^19*d^15*f*g^10*h,b^28*c^28*e^4*j^7*k,b^29*i^15*j^2*k,b^29*e^12*h^11*k^4,b^29*c^16*f^2*h^2*i^6*j*k,b^30*e^10*f^5*i*k^11,b^30*f^21,b^30*d^2*h^7*j^12,b^30*c^3*g^4*i*j^2,b^30*c^5*d^11*k^12,b^30*c^5*d^12*f^5*j^4,b^30*c^8*f^13*g^4*k^2,b^30*c^17*d^5*g^3*k^3,b^31*f*h^2*i^9,b^31*c^40*f^4*h^4,b^32*d^37*e*k,b^32*d^31*f^4*g^8,b^32*c*e^29*j*k^2,b^32*c^3*d^2*e^16*f*j^3,b^32*c^15*e^9*k^6,b^32*c^15*f^9*g^5*j^2,b^32*c^27*f*g^10,b^33*e^18*i^7*k^2,b^33*c^3*d^4*f^11*g*h^5*i,b^34*d^21*e^12*g,b^34*d^14*e^5*g^6*k^4,b^35*c^13*e^9*h^2*i,b^35*c^18*e*f^13*k^3,b^36*f^5*g^3*h*k^11,b^36*c^21*d^8*e^2*j^4,b^37*c^9*d^16*i^7,b^38*d^27*g^2*i^2,b^38*c^31*e^13*j^2,b^39*c^19*e^2*f^2*i^4,b^39*c^26*e^3*h^2*i^7,b^39*c^31*i^6*k^2,b^40*h^2*j^9*k,b^40*c^6*d^11*e^9*g^9,b^41*e^2*f*h^7*j^6,b^41*d^19*f*g^5*i^7,b^41*f^15,b^42*e*f^12*g^6,b^42*d^8*g^5*h^4*j^3,b^43*d^16*g*h^11,b^43*c^15*e^6*g^4*h^4,b^44*e^18*h^2*j^2*k^2,b^44*c^4*g^12*h^2*j,b^46*d^6*e^5*j*k^9,b^46*g^7*j^8,b^46*c^3*f^7*g^7,b^47*e^10*f^12*g,b^48*c*e^16*f^3*k^3,b^48*c^10*d^4*e^4*j^3*k^4,b^49*e^13*i^5*j,b^49*d^19*h^3*j^3,b^49*d^12*h^2*i^2*k^4,b^49*c^33*e^8,b^51*d^3*e^11*f*h*j,b^51*c^8*e^4*g^2,b^51*c^13*d^6*f^7*g^2*k,b^52*d^4*h^7*i^7,b^55*c^14*d^9*i^2*j^2,b^56*i^15,b^57*e^2*f^3*g*i*j^2*k^3,b^58*c^12*d*f^2*g*i^7,b^61*d*e^14*f^4,b^62*e^6*h^12,b^62*c*e^11*f^3*i*k^4,b^65*d^7*i^2*k,b^67*c^3*d^5*g^5*j,b^69*g^2*h^2*j^3*k^3,b^70*f^2*h^9*k^3,b^70*d^4*e^6*f*g^3*h^4,b^76*f*g^6*i,b^78*e^6*k^2,b^82*c^2*i^2*j^2,b^94*e*g^2*j,b^96*c^3*f*g^3*j,c^6*d^12*e^8*f^3*g*h^10*i^4*j,c^12*f^2*h*i^9*j^2*k^6,d*e^5*f*g*h^6*i^2*j^7*k^2,c^11*e^25*h^6*k^3,c^7*d^28*e^7*h^2*j^9*k^2,c^17*e^2*g^9*i^4*j^6,c^5*f^2*g^5*h^4*i^12,d^47*e^3*h^2*i^3*j^4,c^29*d^5*e^11*g*j*k^5,c^3*e^20*h^2*i^10*k,c^5*d^20*e^7*f^4*h^7*i^5*j,d^31*e^14*f*g^6*j^2,c^6*d^55*g^5*h^4,d^10*g^4*h^4*j^13,d^20*f^9*g^4*j^5*k^3,d^4*e*f^13*g*i^10*j^3,c^12*f^16*h^2*i*j^2,d^16*e^9*h^11*k,c^4*e^20*g^6*h^9,e^15*g*i^8*j^5,c^3*d^8*e^7*f^6*g*i^7*k^2,c^5*d^39*f^12*i^2,c^12*d^22*h^4*i^5*j*k^3,d^6*e^4*h^7*i^16,c^35*h^9*i^7,f^19*i*k^9,c^22*d^6*e^6*g^7*h^2*i^2,c*f^7*g^4*h^6*j*k^4,e^2*g^14*h^13*j^4,i^7*j^8*k^8,c^2*d^3*e^8*f*i^16*j^4,d^8*e^9*f^2*j^9*k^6,c^7*d*e^2*i^2*j^3*k^15,c^7*d^2*f^10*j^8,c^19*f^2*g^5*i*j^2*k^6,f^6*g^2*h^2*i^12*k^2,d^20*g*i^5*k^13,c^3*d^59*e^11*i*j^2,c^5*e^20*f^6*j^7,c^17*e^13*j*k^9,e^9*f^8*h^5*i^5*j,c^5*e^2*h^4*i^7*k^9,c^5*f^16*g^3*h^5*i^4,d^11*e^16*f^5*g^3*j^2,d^35*f^3*g^2*h^2*k^2,e*f^10*g^5*h*k^14,c^23*e^6*f*i^2*j^8*k^2,c^11*d^6*f^3*i^10*j^2*k^2,d^17*e^2*g^4*i^5*j^3,d^48*f^6*j^5,c^12*d^41*g^3*i^2*k^4,c^42*e^5*j^10,c^47*d^6*f^3*j^2,d^17*e^25*f^5*h^5,c^21*e^6*f^7*i^7,e^2*g*h^2*j^13*k^4,c^17*d^15*e*g^10*j^5,f^20*i*j^2*k^3,c^33*d^4*e^15*f*i^2*k^3,f*g^7*h^4*j^7*k^2,c^20*d^15*e^22*g^3*k,d^6*f^3*g^3*h^11*i^2*j*k^2,e^31*f^2*i^8,c^8*d^23*e^11*i^5*k,d^3*f^2*i^3*j^20,e^11*h^9*k^5,d^27*f^5*h^14*j^2,f^5*g*h*i*k^17,d^7*e^18*g^10*h^2*j*k^3,d*f^4*g^24*h^2,c^2*d^11*f^4*g^3*j^14,c^14*d^4*g^8*j^8*k^4,c^18*e^13*g^6*h^4*k^3,g^5*i^10*j^6,e^22*f^3*g^3*h^7,c^6*d^4*e^2*f*g^2*h^11*k^3,d^12*f^3*h^18*i^2*k^3,d*e^15*j^13,c^12*e^8*g*j^7*k^7,c^14*d^25*j^9*k^2,c^24*g^15*j^6,d^9*e^4*f^2*h^3*i^3*j^7,d^19*f^16*i^2*k,d^2*h^2*i^5*j*k^7,d^3*f^10*g^6*h^3*i^2*j^6,c^35*e^12*j^4*k^3,d^13*e^4*g^11*j^2*k^5,d^44*g^5*j^4,d^7*g^25*j,c^23*e*f*h^7*i^7*k^3,c^24*d^9*e^6*f^2*g^2*j^7,d^52*g*h^7*i^3,e^15*f^6*h*j^5,c^3*d^3*e^7*f^20,c^10*e^8*g^4*i^2*k,c^12*d^17*f^4*h^5*j,c^15*f^12*g^4*i*k^4,c^24*d^10*g^3*h^4*k^5,e^17*f^2*g*h^3*i^13,e^15*g^18,h^7*i^10*k,c^18*d^7*e*j^14,d^5*e^4*g^14*i^5,f^11*g*h^4*j*k^8,d*e^2*f^13*i^10*j^4,c^6*d^15*i^8*j^8,c^10*d^7*e^24*h^3,c^20*e^19*f^2*g^11,c^22*d*e^6*f^8*g^5*h^3,c^34*g^10*h^2,c^5*e^3*g*h^17*i^3*j,c^10*d^9*f^10*g*h^10*i^2,d^26*e^20*g*h^3,d^50*h^7*k,c^28*g^5*i^7*k^3,c^30*d^23*i^2*j^2,c^4*d^7*f^3*h*i^13,c^16*g*i^15*k^3,d^55*e^2*i^4*j^4,e*h^5*j^16,f^28*k^4,c^4*h^9*j^12*k^2,c^28*d^13*e^10*j*k,c^2*e^19*i^11,d*f^13*g^7*i^2*j^3,d^7*e^11*g^4*h^16,d^8*e^26*g^3*i^6,c^3*d^32*e^6*g^2*i^3,c^5*d^63*h,c^7*e^2*f^8*j^3*k^8,c^8*d^42*f^8*g^2*i^2*k^2,c^12*d^46*g*h^7*i,c^19*k^17,c^38*e^21,e^17*g^3*j^12*k^3,f^20*h^3*i^4,c^7*f^18*h^7*i,c^26*d^5*e^10*f*h*i^5,d^5*e^6*h^7*j^6*k^3,d^15*f^7*k^6,g^4*h^6*k^12,f*g^13*h^7*j^5,d^8*g^4*k^15,c*g^18*h^6*k^3,d^13*h^14*i^6*k^3,e^10*h^12*j^3,c^5*e^2*f^14*h^5*k^2,c^14*d^2*h^16*k^3,d^24*e^2*g^9*h^7*i*j*k,e^9*f^11*g^6,c*d^13*g^5*h^9*k,c^56*d^3*e^7*i^2,d^7*f^13*g^2*h^5*i^2,d^21*g*h^16*k,f^7*i^10*j^2*k^6,c^24*e*f^2*h^14,e^12*g*i^6*j^11*k,d^18*h*i*j^13,e^4*f^4*g*i^5*j^3*k^4,d^28*f^10*j^5,d^11*i^3*j^7*k^5,d^3*e^26*h^7*k^4,d^21*f^2*i^2*k^8,c^4*d^13*e^18*f^5*k^7,c^7*d^5*g^14*i^2*j^6,c^35*f^7*j^2*k^4,e^10*g^14*h^9*i^2,d^5*f*g^8*h^14,d^7*e^13*f^9*i^3*j^3*k^4,c^11*d*f^17*i^2*j^2,c^18*h^5*i^5*j^4*k,d*e^21*i*j^6*k^8,d^2*e^10*g^2*j^11,c^5*e^3*g^7*j^5,c^7*d^26*g*h^3*j^7,c^10*d^5*f^6*g^7*k^2,d^10*f^2*h^6*i^6*j^5,d^3*g^3*h^5*i^8,d^34*h^10*i^3*j,c^28*e^7*h^3*i^2*j^2,c^42*h^7,d^51*e^4*h^3*j^3*k,d^61*f^3*k^4,f^5*g^4*h^2*j^7*k^6,d^2*f^3*g^3*h^6*j^3*k^10,c^4*d^3*g^2*i^10*j^4*k^6,c^6*d^13*e*h^15*i^6,c^8*e^24*f^2*k^5,c^10*d^26*e^11*f^8,c^17*d^9*e^12*k^6,c^17*d^10*e*f^2*g^8*h*j^5,c^29*d^3*g^13,f^7*h^9*i^2*j*k^6,e^21*h^3*i^6*k^2,e^10*f^6*g^5*h^4*i^3*j^3,d^24*e^8*h^8*i,d^3*e^13*f^4*i^5*k^5,d^34*f^10*h,c^5*d^17*e*h^7*i^3*k^6,c^5*d^18*f^4*g^4*h^8,d^3*e^9*h^2*j^3*k^13,d^35*e^15*g^4*h*j,d^14*e^20*f*g^10*k^3,d^29*f*g^18*h,e^4*h^4*j^2*k^13,c^11*d^8*g^3*i^3*j^12,c^15*e^30*g*j^4,g^5*i^16*j^4,d^16*i^11*j^6,c*e^32*g^3*h*i^3,c^3*d^8*e^19*h^6,c^8*d^18*e^11*f^14,c^15*d*e^12*g^2*h^5,c^20*d^11*e^4*f^6*g^2*k^3,c^27*g^16*h^5,c^60*i^4*k,d^18*e^7*f^6*g*h^5*j^3*k^2,d^11*g^6*h^4*k^11,h^3*j^22,f^8*j^14,c^2*g^5*j^8*k^8,c^3*d^9*e*h^12*i^8,c^4*d^15*f^6*j^10*k^3,c^8*d^7*e^2*f^9*h^7*j^2*k^2,c^20*f*g^2*h^6*k^11,c^26*d*e^10*g*i^2*k^7,f^10*h^3*i^5*j^8,e^4*f^5*h^9*k^7,e^19*f*i^13*k^3,c^2*d^16*e^6*f^7*i^8,c^9*e^7*i^11*k^4,c^9*f*g^6*i^8*j^4,c^14*d^9*i^10*k^7,c^23*d^24*g^5*h*i^5,c^46*e^9*j^4,d^16*e^2*i*j^10*k^6,e^11*f^2*g^13*h^2*k^5,d^58*f^10,d^41*e*g^5*i*j^2,e^10*j^7*k^11,c^2*d^5*f^2*j^9*k^6,c^3*d^51*f^2*g^5,c^12*f^4*g^12*j^6*k^2,c^14*j^3*k^15,c^14*f^10*g^6*j^8,b*e^6*f^6*h*i^3*j^7*k^2,b*f^20*i^2*k^5,b*i^5*j*k^11,b*d^13*f^4*h^5*j^3*k^6,b*f^6*g^8*i^4*k^2,b*c^2*d^7*f^12*g^2*h^5*j^2,b*c^7*e^25*i^6*j^3,b*c^21*d^14*e^5*i^3,b*c^26*d^24*f^9*i^2,b*c^28*e^6*g^3*h^5*i^6*j,b*c^33*d^7*g^3*i^5*k^2,b*c^70*d^3*h,b^2*e^13*f^3*g^3*j^8,b^2*e^6*g^8*j^2*k^9,b^2*d^24*f*g^2*j^4*k^4,b^2*f^3*g^22*j,b^2*d^17*g^7*k^13,b^2*e^14*h^2*i^14,b^2*c^7*e^7*h*i^16,b^2*c^8*f^3*g*i^2*j^15*k,b^2*c^8*d^25*e^12*g^12,b^2*c^12*e^8*f^6*j^7,b^3*d^8*e^2*f^5*h*i^6*j^2,b^3*d*g^4*i^8*k^9,b^3*d^32*f^3*h^5*i^3*k^4,b^3*e^17*f^10*j^5,b^3*d^3*e^15*h^3*j^2*k^9,b^3*e^9*f^24,b^3*e^5*h^10*j^9,b^3*d^33*e*g^8*i^6,b^3*e^10*f^2*g*i^2*k^5,b^3*f^8*h^3*j,b^3*c^3*e^2*f^16*g*i*k^8,b^3*c^7*h^9*j^3*k^6,b^3*c^12*h^2*k^9,b^3*c^31*e^16*g^5,b^3*c^45*d^22*g^4*h,b^4*d^8*e^4*f^5*g^9*j^2,b^4*d*g^14*k^7,b^4*c^36*f^8*g^5*j,b^5*d^22*e^11*h^3*i*k^7,b^5*e^6*f*g^11*i^5*k^3,b^5*d^16*f^7*g^5*h^3,b^5*d^9*g^10*h^2*i^2*k^7,b^5*f*i^8*j^8*k^4,b^5*e^26*f^4*h*k^3,b^5*c^10*e^19*k^12,b^5*c^13*d^57*e^2*f^2*k,b^5*c^22*e*f^4*g^7*k^3,b^6*d^6*g^4*i^3*j^9*k^2,b^6*d^22*e^13*g*k^5,b^6*c*d^53*f^5*h^3,b^6*c^7*d^3*h^19,b^6*c^10*f^6*g^3*h^7*i^4*k^3,b^6*c^30*f*j^8*k^2,b^7*d^14*i^11*j^3*k^2,b^7*d^6*e^22*f^3*h*k,b^7*e^15*g^3*k^10,b^7*e^5*g^17*h^7,b^7*d^16*e^8*f^3*i*j^9*k^2,b^7*f^3*g^17*k,b^7*c^9*f^19*i^4*k,b^7*c^13*h^3*i^3*j^10,b^7*c^16*g^2*i^7*k^7,b^7*c^18*d^3*f^3*i^2*j^2*k^2,b^8*f^7*i^13,b^8*d^20*e^8*j^4*k^9,b^8*d^4*g^10*j^11,b^8*c^5*e^14*h^17,b^8*c^5*d^14*g^10*j^3,b^9*d^25*e^18*f^2*g^8*h*i,b^9*d^22*f^2*g^6*i^5,b^9*d^14*e^13*f^5*g^4*h^3,b^9*c^16*e^12*j*k^5,b^9*c^16*e*f^15*j^6,b^9*c^18*d^24*f^5*j^3,b^9*c^28*f^7*g^3,b^10*c^4*d^2*f^17*h^2*i^5,b^11*f*g^3*h^7*j^7*k^4,b^11*d^5*f^15*g^3*k^7,b^11*e^28*i^6,b^11*d^19*e^15*f^6*i*j^2,b^11*d^2*e^16*h*i^4*j^4,b^11*d^3*e^5*g^8*h^2*i*j^9,b^11*d^12*e^8*i^3*k^3,b^11*d^43*f^4,b^11*e^9*g^4*i^6*k^9,b^11*g^13*h*i^3*j^3,b^11*c^2*f^6*h^5*j^10,b^11*c^5*d^36*k^7,b^11*c^10*g^18*i^5,b^11*c^40*d*e^3*f*k^3,b^12*d^10*e^5*h^8*i^12,b^12*f^2*g^2*h^7*i^7*j^2*k^5,b^12*c^23*h^10*i^3,b^13*d^31*e^4*g^9*i^6*k,b^13*f^11*k^10,b^13*d^3*f^3*g^9*h^9*j*k^2,b^13*d^17*e^14*h^4*j^4,b^13*c*e^19*f^2*g^6,b^13*c^10*d^10*e^7*g^5*h^3,b^13*c^15*d^20*g^5*k,b^14*d^4*e^8*f^4*g^2*i^8,b^14*c^3*d^16*f^3*h^5*j^8,b^14*c^3*d^28*f^2*g*h^3*i^5*k,b^15*d^4*e^4*g^6*h^5*i*j*k^5,b^15*e^6*f^7*h^8*j^6,b^15*g^2*h^7*k^5,b^15*d^3*f^13*g^2*k^8,b^15*e^14*g*i^11*j*k,b^15*d^25*e*f*i^6*j^3,b^15*f*g^22*h^2*k,b^15*c^4*d^8*e^2*i^9*j^5*k^2,b^15*c^20*f*g*j^11*k^2,b^15*c^44*e^9*i^2*k,b^16*d*f*h^14*k^5,b^16*d^9*e^14*g^3*h^9*i,b^16*f^4*g*j^5*k^12,b^16*c^32*i^10*k,b^17*e*i*j^13,b^17*d^22*h^3*j^9*k^4,b^17*d*f^6*i^2*k^12,b^17*g^11*i^2*j^6,b^17*c*d^8*f^9*g^3*h^10,b^17*c^7*d^9*e^12*f^5*g^2*i^3*j,b^17*c^9*d^9*g^10*h^2*j^2*k^4,b^17*c^16*d^23*g*i*j^5,b^17*c^19*d^2*e^5*g^7*i^5,b^17*c^28*d^16*g^6*i^3,b^18*d^17*e*f^7*i^11,b^18*f^21*i^2*j^2,b^18*c^2*e^2*g^3*i^14,b^18*c^6*h^3*i^5*j^4*k^5,b^18*c^7*e^3*g^2*j^13,b^18*c^7*d^10*g^3*i^13,b^18*c^8*f^5*h^8*j^6,b^18*c^39*e^4*h^2*i^3*j^2,b^18*c^56*f^2*i^4,b^19*h^8*j^15,b^19*e^5*g^4*j^5*k^3,b^19*d^5*e^3*j^2*k^16,b^19*d^6*f^2*h*j^7,b^19*c^2*g^3*h^7*j^9*k^4,b^19*c^7*g^3*j*k^7,b^20*h^3*i^8*k^3,b^20*d^14*f^4*h^8*i^3*j,b^20*c^30*f*h^5*k^3,b^21*e*g^14*i^3*k,b^21*d^24*i*k^14,b^21*e^21*j^6*k,b^21*c^3*e^16*g^11*j^3,b^21*c^5*e^14*k^10,b^21*c^5*e^3*f^6*g^5*j^5,b^21*c^17*g^10*k,b^21*c^19*d^14*f^4*g^4*h^3*j,b^22*d^4*e^10*h^6*i*k,b^22*e^5*f^2*g^7*h*i^5,b^22*f^8*g*h^6,b^22*c^5*g^6*h^5*i^2*k,b^23*d^2*g^20,b^23*i^3*j^12,b^23*c^4*f^13*i^2*j^4,b^23*c^13*d^12*j^8,b^23*c^17*d^4*e^12*h,b^24*f*i^11*j^6,b^24*e^21*f^4*h^4,b^24*g*i^13*k^5,b^24*c^3*e^14*h^3*k^4,b^24*c^5*d^12*e*f^2*h^8,b^24*c^8*e^6*f^10*k^7,b^24*c^24*i^3*j^6*k^5,b^25*d^23*e^8*g^7*h,b^26*d^10*i^6*j*k^3,b^26*c^9*g^8*i^10,b^26*c^11*d^4*f^3*g^2*i^5,b^26*c^34*e^11*j^4,b^26*c^48*h*k^3,b^27*d^21*e^3*g^2*i*j^2*k,b^27*c^35*d^10*j*k,b^28*c^2*d^8*e*g^15*h^5,b^28*c^9*e^7*i^3,b^28*c^14*d^4*f^13*i^2,b^28*c^21*i^5*k^6,b^28*c^58*e^2*f^2,b^29*d^4*f^5*j^4*k^8,b^29*d^4*g^10*h^14,b^29*d^36*e*f^2*g^3*j^2,b^29*c^10*d^29*g^8,b^30*d^13*e^3*g^5*i^6,b^30*f^12*h*j*k^4,b^30*d^37*g^4*h*i^3,b^30*f^4*k^13,b^30*c^33*d^2*f*g,b^31*d^2*g^5*h^5*j^6*k^3,b^32*e^3*g^2*h^8*i*j^4,b^32*f^11*g^2*h*k^2,b^32*d^27*e^12*i*k^2,b^32*c^27*i^8,b^33*d^2*e^15*f^3*k^9,b^33*f^2*h^17,b^34*g^8*h^10,b^35*g^7*j^11*k,b^35*f^4*g^7*j^3*k^4,b^36*d^2*f^6*g^3*i^5*k^4,b^36*c^11*e^4*j^8,b^36*c^16*f^11,b^36*c^25*h^3*j^4*k,b^37*h^6*i^8*j^2,b^37*g^8*j^11,b^38*d^13*e^5*h^4*j^6,b^38*d^7*f^2*g^4*h^4*j^5,b^38*g^9*h^3,b^38*c^12*d^24*e^16*i,b^39*c^12*d^13*e^7*j^6,b^40*e^16*h^2*j^4,b^40*d^7*e^8*f^12,b^40*e^9*g^2*h*k^2,b^40*c^3*e*f^4*g^2*k^5,b^40*c^5*d^31*f^10,b^41*h^8*i^6*k^2,b^42*i^8*k^9,b^42*c^10*d^5*e^7*g^3*h^4,b^43*d^13*f^2*h^11,b^43*c^10*d^6*g^4*h^10,b^44*c^4*d^3*e^2*i*j^5,b^44*c^9*d^13*f^7,b^45*e^4*i^14,b^45*f^3*i^13*k^3,b^46*f^6*j^7*k^2,b^46*j*k^11,b^48*d^5*f^5*g^5*j^2,b^48*c^7*f^8*g*h*j,b^50*c*f*j^8*k^4,b^50*c^5*e^14*f^4*k^3,b^52*d^3*e^10*f^3*g^4*k,b^52*c^25*f^3*g^2*j^2*k^2,b^54*d*e^5*i*j^2*k^5,b^54*f^4*g^13*j,b^55*e^9*f^3*i^3*k,b^55*d^5*f^9*j,b^55*c^6*h^6*i*j^3*k^2,b^56*e^4*g^5*j^4,b^57*d^17*g*i^3*k^3,b^57*c^21*f^5,b^59*d*f^4*g^8,b^62*j^13,b^65*g^6*h*k^3,b^65*c^23*f^3*g^3*j^2,b^66*e^9*j^6*k,b^67*d*h^4*k,b^69*c^8*d^17*g*j^2,b^70*g*h^8*k^4,b^71*e^4*i*j^5,b^71*c^6*d^7*j*k^3,b^72*i^9,b^73*c^16*g,b^74*c^4*f*h^2*i^3,b^75*g^11*h^2*j^2,b^76*c^2*e^13*i,b^85*e^4*g^3*j^4,b^86*d^2*h^7,b^90*d^8*i,b^92*e^8,b^100*c^4*f^3*k,b^117*i,b^119*d^9*f*h,c^24*e^10*g^9*h^2*i^5*j^3,d^25*f^8*g^4*h^2*j^2*k^5,c^14*d^7*f^9*h^5*j^5,d^5*e^2*f^12*g*j^2*k^9,c^3*d^3*e*g^7*h^9*j^4*k^4,d^8*e^3*f*h*i^4*j^17,g^5*h^5*i^11*j^3*k^2,c^5*e^23*f^5*h^6*i*j^2,c^23*d^4*e^9*i^6*j^3,c^2*e*f^13*h^3*j^5*k^3,d^6*f^12*g^7*h^3*i^3*k,e^26*f^8*h*i*k^4,d^4*g^13*h^12*j^2,c^7*e^18*h^17*i*k,d^2*e^12*f^3*g*i^6*k^6,d^33*f^9*i*j^2*k,c^7*d^26*f*i^3*k^10,c^5*d^17*e^10*f^13*g^2,c^12*e^11*g^7*h^3*i*j^2*k,c^14*d^31*g*h^8*j^4,c^23*d^23*f^8*g^3*i^3*j,f^7*h*j^11*k,f*g*h^7*i^8*k^10,d^15*f^6*g^10*h*i*j^6,f^13*g^3*h^6*i^3*j^3,c^9*d^12*f^11*g^2*h^10,d^5*e^21*f^2*g^3*j^5*k^2,d^29*e*g^2*h^3*j*k^6,f^2*g^22*k^2,c^5*e^18*f*g*h^3*i^3*k^7,c^19*h^7*k^11,d^13*e^12*f^4*g^9*h,c*i^9*j^5*k^6,d^42*f^3*j^8,c^37*e^2*j^5*k^4,c^4*e^5*f^2*g^17*h^5*k^3,c^11*e^11*f^4*i^6*j^3,c^13*d^15*f^10*h^2*i*j^5,c^25*d^8*f^2*h*i^3*k^4,f^6*h^4*i^14,c^12*d^19*g^10*k^2,d^34*f^9*g*h^2*i^4,d^27*f*g^6*h*i^6*k^2,c^35*e^2*f^6*g^3,g^3*h^12*i*j^4*k^6,d^17*e^16*i^4*k^5,c^29*i^11*j^4*k^2,f^4*g^10*h^10*j^2,c^22*d^25*e^7*g^5*h*k^3,d^5*f*g^3*j^17,e^7*g^2*h^12*k^7,c^4*d^30*e^9*i^7,c^27*g*h^3*j^8*k^4,d^3*e^9*h^4*i^2*j^10*k^2,f^7*g^6*h^4*i*j^9,d^6*f^5*i^3*k^14,c^14*d^3*e^11*g^2*j^10,d^22*e^5*g^2*h^4*i^5*j^5,e^20*f^3*h^2*j^8,e^12*f^17,e^13*g^4*h*i*j^2*k^5,c^2*d^11*f*h^6*j^4,c^12*f^3*g^18*h*j,c^14*d^4*g^3*h^5*k^9,c^26*f*g^17*h^5,d^5*e*f^19*h^2*i^6,e^2*h^8*i^9*k^5,e^9*g^14*h*i^4*k^3,d^30*g^8*h^6,d*e^29*h^4*j^3*k^3,c^12*e^11*f^5*g^5*h^4*j^2,c^24*e^4*g^10*h^3*k^3,d^3*f^7*g*h^11*i,d^20*e^25*g*h^4*k,d^7*g^20*h^3*k,c^6*e^6*i^4*j^9,c^8*d^24*f^4*j^11,c^11*d^3*f^12*i^3*j*k,c^18*g^5*i^6*j^3*k^7,c^55*e*f*j^8,d*h^2*i^12*j^3,e^29*f^3*h^9,c^6*g*h*i^14*k^7,d^12*e^2*g^10*i^7*j^4,d^43*f^3*g^4*i^2*j^6,d^36*g^9*i^4,c^18*d^7*e^15*j^4*k^5,c^30*d*g^6*j^3,c^18*d^9*f^2*g^2*h^4*i^6,f^10*g^7*i*j^6*k^3,d^57*h^2*j,c^4*g^3*h^8*j^13,c^7*d^50*g*h*k^7,c^9*k^21,c^28*e^26*j^2,c^16*e^15*h^2*i^4,c^16*e^4*f^14*g^4*h^3*i*j,d^9*e^3*f^4*h*j*k^10,d^2*g^4*k^19,d^3*f^12*g^13*h*k,c^5*d^41*e^9*f*g^3,d^24*e*f^14*h^4*j,d^7*e^2*g^5*h^10*j^3*k^5,d^17*f^6*g^5*h^3*k^8,c^10*f*i^22,d*e^3*f^10*g^2*h^6*i*k^4,d^15*g*h^17*k^5,c^14*e^6*h^15*k,c^34*d^5*e*i^9*k,d^12*e^4*h^2*j^16,d^15*i*j^2*k^12,g^14*h*i*j^9,c^8*e^10*i^20,e^2*g^8*h^15,c*f^14*i*j^5,c^10*d^9*h^11*j^9,c^11*d^55*i^7,c^13*f^6*i^3*k^8,d^41*f^6*g^5*i^2*j^3*k,e^15*g^2*j^14,d^6*e^7*f^11*g^2*j^6,f^3*g^7*k^6,c^2*d^30*f^9*g*j^2*k,g^3*h^6*i^7*j^2*k^3,d^7*f^5*g^3*i^6*k^6,c^23*e^4*f^10*k^2,d^8*e^4*g^17*i^2*j^3*k,e^29*k^9,d^20*e^16*f^5*j*k^4,c^12*d^13*e^9*k^13,c^12*d^14*f^13*g^8,c^19*g^13*h*j^2*k,c^20*h^15*i^6*k^3,d^4*e^25*f^9*i^2,d^28*e^5*f^7*h^2*k^4,d^12*f*g^4*h^9*j^2,f^9*g^10*i^3,d^21*h*i*k^13,d^22*f^15*g^4*h^2,c^7*d^5*g^9*h^8*i*k,c*d^2*e*g^3*i^2*j^15,c^6*e^17*h^14*i^2,c^6*d^12*f^6*g^3*i*j^7,c^20*d^36*f^4*g^2*j^3*k^3,d^47*e*f^6*h^2*i^2*k^2,d^10*i^10*j^9,f^2*g^5*i^14*k^4,d^2*e^24*h^7*j,d^12*e^16*f^11,c*d^3*g^4*i^12*j^3*k^5,c^5*e^17*g^2*h^6*k^4,c^7*d^26*e^4*h^11,c^10*d^5*e^9*f^3*g^2*k^7,c^17*g^16*h^6,c^38*h^2*i*j^8,c^50*h*i^3*j^2*k^5,d^9*f^3*h*j^13*k^7,c^16*e^15*g*i*k^11,c^28*f^2*g^15*k^2,e^9*f^2*h^10*k^11,d*e^8*f^6*g*i^5*j^13,d^10*e^11*f^4*i^7*k^2,d^41*f^10*i^2*j^2,c^13*d^18*g^5*h^2*i^4*j^3,c^15*f^4*h*j^8*k^8,c^36*e^14*j^7,d^4*f^4*g^10*j^12*k,d^2*g^2*h^5*i^15*j,d^35*e^6*g^5*j^5*k,d^45*g^5*k^4,c^4*f^7*g^6*j^11*k,c^5*d^18*e^4*f*h^16,c^8*e^9*f^9*g^5*h^4*i^3*k,d^7*f*h^6*j^6*k^10,d*f^9*g^2*h^6*j^5*k,e^7*f^12*h^13,d^15*e^17*h*j^8,c^2*e^22*f^8*i^4,c^11*d^8*e^10*i^2*j^2,c^16*d^18*e^2*f^6*i,c^23*d*e^3*g^3*i^4*k^6,c^23*d^2*g^12*i*j,c^25*d^32*h^4*k,e^19*h^3*i^13,d^16*h^7*i^10,c^2*e^13*f^3*j^10*k^4,c^2*e^4*f^2*i^14*k^5,c^16*d^7*f*h*j^6*k^8,d^2*e^7*f^2*h^2*i^5*j^5*k^4,d^26*h^6*i^2*j*k^8,e^10*h^11*j^12*k,d^27*e^6*g^8*i^5,e^15*g*i*j^2*k^9,e^2*f^5*h^4*j^4*k^4,d*f^19*k^7,f^7*g^15*j,d^51*g^7*h^4*i^2,c^2*h^3*k^13,c^2*f^13*g^9*h^4*j^3,c^10*d^16*i^12*j*k^4,c^35*d^16*e*g^4*h^2,f^7*h^11*i^4*k^4,d^26*g^8*h*j*k^6,d^58*f^2*g*i^2*j^4,c^9*e^10*g*h^5*i^7,c^11*d^31*f^4*h^10*i^2,c^18*d^14*h^16*i^5,e^11*g^11*i^4*k^7,d^10*f^4*g^5*h^4*k^2,d^3*g^10*h^3*i*k^11,f^6*g^4*i^6*j^10,e^13*f^9*g^2*h^2*j^2,c^3*d^51*e^7*k^5,c^9*e*g*h^13*j^6,c^14*f^7*g*h^6*k^2,c^20*e^8*f^3*i^9,e^4*g^4*i^2*j^12*k^6,e^2*f^11*h^9*i,h^20,f^3*g^3*h^8*i^3*k^7,c*d^10*f^4*g^15,c^2*d^7*f^9*h^13*k^2,c^3*e^5*i^18*j,e^47*f^2*j^2*k,e^27*h^2*k^5,d^8*g^11*h^13*j,e^2*g^17*h*k^5,e^8*f^2*i^4*j^9*k^2,d^4*f^8*j^11,f^16*i^3*j*k^5,c*d^14*f^22*j^3,c^6*e*g^2*i^6*j^3*k^11,c^8*i*j^5*k^6,c^39*e^7*g^6*i^4*j,f^4*i^12*j^3*k^2,i^14*k^11,d^8*g^10*j^6*k^4,d^5*f^2*h^4*i^9*k^6,e^29*g^8*k^3,c*d^31*e^16*f^6*g^2*h^2,c^15*d^13*e^3*f*i^10*j,c^27*d^6*g^2*i^12,d^19*e^23*g^8*h^2*k^3,e^4*f*g^7*i^7*j^4,d^16*g^6*i^4*k^4,d^47*f^5*h^2*j^2,d^8*e^18*f^2*g^4*h^4*k^3,c^4*d^54*e^8*i^3,c^6*e^17*j^4*k^9,c^8*d^18*e^4*f^2*j^6*k^4,c^9*d^64*f^2*i^2,c^15*d^2*h^7*j^13,c^18*f^4*g^3*j^3,c^20*d^11*k^13,c^20*d^12*f^10*j^5,c^32*d^5*f^2*g^2*k^4,d^6*e^15*h^18,e^8*f^8*i^9*j,e^6*h^2*i^7*k^9,c^6*f^6*h^2*i^6,c^15*d^3*h^13*i^4*j*k,c^53*f^3*g*i^2*k^5,d^6*e^13*i^2*k^7,d^37*f*j*k^2,e^3*g^13*h^2*i^2*j^6,f^3*g^13*i,d^30*k^11,d^31*f^9*g^7,g^18*h*i^4*k^4,c^7*d^24*f*g^12*k^2,c^16*e^28*j^2*k^3,c^30*e^8*k^7,b*d^14*e^2*h^2*i^10*k^7,b*c^4*e^17*f^2*i^4*k^3,b*c^13*e^5*h^11*i^2*k^4,b*c^18*d^3*h^4*i*k^7,b*c^18*d^4*f^16*h^5,b*c^19*d^37*e^2*f*g^3*j,b^2*d^56*g^3,b^2*e^24*g^6*k,b^2*d^21*e^11*f^5,b^2*d^4*e^12*g^5*h^4*j*k^2,b^2*d^5*e*g^14*h^5*j^6,b^2*c^5*d^14*e^4*g^5*k^5,b^2*c^7*d^45*f^3*h^2,b^2*c^12*g^19*h^4,b^2*c^24*f^7*i*j^10,b^2*c^36*g^4*i^3*j^4*k^2,b^3*e^13*f*g^2*i^7*k,b^3*d^29*f^7*h^5*i^2,b^3*d^12*e*g*h^11*i^5*k^2,b^3*d^10*e^2*h^6*j^11*k^4,b^3*d^22*g*h^4*i^4*k^5,b^3*d^11*e^17*j^12,b^3*d^8*f*i^10*j^5*k^2,b^3*c^2*f*g^8*h^10*k^7,b^3*c^10*f^3*g*i^14*j^2,b^3*c^12*d^2*f^9*i^9*j^4,b^3*c^24*f*i^11*k^2,b^4*d^2*f*h^2*i^2*j^17*k,b^4*d^4*e^3*f^18*h^2*j*k^3,b^4*e^4*g^2*h^8*j^3*k^9,b^4*f^10*g^2*h*k^12,b^4*d^11*e^40*f,b^4*d^12*i^7*k^9,b^4*c*d^43*i^2*j^2*k^4,b^4*c^11*d^6*g^14*i^6,b^4*c^15*e^15*f*g^12,b^4*c^34*e^14*i*j^3*k^5,b^4*c^36*d^8*e*f*j^5,b^4*c^48*d*k^9,b^5*h^15*k^9,b^5*f^2*h^2*i^9*j^12*k^2,b^5*e^12*g^8*h^9*i^2,b^5*d^27*g^2*h^14,b^5*c^3*d^6*e^4*f^3*g^8*h^2*i,b^5*c^24*d^16*f^3*i^4,b^5*c^31*g*h^5*i^4*j^6,b^6*d^2*e^2*f^6*g^3*h^11*j^3,b^6*d^3*e^17*f^2*g^2*i^2*j^4,b^6*c^6*d^17*e^5*g*j^8,b^6*c^9*e^10*g^7*i^4*k^3,b^6*c^11*d^27*g,b^7*d^11*e^6*f^4*i^10,b^7*e^7*g^3*i^13,b^7*d^4*g^3*i^12*k^3,b^7*d^35*f^2*i^7,b^7*c*f^10*i^3*k^12,b^7*c*e^33*g*k^2,b^7*c^32*e^14*f*i^6,b^7*c^34*e*f^7*i,b^7*c^41*e^2*h^2*i^4,b^7*c^46*i^3*k^3,b^8*d^11*e^2*g^2*i^3*j^11*k^2,b^8*e^8*i^23,b^8*e^9*f^15*j^6*k,b^8*h^2*j^10*k^2,b^8*e^2*f^7*g^4*k^10,b^8*f*g^18*j^7,b^8*g^3*h*j^4*k^11,b^8*c^9*d^17*e^26*k,b^8*c^21*d^11*e^8*f^4*g^8,b^8*c^28*e^9*g^13,b^9*f*g^15*h^13*k,b^9*e^6*f^3*h^5*i^5*j^8,b^9*f^17*i^4*k,b^9*d^8*f*h^9*i^2*j^4*k^2,b^9*c^4*d^9*e^5*g^4*h^3*i^5,b^9*c^8*e*f^6*h^7*j^7,b^9*c^9*d^19*f^6*g^4*i^4,b^9*c^16*d^2*g^9*h^2*i^7,b^9*c^53*h^5,b^10*d^19*g^8*h^2*j^5,b^10*e^8*f^3*g^5*j^8,b^10*c^7*e*g^10*j^2*k^5,b^10*c^9*d^8*f*g^4*h^4*j^4,b^11*e^10*g^7*h^2*i^4*k,b^11*f^5*g*h^7*j^2,b^11*g^6*h^6*i*k^5,b^11*d^16*f^3*h^11,b^11*c^7*d^9*e^26*f^2*i^2,b^11*c^30*e^5*f^2*g^3*h^4*k,b^12*g^20*k^3,b^12*d^27*g^14*h^4,b^12*e^3*i^2*j^15,b^12*d^13*f^2*j^17,b^12*f^10*i*j^7*k^3,b^12*c^3*d^6*j^11*k^4,b^12*c^7*d^10*e^8*i^12*k^4,b^13*i^10*j^9,b^13*e^26*f*h^5*j,b^13*d^6*e^6*h^9*k^3,b^13*c^5*e*f*g^13*h^4,b^13*c^26*f*i*j^8,b^14*g^2*i^21,b^14*c^13*g^6*j^9,b^14*c^18*f^12*g^6*j*k,b^14*c^31*d^6*e^8*g^3*h^4*k,b^15*d^11*e^8*h*i^3*j^10,b^15*d^5*f^8*h*i^2*j^9,b^15*f^16*g^3*i^6,b^15*g^8*i^9*j*k^3,b^15*c*g^2*i^4*j^3,b^15*c^6*d^8*f^14*g^2*i^3*k,b^15*c^10*e^9*f^17,b^15*c^15*d^22*g*h^4*i*k^2,b^15*c^50*f^3*h^2*j^2,b^16*d^6*f^2*h^7*i^12,b^16*e^6*f^5*h^14,b^16*c^12*e^5*h^5*i^7*j*k^3,b^16*c^22*f*g*i^11,b^16*c^25*d^4*e^3*j^4*k^5,b^17*d^5*e^11*f^18,b^17*e^12*i^2*j^2*k,b^17*c*d^19*f^2*h^3*j^4,b^17*c^4*e^4*f^10*i*k^4,b^17*c^11*e^5*i^4*k^10,b^17*c^13*d^12*h^2*k^5,b^17*c^16*f^2*i^3*k^13,b^17*c^48*e^7*j*k,b^18*e^19*g^9*j^3,b^18*e*h^5*i^10*k,b^18*d^23*g^8*k^3,b^18*c^2*d^54*g^2*j,b^19*d^31*g^4*h^2*i^2*k^3,b^19*f*h*k^17,b^19*d^9*e^28*h*j^3,b^19*c^9*e^23*g^2,b^19*c^11*d^3*e^10*f^6*h*j^2,b^19*c^23*e^3*g,b^20*d^6*f^4*g^5*j*k^10,b^20*i^20*j^2,b^20*d^11*f^8*h^8*i^2,b^20*c^7*d^12*i^17,b^20*c^11*d^4*h^7*i^4,b^21*d^5*e^7*g^11*h^7,b^21*d^15*g^11,b^21*c^5*d*e^5*i^5*j^9,b^21*c^17*i^7*j^3*k^3,b^22*h^18*k^3,b^22*c^5*d^2*i^15*k^3,b^22*c^9*e^21*h^5*i^2*k^2,b^23*g^8*h^11*j*k,b^23*c^10*d*f^2*j*k^14,b^23*c^24*e^4*h*j^11,b^23*c^29*d^9*f*j^3,b^23*c^36*g^2*i^2*j^5,b^23*c^41*d^2*g^2*i*k,b^24*f*g^7*j^6*k^8,b^24*e^3*f^3*g*h^16,b^24*c^3*e^5*f^5*i^10*j,b^24*c^15*i^12,b^25*f^3*g^3*i^4*k^8,b^25*d^27*f^9*j^2*k^3,b^25*c*e^9*j^11*k,b^25*c^2*e^5*g^13*i^7,b^25*c^6*e*f^8*j^3*k^4,b^26*f^16*h^5*i,b^26*c^27*d*f^7*i^4,b^27*d*g^4*h^5*j^8,b^27*d^10*k^15,b^27*g^9*h^4*j^2*k^3,b^27*c^2*d^18*e^21,b^27*c^25*g^6*h^2*j^5,b^28*e^6*f^12*h^3*k^2,b^28*e^9*g^3*h^5*i^4*j^3,b^28*c^4*e*f^14*g^3*i^3,b^29*d*e^13*f^9,b^29*e^6*f*g^2*k^9,b^29*d^25*f^7*k^4,b^29*g^16*h^2,b^30*d^9*e^2*f^11*h^3*i^2,b^30*c^13*e^5*h^12,b^31*e^12*g^3*h^5*j,b^32*d^7*e*h^12,b^32*e^6*f^7*g^5*i*k^3,b^32*g^4*h^11*k^4,b^32*c^7*h^3*i^5*j^7*k,b^32*c^12*f^7*i^4*k^4,b^33*e^7*j^8,b^33*d^7*f^4*k^2,b^33*c^6*g^3*i^2*j^2*k^8,b^34*g^8*h^3*i^7*j,b^35*c^6*d^12*e^5*j^8,b^35*c^18*d^5*g^4*j^2,b^36*f^10*g*i^4,b^36*c^4*g^6*i^7*k^2,b^36*c^6*d^13*h^5*i^2,b^37*f^2*g^5*j^5*k^4,b^37*f^5*g*h^2*j^4*k^4,b^37*c^17*d^13*i^4*j*k^4,b^38*c^4*d^3*e^16*h^3,b^38*c^16*g^7*h^3,b^40*c^59*i,b^41*c*f^2*g^3*j^9*k^2,b^41*c^15*g^2*j^5*k^6,b^42*d^5*e^4*f^2*h^7*k^5,b^42*f^4*i^4*j^3*k^2,b^44*e*f^6*h*j^4,b^44*c*k^9,b^44*c^13*f^6*g^5,b^44*c^20*e^20,b^45*d^3*e*g^5*k^7,b^45*d^34*f*j*k^2,b^46*d^18*f^5*h,b^46*d*g*h^7*i^3*j*k^4,b^46*d^11*g*i^2*k^7,b^46*e^25*f^4,b^46*c^11*e^5*f^2*k^3,b^48*d^8*e^26*f*k,b^48*d^16*g^2*h^10*j,b^48*e*f*g^8*k,b^48*c^7*d^5*f*i^2*j^5*k^2,b^49*d^16*g*j^6,b^49*d^8*e^28*f,b^50*d^24*i^5,b^50*c^17*f^5*j^3,b^52*d^8*f^4*g^4*i^2,b^53*g^4*j^10*k^2,b^54*e^23,b^54*d^12*e^11*h*j,b^54*c^4*d^22*e^3*k,b^54*c^11*d^5*e^4*g*k^7,b^55*c*f^2*h^7*i*k^3,b^56*g^13*k,b^58*g^2*i^2*j^9,b^58*c^2*d^3*h^7*k^3,b^58*c^8*d^4*e^9*i^5,b^60*d*j^4*k^7,b^60*c^8*g^8*j^3,b^61*c^3*d^17*e^4*i^6,b^62*c^6*g*j^2*k,b^63*e^9*i^5,b^63*h^3*i^2*k,b^64*c^18*f^6*g^2*j^2,b^65*e^18*h*k^4,b^65*c^4*f^2*g^4*h,b^65*c^18*d*g^3*h^5,b^67*i^10*j,b^69*e^11*i^3*j^2,b^69*c^12*d^20*k,b^71*c^22*d^4*e^2,b^73*d^23*g^2,b^79*d^2*h*j^2,b^88*c^3*i^8,b^90*c^15*d^5,b^100*d^3*f^2,b^103*c^15*d*g^4,b^108*g^4,c^4*d*e^4*f^6*h^6*j^8*k^3,d^47*e^2*f^2*h^2*j^5*k,d^10*g^3*h^4*j^14*k,d^4*f^18*i^7*j^4,e^28*f^2*h^7*j^5,c^9*d^16*e^8*h^11*j*k^2,c^13*e^14*i^5*j^6,c*d^6*e^3*h^7*i^13,c^37*d^6*e^5*g^6*h^2,e*g^13*h^13*j^5,d^27*e^4*f^6*j^5*k^5,d^20*i^2*k^14,d^11*e^15*f^10*g^2*j^3,c^2*d^17*e^3*g^4*h^14,c^13*d^17*e*f^5*g^3*i^2*j^4*k,d^9*f^3*g^10*h^2*j^9*k^3,c*e^16*f*i^5*j^6*k^4,c^3*d^9*e^3*f^7*h^3*j^8,c^15*d^2*h^2*i^2*j^2*k^8,c^4*d^44*f^2*g^4*j^5*k,e^12*g^7*i^8*j*k^2,c^25*e^7*f^3*g^3*k^2,c^8*e^4*h^14*i^8*j^2,c^12*e^14*g^17*j,d^5*e^3*f^2*g^13*i^2,c^8*d^26*g^6*j^10,e^32*g^6*k^3,d^26*e^19*f^4*h^3,c^31*f^6*i^2*j^7,c^17*e^2*f^2*g*i^15,c^31*i^12*k^4,d^55*e*f^3*i*j^5,c^8*d^48*i^3*k^6,f^2*i^2*k^18,c^4*d^8*e^25*f*g^2*i^3*j,c^18*d^32*e^5*g,d^16*e^14*f^3*i^11,c^53*e^2*i^4*k^5,d^5*e^5*h^7*j^7*k^4,c^2*g^18*h^2*j^4,e^5*f^4*g*h^12,c^2*g^6*h^11*i^2*k^7,d^18*f*h*j^14,c*e^3*f^9*i^2*j^4*k^5,h^3*i^11*j^6*k^2,c^33*h^5*i^2*j^5*k^2,c^8*d^2*e^9*f^5*g*j^12,c^20*e^2*g^6*j^6,e^11*f*g^3*h*i^8*j^4,d^10*f^7*h^6*i^3*j^6,c^8*d^3*g^2*h^5*i^5,d^51*e^3*h^3*j^4*k^2,d^14*g^16*j,c^6*e^20*h^3*i^3*k^3,c^6*e^9*f^11*g^4*h^4*j^4,c^8*d^24*e^7*f*h^8*j,d^35*e^14*g^3*h*j^2,d^43*e^3*h^8*i,c^26*d^9*g^3*i^10*j*k^2,c^30*d*e^11*g*h^5*k,c^61*i^4*j^4,d^11*f^3*g^5*h^4*k^12,h*i^21,c^18*d^9*h^12*i^5*k,c^12*d^6*e^13*i^6*j^6,c^36*g^10*i^7,d^9*j^5*k^16,d^14*e^2*h^4*i^14,c^4*d^27*e^12*f^9*g^5,c*d^49*h*i^6,c^3*f^3*i^2*j^2*k^12,c^36*d^14*e^4,d^24*f^6*g*j^5*k^5,c^22*e^6*h*i^13,d^8*e*f^10*h*i^3*j^3*k,d*f^2*g^3*i^5*k^10,d^40*e^7*f^7*g^2*i*j,c^11*d^33*g^7*i^3,c^13*e^9*f^7*k^6,c^15*f^13*h^3*j^2*k,f*h^17*i^3*j^4,e^30*f^6*i*j^2*k^4,d^22*e^10*f^4*h^3*k^8,d^6*g^4*h^10*j^5,d^16*f^12*g^4*h^3,g^9*h^9*k^5,d^30*g^3*h^14*j,e^6*g^3*i*j^18,d^6*f^3*g^3*j^10*k^3,d^4*h*i^9*j^12,e^29*h^8*j^4,e^14*g^2*k^11,c^2*d^30*e*f^6*h^5*k^6,c^7*e^4*g^16*h^7,c^28*h^3*j^11,d^4*e^18*h^15*i^4,c^7*f^12*i^10*j,d^19*f*h^4*i*j^12,f^9*g^6*i^5*j^2,d^28*i^3*k^10,c^3*d^12*g^5*h^3*i^3*j^6,c^7*d^4*e^20*g^3*h^10,c^8*d^22*f^7*g^5*i^2*k,g^2*h^6*i^14*j^4,d^12*e^9*h^17,f^6*g^2*h^7*j^8*k^5,e^27*f^5*i^3*j,c*d^2*e^15*h*i*j^5*k,c*d^3*e^4*f^5*g^7*h^2*j^10,c^6*d^12*e^7*f^3*k^4,c^8*d^43*f^9,c^13*e^8*g^3*i^3*k^10,c^13*g^12*h*j^4,c^15*d^26*h^5*j*k^5,c^18*d^5*g^3*i^2*k^13,e^9*i^13*k^9,d^23*e^14*g^12*k^2,f^16*k^11,c^30*d^20*f^5*g^4*k^2,f^4*h^12*i^3*j*k^8,e^15*g*h^6*i^6,c*d^25*e^2*f*h^11*i,c^4*d^4*e^7*f^9*g*i^5,c^13*d^18*h^10*i^3,c^16*f*g^6*i^7*k^7,d^4*e^3*f*g^5*h^5*j^2*k^6,e^4*g^29,d^29*e^2*g^14*h^3,c^4*f^4*g*h^7*j*k^6,c^10*e^13*i^8*j^2*k^2,c^19*d^8*e*i^6*j^6*k^3,g^3*h^9*i^2*k^11,d*f^6*h^14*k^6,f^5*j^14*k,d^58*g^3*i^4*j^3,j^8*k^10,c^34*d^2*e^4*f^2*g^6*i^2,c^43*d^16*g^5*k,h^5*i^8*j^2*k^10,c^2*f^10*g^4*h^12,c^5*d^7*e^8*i^9*j^4,c^17*e*g^2*i^11,c^22*d^10*f^4*g^2*i^10,c^54*e^3*f*h^2*j^3,c^66*h*i^2,d^17*f^4*g*i*j^9,d^2*e^23*g^4*h^5*k^7,e^11*f^9*j^12,d^12*e^9*h*j^9*k^8,c*e^3*f^23*j^4,c^8*e^4*f*g^3*j^6*k^4,c^10*d^6*f^7*h*j^8,c^13*f^15*g^3*k^7,c^22*g^2*j^2*k^8,g^3*h*i^14*j*k^4,f^11*h^4*i^3*j^6,f^3*h^3*i^5*k^4,d^14*f^9*h^8*j^2,c^5*h^14*i^3*j^4*k^5,c^10*d^7*f*h^7*i^2*k^8,c^29*d^15*g^3*h^2*i^3,d^7*e^25*j^8*k^2,e^18*i*j^2*k^11,d^31*e^5*h*j^4*k^6,g^13*j*k^2,d^24*k^15,d^25*f^6*g^7*h*j^3,d^18*g^12*k^6,c^18*d^56*e^4*g^2,c^32*f^3*g^9*k^2,d^2*f^2*g^9*h^3*i^8*k^2,e^22*h*i^3*k^7,d^4*e^9*f^5*h^6*j*k^2,c^6*e^4*f^7*g^6*h*i^2,c^8*e^2*h^5*k^11,c^8*f^13*h^6,c^27*d^5*e^28*i,d^50*e*g^3*h*k^4,e^29*g^6*k^5,d^15*e^16*f^2*j^2,d^8*e^9*g^5*k^9,d^9*f^10*g^14*j,d^39*h^3*k^4,c^7*d^2*f^2*g^19,c^14*f^4*j^13,c^28*d^12*f^2*j^9*k,e^18*g^2*h*i^6*k^5,d^23*e^5*f^4*h^6*i,d^6*e^6*g*h^12*i^4*k^6,d^16*g*h^5*i^3*k^9,c^2*f^6*i^8*j^7,c^6*e^20*f^9*h^4,c^14*i^10*j*k^6,c^18*e^13*f*h^3*k^5,c^20*d^12*f^7*h^8,d^34*e^12*f*g^10,c^2*h^3*i^18*k^6,c^3*d^31*f*g^8*j^4,c^7*d^23*e^7*f^4*g^6*h,c^36*e*g^11*j^5,d^21*e^4*g^2*h^15,e^9*g^8*h^3*k^3,d^31*f^6*g^2*h^8,e^15*f^2*i^6*j^6,c^2*d^17*e^2*f^8*i*j^8,c^14*d^10*i^3*j^2*k^4,c^24*f^2*g^7*i^7,c^26*d^4*f^8*g*i^2*j,e^4*f^4*h^2*i^14,d^7*e^14*f^13*g^2*k,d^11*e^10*g*j^11,e^15*g^7*i^3*j*k^7,h*i^16*k^9,c*d^21*e^2*g*j^3*k^2,c^3*d^52*f^3*j^5,c^10*d^35*h^3*j^7*k^3,c^11*g^21*i^2,c^15*d^45*k^6,d^5*e^11*f*i^9*j,d^19*h^6*i^7*j^5,e^4*g^3*i^11*k^7,d^29*i^6*k^2,c^12*e^24*i*j*k^7,c^24*e^6*f^4,c^29*d^4*f^18*k,c^36*i^2*k^7,e^2*h^3*j^13*k^6,f^2*g^3*k^18,c^10*e^8*i^13*k^3,c^11*d^5*e^13*f*g^8*j,c^13*d^36*f^7*g^2*j^3,c^25*d^29*g^7,e^3*f^14*i^3*j^3*k^5,d^2*h^10*i*j^7*k^6,d^20*e^9*f^11*i*j,d^50*e^7*f*h^2,d^3*e^10*g^4*h^4*i^4*j^3,d^34*h^9*j^5,d^13*e^2*f^3*g^4*i^3,c*d^43*h*i*k^9,c*d^44*f^9*h^2,c^3*f^17*h*j^2*k^5,c^6*e^3*g^9*h^3*i^6*k^2,c^8*d^27*g^3*h^8*i,c^10*h^7*j^4*k^11,c^11*d^6*g^9*i^5*k^5,c^13*d^37*f*g^3*h,c^46*e^10*g^6*k,c^48*d^2*f^6,d^61*e^14,d^24*e^9*g^18,d^2*g^4*h^5*j^7*k^4,c^3*d^6*e^18*g^3*h^10*k^4,c^4*d^12*f^12*g^4*k^7,c^5*d^3*e^8*g^3*i^6*j^8,c^6*i^19*j*k^2,c^7*d^34*i*j^10,c^18*d^9*e^30*j^4,c^31*h^13*i^3,c^54*e^3*j^7,e^2*f^2*g*h^8*j^5,f^16*g*h*k^3,g^6*h^7*k^9,d^10*h^12*j*k^4,e^39*h^2*i^2*j^2,d^11*i^14*j^2,d^3*e^31*i,d^34*e^18*f^5,c^9*e^13*f^7*g^11,c^18*d^11*e*g^10*h^6,c^21*e^6*g^16*i^2,c^37*i^6*j^9,c^42*i^5*j,b*d^7*j^20,b*e^4*h^17*k^9,b*d^10*f^5*j^6*k^11,b*c^8*f*h^12*i^2*k^5,b*c^29*d^11*g^9*j^2,b^2*d^5*f*g^11*h^8*i,b^2*i^9*j^12*k^4,b^2*d^15*f*h^4*i^4*j^14,b^2*e^6*g^13*h^5*k^3,b^2*f^4*g^7*h^10,b^2*d^16*e^3*i^7*j^10,b^2*c^5*d^26*f^6*i^6*j^2,b^2*c^7*d^56*i^4*k^2,b^2*c^12*d^9*g^5*i^9*j^4,b^2*c^16*h*j^11*k^4,b^2*c^16*d*e^30*g^3*h^4,b^2*c^49*d^5*j^9,b^3*d^5*f*g^21*h^3,b^3*d^2*f^6*g^3*h^17,b^3*e^6*f^3*g*j^18,b^3*d^3*f^2*g^2*i^19,b^3*d^67,b^3*g^7*i^22,b^3*c^3*g^6*j^12*k^2,b^3*c^5*d^15*f*j^14,b^4*e^8*g^3*i^6*j^10,b^4*f^5*h^2*i*j^12,b^4*d^8*f^3*i^3*k^14,b^4*d^9*f^19*j^4,b^4*g^2*h*i^3*j^6*k^2,b^4*d^23*f^3*h^6*j^8,b^4*d^2*f^11*g^2*i^2*k^5,b^4*e^14*f^14*h*k^4,b^4*c^3*d^16*e^24*f^2*i^4*j,b^4*c^5*d^16*g*h^5*j^2*k^6,b^4*c^15*d^9*e^17*i^6*k,b^4*c^26*e^3*f^2*j^9,b^4*c^31*f^16*j*k,b^5*f*h^4*i^14*j^4,b^5*d^19*e^5*g^2*k^12,b^5*d^3*g^16*j^7,b^5*e^4*g*h^14*k^10,b^5*d^8*e^3*g^3*h^3*i^12*j^2,b^5*c^12*e^5*g*h*i^10*j*k^3,b^5*c^14*f^4*h^6*i^5*j^3,b^6*d^49*e^8*g^2*i^5,b^6*e^17*i*j^5*k^5,b^6*d^13*e^4*h^4*j^7,b^6*d^59*g^2*i^4,b^6*e^9*f^7*k^8,b^6*c*f*g^9*j^4,b^6*c^3*d^6*h^3*j*k^9,b^6*c^3*d^7*f^7*g^3*h^4*j^6,b^6*c^6*e^2*i^2*k^17,b^6*c^15*g^8*h^3,b^6*c^22*d^14*e^23*j^3,b^7*e^6*h^6*i^9*k^5,b^7*d^21*f*h^11*i^4*j,b^7*d^15*f^9*h^11*i^3,b^7*c^2*d^11*g^22*j,b^7*c^3*d^8*f*g^4*h^10*i^5,b^7*c^7*e^2*f^4*g^2*h^17,b^7*c^36*g^7*h^3*i^4*k,b^8*d*e^13*g^5*i^4*k^3,b^8*d^32*h^4*j^2,b^8*d^19*g^18*h^3,b^8*g^4*i^11*j^11,b^8*d^5*i^6*j^13,b^8*e^28*g^2*j^3,b^8*c*e^15*f^3*h^2*j^5,b^8*c^6*d^7*e^7*f^17,b^8*c^13*e^8*g*h*k^3,b^8*c^18*f^9*g*k^6,b^9*d^9*e^2*g*h^6*i^12*k^3,b^9*f*g^5*j^4*k^14,b^9*e^17*h^4*i^6,b^9*d^5*e^4*f^5*h^9*i,b^9*c*h^8*i^3*k^3,b^9*c^2*d^32*e^2*g^9*j^2,b^10*d^9*e^4*g^11*h*k,b^10*e^10*i^4*j^12,b^10*d^5*e^2*f^10*i^3*j^4*k,b^10*c^7*e^3*i^6*j^6*k^7,b^10*c^9*d^19*i*j^8*k^2,b^10*c^12*f^2*i^5*k^10,b^10*c^37*g^7*h^3*k,b^11*d^3*i^12*j^6,b^11*f^6*g*i^11*j^5,b^11*d^30*g^4*j^9,b^11*c^7*g^6*i^13,b^11*c^8*d^3*e^3*h^18*j,b^11*c^11*e^8*f*g^4*h^6,b^11*c^16*f^15*g^4,b^11*c^20*g^3*h^17,b^11*c^25*d^6*g^3*h^10*k,b^12*c^19*d^3*e*j^6,b^13*c^5*e^3*i^11*k,b^13*c^7*d^11*h^2*i^6,b^13*c^19*d^4*h*i^8*k^5,b^13*c^54*i^2*k,b^13*c^56*f^3*h^4,b^14*d^21*f^6*h*j^5*k^7,b^14*d^14*g^2*k^16,b^14*d^12*e^5*g^7*h^2*i^2*j^9,b^14*h^4*i^19*k,b^14*d^22*g^7*i*j,b^14*c*d^5*g^12*h*i^4*j^3,b^14*c^43*d^11*g^3,b^15*c^5*d*e^19*i^4,b^15*c^17*e*f^4*i^3,b^15*c^29*g^5*i^5,b^16*g^4*h^6*j^11,b^16*d^4*k^19,b^16*f^2*g^9*k^10,b^16*d^12*e^26,b^16*c^4*d^6*e^8*f*g^14,b^16*c^6*d^36*e^6*k,b^16*c^16*e*g^19,b^16*c^22*f^13*h*j^2*k,b^17*d^14*f^3*g^10*i^6,b^17*e^6*f^11*g^3*i^2*k^2,b^17*f^17*h^4,b^17*c^3*g^2*h^10*j^2*k^3,b^17*c^41*d^2*e^3*h*k^6,b^18*d^30*e^3*f*k^8,b^18*e^18*f^6*j^2*k^4,b^19*c^4*f^8*i^5*j^3*k^5,b^19*c^4*d^28*e^6*g^2*h^2*i,b^20*f^7*g^6*i^3*j^8,b^20*e^17*g^3*h^6*j^4,b^20*d^3*e^9*f^8*g^3*k^2,b^20*c^10*d^18*e^12*g*i^4*j,b^20*c^35*g*h*j^11,b^20*c^39*e^3*h^6*i^5,b^21*d*e^6*h^13,b^21*d^11*f^10*h^6*k^2,b^21*c^2*f^4*i^3*j^2*k^8,b^21*c^14*f^12*i^2*j,b^22*d*e^4*f*j^3*k^6,b^22*d^32*f^7*j^5*k,b^22*d^15*h*j^7*k^7,b^22*c*g^3*k^15,b^22*c^3*d^25*k^10,b^22*c^21*e^5*i^14,b^23*d^9*f^3*i^6*k^6,b^23*c^12*e^8*f^8*k^2,b^23*c^14*d^5*f^14*j^2,b^23*c^21*h^6*j^4*k^3,b^23*c^31*g^10*h*i^2*j,b^23*c^57*e^7,b^24*d^6*e^10*j^11,b^24*c^8*e^3*g^4*j^5*k,b^24*c^13*d^9*f^3*g^4*k^4,b^25*e^12*g*h^2*i^4*j^3,b^25*d^14*h^7*j^5,b^25*e^4*f^7*g*i^3,b^25*d^7*h^6*i*k,b^25*c*d^17*f^5*k^4,b^25*c^8*d*g^14*h^6,b^25*c^31*e^7*h^4*j^2,b^26*c^20*d^14*e*g^5*h^2*j^5,b^27*e^21*h^4*k^4,b^27*e^10*f^3*g^2*h^5*j^3,b^27*d^7*e^13*f*k^7,b^27*c^6*e^3*g^7*h^4,b^27*c^11*d*f^9*g^7,b^28*c^17*e*g^6*j^2*k^2,b^29*d^6*f^10*i^6*j^2,b^29*g^2*i^9*j^4,b^29*c^2*d^20*i^4*j^6,b^29*c^14*d^13*g*i^6*k^3,b^30*c^23*e^2*i^11*j,b^31*f*i^3*j^6*k^6,b^31*c^5*d^20*e^6*f^4*i,b^31*c^12*d^4*g^3*i*j^4,b^31*c^24*g^8*i^3,b^32*d^12*h^5*i^9,b^33*e^6*f^3*h^2*j^7*k^4,b^33*e*f^5*g^6*j^4,b^33*h*j*k^13,b^33*f^11*h^2*j^6,b^33*c^3*f^3*g^5*h*k^4,b^35*d^12*e^2*f^2*h^2*j^2*k^2,b^35*d^5*g*h*i*k^11,b^35*d^37*e*g^5,b^35*c*e^10*k^7,b^37*e^6*g^8*k^5,b^37*i*j^8*k^6,b^37*c^9*f^6*g*j^7,b^39*g^14*h*k^3,b^39*c^7*e^3*f^2*j^6,b^39*c^19*k^9,b^39*c^21*d^7*j^2*k^4,b^40*f^4*i^6,b^40*c^7*i^8*k^9,b^41*d^2*f*g^4*i*j,b^41*d^26*g^3*k^2,b^41*c^31*f^4,b^42*d^10*f^3*i^9,b^42*c^17*g^2*i^5*k^3,b^42*c^19*f^6*h^2,b^43*e^28*k,b^43*d^16*e^8*k^5,b^43*c*g^10*h^2*j^3,b^44*c^13*i^11*j*k^2,b^44*c^17*e^12*f^2*k,b^46*d^8*e^8*f*i,b^47*d^29*e*j^3,b^49*g^8*j^6*k^2,b^49*c^10*d^13*e^12*f^2*j,b^49*c^22*d^6*e^5*g^4*k,b^50*e^4*g^6*h^11*k,b^50*d^21*e*f^4*i^4,b^50*c^5*d^4*e^2*i^7,b^50*c^10*d^14*i^6*k,b^52*h^4*i*k^5,b^53*e*g^11*k^3,b^53*c^8*e^3*f^3*g^2*j^5,b^54*e^5*g^4*h^2,b^54*c^8*g^3*h^6*k^3,b^55*f*h^9*i^6,b^55*c^2*j^12,b^56*i^4*j^6,b^58*c^12*g^5*i^3*k,b^58*c^14*d^8,b^60*c^12*e^7,b^62*d^17*e^3*g^2,b^63*c^22*h^2*i^3*k^2,b^66*d^30*i^2*j,b^68*e*f^5*g*i*j*k^2,b^68*d^6*f^3*k^6,b^75*d*h*i^7*j^4,b^79*c^5*e^2*h,b^89*e^5*k,b^91*d^5*f*g^5,c^8*d^2*e^11*f^8*i^3*j*k^7,d^29*f^5*g*h^3*j^2*k^7,d^11*e^8*g^4*h^15*j^2,c*d^3*e^6*f^8*g^6*i^6,c^5*e*h^3*i*j^5*k^12,d^22*e^4*f^3*g*h^4*i^2*j^6*k,d^15*g^6*h^3*i^4*k^10,c^15*e^12*g^3*h*j^3*k^6,e^8*g^13*h*i*k^4,c^15*d^3*f^12*h^11,c^21*e^5*f^3*i*j^10,c^7*e^7*g*i^14*j^2*k^4,c^9*d*f^5*h^2*i^9*j^4,d^12*e*f^2*g^9*i^4*j^5,c^31*f*g^7*i^8*k^2,d^2*e^30*g^2*i^2*j^4,d^10*e^19*i^10,d^2*f*g^3*k^20,e^10*f*g*h^13*j^2*k^2,d^15*h^17*k^6,f^8*i^9*j*k^9,d^7*g^9*h^8*i^6*j^4*k,c^4*e*f^3*g^7*h^15,e^14*f^2*g*j^15,d^14*f^18*i*j,g^2*h^6*i^4*j^3*k^4,c^3*d^7*f^10*g^2*i^3*k^7,c^8*e^7*g^9*h^4*i*j,c^13*f^14*g^9*k,d^37*e^8*h^9,c^4*d^10*i^7*j^10,c^8*d^2*e^23*f^2*h^7*j^2,c^16*d^3*g^3*i^9*j^4*k^6,c^20*e^16*g*h^6*k^5,h^2*i^20*j^2*k^2,c^8*d^3*e^5*h^13*i^4*k^5,c^2*e^18*i^5*j^9,c^2*d^2*f^5*g*h^5*i^12*j^2,e^3*h*i*j^5*k^16,c^26*d^8*e^9*j^3,c^38*d*e^2*g^2*i*k^7,e^18*f*h^3*i^10*j,c^12*e^11*h^2*i^12*k^3,c^14*d^16*h^7*i^7,g^3*h*i^4*k^14,d^34*e^12*f^4*g^2*h*j^4,c*d^27*e^5*g^7*i^2,c^5*e*f^10*h^4*j^5*k^5,c^50*d^16*g^3*h^2,c^24*e^9*f^3*h^5*i^4,e^17*f^11*g^5*j^4,e^5*g^4*h^11*j^8,d^10*f^9*g^4*h^4*k^3,d^17*e^34,e^26*f^5*h^2*k^6,e^8*f^13*g^11*h^2,d^8*g^10*h^13*j^2,d^13*h^5*j^15,d^23*f^12*j^7,g^11*i^6*k^10,d^16*f^4*g^5*i*j*k^5,c^19*d^54*e^7,f^8*g^2*i^12*k,d^6*e^14*h^18*k,c^9*f^19*h^3*i*j^4,d^6*e^12*k^8,c^3*e^2*g^12*h^2*j^7,c^5*d^20*h^6*j^4*k^9,c^8*f^8*g^12,d^14*e*f^2*h^2*i^7*k^8,d^8*f^10*g^8*h^2*i^6,d^56*f^5*g^2*k,c^6*e^23*f^4*g^5*k^2,c^15*d^4*e^11*g^4*h^4*j^2*k^3,c^20*d^14*e^3*f^2*g^4*k^6,e^20*g*h^7*i^5,d^19*e^7*h^12*j^2,e^12*f^6*g*i^4*k^2,d^29*f^12*h^5,c^3*d^12*h^11*i^2*k^3,c^8*d^22*f^4*h^4*i*k^6,c^2*d^19*e^5*f^3*i^2*j^7*k,c^11*d^33*j^11*k^2,c^14*d^12*i^4*j*k^10,f^3*h^15*k^10,c*d^3*e^18*f^2*g^2*h^10,c^18*d^6*e^3*f^8*g^7*h^2,d^38*e*f^2*g^4*i^5*j^2,f^2*g^10*j^10*k^5,c^12*d^3*e^16*f^7*g*j^5,c^24*e^9*g^6*i*k^4,d*e^13*h*i^8*j^7,d^11*e^5*f^9*i^7,c^7*e^6*g^2*i^10*j*k,c^9*d^25*h^5*i^5*j^3,c^12*d^4*f*g^2*i^9*k^4,d^11*e*f*g*j^12*k^3,f^4*h^2*j^11*k^3,c^12*g^2*h*j^5*k^12,f^22*i*j*k^2,h^4*i^4*j^3*k^8,c^19*d^9*e^4*g^3*h^3*i^2*j,c^31*d^2*g^8*h^2*i^4,c^68*h^5,d^18*e^3*h*j*k^19,d^12*g^12*h*k^10,c^10*e^7*f^8*g^4*j^9,d^27*f^5*g^3*h^9*i^2*k,f^10*h^7*j^3,c^3*d^2*f^24,c^18*d^17*f^4*i^12,c^29*e^15*f*g^10*h,c^34*d^2*e^18*g*i*k^5,d^9*e^21*j^5*k^4,d^3*e^3*f^7*g^14*j^4,f^12*h^14*i^4,d^33*e*h^4*j*k^8,g^19*k^4,d^27*f^5*g^13*h^4,d^17*e^10*f*h^7*k^4,f^3*i^7*j^10*k,e^25*f^6*h^5*j^2,c^6*d^14*f*h^2*i^4*j^6*k^5,c^10*d^6*e^5*f^4*h^9*k^4,c^16*d^7*e^20*i^10,d*g^9*i^2*j^11,d^25*g^8*j^7*k^3,d^17*e^12*f*g^6*h^2*k^2,c^11*g*i^18,d^9*f^2*g^5*i^10*j^5,d*e^21*f^5*g^3*h^5,d^25*e*f^3*g^2*h^9*k^2,h^8*j^18,c^2*e^2*f^7*g^2*i^4*j^8,c^4*d^4*i^2*j^5*k^8,c^16*f^5*g*i*j^4,c^28*g^6*i^3*k^8,e^27*g^2*j^10*k^2,f^9*h^3*i^12*j^2,d^15*e^7*g*j^6*k^6,d^46*j^8*k,c^3*d^9*f^2*g^15*j^5,c^4*d^6*f^7*h^7*i^9,c^37*f^6*i^8,d^23*i^5*k^6,d^17*f^4*g^11*i^4,c^12*d^55*e^2*g*i^3,c^14*e^11*f*j^3*k^2,c^16*d^19*f^7*h^3*j^5,c^26*e^4*i*k^11,c^28*d^12*h^2*k^6,d^7*e^5*h^3*i^16*k^2,d^34*e^3*g^11*j*k^4,c^2*f^3*h^5*i^7*k^2,c^15*d^23*g^7*k^4,c^17*d^54*f^2*g*j^2,d^7*e^7*g^4*i^2,d^38*f^6*h^3,d^21*g^3*h^9*j^2*k,c^3*d^31*g^3*h^2*k^4,c^38*e^2*f^3,d^15*f^2*h^5*i^10,d^6*f^9*g^4*j^2*k^11,c^12*e^11*f^7*h^3*i^4,c^21*h^14*i^2,c^24*e^4*g^2*h^2*i^6*k^5,c^26*d^4*f^5*h^7*i,d^26*e^3*g^14*i^5,f^13*g*h^2*k^7,e^36*k^3,f*i^4*j^19*k,c*d^21*e^16*k^7,c^8*d^5*e^6*g^10*h^7,c^13*d^15*f^2*g^10,c^20*d*e^4*f^4*i^2*j^10,c^32*i^4*j^4*k^4,e^4*h^13*i*k^9,c^8*d^9*f^6*i^10*j^4,c^20*d^2*i^12*k^4,c^24*e^20*f*h^5*k^3,e^3*g^11*h^9*j^3*k^2,f*g^7*h^11*j^2*k^2,c^2*d^3*e*g^5*i^8*j^7,c^7*d^13*g^5*i^7*k^2,c^9*d^44*f*i^2*j,c^11*d^5*e^27*g^3*k,c^39*e^3*h*j^12,c^51*g*j^6,c^56*d^2*g*k^2,e^2*g^2*i^18,e^36*f^2*h*i^5,d^9*j^17*k,d^13*e^16*h^5*i^2*k,c^20*d^23*e^2*h*i^5*k^2,c^30*f^2*i^9,c^39*h^7*i^7,d^7*g^17*h^11,d^3*f^16*j^7,g^2*h^2*i^2*j^9*k^6,d^17*h^7*j^11*k,f^8*g^2*i*j*k^9,f^2*g^16*h^2*i*j^8,d^10*g*h^6*j^5*k^10,d^20*f^6*g*k^13,c^7*d^34*e^9,c^9*d^65*f^3*j^2,c^16*e^8*j^12*k^2,c^17*e^4*g^12*i^4,c^26*d^11*g^11*i^2*j,c^31*d^21*g^11*i,f^23*h*i*j^4,c^9*f^15*i^3*k^5,c^37*e^3*h^6*i^2*j^4,c^42*e^6*i^4*k^5,d^53*e^5*g^2*i^3,e^4*g^9*j^7,e^2*h^4*j^4*k^13,d*f^4*g^3*h^5*j^9,f^12*g^9*k^3,d^10*f^2*k^16,c^5*g^8*h^4*j^3*k^4,c^17*d^18*e^20*f,c^24*d*e^21*g^4,c^29*d^11*e^13*g^4*k^3,g^5*h^7*i^7*j,d^9*f^6*h^12*i^2*j^3,d^19*f^20*h^5*i,d^2*g^4*h^11*i^4*k^4,e^7*f*g^2*h^18*k^3,g^2*j^22,d^16*e^17*h^6*i^6,c^3*e^22*g*i^10,c^5*d^26*e^9*f^3*i^5,c^12*d^9*e^10*h^5*i^8,c^14*e^8*f^5*g^2*h^5*i*j^4,c^17*d^7*e^11*j^10*k^2,c^17*d^19*e^2*i^7*k^3,c^28*f^3*g*h^9,d^2*e^25*h*i*j^9,d^26*e^5*h^5*j^5*k^2,d^36*f^9*k^5,g^19*i^2*j^2,i^5*j^16,e^20*h^3*j^8,e^25*f^8*g^2*k^6,d*e^12*f^14*k,c*d^51*e^4*g^8*h^3,c^3*e^13*g*h^2*j^2*k^7,c^5*d^15*h^7*j^4*k^2,c^6*d^61*g^8,c^15*g^15*h^2*j,e^22*h^5*i^5*k^3,e^9*f^2*h^10*j^2,d^9*e*f^16*h^3*k,e^2*h^9*i^2*k^7,d^23*h^14*k^2,d^2*f^8*h^2*i*k^10,c^3*f^2*g^11*h^9*i,c^22*i^9*j^7*k^4,d^45*e*g^9*h^5*i,d^3*e^9*g^11*h^2*k^5,d^34*g^5*h^7,d^20*e^2*j^17,g^25*h^2,d^13*j^11*k^6,d^14*f^7*j^16,c^4*d^23*f^5*j^3*k^9,c^11*d^7*g^4*j^10,c^15*e^11*f^2*g^2*h^5*j^2,c^60*f^2*j^9,d^28*f^15*g^2*h^3*i^2,d^11*g^7*h^9*i^5*k^5,e^4*h*i^11*j^9*k^2,f^3*g*h*i^10*j^8,e^33*g^5*h^3*i^2,d^34*f^2*g^4*j^4*k^7,g^6*i^12*j^2*k^2,d^15*f*h^5*i^7*j^4,c*e^13*g^4*h^7*k,c^3*d^7*f^4*h^12,c^9*d^8*e^15*i^13,c^15*g^3*h^11*k^5,c^22*h^3*i^2*j^8*k^2,b*d^8*e^11*g*i^6*j^10,b*d^18*e^3*f^6*g*i^5*j^2*k^3,b*e^2*h^14*i^7*k,b*e^26*j^13,b*c^9*e^6*j^9,b*c^12*e^11*f^3*g^3*i*k^8,b*c^14*d^7*f^9*j*k^3,b*c^21*g^2*j^3*k^9,b*c^26*f*g^2*k^12,b*c^58*e*j^8,b^2*e^9*g^14*h^7*i^2,b^2*e^15*i^8*j^7,b^2*d^12*e^2*f^5*h^4*i^3*j^9,b^2*d^5*h^3*i^5*j^3,b^2*f^5*i^9*k^8,b^2*c*e^29*h^10,b^2*c^9*h^2*i^7*k^9,b^2*c^9*f^5*g^7*h^3*i^4*j^2,b^2*c^32*e^10*f^2*h*j^6,b^2*c^44*e^3*i*k^5,b^2*c^46*h^5*j^2,b^3*e^3*f^5*j^12*k^7,b^3*d^16*e^2*g^7*j^4,b^3*d^9*g^12*i^2*k^7,b^3*d^40*g^6*k^2,b^3*j^5*k^16,b^3*c^21*d^12*e^4*f^5*j^9,b^3*c^33*d^5*g^3*j^3,b^4*e^24*h*i^3*j^2*k^3,b^4*e^13*f^9*h^2*j^7,b^4*d^6*e^5*f^23,b^4*c^5*e^19*g^6*i^7,b^4*c^7*e^6*f*h*i^2*j,b^4*c^9*d^20*f^7*h^6*j^3,b^4*c^12*f^15*i,b^4*c^16*d^3*h^12*j^5,b^4*c^19*g^5*i^4*k^3,b^4*c^21*d^13*h^5,b^4*c^54*e^14*g^2,b^4*c^56*e*f^4*h^3,b^5*f^7*g^4*j^6*k^5,b^5*d^6*e^31*j^3*k,b^5*d^16*e^23*f^4*k^4,b^5*e^8*g^2*h^3*i^15,b^5*e^13*g^14*j^2,b^5*d^31*f^4*g^8*j^4,b^5*d^7*f^17*h*i^9,b^5*c^8*d^24*g^13,b^5*c^12*f^10*h^2*j^5*k^5,b^5*c^27*d^3*i^2*j^10*k^2,b^5*c^42*e^3*h^5*i^6,b^6*d^7*f^9*h^7*i^2*k^5,b^6*d^8*e^2*g^10*h*i^5,b^6*e^11*f^8*g^3*i*j*k^6,b^6*d*g^15*i^7*k,b^6*d^32*g^9*h^5*i^2,b^6*f^6*g^2*h^4*k^10,b^6*c^6*f^8*i^12*k,b^6*c^10*e^27*f^11,b^6*c^15*d^11*i^10*j^4*k^2,b^6*c^19*d^3*e^15*h^3*k,b^6*c^31*f^3*g^6*h^3,b^6*c^64*i*j^3*k^2,b^7*d^7*f^9*g^10*h^2*k^3,b^7*e^24*h^6*i^8,b^7*d^21*e^29*g*j^3,b^7*c^2*d^22*g^8*i^5*j^5,b^7*c^7*d^11*e^4*h^10*i^5*k,b^8*e^31*g^3*i^3,b^8*d^29*e^18*f^2*h^4,b^8*d^22*e^11*g^2*h^3,b^8*c^13*d^2*f^4*i^5*j^8,b^8*c^25*g*i^7*j^2,b^9*e^14*f^5*g^3*k^6,b^9*e*i^18,b^9*c^13*d^3*h*i^15,b^10*f*g^13*h^14,b^10*h^5*i^2*j^12,b^10*c^2*f^3*g^4*i^6*j^2*k^8,b^10*c^4*f^9*i*j^4*k^3,b^10*c^4*d^6*e^22*g^9*h,b^10*c^25*d^16*e^8*j^3,b^11*e^9*j^6*k^10,b^11*e^2*g^3*k^19,b^11*f^6*g^12*j^5*k,b^11*d^19*j^2*k^14,b^11*c^5*d^13*f^4*g^11*j*k^5,b^11*c^11*e^10*i^13,b^12*d^3*i^5*k^10,b^12*f^8*g^8*i^4*k,b^12*d^3*e^2*g^5*h^16*k,b^12*d^4*e^17*g^4*i^8,b^12*d^35*e^4*i^3,b^12*c^2*e^13*f^5*j^3*k^6,b^12*c^4*f^11*h*j^5*k,b^12*c^7*d^18*e^5*g^3*h^3*i^6,b^12*c^14*f^13*g^5*j^2,b^12*c^35*e^19*f^2*j,b^12*c^47*e^12,b^13*d^12*e^6*i^16,b^13*e^20*f^2*g^5*j^4*k^4,b^13*d^10*e^7*f^8*j^6,b^13*e^8*g^4*j^8*k^5,b^13*c^3*d^3*g^4*k^8,b^13*c^35*d*e*h*i^7,b^14*e^9*f^4*g*i^2*k^4,b^14*d^18*f^10*h,b^14*g^15*h^3*i^2*j^5,b^14*d*h^7*j^2*k^5,b^14*d^11*f^2*k^8,b^14*g^14*h^7*j,b^14*c^10*d^19*e^15*f*g^5,b^14*c^26*e^4*f^7*k^4,b^15*e^13*f^11*h*i^4,b^15*c^2*f^17*h^6,b^15*c^9*e*h^12*i^2*k,b^15*c^11*d^5*f*h^17*j,b^15*c^15*d^18*f^10*g^5,b^16*d^8*e^25*f^6*k^2,b^16*e^15*g^2*h^6*j^6,b^16*d^2*e^7*f^14*g^2,b^16*e^8*g^7*h^5,b^16*d^16*g*h^10*j^2,b^16*c*f^6*g^7*k^2,b^16*c^34*i*k^12,b^17*d^3*f^8*g^3*h^5*i^4*k^2,b^17*c^7*e^6*g^6*j^5*k^6,b^17*c^9*d^16*f^3*j^7*k,b^18*e^2*f^7*i^5*j^5,b^18*e^3*g^2*i^8*j^7*k^3,b^18*g^2*i^7*k^6,b^18*d^24*f^5*i^2*j*k,b^18*c^8*e^6*f^2*g^8*h^8,b^18*c^9*d^17*g*i^4*k^10,b^18*c^13*d^9*e^9*k^9,b^18*c^44*f^2*k^6,b^19*c^8*d*g^9*h^14,b^19*c^8*d^3*e^4*f^4*i^5*k^6,b^19*c^15*h^6*i^5*j^6,b^19*c^20*f^12*i^4,b^19*c^27*h^5*i^7*k^3,b^20*d^14*e^11*f*k^4,b^20*c^2*e*g^3*j^7,b^20*c^4*d^28*h^3*j^4*k^5,b^20*c^4*d^29*f*h^4*j^9,b^20*c^16*d^22*g^2*h^3*j^3,b^21*d^6*h^6*i^8*j,b^21*c^2*g^4*h^5*i^10*k,b^22*f^22*j*k^2,b^22*d^5*f^6*h^7*j^5*k^3,b^22*e^30*j^6,b^22*c*d^6*f^2*i^10*j^6,b^22*c^5*e^22*f^5,b^22*c^12*e^23*g*k^4,b^22*c^17*e^15*g*k^7,b^22*c^26*d^5*e^3*k^8,b^22*c^26*d^6*g^9*h*j,b^23*e*f*g^6*h^4*i^5,b^23*c^5*e^4*i^7*k^7,b^24*d^31*e^6*g^5*h,b^25*e^11*f^6*h^8*j^2*k^2,b^25*e^30*h^2*i^3,b^25*c^8*d^12*i^13*j^2,b^25*c^12*d^4*e^10*h^6,b^26*d^14*f*g^2*h^5*k^4,b^26*f^3*g*j^10*k,b^26*c^3*e^4*f^5*h*i^12*k,b^26*c^13*d^11*f*j^6*k^5,b^26*c^23*d^4*e^8*i^2,b^27*e^2*f^8*h^10,b^27*c^4*d^14*f*g^12*k^2,b^27*c^11*d^12*f^2*i^10,b^28*e^9*f^5*g^9*h^3,b^28*e^8*j^9*k^4,b^28*c^11*d*j^5*k^8,b^29*f*h*i^5*j^3*k^4,b^29*d^16*f^7*h^6*j^5,b^29*f^9*g^4*h*i^4*j^2,b^29*c^11*d^3*f^7*g^3*h^5*i,b^29*c^30*d^10*i^5,b^30*e^4*g^4*j^4*k^2,b^30*c^21*f*j^3*k^2,b^31*d^4*h*i^8*k^2,b^31*e^8*f^5*i^2*j,b^31*c^4*h^10*j^5,b^31*c^7*e*g^2*i^4*k^7,b^31*c^9*f^3*h^3*k^2,b^32*d^17*e^20*j^5,b^32*d^4*g^10,b^33*d^12*f^2*g^6*h^3*i^2,b^33*c^7*e^17*h*k^5,b^34*d^9*f*i^3*j^11,b^34*d^25*e^11*f^2,b^35*d^2*e^13*h*k^3,b^35*f^6*g^13*h,b^35*c^3*d^12*i^3*j^5*k^4,b^35*c^13*i^7*j^2,b^35*c^27*i^4*k^4,b^36*e*g^12*i^2*j^3,b^37*c^6*d^10*e^4*g^5*h^3*k,b^37*c^13*e^10*f^2*j^3,b^37*c^20*h^2*j^10,b^38*d^7*e^17*j^4,b^38*c^12*e^10*g^4*k^5,b^39*d^15*e^6*f*i^3,b^39*e^7*h*i^6*k^2,b^39*d^8*i^5*k^5,b^39*c^37*d^4*e*f^4,b^41*f^14*k^3,b^41*c^7*d^13*e^5*g*h^4,b^41*c^10*e^10*g^7*i^2,b^41*c^12*d^23*f^3*g,b^41*c^19*d^6*g^6*h^3,b^42*c^18*d^13*e^3*j^5,b^43*d^7*e^2*g^2*h^6*i*j^3,b^43*f^2*h^8*j^2,b^45*i^3*j^9*k^2,b^46*d^3*i^14,b^47*e^3*j^7,b^47*f^13,b^47*c^4*d^2*h*j^3,b^48*f*h^4*i^8*j,b^48*d^10*h^8*i^5,b^48*c^25*h*i^4*k,b^49*c^2*e^12*j^2*k^3,b^49*c^14*f*g^6*j,b^50*e*h^6*i^3*k^3,b^51*d^11*e^8*g^2*k,b^51*c^26*e^3*h*k,b^52*i^13*j^2,b^52*e^12*h^4,b^54*d^13*i^6*j^3,b^55*d^24*e*i*j^4,b^55*c^30*e^9*j,b^56*c^6*e^5*f^2*i^3*j,b^56*c^18*i^5,b^57*d^8*e^12*g^5*j^2,b^57*c^5*d*e^5*g^10,b^58*f^7*h*k^6,b^59*f^4*g^7*k^4,b^59*d^15*f^10*g,b^60*c^7*e*f^11,b^60*c^16*h^10*k,b^65*c^2*d^11*f*k^4,b^66*d^3*g^5*h^4*j,b^68*e^7*h^2,b^68*c^7*g^3*h*k^4,b^68*c^12*g^3*k^7,b^72*c*d^6*i*j^7,b^72*c^13*i^3*j,b^93*f*g^2*h^2*j,c^28*e^13*f^2*i^2*j^7*k,d^28*f^11*h^3*j^4,c^5*d^21*f^3*g^5*h^2*i^2*k^7,c^7*d^5*e^4*f^3*h^7*j^8*k^5,c^5*e^4*f^9*h^12,c^11*e^10*j^13*k^3,f^2*h^3*i^8*j^7*k^3,c^35*e*f^2*g^5*j^7*k,c^23*d^3*f^4*g*h^5*i^2*j*k,c^10*d^14*f*g^15*j^2,d^4*e^24*h*i^9*j*k^4,c^21*e^19*h^3*k^4,d^43*e^2*f^5*h^8,c^2*d^25*e^8*f^2*i^6*j^2,d^8*f^15*h*j^4*k^2,d*f^7*g^2*i^2*k^11,c^26*d^33*f^4*g^6,d^6*f^3*g^3*h^10*j^6,d^14*f^5*h^17*i^3,d^4*h*i^6*j^13*k,e^28*h^8*j^5,c^4*e^5*g^5*i^3*j^11,c^9*f^14*g^5*i^2*j^3,f^2*g*h^6*i^11*j^5,c^16*d^2*e^14*h*j^6*k^2,c^4*d^10*e^3*h^8*i^6*k^2,d^21*e^10*g^7*h*i*j,c^26*e^25*g^4*j^4,c^14*e^14*h^6*i^3,c^19*d^4*e^6*f^14*i^2,c^28*d^18*h^10,d^4*e^2*f^6*g^4*h^5*j^3*k^7,c^11*d^58*g^2*i*j^4,c^32*g*i^8,d^17*f^9*j^10,d^10*f*g^5*j^4*k^9,f^5*g^2*h*i^11*j^2*k^5,f^16*h^4*j^7,c^4*f^30,c^11*f^8*h^3*i^2*j*k^5,c^44*d^15*f^5*g^2*h^2,f^5*g^12*j^2*k^3,d^25*f^11*g^6*h*j^4,d^2*f^7*g^8*h^3*i^5*k^3,c^9*e^21*f^4*h*k^8,c^21*e^3*f^12*g^5*h,c^54*e^20,e^28*f*g^5*j*k^6,e^17*f^3*g*h*i^3*k^6,d^6*e^5*h^12*i*k^7,d^16*f*h^5*k^10,c^5*g^14*h^12,d^13*e^10*i*j^10*k^5,c^4*d^8*f^2*g^9*i^10*k^5,c^5*d^21*e^3*g*h^15,c^36*h^6*j^10,c^11*d^11*e^9*j^12,c^16*d^21*e*f^2*j^4*k^3,d^5*e^10*f^6*i^6*j^2,d^36*f^12*i*j^4,d^19*h^6*i^4*j^6,c^2*e^3*g^2*i^8*k^8,c^4*d^29*f^4*i^3*k^3,c^2*d^19*e^19*i*k^6,c^9*d^3*e^9*g^3*h^4*i*j^4,c^14*d^13*e*f^8*g^3,c^21*e^2*g^8*h^3*i^3*k^3,e^6*f^4*g^4*h^6*i^4*j^7*k,e*f^7*h^8*j^6*k,f^21*h*k^4,g^5*h^7*k^10,c^8*d^11*f*i^11*j^3*k,c^12*d^3*e^30*f^4,c^33*d^11*g^9*h^6,d^7*f^4*j^21,c^7*e^9*g^6*h^9*i^6,i^6*j^13*k^5,c*d^46*e^6*f*g^5*k^2,c*e^4*g*i^17*j^3,e^7*f^4*g^2*i^3*j^11,f^10*h^2*j^13,d^8*f^8*k^15,c^6*f^2*g*h*j^7*k^3,c^13*d^8*e^2*f^3*g^2*h^3*i^9*j^3,d^11*f*g^11*h*i^3*j^2*k,d^3*e^17*f^4*g^9*h^8,c^2*d^49*e^7*g*i^2*j,c^4*e^16*j^6*k^6,c^6*d^13*e^3*f^4*h^4*j^8*k,c^7*d^59*f^4*g*i,c^16*f^6*g^8*j^5,c^18*d^6*h^3*j^2*k^10,e^5*h^6*i^6*k^6,c^4*f^8*g^4*h^6*i^5,c^7*d^48*g*h*j^5*k^3,d*e^12*g^4*i*j*k^4,d^32*f^3*h^4*j^3,d^11*e^4*f^11*g^4*k^7,f^5*g^18,d^25*g^3*h^3*k^8,c^28*e^7*h*k^4,e^21*f*g*h^2*i^12,d^9*e*h^6*i^9*k^4,c^2*e^16*f^4*h^4*i^3,c^4*d^5*e^3*f^10*h^9,c^16*f^2*h^8*k^4,d^22*e^28*h^2*j^2*k^2,e^23*f*g^11,d^16*e^10*f^7*g^5*h^2*j,e^11*g^10*h^8*j^3,c^3*d^9*e^3*g^10*h*k^2,c^5*d^40*f^5*g^4*h^6,c^10*e^9*f*i*j^13,c^15*d^5*e*f^15*j^5*k^2,e^12*f^3*g^7*h^4*i^6,d^3*f^3*i^9*j^7,c^10*i^11*j*k^8,d^28*g^20*h,d^14*e^5*i^4*j^8,d^6*e^39*f^3,d^7*g^5*i^6*j^2*k^6,d^38*i*j^4*k,c*e^32*g^3*k^5,c^3*d^30*e^19*f*h^4,c^34*d^3*f^3*j^7,e^7*g^2*i^17*k^2,c^20*e^2*i^8*k^2,c^22*d^11*f^5*h^2*i^3*j,c^34*d^4*h*i^5*k^6,c^69*f^2*k^2,e^11*f^3*i^19,d^59*e*j^5,c^4*d^12*e^4*g^6*h^2*j^10,c^7*e^9*g^12*i^3,c^9*d^22*f^2*g^6*j^2,c^16*d^5*g^11*h*i*j^4*k,c^21*d^15*g^11*k^4,d^20*g^2*h^9*i^7*j^4,g^8*i^11,d^30*f^4*g^2*h^2*i^6,f^12*h*i^2*j*k^9,c^20*d*e^18*f*i,c^32*f^9,c^44*f*g^4*i^2,d^47*e^10*g^2*i^2*k^2,f*g^3*h^6*j^12,d^4*k^20,d^5*f^15*g^3*j^4*k^2,c^7*d^12*e^25*j,c^21*d^36*e^5*k^2,f^19*h^2*i^3*j^2,d^3*f^3*h^13*i*j^6,d^13*f^17*h^6*k^2,d^20*e^14*i^4,d^21*e^3*f^16*g^4*h*i,c^2*d^4*e^4*g^9*h^7*i^4*j^2,c^4*e^13*f^2*g^2*h^6*j^7,c^7*d^14*f^8*g^9*i^3,c^9*d^44*h^4*i*k^2,c^19*d^7*g^14*i^5,d^30*e^2*f^6*k^9,d^55*e*g^8,d^3*e^6*f^13*h^4*k^5,e^7*h^10*i*k^11,e*f^15*g^12*i^2*k,f^5*h^3*k^14,g^11*h^10*k^2,e^33*g^2*h^5*i^2*j,c^14*d^18*e^13*g*h^9,d^8*f^4*j^19,d^17*f^2*j^6*k^13,c*d*g^4*j^13*k,c^5*e^16*g^2*h^6*j^5,c^5*d^5*e^7*g^3*h^4*i^11*k,c^6*d^11*f^10*g^4*j^5*k^4,c^25*d^18*e^11*i*j^2,d^12*e^10*g^2*h^11*i^2,f^14*g*i^8*j^3,d^9*h^6*i^6*j^7*k,d*e^5*f*h^13,d^11*f^15*h^6*k^3,d^2*e^20*i^12,c^5*g^3*h^12*k^9,c^10*e^6*f^5*i^3*j^14,c^29*f^17*j^2,e^11*j^12*k^4,c*d^22*h^2*j^14,c^4*d*e^3*f^6*j^4*k^7,c^10*h^6*i^13*j^2*k^2,c^11*g^11*j^11,c^16*g^2*k^16,d^16*f^16*i*j^4,h^4*i^4*j^6*k^4,d^30*h^9*j^8,h^3*i^6*k^13,f^2*g^7*h^4*i^3*j^5,c^4*d^2*i^5*k^16,c^4*d^3*f^16*g^7*i^2,c^32*d^24*g^2*h^2*i^4,c^36*h^6*j^5*k^4,d^51*f^11*g*j,d^3*g^12*i*j*k^11,d^34*g^6*h*j^3*k^6,g^26*k^2,c^10*e^4*f*h^9*i^6*j^3,c^11*d^6*e^9*f^2*j^12,c^23*e^2*g^3*j^6*k^2,e^11*h^2*i*j^4,d^14*f^4*h^7*j^6,c^2*e^3*f^12*k,c^4*d^24*f^18,c^9*f^6*g^14*h^2*j^3,c^11*d^7*h^6*k^2,c^16*d^17*f^10*k^5,c^21*g^19*h*i^2,d^2*e^5*h^7*i^18,h^9*i^9,d^18*g^13*j,c^22*d^7*f*j^5*k^9,c^34*f^3*h^11,d^39*e^12*h^7*j^2,g^15*h*i^6*k^5,f^3*g^2*h^5*k^14,e^40*j^3*k,f^5*i^11*j^3*k^5,d^4*e^27*h^5*j^5,e^32*f^8*k^4,c^7*e^22*f^2*g^7*j^2,c^9*e^20*h^4*k^5,c^9*e^9*f^8*g*h^5*j^4,c^21*e^2*g^6*h^4,c^26*d*f^14*g^6,c^42*d*j^12,d^15*e^34*g*j^6,e^11*f^4*g^3*h^7*i^6,d^5*e^9*h^11*i^4*k^5,d^6*f^10*h^12*i,d^26*g^8*i^3*k^7,d^39*e^14*h^2*j^2,c^7*e^4*g^8*h^6*i^8*k,c^9*f^2*g^2*h^11*i^3,c^14*d^9*f^16*g^2*h^4*i^2,d^16*e^16*g^2*h^4*k^3,d^47*e^3*h^9,e^6*g^16*h^11*j,d^10*g^16*h^4,c^3*e^4*f*i^4*j^11,c^8*d^3*g^21*h^3*k^3,c^8*d^6*f^15*i^3*j^3,c^15*g*i^6*j^5,c^17*d^20*i*j^7,c^29*d^13*i^3*j*k^4,c^64*j^4,e^6*i^17*j^3,d^15*g^2*h^5*k^14,c^2*e^4*g^15*i*j^6,c^3*h^2*i^14,c^7*e^20*h^9*i,c^28*e^6*h^5*i^4*j^5,c^38*e*i^8*j^2,e^8*f^4*h^8*k^10,d^39*g^5*i^4*j^2,f^6*j^7*k^7,e^27*g^9*h^2,c^6*g^3*i^2*j*k^16,c^13*e^15*f^5*g^3*i*j^9,c^15*d^10*e^13*j^6,c^25*e^8*g^8*i^3*j^3,c^27*d^3*e^6*i*k^7,c^27*d^4*f^3*g^2*j^5,c^32*d^13*f*k^10,c^39*g^7,f^3*g^12*j^8*k^5,c*e^15*i^12*k^3,c*e^4*f^7*h*i^9*j^3,c^3*d^18*e^2*h^5*i^7,c^13*g^4*i^11,c^16*d^45*g*j^3,b*e^22*g^4*i^7*k,b*d^29*e^9*i^2*j,b*e^5*f^8*h^2*j^8*k^5,b*d^12*e^10*g^3*h^4*i^5*j^3*k^2,b*e^4*g^18*i^6,b*c^2*d^22*e^2*g^3*i^4*k^5,b*c^2*d^23*f^2*g^12*i,b*c^4*f^10*g^5*j^5*k,b*c^4*d^53*h^2,b*c^6*h*j^2*k^14,b*c^7*d^32*g^3*i^3*k^8,b*c^16*f^2*g^10*k^10,b*c^25*e^24*j^4,b*c^37*e^17*k,b^2*d^6*e^11*i^15*k,b^2*e^5*g^4*j^3*k^12,b^2*d^28*f^3*j^5*k^7,b^2*c^11*e^26*i^9,b^2*c^13*d^2*e^13*f*h^3*i^4,b^2*c^25*e^6*h^2*i^6*k,b^3*d^2*e^9*h^9*j^11,b^3*e^14*f*g*i*j*k^8,b^3*d^12*e*f^7*h^2*j^3*k^3,b^3*e^2*h^8*j^5*k^9,b^3*f^9*g^15,b^3*d^5*h*k^12,b^3*g^14*h^8*j^4,b^3*f^7*g^14*h*k^3,b^3*d^13*e^20*g^5,b^3*c^2*d^44*e^7*f^4*h*j,b^3*c^7*e^21*g^10*h^2*i^2*j,b^3*c^12*d^6*e^13*g^10*i,b^3*c^14*d^37*g^4,b^3*c^49*d^2*e^15*f*g,b^4*d^21*e^9*g*h^3*i^7,b^4*c*h^18*j^4,b^4*c^2*e^11*h*i^5*k^13,b^4*c^5*d^12*e^3*f^7*g^5*j^3*k,b^4*c^35*e^17*g^3*i^3,b^5*d^31*f^6*g^5*h^2*k,b^5*d^2*e^30*f^3*j^2*k^6,b^5*e^12*f^11*g^2*j,b^5*d^10*g*h^11*j^5,b^5*d^20*f^9*g*h^4*k,b^5*c^5*d^13*f*g^6*h^3*k^10,b^5*c^8*d^35*i^7*j^2,b^5*c^12*f^3*j^9*k^7,b^5*c^43*e^10*i*j^5,b^6*d^18*h^18,b^6*f^5*g^3*h^6*i^3*k^6,b^6*d^10*j^10*k^5,b^6*c^9*e^17*h^11,b^7*e^7*f^4*i^4*j^8*k,b^7*d^8*h^2*i^2*j^12*k^2,b^7*g^2*i^6*j^2*k^10,b^7*d^18*f^2*i*j^4*k^5,b^7*d^2*g^10*h^2*i*j^11,b^7*e^11*g^8*h^9*j^3,b^7*d^11*g*i^3*k^14,b^7*d^12*f^10*g^10*j^3,b^7*c*d^42*k^9,b^7*c^3*d^3*e^14*h*k^13,b^7*c^5*e^8*i^20,b^7*c^18*d^19*e^6*g^6*i^4,b^7*c^22*e^2*f^7*j^7*k,b^7*c^34*j*k^10,b^8*d^8*e^18*h^16*k,b^8*d^2*f*g^4*h^16,b^8*e^5*f^9*g^10*h^4,b^8*g^9*h^15*k,b^8*c^8*e^4*f^3*i^8*k^6,b^8*c^10*f^9*i^3*j*k,b^8*c^41*e^10*i^6,b^9*d^37*f*g^6*i^4*k^3,b^9*d^29*e^17*f^4*g^4*h^2*k^2,b^9*e^13*h*j^16,b^9*e^6*g^3*j^10,b^9*e^11*g^9*i^3*k^4,b^9*d^2*f^6*g^3*j^2,b^9*c^4*g^8*i*j^4*k^5,b^9*c^9*g^8*k^8,b^9*c^11*d^26*f^4*g^2*k^3,b^10*h^7*i^7*j^4,b^10*f^2*g^5*i^11*k^4,b^10*d^10*f^8*i^6,b^10*g^4*h^6*i^9*k^5,b^10*d^3*g^4*i^8*k^8,b^10*c^8*e^20*f^5*i*k^4,b^10*c^20*e^2*f^13,b^10*c^32*f^5*g*i^2*k^4,b^11*d^58*f^3*k,b^11*i^9*j^9*k^3,b^11*e^27*f^2*j*k^2,b^11*c^4*d^6*e^15*h^2*j^5*k^3,b^11*c^4*d^7*e^4*f^2*g^4*h^3*j^10,b^11*c^7*e^9*f^10*g^10,b^11*c^9*d^16*e^7*k^6,b^11*c^16*e^8*h*k^12,b^11*c^16*g^9*h^2*j^4,b^12*e^16*f^4*i^4*k^2,b^12*e^6*g^6*h^5*i^4*j^2,b^12*d^14*e^4*h^9*i^2*k^3,b^12*f^12*g^6*i^3,b^12*c^4*d^8*g^5*h^9*i,b^12*c^9*d^18*f^10*g^5*h^2,b^13*d^25*e^11*g^5*h^2*k,b^13*d^19*g^19*h^2,b^13*f*g^25,b^13*d^5*i^2*j^17,b^13*c^3*d^15*f^9*i*j^9,b^13*c^10*g^4*i^4*j^11,b^13*c^15*d^8*f*g^4*i^3*j^3*k,b^14*f^9*g^2*h^13*k,b^14*e^35*h^3*i^2*j,b^14*d^6*i^12*j^5,b^14*c^2*e^15*h^7,b^14*c^3*d^16*f^3*i^11*k,b^14*c^7*d^8*e^7*f^6,b^14*c^19*d*g^3*k^9,b^15*c^3*d^5*h*j^9*k^9,b^15*c^13*e^13*i*j^2*k^4,b^15*c^15*d^29*f^3*j^4,b^16*e^10*i^10*j^4*k,b^16*f*g^2*i^7*j^9,b^16*c*d^6*e^2*i^9*k^4,b^16*c^3*d^37*f^5*i^4,b^16*c^50*f^2*k^4,b^17*d^48*f^2*g,b^17*d^31*g^6*i^2*j*k^3,b^17*e^15*g*h^12*i^4,b^17*c^13*f^2*g^7*j^7*k^3,b^17*c^17*f^4*g^6*h^4*i^5*k^3,b^17*c^37*d^6*e^4*g^3*k^2,b^18*e^3*f^4*g^5*h^11*k^2,b^18*d^10*f^4*h^7*j^8*k^3,b^18*f^6*g^4*h^2*i^3*j^5,b^18*c*f^4*g^3*h^6*j*k^3,b^18*c^8*d^11*e^8*h*i^2*j^4,b^18*c^11*e^13*f^3*i^6,b^18*c^20*d^4*e*i^4,b^18*c^25*d^14*f*i^3*k^2,b^19*d^21*f*j^9*k,b^19*e^10*h^3*i^15,b^19*c^7*d^15*e^8*g^13,b^19*c^25*d^3*h*j^2*k^10,b^20*e^13*f^2*i*j^4*k^2,b^20*e^5*f^16*k^5,b^20*d^4*f^22,b^20*e^6*g^2*i^3*k^11,b^20*d^21*f*g^8*j^9,b^20*c^18*e^19*g*j^2,b^21*g^10*j*k^4,b^21*d^29*f^3*g^4*h^2*j^3,b^21*c^23*e^2*f^8*g*j^6,b^21*c^35*g^6*k^4,b^22*e^9*f*g^7*i^4,b^22*g^6*h^11*i^2*j^3*k,b^22*d^6*g^6*h^4*i*k^4,b^22*e^24*f^6*g^4*j^2,b^22*c^9*e^4*f^4*g^3*h^2,b^22*c^11*d^2*f^10*h^7,b^22*c^29*g*i^11,b^23*d^19*e^16*j^2*k^2,b^23*f^6*h^9*i^3,b^23*d^13*f^7*g^11*j,b^23*c^17*f*j^13,b^24*f^3*g^13*h^2,b^24*c^3*i^6*j^5*k^4,b^24*c^5*f^3*i*j^7,b^24*c^17*i^3*j*k^8,b^25*i^14*k^4,b^25*d^11*g^6*j^8,b^25*c^4*f^2*h^19,b^25*c^10*d^27*e^7*f*g^3*h^2,b^26*g^8*i^9*k^2,b^26*d^19*f^2*g^2*i^4*j^2,b^26*d^11*e^16*f^5*h^5,b^26*d^4*e^9*g^5*h^4*k^5,b^26*c^3*e^15*j^6*k^2,b^26*c^13*e^10*f*g^5*i^3*j^3,b^26*c^15*f^7*j^5,b^26*c^27*g^4*k^2,b^26*c^29*d^8*f^5*j,b^27*e^4*f*h^3*i^7*k^2,b^27*c*f^3*g*i^11,b^27*c^3*f^9*h^3*i^6,b^27*c^4*d^25*e^2*j^3*k^4,b^27*c^15*f*h^2*i^8*k^2,b^28*d^9*e^11*i^2*j,b^28*d^2*e^4*i^4*k^9,b^28*d^33*k^4,b^28*c^2*g^14*i^3,b^28*c^27*e^6*f,b^29*d^17*h^3*i^10,b^29*c*e^15*f^5*h*i^4,b^30*d^7*e^10*g*h^5*j^3,b^30*c^2*d^17*e^2*g,b^30*c^9*e^3*g^6*h^4*k^4,b^30*c^14*d^10*g^6*k^7,b^31*f^4*g^4*h^11*j,b^31*c^37*h^2*k^3,b^32*d*e^7*g^2*h^7*j^6*k^2,b^32*e^2*h^9*j^5*k^2,b^32*f^13*h^2*k^5,b^32*d^15*i^7*j^2*k^2,b^32*c^45*d^4*j*k^2,b^33*f*h^16*k^2,b^33*d^9*e^2*f^6*g^4*h^3*i,b^33*c^19*e*i^9,b^34*g^7*i*j^11,b^34*f*g^4*h^11,b^34*c^8*d^30*f^3*j^2,b^34*c^15*d^13*g^2*i^2*j^4,b^34*c^55*e^3,b^35*d^7*i^12,b^35*f^13*i^3*j*k^5,b^36*f^10*j^2*k^3,b^36*h^2*j^6*k^4,b^36*d^6*f^8*k^7,b^37*h^5*i^7*j^4,b^37*c*d^12*e^3*h^4*i^5*j^2,b^37*c^15*e^5*h^2*i^3*j*k^5,b^38*c^4*g^6*j^4,b^38*c^18*d^4*g^5*h^4*k^2,b^39*d^4*f^6*i*k^10,b^39*g^2*h^7*i,b^39*f^14*g^2*k,b^40*g^16,b^40*d^9*j^13,b^40*c^3*f^5*g*i^3*j^3*k^5,b^40*c^16*e^8*h^2*k^5,b^41*e^17*h^5*k,b^41*d^9*e^4*f^2*h^10,b^41*c^4*d^2*h^9*k^5,b^42*d^20*e^11*g^3*h^3,b^42*c^10*f*g^2*j^11,b^43*d^7*h*i^5*j^6,b^43*i^7*k^9,b^43*d*f^3*h*i^4*j^5,b^43*c^10*g^3*i^6,b^43*c^14*e^8*g*h^7,b^45*e^10*i^2*j^4,b^45*c^8*e^3*i^4*k^3,b^46*e^10*g^10*k,b^47*d^3*g^6*i^7*k,b^47*c^6*e^21*f^3*j^2,b^47*c^20*e*f*h,b^47*c^32*g^2*k,b^49*d^18*g^7*h,b^49*e^6*f^8*k^4,b^51*d^8*e^26,b^52*f^4*g^3*j^8*k,b^52*c^12*i^12,b^53*f^6*i^4*j^2*k,b^55*e^13*f^2*i^2*j*k^4,b^55*g^5*h^5*j^4,b^57*e^12*h^3*j^3,b^57*e^4*f^4*k^2,b^59*d^16*f^3*g^8,b^60*d^3*h^12,b^61*e^10*f*i^4,b^61*d^10*f^7*j^2,b^61*c^3*i^2*j^4*k,b^61*c^8*d^3*i*k^4,b^63*c^18*e*f^3*g^6,b^64*e^5*h^2*i^5*j^2,b^64*c*g^2*h*i^7,b^66*c^13*f*g^3*h^4,b^69*e^13*f^3*h,b^72*f*h*k^2,b^73*d^6*g*j,b^73*c^34*f,b^74*d^14*h*i^2,b^82*g^2*h^3*j^4,b^82*e^14*i^2,b^90*c^3*j^4,c^16*d^3*e^5*f^13*g^5*i^3,d^15*g^5*h^3*i*j*k^11,c^9*d^2*e^29*f^3*g*j^5*k,d^10*e^18*f^5*i^7*k,c^15*d^16*e^4*i^12*k^3,c^6*d^14*f^23*j^2,c^13*f*g*h^6*i*j^4*k^5,d^37*e^7*f^2*h^9*k,c^17*e^17*i^2*j^10*k,d^19*e^13*i^5*j^5,c^6*d^43*h^2*i^2*j*k^3,c^41*d^8*e^8*f^2*j^4,f^4*g^2*h*i*j*k^15,c^16*d^27*e^4*f*g^6,e^2*f^11*g^5*i*j^6*k^2,d^6*e^13*h^18*k^2,c^6*f*g^7*h^9*i^4*j^2,c^4*e^19*h^7*i^2*j,c^9*e^11*f^11*i*k^3,e^26*g^14*j^2,d^17*e*h^3*i^8*j^10,c*d^52*g^2*j^7*k,c^22*e^5*g*i^7*j^2*k^2,c*f^5*h^4*i*j^4*k^9,c^2*d^12*g^11*h*j*k^11,d^34*e^17*h^3*i^3,c^2*d^44*e^9*f^7*i^2*k,c^7*f^8*i^4*j^11*k^2,d*f^5*g^8*j^12,d*e^20*f^10*g^2*h^5,d^2*g^9*i^9*k^9,e^13*f^2*g^7*h^4*k^8,c^19*d^4*f^2*j^6*k^9,c^31*f^10*j^5,c^6*d^15*e^6*j^7*k^7,e^15*f^3*i^5*j^5*k^3,d^23*f*i^2*j*k^7,c^6*d^17*f^9*g^10*i,e^14*g^3*h^5*j^7,c^4*d^7*e^6*f^5*g^3*k,d^5*e^3*h^12*i^8*j,d^15*f^7*h^5*i^7*k,c^36*h^14,d^5*e*i^10*j^6*k^5,c^47*f*i*j^5*k^5,d^20*e*f^3*h^15*j,c^2*e^6*f^11*g^6*h^3*i^4,e*f^4*g*i^15,c^5*d^11*h^5*i^13*j^2,g*h^2*j^10*k^7,c*f^13*g*j^2*k^10,c^32*e^3*f^4*g^11*i,c^3*d^2*e^7*g^2*h^4*i^8*j^6,c^15*g^7*h^3*i^10,d^53*e^4*f*g,f^27*h*i,f^5*g^4*h^7*i^4*j^2*k,c^18*e^21*f^2*i^7,d^26*e^4*h^5*j^6*k^3,f^2*g^18*j^3,c^6*e*h^9*k^8,c^25*e^27*g*h^4,d^10*e^15*f^4*g^5*h^3*j^4,d^3*e^8*g^10*h^2*k^6,d^34*f^2*g^4*h^7*k,e^17*g^7*h^5*i^5*k^2,d^11*g^6*h^9*i^2*k^6,e^3*h*i^8*j^10*k^3,f^8*h*i^7*j^9,c^12*g^5*i^9*j^3*k^3,d^18*e^2*f^11*i^2*j^3*k^4,d^32*j^7*k^5,c^24*e^5*j^10*k,d^16*h*i^11*j^5*k,e^8*f^2*g^13*h^7,e^14*f^4*i^5*j^8,c^3*e^6*f^18*i^4,c^12*d^5*f^2*h^3*i^2*j^4*k,e^3*f^6*h^6*i^13*j^2,e^14*g^12*i^2*j^3*k^4,d^16*e*g^6*j^5,c*d^47*f^5*h*j^7,c^13*d^40*g^5*j*k^3,d^24*f*g^2*h^3*i^5,d^16*e^24*f^4*h^10,c*d^48*g*h^7*i^2*k^3,c^22*e^5*f^6*h*j^2,c^34*g^4*i*k^4,d^6*e^30*j^4*k^2,c^21*e^5*g^18*k^2,d^14*e^19*h*i^3*k^2,e^14*g^15*i^7,d^8*e*f^5*g^9*h*i^2,d^38*h^5*k^6,c*f^19*h^5*j^4*k^2,c^9*d*g^14*i^4*k^2,c^11*d^32*f^3*g^8*h^5,c^34*d^3*e^14*h^3*k^2,c^4*f*i^18*j^3,d^5*f^2*g^5*h^16*j^3*k,d^6*g^4*i^13*j^4,e^30*f*g^2,c^9*d^22*e^10*g*h^3,c^40*f*i^4*j^3,d^2*f*h*j^22,c^27*d^6*g^14*j^4,d^27*e^12*i^6*j^5,c^5*d^51*i^3*j,c^14*h^5*j^13*k,c^38*e^20*i^2*j^2,c^6*e*g^2*j*k^20,d^10*e^4*f^13*j^7*k^2,d^3*f^5*i^2*j*k^11,f^13*g^7*i*k^2,c^7*d^3*e*g^4*h^16*k^2,c^13*d^4*e^16*g^3*i^5,c^22*d^18*e^4*g^2*h^3*i^3*j,d^8*j^23,c*e^14*h*j^15,c*d^12*e^5*i^13,c^18*d^3*f^5*g^3*j*k^9,d^29*f^12*i^3*j^2,d^8*e^3*f*h^8*j^9,e^8*f^9*k^5,d^18*f^15*h*j,f^3*g^14*h^3*j^6,c*d*h^7*j^3*k^6,c^6*d^11*f^7*k^9,c^32*d^2*e^15*g^9*h,c^37*d^12*e^7*g^9,e^5*h^10*i^8*j*k^2,d^9*h^14*i^5*k^6,c^24*h^12*k^2,f^2*g^3*i^5*j^15,e^14*f^5*g*h^6*j^7,c^4*d*e^17*f^3*k^12,c^11*e^7*g^6*h^5*j,c^13*d^16*f^3*h^10*j^3,c^16*f^11*g^6*k^3,e^16*f*g^3*h^8*i^5,e^3*f^7*h^13*j,e^8*f^15*g^3*h*i^4,g^2*h^12*i^2,c*d^24*f^5*h^17,c^4*d^3*f^13*g^2*h^5*i*k^3,c^5*e^11*g*i^21,d^27*e^20*f^10*k,d^10*e^21*g^2*h^5*k^7,d^4*e^3*g^16*h^5,d^14*f^10*g^16*k,e^9*i^3*j^14,e*f^12*i^2*j^6,c^5*e^2*g*i^5*j^8*k^4,c^7*d^14*h*j^10,c^10*f^4*g*i^4*k^7,c^11*d^6*e^23*h^8*j^2,c^19*d^7*i^2*j^4*k^8,c^24*d^17*f^2*i*k^11,h^4*i^11*j^8,d^8*f^14*i^10,h^3*i^13*j^2*k^4,d^25*g^9*j^11,d*f^6*i^12*k^7,d^35*f^7*g^9*j^3,c^9*e^7*f^3*g^9*h^10,c^23*d^3*e^3*f^9*i^2*k^7,c^30*f^3*h^6*i^2*j^7,f*h^4*j^6*k^15,c^5*d^4*e^18*j^9*k^2,c^17*g^2*j^8,c^22*d^8*f^14*g^2,c^5*d^6*f^2*h^6*i^5*j^2,c^17*g^3*h^5*i^7*k^2,c^52*h^3*i,f^10*g^3*h*j^11,d^9*e^26*f^7*i^3,d^9*g^7*h^4*j*k^13,d^23*e^14*i*j^4,e^9*g^18*i^5*j,h^8*i^18,d^16*e^7*g^3*i^3*k^9,d^17*g^12*j^3,d^26*g^3*i^2*k^12,c^4*d^10*g^17*i^2,c^9*e^5*h^19*i^2*k,c^41*d^5*e^2*k^9,f^9*g*h^5*i^4*j^2*k^5,f^7*h^9*i*k^9,c^3*e^18*h^4*i^3*j,c^3*e^7*f^14*h^5*j^6,c^8*d^6*e^10*f^12*i^2,c^13*e^13*g^11*i^7,c^15*f^6*g^5*h^4*i^2,c^17*d^20*h^8,c^20*e^3*f^4*i^4*k^8,c^29*d^14*f^4*g^4*h^8,d^6*e^6*f^4*h^3*j^6*k^7,h^2*k^16,d^38*e^12*f*h^2*j^4,d^17*e^17*f^9*g^5,c^4*d^31*e^5*g^4*h,c^9*d^41*f^7*g^4*k,c^39*e^20*g*j,d^15*e^14*g*h^4*i^6,d^25*e^6*f^11*g*i^5,d^39*h^8*i^3,e^3*f^3*h^7*k^12,d^3*f^9*h^12*k^7,c*g^7*h^14*j^4,c*e^47*h^2*i,c^13*e^29*f^2*h^2,c^25*e^22*g^3*h*i^2,c^27*d^4*e^9*h^6,d^25*e^2*f^3*g^5*h^3*j*k^5,e^10*g^7*k^10,d^14*f^6*g*h^5*k^5,c^3*d^39*i^5*k^5,c^14*f^8*j^11*k^2,c^33*e^15*j^8,e^6*f^10*h^8*k,f^2*g^3*h^7*i^2*k^10,e^25*f*g^8*h^2*i^3,f^4*g^2*i^9*j^3*k^7,c^2*f^10*h^3*i^4*j^5*k^2,c^2*d^23*e^5*g^7*h^6,c^21*d^2*e^4*i^8*j^2,c^26*d^12*f^7*i^7*k,c^33*f*g^6*i^7*j,c^70*j,d^19*f^7*j^13,d^12*j^7*k^9,d^5*g*i^2*j*k^18,d^6*f^7*g^10*j^6,e^8*f^10*g^8*h^3,c^2*d^12*g^7*h^14*j^2,c^10*d^44*j^5,c^12*e^7*f^4*j^10*k^5,c^13*d^23*e^3*f^4*g^6*i^2,c^24*j^4*k^14,c^26*d*f^2*j^6*k^9,d^6*f^12*g^4*h^10,f^6*h*i^2*j^4*k^5,d^13*e^34*h^4,c^12*i^4*k^14,c^12*f^14*g^3*h*i*j^3,c^14*d^9*f^4*h^5*k^9,c^31*e^15*i^5,c^33*d^17*e^2*f^3*j^2,e^3*f^3*g^3*j^5*k^3,d^27*f^9*j^7,d^10*g^2*h^5*j^9*k^4,g^8*k^12,c*d^20*f*g^2*j*k^7,c^36*f^6*j^4*k^3,d^4*f^5*h*i^5*k^3,g^4*i^7*k^12,d^28*f^3*h^5*i^2*k^7,e^25*f^2*j^3*k^8,c^8*d^36*f^2*g^3*i^3,c^10*e^7*f^10*j^2,c^12*e^5*h^3*k^12,c^12*f^16*h^4*j^4,c^22*f^2*g*i*k^8,c^36*h^2*k^12,c^55*e^6*g^5,d^15*f^2*g^13*k,d*e^9*g^4*h^4*j^13,e^14*f^7*g^10*j^3,f^12*h^6*i^7,c^7*h^17*i^5,c^11*d^4*f^5*g^9*k,b*e^21*f*i^3*k^6,b*d^25*e^8*f^7*h^4*k,b*d^9*f*h^11*j^7,b*e^3*f^9*g^6*i^2,b*d^18*e*h^3*k^10,b*d^2*g^5*h^10*j,b*f*g^11*i^4*k^6,b*d^12*f^7*g^5*h^3*k,b^2*d^60*f^2*h*k^3,b^2*d^23*f^4*g^19,b^2*e^9*g^5*i^5*j^10*k,b^2*d^9*f^6*j^12,b^2*c^5*d^2*g^4*i^2*j^6*k^5,b^2*c^7*d^33*f^4*j^8,b^2*c^8*e^7*f^16*h^4*i^4,b^2*c^9*e^23*f*g^2*k^4,b^2*c^11*d^25*e^10*f^7,b^2*c^54*f*j^5*k^5,b^3*d^37*g*h^3*i^3*k^8,b^3*f^2*g*i^13*j^4*k,b^3*e^32*f^5,b^3*h*i^11*j^8*k^2,b^3*e^20*h^8*k,b^3*d^10*i^10*k^5,b^3*e^25*g^4*i^2*k^9,b^3*d^2*e^12*f^3*h*k^4,b^3*c^4*e^2*g^12*h^8,b^3*c^6*d^16*h^12*k^5,b^3*c^9*e^5*g^3*k^13,b^3*c^11*d^26*f*h^5*k^8,b^3*c^28*f^5*i^4*j^3*k,b^3*c^37*h^3*i^2*j^7*k^2,b^3*c^42*f^3*i*k^5,b^4*d^13*e^19*g^12*k^2,b^4*c^3*e^18*j^5*k^8,b^4*c^15*f^2*g^11*j^4,b^4*c^16*f^7*i^12*k,b^4*c^17*d^16*j*k^12,b^4*c^29*d^10*g^10*k^3,b^5*e^4*g^2*i^6*j^12,b^5*e^7*i^8*k^8,b^5*d^31*f^2*i^3*j*k^3,b^5*g^7*i^8*j^6,b^5*c^4*d^7*e^18*h^11,b^5*c^5*d^25*f^10*g*i^2,b^5*c^12*d^8*g^6*h^3*i^5*j^2,b^5*c^21*d^10*e^3*f^5*g^4*h^3*k^2,b^5*c^35*f*h^2*j^11,b^5*c^40*e^2*k^8,b^5*c^61*g^2*h^5*j,b^6*d^42*e*g*j^2*k,b^6*e^20*g*h^13*i^3,b^6*c^4*d^8*h^17,b^6*c^35*h^8*i^7,b^7*f^3*g^4*h^3*i^2*j^8*k^3,b^7*d^21*e^23*i*k^6,b^7*c*e^18*i^5*k^2,b^7*c^3*d^15*e^5*f^6,b^7*c^10*e^6*h*i^3*j*k^3,b^7*c^15*d^8*i^2*k^6,b^7*c^22*g^13*h*i^2,b^8*d^26*e^12*f^3*g^8,b^8*d^9*e^13*g^13*j^2*k,b^8*c^4*d^50*f*g^7,b^9*e^5*f^5*h^6*j^9*k,b^9*d^34*e*f^5*g^4*i^3,b^9*f^19*j*k^4,b^9*d^17*e^2*g^9*h*i^6*k,b^9*f^7*g^11*h*j^6,b^9*d^13*i^11*j^6*k,b^9*g^16*i*k^6,b^9*c^8*e^24*g*j^5,b^9*c^13*e^16*f^10*g,b^9*c^20*e^17*g^6,b^9*c^22*d^13*e^4*h^4*j,b^9*c^25*e^9*f^2*g^6,b^9*c^34*d^6*g^5*h^3*k,b^10*d^23*g^4*h^3*j^6*k^3,b^10*e^13*h^7*i^6,b^10*c*d^7*e^5*f^12*i^5,b^10*c^8*e^6*g^2*h^6*i^8,b^10*c^13*f^4*g^2*i^7,b^10*c^33*d^13*e^2*j^6,b^11*e^14*g^7*h*i^3*j^2*k^4,b^11*d^7*e*f^4*g*h^6*j^4,b^11*d*e^13*g^16*i^3,b^11*d^32*g^10*h^4,b^11*e^9*f*g^3*h^3*j*k^4,b^11*c*f^7*h^8*j^3,b^11*c^4*e*f^15*g^3*k^7,b^11*c^28*d^4*i^8*j^2*k^5,b^12*f^3*h^10*i^2*k^4,b^12*d^7*e^3*f^4*g^11*h*j^4,b^12*d^5*f^5*i^16,b^12*g^16*k^6,b^12*c^8*d^32*g^9*j,b^12*c^20*d^5*e^4*g^3*h^9,b^13*e^30*h^4*j^3*k^2,b^13*e^5*g^13*h^3*k^2,b^13*j^10*k^3,b^13*f^8*i^4*k^11,b^13*d^4*f^14*j^2*k^6,b^13*c^26*e^10*g^2*i^3*j^6,b^13*c^31*d^5*e^2*f^5*g^2*i^2,b^14*f^4*h^2*i^11*j^8,b^14*c^14*d^3*i^11,b^14*c^18*f^7*h^4*i^2*j^7,b^14*c^35*e^18*f^2*g*k,b^15*d^3*e*g^23*h^3,b^15*d^13*g^2*i^3*j^5*k,b^15*d^5*e^21*f^2*h^6,b^15*d^61*e^3*f^2*i,b^15*c^5*e^2*f^4*j^8,b^15*c^10*f^18,b^15*c^17*g^4*j^2*k^6,b^15*c^19*d^2*f^2*h*j^4*k,b^16*e^4*g*i^10*k^2,b^16*f^6*h^4*i^5*j^2,b^16*f^20*i^4,b^16*c^7*d^10*f^4*h^8*i^2*k,b^17*d^3*e^16*i*j^4*k^4,b^17*d^34*e^3*f*h^2*j^6,b^17*f^3*g^9*j^3,b^17*d^27*h*k^8,b^17*d^6*e*f*i^2*k^16,b^17*d^21*f*g^8*h,b^17*c^17*e^11*j^3*k^4,b^17*c^27*e^6*g^11,b^17*c^29*f^6*g^5*j^2,b^18*e^20*f^2*h^2*i^3*j,b^18*c^3*e^13*h*i^5*k^9,b^18*c^3*e^2*f^10*g^2*h^2*i^2,b^18*c^5*h^6*k^4,b^18*c^12*g*h^13*j^4,b^18*c^15*f^2*g^7*h*i^4,b^18*c^17*f^8*g*h^6,b^18*c^29*g^6*h^5*i*k^4,b^19*e^27*g^2*j^2,b^19*e^19*f^13*g^2*k,b^19*d*e^15*g*h^6*j^6,b^19*d^11*e^7*g*k^2,b^19*c^2*e^2*g^21,b^19*c^23*i^2*j^9,b^19*c^28*f^13*i*j*k^2,b^19*c^41*e^2*h*k^2,b^20*e^16*f*h^2*i^6,b^20*d^5*e^2*f*i^9*j^10,b^20*c^11*f*i^10*j^3,b^20*c^15*e^11*f^4*h^4,b^21*d^3*g^10*i^5*j^4,b^21*c^2*e^18*f*g^8,b^21*c^16*d^19*g^7*h,b^22*d^11*g^6*i^13,b^22*d^3*e^7*f^3*g^4*h^4,b^22*c^2*g^9*h^3*i^2*k^5,b^22*c^9*e^6*i^8*j^2*k^2,b^22*c^23*d^6*i^5*k^6,b^22*c^35*f^3*g^2*i^4,b^22*c^58*e*j*k^2,b^23*g^4*h^12*j^2*k^4,b^23*d^14*e^8*j^13,b^23*d^24*j^5,b^23*c*d^3*e^5*f^8*g^3*i^2*k^3,b^23*c^5*d^7*e*g^2*i*j^7*k,b^23*c^10*d^17*g^2*k^4,b^24*d*e^2*i^11,b^24*d^32*f^2*i^6,b^24*c^9*d^3*e^22*i*j^3,b^24*c^21*e^4*f^7*j^2,b^24*c^33*i^2,b^25*f^5*j*k^11,b^25*g^13*h^3*j^8,b^25*c^7*e^6*f^3*i^13,b^25*c^8*d^8*e^11*f^4*g^4*j^3,b^25*c^20*d*e^4*g^9,b^26*d^16*f^6*i^3,b^26*c^3*e*g^5*h^4*i^6,b^26*c^8*d^9*g^5*i^5,b^26*c^57*f*g,b^27*d^5*f*h^6*j^9,b^28*e^5*f^13*g^3*i^2*k,b^28*e^3*f^3*h*k^14,b^28*g^2*h^8*j*k^2,b^28*f^11*g^2*h*k^5,b^28*c^6*e^22*i^3*k,b^28*c^8*d^30*e^9,b^28*c^18*e^4*f^2*g^12*i^2,b^29*g^16*h*j^2,b^29*d^3*j^16*k,b^29*d^13*f^8*j^8*k^4,b^29*d^5*e^12*f^11*k^3,b^29*c^7*d^6*j^2*k^13,b^30*d^3*e^9*h^11*j^2,b^30*e^4*f*g^9*h^6,b^30*c^6*g^8*h^10,b^31*g^2*j^14,b^31*c^5*f^12*g^2*j^6,b^31*c^18*d^3*e^11*h^6*j^2,b^32*h^2*i^3*j^8,b^32*d^5*f^14*i^2,b^32*g^3*h*i^5*j^2*k^4,b^32*c^6*d^11*f*h^13,b^32*c^35*j^5,b^33*e^2*h^15*k^3,b^34*e^15*i*j^7,b^34*e^7*f^10*k,b^34*f^4*g^5*j^6,b^34*d^9*h^4*j^3*k^2,b^34*c^3*f^2*i^2*k^10,b^34*c^10*g^10*i^2,b^34*c^12*d^3*f^2*g^4*h^4*j^2,b^34*c^31*d^10*e^14*i,b^35*c^36*d^9*j^3,b^36*e^26*j^5,b^36*c^10*e^6*h^2*j,b^36*c^15*d^3*f^12,b^37*e^8*h^4*i^8*k,b^37*d*h^9*i^3,b^38*d^12*e^2*g^7*h^2,b^38*c^9*d*f^5*i^5*k^3,b^39*i^14*j^2,b^40*c^16*d^6*f*j^8,b^40*c^28*j^2,b^41*d*e^14*f^2*h*k^8,b^41*c^2*e*i^11,b^42*c^5*g*j^2*k^10,b^43*c^26*g*i^5,b^44*f^7*g^6*j^3,b^44*d^7*k^12,b^44*d*f^5*g^5*k^3,b^44*c^10*d^22*e^5*h^4,b^45*c^3*f^6*g^4*i^4*k^4,b^46*e^9*f*k^6,b^46*e^2*g^3*k^15,b^47*c^3*e^13*f^8*h^2*k^2,b^48*d^6*e^7*f^11,b^48*e^8*g^4*h^6*k,b^48*c^4*f^3*g^4*k^4,b^50*k^8,b^50*d^28*f^2*j*k^3,b^51*c^23*d*f^9,b^52*c^5*d^2*e*j^7,b^53*d^26*i*k^6,b^53*d^10*h^7*i*j,b^53*f^2*g^2*i^5*k^2,b^53*d^20*f^8,b^53*c^5*d^3*g*h^6*i^3*k^3,b^53*c^10*d^13*g*i^2*k^6,b^54*c^4*d^10*i^3*j^6*k,b^55*d^10*e^11*f^4,b^55*c^3*e*g^3*h^5,b^61*g^7*i^2*k^2,b^61*f^6*g*h^2*j^2,b^62*e^4*g*j^4*k^4,b^63*e^13*i^4*j^2,b^63*d^8*h^2*i*k^4,b^63*e^8*f^2*j,b^63*c^12*h^4*k^4,b^64*d^8*g^7*k^2,b^65*e^4*f*g^4,b^67*f^3*g^10*h^2,b^67*c^16*j^2*k^2,b^69*g^5*i^3,b^70*c^4*d^8*f*h^3*i,b^71*c*e*g^12,b^72*c^26*e^3*k^3,b^74*c*d^4*i^3*k,b^80*h^5*i*j,b^82*e^3*f^2*h^3,b^82*c^3*g^5*h^2*k,b^84*i^6*j^2,b^86*c^9*g*i^3,b^86*c^23*d^4,b^88*c^21*k,b^125*h^3*j,c^6*e^10*f^10*g^5*i^2*j^3*k^4,c^3*g*h^7*j^7*k^9,e^7*f*g^18*h^5*k,c^31*d^2*e^13*h*j^7*k^3,c^6*d^21*e^9*g^6*h*j^2*k,c^47*i^5,g^7*h^10*i^3*j^5*k,e^16*f^8*h*k^7,c^5*d^5*e^9*f^11*i^3*j^3,c^14*d^19*h^6*i*j^7*k,d^38*g^5*h^6*i^4*j^2,c^24*d^3*e^8*g^2*h^4*j^5,c^12*d^11*f*h^11*i^6,d^22*e^4*g^12*h^4*i,c^16*e^3*i^14*j^4,c^7*e^6*f^9*g*j^12,d^17*h*i*j^4*k^11,d^11*f^6*g^10*h*j^3*k^2,d*e^11*f^2*g^3*j^2*k^5,c^8*d^25*g^2*h^3*k^9,c^4*e^22*f^6*g^10,e^11*f^8*g^6*h^4*i^3,c*d^7*g^5*h^15*i,c^13*d^3*f^8*i^6*j^8,d^14*e^4*f^5*i*j^9,e^6*f*g*i^14*j*k^3,d^15*i^11*k^7,c^4*d^7*e^20*f^2*h^6*k^6,c^35*e*f^4*i^5*k^3,c^22*e^8*f*g^11*j*k,d^36*e^2*f*h^2*i^4*k^5,g^3*h^12*j*k^9,c^8*e^26*i^6*k^4,c^10*d^20*e^13*f^5*i,c^22*d^13*e^6*i^3*k^8,c^32*e^17*f*g^6*k^2,f*g^24*h^3*k,d^12*e^9*f^3*g*h^11*j*k,f^5*h^2*i^6*j^12,e^19*f*i^4*j^11*k,e^11*f^15*i^3*j^3*k^4,e*f^9*g^7*i^3*j^10,c^2*h^4*i*j^7*k^5,c^7*d^9*f^13*k^8,e^15*g^3*i^7*j^6,d^18*g^2*h^4*i^4*j^2*k^3,c^12*e^10*f^3*h^2*j^5,c^17*e^2*f^17*k^2,d^2*e^6*f^2*g^9*h^2*i,d^12*f^16*g^9,g^14*h*i^3*k^6,c*d^26*g^8*h^6*k,c^8*d^12*f^2*i^4*j^14,c^36*e*f^5*g^5*h^4,c^24*f^7*g*h^11,e^35*g^2,d^16*e^15*g*h^4*k^4,c^30*i^3*j^6*k,e^24*h^7*i^7,d^24*e^4*h^11*i^4*k^4,c^5*d^8*g^10*i^6*j,c^7*d^39*f^3*g^4*i*j^3,c^42*d^3*e^5*j*k^8,c^54*g^6,d^16*g^6*h^2*i^14,d^8*e^15*f^2*g^4*h^9*i,c^18*d^18*e*f^2*h^5*i^4*j,e^2*f^2*i*j^4*k^15,c^3*e^21*g^3*i^4*k^2,c^5*d^29*e^8*j^2,c^10*d^39*f^13,c^19*d^53*h^2*k,c^52*e^16*k^2,d^6*e^10*i^12*k^2,d^16*f*g^3*i^4*k^13,d^2*e^8*h^9*j^12*k,d^12*f^12*h^2*j^4*k^4,e*h^8*j^6*k^10,f^14*g^14*j,d^5*f^4*h*k^13,c^27*d^6*e^12*g^9,e^28*f^7*g*i^7,c*e^21*g^6*i^9,c^3*d^21*e^8*f^5*h^3*i^4,g^3*i^4*j^18,e^11*f^16*g*j^2,c^3*d^10*h^11*j^6,c^8*d^20*f^14*h^4*k^2,d^4*f^18*h^7,e*g^2*h^13*i*k^4,d^18*f^2*h^18,f^10*g^2*h^6*k^7,e^8*g^16*h^6*k^2,e^6*f^9*i*j^9*k^2,d^8*h^2*j^13*k^3,f*g*i^3*j^3*k^11,d^8*e^17*h^16*k^2,e^12*g^9*h^11,c*d^2*f^6*g^3*h^16,c^25*f^14*j^2*k^2,c^7*e^5*g^2*j^11,c^12*d^2*f^11*g^2*j^3,c^21*d^16*g*h^4*j^7*k,e^6*f^15*i^6*j,d^16*e^4*f^5*i^4*k^9,h^7*i^4*j^5,d^10*f^13*i^3,c^7*g^3*h^6*i^6*k^6,d^17*e^19*j^7*k^4,d^11*e*g^12*j^6,d^4*g^17*i*k^4,c^31*g^8*h^2*j^5,e^15*f^9*i*k^3,d*e^4*f^25*j,c^5*e^5*f^3*g^5*h^5*i*j^3,c^7*d^14*e^3*h^9*k^4,c^10*e^8*f*i^3*k^12,c^19*d^8*f*g^4*h^9,d^11*e^22*f^6*g^5*k,d^25*e^10*g^4*h^2*j*k^2,d^35*e^2*f^4*g^4*k^5,c^29*e^25*g*j^4,c^30*e^7*h^14*i,d^19*e^11*f^8*g*i^4*k,d^33*h^9*i^2*k^2,c^4*f^10*i^11*j^2,c^8*e^26*f^13,c^13*d^6*i^9*j^6,c^17*e^14*h^7,c^22*d^8*e^6*f^11*k,d^8*e^2*f^3*g*h^6*j^3*k^9,d^33*i^4*k^9,c^4*d^9*e^21*g^11,c^5*d^6*e^3*h^14*i^4,e^30*g^8*h^3*i^2,d^27*e^2*f^10*g^7,d^3*e^16*i^5*j^11,c^11*f^6*g*i^4*j^10,c^16*d^6*e*f^4*i^6*k^5,c^60*e^4*j^4*k^2,f^4*g^10*j^9*k^4,f^2*g^3*h*i^17*j^2,d^38*e^3*j^8,c^3*d^17*e^8*f*g^6*i*k^3,c^5*d^48*f^7,c^12*d^31*g^5*j^2*k^4,d^15*e^5*g^2*i^10,e*f^3*h^2*i*j^7*k^9,c^2*f^11*g^3*h^2*j^6,c^21*e^20*i^4*j^3,c^23*d^11*e^7*h*j^5,c^35*d^4*i,c^40*d^14*f^6*k^3,e^8*g^3*j^8*k^7,d^21*f^6*j^10*k^2,f^14*g^3*k^10,d^14*g^2*j^4*k^11,c^9*e^9*h^3*i^12,c^14*e*f^10*i^11,f^2*h^2*i^4*j^2*k^7,d^22*h^6*i*k^11,d^30*e^3*g^3*h*i^2,e^12*f^7*j^5*k^3,c^2*f^13*h^5*j^7,c^10*d^23*g^8*i^4,c^12*e^5*g*k^12,c^12*d^54*g^2*h^5,c^59*d^12*g^4*h^2,d^5*e^6*f^10*g^4*j^8,f*h^6*i^8*k^12,c*f^2*g^9*j^2*k^5,c^3*d^29*f^8*g^3*h^2*j^4,c^21*d^3*e^7*f^6*h^6*i^4,c^33*g*h^5*i^6,d^13*f^12*h^5*j^2,g^5*h^11*j^4*k^2,e*g^11*i^3*k^10,d^6*f^4*g^5*h^4*k^5,d^20*e^32,c^8*d^13*e^25*g*i^2*k,c^8*d^14*e^14*f^3*g^10,c^44*f^3*i^8*k,f^8*g^2*h^7*i^9*k,d^3*e*f^3*j^15,g^4*i*j^9*k^9,d^27*f*j^11*k^4,e^28*g^2*j*k^8,d^6*f^9*g^4*j*k^12,c^7*h^16*i*j,c^12*f^11*h^9*k,d^11*f^5*i^7*j^9,d^3*e^24*f^8*h^3*j,e^17*h^2*k^8,e^7*g^12*h^9*j^2,f^8*g^12*h^2,c*d^20*h^6*k^12,c^8*d^6*e^3*j^9*k^9,c^20*f^8*j^8,c^32*j^2*k^9,f^12*h*i^9*j^6,c^6*f^4*i^11*k^5,c^7*d^11*f^5*g^5*j^9,d^15*e^13*g^8*h^2*k^6,e*f^9*g^2*i^4*j^7,d^25*i^2*j^4*k^7,f*g^7*i^6*j*k^3,d^19*f^7*g*i*j^3,e^28*f^4*g^5*k^2,c^2*d^2*g^6*h^4*i^4*j^5*k^4,c^7*d^12*g^6*i^3*k^7,c^8*d^25*e^3*h^16,c^11*d^4*e^8*f^2*g^4*h^4*k^6,c^26*d^20*g^11*i^4,c^30*e^7*j*k^12,c^30*f^12*j^6,c^42*f^4*g^3*k^3,d^36*e^6*g*j^5*k^5,d^9*e^12*h^19,d^2*e^5*h^18*k^3,c^6*e^3*f^6*h^3*i^4*j*k^3,c^16*f^8*i^8,c^18*h^2*i^6*k^12,c^29*f*g^17*j*k,c^30*f^6*h^2*i^5*k^3,d^44*i^5*k^5,e^18*h^3*j^10,e^23*i^4*k^6,d^9*e^10*f^3*j^2*k,d^40*f^9*h*j^4,d^19*e^2*f^17*k^4,g^8*h^3*j^9,c^2*d^23*h^7*j^6*k^2,c^5*d^2*e^3*i*k^10,c^5*d^3*f^11*g^8*j,c^7*d^33*f*k^5,c^17*f^3*g^13*k,c^40*e^18*k^6,d^20*e^17*g^8*j^3,d^17*f^5*h^3*i^7*k,d^10*h^2*i^9*k^10,c^28*e^7*f^2*i^3*k^6,d^28*e^6*f^2*g^4*i^2,d^42*g^3*h^7*j,d^52*g^3*k^3,f^8*k^17,f^8*g^4*h^11*j^7,c^3*e^21*f^7*g,c^13*d^25*f^2*g^2*i^6*j^4,c^15*e^14*g^6*k^4,c^17*d^17*e*f^5,c^24*e^2*g^5*h^4*k^5,c^29*d^10*g^5*k^8,c^48*f^7*j^7,e^18*h^8*i^5*j^2,d*e^10*f^9*h*i^4,d^15*h^12*i^2,c^3*e^3*f*g^2*i^6*k^4,c^5*d^25*f^7*h^5*i,c^17*d^18*g*h^4*i^3*k^8,d*e^6*f*g*h^7*j^7*k^3,d^11*f^15*g*k^6,f*g^20*h^6*k^3,e^7*g^25*h*j^2,d^26*e^5*g^10*h^5,d^5*e^10*g^16*i*k^2,e*f^4*h^9*j^6*k^3,d^36*f^4*g^10,f^18*h^2*k^6,e^16*i^7*j^7,c^3*g^2*h^8*k^12,c^6*d^5*e^4*i^5*j^11,c^11*d^15*i^4*j^3*k^3,c^15*d^7*e^30*f*k^2,c^55*j^10,c^58*e^4*k^8,b*e^3*h^11*i*k^8,b*f^6*h^16*k^3,b*d^5*e^27*h^10,b*d^26*e^3*g^9*j^4*k,b*d^57*f*g^3*j^6,b*c^3*d^15*e^19*f^3*h^3*k^2,b*c^10*e^9*g^3*h^10,b*c^15*d^9*e*f^11*g^3*h^3,b*c^27*d^2*f^3*g^8*h^2*k^2,b*c^34*f^5*i^6,b^2*d^9*f^3*g^7*h^9*j*k,b^2*j^13*k^7,b^2*d^34*g^5*i^7*k,b^2*d^65*f^3*i^2,b^2*f^5*g^6*j^12,b^2*c^2*f^3*k^19,b^2*c^18*d^20*e^2*j^11,b^2*c^21*e^7*f^2*g^2*i*j,b^2*c^30*d^13*g*j^5,b^2*c^35*d^23*g*k,b^3*e*f^10*h^14,b^3*d^44*e*f^2*i^5*k,b^3*c^2*d^9*f^3*g^17*h^4*j,b^3*c^4*e^4*h*i^10*j^3,b^3*c^8*f^4*h^5*i*j^10*k^3,b^3*c^9*d^7*f^4*i^9,b^3*c^13*f^18*j^2*k^6,b^3*c^16*g^3*i^12*k^3,b^3*c^18*d^21*h^5*i^7,b^4*e^26*h^7*k^4,b^4*e^7*f*j^11*k,b^4*i^22*k^2,b^4*d^18*e^3*f*g^12*i^4,b^4*f^15*j^3*k^4,b^4*c^3*d*e^4*g^17*i^7*k,b^4*c^5*d^32*g^11*i^2,b^4*c^9*h^2*j^7*k^5,b^4*c^14*d^6*f^13*k^8,b^5*f^3*h^5*i^4*j^5*k,b^5*f^17*i^3*k^4,b^5*h^4*i^6*k^10,b^5*d^4*f*h^9*i*j*k^5,b^5*d^11*e^19*g^11*i*k^3,b^5*c^3*d^5*i^20*j^2*k,b^5*c^7*e^25*i^7,b^5*c^14*e^15*g^5*i^7*j,b^5*c^16*d^11*e^13*h^3*i^5*k,b^5*c^16*d^12*e^2*h^4*i^2*j^3,b^5*c^28*d^5*g^4*h^3*i^4,b^6*e^21*j^7*k^8,b^6*e^3*g^9*j^6,b^6*d^15*g^8*h^2*j^2*k^3,b^6*d*i^2*j^20,b^6*g^28,b^6*d^39*e^19*f^3,b^6*c^2*e^4*g*h^6*i^15,b^6*c^3*d^22*e^20*g^4,b^6*c^8*d^32*e^12*g^4*k^2,b^6*c^10*d^63*f,b^6*c^15*d^16*e^2*g^18,b^7*f^2*g^5*h^5*i^7,b^7*d*e^12*f^5*h^8*j^6,b^7*e^7*f^7*g^2*h^3*i*j^3,b^7*d^4*f^11*k^11,b^7*c^5*g^7*h^2*i^3*k^4,b^7*c^7*f^5*g*h^7,b^7*c^26*e^24*h*i^2,b^7*c^31*d^5*e^16*f^2*i,b^8*d^5*e^12*g*j*k^6,b^8*e^7*g^21*k^2,b^8*f^2*g^15,b^8*c^13*i*j^12*k^3,b^8*c^15*d^9*f^2*j^14,b^8*c^18*f^10*j^4*k^6,b^9*c*i^9*j^6*k^3,b^9*c^3*e^29*i*k^7,b^9*c^3*d^17*f^4*h^3*i^4*j^8,b^9*c^5*e^16*f*h^5*k^2,b^9*c^15*e^11*f^3*g^14,b^10*d^28*f*g^4*j^9,b^10*e^23*g^8,b^10*e^5*f^3*h^12*i^4*k^2,b^10*d^20*e^10*f^4*g^2*h^3*j,b^10*c^6*d^13*e^3*g^7*h^2*k^4,b^10*c^37*g^6*j^6*k,b^11*e^12*g^4*h^5,b^11*d^7*e^4*f^14*g^4*k^3,b^11*d^11*g^3*h^16*k,b^11*f^10*i^4*j^10,b^11*c*d^7*h*i^2*j^7*k,b^11*c^11*f^2*g^3*i^6*j^4,b^11*c^13*i^4*j*k^10,b^11*c^13*d*f^8*h*i*j^6,b^11*c^25*g^2*i^3*k,b^12*e^18*g^3*i^2*j^6*k^4,b^12*d^18*e^5*j^8,b^12*e^10*f^5*g^3*i*k^7,b^12*d*e^6*g^2*j^10*k^5,b^12*g^17*i*j^5,b^12*d^11*g^2*j^2*k^8,b^12*c^12*d^5*g^16*j,b^12*c^17*f^5*h^14,b^12*c^37*d^7*j^7,b^13*e^7*i^10*k^4,b^13*d^26*h*i^5*j^2,b^13*f*h^7*i*j^14*k,b^13*d^19*i^7*k^8,b^13*d^20*f^7*g^7*h*i^4*j,b^13*e^27*j^6*k^4,b^13*d^13*g^12*i^6,b^13*c^4*d^5*e^3*f^2*g^10*h^7,b^13*c^9*e^22*i^4*j^3,b^13*c^11*e^9*f^4*j^5,b^13*c^16*d*e*f^18,b^13*c^23*e^2*i*k^4,b^13*c^25*d^15*f^2*h^3*j,b^14*f^2*j^4*k^15,b^14*e^11*h*i^12,b^14*d^2*e^16*f*g^4*j^6,b^14*c^10*e^9*g^9*k^2,b^14*c^12*d^26*g^3*j^2,b^15*f^6*i^4*j^2*k^11,b^15*d^16*e^23*i^3*j*k^2,b^15*d^10*e^5*f^3*i^2,b^15*e^6*g^5*h^5*i^5*j^2,b^15*d^3*g^5*i^4*k^2,b^15*d^34*f*h^3,b^15*c^23*d^5*e^18*h*k^2,b^15*c^33*e^13*g^2,b^15*c^35*f^6*h,b^15*c^47*g*k^2,b^16*e^7*g^2*h*i^15,b^16*d^14*e^5*g^19,b^16*h^7*j^12*k,b^16*d^9*f^12*j^4*k^4,b^16*c^21*e^2*f^2*h^3*i^6,b^16*c^35*h^7*i^3*k^2,b^17*e^34,b^17*e^27*i^2*k^5,b^17*d^24*e^14*h,b^17*c^5*d^8*e^4*g^6*h^8*j^2,b^17*c^8*e^9*g^12*i,b^17*c^10*d^18*f^5*g^6*h,b^17*c^22*d^11*g^11,b^17*c^29*i^4*j^6,b^18*c*f^16*g^7*j^2,b^19*d^43*e^10*g^2*h,b^19*f^4*g^3*h^12*j^4,b^19*d^6*g*i^8*j^9,b^19*c^4*d^16*g*i^7*j,b^19*c^51*g^3*i^3,b^19*c^53*d^5*f,b^20*e^2*g^2*j^17,b^20*g^3*i^20,b^20*f^9*g^2*j^9*k^2,b^20*c^8*d^9*e^7*h^5*i^4*k^3,b^20*c^19*f^3*g*h^16,b^21*d^2*e^22*f^11*h*k,b^21*d^5*e*f^3*i^2*j^4*k^11,b^21*h^3*i^2*j^11,b^21*f^11*i*j^3*k^2,b^21*f^3*g^3*i^3*k^11,b^21*d^5*e^5*h^14*k^2,b^21*c^14*e^2*f^2*g^8*i^4,b^21*c^25*j^8*k^4,b^22*g^4*h^4*i^13*j,b^22*c^6*f^18*h*i^3,b^23*e^12*f^7*j^2*k^5,b^23*e^2*f*g^5*h*j^9,b^23*f^15*g^5*j,b^23*c^2*g^4*h^5*j^5,b^23*c^21*d^4*e^19*j^2,b^23*c^26*d^14*e^11,b^24*d^5*f*h^12*i^4,b^24*e^20*i^10,b^24*c^14*d^22*i^7,b^25*d^8*e^8*f^6*g*i^2*k^3,b^25*e^11*h^3*j^4,b^25*c^5*e^3*f^9*k^3,b^26*h^10*i^2,b^26*c*d^22*g^10*j*k^2,b^27*f^2*i^4*j^3*k^7,b^27*c^20*d^3*g^5*i*j^6,b^27*c^24*e^2*g^3*h^5,b^28*e^21*f^7*h*k^6,b^28*g^2*h*i^12*j^4,b^28*e^11*f*h^8,b^28*d^10*f^7*h^13,b^28*c^12*d^3*h^12,b^29*d^14*g^13*h^5,b^29*c^6*e^4*j^11,b^29*c^9*e^9*f^6*i*j*k,b^29*c^18*j^5*k^2,b^29*c^23*d^3*f^4*k^5,b^30*c^6*d*h^3*i^7*k^2,b^31*d^19*g^3*j^6,b^31*d^12*g^8*i^2,b^31*c^30*d^8*j^5,b^31*c^42*d*g^4,b^32*c^4*e^4*f^4*h^2*i^2*j^3,b^32*c^9*d^2*f^18*i,b^32*c^16*g*h*i^4,b^32*c^18*d^16*f^2*h^6,b^32*c^21*f^10*g*i^3,b^33*d^2*f^10*h*j^8,b^33*d^9*e^29*j^5,b^33*c^3*e^4*g^15,b^33*c^5*d^26*e^2*k^7,b^33*c^5*d^27*g^9,b^34*e^9*f^11*h*i*j^3,b^34*f^9*h^5*k^3,b^34*c^16*d^6*e^13*h^4,b^34*c^28*e^6*h^3*k^3,b^35*f^6*g^12*k,b^36*d*e^29*i^3,b^36*d^25*e^9*h^4,b^37*d^8*f^5*g*j^9,b^37*e^12*f^8*h*j,b^37*e^5*g^4*k^8,b^37*c^2*d^25*e^7*f^2*i^2,b^39*j^2*k^12,b^40*d^6*f^3*i^5*j^2*k^3,b^40*c^11*e^4*i*k^8,b^40*c^13*f^6*h*j*k^3,b^41*d^6*f^3*j^2*k,b^42*d^4*h^8*j^4,b^42*g^2*i^4*k^6,b^42*d^14*f^5*h*k,b^42*d^7*g*i*k^10,b^42*c^23*e^2*f^10,b^44*d^4*e^16*f*k^4,b^44*e^6*g^3*h^6*j^2,b^44*e^11*f^3*g^9*i,b^44*f^9*g^3,b^44*c^5*g^8*h^5*k,b^44*c^7*d^12*g^2*h^10,b^45*c^4*e^4*g^2*j^7,b^45*c^18*d^12*g*j^3*k^3,b^46*d^23*e^12*k^2,b^46*f^2*i^7*j,b^46*c^6*d^20*i^4*k^3,b^46*c^10*d^12*e^7*f^3*h*k^2,b^48*d*j^9,b^50*c^4*d*f*h^7*j*k^5,b^50*c^14*e^13,b^50*c^23*d^8*e*h*k,b^51*c^2*d^2*e^2*f^2*i^7,b^52*e^13*h*j^4*k^4,b^54*c^8*g^2*i*j^6*k^3,b^54*c^32*i^4*k^2,b^55*h^8*i^5*k^2,b^56*c^8*d^4*j^7*k,b^58*g^5*i^2*k^4,b^58*d^23*j^2,b^59*d^2*e^4*h^4*k^4,b^59*c^4*i^4,b^60*d^13*e^11*j*k^2,b^60*d^7*f^3*g^6,b^62*c^5*d^21*e^2,b^63*d^5*e^11*f*h^2,b^63*e^4*h*i^2*k^5,b^65*c^22*e*i^2,b^66*c^9*d^3*e^8,b^67*d^11*i^5,b^69*c^7*e^8*g^3*i^2,b^71*h^8,b^75*g*i^2*j^3,b^75*c*d^5*h^2*j^5,b^75*c^13*h*k^2,b^77*e^10*j^4,b^77*c^11*e^3*k^5,b^79*d^7*g^3*k^3,b^85*c^2*d^4*e^3*g^6,b^91*f^2*g^4*j,b^96*c^4*h^2,b^96*c^9*f^2,b^104*c^11*g^4,b^108*d^2*f*g,c*d^6*e^19*f*g^3*h^4*k^7,c^7*d^19*e^12*f^4*i^2*j^6,c^37*e^4*i^4*j^3*k^3,c^7*e^7*g*i^4*k^13,c^9*d^23*f^6*j^2*k^8,c^19*d^7*e^5*f^10*g^2*k^2,c^2*d^5*e^2*h^12*i^5*j^2,c^11*f^9*i^12,c^30*g^6*h^3*i^7*j,d^19*g^2*h^4*j*k^13,d^3*e^5*f*h^7*i^5*k^9,d^18*e^3*f^11*h^10,d^8*e^9*f^2*j^12*k^2,c^25*e^6*f*i^4*j^3*k^7,c^14*d^16*f^4*g^5*j^6,e^9*f^8*g^2*i^5*j^4,e^2*g^7*i^7*k^5,c^2*d^24*f^6*g*h^3*i^2,d^14*e^18*f^2*h*k^3,c^12*d^8*f^10*g^8*h,c^10*e^29*f^6*g,c^4*e^24*i^8*j^4*k,c^4*f^4*g^6*h^5*j^9,c^28*d^4*e^15*f*g^2*i^2,c^16*d^12*e^4*f^3*i^10,e^11*g^9*h^3*j^3*k,c*d^4*e^2*f*g^15*h^5,c^8*e^8*f^3*j^15,c^8*h^3*i^10*j^3*k^5,d^33*g^4*h*j^6,e^31*g^8*h^3*k^2,c^9*d^26*g^9*i^2*k^7,c^32*f^5*g*j^9,d^2*e^20*g^4*h^10*k^2,c^18*e*f*g^3*h*i^7*j,c^20*d^6*f^7*h^6*i^2*j^3,c^32*g^2*h^5*i^4*k^3,c^67*f^4*h^3,d^23*e^13*j^5*k,c^5*e^8*g^17*i^2*j^2,c^7*d^16*e^6*g^2*k^10,c^7*d^17*f^4*g^11*j^4,c^12*d^26*f^2*g^2*k^13,c^19*d^10*g^16*k,d^31*e^2*h^6*i^6*k,c^5*d^7*e^24*g^4*j^3,c^19*d^31*e^4*g^3*h,d^15*e^13*f^2*h^4*i^3,e^14*g^5*h^10*i^6*k,c^5*d^8*e^6*g^5*h^3*i^5*k^4,c^7*d^39*h^8,d^50*g^13*h,f^7*g^2*h^7*k^11,c^3*e^24*f^6*g^7*h^2,c^36*d^2*e^3*i^5*j^3,i^10*k^15,e^4*f^3*g^3*h^17*j,c^60*d^10,d^31*f^3*g^5*j^3*k^8,d^5*e^8*f*i^19,d^32*e^6*g^15*i^3,c^2*e^2*f^8*g^2*j^6*k^4,c^16*d^20*f^6*g*j^2*k^8,h^8*i^3*j^8*k,d^4*f^10*h*i^2*k^4,c^2*f^2*g^3*i^4*k^13,d^61*e^11*i^4,e^20*f^6*k^7,e^9*f^22*j^4,e^10*g^5*h^6*j^6,e^2*f^14*g^5,c^2*d^18*f^4*h^3*k^11,c^2*d^19*f^20*h^4,c^9*d^2*g^4*h^10*j^2,c^14*d^12*f^12*g^4*h^3*k^2,c^33*d^19*e^19,d^10*h^17*i^5,d^13*e^16*f^5*g*i^3*k^5,d^27*e^4*h^10*i*k^6,d^37*f^3*h^3*k^9,d^7*h^2*i^6*j^15,f^7*i^10*j^5*k^2,c^7*e^19*h^8*j*k^2,c^12*d^2*e^11*f^8*h*k^5,e^8*h^15*i^3*k^2,c*e^3*f^3*g*i^3*j^13,c^3*d^21*e*h^4*i*j^10*k,c^6*e^6*f*i^5*k^9,c^8*d^31*f^7*j^2*k^4,c^13*g^6*i^5*j^7,c^15*d^15*f*h^4*j^9,c^27*d^8*g^5*h^3*i^2*j^3*k,d^32*e^8*j^11,d^11*e^13*g^6*j*k^7,e^3*g^20*j^8,c*g^2*h^6*i^13*j,c^5*e^19*h^13,c^6*d^2*f^11*g^2*i^12,c^19*d^8*h^17,d^26*e^9*f^8*i^6*j,d^40*h^4*i^4*j^5,c^13*d^5*e^12*h^2*j^8,c^18*d^15*e^4*f^11,c^25*e^5*h*j^2*k^4,c^37*g^12*h*j,c*d^13*e*h^9*i^6*j^2,d^24*e^8*g^3*h^2*i*j^3,d^34*f^10*g^3,d^17*e*g^8*h*i^3*k^2,c^2*d^48*g^2*h^6,c^4*f^2*h^5*j^4*k^11,e^11*f^7*g^4*j^11,f^4*h^12*i^2*k^11,c^4*d^13*e^22*f^9*i^3*k,c^11*e^12*f^3*h^7*i^3,c^16*d^7*e^4*f^17*i^2,c^23*e^5*g*h^6*i^5,c^28*f^9*g*i^4*k,d^7*f^9*h^6*j^5,f*g^5*h^5*k^9,d^14*e^37*j^2,d^8*e^19*g^10*j,d^38*e^17*h^4,c^10*d*e^12*g^15,c^34*e^3*i^7*k^5,c^2*f^8*h^10*k^5,c^6*d^30*g^4*i^6*j^4,f*h*i^10*j^3*k^9,d^5*f^2*g^5*j^12*k^2,c^29*d^3*i^8*j,d^16*e^25*f^4*g^3*h^4*k,d^3*f^4*g^22*h^3*k,e^6*f^6*g^2*i^3*j^10,d^3*g*h^6*i*j^14,d^13*f^4*g*j^6*k^2,d^5*e^20*f^7*h^6*k,d^6*g^6*i^2*k^11,c*e^13*g^4*h^5*k^10,c^9*d^30*e^15*f*i^3*k,c^32*f*g^3*j^3*k^7,c^34*d^2*f^7*h*j^5*k^2,f^8*h^2*i^11*j^4,g^3*h*i^13*k^7,e^8*f^3*h^4*i^3*j^4*k^7,c^6*e^3*f^5*i^7*j*k^3,c^8*f^11*h^4*i^2*j^3,d^32*f^3*g^11*i^3*j,d^3*e^15*j^5*k^5,d^34*e^2*f^6*h^2*j^7,f^8*g^8*j^4,d^27*h*j*k^9,d^6*f^6*k^17,c^4*d^11*g^7*h^8*j^8,c^7*g^13*k^5,c^9*d^20*k^18,d^11*e^4*f^2*h^4*i^6*k^5,d^5*f^10*g^4*h^4*i^5,c^4*d^43*e^10*h^3*i^4,c^6*e^19*f^7*h^2*j^2*k,c^18*e^12*h*i^2*k^10,c^18*e*f^15*g*h^2*j,c^20*f^5*h^6*k^5,c^51*d*e^18,d^22*e^11*g^4*i*k^3,d^46*g^3*h*k^7,f*g^3*i^8*j^11,e^26*f^4*g*j^3,d^9*g^2*i^6*j^15*k,c^2*d*e^14*h^6*j^7,c^3*d^19*g^2*i^5*j^7*k^4,c^7*d^11*e^6*f^2*k^3,c^19*d^4*g^5*k^12,c^38*f^4*j^10,e^15*f^6*h^2*i^3,d^9*e^3*h^13*i*j,e^8*g^2*h*i^5*k^8,f^14*g^11*h^2*i^2,d^22*e^13*g^14*k,d^19*f^4*h^6*k^3,c^2*d^3*g^10*h^13,c^2*d^5*e*f^6*i^6*j^11,d^30*e^2*f*g^10*k,f^3*g^30,c^13*d^3*f^3*g^9*i^2*j^5,e^26*f^10*g^4,d^9*e^24*h^4*k^6,e^14*g^3*h^11,c^2*d^24*e*h^16*j,c^3*e^19*f^2*g^9*i^2*k^2,c^5*d^3*e^6*f^8*g^3*h^4,c^14*d^17*g^2*h^15,c^17*g^8*h^3*k^6,c^26*d^13*f^8*j^5,c^50*f^8*g*i,d^3*e^2*g^7*h^10*j^4*k^5,d^59*i*j^3,d*e^3*h^18*i^6,j^2*k^23,c^8*d^14*e^7*j^14,c^11*e^12*g^2*j^4*k,c^12*f^4*h^2*i^13*k^3,c^13*d^24*f^5*j^6,c^20*d^7*g*j^8*k^2,c^25*d^17*g*k^5,d^38*e^6*i^4*j*k^5,e^9*h^2*i^9*j^6,d*e*f*i^8*k,c*d^32*f^7*i^3,c^8*d^15*h^6*i^6*j^2*k^2,c^11*g^3*i^10*k^10,c^13*d^25*i^5*k^5,c^48*f^4*k,d^8*e^4*f*h^2*j^17,d^11*f^7*g^2*j^3*k^12,d^26*g^11*i*j^3,h^3*j^10*k^9,d^36*g^11*k^3,c^2*f^4*g^4*k^17,c^35*d*e^3*f*g^8,f^22*j^6,e*h^6*i^3*j^8*k^5,f^14*i^2*k^8,h^10*j^4*k^9,d^22*e^17*f^3*i,c^6*d^6*e^7*h^5*i*j^6,c^9*e^12*f^5*g^5*i^5,c^11*d^15*e^10*i^3*k^8,c^11*d^16*f^11,c^13*d^46*f*h^2*k^3,c^18*g^4*h^4*i^3,c^21*e^5*g^10*i^7*k^4,c^23*d^9*f^3*g^4*i^2,c^72*f^6,e*f^7*g*i^13,d^57*e^4*k,c^5*d^10*e^7*g^18*j,c^9*g^6*i^15*k^4,c^10*d^20*g^18,c^11*d^17*f^5*h^4*i^10,c^14*f^14*g^5*k^6,c^29*g^3*i^5*j^5*k^3,g^5*h^6*i^6*j^3*k^3,e^12*f^4*g^2*h^4*j^6,e^5*g^7*h^3*i^2*k^8,f^2*g*h^8*j^2*k^3,d^28*f^2*g^14*i^5,c^9*d^6*e^28*f^7,c^21*e^21*k^2,c^33*e^3*f^7*g^11,e^17*g*h*j^4*k^10,g^15*h*j^3*k,d^23*h^5*k^14,i^24,d*f*g^11*h^8*k,f^3*i^6*j^15,i^8*j^9*k^7,d^11*f*h^4*i^3*j^11*k^2,d^39*e^12*g*h^7,d^49*e^4*f^4*g,c^9*f^12*g^2*h^11*j^2,c^10*d^42*g^6*k^4,c^27*g^6*i^10,c^45*d^7*e^12*f*g^3,d^12*g^25*h,d^22*g^4*j^12,e^28*g^8*j^2*k^4,e^10*h^13*i^3*k^6,d^14*e^15*f*g^2*h^4*j^4,d^11*f^6*h^18*k,d^38*g*h^8*k^3,c^4*d^39*e^10*i*j,c^8*d*f*g^21*h^3,c^15*f^3*g*j^15,c^29*d^11*f*j^11,d^30*h^4*i^6*j^6,e^17*g^4*h^6*k^4,d^22*e^4*f^3*h^11,d^5*e^5*g^3*h^17*k^5,e^5*f^7*i^3*j^13,d*e^3*h^2*i*j^10*k^5,f^21*i^2*j^5,d^11*f^11*j^2*k^8,c*g^3*i^5*j^7*k,c^3*f^5*h^2*j^9,c^6*f^13*g^3*i^4*k^4,c^8*d^5*f^19*j,c^15*g^2*h*i^2*j^3*k^5,c^27*d^12*e^14*f^2*i^3,c^50*f^2*j^6*k,b*e^6*h^13*i^6*k^4,b*d^12*e^10*j^11*k^3,b*f*h^4*i^13*j*k,b*d^6*f^2*g^11*j^10,b*e^21*f^4*h^11,b*f^10*g^17*k^2,b*d^15*g^2*k^15,b^2*d^20*h^2*i^4*j^5*k^3,b^2*d^14*f^4*g^7*h^2*i^3*j^4,b^2*d^7*g^12*h*i^5*k^3,b^2*e^8*g^10*h^8*k^2,b^2*d^52*e^5*h*i^2*j^3,b^2*c*e^14*f*j^8,b^2*c^2*d^31*e^10*f*g^3*i^6,b^2*c^11*d^45*g^2*i^4,b^2*c^13*f^9*g^4*j^7,b^2*c^15*d^9*h^4*j^4*k^3,b^2*c^25*f*g^9*j,b^2*c^27*d^2*h^3*k^12,b^2*c^46*d^10*e^13,b^2*c^58*d^3*e^6*g^4,b^3*e^16*h^2*i^11*k^4,b^3*e^21*g^4*j^9,b^3*e^3*f^3*h^7*i^6*j^2,b^3*d^27*e^8*f^4*j^11,b^3*d^6*e^13*f^12*g^4*j,b^3*c*h^6*i^8*k^8,b^3*c^2*d^20*e*g^3*j^5*k,b^3*c^15*d^11*f^9*h^11*i^2,b^3*c^34*d^18*e^2*h^5*i^6,b^4*d^4*e^10*i*j^3,b^4*d^18*h^11*j^7,b^4*e^3*g^5*i^3*k^6,b^4*f^8*g^14*j^2,b^4*d^28*h^4*k,b^4*d^7*f^6*g^5*i^2*k^9,b^4*d^11*g^4*h^10*i*j*k^7,b^4*d^14*i^4*j^17,b^4*g^19*i^2,b^4*c^2*d^21*g^4*h^3*k^10,b^4*c^21*d*i^5*j^10,b^4*c^23*e^18*g^2*k^2,b^4*c^25*e^5*f^3*h^2*j^2,b^4*c^30*d^3*f^17,b^5*d^12*f^2*h^7*i^9,b^5*d^39*g^13,b^5*f*g^5*j*k^17,b^5*d^18*i*j^12*k^5,b^5*e^27*f*i^8,b^5*e^14*f^7*h^5*i^3,b^5*c*d^28*f^3*j^4*k^8,b^5*c^4*e^6*f^21*i^2,b^5*c^7*i^18*j^2*k^3,b^5*c^11*e^7*h^4*i^5*k^2,b^5*c^12*d^4*e^12*g^10*j^3,b^5*c^13*d*f^5*h^9,b^5*c^14*d^35*f^6*g^4*j^5,b^6*d^23*e^6*g^10*i^4,b^6*f^5*g^2*h^3*k^13,b^6*e^21*f^4*g^7*j,b^6*d^18*e^19*h^2*k^4,b^6*e^14*g^12,b^6*d^12*e*f^2*g^6*h^2,b^6*c^7*e^2*g^11*h^8*k,b^6*c^12*d^5*g^11*h*k^4,b^6*c^19*i^3*j^9*k,b^6*c^24*d*f^10*i^2*j*k^4,b^7*d^2*e^28*h^5*i^7,b^7*e^10*f^6*g^3*h^5*i^6,b^7*e^3*g^8*h^4*i^8,b^7*d^13*g^7*h^8*i^5*k^4,b^7*c^6*d^2*e^7*g^5*j^10,b^7*c^7*i^11*j^3*k,b^7*c^11*e^23*f*h^7,b^7*c^35*f*g^4*h^6,b^8*d^17*e^3*f^3*i^4*j^10,b^8*e^4*g*i^7*j^12,b^8*d^10*g*i^6*j^4,b^8*d^2*e^30,b^8*c^8*d^34*i^3*k^3,b^8*c^12*d^26*e^10*h^4*k^2,b^8*c^29*e^11*j^7,b^8*c^43*j^3,b^9*e^5*i^17*j^2,b^9*d^10*e^19*h^7*i,b^9*c^3*d^13*e^4*f^6*i^2*k^10,b^9*c^7*d^20*e^5*h^3*i^4*j^4,b^9*c^17*f^2*i^8*j,b^9*c^29*i^10*k^4,b^9*c^31*d^7*h^2*i^5,b^10*f^8*j^6*k^6,b^10*g^3*i^2*k^15,b^10*d^31*e^12*j^5,b^10*d^10*e^17*f^5*i^3*k^5,b^10*f^3*g^9*h^15*j,b^10*c^4*e^7*g^8*i^3*j^2,b^10*c^6*d^25*f^5*g^2*j^4,b^11*d^2*f*g^4*i^11,b^11*d^66*g*j^2,b^11*f^15*h^2*i^2*j^3*k^2,b^11*c^8*e^23*g^7*h^4*k,b^11*c^29*e^9*i^3*k^2,b^11*c^29*f^12*h*j,b^11*c^41*f^4*i^2,b^12*d^43*e*g^3*i^4*k^4,b^12*f^12*g^5*j^4,b^12*d^7*f^2*j*k^13,b^12*g^4*h^6*j^8*k,b^12*k^22,b^12*d*f^10*g^4*k^4,b^12*c^4*d^15*e^23*f*j^3,b^12*c^11*e^24*j^5,b^12*c^16*d^8*e^16,b^12*c^28*d^2*f*g^14,b^13*f^14*g*h^2*i^5,b^13*h^13*i^3*j^2*k,b^13*e^25*i^9,b^13*d^23*e^12*f^3*h*i^4,b^13*c*e^11*f^5*h^7*j^9,b^13*c^4*d^16*e^5*i^6,b^13*c^6*e^3*f^19*j,b^13*c^13*e^4*g^3*h^6*i^2*j^3*k^2,b^13*c^18*f^11*g^3*i*k^5,b^13*c^39*e^20,b^14*d^2*e^13*f^3*g*i*k^7,b^14*d^33*f^9*j^2*k^2,b^14*d^26*f*k^11,b^14*f^3*i^5*j^7*k^8,b^14*e^8*f^6*k^7,b^14*c^7*e*g^2*k^16,b^15*e^5*h^11*i*j*k^4,b^15*f^2*g^7*h^11,b^15*f^16*g^7*h^4,b^15*e^31*h^6*i^2*j^3,b^15*c^2*d^7*e^23*f^7*i,b^15*c^14*e^16*g^3*i^3,b^16*f*g*i*j^19,b^16*d^4*j^15,b^16*c*f^7*g^6*i^2*j^5*k^2,b^16*c^2*e^14*f^2*h^7*j^7,b^16*c^3*d^13*j^2*k^15,b^16*c^7*d^6*e^6*f^16,b^16*c^10*g^5*j^9*k^3,b^16*c^14*e^7*g^3*h^6*j*k^2,b^16*c^34*d^14*e^2*g*i^3*k^2,b^17*d^8*e*g^3*h^11*i^4*k^2,b^17*e^16*h^9,b^17*d^4*e^3*f^4*h^14*j,b^17*e^8*f^12*h^2*k,b^17*c^2*h^13*k^2,b^17*c^7*d^7*f^10*h^6*k^5,b^17*c^8*e^11*i^14,b^17*c^14*f^12*j^5*k^2,b^18*d^8*g^2*i^6*j*k^9,b^18*e^9*j^14,b^18*e^14*f^3*j^4*k^5,b^18*c*d^4*e*f^9*j^6,b^18*c^8*e^2*j^8*k^6,b^18*c^13*f*k^9,b^18*c^15*d^28*f^7*j^2*k^4,b^19*g^9*i^8*j^5,b^19*f^5*g^3*h^5*i^3*j^7,b^19*c^8*g^8*h^4*i^5*j,b^20*d^13*e^5*g^3*j^9,b^20*d^23*f^8*g^3*j,b^20*d^6*g^8*i*j^3*k^4,b^20*f^2*g^2*h^18,b^20*c^20*d^2*j^8,b^21*e^9*f*h^3*i*j^6,b^21*e*f^15,b^21*c^6*e^2*g*h^2*i^3,b^21*c^8*d^10*h^7*j^2,b^21*c^11*f^7*g*i^2*k^3,b^21*c^55*h^4,b^22*e^9*g^15*j,b^22*d^21*g^9*j^3,b^22*c^19*d^10*f^4*j^7*k^2,b^23*d^5*e^5*g^6*h^3*i^4*j,b^23*e^7*g^4*h*i^2*k^12,b^23*d^8*f^6*g^11*i^5*k,b^23*c^6*e^18*h^5*j,b^23*c^18*f^3*g^2*h^5,b^23*c^30*g^7*h^4,b^24*d^29*f^3*g^4*i^3*j^2,b^24*c^4*e^2*g^4*h^7*i^8,b^24*c^5*d^5*e^7*g^16*j,b^24*c^6*d^2*f^5*h^12*i^3,b^25*d^13*f^2*g^12*h^5,b^25*e^5*f^10*g^5*h^4*k,b^25*c^5*d^6*g^17*h^4,b^25*c^12*i^6*j^7,b^25*c^26*d^16*i^3*j^3,b^26*d^19*e^12*i*j*k^3,b^26*d^3*e^2*g^11*i*j^8,b^26*h^3*i^14*j,b^27*d^2*e^6*f^7*h^9*k^3,b^27*f^3*i^5*j^7*k^5,b^27*f^9*j^9,b^27*c^3*f*i^2*j^3*k^9,b^27*c^22*e^6*g^4*i^3*j^5,b^27*c^24*d^6*e^4*i*j^2,b^27*c^29*d^16*f^4*k^3,b^27*c^36*g^3*j,b^28*d^10*f^4*g^7*j^6*k^2,b^28*d^2*e^8*f^7*g^5*h^4*k,b^28*c^10*f^2*h*i^11,b^29*f^8*g^4*i^3*j^4,b^29*g^9*i^5*k^7,b^29*e^5*g*h^18,b^29*d^25*i^4,b^29*c*f^13*g*j^7,b^29*c^13*f^5*g^6*j*k^3,b^29*c^15*f^11*h^2*j^3,b^29*c^34*e^15,b^29*c^48*d^14,b^30*e^3*j^5*k^5,b^30*c^4*d^24*j*k^9,b^31*e^12*f^4*i*j^3*k,b^31*h^9*j^7*k^2,b^31*d^8*f^2*h^2*k^5,b^31*d*g*h*k^14,b^31*d^2*f^10*g^10*h^2,b^31*c^9*d^9*e^11*g^6*i,b^31*c^25*k^10,b^32*c*f^9*h^7*k,b^32*c^2*d^15*e*f^10*g*j^5,b^32*c^14*d^8*f^2*g^6*k^3,b^33*e^21*k^8,b^33*e^3*f^6*g^3,b^33*e^4*g^8*h^6*k^5,b^33*d^6*g^2*h^11*j,b^33*g^8*k^8,b^34*f^8*h^7*i^3,b^34*c^18*e^8*g*h^11*k,b^35*d^17*e^17*k^6,b^35*i^6*j^4*k^3,b^35*d^21*f^5*i*j^6,b^35*d^14*i^3*k^7,b^35*c^26*e*j^11,b^36*f*i^14*k^3,b^36*c^18*g^8*j^4*k,b^36*c^19*f^4*i^5*k^3,b^37*d^5*f^9*j^4,b^37*c*g^4*i*j^6,b^37*c^6*f*g^4*k,b^37*c^8*d^29*f^7,b^38*d^19*e^3*f^3*h*i^7*k,b^38*h^7*i^9,b^38*d^6*f^3*i^8*k,b^39*e^25*f^5*j^3,b^39*c^4*e^18*k^4,b^39*c^6*d^19*e^5*f^3,b^39*c^18*d^12*k^8,b^40*e^15*h^5*i^7*k,b^40*c*d^11*g*h^10*i,b^42*c^2*e^18*f^3*i^3,b^42*c^11*e^6*h^7*i,b^42*c^16*d^4*f*k^2,b^43*c^10*d*e^11*i*j^4,b^44*d^9*f^2*i^9,b^46*c^17*d^7*h*i^4,b^46*c^29*i^6*k,b^47*d^3*f^12*j*k^2,b^47*c^8*i^16,b^48*d*h^3*i^7*j^3,b^48*e^4*i^3*k^4,b^49*d*g^6*j^3,b^49*d^25*g^5*h^2*k,b^50*d^9*f^2*g^2*h^5*i,b^50*e^20*h^3*j*k^2,b^50*c^18*g^4*h^2*k^2,b^52*e^16*h^3,b^52*g^14*h^2,b^52*c^14*i^3*j^3*k,b^54*d^7*e^7*g*h^5,b^54*c^12*e^6*i*j^2*k^4,b^54*c^24*f^2*j,b^55*e^13*j^3*k^2,b^56*d^5*e^2*i^4*k^2,b^56*d^36*h,b^57*c^10*e^6*h*i^6,b^58*d^20*f^3,b^58*c^6*d^3*e*g^2*h^5,b^58*c^11*d^13*g^2,b^59*e^2*h*i^9,b^60*h^9*j*k^4,b^62*c^3*d^2*e^6*i^4*j^2,b^64*f^5*g*k^5,b^64*d^9*f^11,b^66*c^13*g^7,b^68*d^8*e^11*h*j^2,b^68*d*e^4*g^3*k^7,b^76*d^5*f^2*g^2*k^5,b^85*e^15*f*i,b^85*e^3*h^3*k,b^93*g^2*h*j^3,b^97*e^4*g*h,b^101*d^2*g^2*k^2,b^102*c^17,c^13*d^11*e^3*f^2*g^3*i^11*j^2,c^62*f^5*i^2*j,d^17*f^3*h*j^5*k^12,c^7*e^10*f^13*g^5*h^4,c^16*d^7*g^4*h^15*k,c*e^5*f^6*i^11*j^2*k^4,c^17*f^4*h^4*j^8*k^6,e^14*f^5*g^2*i^4*j^7,e^7*g^7*i^6*j*k^9,d^18*f^3*g*h^4*i*j^3*k^4,c^39*e^2*g^3*h*k^9,d^2*e^3*f^7*h^7*i^12*j,c^2*d^2*e^5*f^7*g^8*h^2*j,g^3*i^9*j^8*k^2,e^34*f^3*g*k,c^14*d^16*e^14*f*h^4*k^5,c^45*f^3*j^7*k^2,c^20*d^8*f^2*g^9*i^3*j^2,c^18*e^20*g^2*i*j*k^3,d^16*f^6*g^2*i*k^14,d^48*e^3*f^3*g^6,c^30*d^14*f^2*g^4*h^2*i^3*k,f^4*g^2*i*j^19,c^4*f*g*h^13*k^5,e^7*g^15*h^6*k^3,c^27*d^2*f^16*g*j^4*k,c*e^5*f^20*i^3*j^2,c^10*f^4*h^7*i*j^6,c^22*g^2*h^6*i^3*k^7,d^11*f*g^11*j^7,d^19*f^3*g^7*h^7*i^4*j,c^32*g^9*h^4*k,d*e^29*g^4*j^6,d^11*e^21*f^11*g^4*k^2,d^9*e^18*h^5*i^2,d^19*e^10*f^13*i*k^2,d^33*h^9*k^3,c^14*f*i^9*j^11,c^20*d^6*e^2*f^4*h^14*i,e^29*f^3*g^7*h^3,c^26*e^8*i^4*j^6*k^3,c*d^15*e^4*g*i^7*j*k,c^3*d^46*h^3*i^2*j^3,c^36*e^19*i*j^4,c^50*d^4*k,e^7*f^5*g^2*j^9*k^8,f^7*h^2*i*j^3*k^8,c*d^36*e^20*h*j^2,c^11*e^15*g^8*i^4,c^13*d^30*e^2*f^4*g^2*h*j,c^25*d^23*g^7*i,c^3*f^14*h^7*i^3*k^4,e^7*f^11*g^5*j*k^2,g^4*h^11*j^5*k^3,c^4*d^6*f^9*g^4*h^4*k^6,d^4*h^18*i^4*k^3,e^33*h*i^10,d^11*f^10*i^4*j^10*k,c^9*e^6*g^11*h^9*j^3,f*g^7*h^16*i,e^8*g*h*i^2*j^16,d^25*f^4*j^5*k^8,c^5*d^9*h^5*j^12,c^10*d^19*f^12*j^4,d^3*f^16*h*i^9*j^2,f^8*g^2*i^11*k^4,c^9*d^2*e^4*h^18*k^4,g^16*i^7*j^5,c^3*e^17*h^3*j^11,c^8*d^9*e^9*f^8*j^3*k^2,c^20*d^2*e^2*k^11,d^17*f^10*h^3*i^4*k^2,c^3*h^9*i^7*k^8,c^3*d*f^4*g^3*h^10*i^4*j^4,d^18*e^13*g^3*h^3*j^6,d^11*e^6*g^8*h^2*i^2*k^6,d^42*g^2*h^7*j^2*k,d^21*g^8*i*k^9,d^52*f^5*g^2*k^4,c^2*d^5*g^22*h^2*i,c*e^17*h^8*i^2*j^3,c^6*d*e^9*f^14*h*i,c^13*e^10*g*h^7*i^4*k^2,c^15*d^15*h^12,c^18*e^2*f^6*g*i^3*k^5,e^17*g^15,c^2*d^26*e^4*g^9*h^5,e^4*f^7*i^12*j^2,c^25*e^8*f^2*g^2*h^10,d^24*g^4*i^5*j^7,c^45*d^13*j^6,c^19*e^3*h*i^7*j^4,c^24*d^7*f^9*i^6,c^68*h^3*j^3,d^7*f*g*j^9*k^6,c^8*d^39*g^5*j^7,c^10*e^6*f^6*j^12*k^2,c^11*d^18*e^2*f^6*g^11*i,d^16*g^7*h*i^10,f^8*h^5*i*j^6*k^2,c^10*h^4*i^3*k^11,c^29*e^14*g^4*i^4*j^2,c^31*d^12*e*f^5*h^4*j^4,e^20*j^8*k^9,e^2*f^5*g^8*j^7,d^21*h^2*j^4*k^13,d^5*g^7*h^9*j^11*k,d^15*f^3*g^7*h^2*j^3*k^4,c^18*d^22*e^19*g^3,f^7*g^4*h^5*i^4*j,d^6*e^28*i^8,d^37*e^15*h^4*i^3,d^16*e^20*f^4*i^7,c^4*e^10*g^14*i^7,c^6*d^30*e^8*h^3*i^5,c^6*d^31*f^4*g^8*h^4*i^2,c^8*e^6*f^12*g*h^3*j^4,d^5*e^11*j^2*k^7,c^9*f^7*g^14*j,e^20*f^3*h^3*i^2*k^3,d^13*f*h^7*k^7,g^10*h^14*j^3,c^4*d^21*e^26*g*h^2,d^13*f^6*i*j*k^14,c^3*g^9*i*j^8*k^2,c^21*d^13*e^2*f*g^6*h^2*k^5,d^12*f^10*i^7*j^8,d^5*f^2*g^5*i^9*j^2*k^2,e^24*g^9*i*k^6,e^11*f^5*g^3*h^5*k,c^2*e*g^17*h^12*j,c^4*d^11*g^2*h^16*k^2,c^16*d^7*f^5*h*j^8*k^2,c^28*i*j^2*k^11,c^28*d*f^13*h*j^7,c^40*f^5*g*j*k^2,d^5*f^7*h^12*i^4*k,c*e^17*g^2*j^7*k^5,c^2*f*h^3*i^12*k^7,c^3*d^18*e^4*f^2*j^9,c^10*d*e^5*g*j^11*k^6,c^15*d^11*g*j^3*k^9,d^2*e^13*f^6*i^5*j^7,e^6*i^7*j*k^5,d^26*f^4*h*i^2*j^3,c*f^6*g^12*i^6,c^3*d^19*i^4*k^9,c^3*d^20*f^12*g^6*h*i*j^2,c^15*d^13*f^4*g^11*i^3,c^38*e*f*k^5,d^6*e^13*g^12*i^2*j^2*k^3,d^3*h^3*i^15*k^5,d^37*f*g^6*j^4,d^30*g^11*k^7,d^61*g^5*k^2,c^12*e^10*f^5*h*i^9*k,c^14*f^11*h^6*i^4,c^27*d^26*f^4*g^2*j^3,d^45*f^3*g^2*h*i^5,d^16*e^22*j^2*k^3,e^12*h^6*j^9,c*d^10*e^4*f^8*j,c^8*e^5*g^4*h^5*i^2*j^3,c^10*d^24*h^10*j^5,c^13*d^3*g^4*i*k^3,d^8*e*h^13*i^8*j^3,e^6*f^4*g*h*i^12,d^18*f^10*h^6*i^7,d^14*e^4*g^18*k,c*d^11*f^2*h^5*i^9*k^3,c^7*e^10*i^2*j^14,c^12*e^26*f^7*h^4*i^2,d^29*f^7*g^9*i^2,f^21*h^3*j^3*k,g*h^9*j^5*k^7,d^8*f*i^10*j^8,e^33*f^4,c^7*d*i^12*j^2*k^7,c^11*e^26*k^6,c^13*d^24*e^13*f^2*h*k,c^23*e^8*f^4*g^11,c^25*d^18*f^10*g^5*h,c^44*f^4*i*j^7,f*h^16*i^4*k^7,e*i^23*k^3,e^12*g^2*h^11*i^5*j,d^43*g^7*i^2*j^5,d*e^15*h^3*i^7*k^6,d^2*e^4*f^14*g^2*h^4*i^4,c*d^32*e^2*f^4*h^8*i^2*k,d^19*e^29*f^3*g^2,d^43*e^9*f*g*h,f^9*g^2*h^12*j^5,c^9*d^53*f*j^5,c^14*d^6*i^5*j^10,c^17*e^3*g^6*i^9*k,c^19*d^16*f^3*i^4*j^2,c^26*g^5*i^7*j^4*k^2,c^35*d*e^17*g^3*k^4,f^5*g^4*h^14*i*k,g^21*h^4*k^3,c^5*g^2*i^17*k,c^9*e^26*f^2*h*i^4,c^23*d^9*e^6*h^5*i*k^4,c^30*e^12*f^2*i^7*k,g*h*i^8*j^13,f^2*h^3*j^12,i*k^21,f^16*j^4*k^3,c^17*d^6*e^19*i^2*j,d^9*g^2*k^19,d^24*g^10*j^9*k^2,e^6*h^16*k^8,c^5*d^14*e^8*f*i^10,c^12*g^3*h^4*i^10*j^2,d^8*f*g^7*h^3*i^2*j^7,e^20*f^4*g^5*h^10,c*d^39*e^3*g^2*h*i^3,c^3*e^12*j^5*k^12,c^3*e*f^6*g^4*h*j^10,c^5*d^3*h^5*j^7*k^7,c^6*d^49*g^2*i^2*k,c^15*g^9*j^4*k^3,c^36*d^4*e^18*j^3,c^48*e^11*g^4*k^3,e^3*f^2*g^6*h^3*i^9*j^2,f^8*h^8*i^4*j^4,f^22*h*i^3,c^3*g^5*h^7*i^6*k^3,c^4*d^8*f*g^17*j^7,c^5*d^5*f^6*h^12*i,c^10*e^27*h^2*i^8*j,c^29*d^22*f^3*i^4,c^38*f^5*g^2*h^5*j,e^15*h*j^6*k,d^8*e^7*f^11*k^4,e^8*g^5*i^2*k^10,f^5*g^14*h*j^5,d^22*h^5*j^2*k^5,d*f^3*g^5*i*k^13,g^19*i*k,c^11*i^4*j^13*k^2,c^11*d^23*e^14*g^9,c^13*e^23*g^2*j^3*k^6,c^15*e^10*h^3*j^5*k,c^16*d^33*e^6*g^9,c^20*e^2*f^14*k^4,c^27*e^3*g*h^2*k^10,d^6*e^4*h^8*i^8*k,g^33,e^11*f^18*i,c*e^12*h^5*i^4*k^6,c^3*f^2*h^10*k,c^15*h^9*i*k^10,d^6*e^6*g^6*h^3,e*f*g^26,c^2*g^11*h^2*k^8,c^11*d^16*j^14,c^14*f^7*i*j^4*k^8,c^35*d^3*g^4*j^7,c^39*e*f^2*g^2*h^5,e^15*f^3*g^3*h^6*i^5,d^14*f*g^2*h^10*i^2,e*f^3*h^2*i^8*j^12,h*i^10*j^6*k^5,e^30*f^8*h^4*j,c*e^28*h^8*k^4,c^7*g^7*i^14*j^3*k,c^9*f^3*g*h*i^9*j^5,c^23*d^11*f*h^5*i^6*j,c^27*d^3*f^4*h^12,d^25*e^2*g^16*h^3,d^4*e*g*i^5*j^7*k^3,d^35*j^9,e^35*h*k^2,g^2*h^5*j^21,g^15*i^4*j^6,d^28*i^2*j^3*k^7,c^19*e^16*j^10,c^33*j^6*k^3,d^4*e^24*h^8*k^2,d^28*e^4*h^12*k^6,g^14*h^7*i*k^2,e^4*f^21*i^4*j^2,c^7*e^5*i^7*j^4,c^9*d^8*f^5*h^4*i^2*j^6,c^19*i^9*k^8,c^21*d*h^3*i^4*k^3,c^56*f^2*h*j^3,e^19*f^4*g^3*j^11,g^9*h^16*j^4*k,f*h^6*i^15,d^18*e^10*j^2*k^10,d^19*f^2*g^2*j^7,e^4*f^10*g^8*i,c*d^28*e^2*k^13,c^3*d^2*g^7*h^3*j^9,c^8*d^12*g^7*j*k,c^10*d^43*g*h*j^3,c^43*e^7*g^4*j^4,c^45*d^8*f^5*j^6,c^57*d*g^3*k,d^33*e^6*h^4*i^6*j^2*k,e*g^4*i^10,d^27*f^4*h^4*i^5*j,d^20*g^3*h^3*i^7*k,d^12*e^15*g*h^10,c^7*e^21*f*h^2*j^5,c^19*e^14*h*i^2*k^6,c^19*e^3*f^9*h^2*j^4,c^31*f*h*i,c^33*d^16*f^7*h^6,b*f*h^8*j^17,b*d^4*h^6*i^18,b*d*e^2*j^4*k^17,b*f^7*g^4*j^3*k^8,b*d^9*e^28*j^6,b*c^5*e^5*f^5*h^4*i^12,b*c^6*d^2*e^21*k^4,b*c^18*e^3*g^14,b*c^20*d^27*f^4*g^8*j,b^2*d^3*f^9*h^7*i*k^8,b^2*e^30*i^8,b^2*d^17*e^17*h^2*i^3,b^2*d^10*e^10*h*i^5*k^4,b^2*d^11*f^8*g^5*h^2*i^2,b^2*e^8*f^16*h*j^4,b^2*d^41*h^6,b^2*c^6*d^4*g^10*h*i^4,b^2*c^8*e*f^8*g^3*k^9,b^2*c^8*d^34*h^5*i^2*k^8,b^2*c^11*d*e^4*j^4*k^15,b^2*c^29*e^25,b^3*d^20*k^15,b^3*d^21*e^17*g^10*k^2,b^3*f^3*g^5*h^10*j^11,b^3*d*e^5*g^4*i^5*j^12,b^3*c^18*d^17*e^19*g,b^4*e^2*f^5*h^5*k^11,b^4*g^7*h^12*j^3,b^4*d*e^28*f^4,b^4*e^29*g^3*h^6*i^3,b^4*d^2*g^5*i^15,b^4*c*d^15*e^16*h^11*j^2,b^4*c^4*e^21*g^3*i^2,b^4*c^6*d^25*e^8*f^2*h^4,b^4*c^9*d^4*e^13*f^10*g^3*i*k,b^4*c^13*d^8*e^9*g^2*h^10,b^4*c^18*d^18*e*g^2*h^3*k^2,b^4*c^25*d^4*e^7*i^5*j^6,b^4*c^37*f^4*i^4*j^5,b^4*c^53*e^16*h,b^5*d^4*e^9*f^2*g^7*k^9,b^5*d^35*f^8*g*h^3*k^4,b^5*h*j^18,b^5*f^4*g^6*i*j^8*k^6,b^5*d^8*f^10*j^10*k,b^5*e^11*f^13*h*j^2,b^5*c^5*d*f^2*g^5*j^4*k^10,b^5*c^5*d^29*e^8*g^16,b^5*c^9*e^4*f^5*g^3*k^9,b^5*c^12*d^15*e^14*j^7,b^5*c^13*d^12*h^2*i^13,b^6*d^12*f^4*g^3*h^5*i^2*k^9,b^6*f^6*g^2*i^9*j^2*k^6,b^6*e^3*f^3*g^14*h^10*j,b^6*e*h^14*k^6,b^6*d*f^7*h^7*k^9,b^6*e^16*i^13*k^2,b^6*c^4*f*g^13*h^14,b^6*c^4*f^9*j^8*k^6,b^6*c^9*e^2*h*i^4*j^13,b^6*c^16*f*i*j^2*k^15,b^6*c^35*e^18*i^2*j^4,b^6*c^49*d^12,b^7*d^33*f*j^6*k^8,b^7*e^6*f^6*j^9*k^4,b^7*c^3*j^3*k^13,b^7*c^35*i^12*k^2,b^8*e^3*h^6*i^3*j^11*k,b^8*d^6*f^8*i^2*j^3*k^4,b^8*f^10*g^9*i^6,b^8*i^4*k^13,b^8*f^16*g^3*i*j^2,b^8*g^8*h^5*i^4*j^4*k,b^8*d^14*g^2*h^10*j^6,b^8*c^4*d^6*f^3*h^17,b^8*c^5*e^22*i^6*j^7,b^8*c^10*d^7*e^14*i^5,b^8*c^22*e^7*g^4*i^7,b^8*c^26*e^3*f^5*k^9,b^8*c^31*d^14*g^3*h^3*i^5*k,b^9*d^17*e^2*f^5*g^3*j^4*k^2,b^9*e*g^2*h^19,b^9*d^15*e^3*f*i^13,b^9*c^2*f^15*h^4*i^4,b^9*c^10*e^5*h*j^11,b^9*c^10*d^8*i^15,b^9*c^15*d^6*f^8*j^3*k^2,b^10*d^25*f^7*i^5*k^2,b^10*e^24*f^4*j^2*k^7,b^10*e^14*h^4*j^9,b^10*e^6*f^12*j,b^10*e^7*g*h^3*i^2*j^3*k^4,b^10*f^6*g^10*h^4*j^8,b^10*d^4*h^8*j^5,b^10*c*f^4*g*i*k^7,b^10*c^3*d^14*f^10*h*k^2,b^10*c^15*d^7*f^2*k^11,b^10*c^34*d^15*e^5*f*g^5,b^11*e^3*h^11*i^8*j^3,b^11*d^15*e*g^9*h*j^6,b^11*e^6*f*g^15*k^5,b^11*d^25*f^7*g^9,b^11*d^8*g^14*k^6,b^11*c^9*d^4*f*j^10*k^6,b^11*c^34*d^4*g^5*h^3*j^5,b^12*d^9*e^2*f^11*g^6*i^2,b^12*d^39*f*h*k^9,b^12*d^2*f^3*g^11*i^4*k^5,b^12*e^23*h^6*j^4*k^2,b^12*c*d^4*e^15*f^6*k^5,b^12*c*d^5*e^4*f^22*j,b^12*c^4*g^4*i^7*j^11,b^12*c^6*e^18*g^8*h*j,b^12*c^8*e^5*g^2*h^6*j^3,b^12*c^13*f^14*g^2,b^12*c^20*g^7*h^5*k^2,b^12*c^22*d^12*g*h^10,b^12*c^28*d^13*i^10,b^13*e^6*f^18*h^2*i^4,b^13*d^15*e^22*f^3*g^2*k^3,b^13*e^7*g^4*h^8*i^7,b^13*f^2*h^13*i^2,b^13*c*d^6*f^16*h^6*i,b^13*c^19*e^3*f^5*g*j^8,b^13*c^28*d^2*j^12*k,b^14*d^13*e^19*h^6,b^14*d^7*e*g^12*h^6,b^14*d^16*e^4*g^3*k^12,b^14*g^17*h^5,b^14*c^2*i^5*j^10,b^14*c^4*d^17*h^2*j^12,b^14*c^7*f^7*i^4*j^2,b^14*c^16*d^10*h*i^2*j^6*k,b^15*e^23*h^11,b^15*d^7*f^4*g^11*j^3,b^16*d^36*g*h^2*i^3*j^7,b^16*d^29*g^6*h*i^5*j,b^16*d^31*e^2*f^7*g^4*h*k,b^16*c^14*e^9*j^5*k^4,b^16*c^14*d*f^3*j^10,b^16*c^19*d^10*e*f*k^7,b^16*c^26*g^3*j^4,b^17*d^63*f*g*j,b^17*e^28*g^4*j^2*k,b^17*h^2*i^10*j^2,b^17*c^12*g^5*h*i^12,b^17*c^14*d^2*h^6*i^7,b^18*d^19*e^5*i^3*k^2,b^18*e^3*f^10*g*j^10,b^18*d^29*i^2*k^5,b^18*c*d^13*g^13*i^2,b^18*c^3*f^2*g^6*j^4*k^7,b^18*c^24*e^20*j^3,b^18*c^36*e^2*g^10*j^2,b^18*c^38*d^8*h*k^2,b^19*c^12*e^9*h^4*i^5,b^20*e^17*f*j^6*k^5,b^20*f^7*g^10*h^3*j,b^20*d^10*e^23*g*j^4,b^20*d^3*e^16*g^6,b^20*c*d^34*e^3*h^2,b^20*c^4*d^13*e^8*f^4*g^6,b^20*c^11*g^20,b^20*c^36*e^18*f*j^3,b^21*d^11*e^5*g^2*h^4*i^8,b^21*e*f^6*h^8*k^5,b^21*d^9*e^6*f^7*g*j^8,b^21*c*f^8*g^9*h^3*i^3*k,b^21*c^4*d^2*g^6*j^2*k^7,b^21*c^22*e^20*h^2*i^2,b^21*c^36*h^6,b^22*e^13*g^7*i^3*j*k^3,b^22*d^28*f^6*g*h^4*j^3,b^22*e^8*f^3*g^3*h*k^3,b^22*d^11*e^3*g*i^10*k^3,b^22*c^47*i*k^3,b^23*c^10*h^17*j,b^23*c^30*i^10,b^24*d^5*e^4*f^2*g^13*h*k,b^24*e^3*i^5*j^7*k^7,b^24*d^15*f^2*j^9*k^2,b^24*d*e^6*f^13*g^4*h^4,b^24*c^2*f^5*g^9*h^3*k,b^24*c^5*d^16*e^9*g^2*i^3*j^5,b^24*c^21*j^6*k^7,b^25*c^5*d^17*g^3*i^13,b^25*c^9*f*h*i^4*k^7,b^26*d^34*f*g^2*i^3*j^4,b^26*e*f^6*j^7,b^26*e^2*g^4*h*j^9*k^2,b^26*g^4*j*k^5,b^26*d^23*f^4*j^3,b^27*e^3*f^2*g*i^10*k,b^27*d^7*f^8*h^2*i^5*j,b^27*h*i^7*k^5,b^27*c^7*e^5*f^13*j^4,b^27*c^19*f^5*i*k,b^28*e^23*k^8,b^28*d^13*e^10*j^2*k^3,b^28*c^3*g^5*h^4*j^9,b^28*c^6*e^5*f^2*g^11,b^28*c^8*d^6*e^3*k^12,b^28*c^8*d^7*f^8*g^5*j,b^29*e^19*f^4*i^3,b^29*e*f^12*g^2*i^2,b^29*d^21*f^2*h^4*k^3,b^29*d^5*g*h^11*j^3,b^29*f^4*g^7*i^4,b^29*d^15*f^10*g*h^4,b^29*c^8*d^8*f^2*g^6*h^3*i*k^3,b^30*d^32*e^6*g*k,b^30*c^2*d^5*f*i^2*j^8,b^30*c^6*e^21*f^4,b^31*e^23*i^2*k^2,b^31*d^5*e^10*f^6*h^2,b^31*c*e^11*h^8*k^3,b^31*c*g^8*h^9*j,b^31*c^6*e^3*h*k^6,b^31*c^39*d^2*f^6*i*j,b^32*e^16*j^7*k,b^32*c*f^2*i^13*k^3,b^33*c^18*d^13*e*f^8*h^4,b^33*c^37*f^2*k,b^34*f^2*g^3*h*j^12,b^34*c^24*d^3*e^7*j,b^35*f^20*i*j^2,b^35*e^16*f^3*i^5,b^35*d^18*e^3*f^9*j,b^35*c^7*d*e^4*h^2*i^3*j^3,b^35*c^12*d^11*f*i^2,b^35*c^19*h*i^5*k^5,b^36*d^22*e^3*g^9,b^37*h^6*j^5*k^3,b^37*f^14*k^6,b^37*c^5*e^22*h*j^7,b^37*c^19*d^16*e^2*h^5*j^3,b^37*c^22*e^7*f^5*g^2,b^37*c^31*d^9*g*h^4,b^38*e^3*g^6*j^6*k,b^38*c^22*g^2*h*j^5*k,b^39*d^3*g^2*h^6*k,b^39*c*f^18,b^39*c^6*h*i^4*j^7*k^2,b^39*c^10*f^2*h^8*k,b^39*c^16*e^2*i^10,b^40*d^3*g^12*h,b^41*c^4*i^2*j^6*k^5,b^42*d^24*e^10*f*h^4*j,b^43*d^16*f^2*i^3*j^7,b^43*c^2*f^7*j^10,b^43*c^14*j^4,b^43*c^28*h*k^3,b^44*d*e^10*f^2*k^9,b^44*c^2*f*h^4*i^7,b^45*f^6*g^5*j^5,b^45*d^30*h^2*j^2*k,b^45*g^10*i^2,b^46*e^11*h^2*i^5*k^2,b^47*d^14*e^5,b^47*e^6*g^2*h^6*j^2*k,b^47*c*d^7*g^2*k^4,b^48*e^7*h^2*i^8,b^48*c^24*e^2*h^4,b^49*c^11*e^9*g^9,b^50*c^20*d^9*i^5,b^51*c^7*d^20*j,b^52*d^4*i^11,b^52*e^27*h^2*k,b^52*c^30*f^2*i^2,b^53*d^3*f^8*j^3*k^4,b^53*c^17*d^4*e^2*g^5,b^54*d^2*g*h^5*i^6*j,b^55*f^12*g^2*j,b^55*c^3*g^7*h*j^3*k^4,b^55*c^5*d*g*h^6*j^5,b^56*h^9*j^3,b^56*d^9*h^13,b^57*d^12*e^8*f^3*k^5,b^57*g^12*h^2*j^4,b^58*h^11*k^2,b^59*c^14*f^7*g^3*j^2,b^60*d^4*e^8*f^9*g,b^60*h^2*i^5*j^4,b^62*e^6*i^3*j^3,b^62*f^5*i^2*k^3,b^62*c^21*g^5*h^4,b^64*c^19*h^2,b^66*d^15*g^3*h^3,b^66*d^8*g^8*h^2,b^72*g^6*k^5,b^72*d^11*e^15*i,b^73*c^3*d^10*j^2*k^3,b^78*j*k,b^80*c^5*e^4*f^3*g^2,b^83*f*h^6*j,b^83*c^5*d^6*e^2*k^2,b^91*c^7*k^2,b^93*g^5,b^110*g*h^3,d^23*e^2*f^2*g*h^9*i^2*k^6,c^17*d^5*e*f^3*h^12*i^2*j^3,d^3*e^4*f^6*h^7*i^2*k^10,c^3*e^8*f^13*g*i^2*j^5,c^12*d^14*h^10*j^9,d^12*g*h^5*j^6*k^8,d^9*e^3*f^7*g^4*j^11,c^10*d^2*g^9*i^2*j^5*k^4,d^10*f*g^5*h^3*i^10*k^4,c^10*d^23*e^12*f*j^6*k^2,e^14*h*i^8*k^7,d^31*e*f^3*h^6*i^3*k^2,d^42*e^8*g^6*j,c^8*d^15*e^12*f^7*h^4,c^2*d^13*e^7*i^11*j^5,c^26*d^21*f^2*i^5,d^5*e^7*f^6*i^16,c^13*d^32*e^5*g^14,f*h^8*j^9*k^2,c^3*e^3*f^9*g^3*i^4*k^10,c^5*d^4*f^15*h*j*k^5,d^13*g^7*h^8*i^3*j^4,e^5*f^4*g^14*h^6*j^2,c^10*e^7*f*h^15*k^3,c^16*f^2*g*h^6*i^10*j^2,d^9*e^9*g*i^6*j^4*k^5,d^40*h^4*i*j^6,d^19*e*f^5*g*i^5*k^8,c^3*d^3*g^15*i^5*j^3,c^5*d^33*h^3*i^3*k^9,c^40*e^4*h*j^3*k^5,c^14*e^13*h^4*i^8*j*k,c^3*d^24*e^7*f*g^2*h^2*j^4,c^15*d^17*g^7*h*k^3,c^17*d^48*g*h^6,c^38*e^4*h^6*i^2,f^6*g^4*h^5*k^10,c*d^14*e^36*j^3,d^3*h^6*j^15,d^13*f^9*j^7*k^3,c^12*d^6*f*g^5*j*k^12,f*g^3*h^11*i^3*j^7,d^4*h^3*i^5*k^15,d^5*f^15*g^3*h^4*i^2,c^5*g^8*h^10*i^5*j*k^3,c^7*d^19*g^2*h^15*j^3,e^14*f^11*h^2,c^5*d^9*e^2*h^13*j^2*k,c^8*e^7*f^3*g*h*i^2*k^9,c^16*d^9*j^7*k^8,d^7*e^3*f^2*g^11*h*i^5*k^7,d^28*g^4*i^3*j^2*k^6,c^3*d*e^2*f*h^18*i^3,c^9*e^8*h^2*i^6*j^7,c^11*d^22*h^7*i*j^9,c^14*d*f^6*i^5*k^2,d^33*e^2*g^5*j^10,c*d^12*e^7*f^3*g^11,f^5*h^6*j^9*k^6,f^19*j*k^9,c^21*d^6*e^6*f^2*h^5*j^7,c^33*g^3*h^4*j,c^38*d^9*f^8*g^3,c^12*f^12*i^10,f^4*g^4*h^6*i^3*j^4*k^4,d^10*e^25*f*i^6*k^3,d^41*e^12*f^7*i,e^15*g^14*i^6,d^55*h^9,c*d^34*e^5*i^3*k^7,c^12*f^7*h^8*j^3*k^4,c^31*e^28*h^2,g^16*h^3*i^2*k^7,c^6*d^8*e^24*g^6*h^2*i,d^33*e^8*f^5*g*h^9,d^6*f^7*i^6*j^11,g^5*i^8*j^5*k^6,e^16*f^2*g^3*h^6*k^5,d^5*e^4*g^2*h^17*j*k^6,c^6*d*e^2*f^2*h^2*j^11*k^6,c^7*d^47*f^2*i^6,c^16*f^4*g^2*i^2*j^8*k^2,c^30*f^2*g*h*j^4*k^6,e^5*f^4*h^13*i^3*k^5,d^12*e^9*j^12*k^4,c^5*d^5*e^2*g*j^6*k^13,e^18*f^3*i^4*j^10,e^11*i^6*j^4*k^9,d^20*f*h^2*i*j^6*k^4,f^3*g^12*i^5*j^3,d^13*h*i^3*k^13,d^14*f^9*g^6*h^2*j^5,c^5*d^7*f*g^11*h*i^2*k^4,c^4*e^2*f^8*h^7*i^3*j^3,c^17*d^20*f*g^2*j^6*k^2,d^39*g^2*h^2*i^4*j*k^2,d^4*e^9*f^5*j^4,d^14*e*f^19*k,d^18*h^11*j^8,c^3*e^2*g^4*k^7,c^5*d^28*f^3*h^4*k^2,d^12*f^7*h^7*i^6,d^5*h^6*i^8*k^7,d^39*g^12*j,d^23*e^5*f^4*g^9*i,e^38*f*j^3*k,c^3*d^18*e^18*h^2*k^5,c^13*e^13*f*g^11*k,c^15*d^12*f^7*g^5*h^2,c^27*d^5*g^10*h*k^5,c^34*f*j^10*k^2,e^9*f^11*g^2*h^5*i^3,d^10*g*h^16*i,c^3*d^20*f^9*g*h^9,c^22*f^3*i^8*j^4*k^2,d^13*e^34*g^2,e^9*g^21,e^7*f^16*g*i^5*j,c^4*e^3*i^4*j^13,c^9*d^10*i^3*j^5,c^13*d^2*e^29*f^3,c^58*f^3*j^4,e^4*f^4*i^14*j^3,g^2*i^16*k^5,e^31*h^2*i^3*k^4,c^8*e^8*g^8*h^14,c^32*f^7*i^5*j^2,d^29*g^10*i^6,f^5*g^2*j*k^16,c^7*e^24*i*j^4*k^3,c^33*d^18*f^2*g^6,d^9*e^2*f^14*i^6*j^3,d^39*f^4*h^3*i^4,c^2*e^3*g^3*h^5*i^9*j^5,c^10*d^66*j^3,c^19*g^8*i^10*k^3,c^44*e^8*f*k^3,d^2*g^7*h^4*i*j^10*k^2,d^50*e^7*f*j,d^33*e^8*g^2*h^2*i^2*j^3*k^2,e^6*f^3*g^4*h^2*j^13,d^43*g^2*i*k^5,c^31*d^8*e^15*k,d^18*e^3*f^4*g^3*j^3*k^12,f^3*h^13*j^3*k^2,d^9*f^17*h^6*k^5,c*i^19*j^4,c^5*e^24*f^2*i^6,c^14*d^6*e^12*h^7*i^4,c^14*d^7*e*f^2*g^4*h^8*i*j^5,c^19*d^16*e^4*i^3*k,d^2*e^12*f^8*j*k^8,e^2*f^2*g^14*h^2*j^8,d^16*h^6*j^5*k^9,f^16*g^14,d^10*g^13*h^6*j^4,f^2*i*j^22,c^6*d^27*e^11*g^9,c^10*e^7*f^11*k^8,e^16*f^15*k^4,e^4*h^11*j^2*k^5,d^35*g^5*i^6,f^13*h^4*k^8,c^3*f*g^12*h^6*i^2*k,c^24*e^23*g^2*h^5*i,e^11*g^6*h^4*j^3*k^3,d^31*f^2*h^9*j^5,c^2*d^56*i^4*j^2,c^49*d^14*e*k^3,e^20*g^3*h^7*i^4*j,e^12*f^14*g^3*i^3*k^2,d^25*f^20*h^5,d^8*g^2*h^11*i*k^3,g*h^2*i^8*j^8,c^3*e^15*f^3*h^9,c^17*f*h^13*k^3,c^23*e^10*i^11,d^8*f^3*g*i^3*j^2*k^10,e^4*f^5*h^16*i^3,c^11*e^8*j^15,c^11*d^6*i^19,c^23*e*j^9*k^7,e^11*f^2*g^9*h^9,d^2*f^2*h^5*i*j^9,c^4*d^12*f^16*j*k,c^11*h^4*i^3*j^3*k^7,c^23*f^2*g^7*h^4*i^2*j^2,c^30*d^3*e^16*i^4*j^5,d^13*e^4*g^2*j^10,d^23*f^13*g^2*j^2,d^6*g^7*j^4*k^5,d^37*g*h^2*j^6,c^35*d^2*f^2*j^9,c^47*g^3*j^3*k^5,e^6*g^4*i^9*j^2*k,d^21*f*h^5*i^4*j^4,d^45*h^9*i,d^6*e^20*g*h^11*k^4,c^7*e^21*g*i^3*j^5,c^9*e^8*f^6*h^3*j^7,c^14*f^20,c^21*e*h^2*j*k,c^26*f^12*k^4,f^4*g^4*h*j^6*k^12,e^26*j^3*k^8,c^8*e^8*g^14*j^2,c^9*h^9*i^8*k,c^10*d^21*f*g^8*j^4,f^30*j^2*k^2,f^6*h^8*k^12,d^11*e^22*h^3*i^2*j^3,e^17*g^11*i^6,d^5*e^4*f^5*g^5*h^3*i*j^2,d^35*e^2*h^7*k^3,g^10*h^2*i^3,d^29*f^3*g^4*h^7,f^11*h^6*j^3*k^8,c*d^8*f^11*g^10*i^2*k^2,c^19*e^30*k^4,c^21*e^17*h^5*j^2,c^31*e^12*f^2*g^7,c^33*f^8*g*h^5*j,c^45*g^6*h^4,d^46*e^9*g^4*k,c^4*d^19*g^3*i*j^11,c^8*d^11*e^24*g*j^3,c^9*d^8*e^6*f^2*h^12*i,c^9*d^29*f^8*g^3*j^3*k,c^19*e*f^4*g^3*h^7*i^5,e^33*f*h*j,e^26*g^3*i*k^2,d^19*e^13*h^5,e^18*f^7*g^3*k^5,c*d^29*e^5*f^13,c^3*d^2*e^14*g^2*h^11*k^3,c^3*d^3*e^3*g^11*h^12*j^4,c^6*e^8*f*g^17,c^8*d^12*e^6*g^2*h^4*k^6,c^13*d^22*f^5*g^2*k^9,c^20*d^6*g^16*h^4,c^39*g*i^5*j^2*k^3,c^41*d^16*j^4,e*f^3*h^18*j^3,c^2*d^9*e^19*j^10*k,c^13*i^16,c^14*d^3*e*g^10*j^9,c^15*f^3*h^3*i^11*j^2,d^6*e^3*f*g^3*h^6*i*k^13,f^4*h^8*k^13,d^17*e^8*i^7*j^4*k,d^48*h*i^2*j^6,d^9*e^42*h^3,d^27*f^6*i^6*k^4,c^2*d^11*g^6*i^6*j^3,c^4*f^8*i^2*j^8*k^6,c^4*d^41*i^4*k^5,c^4*d^42*f^6*h*i*j^5,c^6*d^3*e^24*f^3*g^4*h^3,c^18*e^17*g^9*h^2,c^39*d^6*e^3*j^3*k,d^11*e^13*f^5*h^10*i,c^6*d^4*e^6*g^5*h^9*i^3,c^7*d^10*f^9*g^6*j^7*k^3,c^11*d^14*f^11*g^5*h^2*i^2*k^3,c^13*e^12*h*i^9*j,c^25*f^7*h*i^8,c^27*d^14*h^5*i^6*k,f^5*i*j^6*k^8,g^3*h^7*i*j^13,i^3*k^17,f^13*g^3*j^5,d^8*g^2*h^11*j^9,e^4*h^18*j,d*e^19*i^4*j^2,c^2*d^32*e^6*f^2*j^4,c^5*d^11*e^11*f^10*i^3,c^14*d^25*i,c^16*d^56*h^3,c^28*f^10*g^5*j^2*k^4,c^49*e^14*j,d^9*e^8*h*i^12,e^4*f^12*h^5*i^3*j^3*k^4,d^2*e*i^14*k^4,c*d^36*e^6*g^12,c^2*f^14*g^2*i^7,c^5*e^2*f^5*j^6*k^6,c^17*g^4*k^15,d^19*f^4*i^4*j*k^6,d^51*e^2*f*g^3*i^2,e^11*f^9*j^4*k^2,d^15*f^15*h^3*j^6,e^3*f^23*k^5,h^9*j^8*k^3,d^44*g^8*i^4,e^4*f*g*k^11,d^8*f^7*h^2*k^6,g^15*h^4*j^5,h^8*j^2*k^12,f*g^9*h^9*j^7,c^5*d*h*k^15,c^5*d^2*f^15*g^9*h^2,c^19*e^18*g^5*h^3*j^4,c^24*d^9*e^10*g^5,c^36*d^2*e^3*g^10*k^2,e^19*f^2*g^2*i^9,c^7*d^7*e^7*g*h^10*i^7,c^12*d^17*g*h^3*i^6,b*d^3*e^7*f^8*g^6*i,b*d^17*g^5*h^9*j^3*k,b*g^11*i^3*k^9,b*d^27*f^6*g^5*h^2*k^4,b*f^2*h*i^4*j^20,b*e^20*f^3*k^9,b*e^9*f^19*h*j^4,b*g^4*i^6*j^14,b*e^10*g^2*h^7*j^6,b*f^8*g^4*i^5*j^6*k,b*d^28*e^6*g^15*i,b*c^3*e^2*f^11*g^2,b*c^10*e^3*g^7*h^6*k^6,b*c^12*d^6*g*h^11*j^2*k,b*c^13*d^24*f^6*g^3*i^2*j^2*k^5,b*c^18*d^7*e^5*i^9*j^3,b*c^67*j^2,b^2*h^14*i,b^2*e^4*f^7*g^4*h^2*i^5*k^5,b^2*f^13*h^7,b^2*d^14*h^18*k,b^2*c^6*d^15*i^17,b^2*c^10*f^7*i^8*j^4*k^6,b^2*c^10*d^7*e^28*h*i^4,b^2*c^23*d^6*j^7*k^8,b^3*d^17*e^16*f^2*k^7,b^3*d*e^6*g^12*h^7*j,b^3*d^11*f^10*g^12,b^3*d^4*f^2*g^17*k^7,b^3*e^5*i^4*j^13*k,b^3*f^4*i^3*j^5*k^4,b^3*d^21*f^10*j^7,b^3*c^6*d^4*h^2*i*j^9*k^5,b^3*c^9*g^2*i^5*k^13,b^3*c^11*d^14*f^2*j*k^8,b^3*c^30*d^22*e^3*f*g*i*j^3,b^3*c^41*j^12*k,b^4*d^5*f^14*i^9*j^5,b^4*f^6*i^11*k^4,b^4*e^10*f^3*g^5*h^12,b^4*d^4*e^8*h^16*k^4,b^4*d^25*g^10*j^2*k^6,b^4*c*e^13*f*h^4*k^12,b^4*c^8*e^3*g^10*h^11,b^4*c^10*f*g^4*h^16,b^4*c^10*e^6*f^9*h*i*j^5*k^4,b^4*c^20*e*f^11*i^5*j^2,b^5*d^9*f^3*g^7*i^6*k^2,b^5*d^40*f^9*g*i*j^2,b^5*d^33*f*g^6*i^3*k^6,b^5*c^2*e^16*g^4*i*j^11,b^5*c^4*e^3*h*j^13,b^5*c^7*e^8*f^8*g^4*j^3,b^5*c^9*d^4*e^6*k^11,b^5*c^9*d^5*f^14*j^5,b^5*c^16*g^3*j^7,b^5*c^19*e*g^9*i^2*k^7,b^5*c^21*f^6*g^3*k^2,b^6*d^19*e^2*f^8*h*i^4*k^2,b^6*e^5*h^3*i^9*j^5,b^6*f^10*i^8,b^6*c^4*h^7*i^6*j,b^6*c^6*d^27*h^12*i*j^3,b^6*c^8*d^9*f^3*g^17,b^6*c^9*d^6*f^8*i^5*k^2,b^6*c^39*h^5*j^4,b^7*d^30*e^9*f^5*j,b^7*d^14*g^8*h*j^8,b^7*d^23*e^2*i*k^9,b^7*d^54*f^3*k^4,b^7*d^7*g^13*i*j^2,b^7*d^17*f^5*g^13,b^7*c^19*e^17*f^2*k^5,b^7*c^33*d^12*k^9,b^8*c^2*e^14*h^5*i^4*k^2,b^8*c^2*e^3*f^6*g*h^6*i*j^5,b^8*c^7*e^6*f^4*i^3*k^5,b^8*c^14*g^6*h^5*i^3,b^8*c^16*d^11*f^4*h^10*j,b^9*e^21*g^6*j,b^9*d^28*e^8*h^3*j^3,b^9*d^7*e^13*f*g^6*k^3,b^9*d^38*f^7,b^9*c*e^3*g^20,b^9*c^3*d^21*e*g^5*h^2*k^4,b^9*c^8*d^31*g^5*k^7,b^9*c^38*e^16*g^2,b^10*d^5*e^10*g^2*h^5*i^7,b^10*d^15*e^2*f^3*g^2*i^6*k^3,b^10*e*f^5*g^9*h^4*i^2*k^5,b^10*e^4*g^6*j^5*k^11,b^10*c^12*e^25*h^3*i,b^10*c^13*f^5*g*i^13,b^10*c^14*d*e^12*h^8,b^10*c^22*d^2*i^11*j^2*k,b^10*c^26*e^5*h^7,b^10*c^31*d^4*f^6*k^3,b^11*c*d^12*e^19*g^7*h*j,b^11*c^37*e^3*k^7,b^12*c*d^13*e*g^8*h^7*i,b^12*c^20*i^9*j*k^4,b^13*e^9*g^13*h^2*k^5,b^13*e^4*f^2*g^9*h^4*k^5,b^13*d^20*e^6*f^4*g^2*i,b^13*c^9*d^34*g*j^4,b^14*f^6*h^3*i*j^9*k^2,b^14*d^11*g^3*i^12*k^2,b^14*c^4*d^13*e^22*f*g*k^4,b^14*c^18*e^18*i^4*j^5,b^14*c^35*e^3*f^3*i^5*k,b^14*c^44*i^3*k^2,b^15*e^6*f^3*j^10,b^15*d^3*f^17*j^2*k^3,b^15*g^4*j^4*k^9,b^15*d^17*f*j^6*k^4,b^15*d^10*g^3*k^13,b^15*c^6*e^7*h^4*i^12,b^15*c^23*f^5*i^13*k,b^16*d*f^5*h^3*i^4*j^4,b^16*d^32*e^12*h*i^5,b^16*d^33*e*f^2*h^2*i^2*j^2,b^16*e^10*f^10*h*j^7,b^16*c^2*e^2*f^24,b^16*c^7*d^26*g^4*h*i^4,b^16*c^9*e^3*f^2*j*k^5,b^16*c^42*e^9*g,b^17*e^10*g^11*j^2*k^3,b^17*d*f^5*g^5*j^4,b^17*f^10*h^12*i^3,b^17*c^10*g^10*k^7,b^18*e^6*f^9*g^2*h*i*j^2,b^18*g*h^12*j^6,b^18*f*g^7*i^3*k^3,b^18*d^9*f^7*g*h^5,b^18*c^5*d^16*e^23*i^2,b^18*c^17*d^10*e^5*g^11*i,b^18*c^33*f^4*g^3*h^2*k^3,b^19*i^2*j^19,b^19*i*j^11*k^2,b^19*e^26*f*j^3*k,b^19*d^9*f^12*j^3*k^5,b^19*c^6*d^23*j^7*k^6,b^19*c^7*e^3*f^8*h^5*i^5,b^19*c^10*d^15*e^6*k^5,b^20*d^4*e^2*f^8*g^12*h*i^4,b^20*g^17*i^6*k,b^20*d^7*i^9*j^5*k^2,b^20*e^15*f^3*h^3*k,b^20*e^10*f^5*g^14,b^20*c^27*i^5*j^2*k^7,b^20*c^29*f^3*j^4*k^2,b^21*c^3*f^7*h*i^11*j^2,b^21*c^16*d^7*g^6*j^5,b^22*d^18*e^11*f^2*g^4*h^3,b^22*d^28*f^2*i^2*j^6,b^22*f^4*g^3*i^6*j^3,b^22*d^21*i^4*k^9,b^22*d^22*f^10*i*j^5,b^22*c^4*d^15*f^2*g^2*i^3,b^22*c^8*d^7*e^6*f^5*h^5,b^22*c^27*e^5*j^3*k^5,b^22*c^37*f*g^5*i^2*k,b^23*d^5*e^3*h^19,b^23*d^15*f^7*h^12,b^23*c*e^14*f^3*i^9*j*k,b^24*d^16*e^6*i^10*k^3,b^24*d^12*e^8*f^6*j^4,b^24*e^9*h^3*i^2*j^6,b^24*g^4*h^4*j^11,b^24*c^2*d^5*e*i*k^3,b^24*c^4*d^36*f^4*h,b^24*c^9*g^9*h^3*i*j^5,b^24*c^14*i^3*k^12,b^24*c^51*f*k^3,b^25*e^10*f^2*i^12,b^25*d^16*e^8*g^9*k,b^25*d^30*g^8*j^3*k^2,b^26*d^31*e^4*f^5*i^2,b^26*d^14*e^5*g^5*h^3*i^5*j,b^26*d^24*g^5*i^4*k,b^26*c^2*d^26*e^17*k,b^26*c^9*d^10*e^7*h^6*j^6,b^26*c^12*e^12*f^2*g^2,b^26*c^14*d^20*f^8,b^26*c^21*d^3*g*h^5,b^26*c^26*d^13*g*k,b^27*e*f^4*h*i^6,b^28*d^8*e^8*f*g^12*i,b^28*h^9*j^2*k^5,b^28*c^6*e^7*i^9*j^3*k,b^28*c^8*d^18*f*i^4*j^5,b^29*e*f^3*h^12*i*k,b^29*c^7*d^2*e^7*h^11,b^30*h*j^15,b^30*c^6*g^7*j^8,b^30*c^18*d^2*e^5*f^5*i*j^3,b^30*c^27*d^16*j^7,b^30*c^30*g^3*i^3,b^31*c^4*e^7*f*i^14,b^31*c^13*h*i^12,b^32*c^4*j^7*k^3,b^32*c^6*f^2*h^3*j^9,b^32*c^9*f^10*k^6,b^33*f^20*i^3,b^33*h^5*i^6*j*k^3,b^33*d^7*f^4*h^10*i*j^3,b^33*c^27*e^2*f^3*h^3*j^4,b^34*e*f^3*g^5*j^8,b^34*g^10*i*j^2*k,b^34*d^25*e^18*j,b^34*c^16*f^6*g*h*j^7,b^35*e^3*h^8*j^2*k,b^35*c^2*f^2*g^3*h^3*i^3,b^35*c^16*g^2*h^7*k,b^36*d^8*e^10*h*j^3,b^36*e^5*g^17,b^36*d*e^3*g^2*k^8,b^36*c^3*g^16,b^36*c^28*e^5*h^3*j^2,b^37*d^16*h^8*i^2,b^37*e^27*h*i,b^37*c^14*e^7*h^5*k^4,b^37*c^16*d^5*f^2*h^10,b^38*d^27*e^6*g^7*h,b^38*c^3*d^16*e*g^3*h^3,b^39*e^3*g^5*h^5*i*k^2,b^39*c^10*d^3*h*i^4*j^3*k^3,b^39*c^22*f^3*h*i^3*j^2,b^40*d^14*j^4*k,b^41*i^12*k^6,b^41*c^20*i*j,b^42*k^17,b^42*c^7*e^7*g^5*j^2,b^43*d^13*e^3*f^6*i^2*j^2,b^43*d^6*g*i^4,b^44*d^5*f^7*g*k^6,b^45*h^10*j^6,b^45*e^25*i^2,b^45*d^27*e^12*h^2,b^45*c^5*e^7*f^2*g^8*i,b^45*c^7*d^20*e^5*h*k^2,b^45*c^19*d^14*g^7*h,b^46*f^8*g^12,b^46*e^8*f^3*k^9,b^47*g^4*h^12,b^47*c^17*d^4*e^16,b^48*c^4*f^4*g^3*j^5*k^4,b^49*h^3*i^4*j^7*k,b^49*f^6*i^3*k^4,b^51*e^3*f^2*i*k^7,b^51*c^11*g^5*h^5*j,b^53*d^4*f*g^2*i^4*k^5,b^53*e^22*j^4,b^53*e^14*f^6*k,b^53*c^2*e*f^12,b^53*c^9*e^2*h^3*k^2,b^55*d^2*g^8*h^3,b^55*c^21*h^6,b^56*c^9*d^6*f^2*h^13,b^56*c^12*f^10*g*h,b^57*c^18*f*i^3*k^3,b^58*c*i^12,b^59*j^7*k^7,b^60*c*e^13*h^2*i^5,b^61*e^2*g^11,b^61*c^2*d^29,b^62*f^6*h*i^3*k,b^65*d^7*e^8*g^4*k,b^65*e^3*f^3*h*k,b^66*i^4*j^3*k^7,b^68*c^8*e^2*f^3*i*j*k,b^69*e^9*g^2*j^2,b^69*c^9*d^2*g*k^3,b^70*f^2*i^4,b^70*h^8*i^2,b^70*d^10*h*i*k^3,b^80*e^4*h*k^6,b^81*d^5*g^3*j^3,b^83*e^4*h^6*i,b^85*h^2*i^7*j,b^86*g*i^2*j^2,b^90*e^13,b^99*g*h^4,b^124*c*h^3,c^7*e^6*h^13*i*j^6*k^4,e^13*f^10*g*i*j^8*k,d^3*e^8*f^4*g^4*j^14,d^9*e^17*f^4*h^5*j,c^16*d^15*e^3*i^4*j^2*k^2,e^12*f^3*h*i^15,f^12*h^2*j^4*k^9,c^40*d^23*f*g^6,e^3*f^4*h^14*i^4*j^4,c^8*d^5*i^20*j,d*f*h^3*i^2*j^19,d^3*f^21*h*i^6*j^3,c^6*d^7*e^5*f*h^10*i^2*j^6,d^18*e^12*g^2*h^3*j^7,d^28*e^4*f^12*g^2*k,c^17*d^5*g^21*h^2,d^26*e*h^10*i^5*j,c^28*e^9*h^7*i*k^3,c^15*e^16*g^14*k,d*g^5*i^15*k^5,c^34*e^2*h*i^4*j^5,c^46*g*i^6*k^5,c^9*d^16*g^6*h*i^7,e*f^10*g^7*j^8*k,f^12*g^3*h^5*i*j^2*k,c^7*d^6*e^27*i^5,e*f^16*g^10*h^3,c^6*d^5*f^7*g^4*i^6*j^3*k^3,e^7*h^19*i^2,d^5*f^12*h^12*i*k^2,c^30*d^11*j^4*k^10,c*d^16*h^8*j^12,c^4*e^5*f^3*i^4*j^2*k^6,d^6*e^12*g^11*j^3*k^4,d^37*f^6*g^5*j^5,d^14*e*f^2*g^7*i^7*k^4,d^45*f^8*g*h*i^2,c^11*e^11*h^6*j^10,c^16*d^10*e^3*f^13*j^2,c^28*d^3*f^5*g^3*k^4,d^8*f*h^13*i^5*j^4,c^2*e^5*f^9*h*i^9,c^11*d*h^12*i^7*k,d^29*f^12*g^8,d^12*g^13*h^5*i^2,c^2*f^4*h^9*j^6*k^8,c^10*d^8*f^6*i^7*j^9,c*d^12*e^21*g^6*k^5,c^32*e^2*f^2*g^5*i^6*j*k^2,c^15*g*h*i^15*j^3,f^4*h*i^5*j^14*k,d^41*e^3*i^5*k^4,c^27*g^2*h^4*i^7*j^3,d^8*f^6*g^6*h^3*j^8,d*g^11*h^2*i*j^2*k^8,c^7*d^25*e^14*f^3*g^2*i^2,c^16*d^39*e^2*g*h*j,f^19*h*i*k^7,e^14*f^2*h*j^7*k^2,e^7*g^4*j*k^11,d*f^8*g^4*k^14,c^5*f^2*g^18*k^2,h^7*i^7*k^11,c^2*d^38*e^9*f*h^7*i^3,c^49*e^17*g*h^4,d^17*e^10*f*g^9*h*j^2,c^5*d^6*e^5*f^4*g^5*h^3*j,e^14*f^8*g^2*h^6*i^2,d^4*e^2*g*h^17*j^3,e^7*g^7*h^5*i^4*k^5,d^14*f^6*g*h^10,f^8*h^2*i^5*j^13,d^25*e*f^3*g^15*h^3,d^11*e^7*f^5*j^14,e^8*h*i^3*j^16*k,c^4*d^14*f^11*i*k^7,e^2*g^2*i^15*k^9,d^12*h*i^10*j^2*k^4,c^22*e^4*f^4*i^4*j^5,d^54*f^2*g^4*j^5,f^3*g^3*i^7,c^9*g^8*i^9*k^7,c^11*d^20*f*g^2*h^3*i^4*k^2,c^46*f^6*h,d^31*g^16,c^5*d^17*i^5*j^15,c^21*d^2*e^20*j*k^5,e^29*i^5*k,d^17*e^16*f^5*h^2*j,c^4*d*e^6*g^4*h^9*j^8,c^9*d^10*e^9*h*i^2*k^5,c^9*d^11*f^13*g^4*h^2,c^11*d^41*f^3*h^6,c^21*d^4*f^5*g^9*h*i,d^21*e^16*g^9*k^3,d^52*e^3*g^3,d^29*e^5*g^5*h*i^5*k^3,f^4*g^6*h^12*j^4,e*i^11*j^15,c^7*d*e^27*f^9,c^19*e^20*f*g^2,c^33*d^18*g*h^3*k^3,c^64*f*i^3,c^3*d^10*i^20,c^7*d^2*e^9*f^3*h^6*i^7,d^2*e^5*g^2*h^12*k^7,f^3*g^16*h^12,g*h^3*i^7*j^11*k^4,c^7*h^14*k^7,c^13*e^15*i^10*k^3,c^15*d^23*e^2*i^5*j^2,d^2*e^3*g*i^2*j^5*k^14,c*e^4*i^18*k^3,c^2*d^34*e^9*g^5*j^3,c^14*d^7*e^15*h^16,e^16*g^9*h^10*k,d^17*e^3*f^5*g^3*h^15,e^2*h^6*j^12*k^2,d^6*f^13*j^4*k^5,c*f^7*g^2*h^6*j^11,c^13*g^7*h^5*i*j^5*k^2,c^20*e^21*i^3*j^8,c^37*e^6*g^3*i^4*k,d^7*e^9*g^2*j^13,e^2*g^7*j^7*k^9,c^11*e^15*i^15,c^13*d^15*e^2*f^6*i^10,c^25*e^4*h*j^12,c^25*d^8*i^12*k,d^15*h^6*i^3*j^7,e^7*f*g^15*h^12,c^4*e^5*f^17*j^2,c^11*e^6*h^3*j^4*k^5,c^13*d^4*f*h^8*j^6,c^16*f^9*k^8,c^44*d^5*e^12*g^4*h^2*j^2,f^19*h^4*i^4,h^10*i^7*k^5,d^15*g^8*h*j^7,c*d^12*f^3*h^15*i^2,e^9*f^2*g^5*h^4*j^5,d^9*e*f^16*g^5,e^2*g^10*h^3*i^2*k^3,d^23*g^4*h^8*j,d^33*f^14*g^4*h*k,f^2*g^24*h^3*i,c^21*e^17*g^7*h*j^2,c^23*e^4*f^5*g*h^6*j^4,d^5*e^29*g*j^6*k,d^2*e^11*h^13*k^3,c^9*e^6*f*g^3*h^8*i^4,c^11*f^7*h^13,c^23*g^2*h^12*i*k^3,e^38*h^2*j^4,e^31*g^3*h*k^6,d^13*e^18*h^6*k,e^13*g^17*h,d^6*e^11*g^2*h^5*k^10,d^7*f^4*g^11*h^6,c^3*d^16*e^3*f^2*g^2*k^13,c^10*g^16*h^5*k,c^17*i^2*j^11,c^22*f^12*i*j^3*k,c^31*d^10*h*j^7*k^2,c^3*e*i^15*j^3*k^3,c^5*h^4*i^10*j^5,d^5*g^6*i^5*j^6,d^36*f^3*h^2*j^8,e^29*g^4*h^4,d^15*f^11*g^6*i^4,c^4*g^11*i^7*k^5,c^6*d^29*g^5*h*i^2*j^2,c^29*e^8*j^6*k^5,c^41*g^2*j^5,e^4*f*g^3*i^16*j^4,d^13*g^2*h^4*i^13,d^5*e^18*f^2*h^11,d^29*h^15,c^10*d^25*f^16*i^2,c^29*d^2*f^2*h^6*i^4,f^10*g^3*h*j^8*k^3,e^24*i^3*j^5,d^5*e^16*f^7*i^2*k^2,c^4*d^19*e^4*j*k^3,c^9*d^29*f^5*k^6,c^16*d^13*g^12,e^6*h*i^13*k^8,f^17*h^6*i*j^5,f^31*k^2,c^27*e^8*h^4*i^2,d^45*e^7*g^3*i*j^2,d^38*g^8*i^3*k,d^2*f^4*h^3*j^3*k^10,f^12*g^9*h^3*j^2*k,c^14*d^3*e^15*g^5,c^16*d^34*e^2*f*h^2*j,c^28*d^27*g^4*h*k,e^24*g^2*i^8,d*e^12*g*h^11*i^6*j,c^2*d^11*e^4*g*h^4*i^5,c^4*d^42*f^3*h^9,c^7*d^21*f^11*g*i^4,c^37*e^19*f^2*h^2,c^49*e^12*g^3*h*i*k^2,c^51*h^6,d^21*f^3*g^5*h^3*k^8,d^22*e^11*g^15,e^7*f^8*g^2*h*j*k^4,c^2*g*h^12*j^5*k^5,c^3*d^46*g^14*h,c^5*g^7*k^13,c^13*d^11*e^2*f^2*i^7*k^4,c^38*d^11*e^6*g^11,c^57*e^5*j^5*k,e^4*h^15*j^3*k,f^10*h^8*k^4,d^8*h^19*k^5,f^2*g^3*h^7*i*k^13,d^9*i^16*k,d*e^33*h^2*i^3,d^2*e^22*f^9*g^3*h^3,c^12*e^15*f*g^8*h^2*i^2,c^26*d^19*g^7*h^6,c^45*i^7*k,d^5*h^4*j^18,e^2*f*i^2*j^8*k^8,d^15*f^7*j^10*k^3,f^15*i*k^11,c*d^8*j^4*k^12,c^5*e^16*f^2*h^3*k^11,c^13*d^2*f^7*g^10*j^3*k^3,c^32*d^9*e*g^6*i^2,g^4*h^17,c^6*e^10*g^3*i^13,c^10*e^6*f^8*i^4*j^5*k^4,c^12*f^14*h^2*j^7,c^15*d^7*g^2*h^4*i^11*j^2,c^24*f^6*h*i*j*k^8,c^55*e^5*i^4,d^3*g^7*i^5*j^3*k^6,d^34*f^6*g*j^5*k,e^8*h^2*j^16,d*i^21,e^13*f^5*g^4*j^6*k^2,f^11*j^8,c^11*f^3*g^3*j^2*k^6,c^13*d^23*f^9*j^4*k,c^25*d^16*f*g^2*k^10,h^9*i^3*j^10,e^2*f^7*i^7*k^2,d^6*h*i^5*k^15,d^7*f^13*h^2*i^2*j^2,h^8*i^5*j^4*k^3,g^5*i^9*k^11,f^5*h*i^4*k^6,c^30*d*e*g^9*i^7,d^8*e^4*g^8*h^2*j^11,d^17*e^7*k^13,d^18*f^10*g^8*j^3,d^48*k^8,d*g^13*h*j^5*k,f^4*i^5*j^15*k,c^9*e^22*j*k^9,c^21*e^4*f^7*g^10,c^30*g^9*h^3*j^4*k,e^18*f^9*j,e^8*f^3*g*h^7*j^8,e^11*f*i^2*k^9,f^17*g,d^21*f^7*h^4*k^4,c^4*e*g^6*h^6*i^2*j^2,c^6*d^5*f*h^11*j^4,c^9*f^9*g^6*i,c^11*d^15*f^15*h^4,c^30*d^22*e^17,d^43*e^10*f*g^4*i*k^2,d^8*e^25*f^6*g*j^2,d*e^18*g^6*k^7,d^32*e^5*f^4*k^2,e^8*g^20*j^3,d^15*e^6*g^5*h^3*k^8,d^46*h^8*j^2*k^3,f^11*g^2*h^6*i^9,d^2*e*j^23,c^3*e^6*f^8*i^2*j^13,c^15*g^5*i^4*j^7*k^4,c^17*d^5*f^6*j^9,c^27*e^5*f^2*h^11*i^4,d^16*e^14*f^8*i^3,d^30*e^2*h^11*i,d^9*e^7*g^2*i^5*k^7,f^10*i^10*j^7,e^29*f^13,d^3*h^2*i^8*j^11,c^2*e^30*h^4*j,c^3*f^2*g*i^12*j*k^4,c^4*e^17*h^9*j^3,c^5*d^13*f^8*i^7*j^3,c^7*e^22*f^5*k^3,c^12*h*i^10*j^5*k^5,c^17*d^6*i^9*k^8,c^21*e^2*f^3*h*k^7,e^19*h^11*i^8,d^3*e^6*h^16*i^3,d^24*f^5*g^9*i^2*j^4,c^2*e*f*g^9*h^11*i^7,c^4*h^15*i^5*k^4,c^5*d^30*e^4*g^6*h^6,b*e^7*h^10*k^11,b*e^25*f^12*g^4,b*d^14*e^13*g^3*h^9,b*e^12*i^6*j^10,b*e*f^6*h*i^3*j^15,b*c^3*d^3*e^4*f^4*i^5*j^2*k^2,b*c^5*d^34*f^10*j^4,b*c^10*g^2*i^5*j^9,b*c^15*i^7*k^11,b*c^24*d^11*g*h^4*i^2*j^5,b*c^27*f^4*g^7*i^6*k^2,b*c^28*d^3*e^8*h^11,b*c^29*d^21*f^10*g*i,b^2*d^14*e^11*f*g^2*j^3,b^2*d^45*f^7*j^5,b^2*h^7*i^13*j^3,b^2*d^28*g*j^7*k,b^2*c^4*d^38*g*k^4,b^2*c^6*d^69*f^5*j,b^2*c^14*e^10*g*h^13*i^2,b^2*c^19*e^2*f^9*g*h^6*i*k,b^3*e^5*f^9*h^13,b^3*d^12*e^8*i^9*j^5,b^3*d^5*e*g^3*i^11*k^6,b^3*f^5*g^5*i^4*j^9*k^2,b^3*c^6*d*e^9*f^6*g^15,b^3*c^13*e^15*f^8*i^2,b^3*c^20*e^16*i^5*j^2*k^2,b^3*c^22*d*e^3*h^2*j^4,b^3*c^25*e^8*i^4*k^5,b^3*c^27*d^11*f^6,b^3*c^34*h*i^2*k^6,b^3*c^34*g^8*h^2*j^3,b^4*d^11*h*j^9*k^8,b^4*d^5*f^6*g^12*h*j^8,b^4*e^22*f^5*g^9*j,b^4*c*e^4*f^10*i^10,b^4*c^8*e^5*h^4*i^13*k^2,b^4*c^13*f^2*i^12*k^5,b^4*c^14*d^22*e^2*f^3*g^8,b^4*c^21*d^5*e^3*g^13*k^4,b^5*f^2*h^4*i^3*j^7*k^4,b^5*d^5*f^16*i^2*k^7,b^5*d^27*e^6*h^3*i*j^5,b^5*d^6*e^11*f^7*g^5*i^5,b^5*d^20*g^4*h^2*i^3,b^5*e^8*h*j^4*k^9,b^5*e^4*g^10*i^7*k^3,b^5*c*f^5*h^6*j^6*k^4,b^5*c^2*d^30*f^5*g^4*i^2,b^5*c^4*f^13*k^12,b^5*c^4*d^3*g^9*h^8*i^6*j*k,b^5*c^6*f^19*k^7,b^5*c^9*d^13*g^9*h*i^5*k^4,b^5*c^11*e*g^2*i*k^18,b^5*c^11*f^7*g^11*h*j^3,b^5*c^21*d^9*i^10*j^3*k^4,b^5*c^32*e^14*g*j^2,b^5*c^44*e^7*g^6,b^6*f*h^8*i^7*k^9,b^6*e^2*f^2*g^5*j^7*k^2,b^6*f^7*h^13*i^2*k^4,b^6*d^5*f^16*g^5*k^5,b^6*g^10*j*k^11,b^6*c^2*d^19*g^4*h^3*j^3*k^6,b^6*c^20*e^3*h^7*i^5,b^6*c^25*d^3*f^12*i^4,b^6*c^32*g^2*h^6*i^7,b^6*c^37*f^5*g*h*j^6*k^2,b^7*e^11*f^6*g^2*h^2*j^5,b^7*e^4*g^7*h*i^2*k^7,b^7*d^3*f^4*g*h^6*j*k^2,b^7*d^4*e^6*i^16*j^2,b^7*d^10*e^28*i,b^7*d^11*e^17*f^3*g^6*h*j^3,b^7*d^20*e^20*f*k,b^7*c^7*d^4*e^10*g^11,b^7*c^9*e^19*f^3*g^4*j^2*k^3,b^7*c^12*d^14*e^2*f^9*g^11,b^7*c^14*d^44*k^5,b^7*c^21*f^4*h*i*j^8*k^3,b^7*c^25*f^7*h^8*k^2,b^7*c^31*e*f^3*i^7*j,b^8*d^14*f*g^15*j^2,b^8*e^8*f^5*h^6*i^4*k^3,b^8*f^11*h^11,b^8*c^12*d^3*f^4*g^11*h*j,b^9*e^20*h^4*k^5,b^9*e^2*f^8*g^8*h^4,b^9*d^49*e^2*i^6,b^9*g^13*h^3*k^5,b^9*c^5*e*f^2*i^2*j^11*k^2,b^9*c^6*d^12*f^2*g^6*i^10,b^9*c^19*j^7*k^6,b^10*d*e^9*f^2*h^11*i^3*k^5,b^10*f^10*g^4*h^11*i^2,b^10*f^4*h^2*i^10*j^5*k^2,b^10*c^8*d^32*f^3*j^10,b^10*c^10*e^22*g^4*k^3,b^10*c^24*e^9*i^13*j,b^10*c^38*i^10,b^11*d^12*e^16*g^4*h^4*k^3,b^11*d^22*e^2*i*j^9*k^4,b^11*f*g^3*i^5*j^6,b^11*d^16*f^7*j^8,b^11*d^9*g^2*i^2*j^2*k^4,b^11*d*e^11*f^2*h^6*k^3,b^11*c^4*d^2*e^26*i^8,b^11*c^29*f^4*j^5,b^11*c^43*f^2*h*j*k^4,b^12*f^3*h^2*i^13,b^12*d^9*f^4*h^13*k^3,b^12*c^3*e*f^8*i^7*j^3,b^12*c^15*g*i^9*k^5,b^12*c^17*f^6*h^4*i^4,b^12*c^18*d^15*j^3*k^11,b^13*d^6*e^13*f^3*j^7,b^13*e^6*j*k^7,b^13*f^11*g^4*j^6,b^13*d^30*f*h^2*j^3*k^2,b^13*d^9*f^9*k^10,b^13*g^9*h^4*j^8,b^13*c^4*i^2*k^16,b^13*c^4*f^3*g^9,b^13*c^6*d^23*h*k^11,b^13*c^9*d^2*f*i*k^19,b^13*c^41*e*k^7,b^14*d^8*f^13*h^5*i^5,b^14*d^4*g^23*j,b^14*d^15*e^21*i^9,b^14*c^15*e^10*f^2*h^2*i^2*k^3,b^14*c^17*d^3*f^8*h^7,b^14*c^41*f^8*g*h^6,b^15*d^18*e^2*g^5*i^3*k^5,b^15*d^49*h^2,b^15*g^4*i^10*j^7*k^2,b^15*c^2*e^17*g^2*k,b^15*c^4*d^14*e^4*f^5*j,b^15*c^11*e^5*g*h^6*j^3*k^2,b^15*c^16*d^7*g*k^5,b^16*d^2*e^11*g^2*i^14*k,b^16*e^6*f*h^2*i^5*k,b^16*d^5*h^13*i^3*k^2,b^16*c^2*g^3*h*i^7*k^10,b^16*c^4*d^15*h^6*i^2*k^5,b^16*c^11*d*f*i^8*j^7*k^2,b^16*c^35*f*i^9*k^2,b^17*d*f^7*g^2*h*k^12,b^17*d^2*e^13*g^12,b^17*d^33*f^4*g^6,b^17*d^16*e*g^11*h^6,b^17*d^26*g^11*k^3,b^17*d^3*i*j^21,b^17*d^12*i^3*j^8,b^17*c^22*g^10*i^4*j,b^17*c^26*e^8*f*g^8,b^18*d^10*e^2*g^8*h^2*i^8,b^18*d^12*e^22*f^3*h^5,b^18*e^12*h^12*j,b^18*e^17*f^5*g^5*i^2,b^18*c^9*e^5*g^4*h^11,b^18*c^10*d^7*g^6*i^12,b^18*c^14*f^3*g^4*h^4,b^18*c^33*i^7*k^5,b^19*c*d^10*e^4*g^18,b^19*c^8*e^10*f^2*j^6,b^19*c^13*d^6*e^2*f^16,b^19*c^15*e^11*g^3*i^3*j^8,b^19*c^17*d^10*j^10,b^19*c^20*e^3*g^3*i^2*k^3,b^19*c^29*d^3*g^2*j^4*k^4,b^20*f^2*g*h^15*k^3,b^20*e^12*i^13,b^20*d^4*f^4*i^8,b^20*c^8*i^10*k^3,b^20*c^33*e^12*k^3,b^20*c^45*f^7,b^21*d^14*f^10*j^5*k^5,b^21*d^15*e^6*f*g^8*i^3*j,b^21*d^8*g^13*i^5*k,b^21*f^7*j^2*k^10,b^21*c*d^3*f^13*j^4*k^5,b^21*c^32*d^4*e*f^4*g^4,b^22*f^3*h^7*i^3*j^10,b^22*f^17*i^2*j^2*k,b^22*c^3*d^9*e^5*h^6*i*j^8,b^22*c^6*e^10*f^8*g*i^5,b^22*c^8*d^18*e^8*i^3*k,b^22*c^18*e^3*g^6*i^7,b^23*d^12*g^4*h^4*j^7,b^23*d^19*e^23*j^4,b^23*d^29*e^15,b^23*c^20*d*f*h^6*j^6,b^23*c^26*d^2*i^5*j^7,b^24*e^3*g^3*h^4*i^2*j^2*k,b^24*f^5*h^9*j^4,b^24*f^13*g^3*i*k^4,b^24*f^19*h^2,b^24*c^8*d^9*f^3*h^13,b^24*c^18*d^2*e^19*f^2,b^25*g^16*h*k^3,b^25*j^17,b^26*d^4*f^4*g^7*h^9,b^26*i^8*j^11,b^26*e^19*f*h^7*j^3,b^27*d^18*g^5*j^8*k^2,b^27*d^10*e^6*g^3*h^4*k,b^28*e^15*h^7,b^28*d^4*e^7*f^14,b^28*d^4*e*h^3*i*j^12,b^28*f^2*i^5*j^9,b^28*c^12*h^2*i^2*j^5,b^28*c^17*d*f^14*i*k,b^29*e^13*f^5*j^3*k^4,b^29*d^8*e*j^7*k^5,b^29*d*g^3*j*k^14,b^30*d^23*h^3*i^4*j^7,b^30*d^10*g^8*h^2*i^5,b^30*d^2*e^6*f^2*g^6*h^9,b^30*c^10*e^5*j^4*k,b^30*c^15*f^10*k^4,b^30*c^24*d^5*h^4*k^5,b^30*c^36*f^2*g^4*h^4,b^30*c^55*d^6*e^4,b^31*e^12*g^5*j^5,b^31*h^7*i^8*k,b^31*d^23*j^7,b^31*c^2*d^2*e^4*f^7*g^5*k^2,b^31*c^11*d^16*g^4*j*k^3,b^32*d^7*e^8*f^3*h*i*j^5,b^32*e*g*i^3,b^32*d^10*f^9*g*i^2*k^2,b^32*d^24*h^4*k^3,b^32*c^20*e^16*j^2,b^32*c^22*e^3*f^6*h^3*j^4,b^32*c^34*h^2,b^33*f^4*g*h*j^3*k^10,b^33*c^6*e^18*i^10,b^33*c^8*e^5*f^2*h^5*i^5,b^33*c^21*e^3*g^11,b^34*e^30*i*k^2,b^34*e^12*g^8,b^34*c^4*g^7*h^9*j,b^34*c^9*d^8*g^7*h^2,b^35*d^16*g^3*h^9*i^5,b^35*c^3*d^5*e^5*g*j^12,b^35*c^15*g^6*j^6*k,b^36*c^3*d^6*g^2*i^8*k,b^36*c^7*e^21,b^36*c^52*k,b^37*d^6*e^10*h^7*i^3,b^37*c^26*i^10,b^38*f^3*i^2*j^2*k^8,b^38*c^13*g^9*i^5,b^38*c^15*d^21*g^3,b^40*g^6*h^2*j^8,b^40*h^7*j^10,b^40*f^7*g^6*k^2,b^40*d^3*k^15,b^40*d^4*f^13*j^2,b^40*c*g^5*h^6*j^4*k^3,b^40*c^13*d^11*e^14,b^41*e^16*i^11,b^41*c*d^19*e^3*h*i^6,b^41*c^13*d^12*i^8*k^2,b^42*d^5*e^11*f^6*i*j^2,b^42*e^6*f^9*j,b^42*c^4*f*k^9,b^44*e^3*g^8*h^4*k^4,b^44*c^7*g*j^11,b^45*e^7*g*h^9,b^45*h^14,b^45*c^2*f^7*g*h^2*k^3,b^46*d^11*f*i^6*j^3*k^2,b^46*c^5*j^10,b^46*c^8*e^5*i^2*k^7,b^46*c^10*f^4*j^2*k^2,b^47*e^2*i^11*j^2*k^4,b^48*c^20*e^3*f^8*g,b^49*c^3*h^3*i^3*j^2,b^49*c^15*g^2*h^2*i^5*k^2,b^49*c^17*d^6*h^7,b^50*d^9*e^17*k^3,b^51*c^15*e^9*h^5,b^52*c^38*f^3*g^2*j,b^54*e^8*h^2*k^5,b^54*c*d^15*e^3*i^3*k^5,b^55*f^2*h^9*k^5,b^57*f^3*g^5*i^5,b^57*e^7*j^4*k^5,b^57*c^8*d^21*i^6,b^58*g*j*k^7,b^59*e^3*i^3*k^3,b^59*f^5*g^11*h^2,b^59*c^6*d^12*e^9*g^2*i,b^59*c^22*f^2*k^3,b^60*c^11*d^11*f^5*g^2*j,b^61*d*e^19*f*h*k,b^61*e*f^9*h,b^61*f*g^4*k,b^63*d^17*i^3*j^2,b^65*d^7*e^5*i*j*k^3,b^65*h*i*j^8,b^65*c*g^6*i^5,b^65*c^3*d*f^4,b^66*c^7*e^3*f*h^7*k^2,b^67*c*e^16,b^69*d^24*g^2*h^3,b^69*g^9*h^2*j^2*k,b^71*j^11,b^73*e^3*g^6*h^5,b^76*e^2*h*i^3*j^2,b^77*g^7,b^78*g^4*h*i^6,b^82*c^2*d^3*g^2*h^5,b^86*e^11*i,b^92*h^3*j^4,b^96*d^4*e^2*h,b^113*f^2,c^30*f^10*g^5*i*k^7,c^11*e^13*f^2*h*i^5*k^8,c^16*e^19*g^7*j^3,c^30*d^17*g^6*h*k^4,c^4*d*e^8*f^2*g^3*h^4*i^8,d^28*g^4*h^13,c^24*e^7*h^2*i^3*j^8,c^29*d*f^11*i^2*k^3,d^10*e^3*g^6*h^2*i^6*j^3,c^48*g^2*h^4*j^2,f^9*g^3*h^6*j^5*k^5,c^40*i^13*j,d^20*f^6*h^2*j^7*k^5,c^8*d^13*h*j*k^14,d^8*e^6*g^7*i^6*k^8,c^6*d^4*e^8*f^10*j^5,c^18*e*f^2*g^3*k^8,d^12*f^12*h^7*i^3,c*h^13*i^6*j*k^5,d^23*e^4*f^9*g^8,c^4*e^8*f^16*g*h^5,c^13*d^10*h^16*j,c^19*e^2*i*j^14,c^24*d^10*f^5*j^6*k,e^3*f^9*i^11*j^4,c^10*f*g*i^13*k^6,d^29*f^4*g^9*i^3*j,c^10*d^8*e^12*f^3*i^6*k^4,c^22*d^2*f^11*g^2*i^5,d^2*f^3*g^6*h^4*j^11*k^3,d^19*e^19*g^2*i*k^2,c^11*d^43*g*k^6,c^34*d^16*e^3*f^5*k^2,c^9*d^35*f^4*g^4*i^3,e^10*f*g^5*h^4*j^4*k^4,d^8*f^3*g*h^11*k^4,c^38*e^9*f^2*i^8,d^8*f^8*j^3*k^11,c*f^2*g^14*j^10,c^26*h^4*j^4*k^8,c*d^13*e^3*f^4*g*j^11,e^5*g^3*i^6*j^3*k^2,d^21*f^6*h^5*i*j^5,g^8*i^8*k^11,c*d^14*g^2*h^4*i^3*k^6,c^36*f^3*h^2*j^2*k^2,c^23*e^7*g^13*j^3,e^16*f^4*g^10*i^3*j,d^4*e^14*h^2*i*k^9,d^5*e^3*f^10*g^4*h^3*j^3,c*d^35*e*h^7*k^4,c^11*f^2*g^9*h^2,d^46*e^8*g^3*j*k^2,d^9*e^3*g^23,d^30*e^17*f*h^3*i^2,e^32*f^6*h*j^2,c^9*e^25*g^2*k^3,c^54*i^2*j^3*k^4,d^4*i^19*k^4,e^14*h^7*i^6*k^3,d^27*e*f^6*h^12*i,c^28*f^2*i^13*j,d^7*e^21*g^12*i*k,f^9*g^2*i^14*j^2,c^3*f*g^7*i^16,c^4*d*e^20*h^17,c^21*d^4*e^5*f^2*g^4*h^9*k,f^2*j*k^18,c^3*g^7*h^6*j^8*k^6,c^15*d*e^18*f*i*j^3,c^29*d^25,c*e^20*i^14*k,c^3*d^9*e^7*f^3*h*i^9,c^15*d^2*i^11*k^5,d^12*f*g^3*i^3*k^16,d^51*e*f^6*g^2,e^10*f^14*j^5*k^3,d^34*e^2*g^7*h^5*i^2*j^2,c*e^11*h^4*j^7*k^9,c^4*d^44*g^7*i,f^16*h^5*i^3*k^3,d^7*e^2*i^20*j^4,c^13*e^18*f^7*g*i^6,c^22*d^7*e^6*h^10*i^4,c^27*d^17*f^5*h^3*i^3,d^3*e^6*f^13*g^5*k,c^9*g^3*i^3*j^15,c^18*e*f^16*g*k,c^33*d^7*e^4*i^6*j^4,d*e^3*f*g*h^12*i^7*j^2,c*f^4*h^14*j,c^6*f^18*h^7*k,c^13*g^2*h^13*k^7,d*e^5*f*g^11*h^7*j^2,d^11*f^15*g^11,c^12*f^9*j^6*k^5,d^5*f^19*i^6*j^6,h^5*i^9*j^8*k^2,g^6*i^4*j^9,d^30*h^3*j^11,d^9*f^8*g^6*i^3*j*k^3,d^40*f^14*j^3,d^23*g^5*h^2*i*j^5*k^4,e^23*h^12,d^19*e*f^13*h*i*j*k^3,c^10*f^15*i^5,e^21*f^4*i*k^6,d^13*e^9*j^4*k^7,d^44*h^5*j^6*k^2,e^3*f^12*g^13,d^23*e*f^2*k^10,c^6*d^6*e^2*g^3*i*k^16,c^6*d^7*g^12*j^3,g^9*h^3*i^9*j,d^21*h^7*i^7*k^7,d^15*g^8*h^7*i^6,c^17*e^2*f^11*h^6*j^6,c^22*e^5*f^9*k^6,c^29*f^3*g^5*h^5,d^39*e^12*g^3*h*j^5,e*f*h^4*j^6*k^14,d^4*e^27*j^8,c^4*e^20*g^5*j^2*k,c^6*d^28*e^7*h^3*j^4,d^5*e^9*g*h^5*i^4*k,d^36*h^10,d^15*e*f^8*g*i^3*k^4,c^6*d^29*h^9*i*k^5,c^27*e^24*h^3,d^47*e^3*g^9*h^3,d^4*f^3*g*h^6*k^12,c^3*d^5*e^7*i^6*j*k^8,c^5*d^36*f^5*i*j^3*k^3,e*f^7*h^9*k^8,e^27*f^6*g^3*h^4,c^2*e^20*g^8*h^3*i,c^23*e^6*i^4*j^8,c^35*i^6*j^2*k^5,d^9*f^4*j^13*k^7,c^9*e^8*h*i^17*k,c^11*d^7*h^6*i^12*j^2,c^27*d^13*f*g^6*k^6,f^9*g^4*h^11*k^6,e^15*g^3*i^12*j,d^18*e^2*i^7*j^3,e^49*g*h,c^3*d^28*f^11*i^6,c^10*d^11*g^2*i^9*k^3,c^12*d^42*h^3*i^4,c^45*e^10*i^3,c^47*d^7*h*j^2,c^59*k^3,e^4*h*i^20,e^5*f^8*j^11*k,d^53*g^10,c*g^3*j^5*k^10,c^3*d^17*f^6*j^7*k^5,d*f^10*h^3*i*j^5*k,f^2*h^2*i^3*k^10,c^10*d^32*e^11*h*i^2*k,c^20*e^6*g^9*i^6,c^24*e^2*f^7*j^2*k^6,c^34*d^19*g^8*i^3*k,d^12*e*f^7*g^8*j^6,d^10*e^2*f^3*h^4*i^12,c^13*d*f^10*g^4*j^5,d^20*f^9*g^4*h^3*i^4,e^23*f^6*h*j^4*k^4,d^51*e^7*h*i^5,e^16*i*k^13,e^5*f^14*g*h*j^3,d^15*e^3*f^4*h^5*k^8,e^6*g^6*h^7*i*j^5*k,h^12*j^7,f^6*g^6*k^4,c*d^9*f^12*h^5,c^7*d^10*f^8*i^14,c^13*d^2*f^4*g^5*h^4*k^8,c^20*d^16*e^22,d^2*e^30*f^3*g*j^5*k^2,d^7*h^19*i^4*j,d^20*f^9*g^14,e^31*h^2*i^10,c^7*f^3*j^12*k^3,c^11*e^25*f^6*j^4*k^2,d^10*e^19*f^5*h*i^2*k^2,d^3*e^12*g^2*i^4*k^11,d^4*e*f^13*g^11*h*i,d^34*f^3*h^5*k^6,h^3*i^7*j^14,d^7*f^5*i^6*j^6*k^3,e^27*f^2*k^7,e^14*f^8*h^3*k^2,c^7*i^8*k^12,c^11*e^7*h^2*k^11,e^11*h^17*i^2,d^10*e^21*f^5*g^7,f^4*g^3*h^17*i,d^8*e^18*g^3*h^10*j,e^23*f*g^9*i*k^5,d^18*e^10*f^7*g^3*h^3,d^2*f*g^17*h^10,d^11*e^3*g^8*h^2*k^9,e^9*f*i^4*j^5*k^6,d^28*f^7*j^7*k,g^2*h*i^4*j^12,c^5*f^9*g^2*i^3*j^4,c^7*d^21*i*j*k^10,c^7*d^22*f^15*j^6,c^9*e^25*f^12*h,c^14*d^5*g*h^5*i*j^8,c^17*f*g^7*i^5*k^6,c^19*d^15*f^7*g*k,c^35*f^2*g^4*h^4*k^9,d^8*e^16*g^2*j^6*k^4,d^5*f^3*h*i^12*k^6,d^22*e^4*g*j^10*k^5,f^11*h*i^11,d^32*g*j^2*k^8,c^4*e^15*g*h^14*i*k^2,c^9*e^7*f^6*g*h^7*k^5,c^18*d*f^14*h^4*i*j^4,d^16*e^5*i^7*k^4,d^47*f^6*i^2*j^2,c^12*e^8*h^3*j^7*k,c^17*d^5*f^3*k^4,c^29*k^13,e^9*f^7*i^9,f*g^5*h^6*i^9*j^4,d^3*h^10*i^7*j*k,c^4*d^16*e^7*g^8*k^2,c^6*d^47*f^6*g^2*j^2,c^12*g^4*h^10*i^6,f^13*i*j^2*k^11,d^14*e^4*g^4*h^3*i^2*j^2,d^45*h^8*j^4,e^9*g^10*i^6*k^7,f^2*h^7*j^9*k^8,d^24*f^2*g^4*i*k^2,d^55*f^8*h,d^7*g^9*h^2*i^4*k^8,d^10*e^2*f^4*i^7*j^12,c*f^4*g^11*h^2*j^6*k^4,c^6*d^48*g^3*k^6,c^22*e^19*g*h*j^5,c^41*d^13*f^5*k^2,d^8*e^5*f^6*g*i^12,e^7*g^5*j^10*k^6,f^12*g*h^14*j^2,c^3*d^3*e^18*f*h*i^4*k^7,c^10*e^8*h^8*i^4,c^15*f^9*h*i^3,c^24*d^11*h^12*i,c^27*f*g^2*i^5*k^7,d^14*f^23*h*j^2,f*g*h^7*j^4*k^6,d^7*f^15*g*k^9,d^4*e^33*h*j*k^2,d^45*e^12*f^4,e^15*g^11*h,d^29*e^2*g^5*h^6*j^2,c^2*d^8*e^7*f^6*g^11,c^9*e^8*g^16*i*k^2,c^15*f^4*h^9*j^3*k^6,c^21*e^6*i^6*j^4*k^2,d^5*f^3*h^14*i^4*k^6,d^6*e^4*g^7*h^8*i^7,e^13*f^2*h^7*i^3*k^7,f^8*h^12*j*k^2,c*h^11*k^11,c^2*f*g^11*h^2*j^4*k^4,c^9*f^2*i^14*k^2,c^34*g^3*h^10,e^12*f^2*g^12*h^3*i^2*j^3,d^6*e^2*g^6*i^9,c^5*d^20*g^5*i^7*j^3*k,c^9*d^12*e^24*g^3*h^3,c^12*d^61*f^3*i,c^14*d^22*e^16*g^3*k^3,c^45*f^2*g^2,f^7*g^4*h^12*i,f*h^3*i^9*j^8*k^6,d^2*f^2*g*j^17,d^6*e^25*f^4*i^4,g^6*j^11*k^8,e^11*f^12*g*h^10,e^18*g^5*i^6*k^8,c^2*d^30*e^5*f^2*h^3*i*k^3,c^16*e*h^2*i^7*j^6,c^19*e^6*f^6*i^11,c^28*h*i^9,c^33*d^3*f^4*i^8,d^6*e^21*g^4*h^5*k^7,e^3*f^4*g^18*h^5,e^2*g^3*i^4*j^9*k^4,d^10*f^4*h*j^11,d^20*f^18*j^3*k^2,e^16*h^7*k^7,d^13*f^10*g^2*k^11,d^27*e^18*f*i^2,c^2*e^3*h^4*i^20,c^5*e^17*f^3*j^12,c^5*d^41*e^6*j^4,c^8*d^20*e^11*i^4*k^7,c^8*d^21*f^9*g^7*i,c^10*d^51*k^2,c^15*d^4*e*g^12*i^4*j,c^17*d^35*g^6*j^3,c^19*f*j^8*k^4,c^24*f^15*k^7,c^33*h^2*j^4*k^8,b*e^6*f^5*h*i^6*j^6,b*f^25,b*c^5*g*i^8*k^9,b*c^7*f^3*h^5*i^3*j^2*k^4,b*c^21*f*h^9*k^8,b*c^26*e^23*i^7,b*c^26*e^12*f^2*i^4*j^4,b*c^31*e^4*f^16*i^3,b*c^38*e^5*g^5*i^6,b^2*d^29*f^3*g^7*h*i^2*j^6,b^2*e^18*j^10*k^2,b^2*e^11*j^4*k^11,b^2*f^8*g^4*j^9,b^2*d^24*h^3*j^6*k^6,b^2*e^4*i*k^20,b^2*g^9*j^3*k^2,b^2*d^17*h^2*k^15,b^2*d^18*f^6*g^3*h^3*j^5,b^2*k^23,b^2*c*d*e^37*j^6,b^2*c^6*d^11*e^29*f^5,b^2*c^8*d^11*g^8*h^2*k^6,b^2*c^15*d^25*e^17*j^2,b^2*c^27*d^18*e^10*g^4*k^2,b^3*d*h^5*i^7*k^11,b^3*f^2*g^5*h^5*i^6*k^2,b^3*c*d^2*e^19*g*i^10,b^3*c*d^3*e^8*f*g^10*i^7,b^3*c^3*d^33*e^6*h^4*i^5,b^3*c^5*e^15*h^3*i*j*k^7,b^3*c^6*e^20*j^10,b^3*c^6*d^12*e^11*g*i^9*k,b^3*c^10*d^16*e^7*h^10*i^8,b^3*c^17*f^7*g^2*h^3,b^3*c^50*e^14*h*i,b^4*d^19*e^14*j^5,b^4*d^13*f^7*g^14*j^4,b^4*d^6*g^19*i,b^4*d^16*i^4*j^12*k,b^4*e^22*g^2*j^2*k^5,b^4*d^8*e^9*f^2*h*j^4,b^4*c^4*e^4*f^4*g^16*j,b^4*c^6*d*e^2*g*k^9,b^4*c^6*d^2*f^10*g^10*h*j^3,b^4*c^18*f^2*g^15,b^5*e^18*f^6*h^4*i^2*j^2,b^5*e^11*h^3*i^4*k^5,b^5*d^16*f^4*h^8,b^5*g^6*h^15*j^5,b^5*d^9*h^7*i*k^9,b^5*c*i^7*j^10*k^6,b^5*c^6*d^3*f^4*g^11*h^7,b^5*c^13*f^6*i^6*j^9,b^5*c^25*i^8*j^3*k^6,b^5*c^29*e^6*f*h^5*k^5,b^6*d^27*e^5*f*g^6*h,b^6*f^3*g^26,b^6*f^2*h*i^19*j*k^2,b^6*f^3*g^5*i*j^10,b^6*c^4*e^20*f^6*g^3*j^2,b^6*c^14*d^24*f*g^4*j^6,b^6*c^16*e^13*g^8*k^3,b^6*c^18*d^16*f^4*g^2*h^3,b^7*d^11*e^14*f^5*g^3*h^4*i^5,b^7*d^4*e^7*g^8*h^3*i^7*k^3,b^7*d^35*f^3*g^2*h^8*i^2,b^7*d^14*i^10*j^5*k^4,b^7*d^6*e^27*h^6*k^3,b^7*g^7*i^14*j^2,b^7*d^8*f^5*g*i^9*j^4,b^7*e^22*f^2*g^5*h*i,b^7*e^9*f^8*h^6,b^7*e^10*g^4*h^12,b^7*d*g^6*i^11*k^4,b^7*c*d^14*h^17,b^7*c^2*d^32*f^3*h^3*i^6,b^7*c^4*e^2*g^4*h^5*k^3,b^7*c^11*e^8*f^2*i^4*j^8,b^7*c^25*d^3*h*i*j^4*k^4,b^7*c^35*f^2*g^3*i^5*j,b^7*c^37*f^8*h*j^3,b^7*c^49*g^2*i^2*k^4,b^8*e^15*j^9,b^8*c^10*e^8*g^3*i*j^3*k^7,b^8*c^12*d^14*j^5*k^2,b^8*c^16*d^6*e^29*h*k,b^8*c^19*g^2*j^7*k^8,b^9*e^4*f*i^7*j^3,b^9*i^9*k^7,b^9*d^22*h*i^4*k^2,b^9*c^12*d^16*f^7*g^7*h*i^3,b^9*c^33*e^12*i^3*k^3,b^9*c^35*f^4*j^2,b^9*c^47*k^7,b^10*d*g^3*i*j^2*k^18,b^10*d^23*g^7*h*j^8,b^10*d^33*g^7,b^10*d^16*g^12*i^2*j^2*k^6,b^10*c^21*e*h*i^11*k^3,b^10*c^22*e^6*f*g^4*j^3,b^11*f^14*h*i*j^5*k^5,b^11*d^41*g^3*h*i^7,b^11*f^6*i^3*k^14,b^11*e^15*f^5*g*i^4*j,b^11*d^12*e^13*i^2*k^5,b^11*d^43*f*h^4,b^11*c^5*e^3*h^6*i^2*j^5,b^11*c^8*e^8*g^6*i^6*k,b^11*c^10*d^6*f^3*i,b^11*c^17*g^5*h^5*i^4*k^2,b^11*c^57*e^3*g^2*k,b^12*g^2*h*i^14*k,b^12*d^17*e^2*g^14,b^12*d^14*f^5*h^6*i^9,b^12*d^47*k^7,b^12*c^10*h^7*j^9*k^4,b^12*c^16*e*i^4*j^10,b^13*f^13*g*h*i^4*k^3,b^13*f^2*h^10*j^7,b^13*d^25*f^2*g^10*i^4,b^13*f^10*g^3*k^8,b^13*f^16*h^3*k^3,b^13*d^3*h^14*j^3*k^4,b^13*c^4*d^4*i^12*j^4,b^13*c^8*e^24,b^13*c^20*e^6*f^7*g^7,b^13*c^32*g^12,b^14*e^2*g^11*h^3*j^8,b^14*j^22,b^14*d^12*i^20,b^14*d^38*e^18*f^2*g,b^14*c^17*d^14*f*i^10*j^4,b^14*c^40*d^4*g^5*j^4,b^15*f*g^7*h^10*j^2,b^15*d^5*e^28*g^3*h^4*i^3,b^15*d^15*e^20*g^3*i^2,b^15*d^39*g^2*h*k,b^15*c^6*g^9*h^7*k^3,b^15*c^8*f^4*g^3*h^12*j,b^15*c^14*e*g^2*i^9*j^2,b^15*c^28*d^12*g*i^6,b^15*c^32*d^4*e^15*f,b^15*c^63*f^3*j,b^16*f^6*h^19,b^16*h^2*i^18*j^4,b^16*c^18*e^17*g*h*i^6*k^2,b^17*e^12*f^11*h*k^4,b^17*e*i^4*j^12,b^17*f^13*i^3*j^4*k,b^17*d*f^3*i*j*k^14,b^17*c^2*h^3*i*j^8*k^2,b^17*c^7*f^11*k^5,b^18*d^12*j^2*k^12,b^18*g^12*j^9,b^18*e^4*f^2*h^17*k,b^18*d^6*f^8*g^12*j*k^3,b^18*c*d^20*e^24*g^3*j^4,b^19*e^11*g^6*h^10,b^19*d^28*e^13*f*i^5,b^19*d^42*e*h^2*i^3*j^2,b^19*e^10*h*j^7*k^5,b^19*c*d^21*e^6*g^4*i^7,b^19*c^2*d^6*h^6*j^9,b^19*c^5*e^2*f^7*k^8,b^19*c^10*d^35*g^3*h*i^5,b^19*c^12*e^3*i*j*k^14,b^19*c^26*g^4*h^5*j^2,b^19*c^45*e^9,b^19*c^50*d^10*e,b^20*d^4*f*g^2*h^17,b^20*f^17*h^2*i^4,b^20*e*f^5*g^2*h^4*i^9*j^4,b^20*h^8*i^7*j*k^5,b^20*d^17*e^4*j^10,b^20*e^9*f^4*g^5*k^6,b^20*d^27*f^10*j^2*k,b^20*g^7*h^3*i^11*k,b^20*g^19*j^7,b^20*c*d^10*g^4*j^4*k^7,b^20*c^13*d^4*g^18*j^3,b^20*c^14*d*f*h^12*i^3,b^21*d*e^13*h^2*j^8,b^21*e^6*g*h*i^2*j^2*k^3,b^21*d^4*f^6*g*i*k^6,b^21*g^15*h*i*j,b^21*c*d^12*g^14*h^5,b^21*c^10*e^21*j^5,b^21*c^12*e^8*f^3*h^4*j^7,b^21*c^17*f^17,b^22*e^10*h^6*i^4,b^22*f^5*h^11*j,b^22*c^11*e^8*g^11*j^2*k,b^22*c^13*d^25*g^5*h*j^4,b^23*d^9*e^4*f^2*g^2*h^4*j^2,b^23*e^9*f^10*g^8,b^23*d^2*g^7*h^3*k,b^24*e^6*g^4*h^6*i^7,b^24*f^12*g^4*i^6,b^24*d^10*g^3*h^10*i^4*k,b^24*d^9*e^2*f^7*g*j^7,b^24*c^18*g^2*h*i^11*j,b^24*c^22*e*f*h^8,b^25*d^7*i^5*j^9,b^25*e^33*h^2*j,b^25*d^17*f^9*i^4*j,b^25*g^2*i^7*j^3*k^5,b^25*e^26*h*k^4,b^25*c^2*d^2*e^18*f^4*k^7,b^25*c^9*e^8*g^14*h,b^25*c^30*j^8,b^25*c^33*f^6*k^4,b^26*e*h^19*j^3*k,b^26*g^10*h^8*i,b^26*c^2*d^3*g*i^3*k^16,b^26*c^16*i^9*k,b^27*e^10*g^4*i^2*j^7,b^27*d*e^2*f^13*g^4*i,b^27*d^5*g^3*h^4*j^11,b^27*c^3*e^3*g^9*i^4*j,b^27*c^5*d^15*g^3*j^3,b^27*c^52*g^5,b^28*f*i^10*j,b^28*g^5*i^12,b^28*d^23*h^4*i^7,b^28*c^16*e^12*h^2*i^2*j,b^28*c^28*f^4*h^2*i,b^29*d^4*f^2*h*j^6*k^10,b^29*k^19,b^29*f^10*h*j^5*k,b^29*f^2*g^5*k^10,b^29*c^3*d^5*e^19*j^2,b^29*c^15*e^12*g*k^6,b^29*c^15*e*f*g^10*j,b^29*c^27*g^15,b^30*d^6*f^12*h^8*i*k,b^30*d^13*e^8*h^2*i^5,b^30*c^3*d^7*f^3*g^6*h^2*i^4,b^30*c^5*f^11*h*k^2,b^30*c^15*g^11*h*i^6,b^31*d^23*f*h*j*k^8,b^31*e^4*k^13,b^32*f^8*h^6*k^4,b^32*g^8*h^12*i*k,b^32*d^4*g^2*h^17*j,b^32*c*e^19*i^2,b^32*c^15*d^21*h^4,b^33*g*h*j^14,b^33*c^2*d^4*f^5*g*j^6*k^3,b^33*c^6*e^2*f^8*h*k^2,b^33*c^21*d^11*e^5*i^2*j^3,b^34*h^15,b^34*d^4*f^10*h^8*k^2,b^34*c^13*f^4*i*j^4*k^8,b^35*f*j^5*k^6,b^36*d^9*f^11*i^2*j^5,b^36*d^2*f^3*i^4*k^6,b^36*g^4*h^6*i^4*j^6,b^36*f^11*g^4*i^3,b^36*c^19*d^3*e^5*i^7,b^36*c^23*e*f^8*j^2*k^2,b^37*d^20*f^8*j^6,b^37*d^3*e*g^4*j^8*k,b^37*d^13*g^4*k^4,b^37*c^10*e^8*f^5*g*j^3,b^37*c^19*h*j^7*k,b^38*e^5*h^4*i^2*j^5,b^38*f^7*i,b^38*c^7*h^8*j*k,b^39*e^4*f^4*g^11,b^39*e^5*g^16*k^4,b^40*c^10*d*f^17,b^40*c^15*e^9*g^9*h*i,b^40*c^17*g^3*h^6,b^40*c^22*f^9*g^3,b^42*e^22*f^2*i^2*k,b^42*d^9*e^10*h^6*k^2,b^42*d^19*e^2*k^5,b^42*c^16*f^2*i^6*k^2,b^43*c^3*d^3*g^12*i,b^44*c^11*d^3*e^7*j^7,b^44*c^16*d^13*f^4,b^45*c^3*d^24*e^6*f,b^46*d^22*e^3*i^3*j^2,b^46*d^15*i^5*k^4,b^46*f^5*g^2*j^6,b^46*c^33*e^11,b^48*d^5*f^2*h^4*j^4*k^2,b^48*c^8*e^7*g^7*i^2,b^48*c^10*d^30*g*h^2,b^49*c*d^5*f^2*g^2*j^4,b^50*d^24*f*g^2*h^4,b^50*e^6*f^6*h^2*j^2,b^50*g^4*h*k^5,b^50*d^14*e*i^10,b^51*h^8*i^4*k^5,b^52*d^8*e^2*f^5*g^9*h^2,b^53*c^6*f^4*h^2*i^4*j^2,b^54*h^2*j^11,b^54*f*j^3,b^54*c^7*d^19*k^2,b^55*d^3*f^3*h^2*i^7,b^55*c^4*e^14*i^2*j*k^3,b^55*c^28*i^3*k^3,b^56*e^21*j^2*k,b^56*c^3*e^3*f^5*g^7*j,b^56*c^5*d^9*e*k^5,b^56*c^17*d^3*f^3*g^6,b^57*e^10*i^5*k,b^58*c^15*e^12,b^59*d^12*e^6*i^8,b^59*e^9*h^9,b^59*c^3*d*e*f*h^2,b^62*c^33*k,b^65*h^6*j*k^5,b^67*c^5*h^4,b^68*d^6*f^2*g^8*h^2*j^2,b^69*c*i^2*j^8,b^71*e^3*g^2*h^6*k^4,b^71*c^23*g*i*k,b^73*d^2*e^5*i^3*j^2,b^73*f*g^6*i^2*j,b^73*c^23*j,b^75*e^16,b^75*d^10,b^78*d^2*f*g*h^5*i^2,b^79*c^2*e^2*i^5*j,b^81*f^3*k^6,b^97*e^3*h^2*k^3,b^102*k,b^104*c^10*f*g,b^119*c^4*h,b^121*g*h,c^31*d^15*e^2*f^4*i*j^3*k^3,c^8*f*g^14*i*j^7*k,e^13*g^3*h^5*i^7*k^4,d^26*f^5*h^10*i^2*j^2,d^8*e^6*f^2*i^10*j^7,c^22*d^6*e^26*i^2,c^19*e^4*f^8*i*j^3*k^7,d^35*h^8*j^8,f^5*g^11*i*j^7*k^5,f*h^7*i^4*k^12,e^13*f^13*g*h^6,c^3*d^4*e*h^17*j^4,c^14*d^4*f^2*j^9*k^5,e*g*i^12*j*k^10,c^2*d^12*f^4*h*i^7*j^3*k^5,d^23*f*g^9*i^2*j^4*k^3,d^2*e^17*i^5*j^2*k^8,c^12*f^8*g^2*i^4*j,d^7*e^6*f^5*g^16*j^2,c^10*e^28*f^4*i^2*k^2,d^29*e^4*f*g^4*h*i^2*k^4,c^5*d^42*f^4*i^5,c^52*e^5*f*g^2*i*k^2,d^7*e^8*f*g*j^14*k,d^15*f^3*h^6*j^8*k,e^2*f^11*g^3*i^4*k^9,d^8*g^2*h^5*i^2*j^2*k^10,e^8*f^7*g^4*h^4*j^6,c*e*g^9*h^3*k^4,c^3*d^23*f^5*g^3*h^8*j^2,f*g^5*h^10*i^7*k^4,e^3*i^8*j^13,e^30*g^2*h*k^7,c*d^13*e^17*f*h^6*j*k^2,c^11*e^12*f^3*g^16*h,c^7*d^5*f^2*g^5*i^2*j^7,c^11*e^28*f^5*g^3*h^4,c^21*d^29*g^4*h*j^3*k,g^7*i^15*k^2,d^13*f^4*g*h^4*i^10*j,c^11*e^10*g^4*h^10*k^5,c^5*e^23*j^6,c^19*d^19*e^3*j^2*k^4,d^3*e^12*h^2*i^8,c^5*e^5*h*i^10*k^9,d^13*f^6*h*j^5*k^11,d^45*e^6*f^3*g^2*j^3,d^38*g^7*k^2,c^29*d^3*e^14*g^4,c^3*e^23*f^4*g*i^5,c^12*d*e^11*h^11*i^3*j^2,c^17*d^11*e^3*f^2*h^4*i^2,c^4*d^22*e^10*g^14,e^3*f*h^15*j^4*k^2,d^51*g^3*i^3*j^4,d^3*g^7*h^15,f^8*i^7*j^3*k^9,c^21*e^9*g^2*i^10,c^2*d^3*e*g^17*h^10,c^9*d*f*i^18,c^26*f^8*g^2*j^3*k^7,e^9*h^4*i^5*j^9,f^4*h^9*j^11,e*f^12*i^4*j*k^3,c^2*d^6*f^2*h*i^2*k^16,c^2*d^7*f^18*h^2*j^3,c^9*h^8*i^2*j^5*k^4,d^8*e^3*f*g^7*h^2*j^12,d^18*f^15*g^7*j^4,d*g^12*h*j^6*k^2,e^5*g^9*h^4*i^8*j^4,e^17*f^14*j^2*k,c^10*d^57*e*i^3,c^12*f^22*j,c^19*g^5*h^6*j^3,c^24*f^14*g^5*k,c^33*g^4*h^10*k^2,d*e^17*f^3*g^5*k^8,d^16*e^13*f^13,e^14*g*h^6*i^3*k^5,d^30*e*h^11*j,d^9*e^6*f^5*g*i^2*k^8,g^15*h^6*i^2,c^17*e^29*h^4*j^2*k,d^30*f^2*j^6*k^7,c^5*e^18*h^11*i^5*k,e^25*g^8*h^4,d^14*e^12*f*g^2*h^9,c^13*e^11*i^3*j^11,c^18*d^3*e^3*f^9*i^2*j^3*k^3,c^25*f^3*g*i^2*j^10,c^37*g^6*i^4*j^4,c^14*d^28*j^8*k^2,d^12*e^7*i^6*j^6,d^22*f^8*i^5*k,d^5*g^2*i^8*k^7,d^6*f^2*g^11*i^5*j^5,c^12*g^16*i^7,c^35*e^15*i^2*j^3*k^3,c^37*d*e^2*h^2*j^5,c^49*h*k^7,c^11*e^11*f*h^5*i^8*j^3,c^25*d^9*h^9*i^5,h^3*i^2*j^2*k^14,d^27*e^5*f^4*h^3*j^6,c^3*d^6*e^10*f^12*g^4*i^2,c^12*d^20*g^3*h^2,c^17*d^30*f^10*g^3,d^4*e^7*h^5*i^11,g^5*h^4*i^13*k,c^3*e*f^7*g^4*j^8*k^3,d^3*f^9*h^6*j^2*k^3,d^4*e^5*f^5*i^13*j^3,c^10*d^10*e^27,c^22*d^4*e^9*g^10,d^14*f^6*g^14*j^3*k,d^18*e^16*h^7*i^6,d^4*e^24*f^2*h^2*i*j^2*k^6,e^6*f^10*g^11*h^2*j,f^2*g^16*h*i^2*k^6,e^19*f^5*h^4*j*k^6,d^23*e^5*g^20,c*e*f^13*g^7*h^4,f*g^3*h^18*j^2,c^8*d^2*e^27*h^5*i^3,d^12*e^15*f^4*g^3*h^4*k^4,e^5*g^17*h^11*j^3,d^22*e*f^4*j^10*k^5,e^4*g^2*h^2*i^3*j^15,f^6*g^2*i^2*j^7*k,d^15*j^4*k^14,c^4*g*h^6*j^11*k^2,c^9*d^9*f^4*g*j^3*k^5,e^3*h^2*i^11*j^2*k^10,f^8*h^2*i^10*j*k,g^3*h*i^12*k^10,c*d^9*f^9*h^13*k^4,c^18*f^13*i^4*j^4,d^4*f^5*g^12*i^5*j^2,c^7*e^5*j^2*k^8,c^19*f^8*g^8*j,d^14*e*f^10*h^5*i^3*j^2,d^7*f^2*h^4*i^5*k^8,d^41*f^3*g^2*j^5*k,c^6*e^18*g^2*h^18,c^7*d*f^10*g^4*h^4*i^4,c^14*d^15*e^20*f*i^6,c^26*d^8*e^13*i^8,e^21*f*g^5*i^3*j*k^2,d^25*e^8*f^7*j^3,d^8*e^9*g^4*h^4*i*j^5*k^3,d^18*e*g^4*k^6,d^49*f^5*h^2*k,d^42*g^3*h*k^10,c^19*d^14*e^3*f^10*j^2,c^31*d^7*f^2*k^6,e^25*f^8*i^5,e^12*f^14*h^3,e^13*h^9*i^3*j^2,c^2*d^12*h^14*j^4,c^5*e^5*f^6*h^2*i^2*k^2,c^14*d^5*h^13*k^3,c^17*g^2*h*i^4*k^11,d^2*e^12*f^3*g^11,d^33*f^9*g^5,c*d^16*g^10*h^6*k,c^6*d^26*f*g^10*k^4,c^13*d^12*f^3*j^9*k,c^37*f^3*g^9*i*j^2*k,h^15*i^3*j*k^10,e^9*g^7*h^9*i^6,d^31*g*h^14*i,d^10*e*f^5*g^7*h^2*i^5,h^12*k^15,i^13*j*k^6,c^24*e^4*g^3*h^11,c^29*f^8*g^3*h^4,d^6*f^8*g^2*h^11*j^7,g^7*h^10*j*k^8,e^7*g^6*i^8*j^2*k^4,d^31*f^2*i^3*j^4,d^45*h^2*i*j^8,e^13*h^14*i^8,d^4*f^4*h^19*i^3,c^2*d^55*k^3,c^4*d^16*e^21*g^3*k^7,c^35*e^2*g^2*j*k^4,c^37*d^20*f^5*j^3,c^44*d^3*g*j^5*k^5,e^4*g^2*i^17*j^4*k,e^30*f*i^3*k^3,d^8*g^13*h^11,d^10*e^16*f*i^6*j^2*k^4,c*d^41*e^3*f^7*h*i*j^4,c^11*d^4*f^9*i^5*j,c^13*d^34*i^3*k^8,c^23*f*i^7*k^4,d^7*f^7*g^2*k^15,e^18*g^13*i^5,f^5*i^18,d^45*e^3*k^6,c^5*e^6*g^12*i^3*j^4,c^7*d^29*g^6*j^6,c^9*e^2*j^11*k^8,c^10*d^8*g^12*i^2*k^2,f^22*j^3*k^2,h^6*i^2*j^5*k^8,d^16*g^8*i^10*k^2,d*f^6*h^11*j^7*k^3,d^47*f^6*g^2*i^5,c^2*f^14*i*k^11,c^9*e^27*f^5*i^3,c^16*e^17*h*i^3*j^7,c^23*d^18*e^7*f^3*k^2,c^28*e^10*g^5*i^5*j,c^30*d^2*h^5*j^3,c^42*g^4*h^4*i^2,d^54*e^7*g^2*i^2*j^2*k,e^5*f^5*g^4*j^12,g^9*j^6*k^6,d^12*f^3*g^3*h^4*j^8*k,d^5*e^34*f^2*j,d^5*g^8*h^3*j^2*k^10,c^4*e^6*f*h^8*i^11*j,c^5*d^19*e^22*j^5,c^10*d^29*e^14,c^16*g*h^7*i^13,c^19*d^43*e^2*h^2*j*k,c^21*f^7*g*i^12,c^41*d^2*f^2*i^2*j^8,f^7*h^7*i^3*j^6,d^6*f^21*i^2,g^5*h^6*i^5*k^6,d^20*f^5*h^11*j^2*k,d^13*e^23*f^4*i^6,e^24*g*i^9*k^2,e^13*g^10*h*i^6*j^2,d^27*e^11*h^5*i^4,d^28*f^4*g^4*h^6*i*j^4,d^37*e^3*f^2*i^3,e*f^26*j,c^2*d*f^16*h^2*k^9,c^7*e^2*f^4*g^2*h^4*j^3*k^2,c^40*e^8*f*g^6*h^3*j,c^45*e^11*k^5,d^13*e^19*j^8*k^4,d^7*e*f^4*g^14*j^7,d^2*e^14*h^2*j^7*k^4,e^7*g*h*j*k^13,f^7*g^10*h^2*j^6,c*d^5*f^5*g*k^16,c^8*g^15*h*k^4,c^16*d^21*f*g^8*i^5*j^3,e^16*h^4*i^3*k^9,d^10*e^3*f*h^9*j*k^4,f^3*g^12*h^4*i^2,d^18*e^29*h^4*j^3,f*g^11*h^8*k^4,c^3*f^3*i^5*j^12*k,c^3*d^11*e^22*g^2*h^3*i,c^8*d^21*e^14*f^6*g^2,c^15*d^5*e^4*g^16*h^3,c^17*d^35*e^2*g*h^7,c^27*e^13*i^8*j,d^21*e^10*g^6*h^2*j^2*k^2,e^5*g^26,g^5*j^13,e^25*f^3*g^3*j^5,e^7*f^8*h^14,d^3*i^2*k^20,c^4*d^18*g^4*j^9*k^3,c^7*h^13*i^2*k^9,c^8*d^10*e^5*f*g^2*h^4*j*k^2,d^5*e^19*f^2*g^3*h^5*i^4,d^29*g^2*h^9*i*k^2,d^2*f^2*g*i^8*j^7,e^27*g^5*h^2*k^3,e^14*f^5*h^7,d^4*e^6*f^19*k,g^6*i^10*j*k^8,e^7*g^4*h^6*k^7,d^18*f^3*h^11*k^2,f^11*g^4*k^10,c*e^13*i^3*j^11*k^4,c^13*f^7*i^2*j^10,c^15*h^2*j^7*k^8,c^25*g^3*i^4*j^4*k^4,c^27*f^5*h^2*j^6,c^39*g^2*h*i*k^8,d^5*e^21*f^2*g^13,d^2*e^3*f^7*h^14*i^3,h^13*i^5*k^7,d^29*e*g^12*h^4,e^20*j^12*k^2,d^15*e^7*f^2*j^14,f^2*g^32,f^3*i^15*j^2,e^2*f^4*g^12*j^11,c^2*d^8*j^8*k^6,c^14*d*g^2*j^2*k^15,c^14*d^2*f^2*g^11*j^7,e^9*i^6*j^6*k^2,d^23*f^4*h^3*i*j^8,e^2*i^8*k^11,f^6*g^8*i^5*j^5,d^16*h^2*i^3*j^2*k^6,f^4*i^7*k^14,g^13*i^7*k^2,c^2*d^10*f^4*g^7*h^2*i^2*j,c^25*e^4*f*j^5*k^2,c^35*f^3*g^10*i*j^2,c^37*k^11,h^5*i^14*k^2,d^27*g^7*j^3*k^4,d^58*g*j^5,e^18*f^6*j^12,d^11*e^9*f^5*i^16,c^11*e^6*h^2*i^10*k^7,c^12*e^11*g^4*j^6,c^13*f^3*h^7*i^5*k^2,c^14*d^23*f^4*j^8,c^26*d^16*g^3*j^2*k^4,d^11*e^5*g^4*i^9*j,d^42*f^3*h^3*i^4*j^3,d^13*e^25*h*j^7,e^20*f^2*g*i^3*j^4,d^37*e^5*h^5*j^3*k^4,e^12*f^16*g*i^2,d^17*f^22,e^8*h^7*i*j^8,e^13*g^6*i^5*k^5 ); frobby-0.9.5/test/bench/n8d30.test000066400000000000000000003070001401527164200166050ustar00rootroot000000000000002099 8 -144092 49446 8386 12703 280 3258 2607 2955 -143623 41853 10768 3618 -109 2335 145 8499 -143227 -4820 -8524 67421 20360 -336 -343 -800 -142597 -5931 30126 37278 -2652 9172 3765 -561 -142052 -2026 -28 4355 43235 2489 6432 -2900 -141231 26559 11182 28624 -458 -275 12490 -1824 -140762 18966 13564 19539 -847 -1198 10028 3720 -140293 11373 15946 10454 -1236 -2121 7566 9264 -138206 13687 30050 9937 10958 12659 1458 -4251 -137737 6094 32432 852 10569 11736 -1004 1293 -137039 -8479 2175 16421 21698 10645 3807 43 -136204 -1109 26835 31347 21714 -214 -40 -2475 -135735 -8702 29217 22262 21325 -1137 -2502 3069 -135574 -2220 65485 1204 -1298 9294 4068 -2236 -133041 8104 18666 -966 11636 -2167 15142 795 -132686 47815 7298 18838 3109 2028 -3823 3984 -132217 40222 9680 9753 2720 1105 -6285 9528 -131191 -7562 29038 43413 177 7942 -2665 468 -130646 -3657 -1116 10490 46064 1259 2 -1871 -130177 -11250 1266 1405 45675 336 -2460 3673 -129825 24928 10094 34759 2371 -1505 6060 -795 -129722 2372 -9802 1663 1577 7508 4983 12811 -129356 17335 12476 25674 1982 -2428 3598 4749 -128887 9742 14858 16589 1593 -3351 1136 10293 -127635 4686 4302 1146 13771 22288 -1125 -704 -126331 4463 31344 6987 13398 10506 -7434 2322 -126102 -2517 -1295 31641 24916 10338 -161 -4472 -125633 -10110 1087 22556 24527 9415 -2623 1072 -125434 44546 10018 7418 15981 1982 3753 -4485 -124965 36953 12400 -1667 15592 1059 1291 1059 -124637 3742 62015 16424 1920 8987 100 -6751 -124168 -3851 64397 7339 1531 8064 -2362 -1207 -123699 -11444 66779 -1746 1142 7141 -4824 4337 -122939 6696 -9464 -672 14838 8385 15021 -1202 -122470 -897 -7082 -9757 14449 7462 12559 4342 -121916 93470 -9519 -5091 -2624 4224 -30 1974 -121635 6473 17578 5169 14465 -3397 8712 1824 -121089 -8970 908 43707 3379 18494 -2786 -1529 -120776 -1618 23589 -320 2971 5943 20093 -4731 -120307 -9211 25971 -9405 2582 5020 17631 813 -119055 70583 -6723 10830 -3362 691 9853 -2805 -118586 62990 -4341 1745 -3751 -232 7391 2739 -118419 23297 9006 40894 5200 -2735 -370 234 -118316 741 -10890 7798 4406 6278 -1447 13840 -117950 15704 11388 31809 4811 -3658 -2832 5778 -117847 -6852 -8508 -1287 4017 5355 -3909 19384 -116229 3055 3214 7281 16600 21058 -7555 325 -114227 -11741 -1 28691 27356 8185 -9053 2101 -113559 35322 11312 4468 18421 -171 -5139 2088 -112762 -5482 63309 13474 4360 6834 -8792 -178 -112700 27231 17323 -1021 6927 9169 6242 -4467 -112231 19638 19705 -10106 6538 8246 3780 1077 -111533 5065 -10552 5463 17667 7155 8591 -173 -111396 27008 44365 4820 6554 -2613 -67 -1441 -111064 -2528 -8170 -3622 17278 6232 6129 5371 -110927 19415 46747 -4265 6165 -3536 -2529 4103 -110595 -10121 -5788 -12707 16889 5309 3667 10915 -110510 91839 -10607 1044 205 2994 -6460 3003 -110229 4842 16490 11304 17294 -4627 2282 2853 -110205 -10619 -2159 -9111 5784 15572 17510 -1184 -109760 -2751 18872 2219 16905 -5550 -180 8397 -109381 21499 -11145 1608 -3132 18844 -3917 7549 -109370 -3249 22501 5815 5800 4713 13663 -3702 -108901 -10842 24883 -3270 5411 3790 11201 1842 -108066 -3472 49543 11656 5427 -7069 7354 -676 -107649 68952 -7811 16965 -533 -539 3423 -1776 -107597 -11065 51925 2571 5038 -7992 4892 4868 -107180 61359 -5429 7880 -922 -1462 961 3768 -107013 21666 7918 47029 8029 -3965 -6800 1263 -106989 6205 -10731 26614 -3481 16234 8428 -2774 -106711 53766 -3047 -1205 -1311 -2385 -1501 9312 -106154 13575 13929 41540 -3465 5375 4581 -5292 -105685 5982 16311 32455 -3854 4452 2119 252 -105216 -1611 18693 23370 -4243 3529 -343 5796 -104747 -9204 21075 14285 -4632 2606 -2805 11340 -104319 38472 -2633 23801 -1660 -4995 10844 -1011 -103850 30879 -251 14716 -2049 -5918 8382 4533 -103381 23286 2131 5631 -2438 -6841 5920 10077 -102912 15693 4513 -3454 -2827 -7764 3458 15621 -102129 18230 -8425 -9812 9740 18798 3659 -920 -101294 25600 16235 5114 9756 7939 -188 -3438 -100825 18007 18617 -3971 9367 7016 -2650 2106 -100127 3434 -11640 11598 20496 5925 2161 856 -99658 -4159 -9258 2513 20107 5002 -301 6400 -99189 -11752 -6876 -6572 19718 4079 -2763 11944 -99131 17286 49288 5466 -2111 5497 4884 -6967 -98823 3211 15402 17439 20123 -5857 -4148 3882 -98799 -12250 -3247 -2976 8613 14342 11080 -155 -98662 9693 51670 -3619 -2500 4574 2422 -1423 -98193 2100 54052 -12704 -2889 3651 -40 4121 -97964 -4880 21413 11950 8629 3483 7233 -2673 -97495 -12473 23795 2865 8240 2560 4771 2871 -97358 9470 78712 2222 -2873 -7208 -3887 1603 -97026 -20066 26177 -6220 7851 1637 2309 8415 -96243 67321 -8899 23100 2296 -1769 -3007 -747 -96129 20017 4851 -5789 10434 -6887 13496 1608 -95774 59728 -6517 14015 1907 -2692 -5469 4797 -95583 4574 -11819 32749 -652 15004 1998 -1745 -95332 -20787 56848 3217 -3627 118 9843 -658 -95305 52135 -4135 4930 1518 -3615 -7931 10341 -95114 -3019 -9437 23664 -1041 14081 -464 3799 -94863 -28380 59230 -5868 -4016 -805 7381 4886 -94645 -10612 -7055 14579 -1430 13158 -2926 9343 -94279 4351 15223 38590 -1025 3222 -4311 1281 -94050 -2629 -17416 63244 10493 3054 2962 -5513 -93810 -3242 17605 29505 -1414 2299 -6773 6825 -93581 -10222 -15034 54159 10104 2131 500 31 -93265 663 -12549 -3418 44473 -4384 -4106 4486 -92913 36841 -3721 29936 1169 -6225 4414 18 -92810 14285 -23617 -3160 375 2788 3337 13624 -92444 29248 -1339 20851 780 -7148 1952 5562 -92341 6692 -21235 -12245 -14 1865 875 19168 -91975 21655 1043 11766 391 -8071 -510 11106 -91192 24192 -11895 5408 12958 18491 -309 -5435 -90723 16599 -9513 -3677 12569 17568 -2771 109 -90418 -1009 -23203 21846 26 178 15682 3301 -89949 -8602 -20821 12761 -363 -745 13220 8845 -89419 16376 17529 2164 12196 5786 -9080 3135 -89190 9396 -15110 26818 23714 5618 -1807 -3659 -88721 1803 -12728 17733 23325 4695 -4269 1885 -88560 8285 23540 -3325 702 15126 2301 -3420 -88252 -5790 -10346 8648 22936 3772 -6731 7429 -88091 692 25922 -12410 313 14203 -161 2124 -88053 48866 -1415 -6490 14390 -3661 -355 1872 -87862 -6288 -6717 12244 11831 14035 7112 -4670 -87783 -13383 -7964 -437 22547 2849 -9193 12973 -87725 15655 48200 11601 718 4267 -1546 -5938 -87393 -13881 -4335 3159 11442 13112 4650 874 -87256 8062 50582 2516 329 3344 -4008 -394 -87027 1082 17943 27170 11847 3176 3265 -7188 -86924 -21474 -1953 -5926 11053 12189 2188 6418 -86787 469 52964 -6569 -60 2421 -6470 5150 -86558 -6511 20325 18085 11458 2253 803 -1644 -86089 -14104 22707 9000 11069 1330 -1659 3900 -86065 -29565 4058 -11415 -441 21529 13569 -137 -86027 18609 -23279 -5495 13636 3665 13375 -389 -85890 40552 31638 -6138 2523 -6103 4717 -1657 -85620 -21697 25089 -85 10680 407 -4121 9444 -85391 -28677 -7550 24569 22198 239 3152 2650 -84837 65690 -9987 29235 5125 -2999 -9437 282 -84761 -29788 31100 -5574 -814 9747 7260 2889 -84723 18386 3763 346 13263 -8117 7066 2637 -84177 2943 -12907 38884 2177 13774 -4432 -716 -83926 -22418 55760 9352 -798 -1112 3413 371 -83864 10295 9774 -5143 1769 1223 18447 -3918 -83708 -4650 -10525 29799 1788 12851 -6894 4828 -83509 50006 -1594 14661 -6758 5418 -518 -729 -83457 -30011 58142 267 -1187 -2035 951 5915 -83395 2702 12156 -14228 1380 300 15985 1626 -83239 -12243 -8143 20714 1399 11928 -9356 10372 -83040 42413 788 5576 -7147 4495 -2980 4815 -82697 -11871 -18101 1341 12509 -791 20796 376 -82571 34820 3170 -3509 -7536 3572 -5442 10359 -82228 -19464 -15719 -7744 12120 -1714 18334 5920 -82175 -11853 -16122 60294 12933 901 -5930 1060 -81674 74903 -18156 -3078 -4953 -4952 5745 3552 -81507 35210 -4809 36071 3998 -7455 -2016 1047 -81038 27617 -2427 26986 3609 -8378 -4478 6591 -81000 -9059 -7626 -2772 35808 3726 845 -1040 -80935 5061 -22323 -6110 2815 635 -5555 20197 -80847 -27537 -7729 45720 1050 9318 2989 49 -80569 20024 -45 17901 3220 -9301 -6940 12135 -80531 -16652 -5244 -11857 35419 2803 -1617 4504 -80179 19526 3584 21497 -7885 962 6903 36 -79710 11933 5966 12412 -8274 39 4441 5580 -79317 14968 -10601 2458 15398 16338 -9201 1138 -79012 -2640 -24291 27981 2855 -1052 9252 4330 -78998 -23855 -10841 18638 46564 -9147 -653 736 -78543 -10233 -21909 18896 2466 -1975 6790 9874 -78458 6877 -4590 -3031 3904 25678 2180 -5417 -78368 -24966 27809 -11505 23552 361 3455 975 -78153 -10731 -18280 22492 -8639 8288 20633 -2225 -77989 -716 -2208 -12116 3515 24755 -282 127 -77684 -18324 -15898 13407 -9028 7365 18171 3319 -77623 14247 20070 11895 3920 14819 -1667 -7935 -77605 -25419 -17145 726 1688 -3821 1866 20962 -77215 -25917 -13516 4322 -9417 6442 15709 8863 -77154 6654 22452 2810 3531 13896 -4129 -2391 -76685 -939 24834 -6275 3142 12973 -6591 3153 -76647 47235 -2503 -355 17219 -4891 -6785 2901 -76456 -7919 -7805 18379 14660 12805 682 -3641 -75987 -15512 -5423 9294 14271 11882 -1780 1903 -75850 6431 49494 8651 3158 2114 -10438 635 -75788 39144 3508 -5844 5725 4449 4596 -3654 -75518 -23105 -3041 209 13882 10959 -4242 7447 -75381 -1162 51876 -434 2769 1191 -12900 6179 -75319 31551 5890 -14929 5336 3526 2134 1890 -75152 -8142 19237 24220 14287 1023 -5627 -615 -74850 23958 8272 -24014 4947 2603 -328 7434 -74659 -31196 2970 -5280 2388 20299 7139 892 -74621 16978 -24367 640 16465 2435 6945 640 -74522 -9253 57887 -5923 -8725 10531 -1519 -376 -74484 38921 30550 -3 5352 -7333 -1713 -628 -74381 16365 10654 -33099 4558 1680 -2790 12978 -74152 9385 -21985 -8445 16076 1512 4483 6184 -74053 -16846 60269 -15008 -9114 9608 -3981 5168 -73985 -30308 -8638 30704 25027 -991 -3278 3679 -73683 1792 -19603 -17530 15687 589 2021 11728 -73355 -31419 30012 561 2015 8517 830 3918 -73317 16755 2675 6481 16092 -9347 636 3666 -73293 1294 -15974 -13934 4582 10852 15864 -371 -72848 9162 5057 -2604 15703 -10270 -1826 9210 -72824 -6299 -13592 -23019 4193 9929 13402 5173 -72810 -27514 -142 -32362 47902 1834 3497 1579 -72771 1312 -13995 45019 5006 12544 -10862 313 -72520 -24049 54672 15487 2031 -2342 -3017 1400 -72458 8664 8686 992 4598 -7 12017 -2889 -72150 -5411 -25200 12965 26832 -11361 2985 7960 -72103 48375 -2682 20796 -3929 4188 -6948 300 -71989 1071 11068 -8093 4209 -930 9555 2655 -71634 40782 -300 11711 -4318 3265 -9410 5844 -71596 4106 -5499 -18047 27881 15369 -4087 -1787 -71520 -6522 13450 -17178 3820 -1853 7093 8199 -71443 -14372 -5602 30445 -6877 20961 -1943 -698 -71291 -13502 -19189 7476 15338 -2021 14366 1405 -71165 33189 2082 2626 -4707 2342 -11872 11388 -71154 8441 35728 6833 4225 -11789 5708 137 -70974 -21965 -3220 21360 -7266 20038 -4405 4846 -70822 -21095 -16807 -1609 14949 -2944 11904 6949 -70737 80865 -21626 12142 -1735 -5259 1777 -963 -70685 848 38110 -2252 3836 -12712 3246 5681 -70456 -6132 5471 22402 15354 -12880 10519 -1113 -70268 73272 -19244 3057 -2124 -6182 -685 4581 -70077 18118 -24546 21791 -4683 11514 6782 -1961 -69987 -13725 7853 13317 14965 -13803 8057 4431 -69963 -29186 -10796 -7098 3455 6396 23285 394 -69608 10525 -22164 12706 -5072 10591 4320 3583 -69594 -10690 -8714 3363 38637 2496 -5585 -11 -69529 3430 -23411 25 5644 -595 -11985 21226 -69441 -29168 -8817 51855 3879 8088 -3441 1078 -69433 -4208 27554 -17695 16014 12927 985 -5316 -69409 65181 -13233 -2432 -13618 3158 10696 -1974 -69242 25488 114 36717 -4667 655 2935 -4479 -69139 2932 -19782 3621 -5461 9668 1858 9127 -68964 -11801 29936 -26780 15625 12004 -1477 228 -68940 57588 -10851 -11517 -14007 2235 8234 3570 -68926 36373 2599 -20860 29702 -5860 -1671 -24 -68773 17895 2496 27632 -5056 -268 473 1065 -68670 -4661 -17400 -5464 -5850 8745 -604 14671 -68659 -29409 16246 -1257 3082 -5386 16976 3420 -68457 28780 4981 -29945 29313 -6783 -4133 5520 -68304 10302 4878 18547 -5445 -1191 -1989 6609 -68201 -12254 -15018 -14549 -6239 7822 -3066 20215 -68105 64958 13809 3409 -13991 -8624 4387 1052 -67911 13337 -11689 8593 18227 15108 -15631 2167 -67835 2709 7260 9462 -5834 -2114 -4451 12153 -67606 -4271 -25379 34116 5684 -2282 2822 5359 -67407 50385 -16448 18978 -2862 -9715 9198 -198 -67293 3081 -2698 -9911 5276 -14833 25701 2157 -67137 -11864 -22997 25031 5295 -3205 360 10903 -66938 42792 -14066 9893 -3251 -10638 6736 5346 -66900 6116 -19265 -19865 28948 1466 12059 -2285 -66583 -2347 -3296 -5981 6344 23525 -6712 1156 -66469 35199 -11684 808 -3640 -11561 4274 10890 -66332 -27708 65371 -35513 3369 8639 1133 2243 -66278 -19955 -16986 19542 -6199 6135 11741 4348 -65809 -27548 -14604 10457 -6588 5212 9279 9892 -65748 5023 21364 8945 6360 12666 -10559 -1362 -65596 5893 7777 -14024 28575 -10316 5750 741 -65443 -12585 7674 34468 -6183 -4724 7894 1830 -65279 -2570 23746 -140 5971 11743 -13021 4182 -65217 30143 -22240 -14635 8538 14078 2013 -107 -65050 -9550 -8893 24514 17489 11575 -5748 -2612 -64974 -20178 10056 25383 -6572 -5647 5432 7374 -64898 -8680 -22480 1545 39704 -11407 10561 -509 -64851 45106 38 9376 8943 4142 628 -8169 -64748 22550 -19858 -23720 8149 13155 -449 5437 -64737 -2198 13788 -19513 17081 -976 17131 -5814 -64608 -5215 32334 49394 -6167 -15583 4047 -688 -64444 4800 48406 14786 5987 884 -16868 1664 -64382 37513 2420 291 8554 3219 -1834 -2625 -64268 -9791 16170 -28598 16692 -1899 14669 -270 -64077 19905 -11270 25814 -3989 -14171 16619 567 -63913 29920 4802 -8794 8165 2296 -4296 2919 -63746 -9773 18149 30355 17116 -207 -12057 414 -63608 12312 -8888 16729 -4378 -15094 14157 6111 -63585 -3291 54417 9297 -5507 10224 -5487 -4891 -63444 22327 7184 -17879 7776 1373 -6758 8463 -63253 -32827 1882 855 5217 19069 709 1921 -63215 15347 -25455 6775 19294 1205 515 1669 -63139 4719 -6506 7644 -4767 -16017 11695 11655 -63116 -10884 56799 212 -5896 9301 -7949 653 -62746 7754 -23073 -2310 18905 282 -1947 7213 -62585 14236 13195 -23368 -3718 10713 4623 1908 -62517 774 -55712 22344 30423 114 5326 419 -62418 -25457 26542 15781 5233 8210 -3138 -597 -62356 7256 -19444 1286 7800 10545 11896 -4886 -62277 161 -20691 -11395 18516 -641 -4409 12757 -62219 29199 35473 643 -3313 777 3238 -6154 -62116 6643 15577 -32453 -4107 9790 2161 7452 -62048 -6819 -53330 13259 30034 -809 2864 5963 -61911 15124 1587 12616 18921 -10577 -5794 4695 -61887 -337 -17062 -7799 7411 9622 9434 658 -61750 21606 37855 -8442 -3702 -146 776 -610 -61521 14626 5216 16212 7816 -314 8049 -7404 -61418 -7930 -14680 -16884 7022 8699 6972 6202 -61365 -319 -15083 51154 7835 11314 -17292 1342 -61281 14013 40237 -17527 -4091 -1069 -1686 4934 -61251 -47623 -1333 22265 15973 6196 -789 3697 -61219 46726 -5749 -32022 -1524 1266 13348 645 -61213 551 -28670 28185 30050 -11668 -983 3445 -61189 -14910 -47319 7770 18540 8531 14245 -592 -61052 7033 7598 7127 7427 -1237 5587 -1860 -60782 -55216 1049 13180 15584 5273 -3251 9241 -60720 -22503 -44937 -1315 18151 7608 11783 4952 -60697 46744 -3770 26931 -1100 2958 -13378 1329 -60583 -560 9980 -1958 7038 -2160 3125 3684 -60506 -8410 -9072 45665 -3659 20654 -5911 -5213 -60384 54096 18911 -17096 -1508 -9593 9501 -1873 -60354 -7540 -22659 22696 18556 -2328 10398 -3110 -60228 39151 -1388 17846 -1489 2035 -15840 6873 -60204 23690 -20037 -2569 -12999 22234 -612 2836 -60166 71864 -47374 3351 1078 4370 -806 2584 -60114 -8153 12362 -11043 6649 -3083 663 9228 -59915 46503 21293 -26181 -1897 -10516 7039 3671 -59885 -15133 -20277 13611 18167 -3251 7936 2434 -59786 -41364 61977 7048 -7023 4845 -528 1418 -59759 31558 994 8761 -1878 1112 -18302 12417 -59748 6810 34640 12968 7054 -13019 -722 1166 -59697 64271 -44992 -5734 689 3447 -3268 8128 -59645 -15746 14744 -20128 6260 -4006 -1799 14772 -59506 9117 -50294 13000 -1870 21143 4199 1586 -59416 -22726 -17895 4526 17778 -4174 5474 7978 -59369 31060 4623 12357 -12983 11375 -4459 318 -59331 79234 -22714 18277 1094 -6489 -4653 66 -59279 -783 37022 3883 6665 -13942 -3184 6710 -59088 -55937 31720 22617 4106 3754 4283 168 -59050 -7763 4383 28537 18183 -14110 4089 -84 -59037 1524 -47912 3915 -2259 20220 1737 7130 -58947 -30319 -15513 -4559 17389 -5097 3012 13522 -58900 23467 7005 3272 -13372 10452 -6921 5862 -58889 -1281 40651 7479 -4440 -3679 10659 -5389 -58862 71641 -20332 9192 705 -7412 -7115 5610 -58671 16487 -25634 27926 -1854 10284 352 -932 -58581 -15356 6765 19452 17794 -15033 1627 5460 -58557 -30817 -11884 -963 6284 5166 16855 1423 -58496 1754 24084 -2475 19232 12620 -2983 -9831 -58431 15874 9387 -5813 -13761 9529 -9383 11406 -58420 -8874 43033 -1606 -4829 -4602 8197 155 -58202 8894 -23252 18841 -2243 9361 -2110 4612 -58188 -12321 -9802 9498 41466 1266 -12015 1018 -58088 -38410 -9502 -10048 5895 4243 14393 6967 -58065 30837 31665 18198 -13356 -407 -10768 3344 -58027 -5839 26466 -11560 18843 11697 -5445 -4287 -58003 63550 -14321 3703 -10789 1928 4266 -945 -57951 -16467 45415 -10691 -5218 -5525 5735 5699 -57889 16246 -571 -25186 -2651 -3190 20769 1410 -57836 23857 -974 42852 -1838 -575 -3495 -3450 -57733 1301 -20870 9756 -2632 8438 -4572 10156 -57619 -46003 -7120 -19133 5506 3320 11931 12511 -57585 -1504 67693 13320 -4813 -15461 4350 -2363 -57558 -13432 28848 -20645 18454 10774 -7907 1257 -57534 55957 -11939 -5382 -11178 1005 1804 4599 -57504 -5679 -53509 34410 8886 8270 2701 3362 -57420 8653 1811 -34271 -3040 -4113 18307 6954 -57367 16264 1408 33767 -2227 -1498 -5957 2094 -57343 803 -17241 13352 -13737 18701 9271 -1943 -57305 48977 -44578 19272 340 837 9077 -2195 -57264 -6292 -18488 671 -3021 7515 -7034 15700 -57253 -31040 15158 4878 5911 -6616 10546 4449 -57191 1673 -30828 -9617 8478 -4281 25580 160 -57168 70920 10339 18629 -10773 -8931 419 -3463 -57116 -9097 70075 4235 -5202 -16384 1888 3181 -57065 48364 -9557 -14467 -11567 82 -658 10143 -57054 23616 24089 -10260 -2635 -14049 16922 -1108 -57035 -13272 -51127 25325 8497 7347 239 8906 -56898 8671 3790 24682 -2616 -2421 -8419 7638 -56836 41384 -42196 10187 -49 -86 6615 3349 -56707 -46483 -1512 43416 -5175 15275 -952 1096 -56699 63327 12721 9544 -11162 -9854 -2043 2081 -56669 1691 -28849 49336 8902 -2589 -1146 844 -56661 26651 7522 -20214 21037 2250 3280 -5550 -56585 16023 26471 -19345 -3024 -14972 14460 4436 -56508 8173 7419 28278 -13721 7842 5424 -4461 -56429 1078 6172 15597 -3005 -3344 -10881 13182 -56367 33791 -39814 1102 -438 -1009 4153 8893 -56356 9043 -6168 5309 8494 -15140 21733 -2358 -56230 55734 15103 459 -11551 -10777 -4505 7625 -56192 19058 9904 -29299 20648 1327 818 -6 -56039 580 9801 19193 -14110 6919 2962 1083 -56001 48754 -17536 25113 -33 -10945 2768 831 -55925 -46724 23551 -9696 -5972 1801 19465 3438 -55887 1450 -3786 -3776 8105 -16063 19271 3186 -55840 55236 18732 4055 -22656 -514 9338 -4474 -55570 -7013 12183 10108 -14499 5996 500 6627 -55532 41161 -15154 16028 -422 -11868 306 6375 -55494 4485 -20353 -13730 31777 236 5629 -1256 -55371 47643 21114 -5030 -23045 -1437 6876 1070 -55341 -13993 -20456 34762 -2981 5828 7773 -167 -55177 -3978 -4384 154 9173 22295 -13142 2185 -55101 -14606 14565 1023 -14888 5073 -1962 12171 -55063 33568 -12772 6943 -811 -12791 -2156 11919 -55025 -3108 -17971 -22815 31388 -687 3167 4288 -54888 18835 36946 -23458 20275 -10455 -5491 3020 -54872 -21586 -18074 25677 -3370 4905 5311 5377 -54858 -42801 -4624 16334 40339 -3190 -4594 1783 -54735 357 36843 25034 -14483 -4863 -3347 4109 -54673 33070 -9143 10539 -11916 -2528 11687 -180 -54659 11855 4307 1196 31793 -10623 1782 -3774 -54594 25975 -10390 -2142 -1200 -13714 -4618 17463 -54574 6839 73111 3976 -37106 5568 3223 -1196 -54506 -6623 4204 49688 -2965 -5031 3926 -2685 -54498 18337 40575 -19862 9170 -192 8352 -9079 -54403 -29179 -15692 16592 -3759 3982 2849 10921 -54342 3392 20276 15080 9189 11436 -16989 -333 -54341 3534 -61678 2097 -1192 6317 17883 6632 -54228 -43912 34026 -13809 17327 6318 -486 2022 -54204 25477 -6761 1454 -12305 -3451 9225 5364 -54190 4262 6689 -7889 31404 -11546 -680 1770 -54029 10744 42957 -28947 8781 -1115 5890 -3535 -53975 18497 -39400 26108 -787 -3619 16498 -1430 -53838 40440 15517 25465 -11900 -13387 7840 -2698 -53811 28512 -23328 -8500 11367 12848 -4417 922 -53800 3764 10318 -4293 20299 -1283 13163 -10329 -53735 17884 -4379 -7631 -12694 -4374 6763 10908 -53721 -3331 9071 -16974 31015 -12469 -3142 7314 -53644 -11181 -9981 30649 20318 10345 -12178 -1583 -53530 -58485 3769 1760 28456 5227 4325 772 -53506 10904 -37018 17023 -1176 -4542 14036 4114 -53492 -10311 -23568 7680 42533 -12637 4131 520 -53465 -44365 -10928 -1578 -4537 2136 -2075 22009 -53369 32847 17899 16380 -12289 -14310 5378 2846 -53331 -3829 12700 -13378 19910 -2206 10701 -4785 -53266 10291 -1997 -16716 -13083 -5297 4301 16452 -53113 13939 -53585 7069 22496 11757 394 -328 -53037 3311 -34636 7938 -1565 -5465 11574 9658 -52976 35882 1332 6426 11383 1989 -8264 -1596 -52900 25254 20281 7295 -12678 -15233 2916 8390 -52862 -11422 15082 -22463 19521 -3129 8239 759 -52797 2698 385 -25801 -13472 -6220 1839 21996 -52709 -29900 14979 26029 -15237 2463 10383 1848 -52671 18274 -12358 31949 -1160 -15401 10189 1596 -52647 2813 -31007 11534 -12670 4798 25417 -2441 -52644 6346 -51203 -2016 22107 10834 -2068 5216 -52568 -4282 -32254 -1147 -1954 -6388 9112 15202 -52507 28289 3714 -2659 10994 1066 -10726 3948 -52483 12828 -14935 -23074 -516 21265 4502 -89 -52202 10681 -9976 22864 -1549 -16324 7727 7140 -52179 -4922 53329 15432 -2678 8994 -11917 -3862 -52178 -4780 -28625 2449 -13059 3875 22955 3103 -52164 -25995 -15175 -6894 30650 -4220 13050 -491 -52125 2831 -29028 70487 -12246 6490 -1309 -1757 -52117 27791 7343 937 -111 11329 3117 -8151 -52027 -4052 39742 -7537 19537 -13988 4392 -1759 -51809 13716 -26543 12910 22123 -25 -5915 2698 -51710 -12515 55711 6347 -3067 8071 -14379 1682 -51648 20198 9725 -8148 -500 10406 655 -2607 -51596 -59819 69461 -22542 5071 2953 2124 4037 -51558 -11645 42124 -16622 19148 -14911 1930 3785 -51534 -27106 23475 -37037 7638 5288 17158 -252 -51495 1720 9622 40344 -35258 15998 2799 -1518 -51343 2590 -3965 17375 -13043 -6984 19108 585 -51340 6123 -24161 3825 21734 -948 -8377 8242 -51282 35161 32003 15863 -95 470 -730 -10669 -51179 12605 12107 -17233 -889 9483 -1807 2937 -51111 -857 -56800 28479 33252 -1116 -1104 1448 -50950 5625 -20532 7421 10629 9315 5466 -3857 -50874 -5003 -1583 8290 -13432 -7907 16646 6129 -50871 -1470 -21779 -5260 21345 -1871 -10839 13786 -50813 27568 34385 6778 -484 -453 -3192 -5125 -50710 5012 14489 -26318 -1278 8560 -4269 8481 -50481 -1968 -18150 -1664 10240 8392 3004 1687 -50344 19975 36767 -2307 -873 -1376 -5654 419 -50282 52688 -9219 -16802 1694 959 9380 -3870 -50123 -11965 -32243 91897 -1490 -6383 -2807 19 -50115 12995 4128 22347 10645 -1544 1619 -6375 -50012 -9561 -15768 -10749 9851 7469 542 7231 -49927 92399 -20587 3002 -6833 5154 -9585 -681 -49875 12382 39149 -11392 -1262 -2299 -8116 5963 -49813 45095 -6837 -25887 1305 36 6918 1674 -49783 -16541 -48407 13905 21369 7301 7815 437 -49646 5402 6510 13262 10256 -2467 -843 -831 -49622 -10059 -12139 -7153 -1254 17732 14385 -4868 -49543 -17154 -13386 -19834 9462 6546 -1920 12775 -49447 60058 15441 -1876 1710 -9900 5533 -6388 -49344 37502 -4455 -34972 916 -887 4456 7218 -49314 -24134 -46025 4820 20980 6378 5353 5981 -49229 77826 -50844 18571 4296 4063 -4774 -1931 -49215 -50365 36229 -1743 -4210 14474 -3111 4965 -49177 -2191 8892 4177 9867 -3390 -3305 4713 -49153 -17652 -9757 -16238 -1643 16809 11923 676 -49016 4291 45160 -16881 -12756 7041 3265 -592 -48978 52465 17823 -10961 1321 -10823 3071 -844 -48948 -9171 -23747 28831 21385 -3558 3968 -2081 -48845 -31727 -43643 -4265 20591 5455 2891 11525 -48787 -2689 12521 7773 -1238 6873 10538 -7386 -48722 11431 -2176 4435 -34231 3782 4138 13851 -48708 -9784 11274 -4908 9478 -4313 -5767 10257 -48650 19254 67438 7130 -12351 -2895 1880 -8654 -48569 15079 -53764 28220 1348 20836 231 -2929 -48547 -3302 47542 -25966 -13145 6118 803 4952 -48517 -64938 5972 13826 6919 13383 1700 3715 -48509 44872 20205 -20046 932 -11746 609 4700 -48479 -16764 -21365 19746 20996 -4481 1506 3463 -48342 5179 33552 19103 9883 -14249 -7152 2195 -48318 -10282 14903 -1312 -1627 5950 8076 -1842 -48253 3838 206 -4650 -34620 2859 1676 19395 -48181 11661 69820 -1955 -12740 -3818 -582 -3110 -48113 -1801 913 43757 21401 -14417 121 -4599 -48100 7486 -51382 19135 959 19913 -2231 2615 -48048 -72531 8354 4741 6530 12460 -762 9259 -48010 -24357 -18983 10661 20607 -5404 -956 9007 -47963 29429 3535 18492 -10154 10145 -10889 1347 -47849 -17875 17285 -10397 -2016 5027 5614 3702 -47811 30299 -10052 -4477 12061 -12837 5420 3450 -47712 4068 72202 -11040 -13129 -4741 -3044 2434 -47682 -57568 30632 28752 6935 2524 -2147 1197 -47644 -9394 3295 34672 21012 -15340 -2341 945 -47631 -107 -49000 10050 570 18990 -4693 8159 -47541 -31950 -16601 1576 20218 -6327 -3418 14551 -47494 21836 5917 9407 -10543 9222 -13351 6891 -47483 -2912 39563 13614 -1611 -4909 4229 -4360 -47380 -25468 19667 -19482 -2405 4104 3152 9246 -47318 7245 -26319 -33977 162 6439 18186 4957 -47295 76492 14848 -5731 -19089 1789 -6975 1334 -47265 14856 -26722 34061 975 9054 -6078 97 -47151 -32448 -12972 5172 9113 3936 10425 2452 -47104 21338 9546 13003 -21648 19485 492 -5208 -47066 69512 -17791 18923 -7571 1621 298 -5460 -47025 14243 8299 322 -10932 8299 -15813 12435 -47014 -10505 41945 4529 -2000 -5832 1767 1184 -46952 22208 -4041 -9966 567 -3497 16801 -3105 -46938 993 9409 -19309 44276 -11592 6896 -6699 -46796 7263 -24340 24976 586 8131 -8540 5641 -46682 -40041 -10590 -3913 8724 3013 7963 7996 -46635 13745 11928 3918 -22037 18562 -1970 336 -46597 61919 -15409 9838 -7960 698 -2164 84 -46567 283 -56979 49630 12104 7963 -1267 -1153 -46545 -18098 44327 -4556 -2389 -6755 -695 6728 -46515 -79734 2757 35236 17675 510 202 5491 -46483 14615 -1659 -19051 178 -4420 14339 2439 -46430 22226 -2062 48987 991 -1805 -9925 -2421 -46354 -73252 39025 14178 -4948 10941 6772 186 -46330 -3863 -1762 29441 -34580 1172 16483 3528 -46327 -330 -21958 15891 197 7208 -11002 11185 -46316 -25078 11688 20098 9129 -6923 6578 -66 -46254 7635 -34298 5603 11696 -4588 21612 -4355 -46213 -47634 -8208 -12998 8335 2090 5501 13540 -46166 6152 14310 -5167 -22426 17639 -4432 5880 -46128 54326 -13027 753 -8349 -225 -4626 5628 -46117 29578 20619 4960 583 -14356 12954 -5623 -46090 17650 -18226 -29005 23850 11879 697 -2003 -46014 7022 723 -28136 -211 -5343 11877 7983 -45937 -828 -18329 19487 -10908 17471 2841 -914 -45899 47346 -45666 25407 3169 -393 2647 -1166 -45823 -48132 -4579 -9402 -2770 12353 19344 1441 -45800 21115 36588 18844 -22021 7703 -5817 -2182 -45785 42 -31916 -3482 11307 -5511 19150 1189 -45762 69289 9251 24764 -7944 -10161 -6011 -2434 -45724 32613 4052 -4994 24255 1943 -688 -10065 -45659 46733 -10645 -8332 -8738 -1148 -7088 11172 -45648 21985 23001 -4125 194 -15279 10492 -79 -45571 14135 3949 43498 -10503 7535 1456 -8976 -45545 -571 3105 -37221 -600 -6266 9415 13527 -45468 -8421 -15947 10402 -11297 16548 379 4630 -45430 39753 -43284 16322 2780 -1316 185 4378 -45331 13522 38970 9759 -22410 6780 -8279 3362 -45316 -7551 -29534 -12567 10918 -6434 16688 6733 -45255 25020 6434 -14079 23866 1020 -3150 -4521 -45179 14392 25383 -13210 -195 -16202 8030 5465 -45155 -1069 6734 -33625 -11705 3997 23258 1428 -45102 6542 6331 34413 -10892 6612 -1006 -3432 -44999 -16014 -13565 1317 -11686 15625 -2083 10174 -44961 32160 -40902 7237 2391 -2239 -2277 9922 -44903 61198 15262 19275 -19438 -821 5370 -8989 -44786 17427 8816 -23164 23477 97 -5612 1023 -44633 -1051 8713 25328 -11281 5689 -3468 2112 -44595 47123 -18624 31248 2796 -12175 -3662 1860 -44519 -48355 22463 -3561 -3143 571 13035 4467 -44492 24567 -38520 -1848 2002 -3162 -4739 15466 -44434 53605 17644 10190 -19827 -1744 2908 -3445 -44404 -8031 -23926 49982 237 5521 3805 -4682 -44164 -8644 11095 16243 -11670 4766 -5930 7656 -44126 -45320 5896 -13515 20529 16870 -607 25 -44126 39530 -16242 22163 2407 -13098 -6124 7404 -44102 24069 -34891 1748 -9103 7101 9104 3367 -44091 -679 -1245 5955 -171 -7030 26684 -7884 -44088 2854 -21441 -7595 34606 -994 -801 -227 -44050 -55948 24845 -12646 -3532 -352 10573 10011 -43965 46012 20026 1105 -20216 -2667 446 2099 -43935 -15624 -21544 40897 -152 4598 1343 862 -43927 9336 14827 -28653 11983 9437 5769 -5532 -43851 -1292 33776 -27784 -12078 -7785 16949 4454 -43774 -9142 14724 19839 -22775 15029 7913 -4443 -43736 39032 -12613 25759 -8698 -2835 7719 -4695 -43622 -8272 1137 -3130 -560 -7953 24222 -2340 -43619 -4739 -19059 -16680 34217 -1917 -3263 5317 -43569 -661 734 64908 253 -5338 -42 -7200 -43496 38419 22408 -7980 -20605 -3590 -2016 7643 -43466 -23217 -19162 31812 -541 3675 -1119 6406 -43458 1743 17209 -37738 11594 8514 3307 12 -43390 -11719 -51698 7974 45735 -2085 4010 -1477 -43267 31439 -10231 16674 -9087 -3758 5257 849 -43168 5208 72023 10111 -34277 4338 -3207 -167 -43164 8883 -30127 -16422 -9881 5255 4180 14455 -43153 -15865 3519 -12215 -949 -8876 21760 3204 -43100 -8254 3116 55823 -136 -6261 -2504 -1656 -43092 16706 39487 -13727 11999 -1422 1922 -8050 -42997 -30810 -16780 22727 -930 2752 -3581 11950 -42939 -1772 39384 34765 -22759 4170 4066 -6961 -42935 1903 -62766 8232 1637 5087 11453 7661 -42921 -19312 -49316 -1111 45346 -3008 1548 4067 -42798 23846 -7849 7589 -9476 -4681 2795 6393 -42784 2631 5601 -1754 34233 -12776 -7110 2799 -42699 -2385 74405 1026 -34666 3415 -5669 5377 -42695 1290 -27745 -25507 -10270 4332 1718 19999 -42623 9113 41869 -22812 11610 -2345 -540 -2506 -42607 -31308 -13151 26323 -12035 13015 10262 -149 -42569 16866 -40488 32243 2042 -4849 10068 -401 -42470 -9365 41766 25680 -23148 3247 1604 -1417 -42466 -5690 -60384 -853 1248 4164 8991 13205 -42432 38809 14429 31600 -9071 -14617 1410 -1669 -42405 26881 -24416 -2365 14196 11618 -10847 1951 -42394 2133 9230 1842 23128 -2513 6733 -9300 -42329 16253 -5467 -1496 -9865 -5604 333 11937 -42291 -20423 -10666 -31254 22334 6500 5656 4306 -42206 81537 -15485 -17503 5650 4185 -4471 -3606 -42154 1520 44251 -31897 11221 -3268 -3002 3038 -42124 -60116 2681 7895 31285 3997 -2105 1801 -42100 9273 -38106 23158 1653 -5772 7606 5143 -42086 -11942 -24656 13815 45362 -13867 -2299 1549 -41963 31216 16811 22515 -9460 -15540 -1052 3875 -41939 15755 -1838 2100 -20970 4659 14176 -162 -41925 -5460 11612 -7243 22739 -3436 4271 -3756 -41901 63929 -29175 8020 -6893 -13205 13982 -414 -41860 8660 -3085 -10581 -10254 -6527 -2129 17481 -41822 -28016 -8284 -40339 21945 5577 3194 9850 -41737 73944 -13103 -26588 5261 3262 -6933 1938 -41707 12308 -54673 13204 25325 10527 -6036 701 -41655 -67709 5063 -1190 30896 3074 -4567 7345 -41631 1680 -35724 14073 1264 -6695 5144 10687 -41573 30718 20440 26111 -20565 -5277 12791 -8224 -41546 18790 -18405 -7854 2702 20958 534 -4604 -41494 -61227 41331 -22248 8273 13505 2003 2040 -41494 23623 19193 13430 -9849 -16463 -3514 9419 -41470 8162 544 -6985 -21359 3736 11714 5382 -41456 -13053 13994 -16328 22350 -4359 1809 1788 -41303 -31531 13891 32164 -12408 1233 3953 2877 -41241 1182 -32095 17669 -9841 3568 18987 -1412 -41238 4715 -52291 4119 24936 9604 -8498 6245 -41104 23125 22822 17026 -20954 -6200 10329 -2680 -41101 26658 2626 3476 13823 -164 -17156 4977 -41090 1910 36272 7683 22755 -14295 424 -6274 -41077 11197 -16023 -16939 2313 20035 -1928 940 -41001 569 2926 -16070 -21748 2813 9252 10926 -40987 -20646 16376 -25413 21961 -5282 -653 7332 -40834 -39124 16273 23079 -12797 310 1491 8421 -40796 -75800 11074 -6679 19402 12414 6814 790 -40772 -6411 -29713 8584 -10230 2645 16525 4132 -40758 -27626 -16263 -759 33479 -5450 6620 538 -40719 1200 -30116 76622 -9417 5260 -7739 -728 -40711 26160 6255 7072 2718 10099 -3313 -7122 -40693 -13506 -30960 -4097 486 -8541 220 21775 -40635 15532 25204 7941 -21343 -7123 7867 2864 -40621 -5683 38654 -1402 22366 -15218 -2038 -730 -40608 3604 -13641 -26024 1924 19112 -4390 6484 -40468 -24161 38551 47090 -12392 -9626 106 359 -40460 799 74922 -22460 -257 -4787 4532 -6035 -40403 12085 -27631 19045 24952 -1255 -12345 3727 -40379 -3376 -46280 -1370 13442 18944 2883 -310 -40365 -46717 18655 13994 -13186 -613 -971 13965 -40303 -14004 -27331 -501 -10619 1722 14063 9676 -40242 18567 8637 -2013 2329 9176 -5775 -1578 -40166 7939 27586 -1144 -21732 -8046 5405 8408 -40128 -28737 22387 -30902 10467 4058 10728 777 -40089 89 8534 46479 -32429 14768 -3631 -489 -39991 -6794 77304 -31545 -646 -5710 2070 -491 -39937 959 -5053 23510 -10214 -8214 12678 1614 -39934 4492 -25249 9960 24563 -2178 -14807 9271 -39773 10974 11019 -11098 1940 8253 -8237 3966 -39544 3994 -21620 13556 13458 8085 -964 -2828 -39492 -76023 38116 -838 19029 632 505 3816 -39468 -6634 -2671 14425 -10603 -9137 10216 7158 -39407 25937 33297 12913 2345 -1683 -9622 -4096 -39307 -152 33597 -6633 -33226 1294 16786 1853 -39304 3381 13401 -20183 1551 7330 -10699 9510 -39231 11346 1061 -30471 13050 -4466 21915 -6030 -39113 -51773 8099 -1449 -1008 25026 -3232 2968 -39078 -7132 958 18021 -21708 1126 24059 -4941 -39075 -3599 -19238 4471 13069 7162 -3426 2716 -39025 479 555 86059 -20895 3741 -205 -9801 -38999 -14227 -289 5340 -10992 -10060 7754 12702 -38961 -50903 -5488 -24418 21207 2044 13077 5071 -38938 18344 35679 3828 1956 -2606 -12084 1448 -38876 51057 -10307 -10667 4523 -271 2950 -2841 -38762 3753 3443 -39556 12661 -5389 19453 -486 -38709 11364 3040 28482 13474 -2774 -4811 -5346 -38609 -14725 3340 8936 -22097 203 21597 603 -38606 -11192 -16856 -4614 12680 6239 -5888 8260 -38556 -7114 2937 76974 -21284 2818 -2667 -4257 -38548 17846 39308 7424 -9149 7657 1759 -10651 -38521 90768 -21675 9137 -4004 3924 -16015 348 -38469 10751 38061 -5257 1567 -3529 -14546 6992 -38407 43464 -7925 -19752 4134 -1194 488 2703 -38377 -18172 -49495 20040 24198 6071 1385 1466 -38240 3771 5422 19397 13085 -3697 -7273 198 -38216 -11690 -13227 -1018 1575 16502 7955 -3839 -38140 -22318 5722 -149 -22486 -720 19135 6147 -38079 10253 41690 -1661 -9538 6734 -703 -5107 -38052 83175 -19293 52 -4393 3001 -18477 5892 -38041 58427 14353 4259 4539 -11130 -897 -5359 -37938 35871 -5543 -28837 3745 -2117 -1974 8247 -37861 28021 -24595 18786 -6952 20697 -11010 -650 -37771 -3822 7804 10312 12696 -4620 -9735 5742 -37747 -19283 -10845 -10103 1186 15579 5493 1705 -37709 28891 -38182 -4183 15263 -2285 5299 1453 -37610 2660 44072 -10746 -9927 5811 -3165 437 -37586 72049 3285 4517 -39559 -3958 6546 3779 -37572 50834 16735 -4826 4150 -12053 -3359 185 -37542 -10802 -24835 34966 24214 -4788 -2462 -1052 -37392 20428 -22213 9701 -7341 19774 -13472 4894 -37389 -29280 -24938 83458 -10544 804 -318 37 -37381 -4320 11433 13908 1591 5643 4108 -6357 -37302 -11415 10186 1227 12307 -5543 -12197 11286 -37278 -26876 -8463 -19188 797 14656 3031 7249 -37244 17623 66350 13265 -9522 -4125 -4550 -7625 -37163 13448 -54852 34355 4177 19606 -6199 -1900 -37141 -4933 46454 -19831 -10316 4888 -5627 5981 -37111 -66569 4884 19961 9748 12153 -4730 4744 -37103 43241 19117 -13911 3761 -12976 -5821 5729 -37079 27780 468 -34326 -7749 7223 9407 1692 -37049 -33856 -41102 5466 12315 14488 10304 455 -36923 12835 -19831 616 -7730 18851 -15934 10438 -36912 -11913 13815 4823 1202 4720 1646 -813 -36847 2207 -882 1485 -31791 1629 -4754 20424 -36798 -59217 27565 -24066 9340 -398 18149 1542 -36775 10030 68732 4180 -9911 -5048 -7012 -2081 -36694 5855 -52470 25270 3788 18683 -8661 3644 -36634 35648 21499 -22996 3372 -13899 -8283 11273 -36557 27798 2447 24627 -7325 8915 -17319 2376 -36443 -19506 16197 -4262 813 3797 -816 4731 -36405 28668 -11140 1658 14890 -14067 -1010 4479 -36381 13207 -29789 -18757 3380 6132 14218 442 -36367 -8008 -16339 -28100 47089 -1963 4313 -3152 -36306 2437 71114 -4905 -10300 -5971 -9474 3463 -36244 35150 25128 -19400 -7733 -3636 5560 -826 -36225 -1738 -50088 16185 3399 17760 -11123 9188 -36214 -26486 -16442 20392 12331 3629 6457 -2063 -36167 27300 6076 28223 -18430 19178 -3476 -9723 -36077 -4543 38475 19749 1218 -6139 -2201 -3331 -35974 -27099 18579 -13347 424 2874 -3278 10275 -35916 1939 74743 -1309 -21405 4292 4369 -8636 -35912 5614 -27407 -27842 2991 5209 11756 5986 -35898 -15601 -13957 -37185 46700 -2886 1851 2392 -35889 74861 13760 404 -16260 559 -13405 2363 -35859 13225 -27810 40196 3804 7824 -12508 1126 -35775 27557 27510 -28485 -8122 -4559 3098 4718 -35745 -34079 -14060 11307 11942 2706 3995 3481 -35698 19707 8458 19138 -18819 18255 -5938 -4179 -35683 -1366 -60046 -3188 14509 5041 19029 -808 -35660 67881 -18879 25058 -4742 391 -6132 -4431 -35608 -12136 40857 10664 829 -7062 -4663 2213 -35578 -73772 -713 50456 20893 203 -3766 976 -35546 20577 -5129 -3831 3396 -4727 10371 -2076 -35532 -638 8321 -13174 47105 -12822 466 -5670 -35443 -1979 -25025 -36927 2602 4286 9294 11530 -35390 5632 -25428 31111 3415 6901 -14970 6670 -35379 -19116 8218 35318 12347 -7230 2610 -4581 -35276 -41672 -11678 2222 11553 1783 1533 9025 -35229 12114 10840 10053 -19208 17332 -8400 1365 -35191 60288 -16497 15973 -5131 -532 -8594 1113 -35161 -1348 -58067 55765 14933 6733 -7697 -124 -35077 12984 -2747 -12916 3007 -5650 7909 3468 -35000 5134 -21799 34707 -7690 17164 -1127 -5429 -34948 -74883 37937 20313 -2119 9711 342 1215 -34921 -1961 -23046 22026 3026 5978 -17432 12214 -34910 -26709 10600 26233 11958 -8153 148 963 -34886 -42170 -8049 5818 448 12046 15376 -3074 -34807 -49265 -9296 -6863 11164 860 -929 14569 -34760 4521 13222 968 -19597 16409 -10862 6909 -34749 -20227 46868 5175 -10665 2278 6718 -4342 -34722 52695 -14115 6888 -5520 -1455 -11056 6657 -34711 27947 19531 11095 3412 -15586 6524 -4594 -34684 16019 -19314 -22870 26679 10649 -5733 -974 -34608 5391 -365 -22001 2618 -6573 5447 9012 -34531 -2459 -19417 25622 -8079 16241 -3589 115 -34493 45715 -46754 31542 5998 -1623 -3783 -137 -34479 -82476 40319 11228 -2508 8788 -2120 6759 -34417 -49763 -5667 -3267 59 11123 12914 2470 -34379 -1589 -33004 2653 14136 -6741 12720 2218 -34318 30982 2964 1141 27084 713 -7118 -9036 -34280 -27820 49250 -3910 -11054 1355 4256 1202 -34253 45102 -11733 -2197 -5909 -2378 -13518 12201 -34250 -89456 7680 35882 9010 8620 5153 -35 -34242 20354 21913 2010 3023 -16509 4062 950 -34165 12504 2861 49633 -7674 6305 -4974 -7947 -34139 -2202 2017 -31086 2229 -7496 2985 14556 -34062 -10052 -17035 16537 -8468 15318 -6051 5659 -34051 -34800 16611 20744 464 1187 11529 -5592 -34024 38122 -44372 22457 5609 -2546 -6245 5407 -34000 22661 -63021 2042 -5901 17653 8983 1370 -33948 -57356 -3285 -12352 -330 10200 10452 8014 -33925 11891 37882 15894 -19581 5550 -14709 4391 -33910 -9182 -30622 -6432 13747 -7664 10258 7762 -33849 23389 5346 -7944 26695 -210 -9580 -3492 -33833 -17032 -49674 41191 3050 15150 1222 -1135 -33825 92778 -35441 7319 -2937 -9979 131 -150 -33773 12761 24295 -7075 2634 -17432 1600 6494 -33749 -2700 5646 -27490 -8876 2767 16828 2457 -33696 4911 5243 40548 -8063 5382 -7436 -2403 -33658 -31765 44 10790 24136 17486 -2113 -10034 -33582 -42393 18993 11659 75 264 9067 -48 -33555 30529 -41990 13372 5220 -3469 -8707 10951 -33544 5781 -8344 17579 14152 -17600 8873 -300 -33520 -9680 -26993 -2836 2642 2599 24101 -4337 -33497 59567 14174 25410 -16609 -2051 -1060 -7960 -33479 -64949 -903 -21437 -719 9277 7990 13558 -33383 12263 27924 -3479 -8471 -7169 15443 -5605 -33380 15796 7728 -17029 26306 -1133 -12042 2052 -33304 5168 26677 -16160 2245 -18355 -862 12038 -33227 -2682 7625 31463 -8452 4459 -9898 3141 -33189 -39358 2426 1705 23747 16563 -4575 -4490 -33165 30031 -38361 16968 -5885 6794 5136 -1148 -33113 -49986 21375 2574 -314 -659 6605 5496 -33075 -1812 -5962 8494 13763 -18523 6411 5244 -33066 3800 43893 10405 -31075 14890 -3328 -2164 -33051 -17273 -24611 -11921 2253 1676 21639 1207 -33028 51974 16556 16325 -16998 -2974 -3522 -2416 -32998 -9662 -25014 56117 3066 4291 -2625 -3653 -32990 15298 11357 -13433 15201 9130 1801 -10047 -32976 -28043 76292 1931 -11427 -10427 -2053 4228 -32914 4670 30306 -12564 -8860 -8092 12981 -61 -32911 8203 10110 -26114 25917 -2056 -14504 7596 -32837 -3180 11254 35059 -19557 14722 3945 -8958 -32758 -10275 10007 22378 -8841 3536 -12360 8685 -32696 22438 -35979 7883 -6274 5871 2674 4396 -32685 -2310 -2333 12090 2658 -8260 20254 -6855 -32682 1223 -22529 -1460 37435 -2224 -7231 802 -32606 -9405 -3580 -591 13374 -19446 3949 10788 -32597 -3793 46275 1320 -31464 13967 -5790 3380 -32582 -24866 -22229 -21006 1864 753 19177 6751 -32559 44381 18938 7240 -17387 -3897 -5984 3128 -32535 28920 289 -13175 -28897 16302 9244 -909 -32521 7705 13739 -22518 14812 8207 -661 -4503 -32445 -2923 32688 -21649 -9249 -9015 10519 5483 -32368 -10773 13636 25974 -19946 13799 1483 -3414 -32353 -31846 -54868 3648 13382 585 26450 -43 -32330 37401 -13701 31894 -5869 -4065 1289 -3666 -32227 14845 -33597 -1202 -6663 4948 212 9940 -32216 -9903 49 3005 2269 -9183 17792 -1311 -32163 -2292 -354 71043 3082 -6568 -6472 -6171 -32137 -16998 -1198 -9676 12985 -20369 1487 16332 -32090 36788 21320 -1845 -17776 -4820 -8446 8672 -32079 12040 54966 2362 -8844 -18951 9134 -2579 -32052 112 16121 -31603 14423 7284 -3123 1041 -32028 69501 -24666 -16340 -15209 -2485 6588 4383 -31984 -13350 -52786 14109 48564 -3315 -2420 -448 -31899 -18366 16018 16889 -20335 12876 -979 2130 -31861 29808 -11319 22809 -6258 -4988 -1173 1878 -31831 -31828 -52889 62601 13806 2277 -276 641 -31799 62521 -57305 8314 -3691 -2653 13861 -2411 -31762 3577 70935 16246 -31448 3108 -9637 862 -31758 7252 -31215 -10287 -7052 4025 -2250 15484 -31747 -17496 2431 -6080 1880 -10106 15330 4233 -31700 36290 24949 1751 -28881 5443 5397 -3427 -31694 -9885 2028 61958 2693 -7491 -8934 -627 -31686 15075 38399 -7592 14828 -2652 -4508 -7021 -31556 -72650 -2871 12654 -679 7590 22797 -2309 -31533 -3403 38296 40900 -19930 2940 -2364 -5932 -31529 272 -63854 14367 4466 3857 5023 8690 -31430 -25959 18400 7804 -20724 11953 -3441 7674 -31392 -62635 13201 -21954 11475 24057 1882 43 -31392 22215 -8937 13724 -6647 -5911 -3635 7422 -31354 -14461 -14136 -16034 25552 6193 1688 -209 -31330 54928 -54923 -771 -4080 -3576 11399 3133 -31289 -341 -28833 -19372 -7441 3102 -4712 21028 -31278 -25089 4813 -15165 1491 -11029 12868 9777 -31231 28697 27331 -7334 -29270 4520 2935 2117 -31217 7482 40781 -16677 14439 -3575 -6970 -1477 -31201 -32939 -14239 32458 -9206 11785 3832 880 -31163 15235 -41576 38378 4871 -6079 3638 628 -31087 -80243 -489 3569 -1068 6667 20335 3235 -31064 -10996 40678 31815 -20319 2017 -4826 -388 -31026 -47672 35479 2057 11880 14121 497 -8019 -31026 37178 13341 37735 -6242 -15847 -5020 -640 -30999 25250 -25504 3770 17025 10388 -17277 2980 -30988 502 8142 7977 25957 -3743 303 -8271 -30923 14622 -6555 4639 -7036 -6834 -6097 12966 -30912 -10126 27091 8846 1896 -20965 11483 1715 -30885 -22054 -11754 -25119 25163 5270 -774 5335 -30748 -111 43163 -25762 14050 -4498 -9432 4067 -30732 -40532 -11857 23373 -9595 10862 1370 6424 -30694 7642 -39194 29293 4482 -7002 1176 6172 -30686 32602 -2823 -40257 16617 -2163 5602 -222 -30591 -14914 -59090 -3803 3688 2011 99 19778 -30557 -55265 37861 -7028 11491 13198 -1965 -2475 -30557 29585 15723 28650 -6631 -16770 -7482 4904 -30533 14124 -2926 8235 -18141 3429 7746 867 -30519 -7091 10524 -1108 25568 -4666 -2159 -2727 -30495 62298 -30263 14155 -4064 -14435 7552 615 -30454 7029 -4173 -4446 -7425 -7757 -8559 18510 -30443 -17719 29473 -239 1507 -21888 9021 7259 -30416 -29647 -9372 -34204 24774 4347 -3236 10879 -30366 -25569 10421 47384 -9190 926 -15 -1638 -30358 -609 46792 -22166 2945 5765 4411 -8032 -30320 47565 19455 -16246 17022 -12099 4217 -8284 -30263 -48125 -9475 14288 -9984 9939 -1092 11968 -30225 49 -36812 20208 4093 -7925 -1286 11716 -30167 29087 19352 32246 -17736 -6507 6361 -7195 -30140 17159 -19493 -1719 5531 19728 -5896 -3575 -30088 -62858 40243 -16113 11102 12275 -4427 3069 -30064 6531 -544 -850 -18530 2506 5284 6411 -30050 -14684 12906 -10193 25179 -5589 -4621 2817 -30026 -30145 -5743 -30608 13669 14610 10607 -1220 -29889 -8202 49174 -31251 2556 4842 1949 -2488 -29865 61187 8387 -15988 -27076 -4927 11660 854 -29859 -69838 7604 8541 22620 12107 2846 -3725 -29851 39972 21837 -25331 16633 -13022 1755 -2740 -29835 -449 -33183 23804 -7012 2338 12557 -383 -29698 21494 21734 23161 -18125 -7430 3899 -1651 -29671 9566 -17111 -10804 5142 18805 -8358 1969 -29660 -15182 16535 -6597 14074 4674 9222 -9282 -29595 -1062 1838 -9935 -18919 1583 2822 11955 -29523 6761 71452 -7240 2961 -5094 564 -10550 -29420 -15795 51556 -40336 2167 3919 -513 3056 -29390 -77431 9986 -544 22231 11184 384 1819 -29366 -8042 -30801 14719 -7401 1415 10095 5161 -29352 -29257 -17351 5376 36308 -6680 190 1567 -29313 -431 -31204 82757 -6588 4030 -14169 301 -29305 24529 5167 13207 5547 8869 -9743 -6093 -29229 13901 24116 14076 -18514 -8353 1437 3893 -29215 -7314 37566 4733 25195 -16448 -8468 299 -29205 -1560 5467 -6339 -30024 11846 16665 -144 -29191 -22775 18917 -15682 13685 3751 6760 -3738 -29054 -832 73834 -16325 2572 -6017 -1898 -5006 -29024 -62468 32264 23467 22636 1248 -1001 -6243 -28986 -14294 4927 29387 36713 -16616 -1195 -6495 -28973 -5007 -47368 4765 16271 17714 -3547 719 -28921 -85024 12368 -9629 21842 10261 -2078 7363 -28897 -15635 -28419 5634 -7790 492 7633 10705 -28836 16936 7549 4122 5158 7946 -12205 -549 -28760 6308 26498 4991 -18903 -9276 -1025 9437 -28722 -30368 21299 -24767 13296 2828 4298 1806 -28585 -8425 76216 -25410 2183 -6940 -4360 538 -28569 -48846 21196 23725 -21462 8420 6442 2895 -28555 -70061 34646 14382 22247 325 -3463 -699 -28531 -672 -6141 29645 -7385 -9444 6248 2643 -28493 -37348 -11340 -113 24814 2660 11571 -4988 -28428 -23228 -26037 -3451 -8179 -431 5171 16249 -28370 5810 30127 8587 -30008 987 12818 -2662 -28367 9343 9931 -4963 4769 7023 -14667 4995 -28356 -15405 43577 -756 13701 -7108 2913 -6256 -28291 -1285 28880 -4094 -19292 -10199 -3487 14981 -28253 -37961 23681 -33852 12907 1905 1836 7350 -28168 63999 18862 -20101 -3777 -410 -8291 -562 -28138 2363 -22708 19691 16287 6855 -7394 -1799 -28062 -8265 -3759 20560 -7774 -10367 3786 8187 -28024 -44941 -8958 -9198 24425 1737 9109 556 -28015 45521 18759 28391 -38535 5182 -6147 527 -28001 24306 32209 19048 5174 -2913 -16052 -3067 -28000 24448 -49745 6065 -5207 -8032 18820 3898 -27977 8845 13560 -1367 -6336 17286 -824 -7104 -27959 -30821 -23655 -12536 -8568 -1354 2709 21793 -27925 -71172 73296 -15761 -765 9833 645 -460 -27901 -1783 32509 -498 -30397 64 10356 2882 -27898 1750 12313 -14048 4380 6100 -17129 10539 -27887 -22998 45959 -9841 13312 -8031 451 -712 -27863 46391 5172 5422 -16320 -17800 10162 2630 -27825 9715 -27 -24336 15879 -5696 15485 -5001 -27699 56406 21244 -29186 -4166 -1333 -10753 4982 -27696 6698 18519 44571 -7369 -20303 2401 125 -27672 -8763 -130 24156 -18879 -104 17629 -3912 -27669 -5230 -20326 10606 15898 5932 -9856 3745 -27619 -1152 -533 92194 -18066 2511 -6635 -8772 -27607 27483 -66312 -3889 18465 8267 5178 -544 -27593 -15858 -1377 11475 -8163 -11290 1324 13731 -27555 -52534 -6576 -18283 24036 814 6647 6100 -27546 37928 21141 19306 -38924 4259 -8609 6071 -27532 16713 34591 9963 4785 -3836 -18514 2477 -27531 16855 -47363 -3020 -5596 -8955 16358 9442 -27470 49426 -11395 -4532 7352 -1501 -3480 -1812 -27418 -30591 48341 -18926 12923 -8954 -2011 4832 -27356 2122 2355 -33421 15490 -6619 13023 543 -27303 9733 1952 34617 16303 -4004 -11241 -4317 -27227 -895 20901 35486 -7758 -21226 -61 5669 -27203 -16356 2252 15071 -19268 -1027 15167 1632 -27200 -12823 -17944 1521 15509 5009 -12318 9289 -27150 -8745 1849 83109 -18455 1588 -9097 -3228 -27142 16215 38220 13559 -6320 6427 -4671 -9622 -27001 41833 -9013 -13617 6963 -2424 -5942 3732 -26977 26372 -27662 -34032 -4547 17775 9286 -305 -26887 -5471 4737 -42506 15101 -7542 10561 6087 -26834 2140 4334 25532 15914 -4927 -13703 1227 -26810 -13321 -14315 5117 4404 15272 1525 -2810 -26734 -23949 4634 5986 -19657 -1950 12705 7176 -26696 -60625 -565 -23772 12542 10154 18028 -455 -26673 8622 40602 4474 -6709 5504 -7133 -4078 -26649 78011 -185 19737 -36341 -4265 2578 -736 -26559 -38682 54352 -24415 1429 386 9370 -1723 -26532 34240 -6631 -22702 6574 -3347 -8404 9276 -26455 26390 -25683 24921 -4123 19467 -17440 379 -26444 1642 7963 29128 4809 5336 140 -10872 -26368 -8986 26912 29997 -19252 -11886 11320 -886 -26365 -5453 6716 16447 15525 -5850 -16165 6771 -26341 -20914 -11933 -3968 4015 14349 -937 2734 -26330 -45662 21713 239 12947 218 16643 -8517 -26303 27260 -39270 1952 18092 -3515 -1131 2482 -26245 56298 16894 13990 -3737 -2097 6516 -16429 -26204 1029 42984 -4611 -7098 4581 -9595 1466 -26193 -23719 76630 -404 1834 -9550 7985 -9785 -26180 70418 2197 10652 -36730 -5188 116 4808 -26166 49203 15647 1309 6979 -13283 -9789 1214 -26090 -46275 56734 -33500 1040 -537 6908 3821 -26036 -38522 -25623 21555 -8528 -3041 17516 5926 -25989 15264 -3105 29386 -39289 12508 7583 -1734 -25975 -5951 10345 20043 4420 4413 -2322 -5328 -25899 -16579 29294 20912 -19641 -12809 8858 4658 -25872 -28507 -9551 -13053 3626 13426 -3399 8278 -25861 -53255 24095 -8846 12558 -705 14181 -2973 -25823 -5081 -3242 -2926 26635 -18569 13987 -3225 -25776 48705 19276 4905 -4126 -3020 4054 -10885 -25697 41610 18029 -7776 6590 -14206 -12251 6758 -25673 26149 -620 -28191 -4920 5993 2977 2721 -25643 -35487 -42190 11601 15144 13258 3874 1484 -25506 -13544 12727 10958 4031 3490 -4784 216 -25444 19169 -33259 -3537 6598 5825 10250 -4073 -25369 8399 67644 10315 -7082 -6278 -13442 -1052 -25354 -12674 -860 -12011 26246 -19492 11525 2319 -25315 -68698 7425 29692 1472 21186 2683 -6326 -25307 41112 21658 -4180 -4515 -3943 1592 -5341 -25204 18556 1762 -37276 -5309 5070 515 8265 -25174 -43080 -39808 2516 14755 12335 1412 7028 -25140 1419 35005 34969 4436 -6446 -6169 -7846 -25136 5094 -67145 8436 28832 -5529 1218 6776 -25037 -21137 15109 1873 3642 2567 -7246 5760 -24999 27037 -12228 7793 17719 -15297 -7440 5508 -24975 11576 -30877 -12622 6209 4902 7788 1471 -24961 -9639 -17427 -21965 49918 -3193 -2117 -2123 -24911 -5561 2366 59623 15954 -6614 1104 -14640 -24900 806 70026 1230 -7471 -7201 -15904 4492 -24861 -35728 -17127 -41511 14347 -216 24291 3826 -24846 -76291 9807 20607 1083 20263 221 -782 -24838 33519 24040 -13265 -4904 -4866 -870 203 -24808 -28117 -17530 26527 15160 2399 27 -1034 -24776 66232 -21946 -27760 -2337 -2531 14164 -4086 -24685 15041 23937 35227 -39662 726 1274 1292 -24671 -6174 37387 25884 4047 -7369 -8631 -2302 -24667 -2499 -64763 -649 28443 -6452 -1244 12320 -24647 -21635 18738 5469 -7463 12830 6597 -6339 -24641 -67810 -4183 65676 24111 -104 -7734 -3539 -24617 1579 -44970 80939 -5521 -9873 1977 -197 -24568 -28730 17491 -7212 3253 1644 -9708 11304 -24510 308 73655 4826 -18576 3062 -2061 -7607 -24506 3983 -28495 -21707 5820 3979 5326 7015 -24495 -20765 5151 -17500 14752 -10152 22906 -4236 -24492 -17232 -15045 -31050 49529 -4116 -4579 3421 -24480 -61328 32085 44618 1488 10327 -1164 -8844 -24442 -13154 4748 50538 15565 -7537 -1358 -9096 -24377 -83884 12189 11522 694 19340 -2241 4762 -24369 25926 26422 -22350 -5293 -5789 -3332 5747 -24339 -35710 -15148 17442 14771 1476 -2435 4510 -24307 58639 -19564 -36845 -2726 -3454 11702 1458 -24292 18076 7370 25273 -15990 17025 -12368 -3150 -24277 -2997 -61134 2947 17338 3811 12599 221 -24254 66250 -19967 31193 -1913 -839 -12562 -3402 -24216 7448 26319 26142 -40051 -197 -1188 6836 -24202 -13767 39769 16799 3658 -8292 -11093 3242 -24178 -29228 21120 -3616 -7852 11907 4135 -795 -24140 18946 -6217 2304 6225 -5957 3941 -1047 -24037 -3610 -26113 -30792 5431 3056 2864 12559 -24011 -68921 34467 35533 1099 9404 -3626 -3300 -24003 40889 48700 1661 -4888 -15725 -4717 -2315 -23973 -20747 7130 41453 15176 -8460 -3820 -3552 -23941 73602 2714 -12834 -2321 -13390 10317 -6604 -23900 18333 28804 -31435 -5682 -6712 -5794 11291 -23870 -43303 -12766 8357 14382 553 -4897 10054 -23823 10483 9752 16188 -16379 16102 -14830 2394 -23812 -14265 43398 20395 -7447 1971 2750 -8857 -23808 -10590 -58752 -6138 16949 2888 10137 5765 -23785 58657 -17585 22108 -2302 -1762 -15024 2142 -23774 33909 16061 26315 6630 -15893 2556 -9109 -23747 -145 28701 17057 -40440 -1120 -3650 12380 -23723 91370 -63571 7613 265 573 10 -2147 -23709 -36821 23502 -12701 -8241 10984 1673 4749 -23671 11353 -3835 -6781 5836 -6880 1479 4497 -23657 -9862 9615 -16124 49545 -14975 -8426 903 -23647 -4108 -22484 -27196 -5674 13319 16707 460 -23641 -50283 -45405 33011 25900 385 2376 3260 -23594 3503 -22887 40842 -4861 15934 -7557 -4400 -23568 -11203 -23731 -39877 5042 2133 402 18103 -23504 -28340 9512 32368 14787 -9383 -6282 1992 -23480 -43801 -9137 11953 3277 10816 8946 -2045 -23472 66009 5096 -21919 -2710 -14313 7855 -1060 -23466 -65016 4313 2610 46986 2721 -959 -5639 -23442 4373 -36474 17873 17354 -7048 8752 -2297 -23401 -50896 -10384 -728 13993 -370 -7359 15598 -23354 2890 12134 7103 -16768 15179 -17292 7938 -23343 -21858 45780 11310 -7836 1048 288 -3313 -23316 51064 -15203 13023 -2691 -2685 -17486 7686 -23313 -83494 4210 51102 12228 8313 1185 -4550 -23305 26316 18443 17230 6241 -16816 94 -3565 -23281 10855 -206 -3185 -5269 3383 15322 -7602 -23254 83777 -61189 -1472 -124 -350 -2452 3397 -23202 3760 -1453 -15866 5447 -7803 -983 10041 -23125 -4090 -20505 31757 -5250 15011 -10019 1144 -23114 -28838 13141 35964 3682 880 7561 -10107 -23087 44084 -47842 37677 8827 -2853 -10213 892 -23011 -51394 -6755 2868 2888 9893 6484 3499 -22997 -72609 6695 -6475 46597 1798 -3421 -95 -22973 -3220 -34092 8788 16965 -7971 6290 3247 -22912 29351 1876 7276 29913 -517 -13548 -8007 -22874 -29451 48162 2225 -8225 125 -2174 2231 -22836 18723 20825 8145 5852 -17739 -2368 1979 -22733 -3833 929 -24951 5058 -8726 -3445 15585 -22656 -11683 -18123 22672 -5639 14088 -12481 6688 -22645 -36431 15523 26879 3293 -43 5099 -4563 -22607 11743 -11814 32799 17370 -17907 4905 -4815 -22594 21030 -64109 8177 -3072 16423 2553 2399 -22542 -58987 -4373 -6217 2499 8970 4022 9043 -22504 -10813 -31710 -297 16576 -8894 3828 8791 -22446 18225 24454 11741 -5253 -7476 11475 -10120 -22443 21758 4258 -1809 29524 -1440 -16010 -2463 -22427 -18663 -50762 47326 5879 13920 -5208 -106 -22419 91147 -36529 13454 -108 -11209 -6299 879 -22367 11130 23207 -940 5463 -18662 -4830 7523 -22343 -4331 4558 -21355 -6047 1537 10398 3486 -22290 3280 4155 46683 -5234 4152 -13866 -1374 -22279 -21468 37801 50890 3698 -9979 3714 -12625 -22176 -44024 17905 17794 2904 -966 2637 981 -22138 4150 -9432 23714 16981 -18830 2443 729 -22125 13437 -61727 -908 -3461 15500 91 7943 -22114 -11311 -28081 3299 5471 1369 17671 -3308 -22073 -66580 -1991 -15302 2110 8047 1560 14587 -22053 21260 7887 1787 18419 8823 -2167 -14562 -22039 -22081 72822 17151 -8209 -10734 -6021 -287 -22035 -18406 -29328 -9382 16187 -9817 1366 14335 -21977 10632 26836 2656 -5642 -8399 9013 -4576 -21974 14165 6640 -10894 29135 -2363 -18472 3081 -21950 -1296 -12009 -31309 17625 17836 -3244 -956 -21789 90036 2121 -16689 -23120 -1701 -2191 1118 -21783 -40989 1338 7840 26576 15333 -11005 -3461 -21759 28400 -39449 23103 -3056 5564 -1294 -119 -21707 -51617 20287 8709 2515 -1889 175 6525 -21669 -3443 -7050 14629 16592 -19753 -19 6273 -21660 2169 42805 16540 -28246 13660 -9758 -1135 -21645 -18904 -25699 -5786 5082 446 15209 2236 -21622 50343 15468 22460 -14169 -4204 -9952 -1387 -21604 -74173 391 -24387 1721 7124 -902 20131 -21592 -11293 -26102 62252 5895 3061 -9055 -2624 -21584 13667 10269 -7298 18030 7900 -4629 -9018 -21508 3039 29218 -6429 -6031 -9322 6551 968 -21431 -4811 10166 41194 -16728 13492 -2485 -7929 -21290 20807 -37067 14018 -3445 4641 -3756 5425 -21276 -408 -23617 4675 40264 -3454 -13661 1831 -21238 -59210 22669 -376 2126 -2812 -2287 12069 -21200 -11036 -4668 5544 16203 -20676 -2481 11817 -21176 -26497 -23317 -14871 4693 -477 12747 7780 -21153 42750 17850 13375 -14558 -5127 -12414 4157 -21129 27289 -799 -7040 -26068 15072 2814 120 -21115 6074 12651 -16383 17641 6977 -7091 -3474 -21091 75463 -28136 -1120 -11991 -2792 2620 -132 -21039 -4554 31600 -15514 -6420 -10245 4089 6512 -20962 -12404 12548 32109 -17117 12569 -4947 -2385 -20924 -49080 7349 2351 15082 24673 376 -10016 -20924 35770 -14789 38029 -3040 -5295 -5141 -2637 -20821 13214 -34685 4933 -3834 3718 -6218 10969 -20810 -11534 -1039 9140 5098 -10413 11362 -282 -20707 -34090 -20935 -23956 4304 -1400 10285 13324 -20684 35157 20232 4290 -14947 -6050 -14876 9701 -20673 10409 53878 8497 -6015 -20181 2704 -1550 -20660 19696 1583 -16125 -26457 14149 352 5664 -20646 -1519 15033 -25468 17252 6054 -9553 2070 -20622 67870 -25754 -10205 -12380 -3715 158 5412 -20592 6234 -67324 29587 7684 3550 1055 4175 -20540 -73783 -7588 15193 13255 -3903 2524 10819 -20493 -19997 14930 23024 -17506 11646 -7409 3159 -20455 -56673 9731 -6734 14693 23750 -2086 -4472 -20455 28177 -12407 28944 -3429 -6218 -7603 2907 -20431 12716 -31056 8529 -14939 13981 7625 -1130 -20417 -8499 -17606 -814 28770 5886 -2280 -4724 -20393 60890 -58393 14449 -862 -3883 7431 -1382 -20367 -4421 2187 80774 -5194 2465 941 -17241 -20352 5621 -32303 -4152 -4223 2795 -8680 16513 -20341 -19127 1343 55 4709 -11336 8900 5262 -20294 34659 23861 7886 -26052 4213 -1033 -2398 -20280 13444 37311 -1457 17657 -3882 -10938 -5992 -20264 -26977 -17709 47678 -5988 11478 -136 -3635 -20256 82833 -3476 13806 -11975 -13651 -1227 -2650 -20215 27564 22614 -4795 -15336 -6973 -17338 15245 -20150 -74281 -3959 18789 2150 6360 16367 -1280 -20127 -5034 37208 47035 -17101 1710 -8794 -4903 -20123 -1359 -64942 20502 7295 2627 -1407 9719 -20051 6464 4672 23197 29175 -4050 -3665 -12786 -20024 -27590 17312 13939 -17895 10723 -9871 8703 -19986 -64266 12113 -15819 14304 22827 -4548 1072 -19986 20584 -10025 19859 -3818 -7141 -10065 8451 -19975 -4164 23621 24066 5114 -21272 7515 -2800 -19951 -19625 4972 3651 -6396 -1073 22743 -6837 -19948 -16092 -15224 -9899 28381 4963 -4742 820 -19924 53297 -56011 5364 -1251 -4806 4969 4162 -19890 12946 40940 2139 6552 6381 2905 -18091 -19883 -1972 -29921 -13237 -4612 1872 -11142 22057 -19872 -26720 3725 -9030 4320 -12259 6438 10806 -19825 27066 26243 -1199 -26441 3290 -3495 3146 -19811 5851 39693 -10542 17268 -4805 -13400 -448 -19787 75240 -1094 4721 -12364 -14574 -3689 2894 -19757 13604 -42664 44513 7700 -7309 -2792 1657 -19749 38564 -6293 -25037 19835 -2470 1634 -4737 -19733 -1857 -61313 24098 -3810 12890 12436 -2380 -19681 -81874 -1577 9704 1761 5437 13905 4264 -19658 -12627 39590 37950 -17490 787 -11256 641 -19628 -74263 -1980 77742 2574 8052 -10359 -596 -19620 -49303 34391 8192 14709 12891 -5933 -6990 -19596 20086 -6396 23455 -14923 3122 3778 -3648 -19582 -1129 7054 14112 28786 -4973 -6127 -7242 -19558 68260 -33733 29375 -846 -14742 3584 -3900 -19517 12991 -7643 10774 -4207 -8064 -12527 13995 -19506 -11757 26003 14981 4725 -22195 5053 2744 -19482 -27218 7354 -5434 -6785 -1996 20281 -1293 -19479 -23685 -12842 -18984 27992 4040 -7204 6364 -19455 45704 -53629 -3721 -1640 -5729 2507 9706 -19432 30101 9676 -11153 -2769 19589 -17137 -1296 -19421 5353 43322 -6946 6163 5458 443 -12547 -19397 74742 2535 8317 -23469 -4311 10154 -9205 -19356 19473 28625 -10284 -26830 2367 -5957 8690 -19342 -1742 42075 -19627 16879 -5728 -15862 5096 -19318 -17203 23426 -40042 5369 14471 -634 1059 -19288 6011 -40282 35428 7311 -8232 -5254 7201 -19280 30971 -3911 -34122 19446 -3393 -828 807 -19212 -89467 805 619 1372 4514 11443 9808 -19192 -1627 10683 17708 17681 5290 7716 -19341 -19185 -16545 -60178 2332 6517 781 -6331 20807 -19151 -56896 36773 -893 14320 11968 -8395 -1446 -19127 12493 -4014 14370 -15312 2199 1316 1896 -19113 -8722 9436 5027 28397 -5896 -8589 -1698 -19097 -49143 -45584 54162 4752 9464 2213 659 -19059 -969 -72921 60082 18829 -8400 2019 407 -19048 5398 -5261 1689 -4596 -8987 -14989 19539 -19037 -19350 28385 5896 4336 -23118 2591 8288 -19013 -34811 9736 -14519 -7174 -2919 17819 4251 -19010 -31278 -10460 -28069 27603 3117 -9666 11908 -18960 -27200 9333 53519 -6361 -304 -6445 -609 -18952 -2240 45704 -16031 5774 4535 -2019 -7003 -18928 67149 4917 -768 -23858 -5234 7692 -3661 -18922 -63876 4134 23761 25838 11800 -1122 -8240 -18914 45934 18367 -10111 19851 -13329 -2213 -7255 -18846 -74504 23083 24630 1777 -5422 10058 1746 -18819 -1582 -37900 26343 6922 -9155 -7716 12745 -18784 -41791 -22903 10135 4344 -3087 25092 -2543 -18761 27456 18264 38381 -14907 -7737 -69 -6166 -18734 15528 -20581 4416 8360 18498 -12326 -2546 -18723 -9220 13065 8623 17292 4367 5254 -13797 -18682 -64489 39155 -9978 13931 11045 -10857 4098 -18658 4900 -1632 5285 -15701 1276 -1146 7440 -18620 -31776 -6831 -24473 16498 13380 4177 -191 -18586 12723 67982 7980 6179 -5401 -3404 -15065 -18483 -9833 48086 -25116 5385 3612 -4481 -1459 -18459 59556 7299 -9853 -24247 -6157 5230 1883 -18453 -71469 6516 14676 25449 10877 -3584 -2696 -18445 38341 20749 -19196 19462 -14252 -4675 -1711 -18429 -2080 -34271 29939 -4183 1108 6127 646 -18415 -23295 -20821 20596 39526 -6987 -3778 -2948 -18315 -49384 -20521 1050 3955 -4010 22630 3001 -18292 19863 20646 29296 -15296 -8660 -2531 -622 -18262 -41773 -20924 69088 4768 -1395 -1634 -1859 -18254 -16813 15447 -462 16903 3444 2792 -8253 -18189 -2693 750 -3800 -16090 353 -3608 12984 -18151 -39369 -4449 -33558 16109 12457 1715 5353 -18117 5130 70364 -1105 5790 -6324 -5866 -9521 -18113 8805 -31786 -27638 30186 -5407 1521 5101 -18055 37843 24378 -15600 8357 -3989 9168 -13810 -18014 -17426 50468 -34201 4996 2689 -6943 4085 -17990 51963 9681 -18938 -24636 -7080 2768 7427 -17960 -9673 -31889 20854 -4572 185 3665 6190 -17946 -30888 -18439 11511 39137 -7910 -6240 2596 -17899 22898 4079 19342 8376 7639 -16173 -5064 -17888 -1850 37725 23549 17308 -6492 1407 -16315 -17823 12270 23028 20211 -15685 -9583 -4993 4922 -17799 -3191 4379 -204 -27195 10616 10235 885 -17785 -24406 17829 -9547 16514 2521 330 -2709 -17761 44983 -22958 5716 -13118 -7248 10041 633 -17747 23768 -9508 -3627 30591 -15343 136 -2961 -17720 -10286 3132 -12885 -16479 -570 -6070 18528 -17662 18752 59296 -847 -38308 848 1577 -383 -17648 -2463 72746 -10190 5401 -7247 -8328 -3977 -17632 -42884 17726 38945 -18244 8113 2474 -1620 -17618 -64099 31176 29602 25465 18 -7431 -5214 -17594 5290 -9611 44865 -4167 -9751 2280 -1872 -17586 30250 26760 -24685 7968 -4912 6706 -8266 -17567 -6638 -48456 10900 19100 16484 -9977 1748 -17509 22400 7708 22938 -2729 17902 -2330 -17163 -17491 -17266 -29507 11769 -4961 -738 1203 11734 -17430 15305 6461 10257 7987 6716 -18635 480 -17429 15447 -75493 -2726 -2394 1597 16237 7445 -17419 -9443 40107 14464 16919 -7415 -1055 -10771 -17354 4677 25410 11126 -16074 -10506 -7455 10466 -17316 -31999 20211 -18632 16125 1598 -2132 2835 -17292 37390 -20576 -3369 -13507 -8171 7579 6177 -17278 16175 -7126 -12712 30202 -16266 -2326 2583 -17254 714 -25775 -33127 18692 3933 12902 -1454 -17231 69961 15392 -4881 -559 -717 -12259 -5077 -17193 11159 61678 -9932 -38697 -75 -885 5161 -17149 -71692 33558 20517 25076 -905 -9893 330 -17125 -2303 -7229 35780 -4556 -10674 -182 3672 -17117 22657 29142 -33770 7579 -5835 4244 -2722 -17101 -17764 -25878 15365 -16066 9525 15046 -365 -17087 -38979 -12428 6022 27643 1430 5141 -3959 -17063 30410 -53215 21285 -1989 -8339 14852 -617 -17040 14807 10090 13853 -3118 16979 -4792 -11619 -16988 -65210 69826 -541 2453 9526 -3323 -4975 -16964 4179 29039 14722 -27179 -243 6388 -1633 -16961 7712 8843 1172 7598 5793 -21097 6024 -16950 -17036 42489 5379 16530 -8338 -3517 -5227 -16926 52353 1702 20642 -13102 -18107 6194 -1885 -16847 -39592 22593 -27717 15736 675 -4594 8379 -16823 29797 -18194 -12454 -13896 -9094 5117 11721 -16809 8582 -4744 -21797 29813 -17189 -4788 8127 -16785 -6879 -23393 -42212 18303 3010 10440 4090 -16762 62368 17774 -13966 -948 -1640 -14721 467 -16732 732 -23796 25826 19116 5625 -13824 -770 -16721 -24016 9850 30033 28048 -8506 3756 -12021 -16656 -9896 -4847 26695 -4945 -11597 -2644 9216 -16632 -25357 -23496 6280 -16455 8602 12584 5179 -16618 -46572 -10046 -3063 27254 507 2679 1585 -16594 22817 -50833 12200 -2378 -9262 12390 4927 -16571 7214 12472 4768 -3507 16056 -7254 -6075 -16560 -17534 46118 8975 5425 1925 10326 -17326 -16519 -72803 72208 -9626 2064 8603 -5785 569 -16495 -3414 31421 5637 -27568 -1166 3926 3911 -16492 119 11225 -7913 7209 4870 -23559 11568 -16481 -24629 44871 -3706 16141 -9261 -5979 317 -16457 44760 4084 11557 -13491 -19030 3732 3659 -16433 29299 -14565 -8858 -25001 1169 18960 -378 -16419 8084 -1115 -18201 18708 -6926 9055 -3972 -16366 15695 -1518 49837 19521 -4311 -15209 -8832 -16293 54775 20156 -23051 -1337 -2563 -17183 6011 -16290 -79783 39569 15028 13582 8435 1488 -6225 -16290 5067 17431 50706 -4540 -21533 -4029 1154 -16266 -10394 -1218 30291 -16050 -1334 11199 -2883 -16263 -6861 -21414 16741 18727 4702 -16286 4774 -16231 87488 -25830 -37546 1230 -228 -2149 1722 -16201 25852 -67400 2246 21294 7037 -1252 485 -16163 -32950 -21114 -2805 -16844 7679 10122 10723 -16149 -54165 -7664 -12148 26865 -416 217 7129 -16126 15082 33503 16098 7614 -5066 -24944 3506 -16125 15224 -48451 3115 -2767 -10185 9928 10471 -16102 -379 14854 -4317 -3896 15133 -9716 -531 -16091 -25127 48500 -110 5036 1002 7864 -11782 -16064 47795 -12483 1603 10181 -2731 -9910 -783 -15988 -47683 28604 -33206 4242 10015 6787 1824 -15988 37167 6466 2472 -13880 -19953 1270 9203 -15965 21564 69771 -4960 -15009 5365 -18374 -1799 -15964 21706 -12183 -17943 -25390 246 16498 5166 -15950 491 1267 -27286 18319 -7849 6593 1572 -15934 -39930 -53753 21849 -5326 7511 17395 3929 -15897 8102 864 40752 19132 -5234 -17671 -3288 -15821 -87376 41951 5943 13193 7512 -974 -681 -15813 22434 56184 -27929 7206 -17617 -2065 304 -15797 -17987 1164 21206 -16439 -2257 8737 2661 -15794 -14454 -19032 7656 18338 3779 -18748 10318 -15759 -54663 -4035 -8552 15760 9847 14060 -4970 -15744 -10376 761 89244 -15626 358 -15527 -2199 -15736 14584 37132 19694 -3491 5197 -11101 -8593 -15721 -6489 -31372 -2632 29837 -8017 13866 -5222 -15680 -61758 -5282 -21233 26476 -1339 -2245 12673 -15656 7631 -46069 -5970 -3156 -11108 7466 16015 -15633 -7972 17236 -13402 -4285 14210 -12178 5013 -15622 -32720 50882 -9195 4647 79 5402 -6238 -15595 40202 -10101 -7482 9792 -3654 -12372 4761 -15592 -9506 -12826 66275 6589 -22624 782 -96 -15584 15454 23545 -3275 18724 -17785 5208 -6490 -15571 24741 -28750 -27897 -1718 16545 2856 724 -15560 -7 4896 -23690 7214 2414 20436 -10527 -15507 7604 4493 44348 8027 5029 -3828 -15387 -15481 -7102 3649 -36371 17930 -8772 4131 7116 -15428 509 3246 31667 18743 -6157 -20133 2256 -15404 -14952 -15403 11252 7233 14042 -4905 -1781 -15396 94858 -1170 -22620 1246 -11087 -5996 -796 -15328 -25580 3546 12121 -16828 -3180 6275 8205 -15290 -62256 -1653 -17637 15371 8924 11598 574 -15267 6991 39514 10609 -3880 4274 -13563 -3049 -15266 7133 -42440 -2374 -14261 -845 21309 3916 -15252 -14082 -28990 -11717 29448 -8940 11404 322 -15243 76380 -1273 25872 -33512 -5495 -3852 293 -15194 14956 27174 321 7619 -7522 19051 -18589 -15153 -40313 53264 -18280 4258 -844 2940 -694 -15115 7861 25927 -12360 18335 -18708 2746 -946 -15102 17148 -26368 -36982 -2107 15622 394 6268 -15091 -7600 7278 -32775 6825 1491 17974 -4983 -15068 61647 48445 -4529 -12426 -3159 -7187 -8606 -15038 11 6875 35263 7638 4106 -6290 -9843 -14962 -10617 25824 36132 -16423 -13116 4890 143 -14935 -22545 -13021 2167 6844 13119 -7367 3763 -14924 -47293 20625 6374 15776 -1012 10213 -7488 -14897 25629 -40358 8087 20921 -4745 -7561 3511 -14839 54667 15806 20125 -908 -3327 86 -15400 -14821 -69849 729 -26722 14982 8001 9136 6118 -14798 -602 41896 1524 -4269 3351 -16025 2495 -14783 -21675 -26608 -20802 29059 -9863 8942 5866 -14760 47572 14559 7444 9808 -14513 -16219 2243 -14736 32111 -4090 -12971 -1702 5686 -991 -1794 -14725 7363 29556 -8764 7230 -8445 16589 -13045 -14684 -47906 55646 -27365 3869 -1767 478 4850 -14646 268 28309 -21445 17946 -19631 284 4598 -14630 -40153 -26711 27690 -5699 -4271 11086 6955 -14622 -15193 9660 -41860 6436 568 15512 561 -14583 13633 -4193 35521 -36460 11278 1153 -705 -14569 -7582 9257 26178 7249 3183 -8752 -4299 -14515 171 -73100 81233 -2319 679 1856 -2194 -14493 -18210 28206 27047 -16812 -14039 2428 5687 -14485 6750 64577 -42503 -4677 -9200 6854 -707 -14466 -30138 -10639 -6918 6455 12196 -9829 9307 -14455 -54886 23007 -2711 15387 -1935 7751 -1944 -14431 14503 -17780 12552 -14245 -11704 17462 1398 -14417 -6712 -4330 3209 29464 -19799 7557 -2196 -14408 -1100 45525 5120 -15374 13614 -2182 -9604 -14370 47074 18188 11040 -1297 -4250 -2376 -9856 -14267 24518 -1708 -22056 -2091 4763 -3453 3750 -14256 -230 31938 -17849 6841 -9368 14127 -7501 -14199 11056 -70615 23656 32050 -5836 -2750 2261 -14179 -8080 12886 29774 -3856 13446 5091 -16398 -14114 6040 -1811 26436 -36849 10355 -1309 4839 -14100 -15175 11639 17093 6860 2260 -11214 1245 -14076 -30636 -7010 -3322 -4650 22459 4014 -2792 -14038 17538 -34347 2598 9427 4595 3820 -3044 -13986 -62479 25389 -11796 14998 -2858 5289 3600 -13963 6768 66556 16450 -4253 -7508 -19872 -23 -13962 6910 -15398 3467 -14634 -12627 15000 6942 -13948 -14305 -1948 -5876 29075 -20722 5095 3348 -13939 -8693 47907 -3965 -15763 12691 -4644 -4060 -13924 -29766 -20597 -26291 17565 -523 20323 -689 -13915 60696 7120 11298 -45395 2922 5067 -718 -13909 -70329 6337 35827 4301 19956 -3747 -5297 -13901 39481 20570 1955 -1686 -5173 -4838 -4312 -13798 16925 674 -31141 -2480 3840 -5915 9294 -13771 -48244 -20700 22201 -17193 5069 22467 400 -13748 21003 20467 50447 -36444 419 -2694 -3223 -13710 -15673 15268 20689 -4245 12523 2629 -10854 -13645 -1553 571 17351 -37238 9432 -3771 10383 -13631 -22768 14021 8008 6471 1337 -13676 6789 -13607 -38229 -4628 -12407 -5039 21536 1552 2752 -13596 21873 6880 27478 -14229 -22563 13615 -1120 -13569 9945 -31965 -6487 9038 3672 1358 2500 -13558 -14803 1681 -2280 17970 -10459 18938 -8751 -13517 -70072 27771 -20881 14609 -3781 2827 9144 -13494 -825 68938 7365 -4642 -8431 -22334 5521 -13470 -16286 50289 -13050 -16152 11768 -7106 1484 -13455 -37359 -18215 -35376 17176 -1446 17861 4855 -13446 53103 9502 2213 -45784 1999 2605 4826 -13432 31888 22952 -7130 -2075 -6096 -7300 1232 -13402 -29748 -18618 32662 17989 1169 -6403 -5 -13370 64601 -23034 -21625 492 -3761 7734 -3057 -13344 -710 37546 44700 -3840 2587 1244 -18916 -13340 2965 -64604 18167 20556 3504 8631 -4294 -13288 -77052 -4868 3773 26127 -3949 10100 2350 -13265 -7805 36299 32019 6876 -8599 -15061 -1273 -13264 -7663 -45655 19036 -3505 -13718 19811 5692 -13241 -23266 17650 11604 -4634 11600 167 -5310 -13211 -52 -46058 87074 -2692 -11103 -4453 832 -13162 -30361 16403 -1077 6082 414 -16138 12333 -13127 14280 9262 18393 -14618 -23486 11153 4424 -13104 -1323 72567 10961 -15747 1832 -8491 -6578 -13103 -1181 -9387 -2022 -26128 -3287 26381 387 -13100 2352 -29583 -15572 8649 2749 -1104 8044 -13089 -22396 4063 -11365 17581 -11382 16476 -3207 -12977 45510 11884 -6872 -46173 1076 143 10370 -12963 24295 25334 -16215 -2464 -7019 -9762 6776 -12933 -37341 -16236 23577 17600 246 -8865 5539 -12909 -52802 -34885 3162 6090 20445 6363 1502 -12901 57008 -20652 -30710 103 -4684 5272 2487 -12886 16445 6282 31408 -13161 15795 -18798 -2121 -12875 -8303 39928 35615 -4229 1664 -1218 -13372 -12871 -4628 -62222 9082 20167 2581 6169 1250 -12848 64619 -21055 37328 916 -2069 -18992 -2373 -12819 -84645 -2486 -5312 25738 -4872 7638 7894 -12772 -30859 20032 2519 -5023 10677 -2295 234 -12734 17315 -7305 8439 9054 -7187 -2489 -18 -12710 1854 -25954 -11976 -2456 13012 12739 -4055 -12658 -78163 33782 -26370 3115 5559 14208 2589 -12658 6687 11644 9308 -15007 -24409 8691 9968 -12635 -8916 74949 1876 -16136 909 -10953 -1034 -12631 -5241 -27201 -24657 8260 1826 -3566 13588 -12620 -29989 6445 -20450 17192 -12305 14014 2337 -12605 -70552 33379 41668 3928 8174 -10056 -2271 -12581 -1163 -7408 56931 -25704 -1595 -345 1071 -12567 -22378 6042 47588 18005 -9690 -10250 -2523 -12535 71971 1626 -6699 508 -14620 3887 -5575 -12494 16702 27716 -25300 -2853 -7942 -12224 12320 -12464 -44934 -13854 14492 17211 -677 -11327 11083 -12432 49415 -18270 -39795 -286 -5607 2810 8031 -12417 8852 8664 22323 -13550 14872 -21260 3423 -12406 -15896 42310 26530 -4618 741 -3680 -7828 -12402 -12221 -59840 -3 19778 1658 3707 6794 -12330 -4398 9774 2692 41658 -5019 1449 -15711 -12317 89739 -64659 13748 3094 -657 -6420 -1118 -12303 -38452 22414 -6566 -5412 9754 -4757 5778 -12265 9722 -4923 -646 8665 -8110 -4951 5526 -12241 -5739 -23572 -21061 -2845 12089 10277 1489 -12227 -26954 -10122 -30404 40864 3994 372 -2105 -12203 42435 -50909 -15141 11232 -5775 10083 1237 -12188 1872 -23975 46977 -2032 14704 -13987 -3371 -12177 -22876 9671 51184 6900 573 3593 -14622 -12166 -16509 77331 -7209 -16525 -14 -13415 4510 -12162 -12834 -24819 -33742 7871 903 -6028 19132 -12104 16204 31345 -21704 -13958 2321 1619 221 -12074 -45432 -10225 18088 6106 9586 2516 -1016 -12066 64378 4008 -15784 119 -15543 1425 -31 -12060 -66647 3225 8745 49815 1491 -7389 -4610 -12036 2742 -37562 24008 20183 -8278 2322 -1268 -12012 -12719 -56211 3593 8673 11921 17550 -5305 -11960 -92736 3525 -10801 14244 4468 19019 1339 -11951 -2274 31242 26788 -48716 7913 3763 1310 -11948 1259 11046 13238 -13939 13949 -23722 8967 -11937 -23489 44692 17445 -5007 -182 -6142 -2284 -11933 -19814 -57458 -9088 19389 735 1245 12338 -11875 9224 -1294 2950 -2440 2153 8892 -6573 -11848 82146 -62277 4663 2705 -1580 -8882 4426 -11823 -70793 58442 -11444 3131 -5300 10361 71 -11796 2129 -2541 -9731 8276 -9033 -7413 11070 -11758 -34547 -7740 -39489 40475 3071 -2090 3439 -11738 31167 53623 2307 -13553 -7615 234 -7841 -11708 -30469 12053 42099 6511 -350 1131 -9078 -11657 26992 -67579 23397 146 16116 -1415 -2116 -11635 8611 33727 -30789 -14347 1398 -843 5765 -11605 -53025 -7843 9003 5717 8663 54 4528 -11597 56785 6390 -24869 -270 -16466 -1037 5513 -11591 -74240 5607 -340 49426 568 -9851 934 -11567 -4851 -35180 14923 19794 -9201 -140 4276 -11543 -20312 -53829 -5492 8284 10998 15088 239 -11509 24187 20984 26961 -2035 -7783 7507 -14635 -11468 -31082 47074 8360 -5396 -1105 -8604 3260 -11430 17092 19737 14280 8681 -18969 -8798 3008 -11406 1631 1088 -6135 -2829 1230 6430 -1029 -11327 -5464 -159 -18816 7887 -9956 -9875 16614 -11269 23574 56005 -6778 -13942 -8538 -2228 -2297 -11239 -38062 14435 33014 6122 -1273 -1331 -3534 -11207 56287 10019 -21273 -11375 -6203 12806 -6586 -11201 10112 -12902 38934 20199 -19137 -1525 -3786 -11188 19399 -65197 14312 -243 15193 -3877 3428 -11136 -60618 -5461 -82 5328 7740 -2408 10072 -11128 49192 8772 -33954 -659 -17389 -3499 11057 -11098 -12444 -32798 5838 19405 -10124 -2602 9820 -11051 41342 -10280 13669 -11356 5425 -12535 2160 -11048 -8366 -13005 87426 -14559 -13545 619 -2697 -11040 16594 23366 17876 -2424 -8706 5045 -9091 -11037 20127 3170 4326 32353 -2670 -22440 -1434 -11027 25881 -28929 -6746 -22866 25624 2693 -1877 -11013 4666 -15479 -16089 20843 17529 -7212 -5471 -10961 9499 22119 5195 8292 -19892 -11260 8552 -10937 -5962 3470 -15220 -3218 307 3968 4515 -10884 1649 3067 52818 -2405 2922 -20296 -345 -10875 26751 -42516 -29715 -651 2642 19002 226 -10852 95998 -1349 -1469 -19902 -2008 -6159 -3397 -10800 15981 58387 -15863 -14331 -9461 -4690 3247 -10770 -45655 16817 23929 5733 -2196 -3793 2010 -10746 -61116 -1832 3514 -5777 18003 11435 -2027 -10738 48694 12401 -30358 -11764 -7126 10344 -1042 -10732 2519 -10520 29849 19810 -20060 -3987 1758 -10719 11806 -62815 5227 -632 14270 -6339 8972 -10708 -12942 -29169 9434 8300 139 11241 -2279 -10667 -68211 -3079 -9167 4939 6817 -4870 15616 -10647 19629 6799 7922 21248 7593 -8597 -13533 -10629 -20037 -30416 -3247 19016 -11047 -5064 15364 -10609 -39173 53085 2871 -16890 8235 2777 -3295 -10585 30216 12298 18134 -46522 -1534 12488 47 -10582 33749 -7898 4584 -11745 4502 -14997 7704 -10571 9001 25748 8791 -2813 -9629 2583 -3547 -10568 12534 5552 -4759 31964 -3593 -24902 4110 -10558 18288 -26547 -15831 -23255 24701 231 3667 -10547 -6460 7099 -11624 -14323 10570 17811 -7584 -10544 -2927 -13097 -25174 20454 16606 -9674 73 -10541 -52635 -15822 48583 17251 -2364 3480 -4784 -10468 -13555 5852 -24305 -3607 -616 1506 10059 -10406 19158 -40134 -38800 -1040 1719 16540 5770 -10383 88405 1033 -10554 -20291 -2931 -8621 2147 -10353 26769 -40537 29238 -227 4334 -7724 910 -10301 -53248 19199 14844 5344 -3119 -6255 7554 -10269 41101 14783 -39443 -12153 -8049 7882 4502 -10239 -20535 -26787 349 7911 -784 8779 3265 -10216 48712 14380 28595 -11340 -5434 -16382 -358 -10186 -12924 -27190 68387 8724 1831 -15485 -1595 -10178 12036 9181 -1163 20859 6670 -11059 -7989 -10154 81425 -31606 14100 -8773 -3099 -1348 -4647 -10140 -46766 55467 -6214 -17279 7312 315 2249 -10116 22623 14680 9049 -46911 -2457 10026 5591 -10113 26156 -5516 -4501 -12134 3579 -17459 13248 -10102 1408 28130 -294 -3202 -10552 121 1997 -10078 -14053 9481 -20709 -14712 9647 15349 -2040 -10072 -60228 -13440 39498 16862 -3287 1018 760 -10040 34121 -17856 -14789 -635 -8217 15155 -2292 -10025 -6442 9078 47329 -13899 12262 -8915 -6900 -9999 -21148 8234 -33390 -3996 -1539 -956 15603 -9941 7890 64398 -21352 -25825 -121 6691 -3308 -9911 -53746 22828 18440 -5761 7144 7588 -4545 -9884 19176 -38155 20153 -616 3411 -10186 6454 -9873 -5572 -4509 24360 8316 -10720 7394 -4797 -9832 -60841 21581 5759 4955 -4042 -8717 13098 -9788 11538 12810 2433 9754 16933 2784 -20088 -9770 -28128 -24405 -8736 7522 -1707 6317 8809 -9747 41119 16762 19510 -11729 -6357 -18844 5186 -9723 25658 -1887 -905 -23239 13842 -3616 1149 -9709 4443 11563 -10248 20470 5747 -13521 -2445 -9685 73832 -29224 5015 -9162 -4022 -3810 897 -9674 49084 4422 9222 -230 -18153 13770 -10354 -9655 12196 -70794 44807 10902 3243 -2913 -340 -9633 -6185 30512 -9379 -3591 -11475 -2341 7541 -9603 -67821 -11058 30413 16473 -4210 -1444 6304 -9571 26528 -15474 -23874 -1024 -9140 12693 3252 -9556 -14035 11460 38244 -14288 11339 -11377 -1356 -9472 297 66780 -30437 -26214 -1044 4229 2236 -9442 -61339 25210 9355 -6150 6221 5126 999 -9404 -13165 -2127 15275 7927 -11643 4932 747 -9380 -28626 -20776 -5140 -3583 8556 20160 -3290 -9357 40621 20391 23106 -22834 3906 -5001 -6913 -9342 19548 -48113 780 10494 -9308 19966 -3542 -9301 -35721 -22023 -17821 7133 -2630 3855 14353 -9278 33526 19144 10425 -12118 -7280 -21306 10730 -9267 8778 52790 14632 -3186 -21411 -3726 -521 -9254 18065 495 -9990 -23628 12919 -6078 6693 -9243 -6683 34141 -5783 -14696 -1212 11502 -4558 -9240 -3150 13945 -19333 20081 4824 -15983 3099 -9216 -18611 -4704 -39748 8571 25023 -755 -938 -9216 66239 -26842 -4070 -9551 -4945 -6272 6441 -9205 41491 6804 137 -619 -19076 11308 -4810 -9186 4603 -68412 35722 10513 2320 -5375 5204 -9178 29563 -32041 -33828 22648 7159 -949 -1190 -9134 -75414 -8676 21328 16084 -5133 -3906 11848 -9102 18935 -13092 -32959 -1413 -10063 10231 8796 -9055 72721 9426 -25128 -32174 5486 298 1136 -9049 -58304 8643 -599 17522 22520 -8516 -3443 -9049 26546 -13495 35079 -600 -7448 -14033 3936 -9025 11085 -32144 14664 -12110 12751 1195 -101 -9014 -13663 1502 18871 -3178 -1380 18775 -11352 -9011 -10130 -18694 5321 31599 4656 -8710 -3695 -8987 59259 -59481 20584 1967 -5113 1001 -353 -8973 -68932 27592 270 -6539 5298 2664 6543 -8961 -6052 1099 86909 -2365 1235 -5489 -16212 -8946 3990 -33391 1983 -1394 1565 -15110 17542 -8935 -20758 255 6190 7538 -12566 2470 6291 -8911 -36219 -18394 -14225 -3972 7633 17698 2254 -8897 -57434 -4944 -23568 39737 -462 7793 -1340 -8888 33028 22773 14021 -23223 2983 -7463 -1369 -8874 11813 36223 4678 20486 -5112 -17368 -4963 -8873 11955 -45731 -8305 10105 -10231 17504 2002 -8858 -28608 -18797 53813 -3159 10248 -6566 -2606 -8850 -3648 17574 -15737 8976 15087 -2140 -9000 -8850 81202 -4564 19941 -9146 -14881 -7657 -1621 -8832 -43314 -19641 -26906 6744 -3553 1393 19897 -8798 1185 55172 5547 -3575 -22334 -6188 5023 -8774 -14276 36523 -14868 -15085 -2135 9040 986 -8744 -75912 -5047 24924 4979 5130 9937 -251 -8736 33898 9186 -8948 -1008 -19999 8846 734 -8721 -6665 36120 53170 -14272 480 -15224 -3874 -8717 -2990 -66030 26637 10124 1397 -7837 10748 -8645 4833 3584 29332 32004 -5280 -10095 -11757 -8633 11342 -10710 -42044 -1802 -10986 7769 14340 -8580 -65897 11025 -9684 17133 21597 -10978 2101 -8580 18953 -11113 25994 -989 -8371 -16495 9480 -8569 -5795 22533 30201 7943 -22502 1085 -1771 -8559 -41 -9566 19129 -47276 5792 26218 -2214 -8556 3492 -29762 5579 -12499 11828 -1267 5443 -8545 -21256 3884 9786 -3567 -2303 16313 -5808 -8542 -17723 -16312 -3764 31210 3733 -11172 1849 -8518 51666 -57099 11499 1578 -6036 -1461 5191 -8504 -76525 29974 -8815 -6928 4375 202 12087 -8484 11315 39852 8274 9381 5151 -3525 -17062 -8466 -28351 2637 -2895 7149 -13489 8 11835 -8442 -43812 -16012 -23310 -4361 6710 15236 7798 -8419 25435 25155 4936 -23612 2060 -9925 4175 -8408 687 58801 9143 -14680 -12071 7655 -7076 -8405 4220 38605 -4407 20097 -6035 -19830 581 -8404 4362 -43349 -17390 9716 -11154 15042 7546 -8395 9974 6506 -15479 -35122 22259 5303 138 -8381 -11241 19956 -24822 8587 14164 -4602 -3456 -8381 73609 -2182 10856 -9535 -15804 -10119 3923 -8357 58148 -20831 -9559 -21045 4395 5109 -114 -8343 36933 -7381 -18902 22664 -3700 -4796 -3708 -8327 -3488 -62401 30233 -981 11660 6006 -1351 -8275 -83505 -2665 15839 4590 4207 7475 5293 -8267 26305 11568 -18033 -1397 -20922 6384 6278 -8244 10702 74873 -25465 -2526 4396 -13260 -4724 -8243 10844 -7081 -38448 -12907 -723 21612 2241 -8214 -50934 33303 14327 17538 11661 -12363 -5961 -8213 -50792 -48651 1344 7157 6542 22509 1004 -8190 18455 -7484 29590 -12094 1892 -2652 -2619 -8176 -2760 5966 20247 31615 -6203 -12557 -6213 -8100 -13388 24915 21116 7554 -23425 -1377 3773 -8087 -4101 -27380 -3506 -12888 10905 -3729 10987 -8076 -28849 6266 701 -3956 -3226 13851 -264 -8073 -25316 -13930 -12849 30821 2810 -13634 7393 -8049 44073 -54717 2414 1189 -6959 -3923 10735 -8037 -23 -7587 78082 -46852 7484 -508 -1530 -8026 28470 8588 -5018 60 18359 -23567 -267 -8015 3722 42234 -811 8992 4228 -5987 -11518 -7991 73111 1447 14452 -20640 -5541 3724 -8176 -7950 17842 27537 -4149 -24001 1137 -12387 9719 -7939 -6906 61183 58 -15069 -12994 5193 -1532 -7912 -18834 22338 -33907 8198 13241 -7064 2088 -7888 50555 -18449 -18644 -21434 3472 2647 5430 -7877 25807 15197 -14437 -12502 -10659 20227 -5821 -7874 29340 -4999 -27987 22275 -4623 -7258 1836 -7858 -11081 -60019 21148 -1370 10737 3544 4193 -7806 -91098 -283 6754 4201 3284 5013 10837 -7786 -3258 9595 23843 20510 4060 1286 -18312 -7745 -58527 35685 5242 17149 10738 -14825 -417 -7721 10862 -5102 20505 -12483 969 -5114 2925 -7710 -13886 28544 24712 -3551 -13162 12466 -8326 -7707 -10353 8348 11162 31226 -7126 -15019 -669 -7697 -4599 -23751 90 -23993 21168 10114 -1112 -7683 -25814 -10301 -9253 19716 13073 209 -4706 -7645 22360 -37638 -3333 33793 -4791 15 -4958 -7631 -20981 27297 12031 7165 -24348 -3839 9317 -7607 -36442 8648 -8384 -4345 -4149 11389 5280 -7560 17344 31166 -553 -35106 11400 1456 -2380 -7546 -3871 44616 -9896 8603 3305 -8449 -5974 -7530 -44292 -10404 39239 -15042 18665 2353 -3617 -7522 65518 3829 5367 -21029 -6464 1262 -2632 -7516 -65507 3046 29896 28667 10570 -7552 -7211 -7492 3882 -37741 45159 -965 801 2159 -3869 -7484 28842 -1370 -24391 11170 5640 6585 -10263 -7470 -14499 63565 -9027 -15458 -13917 2731 4012 -7419 42962 -16067 -27729 -21823 2549 185 10974 -7416 -91596 3346 10350 -6904 13547 18856 -1262 -7408 18214 17579 -23522 -12891 -11582 17765 -277 -7389 -18674 -57637 12063 -1759 9814 1082 9737 -7347 50785 53547 -25034 57 -4128 -2073 -11531 -7331 10364 -1473 24101 -23588 11232 8729 -9174 -7328 13897 -21669 10551 11189 17268 -18756 -1517 -7317 -10851 11977 14758 20121 3137 -1176 -12768 -7252 3269 -2720 11420 -12872 46 -7576 8469 -7241 -21479 30926 15627 -3940 -14085 10004 -2782 -7214 -33407 -7919 -18338 19327 12150 -2253 838 -7190 35982 -48706 -3075 -10305 2381 7458 4180 -7176 14767 -35256 -12418 33404 -5714 -2447 586 -7118 43805 20908 -380 11575 -4296 5200 -18325 -7091 9751 33548 -9638 -35495 10477 -1006 3164 -7077 -11464 46998 -18981 8214 2382 -10911 -430 -7053 57925 6211 -3718 -21418 -7387 -1200 2912 -7047 -73100 5428 20811 28278 9647 -10014 -1667 -7039 36710 19661 -13061 22291 -15482 -11105 -682 -7023 -3711 -35359 36074 -1354 -122 -303 1675 -7015 21249 1012 -33476 10781 4717 4123 -4719 -6939 10621 19961 -32607 -13280 -12505 15303 5267 -6909 -51015 -21609 7185 6784 -5240 16200 4030 -6886 18232 19558 35431 -12467 -9890 -8961 407 -6878 43192 55929 -34119 -332 -5051 -4535 -5987 -6862 2771 909 15016 -23977 10309 6267 -3630 -6848 -18444 14359 5673 19732 2214 -3638 -7224 -6824 50945 -26428 20936 -9900 -7555 6073 -3882 -6783 -4324 -338 2335 -13261 -877 -10038 14013 -6772 -29072 33308 6542 -4329 -15008 7542 2762 -6745 -41000 -5537 -27423 18938 11227 -4715 6382 -6725 24714 55826 14373 -35090 541 -2391 -4898 -6721 28389 -46324 -12160 -10694 1458 4996 9724 -6710 3641 -12678 -7953 -1762 -12673 22576 -1527 -6707 7174 -32874 -21503 33015 -6637 -4909 6130 -6687 -11962 50627 -15385 -2891 12645 2932 -12529 -6649 36212 23290 -9465 11186 -5219 2738 -12781 -6608 -19057 49380 -28066 7825 1459 -13373 5114 -6584 50332 8593 -12803 -21807 -8310 -3662 8456 -6570 29117 22043 -22146 21902 -16405 -13567 4862 -6554 -11304 -32977 26989 -1743 -1045 -2765 7219 -6546 13656 3394 -42561 10392 3794 1661 825 -6482 -3481 36637 29684 20137 -7722 -5023 -15286 -6478 194 -65513 3151 44533 -6805 2364 -664 -6417 10639 21940 26346 -12856 -10813 -11423 5951 -6393 -4822 3291 5931 -24366 9386 3805 1914 -6379 -26037 16741 -3412 19343 1291 -6100 -1680 -6355 43352 -24046 11851 -10289 -8478 3611 1662 -6341 22137 -10596 2508 33420 -16573 -6294 -1932 -6325 -18284 -65616 51643 9775 -1213 4508 425 -6321 3001 72905 8626 -2486 2709 1547 -20591 -6314 -11917 2044 -6750 -13650 -1800 -12500 19557 -6294 75923 11922 10339 2659 -1024 -16227 -9592 -6256 17121 58208 5288 -35479 -382 -4853 646 -6241 -3952 -10296 -17038 -2151 -13596 20114 4017 -6226 -44515 16638 45080 -15415 6883 -3956 -591 -6218 -19555 53009 -24470 -3280 11722 470 -6985 -6188 3659 -10699 51000 -1338 -10981 -4150 -843 -6180 28619 25672 -18550 10797 -6142 276 -7237 -6164 -11802 -29348 30585 -12848 9218 11078 -4880 -6112 -91819 30388 16191 -7277 1765 12547 1764 -6103 20769 6620 29073 100 16672 -8760 -16134 -6085 -18897 -30595 17904 -2132 -1968 -5227 12763 -6077 6063 5776 -51646 10003 2871 -801 6369 -6027 10141 25569 29942 -23961 -550 2420 -6148 -6024 13674 5373 16392 10816 5486 -25065 1509 -6023 13816 -76581 3409 435 367 9807 8474 -6009 -7399 -63131 -5934 44144 -7728 -98 4880 -6000 -1787 -13276 -4023 -694 25685 -9837 -2528 -5989 -26535 20370 184 8238 11554 7743 -13779 -5948 3046 24322 17261 -13245 -11736 -13885 11495 -5924 -12415 5673 -3154 -24755 8463 1343 7458 -5910 -33630 19123 -12497 18954 368 -8562 3864 -5886 -49091 474 -32912 7444 20567 6666 -173 -5886 35759 -21664 2766 -10678 -9401 1149 7206 -5878 60719 14707 -66784 1457 -4562 5575 812 -5872 14544 -8214 -6577 33031 -17496 -8756 3612 -5852 -4592 75287 -459 -2875 1786 -915 -15047 -5848 -917 -26863 -26992 21521 2703 6472 -425 -5825 68330 14304 1254 2270 -1947 -18689 -4048 -5787 9528 60590 -3797 -35868 -1305 -7315 6190 -5749 -27148 55391 -33555 -3669 10799 -1992 -1441 -5725 42241 14604 -18292 -33301 1030 7719 1901 -5719 -88784 13821 6237 16395 18064 -1095 -2678 -5711 21026 28054 -27635 10408 -7065 -2186 -1693 -5695 -19395 -26966 21500 -13237 8295 8616 664 -5681 -40610 -13516 12157 30472 200 -1289 -2930 -5657 28779 -54303 27420 840 -9569 8422 412 -5634 13176 9002 19988 -289 15749 -11222 -10590 -5608 -1530 8158 -60731 9614 1948 -3263 11913 -5582 -66841 68738 5594 5282 8296 -9753 -3946 -5581 -66699 -13216 -7389 -5099 3177 25119 3019 -5558 2548 27951 20857 -24350 -1473 -42 -604 -5554 6223 -74199 -5676 46 -556 7345 14018 -5544 -18667 41401 11514 19359 -9568 -9947 -4198 -5543 -18525 -40553 -1469 8978 -14687 24925 2767 -5531 -9380 -10894 -13108 -1083 24762 -12299 3016 -5528 -59088 -13619 60649 -4286 5792 855 -1841 -5520 -34128 22752 -8901 7849 10631 5281 -8235 -5520 50722 614 26777 -10273 -19337 -236 -856 -5496 35261 -18035 6362 -21783 862 14992 -4893 -5490 -10914 -40956 66569 9791 -12072 661 -2093 -5441 -41223 21505 -21582 18565 -555 -11024 9408 -5417 28166 -19282 -6319 -11067 -10324 -1313 12750 -5409 53126 17089 -75869 1068 -5485 3113 6356 -5406 3418 14364 -2112 -2135 -24455 16267 1499 -5383 -12185 77669 -9544 -3264 863 -3377 -9503 -5379 -8510 -24481 -36077 21132 1780 4010 5119 -5356 60737 16686 -7831 1881 -2870 -21151 1496 -5326 -899 -24884 31961 21945 4395 -20254 259 -5294 93450 -29300 -22326 4448 -535 -6117 -2793 -5280 -34741 57773 -42640 -4058 9876 -4454 4103 -5256 34648 16986 -27377 -33690 107 5257 7445 -5242 13433 30436 -36720 10019 -7988 -4648 3851 -5226 -26988 -24584 12415 -13626 7372 6154 6208 -5218 -2028 11787 -57135 -1491 12211 10580 -186 -5212 -48203 -11134 3072 30083 -723 -3751 2614 -5188 21186 -51921 18335 451 -10492 5960 5956 -5165 5583 11384 10903 -678 14826 -13684 -5046 -5154 -19165 45030 15110 8254 695 3896 -16297 -5150 -15490 -57120 -11423 32650 1612 11283 -1675 -5113 -74434 71120 -3491 4893 7373 -12215 1598 -5092 13548 -956 615 10821 3030 18930 -20586 -5089 -5045 30333 11772 -24739 -2396 -2504 4940 -5075 -26260 43783 2429 18970 -10491 -12409 1346 -5051 -41721 25134 -17986 7460 9708 2819 -2691 -5051 43129 2996 17692 -10662 -20260 -2698 4688 -5027 27668 -15653 -2723 -22172 -61 12530 651 -5013 6453 -2203 -12066 21537 -8156 2625 -2943 -4928 1437 66601 -9286 -47362 8035 4066 -365 -4914 -19778 80051 -18629 -3653 -60 -5839 -3959 -4910 -16103 -22099 -45162 20743 857 1548 10663 -4887 53144 19068 -16916 1492 -3793 -23613 7040 -4860 -12025 -2306 36426 -13221 -2564 4769 -1854 -4825 85857 -26918 -31411 4059 -1458 -8579 2751 -4795 24221 -68488 8381 24123 5807 -7682 1514 -4757 -34581 -22202 3330 -14015 6449 3692 11752 -4743 -55796 -8752 -6013 29694 -1646 -6213 8158 -4719 13593 -49539 9250 62 -11415 3498 11500 -4696 -2010 13766 1818 -1067 13903 -16146 498 -4685 -26758 47412 6025 7865 -228 1434 -10753 -4661 42631 6625 21288 -21767 -9997 11145 -7411 -4658 46164 -13571 7738 13010 -3961 -16340 246 -4612 12322 69086 -66863 -12993 1520 -540 4090 -4582 -49314 27516 -27071 7071 8785 357 2853 -4582 35536 5378 8607 -11051 -21183 -5160 10232 -4559 19933 68683 1175 -12180 4135 -24804 -770 -4558 20075 -13271 -11808 -22561 -984 10068 6195 -4544 -1140 179 -21151 21148 -9079 163 2601 -4528 -41561 -54841 27984 -2497 6281 10965 4958 -4520 -16601 -18470 -41566 9638 11120 15391 -1436 -4514 -62776 -41391 18641 41212 -1814 1060 1364 -4491 6471 -224 46887 21961 -6464 -24101 -2259 -4391 -19618 76 27341 -13610 -3487 2307 3690 -4367 -35079 -18573 6926 -25120 16712 17535 -347 -4353 -56294 -5123 -2417 18589 8617 7630 -3941 -4338 -12007 -327 95379 -12797 -872 -21957 -1170 -4329 13095 -45910 12846 -11043 -1152 17341 -599 -4315 -8120 -32460 3503 32666 -9247 7436 -4193 -4288 -42174 -19820 -5755 -14404 5526 1230 17296 -4250 6000 -47157 165 -327 -12338 1036 17044 -4227 -9603 16148 -7267 -1456 12980 -18608 6042 -4216 -34351 49794 -3060 7476 -1151 -1028 -5209 -4192 35038 9007 12203 -22156 -10920 8683 -1867 -4178 13823 22457 2860 21553 -19015 -1222 -5461 -4165 23110 -29838 -21762 1111 15315 -3574 1753 -4154 -1638 3808 -17555 10043 1184 14006 -9498 -4113 27943 7760 -478 -11440 -22106 -7622 15776 -4101 5973 3405 50483 10856 3799 -10258 -14358 -4089 12482 -10889 -20893 -22950 -1907 7606 11739 -4075 -8733 2561 -30236 20759 -10002 -2299 8145 -4059 -49154 -52459 18899 -2886 5358 8503 10502 -4025 -4655 22354 51352 -13205 -13423 922 -4372 -4017 20305 58725 -18198 -1070 -8584 5348 -10766 -3998 -16583 -16491 17387 10062 12812 -11335 -752 -3990 93227 -2258 -16485 4075 -12317 -12426 233 -3987 -41331 17155 21594 18994 -1319 6245 -12003 -3936 16130 -62477 2892 12629 15147 3699 -5041 -3922 -27211 2458 18256 -13999 -4410 -155 9234 -3914 -2251 38829 -51294 -1864 429 4271 2840 -3884 -63887 -2741 -11502 18200 7694 5168 1603 -3876 45923 11492 -45374 12213 -17435 4077 2588 -3861 5360 38426 16744 -1051 3044 -19993 -2020 -3860 5502 -43528 3761 -11432 -2075 14879 4945 -3846 -15713 -30078 -5582 32277 -10170 4974 1351 -3781 -1593 -44775 -8920 -716 -13261 -1426 22588 -3747 -41944 52176 -12145 7087 -2074 -3490 335 -3723 27445 11389 3118 -22545 -11843 6221 3677 -3709 6230 24839 -6225 21164 -19938 -3684 83 -3696 15517 -27456 -30847 722 14392 -6036 7297 -3685 -9231 6190 -26640 9654 261 11544 -3954 -3662 60016 47357 1606 -9597 -4389 -13617 -7577 -3632 -1620 5787 41398 10467 2876 -12720 -8814 -3620 4889 -8507 -29978 -23339 -2830 5144 17283 -3606 -16326 4943 -39321 20370 -10925 -4761 13689 -3600 92729 1371 -12889 -7030 -2054 1417 -11866 -3556 -12248 24736 42267 -13594 -14346 -1540 1172 -3548 12712 61107 -27283 -1459 -9507 2886 -5222 -3535 21999 8812 -51905 -21901 24823 534 1992 -3532 -27709 6087 21852 -25104 5853 13688 -2865 -3529 -24176 -14109 8302 9673 11889 -13797 4792 -3518 -48924 19537 12509 18605 -2242 3783 -6459 -3494 20465 -21250 27772 -11027 -12011 13494 -3117 -3467 8537 -60095 -6193 12240 14224 1237 503 -3433 53036 14718 26260 1921 -4557 -6344 -14371 -3415 -71480 -359 -20587 17811 6771 2706 7147 -3392 -2233 40808 7659 -1440 2121 -22455 3524 -3391 -2091 -41146 -5324 -11821 -2998 12417 10489 -3377 -23306 -27696 -14667 31888 -11093 2512 6895 -3369 1654 8675 -84217 44023 -6254 6938 501 -3330 30480 -5178 -6836 1127 4456 -7421 -765 -3319 5732 28468 -2629 10059 -9675 10159 -12016 -3278 -49537 54558 -21230 6698 -2997 -5952 5879 -3254 19852 13771 -5967 -22934 -12766 3759 9221 -3242 -2118 9416 44994 -638 13139 1123 -20913 -3230 4391 -4878 -26382 -34444 7433 18987 5184 -3216 -16824 8572 -35725 9265 -662 9082 1590 -3193 52423 49739 -7479 -9986 -5312 -16079 -2033 -3177 12002 -5281 41656 -33631 10048 -5277 324 -3163 -9213 8169 32313 10078 1953 -15182 -3270 -3162 -9071 -73785 19330 -303 -3166 19690 3695 -3131 85136 3753 -21974 -7419 -2977 -1045 -6322 -3109 -1460 -74188 87368 510 -551 -4574 -1165 -3087 -19841 27118 33182 -13983 -15269 -4002 6716 -3079 5119 63489 -36368 -1848 -10430 424 322 -3063 -35302 8469 12767 -25493 4930 11226 2679 -3049 -56517 21919 3424 18216 -3165 1321 -915 -3025 12872 -18868 18687 -11416 -12934 11032 2427 -3011 -8343 -5418 9344 32293 -21029 1127 -1167 -3002 -2731 44437 11255 -12545 12384 -8612 -8575 -3001 -2589 -37517 -1728 -22926 7265 26260 -1610 -2998 944 -57713 -15278 11851 13301 -1225 6047 -2987 -23804 -24067 -11071 20783 -830 16355 -5204 -2978 66658 3650 26518 -42177 2615 1099 -5233 -2964 45443 17100 17175 1532 -5480 -8806 -8827 -2946 -79073 2023 -29672 17422 5848 244 12691 -2940 29982 -1549 -3240 -9978 14719 6422 -12864 -2914 15276 -2393 -83959 -75 918 14381 9639 -2888 -50035 58187 -17634 -4407 7266 7891 -6220 -2864 19354 17400 -2371 -34039 -2503 17602 -2878 -2861 22887 -2796 -15921 738 3533 -9883 4779 -2858 -26821 -5521 57836 -2465 -15437 3271 -78 -2850 -1861 30850 -11714 9670 -10598 7697 -6472 -2785 12259 16153 -15052 -23323 -13689 1297 14765 -2773 -9711 11798 35909 -1027 12216 -1339 -15369 -2708 4409 -2899 32571 -34020 9125 -7739 5868 -2694 -16806 10551 23228 9689 1030 -17644 2274 -2670 -32267 -8098 2813 -1821 21229 -2416 -1763 -2662 77543 6135 -31059 -7808 -3900 -3507 -778 -2632 15907 -35435 8733 12256 3365 -2610 -2015 -2610 -2474 65871 -45453 -2237 -11353 -2038 5866 -2580 -64110 24301 -5661 17827 -4088 -1141 4629 -2556 -79571 5652 -26076 6317 16111 14087 592 -2556 5279 -16486 9602 -11805 -13857 8570 7971 -2542 -15936 -3036 259 31904 -21952 -1335 4377 -2533 -10324 46819 2170 -12934 11461 -11074 -3031 -2532 -10182 -35135 -10813 -23315 6342 23798 3934 -2518 -31397 -21685 -20156 20394 -1753 13893 340 -2509 59065 6032 17433 -42566 1692 -1363 311 -2503 -71960 5249 41962 7130 18726 -10177 -4268 -2495 37850 19482 8090 1143 -6403 -11268 -3283 -2479 -2571 -35538 57225 -22502 8957 -466 -926 -2471 22389 833 -12325 -10367 13796 3960 -7320 -2465 -23786 -22088 47882 21207 862 -10371 -4520 -2445 7683 -11 -93044 -464 -5 11919 15183 -2419 -57628 60569 -26719 -4796 6343 5429 -676 -2395 11761 19782 -11456 -34428 -3426 15140 2666 -2392 15294 -414 -25006 349 2610 -12345 10323 -2381 -9454 33232 -20799 9281 -11521 5235 -928 -2351 -71090 -8338 18993 29345 -4256 6132 -2165 -2304 -17304 14180 26824 -1416 11293 -3801 -9825 -2239 -3184 -517 23486 -34409 8202 -10201 11412 -2228 -27932 33129 27693 -25477 -5929 7379 161 -2225 -24399 12933 14143 9300 107 -20106 7818 -2201 -39860 -5716 -6272 -2210 20306 -4878 3781 -2190 20242 5792 33613 -11400 -23793 7185 -91 -2166 4781 -12857 13198 -22910 -3594 22413 -4128 -2163 8314 -33053 -352 11867 2442 -5072 3529 -2152 -16434 593 3855 20799 -11689 12508 -7722 -2111 -71703 26683 -14746 17438 -5011 -3603 10173 -2105 37352 23111 11686 -9962 3860 2575 -15382 -2087 -2314 -14104 517 -12194 -14780 6108 13515 -2064 -17917 49201 -6915 -13323 10538 -13536 2513 -2049 -38990 -19303 -29241 20005 -2676 11431 5884 -2040 51472 8414 8348 -42955 769 -3825 5855 -2026 30257 21864 -995 754 -7326 -13730 2261 -2002 14796 3215 -21410 -10756 12873 1498 -1776 -1996 -31379 -19706 38797 20818 -61 -12833 1024 -1964 62970 -24122 -15490 3321 -4991 1304 -2028 -1950 -65221 62951 -35804 -5185 5420 2967 4868 -1934 1334 -65692 24302 23385 2274 2201 -3265 -1912 -17047 35614 -29884 8892 -12444 2773 4616 -1882 -78683 -5956 9908 28956 -5179 3670 3379 -1858 -9294 -46743 25171 -676 -14948 13381 6721 -1850 15666 -10372 -44379 11459 -10109 17807 327 -1835 -24897 16562 17739 -1805 10370 -6263 -4281 -1756 -31992 15315 5058 8911 -816 -22568 13362 -1751 -10565 71882 -50942 -13731 -2013 9343 -689 -1732 -47453 -3334 -15357 -2599 19383 -7340 9325 -1721 -72201 30312 -11150 6333 5252 10240 -1926 -1721 12649 8174 24528 -11789 -24716 4723 5453 -1698 -2954 71479 17096 -12918 602 -14921 -5549 -1697 -2812 -10475 4113 -23299 -4517 19951 1416 -1694 721 -30671 -9437 11478 1519 -7534 9073 -1686 25681 5700 -78987 23613 6358 -3108 2679 -1683 -24027 2975 -5230 20410 -12612 10046 -2178 -1636 29759 25493 2601 -10351 2937 113 -9838 -1618 -9907 -11722 -8568 -12583 -15703 3646 19059 -1598 77933 -1844 8521 3726 -14927 -81 -10090 -1571 43879 10796 -737 -43344 -154 -6287 11399 -1557 22664 24246 -10080 365 -8249 -16192 7805 -1533 7203 5597 -30495 -11145 11950 -964 3768 -1503 -54433 -35973 9297 8919 19215 -67 2531 -1495 55377 -21740 -24575 2932 -5914 -1158 3516 -1480 14814 5194 37543 -10332 14565 -25228 -1092 -1469 -9934 38840 41750 -1400 434 -7648 -12343 -1465 -6259 -63310 15217 22996 1351 -261 2279 -1393 1564 6304 17912 44876 -5326 -2519 -20226 -1381 8073 -7990 -53464 11070 -11032 15345 5871 -1366 -32490 18944 8654 -2194 9447 -8725 1263 -1328 15684 -8393 14574 11883 -8417 -8919 1011 -1304 223 -27042 -5841 373 11782 6309 -3026 -1293 -24525 6604 -1634 9305 -2349 23889 -14277 -1266 48397 -54379 79 14450 -6082 6115 -3278 -1252 -79794 32694 -20235 5944 4329 7778 3618 -1229 -10547 73861 8011 -13307 -321 -17383 -5 -1228 -10405 -8093 -4972 -23688 -5440 17489 6960 -1225 -6872 -28289 -18522 11089 596 -9996 14617 -1214 -31620 5357 -14315 20021 -13535 7584 3366 -1190 -47081 -13292 -34730 8511 6664 22812 -671 -1167 22166 27875 -6484 -10740 2014 -2349 -4294 -1137 -39470 -13695 33308 9324 9279 -1452 -5531 -1129 70340 538 -564 3337 -15850 -2543 -4546 -1088 15071 26628 -19165 -24 -9172 -18654 13349 -1064 -390 7979 -39580 -11534 11027 -3426 9312 -1026 47784 -19358 -33660 2543 -6837 -3620 9060 -1023 -86774 55 4419 17462 4161 15051 -3176 -1014 3688 27772 42008 -45498 7606 -205 -3205 -1000 -17527 41222 32665 -1789 -489 -10110 -6799 -999 -17385 -40732 19682 -12170 -5608 24762 166 -996 -13852 -60928 6132 22607 428 -2723 7823 -946 -9774 -41135 87720 -11357 -2993 498 -4694 -924 -6029 8686 8827 44487 -6249 -4981 -14682 -897 -40083 21326 -431 -2583 8524 -11187 6807 -865 54266 16910 -54718 -20080 3594 2950 3755 -859 8091 -6011 5489 11494 -9340 -11381 6555 -835 -7370 -24660 -14926 -16 10859 3847 2518 -821 -28585 -11210 -24269 43693 2764 -6058 -1076 -797 40804 -51997 -9006 14061 -7005 3653 2266 -760 -18140 76243 -1074 -13696 -1244 -19845 5539 -739 69842 4167 3032 -7768 -5587 11300 -16645 -698 14573 30257 -15569 -11129 1091 -4811 1250 -674 -888 11608 -35984 -22639 21290 10417 -2787 -668 -47063 -11313 24223 8935 8356 -3914 13 -660 62747 2920 -9649 2948 -16773 -5005 998 -636 47286 -15729 -30064 -8562 3426 10223 -3039 -630 1111 -38650 30143 23012 -9508 -4108 -239 -606 -14350 -57299 9728 11502 10691 11120 -4276 -572 30149 17514 42181 1183 -8090 3539 -19150 -554 -94367 2437 -4666 17073 3238 12589 2368 -531 -25120 43604 23580 -2178 -1412 -12572 -1255 -527 -21445 -58546 -2953 22218 -495 -5185 13367 -522 -18 -1979 -58953 -424 -1692 26726 -684 -477 -17367 -38753 78635 -11746 -3916 -1964 850 -469 7593 -2382 9085 389 923 2462 -5544 -428 -47676 23708 -9516 -2972 7601 -13649 12351 -396 46673 19292 -63803 -20469 2671 488 9299 -393 -3035 16567 9954 -23672 -16299 13642 4442 -390 498 -3629 -3596 11105 -10263 -13843 12099 -379 -24250 30017 611 20037 -24394 3737 848 -366 -14963 -22278 -24011 -405 9936 1385 8062 -358 9997 14093 -93561 11730 14775 5811 1668 -355 -39711 11368 -19804 8527 -4195 18965 -3189 -352 -36178 -8828 -33354 43304 1841 -8520 4468 -316 -10885 -2485 57577 -34369 6515 4606 -4455 -302 -32100 10965 48234 9340 -1580 -5299 -8049 -270 62249 6549 -6053 -8157 -6510 8838 -11101 -251 25361 -68667 29532 2975 14886 -7845 -1087 -229 6980 32639 -24654 -11518 168 -7273 6794 -218 -17768 66285 -20447 -2586 -13963 10307 -4457 -199 -54656 -8931 15138 8546 7433 -6376 5557 -191 55154 5302 -18734 2559 -17696 -7467 6542 -167 39693 -13347 -39149 -8951 2503 7761 2505 -137 -21943 -54917 643 11113 9768 8658 1268 -114 47304 -13750 28889 -8138 5118 -16503 -2355 -103 22556 19896 33096 794 -9013 1077 -13606 -76 10628 -18949 -869 24061 17222 -11180 -9986 -62 -32713 45986 14495 -2567 -2335 -15034 4289 frobby-0.9.5/test/bench/nearGenericV15G50.test000066400000000000000000000144061401527164200207500ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]; I = monomialIdeal( x1^9135*x2^7638*x3^4261*x4^4688*x5^1394*x6^3187*x7^7073*x8^7587*x9^6917*x10^8318*x11^5112*x12^7062*x13^736*x14^1710*x15^7520, x1^5187*x2^9774*x3^140*x4^834*x5^6572*x6^8919*x7^7681*x8^2980*x9^2707*x10^2354*x11^7517*x12^6331*x13^8062*x14^7081*x15^4620, x1^8605*x2^5101*x3^8521*x4^5095*x5^5271*x6^3016*x7^763*x8^6262*x9^7529*x10^666*x11^7906*x12^1656*x13^8921*x14^945*x15^5118, x1^208*x2^2465*x3^4260*x4^4959*x5^9860*x6^9979*x7^4893*x8^2370*x9^7012*x10^8632*x11^131*x12^8029*x13^657*x14^3799*x15^5525, x1^3824*x2^4018*x3^6356*x4^1789*x5^8371*x6^434*x7^3087*x8^1498*x9^3067*x10^6423*x11^3707*x12^1881*x13^5332*x14^5716*x15^2937, x1^6436*x2^8831*x3^2772*x4^4584*x5^7007*x6^7250*x7^2972*x8^8242*x9^7648*x10^2629*x11^298*x12^4885*x13^9687*x14^7415*x15^8020, x1^1288*x2^2402*x3^6473*x4^7730*x5^7486*x6^6421*x7^3734*x8^4091*x9^1269*x10^8427*x11^6182*x12^7945*x13^9392*x14^4973*x15^2175, x1^9486*x2^5703*x3^2604*x4^9572*x5^3204*x6^653*x7^775*x8^6366*x9^7763*x10^8923*x11^260*x12^1515*x13^2217*x14^3295*x15^5279, x1^2179*x2^5630*x3^6062*x4^7132*x5^8930*x6^9308*x7^6617*x8^4118*x9^6753*x10^6151*x11^4958*x12^994*x13^6891*x14^5686*x15^3187, x1^7924*x2^7114*x3^5611*x4^6765*x5^3540*x6^9625*x7^4468*x8^9636*x9^5106*x10^1988*x11^1447*x12^5869*x13^3525*x14^1701*x15^8146, x1^3769*x2^4148*x3^5877*x4^1604*x5^2085*x6^8334*x7^4047*x8^8587*x9^9804*x10^1839*x11^4874*x12^3063*x13^8653*x14^972*x15^6861, x1^8920*x2^8878*x3^5731*x4^1325*x5^13*x6^8409*x7^6749*x8^15*x9^4842*x10^4130*x11^7010*x12^8031*x13^9238*x14^7374*x15^897, x1^6899*x2^5059*x3^9644*x4^2968*x5^4687*x6^3697*x7^8053*x8^6792*x9^6057*x10^7304*x11^4725*x12^905*x13^1049*x14^8280*x15^9313, x1^5902*x2^4009*x3^827*x4^1643*x5^9717*x6^2515*x7^4072*x8^4860*x9^292*x10^1911*x11^181*x12^7349*x13^9521*x14^1029*x15^6152, x1^1320*x2^9239*x3^5895*x4^5995*x5^9758*x6^1462*x7^5239*x8^8205*x9^5205*x10^7053*x11^7328*x12^8891*x13^8629*x14^3674*x15^9723, x1^9013*x2^2930*x3^2116*x4^3902*x5^2902*x6^5592*x7^8843*x8^4906*x9^6200*x10^4568*x11^9334*x12^5945*x13^7126*x14^6684*x15^962, x1^4975*x2^2731*x3^1528*x4^6110*x5^272*x6^934*x7^3218*x8^5038*x9^5587*x10^5886*x11^3868*x12^9233*x13^7993*x14^537*x15^5598, x1^9444*x2^5572*x3^2765*x4^7301*x5^2920*x6^8259*x7^6524*x8^961*x9^9884*x10^4340*x11^4993*x12^1441*x13^1695*x14^2952*x15^7380, x1^2927*x2^9489*x3^1844*x4^554*x5^8832*x6^8066*x7^5555*x8^5624*x9^4696*x10^8179*x11^4579*x12^3255*x13^245*x14^1173*x15^6766, x1^2679*x2^114*x3^4918*x4^7277*x5^5521*x6^4862*x7^8938*x8^5496*x9^9356*x10^9516*x11^5592*x12^3306*x13^5005*x14^4570*x15^1902, x1^9357*x2^1787*x3^6656*x4^3358*x5^1053*x6^4399*x7^5601*x8^4420*x9^8584*x10^8229*x11^8243*x12^9175*x13^4355*x14^6201*x15^9955, x1^4781*x2^1690*x3^5821*x4^6272*x5^4787*x6^4569*x7^8804*x8^2416*x9^1379*x10^8603*x11^9195*x12^7106*x13^5375*x14^5742*x15^3528, x1^22*x2^2983*x3^3583*x4^4210*x5^4167*x6^2246*x7^6418*x8^7456*x9^7069*x10^2100*x11^3373*x12^7473*x13^6560*x14^6744*x15^2134, x1^2099*x2^3779*x3^7093*x4^9149*x5^9358*x6^1791*x7^7494*x8^2549*x9^1848*x10^3145*x11^8988*x12^1793*x13^2918*x14^9970*x15^8208, x1^6729*x2^140*x3^4391*x4^2709*x5^9073*x6^7245*x7^7085*x8^310*x9^4736*x10^3022*x11^552*x12^8615*x13^4140*x14^679*x15^4405, x1^6509*x2^1466*x3^5839*x4^584*x5^1343*x6^2113*x7^3479*x8^8331*x9^6832*x10^8208*x11^481*x12^2152*x13^442*x14^87*x15^4509, x1^8978*x2^7275*x3^7722*x4^4540*x5^9361*x6^4512*x7^5018*x8^9173*x9^3643*x10^3027*x11^1034*x12^6678*x13^5835*x14^1375*x15^1690, x1^3682*x2^9036*x3^3727*x4^5608*x5^457*x6^4649*x7^9521*x8^8852*x9^584*x10^5497*x11^8599*x12^4817*x13^1967*x14^5475*x15^2699, x1^8956*x2^8505*x3^5835*x4^4000*x5^6905*x6^3728*x7^6432*x8^2380*x9^1492*x10^8330*x11^1940*x12^6755*x13^3404*x14^3952*x15^6890, x1^230*x2^9837*x3^2459*x4^7056*x5^6018*x6^630*x7^5336*x8^2481*x9^6429*x10^7812*x11^7413*x12^3415*x13^9943*x14^2907*x15^684, x1^6082*x2^8859*x3^6654*x4^9250*x5^8692*x6^7709*x7^5497*x8^65*x9^8330*x10^5516*x11^2913*x12^363*x13^2723*x14^7488*x15^348, x1^9905*x2^191*x3^2369*x4^2703*x5^8512*x6^5174*x7^5292*x8^1273*x9^7327*x10^7710*x11^8547*x12^2*x13^3467*x14^2875*x15^9433, x1^2685*x2^3090*x3^9801*x4^5962*x5^6961*x6^455*x7^6816*x8^6926*x9^8188*x10^2042*x11^3596*x12^7906*x13^2495*x14^525*x15^9390, x1^5935*x2^5057*x3^4185*x4^3600*x5^8996*x6^7917*x7^1275*x8^6455*x9^4365*x10^4748*x11^927*x12^5132*x13^2823*x14^4641*x15^2730, x1^3204*x2^857*x3^4118*x4^8448*x5^5881*x6^1265*x7^7917*x8^1095*x9^4408*x10^6814*x11^1160*x12^9850*x13^9433*x14^7187*x15^6032, x1^3731*x2^5110*x3^4445*x4^1731*x5^5517*x6^1140*x7^4479*x8^6488*x9^5331*x10^7489*x11^1213*x12^4567*x13^4846*x14^1370*x15^969, x1^3908*x2^1400*x3^9291*x4^4026*x5^6617*x6^5597*x7^51*x8^1676*x9^668*x10^3276*x11^3071*x12^4606*x13^9073*x14^1340*x15^2620, x1^3843*x2^1564*x3^4096*x4^2776*x5^925*x6^6601*x7^8987*x8^3839*x9^2559*x10^7316*x11^8082*x12^5928*x13^4384*x14^3178*x15^8567, x1^2240*x2^7987*x3^3516*x4^9417*x5^6012*x6^8447*x7^2877*x8^2249*x9^6179*x10^5022*x11^5325*x12^2291*x13^4634*x14^5445*x15^7740, x1^6392*x2^724*x3^6272*x4^2467*x5^4787*x6^201*x7^8704*x8^767*x9^6576*x10^7937*x11^8714*x12^9599*x13^386*x14^8124*x15^1528, x1^5582*x2^2611*x3^2181*x4^9306*x5^901*x6^8557*x7^5277*x8^7347*x9^5184*x10^9832*x11^8891*x12^4292*x13^8165*x14^647*x15^8326, x1^4852*x2^4111*x3^9812*x4^4767*x5^7629*x6^1679*x7^5205*x8^6287*x9^141*x10^6677*x11^338*x12^5549*x13^3499*x14^8961*x15^1615, x1^8049*x2^2490*x3^6401*x4^3891*x5^3513*x6^6205*x7^3487*x8^648*x9^4376*x10^4221*x11^8952*x12^8252*x13^1952*x14^8116*x15^7570, x1^9910*x2^2665*x3^9146*x4^8215*x5^756*x6^9106*x7^7710*x8^4062*x9^191*x10^5306*x11^5428*x12^6061*x13^7393*x14^4145*x15^6141, x1^3008*x2^5118*x3^7573*x4^1374*x5^6374*x6^4480*x7^7847*x8^7167*x9^8137*x10^5468*x11^7105*x12^8063*x13^4809*x14^382*x15^7483, x1^8859*x2^4272*x3^4682*x4^255*x5^4377*x6^4285*x7^4472*x8^4530*x9^8413*x10^3235*x11^9231*x12^7463*x13^5662*x14^8508*x15^3645, x1^3523*x2^4168*x3^9857*x4^1500*x5^405*x6^7267*x7^4002*x8^5188*x9^9075*x10^1460*x11^6547*x12^8153*x13^3764*x14^7031*x15^4885, x1^4104*x2^5133*x3^7498*x4^3799*x5^309*x6^7067*x7^3835*x8^1746*x9^2137*x10^1472*x11^9581*x12^6035*x13^205*x14^567*x15^6580, x1^8575*x2^3152*x3^9571*x4^3379*x5^9619*x6^5912*x7^6331*x8^7202*x9^77*x10^751*x11^6720*x12^7345*x13^2658*x14^3951*x15^826, x1^2931*x2^7916*x3^4335*x4^6894*x5^5995*x6^4708*x7^508*x8^2011*x9^5970*x10^6679*x11^1813*x12^4816*x13^9815*x14^7887*x15^550 ); frobby-0.9.5/test/bench/run_alexdual_bench000077500000000000000000000005401401527164200206170ustar00rootroot00000000000000#!/usr/bin/env bash profileFile=../../bin/profile.alexdual frobby=../../bin/frobby if [ "$1" = "_profile" ]; then rm -f gmon.out fi ./benchHelper alexdual nearGenericV15G50.test $* ./benchHelper alexdual sqfreeV25G1000.test $* ./benchHelper alexdual n11d11.test $* if [ "$1" = "_profile" ]; then gprof $frobby > $profileFile rm -f gmon.out fi frobby-0.9.5/test/bench/run_dimension_bench000077500000000000000000000005741401527164200210140ustar00rootroot00000000000000#!/usr/bin/env bash profileFile=../../bin/profile.codim frobby=../../bin/frobby if [ "$1" = "_profile" ]; then rm -f gmon.out fi ./benchHelper dimension edgeV90G600.test _noOFormat $* ./benchHelper dimension sqfreeV80G1000.test _noOFormat $* ./benchHelper dimension king9.test _noOFormat $* if [ "$1" = "_profile" ]; then gprof $frobby > $profileFile rm -f gmon.out fi frobby-0.9.5/test/bench/run_hilbert_bench000077500000000000000000000005361401527164200204560ustar00rootroot00000000000000#!/usr/bin/env bash profileFile=../../bin/profile.hilbert frobby=../../bin/frobby if [ "$1" = "_profile" ]; then rm -f gmon.out fi ./benchHelper hilbert nearGenericV15G50.test $* ./benchHelper hilbert nearGenericV15G50.test $* ./benchHelper hilbert n8d30.test $* if [ "$1" = "_profile" ]; then gprof $frobby > $profileFile rm -f gmon.out fi frobby-0.9.5/test/bench/run_optimize_bench000077500000000000000000000010601401527164200206560ustar00rootroot00000000000000#!/usr/bin/env bash profileFile=../../bin/profile.optimize frobby=../../bin/frobby if [ "$1" = "_profile" ]; then rm -f gmon.out fi ./benchHelper optimize nearGenericV15G50.test $* \ -displayLevel 0 -displayValue off ./benchHelper optimize sqfreeV25G1000.test $* \ -displayLevel 0 -displayValue off cat n11d11.test n11d11 > /tmp/n11d11.test ./benchHelper optimize /tmp/n11d11.test $* \ -displayLevel 0 -displayValue off -chopFirstAndSubtract rm -f /tmp/n11d11.test if [ "$1" = "_profile" ]; then gprof $frobby > $profileFile rm -f gmon.out fi frobby-0.9.5/test/bench/runbench000077500000000000000000000015161401527164200166050ustar00rootroot00000000000000#!/usr/bin/env bash frobby=../../bin/frobby logFile=../../bin/benchLog # Build info in temporary place first, so that if this benchmark gets # interrupted, the log file does not contain noise about that. This # also allows a nice column organization using the column tool. echo -e "\n********************************"|tee /tmp/benchHeader # to indicate DEBUG or PROFILE builds $frobby transform -iformat null -oformat null 2>&1|tee -a /tmp/benchHeader echo -ne "Options: $*\nDate: "|tee -a /tmp/benchHeader date|tee -a /tmp/benchHeader echo|tee -a /tmp/benchHeader ./run_alexdual_bench $* 2>&1|tee /tmp/bench ./run_hilbert_bench $* 2>&1|tee -a /tmp/bench ./run_optimize_bench $* 2>&1|tee -a /tmp/bench ./run_dimension_bench $* 2>&1|tee -a /tmp/bench column -t /tmp/bench|cat /tmp/benchHeader - >> $logFile rm -f /tmp/bench /tmp/benchHeader frobby-0.9.5/test/bench/sqfreeV20G1000.test000066400000000000000000001110541401527164200201400ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20]; I = monomialIdeal( x1*x2*x3*x4*x6*x7*x10*x12*x13*x17*x18, x2*x3*x9*x13*x14*x16*x17*x20, x1*x2*x3*x6*x15*x19*x20, x1*x2*x3*x5*x6*x9*x11*x12*x13*x14*x16*x19, x1*x2*x3*x4*x7*x9*x11*x13*x14*x15*x17*x19*x20, x5*x7*x10*x11*x14*x19, x2*x5*x6*x7*x9*x10*x11*x12*x14*x15*x16*x18, x1*x3*x4*x5*x8*x9*x10*x11*x15*x17*x20, x2*x5*x7*x10*x12*x15*x17*x18*x19, x3*x5*x6*x8*x10*x11*x12*x14*x20, x1*x7*x8*x10*x12*x16*x17*x18*x19, x1*x4*x5*x6*x8*x9*x13*x14*x18, x1*x4*x6*x7*x14*x15*x19*x20, x1*x2*x3*x5*x7*x8*x9*x10*x11*x12*x13*x16*x18, x3*x4*x5*x6*x8*x9*x14*x16*x17*x19*x20, x3*x5*x6*x8*x10*x11*x12*x15*x16*x17*x19*x20, x5*x8*x10*x13*x14*x17*x18*x20, x2*x3*x4*x5*x6*x8*x11*x13*x14*x15*x16*x17*x19*x20, x3*x4*x9*x10*x11*x15*x18, x6*x7*x8*x9*x15*x20, x1*x3*x5*x8*x10*x14*x16*x17*x20, x1*x5*x6*x7*x10*x11*x12*x13*x16, x6*x9*x12*x13*x15*x18*x19, x4*x7*x9*x10*x13*x14*x17*x20, x1*x2*x3*x4*x6*x7*x9*x10*x12*x14*x15*x16*x17, x1*x3*x5*x6*x7*x8*x11*x12*x13*x14*x15*x16*x17*x18*x19, x6*x8*x10*x13*x14*x15*x18*x19*x20, x2*x4*x5*x8*x9*x10*x16*x18, x2*x5*x7*x11*x13*x14*x15*x17*x19*x20, x1*x2*x5*x8*x9*x12*x14*x19*x20, x3*x5*x6*x10*x11*x12*x15*x16*x18*x19, x3*x5*x7*x8*x9*x10*x11*x12*x13*x14*x17, x2*x4*x6*x7*x8*x9*x10*x13*x17*x19, x3*x4*x8*x10*x12*x13*x16*x18*x19, x2*x3*x4*x6*x10*x12*x13*x14*x15*x17*x18*x20, x1*x4*x6*x8*x9*x11*x12*x13*x14*x18*x20, x5*x7*x9*x13*x16*x18*x20, x1*x3*x6*x8*x9*x10*x11*x12*x15*x16*x19, x1*x5*x6*x9*x11*x20, x4*x5*x7*x9*x10*x11*x12*x14*x15*x18*x20, x1*x3*x5*x9*x10*x11*x12*x13*x17, x3*x5*x6*x9*x10*x11*x13*x17*x18, x2*x3*x4*x5*x6*x7*x8*x10*x11*x12*x13*x15*x17*x19, x2*x4*x5*x6*x7*x9*x10*x11*x13*x15*x17*x18*x19, x1*x3*x5*x13*x14*x18*x20, x3*x5*x7*x11*x12*x14*x15*x18*x20, x2*x3*x4*x9*x11*x12*x14*x16*x17, x2*x3*x4*x8*x9*x10*x15*x17*x18*x19, x1*x2*x3*x9*x10*x13*x15*x17*x18*x20, x1*x4*x12*x14*x16*x18*x19, x2*x3*x4*x5*x7*x8*x10*x12*x13*x17*x18, x1*x2*x5*x6*x7*x9*x11*x13*x15*x17*x19, x3*x8*x9*x10*x12*x13*x16*x17*x18, x1*x2*x8*x15*x18*x19*x20, x1*x2*x3*x9*x10*x11*x12*x17*x18*x20, x1*x2*x6*x8*x9*x12*x14*x18, x1*x3*x4*x6*x7*x8*x11*x12*x14*x16*x18, x2*x7*x8*x12*x13*x15*x16*x20, x3*x5*x6*x7*x9*x13*x16*x17*x18*x19, x5*x9*x10*x11*x13*x15*x16*x17*x19*x20, x6*x7*x8*x13*x20, x1*x5*x7*x8*x9*x10*x11*x12*x13*x19*x20, x5*x6*x8*x9*x11*x12*x13*x18*x20, x2*x5*x8*x9*x10*x15*x19*x20, x3*x4*x6*x9*x10*x11*x13*x14*x15*x17, x1*x5*x7*x9*x11*x16*x18*x19*x20, x2*x3*x4*x5*x9*x10*x12*x14*x16, x1*x2*x4*x5*x6*x7*x8*x9*x11*x12*x14*x19, x5*x6*x8*x9*x10*x11*x15*x16*x17*x18*x19*x20, x7*x8*x13*x16*x17*x18*x19*x20, x4*x8*x10*x12*x13*x15*x16*x17*x20, x2*x3*x9*x10*x11*x12*x13*x17*x18*x19*x20, x1*x2*x3*x5*x6*x9*x10*x12*x14*x17*x18*x19*x20, x3*x4*x5*x6*x8*x10*x12*x14*x15*x16*x18*x20, x1*x4*x6*x10*x11*x14*x15*x17*x19*x20, x1*x2*x4*x5*x6*x8*x9*x12*x13*x14*x19, x1*x3*x5*x8*x9*x18*x19*x20, x1*x2*x3*x4*x5*x6*x7*x9*x10*x13*x15*x17*x20, x4*x5*x10*x12*x17*x18*x19, x1*x2*x3*x6*x7*x8*x14*x18*x20, x1*x3*x4*x10*x12*x15*x18*x19*x20, x6*x7*x8*x10*x12*x14*x15*x16*x17*x19*x20, x1*x2*x3*x6*x8*x9*x10*x12*x13*x19*x20, x1*x2*x3*x10*x11*x13*x15*x16*x17*x18*x19*x20, x1*x7*x10*x11*x13*x14*x16, x1*x2*x3*x4*x5*x6*x10*x11*x12*x13*x18*x20, x1*x2*x3*x7*x8*x9*x11*x12*x17*x18*x19, x3*x4*x6*x10*x11*x12*x13*x14, x2*x3*x9*x11*x13*x16*x18*x20, x1*x2*x4*x5*x7*x8*x10*x13*x16*x18*x19*x20, x2*x3*x4*x5*x11*x14*x15*x16*x18*x19*x20, x1*x2*x3*x6*x9*x10*x13*x17*x19*x20, x1*x2*x4*x5*x6*x7*x12*x13*x14*x15*x18, x2*x3*x5*x8*x11*x14*x18*x19*x20, x1*x2*x7*x8*x9*x11*x12*x16*x17*x19*x20, x3*x4*x10*x11*x13*x15*x18*x20, x1*x8*x11*x12*x13*x14*x15*x16*x17*x18*x20, x3*x4*x5*x6*x7*x8*x9*x12*x14*x16*x18*x19*x20, x3*x4*x10*x11*x16*x17, x2*x7*x10*x13*x14*x16*x18*x20, x2*x3*x4*x9*x12*x14*x15*x18*x20, x1*x2*x4*x6*x9*x11*x14*x15*x16*x17*x18*x19*x20, x2*x3*x8*x10*x11*x13*x14*x16*x18*x19*x20, x2*x4*x6*x8*x11*x12*x13*x15*x17*x18*x19, x1*x3*x4*x6*x10*x13*x14*x19*x20, x1*x3*x4*x7*x9*x11*x13*x15*x16*x17*x18*x19*x20, x1*x3*x5*x6*x9*x10*x11*x12*x13*x15*x16, x2*x3*x4*x7*x8*x13*x14*x19, x1*x2*x3*x4*x5*x7*x10*x14*x15*x16*x19, x1*x2*x3*x4*x7*x10*x12*x16*x17*x18*x20, x1*x3*x6*x7*x10*x11*x12*x13*x17*x18, x2*x3*x7*x9*x11*x12*x14*x16*x19*x20, x2*x5*x6*x7*x9*x13*x14*x16, x4*x5*x6*x8*x9*x13*x17*x19, x1*x2*x3*x4*x5*x6*x9*x12*x13*x14*x17*x19*x20, x1*x4*x9*x10*x11*x12*x18, x1*x5*x6*x9*x10*x13*x15*x18*x19, x2*x5*x8*x10*x11*x13*x14*x19*x20, x1*x3*x9*x10*x13*x14*x15*x16*x19, x5*x6*x7*x9*x12*x13*x15*x19, x4*x10*x11*x12*x18*x19, x4*x6*x7*x9*x10*x11*x13*x14*x16*x20, x1*x2*x4*x8*x9*x13*x14*x16*x17*x18*x20, x1*x2*x8*x9*x10*x11*x13*x15*x16*x17*x18*x20, x1*x4*x5*x7*x8*x9*x11*x12*x13*x14*x15*x16*x20, x2*x3*x6*x10*x11*x14*x16*x18*x19*x20, x3*x5*x12*x13*x16*x17*x20, x3*x5*x6*x7*x11*x13*x16*x20, x2*x3*x6*x7*x8*x9*x16*x17*x19, x2*x3*x7*x9*x11*x14*x16*x18, x1*x2*x7*x8*x11*x12*x13*x14*x16*x18, x1*x2*x3*x4*x5*x6*x7*x10*x14*x15*x17, x6*x7*x9*x11*x15*x18*x19*x20, x2*x5*x6*x9*x11*x15*x16*x17, x4*x5*x7*x8*x10*x11*x13*x15*x16*x20, x1*x2*x3*x5*x6*x11*x12*x19*x20, x1*x2*x4*x5*x6*x9*x10*x12*x13*x15*x18, x1*x5*x6*x7*x9*x12*x13*x14*x16*x17*x18*x19, x1*x3*x5*x6*x8*x12*x15*x16*x17*x20, x1*x5*x6*x10*x11*x12*x13*x14*x15*x16*x18*x19*x20, x1*x5*x7*x11*x12*x13*x16*x17*x18*x20, x1*x2*x3*x7*x8*x10*x12*x15*x16*x17*x18*x20, x1*x2*x7*x8*x12*x13*x15*x17, x3*x4*x7*x8*x10*x11*x12*x14*x17*x18*x20, x1*x3*x7*x8*x9*x15*x16*x17, x1*x3*x4*x7*x10*x11*x12*x13*x14*x17, x1*x3*x7*x9*x11*x12*x14*x15, x2*x3*x4*x5*x7*x8*x11*x12*x14*x15*x16*x18*x19, x2*x4*x5*x9*x10*x12*x15*x16*x18*x19*x20, x1*x4*x5*x9*x11*x14*x16*x19, x4*x7*x10*x14*x15*x18*x19, x1*x4*x5*x6*x7*x11*x12*x13*x15*x18*x19*x20, x6*x8*x11*x12*x14*x15*x16*x17*x18*x19*x20, x2*x3*x4*x6*x8*x9*x11*x12*x15*x16*x17*x18*x20, x1*x3*x8*x9*x12*x13*x14*x15*x19*x20, x2*x3*x5*x6*x8*x10*x12*x13*x16*x17*x18, x1*x2*x4*x10*x11*x14*x15*x17, x1*x3*x4*x5*x6*x12*x16*x19*x20, x3*x5*x7*x8*x9*x11*x16*x17*x18, x1*x3*x4*x7*x8*x9*x10*x11*x12*x13*x14*x20, x1*x2*x5*x8*x10*x13*x15*x16*x17*x20, x1*x2*x3*x8*x10*x11*x14*x15*x16*x17*x18*x20, x6*x8*x9*x10*x11*x12*x13*x14*x18*x19, x5*x6*x9*x11*x12*x13*x15*x16*x17*x18*x20, x2*x6*x9*x11*x12*x14*x20, x2*x3*x7*x9*x13*x14*x15*x17*x18*x19*x20, x1*x2*x11*x12*x13*x14*x15*x17*x18*x19, x1*x2*x6*x9*x10*x13*x14*x15*x17*x18*x19*x20, x2*x3*x5*x6*x7*x9*x10*x13*x19, x1*x3*x5*x9*x10*x14*x15*x19*x20, x4*x6*x8*x9*x11*x14*x15*x16*x18*x19*x20, x1*x3*x6*x8*x10*x11*x12*x13*x16*x20, x3*x6*x7*x9*x10*x11*x15*x17*x18*x20, x1*x3*x6*x10*x11*x12*x15*x16*x17*x19*x20, x2*x3*x4*x6*x9*x11*x14*x15*x16*x20, x1*x4*x7*x9*x11*x12*x18*x20, x1*x2*x3*x4*x6*x7*x12*x13*x17*x18*x20, x3*x4*x8*x9*x13*x14*x15*x17, x1*x2*x5*x8*x9*x13*x15*x20, x2*x8*x9*x14*x15*x16*x17*x19, x1*x2*x4*x5*x7*x10*x11*x13*x15*x18*x19, x3*x4*x6*x7*x9*x11*x12*x14*x16*x18*x20, x3*x4*x6*x8*x12*x13*x16*x19*x20, x2*x4*x7*x8*x9*x11*x14*x15*x19, x1*x2*x5*x7*x8*x9*x10*x16*x17*x18*x20, x1*x4*x6*x10*x11*x18*x19, x1*x4*x5*x7*x8*x12*x14*x16*x17*x19, x2*x4*x6*x7*x8*x9*x11*x17*x20, x2*x4*x6*x7*x8*x9*x10*x11*x13*x14*x18, x3*x4*x5*x9*x11*x12*x14*x16*x17*x18*x20, x1*x2*x4*x5*x9*x11*x12*x15*x16*x17, x3*x4*x6*x9*x10*x13*x15*x16*x19, x2*x5*x6*x8*x10*x11*x14*x15*x16*x17*x18, x3*x7*x12*x13*x16*x19*x20, x1*x2*x4*x6*x7*x8*x11*x15, x2*x3*x4*x5*x7*x8*x10*x11*x12*x15*x16, x1*x2*x4*x5*x7*x9*x10*x11*x13*x14*x15*x18*x20, x1*x4*x5*x7*x9*x11*x15*x16*x17*x18*x19, x3*x4*x5*x6*x9*x10*x11*x12*x14*x15*x20, x1*x5*x8*x9*x13*x15*x18*x19, x1*x2*x4*x8*x10*x12*x13*x14*x18*x20, x2*x6*x7*x9*x11*x13*x14*x19, x1*x3*x4*x6*x8*x9*x11*x12*x16*x18*x20, x2*x4*x5*x6*x10*x12*x14*x15*x16*x18*x19, x2*x4*x5*x7*x8*x9*x12*x13*x14*x18, x1*x4*x6*x8*x11*x15*x20, x2*x7*x11*x14*x15*x16*x19*x20, x3*x4*x6*x7*x8*x10*x14*x15*x16*x17, x1*x3*x4*x5*x6*x8*x9*x11*x12*x15*x18*x19, x1*x4*x5*x7*x13*x17*x19, x1*x2*x4*x6*x10*x11*x12*x14*x17, x2*x3*x5*x7*x9*x12*x13*x17*x18*x20, x3*x6*x7*x8*x9*x13*x14*x16*x17*x18, x1*x2*x6*x10*x11*x12*x16*x18, x7*x8*x9*x11*x12*x13*x16*x18*x19*x20, x1*x8*x10*x13*x16*x17*x18*x19, x1*x2*x3*x6*x8*x10*x11*x13*x15*x16*x17*x19, x1*x2*x3*x5*x6*x11*x13*x14*x18*x19, x1*x2*x3*x5*x6*x8*x10*x11*x12*x13*x17*x18*x20, x1*x2*x4*x5*x6*x10*x11*x12*x13*x15*x17*x18, x4*x6*x7*x8*x9*x11*x12*x16*x17*x18*x19, x1*x2*x4*x7*x8*x10*x11*x13*x16*x17*x18*x20, x1*x5*x6*x8*x14*x15*x20, x2*x3*x4*x10*x11*x15*x17*x19*x20, x4*x5*x6*x8*x11*x13*x14*x16*x18*x19, x1*x2*x3*x4*x6*x7*x9*x10*x11*x12*x17*x19*x20, x1*x5*x6*x8*x9*x10*x12*x17*x18*x19, x1*x3*x4*x10*x11*x14*x17*x18*x19*x20, x1*x2*x4*x5*x6*x7*x10*x12*x17, x2*x6*x7*x10*x11*x12*x13*x15*x18, x1*x2*x5*x7*x9*x11*x13*x15*x16*x17*x19*x20, x1*x2*x4*x7*x8*x9*x10*x12*x14*x16*x17*x19, x1*x2*x3*x6*x8*x9*x10*x11*x16, x2*x4*x6*x7*x8*x9*x13*x15*x16*x18, x2*x4*x6*x8*x11*x13*x14*x15*x16*x17*x18*x19, x2*x6*x7*x9*x11*x16*x17*x20, x1*x2*x3*x4*x5*x7*x9*x12*x14*x17*x18, x2*x5*x6*x9*x10*x11*x12*x18*x19*x20, x2*x5*x10*x13*x14*x15*x16*x18*x20, x1*x4*x5*x8*x13*x14*x15*x17*x19, x1*x2*x3*x5*x6*x7*x8*x9*x20, x1*x2*x4*x6*x7*x8*x9*x11*x12*x16*x19, x3*x4*x7*x8*x10*x12*x13*x18*x19, x5*x6*x9*x12*x13*x15*x16*x19*x20, x2*x3*x4*x6*x8*x9*x13*x14*x15*x16*x18, x1*x2*x3*x9*x10*x14*x16*x18*x20, x2*x3*x4*x7*x10*x11*x15*x16*x20, x1*x2*x3*x6*x7*x9*x11*x12*x13*x18, x3*x4*x5*x10*x14*x17*x18*x19*x20, x2*x5*x6*x15*x16*x18*x19*x20, x3*x4*x5*x6*x7*x11*x13*x15*x16*x17*x18, x2*x7*x10*x11*x13*x14*x15*x17, x1*x5*x6*x9*x10*x12*x14*x16*x18*x19, x3*x5*x6*x7*x9*x11*x13*x14*x16*x19, x1*x2*x5*x6*x11*x13*x14*x15*x16*x17*x19*x20, x2*x3*x6*x9*x10*x12*x14*x15*x16*x20, x1*x2*x3*x4*x5*x6*x8*x9*x10*x12*x15*x17*x19, x1*x6*x7*x8*x9*x10*x12*x13*x14*x18*x19, x1*x7*x9*x14*x15*x16*x17*x18*x19, x3*x4*x7*x8*x9*x11*x12*x14*x15*x16*x17*x18*x19, x5*x7*x9*x10*x11*x12*x13*x16*x19*x20, x1*x2*x3*x6*x7*x9*x12*x15*x16*x18, x1*x2*x3*x6*x7*x9*x12*x13*x14*x15*x20, x1*x2*x4*x5*x9*x12*x13*x15*x16*x17*x18*x20, x2*x3*x4*x5*x9*x10*x12*x13*x14*x15, x2*x5*x6*x7*x11*x13*x14*x15*x16*x17*x18, x1*x2*x3*x7*x9*x11*x12*x13*x16*x17*x18*x19, x6*x7*x9*x10*x12*x16*x17*x19*x20, x2*x4*x6*x12*x14*x15*x17*x18*x19, x3*x6*x7*x8*x10*x11*x12*x14*x16*x18, x2*x3*x9*x10*x11*x16*x17, x1*x2*x3*x4*x5*x7*x9*x14*x17*x18*x20, x2*x3*x4*x6*x7*x8*x14*x15*x17*x18*x19*x20, x4*x5*x6*x7*x8*x14*x15*x16*x19*x20, x4*x6*x8*x10*x13*x15*x20, x1*x2*x3*x4*x6*x12*x13*x14*x16*x17, x6*x8*x9*x12*x14*x15, x2*x3*x4*x5*x8*x9*x12*x13*x15*x18*x19, x4*x11*x13*x14*x15*x17*x18*x20, x3*x5*x9*x10*x12*x15*x16*x17*x19, x1*x2*x4*x5*x6*x7*x10*x11*x13*x14*x20, x3*x5*x7*x8*x9*x12*x13*x14*x17*x20, x2*x3*x5*x6*x8*x13*x14*x16*x18*x19*x20, x1*x3*x7*x9*x10*x13*x14*x18, x2*x3*x4*x6*x8*x9*x10*x12*x13*x15*x17, x1*x2*x3*x7*x10*x13*x14*x18*x20, x1*x3*x4*x5*x7*x9*x10*x12*x16*x17, x1*x3*x4*x6*x8*x9*x11*x12*x13*x15*x18, x1*x2*x4*x5*x7*x8*x12*x14*x16*x17*x18*x20, x1*x2*x5*x9*x15*x16*x17*x18*x19*x20, x3*x4*x5*x6*x8*x10*x12*x14*x15*x17*x20, x4*x5*x6*x9*x11*x14*x18, x3*x6*x9*x10*x11*x16*x17*x18*x19*x20, x1*x3*x4*x6*x8*x12*x13*x14*x17*x19*x20, x4*x7*x8*x10*x11*x12*x14*x15*x18*x20, x1*x5*x7*x9*x11*x12*x13*x17*x20, x1*x2*x5*x6*x10*x12*x13*x17*x19, x1*x2*x3*x6*x8*x9*x11*x13*x14*x18*x20, x2*x3*x5*x11*x13*x14*x15*x16*x18*x19*x20, x1*x2*x3*x5*x9*x12*x13*x15*x17, x1*x7*x11*x12*x13*x15*x16*x17*x18*x20, x1*x4*x5*x8*x9*x15*x16*x19, x2*x4*x5*x9*x10*x13*x16*x19*x20, x1*x2*x3*x5*x6*x9*x13*x15*x17*x18*x20, x1*x3*x4*x5*x6*x8*x11*x12*x15*x16*x17*x18*x19, x1*x3*x4*x7*x9*x11*x14*x15*x18*x19, x1*x3*x4*x6*x7*x9*x11*x12*x15*x20, x3*x4*x9*x12*x13*x14*x15*x17*x19, x1*x4*x5*x7*x10*x14*x19*x20, x5*x6*x7*x8*x9*x11*x12*x13*x18*x19, x1*x2*x4*x7*x11*x12*x15*x16*x18*x19*x20, x1*x3*x5*x6*x8*x10*x11*x13*x15*x16*x19*x20, x1*x4*x6*x8*x12*x13*x14*x16*x20, x3*x9*x10*x12*x14*x15*x16*x18*x19*x20, x1*x5*x7*x8*x10*x12*x13*x14*x15*x20, x3*x6*x8*x9*x10*x11*x13*x16*x17*x19, x2*x3*x5*x7*x8*x10*x14*x18*x19, x2*x3*x6*x7*x9*x12*x14*x15*x16*x18*x19*x20, x1*x4*x5*x8*x9*x10*x12*x13*x14*x19, x1*x2*x7*x9*x12*x14*x15*x16*x18*x19, x3*x4*x5*x7*x8*x11*x12*x13*x14*x17*x18*x19, x4*x5*x6*x9*x10*x12*x13*x14*x17*x19*x20, x1*x2*x3*x5*x11*x13*x14*x20, x2*x4*x5*x8*x9*x10*x11*x14*x15*x17*x19, x3*x6*x8*x10*x11*x14*x15*x17*x18*x20, x1*x2*x3*x4*x8*x10*x13*x15*x18*x19, x2*x3*x6*x7*x12*x13*x14*x16*x17, x2*x7*x9*x10*x12*x13*x19*x20, x1*x2*x3*x4*x8*x10*x11*x12*x15*x16*x18*x20, x1*x3*x4*x5*x6*x8*x11*x12*x13*x14*x15*x17, x1*x2*x3*x5*x7*x9*x10*x11*x14*x16, x2*x3*x4*x5*x6*x13*x17*x18*x19, x1*x9*x11*x12*x14*x15*x16*x18*x19*x20, x1*x4*x7*x8*x10*x13*x15*x16*x19, x1*x2*x6*x7*x9*x11*x13*x14, x8*x9*x12*x14*x15*x16*x17*x18*x20, x3*x5*x8*x10*x11*x15*x16*x17*x18*x20, x1*x2*x5*x6*x15*x16*x17*x18*x19, x2*x4*x5*x7*x13*x15*x17*x19*x20, x2*x3*x6*x8*x10*x11*x13*x15*x16*x17*x20, x1*x2*x4*x5*x8*x10*x11*x16*x17*x19*x20, x3*x6*x7*x8*x9*x13*x14*x15*x18, x2*x3*x4*x5*x6*x8*x10*x14*x15*x17*x18*x20, x1*x2*x3*x4*x6*x7*x8*x12*x14*x16*x17*x18, x7*x8*x10*x11*x14*x15*x16*x20, x1*x2*x3*x5*x6*x8*x11*x14*x15*x16*x18*x19, x3*x5*x6*x7*x10*x11*x13*x15*x19*x20, x1*x2*x4*x5*x6*x8*x11*x14*x16*x18*x19, x2*x4*x6*x8*x9*x10*x11*x12*x15*x17*x19, x1*x3*x7*x8*x9*x11*x15*x16*x18*x19*x20, x2*x3*x4*x5*x10*x11*x14*x15*x16*x18*x19, x2*x3*x4*x5*x7*x8*x10*x12*x14*x15*x17*x18, x1*x3*x6*x7*x8*x9*x11*x12*x15*x17, x1*x8*x9*x10*x13*x14*x16*x17*x18*x20, x1*x3*x4*x5*x6*x7*x8*x12*x14*x18*x20, x1*x5*x6*x11*x12*x13*x16*x17*x19*x20, x2*x7*x9*x10*x11*x14*x16*x20, x2*x4*x6*x8*x10*x11*x16*x17*x18*x20, x2*x6*x7*x8*x10*x15*x20, x2*x4*x6*x8*x9*x11*x13*x14*x16*x20, x1*x7*x8*x10*x12*x14*x15*x18*x19*x20, x1*x3*x4*x7*x9*x12*x16*x17*x19, x5*x8*x9*x10*x11*x12*x16*x17*x18, x2*x3*x5*x7*x8*x10*x14*x15*x16*x19*x20, x2*x3*x4*x5*x9*x10*x11*x15*x17, x3*x5*x6*x7*x9*x10*x16*x17*x18*x19*x20, x1*x2*x4*x7*x8*x9*x14*x16*x18*x19*x20, x1*x5*x7*x8*x9*x11*x12*x13*x17, x1*x4*x5*x8*x9*x10*x12*x15*x18, x3*x5*x6*x10*x13*x14*x15*x17*x19, x1*x6*x7*x11*x15*x17*x19*x20, x1*x7*x8*x9*x11*x14*x17*x18, x1*x3*x4*x6*x9*x12*x13*x16*x18, x4*x8*x9*x10*x12*x13*x14*x17*x18, x4*x5*x6*x10*x11*x12*x15*x16*x18, x5*x6*x7*x9*x12*x13*x15*x18*x20, x2*x5*x8*x9*x10*x13*x14*x16*x17*x20, x1*x4*x5*x8*x10*x12*x17*x18*x20, x1*x3*x5*x6*x9*x10*x12*x13*x17*x19, x2*x3*x4*x5*x9*x14*x15*x16, x2*x4*x6*x7*x11*x14*x16*x18*x19, x2*x3*x5*x6*x8*x9*x11*x14*x16*x18, x1*x2*x3*x5*x7*x9*x14*x15*x16*x18*x19, x3*x5*x6*x10*x11*x12*x13*x15*x17*x18*x19, x1*x2*x3*x8*x9*x10*x12*x13*x17, x1*x3*x4*x5*x8*x9*x10*x13*x14*x16*x19, x2*x5*x6*x11*x12*x13*x16*x17*x18*x19, x1*x2*x3*x5*x6*x12*x14*x15*x16*x18*x20, x2*x3*x4*x5*x6*x7*x8*x12*x14*x15*x17*x20, x1*x2*x3*x4*x5*x7*x8*x9*x13*x15*x19, x1*x3*x4*x5*x6*x8*x10*x11*x16*x18*x20, x3*x4*x5*x8*x9*x11*x12*x13*x15*x17*x18*x19*x20, x1*x2*x3*x4*x5*x7*x9*x10*x13*x14*x15*x19, x1*x2*x3*x4*x6*x9*x10*x12*x13*x14*x17, x4*x7*x9*x10*x15*x16*x17*x18*x20, x2*x3*x9*x11*x14*x15*x16*x18*x19*x20, x2*x4*x7*x8*x10*x12*x14*x15*x16*x17*x19, x1*x2*x3*x4*x6*x7*x9*x12*x15*x17*x18*x20, x1*x3*x4*x6*x10*x11*x12*x14*x15*x16, x1*x3*x6*x9*x10*x12*x15*x16*x17*x18*x19*x20, x1*x2*x3*x4*x5*x10*x11*x12*x15*x19, x6*x7*x9*x10*x11*x12*x14*x15*x19*x20, x2*x5*x6*x7*x8*x9*x11*x14*x15*x18*x19, x1*x2*x5*x8*x10*x14*x15*x17*x19*x20, x1*x2*x3*x5*x8*x9*x12*x13*x20, x1*x4*x6*x12*x14*x15*x16*x17*x19, x1*x2*x5*x7*x8*x11*x13*x14*x16*x18*x20, x1*x2*x3*x4*x5*x9*x10*x12*x13*x14, x1*x2*x7*x10*x11*x12*x14*x17, x2*x4*x5*x6*x8*x12*x14*x15*x16*x18*x20, x1*x7*x9*x10*x14*x16*x18*x19, x3*x4*x6*x8*x12*x15*x17*x18*x19*x20, x2*x4*x5*x7*x8*x9*x10*x12*x13*x17*x20, x1*x3*x4*x5*x7*x8*x9*x10*x12*x14*x17, x1*x2*x5*x6*x9*x12*x13*x17*x18*x19, x1*x3*x7*x8*x9*x10*x11*x12*x14*x17*x19, x2*x3*x6*x7*x9*x13*x16*x17, x2*x6*x7*x12*x16*x17*x19, x1*x2*x5*x7*x8*x11*x12*x15*x18*x20, x1*x2*x3*x6*x8*x13*x16*x18*x20, x7*x8*x9*x11*x12*x14*x15*x16*x18*x19*x20, x2*x7*x8*x10*x11*x14*x16*x17*x18, x1*x4*x6*x7*x8*x10*x13*x15*x19, x3*x5*x9*x13*x15*x16*x18, x4*x5*x7*x10*x11*x13*x14*x17*x18, x6*x9*x11*x13*x14*x15*x16*x17*x18*x20, x1*x2*x3*x5*x8*x9*x11*x13*x14*x15*x16*x19, x3*x6*x7*x12*x13*x16*x20, x1*x3*x6*x8*x9*x11*x13*x15*x18*x20, x1*x4*x5*x6*x8*x11*x12*x13*x16*x17, x2*x3*x4*x5*x8*x10*x12*x13*x16, x1*x2*x3*x4*x5*x8*x10*x11*x13*x17, x1*x2*x5*x6*x8*x9*x11*x13*x19, x2*x4*x5*x6*x12*x13*x15*x16*x17*x18, x1*x2*x5*x6*x10*x11*x13*x14*x15*x16*x17*x19, x1*x2*x5*x8*x9*x10*x11*x13*x14*x15*x16, x2*x3*x4*x7*x8*x9*x12*x14*x16*x17*x18*x19*x20, x1*x6*x7*x9*x10*x11*x12*x13*x14*x17*x18*x20, x2*x3*x6*x8*x9*x12*x16*x17*x18*x19*x20, x1*x2*x8*x9*x11*x13*x15*x16*x17*x19*x20, x1*x2*x4*x6*x8*x10*x11*x12*x13*x15*x17*x19, x1*x2*x4*x5*x12*x13*x16*x19*x20, x1*x4*x5*x6*x7*x8*x15*x16*x18*x19*x20, x1*x4*x5*x7*x8*x11*x12*x13*x14*x15*x17*x18, x1*x3*x5*x6*x8*x9*x13*x16, x3*x7*x9*x11*x12*x14*x16*x18*x19*x20, x2*x3*x6*x7*x9*x10*x13*x14*x15*x17*x19*x20, x1*x2*x5*x6*x7*x16*x17, x2*x4*x6*x10*x12*x13*x15*x16*x18, x1*x4*x5*x6*x8*x11*x13*x20, x3*x5*x7*x8*x9*x10*x12*x13*x15*x18*x19*x20, x2*x3*x7*x9*x11*x12*x13*x15*x17, x3*x4*x5*x6*x8*x10*x13*x15*x16*x17*x18, x1*x3*x5*x7*x8*x9*x11*x12*x17*x20, x1*x3*x11*x13*x14*x15*x16*x17*x19*x20, x2*x4*x6*x7*x11*x13*x14*x17*x18*x19*x20, x1*x3*x4*x5*x9*x10*x11*x12*x14*x15*x20, x7*x8*x10*x13*x14*x15*x17*x18*x19*x20, x1*x4*x8*x11*x14*x17*x20, x1*x2*x3*x4*x6*x8*x10*x12*x14*x17*x18, x1*x2*x5*x7*x8*x12*x13*x15*x16, x3*x4*x10*x12*x14*x16*x17*x19, x1*x2*x4*x5*x6*x7*x9*x11*x13*x15*x18, x3*x4*x7*x8*x9*x10*x11*x12*x13*x15*x17*x19*x20, x1*x2*x4*x10*x11*x13*x15*x17*x18*x19*x20, x1*x3*x4*x6*x8*x9*x10*x11*x12*x14*x16*x19*x20, x3*x5*x7*x8*x10*x11*x12*x13*x14*x15*x16*x17*x18, x1*x2*x3*x6*x10*x12*x13*x14*x16*x18*x19, x1*x2*x3*x4*x8*x9*x10*x16*x17*x18*x19, x1*x5*x7*x8*x10*x12*x13*x15*x19*x20, x2*x6*x7*x8*x9*x11*x13*x16*x18*x19, x4*x6*x9*x11*x13*x16*x19*x20, x3*x4*x5*x6*x7*x9*x12*x14*x15*x16*x20, x1*x2*x6*x9*x11*x12*x15*x16*x17, x2*x3*x4*x6*x11*x13*x14*x15*x16*x17*x18*x19, x1*x2*x5*x7*x13*x14*x15*x17*x20, x5*x6*x8*x10*x11*x12*x14*x15*x16*x19*x20, x1*x4*x5*x6*x7*x8*x11*x13, x1*x3*x6*x8*x9*x10*x16*x17*x19, x5*x7*x10*x11*x12*x16*x18*x20, x1*x2*x4*x6*x7*x12*x14*x15*x20, x2*x3*x5*x14*x16*x17*x18*x20, x1*x2*x3*x4*x5*x7*x8*x10*x15*x17*x19*x20, x1*x2*x5*x11*x15*x17*x18*x20, x4*x5*x9*x12*x13*x15*x16*x17*x19, x1*x6*x7*x14*x15*x16*x17*x20, x1*x2*x3*x4*x12*x13*x14*x16*x17*x20, x2*x3*x5*x8*x10*x11*x14*x15*x17, x2*x3*x4*x5*x6*x7*x9*x11*x13*x18, x2*x3*x5*x7*x8*x12*x13*x14*x18, x2*x4*x8*x9*x10*x11*x13*x15*x16*x18, x2*x3*x5*x6*x7*x11*x15*x17*x18*x19*x20, x1*x4*x6*x9*x11*x12*x13*x14*x16*x17*x18*x20, x3*x4*x5*x6*x8*x11*x12*x13*x16*x17*x18*x19, x3*x4*x5*x6*x7*x8*x10*x14*x17*x18, x1*x3*x4*x5*x9*x11*x13*x16*x18*x19*x20, x5*x6*x8*x9*x10*x12*x13*x15*x19*x20, x2*x5*x6*x9*x10*x16*x20, x2*x4*x5*x6*x8*x9*x10*x18*x20, x2*x6*x8*x9*x11*x12*x13*x18*x20, x1*x2*x3*x6*x7*x9*x10*x11*x15*x17*x20, x1*x2*x5*x8*x12*x13*x15*x16*x17, x1*x2*x3*x4*x6*x7*x8*x11*x14*x17*x18, x4*x5*x6*x8*x10*x11*x14*x15*x17, x1*x4*x5*x6*x7*x9*x11*x12*x15*x17*x19, x2*x5*x7*x8*x9*x10*x11*x12*x15*x18*x20, x2*x3*x5*x6*x7*x10*x11*x12*x14*x15*x17, x1*x2*x5*x6*x7*x8*x9*x11*x14*x15*x17, x2*x4*x6*x8*x9*x10*x11*x12*x15*x16*x17*x18, x1*x4*x7*x8*x12*x15*x16*x18*x20, x8*x9*x12*x13*x14*x15*x16*x17*x19*x20, x2*x4*x6*x7*x8*x9*x11*x16*x19*x20, x1*x3*x4*x5*x9*x13*x15*x17*x18*x20, x1*x3*x5*x6*x7*x8*x9*x11*x14*x15*x19, x1*x2*x3*x7*x9*x10*x11*x13*x18*x19, x4*x6*x7*x9*x14*x17*x19*x20, x2*x6*x9*x10*x12*x15*x16*x19*x20, x1*x3*x4*x5*x13*x14*x15*x18, x5*x6*x7*x8*x9*x11*x12*x16*x17*x20, x1*x2*x3*x6*x8*x10*x11*x12*x13*x14*x17*x18*x19, x2*x4*x6*x8*x9*x11*x14*x15*x16*x17*x18, x3*x4*x5*x9*x11*x14*x15*x16*x19, x2*x6*x7*x8*x11*x12*x17*x18*x20, x1*x2*x4*x6*x8*x9*x10*x11*x17*x20, x1*x2*x5*x6*x7*x9*x10*x15*x18*x19*x20, x1*x2*x3*x6*x7*x8*x10*x11*x12*x14, x2*x3*x8*x9*x10*x11*x14*x15*x17*x18, x4*x5*x6*x7*x8*x9*x10*x16*x18*x19, x1*x4*x6*x10*x13*x16*x17*x19, x1*x2*x3*x5*x7*x12*x13*x15*x19*x20, x2*x5*x7*x8*x9*x10*x12*x14*x16*x18, x1*x2*x6*x7*x9*x10*x11*x14*x16*x18, x1*x2*x3*x7*x11*x12*x13*x15*x17*x18, x2*x3*x4*x5*x6*x10*x11*x14*x18*x19, x1*x3*x4*x6*x8*x11*x13*x15*x17*x19, x2*x3*x4*x5*x8*x9*x10*x17*x18*x20, x2*x3*x5*x8*x10*x12*x14*x16*x18*x19, x1*x2*x8*x10*x15*x17*x18*x19, x2*x3*x8*x9*x11*x14*x16*x17*x20, x2*x3*x4*x6*x8*x10*x13*x15*x16*x18*x19, x1*x2*x3*x5*x6*x8*x9*x12*x14*x16*x20, x4*x6*x7*x8*x10*x11*x13*x14*x17*x18*x19, x2*x3*x5*x6*x9*x10*x13*x15*x18*x20, x1*x4*x5*x6*x8*x11*x12*x14*x16*x17*x19, x1*x2*x3*x5*x7*x10*x12*x15*x16*x18, x5*x6*x9*x10*x14*x15*x17, x1*x5*x6*x8*x9*x10*x12*x13*x15*x20, x5*x9*x10*x11*x14*x17*x18, x1*x2*x3*x4*x6*x7*x8*x9*x16*x17*x20, x1*x2*x3*x4*x5*x8*x13*x14*x16*x19*x20, x5*x7*x8*x9*x10*x14*x16*x17, x1*x3*x5*x6*x8*x10*x11*x12*x16, x2*x3*x4*x5*x7*x10*x11*x15*x18, x1*x2*x3*x4*x6*x7*x13*x14*x15*x16*x18*x20, x2*x5*x6*x10*x12*x13*x16*x17*x18*x19*x20, x3*x4*x5*x6*x9*x12*x14*x16*x17*x19, x2*x4*x5*x6*x9*x10*x11*x15*x16*x18, x1*x2*x3*x4*x5*x6*x8*x9*x11*x12*x16, x2*x3*x5*x8*x10*x11*x13*x16*x17*x19, x2*x3*x4*x6*x9*x10*x11*x17*x18*x20, x1*x2*x4*x5*x6*x7*x16*x20, x1*x3*x6*x7*x8*x9*x12*x17*x19, x1*x2*x5*x8*x10*x11*x12*x13*x18*x19, x1*x3*x4*x6*x8*x10*x13*x17*x18, x2*x3*x5*x7*x9*x10*x12*x13*x16*x17, x1*x2*x3*x6*x8*x10*x12*x13*x14*x15*x17*x20, x1*x2*x7*x8*x9*x13*x14*x16*x18, x3*x7*x8*x11*x14*x15*x18*x20, x2*x9*x11*x13*x14*x16*x18, x2*x5*x7*x10*x14*x15*x18*x19, x2*x3*x5*x6*x7*x9*x12*x15*x17*x18*x19*x20, x2*x3*x4*x5*x6*x13*x15*x16*x17*x18*x20, x4*x5*x7*x9*x10*x15*x16*x17*x19*x20, x4*x5*x8*x9*x11*x12*x14*x15*x16*x18, x2*x3*x4*x8*x10*x13*x14*x15*x20, x2*x4*x5*x8*x11*x12*x19*x20, x1*x9*x11*x13*x14*x15*x16*x17*x18*x19*x20, x1*x3*x4*x5*x11*x13*x14*x16*x17*x19, x1*x2*x3*x4*x8*x11*x15*x17*x20, x1*x2*x3*x5*x8*x9*x10*x14*x15*x16*x20, x2*x3*x4*x10*x12*x14*x16*x20, x4*x8*x9*x10*x12*x16*x17*x20, x2*x9*x10*x11*x14*x15*x17*x18*x19, x1*x2*x3*x8*x12*x14*x15*x16*x18, x1*x2*x5*x6*x8*x10*x11*x12*x13*x15*x19*x20, x2*x3*x4*x6*x7*x8*x11*x12*x15*x16, x3*x4*x5*x6*x8*x9*x11*x12*x14*x19, x3*x5*x9*x10*x13*x16*x17*x19*x20, x1*x4*x5*x8*x9*x12*x13*x14*x15*x17*x18, x1*x2*x3*x5*x8*x12*x14*x16*x17*x18*x19, x2*x3*x8*x11*x12*x15*x18*x19*x20, x2*x3*x7*x8*x9*x10*x11*x12*x15*x16*x18, x1*x2*x4*x8*x9*x12*x16*x17*x18, x4*x6*x8*x9*x10*x11*x12*x18*x20, x3*x7*x8*x9*x11*x12*x15*x16*x17*x20, x1*x2*x4*x5*x7*x10*x11*x12*x13*x16*x18, x3*x6*x7*x9*x10*x11*x12*x13*x14*x17, x6*x7*x8*x9*x10*x15*x16*x17*x18, x1*x7*x9*x11*x12*x15*x17*x19*x20, x1*x2*x3*x4*x5*x7*x8*x10*x11*x15*x17, x3*x4*x5*x6*x8*x14*x15*x16*x18*x19, x1*x2*x4*x10*x12*x13*x15*x16*x17*x19, x1*x5*x7*x8*x10*x11*x12*x13*x14*x18, x1*x4*x5*x7*x10*x11*x16*x19, x2*x3*x5*x6*x7*x8*x15*x19*x20, x2*x3*x5*x7*x8*x10*x13*x14*x16*x19*x20, x1*x2*x4*x6*x7*x9*x10*x11*x14*x18, x1*x2*x4*x5*x7*x12*x13*x14*x16*x18, x1*x4*x6*x7*x8*x9*x10*x13*x14*x18, x3*x6*x7*x8*x10*x12*x17*x18*x19, x2*x3*x4*x6*x8*x9*x12*x13*x15*x19, x1*x2*x3*x4*x7*x8*x12*x13*x16*x17*x18, x1*x3*x8*x9*x10*x13*x16*x20, x4*x7*x11*x12*x13*x14*x17*x18*x19*x20, x2*x3*x4*x7*x9*x10*x11*x13*x15*x17, x1*x2*x3*x9*x11*x13*x15*x17*x18*x19*x20, x3*x4*x8*x9*x12*x13*x14*x15*x19, x2*x4*x8*x10*x12*x13*x14*x17, x3*x6*x7*x9*x10*x14*x16*x17*x19*x20, x1*x4*x6*x10*x12*x14*x18*x19*x20, x1*x2*x3*x7*x8*x10*x11*x12*x13*x14, x1*x2*x5*x9*x10*x11*x12*x13*x16*x20, x1*x3*x4*x5*x7*x14*x15*x16*x17*x18*x19, x1*x3*x4*x6*x9*x13*x14*x15*x18*x19*x20, x1*x2*x3*x5*x6*x7*x10*x11*x16*x18, x1*x2*x5*x6*x8*x10*x13*x18*x19, x2*x3*x5*x7*x10*x13*x15*x16*x17*x18*x20, x1*x6*x7*x8*x9*x13*x14*x17*x18, x1*x5*x9*x10*x12*x15*x16*x17, x4*x5*x7*x9*x10*x12*x13*x15*x18*x20, x3*x5*x6*x7*x8*x9*x10*x12*x13*x16, x2*x8*x12*x13*x15*x16*x18*x19, x1*x2*x5*x8*x11*x14*x15*x16*x17*x20, x1*x2*x5*x9*x11*x14*x15*x16*x18*x20, x2*x4*x5*x6*x7*x15*x16*x20, x1*x2*x3*x5*x6*x10*x13*x14*x15*x18*x19, x1*x3*x5*x7*x10*x16*x17*x18, x2*x5*x6*x7*x8*x10*x13*x16*x19, x2*x5*x6*x9*x10*x11*x12*x15*x16*x18*x19, x4*x8*x9*x11*x14*x17*x18*x19*x20, x2*x3*x7*x9*x10*x13*x15*x16*x17*x18, x1*x3*x4*x6*x7*x8*x9*x11*x12*x17, x1*x2*x4*x5*x6*x11*x12*x13*x15*x16*x18*x20, x1*x2*x3*x4*x5*x7*x8*x9*x12*x13*x17*x18, x1*x2*x3*x4*x6*x7*x8*x10*x15, x3*x4*x6*x7*x8*x9*x11*x12*x13*x15*x19, x1*x3*x4*x5*x6*x8*x12*x14*x15*x17*x19, x3*x5*x6*x7*x8*x10*x13*x14*x15*x16*x17, x3*x4*x7*x8*x11*x15*x18*x19*x20, x1*x3*x5*x6*x7*x8*x10*x11*x13*x15*x16*x19, x3*x4*x5*x6*x10*x11*x14*x15*x17*x19, x3*x6*x7*x10*x12*x13*x14*x15*x17*x18*x19*x20, x2*x3*x4*x5*x6*x8*x10*x18*x19, x2*x5*x9*x10*x11*x15*x16*x17*x18*x19*x20, x1*x3*x5*x11*x12*x13*x16*x18*x20, x1*x3*x5*x6*x7*x9*x11*x13*x15*x18*x19, x2*x5*x7*x8*x10*x12*x13*x18*x19*x20, x2*x4*x5*x6*x7*x8*x13*x15*x17*x18, x1*x5*x7*x8*x9*x10*x12*x17*x18, x1*x2*x3*x4*x6*x8*x17*x18*x19*x20, x1*x3*x4*x5*x7*x8*x13*x20, x3*x4*x7*x9*x11*x12*x13*x16*x17*x19, x3*x4*x5*x7*x8*x9*x11*x13*x15*x20, x2*x3*x6*x7*x10*x11*x12*x14*x15*x16*x20, x1*x2*x5*x7*x12*x13*x15*x16*x17*x20, x2*x7*x8*x9*x10*x13*x14*x17*x19, x1*x3*x4*x9*x10*x12*x13*x14*x18*x19, x1*x2*x3*x4*x14*x16*x17*x18*x19, x2*x6*x7*x8*x10*x13*x15*x18, x3*x5*x7*x9*x10*x12*x14*x15*x17*x20, x1*x2*x4*x6*x8*x11*x12*x13*x16*x17*x18*x20, x1*x5*x8*x10*x11*x14*x16*x17*x18, x6*x9*x10*x12*x13*x14*x16*x17*x18, x2*x8*x10*x11*x12*x13*x14*x15*x20, x1*x5*x6*x8*x9*x10*x11*x12*x13*x15*x19, x3*x4*x5*x9*x10*x11*x12*x13*x17, x1*x2*x4*x6*x8*x9*x11*x12*x16*x17*x19*x20, x1*x2*x3*x5*x6*x9*x10*x11*x12*x13*x14*x18, x2*x6*x7*x8*x9*x10*x11*x14*x17*x18*x20, x2*x6*x7*x9*x11*x12*x15*x17*x18*x20, x2*x3*x7*x8*x10*x12*x16*x19, x3*x6*x8*x10*x11*x12*x13*x14*x15*x18, x3*x7*x9*x10*x11*x14*x15*x16*x18*x20, x2*x3*x4*x7*x12*x13*x14*x15*x18*x20, x1*x7*x8*x9*x10*x12*x13*x15*x17, x1*x2*x4*x6*x7*x8*x10*x13*x17*x19, x1*x3*x4*x5*x10*x16*x17*x18, x1*x3*x7*x8*x12*x13*x14*x16*x17*x18*x20, x3*x4*x5*x6*x9*x11*x15*x16*x20, x1*x6*x8*x9*x10*x11*x14*x15*x16*x19, x1*x2*x4*x6*x8*x9*x11*x12*x15, x1*x2*x5*x6*x8*x12*x13*x14*x16*x17*x20, x3*x5*x6*x8*x9*x11*x12*x14*x17*x18*x19, x1*x4*x5*x6*x9*x11*x12*x13*x16*x18*x19, x1*x3*x8*x11*x12*x14*x15*x19*x20, x1*x2*x3*x7*x10*x12*x13*x15*x17*x18*x19*x20, x2*x4*x6*x10*x12*x13*x14*x16*x18*x20, x3*x4*x5*x12*x13*x14*x15*x17*x18, x2*x3*x4*x5*x6*x8*x10*x19*x20, x1*x2*x3*x5*x10*x11*x12*x13*x18*x19*x20, x3*x5*x6*x10*x13*x15*x16*x17*x20, x4*x5*x6*x7*x8*x9*x10*x16*x17*x20, x1*x2*x3*x5*x6*x8*x10*x11*x15*x16*x20, x1*x4*x5*x8*x14*x15*x16*x18, x2*x12*x13*x14*x15*x16*x20, x1*x2*x3*x4*x7*x12*x13*x14*x15*x17*x19*x20, x1*x5*x8*x10*x11*x13*x15*x16*x18, x1*x3*x6*x10*x11*x15*x18*x19, x2*x3*x4*x5*x9*x10*x15*x17*x18*x19, x1*x2*x4*x5*x8*x9*x10*x11*x12*x13*x15*x17, x2*x4*x5*x6*x7*x10*x11*x12*x20, x3*x4*x6*x7*x8*x9*x10*x12*x17*x19*x20, x3*x6*x7*x10*x11*x12*x13*x15*x16*x17*x18*x19, x1*x3*x5*x6*x7*x10*x11*x13*x14, x2*x7*x9*x11*x14*x16*x17*x19, x1*x2*x3*x7*x8*x9*x10*x15*x16*x20, x2*x3*x10*x12*x15*x16*x17*x19*x20, x1*x2*x3*x4*x5*x8*x10*x11*x18*x19*x20, x4*x6*x7*x9*x11*x12*x14*x16*x19*x20, x1*x3*x4*x6*x7*x11*x12*x15*x16*x17*x20, x1*x4*x6*x7*x9*x14*x17*x18*x19, x1*x7*x8*x9*x11*x14*x15*x16*x19*x20, x1*x3*x4*x9*x10*x14*x15*x17*x19, x1*x3*x6*x8*x10*x11*x15*x16*x17*x19*x20, x1*x4*x5*x11*x14*x19*x20, x3*x5*x6*x9*x10*x12*x13*x14*x16*x20, x1*x4*x7*x8*x9*x10*x11*x12*x14*x16, x1*x3*x5*x7*x11*x12*x14*x15*x16*x19*x20, x1*x4*x6*x7*x8*x9*x14*x15*x16*x17*x18, x1*x3*x6*x10*x12*x13*x15*x16*x18*x19, x2*x3*x5*x6*x10*x12*x13*x14*x16*x17*x19, x1*x2*x7*x8*x9*x11*x12*x13*x14*x16*x20, x1*x2*x4*x7*x10*x11*x14*x16*x17*x20, x2*x4*x5*x9*x10*x11*x13*x14*x17*x19, x2*x3*x4*x7*x9*x10*x11*x12*x13*x14*x16, x3*x4*x5*x8*x10*x11*x13*x16, x4*x6*x7*x9*x11*x13*x15*x17*x18*x20, x2*x3*x5*x7*x8*x9*x14*x16*x18*x19*x20, x4*x6*x7*x11*x12*x13*x15*x17*x18*x19*x20, x2*x4*x9*x10*x12*x13*x14*x16*x18, x1*x2*x4*x5*x8*x9*x13*x17*x18*x19*x20, x3*x4*x5*x7*x8*x9*x12*x14*x15*x17*x18, x2*x4*x7*x8*x10*x11*x13*x14*x16*x17*x19, x3*x4*x11*x12*x13*x14*x16*x18*x19, x2*x3*x6*x7*x8*x9*x10*x11*x13*x14*x15*x16, x1*x2*x4*x6*x7*x8*x10*x13*x14*x17*x18, x1*x3*x4*x7*x11*x12*x13*x16*x19, x1*x2*x7*x11*x12*x13*x18*x19*x20, x1*x7*x8*x10*x12*x13*x15*x18*x19*x20, x4*x6*x7*x10*x12*x13*x15*x16*x18, x2*x3*x5*x7*x10*x12*x13*x15*x18, x1*x2*x8*x9*x12*x13*x14*x16*x19, x2*x3*x5*x6*x7*x10*x14*x15*x17*x19*x20, x1*x2*x3*x4*x5*x8*x9*x11*x12*x15*x16*x20, x4*x5*x7*x8*x9*x12*x13*x17*x19*x20, x3*x4*x5*x6*x10*x12*x13*x14*x16*x17, x4*x5*x6*x8*x9*x11*x13*x14*x16, x1*x2*x3*x4*x5*x8*x9*x10*x11*x14*x18, x2*x4*x7*x9*x11*x12*x13*x14*x15*x18*x20, x1*x2*x4*x7*x8*x9*x10*x11*x15*x20, x2*x3*x4*x7*x9*x12*x15*x16*x18*x19, x2*x3*x7*x8*x9*x10*x11*x12*x13*x17*x18*x20, x2*x4*x6*x7*x10*x13*x15*x16*x19*x20, x1*x3*x6*x10*x11*x13*x16*x18*x19*x20, x1*x2*x4*x5*x6*x8*x10*x12*x14*x15, x1*x2*x5*x10*x11*x12*x14*x15*x17*x18*x19, x2*x6*x8*x9*x13*x15*x18*x19*x20, x3*x5*x6*x7*x9*x12*x14*x17*x18*x19*x20, x1*x2*x4*x8*x9*x11*x14*x16*x19, x3*x4*x6*x7*x9*x10*x12*x13*x14, x1*x3*x4*x7*x9*x11*x12*x15*x16*x18*x19, x1*x2*x3*x7*x10*x15*x16*x17*x18*x19*x20, x3*x4*x6*x7*x9*x11*x15*x19*x20, x2*x3*x4*x7*x8*x11*x12*x15*x16*x19*x20, x2*x4*x5*x7*x9*x13*x15*x16*x17*x20, x2*x3*x5*x6*x8*x13*x17*x18*x19, x3*x4*x6*x8*x10*x15*x16*x17*x20, x2*x3*x6*x8*x11*x12*x13*x15*x16*x17*x18*x20, x2*x4*x5*x8*x10*x11*x12*x13*x16*x18, x3*x4*x5*x9*x11*x12*x14*x15*x18*x19, x1*x2*x3*x4*x5*x8*x9*x10*x13*x14*x19*x20, x1*x3*x4*x6*x9*x10*x18*x19*x20, x3*x4*x7*x9*x10*x14*x16*x17*x18*x20, x6*x7*x9*x14*x15*x17*x18*x20, x1*x7*x8*x11*x12*x13*x15*x17*x20, x3*x4*x6*x8*x9*x11*x13*x16*x17, x1*x2*x3*x4*x6*x9*x10*x15*x16*x17*x18*x20, x1*x2*x10*x11*x12*x15*x16*x19*x20, x2*x4*x7*x8*x10*x11*x15*x17*x18*x20, x2*x3*x8*x10*x12*x14*x15*x19*x20, x2*x3*x4*x5*x9*x10*x13*x14*x15*x19*x20, x2*x6*x8*x9*x11*x13*x14*x19*x20, x1*x5*x8*x10*x13*x14*x16*x17*x20, x2*x7*x8*x9*x11*x15*x17*x18*x19*x20, x2*x3*x4*x5*x6*x7*x11*x13*x14*x17*x18, x2*x3*x5*x6*x7*x8*x9*x10*x12*x15*x17, x1*x4*x6*x8*x9*x11*x12*x13*x14*x18*x19, x2*x4*x9*x10*x12*x14*x15*x20, x1*x2*x6*x7*x9*x12*x13*x17*x20, x1*x3*x6*x9*x10*x11*x14*x17*x20, x2*x4*x6*x8*x9*x11*x12*x14*x16*x18, x2*x3*x4*x5*x11*x13*x15*x17*x18*x20, x2*x3*x6*x7*x9*x10*x11*x12*x14*x15*x17, x3*x4*x5*x6*x8*x9*x10*x14*x18*x20, x1*x2*x3*x6*x7*x8*x10*x12*x14*x15*x16, x4*x5*x7*x8*x10*x11*x12*x13*x15*x18, x5*x6*x8*x10*x11*x12*x18*x19, x3*x5*x6*x7*x9*x10*x11*x13*x14*x17*x20, x2*x3*x5*x6*x7*x8*x15*x17*x18*x19, x1*x5*x7*x8*x9*x10*x13*x14*x15*x17*x18, x1*x2*x7*x8*x9*x10*x11*x15*x17*x19*x20, x1*x3*x4*x9*x12*x13*x15*x16*x18*x20, x6*x7*x8*x9*x11*x13*x14*x15*x16*x19, x1*x2*x3*x4*x5*x6*x12*x15*x18*x20, x3*x5*x6*x7*x9*x11*x12*x13*x14*x18*x20, x1*x2*x5*x7*x9*x11*x12*x17*x18*x20, x1*x2*x3*x10*x11*x12*x13*x15*x16, x1*x2*x3*x7*x8*x9*x12*x14*x16*x19, x2*x3*x6*x8*x10*x12*x15*x16*x18*x19, x3*x4*x7*x8*x11*x12*x13*x14*x16*x18, x1*x2*x3*x5*x8*x11*x12*x13*x17*x18*x19*x20, x1*x2*x6*x9*x10*x12*x16*x17*x18*x19*x20, x1*x2*x4*x5*x6*x9*x10*x12*x15*x16*x19, x1*x5*x6*x7*x8*x9*x10*x14*x17*x19, x2*x4*x5*x7*x9*x11*x13*x14*x15*x16*x20, x1*x3*x6*x9*x10*x11*x13*x18*x20, x4*x5*x6*x10*x11*x13*x14*x15*x18*x19, x1*x2*x4*x5*x6*x11*x12*x13*x14*x15*x17*x19, x3*x4*x9*x10*x11*x13*x14*x18, x1*x4*x5*x7*x9*x15*x16*x17*x20, x1*x4*x6*x7*x9*x13*x14*x16*x18*x19, x2*x3*x7*x8*x10*x13*x16*x17*x20, x1*x3*x4*x5*x6*x7*x9*x11*x13*x16*x19, x1*x2*x5*x7*x11*x12*x13*x14*x16*x17*x19*x20, x2*x5*x7*x8*x11*x12*x13*x14*x15*x17*x20, x1*x2*x3*x4*x7*x11*x14*x16*x18*x19*x20, x1*x2*x9*x10*x12*x15*x16*x17*x19, x1*x2*x5*x9*x10*x11*x12*x13*x14*x17*x19, x2*x4*x6*x7*x8*x11*x18*x20, x3*x4*x5*x7*x8*x10*x16*x17*x18*x19*x20, x2*x4*x6*x7*x9*x11*x15*x16*x20, x1*x2*x3*x6*x10*x14*x15*x17*x18*x20, x1*x4*x7*x8*x10*x13*x14*x15*x18, x1*x3*x4*x6*x7*x14*x17*x18*x19, x1*x2*x4*x7*x8*x11*x12*x13*x17*x19, x1*x2*x4*x5*x6*x11*x13*x16*x17*x19, x2*x5*x6*x7*x8*x9*x13*x17*x18, x2*x4*x6*x7*x8*x9*x11*x12*x13*x15*x18, x1*x2*x3*x8*x10*x12*x14*x16*x17, x1*x3*x4*x5*x6*x9*x12*x16*x17*x18, x1*x2*x3*x5*x9*x10*x11*x13*x15*x20, x2*x8*x9*x13*x15*x16*x18*x19, x1*x4*x5*x6*x7*x9*x10*x18*x19, x4*x5*x6*x7*x8*x9*x10*x12*x15*x18*x19, x1*x2*x3*x5*x7*x9*x11*x18*x20, x2*x7*x8*x9*x14*x15*x17*x18*x19, x1*x2*x3*x4*x8*x11*x12*x17*x18*x19*x20, x1*x4*x5*x8*x11*x15*x16*x18*x19*x20, x1*x4*x5*x7*x8*x9*x10*x11*x15*x17*x19, x1*x3*x6*x8*x9*x10*x14*x16*x18*x19, x1*x2*x3*x4*x9*x10*x11*x13*x14*x16, x3*x7*x8*x10*x12*x14*x15*x16*x17*x18*x19*x20, x1*x2*x3*x7*x9*x10*x11*x14*x15*x16, x2*x3*x4*x6*x11*x12*x14*x15*x16*x17*x18, x2*x4*x6*x7*x10*x12*x15*x16*x18*x19, x1*x5*x6*x7*x9*x11*x13*x14*x15*x18*x19, x1*x2*x3*x4*x9*x11*x12*x14*x15*x20, x1*x4*x8*x9*x15*x17*x18*x19*x20, x2*x5*x6*x8*x12*x14*x15*x16*x17*x20, x4*x5*x7*x8*x9*x10*x11*x15*x16*x18*x19*x20, x1*x2*x3*x4*x7*x12*x13*x15*x16*x17*x19, x1*x2*x6*x9*x10*x11*x13*x15*x17*x19*x20, x1*x3*x5*x8*x12*x13*x14*x15*x17*x19*x20, x4*x6*x7*x10*x12*x14*x16*x18*x19*x20, x2*x3*x4*x5*x6*x7*x8*x9*x14*x16*x18, x1*x2*x3*x4*x10*x11*x14*x15*x18*x19, x1*x2*x3*x5*x7*x8*x9*x10*x15*x19, x1*x5*x6*x8*x9*x16*x17*x19*x20, x1*x2*x4*x6*x10*x12*x15*x16*x17*x18*x19*x20, x3*x5*x6*x7*x8*x9*x10*x15*x18*x19, x2*x6*x7*x8*x11*x16*x18*x19*x20, x1*x3*x4*x6*x8*x9*x11*x13*x16*x19, x4*x5*x7*x8*x9*x10*x13*x16, x2*x3*x5*x6*x8*x9*x12*x15*x16*x17*x18, x1*x3*x5*x8*x11*x12*x14*x17*x18*x19*x20, x3*x4*x6*x7*x11*x13*x17*x19*x20, x2*x5*x7*x11*x16*x17*x18*x19*x20, x2*x4*x6*x7*x10*x11*x14*x15*x18*x20, x1*x2*x6*x7*x9*x13*x16*x17*x20, x1*x2*x4*x9*x10*x11*x12*x14*x16*x17*x20, x2*x4*x5*x7*x8*x10*x14*x17*x19*x20, x1*x2*x3*x5*x9*x10*x11*x12*x13*x14*x15*x18*x19, x1*x2*x6*x10*x12*x13*x14*x16*x17*x19, x2*x3*x5*x6*x7*x10*x13*x15*x16*x17*x19, x1*x2*x3*x4*x6*x7*x9*x10*x16*x18, x2*x4*x7*x8*x10*x12*x15*x20, x1*x4*x5*x11*x13*x14*x15*x17*x18*x19, x2*x5*x6*x7*x11*x12*x13*x20, x1*x2*x3*x4*x5*x6*x9*x13*x15*x18*x20, x2*x3*x5*x6*x9*x11*x14*x15*x17*x20, x1*x2*x3*x4*x7*x10*x11*x13*x18*x19, x1*x2*x6*x7*x8*x9*x10*x11*x12, x1*x2*x3*x4*x7*x8*x9*x10*x13*x17*x18, x1*x3*x4*x6*x7*x11*x15*x16*x17*x18*x20, x1*x4*x8*x10*x12*x14*x15*x16*x18*x20, x1*x4*x6*x9*x10*x12*x14*x15*x18, x4*x5*x6*x7*x10*x12*x13*x14*x15*x17*x18, x1*x3*x4*x5*x6*x8*x9*x11*x12*x14*x16*x17, x2*x3*x4*x6*x7*x8*x9*x16*x19*x20, x3*x4*x5*x7*x10*x13*x14*x17*x20, x1*x3*x4*x5*x8*x12*x13*x15*x16*x18*x19*x20, x2*x3*x4*x7*x8*x9*x11*x14*x15*x18, x1*x2*x3*x4*x5*x6*x8*x11*x13*x14*x16*x17*x18, x3*x7*x8*x9*x10*x12*x13*x16*x17, x1*x2*x4*x7*x8*x10*x12*x14*x15*x17*x18, x1*x3*x4*x5*x9*x10*x12*x13*x16*x18*x19, x1*x2*x4*x10*x11*x14*x16*x17*x19*x20, x1*x2*x3*x4*x7*x8*x10*x11*x15*x20, x1*x2*x5*x11*x12*x14*x15*x16, x1*x2*x3*x4*x8*x11*x12*x16*x17*x18*x20, x4*x5*x10*x11*x14*x15*x16*x17*x20, x1*x2*x4*x5*x6*x9*x10*x13*x17*x18*x20, x1*x3*x4*x5*x6*x7*x11*x13*x14*x15*x19, x2*x3*x4*x7*x8*x10*x13*x19*x20, x2*x4*x5*x10*x11*x12*x13*x14*x16*x18*x20, x1*x2*x3*x4*x5*x7*x9*x16*x18*x19, x1*x2*x4*x12*x13*x14*x16*x17*x18, x3*x4*x11*x12*x13*x15*x16*x17*x18*x19, x1*x6*x8*x10*x13*x15*x16*x18*x20, x3*x5*x6*x9*x10*x13*x15*x17*x18*x19, x3*x4*x6*x8*x10*x12*x14*x15*x16*x17, x2*x5*x8*x10*x11*x13*x14*x15*x18*x19, x2*x3*x9*x10*x11*x12*x13*x14*x15*x17*x20, x1*x2*x6*x8*x9*x10*x11*x13*x17*x19, x3*x4*x6*x9*x10*x12*x13*x16*x17*x18*x19, x2*x4*x5*x8*x11*x12*x15*x16*x17, x1*x9*x10*x11*x12*x13*x14*x15*x16*x17*x20, x1*x4*x7*x9*x13*x14*x15*x16*x17, x5*x6*x7*x10*x11*x12*x13*x15*x17*x18*x20, x2*x3*x8*x10*x11*x17*x19*x20, x2*x4*x5*x6*x9*x12*x14*x16*x17*x18, x1*x5*x6*x7*x9*x10*x11*x12*x13*x14*x17, x1*x2*x3*x4*x5*x7*x8*x11*x12*x16*x18*x20, x1*x2*x5*x7*x8*x10*x12*x13*x16*x18*x20, x5*x9*x10*x12*x13*x15*x16*x19*x20, x3*x4*x5*x8*x9*x10*x12*x13*x20, x2*x3*x6*x8*x9*x14*x18*x19*x20, x2*x3*x5*x11*x14*x15*x16*x17*x18, x6*x8*x10*x11*x12*x14*x17*x20, x1*x2*x3*x4*x7*x10*x12*x14*x17*x18, x3*x4*x6*x7*x9*x13*x14*x16, x1*x3*x6*x9*x10*x12*x14*x15*x16*x19, x3*x6*x10*x11*x12*x14*x16*x17*x18*x19*x20, x1*x3*x4*x5*x7*x10*x11*x12*x14*x15*x18, x1*x2*x3*x4*x10*x11*x13*x14*x18*x20, x5*x8*x9*x11*x14*x15*x16*x18*x19, x1*x7*x9*x11*x12*x13*x14*x16*x17*x18*x19*x20, x1*x2*x3*x6*x8*x10*x13*x14*x19*x20, x1*x2*x5*x6*x8*x9*x10*x12*x20, x1*x3*x7*x8*x9*x10*x11*x12*x16*x17*x19, x1*x3*x4*x5*x7*x8*x9*x11*x15*x16*x18*x20, x1*x2*x3*x4*x6*x8*x9*x13*x14*x16*x19, x5*x7*x11*x13*x14*x15*x16*x18*x19*x20, x1*x4*x7*x8*x10*x12*x13*x14*x19*x20, x1*x2*x4*x11*x13*x14*x18*x19*x20, x2*x3*x7*x8*x9*x10*x13*x14*x16*x19, x4*x5*x6*x8*x9*x10*x12*x14*x16*x17, x2*x7*x9*x14*x15*x16*x17*x20, x1*x2*x3*x9*x12*x14*x15*x16*x17*x19*x20, x1*x3*x5*x7*x8*x12*x14*x17*x20, x5*x6*x8*x13*x14*x16*x17*x18*x19*x20, x1*x3*x5*x6*x9*x12*x14*x15*x17, x1*x2*x4*x6*x7*x10*x11*x14*x15*x16*x19, x1*x4*x5*x9*x13*x15*x16*x17*x18*x19, x1*x2*x7*x8*x11*x13*x15*x17*x18, x1*x2*x3*x9*x11*x15*x16*x17*x18*x20, x1*x4*x8*x11*x13*x14*x15*x16*x19, x1*x3*x6*x7*x9*x11*x12*x16*x19, x1*x2*x3*x4*x5*x6*x9*x11*x13*x15*x17*x19, x1*x2*x5*x7*x9*x12*x15*x18*x20, x1*x2*x3*x4*x6*x9*x10*x11*x13*x20, x4*x5*x8*x10*x11*x14*x15*x20, x1*x2*x3*x5*x7*x10*x11*x12*x16*x18*x19, x3*x6*x7*x9*x12*x13*x16*x18, x3*x7*x8*x9*x13*x14*x15*x16*x17*x19, x1*x3*x4*x9*x10*x11*x14*x17*x18, x2*x4*x6*x7*x9*x10*x11*x15*x16*x18*x19, x4*x5*x7*x8*x10*x11*x13*x15*x16*x17*x18*x19, x1*x4*x6*x7*x8*x10*x11*x12*x14*x18, x3*x6*x7*x10*x12*x15*x16*x17*x18*x19*x20, x1*x4*x5*x7*x10*x13*x14*x15*x16*x17*x20, x1*x8*x9*x10*x11*x12*x14*x16*x17, x1*x10*x13*x14*x16*x17*x18*x19*x20, x3*x6*x7*x8*x9*x10*x11*x12*x14*x19*x20, x1*x3*x4*x5*x7*x8*x12*x16*x17*x20, x1*x3*x4*x5*x6*x7*x8*x11*x14*x16*x17*x19, x1*x3*x6*x8*x10*x11*x12*x13*x15, x1*x2*x6*x7*x8*x12*x13*x14*x16*x17*x18, x1*x2*x5*x7*x8*x11*x12*x13*x14*x15*x18, x4*x7*x8*x10*x12*x13*x16*x17 ); frobby-0.9.5/test/bench/sqfreeV25G1000.test000066400000000000000000001357111401527164200201530ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25]; I = monomialIdeal( x2*x6*x7*x11*x15*x16*x17*x18*x19*x21, x2*x3*x6*x7*x8*x11*x12*x13*x21*x24, x1*x2*x5*x6*x7*x11*x14*x15*x16*x20*x21*x24, x1*x2*x4*x6*x7*x8*x9*x11*x13*x17*x19*x21*x22, x5*x7*x8*x10*x15*x16*x17*x18*x19*x20*x21*x25, x2*x3*x6*x7*x9*x10*x11*x16*x17*x18*x20*x24, x1*x2*x4*x6*x10*x12*x15*x20*x22*x23*x24*x25, x4*x5*x10*x12*x17*x19*x20*x25, x1*x2*x3*x4*x5*x8*x9*x14*x15*x17*x19*x20*x21, x1*x2*x3*x4*x7*x8*x13*x14*x20*x22*x23*x25, x1*x2*x4*x8*x9*x10*x12*x15*x16*x19*x21, x1*x2*x3*x5*x7*x8*x9*x11*x12*x19*x22*x25, x1*x2*x5*x6*x7*x8*x9*x14*x17*x18*x20*x22*x23*x24*x25, x3*x9*x10*x11*x12*x14*x15*x16*x18*x19*x20*x21*x22, x1*x4*x6*x11*x13*x15*x17*x22*x24*x25, x1*x2*x7*x8*x10*x14*x15*x17*x18*x21*x23*x24, x1*x7*x8*x9*x16*x17*x20*x22*x23*x24*x25, x1*x2*x3*x9*x10*x11*x15*x16*x18*x20*x21*x22*x23*x24*x25, x1*x6*x7*x10*x12*x18*x20*x21*x23*x24*x25, x1*x2*x3*x6*x7*x9*x10*x11*x12*x13*x15*x18*x19*x20*x23*x24*x25, x1*x2*x3*x4*x5*x8*x10*x11*x13*x14*x15*x16*x17*x19*x20*x22*x23*x24, x2*x3*x8*x11*x15*x20*x21*x23*x24, x1*x3*x4*x6*x7*x9*x10*x11*x13*x14*x15*x17*x18*x19*x21*x22*x25, x2*x4*x5*x6*x8*x9*x12*x13*x14*x16*x17*x20*x21*x22*x24, x1*x2*x6*x8*x9*x11*x13*x14*x15*x16*x17*x22, x1*x3*x4*x5*x6*x12*x13*x16*x18*x19*x20*x21*x22*x24, x1*x2*x3*x5*x6*x7*x8*x9*x12*x16*x17*x18*x20*x24*x25, x1*x2*x6*x7*x8*x10*x11*x13*x14*x15*x18*x19*x21*x24*x25, x1*x2*x7*x8*x10*x11*x12*x14*x15*x16*x18*x19*x20*x21*x22*x23, x2*x5*x6*x8*x10*x11*x12*x15*x16*x17*x18*x19*x20*x21*x22*x23*x24, x5*x6*x7*x10*x11*x12*x13*x15*x16*x17*x18*x19*x21*x22, x1*x2*x3*x4*x5*x6*x7*x9*x11*x15*x17*x21*x23, x4*x5*x8*x10*x12*x13*x14*x17*x18*x19*x21*x22*x23*x24, x2*x3*x4*x6*x13*x15*x16*x19*x21*x23*x24, x1*x4*x10*x16*x18*x19*x20*x22*x23, x2*x3*x4*x8*x11*x16*x17*x19*x20*x21*x23*x25, x2*x3*x5*x7*x9*x12*x13*x15*x16*x17*x18*x20*x23, x1*x2*x3*x4*x8*x14*x18*x20*x22*x23*x24*x25, x1*x4*x5*x8*x10*x12*x14*x16*x17*x19*x21*x22*x23*x24*x25, x2*x6*x7*x8*x9*x11*x13*x14*x16*x19*x20*x22*x24*x25, x1*x2*x5*x9*x11*x13*x15*x17*x18*x24*x25, x1*x2*x5*x6*x8*x9*x11*x15*x17*x19*x20*x21*x22*x24*x25, x1*x5*x8*x9*x11*x13*x15*x16*x17*x20*x25, x1*x2*x3*x6*x7*x9*x10*x12*x13*x15*x16*x17*x18*x23*x25, x1*x3*x6*x9*x11*x12*x13*x14*x16*x19*x20*x21*x24, x1*x2*x4*x6*x8*x9*x10*x12*x14*x16*x17*x19*x20*x21*x23*x25, x2*x3*x4*x5*x8*x10*x14*x16*x17*x19*x21*x22*x23*x24*x25, x4*x8*x10*x11*x14*x16*x17*x18*x20*x23, x1*x3*x4*x5*x6*x7*x8*x10*x12*x18*x19*x21, x1*x7*x8*x12*x15*x16*x19*x22*x25, x2*x3*x4*x5*x7*x8*x9*x10*x11*x12*x14*x15*x16*x20*x21*x22*x23, x2*x3*x5*x6*x10*x11*x12*x13*x14*x15*x17*x19*x21*x23, x2*x4*x7*x9*x12*x13*x16*x19*x20*x21*x22*x23*x24, x5*x7*x9*x11*x12*x16*x17*x20*x25, x2*x4*x6*x7*x9*x11*x12*x13*x15*x17*x18*x19*x21*x22*x23*x24, x1*x2*x4*x6*x10*x11*x12*x13*x21*x22*x23*x24*x25, x2*x6*x9*x12*x13*x14*x16*x17*x20*x22*x23*x25, x2*x3*x4*x5*x8*x11*x14*x15*x18*x20*x25, x1*x3*x6*x7*x8*x10*x14*x18*x20*x21*x23*x25, x2*x4*x7*x9*x10*x11*x12*x15*x16*x22*x23*x24, x5*x6*x8*x9*x12*x15*x16*x23*x25, x2*x3*x6*x8*x16*x18*x22*x23*x25, x2*x3*x4*x9*x13*x14*x17*x18*x19*x21*x22*x23*x24*x25, x1*x2*x4*x5*x6*x7*x8*x10*x11*x15*x17*x19*x22*x24*x25, x5*x6*x11*x12*x13*x16*x17*x21*x22*x23*x24*x25, x1*x4*x5*x6*x7*x9*x11*x12*x13*x17*x18*x19*x20*x21, x3*x7*x9*x10*x13*x14*x17*x20*x25, x1*x2*x3*x5*x6*x8*x9*x10*x14*x16*x17*x23*x25, x3*x5*x8*x9*x10*x11*x13*x15*x17*x22*x23*x24*x25, x1*x3*x4*x9*x12*x15*x16*x17*x18*x20*x21*x25, x4*x7*x8*x10*x11*x13*x14*x16*x17*x18*x23*x24*x25, x2*x10*x11*x13*x14*x18*x19*x23*x25, x2*x4*x5*x6*x7*x9*x12*x13*x15*x17*x19*x20*x21*x22*x23*x24*x25, x1*x4*x7*x10*x11*x12*x16*x17*x19*x21*x22*x24*x25, x1*x3*x4*x5*x7*x16*x18*x20*x22*x23, x2*x7*x9*x12*x13*x14*x18*x20*x21*x25, x1*x6*x9*x11*x12*x15*x16*x20*x21*x22*x24, x1*x2*x6*x8*x9*x14*x15*x18*x20*x24, x2*x3*x4*x5*x7*x8*x10*x14*x16*x18*x21*x24*x25, x2*x4*x8*x9*x12*x17*x18*x20*x21*x25, x1*x2*x3*x5*x9*x10*x13*x14*x22*x23*x25, x1*x3*x4*x5*x9*x12*x14*x15*x17*x18*x19*x24*x25, x2*x3*x4*x7*x9*x13*x15*x19*x21*x24, x2*x3*x5*x7*x11*x15*x17*x20*x22*x24*x25, x1*x5*x6*x7*x8*x10*x12*x13*x16*x17*x18*x19*x20*x21*x23*x24, x1*x2*x4*x5*x6*x11*x13*x20*x21*x23*x25, x1*x3*x4*x5*x6*x7*x10*x11*x12*x15*x19*x20*x22*x23*x24, x4*x5*x7*x9*x14*x16*x18*x25, x2*x4*x7*x9*x10*x16*x19*x20*x22*x23*x25, x1*x2*x3*x4*x5*x7*x9*x14*x16*x22*x23*x24, x4*x6*x7*x12*x14*x15*x17*x18*x20*x21*x22*x25, x1*x4*x6*x9*x11*x12*x16*x17*x18*x19*x21*x24, x5*x6*x9*x10*x11*x12*x14*x16*x19*x20*x21*x23*x25, x1*x3*x5*x8*x9*x10*x12*x13*x15*x17*x20*x21, x1*x2*x3*x4*x5*x7*x9*x13*x14*x15*x16*x17*x18*x21*x23, x1*x2*x3*x6*x7*x8*x10*x14*x15*x16*x18*x21*x22*x24, x3*x5*x7*x9*x10*x12*x14*x15*x17*x19*x20*x21*x23*x24, x5*x6*x7*x8*x10*x12*x14*x16*x17*x18*x19*x20*x23*x24, x2*x3*x4*x5*x6*x7*x9*x12*x13*x15*x16*x22*x23*x24*x25, x1*x2*x3*x6*x8*x9*x10*x13*x15*x21*x22*x23*x24*x25, x1*x3*x7*x8*x10*x15*x17*x18*x19*x21*x22*x24, x4*x6*x7*x8*x10*x11*x12*x14*x16*x17*x18*x22*x23*x25, x2*x4*x7*x8*x9*x10*x12*x14*x15*x16*x18*x20*x21*x22*x23, x1*x3*x6*x7*x10*x14*x17*x18*x20*x22*x23, x5*x7*x8*x9*x12*x14*x17*x18*x19*x20*x21*x22*x23*x25, x1*x2*x7*x10*x11*x16*x18*x19*x20*x22*x24*x25, x6*x7*x8*x10*x11*x12*x15*x17*x20*x22*x23, x1*x2*x4*x7*x8*x9*x11*x12*x14*x16*x19*x22*x23, x2*x5*x9*x12*x13*x14*x15*x17*x18*x19*x24, x1*x4*x5*x6*x8*x9*x11*x13*x19*x21*x24, x1*x2*x3*x4*x5*x8*x12*x13*x15*x16*x19*x20*x22, x2*x6*x7*x8*x9*x10*x11*x15*x21*x24*x25, x1*x3*x4*x5*x7*x8*x9*x11*x13*x15*x16*x17*x18*x19*x24, x1*x3*x4*x9*x10*x11*x13*x15*x20*x21*x22*x24, x1*x4*x5*x9*x11*x12*x13*x14*x15*x16*x24*x25, x3*x4*x6*x7*x10*x12*x13*x18*x19*x20*x21*x23, x2*x3*x4*x8*x10*x11*x13*x14*x16*x19*x21*x23*x24, x3*x5*x9*x12*x16*x17*x20*x21*x22*x23, x4*x5*x8*x9*x10*x12*x13*x14*x15*x16*x18*x22*x23, x5*x6*x8*x9*x11*x12*x13*x14*x15*x17*x18*x19*x20*x21*x22*x23*x24, x4*x5*x11*x12*x14*x15*x16*x18*x21*x23, x1*x2*x4*x6*x7*x10*x12*x13*x15*x18*x20*x22*x23*x24, x9*x12*x14*x16*x17*x19*x21*x22*x23, x1*x2*x3*x4*x6*x7*x8*x9*x10*x14*x16*x17*x18*x19*x20*x22*x24*x25, x1*x3*x5*x6*x9*x10*x13*x15*x18*x20, x5*x6*x7*x8*x11*x13*x14*x16*x19, x1*x2*x4*x5*x6*x10*x12*x16*x17*x18*x19*x21*x23*x24*x25, x1*x3*x4*x8*x11*x12*x13*x15*x17*x18*x22*x23*x24, x1*x2*x3*x7*x9*x10*x15*x17*x18*x19*x21*x22*x23*x24, x1*x3*x4*x6*x8*x9*x12*x13*x15*x18*x19*x20*x21, x1*x2*x3*x5*x9*x10*x16*x18*x20*x22*x24*x25, x1*x7*x8*x9*x12*x13*x15*x17*x20*x21*x23, x2*x3*x4*x11*x15*x18*x19*x22*x23, x1*x2*x3*x4*x8*x9*x10*x13*x15*x16*x17*x19*x20*x21*x23*x25, x2*x3*x4*x5*x8*x13*x14*x15*x16*x17*x20*x21*x22*x23, x2*x4*x5*x6*x7*x11*x14*x17*x18*x19*x21*x22, x1*x5*x10*x11*x12*x14*x15*x16*x18*x20*x24*x25, x2*x4*x8*x14*x16*x18*x22*x23*x25, x1*x2*x3*x5*x6*x7*x11*x12*x15*x16*x17*x18*x20*x24, x1*x2*x5*x6*x7*x8*x9*x11*x12*x13*x14*x15*x16*x17*x18*x21*x24, x2*x3*x4*x5*x6*x7*x8*x9*x13*x15*x16*x19*x20*x22*x23*x25, x1*x2*x5*x6*x7*x8*x10*x11*x14*x15*x17*x18*x19*x24, x1*x2*x5*x6*x8*x10*x12*x15*x16*x18*x20*x22*x24*x25, x4*x5*x6*x8*x10*x11*x12*x13*x14*x15*x25, x1*x4*x9*x11*x14*x18*x19*x20*x25, x4*x5*x6*x8*x9*x10*x12*x15*x17*x20*x24, x1*x3*x6*x8*x11*x12*x13*x14*x15*x16*x17*x18*x23*x25, x2*x7*x8*x9*x11*x12*x13*x14*x16*x17*x20*x21*x24*x25, x1*x2*x3*x4*x7*x8*x11*x12*x16*x17*x18*x22*x23, x1*x2*x3*x6*x7*x10*x12*x14*x17*x20*x21*x22*x25, x1*x2*x6*x9*x12*x14*x16*x19*x24, x1*x3*x8*x9*x11*x12*x15*x16*x17*x19*x24, x1*x5*x6*x7*x9*x15*x22*x23*x24*x25, x5*x6*x7*x9*x12*x13*x15*x16*x17*x18*x22*x23*x25, x3*x4*x6*x8*x9*x10*x14*x15*x16*x20*x21*x23, x1*x2*x3*x4*x6*x7*x10*x12*x13*x15*x20, x2*x4*x5*x9*x11*x12*x13*x14*x18*x22*x23*x24, x1*x2*x3*x9*x13*x14*x15*x17*x18*x20*x21*x23, x1*x2*x5*x8*x9*x10*x11*x12*x14*x15*x17*x18*x21*x22, x1*x2*x4*x5*x6*x8*x10*x12*x15*x16*x19*x20*x22*x23*x25, x4*x6*x7*x8*x9*x10*x12*x13*x14*x16*x21*x25, x1*x3*x5*x6*x7*x8*x10*x15*x18*x19*x20*x21*x22*x23, x3*x8*x10*x13*x15*x20*x22*x25, x2*x3*x5*x6*x8*x9*x11*x13*x14*x15*x16*x20*x23*x25, x1*x5*x6*x7*x8*x11*x12*x13*x14*x15*x17*x18*x22*x25, x2*x3*x9*x10*x12*x13*x14*x15*x16*x22*x23, x2*x4*x5*x6*x8*x10*x12*x13*x15*x16*x17*x19*x22*x23, x3*x6*x7*x8*x9*x10*x13*x14*x16*x18*x20*x23*x25, x2*x5*x6*x11*x12*x15*x17*x18*x19*x20*x21*x24*x25, x4*x5*x7*x8*x9*x10*x14*x17*x18*x19*x20*x21*x22*x24*x25, x3*x4*x5*x8*x10*x12*x14*x21*x22*x24*x25, x2*x3*x4*x7*x9*x13*x17*x18*x19*x22*x24*x25, x2*x5*x8*x9*x10*x13*x14*x18*x23*x25, x1*x2*x5*x6*x8*x11*x13*x14*x18*x19*x20*x22*x23, x2*x3*x4*x5*x10*x13*x16*x18*x19*x23*x25, x2*x4*x11*x12*x13*x16*x17*x18*x19*x21*x22*x24, x4*x5*x7*x8*x10*x12*x14*x15*x17*x18*x20*x22, x2*x4*x6*x9*x10*x13*x14*x15*x16*x17*x18*x19*x22*x23, x1*x3*x4*x6*x7*x10*x11*x12*x13*x17*x20*x23*x25, x4*x7*x8*x9*x11*x15*x16*x17*x18*x21*x22, x1*x2*x6*x7*x9*x12*x13*x15*x16*x17*x19*x21*x22*x23, x2*x3*x6*x7*x11*x14*x19*x20*x21*x22*x23*x25, x2*x6*x8*x9*x10*x12*x14*x15*x16*x21*x22*x24*x25, x1*x6*x11*x14*x16*x17*x18*x22*x23*x24, x5*x6*x9*x10*x13*x16*x18*x19*x20*x22, x3*x5*x8*x10*x11*x12*x13*x14*x15*x16*x17*x19, x1*x4*x6*x7*x8*x9*x12*x15*x17*x19*x21*x22, x1*x4*x6*x8*x10*x13*x14*x15*x18*x21*x22*x23*x24, x3*x6*x8*x12*x14*x15*x17*x19*x21*x22*x23*x24*x25, x1*x3*x5*x6*x9*x10*x11*x12*x13*x14*x16*x22*x23*x24, x2*x3*x5*x8*x10*x11*x12*x17*x19*x20*x21*x24, x2*x5*x7*x10*x12*x13*x14*x15*x16*x18*x19*x20*x22*x25, x5*x6*x10*x11*x12*x13*x14*x15*x17*x18*x21*x24*x25, x3*x4*x10*x13*x15*x16*x17*x18*x20*x21*x22*x25, x1*x2*x4*x5*x7*x8*x10*x11*x13*x15*x16*x17*x19*x20*x21*x23*x24*x25, x1*x2*x7*x8*x9*x10*x12*x13*x16*x17*x19*x22*x23*x24*x25, x1*x2*x3*x4*x6*x8*x11*x12*x13*x14*x17*x18*x19*x20*x24, x1*x3*x7*x9*x10*x11*x12*x14*x15*x16*x17*x18*x20*x21*x25, x2*x5*x8*x9*x11*x13*x20*x21*x23*x25, x1*x4*x5*x6*x9*x10*x11*x12*x13*x14*x23*x24, x1*x2*x3*x4*x6*x11*x13*x15*x16*x17*x18*x20*x22*x23, x1*x3*x4*x6*x8*x11*x12*x13*x14*x15*x21*x22*x24*x25, x1*x2*x3*x9*x12*x14*x16*x17*x19*x20*x22, x1*x2*x3*x4*x5*x7*x8*x10*x11*x12*x14*x17*x18*x20*x21*x22*x23, x4*x5*x7*x8*x10*x11*x15*x17*x18*x19*x22*x23*x24, x1*x2*x3*x5*x6*x9*x10*x12*x13*x16*x17*x19*x21*x22*x23*x24, x4*x5*x6*x7*x8*x10*x11*x16*x18*x19*x21*x22*x24*x25, x1*x2*x4*x6*x7*x8*x9*x10*x16*x18*x22*x23*x24, x1*x2*x5*x6*x8*x11*x12*x18*x19*x20, x2*x3*x5*x11*x12*x14*x15*x16*x18*x22, x2*x5*x9*x10*x11*x13*x15*x17*x20*x23*x24, x2*x3*x9*x10*x12*x13*x15*x16*x17*x18*x20*x21*x23, x4*x8*x13*x15*x17*x18*x19*x23*x24*x25, x3*x4*x5*x6*x8*x9*x10*x11*x12*x15*x16*x17*x22, x1*x3*x4*x7*x10*x13*x15*x16*x17*x21*x22*x25, x3*x5*x6*x10*x12*x13*x14*x19*x20*x21*x22*x23*x25, x1*x4*x5*x7*x13*x14*x15*x19*x20*x24, x1*x6*x7*x9*x10*x11*x12*x17*x19*x20*x21*x24*x25, x1*x4*x6*x8*x9*x10*x11*x14*x15*x17*x18*x19*x20*x21*x23, x1*x2*x3*x8*x11*x13*x14*x15*x16*x18*x20, x1*x3*x4*x6*x8*x9*x15*x16*x18*x19*x25, x1*x4*x5*x9*x12*x14*x15*x16*x17*x18*x19*x20*x21*x22, x4*x5*x8*x9*x11*x12*x16*x20*x22*x24*x25, x2*x3*x5*x8*x9*x10*x15*x16*x18*x19*x23*x24, x2*x3*x5*x6*x8*x11*x13*x16*x17*x18*x19*x23*x24, x1*x2*x5*x9*x10*x11*x14*x16*x17*x18*x21, x1*x4*x6*x7*x8*x10*x12*x13*x17*x19*x20*x22*x23*x25, x1*x6*x9*x10*x11*x12*x13*x14*x15*x16*x18*x23, x2*x3*x7*x10*x12*x13*x15*x17*x18*x20*x21*x25, x4*x9*x11*x12*x13*x14*x15*x17*x18*x20*x21*x23, x3*x4*x7*x9*x11*x12*x18*x19*x20*x23, x2*x3*x5*x6*x9*x10*x11*x14*x15*x16*x20, x4*x5*x6*x7*x9*x13*x15*x18*x19*x23*x24, x1*x2*x6*x8*x10*x11*x12*x13*x14*x18*x19*x25, x4*x5*x6*x8*x11*x12*x13*x14*x19*x21*x23, x3*x5*x8*x9*x10*x12*x14*x17*x18*x20*x21*x24, x1*x2*x6*x7*x9*x13*x14*x15*x16*x21*x23*x24, x4*x5*x8*x10*x11*x14*x15*x16*x17*x19*x21*x23*x24*x25, x1*x3*x4*x6*x7*x8*x12*x13*x14*x16*x18*x19*x25, x2*x3*x4*x5*x6*x12*x14*x15*x16*x17*x18*x20*x21*x22*x25, x1*x2*x4*x7*x8*x11*x12*x13*x14*x16*x20*x21*x24*x25, x1*x3*x4*x5*x9*x10*x11*x12*x13*x14*x15*x17*x18*x20*x23*x24, x1*x2*x3*x6*x9*x13*x17*x18*x20*x21*x24, x1*x2*x3*x4*x8*x9*x12*x13*x15*x16*x17*x18*x19*x22*x23, x1*x2*x4*x6*x13*x14*x15*x16*x17*x18*x19*x21*x22*x23*x25, x6*x7*x8*x10*x13*x14*x15*x16*x19*x22*x24*x25, x1*x2*x5*x6*x7*x8*x9*x10*x11*x13*x14*x20*x22*x24*x25, x2*x3*x10*x14*x18*x20*x21*x23*x24*x25, x2*x3*x4*x6*x7*x12*x13*x14*x15*x17*x19*x20*x23*x25, x1*x6*x9*x12*x13*x14*x16*x17*x18*x19*x21*x25, x2*x4*x5*x8*x10*x12*x16*x17*x20*x21*x23*x24*x25, x1*x2*x3*x5*x6*x7*x10*x11*x14*x16*x18*x19*x21*x24, x1*x2*x3*x6*x7*x8*x9*x10*x11*x17*x19*x22*x23*x25, x1*x3*x4*x6*x7*x11*x12*x15*x16*x17*x19*x21, x3*x5*x10*x14*x15*x16*x19*x23*x25, x1*x2*x4*x6*x10*x13*x15*x18*x19*x20*x22*x24, x1*x3*x5*x7*x10*x11*x12*x14*x16*x17*x18*x20*x23, x2*x3*x4*x5*x6*x8*x11*x14*x17*x18*x20*x25, x5*x6*x9*x12*x14*x16*x19*x21*x22*x23*x25, x2*x3*x4*x7*x8*x9*x10*x14*x16*x17*x20*x23*x24, x1*x3*x4*x10*x14*x16*x17*x18*x19*x21*x22*x23, x1*x3*x4*x5*x12*x13*x14*x15*x16*x17*x19*x21*x24*x25, x1*x3*x5*x11*x12*x15*x17*x18*x19*x21*x23*x24, x1*x2*x8*x9*x11*x14*x15*x16*x17*x18*x19*x20*x22*x25, x1*x3*x4*x5*x8*x9*x12*x14*x15*x16*x19*x21*x22*x23*x25, x1*x2*x9*x11*x12*x14*x16*x17*x18*x19*x20*x23*x24, x1*x2*x3*x4*x5*x6*x8*x9*x10*x16*x18*x21*x22, x2*x3*x4*x5*x7*x8*x10*x15*x17*x18*x20*x21*x23*x25, x1*x3*x4*x6*x8*x10*x12*x14*x17*x19*x20*x23*x24*x25, x4*x5*x8*x11*x12*x14*x15*x17*x25, x3*x5*x7*x9*x10*x11*x12*x13*x15*x17*x20*x24*x25, x1*x2*x4*x5*x6*x8*x14*x17*x18*x19*x20*x22*x23*x25, x1*x2*x3*x8*x11*x12*x16*x20*x21*x22*x23*x24, x2*x3*x4*x5*x7*x10*x11*x12*x13*x16*x18*x20*x23*x25, x3*x5*x6*x7*x8*x11*x12*x15*x16*x18*x19*x23*x24*x25, x1*x2*x3*x6*x7*x8*x10*x12*x13*x14*x20*x21*x22, x1*x2*x3*x5*x7*x9*x11*x16*x17*x24*x25, x3*x4*x7*x8*x9*x11*x14*x15*x16*x17*x20*x22*x23*x24*x25, x3*x4*x8*x10*x13*x16*x17*x19*x20*x22*x23*x25, x1*x3*x4*x6*x7*x8*x11*x15*x16*x19*x20*x22*x24*x25, x3*x4*x5*x6*x7*x8*x9*x10*x11*x13*x17*x19*x20*x24, x2*x3*x4*x5*x6*x9*x10*x13*x15*x16*x18*x19*x21, x3*x4*x5*x8*x15*x16*x19*x20*x21*x24*x25, x1*x3*x6*x7*x9*x12*x14*x15*x17*x18*x23*x25, x1*x3*x5*x6*x7*x9*x11*x12*x16*x19*x20*x21*x22*x24*x25, x2*x3*x4*x7*x9*x13*x17*x20*x21*x23, x1*x6*x8*x9*x10*x11*x14*x15*x16*x20*x23, x1*x3*x4*x5*x8*x9*x12*x14*x17*x19*x20*x24*x25, x2*x5*x8*x9*x13*x15*x16*x18*x20*x22*x24*x25, x2*x3*x8*x9*x11*x15*x16*x18*x20*x21*x22*x23*x25, x3*x4*x6*x7*x9*x12*x14*x15*x16*x17*x18*x19*x21*x23*x25, x1*x5*x6*x7*x8*x10*x13*x15*x18*x23, x1*x2*x3*x4*x7*x8*x11*x12*x16*x17*x20*x21*x23*x25, x1*x3*x5*x7*x13*x14*x18*x20*x21*x25, x1*x2*x3*x4*x5*x7*x8*x10*x13*x17*x19*x24, x4*x5*x7*x8*x11*x12*x16*x19*x21*x24, x1*x2*x3*x5*x6*x7*x9*x11*x13*x15*x17*x18*x19*x24, x1*x2*x4*x7*x8*x10*x12*x13*x14*x15*x17*x18*x22*x24*x25, x1*x4*x7*x8*x10*x11*x15*x18*x20*x21*x23*x25, x1*x4*x8*x9*x11*x13*x17*x18*x22*x24*x25, x1*x3*x4*x5*x6*x7*x8*x9*x10*x11*x13*x14*x16*x18*x20*x21*x24, x1*x3*x4*x6*x9*x10*x11*x12*x14*x16*x17*x19*x21*x23*x24, x2*x12*x14*x15*x16*x17*x19*x23*x25, x2*x3*x4*x5*x6*x8*x9*x11*x12*x14*x16*x22*x23*x25, x1*x6*x7*x8*x9*x10*x11*x16*x17*x18*x21*x23, x1*x3*x4*x6*x7*x10*x12*x14*x16*x19*x20*x21*x22, x1*x2*x3*x5*x6*x7*x8*x11*x13*x14*x19*x20*x21*x23*x24*x25, x1*x4*x5*x6*x7*x9*x10*x11*x12*x13*x15*x17*x20*x21*x22*x23*x24, x3*x6*x7*x9*x12*x13*x14*x18*x20, x1*x3*x4*x8*x9*x11*x12*x13*x16*x23*x25, x1*x9*x10*x12*x14*x18*x19*x21*x24, x1*x5*x7*x8*x12*x13*x14*x16*x17*x19*x22*x24*x25, x1*x4*x6*x7*x8*x9*x13*x15*x16*x19*x20*x22*x25, x4*x6*x8*x9*x11*x13*x15*x16*x17*x18*x20*x22*x24*x25, x1*x6*x7*x8*x10*x12*x14*x16*x17*x21*x22*x23*x24*x25, x2*x3*x7*x10*x12*x13*x15*x16*x17*x18*x20*x21*x22*x24, x1*x3*x6*x7*x8*x10*x13*x14*x15*x18*x23*x24*x25, x5*x7*x8*x10*x11*x12*x13*x14*x18*x19*x20*x22*x24*x25, x1*x2*x4*x5*x6*x11*x17*x18*x23*x25, x2*x3*x6*x7*x9*x10*x11*x14*x18*x21*x25, x1*x4*x8*x10*x13*x16*x18*x24*x25, x4*x5*x9*x11*x16*x17*x18*x21*x25, x1*x3*x7*x8*x12*x13*x14*x15*x16*x24, x2*x4*x6*x7*x8*x9*x10*x11*x14*x15*x17*x18*x21*x22*x23, x3*x4*x6*x8*x9*x10*x11*x13*x14*x15*x16*x23*x24, x3*x4*x5*x6*x7*x8*x10*x11*x12*x14*x16*x18*x19*x20*x22*x25, x1*x2*x4*x6*x7*x9*x11*x14*x16*x19*x20*x23*x25, x1*x2*x5*x9*x10*x11*x12*x14*x15*x17*x18*x20*x21*x22*x24*x25, x1*x5*x7*x9*x11*x12*x15*x17*x22*x25, x1*x6*x7*x9*x11*x12*x13*x14*x18*x20*x21*x24*x25, x1*x3*x4*x5*x6*x7*x10*x11*x13*x14*x15*x16*x18*x22*x25, x2*x4*x5*x6*x7*x10*x11*x17*x19*x21*x22*x23*x25, x1*x2*x3*x5*x10*x12*x13*x17*x20*x21*x22, x1*x2*x5*x7*x9*x12*x14*x17*x21*x22*x24*x25, x2*x6*x10*x12*x13*x16*x19*x20*x25, x2*x5*x6*x14*x15*x16*x18*x20*x21*x22*x24, x2*x5*x6*x7*x8*x10*x13*x20*x21*x22*x23*x24, x1*x4*x5*x8*x11*x12*x14*x16*x17*x18*x19, x3*x4*x5*x7*x11*x14*x15*x17*x19*x22*x23, x2*x5*x7*x8*x10*x13*x14*x16*x17*x18, x4*x5*x6*x7*x9*x10*x12*x13*x14*x15*x17*x20*x23*x24*x25, x1*x2*x3*x6*x11*x13*x14*x15*x16*x17*x19*x20*x21*x23*x25, x2*x3*x4*x6*x7*x8*x10*x12*x17*x18*x19*x20*x22*x23, x2*x5*x7*x13*x14*x15*x16*x17*x19*x20*x23, x2*x4*x6*x8*x10*x11*x13*x14*x15*x18*x19*x21*x22*x23*x24, x2*x3*x5*x6*x9*x10*x12*x16*x17*x18*x19*x20*x22*x24, x5*x6*x7*x9*x10*x11*x13*x14*x17*x19*x22*x23, x1*x2*x3*x5*x8*x9*x10*x12*x14*x15*x17*x18*x19*x20*x22*x24, x2*x3*x4*x5*x10*x11*x12*x14*x17*x18*x20*x23*x25, x4*x7*x8*x9*x10*x11*x12*x13*x16*x18*x20*x21*x22, x3*x5*x6*x8*x9*x15*x20*x21*x24, x2*x3*x5*x6*x7*x11*x12*x13*x14*x16*x17*x18*x21*x23*x24, x2*x3*x4*x5*x6*x7*x8*x9*x10*x13*x15*x23*x25, x3*x4*x6*x7*x8*x10*x11*x12*x13*x16*x18*x20*x21*x25, x4*x7*x10*x11*x12*x13*x14*x18*x19*x20*x21, x5*x8*x9*x10*x15*x19*x20*x21*x22*x23*x24*x25, x4*x6*x7*x8*x9*x12*x13*x14*x16*x17*x19*x21*x23*x24*x25, x2*x3*x4*x7*x9*x12*x13*x14*x16*x19*x21*x22, x1*x2*x4*x5*x6*x7*x8*x9*x11*x13*x16*x18*x19*x22*x23*x25, x1*x4*x5*x8*x11*x14*x15*x16*x18*x22*x23*x25, x2*x3*x4*x7*x8*x9*x10*x11*x12*x13*x14*x17*x19*x22*x24, x1*x3*x5*x6*x8*x9*x11*x13*x14*x15*x18*x19*x20*x23, x5*x6*x7*x8*x12*x13*x18*x21*x24*x25, x1*x3*x4*x6*x7*x10*x12*x14*x17*x22*x23*x24, x1*x4*x6*x7*x8*x9*x12*x20*x22*x23*x24*x25, x1*x4*x5*x7*x9*x11*x12*x13*x14*x18*x19*x20*x21*x23*x24, x1*x2*x4*x8*x9*x10*x11*x12*x17*x18*x19*x21*x25, x3*x5*x8*x9*x11*x12*x14*x15*x16*x17*x20*x21*x25, x3*x4*x5*x9*x10*x13*x14*x15*x18*x20*x21*x23*x24, x3*x4*x6*x7*x8*x9*x12*x13*x16*x17*x20*x21*x23*x25, x3*x4*x5*x6*x7*x8*x10*x14*x16*x18*x22*x24, x1*x2*x4*x5*x6*x9*x14*x15*x17*x19*x20*x21*x22*x25, x1*x3*x4*x5*x7*x10*x13*x16*x17*x18*x21*x24*x25, x2*x4*x6*x7*x10*x14*x16*x19*x20*x22*x23, x3*x7*x8*x10*x11*x17*x20*x24*x25, x3*x8*x9*x10*x11*x14*x15*x16*x17*x18*x19*x20*x21, x1*x2*x3*x4*x5*x6*x8*x9*x10*x18*x20*x22*x24*x25, x2*x3*x4*x5*x6*x7*x9*x10*x11*x19*x21, x2*x3*x4*x5*x6*x9*x10*x11*x12*x13*x15*x21*x23*x24*x25, x3*x5*x6*x9*x12*x14*x16*x18*x19*x20*x21*x23*x25, x4*x5*x6*x8*x10*x13*x14*x18*x20*x22*x24, x1*x6*x10*x11*x13*x16*x17*x19*x20*x25, x2*x3*x4*x5*x6*x8*x9*x11*x14*x15*x16*x18*x19*x21*x24*x25, x3*x5*x9*x10*x11*x12*x13*x16*x19*x20*x21*x22*x23*x24*x25, x2*x3*x5*x8*x9*x12*x17*x20*x22*x23*x24*x25, x5*x6*x7*x10*x11*x15*x16*x19*x24, x1*x2*x3*x5*x9*x10*x14*x16*x19*x20*x21*x22*x23*x25, x2*x3*x5*x7*x8*x10*x11*x13*x15*x16*x17*x19*x20*x22*x23, x4*x5*x6*x8*x10*x11*x15*x16*x17*x21*x23*x24, x1*x4*x5*x9*x10*x11*x15*x16*x17*x20*x22*x23, x2*x3*x5*x8*x9*x11*x14*x15*x18*x19*x21*x22*x23*x25, x2*x9*x10*x14*x16*x18*x21*x24*x25, x1*x2*x5*x6*x7*x8*x10*x12*x14*x15*x16*x17*x21*x22*x23, x2*x4*x5*x11*x13*x17*x18*x23*x24, x1*x5*x6*x9*x10*x22*x23*x24*x25, x1*x4*x5*x9*x10*x13*x14*x17*x18*x19*x20*x21*x22*x23*x24*x25, x2*x5*x6*x7*x9*x10*x11*x12*x14*x15*x16, x1*x2*x5*x8*x10*x12*x14*x15*x16*x17*x20*x22*x25, x4*x5*x6*x7*x8*x11*x13*x18*x20*x21*x22*x23*x24, x2*x6*x7*x9*x11*x12*x15*x19*x22*x23*x25, x1*x6*x7*x8*x10*x11*x14*x16*x17*x23*x25, x1*x3*x4*x6*x10*x11*x12*x14*x16*x18*x21*x25, x3*x5*x6*x9*x11*x12*x13*x16*x17*x18*x19*x20*x22*x25, x1*x5*x9*x10*x12*x16*x18*x19*x20*x22*x23*x25, x2*x3*x4*x5*x7*x8*x11*x12*x13*x14*x16*x17*x21*x24*x25, x1*x3*x4*x5*x6*x10*x16*x17*x20*x23*x25, x3*x6*x9*x10*x11*x13*x15*x21*x22*x23*x25, x2*x5*x6*x8*x9*x11*x12*x13*x14*x18*x20*x23, x3*x5*x8*x9*x12*x13*x14*x15*x16*x19*x20, x1*x2*x4*x7*x9*x10*x14*x18*x20*x21*x24*x25, x2*x5*x6*x7*x8*x9*x10*x12*x19*x22*x24, x2*x3*x4*x8*x11*x15*x16*x18*x20*x25, x2*x3*x5*x6*x7*x10*x12*x15*x16*x19*x22*x23*x24*x25, x2*x4*x6*x8*x9*x11*x13*x15*x16*x17*x18*x19*x21*x22, x1*x5*x6*x7*x10*x12*x15*x16*x17*x20*x21*x23, x2*x3*x6*x12*x15*x19*x21*x22*x23*x25, x3*x4*x5*x6*x7*x8*x12*x14*x15*x16*x17*x22*x25, x2*x3*x5*x8*x10*x11*x12*x15*x16*x18*x19*x21*x22*x23*x24, x5*x7*x8*x9*x10*x12*x13*x14*x17*x22*x23*x24*x25, x2*x3*x6*x10*x11*x14*x16*x17*x18*x19*x20*x21*x25, x1*x5*x7*x12*x13*x16*x17*x18*x19*x20*x24*x25, x1*x4*x6*x11*x12*x13*x14*x18*x21*x23*x24, x1*x2*x4*x5*x6*x7*x10*x11*x15*x18*x20*x21, x6*x7*x12*x13*x15*x16*x17*x18*x20*x21*x22*x24*x25, x3*x4*x5*x6*x7*x9*x14*x15*x16*x19*x22*x23*x24, x3*x5*x11*x15*x16*x17*x18*x19*x20*x21*x22*x24, x1*x3*x8*x10*x11*x13*x14*x15*x16*x17*x19*x21*x25, x5*x9*x10*x12*x14*x16*x18*x19*x20*x23*x24, x2*x4*x6*x7*x9*x10*x13*x14*x15*x16*x17*x18*x21*x22*x23*x24, x2*x4*x5*x9*x10*x12*x15*x16*x17*x18*x20*x22*x23*x24, x2*x3*x5*x6*x7*x9*x14*x15*x16*x19*x23, x3*x6*x9*x11*x12*x13*x15*x17*x19*x21*x23, x1*x4*x5*x6*x9*x10*x14*x16*x18*x19*x21*x22*x23, x1*x2*x5*x7*x8*x9*x13*x14*x17*x20*x22*x25, x1*x3*x5*x8*x9*x11*x14*x16*x17*x18*x20*x21*x22*x23*x24*x25, x4*x5*x6*x8*x10*x11*x12*x14*x15*x16*x20*x21*x24*x25, x2*x4*x10*x13*x14*x15*x19*x20*x23*x25, x4*x5*x7*x10*x13*x16*x17*x18*x20*x24, x1*x2*x5*x8*x13*x14*x17*x18*x20*x21*x23*x24*x25, x1*x2*x4*x6*x7*x8*x12*x16*x17*x18*x19*x21*x24, x1*x5*x9*x10*x12*x14*x18*x19*x20*x22*x24*x25, x1*x3*x4*x6*x9*x10*x12*x17*x18*x20*x21*x23, x2*x3*x6*x7*x8*x12*x14*x15*x16*x20*x21*x23, x1*x2*x4*x5*x7*x8*x9*x10*x11*x12*x13*x14*x15*x17*x19*x21*x22, x1*x3*x4*x6*x8*x9*x12*x15*x20*x21*x23*x24, x1*x2*x5*x7*x10*x12*x13*x14*x16*x17*x18*x19*x20*x21*x23*x25, x7*x8*x11*x13*x15*x17*x18*x20*x22*x24, x3*x6*x7*x8*x9*x10*x12*x13*x15*x17*x19*x20*x22, x1*x2*x5*x6*x8*x10*x11*x12*x13*x16*x20*x23, x1*x2*x4*x5*x7*x10*x11*x13*x14*x15*x17*x18*x19*x21*x22*x25, x1*x3*x4*x5*x8*x10*x12*x16*x19*x22*x24, x1*x6*x8*x10*x12*x13*x15*x16*x19*x20*x21*x22*x24, x3*x4*x5*x6*x8*x9*x14*x15*x17*x22*x25, x1*x2*x3*x6*x7*x8*x15*x16*x17*x18*x20*x21*x22, x2*x5*x12*x13*x14*x15*x16*x17*x19*x20*x24*x25, x3*x4*x5*x6*x7*x8*x11*x13*x16*x17*x18*x19*x20*x23, x1*x3*x7*x9*x12*x16*x18*x19*x21*x22*x23*x24, x3*x7*x13*x14*x15*x16*x17*x19*x20*x22*x23*x25, x1*x2*x4*x7*x9*x15*x17*x18*x19*x21*x22*x23*x24*x25, x3*x5*x7*x10*x12*x13*x14*x17*x19*x21*x22*x23*x24*x25, x1*x2*x3*x4*x6*x10*x11*x16*x18*x19*x20*x23*x24*x25, x1*x6*x7*x8*x12*x13*x14*x17*x18*x19*x20*x21*x22*x24*x25, x2*x5*x6*x8*x9*x11*x15*x16*x17*x19*x25, x1*x3*x8*x9*x12*x13*x14*x17*x18*x22*x24, x4*x5*x7*x8*x10*x12*x14*x15*x19*x20*x21*x22*x24, x1*x2*x3*x4*x6*x7*x8*x9*x10*x11*x13*x16*x17*x18*x19*x25, x4*x5*x6*x7*x10*x11*x13*x14*x18*x19*x22*x23*x25, x1*x2*x3*x5*x6*x9*x10*x11*x12*x13*x14*x15*x20*x23, x2*x3*x4*x5*x6*x7*x9*x10*x12*x13*x18*x19*x21*x22*x24, x2*x3*x6*x8*x10*x13*x14*x16*x17*x19*x20*x21*x23, x2*x3*x4*x8*x9*x10*x13*x14*x18*x21*x23*x24*x25, x1*x4*x5*x6*x8*x9*x13*x15*x16*x17*x21*x22*x23*x24, x2*x5*x7*x9*x11*x13*x14*x16*x17*x18*x20*x25, x1*x3*x7*x9*x12*x19*x20*x22*x23*x24, x3*x6*x7*x8*x9*x10*x11*x24*x25, x3*x4*x8*x10*x11*x12*x13*x14*x16*x17*x19*x20*x21*x22*x24, x3*x4*x5*x7*x8*x9*x10*x11*x17*x18*x19*x21*x25, x3*x4*x6*x7*x8*x11*x13*x15*x16*x17*x22, x1*x4*x7*x9*x10*x12*x16*x22*x23, x1*x3*x4*x5*x11*x13*x14*x16*x17*x18*x19*x21*x22*x25, x1*x3*x5*x8*x9*x10*x13*x14*x16*x17*x19*x21, x2*x5*x6*x7*x10*x11*x12*x17*x21*x22*x24, x1*x2*x4*x6*x9*x10*x12*x13*x15*x16*x17*x18*x25, x1*x2*x4*x9*x10*x11*x13*x14*x16*x17*x18*x20*x25, x1*x2*x3*x4*x5*x8*x10*x13*x15*x16*x19*x20*x21*x22*x23, x2*x4*x5*x6*x10*x14*x15*x17*x18*x22*x25, x1*x2*x3*x4*x5*x8*x10*x11*x14*x15*x17*x19*x20*x21*x23*x25, x3*x5*x7*x9*x11*x12*x13*x15*x16*x18*x19*x20, x3*x4*x5*x7*x10*x11*x14*x18*x19*x21*x22*x23, x6*x7*x9*x10*x12*x14*x15*x16*x18*x19*x20*x22, x1*x3*x6*x8*x11*x12*x14*x15*x16*x21*x22*x23*x24, x2*x3*x4*x5*x6*x7*x8*x12*x15*x18*x19*x22*x23*x25, x1*x2*x3*x4*x5*x8*x13*x14*x16*x18*x19*x20*x21*x23*x24, x2*x4*x6*x8*x10*x11*x12*x13*x18*x19*x21*x22*x24, x2*x4*x5*x8*x10*x11*x12*x15*x18*x21*x22*x23, x4*x6*x10*x12*x16*x17*x18*x20*x21*x23, x1*x3*x5*x7*x8*x9*x10*x11*x13*x15*x17*x19*x21*x22*x23*x24, x2*x3*x5*x6*x7*x8*x10*x11*x13*x15*x16*x17*x19*x22, x1*x2*x4*x7*x9*x10*x14*x15*x17*x18*x19*x20*x21*x24, x2*x3*x5*x6*x8*x9*x10*x12*x13*x16*x17*x19*x21*x22*x24, x1*x2*x5*x7*x8*x11*x12*x16*x17*x18*x19*x21*x23*x24, x3*x4*x9*x10*x12*x14*x15*x16*x18*x19*x21*x22*x25, x1*x4*x7*x8*x9*x10*x15*x16*x17*x18*x19*x22*x24, x3*x6*x7*x8*x9*x10*x12*x13*x18*x19*x23*x24*x25, x1*x3*x4*x5*x6*x8*x12*x20*x21*x25, x4*x6*x8*x9*x10*x13*x17*x21*x22*x23*x25, x1*x2*x4*x7*x8*x13*x14*x15*x16*x18*x20*x23*x24*x25, x1*x2*x4*x6*x7*x8*x9*x10*x12*x13*x14*x16*x18*x20*x21*x22*x24, x3*x4*x6*x9*x10*x11*x12*x13*x14*x15*x16*x19*x20*x21*x23*x25, x2*x3*x5*x6*x7*x8*x10*x11*x12*x13*x15*x16*x17*x22*x23*x25, x4*x7*x8*x10*x13*x15*x17*x18*x19*x22*x24*x25, x1*x3*x5*x7*x10*x12*x15*x18*x19*x21*x22*x23*x24*x25, x1*x2*x6*x8*x11*x14*x16*x17*x19*x22, x2*x3*x4*x5*x7*x8*x9*x14*x16*x17*x18*x19*x21*x22*x23*x24, x3*x4*x5*x6*x9*x11*x14*x15*x16*x17*x22*x24, x1*x5*x6*x7*x9*x10*x11*x13*x15*x18*x22*x24*x25, x1*x3*x5*x9*x11*x12*x15*x17*x20*x22*x24*x25, x1*x2*x3*x7*x15*x16*x17*x18*x19*x21*x25, x1*x2*x5*x8*x9*x12*x14*x16*x18*x20*x25, x1*x3*x5*x6*x9*x10*x17*x18*x19*x21*x25, x4*x7*x8*x9*x10*x15*x17*x20*x23*x25, x1*x2*x4*x7*x12*x15*x17*x20*x23*x24, x4*x5*x6*x8*x9*x10*x11*x12*x14*x16*x18*x19*x22*x24, x2*x3*x6*x9*x10*x11*x12*x13*x14*x16*x17*x18*x19*x20*x21*x22, x1*x2*x3*x4*x5*x6*x9*x11*x12*x16*x19*x20*x25, x1*x4*x5*x6*x7*x8*x11*x12*x13*x16*x18*x19*x21*x22*x23, x2*x3*x4*x5*x8*x9*x17*x21*x23*x25, x1*x2*x3*x5*x6*x7*x8*x11*x12*x15*x17*x19*x20*x22, x1*x3*x4*x5*x6*x7*x11*x12*x13*x18*x20*x21*x22*x23*x24, x1*x2*x7*x9*x10*x12*x14*x17*x18*x19*x22*x23*x25, x3*x4*x7*x11*x15*x16*x19*x20*x21*x22*x23*x24, x5*x6*x9*x10*x11*x17*x19*x20*x22*x24, x5*x8*x9*x10*x13*x15*x16*x17*x18*x19*x24, x1*x2*x3*x4*x5*x7*x8*x9*x10*x11*x12*x15*x18*x25, x1*x2*x3*x4*x9*x10*x12*x14*x19*x21*x22*x23*x25, x1*x2*x7*x8*x9*x10*x11*x13*x15*x16*x17*x22*x24*x25, x1*x2*x7*x8*x9*x10*x11*x17*x19*x21*x22*x23*x24*x25, x1*x2*x4*x5*x8*x10*x12*x13*x15*x17*x19*x23*x24*x25, x1*x2*x4*x5*x6*x7*x8*x11*x13*x14*x17*x20*x22*x23*x24, x1*x2*x4*x5*x7*x8*x9*x10*x11*x13*x15*x16*x17*x19*x21*x23*x24*x25, x2*x5*x6*x11*x17*x18*x21*x22*x23*x25, x1*x2*x4*x5*x6*x7*x9*x11*x12*x13*x17*x21*x24, x6*x9*x10*x11*x12*x15*x17*x18*x19*x20*x22*x23*x24, x3*x4*x6*x7*x10*x11*x12*x14*x15*x18*x19*x20*x21*x22*x23, x2*x3*x4*x7*x8*x10*x11*x12*x13*x16*x18*x19*x20*x22*x23, x1*x5*x6*x7*x9*x10*x13*x14*x15*x19*x20*x21*x22*x25, x2*x4*x7*x11*x12*x15*x16*x18*x19*x20*x21*x23*x24*x25, x2*x4*x6*x7*x11*x12*x14*x15*x18*x19*x20*x22, x1*x3*x5*x7*x9*x10*x12*x14*x15*x17*x20*x21*x23*x25, x1*x3*x7*x8*x9*x11*x15*x16*x19*x20*x21*x23*x25, x1*x2*x6*x7*x10*x11*x14*x18*x23, x4*x5*x10*x13*x14*x15*x16*x17*x18*x19*x21*x22, x4*x5*x7*x10*x11*x12*x13*x17*x18*x19*x20*x21*x23*x24, x1*x4*x6*x8*x9*x10*x12*x14*x15*x20*x21*x22*x23*x24, x1*x3*x5*x7*x9*x10*x14*x15*x17*x18*x19*x20*x21, x3*x5*x6*x8*x9*x10*x13*x14*x16*x17*x19*x21*x22*x23, x1*x2*x5*x6*x7*x8*x11*x13*x15*x18*x19*x23*x24, x1*x5*x8*x9*x10*x12*x13*x14*x15*x17*x19*x20*x21*x23*x24*x25, x1*x2*x4*x5*x6*x8*x9*x12*x13*x15*x17*x19*x20*x21*x22*x23, x8*x9*x14*x16*x19*x20*x22*x23*x24, x3*x4*x5*x6*x7*x8*x10*x11*x12*x15*x16*x18*x20*x22*x23*x24*x25, x1*x5*x6*x7*x8*x9*x10*x14*x15*x16*x17*x19, x2*x3*x5*x6*x7*x8*x10*x13*x16*x17*x20, x2*x3*x4*x5*x6*x7*x9*x11*x13*x14*x19*x21*x23, x1*x3*x4*x6*x7*x8*x9*x10*x11*x14*x15*x17*x19*x21*x25, x1*x7*x8*x9*x10*x12*x13*x15*x16*x18*x20*x21*x24, x1*x3*x6*x9*x10*x13*x15*x17*x20*x21*x22*x23*x24*x25, x1*x2*x3*x4*x5*x6*x8*x9*x11*x13*x20, x2*x3*x6*x10*x12*x13*x14*x16*x17*x19*x22*x23*x25, x2*x3*x6*x8*x11*x13*x17*x21*x24, x1*x3*x4*x5*x7*x9*x12*x14*x15*x16*x17*x19*x20*x23*x24*x25, x1*x2*x4*x6*x7*x10*x12*x14*x15*x16*x18*x19*x20*x21*x25, x2*x3*x4*x5*x7*x8*x9*x17*x18*x19*x20*x22*x24*x25, x1*x2*x7*x9*x12*x14*x15*x17*x18*x19*x20*x23*x24*x25, x2*x3*x4*x5*x6*x8*x9*x10*x14*x16*x19*x20*x21*x24, x1*x2*x4*x6*x10*x11*x12*x14*x16*x23*x24, x8*x9*x10*x11*x13*x16*x19*x20*x21*x22*x23*x24, x1*x2*x9*x11*x13*x15*x16*x17*x18*x19*x21*x22*x23*x24, x4*x5*x8*x13*x15*x17*x19*x20*x22*x25, x3*x4*x7*x12*x17*x18*x20*x24, x1*x2*x3*x18*x19*x21*x22*x23*x25, x1*x4*x6*x7*x8*x10*x11*x13*x14*x15*x18*x19*x20*x25, x2*x5*x6*x8*x9*x10*x12*x14*x15*x16*x17*x19*x20*x21, x1*x2*x3*x6*x7*x14*x17*x18*x19*x20*x23*x25, x2*x5*x7*x10*x11*x12*x14*x15*x16*x17*x20*x24*x25, x1*x2*x4*x6*x7*x8*x9*x10*x11*x13*x18*x19*x22, x2*x5*x8*x10*x11*x13*x14*x15*x19*x21*x22*x23*x25, x1*x2*x5*x6*x7*x8*x10*x15*x18*x20*x21*x22*x25, x1*x2*x4*x6*x8*x12*x16*x18*x19*x20*x21*x24*x25, x2*x5*x7*x10*x11*x14*x15*x16*x17*x21*x22*x24, x2*x3*x8*x9*x11*x12*x14*x16*x20*x22*x23*x24*x25, x1*x2*x4*x6*x8*x13*x14*x16*x17*x18*x24, x2*x3*x4*x6*x8*x10*x12*x14*x15*x16*x18*x20*x21*x23, x3*x4*x9*x11*x12*x13*x16*x18*x19*x21*x22, x1*x3*x4*x5*x7*x9*x11*x13*x14*x15*x20*x22, x3*x4*x6*x7*x8*x9*x11*x13*x14*x15*x16*x19*x21*x23*x24, x1*x3*x4*x5*x6*x12*x13*x15*x20*x21*x22*x24, x3*x10*x11*x12*x13*x14*x16*x17*x18*x20*x21*x24*x25, x1*x3*x5*x8*x9*x11*x12*x18*x19*x20*x25, x1*x3*x4*x5*x7*x8*x9*x10*x11*x14*x15*x16*x17*x19*x22, x2*x5*x6*x8*x9*x12*x13*x14*x18*x19*x21*x22*x23*x25, x1*x4*x5*x6*x8*x9*x10*x11*x13*x14*x15*x18*x19*x20*x21, x1*x2*x3*x4*x6*x13*x14*x15*x18*x20, x1*x2*x3*x7*x10*x11*x12*x13*x14*x15*x21*x22*x25, x3*x7*x8*x10*x12*x13*x14*x16*x18*x19*x23*x25, x2*x3*x4*x5*x8*x9*x10*x13*x14*x17*x18*x19*x20*x21*x22*x25, x1*x4*x5*x6*x7*x11*x14*x15*x17*x23*x24*x25, x1*x3*x5*x8*x11*x12*x15*x16*x19*x21*x22, x1*x4*x6*x8*x9*x10*x11*x12*x16*x17*x18*x19*x22*x23, x1*x4*x7*x8*x10*x14*x15*x19*x20*x22*x25, x2*x3*x4*x6*x8*x9*x10*x13*x14*x15*x17*x19*x22*x24*x25, x5*x8*x11*x12*x15*x16*x19*x22*x23*x24*x25, x1*x3*x4*x5*x6*x10*x13*x15*x16*x19*x20*x21, x1*x5*x6*x7*x9*x10*x11*x12*x14*x15*x18*x20*x21*x22, x1*x2*x3*x4*x5*x7*x8*x9*x12*x14*x17*x18*x19*x20*x21*x22, x1*x3*x5*x8*x12*x14*x15*x16*x17*x18*x19*x20*x21*x23*x24, x1*x3*x4*x6*x7*x8*x11*x12*x13*x14*x16*x17*x22, x1*x4*x5*x8*x9*x10*x13*x15*x18*x19*x22*x23*x24*x25, x2*x3*x4*x5*x6*x7*x9*x11*x15*x17*x18*x20*x25, x3*x6*x7*x8*x9*x10*x11*x14*x15*x16*x17*x18*x22*x25, x4*x7*x9*x11*x12*x13*x16*x17*x18*x19*x21*x22, x2*x7*x9*x10*x11*x13*x15*x17*x18*x19*x20*x21, x2*x4*x6*x7*x11*x12*x14*x21*x24*x25, x1*x2*x5*x6*x9*x11*x12*x17*x19*x23*x24*x25, x1*x2*x5*x6*x8*x9*x12*x14*x18*x20*x21*x24*x25, x1*x5*x8*x10*x11*x14*x15*x18*x20*x24*x25, x1*x2*x5*x6*x9*x10*x11*x12*x14*x15*x17*x19*x20*x23*x25, x1*x2*x3*x4*x5*x8*x9*x10*x12*x17*x19, x1*x2*x3*x6*x7*x10*x17*x18*x20*x21*x24*x25, x2*x3*x6*x7*x8*x9*x10*x11*x12*x13*x15*x16*x17*x19*x22, x1*x4*x6*x7*x8*x9*x10*x12*x17*x18*x20*x21*x22*x24, x1*x4*x5*x9*x10*x13*x15*x17*x18*x19*x21*x22*x23*x24, x3*x5*x6*x7*x11*x12*x13*x15*x18*x20*x23*x24, x1*x6*x9*x11*x12*x15*x16*x17*x20*x23*x25, x4*x8*x12*x13*x14*x15*x17*x20*x23*x25, x1*x2*x3*x7*x10*x11*x14*x19*x20*x22*x23*x24, x3*x4*x5*x6*x8*x14*x16*x17*x18*x19*x20*x24*x25, x3*x4*x5*x9*x10*x12*x16*x17*x18*x20*x21*x24, x1*x5*x6*x7*x9*x13*x15*x16*x17*x19*x20*x21*x23, x1*x3*x7*x11*x15*x17*x18*x19*x23*x24, x1*x3*x5*x7*x8*x11*x13*x14*x17*x18*x19, x2*x7*x9*x10*x11*x12*x13*x14*x15*x16*x17*x20*x21*x22*x23*x25, x1*x2*x3*x5*x7*x8*x10*x11*x12*x13*x17*x19*x21*x22, x1*x2*x4*x5*x6*x7*x12*x15*x17*x19*x22*x24*x25, x3*x4*x5*x7*x9*x11*x12*x14*x17*x20*x21*x22*x25, x6*x9*x10*x12*x14*x15*x17*x18*x19, x9*x10*x15*x16*x17*x19*x21*x22*x23*x24, x2*x4*x7*x11*x13*x14*x15*x17*x18*x21*x23*x25, x1*x4*x5*x8*x9*x10*x11*x12*x13*x14*x17*x19*x22*x24*x25, x2*x4*x5*x9*x13*x15*x17*x18*x20*x21, x1*x10*x11*x12*x14*x15*x16*x18*x19*x20*x25, x1*x3*x5*x9*x10*x12*x13*x14*x19*x20*x21*x23*x24, x1*x2*x3*x10*x11*x12*x21*x23*x24*x25, x5*x8*x11*x13*x14*x15*x18*x19*x20*x21*x22*x24*x25, x6*x8*x11*x12*x14*x20*x21*x22*x23*x24*x25, x1*x2*x5*x7*x8*x9*x10*x11*x14*x18*x20*x23*x24, x1*x3*x4*x6*x8*x15*x16*x19*x20*x21*x22*x25, x4*x5*x6*x7*x9*x10*x14*x17*x18*x19*x22*x24*x25, x1*x2*x3*x6*x8*x9*x10*x11*x18*x19*x22*x24*x25, x2*x3*x5*x8*x10*x13*x15*x18*x22, x1*x3*x7*x8*x9*x11*x13*x14*x17*x18*x19*x23*x24, x1*x4*x5*x6*x9*x11*x12*x13*x15*x16*x17*x19*x20*x22*x25, x5*x6*x8*x11*x13*x16*x18*x19*x20*x21*x22*x24*x25, x3*x5*x7*x8*x9*x11*x13*x17*x21*x24*x25, x1*x3*x4*x5*x6*x8*x13*x17*x19*x23*x25, x2*x5*x7*x8*x13*x15*x17*x18*x20*x21*x24*x25, x1*x3*x4*x7*x11*x16*x17*x18*x19*x21*x22, x2*x6*x9*x10*x12*x13*x14*x15*x16*x17*x18*x22*x23*x25, x1*x2*x4*x8*x13*x15*x17*x18*x19*x20*x21*x23*x25, x1*x4*x6*x7*x8*x9*x13*x14*x16*x17*x21*x24*x25, x1*x3*x4*x10*x11*x14*x17*x18*x20*x21*x22*x23*x24, x6*x7*x8*x9*x11*x12*x14*x16*x17*x18*x19*x20*x24, x2*x3*x12*x13*x14*x19*x20*x21*x22*x24*x25, x2*x3*x5*x8*x9*x10*x11*x12*x13*x15*x16*x18*x21, x1*x2*x3*x4*x8*x9*x10*x11*x14*x16*x18*x19*x22*x25, x1*x2*x3*x4*x7*x8*x9*x10*x11*x12*x13*x14*x18*x20*x21*x22*x23*x24, x1*x3*x4*x5*x6*x9*x12*x14*x16*x20*x21*x22*x24*x25, x1*x3*x4*x7*x10*x12*x13*x14*x15*x16*x17*x18*x19*x22*x23*x24, x2*x4*x7*x8*x11*x16*x17*x18*x19*x20*x22*x23, x1*x2*x5*x7*x9*x10*x12*x18*x20*x24*x25, x4*x6*x8*x9*x10*x11*x12*x13*x14*x18*x20*x21, x4*x5*x6*x7*x8*x12*x13*x14*x15*x18*x20*x25, x3*x5*x6*x7*x9*x11*x12*x13*x14*x16*x18*x19*x23*x24, x2*x3*x5*x6*x8*x9*x11*x13*x14*x16*x22*x24, x1*x2*x4*x5*x7*x9*x10*x11*x12*x14*x17*x18*x20*x21*x22*x23, x4*x7*x10*x13*x14*x19*x20*x23, x2*x3*x5*x6*x7*x9*x10*x12*x14*x18*x19*x20*x23*x24*x25, x2*x4*x5*x6*x7*x9*x10*x12*x14*x20*x23, x2*x3*x5*x6*x9*x12*x13*x14*x15*x18*x19*x20*x22*x23, x2*x3*x5*x6*x8*x11*x12*x16*x17*x18*x19*x20*x21*x23*x24*x25, x3*x5*x7*x8*x10*x11*x13*x14*x19*x20*x21*x22*x24, x4*x6*x8*x10*x11*x17*x20*x21*x23*x24*x25, x3*x7*x8*x12*x14*x17*x18*x19*x20*x21*x22*x23, x2*x4*x7*x9*x10*x11*x12*x13*x17*x19*x23*x24*x25, x2*x3*x5*x9*x11*x12*x13*x14*x15*x20*x22*x23*x24*x25, x1*x3*x4*x5*x8*x10*x11*x12*x13*x14*x16*x18*x19*x20*x21*x23, x1*x4*x9*x10*x14*x15*x16*x22*x23*x24*x25, x3*x5*x11*x12*x13*x15*x16*x17*x24*x25, x1*x2*x4*x8*x9*x10*x11*x14*x16*x19*x21, x5*x7*x8*x12*x14*x15*x16*x17*x21*x25, x2*x4*x6*x8*x10*x12*x14*x15*x16*x22*x23, x1*x3*x5*x10*x13*x14*x15*x16*x17*x18*x22*x23*x24, x4*x6*x8*x10*x13*x15*x16*x17*x19*x20*x22*x24, x3*x5*x7*x8*x11*x14*x17*x18*x19*x20*x23, x1*x2*x5*x8*x9*x10*x11*x12*x15*x17*x18*x19*x21*x22*x24*x25, x1*x4*x5*x6*x8*x10*x11*x12*x14*x17*x19*x20*x21, x2*x4*x9*x11*x12*x13*x14*x15*x20*x22*x23*x24*x25, x1*x7*x8*x9*x12*x16*x17*x20*x21*x23*x24*x25, x6*x7*x11*x12*x13*x16*x19*x21*x23*x25, x1*x3*x5*x6*x8*x11*x12*x16*x17*x22, x1*x2*x3*x6*x8*x10*x11*x12*x13*x16*x17*x18*x20, x2*x3*x4*x6*x10*x11*x12*x14*x15*x16*x17*x18*x19*x20*x22, x1*x2*x5*x9*x13*x15*x16*x18*x19*x20*x22*x23, x1*x2*x3*x5*x9*x11*x12*x15*x17*x18*x19*x20*x23, x3*x5*x6*x8*x9*x12*x13*x17*x18*x20*x23*x24, x1*x3*x5*x7*x8*x9*x11*x12*x14*x23*x24, x1*x4*x6*x7*x9*x10*x16*x19*x21*x24*x25, x3*x4*x7*x8*x12*x14*x19*x20*x21*x22*x24, x2*x3*x4*x5*x11*x12*x14*x17*x18*x20*x21*x22*x23*x24, x1*x4*x7*x8*x10*x13*x14*x15*x16*x18*x19*x21*x25, x1*x2*x9*x10*x12*x17*x20*x22*x23*x24, x1*x3*x4*x10*x11*x12*x14*x15*x18*x22*x24, x5*x7*x8*x10*x11*x12*x14*x15*x16*x18*x19*x22*x23*x25, x1*x3*x4*x5*x6*x7*x10*x12*x14*x16*x20*x22*x23, x2*x6*x7*x8*x11*x15*x16*x20*x23, x1*x2*x4*x6*x8*x12*x13*x16*x18*x22*x24*x25, x3*x5*x7*x8*x9*x11*x15*x16*x17*x18*x19*x21*x24*x25, x2*x3*x4*x5*x9*x10*x11*x12*x13*x14*x21*x23*x24, x3*x5*x7*x9*x10*x12*x16*x17*x18*x19*x21*x22*x25, x2*x6*x7*x8*x12*x14*x15*x17*x18*x19*x20*x22*x23, x2*x3*x4*x6*x10*x12*x13*x14*x15*x17*x19*x21*x22*x24*x25, x3*x4*x6*x8*x9*x10*x12*x14*x16*x21*x23*x24*x25, x1*x2*x7*x13*x14*x15*x20*x21, x1*x3*x4*x5*x12*x13*x14*x16*x17*x19*x20*x21*x23, x2*x4*x5*x6*x8*x11*x12*x14*x15*x18*x19*x20*x21*x23*x24, x1*x3*x4*x6*x8*x9*x10*x11*x13*x14*x15*x16*x21*x23*x25, x2*x3*x6*x7*x8*x10*x11*x13*x15*x16*x17*x19*x20*x22*x24, x1*x2*x3*x5*x9*x11*x12*x13*x18*x19*x20*x21, x1*x2*x3*x4*x5*x6*x8*x9*x13*x14*x15*x16*x17*x19*x25, x2*x3*x4*x5*x6*x8*x10*x11*x16*x17*x18*x22*x23*x24, x3*x4*x5*x6*x8*x10*x11*x12*x13*x14*x16*x18*x22*x24*x25, x1*x3*x8*x13*x14*x15*x16*x18*x19*x20, x2*x7*x9*x10*x11*x13*x14*x15*x16*x17*x18*x19*x20*x22*x24*x25, x1*x5*x7*x10*x12*x14*x15*x17*x19*x20*x21*x22*x23*x25, x2*x3*x7*x8*x12*x13*x15*x18*x19*x21, x4*x5*x6*x8*x11*x13*x15*x16*x19*x20*x21*x24*x25, x1*x2*x4*x7*x9*x11*x12*x17*x19*x20*x22*x23*x24*x25, x3*x4*x9*x11*x13*x15*x17*x18*x19*x20*x25, x1*x4*x7*x9*x10*x11*x12*x13*x14*x15*x19*x23, x3*x4*x6*x8*x9*x10*x11*x12*x15*x16*x18*x22*x24, x1*x2*x3*x6*x7*x10*x14*x15*x19*x21*x23*x24*x25, x3*x4*x5*x6*x7*x9*x10*x11*x13*x16*x17*x23*x24, x4*x5*x6*x7*x11*x15*x16*x17*x20*x21*x22*x23*x25, x1*x2*x3*x7*x10*x11*x12*x13*x16*x17*x18*x21*x22, x3*x4*x6*x7*x9*x11*x13*x15*x18*x19*x20*x21*x22*x23, x1*x2*x4*x6*x7*x8*x15*x18*x21*x22*x23*x24, x2*x3*x7*x8*x9*x11*x12*x14*x15*x16*x17*x21*x23*x24*x25, x2*x4*x5*x6*x7*x8*x9*x12*x13*x15*x16*x18*x19*x20*x24, x2*x3*x6*x7*x9*x10*x11*x16*x17*x18*x23, x1*x3*x7*x10*x12*x13*x14*x16*x18*x19*x20*x21*x24, x1*x2*x3*x5*x8*x10*x13*x15*x16*x18*x23*x25, x1*x2*x4*x5*x6*x7*x8*x12*x14*x15*x16*x19*x20*x24*x25, x2*x4*x5*x7*x8*x13*x14*x15*x17*x19*x20*x23*x24, x3*x4*x9*x10*x13*x15*x18*x19*x23*x24, x1*x4*x9*x10*x11*x16*x18*x20*x22*x23*x25, x1*x5*x7*x8*x9*x10*x11*x16*x20*x21*x22*x23, x2*x5*x6*x8*x11*x13*x14*x17*x18*x21*x22*x23*x24, x1*x6*x7*x8*x10*x18*x19*x21*x22*x23*x24, x3*x5*x7*x9*x13*x14*x17*x19*x20*x21*x23, x3*x4*x6*x8*x9*x10*x14*x17*x20*x21*x23, x3*x6*x7*x8*x11*x14*x15*x18*x22*x24*x25, x2*x3*x5*x8*x9*x10*x11*x13*x17*x21*x23*x24, x2*x4*x5*x11*x12*x18*x19*x20*x22*x23*x25, x4*x5*x6*x8*x9*x11*x14*x15*x20*x21*x22*x25, x2*x7*x9*x10*x12*x15*x16*x19*x20*x21*x22*x23, x4*x5*x6*x7*x10*x11*x13*x15*x16*x19*x21*x22*x23*x25, x1*x2*x3*x7*x8*x9*x11*x18*x21*x25, x1*x7*x9*x11*x14*x15*x17*x19*x20*x22, x1*x2*x6*x12*x13*x14*x16*x19*x20*x21*x23, x3*x5*x9*x11*x12*x13*x14*x16*x17*x18*x19*x21*x22*x24, x5*x7*x8*x9*x10*x11*x13*x14*x16*x19*x20*x21, x2*x4*x5*x6*x7*x8*x11*x12*x15*x16*x17*x22*x23*x24*x25, x2*x4*x5*x6*x7*x9*x11*x13*x14*x16*x17*x19*x21*x22*x23*x25, x2*x3*x6*x7*x8*x9*x13*x14*x15*x16*x21*x23, x1*x4*x6*x7*x8*x12*x14*x15*x20*x23, x1*x3*x6*x9*x10*x12*x13*x14*x18*x20*x21*x22, x1*x2*x4*x6*x7*x8*x11*x13*x16*x17*x18*x20*x21*x22, x2*x6*x7*x9*x10*x11*x14*x15*x16*x17*x18*x20*x21*x22*x23*x24, x1*x2*x5*x6*x7*x9*x11*x13*x15*x17*x18*x22*x23*x25, x6*x7*x9*x12*x16*x19*x20*x21*x22*x23, x1*x2*x3*x5*x6*x7*x10*x11*x18*x19*x21*x24*x25, x5*x8*x9*x10*x12*x13*x17*x18*x19*x20*x21*x23*x25, x1*x4*x5*x9*x11*x12*x13*x14*x16*x18*x21*x24, x1*x4*x8*x10*x11*x12*x14*x15*x17*x19*x20*x22, x1*x2*x3*x4*x10*x11*x12*x14*x15*x16*x19*x20*x21, x1*x6*x7*x9*x13*x15*x16*x17*x19*x20*x22*x24*x25, x1*x2*x7*x8*x9*x15*x16*x17*x19*x20*x23*x24, x3*x4*x5*x7*x9*x11*x12*x14*x16*x17*x19*x21*x22*x25, x3*x5*x6*x10*x11*x12*x15*x18*x19*x21*x24*x25, x1*x2*x5*x7*x11*x15*x17*x18*x19*x23, x4*x6*x7*x8*x12*x14*x15*x16*x19*x20*x21*x24, x2*x5*x7*x8*x9*x12*x13*x14*x15*x16*x18*x20*x24*x25, x2*x4*x5*x6*x7*x8*x9*x11*x13*x14*x17*x19*x20*x23*x24*x25, x1*x2*x4*x6*x7*x9*x10*x13*x15*x16*x19*x23, x1*x3*x6*x7*x8*x9*x11*x12*x17*x18*x19*x21*x22*x24, x1*x2*x5*x8*x10*x11*x12*x13*x16*x21*x22*x23, x4*x6*x7*x8*x9*x12*x13*x14*x17*x18*x21*x24*x25, x2*x12*x13*x14*x17*x18*x20*x21*x23*x24, x2*x4*x7*x8*x9*x10*x13*x14*x16*x17*x20*x21*x23*x24, x1*x2*x5*x9*x10*x11*x15*x16*x18*x19*x20*x21*x23*x24*x25, x4*x6*x7*x11*x12*x14*x15*x19*x21*x23*x25, x1*x2*x7*x9*x11*x12*x13*x14*x18*x19*x20*x22*x24, x1*x4*x7*x8*x10*x15*x17*x20*x21*x22*x25, x1*x5*x8*x9*x11*x12*x13*x14*x15*x18*x19*x20*x24, x2*x5*x6*x8*x10*x13*x14*x17*x18*x19*x22*x23, x2*x3*x7*x8*x10*x11*x12*x14*x15*x16*x19*x20*x22*x23*x24, x1*x3*x8*x9*x12*x13*x15*x17*x18*x19*x20*x25, x1*x2*x3*x6*x8*x9*x16*x17*x19*x20*x23*x24, x3*x5*x6*x8*x10*x14*x15*x17*x18*x20*x22*x24, x1*x2*x3*x5*x6*x7*x8*x9*x10*x11*x12*x13*x17*x18*x20*x21*x23, x3*x7*x9*x12*x14*x16*x17*x18*x21*x24*x25, x7*x9*x11*x12*x15*x16*x17*x19*x21*x24*x25, x1*x2*x4*x5*x6*x8*x10*x11*x12*x14*x15*x21*x22*x23*x24*x25, x2*x3*x4*x6*x11*x17*x18*x20*x21*x24*x25, x1*x2*x6*x9*x12*x13*x14*x15*x17*x22*x23*x24, x1*x4*x5*x6*x8*x14*x16*x19*x20*x23*x25, x1*x4*x5*x6*x8*x9*x10*x11*x12*x13*x14*x15*x17*x20*x21, x4*x5*x6*x7*x8*x9*x11*x14*x16*x19*x21*x23*x24, x3*x4*x7*x10*x11*x12*x16*x17*x18*x20*x21*x23*x25, x2*x3*x5*x6*x7*x9*x14*x15*x16*x18*x20*x22*x23, x1*x2*x3*x8*x9*x12*x14*x15*x19*x21*x24, x1*x3*x5*x6*x7*x8*x9*x13*x14*x15*x16*x17*x20*x21, x3*x8*x12*x13*x14*x15*x16*x17*x18*x22*x23, x2*x8*x9*x11*x12*x14*x15*x16*x17*x18*x20*x21*x23*x25, x2*x3*x5*x7*x8*x15*x16*x17*x18*x20*x21*x25, x2*x3*x4*x6*x7*x8*x10*x11*x12*x16*x18*x19*x20*x24*x25, x3*x4*x5*x8*x10*x11*x14*x15*x17*x18*x21*x22*x23, x1*x2*x3*x4*x10*x13*x15*x16*x17*x18*x20, x2*x3*x4*x6*x8*x10*x12*x13*x14*x16*x17*x18*x20*x22, x1*x2*x3*x4*x5*x7*x8*x11*x13*x16*x18*x20*x23, x3*x4*x5*x7*x8*x11*x12*x15*x16*x17*x21*x22*x23*x24*x25, x4*x7*x10*x11*x12*x13*x14*x16*x20, x2*x3*x7*x8*x9*x13*x14*x15*x19*x21*x23, x1*x5*x6*x9*x11*x13*x14*x15*x16*x20*x21*x23*x25, x1*x2*x3*x4*x5*x7*x8*x9*x12*x13*x14*x17*x22*x23*x24, x1*x3*x4*x6*x7*x8*x9*x13*x14*x16*x19*x20*x22*x23, x1*x4*x5*x7*x12*x14*x17*x18*x19*x20*x21*x22*x23*x25, x2*x4*x5*x6*x9*x12*x17*x18*x20*x22*x23*x25, x1*x5*x7*x8*x9*x11*x12*x13*x19*x20*x22*x25, x1*x5*x6*x7*x8*x11*x12*x13*x14*x18*x22*x23*x24, x1*x6*x7*x8*x10*x12*x15*x16*x17*x20*x25, x3*x4*x5*x6*x7*x9*x15*x16*x17*x18*x25, x3*x4*x6*x8*x10*x12*x16*x18*x19*x20*x21*x22*x24, x1*x3*x10*x13*x15*x17*x18*x19*x22*x23*x25, x1*x3*x4*x5*x6*x9*x11*x12*x14*x16*x20*x22*x23*x24, x1*x2*x3*x6*x9*x10*x14*x17*x19*x20*x21*x22*x23*x24*x25, x3*x6*x8*x9*x11*x13*x14*x16*x17*x19*x20*x23*x25, x1*x2*x3*x4*x5*x9*x13*x14*x15*x16*x18*x20*x24, x2*x5*x7*x8*x10*x13*x14*x16*x20*x21*x22*x23*x24, x2*x5*x6*x8*x10*x11*x13*x14*x16*x19*x21*x22*x23*x24*x25, x3*x4*x9*x10*x11*x15*x19*x20*x21*x22*x23*x25, x2*x3*x6*x8*x9*x10*x12*x15*x17*x22*x24, x1*x2*x4*x9*x12*x13*x14*x15*x16*x19*x21, x1*x2*x4*x8*x11*x12*x15*x18*x19*x20*x22*x23, x1*x2*x5*x7*x8*x9*x10*x12*x19*x21*x22*x23, x1*x5*x6*x7*x8*x9*x11*x12*x13*x15*x16*x19*x22*x23*x24, x2*x3*x5*x7*x9*x14*x15*x16*x19*x20*x21*x22*x24, x2*x4*x5*x6*x8*x16*x18*x20*x23*x25, x1*x2*x4*x5*x7*x8*x9*x12*x13*x16*x17*x19*x20*x21*x22, x1*x4*x5*x7*x11*x14*x16*x18*x19*x20*x25, x1*x3*x5*x6*x7*x8*x9*x11*x12*x13*x15*x18*x22*x23*x24, x1*x3*x6*x13*x16*x20*x21*x22*x24*x25, x1*x5*x9*x11*x13*x19*x20*x23*x24*x25, x3*x6*x7*x8*x9*x11*x13*x15*x16*x18*x22*x24, x3*x5*x6*x7*x14*x17*x19*x22*x25, x1*x2*x4*x6*x15*x17*x20*x21*x23*x25, x1*x2*x4*x5*x7*x8*x9*x11*x12*x22*x24, x1*x2*x3*x4*x5*x6*x10*x11*x12*x15*x16*x19*x20*x21*x22*x24, x1*x4*x6*x8*x10*x13*x14*x15*x20*x21*x23, x1*x3*x5*x7*x11*x17*x21*x25, x1*x2*x3*x4*x5*x6*x9*x13*x15*x17*x18*x20*x22*x23*x25, x1*x6*x7*x9*x10*x11*x12*x13*x15*x16*x22*x23, x1*x3*x8*x9*x10*x11*x13*x14*x15*x16*x18*x19*x22*x23*x25, x3*x6*x8*x10*x12*x16*x19*x20*x22*x23, x12*x16*x17*x18*x19*x20*x21*x22*x25, x1*x2*x3*x8*x10*x11*x12*x18*x20*x25, x1*x4*x5*x6*x7*x8*x9*x13*x15*x17*x19*x20*x23, x1*x3*x5*x6*x8*x9*x10*x15*x16*x17*x18*x23, x1*x3*x4*x6*x7*x8*x10*x12*x14*x18*x20*x21*x22, x1*x3*x4*x5*x6*x12*x13*x14*x16*x20*x21*x23, x3*x5*x8*x9*x12*x13*x15*x17*x18*x25, x2*x4*x8*x11*x13*x18*x19*x21*x23*x25, x1*x4*x7*x8*x9*x11*x12*x17*x18*x19*x21*x23*x24*x25, x1*x8*x9*x10*x15*x17*x18*x20*x21*x22*x23, x2*x5*x7*x8*x9*x12*x13*x14*x15*x19*x20*x21*x22, x1*x3*x5*x7*x8*x9*x10*x12*x13*x14*x15*x17*x18*x22*x23, x1*x3*x6*x9*x12*x14*x16*x17*x18*x22, x1*x2*x3*x5*x13*x15*x16*x22*x23*x25, x1*x3*x5*x7*x9*x10*x12*x13*x14*x17*x19*x20*x21*x24, x2*x4*x6*x7*x9*x10*x12*x13*x19*x21*x22*x23*x25, x4*x5*x6*x7*x9*x10*x13*x14*x17*x18*x20*x21, x1*x3*x6*x7*x10*x11*x12*x14*x17*x19*x22*x23, x2*x3*x5*x8*x9*x10*x15*x18*x19*x22*x25, x1*x2*x3*x4*x7*x11*x13*x14*x17*x18, x3*x4*x5*x8*x9*x10*x11*x13*x14*x16*x17*x18*x19*x21, x3*x11*x12*x15*x17*x19*x20*x23*x25, x1*x2*x6*x7*x8*x9*x10*x15*x17*x20*x21*x23*x25, x1*x4*x10*x11*x12*x13*x14*x15*x17*x18*x19*x20*x21*x23*x24*x25, x1*x3*x7*x9*x10*x11*x12*x15*x16*x17*x19*x20*x22*x24*x25, x4*x7*x8*x9*x11*x14*x18*x19*x20*x23*x24*x25, x2*x3*x4*x9*x13*x16*x19*x21*x22*x23*x24*x25, x1*x4*x5*x6*x8*x9*x11*x15*x16*x17*x19*x20*x23, x2*x3*x7*x8*x11*x12*x13*x16*x18*x20*x22*x24, x1*x3*x7*x8*x10*x12*x15*x16*x17*x21*x23, x4*x7*x9*x10*x11*x13*x20*x21*x25, x1*x2*x8*x10*x13*x14*x15*x17*x21*x22*x23*x24, x2*x7*x8*x9*x10*x11*x12*x14*x16*x17*x18*x19*x20*x25, x1*x2*x6*x7*x9*x12*x15*x17*x22*x23*x24, x1*x3*x6*x9*x11*x16*x17*x18*x20*x23*x25, x2*x3*x4*x6*x9*x10*x11*x13*x15*x19*x20*x22*x25, x2*x3*x5*x6*x11*x12*x13*x14*x16*x18*x20*x21*x22*x24*x25, x1*x2*x3*x5*x8*x9*x11*x13*x14*x18*x20*x21*x22*x23, x1*x5*x7*x9*x10*x11*x15*x20*x21*x22*x25, x1*x3*x8*x11*x12*x13*x16*x18*x19*x20*x22*x23, x2*x3*x4*x5*x7*x8*x11*x12*x13*x18*x19*x23*x25, x1*x2*x6*x7*x9*x11*x14*x16*x18*x19*x21*x23, x1*x2*x6*x7*x8*x11*x12*x15*x17*x18*x22, x1*x3*x4*x7*x9*x15*x17*x18*x20*x21*x22, x2*x3*x6*x12*x14*x15*x18*x19*x20*x21*x24*x25, x1*x2*x4*x7*x8*x10*x14*x15*x17*x19*x22*x23*x24, x1*x2*x4*x5*x7*x12*x13*x15*x16*x18*x20*x21*x23*x24*x25, x1*x2*x3*x4*x7*x9*x13*x15*x17*x21*x22*x24, x2*x4*x6*x10*x12*x16*x17*x22*x24, x1*x2*x3*x4*x7*x8*x9*x10*x13*x15*x16*x18*x23*x25, x2*x3*x6*x9*x11*x13*x14*x16*x17*x19*x20*x21*x24*x25, x1*x2*x5*x9*x11*x13*x16*x17*x18*x20*x21*x22*x24*x25, x1*x4*x5*x7*x9*x11*x12*x14*x16*x17*x24*x25, x1*x2*x3*x6*x7*x10*x11*x12*x15*x17*x21*x22*x23, x1*x3*x4*x5*x7*x9*x10*x13*x16*x20*x21*x22*x23*x24, x1*x2*x4*x11*x12*x16*x19*x23*x25, x2*x3*x4*x6*x7*x8*x10*x16*x19*x21*x24, x1*x2*x5*x8*x9*x12*x13*x15*x17*x22*x23*x24, x1*x2*x4*x5*x7*x11*x12*x15*x16*x17*x23*x25, x1*x3*x4*x5*x6*x7*x9*x11*x12*x15*x16*x18*x22*x25, x4*x6*x8*x9*x10*x12*x13*x14*x16*x17*x18*x20*x23*x25, x2*x4*x6*x7*x8*x9*x11*x12*x14*x17*x19*x22*x25, x2*x4*x5*x6*x7*x8*x12*x13*x16*x17*x23*x24, x1*x2*x4*x5*x7*x9*x10*x13*x15*x16*x18*x20*x22*x23*x24*x25, x2*x4*x5*x6*x9*x13*x14*x15*x19*x21*x22*x23*x24*x25, x1*x3*x4*x5*x7*x10*x12*x13*x21*x22*x23*x25, x1*x2*x3*x5*x7*x8*x9*x16*x21*x22*x24, x1*x3*x8*x11*x13*x16*x17*x18*x19*x20*x22*x23*x25, x1*x4*x5*x9*x10*x11*x12*x14*x18*x20*x21*x22*x23*x24, x2*x3*x9*x13*x15*x16*x21*x22, x1*x2*x3*x4*x6*x11*x13*x16*x18*x21*x24, x3*x4*x5*x6*x7*x9*x12*x13*x15*x16*x17*x22, x1*x4*x5*x10*x13*x15*x16*x17*x21*x22, x1*x2*x3*x9*x12*x14*x16*x20*x21*x22*x23*x24, x1*x2*x7*x8*x9*x13*x14*x16*x17*x18*x19*x20*x21*x22*x24, x2*x3*x5*x7*x8*x10*x12*x13*x15*x17*x19*x20*x21*x23*x25, x1*x5*x8*x11*x12*x13*x14*x16*x18*x21*x23*x24*x25, x7*x8*x11*x12*x16*x17*x18*x21*x23*x24*x25, x2*x3*x7*x8*x12*x14*x16*x18*x19*x20*x23*x25, x1*x3*x4*x5*x10*x11*x12*x13*x14*x15*x16*x18*x23*x24*x25, x4*x5*x7*x8*x9*x12*x13*x15*x16*x20*x22*x23*x24, x6*x8*x9*x10*x11*x15*x17*x18*x19*x21*x22*x24, x3*x4*x10*x11*x12*x13*x15*x17*x22*x23, x2*x4*x6*x9*x13*x14*x16*x20*x22*x23*x24*x25, x2*x3*x4*x5*x8*x9*x10*x11*x12*x13*x15*x19, x1*x3*x6*x7*x8*x12*x13*x14*x16*x17*x20*x24, x1*x2*x6*x8*x10*x11*x13*x17*x19*x20*x21*x22*x23, x1*x2*x3*x4*x6*x8*x13*x15*x18*x19*x20*x21*x25, x2*x3*x6*x8*x12*x14*x16*x20*x24*x25, x4*x6*x8*x9*x10*x14*x15*x17*x23*x24, x2*x3*x6*x7*x8*x11*x14*x15*x18*x20*x21*x24, x1*x4*x5*x6*x9*x10*x11*x12*x13*x15*x16*x18*x20*x21*x23, x2*x3*x6*x9*x11*x12*x13*x15*x17*x18*x20*x21*x22*x23, x2*x4*x5*x6*x7*x8*x10*x13*x15*x17*x18*x19*x22*x23*x25, x1*x2*x3*x5*x6*x16*x21*x23*x24*x25, x1*x2*x4*x9*x10*x11*x12*x13*x15*x19*x20*x21*x22*x23, x1*x2*x4*x5*x7*x8*x11*x12*x16*x17*x18*x19*x20*x21*x23, x1*x2*x3*x8*x11*x12*x13*x16*x17*x21, x1*x4*x5*x6*x10*x11*x14*x15*x16*x19*x20*x21*x23*x25, x6*x7*x9*x10*x11*x12*x21*x22*x23*x24*x25, x1*x3*x4*x6*x8*x10*x12*x15*x17*x19*x20*x21*x22*x25, x1*x3*x9*x10*x11*x14*x16*x21*x22*x23*x25, x1*x2*x4*x6*x7*x8*x10*x13*x15*x16*x17*x20*x21*x22*x23, x1*x6*x7*x9*x10*x11*x17*x20*x21*x22*x24*x25, x2*x3*x4*x6*x7*x9*x10*x11*x14*x15*x17*x19*x21*x25, x1*x2*x3*x5*x6*x7*x14*x16*x17*x20*x23*x25, x3*x4*x5*x7*x8*x9*x10*x13*x17*x18*x21*x22*x25, x3*x9*x10*x11*x12*x14*x16*x17*x18*x21*x23*x25, x1*x2*x3*x5*x9*x10*x11*x13*x17*x20*x23*x24, x2*x5*x7*x8*x9*x10*x11*x15*x16*x17*x21*x22*x24, x1*x4*x6*x7*x9*x12*x13*x16*x17*x21*x22*x23*x24, x4*x7*x12*x13*x15*x17*x18*x22*x23*x24*x25, x1*x3*x4*x5*x9*x10*x15*x17*x18*x24*x25, x2*x6*x8*x9*x10*x11*x12*x14*x15*x17*x20*x22*x23*x24*x25, x3*x5*x6*x7*x11*x12*x13*x16*x18*x20*x22*x25, x1*x3*x4*x6*x8*x9*x10*x12*x16*x17*x18*x20*x23*x25 ); frobby-0.9.5/test/bench/sqfreeV80G1000.test000066400000000000000000004646071401527164200201650ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63, x64, x65, x66, x67, x68, x69, x70, x71, x72, x73, x74, x75, x76, x77, x78, x79, x80]; I = monomialIdeal( x3*x15*x18*x19*x23*x24*x26*x29*x31*x32*x38*x39*x40*x41*x42*x43*x47*x52*x55*x56*x57*x60*x61*x62*x63*x64*x65*x68*x70*x77*x80, x1*x2*x6*x7*x10*x12*x13*x14*x16*x17*x18*x19*x21*x23*x26*x28*x31*x35*x36*x41*x45*x52*x53*x56*x61*x62*x64*x65*x66*x68*x69*x70*x72*x74*x75*x76*x80, x1*x2*x6*x9*x10*x13*x17*x18*x20*x23*x25*x26*x27*x35*x36*x41*x42*x43*x44*x45*x47*x48*x51*x53*x54*x56*x60*x61*x62*x64*x68*x71*x72*x73*x75, x1*x2*x3*x5*x6*x11*x14*x15*x16*x19*x24*x26*x27*x28*x30*x33*x36*x37*x41*x42*x45*x48*x49*x51*x54*x58*x61*x62*x64*x65*x69*x70*x71*x72*x76*x78*x79, x1*x2*x3*x4*x5*x6*x8*x12*x13*x16*x17*x20*x21*x22*x26*x27*x32*x39*x41*x44*x45*x46*x49*x51*x53*x56*x57*x59*x60*x62*x63*x64*x65*x66*x68*x69*x75*x76*x78, x1*x4*x6*x7*x11*x12*x13*x15*x16*x17*x18*x21*x22*x27*x28*x32*x34*x37*x38*x45*x47*x48*x49*x51*x52*x56*x59*x60*x63*x65*x66*x69*x74*x76*x77, x1*x4*x6*x7*x10*x11*x14*x17*x18*x20*x23*x24*x25*x28*x30*x32*x39*x43*x44*x48*x52*x53*x55*x57*x61*x63*x64*x67*x68*x69*x71*x76*x77*x78*x79, x1*x3*x8*x9*x10*x11*x19*x20*x25*x29*x32*x34*x35*x37*x38*x40*x41*x42*x43*x48*x49*x55*x59*x60*x62*x65*x66*x67*x70*x72*x73*x74*x76*x78*x79*x80, x1*x2*x6*x7*x8*x9*x14*x16*x18*x21*x24*x25*x26*x29*x31*x33*x34*x36*x38*x41*x42*x43*x45*x47*x48*x50*x51*x52*x53*x54*x55*x56*x57*x58*x60*x62*x63*x64*x65*x69*x75*x76*x77*x78*x80, x2*x3*x7*x13*x14*x15*x16*x17*x24*x26*x29*x30*x31*x35*x36*x38*x39*x40*x42*x45*x50*x51*x54*x57*x61*x62*x63*x64*x65*x68*x69*x70*x71*x75*x79*x80, x2*x3*x5*x6*x8*x9*x12*x13*x14*x15*x16*x19*x23*x24*x26*x27*x28*x36*x37*x40*x41*x46*x47*x49*x52*x54*x55*x56*x59*x60*x61*x62*x63*x66*x67*x68*x71*x73*x77, x2*x3*x4*x5*x6*x7*x9*x10*x12*x13*x15*x19*x21*x28*x29*x32*x33*x35*x37*x38*x39*x41*x42*x43*x46*x48*x50*x52*x54*x56*x58*x59*x60*x62*x65*x66*x69*x70*x71*x73*x74*x75*x77*x80, x4*x7*x9*x11*x12*x13*x14*x15*x16*x19*x20*x21*x22*x23*x26*x27*x29*x30*x32*x33*x36*x37*x38*x40*x41*x44*x46*x48*x50*x51*x53*x55*x57*x58*x59*x60*x61*x63*x64*x68*x73*x74*x75*x77*x79*x80, x2*x4*x6*x7*x9*x10*x11*x12*x13*x16*x18*x19*x20*x22*x23*x25*x26*x29*x30*x34*x35*x38*x39*x40*x41*x42*x43*x45*x46*x50*x52*x55*x57*x61*x64*x65*x66*x67*x69*x70*x71*x75*x76*x77*x78*x80, x1*x2*x6*x11*x14*x16*x17*x19*x22*x23*x27*x28*x33*x35*x38*x41*x42*x43*x45*x46*x50*x52*x53*x54*x56*x57*x58*x60*x61*x62*x63*x64*x65*x66*x67*x70*x75*x76*x79, x1*x3*x4*x5*x6*x9*x11*x13*x14*x17*x18*x22*x23*x25*x27*x28*x29*x31*x33*x37*x41*x42*x43*x47*x50*x51*x54*x56*x59*x60*x62*x63*x65*x67*x69*x70*x71*x72*x73*x76*x79, x3*x5*x6*x7*x9*x13*x15*x16*x20*x23*x24*x26*x27*x28*x29*x30*x33*x36*x37*x38*x39*x40*x42*x46*x48*x49*x50*x51*x52*x54*x55*x56*x57*x59*x60*x62*x63*x66*x67*x68*x69*x70*x71*x72*x73*x74*x76*x77*x78*x79, x11*x12*x14*x15*x20*x21*x23*x25*x26*x28*x29*x32*x33*x34*x35*x37*x38*x39*x40*x41*x42*x43*x46*x49*x51*x54*x55*x56*x60*x64*x66*x67*x74*x75*x76*x77*x79, x4*x5*x7*x8*x9*x12*x13*x23*x26*x27*x28*x31*x33*x34*x35*x38*x40*x41*x43*x44*x45*x49*x54*x55*x60*x72*x75*x79*x80, x3*x9*x10*x11*x12*x13*x14*x15*x17*x18*x19*x20*x21*x22*x25*x26*x27*x29*x30*x32*x34*x37*x39*x40*x41*x42*x43*x44*x46*x48*x49*x51*x57*x60*x61*x62*x63*x64*x66*x67*x68*x70*x75*x76*x77*x78*x79, x1*x2*x3*x5*x7*x14*x17*x20*x22*x23*x24*x25*x29*x31*x35*x37*x38*x42*x44*x45*x48*x51*x52*x54*x58*x59*x62*x67*x70*x71*x72*x73*x74*x75*x76*x77*x78*x79*x80, x4*x7*x8*x11*x14*x15*x16*x18*x20*x21*x22*x23*x25*x28*x30*x31*x33*x37*x38*x40*x41*x44*x46*x47*x49*x50*x55*x56*x60*x61*x62*x64*x65*x68*x69*x71*x72*x74*x75*x76*x78*x80, x1*x3*x5*x6*x7*x9*x11*x12*x13*x14*x15*x20*x21*x22*x26*x27*x30*x33*x34*x38*x47*x50*x51*x54*x55*x57*x60*x62*x65*x66*x67*x68*x69*x70*x74*x75*x77*x79*x80, x1*x3*x4*x5*x7*x8*x9*x12*x15*x16*x18*x21*x24*x28*x29*x30*x31*x34*x36*x37*x38*x39*x40*x41*x42*x47*x52*x54*x59*x62*x63*x64*x67*x68*x69*x70*x71*x74*x75*x76*x80, x1*x2*x6*x8*x10*x14*x16*x17*x18*x22*x23*x25*x27*x32*x36*x37*x38*x39*x41*x43*x44*x45*x49*x51*x53*x54*x63*x64*x65*x66*x70*x71*x73*x74*x77, x4*x6*x10*x12*x15*x18*x19*x20*x21*x23*x24*x25*x26*x29*x30*x32*x34*x35*x36*x37*x38*x39*x40*x41*x42*x43*x46*x47*x48*x49*x50*x51*x53*x54*x57*x58*x62*x65*x67*x69*x71*x72*x75*x77*x78*x79, x2*x7*x10*x12*x14*x18*x22*x25*x26*x29*x30*x32*x35*x36*x40*x43*x47*x49*x50*x51*x52*x54*x59*x60*x62*x63*x64*x67*x70*x72*x73*x74*x75*x76*x78*x79*x80, x1*x2*x3*x7*x10*x11*x14*x15*x17*x18*x21*x23*x27*x28*x29*x31*x34*x38*x39*x44*x45*x46*x47*x48*x50*x51*x52*x53*x57*x61*x63*x66*x67*x68*x69*x70*x74*x75*x79, x2*x3*x4*x6*x8*x9*x12*x15*x16*x17*x20*x22*x23*x27*x28*x29*x32*x39*x42*x43*x44*x45*x46*x48*x49*x52*x54*x55*x57*x63*x65*x67*x72*x73*x74*x76*x77*x79*x80, x1*x2*x3*x7*x8*x10*x11*x12*x16*x17*x21*x25*x27*x31*x33*x36*x37*x38*x41*x43*x44*x45*x46*x47*x48*x49*x54*x56*x57*x58*x59*x60*x61*x62*x63*x66*x67*x71*x77*x78, x2*x3*x4*x5*x7*x8*x12*x13*x14*x16*x23*x25*x28*x29*x33*x34*x36*x37*x39*x40*x42*x43*x44*x45*x52*x54*x55*x56*x57*x58*x65*x66*x67*x70*x75*x76*x80, x1*x3*x4*x5*x6*x8*x10*x11*x12*x14*x15*x19*x24*x26*x28*x29*x30*x35*x36*x38*x39*x40*x43*x45*x46*x47*x48*x52*x53*x54*x56*x57*x58*x60*x65*x66*x67*x68*x69*x70*x73*x74*x77*x78*x79, x1*x3*x5*x6*x7*x10*x11*x13*x14*x15*x18*x19*x25*x27*x30*x32*x35*x39*x40*x44*x45*x46*x47*x48*x50*x54*x55*x58*x60*x61*x64*x66*x67*x68*x70*x72*x74*x75*x78*x79, x4*x6*x9*x11*x12*x13*x15*x18*x19*x20*x22*x26*x27*x29*x31*x35*x36*x37*x41*x42*x44*x46*x48*x53*x56*x57*x59*x62*x63*x66*x67*x70*x71*x73*x76*x79*x80, x2*x3*x10*x16*x17*x18*x21*x22*x23*x24*x25*x26*x27*x28*x29*x30*x34*x35*x39*x41*x42*x44*x45*x47*x48*x52*x54*x55*x57*x59*x61*x62*x65*x69*x72*x73*x76*x78*x80, x1*x3*x6*x8*x9*x10*x11*x14*x15*x17*x19*x20*x21*x23*x27*x30*x31*x32*x33*x34*x35*x36*x37*x39*x40*x42*x44*x45*x47*x49*x51*x52*x53*x55*x57*x59*x62*x63*x64*x67*x68*x73*x74*x75, x1*x3*x6*x7*x8*x11*x13*x15*x18*x19*x21*x23*x25*x26*x27*x28*x29*x32*x34*x37*x40*x45*x46*x47*x48*x51*x52*x55*x59*x60*x67*x69*x70*x72*x77*x78, x4*x7*x8*x9*x12*x15*x16*x23*x24*x25*x28*x33*x34*x36*x38*x39*x40*x41*x44*x45*x48*x50*x52*x54*x56*x57*x62*x63*x66*x69*x72*x73*x74*x75*x80, x3*x4*x5*x8*x11*x14*x17*x20*x21*x23*x24*x26*x28*x30*x32*x33*x36*x37*x40*x41*x42*x46*x47*x48*x49*x52*x53*x54*x55*x56*x62*x66*x68*x70*x71*x72*x73*x74*x75*x76*x78, x2*x3*x4*x6*x7*x8*x9*x10*x12*x13*x15*x16*x17*x18*x19*x20*x21*x22*x23*x24*x25*x27*x28*x37*x38*x39*x41*x42*x44*x46*x47*x49*x51*x56*x57*x58*x60*x64*x66*x70*x71*x74*x75*x77*x79, x2*x9*x10*x16*x18*x20*x24*x25*x28*x30*x34*x37*x44*x45*x48*x49*x53*x54*x55*x56*x58*x60*x64*x65*x68*x71*x72*x74*x76*x77*x78*x79*x80, x1*x3*x4*x5*x8*x14*x17*x18*x20*x21*x22*x23*x29*x30*x31*x36*x37*x38*x39*x40*x41*x42*x45*x46*x47*x48*x49*x50*x53*x55*x56*x57*x59*x63*x65*x69*x74*x75*x76, x6*x7*x8*x10*x13*x14*x15*x18*x19*x21*x23*x24*x27*x28*x29*x30*x31*x35*x36*x37*x41*x42*x47*x48*x52*x54*x61*x63*x65*x66*x67*x70*x72*x79*x80, x1*x2*x3*x8*x10*x12*x13*x14*x16*x22*x23*x25*x26*x27*x29*x30*x31*x33*x38*x39*x40*x42*x44*x54*x55*x57*x61*x63*x64*x65*x68*x69*x70*x71*x72*x76*x77*x79, x2*x4*x5*x6*x7*x8*x12*x15*x16*x17*x20*x21*x23*x28*x31*x32*x35*x37*x38*x39*x40*x41*x45*x46*x54*x55*x56*x60*x61*x62*x71*x73*x75*x76*x77, x1*x3*x6*x9*x10*x11*x12*x15*x16*x18*x19*x24*x26*x27*x28*x30*x31*x32*x33*x36*x39*x40*x43*x44*x45*x46*x49*x51*x52*x57*x60*x61*x62*x64*x65*x66*x67*x69*x70*x71*x74*x75*x76*x78*x80, x1*x2*x3*x5*x7*x8*x9*x10*x11*x12*x13*x14*x15*x16*x20*x22*x24*x25*x26*x28*x32*x33*x34*x36*x38*x40*x43*x45*x46*x48*x51*x53*x54*x55*x56*x57*x60*x61*x62*x67*x68*x69*x72*x73*x74*x77*x79, x1*x2*x3*x4*x5*x8*x11*x12*x13*x14*x15*x16*x18*x19*x23*x24*x25*x26*x27*x28*x30*x31*x32*x36*x37*x39*x41*x42*x43*x46*x47*x48*x55*x56*x57*x58*x59*x63*x64*x67*x70*x75, x3*x4*x7*x9*x10*x11*x14*x15*x19*x22*x23*x26*x30*x31*x32*x34*x35*x36*x37*x38*x40*x41*x43*x44*x46*x48*x49*x50*x51*x53*x55*x56*x58*x60*x63*x64*x68*x69*x70*x71*x73*x74*x79, x1*x3*x4*x5*x6*x7*x10*x14*x16*x17*x19*x20*x21*x22*x23*x24*x25*x31*x32*x33*x35*x39*x41*x42*x43*x46*x57*x59*x63*x65*x71*x72*x73*x74*x77*x79, x1*x2*x3*x5*x6*x7*x8*x11*x15*x16*x17*x18*x21*x22*x23*x24*x25*x27*x30*x36*x37*x41*x42*x43*x44*x45*x46*x48*x49*x50*x51*x54*x55*x59*x61*x63*x68*x69*x70*x71*x72*x73*x74*x76*x77*x79*x80, x5*x6*x7*x8*x11*x16*x18*x19*x20*x22*x25*x30*x32*x33*x34*x35*x45*x48*x51*x52*x53*x55*x57*x58*x61*x63*x64*x66*x68*x69*x72*x73*x74*x75*x78, x2*x4*x5*x8*x10*x11*x13*x14*x15*x17*x21*x24*x25*x27*x30*x34*x36*x37*x38*x39*x42*x44*x45*x49*x52*x54*x55*x56*x57*x58*x59*x60*x61*x62*x63*x65*x67*x70*x71*x72*x73*x75*x77, x4*x6*x8*x12*x15*x16*x17*x19*x22*x23*x24*x25*x33*x35*x36*x37*x38*x39*x40*x42*x43*x47*x50*x51*x55*x56*x57*x58*x60*x61*x66*x68*x70*x72*x73*x74*x75*x76*x77*x78, x2*x3*x4*x6*x7*x10*x12*x14*x15*x16*x17*x22*x23*x24*x25*x28*x29*x30*x32*x33*x35*x36*x38*x39*x40*x43*x45*x47*x53*x54*x56*x57*x58*x59*x61*x62*x63*x66*x67*x68*x70*x71*x75*x77*x78*x79*x80, x1*x2*x4*x6*x8*x10*x14*x15*x16*x17*x18*x19*x20*x21*x23*x25*x27*x30*x31*x33*x34*x35*x39*x41*x43*x47*x49*x50*x55*x56*x57*x58*x60*x61*x63*x66*x68*x69*x70*x72*x73*x74*x77*x78*x79*x80, x1*x11*x13*x14*x15*x21*x22*x26*x27*x28*x29*x30*x31*x32*x33*x40*x42*x44*x45*x46*x47*x48*x49*x54*x57*x58*x60*x61*x62*x64*x67*x68*x69*x70*x72*x73*x75*x79*x80, x1*x4*x6*x8*x9*x10*x11*x13*x16*x20*x21*x23*x24*x25*x26*x27*x28*x29*x30*x31*x34*x38*x43*x46*x52*x53*x54*x55*x56*x59*x62*x63*x64*x65*x67*x70*x71*x72*x75*x76*x79, x2*x6*x7*x11*x12*x13*x15*x16*x19*x20*x21*x22*x23*x25*x27*x29*x30*x31*x32*x33*x44*x45*x46*x50*x52*x53*x55*x56*x57*x58*x59*x60*x61*x62*x63*x65*x66*x67*x68*x72*x75*x76*x78*x79*x80, x3*x4*x9*x12*x13*x14*x15*x16*x18*x19*x21*x24*x26*x27*x28*x30*x32*x33*x36*x37*x38*x43*x44*x48*x51*x54*x56*x59*x60*x61*x62*x63*x65*x68*x69*x70*x71*x72*x73*x75*x77*x78*x79*x80, x2*x4*x7*x8*x9*x14*x17*x19*x20*x23*x24*x29*x30*x32*x37*x38*x40*x42*x45*x46*x49*x52*x54*x57*x58*x61*x63*x65*x68*x69*x70*x71*x72*x73*x74*x75*x76*x77*x78*x80, x2*x3*x4*x5*x7*x8*x9*x11*x12*x17*x19*x20*x21*x22*x23*x24*x29*x32*x33*x34*x35*x36*x38*x39*x43*x46*x48*x51*x54*x61*x63*x64*x68*x72*x73*x75*x77*x78, x1*x3*x5*x6*x7*x8*x11*x12*x14*x15*x16*x18*x21*x22*x23*x25*x28*x29*x30*x31*x34*x35*x36*x37*x38*x42*x44*x45*x49*x53*x54*x58*x59*x61*x62*x66*x69*x76*x77, x2*x4*x7*x8*x10*x14*x19*x20*x21*x25*x27*x31*x32*x33*x34*x36*x38*x39*x40*x43*x45*x46*x47*x48*x49*x50*x51*x52*x63*x64*x65*x66*x68*x76*x79*x80, x2*x5*x6*x7*x8*x9*x10*x12*x15*x17*x19*x22*x24*x26*x27*x33*x34*x35*x36*x38*x40*x41*x42*x43*x44*x48*x51*x52*x53*x57*x59*x65*x66*x67*x68*x69*x70*x71*x72*x74*x75*x77, x2*x5*x7*x9*x10*x13*x14*x15*x17*x18*x20*x26*x27*x28*x29*x32*x33*x35*x39*x40*x42*x46*x48*x51*x52*x53*x54*x56*x57*x58*x62*x63*x70*x73*x74*x78*x80, x3*x5*x7*x8*x14*x15*x16*x19*x21*x25*x26*x28*x33*x37*x38*x39*x40*x41*x43*x45*x46*x48*x49*x51*x52*x53*x54*x55*x59*x61*x65*x66*x69*x71*x72*x73*x74*x79*x80, x6*x7*x10*x12*x19*x20*x22*x23*x27*x29*x30*x31*x32*x34*x35*x36*x39*x40*x41*x43*x44*x46*x48*x49*x52*x53*x55*x62*x63*x68*x71*x72*x73*x74*x76*x77*x78, x1*x3*x5*x7*x10*x11*x13*x14*x16*x19*x21*x25*x26*x28*x29*x30*x32*x34*x37*x43*x44*x45*x46*x48*x52*x54*x56*x57*x60*x62*x63*x64*x65*x66*x68*x69*x70*x72*x77*x79*x80, x2*x5*x6*x9*x10*x13*x14*x15*x18*x21*x22*x23*x24*x25*x26*x28*x29*x30*x31*x33*x34*x35*x40*x43*x48*x49*x53*x58*x59*x62*x64*x67*x69*x73*x75*x76*x77, x1*x6*x9*x10*x12*x15*x16*x17*x20*x22*x26*x28*x29*x30*x31*x36*x37*x38*x39*x40*x42*x44*x45*x47*x48*x50*x51*x55*x56*x57*x62*x63*x65*x66*x70*x71*x73*x74*x78*x79*x80, x1*x3*x6*x10*x15*x17*x21*x23*x24*x25*x26*x27*x28*x29*x34*x36*x39*x40*x41*x43*x44*x45*x46*x48*x49*x51*x53*x54*x55*x57*x58*x59*x60*x61*x62*x64*x65*x66*x69*x70*x71*x72*x75*x78, x1*x2*x8*x10*x11*x14*x21*x23*x24*x26*x27*x29*x31*x33*x36*x39*x40*x41*x43*x44*x46*x49*x50*x51*x52*x54*x56*x59*x60*x61*x62*x64*x65*x66*x67*x68*x72*x75, x2*x4*x8*x9*x12*x18*x19*x20*x21*x22*x23*x24*x25*x27*x28*x29*x36*x37*x39*x41*x42*x46*x47*x52*x54*x57*x61*x63*x73*x74*x78*x79, x4*x5*x7*x9*x12*x14*x15*x17*x20*x22*x23*x24*x25*x34*x35*x41*x44*x46*x51*x54*x60*x61*x64*x69*x70*x71*x74*x75*x76*x77*x79, x4*x6*x7*x8*x9*x10*x11*x12*x13*x14*x16*x19*x22*x23*x24*x25*x26*x30*x31*x32*x34*x35*x36*x38*x39*x42*x52*x53*x54*x57*x58*x61*x64*x65*x67*x71*x72*x73*x76*x77*x78*x79*x80, x2*x5*x7*x8*x10*x12*x16*x17*x21*x22*x26*x27*x30*x31*x32*x33*x34*x38*x39*x41*x43*x44*x46*x47*x48*x50*x52*x53*x55*x57*x58*x61*x64*x69*x71*x74*x75*x76*x78, x2*x3*x7*x9*x10*x12*x13*x14*x16*x17*x18*x22*x24*x25*x26*x27*x29*x32*x37*x39*x44*x45*x46*x47*x48*x52*x53*x54*x56*x57*x58*x61*x62*x67*x69*x70*x71*x72*x73*x75*x76*x77*x80, x1*x3*x4*x5*x7*x9*x10*x13*x15*x16*x17*x18*x19*x21*x25*x26*x28*x29*x31*x32*x33*x35*x36*x37*x39*x40*x41*x43*x44*x45*x46*x47*x49*x52*x53*x54*x55*x56*x58*x59*x61*x63*x64*x65*x66*x70*x72*x73*x78*x80, x4*x6*x8*x9*x11*x13*x15*x16*x17*x18*x19*x20*x22*x27*x31*x32*x33*x34*x36*x37*x39*x42*x43*x44*x45*x46*x47*x49*x50*x52*x53*x55*x56*x63*x65*x66*x68*x69*x71*x72*x73*x74*x80, x2*x3*x4*x6*x7*x9*x11*x13*x16*x17*x18*x19*x21*x22*x23*x24*x25*x26*x28*x31*x34*x35*x37*x38*x39*x40*x41*x43*x44*x47*x48*x51*x53*x55*x56*x57*x59*x62*x64*x66*x67*x73*x74*x76*x77*x79, x4*x6*x9*x10*x14*x18*x19*x20*x24*x27*x28*x29*x30*x33*x34*x37*x40*x41*x42*x43*x44*x45*x48*x49*x53*x56*x58*x59*x60*x61*x63*x65*x66*x67*x68*x69*x70*x72*x73*x75*x76*x78, x2*x4*x5*x6*x9*x11*x12*x13*x17*x25*x26*x28*x29*x31*x32*x34*x35*x36*x37*x39*x44*x45*x46*x50*x55*x58*x59*x63*x65*x68*x70*x72*x73*x79, x1*x5*x6*x7*x8*x11*x14*x24*x25*x26*x27*x31*x32*x35*x37*x40*x41*x42*x45*x46*x47*x48*x50*x52*x53*x55*x56*x58*x59*x61*x64*x67*x74*x76*x79*x80, x1*x2*x6*x7*x10*x11*x13*x15*x16*x19*x22*x23*x27*x31*x33*x35*x37*x40*x43*x46*x49*x52*x55*x57*x58*x60*x62*x65*x66*x67*x73*x74*x77*x78*x79*x80, x1*x2*x3*x7*x11*x15*x17*x19*x20*x22*x23*x24*x27*x28*x34*x38*x39*x41*x42*x43*x49*x51*x56*x57*x58*x60*x61*x63*x64*x66*x68*x69*x70*x71*x72*x74*x76*x77*x79, x3*x4*x7*x8*x9*x10*x12*x19*x22*x25*x30*x32*x33*x35*x36*x37*x38*x39*x41*x42*x43*x45*x46*x48*x50*x51*x52*x53*x57*x58*x60*x63*x64*x66*x68*x69*x70*x71*x72*x74*x79, x10*x11*x12*x13*x14*x17*x18*x19*x20*x21*x22*x23*x24*x26*x28*x29*x30*x32*x33*x35*x36*x37*x38*x39*x40*x41*x43*x44*x45*x48*x49*x50*x52*x53*x55*x57*x58*x60*x61*x62*x63*x64*x66*x67*x69*x70*x72*x73*x75*x77*x78*x79, x1*x3*x4*x5*x7*x8*x11*x12*x13*x14*x22*x23*x24*x25*x26*x27*x28*x31*x32*x33*x36*x40*x42*x43*x44*x45*x47*x49*x50*x53*x56*x58*x59*x61*x62*x63*x65*x66*x68*x71*x72*x74*x76*x77*x78*x79, x1*x5*x7*x8*x15*x18*x21*x25*x26*x32*x33*x34*x39*x41*x42*x45*x46*x47*x48*x52*x58*x59*x60*x61*x63*x64*x65*x66*x68*x70*x71*x77*x79*x80, x1*x2*x3*x6*x8*x10*x11*x12*x13*x14*x15*x18*x23*x24*x26*x29*x31*x36*x41*x43*x45*x47*x56*x58*x59*x63*x64*x66*x67*x72*x73*x79, x2*x3*x5*x9*x10*x12*x14*x15*x16*x26*x27*x28*x31*x32*x33*x36*x37*x39*x40*x42*x43*x44*x45*x49*x50*x55*x59*x60*x61*x62*x63*x64*x67*x68*x70*x75*x77, x1*x2*x4*x5*x7*x9*x10*x12*x13*x14*x15*x17*x19*x21*x22*x23*x24*x26*x29*x30*x33*x37*x39*x41*x42*x44*x46*x49*x51*x52*x53*x54*x55*x61*x62*x64*x65*x66*x70*x72*x73*x75*x77*x79, x3*x4*x10*x16*x21*x22*x27*x28*x30*x31*x33*x34*x35*x38*x45*x47*x52*x53*x54*x57*x58*x60*x63*x65*x69*x72*x74*x75*x76*x80, x3*x4*x7*x8*x10*x11*x13*x14*x15*x17*x18*x20*x21*x22*x27*x28*x29*x31*x32*x34*x35*x36*x37*x38*x43*x46*x47*x50*x53*x56*x58*x60*x62*x64*x65*x68*x69*x70*x71*x76*x77*x80, x8*x11*x12*x17*x18*x20*x21*x22*x24*x25*x27*x29*x30*x31*x34*x35*x37*x38*x39*x44*x47*x48*x49*x52*x54*x55*x59*x60*x61*x62*x64*x65*x66*x68*x74*x75*x77*x78*x79, x2*x3*x6*x7*x9*x11*x12*x15*x16*x17*x18*x28*x29*x30*x31*x32*x36*x39*x42*x44*x48*x49*x51*x52*x53*x55*x56*x61*x65*x66*x67*x68*x71*x72*x73*x74*x75*x77*x78*x80, x4*x6*x7*x8*x9*x10*x13*x16*x17*x18*x19*x20*x22*x24*x25*x27*x28*x29*x30*x31*x32*x36*x37*x38*x40*x41*x44*x45*x46*x47*x51*x52*x55*x57*x61*x62*x63*x67*x68*x70*x71*x72*x74*x75*x77, x1*x4*x8*x9*x11*x15*x16*x18*x19*x22*x28*x29*x30*x33*x36*x38*x39*x40*x41*x42*x44*x48*x52*x53*x55*x58*x60*x62*x65*x66*x67*x68*x69*x70*x71*x73*x76, x1*x2*x3*x7*x8*x9*x11*x13*x15*x16*x18*x21*x26*x30*x33*x35*x36*x38*x43*x45*x46*x47*x49*x50*x51*x54*x55*x59*x61*x62*x63*x64*x65*x66*x67*x68*x69*x71*x72*x74*x76*x77, x3*x4*x6*x8*x11*x18*x20*x23*x24*x26*x27*x29*x30*x31*x32*x33*x34*x37*x38*x39*x40*x42*x43*x44*x45*x46*x50*x51*x52*x53*x54*x55*x57*x58*x59*x62*x63*x64*x66*x70*x74*x75*x76*x77*x80, x1*x3*x5*x6*x7*x8*x9*x12*x13*x14*x18*x20*x21*x22*x24*x25*x26*x28*x35*x37*x38*x40*x41*x42*x43*x44*x45*x50*x52*x54*x55*x57*x61*x66*x67*x68*x69*x70*x73*x74*x75*x76*x77, x1*x5*x6*x7*x10*x11*x12*x13*x14*x18*x19*x20*x21*x22*x23*x24*x25*x26*x30*x31*x36*x37*x38*x39*x40*x41*x43*x48*x51*x52*x53*x57*x58*x60*x61*x62*x63*x64*x65*x66*x68*x73*x75*x76*x77*x80, x1*x3*x4*x6*x7*x8*x11*x15*x16*x18*x19*x20*x22*x23*x24*x26*x27*x29*x30*x34*x35*x36*x37*x38*x40*x41*x42*x43*x44*x45*x46*x47*x48*x53*x54*x60*x61*x62*x66*x67*x69*x71*x72*x76*x77*x79, x1*x4*x6*x9*x10*x12*x13*x15*x18*x20*x22*x23*x25*x28*x31*x32*x36*x37*x39*x42*x44*x45*x46*x47*x54*x56*x57*x61*x63*x68*x72*x74*x75*x78*x79, x5*x6*x9*x10*x11*x13*x16*x17*x18*x19*x20*x21*x26*x29*x31*x32*x34*x35*x37*x38*x39*x40*x42*x43*x46*x49*x50*x51*x55*x58*x59*x60*x62*x68*x70*x71*x72*x74*x75*x77*x79, x1*x3*x4*x5*x10*x16*x17*x21*x22*x23*x24*x25*x26*x28*x30*x33*x34*x35*x37*x38*x41*x42*x43*x44*x45*x46*x47*x49*x51*x53*x54*x56*x57*x58*x60*x65*x67*x70*x72*x78, x3*x4*x9*x10*x11*x12*x15*x16*x17*x23*x26*x27*x30*x33*x35*x36*x37*x38*x39*x42*x45*x46*x50*x51*x52*x54*x56*x57*x58*x60*x62*x64*x68*x71*x72*x74*x75*x76*x78, x1*x3*x5*x6*x8*x9*x10*x12*x13*x15*x16*x17*x18*x20*x21*x24*x25*x28*x29*x34*x35*x37*x39*x41*x42*x43*x44*x45*x47*x50*x51*x53*x54*x57*x59*x63*x64*x66*x67*x68*x71*x72*x74*x75*x77*x78, x1*x2*x4*x5*x6*x7*x8*x9*x10*x11*x13*x14*x18*x20*x21*x23*x24*x28*x29*x33*x35*x36*x37*x40*x42*x43*x48*x49*x51*x55*x56*x59*x61*x64*x66*x67*x68*x69*x70*x72*x74*x75*x76*x77*x78*x79*x80, x1*x3*x6*x7*x9*x12*x13*x15*x18*x19*x22*x26*x28*x33*x34*x35*x39*x41*x43*x44*x45*x50*x53*x58*x59*x60*x62*x63*x64*x65*x67*x69*x71*x72*x73*x79, x1*x4*x8*x10*x11*x14*x15*x18*x19*x22*x23*x24*x25*x27*x28*x31*x37*x41*x42*x44*x50*x51*x53*x55*x56*x58*x60*x62*x63*x64*x65*x66*x67*x68*x69*x71*x75*x79*x80, x1*x5*x6*x8*x14*x16*x17*x18*x24*x25*x27*x28*x29*x33*x36*x37*x38*x39*x41*x42*x43*x45*x46*x47*x48*x53*x54*x55*x62*x66*x67*x69*x71*x72*x74*x75*x76*x78*x79*x80, x1*x5*x6*x7*x8*x9*x10*x14*x15*x16*x17*x20*x21*x24*x33*x34*x38*x46*x48*x50*x54*x55*x58*x60*x63*x64*x67*x74*x77*x79, x2*x6*x9*x10*x11*x12*x16*x18*x19*x21*x22*x23*x24*x25*x27*x29*x30*x31*x33*x38*x39*x40*x42*x47*x49*x52*x53*x54*x55*x56*x58*x59*x60*x61*x62*x63*x65*x67*x69*x72*x73*x74*x75*x76*x80, x2*x4*x5*x6*x7*x8*x9*x10*x11*x13*x14*x18*x23*x26*x28*x30*x33*x35*x36*x38*x39*x40*x41*x46*x48*x49*x51*x53*x54*x55*x56*x57*x60*x61*x63*x66*x67*x70*x73*x74*x76*x78*x79, x1*x4*x6*x7*x11*x12*x14*x15*x20*x22*x24*x27*x29*x30*x32*x38*x39*x40*x43*x45*x57*x59*x61*x62*x63*x65*x68*x69*x71*x73*x77*x79, x2*x5*x8*x9*x11*x12*x14*x15*x17*x19*x21*x22*x24*x27*x31*x32*x35*x36*x39*x41*x43*x45*x47*x48*x50*x51*x53*x57*x60*x62*x63*x66*x67*x68*x69*x72*x73*x74*x75*x76*x79, x2*x6*x7*x9*x10*x12*x13*x16*x19*x23*x24*x26*x27*x28*x32*x34*x35*x37*x40*x41*x42*x44*x45*x46*x48*x50*x51*x53*x54*x56*x62*x63*x64*x65*x66*x67*x68*x69*x70*x72*x73*x75*x77*x78, x2*x3*x4*x7*x10*x11*x12*x13*x14*x18*x19*x20*x21*x22*x24*x25*x26*x29*x31*x34*x35*x41*x42*x43*x44*x46*x49*x50*x51*x52*x58*x60*x62*x66*x68*x69*x70*x71*x74*x77*x79, x2*x7*x9*x10*x15*x16*x18*x19*x20*x23*x27*x28*x29*x32*x33*x37*x38*x40*x41*x44*x48*x49*x52*x53*x55*x57*x58*x62*x65*x67*x72*x73*x75, x2*x5*x6*x8*x13*x15*x16*x19*x24*x30*x31*x32*x34*x35*x36*x37*x38*x39*x41*x43*x45*x48*x52*x53*x54*x55*x56*x57*x59*x60*x65*x67*x68*x70*x71*x73*x75*x76*x77, x1*x3*x4*x5*x6*x7*x8*x9*x14*x15*x17*x18*x19*x21*x22*x23*x24*x25*x28*x29*x31*x33*x34*x35*x36*x37*x39*x41*x42*x44*x45*x48*x52*x54*x56*x57*x58*x63*x64*x66*x70*x71*x75*x76*x80, x3*x4*x5*x6*x9*x12*x15*x17*x19*x20*x22*x24*x27*x28*x29*x31*x32*x39*x41*x46*x51*x52*x54*x56*x60*x63*x65*x67*x70*x71*x74*x79, x1*x4*x6*x9*x10*x12*x14*x15*x18*x20*x24*x25*x26*x28*x29*x33*x34*x37*x41*x48*x51*x52*x54*x55*x57*x59*x65*x69*x70*x73*x74*x76*x78, x3*x5*x7*x8*x9*x11*x12*x13*x16*x17*x18*x19*x21*x26*x34*x35*x36*x38*x40*x41*x45*x47*x48*x50*x53*x56*x58*x60*x61*x62*x63*x64*x66*x68*x73*x77*x80, x1*x2*x3*x4*x7*x8*x9*x11*x13*x15*x18*x19*x21*x23*x24*x25*x26*x30*x31*x32*x34*x35*x36*x37*x41*x42*x43*x45*x46*x47*x50*x51*x53*x54*x55*x57*x59*x60*x61*x62*x65*x66*x67*x70*x71*x72*x74*x75*x76*x77*x78, x1*x2*x3*x5*x6*x7*x9*x11*x15*x16*x18*x19*x21*x22*x23*x24*x30*x31*x32*x33*x35*x38*x39*x40*x42*x43*x47*x48*x49*x52*x55*x58*x59*x61*x63*x65*x67*x69*x70*x71*x72*x74*x76*x78*x79*x80, x5*x7*x8*x9*x10*x15*x17*x18*x19*x20*x25*x26*x27*x28*x29*x30*x31*x34*x35*x36*x37*x40*x41*x42*x43*x44*x46*x49*x51*x53*x54*x55*x56*x57*x58*x60*x62*x68*x70*x71*x72*x73*x75*x78, x5*x7*x8*x9*x12*x14*x16*x18*x22*x23*x25*x27*x28*x29*x30*x33*x36*x39*x40*x41*x42*x45*x47*x50*x51*x52*x54*x55*x58*x60*x61*x62*x65*x69*x71*x72*x73, x2*x5*x6*x12*x13*x14*x20*x22*x23*x26*x29*x34*x36*x38*x40*x43*x46*x48*x50*x51*x52*x53*x54*x55*x56*x57*x58*x60*x64*x65*x68*x69*x73*x74*x76*x80, x1*x2*x4*x6*x7*x8*x11*x12*x16*x17*x20*x22*x24*x26*x27*x30*x32*x34*x35*x36*x38*x40*x41*x46*x47*x49*x52*x54*x55*x62*x68*x70*x79, x1*x2*x3*x6*x8*x11*x15*x18*x20*x21*x23*x24*x29*x30*x37*x38*x40*x43*x46*x47*x48*x49*x50*x51*x52*x54*x59*x67*x70*x74, x1*x3*x4*x5*x8*x11*x12*x14*x16*x17*x19*x20*x22*x24*x27*x29*x30*x31*x32*x33*x34*x35*x38*x39*x45*x48*x49*x50*x52*x57*x61*x62*x63*x65*x66*x68*x69*x70*x71*x73, x4*x5*x9*x10*x13*x14*x16*x22*x23*x24*x25*x28*x29*x30*x31*x35*x37*x38*x39*x44*x47*x48*x49*x54*x62*x65*x67*x68*x69*x71*x72*x80, x2*x4*x6*x7*x9*x11*x12*x13*x14*x18*x19*x22*x24*x27*x28*x30*x31*x32*x33*x36*x37*x39*x41*x42*x44*x49*x55*x56*x58*x60*x61*x62*x63*x65*x67*x70*x72*x75*x77*x78*x79, x1*x2*x4*x5*x8*x11*x12*x19*x21*x22*x23*x24*x25*x26*x28*x29*x30*x31*x33*x34*x35*x38*x40*x41*x45*x47*x51*x53*x54*x55*x56*x59*x63*x64*x67*x68*x70*x71*x72*x76*x77*x79, x1*x2*x3*x5*x6*x9*x12*x13*x14*x16*x18*x20*x21*x23*x28*x29*x31*x35*x37*x43*x44*x45*x48*x51*x52*x55*x60*x61*x62*x63*x64*x65*x66*x69*x71*x72*x75*x77*x78*x80, x4*x7*x10*x11*x15*x16*x20*x21*x23*x26*x27*x28*x30*x31*x32*x33*x34*x36*x39*x41*x44*x45*x47*x48*x49*x51*x52*x53*x56*x58*x63*x65*x68*x70*x71*x73*x77, x1*x2*x9*x13*x17*x19*x22*x23*x27*x28*x30*x31*x35*x36*x40*x43*x45*x46*x47*x48*x50*x54*x57*x59*x60*x62*x63*x65*x67*x68*x69*x70*x73*x74*x76*x80, x3*x5*x6*x7*x9*x11*x16*x17*x18*x19*x20*x24*x26*x32*x34*x35*x36*x37*x38*x40*x41*x42*x43*x44*x47*x49*x52*x53*x59*x60*x61*x62*x64*x68*x69*x70*x74*x80, x1*x2*x4*x6*x10*x14*x15*x17*x18*x21*x24*x28*x30*x31*x32*x33*x34*x35*x36*x37*x39*x43*x44*x46*x48*x50*x53*x54*x56*x57*x58*x65*x66*x67*x69*x71*x72*x73*x74*x77*x78*x79*x80, x1*x2*x4*x5*x7*x8*x15*x17*x18*x20*x21*x22*x25*x28*x33*x35*x37*x38*x42*x44*x45*x46*x48*x49*x50*x57*x59*x60*x64*x65*x73*x74*x76*x78*x79, x1*x2*x3*x5*x8*x11*x15*x16*x18*x21*x22*x23*x24*x25*x29*x30*x31*x32*x37*x40*x44*x51*x53*x54*x59*x60*x61*x62*x65*x66*x67*x68*x69*x70*x71*x74, x1*x2*x5*x8*x11*x14*x18*x19*x21*x22*x23*x24*x26*x27*x29*x30*x31*x32*x33*x40*x41*x42*x44*x45*x48*x49*x51*x53*x55*x69*x71*x74*x77*x78, x1*x3*x4*x5*x6*x7*x8*x9*x12*x13*x14*x16*x18*x19*x22*x24*x26*x27*x28*x30*x31*x34*x35*x37*x39*x41*x43*x46*x47*x49*x51*x56*x58*x59*x60*x61*x62*x63*x67*x71*x72*x79, x3*x4*x8*x9*x15*x21*x23*x24*x25*x26*x28*x29*x34*x35*x38*x39*x42*x43*x44*x45*x48*x49*x53*x55*x57*x60*x61*x63*x65*x66*x67*x68*x69*x73*x75*x76*x77*x80, x1*x6*x8*x11*x12*x13*x14*x22*x23*x24*x25*x26*x27*x29*x32*x34*x35*x38*x39*x40*x41*x42*x49*x51*x53*x54*x55*x57*x58*x60*x62*x64*x65*x69*x70*x71*x73*x74*x76*x77*x78, x1*x2*x4*x6*x8*x9*x10*x12*x14*x15*x18*x24*x31*x32*x34*x36*x39*x40*x41*x42*x43*x46*x47*x53*x54*x56*x58*x59*x67*x68*x70*x75*x76*x79*x80, x2*x3*x4*x5*x10*x11*x12*x14*x17*x18*x20*x22*x23*x26*x27*x30*x32*x33*x34*x35*x36*x37*x38*x41*x42*x43*x45*x47*x49*x50*x52*x54*x59*x61*x62*x63*x64*x65*x67*x69*x71*x73*x74*x75*x77*x78*x79, x10*x14*x15*x17*x25*x28*x29*x30*x31*x32*x33*x36*x37*x41*x42*x43*x45*x49*x50*x54*x55*x56*x57*x58*x59*x63*x65*x69*x70*x75*x76*x77*x78, x3*x4*x5*x6*x7*x11*x12*x13*x15*x17*x18*x20*x21*x22*x24*x25*x26*x31*x32*x35*x37*x38*x39*x40*x41*x42*x43*x44*x45*x46*x48*x49*x50*x51*x52*x54*x55*x57*x58*x59*x60*x62*x63*x64*x65*x67*x68*x69*x70*x72*x73*x74*x76*x77*x78*x80, x8*x9*x11*x12*x13*x15*x24*x25*x27*x28*x33*x34*x35*x36*x38*x42*x45*x47*x48*x49*x54*x55*x57*x64*x65*x71*x73*x74*x79, x2*x3*x4*x5*x7*x8*x10*x12*x13*x14*x15*x19*x21*x22*x25*x26*x28*x29*x30*x31*x34*x35*x36*x37*x39*x40*x42*x46*x50*x51*x53*x59*x60*x61*x64*x65*x66*x67*x71*x73*x74*x75*x77*x78*x80, x1*x2*x3*x5*x8*x9*x10*x11*x12*x14*x16*x17*x19*x20*x21*x24*x25*x26*x27*x28*x31*x35*x36*x37*x38*x41*x43*x47*x50*x52*x53*x54*x62*x63*x64*x65*x66*x68*x69*x70*x72*x74*x77*x78, x1*x2*x3*x6*x8*x10*x13*x14*x15*x17*x19*x21*x22*x23*x29*x30*x31*x33*x36*x39*x41*x48*x50*x51*x53*x54*x56*x57*x61*x65*x66*x72*x74*x75*x76*x79*x80, x1*x2*x6*x7*x9*x11*x12*x16*x17*x20*x23*x24*x25*x27*x28*x31*x32*x34*x36*x37*x40*x44*x46*x49*x55*x56*x58*x63*x64*x67*x71*x73*x76*x78*x80, x1*x5*x8*x10*x12*x13*x14*x15*x18*x20*x21*x22*x24*x25*x27*x28*x29*x32*x33*x34*x40*x43*x44*x45*x47*x50*x51*x52*x53*x54*x55*x56*x57*x58*x60*x61*x64*x65*x68*x75*x79*x80, x4*x5*x7*x11*x12*x13*x16*x19*x22*x26*x27*x28*x31*x32*x33*x34*x39*x41*x42*x43*x46*x47*x49*x50*x53*x55*x57*x58*x59*x60*x61*x62*x63*x64*x67*x70*x73*x75*x76*x78*x79*x80, x1*x2*x3*x4*x6*x8*x13*x14*x15*x16*x17*x20*x22*x24*x25*x27*x28*x29*x31*x32*x34*x36*x37*x38*x41*x42*x44*x46*x47*x49*x51*x53*x55*x58*x60*x62*x65*x67*x68*x70*x71*x72*x74*x80, x1*x3*x5*x6*x7*x9*x10*x12*x14*x17*x19*x20*x22*x25*x27*x28*x30*x32*x33*x34*x35*x38*x40*x41*x44*x46*x47*x50*x51*x52*x58*x63*x66*x70*x71*x73*x74*x77*x78*x79*x80, x1*x3*x4*x8*x10*x12*x13*x17*x19*x20*x23*x29*x32*x34*x38*x39*x41*x42*x43*x47*x48*x50*x53*x54*x57*x59*x60*x61*x63*x65*x66*x68*x69*x71*x72*x73*x76*x77*x79*x80, x1*x4*x5*x6*x7*x10*x13*x15*x18*x19*x22*x24*x25*x30*x31*x32*x34*x35*x36*x40*x41*x42*x43*x45*x47*x48*x51*x53*x54*x55*x56*x58*x59*x61*x64*x66*x67*x69*x73*x74*x76*x77*x78*x79*x80, x4*x7*x8*x10*x12*x17*x20*x23*x26*x27*x29*x31*x32*x35*x41*x42*x43*x45*x47*x49*x55*x57*x58*x60*x62*x63*x64*x65*x66*x68*x69*x71*x72*x73*x74*x79*x80, x2*x3*x15*x16*x17*x20*x21*x22*x25*x27*x29*x31*x33*x34*x38*x40*x44*x46*x47*x51*x52*x58*x59*x60*x61*x62*x63*x65*x69*x70*x75*x76*x77*x79, x2*x3*x6*x7*x9*x11*x14*x18*x19*x20*x21*x22*x25*x27*x28*x30*x31*x33*x34*x35*x36*x37*x38*x42*x43*x45*x47*x48*x49*x50*x51*x56*x57*x59*x61*x62*x63*x64*x66*x67*x68*x71*x72*x73*x76*x77*x78*x79, x1*x2*x5*x7*x8*x10*x16*x18*x19*x23*x24*x27*x28*x29*x30*x33*x34*x36*x38*x41*x45*x47*x50*x51*x53*x56*x58*x59*x60*x61*x62*x63*x64*x65*x66*x67*x68*x71*x73*x78*x80, x3*x4*x6*x7*x8*x9*x11*x13*x16*x17*x18*x21*x25*x26*x27*x29*x30*x31*x33*x34*x38*x39*x40*x42*x44*x46*x47*x48*x50*x52*x53*x54*x55*x56*x57*x58*x61*x62*x63*x66*x68*x71*x73*x74*x75, x1*x4*x6*x9*x10*x11*x12*x13*x17*x18*x19*x24*x27*x29*x31*x32*x33*x35*x37*x39*x42*x43*x44*x45*x48*x51*x53*x56*x58*x59*x61*x64*x66*x67*x68*x69*x70*x71*x74*x76*x77*x78*x79*x80, x2*x5*x8*x9*x10*x12*x16*x17*x18*x19*x20*x21*x26*x27*x28*x30*x31*x33*x34*x35*x37*x38*x39*x40*x47*x49*x50*x52*x54*x55*x56*x57*x58*x59*x60*x63*x64*x67*x71*x73*x74*x76*x77*x78*x79*x80, x1*x3*x5*x6*x14*x15*x18*x19*x24*x29*x35*x37*x38*x41*x42*x47*x50*x51*x53*x54*x55*x57*x62*x67*x68*x69*x70*x71*x73*x75*x76*x77*x80, x1*x5*x7*x9*x15*x20*x21*x22*x24*x35*x39*x41*x44*x46*x47*x48*x49*x51*x54*x55*x56*x58*x59*x60*x61*x62*x64*x65*x66*x67*x68*x69*x70*x72*x74*x75*x78, x2*x6*x7*x9*x10*x12*x14*x16*x17*x19*x21*x22*x23*x24*x25*x26*x27*x28*x29*x31*x34*x39*x45*x47*x49*x50*x53*x59*x60*x64*x65*x67*x70*x74*x76*x78, x2*x5*x8*x9*x10*x11*x12*x13*x14*x15*x16*x17*x19*x20*x21*x22*x24*x26*x30*x36*x37*x39*x40*x43*x45*x46*x47*x49*x50*x52*x53*x54*x55*x56*x58*x59*x60*x61*x63*x64*x66*x67*x68*x71*x73*x75*x77*x79, x3*x4*x9*x13*x14*x16*x17*x18*x20*x22*x23*x26*x27*x32*x34*x36*x38*x40*x41*x44*x50*x51*x52*x53*x54*x57*x58*x59*x60*x61*x62*x63*x65*x68*x69*x70*x71*x73*x80, x4*x5*x11*x12*x13*x14*x15*x16*x17*x20*x25*x26*x27*x31*x33*x34*x38*x39*x40*x42*x43*x45*x47*x49*x51*x52*x54*x56*x57*x61*x62*x65*x67*x68*x70*x73*x76*x77*x78*x80, x2*x4*x5*x8*x9*x10*x11*x14*x17*x18*x19*x22*x27*x29*x30*x31*x34*x36*x37*x39*x44*x47*x50*x52*x53*x54*x58*x61*x63*x64*x70*x71*x75*x78*x79, x3*x4*x7*x8*x9*x10*x11*x13*x23*x24*x34*x37*x38*x41*x42*x43*x44*x49*x50*x51*x52*x53*x55*x56*x59*x60*x61*x62*x63*x65*x70*x74*x75*x77*x78*x79*x80, x1*x2*x3*x6*x7*x10*x11*x12*x15*x17*x18*x19*x21*x22*x26*x28*x29*x30*x31*x34*x35*x36*x38*x41*x42*x43*x44*x46*x49*x50*x51*x53*x58*x59*x60*x61*x62*x67*x69*x73*x76*x80, x3*x4*x6*x13*x14*x16*x17*x18*x19*x20*x23*x24*x25*x26*x27*x29*x30*x35*x36*x37*x38*x39*x42*x43*x45*x46*x47*x48*x49*x51*x53*x54*x56*x57*x58*x59*x60*x61*x62*x63*x64*x66*x67*x71*x76*x78, x1*x2*x5*x6*x7*x8*x9*x10*x11*x19*x20*x21*x22*x25*x27*x31*x32*x33*x34*x38*x39*x40*x41*x43*x45*x46*x49*x52*x53*x54*x55*x57*x63*x71*x75*x77*x80, x1*x2*x3*x7*x8*x10*x11*x13*x14*x15*x16*x17*x18*x19*x20*x22*x24*x25*x26*x27*x29*x30*x33*x34*x36*x37*x40*x41*x43*x44*x47*x49*x50*x51*x52*x54*x55*x57*x58*x59*x60*x67*x68*x70*x71*x75*x76*x77*x78*x80, x1*x3*x5*x6*x7*x8*x9*x10*x12*x16*x17*x20*x21*x22*x23*x26*x27*x29*x31*x34*x35*x38*x39*x40*x41*x42*x43*x45*x49*x50*x51*x52*x53*x54*x56*x57*x62*x63*x65*x66*x67*x68*x71*x72*x73*x74*x75*x76*x77*x78, x1*x3*x4*x5*x6*x7*x8*x9*x11*x12*x16*x18*x19*x22*x28*x29*x31*x32*x33*x34*x35*x37*x39*x41*x42*x45*x48*x50*x53*x55*x56*x58*x59*x60*x62*x64*x67*x68*x70*x71*x72*x73*x74*x75, x2*x3*x4*x6*x7*x13*x16*x20*x22*x24*x26*x27*x28*x29*x32*x33*x34*x37*x39*x40*x44*x45*x49*x50*x51*x52*x54*x56*x60*x61*x62*x63*x64*x65*x66*x67*x70*x72*x73*x76*x78*x79, x1*x2*x4*x6*x7*x8*x10*x11*x12*x13*x14*x17*x18*x20*x21*x27*x30*x32*x34*x35*x36*x38*x39*x40*x41*x42*x46*x48*x50*x52*x56*x57*x59*x60*x63*x64*x65*x66*x67*x68*x69*x72*x73*x76*x78*x79*x80, x5*x6*x7*x8*x14*x15*x18*x19*x20*x23*x25*x30*x31*x34*x35*x40*x43*x46*x47*x48*x49*x52*x53*x54*x55*x57*x61*x63*x68*x69*x73*x74*x79*x80, x2*x3*x5*x7*x9*x10*x12*x14*x16*x18*x20*x22*x23*x25*x28*x29*x32*x33*x35*x38*x39*x40*x41*x48*x50*x52*x56*x57*x58*x61*x64*x65*x67*x70*x73*x76*x77*x78*x79*x80, x2*x3*x4*x9*x11*x15*x16*x17*x18*x21*x25*x28*x29*x30*x31*x32*x37*x38*x41*x43*x44*x45*x46*x54*x58*x60*x63*x66*x67*x68*x69*x73*x74, x3*x6*x7*x9*x10*x11*x12*x13*x14*x15*x16*x20*x21*x23*x24*x27*x28*x29*x30*x31*x34*x35*x38*x40*x41*x42*x46*x47*x48*x50*x53*x54*x55*x56*x57*x58*x59*x60*x61*x62*x64*x65*x67*x68*x72*x73*x75*x76*x77*x80, x7*x10*x11*x12*x13*x16*x17*x20*x21*x24*x25*x27*x28*x29*x30*x31*x33*x34*x35*x37*x38*x39*x43*x46*x47*x48*x49*x50*x55*x57*x58*x61*x63*x67*x68*x73*x75*x78*x79, x2*x5*x12*x13*x16*x17*x18*x19*x20*x21*x22*x24*x26*x28*x34*x35*x38*x39*x40*x43*x44*x45*x46*x47*x48*x50*x53*x55*x59*x61*x62*x66*x67*x68*x71*x72*x75*x77*x78*x79, x2*x4*x5*x7*x11*x12*x14*x16*x17*x20*x22*x27*x28*x31*x32*x33*x34*x35*x36*x37*x39*x40*x50*x53*x55*x57*x58*x59*x61*x62*x63*x66*x67*x69*x71*x73*x75*x76*x77*x78*x79*x80, x1*x3*x6*x7*x8*x9*x10*x14*x15*x16*x23*x24*x26*x28*x30*x31*x33*x35*x36*x39*x40*x41*x44*x45*x46*x47*x48*x49*x50*x52*x55*x56*x58*x60*x62*x63*x66*x67*x68*x69*x71*x73*x74*x75*x77*x79*x80, x1*x5*x6*x7*x11*x13*x14*x15*x16*x18*x20*x21*x22*x23*x24*x25*x27*x33*x34*x35*x36*x37*x39*x41*x43*x44*x45*x47*x48*x49*x50*x51*x52*x53*x55*x57*x58*x59*x60*x64*x68*x69*x71*x72*x73*x74*x75*x76*x78*x79, x2*x3*x4*x7*x8*x10*x11*x12*x15*x16*x18*x20*x22*x24*x25*x26*x28*x30*x31*x32*x34*x35*x39*x40*x41*x43*x44*x45*x46*x47*x49*x52*x53*x54*x55*x56*x57*x60*x61*x62*x63*x66*x68*x76*x78*x79, x2*x3*x4*x7*x10*x14*x15*x16*x17*x18*x19*x22*x24*x26*x27*x28*x29*x30*x31*x32*x33*x35*x39*x41*x42*x45*x47*x50*x53*x54*x56*x59*x66*x67*x68*x69*x70*x71*x72*x73*x75*x77*x78*x79*x80, x3*x4*x5*x8*x11*x13*x14*x15*x19*x20*x22*x23*x24*x26*x27*x28*x32*x33*x34*x36*x40*x42*x43*x44*x45*x49*x57*x59*x60*x62*x65*x66*x67*x68*x69*x72*x73*x74*x76*x79*x80, x1*x2*x6*x9*x10*x11*x15*x16*x18*x22*x23*x24*x25*x26*x27*x29*x31*x32*x39*x44*x46*x47*x48*x51*x52*x57*x60*x62*x63*x64*x65*x68*x69*x72*x74*x76, x2*x4*x5*x7*x8*x12*x15*x18*x20*x23*x26*x28*x29*x34*x36*x38*x39*x43*x44*x47*x56*x57*x58*x60*x62*x71*x73*x74*x76*x77*x78*x79, x2*x4*x6*x10*x11*x16*x18*x22*x23*x28*x29*x32*x33*x34*x35*x37*x40*x43*x45*x46*x47*x48*x49*x51*x52*x53*x54*x59*x63*x65*x70*x71*x72*x73*x74*x75*x79*x80, x1*x3*x4*x5*x6*x10*x13*x14*x15*x16*x17*x19*x20*x23*x24*x25*x29*x30*x31*x32*x35*x41*x45*x47*x48*x49*x50*x51*x54*x58*x59*x60*x64*x65*x66*x67*x68*x73*x75*x76*x78*x80, x4*x6*x7*x8*x9*x12*x13*x14*x15*x16*x17*x18*x19*x20*x21*x22*x24*x25*x27*x29*x30*x31*x36*x38*x44*x45*x50*x53*x54*x57*x58*x61*x63*x65*x71*x72*x73*x75, x1*x2*x3*x5*x8*x9*x14*x15*x16*x18*x21*x23*x25*x26*x28*x29*x33*x34*x36*x37*x39*x44*x45*x46*x47*x48*x49*x50*x52*x56*x63*x64*x66*x67*x73*x74*x75*x78*x79, x1*x2*x4*x5*x6*x7*x9*x13*x14*x15*x18*x20*x22*x25*x26*x28*x29*x30*x31*x32*x33*x34*x36*x41*x42*x43*x44*x47*x49*x51*x53*x54*x55*x56*x60*x64*x68*x69*x70*x71*x72*x73*x74*x75*x78*x79*x80, x6*x7*x15*x18*x19*x22*x24*x25*x26*x27*x28*x29*x30*x32*x33*x34*x35*x36*x38*x40*x45*x46*x47*x48*x49*x50*x54*x55*x56*x57*x58*x61*x62*x64*x66*x67*x69*x72*x73*x75*x78*x80, x5*x8*x10*x12*x14*x15*x20*x21*x22*x24*x30*x31*x33*x35*x36*x37*x38*x40*x41*x42*x45*x46*x47*x48*x49*x51*x55*x59*x60*x61*x64*x65*x66*x68*x69*x72*x77*x80, x1*x2*x3*x7*x8*x13*x14*x15*x16*x20*x23*x25*x26*x28*x30*x31*x35*x37*x40*x41*x42*x43*x44*x45*x46*x48*x49*x50*x51*x52*x55*x56*x60*x62*x63*x64*x65*x66*x67*x70*x71*x72*x76*x78*x79*x80, x1*x2*x6*x8*x9*x11*x13*x15*x16*x18*x19*x20*x22*x23*x24*x25*x26*x27*x32*x35*x38*x40*x41*x43*x46*x47*x49*x51*x52*x54*x56*x57*x60*x62*x66*x69*x70*x71*x74*x76*x79, x2*x4*x5*x8*x10*x11*x13*x14*x16*x18*x19*x24*x25*x26*x27*x29*x30*x31*x32*x37*x38*x41*x43*x44*x47*x52*x58*x60*x61*x62*x64*x66*x69*x70*x71*x78*x79*x80, x2*x4*x6*x7*x8*x9*x13*x16*x19*x22*x26*x28*x30*x33*x35*x39*x42*x43*x44*x45*x47*x49*x50*x52*x55*x57*x58*x59*x60*x64*x65*x66*x68*x70*x72*x73*x74*x77*x79, x1*x4*x5*x6*x7*x10*x11*x12*x13*x14*x16*x17*x18*x22*x25*x26*x32*x34*x35*x40*x42*x43*x44*x47*x49*x50*x51*x53*x54*x57*x58*x59*x62*x63*x65*x67*x70*x71*x72*x75*x76*x77*x80, x2*x5*x9*x12*x14*x16*x17*x21*x23*x25*x31*x35*x41*x42*x43*x46*x47*x48*x50*x52*x54*x55*x56*x60*x64*x67*x72*x73*x74*x77*x78*x79*x80, x1*x7*x8*x9*x11*x13*x14*x15*x20*x22*x23*x26*x29*x30*x32*x35*x37*x38*x40*x42*x43*x44*x48*x50*x54*x56*x59*x60*x63*x64*x66*x68*x71*x72*x73*x76*x77*x80, x5*x7*x8*x9*x12*x13*x14*x15*x17*x18*x20*x21*x22*x26*x29*x33*x34*x37*x39*x43*x45*x51*x52*x53*x56*x57*x58*x59*x61*x62*x64*x66*x68*x70*x72*x75*x80, x2*x3*x6*x8*x9*x10*x12*x13*x14*x15*x16*x19*x21*x23*x25*x26*x27*x29*x30*x31*x32*x33*x38*x39*x41*x44*x47*x49*x51*x52*x53*x54*x56*x57*x59*x60*x61*x62*x67*x68*x69*x70*x74*x75*x78*x79, x1*x2*x5*x7*x9*x12*x13*x15*x17*x18*x21*x22*x23*x24*x27*x29*x31*x32*x33*x35*x36*x38*x41*x43*x44*x46*x47*x49*x50*x51*x53*x56*x57*x58*x59*x60*x61*x62*x69*x70*x71*x74*x75*x76*x78*x79, x2*x3*x4*x5*x6*x8*x10*x11*x15*x17*x23*x24*x25*x26*x31*x33*x34*x36*x40*x42*x44*x47*x49*x51*x52*x53*x57*x58*x59*x67*x68*x69*x72*x73*x74*x75*x76*x78*x80, x2*x3*x6*x7*x12*x13*x15*x16*x17*x18*x19*x23*x24*x25*x26*x27*x28*x31*x32*x33*x36*x38*x40*x43*x45*x46*x48*x49*x51*x52*x53*x56*x57*x58*x60*x61*x66*x69*x71*x72*x73*x76*x79, x1*x2*x6*x7*x8*x9*x14*x16*x18*x19*x20*x22*x24*x25*x26*x28*x30*x31*x32*x34*x35*x37*x38*x40*x41*x43*x45*x48*x50*x52*x53*x57*x59*x61*x62*x64*x68*x72*x73*x74*x79*x80, x1*x4*x5*x8*x13*x14*x15*x16*x17*x19*x23*x24*x25*x26*x28*x31*x32*x34*x35*x36*x39*x40*x41*x43*x44*x47*x54*x55*x58*x60*x61*x63*x64*x66*x69*x70*x71*x75*x76*x77*x78*x79, x3*x4*x5*x6*x9*x12*x17*x21*x23*x25*x27*x33*x34*x38*x39*x40*x41*x42*x44*x46*x48*x50*x51*x55*x56*x58*x59*x60*x61*x62*x63*x69*x70*x71*x73*x75*x78*x80, x1*x9*x10*x13*x17*x30*x32*x33*x36*x41*x42*x43*x45*x52*x54*x60*x61*x62*x64*x66*x68*x71*x73*x74*x76*x77*x80, x2*x4*x6*x7*x9*x11*x13*x19*x21*x23*x24*x25*x29*x32*x34*x37*x38*x39*x41*x43*x44*x45*x46*x49*x51*x52*x55*x56*x58*x60*x63*x64*x67*x68*x70*x71*x72*x74*x75*x76*x78*x79*x80, x1*x2*x7*x9*x11*x13*x14*x15*x16*x19*x20*x21*x27*x29*x31*x32*x33*x34*x40*x44*x45*x46*x53*x54*x56*x57*x58*x61*x62*x65*x67*x69*x70*x71*x72*x73*x74*x76*x79*x80, x2*x3*x7*x8*x11*x13*x15*x16*x20*x21*x22*x24*x27*x29*x32*x33*x35*x36*x37*x40*x41*x44*x45*x46*x48*x51*x52*x54*x58*x59*x61*x62*x63*x65*x67*x68*x73*x75*x79, x2*x3*x4*x5*x6*x8*x9*x13*x14*x15*x18*x20*x22*x24*x27*x28*x29*x31*x33*x35*x36*x38*x43*x45*x48*x49*x59*x60*x64*x66*x68*x70*x71*x72*x75*x76*x77*x78, x1*x2*x3*x4*x5*x6*x8*x9*x10*x16*x17*x18*x20*x21*x22*x24*x28*x29*x30*x31*x32*x33*x34*x37*x39*x40*x42*x43*x45*x47*x48*x49*x51*x53*x54*x57*x58*x59*x60*x62*x66*x67*x68*x69*x73*x76*x78*x79*x80, x1*x4*x5*x8*x10*x12*x14*x17*x18*x24*x25*x26*x29*x30*x31*x32*x33*x35*x37*x39*x43*x44*x45*x46*x48*x49*x52*x54*x55*x57*x58*x65*x66*x67*x68*x69*x71*x73*x75*x76*x77*x78*x79, x1*x4*x5*x8*x11*x12*x21*x23*x24*x25*x26*x27*x28*x29*x30*x32*x33*x36*x37*x38*x39*x40*x42*x43*x44*x45*x49*x51*x52*x55*x58*x61*x62*x64*x65*x66*x68*x69*x72*x73*x76*x77*x79*x80, x1*x4*x5*x8*x9*x11*x13*x14*x15*x17*x20*x23*x25*x29*x31*x32*x33*x34*x35*x40*x44*x45*x46*x47*x50*x53*x55*x62*x67*x68*x69*x70*x72*x74*x75*x79*x80, x1*x2*x4*x5*x7*x8*x10*x11*x12*x13*x14*x15*x20*x21*x22*x24*x27*x29*x30*x32*x35*x36*x37*x38*x40*x41*x44*x48*x49*x52*x53*x54*x55*x58*x60*x61*x65*x69*x72*x73*x75*x76*x77*x79*x80, x1*x2*x3*x7*x9*x12*x13*x15*x17*x18*x19*x20*x22*x27*x29*x30*x36*x38*x39*x41*x42*x44*x52*x57*x58*x62*x63*x64*x65*x66*x71*x73*x77*x79*x80, x1*x3*x4*x7*x11*x14*x17*x22*x26*x27*x30*x31*x32*x36*x37*x42*x43*x44*x45*x46*x47*x49*x55*x56*x58*x61*x63*x64*x68*x69*x70*x71*x72*x73*x74*x75*x77*x80, x1*x3*x6*x9*x10*x12*x17*x18*x26*x27*x30*x31*x32*x33*x34*x35*x36*x39*x42*x45*x46*x49*x50*x51*x54*x56*x57*x59*x60*x63*x64*x68*x69*x70*x75*x76*x78*x80, x2*x6*x8*x14*x17*x18*x20*x23*x24*x25*x27*x29*x31*x32*x37*x38*x39*x40*x47*x48*x49*x54*x57*x63*x66*x72*x74*x75*x77*x78, x1*x4*x5*x7*x9*x10*x12*x14*x15*x16*x18*x21*x24*x25*x26*x29*x30*x32*x33*x34*x35*x36*x39*x42*x43*x44*x45*x46*x47*x49*x50*x51*x56*x59*x64*x67*x69*x72*x75*x77*x78, x1*x4*x5*x6*x9*x10*x11*x14*x17*x18*x19*x20*x24*x26*x27*x30*x31*x34*x35*x36*x39*x40*x41*x42*x43*x44*x45*x46*x47*x48*x50*x53*x56*x57*x58*x64*x65*x66*x67*x71*x73*x74*x79, x1*x2*x4*x6*x7*x13*x17*x20*x21*x22*x24*x25*x26*x27*x32*x33*x34*x35*x37*x39*x40*x41*x44*x46*x48*x49*x50*x51*x53*x55*x56*x58*x62*x63*x65*x67*x70*x73*x75*x76*x77*x79*x80, x2*x4*x5*x8*x11*x12*x13*x14*x16*x17*x18*x19*x23*x26*x27*x29*x30*x32*x33*x35*x36*x37*x40*x42*x46*x48*x52*x54*x55*x56*x57*x58*x59*x60*x61*x68*x69*x70*x73*x76*x78*x79*x80, x1*x4*x5*x7*x13*x15*x16*x18*x22*x24*x26*x27*x28*x29*x32*x37*x38*x40*x41*x45*x46*x47*x49*x50*x51*x52*x53*x55*x56*x57*x62*x64*x65*x67*x69*x70*x71*x73*x79, x2*x3*x4*x7*x9*x11*x12*x15*x18*x19*x20*x23*x25*x26*x27*x29*x33*x35*x40*x42*x43*x49*x50*x51*x52*x53*x55*x56*x58*x60*x62*x64*x68*x71*x73*x74*x75*x77*x78*x79*x80, x1*x2*x3*x6*x8*x10*x11*x13*x16*x18*x20*x21*x27*x32*x33*x34*x41*x43*x44*x46*x48*x53*x54*x56*x58*x67*x69*x71*x73*x74*x75*x76*x77*x79, x2*x3*x6*x9*x10*x13*x14*x15*x17*x19*x20*x24*x27*x28*x32*x35*x36*x38*x41*x42*x45*x47*x48*x49*x50*x51*x52*x53*x54*x55*x57*x58*x59*x63*x64*x66*x67*x68*x70*x71*x72*x73*x75*x76*x78*x80, x3*x4*x7*x8*x9*x11*x13*x14*x15*x16*x17*x18*x19*x21*x25*x26*x27*x28*x29*x33*x34*x36*x38*x40*x42*x43*x46*x49*x51*x55*x56*x59*x60*x61*x63*x64*x65*x67*x68*x80, x1*x2*x3*x6*x9*x10*x11*x12*x13*x15*x17*x18*x19*x20*x23*x24*x25*x26*x28*x29*x30*x33*x35*x38*x39*x48*x49*x53*x55*x56*x58*x59*x60*x61*x64*x70*x74*x77*x78*x79*x80, x3*x5*x6*x8*x11*x12*x14*x18*x20*x21*x22*x23*x24*x27*x28*x30*x33*x34*x36*x37*x38*x40*x41*x43*x44*x52*x56*x57*x58*x59*x62*x63*x64*x65*x67*x70*x73*x74*x75*x77*x79, x4*x7*x11*x14*x15*x19*x22*x23*x24*x26*x27*x29*x31*x32*x36*x37*x39*x41*x42*x43*x45*x47*x50*x51*x52*x56*x57*x59*x63*x64*x65*x67*x69*x70*x71*x74*x76*x78, x2*x3*x4*x6*x7*x9*x10*x14*x15*x20*x22*x23*x24*x25*x26*x28*x31*x33*x37*x38*x39*x40*x43*x44*x48*x50*x52*x53*x54*x55*x56*x57*x58*x59*x60*x61*x62*x64*x66*x67*x68*x69*x70*x71*x72*x73*x77, x6*x14*x16*x17*x18*x21*x22*x23*x24*x28*x32*x36*x38*x39*x40*x41*x42*x45*x46*x47*x50*x51*x54*x55*x58*x62*x65*x68*x71*x72*x76*x78*x80, x1*x4*x8*x10*x11*x13*x14*x16*x17*x18*x19*x20*x21*x22*x23*x25*x28*x29*x32*x34*x35*x39*x41*x43*x44*x45*x56*x60*x61*x65*x67*x68*x69*x70*x71*x73*x74*x75*x76*x78*x79*x80, x1*x6*x7*x9*x12*x15*x16*x21*x30*x31*x32*x33*x42*x44*x45*x46*x47*x49*x50*x53*x54*x55*x58*x61*x63*x64*x66*x67*x70*x72*x75*x77*x78*x79*x80, x1*x9*x11*x13*x16*x17*x19*x22*x24*x29*x31*x32*x34*x35*x37*x38*x42*x44*x45*x47*x51*x52*x55*x56*x57*x60*x61*x62*x63*x65*x66*x67*x70*x71*x73*x79, x3*x4*x6*x7*x8*x9*x10*x11*x16*x19*x20*x21*x23*x24*x26*x27*x28*x30*x35*x36*x37*x38*x42*x43*x47*x48*x49*x51*x55*x58*x59*x60*x63*x65*x66*x67*x68*x73*x74*x75*x76*x78*x79*x80, x2*x3*x4*x7*x8*x9*x10*x12*x14*x15*x19*x21*x22*x23*x25*x26*x27*x29*x31*x33*x34*x35*x36*x37*x40*x42*x43*x47*x49*x51*x52*x53*x57*x59*x60*x63*x64*x67*x68*x69*x70*x71*x73*x75*x76*x77*x80, x1*x2*x5*x7*x8*x13*x14*x16*x19*x20*x21*x27*x28*x29*x30*x37*x39*x41*x45*x47*x48*x49*x50*x51*x55*x56*x57*x64*x65*x68*x69*x70*x73*x74*x75*x76*x77*x78*x79, x1*x3*x6*x7*x9*x10*x13*x15*x18*x22*x25*x28*x29*x31*x35*x39*x44*x46*x47*x49*x52*x55*x56*x59*x62*x63*x66*x68*x69*x73*x74*x76*x77*x78*x79, x3*x6*x9*x11*x13*x14*x15*x16*x19*x20*x21*x22*x25*x26*x27*x29*x30*x31*x32*x35*x36*x37*x40*x41*x42*x43*x44*x46*x48*x49*x52*x53*x55*x57*x58*x59*x60*x61*x62*x65*x67*x69*x71*x72*x77*x78*x79*x80, x1*x2*x9*x11*x12*x14*x15*x17*x18*x24*x26*x28*x29*x30*x32*x34*x36*x39*x43*x45*x46*x48*x49*x51*x52*x54*x55*x60*x63*x66*x69*x70*x71*x73*x74*x75*x79, x2*x6*x7*x9*x10*x18*x19*x21*x27*x28*x30*x31*x32*x33*x34*x35*x38*x40*x41*x43*x44*x45*x46*x49*x50*x52*x53*x56*x57*x59*x61*x64*x65*x67*x68*x69*x70*x71*x73*x76*x77, x1*x2*x5*x13*x14*x16*x18*x19*x20*x21*x22*x25*x26*x27*x30*x32*x33*x34*x35*x39*x42*x43*x45*x46*x47*x52*x53*x54*x55*x56*x57*x63*x65*x70*x71*x72*x74*x76*x78*x79, x2*x3*x4*x6*x7*x9*x15*x17*x20*x22*x24*x26*x28*x31*x34*x36*x38*x39*x40*x42*x43*x44*x46*x47*x48*x49*x50*x53*x55*x58*x60*x63*x64*x68*x72*x73*x74*x75*x76*x77*x78*x79, x1*x3*x4*x8*x9*x10*x12*x13*x14*x16*x17*x18*x19*x23*x24*x25*x27*x28*x31*x37*x38*x41*x42*x44*x48*x53*x54*x60*x63*x66*x68*x71*x73*x75*x76*x80, x2*x3*x5*x7*x8*x16*x21*x23*x24*x25*x31*x33*x34*x35*x38*x39*x41*x42*x43*x44*x45*x47*x48*x52*x53*x56*x57*x58*x61*x62*x63*x64*x66*x67*x68*x72*x74*x76*x77, x1*x2*x7*x8*x9*x10*x11*x14*x16*x18*x23*x24*x26*x29*x30*x31*x35*x36*x37*x38*x39*x40*x42*x43*x44*x47*x48*x52*x53*x54*x58*x61*x62*x63*x64*x66*x68*x70*x71*x72*x73*x74*x76, x4*x5*x10*x12*x18*x20*x21*x22*x24*x25*x26*x27*x29*x30*x31*x35*x37*x39*x40*x41*x44*x47*x49*x50*x52*x53*x54*x55*x57*x59*x60*x64*x66*x71*x74*x75*x76*x77*x80, x2*x5*x6*x8*x9*x10*x12*x14*x15*x18*x19*x20*x21*x23*x25*x26*x28*x29*x31*x32*x33*x34*x35*x38*x39*x40*x41*x42*x50*x52*x54*x56*x60*x62*x63*x64*x65*x71*x74*x75*x79, x1*x2*x5*x8*x9*x10*x11*x12*x16*x18*x26*x28*x29*x33*x37*x40*x43*x44*x47*x48*x50*x51*x53*x61*x63*x64*x69*x70*x71*x73*x77*x80, x1*x2*x5*x8*x9*x10*x11*x12*x13*x15*x16*x18*x19*x20*x22*x24*x25*x28*x29*x32*x33*x34*x35*x38*x40*x42*x43*x47*x48*x49*x51*x52*x53*x56*x57*x58*x60*x63*x64*x69*x73*x74*x77*x78*x80, x2*x6*x8*x9*x11*x13*x14*x16*x19*x20*x21*x22*x25*x27*x28*x29*x30*x31*x33*x35*x36*x37*x38*x43*x44*x46*x48*x50*x53*x55*x56*x58*x59*x60*x61*x63*x64*x66*x67*x69*x70*x71*x72, x3*x6*x8*x9*x10*x14*x16*x24*x31*x32*x34*x35*x36*x37*x38*x40*x41*x42*x43*x44*x45*x46*x47*x49*x50*x51*x56*x59*x61*x62*x66*x67*x68*x69*x70*x76*x77, x1*x2*x5*x6*x11*x12*x14*x15*x21*x23*x24*x26*x27*x28*x31*x32*x34*x38*x40*x41*x42*x47*x48*x49*x50*x53*x54*x57*x59*x61*x62*x65*x66*x69*x74, x3*x4*x6*x7*x9*x10*x13*x14*x18*x20*x22*x23*x25*x28*x29*x34*x36*x37*x38*x44*x45*x47*x48*x50*x51*x52*x57*x58*x59*x60*x61*x63*x64*x66*x67*x68*x71*x72*x73*x74*x76*x77, x1*x2*x3*x4*x9*x11*x12*x14*x20*x24*x25*x27*x28*x30*x33*x34*x38*x43*x44*x46*x49*x51*x52*x53*x55*x56*x57*x61*x63*x69*x72*x74*x75*x76*x79, x1*x3*x6*x7*x10*x12*x13*x18*x19*x22*x24*x27*x28*x29*x32*x33*x35*x36*x37*x38*x41*x46*x48*x49*x51*x52*x55*x57*x58*x59*x60*x62*x65*x67*x69*x70*x73*x74*x75*x76*x78, x1*x6*x12*x15*x19*x20*x23*x24*x26*x27*x28*x30*x33*x34*x35*x39*x40*x41*x42*x45*x48*x50*x54*x55*x56*x57*x58*x59*x60*x61*x62*x63*x66*x69*x70*x71*x72*x76*x77*x78*x79, x1*x6*x8*x9*x13*x18*x19*x21*x24*x25*x26*x27*x28*x29*x31*x32*x33*x35*x39*x40*x41*x42*x46*x47*x49*x55*x56*x57*x58*x62*x64*x65*x66*x68*x75*x76*x78, x1*x2*x3*x7*x11*x12*x15*x16*x18*x19*x20*x23*x25*x26*x27*x29*x30*x32*x33*x34*x35*x36*x37*x38*x39*x41*x44*x47*x48*x52*x54*x57*x58*x62*x63*x64*x65*x67*x68*x73*x74*x75*x78*x79*x80, x1*x2*x4*x5*x6*x7*x9*x11*x21*x24*x25*x26*x29*x32*x33*x34*x36*x37*x38*x44*x48*x51*x54*x58*x60*x61*x63*x65*x68*x69*x73*x74*x75*x77*x79, x4*x6*x8*x11*x12*x13*x14*x15*x16*x17*x23*x24*x26*x29*x32*x33*x34*x35*x38*x39*x40*x41*x42*x43*x46*x47*x50*x51*x52*x54*x55*x56*x57*x60*x61*x62*x65*x67*x70*x71*x76*x78*x79, x2*x3*x4*x7*x10*x12*x13*x14*x15*x18*x19*x20*x21*x23*x24*x26*x31*x33*x34*x37*x40*x42*x45*x48*x49*x50*x52*x56*x57*x58*x59*x61*x62*x63*x64*x65*x66*x67*x68*x72*x73*x79*x80, x1*x6*x7*x8*x9*x10*x11*x13*x14*x16*x18*x19*x22*x23*x24*x26*x28*x29*x37*x38*x40*x42*x43*x45*x46*x47*x48*x49*x50*x52*x53*x54*x57*x61*x63*x64*x65*x66*x68*x73*x75*x76*x78*x80, x2*x3*x4*x6*x8*x9*x12*x14*x15*x16*x18*x20*x22*x23*x24*x30*x31*x32*x34*x35*x36*x42*x44*x46*x54*x55*x58*x61*x62*x64*x65*x66*x68*x70*x75*x78*x79, x2*x3*x4*x5*x8*x10*x12*x13*x14*x18*x20*x21*x26*x27*x28*x30*x32*x33*x34*x35*x36*x40*x42*x43*x44*x45*x47*x48*x51*x53*x54*x55*x56*x60*x61*x65*x66*x68*x69*x70*x71*x72*x77*x80, x1*x3*x8*x9*x10*x11*x13*x14*x19*x21*x22*x24*x26*x27*x28*x32*x33*x35*x38*x39*x40*x41*x42*x43*x44*x46*x48*x50*x54*x55*x56*x57*x59*x61*x62*x66*x70*x74*x75*x78*x79, x2*x6*x7*x8*x9*x12*x13*x15*x16*x18*x21*x22*x23*x25*x28*x29*x31*x35*x37*x38*x39*x42*x43*x45*x47*x48*x50*x57*x58*x59*x60*x61*x62*x63*x64*x66*x68*x70*x72*x73*x74*x76*x80, x1*x2*x4*x10*x11*x13*x14*x15*x16*x17*x22*x23*x26*x27*x28*x30*x31*x32*x34*x36*x38*x39*x42*x44*x45*x47*x48*x49*x51*x54*x55*x57*x58*x59*x60*x62*x65*x66*x68*x70*x71*x74*x76*x78*x79, x3*x4*x5*x8*x9*x11*x15*x17*x18*x20*x21*x22*x23*x24*x26*x27*x28*x30*x33*x34*x35*x36*x38*x39*x40*x41*x42*x45*x47*x48*x53*x58*x59*x60*x61*x62*x63*x66*x67*x68*x70*x72*x73*x77*x78*x79, x2*x4*x6*x7*x9*x10*x11*x12*x13*x14*x15*x16*x17*x23*x24*x28*x29*x32*x36*x39*x42*x47*x49*x52*x53*x56*x59*x61*x62*x63*x65*x69*x72*x74*x76*x77*x78*x79*x80, x4*x6*x7*x8*x13*x16*x18*x20*x21*x24*x27*x29*x30*x31*x32*x34*x36*x37*x43*x45*x48*x49*x51*x53*x56*x57*x59*x62*x63*x67*x72*x75*x78, x1*x5*x8*x10*x12*x17*x18*x21*x23*x24*x27*x28*x29*x31*x34*x35*x36*x39*x40*x43*x46*x47*x48*x49*x51*x52*x56*x58*x59*x60*x61*x62*x66*x69*x74*x75*x76*x77*x78*x80, x4*x5*x6*x7*x9*x11*x14*x16*x17*x18*x22*x23*x24*x25*x29*x39*x43*x45*x48*x51*x54*x57*x62*x63*x69*x70*x74*x75*x77*x78, x3*x4*x6*x8*x10*x11*x13*x14*x16*x19*x20*x22*x24*x25*x27*x28*x30*x32*x33*x41*x42*x43*x44*x47*x48*x49*x51*x54*x59*x61*x62*x65*x66*x68*x71*x72*x73*x75*x76*x78*x79*x80, x2*x3*x6*x14*x16*x17*x18*x19*x22*x23*x25*x26*x33*x34*x35*x36*x40*x57*x59*x61*x63*x68*x69*x70*x71*x72*x75*x76*x78*x80, x4*x5*x9*x10*x12*x13*x14*x15*x17*x18*x19*x20*x21*x22*x23*x24*x27*x30*x31*x33*x34*x35*x39*x40*x45*x50*x51*x52*x55*x61*x64*x65*x66*x67*x69*x73*x74*x79, x7*x8*x10*x11*x12*x14*x18*x21*x22*x23*x24*x25*x26*x30*x31*x32*x34*x35*x38*x40*x41*x42*x43*x45*x47*x49*x50*x52*x54*x60*x62*x64*x65*x68*x69*x70*x71*x77*x78, x5*x6*x7*x9*x11*x15*x18*x19*x20*x22*x25*x26*x29*x30*x31*x32*x33*x35*x37*x40*x42*x43*x44*x45*x46*x49*x52*x54*x57*x59*x60*x61*x67*x68*x71*x75*x79*x80, x1*x2*x3*x4*x5*x13*x14*x21*x22*x23*x27*x28*x29*x32*x34*x38*x39*x41*x46*x48*x49*x50*x52*x53*x56*x58*x59*x60*x61*x62*x63*x64*x65*x66*x68*x69*x73*x76*x78*x80, x1*x4*x6*x7*x9*x11*x14*x15*x18*x21*x22*x23*x25*x32*x33*x34*x36*x39*x40*x42*x44*x45*x49*x50*x52*x54*x57*x64*x66*x67*x70*x71*x76*x77*x79, x2*x4*x5*x10*x11*x15*x16*x18*x21*x22*x25*x28*x29*x30*x32*x33*x36*x39*x42*x44*x46*x48*x49*x55*x56*x58*x59*x63*x65*x68*x69*x71*x78*x79, x2*x3*x4*x5*x6*x12*x13*x14*x15*x17*x18*x19*x21*x23*x25*x27*x28*x29*x31*x33*x36*x37*x38*x39*x42*x44*x55*x57*x59*x63*x67*x70*x71*x78*x79*x80, x2*x3*x4*x6*x9*x10*x11*x12*x13*x15*x16*x17*x25*x29*x37*x38*x40*x42*x43*x44*x45*x47*x48*x50*x53*x56*x63*x64*x67*x69*x70*x71*x72*x75*x78, x3*x4*x5*x7*x8*x9*x11*x13*x14*x15*x16*x18*x19*x20*x21*x24*x25*x30*x32*x34*x35*x37*x38*x39*x42*x43*x45*x46*x47*x48*x49*x50*x53*x55*x57*x58*x64*x65*x67*x68*x69*x70*x72*x73*x74*x75*x79, x3*x5*x6*x9*x10*x14*x15*x16*x17*x19*x20*x22*x23*x24*x25*x26*x28*x29*x30*x33*x34*x35*x36*x37*x38*x40*x43*x44*x45*x46*x47*x48*x51*x53*x54*x55*x58*x63*x64*x68*x70*x71*x72*x74*x75*x76*x78*x80, x1*x2*x3*x4*x6*x11*x14*x16*x17*x18*x21*x22*x25*x26*x29*x30*x32*x34*x35*x39*x42*x43*x46*x47*x49*x51*x52*x54*x55*x57*x62*x63*x66*x67*x69*x71*x73*x74*x76*x79, x2*x3*x4*x6*x10*x12*x13*x15*x16*x18*x21*x26*x27*x28*x30*x31*x35*x36*x37*x40*x44*x46*x49*x51*x52*x54*x56*x58*x59*x60*x61*x65*x66*x67*x70*x71*x72*x75*x78*x80, x2*x5*x6*x8*x9*x10*x19*x20*x21*x23*x24*x25*x29*x31*x32*x36*x39*x40*x41*x42*x47*x48*x50*x51*x54*x56*x57*x60*x61*x64*x67*x68*x69*x71*x74, x2*x5*x6*x10*x12*x13*x15*x17*x20*x22*x24*x27*x31*x32*x33*x38*x39*x41*x45*x46*x47*x48*x49*x51*x53*x55*x56*x59*x60*x61*x63*x64*x66*x67*x69*x71*x72*x74*x76*x77, x1*x2*x5*x6*x7*x8*x13*x15*x16*x20*x23*x24*x25*x26*x27*x30*x31*x34*x35*x37*x38*x39*x41*x42*x45*x48*x49*x50*x54*x55*x57*x58*x61*x62*x63*x67*x69*x71*x72*x75*x79, x1*x3*x4*x5*x6*x7*x9*x10*x11*x13*x17*x19*x23*x24*x27*x29*x32*x33*x35*x37*x39*x40*x44*x45*x47*x51*x52*x55*x57*x58*x60*x61*x63*x67*x68*x69*x73*x75*x76*x78, x1*x2*x6*x10*x11*x12*x13*x14*x16*x19*x20*x22*x25*x29*x32*x33*x34*x36*x37*x39*x40*x41*x44*x46*x47*x49*x51*x52*x53*x54*x56*x57*x58*x59*x60*x61*x66*x67*x72*x75*x76*x77*x79*x80, x1*x3*x5*x6*x9*x10*x11*x13*x16*x17*x18*x21*x22*x29*x30*x31*x33*x35*x37*x41*x44*x46*x47*x48*x50*x51*x53*x55*x56*x57*x58*x60*x63*x65*x67*x68*x69*x71*x73*x74*x75*x76*x77*x78, x1*x2*x4*x8*x9*x12*x14*x15*x16*x17*x18*x19*x20*x22*x23*x24*x25*x26*x29*x30*x31*x32*x33*x34*x35*x36*x37*x39*x42*x44*x47*x49*x50*x55*x57*x59*x60*x62*x63*x67*x69*x70*x72*x74*x75, x1*x4*x5*x6*x8*x13*x15*x17*x20*x23*x28*x33*x34*x35*x36*x37*x39*x40*x42*x44*x46*x50*x51*x55*x61*x63*x67*x68*x72*x73*x77*x78*x80, x2*x3*x4*x5*x6*x10*x11*x12*x13*x18*x21*x23*x25*x26*x29*x30*x33*x34*x37*x42*x43*x46*x51*x53*x54*x56*x58*x63*x65*x68*x69*x70*x71*x72*x73*x75*x76, x2*x4*x5*x7*x8*x9*x11*x12*x14*x16*x17*x19*x21*x23*x25*x27*x29*x30*x31*x36*x37*x40*x41*x45*x47*x50*x51*x52*x55*x57*x60*x61*x62*x63*x64*x65*x68*x69*x76*x79*x80, x1*x2*x3*x4*x6*x7*x9*x12*x19*x20*x26*x28*x30*x31*x32*x34*x35*x36*x37*x39*x44*x46*x47*x53*x58*x59*x60*x61*x63*x71*x73*x74*x76*x77*x78*x79*x80, x1*x4*x5*x6*x7*x8*x9*x14*x15*x16*x19*x20*x21*x22*x23*x24*x25*x28*x30*x31*x34*x35*x41*x43*x44*x48*x49*x50*x51*x52*x56*x57*x60*x61*x64*x65*x70*x73*x74*x75*x76*x78*x79, x2*x3*x5*x7*x8*x9*x13*x14*x16*x17*x18*x19*x20*x24*x27*x28*x35*x38*x43*x45*x47*x48*x51*x54*x55*x59*x60*x62*x63*x64*x66*x67*x70*x71*x72*x75*x76*x78*x79, x4*x6*x8*x9*x10*x11*x17*x21*x26*x28*x31*x32*x33*x34*x36*x37*x38*x39*x41*x44*x45*x46*x47*x49*x51*x53*x54*x55*x56*x57*x63*x66*x70*x71*x72*x75*x76*x78*x79*x80, x1*x2*x3*x4*x8*x9*x10*x13*x17*x18*x24*x25*x26*x28*x29*x31*x33*x35*x36*x38*x39*x40*x41*x43*x45*x47*x51*x52*x55*x56*x58*x60*x61*x65*x66*x69*x70*x72*x73*x74*x77*x79, x2*x3*x6*x8*x9*x10*x11*x12*x18*x20*x24*x26*x27*x30*x31*x32*x33*x34*x35*x36*x37*x40*x41*x44*x48*x49*x50*x52*x62*x66*x67*x72*x75*x77*x80, x1*x3*x5*x9*x11*x13*x14*x15*x16*x17*x20*x21*x22*x24*x25*x28*x30*x31*x33*x36*x38*x39*x41*x44*x45*x49*x50*x53*x55*x56*x58*x59*x61*x63*x64*x66*x72*x73*x74*x76*x79, x2*x3*x4*x5*x6*x9*x11*x16*x17*x19*x22*x25*x27*x29*x31*x32*x37*x39*x40*x41*x42*x43*x45*x47*x50*x51*x52*x55*x56*x57*x58*x60*x63*x65*x67*x69*x71*x72*x76*x77*x78, x3*x8*x9*x11*x12*x13*x15*x16*x18*x19*x20*x22*x23*x24*x26*x27*x28*x29*x30*x31*x33*x34*x36*x37*x39*x43*x45*x47*x49*x50*x52*x59*x61*x63*x64*x66*x67*x68*x70*x71*x72*x73*x74*x77*x80, x3*x4*x5*x6*x8*x9*x10*x15*x16*x17*x19*x20*x22*x23*x24*x26*x30*x32*x33*x34*x35*x38*x39*x40*x46*x47*x48*x49*x52*x53*x54*x57*x59*x61*x64*x67*x71*x72*x73*x76*x77*x80, x5*x6*x7*x9*x11*x12*x13*x15*x17*x18*x19*x20*x22*x27*x28*x30*x31*x32*x33*x34*x36*x37*x40*x41*x42*x43*x44*x45*x48*x49*x50*x52*x54*x55*x57*x67*x69*x70*x72*x74*x75*x76*x78, x3*x4*x6*x8*x12*x14*x16*x17*x18*x19*x22*x25*x26*x28*x29*x31*x34*x36*x37*x38*x42*x43*x46*x47*x49*x50*x51*x53*x54*x58*x59*x60*x61*x64*x67*x69*x73, x3*x4*x5*x6*x8*x10*x12*x15*x16*x19*x20*x21*x23*x27*x28*x29*x30*x31*x33*x34*x36*x37*x38*x40*x41*x43*x44*x45*x48*x53*x55*x56*x59*x63*x67*x68*x73*x75*x79, x1*x2*x3*x4*x5*x7*x8*x9*x10*x13*x14*x16*x19*x20*x21*x26*x27*x28*x29*x32*x33*x34*x38*x39*x42*x43*x45*x47*x52*x54*x55*x58*x60*x65*x66*x67*x68*x70*x71*x72*x73*x74*x75*x78*x80, x3*x4*x5*x9*x10*x11*x12*x13*x14*x15*x16*x18*x19*x20*x22*x24*x27*x31*x34*x35*x36*x38*x40*x44*x48*x50*x51*x52*x56*x59*x60*x61*x64*x65*x68*x74*x75*x76*x77*x79*x80, x2*x4*x5*x9*x11*x13*x14*x16*x17*x19*x20*x21*x22*x23*x26*x27*x28*x30*x31*x32*x34*x35*x36*x37*x39*x41*x43*x46*x50*x51*x56*x58*x61*x62*x63*x64*x66*x68*x69*x70*x71*x72*x75, x4*x5*x7*x8*x9*x11*x12*x15*x17*x18*x19*x20*x23*x25*x26*x27*x28*x33*x34*x35*x42*x43*x44*x49*x50*x51*x52*x53*x55*x56*x61*x64*x69*x70*x71*x72*x73*x74*x75*x78, x1*x3*x10*x12*x16*x17*x23*x26*x31*x32*x34*x35*x36*x42*x44*x46*x51*x53*x54*x58*x59*x60*x64*x66*x67*x69*x72*x73*x75*x78*x79, x1*x2*x4*x8*x11*x13*x15*x18*x19*x21*x22*x23*x25*x27*x30*x31*x33*x34*x37*x38*x40*x42*x43*x45*x46*x49*x50*x51*x54*x56*x61*x63*x65*x67*x68*x69*x74*x75*x76*x77*x79, x2*x3*x4*x5*x10*x11*x13*x14*x15*x16*x18*x20*x22*x23*x24*x25*x31*x34*x35*x37*x39*x40*x43*x44*x47*x48*x51*x55*x59*x62*x65*x77*x79, x1*x2*x5*x6*x8*x9*x10*x11*x12*x13*x17*x21*x23*x24*x27*x29*x30*x36*x37*x38*x39*x40*x41*x42*x48*x50*x51*x54*x56*x59*x60*x62*x63*x65*x68*x69*x73*x80, x1*x6*x7*x15*x17*x18*x19*x23*x24*x28*x30*x31*x32*x35*x37*x42*x48*x50*x51*x52*x56*x58*x59*x60*x63*x67*x68*x69*x70*x71*x78*x79, x1*x2*x4*x5*x6*x8*x10*x15*x16*x17*x19*x23*x24*x28*x30*x31*x33*x34*x35*x36*x37*x39*x45*x47*x48*x49*x51*x52*x53*x56*x57*x58*x61*x64*x66*x67*x70*x71*x73*x74*x76*x78*x79*x80, x1*x5*x6*x9*x10*x11*x16*x17*x18*x20*x21*x23*x25*x26*x27*x29*x30*x33*x34*x35*x37*x39*x42*x44*x46*x52*x61*x62*x65*x67*x68*x70*x73*x75*x79, x2*x3*x5*x8*x9*x18*x21*x22*x25*x30*x31*x32*x33*x34*x35*x36*x37*x41*x45*x46*x47*x48*x50*x52*x53*x55*x56*x64*x65*x66*x71*x73*x76*x77, x2*x3*x4*x5*x7*x8*x9*x16*x19*x20*x21*x23*x25*x27*x28*x29*x31*x33*x35*x37*x39*x40*x43*x45*x47*x48*x49*x50*x51*x53*x54*x55*x60*x62*x63*x64*x65*x73*x74*x77*x78*x79*x80, x3*x4*x6*x8*x9*x11*x13*x17*x18*x19*x20*x23*x26*x31*x33*x35*x37*x39*x40*x43*x44*x45*x46*x47*x50*x51*x54*x56*x62*x64*x65*x68*x70*x71*x74*x78*x79*x80, x3*x4*x8*x12*x13*x14*x15*x16*x17*x20*x21*x22*x25*x26*x27*x30*x31*x33*x34*x35*x36*x41*x42*x45*x51*x54*x56*x58*x59*x60*x61*x63*x64*x66*x67*x68*x69*x73*x74*x75*x78, x2*x3*x4*x8*x10*x11*x12*x14*x15*x17*x19*x24*x25*x30*x31*x33*x34*x35*x39*x40*x41*x44*x47*x48*x50*x51*x53*x54*x55*x56*x58*x59*x60*x62*x65*x66*x67*x68*x71*x72*x73*x75*x79, x1*x2*x3*x6*x9*x10*x12*x13*x14*x16*x17*x18*x20*x21*x22*x23*x25*x27*x28*x31*x32*x34*x35*x38*x39*x45*x46*x47*x48*x52*x59*x61*x62*x65*x66*x67*x71*x73*x75*x77*x79, x3*x4*x5*x6*x8*x12*x13*x17*x18*x19*x21*x23*x24*x28*x31*x33*x36*x38*x39*x40*x41*x42*x43*x45*x48*x51*x54*x56*x59*x60*x61*x65*x67*x68*x69*x71*x75*x76*x78, x1*x3*x8*x12*x15*x18*x24*x26*x27*x29*x30*x33*x34*x35*x39*x57*x58*x59*x60*x64*x71*x73*x74, x2*x3*x4*x6*x8*x11*x12*x13*x14*x18*x19*x22*x23*x24*x25*x26*x29*x30*x31*x32*x35*x38*x39*x41*x45*x47*x48*x49*x51*x54*x55*x56*x59*x61*x63*x65*x66*x68*x73*x74*x75*x77*x78*x80, x1*x4*x6*x7*x10*x12*x16*x17*x18*x19*x21*x23*x24*x25*x27*x31*x34*x35*x39*x45*x47*x48*x52*x59*x62*x63*x64*x65*x66*x67*x69*x73*x74*x77*x80, x1*x2*x4*x6*x7*x9*x10*x14*x15*x16*x17*x19*x20*x24*x28*x29*x30*x35*x38*x39*x40*x41*x45*x46*x47*x48*x49*x51*x52*x53*x56*x58*x60*x62*x63*x64*x69*x71*x72*x76, x4*x11*x13*x14*x16*x17*x18*x20*x21*x22*x24*x25*x26*x28*x29*x31*x32*x33*x34*x35*x38*x39*x40*x41*x43*x44*x45*x46*x48*x52*x56*x60*x61*x62*x63*x65*x67*x68*x69*x71*x74*x76*x79*x80, x2*x6*x9*x12*x13*x18*x19*x21*x25*x28*x31*x33*x34*x38*x41*x42*x45*x46*x49*x50*x51*x52*x53*x55*x58*x59*x61*x67*x69*x72*x74*x77, x1*x2*x3*x6*x7*x8*x11*x12*x13*x14*x15*x16*x17*x18*x20*x21*x22*x24*x25*x27*x28*x29*x30*x33*x35*x36*x37*x38*x40*x41*x43*x44*x45*x47*x48*x49*x50*x51*x52*x53*x58*x59*x60*x66*x67*x70*x71*x75*x76*x78*x79*x80, x5*x7*x9*x10*x12*x13*x14*x15*x16*x21*x26*x27*x32*x35*x36*x38*x43*x52*x57*x58*x64*x65*x67*x70*x71*x72*x75*x78*x79*x80, x3*x5*x6*x8*x9*x12*x13*x17*x19*x20*x22*x25*x26*x27*x28*x29*x30*x32*x35*x37*x38*x39*x47*x48*x50*x53*x56*x59*x67*x71*x72*x73*x75*x76*x77*x78*x80, x2*x3*x4*x6*x13*x15*x17*x18*x26*x27*x28*x29*x31*x35*x36*x37*x44*x47*x48*x51*x53*x57*x58*x63*x66*x72*x74*x75*x76*x77*x79*x80, x1*x4*x7*x8*x10*x11*x12*x17*x19*x21*x24*x25*x26*x32*x36*x39*x41*x42*x43*x44*x48*x51*x52*x55*x56*x57*x58*x61*x63*x66*x70*x71*x74*x75*x78, x1*x2*x3*x4*x8*x12*x13*x14*x16*x18*x20*x21*x23*x24*x27*x32*x34*x35*x37*x41*x43*x44*x45*x46*x49*x51*x52*x53*x54*x55*x57*x58*x59*x61*x62*x66*x69*x73*x75*x76*x77, x3*x5*x7*x9*x12*x13*x15*x16*x18*x23*x28*x30*x31*x33*x34*x35*x37*x38*x39*x41*x44*x45*x46*x47*x49*x50*x53*x54*x63*x65*x66*x68*x70*x71*x73*x76*x80, x2*x5*x7*x9*x11*x16*x17*x25*x27*x28*x30*x33*x36*x37*x38*x44*x46*x48*x49*x52*x53*x57*x58*x59*x60*x62*x64*x65*x67*x68*x70*x71*x73*x75*x77*x78, x1*x2*x3*x8*x11*x14*x17*x18*x19*x20*x22*x23*x27*x28*x30*x31*x32*x33*x34*x36*x40*x42*x43*x45*x46*x47*x48*x49*x50*x52*x53*x57*x58*x59*x70*x72*x73*x77*x78*x80, x1*x2*x5*x7*x8*x11*x14*x16*x19*x23*x24*x25*x26*x27*x28*x30*x33*x34*x38*x42*x45*x46*x53*x55*x56*x59*x60*x62*x63*x66*x67*x75*x78, x2*x3*x4*x5*x6*x7*x9*x11*x13*x17*x20*x27*x30*x32*x33*x34*x37*x41*x43*x47*x48*x51*x53*x56*x58*x59*x60*x62*x63*x64*x65*x66*x68*x70*x71*x72*x74*x75*x76*x77*x78*x79, x1*x5*x7*x9*x10*x12*x18*x20*x21*x22*x23*x24*x25*x28*x30*x31*x32*x33*x34*x36*x41*x42*x43*x44*x45*x49*x55*x58*x62*x64*x67*x69*x70*x75*x76*x78*x79, x1*x2*x3*x4*x5*x6*x8*x10*x14*x15*x18*x20*x23*x27*x28*x32*x34*x37*x39*x43*x45*x47*x48*x50*x53*x54*x57*x58*x59*x61*x63*x64*x66*x68*x70*x71*x74*x75*x78*x79, x2*x3*x5*x7*x15*x16*x17*x20*x21*x23*x26*x27*x28*x30*x32*x34*x36*x39*x40*x41*x43*x44*x45*x47*x48*x49*x50*x53*x54*x55*x56*x57*x59*x60*x62*x64*x68*x70*x71*x72*x73*x76*x77*x78, x1*x2*x5*x6*x7*x8*x10*x12*x14*x17*x18*x19*x21*x28*x29*x30*x31*x32*x37*x38*x39*x46*x48*x53*x55*x58*x60*x63*x65*x67*x68*x69*x71*x73*x76*x77*x80, x3*x5*x7*x9*x10*x11*x12*x14*x16*x17*x18*x19*x24*x29*x34*x35*x38*x48*x50*x52*x53*x54*x55*x60*x62*x67*x68*x69*x72*x77*x78*x79, x2*x3*x4*x8*x9*x11*x13*x18*x19*x20*x26*x28*x29*x31*x37*x38*x39*x41*x45*x46*x49*x51*x52*x53*x55*x56*x57*x58*x61*x63*x64*x65*x66*x67*x68*x71*x76*x77*x78*x79, x1*x5*x6*x7*x8*x9*x11*x14*x18*x19*x20*x22*x23*x24*x30*x31*x32*x37*x40*x42*x43*x44*x46*x47*x48*x49*x50*x53*x57*x58*x59*x61*x68*x70*x76*x77, x3*x5*x8*x10*x11*x14*x15*x16*x18*x19*x22*x23*x25*x26*x27*x28*x32*x34*x35*x36*x37*x42*x43*x45*x47*x48*x51*x53*x55*x58*x59*x60*x61*x62*x63*x65*x67*x69*x71*x73*x75*x76*x77*x78*x80, x2*x3*x4*x6*x7*x8*x10*x11*x12*x18*x19*x20*x21*x22*x24*x25*x28*x29*x31*x33*x34*x35*x36*x37*x39*x40*x42*x44*x48*x50*x51*x55*x56*x60*x61*x62*x63*x68*x69*x70*x72*x74*x77*x79, x1*x2*x5*x8*x9*x10*x11*x12*x14*x15*x16*x19*x21*x22*x25*x26*x29*x30*x31*x34*x35*x37*x38*x41*x44*x47*x50*x54*x55*x56*x57*x60*x63*x64*x65*x67*x69*x72*x73*x74*x75*x77*x80, x1*x2*x3*x4*x6*x7*x9*x13*x15*x17*x19*x21*x31*x33*x35*x37*x38*x39*x46*x47*x48*x49*x51*x52*x54*x56*x61*x63*x64*x66*x71*x73*x74*x75*x76, x5*x6*x7*x8*x9*x12*x15*x16*x17*x18*x20*x21*x23*x24*x26*x29*x30*x33*x37*x38*x39*x40*x41*x42*x46*x49*x50*x52*x54*x55*x56*x57*x59*x60*x61*x65*x68*x70*x72*x76*x77*x79*x80, x1*x4*x5*x6*x7*x8*x9*x10*x15*x16*x17*x18*x19*x22*x25*x27*x28*x30*x32*x34*x35*x36*x38*x39*x40*x43*x49*x50*x52*x59*x61*x64*x65*x67*x69*x70*x71*x72*x73*x76*x77*x78, x1*x6*x7*x13*x15*x16*x17*x18*x20*x27*x31*x33*x35*x38*x39*x40*x41*x42*x43*x46*x48*x49*x51*x52*x53*x56*x57*x61*x63*x66*x69*x71*x72*x73*x75*x76*x77*x79*x80, x2*x3*x6*x10*x11*x12*x13*x14*x16*x17*x19*x21*x23*x26*x27*x29*x31*x32*x35*x39*x42*x45*x46*x49*x50*x52*x58*x60*x61*x64*x67*x68*x70*x72*x73*x75*x76*x77*x78*x80, x3*x5*x6*x9*x11*x12*x17*x18*x20*x21*x22*x23*x24*x26*x27*x28*x33*x34*x38*x39*x44*x46*x47*x48*x50*x54*x55*x56*x57*x58*x60*x63*x64*x65*x67*x72*x73*x77*x80, x3*x4*x6*x8*x9*x12*x13*x14*x20*x22*x23*x26*x33*x34*x35*x38*x43*x45*x46*x48*x50*x52*x53*x54*x55*x56*x61*x64*x66*x67*x68*x73*x75*x76, x2*x5*x7*x9*x11*x12*x13*x14*x18*x21*x24*x26*x28*x31*x32*x33*x35*x36*x38*x39*x40*x41*x43*x44*x49*x50*x51*x53*x54*x55*x59*x60*x63*x65*x66*x68*x71*x72*x73*x77*x78, x3*x4*x5*x7*x8*x9*x10*x11*x12*x15*x16*x17*x19*x21*x22*x23*x33*x35*x36*x37*x38*x39*x40*x44*x45*x46*x47*x48*x49*x52*x53*x54*x55*x56*x58*x59*x60*x64*x65*x67*x69*x71*x72*x77*x80, x6*x7*x10*x12*x13*x14*x16*x18*x21*x24*x25*x30*x31*x32*x33*x34*x37*x38*x43*x44*x46*x47*x48*x49*x52*x55*x59*x61*x62*x65*x69*x71*x73*x76*x80, x2*x3*x4*x6*x8*x10*x14*x17*x19*x20*x22*x25*x28*x30*x31*x32*x33*x35*x37*x41*x49*x51*x57*x60*x61*x62*x63*x64*x65*x66*x68*x69*x70*x71*x72*x73*x74*x75*x76*x78*x79*x80, x1*x6*x10*x13*x17*x20*x21*x23*x24*x25*x26*x27*x28*x29*x31*x32*x33*x35*x36*x37*x43*x50*x52*x53*x55*x58*x59*x60*x61*x63*x65*x72*x75*x78*x79, x1*x2*x3*x7*x10*x12*x13*x16*x17*x18*x19*x20*x21*x23*x25*x26*x29*x30*x35*x36*x41*x43*x44*x45*x47*x49*x52*x53*x60*x66*x68*x70*x73*x75*x76*x77*x78*x79*x80, x2*x4*x6*x7*x9*x11*x12*x13*x14*x17*x21*x22*x24*x27*x28*x31*x33*x35*x40*x41*x42*x43*x45*x46*x47*x48*x49*x51*x53*x54*x56*x57*x58*x59*x61*x62*x63*x65*x69*x70*x71*x72*x74*x76*x77*x78*x79, x1*x2*x3*x4*x5*x8*x10*x12*x16*x20*x22*x27*x30*x31*x33*x34*x35*x36*x38*x39*x40*x41*x42*x47*x51*x53*x62*x63*x68*x69*x73*x75*x76, x4*x7*x8*x9*x12*x14*x15*x17*x18*x21*x23*x27*x34*x36*x37*x39*x40*x41*x42*x43*x44*x47*x50*x52*x53*x55*x58*x59*x64*x66*x67*x71*x72*x73*x74*x75*x78*x79, x1*x2*x3*x4*x5*x6*x8*x9*x10*x11*x13*x14*x16*x20*x22*x27*x28*x29*x33*x40*x43*x44*x49*x50*x51*x52*x55*x56*x57*x59*x60*x61*x64*x65*x66*x67*x68*x70*x72*x77*x78, x2*x3*x4*x5*x6*x7*x8*x10*x13*x19*x20*x22*x23*x24*x25*x26*x27*x28*x29*x30*x34*x35*x36*x37*x38*x39*x40*x44*x48*x49*x52*x54*x56*x57*x58*x60*x61*x64*x65*x67*x68*x69*x71*x73*x75*x80, x1*x2*x6*x9*x10*x15*x16*x18*x19*x20*x24*x28*x29*x30*x34*x36*x37*x39*x41*x43*x44*x45*x47*x48*x50*x52*x53*x55*x57*x59*x62*x63*x66*x69*x71*x72*x74*x75*x78*x80, x4*x5*x6*x7*x10*x13*x14*x17*x25*x27*x28*x29*x30*x32*x35*x41*x42*x43*x44*x45*x48*x49*x51*x57*x59*x60*x62*x63*x67*x70*x71*x72*x73*x75*x76, x1*x2*x3*x4*x6*x8*x9*x10*x11*x12*x15*x17*x18*x25*x26*x28*x29*x30*x31*x32*x34*x36*x37*x39*x40*x42*x44*x45*x51*x53*x55*x56*x62*x63*x66*x67*x71*x72*x73*x74*x75, x2*x3*x5*x8*x9*x12*x15*x16*x18*x20*x22*x23*x24*x27*x30*x31*x32*x35*x36*x37*x38*x39*x44*x45*x46*x48*x49*x54*x62*x64*x65*x66*x70*x72*x73*x74*x75*x77*x78*x79, x2*x3*x5*x6*x11*x14*x15*x16*x17*x18*x19*x27*x28*x32*x37*x38*x40*x41*x43*x45*x46*x47*x49*x50*x51*x52*x53*x56*x57*x58*x60*x62*x64*x67*x69*x70*x75*x77*x80, x2*x8*x9*x13*x14*x21*x22*x25*x37*x39*x40*x42*x43*x45*x46*x47*x48*x49*x50*x51*x54*x55*x57*x58*x60*x61*x63*x65*x67*x68*x69*x70*x72*x74*x76*x77*x80, x1*x3*x4*x5*x6*x7*x13*x15*x16*x17*x18*x20*x21*x22*x25*x26*x28*x30*x31*x33*x37*x38*x39*x40*x41*x43*x44*x45*x46*x49*x54*x55*x56*x57*x58*x61*x62*x64*x66*x67*x69*x70*x73*x74*x76*x79*x80, x2*x3*x4*x6*x7*x9*x10*x11*x12*x17*x18*x19*x23*x24*x25*x26*x30*x31*x32*x34*x36*x37*x38*x40*x41*x43*x44*x46*x47*x49*x54*x56*x57*x60*x65*x66*x68*x69*x73*x74*x76*x80, x5*x7*x9*x12*x13*x15*x16*x18*x19*x21*x26*x27*x28*x31*x32*x34*x35*x37*x38*x41*x46*x48*x51*x52*x53*x54*x55*x58*x60*x62*x65*x66*x67*x69*x71*x74*x76*x77, x1*x2*x5*x8*x9*x10*x11*x12*x17*x19*x21*x22*x23*x25*x27*x30*x34*x36*x47*x53*x54*x57*x61*x62*x63*x64*x66*x67*x69*x72*x73*x76*x77*x78*x80, x1*x9*x11*x12*x13*x14*x16*x18*x19*x20*x21*x23*x24*x25*x26*x28*x30*x31*x33*x35*x39*x41*x44*x46*x47*x50*x52*x55*x57*x60*x61*x62*x66*x70*x73*x77*x78*x79, x3*x5*x7*x10*x16*x20*x24*x25*x27*x28*x31*x33*x34*x38*x39*x40*x42*x45*x46*x52*x54*x55*x57*x60*x65*x66*x68*x69*x70*x73*x75*x76*x77*x78*x80, x2*x3*x4*x6*x8*x11*x13*x15*x17*x18*x20*x21*x24*x25*x27*x28*x31*x32*x34*x36*x37*x38*x41*x44*x45*x46*x47*x48*x50*x51*x52*x54*x57*x60*x62*x63*x66*x68*x75*x76*x79*x80, x1*x3*x5*x7*x8*x9*x13*x16*x18*x19*x20*x21*x22*x23*x25*x26*x27*x28*x30*x31*x34*x37*x43*x44*x46*x47*x49*x62*x63*x64*x70*x72*x75*x76*x77*x80, x1*x2*x3*x6*x7*x12*x15*x16*x18*x22*x23*x24*x26*x27*x28*x31*x36*x40*x43*x45*x46*x47*x49*x51*x52*x53*x56*x57*x61*x63*x64*x66*x67*x71*x80, x3*x7*x8*x9*x10*x11*x14*x15*x16*x17*x18*x19*x28*x32*x34*x35*x36*x42*x43*x44*x45*x46*x47*x48*x52*x54*x55*x56*x59*x61*x62*x68*x69*x71*x73*x74*x75*x77*x78*x79*x80, x2*x5*x7*x8*x10*x17*x21*x22*x28*x29*x30*x31*x32*x33*x35*x44*x46*x47*x49*x50*x51*x53*x55*x56*x60*x61*x62*x65*x70*x71*x74*x76*x77*x79, x1*x14*x15*x18*x19*x20*x21*x22*x25*x26*x27*x29*x30*x31*x33*x34*x35*x38*x41*x42*x43*x44*x45*x46*x49*x52*x54*x57*x58*x60*x61*x65*x67*x68*x69*x72*x73*x74*x76*x77, x2*x7*x8*x10*x11*x12*x13*x15*x17*x20*x22*x26*x27*x28*x29*x30*x32*x33*x34*x35*x37*x39*x40*x44*x46*x47*x49*x52*x53*x54*x55*x57*x60*x61*x62*x63*x66*x68*x69*x73*x75*x76*x77*x79, x1*x2*x3*x5*x6*x8*x10*x12*x14*x15*x16*x18*x20*x21*x23*x24*x25*x26*x27*x28*x30*x31*x32*x34*x38*x42*x44*x45*x48*x49*x51*x52*x55*x56*x62*x63*x64*x65*x66*x67*x68*x70*x72*x77*x79, x2*x4*x5*x7*x8*x11*x12*x14*x15*x17*x18*x19*x23*x26*x27*x28*x29*x30*x32*x33*x34*x36*x37*x38*x39*x41*x47*x48*x49*x50*x51*x53*x55*x56*x59*x60*x61*x67*x68*x71*x74*x76*x77*x78*x79, x2*x5*x6*x9*x10*x11*x13*x16*x18*x19*x20*x22*x23*x24*x29*x30*x31*x32*x33*x35*x37*x38*x41*x44*x48*x49*x54*x56*x57*x59*x60*x65*x66*x68*x71*x72*x76*x77, x2*x3*x4*x5*x6*x8*x9*x11*x12*x15*x20*x21*x23*x24*x26*x27*x28*x30*x31*x32*x34*x35*x39*x42*x44*x45*x46*x47*x48*x53*x56*x57*x60*x64*x71*x72*x73*x74*x77*x78, x1*x2*x6*x9*x10*x11*x14*x15*x18*x19*x20*x22*x23*x24*x25*x26*x27*x31*x35*x36*x38*x40*x41*x44*x45*x46*x47*x52*x54*x55*x56*x59*x60*x62*x64*x65*x67*x69*x73*x76*x77*x79, x2*x3*x6*x8*x10*x11*x14*x15*x16*x17*x18*x20*x22*x23*x31*x34*x36*x39*x43*x44*x46*x47*x48*x49*x50*x53*x54*x55*x57*x61*x62*x64*x65*x68*x71*x73*x74*x75*x76*x78*x80, x1*x2*x3*x4*x5*x7*x9*x11*x14*x15*x16*x17*x19*x22*x23*x26*x27*x30*x34*x35*x36*x39*x42*x46*x47*x49*x50*x51*x52*x54*x55*x56*x57*x58*x65*x66*x69*x70*x73*x74*x75*x76*x77*x79*x80, x2*x3*x4*x5*x10*x11*x13*x16*x19*x20*x22*x23*x26*x27*x28*x29*x34*x37*x38*x39*x40*x42*x46*x48*x49*x50*x59*x60*x64*x65*x66*x67*x69*x71*x72*x74*x79, x1*x3*x4*x5*x7*x8*x10*x13*x15*x17*x20*x23*x24*x26*x30*x32*x34*x36*x42*x43*x44*x46*x47*x48*x52*x53*x55*x57*x58*x61*x62*x64*x68*x71*x73*x76*x77*x78*x80, x3*x8*x9*x17*x19*x20*x26*x27*x31*x34*x35*x36*x37*x39*x40*x41*x46*x47*x52*x56*x57*x59*x62*x63*x67*x68*x69*x70*x71*x72*x74*x75*x77*x80, x1*x2*x4*x5*x8*x9*x12*x13*x14*x15*x17*x19*x21*x22*x24*x27*x29*x31*x32*x33*x34*x35*x37*x41*x42*x46*x48*x51*x54*x56*x58*x59*x60*x65*x69*x70*x72*x73*x74*x78*x79*x80, x1*x2*x5*x7*x9*x10*x13*x15*x17*x20*x24*x25*x27*x28*x29*x33*x34*x36*x38*x39*x41*x46*x47*x48*x49*x50*x51*x52*x53*x55*x57*x59*x62*x64*x65*x66*x70*x71*x72*x73*x77*x78*x80, x2*x3*x5*x6*x8*x9*x11*x13*x14*x16*x17*x18*x22*x24*x26*x27*x29*x30*x31*x32*x33*x34*x35*x36*x41*x42*x45*x46*x47*x48*x49*x51*x56*x57*x59*x62*x63*x67*x68*x69*x70*x72*x78*x80, x3*x7*x9*x11*x13*x17*x20*x22*x28*x29*x30*x33*x35*x37*x38*x40*x43*x47*x49*x50*x51*x53*x56*x57*x58*x61*x62*x64*x66*x67*x70*x71*x72*x73*x74*x77*x78, x6*x10*x11*x12*x13*x16*x17*x19*x20*x21*x22*x23*x30*x32*x33*x35*x37*x42*x44*x48*x51*x52*x53*x55*x57*x59*x60*x61*x64*x66*x67*x73*x74*x78*x79, x3*x5*x6*x7*x8*x9*x15*x16*x17*x18*x20*x25*x29*x30*x31*x32*x33*x34*x35*x36*x37*x39*x40*x45*x46*x47*x48*x51*x53*x54*x57*x59*x60*x61*x63*x64*x65*x67*x71*x76*x77*x78*x80, x1*x4*x5*x8*x9*x10*x11*x12*x14*x16*x17*x18*x22*x23*x24*x26*x28*x32*x34*x35*x36*x37*x40*x42*x43*x45*x46*x47*x50*x51*x54*x55*x56*x57*x58*x59*x62*x65*x67*x68*x71*x77*x78*x79, x9*x12*x13*x15*x16*x17*x19*x20*x23*x25*x26*x27*x28*x29*x32*x34*x35*x38*x39*x40*x41*x42*x44*x46*x52*x53*x56*x59*x60*x66*x67*x68*x69*x70*x71*x75*x76*x79, x1*x2*x3*x4*x8*x9*x12*x13*x14*x16*x18*x21*x22*x26*x27*x28*x30*x31*x33*x35*x38*x42*x43*x45*x47*x49*x53*x54*x55*x56*x58*x59*x62*x63*x64*x65*x76*x78*x79*x80, x1*x2*x3*x4*x5*x6*x10*x11*x12*x13*x15*x16*x17*x27*x29*x30*x34*x36*x38*x40*x42*x48*x50*x52*x53*x56*x57*x61*x64*x65*x66*x67*x69*x70*x71*x73*x75*x76*x77*x78, x2*x5*x7*x9*x13*x15*x16*x19*x21*x23*x24*x25*x27*x31*x37*x38*x40*x43*x45*x49*x52*x53*x54*x58*x59*x61*x62*x65*x70*x73*x76*x78*x79*x80, x3*x6*x7*x9*x10*x11*x12*x13*x14*x16*x17*x18*x21*x22*x23*x25*x29*x31*x32*x34*x37*x38*x40*x42*x43*x45*x49*x50*x55*x63*x67*x69*x70*x71*x72*x74*x75*x77*x80, x3*x4*x5*x6*x8*x10*x11*x13*x15*x17*x18*x20*x21*x24*x25*x29*x32*x34*x35*x36*x38*x43*x44*x48*x50*x51*x52*x55*x56*x59*x60*x61*x62*x63*x64*x65*x68*x69*x73*x74*x75*x76*x77*x78*x80, x1*x2*x3*x6*x7*x8*x9*x10*x12*x14*x15*x16*x17*x19*x20*x22*x24*x26*x27*x28*x31*x33*x35*x36*x37*x38*x41*x42*x45*x46*x48*x50*x52*x53*x55*x56*x59*x61*x63*x64*x66*x68*x72*x73*x75*x77*x78*x80, x2*x5*x10*x14*x15*x16*x17*x19*x20*x21*x22*x23*x24*x25*x28*x33*x38*x40*x42*x44*x45*x47*x48*x50*x53*x55*x56*x59*x60*x61*x62*x63*x64*x65*x66*x68*x71*x74*x75*x76*x77*x78*x80, x9*x10*x13*x14*x15*x16*x18*x19*x21*x23*x27*x28*x29*x31*x32*x42*x45*x46*x47*x53*x54*x56*x58*x59*x64*x66*x69*x72*x74*x75*x76*x77*x80, x2*x5*x8*x9*x10*x11*x16*x17*x18*x19*x20*x22*x24*x27*x32*x34*x35*x37*x43*x44*x45*x49*x50*x53*x54*x57*x59*x60*x61*x62*x63*x65*x66*x69*x71*x72*x73*x74*x75*x76*x77*x79*x80, x1*x10*x17*x18*x20*x22*x23*x25*x26*x27*x28*x31*x33*x34*x35*x36*x39*x40*x45*x46*x47*x48*x49*x50*x51*x52*x54*x57*x60*x63*x65*x66*x67*x69*x73*x78, x1*x2*x3*x4*x5*x6*x8*x9*x10*x13*x16*x17*x19*x20*x21*x23*x25*x28*x31*x32*x33*x34*x35*x38*x39*x40*x41*x42*x43*x44*x46*x47*x49*x50*x55*x56*x58*x60*x71*x73*x75*x76*x77*x79*x80, x1*x2*x3*x4*x5*x6*x7*x10*x11*x16*x18*x21*x23*x29*x30*x31*x32*x33*x36*x38*x43*x46*x47*x48*x49*x50*x51*x53*x58*x59*x64*x67*x70*x72*x73*x74*x79*x80, x3*x4*x6*x7*x8*x11*x12*x13*x14*x16*x17*x20*x22*x23*x24*x25*x26*x27*x28*x29*x31*x34*x37*x40*x41*x42*x43*x44*x45*x47*x48*x53*x58*x60*x61*x63*x69*x70*x71*x72*x73*x75*x76*x77*x78*x79*x80, x1*x2*x5*x7*x10*x11*x13*x16*x17*x20*x21*x22*x25*x27*x28*x30*x31*x34*x36*x38*x40*x41*x45*x47*x48*x49*x50*x51*x52*x53*x56*x57*x58*x60*x61*x62*x63*x67*x68*x70*x73*x74*x77, x1*x3*x4*x5*x6*x7*x12*x14*x15*x16*x18*x19*x21*x22*x23*x24*x25*x34*x35*x39*x41*x45*x50*x54*x66*x70*x73*x77*x79, x2*x3*x5*x6*x7*x9*x10*x11*x14*x18*x19*x21*x22*x23*x26*x34*x35*x36*x37*x38*x39*x42*x45*x47*x48*x50*x51*x52*x53*x55*x56*x57*x59*x60*x61*x63*x64*x65*x68*x69*x71*x72*x73*x75*x76*x78*x79, x6*x7*x10*x11*x13*x14*x21*x22*x23*x28*x32*x34*x37*x40*x42*x44*x45*x46*x47*x49*x50*x51*x54*x56*x57*x58*x59*x61*x62*x63*x64*x66*x67*x70*x71*x74*x75*x77*x80, x1*x2*x4*x9*x10*x13*x15*x17*x19*x20*x22*x23*x24*x25*x29*x30*x31*x32*x33*x34*x40*x41*x46*x52*x56*x60*x64*x65*x66*x68*x69*x70*x71*x73*x74*x75*x77*x78*x80, x1*x2*x5*x6*x7*x10*x11*x14*x16*x17*x19*x20*x21*x23*x24*x27*x29*x30*x32*x35*x36*x40*x45*x46*x47*x52*x57*x61*x64*x67*x70*x72*x74*x76*x78*x80, x1*x4*x5*x6*x7*x8*x10*x11*x13*x15*x16*x17*x18*x20*x21*x23*x24*x25*x27*x28*x31*x33*x36*x37*x40*x43*x48*x51*x52*x53*x54*x55*x59*x60*x64*x67*x69*x70*x71*x72*x73*x74*x76*x80, x1*x2*x3*x4*x5*x10*x12*x14*x16*x17*x19*x20*x21*x22*x25*x26*x29*x31*x32*x34*x35*x37*x38*x39*x40*x41*x45*x46*x48*x49*x54*x55*x57*x58*x59*x60*x61*x62*x66*x68*x69*x71*x72*x73*x74, x1*x5*x7*x10*x15*x18*x19*x20*x21*x22*x25*x26*x27*x28*x31*x34*x35*x40*x41*x42*x44*x45*x49*x50*x51*x53*x55*x56*x58*x60*x64*x65*x68*x69*x70*x73*x74*x77, x5*x6*x7*x9*x10*x14*x15*x19*x20*x21*x24*x30*x33*x34*x35*x37*x40*x44*x45*x47*x50*x52*x54*x56*x63*x65*x66*x71*x74*x76*x77*x78*x80, x1*x5*x7*x8*x9*x10*x12*x13*x16*x18*x19*x20*x21*x22*x28*x30*x31*x32*x37*x38*x39*x40*x42*x44*x45*x46*x47*x49*x50*x51*x54*x57*x59*x62*x63*x64*x66*x71*x72*x73*x77*x78*x80, x1*x6*x9*x11*x14*x15*x18*x19*x21*x27*x30*x31*x33*x34*x35*x36*x38*x41*x44*x48*x50*x52*x54*x55*x59*x61*x63*x64*x67*x68*x69*x71*x73*x74*x76*x77*x78, x1*x2*x3*x4*x5*x7*x8*x11*x13*x14*x15*x16*x17*x18*x19*x28*x31*x32*x33*x34*x35*x36*x37*x38*x39*x41*x43*x47*x49*x50*x53*x54*x56*x60*x61*x63*x64*x66*x68*x71*x72*x74*x75*x76*x77*x78, x2*x7*x8*x9*x10*x11*x12*x16*x17*x18*x22*x24*x26*x27*x28*x29*x31*x32*x36*x38*x40*x45*x47*x48*x51*x53*x57*x62*x65*x66*x67*x68*x69*x70*x71*x72*x75, x1*x2*x3*x4*x6*x8*x9*x12*x14*x15*x16*x19*x21*x23*x24*x25*x26*x29*x30*x32*x33*x37*x39*x44*x47*x50*x53*x54*x55*x56*x57*x58*x59*x60*x61*x64*x65*x66*x69*x73*x75*x76*x77*x79*x80, x1*x2*x3*x5*x7*x9*x10*x11*x12*x13*x15*x16*x17*x18*x19*x20*x26*x31*x32*x35*x36*x37*x38*x39*x40*x43*x46*x47*x50*x52*x54*x56*x61*x63*x65*x66*x68*x69*x70*x72*x76*x77*x79, x1*x2*x6*x7*x8*x10*x12*x16*x17*x20*x25*x26*x28*x29*x30*x32*x33*x36*x37*x39*x40*x41*x42*x43*x44*x45*x49*x53*x54*x55*x59*x61*x64*x67*x69*x76*x77*x78*x80, x7*x8*x9*x10*x11*x12*x19*x20*x28*x29*x31*x32*x36*x37*x39*x40*x42*x44*x46*x48*x49*x50*x51*x57*x58*x59*x62*x65*x68*x70*x71*x73*x75*x77*x78, x1*x3*x9*x11*x13*x14*x15*x16*x17*x19*x21*x25*x26*x33*x35*x36*x37*x38*x39*x42*x43*x45*x49*x50*x52*x54*x55*x61*x63*x65*x67*x68*x69*x70*x72*x74*x76*x77, x1*x2*x8*x11*x12*x15*x17*x18*x19*x22*x26*x29*x30*x31*x33*x38*x40*x41*x44*x46*x47*x48*x49*x53*x54*x55*x56*x57*x59*x60*x63*x64*x66*x67*x72*x75*x77*x78*x79, x3*x4*x6*x7*x9*x10*x12*x13*x15*x16*x17*x19*x20*x21*x23*x24*x27*x28*x29*x31*x32*x34*x35*x36*x37*x38*x39*x41*x42*x43*x45*x46*x47*x49*x52*x53*x54*x55*x56*x59*x60*x62*x63*x67*x71*x73*x74*x75*x76*x79, x2*x4*x6*x8*x9*x10*x12*x13*x15*x21*x24*x25*x27*x29*x31*x32*x34*x35*x37*x38*x44*x46*x47*x51*x55*x60*x61*x62*x68*x69*x70*x74*x75*x77*x78*x80, x3*x4*x5*x6*x7*x8*x9*x13*x14*x15*x16*x18*x19*x20*x26*x27*x28*x30*x31*x32*x34*x35*x36*x37*x40*x41*x42*x45*x50*x51*x54*x56*x60*x62*x63*x64*x65*x69*x71*x72*x75*x79*x80, x1*x4*x7*x8*x13*x14*x15*x16*x17*x18*x19*x20*x22*x24*x26*x28*x29*x30*x31*x33*x34*x36*x38*x39*x40*x45*x46*x47*x49*x53*x54*x55*x56*x57*x60*x62*x63*x66*x69*x71*x74*x77*x79, x2*x4*x7*x8*x9*x10*x13*x15*x17*x18*x20*x25*x28*x29*x30*x31*x32*x33*x34*x35*x41*x42*x43*x45*x47*x49*x51*x53*x55*x57*x59*x60*x62*x71*x74*x75*x79, x4*x6*x7*x8*x11*x15*x16*x18*x19*x21*x22*x23*x24*x25*x27*x29*x30*x37*x39*x41*x43*x46*x47*x48*x51*x53*x56*x57*x61*x62*x63*x64*x66*x67*x73*x74*x75*x76*x77*x79*x80, x2*x4*x7*x8*x11*x12*x15*x16*x18*x19*x20*x21*x22*x25*x26*x28*x29*x32*x34*x36*x38*x39*x40*x41*x42*x43*x44*x45*x46*x47*x52*x54*x56*x57*x58*x60*x62*x63*x64*x66*x69*x70*x72*x77*x78*x79*x80, x2*x5*x7*x9*x10*x11*x13*x16*x17*x20*x22*x23*x25*x30*x33*x35*x37*x38*x39*x40*x41*x44*x47*x49*x51*x52*x54*x55*x58*x59*x60*x62*x64*x66*x67*x69*x73*x75*x79*x80, x3*x5*x7*x9*x12*x15*x16*x17*x24*x26*x28*x29*x30*x31*x32*x33*x34*x37*x40*x43*x45*x46*x47*x50*x52*x54*x58*x60*x62*x63*x64*x66*x68*x71*x72*x73*x74*x75, x2*x5*x9*x12*x19*x22*x24*x26*x28*x30*x31*x35*x38*x40*x43*x44*x45*x46*x47*x48*x51*x54*x63*x65*x67*x69*x71*x72*x73*x75*x76*x78, x2*x3*x5*x7*x8*x11*x12*x18*x28*x30*x33*x34*x39*x40*x41*x42*x46*x49*x53*x54*x58*x59*x60*x63*x64*x65*x66*x67*x68*x70*x73*x74*x76*x79, x2*x3*x4*x5*x6*x7*x10*x11*x12*x13*x14*x15*x20*x21*x22*x23*x24*x27*x29*x32*x33*x35*x37*x39*x41*x42*x47*x49*x53*x56*x57*x59*x63*x64*x66*x70*x71*x72*x75*x77, x2*x3*x4*x6*x7*x8*x10*x11*x12*x13*x16*x18*x19*x24*x25*x26*x28*x29*x31*x33*x34*x35*x36*x37*x41*x42*x43*x44*x45*x46*x48*x50*x51*x54*x55*x58*x60*x61*x62*x64*x68*x70*x71*x80, x1*x3*x5*x8*x10*x11*x12*x16*x17*x18*x21*x24*x27*x28*x29*x30*x31*x33*x34*x36*x37*x39*x42*x45*x47*x48*x50*x51*x53*x54*x56*x57*x59*x61*x62*x63*x66*x68*x70*x74*x75*x79, x1*x5*x6*x7*x8*x9*x10*x11*x14*x19*x20*x22*x23*x25*x26*x27*x29*x31*x33*x34*x36*x37*x39*x40*x41*x42*x47*x50*x52*x53*x56*x57*x61*x65*x68*x71*x72*x73*x75*x79, x1*x2*x4*x5*x11*x12*x13*x14*x16*x21*x22*x23*x25*x29*x31*x33*x35*x38*x40*x41*x42*x43*x44*x47*x48*x52*x54*x55*x58*x61*x64*x65*x67*x68*x69*x72*x73*x74*x77*x78*x79*x80, x2*x3*x5*x7*x8*x9*x15*x17*x18*x23*x25*x27*x28*x30*x32*x35*x38*x39*x40*x41*x42*x44*x46*x47*x49*x54*x55*x57*x58*x59*x63*x64*x65*x66*x68*x72*x73*x74*x75*x76*x77, x2*x3*x4*x9*x14*x15*x18*x20*x23*x24*x28*x29*x33*x38*x39*x40*x41*x43*x44*x47*x49*x52*x53*x55*x57*x59*x60*x64*x65*x66*x67*x73*x74*x76*x77*x79*x80, x2*x3*x5*x8*x10*x12*x13*x15*x17*x18*x19*x20*x21*x23*x24*x25*x27*x28*x29*x31*x34*x36*x39*x40*x42*x43*x44*x46*x50*x51*x52*x55*x56*x57*x61*x62*x63*x64*x67*x69*x70*x72*x73*x75*x78, x2*x3*x4*x5*x12*x18*x20*x24*x25*x30*x31*x32*x33*x34*x35*x36*x37*x38*x39*x41*x44*x46*x47*x48*x51*x54*x55*x58*x59*x61*x62*x65*x66*x68*x72*x74*x75*x76*x77*x80, x2*x3*x4*x7*x9*x12*x13*x14*x16*x17*x19*x23*x25*x28*x29*x35*x37*x43*x45*x46*x47*x49*x51*x53*x54*x55*x57*x58*x60*x61*x69*x70*x78*x79, x1*x4*x6*x7*x8*x9*x13*x15*x17*x18*x21*x22*x25*x26*x27*x28*x30*x32*x33*x35*x36*x42*x45*x51*x52*x54*x55*x56*x58*x59*x60*x62*x67*x69*x70*x71*x72*x74*x80, x1*x3*x4*x6*x8*x9*x10*x11*x20*x21*x22*x23*x24*x31*x34*x36*x37*x39*x41*x42*x43*x45*x46*x47*x49*x50*x53*x54*x55*x56*x59*x62*x63*x64*x67*x69*x70*x73*x74*x75*x76*x77*x78, x1*x4*x5*x6*x8*x11*x12*x14*x18*x19*x20*x21*x24*x25*x27*x30*x34*x35*x37*x40*x42*x44*x48*x50*x51*x52*x53*x54*x56*x58*x60*x61*x62*x63*x64*x65*x66*x67*x71*x72*x74*x76*x77*x78, x2*x3*x6*x10*x13*x15*x20*x22*x25*x26*x27*x29*x30*x33*x34*x36*x40*x41*x44*x46*x49*x50*x52*x54*x59*x60*x62*x63*x65*x67*x74*x76*x78, x1*x6*x9*x12*x13*x14*x16*x18*x19*x20*x22*x23*x24*x25*x27*x31*x32*x33*x34*x37*x38*x39*x40*x43*x47*x51*x52*x53*x55*x57*x58*x59*x61*x63*x65*x66*x68*x69*x70*x71*x72*x74*x78*x80, x1*x3*x5*x11*x12*x13*x16*x23*x27*x29*x30*x32*x33*x44*x46*x47*x50*x51*x53*x54*x58*x59*x67*x69*x70*x73*x76*x79*x80, x3*x4*x5*x6*x7*x8*x10*x11*x14*x15*x16*x19*x28*x29*x35*x37*x42*x43*x52*x54*x55*x56*x57*x58*x59*x60*x61*x63*x64*x65*x66*x68*x72*x73*x74*x75*x77*x79*x80, x1*x3*x5*x7*x8*x9*x15*x16*x17*x18*x19*x23*x24*x28*x30*x31*x33*x36*x38*x41*x42*x43*x45*x46*x50*x51*x56*x57*x59*x63*x64*x65*x66*x68*x70*x71*x72*x74*x77*x79, x5*x6*x11*x13*x15*x19*x20*x21*x24*x25*x26*x27*x28*x29*x30*x32*x36*x37*x40*x43*x47*x50*x54*x58*x59*x61*x62*x64*x68*x70*x71*x77*x78, x1*x2*x3*x6*x9*x10*x12*x17*x19*x20*x21*x24*x25*x29*x32*x33*x34*x37*x38*x39*x42*x44*x49*x53*x54*x55*x61*x67*x69*x71*x72*x76*x77*x79, x1*x4*x5*x6*x7*x8*x11*x13*x17*x18*x19*x21*x23*x24*x28*x35*x36*x38*x39*x40*x41*x43*x46*x48*x49*x50*x52*x53*x54*x57*x62*x64*x66*x69*x71*x72*x73*x75*x78*x79, x1*x2*x4*x6*x11*x12*x14*x16*x17*x18*x19*x20*x21*x24*x25*x29*x30*x32*x33*x35*x37*x39*x42*x44*x46*x47*x50*x51*x52*x54*x55*x56*x61*x66*x67*x68*x69*x70*x71*x75*x77, x3*x4*x6*x11*x12*x14*x15*x17*x18*x20*x22*x26*x27*x28*x30*x33*x34*x35*x36*x38*x39*x42*x43*x45*x46*x47*x50*x51*x52*x54*x56*x57*x58*x60*x62*x64*x65*x66*x71*x73*x74*x75*x76*x79*x80, x2*x6*x7*x10*x16*x17*x20*x21*x25*x26*x27*x30*x31*x34*x35*x37*x39*x40*x41*x42*x44*x45*x47*x50*x51*x52*x54*x61*x65*x67*x68*x70*x75*x76, x1*x2*x4*x5*x12*x13*x14*x16*x17*x18*x21*x23*x25*x29*x31*x32*x34*x35*x36*x38*x39*x40*x41*x42*x44*x45*x49*x50*x51*x52*x53*x54*x55*x59*x61*x62*x65*x69*x76*x77*x78*x80, x2*x3*x4*x5*x6*x7*x8*x9*x10*x12*x14*x16*x20*x21*x22*x24*x25*x28*x30*x31*x32*x33*x35*x36*x37*x38*x39*x42*x43*x48*x49*x50*x51*x52*x57*x58*x60*x65*x66*x67*x70*x71*x73*x75*x77*x78*x80, x1*x2*x3*x5*x9*x10*x11*x13*x14*x19*x21*x22*x23*x26*x29*x30*x31*x35*x36*x38*x41*x45*x46*x47*x48*x49*x51*x54*x57*x60*x62*x63*x66*x67*x68*x69*x74*x75*x76*x79*x80, x2*x3*x4*x5*x8*x9*x11*x12*x13*x14*x15*x16*x18*x19*x23*x25*x26*x28*x32*x34*x35*x37*x38*x42*x45*x48*x52*x53*x55*x56*x57*x58*x59*x60*x62*x66*x67*x69*x70*x71*x74*x76*x77*x80, x4*x5*x11*x12*x14*x16*x17*x18*x20*x23*x26*x28*x29*x30*x32*x36*x37*x40*x44*x48*x52*x53*x55*x56*x58*x61*x63*x65*x66*x69*x70*x74*x75*x76*x77*x79, x2*x3*x4*x5*x8*x10*x11*x15*x16*x18*x19*x22*x23*x24*x25*x26*x28*x30*x31*x32*x33*x36*x37*x39*x41*x48*x50*x52*x55*x58*x61*x64*x65*x68*x70*x73*x77*x78*x79*x80, x1*x2*x3*x4*x5*x8*x10*x11*x12*x13*x16*x17*x18*x19*x20*x22*x23*x27*x28*x30*x32*x33*x34*x35*x36*x37*x40*x41*x43*x46*x48*x49*x50*x52*x55*x56*x57*x58*x64*x65*x66*x74*x76*x78*x79, x1*x2*x11*x12*x13*x18*x23*x27*x28*x29*x30*x31*x33*x34*x36*x39*x40*x43*x44*x45*x46*x48*x49*x50*x53*x55*x56*x62*x65*x67*x70*x71*x72*x73*x74*x75*x76*x77*x79*x80, x4*x5*x6*x7*x8*x10*x14*x18*x21*x22*x23*x24*x25*x27*x29*x32*x34*x36*x38*x40*x41*x43*x44*x45*x48*x51*x53*x54*x56*x59*x60*x61*x62*x65*x67*x68*x69*x71*x73*x74*x75*x77*x78*x79, x1*x2*x6*x9*x12*x13*x15*x16*x18*x19*x20*x21*x22*x23*x24*x26*x28*x30*x32*x33*x35*x37*x38*x39*x40*x42*x43*x44*x47*x49*x50*x51*x52*x53*x55*x56*x57*x59*x60*x61*x62*x65*x66*x69*x72*x73*x76*x77*x78*x79*x80, x1*x2*x3*x7*x9*x11*x14*x15*x20*x21*x22*x25*x29*x30*x33*x35*x36*x37*x39*x41*x43*x45*x48*x49*x51*x52*x53*x55*x58*x59*x63*x65*x66*x72*x74*x75*x76*x80, x1*x3*x5*x8*x11*x14*x18*x19*x20*x22*x23*x24*x26*x27*x28*x29*x31*x32*x34*x35*x39*x42*x45*x46*x47*x49*x50*x53*x56*x60*x61*x62*x63*x65*x66*x68*x70*x72*x74*x75*x76*x80, x4*x6*x7*x8*x10*x11*x13*x15*x16*x17*x18*x21*x22*x23*x24*x26*x29*x32*x33*x34*x36*x37*x42*x44*x45*x48*x51*x52*x53*x56*x58*x62*x63*x64*x67*x68*x71*x72*x73*x75*x76*x78*x79, x1*x2*x3*x5*x7*x8*x9*x11*x12*x13*x15*x16*x18*x19*x21*x22*x25*x26*x27*x28*x29*x30*x31*x37*x38*x40*x42*x44*x48*x51*x57*x59*x60*x61*x62*x66*x67*x68*x70*x72*x74*x78*x79, x1*x2*x3*x4*x5*x6*x9*x10*x11*x14*x18*x22*x23*x30*x31*x32*x41*x42*x44*x48*x49*x50*x51*x52*x55*x56*x58*x59*x63*x64*x68*x69*x70*x74*x78, x1*x3*x7*x8*x9*x10*x14*x18*x26*x27*x28*x29*x30*x31*x33*x35*x36*x38*x39*x40*x41*x45*x46*x47*x48*x50*x51*x52*x53*x55*x58*x59*x60*x61*x63*x65*x67*x69*x71*x73*x74*x78*x79*x80, x1*x2*x4*x5*x7*x8*x12*x13*x14*x19*x22*x23*x24*x28*x29*x32*x33*x36*x37*x38*x39*x42*x44*x45*x46*x47*x51*x53*x54*x55*x56*x57*x62*x63*x64*x65*x66*x69*x72*x73*x78*x79, x5*x8*x9*x13*x14*x15*x16*x19*x21*x22*x25*x29*x31*x33*x39*x41*x44*x45*x47*x51*x53*x55*x56*x59*x60*x63*x64*x69*x70*x71*x72*x76*x78*x79*x80, x2*x3*x8*x11*x12*x14*x15*x16*x18*x21*x22*x24*x25*x27*x28*x29*x34*x35*x36*x38*x39*x40*x41*x43*x44*x47*x48*x49*x50*x51*x52*x55*x57*x61*x63*x64*x65*x67*x70*x71*x73*x76*x77*x78*x80, x5*x6*x7*x8*x9*x10*x11*x14*x15*x20*x21*x22*x23*x24*x25*x26*x27*x29*x34*x35*x36*x37*x39*x40*x41*x48*x50*x51*x53*x54*x58*x59*x61*x62*x63*x64*x65*x66*x67*x68*x69*x71*x73*x80, x3*x5*x8*x9*x10*x13*x19*x20*x21*x22*x23*x25*x27*x28*x29*x32*x37*x38*x39*x40*x41*x44*x45*x46*x48*x50*x51*x52*x61*x62*x63*x64*x65*x66*x67*x73*x76*x78, x1*x2*x3*x5*x10*x12*x13*x14*x15*x22*x24*x29*x30*x31*x33*x34*x36*x37*x39*x41*x44*x46*x49*x52*x53*x58*x63*x65*x68*x69*x70*x72*x73*x76*x80, x2*x3*x4*x5*x7*x9*x10*x11*x14*x17*x18*x21*x23*x26*x28*x29*x30*x32*x33*x34*x40*x47*x48*x50*x52*x53*x55*x58*x65*x66*x67*x68*x69*x70*x71*x72*x74*x77*x80, x1*x3*x5*x6*x8*x9*x10*x12*x14*x15*x16*x18*x19*x22*x24*x28*x29*x30*x33*x38*x40*x41*x42*x43*x45*x47*x49*x50*x51*x52*x57*x61*x62*x63*x64*x68*x70*x72*x73*x74*x75*x76*x77*x78, x1*x3*x7*x10*x11*x14*x15*x17*x18*x19*x22*x23*x24*x25*x28*x32*x33*x34*x36*x37*x38*x39*x42*x48*x49*x52*x54*x55*x58*x59*x61*x63*x64*x65*x66*x71*x74*x75*x77*x79, x3*x5*x8*x11*x13*x15*x16*x21*x24*x27*x29*x31*x34*x36*x39*x40*x41*x42*x43*x44*x47*x48*x51*x55*x56*x57*x59*x61*x62*x64*x68*x69*x71*x72*x73*x77*x78*x79, x1*x4*x8*x9*x11*x12*x14*x15*x16*x17*x18*x21*x23*x24*x25*x29*x34*x36*x37*x38*x39*x41*x47*x48*x49*x51*x54*x55*x56*x60*x61*x62*x67*x69*x70*x77, x2*x3*x4*x7*x9*x11*x12*x14*x15*x17*x19*x22*x23*x24*x25*x26*x27*x28*x31*x32*x33*x34*x36*x41*x49*x52*x54*x55*x59*x62*x67*x68*x69*x70*x71*x72*x73*x74*x75*x76*x78*x79, x1*x5*x9*x10*x14*x15*x16*x20*x21*x22*x24*x30*x32*x33*x38*x39*x43*x44*x51*x53*x54*x56*x59*x61*x65*x67*x70*x72*x73*x74*x75*x76, x5*x9*x10*x17*x19*x26*x28*x33*x35*x36*x38*x40*x42*x45*x46*x48*x53*x56*x57*x60*x61*x64*x67*x71*x73*x74*x76*x78*x79, x1*x2*x4*x7*x10*x12*x17*x18*x19*x20*x21*x22*x23*x24*x27*x29*x31*x34*x36*x38*x40*x41*x42*x43*x46*x47*x48*x51*x52*x54*x55*x56*x58*x59*x62*x63*x66*x69*x71*x72*x75*x76*x80, x1*x6*x7*x8*x11*x14*x15*x16*x18*x21*x22*x23*x24*x27*x28*x32*x33*x35*x38*x39*x40*x42*x45*x51*x53*x54*x56*x57*x58*x61*x62*x63*x71*x74*x75*x78*x80, x1*x2*x5*x6*x7*x9*x10*x12*x15*x16*x18*x19*x21*x23*x24*x26*x31*x37*x38*x40*x41*x42*x43*x48*x51*x52*x53*x54*x56*x57*x59*x60*x62*x63*x64*x69*x72*x73*x75*x80, x1*x7*x8*x10*x14*x15*x17*x20*x23*x27*x28*x31*x33*x35*x41*x42*x43*x45*x46*x47*x49*x50*x52*x55*x58*x60*x61*x62*x65*x67*x70*x72*x74*x75*x76*x77*x78, x1*x2*x5*x8*x9*x11*x12*x13*x14*x15*x16*x17*x20*x26*x27*x28*x29*x30*x32*x33*x38*x39*x43*x45*x46*x47*x48*x50*x51*x52*x53*x57*x60*x62*x63*x67*x69*x70*x74*x75, x1*x6*x7*x12*x14*x16*x17*x21*x22*x23*x26*x28*x30*x32*x33*x36*x37*x39*x40*x43*x44*x47*x52*x54*x59*x61*x63*x64*x65*x66*x67*x69*x70*x72*x73*x74*x75*x78*x79, x7*x9*x10*x13*x14*x18*x20*x21*x22*x23*x24*x25*x28*x31*x33*x34*x35*x40*x41*x43*x44*x45*x46*x49*x50*x51*x52*x54*x55*x57*x59*x60*x64*x67*x68*x70*x71*x72*x73*x76*x77*x80, x3*x4*x8*x9*x13*x18*x20*x22*x25*x27*x28*x29*x30*x32*x34*x35*x36*x37*x38*x39*x40*x42*x46*x48*x49*x50*x51*x54*x55*x56*x57*x58*x60*x62*x64*x66*x68*x71*x72*x73*x75*x76*x79*x80, x1*x3*x4*x6*x7*x9*x10*x11*x13*x14*x17*x20*x22*x24*x27*x29*x31*x33*x34*x36*x38*x45*x46*x48*x50*x51*x52*x53*x54*x57*x58*x60*x62*x63*x65*x66*x68*x71*x75*x77*x78*x79*x80, x1*x7*x11*x14*x15*x19*x20*x21*x22*x23*x26*x31*x32*x33*x36*x40*x43*x45*x47*x48*x49*x50*x51*x53*x56*x57*x58*x60*x65*x68*x69*x73*x77*x80, x2*x4*x6*x8*x9*x12*x15*x16*x19*x24*x27*x31*x35*x37*x38*x41*x46*x47*x50*x52*x53*x56*x59*x60*x61*x64*x65*x67*x70*x71*x72*x77*x80, x2*x5*x6*x7*x8*x9*x10*x12*x17*x21*x26*x27*x29*x32*x34*x35*x37*x39*x51*x52*x54*x55*x56*x58*x59*x60*x64*x65*x66*x68*x69*x70*x72*x74*x75*x77*x78*x79, x2*x3*x6*x7*x8*x10*x11*x12*x13*x14*x16*x17*x18*x20*x21*x22*x23*x24*x30*x31*x33*x34*x37*x38*x39*x40*x42*x44*x46*x47*x48*x49*x50*x51*x52*x54*x55*x56*x60*x62*x63*x64*x67*x68*x71*x72*x75*x76*x77*x80, x1*x2*x3*x8*x9*x11*x13*x18*x19*x20*x21*x22*x24*x26*x28*x30*x32*x33*x35*x36*x38*x40*x44*x46*x47*x49*x51*x52*x57*x62*x64*x67*x69*x70*x72*x74*x75*x77*x78*x79, x1*x2*x3*x9*x17*x19*x25*x29*x32*x33*x34*x40*x44*x49*x50*x53*x56*x57*x58*x59*x60*x61*x62*x64*x67*x68*x70*x71*x72*x73*x74*x76*x77, x2*x3*x4*x6*x8*x9*x10*x12*x13*x18*x19*x20*x23*x24*x25*x26*x27*x29*x30*x31*x32*x38*x39*x40*x41*x44*x46*x47*x51*x54*x59*x60*x63*x66*x67*x68*x70*x74*x79*x80, x1*x3*x4*x5*x6*x7*x8*x10*x12*x14*x15*x17*x18*x20*x22*x23*x24*x25*x27*x28*x29*x31*x32*x33*x37*x38*x39*x43*x44*x45*x46*x50*x51*x52*x59*x61*x63*x64*x65*x68*x70*x71*x75*x77*x78*x79*x80, x2*x3*x6*x7*x9*x12*x15*x18*x19*x21*x22*x24*x27*x29*x31*x33*x35*x36*x39*x42*x44*x45*x46*x47*x51*x57*x58*x59*x60*x63*x66*x67*x69*x70*x74*x78, x1*x2*x6*x7*x9*x11*x12*x13*x14*x15*x19*x21*x24*x25*x26*x27*x30*x31*x33*x34*x35*x37*x40*x42*x45*x47*x50*x54*x55*x56*x60*x61*x62*x65*x66*x70*x72*x74*x75*x77*x79, x3*x5*x10*x11*x12*x13*x15*x16*x21*x22*x23*x24*x27*x30*x33*x34*x36*x39*x40*x41*x46*x47*x48*x54*x55*x56*x58*x60*x65*x66*x70*x72*x73*x74*x75*x77*x80, x2*x4*x5*x6*x9*x10*x13*x14*x18*x19*x20*x21*x23*x24*x26*x27*x35*x36*x37*x38*x39*x44*x48*x53*x54*x55*x59*x65*x66*x68*x69*x70*x71*x74*x75*x76*x77*x78, x1*x2*x5*x7*x8*x9*x10*x11*x12*x13*x14*x15*x17*x18*x20*x21*x22*x23*x24*x25*x26*x27*x28*x29*x31*x32*x35*x36*x37*x39*x40*x41*x42*x43*x47*x48*x50*x53*x54*x56*x57*x60*x61*x64*x65*x66*x67*x68*x69*x70*x73*x75*x76*x77*x78*x79, x1*x5*x7*x8*x9*x11*x12*x13*x16*x18*x19*x20*x22*x24*x26*x34*x35*x36*x37*x40*x41*x42*x43*x44*x45*x46*x48*x52*x53*x59*x62*x63*x67*x68*x70*x72*x73*x75*x77*x79, x1*x2*x3*x4*x5*x6*x7*x8*x9*x10*x16*x17*x19*x20*x21*x23*x25*x30*x31*x32*x33*x37*x39*x40*x44*x53*x54*x55*x56*x58*x61*x62*x63*x64*x68*x74*x78*x79*x80, x1*x2*x4*x5*x8*x9*x10*x12*x16*x19*x20*x21*x23*x24*x29*x30*x32*x33*x35*x36*x39*x40*x41*x46*x49*x50*x53*x54*x55*x59*x61*x62*x63*x65*x67*x69*x70*x71*x73*x77*x78*x79, x1*x2*x7*x8*x9*x10*x12*x13*x18*x25*x26*x30*x33*x35*x36*x37*x43*x46*x47*x48*x50*x53*x54*x55*x56*x59*x61*x63*x68*x69*x71*x73*x75*x76, x1*x3*x4*x5*x6*x8*x9*x10*x11*x14*x15*x16*x18*x23*x32*x33*x34*x36*x38*x39*x40*x41*x42*x43*x45*x47*x49*x50*x51*x52*x54*x56*x57*x65*x67*x68*x69*x70*x72*x73*x74*x75*x76*x78, x3*x5*x6*x10*x13*x15*x16*x19*x20*x22*x26*x27*x32*x34*x35*x36*x37*x38*x44*x45*x48*x49*x52*x54*x55*x60*x61*x63*x67*x68*x73*x76*x79*x80, x1*x2*x3*x5*x7*x9*x10*x11*x12*x14*x18*x19*x21*x22*x25*x26*x28*x29*x32*x33*x36*x37*x40*x42*x43*x45*x46*x47*x49*x50*x51*x52*x54*x56*x57*x60*x62*x63*x65*x66*x71*x73*x74*x75*x76*x77*x80, x6*x8*x9*x11*x14*x15*x16*x18*x20*x21*x22*x23*x24*x25*x28*x29*x30*x31*x32*x33*x35*x36*x37*x38*x40*x43*x44*x49*x53*x56*x57*x58*x59*x60*x63*x64*x66*x70*x72*x74*x76*x78*x79*x80, x1*x2*x3*x4*x6*x9*x14*x16*x19*x20*x22*x23*x24*x27*x30*x34*x36*x38*x40*x41*x43*x45*x46*x47*x52*x53*x54*x58*x59*x60*x63*x64*x66*x67*x68*x70*x72*x73*x74*x75*x76*x78*x80, x2*x3*x4*x5*x7*x8*x9*x10*x11*x13*x14*x16*x18*x21*x22*x25*x28*x29*x32*x33*x35*x36*x38*x40*x43*x45*x46*x48*x49*x50*x51*x52*x53*x57*x59*x60*x61*x62*x63*x64*x65*x66*x69*x70*x71*x74*x75*x77*x78*x79, x1*x3*x7*x12*x14*x18*x19*x20*x22*x29*x31*x33*x34*x36*x37*x38*x39*x42*x45*x46*x47*x49*x52*x53*x55*x56*x57*x61*x62*x64*x65*x67*x68*x72*x76*x78*x80, x2*x4*x7*x8*x10*x11*x13*x15*x20*x21*x22*x23*x26*x34*x36*x37*x41*x44*x46*x47*x49*x51*x53*x54*x55*x57*x60*x61*x62*x65*x66*x68*x69*x71*x77*x78*x80, x2*x3*x5*x8*x10*x12*x13*x14*x15*x16*x17*x18*x19*x20*x23*x26*x27*x32*x33*x35*x36*x38*x39*x41*x42*x43*x44*x45*x48*x51*x52*x56*x57*x60*x61*x64*x65*x66*x67*x71*x75*x77*x78*x80, x2*x7*x10*x13*x14*x17*x18*x24*x26*x27*x28*x30*x31*x32*x35*x42*x44*x46*x47*x49*x51*x52*x53*x54*x58*x59*x60*x61*x62*x67*x69*x70*x71*x72*x74*x76*x77*x78*x80, x1*x3*x5*x8*x10*x14*x17*x19*x21*x23*x24*x25*x26*x29*x32*x35*x37*x38*x40*x42*x43*x44*x45*x46*x48*x50*x52*x54*x55*x56*x58*x60*x61*x62*x63*x66*x68*x69*x70*x71*x72*x75*x77*x79*x80, x4*x8*x9*x12*x14*x15*x18*x19*x23*x24*x25*x27*x28*x30*x31*x35*x38*x40*x41*x46*x48*x49*x50*x53*x55*x56*x57*x58*x59*x61*x63*x65*x68*x69*x70*x73*x75, x2*x5*x6*x9*x10*x13*x14*x15*x22*x24*x25*x26*x27*x33*x36*x37*x38*x40*x41*x42*x45*x47*x49*x50*x52*x54*x59*x60*x61*x62*x63*x64*x67*x72*x73*x74*x76*x78*x80, x1*x3*x5*x6*x8*x9*x10*x15*x19*x20*x21*x22*x28*x29*x31*x36*x42*x45*x46*x48*x52*x54*x55*x58*x60*x61*x62*x65*x66*x67*x68*x69*x71*x73*x74*x76*x78, x2*x8*x9*x10*x11*x13*x15*x18*x20*x24*x25*x26*x28*x29*x30*x32*x34*x38*x39*x40*x43*x44*x45*x46*x50*x52*x54*x55*x56*x58*x64*x67*x70*x72*x73*x76*x78*x79, x3*x5*x7*x9*x10*x11*x12*x13*x15*x17*x19*x22*x29*x30*x32*x35*x39*x40*x44*x46*x50*x53*x55*x56*x57*x58*x59*x60*x62*x63*x64*x65*x66*x67*x72*x73*x74*x76*x77*x78*x79, x1*x2*x3*x4*x6*x8*x9*x10*x11*x13*x14*x16*x21*x26*x27*x30*x31*x32*x33*x34*x35*x37*x38*x39*x40*x42*x43*x45*x48*x49*x50*x51*x52*x54*x55*x57*x58*x63*x64*x66*x67*x68*x71*x74*x77*x79, x1*x3*x4*x6*x9*x12*x15*x20*x21*x24*x25*x27*x28*x33*x39*x40*x42*x46*x47*x54*x58*x60*x61*x64*x65*x67*x68*x70*x74*x79, x1*x2*x3*x5*x6*x7*x10*x11*x14*x16*x17*x21*x22*x23*x24*x29*x30*x32*x35*x37*x38*x39*x41*x42*x43*x45*x46*x48*x55*x56*x57*x58*x59*x60*x61*x62*x63*x65*x67*x68*x69*x70*x74*x76, x1*x4*x5*x11*x12*x14*x19*x20*x21*x22*x23*x26*x27*x29*x30*x32*x35*x38*x39*x41*x42*x43*x45*x47*x49*x51*x58*x59*x62*x63*x64*x66*x68*x70*x73*x74*x75*x76*x77*x79, x1*x3*x4*x5*x6*x7*x9*x11*x14*x15*x16*x17*x18*x19*x22*x30*x33*x34*x36*x38*x40*x42*x44*x45*x46*x47*x50*x51*x53*x55*x56*x59*x60*x62*x63*x64*x65*x68*x69*x71*x73*x74*x75*x76*x77, x1*x3*x5*x7*x8*x11*x12*x15*x17*x18*x19*x20*x21*x25*x26*x27*x28*x33*x34*x35*x36*x37*x40*x41*x43*x47*x49*x52*x54*x56*x57*x58*x59*x64*x65*x69*x70*x72*x73*x74*x79, x2*x5*x6*x9*x10*x11*x16*x17*x19*x22*x23*x26*x29*x32*x34*x35*x36*x42*x43*x46*x48*x49*x50*x51*x56*x58*x60*x61*x64*x67*x68*x72*x74*x76*x78*x80, x1*x3*x4*x5*x6*x9*x10*x13*x14*x16*x17*x18*x19*x24*x25*x27*x28*x30*x32*x33*x34*x40*x43*x44*x45*x47*x48*x49*x50*x53*x54*x57*x60*x61*x63*x66*x68*x74*x75*x80, x2*x3*x5*x6*x12*x14*x15*x16*x18*x19*x28*x29*x30*x31*x33*x34*x35*x36*x39*x41*x43*x47*x51*x52*x57*x58*x61*x62*x63*x65*x69*x71*x76*x77*x78, x1*x2*x10*x11*x13*x15*x16*x18*x19*x20*x21*x23*x24*x26*x30*x31*x32*x33*x34*x41*x43*x44*x45*x47*x50*x54*x55*x57*x59*x61*x64*x66*x68*x74*x75, x4*x5*x6*x10*x12*x16*x17*x23*x25*x28*x32*x33*x35*x36*x41*x47*x48*x49*x50*x53*x54*x55*x56*x57*x58*x59*x60*x61*x63*x64*x67*x68*x69*x72*x79, x1*x3*x4*x5*x10*x13*x14*x16*x17*x19*x20*x22*x24*x25*x27*x28*x29*x30*x31*x33*x35*x38*x40*x46*x47*x48*x49*x50*x51*x55*x60*x61*x63*x64*x65*x68*x71*x75*x78, x1*x2*x4*x5*x7*x9*x11*x12*x14*x15*x17*x19*x20*x21*x25*x27*x32*x34*x38*x41*x46*x47*x48*x49*x50*x51*x52*x55*x56*x61*x65*x67*x71*x75*x76*x78, x3*x4*x5*x6*x8*x9*x11*x12*x14*x15*x17*x18*x20*x22*x24*x25*x28*x29*x30*x33*x35*x36*x41*x43*x45*x46*x47*x49*x50*x53*x55*x57*x58*x59*x60*x63*x64*x66*x67*x71*x72*x74*x75*x77*x79, x1*x3*x6*x7*x8*x10*x13*x14*x16*x17*x20*x21*x23*x24*x26*x27*x29*x30*x31*x32*x33*x36*x40*x41*x43*x45*x48*x49*x50*x52*x54*x55*x57*x58*x62*x64*x66*x68*x73*x74*x75*x77*x80, x2*x4*x7*x9*x10*x12*x13*x14*x15*x16*x20*x22*x24*x26*x29*x30*x31*x33*x34*x38*x45*x50*x52*x54*x56*x65*x66*x67*x68*x71*x75*x78*x80, x1*x12*x14*x15*x16*x18*x20*x21*x22*x24*x25*x26*x28*x29*x34*x37*x39*x44*x45*x47*x48*x49*x50*x52*x53*x55*x56*x58*x59*x60*x61*x62*x66*x68*x69*x70*x71*x72*x74*x75*x76*x77*x78, x1*x2*x3*x5*x6*x8*x10*x12*x13*x14*x16*x22*x23*x24*x27*x29*x30*x34*x39*x40*x41*x43*x45*x47*x49*x50*x51*x52*x54*x55*x58*x60*x66*x67*x68*x70*x72*x77, x2*x3*x4*x5*x6*x9*x16*x17*x18*x19*x20*x21*x22*x24*x26*x30*x31*x32*x33*x34*x35*x39*x40*x41*x42*x51*x53*x55*x57*x59*x60*x61*x62*x64*x67*x68*x71*x74*x75*x77*x79*x80, x4*x5*x6*x8*x9*x10*x15*x17*x18*x19*x20*x24*x28*x29*x30*x32*x38*x41*x42*x44*x46*x47*x51*x54*x56*x57*x58*x62*x63*x64*x65*x66*x68*x71*x73*x77*x80, x2*x3*x7*x13*x14*x16*x17*x19*x23*x25*x26*x30*x31*x33*x34*x37*x39*x42*x43*x44*x46*x49*x53*x58*x60*x61*x62*x64*x65*x68*x69*x70*x71*x72*x73*x76*x78*x79, x1*x2*x3*x6*x9*x12*x13*x18*x23*x24*x25*x26*x27*x30*x31*x32*x33*x34*x35*x36*x38*x39*x42*x45*x46*x47*x50*x53*x54*x59*x63*x64*x66*x68*x70*x71*x72*x73*x74*x76*x77*x78*x79*x80, x2*x7*x10*x12*x13*x19*x22*x25*x26*x29*x30*x32*x34*x35*x36*x37*x38*x39*x40*x41*x42*x44*x47*x50*x52*x55*x57*x58*x59*x62*x64*x65*x66*x67*x69*x73*x74*x75*x80, x1*x6*x7*x12*x13*x14*x15*x17*x19*x20*x21*x24*x28*x32*x33*x34*x36*x40*x41*x43*x46*x47*x51*x53*x55*x56*x57*x59*x61*x65*x66*x67*x68*x69*x72*x74*x75*x76*x77*x78*x79*x80, x3*x4*x6*x8*x9*x13*x14*x15*x16*x18*x20*x22*x26*x27*x28*x29*x31*x33*x36*x38*x40*x41*x42*x44*x45*x46*x50*x51*x54*x57*x60*x62*x63*x66*x67*x68*x69*x71*x73*x74*x80, x2*x3*x10*x11*x13*x16*x17*x24*x25*x26*x29*x31*x33*x34*x38*x40*x42*x44*x45*x49*x54*x56*x58*x59*x60*x61*x67*x70*x73*x74*x76, x1*x2*x4*x5*x6*x11*x12*x15*x17*x18*x25*x29*x30*x33*x35*x36*x37*x38*x40*x41*x44*x47*x49*x55*x56*x60*x61*x65*x74*x75*x76*x77*x79*x80, x2*x3*x4*x7*x8*x10*x11*x13*x15*x16*x18*x19*x20*x21*x24*x28*x29*x30*x32*x33*x34*x37*x38*x39*x40*x43*x47*x49*x51*x53*x55*x56*x59*x62*x63*x65*x68*x70*x73*x77*x79*x80, x1*x4*x5*x6*x11*x16*x17*x20*x22*x25*x26*x27*x29*x35*x37*x38*x40*x42*x45*x47*x48*x50*x51*x53*x54*x55*x56*x62*x63*x64*x65*x69*x70*x71*x72*x73*x74*x76*x78*x80, x1*x5*x14*x15*x18*x19*x21*x22*x24*x27*x29*x30*x31*x33*x36*x37*x39*x40*x43*x47*x50*x51*x53*x54*x58*x59*x61*x64*x65*x66*x68*x69*x70*x75*x78*x79*x80, x1*x3*x4*x5*x7*x8*x10*x12*x17*x18*x19*x21*x22*x23*x26*x29*x31*x32*x38*x40*x41*x43*x45*x46*x48*x51*x52*x53*x57*x60*x61*x63*x68*x69*x70*x75*x76*x79*x80, x1*x5*x8*x9*x13*x14*x15*x16*x17*x18*x19*x22*x23*x24*x25*x27*x28*x29*x32*x33*x36*x42*x45*x48*x50*x51*x52*x53*x55*x56*x57*x58*x62*x66*x67*x72*x73*x74*x78, x1*x4*x7*x10*x11*x13*x14*x15*x16*x17*x18*x21*x22*x23*x24*x25*x30*x31*x32*x33*x36*x38*x39*x41*x44*x45*x46*x47*x48*x51*x52*x53*x54*x59*x61*x62*x64*x65*x66*x68*x69*x70*x71*x73*x74*x77*x79*x80, x1*x3*x4*x7*x10*x11*x14*x15*x16*x19*x20*x21*x23*x24*x26*x27*x28*x31*x32*x33*x38*x40*x41*x42*x44*x45*x48*x49*x50*x51*x53*x55*x58*x62*x63*x65*x66*x67*x68*x69*x70*x71*x73*x75*x77*x78*x79*x80, x2*x5*x12*x13*x15*x16*x17*x19*x22*x23*x25*x26*x28*x29*x30*x32*x34*x39*x40*x41*x42*x45*x46*x47*x50*x53*x55*x56*x57*x58*x59*x60*x62*x63*x64*x65*x66*x67*x74*x75*x76*x79*x80, x3*x6*x8*x12*x14*x16*x17*x19*x20*x22*x23*x25*x26*x28*x29*x30*x34*x35*x37*x38*x39*x42*x44*x47*x51*x52*x57*x58*x63*x64*x66*x67*x68*x71*x74*x75*x76*x78*x79*x80, x3*x4*x7*x10*x12*x18*x19*x21*x23*x24*x27*x28*x30*x31*x32*x33*x38*x39*x40*x41*x42*x43*x45*x46*x47*x51*x53*x54*x55*x57*x59*x60*x63*x65*x67*x68*x70*x71*x72*x80, x1*x2*x3*x5*x9*x11*x17*x18*x19*x20*x23*x25*x27*x29*x30*x32*x37*x40*x41*x42*x44*x45*x47*x48*x52*x53*x59*x61*x62*x63*x64*x65*x69*x71*x73*x74*x75*x76*x77*x78*x79, x1*x3*x4*x7*x8*x9*x10*x15*x17*x18*x19*x20*x21*x22*x26*x29*x31*x32*x35*x37*x38*x39*x42*x44*x46*x50*x51*x52*x53*x56*x57*x59*x64*x65*x69*x73*x76*x79*x80, x1*x2*x4*x6*x7*x8*x11*x12*x14*x15*x17*x19*x22*x25*x26*x27*x28*x29*x31*x33*x38*x40*x43*x44*x45*x50*x55*x56*x57*x58*x59*x63*x66*x67*x73*x75*x80, x1*x4*x6*x9*x10*x11*x12*x13*x15*x16*x17*x19*x20*x23*x24*x25*x28*x29*x30*x31*x32*x34*x38*x39*x40*x43*x44*x46*x48*x50*x52*x53*x54*x55*x56*x57*x58*x61*x64*x66*x70*x72*x74*x75*x79*x80, x1*x2*x5*x7*x8*x9*x10*x11*x14*x15*x16*x18*x19*x24*x25*x28*x30*x33*x34*x37*x39*x40*x42*x43*x45*x46*x47*x51*x52*x54*x55*x59*x60*x62*x67*x68*x69*x71*x73*x74*x76*x77*x79, x5*x9*x12*x13*x14*x15*x17*x20*x21*x22*x23*x24*x25*x26*x27*x28*x29*x35*x36*x37*x41*x45*x47*x49*x50*x52*x54*x55*x57*x58*x59*x60*x61*x62*x65*x66*x67*x68*x69*x70*x80, x1*x3*x6*x9*x10*x11*x12*x14*x16*x18*x20*x23*x28*x32*x34*x35*x36*x37*x38*x39*x41*x43*x46*x48*x49*x50*x55*x60*x61*x62*x64*x65*x66*x67*x69*x74*x75*x77, x2*x3*x4*x6*x7*x8*x9*x12*x13*x14*x16*x17*x23*x24*x27*x28*x29*x30*x31*x32*x34*x37*x38*x40*x41*x48*x50*x52*x55*x59*x63*x64*x66*x68*x69*x73*x76*x78*x80, x2*x5*x7*x8*x9*x10*x11*x13*x14*x15*x17*x18*x19*x22*x28*x30*x32*x33*x34*x35*x36*x40*x42*x43*x46*x49*x50*x52*x53*x57*x60*x61*x68*x72*x75*x79*x80, x1*x3*x4*x5*x7*x8*x10*x11*x13*x14*x16*x18*x20*x26*x28*x31*x34*x38*x39*x40*x41*x43*x46*x47*x48*x50*x51*x52*x53*x57*x58*x60*x61*x62*x63*x70*x71*x72*x73*x74*x75*x76*x77*x78*x80, x1*x2*x5*x6*x9*x11*x12*x16*x18*x19*x20*x21*x22*x23*x24*x30*x32*x35*x37*x42*x44*x45*x46*x51*x53*x55*x57*x59*x62*x64*x66*x67*x68*x69*x71*x73*x74*x78*x79*x80, x3*x5*x8*x15*x16*x18*x22*x25*x26*x27*x28*x30*x33*x34*x37*x39*x40*x41*x42*x44*x46*x48*x51*x52*x53*x54*x56*x57*x58*x60*x64*x65*x67*x72*x74*x75*x76, x1*x2*x6*x11*x13*x14*x15*x18*x20*x22*x23*x25*x26*x28*x29*x31*x34*x36*x37*x39*x40*x41*x42*x43*x46*x47*x48*x50*x51*x53*x54*x56*x57*x59*x61*x67*x69*x70*x74*x76*x78, x1*x3*x8*x9*x10*x16*x18*x20*x26*x28*x32*x33*x34*x35*x37*x38*x39*x42*x43*x44*x45*x46*x47*x49*x50*x51*x53*x55*x56*x59*x60*x61*x62*x64*x65*x68*x71*x72*x76*x78*x79, x5*x6*x8*x11*x14*x15*x16*x18*x20*x23*x24*x27*x28*x29*x30*x31*x32*x33*x34*x35*x36*x37*x38*x41*x42*x43*x44*x48*x52*x53*x54*x55*x56*x58*x59*x60*x61*x62*x66*x70*x71*x72*x74, x1*x3*x4*x5*x6*x7*x9*x12*x14*x17*x22*x24*x26*x27*x31*x32*x33*x34*x35*x37*x38*x39*x40*x41*x42*x44*x45*x46*x49*x51*x52*x53*x54*x57*x58*x60*x61*x64*x65*x68*x69*x70*x73*x74*x75*x76*x77, x3*x4*x5*x10*x11*x12*x14*x16*x18*x21*x22*x23*x24*x32*x33*x34*x35*x37*x40*x43*x45*x47*x49*x51*x54*x55*x56*x58*x59*x60*x62*x65*x68*x71, x2*x3*x5*x6*x7*x8*x12*x13*x14*x15*x17*x20*x21*x22*x25*x26*x30*x33*x34*x36*x37*x40*x41*x44*x45*x49*x50*x53*x54*x58*x59*x60*x66*x67*x68*x71*x73*x74*x75*x77*x78*x79, x1*x3*x4*x5*x6*x7*x8*x9*x10*x11*x13*x19*x20*x21*x22*x27*x28*x29*x32*x36*x37*x42*x43*x44*x48*x49*x50*x52*x55*x57*x60*x61*x63*x65*x66*x68*x69*x70*x73*x74*x75*x76*x77*x79*x80, x1*x4*x5*x7*x10*x11*x15*x16*x17*x18*x19*x20*x22*x27*x29*x30*x31*x32*x37*x39*x40*x44*x45*x48*x50*x53*x54*x55*x56*x57*x58*x59*x60*x61*x62*x63*x64*x65*x67*x69*x70*x73*x74*x76*x78*x80, x2*x3*x4*x5*x6*x8*x9*x11*x12*x13*x14*x17*x18*x26*x27*x29*x37*x41*x43*x45*x48*x49*x50*x51*x55*x56*x58*x60*x63*x64*x66*x68*x69*x70*x73*x74*x76*x77*x79*x80, x1*x2*x4*x5*x7*x12*x18*x21*x22*x23*x25*x27*x29*x33*x37*x41*x46*x48*x49*x50*x51*x52*x54*x55*x59*x60*x61*x62*x63*x65*x69*x75*x77, x1*x2*x3*x6*x8*x9*x12*x13*x16*x17*x19*x23*x24*x25*x26*x29*x31*x32*x34*x35*x37*x41*x42*x45*x49*x50*x52*x54*x56*x57*x58*x59*x60*x61*x66*x68*x69*x70*x71*x74*x76, x1*x3*x4*x6*x8*x11*x14*x16*x21*x23*x25*x26*x27*x29*x30*x34*x37*x38*x40*x41*x42*x44*x46*x47*x48*x49*x51*x52*x54*x58*x59*x62*x63*x64*x67*x70*x72*x78, x1*x2*x8*x9*x10*x11*x14*x18*x22*x23*x24*x25*x27*x28*x38*x41*x42*x43*x45*x46*x50*x52*x54*x56*x60*x63*x64*x66*x67*x68*x69*x70*x72*x74*x76*x79, x5*x6*x8*x9*x10*x14*x18*x19*x26*x27*x33*x34*x37*x38*x51*x55*x57*x58*x59*x66*x67*x68*x69*x70*x72*x77*x78*x80, x1*x6*x8*x9*x10*x11*x14*x15*x18*x20*x21*x22*x25*x30*x31*x32*x34*x35*x37*x38*x39*x41*x44*x46*x49*x50*x51*x54*x56*x57*x58*x59*x60*x63*x64*x69*x70*x71*x74*x77*x78*x79*x80, x1*x2*x4*x5*x6*x7*x9*x10*x11*x16*x17*x18*x20*x21*x22*x24*x25*x31*x35*x36*x41*x42*x48*x49*x53*x54*x55*x56*x57*x58*x62*x64*x65*x71*x74*x76*x78*x79, x5*x9*x15*x16*x17*x19*x20*x21*x22*x25*x28*x30*x31*x34*x35*x36*x38*x39*x43*x46*x48*x51*x53*x54*x55*x56*x57*x59*x62*x64*x74*x75*x78, x1*x2*x3*x5*x6*x7*x8*x9*x12*x13*x14*x17*x20*x23*x28*x32*x34*x35*x36*x38*x39*x47*x49*x52*x53*x54*x56*x57*x59*x60*x61*x62*x66*x67*x68*x70*x71*x72*x73*x74*x77*x78, x2*x3*x5*x6*x10*x11*x16*x20*x21*x22*x26*x28*x29*x30*x32*x35*x38*x39*x41*x42*x43*x47*x54*x55*x56*x58*x59*x60*x61*x62*x63*x68*x69*x70*x71*x74*x78, x5*x11*x12*x17*x19*x20*x21*x22*x23*x24*x25*x27*x30*x33*x34*x35*x36*x42*x44*x48*x51*x53*x54*x55*x56*x57*x60*x62*x63*x65*x69*x70*x71*x72*x73*x74*x75*x78*x79*x80, x1*x3*x6*x7*x9*x11*x15*x16*x18*x19*x22*x24*x27*x29*x33*x36*x38*x39*x41*x42*x43*x48*x51*x54*x55*x56*x57*x59*x61*x62*x63*x64*x65*x70*x71*x73*x74*x77*x79, x2*x3*x4*x7*x9*x12*x14*x16*x18*x21*x27*x28*x29*x31*x32*x38*x39*x41*x42*x47*x48*x54*x57*x59*x60*x62*x65*x67*x69*x70*x72*x73*x74*x76*x77*x79, x1*x2*x4*x5*x7*x9*x10*x12*x13*x14*x15*x16*x17*x20*x21*x22*x23*x24*x25*x26*x30*x31*x33*x34*x37*x39*x41*x43*x44*x46*x49*x50*x51*x52*x55*x57*x60*x61*x63*x64*x66*x69*x72*x75*x80, x2*x4*x7*x8*x10*x11*x12*x13*x14*x15*x16*x17*x19*x20*x22*x26*x27*x28*x32*x34*x36*x37*x39*x40*x42*x43*x44*x45*x46*x55*x58*x61*x62*x63*x64*x66*x67*x68*x71*x72*x75*x76*x77*x80, x3*x7*x8*x10*x11*x14*x20*x23*x27*x29*x30*x31*x35*x37*x40*x41*x42*x43*x45*x46*x48*x49*x50*x51*x56*x57*x58*x60*x61*x63*x73*x74*x76*x77*x78*x79, x1*x2*x4*x6*x7*x13*x14*x15*x17*x20*x21*x25*x27*x28*x29*x31*x33*x34*x37*x38*x39*x44*x45*x46*x47*x50*x52*x54*x55*x56*x57*x58*x62*x63*x64*x69*x70*x73*x74*x76*x77*x80, x1*x2*x3*x4*x6*x10*x11*x13*x19*x23*x25*x27*x29*x30*x32*x33*x34*x35*x36*x39*x46*x48*x49*x50*x51*x54*x57*x59*x60*x63*x64*x66*x68*x69*x72*x73*x75*x76*x78*x79*x80, x1*x2*x3*x5*x8*x9*x15*x18*x19*x20*x22*x23*x26*x27*x30*x33*x35*x37*x38*x43*x45*x46*x50*x52*x53*x55*x56*x57*x58*x59*x61*x62*x64*x67*x71*x72*x74*x79, x1*x4*x5*x6*x7*x12*x14*x15*x17*x18*x22*x23*x24*x27*x30*x31*x32*x33*x34*x37*x40*x41*x43*x44*x46*x47*x48*x50*x51*x55*x56*x57*x58*x60*x63*x64*x66*x68*x69*x70*x71*x75*x79, x1*x4*x8*x12*x14*x15*x16*x18*x21*x22*x26*x27*x28*x30*x31*x35*x36*x38*x40*x41*x43*x45*x47*x48*x49*x52*x53*x54*x56*x59*x60*x61*x62*x63*x66*x68*x70*x71*x72*x74*x76*x79*x80, x1*x2*x3*x4*x7*x10*x12*x13*x15*x16*x18*x21*x22*x23*x24*x25*x26*x28*x29*x30*x33*x34*x37*x38*x39*x44*x47*x50*x52*x53*x54*x60*x63*x65*x66*x67*x71*x72*x73*x74*x77*x79, x2*x4*x8*x9*x15*x19*x20*x21*x22*x23*x25*x30*x31*x32*x33*x34*x35*x36*x37*x38*x39*x41*x42*x47*x51*x57*x59*x61*x65*x67*x69*x70*x71*x77*x80, x1*x5*x6*x7*x8*x11*x14*x16*x17*x18*x20*x21*x22*x23*x24*x25*x26*x28*x31*x33*x36*x37*x39*x40*x41*x42*x43*x45*x47*x48*x51*x52*x53*x55*x56*x57*x60*x64*x66*x70*x73*x76*x77*x79*x80, x1*x3*x4*x6*x9*x10*x12*x15*x16*x17*x22*x24*x25*x26*x27*x31*x32*x33*x35*x37*x39*x47*x48*x50*x51*x52*x53*x54*x55*x56*x59*x63*x67*x71*x73*x74*x77, x1*x2*x4*x6*x8*x11*x12*x13*x20*x22*x23*x24*x25*x27*x30*x31*x32*x33*x36*x39*x41*x42*x43*x47*x53*x58*x61*x63*x69*x74*x76*x80, x1*x2*x3*x6*x7*x8*x10*x11*x17*x19*x21*x24*x30*x32*x33*x35*x36*x37*x39*x41*x45*x46*x47*x48*x49*x51*x55*x56*x57*x60*x63*x66*x67*x68*x69*x70*x72*x75*x76*x77*x78, x1*x4*x5*x8*x10*x11*x12*x13*x14*x18*x19*x20*x22*x25*x26*x27*x29*x34*x35*x36*x37*x38*x39*x42*x43*x44*x45*x46*x48*x50*x51*x53*x54*x55*x62*x63*x67*x68*x70*x72*x73*x75*x80, x2*x3*x5*x8*x9*x16*x18*x19*x20*x21*x22*x24*x25*x26*x29*x30*x33*x40*x42*x44*x45*x47*x48*x49*x50*x51*x53*x56*x57*x58*x59*x61*x62*x63*x66*x67*x70*x76*x77*x78*x80, x1*x2*x7*x9*x11*x13*x15*x16*x18*x21*x24*x27*x28*x29*x30*x31*x36*x37*x39*x40*x42*x43*x44*x45*x47*x48*x51*x52*x53*x54*x59*x60*x62*x65*x66*x67*x68*x70*x71*x73*x75*x76*x77*x78*x79*x80, x1*x4*x5*x7*x12*x13*x14*x16*x17*x18*x23*x24*x26*x27*x28*x29*x30*x31*x33*x36*x37*x38*x41*x42*x43*x47*x49*x51*x52*x56*x63*x64*x67*x70*x73*x78*x80, x1*x3*x5*x7*x8*x9*x10*x11*x13*x14*x15*x16*x18*x19*x20*x21*x22*x23*x24*x25*x26*x30*x31*x32*x33*x36*x37*x39*x40*x41*x43*x45*x46*x47*x51*x55*x57*x59*x60*x63*x64*x69*x71*x72*x73*x74*x75*x79, x2*x3*x6*x15*x16*x17*x18*x19*x21*x23*x25*x26*x27*x30*x33*x34*x36*x38*x39*x40*x42*x43*x44*x48*x51*x52*x55*x56*x60*x61*x63*x67*x69*x72*x73*x74*x75*x78*x79, x5*x8*x9*x10*x12*x14*x16*x17*x19*x20*x21*x23*x31*x35*x41*x42*x43*x46*x51*x52*x53*x56*x58*x61*x64*x65*x68*x69*x70*x72*x73*x75*x76*x79, x6*x7*x9*x10*x11*x12*x13*x14*x16*x17*x18*x20*x21*x22*x24*x25*x28*x31*x33*x35*x36*x38*x49*x52*x53*x55*x59*x60*x63*x64*x65*x67*x68*x69*x71*x72*x73*x74*x75*x77*x78*x79*x80, x1*x4*x6*x8*x11*x12*x14*x17*x19*x20*x22*x27*x31*x34*x37*x40*x41*x42*x45*x46*x47*x50*x51*x52*x55*x56*x57*x58*x61*x64*x65*x66*x67*x72*x74*x75*x76*x78*x79, x2*x3*x5*x6*x7*x10*x11*x12*x13*x14*x16*x17*x22*x23*x24*x30*x31*x34*x36*x39*x40*x44*x45*x46*x48*x52*x56*x57*x62*x63*x66*x69*x70*x73*x76*x80, x1*x2*x7*x10*x11*x13*x14*x16*x17*x19*x20*x22*x24*x25*x27*x28*x30*x33*x35*x37*x42*x44*x45*x50*x51*x52*x54*x58*x59*x60*x63*x64*x70*x71*x72*x79, x3*x7*x9*x10*x12*x13*x16*x17*x19*x20*x22*x23*x24*x25*x27*x29*x34*x36*x38*x42*x46*x49*x50*x52*x53*x54*x55*x56*x57*x60*x62*x63*x66*x68*x69*x71*x72*x73*x80, x2*x3*x4*x6*x8*x9*x12*x13*x16*x18*x21*x22*x23*x28*x29*x30*x33*x34*x39*x40*x48*x49*x52*x56*x57*x60*x65*x66*x70*x73*x74*x76*x77*x78*x79, x1*x3*x4*x5*x6*x7*x9*x10*x11*x12*x15*x19*x20*x23*x25*x26*x27*x28*x29*x30*x31*x32*x33*x34*x35*x37*x38*x39*x43*x44*x45*x47*x48*x51*x64*x68*x69*x71*x74*x75*x76*x77*x79, x1*x2*x3*x7*x9*x11*x13*x15*x16*x17*x19*x22*x23*x24*x25*x26*x27*x28*x29*x31*x32*x33*x34*x37*x39*x41*x43*x45*x46*x50*x51*x52*x53*x56*x58*x59*x60*x64*x65*x66*x67*x68*x73*x76*x80, x1*x2*x3*x5*x6*x7*x12*x16*x17*x20*x27*x33*x36*x38*x41*x42*x43*x44*x47*x51*x52*x54*x55*x58*x59*x62*x64*x67*x68*x69*x72*x73*x75*x76*x77, x1*x2*x4*x6*x7*x8*x10*x11*x13*x15*x17*x18*x19*x20*x21*x22*x24*x25*x26*x27*x30*x31*x32*x33*x34*x37*x38*x41*x42*x48*x50*x51*x55*x56*x58*x60*x62*x64*x65*x66*x67*x70*x71*x72*x74*x75*x76*x77*x79*x80, x1*x2*x4*x7*x8*x9*x14*x15*x16*x17*x18*x20*x21*x25*x26*x27*x29*x30*x31*x32*x41*x42*x43*x47*x55*x58*x59*x60*x61*x62*x65*x66*x67*x68*x73*x75*x77*x78*x80, x1*x2*x3*x5*x6*x7*x10*x12*x13*x19*x20*x26*x30*x31*x32*x33*x34*x35*x38*x39*x42*x44*x45*x46*x47*x50*x51*x52*x53*x55*x58*x59*x64*x69*x70*x75*x76*x78, x1*x2*x3*x5*x6*x8*x9*x12*x14*x17*x20*x23*x27*x30*x31*x33*x34*x35*x36*x37*x43*x44*x49*x50*x51*x53*x57*x59*x61*x63*x64*x67*x69*x76*x77*x78*x79, x4*x5*x8*x11*x13*x14*x15*x16*x17*x18*x20*x21*x23*x24*x27*x28*x30*x31*x32*x36*x38*x40*x41*x42*x43*x46*x47*x48*x50*x55*x56*x57*x58*x59*x63*x64*x67*x69*x72*x75*x76*x77, x2*x3*x4*x5*x7*x12*x14*x17*x22*x23*x25*x34*x35*x36*x41*x45*x47*x49*x51*x52*x54*x59*x61*x62*x63*x64*x66*x68*x69*x71*x72*x74*x76*x78, x1*x5*x6*x7*x9*x11*x13*x17*x18*x19*x20*x22*x23*x26*x29*x30*x31*x34*x35*x41*x42*x43*x45*x47*x50*x51*x54*x55*x56*x57*x58*x64*x65*x66*x67*x68*x69*x71*x72*x74*x75*x77*x78*x79, x1*x2*x3*x4*x7*x9*x13*x14*x19*x20*x21*x25*x28*x30*x32*x35*x37*x38*x39*x43*x45*x46*x48*x52*x53*x54*x55*x57*x59*x60*x61*x62*x65*x66*x67*x68*x70*x71*x72*x73*x74*x75*x77*x80, x2*x3*x5*x8*x10*x11*x12*x16*x21*x22*x23*x24*x25*x26*x27*x29*x30*x33*x34*x39*x40*x41*x43*x45*x46*x47*x50*x54*x55*x56*x58*x60*x61*x62*x63*x64*x65*x67*x69*x70*x72*x73*x75*x77*x79, x1*x3*x6*x7*x8*x9*x10*x11*x12*x13*x14*x22*x25*x26*x29*x30*x31*x33*x37*x38*x39*x41*x42*x44*x47*x52*x53*x54*x55*x57*x60*x61*x65*x70*x71*x73*x74*x76*x77*x78*x79, x2*x3*x4*x8*x15*x17*x19*x21*x27*x28*x32*x33*x35*x36*x37*x41*x42*x43*x44*x46*x56*x57*x60*x61*x63*x64*x65*x68*x69*x70*x71*x73*x77*x78, x1*x4*x9*x12*x14*x16*x17*x18*x23*x28*x29*x33*x36*x43*x45*x47*x49*x50*x51*x53*x54*x55*x56*x62*x69*x70*x77, x4*x10*x12*x13*x21*x23*x24*x27*x28*x29*x30*x31*x32*x34*x37*x39*x41*x42*x45*x46*x48*x49*x51*x52*x55*x56*x57*x59*x60*x63*x65*x67*x68*x73*x75*x76*x78, x1*x2*x3*x6*x10*x11*x15*x16*x17*x19*x20*x22*x23*x24*x26*x27*x30*x31*x34*x35*x36*x37*x41*x44*x45*x48*x52*x55*x56*x57*x59*x61*x63*x64*x65*x66*x67*x68*x69*x70*x71*x72*x73*x74*x75*x76*x77*x80, x1*x4*x5*x7*x9*x10*x11*x12*x17*x18*x20*x21*x23*x27*x28*x32*x34*x35*x36*x39*x40*x41*x44*x45*x46*x51*x52*x53*x59*x60*x61*x64*x66*x70*x73*x75*x78*x79*x80, x3*x6*x7*x8*x10*x11*x13*x14*x16*x19*x20*x21*x22*x25*x26*x27*x31*x35*x36*x39*x40*x41*x44*x47*x51*x52*x54*x55*x56*x59*x60*x62*x64*x65*x68*x74*x76*x77, x3*x5*x7*x8*x9*x11*x12*x19*x22*x23*x26*x28*x30*x32*x35*x36*x37*x38*x39*x40*x41*x42*x44*x47*x51*x52*x53*x54*x56*x57*x59*x60*x62*x63*x64*x65*x69*x71*x73*x74*x77*x78*x79, x2*x3*x4*x6*x8*x10*x13*x15*x17*x20*x22*x25*x30*x31*x34*x35*x37*x38*x39*x41*x42*x43*x44*x45*x46*x51*x53*x54*x61*x62*x63*x64*x66*x68*x69*x70*x71*x72*x75*x78*x80, x1*x2*x3*x4*x7*x9*x10*x11*x12*x15*x18*x20*x27*x32*x38*x40*x41*x43*x47*x49*x50*x51*x54*x55*x56*x57*x58*x59*x61*x63*x66*x67*x69*x70*x71*x74*x75*x76*x78, x1*x5*x7*x14*x16*x17*x18*x19*x22*x23*x24*x25*x29*x30*x31*x32*x37*x38*x41*x42*x44*x45*x46*x48*x53*x54*x55*x60*x65*x66*x67*x68*x69*x70*x76*x77*x78*x79, x1*x2*x5*x6*x11*x13*x14*x15*x16*x17*x21*x22*x24*x25*x26*x27*x31*x32*x37*x38*x39*x45*x46*x47*x49*x50*x51*x53*x54*x58*x59*x60*x62*x65*x66*x72*x73*x75, x1*x2*x4*x5*x7*x13*x15*x16*x18*x19*x20*x22*x24*x26*x28*x31*x32*x34*x35*x36*x37*x38*x42*x46*x47*x49*x51*x52*x55*x56*x59*x60*x64*x66*x67*x70*x73*x74*x75*x76*x77*x78*x79*x80, x2*x3*x5*x6*x8*x9*x15*x16*x18*x19*x24*x28*x29*x33*x34*x35*x38*x45*x46*x47*x51*x52*x53*x55*x57*x58*x60*x61*x63*x64*x65*x70*x71*x72*x76*x77*x80, x1*x2*x3*x4*x6*x7*x12*x13*x16*x18*x19*x22*x30*x32*x34*x38*x41*x42*x43*x45*x46*x48*x49*x50*x52*x55*x56*x57*x59*x63*x64*x65*x66*x67*x68*x69*x70*x71*x72*x74*x75*x76*x80, x1*x2*x3*x5*x8*x10*x12*x16*x17*x20*x21*x23*x24*x25*x26*x28*x30*x32*x33*x36*x38*x39*x40*x44*x46*x47*x51*x52*x53*x55*x56*x59*x60*x62*x64*x66*x69*x70*x71*x73*x79, x1*x2*x3*x4*x7*x10*x12*x13*x16*x20*x21*x22*x23*x26*x28*x31*x32*x35*x37*x38*x44*x46*x47*x48*x49*x51*x52*x53*x54*x56*x57*x58*x59*x60*x61*x62*x63*x67*x71*x72*x73*x74*x75*x76*x77*x80, x2*x3*x4*x6*x7*x13*x14*x15*x16*x17*x19*x21*x23*x24*x26*x27*x29*x30*x32*x35*x36*x38*x39*x40*x42*x45*x46*x47*x48*x49*x50*x54*x55*x56*x57*x58*x59*x60*x64*x68*x69*x71*x75*x76*x78*x79*x80, x2*x3*x5*x6*x7*x14*x15*x16*x17*x20*x21*x23*x25*x27*x29*x30*x32*x33*x37*x38*x39*x41*x43*x44*x46*x47*x51*x53*x54*x55*x56*x59*x60*x61*x62*x63*x64*x65*x66*x72*x78*x79, x3*x4*x6*x11*x12*x13*x14*x15*x17*x21*x24*x26*x28*x29*x30*x31*x32*x33*x34*x35*x38*x40*x41*x43*x45*x47*x48*x49*x50*x51*x52*x53*x55*x60*x64*x66*x68*x69*x70*x71*x72*x75*x76*x78, x1*x4*x7*x8*x12*x15*x18*x23*x24*x26*x27*x28*x29*x31*x32*x33*x35*x36*x37*x41*x43*x47*x48*x51*x52*x54*x55*x56*x57*x58*x61*x65*x67*x68*x69*x71*x77, x1*x2*x4*x8*x9*x12*x13*x18*x19*x20*x21*x25*x28*x30*x31*x33*x34*x35*x36*x38*x41*x42*x43*x47*x49*x53*x54*x60*x64*x65*x67*x68*x69*x70*x73*x74, x1*x2*x3*x4*x5*x7*x9*x10*x13*x18*x20*x23*x24*x25*x27*x28*x29*x30*x31*x33*x35*x36*x37*x39*x40*x44*x46*x47*x49*x52*x53*x55*x57*x59*x60*x62*x63*x64*x66*x67*x70*x72*x77*x78*x79*x80, x1*x4*x6*x9*x10*x11*x16*x19*x20*x21*x23*x24*x26*x29*x30*x31*x35*x36*x40*x41*x42*x44*x45*x47*x49*x50*x51*x54*x55*x58*x59*x60*x61*x66*x68*x70*x71*x75*x76*x77, x3*x8*x10*x11*x12*x14*x15*x19*x22*x25*x27*x28*x29*x30*x33*x36*x37*x39*x40*x43*x45*x46*x47*x48*x49*x51*x52*x53*x57*x61*x62*x63*x64*x65*x74*x75*x76*x77*x78*x79, x1*x3*x5*x7*x8*x10*x11*x12*x13*x15*x16*x17*x20*x23*x26*x28*x31*x35*x37*x38*x39*x41*x42*x43*x44*x45*x46*x50*x55*x56*x57*x58*x60*x63*x64*x70*x71*x75*x77*x78*x80, x3*x6*x9*x10*x12*x14*x15*x16*x19*x20*x21*x23*x24*x26*x29*x31*x33*x34*x35*x36*x38*x39*x43*x45*x47*x50*x52*x54*x56*x57*x60*x62*x64*x65*x66*x67*x70*x71*x72*x73*x76*x78, x1*x2*x3*x6*x7*x9*x10*x11*x12*x13*x15*x18*x19*x23*x25*x26*x30*x31*x32*x34*x36*x38*x40*x44*x47*x48*x50*x51*x53*x54*x55*x60*x61*x65*x66*x71*x72*x73*x76*x78*x79, x1*x2*x4*x5*x6*x7*x13*x14*x17*x18*x23*x24*x25*x26*x27*x28*x29*x30*x33*x35*x37*x41*x42*x44*x48*x53*x59*x60*x62*x63*x65*x66*x67*x68*x69*x71*x72*x73*x74*x77*x79, x2*x3*x5*x7*x8*x9*x13*x15*x17*x18*x19*x20*x21*x22*x23*x26*x28*x29*x34*x38*x40*x42*x43*x46*x48*x49*x50*x51*x53*x55*x58*x62*x65*x67*x68*x76*x79*x80, x1*x3*x4*x5*x7*x8*x9*x11*x12*x13*x14*x15*x16*x17*x18*x20*x24*x29*x30*x31*x32*x38*x39*x41*x46*x51*x53*x56*x57*x58*x59*x61*x63*x64*x65*x66*x69*x70*x71*x73*x74*x76*x77*x78*x80, x1*x2*x3*x5*x7*x12*x13*x15*x16*x18*x19*x20*x21*x23*x24*x26*x27*x31*x33*x34*x35*x36*x37*x39*x41*x43*x44*x45*x46*x47*x49*x50*x54*x56*x57*x62*x66*x67*x68*x70*x71*x72*x74*x77*x78*x79, x2*x5*x7*x8*x9*x11*x12*x13*x16*x17*x19*x23*x24*x26*x28*x29*x30*x35*x37*x39*x40*x42*x43*x44*x45*x46*x48*x51*x52*x53*x54*x55*x56*x60*x61*x62*x63*x64*x66*x67*x70*x71*x73*x74*x76*x77, x10*x11*x13*x15*x16*x20*x22*x23*x26*x28*x29*x32*x36*x38*x39*x40*x41*x45*x46*x47*x50*x52*x55*x56*x57*x58*x61*x63*x66*x67*x68*x72*x73*x74*x75*x76*x77*x78*x79*x80, x1*x2*x4*x6*x8*x9*x10*x11*x13*x14*x15*x20*x22*x23*x25*x26*x28*x29*x30*x31*x33*x36*x40*x41*x42*x45*x48*x53*x55*x56*x57*x60*x62*x67*x68*x69*x70*x71*x72*x74*x76*x77, x5*x6*x9*x10*x11*x12*x14*x15*x16*x20*x22*x24*x26*x27*x31*x34*x35*x38*x39*x43*x44*x45*x46*x51*x54*x58*x61*x63*x64*x68*x69*x72*x73*x80, x1*x2*x3*x9*x11*x13*x14*x16*x17*x19*x21*x23*x24*x25*x26*x27*x29*x30*x35*x37*x39*x41*x43*x45*x47*x48*x51*x53*x55*x57*x59*x60*x63*x64*x65*x69*x70*x74*x76*x77*x78, x2*x4*x5*x6*x7*x8*x9*x10*x11*x13*x17*x18*x20*x23*x24*x26*x28*x29*x31*x32*x34*x36*x37*x38*x39*x40*x43*x44*x46*x47*x51*x52*x53*x54*x56*x57*x58*x59*x60*x61*x62*x64*x66*x68*x73*x75*x79, x1*x3*x5*x8*x9*x11*x13*x14*x15*x16*x17*x26*x27*x28*x29*x30*x31*x32*x35*x36*x37*x38*x39*x41*x43*x47*x48*x50*x54*x58*x60*x61*x62*x63*x65*x67*x68*x70*x71*x72*x75*x76*x78, x3*x4*x6*x9*x10*x14*x15*x18*x19*x20*x21*x22*x23*x24*x26*x28*x29*x30*x32*x33*x35*x36*x38*x39*x41*x43*x44*x45*x46*x50*x51*x53*x56*x57*x58*x61*x64*x65*x66*x67*x69*x73*x75*x79, x1*x2*x3*x5*x8*x9*x10*x11*x12*x13*x14*x19*x26*x27*x29*x30*x31*x32*x33*x40*x47*x53*x54*x58*x59*x60*x61*x65*x66*x67*x73*x74*x77*x79*x80, x1*x4*x5*x6*x8*x11*x13*x14*x15*x16*x21*x23*x29*x33*x35*x36*x37*x43*x49*x53*x57*x58*x59*x60*x63*x64*x66*x68*x69*x72*x75*x76*x79*x80, x3*x4*x6*x7*x9*x10*x11*x15*x16*x17*x18*x21*x22*x24*x25*x26*x28*x29*x30*x31*x33*x34*x35*x37*x38*x48*x50*x51*x53*x55*x56*x57*x59*x60*x67*x68*x69*x70*x72*x76*x77*x78, x1*x2*x5*x6*x8*x9*x13*x15*x16*x18*x20*x21*x22*x23*x24*x26*x28*x29*x30*x31*x33*x35*x36*x37*x38*x39*x42*x43*x44*x45*x46*x48*x51*x52*x55*x56*x57*x63*x64*x70*x71*x78, x1*x4*x15*x16*x17*x18*x21*x27*x29*x37*x42*x43*x48*x49*x52*x56*x60*x62*x63*x65*x68*x72*x74*x75*x78*x80, x3*x4*x6*x7*x8*x9*x16*x19*x20*x23*x24*x28*x29*x30*x32*x34*x36*x37*x38*x40*x41*x42*x43*x44*x45*x46*x49*x50*x53*x56*x59*x64*x65*x66*x71*x72*x75*x76*x77, x1*x2*x5*x6*x8*x10*x13*x17*x21*x25*x27*x29*x31*x33*x34*x36*x37*x41*x42*x43*x46*x47*x49*x51*x53*x54*x55*x56*x57*x58*x59*x61*x62*x64*x66*x71*x74*x75*x76*x78, x4*x6*x7*x8*x10*x12*x14*x16*x17*x18*x21*x22*x24*x27*x30*x33*x35*x36*x40*x44*x46*x49*x52*x54*x57*x59*x60*x61*x62*x64*x69*x70*x71*x72*x74*x75*x76*x79*x80, x1*x4*x5*x8*x9*x13*x14*x17*x19*x20*x21*x22*x24*x25*x27*x29*x30*x33*x35*x36*x39*x41*x44*x45*x46*x48*x51*x52*x53*x54*x57*x58*x60*x62*x63*x65*x68*x73*x76*x79*x80, x2*x3*x5*x7*x9*x14*x15*x16*x18*x19*x22*x23*x25*x26*x32*x33*x38*x43*x44*x47*x50*x54*x55*x57*x60*x62*x65*x66*x67*x69*x70*x71*x72*x73*x74*x75*x79, x2*x3*x5*x10*x11*x15*x16*x17*x18*x21*x22*x23*x25*x29*x31*x32*x33*x34*x35*x42*x43*x45*x48*x49*x51*x52*x54*x55*x57*x58*x59*x60*x66*x67*x69*x71*x74*x76*x79*x80, x1*x2*x4*x5*x6*x7*x8*x12*x13*x14*x16*x17*x19*x22*x23*x24*x25*x27*x29*x30*x33*x39*x41*x42*x46*x47*x48*x49*x53*x54*x55*x56*x57*x58*x61*x62*x64*x65*x66*x68*x70*x73*x75*x76*x78*x79*x80, x5*x8*x11*x12*x14*x18*x20*x25*x35*x36*x39*x40*x43*x44*x45*x47*x48*x51*x52*x54*x55*x57*x61*x63*x66*x67*x68*x72*x73*x74*x75*x76*x79*x80, x3*x6*x7*x10*x12*x13*x14*x15*x16*x17*x18*x19*x23*x24*x27*x29*x30*x32*x33*x34*x36*x38*x40*x43*x45*x46*x47*x48*x49*x52*x53*x54*x55*x56*x57*x58*x59*x60*x65*x66*x69*x73*x74*x75*x77*x79*x80, x2*x3*x5*x7*x9*x10*x11*x14*x16*x19*x21*x22*x23*x24*x26*x28*x29*x30*x33*x34*x36*x37*x40*x42*x46*x48*x49*x50*x52*x60*x61*x65*x66*x69*x71*x72*x73*x74*x75*x80, x2*x3*x4*x7*x8*x9*x11*x12*x13*x14*x16*x17*x18*x23*x25*x29*x30*x34*x35*x37*x38*x43*x44*x45*x46*x51*x52*x55*x56*x59*x60*x64*x65*x68*x70*x72*x75*x77*x78*x79*x80, x2*x5*x7*x11*x15*x17*x21*x23*x24*x31*x32*x34*x35*x38*x39*x41*x42*x43*x45*x46*x47*x48*x49*x50*x52*x53*x54*x55*x56*x57*x63*x64*x65*x66*x69*x73*x77*x78*x79*x80, x2*x4*x7*x8*x10*x12*x14*x15*x16*x19*x20*x22*x23*x24*x26*x27*x28*x30*x32*x33*x36*x38*x39*x42*x43*x44*x45*x48*x49*x52*x59*x60*x62*x65*x66*x68*x69*x70*x72*x78*x79, x1*x4*x8*x10*x11*x12*x13*x14*x15*x19*x20*x21*x24*x28*x29*x30*x31*x36*x37*x38*x44*x45*x51*x52*x55*x57*x59*x60*x61*x63*x66*x67*x68*x69*x70*x73*x74*x75*x77, x1*x3*x4*x6*x10*x14*x15*x16*x18*x22*x26*x27*x28*x29*x30*x35*x37*x38*x40*x42*x43*x44*x47*x49*x52*x56*x57*x58*x62*x64*x65*x68*x71*x72*x73*x78*x79*x80, x1*x5*x6*x7*x8*x9*x10*x12*x13*x14*x15*x16*x17*x18*x20*x23*x25*x27*x32*x33*x36*x37*x39*x43*x46*x47*x48*x49*x52*x53*x57*x59*x62*x64*x67*x68*x69*x70*x72*x75*x76*x77*x78, x3*x5*x6*x9*x10*x11*x13*x14*x16*x17*x19*x20*x21*x22*x23*x24*x25*x26*x29*x32*x35*x36*x37*x42*x44*x46*x48*x50*x55*x56*x57*x58*x59*x61*x62*x64*x66*x67*x68*x73*x75*x76, x3*x4*x5*x6*x9*x10*x13*x16*x18*x25*x27*x28*x30*x31*x32*x33*x36*x42*x43*x46*x47*x48*x51*x52*x54*x58*x59*x60*x61*x62*x65*x72*x74, x1*x2*x4*x6*x7*x8*x12*x15*x16*x18*x20*x21*x25*x26*x27*x29*x30*x31*x37*x41*x43*x46*x47*x48*x49*x50*x52*x55*x56*x57*x59*x62*x65*x66*x67*x68*x69*x70*x71*x72*x74*x75*x76*x79, x1*x3*x4*x5*x7*x8*x10*x12*x13*x15*x17*x19*x21*x25*x26*x28*x30*x31*x32*x36*x38*x39*x41*x47*x48*x49*x50*x51*x52*x53*x58*x63*x64*x68*x73*x74*x75*x76*x80, x1*x2*x4*x5*x6*x7*x8*x11*x15*x17*x18*x21*x24*x25*x27*x28*x29*x32*x35*x41*x42*x43*x46*x50*x52*x53*x56*x59*x65*x68*x69*x71*x72*x73*x75*x77*x79, x3*x7*x8*x9*x10*x11*x15*x18*x19*x20*x21*x23*x24*x25*x26*x31*x33*x34*x40*x41*x43*x46*x47*x48*x49*x50*x52*x53*x54*x56*x60*x63*x64*x65*x66*x69*x73*x76*x77, x1*x4*x5*x7*x9*x10*x11*x12*x13*x14*x19*x20*x22*x24*x28*x30*x32*x33*x35*x36*x38*x39*x44*x47*x48*x50*x51*x53*x55*x56*x57*x59*x62*x63*x64*x65*x68*x69*x70*x71*x72*x76*x77*x78, x1*x4*x6*x12*x14*x15*x17*x23*x24*x25*x28*x29*x30*x31*x35*x36*x38*x40*x45*x46*x48*x49*x54*x60*x61*x65*x67*x68*x69*x70*x74*x75*x76*x80, x1*x4*x5*x9*x12*x13*x14*x17*x18*x21*x22*x24*x25*x29*x30*x31*x33*x35*x38*x39*x40*x42*x44*x46*x53*x58*x67*x68*x69*x71*x75*x76*x77*x78*x80, x1*x2*x4*x5*x8*x10*x12*x15*x17*x19*x20*x21*x22*x25*x27*x28*x29*x32*x33*x34*x35*x38*x40*x41*x42*x45*x50*x52*x53*x54*x59*x61*x62*x64*x65*x66*x67*x68*x69*x73*x76*x77*x79, x2*x5*x8*x12*x17*x21*x23*x24*x25*x28*x29*x30*x31*x34*x35*x40*x41*x42*x44*x45*x46*x51*x53*x57*x59*x62*x63*x64*x67*x68*x69*x70*x71*x72*x73*x77*x79, x7*x8*x9*x11*x13*x16*x20*x21*x22*x23*x24*x26*x27*x28*x29*x34*x35*x38*x40*x42*x43*x44*x45*x48*x49*x52*x55*x56*x58*x61*x62*x65*x66*x67*x69*x72*x73*x74*x75*x79*x80, x2*x3*x5*x7*x8*x10*x11*x13*x14*x15*x16*x21*x22*x23*x24*x25*x27*x28*x29*x30*x34*x35*x36*x38*x39*x41*x46*x49*x52*x53*x54*x55*x56*x57*x58*x59*x65*x69*x71*x72*x79*x80, x1*x4*x5*x7*x8*x9*x12*x13*x15*x17*x19*x21*x25*x26*x28*x29*x31*x34*x35*x39*x40*x44*x45*x46*x49*x50*x51*x52*x56*x59*x61*x63*x65*x66*x67*x71*x74*x76, x2*x4*x5*x8*x10*x11*x12*x14*x19*x21*x22*x23*x25*x29*x31*x32*x34*x38*x39*x41*x42*x44*x45*x48*x49*x52*x53*x55*x57*x60*x62*x63*x67*x70*x73*x74*x77*x80, x1*x5*x10*x12*x13*x18*x21*x22*x24*x26*x27*x28*x29*x30*x32*x33*x35*x36*x39*x42*x50*x51*x52*x54*x57*x58*x60*x62*x65*x67*x70*x73*x74*x75*x78*x79*x80, x3*x7*x9*x10*x12*x13*x14*x19*x20*x21*x22*x23*x26*x29*x31*x33*x34*x35*x36*x37*x38*x39*x41*x43*x44*x47*x52*x53*x55*x63*x64*x65*x66*x71*x72*x73*x79, x1*x2*x5*x6*x8*x10*x11*x14*x16*x17*x18*x19*x20*x22*x23*x26*x29*x31*x32*x33*x34*x35*x38*x39*x40*x41*x47*x48*x52*x57*x58*x59*x60*x61*x63*x64*x65*x66*x72*x73*x74*x75*x76*x77*x78*x80, x2*x5*x9*x11*x12*x14*x15*x17*x19*x22*x23*x25*x27*x28*x29*x31*x34*x35*x36*x38*x39*x40*x44*x45*x47*x49*x50*x52*x54*x55*x56*x61*x62*x63*x64*x65*x66*x67*x68*x69*x70*x71*x72*x73*x74*x80, x1*x2*x4*x9*x11*x12*x13*x14*x15*x16*x17*x19*x20*x22*x23*x26*x27*x28*x29*x33*x34*x39*x40*x41*x43*x46*x48*x49*x50*x51*x53*x54*x55*x56*x57*x59*x62*x67*x68*x71*x72*x75*x80, x1*x2*x3*x7*x8*x10*x12*x16*x17*x18*x19*x24*x25*x27*x30*x33*x35*x36*x38*x41*x43*x46*x49*x50*x52*x53*x55*x57*x62*x63*x65*x66*x67*x68*x69*x71*x72*x73*x74*x75*x76*x79, x1*x2*x4*x6*x7*x18*x20*x21*x26*x27*x29*x30*x31*x32*x34*x36*x38*x41*x42*x44*x45*x49*x50*x51*x55*x56*x57*x58*x63*x66*x68*x69*x70*x71*x72*x75*x77*x78, x1*x2*x4*x5*x6*x7*x9*x10*x12*x15*x17*x18*x19*x20*x21*x22*x23*x28*x29*x32*x33*x34*x37*x40*x41*x45*x46*x47*x48*x50*x55*x57*x58*x62*x64*x65*x66*x67*x69*x71*x73*x75*x76, x4*x5*x7*x13*x15*x16*x18*x19*x21*x22*x25*x27*x29*x30*x31*x32*x34*x35*x39*x40*x43*x44*x45*x47*x51*x54*x56*x62*x65*x72*x73*x74*x75*x77*x78, x5*x7*x8*x12*x13*x15*x16*x19*x20*x22*x24*x25*x27*x29*x35*x36*x41*x42*x43*x45*x51*x53*x55*x57*x58*x61*x62*x63*x65*x66*x68*x71*x73*x74*x78*x80, x1*x3*x8*x11*x13*x18*x19*x20*x21*x22*x23*x24*x25*x28*x29*x33*x35*x37*x40*x42*x46*x48*x49*x51*x54*x55*x56*x57*x58*x59*x60*x66*x67*x70*x72*x74*x75*x76*x79, x1*x2*x3*x4*x7*x10*x12*x13*x17*x18*x19*x21*x23*x25*x26*x31*x32*x33*x34*x38*x40*x41*x42*x44*x45*x46*x49*x50*x51*x54*x55*x57*x58*x59*x60*x61*x62*x64*x65*x68*x69*x70*x71*x72*x73*x75*x79*x80, x4*x5*x6*x7*x12*x14*x16*x17*x21*x22*x23*x26*x28*x29*x30*x31*x33*x34*x35*x36*x37*x38*x39*x40*x41*x44*x46*x48*x49*x54*x56*x57*x58*x60*x62*x63*x68*x69*x71*x72*x76*x78*x79*x80, x1*x3*x4*x5*x10*x13*x14*x20*x21*x22*x23*x28*x30*x32*x33*x34*x35*x36*x39*x40*x42*x45*x46*x47*x48*x53*x56*x62*x63*x64*x65*x66*x67*x68*x70*x71*x72*x73*x74*x75*x76*x77*x78*x79, x2*x4*x7*x8*x12*x13*x16*x17*x18*x21*x22*x25*x28*x29*x30*x31*x32*x33*x34*x35*x36*x37*x39*x40*x44*x45*x48*x50*x51*x53*x54*x57*x59*x61*x62*x66*x68*x69*x70*x71*x72*x73*x74*x76*x77*x79, x1*x3*x5*x6*x7*x12*x13*x14*x15*x18*x19*x20*x21*x22*x23*x24*x27*x28*x29*x30*x32*x33*x35*x37*x38*x40*x41*x46*x47*x50*x52*x55*x59*x63*x64*x66*x70*x71*x73*x74*x75*x77*x79*x80, x2*x6*x9*x13*x14*x18*x19*x22*x23*x24*x25*x26*x33*x35*x36*x40*x41*x42*x45*x47*x50*x51*x53*x54*x57*x61*x64*x65*x66*x67*x69*x70*x72*x74*x75*x76*x77*x78*x80, x1*x2*x3*x8*x9*x13*x18*x19*x21*x22*x25*x26*x27*x35*x36*x37*x39*x41*x42*x43*x45*x46*x47*x48*x49*x51*x52*x55*x59*x61*x62*x64*x65*x66*x67*x70*x76*x77, x1*x3*x4*x5*x7*x8*x9*x10*x11*x13*x15*x16*x17*x19*x22*x23*x27*x28*x30*x34*x36*x38*x40*x41*x42*x43*x44*x45*x46*x47*x49*x50*x51*x55*x57*x58*x59*x65*x66*x67*x69*x73*x75*x79, x1*x4*x5*x8*x9*x11*x13*x16*x19*x20*x21*x24*x25*x27*x28*x30*x31*x32*x33*x34*x35*x37*x38*x40*x41*x43*x45*x47*x49*x55*x56*x57*x59*x62*x68*x70*x72*x73*x76*x77*x78*x79, x3*x9*x10*x11*x12*x13*x15*x16*x17*x19*x21*x24*x26*x28*x30*x32*x35*x37*x38*x40*x43*x46*x47*x50*x52*x56*x59*x61*x63*x65*x67*x68*x69*x72*x73*x75*x76*x77*x79, x1*x5*x7*x12*x13*x14*x21*x22*x29*x31*x33*x36*x37*x38*x40*x42*x43*x45*x46*x47*x49*x50*x52*x55*x59*x61*x62*x63*x68*x71*x73*x75*x76*x77*x78*x80, x1*x2*x3*x4*x5*x6*x8*x11*x12*x14*x16*x18*x19*x20*x21*x23*x25*x27*x29*x30*x34*x36*x40*x41*x43*x44*x48*x51*x53*x58*x59*x62*x63*x64*x68*x69*x71*x72*x73*x75*x76*x77*x79*x80, x2*x4*x6*x7*x12*x17*x20*x27*x33*x34*x35*x37*x41*x50*x52*x53*x59*x61*x63*x66*x67*x68*x69*x70*x71*x73*x75*x76*x77, x1*x4*x5*x7*x9*x14*x15*x17*x18*x19*x20*x25*x26*x28*x29*x30*x32*x35*x37*x39*x42*x43*x44*x47*x48*x50*x51*x52*x54*x56*x60*x61*x62*x63*x64*x65*x67*x68*x69*x70*x72*x74*x75*x77*x79, x1*x2*x3*x4*x6*x10*x12*x15*x16*x19*x20*x22*x27*x29*x35*x37*x38*x44*x45*x54*x56*x57*x58*x59*x63*x66*x67*x68*x70*x71*x73*x76*x77*x78, x1*x2*x4*x5*x9*x10*x11*x14*x16*x17*x20*x21*x22*x27*x28*x29*x32*x35*x36*x38*x39*x41*x42*x44*x50*x51*x57*x60*x61*x63*x64*x70*x71*x72*x73*x75*x77*x78*x79, x1*x2*x3*x5*x12*x13*x14*x17*x18*x22*x23*x26*x29*x35*x36*x37*x38*x40*x42*x43*x45*x46*x47*x48*x50*x54*x57*x58*x59*x60*x62*x64*x69*x71*x72*x73*x75*x76*x77*x78*x79, x2*x4*x7*x8*x9*x11*x12*x14*x16*x18*x20*x21*x25*x29*x31*x32*x34*x36*x37*x38*x40*x41*x45*x46*x47*x48*x50*x52*x55*x56*x57*x58*x59*x60*x61*x63*x64*x66*x69*x73*x74*x77*x79*x80, x1*x2*x3*x4*x5*x6*x7*x9*x11*x12*x14*x15*x20*x22*x24*x26*x30*x31*x32*x33*x38*x43*x44*x45*x46*x49*x50*x52*x53*x54*x55*x56*x59*x60*x61*x62*x64*x65*x66*x67*x68*x69*x70*x71*x73*x75*x76, x1*x2*x3*x5*x6*x8*x9*x10*x11*x12*x15*x16*x18*x19*x22*x24*x26*x31*x34*x36*x37*x38*x39*x40*x42*x43*x44*x46*x51*x52*x53*x63*x64*x67*x68*x71*x72*x76*x78*x79, x1*x2*x3*x4*x5*x6*x11*x12*x13*x15*x16*x20*x22*x24*x26*x31*x32*x39*x46*x47*x49*x50*x51*x54*x55*x62*x65*x68*x69*x70*x72*x76*x78*x79, x1*x6*x7*x10*x11*x13*x14*x16*x17*x18*x20*x21*x22*x26*x27*x29*x31*x32*x33*x35*x38*x39*x42*x43*x44*x46*x47*x50*x52*x53*x55*x56*x57*x58*x59*x60*x64*x65*x68*x71*x76*x77*x80, x1*x10*x13*x14*x16*x17*x19*x23*x27*x29*x34*x36*x39*x40*x41*x42*x43*x47*x49*x50*x53*x55*x56*x57*x61*x63*x65*x66*x68*x69*x70*x71*x72*x74*x75*x76*x78, x2*x10*x12*x16*x17*x18*x22*x23*x24*x25*x29*x31*x33*x36*x39*x44*x47*x49*x50*x52*x53*x56*x58*x59*x60*x61*x62*x63*x64*x65*x66*x67*x69*x70*x72*x76*x77*x80, x1*x3*x4*x6*x9*x10*x12*x13*x14*x17*x19*x23*x24*x25*x27*x29*x30*x33*x34*x35*x36*x37*x38*x39*x41*x42*x43*x44*x45*x47*x48*x49*x51*x54*x56*x58*x59*x61*x62*x64*x66*x67*x69*x70*x71*x73*x74*x76*x77*x78, x2*x5*x6*x7*x10*x11*x12*x14*x15*x16*x19*x21*x23*x24*x25*x27*x28*x30*x31*x32*x33*x35*x36*x37*x38*x39*x41*x42*x46*x47*x48*x51*x52*x53*x56*x58*x59*x61*x63*x67*x69*x70*x71*x72*x73*x75*x76*x79, x1*x2*x3*x9*x11*x12*x15*x19*x23*x29*x30*x32*x35*x38*x39*x40*x41*x42*x49*x50*x51*x52*x53*x56*x57*x58*x59*x62*x63*x66*x70*x71*x73*x74*x78, x1*x3*x6*x7*x8*x10*x13*x16*x19*x21*x22*x23*x24*x25*x27*x32*x33*x36*x37*x39*x40*x43*x45*x46*x48*x49*x50*x51*x56*x57*x58*x59*x60*x64*x66*x70*x71*x72*x73*x75*x76*x77*x78, x2*x7*x11*x13*x14*x15*x18*x19*x20*x21*x25*x32*x33*x36*x37*x40*x41*x42*x45*x46*x49*x50*x51*x52*x57*x59*x60*x61*x62*x69*x70*x75*x77*x78*x79*x80, x2*x4*x6*x7*x8*x9*x10*x14*x16*x17*x22*x23*x24*x25*x27*x28*x29*x32*x36*x37*x38*x45*x46*x47*x48*x50*x51*x55*x56*x57*x60*x61*x62*x63*x65*x66*x71*x72*x74*x76*x77*x79, x1*x2*x3*x6*x8*x10*x11*x13*x14*x15*x16*x18*x26*x28*x29*x30*x32*x33*x35*x38*x39*x41*x43*x44*x46*x49*x50*x51*x57*x58*x60*x62*x64*x65*x67*x68*x70*x72*x73*x75*x78, x2*x4*x5*x7*x9*x10*x11*x12*x13*x22*x23*x24*x25*x29*x30*x33*x34*x38*x41*x42*x45*x47*x53*x54*x57*x58*x60*x62*x63*x67*x72*x75*x76*x77*x79, x1*x3*x5*x6*x7*x8*x10*x14*x16*x19*x22*x24*x25*x26*x28*x30*x31*x35*x36*x37*x39*x41*x42*x43*x45*x47*x48*x49*x50*x51*x52*x55*x56*x60*x61*x62*x63*x64*x65*x70*x71*x72*x74*x76*x77, x1*x2*x4*x5*x7*x11*x14*x15*x16*x17*x24*x27*x29*x30*x34*x38*x39*x43*x44*x45*x46*x50*x51*x56*x57*x58*x60*x65*x66*x69*x70*x72*x73*x77*x78*x79*x80, x1*x2*x4*x6*x8*x10*x13*x14*x16*x17*x18*x20*x21*x23*x25*x27*x29*x30*x32*x34*x39*x45*x47*x48*x49*x51*x52*x53*x54*x55*x56*x57*x61*x63*x64*x66*x68*x73*x74*x76*x80, x1*x4*x6*x9*x12*x15*x16*x18*x19*x20*x21*x23*x24*x25*x28*x29*x35*x36*x37*x39*x43*x46*x49*x51*x54*x61*x62*x65*x66*x71*x72*x74*x75*x78*x80, x2*x6*x7*x8*x9*x14*x15*x16*x17*x19*x21*x22*x26*x27*x28*x29*x30*x35*x36*x39*x42*x43*x44*x47*x48*x49*x51*x53*x61*x62*x68*x75*x80, x1*x4*x7*x8*x9*x16*x18*x19*x21*x24*x25*x26*x27*x30*x31*x36*x37*x38*x39*x40*x41*x42*x49*x51*x54*x56*x57*x58*x59*x61*x62*x63*x64*x65*x66*x67*x68*x70*x72*x76*x77*x78*x79, x2*x4*x5*x6*x8*x11*x14*x15*x16*x17*x24*x27*x28*x29*x32*x34*x35*x38*x39*x40*x41*x42*x43*x47*x48*x51*x53*x58*x60*x61*x63*x66*x70*x72*x73*x74*x75*x79, x3*x4*x5*x10*x12*x15*x18*x19*x22*x24*x26*x27*x28*x29*x30*x31*x32*x33*x35*x36*x38*x39*x43*x44*x45*x46*x50*x51*x52*x53*x54*x55*x57*x58*x59*x65*x66*x70*x71*x73*x75, x2*x5*x7*x9*x10*x12*x13*x14*x16*x17*x19*x22*x23*x25*x27*x28*x31*x33*x34*x35*x38*x39*x42*x43*x48*x49*x51*x56*x58*x62*x63*x65*x67*x69*x70*x76*x78*x79*x80, x1*x2*x3*x5*x9*x10*x15*x16*x17*x18*x23*x24*x25*x26*x28*x29*x31*x33*x39*x40*x44*x45*x46*x47*x49*x51*x52*x55*x56*x57*x58*x59*x60*x62*x67*x68*x69*x71*x74*x76*x78*x79, x2*x3*x6*x10*x16*x22*x27*x28*x30*x33*x35*x37*x45*x46*x48*x49*x50*x53*x54*x55*x59*x60*x61*x62*x64*x66*x68*x69*x70*x71*x72*x74*x75*x78*x80, x1*x5*x6*x8*x9*x15*x16*x18*x19*x23*x24*x27*x28*x30*x33*x34*x37*x39*x40*x41*x42*x47*x51*x55*x57*x58*x59*x60*x63*x64*x65*x66*x69*x71*x72*x76*x77*x78*x80, x5*x10*x11*x13*x14*x16*x18*x19*x22*x24*x25*x26*x27*x32*x35*x36*x37*x38*x39*x40*x41*x43*x45*x46*x49*x50*x51*x53*x54*x56*x59*x60*x62*x63*x64*x66*x67*x71*x74*x76*x77*x78, x5*x7*x8*x11*x12*x13*x17*x18*x19*x22*x23*x25*x26*x27*x29*x30*x33*x35*x36*x38*x40*x41*x42*x43*x44*x46*x47*x48*x49*x52*x53*x56*x57*x58*x59*x60*x61*x62*x65*x66*x67*x70*x71*x74*x75*x76*x77*x78*x79*x80, x2*x3*x6*x7*x8*x9*x10*x14*x15*x18*x19*x21*x22*x23*x26*x28*x29*x30*x32*x33*x34*x36*x37*x38*x42*x43*x45*x46*x48*x50*x51*x52*x53*x54*x55*x57*x58*x60*x63*x64*x65*x67*x69*x72*x74, x1*x2*x16*x17*x18*x20*x21*x23*x24*x25*x27*x28*x30*x32*x36*x37*x42*x45*x46*x48*x51*x52*x54*x56*x57*x58*x59*x60*x61*x62*x63*x66*x67*x68*x70*x71*x72*x73*x76, x1*x2*x3*x4*x9*x10*x15*x16*x17*x18*x20*x21*x25*x26*x27*x31*x32*x36*x37*x38*x39*x40*x41*x43*x44*x45*x46*x48*x49*x50*x51*x52*x54*x59*x61*x63*x64*x66*x67*x69*x71*x72*x75*x76, x1*x3*x4*x5*x9*x14*x15*x18*x19*x24*x25*x27*x30*x31*x36*x37*x38*x40*x42*x47*x51*x54*x56*x57*x58*x59*x60*x62*x63*x64*x66*x67*x72*x73*x75*x76*x78*x79, x1*x2*x4*x5*x6*x14*x15*x17*x22*x25*x27*x28*x33*x36*x37*x38*x39*x42*x43*x48*x51*x52*x57*x59*x63*x64*x65*x67*x71*x74*x76*x79*x80, x1*x2*x4*x5*x6*x7*x9*x10*x11*x12*x13*x14*x16*x18*x19*x22*x23*x26*x27*x28*x29*x30*x31*x34*x36*x37*x38*x41*x42*x44*x46*x48*x49*x50*x51*x52*x54*x55*x56*x57*x58*x59*x60*x61*x62*x65*x66*x67*x71*x74*x75*x76*x77*x79, x1*x4*x6*x8*x9*x12*x15*x16*x17*x18*x19*x20*x22*x23*x26*x27*x28*x30*x32*x34*x35*x37*x39*x42*x44*x45*x46*x47*x49*x53*x54*x55*x59*x61*x62*x63*x67*x68*x71*x72*x73*x74*x75*x79, x3*x4*x5*x6*x7*x8*x11*x12*x13*x16*x17*x19*x20*x21*x24*x25*x26*x28*x33*x35*x37*x41*x47*x51*x54*x55*x56*x57*x58*x59*x61*x67*x69*x70*x71*x72*x76*x77, x2*x4*x6*x7*x8*x9*x10*x11*x13*x16*x19*x20*x21*x26*x31*x34*x38*x39*x41*x43*x44*x45*x46*x47*x50*x51*x52*x53*x54*x56*x58*x59*x61*x62*x65*x66*x67*x69*x72*x76*x78*x79*x80, x4*x6*x7*x12*x13*x15*x18*x20*x26*x29*x31*x34*x37*x39*x40*x42*x46*x49*x59*x61*x64*x65*x68*x70*x73*x75*x76*x80, x1*x2*x3*x4*x6*x9*x12*x14*x15*x17*x20*x21*x22*x23*x25*x27*x28*x29*x30*x33*x37*x38*x41*x42*x45*x46*x47*x48*x52*x54*x56*x59*x61*x62*x64*x70*x73*x76*x77*x78, x1*x2*x3*x4*x5*x8*x10*x13*x14*x15*x16*x17*x19*x20*x21*x24*x26*x28*x29*x32*x33*x35*x36*x38*x40*x41*x42*x43*x44*x47*x48*x52*x57*x58*x60*x63*x65*x66*x70*x71*x72*x75*x76, x2*x5*x7*x8*x9*x10*x12*x14*x15*x16*x18*x19*x24*x25*x26*x27*x29*x33*x37*x38*x40*x41*x43*x44*x46*x47*x48*x49*x50*x52*x53*x54*x55*x56*x57*x58*x59*x60*x62*x63*x66*x72*x74*x75*x77, x2*x4*x5*x9*x11*x12*x16*x17*x18*x23*x26*x27*x29*x30*x31*x32*x35*x36*x37*x38*x39*x40*x42*x43*x44*x48*x49*x53*x54*x55*x56*x57*x58*x59*x61*x62*x63*x64*x65*x68*x69*x70*x72*x74*x75*x77*x79*x80, x6*x7*x9*x10*x11*x13*x14*x15*x16*x17*x18*x19*x20*x21*x22*x24*x25*x26*x28*x29*x30*x33*x38*x40*x41*x44*x51*x52*x54*x55*x56*x57*x58*x59*x60*x61*x62*x63*x65*x66*x69*x70*x71*x72*x73*x74*x75*x76*x79, x1*x2*x4*x5*x12*x14*x15*x17*x18*x20*x21*x22*x23*x24*x25*x26*x27*x28*x30*x35*x36*x37*x38*x41*x42*x46*x48*x51*x53*x54*x55*x56*x58*x60*x63*x64*x65*x66*x67*x71*x73*x74*x75*x79*x80, x1*x3*x5*x6*x12*x13*x14*x15*x17*x18*x19*x21*x22*x25*x28*x29*x31*x35*x37*x41*x42*x43*x45*x46*x47*x49*x50*x52*x53*x57*x58*x59*x60*x61*x63*x64*x65*x69*x70*x74*x77*x78*x79, x4*x5*x6*x7*x8*x9*x10*x11*x12*x14*x15*x17*x24*x25*x28*x30*x31*x32*x34*x46*x49*x53*x54*x55*x56*x60*x61*x62*x63*x64*x66*x68*x69*x74*x76*x77*x79*x80, x2*x3*x5*x6*x7*x11*x12*x13*x14*x15*x18*x19*x20*x21*x23*x25*x26*x27*x33*x34*x35*x38*x39*x42*x45*x46*x47*x48*x49*x51*x52*x53*x55*x62*x63*x65*x66*x70*x71*x75*x76*x79*x80, x1*x2*x4*x5*x9*x11*x16*x17*x18*x19*x24*x26*x27*x28*x30*x31*x32*x34*x35*x36*x37*x39*x40*x41*x43*x44*x45*x46*x49*x50*x52*x53*x54*x55*x57*x58*x59*x61*x63*x64*x69*x70*x71*x72*x73*x74*x77*x78, x2*x4*x5*x6*x7*x8*x9*x12*x13*x14*x16*x17*x18*x19*x20*x21*x22*x23*x24*x25*x26*x27*x28*x34*x35*x41*x42*x45*x46*x48*x50*x52*x54*x55*x58*x59*x60*x61*x63*x67*x71*x72*x73*x75*x77, x1*x4*x7*x10*x13*x16*x17*x19*x21*x22*x24*x27*x28*x29*x31*x33*x34*x35*x37*x40*x45*x46*x49*x52*x53*x59*x60*x61*x62*x63*x65*x69*x70*x71*x76*x78*x79, x1*x7*x8*x9*x10*x11*x14*x15*x16*x19*x20*x22*x23*x24*x26*x27*x30*x31*x32*x34*x38*x39*x41*x43*x48*x49*x50*x55*x57*x59*x60*x61*x64*x65*x66*x71*x75*x78*x79, x1*x7*x8*x9*x11*x13*x15*x17*x20*x28*x29*x31*x32*x35*x36*x37*x38*x40*x42*x43*x47*x49*x50*x52*x54*x57*x58*x59*x62*x63*x64*x66*x68*x69*x74*x75*x76*x77*x78, x2*x3*x4*x6*x7*x8*x9*x10*x12*x13*x14*x18*x20*x23*x25*x28*x29*x30*x31*x32*x33*x34*x35*x42*x44*x45*x46*x47*x51*x53*x55*x56*x57*x59*x60*x64*x65*x66*x67*x68*x69*x70*x71*x72*x74*x75*x77*x79, x2*x3*x4*x5*x6*x7*x8*x9*x11*x14*x15*x17*x20*x21*x24*x25*x26*x27*x30*x34*x39*x41*x42*x43*x44*x46*x48*x51*x52*x54*x56*x57*x61*x63*x66*x69*x71*x75*x76*x77*x79*x80, x6*x7*x8*x9*x10*x12*x14*x15*x16*x23*x26*x27*x28*x31*x32*x33*x35*x38*x42*x43*x51*x53*x54*x55*x57*x58*x61*x62*x63*x64*x66*x68*x69*x70*x71*x73*x74*x76*x78*x80, x1*x2*x4*x8*x9*x12*x17*x20*x22*x23*x25*x28*x29*x30*x33*x34*x37*x38*x39*x40*x41*x42*x44*x46*x47*x48*x54*x55*x56*x60*x61*x62*x63*x64*x65*x66*x67*x68*x69*x70*x71*x74*x75*x78, x1*x2*x4*x5*x6*x7*x9*x10*x11*x14*x15*x18*x22*x24*x25*x26*x27*x28*x30*x31*x34*x35*x36*x37*x38*x40*x41*x42*x43*x44*x45*x48*x49*x50*x52*x53*x55*x56*x59*x60*x61*x62*x65*x68*x70*x76*x77*x80, x1*x2*x4*x7*x8*x12*x20*x21*x23*x27*x28*x30*x35*x36*x40*x41*x45*x46*x48*x50*x51*x52*x53*x59*x64*x67*x69*x72*x73*x76*x80, x1*x2*x3*x4*x7*x12*x13*x15*x20*x23*x25*x27*x33*x37*x38*x43*x45*x48*x50*x51*x56*x57*x59*x60*x61*x63*x66*x67*x69*x71*x77*x79*x80, x1*x2*x3*x4*x5*x6*x9*x10*x12*x13*x16*x17*x18*x20*x21*x22*x24*x25*x26*x31*x33*x35*x36*x38*x43*x45*x47*x49*x50*x53*x55*x57*x58*x59*x62*x65*x66*x67*x70*x71*x73*x76*x77*x78*x79*x80, x1*x2*x3*x4*x5*x10*x14*x15*x16*x17*x20*x23*x25*x26*x31*x33*x34*x36*x37*x38*x40*x41*x43*x44*x46*x52*x54*x58*x63*x64*x65*x71*x74*x75*x76*x77, x1*x3*x5*x7*x9*x11*x12*x13*x14*x15*x17*x18*x19*x25*x26*x30*x31*x33*x35*x39*x40*x41*x44*x45*x48*x51*x52*x53*x55*x58*x59*x63*x64*x66*x67*x69*x70*x71*x72*x76*x78*x80, x2*x5*x6*x7*x9*x13*x16*x18*x19*x20*x21*x22*x25*x28*x30*x32*x35*x36*x40*x43*x44*x46*x47*x50*x51*x52*x54*x55*x58*x59*x60*x62*x64*x65*x66*x68*x69*x70*x72*x73*x76*x77*x78*x79, x2*x3*x4*x5*x6*x7*x10*x11*x12*x13*x14*x15*x16*x17*x18*x19*x21*x22*x23*x24*x25*x26*x27*x30*x33*x36*x37*x38*x39*x41*x43*x46*x50*x51*x52*x57*x58*x59*x60*x61*x62*x63*x64*x65*x67*x68*x69*x70*x72*x73*x75*x76, x2*x3*x4*x5*x6*x8*x10*x12*x13*x14*x15*x16*x17*x18*x19*x22*x25*x27*x29*x30*x32*x34*x40*x41*x42*x44*x45*x47*x50*x51*x52*x55*x56*x57*x58*x59*x60*x62*x64*x65*x66*x70*x71*x75*x77*x78*x79*x80, x1*x2*x3*x7*x10*x13*x15*x16*x17*x18*x24*x25*x26*x28*x29*x33*x36*x38*x45*x47*x49*x56*x59*x60*x67*x69*x72*x77*x78*x80, x1*x2*x3*x6*x12*x14*x15*x20*x22*x24*x27*x28*x29*x30*x31*x36*x38*x40*x41*x43*x44*x45*x46*x48*x49*x51*x53*x54*x57*x58*x59*x60*x62*x64*x68*x71*x73*x74*x76*x77*x79, x1*x5*x6*x7*x8*x9*x10*x12*x16*x22*x23*x25*x29*x33*x34*x36*x37*x38*x39*x40*x46*x47*x49*x51*x52*x53*x54*x56*x58*x59*x60*x62*x63*x65*x66*x67*x70*x71*x72*x73*x75*x76*x78, x1*x4*x5*x6*x7*x8*x9*x13*x14*x17*x20*x23*x25*x27*x28*x30*x31*x35*x37*x38*x39*x40*x41*x43*x46*x48*x49*x51*x57*x63*x64*x67*x71*x74*x75*x76*x77*x78*x79, x1*x2*x4*x5*x7*x8*x13*x14*x18*x21*x23*x24*x25*x27*x29*x30*x34*x39*x40*x41*x42*x44*x45*x47*x49*x50*x51*x52*x53*x54*x55*x59*x61*x64*x65*x67*x72*x76*x77*x78*x79, x2*x3*x4*x8*x11*x13*x14*x16*x17*x20*x21*x23*x26*x27*x29*x30*x33*x34*x39*x40*x42*x44*x46*x47*x48*x49*x54*x55*x59*x60*x61*x62*x63*x64*x66*x67*x69*x70*x71*x74*x75*x76*x77*x80, x2*x4*x5*x8*x14*x15*x17*x18*x21*x22*x31*x34*x35*x36*x37*x38*x39*x40*x41*x42*x43*x48*x51*x54*x55*x57*x59*x60*x64*x66*x67*x71*x72*x74*x76*x80, x1*x2*x3*x5*x7*x9*x10*x11*x13*x17*x19*x20*x26*x31*x32*x39*x41*x46*x47*x49*x50*x51*x52*x53*x54*x58*x59*x60*x65*x69*x77*x78*x79, x1*x3*x6*x9*x11*x15*x17*x18*x20*x21*x25*x26*x27*x29*x30*x31*x32*x34*x35*x37*x39*x40*x41*x43*x44*x50*x51*x52*x54*x56*x59*x61*x62*x63*x66*x69*x72*x73*x74*x78*x79, x2*x3*x4*x6*x7*x9*x14*x15*x16*x18*x19*x20*x23*x24*x26*x27*x30*x32*x35*x39*x40*x42*x45*x50*x53*x54*x56*x63*x64*x66*x67*x68*x70*x73*x75*x76*x78*x80, x2*x3*x4*x9*x10*x13*x14*x15*x17*x18*x19*x21*x22*x23*x25*x26*x27*x28*x33*x34*x35*x37*x38*x39*x43*x45*x46*x49*x50*x51*x52*x53*x54*x58*x60*x62*x63*x68*x69*x70*x71*x72*x73*x75*x77*x78*x79*x80, x2*x8*x9*x10*x11*x12*x13*x14*x15*x16*x18*x19*x21*x22*x23*x26*x28*x30*x32*x34*x35*x37*x39*x44*x45*x46*x48*x49*x51*x54*x56*x57*x58*x59*x61*x62*x63*x65*x66*x68*x72*x73*x74*x75*x78*x80, x2*x3*x7*x8*x9*x10*x11*x12*x13*x14*x17*x18*x19*x21*x22*x24*x25*x26*x27*x30*x32*x34*x37*x40*x42*x43*x45*x48*x51*x57*x58*x61*x66*x68*x70*x72*x73*x75*x77, x1*x5*x6*x14*x15*x16*x17*x20*x22*x25*x27*x33*x36*x38*x40*x42*x43*x44*x45*x46*x50*x51*x55*x56*x58*x60*x61*x63*x64*x66*x68*x69*x72*x74*x75*x78*x80, x2*x4*x5*x7*x9*x10*x11*x12*x15*x16*x17*x18*x19*x20*x25*x27*x33*x35*x39*x40*x41*x45*x48*x51*x52*x53*x54*x55*x57*x58*x59*x60*x62*x65*x67*x72*x73, x2*x4*x6*x10*x13*x16*x18*x20*x21*x24*x25*x29*x31*x32*x35*x39*x40*x41*x42*x48*x49*x55*x56*x61*x62*x67*x68*x69*x70*x72*x73*x76*x78, x5*x7*x13*x15*x16*x18*x19*x20*x24*x26*x31*x32*x34*x35*x38*x39*x42*x45*x46*x47*x49*x50*x51*x52*x54*x56*x58*x59*x61*x62*x64*x65*x66*x69*x70*x73*x74*x76*x79, x4*x5*x7*x8*x14*x20*x21*x22*x26*x31*x35*x37*x38*x40*x41*x42*x43*x45*x47*x50*x51*x53*x56*x60*x61*x63*x64*x65*x69*x71*x72*x73*x74*x76*x77, x1*x4*x5*x7*x9*x10*x11*x12*x13*x15*x17*x18*x19*x20*x21*x25*x26*x28*x29*x30*x32*x36*x37*x39*x40*x43*x44*x45*x47*x48*x49*x50*x52*x53*x55*x57*x58*x59*x64*x65*x66*x69*x72*x75*x76*x77*x78*x79, x1*x2*x3*x7*x10*x11*x15*x16*x17*x20*x21*x26*x28*x29*x30*x31*x34*x36*x37*x41*x42*x45*x46*x47*x49*x50*x51*x53*x55*x56*x57*x62*x63*x64*x69*x70*x72*x74*x75*x76, x1*x2*x3*x6*x7*x9*x10*x12*x13*x16*x19*x22*x27*x28*x30*x35*x36*x39*x41*x46*x47*x49*x50*x51*x52*x54*x55*x56*x57*x60*x62*x64*x65*x67*x68*x69*x71*x72*x76*x78*x79*x80, x2*x5*x6*x9*x11*x12*x15*x16*x18*x20*x21*x22*x24*x27*x28*x29*x30*x31*x34*x39*x40*x41*x46*x48*x49*x50*x52*x53*x56*x59*x61*x64*x68*x80, x8*x9*x11*x13*x16*x18*x19*x20*x22*x25*x26*x27*x28*x33*x35*x36*x37*x41*x42*x45*x49*x52*x53*x55*x56*x57*x58*x60*x61*x62*x63*x64*x67*x68*x72*x76*x77, x1*x2*x4*x6*x7*x8*x10*x11*x12*x16*x18*x19*x20*x21*x22*x26*x27*x28*x30*x31*x33*x36*x37*x39*x40*x42*x46*x48*x51*x52*x53*x54*x58*x59*x62*x67*x69*x75*x76*x77*x79, x2*x3*x6*x8*x9*x11*x12*x13*x17*x19*x20*x21*x24*x28*x29*x30*x31*x33*x35*x36*x38*x39*x41*x42*x43*x44*x50*x52*x55*x59*x61*x63*x64*x65*x67*x68*x69*x71*x73*x77*x79, x1*x4*x6*x8*x9*x10*x14*x16*x19*x21*x24*x25*x26*x28*x36*x42*x45*x47*x48*x49*x50*x53*x55*x60*x64*x65*x66*x67*x72*x78, x1*x2*x4*x7*x8*x9*x10*x11*x14*x20*x23*x30*x31*x32*x35*x36*x37*x39*x40*x41*x42*x43*x44*x45*x46*x47*x48*x51*x54*x55*x59*x63*x65*x68*x69*x70*x74*x76*x78, x2*x5*x6*x9*x10*x12*x13*x15*x17*x19*x20*x22*x23*x24*x25*x27*x29*x30*x31*x33*x34*x35*x38*x40*x42*x46*x48*x52*x53*x55*x58*x59*x65*x67*x69*x70*x73*x75*x76*x77*x78, x1*x5*x11*x12*x17*x18*x22*x23*x25*x26*x27*x31*x34*x36*x37*x43*x44*x45*x49*x50*x55*x56*x57*x58*x59*x60*x62*x64*x67*x70*x72*x73*x74*x75*x76, x1*x3*x6*x7*x8*x9*x10*x15*x17*x19*x20*x28*x31*x36*x37*x39*x40*x43*x46*x47*x49*x51*x52*x56*x57*x58*x59*x60*x61*x62*x65*x66*x68*x69*x70*x71*x73*x75*x77*x79, x1*x3*x5*x12*x17*x18*x22*x23*x26*x28*x29*x30*x31*x33*x35*x36*x38*x39*x40*x41*x43*x44*x45*x47*x48*x51*x54*x57*x58*x59*x61*x62*x63*x64*x65*x68*x71*x74*x76*x77*x79*x80, x4*x5*x8*x9*x14*x20*x21*x22*x26*x29*x30*x31*x32*x33*x36*x37*x39*x42*x45*x47*x53*x54*x55*x56*x60*x61*x63*x68*x69*x71*x75*x76*x77*x78*x79, x1*x2*x3*x6*x8*x9*x11*x14*x21*x24*x26*x27*x28*x31*x32*x33*x36*x38*x41*x45*x46*x47*x55*x57*x61*x64*x67*x68*x70*x71*x73*x75*x77*x78*x79*x80, x2*x8*x9*x10*x13*x14*x16*x17*x18*x19*x22*x25*x27*x28*x29*x30*x32*x35*x37*x38*x41*x51*x56*x60*x64*x69*x79, x1*x3*x5*x8*x9*x10*x11*x12*x13*x14*x15*x16*x17*x19*x20*x21*x23*x24*x25*x31*x37*x38*x39*x40*x41*x42*x47*x51*x56*x57*x59*x60*x65*x66*x67*x70*x71*x73*x75*x77*x78, x1*x6*x8*x9*x10*x11*x14*x16*x17*x19*x20*x21*x22*x25*x26*x31*x33*x35*x36*x38*x39*x40*x41*x43*x44*x45*x46*x50*x51*x54*x55*x56*x57*x58*x64*x67*x69*x71*x73*x75*x76*x77*x78*x79, x2*x3*x4*x5*x6*x9*x10*x11*x13*x15*x16*x17*x18*x19*x20*x21*x23*x25*x27*x28*x29*x36*x41*x42*x43*x44*x45*x46*x48*x50*x53*x54*x55*x57*x60*x61*x62*x66*x67*x68*x69*x70*x73*x75*x78, x2*x12*x13*x20*x22*x24*x26*x27*x29*x30*x31*x33*x41*x43*x44*x45*x46*x48*x52*x54*x55*x56*x59*x60*x64*x67*x68*x69*x71*x75*x76*x77*x78*x79, x1*x4*x6*x9*x12*x13*x14*x17*x18*x20*x21*x24*x25*x26*x27*x29*x31*x32*x34*x35*x36*x38*x39*x41*x42*x43*x45*x46*x47*x49*x51*x52*x54*x55*x56*x59*x66*x67*x68*x72*x73*x74*x76, x1*x4*x5*x6*x7*x8*x9*x11*x12*x13*x16*x19*x20*x21*x24*x25*x27*x28*x29*x32*x33*x35*x36*x39*x40*x42*x43*x45*x48*x51*x52*x53*x54*x55*x56*x57*x59*x60*x65*x67*x68*x69*x74*x78*x80, x1*x4*x5*x6*x8*x11*x12*x13*x16*x18*x19*x21*x27*x29*x32*x33*x35*x36*x37*x40*x43*x44*x45*x48*x49*x51*x52*x53*x54*x55*x56*x58*x59*x60*x64*x65*x67*x69*x70*x71*x72*x74*x75*x77*x78*x79*x80, x1*x2*x4*x9*x10*x14*x15*x17*x19*x20*x21*x22*x23*x24*x25*x31*x32*x37*x40*x41*x45*x46*x47*x49*x51*x54*x58*x61*x63*x64*x65*x67*x70*x71*x72*x73*x74*x79, x3*x5*x6*x8*x11*x13*x14*x15*x17*x19*x20*x25*x26*x27*x28*x30*x33*x34*x35*x36*x37*x38*x40*x41*x43*x44*x45*x46*x47*x48*x51*x52*x53*x54*x58*x59*x60*x64*x67*x69*x72*x73*x74*x75, x3*x4*x5*x6*x7*x11*x13*x14*x16*x17*x18*x20*x21*x22*x23*x25*x26*x27*x28*x29*x33*x34*x35*x36*x37*x38*x39*x42*x43*x44*x45*x48*x49*x51*x52*x53*x56*x57*x58*x62*x64*x70*x71*x72*x74*x75*x79, x1*x3*x7*x11*x13*x15*x16*x17*x18*x19*x20*x21*x23*x28*x29*x30*x32*x36*x42*x49*x54*x56*x57*x58*x59*x60*x61*x64*x65*x68*x69*x70*x72*x73*x74*x77*x80, x2*x3*x4*x5*x7*x9*x10*x11*x12*x14*x18*x19*x25*x26*x27*x30*x31*x32*x33*x40*x41*x42*x43*x44*x45*x46*x49*x51*x53*x54*x55*x58*x61*x66*x67*x69*x70*x73*x74*x77*x78*x79*x80, x5*x7*x8*x10*x11*x14*x15*x18*x19*x21*x24*x27*x33*x35*x38*x40*x42*x45*x48*x49*x50*x51*x52*x54*x55*x56*x58*x59*x61*x62*x65*x66*x68*x72*x74*x75*x76*x77*x79*x80, x1*x2*x3*x5*x6*x9*x10*x11*x14*x16*x17*x20*x21*x25*x27*x31*x32*x33*x34*x36*x37*x39*x41*x42*x44*x45*x50*x51*x54*x57*x58*x59*x60*x64*x65*x69*x70*x72*x74*x79, x4*x5*x7*x8*x11*x12*x14*x16*x19*x21*x22*x24*x25*x28*x30*x31*x32*x33*x36*x38*x39*x40*x43*x45*x49*x51*x53*x54*x55*x56*x57*x60*x62*x64*x67*x69*x73*x75*x76*x77*x78*x79*x80, x1*x2*x5*x7*x8*x11*x12*x13*x15*x16*x17*x18*x19*x20*x21*x23*x24*x26*x28*x29*x30*x33*x34*x36*x38*x39*x40*x41*x42*x44*x45*x49*x50*x52*x53*x56*x57*x59*x61*x64*x65*x66*x69*x72*x74*x75*x76*x77*x80, x4*x5*x9*x11*x12*x13*x14*x18*x19*x24*x28*x32*x33*x34*x37*x39*x40*x42*x45*x48*x53*x54*x56*x57*x58*x66*x67*x69*x70*x71*x75*x78*x79, x1*x2*x5*x8*x9*x10*x13*x14*x16*x19*x21*x22*x23*x24*x30*x32*x34*x37*x38*x40*x41*x42*x43*x44*x47*x49*x50*x51*x53*x56*x58*x61*x62*x63*x64*x67*x68*x69*x70*x74*x75*x77, x2*x3*x8*x14*x16*x17*x18*x19*x23*x26*x27*x29*x30*x35*x38*x40*x42*x44*x45*x48*x49*x53*x59*x60*x64*x67*x70*x71*x72*x73*x74*x75*x76*x77, x1*x2*x3*x4*x9*x11*x14*x15*x18*x24*x25*x28*x29*x31*x32*x35*x38*x39*x40*x41*x42*x45*x47*x48*x49*x53*x54*x56*x58*x61*x66*x73*x76, x2*x3*x8*x9*x12*x13*x14*x16*x17*x20*x22*x23*x24*x25*x29*x31*x32*x33*x36*x37*x38*x39*x40*x46*x47*x50*x52*x53*x55*x57*x58*x63*x64*x65*x67*x68*x69*x71*x72*x73*x75*x76*x77*x80, x1*x2*x3*x5*x9*x10*x14*x16*x19*x20*x22*x23*x26*x28*x30*x31*x34*x35*x36*x38*x43*x44*x45*x46*x47*x48*x49*x50*x51*x53*x57*x58*x59*x60*x62*x64*x65*x68*x70*x71*x72*x73*x76*x77*x80, x2*x3*x7*x9*x10*x11*x12*x13*x14*x17*x19*x21*x22*x23*x24*x26*x30*x31*x33*x34*x35*x43*x46*x48*x51*x54*x56*x57*x58*x59*x60*x61*x62*x64*x65*x68*x72*x75*x76*x78*x79*x80, x2*x3*x4*x5*x8*x11*x13*x15*x18*x22*x26*x29*x34*x36*x37*x39*x40*x41*x44*x47*x48*x50*x52*x53*x57*x58*x61*x63*x64*x65*x66*x67*x68*x69*x70*x72*x73*x77, x3*x5*x6*x9*x11*x15*x16*x18*x21*x22*x26*x28*x30*x32*x34*x35*x37*x38*x41*x42*x43*x44*x45*x47*x48*x51*x52*x62*x63*x64*x67*x69*x70*x75*x76*x77*x78*x79*x80, x3*x4*x7*x13*x17*x18*x19*x20*x21*x22*x23*x25*x26*x27*x30*x32*x35*x37*x39*x40*x41*x42*x44*x49*x52*x53*x57*x61*x63*x66*x68*x69*x70*x71*x75*x77*x79*x80, x2*x3*x4*x7*x8*x9*x10*x11*x15*x19*x23*x25*x27*x30*x32*x34*x38*x39*x40*x41*x42*x43*x44*x45*x47*x48*x50*x54*x55*x56*x57*x59*x60*x62*x64*x66*x67*x68*x71*x75*x77*x78, x2*x4*x5*x6*x7*x8*x13*x14*x20*x22*x24*x25*x27*x30*x31*x37*x38*x39*x40*x41*x44*x47*x50*x51*x52*x55*x58*x59*x62*x63*x64*x65*x66*x67*x68*x69*x73*x74*x75*x77*x79*x80, x1*x2*x4*x6*x7*x8*x12*x14*x16*x17*x19*x23*x25*x26*x27*x28*x29*x31*x34*x37*x38*x42*x43*x46*x48*x52*x53*x54*x56*x58*x59*x60*x61*x62*x63*x65*x66*x68*x70*x75*x76*x79, x2*x10*x15*x16*x18*x20*x22*x24*x26*x28*x30*x35*x36*x38*x39*x40*x41*x42*x43*x44*x47*x48*x50*x51*x53*x56*x58*x59*x60*x62*x63*x65*x66*x67*x70*x72*x75*x78*x79*x80, x1*x2*x3*x4*x8*x9*x10*x11*x12*x13*x15*x16*x17*x18*x21*x24*x25*x26*x31*x35*x37*x39*x40*x41*x42*x45*x50*x52*x54*x55*x56*x58*x59*x60*x61*x62*x63*x64*x67*x69*x70*x72*x73*x75*x76*x77*x78*x79, x2*x3*x4*x5*x8*x10*x13*x14*x15*x16*x18*x19*x22*x23*x25*x26*x31*x32*x33*x34*x36*x37*x38*x41*x43*x45*x46*x47*x52*x53*x54*x55*x56*x59*x61*x62*x63*x64*x67*x68*x70*x71*x73*x75*x77*x78*x79, x1*x2*x5*x6*x9*x12*x19*x20*x21*x22*x23*x24*x26*x32*x33*x36*x38*x39*x40*x42*x45*x46*x48*x49*x51*x52*x53*x55*x58*x60*x67*x69*x73*x76*x78*x79, x1*x2*x3*x6*x9*x10*x12*x14*x15*x17*x19*x21*x22*x24*x27*x30*x32*x33*x34*x37*x38*x41*x45*x47*x49*x50*x51*x60*x61*x64*x65*x66*x67*x68*x69*x73*x74*x78, x2*x4*x6*x7*x9*x13*x14*x22*x24*x25*x27*x29*x30*x31*x32*x34*x37*x40*x41*x42*x44*x45*x47*x50*x51*x54*x56*x58*x59*x62*x63*x66*x67*x70*x72*x74*x76*x79*x80, x1*x4*x5*x6*x7*x8*x9*x10*x13*x17*x18*x19*x20*x24*x26*x27*x29*x31*x34*x35*x36*x42*x43*x44*x46*x48*x49*x53*x59*x60*x61*x63*x64*x65*x66*x68*x69*x70*x71*x72*x73*x75*x77*x78*x79*x80, x3*x6*x9*x12*x15*x16*x17*x18*x20*x21*x24*x27*x29*x31*x32*x34*x36*x38*x40*x41*x42*x43*x44*x45*x47*x55*x58*x59*x60*x63*x64*x65*x69*x75*x77*x78*x80, x2*x3*x4*x5*x7*x8*x9*x13*x15*x16*x17*x18*x19*x22*x23*x30*x32*x35*x36*x37*x38*x43*x46*x53*x54*x55*x56*x58*x59*x60*x63*x65*x68*x69*x70*x73*x75*x78, x1*x2*x5*x6*x10*x12*x14*x15*x16*x19*x20*x21*x22*x23*x24*x30*x31*x34*x35*x37*x38*x39*x40*x47*x48*x54*x55*x64*x67*x71*x72*x73*x75*x76*x77*x78, x2*x3*x4*x5*x6*x7*x13*x14*x17*x19*x20*x23*x24*x25*x30*x32*x33*x34*x35*x36*x41*x43*x44*x45*x46*x49*x52*x53*x54*x56*x57*x58*x61*x63*x68*x72*x73*x76*x78, x1*x2*x4*x6*x7*x8*x9*x10*x12*x14*x19*x20*x21*x23*x25*x26*x34*x35*x36*x40*x41*x42*x45*x46*x47*x48*x53*x56*x57*x59*x61*x64*x67*x68*x69*x70*x75*x76*x78*x80, x1*x3*x4*x7*x11*x14*x15*x17*x18*x19*x20*x22*x23*x31*x32*x33*x34*x35*x37*x38*x40*x45*x51*x52*x53*x54*x55*x59*x64*x65*x69*x73*x74*x76*x78*x80, x1*x6*x9*x10*x14*x15*x19*x20*x23*x24*x29*x32*x34*x36*x41*x42*x43*x45*x47*x52*x53*x54*x62*x69*x70*x71*x72*x74*x76*x77*x80, x3*x8*x10*x13*x15*x16*x19*x23*x24*x25*x26*x31*x33*x34*x35*x37*x38*x40*x42*x43*x44*x45*x46*x47*x49*x51*x52*x55*x56*x60*x62*x63*x68*x72*x74*x76*x77, x3*x4*x5*x7*x10*x11*x16*x17*x18*x19*x21*x22*x23*x24*x29*x31*x32*x35*x40*x46*x48*x49*x51*x53*x54*x55*x57*x59*x63*x67*x68*x69*x72*x75*x76*x77*x79*x80, x1*x2*x3*x5*x6*x10*x12*x13*x14*x16*x18*x20*x23*x24*x25*x26*x28*x30*x32*x33*x35*x40*x42*x47*x48*x51*x53*x56*x60*x61*x63*x67*x69*x71*x72*x75, x1*x3*x4*x8*x10*x11*x12*x20*x21*x22*x23*x24*x26*x30*x32*x35*x37*x38*x39*x43*x46*x48*x49*x50*x51*x53*x55*x58*x60*x62*x63*x64*x65*x66*x71*x72*x73*x74*x76, x2*x3*x4*x6*x10*x11*x12*x13*x14*x15*x17*x18*x19*x22*x23*x24*x27*x28*x30*x31*x37*x38*x42*x45*x46*x47*x48*x50*x51*x53*x54*x62*x64*x65*x66*x67*x69*x71*x74*x76*x77*x80, x3*x7*x8*x12*x13*x15*x17*x19*x20*x22*x23*x24*x25*x28*x30*x31*x36*x37*x39*x40*x41*x42*x43*x45*x47*x48*x52*x53*x56*x60*x61*x62*x63*x66*x68*x71*x72*x76*x77*x80, x2*x3*x4*x5*x7*x11*x12*x15*x16*x18*x21*x22*x24*x27*x29*x33*x36*x37*x38*x39*x40*x42*x45*x46*x49*x51*x52*x60*x62*x63*x64*x65*x67*x68*x69*x70*x71*x72*x75, x1*x2*x3*x9*x10*x11*x16*x19*x22*x23*x25*x26*x30*x31*x32*x34*x36*x37*x38*x39*x40*x41*x42*x43*x45*x46*x48*x49*x52*x53*x56*x59*x61*x62*x64*x66*x67*x69*x70*x72*x76*x78*x79, x4*x5*x7*x8*x9*x10*x13*x14*x17*x19*x20*x22*x25*x26*x27*x31*x33*x36*x38*x41*x42*x44*x45*x46*x47*x48*x50*x51*x54*x55*x56*x57*x58*x60*x61*x63*x65*x66*x68*x72*x73*x74*x75*x76*x77*x78*x80, x3*x4*x8*x11*x12*x13*x14*x15*x18*x20*x21*x26*x27*x29*x30*x32*x33*x34*x35*x37*x38*x39*x41*x42*x44*x45*x46*x47*x49*x51*x52*x58*x60*x62*x63*x66*x67*x70*x74*x75*x76*x80, x1*x2*x6*x7*x8*x10*x12*x13*x14*x15*x16*x22*x24*x28*x29*x31*x33*x35*x38*x39*x41*x47*x48*x49*x50*x55*x60*x62*x70*x71*x72*x77*x78*x80, x1*x3*x5*x11*x15*x16*x17*x18*x22*x24*x25*x27*x29*x30*x32*x33*x34*x36*x37*x39*x42*x43*x44*x47*x48*x50*x54*x55*x57*x59*x61*x64*x65*x67*x68*x69*x72*x74*x75*x77*x78*x79*x80, x2*x4*x6*x7*x9*x10*x11*x14*x15*x16*x20*x21*x22*x23*x24*x25*x29*x31*x33*x34*x36*x38*x41*x43*x45*x46*x49*x52*x53*x59*x61*x62*x63*x64*x65*x67*x71*x73*x76*x79, x6*x8*x9*x13*x17*x18*x19*x20*x21*x22*x24*x27*x32*x33*x35*x38*x41*x42*x43*x47*x49*x50*x51*x52*x53*x55*x56*x61*x62*x66*x67*x70*x75*x76*x77*x78*x79, x3*x4*x5*x7*x8*x10*x12*x14*x16*x20*x23*x24*x27*x29*x30*x36*x38*x39*x42*x43*x45*x46*x48*x49*x51*x52*x53*x55*x56*x58*x62*x65*x66*x71*x72*x73*x74*x77*x79, x2*x3*x4*x7*x10*x13*x14*x15*x16*x17*x18*x22*x25*x26*x28*x29*x30*x31*x33*x34*x35*x36*x37*x38*x40*x43*x50*x51*x52*x54*x55*x58*x59*x60*x62*x63*x69*x71*x72*x73*x77*x78*x79*x80, x1*x5*x6*x7*x9*x11*x12*x13*x15*x18*x20*x21*x22*x24*x27*x28*x30*x31*x32*x33*x34*x35*x37*x38*x39*x42*x45*x48*x52*x55*x56*x59*x61*x64*x65*x66*x67*x69*x73*x74*x75*x76*x77*x78*x80, x1*x3*x4*x7*x10*x11*x12*x17*x18*x19*x20*x21*x22*x24*x27*x28*x33*x34*x35*x38*x47*x52*x54*x55*x59*x61*x63*x64*x68*x69*x71*x72*x76*x77*x78, x1*x5*x6*x8*x10*x12*x13*x19*x20*x21*x23*x24*x29*x30*x31*x32*x35*x38*x42*x43*x44*x45*x46*x49*x51*x53*x57*x58*x62*x65*x68*x70*x71*x73*x74*x77*x80, x2*x5*x8*x11*x16*x18*x19*x22*x27*x29*x30*x34*x35*x38*x40*x43*x46*x47*x49*x51*x52*x55*x56*x59*x60*x61*x62*x63*x64*x65*x66*x67*x68*x70*x72*x73*x74*x76*x78*x79, x4*x6*x8*x9*x12*x13*x16*x22*x24*x25*x27*x28*x35*x36*x38*x39*x40*x41*x45*x48*x49*x53*x54*x55*x57*x58*x59*x60*x61*x62*x63*x65*x68*x71*x76*x77*x78*x80, x2*x5*x6*x7*x8*x10*x11*x13*x14*x15*x20*x21*x22*x23*x24*x25*x27*x28*x33*x34*x35*x36*x38*x39*x42*x45*x46*x50*x54*x57*x58*x60*x63*x64*x71*x72*x73*x76*x78*x80, x2*x5*x7*x8*x9*x12*x13*x14*x15*x21*x25*x26*x27*x30*x35*x37*x39*x41*x45*x47*x49*x51*x52*x53*x54*x55*x57*x58*x61*x62*x63*x72*x73*x74*x76*x77*x78*x79*x80, x1*x2*x4*x6*x8*x10*x11*x14*x19*x22*x24*x25*x26*x28*x38*x39*x50*x52*x53*x54*x56*x58*x59*x60*x63*x66*x67*x68*x69*x71*x73, x3*x4*x6*x10*x11*x13*x15*x17*x19*x20*x24*x26*x27*x35*x36*x37*x41*x42*x44*x46*x47*x48*x50*x51*x52*x56*x59*x62*x63*x64*x68*x70*x71*x73*x74*x76*x77*x78*x80, x1*x2*x4*x6*x8*x11*x14*x15*x16*x21*x22*x23*x24*x25*x26*x29*x30*x32*x33*x35*x38*x39*x41*x42*x44*x45*x46*x47*x49*x52*x53*x54*x57*x58*x59*x60*x61*x63*x64*x66*x68*x69*x70*x72*x75*x77, x2*x3*x7*x8*x10*x11*x12*x13*x15*x16*x17*x19*x21*x22*x24*x25*x27*x29*x30*x31*x33*x37*x39*x40*x42*x44*x48*x49*x53*x54*x56*x57*x59*x64*x65*x69*x71*x72*x73*x74*x76*x80, x1*x4*x5*x7*x8*x9*x10*x11*x17*x18*x21*x22*x28*x30*x32*x33*x34*x36*x39*x40*x43*x44*x45*x46*x47*x49*x50*x51*x52*x55*x56*x58*x60*x63*x64*x65*x70*x71*x77*x78*x80, x2*x5*x7*x10*x11*x14*x15*x16*x17*x18*x19*x20*x22*x23*x26*x29*x36*x41*x42*x43*x46*x47*x50*x53*x55*x56*x58*x61*x62*x63*x65*x67*x71*x72*x76*x78*x80, x2*x3*x6*x9*x10*x11*x14*x16*x18*x19*x21*x24*x26*x35*x36*x37*x38*x43*x46*x49*x51*x53*x55*x56*x59*x61*x62*x63*x64*x66*x69*x71*x73*x75*x76*x78*x79, x1*x4*x5*x6*x7*x8*x9*x10*x11*x12*x16*x19*x21*x22*x23*x26*x27*x28*x30*x33*x34*x35*x37*x39*x40*x43*x44*x45*x47*x48*x50*x54*x55*x57*x58*x60*x61*x62*x65*x67*x72*x75*x76*x78*x79*x80, x1*x4*x5*x10*x11*x12*x14*x16*x22*x23*x24*x25*x26*x31*x32*x33*x35*x41*x42*x45*x46*x47*x48*x49*x50*x52*x54*x57*x58*x59*x62*x63*x64*x65*x66*x70*x71*x73*x74*x75*x77*x80, x6*x7*x9*x10*x11*x12*x16*x17*x20*x21*x22*x23*x24*x27*x29*x31*x32*x33*x34*x38*x39*x40*x42*x43*x44*x46*x49*x50*x51*x64*x65*x68*x69*x71*x72*x77*x78*x80, x1*x2*x3*x4*x5*x6*x10*x15*x16*x19*x20*x21*x24*x25*x26*x27*x29*x30*x33*x35*x37*x42*x44*x45*x46*x49*x51*x52*x54*x55*x56*x58*x62*x64*x65*x68*x71*x73*x75*x76*x78*x79, x1*x2*x5*x6*x7*x8*x10*x14*x15*x16*x17*x20*x21*x22*x24*x25*x28*x29*x32*x33*x36*x37*x38*x39*x40*x41*x42*x45*x46*x47*x48*x50*x52*x55*x59*x61*x62*x63*x65*x67*x68*x69*x70*x72*x73*x75*x78*x79*x80, x3*x4*x5*x7*x9*x10*x11*x15*x17*x18*x21*x22*x24*x25*x26*x31*x32*x35*x36*x37*x39*x40*x42*x44*x46*x50*x53*x60*x62*x63*x68*x69*x71*x72*x73*x74*x76*x78*x80, x3*x5*x7*x8*x10*x13*x16*x17*x27*x28*x29*x30*x32*x33*x35*x36*x37*x38*x40*x41*x42*x44*x45*x48*x49*x52*x53*x55*x57*x59*x63*x66*x68*x70*x72*x73*x75*x77*x78, x1*x2*x4*x5*x7*x9*x10*x11*x12*x14*x15*x17*x19*x20*x21*x22*x23*x24*x25*x26*x30*x32*x33*x35*x40*x41*x42*x43*x44*x45*x46*x50*x52*x55*x57*x62*x63*x64*x74*x78*x79*x80, x1*x2*x4*x5*x7*x12*x15*x19*x24*x25*x28*x29*x32*x36*x38*x40*x42*x43*x44*x45*x49*x51*x52*x53*x55*x57*x58*x59*x60*x61*x62*x63*x64*x67*x68*x70*x71*x73*x75*x77*x78*x79*x80, x1*x3*x4*x5*x6*x7*x10*x15*x18*x19*x21*x22*x23*x26*x27*x28*x30*x31*x33*x35*x38*x39*x41*x43*x46*x47*x48*x52*x54*x56*x57*x58*x60*x62*x64*x66*x69*x70*x74*x75*x77*x78, x1*x2*x3*x4*x6*x9*x10*x11*x12*x13*x14*x19*x21*x23*x25*x26*x27*x33*x34*x38*x41*x43*x47*x50*x53*x59*x61*x62*x63*x65*x66*x69*x70*x73*x77*x78*x79, x1*x2*x6*x7*x8*x9*x10*x11*x12*x13*x14*x18*x19*x20*x22*x25*x26*x30*x31*x33*x34*x36*x39*x40*x41*x42*x43*x44*x46*x47*x49*x50*x51*x56*x57*x59*x63*x66*x68*x69*x70*x71*x72*x74*x77*x78*x80, x2*x3*x4*x6*x8*x9*x11*x16*x17*x19*x21*x26*x27*x29*x33*x34*x35*x37*x41*x42*x47*x48*x50*x51*x52*x53*x56*x62*x63*x65*x67*x69*x71*x73*x76*x80, x1*x4*x7*x14*x15*x16*x18*x19*x20*x22*x23*x24*x25*x26*x28*x29*x30*x33*x34*x35*x36*x38*x40*x41*x43*x45*x46*x47*x48*x49*x50*x51*x53*x57*x60*x62*x63*x64*x68*x69*x70*x72*x73*x77*x80, x1*x2*x4*x5*x6*x7*x8*x12*x14*x16*x18*x19*x20*x21*x23*x24*x25*x26*x28*x30*x31*x32*x33*x37*x40*x43*x46*x49*x51*x52*x54*x55*x56*x57*x58*x59*x62*x65*x66*x67*x74*x80, x1*x2*x5*x7*x9*x11*x12*x14*x16*x17*x18*x20*x22*x23*x25*x26*x27*x28*x29*x33*x35*x37*x39*x40*x43*x45*x48*x49*x53*x59*x60*x61*x62*x63*x65*x69*x70*x71*x72*x74*x75*x76*x77, x1*x2*x5*x6*x8*x9*x10*x12*x14*x16*x17*x18*x19*x21*x23*x24*x26*x28*x31*x35*x36*x37*x38*x39*x43*x47*x59*x61*x62*x63*x67*x68*x69*x70*x72*x73*x77*x78, x4*x5*x6*x7*x8*x9*x11*x14*x16*x18*x21*x22*x24*x25*x26*x29*x30*x31*x33*x34*x36*x38*x39*x40*x43*x45*x46*x47*x48*x49*x50*x52*x53*x60*x61*x62*x63*x64*x68*x69*x73*x75*x76*x77*x78*x80, x1*x5*x7*x9*x10*x11*x14*x17*x20*x21*x22*x24*x26*x27*x28*x29*x31*x32*x33*x40*x44*x47*x52*x54*x55*x56*x59*x60*x61*x63*x65*x70*x71*x73*x74*x78*x79*x80, x2*x4*x7*x8*x9*x11*x14*x15*x19*x20*x23*x24*x28*x29*x30*x33*x38*x40*x41*x42*x43*x45*x47*x48*x49*x51*x52*x53*x58*x59*x60*x61*x66*x67*x68*x71*x73*x76*x77*x80, x1*x2*x4*x5*x6*x7*x9*x11*x12*x13*x15*x16*x19*x21*x22*x23*x25*x28*x29*x30*x31*x33*x35*x38*x42*x43*x44*x48*x49*x54*x57*x58*x59*x62*x63*x66*x67*x68*x70*x73*x75*x77*x78*x80, x1*x4*x6*x9*x10*x11*x20*x21*x22*x25*x27*x28*x35*x36*x37*x38*x39*x41*x43*x46*x47*x51*x52*x54*x58*x60*x62*x65*x66*x67*x70*x71*x72*x74*x76*x77*x78*x79*x80, x1*x3*x4*x5*x6*x11*x12*x14*x18*x19*x21*x23*x24*x25*x26*x28*x29*x30*x31*x33*x35*x38*x40*x41*x44*x46*x47*x48*x53*x55*x57*x58*x59*x62*x63*x64*x65*x67*x70*x71*x73*x75*x78*x79, x2*x5*x9*x10*x11*x15*x19*x20*x21*x23*x24*x26*x28*x29*x30*x32*x37*x38*x39*x42*x47*x49*x50*x51*x54*x56*x58*x59*x60*x66*x68*x69*x70*x71*x72*x73*x74*x79*x80, x3*x4*x6*x7*x13*x14*x16*x17*x18*x19*x20*x21*x22*x23*x26*x29*x32*x33*x34*x35*x37*x39*x41*x42*x44*x46*x48*x52*x54*x55*x59*x60*x61*x64*x66*x67*x70*x71*x72*x73*x75*x76*x77*x79, x1*x2*x3*x4*x5*x8*x10*x12*x17*x18*x19*x23*x24*x26*x27*x31*x32*x35*x37*x38*x40*x43*x45*x48*x50*x57*x60*x62*x64*x66*x67*x68*x76*x77*x78*x80, x1*x2*x6*x7*x10*x11*x13*x15*x19*x27*x30*x32*x33*x35*x36*x40*x41*x42*x43*x44*x45*x46*x47*x53*x61*x64*x65*x72*x73*x75*x77, x1*x2*x3*x4*x5*x6*x9*x10*x11*x13*x14*x15*x17*x18*x19*x20*x22*x23*x24*x25*x26*x27*x29*x30*x32*x33*x34*x36*x41*x42*x43*x44*x45*x46*x47*x51*x53*x54*x58*x59*x66*x67*x69*x74*x78*x79*x80, x4*x6*x7*x11*x12*x15*x16*x19*x21*x25*x29*x33*x35*x36*x37*x41*x44*x45*x49*x51*x55*x64*x66*x68*x70*x72*x74*x75*x77*x79*x80, x1*x2*x7*x11*x17*x18*x20*x21*x22*x23*x26*x29*x30*x31*x33*x34*x36*x37*x39*x41*x42*x44*x46*x47*x49*x54*x55*x57*x59*x60*x61*x64*x65*x68*x70*x72*x73*x74*x75*x76*x80, x4*x6*x8*x10*x12*x17*x20*x25*x27*x31*x32*x33*x37*x38*x39*x41*x44*x58*x59*x62*x63*x66*x68*x69*x71*x72*x79*x80, x1*x7*x9*x12*x15*x18*x19*x20*x24*x26*x27*x29*x33*x37*x38*x39*x40*x44*x45*x46*x47*x48*x49*x52*x53*x55*x56*x57*x58*x61*x62*x63*x64*x66*x67*x68*x72*x74*x75*x77*x79, x3*x4*x5*x7*x8*x15*x17*x18*x23*x25*x26*x28*x29*x31*x38*x42*x43*x44*x49*x50*x52*x55*x61*x62*x63*x65*x68*x69*x71*x75*x76*x77*x78*x80, x1*x2*x4*x6*x7*x8*x9*x10*x14*x15*x17*x19*x20*x21*x22*x23*x25*x26*x30*x32*x33*x34*x36*x39*x41*x42*x44*x46*x47*x48*x49*x50*x52*x54*x56*x62*x64*x66*x69*x72*x73*x74*x75*x77*x78*x80, x1*x2*x4*x7*x8*x10*x11*x12*x13*x14*x15*x16*x21*x23*x24*x25*x26*x31*x33*x37*x40*x43*x48*x49*x50*x53*x55*x58*x61*x63*x66*x67*x72*x76*x77*x80, x2*x3*x5*x8*x12*x14*x15*x17*x19*x20*x25*x29*x31*x33*x34*x36*x37*x39*x41*x46*x48*x50*x51*x52*x54*x55*x57*x61*x63*x64*x65*x67*x68*x70*x73*x74*x75*x78, x1*x4*x5*x6*x7*x11*x19*x20*x21*x23*x24*x25*x29*x30*x31*x34*x38*x39*x43*x44*x45*x46*x49*x50*x51*x54*x55*x56*x60*x62*x63*x64*x65*x66*x67*x68*x69*x70*x71*x72*x73*x74*x75*x78*x79*x80, x2*x3*x5*x6*x7*x8*x10*x11*x13*x15*x17*x19*x21*x22*x23*x25*x29*x30*x31*x34*x36*x37*x42*x43*x45*x46*x47*x49*x50*x51*x57*x58*x65*x68*x69*x70*x71*x72*x73*x75*x76*x77*x78, x3*x5*x9*x10*x11*x12*x13*x14*x15*x18*x19*x20*x22*x23*x24*x25*x26*x28*x31*x32*x36*x39*x42*x43*x44*x46*x47*x50*x53*x55*x58*x63*x65*x67*x68*x71*x72*x73*x75*x79, x1*x2*x4*x6*x9*x11*x14*x16*x20*x23*x25*x26*x30*x31*x32*x33*x34*x35*x36*x37*x38*x39*x43*x44*x45*x46*x47*x52*x53*x57*x58*x60*x61*x63*x65*x67*x69*x73*x76*x77*x78*x79, x1*x2*x4*x6*x7*x8*x12*x17*x20*x21*x26*x27*x29*x31*x33*x35*x36*x39*x45*x49*x50*x51*x53*x55*x56*x61*x63*x64*x65*x66*x67*x68*x71*x72*x73*x74*x75*x77*x78*x79, x1*x2*x3*x5*x8*x10*x11*x16*x17*x18*x19*x20*x22*x23*x24*x25*x26*x27*x29*x30*x33*x34*x35*x38*x41*x42*x43*x44*x47*x51*x53*x55*x57*x58*x59*x60*x63*x66*x67*x69*x71*x72*x74*x75*x77*x80, x1*x2*x3*x4*x5*x8*x10*x11*x12*x13*x16*x18*x23*x25*x26*x27*x28*x29*x30*x31*x32*x34*x39*x40*x44*x46*x47*x49*x52*x53*x55*x57*x59*x60*x63*x64*x67*x68*x71*x74*x75*x76*x78, x1*x7*x11*x12*x14*x15*x16*x17*x20*x26*x28*x30*x31*x33*x35*x37*x38*x40*x43*x47*x53*x56*x59*x61*x62*x64*x68*x70*x72*x75 ); frobby-0.9.5/test/bigIdeals/000077500000000000000000000000001401527164200156545ustar00rootroot00000000000000frobby-0.9.5/test/bigIdeals/b1.dim000066400000000000000000000000021401527164200166410ustar00rootroot000000000000001 frobby-0.9.5/test/bigIdeals/b1.euler000066400000000000000000000000031401527164200172050ustar00rootroot00000000000000-1 frobby-0.9.5/test/bigIdeals/b1.frobInstance000066400000000000000000000001301401527164200205070ustar00rootroot000000000000002334 3363 2365 3456 23345 33634 23653 34562 2331 3361 2361 3451 23341 33631 23651 34561 frobby-0.9.5/test/bigIdeals/b1.frobNumber000066400000000000000000000000061401527164200201750ustar00rootroot0000000000000031817 frobby-0.9.5/test/bigIdeals/b1.opt_irr000066400000000000000000000004551401527164200175620ustar00rootroot000000000000007 16 0 1 13 1 1 1 1 1 1 2 1 1 1 1 1 1 0 1 11 2 1 1 1 1 1 3 1 1 1 1 1 1 0 1 10 2 1 1 1 1 1 4 1 1 1 1 1 1 0 1 4 2 1 1 1 1 1 10 1 1 1 1 1 1 0 1 4 1 1 1 1 1 1 10 1 1 1 1 1 2 0 1 4 1 1 1 1 1 1 9 2 1 1 1 1 2 0 1 3 1 1 1 1 1 1 10 1 1 1 1 1 3 x1 x10 x11 x12 x13 x14 x15 x16 x2 x3 x4 x5 x6 x7 x8 x9 28 frobby-0.9.5/test/bigIdeals/b1.opt_irr_min000066400000000000000000000004471401527164200204260ustar00rootroot000000000000007 16 0 1 2 2 1 1 1 1 1 1 1 1 1 2 1 1 0 1 2 1 1 1 2 1 1 1 2 1 1 1 1 1 0 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 0 1 1 2 1 1 1 1 1 2 1 1 1 2 1 1 0 1 1 1 1 1 2 1 2 2 1 1 1 1 1 1 0 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 0 1 1 1 1 1 1 1 1 2 2 1 1 2 1 1 x1 x10 x11 x12 x13 x14 x15 x16 x2 x3 x4 x5 x6 x7 x8 x9 18 frobby-0.9.5/test/bigIdeals/b1.opt_std000066400000000000000000000001121401527164200175460ustar00rootroot000000000000000 16 x1 x10 x11 x12 x13 x14 x15 x16 x2 x3 x4 x5 x6 x7 x8 x9 no solution. frobby-0.9.5/test/bigIdeals/b1.opt_std_min000066400000000000000000000001121401527164200204110ustar00rootroot000000000000000 16 x1 x10 x11 x12 x13 x14 x15 x16 x2 x3 x4 x5 x6 x7 x8 x9 no solution. frobby-0.9.5/test/bigIdeals/b1.test000066400000000000000000000247121401527164200170650ustar00rootroot00000000000000218 16 -11 -4 0 -1 0 0 1 0 0 0 -2 0 0 0 1 0 -11 -3 -1 -1 0 0 2 0 0 -1 -1 0 0 0 0 0 -11 -3 0 -1 0 0 0 0 0 -1 -2 0 0 0 2 0 -9 0 -1 0 0 1 0 0 0 -1 0 -2 0 0 0 0 -8 0 -1 0 0 0 0 0 -1 -1 0 -2 0 1 0 0 -7 0 -2 0 0 0 0 0 0 0 6 2 0 0 0 0 -7 0 3 2 0 0 0 0 1 0 0 0 0 0 0 0 -6 0 -6 0 0 0 1 0 0 0 -1 2 0 0 0 0 -6 0 -3 0 0 0 0 0 5 0 4 0 0 0 0 0 -6 0 0 0 0 0 0 0 -2 -3 -1 -1 0 0 0 1 -5 -2 0 0 0 0 0 1 -3 -1 -1 -1 0 0 0 0 -5 0 0 -3 0 0 0 0 4 0 1 3 0 0 0 0 -5 0 4 0 0 0 0 0 -1 0 -1 2 0 0 0 0 -5 2 0 0 0 0 0 0 0 0 -5 -2 0 0 1 0 -5 5 -4 3 0 0 0 0 -1 1 -3 0 0 0 0 0 -4 -4 -2 0 0 0 0 0 0 1 0 7 0 0 0 0 -4 -4 -1 -1 0 0 0 0 0 3 2 4 0 0 0 0 -4 -1 0 -3 0 0 0 0 0 0 1 6 0 0 0 0 -4 -1 0 3 0 0 0 0 1 0 0 0 0 0 0 0 -4 0 -6 0 0 0 0 0 0 5 -3 4 0 0 0 0 -4 0 -2 -2 0 0 0 0 3 0 3 2 0 0 0 0 -4 0 -2 2 0 0 0 0 -1 0 -6 0 0 0 1 0 -4 0 -1 -3 0 0 0 0 6 1 2 0 0 0 0 0 -4 0 -1 -3 0 0 0 0 9 0 -1 1 0 0 0 0 -4 0 2 1 0 0 0 0 -2 0 1 1 0 0 0 0 -4 0 3 0 0 0 0 0 1 1 0 -1 0 0 0 0 -4 0 3 0 0 0 0 0 4 0 -3 0 0 0 0 0 -4 1 -5 0 0 0 0 0 0 0 9 -1 0 0 0 0 -4 1 -5 0 0 0 0 0 3 -1 6 0 0 0 0 0 -4 2 2 0 0 0 0 0 1 -1 1 -1 0 0 0 0 -3 -6 -2 0 0 0 0 0 2 4 0 4 0 0 0 0 -3 -4 -2 -1 0 0 0 0 5 3 0 2 0 0 0 0 -3 -3 -2 -1 0 0 0 0 -1 0 0 8 0 0 0 0 -3 -3 0 -3 0 0 0 0 2 3 1 3 0 0 0 0 -3 -2 -2 -2 0 0 0 0 8 2 0 0 0 0 0 0 -3 -1 -2 -2 0 0 0 0 -1 0 3 5 0 0 0 0 -3 -1 -1 -3 0 0 0 0 2 1 2 3 0 0 0 0 -3 -1 -1 -3 0 0 0 0 5 0 -1 4 0 0 0 0 -3 -1 0 -4 0 0 0 0 5 2 1 1 0 0 0 0 -3 -1 3 0 0 0 0 0 -3 1 0 2 0 0 0 0 -3 0 -4 -1 0 0 0 0 2 0 5 1 0 0 0 0 -3 0 -3 -2 0 0 0 0 8 0 1 0 0 0 0 0 -3 0 -2 1 0 0 1 0 -2 0 -6 1 0 0 0 0 -3 0 0 2 0 0 0 0 -3 0 3 0 0 0 0 0 -3 0 0 2 0 0 0 0 0 -1 0 1 0 0 0 0 -3 0 1 1 0 0 0 0 0 1 2 -2 0 0 0 0 -3 0 1 1 0 0 0 0 3 0 -1 -1 0 0 0 0 -3 0 2 0 0 0 0 0 9 0 -5 -2 0 0 0 0 -3 1 -2 1 0 0 0 0 -5 0 -3 0 0 0 1 0 -3 1 0 0 0 0 0 0 0 6 -7 0 0 0 0 0 -3 1 2 0 0 0 0 0 -3 -1 1 2 0 0 0 0 -3 1 3 -1 0 0 0 0 0 0 0 0 0 0 0 0 -3 2 0 1 0 0 0 0 0 -1 3 -2 0 0 0 0 -3 2 0 1 0 0 0 0 3 -2 0 -1 0 0 0 0 -3 3 -7 5 0 0 0 0 0 2 -3 -1 0 0 0 0 -3 3 -1 0 0 0 0 0 0 4 -6 0 0 0 0 0 -3 3 2 -1 0 0 0 0 0 -2 1 0 0 0 0 0 -3 4 -5 3 0 0 0 0 -3 2 -2 0 0 0 0 0 -3 5 -2 0 0 0 0 0 0 2 -5 0 0 0 0 0 -3 6 -6 3 0 0 0 0 -3 0 -1 0 0 0 0 0 -3 7 -3 0 0 0 0 0 0 0 -4 0 0 0 0 0 -2 -5 -2 -1 0 0 0 0 1 3 0 5 0 0 0 0 -2 -5 -1 -2 0 0 0 0 1 5 2 2 0 0 0 0 -2 -5 0 -3 0 0 0 0 4 6 1 0 0 0 0 0 -2 -5 7 -1 0 0 0 0 2 -1 3 0 0 0 0 0 -2 -4 0 3 0 0 0 0 -1 3 0 0 0 0 0 0 -2 -4 2 0 0 0 1 0 0 -1 0 -2 0 0 0 0 -2 -3 -2 -2 0 0 0 0 4 2 0 3 0 0 0 0 -2 -3 -1 -3 0 0 0 0 4 4 2 0 0 0 0 0 -2 -3 2 0 0 0 0 0 0 -2 0 -2 0 0 1 0 -2 -2 -1 -3 0 0 0 0 1 0 -1 7 0 0 0 0 -2 -2 -1 3 0 0 0 0 -1 1 1 0 0 0 0 0 -2 -2 0 -4 0 0 0 0 1 2 1 4 0 0 0 0 -2 -2 1 0 0 0 1 0 0 -3 1 -2 0 0 0 0 -2 -1 -2 -3 0 0 0 0 7 1 0 1 0 0 0 0 -2 -1 1 0 0 0 0 0 0 -4 1 -2 0 0 1 0 -2 -1 1 1 0 0 0 0 -1 0 -1 2 0 0 0 0 -2 -1 2 0 0 0 0 0 2 1 -2 0 0 0 0 0 -2 0 -6 0 0 0 0 0 1 0 7 0 0 0 0 0 -2 0 -6 0 0 0 0 0 4 -1 4 1 0 0 0 0 -2 0 -5 -1 0 0 0 0 7 0 3 -1 0 0 0 0 -2 0 -5 -1 0 0 0 0 10 -1 0 0 0 0 0 0 -2 0 -4 2 0 0 1 0 -3 0 -4 0 0 0 0 0 -2 0 -2 3 0 0 0 0 -1 -1 2 0 0 0 0 0 -2 0 -1 -4 0 0 0 0 1 0 2 4 0 0 0 0 -2 0 -1 2 0 0 0 0 2 0 1 -2 0 0 0 0 -2 0 0 -5 0 0 0 0 4 1 1 2 0 0 0 0 -2 0 0 -1 0 0 0 0 0 1 -8 0 0 0 1 0 -2 0 0 0 0 0 1 0 0 -5 2 -2 0 0 0 0 -2 0 0 0 1 0 0 0 -1 0 -4 -2 0 0 0 0 -2 0 4 -2 0 0 0 0 -1 1 -1 1 0 0 0 0 -2 0 8 1 0 0 0 0 -3 0 -6 1 0 0 0 0 -2 0 9 0 0 0 0 0 0 1 -7 -1 0 0 0 0 -2 0 9 0 0 0 0 0 3 0 -10 0 0 0 0 0 -2 0 12 -1 0 0 0 0 0 -5 0 -1 0 0 0 0 -2 1 -8 -1 0 0 0 0 -1 0 1 0 0 0 1 0 -2 1 -8 0 0 0 0 0 -2 4 -1 4 0 0 0 0 -2 1 -4 -2 0 0 0 0 1 -1 5 2 0 0 0 0 -2 1 -1 -1 0 0 1 0 0 0 -7 0 0 0 0 0 -2 1 0 1 0 0 0 0 -4 -1 3 1 0 0 0 0 -2 1 0 1 0 0 0 0 -1 -2 0 2 0 0 0 0 -2 1 1 0 0 0 0 0 -1 0 2 -1 0 0 0 0 -2 1 1 0 0 0 0 0 2 -1 -1 0 0 0 0 0 -2 2 -1 -5 0 0 0 0 1 0 5 1 0 0 0 0 -2 3 -8 -1 0 0 0 0 1 3 -1 2 0 0 0 0 -2 3 0 0 0 0 0 0 -1 -2 3 -1 0 0 0 0 -2 3 0 0 0 0 0 0 2 -3 0 0 0 0 0 0 -2 4 -7 4 0 0 0 0 -1 1 -3 0 0 0 0 0 -2 4 1 5 0 0 0 0 0 -5 -2 -2 0 0 0 0 -2 5 0 4 0 0 0 0 0 0 -11 0 0 0 0 0 -1 -6 -2 0 0 0 0 0 0 0 13 -1 0 0 0 0 -1 -5 0 -2 0 0 0 0 0 -1 11 1 0 0 0 0 -1 -4 -2 -2 0 0 0 0 0 2 0 6 0 0 0 0 -1 -4 -1 -3 0 0 0 0 0 4 2 3 0 0 0 0 -1 -4 0 -4 0 0 0 0 3 5 1 1 0 0 0 0 -1 -2 -2 -3 0 0 0 0 3 1 0 4 0 0 0 0 -1 -2 -1 -4 0 0 0 0 3 3 2 1 0 0 0 0 -1 -2 11 0 0 0 0 0 -1 -3 1 -2 0 0 0 0 -1 -1 0 -5 0 0 0 0 0 1 1 5 0 0 0 0 -1 -1 0 1 0 0 0 0 1 1 0 -1 0 0 0 0 -1 -1 0 1 0 0 0 0 4 0 -3 0 0 0 0 0 -1 -1 1 0 0 0 0 0 7 1 -4 -2 0 0 0 0 -1 -1 3 0 0 0 0 0 -2 -4 10 -2 0 0 0 0 -1 -1 4 4 0 0 0 0 -1 0 -5 -1 0 0 0 0 -1 0 -10 0 0 0 1 0 1 0 0 0 0 0 0 0 -1 0 -8 1 0 0 0 0 0 0 9 -1 0 0 0 0 -1 0 -8 1 0 0 0 0 3 -1 6 0 0 0 0 0 -1 0 -6 -1 0 0 0 0 0 -1 0 0 1 0 0 0 -1 0 -3 -3 0 0 0 0 0 0 4 3 0 0 0 0 -1 0 -3 -3 0 0 0 0 3 -1 1 4 0 0 0 0 -1 0 -2 -4 0 0 0 0 6 0 0 2 0 0 0 0 -1 0 -1 -5 0 0 0 0 9 1 -1 0 0 0 0 0 -1 0 -1 0 0 0 0 0 -2 7 -6 0 0 0 0 0 -1 0 -1 0 0 0 0 0 1 6 -9 1 0 0 0 0 -1 0 -1 0 0 0 0 0 4 5 -12 2 0 0 0 0 -1 0 0 7 0 0 0 0 -4 -2 -1 -1 0 0 0 0 -1 0 1 0 0 0 0 0 -5 0 2 2 0 0 0 0 -1 0 1 0 0 0 0 0 -2 -1 -1 3 0 0 0 0 -1 0 1 6 0 0 0 0 -1 -1 -2 -3 0 0 0 0 -1 0 2 -1 0 0 0 0 -2 1 1 0 0 0 0 0 -1 0 2 -1 0 0 0 0 1 0 -2 1 0 0 0 0 -1 0 6 2 0 0 0 0 -4 0 -4 0 0 0 0 0 -1 0 7 1 0 0 0 0 -1 1 -5 -2 0 0 0 0 -1 0 7 1 0 0 0 0 2 0 -8 -1 0 0 0 0 -1 0 9 1 0 0 0 0 -4 -6 3 0 0 0 0 0 -1 0 10 0 0 0 0 0 -1 -5 2 -2 0 0 0 0 -1 0 10 0 0 0 0 0 2 -6 -1 -1 0 0 0 0 -1 0 11 0 0 0 0 0 1 0 -1 0 0 0 -1 0 -1 1 -9 0 0 0 0 0 0 5 0 1 0 0 0 0 -1 1 -9 0 0 0 0 0 3 4 -3 2 0 0 0 0 -1 1 -6 -1 0 0 0 0 0 -1 7 1 0 0 0 0 -1 1 -1 -5 0 0 0 0 0 -1 2 5 0 0 0 0 -1 1 -1 1 0 0 0 0 -2 0 4 -2 0 0 0 0 -1 1 -1 1 0 0 0 0 1 -1 1 -1 0 0 0 0 -1 1 0 -6 0 0 0 0 3 0 1 3 0 0 0 0 -1 1 0 0 0 0 0 0 4 0 0 -3 0 0 0 0 -1 1 0 1 0 0 0 0 0 5 1 0 0 0 -1 0 -1 2 -3 -4 0 0 0 0 0 0 7 0 0 0 0 0 -1 2 -3 -4 0 0 0 0 3 -1 4 1 0 0 0 0 -1 2 -2 0 0 0 0 0 -2 5 -5 0 0 0 0 0 -1 2 -2 0 0 0 0 0 1 4 -8 1 0 0 0 0 -1 2 0 0 0 0 0 0 -8 -1 6 1 0 0 0 0 -1 2 0 0 0 0 0 0 -5 -2 3 2 0 0 0 0 -1 2 0 0 0 0 0 0 -2 -3 0 3 0 0 0 0 -1 2 0 1 0 0 -1 0 0 4 1 0 0 0 0 0 -1 2 0 6 0 0 0 0 -1 -3 -1 -3 0 0 0 0 -1 2 1 -1 0 0 0 0 1 -2 -1 1 0 0 0 0 -1 2 1 5 0 0 0 0 -1 -1 1 -6 0 0 0 0 -1 3 -10 0 0 0 0 0 0 3 1 1 0 0 0 0 -1 3 -1 1 0 0 0 0 0 3 2 0 0 0 -1 0 -1 3 2 4 0 0 0 0 -4 -3 0 -2 0 0 0 0 -1 4 -3 0 0 0 0 0 -2 3 -4 0 0 0 0 0 -1 4 -1 1 0 0 -1 0 0 2 2 0 0 0 0 0 -1 4 0 -1 0 0 0 0 1 -4 0 1 0 0 0 0 -1 5 -11 0 0 0 0 0 0 1 2 1 0 0 0 0 -1 5 1 -1 0 0 -1 0 0 1 0 2 0 0 0 0 -1 5 2 3 0 0 0 0 -1 -4 0 -4 0 0 0 0 -1 6 -4 0 0 0 0 0 -2 1 -3 0 0 0 0 0 -1 6 0 -1 0 0 0 0 0 0 1 2 0 0 -1 0 0 -6 -2 -2 0 0 0 0 2 5 0 3 0 0 0 0 0 -6 6 -1 0 0 0 0 0 0 4 0 0 0 0 0 0 -5 0 2 0 0 0 0 0 5 0 -2 0 0 0 0 0 -5 3 1 0 0 0 0 0 -1 7 -2 0 0 0 0 0 -4 -2 -3 0 0 0 0 5 4 0 1 0 0 0 0 0 -4 5 -1 0 0 0 0 0 -2 5 0 0 0 0 0 0 -3 -1 2 0 0 0 0 0 3 1 -2 0 0 0 0 0 -3 0 -5 0 0 0 0 2 4 1 2 0 0 0 0 0 -3 2 1 0 0 0 0 0 -3 8 -2 0 0 0 0 0 -3 8 -4 0 0 0 0 3 -2 2 0 0 0 0 0 0 -2 0 0 0 0 0 0 -2 -3 2 -2 0 0 1 0 0 -2 0 0 0 0 0 0 1 -4 -1 -1 0 0 1 0 0 -2 0 1 0 0 0 0 -3 1 0 2 0 0 0 0 0 -2 0 1 0 0 0 0 0 0 -3 3 0 0 0 0 0 -2 1 0 0 0 0 0 0 2 -1 0 0 0 0 0 0 -2 1 0 0 0 0 0 3 1 -4 1 0 0 0 0 0 -2 4 -1 0 0 0 0 0 -4 6 0 0 0 0 0 0 -2 5 3 0 0 0 0 -2 1 -6 0 0 0 0 0 0 -2 9 1 0 0 0 0 1 -4 0 -2 0 0 0 0 0 -1 -2 -4 0 0 0 0 2 0 0 5 0 0 0 0 0 -1 -2 2 0 0 0 0 0 1 2 -2 0 0 0 0 0 -1 -2 2 0 0 0 0 3 0 -1 -1 0 0 0 0 0 -1 -1 -5 0 0 0 0 2 2 2 2 0 0 0 0 0 -1 -1 -5 0 0 0 0 5 1 -1 3 0 0 0 0 0 -1 0 -6 0 0 0 0 5 3 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 6 3 0 -6 0 0 0 0 0 -1 0 0 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 2 0 0 0 0 0 0 -3 11 -5 0 0 0 0 0 -1 2 1 0 0 0 0 2 0 6 0 0 0 -1 0 0 -1 2 5 0 0 0 0 -2 0 -3 -2 0 0 0 0 0 0 -9 -1 0 0 0 0 0 0 -1 1 0 0 1 0 0 0 -9 0 0 0 0 0 -1 4 -3 5 0 0 0 0 0 0 -8 -1 0 0 0 0 -1 6 -1 2 0 0 0 0 0 0 -5 -2 0 0 0 0 2 -1 3 3 0 0 0 0 0 0 -4 -3 0 0 0 0 5 0 2 1 0 0 0 0 0 0 -3 1 0 0 0 0 0 6 -7 0 0 0 0 0 0 0 -1 1 0 0 0 0 -6 0 4 1 0 0 0 0 0 0 -1 1 0 0 0 0 -3 -1 1 2 0 0 0 0 0 0 0 0 0 0 0 0 -3 1 3 -1 0 0 0 0 frobby-0.9.5/test/bigIdeals/b2.dim000066400000000000000000000000021401527164200166420ustar00rootroot000000000000001 frobby-0.9.5/test/bigIdeals/b2.euler000066400000000000000000000000031401527164200172060ustar00rootroot00000000000000-1 frobby-0.9.5/test/bigIdeals/b2.frobInstance000066400000000000000000000000621401527164200205140ustar00rootroot000000000000002345 2371 7639 7738 7757 8009 9082 9486 9773 9869 frobby-0.9.5/test/bigIdeals/b2.frobNumber000066400000000000000000000000061401527164200201760ustar00rootroot0000000000000053085 frobby-0.9.5/test/bigIdeals/b2.opt_irr000066400000000000000000000000761401527164200175620ustar00rootroot000000000000001 10 0 1 22 1 1 1 1 1 1 1 x1 x10 x2 x3 x4 x5 x6 x7 x8 x9 30 frobby-0.9.5/test/bigIdeals/b2.opt_irr_min000066400000000000000000000013111401527164200204160ustar00rootroot0000000000000032 10 0 4 1 2 1 1 1 2 1 1 0 4 1 2 1 1 1 1 1 2 0 3 1 3 1 1 1 2 1 1 0 2 2 3 1 1 2 1 1 1 0 2 2 1 1 1 1 1 2 3 0 2 1 4 1 1 1 2 1 1 0 2 1 3 2 1 1 2 1 1 0 2 1 3 1 1 2 2 1 1 0 2 1 3 1 1 1 2 1 2 0 2 1 2 2 1 1 2 1 2 0 2 1 2 2 1 1 1 2 2 0 2 1 2 1 3 2 1 1 1 0 2 1 2 1 1 3 2 1 1 0 2 1 2 1 1 2 2 1 2 0 2 1 2 1 1 1 2 2 2 0 2 1 2 1 1 1 1 3 2 0 2 1 1 1 1 3 1 3 1 0 2 1 1 1 1 3 1 2 2 0 2 1 1 1 1 1 2 2 3 0 1 3 1 1 1 1 1 2 3 0 1 2 1 1 1 1 3 1 3 0 1 1 6 1 1 1 1 1 1 0 1 1 2 3 1 1 3 1 1 0 1 1 2 1 4 1 1 1 2 0 1 1 2 1 3 3 1 1 1 0 1 1 1 3 2 1 3 1 1 0 1 1 1 3 1 1 1 4 1 0 1 1 1 1 5 1 1 2 1 0 1 1 1 1 3 4 1 1 1 0 1 1 1 1 1 3 2 3 1 0 1 1 1 1 1 3 1 4 1 0 1 1 1 1 1 2 3 1 3 x1 x10 x2 x3 x4 x5 x6 x7 x8 x9 14 frobby-0.9.5/test/bigIdeals/b2.opt_std000066400000000000000000000000621401527164200175530ustar00rootroot000000000000000 10 x1 x10 x2 x3 x4 x5 x6 x7 x8 x9 no solution. frobby-0.9.5/test/bigIdeals/b2.opt_std_min000066400000000000000000000000621401527164200204160ustar00rootroot000000000000000 10 x1 x10 x2 x3 x4 x5 x6 x7 x8 x9 no solution. frobby-0.9.5/test/bigIdeals/b2.test000066400000000000000000000240111401527164200170560ustar00rootroot00000000000000329 10 -19 5 0 3 0 0 0 1 0 0 -16 0 0 0 0 1 0 0 1 2 -16 4 -1 1 0 0 2 0 1 0 -15 2 1 2 0 1 1 0 -1 0 -14 0 1 0 2 0 0 0 2 -1 -14 1 0 0 2 3 -1 0 0 0 -14 2 1 0 0 -1 0 3 0 0 -14 12 0 2 1 0 -1 0 -1 0 -13 -5 0 2 0 1 1 0 1 0 -13 -1 -1 1 3 0 0 1 0 0 -13 -1 1 0 0 2 0 2 -1 0 -13 5 -1 0 0 1 2 0 -1 1 -12 -5 2 0 0 2 1 1 0 -1 -12 -2 3 0 0 0 0 0 -1 2 -12 1 1 0 -1 2 0 0 0 1 -12 5 0 1 -1 1 2 0 0 -1 -11 -8 0 0 0 2 0 2 1 0 -11 -6 4 0 0 0 1 -1 0 1 -11 -5 1 0 0 0 -1 1 0 3 -11 -2 4 1 -1 0 0 0 0 0 -11 -1 0 1 0 -1 1 1 0 1 -11 1 1 -1 2 1 0 0 0 0 -11 3 0 2 -1 -1 0 2 0 0 -11 15 -1 1 0 0 0 0 0 -1 -10 -9 2 0 0 0 0 0 1 2 -10 -6 0 0 -1 2 0 0 2 1 -10 -5 1 1 0 -1 2 0 1 0 -10 -3 1 5 -1 -1 0 0 0 0 -10 -1 2 -1 0 0 1 2 -1 0 -10 0 -2 3 2 0 0 0 0 0 -10 1 1 -2 0 0 1 0 -1 3 -10 1 2 0 1 1 0 0 1 -2 -9 -6 0 -1 2 1 0 0 2 0 -9 -4 0 -1 0 0 0 3 0 1 -9 -4 0 3 1 1 -2 0 1 0 -9 -2 -1 3 0 -1 1 2 -1 0 -9 0 -1 0 0 -1 2 3 0 -1 -9 0 0 0 -1 0 -1 4 0 0 -9 0 0 1 2 1 0 1 -1 -1 -9 1 2 -1 -1 0 1 0 0 1 -9 5 0 1 1 -2 0 0 1 0 -9 5 2 0 -2 0 0 1 0 0 -9 8 -1 -2 1 1 0 1 0 0 -8 -10 1 2 0 0 0 1 0 1 -8 -8 2 0 2 2 -1 0 0 0 -8 -7 3 0 0 -2 0 3 0 0 -8 -4 0 2 -1 0 -1 0 0 3 -8 -4 1 1 2 1 1 0 0 -2 -8 -2 0 -1 -1 0 0 1 1 2 -8 -2 5 0 -1 -2 1 0 0 0 -8 -1 2 0 -1 -2 -1 2 0 2 -8 0 0 0 0 0 1 1 -2 2 -8 0 0 0 5 0 0 1 -1 -2 -8 1 2 -2 2 -1 1 0 0 0 -8 2 -1 0 -1 -1 2 1 1 0 -8 2 0 0 -2 0 -1 2 1 1 -8 2 0 1 1 1 0 -1 0 0 -8 4 -1 4 -2 -1 0 1 0 0 -8 4 0 -2 1 1 1 0 1 -1 -8 6 0 2 0 1 -1 0 0 -1 -7 -5 0 -1 -1 3 0 0 0 2 -7 -4 1 0 0 0 2 0 -1 1 -7 -3 -2 0 0 0 0 2 -1 3 -7 -2 0 -1 5 0 1 -2 0 0 -7 -2 1 0 -2 0 0 1 2 0 -7 -1 -1 0 -1 2 2 0 0 0 -7 -1 0 0 -2 3 -1 1 0 1 -7 0 -1 2 2 -2 1 0 0 0 -7 0 1 1 -1 0 1 1 -1 0 -7 2 0 0 -1 0 1 -1 -1 3 -7 2 0 0 4 0 0 -1 0 -1 -7 2 1 -2 -1 0 2 2 0 -1 -7 2 1 2 0 1 0 -1 1 -2 -7 2 2 -1 1 2 0 0 -1 -1 -7 4 0 -3 -1 0 2 0 0 2 -7 5 0 -1 0 4 0 0 0 -2 -7 6 0 1 3 0 -1 0 0 -2 -6 -11 0 4 0 0 0 2 -1 0 -6 -9 0 1 0 0 1 3 0 -1 -6 -8 3 0 -1 1 0 0 0 1 -6 -5 1 0 -2 3 0 0 1 0 -6 -4 1 2 1 -1 -1 0 1 0 -6 -4 2 1 -1 0 2 0 0 -1 -6 -4 3 1 -2 1 -1 1 0 0 -6 -3 -1 1 -1 0 0 2 0 1 -6 -1 -2 0 -1 0 0 0 0 4 -6 -1 -2 0 4 0 -1 0 1 0 -6 -1 -1 -1 2 1 2 0 0 -1 -6 -1 0 -1 1 2 -1 1 0 0 -6 -1 5 0 1 0 0 0 -1 -2 -6 1 -1 3 1 1 0 0 -1 -1 -6 2 1 1 -2 0 1 -1 0 1 -6 3 -1 0 1 1 1 1 0 -2 -6 4 0 -1 0 -1 -1 0 2 1 -6 4 0 0 3 0 0 -3 1 0 -6 4 1 -2 -2 0 2 0 1 0 -6 4 2 -1 0 2 0 -2 0 0 -6 5 4 0 0 0 -1 -1 -1 0 -6 6 0 0 1 -1 0 0 -1 1 -6 8 0 -3 1 -1 1 1 0 0 -6 9 -2 0 0 1 0 0 0 0 -6 10 0 1 0 -1 -1 1 -1 0 -5 -11 0 0 0 0 2 0 1 1 -5 -8 3 -1 2 0 0 0 0 0 -5 -7 0 1 -1 0 1 1 1 0 -5 -5 0 2 0 0 2 1 -2 0 -5 -5 0 5 -2 0 -1 1 0 0 -5 -5 1 -1 1 2 0 0 1 -1 -5 -3 0 3 1 1 1 -1 0 -2 -5 -3 1 -1 -1 1 0 3 -1 0 -5 -1 -1 1 -2 0 0 0 1 2 -5 -1 1 0 0 2 -1 1 1 -2 -5 0 0 2 -1 -3 2 0 0 1 -5 1 -1 -2 -2 0 1 1 2 1 -5 1 -1 2 4 0 0 0 -1 -2 -5 1 0 -1 0 2 -1 -1 1 1 -5 1 0 4 0 1 0 0 0 -3 -5 1 5 0 0 0 0 -2 0 -1 -5 2 1 0 1 -1 1 -1 0 0 -5 2 2 0 0 0 -2 0 0 1 -5 3 -1 3 0 1 0 -2 0 0 -5 4 1 4 0 -1 -1 -1 -1 0 -5 5 -1 0 0 1 1 -1 1 -1 -5 5 0 -3 1 2 1 0 -1 0 -5 5 0 0 -1 2 -2 0 1 0 -5 6 1 1 0 -1 0 0 0 -1 -5 9 -2 -1 3 0 0 0 0 -1 -5 12 0 1 -1 -1 -1 -1 0 1 -5 14 0 -2 -1 -1 0 0 1 0 -4 -6 -3 1 5 0 0 0 0 0 -4 -4 -2 3 -1 0 0 3 -1 0 -4 -3 1 -1 0 2 0 -2 2 0 -4 -2 3 0 0 0 -1 -1 1 0 -4 -1 -1 0 1 -1 0 0 1 1 -4 -1 -1 1 4 0 1 -3 0 0 -4 -1 0 -1 -1 0 3 0 0 0 -4 -1 1 -1 -2 1 0 1 0 1 -4 -1 1 0 1 2 1 -2 -1 0 -4 0 0 1 2 -4 2 0 0 0 -4 0 2 0 -1 -2 2 1 -1 0 -4 0 3 0 -2 -1 -1 2 -1 1 -4 1 0 0 0 1 2 -2 2 -2 -4 1 0 3 -2 0 1 0 -1 0 -4 2 -3 0 0 1 0 0 2 0 -4 2 2 -1 3 -1 -2 0 0 0 -4 2 2 1 0 -1 1 -1 1 -2 -4 3 -1 2 3 0 0 -2 0 -1 -4 3 0 0 -2 0 2 1 0 -1 -4 5 -2 5 0 -2 0 0 0 -1 -4 5 1 -2 0 2 1 0 0 -2 -4 6 1 0 3 -2 0 0 0 -2 -4 9 -1 0 2 0 0 0 1 -3 -4 12 0 0 2 -2 -1 -1 0 0 -4 13 -3 2 -1 -2 0 0 1 0 -4 22 0 0 -2 -1 0 -1 -1 0 -3 -13 2 0 3 0 1 0 -1 0 -3 -10 0 0 2 2 1 0 0 -1 -3 -8 0 0 0 1 1 3 -2 0 -3 -6 -2 2 -1 0 1 0 0 2 -3 -5 0 0 1 -1 1 -1 2 0 -3 -5 1 0 0 0 -2 0 2 1 -3 -5 2 -1 -2 1 1 0 1 0 -3 -4 -1 0 1 2 0 -1 0 1 -3 -4 4 0 -2 -1 0 1 0 0 -3 -3 0 0 -1 -2 1 2 0 1 -3 -3 0 4 0 -1 -1 -1 1 0 -3 -3 1 1 1 0 -1 0 -1 1 -3 -3 1 3 -2 0 2 -1 0 -1 -3 -2 -1 0 -1 1 0 2 -2 2 -3 -1 -3 0 0 4 0 -1 1 0 -3 -1 0 0 6 0 -2 -2 0 0 -3 -1 0 1 0 -1 0 0 2 -1 -3 -1 0 5 1 -1 0 -1 -2 0 -3 -1 1 -2 1 0 0 1 0 0 -3 0 -2 0 -2 0 1 2 1 0 -3 0 -2 1 1 1 2 -1 0 -1 -3 0 -1 1 0 2 -1 0 0 0 -3 1 0 1 -2 -2 0 3 0 0 -3 1 0 2 1 -1 1 0 -1 -1 -3 1 1 2 0 0 -2 1 -1 0 -3 2 -1 -2 0 2 0 1 1 -1 -3 2 4 -1 0 0 1 0 0 -3 -3 3 -1 0 -2 -2 0 1 0 3 -3 3 0 1 0 0 -2 -1 -1 3 -3 3 1 -1 0 0 -1 2 0 -1 -3 5 0 -2 0 0 -1 0 0 2 -3 5 0 0 -3 0 2 -1 1 0 -3 7 -1 2 0 -1 0 -1 -1 1 -3 9 -1 -1 0 -1 1 0 0 0 -3 11 -1 0 1 0 0 -2 2 -2 -3 13 -1 0 -1 -1 0 1 0 -1 -2 -16 0 0 3 0 0 1 0 1 -2 -8 0 -1 -2 1 0 1 2 1 -2 -7 1 0 -1 -2 2 1 1 0 -2 -7 2 1 1 0 0 -1 0 0 -2 -6 -1 3 -2 0 1 0 1 0 -2 -6 0 0 -1 1 1 1 -1 1 -2 -5 1 4 -2 -2 0 1 0 0 -2 -5 2 -2 1 0 1 0 1 -1 -2 -4 -1 0 -2 0 2 1 2 -1 -2 -4 -1 4 -1 0 2 0 -2 0 -2 -4 0 -3 -1 1 2 2 0 0 -2 -4 1 -2 1 3 0 0 -1 0 -2 -4 2 0 -1 -4 1 0 0 3 -2 -3 -4 1 1 1 1 0 1 0 -2 -3 -2 0 -2 3 1 1 0 0 -2 -3 1 0 4 -1 -1 0 -1 0 -2 -3 1 2 1 -1 2 -1 0 -2 -2 -3 2 2 0 0 -1 0 0 -1 -2 -2 -2 2 1 -1 0 1 0 0 -2 -2 0 1 -2 1 0 2 -1 0 -2 -1 -4 5 0 1 -1 0 0 0 -2 -1 -1 -2 0 5 0 0 0 -1 -2 -1 0 0 -2 -2 1 0 1 2 -2 -1 0 0 3 -2 0 0 2 -2 -2 -1 1 1 0 0 -1 -2 0 2 -2 -1 2 -1 0 0 0 1 1 -2 -2 0 -2 0 4 0 2 -1 0 -2 -2 0 -1 -1 0 0 -2 3 1 0 -2 0 -1 0 -2 1 0 0 -1 3 -2 0 -1 0 3 1 -1 0 0 -1 -2 0 1 -1 0 3 -1 1 -1 -1 -2 1 -5 0 4 0 0 1 0 0 -2 1 1 -2 0 0 0 -1 1 1 -2 2 -2 1 0 1 2 -3 1 0 -2 2 -2 3 0 -1 -1 2 0 -1 -2 3 0 2 0 -1 1 -2 0 0 -2 3 1 2 -1 0 -2 -1 0 1 -2 4 -3 2 0 -1 -1 0 0 2 -2 4 -2 1 -2 0 2 0 -1 1 -2 4 0 0 0 2 1 1 -1 -3 -2 5 -1 0 2 -2 -1 -1 2 0 -2 5 0 -3 3 -1 -1 0 0 1 -2 5 1 -1 -1 0 -1 0 1 0 -2 6 -3 0 3 0 1 -2 0 0 -2 6 -1 -1 0 2 1 -1 -1 0 -2 7 0 3 -1 -1 0 -1 0 -1 -2 7 1 0 0 0 0 0 -2 0 -2 9 0 -2 2 -1 -2 1 0 0 -2 10 -3 1 2 0 0 -1 0 -1 -2 15 0 -3 -1 0 0 0 -1 1 -1 -20 1 0 3 0 1 0 1 0 -1 -10 1 0 -1 1 2 0 0 0 -1 -8 0 -2 1 0 0 1 2 0 -1 -8 0 2 2 0 0 0 -2 1 -1 -8 1 4 -2 1 0 0 -1 0 -1 -6 -1 2 1 -1 1 0 1 -1 -1 -6 0 -1 2 0 1 1 -1 0 -1 -6 0 2 0 0 -2 1 1 0 -1 -5 -3 1 -1 0 2 2 0 0 -1 -5 2 1 0 0 0 -3 1 1 -1 -4 -1 6 0 -1 -1 0 0 -1 -1 -4 0 -1 0 0 -1 2 2 -1 -1 -4 0 0 -2 1 1 -1 0 2 -1 -4 2 -1 0 3 0 0 0 -2 -1 -3 -4 0 -1 0 2 0 0 3 -1 -3 -1 -1 0 3 -2 2 0 0 -1 -2 -1 -2 0 0 -1 0 2 2 -1 -2 0 0 1 0 0 2 -1 -1 -1 -2 1 -2 0 3 0 -2 0 1 -1 -2 6 -2 -3 0 0 0 0 0 -1 -1 1 0 3 -1 -1 -2 0 1 -1 -1 2 -2 -2 -1 1 1 0 1 -1 -1 2 -1 1 0 2 -2 -1 0 -1 0 -2 2 0 -1 0 -1 1 1 -1 0 -1 -1 1 0 0 0 -1 2 -1 0 0 1 -3 1 0 0 0 1 -1 0 0 1 2 1 -1 0 1 -3 -1 0 4 0 1 -2 1 -1 -2 0 -1 0 5 0 0 -1 -2 0 -2 1 -1 1 -2 0 0 2 0 2 0 -2 -1 1 1 -3 3 -1 0 -1 1 0 -1 1 1 2 -2 -2 2 0 -1 0 -1 1 2 -1 -1 0 0 -1 2 -1 -1 1 3 -4 0 1 0 0 0 0 -1 2 -2 -1 0 -1 1 0 2 0 -1 2 -1 -1 -1 0 -2 1 2 1 -1 2 -1 0 2 1 -1 -2 1 0 -1 2 0 -2 -3 1 1 1 1 0 -1 2 1 -1 -1 3 -1 -1 0 0 -1 3 -3 -1 0 2 0 0 0 1 -1 3 0 0 0 -3 0 1 1 0 -1 3 0 1 3 -2 1 -2 0 -1 -1 3 1 1 2 -1 -2 -1 0 0 -1 3 2 0 0 0 1 -1 -1 -1 -1 4 -3 1 3 -2 -1 0 0 1 -1 4 -2 0 1 -1 2 0 -1 0 -1 4 -2 3 -1 -1 -1 0 1 0 -1 4 -1 0 0 0 -1 1 -1 1 -1 4 0 2 -4 1 -1 1 0 0 -1 5 0 1 1 -3 1 1 -2 0 -1 6 -2 4 0 -1 0 0 -2 0 -1 6 -1 -3 0 0 0 2 0 0 -1 6 0 -2 2 2 -2 0 -1 0 -1 7 -4 0 0 1 2 0 0 -1 -1 7 -3 0 -1 2 -1 1 0 0 -1 7 0 2 2 -2 0 -1 0 -2 -1 8 -2 1 0 -1 1 1 -1 -1 -1 17 0 0 1 -1 -2 0 -2 0 0 -21 0 3 0 1 1 1 0 0 0 -11 0 -2 1 3 0 0 1 0 0 -10 1 -1 2 0 2 0 0 -1 0 -8 1 3 1 0 0 0 -1 -1 0 -7 0 -1 0 3 -1 1 1 -1 0 -7 3 1 -2 -1 1 -1 0 1 0 -6 -1 1 -1 -2 2 0 0 2 0 -6 0 1 -2 -1 -1 1 0 3 0 -6 2 0 0 1 -2 2 0 -1 0 -5 2 0 3 -1 0 -3 1 0 0 -5 4 -1 0 1 0 -2 0 0 0 -4 0 -1 1 0 1 -1 0 1 0 -4 1 -1 0 1 -2 0 0 2 0 -4 1 1 -3 1 1 -1 1 0 0 -4 2 -2 -2 2 1 0 -1 1 0 -3 1 3 0 -3 0 -1 1 0 0 -3 2 0 1 -2 0 0 -1 1 0 -2 -1 3 1 -1 2 -2 -1 0 0 -2 0 -4 1 0 2 0 1 0 0 -2 0 -1 -1 0 -1 0 3 0 0 -2 0 3 0 0 -1 -1 -1 1 0 -2 1 1 0 0 0 2 0 -3 0 -1 -2 -1 0 2 1 -1 1 0 0 -1 -1 -1 -1 3 -2 0 1 1 0 -1 -1 0 2 4 -1 -3 0 0 0 -1 0 -2 -3 4 1 0 0 0 0 -1 1 0 0 -3 1 0 2 -1 0 -1 3 0 0 0 2 -2 0 -2 0 0 -2 1 3 -2 0 -1 1 0 0 0 -1 -2 4 -1 0 0 -1 1 frobby-0.9.5/test/bigIdeals/e7.alexdual000066400000000000000000000300601401527164200177070ustar00rootroot00000000000000R = QQ[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, a1, a10, a100, a11, a12, a13, a14, a15, a16, a17, a18, a19, a2, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a3, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a4, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a5, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a6, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a7, a70, a71, a72, a73, a74, a75, a76, a77, a78, a79, a8, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a9, a90, a91, a92, a93, a94, a95, a96, a97, a98, a99, aa00bob, b, b1, b10, b100, b11, b12, b13, b14, b15, b16, b17, b18, b19, b2, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b3, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b4, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b5, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b6, b60, b61, b62, b63, b64, b65, b66, b67, b68, b69, b7, b70, b71, b72, b73, b74, b75, b76, b77, b78, b79, b8, b80, b81, b82, b83, b84, b85, b86, b87, b88, b89, b9, b90, b91, b92, b93, b94, b95, b96, b97, b98, b99, c, c1, c10, c100, c11, c12, c13, c14, c15, c16, c17, c18, c19, c2, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c3, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c4, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c5, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c6, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c7, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c8, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c9, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, d, d1, d10, d100, d11, d12, d13, d14, d15, d16, d17, d18, d19, d2, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d3, d30, d31, d32, d33, d34, d35, d36, d37, d38, d39, d4, d40, d41, d42, d43, d44, d45, d46, d47, d48, d49, d5, d50, d51, d52, d53, d54, d55, d56, d57, d58, d59, d6, d60, d61, d62, d63, d64, d65, d66, d67, d68, d69, d7, d70, d71, d72, d73, d74, d75, d76, d77, d78, d79, d8, d80, d81, d82, d83, d84, d85, d86, d87, d88, d89, d9, d90, d91, d92, d93, d94, d95, d96, d97, d98, d99, e, e1, e10, e100, e11, e12, e13, e14, e15, e16, e17, e18, e19, e2, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e3, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e4, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e5, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e6, e60, e61, e62, e63, e64, e65, e66, e67, e68, e69, e7, e70, e71, e72, e73, e74, e75, e76, e77, e78, e79, e8, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e9, e90, e91, e92, e93, e94, e95, e96, e97, e98, e99, f, f1, f10, f100, f11, f12, f13, f14, f15, f16, f17, f18, f19, f2, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f3, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f4, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f5, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f6, f60, f61, f62, f63, f64, f65, f66, f67, f68, f69, f7, f70, f71, f72, f73, f74, f75, f76, f77, f78, f79, f8, f80, f81, f82, f83, f84, f85, f86, f87, f88, f89, f9, f90, f91, f92, f93, f94, f95, f96, f97, f98, f99, g, g1, g10, g100, g11, g12, g13, g14, g15, g16, g17, g18, g19, g2, g20, g21, g22, g23, g24, g25, g26, g27, g28, g29, g3, g30, g31, g32, g33, g34, g35, g36, g37, g38, g39, g4, g40, g41, g42, g43, g44, g45, g46, g47, g48, g49, g5, g50, g51, g52, g53, g54, g55, g56, g57, g58, g59, g6, g60, g61, g62, g63, g64, g65, g66, g67, g68, g69, g7, g70, g71, g72, g73, g74, g75, g76, g77, g78, g79, g8, g80, g81, g82, g83, g84, g85, g86, g87, g88, g89, g9, g90, g91, g92, g93, g94, g95, g96, g97, g98, g99, h, h1, h10, h100, h11, h12, h13, h14, h15, h16, h17, h18, h19, h2, h20, h21, h22, h23, h24, h25, h26, h27, h28, h29, h3, h30, h31, h32, h33, h34, h35, h36, h37, h38, h39, h4, h40, h41, h42, h43, h44, h45, h46, h47, h48, h49, h5, h50, h51, h52, h53, h54, h55, h56, h57, h58, h59, h6, h60, h61, h62, h63, h64, h65, h66, h67, h68, h69, h7, h70, h71, h72, h73, h74, h75, h76, h77, h78, h79, h8, h80, h81, h82, h83, h84, h85, h86, h87, h88, h89, h9, h90, h91, h92, h93, h94, h95, h96, h97, h98, h99, i, i1, i10, i100, i11, i12, i13, i14, i15, i16, i17, i18, i19, i2, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i3, i30, i31, i32, i33, i34, i35, i36, i37, i38, i39, i4, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i5, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i6, i60, i61, i62, i63, i64, i65, i66, i67, i68, i69, i7, i70, i71, i72, i73, i74, i75, i76, i77, i78, i79, i8, i80, i81, i82, i83, i84, i85, i86, i87, i88, i89, i9, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99, j, j1, j10, j100, j11, j12, j13, j14, j15, j16, j17, j18, j19, j2, j20, j21, j22, j23, j24, j25, j26, j27, j28, j29, j3, j30, j31, j32, j33, j34, j35, j36, j37, j38, j39, j4, j40, j41, j42, j43, j44, j45, j46, j47, j48, j49, j5, j50, j51, j52, j53, j54, j55, j56, j57, j58, j59, j6, j60, j61, j62, j63, j64, j65, j66, j67, j68, j69, j7, j70, j71, j72, j73, j74, j75, j76, j77, j78, j79, j8, j80, j81, j82, j83, j84, j85, j86, j87, j88, j89, j9, j90, j91, j92, j93, j94, j95, j96, j97, j98, j99, k, k1, k10, k100, k11, k12, k13, k14, k15, k16, k17, k18, k19, k2, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k3, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k4, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k5, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k6, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k7, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k8, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k9, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]; I = monomialIdeal( A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, a1, a10, a100, a11, a12, a13, a14, a15, a16, a17, a18, a19, a2, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a3, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a4, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a5, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a6, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a7, a70, a71, a72, a73, a74, a75, a76, a77, a78, a79, a8, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a9, a90, a91, a92, a93, a94, a95, a96, a97, a98, a99, aa00bob, b, b1, b10, b100, b11, b12, b13, b14, b15, b16, b17, b18, b19, b2, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b3, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b4, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b5, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b6, b60, b61, b62, b63, b64, b65, b66, b67, b68, b69, b7, b70, b71, b72, b73, b74, b75, b76, b77, b78, b79, b8, b80, b81, b82, b83, b84, b85, b86, b87, b88, b89, b9, b90, b91, b92, b93, b94, b95, b96, b97, b98, b99, c, c1, c10, c100, c11, c12, c13, c14, c15, c16, c17, c18, c19, c2, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c3, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c4, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c5, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c6, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c7, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c8, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c9, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, d, d1, d10, d100, d11, d12, d13, d14, d15, d16, d17, d18, d19, d2, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d3, d30, d31, d32, d33, d34, d35, d36, d37, d38, d39, d4, d40, d41, d42, d43, d44, d45, d46, d47, d48, d49, d5, d50, d51, d52, d53, d54, d55, d56, d57, d58, d59, d6, d60, d61, d62, d63, d64, d65, d66, d67, d68, d69, d7, d70, d71, d72, d73, d74, d75, d76, d77, d78, d79, d8, d80, d81, d82, d83, d84, d85, d86, d87, d88, d89, d9, d90, d91, d92, d93, d94, d95, d96, d97, d98, d99, e, e1, e10, e100, e11, e12, e13, e14, e15, e16, e17, e18, e19, e2, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e3, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e4, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e5, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e6, e60, e61, e62, e63, e64, e65, e66, e67, e68, e69, e7, e70, e71, e72, e73, e74, e75, e76, e77, e78, e79, e8, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e9, e90, e91, e92, e93, e94, e95, e96, e97, e98, e99, f, f1, f10, f100, f11, f12, f13, f14, f15, f16, f17, f18, f19, f2, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f3, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f4, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f5, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f6, f60, f61, f62, f63, f64, f65, f66, f67, f68, f69, f7, f70, f71, f72, f73, f74, f75, f76, f77, f78, f79, f8, f80, f81, f82, f83, f84, f85, f86, f87, f88, f89, f9, f90, f91, f92, f93, f94, f95, f96, f97, f98, f99, g, g1, g10, g100, g11, g12, g13, g14, g15, g16, g17, g18, g19, g2, g20, g21, g22, g23, g24, g25, g26, g27, g28, g29, g3, g30, g31, g32, g33, g34, g35, g36, g37, g38, g39, g4, g40, g41, g42, g43, g44, g45, g46, g47, g48, g49, g5, g50, g51, g52, g53, g54, g55, g56, g57, g58, g59, g6, g60, g61, g62, g63, g64, g65, g66, g67, g68, g69, g7, g70, g71, g72, g73, g74, g75, g76, g77, g78, g79, g8, g80, g81, g82, g83, g84, g85, g86, g87, g88, g89, g9, g90, g91, g92, g93, g94, g95, g96, g97, g98, g99, h, h1, h10, h100, h11, h12, h13, h14, h15, h16, h17, h18, h19, h2, h20, h21, h22, h23, h24, h25, h26, h27, h28, h29, h3, h30, h31, h32, h33, h34, h35, h36, h37, h38, h39, h4, h40, h41, h42, h43, h44, h45, h46, h47, h48, h49, h5, h50, h51, h52, h53, h54, h55, h56, h57, h58, h59, h6, h60, h61, h62, h63, h64, h65, h66, h67, h68, h69, h7, h70, h71, h72, h73, h74, h75, h76, h77, h78, h79, h8, h80, h81, h82, h83, h84, h85, h86, h87, h88, h89, h9, h90, h91, h92, h93, h94, h95, h96, h97, h98, h99, i, i1, i10, i100, i11, i12, i13, i14, i15, i16, i17, i18, i19, i2, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i3, i30, i31, i32, i33, i34, i35, i36, i37, i38, i39, i4, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i5, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i6, i60, i61, i62, i63, i64, i65, i66, i67, i68, i69, i7, i70, i71, i72, i73, i74, i75, i76, i77, i78, i79, i8, i80, i81, i82, i83, i84, i85, i86, i87, i88, i89, i9, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99, j, j1, j10, j100, j11, j12, j13, j14, j15, j16, j17, j18, j19, j2, j20, j21, j22, j23, j24, j25, j26, j27, j28, j29, j3, j30, j31, j32, j33, j34, j35, j36, j37, j38, j39, j4, j40, j41, j42, j43, j44, j45, j46, j47, j48, j49, j5, j50, j51, j52, j53, j54, j55, j56, j57, j58, j59, j6, j60, j61, j62, j63, j64, j65, j66, j67, j68, j69, j7, j70, j71, j72, j73, j74, j75, j76, j77, j78, j79, j8, j80, j81, j82, j83, j84, j85, j86, j87, j88, j89, j9, j90, j91, j92, j93, j94, j95, j96, j97, j98, j99, k, k1, k10, k100, k11, k12, k13, k14, k15, k16, k17, k18, k19, k2, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k3, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k4, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k5, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k6, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k7, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k8, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k9, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z ); frobby-0.9.5/test/bigIdeals/e7.assoprimes000066400000000000000000000300601401527164200202750ustar00rootroot00000000000000R = QQ[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, a1, a10, a100, a11, a12, a13, a14, a15, a16, a17, a18, a19, a2, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a3, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a4, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a5, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a6, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a7, a70, a71, a72, a73, a74, a75, a76, a77, a78, a79, a8, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a9, a90, a91, a92, a93, a94, a95, a96, a97, a98, a99, aa00bob, b, b1, b10, b100, b11, b12, b13, b14, b15, b16, b17, b18, b19, b2, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b3, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b4, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b5, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b6, b60, b61, b62, b63, b64, b65, b66, b67, b68, b69, b7, b70, b71, b72, b73, b74, b75, b76, b77, b78, b79, b8, b80, b81, b82, b83, b84, b85, b86, b87, b88, b89, b9, b90, b91, b92, b93, b94, b95, b96, b97, b98, b99, c, c1, c10, c100, c11, c12, c13, c14, c15, c16, c17, c18, c19, c2, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c3, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c4, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c5, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c6, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c7, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c8, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c9, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, d, d1, d10, d100, d11, d12, d13, d14, d15, d16, d17, d18, d19, d2, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d3, d30, d31, d32, d33, d34, d35, d36, d37, d38, d39, d4, d40, d41, d42, d43, d44, d45, d46, d47, d48, d49, d5, d50, d51, d52, d53, d54, d55, d56, d57, d58, d59, d6, d60, d61, d62, d63, d64, d65, d66, d67, d68, d69, d7, d70, d71, d72, d73, d74, d75, d76, d77, d78, d79, d8, d80, d81, d82, d83, d84, d85, d86, d87, d88, d89, d9, d90, d91, d92, d93, d94, d95, d96, d97, d98, d99, e, e1, e10, e100, e11, e12, e13, e14, e15, e16, e17, e18, e19, e2, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e3, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e4, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e5, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e6, e60, e61, e62, e63, e64, e65, e66, e67, e68, e69, e7, e70, e71, e72, e73, e74, e75, e76, e77, e78, e79, e8, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e9, e90, e91, e92, e93, e94, e95, e96, e97, e98, e99, f, f1, f10, f100, f11, f12, f13, f14, f15, f16, f17, f18, f19, f2, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f3, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f4, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f5, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f6, f60, f61, f62, f63, f64, f65, f66, f67, f68, f69, f7, f70, f71, f72, f73, f74, f75, f76, f77, f78, f79, f8, f80, f81, f82, f83, f84, f85, f86, f87, f88, f89, f9, f90, f91, f92, f93, f94, f95, f96, f97, f98, f99, g, g1, g10, g100, g11, g12, g13, g14, g15, g16, g17, g18, g19, g2, g20, g21, g22, g23, g24, g25, g26, g27, g28, g29, g3, g30, g31, g32, g33, g34, g35, g36, g37, g38, g39, g4, g40, g41, g42, g43, g44, g45, g46, g47, g48, g49, g5, g50, g51, g52, g53, g54, g55, g56, g57, g58, g59, g6, g60, g61, g62, g63, g64, g65, g66, g67, g68, g69, g7, g70, g71, g72, g73, g74, g75, g76, g77, g78, g79, g8, g80, g81, g82, g83, g84, g85, g86, g87, g88, g89, g9, g90, g91, g92, g93, g94, g95, g96, g97, g98, g99, h, h1, h10, h100, h11, h12, h13, h14, h15, h16, h17, h18, h19, h2, h20, h21, h22, h23, h24, h25, h26, h27, h28, h29, h3, h30, h31, h32, h33, h34, h35, h36, h37, h38, h39, h4, h40, h41, h42, h43, h44, h45, h46, h47, h48, h49, h5, h50, h51, h52, h53, h54, h55, h56, h57, h58, h59, h6, h60, h61, h62, h63, h64, h65, h66, h67, h68, h69, h7, h70, h71, h72, h73, h74, h75, h76, h77, h78, h79, h8, h80, h81, h82, h83, h84, h85, h86, h87, h88, h89, h9, h90, h91, h92, h93, h94, h95, h96, h97, h98, h99, i, i1, i10, i100, i11, i12, i13, i14, i15, i16, i17, i18, i19, i2, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i3, i30, i31, i32, i33, i34, i35, i36, i37, i38, i39, i4, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i5, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i6, i60, i61, i62, i63, i64, i65, i66, i67, i68, i69, i7, i70, i71, i72, i73, i74, i75, i76, i77, i78, i79, i8, i80, i81, i82, i83, i84, i85, i86, i87, i88, i89, i9, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99, j, j1, j10, j100, j11, j12, j13, j14, j15, j16, j17, j18, j19, j2, j20, j21, j22, j23, j24, j25, j26, j27, j28, j29, j3, j30, j31, j32, j33, j34, j35, j36, j37, j38, j39, j4, j40, j41, j42, j43, j44, j45, j46, j47, j48, j49, j5, j50, j51, j52, j53, j54, j55, j56, j57, j58, j59, j6, j60, j61, j62, j63, j64, j65, j66, j67, j68, j69, j7, j70, j71, j72, j73, j74, j75, j76, j77, j78, j79, j8, j80, j81, j82, j83, j84, j85, j86, j87, j88, j89, j9, j90, j91, j92, j93, j94, j95, j96, j97, j98, j99, k, k1, k10, k100, k11, k12, k13, k14, k15, k16, k17, k18, k19, k2, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k3, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k4, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k5, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k6, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k7, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k8, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k9, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]; I = monomialIdeal( A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, a1, a10, a100, a11, a12, a13, a14, a15, a16, a17, a18, a19, a2, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a3, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a4, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a5, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a6, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a7, a70, a71, a72, a73, a74, a75, a76, a77, a78, a79, a8, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a9, a90, a91, a92, a93, a94, a95, a96, a97, a98, a99, aa00bob, b, b1, b10, b100, b11, b12, b13, b14, b15, b16, b17, b18, b19, b2, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b3, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b4, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b5, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b6, b60, b61, b62, b63, b64, b65, b66, b67, b68, b69, b7, b70, b71, b72, b73, b74, b75, b76, b77, b78, b79, b8, b80, b81, b82, b83, b84, b85, b86, b87, b88, b89, b9, b90, b91, b92, b93, b94, b95, b96, b97, b98, b99, c, c1, c10, c100, c11, c12, c13, c14, c15, c16, c17, c18, c19, c2, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c3, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c4, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c5, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c6, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c7, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c8, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c9, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, d, d1, d10, d100, d11, d12, d13, d14, d15, d16, d17, d18, d19, d2, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d3, d30, d31, d32, d33, d34, d35, d36, d37, d38, d39, d4, d40, d41, d42, d43, d44, d45, d46, d47, d48, d49, d5, d50, d51, d52, d53, d54, d55, d56, d57, d58, d59, d6, d60, d61, d62, d63, d64, d65, d66, d67, d68, d69, d7, d70, d71, d72, d73, d74, d75, d76, d77, d78, d79, d8, d80, d81, d82, d83, d84, d85, d86, d87, d88, d89, d9, d90, d91, d92, d93, d94, d95, d96, d97, d98, d99, e, e1, e10, e100, e11, e12, e13, e14, e15, e16, e17, e18, e19, e2, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e3, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e4, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e5, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e6, e60, e61, e62, e63, e64, e65, e66, e67, e68, e69, e7, e70, e71, e72, e73, e74, e75, e76, e77, e78, e79, e8, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e9, e90, e91, e92, e93, e94, e95, e96, e97, e98, e99, f, f1, f10, f100, f11, f12, f13, f14, f15, f16, f17, f18, f19, f2, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f3, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f4, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f5, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f6, f60, f61, f62, f63, f64, f65, f66, f67, f68, f69, f7, f70, f71, f72, f73, f74, f75, f76, f77, f78, f79, f8, f80, f81, f82, f83, f84, f85, f86, f87, f88, f89, f9, f90, f91, f92, f93, f94, f95, f96, f97, f98, f99, g, g1, g10, g100, g11, g12, g13, g14, g15, g16, g17, g18, g19, g2, g20, g21, g22, g23, g24, g25, g26, g27, g28, g29, g3, g30, g31, g32, g33, g34, g35, g36, g37, g38, g39, g4, g40, g41, g42, g43, g44, g45, g46, g47, g48, g49, g5, g50, g51, g52, g53, g54, g55, g56, g57, g58, g59, g6, g60, g61, g62, g63, g64, g65, g66, g67, g68, g69, g7, g70, g71, g72, g73, g74, g75, g76, g77, g78, g79, g8, g80, g81, g82, g83, g84, g85, g86, g87, g88, g89, g9, g90, g91, g92, g93, g94, g95, g96, g97, g98, g99, h, h1, h10, h100, h11, h12, h13, h14, h15, h16, h17, h18, h19, h2, h20, h21, h22, h23, h24, h25, h26, h27, h28, h29, h3, h30, h31, h32, h33, h34, h35, h36, h37, h38, h39, h4, h40, h41, h42, h43, h44, h45, h46, h47, h48, h49, h5, h50, h51, h52, h53, h54, h55, h56, h57, h58, h59, h6, h60, h61, h62, h63, h64, h65, h66, h67, h68, h69, h7, h70, h71, h72, h73, h74, h75, h76, h77, h78, h79, h8, h80, h81, h82, h83, h84, h85, h86, h87, h88, h89, h9, h90, h91, h92, h93, h94, h95, h96, h97, h98, h99, i, i1, i10, i100, i11, i12, i13, i14, i15, i16, i17, i18, i19, i2, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i3, i30, i31, i32, i33, i34, i35, i36, i37, i38, i39, i4, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i5, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i6, i60, i61, i62, i63, i64, i65, i66, i67, i68, i69, i7, i70, i71, i72, i73, i74, i75, i76, i77, i78, i79, i8, i80, i81, i82, i83, i84, i85, i86, i87, i88, i89, i9, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99, j, j1, j10, j100, j11, j12, j13, j14, j15, j16, j17, j18, j19, j2, j20, j21, j22, j23, j24, j25, j26, j27, j28, j29, j3, j30, j31, j32, j33, j34, j35, j36, j37, j38, j39, j4, j40, j41, j42, j43, j44, j45, j46, j47, j48, j49, j5, j50, j51, j52, j53, j54, j55, j56, j57, j58, j59, j6, j60, j61, j62, j63, j64, j65, j66, j67, j68, j69, j7, j70, j71, j72, j73, j74, j75, j76, j77, j78, j79, j8, j80, j81, j82, j83, j84, j85, j86, j87, j88, j89, j9, j90, j91, j92, j93, j94, j95, j96, j97, j98, j99, k, k1, k10, k100, k11, k12, k13, k14, k15, k16, k17, k18, k19, k2, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k3, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k4, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k5, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k6, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k7, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k8, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k9, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z ); frobby-0.9.5/test/bigIdeals/e7.fulltest000066400000000000000000000244321401527164200177600ustar00rootroot00000000000000R = QQ[ q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m, Q,W,E,R,T,Y,U,I,O,P,A,S,D,F,G,H,J,K,L,Z,X,C,V,B,N,M, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11,a12,a13,a14,a15,a16,a17,a18,a19, a20, a21,a22,a23,a24,a25,a26,a27,a28,a29, a30, a31,a32,a33,a34,a35,a36,a37,a38,a39, a40, a41,a42,a43,a44,a45,a46,a47,a48,a49, a50, a51,a52,a53,a54,a55,a56,a57,a58,a59, a60, a61,a62,a63,a64,a65,a66,a67,a68,a69, a70, a71,a72,a73,a74,a75,a76,a77,a78,a79, a80, a81,a82,a83,a84,a85,a86,a87,a88,a89, a90, a91,a92,a93,a94,a95,a96,a97,a98,a99,a100, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11,b12,b13,b14,b15,b16,b17,b18,b19, b20, b21,b22,b23,b24,b25,b26,b27,b28,b29, b30, b31,b32,b33,b34,b35,b36,b37,b38,b39, b40, b41,b42,b43,b44,b45,b46,b47,b48,b49, b50, b51,b52,b53,b54,b55,b56,b57,b58,b59, b60, b61,b62,b63,b64,b65,b66,b67,b68,b69, b70, b71,b72,b73,b74,b75,b76,b77,b78,b79, b80, b81,b82,b83,b84,b85,b86,b87,b88,b89, b90, b91,b92,b93,b94,b95,b96,b97,b98,b99,b100, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11,c12,c13,c14,c15,c16,c17,c18,c19, c20, c21,c22,c23,c24,c25,c26,c27,c28,c29, c30, c31,c32,c33,c34,c35,c36,c37,c38,c39, c40, c41,c42,c43,c44,c45,c46,c47,c48,c49, c50, c51,c52,c53,c54,c55,c56,c57,c58,c59, c60, c61,c62,c63,c64,c65,c66,c67,c68,c69, c70, c71,c72,c73,c74,c75,c76,c77,c78,c79, c80, c81,c82,c83,c84,c85,c86,c87,c88,c89, c90, c91,c92,c93,c94,c95,c96,c97,c98,c99,c100, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11,d12,d13,d14,d15,d16,d17,d18,d19, d20, d21,d22,d23,d24,d25,d26,d27,d28,d29, d30, d31,d32,d33,d34,d35,d36,d37,d38,d39, d40, d41,d42,d43,d44,d45,d46,d47,d48,d49, d50, d51,d52,d53,d54,d55,d56,d57,d58,d59, d60, d61,d62,d63,d64,d65,d66,d67,d68,d69, d70, d71,d72,d73,d74,d75,d76,d77,d78,d79, d80, d81,d82,d83,d84,d85,d86,d87,d88,d89, d90, d91,d92,d93,d94,d95,d96,d97,d98,d99,d100, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11,e12,e13,e14,e15,e16,e17,e18,e19, e20, e21,e22,e23,e24,e25,e26,e27,e28,e29, e30, e31,e32,e33,e34,e35,e36,e37,e38,e39, e40, e41,e42,e43,e44,e45,e46,e47,e48,e49, e50, e51,e52,e53,e54,e55,e56,e57,e58,e59, e60, e61,e62,e63,e64,e65,e66,e67,e68,e69, e70, e71,e72,e73,e74,e75,e76,e77,e78,e79, e80, e81,e82,e83,e84,e85,e86,e87,e88,e89, e90, e91,e92,e93,e94,e95,e96,e97,e98,e99,e100, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11,f12,f13,f14,f15,f16,f17,f18,f19, f20, f21,f22,f23,f24,f25,f26,f27,f28,f29, f30, f31,f32,f33,f34,f35,f36,f37,f38,f39, f40, f41,f42,f43,f44,f45,f46,f47,f48,f49, f50, f51,f52,f53,f54,f55,f56,f57,f58,f59, f60, f61,f62,f63,f64,f65,f66,f67,f68,f69, f70, f71,f72,f73,f74,f75,f76,f77,f78,f79, f80, f81,f82,f83,f84,f85,f86,f87,f88,f89, f90, f91,f92,f93,f94,f95,f96,f97,f98,f99,f100, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11,g12,g13,g14,g15,g16,g17,g18,g19, g20, g21,g22,g23,g24,g25,g26,g27,g28,g29, g30, g31,g32,g33,g34,g35,g36,g37,g38,g39, g40, g41,g42,g43,g44,g45,g46,g47,g48,g49, g50, g51,g52,g53,g54,g55,g56,g57,g58,g59, g60, g61,g62,g63,g64,g65,g66,g67,g68,g69, g70, g71,g72,g73,g74,g75,g76,g77,g78,g79, g80, g81,g82,g83,g84,g85,g86,g87,g88,g89, g90, g91,g92,g93,g94,g95,g96,g97,g98,g99,g100, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11,h12,h13,h14,h15,h16,h17,h18,h19, h20, h21,h22,h23,h24,h25,h26,h27,h28,h29, h30, h31,h32,h33,h34,h35,h36,h37,h38,h39, h40, h41,h42,h43,h44,h45,h46,h47,h48,h49, h50, h51,h52,h53,h54,h55,h56,h57,h58,h59, h60, h61,h62,h63,h64,h65,h66,h67,h68,h69, h70, h71,h72,h73,h74,h75,h76,h77,h78,h79, h80, h81,h82,h83,h84,h85,h86,h87,h88,h89, h90, h91,h92,h93,h94,h95,h96,h97,h98,h99,h100, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11,i12,i13,i14,i15,i16,i17,i18,i19, i20, i21,i22,i23,i24,i25,i26,i27,i28,i29, i30, i31,i32,i33,i34,i35,i36,i37,i38,i39, i40, i41,i42,i43,i44,i45,i46,i47,i48,i49, i50, i51,i52,i53,i54,i55,i56,i57,i58,i59, i60, i61,i62,i63,i64,i65,i66,i67,i68,i69, i70, i71,i72,i73,i74,i75,i76,i77,i78,i79, i80, i81,i82,i83,i84,i85,i86,i87,i88,i89, i90, i91,i92,i93,i94,i95,i96,i97,i98,i99,i100, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11,j12,j13,j14,j15,j16,j17,j18,j19, j20, j21,j22,j23,j24,j25,j26,j27,j28,j29, j30, j31,j32,j33,j34,j35,j36,j37,j38,j39, j40, j41,j42,j43,j44,j45,j46,j47,j48,j49, j50, j51,j52,j53,j54,j55,j56,j57,j58,j59, j60, j61,j62,j63,j64,j65,j66,j67,j68,j69, j70, j71,j72,j73,j74,j75,j76,j77,j78,j79, j80, j81,j82,j83,j84,j85,j86,j87,j88,j89, j90, j91,j92,j93,j94,j95,j96,j97,j98,j99,j100, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11,k12,k13,k14,k15,k16,k17,k18,k19, k20, k21,k22,k23,k24,k25,k26,k27,k28,k29, k30, k31,k32,k33,k34,k35,k36,k37,k38,k39, k40, k41,k42,k43,k44,k45,k46,k47,k48,k49, k50, k51,k52,k53,k54,k55,k56,k57,k58,k59, k60, k61,k62,k63,k64,k65,k66,k67,k68,k69, k70, k71,k72,k73,k74,k75,k76,k77,k78,k79, k80, k81,k82,k83,k84,k85,k86,k87,k88,k89, k90, k91,k92,k93,k94,k95,k96,k97,k98,k99,k100, aa00bob ]; I=monomialIdeal( b1* b2* b3* b4* b5* b6* b7* b8* b9* b10* b11*b12*b13*b14*b15*b16*b17*b18*b19* b20* b21*b22*b23*b24*b25*b26*b27*b28*b29* b30* b31*b32*b33*b34*b35*b36*b37*b38*b39* b40* b41*b42*b43*b44*b45*b46*b47*b48*b49* b50* b51*b52*b53*b54*b55*b56*b57*b58*b59* b60* b61*b62*b63*b64*b65*b66*b67*b68*b69* b70* b71*b72*b73*b74*b75*b76*b77*b78*b79* b80* b81*b82*b83*b84*b85*b86*b87*b88*b89* b90* b91*b92*b93*b94*b95*b96*b97*b98*b99*b100* q^1* w^1* e^2* r^3* t^4* y^5* u^6* i^7* o^8* p^9* a^10* s^11* d^12* f^13* g^14* h^15* j^16* k^17* l^18* z^19* x^20* c^21* v^22* b^23* n^24* m^25* Q^15* W^16* E^17* R^31* T^32* Y^33* U^63* I^64* O^65* P^127* A^128* S^129* D^255* F^256* G^257* H^511* J^512* K^513* L^1023* Z^1024* X^1025* C^65535* V^65536* B^65537* N^4294967295* M^4294967296* a1^4294967297* a2^18446744073709551615* a3^18446744073709551616* a4^18446744073709551617* a5^ 99* a6^100* a7^101* a8 ^ 999* a9 ^1000* a10^1001* a11^ 9999* a12^10000* a13^10001* a14^ 99999* a15^100000* a16^100001* a17^ 999999* a18^1000000* a19^1000001* a20^ 9999999* a21^10000000* a22^10000001* a23^ 99999999* a24^100000000* a25^100000001* a26^ 999999999* a27^1000000000* a28^1000000001* a29^ 9999999999* a30^10000000000* a31^10000000001* a32^ 99999999999* a33^100000000000* a34^100000000001* a35^ 999999999999* a36^1000000000000* a37^1000000000001* a38^ 9999999999999* a39^10000000000000* a40^10000000000001* a41^ 99999999999999* a42^100000000000000* a43^100000000000001* a44^ 999999999999999* a45^1000000000000000* a46^1000000000000001* a47^ 9999999999999999* a48^10000000000000000* a49^10000000000000001* a50^ 9999999999999999* a51^10000000000000000* a52^10000000000000001* a53^ 9999999999999998* a54*a55*a56*a57*a58*a59* a60* a61*a62*a63*a64*a65*a66*a67*a68*a69* a70* a71*a72*a73*a74*a75*a76*a77*a78*a79* a80* a81*a82*a83*a84*a85*a86*a87*a88*a89* a90* a91*a92*a93*a94*a95*a96*a97*a98*a99*a100* c1* c2* c3* c4* c5* c6* c7* c8* c9* c10* c11*c12*c13*c14*c15*c16*c17*c18*c19* c20* c21*c22*c23*c24*c25*c26*c27*c28*c29* c30* c31*c32*c33*c34*c35*c36*c37*c38*c39* c40* c41*c42*c43*c44*c45*c46*c47*c48*c49* c50* c51*c52*c53*c54*c55*c56*c57*c58*c59* c60* c61*c62*c63*c64*c65*c66*c67*c68*c69* c70* c71*c72*c73*c74*c75*c76*c77*c78*c79* c80* c81*c82*c83*c84*c85*c86*c87*c88*c89* c90* c91*c92*c93*c94*c95*c96*c97*c98*c99*c100* d1* d2* d3* d4* d5* d6* d7* d8* d9* d10* d11*d12*d13*d14*d15*d16*d17*d18*d19* d20* d21*d22*d23*d24*d25*d26*d27*d28*d29* d30* d31*d32*d33*d34*d35*d36*d37*d38*d39* d40* d41*d42*d43*d44*d45*d46*d47*d48*d49* d50* d51*d52*d53*d54*d55*d56*d57*d58*d59* d60* d61*d62*d63*d64*d65*d66*d67*d68*d69* d70* d71*d72*d73*d74*d75*d76*d77*d78*d79* d80* d81*d82*d83*d84*d85*d86*d87*d88*d89* d90* d91*d92*d93*d94*d95*d96*d97*d98*d99*d100* e1* e2* e3* e4* e5* e6* e7* e8* e9* e10* e11*e12*e13*e14*e15*e16*e17*e18*e19* e20* e21*e22*e23*e24*e25*e26*e27*e28*e29* e30* e31*e32*e33*e34*e35*e36*e37*e38*e39* e40* e41*e42*e43*e44*e45*e46*e47*e48*e49* e50* e51*e52*e53*e54*e55*e56*e57*e58*e59* e60* e61*e62*e63*e64*e65*e66*e67*e68*e69* e70* e71*e72*e73*e74*e75*e76*e77*e78*e79* e80* e81*e82*e83*e84*e85*e86*e87*e88*e89* e90* e91*e92*e93*e94*e95*e96*e97*e98*e99*e100* f1^103* f2^104* f3^105* f4* f5* f6* f7* f8* f9* f10* f11*f12*f13*f14*f15*f16*f17*f18*f19* f20* f21*f22*f23*f24*f25*f26*f27*f28*f29* f30* f31*f32*f33*f34*f35*f36*f37*f38*f39* f40* f41*f42*f43*f44*f45*f46*f47*f48*f49* f50* f51*f52*f53*f54*f55*f56*f57*f58*f59* f60* f61*f62*f63*f64*f65*f66*f67*f68*f69* f70* f71*f72*f73*f74*f75*f76*f77*f78*f79* f80* f81*f82*f83*f84*f85*f86*f87*f88*f89* f90* f91*f92*f93*f94*f95*f96*f97*f98*f99*f100* g1* g2* g3* g4* g5* g6* g7* g8* g9* g10* g11*g12*g13*g14*g15*g16*g17*g18*g19* g20* g21*g22*g23*g24*g25*g26*g27*g28*g29* g30* g31*g32*g33*g34*g35*g36*g37*g38*g39* g40* g41*g42*g43*g44*g45*g46*g47*g48*g49* g50* g51*g52*g53*g54*g55*g56*g57*g58*g59* g60* g61*g62*g63*g64*g65*g66*g67*g68*g69* g70* g71*g72*g73*g74*g75*g76*g77*g78*g79* g80* g81*g82*g83*g84*g85*g86*g87*g88*g89* g90* g91*g92*g93*g94*g95*g96*g97*g98*g99*g100* h1* h2* h3* h4* h5* h6* h7* h8* h9* h10* h11*h12*h13*h14*h15*h16*h17*h18*h19* h20* h21*h22*h23*h24*h25*h26*h27*h28*h29* h30* h31*h32*h33*h34*h35*h36*h37*h38*h39* h40* h41*h42*h43*h44*h45*h46*h47*h48*h49* h50* h51*h52*h53*h54*h55*h56*h57*h58*h59* h60* h61*h62*h63*h64*h65*h66*h67*h68*h69* h70* h71*h72*h73*h74*h75*h76*h77*h78*h79* h80* h81*h82*h83*h84*h85*h86*h87*h88*h89* h90* h91*h92*h93*h94*h95*h96*h97*h98*h99*h100* i1* i2* i3* i4* i5* i6* i7* i8* i9* i10* i11*i12*i13*i14*i15*i16*i17*i18*i19* i20* i21*i22*i23*i24*i25*i26*i27*i28*i29* i30* i31*i32*i33*i34*i35*i36*i37*i38*i39* i40* i41*i42*i43*i44*i45*i46*i47*i48*i49* i50* i51*i52*i53*i54*i55*i56*i57*i58*i59* i60* i61*i62*i63*i64*i65*i66*i67*i68*i69* i70* i71*i72*i73*i74*i75*i76*i77*i78*i79* i80* i81*i82*i83*i84*i85*i86*i87*i88*i89* i90* i91*i92*i93*i94*i95*i96*i97*i98*i99*i100* j1* j2* j3* j4* j5* j6* j7* j8* j9* j10* j11*j12*j13*j14*j15*j16*j17*j18*j19* j20* j21*j22*j23*j24*j25*j26*j27*j28*j29* j30* j31*j32*j33*j34*j35*j36*j37*j38*j39* j40* j41*j42*j43*j44*j45*j46*j47*j48*j49* j50* j51*j52*j53*j54*j55*j56*j57*j58*j59* j60* j61*j62*j63*j64*j65*j66*j67*j68*j69* j70* j71*j72*j73*j74*j75*j76*j77*j78*j79* j80* j81*j82*j83*j84*j85*j86*j87*j88*j89* j90* j91*j92*j93*j94*j95*j96*j97*j98*j99*j100* k1* k2* k3* k4* k5* k6* k7* k8* k9* k10* k11*k12*k13*k14*k15*k16*k17*k18*k19* k20* k21*k22*k23*k24*k25*k26*k27*k28*k29* k30* k31*k32*k33*k34*k35*k36*k37*k38*k39* k40* k41*k42*k43*k44*k45*k46*k47*k48*k49* k50* k51*k52*k53*k54*k55*k56*k57*k58*k59* k60* k61*k62*k63*k64*k65*k66*k67*k68*k69* k70* k71*k72*k73*k74*k75*k76*k77*k78*k79* k80* k81*k82*k83*k84*k85*k86*k87*k88*k89* k90* k91*k92*k93*k94*k95*k96* k97^3* k98^4* k99^5* k100^12345678901234567890* aa00bob ); frobby-0.9.5/test/bigIdeals/e7.intersection000066400000000000000000000251751401527164200206310ustar00rootroot00000000000000R = QQ[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, a1, a10, a100, a11, a12, a13, a14, a15, a16, a17, a18, a19, a2, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a3, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a4, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a5, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a6, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a7, a70, a71, a72, a73, a74, a75, a76, a77, a78, a79, a8, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a9, a90, a91, a92, a93, a94, a95, a96, a97, a98, a99, aa00bob, b, b1, b10, b100, b11, b12, b13, b14, b15, b16, b17, b18, b19, b2, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b3, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b4, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b5, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b6, b60, b61, b62, b63, b64, b65, b66, b67, b68, b69, b7, b70, b71, b72, b73, b74, b75, b76, b77, b78, b79, b8, b80, b81, b82, b83, b84, b85, b86, b87, b88, b89, b9, b90, b91, b92, b93, b94, b95, b96, b97, b98, b99, c, c1, c10, c100, c11, c12, c13, c14, c15, c16, c17, c18, c19, c2, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c3, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c4, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c5, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c6, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c7, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c8, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c9, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, d, d1, d10, d100, d11, d12, d13, d14, d15, d16, d17, d18, d19, d2, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d3, d30, d31, d32, d33, d34, d35, d36, d37, d38, d39, d4, d40, d41, d42, d43, d44, d45, d46, d47, d48, d49, d5, d50, d51, d52, d53, d54, d55, d56, d57, d58, d59, d6, d60, d61, d62, d63, d64, d65, d66, d67, d68, d69, d7, d70, d71, d72, d73, d74, d75, d76, d77, d78, d79, d8, d80, d81, d82, d83, d84, d85, d86, d87, d88, d89, d9, d90, d91, d92, d93, d94, d95, d96, d97, d98, d99, e, e1, e10, e100, e11, e12, e13, e14, e15, e16, e17, e18, e19, e2, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e3, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e4, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e5, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e6, e60, e61, e62, e63, e64, e65, e66, e67, e68, e69, e7, e70, e71, e72, e73, e74, e75, e76, e77, e78, e79, e8, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e9, e90, e91, e92, e93, e94, e95, e96, e97, e98, e99, f, f1, f10, f100, f11, f12, f13, f14, f15, f16, f17, f18, f19, f2, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f3, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f4, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f5, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f6, f60, f61, f62, f63, f64, f65, f66, f67, f68, f69, f7, f70, f71, f72, f73, f74, f75, f76, f77, f78, f79, f8, f80, f81, f82, f83, f84, f85, f86, f87, f88, f89, f9, f90, f91, f92, f93, f94, f95, f96, f97, f98, f99, g, g1, g10, g100, g11, g12, g13, g14, g15, g16, g17, g18, g19, g2, g20, g21, g22, g23, g24, g25, g26, g27, g28, g29, g3, g30, g31, g32, g33, g34, g35, g36, g37, g38, g39, g4, g40, g41, g42, g43, g44, g45, g46, g47, g48, g49, g5, g50, g51, g52, g53, g54, g55, g56, g57, g58, g59, g6, g60, g61, g62, g63, g64, g65, g66, g67, g68, g69, g7, g70, g71, g72, g73, g74, g75, g76, g77, g78, g79, g8, g80, g81, g82, g83, g84, g85, g86, g87, g88, g89, g9, g90, g91, g92, g93, g94, g95, g96, g97, g98, g99, h, h1, h10, h100, h11, h12, h13, h14, h15, h16, h17, h18, h19, h2, h20, h21, h22, h23, h24, h25, h26, h27, h28, h29, h3, h30, h31, h32, h33, h34, h35, h36, h37, h38, h39, h4, h40, h41, h42, h43, h44, h45, h46, h47, h48, h49, h5, h50, h51, h52, h53, h54, h55, h56, h57, h58, h59, h6, h60, h61, h62, h63, h64, h65, h66, h67, h68, h69, h7, h70, h71, h72, h73, h74, h75, h76, h77, h78, h79, h8, h80, h81, h82, h83, h84, h85, h86, h87, h88, h89, h9, h90, h91, h92, h93, h94, h95, h96, h97, h98, h99, i, i1, i10, i100, i11, i12, i13, i14, i15, i16, i17, i18, i19, i2, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i3, i30, i31, i32, i33, i34, i35, i36, i37, i38, i39, i4, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i5, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i6, i60, i61, i62, i63, i64, i65, i66, i67, i68, i69, i7, i70, i71, i72, i73, i74, i75, i76, i77, i78, i79, i8, i80, i81, i82, i83, i84, i85, i86, i87, i88, i89, i9, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99, j, j1, j10, j100, j11, j12, j13, j14, j15, j16, j17, j18, j19, j2, j20, j21, j22, j23, j24, j25, j26, j27, j28, j29, j3, j30, j31, j32, j33, j34, j35, j36, j37, j38, j39, j4, j40, j41, j42, j43, j44, j45, j46, j47, j48, j49, j5, j50, j51, j52, j53, j54, j55, j56, j57, j58, j59, j6, j60, j61, j62, j63, j64, j65, j66, j67, j68, j69, j7, j70, j71, j72, j73, j74, j75, j76, j77, j78, j79, j8, j80, j81, j82, j83, j84, j85, j86, j87, j88, j89, j9, j90, j91, j92, j93, j94, j95, j96, j97, j98, j99, k, k1, k10, k100, k11, k12, k13, k14, k15, k16, k17, k18, k19, k2, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k3, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k4, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k5, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k6, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k7, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k8, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k9, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]; I = monomialIdeal( A^128*B^65537*C^65535*D^255*E^17*F^256*G^257*H^511*I^64*J^512*K^513*L^1023*M^4294967296*N^4294967295*O^65*P^127*Q^15*R^31*S^129*T^32*U^63*V^65536*W^16*X^1025*Y^33*Z^1024*a^10*a1^4294967297*a10^1001*a100*a11^9999*a12^10000*a13^10001*a14^99999*a15^100000*a16^100001*a17^999999*a18^1000000*a19^1000001*a2^18446744073709551615*a20^9999999*a21^10000000*a22^10000001*a23^99999999*a24^100000000*a25^100000001*a26^999999999*a27^1000000000*a28^1000000001*a29^9999999999*a3^18446744073709551616*a30^10000000000*a31^10000000001*a32^99999999999*a33^100000000000*a34^100000000001*a35^999999999999*a36^1000000000000*a37^1000000000001*a38^9999999999999*a39^10000000000000*a4^18446744073709551617*a40^10000000000001*a41^99999999999999*a42^100000000000000*a43^100000000000001*a44^999999999999999*a45^1000000000000000*a46^1000000000000001*a47^9999999999999999*a48^10000000000000000*a49^10000000000000001*a5^99*a50^9999999999999999*a51^10000000000000000*a52^10000000000000001*a53^9999999999999998*a54*a55*a56*a57*a58*a59*a6^100*a60*a61*a62*a63*a64*a65*a66*a67*a68*a69*a7^101*a70*a71*a72*a73*a74*a75*a76*a77*a78*a79*a8^999*a80*a81*a82*a83*a84*a85*a86*a87*a88*a89*a9^1000*a90*a91*a92*a93*a94*a95*a96*a97*a98*a99*aa00bob*b^23*b1*b10*b100*b11*b12*b13*b14*b15*b16*b17*b18*b19*b2*b20*b21*b22*b23*b24*b25*b26*b27*b28*b29*b3*b30*b31*b32*b33*b34*b35*b36*b37*b38*b39*b4*b40*b41*b42*b43*b44*b45*b46*b47*b48*b49*b5*b50*b51*b52*b53*b54*b55*b56*b57*b58*b59*b6*b60*b61*b62*b63*b64*b65*b66*b67*b68*b69*b7*b70*b71*b72*b73*b74*b75*b76*b77*b78*b79*b8*b80*b81*b82*b83*b84*b85*b86*b87*b88*b89*b9*b90*b91*b92*b93*b94*b95*b96*b97*b98*b99*c^21*c1*c10*c100*c11*c12*c13*c14*c15*c16*c17*c18*c19*c2*c20*c21*c22*c23*c24*c25*c26*c27*c28*c29*c3*c30*c31*c32*c33*c34*c35*c36*c37*c38*c39*c4*c40*c41*c42*c43*c44*c45*c46*c47*c48*c49*c5*c50*c51*c52*c53*c54*c55*c56*c57*c58*c59*c6*c60*c61*c62*c63*c64*c65*c66*c67*c68*c69*c7*c70*c71*c72*c73*c74*c75*c76*c77*c78*c79*c8*c80*c81*c82*c83*c84*c85*c86*c87*c88*c89*c9*c90*c91*c92*c93*c94*c95*c96*c97*c98*c99*d^12*d1*d10*d100*d11*d12*d13*d14*d15*d16*d17*d18*d19*d2*d20*d21*d22*d23*d24*d25*d26*d27*d28*d29*d3*d30*d31*d32*d33*d34*d35*d36*d37*d38*d39*d4*d40*d41*d42*d43*d44*d45*d46*d47*d48*d49*d5*d50*d51*d52*d53*d54*d55*d56*d57*d58*d59*d6*d60*d61*d62*d63*d64*d65*d66*d67*d68*d69*d7*d70*d71*d72*d73*d74*d75*d76*d77*d78*d79*d8*d80*d81*d82*d83*d84*d85*d86*d87*d88*d89*d9*d90*d91*d92*d93*d94*d95*d96*d97*d98*d99*e^2*e1*e10*e100*e11*e12*e13*e14*e15*e16*e17*e18*e19*e2*e20*e21*e22*e23*e24*e25*e26*e27*e28*e29*e3*e30*e31*e32*e33*e34*e35*e36*e37*e38*e39*e4*e40*e41*e42*e43*e44*e45*e46*e47*e48*e49*e5*e50*e51*e52*e53*e54*e55*e56*e57*e58*e59*e6*e60*e61*e62*e63*e64*e65*e66*e67*e68*e69*e7*e70*e71*e72*e73*e74*e75*e76*e77*e78*e79*e8*e80*e81*e82*e83*e84*e85*e86*e87*e88*e89*e9*e90*e91*e92*e93*e94*e95*e96*e97*e98*e99*f^13*f1^103*f10*f100*f11*f12*f13*f14*f15*f16*f17*f18*f19*f2^104*f20*f21*f22*f23*f24*f25*f26*f27*f28*f29*f3^105*f30*f31*f32*f33*f34*f35*f36*f37*f38*f39*f4*f40*f41*f42*f43*f44*f45*f46*f47*f48*f49*f5*f50*f51*f52*f53*f54*f55*f56*f57*f58*f59*f6*f60*f61*f62*f63*f64*f65*f66*f67*f68*f69*f7*f70*f71*f72*f73*f74*f75*f76*f77*f78*f79*f8*f80*f81*f82*f83*f84*f85*f86*f87*f88*f89*f9*f90*f91*f92*f93*f94*f95*f96*f97*f98*f99*g^14*g1*g10*g100*g11*g12*g13*g14*g15*g16*g17*g18*g19*g2*g20*g21*g22*g23*g24*g25*g26*g27*g28*g29*g3*g30*g31*g32*g33*g34*g35*g36*g37*g38*g39*g4*g40*g41*g42*g43*g44*g45*g46*g47*g48*g49*g5*g50*g51*g52*g53*g54*g55*g56*g57*g58*g59*g6*g60*g61*g62*g63*g64*g65*g66*g67*g68*g69*g7*g70*g71*g72*g73*g74*g75*g76*g77*g78*g79*g8*g80*g81*g82*g83*g84*g85*g86*g87*g88*g89*g9*g90*g91*g92*g93*g94*g95*g96*g97*g98*g99*h^15*h1*h10*h100*h11*h12*h13*h14*h15*h16*h17*h18*h19*h2*h20*h21*h22*h23*h24*h25*h26*h27*h28*h29*h3*h30*h31*h32*h33*h34*h35*h36*h37*h38*h39*h4*h40*h41*h42*h43*h44*h45*h46*h47*h48*h49*h5*h50*h51*h52*h53*h54*h55*h56*h57*h58*h59*h6*h60*h61*h62*h63*h64*h65*h66*h67*h68*h69*h7*h70*h71*h72*h73*h74*h75*h76*h77*h78*h79*h8*h80*h81*h82*h83*h84*h85*h86*h87*h88*h89*h9*h90*h91*h92*h93*h94*h95*h96*h97*h98*h99*i^7*i1*i10*i100*i11*i12*i13*i14*i15*i16*i17*i18*i19*i2*i20*i21*i22*i23*i24*i25*i26*i27*i28*i29*i3*i30*i31*i32*i33*i34*i35*i36*i37*i38*i39*i4*i40*i41*i42*i43*i44*i45*i46*i47*i48*i49*i5*i50*i51*i52*i53*i54*i55*i56*i57*i58*i59*i6*i60*i61*i62*i63*i64*i65*i66*i67*i68*i69*i7*i70*i71*i72*i73*i74*i75*i76*i77*i78*i79*i8*i80*i81*i82*i83*i84*i85*i86*i87*i88*i89*i9*i90*i91*i92*i93*i94*i95*i96*i97*i98*i99*j^16*j1*j10*j100*j11*j12*j13*j14*j15*j16*j17*j18*j19*j2*j20*j21*j22*j23*j24*j25*j26*j27*j28*j29*j3*j30*j31*j32*j33*j34*j35*j36*j37*j38*j39*j4*j40*j41*j42*j43*j44*j45*j46*j47*j48*j49*j5*j50*j51*j52*j53*j54*j55*j56*j57*j58*j59*j6*j60*j61*j62*j63*j64*j65*j66*j67*j68*j69*j7*j70*j71*j72*j73*j74*j75*j76*j77*j78*j79*j8*j80*j81*j82*j83*j84*j85*j86*j87*j88*j89*j9*j90*j91*j92*j93*j94*j95*j96*j97*j98*j99*k^17*k1*k10*k100^12345678901234567890*k11*k12*k13*k14*k15*k16*k17*k18*k19*k2*k20*k21*k22*k23*k24*k25*k26*k27*k28*k29*k3*k30*k31*k32*k33*k34*k35*k36*k37*k38*k39*k4*k40*k41*k42*k43*k44*k45*k46*k47*k48*k49*k5*k50*k51*k52*k53*k54*k55*k56*k57*k58*k59*k6*k60*k61*k62*k63*k64*k65*k66*k67*k68*k69*k7*k70*k71*k72*k73*k74*k75*k76*k77*k78*k79*k8*k80*k81*k82*k83*k84*k85*k86*k87*k88*k89*k9*k90*k91*k92*k93*k94*k95*k96*k97^3*k98^4*k99^5*l^18*m^25*n^24*o^8*p^9*q*r^3*s^11*t^4*u^6*v^22*w*x^20*y^5*z^19 ); frobby-0.9.5/test/bigIdeals/e7.irrdecom000066400000000000000000001107751401527164200177300ustar00rootroot00000000000000R = QQ[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, a1, a10, a100, a11, a12, a13, a14, a15, a16, a17, a18, a19, a2, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a3, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a4, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a5, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a6, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a7, a70, a71, a72, a73, a74, a75, a76, a77, a78, a79, a8, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a9, a90, a91, a92, a93, a94, a95, a96, a97, a98, a99, aa00bob, b, b1, b10, b100, b11, b12, b13, b14, b15, b16, b17, b18, b19, b2, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b3, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b4, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b5, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b6, b60, b61, b62, b63, b64, b65, b66, b67, b68, b69, b7, b70, b71, b72, b73, b74, b75, b76, b77, b78, b79, b8, b80, b81, b82, b83, b84, b85, b86, b87, b88, b89, b9, b90, b91, b92, b93, b94, b95, b96, b97, b98, b99, c, c1, c10, c100, c11, c12, c13, c14, c15, c16, c17, c18, c19, c2, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c3, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c4, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c5, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c6, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c7, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c8, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c9, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, d, d1, d10, d100, d11, d12, d13, d14, d15, d16, d17, d18, d19, d2, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d3, d30, d31, d32, d33, d34, d35, d36, d37, d38, d39, d4, d40, d41, d42, d43, d44, d45, d46, d47, d48, d49, d5, d50, d51, d52, d53, d54, d55, d56, d57, d58, d59, d6, d60, d61, d62, d63, d64, d65, d66, d67, d68, d69, d7, d70, d71, d72, d73, d74, d75, d76, d77, d78, d79, d8, d80, d81, d82, d83, d84, d85, d86, d87, d88, d89, d9, d90, d91, d92, d93, d94, d95, d96, d97, d98, d99, e, e1, e10, e100, e11, e12, e13, e14, e15, e16, e17, e18, e19, e2, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e3, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e4, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e5, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e6, e60, e61, e62, e63, e64, e65, e66, e67, e68, e69, e7, e70, e71, e72, e73, e74, e75, e76, e77, e78, e79, e8, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e9, e90, e91, e92, e93, e94, e95, e96, e97, e98, e99, f, f1, f10, f100, f11, f12, f13, f14, f15, f16, f17, f18, f19, f2, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f3, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f4, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f5, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f6, f60, f61, f62, f63, f64, f65, f66, f67, f68, f69, f7, f70, f71, f72, f73, f74, f75, f76, f77, f78, f79, f8, f80, f81, f82, f83, f84, f85, f86, f87, f88, f89, f9, f90, f91, f92, f93, f94, f95, f96, f97, f98, f99, g, g1, g10, g100, g11, g12, g13, g14, g15, g16, g17, g18, g19, g2, g20, g21, g22, g23, g24, g25, g26, g27, g28, g29, g3, g30, g31, g32, g33, g34, g35, g36, g37, g38, g39, g4, g40, g41, g42, g43, g44, g45, g46, g47, g48, g49, g5, g50, g51, g52, g53, g54, g55, g56, g57, g58, g59, g6, g60, g61, g62, g63, g64, g65, g66, g67, g68, g69, g7, g70, g71, g72, g73, g74, g75, g76, g77, g78, g79, g8, g80, g81, g82, g83, g84, g85, g86, g87, g88, g89, g9, g90, g91, g92, g93, g94, g95, g96, g97, g98, g99, h, h1, h10, h100, h11, h12, h13, h14, h15, h16, h17, h18, h19, h2, h20, h21, h22, h23, h24, h25, h26, h27, h28, h29, h3, h30, h31, h32, h33, h34, h35, h36, h37, h38, h39, h4, h40, h41, h42, h43, h44, h45, h46, h47, h48, h49, h5, h50, h51, h52, h53, h54, h55, h56, h57, h58, h59, h6, h60, h61, h62, h63, h64, h65, h66, h67, h68, h69, h7, h70, h71, h72, h73, h74, h75, h76, h77, h78, h79, h8, h80, h81, h82, h83, h84, h85, h86, h87, h88, h89, h9, h90, h91, h92, h93, h94, h95, h96, h97, h98, h99, i, i1, i10, i100, i11, i12, i13, i14, i15, i16, i17, i18, i19, i2, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i3, i30, i31, i32, i33, i34, i35, i36, i37, i38, i39, i4, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i5, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i6, i60, i61, i62, i63, i64, i65, i66, i67, i68, i69, i7, i70, i71, i72, i73, i74, i75, i76, i77, i78, i79, i8, i80, i81, i82, i83, i84, i85, i86, i87, i88, i89, i9, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99, j, j1, j10, j100, j11, j12, j13, j14, j15, j16, j17, j18, j19, j2, j20, j21, j22, j23, j24, j25, j26, j27, j28, j29, j3, j30, j31, j32, j33, j34, j35, j36, j37, j38, j39, j4, j40, j41, j42, j43, j44, j45, j46, j47, j48, j49, j5, j50, j51, j52, j53, j54, j55, j56, j57, j58, j59, j6, j60, j61, j62, j63, j64, j65, j66, j67, j68, j69, j7, j70, j71, j72, j73, j74, j75, j76, j77, j78, j79, j8, j80, j81, j82, j83, j84, j85, j86, j87, j88, j89, j9, j90, j91, j92, j93, j94, j95, j96, j97, j98, j99, k, k1, k10, k100, k11, k12, k13, k14, k15, k16, k17, k18, k19, k2, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k3, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k4, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k5, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k6, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k7, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k8, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k9, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]; I = monomialIdeal( A^128 ); I = monomialIdeal( B^65537 ); I = monomialIdeal( C^65535 ); I = monomialIdeal( D^255 ); I = monomialIdeal( E^17 ); I = monomialIdeal( F^256 ); I = monomialIdeal( G^257 ); I = monomialIdeal( H^511 ); I = monomialIdeal( I^64 ); I = monomialIdeal( J^512 ); I = monomialIdeal( K^513 ); I = monomialIdeal( L^1023 ); I = monomialIdeal( M^4294967296 ); I = monomialIdeal( N^4294967295 ); I = monomialIdeal( O^65 ); I = monomialIdeal( P^127 ); I = monomialIdeal( Q^15 ); I = monomialIdeal( R^31 ); I = monomialIdeal( S^129 ); I = monomialIdeal( T^32 ); I = monomialIdeal( U^63 ); I = monomialIdeal( V^65536 ); I = monomialIdeal( W^16 ); I = monomialIdeal( X^1025 ); I = monomialIdeal( Y^33 ); I = monomialIdeal( Z^1024 ); I = monomialIdeal( a^10 ); I = monomialIdeal( a1^4294967297 ); I = monomialIdeal( a10^1001 ); I = monomialIdeal( a100 ); I = monomialIdeal( a11^9999 ); I = monomialIdeal( a12^10000 ); I = monomialIdeal( a13^10001 ); I = monomialIdeal( a14^99999 ); I = monomialIdeal( a15^100000 ); I = monomialIdeal( a16^100001 ); I = monomialIdeal( a17^999999 ); I = monomialIdeal( a18^1000000 ); I = monomialIdeal( a19^1000001 ); I = monomialIdeal( a2^18446744073709551615 ); I = monomialIdeal( a20^9999999 ); I = monomialIdeal( a21^10000000 ); I = monomialIdeal( a22^10000001 ); I = monomialIdeal( a23^99999999 ); I = monomialIdeal( a24^100000000 ); I = monomialIdeal( a25^100000001 ); I = monomialIdeal( a26^999999999 ); I = monomialIdeal( a27^1000000000 ); I = monomialIdeal( a28^1000000001 ); I = monomialIdeal( a29^9999999999 ); I = monomialIdeal( a3^18446744073709551616 ); I = monomialIdeal( a30^10000000000 ); I = monomialIdeal( a31^10000000001 ); I = monomialIdeal( a32^99999999999 ); I = monomialIdeal( a33^100000000000 ); I = monomialIdeal( a34^100000000001 ); I = monomialIdeal( a35^999999999999 ); I = monomialIdeal( a36^1000000000000 ); I = monomialIdeal( a37^1000000000001 ); I = monomialIdeal( a38^9999999999999 ); I = monomialIdeal( a39^10000000000000 ); I = monomialIdeal( a4^18446744073709551617 ); I = monomialIdeal( a40^10000000000001 ); I = monomialIdeal( a41^99999999999999 ); I = monomialIdeal( a42^100000000000000 ); I = monomialIdeal( a43^100000000000001 ); I = monomialIdeal( a44^999999999999999 ); I = monomialIdeal( a45^1000000000000000 ); I = monomialIdeal( a46^1000000000000001 ); I = monomialIdeal( a47^9999999999999999 ); I = monomialIdeal( a48^10000000000000000 ); I = monomialIdeal( a49^10000000000000001 ); I = monomialIdeal( a5^99 ); I = monomialIdeal( a50^9999999999999999 ); I = monomialIdeal( a51^10000000000000000 ); I = monomialIdeal( a52^10000000000000001 ); I = monomialIdeal( a53^9999999999999998 ); I = monomialIdeal( a54 ); I = monomialIdeal( a55 ); I = monomialIdeal( a56 ); I = monomialIdeal( a57 ); I = monomialIdeal( a58 ); I = monomialIdeal( a59 ); I = monomialIdeal( a6^100 ); I = monomialIdeal( a60 ); I = monomialIdeal( a61 ); I = monomialIdeal( a62 ); I = monomialIdeal( a63 ); I = monomialIdeal( a64 ); I = monomialIdeal( a65 ); I = monomialIdeal( a66 ); I = monomialIdeal( a67 ); I = monomialIdeal( a68 ); I = monomialIdeal( a69 ); I = monomialIdeal( a7^101 ); I = monomialIdeal( a70 ); I = monomialIdeal( a71 ); I = monomialIdeal( a72 ); I = monomialIdeal( a73 ); I = monomialIdeal( a74 ); I = monomialIdeal( a75 ); I = monomialIdeal( a76 ); I = monomialIdeal( a77 ); I = monomialIdeal( a78 ); I = monomialIdeal( a79 ); I = monomialIdeal( a8^999 ); I = monomialIdeal( a80 ); I = monomialIdeal( a81 ); I = monomialIdeal( a82 ); I = monomialIdeal( a83 ); I = monomialIdeal( a84 ); I = monomialIdeal( a85 ); I = monomialIdeal( a86 ); I = monomialIdeal( a87 ); I = monomialIdeal( a88 ); I = monomialIdeal( a89 ); I = monomialIdeal( a9^1000 ); I = monomialIdeal( a90 ); I = monomialIdeal( a91 ); I = monomialIdeal( a92 ); I = monomialIdeal( a93 ); I = monomialIdeal( a94 ); I = monomialIdeal( a95 ); I = monomialIdeal( a96 ); I = monomialIdeal( a97 ); I = monomialIdeal( a98 ); I = monomialIdeal( a99 ); I = monomialIdeal( aa00bob ); I = monomialIdeal( b^23 ); I = monomialIdeal( b1 ); I = monomialIdeal( b10 ); I = monomialIdeal( b100 ); I = monomialIdeal( b11 ); I = monomialIdeal( b12 ); I = monomialIdeal( b13 ); I = monomialIdeal( b14 ); I = monomialIdeal( b15 ); I = monomialIdeal( b16 ); I = monomialIdeal( b17 ); I = monomialIdeal( b18 ); I = monomialIdeal( b19 ); I = monomialIdeal( b2 ); I = monomialIdeal( b20 ); I = monomialIdeal( b21 ); I = monomialIdeal( b22 ); I = monomialIdeal( b23 ); I = monomialIdeal( b24 ); I = monomialIdeal( b25 ); I = monomialIdeal( b26 ); I = monomialIdeal( b27 ); I = monomialIdeal( b28 ); I = monomialIdeal( b29 ); I = monomialIdeal( b3 ); I = monomialIdeal( b30 ); I = monomialIdeal( b31 ); I = monomialIdeal( b32 ); I = monomialIdeal( b33 ); I = monomialIdeal( b34 ); I = monomialIdeal( b35 ); I = monomialIdeal( b36 ); I = monomialIdeal( b37 ); I = monomialIdeal( b38 ); I = monomialIdeal( b39 ); I = monomialIdeal( b4 ); I = monomialIdeal( b40 ); I = monomialIdeal( b41 ); I = monomialIdeal( b42 ); I = monomialIdeal( b43 ); I = monomialIdeal( b44 ); I = monomialIdeal( b45 ); I = monomialIdeal( b46 ); I = monomialIdeal( b47 ); I = monomialIdeal( b48 ); I = monomialIdeal( b49 ); I = monomialIdeal( b5 ); I = monomialIdeal( b50 ); I = monomialIdeal( b51 ); I = monomialIdeal( b52 ); I = monomialIdeal( b53 ); I = monomialIdeal( b54 ); I = monomialIdeal( b55 ); I = monomialIdeal( b56 ); I = monomialIdeal( b57 ); I = monomialIdeal( b58 ); I = monomialIdeal( b59 ); I = monomialIdeal( b6 ); I = monomialIdeal( b60 ); I = monomialIdeal( b61 ); I = monomialIdeal( b62 ); I = monomialIdeal( b63 ); I = monomialIdeal( b64 ); I = monomialIdeal( b65 ); I = monomialIdeal( b66 ); I = monomialIdeal( b67 ); I = monomialIdeal( b68 ); I = monomialIdeal( b69 ); I = monomialIdeal( b7 ); I = monomialIdeal( b70 ); I = monomialIdeal( b71 ); I = monomialIdeal( b72 ); I = monomialIdeal( b73 ); I = monomialIdeal( b74 ); I = monomialIdeal( b75 ); I = monomialIdeal( b76 ); I = monomialIdeal( b77 ); I = monomialIdeal( b78 ); I = monomialIdeal( b79 ); I = monomialIdeal( b8 ); I = monomialIdeal( b80 ); I = monomialIdeal( b81 ); I = monomialIdeal( b82 ); I = monomialIdeal( b83 ); I = monomialIdeal( b84 ); I = monomialIdeal( b85 ); I = monomialIdeal( b86 ); I = monomialIdeal( b87 ); I = monomialIdeal( b88 ); I = monomialIdeal( b89 ); I = monomialIdeal( b9 ); I = monomialIdeal( b90 ); I = monomialIdeal( b91 ); I = monomialIdeal( b92 ); I = monomialIdeal( b93 ); I = monomialIdeal( b94 ); I = monomialIdeal( b95 ); I = monomialIdeal( b96 ); I = monomialIdeal( b97 ); I = monomialIdeal( b98 ); I = monomialIdeal( b99 ); I = monomialIdeal( c^21 ); I = monomialIdeal( c1 ); I = monomialIdeal( c10 ); I = monomialIdeal( c100 ); I = monomialIdeal( c11 ); I = monomialIdeal( c12 ); I = monomialIdeal( c13 ); I = monomialIdeal( c14 ); I = monomialIdeal( c15 ); I = monomialIdeal( c16 ); I = monomialIdeal( c17 ); I = monomialIdeal( c18 ); I = monomialIdeal( c19 ); I = monomialIdeal( c2 ); I = monomialIdeal( c20 ); I = monomialIdeal( c21 ); I = monomialIdeal( c22 ); I = monomialIdeal( c23 ); I = monomialIdeal( c24 ); I = monomialIdeal( c25 ); I = monomialIdeal( c26 ); I = monomialIdeal( c27 ); I = monomialIdeal( c28 ); I = monomialIdeal( c29 ); I = monomialIdeal( c3 ); I = monomialIdeal( c30 ); I = monomialIdeal( c31 ); I = monomialIdeal( c32 ); I = monomialIdeal( c33 ); I = monomialIdeal( c34 ); I = monomialIdeal( c35 ); I = monomialIdeal( c36 ); I = monomialIdeal( c37 ); I = monomialIdeal( c38 ); I = monomialIdeal( c39 ); I = monomialIdeal( c4 ); I = monomialIdeal( c40 ); I = monomialIdeal( c41 ); I = monomialIdeal( c42 ); I = monomialIdeal( c43 ); I = monomialIdeal( c44 ); I = monomialIdeal( c45 ); I = monomialIdeal( c46 ); I = monomialIdeal( c47 ); I = monomialIdeal( c48 ); I = monomialIdeal( c49 ); I = monomialIdeal( c5 ); I = monomialIdeal( c50 ); I = monomialIdeal( c51 ); I = monomialIdeal( c52 ); I = monomialIdeal( c53 ); I = monomialIdeal( c54 ); I = monomialIdeal( c55 ); I = monomialIdeal( c56 ); I = monomialIdeal( c57 ); I = monomialIdeal( c58 ); I = monomialIdeal( c59 ); I = monomialIdeal( c6 ); I = monomialIdeal( c60 ); I = monomialIdeal( c61 ); I = monomialIdeal( c62 ); I = monomialIdeal( c63 ); I = monomialIdeal( c64 ); I = monomialIdeal( c65 ); I = monomialIdeal( c66 ); I = monomialIdeal( c67 ); I = monomialIdeal( c68 ); I = monomialIdeal( c69 ); I = monomialIdeal( c7 ); I = monomialIdeal( c70 ); I = monomialIdeal( c71 ); I = monomialIdeal( c72 ); I = monomialIdeal( c73 ); I = monomialIdeal( c74 ); I = monomialIdeal( c75 ); I = monomialIdeal( c76 ); I = monomialIdeal( c77 ); I = monomialIdeal( c78 ); I = monomialIdeal( c79 ); I = monomialIdeal( c8 ); I = monomialIdeal( c80 ); I = monomialIdeal( c81 ); I = monomialIdeal( c82 ); I = monomialIdeal( c83 ); I = monomialIdeal( c84 ); I = monomialIdeal( c85 ); I = monomialIdeal( c86 ); I = monomialIdeal( c87 ); I = monomialIdeal( c88 ); I = monomialIdeal( c89 ); I = monomialIdeal( c9 ); I = monomialIdeal( c90 ); I = monomialIdeal( c91 ); I = monomialIdeal( c92 ); I = monomialIdeal( c93 ); I = monomialIdeal( c94 ); I = monomialIdeal( c95 ); I = monomialIdeal( c96 ); I = monomialIdeal( c97 ); I = monomialIdeal( c98 ); I = monomialIdeal( c99 ); I = monomialIdeal( d^12 ); I = monomialIdeal( d1 ); I = monomialIdeal( d10 ); I = monomialIdeal( d100 ); I = monomialIdeal( d11 ); I = monomialIdeal( d12 ); I = monomialIdeal( d13 ); I = monomialIdeal( d14 ); I = monomialIdeal( d15 ); I = monomialIdeal( d16 ); I = monomialIdeal( d17 ); I = monomialIdeal( d18 ); I = monomialIdeal( d19 ); I = monomialIdeal( d2 ); I = monomialIdeal( d20 ); I = monomialIdeal( d21 ); I = monomialIdeal( d22 ); I = monomialIdeal( d23 ); I = monomialIdeal( d24 ); I = monomialIdeal( d25 ); I = monomialIdeal( d26 ); I = monomialIdeal( d27 ); I = monomialIdeal( d28 ); I = monomialIdeal( d29 ); I = monomialIdeal( d3 ); I = monomialIdeal( d30 ); I = monomialIdeal( d31 ); I = monomialIdeal( d32 ); I = monomialIdeal( d33 ); I = monomialIdeal( d34 ); I = monomialIdeal( d35 ); I = monomialIdeal( d36 ); I = monomialIdeal( d37 ); I = monomialIdeal( d38 ); I = monomialIdeal( d39 ); I = monomialIdeal( d4 ); I = monomialIdeal( d40 ); I = monomialIdeal( d41 ); I = monomialIdeal( d42 ); I = monomialIdeal( d43 ); I = monomialIdeal( d44 ); I = monomialIdeal( d45 ); I = monomialIdeal( d46 ); I = monomialIdeal( d47 ); I = monomialIdeal( d48 ); I = monomialIdeal( d49 ); I = monomialIdeal( d5 ); I = monomialIdeal( d50 ); I = monomialIdeal( d51 ); I = monomialIdeal( d52 ); I = monomialIdeal( d53 ); I = monomialIdeal( d54 ); I = monomialIdeal( d55 ); I = monomialIdeal( d56 ); I = monomialIdeal( d57 ); I = monomialIdeal( d58 ); I = monomialIdeal( d59 ); I = monomialIdeal( d6 ); I = monomialIdeal( d60 ); I = monomialIdeal( d61 ); I = monomialIdeal( d62 ); I = monomialIdeal( d63 ); I = monomialIdeal( d64 ); I = monomialIdeal( d65 ); I = monomialIdeal( d66 ); I = monomialIdeal( d67 ); I = monomialIdeal( d68 ); I = monomialIdeal( d69 ); I = monomialIdeal( d7 ); I = monomialIdeal( d70 ); I = monomialIdeal( d71 ); I = monomialIdeal( d72 ); I = monomialIdeal( d73 ); I = monomialIdeal( d74 ); I = monomialIdeal( d75 ); I = monomialIdeal( d76 ); I = monomialIdeal( d77 ); I = monomialIdeal( d78 ); I = monomialIdeal( d79 ); I = monomialIdeal( d8 ); I = monomialIdeal( d80 ); I = monomialIdeal( d81 ); I = monomialIdeal( d82 ); I = monomialIdeal( d83 ); I = monomialIdeal( d84 ); I = monomialIdeal( d85 ); I = monomialIdeal( d86 ); I = monomialIdeal( d87 ); I = monomialIdeal( d88 ); I = monomialIdeal( d89 ); I = monomialIdeal( d9 ); I = monomialIdeal( d90 ); I = monomialIdeal( d91 ); I = monomialIdeal( d92 ); I = monomialIdeal( d93 ); I = monomialIdeal( d94 ); I = monomialIdeal( d95 ); I = monomialIdeal( d96 ); I = monomialIdeal( d97 ); I = monomialIdeal( d98 ); I = monomialIdeal( d99 ); I = monomialIdeal( e^2 ); I = monomialIdeal( e1 ); I = monomialIdeal( e10 ); I = monomialIdeal( e100 ); I = monomialIdeal( e11 ); I = monomialIdeal( e12 ); I = monomialIdeal( e13 ); I = monomialIdeal( e14 ); I = monomialIdeal( e15 ); I = monomialIdeal( e16 ); I = monomialIdeal( e17 ); I = monomialIdeal( e18 ); I = monomialIdeal( e19 ); I = monomialIdeal( e2 ); I = monomialIdeal( e20 ); I = monomialIdeal( e21 ); I = monomialIdeal( e22 ); I = monomialIdeal( e23 ); I = monomialIdeal( e24 ); I = monomialIdeal( e25 ); I = monomialIdeal( e26 ); I = monomialIdeal( e27 ); I = monomialIdeal( e28 ); I = monomialIdeal( e29 ); I = monomialIdeal( e3 ); I = monomialIdeal( e30 ); I = monomialIdeal( e31 ); I = monomialIdeal( e32 ); I = monomialIdeal( e33 ); I = monomialIdeal( e34 ); I = monomialIdeal( e35 ); I = monomialIdeal( e36 ); I = monomialIdeal( e37 ); I = monomialIdeal( e38 ); I = monomialIdeal( e39 ); I = monomialIdeal( e4 ); I = monomialIdeal( e40 ); I = monomialIdeal( e41 ); I = monomialIdeal( e42 ); I = monomialIdeal( e43 ); I = monomialIdeal( e44 ); I = monomialIdeal( e45 ); I = monomialIdeal( e46 ); I = monomialIdeal( e47 ); I = monomialIdeal( e48 ); I = monomialIdeal( e49 ); I = monomialIdeal( e5 ); I = monomialIdeal( e50 ); I = monomialIdeal( e51 ); I = monomialIdeal( e52 ); I = monomialIdeal( e53 ); I = monomialIdeal( e54 ); I = monomialIdeal( e55 ); I = monomialIdeal( e56 ); I = monomialIdeal( e57 ); I = monomialIdeal( e58 ); I = monomialIdeal( e59 ); I = monomialIdeal( e6 ); I = monomialIdeal( e60 ); I = monomialIdeal( e61 ); I = monomialIdeal( e62 ); I = monomialIdeal( e63 ); I = monomialIdeal( e64 ); I = monomialIdeal( e65 ); I = monomialIdeal( e66 ); I = monomialIdeal( e67 ); I = monomialIdeal( e68 ); I = monomialIdeal( e69 ); I = monomialIdeal( e7 ); I = monomialIdeal( e70 ); I = monomialIdeal( e71 ); I = monomialIdeal( e72 ); I = monomialIdeal( e73 ); I = monomialIdeal( e74 ); I = monomialIdeal( e75 ); I = monomialIdeal( e76 ); I = monomialIdeal( e77 ); I = monomialIdeal( e78 ); I = monomialIdeal( e79 ); I = monomialIdeal( e8 ); I = monomialIdeal( e80 ); I = monomialIdeal( e81 ); I = monomialIdeal( e82 ); I = monomialIdeal( e83 ); I = monomialIdeal( e84 ); I = monomialIdeal( e85 ); I = monomialIdeal( e86 ); I = monomialIdeal( e87 ); I = monomialIdeal( e88 ); I = monomialIdeal( e89 ); I = monomialIdeal( e9 ); I = monomialIdeal( e90 ); I = monomialIdeal( e91 ); I = monomialIdeal( e92 ); I = monomialIdeal( e93 ); I = monomialIdeal( e94 ); I = monomialIdeal( e95 ); I = monomialIdeal( e96 ); I = monomialIdeal( e97 ); I = monomialIdeal( e98 ); I = monomialIdeal( e99 ); I = monomialIdeal( f^13 ); I = monomialIdeal( f1^103 ); I = monomialIdeal( f10 ); I = monomialIdeal( f100 ); I = monomialIdeal( f11 ); I = monomialIdeal( f12 ); I = monomialIdeal( f13 ); I = monomialIdeal( f14 ); I = monomialIdeal( f15 ); I = monomialIdeal( f16 ); I = monomialIdeal( f17 ); I = monomialIdeal( f18 ); I = monomialIdeal( f19 ); I = monomialIdeal( f2^104 ); I = monomialIdeal( f20 ); I = monomialIdeal( f21 ); I = monomialIdeal( f22 ); I = monomialIdeal( f23 ); I = monomialIdeal( f24 ); I = monomialIdeal( f25 ); I = monomialIdeal( f26 ); I = monomialIdeal( f27 ); I = monomialIdeal( f28 ); I = monomialIdeal( f29 ); I = monomialIdeal( f3^105 ); I = monomialIdeal( f30 ); I = monomialIdeal( f31 ); I = monomialIdeal( f32 ); I = monomialIdeal( f33 ); I = monomialIdeal( f34 ); I = monomialIdeal( f35 ); I = monomialIdeal( f36 ); I = monomialIdeal( f37 ); I = monomialIdeal( f38 ); I = monomialIdeal( f39 ); I = monomialIdeal( f4 ); I = monomialIdeal( f40 ); I = monomialIdeal( f41 ); I = monomialIdeal( f42 ); I = monomialIdeal( f43 ); I = monomialIdeal( f44 ); I = monomialIdeal( f45 ); I = monomialIdeal( f46 ); I = monomialIdeal( f47 ); I = monomialIdeal( f48 ); I = monomialIdeal( f49 ); I = monomialIdeal( f5 ); I = monomialIdeal( f50 ); I = monomialIdeal( f51 ); I = monomialIdeal( f52 ); I = monomialIdeal( f53 ); I = monomialIdeal( f54 ); I = monomialIdeal( f55 ); I = monomialIdeal( f56 ); I = monomialIdeal( f57 ); I = monomialIdeal( f58 ); I = monomialIdeal( f59 ); I = monomialIdeal( f6 ); I = monomialIdeal( f60 ); I = monomialIdeal( f61 ); I = monomialIdeal( f62 ); I = monomialIdeal( f63 ); I = monomialIdeal( f64 ); I = monomialIdeal( f65 ); I = monomialIdeal( f66 ); I = monomialIdeal( f67 ); I = monomialIdeal( f68 ); I = monomialIdeal( f69 ); I = monomialIdeal( f7 ); I = monomialIdeal( f70 ); I = monomialIdeal( f71 ); I = monomialIdeal( f72 ); I = monomialIdeal( f73 ); I = monomialIdeal( f74 ); I = monomialIdeal( f75 ); I = monomialIdeal( f76 ); I = monomialIdeal( f77 ); I = monomialIdeal( f78 ); I = monomialIdeal( f79 ); I = monomialIdeal( f8 ); I = monomialIdeal( f80 ); I = monomialIdeal( f81 ); I = monomialIdeal( f82 ); I = monomialIdeal( f83 ); I = monomialIdeal( f84 ); I = monomialIdeal( f85 ); I = monomialIdeal( f86 ); I = monomialIdeal( f87 ); I = monomialIdeal( f88 ); I = monomialIdeal( f89 ); I = monomialIdeal( f9 ); I = monomialIdeal( f90 ); I = monomialIdeal( f91 ); I = monomialIdeal( f92 ); I = monomialIdeal( f93 ); I = monomialIdeal( f94 ); I = monomialIdeal( f95 ); I = monomialIdeal( f96 ); I = monomialIdeal( f97 ); I = monomialIdeal( f98 ); I = monomialIdeal( f99 ); I = monomialIdeal( g^14 ); I = monomialIdeal( g1 ); I = monomialIdeal( g10 ); I = monomialIdeal( g100 ); I = monomialIdeal( g11 ); I = monomialIdeal( g12 ); I = monomialIdeal( g13 ); I = monomialIdeal( g14 ); I = monomialIdeal( g15 ); I = monomialIdeal( g16 ); I = monomialIdeal( g17 ); I = monomialIdeal( g18 ); I = monomialIdeal( g19 ); I = monomialIdeal( g2 ); I = monomialIdeal( g20 ); I = monomialIdeal( g21 ); I = monomialIdeal( g22 ); I = monomialIdeal( g23 ); I = monomialIdeal( g24 ); I = monomialIdeal( g25 ); I = monomialIdeal( g26 ); I = monomialIdeal( g27 ); I = monomialIdeal( g28 ); I = monomialIdeal( g29 ); I = monomialIdeal( g3 ); I = monomialIdeal( g30 ); I = monomialIdeal( g31 ); I = monomialIdeal( g32 ); I = monomialIdeal( g33 ); I = monomialIdeal( g34 ); I = monomialIdeal( g35 ); I = monomialIdeal( g36 ); I = monomialIdeal( g37 ); I = monomialIdeal( g38 ); I = monomialIdeal( g39 ); I = monomialIdeal( g4 ); I = monomialIdeal( g40 ); I = monomialIdeal( g41 ); I = monomialIdeal( g42 ); I = monomialIdeal( g43 ); I = monomialIdeal( g44 ); I = monomialIdeal( g45 ); I = monomialIdeal( g46 ); I = monomialIdeal( g47 ); I = monomialIdeal( g48 ); I = monomialIdeal( g49 ); I = monomialIdeal( g5 ); I = monomialIdeal( g50 ); I = monomialIdeal( g51 ); I = monomialIdeal( g52 ); I = monomialIdeal( g53 ); I = monomialIdeal( g54 ); I = monomialIdeal( g55 ); I = monomialIdeal( g56 ); I = monomialIdeal( g57 ); I = monomialIdeal( g58 ); I = monomialIdeal( g59 ); I = monomialIdeal( g6 ); I = monomialIdeal( g60 ); I = monomialIdeal( g61 ); I = monomialIdeal( g62 ); I = monomialIdeal( g63 ); I = monomialIdeal( g64 ); I = monomialIdeal( g65 ); I = monomialIdeal( g66 ); I = monomialIdeal( g67 ); I = monomialIdeal( g68 ); I = monomialIdeal( g69 ); I = monomialIdeal( g7 ); I = monomialIdeal( g70 ); I = monomialIdeal( g71 ); I = monomialIdeal( g72 ); I = monomialIdeal( g73 ); I = monomialIdeal( g74 ); I = monomialIdeal( g75 ); I = monomialIdeal( g76 ); I = monomialIdeal( g77 ); I = monomialIdeal( g78 ); I = monomialIdeal( g79 ); I = monomialIdeal( g8 ); I = monomialIdeal( g80 ); I = monomialIdeal( g81 ); I = monomialIdeal( g82 ); I = monomialIdeal( g83 ); I = monomialIdeal( g84 ); I = monomialIdeal( g85 ); I = monomialIdeal( g86 ); I = monomialIdeal( g87 ); I = monomialIdeal( g88 ); I = monomialIdeal( g89 ); I = monomialIdeal( g9 ); I = monomialIdeal( g90 ); I = monomialIdeal( g91 ); I = monomialIdeal( g92 ); I = monomialIdeal( g93 ); I = monomialIdeal( g94 ); I = monomialIdeal( g95 ); I = monomialIdeal( g96 ); I = monomialIdeal( g97 ); I = monomialIdeal( g98 ); I = monomialIdeal( g99 ); I = monomialIdeal( h^15 ); I = monomialIdeal( h1 ); I = monomialIdeal( h10 ); I = monomialIdeal( h100 ); I = monomialIdeal( h11 ); I = monomialIdeal( h12 ); I = monomialIdeal( h13 ); I = monomialIdeal( h14 ); I = monomialIdeal( h15 ); I = monomialIdeal( h16 ); I = monomialIdeal( h17 ); I = monomialIdeal( h18 ); I = monomialIdeal( h19 ); I = monomialIdeal( h2 ); I = monomialIdeal( h20 ); I = monomialIdeal( h21 ); I = monomialIdeal( h22 ); I = monomialIdeal( h23 ); I = monomialIdeal( h24 ); I = monomialIdeal( h25 ); I = monomialIdeal( h26 ); I = monomialIdeal( h27 ); I = monomialIdeal( h28 ); I = monomialIdeal( h29 ); I = monomialIdeal( h3 ); I = monomialIdeal( h30 ); I = monomialIdeal( h31 ); I = monomialIdeal( h32 ); I = monomialIdeal( h33 ); I = monomialIdeal( h34 ); I = monomialIdeal( h35 ); I = monomialIdeal( h36 ); I = monomialIdeal( h37 ); I = monomialIdeal( h38 ); I = monomialIdeal( h39 ); I = monomialIdeal( h4 ); I = monomialIdeal( h40 ); I = monomialIdeal( h41 ); I = monomialIdeal( h42 ); I = monomialIdeal( h43 ); I = monomialIdeal( h44 ); I = monomialIdeal( h45 ); I = monomialIdeal( h46 ); I = monomialIdeal( h47 ); I = monomialIdeal( h48 ); I = monomialIdeal( h49 ); I = monomialIdeal( h5 ); I = monomialIdeal( h50 ); I = monomialIdeal( h51 ); I = monomialIdeal( h52 ); I = monomialIdeal( h53 ); I = monomialIdeal( h54 ); I = monomialIdeal( h55 ); I = monomialIdeal( h56 ); I = monomialIdeal( h57 ); I = monomialIdeal( h58 ); I = monomialIdeal( h59 ); I = monomialIdeal( h6 ); I = monomialIdeal( h60 ); I = monomialIdeal( h61 ); I = monomialIdeal( h62 ); I = monomialIdeal( h63 ); I = monomialIdeal( h64 ); I = monomialIdeal( h65 ); I = monomialIdeal( h66 ); I = monomialIdeal( h67 ); I = monomialIdeal( h68 ); I = monomialIdeal( h69 ); I = monomialIdeal( h7 ); I = monomialIdeal( h70 ); I = monomialIdeal( h71 ); I = monomialIdeal( h72 ); I = monomialIdeal( h73 ); I = monomialIdeal( h74 ); I = monomialIdeal( h75 ); I = monomialIdeal( h76 ); I = monomialIdeal( h77 ); I = monomialIdeal( h78 ); I = monomialIdeal( h79 ); I = monomialIdeal( h8 ); I = monomialIdeal( h80 ); I = monomialIdeal( h81 ); I = monomialIdeal( h82 ); I = monomialIdeal( h83 ); I = monomialIdeal( h84 ); I = monomialIdeal( h85 ); I = monomialIdeal( h86 ); I = monomialIdeal( h87 ); I = monomialIdeal( h88 ); I = monomialIdeal( h89 ); I = monomialIdeal( h9 ); I = monomialIdeal( h90 ); I = monomialIdeal( h91 ); I = monomialIdeal( h92 ); I = monomialIdeal( h93 ); I = monomialIdeal( h94 ); I = monomialIdeal( h95 ); I = monomialIdeal( h96 ); I = monomialIdeal( h97 ); I = monomialIdeal( h98 ); I = monomialIdeal( h99 ); I = monomialIdeal( i^7 ); I = monomialIdeal( i1 ); I = monomialIdeal( i10 ); I = monomialIdeal( i100 ); I = monomialIdeal( i11 ); I = monomialIdeal( i12 ); I = monomialIdeal( i13 ); I = monomialIdeal( i14 ); I = monomialIdeal( i15 ); I = monomialIdeal( i16 ); I = monomialIdeal( i17 ); I = monomialIdeal( i18 ); I = monomialIdeal( i19 ); I = monomialIdeal( i2 ); I = monomialIdeal( i20 ); I = monomialIdeal( i21 ); I = monomialIdeal( i22 ); I = monomialIdeal( i23 ); I = monomialIdeal( i24 ); I = monomialIdeal( i25 ); I = monomialIdeal( i26 ); I = monomialIdeal( i27 ); I = monomialIdeal( i28 ); I = monomialIdeal( i29 ); I = monomialIdeal( i3 ); I = monomialIdeal( i30 ); I = monomialIdeal( i31 ); I = monomialIdeal( i32 ); I = monomialIdeal( i33 ); I = monomialIdeal( i34 ); I = monomialIdeal( i35 ); I = monomialIdeal( i36 ); I = monomialIdeal( i37 ); I = monomialIdeal( i38 ); I = monomialIdeal( i39 ); I = monomialIdeal( i4 ); I = monomialIdeal( i40 ); I = monomialIdeal( i41 ); I = monomialIdeal( i42 ); I = monomialIdeal( i43 ); I = monomialIdeal( i44 ); I = monomialIdeal( i45 ); I = monomialIdeal( i46 ); I = monomialIdeal( i47 ); I = monomialIdeal( i48 ); I = monomialIdeal( i49 ); I = monomialIdeal( i5 ); I = monomialIdeal( i50 ); I = monomialIdeal( i51 ); I = monomialIdeal( i52 ); I = monomialIdeal( i53 ); I = monomialIdeal( i54 ); I = monomialIdeal( i55 ); I = monomialIdeal( i56 ); I = monomialIdeal( i57 ); I = monomialIdeal( i58 ); I = monomialIdeal( i59 ); I = monomialIdeal( i6 ); I = monomialIdeal( i60 ); I = monomialIdeal( i61 ); I = monomialIdeal( i62 ); I = monomialIdeal( i63 ); I = monomialIdeal( i64 ); I = monomialIdeal( i65 ); I = monomialIdeal( i66 ); I = monomialIdeal( i67 ); I = monomialIdeal( i68 ); I = monomialIdeal( i69 ); I = monomialIdeal( i7 ); I = monomialIdeal( i70 ); I = monomialIdeal( i71 ); I = monomialIdeal( i72 ); I = monomialIdeal( i73 ); I = monomialIdeal( i74 ); I = monomialIdeal( i75 ); I = monomialIdeal( i76 ); I = monomialIdeal( i77 ); I = monomialIdeal( i78 ); I = monomialIdeal( i79 ); I = monomialIdeal( i8 ); I = monomialIdeal( i80 ); I = monomialIdeal( i81 ); I = monomialIdeal( i82 ); I = monomialIdeal( i83 ); I = monomialIdeal( i84 ); I = monomialIdeal( i85 ); I = monomialIdeal( i86 ); I = monomialIdeal( i87 ); I = monomialIdeal( i88 ); I = monomialIdeal( i89 ); I = monomialIdeal( i9 ); I = monomialIdeal( i90 ); I = monomialIdeal( i91 ); I = monomialIdeal( i92 ); I = monomialIdeal( i93 ); I = monomialIdeal( i94 ); I = monomialIdeal( i95 ); I = monomialIdeal( i96 ); I = monomialIdeal( i97 ); I = monomialIdeal( i98 ); I = monomialIdeal( i99 ); I = monomialIdeal( j^16 ); I = monomialIdeal( j1 ); I = monomialIdeal( j10 ); I = monomialIdeal( j100 ); I = monomialIdeal( j11 ); I = monomialIdeal( j12 ); I = monomialIdeal( j13 ); I = monomialIdeal( j14 ); I = monomialIdeal( j15 ); I = monomialIdeal( j16 ); I = monomialIdeal( j17 ); I = monomialIdeal( j18 ); I = monomialIdeal( j19 ); I = monomialIdeal( j2 ); I = monomialIdeal( j20 ); I = monomialIdeal( j21 ); I = monomialIdeal( j22 ); I = monomialIdeal( j23 ); I = monomialIdeal( j24 ); I = monomialIdeal( j25 ); I = monomialIdeal( j26 ); I = monomialIdeal( j27 ); I = monomialIdeal( j28 ); I = monomialIdeal( j29 ); I = monomialIdeal( j3 ); I = monomialIdeal( j30 ); I = monomialIdeal( j31 ); I = monomialIdeal( j32 ); I = monomialIdeal( j33 ); I = monomialIdeal( j34 ); I = monomialIdeal( j35 ); I = monomialIdeal( j36 ); I = monomialIdeal( j37 ); I = monomialIdeal( j38 ); I = monomialIdeal( j39 ); I = monomialIdeal( j4 ); I = monomialIdeal( j40 ); I = monomialIdeal( j41 ); I = monomialIdeal( j42 ); I = monomialIdeal( j43 ); I = monomialIdeal( j44 ); I = monomialIdeal( j45 ); I = monomialIdeal( j46 ); I = monomialIdeal( j47 ); I = monomialIdeal( j48 ); I = monomialIdeal( j49 ); I = monomialIdeal( j5 ); I = monomialIdeal( j50 ); I = monomialIdeal( j51 ); I = monomialIdeal( j52 ); I = monomialIdeal( j53 ); I = monomialIdeal( j54 ); I = monomialIdeal( j55 ); I = monomialIdeal( j56 ); I = monomialIdeal( j57 ); I = monomialIdeal( j58 ); I = monomialIdeal( j59 ); I = monomialIdeal( j6 ); I = monomialIdeal( j60 ); I = monomialIdeal( j61 ); I = monomialIdeal( j62 ); I = monomialIdeal( j63 ); I = monomialIdeal( j64 ); I = monomialIdeal( j65 ); I = monomialIdeal( j66 ); I = monomialIdeal( j67 ); I = monomialIdeal( j68 ); I = monomialIdeal( j69 ); I = monomialIdeal( j7 ); I = monomialIdeal( j70 ); I = monomialIdeal( j71 ); I = monomialIdeal( j72 ); I = monomialIdeal( j73 ); I = monomialIdeal( j74 ); I = monomialIdeal( j75 ); I = monomialIdeal( j76 ); I = monomialIdeal( j77 ); I = monomialIdeal( j78 ); I = monomialIdeal( j79 ); I = monomialIdeal( j8 ); I = monomialIdeal( j80 ); I = monomialIdeal( j81 ); I = monomialIdeal( j82 ); I = monomialIdeal( j83 ); I = monomialIdeal( j84 ); I = monomialIdeal( j85 ); I = monomialIdeal( j86 ); I = monomialIdeal( j87 ); I = monomialIdeal( j88 ); I = monomialIdeal( j89 ); I = monomialIdeal( j9 ); I = monomialIdeal( j90 ); I = monomialIdeal( j91 ); I = monomialIdeal( j92 ); I = monomialIdeal( j93 ); I = monomialIdeal( j94 ); I = monomialIdeal( j95 ); I = monomialIdeal( j96 ); I = monomialIdeal( j97 ); I = monomialIdeal( j98 ); I = monomialIdeal( j99 ); I = monomialIdeal( k^17 ); I = monomialIdeal( k1 ); I = monomialIdeal( k10 ); I = monomialIdeal( k100^12345678901234567890 ); I = monomialIdeal( k11 ); I = monomialIdeal( k12 ); I = monomialIdeal( k13 ); I = monomialIdeal( k14 ); I = monomialIdeal( k15 ); I = monomialIdeal( k16 ); I = monomialIdeal( k17 ); I = monomialIdeal( k18 ); I = monomialIdeal( k19 ); I = monomialIdeal( k2 ); I = monomialIdeal( k20 ); I = monomialIdeal( k21 ); I = monomialIdeal( k22 ); I = monomialIdeal( k23 ); I = monomialIdeal( k24 ); I = monomialIdeal( k25 ); I = monomialIdeal( k26 ); I = monomialIdeal( k27 ); I = monomialIdeal( k28 ); I = monomialIdeal( k29 ); I = monomialIdeal( k3 ); I = monomialIdeal( k30 ); I = monomialIdeal( k31 ); I = monomialIdeal( k32 ); I = monomialIdeal( k33 ); I = monomialIdeal( k34 ); I = monomialIdeal( k35 ); I = monomialIdeal( k36 ); I = monomialIdeal( k37 ); I = monomialIdeal( k38 ); I = monomialIdeal( k39 ); I = monomialIdeal( k4 ); I = monomialIdeal( k40 ); I = monomialIdeal( k41 ); I = monomialIdeal( k42 ); I = monomialIdeal( k43 ); I = monomialIdeal( k44 ); I = monomialIdeal( k45 ); I = monomialIdeal( k46 ); I = monomialIdeal( k47 ); I = monomialIdeal( k48 ); I = monomialIdeal( k49 ); I = monomialIdeal( k5 ); I = monomialIdeal( k50 ); I = monomialIdeal( k51 ); I = monomialIdeal( k52 ); I = monomialIdeal( k53 ); I = monomialIdeal( k54 ); I = monomialIdeal( k55 ); I = monomialIdeal( k56 ); I = monomialIdeal( k57 ); I = monomialIdeal( k58 ); I = monomialIdeal( k59 ); I = monomialIdeal( k6 ); I = monomialIdeal( k60 ); I = monomialIdeal( k61 ); I = monomialIdeal( k62 ); I = monomialIdeal( k63 ); I = monomialIdeal( k64 ); I = monomialIdeal( k65 ); I = monomialIdeal( k66 ); I = monomialIdeal( k67 ); I = monomialIdeal( k68 ); I = monomialIdeal( k69 ); I = monomialIdeal( k7 ); I = monomialIdeal( k70 ); I = monomialIdeal( k71 ); I = monomialIdeal( k72 ); I = monomialIdeal( k73 ); I = monomialIdeal( k74 ); I = monomialIdeal( k75 ); I = monomialIdeal( k76 ); I = monomialIdeal( k77 ); I = monomialIdeal( k78 ); I = monomialIdeal( k79 ); I = monomialIdeal( k8 ); I = monomialIdeal( k80 ); I = monomialIdeal( k81 ); I = monomialIdeal( k82 ); I = monomialIdeal( k83 ); I = monomialIdeal( k84 ); I = monomialIdeal( k85 ); I = monomialIdeal( k86 ); I = monomialIdeal( k87 ); I = monomialIdeal( k88 ); I = monomialIdeal( k89 ); I = monomialIdeal( k9 ); I = monomialIdeal( k90 ); I = monomialIdeal( k91 ); I = monomialIdeal( k92 ); I = monomialIdeal( k93 ); I = monomialIdeal( k94 ); I = monomialIdeal( k95 ); I = monomialIdeal( k96 ); I = monomialIdeal( k97^3 ); I = monomialIdeal( k98^4 ); I = monomialIdeal( k99^5 ); I = monomialIdeal( l^18 ); I = monomialIdeal( m^25 ); I = monomialIdeal( n^24 ); I = monomialIdeal( o^8 ); I = monomialIdeal( p^9 ); I = monomialIdeal( q ); I = monomialIdeal( r^3 ); I = monomialIdeal( s^11 ); I = monomialIdeal( t^4 ); I = monomialIdeal( u^6 ); I = monomialIdeal( v^22 ); I = monomialIdeal( w ); I = monomialIdeal( x^20 ); I = monomialIdeal( y^5 ); I = monomialIdeal( z^19 ); frobby-0.9.5/test/bigIdeals/e7.irrdecom_ideal000066400000000000000000000315751401527164200210660ustar00rootroot00000000000000R = QQ[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, a1, a10, a100, a11, a12, a13, a14, a15, a16, a17, a18, a19, a2, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a3, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a4, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a5, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a6, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a7, a70, a71, a72, a73, a74, a75, a76, a77, a78, a79, a8, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a9, a90, a91, a92, a93, a94, a95, a96, a97, a98, a99, aa00bob, b, b1, b10, b100, b11, b12, b13, b14, b15, b16, b17, b18, b19, b2, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b3, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b4, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b5, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b6, b60, b61, b62, b63, b64, b65, b66, b67, b68, b69, b7, b70, b71, b72, b73, b74, b75, b76, b77, b78, b79, b8, b80, b81, b82, b83, b84, b85, b86, b87, b88, b89, b9, b90, b91, b92, b93, b94, b95, b96, b97, b98, b99, c, c1, c10, c100, c11, c12, c13, c14, c15, c16, c17, c18, c19, c2, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c3, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c4, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c5, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c6, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c7, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c8, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c9, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, d, d1, d10, d100, d11, d12, d13, d14, d15, d16, d17, d18, d19, d2, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d3, d30, d31, d32, d33, d34, d35, d36, d37, d38, d39, d4, d40, d41, d42, d43, d44, d45, d46, d47, d48, d49, d5, d50, d51, d52, d53, d54, d55, d56, d57, d58, d59, d6, d60, d61, d62, d63, d64, d65, d66, d67, d68, d69, d7, d70, d71, d72, d73, d74, d75, d76, d77, d78, d79, d8, d80, d81, d82, d83, d84, d85, d86, d87, d88, d89, d9, d90, d91, d92, d93, d94, d95, d96, d97, d98, d99, e, e1, e10, e100, e11, e12, e13, e14, e15, e16, e17, e18, e19, e2, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e3, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e4, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e5, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e6, e60, e61, e62, e63, e64, e65, e66, e67, e68, e69, e7, e70, e71, e72, e73, e74, e75, e76, e77, e78, e79, e8, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e9, e90, e91, e92, e93, e94, e95, e96, e97, e98, e99, f, f1, f10, f100, f11, f12, f13, f14, f15, f16, f17, f18, f19, f2, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f3, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f4, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f5, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f6, f60, f61, f62, f63, f64, f65, f66, f67, f68, f69, f7, f70, f71, f72, f73, f74, f75, f76, f77, f78, f79, f8, f80, f81, f82, f83, f84, f85, f86, f87, f88, f89, f9, f90, f91, f92, f93, f94, f95, f96, f97, f98, f99, g, g1, g10, g100, g11, g12, g13, g14, g15, g16, g17, g18, g19, g2, g20, g21, g22, g23, g24, g25, g26, g27, g28, g29, g3, g30, g31, g32, g33, g34, g35, g36, g37, g38, g39, g4, g40, g41, g42, g43, g44, g45, g46, g47, g48, g49, g5, g50, g51, g52, g53, g54, g55, g56, g57, g58, g59, g6, g60, g61, g62, g63, g64, g65, g66, g67, g68, g69, g7, g70, g71, g72, g73, g74, g75, g76, g77, g78, g79, g8, g80, g81, g82, g83, g84, g85, g86, g87, g88, g89, g9, g90, g91, g92, g93, g94, g95, g96, g97, g98, g99, h, h1, h10, h100, h11, h12, h13, h14, h15, h16, h17, h18, h19, h2, h20, h21, h22, h23, h24, h25, h26, h27, h28, h29, h3, h30, h31, h32, h33, h34, h35, h36, h37, h38, h39, h4, h40, h41, h42, h43, h44, h45, h46, h47, h48, h49, h5, h50, h51, h52, h53, h54, h55, h56, h57, h58, h59, h6, h60, h61, h62, h63, h64, h65, h66, h67, h68, h69, h7, h70, h71, h72, h73, h74, h75, h76, h77, h78, h79, h8, h80, h81, h82, h83, h84, h85, h86, h87, h88, h89, h9, h90, h91, h92, h93, h94, h95, h96, h97, h98, h99, i, i1, i10, i100, i11, i12, i13, i14, i15, i16, i17, i18, i19, i2, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i3, i30, i31, i32, i33, i34, i35, i36, i37, i38, i39, i4, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i5, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i6, i60, i61, i62, i63, i64, i65, i66, i67, i68, i69, i7, i70, i71, i72, i73, i74, i75, i76, i77, i78, i79, i8, i80, i81, i82, i83, i84, i85, i86, i87, i88, i89, i9, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99, j, j1, j10, j100, j11, j12, j13, j14, j15, j16, j17, j18, j19, j2, j20, j21, j22, j23, j24, j25, j26, j27, j28, j29, j3, j30, j31, j32, j33, j34, j35, j36, j37, j38, j39, j4, j40, j41, j42, j43, j44, j45, j46, j47, j48, j49, j5, j50, j51, j52, j53, j54, j55, j56, j57, j58, j59, j6, j60, j61, j62, j63, j64, j65, j66, j67, j68, j69, j7, j70, j71, j72, j73, j74, j75, j76, j77, j78, j79, j8, j80, j81, j82, j83, j84, j85, j86, j87, j88, j89, j9, j90, j91, j92, j93, j94, j95, j96, j97, j98, j99, k, k1, k10, k100, k11, k12, k13, k14, k15, k16, k17, k18, k19, k2, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k3, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k4, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k5, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k6, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k7, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k8, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k9, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]; I = monomialIdeal( A^128, B^65537, C^65535, D^255, E^17, F^256, G^257, H^511, I^64, J^512, K^513, L^1023, M^4294967296, N^4294967295, O^65, P^127, Q^15, R^31, S^129, T^32, U^63, V^65536, W^16, X^1025, Y^33, Z^1024, a^10, a1^4294967297, a10^1001, a100, a11^9999, a12^10000, a13^10001, a14^99999, a15^100000, a16^100001, a17^999999, a18^1000000, a19^1000001, a2^18446744073709551615, a20^9999999, a21^10000000, a22^10000001, a23^99999999, a24^100000000, a25^100000001, a26^999999999, a27^1000000000, a28^1000000001, a29^9999999999, a3^18446744073709551616, a30^10000000000, a31^10000000001, a32^99999999999, a33^100000000000, a34^100000000001, a35^999999999999, a36^1000000000000, a37^1000000000001, a38^9999999999999, a39^10000000000000, a4^18446744073709551617, a40^10000000000001, a41^99999999999999, a42^100000000000000, a43^100000000000001, a44^999999999999999, a45^1000000000000000, a46^1000000000000001, a47^9999999999999999, a48^10000000000000000, a49^10000000000000001, a5^99, a50^9999999999999999, a51^10000000000000000, a52^10000000000000001, a53^9999999999999998, a54, a55, a56, a57, a58, a59, a6^100, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a7^101, a70, a71, a72, a73, a74, a75, a76, a77, a78, a79, a8^999, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a9^1000, a90, a91, a92, a93, a94, a95, a96, a97, a98, a99, aa00bob, b^23, b1, b10, b100, b11, b12, b13, b14, b15, b16, b17, b18, b19, b2, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b3, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b4, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b5, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b6, b60, b61, b62, b63, b64, b65, b66, b67, b68, b69, b7, b70, b71, b72, b73, b74, b75, b76, b77, b78, b79, b8, b80, b81, b82, b83, b84, b85, b86, b87, b88, b89, b9, b90, b91, b92, b93, b94, b95, b96, b97, b98, b99, c^21, c1, c10, c100, c11, c12, c13, c14, c15, c16, c17, c18, c19, c2, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c3, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c4, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c5, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c6, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c7, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c8, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c9, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, d^12, d1, d10, d100, d11, d12, d13, d14, d15, d16, d17, d18, d19, d2, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d3, d30, d31, d32, d33, d34, d35, d36, d37, d38, d39, d4, d40, d41, d42, d43, d44, d45, d46, d47, d48, d49, d5, d50, d51, d52, d53, d54, d55, d56, d57, d58, d59, d6, d60, d61, d62, d63, d64, d65, d66, d67, d68, d69, d7, d70, d71, d72, d73, d74, d75, d76, d77, d78, d79, d8, d80, d81, d82, d83, d84, d85, d86, d87, d88, d89, d9, d90, d91, d92, d93, d94, d95, d96, d97, d98, d99, e^2, e1, e10, e100, e11, e12, e13, e14, e15, e16, e17, e18, e19, e2, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e3, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e4, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e5, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e6, e60, e61, e62, e63, e64, e65, e66, e67, e68, e69, e7, e70, e71, e72, e73, e74, e75, e76, e77, e78, e79, e8, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e9, e90, e91, e92, e93, e94, e95, e96, e97, e98, e99, f^13, f1^103, f10, f100, f11, f12, f13, f14, f15, f16, f17, f18, f19, f2^104, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f3^105, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f4, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f5, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f6, f60, f61, f62, f63, f64, f65, f66, f67, f68, f69, f7, f70, f71, f72, f73, f74, f75, f76, f77, f78, f79, f8, f80, f81, f82, f83, f84, f85, f86, f87, f88, f89, f9, f90, f91, f92, f93, f94, f95, f96, f97, f98, f99, g^14, g1, g10, g100, g11, g12, g13, g14, g15, g16, g17, g18, g19, g2, g20, g21, g22, g23, g24, g25, g26, g27, g28, g29, g3, g30, g31, g32, g33, g34, g35, g36, g37, g38, g39, g4, g40, g41, g42, g43, g44, g45, g46, g47, g48, g49, g5, g50, g51, g52, g53, g54, g55, g56, g57, g58, g59, g6, g60, g61, g62, g63, g64, g65, g66, g67, g68, g69, g7, g70, g71, g72, g73, g74, g75, g76, g77, g78, g79, g8, g80, g81, g82, g83, g84, g85, g86, g87, g88, g89, g9, g90, g91, g92, g93, g94, g95, g96, g97, g98, g99, h^15, h1, h10, h100, h11, h12, h13, h14, h15, h16, h17, h18, h19, h2, h20, h21, h22, h23, h24, h25, h26, h27, h28, h29, h3, h30, h31, h32, h33, h34, h35, h36, h37, h38, h39, h4, h40, h41, h42, h43, h44, h45, h46, h47, h48, h49, h5, h50, h51, h52, h53, h54, h55, h56, h57, h58, h59, h6, h60, h61, h62, h63, h64, h65, h66, h67, h68, h69, h7, h70, h71, h72, h73, h74, h75, h76, h77, h78, h79, h8, h80, h81, h82, h83, h84, h85, h86, h87, h88, h89, h9, h90, h91, h92, h93, h94, h95, h96, h97, h98, h99, i^7, i1, i10, i100, i11, i12, i13, i14, i15, i16, i17, i18, i19, i2, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i3, i30, i31, i32, i33, i34, i35, i36, i37, i38, i39, i4, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i5, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i6, i60, i61, i62, i63, i64, i65, i66, i67, i68, i69, i7, i70, i71, i72, i73, i74, i75, i76, i77, i78, i79, i8, i80, i81, i82, i83, i84, i85, i86, i87, i88, i89, i9, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99, j^16, j1, j10, j100, j11, j12, j13, j14, j15, j16, j17, j18, j19, j2, j20, j21, j22, j23, j24, j25, j26, j27, j28, j29, j3, j30, j31, j32, j33, j34, j35, j36, j37, j38, j39, j4, j40, j41, j42, j43, j44, j45, j46, j47, j48, j49, j5, j50, j51, j52, j53, j54, j55, j56, j57, j58, j59, j6, j60, j61, j62, j63, j64, j65, j66, j67, j68, j69, j7, j70, j71, j72, j73, j74, j75, j76, j77, j78, j79, j8, j80, j81, j82, j83, j84, j85, j86, j87, j88, j89, j9, j90, j91, j92, j93, j94, j95, j96, j97, j98, j99, k^17, k1, k10, k100^12345678901234567890, k11, k12, k13, k14, k15, k16, k17, k18, k19, k2, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k3, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k4, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k5, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k6, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k7, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k8, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k9, k90, k91, k92, k93, k94, k95, k96, k97^3, k98^4, k99^5, l^18, m^25, n^24, o^8, p^9, q, r^3, s^11, t^4, u^6, v^22, w, x^20, y^5, z^19 ); frobby-0.9.5/test/bigIdeals/e7.minimize000066400000000000000000000251751401527164200177440ustar00rootroot00000000000000R = QQ[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, a1, a10, a100, a11, a12, a13, a14, a15, a16, a17, a18, a19, a2, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a3, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a4, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a5, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a6, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a7, a70, a71, a72, a73, a74, a75, a76, a77, a78, a79, a8, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a9, a90, a91, a92, a93, a94, a95, a96, a97, a98, a99, aa00bob, b, b1, b10, b100, b11, b12, b13, b14, b15, b16, b17, b18, b19, b2, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b3, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b4, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b5, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b6, b60, b61, b62, b63, b64, b65, b66, b67, b68, b69, b7, b70, b71, b72, b73, b74, b75, b76, b77, b78, b79, b8, b80, b81, b82, b83, b84, b85, b86, b87, b88, b89, b9, b90, b91, b92, b93, b94, b95, b96, b97, b98, b99, c, c1, c10, c100, c11, c12, c13, c14, c15, c16, c17, c18, c19, c2, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c3, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c4, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c5, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c6, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c7, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c8, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c9, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, d, d1, d10, d100, d11, d12, d13, d14, d15, d16, d17, d18, d19, d2, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d3, d30, d31, d32, d33, d34, d35, d36, d37, d38, d39, d4, d40, d41, d42, d43, d44, d45, d46, d47, d48, d49, d5, d50, d51, d52, d53, d54, d55, d56, d57, d58, d59, d6, d60, d61, d62, d63, d64, d65, d66, d67, d68, d69, d7, d70, d71, d72, d73, d74, d75, d76, d77, d78, d79, d8, d80, d81, d82, d83, d84, d85, d86, d87, d88, d89, d9, d90, d91, d92, d93, d94, d95, d96, d97, d98, d99, e, e1, e10, e100, e11, e12, e13, e14, e15, e16, e17, e18, e19, e2, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e3, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e4, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e5, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e6, e60, e61, e62, e63, e64, e65, e66, e67, e68, e69, e7, e70, e71, e72, e73, e74, e75, e76, e77, e78, e79, e8, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e9, e90, e91, e92, e93, e94, e95, e96, e97, e98, e99, f, f1, f10, f100, f11, f12, f13, f14, f15, f16, f17, f18, f19, f2, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f3, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f4, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f5, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f6, f60, f61, f62, f63, f64, f65, f66, f67, f68, f69, f7, f70, f71, f72, f73, f74, f75, f76, f77, f78, f79, f8, f80, f81, f82, f83, f84, f85, f86, f87, f88, f89, f9, f90, f91, f92, f93, f94, f95, f96, f97, f98, f99, g, g1, g10, g100, g11, g12, g13, g14, g15, g16, g17, g18, g19, g2, g20, g21, g22, g23, g24, g25, g26, g27, g28, g29, g3, g30, g31, g32, g33, g34, g35, g36, g37, g38, g39, g4, g40, g41, g42, g43, g44, g45, g46, g47, g48, g49, g5, g50, g51, g52, g53, g54, g55, g56, g57, g58, g59, g6, g60, g61, g62, g63, g64, g65, g66, g67, g68, g69, g7, g70, g71, g72, g73, g74, g75, g76, g77, g78, g79, g8, g80, g81, g82, g83, g84, g85, g86, g87, g88, g89, g9, g90, g91, g92, g93, g94, g95, g96, g97, g98, g99, h, h1, h10, h100, h11, h12, h13, h14, h15, h16, h17, h18, h19, h2, h20, h21, h22, h23, h24, h25, h26, h27, h28, h29, h3, h30, h31, h32, h33, h34, h35, h36, h37, h38, h39, h4, h40, h41, h42, h43, h44, h45, h46, h47, h48, h49, h5, h50, h51, h52, h53, h54, h55, h56, h57, h58, h59, h6, h60, h61, h62, h63, h64, h65, h66, h67, h68, h69, h7, h70, h71, h72, h73, h74, h75, h76, h77, h78, h79, h8, h80, h81, h82, h83, h84, h85, h86, h87, h88, h89, h9, h90, h91, h92, h93, h94, h95, h96, h97, h98, h99, i, i1, i10, i100, i11, i12, i13, i14, i15, i16, i17, i18, i19, i2, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i3, i30, i31, i32, i33, i34, i35, i36, i37, i38, i39, i4, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i5, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i6, i60, i61, i62, i63, i64, i65, i66, i67, i68, i69, i7, i70, i71, i72, i73, i74, i75, i76, i77, i78, i79, i8, i80, i81, i82, i83, i84, i85, i86, i87, i88, i89, i9, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99, j, j1, j10, j100, j11, j12, j13, j14, j15, j16, j17, j18, j19, j2, j20, j21, j22, j23, j24, j25, j26, j27, j28, j29, j3, j30, j31, j32, j33, j34, j35, j36, j37, j38, j39, j4, j40, j41, j42, j43, j44, j45, j46, j47, j48, j49, j5, j50, j51, j52, j53, j54, j55, j56, j57, j58, j59, j6, j60, j61, j62, j63, j64, j65, j66, j67, j68, j69, j7, j70, j71, j72, j73, j74, j75, j76, j77, j78, j79, j8, j80, j81, j82, j83, j84, j85, j86, j87, j88, j89, j9, j90, j91, j92, j93, j94, j95, j96, j97, j98, j99, k, k1, k10, k100, k11, k12, k13, k14, k15, k16, k17, k18, k19, k2, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k3, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k4, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k5, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k6, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k7, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k8, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k9, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]; I = monomialIdeal( A^128*B^65537*C^65535*D^255*E^17*F^256*G^257*H^511*I^64*J^512*K^513*L^1023*M^4294967296*N^4294967295*O^65*P^127*Q^15*R^31*S^129*T^32*U^63*V^65536*W^16*X^1025*Y^33*Z^1024*a^10*a1^4294967297*a10^1001*a100*a11^9999*a12^10000*a13^10001*a14^99999*a15^100000*a16^100001*a17^999999*a18^1000000*a19^1000001*a2^18446744073709551615*a20^9999999*a21^10000000*a22^10000001*a23^99999999*a24^100000000*a25^100000001*a26^999999999*a27^1000000000*a28^1000000001*a29^9999999999*a3^18446744073709551616*a30^10000000000*a31^10000000001*a32^99999999999*a33^100000000000*a34^100000000001*a35^999999999999*a36^1000000000000*a37^1000000000001*a38^9999999999999*a39^10000000000000*a4^18446744073709551617*a40^10000000000001*a41^99999999999999*a42^100000000000000*a43^100000000000001*a44^999999999999999*a45^1000000000000000*a46^1000000000000001*a47^9999999999999999*a48^10000000000000000*a49^10000000000000001*a5^99*a50^9999999999999999*a51^10000000000000000*a52^10000000000000001*a53^9999999999999998*a54*a55*a56*a57*a58*a59*a6^100*a60*a61*a62*a63*a64*a65*a66*a67*a68*a69*a7^101*a70*a71*a72*a73*a74*a75*a76*a77*a78*a79*a8^999*a80*a81*a82*a83*a84*a85*a86*a87*a88*a89*a9^1000*a90*a91*a92*a93*a94*a95*a96*a97*a98*a99*aa00bob*b^23*b1*b10*b100*b11*b12*b13*b14*b15*b16*b17*b18*b19*b2*b20*b21*b22*b23*b24*b25*b26*b27*b28*b29*b3*b30*b31*b32*b33*b34*b35*b36*b37*b38*b39*b4*b40*b41*b42*b43*b44*b45*b46*b47*b48*b49*b5*b50*b51*b52*b53*b54*b55*b56*b57*b58*b59*b6*b60*b61*b62*b63*b64*b65*b66*b67*b68*b69*b7*b70*b71*b72*b73*b74*b75*b76*b77*b78*b79*b8*b80*b81*b82*b83*b84*b85*b86*b87*b88*b89*b9*b90*b91*b92*b93*b94*b95*b96*b97*b98*b99*c^21*c1*c10*c100*c11*c12*c13*c14*c15*c16*c17*c18*c19*c2*c20*c21*c22*c23*c24*c25*c26*c27*c28*c29*c3*c30*c31*c32*c33*c34*c35*c36*c37*c38*c39*c4*c40*c41*c42*c43*c44*c45*c46*c47*c48*c49*c5*c50*c51*c52*c53*c54*c55*c56*c57*c58*c59*c6*c60*c61*c62*c63*c64*c65*c66*c67*c68*c69*c7*c70*c71*c72*c73*c74*c75*c76*c77*c78*c79*c8*c80*c81*c82*c83*c84*c85*c86*c87*c88*c89*c9*c90*c91*c92*c93*c94*c95*c96*c97*c98*c99*d^12*d1*d10*d100*d11*d12*d13*d14*d15*d16*d17*d18*d19*d2*d20*d21*d22*d23*d24*d25*d26*d27*d28*d29*d3*d30*d31*d32*d33*d34*d35*d36*d37*d38*d39*d4*d40*d41*d42*d43*d44*d45*d46*d47*d48*d49*d5*d50*d51*d52*d53*d54*d55*d56*d57*d58*d59*d6*d60*d61*d62*d63*d64*d65*d66*d67*d68*d69*d7*d70*d71*d72*d73*d74*d75*d76*d77*d78*d79*d8*d80*d81*d82*d83*d84*d85*d86*d87*d88*d89*d9*d90*d91*d92*d93*d94*d95*d96*d97*d98*d99*e^2*e1*e10*e100*e11*e12*e13*e14*e15*e16*e17*e18*e19*e2*e20*e21*e22*e23*e24*e25*e26*e27*e28*e29*e3*e30*e31*e32*e33*e34*e35*e36*e37*e38*e39*e4*e40*e41*e42*e43*e44*e45*e46*e47*e48*e49*e5*e50*e51*e52*e53*e54*e55*e56*e57*e58*e59*e6*e60*e61*e62*e63*e64*e65*e66*e67*e68*e69*e7*e70*e71*e72*e73*e74*e75*e76*e77*e78*e79*e8*e80*e81*e82*e83*e84*e85*e86*e87*e88*e89*e9*e90*e91*e92*e93*e94*e95*e96*e97*e98*e99*f^13*f1^103*f10*f100*f11*f12*f13*f14*f15*f16*f17*f18*f19*f2^104*f20*f21*f22*f23*f24*f25*f26*f27*f28*f29*f3^105*f30*f31*f32*f33*f34*f35*f36*f37*f38*f39*f4*f40*f41*f42*f43*f44*f45*f46*f47*f48*f49*f5*f50*f51*f52*f53*f54*f55*f56*f57*f58*f59*f6*f60*f61*f62*f63*f64*f65*f66*f67*f68*f69*f7*f70*f71*f72*f73*f74*f75*f76*f77*f78*f79*f8*f80*f81*f82*f83*f84*f85*f86*f87*f88*f89*f9*f90*f91*f92*f93*f94*f95*f96*f97*f98*f99*g^14*g1*g10*g100*g11*g12*g13*g14*g15*g16*g17*g18*g19*g2*g20*g21*g22*g23*g24*g25*g26*g27*g28*g29*g3*g30*g31*g32*g33*g34*g35*g36*g37*g38*g39*g4*g40*g41*g42*g43*g44*g45*g46*g47*g48*g49*g5*g50*g51*g52*g53*g54*g55*g56*g57*g58*g59*g6*g60*g61*g62*g63*g64*g65*g66*g67*g68*g69*g7*g70*g71*g72*g73*g74*g75*g76*g77*g78*g79*g8*g80*g81*g82*g83*g84*g85*g86*g87*g88*g89*g9*g90*g91*g92*g93*g94*g95*g96*g97*g98*g99*h^15*h1*h10*h100*h11*h12*h13*h14*h15*h16*h17*h18*h19*h2*h20*h21*h22*h23*h24*h25*h26*h27*h28*h29*h3*h30*h31*h32*h33*h34*h35*h36*h37*h38*h39*h4*h40*h41*h42*h43*h44*h45*h46*h47*h48*h49*h5*h50*h51*h52*h53*h54*h55*h56*h57*h58*h59*h6*h60*h61*h62*h63*h64*h65*h66*h67*h68*h69*h7*h70*h71*h72*h73*h74*h75*h76*h77*h78*h79*h8*h80*h81*h82*h83*h84*h85*h86*h87*h88*h89*h9*h90*h91*h92*h93*h94*h95*h96*h97*h98*h99*i^7*i1*i10*i100*i11*i12*i13*i14*i15*i16*i17*i18*i19*i2*i20*i21*i22*i23*i24*i25*i26*i27*i28*i29*i3*i30*i31*i32*i33*i34*i35*i36*i37*i38*i39*i4*i40*i41*i42*i43*i44*i45*i46*i47*i48*i49*i5*i50*i51*i52*i53*i54*i55*i56*i57*i58*i59*i6*i60*i61*i62*i63*i64*i65*i66*i67*i68*i69*i7*i70*i71*i72*i73*i74*i75*i76*i77*i78*i79*i8*i80*i81*i82*i83*i84*i85*i86*i87*i88*i89*i9*i90*i91*i92*i93*i94*i95*i96*i97*i98*i99*j^16*j1*j10*j100*j11*j12*j13*j14*j15*j16*j17*j18*j19*j2*j20*j21*j22*j23*j24*j25*j26*j27*j28*j29*j3*j30*j31*j32*j33*j34*j35*j36*j37*j38*j39*j4*j40*j41*j42*j43*j44*j45*j46*j47*j48*j49*j5*j50*j51*j52*j53*j54*j55*j56*j57*j58*j59*j6*j60*j61*j62*j63*j64*j65*j66*j67*j68*j69*j7*j70*j71*j72*j73*j74*j75*j76*j77*j78*j79*j8*j80*j81*j82*j83*j84*j85*j86*j87*j88*j89*j9*j90*j91*j92*j93*j94*j95*j96*j97*j98*j99*k^17*k1*k10*k100^12345678901234567890*k11*k12*k13*k14*k15*k16*k17*k18*k19*k2*k20*k21*k22*k23*k24*k25*k26*k27*k28*k29*k3*k30*k31*k32*k33*k34*k35*k36*k37*k38*k39*k4*k40*k41*k42*k43*k44*k45*k46*k47*k48*k49*k5*k50*k51*k52*k53*k54*k55*k56*k57*k58*k59*k6*k60*k61*k62*k63*k64*k65*k66*k67*k68*k69*k7*k70*k71*k72*k73*k74*k75*k76*k77*k78*k79*k8*k80*k81*k82*k83*k84*k85*k86*k87*k88*k89*k9*k90*k91*k92*k93*k94*k95*k96*k97^3*k98^4*k99^5*l^18*m^25*n^24*o^8*p^9*q*r^3*s^11*t^4*u^6*v^22*w*x^20*y^5*z^19 ); frobby-0.9.5/test/bigIdeals/e7.multi000066400000000000000000000000001401527164200172310ustar00rootroot00000000000000frobby-0.9.5/test/bigIdeals/e7.primdecom000066400000000000000000001107751401527164200201030ustar00rootroot00000000000000R = QQ[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, a1, a10, a100, a11, a12, a13, a14, a15, a16, a17, a18, a19, a2, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a3, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a4, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a5, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a6, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a7, a70, a71, a72, a73, a74, a75, a76, a77, a78, a79, a8, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a9, a90, a91, a92, a93, a94, a95, a96, a97, a98, a99, aa00bob, b, b1, b10, b100, b11, b12, b13, b14, b15, b16, b17, b18, b19, b2, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b3, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b4, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b5, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b6, b60, b61, b62, b63, b64, b65, b66, b67, b68, b69, b7, b70, b71, b72, b73, b74, b75, b76, b77, b78, b79, b8, b80, b81, b82, b83, b84, b85, b86, b87, b88, b89, b9, b90, b91, b92, b93, b94, b95, b96, b97, b98, b99, c, c1, c10, c100, c11, c12, c13, c14, c15, c16, c17, c18, c19, c2, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c3, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c4, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c5, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c6, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c7, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c8, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c9, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, d, d1, d10, d100, d11, d12, d13, d14, d15, d16, d17, d18, d19, d2, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d3, d30, d31, d32, d33, d34, d35, d36, d37, d38, d39, d4, d40, d41, d42, d43, d44, d45, d46, d47, d48, d49, d5, d50, d51, d52, d53, d54, d55, d56, d57, d58, d59, d6, d60, d61, d62, d63, d64, d65, d66, d67, d68, d69, d7, d70, d71, d72, d73, d74, d75, d76, d77, d78, d79, d8, d80, d81, d82, d83, d84, d85, d86, d87, d88, d89, d9, d90, d91, d92, d93, d94, d95, d96, d97, d98, d99, e, e1, e10, e100, e11, e12, e13, e14, e15, e16, e17, e18, e19, e2, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e3, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e4, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e5, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e6, e60, e61, e62, e63, e64, e65, e66, e67, e68, e69, e7, e70, e71, e72, e73, e74, e75, e76, e77, e78, e79, e8, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e9, e90, e91, e92, e93, e94, e95, e96, e97, e98, e99, f, f1, f10, f100, f11, f12, f13, f14, f15, f16, f17, f18, f19, f2, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f3, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f4, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f5, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f6, f60, f61, f62, f63, f64, f65, f66, f67, f68, f69, f7, f70, f71, f72, f73, f74, f75, f76, f77, f78, f79, f8, f80, f81, f82, f83, f84, f85, f86, f87, f88, f89, f9, f90, f91, f92, f93, f94, f95, f96, f97, f98, f99, g, g1, g10, g100, g11, g12, g13, g14, g15, g16, g17, g18, g19, g2, g20, g21, g22, g23, g24, g25, g26, g27, g28, g29, g3, g30, g31, g32, g33, g34, g35, g36, g37, g38, g39, g4, g40, g41, g42, g43, g44, g45, g46, g47, g48, g49, g5, g50, g51, g52, g53, g54, g55, g56, g57, g58, g59, g6, g60, g61, g62, g63, g64, g65, g66, g67, g68, g69, g7, g70, g71, g72, g73, g74, g75, g76, g77, g78, g79, g8, g80, g81, g82, g83, g84, g85, g86, g87, g88, g89, g9, g90, g91, g92, g93, g94, g95, g96, g97, g98, g99, h, h1, h10, h100, h11, h12, h13, h14, h15, h16, h17, h18, h19, h2, h20, h21, h22, h23, h24, h25, h26, h27, h28, h29, h3, h30, h31, h32, h33, h34, h35, h36, h37, h38, h39, h4, h40, h41, h42, h43, h44, h45, h46, h47, h48, h49, h5, h50, h51, h52, h53, h54, h55, h56, h57, h58, h59, h6, h60, h61, h62, h63, h64, h65, h66, h67, h68, h69, h7, h70, h71, h72, h73, h74, h75, h76, h77, h78, h79, h8, h80, h81, h82, h83, h84, h85, h86, h87, h88, h89, h9, h90, h91, h92, h93, h94, h95, h96, h97, h98, h99, i, i1, i10, i100, i11, i12, i13, i14, i15, i16, i17, i18, i19, i2, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i3, i30, i31, i32, i33, i34, i35, i36, i37, i38, i39, i4, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i5, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i6, i60, i61, i62, i63, i64, i65, i66, i67, i68, i69, i7, i70, i71, i72, i73, i74, i75, i76, i77, i78, i79, i8, i80, i81, i82, i83, i84, i85, i86, i87, i88, i89, i9, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99, j, j1, j10, j100, j11, j12, j13, j14, j15, j16, j17, j18, j19, j2, j20, j21, j22, j23, j24, j25, j26, j27, j28, j29, j3, j30, j31, j32, j33, j34, j35, j36, j37, j38, j39, j4, j40, j41, j42, j43, j44, j45, j46, j47, j48, j49, j5, j50, j51, j52, j53, j54, j55, j56, j57, j58, j59, j6, j60, j61, j62, j63, j64, j65, j66, j67, j68, j69, j7, j70, j71, j72, j73, j74, j75, j76, j77, j78, j79, j8, j80, j81, j82, j83, j84, j85, j86, j87, j88, j89, j9, j90, j91, j92, j93, j94, j95, j96, j97, j98, j99, k, k1, k10, k100, k11, k12, k13, k14, k15, k16, k17, k18, k19, k2, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k3, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k4, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k5, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k6, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k7, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k8, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k9, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]; I = monomialIdeal( A^128 ); I = monomialIdeal( B^65537 ); I = monomialIdeal( C^65535 ); I = monomialIdeal( D^255 ); I = monomialIdeal( E^17 ); I = monomialIdeal( F^256 ); I = monomialIdeal( G^257 ); I = monomialIdeal( H^511 ); I = monomialIdeal( I^64 ); I = monomialIdeal( J^512 ); I = monomialIdeal( K^513 ); I = monomialIdeal( L^1023 ); I = monomialIdeal( M^4294967296 ); I = monomialIdeal( N^4294967295 ); I = monomialIdeal( O^65 ); I = monomialIdeal( P^127 ); I = monomialIdeal( Q^15 ); I = monomialIdeal( R^31 ); I = monomialIdeal( S^129 ); I = monomialIdeal( T^32 ); I = monomialIdeal( U^63 ); I = monomialIdeal( V^65536 ); I = monomialIdeal( W^16 ); I = monomialIdeal( X^1025 ); I = monomialIdeal( Y^33 ); I = monomialIdeal( Z^1024 ); I = monomialIdeal( a^10 ); I = monomialIdeal( a1^4294967297 ); I = monomialIdeal( a10^1001 ); I = monomialIdeal( a100 ); I = monomialIdeal( a11^9999 ); I = monomialIdeal( a12^10000 ); I = monomialIdeal( a13^10001 ); I = monomialIdeal( a14^99999 ); I = monomialIdeal( a15^100000 ); I = monomialIdeal( a16^100001 ); I = monomialIdeal( a17^999999 ); I = monomialIdeal( a18^1000000 ); I = monomialIdeal( a19^1000001 ); I = monomialIdeal( a2^18446744073709551615 ); I = monomialIdeal( a20^9999999 ); I = monomialIdeal( a21^10000000 ); I = monomialIdeal( a22^10000001 ); I = monomialIdeal( a23^99999999 ); I = monomialIdeal( a24^100000000 ); I = monomialIdeal( a25^100000001 ); I = monomialIdeal( a26^999999999 ); I = monomialIdeal( a27^1000000000 ); I = monomialIdeal( a28^1000000001 ); I = monomialIdeal( a29^9999999999 ); I = monomialIdeal( a3^18446744073709551616 ); I = monomialIdeal( a30^10000000000 ); I = monomialIdeal( a31^10000000001 ); I = monomialIdeal( a32^99999999999 ); I = monomialIdeal( a33^100000000000 ); I = monomialIdeal( a34^100000000001 ); I = monomialIdeal( a35^999999999999 ); I = monomialIdeal( a36^1000000000000 ); I = monomialIdeal( a37^1000000000001 ); I = monomialIdeal( a38^9999999999999 ); I = monomialIdeal( a39^10000000000000 ); I = monomialIdeal( a4^18446744073709551617 ); I = monomialIdeal( a40^10000000000001 ); I = monomialIdeal( a41^99999999999999 ); I = monomialIdeal( a42^100000000000000 ); I = monomialIdeal( a43^100000000000001 ); I = monomialIdeal( a44^999999999999999 ); I = monomialIdeal( a45^1000000000000000 ); I = monomialIdeal( a46^1000000000000001 ); I = monomialIdeal( a47^9999999999999999 ); I = monomialIdeal( a48^10000000000000000 ); I = monomialIdeal( a49^10000000000000001 ); I = monomialIdeal( a5^99 ); I = monomialIdeal( a50^9999999999999999 ); I = monomialIdeal( a51^10000000000000000 ); I = monomialIdeal( a52^10000000000000001 ); I = monomialIdeal( a53^9999999999999998 ); I = monomialIdeal( a54 ); I = monomialIdeal( a55 ); I = monomialIdeal( a56 ); I = monomialIdeal( a57 ); I = monomialIdeal( a58 ); I = monomialIdeal( a59 ); I = monomialIdeal( a6^100 ); I = monomialIdeal( a60 ); I = monomialIdeal( a61 ); I = monomialIdeal( a62 ); I = monomialIdeal( a63 ); I = monomialIdeal( a64 ); I = monomialIdeal( a65 ); I = monomialIdeal( a66 ); I = monomialIdeal( a67 ); I = monomialIdeal( a68 ); I = monomialIdeal( a69 ); I = monomialIdeal( a7^101 ); I = monomialIdeal( a70 ); I = monomialIdeal( a71 ); I = monomialIdeal( a72 ); I = monomialIdeal( a73 ); I = monomialIdeal( a74 ); I = monomialIdeal( a75 ); I = monomialIdeal( a76 ); I = monomialIdeal( a77 ); I = monomialIdeal( a78 ); I = monomialIdeal( a79 ); I = monomialIdeal( a8^999 ); I = monomialIdeal( a80 ); I = monomialIdeal( a81 ); I = monomialIdeal( a82 ); I = monomialIdeal( a83 ); I = monomialIdeal( a84 ); I = monomialIdeal( a85 ); I = monomialIdeal( a86 ); I = monomialIdeal( a87 ); I = monomialIdeal( a88 ); I = monomialIdeal( a89 ); I = monomialIdeal( a9^1000 ); I = monomialIdeal( a90 ); I = monomialIdeal( a91 ); I = monomialIdeal( a92 ); I = monomialIdeal( a93 ); I = monomialIdeal( a94 ); I = monomialIdeal( a95 ); I = monomialIdeal( a96 ); I = monomialIdeal( a97 ); I = monomialIdeal( a98 ); I = monomialIdeal( a99 ); I = monomialIdeal( aa00bob ); I = monomialIdeal( b^23 ); I = monomialIdeal( b1 ); I = monomialIdeal( b10 ); I = monomialIdeal( b100 ); I = monomialIdeal( b11 ); I = monomialIdeal( b12 ); I = monomialIdeal( b13 ); I = monomialIdeal( b14 ); I = monomialIdeal( b15 ); I = monomialIdeal( b16 ); I = monomialIdeal( b17 ); I = monomialIdeal( b18 ); I = monomialIdeal( b19 ); I = monomialIdeal( b2 ); I = monomialIdeal( b20 ); I = monomialIdeal( b21 ); I = monomialIdeal( b22 ); I = monomialIdeal( b23 ); I = monomialIdeal( b24 ); I = monomialIdeal( b25 ); I = monomialIdeal( b26 ); I = monomialIdeal( b27 ); I = monomialIdeal( b28 ); I = monomialIdeal( b29 ); I = monomialIdeal( b3 ); I = monomialIdeal( b30 ); I = monomialIdeal( b31 ); I = monomialIdeal( b32 ); I = monomialIdeal( b33 ); I = monomialIdeal( b34 ); I = monomialIdeal( b35 ); I = monomialIdeal( b36 ); I = monomialIdeal( b37 ); I = monomialIdeal( b38 ); I = monomialIdeal( b39 ); I = monomialIdeal( b4 ); I = monomialIdeal( b40 ); I = monomialIdeal( b41 ); I = monomialIdeal( b42 ); I = monomialIdeal( b43 ); I = monomialIdeal( b44 ); I = monomialIdeal( b45 ); I = monomialIdeal( b46 ); I = monomialIdeal( b47 ); I = monomialIdeal( b48 ); I = monomialIdeal( b49 ); I = monomialIdeal( b5 ); I = monomialIdeal( b50 ); I = monomialIdeal( b51 ); I = monomialIdeal( b52 ); I = monomialIdeal( b53 ); I = monomialIdeal( b54 ); I = monomialIdeal( b55 ); I = monomialIdeal( b56 ); I = monomialIdeal( b57 ); I = monomialIdeal( b58 ); I = monomialIdeal( b59 ); I = monomialIdeal( b6 ); I = monomialIdeal( b60 ); I = monomialIdeal( b61 ); I = monomialIdeal( b62 ); I = monomialIdeal( b63 ); I = monomialIdeal( b64 ); I = monomialIdeal( b65 ); I = monomialIdeal( b66 ); I = monomialIdeal( b67 ); I = monomialIdeal( b68 ); I = monomialIdeal( b69 ); I = monomialIdeal( b7 ); I = monomialIdeal( b70 ); I = monomialIdeal( b71 ); I = monomialIdeal( b72 ); I = monomialIdeal( b73 ); I = monomialIdeal( b74 ); I = monomialIdeal( b75 ); I = monomialIdeal( b76 ); I = monomialIdeal( b77 ); I = monomialIdeal( b78 ); I = monomialIdeal( b79 ); I = monomialIdeal( b8 ); I = monomialIdeal( b80 ); I = monomialIdeal( b81 ); I = monomialIdeal( b82 ); I = monomialIdeal( b83 ); I = monomialIdeal( b84 ); I = monomialIdeal( b85 ); I = monomialIdeal( b86 ); I = monomialIdeal( b87 ); I = monomialIdeal( b88 ); I = monomialIdeal( b89 ); I = monomialIdeal( b9 ); I = monomialIdeal( b90 ); I = monomialIdeal( b91 ); I = monomialIdeal( b92 ); I = monomialIdeal( b93 ); I = monomialIdeal( b94 ); I = monomialIdeal( b95 ); I = monomialIdeal( b96 ); I = monomialIdeal( b97 ); I = monomialIdeal( b98 ); I = monomialIdeal( b99 ); I = monomialIdeal( c^21 ); I = monomialIdeal( c1 ); I = monomialIdeal( c10 ); I = monomialIdeal( c100 ); I = monomialIdeal( c11 ); I = monomialIdeal( c12 ); I = monomialIdeal( c13 ); I = monomialIdeal( c14 ); I = monomialIdeal( c15 ); I = monomialIdeal( c16 ); I = monomialIdeal( c17 ); I = monomialIdeal( c18 ); I = monomialIdeal( c19 ); I = monomialIdeal( c2 ); I = monomialIdeal( c20 ); I = monomialIdeal( c21 ); I = monomialIdeal( c22 ); I = monomialIdeal( c23 ); I = monomialIdeal( c24 ); I = monomialIdeal( c25 ); I = monomialIdeal( c26 ); I = monomialIdeal( c27 ); I = monomialIdeal( c28 ); I = monomialIdeal( c29 ); I = monomialIdeal( c3 ); I = monomialIdeal( c30 ); I = monomialIdeal( c31 ); I = monomialIdeal( c32 ); I = monomialIdeal( c33 ); I = monomialIdeal( c34 ); I = monomialIdeal( c35 ); I = monomialIdeal( c36 ); I = monomialIdeal( c37 ); I = monomialIdeal( c38 ); I = monomialIdeal( c39 ); I = monomialIdeal( c4 ); I = monomialIdeal( c40 ); I = monomialIdeal( c41 ); I = monomialIdeal( c42 ); I = monomialIdeal( c43 ); I = monomialIdeal( c44 ); I = monomialIdeal( c45 ); I = monomialIdeal( c46 ); I = monomialIdeal( c47 ); I = monomialIdeal( c48 ); I = monomialIdeal( c49 ); I = monomialIdeal( c5 ); I = monomialIdeal( c50 ); I = monomialIdeal( c51 ); I = monomialIdeal( c52 ); I = monomialIdeal( c53 ); I = monomialIdeal( c54 ); I = monomialIdeal( c55 ); I = monomialIdeal( c56 ); I = monomialIdeal( c57 ); I = monomialIdeal( c58 ); I = monomialIdeal( c59 ); I = monomialIdeal( c6 ); I = monomialIdeal( c60 ); I = monomialIdeal( c61 ); I = monomialIdeal( c62 ); I = monomialIdeal( c63 ); I = monomialIdeal( c64 ); I = monomialIdeal( c65 ); I = monomialIdeal( c66 ); I = monomialIdeal( c67 ); I = monomialIdeal( c68 ); I = monomialIdeal( c69 ); I = monomialIdeal( c7 ); I = monomialIdeal( c70 ); I = monomialIdeal( c71 ); I = monomialIdeal( c72 ); I = monomialIdeal( c73 ); I = monomialIdeal( c74 ); I = monomialIdeal( c75 ); I = monomialIdeal( c76 ); I = monomialIdeal( c77 ); I = monomialIdeal( c78 ); I = monomialIdeal( c79 ); I = monomialIdeal( c8 ); I = monomialIdeal( c80 ); I = monomialIdeal( c81 ); I = monomialIdeal( c82 ); I = monomialIdeal( c83 ); I = monomialIdeal( c84 ); I = monomialIdeal( c85 ); I = monomialIdeal( c86 ); I = monomialIdeal( c87 ); I = monomialIdeal( c88 ); I = monomialIdeal( c89 ); I = monomialIdeal( c9 ); I = monomialIdeal( c90 ); I = monomialIdeal( c91 ); I = monomialIdeal( c92 ); I = monomialIdeal( c93 ); I = monomialIdeal( c94 ); I = monomialIdeal( c95 ); I = monomialIdeal( c96 ); I = monomialIdeal( c97 ); I = monomialIdeal( c98 ); I = monomialIdeal( c99 ); I = monomialIdeal( d^12 ); I = monomialIdeal( d1 ); I = monomialIdeal( d10 ); I = monomialIdeal( d100 ); I = monomialIdeal( d11 ); I = monomialIdeal( d12 ); I = monomialIdeal( d13 ); I = monomialIdeal( d14 ); I = monomialIdeal( d15 ); I = monomialIdeal( d16 ); I = monomialIdeal( d17 ); I = monomialIdeal( d18 ); I = monomialIdeal( d19 ); I = monomialIdeal( d2 ); I = monomialIdeal( d20 ); I = monomialIdeal( d21 ); I = monomialIdeal( d22 ); I = monomialIdeal( d23 ); I = monomialIdeal( d24 ); I = monomialIdeal( d25 ); I = monomialIdeal( d26 ); I = monomialIdeal( d27 ); I = monomialIdeal( d28 ); I = monomialIdeal( d29 ); I = monomialIdeal( d3 ); I = monomialIdeal( d30 ); I = monomialIdeal( d31 ); I = monomialIdeal( d32 ); I = monomialIdeal( d33 ); I = monomialIdeal( d34 ); I = monomialIdeal( d35 ); I = monomialIdeal( d36 ); I = monomialIdeal( d37 ); I = monomialIdeal( d38 ); I = monomialIdeal( d39 ); I = monomialIdeal( d4 ); I = monomialIdeal( d40 ); I = monomialIdeal( d41 ); I = monomialIdeal( d42 ); I = monomialIdeal( d43 ); I = monomialIdeal( d44 ); I = monomialIdeal( d45 ); I = monomialIdeal( d46 ); I = monomialIdeal( d47 ); I = monomialIdeal( d48 ); I = monomialIdeal( d49 ); I = monomialIdeal( d5 ); I = monomialIdeal( d50 ); I = monomialIdeal( d51 ); I = monomialIdeal( d52 ); I = monomialIdeal( d53 ); I = monomialIdeal( d54 ); I = monomialIdeal( d55 ); I = monomialIdeal( d56 ); I = monomialIdeal( d57 ); I = monomialIdeal( d58 ); I = monomialIdeal( d59 ); I = monomialIdeal( d6 ); I = monomialIdeal( d60 ); I = monomialIdeal( d61 ); I = monomialIdeal( d62 ); I = monomialIdeal( d63 ); I = monomialIdeal( d64 ); I = monomialIdeal( d65 ); I = monomialIdeal( d66 ); I = monomialIdeal( d67 ); I = monomialIdeal( d68 ); I = monomialIdeal( d69 ); I = monomialIdeal( d7 ); I = monomialIdeal( d70 ); I = monomialIdeal( d71 ); I = monomialIdeal( d72 ); I = monomialIdeal( d73 ); I = monomialIdeal( d74 ); I = monomialIdeal( d75 ); I = monomialIdeal( d76 ); I = monomialIdeal( d77 ); I = monomialIdeal( d78 ); I = monomialIdeal( d79 ); I = monomialIdeal( d8 ); I = monomialIdeal( d80 ); I = monomialIdeal( d81 ); I = monomialIdeal( d82 ); I = monomialIdeal( d83 ); I = monomialIdeal( d84 ); I = monomialIdeal( d85 ); I = monomialIdeal( d86 ); I = monomialIdeal( d87 ); I = monomialIdeal( d88 ); I = monomialIdeal( d89 ); I = monomialIdeal( d9 ); I = monomialIdeal( d90 ); I = monomialIdeal( d91 ); I = monomialIdeal( d92 ); I = monomialIdeal( d93 ); I = monomialIdeal( d94 ); I = monomialIdeal( d95 ); I = monomialIdeal( d96 ); I = monomialIdeal( d97 ); I = monomialIdeal( d98 ); I = monomialIdeal( d99 ); I = monomialIdeal( e^2 ); I = monomialIdeal( e1 ); I = monomialIdeal( e10 ); I = monomialIdeal( e100 ); I = monomialIdeal( e11 ); I = monomialIdeal( e12 ); I = monomialIdeal( e13 ); I = monomialIdeal( e14 ); I = monomialIdeal( e15 ); I = monomialIdeal( e16 ); I = monomialIdeal( e17 ); I = monomialIdeal( e18 ); I = monomialIdeal( e19 ); I = monomialIdeal( e2 ); I = monomialIdeal( e20 ); I = monomialIdeal( e21 ); I = monomialIdeal( e22 ); I = monomialIdeal( e23 ); I = monomialIdeal( e24 ); I = monomialIdeal( e25 ); I = monomialIdeal( e26 ); I = monomialIdeal( e27 ); I = monomialIdeal( e28 ); I = monomialIdeal( e29 ); I = monomialIdeal( e3 ); I = monomialIdeal( e30 ); I = monomialIdeal( e31 ); I = monomialIdeal( e32 ); I = monomialIdeal( e33 ); I = monomialIdeal( e34 ); I = monomialIdeal( e35 ); I = monomialIdeal( e36 ); I = monomialIdeal( e37 ); I = monomialIdeal( e38 ); I = monomialIdeal( e39 ); I = monomialIdeal( e4 ); I = monomialIdeal( e40 ); I = monomialIdeal( e41 ); I = monomialIdeal( e42 ); I = monomialIdeal( e43 ); I = monomialIdeal( e44 ); I = monomialIdeal( e45 ); I = monomialIdeal( e46 ); I = monomialIdeal( e47 ); I = monomialIdeal( e48 ); I = monomialIdeal( e49 ); I = monomialIdeal( e5 ); I = monomialIdeal( e50 ); I = monomialIdeal( e51 ); I = monomialIdeal( e52 ); I = monomialIdeal( e53 ); I = monomialIdeal( e54 ); I = monomialIdeal( e55 ); I = monomialIdeal( e56 ); I = monomialIdeal( e57 ); I = monomialIdeal( e58 ); I = monomialIdeal( e59 ); I = monomialIdeal( e6 ); I = monomialIdeal( e60 ); I = monomialIdeal( e61 ); I = monomialIdeal( e62 ); I = monomialIdeal( e63 ); I = monomialIdeal( e64 ); I = monomialIdeal( e65 ); I = monomialIdeal( e66 ); I = monomialIdeal( e67 ); I = monomialIdeal( e68 ); I = monomialIdeal( e69 ); I = monomialIdeal( e7 ); I = monomialIdeal( e70 ); I = monomialIdeal( e71 ); I = monomialIdeal( e72 ); I = monomialIdeal( e73 ); I = monomialIdeal( e74 ); I = monomialIdeal( e75 ); I = monomialIdeal( e76 ); I = monomialIdeal( e77 ); I = monomialIdeal( e78 ); I = monomialIdeal( e79 ); I = monomialIdeal( e8 ); I = monomialIdeal( e80 ); I = monomialIdeal( e81 ); I = monomialIdeal( e82 ); I = monomialIdeal( e83 ); I = monomialIdeal( e84 ); I = monomialIdeal( e85 ); I = monomialIdeal( e86 ); I = monomialIdeal( e87 ); I = monomialIdeal( e88 ); I = monomialIdeal( e89 ); I = monomialIdeal( e9 ); I = monomialIdeal( e90 ); I = monomialIdeal( e91 ); I = monomialIdeal( e92 ); I = monomialIdeal( e93 ); I = monomialIdeal( e94 ); I = monomialIdeal( e95 ); I = monomialIdeal( e96 ); I = monomialIdeal( e97 ); I = monomialIdeal( e98 ); I = monomialIdeal( e99 ); I = monomialIdeal( f^13 ); I = monomialIdeal( f1^103 ); I = monomialIdeal( f10 ); I = monomialIdeal( f100 ); I = monomialIdeal( f11 ); I = monomialIdeal( f12 ); I = monomialIdeal( f13 ); I = monomialIdeal( f14 ); I = monomialIdeal( f15 ); I = monomialIdeal( f16 ); I = monomialIdeal( f17 ); I = monomialIdeal( f18 ); I = monomialIdeal( f19 ); I = monomialIdeal( f2^104 ); I = monomialIdeal( f20 ); I = monomialIdeal( f21 ); I = monomialIdeal( f22 ); I = monomialIdeal( f23 ); I = monomialIdeal( f24 ); I = monomialIdeal( f25 ); I = monomialIdeal( f26 ); I = monomialIdeal( f27 ); I = monomialIdeal( f28 ); I = monomialIdeal( f29 ); I = monomialIdeal( f3^105 ); I = monomialIdeal( f30 ); I = monomialIdeal( f31 ); I = monomialIdeal( f32 ); I = monomialIdeal( f33 ); I = monomialIdeal( f34 ); I = monomialIdeal( f35 ); I = monomialIdeal( f36 ); I = monomialIdeal( f37 ); I = monomialIdeal( f38 ); I = monomialIdeal( f39 ); I = monomialIdeal( f4 ); I = monomialIdeal( f40 ); I = monomialIdeal( f41 ); I = monomialIdeal( f42 ); I = monomialIdeal( f43 ); I = monomialIdeal( f44 ); I = monomialIdeal( f45 ); I = monomialIdeal( f46 ); I = monomialIdeal( f47 ); I = monomialIdeal( f48 ); I = monomialIdeal( f49 ); I = monomialIdeal( f5 ); I = monomialIdeal( f50 ); I = monomialIdeal( f51 ); I = monomialIdeal( f52 ); I = monomialIdeal( f53 ); I = monomialIdeal( f54 ); I = monomialIdeal( f55 ); I = monomialIdeal( f56 ); I = monomialIdeal( f57 ); I = monomialIdeal( f58 ); I = monomialIdeal( f59 ); I = monomialIdeal( f6 ); I = monomialIdeal( f60 ); I = monomialIdeal( f61 ); I = monomialIdeal( f62 ); I = monomialIdeal( f63 ); I = monomialIdeal( f64 ); I = monomialIdeal( f65 ); I = monomialIdeal( f66 ); I = monomialIdeal( f67 ); I = monomialIdeal( f68 ); I = monomialIdeal( f69 ); I = monomialIdeal( f7 ); I = monomialIdeal( f70 ); I = monomialIdeal( f71 ); I = monomialIdeal( f72 ); I = monomialIdeal( f73 ); I = monomialIdeal( f74 ); I = monomialIdeal( f75 ); I = monomialIdeal( f76 ); I = monomialIdeal( f77 ); I = monomialIdeal( f78 ); I = monomialIdeal( f79 ); I = monomialIdeal( f8 ); I = monomialIdeal( f80 ); I = monomialIdeal( f81 ); I = monomialIdeal( f82 ); I = monomialIdeal( f83 ); I = monomialIdeal( f84 ); I = monomialIdeal( f85 ); I = monomialIdeal( f86 ); I = monomialIdeal( f87 ); I = monomialIdeal( f88 ); I = monomialIdeal( f89 ); I = monomialIdeal( f9 ); I = monomialIdeal( f90 ); I = monomialIdeal( f91 ); I = monomialIdeal( f92 ); I = monomialIdeal( f93 ); I = monomialIdeal( f94 ); I = monomialIdeal( f95 ); I = monomialIdeal( f96 ); I = monomialIdeal( f97 ); I = monomialIdeal( f98 ); I = monomialIdeal( f99 ); I = monomialIdeal( g^14 ); I = monomialIdeal( g1 ); I = monomialIdeal( g10 ); I = monomialIdeal( g100 ); I = monomialIdeal( g11 ); I = monomialIdeal( g12 ); I = monomialIdeal( g13 ); I = monomialIdeal( g14 ); I = monomialIdeal( g15 ); I = monomialIdeal( g16 ); I = monomialIdeal( g17 ); I = monomialIdeal( g18 ); I = monomialIdeal( g19 ); I = monomialIdeal( g2 ); I = monomialIdeal( g20 ); I = monomialIdeal( g21 ); I = monomialIdeal( g22 ); I = monomialIdeal( g23 ); I = monomialIdeal( g24 ); I = monomialIdeal( g25 ); I = monomialIdeal( g26 ); I = monomialIdeal( g27 ); I = monomialIdeal( g28 ); I = monomialIdeal( g29 ); I = monomialIdeal( g3 ); I = monomialIdeal( g30 ); I = monomialIdeal( g31 ); I = monomialIdeal( g32 ); I = monomialIdeal( g33 ); I = monomialIdeal( g34 ); I = monomialIdeal( g35 ); I = monomialIdeal( g36 ); I = monomialIdeal( g37 ); I = monomialIdeal( g38 ); I = monomialIdeal( g39 ); I = monomialIdeal( g4 ); I = monomialIdeal( g40 ); I = monomialIdeal( g41 ); I = monomialIdeal( g42 ); I = monomialIdeal( g43 ); I = monomialIdeal( g44 ); I = monomialIdeal( g45 ); I = monomialIdeal( g46 ); I = monomialIdeal( g47 ); I = monomialIdeal( g48 ); I = monomialIdeal( g49 ); I = monomialIdeal( g5 ); I = monomialIdeal( g50 ); I = monomialIdeal( g51 ); I = monomialIdeal( g52 ); I = monomialIdeal( g53 ); I = monomialIdeal( g54 ); I = monomialIdeal( g55 ); I = monomialIdeal( g56 ); I = monomialIdeal( g57 ); I = monomialIdeal( g58 ); I = monomialIdeal( g59 ); I = monomialIdeal( g6 ); I = monomialIdeal( g60 ); I = monomialIdeal( g61 ); I = monomialIdeal( g62 ); I = monomialIdeal( g63 ); I = monomialIdeal( g64 ); I = monomialIdeal( g65 ); I = monomialIdeal( g66 ); I = monomialIdeal( g67 ); I = monomialIdeal( g68 ); I = monomialIdeal( g69 ); I = monomialIdeal( g7 ); I = monomialIdeal( g70 ); I = monomialIdeal( g71 ); I = monomialIdeal( g72 ); I = monomialIdeal( g73 ); I = monomialIdeal( g74 ); I = monomialIdeal( g75 ); I = monomialIdeal( g76 ); I = monomialIdeal( g77 ); I = monomialIdeal( g78 ); I = monomialIdeal( g79 ); I = monomialIdeal( g8 ); I = monomialIdeal( g80 ); I = monomialIdeal( g81 ); I = monomialIdeal( g82 ); I = monomialIdeal( g83 ); I = monomialIdeal( g84 ); I = monomialIdeal( g85 ); I = monomialIdeal( g86 ); I = monomialIdeal( g87 ); I = monomialIdeal( g88 ); I = monomialIdeal( g89 ); I = monomialIdeal( g9 ); I = monomialIdeal( g90 ); I = monomialIdeal( g91 ); I = monomialIdeal( g92 ); I = monomialIdeal( g93 ); I = monomialIdeal( g94 ); I = monomialIdeal( g95 ); I = monomialIdeal( g96 ); I = monomialIdeal( g97 ); I = monomialIdeal( g98 ); I = monomialIdeal( g99 ); I = monomialIdeal( h^15 ); I = monomialIdeal( h1 ); I = monomialIdeal( h10 ); I = monomialIdeal( h100 ); I = monomialIdeal( h11 ); I = monomialIdeal( h12 ); I = monomialIdeal( h13 ); I = monomialIdeal( h14 ); I = monomialIdeal( h15 ); I = monomialIdeal( h16 ); I = monomialIdeal( h17 ); I = monomialIdeal( h18 ); I = monomialIdeal( h19 ); I = monomialIdeal( h2 ); I = monomialIdeal( h20 ); I = monomialIdeal( h21 ); I = monomialIdeal( h22 ); I = monomialIdeal( h23 ); I = monomialIdeal( h24 ); I = monomialIdeal( h25 ); I = monomialIdeal( h26 ); I = monomialIdeal( h27 ); I = monomialIdeal( h28 ); I = monomialIdeal( h29 ); I = monomialIdeal( h3 ); I = monomialIdeal( h30 ); I = monomialIdeal( h31 ); I = monomialIdeal( h32 ); I = monomialIdeal( h33 ); I = monomialIdeal( h34 ); I = monomialIdeal( h35 ); I = monomialIdeal( h36 ); I = monomialIdeal( h37 ); I = monomialIdeal( h38 ); I = monomialIdeal( h39 ); I = monomialIdeal( h4 ); I = monomialIdeal( h40 ); I = monomialIdeal( h41 ); I = monomialIdeal( h42 ); I = monomialIdeal( h43 ); I = monomialIdeal( h44 ); I = monomialIdeal( h45 ); I = monomialIdeal( h46 ); I = monomialIdeal( h47 ); I = monomialIdeal( h48 ); I = monomialIdeal( h49 ); I = monomialIdeal( h5 ); I = monomialIdeal( h50 ); I = monomialIdeal( h51 ); I = monomialIdeal( h52 ); I = monomialIdeal( h53 ); I = monomialIdeal( h54 ); I = monomialIdeal( h55 ); I = monomialIdeal( h56 ); I = monomialIdeal( h57 ); I = monomialIdeal( h58 ); I = monomialIdeal( h59 ); I = monomialIdeal( h6 ); I = monomialIdeal( h60 ); I = monomialIdeal( h61 ); I = monomialIdeal( h62 ); I = monomialIdeal( h63 ); I = monomialIdeal( h64 ); I = monomialIdeal( h65 ); I = monomialIdeal( h66 ); I = monomialIdeal( h67 ); I = monomialIdeal( h68 ); I = monomialIdeal( h69 ); I = monomialIdeal( h7 ); I = monomialIdeal( h70 ); I = monomialIdeal( h71 ); I = monomialIdeal( h72 ); I = monomialIdeal( h73 ); I = monomialIdeal( h74 ); I = monomialIdeal( h75 ); I = monomialIdeal( h76 ); I = monomialIdeal( h77 ); I = monomialIdeal( h78 ); I = monomialIdeal( h79 ); I = monomialIdeal( h8 ); I = monomialIdeal( h80 ); I = monomialIdeal( h81 ); I = monomialIdeal( h82 ); I = monomialIdeal( h83 ); I = monomialIdeal( h84 ); I = monomialIdeal( h85 ); I = monomialIdeal( h86 ); I = monomialIdeal( h87 ); I = monomialIdeal( h88 ); I = monomialIdeal( h89 ); I = monomialIdeal( h9 ); I = monomialIdeal( h90 ); I = monomialIdeal( h91 ); I = monomialIdeal( h92 ); I = monomialIdeal( h93 ); I = monomialIdeal( h94 ); I = monomialIdeal( h95 ); I = monomialIdeal( h96 ); I = monomialIdeal( h97 ); I = monomialIdeal( h98 ); I = monomialIdeal( h99 ); I = monomialIdeal( i^7 ); I = monomialIdeal( i1 ); I = monomialIdeal( i10 ); I = monomialIdeal( i100 ); I = monomialIdeal( i11 ); I = monomialIdeal( i12 ); I = monomialIdeal( i13 ); I = monomialIdeal( i14 ); I = monomialIdeal( i15 ); I = monomialIdeal( i16 ); I = monomialIdeal( i17 ); I = monomialIdeal( i18 ); I = monomialIdeal( i19 ); I = monomialIdeal( i2 ); I = monomialIdeal( i20 ); I = monomialIdeal( i21 ); I = monomialIdeal( i22 ); I = monomialIdeal( i23 ); I = monomialIdeal( i24 ); I = monomialIdeal( i25 ); I = monomialIdeal( i26 ); I = monomialIdeal( i27 ); I = monomialIdeal( i28 ); I = monomialIdeal( i29 ); I = monomialIdeal( i3 ); I = monomialIdeal( i30 ); I = monomialIdeal( i31 ); I = monomialIdeal( i32 ); I = monomialIdeal( i33 ); I = monomialIdeal( i34 ); I = monomialIdeal( i35 ); I = monomialIdeal( i36 ); I = monomialIdeal( i37 ); I = monomialIdeal( i38 ); I = monomialIdeal( i39 ); I = monomialIdeal( i4 ); I = monomialIdeal( i40 ); I = monomialIdeal( i41 ); I = monomialIdeal( i42 ); I = monomialIdeal( i43 ); I = monomialIdeal( i44 ); I = monomialIdeal( i45 ); I = monomialIdeal( i46 ); I = monomialIdeal( i47 ); I = monomialIdeal( i48 ); I = monomialIdeal( i49 ); I = monomialIdeal( i5 ); I = monomialIdeal( i50 ); I = monomialIdeal( i51 ); I = monomialIdeal( i52 ); I = monomialIdeal( i53 ); I = monomialIdeal( i54 ); I = monomialIdeal( i55 ); I = monomialIdeal( i56 ); I = monomialIdeal( i57 ); I = monomialIdeal( i58 ); I = monomialIdeal( i59 ); I = monomialIdeal( i6 ); I = monomialIdeal( i60 ); I = monomialIdeal( i61 ); I = monomialIdeal( i62 ); I = monomialIdeal( i63 ); I = monomialIdeal( i64 ); I = monomialIdeal( i65 ); I = monomialIdeal( i66 ); I = monomialIdeal( i67 ); I = monomialIdeal( i68 ); I = monomialIdeal( i69 ); I = monomialIdeal( i7 ); I = monomialIdeal( i70 ); I = monomialIdeal( i71 ); I = monomialIdeal( i72 ); I = monomialIdeal( i73 ); I = monomialIdeal( i74 ); I = monomialIdeal( i75 ); I = monomialIdeal( i76 ); I = monomialIdeal( i77 ); I = monomialIdeal( i78 ); I = monomialIdeal( i79 ); I = monomialIdeal( i8 ); I = monomialIdeal( i80 ); I = monomialIdeal( i81 ); I = monomialIdeal( i82 ); I = monomialIdeal( i83 ); I = monomialIdeal( i84 ); I = monomialIdeal( i85 ); I = monomialIdeal( i86 ); I = monomialIdeal( i87 ); I = monomialIdeal( i88 ); I = monomialIdeal( i89 ); I = monomialIdeal( i9 ); I = monomialIdeal( i90 ); I = monomialIdeal( i91 ); I = monomialIdeal( i92 ); I = monomialIdeal( i93 ); I = monomialIdeal( i94 ); I = monomialIdeal( i95 ); I = monomialIdeal( i96 ); I = monomialIdeal( i97 ); I = monomialIdeal( i98 ); I = monomialIdeal( i99 ); I = monomialIdeal( j^16 ); I = monomialIdeal( j1 ); I = monomialIdeal( j10 ); I = monomialIdeal( j100 ); I = monomialIdeal( j11 ); I = monomialIdeal( j12 ); I = monomialIdeal( j13 ); I = monomialIdeal( j14 ); I = monomialIdeal( j15 ); I = monomialIdeal( j16 ); I = monomialIdeal( j17 ); I = monomialIdeal( j18 ); I = monomialIdeal( j19 ); I = monomialIdeal( j2 ); I = monomialIdeal( j20 ); I = monomialIdeal( j21 ); I = monomialIdeal( j22 ); I = monomialIdeal( j23 ); I = monomialIdeal( j24 ); I = monomialIdeal( j25 ); I = monomialIdeal( j26 ); I = monomialIdeal( j27 ); I = monomialIdeal( j28 ); I = monomialIdeal( j29 ); I = monomialIdeal( j3 ); I = monomialIdeal( j30 ); I = monomialIdeal( j31 ); I = monomialIdeal( j32 ); I = monomialIdeal( j33 ); I = monomialIdeal( j34 ); I = monomialIdeal( j35 ); I = monomialIdeal( j36 ); I = monomialIdeal( j37 ); I = monomialIdeal( j38 ); I = monomialIdeal( j39 ); I = monomialIdeal( j4 ); I = monomialIdeal( j40 ); I = monomialIdeal( j41 ); I = monomialIdeal( j42 ); I = monomialIdeal( j43 ); I = monomialIdeal( j44 ); I = monomialIdeal( j45 ); I = monomialIdeal( j46 ); I = monomialIdeal( j47 ); I = monomialIdeal( j48 ); I = monomialIdeal( j49 ); I = monomialIdeal( j5 ); I = monomialIdeal( j50 ); I = monomialIdeal( j51 ); I = monomialIdeal( j52 ); I = monomialIdeal( j53 ); I = monomialIdeal( j54 ); I = monomialIdeal( j55 ); I = monomialIdeal( j56 ); I = monomialIdeal( j57 ); I = monomialIdeal( j58 ); I = monomialIdeal( j59 ); I = monomialIdeal( j6 ); I = monomialIdeal( j60 ); I = monomialIdeal( j61 ); I = monomialIdeal( j62 ); I = monomialIdeal( j63 ); I = monomialIdeal( j64 ); I = monomialIdeal( j65 ); I = monomialIdeal( j66 ); I = monomialIdeal( j67 ); I = monomialIdeal( j68 ); I = monomialIdeal( j69 ); I = monomialIdeal( j7 ); I = monomialIdeal( j70 ); I = monomialIdeal( j71 ); I = monomialIdeal( j72 ); I = monomialIdeal( j73 ); I = monomialIdeal( j74 ); I = monomialIdeal( j75 ); I = monomialIdeal( j76 ); I = monomialIdeal( j77 ); I = monomialIdeal( j78 ); I = monomialIdeal( j79 ); I = monomialIdeal( j8 ); I = monomialIdeal( j80 ); I = monomialIdeal( j81 ); I = monomialIdeal( j82 ); I = monomialIdeal( j83 ); I = monomialIdeal( j84 ); I = monomialIdeal( j85 ); I = monomialIdeal( j86 ); I = monomialIdeal( j87 ); I = monomialIdeal( j88 ); I = monomialIdeal( j89 ); I = monomialIdeal( j9 ); I = monomialIdeal( j90 ); I = monomialIdeal( j91 ); I = monomialIdeal( j92 ); I = monomialIdeal( j93 ); I = monomialIdeal( j94 ); I = monomialIdeal( j95 ); I = monomialIdeal( j96 ); I = monomialIdeal( j97 ); I = monomialIdeal( j98 ); I = monomialIdeal( j99 ); I = monomialIdeal( k^17 ); I = monomialIdeal( k1 ); I = monomialIdeal( k10 ); I = monomialIdeal( k100^12345678901234567890 ); I = monomialIdeal( k11 ); I = monomialIdeal( k12 ); I = monomialIdeal( k13 ); I = monomialIdeal( k14 ); I = monomialIdeal( k15 ); I = monomialIdeal( k16 ); I = monomialIdeal( k17 ); I = monomialIdeal( k18 ); I = monomialIdeal( k19 ); I = monomialIdeal( k2 ); I = monomialIdeal( k20 ); I = monomialIdeal( k21 ); I = monomialIdeal( k22 ); I = monomialIdeal( k23 ); I = monomialIdeal( k24 ); I = monomialIdeal( k25 ); I = monomialIdeal( k26 ); I = monomialIdeal( k27 ); I = monomialIdeal( k28 ); I = monomialIdeal( k29 ); I = monomialIdeal( k3 ); I = monomialIdeal( k30 ); I = monomialIdeal( k31 ); I = monomialIdeal( k32 ); I = monomialIdeal( k33 ); I = monomialIdeal( k34 ); I = monomialIdeal( k35 ); I = monomialIdeal( k36 ); I = monomialIdeal( k37 ); I = monomialIdeal( k38 ); I = monomialIdeal( k39 ); I = monomialIdeal( k4 ); I = monomialIdeal( k40 ); I = monomialIdeal( k41 ); I = monomialIdeal( k42 ); I = monomialIdeal( k43 ); I = monomialIdeal( k44 ); I = monomialIdeal( k45 ); I = monomialIdeal( k46 ); I = monomialIdeal( k47 ); I = monomialIdeal( k48 ); I = monomialIdeal( k49 ); I = monomialIdeal( k5 ); I = monomialIdeal( k50 ); I = monomialIdeal( k51 ); I = monomialIdeal( k52 ); I = monomialIdeal( k53 ); I = monomialIdeal( k54 ); I = monomialIdeal( k55 ); I = monomialIdeal( k56 ); I = monomialIdeal( k57 ); I = monomialIdeal( k58 ); I = monomialIdeal( k59 ); I = monomialIdeal( k6 ); I = monomialIdeal( k60 ); I = monomialIdeal( k61 ); I = monomialIdeal( k62 ); I = monomialIdeal( k63 ); I = monomialIdeal( k64 ); I = monomialIdeal( k65 ); I = monomialIdeal( k66 ); I = monomialIdeal( k67 ); I = monomialIdeal( k68 ); I = monomialIdeal( k69 ); I = monomialIdeal( k7 ); I = monomialIdeal( k70 ); I = monomialIdeal( k71 ); I = monomialIdeal( k72 ); I = monomialIdeal( k73 ); I = monomialIdeal( k74 ); I = monomialIdeal( k75 ); I = monomialIdeal( k76 ); I = monomialIdeal( k77 ); I = monomialIdeal( k78 ); I = monomialIdeal( k79 ); I = monomialIdeal( k8 ); I = monomialIdeal( k80 ); I = monomialIdeal( k81 ); I = monomialIdeal( k82 ); I = monomialIdeal( k83 ); I = monomialIdeal( k84 ); I = monomialIdeal( k85 ); I = monomialIdeal( k86 ); I = monomialIdeal( k87 ); I = monomialIdeal( k88 ); I = monomialIdeal( k89 ); I = monomialIdeal( k9 ); I = monomialIdeal( k90 ); I = monomialIdeal( k91 ); I = monomialIdeal( k92 ); I = monomialIdeal( k93 ); I = monomialIdeal( k94 ); I = monomialIdeal( k95 ); I = monomialIdeal( k96 ); I = monomialIdeal( k97^3 ); I = monomialIdeal( k98^4 ); I = monomialIdeal( k99^5 ); I = monomialIdeal( l^18 ); I = monomialIdeal( m^25 ); I = monomialIdeal( n^24 ); I = monomialIdeal( o^8 ); I = monomialIdeal( p^9 ); I = monomialIdeal( q ); I = monomialIdeal( r^3 ); I = monomialIdeal( s^11 ); I = monomialIdeal( t^4 ); I = monomialIdeal( u^6 ); I = monomialIdeal( v^22 ); I = monomialIdeal( w ); I = monomialIdeal( x^20 ); I = monomialIdeal( y^5 ); I = monomialIdeal( z^19 ); frobby-0.9.5/test/bigIdeals/e7.radical000066400000000000000000000234601401527164200175150ustar00rootroot00000000000000R = QQ[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, a1, a10, a100, a11, a12, a13, a14, a15, a16, a17, a18, a19, a2, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a3, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a4, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a5, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a6, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a7, a70, a71, a72, a73, a74, a75, a76, a77, a78, a79, a8, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a9, a90, a91, a92, a93, a94, a95, a96, a97, a98, a99, aa00bob, b, b1, b10, b100, b11, b12, b13, b14, b15, b16, b17, b18, b19, b2, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b3, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b4, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b5, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b6, b60, b61, b62, b63, b64, b65, b66, b67, b68, b69, b7, b70, b71, b72, b73, b74, b75, b76, b77, b78, b79, b8, b80, b81, b82, b83, b84, b85, b86, b87, b88, b89, b9, b90, b91, b92, b93, b94, b95, b96, b97, b98, b99, c, c1, c10, c100, c11, c12, c13, c14, c15, c16, c17, c18, c19, c2, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c3, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c4, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c5, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c6, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c7, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c8, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c9, c90, c91, c92, c93, c94, c95, c96, c97, c98, c99, d, d1, d10, d100, d11, d12, d13, d14, d15, d16, d17, d18, d19, d2, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d3, d30, d31, d32, d33, d34, d35, d36, d37, d38, d39, d4, d40, d41, d42, d43, d44, d45, d46, d47, d48, d49, d5, d50, d51, d52, d53, d54, d55, d56, d57, d58, d59, d6, d60, d61, d62, d63, d64, d65, d66, d67, d68, d69, d7, d70, d71, d72, d73, d74, d75, d76, d77, d78, d79, d8, d80, d81, d82, d83, d84, d85, d86, d87, d88, d89, d9, d90, d91, d92, d93, d94, d95, d96, d97, d98, d99, e, e1, e10, e100, e11, e12, e13, e14, e15, e16, e17, e18, e19, e2, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e3, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e4, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e5, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e6, e60, e61, e62, e63, e64, e65, e66, e67, e68, e69, e7, e70, e71, e72, e73, e74, e75, e76, e77, e78, e79, e8, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e9, e90, e91, e92, e93, e94, e95, e96, e97, e98, e99, f, f1, f10, f100, f11, f12, f13, f14, f15, f16, f17, f18, f19, f2, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f3, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f4, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f5, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f6, f60, f61, f62, f63, f64, f65, f66, f67, f68, f69, f7, f70, f71, f72, f73, f74, f75, f76, f77, f78, f79, f8, f80, f81, f82, f83, f84, f85, f86, f87, f88, f89, f9, f90, f91, f92, f93, f94, f95, f96, f97, f98, f99, g, g1, g10, g100, g11, g12, g13, g14, g15, g16, g17, g18, g19, g2, g20, g21, g22, g23, g24, g25, g26, g27, g28, g29, g3, g30, g31, g32, g33, g34, g35, g36, g37, g38, g39, g4, g40, g41, g42, g43, g44, g45, g46, g47, g48, g49, g5, g50, g51, g52, g53, g54, g55, g56, g57, g58, g59, g6, g60, g61, g62, g63, g64, g65, g66, g67, g68, g69, g7, g70, g71, g72, g73, g74, g75, g76, g77, g78, g79, g8, g80, g81, g82, g83, g84, g85, g86, g87, g88, g89, g9, g90, g91, g92, g93, g94, g95, g96, g97, g98, g99, h, h1, h10, h100, h11, h12, h13, h14, h15, h16, h17, h18, h19, h2, h20, h21, h22, h23, h24, h25, h26, h27, h28, h29, h3, h30, h31, h32, h33, h34, h35, h36, h37, h38, h39, h4, h40, h41, h42, h43, h44, h45, h46, h47, h48, h49, h5, h50, h51, h52, h53, h54, h55, h56, h57, h58, h59, h6, h60, h61, h62, h63, h64, h65, h66, h67, h68, h69, h7, h70, h71, h72, h73, h74, h75, h76, h77, h78, h79, h8, h80, h81, h82, h83, h84, h85, h86, h87, h88, h89, h9, h90, h91, h92, h93, h94, h95, h96, h97, h98, h99, i, i1, i10, i100, i11, i12, i13, i14, i15, i16, i17, i18, i19, i2, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i3, i30, i31, i32, i33, i34, i35, i36, i37, i38, i39, i4, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i5, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i6, i60, i61, i62, i63, i64, i65, i66, i67, i68, i69, i7, i70, i71, i72, i73, i74, i75, i76, i77, i78, i79, i8, i80, i81, i82, i83, i84, i85, i86, i87, i88, i89, i9, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99, j, j1, j10, j100, j11, j12, j13, j14, j15, j16, j17, j18, j19, j2, j20, j21, j22, j23, j24, j25, j26, j27, j28, j29, j3, j30, j31, j32, j33, j34, j35, j36, j37, j38, j39, j4, j40, j41, j42, j43, j44, j45, j46, j47, j48, j49, j5, j50, j51, j52, j53, j54, j55, j56, j57, j58, j59, j6, j60, j61, j62, j63, j64, j65, j66, j67, j68, j69, j7, j70, j71, j72, j73, j74, j75, j76, j77, j78, j79, j8, j80, j81, j82, j83, j84, j85, j86, j87, j88, j89, j9, j90, j91, j92, j93, j94, j95, j96, j97, j98, j99, k, k1, k10, k100, k11, k12, k13, k14, k15, k16, k17, k18, k19, k2, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k3, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k4, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k5, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k6, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k7, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k8, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k9, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]; I = monomialIdeal( A*B*C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X*Y*Z*a*a1*a10*a100*a11*a12*a13*a14*a15*a16*a17*a18*a19*a2*a20*a21*a22*a23*a24*a25*a26*a27*a28*a29*a3*a30*a31*a32*a33*a34*a35*a36*a37*a38*a39*a4*a40*a41*a42*a43*a44*a45*a46*a47*a48*a49*a5*a50*a51*a52*a53*a54*a55*a56*a57*a58*a59*a6*a60*a61*a62*a63*a64*a65*a66*a67*a68*a69*a7*a70*a71*a72*a73*a74*a75*a76*a77*a78*a79*a8*a80*a81*a82*a83*a84*a85*a86*a87*a88*a89*a9*a90*a91*a92*a93*a94*a95*a96*a97*a98*a99*aa00bob*b*b1*b10*b100*b11*b12*b13*b14*b15*b16*b17*b18*b19*b2*b20*b21*b22*b23*b24*b25*b26*b27*b28*b29*b3*b30*b31*b32*b33*b34*b35*b36*b37*b38*b39*b4*b40*b41*b42*b43*b44*b45*b46*b47*b48*b49*b5*b50*b51*b52*b53*b54*b55*b56*b57*b58*b59*b6*b60*b61*b62*b63*b64*b65*b66*b67*b68*b69*b7*b70*b71*b72*b73*b74*b75*b76*b77*b78*b79*b8*b80*b81*b82*b83*b84*b85*b86*b87*b88*b89*b9*b90*b91*b92*b93*b94*b95*b96*b97*b98*b99*c*c1*c10*c100*c11*c12*c13*c14*c15*c16*c17*c18*c19*c2*c20*c21*c22*c23*c24*c25*c26*c27*c28*c29*c3*c30*c31*c32*c33*c34*c35*c36*c37*c38*c39*c4*c40*c41*c42*c43*c44*c45*c46*c47*c48*c49*c5*c50*c51*c52*c53*c54*c55*c56*c57*c58*c59*c6*c60*c61*c62*c63*c64*c65*c66*c67*c68*c69*c7*c70*c71*c72*c73*c74*c75*c76*c77*c78*c79*c8*c80*c81*c82*c83*c84*c85*c86*c87*c88*c89*c9*c90*c91*c92*c93*c94*c95*c96*c97*c98*c99*d*d1*d10*d100*d11*d12*d13*d14*d15*d16*d17*d18*d19*d2*d20*d21*d22*d23*d24*d25*d26*d27*d28*d29*d3*d30*d31*d32*d33*d34*d35*d36*d37*d38*d39*d4*d40*d41*d42*d43*d44*d45*d46*d47*d48*d49*d5*d50*d51*d52*d53*d54*d55*d56*d57*d58*d59*d6*d60*d61*d62*d63*d64*d65*d66*d67*d68*d69*d7*d70*d71*d72*d73*d74*d75*d76*d77*d78*d79*d8*d80*d81*d82*d83*d84*d85*d86*d87*d88*d89*d9*d90*d91*d92*d93*d94*d95*d96*d97*d98*d99*e*e1*e10*e100*e11*e12*e13*e14*e15*e16*e17*e18*e19*e2*e20*e21*e22*e23*e24*e25*e26*e27*e28*e29*e3*e30*e31*e32*e33*e34*e35*e36*e37*e38*e39*e4*e40*e41*e42*e43*e44*e45*e46*e47*e48*e49*e5*e50*e51*e52*e53*e54*e55*e56*e57*e58*e59*e6*e60*e61*e62*e63*e64*e65*e66*e67*e68*e69*e7*e70*e71*e72*e73*e74*e75*e76*e77*e78*e79*e8*e80*e81*e82*e83*e84*e85*e86*e87*e88*e89*e9*e90*e91*e92*e93*e94*e95*e96*e97*e98*e99*f*f1*f10*f100*f11*f12*f13*f14*f15*f16*f17*f18*f19*f2*f20*f21*f22*f23*f24*f25*f26*f27*f28*f29*f3*f30*f31*f32*f33*f34*f35*f36*f37*f38*f39*f4*f40*f41*f42*f43*f44*f45*f46*f47*f48*f49*f5*f50*f51*f52*f53*f54*f55*f56*f57*f58*f59*f6*f60*f61*f62*f63*f64*f65*f66*f67*f68*f69*f7*f70*f71*f72*f73*f74*f75*f76*f77*f78*f79*f8*f80*f81*f82*f83*f84*f85*f86*f87*f88*f89*f9*f90*f91*f92*f93*f94*f95*f96*f97*f98*f99*g*g1*g10*g100*g11*g12*g13*g14*g15*g16*g17*g18*g19*g2*g20*g21*g22*g23*g24*g25*g26*g27*g28*g29*g3*g30*g31*g32*g33*g34*g35*g36*g37*g38*g39*g4*g40*g41*g42*g43*g44*g45*g46*g47*g48*g49*g5*g50*g51*g52*g53*g54*g55*g56*g57*g58*g59*g6*g60*g61*g62*g63*g64*g65*g66*g67*g68*g69*g7*g70*g71*g72*g73*g74*g75*g76*g77*g78*g79*g8*g80*g81*g82*g83*g84*g85*g86*g87*g88*g89*g9*g90*g91*g92*g93*g94*g95*g96*g97*g98*g99*h*h1*h10*h100*h11*h12*h13*h14*h15*h16*h17*h18*h19*h2*h20*h21*h22*h23*h24*h25*h26*h27*h28*h29*h3*h30*h31*h32*h33*h34*h35*h36*h37*h38*h39*h4*h40*h41*h42*h43*h44*h45*h46*h47*h48*h49*h5*h50*h51*h52*h53*h54*h55*h56*h57*h58*h59*h6*h60*h61*h62*h63*h64*h65*h66*h67*h68*h69*h7*h70*h71*h72*h73*h74*h75*h76*h77*h78*h79*h8*h80*h81*h82*h83*h84*h85*h86*h87*h88*h89*h9*h90*h91*h92*h93*h94*h95*h96*h97*h98*h99*i*i1*i10*i100*i11*i12*i13*i14*i15*i16*i17*i18*i19*i2*i20*i21*i22*i23*i24*i25*i26*i27*i28*i29*i3*i30*i31*i32*i33*i34*i35*i36*i37*i38*i39*i4*i40*i41*i42*i43*i44*i45*i46*i47*i48*i49*i5*i50*i51*i52*i53*i54*i55*i56*i57*i58*i59*i6*i60*i61*i62*i63*i64*i65*i66*i67*i68*i69*i7*i70*i71*i72*i73*i74*i75*i76*i77*i78*i79*i8*i80*i81*i82*i83*i84*i85*i86*i87*i88*i89*i9*i90*i91*i92*i93*i94*i95*i96*i97*i98*i99*j*j1*j10*j100*j11*j12*j13*j14*j15*j16*j17*j18*j19*j2*j20*j21*j22*j23*j24*j25*j26*j27*j28*j29*j3*j30*j31*j32*j33*j34*j35*j36*j37*j38*j39*j4*j40*j41*j42*j43*j44*j45*j46*j47*j48*j49*j5*j50*j51*j52*j53*j54*j55*j56*j57*j58*j59*j6*j60*j61*j62*j63*j64*j65*j66*j67*j68*j69*j7*j70*j71*j72*j73*j74*j75*j76*j77*j78*j79*j8*j80*j81*j82*j83*j84*j85*j86*j87*j88*j89*j9*j90*j91*j92*j93*j94*j95*j96*j97*j98*j99*k*k1*k10*k100*k11*k12*k13*k14*k15*k16*k17*k18*k19*k2*k20*k21*k22*k23*k24*k25*k26*k27*k28*k29*k3*k30*k31*k32*k33*k34*k35*k36*k37*k38*k39*k4*k40*k41*k42*k43*k44*k45*k46*k47*k48*k49*k5*k50*k51*k52*k53*k54*k55*k56*k57*k58*k59*k6*k60*k61*k62*k63*k64*k65*k66*k67*k68*k69*k7*k70*k71*k72*k73*k74*k75*k76*k77*k78*k79*k8*k80*k81*k82*k83*k84*k85*k86*k87*k88*k89*k9*k90*k91*k92*k93*k94*k95*k96*k97*k98*k99*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z ); frobby-0.9.5/test/bigIdeals/e7.uni000066400000000000000000000000001401527164200166720ustar00rootroot00000000000000frobby-0.9.5/test/bigIdeals/k4.dim000066400000000000000000000000031401527164200166560ustar00rootroot0000000000000011 frobby-0.9.5/test/bigIdeals/k4.euler000066400000000000000000000000021401527164200172200ustar00rootroot000000000000000 frobby-0.9.5/test/bigIdeals/k4.irrdecom000066400000000000000000000056671401527164200177360ustar00rootroot00000000000000vars x1, x10, x11, x12, x13, x14, x15, x16, x2, x3, x4, x5, x6, x7, x8, x9; [ x10^2*x11^2*x13*x14*x15*x16^2*x2*x3*x4^2*x5^2*x6*x7*x9, x10^2*x11*x15*x16^2*x2*x3^2*x4*x5*x6^2*x7*x9, x10^2*x15^2*x16*x2*x3^2*x4*x5^2*x6*x9, x10*x11*x12*x13*x14*x15*x16^2*x2^2*x3^2*x4*x5^2*x6*x7*x8*x9^2, x10*x11*x12*x13*x14*x15*x16^2*x2*x3*x4^2*x5*x6^2*x7^2*x9^2, x10*x11*x13*x2*x9, x10*x11*x13*x3*x9, x10*x11*x13*x5*x9, x10*x11*x13*x8*x9, x10*x11*x14^2*x15^2*x16*x2*x3*x4^2*x5^2*x6*x7*x9^2, x10*x11*x16*x2*x9, x10*x11*x16*x3*x9, x10*x11*x16*x8*x9, x10*x11*x2*x6*x9, x10*x11*x2*x7*x9, x10*x11*x3*x6*x9, x10*x11*x3*x7*x9, x10*x12*x16*x4*x5, x10*x12*x16*x5*x9, x10*x13*x16*x5*x9, x10*x13*x2*x4*x9, x10*x13*x4*x5*x9, x10*x13*x5*x7*x9, x10*x14*x16*x2*x9, x10*x14*x16*x3*x6, x10*x14*x16*x3*x9, x10*x14*x16*x8*x9, x10*x14*x2*x7*x9, x10*x15^2*x16*x2*x3^2*x4*x5*x6^2*x7*x9^2, x10*x15*x2*x4*x6, x10*x15*x3*x5*x7, x10*x16^2*x2^2*x3*x4*x5*x6*x9, x10*x16*x2^2*x3^2*x5*x9, x10*x16*x2*x4*x9, x10*x16*x2*x5*x9, x10*x16*x4*x8*x9, x10*x16*x5*x8*x9, x10*x2*x3*x4*x6, x10*x2*x3*x4*x7, x10*x2*x4*x5*x6, x10*x2*x4*x6*x9, x10*x2*x4*x7*x9, x10*x2*x5*x6*x7, x10*x2*x5*x7*x9, x10*x3*x4*x5*x7, x10*x3*x5*x6*x7, x10*x3*x5*x7*x9, x11*x13*x3*x4*x9, x11*x13*x5*x6*x9, x11*x14*x2*x5*x6, x11*x14*x3*x4*x7, x11*x15*x16*x2*x7, x11*x15*x16*x2*x9, x11*x15*x16*x3*x9, x11*x15*x16*x8*x9, x11*x15*x3*x6*x9, x11*x16*x3*x4*x9, x11*x16*x3*x5*x9, x11*x2*x3*x4*x6, x11*x2*x3*x4*x7, x11*x2*x4*x5*x6, x11*x2*x5*x6*x7, x11*x2*x5*x6*x9, x11*x3*x4*x5*x7, x11*x3*x4*x6*x9, x11*x3*x4*x7*x9, x11*x3*x5*x6*x7, x11*x3*x5*x6*x9, x12*x13*x2*x3*x4, x12*x13*x5*x6*x7, x12*x14*x15*x16*x2, x12*x14*x15*x16*x3, x12*x14*x15*x16*x5, x12*x14*x15*x16*x8, x12*x14*x16*x3*x4, x12*x14*x16*x5*x6, x12*x15*x16*x2*x4, x12*x15*x16*x4*x5, x12*x15*x16*x5*x7, x12*x15*x16*x5*x9, x12*x16*x2*x3*x4, x12*x16*x3*x4*x5, x12*x16*x3*x5*x9, x12*x16*x4*x5*x6, x12*x16*x5*x6*x7, x12*x16*x5*x6*x9, x13*x15*x16*x5*x9, x13*x15*x4*x5*x9, x13*x16*x3*x5*x9, x13*x16*x5*x6*x9, x13*x2*x3*x4*x6, x13*x2*x3*x4*x7, x13*x2*x3*x4*x9, x13*x2*x4*x5*x6, x13*x2*x5*x6*x7, x13*x3*x4*x5*x7, x13*x3*x4*x5*x9, x13*x3*x5*x6*x7, x13*x4*x5*x6*x9, x13*x5*x6*x7*x9, x14*x15*x16*x2*x6, x14*x15*x16*x2*x7, x14*x15*x16*x2*x9, x14*x15*x16*x3*x6, x14*x15*x16*x3*x7, x14*x15*x16*x3*x9, x14*x15*x16*x8*x9, x14*x16*x2*x5*x6, x14*x16*x3*x4*x6, x14*x16*x3*x4*x7, x14*x16*x3*x4*x9, x14*x16*x3*x5*x6, x14*x16*x3*x5*x9, x15*x16*x2^2*x3^2*x5*x9, x15*x16*x2*x4*x6, x15*x16*x2*x4*x7, x15*x16*x2*x4*x9, x15*x16*x2*x5*x7, x15*x16*x2*x5*x9, x15*x16*x3*x5*x7, x15*x16*x4*x8*x9, x15*x16*x5*x8*x9, x16*x2^3*x3*x5*x9, x16*x2^2*x3^2*x5*x6*x9, x16*x2^2*x3*x4*x5^2*x9, x16*x2^2*x3*x4*x5*x6*x9^2, x16*x2*x3*x4*x6, x16*x2*x3*x4*x7, x16*x2*x3*x4*x9, x16*x2*x4*x5*x6, x16*x2*x5*x6*x7, x16*x2*x5*x6*x9, x16*x3*x4*x5*x7, x16*x3*x4*x8*x9, x16*x3*x5*x6*x7, x16*x3*x5*x7*x9, x16*x3*x5*x8*x9, x16*x4*x6*x8*x9, x16*x5*x6*x8*x9 ]; frobby-0.9.5/test/bigIdeals/k4.opt_irr000066400000000000000000000002231401527164200175670ustar00rootroot00000000000000vars x1, x10, x11, x12, x13, x14, x15, x16, x2, x3, x4, x5, x6, x7, x8, x9; [ x10*x11*x12*x13*x14*x15*x16^2*x2^2*x3^2*x4*x5^2*x6*x7*x8*x9^2 ]; 20 frobby-0.9.5/test/bigIdeals/k4.opt_irr_min000066400000000000000000000046261401527164200204450ustar00rootroot00000000000000vars x1, x10, x11, x12, x13, x14, x15, x16, x2, x3, x4, x5, x6, x7, x8, x9; [ x10*x11*x13*x2*x9, x10*x11*x13*x3*x9, x10*x11*x13*x5*x9, x10*x11*x13*x8*x9, x10*x11*x16*x2*x9, x10*x11*x16*x3*x9, x10*x11*x16*x8*x9, x10*x11*x2*x6*x9, x10*x11*x2*x7*x9, x10*x11*x3*x6*x9, x10*x11*x3*x7*x9, x10*x12*x16*x4*x5, x10*x12*x16*x5*x9, x10*x13*x16*x5*x9, x10*x13*x2*x4*x9, x10*x13*x4*x5*x9, x10*x13*x5*x7*x9, x10*x14*x16*x2*x9, x10*x14*x16*x3*x6, x10*x14*x16*x3*x9, x10*x14*x16*x8*x9, x10*x14*x2*x7*x9, x10*x15*x2*x4*x6, x10*x15*x3*x5*x7, x10*x16*x2*x4*x9, x10*x16*x2*x5*x9, x10*x16*x4*x8*x9, x10*x16*x5*x8*x9, x10*x2*x3*x4*x6, x10*x2*x3*x4*x7, x10*x2*x4*x5*x6, x10*x2*x4*x6*x9, x10*x2*x4*x7*x9, x10*x2*x5*x6*x7, x10*x2*x5*x7*x9, x10*x3*x4*x5*x7, x10*x3*x5*x6*x7, x10*x3*x5*x7*x9, x11*x13*x3*x4*x9, x11*x13*x5*x6*x9, x11*x14*x2*x5*x6, x11*x14*x3*x4*x7, x11*x15*x16*x2*x7, x11*x15*x16*x2*x9, x11*x15*x16*x3*x9, x11*x15*x16*x8*x9, x11*x15*x3*x6*x9, x11*x16*x3*x4*x9, x11*x16*x3*x5*x9, x11*x2*x3*x4*x6, x11*x2*x3*x4*x7, x11*x2*x4*x5*x6, x11*x2*x5*x6*x7, x11*x2*x5*x6*x9, x11*x3*x4*x5*x7, x11*x3*x4*x6*x9, x11*x3*x4*x7*x9, x11*x3*x5*x6*x7, x11*x3*x5*x6*x9, x12*x13*x2*x3*x4, x12*x13*x5*x6*x7, x12*x14*x15*x16*x2, x12*x14*x15*x16*x3, x12*x14*x15*x16*x5, x12*x14*x15*x16*x8, x12*x14*x16*x3*x4, x12*x14*x16*x5*x6, x12*x15*x16*x2*x4, x12*x15*x16*x4*x5, x12*x15*x16*x5*x7, x12*x15*x16*x5*x9, x12*x16*x2*x3*x4, x12*x16*x3*x4*x5, x12*x16*x3*x5*x9, x12*x16*x4*x5*x6, x12*x16*x5*x6*x7, x12*x16*x5*x6*x9, x13*x15*x16*x5*x9, x13*x15*x4*x5*x9, x13*x16*x3*x5*x9, x13*x16*x5*x6*x9, x13*x2*x3*x4*x6, x13*x2*x3*x4*x7, x13*x2*x3*x4*x9, x13*x2*x4*x5*x6, x13*x2*x5*x6*x7, x13*x3*x4*x5*x7, x13*x3*x4*x5*x9, x13*x3*x5*x6*x7, x13*x4*x5*x6*x9, x13*x5*x6*x7*x9, x14*x15*x16*x2*x6, x14*x15*x16*x2*x7, x14*x15*x16*x2*x9, x14*x15*x16*x3*x6, x14*x15*x16*x3*x7, x14*x15*x16*x3*x9, x14*x15*x16*x8*x9, x14*x16*x2*x5*x6, x14*x16*x3*x4*x6, x14*x16*x3*x4*x7, x14*x16*x3*x4*x9, x14*x16*x3*x5*x6, x14*x16*x3*x5*x9, x15*x16*x2*x4*x6, x15*x16*x2*x4*x7, x15*x16*x2*x4*x9, x15*x16*x2*x5*x7, x15*x16*x2*x5*x9, x15*x16*x3*x5*x7, x15*x16*x4*x8*x9, x15*x16*x5*x8*x9, x16*x2*x3*x4*x6, x16*x2*x3*x4*x7, x16*x2*x3*x4*x9, x16*x2*x4*x5*x6, x16*x2*x5*x6*x7, x16*x2*x5*x6*x9, x16*x3*x4*x5*x7, x16*x3*x4*x8*x9, x16*x3*x5*x6*x7, x16*x3*x5*x7*x9, x16*x3*x5*x8*x9, x16*x4*x6*x8*x9, x16*x5*x6*x8*x9 ]; 5 frobby-0.9.5/test/bigIdeals/k4.opt_std000066400000000000000000000001361401527164200175700ustar00rootroot00000000000000vars x1, x10, x11, x12, x13, x14, x15, x16, x2, x3, x4, x5, x6, x7, x8, x9; [ ]; no solution. frobby-0.9.5/test/bigIdeals/k4.opt_std_min000066400000000000000000000001361401527164200204330ustar00rootroot00000000000000vars x1, x10, x11, x12, x13, x14, x15, x16, x2, x3, x4, x5, x6, x7, x8, x9; [ ]; no solution. frobby-0.9.5/test/bigIdeals/k4.test000066400000000000000000000023551401527164200171000ustar00rootroot00000000000000vars x1, x10, x11, x12, x13, x14, x15, x16, x2, x3, x4, x5, x6, x7, x8, x9; [ x10^2*x11*x16*x4*x5, x10^2*x13*x16*x3*x6, x10^2*x15*x3*x5*x8, x10*x11^2*x16*x4*x5, x10*x11*x13*x16, x10*x11*x16^2*x4*x5, x10*x11*x16*x4^2*x5, x10*x11*x16*x4*x5^2, x10*x13*x16^2*x3*x6, x10*x13*x16*x3^2*x6, x10*x13*x16*x3*x6^2, x10*x15^2*x3*x5*x8, x10*x15*x3^2*x5*x8, x10*x15*x3*x5^2*x8, x10*x15*x3*x6, x10*x15*x4*x5, x10*x16*x3*x5, x10*x16*x4*x6, x11*x12*x13*x14*x2^3*x7*x8, x11*x13*x16^2*x2*x7, x11*x13*x16*x2^2*x7, x11*x14*x2^2*x5*x8, x11*x14*x2*x5^2*x8, x11*x14*x4*x5, x11*x16*x2*x5, x11*x16*x4*x7, x12*x13*x2^2*x3*x8, x12*x13*x2*x3^2*x8, x12*x14*x2^2*x7*x9, x12*x14*x2*x7*x9^2, x12*x15^2*x3*x6*x9, x12*x15*x3^2*x6*x9, x12*x15*x3*x6^2*x9, x12*x15*x3*x6*x9^2, x12*x2*x3*x9, x12*x6*x7*x9, x13*x16*x2*x3, x13*x16*x6*x7, x14^2*x15*x4*x5*x9, x14*x15^2*x4*x5*x9, x14*x15*x4^2*x5*x9, x14*x15*x4*x5^2*x9, x14*x15*x4*x5*x9^2, x14*x2*x5*x9, x14*x4*x7*x9, x15*x3*x5*x9, x15*x4*x6*x9, x16^2*x2*x3*x5*x9, x16^2*x4*x6*x7*x9, x16*x2^2*x3*x5*x9, x16*x2*x3^2*x5*x9, x16*x2*x3*x5^2*x9, x16*x2*x3*x5*x9^2, x16*x2*x7*x9, x16*x3*x6*x9, x16*x4^2*x6*x7*x9, x16*x4*x5*x9, x16*x4*x6^2*x7*x9, x16*x4*x6*x7^2*x9, x16*x4*x6*x7*x9^2, x2*x3*x5*x8 ]; frobby-0.9.5/test/commonIdeals/000077500000000000000000000000001401527164200164035ustar00rootroot00000000000000frobby-0.9.5/test/commonIdeals/t1.alexdual000066400000000000000000000001101401527164200204400ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^4*y^2*z, x^2*y^3*z, x*y*z^2 ); frobby-0.9.5/test/commonIdeals/t1.assoprimes000066400000000000000000000000561401527164200210370ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x*y*z ); frobby-0.9.5/test/commonIdeals/t1.dim000066400000000000000000000000021401527164200174120ustar00rootroot000000000000000 frobby-0.9.5/test/commonIdeals/t1.euler000066400000000000000000000000031401527164200177560ustar00rootroot00000000000000-1 frobby-0.9.5/test/commonIdeals/t1.intersection000066400000000000000000000001201401527164200213500ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^4, x^3*z, x*y*z, y^3, y^2*z, z^2 ); frobby-0.9.5/test/commonIdeals/t1.irrdecom000066400000000000000000000002001401527164200204450ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^4, y^3, z ); I = monomialIdeal( x^3, y, z^2 ); I = monomialIdeal( x, y^2, z^2 ); frobby-0.9.5/test/commonIdeals/t1.irrdecom_ideal000066400000000000000000000001121401527164200216050ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^4*y^3*z, x^3*y*z^2, x*y^2*z^2 ); frobby-0.9.5/test/commonIdeals/t1.maxstandard000066400000000000000000000000761401527164200211620ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*y^2, x^2*z, y*z ); frobby-0.9.5/test/commonIdeals/t1.minimize000066400000000000000000000001201401527164200204630ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^4, x^3*z, x*y*z, y^3, y^2*z, z^2 ); frobby-0.9.5/test/commonIdeals/t1.multi000066400000000000000000000003151401527164200200020ustar00rootroot00000000000000R = QQ[x, y, z]; p = -x^4*y^3*z + x^4*y^3 + x^4*z + -x^4 + -x^3*y*z^2 + x^3*y*z + x^3*z^2 + -x^3*z + -x*y^2*z^2 + x*y^2*z + x*y*z^2 + -x*y*z + y^3*z + -y^3 + y^2*z^2 + -y^2*z + -z^2 + 1; frobby-0.9.5/test/commonIdeals/t1.opt_irr000066400000000000000000000000641401527164200203270ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^4*y^3*z ); 8 frobby-0.9.5/test/commonIdeals/t1.opt_irr_min000066400000000000000000000000641401527164200211720ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x*y^2*z^2 ); 5 frobby-0.9.5/test/commonIdeals/t1.opt_std000066400000000000000000000000621401527164200203230ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*y^2 ); 5 frobby-0.9.5/test/commonIdeals/t1.opt_std_min000066400000000000000000000000561401527164200211710ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( y*z ); 2 frobby-0.9.5/test/commonIdeals/t1.primdecom000066400000000000000000000001201401527164200206210ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^4, x^3*z, x*y*z, y^3, y^2*z, z^2 ); frobby-0.9.5/test/commonIdeals/t1.radical000066400000000000000000000000621401527164200202460ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x, y, z ); frobby-0.9.5/test/commonIdeals/t1.test000066400000000000000000000001201401527164200176210ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( z^2, x^3*z, x^4, y^3, y^2*z, x*y*z ); frobby-0.9.5/test/commonIdeals/t1.uni000066400000000000000000000001161401527164200174420ustar00rootroot00000000000000R = QQ[t]; p = -t^8 + t^7 + -t^6 + 2*t^5 + 2*t^4 + -3*t^3 + -t^2 + 1; frobby-0.9.5/test/commonIdeals/t11.alexdual000066400000000000000000000003141401527164200205270ustar00rootroot00000000000000R = QQ[x1, x10, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1^8, x1*x6, x10^5, x10*x6, x2, x3^6, x3*x6, x4^6, x4*x6, x5^4, x5*x6, x6^5, x6*x7, x6*x8, x6*x9, x7^3, x8^7, x9^6 ); frobby-0.9.5/test/commonIdeals/t11.assoprimes000066400000000000000000000002721401527164200211200ustar00rootroot00000000000000R = QQ[x1, x10, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1*x6, x1, x10*x6, x10, x2, x3*x6, x3, x4*x6, x4, x5*x6, x5, x6*x7, x6*x8, x6*x9, x6, x7, x8, x9 ); frobby-0.9.5/test/commonIdeals/t11.dim000066400000000000000000000000021401527164200174730ustar00rootroot000000000000009 frobby-0.9.5/test/commonIdeals/t11.euler000066400000000000000000000000031401527164200200370ustar00rootroot00000000000000-1 frobby-0.9.5/test/commonIdeals/t11.intersection000066400000000000000000000002501401527164200214350ustar00rootroot00000000000000R = QQ[x1, x10, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1^9*x10^5*x2*x3^7*x4^9*x5^4*x6^3*x7^7*x8^8*x9^9, x1^2*x10*x2*x3^2*x4^4*x5*x6^7*x7^5*x8^2*x9^4 ); frobby-0.9.5/test/commonIdeals/t11.irrdecom000066400000000000000000000011351401527164200205360ustar00rootroot00000000000000R = QQ[x1, x10, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1^9, x6^7 ); I = monomialIdeal( x1^2 ); I = monomialIdeal( x10^5, x6^7 ); I = monomialIdeal( x10 ); I = monomialIdeal( x2 ); I = monomialIdeal( x3^7, x6^7 ); I = monomialIdeal( x3^2 ); I = monomialIdeal( x4^9, x6^7 ); I = monomialIdeal( x4^4 ); I = monomialIdeal( x5^4, x6^7 ); I = monomialIdeal( x5 ); I = monomialIdeal( x6^7, x7^7 ); I = monomialIdeal( x6^7, x8^8 ); I = monomialIdeal( x6^7, x9^9 ); I = monomialIdeal( x6^3 ); I = monomialIdeal( x7^5 ); I = monomialIdeal( x8^2 ); I = monomialIdeal( x9^4 ); frobby-0.9.5/test/commonIdeals/t11.irrdecom_ideal000066400000000000000000000003501401527164200216720ustar00rootroot00000000000000R = QQ[x1, x10, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1^9*x6^7, x1^2, x10^5*x6^7, x10, x2, x3^7*x6^7, x3^2, x4^9*x6^7, x4^4, x5^4*x6^7, x5, x6^7*x7^7, x6^7*x8^8, x6^7*x9^9, x6^3, x7^5, x8^2, x9^4 ); frobby-0.9.5/test/commonIdeals/t11.maxstandard000066400000000000000000000001111401527164200212310ustar00rootroot00000000000000R = QQ[x1, x10, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal(0_R); frobby-0.9.5/test/commonIdeals/t11.minimize000066400000000000000000000002501401527164200205500ustar00rootroot00000000000000R = QQ[x1, x10, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1^9*x10^5*x2*x3^7*x4^9*x5^4*x6^3*x7^7*x8^8*x9^9, x1^2*x10*x2*x3^2*x4^4*x5*x6^7*x7^5*x8^2*x9^4 ); frobby-0.9.5/test/commonIdeals/t11.multi000066400000000000000000000003231401527164200200620ustar00rootroot00000000000000R = QQ[x1, x10, x2, x3, x4, x5, x6, x7, x8, x9]; p = x1^9*x10^5*x2*x3^7*x4^9*x5^4*x6^7*x7^7*x8^8*x9^9 + -x1^9*x10^5*x2*x3^7*x4^9*x5^4*x6^3*x7^7*x8^8*x9^9 + -x1^2*x10*x2*x3^2*x4^4*x5*x6^7*x7^5*x8^2*x9^4 + 1; frobby-0.9.5/test/commonIdeals/t11.opt_irr000066400000000000000000000001551401527164200204110ustar00rootroot00000000000000R = QQ[x1, x10, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1^9*x6^7, x4^9*x6^7, x6^7*x9^9 ); 16 frobby-0.9.5/test/commonIdeals/t11.opt_irr_min000066400000000000000000000001301401527164200212450ustar00rootroot00000000000000R = QQ[x1, x10, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x10, x2, x5 ); 1 frobby-0.9.5/test/commonIdeals/t11.opt_std000066400000000000000000000001261401527164200204050ustar00rootroot00000000000000R = QQ[x1, x10, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t11.opt_std_min000066400000000000000000000001261401527164200212500ustar00rootroot00000000000000R = QQ[x1, x10, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t11.primdecom000066400000000000000000000011351401527164200207110ustar00rootroot00000000000000R = QQ[x1, x10, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1^9, x6^7 ); I = monomialIdeal( x1^2 ); I = monomialIdeal( x10^5, x6^7 ); I = monomialIdeal( x10 ); I = monomialIdeal( x2 ); I = monomialIdeal( x3^7, x6^7 ); I = monomialIdeal( x3^2 ); I = monomialIdeal( x4^9, x6^7 ); I = monomialIdeal( x4^4 ); I = monomialIdeal( x5^4, x6^7 ); I = monomialIdeal( x5 ); I = monomialIdeal( x6^7, x7^7 ); I = monomialIdeal( x6^7, x8^8 ); I = monomialIdeal( x6^7, x9^9 ); I = monomialIdeal( x6^3 ); I = monomialIdeal( x7^5 ); I = monomialIdeal( x8^2 ); I = monomialIdeal( x9^4 ); frobby-0.9.5/test/commonIdeals/t11.radical000066400000000000000000000001471401527164200203330ustar00rootroot00000000000000R = QQ[x1, x10, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1*x10*x2*x3*x4*x5*x6*x7*x8*x9 ); frobby-0.9.5/test/commonIdeals/t11.test000066400000000000000000000002501401527164200177060ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10]; I = monomialIdeal( x1^2*x2*x3^2*x4^4*x5*x6^7*x7^5*x8^2*x9^4*x10, x1^9*x2*x3^7*x4^9*x5^4*x6^3*x7^7*x8^8*x9^9*x10^5 ); frobby-0.9.5/test/commonIdeals/t11.uni000066400000000000000000000000551401527164200175250ustar00rootroot00000000000000R = QQ[t]; p = t^66 + -t^62 + -t^29 + 1; frobby-0.9.5/test/commonIdeals/t12.alexdual000066400000000000000000000000671401527164200205350ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a*b, a*c*d ); frobby-0.9.5/test/commonIdeals/t12.assoprimes000066400000000000000000000000671401527164200211230ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a*b, a*c*d ); frobby-0.9.5/test/commonIdeals/t12.dim000066400000000000000000000000021401527164200174740ustar00rootroot000000000000002 frobby-0.9.5/test/commonIdeals/t12.euler000066400000000000000000000000031401527164200200400ustar00rootroot00000000000000-1 frobby-0.9.5/test/commonIdeals/t12.intersection000066400000000000000000000000711401527164200214370ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a, b*c, b*d ); frobby-0.9.5/test/commonIdeals/t12.irrdecom000066400000000000000000000001221401527164200205320ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a, b ); I = monomialIdeal( a, c, d ); frobby-0.9.5/test/commonIdeals/t12.irrdecom_ideal000066400000000000000000000000671401527164200217000ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a*b, a*c*d ); frobby-0.9.5/test/commonIdeals/t12.maxstandard000066400000000000000000000000541401527164200212400ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal(0_R); frobby-0.9.5/test/commonIdeals/t12.minimize000066400000000000000000000000711401527164200205520ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a, b*c, b*d ); frobby-0.9.5/test/commonIdeals/t12.multi000066400000000000000000000001311401527164200200600ustar00rootroot00000000000000R = QQ[a, b, c, d]; p = -a*b*c*d + a*b*c + a*b*d + -a + b*c*d + -b*c + -b*d + 1; frobby-0.9.5/test/commonIdeals/t12.opt_irr000066400000000000000000000000631401527164200204100ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a*c*d ); 3 frobby-0.9.5/test/commonIdeals/t12.opt_irr_min000066400000000000000000000000611401527164200212510ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a*b ); 2 frobby-0.9.5/test/commonIdeals/t12.opt_std000066400000000000000000000000711401527164200204050ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t12.opt_std_min000066400000000000000000000000711401527164200212500ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t12.primdecom000066400000000000000000000001221401527164200207050ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a, b ); I = monomialIdeal( a, c, d ); frobby-0.9.5/test/commonIdeals/t12.radical000066400000000000000000000000711401527164200203300ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a, b*c, b*d ); frobby-0.9.5/test/commonIdeals/t12.test000066400000000000000000000000711401527164200177100ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( b*d, a, b*c ); frobby-0.9.5/test/commonIdeals/t12.uni000066400000000000000000000000641401527164200175260ustar00rootroot00000000000000R = QQ[t]; p = -t^4 + 3*t^3 + -2*t^2 + -t + 1; frobby-0.9.5/test/commonIdeals/t14.alexdual000066400000000000000000000317631401527164200205460ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^10, x1^9*x2^8, x1^9*x2^4*x7^3, x1^9*x2^4*x8, x1^9*x3^4, x1^9*x3*x7^3, x1^9*x3*x8, x1^8*x2^8*x5, x1^8*x2^8*x6, x1^8*x2^4*x4^3, x1^8*x2^4*x5^2, x1^8*x2^4*x5*x7^3, x1^8*x2^4*x5*x8, x1^8*x2^4*x7^5, x1^8*x2^4*x8^2, x1^8*x3^7, x1^8*x3^4*x5, x1^8*x3^4*x6, x1^8*x3*x4^3, x1^8*x3*x5^2, x1^8*x3*x5*x7^3, x1^8*x3*x5*x8, x1^8*x3*x7^5, x1^8*x3*x8^2, x1^8*x4^5, x1^8*x4^3*x6, x1^8*x5^6, x1^8*x5^2*x6, x1^8*x6*x7^3, x1^8*x6*x8, x1^8*x8^4, x1^7*x2^2*x3^4*x5^3, x1^7*x3^4*x5^3*x8^5, x1^7*x3^4*x6^3, x1^7*x5^3*x8^6, x1^7*x5^2*x6^4, x1^7*x6^5, x1^7*x6^4*x8, x1^7*x6^3*x8^6, x1^7*x8^10, x1^6*x2^8*x5^3*x8^6, x1^6*x2^8*x6^4, x1^6*x2^8*x6^3*x8^6, x1^6*x2^4*x5^3*x7^3, x1^6*x2^4*x7^10, x1^6*x3*x5^3*x7^3, x1^6*x3*x7^10, x1^6*x4^3*x5^3*x8^6, x1^6*x4^3*x6^4, x1^6*x4^3*x6^3*x8^6, x1^6*x5^6*x7^3, x1^6*x5^4*x6^4, x1^6*x5^4*x8^6, x1^6*x5^3*x6*x7^3, x1^6*x5^3*x7^3*x8^4, x1^6*x6^6, x1^6*x6^3*x7^3, x1^6*x6*x7^10, x1^6*x7^10*x8^4, x1^5*x2^10*x4^3*x7^3, x1^5*x2^10*x5*x7^3, x1^5*x2^10*x7^3*x8^2, x1^5*x2^9*x5^3*x7^3, x1^5*x2^4*x4^4*x5^3*x7^3, x1^5*x2^4*x5^6*x6^4, x1^5*x2^4*x5^6*x7^3, x1^5*x2^2*x3^5*x5^3, x1^5*x2^2*x3^4*x4^3*x5^3, x1^5*x2^2*x3^4*x5^4, x1^5*x3^6*x5^3, x1^5*x3^5*x5^3*x8^5, x1^5*x3^5*x6^3, x1^5*x3^5*x8^10, x1^5*x3^4*x4^5*x5^3, x1^5*x3^4*x4^3*x5^3*x8^5, x1^5*x3^4*x4^3*x6^3, x1^5*x3^4*x5^5, x1^5*x3^4*x5^4*x6^3, x1^5*x3^4*x5^4*x8^5, x1^5*x3^3*x4^3*x5^3*x8^6, x1^5*x3^3*x4^3*x6^4, x1^5*x3^3*x4^3*x6^3*x8^6, x1^5*x3^3*x5^4*x6^4, x1^5*x3^3*x5^4*x8^6, x1^5*x3^3*x5^3*x7^3, x1^5*x3^3*x6^3*x7^3, x1^5*x3*x4^4*x5^3*x7^3, x1^5*x3*x5^6*x6^4, x1^5*x3*x5^6*x7^3, x1^5*x4^5*x5^3*x7^3, x1^5*x4^4*x5^3*x7^3*x8^4, x1^5*x4^4*x5^3*x8^6, x1^5*x4^4*x6^4, x1^5*x4^4*x6^3*x7^3, x1^5*x4^4*x6^3*x8^6, x1^5*x4^3*x5^3*x8^7, x1^5*x4^3*x6^3*x8^7, x1^5*x4^3*x8^10, x1^5*x4*x5^6*x6^4, x1^5*x4*x5^6*x7^3, x1^5*x5^6*x8^6, x1^5*x5^4*x8^7, x1^5*x6^3*x7^3*x8^7, x1^4*x2^9*x5^3*x6*x7^3, x1^4*x2^9*x5^3*x7^4, x1^4*x2^9*x7^10, x1^4*x2^8*x3^4*x5^3, x1^4*x2^6*x3^5*x5^3, x1^4*x2^6*x3^4*x4^3*x5^3, x1^4*x2^6*x3^4*x5^4, x1^4*x2^4*x4^4*x5^3*x7^4, x1^4*x2^4*x4^4*x7^10, x1^4*x2^2*x3^5*x5^3*x7, x1^4*x2^2*x3^4*x4^3*x5^3*x7, x1^4*x2^2*x3^4*x5^4*x7, x1^4*x2*x3^5*x6^5, x1^4*x2*x3^5*x6^3*x7, x1^4*x2*x3^4*x4^3*x6^3*x7, x1^4*x2*x3^3*x4^3*x6^5, x1^4*x2*x3^3*x4^3*x6^4*x7, x1^4*x2*x4^4*x6^5, x1^4*x2*x4^4*x6^4*x7, x1^4*x3^5*x5^2*x6^5, x1^4*x3^5*x5^2*x6^3*x7, x1^4*x3^4*x4^9, x1^4*x3^4*x4^8*x5^3, x1^4*x3^4*x4^8*x6^3, x1^4*x3^4*x4^5*x5^3*x7, x1^4*x3^4*x4^5*x6^3*x7, x1^4*x3^4*x4^3*x5^2*x6^3*x7, x1^4*x3^4*x5^5*x7, x1^4*x3^4*x5^3*x7^3, x1^4*x3^3*x4^3*x5^2*x6^5, x1^4*x3^3*x4^3*x5^2*x6^4*x7, x1^4*x3^3*x5^3*x6*x7^3, x1^4*x3^3*x5^3*x7^4, x1^4*x3^3*x7^10, x1^4*x3*x4^4*x5^3*x7^4, x1^4*x3*x4^4*x7^10, x1^4*x4^10, x1^4*x4^9*x7^3, x1^4*x4^8*x5^3*x7^3, x1^4*x4^8*x6^4, x1^4*x4^5*x5^3*x7^4, x1^4*x4^5*x6^5, x1^4*x4^5*x6^4*x7, x1^4*x4^5*x7^10, x1^4*x4^4*x5^3*x6*x7^3, x1^4*x4^4*x5^2*x6^5, x1^4*x4^4*x5^2*x6^4*x7, x1^4*x4^4*x6*x7^10, x1^3*x2^9*x5^3*x6*x7^3*x8^2, x1^3*x2^9*x5^3*x7^4*x8^2, x1^3*x2^9*x5^3*x8^6, x1^3*x2^8*x3^4*x5^3*x8^2, x1^3*x2^8*x3^3*x5^3*x8^6, x1^3*x2^6*x3^6*x5^3, x1^3*x2^6*x3^5*x5^3*x8^2, x1^3*x2^6*x5^6*x6^4, x1^3*x2^4*x5^7*x6^4, x1^3*x2^4*x5^6*x6^5, x1^3*x2^4*x5^6*x6^4*x7, x1^3*x2^4*x5^6*x6*x7^3, x1^3*x2^4*x5^6*x7^4, x1^3*x2^2*x3^5*x5^3*x7*x8^2, x1^3*x2^2*x3^4*x4^3*x5^3*x7*x8^2, x1^3*x2^2*x3^4*x5^4*x7*x8^2, x1^3*x2*x3^6*x6^3*x7, x1^3*x2*x3^5*x6^3*x7^2, x1^3*x2*x3^5*x6^3*x7*x8^2, x1^3*x2*x3^4*x4^3*x6^3*x7^2, x1^3*x2*x3^4*x4^3*x6^3*x7*x8^2, x1^3*x2*x3^3*x4^3*x6^3*x7*x8^6, x1^3*x2*x3^3*x6^3*x7^3, x1^3*x2*x4^4*x6^3*x7^3, x1^3*x2*x4^4*x6^3*x7*x8^6, x1^3*x3^6*x4^5*x6^3*x7, x1^3*x3^6*x5^3*x7, x1^3*x3^6*x5^2*x6^3*x7, x1^3*x3^5*x5^3*x7*x8^5, x1^3*x3^5*x5^2*x6^3*x7^2, x1^3*x3^5*x5^2*x6^3*x7*x8^2, x1^3*x3^4*x4^5*x5^3*x7*x8^2, x1^3*x3^4*x4^5*x6^3*x7^2, x1^3*x3^4*x4^5*x6^3*x7*x8^2, x1^3*x3^4*x4^3*x5^3*x7*x8^5, x1^3*x3^4*x4^3*x5^2*x6^3*x7^2, x1^3*x3^4*x4^3*x5^2*x6^3*x7*x8^2, x1^3*x3^4*x5^7, x1^3*x3^4*x5^6*x7, x1^3*x3^4*x5^5*x7*x8^2, x1^3*x3^4*x5^4*x6^3*x7, x1^3*x3^4*x5^4*x7*x8^5, x1^3*x3^4*x5^3*x7^3*x8^2, x1^3*x3^3*x4^3*x5^3*x7*x8^6, x1^3*x3^3*x4^3*x5^2*x6^3*x7*x8^6, x1^3*x3^3*x5^4*x7*x8^6, x1^3*x3^3*x5^3*x6*x7^3*x8^2, x1^3*x3^3*x5^3*x7^4*x8^2, x1^3*x3^3*x5^3*x7^3*x8^6, x1^3*x3^3*x5^2*x6^3*x7^3, x1^3*x3*x5^7*x6^4, x1^3*x3*x5^6*x6^5, x1^3*x3*x5^6*x6^4*x7, x1^3*x3*x5^6*x6*x7^3, x1^3*x3*x5^6*x7^4, x1^3*x4^5*x6^3*x7^3, x1^3*x4^5*x6^3*x7*x8^6, x1^3*x4^4*x5^3*x6*x7^3*x8^2, x1^3*x4^4*x5^3*x7*x8^6, x1^3*x4^4*x5^2*x6^3*x7^3, x1^3*x4^4*x5^2*x6^3*x7*x8^6, x1^3*x4*x5^7*x6^4, x1^3*x4*x5^6*x6^5, x1^3*x4*x5^6*x6^4*x7, x1^3*x4*x5^6*x6*x7^3, x1^3*x4*x5^6*x7^4, x1^3*x5^7*x8^6, x1^3*x5^6*x6^6, x1^3*x5^6*x7*x8^6, x1*x2^9*x4^3*x5^3*x7^4*x8^2, x1*x2^9*x5^4*x7^4*x8^2, x1*x2^9*x5^3*x7^6*x8^2, x1*x2^8*x5^6*x7^4, x1*x2^6*x3^6*x4^3*x5^3, x1*x2^6*x3^6*x5^4, x1*x2^6*x3^4*x4^3*x5^3*x8^2, x1*x2^6*x3^4*x5^6, x1*x2^6*x3^4*x5^4*x8^2, x1*x2^5*x3^6*x4^3*x5^3*x7, x1*x2^5*x3^6*x5^4*x7, x1*x2^5*x3^6*x5^3*x6^2*x7, x1*x2^5*x3^5*x5^3*x6^2*x7*x8^2, x1*x2^5*x3^5*x6^5, x1*x2^5*x3^5*x6^3*x7, x1*x2^5*x3^4*x4^3*x5^3*x7*x8^2, x1*x2^5*x3^4*x5^6*x7, x1*x2^5*x3^4*x5^4*x6^3*x7, x1*x2^5*x3^4*x5^4*x7*x8^2, x1*x2^5*x3^3*x5^4*x6*x7^3*x8^2, x1*x2^5*x3^3*x5^3*x6^2*x7^3*x8^2, x1*x2^5*x3^3*x6^3*x7^3, x1*x2^5*x3^2*x5^6*x6*x7^3, x1*x2^5*x4^10, x1*x2^5*x5^6*x6*x7^3*x8^3, x1*x2^4*x4^4*x5^3*x7^4*x8^2, x1*x2^4*x5^6*x6^5*x8^3, x1*x2^4*x5^6*x6^4*x7*x8^3, x1*x2^4*x5^6*x7^4*x8^3, x1*x2*x3^6*x6^5, x1*x2*x3^6*x6^4*x7, x1*x2*x3^5*x6^5*x8^2, x1*x2*x3^5*x6^4*x7^2, x1*x2*x3^5*x6^4*x7*x8^2, x1*x2*x3^3*x6^4*x7^3, x1*x2*x3^3*x6^3*x7^4, x1*x3^6*x4^9, x1*x3^6*x4^8*x5^3, x1*x3^6*x4^6*x5^3*x7, x1*x3^6*x4^3*x5^3*x7^4, x1*x3^6*x5^4*x7^4, x1*x3^6*x5^3*x6^2*x7^4, x1*x3^6*x5^3*x7^6, x1*x3^6*x5^2*x6^5, x1*x3^6*x5^2*x6^4*x7, x1*x3^5*x5^2*x6^5*x8^2, x1*x3^5*x5^2*x6^4*x7^2, x1*x3^5*x5^2*x6^4*x7*x8^2, x1*x3^4*x4^9*x8^2, x1*x3^4*x4^8*x5^6, x1*x3^4*x4^8*x5^3*x8^2, x1*x3^4*x4^6*x5^6*x7, x1*x3^4*x4^6*x5^3*x7*x8^2, x1*x3^3*x4^3*x5^3*x7^4*x8^2, x1*x3^3*x5^4*x6^5, x1*x3^3*x5^4*x6^4*x7, x1*x3^3*x5^4*x7^4*x8^2, x1*x3^3*x5^3*x6^2*x7^4*x8^2, x1*x3^3*x5^3*x7^6*x8^2, x1*x3^3*x5^2*x6^4*x7^3, x1*x3^3*x5^2*x6^3*x7^4, x1*x3^2*x5^6*x6^5, x1*x3^2*x5^6*x6^4*x7, x1*x3^2*x5^6*x7^4, x1*x3*x4^4*x5^3*x7^4*x8^2, x1*x3*x5^6*x6^5*x8^3, x1*x3*x5^6*x6^4*x7*x8^3, x1*x3*x5^6*x7^4*x8^3, x1*x4^10*x5^4, x1*x4^10*x7^2, x1*x4^10*x8^2, x1*x4^9*x7^3*x8^2, x1*x4^8*x5^6*x7^3, x1*x4^8*x5^3*x7^3*x8^2, x1*x4^5*x5^3*x7^4*x8^2, x1*x4^4*x5^3*x7^4*x8^4, x1*x4^2*x5^6*x7^4, x1*x4*x5^6*x7^4*x8^3, x2^10*x3^7, x2^10*x3^4*x4^3, x2^10*x3^4*x5, x2^10*x3^4*x6, x2^10*x3^4*x8^2, x2^10*x4^10, x2^10*x4^8*x7^3, x2^10*x4^3*x7^4, x2^10*x5*x7^4, x2^10*x6*x7^3, x2^10*x7^5, x2^10*x7^4*x8^2, x2^10*x8^6, x2^9*x3^9, x2^9*x4^3*x5^3*x6*x7^3*x8^2, x2^9*x4^3*x5^3*x8^6, x2^9*x5^4*x6*x7^3*x8^2, x2^9*x5^4*x8^6, x2^9*x5^3*x6^2*x7^3*x8^2, x2^9*x5^3*x6^2*x8^6, x2^9*x5^3*x6*x7^6*x8^2, x2^9*x5^3*x7^8*x8^2, x2^9*x5^3*x7^6*x8^6, x2^9*x6^4, x2^9*x6^3*x7^3, x2^9*x6^3*x8^6, x2^9*x7^10*x8^2, x2^8*x3^4*x5^3*x6^2*x8^2, x2^8*x3^4*x6^3, x2^8*x3^3*x5^3*x6^2*x8^6, x2^8*x3^3*x6^4, x2^8*x3^3*x6^3*x8^6, x2^8*x5^7*x7^4, x2^8*x5^6*x6^4, x2^8*x5^6*x6*x7^3, x2^8*x5^6*x7^8, x2^8*x5^3*x8^7, x2^8*x6^3*x8^7, x2^8*x8^10, x2^6*x3^6*x4^3*x5^3*x6, x2^6*x3^6*x5^4*x6, x2^6*x3^6*x5^3*x6^2, x2^6*x3^6*x5^3*x6*x7^6, x2^6*x3^5*x5^3*x6^2*x8^2, x2^6*x3^5*x5^3*x8^7, x2^6*x3^5*x6^3, x2^6*x3^5*x8^10, x2^6*x3^4*x4^3*x5^3*x6*x8^2, x2^6*x3^4*x4^3*x6^3, x2^6*x3^4*x5^6*x6, x2^6*x3^4*x5^4*x6^3, x2^6*x3^4*x5^4*x6*x8^2, x2^6*x3^3*x4^3*x5^3*x8^6, x2^6*x3^3*x4^3*x6^4, x2^6*x3^3*x4^3*x6^3*x8^6, x2^6*x3^3*x5^4*x6^4, x2^6*x3^3*x5^4*x6*x7^3*x8^2, x2^6*x3^3*x5^4*x8^6, x2^6*x3^3*x5^3*x6^2*x7^3*x8^2, x2^6*x3^3*x5^3*x6*x7^6*x8^2, x2^6*x3^3*x6^3*x7^3, x2^6*x3^2*x5^6*x6^4, x2^6*x3^2*x5^6*x6*x7^3, x2^6*x4^4*x5^3*x8^6, x2^6*x4^4*x6^4, x2^6*x4^4*x6^3*x8^6, x2^6*x4^3*x5^3*x8^7, x2^6*x4^3*x6^3*x8^7, x2^6*x4^3*x8^10, x2^6*x4^2*x5^6*x6^4, x2^6*x5^6*x6^4*x8^3, x2^6*x5^6*x6*x7^3*x8^3, x2^6*x5^6*x8^6, x2^6*x5^4*x8^7, x2^5*x3^6*x4^3*x5^3*x6*x7, x2^5*x3^6*x4*x5^4*x6*x7, x2^5*x3^6*x4*x5^3*x6^2*x7, x2^5*x3^5*x4*x5^3*x6^2*x7*x8^2, x2^5*x3^5*x4*x6^5, x2^5*x3^5*x4*x6^3*x7, x2^5*x3^5*x5^3*x6^2*x7*x8^6, x2^5*x3^5*x6^3*x7*x8^6, x2^5*x3^4*x4^8*x6^3, x2^5*x3^4*x4^3*x5^3*x6*x7*x8^2, x2^5*x3^4*x4^3*x6^3*x7, x2^5*x3^4*x4*x5^6*x6*x7, x2^5*x3^4*x4*x5^4*x6^3*x7, x2^5*x3^4*x4*x5^4*x6*x7*x8^2, x2^5*x3^4*x5^7, x2^5*x3^3*x4^3*x5^3*x6*x7^3*x8^2, x2^5*x3^3*x4^3*x5^3*x7*x8^6, x2^5*x3^3*x4^3*x6^5, x2^5*x3^3*x4^3*x6^4*x7, x2^5*x3^3*x4^3*x6^3*x7*x8^6, x2^5*x3^3*x4*x5^4*x6*x7^3*x8^2, x2^5*x3^3*x4*x5^3*x6^2*x7^3*x8^2, x2^5*x3^3*x4*x6^3*x7^3, x2^5*x3^3*x5^4*x7*x8^6, x2^5*x3^3*x5^3*x6^2*x7^3*x8^6, x2^5*x3^3*x6^3*x7^3*x8^6, x2^5*x3^2*x4*x5^6*x6*x7^3, x2^5*x3^2*x5^7*x6*x7^3, x2^5*x4^10*x6, x2^5*x4^8*x6^4, x2^5*x4^4*x5^3*x6*x7^3*x8^2, x2^5*x4^4*x5^3*x7*x8^6, x2^5*x4^4*x6^5, x2^5*x4^4*x6^4*x7, x2^5*x4^4*x6^3*x7^3, x2^5*x4^4*x6^3*x7*x8^6, x2^5*x4^2*x5^6*x6*x7^3, x2^5*x4*x5^6*x6*x7^3*x8^3, x2^5*x5^7*x6*x7^3*x8^3, x2^5*x5^7*x8^6, x2^5*x5^6*x7*x8^6, x2^4*x4^4*x5^3*x7^8*x8^2, x2^4*x4^4*x7^10*x8^2, x2^4*x5^8*x6^4, x2^4*x5^8*x7^3, x2^4*x5^7*x6^4*x8^3, x2^4*x5^7*x7^4*x8^3, x2^4*x5^6*x6*x7^7*x8^3, x2^4*x5^6*x7^9, x2^4*x5^6*x7^8*x8^3, x2*x3^7*x6^3, x2*x3^6*x4*x6^5, x2*x3^6*x4*x6^4*x7, x2*x3^5*x4*x6^5*x8^2, x2*x3^5*x4*x6^4*x7^2, x2*x3^5*x4*x6^4*x7*x8^2, x2*x3^5*x6^5*x8^6, x2*x3^5*x6^4*x7*x8^6, x2*x3^5*x6^3*x7*x8^7, x2*x3^3*x4^3*x6^5*x8^2, x2*x3^3*x4^3*x6^4*x7^2, x2*x3^3*x4^3*x6^4*x7*x8^2, x2*x3^3*x4*x6^4*x7^3, x2*x3^3*x4*x6^3*x7^4, x2*x3^3*x6^4*x7^3*x8^6, x2*x3^3*x6^3*x7^7, x2*x3^3*x6^3*x7^4*x8^6, x2*x4^4*x6^5*x8^2, x2*x4^4*x6^4*x7^2, x2*x4^4*x6^4*x7*x8^2, x2*x4^4*x6^3*x7^4, x2*x4^3*x6^5*x8^7, x2*x4^3*x6^3*x7*x8^7, x2*x6^3*x7^3*x8^7, x3^9*x4^4, x3^9*x5^2, x3^9*x6^2, x3^9*x7, x3^9*x8^2, x3^8*x6^3, x3^7*x4^9, x3^7*x4^5*x6^3, x3^7*x5^3, x3^7*x5^2*x6^3, x3^7*x8^10, x3^6*x4^9*x6, x3^6*x4^9*x7^8, x3^6*x4^8*x5^3*x6, x3^6*x4^8*x6^3, x3^6*x4^6*x5^3*x6*x7, x3^6*x4^6*x6^3*x7, x3^6*x4^5*x6^5, x3^6*x4^5*x6^4*x7, x3^6*x4^3*x5^3*x6*x7^4, x3^6*x4*x5^4*x6*x7^4, x3^6*x4*x5^3*x6^2*x7^4, x3^6*x4*x5^3*x6*x7^6, x3^6*x4*x5^2*x6^5, x3^6*x4*x5^2*x6^4*x7, x3^6*x5^3*x6*x7^7, x3^6*x5^3*x7^8, x3^6*x7^10, x3^5*x4*x5^2*x6^5*x8^2, x3^5*x4*x5^2*x6^4*x7^2, x3^5*x4*x5^2*x6^4*x7*x8^2, x3^5*x5^3*x7*x8^7, x3^5*x5^2*x6^5*x8^6, x3^5*x5^2*x6^4*x7*x8^6, x3^5*x5^2*x6^3*x7*x8^7, x3^5*x6^5*x8^10, x3^5*x7*x8^10, x3^4*x4^9*x6*x8^2, x3^4*x4^8*x5^6*x6, x3^4*x4^8*x5^4*x6^3, x3^4*x4^8*x5^3*x6*x8^2, x3^4*x4^8*x6^3*x8^2, x3^4*x4^6*x5^7, x3^4*x4^6*x5^6*x6*x7, x3^4*x4^6*x5^4*x6^3*x7, x3^4*x4^6*x5^3*x6*x7*x8^2, x3^4*x4^6*x6^3*x7^2, x3^4*x4^6*x6^3*x7*x8^2, x3^4*x5^8, x3^3*x4^3*x5^3*x6*x7^4*x8^2, x3^3*x4^3*x5^3*x7^4*x8^6, x3^3*x4^3*x5^2*x6^5*x8^2, x3^3*x4^3*x5^2*x6^4*x7^2, x3^3*x4^3*x5^2*x6^4*x7*x8^2, x3^3*x4*x5^4*x6^5, x3^3*x4*x5^4*x6^4*x7, x3^3*x4*x5^4*x6*x7^4*x8^2, x3^3*x4*x5^3*x6^2*x7^4*x8^2, x3^3*x4*x5^3*x6*x7^6*x8^2, x3^3*x4*x5^2*x6^4*x7^3, x3^3*x4*x5^2*x6^3*x7^4, x3^3*x5^4*x6^5*x8^6, x3^3*x5^4*x6^4*x7*x8^6, x3^3*x5^4*x7^4*x8^6, x3^3*x5^3*x6^2*x7^4*x8^6, x3^3*x5^3*x6*x7^7*x8^2, x3^3*x5^3*x7^8*x8^2, x3^3*x5^3*x7^6*x8^6, x3^3*x5^2*x6^4*x7^3*x8^6, x3^3*x5^2*x6^3*x7^7, x3^3*x5^2*x6^3*x7^4*x8^6, x3^3*x6^6, x3^3*x6^3*x7^9, x3^3*x7^10*x8^2, x3^2*x4*x5^6*x6^5, x3^2*x4*x5^6*x6^4*x7, x3^2*x4*x5^6*x6*x7^4, x3^2*x5^7*x6^4, x3^2*x5^7*x7^4, x3^2*x5^6*x6^6, x3^2*x5^6*x6*x7^7, x3^2*x5^6*x7^8, x3*x4^4*x5^3*x7^8*x8^2, x3*x4^4*x7^10*x8^2, x3*x5^8*x6^4, x3*x5^8*x7^3, x3*x5^7*x6^4*x8^3, x3*x5^7*x7^4*x8^3, x3*x5^6*x6*x7^7*x8^3, x3*x5^6*x7^9, x3*x5^6*x7^8*x8^3, x4^10*x5^7, x4^10*x5^4*x6, x4^10*x6*x7^2, x4^10*x6*x8^2, x4^10*x7^8, x4^9*x6*x7^3*x8^2, x4^9*x7^8*x8^2, x4^9*x8^6, x4^8*x5^7*x7^3, x4^8*x5^4*x6^4, x4^8*x5^3*x8^6, x4^8*x6^4*x8^2, x4^8*x6^3*x8^6, x4^8*x8^10, x4^6*x5^7*x8^6, x4^6*x5^6*x6*x7^3, x4^6*x5^3*x6*x7^3*x8^2, x4^6*x5^3*x7*x8^6, x4^6*x6^3*x7^3, x4^6*x6^3*x7*x8^6, x4^5*x5^3*x7^8*x8^2, x4^5*x6^5*x8^2, x4^5*x6^4*x7^2, x4^5*x6^4*x7*x8^2, x4^5*x6^3*x7^4, x4^5*x6^3*x7*x8^7, x4^5*x7^10*x8^2, x4^4*x5^4*x6^5, x4^4*x5^4*x6^4*x7, x4^4*x5^3*x6*x7^4*x8^2, x4^4*x5^3*x7^8*x8^4, x4^4*x5^3*x7^4*x8^6, x4^4*x5^2*x6^5*x8^2, x4^4*x5^2*x6^4*x7^2, x4^4*x5^2*x6^4*x7*x8^2, x4^4*x5^2*x6^3*x7^4, x4^4*x6^6, x4^4*x6^3*x7^9, x4^4*x6*x7^10*x8^2, x4^4*x7^10*x8^4, x4^3*x5^3*x7*x8^7, x4^3*x5^2*x6^5*x8^7, x4^3*x5^2*x6^3*x7*x8^7, x4^3*x6^5*x8^10, x4^3*x7*x8^10, x4^2*x5^7*x6^4, x4^2*x5^7*x7^4, x4^2*x5^6*x6^5, x4^2*x5^6*x6^4*x7, x4^2*x5^6*x6*x7^4, x4^2*x5^6*x7^8, x4*x5^8*x6^4, x4*x5^8*x7^3, x4*x5^7*x6^4*x8^3, x4*x5^7*x7^4*x8^3, x4*x5^6*x6^5*x8^3, x4*x5^6*x6^4*x7*x8^3, x4*x5^6*x6*x7^4*x8^3, x4*x5^6*x7^9, x4*x5^6*x7^8*x8^3, x5^8*x6^6, x5^8*x8^6, x5^7*x6^4*x8^6, x5^7*x8^7, x5^6*x6^6*x7^9, x5^6*x6^6*x8^3, x5^6*x6^5*x8^6, x5^6*x6^4*x7*x8^6, x5^6*x7^10, x5^6*x7^4*x8^6, x5^4*x6^5*x8^7, x5^4*x7*x8^7, x5^3*x7^3*x8^7, x5^2*x6^3*x7^3*x8^7, x6^9, x6^6*x8^7, x6^3*x7^9*x8^7, x7^10*x8^7, x7^3*x8^10 ); frobby-0.9.5/test/commonIdeals/t14.assoprimes000066400000000000000000000053271401527164200211310ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1*x2*x3*x4*x5*x7*x8, x1*x2*x3*x4*x5*x7, x1*x2*x3*x4*x5*x8, x1*x2*x3*x4*x5, x1*x2*x3*x4*x6*x7*x8, x1*x2*x3*x4*x6*x7, x1*x2*x3*x4*x6, x1*x2*x3*x5*x6*x7*x8, x1*x2*x3*x5*x6*x7, x1*x2*x3*x5*x7*x8, x1*x2*x3*x5*x7, x1*x2*x3*x5*x8, x1*x2*x3*x5, x1*x2*x3*x6*x7*x8, x1*x2*x3*x6*x7, x1*x2*x3*x6*x8, x1*x2*x3*x6, x1*x2*x4*x5*x7*x8, x1*x2*x4*x5*x7, x1*x2*x4*x6*x7*x8, x1*x2*x4*x6*x7, x1*x2*x4*x6, x1*x2*x4*x7, x1*x2*x4, x1*x2*x5*x6*x7*x8, x1*x2*x5*x6*x7, x1*x2*x5*x6*x8, x1*x2*x5*x6, x1*x2*x5*x7*x8, x1*x2*x5*x7, x1*x2*x5*x8, x1*x2*x5, x1*x2*x6*x8, x1*x2*x6, x1*x2*x7*x8, x1*x2*x7, x1*x2*x8, x1*x2, x1*x3*x4*x5*x6*x7*x8, x1*x3*x4*x5*x6*x7, x1*x3*x4*x5*x6, x1*x3*x4*x5*x7*x8, x1*x3*x4*x5*x7, x1*x3*x4*x5*x8, x1*x3*x4*x5, x1*x3*x4*x6*x7*x8, x1*x3*x4*x6*x7, x1*x3*x4*x6*x8, x1*x3*x4*x6, x1*x3*x4*x7, x1*x3*x4*x8, x1*x3*x4, x1*x3*x5*x6*x7*x8, x1*x3*x5*x6*x7, x1*x3*x5*x6*x8, x1*x3*x5*x6, x1*x3*x5*x7*x8, x1*x3*x5*x7, x1*x3*x5*x8, x1*x3*x5, x1*x3*x6*x7, x1*x3*x6, x1*x3*x7, x1*x3*x8, x1*x3, x1*x4*x5*x6*x7*x8, x1*x4*x5*x6*x7, x1*x4*x5*x6, x1*x4*x5*x7*x8, x1*x4*x5*x7, x1*x4*x5*x8, x1*x4*x5, x1*x4*x6*x7*x8, x1*x4*x6*x7, x1*x4*x6*x8, x1*x4*x6, x1*x4*x7*x8, x1*x4*x7, x1*x4*x8, x1*x4, x1*x5*x6*x7, x1*x5*x6, x1*x5*x7*x8, x1*x5*x7, x1*x5*x8, x1*x5, x1*x6*x7*x8, x1*x6*x7, x1*x6*x8, x1*x6, x1*x7*x8, x1*x8, x1, x2*x3*x4*x5*x6*x7*x8, x2*x3*x4*x5*x6*x7, x2*x3*x4*x5*x6*x8, x2*x3*x4*x5*x6, x2*x3*x4*x5*x7*x8, x2*x3*x4*x5*x8, x2*x3*x4*x6*x7*x8, x2*x3*x4*x6*x7, x2*x3*x4*x6*x8, x2*x3*x4*x6, x2*x3*x4, x2*x3*x5*x6*x7*x8, x2*x3*x5*x6*x7, x2*x3*x5*x6*x8, x2*x3*x5*x6, x2*x3*x5*x7*x8, x2*x3*x5*x8, x2*x3*x5, x2*x3*x6*x7*x8, x2*x3*x6*x7, x2*x3*x6*x8, x2*x3*x6, x2*x3*x8, x2*x3, x2*x4*x5*x6*x7*x8, x2*x4*x5*x6*x7, x2*x4*x5*x6, x2*x4*x5*x7*x8, x2*x4*x5*x8, x2*x4*x6*x7*x8, x2*x4*x6*x7, x2*x4*x6*x8, x2*x4*x6, x2*x4*x7*x8, x2*x4*x7, x2*x4*x8, x2*x4, x2*x5*x6*x7*x8, x2*x5*x6*x7, x2*x5*x6*x8, x2*x5*x6, x2*x5*x7*x8, x2*x5*x7, x2*x5*x8, x2*x6*x7*x8, x2*x6*x7, x2*x6*x8, x2*x6, x2*x7*x8, x2*x7, x2*x8, x3*x4*x5*x6*x7*x8, x3*x4*x5*x6*x7, x3*x4*x5*x6*x8, x3*x4*x5*x6, x3*x4*x5*x7*x8, x3*x4*x5, x3*x4*x6*x7*x8, x3*x4*x6*x7, x3*x4*x6*x8, x3*x4*x6, x3*x4*x7*x8, x3*x4*x7, x3*x4, x3*x5*x6*x7*x8, x3*x5*x6*x7, x3*x5*x6*x8, x3*x5*x6, x3*x5*x7*x8, x3*x5*x7, x3*x5, x3*x6*x7, x3*x6*x8, x3*x6, x3*x7*x8, x3*x7, x3*x8, x4*x5*x6*x7*x8, x4*x5*x6*x7, x4*x5*x6*x8, x4*x5*x6, x4*x5*x7*x8, x4*x5*x7, x4*x5*x8, x4*x5, x4*x6*x7*x8, x4*x6*x7, x4*x6*x8, x4*x6, x4*x7*x8, x4*x7, x4*x8, x5*x6*x7*x8, x5*x6*x7, x5*x6*x8, x5*x6, x5*x7*x8, x5*x7, x5*x8, x6*x7*x8, x6*x8, x6, x7*x8 ); frobby-0.9.5/test/commonIdeals/t14.dim000066400000000000000000000000021401527164200174760ustar00rootroot000000000000007 frobby-0.9.5/test/commonIdeals/t14.euler000066400000000000000000000000021401527164200200410ustar00rootroot000000000000004 frobby-0.9.5/test/commonIdeals/t14.intersection000066400000000000000000000014601401527164200214440ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^10*x2^5*x3^3*x4^10*x5^2*x6^5*x7^4*x8^5, x1^10*x2*x3^3*x5^2*x6^10*x7^3*x8^5, x1^8*x2^6*x3^3*x4^5*x5*x6^7*x7^7*x8^4, x1^8*x2^3*x3^8*x4^9*x5*x6^2*x7^2*x8^8, x1^8*x2*x3^3*x4^8*x5^5*x6^9*x7^5*x8^4, x1^7*x2^6*x3^4*x5^5*x6^5*x7^9*x8^9, x1^7*x2*x3^4*x4*x5^3*x6^8*x8^9, x1^6*x2^10*x3^2*x4^6*x5^7*x6^5*x7^2*x8, x1^6*x2^5*x3^3*x4^3*x5^2*x6^6*x7^10, x1^6*x3^6*x4^3*x5*x6^10*x7^7*x8^5, x1^5*x2^7*x3^9*x4^10*x6^5*x7*x8^5, x1^5*x2^2*x3^7*x4^7*x5^3*x6^2*x8^4, x1^4*x2^3*x3^5*x4^8*x5^5*x6^5*x7^8, x1^3*x2^9*x3^4*x4^6*x5^4*x6^8*x7^8*x8^6, x1^3*x2^2*x4^7*x5^7*x6^9*x7^10*x8^9, x1^3*x2*x3*x4^2*x5^6*x6^8*x7*x8, x1^3*x3^6*x4*x6^7*x7^8*x8^5, x1^2*x3^3*x4^8*x5^8*x6^10*x7^6*x8^9, x1*x2^7*x3^9*x4^6*x5^3*x6^10*x8^7, x1*x2^3*x3^6*x4^8*x5^7*x6^6*x7^8*x8^10 ); frobby-0.9.5/test/commonIdeals/t14.irrdecom000066400000000000000000000746531401527164200205600ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^10, x2^10, x3^7, x6^8, x7^7 ); I = monomialIdeal( x1^10, x2^10, x3^7, x6^7, x7^8 ); I = monomialIdeal( x1^10, x2^10, x3^5, x6^7, x7^10, x8^9 ); I = monomialIdeal( x1^10, x2^10, x3^5, x6^7, x7^9 ); I = monomialIdeal( x1^10, x2^10, x3^5, x6^6, x8^9 ); I = monomialIdeal( x1^10, x2^10, x3^4, x6^7, x7^10 ); I = monomialIdeal( x1^10, x2^10, x3^4, x6^6 ); I = monomialIdeal( x1^10, x2^7, x4^7, x5^6, x7^7, x8^9 ); I = monomialIdeal( x1^10, x2^7, x5^3, x6^7, x7^10, x8^8 ); I = monomialIdeal( x1^10, x2^7, x5^3, x6^6, x8^8 ); I = monomialIdeal( x1^10, x2^7, x5^3, x7^7, x8^8 ); I = monomialIdeal( x1^10, x2^6, x3^8, x5^3, x6^10, x7^8 ); I = monomialIdeal( x1^10, x2^6, x3^7, x5^6, x6^9, x7^8, x8^9 ); I = monomialIdeal( x1^10, x2^6, x3^7, x5^5, x6^10, x7^8, x8^9 ); I = monomialIdeal( x1^10, x2^6, x3^7, x6^8, x7^8 ); I = monomialIdeal( x1^10, x2^6, x3^6, x4^8, x5^6, x7^10, x8^9 ); I = monomialIdeal( x1^10, x2^6, x3^6, x5^5, x6^8, x7^10 ); I = monomialIdeal( x1^10, x2^6, x3^6, x5^5, x7^10, x8^9 ); I = monomialIdeal( x1^10, x2^6, x3^6, x5^3, x7^10 ); I = monomialIdeal( x1^10, x2^6, x3^5, x5^6, x6^9, x7^10, x8^9 ); I = monomialIdeal( x1^10, x2^6, x3^5, x6^8, x7^10 ); I = monomialIdeal( x1^10, x2^6, x3^5, x6^6 ); I = monomialIdeal( x1^10, x2^6, x3^4, x4^8, x5^6, x7^10 ); I = monomialIdeal( x1^10, x2^6, x3^4, x5^6, x6^9, x7^10 ); I = monomialIdeal( x1^10, x2^6, x3^4, x5^5, x7^10 ); I = monomialIdeal( x1^10, x2^6, x4 ); I = monomialIdeal( x1^10, x2^6, x5^3, x6^10, x7^8, x8^8 ); I = monomialIdeal( x1^10, x2^5, x3^6, x4^8, x5^6, x8^9 ); I = monomialIdeal( x1^10, x2^5, x3^6, x5^5, x8^9 ); I = monomialIdeal( x1^10, x2^5, x3^6, x5^3 ); I = monomialIdeal( x1^10, x2^5, x3^4, x4^8, x5^6 ); I = monomialIdeal( x1^10, x2^5, x3^4, x5^5 ); I = monomialIdeal( x1^10, x2^3, x5^3, x7^7 ); I = monomialIdeal( x1^10, x2^2, x4^8, x5^6, x7^7, x8^9 ); I = monomialIdeal( x1^10, x2^2, x5^6, x7^5, x8^9 ); I = monomialIdeal( x1^10, x2^2, x5^5, x7^7, x8^9 ); I = monomialIdeal( x1^10, x3^9, x4^7, x5^6, x7^7, x8^9 ); I = monomialIdeal( x1^10, x3^9, x5^3, x6^7, x7^10, x8^8 ); I = monomialIdeal( x1^10, x3^9, x5^3, x6^6, x8^8 ); I = monomialIdeal( x1^10, x3^9, x5^3, x7^7, x8^8 ); I = monomialIdeal( x1^10, x3^8, x5^3, x6^7, x7^10 ); I = monomialIdeal( x1^10, x3^8, x5^3, x6^6 ); I = monomialIdeal( x1^10, x3^8, x5^3, x7^7 ); I = monomialIdeal( x1^10, x3^7, x4^8, x5^6, x7^7, x8^9 ); I = monomialIdeal( x1^10, x3^7, x5^7, x6^8, x7^7 ); I = monomialIdeal( x1^10, x3^7, x5^7, x6^7, x7^8 ); I = monomialIdeal( x1^10, x3^7, x5^6, x6^9, x7^7, x8^9 ); I = monomialIdeal( x1^10, x3^7, x5^6, x7^5, x8^9 ); I = monomialIdeal( x1^10, x3^7, x5^5, x6^7, x7^10 ); I = monomialIdeal( x1^10, x3^7, x5^5, x6^6 ); I = monomialIdeal( x1^10, x3^7, x5^5, x7^7, x8^9 ); I = monomialIdeal( x1^10, x3^6, x4^5, x5^6, x7^10, x8^9 ); I = monomialIdeal( x1^10, x3^6, x4^5, x5^3, x7^10 ); I = monomialIdeal( x1^10, x3^6, x4^3, x5^6, x8^9 ); I = monomialIdeal( x1^10, x3^6, x4^3, x5^3 ); I = monomialIdeal( x1^10, x3^6, x4^2, x8^9 ); I = monomialIdeal( x1^10, x3^5, x5^7, x6^7, x7^10, x8^9 ); I = monomialIdeal( x1^10, x3^5, x5^7, x6^7, x7^9 ); I = monomialIdeal( x1^10, x3^5, x5^7, x6^6, x8^9 ); I = monomialIdeal( x1^10, x3^4, x4^8, x5^6, x7^7 ); I = monomialIdeal( x1^10, x3^4, x4^5, x5^6, x7^10 ); I = monomialIdeal( x1^10, x3^4, x4^3, x5^6 ); I = monomialIdeal( x1^10, x3^4, x4^2 ); I = monomialIdeal( x1^10, x3^4, x5^7, x6^7, x7^10 ); I = monomialIdeal( x1^10, x3^4, x5^7, x6^6 ); I = monomialIdeal( x1^10, x3^4, x5^6, x6^9, x7^7 ); I = monomialIdeal( x1^10, x3^4, x5^6, x7^5 ); I = monomialIdeal( x1^10, x3^4, x5^5, x7^7 ); I = monomialIdeal( x1^10, x4^10, x5^3, x7^7, x8^8 ); I = monomialIdeal( x1^10, x4^9, x5^3, x7^7 ); I = monomialIdeal( x1^10, x4^7, x5^6, x7^7, x8^7 ); I = monomialIdeal( x1^10, x4^6, x5^6, x7^7, x8^9 ); I = monomialIdeal( x1^10, x4^3, x5^6, x7^8, x8^9 ); I = monomialIdeal( x1^10, x4^3, x5^3, x7^8 ); I = monomialIdeal( x1^10, x4^2, x7^8, x8^9 ); I = monomialIdeal( x1^10, x4, x5^5 ); I = monomialIdeal( x1^10, x4, x7^9 ); I = monomialIdeal( x1^10, x4, x8^9 ); I = monomialIdeal( x1^8, x2^10, x3^7, x4^8, x6^8, x7^10, x8^5 ); I = monomialIdeal( x1^8, x2^10, x3^7, x6^8, x7^8 ); I = monomialIdeal( x1^8, x2^10, x3^6, x4^8, x6^8, x7^10, x8^9 ); I = monomialIdeal( x1^8, x2^10, x3^6, x4^8, x6^8, x7^9 ); I = monomialIdeal( x1^8, x2^10, x3^5, x6^8, x7^10, x8^9 ); I = monomialIdeal( x1^8, x2^10, x3^5, x6^8, x7^9 ); I = monomialIdeal( x1^8, x2^10, x3^4, x6^8, x7^10 ); I = monomialIdeal( x1^8, x2^10, x4^7, x6^8, x7^10, x8^5 ); I = monomialIdeal( x1^8, x2^10, x4^7, x6^8, x7^8 ); I = monomialIdeal( x1^8, x2^9, x3^6, x4^8, x5^6, x7^10, x8^9 ); I = monomialIdeal( x1^8, x2^9, x3^6, x5^5, x7^10, x8^9 ); I = monomialIdeal( x1^8, x2^9, x3^5, x5^6, x7^10, x8^9 ); I = monomialIdeal( x1^8, x2^7, x5^3, x6^10, x7^8 ); I = monomialIdeal( x1^8, x2^7, x5^3, x6^7, x7^10 ); I = monomialIdeal( x1^8, x2^7, x5^3, x6^6 ); I = monomialIdeal( x1^8, x2^7, x5^3, x7^7 ); I = monomialIdeal( x1^8, x2^7, x5^2, x6^7 ); I = monomialIdeal( x1^8, x2^5, x3^5, x5^6, x8^9 ); I = monomialIdeal( x1^8, x2^5, x3^4, x5^6 ); I = monomialIdeal( x1^8, x2^5, x5^3, x6^7 ); I = monomialIdeal( x1^8, x2^3, x3^7, x5^6, x8^5 ); I = monomialIdeal( x1^8, x2^3, x3^6, x5^6, x8^9 ); I = monomialIdeal( x1^8, x2^2, x5^6, x6^10, x7^8, x8^9 ); I = monomialIdeal( x1^8, x2^2, x5^6, x7^7, x8^9 ); I = monomialIdeal( x1^8, x2^2, x5^6, x8^5 ); I = monomialIdeal( x1^8, x3^9, x5^3, x6^10, x7^8 ); I = monomialIdeal( x1^8, x3^9, x5^3, x6^7, x7^10 ); I = monomialIdeal( x1^8, x3^9, x5^3, x6^6 ); I = monomialIdeal( x1^8, x3^9, x5^3, x7^7 ); I = monomialIdeal( x1^8, x3^9, x5^2, x6^7 ); I = monomialIdeal( x1^8, x3^7, x4^8, x5^7, x6^8, x7^10, x8^5 ); I = monomialIdeal( x1^8, x3^7, x4^8, x5^6, x7^10, x8^5 ); I = monomialIdeal( x1^8, x3^7, x5^7, x6^8, x7^8 ); I = monomialIdeal( x1^8, x3^7, x5^6, x6^10, x7^8, x8^9 ); I = monomialIdeal( x1^8, x3^7, x5^6, x7^8, x8^5 ); I = monomialIdeal( x1^8, x3^7, x5^6, x7^7, x8^9 ); I = monomialIdeal( x1^8, x3^7, x5^5, x7^10, x8^5 ); I = monomialIdeal( x1^8, x3^6, x4^8, x5^7, x6^8, x7^10, x8^9 ); I = monomialIdeal( x1^8, x3^6, x4^8, x5^7, x6^8, x7^9 ); I = monomialIdeal( x1^8, x3^6, x4^8, x5^6, x7^10, x8^6 ); I = monomialIdeal( x1^8, x3^6, x4^6, x5^6, x7^10, x8^9 ); I = monomialIdeal( x1^8, x3^6, x4^6, x6^8, x7^10, x8^9 ); I = monomialIdeal( x1^8, x3^6, x4^6, x6^8, x7^9 ); I = monomialIdeal( x1^8, x3^6, x5^6, x7^8, x8^9 ); I = monomialIdeal( x1^8, x3^6, x5^5, x6^8, x7^10 ); I = monomialIdeal( x1^8, x3^6, x5^5, x7^10, x8^6 ); I = monomialIdeal( x1^8, x3^6, x5^4, x7^10, x8^9 ); I = monomialIdeal( x1^8, x3^6, x5^3, x7^10 ); I = monomialIdeal( x1^8, x3^6, x5^2 ); I = monomialIdeal( x1^8, x3^5, x5^7, x6^8, x7^10, x8^9 ); I = monomialIdeal( x1^8, x3^5, x5^7, x6^8, x7^9 ); I = monomialIdeal( x1^8, x3^5, x5^6, x7^10, x8^6 ); I = monomialIdeal( x1^8, x3^4, x4^6, x6^8, x7^10 ); I = monomialIdeal( x1^8, x3^4, x5^7, x6^8, x7^10 ); I = monomialIdeal( x1^8, x3^4, x5^6, x7^10 ); I = monomialIdeal( x1^8, x4^10, x5^3, x6^10, x7^8 ); I = monomialIdeal( x1^8, x4^10, x5^3, x6^7, x7^10 ); I = monomialIdeal( x1^8, x4^10, x5^3, x6^6 ); I = monomialIdeal( x1^8, x4^10, x5^3, x7^7 ); I = monomialIdeal( x1^8, x4^10, x5^2, x6^7 ); I = monomialIdeal( x1^8, x4^7, x5^7, x6^8, x7^10, x8^5 ); I = monomialIdeal( x1^8, x4^7, x5^7, x6^8, x7^8 ); I = monomialIdeal( x1^8, x4^7, x5^6, x6^10, x7^8, x8^9 ); I = monomialIdeal( x1^8, x4^7, x5^6, x7^10, x8^5 ); I = monomialIdeal( x1^8, x4^6, x6^8, x7^10, x8^5 ); I = monomialIdeal( x1^8, x4^6, x6^8, x7^8 ); I = monomialIdeal( x1^8, x5^3, x6^5 ); I = monomialIdeal( x1^8, x5^3, x7^10, x8^5 ); I = monomialIdeal( x1^8, x5^2, x8^5 ); I = monomialIdeal( x1^7, x2^10, x3^7, x4^8, x6^7, x7^10 ); I = monomialIdeal( x1^7, x2^10, x3^7, x4^8, x6^6 ); I = monomialIdeal( x1^7, x2^10, x3^6, x4^8, x6^8, x7^10 ); I = monomialIdeal( x1^7, x2^10, x3^5, x6^8, x7^10 ); I = monomialIdeal( x1^7, x2^10, x3^5, x6^6 ); I = monomialIdeal( x1^7, x2^10, x4^7, x6^7, x7^10 ); I = monomialIdeal( x1^7, x2^10, x4^7, x6^6 ); I = monomialIdeal( x1^7, x2^9, x3^6, x4^8, x5^6, x7^10 ); I = monomialIdeal( x1^7, x2^9, x3^6, x5^5, x7^10 ); I = monomialIdeal( x1^7, x2^9, x3^5, x5^6, x7^10 ); I = monomialIdeal( x1^7, x2^7, x4^7, x5^6, x7^7 ); I = monomialIdeal( x1^7, x2^7, x4^7, x7 ); I = monomialIdeal( x1^7, x2^5, x3^6, x4^8, x5^6 ); I = monomialIdeal( x1^7, x2^5, x3^6, x5^5 ); I = monomialIdeal( x1^7, x2^5, x3^5, x5^6 ); I = monomialIdeal( x1^7, x2^3, x3^6, x5^6 ); I = monomialIdeal( x1^7, x2^2, x5^6, x6^10, x7^8 ); I = monomialIdeal( x1^7, x2^2, x5^6, x7^7 ); I = monomialIdeal( x1^7, x2^2, x7 ); I = monomialIdeal( x1^7, x3^9, x4^7, x5^6, x7^7 ); I = monomialIdeal( x1^7, x3^9, x4^7, x7 ); I = monomialIdeal( x1^7, x3^7, x4^8, x5^7, x6^7, x7^10 ); I = monomialIdeal( x1^7, x3^7, x4^8, x5^7, x6^6 ); I = monomialIdeal( x1^7, x3^7, x5^6, x6^10, x7^8 ); I = monomialIdeal( x1^7, x3^7, x5^6, x7^7 ); I = monomialIdeal( x1^7, x3^7, x7 ); I = monomialIdeal( x1^7, x3^6, x4^8, x5^7, x6^8, x7^10 ); I = monomialIdeal( x1^7, x3^6, x4^6, x5^6, x7^10 ); I = monomialIdeal( x1^7, x3^6, x4^6, x6^8, x7^10 ); I = monomialIdeal( x1^7, x3^6, x4^3, x5^6 ); I = monomialIdeal( x1^7, x3^6, x4^3, x6^8 ); I = monomialIdeal( x1^7, x3^6, x4^2 ); I = monomialIdeal( x1^7, x3^6, x5^6, x7^8 ); I = monomialIdeal( x1^7, x3^6, x5^4, x7^10 ); I = monomialIdeal( x1^7, x3^5, x5^7, x6^8, x7^10 ); I = monomialIdeal( x1^7, x3^5, x5^7, x6^6 ); I = monomialIdeal( x1^7, x4^7, x5^7, x6^7, x7^10 ); I = monomialIdeal( x1^7, x4^7, x5^7, x6^6 ); I = monomialIdeal( x1^7, x4^7, x5^6, x6^10, x7^8 ); I = monomialIdeal( x1^7, x4^7, x6^10, x7 ); I = monomialIdeal( x1^7, x4^6, x5^6, x7^7 ); I = monomialIdeal( x1^7, x4^6, x6^7, x7^10 ); I = monomialIdeal( x1^7, x4^6, x6^6 ); I = monomialIdeal( x1^7, x4^6, x7 ); I = monomialIdeal( x1^7, x4^3, x5^6, x7^8 ); I = monomialIdeal( x1^7, x4^3, x6^7 ); I = monomialIdeal( x1^7, x4^2, x7^8 ); I = monomialIdeal( x1^7, x4 ); I = monomialIdeal( x1^6, x2^9, x3^6, x4^8, x5^6 ); I = monomialIdeal( x1^6, x2^9, x3^6, x5^5 ); I = monomialIdeal( x1^6, x2^9, x3^5, x5^6 ); I = monomialIdeal( x1^6, x2^7, x4^7, x5^6, x7^8 ); I = monomialIdeal( x1^6, x2^7, x5^3, x6^7 ); I = monomialIdeal( x1^6, x2^7, x5^3, x7^8 ); I = monomialIdeal( x1^6, x2^2, x5^6, x7^8 ); I = monomialIdeal( x1^6, x2, x4^8, x7^8 ); I = monomialIdeal( x1^6, x2, x5^8, x7^8 ); I = monomialIdeal( x1^6, x2, x7^8, x8^9 ); I = monomialIdeal( x1^6, x3^9, x4^7, x5^6, x7^8 ); I = monomialIdeal( x1^6, x3^9, x5^3, x6^7 ); I = monomialIdeal( x1^6, x3^9, x5^3, x7^8 ); I = monomialIdeal( x1^6, x3^7, x4^8, x5^6, x8^5 ); I = monomialIdeal( x1^6, x3^7, x4^8, x6^8, x8^5 ); I = monomialIdeal( x1^6, x3^7, x4^8, x6^7 ); I = monomialIdeal( x1^6, x3^7, x5^6, x7^8 ); I = monomialIdeal( x1^6, x3^7, x5^5, x6^7 ); I = monomialIdeal( x1^6, x3^7, x5^5, x8^5 ); I = monomialIdeal( x1^6, x3^7, x6^8, x7^8 ); I = monomialIdeal( x1^6, x3^6, x4^8, x5^6, x8^6 ); I = monomialIdeal( x1^6, x3^6, x4^8, x6^8 ); I = monomialIdeal( x1^6, x3^6, x4^6, x5^6 ); I = monomialIdeal( x1^6, x3^6, x5^5, x6^8 ); I = monomialIdeal( x1^6, x3^6, x5^5, x8^6 ); I = monomialIdeal( x1^6, x3^6, x5^4 ); I = monomialIdeal( x1^6, x3^5, x5^6, x8^6 ); I = monomialIdeal( x1^6, x3^5, x6^8 ); I = monomialIdeal( x1^6, x3^5, x8 ); I = monomialIdeal( x1^6, x3^4, x5^6 ); I = monomialIdeal( x1^6, x4^10, x5^3, x6^7 ); I = monomialIdeal( x1^6, x4^10, x5^3, x7^8 ); I = monomialIdeal( x1^6, x4^8, x5^6, x8^4 ); I = monomialIdeal( x1^6, x4^8, x6^8, x8^4 ); I = monomialIdeal( x1^6, x4^8, x8 ); I = monomialIdeal( x1^6, x4^7, x5^6, x7^8, x8^7 ); I = monomialIdeal( x1^6, x4^7, x5^6, x8^5 ); I = monomialIdeal( x1^6, x4^7, x6^8, x7^8 ); I = monomialIdeal( x1^6, x4^7, x6^8, x8^5 ); I = monomialIdeal( x1^6, x4^7, x6^7 ); I = monomialIdeal( x1^6, x4^6, x5^6, x7^8 ); I = monomialIdeal( x1^6, x5^5, x8^4 ); I = monomialIdeal( x1^6, x5^3, x8^5 ); I = monomialIdeal( x1^6, x6^8, x7^8, x8^4 ); I = monomialIdeal( x1^5, x2^7, x5^6, x7^8 ); I = monomialIdeal( x1^5, x2^7, x7 ); I = monomialIdeal( x1^5, x2^3, x5^6, x8^5 ); I = monomialIdeal( x1^5, x2^3, x6^8, x8^5 ); I = monomialIdeal( x1^5, x2^3, x6^7 ); I = monomialIdeal( x1^5, x3^9, x5^6, x7^8 ); I = monomialIdeal( x1^5, x3^9, x7 ); I = monomialIdeal( x1^5, x4^8, x5^6, x8^5 ); I = monomialIdeal( x1^5, x4^8, x6^8, x8^5 ); I = monomialIdeal( x1^5, x4^8, x6^7 ); I = monomialIdeal( x1^5, x5^6, x6^10, x7^8 ); I = monomialIdeal( x1^5, x5^6, x7^8, x8^7 ); I = monomialIdeal( x1^5, x5^5, x6^7 ); I = monomialIdeal( x1^5, x5^5, x8^5 ); I = monomialIdeal( x1^5, x5^3, x7^8 ); I = monomialIdeal( x1^5, x6^10, x7 ); I = monomialIdeal( x1^5, x6^8, x7^8 ); I = monomialIdeal( x1^5, x6^5 ); I = monomialIdeal( x1^5, x7, x8^7 ); I = monomialIdeal( x1^4, x2^9, x3^6, x5^6 ); I = monomialIdeal( x1^4, x3^6, x5^6, x8^6 ); I = monomialIdeal( x1^4, x3^6, x6^8 ); I = monomialIdeal( x1^4, x5^7, x6^7 ); I = monomialIdeal( x1^4, x5^6, x8^5 ); I = monomialIdeal( x1^4, x6^8, x8^5 ); I = monomialIdeal( x1^4, x6^7, x8^10 ); I = monomialIdeal( x1^4, x6^6 ); I = monomialIdeal( x1^4, x8 ); I = monomialIdeal( x1^3, x2^7, x4^8 ); I = monomialIdeal( x1^3, x2^7, x5^8, x7^8 ); I = monomialIdeal( x1^3, x2^7, x5^8, x8^10 ); I = monomialIdeal( x1^3, x2^7, x5^7 ); I = monomialIdeal( x1^3, x2^7, x7^6 ); I = monomialIdeal( x1^3, x2^7, x8^9 ); I = monomialIdeal( x1^3, x2^3, x5^8 ); I = monomialIdeal( x1^3, x2^3, x6^10 ); I = monomialIdeal( x1^3, x3^9, x4^8 ); I = monomialIdeal( x1^3, x3^9, x5^8, x7^8 ); I = monomialIdeal( x1^3, x3^9, x5^8, x8^10 ); I = monomialIdeal( x1^3, x3^9, x5^7 ); I = monomialIdeal( x1^3, x3^9, x7^6 ); I = monomialIdeal( x1^3, x3^9, x8^9 ); I = monomialIdeal( x1^3, x3^6, x5^8 ); I = monomialIdeal( x1^3, x3^6, x6^10 ); I = monomialIdeal( x1^3, x3^3 ); I = monomialIdeal( x1^3, x4^8, x6^10 ); I = monomialIdeal( x1^3, x4^6 ); I = monomialIdeal( x1^3, x5^7, x6^10 ); I = monomialIdeal( x1^3, x5^3 ); I = monomialIdeal( x1^3, x6^10, x7^8 ); I = monomialIdeal( x1^3, x6^10, x8^10 ); I = monomialIdeal( x1^3, x8^7 ); I = monomialIdeal( x1^2, x2^7, x7^8 ); I = monomialIdeal( x1^2, x2^7, x8^10 ); I = monomialIdeal( x1^2, x2^3 ); I = monomialIdeal( x1^2, x3^9, x7^8 ); I = monomialIdeal( x1^2, x3^9, x8^10 ); I = monomialIdeal( x1^2, x3^6 ); I = monomialIdeal( x1 ); I = monomialIdeal( x2^10, x3^7, x4^10, x6^8, x7^7 ); I = monomialIdeal( x2^10, x3^7, x4^10, x6^7, x7^8 ); I = monomialIdeal( x2^10, x3^7, x4^8, x6^7, x7^10, x8^9 ); I = monomialIdeal( x2^10, x3^7, x4^8, x6^7, x7^9 ); I = monomialIdeal( x2^10, x3^7, x4^8, x6^6, x8^9 ); I = monomialIdeal( x2^10, x3^7, x6^8, x7^7, x8^5 ); I = monomialIdeal( x2^10, x3^7, x6^8, x7^4 ); I = monomialIdeal( x2^10, x3^7, x6^7, x7^8, x8^5 ); I = monomialIdeal( x2^10, x3^5, x4^10, x6^7, x7^10, x8^9 ); I = monomialIdeal( x2^10, x3^5, x4^10, x6^7, x7^9 ); I = monomialIdeal( x2^10, x3^5, x4^10, x6^6, x8^9 ); I = monomialIdeal( x2^10, x3^5, x6^8, x7^10, x8^4 ); I = monomialIdeal( x2^10, x3^5, x6^7, x7^10, x8^5 ); I = monomialIdeal( x2^10, x3^5, x6^6, x8^5 ); I = monomialIdeal( x2^10, x3^4, x4^10, x6^7, x7^10 ); I = monomialIdeal( x2^10, x3^4, x4^10, x6^6 ); I = monomialIdeal( x2^10, x3^3, x6^8 ); I = monomialIdeal( x2^10, x4^8, x6^8, x7^10, x8^4 ); I = monomialIdeal( x2^10, x4^8, x6^6, x8^4 ); I = monomialIdeal( x2^10, x4^7, x6^8, x7^7 ); I = monomialIdeal( x2^10, x4^7, x6^7, x7^10, x8^9 ); I = monomialIdeal( x2^10, x4^7, x6^7, x7^9 ); I = monomialIdeal( x2^10, x4^7, x6^6, x8^9 ); I = monomialIdeal( x2^10, x6^8, x7^8, x8^4 ); I = monomialIdeal( x2^7, x4^7, x5^6, x7^3, x8^9 ); I = monomialIdeal( x2^7, x4^7, x7, x8^9 ); I = monomialIdeal( x2^7, x5^3, x6^10, x7^4, x8^8 ); I = monomialIdeal( x2^7, x5^3, x7^3, x8^8 ); I = monomialIdeal( x2^7, x5^3, x7^2 ); I = monomialIdeal( x2^7, x5^2, x6^7, x8^8 ); I = monomialIdeal( x2^7, x5^2, x7^7, x8^8 ); I = monomialIdeal( x2^7, x5, x6^7 ); I = monomialIdeal( x2^7, x5, x7^8 ); I = monomialIdeal( x2^6, x3^8, x4^10, x5^3, x6^10, x7^8 ); I = monomialIdeal( x2^6, x3^8, x5^2, x6^10, x7^8 ); I = monomialIdeal( x2^6, x3^7, x4^10, x5^6, x6^9, x7^8, x8^9 ); I = monomialIdeal( x2^6, x3^7, x4^10, x5^5, x6^10, x7^8, x8^9 ); I = monomialIdeal( x2^6, x3^7, x4^10, x6^8, x7^8 ); I = monomialIdeal( x2^6, x3^7, x4^8, x5^6, x6^10, x7^8, x8^9 ); I = monomialIdeal( x2^6, x3^7, x4^8, x5^6, x7^10, x8^5 ); I = monomialIdeal( x2^6, x3^7, x4^8, x6^8, x7^10, x8^5 ); I = monomialIdeal( x2^6, x3^7, x4^8, x6^7, x7^10 ); I = monomialIdeal( x2^6, x3^7, x4^8, x6^6 ); I = monomialIdeal( x2^6, x3^7, x5^6, x6^9, x7^8, x8^5 ); I = monomialIdeal( x2^6, x3^7, x5^5, x7^10, x8^5 ); I = monomialIdeal( x2^6, x3^7, x6^8, x7^8, x8^5 ); I = monomialIdeal( x2^6, x3^6, x4^10, x5^5, x6^10, x7^10, x8^9 ); I = monomialIdeal( x2^6, x3^6, x4^10, x5^5, x6^8, x7^10 ); I = monomialIdeal( x2^6, x3^6, x4^10, x5^3, x6^10, x7^10 ); I = monomialIdeal( x2^6, x3^6, x4^8, x5^6, x6^10, x7^10, x8^9 ); I = monomialIdeal( x2^6, x3^6, x4^8, x6^8, x7^10 ); I = monomialIdeal( x2^6, x3^6, x4^3, x6^8 ); I = monomialIdeal( x2^6, x3^6, x5^2 ); I = monomialIdeal( x2^6, x3^5, x4^10, x5^6, x6^9, x7^10, x8^9 ); I = monomialIdeal( x2^6, x3^5, x4^10, x6^8, x7^10 ); I = monomialIdeal( x2^6, x3^5, x4^10, x6^6 ); I = monomialIdeal( x2^6, x3^5, x5^6, x6^9, x7^10, x8^5 ); I = monomialIdeal( x2^6, x3^5, x6^8, x7^10, x8^5 ); I = monomialIdeal( x2^6, x3^4, x4^10, x5^6, x6^9, x7^10 ); I = monomialIdeal( x2^6, x3^4, x4^10, x5^5, x6^10, x7^10 ); I = monomialIdeal( x2^6, x3^4, x4^8, x5^6, x6^10, x7^10 ); I = monomialIdeal( x2^6, x4^10, x5^3, x6^10, x7^8, x8^8 ); I = monomialIdeal( x2^6, x4^9, x5^3, x6^10, x7^8 ); I = monomialIdeal( x2^6, x4^7, x5^6, x6^10, x7^8, x8^9 ); I = monomialIdeal( x2^6, x4^7, x5^6, x7^10, x8^5 ); I = monomialIdeal( x2^6, x4^7, x6^8, x7^10, x8^5 ); I = monomialIdeal( x2^6, x4^7, x6^8, x7^8 ); I = monomialIdeal( x2^6, x4^7, x6^7, x7^10 ); I = monomialIdeal( x2^6, x4^7, x6^6 ); I = monomialIdeal( x2^6, x4^3, x6^7 ); I = monomialIdeal( x2^6, x4, x6^10 ); I = monomialIdeal( x2^6, x5^3, x7^10, x8^5 ); I = monomialIdeal( x2^6, x5^2, x6^10, x7^8, x8^8 ); I = monomialIdeal( x2^6, x5^2, x8^5 ); I = monomialIdeal( x2^5, x3^8, x5^3, x6^10, x7^8 ); I = monomialIdeal( x2^5, x3^8, x5^3, x6^7 ); I = monomialIdeal( x2^5, x3^7, x4^8, x5^6, x8^5 ); I = monomialIdeal( x2^5, x3^7, x4^8, x6^8, x8^5 ); I = monomialIdeal( x2^5, x3^7, x4^8, x6^7 ); I = monomialIdeal( x2^5, x3^7, x5^6, x6^10, x7^5, x8^9 ); I = monomialIdeal( x2^5, x3^7, x5^6, x6^9, x7^8, x8^9 ); I = monomialIdeal( x2^5, x3^7, x5^5, x6^10, x7^8, x8^9 ); I = monomialIdeal( x2^5, x3^7, x5^5, x6^7 ); I = monomialIdeal( x2^5, x3^7, x5^5, x8^5 ); I = monomialIdeal( x2^5, x3^7, x6^8, x7^8 ); I = monomialIdeal( x2^5, x3^6, x4^8, x5^6, x6^10, x8^9 ); I = monomialIdeal( x2^5, x3^6, x4^8, x6^8 ); I = monomialIdeal( x2^5, x3^6, x5^5, x6^10, x8^9 ); I = monomialIdeal( x2^5, x3^6, x5^5, x6^8 ); I = monomialIdeal( x2^5, x3^6, x5^3, x6^10 ); I = monomialIdeal( x2^5, x3^5, x5^6, x6^9, x8^9 ); I = monomialIdeal( x2^5, x3^5, x5^6, x8^4 ); I = monomialIdeal( x2^5, x3^5, x6^8 ); I = monomialIdeal( x2^5, x3^5, x8 ); I = monomialIdeal( x2^5, x3^4, x4^8, x5^6, x6^10 ); I = monomialIdeal( x2^5, x3^4, x5^6, x6^10, x7^5 ); I = monomialIdeal( x2^5, x3^4, x5^6, x6^9 ); I = monomialIdeal( x2^5, x3^4, x5^5, x6^10 ); I = monomialIdeal( x2^5, x4^9, x5^3, x6^7 ); I = monomialIdeal( x2^5, x4^8, x5^6, x8^4 ); I = monomialIdeal( x2^5, x4^8, x6^8, x8^4 ); I = monomialIdeal( x2^5, x4^8, x8 ); I = monomialIdeal( x2^5, x4^7, x5^6, x8^5 ); I = monomialIdeal( x2^5, x4^7, x6^8, x8^5 ); I = monomialIdeal( x2^5, x4^7, x6^7 ); I = monomialIdeal( x2^5, x5^5, x8^4 ); I = monomialIdeal( x2^5, x5^3, x6^10, x7^8, x8^8 ); I = monomialIdeal( x2^5, x5^3, x6^7, x8^8 ); I = monomialIdeal( x2^5, x5^3, x8^5 ); I = monomialIdeal( x2^3, x3^7, x5^6, x6^9, x8^5 ); I = monomialIdeal( x2^3, x3^7, x6^8, x8^5 ); I = monomialIdeal( x2^3, x3^7, x6^7 ); I = monomialIdeal( x2^3, x3^6, x5^6, x6^9, x8^9 ); I = monomialIdeal( x2^3, x3^6, x6^8 ); I = monomialIdeal( x2^3, x5^6, x8^4 ); I = monomialIdeal( x2^3, x5^3, x6^10, x7^8 ); I = monomialIdeal( x2^3, x5^3, x6^7 ); I = monomialIdeal( x2^3, x5^3, x7^3 ); I = monomialIdeal( x2^3, x5^2, x7^7 ); I = monomialIdeal( x2^3, x6^8, x8^4 ); I = monomialIdeal( x2^3, x8 ); I = monomialIdeal( x2^2, x3 ); I = monomialIdeal( x2^2, x4^8, x5^6, x6^10, x7^8, x8^9 ); I = monomialIdeal( x2^2, x4^8, x5^6, x8^5 ); I = monomialIdeal( x2^2, x5^6, x6^10, x7^5, x8^9 ); I = monomialIdeal( x2^2, x5^6, x6^9, x7^8, x8^9 ); I = monomialIdeal( x2^2, x5^6, x6^9, x8^5 ); I = monomialIdeal( x2^2, x5^6, x7^5, x8^5 ); I = monomialIdeal( x2^2, x5^6, x7^3, x8^9 ); I = monomialIdeal( x2^2, x5^5, x6^10, x7^8, x8^9 ); I = monomialIdeal( x2^2, x5^5, x8^5 ); I = monomialIdeal( x2^2, x6^8, x7^8 ); I = monomialIdeal( x2^2, x6^8, x8^5 ); I = monomialIdeal( x2^2, x6^7 ); I = monomialIdeal( x2^2, x7, x8^9 ); I = monomialIdeal( x2, x3^6, x4^8 ); I = monomialIdeal( x2, x3^6, x5^8 ); I = monomialIdeal( x2, x3^6, x6^10 ); I = monomialIdeal( x2, x3^6, x8^9 ); I = monomialIdeal( x2, x3^3 ); I = monomialIdeal( x2, x4^8, x7^7 ); I = monomialIdeal( x2, x4^3, x7^8 ); I = monomialIdeal( x2, x4 ); I = monomialIdeal( x2, x5^8, x7^7 ); I = monomialIdeal( x2, x6^10, x7^8 ); I = monomialIdeal( x2, x7^7, x8^9 ); I = monomialIdeal( x2, x7^6 ); I = monomialIdeal( x2, x8^5 ); I = monomialIdeal( x3^9, x4^7, x5^6, x7^3, x8^9 ); I = monomialIdeal( x3^9, x4^7, x7, x8^9 ); I = monomialIdeal( x3^9, x5^3, x6^10, x7^4, x8^8 ); I = monomialIdeal( x3^9, x5^3, x7^3, x8^8 ); I = monomialIdeal( x3^9, x5^3, x7^2 ); I = monomialIdeal( x3^9, x5^2, x6^7, x8^8 ); I = monomialIdeal( x3^9, x5^2, x7^7, x8^8 ); I = monomialIdeal( x3^9, x5, x6^7 ); I = monomialIdeal( x3^9, x5, x7^8 ); I = monomialIdeal( x3^8, x4^10, x5^3, x6^10, x7^7 ); I = monomialIdeal( x3^8, x4^10, x5^3, x6^7, x7^10 ); I = monomialIdeal( x3^8, x4^10, x5^3, x6^6 ); I = monomialIdeal( x3^8, x5^3, x6^10, x7^4 ); I = monomialIdeal( x3^8, x5^3, x6^5 ); I = monomialIdeal( x3^8, x5^3, x7^3 ); I = monomialIdeal( x3^8, x5^2, x6^7 ); I = monomialIdeal( x3^8, x5^2, x7^7 ); I = monomialIdeal( x3^7, x4^10, x5^7, x6^8, x7^7 ); I = monomialIdeal( x3^7, x4^10, x5^7, x6^7, x7^8 ); I = monomialIdeal( x3^7, x4^10, x5^6, x6^10, x7^5, x8^9 ); I = monomialIdeal( x3^7, x4^10, x5^6, x6^9, x7^7, x8^9 ); I = monomialIdeal( x3^7, x4^10, x5^5, x6^10, x7^7, x8^9 ); I = monomialIdeal( x3^7, x4^10, x5^5, x6^7, x7^10 ); I = monomialIdeal( x3^7, x4^10, x5^5, x6^6 ); I = monomialIdeal( x3^7, x4^8, x5^7, x6^7, x7^10, x8^9 ); I = monomialIdeal( x3^7, x4^8, x5^7, x6^7, x7^9 ); I = monomialIdeal( x3^7, x4^8, x5^7, x6^6, x8^9 ); I = monomialIdeal( x3^7, x4^8, x5^6, x6^10, x7^7, x8^9 ); I = monomialIdeal( x3^7, x4^8, x5^6, x7^7, x8^5 ); I = monomialIdeal( x3^7, x5^7, x6^8, x7^7, x8^5 ); I = monomialIdeal( x3^7, x5^7, x6^8, x7^4 ); I = monomialIdeal( x3^7, x5^7, x6^7, x7^8, x8^5 ); I = monomialIdeal( x3^7, x5^6, x6^10, x7^4, x8^9 ); I = monomialIdeal( x3^7, x5^6, x6^9, x7^7, x8^5 ); I = monomialIdeal( x3^7, x5^6, x7^5, x8^5 ); I = monomialIdeal( x3^7, x5^6, x7^3, x8^9 ); I = monomialIdeal( x3^7, x5^5, x6^7, x7^10, x8^5 ); I = monomialIdeal( x3^7, x5^5, x6^6, x8^5 ); I = monomialIdeal( x3^7, x5^5, x7^7, x8^5 ); I = monomialIdeal( x3^7, x6^8, x7^2 ); I = monomialIdeal( x3^7, x6^5 ); I = monomialIdeal( x3^7, x7, x8^9 ); I = monomialIdeal( x3^6, x4^5, x5^6, x6^10, x7^10, x8^9 ); I = monomialIdeal( x3^6, x4^5, x5^5, x6^8, x7^10 ); I = monomialIdeal( x3^6, x4^5, x5^3, x6^10, x7^10 ); I = monomialIdeal( x3^6, x4^5, x5^2 ); I = monomialIdeal( x3^6, x4^5, x6^8, x7^10, x8^9 ); I = monomialIdeal( x3^6, x4^5, x6^8, x7^9 ); I = monomialIdeal( x3^6, x4^3, x5^6, x6^10, x8^9 ); I = monomialIdeal( x3^6, x4^3, x5^5, x6^8 ); I = monomialIdeal( x3^6, x4^3, x5^3, x6^10 ); I = monomialIdeal( x3^6, x4^3, x6^8, x8^9 ); I = monomialIdeal( x3^6, x4^2, x6^10, x8^9 ); I = monomialIdeal( x3^6, x5 ); I = monomialIdeal( x3^5, x4^10, x5^7, x6^7, x7^10, x8^9 ); I = monomialIdeal( x3^5, x4^10, x5^7, x6^7, x7^9 ); I = monomialIdeal( x3^5, x4^10, x5^7, x6^6, x8^9 ); I = monomialIdeal( x3^5, x5^7, x6^8, x7^10, x8^4 ); I = monomialIdeal( x3^5, x5^7, x6^7, x7^10, x8^5 ); I = monomialIdeal( x3^5, x5^7, x6^6, x8^5 ); I = monomialIdeal( x3^5, x5^6, x7^10, x8^4 ); I = monomialIdeal( x3^5, x6^6, x8 ); I = monomialIdeal( x3^5, x7^10, x8 ); I = monomialIdeal( x3^4, x4^10, x5^7, x6^7, x7^10 ); I = monomialIdeal( x3^4, x4^10, x5^7, x6^6 ); I = monomialIdeal( x3^4, x4^10, x5^6, x6^10, x7^5 ); I = monomialIdeal( x3^4, x4^10, x5^6, x6^9, x7^7 ); I = monomialIdeal( x3^4, x4^10, x5^5, x6^10, x7^7 ); I = monomialIdeal( x3^4, x4^8, x5^6, x6^10, x7^7 ); I = monomialIdeal( x3^4, x4^6, x6^7, x7^10 ); I = monomialIdeal( x3^4, x4^6, x6^6 ); I = monomialIdeal( x3^4, x4^5, x5^6, x6^10, x7^10 ); I = monomialIdeal( x3^4, x4^5, x6^8, x7^10 ); I = monomialIdeal( x3^4, x4^3, x5^6, x6^10 ); I = monomialIdeal( x3^4, x4^3, x6^8 ); I = monomialIdeal( x3^4, x4^2, x6^10 ); I = monomialIdeal( x3^4, x4^2, x7^3 ); I = monomialIdeal( x3^4, x5^6, x6^10, x7^4 ); I = monomialIdeal( x3^4, x5^6, x7^3 ); I = monomialIdeal( x3^4, x7 ); I = monomialIdeal( x3^3, x4^6, x6^8 ); I = monomialIdeal( x3^3, x4^2 ); I = monomialIdeal( x3^3, x5^7, x6^8 ); I = monomialIdeal( x3^3, x5^6 ); I = monomialIdeal( x3^3, x8 ); I = monomialIdeal( x3^2, x6^8 ); I = monomialIdeal( x3, x4^7 ); I = monomialIdeal( x3, x5^7 ); I = monomialIdeal( x3, x6^9 ); I = monomialIdeal( x3, x7^10 ); I = monomialIdeal( x3, x8^9 ); I = monomialIdeal( x4^10, x5^3, x6^10, x7^7, x8^8 ); I = monomialIdeal( x4^10, x5^3, x6^7, x7^10, x8^8 ); I = monomialIdeal( x4^10, x5^3, x6^6, x8^8 ); I = monomialIdeal( x4^10, x5^3, x7^3, x8^8 ); I = monomialIdeal( x4^10, x5^3, x7^2 ); I = monomialIdeal( x4^10, x5^2, x6^7, x8^8 ); I = monomialIdeal( x4^10, x5^2, x7^7, x8^8 ); I = monomialIdeal( x4^10, x5, x6^7 ); I = monomialIdeal( x4^10, x5, x7^8 ); I = monomialIdeal( x4^9, x5^3, x6^10, x7^7 ); I = monomialIdeal( x4^9, x5^3, x6^7, x7^10 ); I = monomialIdeal( x4^9, x5^3, x6^6 ); I = monomialIdeal( x4^9, x5^3, x7^3 ); I = monomialIdeal( x4^9, x5^2, x6^7 ); I = monomialIdeal( x4^9, x5^2, x7^7 ); I = monomialIdeal( x4^8, x5^7, x6^8, x7^10, x8^4 ); I = monomialIdeal( x4^8, x5^7, x6^6, x8^4 ); I = monomialIdeal( x4^8, x5^6, x7^10, x8^4 ); I = monomialIdeal( x4^8, x6^6, x8 ); I = monomialIdeal( x4^8, x7^10, x8 ); I = monomialIdeal( x4^7, x5^7, x6^8, x7^7 ); I = monomialIdeal( x4^7, x5^7, x6^7, x7^10, x8^9 ); I = monomialIdeal( x4^7, x5^7, x6^7, x7^9 ); I = monomialIdeal( x4^7, x5^7, x6^6, x8^9 ); I = monomialIdeal( x4^7, x5^6, x6^10, x7^7, x8^9 ); I = monomialIdeal( x4^7, x5^6, x7^7, x8^5 ); I = monomialIdeal( x4^7, x5^6, x7^3, x8^7 ); I = monomialIdeal( x4^7, x5^5, x6^7, x7^10 ); I = monomialIdeal( x4^7, x5^5, x6^6 ); I = monomialIdeal( x4^7, x6^10, x7, x8^9 ); I = monomialIdeal( x4^7, x6^8, x7^2 ); I = monomialIdeal( x4^7, x6^5 ); I = monomialIdeal( x4^7, x7, x8^7 ); I = monomialIdeal( x4^6, x5^6, x7^3, x8^9 ); I = monomialIdeal( x4^6, x6^8, x7^10, x8^4 ); I = monomialIdeal( x4^6, x6^8, x7^7 ); I = monomialIdeal( x4^6, x6^7, x7^10, x8^9 ); I = monomialIdeal( x4^6, x6^7, x7^9 ); I = monomialIdeal( x4^6, x6^6, x8^9 ); I = monomialIdeal( x4^6, x7, x8^9 ); I = monomialIdeal( x4^5, x5^6, x6^10, x7^8, x8^9 ); I = monomialIdeal( x4^5, x5^6, x7^10, x8^5 ); I = monomialIdeal( x4^5, x5^3, x6^10, x7^8 ); I = monomialIdeal( x4^5, x5^2, x8^5 ); I = monomialIdeal( x4^5, x6^8, x7^10, x8^5 ); I = monomialIdeal( x4^5, x6^8, x7^8 ); I = monomialIdeal( x4^3, x5^6, x8^5 ); I = monomialIdeal( x4^3, x5^5, x6^7 ); I = monomialIdeal( x4^3, x5^2, x7^8 ); I = monomialIdeal( x4^3, x6^8, x8^5 ); I = monomialIdeal( x4^3, x6^7, x8^9 ); I = monomialIdeal( x4^3, x8 ); I = monomialIdeal( x4^2, x6^10, x7^8, x8^9 ); I = monomialIdeal( x4^2, x7^3, x8^9 ); I = monomialIdeal( x4^2, x8^5 ); I = monomialIdeal( x4, x5^5, x6^10 ); I = monomialIdeal( x4, x5^2 ); I = monomialIdeal( x4, x6^10, x7^9 ); I = monomialIdeal( x4, x6^10, x8^9 ); I = monomialIdeal( x4, x7^3 ); I = monomialIdeal( x5^7, x6^8, x7^8, x8^4 ); I = monomialIdeal( x5^6, x7^8, x8^4 ); I = monomialIdeal( x5^5, x6^6, x8^4 ); I = monomialIdeal( x5^5, x7^10, x8^4 ); I = monomialIdeal( x5^3, x6^7, x7^10, x8^5 ); I = monomialIdeal( x5^3, x6^6, x8^5 ); I = monomialIdeal( x5^3, x6^5, x7^2 ); I = monomialIdeal( x5^3, x6^5, x8^8 ); I = monomialIdeal( x5^3, x7^7, x8^5 ); I = monomialIdeal( x5^3, x7 ); I = monomialIdeal( x5^2, x6^7, x8^5 ); I = monomialIdeal( x5^2, x8^4 ); I = monomialIdeal( x5, x6^5 ); I = monomialIdeal( x5, x8^5 ); I = monomialIdeal( x6^8, x7^2, x8^4 ); I = monomialIdeal( x6^5, x8^4 ); I = monomialIdeal( x6^2 ); I = monomialIdeal( x7^8, x8 ); I = monomialIdeal( x7, x8^4 ); frobby-0.9.5/test/commonIdeals/t14.irrdecom_ideal000066400000000000000000000340041401527164200217000ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^10*x2^10*x3^7*x6^8*x7^7, x1^10*x2^10*x3^7*x6^7*x7^8, x1^10*x2^10*x3^5*x6^7*x7^10*x8^9, x1^10*x2^10*x3^5*x6^7*x7^9, x1^10*x2^10*x3^5*x6^6*x8^9, x1^10*x2^10*x3^4*x6^7*x7^10, x1^10*x2^10*x3^4*x6^6, x1^10*x2^7*x4^7*x5^6*x7^7*x8^9, x1^10*x2^7*x5^3*x6^7*x7^10*x8^8, x1^10*x2^7*x5^3*x6^6*x8^8, x1^10*x2^7*x5^3*x7^7*x8^8, x1^10*x2^6*x3^8*x5^3*x6^10*x7^8, x1^10*x2^6*x3^7*x5^6*x6^9*x7^8*x8^9, x1^10*x2^6*x3^7*x5^5*x6^10*x7^8*x8^9, x1^10*x2^6*x3^7*x6^8*x7^8, x1^10*x2^6*x3^6*x4^8*x5^6*x7^10*x8^9, x1^10*x2^6*x3^6*x5^5*x6^8*x7^10, x1^10*x2^6*x3^6*x5^5*x7^10*x8^9, x1^10*x2^6*x3^6*x5^3*x7^10, x1^10*x2^6*x3^5*x5^6*x6^9*x7^10*x8^9, x1^10*x2^6*x3^5*x6^8*x7^10, x1^10*x2^6*x3^5*x6^6, x1^10*x2^6*x3^4*x4^8*x5^6*x7^10, x1^10*x2^6*x3^4*x5^6*x6^9*x7^10, x1^10*x2^6*x3^4*x5^5*x7^10, x1^10*x2^6*x4, x1^10*x2^6*x5^3*x6^10*x7^8*x8^8, x1^10*x2^5*x3^6*x4^8*x5^6*x8^9, x1^10*x2^5*x3^6*x5^5*x8^9, x1^10*x2^5*x3^6*x5^3, x1^10*x2^5*x3^4*x4^8*x5^6, x1^10*x2^5*x3^4*x5^5, x1^10*x2^3*x5^3*x7^7, x1^10*x2^2*x4^8*x5^6*x7^7*x8^9, x1^10*x2^2*x5^6*x7^5*x8^9, x1^10*x2^2*x5^5*x7^7*x8^9, x1^10*x3^9*x4^7*x5^6*x7^7*x8^9, x1^10*x3^9*x5^3*x6^7*x7^10*x8^8, x1^10*x3^9*x5^3*x6^6*x8^8, x1^10*x3^9*x5^3*x7^7*x8^8, x1^10*x3^8*x5^3*x6^7*x7^10, x1^10*x3^8*x5^3*x6^6, x1^10*x3^8*x5^3*x7^7, x1^10*x3^7*x4^8*x5^6*x7^7*x8^9, x1^10*x3^7*x5^7*x6^8*x7^7, x1^10*x3^7*x5^7*x6^7*x7^8, x1^10*x3^7*x5^6*x6^9*x7^7*x8^9, x1^10*x3^7*x5^6*x7^5*x8^9, x1^10*x3^7*x5^5*x6^7*x7^10, x1^10*x3^7*x5^5*x6^6, x1^10*x3^7*x5^5*x7^7*x8^9, x1^10*x3^6*x4^5*x5^6*x7^10*x8^9, x1^10*x3^6*x4^5*x5^3*x7^10, x1^10*x3^6*x4^3*x5^6*x8^9, x1^10*x3^6*x4^3*x5^3, x1^10*x3^6*x4^2*x8^9, x1^10*x3^5*x5^7*x6^7*x7^10*x8^9, x1^10*x3^5*x5^7*x6^7*x7^9, x1^10*x3^5*x5^7*x6^6*x8^9, x1^10*x3^4*x4^8*x5^6*x7^7, x1^10*x3^4*x4^5*x5^6*x7^10, x1^10*x3^4*x4^3*x5^6, x1^10*x3^4*x4^2, x1^10*x3^4*x5^7*x6^7*x7^10, x1^10*x3^4*x5^7*x6^6, x1^10*x3^4*x5^6*x6^9*x7^7, x1^10*x3^4*x5^6*x7^5, x1^10*x3^4*x5^5*x7^7, x1^10*x4^10*x5^3*x7^7*x8^8, x1^10*x4^9*x5^3*x7^7, x1^10*x4^7*x5^6*x7^7*x8^7, x1^10*x4^6*x5^6*x7^7*x8^9, x1^10*x4^3*x5^6*x7^8*x8^9, x1^10*x4^3*x5^3*x7^8, x1^10*x4^2*x7^8*x8^9, x1^10*x4*x5^5, x1^10*x4*x7^9, x1^10*x4*x8^9, x1^8*x2^10*x3^7*x4^8*x6^8*x7^10*x8^5, x1^8*x2^10*x3^7*x6^8*x7^8, x1^8*x2^10*x3^6*x4^8*x6^8*x7^10*x8^9, x1^8*x2^10*x3^6*x4^8*x6^8*x7^9, x1^8*x2^10*x3^5*x6^8*x7^10*x8^9, x1^8*x2^10*x3^5*x6^8*x7^9, x1^8*x2^10*x3^4*x6^8*x7^10, x1^8*x2^10*x4^7*x6^8*x7^10*x8^5, x1^8*x2^10*x4^7*x6^8*x7^8, x1^8*x2^9*x3^6*x4^8*x5^6*x7^10*x8^9, x1^8*x2^9*x3^6*x5^5*x7^10*x8^9, x1^8*x2^9*x3^5*x5^6*x7^10*x8^9, x1^8*x2^7*x5^3*x6^10*x7^8, x1^8*x2^7*x5^3*x6^7*x7^10, x1^8*x2^7*x5^3*x6^6, x1^8*x2^7*x5^3*x7^7, x1^8*x2^7*x5^2*x6^7, x1^8*x2^5*x3^5*x5^6*x8^9, x1^8*x2^5*x3^4*x5^6, x1^8*x2^5*x5^3*x6^7, x1^8*x2^3*x3^7*x5^6*x8^5, x1^8*x2^3*x3^6*x5^6*x8^9, x1^8*x2^2*x5^6*x6^10*x7^8*x8^9, x1^8*x2^2*x5^6*x7^7*x8^9, x1^8*x2^2*x5^6*x8^5, x1^8*x3^9*x5^3*x6^10*x7^8, x1^8*x3^9*x5^3*x6^7*x7^10, x1^8*x3^9*x5^3*x6^6, x1^8*x3^9*x5^3*x7^7, x1^8*x3^9*x5^2*x6^7, x1^8*x3^7*x4^8*x5^7*x6^8*x7^10*x8^5, x1^8*x3^7*x4^8*x5^6*x7^10*x8^5, x1^8*x3^7*x5^7*x6^8*x7^8, x1^8*x3^7*x5^6*x6^10*x7^8*x8^9, x1^8*x3^7*x5^6*x7^8*x8^5, x1^8*x3^7*x5^6*x7^7*x8^9, x1^8*x3^7*x5^5*x7^10*x8^5, x1^8*x3^6*x4^8*x5^7*x6^8*x7^10*x8^9, x1^8*x3^6*x4^8*x5^7*x6^8*x7^9, x1^8*x3^6*x4^8*x5^6*x7^10*x8^6, x1^8*x3^6*x4^6*x5^6*x7^10*x8^9, x1^8*x3^6*x4^6*x6^8*x7^10*x8^9, x1^8*x3^6*x4^6*x6^8*x7^9, x1^8*x3^6*x5^6*x7^8*x8^9, x1^8*x3^6*x5^5*x6^8*x7^10, x1^8*x3^6*x5^5*x7^10*x8^6, x1^8*x3^6*x5^4*x7^10*x8^9, x1^8*x3^6*x5^3*x7^10, x1^8*x3^6*x5^2, x1^8*x3^5*x5^7*x6^8*x7^10*x8^9, x1^8*x3^5*x5^7*x6^8*x7^9, x1^8*x3^5*x5^6*x7^10*x8^6, x1^8*x3^4*x4^6*x6^8*x7^10, x1^8*x3^4*x5^7*x6^8*x7^10, x1^8*x3^4*x5^6*x7^10, x1^8*x4^10*x5^3*x6^10*x7^8, x1^8*x4^10*x5^3*x6^7*x7^10, x1^8*x4^10*x5^3*x6^6, x1^8*x4^10*x5^3*x7^7, x1^8*x4^10*x5^2*x6^7, x1^8*x4^7*x5^7*x6^8*x7^10*x8^5, x1^8*x4^7*x5^7*x6^8*x7^8, x1^8*x4^7*x5^6*x6^10*x7^8*x8^9, x1^8*x4^7*x5^6*x7^10*x8^5, x1^8*x4^6*x6^8*x7^10*x8^5, x1^8*x4^6*x6^8*x7^8, x1^8*x5^3*x6^5, x1^8*x5^3*x7^10*x8^5, x1^8*x5^2*x8^5, x1^7*x2^10*x3^7*x4^8*x6^7*x7^10, x1^7*x2^10*x3^7*x4^8*x6^6, x1^7*x2^10*x3^6*x4^8*x6^8*x7^10, x1^7*x2^10*x3^5*x6^8*x7^10, x1^7*x2^10*x3^5*x6^6, x1^7*x2^10*x4^7*x6^7*x7^10, x1^7*x2^10*x4^7*x6^6, x1^7*x2^9*x3^6*x4^8*x5^6*x7^10, x1^7*x2^9*x3^6*x5^5*x7^10, x1^7*x2^9*x3^5*x5^6*x7^10, x1^7*x2^7*x4^7*x5^6*x7^7, x1^7*x2^7*x4^7*x7, x1^7*x2^5*x3^6*x4^8*x5^6, x1^7*x2^5*x3^6*x5^5, x1^7*x2^5*x3^5*x5^6, x1^7*x2^3*x3^6*x5^6, x1^7*x2^2*x5^6*x6^10*x7^8, x1^7*x2^2*x5^6*x7^7, x1^7*x2^2*x7, x1^7*x3^9*x4^7*x5^6*x7^7, x1^7*x3^9*x4^7*x7, x1^7*x3^7*x4^8*x5^7*x6^7*x7^10, x1^7*x3^7*x4^8*x5^7*x6^6, x1^7*x3^7*x5^6*x6^10*x7^8, x1^7*x3^7*x5^6*x7^7, x1^7*x3^7*x7, x1^7*x3^6*x4^8*x5^7*x6^8*x7^10, x1^7*x3^6*x4^6*x5^6*x7^10, x1^7*x3^6*x4^6*x6^8*x7^10, x1^7*x3^6*x4^3*x5^6, x1^7*x3^6*x4^3*x6^8, x1^7*x3^6*x4^2, x1^7*x3^6*x5^6*x7^8, x1^7*x3^6*x5^4*x7^10, x1^7*x3^5*x5^7*x6^8*x7^10, x1^7*x3^5*x5^7*x6^6, x1^7*x4^7*x5^7*x6^7*x7^10, x1^7*x4^7*x5^7*x6^6, x1^7*x4^7*x5^6*x6^10*x7^8, x1^7*x4^7*x6^10*x7, x1^7*x4^6*x5^6*x7^7, x1^7*x4^6*x6^7*x7^10, x1^7*x4^6*x6^6, x1^7*x4^6*x7, x1^7*x4^3*x5^6*x7^8, x1^7*x4^3*x6^7, x1^7*x4^2*x7^8, x1^7*x4, x1^6*x2^9*x3^6*x4^8*x5^6, x1^6*x2^9*x3^6*x5^5, x1^6*x2^9*x3^5*x5^6, x1^6*x2^7*x4^7*x5^6*x7^8, x1^6*x2^7*x5^3*x6^7, x1^6*x2^7*x5^3*x7^8, x1^6*x2^2*x5^6*x7^8, x1^6*x2*x4^8*x7^8, x1^6*x2*x5^8*x7^8, x1^6*x2*x7^8*x8^9, x1^6*x3^9*x4^7*x5^6*x7^8, x1^6*x3^9*x5^3*x6^7, x1^6*x3^9*x5^3*x7^8, x1^6*x3^7*x4^8*x5^6*x8^5, x1^6*x3^7*x4^8*x6^8*x8^5, x1^6*x3^7*x4^8*x6^7, x1^6*x3^7*x5^6*x7^8, x1^6*x3^7*x5^5*x6^7, x1^6*x3^7*x5^5*x8^5, x1^6*x3^7*x6^8*x7^8, x1^6*x3^6*x4^8*x5^6*x8^6, x1^6*x3^6*x4^8*x6^8, x1^6*x3^6*x4^6*x5^6, x1^6*x3^6*x5^5*x6^8, x1^6*x3^6*x5^5*x8^6, x1^6*x3^6*x5^4, x1^6*x3^5*x5^6*x8^6, x1^6*x3^5*x6^8, x1^6*x3^5*x8, x1^6*x3^4*x5^6, x1^6*x4^10*x5^3*x6^7, x1^6*x4^10*x5^3*x7^8, x1^6*x4^8*x5^6*x8^4, x1^6*x4^8*x6^8*x8^4, x1^6*x4^8*x8, x1^6*x4^7*x5^6*x7^8*x8^7, x1^6*x4^7*x5^6*x8^5, x1^6*x4^7*x6^8*x7^8, x1^6*x4^7*x6^8*x8^5, x1^6*x4^7*x6^7, x1^6*x4^6*x5^6*x7^8, x1^6*x5^5*x8^4, x1^6*x5^3*x8^5, x1^6*x6^8*x7^8*x8^4, x1^5*x2^7*x5^6*x7^8, x1^5*x2^7*x7, x1^5*x2^3*x5^6*x8^5, x1^5*x2^3*x6^8*x8^5, x1^5*x2^3*x6^7, x1^5*x3^9*x5^6*x7^8, x1^5*x3^9*x7, x1^5*x4^8*x5^6*x8^5, x1^5*x4^8*x6^8*x8^5, x1^5*x4^8*x6^7, x1^5*x5^6*x6^10*x7^8, x1^5*x5^6*x7^8*x8^7, x1^5*x5^5*x6^7, x1^5*x5^5*x8^5, x1^5*x5^3*x7^8, x1^5*x6^10*x7, x1^5*x6^8*x7^8, x1^5*x6^5, x1^5*x7*x8^7, x1^4*x2^9*x3^6*x5^6, x1^4*x3^6*x5^6*x8^6, x1^4*x3^6*x6^8, x1^4*x5^7*x6^7, x1^4*x5^6*x8^5, x1^4*x6^8*x8^5, x1^4*x6^7*x8^10, x1^4*x6^6, x1^4*x8, x1^3*x2^7*x4^8, x1^3*x2^7*x5^8*x7^8, x1^3*x2^7*x5^8*x8^10, x1^3*x2^7*x5^7, x1^3*x2^7*x7^6, x1^3*x2^7*x8^9, x1^3*x2^3*x5^8, x1^3*x2^3*x6^10, x1^3*x3^9*x4^8, x1^3*x3^9*x5^8*x7^8, x1^3*x3^9*x5^8*x8^10, x1^3*x3^9*x5^7, x1^3*x3^9*x7^6, x1^3*x3^9*x8^9, x1^3*x3^6*x5^8, x1^3*x3^6*x6^10, x1^3*x3^3, x1^3*x4^8*x6^10, x1^3*x4^6, x1^3*x5^7*x6^10, x1^3*x5^3, x1^3*x6^10*x7^8, x1^3*x6^10*x8^10, x1^3*x8^7, x1^2*x2^7*x7^8, x1^2*x2^7*x8^10, x1^2*x2^3, x1^2*x3^9*x7^8, x1^2*x3^9*x8^10, x1^2*x3^6, x1, x2^10*x3^7*x4^10*x6^8*x7^7, x2^10*x3^7*x4^10*x6^7*x7^8, x2^10*x3^7*x4^8*x6^7*x7^10*x8^9, x2^10*x3^7*x4^8*x6^7*x7^9, x2^10*x3^7*x4^8*x6^6*x8^9, x2^10*x3^7*x6^8*x7^7*x8^5, x2^10*x3^7*x6^8*x7^4, x2^10*x3^7*x6^7*x7^8*x8^5, x2^10*x3^5*x4^10*x6^7*x7^10*x8^9, x2^10*x3^5*x4^10*x6^7*x7^9, x2^10*x3^5*x4^10*x6^6*x8^9, x2^10*x3^5*x6^8*x7^10*x8^4, x2^10*x3^5*x6^7*x7^10*x8^5, x2^10*x3^5*x6^6*x8^5, x2^10*x3^4*x4^10*x6^7*x7^10, x2^10*x3^4*x4^10*x6^6, x2^10*x3^3*x6^8, x2^10*x4^8*x6^8*x7^10*x8^4, x2^10*x4^8*x6^6*x8^4, x2^10*x4^7*x6^8*x7^7, x2^10*x4^7*x6^7*x7^10*x8^9, x2^10*x4^7*x6^7*x7^9, x2^10*x4^7*x6^6*x8^9, x2^10*x6^8*x7^8*x8^4, x2^7*x4^7*x5^6*x7^3*x8^9, x2^7*x4^7*x7*x8^9, x2^7*x5^3*x6^10*x7^4*x8^8, x2^7*x5^3*x7^3*x8^8, x2^7*x5^3*x7^2, x2^7*x5^2*x6^7*x8^8, x2^7*x5^2*x7^7*x8^8, x2^7*x5*x6^7, x2^7*x5*x7^8, x2^6*x3^8*x4^10*x5^3*x6^10*x7^8, x2^6*x3^8*x5^2*x6^10*x7^8, x2^6*x3^7*x4^10*x5^6*x6^9*x7^8*x8^9, x2^6*x3^7*x4^10*x5^5*x6^10*x7^8*x8^9, x2^6*x3^7*x4^10*x6^8*x7^8, x2^6*x3^7*x4^8*x5^6*x6^10*x7^8*x8^9, x2^6*x3^7*x4^8*x5^6*x7^10*x8^5, x2^6*x3^7*x4^8*x6^8*x7^10*x8^5, x2^6*x3^7*x4^8*x6^7*x7^10, x2^6*x3^7*x4^8*x6^6, x2^6*x3^7*x5^6*x6^9*x7^8*x8^5, x2^6*x3^7*x5^5*x7^10*x8^5, x2^6*x3^7*x6^8*x7^8*x8^5, x2^6*x3^6*x4^10*x5^5*x6^10*x7^10*x8^9, x2^6*x3^6*x4^10*x5^5*x6^8*x7^10, x2^6*x3^6*x4^10*x5^3*x6^10*x7^10, x2^6*x3^6*x4^8*x5^6*x6^10*x7^10*x8^9, x2^6*x3^6*x4^8*x6^8*x7^10, x2^6*x3^6*x4^3*x6^8, x2^6*x3^6*x5^2, x2^6*x3^5*x4^10*x5^6*x6^9*x7^10*x8^9, x2^6*x3^5*x4^10*x6^8*x7^10, x2^6*x3^5*x4^10*x6^6, x2^6*x3^5*x5^6*x6^9*x7^10*x8^5, x2^6*x3^5*x6^8*x7^10*x8^5, x2^6*x3^4*x4^10*x5^6*x6^9*x7^10, x2^6*x3^4*x4^10*x5^5*x6^10*x7^10, x2^6*x3^4*x4^8*x5^6*x6^10*x7^10, x2^6*x4^10*x5^3*x6^10*x7^8*x8^8, x2^6*x4^9*x5^3*x6^10*x7^8, x2^6*x4^7*x5^6*x6^10*x7^8*x8^9, x2^6*x4^7*x5^6*x7^10*x8^5, x2^6*x4^7*x6^8*x7^10*x8^5, x2^6*x4^7*x6^8*x7^8, x2^6*x4^7*x6^7*x7^10, x2^6*x4^7*x6^6, x2^6*x4^3*x6^7, x2^6*x4*x6^10, x2^6*x5^3*x7^10*x8^5, x2^6*x5^2*x6^10*x7^8*x8^8, x2^6*x5^2*x8^5, x2^5*x3^8*x5^3*x6^10*x7^8, x2^5*x3^8*x5^3*x6^7, x2^5*x3^7*x4^8*x5^6*x8^5, x2^5*x3^7*x4^8*x6^8*x8^5, x2^5*x3^7*x4^8*x6^7, x2^5*x3^7*x5^6*x6^10*x7^5*x8^9, x2^5*x3^7*x5^6*x6^9*x7^8*x8^9, x2^5*x3^7*x5^5*x6^10*x7^8*x8^9, x2^5*x3^7*x5^5*x6^7, x2^5*x3^7*x5^5*x8^5, x2^5*x3^7*x6^8*x7^8, x2^5*x3^6*x4^8*x5^6*x6^10*x8^9, x2^5*x3^6*x4^8*x6^8, x2^5*x3^6*x5^5*x6^10*x8^9, x2^5*x3^6*x5^5*x6^8, x2^5*x3^6*x5^3*x6^10, x2^5*x3^5*x5^6*x6^9*x8^9, x2^5*x3^5*x5^6*x8^4, x2^5*x3^5*x6^8, x2^5*x3^5*x8, x2^5*x3^4*x4^8*x5^6*x6^10, x2^5*x3^4*x5^6*x6^10*x7^5, x2^5*x3^4*x5^6*x6^9, x2^5*x3^4*x5^5*x6^10, x2^5*x4^9*x5^3*x6^7, x2^5*x4^8*x5^6*x8^4, x2^5*x4^8*x6^8*x8^4, x2^5*x4^8*x8, x2^5*x4^7*x5^6*x8^5, x2^5*x4^7*x6^8*x8^5, x2^5*x4^7*x6^7, x2^5*x5^5*x8^4, x2^5*x5^3*x6^10*x7^8*x8^8, x2^5*x5^3*x6^7*x8^8, x2^5*x5^3*x8^5, x2^3*x3^7*x5^6*x6^9*x8^5, x2^3*x3^7*x6^8*x8^5, x2^3*x3^7*x6^7, x2^3*x3^6*x5^6*x6^9*x8^9, x2^3*x3^6*x6^8, x2^3*x5^6*x8^4, x2^3*x5^3*x6^10*x7^8, x2^3*x5^3*x6^7, x2^3*x5^3*x7^3, x2^3*x5^2*x7^7, x2^3*x6^8*x8^4, x2^3*x8, x2^2*x3, x2^2*x4^8*x5^6*x6^10*x7^8*x8^9, x2^2*x4^8*x5^6*x8^5, x2^2*x5^6*x6^10*x7^5*x8^9, x2^2*x5^6*x6^9*x7^8*x8^9, x2^2*x5^6*x6^9*x8^5, x2^2*x5^6*x7^5*x8^5, x2^2*x5^6*x7^3*x8^9, x2^2*x5^5*x6^10*x7^8*x8^9, x2^2*x5^5*x8^5, x2^2*x6^8*x7^8, x2^2*x6^8*x8^5, x2^2*x6^7, x2^2*x7*x8^9, x2*x3^6*x4^8, x2*x3^6*x5^8, x2*x3^6*x6^10, x2*x3^6*x8^9, x2*x3^3, x2*x4^8*x7^7, x2*x4^3*x7^8, x2*x4, x2*x5^8*x7^7, x2*x6^10*x7^8, x2*x7^7*x8^9, x2*x7^6, x2*x8^5, x3^9*x4^7*x5^6*x7^3*x8^9, x3^9*x4^7*x7*x8^9, x3^9*x5^3*x6^10*x7^4*x8^8, x3^9*x5^3*x7^3*x8^8, x3^9*x5^3*x7^2, x3^9*x5^2*x6^7*x8^8, x3^9*x5^2*x7^7*x8^8, x3^9*x5*x6^7, x3^9*x5*x7^8, x3^8*x4^10*x5^3*x6^10*x7^7, x3^8*x4^10*x5^3*x6^7*x7^10, x3^8*x4^10*x5^3*x6^6, x3^8*x5^3*x6^10*x7^4, x3^8*x5^3*x6^5, x3^8*x5^3*x7^3, x3^8*x5^2*x6^7, x3^8*x5^2*x7^7, x3^7*x4^10*x5^7*x6^8*x7^7, x3^7*x4^10*x5^7*x6^7*x7^8, x3^7*x4^10*x5^6*x6^10*x7^5*x8^9, x3^7*x4^10*x5^6*x6^9*x7^7*x8^9, x3^7*x4^10*x5^5*x6^10*x7^7*x8^9, x3^7*x4^10*x5^5*x6^7*x7^10, x3^7*x4^10*x5^5*x6^6, x3^7*x4^8*x5^7*x6^7*x7^10*x8^9, x3^7*x4^8*x5^7*x6^7*x7^9, x3^7*x4^8*x5^7*x6^6*x8^9, x3^7*x4^8*x5^6*x6^10*x7^7*x8^9, x3^7*x4^8*x5^6*x7^7*x8^5, x3^7*x5^7*x6^8*x7^7*x8^5, x3^7*x5^7*x6^8*x7^4, x3^7*x5^7*x6^7*x7^8*x8^5, x3^7*x5^6*x6^10*x7^4*x8^9, x3^7*x5^6*x6^9*x7^7*x8^5, x3^7*x5^6*x7^5*x8^5, x3^7*x5^6*x7^3*x8^9, x3^7*x5^5*x6^7*x7^10*x8^5, x3^7*x5^5*x6^6*x8^5, x3^7*x5^5*x7^7*x8^5, x3^7*x6^8*x7^2, x3^7*x6^5, x3^7*x7*x8^9, x3^6*x4^5*x5^6*x6^10*x7^10*x8^9, x3^6*x4^5*x5^5*x6^8*x7^10, x3^6*x4^5*x5^3*x6^10*x7^10, x3^6*x4^5*x5^2, x3^6*x4^5*x6^8*x7^10*x8^9, x3^6*x4^5*x6^8*x7^9, x3^6*x4^3*x5^6*x6^10*x8^9, x3^6*x4^3*x5^5*x6^8, x3^6*x4^3*x5^3*x6^10, x3^6*x4^3*x6^8*x8^9, x3^6*x4^2*x6^10*x8^9, x3^6*x5, x3^5*x4^10*x5^7*x6^7*x7^10*x8^9, x3^5*x4^10*x5^7*x6^7*x7^9, x3^5*x4^10*x5^7*x6^6*x8^9, x3^5*x5^7*x6^8*x7^10*x8^4, x3^5*x5^7*x6^7*x7^10*x8^5, x3^5*x5^7*x6^6*x8^5, x3^5*x5^6*x7^10*x8^4, x3^5*x6^6*x8, x3^5*x7^10*x8, x3^4*x4^10*x5^7*x6^7*x7^10, x3^4*x4^10*x5^7*x6^6, x3^4*x4^10*x5^6*x6^10*x7^5, x3^4*x4^10*x5^6*x6^9*x7^7, x3^4*x4^10*x5^5*x6^10*x7^7, x3^4*x4^8*x5^6*x6^10*x7^7, x3^4*x4^6*x6^7*x7^10, x3^4*x4^6*x6^6, x3^4*x4^5*x5^6*x6^10*x7^10, x3^4*x4^5*x6^8*x7^10, x3^4*x4^3*x5^6*x6^10, x3^4*x4^3*x6^8, x3^4*x4^2*x6^10, x3^4*x4^2*x7^3, x3^4*x5^6*x6^10*x7^4, x3^4*x5^6*x7^3, x3^4*x7, x3^3*x4^6*x6^8, x3^3*x4^2, x3^3*x5^7*x6^8, x3^3*x5^6, x3^3*x8, x3^2*x6^8, x3*x4^7, x3*x5^7, x3*x6^9, x3*x7^10, x3*x8^9, x4^10*x5^3*x6^10*x7^7*x8^8, x4^10*x5^3*x6^7*x7^10*x8^8, x4^10*x5^3*x6^6*x8^8, x4^10*x5^3*x7^3*x8^8, x4^10*x5^3*x7^2, x4^10*x5^2*x6^7*x8^8, x4^10*x5^2*x7^7*x8^8, x4^10*x5*x6^7, x4^10*x5*x7^8, x4^9*x5^3*x6^10*x7^7, x4^9*x5^3*x6^7*x7^10, x4^9*x5^3*x6^6, x4^9*x5^3*x7^3, x4^9*x5^2*x6^7, x4^9*x5^2*x7^7, x4^8*x5^7*x6^8*x7^10*x8^4, x4^8*x5^7*x6^6*x8^4, x4^8*x5^6*x7^10*x8^4, x4^8*x6^6*x8, x4^8*x7^10*x8, x4^7*x5^7*x6^8*x7^7, x4^7*x5^7*x6^7*x7^10*x8^9, x4^7*x5^7*x6^7*x7^9, x4^7*x5^7*x6^6*x8^9, x4^7*x5^6*x6^10*x7^7*x8^9, x4^7*x5^6*x7^7*x8^5, x4^7*x5^6*x7^3*x8^7, x4^7*x5^5*x6^7*x7^10, x4^7*x5^5*x6^6, x4^7*x6^10*x7*x8^9, x4^7*x6^8*x7^2, x4^7*x6^5, x4^7*x7*x8^7, x4^6*x5^6*x7^3*x8^9, x4^6*x6^8*x7^10*x8^4, x4^6*x6^8*x7^7, x4^6*x6^7*x7^10*x8^9, x4^6*x6^7*x7^9, x4^6*x6^6*x8^9, x4^6*x7*x8^9, x4^5*x5^6*x6^10*x7^8*x8^9, x4^5*x5^6*x7^10*x8^5, x4^5*x5^3*x6^10*x7^8, x4^5*x5^2*x8^5, x4^5*x6^8*x7^10*x8^5, x4^5*x6^8*x7^8, x4^3*x5^6*x8^5, x4^3*x5^5*x6^7, x4^3*x5^2*x7^8, x4^3*x6^8*x8^5, x4^3*x6^7*x8^9, x4^3*x8, x4^2*x6^10*x7^8*x8^9, x4^2*x7^3*x8^9, x4^2*x8^5, x4*x5^5*x6^10, x4*x5^2, x4*x6^10*x7^9, x4*x6^10*x8^9, x4*x7^3, x5^7*x6^8*x7^8*x8^4, x5^6*x7^8*x8^4, x5^5*x6^6*x8^4, x5^5*x7^10*x8^4, x5^3*x6^7*x7^10*x8^5, x5^3*x6^6*x8^5, x5^3*x6^5*x7^2, x5^3*x6^5*x8^8, x5^3*x7^7*x8^5, x5^3*x7, x5^2*x6^7*x8^5, x5^2*x8^4, x5*x6^5, x5*x8^5, x6^8*x7^2*x8^4, x6^5*x8^4, x6^2, x7^8*x8, x7*x8^4 ); frobby-0.9.5/test/commonIdeals/t14.maxstandard000066400000000000000000000001001401527164200212320ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal(0_R); frobby-0.9.5/test/commonIdeals/t14.minimize000066400000000000000000000014601401527164200205570ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^10*x2^5*x3^3*x4^10*x5^2*x6^5*x7^4*x8^5, x1^10*x2*x3^3*x5^2*x6^10*x7^3*x8^5, x1^8*x2^6*x3^3*x4^5*x5*x6^7*x7^7*x8^4, x1^8*x2^3*x3^8*x4^9*x5*x6^2*x7^2*x8^8, x1^8*x2*x3^3*x4^8*x5^5*x6^9*x7^5*x8^4, x1^7*x2^6*x3^4*x5^5*x6^5*x7^9*x8^9, x1^7*x2*x3^4*x4*x5^3*x6^8*x8^9, x1^6*x2^10*x3^2*x4^6*x5^7*x6^5*x7^2*x8, x1^6*x2^5*x3^3*x4^3*x5^2*x6^6*x7^10, x1^6*x3^6*x4^3*x5*x6^10*x7^7*x8^5, x1^5*x2^7*x3^9*x4^10*x6^5*x7*x8^5, x1^5*x2^2*x3^7*x4^7*x5^3*x6^2*x8^4, x1^4*x2^3*x3^5*x4^8*x5^5*x6^5*x7^8, x1^3*x2^9*x3^4*x4^6*x5^4*x6^8*x7^8*x8^6, x1^3*x2^2*x4^7*x5^7*x6^9*x7^10*x8^9, x1^3*x2*x3*x4^2*x5^6*x6^8*x7*x8, x1^3*x3^6*x4*x6^7*x7^8*x8^5, x1^2*x3^3*x4^8*x5^8*x6^10*x7^6*x8^9, x1*x2^7*x3^9*x4^6*x5^3*x6^10*x8^7, x1*x2^3*x3^6*x4^8*x5^7*x6^6*x7^8*x8^10 ); frobby-0.9.5/test/commonIdeals/t14.multi000066400000000000000000001152201401527164200200700ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; p = -x1^10*x2^10*x3^7*x4^10*x5^7*x6^8*x7^7*x8^5 + x1^10*x2^10*x3^7*x4^10*x5^7*x6^8*x7^4*x8^5 + -x1^10*x2^10*x3^7*x4^10*x5^7*x6^7*x7^8*x8^5 + x1^10*x2^10*x3^7*x4^10*x5^7*x6^7*x7^7*x8^5 + x1^10*x2^10*x3^7*x4^10*x5^7*x6^5*x7^8*x8^5 + -x1^10*x2^10*x3^7*x4^10*x5^7*x6^5*x7^4*x8^5 + x1^10*x2^10*x3^5*x4^10*x5^7*x6^7*x7^10*x8^9 + -x1^10*x2^10*x3^5*x4^10*x5^7*x6^7*x7^10*x8^5 + -x1^10*x2^10*x3^5*x4^10*x5^7*x6^7*x7^9*x8^9 + x1^10*x2^10*x3^5*x4^10*x5^7*x6^7*x7^8*x8^5 + -x1^10*x2^10*x3^5*x4^10*x5^7*x6^6*x7^10*x8^9 + x1^10*x2^10*x3^5*x4^10*x5^7*x6^6*x7^10*x8^5 + x1^10*x2^10*x3^5*x4^10*x5^7*x6^5*x7^9*x8^9 + -x1^10*x2^10*x3^5*x4^10*x5^7*x6^5*x7^8*x8^5 + -x1^10*x2^10*x3^4*x4^10*x5^7*x6^7*x7^10*x8^9 + x1^10*x2^10*x3^4*x4^10*x5^7*x6^7*x7^9*x8^9 + x1^10*x2^10*x3^4*x4^10*x5^7*x6^6*x7^10*x8^9 + -x1^10*x2^10*x3^4*x4^10*x5^7*x6^5*x7^9*x8^9 + x1^10*x2^10*x3^3*x4^10*x5^7*x6^8*x7^7*x8^5 + -x1^10*x2^10*x3^3*x4^10*x5^7*x6^8*x7^4*x8^5 + x1^10*x2^10*x3^3*x4^10*x5^7*x6^7*x7^10*x8^5 + -x1^10*x2^10*x3^3*x4^10*x5^7*x6^7*x7^7*x8^5 + -x1^10*x2^10*x3^3*x4^10*x5^7*x6^6*x7^10*x8^5 + x1^10*x2^10*x3^3*x4^10*x5^7*x6^5*x7^4*x8^5 + -x1^10*x2^7*x3^9*x4^10*x5^3*x6^10*x7^4*x8^8 + x1^10*x2^7*x3^9*x4^10*x5^3*x6^10*x7^4*x8^5 + x1^10*x2^7*x3^9*x4^10*x5^3*x6^10*x7^3*x8^8 + -x1^10*x2^7*x3^9*x4^10*x5^3*x6^10*x7^3*x8^5 + x1^10*x2^7*x3^9*x4^10*x5^3*x6^7*x7^10*x8^8 + -x1^10*x2^7*x3^9*x4^10*x5^3*x6^7*x7^10*x8^5 + -x1^10*x2^7*x3^9*x4^10*x5^3*x6^7*x7^7*x8^8 + x1^10*x2^7*x3^9*x4^10*x5^3*x6^7*x7^7*x8^5 + -x1^10*x2^7*x3^9*x4^10*x5^3*x6^6*x7^10*x8^8 + x1^10*x2^7*x3^9*x4^10*x5^3*x6^6*x7^10*x8^5 + x1^10*x2^7*x3^9*x4^10*x5^3*x6^5*x7^4*x8^8 + -x1^10*x2^7*x3^9*x4^10*x5^3*x6^5*x7^4*x8^5 + x1^10*x2^7*x3^9*x4^10*x5^2*x6^10*x7^4*x8^8 + -x1^10*x2^7*x3^9*x4^10*x5^2*x6^10*x7^4*x8^5 + -x1^10*x2^7*x3^9*x4^10*x5^2*x6^10*x7^3*x8^8 + x1^10*x2^7*x3^9*x4^10*x5^2*x6^10*x7^3*x8^5 + -x1^10*x2^7*x3^9*x4^10*x5^2*x6^7*x7^10*x8^8 + x1^10*x2^7*x3^9*x4^10*x5^2*x6^7*x7^10*x8^5 + x1^10*x2^7*x3^9*x4^10*x5^2*x6^7*x7^7*x8^8 + -x1^10*x2^7*x3^9*x4^10*x5^2*x6^7*x7^7*x8^5 + x1^10*x2^7*x3^9*x4^10*x5^2*x6^6*x7^10*x8^8 + -x1^10*x2^7*x3^9*x4^10*x5^2*x6^6*x7^10*x8^5 + -x1^10*x2^7*x3^9*x4^10*x5^2*x6^5*x7^4*x8^8 + x1^10*x2^7*x3^9*x4^10*x5^2*x6^5*x7^4*x8^5 + x1^10*x2^7*x3^9*x4^7*x5^6*x6^10*x7^7*x8^9 + -x1^10*x2^7*x3^9*x4^7*x5^6*x6^10*x7^7*x8^7 + -x1^10*x2^7*x3^9*x4^7*x5^6*x6^10*x7^3*x8^9 + x1^10*x2^7*x3^9*x4^7*x5^6*x6^10*x7^3*x8^7 + -x1^10*x2^7*x3^9*x4^7*x5^3*x6^10*x7^7*x8^9 + x1^10*x2^7*x3^9*x4^7*x5^3*x6^10*x7^7*x8^7 + x1^10*x2^7*x3^9*x4^7*x5^3*x6^10*x7^3*x8^9 + -x1^10*x2^7*x3^9*x4^7*x5^3*x6^10*x7^3*x8^7 + -x1^10*x2^7*x3^9*x4^6*x5^6*x6^10*x7^7*x8^9 + x1^10*x2^7*x3^9*x4^6*x5^6*x6^10*x7^7*x8^7 + x1^10*x2^7*x3^9*x4^6*x5^6*x6^10*x7^3*x8^9 + -x1^10*x2^7*x3^9*x4^6*x5^6*x6^10*x7^3*x8^7 + x1^10*x2^7*x3^9*x4^6*x5^3*x6^10*x7^7*x8^9 + -x1^10*x2^7*x3^9*x4^6*x5^3*x6^10*x7^7*x8^7 + -x1^10*x2^7*x3^9*x4^6*x5^3*x6^10*x7^3*x8^9 + x1^10*x2^7*x3^9*x4^6*x5^3*x6^10*x7^3*x8^7 + x1^10*x2^6*x3^8*x4^10*x5^3*x6^10*x7^8*x8^8 + -x1^10*x2^6*x3^8*x4^10*x5^3*x6^10*x7^7*x8^8 + -x1^10*x2^6*x3^8*x4^10*x5^3*x6^7*x7^8*x8^8 + x1^10*x2^6*x3^8*x4^10*x5^3*x6^7*x7^7*x8^8 + -x1^10*x2^6*x3^8*x4^10*x5^2*x6^10*x7^8*x8^8 + x1^10*x2^6*x3^8*x4^10*x5^2*x6^10*x7^7*x8^8 + x1^10*x2^6*x3^8*x4^10*x5^2*x6^7*x7^8*x8^8 + -x1^10*x2^6*x3^8*x4^10*x5^2*x6^7*x7^7*x8^8 + -x1^10*x2^6*x3^7*x4^10*x5^6*x6^9*x7^8*x8^9 + x1^10*x2^6*x3^7*x4^10*x5^6*x6^9*x7^8*x8^5 + x1^10*x2^6*x3^7*x4^10*x5^6*x6^9*x7^7*x8^9 + -x1^10*x2^6*x3^7*x4^10*x5^6*x6^9*x7^7*x8^5 + x1^10*x2^6*x3^7*x4^10*x5^6*x6^8*x7^8*x8^9 + -x1^10*x2^6*x3^7*x4^10*x5^6*x6^8*x7^8*x8^5 + -x1^10*x2^6*x3^7*x4^10*x5^6*x6^8*x7^7*x8^9 + x1^10*x2^6*x3^7*x4^10*x5^6*x6^8*x7^7*x8^5 + -x1^10*x2^6*x3^7*x4^10*x5^5*x6^10*x7^8*x8^9 + x1^10*x2^6*x3^7*x4^10*x5^5*x6^10*x7^8*x8^5 + x1^10*x2^6*x3^7*x4^10*x5^5*x6^10*x7^7*x8^9 + -x1^10*x2^6*x3^7*x4^10*x5^5*x6^10*x7^7*x8^5 + x1^10*x2^6*x3^7*x4^10*x5^5*x6^9*x7^8*x8^9 + -x1^10*x2^6*x3^7*x4^10*x5^5*x6^9*x7^8*x8^5 + -x1^10*x2^6*x3^7*x4^10*x5^5*x6^9*x7^7*x8^9 + x1^10*x2^6*x3^7*x4^10*x5^5*x6^9*x7^7*x8^5 + x1^10*x2^6*x3^7*x4^10*x5^3*x6^10*x7^8*x8^9 + -x1^10*x2^6*x3^7*x4^10*x5^3*x6^10*x7^8*x8^5 + -x1^10*x2^6*x3^7*x4^10*x5^3*x6^10*x7^7*x8^9 + x1^10*x2^6*x3^7*x4^10*x5^3*x6^10*x7^7*x8^5 + -x1^10*x2^6*x3^7*x4^10*x5^3*x6^8*x7^8*x8^9 + x1^10*x2^6*x3^7*x4^10*x5^3*x6^8*x7^7*x8^9 + x1^10*x2^6*x3^7*x4^10*x5^3*x6^7*x7^8*x8^5 + -x1^10*x2^6*x3^7*x4^10*x5^3*x6^7*x7^7*x8^5 + -x1^10*x2^6*x3^6*x4^10*x5^5*x6^10*x7^10*x8^9 + x1^10*x2^6*x3^6*x4^10*x5^5*x6^10*x7^10*x8^5 + x1^10*x2^6*x3^6*x4^10*x5^5*x6^10*x7^8*x8^9 + -x1^10*x2^6*x3^6*x4^10*x5^5*x6^10*x7^8*x8^5 + x1^10*x2^6*x3^6*x4^10*x5^5*x6^8*x7^10*x8^9 + -x1^10*x2^6*x3^6*x4^10*x5^5*x6^8*x7^8*x8^9 + -x1^10*x2^6*x3^6*x4^10*x5^5*x6^7*x7^10*x8^5 + x1^10*x2^6*x3^6*x4^10*x5^5*x6^7*x7^8*x8^5 + x1^10*x2^6*x3^6*x4^10*x5^3*x6^10*x7^10*x8^9 + -x1^10*x2^6*x3^6*x4^10*x5^3*x6^10*x7^8*x8^9 + -x1^10*x2^6*x3^6*x4^10*x5^3*x6^8*x7^10*x8^9 + x1^10*x2^6*x3^6*x4^10*x5^3*x6^8*x7^8*x8^9 + -x1^10*x2^6*x3^6*x4^10*x5^2*x6^10*x7^10*x8^5 + x1^10*x2^6*x3^6*x4^10*x5^2*x6^10*x7^8*x8^5 + x1^10*x2^6*x3^6*x4^10*x5^2*x6^7*x7^10*x8^5 + -x1^10*x2^6*x3^6*x4^10*x5^2*x6^7*x7^8*x8^5 + -x1^10*x2^6*x3^6*x4^8*x5^6*x6^10*x7^10*x8^9 + x1^10*x2^6*x3^6*x4^8*x5^6*x6^10*x7^10*x8^5 + x1^10*x2^6*x3^6*x4^8*x5^6*x6^10*x7^7*x8^9 + -x1^10*x2^6*x3^6*x4^8*x5^6*x6^10*x7^7*x8^5 + x1^10*x2^6*x3^6*x4^8*x5^5*x6^10*x7^10*x8^9 + -x1^10*x2^6*x3^6*x4^8*x5^5*x6^10*x7^10*x8^5 + -x1^10*x2^6*x3^6*x4^8*x5^5*x6^10*x7^7*x8^9 + x1^10*x2^6*x3^6*x4^8*x5^5*x6^10*x7^7*x8^5 + x1^10*x2^6*x3^6*x4^5*x5^6*x6^10*x7^10*x8^9 + -x1^10*x2^6*x3^6*x4^5*x5^6*x6^10*x7^10*x8^5 + -x1^10*x2^6*x3^6*x4^5*x5^6*x6^10*x7^7*x8^9 + x1^10*x2^6*x3^6*x4^5*x5^6*x6^10*x7^7*x8^5 + -x1^10*x2^6*x3^6*x4^5*x5^3*x6^10*x7^10*x8^9 + x1^10*x2^6*x3^6*x4^5*x5^3*x6^10*x7^7*x8^9 + x1^10*x2^6*x3^6*x4^5*x5^2*x6^10*x7^10*x8^5 + -x1^10*x2^6*x3^6*x4^5*x5^2*x6^10*x7^7*x8^5 + -x1^10*x2^6*x3^5*x4^10*x5^6*x6^9*x7^10*x8^9 + x1^10*x2^6*x3^5*x4^10*x5^6*x6^9*x7^10*x8^5 + x1^10*x2^6*x3^5*x4^10*x5^6*x6^9*x7^8*x8^9 + -x1^10*x2^6*x3^5*x4^10*x5^6*x6^9*x7^8*x8^5 + x1^10*x2^6*x3^5*x4^10*x5^6*x6^8*x7^10*x8^9 + -x1^10*x2^6*x3^5*x4^10*x5^6*x6^8*x7^10*x8^5 + -x1^10*x2^6*x3^5*x4^10*x5^6*x6^8*x7^8*x8^9 + x1^10*x2^6*x3^5*x4^10*x5^6*x6^8*x7^8*x8^5 + x1^10*x2^6*x3^5*x4^10*x5^5*x6^9*x7^10*x8^9 + -x1^10*x2^6*x3^5*x4^10*x5^5*x6^9*x7^10*x8^5 + -x1^10*x2^6*x3^5*x4^10*x5^5*x6^9*x7^8*x8^9 + x1^10*x2^6*x3^5*x4^10*x5^5*x6^9*x7^8*x8^5 + -x1^10*x2^6*x3^5*x4^10*x5^5*x6^8*x7^10*x8^9 + x1^10*x2^6*x3^5*x4^10*x5^5*x6^8*x7^8*x8^9 + -x1^10*x2^6*x3^5*x4^10*x5^5*x6^7*x7^10*x8^9 + x1^10*x2^6*x3^5*x4^10*x5^5*x6^7*x7^10*x8^5 + x1^10*x2^6*x3^5*x4^10*x5^5*x6^7*x7^9*x8^9 + -x1^10*x2^6*x3^5*x4^10*x5^5*x6^7*x7^8*x8^5 + x1^10*x2^6*x3^5*x4^10*x5^5*x6^6*x7^10*x8^9 + -x1^10*x2^6*x3^5*x4^10*x5^5*x6^5*x7^9*x8^9 + x1^10*x2^6*x3^4*x4^10*x5^6*x6^9*x7^10*x8^9 + -x1^10*x2^6*x3^4*x4^10*x5^6*x6^9*x7^7*x8^9 + -x1^10*x2^6*x3^4*x4^10*x5^6*x6^8*x7^10*x8^9 + x1^10*x2^6*x3^4*x4^10*x5^6*x6^8*x7^7*x8^9 + x1^10*x2^6*x3^4*x4^10*x5^5*x6^10*x7^10*x8^9 + -x1^10*x2^6*x3^4*x4^10*x5^5*x6^10*x7^7*x8^9 + -x1^10*x2^6*x3^4*x4^10*x5^5*x6^9*x7^10*x8^9 + x1^10*x2^6*x3^4*x4^10*x5^5*x6^9*x7^7*x8^9 + x1^10*x2^6*x3^4*x4^10*x5^5*x6^7*x7^10*x8^9 + -x1^10*x2^6*x3^4*x4^10*x5^5*x6^7*x7^9*x8^9 + -x1^10*x2^6*x3^4*x4^10*x5^5*x6^6*x7^10*x8^9 + x1^10*x2^6*x3^4*x4^10*x5^5*x6^5*x7^9*x8^9 + -x1^10*x2^6*x3^4*x4^10*x5^3*x6^10*x7^10*x8^9 + x1^10*x2^6*x3^4*x4^10*x5^3*x6^10*x7^7*x8^9 + x1^10*x2^6*x3^4*x4^10*x5^3*x6^8*x7^10*x8^9 + -x1^10*x2^6*x3^4*x4^10*x5^3*x6^8*x7^7*x8^9 + x1^10*x2^6*x3^4*x4^8*x5^6*x6^10*x7^10*x8^9 + -x1^10*x2^6*x3^4*x4^8*x5^6*x6^10*x7^7*x8^9 + -x1^10*x2^6*x3^4*x4^8*x5^5*x6^10*x7^10*x8^9 + x1^10*x2^6*x3^4*x4^8*x5^5*x6^10*x7^7*x8^9 + -x1^10*x2^6*x3^4*x4^5*x5^6*x6^10*x7^10*x8^9 + x1^10*x2^6*x3^4*x4^5*x5^6*x6^10*x7^7*x8^9 + x1^10*x2^6*x3^4*x4^5*x5^3*x6^10*x7^10*x8^9 + -x1^10*x2^6*x3^4*x4^5*x5^3*x6^10*x7^7*x8^9 + -x1^10*x2^6*x3^4*x4*x5^5*x6^10*x7^9*x8^9 + x1^10*x2^6*x3^4*x5^5*x6^10*x7^9*x8^9 + -x1^10*x2^6*x3^3*x4^10*x5^6*x6^9*x7^10*x8^5 + x1^10*x2^6*x3^3*x4^10*x5^6*x6^9*x7^7*x8^5 + x1^10*x2^6*x3^3*x4^10*x5^6*x6^8*x7^10*x8^5 + -x1^10*x2^6*x3^3*x4^10*x5^6*x6^8*x7^7*x8^5 + -x1^10*x2^6*x3^3*x4^10*x5^5*x6^10*x7^10*x8^5 + x1^10*x2^6*x3^3*x4^10*x5^5*x6^10*x7^7*x8^5 + x1^10*x2^6*x3^3*x4^10*x5^5*x6^9*x7^10*x8^5 + -x1^10*x2^6*x3^3*x4^10*x5^5*x6^9*x7^7*x8^5 + x1^10*x2^6*x3^3*x4^10*x5^2*x6^10*x7^10*x8^5 + -x1^10*x2^6*x3^3*x4^10*x5^2*x6^10*x7^7*x8^5 + -x1^10*x2^6*x3^3*x4^10*x5^2*x6^7*x7^10*x8^5 + x1^10*x2^6*x3^3*x4^10*x5^2*x6^7*x7^7*x8^5 + -x1^10*x2^6*x3^3*x4^8*x5^6*x6^10*x7^10*x8^5 + x1^10*x2^6*x3^3*x4^8*x5^6*x6^10*x7^7*x8^5 + x1^10*x2^6*x3^3*x4^8*x5^5*x6^10*x7^10*x8^5 + -x1^10*x2^6*x3^3*x4^8*x5^5*x6^10*x7^7*x8^5 + x1^10*x2^6*x3^3*x4^5*x5^6*x6^10*x7^10*x8^5 + -x1^10*x2^6*x3^3*x4^5*x5^6*x6^10*x7^7*x8^5 + -x1^10*x2^6*x3^3*x4^5*x5^2*x6^10*x7^10*x8^5 + x1^10*x2^6*x3^3*x4^5*x5^2*x6^10*x7^7*x8^5 + -x1^10*x2^5*x3^8*x4^10*x5^3*x6^10*x7^8*x8^8 + x1^10*x2^5*x3^8*x4^10*x5^3*x6^10*x7^4*x8^8 + -x1^10*x2^5*x3^8*x4^10*x5^3*x6^7*x7^10*x8^8 + x1^10*x2^5*x3^8*x4^10*x5^3*x6^7*x7^8*x8^8 + x1^10*x2^5*x3^8*x4^10*x5^3*x6^6*x7^10*x8^8 + -x1^10*x2^5*x3^8*x4^10*x5^3*x6^5*x7^4*x8^8 + x1^10*x2^5*x3^8*x4^10*x5^2*x6^10*x7^8*x8^8 + -x1^10*x2^5*x3^8*x4^10*x5^2*x6^10*x7^4*x8^8 + x1^10*x2^5*x3^8*x4^10*x5^2*x6^7*x7^10*x8^8 + -x1^10*x2^5*x3^8*x4^10*x5^2*x6^7*x7^8*x8^8 + -x1^10*x2^5*x3^8*x4^10*x5^2*x6^6*x7^10*x8^8 + x1^10*x2^5*x3^8*x4^10*x5^2*x6^5*x7^4*x8^8 + x1^10*x2^5*x3^7*x4^10*x5^6*x6^10*x7^5*x8^9 + -x1^10*x2^5*x3^7*x4^10*x5^6*x6^10*x7^5*x8^5 + -x1^10*x2^5*x3^7*x4^10*x5^6*x6^10*x7^4*x8^9 + x1^10*x2^5*x3^7*x4^10*x5^6*x6^10*x7^4*x8^5 + x1^10*x2^5*x3^7*x4^10*x5^6*x6^9*x7^8*x8^9 + -x1^10*x2^5*x3^7*x4^10*x5^6*x6^9*x7^8*x8^5 + -x1^10*x2^5*x3^7*x4^10*x5^6*x6^9*x7^5*x8^9 + x1^10*x2^5*x3^7*x4^10*x5^6*x6^9*x7^5*x8^5 + -x1^10*x2^5*x3^7*x4^10*x5^6*x6^8*x7^8*x8^9 + x1^10*x2^5*x3^7*x4^10*x5^6*x6^8*x7^8*x8^5 + x1^10*x2^5*x3^7*x4^10*x5^6*x6^8*x7^4*x8^9 + -x1^10*x2^5*x3^7*x4^10*x5^6*x6^8*x7^4*x8^5 + x1^10*x2^5*x3^7*x4^10*x5^5*x6^10*x7^8*x8^9 + -x1^10*x2^5*x3^7*x4^10*x5^5*x6^10*x7^8*x8^5 + -x1^10*x2^5*x3^7*x4^10*x5^5*x6^10*x7^5*x8^9 + x1^10*x2^5*x3^7*x4^10*x5^5*x6^10*x7^5*x8^5 + -x1^10*x2^5*x3^7*x4^10*x5^5*x6^9*x7^8*x8^9 + x1^10*x2^5*x3^7*x4^10*x5^5*x6^9*x7^8*x8^5 + x1^10*x2^5*x3^7*x4^10*x5^5*x6^9*x7^5*x8^9 + -x1^10*x2^5*x3^7*x4^10*x5^5*x6^9*x7^5*x8^5 + -x1^10*x2^5*x3^7*x4^10*x5^5*x6^7*x7^10*x8^5 + x1^10*x2^5*x3^7*x4^10*x5^5*x6^7*x7^8*x8^5 + x1^10*x2^5*x3^7*x4^10*x5^5*x6^6*x7^10*x8^5 + -x1^10*x2^5*x3^7*x4^10*x5^5*x6^5*x7^8*x8^5 + -x1^10*x2^5*x3^7*x4^10*x5^3*x6^10*x7^8*x8^9 + x1^10*x2^5*x3^7*x4^10*x5^3*x6^10*x7^8*x8^5 + x1^10*x2^5*x3^7*x4^10*x5^3*x6^10*x7^4*x8^9 + -x1^10*x2^5*x3^7*x4^10*x5^3*x6^10*x7^4*x8^5 + x1^10*x2^5*x3^7*x4^10*x5^3*x6^8*x7^8*x8^9 + -x1^10*x2^5*x3^7*x4^10*x5^3*x6^8*x7^4*x8^9 + x1^10*x2^5*x3^7*x4^10*x5^3*x6^7*x7^10*x8^5 + -x1^10*x2^5*x3^7*x4^10*x5^3*x6^7*x7^8*x8^5 + -x1^10*x2^5*x3^7*x4^10*x5^3*x6^6*x7^10*x8^5 + x1^10*x2^5*x3^7*x4^10*x5^3*x6^5*x7^4*x8^5 + x1^10*x2^5*x3^6*x4^10*x5^5*x6^10*x7^10*x8^9 + -x1^10*x2^5*x3^6*x4^10*x5^5*x6^10*x7^10*x8^5 + -x1^10*x2^5*x3^6*x4^10*x5^5*x6^10*x7^8*x8^9 + x1^10*x2^5*x3^6*x4^10*x5^5*x6^10*x7^8*x8^5 + -x1^10*x2^5*x3^6*x4^10*x5^5*x6^8*x7^10*x8^9 + x1^10*x2^5*x3^6*x4^10*x5^5*x6^8*x7^8*x8^9 + x1^10*x2^5*x3^6*x4^10*x5^5*x6^7*x7^10*x8^5 + -x1^10*x2^5*x3^6*x4^10*x5^5*x6^7*x7^8*x8^5 + -x1^10*x2^5*x3^6*x4^10*x5^3*x6^10*x7^10*x8^9 + x1^10*x2^5*x3^6*x4^10*x5^3*x6^10*x7^8*x8^9 + x1^10*x2^5*x3^6*x4^10*x5^3*x6^8*x7^10*x8^9 + -x1^10*x2^5*x3^6*x4^10*x5^3*x6^8*x7^8*x8^9 + x1^10*x2^5*x3^6*x4^10*x5^2*x6^10*x7^10*x8^5 + -x1^10*x2^5*x3^6*x4^10*x5^2*x6^10*x7^8*x8^5 + -x1^10*x2^5*x3^6*x4^10*x5^2*x6^7*x7^10*x8^5 + x1^10*x2^5*x3^6*x4^10*x5^2*x6^7*x7^8*x8^5 + x1^10*x2^5*x3^6*x4^8*x5^6*x6^10*x7^10*x8^9 + -x1^10*x2^5*x3^6*x4^8*x5^6*x6^10*x7^10*x8^5 + -x1^10*x2^5*x3^6*x4^8*x5^5*x6^10*x7^10*x8^9 + x1^10*x2^5*x3^6*x4^8*x5^5*x6^10*x7^10*x8^5 + -x1^10*x2^5*x3^6*x4^3*x5^6*x6^10*x7^10*x8^9 + x1^10*x2^5*x3^6*x4^3*x5^6*x6^10*x7^10*x8^5 + x1^10*x2^5*x3^6*x4^3*x5^3*x6^10*x7^10*x8^9 + -x1^10*x2^5*x3^6*x4^3*x5^2*x6^10*x7^10*x8^5 + x1^10*x2^5*x3^5*x4^10*x5^6*x6^9*x7^10*x8^9 + -x1^10*x2^5*x3^5*x4^10*x5^6*x6^9*x7^10*x8^5 + -x1^10*x2^5*x3^5*x4^10*x5^6*x6^9*x7^8*x8^9 + x1^10*x2^5*x3^5*x4^10*x5^6*x6^9*x7^8*x8^5 + -x1^10*x2^5*x3^5*x4^10*x5^6*x6^8*x7^10*x8^9 + x1^10*x2^5*x3^5*x4^10*x5^6*x6^8*x7^10*x8^5 + x1^10*x2^5*x3^5*x4^10*x5^6*x6^8*x7^8*x8^9 + -x1^10*x2^5*x3^5*x4^10*x5^6*x6^8*x7^8*x8^5 + -x1^10*x2^5*x3^5*x4^10*x5^5*x6^9*x7^10*x8^9 + x1^10*x2^5*x3^5*x4^10*x5^5*x6^9*x7^10*x8^5 + x1^10*x2^5*x3^5*x4^10*x5^5*x6^9*x7^8*x8^9 + -x1^10*x2^5*x3^5*x4^10*x5^5*x6^9*x7^8*x8^5 + x1^10*x2^5*x3^5*x4^10*x5^5*x6^8*x7^10*x8^9 + -x1^10*x2^5*x3^5*x4^10*x5^5*x6^8*x7^8*x8^9 + -x1^10*x2^5*x3^5*x4^10*x5^5*x6^6*x7^10*x8^5 + x1^10*x2^5*x3^5*x4^10*x5^5*x6^5*x7^8*x8^5 + -x1^10*x2^5*x3^4*x4^10*x5^6*x6^10*x7^5*x8^9 + x1^10*x2^5*x3^4*x4^10*x5^6*x6^10*x7^4*x8^9 + -x1^10*x2^5*x3^4*x4^10*x5^6*x6^9*x7^10*x8^9 + x1^10*x2^5*x3^4*x4^10*x5^6*x6^9*x7^5*x8^9 + x1^10*x2^5*x3^4*x4^10*x5^6*x6^8*x7^10*x8^9 + -x1^10*x2^5*x3^4*x4^10*x5^6*x6^8*x7^4*x8^9 + -x1^10*x2^5*x3^4*x4^10*x5^5*x6^10*x7^10*x8^9 + x1^10*x2^5*x3^4*x4^10*x5^5*x6^10*x7^5*x8^9 + x1^10*x2^5*x3^4*x4^10*x5^5*x6^9*x7^10*x8^9 + -x1^10*x2^5*x3^4*x4^10*x5^5*x6^9*x7^5*x8^9 + x1^10*x2^5*x3^4*x4^10*x5^3*x6^10*x7^10*x8^9 + -x1^10*x2^5*x3^4*x4^10*x5^3*x6^10*x7^4*x8^9 + -x1^10*x2^5*x3^4*x4^10*x5^3*x6^8*x7^10*x8^9 + x1^10*x2^5*x3^4*x4^10*x5^3*x6^8*x7^4*x8^9 + -x1^10*x2^5*x3^4*x4^8*x5^6*x6^10*x7^10*x8^9 + x1^10*x2^5*x3^4*x4^8*x5^5*x6^10*x7^10*x8^9 + x1^10*x2^5*x3^4*x4^3*x5^6*x6^10*x7^10*x8^9 + -x1^10*x2^5*x3^4*x4^3*x5^3*x6^10*x7^10*x8^9 + x1^10*x2^5*x3^3*x4^10*x5^6*x6^10*x7^5*x8^5 + -x1^10*x2^5*x3^3*x4^10*x5^6*x6^10*x7^4*x8^5 + x1^10*x2^5*x3^3*x4^10*x5^6*x6^9*x7^10*x8^5 + -x1^10*x2^5*x3^3*x4^10*x5^6*x6^9*x7^5*x8^5 + -x1^10*x2^5*x3^3*x4^10*x5^6*x6^8*x7^10*x8^5 + x1^10*x2^5*x3^3*x4^10*x5^6*x6^8*x7^4*x8^5 + x1^10*x2^5*x3^3*x4^10*x5^5*x6^10*x7^10*x8^5 + -x1^10*x2^5*x3^3*x4^10*x5^5*x6^10*x7^5*x8^5 + -x1^10*x2^5*x3^3*x4^10*x5^5*x6^9*x7^10*x8^5 + x1^10*x2^5*x3^3*x4^10*x5^5*x6^9*x7^5*x8^5 + -x1^10*x2^5*x3^3*x4^10*x5^2*x6^10*x7^10*x8^5 + x1^10*x2^5*x3^3*x4^10*x5^2*x6^10*x7^4*x8^5 + x1^10*x2^5*x3^3*x4^10*x5^2*x6^6*x7^10*x8^5 + -x1^10*x2^5*x3^3*x4^10*x5^2*x6^5*x7^4*x8^5 + x1^10*x2^5*x3^3*x4^8*x5^6*x6^10*x7^10*x8^5 + -x1^10*x2^5*x3^3*x4^8*x5^5*x6^10*x7^10*x8^5 + -x1^10*x2^5*x3^3*x4^3*x5^6*x6^10*x7^10*x8^5 + x1^10*x2^5*x3^3*x4^3*x5^2*x6^10*x7^10*x8^5 + x1^10*x2^3*x3^8*x4^9*x5^3*x6^10*x7^7*x8^8 + -x1^10*x2^3*x3^8*x4^9*x5^3*x6^10*x7^3*x8^8 + -x1^10*x2^3*x3^8*x4^9*x5^2*x6^10*x7^7*x8^8 + x1^10*x2^3*x3^8*x4^9*x5^2*x6^10*x7^3*x8^8 + x1^10*x2^2*x3^7*x4^8*x5^6*x6^10*x7^7*x8^9 + -x1^10*x2^2*x3^7*x4^8*x5^6*x6^10*x7^7*x8^5 + -x1^10*x2^2*x3^7*x4^8*x5^6*x6^10*x7^5*x8^9 + x1^10*x2^2*x3^7*x4^8*x5^6*x6^10*x7^5*x8^5 + -x1^10*x2^2*x3^7*x4^8*x5^5*x6^10*x7^7*x8^9 + x1^10*x2^2*x3^7*x4^8*x5^5*x6^10*x7^7*x8^5 + x1^10*x2^2*x3^7*x4^8*x5^5*x6^10*x7^5*x8^9 + -x1^10*x2^2*x3^7*x4^8*x5^5*x6^10*x7^5*x8^5 + -x1^10*x2^2*x3^7*x4^7*x5^6*x6^10*x7^7*x8^9 + x1^10*x2^2*x3^7*x4^7*x5^6*x6^10*x7^7*x8^5 + x1^10*x2^2*x3^7*x4^7*x5^6*x6^10*x7^3*x8^9 + -x1^10*x2^2*x3^7*x4^7*x5^6*x6^10*x7^3*x8^5 + x1^10*x2^2*x3^7*x4^7*x5^3*x6^10*x7^7*x8^9 + -x1^10*x2^2*x3^7*x4^7*x5^3*x6^10*x7^7*x8^5 + -x1^10*x2^2*x3^7*x4^7*x5^3*x6^10*x7^3*x8^9 + x1^10*x2^2*x3^7*x4^7*x5^3*x6^10*x7^3*x8^5 + -x1^10*x2*x3^6*x4^8*x5^6*x6^10*x7^7*x8^9 + x1^10*x2*x3^6*x4^8*x5^6*x6^10*x7^7*x8^5 + x1^10*x2*x3^6*x4^8*x5^5*x6^10*x7^7*x8^9 + -x1^10*x2*x3^6*x4^8*x5^5*x6^10*x7^7*x8^5 + -x1^10*x2*x3^6*x4^3*x5^6*x6^10*x7^8*x8^9 + x1^10*x2*x3^6*x4^3*x5^6*x6^10*x7^8*x8^5 + x1^10*x2*x3^6*x4^3*x5^6*x6^10*x7^7*x8^9 + -x1^10*x2*x3^6*x4^3*x5^6*x6^10*x7^7*x8^5 + x1^10*x2*x3^6*x4^3*x5^3*x6^10*x7^8*x8^9 + -x1^10*x2*x3^6*x4^3*x5^3*x6^10*x7^7*x8^9 + -x1^10*x2*x3^6*x4^3*x5^2*x6^10*x7^8*x8^5 + x1^10*x2*x3^6*x4^3*x5^2*x6^10*x7^7*x8^5 + x1^10*x2*x3^6*x4^2*x5^6*x6^10*x7^8*x8^9 + -x1^10*x2*x3^6*x4^2*x5^6*x6^10*x7^8*x8^5 + -x1^10*x2*x3^6*x4*x5^3*x6^10*x7^8*x8^9 + x1^10*x2*x3^6*x4*x5^2*x6^10*x7^8*x8^5 + x1^10*x2*x3^4*x4^8*x5^6*x6^10*x7^5*x8^9 + -x1^10*x2*x3^4*x4^8*x5^5*x6^10*x7^5*x8^9 + -x1^10*x2*x3^4*x4^2*x5^6*x6^10*x7^3*x8^9 + x1^10*x2*x3^4*x4*x5^3*x6^10*x7^3*x8^9 + -x1^10*x2*x3^3*x4^8*x5^6*x6^10*x7^5*x8^5 + x1^10*x2*x3^3*x4^8*x5^5*x6^10*x7^5*x8^5 + x1^10*x2*x3^3*x4^2*x5^6*x6^10*x7^3*x8^5 + -x1^10*x2*x3^3*x5^2*x6^10*x7^3*x8^5 + -x1^8*x2^10*x3^7*x4^8*x5^7*x6^8*x7^10*x8^5 + x1^8*x2^10*x3^7*x4^8*x5^7*x6^8*x7^10*x8^4 + x1^8*x2^10*x3^7*x4^8*x5^7*x6^8*x7^8*x8^5 + -x1^8*x2^10*x3^7*x4^8*x5^7*x6^8*x7^8*x8^4 + x1^8*x2^10*x3^7*x4^8*x5^7*x6^7*x7^10*x8^5 + -x1^8*x2^10*x3^7*x4^8*x5^7*x6^7*x7^10*x8^4 + -x1^8*x2^10*x3^7*x4^8*x5^7*x6^7*x7^8*x8^5 + x1^8*x2^10*x3^7*x4^8*x5^7*x6^7*x7^8*x8^4 + x1^8*x2^10*x3^7*x4^7*x5^7*x6^8*x7^10*x8^5 + -x1^8*x2^10*x3^7*x4^7*x5^7*x6^8*x7^10*x8^4 + -x1^8*x2^10*x3^7*x4^7*x5^7*x6^8*x7^8*x8^5 + x1^8*x2^10*x3^7*x4^7*x5^7*x6^8*x7^7*x8^4 + -x1^8*x2^10*x3^7*x4^7*x5^7*x6^7*x7^10*x8^5 + x1^8*x2^10*x3^7*x4^7*x5^7*x6^7*x7^10*x8^4 + x1^8*x2^10*x3^7*x4^7*x5^7*x6^7*x7^8*x8^5 + -x1^8*x2^10*x3^7*x4^7*x5^7*x6^7*x7^7*x8^4 + -x1^8*x2^10*x3^6*x4^8*x5^7*x6^8*x7^10*x8^9 + x1^8*x2^10*x3^6*x4^8*x5^7*x6^8*x7^10*x8^5 + x1^8*x2^10*x3^6*x4^8*x5^7*x6^8*x7^9*x8^9 + -x1^8*x2^10*x3^6*x4^8*x5^7*x6^8*x7^8*x8^5 + x1^8*x2^10*x3^6*x4^8*x5^7*x6^7*x7^10*x8^9 + -x1^8*x2^10*x3^6*x4^8*x5^7*x6^7*x7^10*x8^5 + -x1^8*x2^10*x3^6*x4^8*x5^7*x6^7*x7^9*x8^9 + x1^8*x2^10*x3^6*x4^8*x5^7*x6^7*x7^8*x8^5 + x1^8*x2^10*x3^6*x4^6*x5^7*x6^8*x7^10*x8^9 + -x1^8*x2^10*x3^6*x4^6*x5^7*x6^8*x7^10*x8^5 + -x1^8*x2^10*x3^6*x4^6*x5^7*x6^8*x7^9*x8^9 + x1^8*x2^10*x3^6*x4^6*x5^7*x6^8*x7^8*x8^5 + -x1^8*x2^10*x3^6*x4^6*x5^7*x6^7*x7^10*x8^9 + x1^8*x2^10*x3^6*x4^6*x5^7*x6^7*x7^10*x8^5 + x1^8*x2^10*x3^6*x4^6*x5^7*x6^7*x7^9*x8^9 + -x1^8*x2^10*x3^6*x4^6*x5^7*x6^7*x7^8*x8^5 + x1^8*x2^10*x3^5*x4^8*x5^7*x6^8*x7^10*x8^9 + -x1^8*x2^10*x3^5*x4^8*x5^7*x6^8*x7^10*x8^4 + -x1^8*x2^10*x3^5*x4^8*x5^7*x6^8*x7^9*x8^9 + x1^8*x2^10*x3^5*x4^8*x5^7*x6^8*x7^8*x8^4 + -x1^8*x2^10*x3^5*x4^8*x5^7*x6^7*x7^10*x8^9 + x1^8*x2^10*x3^5*x4^8*x5^7*x6^7*x7^10*x8^4 + x1^8*x2^10*x3^5*x4^8*x5^7*x6^7*x7^9*x8^9 + -x1^8*x2^10*x3^5*x4^8*x5^7*x6^7*x7^8*x8^4 + -x1^8*x2^10*x3^4*x4^6*x5^7*x6^8*x7^10*x8^9 + x1^8*x2^10*x3^4*x4^6*x5^7*x6^8*x7^9*x8^9 + x1^8*x2^10*x3^4*x4^6*x5^7*x6^7*x7^10*x8^9 + -x1^8*x2^10*x3^4*x4^6*x5^7*x6^7*x7^9*x8^9 + x1^8*x2^10*x3^3*x4^6*x5^7*x6^8*x7^10*x8^4 + -x1^8*x2^10*x3^3*x4^6*x5^7*x6^8*x7^7*x8^4 + -x1^8*x2^10*x3^3*x4^6*x5^7*x6^7*x7^10*x8^4 + x1^8*x2^10*x3^3*x4^6*x5^7*x6^7*x7^7*x8^4 + -x1^8*x2^9*x3^6*x4^8*x5^6*x6^8*x7^10*x8^9 + x1^8*x2^9*x3^6*x4^8*x5^6*x6^8*x7^10*x8^6 + x1^8*x2^9*x3^6*x4^8*x5^6*x6^8*x7^8*x8^9 + -x1^8*x2^9*x3^6*x4^8*x5^6*x6^8*x7^8*x8^6 + x1^8*x2^9*x3^6*x4^8*x5^5*x6^8*x7^10*x8^9 + -x1^8*x2^9*x3^6*x4^8*x5^5*x6^8*x7^10*x8^6 + -x1^8*x2^9*x3^6*x4^8*x5^5*x6^8*x7^8*x8^9 + x1^8*x2^9*x3^6*x4^8*x5^5*x6^8*x7^8*x8^6 + x1^8*x2^9*x3^6*x4^6*x5^6*x6^8*x7^10*x8^9 + -x1^8*x2^9*x3^6*x4^6*x5^6*x6^8*x7^10*x8^6 + -x1^8*x2^9*x3^6*x4^6*x5^6*x6^8*x7^8*x8^9 + x1^8*x2^9*x3^6*x4^6*x5^6*x6^8*x7^8*x8^6 + -x1^8*x2^9*x3^6*x4^6*x5^4*x6^8*x7^10*x8^9 + x1^8*x2^9*x3^6*x4^6*x5^4*x6^8*x7^10*x8^6 + x1^8*x2^9*x3^6*x4^6*x5^4*x6^8*x7^8*x8^9 + -x1^8*x2^9*x3^6*x4^6*x5^4*x6^8*x7^8*x8^6 + x1^8*x2^9*x3^5*x4^8*x5^6*x6^8*x7^10*x8^9 + -x1^8*x2^9*x3^5*x4^8*x5^6*x6^8*x7^10*x8^6 + -x1^8*x2^9*x3^5*x4^8*x5^6*x6^8*x7^8*x8^9 + x1^8*x2^9*x3^5*x4^8*x5^6*x6^8*x7^8*x8^6 + -x1^8*x2^9*x3^5*x4^8*x5^5*x6^8*x7^10*x8^9 + x1^8*x2^9*x3^5*x4^8*x5^5*x6^8*x7^10*x8^6 + x1^8*x2^9*x3^5*x4^8*x5^5*x6^8*x7^8*x8^9 + -x1^8*x2^9*x3^5*x4^8*x5^5*x6^8*x7^8*x8^6 + -x1^8*x2^9*x3^4*x4^6*x5^6*x6^8*x7^10*x8^9 + x1^8*x2^9*x3^4*x4^6*x5^6*x6^8*x7^10*x8^6 + x1^8*x2^9*x3^4*x4^6*x5^6*x6^8*x7^8*x8^9 + -x1^8*x2^9*x3^4*x4^6*x5^6*x6^8*x7^8*x8^6 + x1^8*x2^9*x3^4*x4^6*x5^4*x6^8*x7^10*x8^9 + -x1^8*x2^9*x3^4*x4^6*x5^4*x6^8*x7^10*x8^6 + -x1^8*x2^9*x3^4*x4^6*x5^4*x6^8*x7^8*x8^9 + x1^8*x2^9*x3^4*x4^6*x5^4*x6^8*x7^8*x8^6 + -x1^8*x2^7*x3^9*x4^10*x5^3*x6^10*x7^8*x8^5 + x1^8*x2^7*x3^9*x4^10*x5^3*x6^10*x7^7*x8^5 + -x1^8*x2^7*x3^9*x4^10*x5^3*x6^7*x7^10*x8^8 + x1^8*x2^7*x3^9*x4^10*x5^3*x6^7*x7^8*x8^5 + x1^8*x2^7*x3^9*x4^10*x5^3*x6^7*x7^7*x8^8 + -x1^8*x2^7*x3^9*x4^10*x5^3*x6^7*x7^7*x8^5 + x1^8*x2^7*x3^9*x4^10*x5^3*x6^6*x7^10*x8^8 + -x1^8*x2^7*x3^9*x4^10*x5^3*x6^5*x7^2*x8^8 + x1^8*x2^7*x3^9*x4^10*x5^2*x6^7*x7^10*x8^8 + -x1^8*x2^7*x3^9*x4^10*x5^2*x6^6*x7^10*x8^8 + x1^8*x2^7*x3^9*x4^10*x5*x6^10*x7^8*x8^5 + -x1^8*x2^7*x3^9*x4^10*x5*x6^10*x7^7*x8^5 + -x1^8*x2^7*x3^9*x4^10*x5*x6^7*x7^8*x8^5 + -x1^8*x2^7*x3^9*x4^10*x5*x6^7*x7^7*x8^8 + x1^8*x2^7*x3^9*x4^10*x5*x6^7*x7^7*x8^5 + x1^8*x2^7*x3^9*x4^10*x5*x6^5*x7^2*x8^8 + -x1^8*x2^6*x3^8*x4^9*x5^3*x6^10*x7^8*x8^8 + x1^8*x2^6*x3^8*x4^9*x5^3*x6^10*x7^7*x8^8 + x1^8*x2^6*x3^8*x4^9*x5^3*x6^7*x7^8*x8^8 + -x1^8*x2^6*x3^8*x4^9*x5^3*x6^7*x7^7*x8^8 + x1^8*x2^6*x3^8*x4^9*x5*x6^10*x7^8*x8^8 + -x1^8*x2^6*x3^8*x4^9*x5*x6^10*x7^7*x8^8 + -x1^8*x2^6*x3^8*x4^9*x5*x6^7*x7^8*x8^8 + x1^8*x2^6*x3^8*x4^9*x5*x6^7*x7^7*x8^8 + -x1^8*x2^6*x3^7*x4^8*x5^6*x6^10*x7^8*x8^9 + x1^8*x2^6*x3^7*x4^8*x5^6*x6^10*x7^8*x8^5 + x1^8*x2^6*x3^7*x4^8*x5^6*x6^10*x7^7*x8^9 + -x1^8*x2^6*x3^7*x4^8*x5^6*x6^10*x7^7*x8^5 + x1^8*x2^6*x3^7*x4^8*x5^6*x6^9*x7^8*x8^9 + -x1^8*x2^6*x3^7*x4^8*x5^6*x6^9*x7^8*x8^4 + -x1^8*x2^6*x3^7*x4^8*x5^6*x6^9*x7^7*x8^9 + x1^8*x2^6*x3^7*x4^8*x5^6*x6^9*x7^7*x8^4 + x1^8*x2^6*x3^7*x4^8*x5^6*x6^8*x7^10*x8^5 + -x1^8*x2^6*x3^7*x4^8*x5^6*x6^8*x7^10*x8^4 + -x1^8*x2^6*x3^7*x4^8*x5^6*x6^8*x7^8*x8^5 + x1^8*x2^6*x3^7*x4^8*x5^6*x6^8*x7^8*x8^4 + x1^8*x2^6*x3^7*x4^8*x5^5*x6^10*x7^8*x8^9 + -x1^8*x2^6*x3^7*x4^8*x5^5*x6^10*x7^8*x8^5 + -x1^8*x2^6*x3^7*x4^8*x5^5*x6^10*x7^7*x8^9 + x1^8*x2^6*x3^7*x4^8*x5^5*x6^10*x7^7*x8^5 + -x1^8*x2^6*x3^7*x4^8*x5^5*x6^9*x7^8*x8^9 + x1^8*x2^6*x3^7*x4^8*x5^5*x6^9*x7^8*x8^4 + x1^8*x2^6*x3^7*x4^8*x5^5*x6^9*x7^7*x8^9 + -x1^8*x2^6*x3^7*x4^8*x5^5*x6^9*x7^7*x8^4 + -x1^8*x2^6*x3^7*x4^8*x5^5*x6^7*x7^10*x8^5 + x1^8*x2^6*x3^7*x4^8*x5^5*x6^7*x7^10*x8^4 + x1^8*x2^6*x3^7*x4^8*x5^5*x6^7*x7^8*x8^5 + -x1^8*x2^6*x3^7*x4^8*x5^5*x6^7*x7^8*x8^4 + x1^8*x2^6*x3^7*x4^7*x5^6*x6^10*x7^8*x8^9 + -x1^8*x2^6*x3^7*x4^7*x5^6*x6^10*x7^8*x8^5 + -x1^8*x2^6*x3^7*x4^7*x5^6*x6^10*x7^7*x8^9 + x1^8*x2^6*x3^7*x4^7*x5^6*x6^10*x7^7*x8^5 + -x1^8*x2^6*x3^7*x4^7*x5^6*x6^8*x7^10*x8^5 + x1^8*x2^6*x3^7*x4^7*x5^6*x6^8*x7^10*x8^4 + -x1^8*x2^6*x3^7*x4^7*x5^6*x6^8*x7^8*x8^9 + x1^8*x2^6*x3^7*x4^7*x5^6*x6^8*x7^8*x8^5 + x1^8*x2^6*x3^7*x4^7*x5^6*x6^8*x7^7*x8^9 + -x1^8*x2^6*x3^7*x4^7*x5^6*x6^8*x7^7*x8^4 + -x1^8*x2^6*x3^7*x4^7*x5^3*x6^10*x7^8*x8^9 + x1^8*x2^6*x3^7*x4^7*x5^3*x6^10*x7^8*x8^5 + x1^8*x2^6*x3^7*x4^7*x5^3*x6^10*x7^7*x8^9 + -x1^8*x2^6*x3^7*x4^7*x5^3*x6^10*x7^7*x8^5 + x1^8*x2^6*x3^7*x4^7*x5^3*x6^8*x7^8*x8^9 + -x1^8*x2^6*x3^7*x4^7*x5^3*x6^8*x7^7*x8^9 + x1^8*x2^6*x3^7*x4^7*x5^3*x6^7*x7^10*x8^5 + -x1^8*x2^6*x3^7*x4^7*x5^3*x6^7*x7^10*x8^4 + -x1^8*x2^6*x3^7*x4^7*x5^3*x6^7*x7^8*x8^5 + x1^8*x2^6*x3^7*x4^7*x5^3*x6^7*x7^7*x8^4 + x1^8*x2^6*x3^6*x4^8*x5^6*x6^10*x7^8*x8^9 + -x1^8*x2^6*x3^6*x4^8*x5^6*x6^10*x7^8*x8^5 + -x1^8*x2^6*x3^6*x4^8*x5^6*x6^10*x7^7*x8^9 + x1^8*x2^6*x3^6*x4^8*x5^6*x6^10*x7^7*x8^5 + x1^8*x2^6*x3^6*x4^8*x5^6*x6^8*x7^10*x8^9 + -x1^8*x2^6*x3^6*x4^8*x5^6*x6^8*x7^10*x8^5 + -x1^8*x2^6*x3^6*x4^8*x5^6*x6^8*x7^8*x8^9 + x1^8*x2^6*x3^6*x4^8*x5^6*x6^8*x7^8*x8^5 + -x1^8*x2^6*x3^6*x4^8*x5^5*x6^10*x7^8*x8^9 + x1^8*x2^6*x3^6*x4^8*x5^5*x6^10*x7^8*x8^5 + x1^8*x2^6*x3^6*x4^8*x5^5*x6^10*x7^7*x8^9 + -x1^8*x2^6*x3^6*x4^8*x5^5*x6^10*x7^7*x8^5 + -x1^8*x2^6*x3^6*x4^8*x5^5*x6^8*x7^9*x8^9 + x1^8*x2^6*x3^6*x4^8*x5^5*x6^8*x7^8*x8^9 + -x1^8*x2^6*x3^6*x4^8*x5^5*x6^7*x7^10*x8^9 + x1^8*x2^6*x3^6*x4^8*x5^5*x6^7*x7^10*x8^5 + x1^8*x2^6*x3^6*x4^8*x5^5*x6^7*x7^9*x8^9 + -x1^8*x2^6*x3^6*x4^8*x5^5*x6^7*x7^8*x8^5 + -x1^8*x2^6*x3^6*x4^5*x5^6*x6^10*x7^8*x8^9 + x1^8*x2^6*x3^6*x4^5*x5^6*x6^10*x7^8*x8^5 + x1^8*x2^6*x3^6*x4^5*x5^6*x6^10*x7^7*x8^9 + -x1^8*x2^6*x3^6*x4^5*x5^6*x6^10*x7^7*x8^5 + -x1^8*x2^6*x3^6*x4^5*x5^6*x6^8*x7^10*x8^9 + x1^8*x2^6*x3^6*x4^5*x5^6*x6^8*x7^10*x8^5 + x1^8*x2^6*x3^6*x4^5*x5^6*x6^8*x7^8*x8^9 + -x1^8*x2^6*x3^6*x4^5*x5^6*x6^8*x7^8*x8^5 + -x1^8*x2^6*x3^6*x4^5*x5^5*x6^8*x7^10*x8^9 + x1^8*x2^6*x3^6*x4^5*x5^5*x6^8*x7^9*x8^9 + x1^8*x2^6*x3^6*x4^5*x5^5*x6^7*x7^10*x8^9 + -x1^8*x2^6*x3^6*x4^5*x5^5*x6^7*x7^9*x8^9 + x1^8*x2^6*x3^6*x4^5*x5^3*x6^10*x7^8*x8^9 + -x1^8*x2^6*x3^6*x4^5*x5^3*x6^10*x7^7*x8^9 + x1^8*x2^6*x3^6*x4^5*x5^3*x6^8*x7^10*x8^9 + -x1^8*x2^6*x3^6*x4^5*x5^3*x6^8*x7^8*x8^9 + -x1^8*x2^6*x3^6*x4^5*x5^2*x6^7*x7^10*x8^5 + -x1^8*x2^6*x3^6*x4^5*x5*x6^10*x7^8*x8^5 + x1^8*x2^6*x3^6*x4^5*x5*x6^10*x7^7*x8^5 + x1^8*x2^6*x3^6*x4^5*x5*x6^7*x7^8*x8^5 + x1^8*x2^6*x3^5*x4^8*x5^6*x6^9*x7^10*x8^9 + -x1^8*x2^6*x3^5*x4^8*x5^6*x6^9*x7^10*x8^4 + -x1^8*x2^6*x3^5*x4^8*x5^6*x6^9*x7^8*x8^9 + x1^8*x2^6*x3^5*x4^8*x5^6*x6^9*x7^8*x8^4 + -x1^8*x2^6*x3^5*x4^8*x5^6*x6^8*x7^10*x8^9 + x1^8*x2^6*x3^5*x4^8*x5^6*x6^8*x7^10*x8^4 + x1^8*x2^6*x3^5*x4^8*x5^6*x6^8*x7^8*x8^9 + -x1^8*x2^6*x3^5*x4^8*x5^6*x6^8*x7^8*x8^4 + -x1^8*x2^6*x3^5*x4^8*x5^5*x6^9*x7^10*x8^9 + x1^8*x2^6*x3^5*x4^8*x5^5*x6^9*x7^10*x8^4 + x1^8*x2^6*x3^5*x4^8*x5^5*x6^9*x7^8*x8^9 + -x1^8*x2^6*x3^5*x4^8*x5^5*x6^9*x7^8*x8^4 + x1^8*x2^6*x3^5*x4^8*x5^5*x6^8*x7^9*x8^9 + -x1^8*x2^6*x3^5*x4^8*x5^5*x6^8*x7^8*x8^9 + x1^8*x2^6*x3^5*x4^8*x5^5*x6^7*x7^10*x8^9 + -x1^8*x2^6*x3^5*x4^8*x5^5*x6^7*x7^10*x8^4 + -x1^8*x2^6*x3^5*x4^8*x5^5*x6^7*x7^9*x8^9 + x1^8*x2^6*x3^5*x4^8*x5^5*x6^7*x7^8*x8^4 + -x1^8*x2^6*x3^4*x4^8*x5^6*x6^9*x7^10*x8^9 + x1^8*x2^6*x3^4*x4^8*x5^6*x6^9*x7^7*x8^9 + x1^8*x2^6*x3^4*x4^8*x5^5*x6^9*x7^10*x8^9 + -x1^8*x2^6*x3^4*x4^8*x5^5*x6^9*x7^7*x8^9 + x1^8*x2^6*x3^4*x4^5*x5^6*x6^8*x7^10*x8^9 + -x1^8*x2^6*x3^4*x4^5*x5^6*x6^8*x7^7*x8^9 + x1^8*x2^6*x3^4*x4^5*x5^5*x6^8*x7^10*x8^9 + -x1^8*x2^6*x3^4*x4^5*x5^5*x6^8*x7^9*x8^9 + -x1^8*x2^6*x3^4*x4^5*x5^5*x6^7*x7^10*x8^9 + x1^8*x2^6*x3^4*x4^5*x5^5*x6^7*x7^9*x8^9 + -x1^8*x2^6*x3^4*x4^5*x5^3*x6^8*x7^10*x8^9 + x1^8*x2^6*x3^4*x4^5*x5^3*x6^8*x7^7*x8^9 + x1^8*x2^6*x3^3*x4^8*x5^6*x6^9*x7^10*x8^4 + -x1^8*x2^6*x3^3*x4^8*x5^6*x6^9*x7^7*x8^4 + -x1^8*x2^6*x3^3*x4^8*x5^5*x6^9*x7^10*x8^4 + x1^8*x2^6*x3^3*x4^8*x5^5*x6^9*x7^7*x8^4 + -x1^8*x2^6*x3^3*x4^5*x5^6*x6^8*x7^10*x8^4 + x1^8*x2^6*x3^3*x4^5*x5^6*x6^8*x7^7*x8^4 + x1^8*x2^6*x3^3*x4^5*x5^2*x6^7*x7^10*x8^4 + -x1^8*x2^6*x3^3*x4^5*x5*x6^7*x7^7*x8^4 + x1^8*x2^5*x3^8*x4^9*x5^3*x6^7*x7^10*x8^8 + -x1^8*x2^5*x3^8*x4^9*x5^3*x6^6*x7^10*x8^8 + -x1^8*x2^5*x3^8*x4^9*x5^2*x6^7*x7^10*x8^8 + x1^8*x2^5*x3^8*x4^9*x5^2*x6^6*x7^10*x8^8 + -x1^8*x2^5*x3^5*x4^8*x5^6*x6^9*x7^10*x8^9 + x1^8*x2^5*x3^5*x4^8*x5^6*x6^9*x7^10*x8^4 + x1^8*x2^5*x3^5*x4^8*x5^5*x6^9*x7^10*x8^9 + -x1^8*x2^5*x3^5*x4^8*x5^5*x6^9*x7^10*x8^4 + x1^8*x2^5*x3^4*x4^8*x5^6*x6^9*x7^10*x8^9 + -x1^8*x2^5*x3^4*x4^8*x5^5*x6^9*x7^10*x8^9 + -x1^8*x2^5*x3^3*x4^8*x5^6*x6^9*x7^10*x8^4 + x1^8*x2^5*x3^3*x4^8*x5^5*x6^9*x7^10*x8^4 + x1^8*x2^3*x3^8*x4^9*x5^3*x6^10*x7^8*x8^8 + -x1^8*x2^3*x3^8*x4^9*x5^3*x6^10*x7^7*x8^8 + -x1^8*x2^3*x3^8*x4^9*x5^3*x6^7*x7^8*x8^8 + x1^8*x2^3*x3^8*x4^9*x5^3*x6^2*x7^2*x8^8 + -x1^8*x2^3*x3^8*x4^9*x5*x6^10*x7^8*x8^8 + x1^8*x2^3*x3^8*x4^9*x5*x6^10*x7^7*x8^8 + x1^8*x2^3*x3^8*x4^9*x5*x6^7*x7^8*x8^8 + -x1^8*x2^3*x3^8*x4^9*x5*x6^2*x7^2*x8^8 + -x1^8*x2^3*x3^7*x4^8*x5^6*x6^9*x7^8*x8^5 + x1^8*x2^3*x3^7*x4^8*x5^6*x6^9*x7^8*x8^4 + x1^8*x2^3*x3^7*x4^8*x5^5*x6^9*x7^8*x8^5 + -x1^8*x2^3*x3^7*x4^8*x5^5*x6^9*x7^8*x8^4 + -x1^8*x2^3*x3^6*x4^8*x5^6*x6^9*x7^8*x8^9 + x1^8*x2^3*x3^6*x4^8*x5^6*x6^9*x7^8*x8^5 + x1^8*x2^3*x3^6*x4^8*x5^5*x6^9*x7^8*x8^9 + -x1^8*x2^3*x3^6*x4^8*x5^5*x6^9*x7^8*x8^5 + x1^8*x2^3*x3^5*x4^8*x5^6*x6^9*x7^8*x8^9 + -x1^8*x2^3*x3^5*x4^8*x5^6*x6^9*x7^8*x8^4 + -x1^8*x2^3*x3^5*x4^8*x5^5*x6^9*x7^8*x8^9 + x1^8*x2^3*x3^5*x4^8*x5^5*x6^9*x7^8*x8^4 + x1^8*x2^2*x3^7*x4^8*x5^6*x6^10*x7^8*x8^9 + -x1^8*x2^2*x3^7*x4^8*x5^6*x6^10*x7^8*x8^5 + -x1^8*x2^2*x3^7*x4^8*x5^6*x6^10*x7^7*x8^9 + x1^8*x2^2*x3^7*x4^8*x5^6*x6^10*x7^7*x8^5 + -x1^8*x2^2*x3^7*x4^8*x5^6*x6^9*x7^8*x8^9 + x1^8*x2^2*x3^7*x4^8*x5^6*x6^9*x7^8*x8^5 + x1^8*x2^2*x3^7*x4^8*x5^6*x6^9*x7^5*x8^9 + -x1^8*x2^2*x3^7*x4^8*x5^6*x6^9*x7^5*x8^4 + -x1^8*x2^2*x3^7*x4^8*x5^5*x6^10*x7^8*x8^9 + x1^8*x2^2*x3^7*x4^8*x5^5*x6^10*x7^8*x8^5 + x1^8*x2^2*x3^7*x4^8*x5^5*x6^10*x7^7*x8^9 + -x1^8*x2^2*x3^7*x4^8*x5^5*x6^10*x7^7*x8^5 + x1^8*x2^2*x3^7*x4^8*x5^5*x6^9*x7^8*x8^9 + -x1^8*x2^2*x3^7*x4^8*x5^5*x6^9*x7^8*x8^5 + -x1^8*x2^2*x3^7*x4^8*x5^5*x6^9*x7^5*x8^9 + x1^8*x2^2*x3^7*x4^8*x5^5*x6^9*x7^5*x8^4 + -x1^8*x2*x3^6*x4^8*x5^6*x6^10*x7^8*x8^9 + x1^8*x2*x3^6*x4^8*x5^6*x6^10*x7^8*x8^5 + x1^8*x2*x3^6*x4^8*x5^6*x6^10*x7^7*x8^9 + -x1^8*x2*x3^6*x4^8*x5^6*x6^10*x7^7*x8^5 + x1^8*x2*x3^6*x4^8*x5^6*x6^9*x7^8*x8^9 + -x1^8*x2*x3^6*x4^8*x5^6*x6^9*x7^8*x8^5 + x1^8*x2*x3^6*x4^8*x5^5*x6^10*x7^8*x8^9 + -x1^8*x2*x3^6*x4^8*x5^5*x6^10*x7^8*x8^5 + -x1^8*x2*x3^6*x4^8*x5^5*x6^10*x7^7*x8^9 + x1^8*x2*x3^6*x4^8*x5^5*x6^10*x7^7*x8^5 + -x1^8*x2*x3^6*x4^8*x5^5*x6^9*x7^8*x8^9 + x1^8*x2*x3^6*x4^8*x5^5*x6^9*x7^8*x8^5 + -x1^8*x2*x3^4*x4^8*x5^6*x6^9*x7^5*x8^9 + x1^8*x2*x3^4*x4^8*x5^5*x6^9*x7^5*x8^9 + x1^8*x2*x3^3*x4^8*x5^6*x6^9*x7^5*x8^4 + -x1^8*x2*x3^3*x4^8*x5^5*x6^9*x7^5*x8^4 + x1^7*x2^10*x3^7*x4^8*x5^7*x6^7*x7^10*x8^9 + -x1^7*x2^10*x3^7*x4^8*x5^7*x6^7*x7^9*x8^9 + -x1^7*x2^10*x3^7*x4^8*x5^7*x6^6*x7^10*x8^9 + x1^7*x2^10*x3^7*x4^8*x5^7*x6^5*x7^9*x8^9 + -x1^7*x2^10*x3^7*x4^7*x5^7*x6^7*x7^10*x8^9 + x1^7*x2^10*x3^7*x4^7*x5^7*x6^7*x7^9*x8^9 + x1^7*x2^10*x3^7*x4^7*x5^7*x6^6*x7^10*x8^9 + -x1^7*x2^10*x3^7*x4^7*x5^7*x6^5*x7^9*x8^9 + x1^7*x2^10*x3^6*x4^8*x5^7*x6^8*x7^10*x8^9 + -x1^7*x2^10*x3^6*x4^8*x5^7*x6^8*x7^9*x8^9 + -x1^7*x2^10*x3^6*x4^8*x5^7*x6^7*x7^10*x8^9 + x1^7*x2^10*x3^6*x4^8*x5^7*x6^7*x7^9*x8^9 + -x1^7*x2^10*x3^6*x4^6*x5^7*x6^8*x7^10*x8^9 + x1^7*x2^10*x3^6*x4^6*x5^7*x6^8*x7^9*x8^9 + x1^7*x2^10*x3^6*x4^6*x5^7*x6^7*x7^10*x8^9 + -x1^7*x2^10*x3^6*x4^6*x5^7*x6^7*x7^9*x8^9 + -x1^7*x2^10*x3^5*x4^8*x5^7*x6^8*x7^10*x8^9 + x1^7*x2^10*x3^5*x4^8*x5^7*x6^8*x7^9*x8^9 + x1^7*x2^10*x3^5*x4^8*x5^7*x6^6*x7^10*x8^9 + -x1^7*x2^10*x3^5*x4^8*x5^7*x6^5*x7^9*x8^9 + x1^7*x2^10*x3^4*x4^6*x5^7*x6^8*x7^10*x8^9 + -x1^7*x2^10*x3^4*x4^6*x5^7*x6^8*x7^9*x8^9 + -x1^7*x2^10*x3^4*x4^6*x5^7*x6^6*x7^10*x8^9 + x1^7*x2^10*x3^4*x4^6*x5^7*x6^5*x7^9*x8^9 + x1^7*x2^9*x3^6*x4^8*x5^6*x6^8*x7^10*x8^9 + -x1^7*x2^9*x3^6*x4^8*x5^6*x6^8*x7^8*x8^9 + -x1^7*x2^9*x3^6*x4^8*x5^5*x6^8*x7^10*x8^9 + x1^7*x2^9*x3^6*x4^8*x5^5*x6^8*x7^8*x8^9 + -x1^7*x2^9*x3^6*x4^6*x5^6*x6^8*x7^10*x8^9 + x1^7*x2^9*x3^6*x4^6*x5^6*x6^8*x7^8*x8^9 + x1^7*x2^9*x3^6*x4^6*x5^4*x6^8*x7^10*x8^9 + -x1^7*x2^9*x3^6*x4^6*x5^4*x6^8*x7^8*x8^9 + -x1^7*x2^9*x3^5*x4^8*x5^6*x6^8*x7^10*x8^9 + x1^7*x2^9*x3^5*x4^8*x5^6*x6^8*x7^8*x8^9 + x1^7*x2^9*x3^5*x4^8*x5^5*x6^8*x7^10*x8^9 + -x1^7*x2^9*x3^5*x4^8*x5^5*x6^8*x7^8*x8^9 + x1^7*x2^9*x3^4*x4^6*x5^6*x6^8*x7^10*x8^9 + -x1^7*x2^9*x3^4*x4^6*x5^6*x6^8*x7^8*x8^9 + -x1^7*x2^9*x3^4*x4^6*x5^4*x6^8*x7^10*x8^9 + x1^7*x2^9*x3^4*x4^6*x5^4*x6^8*x7^8*x8^9 + -x1^7*x2^7*x3^9*x4^7*x5^6*x6^10*x7^7*x8^9 + x1^7*x2^7*x3^9*x4^7*x5^6*x6^10*x7*x8^9 + x1^7*x2^7*x3^9*x4^7*x5^3*x6^10*x7^7*x8^9 + -x1^7*x2^7*x3^9*x4^7*x5^3*x6^10*x8^9 + x1^7*x2^7*x3^9*x4^6*x5^6*x6^10*x7^7*x8^9 + -x1^7*x2^7*x3^9*x4^6*x5^6*x6^10*x7*x8^9 + -x1^7*x2^7*x3^9*x4^6*x5^3*x6^10*x7^7*x8^9 + x1^7*x2^7*x3^9*x4^6*x5^3*x6^10*x8^9 + -x1^7*x2^6*x3^7*x4^8*x5^5*x6^7*x7^10*x8^9 + x1^7*x2^6*x3^7*x4^8*x5^5*x6^7*x7^9*x8^9 + x1^7*x2^6*x3^7*x4^8*x5^5*x6^6*x7^10*x8^9 + -x1^7*x2^6*x3^7*x4^8*x5^5*x6^5*x7^9*x8^9 + x1^7*x2^6*x3^7*x4^7*x5^5*x6^7*x7^10*x8^9 + -x1^7*x2^6*x3^7*x4^7*x5^5*x6^7*x7^9*x8^9 + -x1^7*x2^6*x3^7*x4^7*x5^5*x6^6*x7^10*x8^9 + x1^7*x2^6*x3^7*x4^7*x5^5*x6^5*x7^9*x8^9 + -x1^7*x2^6*x3^6*x4^8*x5^5*x6^8*x7^10*x8^9 + x1^7*x2^6*x3^6*x4^8*x5^5*x6^8*x7^9*x8^9 + x1^7*x2^6*x3^6*x4^8*x5^5*x6^7*x7^10*x8^9 + -x1^7*x2^6*x3^6*x4^8*x5^5*x6^7*x7^9*x8^9 + x1^7*x2^6*x3^6*x4^3*x5^5*x6^8*x7^10*x8^9 + -x1^7*x2^6*x3^6*x4^3*x5^5*x6^7*x7^10*x8^9 + -x1^7*x2^6*x3^6*x4*x5^5*x6^8*x7^9*x8^9 + x1^7*x2^6*x3^6*x4*x5^5*x6^7*x7^9*x8^9 + x1^7*x2^6*x3^5*x4^8*x5^5*x6^8*x7^10*x8^9 + -x1^7*x2^6*x3^5*x4^8*x5^5*x6^8*x7^9*x8^9 + -x1^7*x2^6*x3^5*x4^8*x5^5*x6^6*x7^10*x8^9 + x1^7*x2^6*x3^5*x4^8*x5^5*x6^5*x7^9*x8^9 + -x1^7*x2^6*x3^4*x4^3*x5^5*x6^8*x7^10*x8^9 + x1^7*x2^6*x3^4*x4^3*x5^5*x6^6*x7^10*x8^9 + x1^7*x2^6*x3^4*x4*x5^5*x6^8*x7^9*x8^9 + -x1^7*x2^6*x3^4*x5^5*x6^5*x7^9*x8^9 + -x1^7*x2^5*x3^6*x4^8*x5^6*x6^8*x7^10*x8^9 + x1^7*x2^5*x3^6*x4^8*x5^5*x6^8*x7^10*x8^9 + x1^7*x2^5*x3^6*x4^3*x5^6*x6^8*x7^10*x8^9 + -x1^7*x2^5*x3^6*x4^3*x5^3*x6^8*x7^10*x8^9 + x1^7*x2^5*x3^5*x4^8*x5^6*x6^8*x7^10*x8^9 + -x1^7*x2^5*x3^5*x4^8*x5^5*x6^8*x7^10*x8^9 + -x1^7*x2^5*x3^4*x4^3*x5^6*x6^8*x7^10*x8^9 + x1^7*x2^5*x3^4*x4^3*x5^3*x6^8*x7^10*x8^9 + x1^7*x2^3*x3^6*x4^8*x5^6*x6^8*x7^8*x8^9 + -x1^7*x2^3*x3^6*x4^8*x5^5*x6^8*x7^8*x8^9 + -x1^7*x2^3*x3^5*x4^8*x5^6*x6^8*x7^8*x8^9 + x1^7*x2^3*x3^5*x4^8*x5^5*x6^8*x7^8*x8^9 + -x1^7*x2^2*x3^7*x4^7*x5^6*x6^10*x7^8*x8^9 + x1^7*x2^2*x3^7*x4^7*x5^6*x6^10*x7^7*x8^9 + x1^7*x2^2*x3^7*x4^7*x5^6*x6^8*x7^8*x8^9 + -x1^7*x2^2*x3^7*x4^7*x5^6*x6^8*x7*x8^9 + x1^7*x2^2*x3^7*x4^7*x5^3*x6^10*x7^8*x8^9 + -x1^7*x2^2*x3^7*x4^7*x5^3*x6^10*x7^7*x8^9 + -x1^7*x2^2*x3^7*x4^7*x5^3*x6^8*x7^8*x8^9 + x1^7*x2^2*x3^7*x4^7*x5^3*x6^8*x8^9 + x1^7*x2*x3^6*x4^3*x5^6*x6^10*x7^8*x8^9 + -x1^7*x2*x3^6*x4^3*x5^6*x6^10*x7^7*x8^9 + -x1^7*x2*x3^6*x4^3*x5^3*x6^10*x7^8*x8^9 + x1^7*x2*x3^6*x4^3*x5^3*x6^10*x7^7*x8^9 + -x1^7*x2*x3^6*x4^2*x5^6*x6^8*x7^8*x8^9 + x1^7*x2*x3^6*x4*x5^3*x6^8*x7^8*x8^9 + x1^7*x2*x3^4*x4^2*x5^6*x6^8*x7*x8^9 + -x1^7*x2*x3^4*x4*x5^3*x6^8*x8^9 + x1^6*x2^10*x3^7*x4^8*x5^7*x6^8*x7^10*x8^5 + -x1^6*x2^10*x3^7*x4^8*x5^7*x6^8*x7^10*x8^4 + -x1^6*x2^10*x3^7*x4^8*x5^7*x6^8*x7^8*x8^5 + x1^6*x2^10*x3^7*x4^8*x5^7*x6^8*x7^8*x8^4 + -x1^6*x2^10*x3^7*x4^8*x5^7*x6^7*x7^10*x8^5 + x1^6*x2^10*x3^7*x4^8*x5^7*x6^7*x7^8*x8^5 + x1^6*x2^10*x3^7*x4^8*x5^7*x6^6*x7^10*x8^4 + -x1^6*x2^10*x3^7*x4^8*x5^7*x6^5*x7^8*x8^4 + -x1^6*x2^10*x3^7*x4^7*x5^7*x6^8*x7^10*x8^5 + x1^6*x2^10*x3^7*x4^7*x5^7*x6^8*x7^10*x8^4 + x1^6*x2^10*x3^7*x4^7*x5^7*x6^8*x7^8*x8^5 + -x1^6*x2^10*x3^7*x4^7*x5^7*x6^8*x7^2*x8^4 + x1^6*x2^10*x3^7*x4^7*x5^7*x6^7*x7^10*x8^5 + -x1^6*x2^10*x3^7*x4^7*x5^7*x6^7*x7^8*x8^5 + -x1^6*x2^10*x3^7*x4^7*x5^7*x6^6*x7^10*x8^4 + x1^6*x2^10*x3^7*x4^7*x5^7*x6^5*x7^2*x8^4 + -x1^6*x2^10*x3^6*x4^8*x5^7*x6^8*x7^10*x8^5 + x1^6*x2^10*x3^6*x4^8*x5^7*x6^8*x7^8*x8^5 + x1^6*x2^10*x3^6*x4^8*x5^7*x6^7*x7^10*x8^5 + -x1^6*x2^10*x3^6*x4^8*x5^7*x6^7*x7^8*x8^5 + x1^6*x2^10*x3^6*x4^6*x5^7*x6^8*x7^10*x8^5 + -x1^6*x2^10*x3^6*x4^6*x5^7*x6^8*x7^8*x8^5 + -x1^6*x2^10*x3^6*x4^6*x5^7*x6^7*x7^10*x8^5 + x1^6*x2^10*x3^6*x4^6*x5^7*x6^7*x7^8*x8^5 + x1^6*x2^10*x3^5*x4^8*x5^7*x6^8*x7^10*x8 + -x1^6*x2^10*x3^5*x4^8*x5^7*x6^8*x7^8*x8 + -x1^6*x2^10*x3^5*x4^8*x5^7*x6^6*x7^10*x8 + x1^6*x2^10*x3^5*x4^8*x5^7*x6^5*x7^8*x8 + -x1^6*x2^10*x3^3*x4^6*x5^7*x6^8*x7^10*x8 + x1^6*x2^10*x3^3*x4^6*x5^7*x6^6*x7^10*x8 + x1^6*x2^10*x3^2*x4^6*x5^7*x6^8*x7^2*x8 + -x1^6*x2^10*x3^2*x4^6*x5^7*x6^5*x7^2*x8 + -x1^6*x2^9*x3^6*x4^8*x5^6*x6^8*x7^10*x8^6 + x1^6*x2^9*x3^6*x4^8*x5^5*x6^8*x7^10*x8^6 + x1^6*x2^9*x3^6*x4^6*x5^6*x6^8*x7^10*x8^6 + -x1^6*x2^9*x3^6*x4^6*x5^4*x6^8*x7^10*x8^6 + x1^6*x2^9*x3^5*x4^8*x5^6*x6^8*x7^10*x8^6 + -x1^6*x2^9*x3^5*x4^8*x5^5*x6^8*x7^10*x8^6 + -x1^6*x2^9*x3^4*x4^6*x5^6*x6^8*x7^10*x8^6 + x1^6*x2^9*x3^4*x4^6*x5^4*x6^8*x7^10*x8^6 + x1^6*x2^7*x3^9*x4^10*x5^3*x6^10*x7^8*x8^5 + -x1^6*x2^7*x3^9*x4^10*x5^3*x6^10*x7^7*x8^5 + x1^6*x2^7*x3^9*x4^10*x5^3*x6^7*x7^10*x8^5 + -x1^6*x2^7*x3^9*x4^10*x5^3*x6^6*x7^10*x8^5 + -x1^6*x2^7*x3^9*x4^10*x5^2*x6^7*x7^10*x8^5 + x1^6*x2^7*x3^9*x4^10*x5^2*x6^6*x7^10*x8^5 + -x1^6*x2^7*x3^9*x4^10*x5*x6^10*x7^8*x8^5 + x1^6*x2^7*x3^9*x4^10*x5*x6^10*x7^7*x8^5 + -x1^6*x2^7*x3^9*x4^7*x5^6*x6^10*x7^8*x8^7 + x1^6*x2^7*x3^9*x4^7*x5^6*x6^10*x7^7*x8^7 + x1^6*x2^7*x3^9*x4^7*x5^3*x6^10*x7^8*x8^7 + -x1^6*x2^7*x3^9*x4^7*x5^3*x6^10*x7^7*x8^7 + x1^6*x2^7*x3^9*x4^6*x5^6*x6^10*x7^8*x8^7 + -x1^6*x2^7*x3^9*x4^6*x5^6*x6^10*x7^7*x8^7 + -x1^6*x2^7*x3^9*x4^6*x5^3*x6^10*x7^8*x8^7 + x1^6*x2^7*x3^9*x4^6*x5^3*x6^10*x7^7*x8^7 + -x1^6*x2^5*x3^7*x4^8*x5^6*x6^8*x7^10*x8^5 + x1^6*x2^5*x3^7*x4^8*x5^6*x6^8*x7^10*x8^4 + x1^6*x2^5*x3^7*x4^8*x5^5*x6^7*x7^10*x8^5 + -x1^6*x2^5*x3^7*x4^8*x5^5*x6^6*x7^10*x8^4 + x1^6*x2^5*x3^7*x4^7*x5^6*x6^8*x7^10*x8^5 + -x1^6*x2^5*x3^7*x4^7*x5^6*x6^8*x7^10*x8^4 + -x1^6*x2^5*x3^7*x4^7*x5^3*x6^7*x7^10*x8^5 + x1^6*x2^5*x3^7*x4^7*x5^3*x6^6*x7^10*x8^4 + x1^6*x2^5*x3^6*x4^8*x5^6*x6^8*x7^10*x8^5 + -x1^6*x2^5*x3^6*x4^8*x5^5*x6^7*x7^10*x8^5 + -x1^6*x2^5*x3^6*x4^3*x5^6*x6^8*x7^10*x8^5 + x1^6*x2^5*x3^6*x4^3*x5^2*x6^7*x7^10*x8^5 + -x1^6*x2^5*x3^5*x4^8*x5^6*x6^8*x7^10*x8 + x1^6*x2^5*x3^5*x4^8*x5^5*x6^6*x7^10 + x1^6*x2^5*x3^3*x4^3*x5^6*x6^8*x7^10*x8 + -x1^6*x2^5*x3^3*x4^3*x5^2*x6^6*x7^10 + x1^6*x2^2*x3^7*x4^7*x5^6*x6^10*x7^8*x8^5 + -x1^6*x2^2*x3^7*x4^7*x5^6*x6^10*x7^7*x8^5 + -x1^6*x2^2*x3^7*x4^7*x5^3*x6^10*x7^8*x8^5 + x1^6*x2^2*x3^7*x4^7*x5^3*x6^10*x7^7*x8^5 + x1^6*x2*x3^6*x4^8*x5^8*x6^10*x7^8*x8^9 + -x1^6*x2*x3^6*x4^8*x5^8*x6^10*x7^7*x8^9 + -x1^6*x2*x3^6*x4^3*x5^6*x6^10*x7^8*x8^5 + x1^6*x2*x3^6*x4^3*x5^6*x6^10*x7^7*x8^5 + -x1^6*x3^6*x4^8*x5^8*x6^10*x7^8*x8^9 + x1^6*x3^6*x4^8*x5^8*x6^10*x7^7*x8^9 + x1^6*x3^6*x4^3*x5*x6^10*x7^8*x8^5 + -x1^6*x3^6*x4^3*x5*x6^10*x7^7*x8^5 + -x1^5*x2^7*x3^9*x4^10*x5^3*x6^7*x7^8*x8^5 + x1^5*x2^7*x3^9*x4^10*x5^3*x6^5*x7*x8^5 + x1^5*x2^7*x3^9*x4^10*x6^7*x7^8*x8^5 + -x1^5*x2^7*x3^9*x4^10*x6^5*x7*x8^5 + x1^5*x2^7*x3^9*x4^7*x5^6*x6^10*x7^8*x8^7 + -x1^5*x2^7*x3^9*x4^7*x5^6*x6^10*x7*x8^7 + -x1^5*x2^7*x3^9*x4^7*x5^3*x6^10*x7^8*x8^7 + x1^5*x2^7*x3^9*x4^7*x5^3*x6^10*x8^7 + x1^5*x2^3*x3^7*x4^8*x5^6*x6^8*x7^8*x8^5 + -x1^5*x2^3*x3^7*x4^8*x5^6*x6^8*x7^8*x8^4 + -x1^5*x2^3*x3^7*x4^8*x5^5*x6^7*x7^8*x8^5 + x1^5*x2^3*x3^7*x4^8*x5^5*x6^5*x7^8*x8^4 + -x1^5*x2^2*x3^7*x4^7*x5^6*x6^8*x7^8*x8^5 + x1^5*x2^2*x3^7*x4^7*x5^6*x6^8*x7*x8^4 + x1^5*x2^2*x3^7*x4^7*x5^3*x6^7*x7^8*x8^5 + -x1^5*x2^2*x3^7*x4^7*x5^3*x6^2*x8^4 + x1^4*x2^9*x3^6*x4^8*x5^6*x6^8*x7^8*x8^6 + -x1^4*x2^9*x3^6*x4^8*x5^5*x6^8*x7^8*x8^6 + -x1^4*x2^9*x3^5*x4^8*x5^6*x6^8*x7^8*x8^6 + x1^4*x2^9*x3^5*x4^8*x5^5*x6^8*x7^8*x8^6 + -x1^4*x2^3*x3^6*x4^8*x5^7*x6^7*x7^8*x8^10 + x1^4*x2^3*x3^6*x4^8*x5^7*x6^6*x7^8*x8^10 + -x1^4*x2^3*x3^6*x4^8*x5^6*x6^8*x7^8*x8^5 + x1^4*x2^3*x3^6*x4^8*x5^5*x6^7*x7^8*x8^5 + x1^4*x2^3*x3^5*x4^8*x5^6*x6^8*x7^8*x8 + -x1^4*x2^3*x3^5*x4^8*x5^5*x6^5*x7^8 + -x1^3*x2^9*x3^6*x4^6*x5^6*x6^8*x7^8*x8^6 + x1^3*x2^9*x3^6*x4^6*x5^4*x6^8*x7^8*x8^6 + x1^3*x2^9*x3^4*x4^6*x5^6*x6^8*x7^8*x8^6 + -x1^3*x2^9*x3^4*x4^6*x5^4*x6^8*x7^8*x8^6 + x1^3*x2^7*x3^9*x4^8*x5^8*x6^10*x7^8*x8^10 + -x1^3*x2^7*x3^9*x4^8*x5^8*x6^10*x7^6*x8^9 + -x1^3*x2^7*x3^9*x4^8*x5^7*x6^10*x7^8*x8^10 + -x1^3*x2^7*x3^9*x4^6*x5^6*x6^10*x7^8*x8^7 + x1^3*x2^7*x3^9*x4^6*x5^6*x6^10*x7*x8^7 + x1^3*x2^7*x3^9*x4^6*x5^3*x6^10*x7^8*x8^7 + -x1^3*x2^3*x3^6*x4^8*x5^8*x6^10*x7^8*x8^10 + x1^3*x2^3*x3^6*x4^8*x5^7*x6^7*x7^8*x8^10 + x1^3*x2^2*x3*x4^7*x5^7*x6^9*x7^10*x8^9 + -x1^3*x2^2*x4^7*x5^7*x6^9*x7^10*x8^9 + -x1^3*x2*x3^6*x4^8*x5^8*x6^10*x7^8*x8^9 + x1^3*x2*x3^6*x4^2*x5^6*x6^8*x7^8*x8^5 + x1^3*x2*x3^3*x4^8*x5^8*x6^10*x7^6*x8^9 + -x1^3*x2*x3*x4^2*x5^6*x6^8*x7*x8 + x1^3*x3^6*x4^8*x5^8*x6^10*x7^8*x8^9 + -x1^3*x3^6*x4*x6^7*x7^8*x8^5 + -x1^2*x2^7*x3^9*x4^8*x5^8*x6^10*x7^8*x8^10 + x1^2*x2^7*x3^9*x4^8*x5^8*x6^10*x7^6*x8^9 + x1^2*x2^3*x3^6*x4^8*x5^8*x6^10*x7^8*x8^10 + -x1^2*x3^3*x4^8*x5^8*x6^10*x7^6*x8^9 + x1*x2^7*x3^9*x4^8*x5^7*x6^10*x7^8*x8^10 + -x1*x2^7*x3^9*x4^6*x5^3*x6^10*x8^7 + -x1*x2^3*x3^6*x4^8*x5^7*x6^6*x7^8*x8^10 + 1; frobby-0.9.5/test/commonIdeals/t14.opt_irr000066400000000000000000000001471401527164200204150ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^8*x2^10*x3^6*x4^8*x6^8*x7^10*x8^9 ); 59 frobby-0.9.5/test/commonIdeals/t14.opt_irr_min000066400000000000000000000001041401527164200212510ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1 ); 1 frobby-0.9.5/test/commonIdeals/t14.opt_std000066400000000000000000000001151401527164200204060ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t14.opt_std_min000066400000000000000000000001151401527164200212510ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t14.primdecom000066400000000000000000000674411401527164200207300ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^10, x2^10, x3^7, x6^8, x6^7*x7^7, x7^8 ); I = monomialIdeal( x1^10, x2^10, x3^5, x6^7, x7^10, x8^9 ); I = monomialIdeal( x1^10, x2^10, x3^5, x6^7, x7^9 ); I = monomialIdeal( x1^10, x2^10, x3^5, x6^6, x8^9 ); I = monomialIdeal( x1^10, x2^10, x3^4, x6^7, x7^10 ); I = monomialIdeal( x1^10, x2^10, x3^4, x6^6 ); I = monomialIdeal( x1^10, x2^7, x4^7, x5^6, x7^7, x8^9 ); I = monomialIdeal( x1^10, x2^7, x5^3, x6^7, x7^10, x8^8 ); I = monomialIdeal( x1^10, x2^7, x5^3, x6^6, x8^8 ); I = monomialIdeal( x1^10, x2^7, x5^3, x7^7, x8^8 ); I = monomialIdeal( x1^10, x2^6, x3^8, x5^3, x6^10, x7^8 ); I = monomialIdeal( x1^10, x2^6, x3^7, x5^6, x5^5*x6^9, x6^10, x7^8, x8^9 ); I = monomialIdeal( x1^10, x2^6, x3^7, x6^8, x7^8 ); I = monomialIdeal( x1^10, x2^6, x3^6, x4^8, x5^6, x7^10, x8^9 ); I = monomialIdeal( x1^10, x2^6, x3^6, x5^5, x6^8, x7^10 ); I = monomialIdeal( x1^10, x2^6, x3^6, x5^5, x7^10, x8^9 ); I = monomialIdeal( x1^10, x2^6, x3^6, x5^3, x7^10 ); I = monomialIdeal( x1^10, x2^6, x3^5, x5^6, x6^9, x7^10, x8^9 ); I = monomialIdeal( x1^10, x2^6, x3^5, x6^8, x7^10 ); I = monomialIdeal( x1^10, x2^6, x3^5, x6^6 ); I = monomialIdeal( x1^10, x2^6, x3^4, x4^8, x5^6, x7^10 ); I = monomialIdeal( x1^10, x2^6, x3^4, x5^6, x6^9, x7^10 ); I = monomialIdeal( x1^10, x2^6, x3^4, x5^5, x7^10 ); I = monomialIdeal( x1^10, x2^6, x4 ); I = monomialIdeal( x1^10, x2^6, x5^3, x6^10, x7^8, x8^8 ); I = monomialIdeal( x1^10, x2^5, x3^6, x4^8, x5^6, x8^9 ); I = monomialIdeal( x1^10, x2^5, x3^6, x5^5, x8^9 ); I = monomialIdeal( x1^10, x2^5, x3^6, x5^3 ); I = monomialIdeal( x1^10, x2^5, x3^4, x4^8, x5^6 ); I = monomialIdeal( x1^10, x2^5, x3^4, x5^5 ); I = monomialIdeal( x1^10, x2^3, x5^3, x7^7 ); I = monomialIdeal( x1^10, x2^2, x4^8, x5^6, x7^7, x8^9 ); I = monomialIdeal( x1^10, x2^2, x5^6, x5^5*x7^5, x7^7, x8^9 ); I = monomialIdeal( x1^10, x3^9, x4^7, x5^6, x7^7, x8^9 ); I = monomialIdeal( x1^10, x3^9, x5^3, x6^7, x7^10, x8^8 ); I = monomialIdeal( x1^10, x3^9, x5^3, x6^6, x8^8 ); I = monomialIdeal( x1^10, x3^9, x5^3, x7^7, x8^8 ); I = monomialIdeal( x1^10, x3^8, x5^3, x6^7, x7^10 ); I = monomialIdeal( x1^10, x3^8, x5^3, x6^6 ); I = monomialIdeal( x1^10, x3^8, x5^3, x7^7 ); I = monomialIdeal( x1^10, x3^7, x4^8, x5^6, x7^7, x8^9 ); I = monomialIdeal( x1^10, x3^7, x5^7, x6^8, x6^7*x7^7, x7^8 ); I = monomialIdeal( x1^10, x3^7, x5^6, x6^9, x7^7, x8^9 ); I = monomialIdeal( x1^10, x3^7, x5^6, x7^5, x8^9 ); I = monomialIdeal( x1^10, x3^7, x5^5, x6^7, x7^10 ); I = monomialIdeal( x1^10, x3^7, x5^5, x6^6 ); I = monomialIdeal( x1^10, x3^7, x5^5, x7^7, x8^9 ); I = monomialIdeal( x1^10, x3^6, x4^5, x5^6, x7^10, x8^9 ); I = monomialIdeal( x1^10, x3^6, x4^5, x5^3, x7^10 ); I = monomialIdeal( x1^10, x3^6, x4^3, x5^6, x8^9 ); I = monomialIdeal( x1^10, x3^6, x4^3, x5^3 ); I = monomialIdeal( x1^10, x3^6, x4^2, x8^9 ); I = monomialIdeal( x1^10, x3^5, x5^7, x6^7, x7^10, x8^9 ); I = monomialIdeal( x1^10, x3^5, x5^7, x6^7, x7^9 ); I = monomialIdeal( x1^10, x3^5, x5^7, x6^6, x8^9 ); I = monomialIdeal( x1^10, x3^4, x4^8, x4^5*x7^7, x5^6, x7^10 ); I = monomialIdeal( x1^10, x3^4, x4^3, x5^6 ); I = monomialIdeal( x1^10, x3^4, x4^2 ); I = monomialIdeal( x1^10, x3^4, x5^7, x6^7, x7^10 ); I = monomialIdeal( x1^10, x3^4, x5^7, x6^6 ); I = monomialIdeal( x1^10, x3^4, x5^6, x5^5*x7^5, x7^7 ); I = monomialIdeal( x1^10, x3^4, x5^6, x6^9, x7^7 ); I = monomialIdeal( x1^10, x4^10, x5^3, x7^7, x8^8 ); I = monomialIdeal( x1^10, x4^9, x5^3, x7^7 ); I = monomialIdeal( x1^10, x4^7, x4^6*x8^7, x4^3*x7^7, x5^6, x7^8, x8^9 ); I = monomialIdeal( x1^10, x4^3, x5^3, x7^8 ); I = monomialIdeal( x1^10, x4^2, x7^8, x8^9 ); I = monomialIdeal( x1^10, x4, x5^5 ); I = monomialIdeal( x1^10, x4, x7^9 ); I = monomialIdeal( x1^10, x4, x8^9 ); I = monomialIdeal( x1^8, x2^10, x3^7, x4^8, x6^8, x7^10, x8^5 ); I = monomialIdeal( x1^8, x2^10, x3^7, x6^8, x7^8 ); I = monomialIdeal( x1^8, x2^10, x3^6, x4^8, x6^8, x7^10, x8^9 ); I = monomialIdeal( x1^8, x2^10, x3^6, x4^8, x6^8, x7^9 ); I = monomialIdeal( x1^8, x2^10, x3^5, x3^4*x7^9, x6^8, x7^10 ); I = monomialIdeal( x1^8, x2^10, x3^5, x6^8, x7^10, x8^9 ); I = monomialIdeal( x1^8, x2^10, x4^7, x6^8, x7^10, x8^5 ); I = monomialIdeal( x1^8, x2^10, x4^7, x6^8, x7^8 ); I = monomialIdeal( x1^8, x2^9, x3^6, x3^5*x5^5, x5^6, x7^10, x8^9 ); I = monomialIdeal( x1^8, x2^9, x3^6, x4^8, x5^6, x7^10, x8^9 ); I = monomialIdeal( x1^8, x2^7, x5^3, x6^10, x6^7*x7^8, x7^10 ); I = monomialIdeal( x1^8, x2^7, x5^3, x6^6 ); I = monomialIdeal( x1^8, x2^7, x5^3, x7^7 ); I = monomialIdeal( x1^8, x2^7, x5^2, x6^7 ); I = monomialIdeal( x1^8, x2^5, x3^5, x5^6, x8^9 ); I = monomialIdeal( x1^8, x2^5, x3^4, x5^6 ); I = monomialIdeal( x1^8, x2^5, x5^3, x6^7 ); I = monomialIdeal( x1^8, x2^3, x3^7, x3^6*x8^5, x5^6, x8^9 ); I = monomialIdeal( x1^8, x2^2, x5^6, x6^10, x7^8, x8^9 ); I = monomialIdeal( x1^8, x2^2, x5^6, x7^7, x8^9 ); I = monomialIdeal( x1^8, x2^2, x5^6, x8^5 ); I = monomialIdeal( x1^8, x3^9, x5^3, x6^10, x6^7*x7^8, x7^10 ); I = monomialIdeal( x1^8, x3^9, x5^3, x6^6 ); I = monomialIdeal( x1^8, x3^9, x5^3, x7^7 ); I = monomialIdeal( x1^8, x3^9, x5^2, x6^7 ); I = monomialIdeal( x1^8, x3^7, x4^8, x5^7, x6^8, x7^10, x8^5 ); I = monomialIdeal( x1^8, x3^7, x4^8, x5^6, x7^10, x8^5 ); I = monomialIdeal( x1^8, x3^7, x5^7, x6^8, x7^8 ); I = monomialIdeal( x1^8, x3^7, x5^6, x5^5*x7^8, x7^10, x7^7*x8^5, x8^9 ); I = monomialIdeal( x1^8, x3^7, x5^6, x6^10, x7^8, x8^9 ); I = monomialIdeal( x1^8, x3^6, x4^8, x4^6*x8^6, x5^6, x7^10, x8^9 ); I = monomialIdeal( x1^8, x3^6, x4^8, x5^7, x6^8, x7^10, x8^9 ); I = monomialIdeal( x1^8, x3^6, x4^8, x5^7, x6^8, x7^9 ); I = monomialIdeal( x1^8, x3^6, x4^6, x6^8, x7^10, x8^9 ); I = monomialIdeal( x1^8, x3^6, x4^6, x6^8, x7^9 ); I = monomialIdeal( x1^8, x3^6, x5^6, x7^8, x8^9 ); I = monomialIdeal( x1^8, x3^6, x5^5, x5^4*x8^6, x7^10, x8^9 ); I = monomialIdeal( x1^8, x3^6, x5^5, x6^8, x7^10 ); I = monomialIdeal( x1^8, x3^6, x5^3, x7^10 ); I = monomialIdeal( x1^8, x3^6, x5^2 ); I = monomialIdeal( x1^8, x3^5, x5^7, x6^8, x7^10, x8^9 ); I = monomialIdeal( x1^8, x3^5, x5^7, x6^8, x7^9 ); I = monomialIdeal( x1^8, x3^5, x5^6, x7^10, x8^6 ); I = monomialIdeal( x1^8, x3^4, x4^6, x6^8, x7^10 ); I = monomialIdeal( x1^8, x3^4, x5^7, x6^8, x7^10 ); I = monomialIdeal( x1^8, x3^4, x5^6, x7^10 ); I = monomialIdeal( x1^8, x4^10, x5^3, x6^10, x6^7*x7^8, x7^10 ); I = monomialIdeal( x1^8, x4^10, x5^3, x6^6 ); I = monomialIdeal( x1^8, x4^10, x5^3, x7^7 ); I = monomialIdeal( x1^8, x4^10, x5^2, x6^7 ); I = monomialIdeal( x1^8, x4^7, x5^7, x6^8, x7^10, x8^5 ); I = monomialIdeal( x1^8, x4^7, x5^7, x6^8, x7^8 ); I = monomialIdeal( x1^8, x4^7, x5^6, x6^10, x7^8, x8^9 ); I = monomialIdeal( x1^8, x4^7, x5^6, x7^10, x8^5 ); I = monomialIdeal( x1^8, x4^6, x6^8, x7^10, x8^5 ); I = monomialIdeal( x1^8, x4^6, x6^8, x7^8 ); I = monomialIdeal( x1^8, x5^3, x6^5 ); I = monomialIdeal( x1^8, x5^3, x7^10, x8^5 ); I = monomialIdeal( x1^8, x5^2, x8^5 ); I = monomialIdeal( x1^7, x2^10, x3^7, x4^8, x6^7, x7^10 ); I = monomialIdeal( x1^7, x2^10, x3^7, x4^8, x6^6 ); I = monomialIdeal( x1^7, x2^10, x3^6, x4^8, x6^8, x7^10 ); I = monomialIdeal( x1^7, x2^10, x3^5, x6^8, x7^10 ); I = monomialIdeal( x1^7, x2^10, x3^5, x6^6 ); I = monomialIdeal( x1^7, x2^10, x4^7, x6^7, x7^10 ); I = monomialIdeal( x1^7, x2^10, x4^7, x6^6 ); I = monomialIdeal( x1^7, x2^9, x3^6, x3^5*x5^5, x5^6, x7^10 ); I = monomialIdeal( x1^7, x2^9, x3^6, x4^8, x5^6, x7^10 ); I = monomialIdeal( x1^7, x2^7, x4^7, x5^6, x7^7 ); I = monomialIdeal( x1^7, x2^7, x4^7, x7 ); I = monomialIdeal( x1^7, x2^5, x2^3*x3^5*x5^5, x3^6, x5^6 ); I = monomialIdeal( x1^7, x2^5, x3^6, x4^8, x5^6 ); I = monomialIdeal( x1^7, x2^2, x5^6, x6^10, x7^8 ); I = monomialIdeal( x1^7, x2^2, x5^6, x7^7 ); I = monomialIdeal( x1^7, x2^2, x7 ); I = monomialIdeal( x1^7, x3^9, x4^7, x5^6, x7^7 ); I = monomialIdeal( x1^7, x3^9, x4^7, x7 ); I = monomialIdeal( x1^7, x3^7, x4^8, x5^7, x6^7, x7^10 ); I = monomialIdeal( x1^7, x3^7, x4^8, x5^7, x6^6 ); I = monomialIdeal( x1^7, x3^7, x5^6, x6^10, x7^8 ); I = monomialIdeal( x1^7, x3^7, x5^6, x7^7 ); I = monomialIdeal( x1^7, x3^7, x7 ); I = monomialIdeal( x1^7, x3^6, x4^8, x5^7, x6^8, x7^10 ); I = monomialIdeal( x1^7, x3^6, x4^6, x5^6, x7^10 ); I = monomialIdeal( x1^7, x3^6, x4^6, x6^8, x7^10 ); I = monomialIdeal( x1^7, x3^6, x4^3, x5^6 ); I = monomialIdeal( x1^7, x3^6, x4^3, x6^8 ); I = monomialIdeal( x1^7, x3^6, x4^2 ); I = monomialIdeal( x1^7, x3^6, x5^6, x5^4*x7^8, x7^10 ); I = monomialIdeal( x1^7, x3^5, x5^7, x6^8, x7^10 ); I = monomialIdeal( x1^7, x3^5, x5^7, x6^6 ); I = monomialIdeal( x1^7, x4^7, x5^7, x6^7, x7^10 ); I = monomialIdeal( x1^7, x4^7, x5^7, x6^6 ); I = monomialIdeal( x1^7, x4^7, x5^6, x6^10, x7^8 ); I = monomialIdeal( x1^7, x4^7, x6^10, x7 ); I = monomialIdeal( x1^7, x4^6, x5^6, x7^7 ); I = monomialIdeal( x1^7, x4^6, x6^7, x7^10 ); I = monomialIdeal( x1^7, x4^6, x6^6 ); I = monomialIdeal( x1^7, x4^6, x7 ); I = monomialIdeal( x1^7, x4^3, x5^6, x7^8 ); I = monomialIdeal( x1^7, x4^3, x6^7 ); I = monomialIdeal( x1^7, x4^2, x7^8 ); I = monomialIdeal( x1^7, x4 ); I = monomialIdeal( x1^6, x2^9, x3^6, x3^5*x5^5, x5^6 ); I = monomialIdeal( x1^6, x2^9, x3^6, x4^8, x5^6 ); I = monomialIdeal( x1^6, x2^7, x2^2*x5^3, x5^6, x7^8 ); I = monomialIdeal( x1^6, x2^7, x4^7, x5^6, x7^8 ); I = monomialIdeal( x1^6, x2^7, x5^3, x6^7 ); I = monomialIdeal( x1^6, x2, x4^8, x7^8 ); I = monomialIdeal( x1^6, x2, x5^8, x7^8 ); I = monomialIdeal( x1^6, x2, x7^8, x8^9 ); I = monomialIdeal( x1^6, x3^9, x4^7, x5^6, x7^8 ); I = monomialIdeal( x1^6, x3^9, x5^3, x6^7 ); I = monomialIdeal( x1^6, x3^9, x5^3, x7^8 ); I = monomialIdeal( x1^6, x3^7, x4^8, x5^6, x8^5 ); I = monomialIdeal( x1^6, x3^7, x4^8, x6^8, x8^5 ); I = monomialIdeal( x1^6, x3^7, x4^8, x6^7 ); I = monomialIdeal( x1^6, x3^7, x5^6, x7^8 ); I = monomialIdeal( x1^6, x3^7, x5^5, x6^7 ); I = monomialIdeal( x1^6, x3^7, x5^5, x8^5 ); I = monomialIdeal( x1^6, x3^7, x6^8, x7^8 ); I = monomialIdeal( x1^6, x3^6, x4^8, x5^6, x8^6 ); I = monomialIdeal( x1^6, x3^6, x4^8, x6^8 ); I = monomialIdeal( x1^6, x3^6, x4^6, x5^6 ); I = monomialIdeal( x1^6, x3^6, x5^5, x6^8 ); I = monomialIdeal( x1^6, x3^6, x5^5, x8^6 ); I = monomialIdeal( x1^6, x3^6, x5^4 ); I = monomialIdeal( x1^6, x3^5, x5^6, x8^6 ); I = monomialIdeal( x1^6, x3^5, x6^8 ); I = monomialIdeal( x1^6, x3^5, x8 ); I = monomialIdeal( x1^6, x3^4, x5^6 ); I = monomialIdeal( x1^6, x4^10, x5^3, x6^7 ); I = monomialIdeal( x1^6, x4^10, x5^3, x7^8 ); I = monomialIdeal( x1^6, x4^8, x5^6, x8^4 ); I = monomialIdeal( x1^6, x4^8, x6^8, x8^4 ); I = monomialIdeal( x1^6, x4^8, x8 ); I = monomialIdeal( x1^6, x4^7, x5^6, x7^8, x8^7 ); I = monomialIdeal( x1^6, x4^7, x5^6, x8^5 ); I = monomialIdeal( x1^6, x4^7, x6^8, x7^8 ); I = monomialIdeal( x1^6, x4^7, x6^8, x8^5 ); I = monomialIdeal( x1^6, x4^7, x6^7 ); I = monomialIdeal( x1^6, x4^6, x5^6, x7^8 ); I = monomialIdeal( x1^6, x5^5, x5^3*x8^4, x8^5 ); I = monomialIdeal( x1^6, x6^8, x7^8, x8^4 ); I = monomialIdeal( x1^5, x2^7, x5^6, x7^8 ); I = monomialIdeal( x1^5, x2^7, x7 ); I = monomialIdeal( x1^5, x2^3, x5^6, x8^5 ); I = monomialIdeal( x1^5, x2^3, x6^8, x8^5 ); I = monomialIdeal( x1^5, x2^3, x6^7 ); I = monomialIdeal( x1^5, x3^9, x5^6, x7^8 ); I = monomialIdeal( x1^5, x3^9, x7 ); I = monomialIdeal( x1^5, x4^8, x5^6, x8^5 ); I = monomialIdeal( x1^5, x4^8, x6^8, x8^5 ); I = monomialIdeal( x1^5, x4^8, x6^7 ); I = monomialIdeal( x1^5, x5^6, x6^10, x7^8 ); I = monomialIdeal( x1^5, x5^6, x7^8, x8^7 ); I = monomialIdeal( x1^5, x5^5, x6^7 ); I = monomialIdeal( x1^5, x5^5, x8^5 ); I = monomialIdeal( x1^5, x5^3, x7^8 ); I = monomialIdeal( x1^5, x6^10, x6^8*x7, x7^8 ); I = monomialIdeal( x1^5, x6^5 ); I = monomialIdeal( x1^5, x7, x8^7 ); I = monomialIdeal( x1^4, x2^9, x3^6, x5^6 ); I = monomialIdeal( x1^4, x3^6, x5^6, x8^6 ); I = monomialIdeal( x1^4, x3^6, x6^8 ); I = monomialIdeal( x1^4, x5^7, x6^7 ); I = monomialIdeal( x1^4, x5^6, x8^5 ); I = monomialIdeal( x1^4, x6^8, x6^7*x8^5, x8^10 ); I = monomialIdeal( x1^4, x6^6 ); I = monomialIdeal( x1^4, x8 ); I = monomialIdeal( x1^3, x2^7, x4^8 ); I = monomialIdeal( x1^3, x2^7, x5^8, x7^8 ); I = monomialIdeal( x1^3, x2^7, x5^8, x8^10 ); I = monomialIdeal( x1^3, x2^7, x5^7 ); I = monomialIdeal( x1^3, x2^7, x7^6 ); I = monomialIdeal( x1^3, x2^7, x8^9 ); I = monomialIdeal( x1^3, x2^3, x5^8 ); I = monomialIdeal( x1^3, x2^3, x6^10 ); I = monomialIdeal( x1^3, x3^9, x4^8 ); I = monomialIdeal( x1^3, x3^9, x5^8, x7^8 ); I = monomialIdeal( x1^3, x3^9, x5^8, x8^10 ); I = monomialIdeal( x1^3, x3^9, x5^7 ); I = monomialIdeal( x1^3, x3^9, x7^6 ); I = monomialIdeal( x1^3, x3^9, x8^9 ); I = monomialIdeal( x1^3, x3^6, x5^8 ); I = monomialIdeal( x1^3, x3^6, x6^10 ); I = monomialIdeal( x1^3, x3^3 ); I = monomialIdeal( x1^3, x4^8, x6^10 ); I = monomialIdeal( x1^3, x4^6 ); I = monomialIdeal( x1^3, x5^7, x6^10 ); I = monomialIdeal( x1^3, x5^3 ); I = monomialIdeal( x1^3, x6^10, x7^8 ); I = monomialIdeal( x1^3, x6^10, x8^10 ); I = monomialIdeal( x1^3, x8^7 ); I = monomialIdeal( x1^2, x2^7, x7^8 ); I = monomialIdeal( x1^2, x2^7, x8^10 ); I = monomialIdeal( x1^2, x2^3 ); I = monomialIdeal( x1^2, x3^9, x7^8 ); I = monomialIdeal( x1^2, x3^9, x8^10 ); I = monomialIdeal( x1^2, x3^6 ); I = monomialIdeal( x1 ); I = monomialIdeal( x2^10, x3^7, x4^10, x6^8, x6^7*x7^7, x7^8 ); I = monomialIdeal( x2^10, x3^7, x4^8, x6^7, x7^10, x8^9 ); I = monomialIdeal( x2^10, x3^7, x4^8, x6^7, x7^9 ); I = monomialIdeal( x2^10, x3^7, x4^8, x6^6, x8^9 ); I = monomialIdeal( x2^10, x3^7, x6^8, x7^7, x8^5 ); I = monomialIdeal( x2^10, x3^7, x6^8, x7^4 ); I = monomialIdeal( x2^10, x3^7, x6^7, x7^8, x8^5 ); I = monomialIdeal( x2^10, x3^5, x4^10, x6^7, x7^10, x8^9 ); I = monomialIdeal( x2^10, x3^5, x4^10, x6^7, x7^9 ); I = monomialIdeal( x2^10, x3^5, x4^10, x6^6, x8^9 ); I = monomialIdeal( x2^10, x3^5, x6^8, x6^7*x8^4, x7^10, x8^5 ); I = monomialIdeal( x2^10, x3^5, x6^6, x8^5 ); I = monomialIdeal( x2^10, x3^4, x4^10, x6^7, x7^10 ); I = monomialIdeal( x2^10, x3^4, x4^10, x6^6 ); I = monomialIdeal( x2^10, x3^3, x6^8 ); I = monomialIdeal( x2^10, x4^8, x6^8, x7^10, x8^4 ); I = monomialIdeal( x2^10, x4^8, x6^6, x8^4 ); I = monomialIdeal( x2^10, x4^7, x6^8, x7^7 ); I = monomialIdeal( x2^10, x4^7, x6^7, x7^10, x8^9 ); I = monomialIdeal( x2^10, x4^7, x6^7, x7^9 ); I = monomialIdeal( x2^10, x4^7, x6^6, x8^9 ); I = monomialIdeal( x2^10, x6^8, x7^8, x8^4 ); I = monomialIdeal( x2^7, x4^7, x5^6, x7^3, x8^9 ); I = monomialIdeal( x2^7, x4^7, x7, x8^9 ); I = monomialIdeal( x2^7, x5^3, x6^10, x7^4, x8^8 ); I = monomialIdeal( x2^7, x5^3, x7^3, x8^8 ); I = monomialIdeal( x2^7, x5^3, x7^2 ); I = monomialIdeal( x2^7, x5^2, x6^7, x8^8 ); I = monomialIdeal( x2^7, x5^2, x7^7, x8^8 ); I = monomialIdeal( x2^7, x5, x6^7 ); I = monomialIdeal( x2^7, x5, x7^8 ); I = monomialIdeal( x2^6, x3^8, x4^10, x5^3, x6^10, x7^8 ); I = monomialIdeal( x2^6, x3^8, x5^2, x6^10, x7^8 ); I = monomialIdeal( x2^6, x3^7, x4^10, x5^6, x5^5*x6^9, x6^10, x7^8, x8^9 ); I = monomialIdeal( x2^6, x3^7, x4^10, x6^8, x7^8 ); I = monomialIdeal( x2^6, x3^7, x4^8, x5^6, x6^10, x7^8, x8^9 ); I = monomialIdeal( x2^6, x3^7, x4^8, x5^6, x7^10, x8^5 ); I = monomialIdeal( x2^6, x3^7, x4^8, x6^8, x7^10, x8^5 ); I = monomialIdeal( x2^6, x3^7, x4^8, x6^7, x7^10 ); I = monomialIdeal( x2^6, x3^7, x4^8, x6^6 ); I = monomialIdeal( x2^6, x3^7, x5^6, x6^9, x7^8, x8^5 ); I = monomialIdeal( x2^6, x3^7, x5^5, x7^10, x8^5 ); I = monomialIdeal( x2^6, x3^7, x6^8, x7^8, x8^5 ); I = monomialIdeal( x2^6, x3^6, x4^10, x5^5, x5^3*x6^8, x6^10, x7^10 ); I = monomialIdeal( x2^6, x3^6, x4^10, x5^5, x6^10, x7^10, x8^9 ); I = monomialIdeal( x2^6, x3^6, x4^8, x5^6, x6^10, x7^10, x8^9 ); I = monomialIdeal( x2^6, x3^6, x4^8, x6^8, x7^10 ); I = monomialIdeal( x2^6, x3^6, x4^3, x6^8 ); I = monomialIdeal( x2^6, x3^6, x5^2 ); I = monomialIdeal( x2^6, x3^5, x4^10, x5^6, x6^9, x7^10, x8^9 ); I = monomialIdeal( x2^6, x3^5, x4^10, x6^8, x7^10 ); I = monomialIdeal( x2^6, x3^5, x4^10, x6^6 ); I = monomialIdeal( x2^6, x3^5, x5^6, x6^9, x7^10, x8^5 ); I = monomialIdeal( x2^6, x3^5, x6^8, x7^10, x8^5 ); I = monomialIdeal( x2^6, x3^4, x4^10, x4^8*x5^5*x6^9, x5^6, x6^10, x7^10 ); I = monomialIdeal( x2^6, x4^10, x5^3, x6^10, x7^8, x8^8 ); I = monomialIdeal( x2^6, x4^9, x5^3, x6^10, x7^8 ); I = monomialIdeal( x2^6, x4^7, x4^3*x6^6, x4*x6^7, x6^10 ); I = monomialIdeal( x2^6, x4^7, x5^6, x6^10, x7^8, x8^9 ); I = monomialIdeal( x2^6, x4^7, x5^6, x7^10, x8^5 ); I = monomialIdeal( x2^6, x4^7, x6^8, x6^7*x7^8, x7^10 ); I = monomialIdeal( x2^6, x4^7, x6^8, x7^10, x8^5 ); I = monomialIdeal( x2^6, x5^3, x7^10, x8^5 ); I = monomialIdeal( x2^6, x5^2, x6^10, x7^8, x8^8 ); I = monomialIdeal( x2^6, x5^2, x8^5 ); I = monomialIdeal( x2^5, x3^8, x5^3, x6^10, x7^8 ); I = monomialIdeal( x2^5, x3^8, x5^3, x6^7 ); I = monomialIdeal( x2^5, x3^7, x4^8, x5^6, x8^5 ); I = monomialIdeal( x2^5, x3^7, x4^8, x6^8, x8^5 ); I = monomialIdeal( x2^5, x3^7, x4^8, x6^7 ); I = monomialIdeal( x2^5, x3^7, x5^6, x5^5*x6^9*x7^5, x6^10, x7^8, x8^9 ); I = monomialIdeal( x2^5, x3^7, x5^5, x6^7 ); I = monomialIdeal( x2^5, x3^7, x5^5, x8^5 ); I = monomialIdeal( x2^5, x3^7, x6^8, x7^8 ); I = monomialIdeal( x2^5, x3^6, x4^8, x5^6, x6^10, x8^9 ); I = monomialIdeal( x2^5, x3^6, x4^8, x6^8 ); I = monomialIdeal( x2^5, x3^6, x5^5, x5^3*x6^8, x6^10 ); I = monomialIdeal( x2^5, x3^6, x5^5, x6^10, x8^9 ); I = monomialIdeal( x2^5, x3^5, x5^6, x6^9, x8^9 ); I = monomialIdeal( x2^5, x3^5, x5^6, x8^4 ); I = monomialIdeal( x2^5, x3^5, x6^8 ); I = monomialIdeal( x2^5, x3^5, x8 ); I = monomialIdeal( x2^5, x3^4, x4^8, x5^6, x6^10 ); I = monomialIdeal( x2^5, x3^4, x5^6, x5^5*x6^9, x6^10 ); I = monomialIdeal( x2^5, x3^4, x5^6, x6^10, x7^5 ); I = monomialIdeal( x2^5, x4^9, x5^3, x6^7 ); I = monomialIdeal( x2^5, x4^8, x5^6, x8^4 ); I = monomialIdeal( x2^5, x4^8, x6^8, x8^4 ); I = monomialIdeal( x2^5, x4^8, x8 ); I = monomialIdeal( x2^5, x4^7, x5^6, x8^5 ); I = monomialIdeal( x2^5, x4^7, x6^8, x8^5 ); I = monomialIdeal( x2^5, x4^7, x6^7 ); I = monomialIdeal( x2^5, x5^5, x8^4 ); I = monomialIdeal( x2^5, x5^3, x6^10, x7^8, x8^8 ); I = monomialIdeal( x2^5, x5^3, x6^7, x8^8 ); I = monomialIdeal( x2^5, x5^3, x8^5 ); I = monomialIdeal( x2^3, x3^7, x5^6, x6^9, x8^5 ); I = monomialIdeal( x2^3, x3^7, x6^8, x8^5 ); I = monomialIdeal( x2^3, x3^7, x6^7 ); I = monomialIdeal( x2^3, x3^6, x5^6, x6^9, x8^9 ); I = monomialIdeal( x2^3, x3^6, x6^8 ); I = monomialIdeal( x2^3, x5^6, x8^4 ); I = monomialIdeal( x2^3, x5^3, x5^2*x7^3, x7^7 ); I = monomialIdeal( x2^3, x5^3, x6^10, x7^8 ); I = monomialIdeal( x2^3, x5^3, x6^7 ); I = monomialIdeal( x2^3, x6^8, x8^4 ); I = monomialIdeal( x2^3, x8 ); I = monomialIdeal( x2^2, x3 ); I = monomialIdeal( x2^2, x4^8, x5^6, x6^10, x7^8, x8^9 ); I = monomialIdeal( x2^2, x4^8, x5^6, x8^5 ); I = monomialIdeal( x2^2, x5^6, x6^10, x6^9*x7^5, x7^8, x8^9 ); I = monomialIdeal( x2^2, x5^6, x6^9, x8^5 ); I = monomialIdeal( x2^2, x5^6, x7^5, x7^3*x8^5, x8^9 ); I = monomialIdeal( x2^2, x5^5, x6^10, x7^8, x8^9 ); I = monomialIdeal( x2^2, x5^5, x8^5 ); I = monomialIdeal( x2^2, x6^8, x7^8 ); I = monomialIdeal( x2^2, x6^8, x8^5 ); I = monomialIdeal( x2^2, x6^7 ); I = monomialIdeal( x2^2, x7, x8^9 ); I = monomialIdeal( x2, x3^6, x4^8 ); I = monomialIdeal( x2, x3^6, x5^8 ); I = monomialIdeal( x2, x3^6, x6^10 ); I = monomialIdeal( x2, x3^6, x8^9 ); I = monomialIdeal( x2, x3^3 ); I = monomialIdeal( x2, x4^8, x4^3*x7^7, x7^8 ); I = monomialIdeal( x2, x4 ); I = monomialIdeal( x2, x5^8, x7^7 ); I = monomialIdeal( x2, x6^10, x7^8 ); I = monomialIdeal( x2, x7^7, x8^9 ); I = monomialIdeal( x2, x7^6 ); I = monomialIdeal( x2, x8^5 ); I = monomialIdeal( x3^9, x4^7, x5^6, x7^3, x8^9 ); I = monomialIdeal( x3^9, x4^7, x7, x8^9 ); I = monomialIdeal( x3^9, x5^3, x6^10, x7^4, x8^8 ); I = monomialIdeal( x3^9, x5^3, x7^3, x8^8 ); I = monomialIdeal( x3^9, x5^3, x7^2 ); I = monomialIdeal( x3^9, x5^2, x6^7, x8^8 ); I = monomialIdeal( x3^9, x5^2, x7^7, x8^8 ); I = monomialIdeal( x3^9, x5, x6^7 ); I = monomialIdeal( x3^9, x5, x7^8 ); I = monomialIdeal( x3^8, x4^10, x5^3, x6^10, x6^7*x7^7, x7^10 ); I = monomialIdeal( x3^8, x4^10, x5^3, x6^6 ); I = monomialIdeal( x3^8, x5^3, x6^10, x7^4 ); I = monomialIdeal( x3^8, x5^3, x6^5 ); I = monomialIdeal( x3^8, x5^3, x7^3 ); I = monomialIdeal( x3^8, x5^2, x6^7 ); I = monomialIdeal( x3^8, x5^2, x7^7 ); I = monomialIdeal( x3^7, x4^10, x5^7, x6^8, x6^7*x7^7, x7^8 ); I = monomialIdeal( x3^7, x4^10, x5^6, x5^5*x6^9*x7^5, x6^10, x7^7, x8^9 ); I = monomialIdeal( x3^7, x4^10, x5^5, x6^7, x7^10 ); I = monomialIdeal( x3^7, x4^10, x5^5, x6^6 ); I = monomialIdeal( x3^7, x4^8, x5^7, x6^7, x7^10, x8^9 ); I = monomialIdeal( x3^7, x4^8, x5^7, x6^7, x7^9 ); I = monomialIdeal( x3^7, x4^8, x5^7, x6^6, x8^9 ); I = monomialIdeal( x3^7, x4^8, x5^6, x6^10, x7^7, x8^9 ); I = monomialIdeal( x3^7, x4^8, x5^6, x7^7, x8^5 ); I = monomialIdeal( x3^7, x5^7, x5^6*x6^7, x5^6*x8^5, x6^10, x6^9*x7^4, x6^7*x7^7, x7^8, x7^4*x8^5, x8^9 ); I = monomialIdeal( x3^7, x5^7, x6^8, x7^7, x8^5 ); I = monomialIdeal( x3^7, x5^7, x6^8, x7^4 ); I = monomialIdeal( x3^7, x5^6, x7^5, x7^3*x8^5, x8^9 ); I = monomialIdeal( x3^7, x5^5, x6^7, x7^10, x8^5 ); I = monomialIdeal( x3^7, x5^5, x6^6, x8^5 ); I = monomialIdeal( x3^7, x5^5, x7^7, x8^5 ); I = monomialIdeal( x3^7, x6^8, x7^2 ); I = monomialIdeal( x3^7, x6^5 ); I = monomialIdeal( x3^7, x7, x8^9 ); I = monomialIdeal( x3^6, x4^5, x5^6, x6^10, x7^10, x8^9 ); I = monomialIdeal( x3^6, x4^5, x5^5, x5^3*x6^8, x6^10, x7^10 ); I = monomialIdeal( x3^6, x4^5, x5^2 ); I = monomialIdeal( x3^6, x4^5, x6^8, x7^10, x8^9 ); I = monomialIdeal( x3^6, x4^5, x6^8, x7^9 ); I = monomialIdeal( x3^6, x4^3, x4^2*x6^8, x6^10, x8^9 ); I = monomialIdeal( x3^6, x4^3, x5^6, x6^10, x8^9 ); I = monomialIdeal( x3^6, x4^3, x5^5, x5^3*x6^8, x6^10 ); I = monomialIdeal( x3^6, x5 ); I = monomialIdeal( x3^5, x4^10, x5^7, x6^7, x7^10, x8^9 ); I = monomialIdeal( x3^5, x4^10, x5^7, x6^7, x7^9 ); I = monomialIdeal( x3^5, x4^10, x5^7, x6^6, x8^9 ); I = monomialIdeal( x3^5, x5^7, x6^8, x6^7*x8^4, x7^10, x8^5 ); I = monomialIdeal( x3^5, x5^7, x6^6, x8^5 ); I = monomialIdeal( x3^5, x5^6, x7^10, x8^4 ); I = monomialIdeal( x3^5, x6^6, x8 ); I = monomialIdeal( x3^5, x7^10, x8 ); I = monomialIdeal( x3^4, x4^10, x4^8*x5^5*x6^9*x7^5, x5^6, x6^10, x7^7 ); I = monomialIdeal( x3^4, x4^10, x5^7, x6^7, x7^10 ); I = monomialIdeal( x3^4, x4^10, x5^7, x6^6 ); I = monomialIdeal( x3^4, x4^6, x6^7, x7^10 ); I = monomialIdeal( x3^4, x4^6, x6^6 ); I = monomialIdeal( x3^4, x4^5, x5^6, x6^10, x7^10 ); I = monomialIdeal( x3^4, x4^5, x6^8, x7^10 ); I = monomialIdeal( x3^4, x4^3, x4^2*x6^8, x6^10 ); I = monomialIdeal( x3^4, x4^3, x5^6, x6^10 ); I = monomialIdeal( x3^4, x4^2, x7^3 ); I = monomialIdeal( x3^4, x5^6, x6^10, x7^4 ); I = monomialIdeal( x3^4, x5^6, x7^3 ); I = monomialIdeal( x3^4, x7 ); I = monomialIdeal( x3^3, x4^6, x6^8 ); I = monomialIdeal( x3^3, x4^2 ); I = monomialIdeal( x3^3, x5^7, x6^8 ); I = monomialIdeal( x3^3, x5^6 ); I = monomialIdeal( x3^3, x8 ); I = monomialIdeal( x3^2, x6^8 ); I = monomialIdeal( x3, x4^7 ); I = monomialIdeal( x3, x5^7 ); I = monomialIdeal( x3, x6^9 ); I = monomialIdeal( x3, x7^10 ); I = monomialIdeal( x3, x8^9 ); I = monomialIdeal( x4^10, x5^3, x6^10, x6^7*x7^7, x7^10, x8^8 ); I = monomialIdeal( x4^10, x5^3, x6^6, x8^8 ); I = monomialIdeal( x4^10, x5^3, x7^3, x8^8 ); I = monomialIdeal( x4^10, x5^3, x7^2 ); I = monomialIdeal( x4^10, x5^2, x6^7, x8^8 ); I = monomialIdeal( x4^10, x5^2, x7^7, x8^8 ); I = monomialIdeal( x4^10, x5, x6^7 ); I = monomialIdeal( x4^10, x5, x7^8 ); I = monomialIdeal( x4^9, x5^3, x6^10, x6^7*x7^7, x7^10 ); I = monomialIdeal( x4^9, x5^3, x6^6 ); I = monomialIdeal( x4^9, x5^3, x7^3 ); I = monomialIdeal( x4^9, x5^2, x6^7 ); I = monomialIdeal( x4^9, x5^2, x7^7 ); I = monomialIdeal( x4^8, x5^7, x6^8, x7^10, x8^4 ); I = monomialIdeal( x4^8, x5^7, x6^6, x8^4 ); I = monomialIdeal( x4^8, x5^6, x7^10, x8^4 ); I = monomialIdeal( x4^8, x6^6, x8 ); I = monomialIdeal( x4^8, x7^10, x8 ); I = monomialIdeal( x4^7, x5^7, x6^8, x7^7 ); I = monomialIdeal( x4^7, x5^7, x6^7, x7^10, x8^9 ); I = monomialIdeal( x4^7, x5^7, x6^7, x7^9 ); I = monomialIdeal( x4^7, x5^7, x6^6, x8^9 ); I = monomialIdeal( x4^7, x5^6, x6^10, x7^7, x8^9 ); I = monomialIdeal( x4^7, x5^6, x7^7, x7^3*x8^5, x8^7 ); I = monomialIdeal( x4^7, x5^5, x6^7, x7^10 ); I = monomialIdeal( x4^7, x5^5, x6^6 ); I = monomialIdeal( x4^7, x6^10, x7, x8^9 ); I = monomialIdeal( x4^7, x6^8, x7^2 ); I = monomialIdeal( x4^7, x6^5 ); I = monomialIdeal( x4^7, x7, x8^7 ); I = monomialIdeal( x4^6, x5^6, x7^3, x8^9 ); I = monomialIdeal( x4^6, x6^8, x7^10, x8^4 ); I = monomialIdeal( x4^6, x6^8, x7^7 ); I = monomialIdeal( x4^6, x6^7, x7^10, x8^9 ); I = monomialIdeal( x4^6, x6^7, x7^9 ); I = monomialIdeal( x4^6, x6^6, x8^9 ); I = monomialIdeal( x4^6, x7, x8^9 ); I = monomialIdeal( x4^5, x5^6, x6^10, x7^8, x8^9 ); I = monomialIdeal( x4^5, x5^6, x7^10, x8^5 ); I = monomialIdeal( x4^5, x5^3, x6^10, x7^8 ); I = monomialIdeal( x4^5, x5^2, x8^5 ); I = monomialIdeal( x4^5, x6^8, x7^10, x8^5 ); I = monomialIdeal( x4^5, x6^8, x7^8 ); I = monomialIdeal( x4^3, x5^6, x8^5 ); I = monomialIdeal( x4^3, x5^5, x6^7 ); I = monomialIdeal( x4^3, x5^2, x7^8 ); I = monomialIdeal( x4^3, x6^8, x6^7*x8^5, x8^9 ); I = monomialIdeal( x4^3, x8 ); I = monomialIdeal( x4^2, x6^10, x7^8, x8^9 ); I = monomialIdeal( x4^2, x7^3, x8^9 ); I = monomialIdeal( x4^2, x8^5 ); I = monomialIdeal( x4, x5^5, x6^10 ); I = monomialIdeal( x4, x5^2 ); I = monomialIdeal( x4, x6^10, x7^9 ); I = monomialIdeal( x4, x6^10, x8^9 ); I = monomialIdeal( x4, x7^3 ); I = monomialIdeal( x5^7, x6^8, x7^8, x8^4 ); I = monomialIdeal( x5^6, x7^8, x8^4 ); I = monomialIdeal( x5^5, x6^6, x8^4 ); I = monomialIdeal( x5^5, x7^10, x8^4 ); I = monomialIdeal( x5^3, x6^7, x7^10, x8^5 ); I = monomialIdeal( x5^3, x6^6, x8^5 ); I = monomialIdeal( x5^3, x6^5, x7^2 ); I = monomialIdeal( x5^3, x6^5, x8^8 ); I = monomialIdeal( x5^3, x7^7, x8^5 ); I = monomialIdeal( x5^3, x7 ); I = monomialIdeal( x5^2, x6^7, x8^5 ); I = monomialIdeal( x5^2, x8^4 ); I = monomialIdeal( x5, x6^5 ); I = monomialIdeal( x5, x8^5 ); I = monomialIdeal( x6^8, x7^2, x8^4 ); I = monomialIdeal( x6^5, x8^4 ); I = monomialIdeal( x6^2 ); I = monomialIdeal( x7^8, x7*x8, x8^4 ); frobby-0.9.5/test/commonIdeals/t14.radical000066400000000000000000000002551401527164200203360ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1*x2*x3*x4*x5*x6*x7, x1*x2*x3*x4*x5*x6*x8, x1*x2*x3*x5*x6*x7*x8, x1*x2*x4*x5*x6*x7*x8, x1*x3*x4*x6*x7*x8 ); frobby-0.9.5/test/commonIdeals/t14.test000066400000000000000000000014601401527164200177150ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^6*x3^6*x4^3*x5*x6^10*x7^7*x8^5, x1^4*x2^3*x3^5*x4^8*x5^5*x6^5*x7^8, x1^8*x2^3*x3^8*x4^9*x5*x6^2*x7^2*x8^8, x1^2*x3^3*x4^8*x5^8*x6^10*x7^6*x8^9, x1^3*x3^6*x4*x6^7*x7^8*x8^5, x1^8*x2^6*x3^3*x4^5*x5*x6^7*x7^7*x8^4, x1^7*x2*x3^4*x4*x5^3*x6^8*x8^9, x1^8*x2*x3^3*x4^8*x5^5*x6^9*x7^5*x8^4, x1^6*x2^5*x3^3*x4^3*x5^2*x6^6*x7^10, x1^3*x2*x3*x4^2*x5^6*x6^8*x7*x8, x1*x2^3*x3^6*x4^8*x5^7*x6^6*x7^8*x8^10, x1^3*x2^9*x3^4*x4^6*x5^4*x6^8*x7^8*x8^6, x1^6*x2^10*x3^2*x4^6*x5^7*x6^5*x7^2*x8, x1^7*x2^6*x3^4*x5^5*x6^5*x7^9*x8^9, x1^5*x2^7*x3^9*x4^10*x6^5*x7*x8^5, x1*x2^7*x3^9*x4^6*x5^3*x6^10*x8^7, x1^10*x2*x3^3*x5^2*x6^10*x7^3*x8^5, x1^10*x2^5*x3^3*x4^10*x5^2*x6^5*x7^4*x8^5, x1^3*x2^2*x4^7*x5^7*x6^9*x7^10*x8^9, x1^5*x2^2*x3^7*x4^7*x5^3*x6^2*x8^4 ); frobby-0.9.5/test/commonIdeals/t14.uni000066400000000000000000000005151401527164200175310ustar00rootroot00000000000000R = QQ[t]; p = t^68 + -3*t^67 + 4*t^65 + 3*t^64 + -7*t^63 + -2*t^62 + 12*t^61 + -30*t^60 + 8*t^59 + 45*t^58 + -26*t^57 + -3*t^56 + 4*t^55 + 2*t^54 + -6*t^53 + -7*t^52 + -11*t^51 + 10*t^50 + 2*t^46 + 4*t^44 + 3*t^43 + t^42 + -t^41 + 2*t^40 + t^39 + -t^38 + -t^35 + -t^34 + -t^33 + -2*t^30 + -t^23 + 1; frobby-0.9.5/test/commonIdeals/t15.alexdual000066400000000000000000000213611401527164200205400ustar00rootroot00000000000000R = QQ[x1, x10, x11, x12, x13, x14, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1*x10*x11*x12*x13*x6*x9, x1*x10*x11*x12*x14*x2, x1*x10*x11*x12*x14*x7, x1*x10*x11*x12*x2*x6, x1*x10*x11*x12*x8, x1*x10*x11*x13*x8*x9, x1*x10*x11*x14*x3*x6, x1*x10*x11*x14*x3*x7, x1*x10*x11*x14*x6*x7, x1*x10*x11*x4*x5*x6, x1*x10*x11*x4*x6*x7, x1*x10*x11*x5*x6*x9, x1*x10*x11*x5*x8, x1*x10*x11*x7*x8, x1*x10*x12*x13*x14*x9, x1*x10*x12*x13*x2*x8, x1*x10*x12*x13*x4*x5*x9, x1*x10*x12*x13*x5*x8, x1*x10*x12*x13*x6*x7, x1*x10*x12*x13*x7*x8, x1*x10*x12*x13*x7*x9, x1*x10*x12*x14*x2*x4*x8, x1*x10*x12*x14*x2*x9, x1*x10*x12*x2*x4*x6, x1*x10*x12*x2*x4*x7*x8, x1*x10*x12*x2*x7*x9, x1*x10*x12*x3*x4*x6, x1*x10*x12*x3*x4*x7, x1*x10*x12*x4*x6*x7, x1*x10*x12*x5*x7*x9, x1*x10*x13*x14*x2*x6, x1*x10*x13*x14*x3, x1*x10*x13*x14*x6*x7, x1*x10*x13*x14*x6*x9, x1*x10*x13*x14*x8, x1*x10*x13*x3*x5*x9, x1*x10*x14*x2*x3*x4, x1*x10*x14*x2*x3*x5, x1*x10*x14*x3*x4*x6, x1*x10*x14*x3*x4*x7, x1*x10*x14*x4*x6*x7, x1*x10*x14*x4*x7*x8, x1*x10*x14*x4*x7*x9, x1*x10*x14*x7*x8*x9, x1*x10*x2*x3*x5*x9, x1*x10*x3*x5*x6, x1*x10*x5*x6*x7, x1*x10*x5*x7*x8, x1*x11*x12*x13*x14*x4, x1*x11*x12*x13*x3*x7, x1*x11*x12*x13*x4*x6, x1*x11*x12*x13*x4*x8, x1*x11*x12*x13*x5*x8, x1*x11*x12*x13*x6*x7, x1*x11*x12*x14*x2*x3, x1*x11*x12*x14*x2*x6, x1*x11*x12*x14*x3*x7, x1*x11*x12*x14*x4*x6, x1*x11*x12*x14*x6*x7, x1*x11*x12*x14*x6*x8, x1*x11*x12*x2*x3*x5, x1*x11*x12*x2*x3*x6, x1*x11*x12*x2*x3*x7, x1*x11*x12*x2*x4*x6, x1*x11*x12*x2*x6*x7, x1*x11*x12*x2*x6*x8, x1*x11*x12*x3*x4, x1*x11*x12*x3*x8, x1*x11*x13*x14*x2*x5, x1*x11*x13*x14*x3*x8, x1*x11*x13*x14*x4*x7, x1*x11*x13*x14*x5*x8, x1*x11*x13*x14*x5*x9, x1*x11*x13*x14*x6*x8, x1*x11*x13*x14*x6*x9, x1*x11*x13*x2*x3*x5, x1*x11*x13*x3*x6*x9, x1*x11*x13*x3*x7*x9, x1*x11*x13*x3*x8*x9, x1*x11*x13*x4*x5*x6, x1*x11*x13*x4*x6*x9, x1*x11*x13*x4*x8*x9, x1*x11*x13*x5*x6*x7, x1*x11*x13*x5*x6*x9, x1*x11*x13*x5*x8*x9, x1*x11*x13*x6*x8*x9, x1*x11*x14*x2*x6*x7, x1*x11*x14*x3*x4*x7, x1*x11*x14*x3*x4*x8, x1*x11*x14*x3*x6*x8, x1*x11*x14*x3*x9, x1*x11*x14*x4*x5*x6, x1*x11*x14*x4*x6*x7, x1*x11*x14*x5*x6*x9, x1*x11*x14*x6*x7*x9, x1*x11*x2*x3*x6*x7, x1*x11*x2*x3*x6*x9, x1*x11*x2*x5*x6, x1*x11*x3*x4*x5*x6, x1*x11*x3*x4*x6*x7, x1*x11*x3*x4*x9, x1*x11*x3*x5*x7, x1*x11*x3*x5*x8, x1*x11*x3*x5*x9, x1*x11*x3*x6*x8*x9, x1*x11*x3*x7*x8, x1*x12*x13*x14*x2*x6, x1*x12*x13*x14*x3*x4, x1*x12*x13*x14*x4*x6, x1*x12*x13*x14*x4*x9, x1*x12*x13*x2*x3*x8, x1*x12*x13*x2*x4*x8, x1*x12*x13*x2*x6*x7, x1*x12*x13*x3*x4*x7, x1*x12*x13*x3*x7*x8, x1*x12*x13*x4*x5*x8, x1*x12*x13*x4*x6*x7, x1*x12*x13*x4*x7*x8, x1*x12*x13*x5*x6*x7, x1*x12*x14*x6*x7*x8*x9, x1*x12*x2*x3*x7*x9, x1*x12*x2*x6*x7*x9, x1*x12*x3*x4*x7*x9, x1*x12*x3*x7*x8*x9, x1*x13*x14*x2*x3*x5, x1*x13*x14*x2*x3*x7, x1*x13*x14*x2*x3*x8, x1*x13*x14*x2*x5*x8, x1*x13*x14*x2*x5*x9, x1*x13*x14*x2*x6*x8, x1*x13*x14*x2*x6*x9, x1*x13*x14*x3*x4*x5*x6, x1*x13*x14*x3*x4*x7, x1*x13*x14*x3*x4*x9, x1*x13*x14*x3*x5*x7, x1*x13*x14*x4*x5*x9, x1*x13*x14*x4*x6*x9, x1*x13*x14*x4*x7*x9, x1*x13*x14*x4*x8, x1*x13*x14*x5*x7*x9, x1*x13*x3*x4*x5*x7, x1*x13*x3*x5*x6*x7, x1*x13*x4*x5*x7*x8, x1*x13*x5*x6*x7*x8, x1*x13*x5*x6*x7*x9, x1*x14*x2*x3*x4*x7*x9, x1*x14*x2*x3*x7*x8*x9, x1*x14*x2*x6*x7*x9, x1*x14*x3*x4*x7*x8*x9, x1*x14*x4*x6*x7*x9, x1*x14*x5*x6*x7*x9, x1*x2*x5*x6*x7*x8*x9, x1*x3*x5*x7*x9, x10*x11*x12*x13*x14*x8, x10*x11*x12*x13*x3*x6, x10*x11*x12*x13*x3*x7, x10*x11*x12*x14*x3, x10*x11*x12*x14*x4, x10*x11*x12*x14*x8*x9, x10*x11*x12*x2*x3*x7, x10*x11*x12*x2*x8, x10*x11*x12*x3*x4, x10*x11*x12*x3*x5, x10*x11*x12*x3*x8, x10*x11*x12*x4*x5, x10*x11*x12*x4*x6, x10*x11*x12*x4*x7*x9, x10*x11*x12*x5*x9, x10*x11*x12*x6*x8, x10*x11*x12*x7*x8, x10*x11*x13*x14*x3*x6, x10*x11*x13*x14*x4*x5, x10*x11*x13*x14*x6*x8, x10*x11*x13*x2*x8*x9, x10*x11*x13*x3*x4*x9, x10*x11*x13*x3*x5*x9, x10*x11*x13*x3*x6*x7, x10*x11*x13*x3*x6*x9, x10*x11*x13*x4*x5*x6, x10*x11*x13*x4*x6*x7, x10*x11*x13*x4*x6*x9, x10*x11*x13*x5*x6*x9, x10*x11*x13*x5*x8, x10*x11*x13*x6*x8*x9, x10*x11*x13*x7*x8, x10*x11*x14*x2*x5, x10*x11*x14*x3*x4*x9, x10*x11*x14*x3*x6*x7, x10*x11*x14*x3*x6*x9, x10*x11*x14*x4*x5*x6, x10*x11*x14*x4*x7, x10*x11*x14*x5*x7, x10*x11*x14*x5*x9, x10*x11*x14*x7*x8, x10*x11*x2*x3*x4*x9, x10*x11*x2*x3*x5, x10*x11*x2*x3*x6*x7, x10*x11*x2*x4*x5, x10*x11*x2*x5*x6, x10*x11*x2*x5*x8, x10*x11*x2*x5*x9, x10*x11*x2*x7*x8, x10*x11*x3*x4*x6*x7, x10*x11*x3*x5*x7, x10*x11*x3*x5*x8, x10*x11*x3*x7*x8, x10*x11*x3*x8*x9, x10*x11*x4*x5*x8, x10*x11*x5*x6*x7, x10*x11*x5*x7*x8, x10*x12*x13*x14*x3, x10*x12*x13*x14*x4*x9, x10*x12*x13*x14*x8*x9, x10*x12*x13*x2*x3*x4, x10*x12*x13*x2*x3*x8, x10*x12*x13*x3*x4*x5, x10*x12*x13*x3*x4*x7, x10*x12*x13*x3*x5*x9, x10*x12*x13*x3*x6*x7, x10*x12*x13*x3*x7*x8, x10*x12*x13*x3*x7*x9, x10*x12*x13*x4*x6, x10*x12*x13*x6*x8, x10*x12*x14*x2*x3*x4, x10*x12*x14*x2*x3*x5, x10*x12*x14*x2*x4*x6, x10*x12*x14*x2*x4*x9, x10*x12*x14*x3*x4*x6, x10*x12*x14*x3*x4*x7, x10*x12*x14*x4*x6*x7, x10*x12*x14*x4*x7*x9, x10*x12*x2*x3*x4*x9, x10*x12*x2*x3*x5*x9, x10*x12*x2*x3*x7*x9, x10*x12*x2*x4*x5*x6, x10*x12*x2*x4*x5*x9, x10*x12*x2*x4*x6*x8, x10*x12*x2*x4*x6*x9, x10*x12*x2*x4*x7*x9, x10*x12*x2*x5*x8, x10*x12*x2*x8*x9, x10*x12*x3*x4*x6*x8, x10*x12*x3*x4*x6*x9, x10*x12*x3*x4*x7*x8, x10*x12*x3*x4*x7*x9, x10*x12*x3*x5*x6, x10*x12*x3*x6*x8*x9, x10*x12*x4*x6*x7*x8, x10*x12*x4*x6*x7*x9, x10*x12*x5*x6*x7, x10*x12*x6*x7*x8*x9, x10*x13*x14*x2*x8*x9, x10*x13*x14*x3*x4*x7, x10*x13*x14*x3*x4*x9, x10*x13*x14*x3*x5, x10*x13*x14*x3*x6*x9, x10*x13*x14*x3*x8*x9, x10*x13*x14*x4*x6, x10*x13*x14*x4*x7*x9, x10*x13*x14*x5*x8, x10*x13*x14*x5*x9, x10*x13*x14*x6*x8*x9, x10*x13*x14*x7*x8*x9, x10*x13*x3*x4*x5*x9, x10*x13*x3*x5*x6, x10*x13*x3*x5*x8, x10*x14*x2*x3*x4*x7, x10*x14*x2*x3*x9, x10*x14*x2*x4*x6*x7, x10*x14*x2*x4*x7*x9, x10*x14*x2*x5*x6, x10*x14*x2*x5*x8, x10*x14*x2*x5*x9, x10*x14*x2*x7*x8*x9, x10*x14*x3*x4*x6*x9, x10*x14*x3*x4*x7*x8, x10*x14*x3*x4*x7*x9, x10*x14*x3*x5*x6, x10*x14*x3*x5*x7, x10*x14*x3*x6*x8*x9, x10*x14*x4*x6*x7*x8, x10*x14*x4*x6*x7*x9, x10*x14*x4*x7*x8*x9, x10*x14*x5*x6*x7, x10*x14*x5*x7*x8, x10*x14*x5*x7*x9, x10*x14*x6*x7*x8*x9, x10*x2*x3*x4*x5, x10*x2*x3*x5*x6, x10*x2*x3*x5*x8, x10*x2*x5*x6*x7, x10*x2*x5*x7*x8, x10*x2*x5*x7*x9, x10*x3*x4*x5*x6*x8, x10*x3*x4*x5*x7, x10*x3*x5*x6*x7, x10*x3*x5*x6*x8*x9, x10*x3*x5*x7*x8, x10*x3*x5*x7*x9, x11*x12*x13*x14*x4*x8, x11*x12*x13*x2*x3*x4, x11*x12*x13*x2*x3*x8, x11*x12*x13*x2*x4*x6, x11*x12*x13*x2*x4*x8, x11*x12*x13*x2*x5*x8, x11*x12*x13*x3*x4*x8, x11*x12*x13*x3*x7*x9, x11*x12*x13*x4*x7*x8, x11*x12*x13*x5*x7*x8, x11*x12*x13*x6*x8, x11*x12*x14*x3*x7*x9, x11*x12*x14*x6*x8*x9, x11*x12*x2*x3*x4*x7, x11*x12*x2*x3*x8*x9, x11*x12*x2*x4*x5*x6, x11*x12*x2*x6*x8*x9, x11*x12*x3*x6*x8*x9, x11*x13*x14*x2*x4*x7, x11*x13*x14*x2*x5*x8, x11*x13*x14*x2*x5*x9, x11*x13*x14*x4*x7*x8, x11*x13*x14*x4*x7*x9, x11*x13*x14*x5*x7, x11*x13*x14*x6*x8*x9, x11*x13*x2*x3*x4*x9, x11*x13*x2*x3*x8*x9, x11*x13*x2*x4*x5*x6, x11*x13*x2*x4*x6*x9, x11*x13*x2*x4*x7*x8, x11*x13*x2*x4*x8*x9, x11*x13*x2*x5*x8*x9, x11*x13*x2*x6*x8*x9, x11*x13*x3*x4*x8*x9, x11*x13*x3*x6*x7*x9, x11*x13*x3*x6*x8*x9, x11*x13*x3*x7*x8, x11*x13*x4*x5*x6*x7, x11*x13*x4*x5*x8, x11*x13*x5*x6*x7*x9, x11*x13*x5*x6*x8, x11*x13*x5*x7*x8*x9, x11*x14*x2*x3*x5, x11*x14*x2*x3*x7, x11*x14*x2*x5*x6, x11*x14*x3*x5*x7, x11*x14*x3*x6*x7*x9, x11*x14*x4*x6*x7*x9, x11*x14*x5*x6*x7, x11*x14*x5*x6*x8, x11*x14*x6*x7*x8, x11*x2*x3*x4*x5, x11*x2*x3*x5*x8, x11*x2*x3*x7*x8, x11*x2*x3*x7*x9, x11*x2*x4*x5*x6*x9, x11*x2*x4*x6*x7, x11*x2*x5*x6*x7*x9, x11*x2*x5*x6*x8, x11*x2*x6*x7*x8, x11*x3*x4*x5*x7, x11*x3*x4*x5*x8, x11*x3*x4*x7*x9, x11*x3*x5*x6*x8, x11*x3*x5*x7*x8, x11*x3*x5*x7*x9, x11*x3*x6*x7*x8, x11*x3*x7*x8*x9, x12*x13*x14*x2*x3, x12*x13*x14*x2*x4*x6, x12*x13*x14*x2*x4*x9, x12*x13*x14*x2*x5*x8, x12*x13*x14*x3*x4*x8, x12*x13*x14*x3*x5*x7, x12*x13*x14*x4*x7*x9, x12*x13*x14*x4*x8*x9, x12*x13*x2*x3*x4*x7, x12*x13*x2*x3*x4*x8, x12*x13*x2*x3*x6*x7*x9, x12*x13*x2*x4*x5*x8, x12*x13*x2*x4*x6*x7, x12*x13*x2*x4*x8*x9, x12*x13*x2*x6*x8, x12*x13*x3*x4*x5*x7, x12*x13*x3*x4*x7*x8, x12*x13*x3*x4*x7*x9, x12*x13*x4*x5*x6*x7, x12*x13*x4*x6*x7*x9, x12*x13*x4*x6*x8, x12*x13*x6*x7*x8, x12*x3*x5*x7*x9, x13*x14*x2*x3*x9, x13*x14*x2*x4*x5*x9, x13*x14*x2*x4*x7*x9, x13*x14*x2*x4*x8*x9, x13*x14*x2*x5*x6*x8, x13*x14*x2*x6*x8*x9, x13*x14*x3*x4*x8*x9, x13*x14*x3*x7*x8, x13*x14*x4*x5*x8, x13*x14*x4*x6*x7*x9, x13*x14*x4*x6*x8*x9, x13*x14*x4*x7*x8*x9, x13*x14*x5*x7*x8, x13*x14*x6*x7*x8, x13*x2*x3*x5*x8, x13*x2*x4*x5*x7*x8, x13*x2*x5*x6*x7*x8, x13*x3*x4*x5*x8, x13*x3*x5*x7*x8, x14*x4*x5*x6*x7*x9, x2*x3*x5*x7*x9, x2*x4*x5*x6*x7*x9, x3*x5*x6*x7*x9, x3*x5*x7*x8*x9 ); frobby-0.9.5/test/commonIdeals/t15.assoprimes000066400000000000000000000213611401527164200211260ustar00rootroot00000000000000R = QQ[x1, x10, x11, x12, x13, x14, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1*x10*x11*x12*x13*x6*x9, x1*x10*x11*x12*x14*x2, x1*x10*x11*x12*x14*x7, x1*x10*x11*x12*x2*x6, x1*x10*x11*x12*x8, x1*x10*x11*x13*x8*x9, x1*x10*x11*x14*x3*x6, x1*x10*x11*x14*x3*x7, x1*x10*x11*x14*x6*x7, x1*x10*x11*x4*x5*x6, x1*x10*x11*x4*x6*x7, x1*x10*x11*x5*x6*x9, x1*x10*x11*x5*x8, x1*x10*x11*x7*x8, x1*x10*x12*x13*x14*x9, x1*x10*x12*x13*x2*x8, x1*x10*x12*x13*x4*x5*x9, x1*x10*x12*x13*x5*x8, x1*x10*x12*x13*x6*x7, x1*x10*x12*x13*x7*x8, x1*x10*x12*x13*x7*x9, x1*x10*x12*x14*x2*x4*x8, x1*x10*x12*x14*x2*x9, x1*x10*x12*x2*x4*x6, x1*x10*x12*x2*x4*x7*x8, x1*x10*x12*x2*x7*x9, x1*x10*x12*x3*x4*x6, x1*x10*x12*x3*x4*x7, x1*x10*x12*x4*x6*x7, x1*x10*x12*x5*x7*x9, x1*x10*x13*x14*x2*x6, x1*x10*x13*x14*x3, x1*x10*x13*x14*x6*x7, x1*x10*x13*x14*x6*x9, x1*x10*x13*x14*x8, x1*x10*x13*x3*x5*x9, x1*x10*x14*x2*x3*x4, x1*x10*x14*x2*x3*x5, x1*x10*x14*x3*x4*x6, x1*x10*x14*x3*x4*x7, x1*x10*x14*x4*x6*x7, x1*x10*x14*x4*x7*x8, x1*x10*x14*x4*x7*x9, x1*x10*x14*x7*x8*x9, x1*x10*x2*x3*x5*x9, x1*x10*x3*x5*x6, x1*x10*x5*x6*x7, x1*x10*x5*x7*x8, x1*x11*x12*x13*x14*x4, x1*x11*x12*x13*x3*x7, x1*x11*x12*x13*x4*x6, x1*x11*x12*x13*x4*x8, x1*x11*x12*x13*x5*x8, x1*x11*x12*x13*x6*x7, x1*x11*x12*x14*x2*x3, x1*x11*x12*x14*x2*x6, x1*x11*x12*x14*x3*x7, x1*x11*x12*x14*x4*x6, x1*x11*x12*x14*x6*x7, x1*x11*x12*x14*x6*x8, x1*x11*x12*x2*x3*x5, x1*x11*x12*x2*x3*x6, x1*x11*x12*x2*x3*x7, x1*x11*x12*x2*x4*x6, x1*x11*x12*x2*x6*x7, x1*x11*x12*x2*x6*x8, x1*x11*x12*x3*x4, x1*x11*x12*x3*x8, x1*x11*x13*x14*x2*x5, x1*x11*x13*x14*x3*x8, x1*x11*x13*x14*x4*x7, x1*x11*x13*x14*x5*x8, x1*x11*x13*x14*x5*x9, x1*x11*x13*x14*x6*x8, x1*x11*x13*x14*x6*x9, x1*x11*x13*x2*x3*x5, x1*x11*x13*x3*x6*x9, x1*x11*x13*x3*x7*x9, x1*x11*x13*x3*x8*x9, x1*x11*x13*x4*x5*x6, x1*x11*x13*x4*x6*x9, x1*x11*x13*x4*x8*x9, x1*x11*x13*x5*x6*x7, x1*x11*x13*x5*x6*x9, x1*x11*x13*x5*x8*x9, x1*x11*x13*x6*x8*x9, x1*x11*x14*x2*x6*x7, x1*x11*x14*x3*x4*x7, x1*x11*x14*x3*x4*x8, x1*x11*x14*x3*x6*x8, x1*x11*x14*x3*x9, x1*x11*x14*x4*x5*x6, x1*x11*x14*x4*x6*x7, x1*x11*x14*x5*x6*x9, x1*x11*x14*x6*x7*x9, x1*x11*x2*x3*x6*x7, x1*x11*x2*x3*x6*x9, x1*x11*x2*x5*x6, x1*x11*x3*x4*x5*x6, x1*x11*x3*x4*x6*x7, x1*x11*x3*x4*x9, x1*x11*x3*x5*x7, x1*x11*x3*x5*x8, x1*x11*x3*x5*x9, x1*x11*x3*x6*x8*x9, x1*x11*x3*x7*x8, x1*x12*x13*x14*x2*x6, x1*x12*x13*x14*x3*x4, x1*x12*x13*x14*x4*x6, x1*x12*x13*x14*x4*x9, x1*x12*x13*x2*x3*x8, x1*x12*x13*x2*x4*x8, x1*x12*x13*x2*x6*x7, x1*x12*x13*x3*x4*x7, x1*x12*x13*x3*x7*x8, x1*x12*x13*x4*x5*x8, x1*x12*x13*x4*x6*x7, x1*x12*x13*x4*x7*x8, x1*x12*x13*x5*x6*x7, x1*x12*x14*x6*x7*x8*x9, x1*x12*x2*x3*x7*x9, x1*x12*x2*x6*x7*x9, x1*x12*x3*x4*x7*x9, x1*x12*x3*x7*x8*x9, x1*x13*x14*x2*x3*x5, x1*x13*x14*x2*x3*x7, x1*x13*x14*x2*x3*x8, x1*x13*x14*x2*x5*x8, x1*x13*x14*x2*x5*x9, x1*x13*x14*x2*x6*x8, x1*x13*x14*x2*x6*x9, x1*x13*x14*x3*x4*x5*x6, x1*x13*x14*x3*x4*x7, x1*x13*x14*x3*x4*x9, x1*x13*x14*x3*x5*x7, x1*x13*x14*x4*x5*x9, x1*x13*x14*x4*x6*x9, x1*x13*x14*x4*x7*x9, x1*x13*x14*x4*x8, x1*x13*x14*x5*x7*x9, x1*x13*x3*x4*x5*x7, x1*x13*x3*x5*x6*x7, x1*x13*x4*x5*x7*x8, x1*x13*x5*x6*x7*x8, x1*x13*x5*x6*x7*x9, x1*x14*x2*x3*x4*x7*x9, x1*x14*x2*x3*x7*x8*x9, x1*x14*x2*x6*x7*x9, x1*x14*x3*x4*x7*x8*x9, x1*x14*x4*x6*x7*x9, x1*x14*x5*x6*x7*x9, x1*x2*x5*x6*x7*x8*x9, x1*x3*x5*x7*x9, x10*x11*x12*x13*x14*x8, x10*x11*x12*x13*x3*x6, x10*x11*x12*x13*x3*x7, x10*x11*x12*x14*x3, x10*x11*x12*x14*x4, x10*x11*x12*x14*x8*x9, x10*x11*x12*x2*x3*x7, x10*x11*x12*x2*x8, x10*x11*x12*x3*x4, x10*x11*x12*x3*x5, x10*x11*x12*x3*x8, x10*x11*x12*x4*x5, x10*x11*x12*x4*x6, x10*x11*x12*x4*x7*x9, x10*x11*x12*x5*x9, x10*x11*x12*x6*x8, x10*x11*x12*x7*x8, x10*x11*x13*x14*x3*x6, x10*x11*x13*x14*x4*x5, x10*x11*x13*x14*x6*x8, x10*x11*x13*x2*x8*x9, x10*x11*x13*x3*x4*x9, x10*x11*x13*x3*x5*x9, x10*x11*x13*x3*x6*x7, x10*x11*x13*x3*x6*x9, x10*x11*x13*x4*x5*x6, x10*x11*x13*x4*x6*x7, x10*x11*x13*x4*x6*x9, x10*x11*x13*x5*x6*x9, x10*x11*x13*x5*x8, x10*x11*x13*x6*x8*x9, x10*x11*x13*x7*x8, x10*x11*x14*x2*x5, x10*x11*x14*x3*x4*x9, x10*x11*x14*x3*x6*x7, x10*x11*x14*x3*x6*x9, x10*x11*x14*x4*x5*x6, x10*x11*x14*x4*x7, x10*x11*x14*x5*x7, x10*x11*x14*x5*x9, x10*x11*x14*x7*x8, x10*x11*x2*x3*x4*x9, x10*x11*x2*x3*x5, x10*x11*x2*x3*x6*x7, x10*x11*x2*x4*x5, x10*x11*x2*x5*x6, x10*x11*x2*x5*x8, x10*x11*x2*x5*x9, x10*x11*x2*x7*x8, x10*x11*x3*x4*x6*x7, x10*x11*x3*x5*x7, x10*x11*x3*x5*x8, x10*x11*x3*x7*x8, x10*x11*x3*x8*x9, x10*x11*x4*x5*x8, x10*x11*x5*x6*x7, x10*x11*x5*x7*x8, x10*x12*x13*x14*x3, x10*x12*x13*x14*x4*x9, x10*x12*x13*x14*x8*x9, x10*x12*x13*x2*x3*x4, x10*x12*x13*x2*x3*x8, x10*x12*x13*x3*x4*x5, x10*x12*x13*x3*x4*x7, x10*x12*x13*x3*x5*x9, x10*x12*x13*x3*x6*x7, x10*x12*x13*x3*x7*x8, x10*x12*x13*x3*x7*x9, x10*x12*x13*x4*x6, x10*x12*x13*x6*x8, x10*x12*x14*x2*x3*x4, x10*x12*x14*x2*x3*x5, x10*x12*x14*x2*x4*x6, x10*x12*x14*x2*x4*x9, x10*x12*x14*x3*x4*x6, x10*x12*x14*x3*x4*x7, x10*x12*x14*x4*x6*x7, x10*x12*x14*x4*x7*x9, x10*x12*x2*x3*x4*x9, x10*x12*x2*x3*x5*x9, x10*x12*x2*x3*x7*x9, x10*x12*x2*x4*x5*x6, x10*x12*x2*x4*x5*x9, x10*x12*x2*x4*x6*x8, x10*x12*x2*x4*x6*x9, x10*x12*x2*x4*x7*x9, x10*x12*x2*x5*x8, x10*x12*x2*x8*x9, x10*x12*x3*x4*x6*x8, x10*x12*x3*x4*x6*x9, x10*x12*x3*x4*x7*x8, x10*x12*x3*x4*x7*x9, x10*x12*x3*x5*x6, x10*x12*x3*x6*x8*x9, x10*x12*x4*x6*x7*x8, x10*x12*x4*x6*x7*x9, x10*x12*x5*x6*x7, x10*x12*x6*x7*x8*x9, x10*x13*x14*x2*x8*x9, x10*x13*x14*x3*x4*x7, x10*x13*x14*x3*x4*x9, x10*x13*x14*x3*x5, x10*x13*x14*x3*x6*x9, x10*x13*x14*x3*x8*x9, x10*x13*x14*x4*x6, x10*x13*x14*x4*x7*x9, x10*x13*x14*x5*x8, x10*x13*x14*x5*x9, x10*x13*x14*x6*x8*x9, x10*x13*x14*x7*x8*x9, x10*x13*x3*x4*x5*x9, x10*x13*x3*x5*x6, x10*x13*x3*x5*x8, x10*x14*x2*x3*x4*x7, x10*x14*x2*x3*x9, x10*x14*x2*x4*x6*x7, x10*x14*x2*x4*x7*x9, x10*x14*x2*x5*x6, x10*x14*x2*x5*x8, x10*x14*x2*x5*x9, x10*x14*x2*x7*x8*x9, x10*x14*x3*x4*x6*x9, x10*x14*x3*x4*x7*x8, x10*x14*x3*x4*x7*x9, x10*x14*x3*x5*x6, x10*x14*x3*x5*x7, x10*x14*x3*x6*x8*x9, x10*x14*x4*x6*x7*x8, x10*x14*x4*x6*x7*x9, x10*x14*x4*x7*x8*x9, x10*x14*x5*x6*x7, x10*x14*x5*x7*x8, x10*x14*x5*x7*x9, x10*x14*x6*x7*x8*x9, x10*x2*x3*x4*x5, x10*x2*x3*x5*x6, x10*x2*x3*x5*x8, x10*x2*x5*x6*x7, x10*x2*x5*x7*x8, x10*x2*x5*x7*x9, x10*x3*x4*x5*x6*x8, x10*x3*x4*x5*x7, x10*x3*x5*x6*x7, x10*x3*x5*x6*x8*x9, x10*x3*x5*x7*x8, x10*x3*x5*x7*x9, x11*x12*x13*x14*x4*x8, x11*x12*x13*x2*x3*x4, x11*x12*x13*x2*x3*x8, x11*x12*x13*x2*x4*x6, x11*x12*x13*x2*x4*x8, x11*x12*x13*x2*x5*x8, x11*x12*x13*x3*x4*x8, x11*x12*x13*x3*x7*x9, x11*x12*x13*x4*x7*x8, x11*x12*x13*x5*x7*x8, x11*x12*x13*x6*x8, x11*x12*x14*x3*x7*x9, x11*x12*x14*x6*x8*x9, x11*x12*x2*x3*x4*x7, x11*x12*x2*x3*x8*x9, x11*x12*x2*x4*x5*x6, x11*x12*x2*x6*x8*x9, x11*x12*x3*x6*x8*x9, x11*x13*x14*x2*x4*x7, x11*x13*x14*x2*x5*x8, x11*x13*x14*x2*x5*x9, x11*x13*x14*x4*x7*x8, x11*x13*x14*x4*x7*x9, x11*x13*x14*x5*x7, x11*x13*x14*x6*x8*x9, x11*x13*x2*x3*x4*x9, x11*x13*x2*x3*x8*x9, x11*x13*x2*x4*x5*x6, x11*x13*x2*x4*x6*x9, x11*x13*x2*x4*x7*x8, x11*x13*x2*x4*x8*x9, x11*x13*x2*x5*x8*x9, x11*x13*x2*x6*x8*x9, x11*x13*x3*x4*x8*x9, x11*x13*x3*x6*x7*x9, x11*x13*x3*x6*x8*x9, x11*x13*x3*x7*x8, x11*x13*x4*x5*x6*x7, x11*x13*x4*x5*x8, x11*x13*x5*x6*x7*x9, x11*x13*x5*x6*x8, x11*x13*x5*x7*x8*x9, x11*x14*x2*x3*x5, x11*x14*x2*x3*x7, x11*x14*x2*x5*x6, x11*x14*x3*x5*x7, x11*x14*x3*x6*x7*x9, x11*x14*x4*x6*x7*x9, x11*x14*x5*x6*x7, x11*x14*x5*x6*x8, x11*x14*x6*x7*x8, x11*x2*x3*x4*x5, x11*x2*x3*x5*x8, x11*x2*x3*x7*x8, x11*x2*x3*x7*x9, x11*x2*x4*x5*x6*x9, x11*x2*x4*x6*x7, x11*x2*x5*x6*x7*x9, x11*x2*x5*x6*x8, x11*x2*x6*x7*x8, x11*x3*x4*x5*x7, x11*x3*x4*x5*x8, x11*x3*x4*x7*x9, x11*x3*x5*x6*x8, x11*x3*x5*x7*x8, x11*x3*x5*x7*x9, x11*x3*x6*x7*x8, x11*x3*x7*x8*x9, x12*x13*x14*x2*x3, x12*x13*x14*x2*x4*x6, x12*x13*x14*x2*x4*x9, x12*x13*x14*x2*x5*x8, x12*x13*x14*x3*x4*x8, x12*x13*x14*x3*x5*x7, x12*x13*x14*x4*x7*x9, x12*x13*x14*x4*x8*x9, x12*x13*x2*x3*x4*x7, x12*x13*x2*x3*x4*x8, x12*x13*x2*x3*x6*x7*x9, x12*x13*x2*x4*x5*x8, x12*x13*x2*x4*x6*x7, x12*x13*x2*x4*x8*x9, x12*x13*x2*x6*x8, x12*x13*x3*x4*x5*x7, x12*x13*x3*x4*x7*x8, x12*x13*x3*x4*x7*x9, x12*x13*x4*x5*x6*x7, x12*x13*x4*x6*x7*x9, x12*x13*x4*x6*x8, x12*x13*x6*x7*x8, x12*x3*x5*x7*x9, x13*x14*x2*x3*x9, x13*x14*x2*x4*x5*x9, x13*x14*x2*x4*x7*x9, x13*x14*x2*x4*x8*x9, x13*x14*x2*x5*x6*x8, x13*x14*x2*x6*x8*x9, x13*x14*x3*x4*x8*x9, x13*x14*x3*x7*x8, x13*x14*x4*x5*x8, x13*x14*x4*x6*x7*x9, x13*x14*x4*x6*x8*x9, x13*x14*x4*x7*x8*x9, x13*x14*x5*x7*x8, x13*x14*x6*x7*x8, x13*x2*x3*x5*x8, x13*x2*x4*x5*x7*x8, x13*x2*x5*x6*x7*x8, x13*x3*x4*x5*x8, x13*x3*x5*x7*x8, x14*x4*x5*x6*x7*x9, x2*x3*x5*x7*x9, x2*x4*x5*x6*x7*x9, x3*x5*x6*x7*x9, x3*x5*x7*x8*x9 ); frobby-0.9.5/test/commonIdeals/t15.dim000066400000000000000000000000021401527164200174770ustar00rootroot000000000000009 frobby-0.9.5/test/commonIdeals/t15.euler000066400000000000000000000000041401527164200200440ustar00rootroot00000000000000-13 frobby-0.9.5/test/commonIdeals/t15.intersection000066400000000000000000000046011401527164200214450ustar00rootroot00000000000000R = QQ[x1, x10, x11, x12, x13, x14, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1*x10*x11*x12*x2*x6*x8, x1*x10*x11*x12*x3*x4*x6*x7, x1*x10*x11*x12*x3*x5*x7*x8, x1*x10*x11*x12*x8*x9, x1*x10*x11*x13*x3*x4, x1*x10*x11*x13*x5, x1*x10*x11*x14*x4*x5*x6, x1*x10*x11*x3*x4*x8, x1*x10*x12*x13*x14*x3*x7*x8*x9, x1*x10*x12*x13*x5*x7, x1*x10*x12*x14*x2*x3*x5, x1*x10*x12*x5*x7*x9, x1*x10*x13*x2*x5*x6*x7, x1*x10*x13*x2*x5*x6*x9, x1*x10*x13*x5*x7*x8, x1*x10*x13*x5*x7*x9, x1*x10*x14*x4*x7*x8, x1*x10*x14*x4*x8*x9, x1*x10*x2*x4*x6*x7, x1*x10*x2*x5*x8*x9, x1*x10*x2*x7*x8, x1*x10*x3*x6*x7*x8*x9, x1*x11*x12*x13*x14*x2*x4*x7*x9, x1*x11*x12*x13*x2*x3*x5*x6*x8, x1*x11*x12*x13*x2*x5*x8*x9, x1*x11*x12*x13*x4*x6*x7*x8*x9, x1*x11*x12*x14*x2*x3, x1*x11*x12*x14*x4*x6*x7*x8, x1*x11*x12*x4*x5*x7*x9, x1*x11*x12*x4*x5*x8*x9, x1*x11*x13*x14*x5*x8*x9, x1*x11*x13*x2*x4*x5*x6, x1*x11*x14*x2*x3*x6, x1*x11*x3*x5*x6*x9, x1*x12*x13*x14*x2*x3*x4*x7, x1*x12*x13*x14*x2*x3*x5, x1*x12*x13*x14*x2*x7*x8, x1*x12*x13*x5*x7*x9, x1*x12*x2*x3*x5*x6*x7, x1*x12*x2*x4*x5*x6*x8, x1*x12*x5*x6*x7*x9, x1*x13*x14*x4*x5*x7*x8, x1*x13*x2*x3*x4*x6*x7*x9, x1*x14*x2*x3*x5*x6*x7, x1*x3*x4*x5*x8, x10*x11*x12*x13*x14*x3*x4*x8, x10*x11*x12*x13*x2*x4*x5, x10*x11*x12*x13*x2*x5*x6*x8, x10*x11*x12*x13*x4*x5*x6*x8, x10*x11*x12*x3*x8*x9, x10*x11*x13*x7, x10*x11*x13*x9, x10*x11*x14*x3*x4*x6, x10*x11*x14*x7*x8, x10*x11*x2*x4*x5*x8, x10*x11*x2*x4*x7, x10*x12*x13*x14*x4*x5*x6*x7, x10*x12*x13*x14*x4*x6*x7*x8*x9, x10*x12*x14*x2*x3*x5*x9, x10*x12*x14*x3*x4*x6*x9, x10*x12*x2*x4*x5*x8*x9, x10*x12*x2*x6*x7*x8*x9, x10*x12*x5*x7*x8*x9, x10*x13*x14*x2*x3, x10*x13*x3*x6, x10*x14*x3*x4*x5*x7*x8, x10*x14*x3*x6*x8, x10*x2*x4*x7*x8*x9, x10*x3*x4*x5*x6, x11*x12*x14*x3*x7, x11*x12*x14*x5, x11*x13*x14*x2*x3*x5*x6, x11*x13*x14*x5*x6*x7*x9, x11*x13*x2*x3*x7, x11*x13*x2*x4*x5*x8, x11*x13*x2*x6*x7, x11*x13*x4*x5*x9, x11*x14*x2*x5*x6*x7, x11*x14*x3*x4*x7*x8, x11*x14*x4*x5*x7*x8, x11*x14*x4*x6*x8*x9, x11*x3*x6*x8*x9, x12*x13*x2*x6*x7*x8*x9, x12*x13*x3*x5*x7, x12*x13*x4*x5*x6*x7*x9, x12*x14*x2*x3*x6*x8, x12*x14*x2*x6*x7*x8*x9, x12*x14*x3*x4*x5*x8, x12*x14*x3*x5*x6*x8, x12*x14*x5*x6*x8*x9, x12*x14*x5*x7*x9, x12*x3*x4*x5*x6*x8, x12*x3*x5*x6*x7*x8, x13*x14*x2*x4*x5*x8, x13*x2*x3*x4*x5*x7*x8, x14*x3*x4*x6*x8*x9, x14*x3*x5*x6*x7*x8, x14*x3*x5*x6*x8*x9, x14*x4*x5*x6*x7*x8, x2*x3*x4*x7*x8*x9 ); frobby-0.9.5/test/commonIdeals/t15.irrdecom000066400000000000000000000520321401527164200205440ustar00rootroot00000000000000R = QQ[x1, x10, x11, x12, x13, x14, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1, x10, x11, x12, x13, x6, x9 ); I = monomialIdeal( x1, x10, x11, x12, x14, x2 ); I = monomialIdeal( x1, x10, x11, x12, x14, x7 ); I = monomialIdeal( x1, x10, x11, x12, x2, x6 ); I = monomialIdeal( x1, x10, x11, x12, x8 ); I = monomialIdeal( x1, x10, x11, x13, x8, x9 ); I = monomialIdeal( x1, x10, x11, x14, x3, x6 ); I = monomialIdeal( x1, x10, x11, x14, x3, x7 ); I = monomialIdeal( x1, x10, x11, x14, x6, x7 ); I = monomialIdeal( x1, x10, x11, x4, x5, x6 ); I = monomialIdeal( x1, x10, x11, x4, x6, x7 ); I = monomialIdeal( x1, x10, x11, x5, x6, x9 ); I = monomialIdeal( x1, x10, x11, x5, x8 ); I = monomialIdeal( x1, x10, x11, x7, x8 ); I = monomialIdeal( x1, x10, x12, x13, x14, x9 ); I = monomialIdeal( x1, x10, x12, x13, x2, x8 ); I = monomialIdeal( x1, x10, x12, x13, x4, x5, x9 ); I = monomialIdeal( x1, x10, x12, x13, x5, x8 ); I = monomialIdeal( x1, x10, x12, x13, x6, x7 ); I = monomialIdeal( x1, x10, x12, x13, x7, x8 ); I = monomialIdeal( x1, x10, x12, x13, x7, x9 ); I = monomialIdeal( x1, x10, x12, x14, x2, x4, x8 ); I = monomialIdeal( x1, x10, x12, x14, x2, x9 ); I = monomialIdeal( x1, x10, x12, x2, x4, x6 ); I = monomialIdeal( x1, x10, x12, x2, x4, x7, x8 ); I = monomialIdeal( x1, x10, x12, x2, x7, x9 ); I = monomialIdeal( x1, x10, x12, x3, x4, x6 ); I = monomialIdeal( x1, x10, x12, x3, x4, x7 ); I = monomialIdeal( x1, x10, x12, x4, x6, x7 ); I = monomialIdeal( x1, x10, x12, x5, x7, x9 ); I = monomialIdeal( x1, x10, x13, x14, x2, x6 ); I = monomialIdeal( x1, x10, x13, x14, x3 ); I = monomialIdeal( x1, x10, x13, x14, x6, x7 ); I = monomialIdeal( x1, x10, x13, x14, x6, x9 ); I = monomialIdeal( x1, x10, x13, x14, x8 ); I = monomialIdeal( x1, x10, x13, x3, x5, x9 ); I = monomialIdeal( x1, x10, x14, x2, x3, x4 ); I = monomialIdeal( x1, x10, x14, x2, x3, x5 ); I = monomialIdeal( x1, x10, x14, x3, x4, x6 ); I = monomialIdeal( x1, x10, x14, x3, x4, x7 ); I = monomialIdeal( x1, x10, x14, x4, x6, x7 ); I = monomialIdeal( x1, x10, x14, x4, x7, x8 ); I = monomialIdeal( x1, x10, x14, x4, x7, x9 ); I = monomialIdeal( x1, x10, x14, x7, x8, x9 ); I = monomialIdeal( x1, x10, x2, x3, x5, x9 ); I = monomialIdeal( x1, x10, x3, x5, x6 ); I = monomialIdeal( x1, x10, x5, x6, x7 ); I = monomialIdeal( x1, x10, x5, x7, x8 ); I = monomialIdeal( x1, x11, x12, x13, x14, x4 ); I = monomialIdeal( x1, x11, x12, x13, x3, x7 ); I = monomialIdeal( x1, x11, x12, x13, x4, x6 ); I = monomialIdeal( x1, x11, x12, x13, x4, x8 ); I = monomialIdeal( x1, x11, x12, x13, x5, x8 ); I = monomialIdeal( x1, x11, x12, x13, x6, x7 ); I = monomialIdeal( x1, x11, x12, x14, x2, x3 ); I = monomialIdeal( x1, x11, x12, x14, x2, x6 ); I = monomialIdeal( x1, x11, x12, x14, x3, x7 ); I = monomialIdeal( x1, x11, x12, x14, x4, x6 ); I = monomialIdeal( x1, x11, x12, x14, x6, x7 ); I = monomialIdeal( x1, x11, x12, x14, x6, x8 ); I = monomialIdeal( x1, x11, x12, x2, x3, x5 ); I = monomialIdeal( x1, x11, x12, x2, x3, x6 ); I = monomialIdeal( x1, x11, x12, x2, x3, x7 ); I = monomialIdeal( x1, x11, x12, x2, x4, x6 ); I = monomialIdeal( x1, x11, x12, x2, x6, x7 ); I = monomialIdeal( x1, x11, x12, x2, x6, x8 ); I = monomialIdeal( x1, x11, x12, x3, x4 ); I = monomialIdeal( x1, x11, x12, x3, x8 ); I = monomialIdeal( x1, x11, x13, x14, x2, x5 ); I = monomialIdeal( x1, x11, x13, x14, x3, x8 ); I = monomialIdeal( x1, x11, x13, x14, x4, x7 ); I = monomialIdeal( x1, x11, x13, x14, x5, x8 ); I = monomialIdeal( x1, x11, x13, x14, x5, x9 ); I = monomialIdeal( x1, x11, x13, x14, x6, x8 ); I = monomialIdeal( x1, x11, x13, x14, x6, x9 ); I = monomialIdeal( x1, x11, x13, x2, x3, x5 ); I = monomialIdeal( x1, x11, x13, x3, x6, x9 ); I = monomialIdeal( x1, x11, x13, x3, x7, x9 ); I = monomialIdeal( x1, x11, x13, x3, x8, x9 ); I = monomialIdeal( x1, x11, x13, x4, x5, x6 ); I = monomialIdeal( x1, x11, x13, x4, x6, x9 ); I = monomialIdeal( x1, x11, x13, x4, x8, x9 ); I = monomialIdeal( x1, x11, x13, x5, x6, x7 ); I = monomialIdeal( x1, x11, x13, x5, x6, x9 ); I = monomialIdeal( x1, x11, x13, x5, x8, x9 ); I = monomialIdeal( x1, x11, x13, x6, x8, x9 ); I = monomialIdeal( x1, x11, x14, x2, x6, x7 ); I = monomialIdeal( x1, x11, x14, x3, x4, x7 ); I = monomialIdeal( x1, x11, x14, x3, x4, x8 ); I = monomialIdeal( x1, x11, x14, x3, x6, x8 ); I = monomialIdeal( x1, x11, x14, x3, x9 ); I = monomialIdeal( x1, x11, x14, x4, x5, x6 ); I = monomialIdeal( x1, x11, x14, x4, x6, x7 ); I = monomialIdeal( x1, x11, x14, x5, x6, x9 ); I = monomialIdeal( x1, x11, x14, x6, x7, x9 ); I = monomialIdeal( x1, x11, x2, x3, x6, x7 ); I = monomialIdeal( x1, x11, x2, x3, x6, x9 ); I = monomialIdeal( x1, x11, x2, x5, x6 ); I = monomialIdeal( x1, x11, x3, x4, x5, x6 ); I = monomialIdeal( x1, x11, x3, x4, x6, x7 ); I = monomialIdeal( x1, x11, x3, x4, x9 ); I = monomialIdeal( x1, x11, x3, x5, x7 ); I = monomialIdeal( x1, x11, x3, x5, x8 ); I = monomialIdeal( x1, x11, x3, x5, x9 ); I = monomialIdeal( x1, x11, x3, x6, x8, x9 ); I = monomialIdeal( x1, x11, x3, x7, x8 ); I = monomialIdeal( x1, x12, x13, x14, x2, x6 ); I = monomialIdeal( x1, x12, x13, x14, x3, x4 ); I = monomialIdeal( x1, x12, x13, x14, x4, x6 ); I = monomialIdeal( x1, x12, x13, x14, x4, x9 ); I = monomialIdeal( x1, x12, x13, x2, x3, x8 ); I = monomialIdeal( x1, x12, x13, x2, x4, x8 ); I = monomialIdeal( x1, x12, x13, x2, x6, x7 ); I = monomialIdeal( x1, x12, x13, x3, x4, x7 ); I = monomialIdeal( x1, x12, x13, x3, x7, x8 ); I = monomialIdeal( x1, x12, x13, x4, x5, x8 ); I = monomialIdeal( x1, x12, x13, x4, x6, x7 ); I = monomialIdeal( x1, x12, x13, x4, x7, x8 ); I = monomialIdeal( x1, x12, x13, x5, x6, x7 ); I = monomialIdeal( x1, x12, x14, x6, x7, x8, x9 ); I = monomialIdeal( x1, x12, x2, x3, x7, x9 ); I = monomialIdeal( x1, x12, x2, x6, x7, x9 ); I = monomialIdeal( x1, x12, x3, x4, x7, x9 ); I = monomialIdeal( x1, x12, x3, x7, x8, x9 ); I = monomialIdeal( x1, x13, x14, x2, x3, x5 ); I = monomialIdeal( x1, x13, x14, x2, x3, x7 ); I = monomialIdeal( x1, x13, x14, x2, x3, x8 ); I = monomialIdeal( x1, x13, x14, x2, x5, x8 ); I = monomialIdeal( x1, x13, x14, x2, x5, x9 ); I = monomialIdeal( x1, x13, x14, x2, x6, x8 ); I = monomialIdeal( x1, x13, x14, x2, x6, x9 ); I = monomialIdeal( x1, x13, x14, x3, x4, x5, x6 ); I = monomialIdeal( x1, x13, x14, x3, x4, x7 ); I = monomialIdeal( x1, x13, x14, x3, x4, x9 ); I = monomialIdeal( x1, x13, x14, x3, x5, x7 ); I = monomialIdeal( x1, x13, x14, x4, x5, x9 ); I = monomialIdeal( x1, x13, x14, x4, x6, x9 ); I = monomialIdeal( x1, x13, x14, x4, x7, x9 ); I = monomialIdeal( x1, x13, x14, x4, x8 ); I = monomialIdeal( x1, x13, x14, x5, x7, x9 ); I = monomialIdeal( x1, x13, x3, x4, x5, x7 ); I = monomialIdeal( x1, x13, x3, x5, x6, x7 ); I = monomialIdeal( x1, x13, x4, x5, x7, x8 ); I = monomialIdeal( x1, x13, x5, x6, x7, x8 ); I = monomialIdeal( x1, x13, x5, x6, x7, x9 ); I = monomialIdeal( x1, x14, x2, x3, x4, x7, x9 ); I = monomialIdeal( x1, x14, x2, x3, x7, x8, x9 ); I = monomialIdeal( x1, x14, x2, x6, x7, x9 ); I = monomialIdeal( x1, x14, x3, x4, x7, x8, x9 ); I = monomialIdeal( x1, x14, x4, x6, x7, x9 ); I = monomialIdeal( x1, x14, x5, x6, x7, x9 ); I = monomialIdeal( x1, x2, x5, x6, x7, x8, x9 ); I = monomialIdeal( x1, x3, x5, x7, x9 ); I = monomialIdeal( x10, x11, x12, x13, x14, x8 ); I = monomialIdeal( x10, x11, x12, x13, x3, x6 ); I = monomialIdeal( x10, x11, x12, x13, x3, x7 ); I = monomialIdeal( x10, x11, x12, x14, x3 ); I = monomialIdeal( x10, x11, x12, x14, x4 ); I = monomialIdeal( x10, x11, x12, x14, x8, x9 ); I = monomialIdeal( x10, x11, x12, x2, x3, x7 ); I = monomialIdeal( x10, x11, x12, x2, x8 ); I = monomialIdeal( x10, x11, x12, x3, x4 ); I = monomialIdeal( x10, x11, x12, x3, x5 ); I = monomialIdeal( x10, x11, x12, x3, x8 ); I = monomialIdeal( x10, x11, x12, x4, x5 ); I = monomialIdeal( x10, x11, x12, x4, x6 ); I = monomialIdeal( x10, x11, x12, x4, x7, x9 ); I = monomialIdeal( x10, x11, x12, x5, x9 ); I = monomialIdeal( x10, x11, x12, x6, x8 ); I = monomialIdeal( x10, x11, x12, x7, x8 ); I = monomialIdeal( x10, x11, x13, x14, x3, x6 ); I = monomialIdeal( x10, x11, x13, x14, x4, x5 ); I = monomialIdeal( x10, x11, x13, x14, x6, x8 ); I = monomialIdeal( x10, x11, x13, x2, x8, x9 ); I = monomialIdeal( x10, x11, x13, x3, x4, x9 ); I = monomialIdeal( x10, x11, x13, x3, x5, x9 ); I = monomialIdeal( x10, x11, x13, x3, x6, x7 ); I = monomialIdeal( x10, x11, x13, x3, x6, x9 ); I = monomialIdeal( x10, x11, x13, x4, x5, x6 ); I = monomialIdeal( x10, x11, x13, x4, x6, x7 ); I = monomialIdeal( x10, x11, x13, x4, x6, x9 ); I = monomialIdeal( x10, x11, x13, x5, x6, x9 ); I = monomialIdeal( x10, x11, x13, x5, x8 ); I = monomialIdeal( x10, x11, x13, x6, x8, x9 ); I = monomialIdeal( x10, x11, x13, x7, x8 ); I = monomialIdeal( x10, x11, x14, x2, x5 ); I = monomialIdeal( x10, x11, x14, x3, x4, x9 ); I = monomialIdeal( x10, x11, x14, x3, x6, x7 ); I = monomialIdeal( x10, x11, x14, x3, x6, x9 ); I = monomialIdeal( x10, x11, x14, x4, x5, x6 ); I = monomialIdeal( x10, x11, x14, x4, x7 ); I = monomialIdeal( x10, x11, x14, x5, x7 ); I = monomialIdeal( x10, x11, x14, x5, x9 ); I = monomialIdeal( x10, x11, x14, x7, x8 ); I = monomialIdeal( x10, x11, x2, x3, x4, x9 ); I = monomialIdeal( x10, x11, x2, x3, x5 ); I = monomialIdeal( x10, x11, x2, x3, x6, x7 ); I = monomialIdeal( x10, x11, x2, x4, x5 ); I = monomialIdeal( x10, x11, x2, x5, x6 ); I = monomialIdeal( x10, x11, x2, x5, x8 ); I = monomialIdeal( x10, x11, x2, x5, x9 ); I = monomialIdeal( x10, x11, x2, x7, x8 ); I = monomialIdeal( x10, x11, x3, x4, x6, x7 ); I = monomialIdeal( x10, x11, x3, x5, x7 ); I = monomialIdeal( x10, x11, x3, x5, x8 ); I = monomialIdeal( x10, x11, x3, x7, x8 ); I = monomialIdeal( x10, x11, x3, x8, x9 ); I = monomialIdeal( x10, x11, x4, x5, x8 ); I = monomialIdeal( x10, x11, x5, x6, x7 ); I = monomialIdeal( x10, x11, x5, x7, x8 ); I = monomialIdeal( x10, x12, x13, x14, x3 ); I = monomialIdeal( x10, x12, x13, x14, x4, x9 ); I = monomialIdeal( x10, x12, x13, x14, x8, x9 ); I = monomialIdeal( x10, x12, x13, x2, x3, x4 ); I = monomialIdeal( x10, x12, x13, x2, x3, x8 ); I = monomialIdeal( x10, x12, x13, x3, x4, x5 ); I = monomialIdeal( x10, x12, x13, x3, x4, x7 ); I = monomialIdeal( x10, x12, x13, x3, x5, x9 ); I = monomialIdeal( x10, x12, x13, x3, x6, x7 ); I = monomialIdeal( x10, x12, x13, x3, x7, x8 ); I = monomialIdeal( x10, x12, x13, x3, x7, x9 ); I = monomialIdeal( x10, x12, x13, x4, x6 ); I = monomialIdeal( x10, x12, x13, x6, x8 ); I = monomialIdeal( x10, x12, x14, x2, x3, x4 ); I = monomialIdeal( x10, x12, x14, x2, x3, x5 ); I = monomialIdeal( x10, x12, x14, x2, x4, x6 ); I = monomialIdeal( x10, x12, x14, x2, x4, x9 ); I = monomialIdeal( x10, x12, x14, x3, x4, x6 ); I = monomialIdeal( x10, x12, x14, x3, x4, x7 ); I = monomialIdeal( x10, x12, x14, x4, x6, x7 ); I = monomialIdeal( x10, x12, x14, x4, x7, x9 ); I = monomialIdeal( x10, x12, x2, x3, x4, x9 ); I = monomialIdeal( x10, x12, x2, x3, x5, x9 ); I = monomialIdeal( x10, x12, x2, x3, x7, x9 ); I = monomialIdeal( x10, x12, x2, x4, x5, x6 ); I = monomialIdeal( x10, x12, x2, x4, x5, x9 ); I = monomialIdeal( x10, x12, x2, x4, x6, x8 ); I = monomialIdeal( x10, x12, x2, x4, x6, x9 ); I = monomialIdeal( x10, x12, x2, x4, x7, x9 ); I = monomialIdeal( x10, x12, x2, x5, x8 ); I = monomialIdeal( x10, x12, x2, x8, x9 ); I = monomialIdeal( x10, x12, x3, x4, x6, x8 ); I = monomialIdeal( x10, x12, x3, x4, x6, x9 ); I = monomialIdeal( x10, x12, x3, x4, x7, x8 ); I = monomialIdeal( x10, x12, x3, x4, x7, x9 ); I = monomialIdeal( x10, x12, x3, x5, x6 ); I = monomialIdeal( x10, x12, x3, x6, x8, x9 ); I = monomialIdeal( x10, x12, x4, x6, x7, x8 ); I = monomialIdeal( x10, x12, x4, x6, x7, x9 ); I = monomialIdeal( x10, x12, x5, x6, x7 ); I = monomialIdeal( x10, x12, x6, x7, x8, x9 ); I = monomialIdeal( x10, x13, x14, x2, x8, x9 ); I = monomialIdeal( x10, x13, x14, x3, x4, x7 ); I = monomialIdeal( x10, x13, x14, x3, x4, x9 ); I = monomialIdeal( x10, x13, x14, x3, x5 ); I = monomialIdeal( x10, x13, x14, x3, x6, x9 ); I = monomialIdeal( x10, x13, x14, x3, x8, x9 ); I = monomialIdeal( x10, x13, x14, x4, x6 ); I = monomialIdeal( x10, x13, x14, x4, x7, x9 ); I = monomialIdeal( x10, x13, x14, x5, x8 ); I = monomialIdeal( x10, x13, x14, x5, x9 ); I = monomialIdeal( x10, x13, x14, x6, x8, x9 ); I = monomialIdeal( x10, x13, x14, x7, x8, x9 ); I = monomialIdeal( x10, x13, x3, x4, x5, x9 ); I = monomialIdeal( x10, x13, x3, x5, x6 ); I = monomialIdeal( x10, x13, x3, x5, x8 ); I = monomialIdeal( x10, x14, x2, x3, x4, x7 ); I = monomialIdeal( x10, x14, x2, x3, x9 ); I = monomialIdeal( x10, x14, x2, x4, x6, x7 ); I = monomialIdeal( x10, x14, x2, x4, x7, x9 ); I = monomialIdeal( x10, x14, x2, x5, x6 ); I = monomialIdeal( x10, x14, x2, x5, x8 ); I = monomialIdeal( x10, x14, x2, x5, x9 ); I = monomialIdeal( x10, x14, x2, x7, x8, x9 ); I = monomialIdeal( x10, x14, x3, x4, x6, x9 ); I = monomialIdeal( x10, x14, x3, x4, x7, x8 ); I = monomialIdeal( x10, x14, x3, x4, x7, x9 ); I = monomialIdeal( x10, x14, x3, x5, x6 ); I = monomialIdeal( x10, x14, x3, x5, x7 ); I = monomialIdeal( x10, x14, x3, x6, x8, x9 ); I = monomialIdeal( x10, x14, x4, x6, x7, x8 ); I = monomialIdeal( x10, x14, x4, x6, x7, x9 ); I = monomialIdeal( x10, x14, x4, x7, x8, x9 ); I = monomialIdeal( x10, x14, x5, x6, x7 ); I = monomialIdeal( x10, x14, x5, x7, x8 ); I = monomialIdeal( x10, x14, x5, x7, x9 ); I = monomialIdeal( x10, x14, x6, x7, x8, x9 ); I = monomialIdeal( x10, x2, x3, x4, x5 ); I = monomialIdeal( x10, x2, x3, x5, x6 ); I = monomialIdeal( x10, x2, x3, x5, x8 ); I = monomialIdeal( x10, x2, x5, x6, x7 ); I = monomialIdeal( x10, x2, x5, x7, x8 ); I = monomialIdeal( x10, x2, x5, x7, x9 ); I = monomialIdeal( x10, x3, x4, x5, x6, x8 ); I = monomialIdeal( x10, x3, x4, x5, x7 ); I = monomialIdeal( x10, x3, x5, x6, x7 ); I = monomialIdeal( x10, x3, x5, x6, x8, x9 ); I = monomialIdeal( x10, x3, x5, x7, x8 ); I = monomialIdeal( x10, x3, x5, x7, x9 ); I = monomialIdeal( x11, x12, x13, x14, x4, x8 ); I = monomialIdeal( x11, x12, x13, x2, x3, x4 ); I = monomialIdeal( x11, x12, x13, x2, x3, x8 ); I = monomialIdeal( x11, x12, x13, x2, x4, x6 ); I = monomialIdeal( x11, x12, x13, x2, x4, x8 ); I = monomialIdeal( x11, x12, x13, x2, x5, x8 ); I = monomialIdeal( x11, x12, x13, x3, x4, x8 ); I = monomialIdeal( x11, x12, x13, x3, x7, x9 ); I = monomialIdeal( x11, x12, x13, x4, x7, x8 ); I = monomialIdeal( x11, x12, x13, x5, x7, x8 ); I = monomialIdeal( x11, x12, x13, x6, x8 ); I = monomialIdeal( x11, x12, x14, x3, x7, x9 ); I = monomialIdeal( x11, x12, x14, x6, x8, x9 ); I = monomialIdeal( x11, x12, x2, x3, x4, x7 ); I = monomialIdeal( x11, x12, x2, x3, x8, x9 ); I = monomialIdeal( x11, x12, x2, x4, x5, x6 ); I = monomialIdeal( x11, x12, x2, x6, x8, x9 ); I = monomialIdeal( x11, x12, x3, x6, x8, x9 ); I = monomialIdeal( x11, x13, x14, x2, x4, x7 ); I = monomialIdeal( x11, x13, x14, x2, x5, x8 ); I = monomialIdeal( x11, x13, x14, x2, x5, x9 ); I = monomialIdeal( x11, x13, x14, x4, x7, x8 ); I = monomialIdeal( x11, x13, x14, x4, x7, x9 ); I = monomialIdeal( x11, x13, x14, x5, x7 ); I = monomialIdeal( x11, x13, x14, x6, x8, x9 ); I = monomialIdeal( x11, x13, x2, x3, x4, x9 ); I = monomialIdeal( x11, x13, x2, x3, x8, x9 ); I = monomialIdeal( x11, x13, x2, x4, x5, x6 ); I = monomialIdeal( x11, x13, x2, x4, x6, x9 ); I = monomialIdeal( x11, x13, x2, x4, x7, x8 ); I = monomialIdeal( x11, x13, x2, x4, x8, x9 ); I = monomialIdeal( x11, x13, x2, x5, x8, x9 ); I = monomialIdeal( x11, x13, x2, x6, x8, x9 ); I = monomialIdeal( x11, x13, x3, x4, x8, x9 ); I = monomialIdeal( x11, x13, x3, x6, x7, x9 ); I = monomialIdeal( x11, x13, x3, x6, x8, x9 ); I = monomialIdeal( x11, x13, x3, x7, x8 ); I = monomialIdeal( x11, x13, x4, x5, x6, x7 ); I = monomialIdeal( x11, x13, x4, x5, x8 ); I = monomialIdeal( x11, x13, x5, x6, x7, x9 ); I = monomialIdeal( x11, x13, x5, x6, x8 ); I = monomialIdeal( x11, x13, x5, x7, x8, x9 ); I = monomialIdeal( x11, x14, x2, x3, x5 ); I = monomialIdeal( x11, x14, x2, x3, x7 ); I = monomialIdeal( x11, x14, x2, x5, x6 ); I = monomialIdeal( x11, x14, x3, x5, x7 ); I = monomialIdeal( x11, x14, x3, x6, x7, x9 ); I = monomialIdeal( x11, x14, x4, x6, x7, x9 ); I = monomialIdeal( x11, x14, x5, x6, x7 ); I = monomialIdeal( x11, x14, x5, x6, x8 ); I = monomialIdeal( x11, x14, x6, x7, x8 ); I = monomialIdeal( x11, x2, x3, x4, x5 ); I = monomialIdeal( x11, x2, x3, x5, x8 ); I = monomialIdeal( x11, x2, x3, x7, x8 ); I = monomialIdeal( x11, x2, x3, x7, x9 ); I = monomialIdeal( x11, x2, x4, x5, x6, x9 ); I = monomialIdeal( x11, x2, x4, x6, x7 ); I = monomialIdeal( x11, x2, x5, x6, x7, x9 ); I = monomialIdeal( x11, x2, x5, x6, x8 ); I = monomialIdeal( x11, x2, x6, x7, x8 ); I = monomialIdeal( x11, x3, x4, x5, x7 ); I = monomialIdeal( x11, x3, x4, x5, x8 ); I = monomialIdeal( x11, x3, x4, x7, x9 ); I = monomialIdeal( x11, x3, x5, x6, x8 ); I = monomialIdeal( x11, x3, x5, x7, x8 ); I = monomialIdeal( x11, x3, x5, x7, x9 ); I = monomialIdeal( x11, x3, x6, x7, x8 ); I = monomialIdeal( x11, x3, x7, x8, x9 ); I = monomialIdeal( x12, x13, x14, x2, x3 ); I = monomialIdeal( x12, x13, x14, x2, x4, x6 ); I = monomialIdeal( x12, x13, x14, x2, x4, x9 ); I = monomialIdeal( x12, x13, x14, x2, x5, x8 ); I = monomialIdeal( x12, x13, x14, x3, x4, x8 ); I = monomialIdeal( x12, x13, x14, x3, x5, x7 ); I = monomialIdeal( x12, x13, x14, x4, x7, x9 ); I = monomialIdeal( x12, x13, x14, x4, x8, x9 ); I = monomialIdeal( x12, x13, x2, x3, x4, x7 ); I = monomialIdeal( x12, x13, x2, x3, x4, x8 ); I = monomialIdeal( x12, x13, x2, x3, x6, x7, x9 ); I = monomialIdeal( x12, x13, x2, x4, x5, x8 ); I = monomialIdeal( x12, x13, x2, x4, x6, x7 ); I = monomialIdeal( x12, x13, x2, x4, x8, x9 ); I = monomialIdeal( x12, x13, x2, x6, x8 ); I = monomialIdeal( x12, x13, x3, x4, x5, x7 ); I = monomialIdeal( x12, x13, x3, x4, x7, x8 ); I = monomialIdeal( x12, x13, x3, x4, x7, x9 ); I = monomialIdeal( x12, x13, x4, x5, x6, x7 ); I = monomialIdeal( x12, x13, x4, x6, x7, x9 ); I = monomialIdeal( x12, x13, x4, x6, x8 ); I = monomialIdeal( x12, x13, x6, x7, x8 ); I = monomialIdeal( x12, x3, x5, x7, x9 ); I = monomialIdeal( x13, x14, x2, x3, x9 ); I = monomialIdeal( x13, x14, x2, x4, x5, x9 ); I = monomialIdeal( x13, x14, x2, x4, x7, x9 ); I = monomialIdeal( x13, x14, x2, x4, x8, x9 ); I = monomialIdeal( x13, x14, x2, x5, x6, x8 ); I = monomialIdeal( x13, x14, x2, x6, x8, x9 ); I = monomialIdeal( x13, x14, x3, x4, x8, x9 ); I = monomialIdeal( x13, x14, x3, x7, x8 ); I = monomialIdeal( x13, x14, x4, x5, x8 ); I = monomialIdeal( x13, x14, x4, x6, x7, x9 ); I = monomialIdeal( x13, x14, x4, x6, x8, x9 ); I = monomialIdeal( x13, x14, x4, x7, x8, x9 ); I = monomialIdeal( x13, x14, x5, x7, x8 ); I = monomialIdeal( x13, x14, x6, x7, x8 ); I = monomialIdeal( x13, x2, x3, x5, x8 ); I = monomialIdeal( x13, x2, x4, x5, x7, x8 ); I = monomialIdeal( x13, x2, x5, x6, x7, x8 ); I = monomialIdeal( x13, x3, x4, x5, x8 ); I = monomialIdeal( x13, x3, x5, x7, x8 ); I = monomialIdeal( x14, x4, x5, x6, x7, x9 ); I = monomialIdeal( x2, x3, x5, x7, x9 ); I = monomialIdeal( x2, x4, x5, x6, x7, x9 ); I = monomialIdeal( x3, x5, x6, x7, x9 ); I = monomialIdeal( x3, x5, x7, x8, x9 ); frobby-0.9.5/test/commonIdeals/t15.irrdecom_ideal000066400000000000000000000213611401527164200217030ustar00rootroot00000000000000R = QQ[x1, x10, x11, x12, x13, x14, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1*x10*x11*x12*x13*x6*x9, x1*x10*x11*x12*x14*x2, x1*x10*x11*x12*x14*x7, x1*x10*x11*x12*x2*x6, x1*x10*x11*x12*x8, x1*x10*x11*x13*x8*x9, x1*x10*x11*x14*x3*x6, x1*x10*x11*x14*x3*x7, x1*x10*x11*x14*x6*x7, x1*x10*x11*x4*x5*x6, x1*x10*x11*x4*x6*x7, x1*x10*x11*x5*x6*x9, x1*x10*x11*x5*x8, x1*x10*x11*x7*x8, x1*x10*x12*x13*x14*x9, x1*x10*x12*x13*x2*x8, x1*x10*x12*x13*x4*x5*x9, x1*x10*x12*x13*x5*x8, x1*x10*x12*x13*x6*x7, x1*x10*x12*x13*x7*x8, x1*x10*x12*x13*x7*x9, x1*x10*x12*x14*x2*x4*x8, x1*x10*x12*x14*x2*x9, x1*x10*x12*x2*x4*x6, x1*x10*x12*x2*x4*x7*x8, x1*x10*x12*x2*x7*x9, x1*x10*x12*x3*x4*x6, x1*x10*x12*x3*x4*x7, x1*x10*x12*x4*x6*x7, x1*x10*x12*x5*x7*x9, x1*x10*x13*x14*x2*x6, x1*x10*x13*x14*x3, x1*x10*x13*x14*x6*x7, x1*x10*x13*x14*x6*x9, x1*x10*x13*x14*x8, x1*x10*x13*x3*x5*x9, x1*x10*x14*x2*x3*x4, x1*x10*x14*x2*x3*x5, x1*x10*x14*x3*x4*x6, x1*x10*x14*x3*x4*x7, x1*x10*x14*x4*x6*x7, x1*x10*x14*x4*x7*x8, x1*x10*x14*x4*x7*x9, x1*x10*x14*x7*x8*x9, x1*x10*x2*x3*x5*x9, x1*x10*x3*x5*x6, x1*x10*x5*x6*x7, x1*x10*x5*x7*x8, x1*x11*x12*x13*x14*x4, x1*x11*x12*x13*x3*x7, x1*x11*x12*x13*x4*x6, x1*x11*x12*x13*x4*x8, x1*x11*x12*x13*x5*x8, x1*x11*x12*x13*x6*x7, x1*x11*x12*x14*x2*x3, x1*x11*x12*x14*x2*x6, x1*x11*x12*x14*x3*x7, x1*x11*x12*x14*x4*x6, x1*x11*x12*x14*x6*x7, x1*x11*x12*x14*x6*x8, x1*x11*x12*x2*x3*x5, x1*x11*x12*x2*x3*x6, x1*x11*x12*x2*x3*x7, x1*x11*x12*x2*x4*x6, x1*x11*x12*x2*x6*x7, x1*x11*x12*x2*x6*x8, x1*x11*x12*x3*x4, x1*x11*x12*x3*x8, x1*x11*x13*x14*x2*x5, x1*x11*x13*x14*x3*x8, x1*x11*x13*x14*x4*x7, x1*x11*x13*x14*x5*x8, x1*x11*x13*x14*x5*x9, x1*x11*x13*x14*x6*x8, x1*x11*x13*x14*x6*x9, x1*x11*x13*x2*x3*x5, x1*x11*x13*x3*x6*x9, x1*x11*x13*x3*x7*x9, x1*x11*x13*x3*x8*x9, x1*x11*x13*x4*x5*x6, x1*x11*x13*x4*x6*x9, x1*x11*x13*x4*x8*x9, x1*x11*x13*x5*x6*x7, x1*x11*x13*x5*x6*x9, x1*x11*x13*x5*x8*x9, x1*x11*x13*x6*x8*x9, x1*x11*x14*x2*x6*x7, x1*x11*x14*x3*x4*x7, x1*x11*x14*x3*x4*x8, x1*x11*x14*x3*x6*x8, x1*x11*x14*x3*x9, x1*x11*x14*x4*x5*x6, x1*x11*x14*x4*x6*x7, x1*x11*x14*x5*x6*x9, x1*x11*x14*x6*x7*x9, x1*x11*x2*x3*x6*x7, x1*x11*x2*x3*x6*x9, x1*x11*x2*x5*x6, x1*x11*x3*x4*x5*x6, x1*x11*x3*x4*x6*x7, x1*x11*x3*x4*x9, x1*x11*x3*x5*x7, x1*x11*x3*x5*x8, x1*x11*x3*x5*x9, x1*x11*x3*x6*x8*x9, x1*x11*x3*x7*x8, x1*x12*x13*x14*x2*x6, x1*x12*x13*x14*x3*x4, x1*x12*x13*x14*x4*x6, x1*x12*x13*x14*x4*x9, x1*x12*x13*x2*x3*x8, x1*x12*x13*x2*x4*x8, x1*x12*x13*x2*x6*x7, x1*x12*x13*x3*x4*x7, x1*x12*x13*x3*x7*x8, x1*x12*x13*x4*x5*x8, x1*x12*x13*x4*x6*x7, x1*x12*x13*x4*x7*x8, x1*x12*x13*x5*x6*x7, x1*x12*x14*x6*x7*x8*x9, x1*x12*x2*x3*x7*x9, x1*x12*x2*x6*x7*x9, x1*x12*x3*x4*x7*x9, x1*x12*x3*x7*x8*x9, x1*x13*x14*x2*x3*x5, x1*x13*x14*x2*x3*x7, x1*x13*x14*x2*x3*x8, x1*x13*x14*x2*x5*x8, x1*x13*x14*x2*x5*x9, x1*x13*x14*x2*x6*x8, x1*x13*x14*x2*x6*x9, x1*x13*x14*x3*x4*x5*x6, x1*x13*x14*x3*x4*x7, x1*x13*x14*x3*x4*x9, x1*x13*x14*x3*x5*x7, x1*x13*x14*x4*x5*x9, x1*x13*x14*x4*x6*x9, x1*x13*x14*x4*x7*x9, x1*x13*x14*x4*x8, x1*x13*x14*x5*x7*x9, x1*x13*x3*x4*x5*x7, x1*x13*x3*x5*x6*x7, x1*x13*x4*x5*x7*x8, x1*x13*x5*x6*x7*x8, x1*x13*x5*x6*x7*x9, x1*x14*x2*x3*x4*x7*x9, x1*x14*x2*x3*x7*x8*x9, x1*x14*x2*x6*x7*x9, x1*x14*x3*x4*x7*x8*x9, x1*x14*x4*x6*x7*x9, x1*x14*x5*x6*x7*x9, x1*x2*x5*x6*x7*x8*x9, x1*x3*x5*x7*x9, x10*x11*x12*x13*x14*x8, x10*x11*x12*x13*x3*x6, x10*x11*x12*x13*x3*x7, x10*x11*x12*x14*x3, x10*x11*x12*x14*x4, x10*x11*x12*x14*x8*x9, x10*x11*x12*x2*x3*x7, x10*x11*x12*x2*x8, x10*x11*x12*x3*x4, x10*x11*x12*x3*x5, x10*x11*x12*x3*x8, x10*x11*x12*x4*x5, x10*x11*x12*x4*x6, x10*x11*x12*x4*x7*x9, x10*x11*x12*x5*x9, x10*x11*x12*x6*x8, x10*x11*x12*x7*x8, x10*x11*x13*x14*x3*x6, x10*x11*x13*x14*x4*x5, x10*x11*x13*x14*x6*x8, x10*x11*x13*x2*x8*x9, x10*x11*x13*x3*x4*x9, x10*x11*x13*x3*x5*x9, x10*x11*x13*x3*x6*x7, x10*x11*x13*x3*x6*x9, x10*x11*x13*x4*x5*x6, x10*x11*x13*x4*x6*x7, x10*x11*x13*x4*x6*x9, x10*x11*x13*x5*x6*x9, x10*x11*x13*x5*x8, x10*x11*x13*x6*x8*x9, x10*x11*x13*x7*x8, x10*x11*x14*x2*x5, x10*x11*x14*x3*x4*x9, x10*x11*x14*x3*x6*x7, x10*x11*x14*x3*x6*x9, x10*x11*x14*x4*x5*x6, x10*x11*x14*x4*x7, x10*x11*x14*x5*x7, x10*x11*x14*x5*x9, x10*x11*x14*x7*x8, x10*x11*x2*x3*x4*x9, x10*x11*x2*x3*x5, x10*x11*x2*x3*x6*x7, x10*x11*x2*x4*x5, x10*x11*x2*x5*x6, x10*x11*x2*x5*x8, x10*x11*x2*x5*x9, x10*x11*x2*x7*x8, x10*x11*x3*x4*x6*x7, x10*x11*x3*x5*x7, x10*x11*x3*x5*x8, x10*x11*x3*x7*x8, x10*x11*x3*x8*x9, x10*x11*x4*x5*x8, x10*x11*x5*x6*x7, x10*x11*x5*x7*x8, x10*x12*x13*x14*x3, x10*x12*x13*x14*x4*x9, x10*x12*x13*x14*x8*x9, x10*x12*x13*x2*x3*x4, x10*x12*x13*x2*x3*x8, x10*x12*x13*x3*x4*x5, x10*x12*x13*x3*x4*x7, x10*x12*x13*x3*x5*x9, x10*x12*x13*x3*x6*x7, x10*x12*x13*x3*x7*x8, x10*x12*x13*x3*x7*x9, x10*x12*x13*x4*x6, x10*x12*x13*x6*x8, x10*x12*x14*x2*x3*x4, x10*x12*x14*x2*x3*x5, x10*x12*x14*x2*x4*x6, x10*x12*x14*x2*x4*x9, x10*x12*x14*x3*x4*x6, x10*x12*x14*x3*x4*x7, x10*x12*x14*x4*x6*x7, x10*x12*x14*x4*x7*x9, x10*x12*x2*x3*x4*x9, x10*x12*x2*x3*x5*x9, x10*x12*x2*x3*x7*x9, x10*x12*x2*x4*x5*x6, x10*x12*x2*x4*x5*x9, x10*x12*x2*x4*x6*x8, x10*x12*x2*x4*x6*x9, x10*x12*x2*x4*x7*x9, x10*x12*x2*x5*x8, x10*x12*x2*x8*x9, x10*x12*x3*x4*x6*x8, x10*x12*x3*x4*x6*x9, x10*x12*x3*x4*x7*x8, x10*x12*x3*x4*x7*x9, x10*x12*x3*x5*x6, x10*x12*x3*x6*x8*x9, x10*x12*x4*x6*x7*x8, x10*x12*x4*x6*x7*x9, x10*x12*x5*x6*x7, x10*x12*x6*x7*x8*x9, x10*x13*x14*x2*x8*x9, x10*x13*x14*x3*x4*x7, x10*x13*x14*x3*x4*x9, x10*x13*x14*x3*x5, x10*x13*x14*x3*x6*x9, x10*x13*x14*x3*x8*x9, x10*x13*x14*x4*x6, x10*x13*x14*x4*x7*x9, x10*x13*x14*x5*x8, x10*x13*x14*x5*x9, x10*x13*x14*x6*x8*x9, x10*x13*x14*x7*x8*x9, x10*x13*x3*x4*x5*x9, x10*x13*x3*x5*x6, x10*x13*x3*x5*x8, x10*x14*x2*x3*x4*x7, x10*x14*x2*x3*x9, x10*x14*x2*x4*x6*x7, x10*x14*x2*x4*x7*x9, x10*x14*x2*x5*x6, x10*x14*x2*x5*x8, x10*x14*x2*x5*x9, x10*x14*x2*x7*x8*x9, x10*x14*x3*x4*x6*x9, x10*x14*x3*x4*x7*x8, x10*x14*x3*x4*x7*x9, x10*x14*x3*x5*x6, x10*x14*x3*x5*x7, x10*x14*x3*x6*x8*x9, x10*x14*x4*x6*x7*x8, x10*x14*x4*x6*x7*x9, x10*x14*x4*x7*x8*x9, x10*x14*x5*x6*x7, x10*x14*x5*x7*x8, x10*x14*x5*x7*x9, x10*x14*x6*x7*x8*x9, x10*x2*x3*x4*x5, x10*x2*x3*x5*x6, x10*x2*x3*x5*x8, x10*x2*x5*x6*x7, x10*x2*x5*x7*x8, x10*x2*x5*x7*x9, x10*x3*x4*x5*x6*x8, x10*x3*x4*x5*x7, x10*x3*x5*x6*x7, x10*x3*x5*x6*x8*x9, x10*x3*x5*x7*x8, x10*x3*x5*x7*x9, x11*x12*x13*x14*x4*x8, x11*x12*x13*x2*x3*x4, x11*x12*x13*x2*x3*x8, x11*x12*x13*x2*x4*x6, x11*x12*x13*x2*x4*x8, x11*x12*x13*x2*x5*x8, x11*x12*x13*x3*x4*x8, x11*x12*x13*x3*x7*x9, x11*x12*x13*x4*x7*x8, x11*x12*x13*x5*x7*x8, x11*x12*x13*x6*x8, x11*x12*x14*x3*x7*x9, x11*x12*x14*x6*x8*x9, x11*x12*x2*x3*x4*x7, x11*x12*x2*x3*x8*x9, x11*x12*x2*x4*x5*x6, x11*x12*x2*x6*x8*x9, x11*x12*x3*x6*x8*x9, x11*x13*x14*x2*x4*x7, x11*x13*x14*x2*x5*x8, x11*x13*x14*x2*x5*x9, x11*x13*x14*x4*x7*x8, x11*x13*x14*x4*x7*x9, x11*x13*x14*x5*x7, x11*x13*x14*x6*x8*x9, x11*x13*x2*x3*x4*x9, x11*x13*x2*x3*x8*x9, x11*x13*x2*x4*x5*x6, x11*x13*x2*x4*x6*x9, x11*x13*x2*x4*x7*x8, x11*x13*x2*x4*x8*x9, x11*x13*x2*x5*x8*x9, x11*x13*x2*x6*x8*x9, x11*x13*x3*x4*x8*x9, x11*x13*x3*x6*x7*x9, x11*x13*x3*x6*x8*x9, x11*x13*x3*x7*x8, x11*x13*x4*x5*x6*x7, x11*x13*x4*x5*x8, x11*x13*x5*x6*x7*x9, x11*x13*x5*x6*x8, x11*x13*x5*x7*x8*x9, x11*x14*x2*x3*x5, x11*x14*x2*x3*x7, x11*x14*x2*x5*x6, x11*x14*x3*x5*x7, x11*x14*x3*x6*x7*x9, x11*x14*x4*x6*x7*x9, x11*x14*x5*x6*x7, x11*x14*x5*x6*x8, x11*x14*x6*x7*x8, x11*x2*x3*x4*x5, x11*x2*x3*x5*x8, x11*x2*x3*x7*x8, x11*x2*x3*x7*x9, x11*x2*x4*x5*x6*x9, x11*x2*x4*x6*x7, x11*x2*x5*x6*x7*x9, x11*x2*x5*x6*x8, x11*x2*x6*x7*x8, x11*x3*x4*x5*x7, x11*x3*x4*x5*x8, x11*x3*x4*x7*x9, x11*x3*x5*x6*x8, x11*x3*x5*x7*x8, x11*x3*x5*x7*x9, x11*x3*x6*x7*x8, x11*x3*x7*x8*x9, x12*x13*x14*x2*x3, x12*x13*x14*x2*x4*x6, x12*x13*x14*x2*x4*x9, x12*x13*x14*x2*x5*x8, x12*x13*x14*x3*x4*x8, x12*x13*x14*x3*x5*x7, x12*x13*x14*x4*x7*x9, x12*x13*x14*x4*x8*x9, x12*x13*x2*x3*x4*x7, x12*x13*x2*x3*x4*x8, x12*x13*x2*x3*x6*x7*x9, x12*x13*x2*x4*x5*x8, x12*x13*x2*x4*x6*x7, x12*x13*x2*x4*x8*x9, x12*x13*x2*x6*x8, x12*x13*x3*x4*x5*x7, x12*x13*x3*x4*x7*x8, x12*x13*x3*x4*x7*x9, x12*x13*x4*x5*x6*x7, x12*x13*x4*x6*x7*x9, x12*x13*x4*x6*x8, x12*x13*x6*x7*x8, x12*x3*x5*x7*x9, x13*x14*x2*x3*x9, x13*x14*x2*x4*x5*x9, x13*x14*x2*x4*x7*x9, x13*x14*x2*x4*x8*x9, x13*x14*x2*x5*x6*x8, x13*x14*x2*x6*x8*x9, x13*x14*x3*x4*x8*x9, x13*x14*x3*x7*x8, x13*x14*x4*x5*x8, x13*x14*x4*x6*x7*x9, x13*x14*x4*x6*x8*x9, x13*x14*x4*x7*x8*x9, x13*x14*x5*x7*x8, x13*x14*x6*x7*x8, x13*x2*x3*x5*x8, x13*x2*x4*x5*x7*x8, x13*x2*x5*x6*x7*x8, x13*x3*x4*x5*x8, x13*x3*x5*x7*x8, x14*x4*x5*x6*x7*x9, x2*x3*x5*x7*x9, x2*x4*x5*x6*x7*x9, x3*x5*x6*x7*x9, x3*x5*x7*x8*x9 ); frobby-0.9.5/test/commonIdeals/t15.maxstandard000066400000000000000000000001351401527164200212430ustar00rootroot00000000000000R = QQ[x1, x10, x11, x12, x13, x14, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal(0_R); frobby-0.9.5/test/commonIdeals/t15.minimize000066400000000000000000000046011401527164200205600ustar00rootroot00000000000000R = QQ[x1, x10, x11, x12, x13, x14, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1*x10*x11*x12*x2*x6*x8, x1*x10*x11*x12*x3*x4*x6*x7, x1*x10*x11*x12*x3*x5*x7*x8, x1*x10*x11*x12*x8*x9, x1*x10*x11*x13*x3*x4, x1*x10*x11*x13*x5, x1*x10*x11*x14*x4*x5*x6, x1*x10*x11*x3*x4*x8, x1*x10*x12*x13*x14*x3*x7*x8*x9, x1*x10*x12*x13*x5*x7, x1*x10*x12*x14*x2*x3*x5, x1*x10*x12*x5*x7*x9, x1*x10*x13*x2*x5*x6*x7, x1*x10*x13*x2*x5*x6*x9, x1*x10*x13*x5*x7*x8, x1*x10*x13*x5*x7*x9, x1*x10*x14*x4*x7*x8, x1*x10*x14*x4*x8*x9, x1*x10*x2*x4*x6*x7, x1*x10*x2*x5*x8*x9, x1*x10*x2*x7*x8, x1*x10*x3*x6*x7*x8*x9, x1*x11*x12*x13*x14*x2*x4*x7*x9, x1*x11*x12*x13*x2*x3*x5*x6*x8, x1*x11*x12*x13*x2*x5*x8*x9, x1*x11*x12*x13*x4*x6*x7*x8*x9, x1*x11*x12*x14*x2*x3, x1*x11*x12*x14*x4*x6*x7*x8, x1*x11*x12*x4*x5*x7*x9, x1*x11*x12*x4*x5*x8*x9, x1*x11*x13*x14*x5*x8*x9, x1*x11*x13*x2*x4*x5*x6, x1*x11*x14*x2*x3*x6, x1*x11*x3*x5*x6*x9, x1*x12*x13*x14*x2*x3*x4*x7, x1*x12*x13*x14*x2*x3*x5, x1*x12*x13*x14*x2*x7*x8, x1*x12*x13*x5*x7*x9, x1*x12*x2*x3*x5*x6*x7, x1*x12*x2*x4*x5*x6*x8, x1*x12*x5*x6*x7*x9, x1*x13*x14*x4*x5*x7*x8, x1*x13*x2*x3*x4*x6*x7*x9, x1*x14*x2*x3*x5*x6*x7, x1*x3*x4*x5*x8, x10*x11*x12*x13*x14*x3*x4*x8, x10*x11*x12*x13*x2*x4*x5, x10*x11*x12*x13*x2*x5*x6*x8, x10*x11*x12*x13*x4*x5*x6*x8, x10*x11*x12*x3*x8*x9, x10*x11*x13*x7, x10*x11*x13*x9, x10*x11*x14*x3*x4*x6, x10*x11*x14*x7*x8, x10*x11*x2*x4*x5*x8, x10*x11*x2*x4*x7, x10*x12*x13*x14*x4*x5*x6*x7, x10*x12*x13*x14*x4*x6*x7*x8*x9, x10*x12*x14*x2*x3*x5*x9, x10*x12*x14*x3*x4*x6*x9, x10*x12*x2*x4*x5*x8*x9, x10*x12*x2*x6*x7*x8*x9, x10*x12*x5*x7*x8*x9, x10*x13*x14*x2*x3, x10*x13*x3*x6, x10*x14*x3*x4*x5*x7*x8, x10*x14*x3*x6*x8, x10*x2*x4*x7*x8*x9, x10*x3*x4*x5*x6, x11*x12*x14*x3*x7, x11*x12*x14*x5, x11*x13*x14*x2*x3*x5*x6, x11*x13*x14*x5*x6*x7*x9, x11*x13*x2*x3*x7, x11*x13*x2*x4*x5*x8, x11*x13*x2*x6*x7, x11*x13*x4*x5*x9, x11*x14*x2*x5*x6*x7, x11*x14*x3*x4*x7*x8, x11*x14*x4*x5*x7*x8, x11*x14*x4*x6*x8*x9, x11*x3*x6*x8*x9, x12*x13*x2*x6*x7*x8*x9, x12*x13*x3*x5*x7, x12*x13*x4*x5*x6*x7*x9, x12*x14*x2*x3*x6*x8, x12*x14*x2*x6*x7*x8*x9, x12*x14*x3*x4*x5*x8, x12*x14*x3*x5*x6*x8, x12*x14*x5*x6*x8*x9, x12*x14*x5*x7*x9, x12*x3*x4*x5*x6*x8, x12*x3*x5*x6*x7*x8, x13*x14*x2*x4*x5*x8, x13*x2*x3*x4*x5*x7*x8, x14*x3*x4*x6*x8*x9, x14*x3*x5*x6*x7*x8, x14*x3*x5*x6*x8*x9, x14*x4*x5*x6*x7*x8, x2*x3*x4*x7*x8*x9 ); frobby-0.9.5/test/commonIdeals/t15.multi000066400000000000000000002060451401527164200200770ustar00rootroot00000000000000R = QQ[x1, x10, x11, x12, x13, x14, x2, x3, x4, x5, x6, x7, x8, x9]; p = -13*x1*x10*x11*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + 22*x1*x10*x11*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8 + -7*x1*x10*x11*x12*x13*x14*x2*x3*x4*x5*x6*x7 + 17*x1*x10*x11*x12*x13*x14*x2*x3*x4*x5*x6*x8*x9 + -16*x1*x10*x11*x12*x13*x14*x2*x3*x4*x5*x6*x8 + -5*x1*x10*x11*x12*x13*x14*x2*x3*x4*x5*x6*x9 + 4*x1*x10*x11*x12*x13*x14*x2*x3*x4*x5*x6 + 14*x1*x10*x11*x12*x13*x14*x2*x3*x4*x5*x7*x8*x9 + -13*x1*x10*x11*x12*x13*x14*x2*x3*x4*x5*x7*x8 + x1*x10*x11*x12*x13*x14*x2*x3*x4*x5*x7*x9 + x1*x10*x11*x12*x13*x14*x2*x3*x4*x5*x7 + -10*x1*x10*x11*x12*x13*x14*x2*x3*x4*x5*x8*x9 + 7*x1*x10*x11*x12*x13*x14*x2*x3*x4*x5*x8 + -5*x1*x10*x11*x12*x13*x14*x2*x3*x4*x6*x7*x8 + 3*x1*x10*x11*x12*x13*x14*x2*x3*x4*x6*x7*x9 + 2*x1*x10*x11*x12*x13*x14*x2*x3*x4*x6*x7 + -3*x1*x10*x11*x12*x13*x14*x2*x3*x4*x6*x8*x9 + 3*x1*x10*x11*x12*x13*x14*x2*x3*x4*x6*x8 + -x1*x10*x11*x12*x13*x14*x2*x3*x4*x7*x8*x9 + 3*x1*x10*x11*x12*x13*x14*x2*x3*x4*x7*x8 + -x1*x10*x11*x12*x13*x14*x2*x3*x4*x7*x9 + -x1*x10*x11*x12*x13*x14*x2*x3*x4*x7 + 2*x1*x10*x11*x12*x13*x14*x2*x3*x4*x8*x9 + -2*x1*x10*x11*x12*x13*x14*x2*x3*x4*x8 + 12*x1*x10*x11*x12*x13*x14*x2*x3*x5*x6*x7*x8*x9 + -11*x1*x10*x11*x12*x13*x14*x2*x3*x5*x6*x7*x8 + -4*x1*x10*x11*x12*x13*x14*x2*x3*x5*x6*x7*x9 + -5*x1*x10*x11*x12*x13*x14*x2*x3*x5*x6*x8*x9 + 4*x1*x10*x11*x12*x13*x14*x2*x3*x5*x6*x8 + 2*x1*x10*x11*x12*x13*x14*x2*x3*x5*x6 + -4*x1*x10*x11*x12*x13*x14*x2*x3*x5*x7*x8*x9 + 5*x1*x10*x11*x12*x13*x14*x2*x3*x5*x7*x8 + 3*x1*x10*x11*x12*x13*x14*x2*x3*x5*x7 + 2*x1*x10*x11*x12*x13*x14*x2*x3*x5*x8*x9 + 2*x1*x10*x11*x12*x13*x14*x2*x3*x5*x9 + -4*x1*x10*x11*x12*x13*x14*x2*x3*x5 + -6*x1*x10*x11*x12*x13*x14*x2*x3*x6*x7*x8*x9 + 4*x1*x10*x11*x12*x13*x14*x2*x3*x6*x7*x8 + x1*x10*x11*x12*x13*x14*x2*x3*x6*x7 + 2*x1*x10*x11*x12*x13*x14*x2*x3*x6*x8*x9 + -x1*x10*x11*x12*x13*x14*x2*x3*x6*x8 + -x1*x10*x11*x12*x13*x14*x2*x3*x6 + -x1*x10*x11*x12*x13*x14*x2*x3*x7*x8 + -x1*x10*x11*x12*x13*x14*x2*x3*x7 + -x1*x10*x11*x12*x13*x14*x2*x3*x8*x9 + x1*x10*x11*x12*x13*x14*x2*x3 + 5*x1*x10*x11*x12*x13*x14*x2*x4*x5*x6*x7*x8*x9 + -5*x1*x10*x11*x12*x13*x14*x2*x4*x5*x6*x7*x8 + -x1*x10*x11*x12*x13*x14*x2*x4*x5*x6*x7*x9 + 2*x1*x10*x11*x12*x13*x14*x2*x4*x5*x6*x7 + -7*x1*x10*x11*x12*x13*x14*x2*x4*x5*x6*x8*x9 + 6*x1*x10*x11*x12*x13*x14*x2*x4*x5*x6*x8 + x1*x10*x11*x12*x13*x14*x2*x4*x5*x6*x9 + -x1*x10*x11*x12*x13*x14*x2*x4*x5*x6 + -8*x1*x10*x11*x12*x13*x14*x2*x4*x5*x7*x8*x9 + x1*x10*x11*x12*x13*x14*x2*x4*x5*x7*x8 + -x1*x10*x11*x12*x13*x14*x2*x4*x5*x7*x9 + x1*x10*x11*x12*x13*x14*x2*x4*x5*x7 + 4*x1*x10*x11*x12*x13*x14*x2*x4*x5*x8*x9 + x1*x10*x11*x12*x13*x14*x2*x4*x5*x9 + -x1*x10*x11*x12*x13*x14*x2*x4*x5 + 3*x1*x10*x11*x12*x13*x14*x2*x4*x6*x7*x8*x9 + -x1*x10*x11*x12*x13*x14*x2*x4*x6*x7*x8 + -x1*x10*x11*x12*x13*x14*x2*x4*x6*x7*x9 + -x1*x10*x11*x12*x13*x14*x2*x4*x7*x8*x9 + x1*x10*x11*x12*x13*x14*x2*x4*x7*x9 + -5*x1*x10*x11*x12*x13*x14*x2*x5*x6*x7*x8*x9 + 3*x1*x10*x11*x12*x13*x14*x2*x5*x6*x7*x8 + x1*x10*x11*x12*x13*x14*x2*x5*x6*x7*x9 + 2*x1*x10*x11*x12*x13*x14*x2*x5*x6*x8*x9 + -2*x1*x10*x11*x12*x13*x14*x2*x5*x6*x8 + 2*x1*x10*x11*x12*x13*x14*x2*x5*x7*x8*x9 + -x1*x10*x11*x12*x13*x14*x2*x5*x7*x8 + -x1*x10*x11*x12*x13*x14*x2*x5*x8*x9 + 2*x1*x10*x11*x12*x13*x14*x2*x6*x7*x8*x9 + -x1*x10*x11*x12*x13*x14*x2*x6*x7*x8 + x1*x10*x11*x12*x13*x14*x2*x7*x8*x9 + 15*x1*x10*x11*x12*x13*x14*x3*x4*x5*x6*x7*x8*x9 + -8*x1*x10*x11*x12*x13*x14*x3*x4*x5*x6*x7*x8 + -4*x1*x10*x11*x12*x13*x14*x3*x4*x5*x6*x7*x9 + 2*x1*x10*x11*x12*x13*x14*x3*x4*x5*x6*x7 + -9*x1*x10*x11*x12*x13*x14*x3*x4*x5*x6*x8*x9 + 3*x1*x10*x11*x12*x13*x14*x3*x4*x5*x6*x8 + 2*x1*x10*x11*x12*x13*x14*x3*x4*x5*x6*x9 + x1*x10*x11*x12*x13*x14*x3*x4*x5*x6 + -7*x1*x10*x11*x12*x13*x14*x3*x4*x5*x7*x8*x9 + 4*x1*x10*x11*x12*x13*x14*x3*x4*x5*x7*x8 + -x1*x10*x11*x12*x13*x14*x3*x4*x5*x7*x9 + 2*x1*x10*x11*x12*x13*x14*x3*x4*x5*x8*x9 + -2*x1*x10*x11*x12*x13*x14*x3*x4*x5*x8 + x1*x10*x11*x12*x13*x14*x3*x4*x6*x7*x8*x9 + 2*x1*x10*x11*x12*x13*x14*x3*x4*x6*x7*x8 + -x1*x10*x11*x12*x13*x14*x3*x4*x6*x7 + x1*x10*x11*x12*x13*x14*x3*x4*x6*x8*x9 + -x1*x10*x11*x12*x13*x14*x3*x4*x6*x8 + -x1*x10*x11*x12*x13*x14*x3*x4*x7*x8 + x1*x10*x11*x12*x13*x14*x3*x4*x8 + -4*x1*x10*x11*x12*x13*x14*x3*x5*x6*x7*x8*x9 + x1*x10*x11*x12*x13*x14*x3*x5*x6*x7*x8 + x1*x10*x11*x12*x13*x14*x3*x5*x6*x7*x9 + x1*x10*x11*x12*x13*x14*x3*x5*x6*x7 + 2*x1*x10*x11*x12*x13*x14*x3*x5*x6*x8*x9 + -x1*x10*x11*x12*x13*x14*x3*x5*x6 + -3*x1*x10*x11*x12*x13*x14*x3*x5*x7*x8*x9 + -x1*x10*x11*x12*x13*x14*x3*x5*x7*x8 + x1*x10*x11*x12*x13*x14*x3*x5*x7*x9 + x1*x10*x11*x12*x13*x14*x3*x5*x8*x9 + -x1*x10*x11*x12*x13*x14*x3*x6*x7*x8*x9 + 2*x1*x10*x11*x12*x13*x14*x3*x7*x8*x9 + -5*x1*x10*x11*x12*x13*x14*x4*x5*x6*x7*x8*x9 + 3*x1*x10*x11*x12*x13*x14*x4*x5*x6*x7*x8 + -x1*x10*x11*x12*x13*x14*x4*x5*x6*x7 + 3*x1*x10*x11*x12*x13*x14*x4*x5*x6*x8*x9 + -x1*x10*x11*x12*x13*x14*x4*x5*x6*x8 + -x1*x10*x11*x12*x13*x14*x4*x5*x6 + x1*x10*x11*x12*x13*x14*x4*x5*x7*x8*x9 + 2*x1*x10*x11*x12*x13*x14*x4*x5*x7*x9 + 2*x1*x10*x11*x12*x13*x14*x4*x5*x8*x9 + -2*x1*x10*x11*x12*x13*x14*x4*x6*x7*x8*x9 + x1*x10*x11*x12*x13*x14*x4*x7*x8*x9 + -x1*x10*x11*x12*x13*x14*x4*x8*x9 + x1*x10*x11*x12*x13*x14*x5*x6*x7*x8*x9 + 3*x1*x10*x11*x12*x13*x14*x5*x7*x8*x9 + -x1*x10*x11*x12*x13*x14*x5*x7 + -2*x1*x10*x11*x12*x13*x14*x5*x8*x9 + -x1*x10*x11*x12*x13*x14*x5*x9 + x1*x10*x11*x12*x13*x14*x5 + -x1*x10*x11*x12*x13*x14*x7*x8*x9 + 11*x1*x10*x11*x12*x13*x2*x3*x4*x5*x6*x7*x8*x9 + -7*x1*x10*x11*x12*x13*x2*x3*x4*x5*x6*x7*x8 + -2*x1*x10*x11*x12*x13*x2*x3*x4*x5*x6*x7*x9 + 2*x1*x10*x11*x12*x13*x2*x3*x4*x5*x6*x7 + -6*x1*x10*x11*x12*x13*x2*x3*x4*x5*x6*x8*x9 + 5*x1*x10*x11*x12*x13*x2*x3*x4*x5*x6*x8 + x1*x10*x11*x12*x13*x2*x3*x4*x5*x6*x9 + -x1*x10*x11*x12*x13*x2*x3*x4*x5*x6 + -7*x1*x10*x11*x12*x13*x2*x3*x4*x5*x7*x8*x9 + 2*x1*x10*x11*x12*x13*x2*x3*x4*x5*x7*x8 + 2*x1*x10*x11*x12*x13*x2*x3*x4*x5*x8*x9 + -4*x1*x10*x11*x12*x13*x2*x3*x4*x6*x7*x8*x9 + 2*x1*x10*x11*x12*x13*x2*x3*x4*x6*x7*x8 + -x1*x10*x11*x12*x13*x2*x3*x4*x6*x7 + x1*x10*x11*x12*x13*x2*x3*x4*x6*x8*x9 + -x1*x10*x11*x12*x13*x2*x3*x4*x6*x8 + 2*x1*x10*x11*x12*x13*x2*x3*x4*x7*x8*x9 + -6*x1*x10*x11*x12*x13*x2*x3*x5*x6*x7*x8*x9 + x1*x10*x11*x12*x13*x2*x3*x5*x6*x7*x8 + x1*x10*x11*x12*x13*x2*x3*x5*x6*x7*x9 + x1*x10*x11*x12*x13*x2*x3*x5*x6*x7 + x1*x10*x11*x12*x13*x2*x3*x5*x6*x8*x9 + -x1*x10*x11*x12*x13*x2*x3*x5*x6*x8 + x1*x10*x11*x12*x13*x2*x3*x5*x7*x8*x9 + -x1*x10*x11*x12*x13*x2*x3*x5*x7*x8 + 4*x1*x10*x11*x12*x13*x2*x3*x6*x7*x8*x9 + -x1*x10*x11*x12*x13*x2*x3*x6*x7*x8 + -x1*x10*x11*x12*x13*x2*x3*x6*x8*x9 + x1*x10*x11*x12*x13*x2*x3*x6*x8 + -5*x1*x10*x11*x12*x13*x2*x4*x5*x6*x7*x8*x9 + 3*x1*x10*x11*x12*x13*x2*x4*x5*x6*x7*x8 + 2*x1*x10*x11*x12*x13*x2*x4*x5*x6*x7*x9 + 4*x1*x10*x11*x12*x13*x2*x4*x5*x6*x8*x9 + -4*x1*x10*x11*x12*x13*x2*x4*x5*x6*x8 + 2*x1*x10*x11*x12*x13*x2*x4*x5*x7*x8*x9 + x1*x10*x11*x12*x13*x2*x4*x5*x7*x8 + -x1*x10*x11*x12*x13*x2*x4*x5*x7 + -x1*x10*x11*x12*x13*x2*x4*x5*x8 + -x1*x10*x11*x12*x13*x2*x4*x5*x9 + x1*x10*x11*x12*x13*x2*x4*x5 + 3*x1*x10*x11*x12*x13*x2*x5*x6*x7*x8*x9 + -x1*x10*x11*x12*x13*x2*x5*x6*x7*x8 + -x1*x10*x11*x12*x13*x2*x5*x6*x7 + -2*x1*x10*x11*x12*x13*x2*x5*x6*x8*x9 + 2*x1*x10*x11*x12*x13*x2*x5*x6*x8 + x1*x10*x11*x12*x13*x2*x5*x7*x8*x9 + -x1*x10*x11*x12*x13*x2*x6*x7*x8*x9 + -x1*x10*x11*x12*x13*x2*x7*x8*x9 + -8*x1*x10*x11*x12*x13*x3*x4*x5*x6*x7*x8*x9 + 3*x1*x10*x11*x12*x13*x3*x4*x5*x6*x7*x8 + 2*x1*x10*x11*x12*x13*x3*x4*x5*x6*x7*x9 + -x1*x10*x11*x12*x13*x3*x4*x5*x6*x7 + x1*x10*x11*x12*x13*x3*x4*x5*x6*x8*x9 + -x1*x10*x11*x12*x13*x3*x4*x5*x6*x8 + 3*x1*x10*x11*x12*x13*x3*x4*x5*x7*x8*x9 + -x1*x10*x11*x12*x13*x3*x4*x5*x7*x8 + x1*x10*x11*x12*x13*x3*x4*x5*x7*x9 + x1*x10*x11*x12*x13*x3*x4*x5*x8*x9 + -x1*x10*x11*x12*x13*x3*x4*x6*x7*x8*x9 + -x1*x10*x11*x12*x13*x3*x4*x6*x7*x8 + x1*x10*x11*x12*x13*x3*x4*x6*x7 + x1*x10*x11*x12*x13*x3*x4*x6*x8*x9 + -x1*x10*x11*x12*x13*x3*x4*x8*x9 + 2*x1*x10*x11*x12*x13*x3*x5*x6*x7*x8*x9 + x1*x10*x11*x12*x13*x3*x5*x7*x8*x9 + x1*x10*x11*x12*x13*x3*x5*x7*x8 + -x1*x10*x11*x12*x13*x3*x5*x7 + -x1*x10*x11*x12*x13*x3*x8*x9 + x1*x10*x11*x12*x13*x4*x5*x6*x7*x8*x9 + -x1*x10*x11*x12*x13*x4*x5*x6*x7*x8 + x1*x10*x11*x12*x13*x4*x5*x6*x7*x9 + -x1*x10*x11*x12*x13*x4*x5*x6*x8*x9 + x1*x10*x11*x12*x13*x4*x5*x6*x8 + x1*x10*x11*x12*x13*x4*x5*x7*x8*x9 + -2*x1*x10*x11*x12*x13*x4*x5*x7*x9 + -x1*x10*x11*x12*x13*x4*x5*x8*x9 + x1*x10*x11*x12*x13*x4*x6*x7*x8*x9 + -x1*x10*x11*x12*x13*x5*x7*x8*x9 + -x1*x10*x11*x12*x13*x5*x7*x8 + -x1*x10*x11*x12*x13*x5*x7*x9 + x1*x10*x11*x12*x13*x5*x7 + x1*x10*x11*x12*x13*x8*x9 + 19*x1*x10*x11*x12*x14*x2*x3*x4*x5*x6*x7*x8*x9 + -14*x1*x10*x11*x12*x14*x2*x3*x4*x5*x6*x7*x8 + 2*x1*x10*x11*x12*x14*x2*x3*x4*x5*x6*x7*x9 + 5*x1*x10*x11*x12*x14*x2*x3*x4*x5*x6*x7 + -15*x1*x10*x11*x12*x14*x2*x3*x4*x5*x6*x8*x9 + 9*x1*x10*x11*x12*x14*x2*x3*x4*x5*x6*x8 + 2*x1*x10*x11*x12*x14*x2*x3*x4*x5*x6*x9 + -2*x1*x10*x11*x12*x14*x2*x3*x4*x5*x6 + -12*x1*x10*x11*x12*x14*x2*x3*x4*x5*x7*x8*x9 + 4*x1*x10*x11*x12*x14*x2*x3*x4*x5*x7*x8 + 7*x1*x10*x11*x12*x14*x2*x3*x4*x5*x8*x9 + -3*x1*x10*x11*x12*x14*x2*x3*x4*x5*x8 + -6*x1*x10*x11*x12*x14*x2*x3*x4*x6*x7*x8*x9 + 5*x1*x10*x11*x12*x14*x2*x3*x4*x6*x7*x8 + -x1*x10*x11*x12*x14*x2*x3*x4*x6*x7*x9 + -2*x1*x10*x11*x12*x14*x2*x3*x4*x6*x7 + 2*x1*x10*x11*x12*x14*x2*x3*x4*x6*x8*x9 + -2*x1*x10*x11*x12*x14*x2*x3*x4*x6*x8 + 3*x1*x10*x11*x12*x14*x2*x3*x4*x7*x8*x9 + -x1*x10*x11*x12*x14*x2*x3*x4*x7*x8 + -x1*x10*x11*x12*x14*x2*x3*x4*x8*x9 + x1*x10*x11*x12*x14*x2*x3*x4*x8 + -10*x1*x10*x11*x12*x14*x2*x3*x5*x6*x7*x8*x9 + 5*x1*x10*x11*x12*x14*x2*x3*x5*x6*x7*x8 + x1*x10*x11*x12*x14*x2*x3*x5*x6*x7*x9 + -x1*x10*x11*x12*x14*x2*x3*x5*x6*x7 + 5*x1*x10*x11*x12*x14*x2*x3*x5*x6*x8*x9 + -2*x1*x10*x11*x12*x14*x2*x3*x5*x6*x8 + 4*x1*x10*x11*x12*x14*x2*x3*x5*x7*x8*x9 + -2*x1*x10*x11*x12*x14*x2*x3*x5*x7*x8 + -2*x1*x10*x11*x12*x14*x2*x3*x5*x8*x9 + -x1*x10*x11*x12*x14*x2*x3*x5*x9 + x1*x10*x11*x12*x14*x2*x3*x5 + 5*x1*x10*x11*x12*x14*x2*x3*x6*x7*x8*x9 + -x1*x10*x11*x12*x14*x2*x3*x6*x7*x8 + -x1*x10*x11*x12*x14*x2*x3*x6*x8*x9 + -x1*x10*x11*x12*x14*x2*x3*x7*x8*x9 + x1*x10*x11*x12*x14*x2*x3*x8*x9 + -9*x1*x10*x11*x12*x14*x2*x4*x5*x6*x7*x8*x9 + 4*x1*x10*x11*x12*x14*x2*x4*x5*x6*x7*x8 + -x1*x10*x11*x12*x14*x2*x4*x5*x6*x7 + 7*x1*x10*x11*x12*x14*x2*x4*x5*x6*x8*x9 + -3*x1*x10*x11*x12*x14*x2*x4*x5*x6*x8 + 5*x1*x10*x11*x12*x14*x2*x4*x5*x7*x8*x9 + -x1*x10*x11*x12*x14*x2*x4*x5*x7*x9 + -2*x1*x10*x11*x12*x14*x2*x4*x5*x8*x9 + x1*x10*x11*x12*x14*x2*x4*x6*x7*x8*x9 + 3*x1*x10*x11*x12*x14*x2*x5*x6*x7*x8*x9 + -x1*x10*x11*x12*x14*x2*x5*x6*x7*x8 + -2*x1*x10*x11*x12*x14*x2*x5*x6*x8*x9 + x1*x10*x11*x12*x14*x2*x5*x6*x8 + -x1*x10*x11*x12*x14*x2*x6*x7*x8*x9 + -x1*x10*x11*x12*x14*x2*x7*x8*x9 + -11*x1*x10*x11*x12*x14*x3*x4*x5*x6*x7*x8*x9 + 3*x1*x10*x11*x12*x14*x3*x4*x5*x6*x7*x8 + x1*x10*x11*x12*x14*x3*x4*x5*x6*x7*x9 + -x1*x10*x11*x12*x14*x3*x4*x5*x6*x7 + 4*x1*x10*x11*x12*x14*x3*x4*x5*x6*x8*x9 + -x1*x10*x11*x12*x14*x3*x4*x5*x6*x9 + -x1*x10*x11*x12*x14*x3*x4*x5*x6 + 4*x1*x10*x11*x12*x14*x3*x4*x5*x7*x8*x9 + 2*x1*x10*x11*x12*x14*x3*x4*x6*x7*x8*x9 + -2*x1*x10*x11*x12*x14*x3*x4*x6*x7*x8 + x1*x10*x11*x12*x14*x3*x4*x6*x7 + -x1*x10*x11*x12*x14*x3*x4*x8*x9 + 2*x1*x10*x11*x12*x14*x3*x5*x6*x7*x8*x9 + -x1*x10*x11*x12*x14*x3*x5*x6*x7*x8 + x1*x10*x11*x12*x14*x3*x5*x7*x8*x9 + x1*x10*x11*x12*x14*x3*x5*x7*x8 + -x1*x10*x11*x12*x14*x3*x5*x8*x9 + -x1*x10*x11*x12*x14*x3*x7*x8*x9 + 5*x1*x10*x11*x12*x14*x4*x5*x6*x7*x8*x9 + -2*x1*x10*x11*x12*x14*x4*x5*x6*x7*x8 + x1*x10*x11*x12*x14*x4*x5*x6*x7*x9 + -3*x1*x10*x11*x12*x14*x4*x5*x6*x8*x9 + x1*x10*x11*x12*x14*x4*x5*x6 + -x1*x10*x11*x12*x14*x4*x5*x7*x9 + -x1*x10*x11*x12*x14*x4*x5*x8*x9 + -x1*x10*x11*x12*x14*x4*x6*x7*x8*x9 + x1*x10*x11*x12*x14*x4*x6*x7*x8 + -x1*x10*x11*x12*x14*x4*x7*x8*x9 + x1*x10*x11*x12*x14*x4*x8*x9 + -2*x1*x10*x11*x12*x14*x5*x7*x8*x9 + x1*x10*x11*x12*x14*x5*x8*x9 + x1*x10*x11*x12*x14*x7*x8*x9 + -11*x1*x10*x11*x12*x2*x3*x4*x5*x6*x7*x8*x9 + 4*x1*x10*x11*x12*x2*x3*x4*x5*x6*x7*x8 + -x1*x10*x11*x12*x2*x3*x4*x5*x6*x7 + 6*x1*x10*x11*x12*x2*x3*x4*x5*x6*x8*x9 + -2*x1*x10*x11*x12*x2*x3*x4*x5*x6*x8 + 5*x1*x10*x11*x12*x2*x3*x4*x5*x7*x8*x9 + -x1*x10*x11*x12*x2*x3*x4*x5*x7*x8 + -2*x1*x10*x11*x12*x2*x3*x4*x5*x8*x9 + 4*x1*x10*x11*x12*x2*x3*x4*x6*x7*x8*x9 + -2*x1*x10*x11*x12*x2*x3*x4*x6*x7*x8 + x1*x10*x11*x12*x2*x3*x4*x6*x7 + -x1*x10*x11*x12*x2*x3*x4*x6*x8*x9 + x1*x10*x11*x12*x2*x3*x4*x6*x8 + -2*x1*x10*x11*x12*x2*x3*x4*x7*x8*x9 + 4*x1*x10*x11*x12*x2*x3*x5*x6*x7*x8*x9 + -x1*x10*x11*x12*x2*x3*x5*x6*x7*x8 + -x1*x10*x11*x12*x2*x3*x5*x6*x8*x9 + -x1*x10*x11*x12*x2*x3*x5*x7*x8*x9 + x1*x10*x11*x12*x2*x3*x5*x7*x8 + -2*x1*x10*x11*x12*x2*x3*x6*x7*x8*x9 + 4*x1*x10*x11*x12*x2*x4*x5*x6*x7*x8*x9 + -2*x1*x10*x11*x12*x2*x4*x5*x6*x7*x8 + -x1*x10*x11*x12*x2*x4*x5*x6*x7*x9 + -3*x1*x10*x11*x12*x2*x4*x5*x6*x8*x9 + 2*x1*x10*x11*x12*x2*x4*x5*x6*x8 + x1*x10*x11*x12*x2*x4*x5*x7*x9 + -x1*x10*x11*x12*x2*x4*x5*x8*x9 + -2*x1*x10*x11*x12*x2*x5*x7*x8*x9 + x1*x10*x11*x12*x2*x5*x8*x9 + -x1*x10*x11*x12*x2*x6*x7*x8*x9 + x1*x10*x11*x12*x2*x6*x7*x8 + x1*x10*x11*x12*x2*x6*x8*x9 + -x1*x10*x11*x12*x2*x6*x8 + x1*x10*x11*x12*x2*x7*x8*x9 + 5*x1*x10*x11*x12*x3*x4*x5*x6*x7*x8*x9 + -2*x1*x10*x11*x12*x3*x4*x5*x6*x7*x8 + -x1*x10*x11*x12*x3*x4*x5*x6*x7*x9 + x1*x10*x11*x12*x3*x4*x5*x6*x7 + x1*x10*x11*x12*x3*x4*x5*x6*x8*x9 + -2*x1*x10*x11*x12*x3*x4*x5*x7*x8*x9 + x1*x10*x11*x12*x3*x4*x5*x7*x8 + -x1*x10*x11*x12*x3*x4*x5*x8*x9 + x1*x10*x11*x12*x3*x4*x6*x7*x8 + -x1*x10*x11*x12*x3*x4*x6*x7 + -x1*x10*x11*x12*x3*x4*x6*x8*x9 + x1*x10*x11*x12*x3*x4*x8*x9 + -2*x1*x10*x11*x12*x3*x5*x6*x7*x8*x9 + x1*x10*x11*x12*x3*x5*x6*x7*x8 + -x1*x10*x11*x12*x3*x5*x7*x8 + x1*x10*x11*x12*x3*x8*x9 + -x1*x10*x11*x12*x4*x5*x6*x7*x9 + -x1*x10*x11*x12*x4*x5*x7*x8*x9 + x1*x10*x11*x12*x4*x5*x7*x9 + x1*x10*x11*x12*x4*x5*x8*x9 + x1*x10*x11*x12*x5*x7*x8*x9 + -x1*x10*x11*x12*x8*x9 + 18*x1*x10*x11*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + -14*x1*x10*x11*x13*x14*x2*x3*x4*x5*x6*x7*x8 + -x1*x10*x11*x13*x14*x2*x3*x4*x5*x6*x7*x9 + 3*x1*x10*x11*x13*x14*x2*x3*x4*x5*x6*x7 + -11*x1*x10*x11*x13*x14*x2*x3*x4*x5*x6*x8*x9 + 5*x1*x10*x11*x13*x14*x2*x3*x4*x5*x6*x8 + 2*x1*x10*x11*x13*x14*x2*x3*x4*x5*x6*x9 + -9*x1*x10*x11*x13*x14*x2*x3*x4*x5*x7*x8*x9 + 3*x1*x10*x11*x13*x14*x2*x3*x4*x5*x7*x8 + -x1*x10*x11*x13*x14*x2*x3*x4*x5*x7*x9 + x1*x10*x11*x13*x14*x2*x3*x4*x5*x7 + 5*x1*x10*x11*x13*x14*x2*x3*x4*x5*x8*x9 + -x1*x10*x11*x13*x14*x2*x3*x4*x5*x8 + x1*x10*x11*x13*x14*x2*x3*x4*x5*x9 + -x1*x10*x11*x13*x14*x2*x3*x4*x5 + -6*x1*x10*x11*x13*x14*x2*x3*x4*x6*x7*x8*x9 + x1*x10*x11*x13*x14*x2*x3*x4*x6*x7*x8 + -x1*x10*x11*x13*x14*x2*x3*x4*x6*x7*x9 + x1*x10*x11*x13*x14*x2*x3*x4*x6*x7 + x1*x10*x11*x13*x14*x2*x3*x4*x6*x8*x9 + x1*x10*x11*x13*x14*x2*x3*x4*x6*x8 + x1*x10*x11*x13*x14*x2*x3*x4*x6*x9 + -2*x1*x10*x11*x13*x14*x2*x3*x4*x6 + 2*x1*x10*x11*x13*x14*x2*x3*x4*x7*x8*x9 + x1*x10*x11*x13*x14*x2*x3*x4*x7*x8 + x1*x10*x11*x13*x14*x2*x3*x4*x7*x9 + -x1*x10*x11*x13*x14*x2*x3*x4*x7 + -x1*x10*x11*x13*x14*x2*x3*x4*x8*x9 + -x1*x10*x11*x13*x14*x2*x3*x4*x9 + x1*x10*x11*x13*x14*x2*x3*x4 + -6*x1*x10*x11*x13*x14*x2*x3*x5*x6*x7*x8*x9 + 2*x1*x10*x11*x13*x14*x2*x3*x5*x6*x7*x8 + 2*x1*x10*x11*x13*x14*x2*x3*x5*x6*x7*x9 + x1*x10*x11*x13*x14*x2*x3*x5*x6*x7 + 4*x1*x10*x11*x13*x14*x2*x3*x5*x6*x8*x9 + -2*x1*x10*x11*x13*x14*x2*x3*x5*x6 + x1*x10*x11*x13*x14*x2*x3*x5*x7*x8*x9 + -x1*x10*x11*x13*x14*x2*x3*x5*x7 + -x1*x10*x11*x13*x14*x2*x3*x5*x8*x9 + -x1*x10*x11*x13*x14*x2*x3*x5*x9 + x1*x10*x11*x13*x14*x2*x3*x5 + x1*x10*x11*x13*x14*x2*x3*x6*x7*x8*x9 + 2*x1*x10*x11*x13*x14*x2*x3*x6*x7*x8 + -x1*x10*x11*x13*x14*x2*x3*x6*x7 + -x1*x10*x11*x13*x14*x2*x3*x6*x8 + x1*x10*x11*x13*x14*x2*x3*x6 + -x1*x10*x11*x13*x14*x2*x3*x7*x8 + -3*x1*x10*x11*x13*x14*x2*x4*x5*x6*x7*x8*x9 + 2*x1*x10*x11*x13*x14*x2*x4*x5*x6*x7*x8 + -x1*x10*x11*x13*x14*x2*x4*x5*x6*x7 + 2*x1*x10*x11*x13*x14*x2*x4*x5*x6*x8*x9 + -x1*x10*x11*x13*x14*x2*x4*x5*x6*x8 + 3*x1*x10*x11*x13*x14*x2*x4*x5*x7*x8*x9 + x1*x10*x11*x13*x14*x2*x4*x5*x7*x8 + -2*x1*x10*x11*x13*x14*x2*x4*x5*x8*x9 + x1*x10*x11*x13*x14*x2*x4*x7*x8 + -x1*x10*x11*x13*x14*x2*x7*x8 + -5*x1*x10*x11*x13*x14*x3*x4*x5*x6*x7*x8*x9 + x1*x10*x11*x13*x14*x3*x4*x5*x6*x7*x9 + x1*x10*x11*x13*x14*x3*x4*x5*x6*x8*x9 + x1*x10*x11*x13*x14*x3*x4*x5*x6*x8 + -x1*x10*x11*x13*x14*x3*x4*x5*x6 + x1*x10*x11*x13*x14*x3*x4*x5*x7*x8*x9 + 2*x1*x10*x11*x13*x14*x3*x4*x5*x7*x8 + -x1*x10*x11*x13*x14*x3*x4*x6*x7*x8*x9 + x1*x10*x11*x13*x14*x3*x4*x6*x7*x8 + 2*x1*x10*x11*x13*x14*x3*x4*x6*x8*x9 + -x1*x10*x11*x13*x14*x3*x4*x6*x8 + x1*x10*x11*x13*x14*x3*x4*x7*x8*x9 + -x1*x10*x11*x13*x14*x3*x4*x7*x8 + -x1*x10*x11*x13*x14*x3*x4*x8*x9 + 2*x1*x10*x11*x13*x14*x3*x5*x6*x7*x8*x9 + -x1*x10*x11*x13*x14*x3*x5*x6*x7*x9 + -x1*x10*x11*x13*x14*x3*x5*x6*x8*x9 + x1*x10*x11*x13*x14*x3*x6*x7*x8*x9 + 2*x1*x10*x11*x13*x14*x4*x5*x6*x7*x8*x9 + -x1*x10*x11*x13*x14*x4*x5*x6*x8*x9 + x1*x10*x11*x13*x14*x4*x5*x6 + -2*x1*x10*x11*x13*x14*x4*x5*x7*x8 + -x1*x10*x11*x13*x14*x4*x5*x8*x9 + x1*x10*x11*x13*x14*x4*x6*x7*x8*x9 + -x1*x10*x11*x13*x14*x4*x6*x8*x9 + -x1*x10*x11*x13*x14*x4*x7*x8*x9 + x1*x10*x11*x13*x14*x4*x8*x9 + -x1*x10*x11*x13*x14*x5*x6*x7*x8*x9 + x1*x10*x11*x13*x14*x5*x8*x9 + -9*x1*x10*x11*x13*x2*x3*x4*x5*x6*x7*x8*x9 + x1*x10*x11*x13*x2*x3*x4*x5*x6*x7*x9 + 2*x1*x10*x11*x13*x2*x3*x4*x5*x6*x7 + 3*x1*x10*x11*x13*x2*x3*x4*x5*x6*x8*x9 + x1*x10*x11*x13*x2*x3*x4*x5*x7*x8*x9 + 2*x1*x10*x11*x13*x2*x3*x4*x5*x7*x8 + x1*x10*x11*x13*x2*x3*x4*x5*x8*x9 + -2*x1*x10*x11*x13*x2*x3*x4*x5*x8 + 4*x1*x10*x11*x13*x2*x3*x4*x6*x7*x8*x9 + x1*x10*x11*x13*x2*x3*x4*x6*x7*x8 + -x1*x10*x11*x13*x2*x3*x4*x6*x7*x9 + -x1*x10*x11*x13*x2*x3*x4*x6*x7 + -x1*x10*x11*x13*x2*x3*x4*x7*x8 + x1*x10*x11*x13*x2*x3*x5*x6*x7*x8*x9 + 2*x1*x10*x11*x13*x2*x3*x5*x6*x7*x8 + x1*x10*x11*x13*x2*x3*x5*x6*x7*x9 + -x1*x10*x11*x13*x2*x3*x5*x6*x7 + -x1*x10*x11*x13*x2*x3*x5*x6*x8*x9 + -x1*x10*x11*x13*x2*x3*x5*x6*x9 + -x1*x10*x11*x13*x2*x3*x6*x7*x8 + -x1*x10*x11*x13*x2*x4*x5*x6*x7*x8*x9 + 2*x1*x10*x11*x13*x2*x4*x5*x6*x7*x8 + x1*x10*x11*x13*x2*x4*x5*x6*x7*x9 + -2*x1*x10*x11*x13*x2*x4*x5*x6*x7 + x1*x10*x11*x13*x2*x4*x5*x6*x8*x9 + -x1*x10*x11*x13*x2*x4*x5*x6*x8 + -x1*x10*x11*x13*x2*x4*x5*x6*x9 + x1*x10*x11*x13*x2*x4*x5*x6 + 2*x1*x10*x11*x13*x2*x4*x5*x7*x8*x9 + -x1*x10*x11*x13*x2*x4*x5*x7*x8 + -2*x1*x10*x11*x13*x2*x4*x5*x8*x9 + x1*x10*x11*x13*x2*x4*x5*x8 + -x1*x10*x11*x13*x2*x4*x7*x8 + 2*x1*x10*x11*x13*x2*x5*x6*x7*x8*x9 + -x1*x10*x11*x13*x2*x5*x6*x7*x8 + -2*x1*x10*x11*x13*x2*x5*x6*x7*x9 + x1*x10*x11*x13*x2*x5*x6*x7 + -x1*x10*x11*x13*x2*x5*x6*x8*x9 + x1*x10*x11*x13*x2*x5*x6*x9 + -x1*x10*x11*x13*x2*x5*x7*x8*x9 + -x1*x10*x11*x13*x2*x5*x7*x8 + x1*x10*x11*x13*x2*x5*x8*x9 + x1*x10*x11*x13*x2*x7*x8 + x1*x10*x11*x13*x3*x4*x5*x6*x7*x8*x9 + x1*x10*x11*x13*x3*x4*x5*x6*x7*x8 + -x1*x10*x11*x13*x3*x4*x5*x6*x7*x9 + x1*x10*x11*x13*x3*x4*x5*x6*x7 + 4*x1*x10*x11*x13*x3*x4*x5*x6*x8*x9 + -x1*x10*x11*x13*x3*x4*x5*x6*x8 + -x1*x10*x11*x13*x3*x4*x5*x6*x9 + -x1*x10*x11*x13*x3*x4*x5*x6 + -x1*x10*x11*x13*x3*x4*x5*x7*x8 + x1*x10*x11*x13*x3*x4*x5*x7*x9 + -x1*x10*x11*x13*x3*x4*x5*x7 + -x1*x10*x11*x13*x3*x4*x5*x8*x9 + -x1*x10*x11*x13*x3*x4*x5*x9 + x1*x10*x11*x13*x3*x4*x5 + x1*x10*x11*x13*x3*x4*x6*x7*x9 + -x1*x10*x11*x13*x3*x4*x6*x7 + -x1*x10*x11*x13*x3*x4*x6*x8*x9 + -x1*x10*x11*x13*x3*x4*x6*x9 + x1*x10*x11*x13*x3*x4*x6 + -x1*x10*x11*x13*x3*x4*x7*x9 + x1*x10*x11*x13*x3*x4*x7 + x1*x10*x11*x13*x3*x4*x8 + x1*x10*x11*x13*x3*x4*x9 + -x1*x10*x11*x13*x3*x4 + x1*x10*x11*x13*x3*x5*x6*x7*x8*x9 + -x1*x10*x11*x13*x3*x5*x6*x7*x8 + -x1*x10*x11*x13*x3*x5*x6*x7 + -x1*x10*x11*x13*x3*x5*x6*x8*x9 + x1*x10*x11*x13*x3*x5*x6 + -x1*x10*x11*x13*x3*x6*x7*x8*x9 + -x1*x10*x11*x13*x5*x7*x8*x9 + x1*x10*x11*x13*x5*x7*x8 + x1*x10*x11*x13*x5*x7 + x1*x10*x11*x13*x5*x9 + -x1*x10*x11*x13*x5 + -12*x1*x10*x11*x14*x2*x3*x4*x5*x6*x7*x8*x9 + 7*x1*x10*x11*x14*x2*x3*x4*x5*x6*x7*x8 + -3*x1*x10*x11*x14*x2*x3*x4*x5*x6*x7 + 5*x1*x10*x11*x14*x2*x3*x4*x5*x6*x8*x9 + -2*x1*x10*x11*x14*x2*x3*x4*x5*x6*x8 + -x1*x10*x11*x14*x2*x3*x4*x5*x6*x9 + 2*x1*x10*x11*x14*x2*x3*x4*x5*x7*x8*x9 + x1*x10*x11*x14*x2*x3*x4*x5*x7*x8 + 4*x1*x10*x11*x14*x2*x3*x4*x6*x7*x8*x9 + -x1*x10*x11*x14*x2*x3*x4*x6*x8 + x1*x10*x11*x14*x2*x3*x4*x6 + -x1*x10*x11*x14*x2*x3*x4*x7*x8 + 2*x1*x10*x11*x14*x2*x3*x5*x6*x7*x8*x9 + -x1*x10*x11*x14*x2*x3*x5*x6*x7*x8 + -x1*x10*x11*x14*x2*x3*x5*x6*x8*x9 + -x1*x10*x11*x14*x2*x3*x6*x7*x8 + -x1*x10*x11*x14*x2*x3*x6*x8*x9 + x1*x10*x11*x14*x2*x3*x6*x8 + 3*x1*x10*x11*x14*x2*x4*x5*x6*x7*x8*x9 + -2*x1*x10*x11*x14*x2*x4*x5*x6*x7*x8 + x1*x10*x11*x14*x2*x4*x5*x6*x7 + -2*x1*x10*x11*x14*x2*x4*x5*x6*x8*x9 + x1*x10*x11*x14*x2*x4*x5*x6*x8 + -2*x1*x10*x11*x14*x2*x4*x7*x8 + x1*x10*x11*x14*x2*x7*x8 + x1*x10*x11*x14*x3*x4*x5*x6*x7*x8*x9 + 3*x1*x10*x11*x14*x3*x4*x5*x6*x7*x8 + 2*x1*x10*x11*x14*x3*x4*x5*x6*x8*x9 + -x1*x10*x11*x14*x3*x4*x5*x6*x8 + x1*x10*x11*x14*x3*x4*x5*x6 + x1*x10*x11*x14*x3*x4*x5*x7*x8*x9 + -3*x1*x10*x11*x14*x3*x4*x5*x7*x8 + -x1*x10*x11*x14*x3*x4*x5*x8*x9 + 2*x1*x10*x11*x14*x3*x4*x6*x7*x8*x9 + -2*x1*x10*x11*x14*x3*x4*x6*x7*x8 + -3*x1*x10*x11*x14*x3*x4*x6*x8*x9 + x1*x10*x11*x14*x3*x4*x6*x8 + -x1*x10*x11*x14*x3*x4*x7*x8*x9 + x1*x10*x11*x14*x3*x4*x7*x8 + x1*x10*x11*x14*x3*x4*x8*x9 + -x1*x10*x11*x14*x3*x6*x7*x8*x9 + -x1*x10*x11*x14*x4*x5*x6*x7*x8*x9 + x1*x10*x11*x14*x4*x5*x6*x8*x9 + -x1*x10*x11*x14*x4*x5*x6 + -x1*x10*x11*x14*x4*x6*x7*x8*x9 + x1*x10*x11*x14*x4*x6*x8*x9 + x1*x10*x11*x14*x4*x7*x8 + 5*x1*x10*x11*x2*x3*x4*x5*x6*x7*x8*x9 + x1*x10*x11*x2*x3*x4*x5*x6*x7*x8 + -x1*x10*x11*x2*x3*x4*x5*x6*x7 + -x1*x10*x11*x2*x3*x4*x5*x6*x8*x9 + -x1*x10*x11*x2*x3*x4*x5*x6*x8 + x1*x10*x11*x2*x3*x4*x5*x7*x8*x9 + -2*x1*x10*x11*x2*x3*x4*x5*x7*x8 + -x1*x10*x11*x2*x3*x4*x5*x8*x9 + x1*x10*x11*x2*x3*x4*x5*x8 + -2*x1*x10*x11*x2*x3*x4*x6*x7*x8*x9 + x1*x10*x11*x2*x3*x4*x7*x8 + -x1*x10*x11*x2*x3*x5*x6*x7*x8*x9 + x1*x10*x11*x2*x3*x5*x6*x8*x9 + -x1*x10*x11*x2*x4*x5*x7*x8*x9 + x1*x10*x11*x2*x4*x5*x8*x9 + -x1*x10*x11*x2*x4*x6*x7*x8 + x1*x10*x11*x2*x4*x6*x7 + -x1*x10*x11*x2*x4*x7*x8*x9 + x1*x10*x11*x2*x4*x7*x8 + -x1*x10*x11*x3*x4*x5*x6*x7*x8*x9 + -3*x1*x10*x11*x3*x4*x5*x6*x8*x9 + x1*x10*x11*x3*x4*x5*x6*x9 + x1*x10*x11*x3*x4*x5*x8 + x1*x10*x11*x3*x4*x6*x8*x9 + -x1*x10*x11*x3*x4*x8 + x1*x10*x11*x3*x6*x7*x8*x9 + 5*x1*x10*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + -9*x1*x10*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8 + 2*x1*x10*x12*x13*x14*x2*x3*x4*x5*x6*x7*x9 + 2*x1*x10*x12*x13*x14*x2*x3*x4*x5*x6*x7 + -4*x1*x10*x12*x13*x14*x2*x3*x4*x5*x6*x8*x9 + 4*x1*x10*x12*x13*x14*x2*x3*x4*x5*x6*x8 + x1*x10*x12*x13*x14*x2*x3*x4*x5*x6*x9 + -x1*x10*x12*x13*x14*x2*x3*x4*x5*x6 + -6*x1*x10*x12*x13*x14*x2*x3*x4*x5*x7*x8*x9 + 6*x1*x10*x12*x13*x14*x2*x3*x4*x5*x7*x8 + -x1*x10*x12*x13*x14*x2*x3*x4*x5*x7 + 3*x1*x10*x12*x13*x14*x2*x3*x4*x5*x8*x9 + -2*x1*x10*x12*x13*x14*x2*x3*x4*x5*x8 + 4*x1*x10*x12*x13*x14*x2*x3*x4*x6*x7*x8*x9 + -2*x1*x10*x12*x13*x14*x2*x3*x4*x6*x7*x9 + -2*x1*x10*x12*x13*x14*x2*x3*x4*x7*x8*x9 + -x1*x10*x12*x13*x14*x2*x3*x4*x7*x8 + x1*x10*x12*x13*x14*x2*x3*x4*x7 + -7*x1*x10*x12*x13*x14*x2*x3*x5*x6*x7*x8*x9 + 7*x1*x10*x12*x13*x14*x2*x3*x5*x6*x7*x8 + 2*x1*x10*x12*x13*x14*x2*x3*x5*x6*x7*x9 + -2*x1*x10*x12*x13*x14*x2*x3*x5*x6*x7 + 2*x1*x10*x12*x13*x14*x2*x3*x5*x6*x8*x9 + -2*x1*x10*x12*x13*x14*x2*x3*x5*x6*x8 + 3*x1*x10*x12*x13*x14*x2*x3*x5*x7*x8*x9 + -3*x1*x10*x12*x13*x14*x2*x3*x5*x7*x8 + -x1*x10*x12*x13*x14*x2*x3*x5*x7*x9 + -x1*x10*x12*x13*x14*x2*x3*x5*x7 + -x1*x10*x12*x13*x14*x2*x3*x5*x8*x9 + -x1*x10*x12*x13*x14*x2*x3*x5*x9 + 2*x1*x10*x12*x13*x14*x2*x3*x5 + x1*x10*x12*x13*x14*x2*x3*x6*x7*x8*x9 + -x1*x10*x12*x13*x14*x2*x3*x6*x7*x8 + x1*x10*x12*x13*x14*x2*x3*x7*x8*x9 + -x1*x10*x12*x13*x14*x2*x4*x5*x6*x7*x8*x9 + 4*x1*x10*x12*x13*x14*x2*x4*x5*x7*x8*x9 + -x1*x10*x12*x13*x14*x2*x4*x5*x7*x8 + -x1*x10*x12*x13*x14*x2*x4*x5*x8*x9 + -x1*x10*x12*x13*x14*x2*x4*x6*x7*x8*x9 + 2*x1*x10*x12*x13*x14*x2*x5*x6*x7*x8*x9 + -x1*x10*x12*x13*x14*x2*x5*x7*x8*x9 + -x1*x10*x12*x13*x14*x2*x6*x7*x8*x9 + x1*x10*x12*x13*x14*x2*x7*x8 + -4*x1*x10*x12*x13*x14*x3*x4*x5*x6*x7*x8*x9 + x1*x10*x12*x13*x14*x3*x4*x5*x6*x7*x8 + 2*x1*x10*x12*x13*x14*x3*x4*x5*x6*x7*x9 + -x1*x10*x12*x13*x14*x3*x4*x5*x6*x7 + 2*x1*x10*x12*x13*x14*x3*x4*x5*x7*x8*x9 + -2*x1*x10*x12*x13*x14*x3*x4*x6*x7*x8*x9 + x1*x10*x12*x13*x14*x3*x4*x7*x8*x9 + -x1*x10*x12*x13*x14*x3*x5*x6*x7*x8*x9 + 2*x1*x10*x12*x13*x14*x3*x5*x7*x8*x9 + x1*x10*x12*x13*x14*x3*x6*x7*x8*x9 + -x1*x10*x12*x13*x14*x3*x7*x8*x9 + 2*x1*x10*x12*x13*x14*x4*x5*x6*x7*x8*x9 + -x1*x10*x12*x13*x14*x4*x5*x6*x7*x8 + -x1*x10*x12*x13*x14*x4*x5*x6*x7*x9 + x1*x10*x12*x13*x14*x4*x5*x6*x7 + -2*x1*x10*x12*x13*x14*x4*x5*x7*x8*x9 + x1*x10*x12*x13*x14*x4*x6*x7*x8*x9 + x1*x10*x12*x13*x14*x5*x6*x7*x9 + -x1*x10*x12*x13*x14*x5*x7*x9 + -7*x1*x10*x12*x13*x2*x3*x4*x5*x6*x7*x8*x9 + 3*x1*x10*x12*x13*x2*x3*x4*x5*x6*x7*x8 + x1*x10*x12*x13*x2*x3*x4*x5*x6*x7*x9 + -x1*x10*x12*x13*x2*x3*x4*x5*x6*x7 + 2*x1*x10*x12*x13*x2*x3*x4*x5*x7*x8*x9 + x1*x10*x12*x13*x2*x3*x4*x6*x7*x8*x9 + 3*x1*x10*x12*x13*x2*x3*x5*x6*x7*x8*x9 + x1*x10*x12*x13*x2*x3*x5*x6*x7*x9 + -x1*x10*x12*x13*x2*x3*x5*x6*x7 + -x1*x10*x12*x13*x2*x3*x6*x7*x8*x9 + 2*x1*x10*x12*x13*x2*x4*x5*x6*x7*x8*x9 + -x1*x10*x12*x13*x2*x4*x5*x6*x7*x9 + -x1*x10*x12*x13*x2*x5*x6*x7*x8 + -x1*x10*x12*x13*x2*x5*x6*x7*x9 + x1*x10*x12*x13*x2*x5*x6*x7 + -x1*x10*x12*x13*x2*x5*x7*x8*x9 + 4*x1*x10*x12*x13*x3*x4*x5*x6*x7*x8*x9 + x1*x10*x12*x13*x3*x4*x5*x6*x7*x8 + -x1*x10*x12*x13*x3*x4*x5*x6*x7*x9 + -x1*x10*x12*x13*x3*x4*x5*x7*x8*x9 + -x1*x10*x12*x13*x3*x4*x5*x7*x8 + x1*x10*x12*x13*x3*x5*x6*x7*x8*x9 + -x1*x10*x12*x13*x3*x5*x6*x7*x8 + -x1*x10*x12*x13*x3*x5*x6*x7*x9 + -x1*x10*x12*x13*x3*x5*x7*x8*x9 + -x1*x10*x12*x13*x3*x5*x7*x9 + x1*x10*x12*x13*x3*x5*x7 + -x1*x10*x12*x13*x4*x5*x6*x7*x8*x9 + -x1*x10*x12*x13*x5*x6*x7*x9 + -x1*x10*x12*x13*x5*x7*x8*x9 + x1*x10*x12*x13*x5*x7*x8 + 3*x1*x10*x12*x13*x5*x7*x9 + -x1*x10*x12*x13*x5*x7 + -13*x1*x10*x12*x14*x2*x3*x4*x5*x6*x7*x8*x9 + 5*x1*x10*x12*x14*x2*x3*x4*x5*x6*x7*x8 + -2*x1*x10*x12*x14*x2*x3*x4*x5*x6*x7 + 7*x1*x10*x12*x14*x2*x3*x4*x5*x6*x8*x9 + -2*x1*x10*x12*x14*x2*x3*x4*x5*x6*x8 + -x1*x10*x12*x14*x2*x3*x4*x5*x6*x9 + x1*x10*x12*x14*x2*x3*x4*x5*x6 + 6*x1*x10*x12*x14*x2*x3*x4*x5*x7*x8*x9 + -x1*x10*x12*x14*x2*x3*x4*x5*x7*x8 + -3*x1*x10*x12*x14*x2*x3*x4*x5*x8*x9 + x1*x10*x12*x14*x2*x3*x4*x5*x8 + x1*x10*x12*x14*x2*x3*x4*x6*x7*x9 + 6*x1*x10*x12*x14*x2*x3*x5*x6*x7*x8*x9 + -3*x1*x10*x12*x14*x2*x3*x5*x6*x7*x8 + -x1*x10*x12*x14*x2*x3*x5*x6*x7*x9 + x1*x10*x12*x14*x2*x3*x5*x6*x7 + -3*x1*x10*x12*x14*x2*x3*x5*x6*x8*x9 + x1*x10*x12*x14*x2*x3*x5*x6*x8 + -2*x1*x10*x12*x14*x2*x3*x5*x7*x8*x9 + x1*x10*x12*x14*x2*x3*x5*x7*x8 + x1*x10*x12*x14*x2*x3*x5*x8*x9 + x1*x10*x12*x14*x2*x3*x5*x9 + -x1*x10*x12*x14*x2*x3*x5 + -x1*x10*x12*x14*x2*x3*x6*x7*x8*x9 + 5*x1*x10*x12*x14*x2*x4*x5*x6*x7*x8*x9 + -x1*x10*x12*x14*x2*x4*x5*x6*x7*x8 + -3*x1*x10*x12*x14*x2*x4*x5*x6*x8*x9 + -x1*x10*x12*x14*x2*x4*x5*x7*x8*x9 + -x1*x10*x12*x14*x2*x5*x6*x7*x8*x9 + x1*x10*x12*x14*x2*x5*x6*x8*x9 + 4*x1*x10*x12*x14*x3*x4*x5*x6*x7*x8*x9 + 2*x1*x10*x12*x14*x3*x4*x5*x6*x7*x8 + -x1*x10*x12*x14*x3*x4*x5*x6*x7*x9 + -2*x1*x10*x12*x14*x3*x4*x5*x7*x8*x9 + -x1*x10*x12*x14*x3*x4*x5*x7*x8 + -2*x1*x10*x12*x14*x4*x5*x6*x7*x8*x9 + x1*x10*x12*x14*x4*x5*x6*x8*x9 + x1*x10*x12*x14*x4*x5*x7*x8*x9 + -x1*x10*x12*x14*x5*x6*x7*x9 + -x1*x10*x12*x14*x5*x7*x8*x9 + x1*x10*x12*x14*x5*x7*x9 + 9*x1*x10*x12*x2*x3*x4*x5*x6*x7*x8*x9 + -3*x1*x10*x12*x2*x3*x4*x5*x6*x7*x8 + -2*x1*x10*x12*x2*x3*x4*x5*x6*x7*x9 + x1*x10*x12*x2*x3*x4*x5*x6*x7 + -2*x1*x10*x12*x2*x3*x4*x5*x6*x8*x9 + -x1*x10*x12*x2*x3*x4*x5*x7*x8*x9 + -2*x1*x10*x12*x2*x3*x5*x6*x7*x8*x9 + x1*x10*x12*x2*x3*x5*x6*x7*x8 + -2*x1*x10*x12*x2*x4*x5*x6*x7*x8*x9 + x1*x10*x12*x2*x4*x5*x6*x7*x8 + x1*x10*x12*x2*x4*x5*x6*x7*x9 + x1*x10*x12*x2*x4*x5*x6*x8*x9 + -2*x1*x10*x12*x2*x4*x5*x7*x8*x9 + x1*x10*x12*x2*x4*x5*x8*x9 + -x1*x10*x12*x2*x4*x6*x7*x8*x9 + -x1*x10*x12*x2*x5*x6*x7*x8*x9 + x1*x10*x12*x2*x5*x7*x8*x9 + x1*x10*x12*x2*x6*x7*x8*x9 + -3*x1*x10*x12*x3*x4*x5*x6*x7*x8*x9 + x1*x10*x12*x3*x4*x5*x6*x7*x9 + -x1*x10*x12*x3*x4*x5*x6*x8 + x1*x10*x12*x3*x4*x5*x7*x8*x9 + x1*x10*x12*x5*x6*x7*x9 + x1*x10*x12*x5*x7*x8*x9 + -x1*x10*x12*x5*x7*x9 + -9*x1*x10*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + 6*x1*x10*x13*x14*x2*x3*x4*x5*x6*x7*x8 + -x1*x10*x13*x14*x2*x3*x4*x5*x6*x7*x9 + -x1*x10*x13*x14*x2*x3*x4*x5*x6*x7 + 4*x1*x10*x13*x14*x2*x3*x4*x5*x6*x8*x9 + -x1*x10*x13*x14*x2*x3*x4*x5*x6*x8 + 6*x1*x10*x13*x14*x2*x3*x4*x5*x7*x8*x9 + -x1*x10*x13*x14*x2*x3*x4*x5*x7*x8 + -3*x1*x10*x13*x14*x2*x3*x4*x5*x8*x9 + 3*x1*x10*x13*x14*x2*x3*x4*x6*x7*x8*x9 + -x1*x10*x13*x14*x2*x3*x4*x6*x8*x9 + -2*x1*x10*x13*x14*x2*x3*x4*x7*x8*x9 + x1*x10*x13*x14*x2*x3*x4*x8*x9 + 3*x1*x10*x13*x14*x2*x3*x5*x6*x7*x8*x9 + -x1*x10*x13*x14*x2*x3*x5*x6*x7*x8 + -x1*x10*x13*x14*x2*x3*x5*x6*x7*x9 + x1*x10*x13*x14*x2*x3*x5*x6*x7 + -2*x1*x10*x13*x14*x2*x3*x5*x6*x8*x9 + -2*x1*x10*x13*x14*x2*x3*x5*x7*x8*x9 + x1*x10*x13*x14*x2*x3*x5*x7*x9 + x1*x10*x13*x14*x2*x3*x5*x8*x9 + x1*x10*x13*x14*x2*x3*x6*x7*x8*x9 + -2*x1*x10*x13*x14*x2*x3*x6*x7*x8 + x1*x10*x13*x14*x2*x3*x7*x8 + x1*x10*x13*x14*x2*x4*x5*x6*x7*x8*x9 + -2*x1*x10*x13*x14*x2*x4*x5*x7*x8*x9 + -x1*x10*x13*x14*x2*x4*x5*x7*x8 + x1*x10*x13*x14*x2*x4*x5*x8*x9 + x1*x10*x13*x14*x3*x4*x5*x6*x7*x8*x9 + x1*x10*x13*x14*x3*x4*x5*x6*x7*x8 + -2*x1*x10*x13*x14*x3*x4*x5*x7*x8 + -x1*x10*x13*x14*x3*x6*x7*x8*x9 + -x1*x10*x13*x14*x4*x5*x6*x7*x8 + 2*x1*x10*x13*x14*x4*x5*x7*x8 + 4*x1*x10*x13*x2*x3*x4*x5*x6*x7*x8*x9 + x1*x10*x13*x2*x3*x4*x5*x6*x7*x8 + -2*x1*x10*x13*x2*x3*x4*x5*x6*x7 + -x1*x10*x13*x2*x3*x4*x5*x6*x8*x9 + -x1*x10*x13*x2*x3*x4*x5*x7*x8 + -2*x1*x10*x13*x2*x3*x4*x6*x7*x8*x9 + -x1*x10*x13*x2*x3*x4*x6*x7*x8 + x1*x10*x13*x2*x3*x4*x6*x7*x9 + x1*x10*x13*x2*x3*x4*x6*x7 + x1*x10*x13*x2*x3*x5*x6*x7*x8*x9 + -2*x1*x10*x13*x2*x3*x5*x6*x7*x8 + -2*x1*x10*x13*x2*x3*x5*x6*x7*x9 + x1*x10*x13*x2*x3*x5*x6*x7 + x1*x10*x13*x2*x3*x5*x6*x9 + -x1*x10*x13*x2*x3*x6*x7*x8*x9 + x1*x10*x13*x2*x3*x6*x7*x8 + -x1*x10*x13*x2*x4*x5*x6*x7*x8 + x1*x10*x13*x2*x4*x5*x6*x7 + -2*x1*x10*x13*x2*x5*x6*x7*x8*x9 + x1*x10*x13*x2*x5*x6*x7*x8 + 2*x1*x10*x13*x2*x5*x6*x7*x9 + -x1*x10*x13*x2*x5*x6*x7 + x1*x10*x13*x2*x5*x6*x8*x9 + -x1*x10*x13*x2*x5*x6*x9 + x1*x10*x13*x2*x5*x7*x8 + -x1*x10*x13*x3*x4*x5*x6*x7*x8*x9 + -x1*x10*x13*x3*x4*x5*x6*x7*x8 + x1*x10*x13*x3*x4*x5*x7*x8 + -x1*x10*x13*x3*x5*x6*x7*x8*x9 + x1*x10*x13*x3*x5*x6*x7*x8 + x1*x10*x13*x3*x5*x6*x7*x9 + x1*x10*x13*x3*x6*x7*x8*x9 + x1*x10*x13*x5*x7*x8*x9 + -x1*x10*x13*x5*x7*x8 + -x1*x10*x13*x5*x7*x9 + 6*x1*x10*x14*x2*x3*x4*x5*x6*x7*x8*x9 + -x1*x10*x14*x2*x3*x4*x5*x6*x7*x8 + x1*x10*x14*x2*x3*x4*x5*x6*x7 + -x1*x10*x14*x2*x3*x4*x5*x6*x8*x9 + -x1*x10*x14*x2*x3*x4*x5*x7*x8 + -x1*x10*x14*x2*x3*x4*x5*x8*x9 + -x1*x10*x14*x2*x3*x4*x6*x7*x8*x9 + -x1*x10*x14*x2*x3*x4*x6*x7*x8 + -x1*x10*x14*x2*x3*x5*x6*x7*x8*x9 + x1*x10*x14*x2*x3*x5*x6*x8*x9 + -x1*x10*x14*x2*x3*x6*x7*x8*x9 + x1*x10*x14*x2*x3*x6*x7*x8 + -x1*x10*x14*x2*x4*x5*x6*x7*x8*x9 + -x1*x10*x14*x2*x4*x5*x7*x8*x9 + x1*x10*x14*x2*x4*x5*x8*x9 + x1*x10*x14*x2*x4*x7*x8 + x1*x10*x14*x3*x4*x5*x6*x7*x8*x9 + -4*x1*x10*x14*x3*x4*x5*x6*x7*x8 + -2*x1*x10*x14*x3*x4*x5*x6*x8*x9 + -x1*x10*x14*x3*x4*x5*x7*x8*x9 + 2*x1*x10*x14*x3*x4*x5*x7*x8 + x1*x10*x14*x3*x4*x5*x8*x9 + -x1*x10*x14*x3*x4*x6*x7*x8*x9 + x1*x10*x14*x3*x4*x6*x7*x8 + x1*x10*x14*x3*x4*x6*x8*x9 + x1*x10*x14*x3*x6*x7*x8*x9 + x1*x10*x14*x4*x5*x6*x7*x8 + x1*x10*x14*x4*x7*x8*x9 + -x1*x10*x14*x4*x7*x8 + -x1*x10*x14*x4*x8*x9 + -2*x1*x10*x2*x3*x4*x5*x6*x7*x8*x9 + -x1*x10*x2*x3*x4*x5*x6*x7*x8 + x1*x10*x2*x3*x4*x5*x6*x7 + -2*x1*x10*x2*x3*x4*x5*x7*x8*x9 + x1*x10*x2*x3*x4*x5*x7*x8 + x1*x10*x2*x3*x4*x5*x8*x9 + x1*x10*x2*x3*x6*x7*x8*x9 + x1*x10*x2*x4*x6*x7*x8 + -x1*x10*x2*x4*x6*x7 + x1*x10*x2*x4*x7*x8*x9 + x1*x10*x2*x5*x7*x8*x9 + -x1*x10*x2*x5*x8*x9 + -x1*x10*x2*x7*x8 + x1*x10*x3*x4*x5*x6*x7*x8*x9 + x1*x10*x3*x4*x5*x6*x8 + -x1*x10*x3*x6*x7*x8*x9 + 3*x1*x11*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + -5*x1*x11*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8 + -x1*x11*x12*x13*x14*x2*x3*x4*x5*x6*x7*x9 + x1*x11*x12*x13*x14*x2*x3*x4*x5*x6*x7 + -5*x1*x11*x12*x13*x14*x2*x3*x4*x5*x6*x8*x9 + 5*x1*x11*x12*x13*x14*x2*x3*x4*x5*x6*x8 + 2*x1*x11*x12*x13*x14*x2*x3*x4*x5*x6*x9 + -x1*x11*x12*x13*x14*x2*x3*x4*x5*x6 + -2*x1*x11*x12*x13*x14*x2*x3*x4*x5*x7*x8*x9 + 4*x1*x11*x12*x13*x14*x2*x3*x4*x5*x7*x8 + -x1*x11*x12*x13*x14*x2*x3*x4*x5*x7*x9 + -x1*x11*x12*x13*x14*x2*x3*x4*x5*x7 + x1*x11*x12*x13*x14*x2*x3*x4*x5*x8*x9 + -x1*x11*x12*x13*x14*x2*x3*x4*x5*x8 + 4*x1*x11*x12*x13*x14*x2*x3*x4*x6*x7*x8*x9 + -2*x1*x11*x12*x13*x14*x2*x3*x4*x6*x7*x9 + -2*x1*x11*x12*x13*x14*x2*x3*x4*x7*x8*x9 + -x1*x11*x12*x13*x14*x2*x3*x4*x7*x8 + x1*x11*x12*x13*x14*x2*x3*x4*x7*x9 + x1*x11*x12*x13*x14*x2*x3*x4*x7 + -4*x1*x11*x12*x13*x14*x2*x3*x5*x6*x7*x8*x9 + 3*x1*x11*x12*x13*x14*x2*x3*x5*x6*x7*x8 + 4*x1*x11*x12*x13*x14*x2*x3*x5*x6*x7*x9 + x1*x11*x12*x13*x14*x2*x3*x5*x6*x7 + -x1*x11*x12*x13*x14*x2*x3*x5*x6*x8*x9 + -x1*x11*x12*x13*x14*x2*x3*x5*x6 + -2*x1*x11*x12*x13*x14*x2*x3*x5*x7*x8 + -x1*x11*x12*x13*x14*x2*x3*x5*x7 + x1*x11*x12*x13*x14*x2*x3*x5 + 2*x1*x11*x12*x13*x14*x2*x3*x6*x7*x8*x9 + -2*x1*x11*x12*x13*x14*x2*x3*x6*x7*x8 + -x1*x11*x12*x13*x14*x2*x3*x6*x7 + x1*x11*x12*x13*x14*x2*x3*x7*x8 + -x1*x11*x12*x13*x14*x2*x4*x5*x6*x7*x8*x9 + x1*x11*x12*x13*x14*x2*x4*x5*x6*x7*x8 + x1*x11*x12*x13*x14*x2*x4*x5*x6*x7*x9 + -x1*x11*x12*x13*x14*x2*x4*x5*x6*x7 + 3*x1*x11*x12*x13*x14*x2*x4*x5*x6*x8*x9 + -3*x1*x11*x12*x13*x14*x2*x4*x5*x6*x8 + -x1*x11*x12*x13*x14*x2*x4*x5*x6*x9 + x1*x11*x12*x13*x14*x2*x4*x5*x6 + 2*x1*x11*x12*x13*x14*x2*x4*x5*x7*x8*x9 + -x1*x11*x12*x13*x14*x2*x4*x5*x7*x8 + x1*x11*x12*x13*x14*x2*x4*x5*x7*x9 + -x1*x11*x12*x13*x14*x2*x4*x5*x8*x9 + -3*x1*x11*x12*x13*x14*x2*x4*x6*x7*x8*x9 + x1*x11*x12*x13*x14*x2*x4*x6*x7*x8 + x1*x11*x12*x13*x14*x2*x4*x6*x7*x9 + x1*x11*x12*x13*x14*x2*x4*x7*x8*x9 + -x1*x11*x12*x13*x14*x2*x4*x7*x9 + 2*x1*x11*x12*x13*x14*x2*x5*x6*x7*x8*x9 + -x1*x11*x12*x13*x14*x2*x5*x6*x7*x8 + -x1*x11*x12*x13*x14*x2*x5*x6*x7*x9 + -2*x1*x11*x12*x13*x14*x2*x5*x7*x8*x9 + x1*x11*x12*x13*x14*x2*x5*x7*x8 + x1*x11*x12*x13*x14*x2*x5*x8*x9 + -x1*x11*x12*x13*x14*x2*x6*x7*x8*x9 + x1*x11*x12*x13*x14*x2*x6*x7*x8 + -6*x1*x11*x12*x13*x14*x3*x4*x5*x6*x7*x8*x9 + x1*x11*x12*x13*x14*x3*x4*x5*x6*x7*x9 + 3*x1*x11*x12*x13*x14*x3*x4*x5*x6*x8*x9 + -x1*x11*x12*x13*x14*x3*x4*x5*x6*x9 + 3*x1*x11*x12*x13*x14*x3*x4*x5*x7*x8*x9 + x1*x11*x12*x13*x14*x3*x4*x5*x7*x9 + -x1*x11*x12*x13*x14*x3*x4*x6*x7*x8*x9 + 2*x1*x11*x12*x13*x14*x3*x5*x6*x7*x8*x9 + -x1*x11*x12*x13*x14*x3*x5*x6*x7*x9 + -x1*x11*x12*x13*x14*x3*x5*x6*x8*x9 + x1*x11*x12*x13*x14*x4*x5*x6*x7*x8*x9 + 2*x1*x11*x12*x13*x14*x4*x5*x6*x7*x9 + -2*x1*x11*x12*x13*x14*x4*x5*x7*x9 + -2*x1*x11*x12*x13*x14*x4*x5*x8*x9 + x1*x11*x12*x13*x14*x4*x6*x7*x8*x9 + -x1*x11*x12*x13*x14*x5*x6*x7*x8*x9 + x1*x11*x12*x13*x14*x5*x8*x9 + x1*x11*x12*x13*x2*x3*x4*x5*x6*x7*x9 + -x1*x11*x12*x13*x2*x3*x4*x5*x6*x8 + x1*x11*x12*x13*x2*x3*x4*x5*x7*x8*x9 + -x1*x11*x12*x13*x2*x3*x4*x6*x7*x8*x9 + x1*x11*x12*x13*x2*x3*x5*x6*x7*x8 + -2*x1*x11*x12*x13*x2*x3*x5*x6*x7*x9 + 2*x1*x11*x12*x13*x2*x3*x5*x6*x8*x9 + -x1*x11*x12*x13*x2*x3*x5*x6*x8 + -x1*x11*x12*x13*x2*x4*x5*x6*x7*x9 + -x1*x11*x12*x13*x2*x4*x5*x6*x8*x9 + x1*x11*x12*x13*x2*x4*x5*x6*x8 + -x1*x11*x12*x13*x2*x4*x5*x7*x8*x9 + x1*x11*x12*x13*x2*x4*x5*x8*x9 + x1*x11*x12*x13*x2*x4*x6*x7*x8*x9 + -x1*x11*x12*x13*x2*x5*x6*x7*x8*x9 + x1*x11*x12*x13*x2*x5*x6*x7*x9 + x1*x11*x12*x13*x2*x5*x7*x8*x9 + -x1*x11*x12*x13*x2*x5*x8*x9 + 2*x1*x11*x12*x13*x3*x4*x5*x6*x7*x8*x9 + -x1*x11*x12*x13*x3*x4*x5*x7*x8*x9 + -x1*x11*x12*x13*x3*x4*x5*x7*x9 + -x1*x11*x12*x13*x3*x4*x5*x8*x9 + x1*x11*x12*x13*x3*x4*x6*x7*x8*x9 + x1*x11*x12*x13*x4*x5*x6*x7*x8*x9 + -2*x1*x11*x12*x13*x4*x5*x6*x7*x9 + -x1*x11*x12*x13*x4*x5*x7*x8*x9 + 2*x1*x11*x12*x13*x4*x5*x7*x9 + x1*x11*x12*x13*x4*x5*x8*x9 + -x1*x11*x12*x13*x4*x6*x7*x8*x9 + -6*x1*x11*x12*x14*x2*x3*x4*x5*x6*x7*x8*x9 + 3*x1*x11*x12*x14*x2*x3*x4*x5*x6*x7*x8 + 3*x1*x11*x12*x14*x2*x3*x4*x5*x6*x8*x9 + -2*x1*x11*x12*x14*x2*x3*x4*x5*x6*x8 + x1*x11*x12*x14*x2*x3*x4*x5*x7*x8*x9 + x1*x11*x12*x14*x2*x3*x4*x6*x7*x8*x9 + -x1*x11*x12*x14*x2*x3*x4*x6*x7*x8 + 2*x1*x11*x12*x14*x2*x3*x5*x6*x7*x8*x9 + x1*x11*x12*x14*x2*x3*x5*x6*x7*x8 + -x1*x11*x12*x14*x2*x3*x5*x6*x7*x9 + -x1*x11*x12*x14*x2*x3*x5*x6*x7 + x1*x11*x12*x14*x2*x3*x5*x6*x8*x9 + -x1*x11*x12*x14*x2*x3*x5*x6*x8 + -x1*x11*x12*x14*x2*x3*x5*x6*x9 + -x1*x11*x12*x14*x2*x3*x5*x7 + x1*x11*x12*x14*x2*x3*x5 + -x1*x11*x12*x14*x2*x3*x6*x7*x8 + -x1*x11*x12*x14*x2*x3*x6*x8*x9 + x1*x11*x12*x14*x2*x3*x6*x8 + x1*x11*x12*x14*x2*x3*x6 + x1*x11*x12*x14*x2*x3*x7 + -x1*x11*x12*x14*x2*x3 + 2*x1*x11*x12*x14*x2*x4*x5*x6*x7*x8*x9 + -x1*x11*x12*x14*x2*x4*x5*x6*x7*x8 + -2*x1*x11*x12*x14*x2*x4*x5*x6*x8*x9 + x1*x11*x12*x14*x2*x4*x5*x6*x8 + 2*x1*x11*x12*x14*x3*x4*x5*x6*x7*x8*x9 + x1*x11*x12*x14*x3*x4*x5*x6*x8*x9 + -x1*x11*x12*x14*x3*x4*x5*x7*x8 + -x1*x11*x12*x14*x3*x4*x5*x8*x9 + -x1*x11*x12*x14*x3*x4*x6*x7*x8*x9 + x1*x11*x12*x14*x3*x4*x6*x7*x8 + x1*x11*x12*x14*x3*x5*x6*x7*x8*x9 + -x1*x11*x12*x14*x3*x5*x6*x7*x9 + -x1*x11*x12*x14*x3*x5*x6*x8*x9 + x1*x11*x12*x14*x3*x5*x6*x9 + -x1*x11*x12*x14*x4*x5*x6*x7*x8*x9 + x1*x11*x12*x14*x4*x5*x6*x7*x8 + -x1*x11*x12*x14*x4*x5*x6*x7*x9 + -x1*x11*x12*x14*x4*x5*x7*x8*x9 + x1*x11*x12*x14*x4*x5*x7*x9 + x1*x11*x12*x14*x4*x5*x8*x9 + x1*x11*x12*x14*x4*x6*x7*x8*x9 + -x1*x11*x12*x14*x4*x6*x7*x8 + 2*x1*x11*x12*x2*x3*x4*x5*x6*x7*x8*x9 + -x1*x11*x12*x2*x3*x4*x5*x6*x8*x9 + -x1*x11*x12*x2*x4*x5*x6*x7*x8*x9 + x1*x11*x12*x2*x4*x5*x6*x8*x9 + -x1*x11*x12*x3*x4*x5*x6*x7*x8*x9 + -x1*x11*x12*x3*x4*x5*x6*x8*x9 + x1*x11*x12*x3*x4*x5*x8*x9 + -x1*x11*x12*x3*x5*x6*x7*x8*x9 + x1*x11*x12*x3*x5*x6*x7*x9 + x1*x11*x12*x4*x5*x6*x7*x9 + x1*x11*x12*x4*x5*x7*x8*x9 + -x1*x11*x12*x4*x5*x7*x9 + -x1*x11*x12*x4*x5*x8*x9 + -6*x1*x11*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + 3*x1*x11*x13*x14*x2*x3*x4*x5*x6*x7*x8 + 2*x1*x11*x13*x14*x2*x3*x4*x5*x6*x7*x9 + -x1*x11*x13*x14*x2*x3*x4*x5*x6*x7 + 4*x1*x11*x13*x14*x2*x3*x4*x5*x6*x8*x9 + -2*x1*x11*x13*x14*x2*x3*x4*x5*x6*x8 + -2*x1*x11*x13*x14*x2*x3*x4*x5*x6*x9 + x1*x11*x13*x14*x2*x3*x4*x5*x6 + x1*x11*x13*x14*x2*x3*x4*x5*x7*x8*x9 + x1*x11*x13*x14*x2*x3*x4*x5*x7*x8 + -x1*x11*x13*x14*x2*x3*x4*x5*x8 + x1*x11*x13*x14*x2*x3*x4*x6*x7*x8*x9 + -x1*x11*x13*x14*x2*x3*x4*x6*x7*x8 + 3*x1*x11*x13*x14*x2*x3*x5*x6*x7*x8*x9 + -2*x1*x11*x13*x14*x2*x3*x5*x6*x7*x9 + -2*x1*x11*x13*x14*x2*x3*x5*x6*x7 + -x1*x11*x13*x14*x2*x3*x5*x6*x8*x9 + x1*x11*x13*x14*x2*x3*x5*x6 + x1*x11*x13*x14*x2*x3*x5*x7*x8*x9 + -x1*x11*x13*x14*x2*x3*x6*x7*x8*x9 + x1*x11*x13*x14*x2*x3*x6*x7 + x1*x11*x13*x14*x2*x4*x5*x6*x7*x8 + -x1*x11*x13*x14*x2*x4*x5*x7*x8 + 3*x1*x11*x13*x14*x3*x4*x5*x6*x7*x8*x9 + x1*x11*x13*x14*x3*x4*x5*x6*x7*x8 + -x1*x11*x13*x14*x3*x4*x5*x6*x7*x9 + -x1*x11*x13*x14*x3*x4*x5*x6*x8*x9 + -x1*x11*x13*x14*x3*x4*x5*x7*x8*x9 + -x1*x11*x13*x14*x3*x4*x5*x7*x8 + -2*x1*x11*x13*x14*x3*x5*x6*x7*x8*x9 + x1*x11*x13*x14*x3*x5*x6*x7*x9 + x1*x11*x13*x14*x3*x5*x6*x8*x9 + -x1*x11*x13*x14*x4*x5*x6*x7*x8*x9 + -x1*x11*x13*x14*x4*x5*x6*x7*x8 + x1*x11*x13*x14*x4*x5*x7*x8 + x1*x11*x13*x14*x4*x5*x8*x9 + x1*x11*x13*x14*x5*x6*x7*x8*x9 + -x1*x11*x13*x14*x5*x8*x9 + 2*x1*x11*x13*x2*x3*x4*x5*x6*x7*x8*x9 + -x1*x11*x13*x2*x3*x4*x5*x6*x7*x9 + -x1*x11*x13*x2*x3*x4*x5*x7*x8 + -x1*x11*x13*x2*x3*x4*x5*x8*x9 + x1*x11*x13*x2*x3*x4*x5*x8 + -x1*x11*x13*x2*x3*x4*x6*x7*x8*x9 + x1*x11*x13*x2*x3*x4*x6*x7*x9 + -x1*x11*x13*x2*x3*x5*x6*x7*x8*x9 + x1*x11*x13*x2*x3*x5*x6*x7*x9 + x1*x11*x13*x2*x4*x5*x6*x7*x8*x9 + -x1*x11*x13*x2*x4*x5*x6*x7*x8 + -x1*x11*x13*x2*x4*x5*x6*x7*x9 + x1*x11*x13*x2*x4*x5*x6*x7 + -x1*x11*x13*x2*x4*x5*x6*x8*x9 + x1*x11*x13*x2*x4*x5*x6*x8 + x1*x11*x13*x2*x4*x5*x6*x9 + -x1*x11*x13*x2*x4*x5*x6 + -2*x1*x11*x13*x3*x4*x5*x6*x8*x9 + x1*x11*x13*x3*x4*x5*x6*x9 + x1*x11*x13*x3*x4*x5*x8*x9 + 4*x1*x11*x14*x2*x3*x4*x5*x6*x7*x8*x9 + -2*x1*x11*x14*x2*x3*x4*x5*x6*x7*x8 + -x1*x11*x14*x2*x3*x4*x5*x6*x8*x9 + x1*x11*x14*x2*x3*x4*x5*x6*x8 + -x1*x11*x14*x2*x3*x4*x5*x7*x8*x9 + -x1*x11*x14*x2*x3*x4*x6*x7*x8*x9 + x1*x11*x14*x2*x3*x4*x6*x7*x8 + -x1*x11*x14*x2*x3*x5*x6*x7*x8*x9 + -x1*x11*x14*x2*x3*x5*x6*x7*x8 + 2*x1*x11*x14*x2*x3*x5*x6*x7 + -x1*x11*x14*x2*x3*x5*x6*x8*x9 + x1*x11*x14*x2*x3*x5*x6*x9 + x1*x11*x14*x2*x3*x6*x8*x9 + -x1*x11*x14*x2*x3*x6 + -x1*x11*x14*x3*x4*x5*x6*x7*x8 + -x1*x11*x14*x3*x4*x5*x6*x8*x9 + x1*x11*x14*x3*x4*x5*x7*x8 + -x1*x11*x2*x3*x4*x5*x6*x7*x8*x9 + x1*x11*x3*x4*x5*x6*x8*x9 + x1*x11*x3*x5*x6*x8*x9 + -x1*x11*x3*x5*x6*x9 + -3*x1*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + 3*x1*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8 + -2*x1*x12*x13*x14*x2*x3*x4*x5*x6*x7*x9 + 2*x1*x12*x13*x14*x2*x3*x4*x5*x6*x8*x9 + -2*x1*x12*x13*x14*x2*x3*x4*x5*x6*x8 + 2*x1*x12*x13*x14*x2*x3*x4*x5*x7*x8*x9 + -2*x1*x12*x13*x14*x2*x3*x4*x5*x7*x8 + x1*x12*x13*x14*x2*x3*x4*x5*x7 + -2*x1*x12*x13*x14*x2*x3*x4*x6*x7*x8*x9 + x1*x12*x13*x14*x2*x3*x4*x6*x7*x9 + x1*x12*x13*x14*x2*x3*x4*x7*x8*x9 + x1*x12*x13*x14*x2*x3*x4*x7*x8 + -x1*x12*x13*x14*x2*x3*x4*x7 + 2*x1*x12*x13*x14*x2*x3*x5*x6*x7*x8*x9 + -2*x1*x12*x13*x14*x2*x3*x5*x6*x7*x8 + x1*x12*x13*x14*x2*x3*x5*x6*x8 + -x1*x12*x13*x14*x2*x3*x5*x7*x8*x9 + x1*x12*x13*x14*x2*x3*x5*x7*x8 + x1*x12*x13*x14*x2*x3*x5*x7 + -x1*x12*x13*x14*x2*x3*x5 + -x1*x12*x13*x14*x2*x3*x6*x7*x8*x9 + x1*x12*x13*x14*x2*x3*x6*x7*x8 + 3*x1*x12*x13*x14*x2*x4*x5*x6*x7*x8*x9 + -x1*x12*x13*x14*x2*x4*x5*x6*x7*x8 + -x1*x12*x13*x14*x2*x4*x5*x6*x8*x9 + x1*x12*x13*x14*x2*x4*x5*x6*x8 + -2*x1*x12*x13*x14*x2*x4*x5*x7*x8*x9 + x1*x12*x13*x14*x2*x4*x5*x7*x8 + -2*x1*x12*x13*x14*x2*x5*x6*x7*x8*x9 + x1*x12*x13*x14*x2*x5*x7*x8*x9 + x1*x12*x13*x14*x2*x6*x7*x8*x9 + -x1*x12*x13*x14*x2*x7*x8 + x1*x12*x13*x14*x3*x4*x5*x6*x7*x8*x9 + x1*x12*x13*x14*x3*x4*x5*x6*x7*x8 + x1*x12*x13*x14*x3*x4*x5*x6*x7*x9 + -x1*x12*x13*x14*x3*x4*x5*x7*x8*x9 + -x1*x12*x13*x14*x3*x4*x5*x7*x8 + x1*x12*x13*x14*x3*x5*x6*x7*x8*x9 + -x1*x12*x13*x14*x3*x5*x7*x9 + -x1*x12*x13*x14*x4*x5*x6*x7*x8*x9 + -x1*x12*x13*x14*x4*x5*x6*x7*x9 + x1*x12*x13*x14*x4*x5*x7*x8*x9 + -x1*x12*x13*x14*x5*x6*x7*x9 + x1*x12*x13*x14*x5*x7*x9 + x1*x12*x13*x2*x3*x4*x5*x6*x7*x8*x9 + x1*x12*x13*x2*x3*x4*x5*x6*x7*x9 + -x1*x12*x13*x2*x3*x4*x5*x7*x8 + -x1*x12*x13*x2*x3*x5*x6*x7*x8 + -x1*x12*x13*x2*x3*x5*x6*x7*x9 + x1*x12*x13*x2*x3*x5*x6*x7 + -x1*x12*x13*x2*x4*x5*x6*x7*x8*x9 + x1*x12*x13*x2*x5*x6*x7*x8*x9 + -x1*x12*x13*x3*x4*x5*x6*x7*x8 + -x1*x12*x13*x3*x4*x5*x6*x7*x9 + x1*x12*x13*x3*x4*x5*x7*x8 + -x1*x12*x13*x3*x5*x6*x7*x8*x9 + x1*x12*x13*x3*x5*x7*x9 + x1*x12*x13*x4*x5*x6*x7*x9 + x1*x12*x13*x5*x6*x7*x9 + -x1*x12*x13*x5*x7*x9 + 4*x1*x12*x14*x2*x3*x4*x5*x6*x7*x8*x9 + -x1*x12*x14*x2*x3*x4*x5*x6*x7*x8 + -x1*x12*x14*x2*x3*x4*x5*x6*x8*x9 + -x1*x12*x14*x2*x3*x4*x5*x7*x8*x9 + -x1*x12*x14*x2*x3*x5*x6*x7*x8 + x1*x12*x14*x2*x3*x5*x6*x7 + -2*x1*x12*x14*x2*x4*x5*x6*x7*x8*x9 + x1*x12*x14*x2*x4*x5*x6*x7*x8 + x1*x12*x14*x2*x4*x5*x6*x8*x9 + x1*x12*x14*x3*x4*x5*x6*x7*x8*x9 + -x1*x12*x14*x3*x4*x5*x6*x7*x8 + -x1*x12*x14*x3*x4*x5*x6*x8*x9 + -x1*x12*x14*x3*x4*x5*x6*x8 + x1*x12*x14*x3*x4*x5*x8 + -x1*x12*x14*x3*x5*x6*x7*x8*x9 + x1*x12*x14*x5*x6*x7*x9 + -2*x1*x12*x2*x3*x4*x5*x6*x7*x8*x9 + x1*x12*x2*x3*x4*x5*x6*x8 + -x1*x12*x2*x3*x5*x6*x7*x8*x9 + x1*x12*x2*x3*x5*x6*x7*x8 + x1*x12*x2*x3*x5*x6*x7*x9 + -x1*x12*x2*x3*x5*x6*x7 + x1*x12*x2*x4*x5*x6*x7*x8*x9 + -x1*x12*x2*x4*x5*x6*x8 + x1*x12*x3*x4*x5*x6*x8 + x1*x12*x3*x5*x6*x7*x8*x9 + -x1*x12*x5*x6*x7*x9 + x1*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + x1*x13*x14*x2*x3*x4*x5*x6*x7*x9 + -x1*x13*x14*x2*x3*x4*x5*x6*x8*x9 + -2*x1*x13*x14*x2*x3*x4*x5*x7*x8 + x1*x13*x14*x2*x3*x4*x5*x8 + -x1*x13*x14*x2*x4*x5*x6*x7*x8 + x1*x13*x14*x2*x4*x5*x7*x8 + -x1*x13*x14*x3*x4*x5*x6*x7*x8 + x1*x13*x14*x3*x4*x5*x7*x8 + x1*x13*x14*x4*x5*x6*x7*x8 + -x1*x13*x14*x4*x5*x7*x8 + -x1*x13*x2*x3*x4*x5*x7*x8*x9 + x1*x13*x2*x3*x4*x5*x7*x8 + x1*x13*x2*x3*x4*x6*x7*x8*x9 + -x1*x13*x2*x3*x4*x6*x7*x9 + -x1*x14*x2*x3*x4*x5*x6*x7*x8*x9 + x1*x14*x2*x3*x5*x6*x7*x8 + -x1*x14*x2*x3*x5*x6*x7 + -x1*x14*x3*x4*x5*x6*x7*x8*x9 + x1*x14*x3*x4*x5*x6*x7*x8 + x1*x14*x3*x4*x5*x6*x8*x9 + x1*x2*x3*x4*x5*x7*x8*x9 + -x1*x3*x4*x5*x8 + 25*x10*x11*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + -12*x10*x11*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8 + -4*x10*x11*x12*x13*x14*x2*x3*x4*x5*x6*x7*x9 + x10*x11*x12*x13*x14*x2*x3*x4*x5*x6*x7 + -13*x10*x11*x12*x13*x14*x2*x3*x4*x5*x6*x8*x9 + 8*x10*x11*x12*x13*x14*x2*x3*x4*x5*x6*x8 + 3*x10*x11*x12*x13*x14*x2*x3*x4*x5*x6*x9 + -x10*x11*x12*x13*x14*x2*x3*x4*x5*x6 + -10*x10*x11*x12*x13*x14*x2*x3*x4*x5*x7*x8*x9 + 3*x10*x11*x12*x13*x14*x2*x3*x4*x5*x7*x8 + x10*x11*x12*x13*x14*x2*x3*x4*x5*x7 + 5*x10*x11*x12*x13*x14*x2*x3*x4*x5*x8*x9 + -2*x10*x11*x12*x13*x14*x2*x3*x4*x5*x8 + -6*x10*x11*x12*x13*x14*x2*x3*x4*x6*x7*x8*x9 + x10*x11*x12*x13*x14*x2*x3*x4*x6*x7 + x10*x11*x12*x13*x14*x2*x3*x4*x6*x8*x9 + -x10*x11*x12*x13*x14*x2*x3*x4*x6*x8 + 2*x10*x11*x12*x13*x14*x2*x3*x4*x7*x8*x9 + x10*x11*x12*x13*x14*x2*x3*x4*x7*x8 + -x10*x11*x12*x13*x14*x2*x3*x4*x7 + -x10*x11*x12*x13*x14*x2*x3*x4*x8*x9 + x10*x11*x12*x13*x14*x2*x3*x4*x8 + -10*x10*x11*x12*x13*x14*x2*x3*x5*x6*x7*x8*x9 + x10*x11*x12*x13*x14*x2*x3*x5*x6*x7*x8 + -x10*x11*x12*x13*x14*x2*x3*x5*x6*x7*x9 + 4*x10*x11*x12*x13*x14*x2*x3*x5*x6*x7 + 3*x10*x11*x12*x13*x14*x2*x3*x5*x6*x8*x9 + -x10*x11*x12*x13*x14*x2*x3*x5*x6*x8 + x10*x11*x12*x13*x14*x2*x3*x5*x6*x9 + -2*x10*x11*x12*x13*x14*x2*x3*x5*x6 + 2*x10*x11*x12*x13*x14*x2*x3*x5*x7*x9 + -x10*x11*x12*x13*x14*x2*x3*x5*x7 + -2*x10*x11*x12*x13*x14*x2*x3*x5*x9 + x10*x11*x12*x13*x14*x2*x3*x5 + 4*x10*x11*x12*x13*x14*x2*x3*x6*x7*x8*x9 + -x10*x11*x12*x13*x14*x2*x3*x7 + -8*x10*x11*x12*x13*x14*x2*x4*x5*x6*x7*x8*x9 + x10*x11*x12*x13*x14*x2*x4*x5*x6*x7*x8 + x10*x11*x12*x13*x14*x2*x4*x5*x6*x7 + 4*x10*x11*x12*x13*x14*x2*x4*x5*x6*x8*x9 + -2*x10*x11*x12*x13*x14*x2*x4*x5*x6*x8 + 2*x10*x11*x12*x13*x14*x2*x4*x5*x7*x8*x9 + 3*x10*x11*x12*x13*x14*x2*x4*x5*x7*x8 + x10*x11*x12*x13*x14*x2*x4*x5*x7*x9 + -2*x10*x11*x12*x13*x14*x2*x4*x5*x7 + -2*x10*x11*x12*x13*x14*x2*x4*x5*x8 + -x10*x11*x12*x13*x14*x2*x4*x5*x9 + x10*x11*x12*x13*x14*x2*x4*x5 + x10*x11*x12*x13*x14*x2*x4*x6*x7*x8*x9 + 3*x10*x11*x12*x13*x14*x2*x5*x6*x7*x8*x9 + x10*x11*x12*x13*x14*x2*x5*x6*x7*x9 + -x10*x11*x12*x13*x14*x2*x5*x6*x7 + -x10*x11*x12*x13*x14*x2*x5*x6*x8*x9 + x10*x11*x12*x13*x14*x2*x5*x6*x8 + -x10*x11*x12*x13*x14*x2*x6*x7*x8*x9 + -8*x10*x11*x12*x13*x14*x3*x4*x5*x6*x7*x8*x9 + 2*x10*x11*x12*x13*x14*x3*x4*x5*x6*x7*x8 + 2*x10*x11*x12*x13*x14*x3*x4*x5*x6*x7*x9 + 2*x10*x11*x12*x13*x14*x3*x4*x5*x6*x8*x9 + -x10*x11*x12*x13*x14*x3*x4*x5*x6*x8 + x10*x11*x12*x13*x14*x3*x4*x5*x6*x9 + -x10*x11*x12*x13*x14*x3*x4*x5*x6 + x10*x11*x12*x13*x14*x3*x4*x5*x7*x8*x9 + -x10*x11*x12*x13*x14*x3*x4*x5*x7*x8 + x10*x11*x12*x13*x14*x3*x4*x5*x7*x9 + -x10*x11*x12*x13*x14*x3*x4*x5*x8*x9 + x10*x11*x12*x13*x14*x3*x4*x5*x8 + -x10*x11*x12*x13*x14*x3*x4*x6*x7 + x10*x11*x12*x13*x14*x3*x4*x6*x8 + -x10*x11*x12*x13*x14*x3*x4*x6*x9 + -x10*x11*x12*x13*x14*x3*x4*x7*x8*x9 + x10*x11*x12*x13*x14*x3*x4*x7*x8 + x10*x11*x12*x13*x14*x3*x4*x8*x9 + -x10*x11*x12*x13*x14*x3*x4*x8 + 2*x10*x11*x12*x13*x14*x3*x5*x6*x7*x8 + x10*x11*x12*x13*x14*x3*x5*x6*x7*x9 + -x10*x11*x12*x13*x14*x3*x5*x6*x7 + x10*x11*x12*x13*x14*x3*x5*x6*x8*x9 + -x10*x11*x12*x13*x14*x3*x5*x6*x8 + -x10*x11*x12*x13*x14*x3*x5*x6*x9 + x10*x11*x12*x13*x14*x3*x5*x6 + 3*x10*x11*x12*x13*x14*x3*x5*x7*x8*x9 + x10*x11*x12*x13*x14*x3*x5*x7*x8 + -2*x10*x11*x12*x13*x14*x3*x5*x7 + -x10*x11*x12*x13*x14*x3*x5*x8*x9 + x10*x11*x12*x13*x14*x3*x6*x7*x8*x9 + -x10*x11*x12*x13*x14*x3*x7*x8*x9 + -x10*x11*x12*x13*x14*x3*x7*x8 + x10*x11*x12*x13*x14*x3*x7 + 2*x10*x11*x12*x13*x14*x4*x5*x6*x7*x8*x9 + -2*x10*x11*x12*x13*x14*x4*x5*x6*x7*x8 + x10*x11*x12*x13*x14*x4*x5*x6*x7 + -x10*x11*x12*x13*x14*x4*x5*x6*x8*x9 + x10*x11*x12*x13*x14*x4*x5*x6*x8 + x10*x11*x12*x13*x14*x4*x5*x7*x8*x9 + -x10*x11*x12*x13*x14*x4*x5*x9 + x10*x11*x12*x13*x14*x4*x6*x7*x8*x9 + -x10*x11*x12*x13*x14*x5*x6*x7*x9 + -x10*x11*x12*x13*x14*x5*x7*x8*x9 + -x10*x11*x12*x13*x14*x5*x7*x8 + -x10*x11*x12*x13*x14*x5*x7*x9 + x10*x11*x12*x13*x14*x5*x7 + x10*x11*x12*x13*x14*x5*x9 + -12*x10*x11*x12*x13*x2*x3*x4*x5*x6*x7*x8*x9 + 5*x10*x11*x12*x13*x2*x3*x4*x5*x6*x7*x8 + x10*x11*x12*x13*x2*x3*x4*x5*x6*x7*x9 + -x10*x11*x12*x13*x2*x3*x4*x5*x6*x7 + 5*x10*x11*x12*x13*x2*x3*x4*x5*x6*x8*x9 + -4*x10*x11*x12*x13*x2*x3*x4*x5*x6*x8 + -x10*x11*x12*x13*x2*x3*x4*x5*x6*x9 + x10*x11*x12*x13*x2*x3*x4*x5*x6 + 3*x10*x11*x12*x13*x2*x3*x4*x5*x7*x8*x9 + x10*x11*x12*x13*x2*x3*x4*x5*x7*x9 + -x10*x11*x12*x13*x2*x3*x4*x5*x8*x9 + 4*x10*x11*x12*x13*x2*x3*x4*x6*x7*x8*x9 + -x10*x11*x12*x13*x2*x3*x4*x7*x8*x9 + 5*x10*x11*x12*x13*x2*x3*x5*x6*x7*x8*x9 + -x10*x11*x12*x13*x2*x3*x5*x6*x7*x8 + -x10*x11*x12*x13*x2*x3*x5*x6*x8*x9 + x10*x11*x12*x13*x2*x3*x5*x6*x8 + -x10*x11*x12*x13*x2*x3*x5*x7 + -2*x10*x11*x12*x13*x2*x3*x6*x7*x8*x9 + 4*x10*x11*x12*x13*x2*x4*x5*x6*x7*x8*x9 + -2*x10*x11*x12*x13*x2*x4*x5*x6*x7*x8 + -2*x10*x11*x12*x13*x2*x4*x5*x6*x8*x9 + 2*x10*x11*x12*x13*x2*x4*x5*x6*x8 + -x10*x11*x12*x13*x2*x4*x5*x7*x8 + -x10*x11*x12*x13*x2*x4*x5*x7*x9 + x10*x11*x12*x13*x2*x4*x5*x7 + -x10*x11*x12*x13*x2*x4*x5*x8*x9 + x10*x11*x12*x13*x2*x4*x5*x8 + x10*x11*x12*x13*x2*x4*x5*x9 + -x10*x11*x12*x13*x2*x4*x5 + -x10*x11*x12*x13*x2*x4*x6*x7*x8*x9 + -2*x10*x11*x12*x13*x2*x5*x6*x7*x8*x9 + x10*x11*x12*x13*x2*x5*x6*x7*x8 + x10*x11*x12*x13*x2*x5*x6*x8*x9 + -x10*x11*x12*x13*x2*x5*x6*x8 + 4*x10*x11*x12*x13*x3*x4*x5*x6*x7*x8*x9 + -x10*x11*x12*x13*x3*x4*x5*x6*x7*x8 + -x10*x11*x12*x13*x3*x4*x5*x6*x8*x9 + x10*x11*x12*x13*x3*x4*x5*x6*x8 + -x10*x11*x12*x13*x3*x4*x5*x7*x9 + -x10*x11*x12*x13*x3*x5*x6*x7 + -2*x10*x11*x12*x13*x3*x5*x7*x8*x9 + x10*x11*x12*x13*x3*x5*x7 + -x10*x11*x12*x13*x3*x6*x8*x9 + x10*x11*x12*x13*x3*x8*x9 + -2*x10*x11*x12*x13*x4*x5*x6*x7*x8*x9 + x10*x11*x12*x13*x4*x5*x6*x7*x8 + x10*x11*x12*x13*x4*x5*x6*x8*x9 + -x10*x11*x12*x13*x4*x5*x6*x8 + x10*x11*x12*x13*x5*x7*x8*x9 + -13*x10*x11*x12*x14*x2*x3*x4*x5*x6*x7*x8*x9 + x10*x11*x12*x14*x2*x3*x4*x5*x6*x7*x9 + 5*x10*x11*x12*x14*x2*x3*x4*x5*x6*x8*x9 + -x10*x11*x12*x14*x2*x3*x4*x5*x6*x8 + -x10*x11*x12*x14*x2*x3*x4*x5*x6*x9 + 6*x10*x11*x12*x14*x2*x3*x4*x5*x7*x8*x9 + x10*x11*x12*x14*x2*x3*x4*x5*x7*x8 + -x10*x11*x12*x14*x2*x3*x4*x5*x7 + -3*x10*x11*x12*x14*x2*x3*x4*x5*x8*x9 + 4*x10*x11*x12*x14*x2*x3*x4*x6*x7*x8*x9 + x10*x11*x12*x14*x2*x3*x4*x6*x7*x8 + -x10*x11*x12*x14*x2*x3*x4*x6*x7 + x10*x11*x12*x14*x2*x3*x4*x6*x8*x9 + -x10*x11*x12*x14*x2*x3*x4*x7*x8*x9 + -x10*x11*x12*x14*x2*x3*x4*x7*x8 + x10*x11*x12*x14*x2*x3*x4*x7 + 2*x10*x11*x12*x14*x2*x3*x5*x6*x7*x8*x9 + 2*x10*x11*x12*x14*x2*x3*x5*x6*x7*x8 + -x10*x11*x12*x14*x2*x3*x5*x7*x9 + x10*x11*x12*x14*x2*x3*x5*x9 + -x10*x11*x12*x14*x2*x3*x6*x7*x8*x9 + -x10*x11*x12*x14*x2*x3*x6*x7*x8 + -x10*x11*x12*x14*x2*x3*x6*x8*x9 + 5*x10*x11*x12*x14*x2*x4*x5*x6*x7*x8*x9 + 2*x10*x11*x12*x14*x2*x4*x5*x6*x7*x8 + -x10*x11*x12*x14*x2*x4*x5*x6*x7 + -2*x10*x11*x12*x14*x2*x4*x5*x6*x8*x9 + -x10*x11*x12*x14*x2*x4*x5*x7*x8*x9 + -2*x10*x11*x12*x14*x2*x4*x5*x7*x8 + x10*x11*x12*x14*x2*x4*x5*x7 + x10*x11*x12*x14*x2*x4*x5*x8 + -2*x10*x11*x12*x14*x2*x4*x6*x7*x8*x9 + -x10*x11*x12*x14*x2*x5*x6*x7*x8*x9 + -x10*x11*x12*x14*x2*x5*x6*x7*x8 + x10*x11*x12*x14*x2*x6*x7*x8*x9 + 3*x10*x11*x12*x14*x3*x4*x5*x6*x7*x8 + -x10*x11*x12*x14*x3*x4*x5*x6*x7*x9 + -x10*x11*x12*x14*x3*x4*x5*x6*x7 + 2*x10*x11*x12*x14*x3*x4*x5*x6*x8*x9 + -x10*x11*x12*x14*x3*x4*x5*x6*x8 + -x10*x11*x12*x14*x3*x4*x5*x6*x9 + x10*x11*x12*x14*x3*x4*x5*x6 + x10*x11*x12*x14*x3*x4*x6*x7*x8*x9 + -x10*x11*x12*x14*x3*x4*x6*x7*x8 + x10*x11*x12*x14*x3*x4*x6*x7 + -x10*x11*x12*x14*x3*x4*x6*x8*x9 + x10*x11*x12*x14*x3*x4*x6*x9 + -x10*x11*x12*x14*x3*x4*x7*x8 + 3*x10*x11*x12*x14*x3*x5*x6*x7*x8*x9 + -x10*x11*x12*x14*x3*x5*x6*x7*x8 + -x10*x11*x12*x14*x3*x5*x6*x8*x9 + -2*x10*x11*x12*x14*x3*x5*x7*x8*x9 + -x10*x11*x12*x14*x3*x5*x7*x8 + x10*x11*x12*x14*x3*x5*x8*x9 + -2*x10*x11*x12*x14*x3*x6*x7*x8*x9 + x10*x11*x12*x14*x3*x7*x8*x9 + x10*x11*x12*x14*x3*x7*x8 + -x10*x11*x12*x14*x4*x5*x7*x8 + x10*x11*x12*x14*x5*x7*x8 + 5*x10*x11*x12*x2*x3*x4*x5*x6*x7*x8*x9 + -2*x10*x11*x12*x2*x3*x4*x5*x6*x8*x9 + -2*x10*x11*x12*x2*x3*x4*x5*x7*x8*x9 + x10*x11*x12*x2*x3*x4*x5*x8*x9 + -2*x10*x11*x12*x2*x3*x4*x6*x7*x8*x9 + x10*x11*x12*x2*x3*x4*x7*x8*x9 + -x10*x11*x12*x2*x3*x5*x6*x7*x8*x9 + x10*x11*x12*x2*x3*x6*x7*x8*x9 + -x10*x11*x12*x2*x4*x5*x7*x8*x9 + x10*x11*x12*x2*x4*x5*x8*x9 + -x10*x11*x12*x3*x4*x5*x6*x8*x9 + -x10*x11*x12*x3*x5*x6*x7*x8*x9 + x10*x11*x12*x3*x5*x7*x8*x9 + x10*x11*x12*x3*x6*x8*x9 + -x10*x11*x12*x3*x8*x9 + -15*x10*x11*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + 5*x10*x11*x13*x14*x2*x3*x4*x5*x6*x7*x8 + x10*x11*x13*x14*x2*x3*x4*x5*x6*x7*x9 + x10*x11*x13*x14*x2*x3*x4*x5*x6*x7 + 5*x10*x11*x13*x14*x2*x3*x4*x5*x6*x8*x9 + -2*x10*x11*x13*x14*x2*x3*x4*x5*x6*x8 + -x10*x11*x13*x14*x2*x3*x4*x5*x6*x9 + 4*x10*x11*x13*x14*x2*x3*x4*x5*x7*x8*x9 + -x10*x11*x13*x14*x2*x3*x4*x5*x7*x8 + -x10*x11*x13*x14*x2*x3*x4*x5*x8*x9 + 4*x10*x11*x13*x14*x2*x3*x4*x6*x7*x8*x9 + x10*x11*x13*x14*x2*x3*x4*x6*x7*x8 + -x10*x11*x13*x14*x2*x3*x4*x6*x7 + -x10*x11*x13*x14*x2*x3*x4*x7*x8 + 3*x10*x11*x13*x14*x2*x3*x5*x6*x7*x8*x9 + -x10*x11*x13*x14*x2*x3*x5*x6*x7 + -x10*x11*x13*x14*x2*x3*x5*x6*x8*x9 + x10*x11*x13*x14*x2*x3*x5*x6 + x10*x11*x13*x14*x2*x3*x6*x7*x9 + -x10*x11*x13*x14*x2*x3*x6*x7 + -x10*x11*x13*x14*x2*x3*x6*x9 + -x10*x11*x13*x14*x2*x3*x7*x9 + x10*x11*x13*x14*x2*x3*x7 + x10*x11*x13*x14*x2*x3*x9 + 3*x10*x11*x13*x14*x2*x4*x5*x6*x7*x8*x9 + 2*x10*x11*x13*x14*x2*x4*x5*x6*x7*x8 + x10*x11*x13*x14*x2*x4*x5*x6*x7*x9 + -x10*x11*x13*x14*x2*x4*x5*x6*x7 + -x10*x11*x13*x14*x2*x4*x5*x6*x8*x9 + -x10*x11*x13*x14*x2*x4*x5*x7*x8 + -x10*x11*x13*x14*x2*x4*x6*x7*x8*x9 + -x10*x11*x13*x14*x2*x4*x7*x8 + -x10*x11*x13*x14*x2*x5*x6*x7*x8 + -x10*x11*x13*x14*x2*x5*x6*x7*x9 + x10*x11*x13*x14*x3*x4*x5*x6*x7*x8*x9 + 2*x10*x11*x13*x14*x3*x4*x5*x6*x8*x9 + x10*x11*x13*x14*x3*x4*x5*x6*x8 + -x10*x11*x13*x14*x3*x4*x5*x6 + x10*x11*x13*x14*x3*x4*x6*x7*x8*x9 + -x10*x11*x13*x14*x3*x4*x6*x8*x9 + -x10*x11*x13*x14*x3*x4*x6*x8 + x10*x11*x13*x14*x3*x4*x6 + -x10*x11*x13*x14*x3*x5*x6*x7*x8*x9 + -x10*x11*x13*x14*x3*x6*x7*x8 + -x10*x11*x13*x14*x3*x6*x8*x9 + x10*x11*x13*x14*x4*x5*x6*x7*x8*x9 + -x10*x11*x13*x14*x4*x5*x6*x7*x9 + -x10*x11*x13*x14*x4*x5*x6*x8*x9 + -x10*x11*x13*x14*x4*x5*x7*x8*x9 + -x10*x11*x13*x14*x4*x6*x7*x8*x9 + x10*x11*x13*x14*x4*x6*x8*x9 + x10*x11*x13*x14*x5*x6*x7*x9 + x10*x11*x13*x14*x7*x8 + 4*x10*x11*x13*x2*x3*x4*x5*x6*x7*x8*x9 + x10*x11*x13*x2*x3*x4*x5*x6*x7*x9 + -x10*x11*x13*x2*x3*x4*x5*x6*x7 + -x10*x11*x13*x2*x3*x4*x5*x6*x8*x9 + x10*x11*x13*x2*x3*x4*x5*x7*x8*x9 + -x10*x11*x13*x2*x3*x4*x5*x7*x8 + -x10*x11*x13*x2*x3*x4*x5*x7*x9 + -x10*x11*x13*x2*x3*x4*x6*x7*x8*x9 + -x10*x11*x13*x2*x3*x4*x7*x8*x9 + -x10*x11*x13*x2*x3*x6*x7*x8*x9 + -x10*x11*x13*x2*x3*x6*x7 + x10*x11*x13*x2*x3*x7 + x10*x11*x13*x2*x4*x5*x6*x7*x8*x9 + -x10*x11*x13*x2*x4*x5*x6*x7*x8 + -x10*x11*x13*x2*x4*x5*x6*x7*x9 + -x10*x11*x13*x2*x4*x5*x7*x8*x9 + x10*x11*x13*x2*x4*x5*x8 + x10*x11*x13*x2*x4*x7 + x10*x11*x13*x2*x6*x7 + -2*x10*x11*x13*x3*x4*x5*x6*x8*x9 + -x10*x11*x13*x3*x6*x7*x9 + x10*x11*x13*x3*x6*x7 + x10*x11*x13*x3*x6*x8*x9 + x10*x11*x13*x3*x6*x9 + x10*x11*x13*x4*x5*x9 + x10*x11*x13*x7*x9 + -x10*x11*x13*x7 + -x10*x11*x13*x9 + 5*x10*x11*x14*x2*x3*x4*x5*x6*x7*x8*x9 + x10*x11*x14*x2*x3*x4*x5*x6*x7*x8 + -x10*x11*x14*x2*x3*x4*x5*x6*x7 + -x10*x11*x14*x2*x3*x4*x5*x6*x8*x9 + -x10*x11*x14*x2*x3*x4*x5*x7*x8*x9 + -x10*x11*x14*x2*x3*x4*x6*x7*x8 + x10*x11*x14*x2*x3*x4*x6*x7 + -x10*x11*x14*x2*x3*x4*x7*x8*x9 + -x10*x11*x14*x2*x3*x5*x6*x7*x8 + -2*x10*x11*x14*x2*x4*x5*x6*x7*x8*x9 + -2*x10*x11*x14*x2*x4*x5*x6*x7*x8 + x10*x11*x14*x2*x4*x5*x6*x7 + x10*x11*x14*x2*x4*x5*x6*x8*x9 + x10*x11*x14*x2*x4*x7*x8 + x10*x11*x14*x2*x5*x6*x7*x8 + 2*x10*x11*x14*x3*x4*x5*x6*x7*x8*x9 + -2*x10*x11*x14*x3*x4*x5*x6*x7*x8 + -x10*x11*x14*x3*x4*x5*x6*x8 + x10*x11*x14*x3*x4*x5*x6 + -2*x10*x11*x14*x3*x4*x6*x7*x8*x9 + -x10*x11*x14*x3*x4*x6*x8*x9 + x10*x11*x14*x3*x4*x6*x8 + -x10*x11*x14*x3*x4*x6 + x10*x11*x14*x3*x4*x7*x8 + -x10*x11*x14*x3*x5*x6*x8*x9 + x10*x11*x14*x3*x6*x7*x8 + x10*x11*x14*x3*x6*x8*x9 + -x10*x11*x14*x4*x5*x6*x7*x8*x9 + x10*x11*x14*x4*x5*x7*x8 + x10*x11*x14*x4*x6*x7*x8*x9 + -x10*x11*x14*x7*x8 + -2*x10*x11*x2*x3*x4*x5*x6*x7*x8*x9 + -x10*x11*x2*x3*x4*x5*x6*x7*x8 + x10*x11*x2*x3*x4*x5*x6*x7 + x10*x11*x2*x3*x4*x5*x6*x8 + x10*x11*x2*x4*x5*x7*x8 + -x10*x11*x2*x4*x5*x8 + x10*x11*x2*x4*x7*x8*x9 + -x10*x11*x2*x4*x7 + x10*x11*x3*x4*x5*x6*x8*x9 + -10*x10*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + 4*x10*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8 + x10*x12*x13*x14*x2*x3*x4*x5*x6*x7*x9 + 4*x10*x12*x13*x14*x2*x3*x4*x5*x6*x8*x9 + -x10*x12*x13*x14*x2*x3*x4*x5*x6*x8 + -x10*x12*x13*x14*x2*x3*x4*x5*x6*x9 + 5*x10*x12*x13*x14*x2*x3*x4*x5*x7*x8*x9 + -2*x10*x12*x13*x14*x2*x3*x4*x5*x7*x8 + -2*x10*x12*x13*x14*x2*x3*x4*x5*x8*x9 + x10*x12*x13*x14*x2*x3*x4*x6*x7*x8*x9 + 3*x10*x12*x13*x14*x2*x3*x5*x6*x7*x8*x9 + -x10*x12*x13*x14*x2*x3*x5*x6*x7 + -x10*x12*x13*x14*x2*x3*x5*x6*x8*x9 + -x10*x12*x13*x14*x2*x3*x5*x7*x9 + x10*x12*x13*x14*x2*x3*x5*x7 + x10*x12*x13*x14*x2*x3*x5*x9 + -x10*x12*x13*x14*x2*x3*x6*x7*x8*x9 + 2*x10*x12*x13*x14*x2*x4*x5*x6*x7*x8*x9 + -x10*x12*x13*x14*x2*x4*x5*x6*x8*x9 + -2*x10*x12*x13*x14*x2*x4*x5*x7*x8*x9 + x10*x12*x13*x14*x2*x4*x5*x8*x9 + x10*x12*x13*x14*x2*x4*x6*x7*x8*x9 + -x10*x12*x13*x14*x2*x6*x7*x8*x9 + 2*x10*x12*x13*x14*x3*x4*x5*x6*x7*x8*x9 + -2*x10*x12*x13*x14*x3*x4*x5*x6*x7*x9 + x10*x12*x13*x14*x3*x4*x5*x6*x7 + x10*x12*x13*x14*x3*x4*x5*x6*x8*x9 + -x10*x12*x13*x14*x3*x4*x5*x6*x9 + x10*x12*x13*x14*x3*x4*x6*x7*x8*x9 + -x10*x12*x13*x14*x3*x4*x6*x8*x9 + x10*x12*x13*x14*x3*x4*x6*x9 + x10*x12*x13*x14*x3*x5*x6*x7*x8*x9 + -x10*x12*x13*x14*x3*x5*x6*x7*x8 + -x10*x12*x13*x14*x3*x5*x7*x8*x9 + -x10*x12*x13*x14*x4*x5*x6*x7*x8*x9 + x10*x12*x13*x14*x4*x5*x6*x7*x8 + x10*x12*x13*x14*x4*x5*x6*x7*x9 + -x10*x12*x13*x14*x4*x5*x6*x7 + -x10*x12*x13*x14*x4*x6*x7*x8*x9 + 5*x10*x12*x13*x2*x3*x4*x5*x6*x7*x8*x9 + -x10*x12*x13*x2*x3*x4*x5*x6*x7*x8 + -x10*x12*x13*x2*x3*x4*x5*x7*x8*x9 + -2*x10*x12*x13*x2*x3*x4*x6*x7*x8*x9 + -2*x10*x12*x13*x2*x3*x5*x6*x7*x8*x9 + x10*x12*x13*x2*x3*x6*x7*x8*x9 + -x10*x12*x13*x2*x4*x5*x6*x7*x8*x9 + x10*x12*x13*x2*x6*x7*x8*x9 + -x10*x12*x13*x3*x4*x5*x6*x7*x8*x9 + -x10*x12*x13*x3*x4*x5*x6*x7*x8 + -x10*x12*x13*x3*x5*x6*x7*x8*x9 + x10*x12*x13*x3*x5*x6*x7 + x10*x12*x13*x3*x5*x7*x8*x9 + x10*x12*x13*x4*x5*x6*x7*x8*x9 + 9*x10*x12*x14*x2*x3*x4*x5*x6*x7*x8*x9 + -x10*x12*x14*x2*x3*x4*x5*x6*x7*x9 + -3*x10*x12*x14*x2*x3*x4*x5*x6*x8*x9 + x10*x12*x14*x2*x3*x4*x5*x6*x9 + -4*x10*x12*x14*x2*x3*x4*x5*x7*x8*x9 + 2*x10*x12*x14*x2*x3*x4*x5*x8*x9 + -x10*x12*x14*x2*x3*x4*x6*x7*x8*x9 + -x10*x12*x14*x2*x3*x4*x6*x8*x9 + -x10*x12*x14*x2*x3*x5*x6*x7*x8*x9 + x10*x12*x14*x2*x3*x5*x6*x8*x9 + -x10*x12*x14*x2*x3*x5*x6*x8 + x10*x12*x14*x2*x3*x5*x7*x9 + -x10*x12*x14*x2*x3*x5*x9 + x10*x12*x14*x2*x3*x6*x8 + -2*x10*x12*x14*x2*x4*x5*x6*x7*x8*x9 + x10*x12*x14*x2*x4*x5*x6*x8*x9 + -x10*x12*x14*x2*x5*x6*x7*x8*x9 + x10*x12*x14*x2*x6*x7*x8*x9 + -x10*x12*x14*x3*x4*x5*x6*x7*x8*x9 + -x10*x12*x14*x3*x4*x5*x6*x7*x8 + x10*x12*x14*x3*x4*x5*x6*x7*x9 + -x10*x12*x14*x3*x4*x5*x6*x8*x9 + -x10*x12*x14*x3*x4*x5*x6*x8 + x10*x12*x14*x3*x4*x5*x6*x9 + x10*x12*x14*x3*x4*x5*x7*x8 + x10*x12*x14*x3*x4*x6*x8*x9 + -x10*x12*x14*x3*x4*x6*x9 + -x10*x12*x14*x3*x5*x6*x7*x8 + -x10*x12*x14*x3*x5*x6*x8*x9 + x10*x12*x14*x3*x5*x6*x8 + x10*x12*x14*x5*x7*x8*x9 + -3*x10*x12*x2*x3*x4*x5*x6*x7*x8*x9 + x10*x12*x2*x3*x4*x5*x6*x8*x9 + -x10*x12*x2*x4*x5*x6*x7*x8*x9 + 2*x10*x12*x2*x4*x5*x7*x8*x9 + -x10*x12*x2*x4*x5*x8*x9 + x10*x12*x2*x4*x6*x7*x8*x9 + x10*x12*x2*x5*x6*x7*x8*x9 + -x10*x12*x2*x6*x7*x8*x9 + x10*x12*x3*x4*x5*x6*x8 + x10*x12*x3*x5*x6*x7*x8*x9 + -x10*x12*x5*x7*x8*x9 + 6*x10*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + -3*x10*x13*x14*x2*x3*x4*x5*x6*x7*x8 + -x10*x13*x14*x2*x3*x4*x5*x6*x8*x9 + -3*x10*x13*x14*x2*x3*x4*x5*x7*x8*x9 + x10*x13*x14*x2*x3*x4*x5*x7*x8 + x10*x13*x14*x2*x3*x4*x5*x8 + -2*x10*x13*x14*x2*x3*x4*x6*x7*x8*x9 + x10*x13*x14*x2*x3*x4*x7*x8*x9 + x10*x13*x14*x2*x3*x6 + -x10*x13*x14*x2*x3 + -x10*x13*x14*x2*x4*x5*x6*x7*x8*x9 + x10*x13*x14*x2*x4*x5*x7*x8*x9 + -x10*x13*x14*x3*x4*x5*x6*x8 + x10*x13*x14*x3*x6*x8 + -2*x10*x13*x2*x3*x4*x5*x6*x7*x8*x9 + x10*x13*x2*x3*x4*x5*x6*x7*x8 + x10*x13*x2*x3*x4*x6*x7*x8*x9 + x10*x13*x3*x4*x5*x6 + -x10*x13*x3*x6 + -3*x10*x14*x2*x3*x4*x5*x6*x7*x8*x9 + x10*x14*x2*x3*x4*x5*x7*x8*x9 + x10*x14*x2*x4*x5*x6*x7*x8*x9 + x10*x14*x3*x4*x5*x6*x7*x8 + -x10*x14*x3*x4*x5*x6*x8*x9 + x10*x14*x3*x4*x5*x6*x8 + -x10*x14*x3*x4*x5*x7*x8 + x10*x14*x3*x4*x6*x8*x9 + -x10*x14*x3*x5*x6*x7*x8*x9 + x10*x14*x3*x5*x6*x7*x8 + x10*x14*x3*x5*x6*x8*x9 + -x10*x14*x3*x6*x8 + x10*x2*x3*x4*x5*x6*x7*x8*x9 + x10*x2*x3*x4*x7*x8*x9 + -x10*x2*x4*x7*x8*x9 + -x10*x3*x4*x5*x6 + -15*x11*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + 4*x11*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8 + 2*x11*x12*x13*x14*x2*x3*x4*x5*x6*x7*x9 + 5*x11*x12*x13*x14*x2*x3*x4*x5*x6*x8*x9 + -2*x11*x12*x13*x14*x2*x3*x4*x5*x6*x8 + -x11*x12*x13*x14*x2*x3*x4*x5*x6*x9 + 3*x11*x12*x13*x14*x2*x3*x4*x5*x7*x8*x9 + x11*x12*x13*x14*x2*x3*x4*x5*x7*x8 + -x11*x12*x13*x14*x2*x3*x4*x5*x8 + 3*x11*x12*x13*x14*x2*x3*x4*x6*x7*x8*x9 + -x11*x12*x13*x14*x2*x3*x4*x7*x8 + 6*x11*x12*x13*x14*x2*x3*x5*x6*x7*x8*x9 + -2*x11*x12*x13*x14*x2*x3*x5*x6*x7 + -x11*x12*x13*x14*x2*x3*x5*x6*x8*x9 + x11*x12*x13*x14*x2*x3*x5*x6 + -x11*x12*x13*x14*x2*x3*x5*x7 + -2*x11*x12*x13*x14*x2*x3*x6*x7*x8*x9 + x11*x12*x13*x14*x2*x3*x7 + 5*x11*x12*x13*x14*x2*x4*x5*x6*x7*x8*x9 + -x11*x12*x13*x14*x2*x4*x5*x6*x8*x9 + -x11*x12*x13*x14*x2*x4*x5*x7*x8 + -x11*x12*x13*x14*x2*x4*x5*x8*x9 + x11*x12*x13*x14*x2*x4*x5*x8 + -x11*x12*x13*x14*x2*x4*x6*x7*x8*x9 + -x11*x12*x13*x14*x2*x5*x6*x7*x8*x9 + -x11*x12*x13*x14*x2*x5*x6*x7*x9 + x11*x12*x13*x14*x3*x4*x5*x6*x7*x8*x9 + x11*x12*x13*x14*x3*x4*x5*x6*x7*x8 + x11*x12*x13*x14*x3*x4*x5*x6*x7*x9 + x11*x12*x13*x14*x3*x4*x5*x7*x8*x9 + -x11*x12*x13*x14*x3*x4*x5*x7*x8 + -x11*x12*x13*x14*x3*x4*x5*x7*x9 + -x11*x12*x13*x14*x3*x5*x6*x7*x8 + -x11*x12*x13*x14*x3*x5*x7*x9 + x11*x12*x13*x14*x3*x5*x7 + x11*x12*x13*x14*x4*x5*x6*x7*x8*x9 + -2*x11*x12*x13*x14*x4*x5*x6*x7*x9 + -x11*x12*x13*x14*x4*x5*x6*x8*x9 + -x11*x12*x13*x14*x4*x5*x7*x8*x9 + x11*x12*x13*x14*x4*x5*x9 + x11*x12*x13*x14*x5*x6*x7*x9 + 5*x11*x12*x13*x2*x3*x4*x5*x6*x7*x8*x9 + -x11*x12*x13*x2*x3*x4*x5*x6*x7*x8 + -x11*x12*x13*x2*x3*x4*x5*x6*x8*x9 + x11*x12*x13*x2*x3*x4*x5*x6*x8 + -x11*x12*x13*x2*x3*x4*x5*x7*x8 + -x11*x12*x13*x2*x3*x4*x5*x7*x9 + -x11*x12*x13*x2*x3*x4*x6*x7*x8*x9 + -2*x11*x12*x13*x2*x3*x5*x6*x7*x8*x9 + x11*x12*x13*x2*x3*x5*x7 + -x11*x12*x13*x2*x4*x5*x6*x7*x8*x9 + x11*x12*x13*x2*x6*x7*x8*x9 + -x11*x12*x13*x3*x4*x5*x6*x7*x8*x9 + -x11*x12*x13*x3*x4*x5*x6*x7*x9 + x11*x12*x13*x3*x4*x5*x7*x9 + x11*x12*x13*x4*x5*x6*x7*x9 + 3*x11*x12*x14*x2*x3*x4*x5*x6*x7*x8*x9 + x11*x12*x14*x2*x3*x4*x5*x6*x7*x8 + x11*x12*x14*x2*x3*x4*x5*x6*x8*x9 + -x11*x12*x14*x2*x3*x4*x5*x7*x8*x9 + -x11*x12*x14*x2*x3*x4*x6*x7*x8*x9 + -x11*x12*x14*x2*x3*x4*x6*x8*x9 + x11*x12*x14*x2*x3*x5*x6*x7*x8*x9 + -2*x11*x12*x14*x2*x3*x5*x6*x7*x8 + -x11*x12*x14*x2*x3*x5*x6*x8*x9 + -x11*x12*x14*x2*x3*x6*x7*x8*x9 + x11*x12*x14*x2*x3*x6*x7*x8 + x11*x12*x14*x2*x3*x6*x8*x9 + -x11*x12*x14*x2*x4*x5*x6*x7*x8*x9 + -x11*x12*x14*x2*x4*x5*x6*x7*x8 + x11*x12*x14*x2*x4*x6*x7*x8*x9 + x11*x12*x14*x2*x5*x6*x7 + 5*x11*x12*x14*x3*x4*x5*x6*x7*x8*x9 + -x11*x12*x14*x3*x4*x5*x6*x7*x8 + -2*x11*x12*x14*x3*x4*x5*x6*x8*x9 + -x11*x12*x14*x3*x4*x5*x6*x8 + -x11*x12*x14*x3*x4*x5*x7*x8*x9 + -x11*x12*x14*x3*x4*x5*x7*x8 + x11*x12*x14*x3*x4*x5*x8 + -x11*x12*x14*x3*x4*x6*x7*x8*x9 + x11*x12*x14*x3*x4*x7*x8 + -2*x11*x12*x14*x3*x5*x6*x7*x8*x9 + -x11*x12*x14*x3*x5*x6*x8*x9 + x11*x12*x14*x3*x5*x6*x8 + x11*x12*x14*x3*x5*x7 + x11*x12*x14*x3*x6*x7*x8*x9 + -x11*x12*x14*x3*x7 + -2*x11*x12*x14*x4*x5*x6*x7*x8*x9 + x11*x12*x14*x4*x5*x6*x8*x9 + x11*x12*x14*x4*x5*x7*x8 + -x11*x12*x14*x5*x6*x7*x8*x9 + x11*x12*x14*x5*x6*x8*x9 + x11*x12*x14*x5*x7*x9 + -x11*x12*x14*x5 + -x11*x12*x2*x3*x4*x5*x6*x7*x8*x9 + -x11*x12*x3*x4*x5*x6*x7*x8*x9 + x11*x12*x3*x4*x5*x6*x8*x9 + x11*x12*x3*x5*x6*x7*x8*x9 + 8*x11*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + -x11*x13*x14*x2*x3*x4*x5*x6*x7*x8 + -x11*x13*x14*x2*x3*x4*x5*x6*x7*x9 + -3*x11*x13*x14*x2*x3*x4*x5*x6*x8*x9 + x11*x13*x14*x2*x3*x4*x5*x6*x8 + x11*x13*x14*x2*x3*x4*x5*x6*x9 + -2*x11*x13*x14*x2*x3*x4*x5*x7*x8 + -x11*x13*x14*x2*x3*x4*x6*x7*x8*x9 + -x11*x13*x14*x2*x3*x4*x7*x8*x9 + x11*x13*x14*x2*x3*x4*x7*x8 + -3*x11*x13*x14*x2*x3*x5*x6*x7*x8*x9 + x11*x13*x14*x2*x3*x5*x6*x7 + x11*x13*x14*x2*x3*x5*x6*x8*x9 + -x11*x13*x14*x2*x3*x5*x6 + -x11*x13*x14*x2*x4*x5*x6*x7*x8*x9 + -2*x11*x13*x14*x2*x4*x5*x6*x7*x8 + -x11*x13*x14*x2*x4*x5*x6*x7*x9 + -x11*x13*x14*x2*x4*x5*x7*x8*x9 + x11*x13*x14*x2*x4*x5*x7*x8 + x11*x13*x14*x2*x4*x5*x8 + x11*x13*x14*x2*x4*x6*x7*x8*x9 + x11*x13*x14*x2*x5*x6*x7*x9 + x11*x13*x14*x2*x5*x6*x7 + -x11*x13*x14*x3*x4*x5*x6*x7*x8*x9 + -x11*x13*x14*x3*x4*x5*x6*x8*x9 + x11*x13*x14*x3*x5*x6*x7*x8*x9 + -x11*x13*x14*x4*x5*x6*x7*x8*x9 + x11*x13*x14*x4*x5*x6*x7*x9 + x11*x13*x14*x4*x5*x6*x8*x9 + x11*x13*x14*x4*x5*x7*x8*x9 + -x11*x13*x14*x5*x6*x7*x9 + -x11*x13*x2*x3*x4*x5*x6*x7*x8 + -x11*x13*x2*x3*x4*x5*x6*x7*x9 + -2*x11*x13*x2*x3*x4*x5*x7*x8*x9 + 2*x11*x13*x2*x3*x4*x5*x7*x8 + x11*x13*x2*x3*x4*x5*x7*x9 + -x11*x13*x2*x3*x4*x6*x7*x8*x9 + x11*x13*x2*x3*x4*x7*x8*x9 + x11*x13*x2*x3*x6*x7*x8*x9 + x11*x13*x2*x3*x6*x7 + -x11*x13*x2*x3*x7 + -x11*x13*x2*x4*x5*x6*x7*x8*x9 + x11*x13*x2*x4*x5*x6*x7*x8 + x11*x13*x2*x4*x5*x6*x7*x9 + x11*x13*x2*x4*x5*x8*x9 + -x11*x13*x2*x4*x5*x8 + -x11*x13*x2*x6*x7 + x11*x13*x3*x4*x5*x6*x8*x9 + -x11*x13*x4*x5*x9 + -x11*x14*x2*x3*x4*x5*x6*x7*x8 + -2*x11*x14*x2*x3*x4*x6*x7*x8*x9 + x11*x14*x2*x3*x4*x7*x8*x9 + x11*x14*x2*x3*x5*x6*x7*x8 + x11*x14*x2*x4*x5*x6*x7*x8 + -x11*x14*x2*x5*x6*x7 + -2*x11*x14*x3*x4*x5*x6*x7*x8*x9 + -x11*x14*x3*x4*x5*x6*x8*x9 + x11*x14*x3*x4*x5*x7*x8 + x11*x14*x3*x4*x6*x7*x8*x9 + 2*x11*x14*x3*x4*x6*x8*x9 + -x11*x14*x3*x4*x7*x8 + x11*x14*x3*x5*x6*x8*x9 + x11*x14*x4*x5*x6*x7*x8*x9 + x11*x14*x4*x5*x6*x7*x8 + -x11*x14*x4*x5*x7*x8 + -x11*x14*x4*x6*x8*x9 + x11*x2*x3*x4*x6*x7*x8*x9 + -x11*x3*x6*x8*x9 + 7*x12*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + -x12*x13*x14*x2*x3*x4*x5*x6*x7*x8 + -2*x12*x13*x14*x2*x3*x4*x5*x6*x8*x9 + -2*x12*x13*x14*x2*x3*x4*x5*x7*x8*x9 + -x12*x13*x14*x2*x3*x4*x5*x7*x8 + x12*x13*x14*x2*x3*x4*x5*x8 + -x12*x13*x14*x2*x3*x4*x6*x7*x8*x9 + -x12*x13*x14*x2*x3*x5*x6*x7*x8*x9 + -3*x12*x13*x14*x2*x4*x5*x6*x7*x8*x9 + x12*x13*x14*x2*x4*x5*x6*x8*x9 + x12*x13*x14*x2*x4*x5*x7*x8*x9 + x12*x13*x14*x2*x6*x7*x8*x9 + x12*x13*x14*x3*x4*x5*x6*x7*x8*x9 + -x12*x13*x14*x3*x4*x5*x6*x7*x8 + -x12*x13*x14*x3*x4*x5*x6*x7*x9 + -x12*x13*x14*x3*x4*x5*x7*x8*x9 + x12*x13*x14*x3*x4*x5*x7*x8 + -x12*x13*x14*x3*x5*x6*x7*x8*x9 + x12*x13*x14*x3*x5*x7*x9 + x12*x13*x14*x4*x5*x6*x7*x9 + -3*x12*x13*x2*x3*x4*x5*x6*x7*x8*x9 + x12*x13*x2*x3*x4*x5*x7*x8 + x12*x13*x2*x3*x4*x6*x7*x8*x9 + x12*x13*x2*x3*x5*x6*x7*x8*x9 + x12*x13*x2*x4*x5*x6*x7*x8*x9 + -x12*x13*x2*x6*x7*x8*x9 + x12*x13*x3*x4*x5*x6*x7*x9 + x12*x13*x3*x5*x6*x7*x8 + -x12*x13*x3*x5*x7 + -x12*x13*x4*x5*x6*x7*x9 + -2*x12*x14*x2*x3*x4*x5*x6*x7*x8*x9 + -x12*x14*x2*x3*x4*x5*x6*x8*x9 + x12*x14*x2*x3*x4*x5*x7*x8*x9 + x12*x14*x2*x3*x4*x6*x8*x9 + -x12*x14*x2*x3*x5*x6*x7*x8*x9 + x12*x14*x2*x3*x5*x6*x8 + x12*x14*x2*x3*x6*x7*x8*x9 + -x12*x14*x2*x3*x6*x8 + x12*x14*x2*x5*x6*x7*x8*x9 + -x12*x14*x2*x6*x7*x8*x9 + -2*x12*x14*x3*x4*x5*x6*x7*x8*x9 + -x12*x14*x3*x4*x5*x6*x7*x8 + 2*x12*x14*x3*x4*x5*x6*x8 + x12*x14*x3*x4*x5*x7*x8*x9 + -x12*x14*x3*x4*x5*x8 + -x12*x14*x3*x5*x6*x7*x8*x9 + 2*x12*x14*x3*x5*x6*x7*x8 + 2*x12*x14*x3*x5*x6*x8*x9 + -x12*x14*x3*x5*x6*x8 + x12*x14*x4*x5*x6*x7*x8*x9 + x12*x14*x5*x6*x7*x8*x9 + -x12*x14*x5*x6*x8*x9 + -x12*x14*x5*x7*x9 + x12*x2*x3*x4*x5*x6*x7*x8*x9 + x12*x3*x4*x5*x6*x7*x8 + -x12*x3*x4*x5*x6*x8 + -x12*x3*x5*x6*x7*x8 + -2*x13*x14*x2*x3*x4*x5*x6*x7*x8*x9 + x13*x14*x2*x3*x4*x5*x6*x8*x9 + x13*x14*x2*x3*x4*x5*x7*x8 + x13*x14*x2*x4*x5*x6*x7*x8 + -x13*x14*x2*x4*x5*x8 + x13*x2*x3*x4*x5*x7*x8*x9 + -x13*x2*x3*x4*x5*x7*x8 + x14*x2*x3*x4*x6*x7*x8*x9 + x14*x3*x4*x5*x6*x7*x8 + x14*x3*x4*x5*x6*x8*x9 + -x14*x3*x4*x6*x8*x9 + x14*x3*x5*x6*x7*x8*x9 + -x14*x3*x5*x6*x7*x8 + -x14*x3*x5*x6*x8*x9 + -x14*x4*x5*x6*x7*x8 + -x2*x3*x4*x7*x8*x9 + 1; frobby-0.9.5/test/commonIdeals/t15.opt_irr000066400000000000000000000005561401527164200204220ustar00rootroot00000000000000R = QQ[x1, x10, x11, x12, x13, x14, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1*x10*x11*x12*x13*x6*x9, x1*x10*x12*x13*x4*x5*x9, x1*x10*x12*x14*x2*x4*x8, x1*x10*x12*x2*x4*x7*x8, x1*x12*x14*x6*x7*x8*x9, x1*x13*x14*x3*x4*x5*x6, x1*x14*x2*x3*x4*x7*x9, x1*x14*x2*x3*x7*x8*x9, x1*x14*x3*x4*x7*x8*x9, x1*x2*x5*x6*x7*x8*x9, x12*x13*x2*x3*x6*x7*x9 ); 7 frobby-0.9.5/test/commonIdeals/t15.opt_irr_min000066400000000000000000000046271401527164200212700ustar00rootroot00000000000000R = QQ[x1, x10, x11, x12, x13, x14, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1*x10*x11*x12*x8, x1*x10*x11*x5*x8, x1*x10*x11*x7*x8, x1*x10*x13*x14*x3, x1*x10*x13*x14*x8, x1*x10*x3*x5*x6, x1*x10*x5*x6*x7, x1*x10*x5*x7*x8, x1*x11*x12*x3*x4, x1*x11*x12*x3*x8, x1*x11*x14*x3*x9, x1*x11*x2*x5*x6, x1*x11*x3*x4*x9, x1*x11*x3*x5*x7, x1*x11*x3*x5*x8, x1*x11*x3*x5*x9, x1*x11*x3*x7*x8, x1*x13*x14*x4*x8, x1*x3*x5*x7*x9, x10*x11*x12*x14*x3, x10*x11*x12*x14*x4, x10*x11*x12*x2*x8, x10*x11*x12*x3*x4, x10*x11*x12*x3*x5, x10*x11*x12*x3*x8, x10*x11*x12*x4*x5, x10*x11*x12*x4*x6, x10*x11*x12*x5*x9, x10*x11*x12*x6*x8, x10*x11*x12*x7*x8, x10*x11*x13*x5*x8, x10*x11*x13*x7*x8, x10*x11*x14*x2*x5, x10*x11*x14*x4*x7, x10*x11*x14*x5*x7, x10*x11*x14*x5*x9, x10*x11*x14*x7*x8, x10*x11*x2*x3*x5, x10*x11*x2*x4*x5, x10*x11*x2*x5*x6, x10*x11*x2*x5*x8, x10*x11*x2*x5*x9, x10*x11*x2*x7*x8, x10*x11*x3*x5*x7, x10*x11*x3*x5*x8, x10*x11*x3*x7*x8, x10*x11*x3*x8*x9, x10*x11*x4*x5*x8, x10*x11*x5*x6*x7, x10*x11*x5*x7*x8, x10*x12*x13*x14*x3, x10*x12*x13*x4*x6, x10*x12*x13*x6*x8, x10*x12*x2*x5*x8, x10*x12*x2*x8*x9, x10*x12*x3*x5*x6, x10*x12*x5*x6*x7, x10*x13*x14*x3*x5, x10*x13*x14*x4*x6, x10*x13*x14*x5*x8, x10*x13*x14*x5*x9, x10*x13*x3*x5*x6, x10*x13*x3*x5*x8, x10*x14*x2*x3*x9, x10*x14*x2*x5*x6, x10*x14*x2*x5*x8, x10*x14*x2*x5*x9, x10*x14*x3*x5*x6, x10*x14*x3*x5*x7, x10*x14*x5*x6*x7, x10*x14*x5*x7*x8, x10*x14*x5*x7*x9, x10*x2*x3*x4*x5, x10*x2*x3*x5*x6, x10*x2*x3*x5*x8, x10*x2*x5*x6*x7, x10*x2*x5*x7*x8, x10*x2*x5*x7*x9, x10*x3*x4*x5*x7, x10*x3*x5*x6*x7, x10*x3*x5*x7*x8, x10*x3*x5*x7*x9, x11*x12*x13*x6*x8, x11*x13*x14*x5*x7, x11*x13*x3*x7*x8, x11*x13*x4*x5*x8, x11*x13*x5*x6*x8, x11*x14*x2*x3*x5, x11*x14*x2*x3*x7, x11*x14*x2*x5*x6, x11*x14*x3*x5*x7, x11*x14*x5*x6*x7, x11*x14*x5*x6*x8, x11*x14*x6*x7*x8, x11*x2*x3*x4*x5, x11*x2*x3*x5*x8, x11*x2*x3*x7*x8, x11*x2*x3*x7*x9, x11*x2*x4*x6*x7, x11*x2*x5*x6*x8, x11*x2*x6*x7*x8, x11*x3*x4*x5*x7, x11*x3*x4*x5*x8, x11*x3*x4*x7*x9, x11*x3*x5*x6*x8, x11*x3*x5*x7*x8, x11*x3*x5*x7*x9, x11*x3*x6*x7*x8, x11*x3*x7*x8*x9, x12*x13*x14*x2*x3, x12*x13*x2*x6*x8, x12*x13*x4*x6*x8, x12*x13*x6*x7*x8, x12*x3*x5*x7*x9, x13*x14*x2*x3*x9, x13*x14*x3*x7*x8, x13*x14*x4*x5*x8, x13*x14*x5*x7*x8, x13*x14*x6*x7*x8, x13*x2*x3*x5*x8, x13*x3*x4*x5*x8, x13*x3*x5*x7*x8, x2*x3*x5*x7*x9, x3*x5*x6*x7*x9, x3*x5*x7*x8*x9 ); 5 frobby-0.9.5/test/commonIdeals/t15.opt_std000066400000000000000000000001521401527164200204100ustar00rootroot00000000000000R = QQ[x1, x10, x11, x12, x13, x14, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t15.opt_std_min000066400000000000000000000001521401527164200212530ustar00rootroot00000000000000R = QQ[x1, x10, x11, x12, x13, x14, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t15.primdecom000066400000000000000000000520321401527164200207170ustar00rootroot00000000000000R = QQ[x1, x10, x11, x12, x13, x14, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1, x10, x11, x12, x13, x6, x9 ); I = monomialIdeal( x1, x10, x11, x12, x14, x2 ); I = monomialIdeal( x1, x10, x11, x12, x14, x7 ); I = monomialIdeal( x1, x10, x11, x12, x2, x6 ); I = monomialIdeal( x1, x10, x11, x12, x8 ); I = monomialIdeal( x1, x10, x11, x13, x8, x9 ); I = monomialIdeal( x1, x10, x11, x14, x3, x6 ); I = monomialIdeal( x1, x10, x11, x14, x3, x7 ); I = monomialIdeal( x1, x10, x11, x14, x6, x7 ); I = monomialIdeal( x1, x10, x11, x4, x5, x6 ); I = monomialIdeal( x1, x10, x11, x4, x6, x7 ); I = monomialIdeal( x1, x10, x11, x5, x6, x9 ); I = monomialIdeal( x1, x10, x11, x5, x8 ); I = monomialIdeal( x1, x10, x11, x7, x8 ); I = monomialIdeal( x1, x10, x12, x13, x14, x9 ); I = monomialIdeal( x1, x10, x12, x13, x2, x8 ); I = monomialIdeal( x1, x10, x12, x13, x4, x5, x9 ); I = monomialIdeal( x1, x10, x12, x13, x5, x8 ); I = monomialIdeal( x1, x10, x12, x13, x6, x7 ); I = monomialIdeal( x1, x10, x12, x13, x7, x8 ); I = monomialIdeal( x1, x10, x12, x13, x7, x9 ); I = monomialIdeal( x1, x10, x12, x14, x2, x4, x8 ); I = monomialIdeal( x1, x10, x12, x14, x2, x9 ); I = monomialIdeal( x1, x10, x12, x2, x4, x6 ); I = monomialIdeal( x1, x10, x12, x2, x4, x7, x8 ); I = monomialIdeal( x1, x10, x12, x2, x7, x9 ); I = monomialIdeal( x1, x10, x12, x3, x4, x6 ); I = monomialIdeal( x1, x10, x12, x3, x4, x7 ); I = monomialIdeal( x1, x10, x12, x4, x6, x7 ); I = monomialIdeal( x1, x10, x12, x5, x7, x9 ); I = monomialIdeal( x1, x10, x13, x14, x2, x6 ); I = monomialIdeal( x1, x10, x13, x14, x3 ); I = monomialIdeal( x1, x10, x13, x14, x6, x7 ); I = monomialIdeal( x1, x10, x13, x14, x6, x9 ); I = monomialIdeal( x1, x10, x13, x14, x8 ); I = monomialIdeal( x1, x10, x13, x3, x5, x9 ); I = monomialIdeal( x1, x10, x14, x2, x3, x4 ); I = monomialIdeal( x1, x10, x14, x2, x3, x5 ); I = monomialIdeal( x1, x10, x14, x3, x4, x6 ); I = monomialIdeal( x1, x10, x14, x3, x4, x7 ); I = monomialIdeal( x1, x10, x14, x4, x6, x7 ); I = monomialIdeal( x1, x10, x14, x4, x7, x8 ); I = monomialIdeal( x1, x10, x14, x4, x7, x9 ); I = monomialIdeal( x1, x10, x14, x7, x8, x9 ); I = monomialIdeal( x1, x10, x2, x3, x5, x9 ); I = monomialIdeal( x1, x10, x3, x5, x6 ); I = monomialIdeal( x1, x10, x5, x6, x7 ); I = monomialIdeal( x1, x10, x5, x7, x8 ); I = monomialIdeal( x1, x11, x12, x13, x14, x4 ); I = monomialIdeal( x1, x11, x12, x13, x3, x7 ); I = monomialIdeal( x1, x11, x12, x13, x4, x6 ); I = monomialIdeal( x1, x11, x12, x13, x4, x8 ); I = monomialIdeal( x1, x11, x12, x13, x5, x8 ); I = monomialIdeal( x1, x11, x12, x13, x6, x7 ); I = monomialIdeal( x1, x11, x12, x14, x2, x3 ); I = monomialIdeal( x1, x11, x12, x14, x2, x6 ); I = monomialIdeal( x1, x11, x12, x14, x3, x7 ); I = monomialIdeal( x1, x11, x12, x14, x4, x6 ); I = monomialIdeal( x1, x11, x12, x14, x6, x7 ); I = monomialIdeal( x1, x11, x12, x14, x6, x8 ); I = monomialIdeal( x1, x11, x12, x2, x3, x5 ); I = monomialIdeal( x1, x11, x12, x2, x3, x6 ); I = monomialIdeal( x1, x11, x12, x2, x3, x7 ); I = monomialIdeal( x1, x11, x12, x2, x4, x6 ); I = monomialIdeal( x1, x11, x12, x2, x6, x7 ); I = monomialIdeal( x1, x11, x12, x2, x6, x8 ); I = monomialIdeal( x1, x11, x12, x3, x4 ); I = monomialIdeal( x1, x11, x12, x3, x8 ); I = monomialIdeal( x1, x11, x13, x14, x2, x5 ); I = monomialIdeal( x1, x11, x13, x14, x3, x8 ); I = monomialIdeal( x1, x11, x13, x14, x4, x7 ); I = monomialIdeal( x1, x11, x13, x14, x5, x8 ); I = monomialIdeal( x1, x11, x13, x14, x5, x9 ); I = monomialIdeal( x1, x11, x13, x14, x6, x8 ); I = monomialIdeal( x1, x11, x13, x14, x6, x9 ); I = monomialIdeal( x1, x11, x13, x2, x3, x5 ); I = monomialIdeal( x1, x11, x13, x3, x6, x9 ); I = monomialIdeal( x1, x11, x13, x3, x7, x9 ); I = monomialIdeal( x1, x11, x13, x3, x8, x9 ); I = monomialIdeal( x1, x11, x13, x4, x5, x6 ); I = monomialIdeal( x1, x11, x13, x4, x6, x9 ); I = monomialIdeal( x1, x11, x13, x4, x8, x9 ); I = monomialIdeal( x1, x11, x13, x5, x6, x7 ); I = monomialIdeal( x1, x11, x13, x5, x6, x9 ); I = monomialIdeal( x1, x11, x13, x5, x8, x9 ); I = monomialIdeal( x1, x11, x13, x6, x8, x9 ); I = monomialIdeal( x1, x11, x14, x2, x6, x7 ); I = monomialIdeal( x1, x11, x14, x3, x4, x7 ); I = monomialIdeal( x1, x11, x14, x3, x4, x8 ); I = monomialIdeal( x1, x11, x14, x3, x6, x8 ); I = monomialIdeal( x1, x11, x14, x3, x9 ); I = monomialIdeal( x1, x11, x14, x4, x5, x6 ); I = monomialIdeal( x1, x11, x14, x4, x6, x7 ); I = monomialIdeal( x1, x11, x14, x5, x6, x9 ); I = monomialIdeal( x1, x11, x14, x6, x7, x9 ); I = monomialIdeal( x1, x11, x2, x3, x6, x7 ); I = monomialIdeal( x1, x11, x2, x3, x6, x9 ); I = monomialIdeal( x1, x11, x2, x5, x6 ); I = monomialIdeal( x1, x11, x3, x4, x5, x6 ); I = monomialIdeal( x1, x11, x3, x4, x6, x7 ); I = monomialIdeal( x1, x11, x3, x4, x9 ); I = monomialIdeal( x1, x11, x3, x5, x7 ); I = monomialIdeal( x1, x11, x3, x5, x8 ); I = monomialIdeal( x1, x11, x3, x5, x9 ); I = monomialIdeal( x1, x11, x3, x6, x8, x9 ); I = monomialIdeal( x1, x11, x3, x7, x8 ); I = monomialIdeal( x1, x12, x13, x14, x2, x6 ); I = monomialIdeal( x1, x12, x13, x14, x3, x4 ); I = monomialIdeal( x1, x12, x13, x14, x4, x6 ); I = monomialIdeal( x1, x12, x13, x14, x4, x9 ); I = monomialIdeal( x1, x12, x13, x2, x3, x8 ); I = monomialIdeal( x1, x12, x13, x2, x4, x8 ); I = monomialIdeal( x1, x12, x13, x2, x6, x7 ); I = monomialIdeal( x1, x12, x13, x3, x4, x7 ); I = monomialIdeal( x1, x12, x13, x3, x7, x8 ); I = monomialIdeal( x1, x12, x13, x4, x5, x8 ); I = monomialIdeal( x1, x12, x13, x4, x6, x7 ); I = monomialIdeal( x1, x12, x13, x4, x7, x8 ); I = monomialIdeal( x1, x12, x13, x5, x6, x7 ); I = monomialIdeal( x1, x12, x14, x6, x7, x8, x9 ); I = monomialIdeal( x1, x12, x2, x3, x7, x9 ); I = monomialIdeal( x1, x12, x2, x6, x7, x9 ); I = monomialIdeal( x1, x12, x3, x4, x7, x9 ); I = monomialIdeal( x1, x12, x3, x7, x8, x9 ); I = monomialIdeal( x1, x13, x14, x2, x3, x5 ); I = monomialIdeal( x1, x13, x14, x2, x3, x7 ); I = monomialIdeal( x1, x13, x14, x2, x3, x8 ); I = monomialIdeal( x1, x13, x14, x2, x5, x8 ); I = monomialIdeal( x1, x13, x14, x2, x5, x9 ); I = monomialIdeal( x1, x13, x14, x2, x6, x8 ); I = monomialIdeal( x1, x13, x14, x2, x6, x9 ); I = monomialIdeal( x1, x13, x14, x3, x4, x5, x6 ); I = monomialIdeal( x1, x13, x14, x3, x4, x7 ); I = monomialIdeal( x1, x13, x14, x3, x4, x9 ); I = monomialIdeal( x1, x13, x14, x3, x5, x7 ); I = monomialIdeal( x1, x13, x14, x4, x5, x9 ); I = monomialIdeal( x1, x13, x14, x4, x6, x9 ); I = monomialIdeal( x1, x13, x14, x4, x7, x9 ); I = monomialIdeal( x1, x13, x14, x4, x8 ); I = monomialIdeal( x1, x13, x14, x5, x7, x9 ); I = monomialIdeal( x1, x13, x3, x4, x5, x7 ); I = monomialIdeal( x1, x13, x3, x5, x6, x7 ); I = monomialIdeal( x1, x13, x4, x5, x7, x8 ); I = monomialIdeal( x1, x13, x5, x6, x7, x8 ); I = monomialIdeal( x1, x13, x5, x6, x7, x9 ); I = monomialIdeal( x1, x14, x2, x3, x4, x7, x9 ); I = monomialIdeal( x1, x14, x2, x3, x7, x8, x9 ); I = monomialIdeal( x1, x14, x2, x6, x7, x9 ); I = monomialIdeal( x1, x14, x3, x4, x7, x8, x9 ); I = monomialIdeal( x1, x14, x4, x6, x7, x9 ); I = monomialIdeal( x1, x14, x5, x6, x7, x9 ); I = monomialIdeal( x1, x2, x5, x6, x7, x8, x9 ); I = monomialIdeal( x1, x3, x5, x7, x9 ); I = monomialIdeal( x10, x11, x12, x13, x14, x8 ); I = monomialIdeal( x10, x11, x12, x13, x3, x6 ); I = monomialIdeal( x10, x11, x12, x13, x3, x7 ); I = monomialIdeal( x10, x11, x12, x14, x3 ); I = monomialIdeal( x10, x11, x12, x14, x4 ); I = monomialIdeal( x10, x11, x12, x14, x8, x9 ); I = monomialIdeal( x10, x11, x12, x2, x3, x7 ); I = monomialIdeal( x10, x11, x12, x2, x8 ); I = monomialIdeal( x10, x11, x12, x3, x4 ); I = monomialIdeal( x10, x11, x12, x3, x5 ); I = monomialIdeal( x10, x11, x12, x3, x8 ); I = monomialIdeal( x10, x11, x12, x4, x5 ); I = monomialIdeal( x10, x11, x12, x4, x6 ); I = monomialIdeal( x10, x11, x12, x4, x7, x9 ); I = monomialIdeal( x10, x11, x12, x5, x9 ); I = monomialIdeal( x10, x11, x12, x6, x8 ); I = monomialIdeal( x10, x11, x12, x7, x8 ); I = monomialIdeal( x10, x11, x13, x14, x3, x6 ); I = monomialIdeal( x10, x11, x13, x14, x4, x5 ); I = monomialIdeal( x10, x11, x13, x14, x6, x8 ); I = monomialIdeal( x10, x11, x13, x2, x8, x9 ); I = monomialIdeal( x10, x11, x13, x3, x4, x9 ); I = monomialIdeal( x10, x11, x13, x3, x5, x9 ); I = monomialIdeal( x10, x11, x13, x3, x6, x7 ); I = monomialIdeal( x10, x11, x13, x3, x6, x9 ); I = monomialIdeal( x10, x11, x13, x4, x5, x6 ); I = monomialIdeal( x10, x11, x13, x4, x6, x7 ); I = monomialIdeal( x10, x11, x13, x4, x6, x9 ); I = monomialIdeal( x10, x11, x13, x5, x6, x9 ); I = monomialIdeal( x10, x11, x13, x5, x8 ); I = monomialIdeal( x10, x11, x13, x6, x8, x9 ); I = monomialIdeal( x10, x11, x13, x7, x8 ); I = monomialIdeal( x10, x11, x14, x2, x5 ); I = monomialIdeal( x10, x11, x14, x3, x4, x9 ); I = monomialIdeal( x10, x11, x14, x3, x6, x7 ); I = monomialIdeal( x10, x11, x14, x3, x6, x9 ); I = monomialIdeal( x10, x11, x14, x4, x5, x6 ); I = monomialIdeal( x10, x11, x14, x4, x7 ); I = monomialIdeal( x10, x11, x14, x5, x7 ); I = monomialIdeal( x10, x11, x14, x5, x9 ); I = monomialIdeal( x10, x11, x14, x7, x8 ); I = monomialIdeal( x10, x11, x2, x3, x4, x9 ); I = monomialIdeal( x10, x11, x2, x3, x5 ); I = monomialIdeal( x10, x11, x2, x3, x6, x7 ); I = monomialIdeal( x10, x11, x2, x4, x5 ); I = monomialIdeal( x10, x11, x2, x5, x6 ); I = monomialIdeal( x10, x11, x2, x5, x8 ); I = monomialIdeal( x10, x11, x2, x5, x9 ); I = monomialIdeal( x10, x11, x2, x7, x8 ); I = monomialIdeal( x10, x11, x3, x4, x6, x7 ); I = monomialIdeal( x10, x11, x3, x5, x7 ); I = monomialIdeal( x10, x11, x3, x5, x8 ); I = monomialIdeal( x10, x11, x3, x7, x8 ); I = monomialIdeal( x10, x11, x3, x8, x9 ); I = monomialIdeal( x10, x11, x4, x5, x8 ); I = monomialIdeal( x10, x11, x5, x6, x7 ); I = monomialIdeal( x10, x11, x5, x7, x8 ); I = monomialIdeal( x10, x12, x13, x14, x3 ); I = monomialIdeal( x10, x12, x13, x14, x4, x9 ); I = monomialIdeal( x10, x12, x13, x14, x8, x9 ); I = monomialIdeal( x10, x12, x13, x2, x3, x4 ); I = monomialIdeal( x10, x12, x13, x2, x3, x8 ); I = monomialIdeal( x10, x12, x13, x3, x4, x5 ); I = monomialIdeal( x10, x12, x13, x3, x4, x7 ); I = monomialIdeal( x10, x12, x13, x3, x5, x9 ); I = monomialIdeal( x10, x12, x13, x3, x6, x7 ); I = monomialIdeal( x10, x12, x13, x3, x7, x8 ); I = monomialIdeal( x10, x12, x13, x3, x7, x9 ); I = monomialIdeal( x10, x12, x13, x4, x6 ); I = monomialIdeal( x10, x12, x13, x6, x8 ); I = monomialIdeal( x10, x12, x14, x2, x3, x4 ); I = monomialIdeal( x10, x12, x14, x2, x3, x5 ); I = monomialIdeal( x10, x12, x14, x2, x4, x6 ); I = monomialIdeal( x10, x12, x14, x2, x4, x9 ); I = monomialIdeal( x10, x12, x14, x3, x4, x6 ); I = monomialIdeal( x10, x12, x14, x3, x4, x7 ); I = monomialIdeal( x10, x12, x14, x4, x6, x7 ); I = monomialIdeal( x10, x12, x14, x4, x7, x9 ); I = monomialIdeal( x10, x12, x2, x3, x4, x9 ); I = monomialIdeal( x10, x12, x2, x3, x5, x9 ); I = monomialIdeal( x10, x12, x2, x3, x7, x9 ); I = monomialIdeal( x10, x12, x2, x4, x5, x6 ); I = monomialIdeal( x10, x12, x2, x4, x5, x9 ); I = monomialIdeal( x10, x12, x2, x4, x6, x8 ); I = monomialIdeal( x10, x12, x2, x4, x6, x9 ); I = monomialIdeal( x10, x12, x2, x4, x7, x9 ); I = monomialIdeal( x10, x12, x2, x5, x8 ); I = monomialIdeal( x10, x12, x2, x8, x9 ); I = monomialIdeal( x10, x12, x3, x4, x6, x8 ); I = monomialIdeal( x10, x12, x3, x4, x6, x9 ); I = monomialIdeal( x10, x12, x3, x4, x7, x8 ); I = monomialIdeal( x10, x12, x3, x4, x7, x9 ); I = monomialIdeal( x10, x12, x3, x5, x6 ); I = monomialIdeal( x10, x12, x3, x6, x8, x9 ); I = monomialIdeal( x10, x12, x4, x6, x7, x8 ); I = monomialIdeal( x10, x12, x4, x6, x7, x9 ); I = monomialIdeal( x10, x12, x5, x6, x7 ); I = monomialIdeal( x10, x12, x6, x7, x8, x9 ); I = monomialIdeal( x10, x13, x14, x2, x8, x9 ); I = monomialIdeal( x10, x13, x14, x3, x4, x7 ); I = monomialIdeal( x10, x13, x14, x3, x4, x9 ); I = monomialIdeal( x10, x13, x14, x3, x5 ); I = monomialIdeal( x10, x13, x14, x3, x6, x9 ); I = monomialIdeal( x10, x13, x14, x3, x8, x9 ); I = monomialIdeal( x10, x13, x14, x4, x6 ); I = monomialIdeal( x10, x13, x14, x4, x7, x9 ); I = monomialIdeal( x10, x13, x14, x5, x8 ); I = monomialIdeal( x10, x13, x14, x5, x9 ); I = monomialIdeal( x10, x13, x14, x6, x8, x9 ); I = monomialIdeal( x10, x13, x14, x7, x8, x9 ); I = monomialIdeal( x10, x13, x3, x4, x5, x9 ); I = monomialIdeal( x10, x13, x3, x5, x6 ); I = monomialIdeal( x10, x13, x3, x5, x8 ); I = monomialIdeal( x10, x14, x2, x3, x4, x7 ); I = monomialIdeal( x10, x14, x2, x3, x9 ); I = monomialIdeal( x10, x14, x2, x4, x6, x7 ); I = monomialIdeal( x10, x14, x2, x4, x7, x9 ); I = monomialIdeal( x10, x14, x2, x5, x6 ); I = monomialIdeal( x10, x14, x2, x5, x8 ); I = monomialIdeal( x10, x14, x2, x5, x9 ); I = monomialIdeal( x10, x14, x2, x7, x8, x9 ); I = monomialIdeal( x10, x14, x3, x4, x6, x9 ); I = monomialIdeal( x10, x14, x3, x4, x7, x8 ); I = monomialIdeal( x10, x14, x3, x4, x7, x9 ); I = monomialIdeal( x10, x14, x3, x5, x6 ); I = monomialIdeal( x10, x14, x3, x5, x7 ); I = monomialIdeal( x10, x14, x3, x6, x8, x9 ); I = monomialIdeal( x10, x14, x4, x6, x7, x8 ); I = monomialIdeal( x10, x14, x4, x6, x7, x9 ); I = monomialIdeal( x10, x14, x4, x7, x8, x9 ); I = monomialIdeal( x10, x14, x5, x6, x7 ); I = monomialIdeal( x10, x14, x5, x7, x8 ); I = monomialIdeal( x10, x14, x5, x7, x9 ); I = monomialIdeal( x10, x14, x6, x7, x8, x9 ); I = monomialIdeal( x10, x2, x3, x4, x5 ); I = monomialIdeal( x10, x2, x3, x5, x6 ); I = monomialIdeal( x10, x2, x3, x5, x8 ); I = monomialIdeal( x10, x2, x5, x6, x7 ); I = monomialIdeal( x10, x2, x5, x7, x8 ); I = monomialIdeal( x10, x2, x5, x7, x9 ); I = monomialIdeal( x10, x3, x4, x5, x6, x8 ); I = monomialIdeal( x10, x3, x4, x5, x7 ); I = monomialIdeal( x10, x3, x5, x6, x7 ); I = monomialIdeal( x10, x3, x5, x6, x8, x9 ); I = monomialIdeal( x10, x3, x5, x7, x8 ); I = monomialIdeal( x10, x3, x5, x7, x9 ); I = monomialIdeal( x11, x12, x13, x14, x4, x8 ); I = monomialIdeal( x11, x12, x13, x2, x3, x4 ); I = monomialIdeal( x11, x12, x13, x2, x3, x8 ); I = monomialIdeal( x11, x12, x13, x2, x4, x6 ); I = monomialIdeal( x11, x12, x13, x2, x4, x8 ); I = monomialIdeal( x11, x12, x13, x2, x5, x8 ); I = monomialIdeal( x11, x12, x13, x3, x4, x8 ); I = monomialIdeal( x11, x12, x13, x3, x7, x9 ); I = monomialIdeal( x11, x12, x13, x4, x7, x8 ); I = monomialIdeal( x11, x12, x13, x5, x7, x8 ); I = monomialIdeal( x11, x12, x13, x6, x8 ); I = monomialIdeal( x11, x12, x14, x3, x7, x9 ); I = monomialIdeal( x11, x12, x14, x6, x8, x9 ); I = monomialIdeal( x11, x12, x2, x3, x4, x7 ); I = monomialIdeal( x11, x12, x2, x3, x8, x9 ); I = monomialIdeal( x11, x12, x2, x4, x5, x6 ); I = monomialIdeal( x11, x12, x2, x6, x8, x9 ); I = monomialIdeal( x11, x12, x3, x6, x8, x9 ); I = monomialIdeal( x11, x13, x14, x2, x4, x7 ); I = monomialIdeal( x11, x13, x14, x2, x5, x8 ); I = monomialIdeal( x11, x13, x14, x2, x5, x9 ); I = monomialIdeal( x11, x13, x14, x4, x7, x8 ); I = monomialIdeal( x11, x13, x14, x4, x7, x9 ); I = monomialIdeal( x11, x13, x14, x5, x7 ); I = monomialIdeal( x11, x13, x14, x6, x8, x9 ); I = monomialIdeal( x11, x13, x2, x3, x4, x9 ); I = monomialIdeal( x11, x13, x2, x3, x8, x9 ); I = monomialIdeal( x11, x13, x2, x4, x5, x6 ); I = monomialIdeal( x11, x13, x2, x4, x6, x9 ); I = monomialIdeal( x11, x13, x2, x4, x7, x8 ); I = monomialIdeal( x11, x13, x2, x4, x8, x9 ); I = monomialIdeal( x11, x13, x2, x5, x8, x9 ); I = monomialIdeal( x11, x13, x2, x6, x8, x9 ); I = monomialIdeal( x11, x13, x3, x4, x8, x9 ); I = monomialIdeal( x11, x13, x3, x6, x7, x9 ); I = monomialIdeal( x11, x13, x3, x6, x8, x9 ); I = monomialIdeal( x11, x13, x3, x7, x8 ); I = monomialIdeal( x11, x13, x4, x5, x6, x7 ); I = monomialIdeal( x11, x13, x4, x5, x8 ); I = monomialIdeal( x11, x13, x5, x6, x7, x9 ); I = monomialIdeal( x11, x13, x5, x6, x8 ); I = monomialIdeal( x11, x13, x5, x7, x8, x9 ); I = monomialIdeal( x11, x14, x2, x3, x5 ); I = monomialIdeal( x11, x14, x2, x3, x7 ); I = monomialIdeal( x11, x14, x2, x5, x6 ); I = monomialIdeal( x11, x14, x3, x5, x7 ); I = monomialIdeal( x11, x14, x3, x6, x7, x9 ); I = monomialIdeal( x11, x14, x4, x6, x7, x9 ); I = monomialIdeal( x11, x14, x5, x6, x7 ); I = monomialIdeal( x11, x14, x5, x6, x8 ); I = monomialIdeal( x11, x14, x6, x7, x8 ); I = monomialIdeal( x11, x2, x3, x4, x5 ); I = monomialIdeal( x11, x2, x3, x5, x8 ); I = monomialIdeal( x11, x2, x3, x7, x8 ); I = monomialIdeal( x11, x2, x3, x7, x9 ); I = monomialIdeal( x11, x2, x4, x5, x6, x9 ); I = monomialIdeal( x11, x2, x4, x6, x7 ); I = monomialIdeal( x11, x2, x5, x6, x7, x9 ); I = monomialIdeal( x11, x2, x5, x6, x8 ); I = monomialIdeal( x11, x2, x6, x7, x8 ); I = monomialIdeal( x11, x3, x4, x5, x7 ); I = monomialIdeal( x11, x3, x4, x5, x8 ); I = monomialIdeal( x11, x3, x4, x7, x9 ); I = monomialIdeal( x11, x3, x5, x6, x8 ); I = monomialIdeal( x11, x3, x5, x7, x8 ); I = monomialIdeal( x11, x3, x5, x7, x9 ); I = monomialIdeal( x11, x3, x6, x7, x8 ); I = monomialIdeal( x11, x3, x7, x8, x9 ); I = monomialIdeal( x12, x13, x14, x2, x3 ); I = monomialIdeal( x12, x13, x14, x2, x4, x6 ); I = monomialIdeal( x12, x13, x14, x2, x4, x9 ); I = monomialIdeal( x12, x13, x14, x2, x5, x8 ); I = monomialIdeal( x12, x13, x14, x3, x4, x8 ); I = monomialIdeal( x12, x13, x14, x3, x5, x7 ); I = monomialIdeal( x12, x13, x14, x4, x7, x9 ); I = monomialIdeal( x12, x13, x14, x4, x8, x9 ); I = monomialIdeal( x12, x13, x2, x3, x4, x7 ); I = monomialIdeal( x12, x13, x2, x3, x4, x8 ); I = monomialIdeal( x12, x13, x2, x3, x6, x7, x9 ); I = monomialIdeal( x12, x13, x2, x4, x5, x8 ); I = monomialIdeal( x12, x13, x2, x4, x6, x7 ); I = monomialIdeal( x12, x13, x2, x4, x8, x9 ); I = monomialIdeal( x12, x13, x2, x6, x8 ); I = monomialIdeal( x12, x13, x3, x4, x5, x7 ); I = monomialIdeal( x12, x13, x3, x4, x7, x8 ); I = monomialIdeal( x12, x13, x3, x4, x7, x9 ); I = monomialIdeal( x12, x13, x4, x5, x6, x7 ); I = monomialIdeal( x12, x13, x4, x6, x7, x9 ); I = monomialIdeal( x12, x13, x4, x6, x8 ); I = monomialIdeal( x12, x13, x6, x7, x8 ); I = monomialIdeal( x12, x3, x5, x7, x9 ); I = monomialIdeal( x13, x14, x2, x3, x9 ); I = monomialIdeal( x13, x14, x2, x4, x5, x9 ); I = monomialIdeal( x13, x14, x2, x4, x7, x9 ); I = monomialIdeal( x13, x14, x2, x4, x8, x9 ); I = monomialIdeal( x13, x14, x2, x5, x6, x8 ); I = monomialIdeal( x13, x14, x2, x6, x8, x9 ); I = monomialIdeal( x13, x14, x3, x4, x8, x9 ); I = monomialIdeal( x13, x14, x3, x7, x8 ); I = monomialIdeal( x13, x14, x4, x5, x8 ); I = monomialIdeal( x13, x14, x4, x6, x7, x9 ); I = monomialIdeal( x13, x14, x4, x6, x8, x9 ); I = monomialIdeal( x13, x14, x4, x7, x8, x9 ); I = monomialIdeal( x13, x14, x5, x7, x8 ); I = monomialIdeal( x13, x14, x6, x7, x8 ); I = monomialIdeal( x13, x2, x3, x5, x8 ); I = monomialIdeal( x13, x2, x4, x5, x7, x8 ); I = monomialIdeal( x13, x2, x5, x6, x7, x8 ); I = monomialIdeal( x13, x3, x4, x5, x8 ); I = monomialIdeal( x13, x3, x5, x7, x8 ); I = monomialIdeal( x14, x4, x5, x6, x7, x9 ); I = monomialIdeal( x2, x3, x5, x7, x9 ); I = monomialIdeal( x2, x4, x5, x6, x7, x9 ); I = monomialIdeal( x3, x5, x6, x7, x9 ); I = monomialIdeal( x3, x5, x7, x8, x9 ); frobby-0.9.5/test/commonIdeals/t15.radical000066400000000000000000000046011401527164200203360ustar00rootroot00000000000000R = QQ[x1, x10, x11, x12, x13, x14, x2, x3, x4, x5, x6, x7, x8, x9]; I = monomialIdeal( x1*x10*x11*x12*x2*x6*x8, x1*x10*x11*x12*x3*x4*x6*x7, x1*x10*x11*x12*x3*x5*x7*x8, x1*x10*x11*x12*x8*x9, x1*x10*x11*x13*x3*x4, x1*x10*x11*x13*x5, x1*x10*x11*x14*x4*x5*x6, x1*x10*x11*x3*x4*x8, x1*x10*x12*x13*x14*x3*x7*x8*x9, x1*x10*x12*x13*x5*x7, x1*x10*x12*x14*x2*x3*x5, x1*x10*x12*x5*x7*x9, x1*x10*x13*x2*x5*x6*x7, x1*x10*x13*x2*x5*x6*x9, x1*x10*x13*x5*x7*x8, x1*x10*x13*x5*x7*x9, x1*x10*x14*x4*x7*x8, x1*x10*x14*x4*x8*x9, x1*x10*x2*x4*x6*x7, x1*x10*x2*x5*x8*x9, x1*x10*x2*x7*x8, x1*x10*x3*x6*x7*x8*x9, x1*x11*x12*x13*x14*x2*x4*x7*x9, x1*x11*x12*x13*x2*x3*x5*x6*x8, x1*x11*x12*x13*x2*x5*x8*x9, x1*x11*x12*x13*x4*x6*x7*x8*x9, x1*x11*x12*x14*x2*x3, x1*x11*x12*x14*x4*x6*x7*x8, x1*x11*x12*x4*x5*x7*x9, x1*x11*x12*x4*x5*x8*x9, x1*x11*x13*x14*x5*x8*x9, x1*x11*x13*x2*x4*x5*x6, x1*x11*x14*x2*x3*x6, x1*x11*x3*x5*x6*x9, x1*x12*x13*x14*x2*x3*x4*x7, x1*x12*x13*x14*x2*x3*x5, x1*x12*x13*x14*x2*x7*x8, x1*x12*x13*x5*x7*x9, x1*x12*x2*x3*x5*x6*x7, x1*x12*x2*x4*x5*x6*x8, x1*x12*x5*x6*x7*x9, x1*x13*x14*x4*x5*x7*x8, x1*x13*x2*x3*x4*x6*x7*x9, x1*x14*x2*x3*x5*x6*x7, x1*x3*x4*x5*x8, x10*x11*x12*x13*x14*x3*x4*x8, x10*x11*x12*x13*x2*x4*x5, x10*x11*x12*x13*x2*x5*x6*x8, x10*x11*x12*x13*x4*x5*x6*x8, x10*x11*x12*x3*x8*x9, x10*x11*x13*x7, x10*x11*x13*x9, x10*x11*x14*x3*x4*x6, x10*x11*x14*x7*x8, x10*x11*x2*x4*x5*x8, x10*x11*x2*x4*x7, x10*x12*x13*x14*x4*x5*x6*x7, x10*x12*x13*x14*x4*x6*x7*x8*x9, x10*x12*x14*x2*x3*x5*x9, x10*x12*x14*x3*x4*x6*x9, x10*x12*x2*x4*x5*x8*x9, x10*x12*x2*x6*x7*x8*x9, x10*x12*x5*x7*x8*x9, x10*x13*x14*x2*x3, x10*x13*x3*x6, x10*x14*x3*x4*x5*x7*x8, x10*x14*x3*x6*x8, x10*x2*x4*x7*x8*x9, x10*x3*x4*x5*x6, x11*x12*x14*x3*x7, x11*x12*x14*x5, x11*x13*x14*x2*x3*x5*x6, x11*x13*x14*x5*x6*x7*x9, x11*x13*x2*x3*x7, x11*x13*x2*x4*x5*x8, x11*x13*x2*x6*x7, x11*x13*x4*x5*x9, x11*x14*x2*x5*x6*x7, x11*x14*x3*x4*x7*x8, x11*x14*x4*x5*x7*x8, x11*x14*x4*x6*x8*x9, x11*x3*x6*x8*x9, x12*x13*x2*x6*x7*x8*x9, x12*x13*x3*x5*x7, x12*x13*x4*x5*x6*x7*x9, x12*x14*x2*x3*x6*x8, x12*x14*x2*x6*x7*x8*x9, x12*x14*x3*x4*x5*x8, x12*x14*x3*x5*x6*x8, x12*x14*x5*x6*x8*x9, x12*x14*x5*x7*x9, x12*x3*x4*x5*x6*x8, x12*x3*x5*x6*x7*x8, x13*x14*x2*x4*x5*x8, x13*x2*x3*x4*x5*x7*x8, x14*x3*x4*x6*x8*x9, x14*x3*x5*x6*x7*x8, x14*x3*x5*x6*x8*x9, x14*x4*x5*x6*x7*x8, x2*x3*x4*x7*x8*x9 ); frobby-0.9.5/test/commonIdeals/t15.test000066400000000000000000000046011401527164200177160ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14]; I = monomialIdeal( x4*x5*x9*x11*x13, x1*x3*x4*x6*x7*x10*x11*x12, x4*x5*x6*x7*x8*x14, x1*x2*x3*x6*x11*x14, x7*x10*x11*x13, x2*x4*x5*x8*x13*x14, x5*x11*x12*x14, x2*x3*x4*x7*x8*x9, x5*x7*x9*x12*x14, x4*x6*x7*x8*x9*x10*x12*x13*x14, x3*x4*x6*x8*x9*x14, x1*x2*x3*x5*x10*x12*x14, x1*x3*x4*x8*x10*x11, x4*x5*x6*x7*x9*x12*x13, x1*x3*x7*x8*x9*x10*x12*x13*x14, x3*x5*x6*x7*x8*x12, x1*x5*x7*x9*x12*x13, x1*x5*x7*x9*x10*x12, x1*x4*x5*x7*x9*x11*x12, x2*x6*x7*x8*x9*x12*x14, x2*x4*x7*x8*x9*x10, x2*x5*x6*x7*x11*x14, x4*x5*x6*x8*x10*x11*x12*x13, x1*x4*x6*x7*x8*x9*x11*x12*x13, x3*x6*x8*x9*x11, x1*x5*x7*x10*x12*x13, x1*x2*x3*x4*x6*x7*x9*x13, x1*x3*x4*x10*x11*x13, x2*x3*x4*x5*x7*x8*x13, x2*x6*x7*x8*x9*x12*x13, x2*x3*x10*x13*x14, x1*x2*x4*x6*x7*x10, x3*x4*x6*x10*x11*x14, x3*x4*x5*x8*x12*x14, x3*x4*x6*x9*x10*x12*x14, x2*x6*x7*x8*x9*x10*x12, x2*x6*x7*x11*x13, x2*x3*x7*x11*x13, x1*x2*x3*x5*x12*x13*x14, x2*x4*x5*x10*x11*x12*x13, x4*x5*x6*x7*x10*x12*x13*x14, x3*x4*x8*x10*x11*x12*x13*x14, x3*x4*x5*x6*x10, x1*x5*x6*x7*x9*x12, x9*x10*x11*x13, x1*x2*x4*x5*x6*x8*x12, x1*x4*x5*x6*x10*x11*x14, x1*x4*x5*x8*x9*x11*x12, x7*x8*x10*x11*x14, x1*x2*x5*x8*x9*x11*x12*x13, x3*x4*x5*x6*x8*x12, x3*x5*x6*x7*x8*x14, x2*x4*x5*x8*x10*x11, x1*x2*x4*x7*x9*x11*x12*x13*x14, x1*x3*x5*x7*x8*x10*x11*x12, x2*x4*x5*x8*x11*x13, x3*x4*x5*x7*x8*x10*x14, x1*x5*x10*x11*x13, x5*x7*x8*x9*x10*x12, x1*x3*x4*x5*x8, x2*x5*x6*x8*x10*x11*x12*x13, x1*x2*x5*x8*x9*x10, x3*x5*x7*x12*x13, x1*x2*x4*x5*x6*x11*x13, x1*x4*x6*x7*x8*x11*x12*x14, x1*x2*x7*x8*x10, x3*x6*x10*x13, x1*x2*x6*x8*x10*x11*x12, x4*x5*x7*x8*x11*x14, x1*x8*x9*x10*x11*x12, x3*x4*x7*x8*x11*x14, x3*x5*x6*x8*x9*x14, x1*x5*x8*x9*x11*x13*x14, x1*x3*x6*x7*x8*x9*x10, x2*x3*x5*x9*x10*x12*x14, x2*x3*x5*x6*x11*x13*x14, x1*x2*x5*x6*x9*x10*x13, x1*x5*x7*x9*x10*x13, x1*x2*x5*x6*x7*x10*x13, x1*x2*x3*x11*x12*x14, x1*x2*x7*x8*x12*x13*x14, x3*x6*x8*x10*x14, x1*x4*x8*x9*x10*x14, x5*x6*x7*x9*x11*x13*x14, x3*x8*x9*x10*x11*x12, x1*x2*x3*x5*x6*x8*x11*x12*x13, x1*x4*x5*x7*x8*x13*x14, x3*x7*x11*x12*x14, x1*x3*x5*x6*x9*x11, x1*x2*x3*x5*x6*x7*x14, x1*x4*x7*x8*x10*x14, x1*x2*x3*x4*x7*x12*x13*x14, x2*x4*x5*x8*x9*x10*x12, x2*x3*x6*x8*x12*x14, x4*x6*x8*x9*x11*x14, x1*x2*x3*x5*x6*x7*x12, x5*x6*x8*x9*x12*x14, x1*x5*x7*x8*x10*x13, x2*x4*x7*x10*x11, x3*x5*x6*x8*x12*x14 ); frobby-0.9.5/test/commonIdeals/t15.uni000066400000000000000000000002221401527164200175250ustar00rootroot00000000000000R = QQ[t]; p = -13*t^14 + 166*t^13 + -577*t^12 + 793*t^11 + -302*t^10 + -238*t^9 + 134*t^8 + 77*t^7 + -23*t^6 + -14*t^5 + -4*t^4 + 1; frobby-0.9.5/test/commonIdeals/t16.alexdual000066400000000000000000000616241401527164200205470ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^94, x1^88*x4, x1^88*x5^8, x1^88*x6, x1^87*x3^45*x4, x1^87*x3^45*x5^8, x1^87*x3^45*x6, x1^87*x4^33, x1^87*x4*x8, x1^87*x5^27, x1^87*x5^8*x8, x1^87*x6*x8, x1^83*x2^77, x1^83*x2^67*x4, x1^83*x2^60*x4^33, x1^83*x2^60*x4*x8, x1^83*x4^33*x7^5, x1^83*x4*x7^11, x1^83*x4*x7^5*x8, x1^83*x7^23, x1^82*x3^58, x1^82*x3^47*x4, x1^82*x3^47*x5^8, x1^82*x3^47*x6, x1^82*x3^45*x4*x7^5, x1^82*x3^45*x5^8*x7^5, x1^82*x3^45*x6^54, x1^82*x3^45*x6*x7^5, x1^82*x3^22*x4*x7^11, x1^82*x3^22*x4*x7^5*x8, x1^82*x4*x5^5*x7^11, x1^82*x4*x5^5*x7^5*x8, x1^82*x4*x7^5*x8^12, x1^82*x5^43, x1^82*x5^27*x6^54, x1^82*x5^27*x7^5, x1^82*x5^8*x7^11, x1^82*x5^8*x7^5*x8, x1^82*x6^59, x1^82*x6^54*x8, x1^82*x6*x7^11, x1^82*x6*x7^5*x8, x1^77*x2^21*x4*x5^5*x7^5*x8, x1^77*x2^21*x4*x7^5*x8^12, x1^77*x2^21*x5^43, x1^77*x2^21*x5^27*x7^5, x1^77*x2^21*x5^8*x7^5*x8, x1^77*x2^21*x6*x7^5*x8, x1^77*x4^2*x5^43, x1^77*x4^2*x5^27*x7^5, x1^77*x4^2*x5^5*x7^5*x8, x1^77*x4^2*x6*x7^5*x8, x1^77*x4^2*x7^5*x8^12, x1^77*x4*x7^5*x8^17, x1^77*x4*x8^20, x1^77*x5^43*x8^17, x1^77*x5^8*x7^5*x8^17, x1^77*x5^8*x8^20, x1^77*x6*x7^5*x8^17, x1^77*x6*x8^20, x1^77*x8^54, x1^72*x2^49*x4*x5^5*x7^5*x8, x1^72*x2^49*x4*x7^5*x8^12, x1^72*x2^49*x4*x8^20, x1^72*x2^49*x5^43, x1^72*x2^49*x5^27*x7^5, x1^72*x2^49*x5^8*x7^5*x8, x1^72*x2^49*x5^8*x8^20, x1^72*x2^49*x6*x7^5*x8, x1^72*x2^49*x6*x8^20, x1^72*x2^21*x3^22*x4*x7^11, x1^72*x2^21*x3^22*x4*x7^5*x8, x1^72*x2^21*x3^10*x4*x5^5*x7^5*x8, x1^72*x2^21*x3^10*x4*x7^5*x8^12, x1^72*x2^21*x3^10*x5^43, x1^72*x2^21*x3^10*x5^27*x7^5, x1^72*x2^21*x3^10*x5^8*x7^5*x8, x1^72*x2^21*x3^10*x6*x7^5*x8, x1^72*x2^21*x4*x5^5*x7^11, x1^72*x2^21*x4*x5^5*x7^7*x8, x1^72*x2^21*x4*x7^7*x8^12, x1^72*x2^21*x5^47, x1^72*x2^21*x5^43*x6^43, x1^72*x2^21*x5^27*x6^54, x1^72*x2^21*x5^27*x6^43*x7^5, x1^72*x2^21*x5^27*x7^7, x1^72*x2^21*x5^8*x7^11, x1^72*x2^21*x5^8*x7^7*x8, x1^72*x2^21*x6^59, x1^72*x2^21*x6^54*x8, x1^72*x2^21*x6^43*x7^5*x8, x1^72*x2^21*x6*x7^11, x1^72*x2^21*x6*x7^7*x8, x1^72*x3^22*x4^33*x7^5, x1^72*x3^22*x4^2*x7^11, x1^72*x3^22*x4^2*x7^5*x8, x1^72*x3^22*x4*x7^17, x1^72*x3^22*x7^23, x1^72*x3^10*x4^2*x5^43, x1^72*x3^10*x4^2*x5^27*x7^5, x1^72*x3^10*x4^2*x5^5*x7^5*x8, x1^72*x3^10*x4^2*x6*x7^5*x8, x1^72*x3^10*x4^2*x7^5*x8^12, x1^72*x3^10*x4*x7^5*x8^17, x1^72*x3^10*x4*x8^20, x1^72*x3^10*x5^43*x8^17, x1^72*x3^10*x5^8*x7^5*x8^17, x1^72*x3^10*x5^8*x8^20, x1^72*x3^10*x6*x7^5*x8^17, x1^72*x3^10*x6*x8^20, x1^72*x4^33*x5^5*x7^5, x1^72*x4^33*x6^54, x1^72*x4^33*x6*x7^5, x1^72*x4^10*x5^43, x1^72*x4^10*x5^27*x7^5, x1^72*x4^10*x5^5*x7^5*x8, x1^72*x4^10*x6*x7^5*x8, x1^72*x4^10*x7^5*x8^12, x1^72*x4^10*x8^20, x1^72*x4^2*x5^47, x1^72*x4^2*x5^43*x6^43, x1^72*x4^2*x5^27*x6^54, x1^72*x4^2*x5^27*x6^43*x7^5, x1^72*x4^2*x5^27*x7^7, x1^72*x4^2*x5^5*x7^11, x1^72*x4^2*x5^5*x7^7*x8, x1^72*x4^2*x6^59, x1^72*x4^2*x6^54*x8, x1^72*x4^2*x6^43*x7^5*x8, x1^72*x4^2*x6*x7^11, x1^72*x4^2*x6*x7^7*x8, x1^72*x4^2*x7^7*x8^12, x1^72*x4*x5^5*x7^17, x1^72*x4*x7^17*x8^12, x1^72*x4*x7^7*x8^17, x1^72*x5^51, x1^72*x5^47*x8^17, x1^72*x5^43*x6^43*x8^17, x1^72*x5^8*x7^17, x1^72*x5^8*x7^7*x8^17, x1^72*x5^5*x7^23, x1^72*x6^54*x8^17, x1^72*x6^43*x7^5*x8^17, x1^72*x6^43*x8^20, x1^72*x6*x7^17, x1^72*x6*x7^7*x8^17, x1^72*x7^23*x8^12, x1^71*x5^61, x1^71*x5^5*x7^43, x1^71*x6*x7^43, x1^59*x2^77*x3^22, x1^59*x2^77*x5^5, x1^59*x2^77*x8^12, x1^59*x2^67*x3^22*x4, x1^59*x2^67*x4*x5^5, x1^59*x2^67*x5^8, x1^59*x2^67*x6, x1^59*x2^60*x3^45*x4, x1^59*x2^60*x3^45*x5^8, x1^59*x2^60*x3^45*x6, x1^59*x2^60*x3^22*x4*x8, x1^59*x2^60*x4*x5^5*x8, x1^59*x2^60*x4*x8^12, x1^59*x2^60*x5^8*x8, x1^59*x2^60*x6*x8, x1^59*x2^59*x3^22*x4*x7^11, x1^59*x2^59*x3^22*x4*x7^5*x8, x1^59*x2^59*x3^22*x7^23, x1^59*x2^59*x4*x5^5*x7^11, x1^59*x2^59*x4*x5^5*x7^5*x8, x1^59*x2^59*x4*x7^5*x8^12, x1^59*x2^59*x5^8*x7^11, x1^59*x2^59*x5^8*x7^5*x8, x1^59*x2^59*x5^5*x7^23, x1^59*x2^59*x6*x7^11, x1^59*x2^59*x6*x7^5*x8, x1^59*x2^59*x7^23*x8^12, x1^59*x2^45*x5^5*x7^43, x1^59*x2^45*x6*x7^43, x1^59*x2^21*x3^58, x1^59*x2^21*x3^47*x4, x1^59*x2^21*x3^47*x5^8, x1^59*x2^21*x3^47*x6, x1^59*x2^21*x3^45*x4*x7^5, x1^59*x2^21*x3^45*x5^8*x7^5, x1^59*x2^21*x3^45*x6*x7^5, x1^59*x2^21*x3^26*x4*x7^11, x1^59*x2^21*x3^26*x4*x7^5*x8, x1^59*x2^21*x3^26*x5^8*x7^11, x1^59*x2^21*x3^26*x5^8*x7^5*x8, x1^59*x2^21*x3^26*x6*x7^11, x1^59*x2^21*x3^26*x6*x7^5*x8, x1^59*x3^58*x7^17, x1^59*x3^58*x8^17, x1^59*x3^47*x4^2, x1^59*x3^47*x4*x8^17, x1^59*x3^47*x5^8*x8^17, x1^59*x3^47*x6*x8^17, x1^59*x3^45*x4^2*x7^5, x1^59*x3^26*x4^2*x7^11, x1^59*x3^26*x4^2*x7^5*x8, x1^59*x3^26*x4*x7^17, x1^59*x3^26*x4*x7^5*x8^17, x1^59*x3^26*x5^8*x7^17, x1^59*x3^26*x5^8*x7^5*x8^17, x1^59*x3^26*x6*x7^17, x1^59*x3^26*x6*x7^5*x8^17, x1^59*x3^26*x7^23, x1^59*x3^22*x7^43, x1^59*x3*x5^5*x7^43, x1^59*x3*x6*x7^43, x1^59*x5^5*x7^43*x8^11, x1^59*x6*x7^43*x8^11, x1^59*x7^43*x8^12, x1^56*x2^49*x4*x8^29, x1^56*x2^49*x5^8*x8^29, x1^56*x2^49*x6*x8^29, x1^56*x3^10*x4*x8^29, x1^56*x3^10*x5^8*x8^29, x1^56*x3^10*x6*x8^29, x1^56*x4^49, x1^56*x4^43*x5^5*x7^5, x1^56*x4^43*x6*x7^5, x1^56*x4^43*x7^5*x8^12, x1^56*x4^43*x8^20, x1^56*x4^10*x8^29, x1^56*x4*x7^7*x8^29, x1^56*x5^8*x7^7*x8^29, x1^56*x6^43*x8^29, x1^56*x6*x7^7*x8^29, x1^53*x2^21*x3^26*x5^43, x1^53*x2^21*x3^26*x5^27*x6^54, x1^53*x2^21*x3^26*x5^27*x7^5, x1^53*x2^21*x3^26*x5^21*x7^11, x1^53*x2^21*x3^26*x5^21*x7^5*x8, x1^53*x2^21*x3^26*x6^54*x8, x1^53*x2^21*x3^26*x6^41*x7^11, x1^53*x2^21*x3^26*x6^41*x7^5*x8, x1^53*x3^26*x4^4*x7^11, x1^53*x3^26*x4^4*x7^5*x8, x1^53*x3^26*x4^2*x5^43, x1^53*x3^26*x4^2*x5^27*x6^54, x1^53*x3^26*x4^2*x5^27*x7^5, x1^53*x3^26*x4^2*x5^21*x7^11, x1^53*x3^26*x4^2*x5^21*x7^5*x8, x1^53*x3^26*x4^2*x6^54*x8, x1^53*x3^26*x4^2*x6^41*x7^11, x1^53*x3^26*x4^2*x6^41*x7^5*x8, x1^53*x3^26*x4*x7^5*x8^18, x1^53*x3^26*x4*x8^20, x1^53*x3^26*x5^43*x8^17, x1^53*x3^26*x5^21*x7^17, x1^53*x3^26*x5^21*x7^5*x8^17, x1^53*x3^26*x5^8*x7^5*x8^18, x1^53*x3^26*x5^8*x8^20, x1^53*x3^26*x6^54*x8^17, x1^53*x3^26*x6^41*x7^17, x1^53*x3^26*x6^41*x7^5*x8^17, x1^53*x3^26*x6*x7^5*x8^18, x1^53*x3^26*x6*x8^20, x1^53*x3^26*x7^23*x8^18, x1^53*x3^22*x4^4*x7^43, x1^53*x3^22*x7^45, x1^53*x3^14*x4*x8^29, x1^53*x3^14*x5^8*x8^29, x1^53*x3^14*x6*x8^29, x1^53*x3^10*x4*x8^32, x1^53*x3^10*x5^13*x8^29, x1^53*x3^10*x5^8*x8^32, x1^53*x3^10*x6*x8^32, x1^53*x3*x4^4*x5^5*x7^43, x1^53*x3*x4^4*x6*x7^43, x1^53*x3*x5^21*x7^43, x1^53*x3*x5^5*x7^45, x1^53*x3*x6*x7^45, x1^53*x4^10*x5^13*x8^29, x1^53*x4^10*x8^32, x1^53*x4^4*x5^5*x7^43*x8^11, x1^53*x4^4*x6*x7^43*x8^11, x1^53*x4^4*x7^43*x8^12, x1^53*x4*x7^18*x8^29, x1^53*x4*x7^7*x8^32, x1^53*x5^47*x8^29, x1^53*x5^21*x7^43*x8^11, x1^53*x5^13*x6^43*x8^29, x1^53*x5^13*x7^7*x8^29, x1^53*x5^8*x7^18*x8^29, x1^53*x5^8*x7^7*x8^32, x1^53*x5^5*x7^45*x8^11, x1^53*x6^46*x8^29, x1^53*x6^43*x8^32, x1^53*x6^41*x7^43, x1^53*x6*x7^45*x8^11, x1^53*x6*x7^18*x8^29, x1^53*x6*x7^7*x8^32, x1^53*x7^45*x8^12, x1^53*x7^43*x8^18, x1^53*x7^23*x8^29, x1^32*x2^22*x3^26*x4^4*x7^11, x1^32*x2^22*x3^26*x4^4*x7^5*x8, x1^32*x2^22*x3^26*x6^54*x8, x1^32*x2^22*x3^26*x6^41*x7^11, x1^32*x2^22*x3^26*x6^41*x7^5*x8, x1^32*x2^22*x3^22*x4^4*x7^43, x1^32*x2^22*x3^22*x7^45, x1^32*x2^22*x3*x4^4*x5^5*x7^43, x1^32*x2^22*x3*x4^4*x6*x7^43, x1^32*x2^22*x3*x5^5*x7^45, x1^32*x2^22*x3*x6*x7^45, x1^32*x2^22*x6^41*x7^43, x1^32*x2^21*x3^27*x6^54*x8, x1^32*x2^21*x3^27*x6^41*x7^11, x1^32*x2^21*x3^27*x6^41*x7^5*x8, x1^32*x2^21*x3^26*x6^59, x1^32*x2^21*x3^26*x6^56*x7^11, x1^32*x2^21*x3^26*x6^56*x8, x1^32*x2^21*x6^64, x1^32*x3^27*x4^4*x7^11, x1^32*x3^27*x4^4*x7^5*x8, x1^32*x3^27*x4^2*x6^54*x8, x1^32*x3^27*x4^2*x6^41*x7^11, x1^32*x3^27*x4^2*x6^41*x7^5*x8, x1^32*x3^27*x6^41*x7^17, x1^32*x3^27*x7^45, x1^32*x3^26*x4^33*x6^54, x1^32*x3^26*x4^33*x7^5, x1^32*x3^26*x4^26*x6^54*x8, x1^32*x3^26*x4^26*x7^11, x1^32*x3^26*x4^26*x7^5*x8, x1^32*x3^26*x4^2*x6^59, x1^32*x3^26*x4^2*x6^56*x7^11, x1^32*x3^26*x4^2*x6^56*x8, x1^32*x3^26*x6^56*x7^17, x1^32*x3^22*x4^43*x7^5, x1^32*x3^22*x4^26*x7^43, x1^32*x3^22*x7^62, x1^32*x3^14*x4^49, x1^32*x3^14*x4^43*x5^5*x7^5, x1^32*x3^14*x4^43*x6*x7^5, x1^32*x3*x4^26*x5^5*x7^43, x1^32*x3*x4^26*x6*x7^43, x1^32*x3*x5^5*x7^62, x1^32*x3*x6*x7^62, x1^32*x4^49*x5^13, x1^32*x4^49*x6^46, x1^32*x4^49*x7^18, x1^32*x4^43*x5^13*x7^5, x1^32*x4^43*x5^5*x7^18, x1^32*x4^43*x6^54, x1^32*x4^43*x6^46*x7^5, x1^32*x4^43*x6*x7^18, x1^32*x4^30*x5^5*x7^43, x1^32*x4^30*x6*x7^43, x1^32*x4^26*x6^41*x7^43, x1^32*x4^2*x6^64, x1^32*x6^64*x7^17, x1^32*x6^56*x7^43, x1^32*x6^41*x7^62, x1^26*x3^47*x4^4, x1^26*x3^47*x4^2*x6^41, x1^26*x3^47*x4*x8^18, x1^26*x3^47*x6^41*x8^17, x1^26*x3^47*x6*x8^18, x1^26*x3^45*x4^2*x6^54, x1^26*x3^28*x4^2*x6^59, x1^26*x3^28*x4^2*x6^54*x8, x1^26*x3^27*x4^2*x6^54*x8^10, x1^26*x3^27*x4*x8^20, x1^26*x3^27*x6^54*x8^17, x1^26*x3^27*x6*x8^20, x1^26*x3^26*x4^2*x6^56*x8^10, x1^26*x3^26*x6^56*x8^17, x1^26*x4^2*x6^79, x1^26*x4^2*x6^64*x8^10, x1^26*x6^64*x8^17, x1^26*x6^56*x8^29, x1^19*x4^10*x8^35, x1^19*x4*x7^7*x8^35, x1^19*x6*x7^7*x8^35, x1^19*x7^23*x8^35, x1^6*x3^28*x4^33*x7^5, x1^6*x3^28*x4^4*x7^11, x1^6*x3^28*x4^4*x7^5*x8, x1^6*x3^28*x4^2*x6^41*x7^11, x1^6*x3^28*x4^2*x6^41*x7^5*x8, x1^6*x3^28*x6^41*x7^17, x1^6*x3^28*x7^45, x1^6*x3^27*x4^14*x8^20, x1^6*x3^27*x4^4*x7^5*x8^10, x1^6*x3^27*x4^2*x6^41*x7^5*x8^10, x1^6*x3^27*x4*x5*x8^20, x1^6*x3^27*x4*x7^5*x8^18, x1^6*x3^27*x4*x7*x8^20, x1^6*x3^27*x4*x8^31, x1^6*x3^27*x5^8*x7^5*x8^18, x1^6*x3^27*x5^8*x8^20, x1^6*x3^27*x5*x6*x8^20, x1^6*x3^27*x6^41*x7^17*x8^10, x1^6*x3^27*x6^41*x7^5*x8^17, x1^6*x3^27*x6*x7^5*x8^18, x1^6*x3^27*x6*x7*x8^20, x1^6*x3^27*x6*x8^31, x1^6*x3^27*x7^45*x8^10, x1^6*x3^27*x7^23*x8^18, x1^6*x3^26*x4^26*x7^5*x8^10, x1^6*x3^26*x4^26*x8^20, x1^6*x3^22*x4^26*x7^43*x8^10, x1^6*x3^22*x7^93, x1^6*x3^22*x7^62*x8^10, x1^6*x3^14*x4^26*x8^29, x1^6*x3^10*x4*x8^35, x1^6*x3^10*x5^8*x8^35, x1^6*x3^10*x6*x8^35, x1^6*x3^10*x8^54, x1^6*x3^5*x4^10*x8^35, x1^6*x3^5*x4*x7^7*x8^35, x1^6*x3^5*x6*x7^7*x8^35, x1^6*x3^5*x7^23*x8^35, x1^6*x3*x4^26*x5^5*x7^43*x8^10, x1^6*x3*x4^26*x6*x7^43*x8^10, x1^6*x3*x5^5*x7^62*x8^10, x1^6*x3*x6*x7^62*x8^10, x1^6*x4^30*x5^5*x7^43*x8^10, x1^6*x4^30*x6*x7^43*x8^10, x1^6*x4^26*x5^13*x8^29, x1^6*x4^26*x5^5*x7^43*x8^11, x1^6*x4^26*x6^41*x7^43*x8^10, x1^6*x4^26*x6*x7^43*x8^11, x1^6*x4^26*x7^43*x8^12, x1^6*x4^26*x7^18*x8^29, x1^6*x4^26*x8^32, x1^6*x4^11*x8^35, x1^6*x4^10*x5^4*x8^35, x1^6*x4^10*x6^14*x8^35, x1^6*x4^10*x8^38, x1^6*x4*x5^4*x7^7*x8^35, x1^6*x4*x7^7*x8^38, x1^6*x5^8*x7^7*x8^35, x1^6*x5^5*x7^93, x1^6*x5^5*x7^62*x8^11, x1^6*x5^4*x6*x7^7*x8^35, x1^6*x5^4*x7^23*x8^35, x1^6*x6^43*x8^35, x1^6*x6^41*x7^62*x8^10, x1^6*x6^14*x7^7*x8^35, x1^6*x6*x7^93, x1^6*x6*x7^62*x8^11, x1^6*x6*x7^7*x8^38, x1^6*x7^98, x1^6*x7^62*x8^12, x1^6*x7^37*x8^35, x1^6*x7^23*x8^38, x1^6*x7^7*x8^54, x1^6*x8^55, x1*x2^21*x3^59, x1*x2^21*x3^47*x5^21, x1*x2^21*x3^47*x6^41, x1*x2^21*x3^45*x5^21*x7^5, x1*x2^21*x3^45*x6^54, x1*x2^21*x3^45*x6^41*x7^5, x1*x2^21*x3^28*x6^59, x1*x2^21*x3^28*x6^54*x8, x1*x2^21*x3^28*x6^41*x7^11, x1*x2^21*x3^28*x6^41*x7^5*x8, x1*x2^21*x3^27*x5^21*x7^11, x1*x2^21*x3^27*x5^21*x7^5*x8, x1*x2^21*x3^27*x5^17*x6^54*x8, x1*x2^21*x3^27*x5^17*x6^41*x7^11, x1*x2^21*x3^27*x5^17*x6^41*x7^5*x8, x1*x2^21*x3^27*x6^54*x8^10, x1*x2^21*x3^27*x6^41*x7^5*x8^10, x1*x2^21*x3^26*x5^17*x6^59, x1*x2^21*x3^26*x5^17*x6^56*x7^11, x1*x2^21*x3^26*x5^17*x6^56*x8, x1*x2^21*x3^26*x6^56*x8^10, x1*x2^21*x5^17*x6^64, x1*x2^21*x6^79, x1*x2^21*x6^64*x8^10, x1*x2^12*x4^10*x8^35, x1*x2^12*x4*x7^7*x8^35, x1*x2^12*x6*x7^7*x8^35, x1*x2^12*x7^23*x8^35, x1*x2^11*x3^47*x4^4, x1*x2^11*x3^47*x4^2*x6^41, x1*x2^11*x3^47*x4*x8^18, x1*x2^11*x3^47*x6^41*x8^17, x1*x2^11*x3^47*x6*x8^18, x1*x2^11*x3^45*x4^2*x6^54, x1*x2^11*x3^28*x4^2*x6^59, x1*x2^11*x3^28*x4^2*x6^54*x8, x1*x2^11*x3^27*x4^2*x6^54*x8^10, x1*x2^11*x3^27*x4*x8^20, x1*x2^11*x3^27*x6^54*x8^17, x1*x2^11*x3^27*x6*x8^20, x1*x2^11*x3^26*x4^2*x6^56*x8^10, x1*x2^11*x3^26*x6^56*x8^17, x1*x2^11*x4^2*x6^79, x1*x2^11*x4^2*x6^64*x8^10, x1*x2^11*x6^64*x8^17, x1*x2^11*x6^56*x8^29, x1*x2*x3^28*x4^4*x7^11, x1*x2*x3^28*x4^4*x7^5*x8, x1*x2*x3^28*x4^2*x6^41*x7^11, x1*x2*x3^28*x4^2*x6^41*x7^5*x8, x1*x2*x3^28*x6^41*x7^17, x1*x2*x3^28*x7^45, x1*x2*x3^27*x4^14*x8^20, x1*x2*x3^27*x4^4*x7^5*x8^10, x1*x2*x3^27*x4^2*x6^41*x7^5*x8^10, x1*x2*x3^27*x4*x5*x8^20, x1*x2*x3^27*x4*x7^5*x8^18, x1*x2*x3^27*x4*x7*x8^20, x1*x2*x3^27*x4*x8^31, x1*x2*x3^27*x5^8*x7^5*x8^18, x1*x2*x3^27*x5^8*x8^20, x1*x2*x3^27*x5*x6*x8^20, x1*x2*x3^27*x6^41*x7^17*x8^10, x1*x2*x3^27*x6^41*x7^5*x8^17, x1*x2*x3^27*x6*x7^5*x8^18, x1*x2*x3^27*x6*x7*x8^20, x1*x2*x3^27*x6*x8^31, x1*x2*x3^27*x7^45*x8^10, x1*x2*x3^27*x7^23*x8^18, x1*x2*x3^22*x7^62*x8^10, x1*x2*x3^10*x4*x8^35, x1*x2*x3^10*x5^8*x8^35, x1*x2*x3^10*x6*x8^35, x1*x2*x3^5*x4^10*x8^35, x1*x2*x3^5*x4*x7^7*x8^35, x1*x2*x3^5*x6*x7^7*x8^35, x1*x2*x3^5*x7^23*x8^35, x1*x2*x3*x5^5*x7^62*x8^10, x1*x2*x3*x6*x7^62*x8^10, x1*x2*x4^11*x8^35, x1*x2*x4^10*x5^4*x8^35, x1*x2*x4^10*x6^14*x8^35, x1*x2*x4^10*x8^38, x1*x2*x4*x5^4*x7^7*x8^35, x1*x2*x4*x7^7*x8^38, x1*x2*x5^8*x7^7*x8^35, x1*x2*x5^5*x7^62*x8^11, x1*x2*x5^4*x6*x7^7*x8^35, x1*x2*x5^4*x7^23*x8^35, x1*x2*x6^43*x8^35, x1*x2*x6^41*x7^62*x8^10, x1*x2*x6^14*x7^7*x8^35, x1*x2*x6*x7^62*x8^11, x1*x2*x6*x7^7*x8^38, x1*x2*x7^62*x8^12, x1*x2*x7^37*x8^35, x1*x2*x7^23*x8^38, x1*x3^59*x4^2, x1*x3^59*x7^17, x1*x3^59*x8^17, x1*x3^58*x4^4, x1*x3^58*x4^2*x6^41, x1*x3^58*x6^41*x8^17, x1*x3^58*x8^18, x1*x3^47*x4^14, x1*x3^47*x4^4*x5, x1*x3^47*x4^4*x7, x1*x3^47*x4^2*x5^21, x1*x3^47*x4^2*x5*x6^41, x1*x3^47*x4^2*x6^41*x7, x1*x3^47*x4*x5*x8^18, x1*x3^47*x4*x7*x8^18, x1*x3^47*x5^21*x8^17, x1*x3^47*x5^8*x8^18, x1*x3^47*x5*x6^41*x8^17, x1*x3^47*x5*x6*x8^18, x1*x3^47*x6^41*x7*x8^17, x1*x3^47*x6*x7*x8^18, x1*x3^45*x4^14*x6^54, x1*x3^45*x4^4*x7^5, x1*x3^45*x4^2*x5^21*x7^5, x1*x3^45*x4^2*x5*x6^54, x1*x3^45*x4^2*x6^54*x7, x1*x3^45*x4^2*x6^41*x7^5, x1*x3^44*x4^14*x8^20, x1*x3^44*x4^4*x7^11, x1*x3^44*x4^4*x7^5*x8, x1*x3^44*x4^2*x6^41*x7^11, x1*x3^44*x4^2*x6^41*x7^5*x8, x1*x3^44*x4*x5*x8^20, x1*x3^44*x4*x7^5*x8^18, x1*x3^44*x4*x7*x8^20, x1*x3^44*x4*x8^31, x1*x3^44*x5^8*x7^5*x8^18, x1*x3^44*x5^8*x8^20, x1*x3^44*x5*x6*x8^20, x1*x3^44*x6^41*x7^17, x1*x3^44*x6^41*x7^5*x8^17, x1*x3^44*x6*x7^5*x8^18, x1*x3^44*x6*x7*x8^20, x1*x3^44*x6*x8^31, x1*x3^44*x7^45, x1*x3^44*x7^23*x8^18, x1*x3^28*x4^14*x6^59, x1*x3^28*x4^14*x6^54*x8, x1*x3^28*x4^2*x5*x6^59, x1*x3^28*x4^2*x5*x6^54*x8, x1*x3^28*x4^2*x6^59*x7, x1*x3^28*x4^2*x6^54*x7*x8, x1*x3^28*x4^2*x6^46*x7^11, x1*x3^28*x4^2*x6^46*x7^5*x8, x1*x3^28*x6^46*x7^17, x1*x3^27*x4^14*x6^54*x8^10, x1*x3^27*x4^14*x6^46*x8^20, x1*x3^27*x4^4*x5^17*x7^11, x1*x3^27*x4^4*x5^17*x7^5*x8, x1*x3^27*x4^2*x5^21*x7^11, x1*x3^27*x4^2*x5^21*x7^5*x8, x1*x3^27*x4^2*x5^17*x6^54*x8, x1*x3^27*x4^2*x5^17*x6^41*x7^11, x1*x3^27*x4^2*x5^17*x6^41*x7^5*x8, x1*x3^27*x4^2*x5*x6^54*x8^10, x1*x3^27*x4^2*x6^54*x7*x8^10, x1*x3^27*x4^2*x6^46*x7^5*x8^10, x1*x3^27*x5^21*x7^17, x1*x3^27*x5^21*x7^5*x8^17, x1*x3^27*x5^17*x6^41*x7^17, x1*x3^27*x5^17*x6^41*x7^5*x8^17, x1*x3^27*x5^17*x7^45, x1*x3^27*x5^17*x7^5*x8^18, x1*x3^27*x5^17*x8^20, x1*x3^27*x5*x6^54*x8^17, x1*x3^27*x5*x6^46*x8^20, x1*x3^27*x6^54*x7*x8^17, x1*x3^27*x6^46*x7^17*x8^10, x1*x3^27*x6^46*x7^5*x8^17, x1*x3^27*x6^46*x7*x8^20, x1*x3^27*x6^46*x8^31, x1*x3^26*x4^14*x6^56*x8^10, x1*x3^26*x4^2*x5^17*x6^59, x1*x3^26*x4^2*x5^17*x6^56*x7^11, x1*x3^26*x4^2*x5^17*x6^56*x8, x1*x3^26*x4^2*x5*x6^56*x8^10, x1*x3^26*x4^2*x6^56*x7*x8^10, x1*x3^26*x5^17*x6^56*x7^17, x1*x3^26*x5*x6^56*x8^17, x1*x3^26*x6^56*x7^17*x8^10, x1*x3^26*x6^56*x7*x8^17, x1*x3^10*x5^17*x8^35, x1*x3*x5^17*x7^62, x1*x4^14*x6^79, x1*x4^14*x6^64*x8^10, x1*x4^14*x6^56*x8^29, x1*x4^10*x5^17*x8^35, x1*x4^2*x5^17*x6^64, x1*x4^2*x5*x6^79, x1*x4^2*x5*x6^64*x8^10, x1*x4^2*x6^79*x7, x1*x4^2*x6^64*x7*x8^10, x1*x5^17*x6^64*x7^17, x1*x5^17*x6^56*x7^43, x1*x5^17*x6^43*x8^35, x1*x5^17*x6^41*x7^62, x1*x5^17*x7^62*x8^11, x1*x5^17*x7^7*x8^35, x1*x5*x6^64*x8^17, x1*x5*x6^56*x8^29, x1*x6^79*x7^17, x1*x6^64*x7^17*x8^10, x1*x6^64*x7*x8^17, x1*x6^56*x7^43*x8^10, x1*x6^56*x7*x8^29, x1*x6^56*x8^31, x1*x6^46*x7^62*x8^10, x1*x6^46*x8^35, x2^78*x3^22, x2^78*x5^5, x2^78*x6, x2^78*x8^12, x2^77*x8^18, x2^67*x3^22*x4^4, x2^67*x4^4*x5^5, x2^67*x4^4*x6, x2^67*x5^21, x2^67*x6^41, x2^60*x3^45*x4^4, x2^60*x3^45*x5^21, x2^60*x3^45*x6^41, x2^60*x3^22*x4^33, x2^60*x3^22*x4^4*x8, x2^60*x4^33*x5^5, x2^60*x4^33*x6, x2^60*x4^4*x5^5*x8, x2^60*x4^4*x6*x8, x2^60*x4^4*x8^12, x2^60*x4*x8^18, x2^60*x5^27, x2^60*x5^21*x8, x2^60*x5^8*x8^18, x2^60*x6^41*x8, x2^60*x6*x8^18, x2^59*x3^22*x4^33*x7^5, x2^59*x3^22*x4^4*x7^11, x2^59*x3^22*x4^4*x7^5*x8, x2^59*x4^33*x5^5*x7^5, x2^59*x4^33*x6^54, x2^59*x4^33*x6*x7^5, x2^59*x4^4*x5^5*x7^11, x2^59*x4^4*x5^5*x7^5*x8, x2^59*x4^4*x6*x7^11, x2^59*x4^4*x6*x7^5*x8, x2^59*x4^4*x7^5*x8^12, x2^59*x4*x7^5*x8^18, x2^59*x4*x8^20, x2^59*x5^43, x2^59*x5^27*x6^54, x2^59*x5^27*x7^5, x2^59*x5^21*x7^11, x2^59*x5^21*x7^5*x8, x2^59*x5^8*x7^5*x8^18, x2^59*x5^8*x8^20, x2^59*x6^59, x2^59*x6^54*x8, x2^59*x6^41*x7^11, x2^59*x6^41*x7^5*x8, x2^59*x6*x7^5*x8^18, x2^59*x6*x8^20, x2^59*x7^23*x8^18, x2^56*x4^49, x2^56*x4^43*x5^5*x7^5, x2^56*x4^43*x6*x7^5, x2^56*x4^43*x7^5*x8^12, x2^56*x4^43*x8^20, x2^56*x4*x8^29, x2^56*x5^8*x8^29, x2^56*x6*x8^29, x2^49*x4*x8^32, x2^49*x5^13*x8^29, x2^49*x5^8*x8^32, x2^49*x6*x8^32, x2^49*x8^54, x2^45*x4^4*x5^5*x7^43, x2^45*x4^4*x6*x7^43, x2^45*x5^61, x2^45*x5^21*x7^43, x2^45*x5^5*x7^45, x2^45*x6*x7^45, x2^40*x3^26*x4^33*x6^54, x2^40*x3^26*x4^33*x7^5, x2^40*x3^26*x4^4*x7^11, x2^40*x3^26*x4^4*x7^5*x8, x2^40*x3^26*x6^59, x2^40*x3^26*x6^54*x8, x2^40*x3^26*x6^41*x7^11, x2^40*x3^26*x6^41*x7^5*x8, x2^40*x3^22*x4^43*x7^5, x2^40*x3^22*x4^4*x7^43, x2^40*x3^22*x7^45, x2^40*x3^14*x4^49, x2^40*x3^14*x4^43*x5^5*x7^5, x2^40*x3^14*x4^43*x6*x7^5, x2^40*x3*x4^4*x5^5*x7^43, x2^40*x3*x4^4*x6*x7^43, x2^40*x3*x5^5*x7^45, x2^40*x3*x6*x7^45, x2^40*x4^49*x5^13, x2^40*x4^49*x6^46, x2^40*x4^49*x7^18, x2^40*x4^43*x5^13*x7^5, x2^40*x4^43*x5^5*x7^18, x2^40*x4^43*x6^54, x2^40*x4^43*x6^46*x7^5, x2^40*x4^43*x6*x7^18, x2^40*x4^30*x5^5*x7^43, x2^40*x4^30*x6*x7^43, x2^40*x6^64, x2^40*x6^41*x7^43, x2^22*x3^59, x2^22*x3^58*x8^18, x2^22*x3^47*x4^4, x2^22*x3^47*x4*x8^18, x2^22*x3^47*x5^21, x2^22*x3^47*x5^8*x8^18, x2^22*x3^47*x6^41, x2^22*x3^47*x6*x8^18, x2^22*x3^45*x4^4*x7^5, x2^22*x3^45*x5^21*x7^5, x2^22*x3^45*x6^54, x2^22*x3^45*x6^41*x7^5, x2^22*x3^28*x4^4*x7^11, x2^22*x3^28*x4^4*x7^5*x8, x2^22*x3^28*x6^59, x2^22*x3^28*x6^54*x8, x2^22*x3^28*x6^41*x7^11, x2^22*x3^28*x6^41*x7^5*x8, x2^22*x3^28*x7^45, x2^22*x3^26*x4^4*x5^17*x7^11, x2^22*x3^26*x4^4*x5^17*x7^5*x8, x2^22*x3^26*x4^4*x7^5*x8^10, x2^22*x3^26*x4*x7^5*x8^18, x2^22*x3^26*x4*x8^20, x2^22*x3^26*x5^43, x2^22*x3^26*x5^27*x6^54, x2^22*x3^26*x5^27*x7^5, x2^22*x3^26*x5^21*x7^11, x2^22*x3^26*x5^21*x7^5*x8, x2^22*x3^26*x5^17*x6^59, x2^22*x3^26*x5^17*x6^54*x8, x2^22*x3^26*x5^17*x6^41*x7^11, x2^22*x3^26*x5^17*x6^41*x7^5*x8, x2^22*x3^26*x5^8*x7^5*x8^18, x2^22*x3^26*x5^8*x8^20, x2^22*x3^26*x6^54*x8^10, x2^22*x3^26*x6^41*x7^5*x8^10, x2^22*x3^26*x6*x7^5*x8^18, x2^22*x3^26*x6*x8^20, x2^22*x3^26*x7^23*x8^18, x2^22*x3^22*x4^4*x7^43*x8^10, x2^22*x3^22*x7^45*x8^10, x2^22*x3^14*x4*x8^29, x2^22*x3^14*x5^8*x8^29, x2^22*x3^14*x6*x8^29, x2^22*x3^10*x4*x8^32, x2^22*x3^10*x5^13*x8^29, x2^22*x3^10*x5^8*x8^32, x2^22*x3^10*x6*x8^32, x2^22*x3*x4^4*x5^17*x7^43, x2^22*x3*x4^4*x5^5*x7^43*x8^10, x2^22*x3*x4^4*x6*x7^43*x8^10, x2^22*x3*x5^21*x7^43, x2^22*x3*x5^17*x7^45, x2^22*x3*x5^5*x7^45*x8^10, x2^22*x3*x6*x7^45*x8^10, x2^22*x4^10*x5^13*x8^29, x2^22*x4^10*x8^32, x2^22*x4^4*x5^5*x7^43*x8^11, x2^22*x4^4*x6*x7^43*x8^11, x2^22*x4^4*x7^43*x8^12, x2^22*x4*x7^18*x8^29, x2^22*x4*x7^7*x8^32, x2^22*x5^47*x8^29, x2^22*x5^21*x7^43*x8^11, x2^22*x5^17*x6^64, x2^22*x5^17*x6^41*x7^43, x2^22*x5^13*x6^43*x8^29, x2^22*x5^13*x7^7*x8^29, x2^22*x5^8*x7^18*x8^29, x2^22*x5^8*x7^7*x8^32, x2^22*x5^5*x7^45*x8^11, x2^22*x6^79, x2^22*x6^64*x8^10, x2^22*x6^46*x8^29, x2^22*x6^43*x8^32, x2^22*x6^41*x7^43*x8^10, x2^22*x6*x7^45*x8^11, x2^22*x6*x7^18*x8^29, x2^22*x6*x7^7*x8^32, x2^22*x7^45*x8^12, x2^22*x7^43*x8^18, x2^22*x7^23*x8^29, x2^21*x3^66, x2^21*x3^47*x5^27, x2^21*x3^27*x5^43, x2^21*x3^27*x5^27*x6^54, x2^21*x3^27*x5^27*x7^5, x2^21*x3^26*x5^50, x2^21*x3^26*x5^27*x6^56, x2^21*x5^27*x6^64, x2^21*x6^88, x2^11*x4^2*x6^88, x2^11*x6^88*x8^17, x2*x3^28*x4^33*x7^5, x2*x3^28*x4^23*x7^11, x2*x3^28*x4^23*x7^5*x8, x2*x3^28*x7^82, x2*x3^27*x4^23*x7^5*x8^10, x2*x3^27*x4^23*x8^20, x2*x3^26*x4^26*x7^5*x8^10, x2*x3^26*x4^26*x8^20, x2*x3^22*x4^26*x7^43*x8^10, x2*x3^22*x4^23*x7^62*x8^10, x2*x3^22*x7^93, x2*x3^22*x7^82*x8^10, x2*x3^14*x4^26*x8^29, x2*x3^10*x4*x8^48, x2*x3^10*x5^8*x8^48, x2*x3^10*x6*x8^48, x2*x3^10*x8^54, x2*x3*x4^26*x5^5*x7^43*x8^10, x2*x3*x4^26*x6*x7^43*x8^10, x2*x3*x4^23*x5^5*x7^62*x8^10, x2*x3*x4^23*x6*x7^62*x8^10, x2*x3*x5^5*x7^82*x8^10, x2*x3*x6*x7^82*x8^10, x2*x4^30*x5^5*x7^43*x8^10, x2*x4^30*x6*x7^43*x8^10, x2*x4^26*x5^13*x8^29, x2*x4^26*x5^5*x7^43*x8^11, x2*x4^26*x6^41*x7^43*x8^10, x2*x4^26*x6*x7^43*x8^11, x2*x4^26*x7^43*x8^12, x2*x4^26*x7^18*x8^29, x2*x4^26*x8^32, x2*x4^23*x5^5*x7^62*x8^11, x2*x4^23*x6^41*x7^62*x8^10, x2*x4^23*x6*x7^62*x8^11, x2*x4^23*x7^62*x8^12, x2*x4^23*x8^35, x2*x4^10*x8^48, x2*x4*x7^7*x8^48, x2*x5^8*x7^7*x8^48, x2*x5^5*x7^93, x2*x5^5*x7^82*x8^11, x2*x6^43*x8^48, x2*x6^41*x7^82*x8^10, x2*x6*x7^93, x2*x6*x7^82*x8^11, x2*x6*x7^7*x8^48, x2*x7^98, x2*x7^82*x8^12, x2*x7^23*x8^48, x2*x7^7*x8^54, x2*x8^55, x3^78, x3^66*x4^2, x3^66*x7^17, x3^66*x8^17, x3^58*x4^2*x6^88, x3^58*x6^88*x8^17, x3^58*x8^48, x3^47*x4^23, x3^47*x4^2*x5^27, x3^47*x5^27*x8^17, x3^45*x4^23*x6^54, x3^45*x4^23*x7^5, x3^44*x4^33*x7^5, x3^44*x4^23*x7^11, x3^44*x4^23*x7^5*x8, x3^44*x4^23*x8^20, x3^44*x4*x8^48, x3^44*x5^8*x8^48, x3^44*x6*x8^48, x3^44*x7^82, x3^44*x7^23*x8^48, x3^44*x8^54, x3^28*x4^49, x3^28*x4^36*x7^5, x3^28*x4^33*x6^54, x3^28*x4^33*x6^46*x7^5, x3^28*x4^23*x6^59, x3^28*x4^23*x6^54*x8, x3^28*x4^23*x6^46*x7^11, x3^28*x4^23*x6^46*x7^5*x8, x3^28*x6^46*x7^82, x3^27*x4^23*x5^17*x6^54*x8, x3^27*x4^23*x5^17*x7^11, x3^27*x4^23*x5^17*x7^5*x8, x3^27*x4^23*x5^17*x8^20, x3^27*x4^23*x6^54*x8^10, x3^27*x4^23*x6^46*x7^5*x8^10, x3^27*x4^23*x6^46*x8^20, x3^27*x4^2*x5^43, x3^27*x4^2*x5^27*x6^54, x3^27*x4^2*x5^27*x7^5, x3^27*x5^43*x8^17, x3^27*x5^27*x6^54*x8^17, x3^27*x5^27*x7^17, x3^27*x5^27*x7^5*x8^17, x3^27*x5^27*x8^20, x3^26*x4^36*x7^5*x8^10, x3^26*x4^36*x8^20, x3^26*x4^33*x5^17*x6^54, x3^26*x4^33*x5^17*x7^5, x3^26*x4^26*x5^43, x3^26*x4^26*x5^27*x6^54, x3^26*x4^26*x5^27*x7^5, x3^26*x4^26*x5^17*x6^54*x8, x3^26*x4^26*x5^17*x7^11, x3^26*x4^26*x5^17*x7^5*x8, x3^26*x4^26*x5^17*x8^20, x3^26*x4^26*x6^54*x8^10, x3^26*x4^26*x6^46*x7^5*x8^10, x3^26*x4^26*x6^46*x8^20, x3^26*x4^23*x5^17*x6^59, x3^26*x4^23*x5^17*x6^56*x7^11, x3^26*x4^23*x5^17*x6^56*x8, x3^26*x4^23*x6^56*x8^10, x3^26*x4^2*x5^50, x3^26*x4^2*x5^27*x6^56, x3^26*x5^51, x3^26*x5^50*x7^17, x3^26*x5^50*x8^17, x3^26*x5^27*x6^56*x7^17, x3^26*x5^27*x6^56*x8^17, x3^22*x4^43*x7^5*x8^10, x3^22*x4^36*x7^93, x3^22*x4^36*x7^43*x8^10, x3^14*x4^61, x3^14*x4^49*x8^10, x3^14*x4^43*x5^5*x7^5*x8^10, x3^14*x4^43*x6*x7^5*x8^10, x3^14*x4^43*x7^5*x8^12, x3^14*x4^43*x8^20, x3^14*x4^36*x8^29, x3^10*x5^27*x8^35, x3^10*x5^17*x8^48, x3*x4^26*x5^17*x7^43, x3*x4^23*x5^17*x7^62, x3*x5^61, x3*x5^50*x7^43, x3*x5^27*x7^62, x3*x5^17*x7^82, x4^65, x4^61*x5^13, x4^61*x6^46, x4^61*x7^18, x4^49*x5^17, x4^49*x5^13*x8^10, x4^49*x6^46*x8^10, x4^49*x7^93, x4^49*x7^18*x8^10, x4^43*x5^43, x4^43*x5^17*x6^54, x4^43*x5^17*x7^5, x4^43*x5^13*x7^5*x8^10, x4^43*x5^13*x8^20, x4^43*x5^5*x7^18*x8^10, x4^43*x6^54*x8^10, x4^43*x6^46*x7^5*x8^10, x4^43*x6^46*x8^20, x4^43*x6*x7^18*x8^10, x4^43*x7^18*x8^12, x4^36*x5^13*x8^29, x4^36*x5^5*x7^93, x4^36*x5^5*x7^43*x8^10, x4^36*x6*x7^93, x4^36*x6*x7^43*x8^10, x4^36*x7^98, x4^36*x7^43*x8^12, x4^36*x7^18*x8^29, x4^36*x8^32, x4^30*x5^61, x4^30*x5^17*x7^43, x4^26*x5^17*x6^41*x7^43, x4^26*x5^17*x7^43*x8^11, x4^26*x5^17*x8^29, x4^26*x6^46*x7^43*x8^10, x4^26*x6^46*x8^29, x4^23*x5^17*x6^64, x4^23*x5^17*x6^56*x7^43, x4^23*x5^17*x6^41*x7^62, x4^23*x5^17*x7^62*x8^11, x4^23*x5^17*x8^35, x4^23*x6^79, x4^23*x6^64*x8^10, x4^23*x6^56*x7^43*x8^10, x4^23*x6^56*x8^29, x4^23*x6^46*x7^62*x8^10, x4^23*x6^46*x8^35, x4^14*x6^88, x4^10*x5^27*x8^35, x4^10*x5^17*x8^48, x4^2*x5^27*x6^64, x4^2*x5*x6^88, x4^2*x6^95, x4^2*x6^88*x7, x5^73, x5^61*x6^41, x5^61*x8^11, x5^51*x6^64, x5^50*x6^41*x7^43, x5^50*x7^43*x8^11, x5^50*x8^29, x5^47*x8^35, x5^27*x6^64*x7^17, x5^27*x6^64*x8^17, x5^27*x6^56*x7^43, x5^27*x6^56*x8^29, x5^27*x6^43*x8^35, x5^27*x6^41*x7^62, x5^27*x7^62*x8^11, x5^27*x7^7*x8^35, x5^17*x6^43*x8^48, x5^17*x6^41*x7^82, x5^17*x7^93, x5^17*x7^82*x8^11, x5^17*x7^7*x8^48, x5^17*x8^55, x5*x6^88*x8^17, x6^96, x6^95*x8^17, x6^88*x7^17, x6^88*x7*x8^17, x6^88*x8^31, x6^79*x7^82, x6^46*x7^93, x6^46*x7^82*x8^10, x6^46*x8^48, x8^63 ); frobby-0.9.5/test/commonIdeals/t16.assoprimes000066400000000000000000000056451401527164200211360ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1*x2*x3*x4*x5*x7*x8, x1*x2*x3*x4*x5*x7, x1*x2*x3*x4*x5*x8, x1*x2*x3*x4*x6*x7*x8, x1*x2*x3*x4*x6*x7, x1*x2*x3*x4*x6*x8, x1*x2*x3*x4*x6, x1*x2*x3*x4*x7*x8, x1*x2*x3*x4*x7, x1*x2*x3*x4*x8, x1*x2*x3*x4, x1*x2*x3*x5*x6*x7*x8, x1*x2*x3*x5*x6*x7, x1*x2*x3*x5*x6*x8, x1*x2*x3*x5*x6, x1*x2*x3*x5*x7*x8, x1*x2*x3*x5*x7, x1*x2*x3*x5*x8, x1*x2*x3*x5, x1*x2*x3*x6*x7*x8, x1*x2*x3*x6*x7, x1*x2*x3*x6*x8, x1*x2*x3*x6, x1*x2*x3*x7*x8, x1*x2*x3*x7, x1*x2*x3, x1*x2*x4*x5*x7*x8, x1*x2*x4*x5*x7, x1*x2*x4*x5*x8, x1*x2*x4*x5, x1*x2*x4*x6*x8, x1*x2*x4*x6, x1*x2*x4*x7*x8, x1*x2*x4*x8, x1*x2*x4, x1*x2*x5*x6*x7*x8, x1*x2*x5*x6*x7, x1*x2*x5*x6, x1*x2*x5*x7*x8, x1*x2*x5*x7, x1*x2*x5*x8, x1*x2*x5, x1*x2*x6*x7*x8, x1*x2*x6*x7, x1*x2*x6*x8, x1*x2*x6, x1*x2*x7*x8, x1*x2*x8, x1*x2, x1*x3*x4*x5*x6*x7*x8, x1*x3*x4*x5*x6*x7, x1*x3*x4*x5*x6*x8, x1*x3*x4*x5*x6, x1*x3*x4*x5*x7*x8, x1*x3*x4*x5*x7, x1*x3*x4*x5*x8, x1*x3*x4*x5, x1*x3*x4*x6*x7*x8, x1*x3*x4*x6*x7, x1*x3*x4*x6*x8, x1*x3*x4*x6, x1*x3*x4*x7*x8, x1*x3*x4*x7, x1*x3*x4*x8, x1*x3*x4, x1*x3*x5*x6*x7*x8, x1*x3*x5*x6*x7, x1*x3*x5*x6*x8, x1*x3*x5*x7*x8, x1*x3*x5*x7, x1*x3*x5*x8, x1*x3*x5, x1*x3*x6*x7*x8, x1*x3*x6*x7, x1*x3*x6*x8, x1*x3*x6, x1*x3*x7*x8, x1*x3*x7, x1*x3*x8, x1*x3, x1*x4*x5*x6*x7, x1*x4*x5*x6*x8, x1*x4*x5*x6, x1*x4*x5*x7*x8, x1*x4*x5*x7, x1*x4*x5*x8, x1*x4*x5, x1*x4*x6*x7*x8, x1*x4*x6*x7, x1*x4*x6*x8, x1*x4*x6, x1*x4*x7*x8, x1*x4*x7, x1*x4*x8, x1*x4, x1*x5*x6*x7*x8, x1*x5*x6*x7, x1*x5*x6*x8, x1*x5*x6, x1*x5*x7*x8, x1*x5*x7, x1*x5*x8, x1*x5, x1*x6*x7*x8, x1*x6*x7, x1*x6*x8, x1*x6, x1*x7*x8, x1*x7, x1*x8, x1, x2*x3*x4*x5*x7*x8, x2*x3*x4*x5*x7, x2*x3*x4*x6*x7*x8, x2*x3*x4*x6*x7, x2*x3*x4*x6, x2*x3*x4*x7*x8, x2*x3*x4*x7, x2*x3*x4*x8, x2*x3*x4, x2*x3*x5*x6*x7*x8, x2*x3*x5*x6*x7, x2*x3*x5*x6*x8, x2*x3*x5*x6, x2*x3*x5*x7*x8, x2*x3*x5*x7, x2*x3*x5*x8, x2*x3*x5, x2*x3*x6*x7*x8, x2*x3*x6*x7, x2*x3*x6*x8, x2*x3*x6, x2*x3*x7*x8, x2*x3*x7, x2*x3*x8, x2*x3, x2*x4*x5*x7*x8, x2*x4*x5*x7, x2*x4*x5*x8, x2*x4*x5, x2*x4*x6*x7*x8, x2*x4*x6*x7, x2*x4*x6*x8, x2*x4*x6, x2*x4*x7*x8, x2*x4*x7, x2*x4*x8, x2*x4, x2*x5*x6*x7, x2*x5*x6*x8, x2*x5*x6, x2*x5*x7*x8, x2*x5*x7, x2*x5*x8, x2*x5, x2*x6*x7*x8, x2*x6*x7, x2*x6*x8, x2*x6, x2*x7*x8, x2*x7, x2*x8, x3*x4*x5*x6*x7, x3*x4*x5*x6*x8, x3*x4*x5*x6, x3*x4*x5*x7*x8, x3*x4*x5*x7, x3*x4*x5*x8, x3*x4*x5, x3*x4*x6*x7*x8, x3*x4*x6*x7, x3*x4*x6*x8, x3*x4*x6, x3*x4*x7*x8, x3*x4*x7, x3*x4*x8, x3*x4, x3*x5*x6*x7, x3*x5*x6*x8, x3*x5*x7*x8, x3*x5*x7, x3*x5*x8, x3*x5, x3*x6*x7, x3*x6*x8, x3*x7*x8, x3*x7, x3*x8, x3, x4*x5*x6*x7, x4*x5*x6, x4*x5*x7*x8, x4*x5*x7, x4*x5*x8, x4*x5, x4*x6*x7*x8, x4*x6*x7, x4*x6*x8, x4*x6, x4*x7*x8, x4*x7, x4*x8, x4, x5*x6*x7, x5*x6*x8, x5*x6, x5*x7*x8, x5*x7, x5*x8, x5, x6*x7*x8, x6*x7, x6*x8, x6, x8 ); frobby-0.9.5/test/commonIdeals/t16.dim000066400000000000000000000000021401527164200175000ustar00rootroot000000000000007 frobby-0.9.5/test/commonIdeals/t16.euler000066400000000000000000000000021401527164200200430ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t16.intersection000066400000000000000000000015061401527164200214470ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^99*x2^63*x3^26*x4^58*x5^70*x6^11*x7^17*x8^20, x1^94*x2^84*x3^48*x4^45*x5^80*x6^53*x8^5, x1^81*x2^73*x3^87*x4^70*x5^93*x6^85*x7^62*x8^30, x1^74*x2^74*x3^34*x4^67*x5^96*x6^4*x7^98*x8^37, x1^68*x2^45*x3^64*x4^20*x5^80*x6^20*x7^6*x8^58, x1^47*x2^63*x3^65*x4^55*x5^47*x6^43*x7^37*x8^33, x1^44*x2^29*x3^78*x4^16*x5^84*x6^53*x7^81*x8^36, x1^41*x2^7*x3^33*x4^77*x5^76*x6^58*x7^54*x8^50, x1^29*x2^40*x3^91*x4^51*x5^24*x6^58*x7^6*x8^57, x1^28*x2^26*x3^66*x4^38*x5^36*x6^35*x7^56*x8^39, x1^23*x2^36*x3^82*x4^71*x5^50*x6^56*x7^92*x8^13, x1^18*x2^64*x3^14*x4^79*x5^46*x6^3*x7^82*x8^51, x1^17*x3^70*x4^32*x5^92*x6^98*x7*x8^56, x1^13*x2^25*x3^45*x4^32*x5^54*x6^45*x7^94*x8^48, x1^12*x2^18*x3^47*x4^48*x5^70*x6^40*x7^88*x8^67, x1^6*x2^8*x3^34*x4^80*x5^89*x6^98*x7^76*x8^14 ); frobby-0.9.5/test/commonIdeals/t16.irrdecom000066400000000000000000001611561401527164200205550ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^99, x2^84, x3^91, x5^92, x7^37, x8^58 ); I = monomialIdeal( x1^99, x2^84, x3^91, x6^98, x7^37, x8^58 ); I = monomialIdeal( x1^99, x2^84, x3^87, x4^80, x7^92, x8^33 ); I = monomialIdeal( x1^99, x2^84, x3^87, x4^71, x8^33 ); I = monomialIdeal( x1^99, x2^84, x3^87, x6^98, x7^92, x8^33 ); I = monomialIdeal( x1^99, x2^84, x3^87, x7^76, x8^33 ); I = monomialIdeal( x1^99, x2^84, x3^82, x4^80, x8^33 ); I = monomialIdeal( x1^99, x2^84, x3^82, x5^89, x8^33 ); I = monomialIdeal( x1^99, x2^84, x3^82, x6^98, x8^33 ); I = monomialIdeal( x1^99, x2^84, x3^70, x7^37, x8^58 ); I = monomialIdeal( x1^99, x2^84, x3^65, x4^80, x5^96, x8^48 ); I = monomialIdeal( x1^99, x2^84, x3^65, x4^80, x7^98, x8^48 ); I = monomialIdeal( x1^99, x2^84, x3^65, x4^80, x7^94, x8^50 ); I = monomialIdeal( x1^99, x2^84, x3^65, x4^80, x8^37 ); I = monomialIdeal( x1^99, x2^84, x3^65, x4^79, x6^58, x7^94, x8^58 ); I = monomialIdeal( x1^99, x2^84, x3^65, x4^77, x7^94, x8^58 ); I = monomialIdeal( x1^99, x2^84, x3^65, x4^67, x8^48 ); I = monomialIdeal( x1^99, x2^84, x3^65, x5^96, x6^98, x8^48 ); I = monomialIdeal( x1^99, x2^84, x3^65, x5^89, x7^94, x8^50 ); I = monomialIdeal( x1^99, x2^84, x3^65, x5^89, x8^48 ); I = monomialIdeal( x1^99, x2^84, x3^65, x6^98, x7^98, x8^48 ); I = monomialIdeal( x1^99, x2^84, x3^65, x6^98, x7^94, x8^50 ); I = monomialIdeal( x1^99, x2^84, x3^65, x6^98, x8^37 ); I = monomialIdeal( x1^99, x2^84, x3^65, x6^58, x7^94, x8^51 ); I = monomialIdeal( x1^99, x2^84, x3^65, x6^58, x7^82, x8^58 ); I = monomialIdeal( x1^99, x2^84, x3^65, x7^76, x8^50 ); I = monomialIdeal( x1^99, x2^84, x3^65, x7^54, x8^58 ); I = monomialIdeal( x1^99, x2^84, x3^64, x4^79, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^99, x2^84, x3^64, x4^79, x6^58, x7^88 ); I = monomialIdeal( x1^99, x2^84, x3^64, x4^77, x7^94, x8^67 ); I = monomialIdeal( x1^99, x2^84, x3^64, x4^77, x7^88 ); I = monomialIdeal( x1^99, x2^84, x3^64, x6^58, x7^82 ); I = monomialIdeal( x1^99, x2^84, x3^64, x7^54 ); I = monomialIdeal( x1^99, x2^84, x4^80, x5^93, x7^92, x8^33 ); I = monomialIdeal( x1^99, x2^84, x4^80, x7^92, x8^30 ); I = monomialIdeal( x1^99, x2^84, x4^71, x5^93, x8^33 ); I = monomialIdeal( x1^99, x2^84, x4^71, x6^85, x8^33 ); I = monomialIdeal( x1^99, x2^84, x4^71, x8^30 ); I = monomialIdeal( x1^99, x2^84, x4^70, x8^33 ); I = monomialIdeal( x1^99, x2^84, x5^93, x6^98, x7^92, x8^33 ); I = monomialIdeal( x1^99, x2^84, x5^93, x7^76, x8^33 ); I = monomialIdeal( x1^99, x2^84, x5^92, x7^37, x8^57 ); I = monomialIdeal( x1^99, x2^84, x5^89, x7^92, x8^33 ); I = monomialIdeal( x1^99, x2^84, x6^98, x7^92, x8^30 ); I = monomialIdeal( x1^99, x2^84, x6^98, x7^37, x8^57 ); I = monomialIdeal( x1^99, x2^84, x6^85, x7^92, x8^33 ); I = monomialIdeal( x1^99, x2^84, x6^58, x7^37, x8^58 ); I = monomialIdeal( x1^99, x2^84, x6^56, x8^33 ); I = monomialIdeal( x1^99, x2^84, x7^76, x8^30 ); I = monomialIdeal( x1^99, x2^84, x7^62, x8^33 ); I = monomialIdeal( x1^99, x2^84, x7^37, x8^56 ); I = monomialIdeal( x1^99, x2^74, x3^66, x4^79, x6^43, x8^58 ); I = monomialIdeal( x1^99, x2^74, x3^66, x6^43, x8^51 ); I = monomialIdeal( x1^99, x2^74, x3^65, x4^80, x8^48 ); I = monomialIdeal( x1^99, x2^74, x3^65, x4^79, x6^45, x8^58 ); I = monomialIdeal( x1^99, x2^74, x3^65, x6^98, x8^48 ); I = monomialIdeal( x1^99, x2^74, x3^65, x6^45, x8^51 ); I = monomialIdeal( x1^99, x2^74, x3^64, x4^79, x6^45, x8^67 ); I = monomialIdeal( x1^99, x2^74, x3^64, x4^79, x6^40 ); I = monomialIdeal( x1^99, x2^74, x3^47, x4^79, x6^45 ); I = monomialIdeal( x1^99, x2^74, x3^45, x4^80, x8^50 ); I = monomialIdeal( x1^99, x2^74, x3^45, x4^79, x6^58 ); I = monomialIdeal( x1^99, x2^74, x3^45, x4^77 ); I = monomialIdeal( x1^99, x2^74, x3^45, x6^98, x8^50 ); I = monomialIdeal( x1^99, x2^74, x3^45, x6^58, x8^51 ); I = monomialIdeal( x1^99, x2^74, x4^79, x6^35, x8^58 ); I = monomialIdeal( x1^99, x2^74, x4^79, x6^20 ); I = monomialIdeal( x1^99, x2^74, x6^43, x8^39 ); I = monomialIdeal( x1^99, x2^74, x6^35, x8^51 ); I = monomialIdeal( x1^99, x2^73, x4^80, x7^92, x8^33 ); I = monomialIdeal( x1^99, x2^73, x4^71, x8^33 ); I = monomialIdeal( x1^99, x2^73, x6^98, x7^92, x8^33 ); I = monomialIdeal( x1^99, x2^73, x7^76, x8^33 ); I = monomialIdeal( x1^99, x2^64, x3^66, x5^80, x6^43, x7^88 ); I = monomialIdeal( x1^99, x2^64, x3^66, x5^80, x6^43, x8^67 ); I = monomialIdeal( x1^99, x2^64, x3^66, x5^80, x6^40 ); I = monomialIdeal( x1^99, x2^64, x3^66, x6^43, x8^58 ); I = monomialIdeal( x1^99, x2^64, x3^65, x5^80, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^99, x2^64, x3^65, x5^80, x6^58, x7^88 ); I = monomialIdeal( x1^99, x2^64, x3^65, x5^80, x6^45, x8^67 ); I = monomialIdeal( x1^99, x2^64, x3^65, x5^76, x7^94, x8^67 ); I = monomialIdeal( x1^99, x2^64, x3^65, x5^76, x7^88 ); I = monomialIdeal( x1^99, x2^64, x3^65, x6^58, x7^94, x8^58 ); I = monomialIdeal( x1^99, x2^64, x3^65, x6^45, x8^58 ); I = monomialIdeal( x1^99, x2^64, x3^64, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^99, x2^64, x3^64, x6^58, x7^88 ); I = monomialIdeal( x1^99, x2^64, x3^64, x6^45, x8^67 ); I = monomialIdeal( x1^99, x2^64, x3^64, x6^40 ); I = monomialIdeal( x1^99, x2^64, x3^47, x5^76, x7^94 ); I = monomialIdeal( x1^99, x2^64, x3^47, x6^58, x7^94 ); I = monomialIdeal( x1^99, x2^64, x3^47, x6^45 ); I = monomialIdeal( x1^99, x2^64, x3^45, x5^76 ); I = monomialIdeal( x1^99, x2^64, x3^45, x6^58 ); I = monomialIdeal( x1^99, x2^64, x3^33 ); I = monomialIdeal( x1^99, x2^64, x5^80, x6^35 ); I = monomialIdeal( x1^99, x2^64, x6^35, x8^58 ); I = monomialIdeal( x1^99, x2^64, x6^20 ); I = monomialIdeal( x1^99, x3^91, x5^80, x7^37 ); I = monomialIdeal( x1^99, x3^82, x5^80, x8^33 ); I = monomialIdeal( x1^99, x3^66, x4^79, x5^96, x6^43, x8^58 ); I = monomialIdeal( x1^99, x3^66, x4^79, x5^80, x6^43, x7^88 ); I = monomialIdeal( x1^99, x3^66, x4^79, x5^80, x6^43, x8^67 ); I = monomialIdeal( x1^99, x3^66, x4^79, x5^80, x6^40 ); I = monomialIdeal( x1^99, x3^66, x4^79, x6^43, x7^98, x8^58 ); I = monomialIdeal( x1^99, x3^66, x4^67, x6^43, x8^58 ); I = monomialIdeal( x1^99, x3^66, x5^96, x6^43, x8^51 ); I = monomialIdeal( x1^99, x3^66, x5^80, x6^43, x7^82 ); I = monomialIdeal( x1^99, x3^66, x6^43, x7^98, x8^51 ); I = monomialIdeal( x1^99, x3^66, x6^43, x7^82, x8^58 ); I = monomialIdeal( x1^99, x3^65, x4^79, x5^96, x6^45, x8^58 ); I = monomialIdeal( x1^99, x3^65, x4^79, x5^80, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^99, x3^65, x4^79, x5^80, x6^58, x7^88 ); I = monomialIdeal( x1^99, x3^65, x4^79, x5^80, x6^45, x8^67 ); I = monomialIdeal( x1^99, x3^65, x4^79, x5^76, x7^94, x8^67 ); I = monomialIdeal( x1^99, x3^65, x4^79, x5^76, x7^88 ); I = monomialIdeal( x1^99, x3^65, x4^79, x6^53, x7^94, x8^58 ); I = monomialIdeal( x1^99, x3^65, x4^79, x6^45, x7^98, x8^58 ); I = monomialIdeal( x1^99, x3^65, x4^77, x5^80, x7^94, x8^67 ); I = monomialIdeal( x1^99, x3^65, x4^77, x5^80, x7^88 ); I = monomialIdeal( x1^99, x3^65, x4^67, x6^53, x8^48 ); I = monomialIdeal( x1^99, x3^65, x4^67, x6^45, x8^58 ); I = monomialIdeal( x1^99, x3^65, x5^96, x6^53, x8^48 ); I = monomialIdeal( x1^99, x3^65, x5^96, x6^45, x8^51 ); I = monomialIdeal( x1^99, x3^65, x5^80, x6^58, x7^94, x8^51 ); I = monomialIdeal( x1^99, x3^65, x5^80, x6^58, x7^82 ); I = monomialIdeal( x1^99, x3^65, x5^80, x7^94, x8^50 ); I = monomialIdeal( x1^99, x3^65, x5^80, x7^54 ); I = monomialIdeal( x1^99, x3^65, x5^80, x8^48 ); I = monomialIdeal( x1^99, x3^65, x5^76, x7^94, x8^51 ); I = monomialIdeal( x1^99, x3^65, x5^76, x7^82 ); I = monomialIdeal( x1^99, x3^65, x6^53, x7^98, x8^48 ); I = monomialIdeal( x1^99, x3^65, x6^53, x7^94, x8^51 ); I = monomialIdeal( x1^99, x3^65, x6^53, x7^82, x8^58 ); I = monomialIdeal( x1^99, x3^65, x6^53, x8^37 ); I = monomialIdeal( x1^99, x3^65, x6^45, x7^98, x8^51 ); I = monomialIdeal( x1^99, x3^64, x4^79, x5^96, x6^45, x8^67 ); I = monomialIdeal( x1^99, x3^64, x4^79, x5^96, x6^40 ); I = monomialIdeal( x1^99, x3^64, x4^79, x6^53, x7^94, x8^67 ); I = monomialIdeal( x1^99, x3^64, x4^79, x6^53, x7^88 ); I = monomialIdeal( x1^99, x3^64, x4^79, x6^45, x7^98, x8^67 ); I = monomialIdeal( x1^99, x3^64, x4^79, x6^40, x7^98 ); I = monomialIdeal( x1^99, x3^64, x4^67, x6^45, x8^67 ); I = monomialIdeal( x1^99, x3^64, x4^67, x6^40 ); I = monomialIdeal( x1^99, x3^64, x6^53, x7^82 ); I = monomialIdeal( x1^99, x3^48, x4^80, x5^96, x8^48 ); I = monomialIdeal( x1^99, x3^48, x4^80, x7^98, x8^48 ); I = monomialIdeal( x1^99, x3^48, x4^80, x7^94, x8^50 ); I = monomialIdeal( x1^99, x3^48, x4^80, x8^37 ); I = monomialIdeal( x1^99, x3^48, x4^79, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^99, x3^48, x4^79, x6^58, x7^88 ); I = monomialIdeal( x1^99, x3^48, x4^77, x7^94, x8^67 ); I = monomialIdeal( x1^99, x3^48, x4^77, x7^88 ); I = monomialIdeal( x1^99, x3^48, x4^67, x8^48 ); I = monomialIdeal( x1^99, x3^48, x5^96, x6^98, x8^48 ); I = monomialIdeal( x1^99, x3^48, x5^89, x7^94, x8^50 ); I = monomialIdeal( x1^99, x3^48, x5^89, x8^48 ); I = monomialIdeal( x1^99, x3^48, x6^98, x7^98, x8^48 ); I = monomialIdeal( x1^99, x3^48, x6^98, x7^94, x8^50 ); I = monomialIdeal( x1^99, x3^48, x6^98, x8^37 ); I = monomialIdeal( x1^99, x3^48, x6^58, x7^94, x8^51 ); I = monomialIdeal( x1^99, x3^48, x6^58, x7^82 ); I = monomialIdeal( x1^99, x3^48, x7^76, x8^50 ); I = monomialIdeal( x1^99, x3^48, x7^54 ); I = monomialIdeal( x1^99, x3^47, x4^79, x5^96, x6^45 ); I = monomialIdeal( x1^99, x3^47, x4^79, x5^76, x7^94 ); I = monomialIdeal( x1^99, x3^47, x4^79, x6^58, x7^94 ); I = monomialIdeal( x1^99, x3^47, x4^79, x6^45, x7^98 ); I = monomialIdeal( x1^99, x3^47, x4^77, x7^94 ); I = monomialIdeal( x1^99, x3^47, x4^67, x6^45 ); I = monomialIdeal( x1^99, x3^45, x4^80, x5^96, x8^50 ); I = monomialIdeal( x1^99, x3^45, x4^80, x7^98, x8^50 ); I = monomialIdeal( x1^99, x3^45, x4^79, x5^96, x6^58 ); I = monomialIdeal( x1^99, x3^45, x4^79, x5^76 ); I = monomialIdeal( x1^99, x3^45, x4^79, x6^58, x7^98 ); I = monomialIdeal( x1^99, x3^45, x4^77, x5^96 ); I = monomialIdeal( x1^99, x3^45, x4^77, x7^98 ); I = monomialIdeal( x1^99, x3^45, x4^67 ); I = monomialIdeal( x1^99, x3^45, x5^96, x6^98, x8^50 ); I = monomialIdeal( x1^99, x3^45, x5^96, x6^58, x8^51 ); I = monomialIdeal( x1^99, x3^45, x5^89, x8^50 ); I = monomialIdeal( x1^99, x3^45, x5^76, x8^51 ); I = monomialIdeal( x1^99, x3^45, x6^98, x7^98, x8^50 ); I = monomialIdeal( x1^99, x3^45, x6^58, x7^98, x8^51 ); I = monomialIdeal( x1^99, x3^34, x4^79, x6^58 ); I = monomialIdeal( x1^99, x3^34, x4^77 ); I = monomialIdeal( x1^99, x3^34, x6^58, x8^51 ); I = monomialIdeal( x1^99, x3^34, x8^50 ); I = monomialIdeal( x1^99, x3^33, x4^79 ); I = monomialIdeal( x1^99, x3^33, x7^82 ); I = monomialIdeal( x1^99, x3^33, x8^51 ); I = monomialIdeal( x1^99, x4^79, x5^96, x6^35, x8^58 ); I = monomialIdeal( x1^99, x4^79, x5^96, x6^20 ); I = monomialIdeal( x1^99, x4^79, x5^80, x6^35 ); I = monomialIdeal( x1^99, x4^79, x6^35, x7^98, x8^58 ); I = monomialIdeal( x1^99, x4^79, x6^20, x7^98 ); I = monomialIdeal( x1^99, x4^71, x5^80, x8^33 ); I = monomialIdeal( x1^99, x4^67, x6^43, x8^39 ); I = monomialIdeal( x1^99, x4^67, x6^35, x8^58 ); I = monomialIdeal( x1^99, x4^67, x6^20 ); I = monomialIdeal( x1^99, x5^96, x6^43, x8^39 ); I = monomialIdeal( x1^99, x5^96, x6^35, x8^51 ); I = monomialIdeal( x1^99, x5^80, x6^58, x7^37 ); I = monomialIdeal( x1^99, x5^80, x6^56, x8^33 ); I = monomialIdeal( x1^99, x5^80, x6^43, x7^56 ); I = monomialIdeal( x1^99, x5^80, x6^35, x7^82 ); I = monomialIdeal( x1^99, x5^80, x7^92, x8^33 ); I = monomialIdeal( x1^99, x5^80, x7^37, x8^57 ); I = monomialIdeal( x1^99, x6^53, x7^37, x8^58 ); I = monomialIdeal( x1^99, x6^53, x8^33 ); I = monomialIdeal( x1^99, x6^43, x7^98, x8^39 ); I = monomialIdeal( x1^99, x6^43, x7^56, x8^58 ); I = monomialIdeal( x1^99, x6^43, x8^37 ); I = monomialIdeal( x1^99, x6^35, x7^98, x8^51 ); I = monomialIdeal( x1^99, x6^35, x7^82, x8^58 ); I = monomialIdeal( x1^99, x6^20, x7^82 ); I = monomialIdeal( x1^94, x3^91, x4^55, x5^92, x7^56, x8^58 ); I = monomialIdeal( x1^94, x3^91, x4^55, x6^98, x7^56, x8^58 ); I = monomialIdeal( x1^94, x3^91, x5^92, x7^37, x8^58 ); I = monomialIdeal( x1^94, x3^91, x6^98, x7^37, x8^58 ); I = monomialIdeal( x1^94, x3^87, x4^80, x7^92, x8^33 ); I = monomialIdeal( x1^94, x3^87, x4^71, x8^33 ); I = monomialIdeal( x1^94, x3^87, x6^98, x7^92, x8^33 ); I = monomialIdeal( x1^94, x3^87, x7^76, x8^33 ); I = monomialIdeal( x1^94, x3^82, x4^80, x8^33 ); I = monomialIdeal( x1^94, x3^82, x5^89, x8^33 ); I = monomialIdeal( x1^94, x3^82, x6^98, x8^33 ); I = monomialIdeal( x1^94, x3^82, x8^14 ); I = monomialIdeal( x1^94, x3^78, x4^55, x8^39 ); I = monomialIdeal( x1^94, x3^70, x4^55, x7^56, x8^58 ); I = monomialIdeal( x1^94, x3^70, x7^37, x8^58 ); I = monomialIdeal( x1^94, x3^70, x7^6 ); I = monomialIdeal( x1^94, x3^66, x4^55, x7^94, x8^58 ); I = monomialIdeal( x1^94, x3^66, x4^55, x8^48 ); I = monomialIdeal( x1^94, x3^65, x4^80, x5^96, x8^48 ); I = monomialIdeal( x1^94, x3^65, x4^80, x7^98, x8^48 ); I = monomialIdeal( x1^94, x3^65, x4^80, x7^94, x8^50 ); I = monomialIdeal( x1^94, x3^65, x4^80, x8^37 ); I = monomialIdeal( x1^94, x3^65, x4^79, x6^58, x7^94, x8^58 ); I = monomialIdeal( x1^94, x3^65, x4^77, x7^94, x8^58 ); I = monomialIdeal( x1^94, x3^65, x4^67, x8^48 ); I = monomialIdeal( x1^94, x3^65, x5^96, x6^98, x8^48 ); I = monomialIdeal( x1^94, x3^65, x5^89, x7^94, x8^50 ); I = monomialIdeal( x1^94, x3^65, x5^89, x8^48 ); I = monomialIdeal( x1^94, x3^65, x6^98, x7^98, x8^48 ); I = monomialIdeal( x1^94, x3^65, x6^98, x7^94, x8^50 ); I = monomialIdeal( x1^94, x3^65, x6^98, x8^37 ); I = monomialIdeal( x1^94, x3^65, x6^58, x7^94, x8^51 ); I = monomialIdeal( x1^94, x3^65, x6^58, x7^82, x8^58 ); I = monomialIdeal( x1^94, x3^65, x7^76, x8^50 ); I = monomialIdeal( x1^94, x3^65, x7^54, x8^58 ); I = monomialIdeal( x1^94, x3^64, x4^79, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^94, x3^64, x4^79, x6^58, x7^88 ); I = monomialIdeal( x1^94, x3^64, x4^77, x7^94, x8^67 ); I = monomialIdeal( x1^94, x3^64, x4^77, x7^88 ); I = monomialIdeal( x1^94, x3^64, x4^48, x7^94 ); I = monomialIdeal( x1^94, x3^64, x6^58, x7^82 ); I = monomialIdeal( x1^94, x3^64, x7^54 ); I = monomialIdeal( x1^94, x4^80, x5^93, x7^92, x8^33 ); I = monomialIdeal( x1^94, x4^80, x7^92, x8^30 ); I = monomialIdeal( x1^94, x4^71, x5^93, x8^33 ); I = monomialIdeal( x1^94, x4^71, x6^85, x8^33 ); I = monomialIdeal( x1^94, x4^71, x8^30 ); I = monomialIdeal( x1^94, x4^70, x8^33 ); I = monomialIdeal( x1^94, x4^55, x5^92, x7^56, x8^57 ); I = monomialIdeal( x1^94, x4^55, x5^84, x8^39 ); I = monomialIdeal( x1^94, x4^55, x6^98, x7^56, x8^57 ); I = monomialIdeal( x1^94, x4^55, x6^58, x7^56, x8^58 ); I = monomialIdeal( x1^94, x4^55, x7^81, x8^39 ); I = monomialIdeal( x1^94, x4^55, x7^56, x8^56 ); I = monomialIdeal( x1^94, x4^55, x8^36 ); I = monomialIdeal( x1^94, x4^51, x5^92, x7^56, x8^58 ); I = monomialIdeal( x1^94, x4^51, x6^98, x7^56, x8^58 ); I = monomialIdeal( x1^94, x5^93, x6^98, x7^92, x8^33 ); I = monomialIdeal( x1^94, x5^93, x7^76, x8^33 ); I = monomialIdeal( x1^94, x5^92, x7^37, x8^57 ); I = monomialIdeal( x1^94, x5^92, x7^6 ); I = monomialIdeal( x1^94, x5^89, x7^92, x8^33 ); I = monomialIdeal( x1^94, x6^98, x7^92, x8^30 ); I = monomialIdeal( x1^94, x6^98, x7^37, x8^57 ); I = monomialIdeal( x1^94, x6^98, x7^6 ); I = monomialIdeal( x1^94, x6^85, x7^92, x8^33 ); I = monomialIdeal( x1^94, x6^58, x7^37, x8^58 ); I = monomialIdeal( x1^94, x6^56, x8^33 ); I = monomialIdeal( x1^94, x7^92, x8^14 ); I = monomialIdeal( x1^94, x7^76, x8^30 ); I = monomialIdeal( x1^94, x7^62, x8^33 ); I = monomialIdeal( x1^94, x7^37, x8^56 ); I = monomialIdeal( x1^94, x7 ); I = monomialIdeal( x1^94, x8^13 ); I = monomialIdeal( x1^81, x4^80, x7^92, x8^33 ); I = monomialIdeal( x1^81, x4^71, x8^33 ); I = monomialIdeal( x1^81, x6^98, x7^92, x8^33 ); I = monomialIdeal( x1^81, x7^76, x8^33 ); I = monomialIdeal( x1^74, x3^66, x4^79, x6^43, x8^58 ); I = monomialIdeal( x1^74, x3^66, x6^43, x8^51 ); I = monomialIdeal( x1^74, x3^65, x4^80, x8^48 ); I = monomialIdeal( x1^74, x3^65, x4^79, x6^45, x8^58 ); I = monomialIdeal( x1^74, x3^65, x6^98, x8^48 ); I = monomialIdeal( x1^74, x3^65, x6^45, x8^51 ); I = monomialIdeal( x1^74, x3^64, x4^79, x6^45, x8^67 ); I = monomialIdeal( x1^74, x3^64, x4^79, x6^40 ); I = monomialIdeal( x1^74, x3^47, x4^79, x6^45 ); I = monomialIdeal( x1^74, x3^45, x4^80, x8^50 ); I = monomialIdeal( x1^74, x3^45, x4^79, x6^58 ); I = monomialIdeal( x1^74, x3^45, x4^77 ); I = monomialIdeal( x1^74, x3^45, x6^98, x8^50 ); I = monomialIdeal( x1^74, x3^45, x6^58, x8^51 ); I = monomialIdeal( x1^74, x4^79, x6^35, x8^58 ); I = monomialIdeal( x1^74, x4^79, x6^20 ); I = monomialIdeal( x1^74, x6^43, x8^39 ); I = monomialIdeal( x1^74, x6^35, x8^51 ); I = monomialIdeal( x1^68, x2^64, x3^66, x6^43, x7^88 ); I = monomialIdeal( x1^68, x2^64, x3^66, x6^43, x8^67 ); I = monomialIdeal( x1^68, x2^64, x3^66, x6^40 ); I = monomialIdeal( x1^68, x2^64, x3^65, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^68, x2^64, x3^65, x6^58, x7^88 ); I = monomialIdeal( x1^68, x2^64, x3^65, x6^45, x8^67 ); I = monomialIdeal( x1^68, x2^64, x6^35 ); I = monomialIdeal( x1^68, x2^63, x3^91, x4^77, x5^92, x7^56 ); I = monomialIdeal( x1^68, x2^63, x3^91, x4^77, x6^98, x7^56 ); I = monomialIdeal( x1^68, x2^63, x3^91, x5^92, x7^54 ); I = monomialIdeal( x1^68, x2^63, x3^91, x6^98, x7^54 ); I = monomialIdeal( x1^68, x2^63, x3^70, x4^77, x7^56 ); I = monomialIdeal( x1^68, x2^63, x3^70, x7^54 ); I = monomialIdeal( x1^68, x2^63, x3^66, x4^77, x7^94, x8^67 ); I = monomialIdeal( x1^68, x2^63, x3^66, x4^77, x7^88 ); I = monomialIdeal( x1^68, x2^63, x3^66, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^68, x2^63, x3^66, x6^58, x7^88 ); I = monomialIdeal( x1^68, x2^63, x3^66, x6^45, x8^67 ); I = monomialIdeal( x1^68, x2^63, x6^58, x7^56 ); I = monomialIdeal( x1^68, x3^91, x4^55, x5^92, x7^56 ); I = monomialIdeal( x1^68, x3^91, x4^55, x6^98, x7^56 ); I = monomialIdeal( x1^68, x3^91, x5^92, x7^37 ); I = monomialIdeal( x1^68, x3^91, x6^98, x7^37 ); I = monomialIdeal( x1^68, x3^78, x4^38, x5^92, x7^94 ); I = monomialIdeal( x1^68, x3^78, x4^38, x6^98, x7^94 ); I = monomialIdeal( x1^68, x3^78, x4^32 ); I = monomialIdeal( x1^68, x3^70, x4^55, x7^56 ); I = monomialIdeal( x1^68, x3^70, x4^38, x7^94 ); I = monomialIdeal( x1^68, x3^70, x7^37 ); I = monomialIdeal( x1^68, x3^66, x4^79, x6^43, x7^88 ); I = monomialIdeal( x1^68, x3^66, x4^79, x6^43, x8^67 ); I = monomialIdeal( x1^68, x3^66, x4^79, x6^40 ); I = monomialIdeal( x1^68, x3^66, x4^55, x6^45, x8^67 ); I = monomialIdeal( x1^68, x3^66, x4^55, x7^94, x8^67 ); I = monomialIdeal( x1^68, x3^66, x4^55, x7^88 ); I = monomialIdeal( x1^68, x3^66, x4^48, x6^45 ); I = monomialIdeal( x1^68, x3^66, x4^48, x7^94 ); I = monomialIdeal( x1^68, x3^66, x6^43, x7^82 ); I = monomialIdeal( x1^68, x3^65, x4^79, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^68, x3^65, x4^79, x6^58, x7^88 ); I = monomialIdeal( x1^68, x3^65, x4^79, x6^45, x8^67 ); I = monomialIdeal( x1^68, x3^65, x4^77, x7^94, x8^67 ); I = monomialIdeal( x1^68, x3^65, x4^77, x7^88 ); I = monomialIdeal( x1^68, x3^65, x6^58, x7^82 ); I = monomialIdeal( x1^68, x3^65, x7^54 ); I = monomialIdeal( x1^68, x4^79, x6^35 ); I = monomialIdeal( x1^68, x4^55, x6^58, x7^56 ); I = monomialIdeal( x1^68, x4^51, x5^92, x7^56 ); I = monomialIdeal( x1^68, x4^51, x6^98, x7^56 ); I = monomialIdeal( x1^68, x4^38, x5^92, x7^81 ); I = monomialIdeal( x1^68, x4^38, x5^84, x7^94 ); I = monomialIdeal( x1^68, x4^38, x6^98, x7^81 ); I = monomialIdeal( x1^68, x4^38, x6^53, x7^94 ); I = monomialIdeal( x1^68, x4^38, x6^45 ); I = monomialIdeal( x1^68, x4^32, x5^84 ); I = monomialIdeal( x1^68, x4^32, x6^53 ); I = monomialIdeal( x1^68, x4^32, x7^81 ); I = monomialIdeal( x1^68, x6^58, x7^37 ); I = monomialIdeal( x1^68, x6^43, x7^56 ); I = monomialIdeal( x1^68, x6^35, x7^82 ); I = monomialIdeal( x1^47, x2^64, x3^66, x5^76, x7^94, x8^67 ); I = monomialIdeal( x1^47, x2^64, x3^66, x5^76, x7^88 ); I = monomialIdeal( x1^47, x2^64, x3^66, x5^70, x6^45 ); I = monomialIdeal( x1^47, x2^64, x3^66, x5^70, x7^94 ); I = monomialIdeal( x1^47, x2^64, x3^66, x5^54 ); I = monomialIdeal( x1^47, x2^64, x3^66, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^47, x2^64, x3^66, x6^58, x7^88 ); I = monomialIdeal( x1^47, x2^64, x3^66, x6^45, x8^67 ); I = monomialIdeal( x1^47, x3^91, x4^77, x5^92, x7^56 ); I = monomialIdeal( x1^47, x3^91, x4^77, x6^98, x7^56 ); I = monomialIdeal( x1^47, x3^91, x5^92, x7^54 ); I = monomialIdeal( x1^47, x3^91, x5^76, x7^56 ); I = monomialIdeal( x1^47, x3^91, x6^98, x7^54 ); I = monomialIdeal( x1^47, x3^82, x4^80, x8^36 ); I = monomialIdeal( x1^47, x3^82, x5^89, x8^36 ); I = monomialIdeal( x1^47, x3^82, x5^84, x8^39 ); I = monomialIdeal( x1^47, x3^82, x6^98, x8^36 ); I = monomialIdeal( x1^47, x3^78, x4^80, x8^39 ); I = monomialIdeal( x1^47, x3^78, x5^89, x8^39 ); I = monomialIdeal( x1^47, x3^78, x6^98, x8^39 ); I = monomialIdeal( x1^47, x3^70, x4^77, x7^56 ); I = monomialIdeal( x1^47, x3^70, x7^54 ); I = monomialIdeal( x1^47, x3^66, x4^80, x7^94, x8^50 ); I = monomialIdeal( x1^47, x3^66, x4^80, x8^48 ); I = monomialIdeal( x1^47, x3^66, x4^79, x5^76, x7^94, x8^67 ); I = monomialIdeal( x1^47, x3^66, x4^79, x5^76, x7^88 ); I = monomialIdeal( x1^47, x3^66, x4^79, x5^70, x6^45 ); I = monomialIdeal( x1^47, x3^66, x4^79, x5^70, x7^94 ); I = monomialIdeal( x1^47, x3^66, x4^79, x5^54 ); I = monomialIdeal( x1^47, x3^66, x4^79, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^47, x3^66, x4^79, x6^58, x7^88 ); I = monomialIdeal( x1^47, x3^66, x4^79, x6^45, x8^67 ); I = monomialIdeal( x1^47, x3^66, x4^77, x7^94, x8^67 ); I = monomialIdeal( x1^47, x3^66, x4^77, x7^88 ); I = monomialIdeal( x1^47, x3^66, x5^89, x7^94, x8^50 ); I = monomialIdeal( x1^47, x3^66, x5^89, x8^48 ); I = monomialIdeal( x1^47, x3^66, x5^76, x7^94, x8^51 ); I = monomialIdeal( x1^47, x3^66, x5^76, x7^82 ); I = monomialIdeal( x1^47, x3^66, x5^54, x8^51 ); I = monomialIdeal( x1^47, x3^66, x6^98, x7^94, x8^50 ); I = monomialIdeal( x1^47, x3^66, x6^98, x8^48 ); I = monomialIdeal( x1^47, x3^66, x6^58, x7^94, x8^51 ); I = monomialIdeal( x1^47, x3^66, x6^58, x7^82 ); I = monomialIdeal( x1^47, x3^66, x6^45, x8^51 ); I = monomialIdeal( x1^47, x3^66, x7^76, x8^50 ); I = monomialIdeal( x1^47, x4^80, x7^92, x8^36 ); I = monomialIdeal( x1^47, x4^80, x7^81, x8^39 ); I = monomialIdeal( x1^47, x4^77, x5^92, x7^56, x8^57 ); I = monomialIdeal( x1^47, x4^77, x6^98, x7^56, x8^57 ); I = monomialIdeal( x1^47, x4^77, x7^56, x8^56 ); I = monomialIdeal( x1^47, x4^71, x5^84, x8^39 ); I = monomialIdeal( x1^47, x4^71, x8^36 ); I = monomialIdeal( x1^47, x5^92, x7^54, x8^57 ); I = monomialIdeal( x1^47, x5^89, x7^92, x8^36 ); I = monomialIdeal( x1^47, x5^89, x7^81, x8^39 ); I = monomialIdeal( x1^47, x5^84, x6^56, x8^39 ); I = monomialIdeal( x1^47, x5^84, x7^92, x8^39 ); I = monomialIdeal( x1^47, x5^76, x7^56, x8^57 ); I = monomialIdeal( x1^47, x5^50, x8^39 ); I = monomialIdeal( x1^47, x6^98, x7^92, x8^36 ); I = monomialIdeal( x1^47, x6^98, x7^81, x8^39 ); I = monomialIdeal( x1^47, x6^98, x7^54, x8^57 ); I = monomialIdeal( x1^47, x6^58, x7^56 ); I = monomialIdeal( x1^47, x6^56, x8^36 ); I = monomialIdeal( x1^47, x6^53, x8^39 ); I = monomialIdeal( x1^47, x7^76, x8^39 ); I = monomialIdeal( x1^47, x7^56, x8^50 ); I = monomialIdeal( x1^47, x7^54, x8^56 ); I = monomialIdeal( x1^44, x2^36, x4^80, x8^39 ); I = monomialIdeal( x1^44, x2^36, x5^89, x8^39 ); I = monomialIdeal( x1^44, x2^36, x6^98, x8^39 ); I = monomialIdeal( x1^44, x3^82, x4^80, x8^39 ); I = monomialIdeal( x1^44, x3^82, x5^89, x8^39 ); I = monomialIdeal( x1^44, x3^82, x6^98, x8^39 ); I = monomialIdeal( x1^44, x4^80, x7^92, x8^39 ); I = monomialIdeal( x1^44, x4^71, x8^39 ); I = monomialIdeal( x1^44, x4^38, x5^92, x7^94 ); I = monomialIdeal( x1^44, x4^38, x6^98, x7^94 ); I = monomialIdeal( x1^44, x4^38, x7^94, x8^56 ); I = monomialIdeal( x1^44, x4^38, x8^48 ); I = monomialIdeal( x1^44, x4^32 ); I = monomialIdeal( x1^44, x5^89, x7^92, x8^39 ); I = monomialIdeal( x1^44, x6^98, x7^92, x8^39 ); I = monomialIdeal( x1^44, x6^56, x8^39 ); I = monomialIdeal( x1^41, x2^64, x3^66, x4^80, x7^94, x8^67 ); I = monomialIdeal( x1^41, x2^64, x3^66, x4^80, x7^88 ); I = monomialIdeal( x1^41, x2^64, x3^66, x5^89, x7^94, x8^67 ); I = monomialIdeal( x1^41, x2^64, x3^66, x5^89, x7^88 ); I = monomialIdeal( x1^41, x2^64, x3^66, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^41, x2^64, x3^66, x6^98, x7^88 ); I = monomialIdeal( x1^41, x2^64, x3^47, x4^80, x7^94 ); I = monomialIdeal( x1^41, x2^64, x3^47, x5^89, x7^94 ); I = monomialIdeal( x1^41, x2^64, x3^47, x6^98, x7^94 ); I = monomialIdeal( x1^41, x2^64, x3^45, x4^80 ); I = monomialIdeal( x1^41, x2^64, x3^45, x5^89 ); I = monomialIdeal( x1^41, x2^64, x3^45, x6^98 ); I = monomialIdeal( x1^41, x2^64, x3^34 ); I = monomialIdeal( x1^41, x2^40, x5^92, x7^56 ); I = monomialIdeal( x1^41, x2^40, x6^98, x7^56 ); I = monomialIdeal( x1^41, x2^26, x3^70, x4^80, x7^94, x8^67 ); I = monomialIdeal( x1^41, x2^26, x3^70, x4^80, x7^88 ); I = monomialIdeal( x1^41, x2^26, x3^70, x7^76 ); I = monomialIdeal( x1^41, x2^26, x4^80, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^41, x2^26, x4^80, x5^92, x7^88 ); I = monomialIdeal( x1^41, x2^26, x4^80, x7^94, x8^56 ); I = monomialIdeal( x1^41, x2^26, x5^92, x7^76 ); I = monomialIdeal( x1^41, x2^26, x5^89, x7^94, x8^67 ); I = monomialIdeal( x1^41, x2^26, x5^89, x7^88 ); I = monomialIdeal( x1^41, x2^26, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^41, x2^26, x6^98, x7^88 ); I = monomialIdeal( x1^41, x2^26, x7^76, x8^56 ); I = monomialIdeal( x1^41, x2^25, x3^70, x4^80, x8^67 ); I = monomialIdeal( x1^41, x2^25, x3^47, x4^80 ); I = monomialIdeal( x1^41, x2^25, x3^47, x5^89 ); I = monomialIdeal( x1^41, x2^25, x3^47, x6^98 ); I = monomialIdeal( x1^41, x2^25, x4^80, x5^92, x8^67 ); I = monomialIdeal( x1^41, x2^25, x4^80, x8^56 ); I = monomialIdeal( x1^41, x2^25, x5^89, x8^67 ); I = monomialIdeal( x1^41, x2^25, x6^98, x8^67 ); I = monomialIdeal( x1^41, x2^18, x3^70, x4^80 ); I = monomialIdeal( x1^41, x2^18, x4^80, x5^92 ); I = monomialIdeal( x1^41, x2^18, x5^89 ); I = monomialIdeal( x1^41, x2^18, x6^98 ); I = monomialIdeal( x1^41, x2^8, x3^70 ); I = monomialIdeal( x1^41, x2^8, x5^92 ); I = monomialIdeal( x1^41, x2^8, x8^56 ); I = monomialIdeal( x1^41, x3^91, x5^92, x7^56 ); I = monomialIdeal( x1^41, x3^91, x6^98, x7^56 ); I = monomialIdeal( x1^41, x3^70, x7^56 ); I = monomialIdeal( x1^41, x3^66, x4^80, x7^94, x8^51 ); I = monomialIdeal( x1^41, x3^66, x4^80, x7^82 ); I = monomialIdeal( x1^41, x3^66, x4^79, x7^94, x8^67 ); I = monomialIdeal( x1^41, x3^66, x4^79, x7^88 ); I = monomialIdeal( x1^41, x3^66, x5^89, x7^94, x8^51 ); I = monomialIdeal( x1^41, x3^66, x5^89, x7^82 ); I = monomialIdeal( x1^41, x3^66, x6^98, x7^94, x8^51 ); I = monomialIdeal( x1^41, x3^66, x6^98, x7^82 ); I = monomialIdeal( x1^41, x3^66, x7^76 ); I = monomialIdeal( x1^41, x3^47, x4^79, x7^94 ); I = monomialIdeal( x1^41, x3^45, x4^80, x8^51 ); I = monomialIdeal( x1^41, x3^45, x4^79 ); I = monomialIdeal( x1^41, x3^45, x5^89, x8^51 ); I = monomialIdeal( x1^41, x3^45, x6^98, x8^51 ); I = monomialIdeal( x1^41, x3^34, x7^82 ); I = monomialIdeal( x1^41, x3^34, x8^51 ); I = monomialIdeal( x1^41, x5^92, x7^56, x8^57 ); I = monomialIdeal( x1^41, x6^98, x7^56, x8^57 ); I = monomialIdeal( x1^41, x7^56, x8^56 ); I = monomialIdeal( x1^29, x5^92, x7^56 ); I = monomialIdeal( x1^29, x5^36 ); I = monomialIdeal( x1^29, x6^98, x7^56 ); I = monomialIdeal( x1^28, x2^64, x3^82, x4^80, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^64, x3^82, x4^80, x7^94, x8^56 ); I = monomialIdeal( x1^28, x2^64, x3^82, x5^89, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^64, x3^82, x5^70, x7^94 ); I = monomialIdeal( x1^28, x2^64, x3^82, x5^54 ); I = monomialIdeal( x1^28, x2^64, x3^82, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^64, x3^70, x4^80, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^64, x3^70, x4^80, x7^88 ); I = monomialIdeal( x1^28, x2^64, x4^80, x5^92, x7^92, x8^67 ); I = monomialIdeal( x1^28, x2^64, x4^80, x5^92, x7^88 ); I = monomialIdeal( x1^28, x2^64, x4^80, x7^92, x8^56 ); I = monomialIdeal( x1^28, x2^64, x5^89, x7^92, x8^67 ); I = monomialIdeal( x1^28, x2^64, x5^89, x7^88 ); I = monomialIdeal( x1^28, x2^64, x5^70, x6^56, x7^94 ); I = monomialIdeal( x1^28, x2^64, x5^70, x6^45 ); I = monomialIdeal( x1^28, x2^64, x5^70, x7^92 ); I = monomialIdeal( x1^28, x2^64, x5^54, x6^56 ); I = monomialIdeal( x1^28, x2^64, x5^50 ); I = monomialIdeal( x1^28, x2^64, x6^98, x7^92, x8^67 ); I = monomialIdeal( x1^28, x2^64, x6^98, x7^88 ); I = monomialIdeal( x1^28, x2^64, x6^56, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^64, x6^45, x8^67 ); I = monomialIdeal( x1^28, x2^64, x6^40 ); I = monomialIdeal( x1^28, x2^36, x4^80, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^36, x4^80, x7^94, x8^56 ); I = monomialIdeal( x1^28, x2^36, x4^80, x8^48 ); I = monomialIdeal( x1^28, x2^36, x5^89, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^36, x5^89, x8^48 ); I = monomialIdeal( x1^28, x2^36, x5^70, x7^94 ); I = monomialIdeal( x1^28, x2^36, x5^54 ); I = monomialIdeal( x1^28, x2^36, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^36, x6^98, x8^48 ); I = monomialIdeal( x1^28, x3^82, x4^80, x7^94, x8^51 ); I = monomialIdeal( x1^28, x3^82, x4^80, x8^48 ); I = monomialIdeal( x1^28, x3^82, x4^79, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^28, x3^82, x4^79, x5^70, x7^94 ); I = monomialIdeal( x1^28, x3^82, x4^79, x5^54 ); I = monomialIdeal( x1^28, x3^82, x4^79, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^28, x3^82, x4^79, x7^94, x8^56 ); I = monomialIdeal( x1^28, x3^82, x5^89, x7^94, x8^51 ); I = monomialIdeal( x1^28, x3^82, x5^89, x8^48 ); I = monomialIdeal( x1^28, x3^82, x5^54, x8^51 ); I = monomialIdeal( x1^28, x3^82, x6^98, x7^94, x8^51 ); I = monomialIdeal( x1^28, x3^82, x6^98, x8^48 ); I = monomialIdeal( x1^28, x3^70, x4^80, x7^82 ); I = monomialIdeal( x1^28, x3^70, x4^79, x7^94, x8^67 ); I = monomialIdeal( x1^28, x3^70, x4^79, x7^88 ); I = monomialIdeal( x1^28, x3^70, x4^48, x7^94 ); I = monomialIdeal( x1^28, x3^70, x7^76 ); I = monomialIdeal( x1^28, x4^80, x5^92, x7^82 ); I = monomialIdeal( x1^28, x4^80, x7^92, x8^51 ); I = monomialIdeal( x1^28, x4^80, x7^82, x8^56 ); I = monomialIdeal( x1^28, x4^79, x5^92, x7^92, x8^67 ); I = monomialIdeal( x1^28, x4^79, x5^92, x7^88 ); I = monomialIdeal( x1^28, x4^79, x5^70, x6^56, x7^94 ); I = monomialIdeal( x1^28, x4^79, x5^70, x6^45 ); I = monomialIdeal( x1^28, x4^79, x5^70, x7^92 ); I = monomialIdeal( x1^28, x4^79, x5^54, x6^56 ); I = monomialIdeal( x1^28, x4^79, x5^50 ); I = monomialIdeal( x1^28, x4^79, x6^98, x7^92, x8^67 ); I = monomialIdeal( x1^28, x4^79, x6^98, x7^88 ); I = monomialIdeal( x1^28, x4^79, x6^56, x7^94, x8^67 ); I = monomialIdeal( x1^28, x4^79, x6^45, x8^67 ); I = monomialIdeal( x1^28, x4^79, x6^40 ); I = monomialIdeal( x1^28, x4^79, x7^92, x8^56 ); I = monomialIdeal( x1^28, x4^71, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^28, x4^71, x5^70, x7^94 ); I = monomialIdeal( x1^28, x4^71, x5^54 ); I = monomialIdeal( x1^28, x4^71, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^28, x4^71, x7^94, x8^56 ); I = monomialIdeal( x1^28, x4^71, x8^48 ); I = monomialIdeal( x1^28, x4^48, x5^92, x7^94 ); I = monomialIdeal( x1^28, x4^48, x6^98, x7^94 ); I = monomialIdeal( x1^28, x4^48, x6^45 ); I = monomialIdeal( x1^28, x5^92, x7^76 ); I = monomialIdeal( x1^28, x5^89, x7^92, x8^51 ); I = monomialIdeal( x1^28, x5^89, x7^82 ); I = monomialIdeal( x1^28, x5^54, x6^56, x8^51 ); I = monomialIdeal( x1^28, x5^50, x8^51 ); I = monomialIdeal( x1^28, x5^46 ); I = monomialIdeal( x1^28, x6^98, x7^92, x8^51 ); I = monomialIdeal( x1^28, x6^98, x7^82 ); I = monomialIdeal( x1^28, x6^56, x7^94, x8^51 ); I = monomialIdeal( x1^28, x6^56, x8^48 ); I = monomialIdeal( x1^28, x6^45, x8^51 ); I = monomialIdeal( x1^28, x7^76, x8^56 ); I = monomialIdeal( x1^23, x2^64, x4^80, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^23, x2^64, x4^80, x7^94, x8^56 ); I = monomialIdeal( x1^23, x2^64, x5^89, x7^94, x8^67 ); I = monomialIdeal( x1^23, x2^64, x5^70, x7^94 ); I = monomialIdeal( x1^23, x2^64, x5^54 ); I = monomialIdeal( x1^23, x2^64, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^23, x4^80, x7^94, x8^51 ); I = monomialIdeal( x1^23, x4^80, x8^48 ); I = monomialIdeal( x1^23, x4^79, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^23, x4^79, x5^70, x7^94 ); I = monomialIdeal( x1^23, x4^79, x5^54 ); I = monomialIdeal( x1^23, x4^79, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^23, x4^79, x7^94, x8^56 ); I = monomialIdeal( x1^23, x5^89, x7^94, x8^51 ); I = monomialIdeal( x1^23, x5^89, x8^48 ); I = monomialIdeal( x1^23, x5^54, x8^51 ); I = monomialIdeal( x1^23, x6^98, x7^94, x8^51 ); I = monomialIdeal( x1^23, x6^98, x8^48 ); I = monomialIdeal( x1^23, x8^14 ); I = monomialIdeal( x1^18, x3^70, x4^80, x7^94, x8^67 ); I = monomialIdeal( x1^18, x3^70, x4^80, x7^88 ); I = monomialIdeal( x1^18, x3^47, x4^80, x7^94 ); I = monomialIdeal( x1^18, x3^47, x5^89, x7^94 ); I = monomialIdeal( x1^18, x3^47, x6^98, x7^94 ); I = monomialIdeal( x1^18, x3^47, x6^45 ); I = monomialIdeal( x1^18, x3^45, x4^80 ); I = monomialIdeal( x1^18, x3^45, x5^89 ); I = monomialIdeal( x1^18, x3^45, x6^98 ); I = monomialIdeal( x1^18, x3^34 ); I = monomialIdeal( x1^18, x4^80, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^18, x4^80, x5^92, x7^88 ); I = monomialIdeal( x1^18, x4^80, x7^94, x8^56 ); I = monomialIdeal( x1^18, x5^89, x7^94, x8^67 ); I = monomialIdeal( x1^18, x5^89, x7^88 ); I = monomialIdeal( x1^18, x5^70, x6^45 ); I = monomialIdeal( x1^18, x5^70, x7^94 ); I = monomialIdeal( x1^18, x5^54 ); I = monomialIdeal( x1^18, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^18, x6^98, x7^88 ); I = monomialIdeal( x1^18, x6^45, x8^67 ); I = monomialIdeal( x1^18, x6^40 ); I = monomialIdeal( x1^17, x2^25, x4^80, x8^67 ); I = monomialIdeal( x1^17, x2^25, x4^48 ); I = monomialIdeal( x1^17, x2^18, x4^80 ); I = monomialIdeal( x1^17, x2^8 ); I = monomialIdeal( x1^17, x4^80, x7^94, x8^67 ); I = monomialIdeal( x1^17, x4^80, x7^88 ); I = monomialIdeal( x1^17, x4^48, x7^94 ); I = monomialIdeal( x1^17, x7^76 ); I = monomialIdeal( x1^13, x3^47, x4^80 ); I = monomialIdeal( x1^13, x3^47, x5^89 ); I = monomialIdeal( x1^13, x3^47, x6^98 ); I = monomialIdeal( x1^13, x4^80, x8^67 ); I = monomialIdeal( x1^13, x4^48 ); I = monomialIdeal( x1^13, x5^89, x8^67 ); I = monomialIdeal( x1^13, x5^70 ); I = monomialIdeal( x1^13, x6^98, x8^67 ); I = monomialIdeal( x1^12, x4^80 ); I = monomialIdeal( x1^12, x5^89 ); I = monomialIdeal( x1^12, x6^98 ); I = monomialIdeal( x1^6 ); I = monomialIdeal( x2^84, x3^91, x4^58, x5^92, x7^37, x8^58 ); I = monomialIdeal( x2^84, x3^91, x4^58, x6^98, x7^37, x8^58 ); I = monomialIdeal( x2^84, x3^91, x4^55, x5^92, x7^56, x8^58 ); I = monomialIdeal( x2^84, x3^91, x4^55, x6^98, x7^56, x8^58 ); I = monomialIdeal( x2^84, x3^91, x5^92, x7^17, x8^58 ); I = monomialIdeal( x2^84, x3^91, x6^98, x7^17, x8^58 ); I = monomialIdeal( x2^84, x3^82, x4^80, x8^20 ); I = monomialIdeal( x2^84, x3^82, x5^89, x8^20 ); I = monomialIdeal( x2^84, x3^82, x6^98, x8^20 ); I = monomialIdeal( x2^84, x3^82, x8^14 ); I = monomialIdeal( x2^84, x3^78, x4^55, x8^39 ); I = monomialIdeal( x2^84, x3^70, x4^58, x7^37, x8^58 ); I = monomialIdeal( x2^84, x3^70, x4^55, x7^56, x8^58 ); I = monomialIdeal( x2^84, x3^70, x7^17, x8^58 ); I = monomialIdeal( x2^84, x3^70, x7^6 ); I = monomialIdeal( x2^84, x3^66, x4^55, x7^94, x8^58 ); I = monomialIdeal( x2^84, x3^66, x4^55, x8^48 ); I = monomialIdeal( x2^84, x3^65, x4^58, x7^94, x8^58 ); I = monomialIdeal( x2^84, x3^65, x4^58, x8^48 ); I = monomialIdeal( x2^84, x3^64, x4^58, x7^94, x8^67 ); I = monomialIdeal( x2^84, x3^64, x4^58, x7^88 ); I = monomialIdeal( x2^84, x3^64, x4^48, x7^94 ); I = monomialIdeal( x2^84, x3^64, x7^17 ); I = monomialIdeal( x2^84, x4^80, x7^92, x8^20 ); I = monomialIdeal( x2^84, x4^71, x8^20 ); I = monomialIdeal( x2^84, x4^58, x5^92, x7^37, x8^57 ); I = monomialIdeal( x2^84, x4^58, x6^98, x7^37, x8^57 ); I = monomialIdeal( x2^84, x4^58, x6^58, x7^37, x8^58 ); I = monomialIdeal( x2^84, x4^58, x7^37, x8^56 ); I = monomialIdeal( x2^84, x4^58, x8^33 ); I = monomialIdeal( x2^84, x4^55, x5^92, x7^56, x8^57 ); I = monomialIdeal( x2^84, x4^55, x5^84, x8^39 ); I = monomialIdeal( x2^84, x4^55, x6^98, x7^56, x8^57 ); I = monomialIdeal( x2^84, x4^55, x6^58, x7^56, x8^58 ); I = monomialIdeal( x2^84, x4^55, x7^81, x8^39 ); I = monomialIdeal( x2^84, x4^55, x7^56, x8^56 ); I = monomialIdeal( x2^84, x4^55, x8^36 ); I = monomialIdeal( x2^84, x4^51, x5^92, x7^56, x8^58 ); I = monomialIdeal( x2^84, x4^51, x6^98, x7^56, x8^58 ); I = monomialIdeal( x2^84, x5^92, x7^17, x8^57 ); I = monomialIdeal( x2^84, x5^92, x7^6 ); I = monomialIdeal( x2^84, x5^89, x7^92, x8^20 ); I = monomialIdeal( x2^84, x6^98, x7^92, x8^20 ); I = monomialIdeal( x2^84, x6^98, x7^17, x8^57 ); I = monomialIdeal( x2^84, x6^98, x7^6 ); I = monomialIdeal( x2^84, x6^58, x7^17, x8^58 ); I = monomialIdeal( x2^84, x6^56, x8^20 ); I = monomialIdeal( x2^84, x7^92, x8^14 ); I = monomialIdeal( x2^84, x7^76, x8^20 ); I = monomialIdeal( x2^84, x7^17, x8^56 ); I = monomialIdeal( x2^84, x7 ); I = monomialIdeal( x2^84, x8^13 ); I = monomialIdeal( x2^74, x4^79, x6^11 ); I = monomialIdeal( x2^74, x6^11, x8^51 ); I = monomialIdeal( x2^64, x3^66, x5^70, x6^43 ); I = monomialIdeal( x2^64, x3^66, x5^47 ); I = monomialIdeal( x2^64, x3^65, x5^70, x6^45 ); I = monomialIdeal( x2^64, x3^65, x5^70, x7^94 ); I = monomialIdeal( x2^64, x3^65, x5^54 ); I = monomialIdeal( x2^64, x3^45, x5^70 ); I = monomialIdeal( x2^64, x3^26 ); I = monomialIdeal( x2^64, x5^70, x6^35 ); I = monomialIdeal( x2^64, x6^11 ); I = monomialIdeal( x2^63, x3^91, x4^77, x5^92, x7^56, x8^58 ); I = monomialIdeal( x2^63, x3^91, x4^77, x5^80, x7^56 ); I = monomialIdeal( x2^63, x3^91, x4^77, x6^98, x7^56, x8^58 ); I = monomialIdeal( x2^63, x3^91, x5^92, x7^54, x8^58 ); I = monomialIdeal( x2^63, x3^91, x5^80, x7^54 ); I = monomialIdeal( x2^63, x3^91, x5^76, x7^56 ); I = monomialIdeal( x2^63, x3^91, x6^98, x7^54, x8^58 ); I = monomialIdeal( x2^63, x3^82, x4^80, x8^36 ); I = monomialIdeal( x2^63, x3^82, x5^89, x8^36 ); I = monomialIdeal( x2^63, x3^82, x5^84, x8^39 ); I = monomialIdeal( x2^63, x3^82, x6^98, x8^36 ); I = monomialIdeal( x2^63, x3^78, x4^80, x8^39 ); I = monomialIdeal( x2^63, x3^78, x5^89, x8^39 ); I = monomialIdeal( x2^63, x3^78, x6^98, x8^39 ); I = monomialIdeal( x2^63, x3^70, x4^77, x7^56, x8^58 ); I = monomialIdeal( x2^63, x3^70, x7^54, x8^58 ); I = monomialIdeal( x2^63, x3^66, x4^80, x7^94, x8^50 ); I = monomialIdeal( x2^63, x3^66, x4^80, x8^48 ); I = monomialIdeal( x2^63, x3^66, x4^77, x5^80, x7^94, x8^67 ); I = monomialIdeal( x2^63, x3^66, x4^77, x5^80, x7^88 ); I = monomialIdeal( x2^63, x3^66, x4^77, x7^94, x8^58 ); I = monomialIdeal( x2^63, x3^66, x5^89, x7^94, x8^50 ); I = monomialIdeal( x2^63, x3^66, x5^89, x8^48 ); I = monomialIdeal( x2^63, x3^66, x5^80, x6^58, x7^94, x8^67 ); I = monomialIdeal( x2^63, x3^66, x5^80, x6^58, x7^88 ); I = monomialIdeal( x2^63, x3^66, x5^80, x6^45, x8^67 ); I = monomialIdeal( x2^63, x3^66, x5^80, x6^40 ); I = monomialIdeal( x2^63, x3^66, x5^76, x7^94, x8^67 ); I = monomialIdeal( x2^63, x3^66, x5^76, x7^88 ); I = monomialIdeal( x2^63, x3^66, x5^70, x6^45 ); I = monomialIdeal( x2^63, x3^66, x5^70, x7^94 ); I = monomialIdeal( x2^63, x3^66, x5^54 ); I = monomialIdeal( x2^63, x3^66, x6^98, x7^94, x8^50 ); I = monomialIdeal( x2^63, x3^66, x6^98, x8^48 ); I = monomialIdeal( x2^63, x3^66, x6^58, x7^94, x8^58 ); I = monomialIdeal( x2^63, x3^66, x6^45, x8^58 ); I = monomialIdeal( x2^63, x3^66, x7^76, x8^50 ); I = monomialIdeal( x2^63, x3^64, x4^77, x7^94, x8^67 ); I = monomialIdeal( x2^63, x3^64, x4^77, x7^88 ); I = monomialIdeal( x2^63, x3^64, x6^58, x7^94, x8^67 ); I = monomialIdeal( x2^63, x3^64, x6^58, x7^88 ); I = monomialIdeal( x2^63, x3^64, x6^45, x8^67 ); I = monomialIdeal( x2^63, x3^64, x6^40 ); I = monomialIdeal( x2^63, x3^64, x7^54 ); I = monomialIdeal( x2^63, x3^47, x4^77, x7^94 ); I = monomialIdeal( x2^63, x3^47, x5^76, x7^94 ); I = monomialIdeal( x2^63, x3^47, x6^58, x7^94 ); I = monomialIdeal( x2^63, x3^47, x6^45 ); I = monomialIdeal( x2^63, x3^45, x4^80, x8^50 ); I = monomialIdeal( x2^63, x3^45, x4^77 ); I = monomialIdeal( x2^63, x3^45, x5^89, x8^50 ); I = monomialIdeal( x2^63, x3^45, x5^76 ); I = monomialIdeal( x2^63, x3^45, x6^98, x8^50 ); I = monomialIdeal( x2^63, x3^45, x6^58 ); I = monomialIdeal( x2^63, x3^34, x8^50 ); I = monomialIdeal( x2^63, x3^33 ); I = monomialIdeal( x2^63, x4^80, x7^92, x8^36 ); I = monomialIdeal( x2^63, x4^80, x7^81, x8^39 ); I = monomialIdeal( x2^63, x4^77, x5^92, x7^56, x8^57 ); I = monomialIdeal( x2^63, x4^77, x6^98, x7^56, x8^57 ); I = monomialIdeal( x2^63, x4^77, x7^56, x8^56 ); I = monomialIdeal( x2^63, x4^71, x5^84, x8^39 ); I = monomialIdeal( x2^63, x4^71, x8^36 ); I = monomialIdeal( x2^63, x5^92, x7^54, x8^57 ); I = monomialIdeal( x2^63, x5^89, x7^92, x8^36 ); I = monomialIdeal( x2^63, x5^89, x7^81, x8^39 ); I = monomialIdeal( x2^63, x5^84, x6^56, x8^39 ); I = monomialIdeal( x2^63, x5^84, x7^92, x8^39 ); I = monomialIdeal( x2^63, x5^80, x6^58, x7^56 ); I = monomialIdeal( x2^63, x5^80, x6^35 ); I = monomialIdeal( x2^63, x5^76, x7^56, x8^57 ); I = monomialIdeal( x2^63, x5^50, x8^39 ); I = monomialIdeal( x2^63, x6^98, x7^92, x8^36 ); I = monomialIdeal( x2^63, x6^98, x7^81, x8^39 ); I = monomialIdeal( x2^63, x6^98, x7^54, x8^57 ); I = monomialIdeal( x2^63, x6^58, x7^56, x8^58 ); I = monomialIdeal( x2^63, x6^56, x8^36 ); I = monomialIdeal( x2^63, x6^53, x8^39 ); I = monomialIdeal( x2^63, x6^35, x8^58 ); I = monomialIdeal( x2^63, x6^20 ); I = monomialIdeal( x2^63, x7^76, x8^39 ); I = monomialIdeal( x2^63, x7^56, x8^50 ); I = monomialIdeal( x2^63, x7^54, x8^56 ); I = monomialIdeal( x2^45, x3^91, x4^77, x5^92, x7^56 ); I = monomialIdeal( x2^45, x3^91, x4^77, x6^98, x7^56 ); I = monomialIdeal( x2^45, x3^91, x5^92, x7^54 ); I = monomialIdeal( x2^45, x3^91, x6^98, x7^54 ); I = monomialIdeal( x2^45, x3^78, x4^38, x5^92, x7^94 ); I = monomialIdeal( x2^45, x3^78, x4^38, x6^98, x7^94 ); I = monomialIdeal( x2^45, x3^78, x4^32 ); I = monomialIdeal( x2^45, x3^70, x4^77, x7^56 ); I = monomialIdeal( x2^45, x3^70, x4^38, x7^94 ); I = monomialIdeal( x2^45, x3^70, x7^54 ); I = monomialIdeal( x2^45, x3^66, x4^77, x7^94, x8^67 ); I = monomialIdeal( x2^45, x3^66, x4^77, x7^88 ); I = monomialIdeal( x2^45, x3^66, x4^48, x6^45 ); I = monomialIdeal( x2^45, x3^66, x4^48, x7^94 ); I = monomialIdeal( x2^45, x3^66, x6^58, x7^94, x8^67 ); I = monomialIdeal( x2^45, x3^66, x6^58, x7^88 ); I = monomialIdeal( x2^45, x3^66, x6^45, x8^67 ); I = monomialIdeal( x2^45, x3^66, x6^40 ); I = monomialIdeal( x2^45, x4^51, x5^92, x7^56 ); I = monomialIdeal( x2^45, x4^51, x6^98, x7^56 ); I = monomialIdeal( x2^45, x4^38, x5^92, x7^81 ); I = monomialIdeal( x2^45, x4^38, x5^84, x7^94 ); I = monomialIdeal( x2^45, x4^38, x6^98, x7^81 ); I = monomialIdeal( x2^45, x4^38, x6^53, x7^94 ); I = monomialIdeal( x2^45, x4^38, x6^45 ); I = monomialIdeal( x2^45, x4^32, x5^84 ); I = monomialIdeal( x2^45, x4^32, x6^53 ); I = monomialIdeal( x2^45, x4^32, x7^81 ); I = monomialIdeal( x2^45, x6^58, x7^56 ); I = monomialIdeal( x2^45, x6^35 ); I = monomialIdeal( x2^40, x4^77, x5^92, x7^56 ); I = monomialIdeal( x2^40, x4^77, x6^98, x7^56 ); I = monomialIdeal( x2^40, x5^92, x7^54 ); I = monomialIdeal( x2^40, x5^76, x7^56 ); I = monomialIdeal( x2^40, x5^36 ); I = monomialIdeal( x2^40, x6^98, x7^54 ); I = monomialIdeal( x2^36, x4^80, x8^36 ); I = monomialIdeal( x2^36, x5^89, x8^36 ); I = monomialIdeal( x2^36, x5^84, x8^39 ); I = monomialIdeal( x2^36, x6^98, x8^36 ); I = monomialIdeal( x2^36, x8^14 ); I = monomialIdeal( x2^29, x4^80, x8^39 ); I = monomialIdeal( x2^29, x4^38, x5^92, x7^94 ); I = monomialIdeal( x2^29, x4^38, x6^98, x7^94 ); I = monomialIdeal( x2^29, x4^38, x7^94, x8^56 ); I = monomialIdeal( x2^29, x4^38, x8^48 ); I = monomialIdeal( x2^29, x4^32 ); I = monomialIdeal( x2^29, x5^89, x8^39 ); I = monomialIdeal( x2^29, x6^98, x8^39 ); I = monomialIdeal( x2^26, x3^70, x4^77, x7^94, x8^67 ); I = monomialIdeal( x2^26, x3^70, x4^77, x7^88 ); I = monomialIdeal( x2^26, x3^70, x4^48, x7^94 ); I = monomialIdeal( x2^26, x4^80, x7^94, x8^50 ); I = monomialIdeal( x2^26, x4^80, x8^48 ); I = monomialIdeal( x2^26, x4^77, x5^92, x7^94, x8^67 ); I = monomialIdeal( x2^26, x4^77, x5^92, x7^88 ); I = monomialIdeal( x2^26, x4^77, x6^98, x7^94, x8^67 ); I = monomialIdeal( x2^26, x4^77, x6^98, x7^88 ); I = monomialIdeal( x2^26, x4^77, x7^94, x8^56 ); I = monomialIdeal( x2^26, x4^48, x5^92, x7^94 ); I = monomialIdeal( x2^26, x4^48, x6^98, x7^94 ); I = monomialIdeal( x2^26, x4^48, x6^45 ); I = monomialIdeal( x2^26, x5^89, x7^94, x8^50 ); I = monomialIdeal( x2^26, x5^89, x8^48 ); I = monomialIdeal( x2^26, x5^76, x7^94, x8^67 ); I = monomialIdeal( x2^26, x5^76, x7^88 ); I = monomialIdeal( x2^26, x5^70, x6^45 ); I = monomialIdeal( x2^26, x5^70, x7^94 ); I = monomialIdeal( x2^26, x5^54 ); I = monomialIdeal( x2^26, x6^98, x7^94, x8^50 ); I = monomialIdeal( x2^26, x6^98, x8^48 ); I = monomialIdeal( x2^26, x6^58, x7^94, x8^67 ); I = monomialIdeal( x2^26, x6^58, x7^88 ); I = monomialIdeal( x2^26, x6^45, x8^67 ); I = monomialIdeal( x2^26, x6^40 ); I = monomialIdeal( x2^26, x7^76, x8^50 ); I = monomialIdeal( x2^25, x3^70, x4^77, x8^67 ); I = monomialIdeal( x2^25, x3^70, x4^48 ); I = monomialIdeal( x2^25, x3^47, x4^77 ); I = monomialIdeal( x2^25, x3^47, x5^76 ); I = monomialIdeal( x2^25, x3^47, x6^58 ); I = monomialIdeal( x2^25, x4^80, x8^50 ); I = monomialIdeal( x2^25, x4^77, x5^92, x8^67 ); I = monomialIdeal( x2^25, x4^77, x6^98, x8^67 ); I = monomialIdeal( x2^25, x4^77, x8^56 ); I = monomialIdeal( x2^25, x4^48, x5^92 ); I = monomialIdeal( x2^25, x4^48, x6^98 ); I = monomialIdeal( x2^25, x5^89, x8^50 ); I = monomialIdeal( x2^25, x5^76, x8^67 ); I = monomialIdeal( x2^25, x5^70 ); I = monomialIdeal( x2^25, x6^98, x8^50 ); I = monomialIdeal( x2^25, x6^58, x8^67 ); I = monomialIdeal( x2^18, x3^70, x4^77 ); I = monomialIdeal( x2^18, x4^77, x5^92 ); I = monomialIdeal( x2^18, x4^77, x6^98 ); I = monomialIdeal( x2^18, x5^76 ); I = monomialIdeal( x2^18, x6^58 ); I = monomialIdeal( x2^8, x8^50 ); I = monomialIdeal( x2^7, x3^70 ); I = monomialIdeal( x2^7, x5^92 ); I = monomialIdeal( x2^7, x6^98 ); I = monomialIdeal( x2^7, x8^56 ); I = monomialIdeal( x3^91, x4^58, x5^80, x7^37 ); I = monomialIdeal( x3^91, x4^55, x5^80, x7^56 ); I = monomialIdeal( x3^91, x5^80, x7^17 ); I = monomialIdeal( x3^91, x5^70, x7^37 ); I = monomialIdeal( x3^91, x5^47, x7^56 ); I = monomialIdeal( x3^91, x5^36 ); I = monomialIdeal( x3^82, x5^80, x8^20 ); I = monomialIdeal( x3^82, x5^70, x8^33 ); I = monomialIdeal( x3^78, x4^45, x8^39 ); I = monomialIdeal( x3^78, x4^38, x5^92, x7^94, x8^58 ); I = monomialIdeal( x3^78, x4^38, x6^98, x7^94, x8^58 ); I = monomialIdeal( x3^78, x4^38, x7^94, x8^56 ); I = monomialIdeal( x3^78, x4^38, x8^48 ); I = monomialIdeal( x3^78, x4^32, x8^58 ); I = monomialIdeal( x3^78, x4^20 ); I = monomialIdeal( x3^70, x4^45, x7^56, x8^58 ); I = monomialIdeal( x3^70, x4^45, x7^6 ); I = monomialIdeal( x3^70, x4^38, x7^94, x8^58 ); I = monomialIdeal( x3^66, x4^79, x5^70, x6^43 ); I = monomialIdeal( x3^66, x4^79, x5^47 ); I = monomialIdeal( x3^66, x4^58, x5^80, x6^43, x7^88 ); I = monomialIdeal( x3^66, x4^58, x5^80, x6^43, x8^67 ); I = monomialIdeal( x3^66, x4^58, x5^80, x6^40 ); I = monomialIdeal( x3^66, x4^58, x6^43, x8^58 ); I = monomialIdeal( x3^66, x4^55, x5^80, x6^45, x8^67 ); I = monomialIdeal( x3^66, x4^55, x5^80, x7^94, x8^67 ); I = monomialIdeal( x3^66, x4^55, x5^80, x7^88 ); I = monomialIdeal( x3^66, x4^55, x5^80, x8^48 ); I = monomialIdeal( x3^66, x4^55, x5^70, x6^45 ); I = monomialIdeal( x3^66, x4^55, x5^70, x7^94 ); I = monomialIdeal( x3^66, x4^55, x5^54 ); I = monomialIdeal( x3^66, x4^55, x6^53, x7^94, x8^58 ); I = monomialIdeal( x3^66, x4^55, x6^53, x8^48 ); I = monomialIdeal( x3^66, x4^55, x6^45, x8^58 ); I = monomialIdeal( x3^66, x4^48, x5^80, x6^45 ); I = monomialIdeal( x3^66, x4^48, x5^80, x7^94 ); I = monomialIdeal( x3^66, x4^45, x7^94, x8^58 ); I = monomialIdeal( x3^66, x4^45, x8^48 ); I = monomialIdeal( x3^66, x5^70, x6^43, x7^82 ); I = monomialIdeal( x3^66, x5^70, x6^43, x8^51 ); I = monomialIdeal( x3^66, x5^47, x7^82 ); I = monomialIdeal( x3^66, x5^47, x8^51 ); I = monomialIdeal( x3^66, x5^46 ); I = monomialIdeal( x3^65, x4^79, x5^70, x6^45 ); I = monomialIdeal( x3^65, x4^79, x5^70, x7^94 ); I = monomialIdeal( x3^65, x4^79, x5^54 ); I = monomialIdeal( x3^65, x4^58, x5^80, x6^45, x8^67 ); I = monomialIdeal( x3^65, x4^58, x5^80, x7^94, x8^67 ); I = monomialIdeal( x3^65, x4^58, x5^80, x7^88 ); I = monomialIdeal( x3^65, x4^58, x5^80, x8^48 ); I = monomialIdeal( x3^65, x4^58, x6^53, x7^94, x8^58 ); I = monomialIdeal( x3^65, x4^58, x6^53, x8^48 ); I = monomialIdeal( x3^65, x4^58, x6^45, x8^58 ); I = monomialIdeal( x3^65, x5^70, x6^45, x8^51 ); I = monomialIdeal( x3^65, x5^70, x7^94, x8^51 ); I = monomialIdeal( x3^65, x5^70, x7^82 ); I = monomialIdeal( x3^65, x5^70, x8^48 ); I = monomialIdeal( x3^65, x5^54, x8^51 ); I = monomialIdeal( x3^64, x4^58, x6^53, x7^94, x8^67 ); I = monomialIdeal( x3^64, x4^58, x6^53, x7^88 ); I = monomialIdeal( x3^64, x4^58, x6^45, x8^67 ); I = monomialIdeal( x3^64, x4^58, x6^40 ); I = monomialIdeal( x3^64, x4^48, x6^53, x7^94 ); I = monomialIdeal( x3^64, x4^48, x6^45 ); I = monomialIdeal( x3^64, x4^45, x7^94 ); I = monomialIdeal( x3^64, x4^32 ); I = monomialIdeal( x3^64, x6^53, x7^17 ); I = monomialIdeal( x3^48, x4^80, x8^20 ); I = monomialIdeal( x3^48, x4^58, x7^94, x8^67 ); I = monomialIdeal( x3^48, x4^58, x7^88 ); I = monomialIdeal( x3^48, x4^58, x8^48 ); I = monomialIdeal( x3^48, x4^48, x7^94 ); I = monomialIdeal( x3^48, x5^89, x8^20 ); I = monomialIdeal( x3^48, x6^98, x8^20 ); I = monomialIdeal( x3^48, x7^76, x8^20 ); I = monomialIdeal( x3^48, x7^17 ); I = monomialIdeal( x3^48, x8^14 ); I = monomialIdeal( x3^47, x4^58, x6^45 ); I = monomialIdeal( x3^47, x4^58, x7^94 ); I = monomialIdeal( x3^45, x4^79, x5^70 ); I = monomialIdeal( x3^45, x4^58 ); I = monomialIdeal( x3^45, x5^70, x8^51 ); I = monomialIdeal( x3^34, x4^79, x6^11 ); I = monomialIdeal( x3^34, x6^11, x8^51 ); I = monomialIdeal( x3^34, x8^20 ); I = monomialIdeal( x3^26, x4^79 ); I = monomialIdeal( x3^26, x7^82 ); I = monomialIdeal( x3^26, x8^51 ); I = monomialIdeal( x3^14 ); I = monomialIdeal( x4^79, x5^96, x6^11 ); I = monomialIdeal( x4^79, x5^70, x6^35 ); I = monomialIdeal( x4^79, x6^11, x7^98 ); I = monomialIdeal( x4^79, x6^4 ); I = monomialIdeal( x4^71, x5^80, x8^20 ); I = monomialIdeal( x4^71, x5^70, x8^33 ); I = monomialIdeal( x4^67, x6^11 ); I = monomialIdeal( x4^58, x5^80, x6^58, x7^37 ); I = monomialIdeal( x4^58, x5^80, x6^43, x7^56 ); I = monomialIdeal( x4^58, x5^80, x6^35 ); I = monomialIdeal( x4^58, x5^80, x7^37, x8^57 ); I = monomialIdeal( x4^58, x5^80, x8^33 ); I = monomialIdeal( x4^58, x6^53, x7^37, x8^58 ); I = monomialIdeal( x4^58, x6^53, x8^33 ); I = monomialIdeal( x4^58, x6^43, x7^56, x8^58 ); I = monomialIdeal( x4^58, x6^43, x8^39 ); I = monomialIdeal( x4^58, x6^35, x8^58 ); I = monomialIdeal( x4^58, x6^20 ); I = monomialIdeal( x4^55, x5^80, x6^58, x7^56 ); I = monomialIdeal( x4^55, x5^80, x7^56, x8^57 ); I = monomialIdeal( x4^55, x5^80, x8^39 ); I = monomialIdeal( x4^55, x6^53, x7^56, x8^58 ); I = monomialIdeal( x4^55, x6^53, x8^39 ); I = monomialIdeal( x4^51, x5^80, x7^56 ); I = monomialIdeal( x4^51, x5^36 ); I = monomialIdeal( x4^45, x5^92, x7^56, x8^58 ); I = monomialIdeal( x4^45, x5^92, x7^6 ); I = monomialIdeal( x4^45, x5^84, x8^39 ); I = monomialIdeal( x4^45, x6^98, x7^56, x8^58 ); I = monomialIdeal( x4^45, x6^98, x7^6 ); I = monomialIdeal( x4^45, x7^81, x8^39 ); I = monomialIdeal( x4^45, x7^56, x8^56 ); I = monomialIdeal( x4^45, x7 ); I = monomialIdeal( x4^45, x8^36 ); I = monomialIdeal( x4^38, x5^92, x7^81, x8^58 ); I = monomialIdeal( x4^38, x5^84, x7^94, x8^58 ); I = monomialIdeal( x4^38, x5^84, x8^48 ); I = monomialIdeal( x4^38, x5^80, x6^45 ); I = monomialIdeal( x4^38, x5^80, x7^94 ); I = monomialIdeal( x4^38, x5^54 ); I = monomialIdeal( x4^38, x6^98, x7^81, x8^58 ); I = monomialIdeal( x4^38, x6^53, x7^94, x8^58 ); I = monomialIdeal( x4^38, x6^53, x8^48 ); I = monomialIdeal( x4^38, x6^45, x8^58 ); I = monomialIdeal( x4^38, x7^81, x8^56 ); I = monomialIdeal( x4^32, x5^84, x8^58 ); I = monomialIdeal( x4^32, x5^80 ); I = monomialIdeal( x4^32, x6^53, x8^58 ); I = monomialIdeal( x4^32, x7^81, x8^58 ); I = monomialIdeal( x4^32, x7^6 ); I = monomialIdeal( x4^20, x5^84 ); I = monomialIdeal( x4^20, x6^53 ); I = monomialIdeal( x4^20, x7^81 ); I = monomialIdeal( x4^16 ); I = monomialIdeal( x5^96, x6^11, x8^51 ); I = monomialIdeal( x5^80, x6^58, x7^17 ); I = monomialIdeal( x5^80, x6^56, x8^20 ); I = monomialIdeal( x5^80, x7^92, x8^20 ); I = monomialIdeal( x5^80, x7^17, x8^57 ); I = monomialIdeal( x5^80, x7^6 ); I = monomialIdeal( x5^80, x8^13 ); I = monomialIdeal( x5^70, x6^58, x7^37 ); I = monomialIdeal( x5^70, x6^56, x8^33 ); I = monomialIdeal( x5^70, x6^43, x7^56 ); I = monomialIdeal( x5^70, x6^43, x8^39 ); I = monomialIdeal( x5^70, x6^35, x7^82 ); I = monomialIdeal( x5^70, x6^35, x8^51 ); I = monomialIdeal( x5^70, x7^92, x8^33 ); I = monomialIdeal( x5^70, x7^37, x8^57 ); I = monomialIdeal( x5^50, x8^33 ); I = monomialIdeal( x5^47, x6^58, x7^56 ); I = monomialIdeal( x5^47, x7^56, x8^57 ); I = monomialIdeal( x5^47, x8^39 ); I = monomialIdeal( x5^46, x6^35 ); I = monomialIdeal( x5^36, x6^58 ); I = monomialIdeal( x5^36, x8^57 ); I = monomialIdeal( x5^24 ); I = monomialIdeal( x6^53, x7^17, x8^58 ); I = monomialIdeal( x6^53, x7^6 ); I = monomialIdeal( x6^53, x8^20 ); I = monomialIdeal( x6^20, x7^17 ); I = monomialIdeal( x6^11, x7^98, x8^51 ); I = monomialIdeal( x6^11, x7^82 ); I = monomialIdeal( x6^11, x8^37 ); I = monomialIdeal( x6^4, x8^51 ); I = monomialIdeal( x6^3 ); I = monomialIdeal( x8^5 ); frobby-0.9.5/test/commonIdeals/t16.irrdecom_ideal000066400000000000000000000674641401527164200217220ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^99*x2^84*x3^91*x5^92*x7^37*x8^58, x1^99*x2^84*x3^91*x6^98*x7^37*x8^58, x1^99*x2^84*x3^87*x4^80*x7^92*x8^33, x1^99*x2^84*x3^87*x4^71*x8^33, x1^99*x2^84*x3^87*x6^98*x7^92*x8^33, x1^99*x2^84*x3^87*x7^76*x8^33, x1^99*x2^84*x3^82*x4^80*x8^33, x1^99*x2^84*x3^82*x5^89*x8^33, x1^99*x2^84*x3^82*x6^98*x8^33, x1^99*x2^84*x3^70*x7^37*x8^58, x1^99*x2^84*x3^65*x4^80*x5^96*x8^48, x1^99*x2^84*x3^65*x4^80*x7^98*x8^48, x1^99*x2^84*x3^65*x4^80*x7^94*x8^50, x1^99*x2^84*x3^65*x4^80*x8^37, x1^99*x2^84*x3^65*x4^79*x6^58*x7^94*x8^58, x1^99*x2^84*x3^65*x4^77*x7^94*x8^58, x1^99*x2^84*x3^65*x4^67*x8^48, x1^99*x2^84*x3^65*x5^96*x6^98*x8^48, x1^99*x2^84*x3^65*x5^89*x7^94*x8^50, x1^99*x2^84*x3^65*x5^89*x8^48, x1^99*x2^84*x3^65*x6^98*x7^98*x8^48, x1^99*x2^84*x3^65*x6^98*x7^94*x8^50, x1^99*x2^84*x3^65*x6^98*x8^37, x1^99*x2^84*x3^65*x6^58*x7^94*x8^51, x1^99*x2^84*x3^65*x6^58*x7^82*x8^58, x1^99*x2^84*x3^65*x7^76*x8^50, x1^99*x2^84*x3^65*x7^54*x8^58, x1^99*x2^84*x3^64*x4^79*x6^58*x7^94*x8^67, x1^99*x2^84*x3^64*x4^79*x6^58*x7^88, x1^99*x2^84*x3^64*x4^77*x7^94*x8^67, x1^99*x2^84*x3^64*x4^77*x7^88, x1^99*x2^84*x3^64*x6^58*x7^82, x1^99*x2^84*x3^64*x7^54, x1^99*x2^84*x4^80*x5^93*x7^92*x8^33, x1^99*x2^84*x4^80*x7^92*x8^30, x1^99*x2^84*x4^71*x5^93*x8^33, x1^99*x2^84*x4^71*x6^85*x8^33, x1^99*x2^84*x4^71*x8^30, x1^99*x2^84*x4^70*x8^33, x1^99*x2^84*x5^93*x6^98*x7^92*x8^33, x1^99*x2^84*x5^93*x7^76*x8^33, x1^99*x2^84*x5^92*x7^37*x8^57, x1^99*x2^84*x5^89*x7^92*x8^33, x1^99*x2^84*x6^98*x7^92*x8^30, x1^99*x2^84*x6^98*x7^37*x8^57, x1^99*x2^84*x6^85*x7^92*x8^33, x1^99*x2^84*x6^58*x7^37*x8^58, x1^99*x2^84*x6^56*x8^33, x1^99*x2^84*x7^76*x8^30, x1^99*x2^84*x7^62*x8^33, x1^99*x2^84*x7^37*x8^56, x1^99*x2^74*x3^66*x4^79*x6^43*x8^58, x1^99*x2^74*x3^66*x6^43*x8^51, x1^99*x2^74*x3^65*x4^80*x8^48, x1^99*x2^74*x3^65*x4^79*x6^45*x8^58, x1^99*x2^74*x3^65*x6^98*x8^48, x1^99*x2^74*x3^65*x6^45*x8^51, x1^99*x2^74*x3^64*x4^79*x6^45*x8^67, x1^99*x2^74*x3^64*x4^79*x6^40, x1^99*x2^74*x3^47*x4^79*x6^45, x1^99*x2^74*x3^45*x4^80*x8^50, x1^99*x2^74*x3^45*x4^79*x6^58, x1^99*x2^74*x3^45*x4^77, x1^99*x2^74*x3^45*x6^98*x8^50, x1^99*x2^74*x3^45*x6^58*x8^51, x1^99*x2^74*x4^79*x6^35*x8^58, x1^99*x2^74*x4^79*x6^20, x1^99*x2^74*x6^43*x8^39, x1^99*x2^74*x6^35*x8^51, x1^99*x2^73*x4^80*x7^92*x8^33, x1^99*x2^73*x4^71*x8^33, x1^99*x2^73*x6^98*x7^92*x8^33, x1^99*x2^73*x7^76*x8^33, x1^99*x2^64*x3^66*x5^80*x6^43*x7^88, x1^99*x2^64*x3^66*x5^80*x6^43*x8^67, x1^99*x2^64*x3^66*x5^80*x6^40, x1^99*x2^64*x3^66*x6^43*x8^58, x1^99*x2^64*x3^65*x5^80*x6^58*x7^94*x8^67, x1^99*x2^64*x3^65*x5^80*x6^58*x7^88, x1^99*x2^64*x3^65*x5^80*x6^45*x8^67, x1^99*x2^64*x3^65*x5^76*x7^94*x8^67, x1^99*x2^64*x3^65*x5^76*x7^88, x1^99*x2^64*x3^65*x6^58*x7^94*x8^58, x1^99*x2^64*x3^65*x6^45*x8^58, x1^99*x2^64*x3^64*x6^58*x7^94*x8^67, x1^99*x2^64*x3^64*x6^58*x7^88, x1^99*x2^64*x3^64*x6^45*x8^67, x1^99*x2^64*x3^64*x6^40, x1^99*x2^64*x3^47*x5^76*x7^94, x1^99*x2^64*x3^47*x6^58*x7^94, x1^99*x2^64*x3^47*x6^45, x1^99*x2^64*x3^45*x5^76, x1^99*x2^64*x3^45*x6^58, x1^99*x2^64*x3^33, x1^99*x2^64*x5^80*x6^35, x1^99*x2^64*x6^35*x8^58, x1^99*x2^64*x6^20, x1^99*x3^91*x5^80*x7^37, x1^99*x3^82*x5^80*x8^33, x1^99*x3^66*x4^79*x5^96*x6^43*x8^58, x1^99*x3^66*x4^79*x5^80*x6^43*x7^88, x1^99*x3^66*x4^79*x5^80*x6^43*x8^67, x1^99*x3^66*x4^79*x5^80*x6^40, x1^99*x3^66*x4^79*x6^43*x7^98*x8^58, x1^99*x3^66*x4^67*x6^43*x8^58, x1^99*x3^66*x5^96*x6^43*x8^51, x1^99*x3^66*x5^80*x6^43*x7^82, x1^99*x3^66*x6^43*x7^98*x8^51, x1^99*x3^66*x6^43*x7^82*x8^58, x1^99*x3^65*x4^79*x5^96*x6^45*x8^58, x1^99*x3^65*x4^79*x5^80*x6^58*x7^94*x8^67, x1^99*x3^65*x4^79*x5^80*x6^58*x7^88, x1^99*x3^65*x4^79*x5^80*x6^45*x8^67, x1^99*x3^65*x4^79*x5^76*x7^94*x8^67, x1^99*x3^65*x4^79*x5^76*x7^88, x1^99*x3^65*x4^79*x6^53*x7^94*x8^58, x1^99*x3^65*x4^79*x6^45*x7^98*x8^58, x1^99*x3^65*x4^77*x5^80*x7^94*x8^67, x1^99*x3^65*x4^77*x5^80*x7^88, x1^99*x3^65*x4^67*x6^53*x8^48, x1^99*x3^65*x4^67*x6^45*x8^58, x1^99*x3^65*x5^96*x6^53*x8^48, x1^99*x3^65*x5^96*x6^45*x8^51, x1^99*x3^65*x5^80*x6^58*x7^94*x8^51, x1^99*x3^65*x5^80*x6^58*x7^82, x1^99*x3^65*x5^80*x7^94*x8^50, x1^99*x3^65*x5^80*x7^54, x1^99*x3^65*x5^80*x8^48, x1^99*x3^65*x5^76*x7^94*x8^51, x1^99*x3^65*x5^76*x7^82, x1^99*x3^65*x6^53*x7^98*x8^48, x1^99*x3^65*x6^53*x7^94*x8^51, x1^99*x3^65*x6^53*x7^82*x8^58, x1^99*x3^65*x6^53*x8^37, x1^99*x3^65*x6^45*x7^98*x8^51, x1^99*x3^64*x4^79*x5^96*x6^45*x8^67, x1^99*x3^64*x4^79*x5^96*x6^40, x1^99*x3^64*x4^79*x6^53*x7^94*x8^67, x1^99*x3^64*x4^79*x6^53*x7^88, x1^99*x3^64*x4^79*x6^45*x7^98*x8^67, x1^99*x3^64*x4^79*x6^40*x7^98, x1^99*x3^64*x4^67*x6^45*x8^67, x1^99*x3^64*x4^67*x6^40, x1^99*x3^64*x6^53*x7^82, x1^99*x3^48*x4^80*x5^96*x8^48, x1^99*x3^48*x4^80*x7^98*x8^48, x1^99*x3^48*x4^80*x7^94*x8^50, x1^99*x3^48*x4^80*x8^37, x1^99*x3^48*x4^79*x6^58*x7^94*x8^67, x1^99*x3^48*x4^79*x6^58*x7^88, x1^99*x3^48*x4^77*x7^94*x8^67, x1^99*x3^48*x4^77*x7^88, x1^99*x3^48*x4^67*x8^48, x1^99*x3^48*x5^96*x6^98*x8^48, x1^99*x3^48*x5^89*x7^94*x8^50, x1^99*x3^48*x5^89*x8^48, x1^99*x3^48*x6^98*x7^98*x8^48, x1^99*x3^48*x6^98*x7^94*x8^50, x1^99*x3^48*x6^98*x8^37, x1^99*x3^48*x6^58*x7^94*x8^51, x1^99*x3^48*x6^58*x7^82, x1^99*x3^48*x7^76*x8^50, x1^99*x3^48*x7^54, x1^99*x3^47*x4^79*x5^96*x6^45, x1^99*x3^47*x4^79*x5^76*x7^94, x1^99*x3^47*x4^79*x6^58*x7^94, x1^99*x3^47*x4^79*x6^45*x7^98, x1^99*x3^47*x4^77*x7^94, x1^99*x3^47*x4^67*x6^45, x1^99*x3^45*x4^80*x5^96*x8^50, x1^99*x3^45*x4^80*x7^98*x8^50, x1^99*x3^45*x4^79*x5^96*x6^58, x1^99*x3^45*x4^79*x5^76, x1^99*x3^45*x4^79*x6^58*x7^98, x1^99*x3^45*x4^77*x5^96, x1^99*x3^45*x4^77*x7^98, x1^99*x3^45*x4^67, x1^99*x3^45*x5^96*x6^98*x8^50, x1^99*x3^45*x5^96*x6^58*x8^51, x1^99*x3^45*x5^89*x8^50, x1^99*x3^45*x5^76*x8^51, x1^99*x3^45*x6^98*x7^98*x8^50, x1^99*x3^45*x6^58*x7^98*x8^51, x1^99*x3^34*x4^79*x6^58, x1^99*x3^34*x4^77, x1^99*x3^34*x6^58*x8^51, x1^99*x3^34*x8^50, x1^99*x3^33*x4^79, x1^99*x3^33*x7^82, x1^99*x3^33*x8^51, x1^99*x4^79*x5^96*x6^35*x8^58, x1^99*x4^79*x5^96*x6^20, x1^99*x4^79*x5^80*x6^35, x1^99*x4^79*x6^35*x7^98*x8^58, x1^99*x4^79*x6^20*x7^98, x1^99*x4^71*x5^80*x8^33, x1^99*x4^67*x6^43*x8^39, x1^99*x4^67*x6^35*x8^58, x1^99*x4^67*x6^20, x1^99*x5^96*x6^43*x8^39, x1^99*x5^96*x6^35*x8^51, x1^99*x5^80*x6^58*x7^37, x1^99*x5^80*x6^56*x8^33, x1^99*x5^80*x6^43*x7^56, x1^99*x5^80*x6^35*x7^82, x1^99*x5^80*x7^92*x8^33, x1^99*x5^80*x7^37*x8^57, x1^99*x6^53*x7^37*x8^58, x1^99*x6^53*x8^33, x1^99*x6^43*x7^98*x8^39, x1^99*x6^43*x7^56*x8^58, x1^99*x6^43*x8^37, x1^99*x6^35*x7^98*x8^51, x1^99*x6^35*x7^82*x8^58, x1^99*x6^20*x7^82, x1^94*x3^91*x4^55*x5^92*x7^56*x8^58, x1^94*x3^91*x4^55*x6^98*x7^56*x8^58, x1^94*x3^91*x5^92*x7^37*x8^58, x1^94*x3^91*x6^98*x7^37*x8^58, x1^94*x3^87*x4^80*x7^92*x8^33, x1^94*x3^87*x4^71*x8^33, x1^94*x3^87*x6^98*x7^92*x8^33, x1^94*x3^87*x7^76*x8^33, x1^94*x3^82*x4^80*x8^33, x1^94*x3^82*x5^89*x8^33, x1^94*x3^82*x6^98*x8^33, x1^94*x3^82*x8^14, x1^94*x3^78*x4^55*x8^39, x1^94*x3^70*x4^55*x7^56*x8^58, x1^94*x3^70*x7^37*x8^58, x1^94*x3^70*x7^6, x1^94*x3^66*x4^55*x7^94*x8^58, x1^94*x3^66*x4^55*x8^48, x1^94*x3^65*x4^80*x5^96*x8^48, x1^94*x3^65*x4^80*x7^98*x8^48, x1^94*x3^65*x4^80*x7^94*x8^50, x1^94*x3^65*x4^80*x8^37, x1^94*x3^65*x4^79*x6^58*x7^94*x8^58, x1^94*x3^65*x4^77*x7^94*x8^58, x1^94*x3^65*x4^67*x8^48, x1^94*x3^65*x5^96*x6^98*x8^48, x1^94*x3^65*x5^89*x7^94*x8^50, x1^94*x3^65*x5^89*x8^48, x1^94*x3^65*x6^98*x7^98*x8^48, x1^94*x3^65*x6^98*x7^94*x8^50, x1^94*x3^65*x6^98*x8^37, x1^94*x3^65*x6^58*x7^94*x8^51, x1^94*x3^65*x6^58*x7^82*x8^58, x1^94*x3^65*x7^76*x8^50, x1^94*x3^65*x7^54*x8^58, x1^94*x3^64*x4^79*x6^58*x7^94*x8^67, x1^94*x3^64*x4^79*x6^58*x7^88, x1^94*x3^64*x4^77*x7^94*x8^67, x1^94*x3^64*x4^77*x7^88, x1^94*x3^64*x4^48*x7^94, x1^94*x3^64*x6^58*x7^82, x1^94*x3^64*x7^54, x1^94*x4^80*x5^93*x7^92*x8^33, x1^94*x4^80*x7^92*x8^30, x1^94*x4^71*x5^93*x8^33, x1^94*x4^71*x6^85*x8^33, x1^94*x4^71*x8^30, x1^94*x4^70*x8^33, x1^94*x4^55*x5^92*x7^56*x8^57, x1^94*x4^55*x5^84*x8^39, x1^94*x4^55*x6^98*x7^56*x8^57, x1^94*x4^55*x6^58*x7^56*x8^58, x1^94*x4^55*x7^81*x8^39, x1^94*x4^55*x7^56*x8^56, x1^94*x4^55*x8^36, x1^94*x4^51*x5^92*x7^56*x8^58, x1^94*x4^51*x6^98*x7^56*x8^58, x1^94*x5^93*x6^98*x7^92*x8^33, x1^94*x5^93*x7^76*x8^33, x1^94*x5^92*x7^37*x8^57, x1^94*x5^92*x7^6, x1^94*x5^89*x7^92*x8^33, x1^94*x6^98*x7^92*x8^30, x1^94*x6^98*x7^37*x8^57, x1^94*x6^98*x7^6, x1^94*x6^85*x7^92*x8^33, x1^94*x6^58*x7^37*x8^58, x1^94*x6^56*x8^33, x1^94*x7^92*x8^14, x1^94*x7^76*x8^30, x1^94*x7^62*x8^33, x1^94*x7^37*x8^56, x1^94*x7, x1^94*x8^13, x1^81*x4^80*x7^92*x8^33, x1^81*x4^71*x8^33, x1^81*x6^98*x7^92*x8^33, x1^81*x7^76*x8^33, x1^74*x3^66*x4^79*x6^43*x8^58, x1^74*x3^66*x6^43*x8^51, x1^74*x3^65*x4^80*x8^48, x1^74*x3^65*x4^79*x6^45*x8^58, x1^74*x3^65*x6^98*x8^48, x1^74*x3^65*x6^45*x8^51, x1^74*x3^64*x4^79*x6^45*x8^67, x1^74*x3^64*x4^79*x6^40, x1^74*x3^47*x4^79*x6^45, x1^74*x3^45*x4^80*x8^50, x1^74*x3^45*x4^79*x6^58, x1^74*x3^45*x4^77, x1^74*x3^45*x6^98*x8^50, x1^74*x3^45*x6^58*x8^51, x1^74*x4^79*x6^35*x8^58, x1^74*x4^79*x6^20, x1^74*x6^43*x8^39, x1^74*x6^35*x8^51, x1^68*x2^64*x3^66*x6^43*x7^88, x1^68*x2^64*x3^66*x6^43*x8^67, x1^68*x2^64*x3^66*x6^40, x1^68*x2^64*x3^65*x6^58*x7^94*x8^67, x1^68*x2^64*x3^65*x6^58*x7^88, x1^68*x2^64*x3^65*x6^45*x8^67, x1^68*x2^64*x6^35, x1^68*x2^63*x3^91*x4^77*x5^92*x7^56, x1^68*x2^63*x3^91*x4^77*x6^98*x7^56, x1^68*x2^63*x3^91*x5^92*x7^54, x1^68*x2^63*x3^91*x6^98*x7^54, x1^68*x2^63*x3^70*x4^77*x7^56, x1^68*x2^63*x3^70*x7^54, x1^68*x2^63*x3^66*x4^77*x7^94*x8^67, x1^68*x2^63*x3^66*x4^77*x7^88, x1^68*x2^63*x3^66*x6^58*x7^94*x8^67, x1^68*x2^63*x3^66*x6^58*x7^88, x1^68*x2^63*x3^66*x6^45*x8^67, x1^68*x2^63*x6^58*x7^56, x1^68*x3^91*x4^55*x5^92*x7^56, x1^68*x3^91*x4^55*x6^98*x7^56, x1^68*x3^91*x5^92*x7^37, x1^68*x3^91*x6^98*x7^37, x1^68*x3^78*x4^38*x5^92*x7^94, x1^68*x3^78*x4^38*x6^98*x7^94, x1^68*x3^78*x4^32, x1^68*x3^70*x4^55*x7^56, x1^68*x3^70*x4^38*x7^94, x1^68*x3^70*x7^37, x1^68*x3^66*x4^79*x6^43*x7^88, x1^68*x3^66*x4^79*x6^43*x8^67, x1^68*x3^66*x4^79*x6^40, x1^68*x3^66*x4^55*x6^45*x8^67, x1^68*x3^66*x4^55*x7^94*x8^67, x1^68*x3^66*x4^55*x7^88, x1^68*x3^66*x4^48*x6^45, x1^68*x3^66*x4^48*x7^94, x1^68*x3^66*x6^43*x7^82, x1^68*x3^65*x4^79*x6^58*x7^94*x8^67, x1^68*x3^65*x4^79*x6^58*x7^88, x1^68*x3^65*x4^79*x6^45*x8^67, x1^68*x3^65*x4^77*x7^94*x8^67, x1^68*x3^65*x4^77*x7^88, x1^68*x3^65*x6^58*x7^82, x1^68*x3^65*x7^54, x1^68*x4^79*x6^35, x1^68*x4^55*x6^58*x7^56, x1^68*x4^51*x5^92*x7^56, x1^68*x4^51*x6^98*x7^56, x1^68*x4^38*x5^92*x7^81, x1^68*x4^38*x5^84*x7^94, x1^68*x4^38*x6^98*x7^81, x1^68*x4^38*x6^53*x7^94, x1^68*x4^38*x6^45, x1^68*x4^32*x5^84, x1^68*x4^32*x6^53, x1^68*x4^32*x7^81, x1^68*x6^58*x7^37, x1^68*x6^43*x7^56, x1^68*x6^35*x7^82, x1^47*x2^64*x3^66*x5^76*x7^94*x8^67, x1^47*x2^64*x3^66*x5^76*x7^88, x1^47*x2^64*x3^66*x5^70*x6^45, x1^47*x2^64*x3^66*x5^70*x7^94, x1^47*x2^64*x3^66*x5^54, x1^47*x2^64*x3^66*x6^58*x7^94*x8^67, x1^47*x2^64*x3^66*x6^58*x7^88, x1^47*x2^64*x3^66*x6^45*x8^67, x1^47*x3^91*x4^77*x5^92*x7^56, x1^47*x3^91*x4^77*x6^98*x7^56, x1^47*x3^91*x5^92*x7^54, x1^47*x3^91*x5^76*x7^56, x1^47*x3^91*x6^98*x7^54, x1^47*x3^82*x4^80*x8^36, x1^47*x3^82*x5^89*x8^36, x1^47*x3^82*x5^84*x8^39, x1^47*x3^82*x6^98*x8^36, x1^47*x3^78*x4^80*x8^39, x1^47*x3^78*x5^89*x8^39, x1^47*x3^78*x6^98*x8^39, x1^47*x3^70*x4^77*x7^56, x1^47*x3^70*x7^54, x1^47*x3^66*x4^80*x7^94*x8^50, x1^47*x3^66*x4^80*x8^48, x1^47*x3^66*x4^79*x5^76*x7^94*x8^67, x1^47*x3^66*x4^79*x5^76*x7^88, x1^47*x3^66*x4^79*x5^70*x6^45, x1^47*x3^66*x4^79*x5^70*x7^94, x1^47*x3^66*x4^79*x5^54, x1^47*x3^66*x4^79*x6^58*x7^94*x8^67, x1^47*x3^66*x4^79*x6^58*x7^88, x1^47*x3^66*x4^79*x6^45*x8^67, x1^47*x3^66*x4^77*x7^94*x8^67, x1^47*x3^66*x4^77*x7^88, x1^47*x3^66*x5^89*x7^94*x8^50, x1^47*x3^66*x5^89*x8^48, x1^47*x3^66*x5^76*x7^94*x8^51, x1^47*x3^66*x5^76*x7^82, x1^47*x3^66*x5^54*x8^51, x1^47*x3^66*x6^98*x7^94*x8^50, x1^47*x3^66*x6^98*x8^48, x1^47*x3^66*x6^58*x7^94*x8^51, x1^47*x3^66*x6^58*x7^82, x1^47*x3^66*x6^45*x8^51, x1^47*x3^66*x7^76*x8^50, x1^47*x4^80*x7^92*x8^36, x1^47*x4^80*x7^81*x8^39, x1^47*x4^77*x5^92*x7^56*x8^57, x1^47*x4^77*x6^98*x7^56*x8^57, x1^47*x4^77*x7^56*x8^56, x1^47*x4^71*x5^84*x8^39, x1^47*x4^71*x8^36, x1^47*x5^92*x7^54*x8^57, x1^47*x5^89*x7^92*x8^36, x1^47*x5^89*x7^81*x8^39, x1^47*x5^84*x6^56*x8^39, x1^47*x5^84*x7^92*x8^39, x1^47*x5^76*x7^56*x8^57, x1^47*x5^50*x8^39, x1^47*x6^98*x7^92*x8^36, x1^47*x6^98*x7^81*x8^39, x1^47*x6^98*x7^54*x8^57, x1^47*x6^58*x7^56, x1^47*x6^56*x8^36, x1^47*x6^53*x8^39, x1^47*x7^76*x8^39, x1^47*x7^56*x8^50, x1^47*x7^54*x8^56, x1^44*x2^36*x4^80*x8^39, x1^44*x2^36*x5^89*x8^39, x1^44*x2^36*x6^98*x8^39, x1^44*x3^82*x4^80*x8^39, x1^44*x3^82*x5^89*x8^39, x1^44*x3^82*x6^98*x8^39, x1^44*x4^80*x7^92*x8^39, x1^44*x4^71*x8^39, x1^44*x4^38*x5^92*x7^94, x1^44*x4^38*x6^98*x7^94, x1^44*x4^38*x7^94*x8^56, x1^44*x4^38*x8^48, x1^44*x4^32, x1^44*x5^89*x7^92*x8^39, x1^44*x6^98*x7^92*x8^39, x1^44*x6^56*x8^39, x1^41*x2^64*x3^66*x4^80*x7^94*x8^67, x1^41*x2^64*x3^66*x4^80*x7^88, x1^41*x2^64*x3^66*x5^89*x7^94*x8^67, x1^41*x2^64*x3^66*x5^89*x7^88, x1^41*x2^64*x3^66*x6^98*x7^94*x8^67, x1^41*x2^64*x3^66*x6^98*x7^88, x1^41*x2^64*x3^47*x4^80*x7^94, x1^41*x2^64*x3^47*x5^89*x7^94, x1^41*x2^64*x3^47*x6^98*x7^94, x1^41*x2^64*x3^45*x4^80, x1^41*x2^64*x3^45*x5^89, x1^41*x2^64*x3^45*x6^98, x1^41*x2^64*x3^34, x1^41*x2^40*x5^92*x7^56, x1^41*x2^40*x6^98*x7^56, x1^41*x2^26*x3^70*x4^80*x7^94*x8^67, x1^41*x2^26*x3^70*x4^80*x7^88, x1^41*x2^26*x3^70*x7^76, x1^41*x2^26*x4^80*x5^92*x7^94*x8^67, x1^41*x2^26*x4^80*x5^92*x7^88, x1^41*x2^26*x4^80*x7^94*x8^56, x1^41*x2^26*x5^92*x7^76, x1^41*x2^26*x5^89*x7^94*x8^67, x1^41*x2^26*x5^89*x7^88, x1^41*x2^26*x6^98*x7^94*x8^67, x1^41*x2^26*x6^98*x7^88, x1^41*x2^26*x7^76*x8^56, x1^41*x2^25*x3^70*x4^80*x8^67, x1^41*x2^25*x3^47*x4^80, x1^41*x2^25*x3^47*x5^89, x1^41*x2^25*x3^47*x6^98, x1^41*x2^25*x4^80*x5^92*x8^67, x1^41*x2^25*x4^80*x8^56, x1^41*x2^25*x5^89*x8^67, x1^41*x2^25*x6^98*x8^67, x1^41*x2^18*x3^70*x4^80, x1^41*x2^18*x4^80*x5^92, x1^41*x2^18*x5^89, x1^41*x2^18*x6^98, x1^41*x2^8*x3^70, x1^41*x2^8*x5^92, x1^41*x2^8*x8^56, x1^41*x3^91*x5^92*x7^56, x1^41*x3^91*x6^98*x7^56, x1^41*x3^70*x7^56, x1^41*x3^66*x4^80*x7^94*x8^51, x1^41*x3^66*x4^80*x7^82, x1^41*x3^66*x4^79*x7^94*x8^67, x1^41*x3^66*x4^79*x7^88, x1^41*x3^66*x5^89*x7^94*x8^51, x1^41*x3^66*x5^89*x7^82, x1^41*x3^66*x6^98*x7^94*x8^51, x1^41*x3^66*x6^98*x7^82, x1^41*x3^66*x7^76, x1^41*x3^47*x4^79*x7^94, x1^41*x3^45*x4^80*x8^51, x1^41*x3^45*x4^79, x1^41*x3^45*x5^89*x8^51, x1^41*x3^45*x6^98*x8^51, x1^41*x3^34*x7^82, x1^41*x3^34*x8^51, x1^41*x5^92*x7^56*x8^57, x1^41*x6^98*x7^56*x8^57, x1^41*x7^56*x8^56, x1^29*x5^92*x7^56, x1^29*x5^36, x1^29*x6^98*x7^56, x1^28*x2^64*x3^82*x4^80*x5^92*x7^94*x8^67, x1^28*x2^64*x3^82*x4^80*x7^94*x8^56, x1^28*x2^64*x3^82*x5^89*x7^94*x8^67, x1^28*x2^64*x3^82*x5^70*x7^94, x1^28*x2^64*x3^82*x5^54, x1^28*x2^64*x3^82*x6^98*x7^94*x8^67, x1^28*x2^64*x3^70*x4^80*x7^94*x8^67, x1^28*x2^64*x3^70*x4^80*x7^88, x1^28*x2^64*x4^80*x5^92*x7^92*x8^67, x1^28*x2^64*x4^80*x5^92*x7^88, x1^28*x2^64*x4^80*x7^92*x8^56, x1^28*x2^64*x5^89*x7^92*x8^67, x1^28*x2^64*x5^89*x7^88, x1^28*x2^64*x5^70*x6^56*x7^94, x1^28*x2^64*x5^70*x6^45, x1^28*x2^64*x5^70*x7^92, x1^28*x2^64*x5^54*x6^56, x1^28*x2^64*x5^50, x1^28*x2^64*x6^98*x7^92*x8^67, x1^28*x2^64*x6^98*x7^88, x1^28*x2^64*x6^56*x7^94*x8^67, x1^28*x2^64*x6^45*x8^67, x1^28*x2^64*x6^40, x1^28*x2^36*x4^80*x5^92*x7^94*x8^67, x1^28*x2^36*x4^80*x7^94*x8^56, x1^28*x2^36*x4^80*x8^48, x1^28*x2^36*x5^89*x7^94*x8^67, x1^28*x2^36*x5^89*x8^48, x1^28*x2^36*x5^70*x7^94, x1^28*x2^36*x5^54, x1^28*x2^36*x6^98*x7^94*x8^67, x1^28*x2^36*x6^98*x8^48, x1^28*x3^82*x4^80*x7^94*x8^51, x1^28*x3^82*x4^80*x8^48, x1^28*x3^82*x4^79*x5^92*x7^94*x8^67, x1^28*x3^82*x4^79*x5^70*x7^94, x1^28*x3^82*x4^79*x5^54, x1^28*x3^82*x4^79*x6^98*x7^94*x8^67, x1^28*x3^82*x4^79*x7^94*x8^56, x1^28*x3^82*x5^89*x7^94*x8^51, x1^28*x3^82*x5^89*x8^48, x1^28*x3^82*x5^54*x8^51, x1^28*x3^82*x6^98*x7^94*x8^51, x1^28*x3^82*x6^98*x8^48, x1^28*x3^70*x4^80*x7^82, x1^28*x3^70*x4^79*x7^94*x8^67, x1^28*x3^70*x4^79*x7^88, x1^28*x3^70*x4^48*x7^94, x1^28*x3^70*x7^76, x1^28*x4^80*x5^92*x7^82, x1^28*x4^80*x7^92*x8^51, x1^28*x4^80*x7^82*x8^56, x1^28*x4^79*x5^92*x7^92*x8^67, x1^28*x4^79*x5^92*x7^88, x1^28*x4^79*x5^70*x6^56*x7^94, x1^28*x4^79*x5^70*x6^45, x1^28*x4^79*x5^70*x7^92, x1^28*x4^79*x5^54*x6^56, x1^28*x4^79*x5^50, x1^28*x4^79*x6^98*x7^92*x8^67, x1^28*x4^79*x6^98*x7^88, x1^28*x4^79*x6^56*x7^94*x8^67, x1^28*x4^79*x6^45*x8^67, x1^28*x4^79*x6^40, x1^28*x4^79*x7^92*x8^56, x1^28*x4^71*x5^92*x7^94*x8^67, x1^28*x4^71*x5^70*x7^94, x1^28*x4^71*x5^54, x1^28*x4^71*x6^98*x7^94*x8^67, x1^28*x4^71*x7^94*x8^56, x1^28*x4^71*x8^48, x1^28*x4^48*x5^92*x7^94, x1^28*x4^48*x6^98*x7^94, x1^28*x4^48*x6^45, x1^28*x5^92*x7^76, x1^28*x5^89*x7^92*x8^51, x1^28*x5^89*x7^82, x1^28*x5^54*x6^56*x8^51, x1^28*x5^50*x8^51, x1^28*x5^46, x1^28*x6^98*x7^92*x8^51, x1^28*x6^98*x7^82, x1^28*x6^56*x7^94*x8^51, x1^28*x6^56*x8^48, x1^28*x6^45*x8^51, x1^28*x7^76*x8^56, x1^23*x2^64*x4^80*x5^92*x7^94*x8^67, x1^23*x2^64*x4^80*x7^94*x8^56, x1^23*x2^64*x5^89*x7^94*x8^67, x1^23*x2^64*x5^70*x7^94, x1^23*x2^64*x5^54, x1^23*x2^64*x6^98*x7^94*x8^67, x1^23*x4^80*x7^94*x8^51, x1^23*x4^80*x8^48, x1^23*x4^79*x5^92*x7^94*x8^67, x1^23*x4^79*x5^70*x7^94, x1^23*x4^79*x5^54, x1^23*x4^79*x6^98*x7^94*x8^67, x1^23*x4^79*x7^94*x8^56, x1^23*x5^89*x7^94*x8^51, x1^23*x5^89*x8^48, x1^23*x5^54*x8^51, x1^23*x6^98*x7^94*x8^51, x1^23*x6^98*x8^48, x1^23*x8^14, x1^18*x3^70*x4^80*x7^94*x8^67, x1^18*x3^70*x4^80*x7^88, x1^18*x3^47*x4^80*x7^94, x1^18*x3^47*x5^89*x7^94, x1^18*x3^47*x6^98*x7^94, x1^18*x3^47*x6^45, x1^18*x3^45*x4^80, x1^18*x3^45*x5^89, x1^18*x3^45*x6^98, x1^18*x3^34, x1^18*x4^80*x5^92*x7^94*x8^67, x1^18*x4^80*x5^92*x7^88, x1^18*x4^80*x7^94*x8^56, x1^18*x5^89*x7^94*x8^67, x1^18*x5^89*x7^88, x1^18*x5^70*x6^45, x1^18*x5^70*x7^94, x1^18*x5^54, x1^18*x6^98*x7^94*x8^67, x1^18*x6^98*x7^88, x1^18*x6^45*x8^67, x1^18*x6^40, x1^17*x2^25*x4^80*x8^67, x1^17*x2^25*x4^48, x1^17*x2^18*x4^80, x1^17*x2^8, x1^17*x4^80*x7^94*x8^67, x1^17*x4^80*x7^88, x1^17*x4^48*x7^94, x1^17*x7^76, x1^13*x3^47*x4^80, x1^13*x3^47*x5^89, x1^13*x3^47*x6^98, x1^13*x4^80*x8^67, x1^13*x4^48, x1^13*x5^89*x8^67, x1^13*x5^70, x1^13*x6^98*x8^67, x1^12*x4^80, x1^12*x5^89, x1^12*x6^98, x1^6, x2^84*x3^91*x4^58*x5^92*x7^37*x8^58, x2^84*x3^91*x4^58*x6^98*x7^37*x8^58, x2^84*x3^91*x4^55*x5^92*x7^56*x8^58, x2^84*x3^91*x4^55*x6^98*x7^56*x8^58, x2^84*x3^91*x5^92*x7^17*x8^58, x2^84*x3^91*x6^98*x7^17*x8^58, x2^84*x3^82*x4^80*x8^20, x2^84*x3^82*x5^89*x8^20, x2^84*x3^82*x6^98*x8^20, x2^84*x3^82*x8^14, x2^84*x3^78*x4^55*x8^39, x2^84*x3^70*x4^58*x7^37*x8^58, x2^84*x3^70*x4^55*x7^56*x8^58, x2^84*x3^70*x7^17*x8^58, x2^84*x3^70*x7^6, x2^84*x3^66*x4^55*x7^94*x8^58, x2^84*x3^66*x4^55*x8^48, x2^84*x3^65*x4^58*x7^94*x8^58, x2^84*x3^65*x4^58*x8^48, x2^84*x3^64*x4^58*x7^94*x8^67, x2^84*x3^64*x4^58*x7^88, x2^84*x3^64*x4^48*x7^94, x2^84*x3^64*x7^17, x2^84*x4^80*x7^92*x8^20, x2^84*x4^71*x8^20, x2^84*x4^58*x5^92*x7^37*x8^57, x2^84*x4^58*x6^98*x7^37*x8^57, x2^84*x4^58*x6^58*x7^37*x8^58, x2^84*x4^58*x7^37*x8^56, x2^84*x4^58*x8^33, x2^84*x4^55*x5^92*x7^56*x8^57, x2^84*x4^55*x5^84*x8^39, x2^84*x4^55*x6^98*x7^56*x8^57, x2^84*x4^55*x6^58*x7^56*x8^58, x2^84*x4^55*x7^81*x8^39, x2^84*x4^55*x7^56*x8^56, x2^84*x4^55*x8^36, x2^84*x4^51*x5^92*x7^56*x8^58, x2^84*x4^51*x6^98*x7^56*x8^58, x2^84*x5^92*x7^17*x8^57, x2^84*x5^92*x7^6, x2^84*x5^89*x7^92*x8^20, x2^84*x6^98*x7^92*x8^20, x2^84*x6^98*x7^17*x8^57, x2^84*x6^98*x7^6, x2^84*x6^58*x7^17*x8^58, x2^84*x6^56*x8^20, x2^84*x7^92*x8^14, x2^84*x7^76*x8^20, x2^84*x7^17*x8^56, x2^84*x7, x2^84*x8^13, x2^74*x4^79*x6^11, x2^74*x6^11*x8^51, x2^64*x3^66*x5^70*x6^43, x2^64*x3^66*x5^47, x2^64*x3^65*x5^70*x6^45, x2^64*x3^65*x5^70*x7^94, x2^64*x3^65*x5^54, x2^64*x3^45*x5^70, x2^64*x3^26, x2^64*x5^70*x6^35, x2^64*x6^11, x2^63*x3^91*x4^77*x5^92*x7^56*x8^58, x2^63*x3^91*x4^77*x5^80*x7^56, x2^63*x3^91*x4^77*x6^98*x7^56*x8^58, x2^63*x3^91*x5^92*x7^54*x8^58, x2^63*x3^91*x5^80*x7^54, x2^63*x3^91*x5^76*x7^56, x2^63*x3^91*x6^98*x7^54*x8^58, x2^63*x3^82*x4^80*x8^36, x2^63*x3^82*x5^89*x8^36, x2^63*x3^82*x5^84*x8^39, x2^63*x3^82*x6^98*x8^36, x2^63*x3^78*x4^80*x8^39, x2^63*x3^78*x5^89*x8^39, x2^63*x3^78*x6^98*x8^39, x2^63*x3^70*x4^77*x7^56*x8^58, x2^63*x3^70*x7^54*x8^58, x2^63*x3^66*x4^80*x7^94*x8^50, x2^63*x3^66*x4^80*x8^48, x2^63*x3^66*x4^77*x5^80*x7^94*x8^67, x2^63*x3^66*x4^77*x5^80*x7^88, x2^63*x3^66*x4^77*x7^94*x8^58, x2^63*x3^66*x5^89*x7^94*x8^50, x2^63*x3^66*x5^89*x8^48, x2^63*x3^66*x5^80*x6^58*x7^94*x8^67, x2^63*x3^66*x5^80*x6^58*x7^88, x2^63*x3^66*x5^80*x6^45*x8^67, x2^63*x3^66*x5^80*x6^40, x2^63*x3^66*x5^76*x7^94*x8^67, x2^63*x3^66*x5^76*x7^88, x2^63*x3^66*x5^70*x6^45, x2^63*x3^66*x5^70*x7^94, x2^63*x3^66*x5^54, x2^63*x3^66*x6^98*x7^94*x8^50, x2^63*x3^66*x6^98*x8^48, x2^63*x3^66*x6^58*x7^94*x8^58, x2^63*x3^66*x6^45*x8^58, x2^63*x3^66*x7^76*x8^50, x2^63*x3^64*x4^77*x7^94*x8^67, x2^63*x3^64*x4^77*x7^88, x2^63*x3^64*x6^58*x7^94*x8^67, x2^63*x3^64*x6^58*x7^88, x2^63*x3^64*x6^45*x8^67, x2^63*x3^64*x6^40, x2^63*x3^64*x7^54, x2^63*x3^47*x4^77*x7^94, x2^63*x3^47*x5^76*x7^94, x2^63*x3^47*x6^58*x7^94, x2^63*x3^47*x6^45, x2^63*x3^45*x4^80*x8^50, x2^63*x3^45*x4^77, x2^63*x3^45*x5^89*x8^50, x2^63*x3^45*x5^76, x2^63*x3^45*x6^98*x8^50, x2^63*x3^45*x6^58, x2^63*x3^34*x8^50, x2^63*x3^33, x2^63*x4^80*x7^92*x8^36, x2^63*x4^80*x7^81*x8^39, x2^63*x4^77*x5^92*x7^56*x8^57, x2^63*x4^77*x6^98*x7^56*x8^57, x2^63*x4^77*x7^56*x8^56, x2^63*x4^71*x5^84*x8^39, x2^63*x4^71*x8^36, x2^63*x5^92*x7^54*x8^57, x2^63*x5^89*x7^92*x8^36, x2^63*x5^89*x7^81*x8^39, x2^63*x5^84*x6^56*x8^39, x2^63*x5^84*x7^92*x8^39, x2^63*x5^80*x6^58*x7^56, x2^63*x5^80*x6^35, x2^63*x5^76*x7^56*x8^57, x2^63*x5^50*x8^39, x2^63*x6^98*x7^92*x8^36, x2^63*x6^98*x7^81*x8^39, x2^63*x6^98*x7^54*x8^57, x2^63*x6^58*x7^56*x8^58, x2^63*x6^56*x8^36, x2^63*x6^53*x8^39, x2^63*x6^35*x8^58, x2^63*x6^20, x2^63*x7^76*x8^39, x2^63*x7^56*x8^50, x2^63*x7^54*x8^56, x2^45*x3^91*x4^77*x5^92*x7^56, x2^45*x3^91*x4^77*x6^98*x7^56, x2^45*x3^91*x5^92*x7^54, x2^45*x3^91*x6^98*x7^54, x2^45*x3^78*x4^38*x5^92*x7^94, x2^45*x3^78*x4^38*x6^98*x7^94, x2^45*x3^78*x4^32, x2^45*x3^70*x4^77*x7^56, x2^45*x3^70*x4^38*x7^94, x2^45*x3^70*x7^54, x2^45*x3^66*x4^77*x7^94*x8^67, x2^45*x3^66*x4^77*x7^88, x2^45*x3^66*x4^48*x6^45, x2^45*x3^66*x4^48*x7^94, x2^45*x3^66*x6^58*x7^94*x8^67, x2^45*x3^66*x6^58*x7^88, x2^45*x3^66*x6^45*x8^67, x2^45*x3^66*x6^40, x2^45*x4^51*x5^92*x7^56, x2^45*x4^51*x6^98*x7^56, x2^45*x4^38*x5^92*x7^81, x2^45*x4^38*x5^84*x7^94, x2^45*x4^38*x6^98*x7^81, x2^45*x4^38*x6^53*x7^94, x2^45*x4^38*x6^45, x2^45*x4^32*x5^84, x2^45*x4^32*x6^53, x2^45*x4^32*x7^81, x2^45*x6^58*x7^56, x2^45*x6^35, x2^40*x4^77*x5^92*x7^56, x2^40*x4^77*x6^98*x7^56, x2^40*x5^92*x7^54, x2^40*x5^76*x7^56, x2^40*x5^36, x2^40*x6^98*x7^54, x2^36*x4^80*x8^36, x2^36*x5^89*x8^36, x2^36*x5^84*x8^39, x2^36*x6^98*x8^36, x2^36*x8^14, x2^29*x4^80*x8^39, x2^29*x4^38*x5^92*x7^94, x2^29*x4^38*x6^98*x7^94, x2^29*x4^38*x7^94*x8^56, x2^29*x4^38*x8^48, x2^29*x4^32, x2^29*x5^89*x8^39, x2^29*x6^98*x8^39, x2^26*x3^70*x4^77*x7^94*x8^67, x2^26*x3^70*x4^77*x7^88, x2^26*x3^70*x4^48*x7^94, x2^26*x4^80*x7^94*x8^50, x2^26*x4^80*x8^48, x2^26*x4^77*x5^92*x7^94*x8^67, x2^26*x4^77*x5^92*x7^88, x2^26*x4^77*x6^98*x7^94*x8^67, x2^26*x4^77*x6^98*x7^88, x2^26*x4^77*x7^94*x8^56, x2^26*x4^48*x5^92*x7^94, x2^26*x4^48*x6^98*x7^94, x2^26*x4^48*x6^45, x2^26*x5^89*x7^94*x8^50, x2^26*x5^89*x8^48, x2^26*x5^76*x7^94*x8^67, x2^26*x5^76*x7^88, x2^26*x5^70*x6^45, x2^26*x5^70*x7^94, x2^26*x5^54, x2^26*x6^98*x7^94*x8^50, x2^26*x6^98*x8^48, x2^26*x6^58*x7^94*x8^67, x2^26*x6^58*x7^88, x2^26*x6^45*x8^67, x2^26*x6^40, x2^26*x7^76*x8^50, x2^25*x3^70*x4^77*x8^67, x2^25*x3^70*x4^48, x2^25*x3^47*x4^77, x2^25*x3^47*x5^76, x2^25*x3^47*x6^58, x2^25*x4^80*x8^50, x2^25*x4^77*x5^92*x8^67, x2^25*x4^77*x6^98*x8^67, x2^25*x4^77*x8^56, x2^25*x4^48*x5^92, x2^25*x4^48*x6^98, x2^25*x5^89*x8^50, x2^25*x5^76*x8^67, x2^25*x5^70, x2^25*x6^98*x8^50, x2^25*x6^58*x8^67, x2^18*x3^70*x4^77, x2^18*x4^77*x5^92, x2^18*x4^77*x6^98, x2^18*x5^76, x2^18*x6^58, x2^8*x8^50, x2^7*x3^70, x2^7*x5^92, x2^7*x6^98, x2^7*x8^56, x3^91*x4^58*x5^80*x7^37, x3^91*x4^55*x5^80*x7^56, x3^91*x5^80*x7^17, x3^91*x5^70*x7^37, x3^91*x5^47*x7^56, x3^91*x5^36, x3^82*x5^80*x8^20, x3^82*x5^70*x8^33, x3^78*x4^45*x8^39, x3^78*x4^38*x5^92*x7^94*x8^58, x3^78*x4^38*x6^98*x7^94*x8^58, x3^78*x4^38*x7^94*x8^56, x3^78*x4^38*x8^48, x3^78*x4^32*x8^58, x3^78*x4^20, x3^70*x4^45*x7^56*x8^58, x3^70*x4^45*x7^6, x3^70*x4^38*x7^94*x8^58, x3^66*x4^79*x5^70*x6^43, x3^66*x4^79*x5^47, x3^66*x4^58*x5^80*x6^43*x7^88, x3^66*x4^58*x5^80*x6^43*x8^67, x3^66*x4^58*x5^80*x6^40, x3^66*x4^58*x6^43*x8^58, x3^66*x4^55*x5^80*x6^45*x8^67, x3^66*x4^55*x5^80*x7^94*x8^67, x3^66*x4^55*x5^80*x7^88, x3^66*x4^55*x5^80*x8^48, x3^66*x4^55*x5^70*x6^45, x3^66*x4^55*x5^70*x7^94, x3^66*x4^55*x5^54, x3^66*x4^55*x6^53*x7^94*x8^58, x3^66*x4^55*x6^53*x8^48, x3^66*x4^55*x6^45*x8^58, x3^66*x4^48*x5^80*x6^45, x3^66*x4^48*x5^80*x7^94, x3^66*x4^45*x7^94*x8^58, x3^66*x4^45*x8^48, x3^66*x5^70*x6^43*x7^82, x3^66*x5^70*x6^43*x8^51, x3^66*x5^47*x7^82, x3^66*x5^47*x8^51, x3^66*x5^46, x3^65*x4^79*x5^70*x6^45, x3^65*x4^79*x5^70*x7^94, x3^65*x4^79*x5^54, x3^65*x4^58*x5^80*x6^45*x8^67, x3^65*x4^58*x5^80*x7^94*x8^67, x3^65*x4^58*x5^80*x7^88, x3^65*x4^58*x5^80*x8^48, x3^65*x4^58*x6^53*x7^94*x8^58, x3^65*x4^58*x6^53*x8^48, x3^65*x4^58*x6^45*x8^58, x3^65*x5^70*x6^45*x8^51, x3^65*x5^70*x7^94*x8^51, x3^65*x5^70*x7^82, x3^65*x5^70*x8^48, x3^65*x5^54*x8^51, x3^64*x4^58*x6^53*x7^94*x8^67, x3^64*x4^58*x6^53*x7^88, x3^64*x4^58*x6^45*x8^67, x3^64*x4^58*x6^40, x3^64*x4^48*x6^53*x7^94, x3^64*x4^48*x6^45, x3^64*x4^45*x7^94, x3^64*x4^32, x3^64*x6^53*x7^17, x3^48*x4^80*x8^20, x3^48*x4^58*x7^94*x8^67, x3^48*x4^58*x7^88, x3^48*x4^58*x8^48, x3^48*x4^48*x7^94, x3^48*x5^89*x8^20, x3^48*x6^98*x8^20, x3^48*x7^76*x8^20, x3^48*x7^17, x3^48*x8^14, x3^47*x4^58*x6^45, x3^47*x4^58*x7^94, x3^45*x4^79*x5^70, x3^45*x4^58, x3^45*x5^70*x8^51, x3^34*x4^79*x6^11, x3^34*x6^11*x8^51, x3^34*x8^20, x3^26*x4^79, x3^26*x7^82, x3^26*x8^51, x3^14, x4^79*x5^96*x6^11, x4^79*x5^70*x6^35, x4^79*x6^11*x7^98, x4^79*x6^4, x4^71*x5^80*x8^20, x4^71*x5^70*x8^33, x4^67*x6^11, x4^58*x5^80*x6^58*x7^37, x4^58*x5^80*x6^43*x7^56, x4^58*x5^80*x6^35, x4^58*x5^80*x7^37*x8^57, x4^58*x5^80*x8^33, x4^58*x6^53*x7^37*x8^58, x4^58*x6^53*x8^33, x4^58*x6^43*x7^56*x8^58, x4^58*x6^43*x8^39, x4^58*x6^35*x8^58, x4^58*x6^20, x4^55*x5^80*x6^58*x7^56, x4^55*x5^80*x7^56*x8^57, x4^55*x5^80*x8^39, x4^55*x6^53*x7^56*x8^58, x4^55*x6^53*x8^39, x4^51*x5^80*x7^56, x4^51*x5^36, x4^45*x5^92*x7^56*x8^58, x4^45*x5^92*x7^6, x4^45*x5^84*x8^39, x4^45*x6^98*x7^56*x8^58, x4^45*x6^98*x7^6, x4^45*x7^81*x8^39, x4^45*x7^56*x8^56, x4^45*x7, x4^45*x8^36, x4^38*x5^92*x7^81*x8^58, x4^38*x5^84*x7^94*x8^58, x4^38*x5^84*x8^48, x4^38*x5^80*x6^45, x4^38*x5^80*x7^94, x4^38*x5^54, x4^38*x6^98*x7^81*x8^58, x4^38*x6^53*x7^94*x8^58, x4^38*x6^53*x8^48, x4^38*x6^45*x8^58, x4^38*x7^81*x8^56, x4^32*x5^84*x8^58, x4^32*x5^80, x4^32*x6^53*x8^58, x4^32*x7^81*x8^58, x4^32*x7^6, x4^20*x5^84, x4^20*x6^53, x4^20*x7^81, x4^16, x5^96*x6^11*x8^51, x5^80*x6^58*x7^17, x5^80*x6^56*x8^20, x5^80*x7^92*x8^20, x5^80*x7^17*x8^57, x5^80*x7^6, x5^80*x8^13, x5^70*x6^58*x7^37, x5^70*x6^56*x8^33, x5^70*x6^43*x7^56, x5^70*x6^43*x8^39, x5^70*x6^35*x7^82, x5^70*x6^35*x8^51, x5^70*x7^92*x8^33, x5^70*x7^37*x8^57, x5^50*x8^33, x5^47*x6^58*x7^56, x5^47*x7^56*x8^57, x5^47*x8^39, x5^46*x6^35, x5^36*x6^58, x5^36*x8^57, x5^24, x6^53*x7^17*x8^58, x6^53*x7^6, x6^53*x8^20, x6^20*x7^17, x6^11*x7^98*x8^51, x6^11*x7^82, x6^11*x8^37, x6^4*x8^51, x6^3, x8^5 ); frobby-0.9.5/test/commonIdeals/t16.maxstandard000066400000000000000000000001001401527164200212340ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal(0_R); frobby-0.9.5/test/commonIdeals/t16.minimize000066400000000000000000000015061401527164200205620ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^99*x2^63*x3^26*x4^58*x5^70*x6^11*x7^17*x8^20, x1^94*x2^84*x3^48*x4^45*x5^80*x6^53*x8^5, x1^81*x2^73*x3^87*x4^70*x5^93*x6^85*x7^62*x8^30, x1^74*x2^74*x3^34*x4^67*x5^96*x6^4*x7^98*x8^37, x1^68*x2^45*x3^64*x4^20*x5^80*x6^20*x7^6*x8^58, x1^47*x2^63*x3^65*x4^55*x5^47*x6^43*x7^37*x8^33, x1^44*x2^29*x3^78*x4^16*x5^84*x6^53*x7^81*x8^36, x1^41*x2^7*x3^33*x4^77*x5^76*x6^58*x7^54*x8^50, x1^29*x2^40*x3^91*x4^51*x5^24*x6^58*x7^6*x8^57, x1^28*x2^26*x3^66*x4^38*x5^36*x6^35*x7^56*x8^39, x1^23*x2^36*x3^82*x4^71*x5^50*x6^56*x7^92*x8^13, x1^18*x2^64*x3^14*x4^79*x5^46*x6^3*x7^82*x8^51, x1^17*x3^70*x4^32*x5^92*x6^98*x7*x8^56, x1^13*x2^25*x3^45*x4^32*x5^54*x6^45*x7^94*x8^48, x1^12*x2^18*x3^47*x4^48*x5^70*x6^40*x7^88*x8^67, x1^6*x2^8*x3^34*x4^80*x5^89*x6^98*x7^76*x8^14 ); frobby-0.9.5/test/commonIdeals/t16.multi000066400000000000000000001132651401527164200201010ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; p = x1^99*x2^84*x3^91*x4^58*x5^92*x6^98*x7^37*x8^58 + -x1^99*x2^84*x3^91*x4^58*x5^92*x6^98*x7^37*x8^57 + -x1^99*x2^84*x3^91*x4^58*x5^92*x6^98*x7^17*x8^58 + x1^99*x2^84*x3^91*x4^58*x5^92*x6^98*x7^17*x8^57 + -x1^99*x2^84*x3^91*x4^58*x5^80*x6^58*x7^37*x8^58 + x1^99*x2^84*x3^91*x4^58*x5^80*x6^58*x7^37*x8^57 + x1^99*x2^84*x3^91*x4^58*x5^80*x6^58*x7^17*x8^58 + -x1^99*x2^84*x3^91*x4^58*x5^80*x6^58*x7^17*x8^57 + x1^99*x2^84*x3^87*x4^80*x5^93*x6^98*x7^92*x8^33 + -x1^99*x2^84*x3^87*x4^80*x5^93*x6^98*x7^92*x8^30 + -x1^99*x2^84*x3^87*x4^80*x5^93*x6^98*x7^76*x8^33 + x1^99*x2^84*x3^87*x4^80*x5^93*x6^98*x7^76*x8^30 + -x1^99*x2^84*x3^87*x4^71*x5^93*x6^85*x7^92*x8^33 + x1^99*x2^84*x3^87*x4^71*x5^93*x6^85*x7^92*x8^30 + x1^99*x2^84*x3^87*x4^70*x5^93*x6^85*x7^62*x8^33 + -x1^99*x2^84*x3^87*x4^70*x5^93*x6^85*x7^62*x8^30 + -x1^99*x2^84*x3^82*x4^80*x5^89*x6^98*x7^92*x8^33 + x1^99*x2^84*x3^82*x4^80*x5^89*x6^98*x7^92*x8^20 + x1^99*x2^84*x3^82*x4^71*x5^80*x6^56*x7^92*x8^33 + -x1^99*x2^84*x3^82*x4^71*x5^80*x6^56*x7^92*x8^20 + -x1^99*x2^84*x3^70*x4^58*x5^92*x6^98*x7^37*x8^58 + x1^99*x2^84*x3^70*x4^58*x5^92*x6^98*x7^37*x8^56 + x1^99*x2^84*x3^70*x4^58*x5^92*x6^98*x7^17*x8^58 + -x1^99*x2^84*x3^70*x4^58*x5^92*x6^98*x7^17*x8^56 + x1^99*x2^84*x3^65*x4^80*x5^96*x6^98*x7^98*x8^48 + -x1^99*x2^84*x3^65*x4^80*x5^96*x6^98*x7^98*x8^37 + x1^99*x2^84*x3^65*x4^80*x5^89*x6^98*x7^94*x8^50 + -x1^99*x2^84*x3^65*x4^80*x5^89*x6^98*x7^94*x8^48 + -x1^99*x2^84*x3^65*x4^80*x5^89*x6^98*x7^76*x8^50 + x1^99*x2^84*x3^65*x4^80*x5^89*x6^98*x7^76*x8^33 + -x1^99*x2^84*x3^65*x4^79*x5^80*x6^58*x7^94*x8^58 + x1^99*x2^84*x3^65*x4^79*x5^80*x6^58*x7^94*x8^51 + x1^99*x2^84*x3^65*x4^79*x5^80*x6^58*x7^82*x8^58 + -x1^99*x2^84*x3^65*x4^79*x5^80*x6^58*x7^82*x8^51 + x1^99*x2^84*x3^65*x4^79*x5^80*x6^53*x7^94*x8^58 + -x1^99*x2^84*x3^65*x4^79*x5^80*x6^53*x7^94*x8^51 + -x1^99*x2^84*x3^65*x4^79*x5^80*x6^53*x7^82*x8^58 + x1^99*x2^84*x3^65*x4^79*x5^80*x6^53*x7^82*x8^51 + x1^99*x2^84*x3^65*x4^77*x5^80*x6^58*x7^94*x8^58 + -x1^99*x2^84*x3^65*x4^77*x5^80*x6^58*x7^94*x8^50 + -x1^99*x2^84*x3^65*x4^77*x5^80*x6^58*x7^54*x8^58 + x1^99*x2^84*x3^65*x4^77*x5^80*x6^58*x7^54*x8^50 + -x1^99*x2^84*x3^65*x4^67*x5^96*x6^53*x7^98*x8^48 + x1^99*x2^84*x3^65*x4^67*x5^96*x6^53*x7^98*x8^37 + -x1^99*x2^84*x3^65*x4^58*x5^80*x6^53*x7^94*x8^58 + x1^99*x2^84*x3^65*x4^58*x5^80*x6^53*x7^94*x8^48 + x1^99*x2^84*x3^65*x4^58*x5^80*x6^53*x7^37*x8^58 + -x1^99*x2^84*x3^65*x4^58*x5^80*x6^53*x7^37*x8^33 + -x1^99*x2^84*x3^64*x4^79*x5^80*x6^58*x7^94*x8^67 + x1^99*x2^84*x3^64*x4^79*x5^80*x6^58*x7^94*x8^58 + x1^99*x2^84*x3^64*x4^79*x5^80*x6^58*x7^88*x8^67 + -x1^99*x2^84*x3^64*x4^79*x5^80*x6^58*x7^82*x8^58 + x1^99*x2^84*x3^64*x4^79*x5^80*x6^53*x7^94*x8^67 + -x1^99*x2^84*x3^64*x4^79*x5^80*x6^53*x7^94*x8^58 + -x1^99*x2^84*x3^64*x4^79*x5^80*x6^53*x7^88*x8^67 + x1^99*x2^84*x3^64*x4^79*x5^80*x6^53*x7^82*x8^58 + x1^99*x2^84*x3^64*x4^77*x5^80*x6^58*x7^94*x8^67 + -x1^99*x2^84*x3^64*x4^77*x5^80*x6^58*x7^94*x8^58 + -x1^99*x2^84*x3^64*x4^77*x5^80*x6^58*x7^88*x8^67 + x1^99*x2^84*x3^64*x4^77*x5^80*x6^58*x7^54*x8^58 + -x1^99*x2^84*x3^64*x4^58*x5^80*x6^53*x7^94*x8^67 + x1^99*x2^84*x3^64*x4^58*x5^80*x6^53*x7^94*x8^58 + x1^99*x2^84*x3^64*x4^58*x5^80*x6^53*x7^88*x8^67 + -x1^99*x2^84*x3^64*x4^58*x5^80*x6^53*x7^17*x8^58 + -x1^99*x2^84*x3^48*x4^80*x5^96*x6^98*x7^98*x8^48 + x1^99*x2^84*x3^48*x4^80*x5^96*x6^98*x7^98*x8^37 + -x1^99*x2^84*x3^48*x4^80*x5^89*x6^98*x7^94*x8^50 + x1^99*x2^84*x3^48*x4^80*x5^89*x6^98*x7^94*x8^48 + x1^99*x2^84*x3^48*x4^80*x5^89*x6^98*x7^76*x8^50 + -x1^99*x2^84*x3^48*x4^80*x5^89*x6^98*x7^76*x8^20 + x1^99*x2^84*x3^48*x4^79*x5^80*x6^58*x7^94*x8^67 + -x1^99*x2^84*x3^48*x4^79*x5^80*x6^58*x7^94*x8^51 + -x1^99*x2^84*x3^48*x4^79*x5^80*x6^58*x7^88*x8^67 + x1^99*x2^84*x3^48*x4^79*x5^80*x6^58*x7^82*x8^51 + -x1^99*x2^84*x3^48*x4^79*x5^80*x6^53*x7^94*x8^67 + x1^99*x2^84*x3^48*x4^79*x5^80*x6^53*x7^94*x8^51 + x1^99*x2^84*x3^48*x4^79*x5^80*x6^53*x7^88*x8^67 + -x1^99*x2^84*x3^48*x4^79*x5^80*x6^53*x7^82*x8^51 + -x1^99*x2^84*x3^48*x4^77*x5^80*x6^58*x7^94*x8^67 + x1^99*x2^84*x3^48*x4^77*x5^80*x6^58*x7^94*x8^50 + x1^99*x2^84*x3^48*x4^77*x5^80*x6^58*x7^88*x8^67 + -x1^99*x2^84*x3^48*x4^77*x5^80*x6^58*x7^54*x8^50 + x1^99*x2^84*x3^48*x4^67*x5^96*x6^53*x7^98*x8^48 + -x1^99*x2^84*x3^48*x4^67*x5^96*x6^53*x7^98*x8^37 + x1^99*x2^84*x3^48*x4^58*x5^80*x6^53*x7^94*x8^67 + -x1^99*x2^84*x3^48*x4^58*x5^80*x6^53*x7^94*x8^48 + -x1^99*x2^84*x3^48*x4^58*x5^80*x6^53*x7^88*x8^67 + x1^99*x2^84*x3^48*x4^58*x5^80*x6^53*x7^17*x8^20 + x1^99*x2^74*x3^66*x4^79*x5^96*x6^43*x7^98*x8^58 + -x1^99*x2^74*x3^66*x4^79*x5^96*x6^43*x7^98*x8^51 + -x1^99*x2^74*x3^66*x4^79*x5^96*x6^35*x7^98*x8^58 + x1^99*x2^74*x3^66*x4^79*x5^96*x6^35*x7^98*x8^51 + -x1^99*x2^74*x3^66*x4^67*x5^96*x6^43*x7^98*x8^58 + x1^99*x2^74*x3^66*x4^67*x5^96*x6^43*x7^98*x8^39 + x1^99*x2^74*x3^66*x4^67*x5^96*x6^35*x7^98*x8^58 + -x1^99*x2^74*x3^66*x4^67*x5^96*x6^35*x7^98*x8^39 + -x1^99*x2^74*x3^65*x4^80*x5^96*x6^98*x7^98*x8^48 + x1^99*x2^74*x3^65*x4^80*x5^96*x6^98*x7^98*x8^37 + x1^99*x2^74*x3^65*x4^79*x5^96*x6^45*x7^98*x8^58 + -x1^99*x2^74*x3^65*x4^79*x5^96*x6^45*x7^98*x8^51 + -x1^99*x2^74*x3^65*x4^79*x5^96*x6^43*x7^98*x8^58 + x1^99*x2^74*x3^65*x4^79*x5^96*x6^43*x7^98*x8^51 + -x1^99*x2^74*x3^65*x4^67*x5^96*x6^45*x7^98*x8^58 + x1^99*x2^74*x3^65*x4^67*x5^96*x6^45*x7^98*x8^48 + x1^99*x2^74*x3^65*x4^67*x5^96*x6^43*x7^98*x8^58 + -x1^99*x2^74*x3^65*x4^67*x5^96*x6^43*x7^98*x8^37 + x1^99*x2^74*x3^64*x4^79*x5^96*x6^45*x7^98*x8^67 + -x1^99*x2^74*x3^64*x4^79*x5^96*x6^45*x7^98*x8^58 + -x1^99*x2^74*x3^64*x4^79*x5^96*x6^40*x7^98*x8^67 + x1^99*x2^74*x3^64*x4^79*x5^96*x6^20*x7^98*x8^58 + -x1^99*x2^74*x3^64*x4^67*x5^96*x6^45*x7^98*x8^67 + x1^99*x2^74*x3^64*x4^67*x5^96*x6^45*x7^98*x8^58 + x1^99*x2^74*x3^64*x4^67*x5^96*x6^40*x7^98*x8^67 + -x1^99*x2^74*x3^64*x4^67*x5^96*x6^20*x7^98*x8^58 + -x1^99*x2^74*x3^47*x4^79*x5^96*x6^45*x7^98*x8^67 + x1^99*x2^74*x3^47*x4^79*x5^96*x6^40*x7^98*x8^67 + x1^99*x2^74*x3^47*x4^67*x5^96*x6^45*x7^98*x8^67 + -x1^99*x2^74*x3^47*x4^67*x5^96*x6^40*x7^98*x8^67 + -x1^99*x2^74*x3^45*x4^80*x5^96*x6^98*x7^98*x8^50 + x1^99*x2^74*x3^45*x4^80*x5^96*x6^98*x7^98*x8^48 + -x1^99*x2^74*x3^45*x4^79*x5^96*x6^58*x7^98*x8^51 + x1^99*x2^74*x3^45*x4^79*x5^96*x6^45*x7^98*x8^51 + x1^99*x2^74*x3^45*x4^77*x5^96*x6^58*x7^98*x8^50 + -x1^99*x2^74*x3^45*x4^67*x5^96*x6^45*x7^98*x8^48 + x1^99*x2^74*x3^34*x4^80*x5^96*x6^98*x7^98*x8^50 + -x1^99*x2^74*x3^34*x4^80*x5^96*x6^98*x7^98*x8^37 + x1^99*x2^74*x3^34*x4^79*x5^96*x6^58*x7^98*x8^51 + -x1^99*x2^74*x3^34*x4^79*x5^96*x6^11*x7^98*x8^51 + -x1^99*x2^74*x3^34*x4^77*x5^96*x6^58*x7^98*x8^50 + x1^99*x2^74*x3^34*x4^67*x5^96*x6^11*x7^98*x8^37 + -x1^99*x2^73*x3^87*x4^80*x5^93*x6^98*x7^92*x8^33 + x1^99*x2^73*x3^87*x4^80*x5^93*x6^98*x7^92*x8^30 + x1^99*x2^73*x3^87*x4^80*x5^93*x6^98*x7^76*x8^33 + -x1^99*x2^73*x3^87*x4^80*x5^93*x6^98*x7^76*x8^30 + x1^99*x2^73*x3^87*x4^71*x5^93*x6^85*x7^92*x8^33 + -x1^99*x2^73*x3^87*x4^71*x5^93*x6^85*x7^92*x8^30 + -x1^99*x2^73*x3^87*x4^70*x5^93*x6^85*x7^62*x8^33 + x1^99*x2^73*x3^87*x4^70*x5^93*x6^85*x7^62*x8^30 + x1^99*x2^64*x3^66*x4^79*x5^80*x6^43*x7^88*x8^67 + -x1^99*x2^64*x3^66*x4^79*x5^80*x6^43*x7^82*x8^58 + -x1^99*x2^64*x3^66*x4^79*x5^80*x6^40*x7^88*x8^67 + x1^99*x2^64*x3^66*x4^79*x5^80*x6^35*x7^82*x8^58 + -x1^99*x2^64*x3^66*x4^79*x5^70*x6^43*x7^88*x8^67 + x1^99*x2^64*x3^66*x4^79*x5^70*x6^43*x7^82*x8^51 + x1^99*x2^64*x3^66*x4^79*x5^70*x6^40*x7^88*x8^67 + -x1^99*x2^64*x3^66*x4^79*x5^70*x6^35*x7^82*x8^51 + -x1^99*x2^64*x3^65*x4^79*x5^80*x6^58*x7^94*x8^67 + x1^99*x2^64*x3^65*x4^79*x5^80*x6^58*x7^94*x8^58 + x1^99*x2^64*x3^65*x4^79*x5^80*x6^58*x7^88*x8^67 + -x1^99*x2^64*x3^65*x4^79*x5^80*x6^58*x7^82*x8^58 + x1^99*x2^64*x3^65*x4^79*x5^80*x6^45*x7^94*x8^67 + -x1^99*x2^64*x3^65*x4^79*x5^80*x6^45*x7^94*x8^58 + -x1^99*x2^64*x3^65*x4^79*x5^80*x6^43*x7^88*x8^67 + x1^99*x2^64*x3^65*x4^79*x5^80*x6^43*x7^82*x8^58 + x1^99*x2^64*x3^65*x4^79*x5^76*x6^58*x7^94*x8^67 + -x1^99*x2^64*x3^65*x4^79*x5^76*x6^58*x7^94*x8^51 + -x1^99*x2^64*x3^65*x4^79*x5^76*x6^58*x7^88*x8^67 + x1^99*x2^64*x3^65*x4^79*x5^76*x6^58*x7^82*x8^51 + -x1^99*x2^64*x3^65*x4^79*x5^70*x6^45*x7^94*x8^67 + x1^99*x2^64*x3^65*x4^79*x5^70*x6^45*x7^94*x8^51 + x1^99*x2^64*x3^65*x4^79*x5^70*x6^43*x7^88*x8^67 + -x1^99*x2^64*x3^65*x4^79*x5^70*x6^43*x7^82*x8^51 + x1^99*x2^64*x3^64*x4^79*x5^80*x6^58*x7^94*x8^67 + -x1^99*x2^64*x3^64*x4^79*x5^80*x6^58*x7^94*x8^58 + -x1^99*x2^64*x3^64*x4^79*x5^80*x6^58*x7^88*x8^67 + x1^99*x2^64*x3^64*x4^79*x5^80*x6^58*x7^82*x8^58 + -x1^99*x2^64*x3^64*x4^79*x5^80*x6^45*x7^94*x8^67 + x1^99*x2^64*x3^64*x4^79*x5^80*x6^45*x7^94*x8^58 + x1^99*x2^64*x3^64*x4^79*x5^80*x6^40*x7^88*x8^67 + -x1^99*x2^64*x3^64*x4^79*x5^80*x6^20*x7^82*x8^58 + -x1^99*x2^64*x3^47*x4^79*x5^76*x6^58*x7^94*x8^67 + x1^99*x2^64*x3^47*x4^79*x5^76*x6^58*x7^88*x8^67 + x1^99*x2^64*x3^47*x4^79*x5^70*x6^45*x7^94*x8^67 + -x1^99*x2^64*x3^47*x4^79*x5^70*x6^40*x7^88*x8^67 + x1^99*x2^64*x3^45*x4^79*x5^76*x6^58*x7^94*x8^51 + -x1^99*x2^64*x3^45*x4^79*x5^70*x6^45*x7^94*x8^51 + -x1^99*x2^64*x3^33*x4^79*x5^76*x6^58*x7^82*x8^51 + x1^99*x2^64*x3^26*x4^79*x5^70*x6^11*x7^82*x8^51 + -x1^99*x2^63*x3^91*x4^58*x5^92*x6^98*x7^37*x8^58 + x1^99*x2^63*x3^91*x4^58*x5^92*x6^98*x7^37*x8^57 + x1^99*x2^63*x3^91*x4^58*x5^92*x6^98*x7^17*x8^58 + -x1^99*x2^63*x3^91*x4^58*x5^92*x6^98*x7^17*x8^57 + x1^99*x2^63*x3^91*x4^58*x5^80*x6^58*x7^37*x8^58 + -x1^99*x2^63*x3^91*x4^58*x5^80*x6^58*x7^17*x8^58 + -x1^99*x2^63*x3^91*x4^58*x5^70*x6^58*x7^37*x8^57 + x1^99*x2^63*x3^91*x4^58*x5^70*x6^58*x7^17*x8^57 + x1^99*x2^63*x3^82*x4^80*x5^89*x6^98*x7^92*x8^33 + -x1^99*x2^63*x3^82*x4^80*x5^89*x6^98*x7^92*x8^20 + -x1^99*x2^63*x3^82*x4^71*x5^70*x6^56*x7^92*x8^33 + x1^99*x2^63*x3^82*x4^71*x5^70*x6^56*x7^92*x8^20 + x1^99*x2^63*x3^70*x4^58*x5^92*x6^98*x7^37*x8^58 + -x1^99*x2^63*x3^70*x4^58*x5^92*x6^98*x7^37*x8^56 + -x1^99*x2^63*x3^70*x4^58*x5^92*x6^98*x7^17*x8^58 + x1^99*x2^63*x3^70*x4^58*x5^92*x6^98*x7^17*x8^56 + -x1^99*x2^63*x3^66*x4^58*x5^80*x6^43*x7^88*x8^67 + x1^99*x2^63*x3^66*x4^58*x5^80*x6^43*x7^56*x8^58 + x1^99*x2^63*x3^66*x4^58*x5^80*x6^40*x7^88*x8^67 + -x1^99*x2^63*x3^66*x4^58*x5^80*x6^35*x7^56*x8^58 + x1^99*x2^63*x3^66*x4^58*x5^70*x6^43*x7^88*x8^67 + -x1^99*x2^63*x3^66*x4^58*x5^70*x6^43*x7^56*x8^39 + -x1^99*x2^63*x3^66*x4^58*x5^70*x6^40*x7^88*x8^67 + x1^99*x2^63*x3^66*x4^58*x5^70*x6^35*x7^56*x8^39 + -x1^99*x2^63*x3^65*x4^80*x5^89*x6^98*x7^94*x8^50 + x1^99*x2^63*x3^65*x4^80*x5^89*x6^98*x7^94*x8^48 + x1^99*x2^63*x3^65*x4^80*x5^89*x6^98*x7^76*x8^50 + -x1^99*x2^63*x3^65*x4^80*x5^89*x6^98*x7^76*x8^33 + x1^99*x2^63*x3^65*x4^77*x5^80*x6^58*x7^94*x8^67 + -x1^99*x2^63*x3^65*x4^77*x5^80*x6^58*x7^94*x8^58 + -x1^99*x2^63*x3^65*x4^77*x5^80*x6^58*x7^88*x8^67 + x1^99*x2^63*x3^65*x4^77*x5^80*x6^58*x7^54*x8^58 + -x1^99*x2^63*x3^65*x4^77*x5^76*x6^58*x7^94*x8^67 + x1^99*x2^63*x3^65*x4^77*x5^76*x6^58*x7^94*x8^50 + x1^99*x2^63*x3^65*x4^77*x5^76*x6^58*x7^88*x8^67 + -x1^99*x2^63*x3^65*x4^77*x5^76*x6^58*x7^54*x8^50 + -x1^99*x2^63*x3^65*x4^58*x5^80*x6^45*x7^94*x8^67 + x1^99*x2^63*x3^65*x4^58*x5^80*x6^45*x7^94*x8^58 + x1^99*x2^63*x3^65*x4^58*x5^80*x6^43*x7^88*x8^67 + -x1^99*x2^63*x3^65*x4^58*x5^80*x6^43*x7^37*x8^58 + x1^99*x2^63*x3^65*x4^58*x5^70*x6^45*x7^94*x8^67 + -x1^99*x2^63*x3^65*x4^58*x5^70*x6^45*x7^94*x8^48 + -x1^99*x2^63*x3^65*x4^58*x5^70*x6^43*x7^88*x8^67 + x1^99*x2^63*x3^65*x4^58*x5^70*x6^43*x7^37*x8^33 + -x1^99*x2^63*x3^64*x4^77*x5^80*x6^58*x7^94*x8^67 + x1^99*x2^63*x3^64*x4^77*x5^80*x6^58*x7^94*x8^58 + x1^99*x2^63*x3^64*x4^77*x5^80*x6^58*x7^88*x8^67 + -x1^99*x2^63*x3^64*x4^77*x5^80*x6^58*x7^54*x8^58 + x1^99*x2^63*x3^64*x4^58*x5^80*x6^45*x7^94*x8^67 + -x1^99*x2^63*x3^64*x4^58*x5^80*x6^45*x7^94*x8^58 + -x1^99*x2^63*x3^64*x4^58*x5^80*x6^40*x7^88*x8^67 + x1^99*x2^63*x3^64*x4^58*x5^80*x6^20*x7^17*x8^58 + x1^99*x2^63*x3^47*x4^77*x5^76*x6^58*x7^94*x8^67 + -x1^99*x2^63*x3^47*x4^77*x5^76*x6^58*x7^88*x8^67 + -x1^99*x2^63*x3^47*x4^58*x5^70*x6^45*x7^94*x8^67 + x1^99*x2^63*x3^47*x4^58*x5^70*x6^40*x7^88*x8^67 + x1^99*x2^63*x3^45*x4^80*x5^89*x6^98*x7^94*x8^50 + -x1^99*x2^63*x3^45*x4^80*x5^89*x6^98*x7^94*x8^48 + -x1^99*x2^63*x3^45*x4^77*x5^76*x6^58*x7^94*x8^50 + x1^99*x2^63*x3^45*x4^58*x5^70*x6^45*x7^94*x8^48 + -x1^99*x2^63*x3^34*x4^80*x5^89*x6^98*x7^76*x8^50 + x1^99*x2^63*x3^34*x4^80*x5^89*x6^98*x7^76*x8^20 + x1^99*x2^63*x3^33*x4^77*x5^76*x6^58*x7^54*x8^50 + -x1^99*x2^63*x3^26*x4^58*x5^70*x6^11*x7^17*x8^20 + x1^94*x2^84*x3^91*x4^55*x5^92*x6^98*x7^56*x8^58 + -x1^94*x2^84*x3^91*x4^55*x5^92*x6^98*x7^56*x8^57 + -x1^94*x2^84*x3^91*x4^55*x5^92*x6^98*x7^37*x8^58 + x1^94*x2^84*x3^91*x4^55*x5^92*x6^98*x7^37*x8^57 + -x1^94*x2^84*x3^91*x4^55*x5^80*x6^58*x7^56*x8^58 + x1^94*x2^84*x3^91*x4^55*x5^80*x6^58*x7^56*x8^57 + x1^94*x2^84*x3^91*x4^55*x5^80*x6^58*x7^37*x8^58 + -x1^94*x2^84*x3^91*x4^55*x5^80*x6^58*x7^37*x8^57 + -x1^94*x2^84*x3^91*x4^51*x5^92*x6^98*x7^56*x8^58 + x1^94*x2^84*x3^91*x4^51*x5^92*x6^98*x7^56*x8^57 + x1^94*x2^84*x3^91*x4^51*x5^92*x6^98*x7^6*x8^58 + -x1^94*x2^84*x3^91*x4^51*x5^92*x6^98*x7^6*x8^57 + x1^94*x2^84*x3^91*x4^51*x5^80*x6^58*x7^56*x8^58 + -x1^94*x2^84*x3^91*x4^51*x5^80*x6^58*x7^56*x8^57 + -x1^94*x2^84*x3^91*x4^51*x5^80*x6^58*x7^6*x8^58 + x1^94*x2^84*x3^91*x4^51*x5^80*x6^58*x7^6*x8^57 + -x1^94*x2^84*x3^87*x4^80*x5^93*x6^98*x7^92*x8^33 + x1^94*x2^84*x3^87*x4^80*x5^93*x6^98*x7^92*x8^30 + x1^94*x2^84*x3^87*x4^80*x5^93*x6^98*x7^76*x8^33 + -x1^94*x2^84*x3^87*x4^80*x5^93*x6^98*x7^76*x8^30 + x1^94*x2^84*x3^87*x4^71*x5^93*x6^85*x7^92*x8^33 + -x1^94*x2^84*x3^87*x4^71*x5^93*x6^85*x7^92*x8^30 + -x1^94*x2^84*x3^87*x4^70*x5^93*x6^85*x7^62*x8^33 + x1^94*x2^84*x3^87*x4^70*x5^93*x6^85*x7^62*x8^30 + x1^94*x2^84*x3^82*x4^80*x5^89*x6^98*x7^92*x8^33 + -x1^94*x2^84*x3^82*x4^80*x5^89*x6^98*x7^92*x8^14 + -x1^94*x2^84*x3^82*x4^71*x5^80*x6^56*x7^92*x8^33 + x1^94*x2^84*x3^82*x4^71*x5^80*x6^56*x7^92*x8^13 + x1^94*x2^84*x3^78*x4^55*x5^84*x6^53*x7^81*x8^39 + -x1^94*x2^84*x3^78*x4^55*x5^84*x6^53*x7^81*x8^36 + -x1^94*x2^84*x3^78*x4^45*x5^84*x6^53*x7^81*x8^39 + x1^94*x2^84*x3^78*x4^45*x5^84*x6^53*x7^81*x8^36 + -x1^94*x2^84*x3^70*x4^55*x5^92*x6^98*x7^56*x8^58 + x1^94*x2^84*x3^70*x4^55*x5^92*x6^98*x7^56*x8^56 + x1^94*x2^84*x3^70*x4^55*x5^92*x6^98*x7^37*x8^58 + -x1^94*x2^84*x3^70*x4^55*x5^92*x6^98*x7^37*x8^56 + x1^94*x2^84*x3^70*x4^45*x5^92*x6^98*x7^56*x8^58 + -x1^94*x2^84*x3^70*x4^45*x5^92*x6^98*x7^56*x8^56 + -x1^94*x2^84*x3^70*x4^45*x5^92*x6^98*x7^6*x8^58 + x1^94*x2^84*x3^70*x4^45*x5^92*x6^98*x7*x8^56 + -x1^94*x2^84*x3^66*x4^55*x5^80*x6^53*x7^94*x8^58 + x1^94*x2^84*x3^66*x4^55*x5^80*x6^53*x7^94*x8^48 + x1^94*x2^84*x3^66*x4^55*x5^80*x6^53*x7^56*x8^58 + -x1^94*x2^84*x3^66*x4^55*x5^80*x6^53*x7^56*x8^39 + x1^94*x2^84*x3^66*x4^45*x5^80*x6^53*x7^94*x8^58 + -x1^94*x2^84*x3^66*x4^45*x5^80*x6^53*x7^94*x8^48 + -x1^94*x2^84*x3^66*x4^45*x5^80*x6^53*x7^56*x8^58 + x1^94*x2^84*x3^66*x4^45*x5^80*x6^53*x7^56*x8^39 + -x1^94*x2^84*x3^65*x4^80*x5^96*x6^98*x7^98*x8^48 + x1^94*x2^84*x3^65*x4^80*x5^96*x6^98*x7^98*x8^37 + -x1^94*x2^84*x3^65*x4^80*x5^89*x6^98*x7^94*x8^50 + x1^94*x2^84*x3^65*x4^80*x5^89*x6^98*x7^94*x8^48 + x1^94*x2^84*x3^65*x4^80*x5^89*x6^98*x7^76*x8^50 + -x1^94*x2^84*x3^65*x4^80*x5^89*x6^98*x7^76*x8^33 + x1^94*x2^84*x3^65*x4^79*x5^80*x6^58*x7^94*x8^58 + -x1^94*x2^84*x3^65*x4^79*x5^80*x6^58*x7^94*x8^51 + -x1^94*x2^84*x3^65*x4^79*x5^80*x6^58*x7^82*x8^58 + x1^94*x2^84*x3^65*x4^79*x5^80*x6^58*x7^82*x8^51 + -x1^94*x2^84*x3^65*x4^79*x5^80*x6^53*x7^94*x8^58 + x1^94*x2^84*x3^65*x4^79*x5^80*x6^53*x7^94*x8^51 + x1^94*x2^84*x3^65*x4^79*x5^80*x6^53*x7^82*x8^58 + -x1^94*x2^84*x3^65*x4^79*x5^80*x6^53*x7^82*x8^51 + -x1^94*x2^84*x3^65*x4^77*x5^80*x6^58*x7^94*x8^58 + x1^94*x2^84*x3^65*x4^77*x5^80*x6^58*x7^94*x8^50 + x1^94*x2^84*x3^65*x4^77*x5^80*x6^58*x7^54*x8^58 + -x1^94*x2^84*x3^65*x4^77*x5^80*x6^58*x7^54*x8^50 + x1^94*x2^84*x3^65*x4^67*x5^96*x6^53*x7^98*x8^48 + -x1^94*x2^84*x3^65*x4^67*x5^96*x6^53*x7^98*x8^37 + x1^94*x2^84*x3^65*x4^55*x5^80*x6^53*x7^94*x8^58 + -x1^94*x2^84*x3^65*x4^55*x5^80*x6^53*x7^94*x8^48 + -x1^94*x2^84*x3^65*x4^55*x5^80*x6^53*x7^37*x8^58 + x1^94*x2^84*x3^65*x4^55*x5^80*x6^53*x7^37*x8^33 + x1^94*x2^84*x3^64*x4^79*x5^80*x6^58*x7^94*x8^67 + -x1^94*x2^84*x3^64*x4^79*x5^80*x6^58*x7^94*x8^58 + -x1^94*x2^84*x3^64*x4^79*x5^80*x6^58*x7^88*x8^67 + x1^94*x2^84*x3^64*x4^79*x5^80*x6^58*x7^82*x8^58 + -x1^94*x2^84*x3^64*x4^79*x5^80*x6^53*x7^94*x8^67 + x1^94*x2^84*x3^64*x4^79*x5^80*x6^53*x7^94*x8^58 + x1^94*x2^84*x3^64*x4^79*x5^80*x6^53*x7^88*x8^67 + -x1^94*x2^84*x3^64*x4^79*x5^80*x6^53*x7^82*x8^58 + -x1^94*x2^84*x3^64*x4^77*x5^80*x6^58*x7^94*x8^67 + x1^94*x2^84*x3^64*x4^77*x5^80*x6^58*x7^94*x8^58 + x1^94*x2^84*x3^64*x4^77*x5^80*x6^58*x7^88*x8^67 + -x1^94*x2^84*x3^64*x4^77*x5^80*x6^58*x7^54*x8^58 + x1^94*x2^84*x3^64*x4^48*x5^80*x6^53*x7^94*x8^67 + -x1^94*x2^84*x3^64*x4^48*x5^80*x6^53*x7^88*x8^67 + -x1^94*x2^84*x3^64*x4^45*x5^80*x6^53*x7^94*x8^58 + x1^94*x2^84*x3^64*x4^45*x5^80*x6^53*x7^6*x8^58 + x1^94*x2^84*x3^48*x4^80*x5^96*x6^98*x7^98*x8^48 + -x1^94*x2^84*x3^48*x4^80*x5^96*x6^98*x7^98*x8^37 + x1^94*x2^84*x3^48*x4^80*x5^89*x6^98*x7^94*x8^50 + -x1^94*x2^84*x3^48*x4^80*x5^89*x6^98*x7^94*x8^48 + -x1^94*x2^84*x3^48*x4^80*x5^89*x6^98*x7^76*x8^50 + x1^94*x2^84*x3^48*x4^80*x5^89*x6^98*x7^76*x8^14 + -x1^94*x2^84*x3^48*x4^79*x5^80*x6^58*x7^94*x8^67 + x1^94*x2^84*x3^48*x4^79*x5^80*x6^58*x7^94*x8^51 + x1^94*x2^84*x3^48*x4^79*x5^80*x6^58*x7^88*x8^67 + -x1^94*x2^84*x3^48*x4^79*x5^80*x6^58*x7^82*x8^51 + x1^94*x2^84*x3^48*x4^79*x5^80*x6^53*x7^94*x8^67 + -x1^94*x2^84*x3^48*x4^79*x5^80*x6^53*x7^94*x8^51 + -x1^94*x2^84*x3^48*x4^79*x5^80*x6^53*x7^88*x8^67 + x1^94*x2^84*x3^48*x4^79*x5^80*x6^53*x7^82*x8^51 + x1^94*x2^84*x3^48*x4^77*x5^80*x6^58*x7^94*x8^67 + -x1^94*x2^84*x3^48*x4^77*x5^80*x6^58*x7^94*x8^50 + -x1^94*x2^84*x3^48*x4^77*x5^80*x6^58*x7^88*x8^67 + x1^94*x2^84*x3^48*x4^77*x5^80*x6^58*x7^54*x8^50 + -x1^94*x2^84*x3^48*x4^67*x5^96*x6^53*x7^98*x8^48 + x1^94*x2^84*x3^48*x4^67*x5^96*x6^53*x7^98*x8^37 + -x1^94*x2^84*x3^48*x4^48*x5^80*x6^53*x7^94*x8^67 + x1^94*x2^84*x3^48*x4^48*x5^80*x6^53*x7^88*x8^67 + x1^94*x2^84*x3^48*x4^45*x5^80*x6^53*x7^94*x8^48 + -x1^94*x2^84*x3^48*x4^45*x5^80*x6^53*x8^5 + x1^81*x2^73*x3^87*x4^80*x5^93*x6^98*x7^92*x8^33 + -x1^81*x2^73*x3^87*x4^80*x5^93*x6^98*x7^92*x8^30 + -x1^81*x2^73*x3^87*x4^80*x5^93*x6^98*x7^76*x8^33 + x1^81*x2^73*x3^87*x4^80*x5^93*x6^98*x7^76*x8^30 + -x1^81*x2^73*x3^87*x4^71*x5^93*x6^85*x7^92*x8^33 + x1^81*x2^73*x3^87*x4^71*x5^93*x6^85*x7^92*x8^30 + x1^81*x2^73*x3^87*x4^70*x5^93*x6^85*x7^62*x8^33 + -x1^81*x2^73*x3^87*x4^70*x5^93*x6^85*x7^62*x8^30 + -x1^74*x2^74*x3^66*x4^79*x5^96*x6^43*x7^98*x8^58 + x1^74*x2^74*x3^66*x4^79*x5^96*x6^43*x7^98*x8^51 + x1^74*x2^74*x3^66*x4^79*x5^96*x6^35*x7^98*x8^58 + -x1^74*x2^74*x3^66*x4^79*x5^96*x6^35*x7^98*x8^51 + x1^74*x2^74*x3^66*x4^67*x5^96*x6^43*x7^98*x8^58 + -x1^74*x2^74*x3^66*x4^67*x5^96*x6^43*x7^98*x8^39 + -x1^74*x2^74*x3^66*x4^67*x5^96*x6^35*x7^98*x8^58 + x1^74*x2^74*x3^66*x4^67*x5^96*x6^35*x7^98*x8^39 + x1^74*x2^74*x3^65*x4^80*x5^96*x6^98*x7^98*x8^48 + -x1^74*x2^74*x3^65*x4^80*x5^96*x6^98*x7^98*x8^37 + -x1^74*x2^74*x3^65*x4^79*x5^96*x6^45*x7^98*x8^58 + x1^74*x2^74*x3^65*x4^79*x5^96*x6^45*x7^98*x8^51 + x1^74*x2^74*x3^65*x4^79*x5^96*x6^43*x7^98*x8^58 + -x1^74*x2^74*x3^65*x4^79*x5^96*x6^43*x7^98*x8^51 + x1^74*x2^74*x3^65*x4^67*x5^96*x6^45*x7^98*x8^58 + -x1^74*x2^74*x3^65*x4^67*x5^96*x6^45*x7^98*x8^48 + -x1^74*x2^74*x3^65*x4^67*x5^96*x6^43*x7^98*x8^58 + x1^74*x2^74*x3^65*x4^67*x5^96*x6^43*x7^98*x8^37 + -x1^74*x2^74*x3^64*x4^79*x5^96*x6^45*x7^98*x8^67 + x1^74*x2^74*x3^64*x4^79*x5^96*x6^45*x7^98*x8^58 + x1^74*x2^74*x3^64*x4^79*x5^96*x6^40*x7^98*x8^67 + -x1^74*x2^74*x3^64*x4^79*x5^96*x6^20*x7^98*x8^58 + x1^74*x2^74*x3^64*x4^67*x5^96*x6^45*x7^98*x8^67 + -x1^74*x2^74*x3^64*x4^67*x5^96*x6^45*x7^98*x8^58 + -x1^74*x2^74*x3^64*x4^67*x5^96*x6^40*x7^98*x8^67 + x1^74*x2^74*x3^64*x4^67*x5^96*x6^20*x7^98*x8^58 + x1^74*x2^74*x3^47*x4^79*x5^96*x6^45*x7^98*x8^67 + -x1^74*x2^74*x3^47*x4^79*x5^96*x6^40*x7^98*x8^67 + -x1^74*x2^74*x3^47*x4^67*x5^96*x6^45*x7^98*x8^67 + x1^74*x2^74*x3^47*x4^67*x5^96*x6^40*x7^98*x8^67 + x1^74*x2^74*x3^45*x4^80*x5^96*x6^98*x7^98*x8^50 + -x1^74*x2^74*x3^45*x4^80*x5^96*x6^98*x7^98*x8^48 + x1^74*x2^74*x3^45*x4^79*x5^96*x6^58*x7^98*x8^51 + -x1^74*x2^74*x3^45*x4^79*x5^96*x6^45*x7^98*x8^51 + -x1^74*x2^74*x3^45*x4^77*x5^96*x6^58*x7^98*x8^50 + x1^74*x2^74*x3^45*x4^67*x5^96*x6^45*x7^98*x8^48 + -x1^74*x2^74*x3^34*x4^80*x5^96*x6^98*x7^98*x8^50 + x1^74*x2^74*x3^34*x4^80*x5^96*x6^98*x7^98*x8^37 + -x1^74*x2^74*x3^34*x4^79*x5^96*x6^58*x7^98*x8^51 + x1^74*x2^74*x3^34*x4^79*x5^96*x6^4*x7^98*x8^51 + x1^74*x2^74*x3^34*x4^77*x5^96*x6^58*x7^98*x8^50 + -x1^74*x2^74*x3^34*x4^67*x5^96*x6^4*x7^98*x8^37 + -x1^68*x2^64*x3^66*x4^79*x5^80*x6^43*x7^88*x8^67 + x1^68*x2^64*x3^66*x4^79*x5^80*x6^43*x7^82*x8^58 + x1^68*x2^64*x3^66*x4^79*x5^80*x6^40*x7^88*x8^67 + -x1^68*x2^64*x3^66*x4^79*x5^80*x6^35*x7^82*x8^58 + x1^68*x2^64*x3^65*x4^79*x5^80*x6^58*x7^94*x8^67 + -x1^68*x2^64*x3^65*x4^79*x5^80*x6^58*x7^94*x8^58 + -x1^68*x2^64*x3^65*x4^79*x5^80*x6^58*x7^88*x8^67 + x1^68*x2^64*x3^65*x4^79*x5^80*x6^58*x7^82*x8^58 + -x1^68*x2^64*x3^65*x4^79*x5^80*x6^45*x7^94*x8^67 + x1^68*x2^64*x3^65*x4^79*x5^80*x6^45*x7^94*x8^58 + x1^68*x2^64*x3^65*x4^79*x5^80*x6^43*x7^88*x8^67 + -x1^68*x2^64*x3^65*x4^79*x5^80*x6^43*x7^82*x8^58 + -x1^68*x2^64*x3^64*x4^79*x5^80*x6^58*x7^94*x8^67 + x1^68*x2^64*x3^64*x4^79*x5^80*x6^58*x7^94*x8^58 + x1^68*x2^64*x3^64*x4^79*x5^80*x6^58*x7^88*x8^67 + -x1^68*x2^64*x3^64*x4^79*x5^80*x6^58*x7^82*x8^58 + x1^68*x2^64*x3^64*x4^79*x5^80*x6^45*x7^94*x8^67 + -x1^68*x2^64*x3^64*x4^79*x5^80*x6^45*x7^94*x8^58 + -x1^68*x2^64*x3^64*x4^79*x5^80*x6^40*x7^88*x8^67 + x1^68*x2^64*x3^64*x4^79*x5^80*x6^20*x7^82*x8^58 + x1^68*x2^63*x3^91*x4^77*x5^92*x6^98*x7^56*x8^58 + -x1^68*x2^63*x3^91*x4^77*x5^92*x6^98*x7^54*x8^58 + -x1^68*x2^63*x3^91*x4^77*x5^80*x6^58*x7^56*x8^58 + x1^68*x2^63*x3^91*x4^77*x5^80*x6^58*x7^54*x8^58 + -x1^68*x2^63*x3^91*x4^55*x5^92*x6^98*x7^56*x8^58 + x1^68*x2^63*x3^91*x4^55*x5^92*x6^98*x7^37*x8^58 + x1^68*x2^63*x3^91*x4^55*x5^80*x6^58*x7^56*x8^58 + -x1^68*x2^63*x3^91*x4^55*x5^80*x6^58*x7^37*x8^58 + -x1^68*x2^63*x3^70*x4^77*x5^92*x6^98*x7^56*x8^58 + x1^68*x2^63*x3^70*x4^77*x5^92*x6^98*x7^54*x8^58 + x1^68*x2^63*x3^70*x4^55*x5^92*x6^98*x7^56*x8^58 + -x1^68*x2^63*x3^70*x4^55*x5^92*x6^98*x7^37*x8^58 + x1^68*x2^63*x3^66*x4^77*x5^80*x6^58*x7^94*x8^67 + -x1^68*x2^63*x3^66*x4^77*x5^80*x6^58*x7^94*x8^58 + -x1^68*x2^63*x3^66*x4^77*x5^80*x6^58*x7^88*x8^67 + x1^68*x2^63*x3^66*x4^77*x5^80*x6^58*x7^56*x8^58 + -x1^68*x2^63*x3^66*x4^55*x5^80*x6^45*x7^94*x8^67 + x1^68*x2^63*x3^66*x4^55*x5^80*x6^45*x7^94*x8^58 + x1^68*x2^63*x3^66*x4^55*x5^80*x6^43*x7^88*x8^67 + -x1^68*x2^63*x3^66*x4^55*x5^80*x6^43*x7^56*x8^58 + -x1^68*x2^63*x3^65*x4^77*x5^80*x6^58*x7^94*x8^67 + x1^68*x2^63*x3^65*x4^77*x5^80*x6^58*x7^94*x8^58 + x1^68*x2^63*x3^65*x4^77*x5^80*x6^58*x7^88*x8^67 + -x1^68*x2^63*x3^65*x4^77*x5^80*x6^58*x7^54*x8^58 + x1^68*x2^63*x3^65*x4^55*x5^80*x6^45*x7^94*x8^67 + -x1^68*x2^63*x3^65*x4^55*x5^80*x6^45*x7^94*x8^58 + -x1^68*x2^63*x3^65*x4^55*x5^80*x6^43*x7^88*x8^67 + x1^68*x2^63*x3^65*x4^55*x5^80*x6^43*x7^37*x8^58 + -x1^68*x2^45*x3^91*x4^77*x5^92*x6^98*x7^56*x8^58 + x1^68*x2^45*x3^91*x4^77*x5^92*x6^98*x7^54*x8^58 + x1^68*x2^45*x3^91*x4^77*x5^80*x6^58*x7^56*x8^58 + -x1^68*x2^45*x3^91*x4^77*x5^80*x6^58*x7^54*x8^58 + x1^68*x2^45*x3^91*x4^51*x5^92*x6^98*x7^56*x8^58 + -x1^68*x2^45*x3^91*x4^51*x5^92*x6^98*x7^6*x8^58 + -x1^68*x2^45*x3^91*x4^51*x5^80*x6^58*x7^56*x8^58 + x1^68*x2^45*x3^91*x4^51*x5^80*x6^58*x7^6*x8^58 + -x1^68*x2^45*x3^78*x4^38*x5^92*x6^98*x7^94*x8^58 + x1^68*x2^45*x3^78*x4^38*x5^92*x6^98*x7^81*x8^58 + x1^68*x2^45*x3^78*x4^38*x5^84*x6^53*x7^94*x8^58 + -x1^68*x2^45*x3^78*x4^38*x5^84*x6^53*x7^81*x8^58 + x1^68*x2^45*x3^78*x4^32*x5^92*x6^98*x7^94*x8^58 + -x1^68*x2^45*x3^78*x4^32*x5^92*x6^98*x7^81*x8^58 + -x1^68*x2^45*x3^78*x4^32*x5^84*x6^53*x7^94*x8^58 + x1^68*x2^45*x3^78*x4^20*x5^84*x6^53*x7^81*x8^58 + x1^68*x2^45*x3^70*x4^77*x5^92*x6^98*x7^56*x8^58 + -x1^68*x2^45*x3^70*x4^77*x5^92*x6^98*x7^54*x8^58 + x1^68*x2^45*x3^70*x4^38*x5^92*x6^98*x7^94*x8^58 + -x1^68*x2^45*x3^70*x4^38*x5^92*x6^98*x7^56*x8^58 + -x1^68*x2^45*x3^70*x4^32*x5^92*x6^98*x7^94*x8^58 + x1^68*x2^45*x3^70*x4^32*x5^92*x6^98*x7^6*x8^58 + -x1^68*x2^45*x3^66*x4^77*x5^80*x6^58*x7^94*x8^67 + x1^68*x2^45*x3^66*x4^77*x5^80*x6^58*x7^94*x8^58 + x1^68*x2^45*x3^66*x4^77*x5^80*x6^58*x7^88*x8^67 + -x1^68*x2^45*x3^66*x4^77*x5^80*x6^58*x7^56*x8^58 + x1^68*x2^45*x3^66*x4^48*x5^80*x6^45*x7^94*x8^67 + -x1^68*x2^45*x3^66*x4^48*x5^80*x6^40*x7^88*x8^67 + -x1^68*x2^45*x3^66*x4^38*x5^80*x6^45*x7^94*x8^58 + x1^68*x2^45*x3^66*x4^38*x5^80*x6^35*x7^56*x8^58 + x1^68*x2^45*x3^64*x4^77*x5^80*x6^58*x7^94*x8^67 + -x1^68*x2^45*x3^64*x4^77*x5^80*x6^58*x7^94*x8^58 + -x1^68*x2^45*x3^64*x4^77*x5^80*x6^58*x7^88*x8^67 + x1^68*x2^45*x3^64*x4^77*x5^80*x6^58*x7^54*x8^58 + -x1^68*x2^45*x3^64*x4^48*x5^80*x6^45*x7^94*x8^67 + x1^68*x2^45*x3^64*x4^48*x5^80*x6^40*x7^88*x8^67 + x1^68*x2^45*x3^64*x4^32*x5^80*x6^45*x7^94*x8^58 + -x1^68*x2^45*x3^64*x4^20*x5^80*x6^20*x7^6*x8^58 + x1^47*x2^64*x3^66*x4^79*x5^76*x6^58*x7^94*x8^67 + -x1^47*x2^64*x3^66*x4^79*x5^76*x6^58*x7^94*x8^51 + -x1^47*x2^64*x3^66*x4^79*x5^76*x6^58*x7^88*x8^67 + x1^47*x2^64*x3^66*x4^79*x5^76*x6^58*x7^82*x8^51 + -x1^47*x2^64*x3^66*x4^79*x5^70*x6^45*x7^94*x8^67 + x1^47*x2^64*x3^66*x4^79*x5^70*x6^43*x7^88*x8^67 + x1^47*x2^64*x3^66*x4^79*x5^54*x6^45*x7^94*x8^51 + -x1^47*x2^64*x3^66*x4^79*x5^47*x6^43*x7^82*x8^51 + -x1^47*x2^64*x3^65*x4^79*x5^76*x6^58*x7^94*x8^67 + x1^47*x2^64*x3^65*x4^79*x5^76*x6^58*x7^94*x8^51 + x1^47*x2^64*x3^65*x4^79*x5^76*x6^58*x7^88*x8^67 + -x1^47*x2^64*x3^65*x4^79*x5^76*x6^58*x7^82*x8^51 + x1^47*x2^64*x3^65*x4^79*x5^70*x6^45*x7^94*x8^67 + -x1^47*x2^64*x3^65*x4^79*x5^70*x6^43*x7^88*x8^67 + -x1^47*x2^64*x3^65*x4^79*x5^54*x6^45*x7^94*x8^51 + x1^47*x2^64*x3^65*x4^79*x5^47*x6^43*x7^82*x8^51 + -x1^47*x2^63*x3^91*x4^77*x5^92*x6^98*x7^56*x8^57 + x1^47*x2^63*x3^91*x4^77*x5^92*x6^98*x7^54*x8^57 + x1^47*x2^63*x3^91*x4^77*x5^76*x6^58*x7^56*x8^57 + -x1^47*x2^63*x3^91*x4^77*x5^76*x6^58*x7^54*x8^57 + x1^47*x2^63*x3^91*x4^55*x5^92*x6^98*x7^56*x8^57 + -x1^47*x2^63*x3^91*x4^55*x5^92*x6^98*x7^37*x8^57 + -x1^47*x2^63*x3^91*x4^55*x5^47*x6^58*x7^56*x8^57 + x1^47*x2^63*x3^91*x4^55*x5^47*x6^58*x7^37*x8^57 + x1^47*x2^63*x3^82*x4^80*x5^89*x6^98*x7^92*x8^36 + -x1^47*x2^63*x3^82*x4^80*x5^89*x6^98*x7^92*x8^33 + x1^47*x2^63*x3^82*x4^71*x5^84*x6^56*x7^92*x8^39 + -x1^47*x2^63*x3^82*x4^71*x5^84*x6^56*x7^92*x8^36 + -x1^47*x2^63*x3^82*x4^71*x5^50*x6^56*x7^92*x8^39 + x1^47*x2^63*x3^82*x4^71*x5^50*x6^56*x7^92*x8^33 + x1^47*x2^63*x3^78*x4^80*x5^89*x6^98*x7^81*x8^39 + -x1^47*x2^63*x3^78*x4^80*x5^89*x6^98*x7^81*x8^36 + -x1^47*x2^63*x3^78*x4^55*x5^84*x6^53*x7^81*x8^39 + x1^47*x2^63*x3^78*x4^55*x5^84*x6^53*x7^81*x8^36 + x1^47*x2^63*x3^70*x4^77*x5^92*x6^98*x7^56*x8^56 + -x1^47*x2^63*x3^70*x4^77*x5^92*x6^98*x7^54*x8^56 + -x1^47*x2^63*x3^70*x4^55*x5^92*x6^98*x7^56*x8^56 + x1^47*x2^63*x3^70*x4^55*x5^92*x6^98*x7^37*x8^56 + -x1^47*x2^63*x3^66*x4^80*x5^89*x6^98*x7^94*x8^50 + x1^47*x2^63*x3^66*x4^80*x5^89*x6^98*x7^94*x8^48 + x1^47*x2^63*x3^66*x4^80*x5^89*x6^98*x7^76*x8^50 + -x1^47*x2^63*x3^66*x4^80*x5^89*x6^98*x7^76*x8^39 + -x1^47*x2^63*x3^66*x4^77*x5^76*x6^58*x7^94*x8^67 + x1^47*x2^63*x3^66*x4^77*x5^76*x6^58*x7^94*x8^50 + x1^47*x2^63*x3^66*x4^77*x5^76*x6^58*x7^88*x8^67 + -x1^47*x2^63*x3^66*x4^77*x5^76*x6^58*x7^56*x8^50 + x1^47*x2^63*x3^66*x4^55*x5^70*x6^45*x7^94*x8^67 + -x1^47*x2^63*x3^66*x4^55*x5^70*x6^43*x7^88*x8^67 + -x1^47*x2^63*x3^66*x4^55*x5^54*x6^45*x7^94*x8^48 + x1^47*x2^63*x3^66*x4^55*x5^47*x6^43*x7^56*x8^39 + x1^47*x2^63*x3^65*x4^80*x5^89*x6^98*x7^94*x8^50 + -x1^47*x2^63*x3^65*x4^80*x5^89*x6^98*x7^94*x8^48 + -x1^47*x2^63*x3^65*x4^80*x5^89*x6^98*x7^76*x8^50 + x1^47*x2^63*x3^65*x4^80*x5^89*x6^98*x7^76*x8^33 + x1^47*x2^63*x3^65*x4^77*x5^76*x6^58*x7^94*x8^67 + -x1^47*x2^63*x3^65*x4^77*x5^76*x6^58*x7^94*x8^50 + -x1^47*x2^63*x3^65*x4^77*x5^76*x6^58*x7^88*x8^67 + x1^47*x2^63*x3^65*x4^77*x5^76*x6^58*x7^54*x8^50 + -x1^47*x2^63*x3^65*x4^55*x5^70*x6^45*x7^94*x8^67 + x1^47*x2^63*x3^65*x4^55*x5^70*x6^43*x7^88*x8^67 + x1^47*x2^63*x3^65*x4^55*x5^54*x6^45*x7^94*x8^48 + -x1^47*x2^63*x3^65*x4^55*x5^47*x6^43*x7^37*x8^33 + x1^44*x2^36*x3^82*x4^80*x5^89*x6^98*x7^92*x8^39 + -x1^44*x2^36*x3^82*x4^80*x5^89*x6^98*x7^92*x8^36 + -x1^44*x2^36*x3^82*x4^71*x5^84*x6^56*x7^92*x8^39 + x1^44*x2^36*x3^82*x4^71*x5^84*x6^56*x7^92*x8^36 + -x1^44*x2^29*x3^78*x4^80*x5^89*x6^98*x7^81*x8^39 + x1^44*x2^29*x3^78*x4^80*x5^89*x6^98*x7^81*x8^36 + x1^44*x2^29*x3^78*x4^38*x5^92*x6^98*x7^94*x8^56 + -x1^44*x2^29*x3^78*x4^38*x5^92*x6^98*x7^81*x8^56 + -x1^44*x2^29*x3^78*x4^38*x5^84*x6^53*x7^94*x8^48 + x1^44*x2^29*x3^78*x4^38*x5^84*x6^53*x7^81*x8^39 + -x1^44*x2^29*x3^78*x4^32*x5^92*x6^98*x7^94*x8^56 + x1^44*x2^29*x3^78*x4^32*x5^92*x6^98*x7^81*x8^56 + x1^44*x2^29*x3^78*x4^32*x5^84*x6^53*x7^94*x8^48 + -x1^44*x2^29*x3^78*x4^16*x5^84*x6^53*x7^81*x8^36 + x1^41*x2^64*x3^66*x4^80*x5^89*x6^98*x7^94*x8^67 + -x1^41*x2^64*x3^66*x4^80*x5^89*x6^98*x7^94*x8^51 + -x1^41*x2^64*x3^66*x4^80*x5^89*x6^98*x7^88*x8^67 + x1^41*x2^64*x3^66*x4^80*x5^89*x6^98*x7^82*x8^51 + -x1^41*x2^64*x3^66*x4^79*x5^76*x6^58*x7^94*x8^67 + x1^41*x2^64*x3^66*x4^79*x5^76*x6^58*x7^94*x8^51 + x1^41*x2^64*x3^66*x4^79*x5^76*x6^58*x7^88*x8^67 + -x1^41*x2^64*x3^66*x4^79*x5^76*x6^58*x7^82*x8^51 + -x1^41*x2^64*x3^47*x4^80*x5^89*x6^98*x7^94*x8^67 + x1^41*x2^64*x3^47*x4^80*x5^89*x6^98*x7^88*x8^67 + x1^41*x2^64*x3^47*x4^79*x5^76*x6^58*x7^94*x8^67 + -x1^41*x2^64*x3^47*x4^79*x5^76*x6^58*x7^88*x8^67 + x1^41*x2^64*x3^45*x4^80*x5^89*x6^98*x7^94*x8^51 + -x1^41*x2^64*x3^45*x4^79*x5^76*x6^58*x7^94*x8^51 + -x1^41*x2^64*x3^34*x4^80*x5^89*x6^98*x7^82*x8^51 + x1^41*x2^64*x3^33*x4^79*x5^76*x6^58*x7^82*x8^51 + x1^41*x2^40*x3^91*x4^77*x5^92*x6^98*x7^56*x8^57 + -x1^41*x2^40*x3^91*x4^77*x5^92*x6^98*x7^54*x8^57 + -x1^41*x2^40*x3^91*x4^77*x5^76*x6^58*x7^56*x8^57 + x1^41*x2^40*x3^91*x4^77*x5^76*x6^58*x7^54*x8^57 + x1^41*x2^26*x3^70*x4^80*x5^92*x6^98*x7^94*x8^67 + -x1^41*x2^26*x3^70*x4^80*x5^92*x6^98*x7^94*x8^56 + -x1^41*x2^26*x3^70*x4^80*x5^92*x6^98*x7^88*x8^67 + x1^41*x2^26*x3^70*x4^80*x5^92*x6^98*x7^76*x8^56 + -x1^41*x2^26*x3^70*x4^77*x5^92*x6^98*x7^94*x8^67 + x1^41*x2^26*x3^70*x4^77*x5^92*x6^98*x7^94*x8^56 + x1^41*x2^26*x3^70*x4^77*x5^92*x6^98*x7^88*x8^67 + -x1^41*x2^26*x3^70*x4^77*x5^92*x6^98*x7^56*x8^56 + -x1^41*x2^26*x3^66*x4^80*x5^89*x6^98*x7^94*x8^67 + x1^41*x2^26*x3^66*x4^80*x5^89*x6^98*x7^94*x8^50 + x1^41*x2^26*x3^66*x4^80*x5^89*x6^98*x7^88*x8^67 + -x1^41*x2^26*x3^66*x4^80*x5^89*x6^98*x7^76*x8^50 + x1^41*x2^26*x3^66*x4^77*x5^76*x6^58*x7^94*x8^67 + -x1^41*x2^26*x3^66*x4^77*x5^76*x6^58*x7^94*x8^50 + -x1^41*x2^26*x3^66*x4^77*x5^76*x6^58*x7^88*x8^67 + x1^41*x2^26*x3^66*x4^77*x5^76*x6^58*x7^56*x8^50 + -x1^41*x2^25*x3^70*x4^80*x5^92*x6^98*x7^94*x8^67 + x1^41*x2^25*x3^70*x4^80*x5^92*x6^98*x7^94*x8^56 + x1^41*x2^25*x3^70*x4^77*x5^92*x6^98*x7^94*x8^67 + -x1^41*x2^25*x3^70*x4^77*x5^92*x6^98*x7^94*x8^56 + x1^41*x2^25*x3^47*x4^80*x5^89*x6^98*x7^94*x8^67 + -x1^41*x2^25*x3^47*x4^77*x5^76*x6^58*x7^94*x8^67 + -x1^41*x2^25*x3^45*x4^80*x5^89*x6^98*x7^94*x8^50 + x1^41*x2^25*x3^45*x4^77*x5^76*x6^58*x7^94*x8^50 + x1^41*x2^18*x3^70*x4^80*x5^92*x6^98*x7^88*x8^67 + -x1^41*x2^18*x3^70*x4^77*x5^92*x6^98*x7^88*x8^67 + -x1^41*x2^18*x3^47*x4^80*x5^89*x6^98*x7^88*x8^67 + x1^41*x2^18*x3^47*x4^77*x5^76*x6^58*x7^88*x8^67 + -x1^41*x2^8*x3^70*x4^80*x5^92*x6^98*x7^76*x8^56 + x1^41*x2^8*x3^34*x4^80*x5^89*x6^98*x7^76*x8^50 + x1^41*x2^7*x3^70*x4^77*x5^92*x6^98*x7^54*x8^56 + -x1^41*x2^7*x3^33*x4^77*x5^76*x6^58*x7^54*x8^50 + -x1^29*x2^40*x3^91*x4^51*x5^92*x6^98*x7^56*x8^57 + x1^29*x2^40*x3^91*x4^51*x5^92*x6^98*x7^6*x8^57 + x1^29*x2^40*x3^91*x4^51*x5^36*x6^58*x7^56*x8^57 + -x1^29*x2^40*x3^91*x4^51*x5^24*x6^58*x7^6*x8^57 + -x1^28*x2^64*x3^82*x4^80*x5^92*x6^98*x7^94*x8^67 + x1^28*x2^64*x3^82*x4^80*x5^92*x6^98*x7^94*x8^56 + x1^28*x2^64*x3^82*x4^80*x5^92*x6^98*x7^92*x8^67 + -x1^28*x2^64*x3^82*x4^80*x5^92*x6^98*x7^92*x8^56 + x1^28*x2^64*x3^82*x4^80*x5^89*x6^98*x7^94*x8^67 + -x1^28*x2^64*x3^82*x4^80*x5^89*x6^98*x7^94*x8^51 + -x1^28*x2^64*x3^82*x4^80*x5^89*x6^98*x7^92*x8^67 + x1^28*x2^64*x3^82*x4^80*x5^89*x6^98*x7^92*x8^51 + x1^28*x2^64*x3^82*x4^79*x5^92*x6^98*x7^94*x8^67 + -x1^28*x2^64*x3^82*x4^79*x5^92*x6^98*x7^94*x8^56 + -x1^28*x2^64*x3^82*x4^79*x5^92*x6^98*x7^92*x8^67 + x1^28*x2^64*x3^82*x4^79*x5^92*x6^98*x7^92*x8^56 + -x1^28*x2^64*x3^82*x4^79*x5^70*x6^56*x7^94*x8^67 + x1^28*x2^64*x3^82*x4^79*x5^70*x6^56*x7^92*x8^67 + x1^28*x2^64*x3^82*x4^79*x5^54*x6^56*x7^94*x8^51 + -x1^28*x2^64*x3^82*x4^79*x5^50*x6^56*x7^92*x8^51 + x1^28*x2^64*x3^70*x4^80*x5^92*x6^98*x7^94*x8^67 + -x1^28*x2^64*x3^70*x4^80*x5^92*x6^98*x7^94*x8^56 + -x1^28*x2^64*x3^70*x4^80*x5^92*x6^98*x7^88*x8^67 + x1^28*x2^64*x3^70*x4^80*x5^92*x6^98*x7^82*x8^56 + -x1^28*x2^64*x3^70*x4^79*x5^92*x6^98*x7^94*x8^67 + x1^28*x2^64*x3^70*x4^79*x5^92*x6^98*x7^94*x8^56 + x1^28*x2^64*x3^70*x4^79*x5^92*x6^98*x7^88*x8^67 + -x1^28*x2^64*x3^70*x4^79*x5^92*x6^98*x7^82*x8^56 + -x1^28*x2^64*x3^66*x4^80*x5^89*x6^98*x7^94*x8^67 + x1^28*x2^64*x3^66*x4^80*x5^89*x6^98*x7^94*x8^51 + x1^28*x2^64*x3^66*x4^80*x5^89*x6^98*x7^88*x8^67 + -x1^28*x2^64*x3^66*x4^80*x5^89*x6^98*x7^82*x8^51 + x1^28*x2^64*x3^66*x4^79*x5^70*x6^45*x7^94*x8^67 + -x1^28*x2^64*x3^66*x4^79*x5^70*x6^40*x7^88*x8^67 + -x1^28*x2^64*x3^66*x4^79*x5^54*x6^45*x7^94*x8^51 + x1^28*x2^64*x3^66*x4^79*x5^46*x6^35*x7^82*x8^51 + x1^28*x2^36*x3^82*x4^80*x5^92*x6^98*x7^94*x8^67 + -x1^28*x2^36*x3^82*x4^80*x5^92*x6^98*x7^94*x8^56 + -x1^28*x2^36*x3^82*x4^80*x5^92*x6^98*x7^92*x8^67 + x1^28*x2^36*x3^82*x4^80*x5^92*x6^98*x7^92*x8^56 + -x1^28*x2^36*x3^82*x4^80*x5^89*x6^98*x7^94*x8^67 + x1^28*x2^36*x3^82*x4^80*x5^89*x6^98*x7^94*x8^48 + x1^28*x2^36*x3^82*x4^80*x5^89*x6^98*x7^92*x8^67 + -x1^28*x2^36*x3^82*x4^80*x5^89*x6^98*x7^92*x8^39 + -x1^28*x2^36*x3^82*x4^71*x5^92*x6^98*x7^94*x8^67 + x1^28*x2^36*x3^82*x4^71*x5^92*x6^98*x7^94*x8^56 + x1^28*x2^36*x3^82*x4^71*x5^92*x6^98*x7^92*x8^67 + -x1^28*x2^36*x3^82*x4^71*x5^92*x6^98*x7^92*x8^56 + x1^28*x2^36*x3^82*x4^71*x5^70*x6^56*x7^94*x8^67 + -x1^28*x2^36*x3^82*x4^71*x5^70*x6^56*x7^92*x8^67 + -x1^28*x2^36*x3^82*x4^71*x5^54*x6^56*x7^94*x8^48 + x1^28*x2^36*x3^82*x4^71*x5^50*x6^56*x7^92*x8^39 + -x1^28*x2^26*x3^70*x4^80*x5^92*x6^98*x7^94*x8^67 + x1^28*x2^26*x3^70*x4^80*x5^92*x6^98*x7^94*x8^56 + x1^28*x2^26*x3^70*x4^80*x5^92*x6^98*x7^88*x8^67 + -x1^28*x2^26*x3^70*x4^80*x5^92*x6^98*x7^76*x8^56 + x1^28*x2^26*x3^70*x4^48*x5^92*x6^98*x7^94*x8^67 + -x1^28*x2^26*x3^70*x4^48*x5^92*x6^98*x7^88*x8^67 + -x1^28*x2^26*x3^70*x4^38*x5^92*x6^98*x7^94*x8^56 + x1^28*x2^26*x3^70*x4^38*x5^92*x6^98*x7^56*x8^56 + x1^28*x2^26*x3^66*x4^80*x5^89*x6^98*x7^94*x8^67 + -x1^28*x2^26*x3^66*x4^80*x5^89*x6^98*x7^94*x8^48 + -x1^28*x2^26*x3^66*x4^80*x5^89*x6^98*x7^88*x8^67 + x1^28*x2^26*x3^66*x4^80*x5^89*x6^98*x7^76*x8^39 + -x1^28*x2^26*x3^66*x4^48*x5^70*x6^45*x7^94*x8^67 + x1^28*x2^26*x3^66*x4^48*x5^70*x6^40*x7^88*x8^67 + x1^28*x2^26*x3^66*x4^38*x5^54*x6^45*x7^94*x8^48 + -x1^28*x2^26*x3^66*x4^38*x5^36*x6^35*x7^56*x8^39 + x1^23*x2^64*x3^82*x4^80*x5^92*x6^98*x7^94*x8^67 + -x1^23*x2^64*x3^82*x4^80*x5^92*x6^98*x7^94*x8^56 + -x1^23*x2^64*x3^82*x4^80*x5^92*x6^98*x7^92*x8^67 + x1^23*x2^64*x3^82*x4^80*x5^92*x6^98*x7^92*x8^56 + -x1^23*x2^64*x3^82*x4^80*x5^89*x6^98*x7^94*x8^67 + x1^23*x2^64*x3^82*x4^80*x5^89*x6^98*x7^94*x8^51 + x1^23*x2^64*x3^82*x4^80*x5^89*x6^98*x7^92*x8^67 + -x1^23*x2^64*x3^82*x4^80*x5^89*x6^98*x7^92*x8^51 + -x1^23*x2^64*x3^82*x4^79*x5^92*x6^98*x7^94*x8^67 + x1^23*x2^64*x3^82*x4^79*x5^92*x6^98*x7^94*x8^56 + x1^23*x2^64*x3^82*x4^79*x5^92*x6^98*x7^92*x8^67 + -x1^23*x2^64*x3^82*x4^79*x5^92*x6^98*x7^92*x8^56 + x1^23*x2^64*x3^82*x4^79*x5^70*x6^56*x7^94*x8^67 + -x1^23*x2^64*x3^82*x4^79*x5^70*x6^56*x7^92*x8^67 + -x1^23*x2^64*x3^82*x4^79*x5^54*x6^56*x7^94*x8^51 + x1^23*x2^64*x3^82*x4^79*x5^50*x6^56*x7^92*x8^51 + -x1^23*x2^36*x3^82*x4^80*x5^92*x6^98*x7^94*x8^67 + x1^23*x2^36*x3^82*x4^80*x5^92*x6^98*x7^94*x8^56 + x1^23*x2^36*x3^82*x4^80*x5^92*x6^98*x7^92*x8^67 + -x1^23*x2^36*x3^82*x4^80*x5^92*x6^98*x7^92*x8^56 + x1^23*x2^36*x3^82*x4^80*x5^89*x6^98*x7^94*x8^67 + -x1^23*x2^36*x3^82*x4^80*x5^89*x6^98*x7^94*x8^48 + -x1^23*x2^36*x3^82*x4^80*x5^89*x6^98*x7^92*x8^67 + x1^23*x2^36*x3^82*x4^80*x5^89*x6^98*x7^92*x8^14 + x1^23*x2^36*x3^82*x4^71*x5^92*x6^98*x7^94*x8^67 + -x1^23*x2^36*x3^82*x4^71*x5^92*x6^98*x7^94*x8^56 + -x1^23*x2^36*x3^82*x4^71*x5^92*x6^98*x7^92*x8^67 + x1^23*x2^36*x3^82*x4^71*x5^92*x6^98*x7^92*x8^56 + -x1^23*x2^36*x3^82*x4^71*x5^70*x6^56*x7^94*x8^67 + x1^23*x2^36*x3^82*x4^71*x5^70*x6^56*x7^92*x8^67 + x1^23*x2^36*x3^82*x4^71*x5^54*x6^56*x7^94*x8^48 + -x1^23*x2^36*x3^82*x4^71*x5^50*x6^56*x7^92*x8^13 + -x1^18*x2^64*x3^70*x4^80*x5^92*x6^98*x7^94*x8^67 + x1^18*x2^64*x3^70*x4^80*x5^92*x6^98*x7^94*x8^56 + x1^18*x2^64*x3^70*x4^80*x5^92*x6^98*x7^88*x8^67 + -x1^18*x2^64*x3^70*x4^80*x5^92*x6^98*x7^82*x8^56 + x1^18*x2^64*x3^70*x4^79*x5^92*x6^98*x7^94*x8^67 + -x1^18*x2^64*x3^70*x4^79*x5^92*x6^98*x7^94*x8^56 + -x1^18*x2^64*x3^70*x4^79*x5^92*x6^98*x7^88*x8^67 + x1^18*x2^64*x3^70*x4^79*x5^92*x6^98*x7^82*x8^56 + x1^18*x2^64*x3^47*x4^80*x5^89*x6^98*x7^94*x8^67 + -x1^18*x2^64*x3^47*x4^80*x5^89*x6^98*x7^88*x8^67 + -x1^18*x2^64*x3^47*x4^79*x5^70*x6^45*x7^94*x8^67 + x1^18*x2^64*x3^47*x4^79*x5^70*x6^40*x7^88*x8^67 + -x1^18*x2^64*x3^45*x4^80*x5^89*x6^98*x7^94*x8^51 + x1^18*x2^64*x3^45*x4^79*x5^54*x6^45*x7^94*x8^51 + x1^18*x2^64*x3^34*x4^80*x5^89*x6^98*x7^82*x8^51 + -x1^18*x2^64*x3^14*x4^79*x5^46*x6^3*x7^82*x8^51 + x1^17*x2^25*x3^70*x4^80*x5^92*x6^98*x7^94*x8^67 + -x1^17*x2^25*x3^70*x4^80*x5^92*x6^98*x7^94*x8^56 + -x1^17*x2^25*x3^70*x4^48*x5^92*x6^98*x7^94*x8^67 + x1^17*x2^25*x3^70*x4^32*x5^92*x6^98*x7^94*x8^56 + -x1^17*x2^18*x3^70*x4^80*x5^92*x6^98*x7^88*x8^67 + x1^17*x2^18*x3^70*x4^48*x5^92*x6^98*x7^88*x8^67 + x1^17*x2^8*x3^70*x4^80*x5^92*x6^98*x7^76*x8^56 + -x1^17*x3^70*x4^32*x5^92*x6^98*x7*x8^56 + -x1^13*x2^25*x3^47*x4^80*x5^89*x6^98*x7^94*x8^67 + x1^13*x2^25*x3^47*x4^48*x5^70*x6^45*x7^94*x8^67 + x1^13*x2^25*x3^45*x4^80*x5^89*x6^98*x7^94*x8^48 + -x1^13*x2^25*x3^45*x4^32*x5^54*x6^45*x7^94*x8^48 + x1^12*x2^18*x3^47*x4^80*x5^89*x6^98*x7^88*x8^67 + -x1^12*x2^18*x3^47*x4^48*x5^70*x6^40*x7^88*x8^67 + -x1^6*x2^8*x3^34*x4^80*x5^89*x6^98*x7^76*x8^14 + 1; frobby-0.9.5/test/commonIdeals/t16.opt_irr000066400000000000000000000001551401527164200204160ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^99*x2^84*x3^64*x4^79*x6^58*x7^94*x8^67 ); 545 frobby-0.9.5/test/commonIdeals/t16.opt_irr_min000066400000000000000000000001061401527164200212550ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x6^3 ); 3 frobby-0.9.5/test/commonIdeals/t16.opt_std000066400000000000000000000001151401527164200204100ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t16.opt_std_min000066400000000000000000000001151401527164200212530ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t16.primdecom000066400000000000000000001477031401527164200207320ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^99, x2^84, x3^91, x5^92, x7^37, x8^58 ); I = monomialIdeal( x1^99, x2^84, x3^91, x6^98, x7^37, x8^58 ); I = monomialIdeal( x1^99, x2^84, x3^87, x4^80, x7^92, x8^33 ); I = monomialIdeal( x1^99, x2^84, x3^87, x4^71, x8^33 ); I = monomialIdeal( x1^99, x2^84, x3^87, x6^98, x7^92, x8^33 ); I = monomialIdeal( x1^99, x2^84, x3^87, x7^76, x8^33 ); I = monomialIdeal( x1^99, x2^84, x3^82, x4^80, x8^33 ); I = monomialIdeal( x1^99, x2^84, x3^82, x5^89, x8^33 ); I = monomialIdeal( x1^99, x2^84, x3^82, x6^98, x8^33 ); I = monomialIdeal( x1^99, x2^84, x3^70, x7^37, x8^58 ); I = monomialIdeal( x1^99, x2^84, x3^65, x4^80, x5^96, x8^48 ); I = monomialIdeal( x1^99, x2^84, x3^65, x4^80, x7^98, x7^94*x8^48, x8^50 ); I = monomialIdeal( x1^99, x2^84, x3^65, x4^80, x8^37 ); I = monomialIdeal( x1^99, x2^84, x3^65, x4^79, x6^58, x7^94, x8^58 ); I = monomialIdeal( x1^99, x2^84, x3^65, x4^77, x7^94, x8^58 ); I = monomialIdeal( x1^99, x2^84, x3^65, x4^67, x8^48 ); I = monomialIdeal( x1^99, x2^84, x3^65, x5^96, x6^98, x8^48 ); I = monomialIdeal( x1^99, x2^84, x3^65, x5^89, x7^94, x8^50 ); I = monomialIdeal( x1^99, x2^84, x3^65, x5^89, x8^48 ); I = monomialIdeal( x1^99, x2^84, x3^65, x6^98, x7^98, x7^94*x8^48, x8^50 ); I = monomialIdeal( x1^99, x2^84, x3^65, x6^98, x8^37 ); I = monomialIdeal( x1^99, x2^84, x3^65, x6^58, x7^94, x7^82*x8^51, x8^58 ); I = monomialIdeal( x1^99, x2^84, x3^65, x7^76, x7^54*x8^50, x8^58 ); I = monomialIdeal( x1^99, x2^84, x3^64, x4^79, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^99, x2^84, x3^64, x4^79, x6^58, x7^88 ); I = monomialIdeal( x1^99, x2^84, x3^64, x4^77, x7^94, x8^67 ); I = monomialIdeal( x1^99, x2^84, x3^64, x4^77, x7^88 ); I = monomialIdeal( x1^99, x2^84, x3^64, x6^58, x7^82 ); I = monomialIdeal( x1^99, x2^84, x3^64, x7^54 ); I = monomialIdeal( x1^99, x2^84, x4^80, x5^93, x7^92, x8^33 ); I = monomialIdeal( x1^99, x2^84, x4^80, x7^92, x8^30 ); I = monomialIdeal( x1^99, x2^84, x4^71, x4^70*x8^30, x8^33 ); I = monomialIdeal( x1^99, x2^84, x4^71, x5^93, x8^33 ); I = monomialIdeal( x1^99, x2^84, x4^71, x6^85, x8^33 ); I = monomialIdeal( x1^99, x2^84, x5^93, x5^92*x8^33, x5^89*x7^76, x7^92, x7^37*x8^33, x8^57 ); I = monomialIdeal( x1^99, x2^84, x5^93, x6^98, x7^92, x8^33 ); I = monomialIdeal( x1^99, x2^84, x6^98, x6^85*x7^37*x8^30, x6^58*x8^57, x7^92, x7^37*x8^33, x8^58 ); I = monomialIdeal( x1^99, x2^84, x6^56, x8^33 ); I = monomialIdeal( x1^99, x2^84, x7^76, x7^62*x8^30, x7^37*x8^33, x8^56 ); I = monomialIdeal( x1^99, x2^74, x3^66, x4^79, x6^43, x8^58 ); I = monomialIdeal( x1^99, x2^74, x3^66, x6^43, x8^51 ); I = monomialIdeal( x1^99, x2^74, x3^65, x4^80, x8^48 ); I = monomialIdeal( x1^99, x2^74, x3^65, x4^79, x6^45, x8^58 ); I = monomialIdeal( x1^99, x2^74, x3^65, x6^98, x6^45*x8^48, x8^51 ); I = monomialIdeal( x1^99, x2^74, x3^64, x3^47*x6^40, x4^79, x6^45 ); I = monomialIdeal( x1^99, x2^74, x3^64, x4^79, x6^45, x8^67 ); I = monomialIdeal( x1^99, x2^74, x3^45, x4^80, x8^50 ); I = monomialIdeal( x1^99, x2^74, x3^45, x4^79, x6^58 ); I = monomialIdeal( x1^99, x2^74, x3^45, x4^77 ); I = monomialIdeal( x1^99, x2^74, x3^45, x6^98, x6^58*x8^50, x8^51 ); I = monomialIdeal( x1^99, x2^74, x4^79, x6^35, x8^58 ); I = monomialIdeal( x1^99, x2^74, x4^79, x6^20 ); I = monomialIdeal( x1^99, x2^74, x6^43, x6^35*x8^39, x8^51 ); I = monomialIdeal( x1^99, x2^73, x4^80, x7^92, x8^33 ); I = monomialIdeal( x1^99, x2^73, x4^71, x8^33 ); I = monomialIdeal( x1^99, x2^73, x6^98, x7^92, x8^33 ); I = monomialIdeal( x1^99, x2^73, x7^76, x8^33 ); I = monomialIdeal( x1^99, x2^64, x3^66, x5^80, x6^43, x7^88 ); I = monomialIdeal( x1^99, x2^64, x3^66, x5^80, x6^43, x8^67 ); I = monomialIdeal( x1^99, x2^64, x3^66, x5^80, x6^40 ); I = monomialIdeal( x1^99, x2^64, x3^66, x6^43, x8^58 ); I = monomialIdeal( x1^99, x2^64, x3^65, x5^80, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^99, x2^64, x3^65, x5^80, x6^58, x7^88 ); I = monomialIdeal( x1^99, x2^64, x3^65, x5^80, x6^45, x8^67 ); I = monomialIdeal( x1^99, x2^64, x3^65, x5^76, x7^94, x8^67 ); I = monomialIdeal( x1^99, x2^64, x3^65, x5^76, x7^88 ); I = monomialIdeal( x1^99, x2^64, x3^65, x6^58, x7^94, x8^58 ); I = monomialIdeal( x1^99, x2^64, x3^65, x6^45, x8^58 ); I = monomialIdeal( x1^99, x2^64, x3^64, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^99, x2^64, x3^64, x6^58, x7^88 ); I = monomialIdeal( x1^99, x2^64, x3^64, x6^45, x8^67 ); I = monomialIdeal( x1^99, x2^64, x3^64, x6^40 ); I = monomialIdeal( x1^99, x2^64, x3^47, x5^76, x7^94 ); I = monomialIdeal( x1^99, x2^64, x3^47, x6^58, x7^94 ); I = monomialIdeal( x1^99, x2^64, x3^47, x6^45 ); I = monomialIdeal( x1^99, x2^64, x3^45, x5^76 ); I = monomialIdeal( x1^99, x2^64, x3^45, x6^58 ); I = monomialIdeal( x1^99, x2^64, x3^33 ); I = monomialIdeal( x1^99, x2^64, x5^80, x6^35 ); I = monomialIdeal( x1^99, x2^64, x6^35, x8^58 ); I = monomialIdeal( x1^99, x2^64, x6^20 ); I = monomialIdeal( x1^99, x3^91, x5^80, x7^37 ); I = monomialIdeal( x1^99, x3^82, x5^80, x8^33 ); I = monomialIdeal( x1^99, x3^66, x4^79, x5^96, x6^43, x8^58 ); I = monomialIdeal( x1^99, x3^66, x4^79, x5^80, x6^43, x7^88 ); I = monomialIdeal( x1^99, x3^66, x4^79, x5^80, x6^43, x8^67 ); I = monomialIdeal( x1^99, x3^66, x4^79, x5^80, x6^40 ); I = monomialIdeal( x1^99, x3^66, x4^79, x6^43, x7^98, x8^58 ); I = monomialIdeal( x1^99, x3^66, x4^67, x6^43, x8^58 ); I = monomialIdeal( x1^99, x3^66, x5^96, x6^43, x8^51 ); I = monomialIdeal( x1^99, x3^66, x5^80, x6^43, x7^82 ); I = monomialIdeal( x1^99, x3^66, x6^43, x7^98, x7^82*x8^51, x8^58 ); I = monomialIdeal( x1^99, x3^65, x4^79, x5^96, x6^45, x8^58 ); I = monomialIdeal( x1^99, x3^65, x4^79, x5^80, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^99, x3^65, x4^79, x5^80, x6^58, x7^88 ); I = monomialIdeal( x1^99, x3^65, x4^79, x5^80, x6^45, x8^67 ); I = monomialIdeal( x1^99, x3^65, x4^79, x5^76, x7^94, x8^67 ); I = monomialIdeal( x1^99, x3^65, x4^79, x5^76, x7^88 ); I = monomialIdeal( x1^99, x3^65, x4^79, x6^53, x6^45*x7^94, x7^98, x8^58 ); I = monomialIdeal( x1^99, x3^65, x4^77, x5^80, x7^94, x8^67 ); I = monomialIdeal( x1^99, x3^65, x4^77, x5^80, x7^88 ); I = monomialIdeal( x1^99, x3^65, x4^67, x6^53, x6^45*x8^48, x8^58 ); I = monomialIdeal( x1^99, x3^65, x5^96, x6^53, x6^45*x8^48, x8^51 ); I = monomialIdeal( x1^99, x3^65, x5^80, x6^58, x7^94, x8^51 ); I = monomialIdeal( x1^99, x3^65, x5^80, x6^58, x7^82 ); I = monomialIdeal( x1^99, x3^65, x5^80, x7^94, x8^50 ); I = monomialIdeal( x1^99, x3^65, x5^80, x7^54 ); I = monomialIdeal( x1^99, x3^65, x5^80, x8^48 ); I = monomialIdeal( x1^99, x3^65, x5^76, x7^94, x8^51 ); I = monomialIdeal( x1^99, x3^65, x5^76, x7^82 ); I = monomialIdeal( x1^99, x3^65, x6^53, x7^98, x7^94*x8^48, x7^82*x8^51, x8^58 ); I = monomialIdeal( x1^99, x3^65, x6^53, x8^37 ); I = monomialIdeal( x1^99, x3^65, x6^45, x7^98, x8^51 ); I = monomialIdeal( x1^99, x3^64, x4^79, x5^96, x6^45, x8^67 ); I = monomialIdeal( x1^99, x3^64, x4^79, x5^96, x6^40 ); I = monomialIdeal( x1^99, x3^64, x4^79, x6^53, x7^94, x8^67 ); I = monomialIdeal( x1^99, x3^64, x4^79, x6^53, x7^88 ); I = monomialIdeal( x1^99, x3^64, x4^79, x6^45, x7^98, x8^67 ); I = monomialIdeal( x1^99, x3^64, x4^79, x6^40, x7^98 ); I = monomialIdeal( x1^99, x3^64, x4^67, x6^45, x8^67 ); I = monomialIdeal( x1^99, x3^64, x4^67, x6^40 ); I = monomialIdeal( x1^99, x3^64, x6^53, x7^82 ); I = monomialIdeal( x1^99, x3^48, x4^80, x5^96, x8^48 ); I = monomialIdeal( x1^99, x3^48, x4^80, x7^98, x7^94*x8^48, x8^50 ); I = monomialIdeal( x1^99, x3^48, x4^80, x8^37 ); I = monomialIdeal( x1^99, x3^48, x4^79, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^99, x3^48, x4^79, x6^58, x7^88 ); I = monomialIdeal( x1^99, x3^48, x4^77, x7^94, x8^67 ); I = monomialIdeal( x1^99, x3^48, x4^77, x7^88 ); I = monomialIdeal( x1^99, x3^48, x4^67, x8^48 ); I = monomialIdeal( x1^99, x3^48, x5^96, x6^98, x8^48 ); I = monomialIdeal( x1^99, x3^48, x5^89, x7^94, x8^50 ); I = monomialIdeal( x1^99, x3^48, x5^89, x8^48 ); I = monomialIdeal( x1^99, x3^48, x6^98, x7^98, x7^94*x8^48, x8^50 ); I = monomialIdeal( x1^99, x3^48, x6^98, x8^37 ); I = monomialIdeal( x1^99, x3^48, x6^58, x7^94, x8^51 ); I = monomialIdeal( x1^99, x3^48, x6^58, x7^82 ); I = monomialIdeal( x1^99, x3^48, x7^76, x8^50 ); I = monomialIdeal( x1^99, x3^48, x7^54 ); I = monomialIdeal( x1^99, x3^47, x4^79, x5^96, x6^45 ); I = monomialIdeal( x1^99, x3^47, x4^79, x5^76, x7^94 ); I = monomialIdeal( x1^99, x3^47, x4^79, x6^58, x6^45*x7^94, x7^98 ); I = monomialIdeal( x1^99, x3^47, x4^77, x7^94 ); I = monomialIdeal( x1^99, x3^47, x4^67, x6^45 ); I = monomialIdeal( x1^99, x3^45, x4^80, x5^96, x8^50 ); I = monomialIdeal( x1^99, x3^45, x4^80, x7^98, x8^50 ); I = monomialIdeal( x1^99, x3^45, x4^79, x5^96, x6^58 ); I = monomialIdeal( x1^99, x3^45, x4^79, x5^76 ); I = monomialIdeal( x1^99, x3^45, x4^79, x6^58, x7^98 ); I = monomialIdeal( x1^99, x3^45, x4^77, x5^96 ); I = monomialIdeal( x1^99, x3^45, x4^77, x7^98 ); I = monomialIdeal( x1^99, x3^45, x4^67 ); I = monomialIdeal( x1^99, x3^45, x5^96, x6^98, x6^58*x8^50, x8^51 ); I = monomialIdeal( x1^99, x3^45, x5^89, x5^76*x8^50, x8^51 ); I = monomialIdeal( x1^99, x3^45, x6^98, x6^58*x8^50, x7^98, x8^51 ); I = monomialIdeal( x1^99, x3^34, x4^79, x6^58 ); I = monomialIdeal( x1^99, x3^34, x4^77 ); I = monomialIdeal( x1^99, x3^34, x6^58, x8^51 ); I = monomialIdeal( x1^99, x3^34, x8^50 ); I = monomialIdeal( x1^99, x3^33, x4^79 ); I = monomialIdeal( x1^99, x3^33, x7^82 ); I = monomialIdeal( x1^99, x3^33, x8^51 ); I = monomialIdeal( x1^99, x4^79, x5^96, x5^80*x6^20, x6^35 ); I = monomialIdeal( x1^99, x4^79, x5^96, x6^35, x8^58 ); I = monomialIdeal( x1^99, x4^79, x6^35, x7^98, x8^58 ); I = monomialIdeal( x1^99, x4^79, x6^20, x7^98 ); I = monomialIdeal( x1^99, x4^71, x5^80, x8^33 ); I = monomialIdeal( x1^99, x4^67, x6^43, x6^35*x8^39, x8^58 ); I = monomialIdeal( x1^99, x4^67, x6^20 ); I = monomialIdeal( x1^99, x5^96, x6^43, x6^35*x8^39, x8^51 ); I = monomialIdeal( x1^99, x5^80, x6^58, x7^37 ); I = monomialIdeal( x1^99, x5^80, x6^56, x8^33 ); I = monomialIdeal( x1^99, x5^80, x6^43, x6^35*x7^56, x7^82 ); I = monomialIdeal( x1^99, x5^80, x7^92, x7^37*x8^33, x8^57 ); I = monomialIdeal( x1^99, x6^53, x7^37, x8^58 ); I = monomialIdeal( x1^99, x6^53, x8^33 ); I = monomialIdeal( x1^99, x6^43, x7^98, x7^56*x8^39, x8^58 ); I = monomialIdeal( x1^99, x6^43, x8^37 ); I = monomialIdeal( x1^99, x6^35, x7^98, x7^82*x8^51, x8^58 ); I = monomialIdeal( x1^99, x6^20, x7^82 ); I = monomialIdeal( x1^94, x3^91, x4^55, x5^92, x7^56, x8^58 ); I = monomialIdeal( x1^94, x3^91, x4^55, x6^98, x7^56, x8^58 ); I = monomialIdeal( x1^94, x3^91, x5^92, x7^37, x8^58 ); I = monomialIdeal( x1^94, x3^91, x6^98, x7^37, x8^58 ); I = monomialIdeal( x1^94, x3^87, x4^80, x7^92, x8^33 ); I = monomialIdeal( x1^94, x3^87, x4^71, x8^33 ); I = monomialIdeal( x1^94, x3^87, x6^98, x7^92, x8^33 ); I = monomialIdeal( x1^94, x3^87, x7^76, x8^33 ); I = monomialIdeal( x1^94, x3^82, x4^80, x8^33 ); I = monomialIdeal( x1^94, x3^82, x5^89, x8^33 ); I = monomialIdeal( x1^94, x3^82, x6^98, x8^33 ); I = monomialIdeal( x1^94, x3^82, x8^14 ); I = monomialIdeal( x1^94, x3^78, x4^55, x8^39 ); I = monomialIdeal( x1^94, x3^70, x4^55, x7^56, x8^58 ); I = monomialIdeal( x1^94, x3^70, x7^37, x8^58 ); I = monomialIdeal( x1^94, x3^70, x7^6 ); I = monomialIdeal( x1^94, x3^66, x4^55, x7^94, x8^58 ); I = monomialIdeal( x1^94, x3^66, x4^55, x8^48 ); I = monomialIdeal( x1^94, x3^65, x4^80, x5^96, x8^48 ); I = monomialIdeal( x1^94, x3^65, x4^80, x7^98, x7^94*x8^48, x8^50 ); I = monomialIdeal( x1^94, x3^65, x4^80, x8^37 ); I = monomialIdeal( x1^94, x3^65, x4^79, x6^58, x7^94, x8^58 ); I = monomialIdeal( x1^94, x3^65, x4^77, x7^94, x8^58 ); I = monomialIdeal( x1^94, x3^65, x4^67, x8^48 ); I = monomialIdeal( x1^94, x3^65, x5^96, x6^98, x8^48 ); I = monomialIdeal( x1^94, x3^65, x5^89, x7^94, x8^50 ); I = monomialIdeal( x1^94, x3^65, x5^89, x8^48 ); I = monomialIdeal( x1^94, x3^65, x6^98, x7^98, x7^94*x8^48, x8^50 ); I = monomialIdeal( x1^94, x3^65, x6^98, x8^37 ); I = monomialIdeal( x1^94, x3^65, x6^58, x7^94, x7^82*x8^51, x8^58 ); I = monomialIdeal( x1^94, x3^65, x7^76, x7^54*x8^50, x8^58 ); I = monomialIdeal( x1^94, x3^64, x4^79, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^94, x3^64, x4^79, x6^58, x7^88 ); I = monomialIdeal( x1^94, x3^64, x4^77, x4^48*x7^88, x7^94 ); I = monomialIdeal( x1^94, x3^64, x4^77, x7^94, x8^67 ); I = monomialIdeal( x1^94, x3^64, x6^58, x7^82 ); I = monomialIdeal( x1^94, x3^64, x7^54 ); I = monomialIdeal( x1^94, x4^80, x5^93, x7^92, x8^33 ); I = monomialIdeal( x1^94, x4^80, x7^92, x8^30 ); I = monomialIdeal( x1^94, x4^71, x4^70*x8^30, x8^33 ); I = monomialIdeal( x1^94, x4^71, x5^93, x8^33 ); I = monomialIdeal( x1^94, x4^71, x6^85, x8^33 ); I = monomialIdeal( x1^94, x4^55, x5^92, x7^56, x8^57 ); I = monomialIdeal( x1^94, x4^55, x5^84, x8^39 ); I = monomialIdeal( x1^94, x4^55, x6^98, x6^58*x8^57, x7^56, x8^58 ); I = monomialIdeal( x1^94, x4^55, x7^81, x7^56*x8^39, x8^56 ); I = monomialIdeal( x1^94, x4^55, x8^36 ); I = monomialIdeal( x1^94, x4^51, x5^92, x7^56, x8^58 ); I = monomialIdeal( x1^94, x4^51, x6^98, x7^56, x8^58 ); I = monomialIdeal( x1^94, x5^93, x5^92*x8^33, x7^76, x7^37*x8^33, x8^57 ); I = monomialIdeal( x1^94, x5^93, x6^98, x7^92, x8^33 ); I = monomialIdeal( x1^94, x5^92, x7^6 ); I = monomialIdeal( x1^94, x5^89, x7^92, x8^33 ); I = monomialIdeal( x1^94, x6^98, x7^92, x7^37*x8^30, x8^57 ); I = monomialIdeal( x1^94, x6^98, x7^6 ); I = monomialIdeal( x1^94, x6^85, x6^58*x8^33, x7^92, x7^37*x8^33, x8^58 ); I = monomialIdeal( x1^94, x6^56, x8^33 ); I = monomialIdeal( x1^94, x7^92, x7^76*x8^14, x7^62*x8^30, x7^37*x8^33, x8^56 ); I = monomialIdeal( x1^94, x7 ); I = monomialIdeal( x1^94, x8^13 ); I = monomialIdeal( x1^81, x4^80, x7^92, x8^33 ); I = monomialIdeal( x1^81, x4^71, x8^33 ); I = monomialIdeal( x1^81, x6^98, x7^92, x8^33 ); I = monomialIdeal( x1^81, x7^76, x8^33 ); I = monomialIdeal( x1^74, x3^66, x4^79, x6^43, x8^58 ); I = monomialIdeal( x1^74, x3^66, x6^43, x8^51 ); I = monomialIdeal( x1^74, x3^65, x4^80, x8^48 ); I = monomialIdeal( x1^74, x3^65, x4^79, x6^45, x8^58 ); I = monomialIdeal( x1^74, x3^65, x6^98, x6^45*x8^48, x8^51 ); I = monomialIdeal( x1^74, x3^64, x3^47*x6^40, x4^79, x6^45 ); I = monomialIdeal( x1^74, x3^64, x4^79, x6^45, x8^67 ); I = monomialIdeal( x1^74, x3^45, x4^80, x8^50 ); I = monomialIdeal( x1^74, x3^45, x4^79, x6^58 ); I = monomialIdeal( x1^74, x3^45, x4^77 ); I = monomialIdeal( x1^74, x3^45, x6^98, x6^58*x8^50, x8^51 ); I = monomialIdeal( x1^74, x4^79, x6^35, x8^58 ); I = monomialIdeal( x1^74, x4^79, x6^20 ); I = monomialIdeal( x1^74, x6^43, x6^35*x8^39, x8^51 ); I = monomialIdeal( x1^68, x2^64, x3^66, x6^43, x7^88 ); I = monomialIdeal( x1^68, x2^64, x3^66, x6^43, x8^67 ); I = monomialIdeal( x1^68, x2^64, x3^66, x6^40 ); I = monomialIdeal( x1^68, x2^64, x3^65, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^68, x2^64, x3^65, x6^58, x7^88 ); I = monomialIdeal( x1^68, x2^64, x3^65, x6^45, x8^67 ); I = monomialIdeal( x1^68, x2^64, x6^35 ); I = monomialIdeal( x1^68, x2^63, x3^91, x4^77, x5^92, x7^56 ); I = monomialIdeal( x1^68, x2^63, x3^91, x4^77, x6^98, x7^56 ); I = monomialIdeal( x1^68, x2^63, x3^91, x5^92, x7^54 ); I = monomialIdeal( x1^68, x2^63, x3^91, x6^98, x7^54 ); I = monomialIdeal( x1^68, x2^63, x3^70, x4^77, x7^56 ); I = monomialIdeal( x1^68, x2^63, x3^70, x7^54 ); I = monomialIdeal( x1^68, x2^63, x3^66, x4^77, x7^94, x8^67 ); I = monomialIdeal( x1^68, x2^63, x3^66, x4^77, x7^88 ); I = monomialIdeal( x1^68, x2^63, x3^66, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^68, x2^63, x3^66, x6^58, x7^88 ); I = monomialIdeal( x1^68, x2^63, x3^66, x6^45, x8^67 ); I = monomialIdeal( x1^68, x2^63, x6^58, x7^56 ); I = monomialIdeal( x1^68, x3^91, x4^55, x5^92, x7^56 ); I = monomialIdeal( x1^68, x3^91, x4^55, x6^98, x7^56 ); I = monomialIdeal( x1^68, x3^91, x5^92, x7^37 ); I = monomialIdeal( x1^68, x3^91, x6^98, x7^37 ); I = monomialIdeal( x1^68, x3^78, x4^38, x5^92, x7^94 ); I = monomialIdeal( x1^68, x3^78, x4^38, x6^98, x7^94 ); I = monomialIdeal( x1^68, x3^78, x4^32 ); I = monomialIdeal( x1^68, x3^70, x4^55, x4^38*x7^56, x7^94 ); I = monomialIdeal( x1^68, x3^70, x7^37 ); I = monomialIdeal( x1^68, x3^66, x4^79, x6^43, x7^88 ); I = monomialIdeal( x1^68, x3^66, x4^79, x6^43, x8^67 ); I = monomialIdeal( x1^68, x3^66, x4^79, x6^40 ); I = monomialIdeal( x1^68, x3^66, x4^55, x6^45, x8^67 ); I = monomialIdeal( x1^68, x3^66, x4^55, x7^94, x8^67 ); I = monomialIdeal( x1^68, x3^66, x4^55, x7^88 ); I = monomialIdeal( x1^68, x3^66, x4^48, x6^45 ); I = monomialIdeal( x1^68, x3^66, x4^48, x7^94 ); I = monomialIdeal( x1^68, x3^66, x6^43, x7^82 ); I = monomialIdeal( x1^68, x3^65, x4^79, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^68, x3^65, x4^79, x6^58, x7^88 ); I = monomialIdeal( x1^68, x3^65, x4^79, x6^45, x8^67 ); I = monomialIdeal( x1^68, x3^65, x4^77, x7^94, x8^67 ); I = monomialIdeal( x1^68, x3^65, x4^77, x7^88 ); I = monomialIdeal( x1^68, x3^65, x6^58, x7^82 ); I = monomialIdeal( x1^68, x3^65, x7^54 ); I = monomialIdeal( x1^68, x4^79, x6^35 ); I = monomialIdeal( x1^68, x4^55, x6^58, x7^56 ); I = monomialIdeal( x1^68, x4^51, x5^92, x7^56 ); I = monomialIdeal( x1^68, x4^51, x6^98, x7^56 ); I = monomialIdeal( x1^68, x4^38, x5^92, x5^84*x7^81, x7^94 ); I = monomialIdeal( x1^68, x4^38, x6^98, x6^53*x7^81, x7^94 ); I = monomialIdeal( x1^68, x4^38, x6^45 ); I = monomialIdeal( x1^68, x4^32, x5^84 ); I = monomialIdeal( x1^68, x4^32, x6^53 ); I = monomialIdeal( x1^68, x4^32, x7^81 ); I = monomialIdeal( x1^68, x6^58, x6^43*x7^37, x6^35*x7^56, x7^82 ); I = monomialIdeal( x1^47, x2^64, x3^66, x5^76, x7^94, x8^67 ); I = monomialIdeal( x1^47, x2^64, x3^66, x5^76, x7^88 ); I = monomialIdeal( x1^47, x2^64, x3^66, x5^70, x6^45 ); I = monomialIdeal( x1^47, x2^64, x3^66, x5^70, x7^94 ); I = monomialIdeal( x1^47, x2^64, x3^66, x5^54 ); I = monomialIdeal( x1^47, x2^64, x3^66, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^47, x2^64, x3^66, x6^58, x7^88 ); I = monomialIdeal( x1^47, x2^64, x3^66, x6^45, x8^67 ); I = monomialIdeal( x1^47, x3^91, x4^77, x5^92, x7^56 ); I = monomialIdeal( x1^47, x3^91, x4^77, x6^98, x7^56 ); I = monomialIdeal( x1^47, x3^91, x5^92, x5^76*x7^54, x7^56 ); I = monomialIdeal( x1^47, x3^91, x6^98, x7^54 ); I = monomialIdeal( x1^47, x3^82, x4^80, x8^36 ); I = monomialIdeal( x1^47, x3^82, x5^89, x5^84*x8^36, x8^39 ); I = monomialIdeal( x1^47, x3^82, x6^98, x8^36 ); I = monomialIdeal( x1^47, x3^78, x4^80, x8^39 ); I = monomialIdeal( x1^47, x3^78, x5^89, x8^39 ); I = monomialIdeal( x1^47, x3^78, x6^98, x8^39 ); I = monomialIdeal( x1^47, x3^70, x4^77, x7^56 ); I = monomialIdeal( x1^47, x3^70, x7^54 ); I = monomialIdeal( x1^47, x3^66, x4^80, x7^94, x8^50 ); I = monomialIdeal( x1^47, x3^66, x4^80, x8^48 ); I = monomialIdeal( x1^47, x3^66, x4^79, x5^76, x7^94, x8^67 ); I = monomialIdeal( x1^47, x3^66, x4^79, x5^76, x7^88 ); I = monomialIdeal( x1^47, x3^66, x4^79, x5^70, x6^45 ); I = monomialIdeal( x1^47, x3^66, x4^79, x5^70, x7^94 ); I = monomialIdeal( x1^47, x3^66, x4^79, x5^54 ); I = monomialIdeal( x1^47, x3^66, x4^79, x6^58, x7^94, x8^67 ); I = monomialIdeal( x1^47, x3^66, x4^79, x6^58, x7^88 ); I = monomialIdeal( x1^47, x3^66, x4^79, x6^45, x8^67 ); I = monomialIdeal( x1^47, x3^66, x4^77, x7^94, x8^67 ); I = monomialIdeal( x1^47, x3^66, x4^77, x7^88 ); I = monomialIdeal( x1^47, x3^66, x5^89, x7^94, x8^50 ); I = monomialIdeal( x1^47, x3^66, x5^89, x8^48 ); I = monomialIdeal( x1^47, x3^66, x5^76, x7^94, x8^51 ); I = monomialIdeal( x1^47, x3^66, x5^76, x7^82 ); I = monomialIdeal( x1^47, x3^66, x5^54, x8^51 ); I = monomialIdeal( x1^47, x3^66, x6^98, x7^94, x8^50 ); I = monomialIdeal( x1^47, x3^66, x6^98, x8^48 ); I = monomialIdeal( x1^47, x3^66, x6^58, x7^94, x8^51 ); I = monomialIdeal( x1^47, x3^66, x6^58, x7^82 ); I = monomialIdeal( x1^47, x3^66, x6^45, x8^51 ); I = monomialIdeal( x1^47, x3^66, x7^76, x8^50 ); I = monomialIdeal( x1^47, x4^80, x7^92, x7^81*x8^36, x8^39 ); I = monomialIdeal( x1^47, x4^77, x5^92, x7^56, x8^57 ); I = monomialIdeal( x1^47, x4^77, x6^98, x7^56, x8^57 ); I = monomialIdeal( x1^47, x4^77, x7^56, x8^56 ); I = monomialIdeal( x1^47, x4^71, x5^84, x8^39 ); I = monomialIdeal( x1^47, x4^71, x8^36 ); I = monomialIdeal( x1^47, x5^92, x5^89*x7^54, x7^92, x7^81*x8^36, x7^54*x8^39, x8^57 ); I = monomialIdeal( x1^47, x5^84, x5^76*x8^39, x7^92, x7^56*x8^39, x8^57 ); I = monomialIdeal( x1^47, x5^84, x6^56, x8^39 ); I = monomialIdeal( x1^47, x5^50, x8^39 ); I = monomialIdeal( x1^47, x6^98, x7^92, x7^81*x8^36, x7^54*x8^39, x8^57 ); I = monomialIdeal( x1^47, x6^58, x7^56 ); I = monomialIdeal( x1^47, x6^56, x6^53*x8^36, x8^39 ); I = monomialIdeal( x1^47, x7^76, x7^56*x8^39, x7^54*x8^50, x8^56 ); I = monomialIdeal( x1^44, x2^36, x4^80, x8^39 ); I = monomialIdeal( x1^44, x2^36, x5^89, x8^39 ); I = monomialIdeal( x1^44, x2^36, x6^98, x8^39 ); I = monomialIdeal( x1^44, x3^82, x4^80, x8^39 ); I = monomialIdeal( x1^44, x3^82, x5^89, x8^39 ); I = monomialIdeal( x1^44, x3^82, x6^98, x8^39 ); I = monomialIdeal( x1^44, x4^80, x7^92, x8^39 ); I = monomialIdeal( x1^44, x4^71, x8^39 ); I = monomialIdeal( x1^44, x4^38, x5^92, x7^94 ); I = monomialIdeal( x1^44, x4^38, x6^98, x7^94 ); I = monomialIdeal( x1^44, x4^38, x7^94, x8^56 ); I = monomialIdeal( x1^44, x4^38, x8^48 ); I = monomialIdeal( x1^44, x4^32 ); I = monomialIdeal( x1^44, x5^89, x7^92, x8^39 ); I = monomialIdeal( x1^44, x6^98, x7^92, x8^39 ); I = monomialIdeal( x1^44, x6^56, x8^39 ); I = monomialIdeal( x1^41, x2^64, x3^66, x4^80, x7^94, x8^67 ); I = monomialIdeal( x1^41, x2^64, x3^66, x4^80, x7^88 ); I = monomialIdeal( x1^41, x2^64, x3^66, x5^89, x7^94, x8^67 ); I = monomialIdeal( x1^41, x2^64, x3^66, x5^89, x7^88 ); I = monomialIdeal( x1^41, x2^64, x3^66, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^41, x2^64, x3^66, x6^98, x7^88 ); I = monomialIdeal( x1^41, x2^64, x3^47, x4^80, x7^94 ); I = monomialIdeal( x1^41, x2^64, x3^47, x5^89, x7^94 ); I = monomialIdeal( x1^41, x2^64, x3^47, x6^98, x7^94 ); I = monomialIdeal( x1^41, x2^64, x3^45, x4^80 ); I = monomialIdeal( x1^41, x2^64, x3^45, x5^89 ); I = monomialIdeal( x1^41, x2^64, x3^45, x6^98 ); I = monomialIdeal( x1^41, x2^64, x3^34 ); I = monomialIdeal( x1^41, x2^40, x5^92, x7^56 ); I = monomialIdeal( x1^41, x2^40, x6^98, x7^56 ); I = monomialIdeal( x1^41, x2^26, x3^70, x4^80, x7^94, x8^67 ); I = monomialIdeal( x1^41, x2^26, x3^70, x4^80, x7^88 ); I = monomialIdeal( x1^41, x2^26, x3^70, x7^76 ); I = monomialIdeal( x1^41, x2^26, x4^80, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^41, x2^26, x4^80, x5^92, x7^88 ); I = monomialIdeal( x1^41, x2^26, x4^80, x7^94, x8^56 ); I = monomialIdeal( x1^41, x2^26, x5^92, x7^76 ); I = monomialIdeal( x1^41, x2^26, x5^89, x7^94, x8^67 ); I = monomialIdeal( x1^41, x2^26, x5^89, x7^88 ); I = monomialIdeal( x1^41, x2^26, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^41, x2^26, x6^98, x7^88 ); I = monomialIdeal( x1^41, x2^26, x7^76, x8^56 ); I = monomialIdeal( x1^41, x2^25, x3^70, x4^80, x8^67 ); I = monomialIdeal( x1^41, x2^25, x3^47, x4^80 ); I = monomialIdeal( x1^41, x2^25, x3^47, x5^89 ); I = monomialIdeal( x1^41, x2^25, x3^47, x6^98 ); I = monomialIdeal( x1^41, x2^25, x4^80, x5^92, x8^67 ); I = monomialIdeal( x1^41, x2^25, x4^80, x8^56 ); I = monomialIdeal( x1^41, x2^25, x5^89, x8^67 ); I = monomialIdeal( x1^41, x2^25, x6^98, x8^67 ); I = monomialIdeal( x1^41, x2^18, x3^70, x4^80 ); I = monomialIdeal( x1^41, x2^18, x4^80, x5^92 ); I = monomialIdeal( x1^41, x2^18, x5^89 ); I = monomialIdeal( x1^41, x2^18, x6^98 ); I = monomialIdeal( x1^41, x2^8, x3^70 ); I = monomialIdeal( x1^41, x2^8, x5^92 ); I = monomialIdeal( x1^41, x2^8, x8^56 ); I = monomialIdeal( x1^41, x3^91, x5^92, x7^56 ); I = monomialIdeal( x1^41, x3^91, x6^98, x7^56 ); I = monomialIdeal( x1^41, x3^70, x7^56 ); I = monomialIdeal( x1^41, x3^66, x4^80, x7^94, x8^51 ); I = monomialIdeal( x1^41, x3^66, x4^80, x7^82 ); I = monomialIdeal( x1^41, x3^66, x4^79, x7^94, x8^67 ); I = monomialIdeal( x1^41, x3^66, x4^79, x7^88 ); I = monomialIdeal( x1^41, x3^66, x5^89, x7^94, x8^51 ); I = monomialIdeal( x1^41, x3^66, x5^89, x7^82 ); I = monomialIdeal( x1^41, x3^66, x6^98, x7^94, x8^51 ); I = monomialIdeal( x1^41, x3^66, x6^98, x7^82 ); I = monomialIdeal( x1^41, x3^66, x7^76 ); I = monomialIdeal( x1^41, x3^47, x4^79, x7^94 ); I = monomialIdeal( x1^41, x3^45, x4^80, x8^51 ); I = monomialIdeal( x1^41, x3^45, x4^79 ); I = monomialIdeal( x1^41, x3^45, x5^89, x8^51 ); I = monomialIdeal( x1^41, x3^45, x6^98, x8^51 ); I = monomialIdeal( x1^41, x3^34, x7^82 ); I = monomialIdeal( x1^41, x3^34, x8^51 ); I = monomialIdeal( x1^41, x5^92, x7^56, x8^57 ); I = monomialIdeal( x1^41, x6^98, x7^56, x8^57 ); I = monomialIdeal( x1^41, x7^56, x8^56 ); I = monomialIdeal( x1^29, x5^92, x7^56 ); I = monomialIdeal( x1^29, x5^36 ); I = monomialIdeal( x1^29, x6^98, x7^56 ); I = monomialIdeal( x1^28, x2^64, x3^82, x4^80, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^64, x3^82, x4^80, x7^94, x8^56 ); I = monomialIdeal( x1^28, x2^64, x3^82, x5^89, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^64, x3^82, x5^70, x7^94 ); I = monomialIdeal( x1^28, x2^64, x3^82, x5^54 ); I = monomialIdeal( x1^28, x2^64, x3^82, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^64, x3^70, x4^80, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^64, x3^70, x4^80, x7^88 ); I = monomialIdeal( x1^28, x2^64, x4^80, x5^92, x7^92, x8^67 ); I = monomialIdeal( x1^28, x2^64, x4^80, x5^92, x7^88 ); I = monomialIdeal( x1^28, x2^64, x4^80, x7^92, x8^56 ); I = monomialIdeal( x1^28, x2^64, x5^89, x7^92, x8^67 ); I = monomialIdeal( x1^28, x2^64, x5^89, x7^88 ); I = monomialIdeal( x1^28, x2^64, x5^70, x6^56, x7^94 ); I = monomialIdeal( x1^28, x2^64, x5^70, x6^45 ); I = monomialIdeal( x1^28, x2^64, x5^70, x7^92 ); I = monomialIdeal( x1^28, x2^64, x5^54, x6^56 ); I = monomialIdeal( x1^28, x2^64, x5^50 ); I = monomialIdeal( x1^28, x2^64, x6^98, x7^92, x8^67 ); I = monomialIdeal( x1^28, x2^64, x6^98, x7^88 ); I = monomialIdeal( x1^28, x2^64, x6^56, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^64, x6^45, x8^67 ); I = monomialIdeal( x1^28, x2^64, x6^40 ); I = monomialIdeal( x1^28, x2^36, x4^80, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^36, x4^80, x7^94, x8^56 ); I = monomialIdeal( x1^28, x2^36, x4^80, x8^48 ); I = monomialIdeal( x1^28, x2^36, x5^89, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^36, x5^89, x8^48 ); I = monomialIdeal( x1^28, x2^36, x5^70, x7^94 ); I = monomialIdeal( x1^28, x2^36, x5^54 ); I = monomialIdeal( x1^28, x2^36, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^28, x2^36, x6^98, x8^48 ); I = monomialIdeal( x1^28, x3^82, x4^80, x7^94, x8^51 ); I = monomialIdeal( x1^28, x3^82, x4^80, x8^48 ); I = monomialIdeal( x1^28, x3^82, x4^79, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^28, x3^82, x4^79, x5^70, x7^94 ); I = monomialIdeal( x1^28, x3^82, x4^79, x5^54 ); I = monomialIdeal( x1^28, x3^82, x4^79, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^28, x3^82, x4^79, x7^94, x8^56 ); I = monomialIdeal( x1^28, x3^82, x5^89, x5^54*x8^48, x8^51 ); I = monomialIdeal( x1^28, x3^82, x5^89, x7^94, x8^51 ); I = monomialIdeal( x1^28, x3^82, x6^98, x7^94, x8^51 ); I = monomialIdeal( x1^28, x3^82, x6^98, x8^48 ); I = monomialIdeal( x1^28, x3^70, x4^80, x7^82 ); I = monomialIdeal( x1^28, x3^70, x4^79, x4^48*x7^88, x7^94 ); I = monomialIdeal( x1^28, x3^70, x4^79, x7^94, x8^67 ); I = monomialIdeal( x1^28, x3^70, x7^76 ); I = monomialIdeal( x1^28, x4^80, x5^92, x7^82 ); I = monomialIdeal( x1^28, x4^80, x7^92, x7^82*x8^51, x8^56 ); I = monomialIdeal( x1^28, x4^79, x5^92, x7^92, x8^67 ); I = monomialIdeal( x1^28, x4^79, x5^92, x7^88 ); I = monomialIdeal( x1^28, x4^79, x5^70, x6^56, x7^94 ); I = monomialIdeal( x1^28, x4^79, x5^70, x6^45 ); I = monomialIdeal( x1^28, x4^79, x5^70, x7^92 ); I = monomialIdeal( x1^28, x4^79, x5^54, x6^56 ); I = monomialIdeal( x1^28, x4^79, x5^50 ); I = monomialIdeal( x1^28, x4^79, x6^98, x7^92, x8^67 ); I = monomialIdeal( x1^28, x4^79, x6^98, x7^88 ); I = monomialIdeal( x1^28, x4^79, x6^56, x7^94, x8^67 ); I = monomialIdeal( x1^28, x4^79, x6^45, x8^67 ); I = monomialIdeal( x1^28, x4^79, x6^40 ); I = monomialIdeal( x1^28, x4^79, x7^92, x8^56 ); I = monomialIdeal( x1^28, x4^71, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^28, x4^71, x5^70, x7^94 ); I = monomialIdeal( x1^28, x4^71, x5^54 ); I = monomialIdeal( x1^28, x4^71, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^28, x4^71, x7^94, x8^56 ); I = monomialIdeal( x1^28, x4^71, x8^48 ); I = monomialIdeal( x1^28, x4^48, x5^92, x7^94 ); I = monomialIdeal( x1^28, x4^48, x6^98, x7^94 ); I = monomialIdeal( x1^28, x4^48, x6^45 ); I = monomialIdeal( x1^28, x5^92, x7^76 ); I = monomialIdeal( x1^28, x5^89, x7^92, x8^51 ); I = monomialIdeal( x1^28, x5^89, x7^82 ); I = monomialIdeal( x1^28, x5^54, x6^56, x8^51 ); I = monomialIdeal( x1^28, x5^50, x8^51 ); I = monomialIdeal( x1^28, x5^46 ); I = monomialIdeal( x1^28, x6^98, x7^92, x8^51 ); I = monomialIdeal( x1^28, x6^98, x7^82 ); I = monomialIdeal( x1^28, x6^56, x6^45*x8^48, x8^51 ); I = monomialIdeal( x1^28, x6^56, x7^94, x8^51 ); I = monomialIdeal( x1^28, x7^76, x8^56 ); I = monomialIdeal( x1^23, x2^64, x4^80, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^23, x2^64, x4^80, x7^94, x8^56 ); I = monomialIdeal( x1^23, x2^64, x5^89, x7^94, x8^67 ); I = monomialIdeal( x1^23, x2^64, x5^70, x7^94 ); I = monomialIdeal( x1^23, x2^64, x5^54 ); I = monomialIdeal( x1^23, x2^64, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^23, x4^80, x7^94, x8^51 ); I = monomialIdeal( x1^23, x4^80, x8^48 ); I = monomialIdeal( x1^23, x4^79, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^23, x4^79, x5^70, x7^94 ); I = monomialIdeal( x1^23, x4^79, x5^54 ); I = monomialIdeal( x1^23, x4^79, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^23, x4^79, x7^94, x8^56 ); I = monomialIdeal( x1^23, x5^89, x5^54*x8^48, x8^51 ); I = monomialIdeal( x1^23, x5^89, x7^94, x8^51 ); I = monomialIdeal( x1^23, x6^98, x7^94, x8^51 ); I = monomialIdeal( x1^23, x6^98, x8^48 ); I = monomialIdeal( x1^23, x8^14 ); I = monomialIdeal( x1^18, x3^70, x3^47*x7^88, x4^80, x7^94 ); I = monomialIdeal( x1^18, x3^70, x4^80, x7^94, x8^67 ); I = monomialIdeal( x1^18, x3^47, x5^89, x7^94 ); I = monomialIdeal( x1^18, x3^47, x6^98, x7^94 ); I = monomialIdeal( x1^18, x3^47, x6^45 ); I = monomialIdeal( x1^18, x3^45, x4^80 ); I = monomialIdeal( x1^18, x3^45, x5^89 ); I = monomialIdeal( x1^18, x3^45, x6^98 ); I = monomialIdeal( x1^18, x3^34 ); I = monomialIdeal( x1^18, x4^80, x5^92, x7^94, x8^67 ); I = monomialIdeal( x1^18, x4^80, x5^92, x7^88 ); I = monomialIdeal( x1^18, x4^80, x7^94, x8^56 ); I = monomialIdeal( x1^18, x5^89, x7^94, x8^67 ); I = monomialIdeal( x1^18, x5^89, x7^88 ); I = monomialIdeal( x1^18, x5^70, x6^45 ); I = monomialIdeal( x1^18, x5^70, x7^94 ); I = monomialIdeal( x1^18, x5^54 ); I = monomialIdeal( x1^18, x6^98, x7^94, x8^67 ); I = monomialIdeal( x1^18, x6^98, x7^88 ); I = monomialIdeal( x1^18, x6^45, x8^67 ); I = monomialIdeal( x1^18, x6^40 ); I = monomialIdeal( x1^17, x2^25, x2^18*x4^48, x4^80 ); I = monomialIdeal( x1^17, x2^25, x4^80, x8^67 ); I = monomialIdeal( x1^17, x2^8 ); I = monomialIdeal( x1^17, x4^80, x4^48*x7^88, x7^94 ); I = monomialIdeal( x1^17, x4^80, x7^94, x8^67 ); I = monomialIdeal( x1^17, x7^76 ); I = monomialIdeal( x1^13, x3^47, x4^80 ); I = monomialIdeal( x1^13, x3^47, x5^89 ); I = monomialIdeal( x1^13, x3^47, x6^98 ); I = monomialIdeal( x1^13, x4^80, x8^67 ); I = monomialIdeal( x1^13, x4^48 ); I = monomialIdeal( x1^13, x5^89, x8^67 ); I = monomialIdeal( x1^13, x5^70 ); I = monomialIdeal( x1^13, x6^98, x8^67 ); I = monomialIdeal( x1^12, x4^80 ); I = monomialIdeal( x1^12, x5^89 ); I = monomialIdeal( x1^12, x6^98 ); I = monomialIdeal( x1^6 ); I = monomialIdeal( x2^84, x3^91, x4^58, x5^92, x7^37, x8^58 ); I = monomialIdeal( x2^84, x3^91, x4^58, x6^98, x7^37, x8^58 ); I = monomialIdeal( x2^84, x3^91, x4^55, x5^92, x7^56, x8^58 ); I = monomialIdeal( x2^84, x3^91, x4^55, x6^98, x7^56, x8^58 ); I = monomialIdeal( x2^84, x3^91, x5^92, x7^17, x8^58 ); I = monomialIdeal( x2^84, x3^91, x6^98, x7^17, x8^58 ); I = monomialIdeal( x2^84, x3^82, x4^80, x8^20 ); I = monomialIdeal( x2^84, x3^82, x5^89, x8^20 ); I = monomialIdeal( x2^84, x3^82, x6^98, x8^20 ); I = monomialIdeal( x2^84, x3^82, x8^14 ); I = monomialIdeal( x2^84, x3^78, x4^55, x8^39 ); I = monomialIdeal( x2^84, x3^70, x4^58, x4^55*x7^37, x7^56, x8^58 ); I = monomialIdeal( x2^84, x3^70, x7^17, x8^58 ); I = monomialIdeal( x2^84, x3^70, x7^6 ); I = monomialIdeal( x2^84, x3^66, x4^55, x7^94, x8^58 ); I = monomialIdeal( x2^84, x3^66, x4^55, x8^48 ); I = monomialIdeal( x2^84, x3^65, x4^58, x7^94, x8^58 ); I = monomialIdeal( x2^84, x3^65, x4^58, x8^48 ); I = monomialIdeal( x2^84, x3^64, x4^58, x4^48*x7^88, x7^94 ); I = monomialIdeal( x2^84, x3^64, x4^58, x7^94, x8^67 ); I = monomialIdeal( x2^84, x3^64, x7^17 ); I = monomialIdeal( x2^84, x4^80, x7^92, x8^20 ); I = monomialIdeal( x2^84, x4^71, x8^20 ); I = monomialIdeal( x2^84, x4^58, x5^92, x7^37, x8^57 ); I = monomialIdeal( x2^84, x4^58, x6^98, x6^58*x8^57, x7^37, x8^58 ); I = monomialIdeal( x2^84, x4^58, x7^37, x8^56 ); I = monomialIdeal( x2^84, x4^58, x8^33 ); I = monomialIdeal( x2^84, x4^55, x5^92, x7^56, x8^57 ); I = monomialIdeal( x2^84, x4^55, x5^84, x8^39 ); I = monomialIdeal( x2^84, x4^55, x6^98, x6^58*x8^57, x7^56, x8^58 ); I = monomialIdeal( x2^84, x4^55, x7^81, x7^56*x8^39, x8^56 ); I = monomialIdeal( x2^84, x4^55, x8^36 ); I = monomialIdeal( x2^84, x4^51, x5^92, x7^56, x8^58 ); I = monomialIdeal( x2^84, x4^51, x6^98, x7^56, x8^58 ); I = monomialIdeal( x2^84, x5^92, x7^17, x8^57 ); I = monomialIdeal( x2^84, x5^92, x7^6 ); I = monomialIdeal( x2^84, x5^89, x7^92, x8^20 ); I = monomialIdeal( x2^84, x6^98, x7^92, x7^17*x8^20, x8^57 ); I = monomialIdeal( x2^84, x6^98, x7^6 ); I = monomialIdeal( x2^84, x6^58, x7^17, x8^58 ); I = monomialIdeal( x2^84, x6^56, x8^20 ); I = monomialIdeal( x2^84, x7^92, x7^76*x8^14, x7^17*x8^20, x8^56 ); I = monomialIdeal( x2^84, x7 ); I = monomialIdeal( x2^84, x8^13 ); I = monomialIdeal( x2^74, x4^79, x6^11 ); I = monomialIdeal( x2^74, x6^11, x8^51 ); I = monomialIdeal( x2^64, x3^66, x5^70, x6^43 ); I = monomialIdeal( x2^64, x3^66, x5^47 ); I = monomialIdeal( x2^64, x3^65, x3^45*x5^54, x5^70 ); I = monomialIdeal( x2^64, x3^65, x5^70, x6^45 ); I = monomialIdeal( x2^64, x3^65, x5^70, x7^94 ); I = monomialIdeal( x2^64, x3^26 ); I = monomialIdeal( x2^64, x5^70, x6^35 ); I = monomialIdeal( x2^64, x6^11 ); I = monomialIdeal( x2^63, x3^91, x4^77, x5^92, x7^56, x8^58 ); I = monomialIdeal( x2^63, x3^91, x4^77, x5^80, x7^56 ); I = monomialIdeal( x2^63, x3^91, x4^77, x6^98, x7^56, x8^58 ); I = monomialIdeal( x2^63, x3^91, x5^92, x7^54, x8^58 ); I = monomialIdeal( x2^63, x3^91, x5^80, x5^76*x7^54, x7^56 ); I = monomialIdeal( x2^63, x3^91, x6^98, x7^54, x8^58 ); I = monomialIdeal( x2^63, x3^82, x4^80, x8^36 ); I = monomialIdeal( x2^63, x3^82, x5^89, x5^84*x8^36, x8^39 ); I = monomialIdeal( x2^63, x3^82, x6^98, x8^36 ); I = monomialIdeal( x2^63, x3^78, x4^80, x8^39 ); I = monomialIdeal( x2^63, x3^78, x5^89, x8^39 ); I = monomialIdeal( x2^63, x3^78, x6^98, x8^39 ); I = monomialIdeal( x2^63, x3^70, x4^77, x7^56, x8^58 ); I = monomialIdeal( x2^63, x3^70, x7^54, x8^58 ); I = monomialIdeal( x2^63, x3^66, x4^80, x7^94, x8^50 ); I = monomialIdeal( x2^63, x3^66, x4^80, x8^48 ); I = monomialIdeal( x2^63, x3^66, x4^77, x5^80, x7^94, x8^67 ); I = monomialIdeal( x2^63, x3^66, x4^77, x5^80, x7^88 ); I = monomialIdeal( x2^63, x3^66, x4^77, x7^94, x8^58 ); I = monomialIdeal( x2^63, x3^66, x5^89, x7^94, x8^50 ); I = monomialIdeal( x2^63, x3^66, x5^89, x8^48 ); I = monomialIdeal( x2^63, x3^66, x5^80, x6^58, x7^94, x8^67 ); I = monomialIdeal( x2^63, x3^66, x5^80, x6^58, x7^88 ); I = monomialIdeal( x2^63, x3^66, x5^80, x6^45, x8^67 ); I = monomialIdeal( x2^63, x3^66, x5^80, x6^40 ); I = monomialIdeal( x2^63, x3^66, x5^76, x7^94, x8^67 ); I = monomialIdeal( x2^63, x3^66, x5^76, x7^88 ); I = monomialIdeal( x2^63, x3^66, x5^70, x6^45 ); I = monomialIdeal( x2^63, x3^66, x5^70, x7^94 ); I = monomialIdeal( x2^63, x3^66, x5^54 ); I = monomialIdeal( x2^63, x3^66, x6^98, x7^94, x8^50 ); I = monomialIdeal( x2^63, x3^66, x6^98, x8^48 ); I = monomialIdeal( x2^63, x3^66, x6^58, x7^94, x8^58 ); I = monomialIdeal( x2^63, x3^66, x6^45, x8^58 ); I = monomialIdeal( x2^63, x3^66, x7^76, x8^50 ); I = monomialIdeal( x2^63, x3^64, x4^77, x7^94, x8^67 ); I = monomialIdeal( x2^63, x3^64, x4^77, x7^88 ); I = monomialIdeal( x2^63, x3^64, x6^58, x7^94, x8^67 ); I = monomialIdeal( x2^63, x3^64, x6^58, x7^88 ); I = monomialIdeal( x2^63, x3^64, x6^45, x8^67 ); I = monomialIdeal( x2^63, x3^64, x6^40 ); I = monomialIdeal( x2^63, x3^64, x7^54 ); I = monomialIdeal( x2^63, x3^47, x4^77, x7^94 ); I = monomialIdeal( x2^63, x3^47, x5^76, x7^94 ); I = monomialIdeal( x2^63, x3^47, x6^58, x7^94 ); I = monomialIdeal( x2^63, x3^47, x6^45 ); I = monomialIdeal( x2^63, x3^45, x4^80, x8^50 ); I = monomialIdeal( x2^63, x3^45, x4^77 ); I = monomialIdeal( x2^63, x3^45, x5^89, x8^50 ); I = monomialIdeal( x2^63, x3^45, x5^76 ); I = monomialIdeal( x2^63, x3^45, x6^98, x8^50 ); I = monomialIdeal( x2^63, x3^45, x6^58 ); I = monomialIdeal( x2^63, x3^34, x8^50 ); I = monomialIdeal( x2^63, x3^33 ); I = monomialIdeal( x2^63, x4^80, x7^92, x7^81*x8^36, x8^39 ); I = monomialIdeal( x2^63, x4^77, x5^92, x7^56, x8^57 ); I = monomialIdeal( x2^63, x4^77, x6^98, x7^56, x8^57 ); I = monomialIdeal( x2^63, x4^77, x7^56, x8^56 ); I = monomialIdeal( x2^63, x4^71, x5^84, x8^39 ); I = monomialIdeal( x2^63, x4^71, x8^36 ); I = monomialIdeal( x2^63, x5^92, x5^89*x7^54, x7^92, x7^81*x8^36, x7^54*x8^39, x8^57 ); I = monomialIdeal( x2^63, x5^84, x6^56, x8^39 ); I = monomialIdeal( x2^63, x5^84, x7^92, x8^39 ); I = monomialIdeal( x2^63, x5^80, x6^58, x7^56 ); I = monomialIdeal( x2^63, x5^80, x6^35 ); I = monomialIdeal( x2^63, x5^76, x7^56, x8^57 ); I = monomialIdeal( x2^63, x5^50, x8^39 ); I = monomialIdeal( x2^63, x6^98, x6^58*x7^54*x8^39, x6^58*x8^57, x7^92, x7^81*x8^36, x7^56*x8^39, x8^58 ); I = monomialIdeal( x2^63, x6^56, x6^53*x8^36, x6^35*x8^39, x8^58 ); I = monomialIdeal( x2^63, x6^20 ); I = monomialIdeal( x2^63, x7^76, x7^56*x8^39, x7^54*x8^50, x8^56 ); I = monomialIdeal( x2^45, x3^91, x4^77, x5^92, x7^56 ); I = monomialIdeal( x2^45, x3^91, x4^77, x6^98, x7^56 ); I = monomialIdeal( x2^45, x3^91, x5^92, x7^54 ); I = monomialIdeal( x2^45, x3^91, x6^98, x7^54 ); I = monomialIdeal( x2^45, x3^78, x4^38, x5^92, x7^94 ); I = monomialIdeal( x2^45, x3^78, x4^38, x6^98, x7^94 ); I = monomialIdeal( x2^45, x3^78, x4^32 ); I = monomialIdeal( x2^45, x3^70, x4^77, x4^38*x7^56, x7^94 ); I = monomialIdeal( x2^45, x3^70, x7^54 ); I = monomialIdeal( x2^45, x3^66, x4^77, x7^94, x8^67 ); I = monomialIdeal( x2^45, x3^66, x4^77, x7^88 ); I = monomialIdeal( x2^45, x3^66, x4^48, x6^45 ); I = monomialIdeal( x2^45, x3^66, x4^48, x7^94 ); I = monomialIdeal( x2^45, x3^66, x6^58, x7^94, x8^67 ); I = monomialIdeal( x2^45, x3^66, x6^58, x7^88 ); I = monomialIdeal( x2^45, x3^66, x6^45, x8^67 ); I = monomialIdeal( x2^45, x3^66, x6^40 ); I = monomialIdeal( x2^45, x4^51, x5^92, x7^56 ); I = monomialIdeal( x2^45, x4^51, x6^98, x7^56 ); I = monomialIdeal( x2^45, x4^38, x5^92, x5^84*x7^81, x7^94 ); I = monomialIdeal( x2^45, x4^38, x6^98, x6^53*x7^81, x7^94 ); I = monomialIdeal( x2^45, x4^38, x6^45 ); I = monomialIdeal( x2^45, x4^32, x5^84 ); I = monomialIdeal( x2^45, x4^32, x6^53 ); I = monomialIdeal( x2^45, x4^32, x7^81 ); I = monomialIdeal( x2^45, x6^58, x7^56 ); I = monomialIdeal( x2^45, x6^35 ); I = monomialIdeal( x2^40, x4^77, x5^92, x7^56 ); I = monomialIdeal( x2^40, x4^77, x6^98, x7^56 ); I = monomialIdeal( x2^40, x5^92, x5^76*x7^54, x7^56 ); I = monomialIdeal( x2^40, x5^36 ); I = monomialIdeal( x2^40, x6^98, x7^54 ); I = monomialIdeal( x2^36, x4^80, x8^36 ); I = monomialIdeal( x2^36, x5^89, x5^84*x8^36, x8^39 ); I = monomialIdeal( x2^36, x6^98, x8^36 ); I = monomialIdeal( x2^36, x8^14 ); I = monomialIdeal( x2^29, x4^80, x8^39 ); I = monomialIdeal( x2^29, x4^38, x5^92, x7^94 ); I = monomialIdeal( x2^29, x4^38, x6^98, x7^94 ); I = monomialIdeal( x2^29, x4^38, x7^94, x8^56 ); I = monomialIdeal( x2^29, x4^38, x8^48 ); I = monomialIdeal( x2^29, x4^32 ); I = monomialIdeal( x2^29, x5^89, x8^39 ); I = monomialIdeal( x2^29, x6^98, x8^39 ); I = monomialIdeal( x2^26, x3^70, x4^77, x4^48*x7^88, x7^94 ); I = monomialIdeal( x2^26, x3^70, x4^77, x7^94, x8^67 ); I = monomialIdeal( x2^26, x4^80, x7^94, x8^50 ); I = monomialIdeal( x2^26, x4^80, x8^48 ); I = monomialIdeal( x2^26, x4^77, x5^92, x7^94, x8^67 ); I = monomialIdeal( x2^26, x4^77, x5^92, x7^88 ); I = monomialIdeal( x2^26, x4^77, x6^98, x7^94, x8^67 ); I = monomialIdeal( x2^26, x4^77, x6^98, x7^88 ); I = monomialIdeal( x2^26, x4^77, x7^94, x8^56 ); I = monomialIdeal( x2^26, x4^48, x5^92, x7^94 ); I = monomialIdeal( x2^26, x4^48, x6^98, x7^94 ); I = monomialIdeal( x2^26, x4^48, x6^45 ); I = monomialIdeal( x2^26, x5^89, x7^94, x8^50 ); I = monomialIdeal( x2^26, x5^89, x8^48 ); I = monomialIdeal( x2^26, x5^76, x7^94, x8^67 ); I = monomialIdeal( x2^26, x5^76, x7^88 ); I = monomialIdeal( x2^26, x5^70, x6^45 ); I = monomialIdeal( x2^26, x5^70, x7^94 ); I = monomialIdeal( x2^26, x5^54 ); I = monomialIdeal( x2^26, x6^98, x7^94, x8^50 ); I = monomialIdeal( x2^26, x6^98, x8^48 ); I = monomialIdeal( x2^26, x6^58, x7^94, x8^67 ); I = monomialIdeal( x2^26, x6^58, x7^88 ); I = monomialIdeal( x2^26, x6^45, x8^67 ); I = monomialIdeal( x2^26, x6^40 ); I = monomialIdeal( x2^26, x7^76, x8^50 ); I = monomialIdeal( x2^25, x3^70, x3^47*x4^48, x4^77 ); I = monomialIdeal( x2^25, x3^70, x4^77, x8^67 ); I = monomialIdeal( x2^25, x3^47, x5^76 ); I = monomialIdeal( x2^25, x3^47, x6^58 ); I = monomialIdeal( x2^25, x4^80, x8^50 ); I = monomialIdeal( x2^25, x4^77, x5^92, x8^67 ); I = monomialIdeal( x2^25, x4^77, x6^98, x8^67 ); I = monomialIdeal( x2^25, x4^77, x8^56 ); I = monomialIdeal( x2^25, x4^48, x5^92 ); I = monomialIdeal( x2^25, x4^48, x6^98 ); I = monomialIdeal( x2^25, x5^89, x5^76*x8^50, x8^67 ); I = monomialIdeal( x2^25, x5^70 ); I = monomialIdeal( x2^25, x6^98, x6^58*x8^50, x8^67 ); I = monomialIdeal( x2^18, x3^70, x4^77 ); I = monomialIdeal( x2^18, x4^77, x5^92 ); I = monomialIdeal( x2^18, x4^77, x6^98 ); I = monomialIdeal( x2^18, x5^76 ); I = monomialIdeal( x2^18, x6^58 ); I = monomialIdeal( x2^8, x8^50 ); I = monomialIdeal( x2^7, x3^70 ); I = monomialIdeal( x2^7, x5^92 ); I = monomialIdeal( x2^7, x6^98 ); I = monomialIdeal( x2^7, x8^56 ); I = monomialIdeal( x3^91, x4^58, x4^55*x7^37, x5^80, x7^56 ); I = monomialIdeal( x3^91, x5^80, x5^70*x7^17, x5^47*x7^37, x7^56 ); I = monomialIdeal( x3^91, x5^36 ); I = monomialIdeal( x3^82, x5^80, x5^70*x8^20, x8^33 ); I = monomialIdeal( x3^78, x4^45, x8^39 ); I = monomialIdeal( x3^78, x4^38, x4^32*x8^48, x8^58 ); I = monomialIdeal( x3^78, x4^38, x5^92, x7^94, x8^58 ); I = monomialIdeal( x3^78, x4^38, x6^98, x7^94, x8^58 ); I = monomialIdeal( x3^78, x4^38, x7^94, x8^56 ); I = monomialIdeal( x3^78, x4^20 ); I = monomialIdeal( x3^70, x4^45, x7^56, x8^58 ); I = monomialIdeal( x3^70, x4^45, x7^6 ); I = monomialIdeal( x3^70, x4^38, x7^94, x8^58 ); I = monomialIdeal( x3^66, x4^79, x5^70, x6^43 ); I = monomialIdeal( x3^66, x4^79, x5^47 ); I = monomialIdeal( x3^66, x4^58, x5^80, x6^43, x7^88 ); I = monomialIdeal( x3^66, x4^58, x5^80, x6^43, x8^67 ); I = monomialIdeal( x3^66, x4^58, x5^80, x6^40 ); I = monomialIdeal( x3^66, x4^58, x6^43, x8^58 ); I = monomialIdeal( x3^66, x4^55, x5^80, x6^45, x8^67 ); I = monomialIdeal( x3^66, x4^55, x5^80, x7^94, x8^67 ); I = monomialIdeal( x3^66, x4^55, x5^80, x7^88 ); I = monomialIdeal( x3^66, x4^55, x5^80, x8^48 ); I = monomialIdeal( x3^66, x4^55, x5^70, x6^45 ); I = monomialIdeal( x3^66, x4^55, x5^70, x7^94 ); I = monomialIdeal( x3^66, x4^55, x5^54 ); I = monomialIdeal( x3^66, x4^55, x6^53, x6^45*x8^48, x8^58 ); I = monomialIdeal( x3^66, x4^55, x6^53, x7^94, x8^58 ); I = monomialIdeal( x3^66, x4^48, x5^80, x6^45 ); I = monomialIdeal( x3^66, x4^48, x5^80, x7^94 ); I = monomialIdeal( x3^66, x4^45, x7^94, x8^58 ); I = monomialIdeal( x3^66, x4^45, x8^48 ); I = monomialIdeal( x3^66, x5^70, x6^43, x7^82 ); I = monomialIdeal( x3^66, x5^70, x6^43, x8^51 ); I = monomialIdeal( x3^66, x5^47, x7^82 ); I = monomialIdeal( x3^66, x5^47, x8^51 ); I = monomialIdeal( x3^66, x5^46 ); I = monomialIdeal( x3^65, x4^79, x5^70, x6^45 ); I = monomialIdeal( x3^65, x4^79, x5^70, x7^94 ); I = monomialIdeal( x3^65, x4^79, x5^54 ); I = monomialIdeal( x3^65, x4^58, x5^80, x6^45, x8^67 ); I = monomialIdeal( x3^65, x4^58, x5^80, x7^94, x8^67 ); I = monomialIdeal( x3^65, x4^58, x5^80, x7^88 ); I = monomialIdeal( x3^65, x4^58, x5^80, x8^48 ); I = monomialIdeal( x3^65, x4^58, x6^53, x6^45*x8^48, x8^58 ); I = monomialIdeal( x3^65, x4^58, x6^53, x7^94, x8^58 ); I = monomialIdeal( x3^65, x5^70, x5^54*x8^48, x8^51 ); I = monomialIdeal( x3^65, x5^70, x6^45, x8^51 ); I = monomialIdeal( x3^65, x5^70, x7^94, x8^51 ); I = monomialIdeal( x3^65, x5^70, x7^82 ); I = monomialIdeal( x3^64, x4^58, x6^53, x7^94, x8^67 ); I = monomialIdeal( x3^64, x4^58, x6^53, x7^88 ); I = monomialIdeal( x3^64, x4^58, x6^45, x8^67 ); I = monomialIdeal( x3^64, x4^58, x6^40 ); I = monomialIdeal( x3^64, x4^48, x6^53, x7^94 ); I = monomialIdeal( x3^64, x4^48, x6^45 ); I = monomialIdeal( x3^64, x4^45, x7^94 ); I = monomialIdeal( x3^64, x4^32 ); I = monomialIdeal( x3^64, x6^53, x7^17 ); I = monomialIdeal( x3^48, x4^80, x8^20 ); I = monomialIdeal( x3^48, x4^58, x7^94, x8^67 ); I = monomialIdeal( x3^48, x4^58, x7^88 ); I = monomialIdeal( x3^48, x4^58, x8^48 ); I = monomialIdeal( x3^48, x4^48, x7^94 ); I = monomialIdeal( x3^48, x5^89, x8^20 ); I = monomialIdeal( x3^48, x6^98, x8^20 ); I = monomialIdeal( x3^48, x7^76, x8^20 ); I = monomialIdeal( x3^48, x7^17 ); I = monomialIdeal( x3^48, x8^14 ); I = monomialIdeal( x3^47, x4^58, x6^45 ); I = monomialIdeal( x3^47, x4^58, x7^94 ); I = monomialIdeal( x3^45, x4^79, x5^70 ); I = monomialIdeal( x3^45, x4^58 ); I = monomialIdeal( x3^45, x5^70, x8^51 ); I = monomialIdeal( x3^34, x4^79, x6^11 ); I = monomialIdeal( x3^34, x6^11, x8^51 ); I = monomialIdeal( x3^34, x8^20 ); I = monomialIdeal( x3^26, x4^79 ); I = monomialIdeal( x3^26, x7^82 ); I = monomialIdeal( x3^26, x8^51 ); I = monomialIdeal( x3^14 ); I = monomialIdeal( x4^79, x5^96, x5^70*x6^11, x6^35 ); I = monomialIdeal( x4^79, x6^11, x7^98 ); I = monomialIdeal( x4^79, x6^4 ); I = monomialIdeal( x4^71, x5^80, x5^70*x8^20, x8^33 ); I = monomialIdeal( x4^67, x6^11 ); I = monomialIdeal( x4^58, x5^80, x6^58, x6^43*x7^37, x7^56 ); I = monomialIdeal( x4^58, x5^80, x6^35 ); I = monomialIdeal( x4^58, x5^80, x7^37, x8^57 ); I = monomialIdeal( x4^58, x5^80, x8^33 ); I = monomialIdeal( x4^58, x6^53, x7^37, x8^58 ); I = monomialIdeal( x4^58, x6^53, x8^33 ); I = monomialIdeal( x4^58, x6^43, x6^35*x8^39, x8^58 ); I = monomialIdeal( x4^58, x6^43, x7^56, x8^58 ); I = monomialIdeal( x4^58, x6^20 ); I = monomialIdeal( x4^55, x5^80, x6^58, x7^56 ); I = monomialIdeal( x4^55, x5^80, x7^56, x8^57 ); I = monomialIdeal( x4^55, x5^80, x8^39 ); I = monomialIdeal( x4^55, x6^53, x7^56, x8^58 ); I = monomialIdeal( x4^55, x6^53, x8^39 ); I = monomialIdeal( x4^51, x5^80, x7^56 ); I = monomialIdeal( x4^51, x5^36 ); I = monomialIdeal( x4^45, x5^92, x7^56, x8^58 ); I = monomialIdeal( x4^45, x5^92, x7^6 ); I = monomialIdeal( x4^45, x5^84, x8^39 ); I = monomialIdeal( x4^45, x6^98, x7^56, x8^58 ); I = monomialIdeal( x4^45, x6^98, x7^6 ); I = monomialIdeal( x4^45, x7^81, x7^56*x8^39, x8^56 ); I = monomialIdeal( x4^45, x7 ); I = monomialIdeal( x4^45, x8^36 ); I = monomialIdeal( x4^38, x5^92, x5^84*x7^81, x7^94, x8^58 ); I = monomialIdeal( x4^38, x5^84, x8^48 ); I = monomialIdeal( x4^38, x5^80, x6^45 ); I = monomialIdeal( x4^38, x5^80, x7^94 ); I = monomialIdeal( x4^38, x5^54 ); I = monomialIdeal( x4^38, x6^98, x6^53*x7^81, x7^94, x8^58 ); I = monomialIdeal( x4^38, x6^53, x6^45*x8^48, x8^58 ); I = monomialIdeal( x4^38, x7^81, x8^56 ); I = monomialIdeal( x4^32, x5^84, x8^58 ); I = monomialIdeal( x4^32, x5^80 ); I = monomialIdeal( x4^32, x6^53, x8^58 ); I = monomialIdeal( x4^32, x7^81, x8^58 ); I = monomialIdeal( x4^32, x7^6 ); I = monomialIdeal( x4^20, x5^84 ); I = monomialIdeal( x4^20, x6^53 ); I = monomialIdeal( x4^20, x7^81 ); I = monomialIdeal( x4^16 ); I = monomialIdeal( x5^96, x6^11, x8^51 ); I = monomialIdeal( x5^80, x6^58, x7^17 ); I = monomialIdeal( x5^80, x6^56, x8^20 ); I = monomialIdeal( x5^80, x7^92, x7^17*x8^20, x8^57 ); I = monomialIdeal( x5^80, x7^6 ); I = monomialIdeal( x5^80, x8^13 ); I = monomialIdeal( x5^70, x6^58, x7^37 ); I = monomialIdeal( x5^70, x6^56, x8^33 ); I = monomialIdeal( x5^70, x6^43, x7^56 ); I = monomialIdeal( x5^70, x6^43, x8^39 ); I = monomialIdeal( x5^70, x6^35, x7^82 ); I = monomialIdeal( x5^70, x6^35, x8^51 ); I = monomialIdeal( x5^70, x7^92, x7^37*x8^33, x8^57 ); I = monomialIdeal( x5^50, x8^33 ); I = monomialIdeal( x5^47, x6^58, x7^56 ); I = monomialIdeal( x5^47, x7^56, x8^57 ); I = monomialIdeal( x5^47, x8^39 ); I = monomialIdeal( x5^46, x5^36*x6^35, x6^58 ); I = monomialIdeal( x5^36, x8^57 ); I = monomialIdeal( x5^24 ); I = monomialIdeal( x6^53, x7^17, x8^58 ); I = monomialIdeal( x6^53, x7^6 ); I = monomialIdeal( x6^53, x8^20 ); I = monomialIdeal( x6^20, x7^17 ); I = monomialIdeal( x6^11, x6^4*x8^37, x8^51 ); I = monomialIdeal( x6^11, x7^98, x8^51 ); I = monomialIdeal( x6^11, x7^82 ); I = monomialIdeal( x6^3 ); I = monomialIdeal( x8^5 ); frobby-0.9.5/test/commonIdeals/t16.radical000066400000000000000000000001531401527164200203350ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1*x2*x3*x4*x5*x6*x8, x1*x3*x4*x5*x6*x7*x8 ); frobby-0.9.5/test/commonIdeals/t16.test000066400000000000000000000015061401527164200177200ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; I = monomialIdeal( x1^13*x2^25*x3^45*x4^32*x5^54*x6^45*x7^94*x8^48, x1^29*x2^40*x3^91*x4^51*x5^24*x6^58*x7^6*x8^57, x1^99*x2^63*x3^26*x4^58*x5^70*x6^11*x7^17*x8^20, x1^12*x2^18*x3^47*x4^48*x5^70*x6^40*x7^88*x8^67, x1^41*x2^7*x3^33*x4^77*x5^76*x6^58*x7^54*x8^50, x1^23*x2^36*x3^82*x4^71*x5^50*x6^56*x7^92*x8^13, x1^44*x2^29*x3^78*x4^16*x5^84*x6^53*x7^81*x8^36, x1^47*x2^63*x3^65*x4^55*x5^47*x6^43*x7^37*x8^33, x1^81*x2^73*x3^87*x4^70*x5^93*x6^85*x7^62*x8^30, x1^18*x2^64*x3^14*x4^79*x5^46*x6^3*x7^82*x8^51, x1^94*x2^84*x3^48*x4^45*x5^80*x6^53*x8^5, x1^74*x2^74*x3^34*x4^67*x5^96*x6^4*x7^98*x8^37, x1^17*x3^70*x4^32*x5^92*x6^98*x7*x8^56, x1^28*x2^26*x3^66*x4^38*x5^36*x6^35*x7^56*x8^39, x1^68*x2^45*x3^64*x4^20*x5^80*x6^20*x7^6*x8^58, x1^6*x2^8*x3^34*x4^80*x5^89*x6^98*x7^76*x8^14 ); frobby-0.9.5/test/commonIdeals/t16.uni000066400000000000000000000034311401527164200175330ustar00rootroot00000000000000R = QQ[t]; p = t^668 + t^666 + -2*t^663 + -t^661 + t^659 + -3*t^657 + -t^655 + -t^654 + 4*t^652 + -t^651 + -t^650 + 2*t^647 + t^646 + t^645 + -2*t^642 + t^640 + 2*t^639 + 2*t^637 + t^636 + -2*t^635 + -t^634 + t^633 + -t^630 + t^629 + t^628 + -t^627 + -t^625 + t^624 + t^623 + -t^621 + 3*t^620 + -t^619 + t^618 + -2*t^617 + -2*t^616 + -2*t^614 + 3*t^612 + -2*t^611 + -3*t^610 + 2*t^609 + -5*t^607 + -t^606 + 2*t^605 + -3*t^604 + t^603 + t^600 + 2*t^599 + t^598 + t^597 + -3*t^596 + 2*t^595 + -2*t^594 + 6*t^593 + -2*t^592 + t^591 + 2*t^590 + -2*t^589 + 2*t^588 + 2*t^587 + -3*t^586 + -2*t^585 + -2*t^584 + t^582 + 4*t^581 + t^580 + -t^579 + 3*t^577 + -4*t^576 + 2*t^574 + -2*t^573 + -2*t^572 + -3*t^571 + 6*t^570 + -t^569 + -2*t^568 + -2*t^567 + -t^564 + 5*t^563 + -2*t^562 + 2*t^561 + t^560 + 4*t^559 + -2*t^558 + -2*t^557 + -2*t^555 + 7*t^554 + -t^553 + -t^552 + -t^551 + -4*t^550 + 4*t^549 + -t^547 + t^546 + t^544 + -4*t^542 + -t^541 + -t^539 + -t^538 + -t^536 + t^535 + 3*t^534 + -t^533 + -2*t^532 + -t^530 + 2*t^529 + -2*t^528 + -t^527 + -t^526 + -t^523 + -2*t^522 + -t^520 + 2*t^518 + -t^517 + t^513 + -t^512 + -2*t^511 + 2*t^510 + -2*t^509 + -t^508 + -t^506 + t^504 + -2*t^503 + -4*t^502 + 2*t^501 + -3*t^499 + 2*t^498 + 4*t^497 + -t^496 + t^495 + -t^493 + t^492 + t^490 + -t^489 + -t^488 + t^487 + 2*t^486 + -t^485 + t^484 + t^482 + -t^481 + -t^479 + t^478 + t^476 + -t^474 + t^473 + t^471 + t^469 + t^466 + 3*t^464 + t^462 + 2*t^459 + t^457 + t^455 + t^454 + t^451 + 2*t^450 + 2*t^446 + -t^444 + t^433 + -t^423 + -t^421 + t^418 + t^416 + -t^405 + t^399 + -t^396 + -2*t^390 + -t^366 + -t^364 + -t^361 + -t^357 + -2*t^356 + -t^324 + 1; frobby-0.9.5/test/commonIdeals/t17.alexdual000066400000000000000000000000511401527164200205330ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a*b ); frobby-0.9.5/test/commonIdeals/t17.assoprimes000066400000000000000000000000511401527164200211210ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a*b ); frobby-0.9.5/test/commonIdeals/t17.dim000066400000000000000000000000021401527164200175010ustar00rootroot000000000000000 frobby-0.9.5/test/commonIdeals/t17.euler000066400000000000000000000000021401527164200200440ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t17.intersection000066400000000000000000000000531401527164200214440ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a, b ); frobby-0.9.5/test/commonIdeals/t17.irrdecom000066400000000000000000000000531401527164200205420ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a, b ); frobby-0.9.5/test/commonIdeals/t17.irrdecom_ideal000066400000000000000000000000511401527164200216760ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a*b ); frobby-0.9.5/test/commonIdeals/t17.maxstandard000066400000000000000000000000511401527164200212420ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/commonIdeals/t17.minimize000066400000000000000000000000531401527164200205570ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a, b ); frobby-0.9.5/test/commonIdeals/t17.multi000066400000000000000000000000511401527164200200660ustar00rootroot00000000000000R = QQ[a, b]; p = a*b + -a + -b + 1; frobby-0.9.5/test/commonIdeals/t17.opt_irr000066400000000000000000000000531401527164200204140ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a*b ); 2 frobby-0.9.5/test/commonIdeals/t17.opt_irr_min000066400000000000000000000000531401527164200212570ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a*b ); 2 frobby-0.9.5/test/commonIdeals/t17.opt_std000066400000000000000000000000531401527164200204120ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( 1_R ); 0 frobby-0.9.5/test/commonIdeals/t17.opt_std_min000066400000000000000000000000531401527164200212550ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( 1_R ); 0 frobby-0.9.5/test/commonIdeals/t17.primdecom000066400000000000000000000000531401527164200207150ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a, b ); frobby-0.9.5/test/commonIdeals/t17.radical000066400000000000000000000000531401527164200203350ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a, b ); frobby-0.9.5/test/commonIdeals/t17.test000066400000000000000000000001071401527164200177150ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( b^2, a, a^2, b, a*b, a^3*b^3 ); frobby-0.9.5/test/commonIdeals/t17.uni000066400000000000000000000000421401527164200175270ustar00rootroot00000000000000R = QQ[t]; p = t^2 + -2*t + 1; frobby-0.9.5/test/commonIdeals/t18.alexdual000066400000000000000000000000621401527164200205360ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a*d ); frobby-0.9.5/test/commonIdeals/t18.assoprimes000066400000000000000000000000621401527164200211240ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a*d ); frobby-0.9.5/test/commonIdeals/t18.dim000066400000000000000000000000021401527164200175020ustar00rootroot000000000000003 frobby-0.9.5/test/commonIdeals/t18.euler000066400000000000000000000000021401527164200200450ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t18.intersection000066400000000000000000000000661401527164200214510ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a^2, d ); frobby-0.9.5/test/commonIdeals/t18.irrdecom000066400000000000000000000000661401527164200205470ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a^2, d ); frobby-0.9.5/test/commonIdeals/t18.irrdecom_ideal000066400000000000000000000000641401527164200217030ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a^2*d ); frobby-0.9.5/test/commonIdeals/t18.maxstandard000066400000000000000000000000571401527164200212510ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal(0_R); frobby-0.9.5/test/commonIdeals/t18.minimize000066400000000000000000000000661401527164200205640ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a^2, d ); frobby-0.9.5/test/commonIdeals/t18.multi000066400000000000000000000000661401527164200200750ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; p = a^2*d + -a^2 + -d + 1; frobby-0.9.5/test/commonIdeals/t18.opt_irr000066400000000000000000000000661401527164200204210ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a^2*d ); 3 frobby-0.9.5/test/commonIdeals/t18.opt_irr_min000066400000000000000000000000661401527164200212640ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a^2*d ); 3 frobby-0.9.5/test/commonIdeals/t18.opt_std000066400000000000000000000000741401527164200204160ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t18.opt_std_min000066400000000000000000000000741401527164200212610ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t18.primdecom000066400000000000000000000000661401527164200207220ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a^2, d ); frobby-0.9.5/test/commonIdeals/t18.radical000066400000000000000000000000641401527164200203400ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a, d ); frobby-0.9.5/test/commonIdeals/t18.test000066400000000000000000000001361401527164200177200ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a^2, a*b*d, a*b^2*d, a*c*d, a*d, a^2*e, d ); frobby-0.9.5/test/commonIdeals/t18.uni000066400000000000000000000000501401527164200175270ustar00rootroot00000000000000R = QQ[t]; p = t^3 + -t^2 + -t + 1; frobby-0.9.5/test/commonIdeals/t19.alexdual000066400000000000000000000001271401527164200205410ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^11*b, a^10*b^11, a^8*b^16, a^2*b^17, a*b^20 ); frobby-0.9.5/test/commonIdeals/t19.assoprimes000066400000000000000000000000511401527164200211230ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a*b ); frobby-0.9.5/test/commonIdeals/t19.dim000066400000000000000000000000021401527164200175030ustar00rootroot000000000000000 frobby-0.9.5/test/commonIdeals/t19.euler000066400000000000000000000000021401527164200200460ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t19.intersection000066400000000000000000000001271401527164200214500ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^11, a^10*b, a^4*b^4, a^2*b^5, a*b^10, b^20 ); frobby-0.9.5/test/commonIdeals/t19.irrdecom000066400000000000000000000002631401527164200205470ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^11, b ); I = monomialIdeal( a^10, b^4 ); I = monomialIdeal( a^4, b^5 ); I = monomialIdeal( a^2, b^10 ); I = monomialIdeal( a, b^20 ); frobby-0.9.5/test/commonIdeals/t19.irrdecom_ideal000066400000000000000000000001251401527164200217020ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^11*b, a^10*b^4, a^4*b^5, a^2*b^10, a*b^20 ); frobby-0.9.5/test/commonIdeals/t19.maxstandard000066400000000000000000000001151401527164200212450ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^10, a^9*b^3, a^3*b^4, a*b^9, b^19 ); frobby-0.9.5/test/commonIdeals/t19.minimize000066400000000000000000000001271401527164200205630ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^11, a^10*b, a^4*b^4, a^2*b^5, a*b^10, b^20 ); frobby-0.9.5/test/commonIdeals/t19.multi000066400000000000000000000002151401527164200200720ustar00rootroot00000000000000R = QQ[a, b]; p = a^11*b + -a^11 + a^10*b^4 + -a^10*b + a^4*b^5 + -a^4*b^4 + a^2*b^10 + -a^2*b^5 + a*b^20 + -a*b^10 + -b^20 + 1; frobby-0.9.5/test/commonIdeals/t19.opt_irr000066400000000000000000000000571401527164200204220ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a*b^20 ); 21 frobby-0.9.5/test/commonIdeals/t19.opt_irr_min000066400000000000000000000000571401527164200212650ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^4*b^5 ); 9 frobby-0.9.5/test/commonIdeals/t19.opt_std000066400000000000000000000000551401527164200204160ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( b^19 ); 19 frobby-0.9.5/test/commonIdeals/t19.opt_std_min000066400000000000000000000000571401527164200212630ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^3*b^4 ); 7 frobby-0.9.5/test/commonIdeals/t19.primdecom000066400000000000000000000001271401527164200207210ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^11, a^10*b, a^4*b^4, a^2*b^5, a*b^10, b^20 ); frobby-0.9.5/test/commonIdeals/t19.radical000066400000000000000000000000531401527164200203370ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a, b ); frobby-0.9.5/test/commonIdeals/t19.test000066400000000000000000000002271401527164200177220ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^4*b^4, a^4*b^4, a^10*b, b^20, a*b^100, a^2*b^5, a^4*b^4, b^20, a*b^10, a^11, a^4*b^4, a^11, a^3*b^5 ); frobby-0.9.5/test/commonIdeals/t19.uni000066400000000000000000000001301401527164200175270ustar00rootroot00000000000000R = QQ[t]; p = t^21 + -t^20 + t^14 + 2*t^12 + -3*t^11 + t^9 + -t^8 + -t^7 + 1; frobby-0.9.5/test/commonIdeals/t2.alexdual000066400000000000000000000000701401527164200204460ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, a*c, b*c ); frobby-0.9.5/test/commonIdeals/t2.assoprimes000066400000000000000000000000701401527164200210340ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, a*c, b*c ); frobby-0.9.5/test/commonIdeals/t2.dim000066400000000000000000000000021401527164200174130ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t2.euler000066400000000000000000000000021401527164200177560ustar00rootroot000000000000002 frobby-0.9.5/test/commonIdeals/t2.intersection000066400000000000000000000001041401527164200213530ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^2*b^2, a^2*c^2, b^2*c^2 ); frobby-0.9.5/test/commonIdeals/t2.irrdecom000066400000000000000000000001641401527164200204570ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^2, b^2 ); I = monomialIdeal( a^2, c^2 ); I = monomialIdeal( b^2, c^2 ); frobby-0.9.5/test/commonIdeals/t2.irrdecom_ideal000066400000000000000000000001041401527164200216070ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^2*b^2, a^2*c^2, b^2*c^2 ); frobby-0.9.5/test/commonIdeals/t2.maxstandard000066400000000000000000000000511401527164200211540ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal(0_R); frobby-0.9.5/test/commonIdeals/t2.minimize000066400000000000000000000001041401527164200204660ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^2*b^2, a^2*c^2, b^2*c^2 ); frobby-0.9.5/test/commonIdeals/t2.multi000066400000000000000000000001161401527164200200020ustar00rootroot00000000000000R = QQ[a, b, c]; p = 2*a^2*b^2*c^2 + -a^2*b^2 + -a^2*c^2 + -b^2*c^2 + 1; frobby-0.9.5/test/commonIdeals/t2.opt_irr000066400000000000000000000001061401527164200203250ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^2*b^2, a^2*c^2, b^2*c^2 ); 4 frobby-0.9.5/test/commonIdeals/t2.opt_irr_min000066400000000000000000000001061401527164200211700ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^2*b^2, a^2*c^2, b^2*c^2 ); 4 frobby-0.9.5/test/commonIdeals/t2.opt_std000066400000000000000000000000661401527164200203300ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t2.opt_std_min000066400000000000000000000000661401527164200211730ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t2.primdecom000066400000000000000000000001641401527164200206320ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^2, b^2 ); I = monomialIdeal( a^2, c^2 ); I = monomialIdeal( b^2, c^2 ); frobby-0.9.5/test/commonIdeals/t2.radical000066400000000000000000000000701401527164200202460ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, a*c, b*c ); frobby-0.9.5/test/commonIdeals/t2.test000066400000000000000000000001221401527164200176240ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^3*b^3*c^3, a^2*b^2, b^2*c^2, a^2*c^2 ); frobby-0.9.5/test/commonIdeals/t2.uni000066400000000000000000000000461401527164200174450ustar00rootroot00000000000000R = QQ[t]; p = 2*t^6 + -3*t^4 + 1; frobby-0.9.5/test/commonIdeals/t20.alexdual000066400000000000000000000000601401527164200205250ustar00rootroot00000000000000vars a, b, c; [ a^2*b, a*b^3, b^5, b^3*c ]; frobby-0.9.5/test/commonIdeals/t20.assoprimes000066400000000000000000000000421401527164200211130ustar00rootroot00000000000000vars a, b, c; [ a*b, b*c, b ]; frobby-0.9.5/test/commonIdeals/t20.dim000066400000000000000000000000021401527164200174730ustar00rootroot000000000000002 frobby-0.9.5/test/commonIdeals/t20.euler000066400000000000000000000000031401527164200200370ustar00rootroot00000000000000-1 frobby-0.9.5/test/commonIdeals/t20.intersection000066400000000000000000000000561401527164200214410ustar00rootroot00000000000000vars a, b, c; [ a^2*b^3*c^4, a*b^5, b^7 ]; frobby-0.9.5/test/commonIdeals/t20.irrdecom000066400000000000000000000001601401527164200205330ustar00rootroot00000000000000vars a, b, c; [ a^2, b^5 ]; vars a, b, c; [ a, b^7 ]; vars a, b, c; [ b^5, c^4 ]; vars a, b, c; [ b^3 ]; frobby-0.9.5/test/commonIdeals/t20.irrdecom_ideal000066400000000000000000000000641401527164200216740ustar00rootroot00000000000000vars a, b, c; [ a^2*b^5, a*b^7, b^5*c^4, b^3 ]; frobby-0.9.5/test/commonIdeals/t20.maxstandard000066400000000000000000000000231401527164200212330ustar00rootroot00000000000000vars a, b, c; [ ]; frobby-0.9.5/test/commonIdeals/t20.minimize000066400000000000000000000000561401527164200205540ustar00rootroot00000000000000vars a, b, c; [ a^2*b^3*c^4, a*b^5, b^7 ]; frobby-0.9.5/test/commonIdeals/t20.multi000066400000000000000000000001231401527164200200600ustar00rootroot00000000000000R = QQ[a, b, c]; p = a^2*b^5*c^4 + -a^2*b^3*c^4 + a*b^7 + -a*b^5 + -b^7 + 1; frobby-0.9.5/test/commonIdeals/t20.opt_irr000066400000000000000000000000361401527164200204070ustar00rootroot00000000000000vars a, b, c; [ b^5*c^4 ]; 9 frobby-0.9.5/test/commonIdeals/t20.opt_irr_min000066400000000000000000000000321401527164200212460ustar00rootroot00000000000000vars a, b, c; [ b^3 ]; 3 frobby-0.9.5/test/commonIdeals/t20.opt_std000066400000000000000000000000401401527164200204000ustar00rootroot00000000000000vars a, b, c; [ ]; no solution. frobby-0.9.5/test/commonIdeals/t20.opt_std_min000066400000000000000000000000401401527164200212430ustar00rootroot00000000000000vars a, b, c; [ ]; no solution. frobby-0.9.5/test/commonIdeals/t20.primdecom000066400000000000000000000001341401527164200207070ustar00rootroot00000000000000vars a, b, c; [ a^2, a*b^5, b^7 ]; vars a, b, c; [ b^5, c^4 ]; vars a, b, c; [ b^3 ]; frobby-0.9.5/test/commonIdeals/t20.radical000066400000000000000000000000261401527164200203270ustar00rootroot00000000000000vars a, b, c; [ b ]; frobby-0.9.5/test/commonIdeals/t20.test000066400000000000000000000000561401527164200177120ustar00rootroot00000000000000vars a, b, c; [ a^2*b^3*c^4, a*b^5, b^7 ]; frobby-0.9.5/test/commonIdeals/t20.uni000066400000000000000000000000721401527164200175240ustar00rootroot00000000000000R = QQ[t]; p = t^11 + -t^9 + t^8 + -t^7 + -t^6 + 1; frobby-0.9.5/test/commonIdeals/t21.alexdual000066400000000000000000000000561401527164200205330ustar00rootroot00000000000000vars x, y, z; [ x^3*y, x^2*y^2, x*y^3*z ]; frobby-0.9.5/test/commonIdeals/t21.assoprimes000066400000000000000000000000401401527164200211120ustar00rootroot00000000000000vars x, y, z; [ x*y*z, x*y ]; frobby-0.9.5/test/commonIdeals/t21.dim000066400000000000000000000000021401527164200174740ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t21.euler000066400000000000000000000000021401527164200200370ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t21.intersection000066400000000000000000000000661401527164200214430ustar00rootroot00000000000000vars x, y, z; [ x^3, x^2*y, x^2*z, x*y^2, y^3 ]; frobby-0.9.5/test/commonIdeals/t21.irrdecom000066400000000000000000000001321401527164200205330ustar00rootroot00000000000000vars x, y, z; [ x^3, y, z ]; vars x, y, z; [ x^2, y^2 ]; vars x, y, z; [ x, y^3 ]; frobby-0.9.5/test/commonIdeals/t21.irrdecom_ideal000066400000000000000000000000561401527164200216760ustar00rootroot00000000000000vars x, y, z; [ x^3*y*z, x^2*y^2, x*y^3 ]; frobby-0.9.5/test/commonIdeals/t21.maxstandard000066400000000000000000000000301401527164200212320ustar00rootroot00000000000000vars x, y, z; [ x^2 ]; frobby-0.9.5/test/commonIdeals/t21.minimize000066400000000000000000000000661401527164200205560ustar00rootroot00000000000000vars x, y, z; [ x^3, x^2*y, x^2*z, x*y^2, y^3 ]; frobby-0.9.5/test/commonIdeals/t21.multi000066400000000000000000000002041401527164200200610ustar00rootroot00000000000000R = QQ[x, y, z]; p = -x^3*y*z + x^3*y + x^3*z + -x^3 + x^2*y^2 + x^2*y*z + -x^2*y + -x^2*z + x*y^3 + -x*y^2 + -y^3 + 1; frobby-0.9.5/test/commonIdeals/t21.opt_irr000066400000000000000000000000361401527164200204100ustar00rootroot00000000000000vars x, y, z; [ x^3*y*z ]; 5 frobby-0.9.5/test/commonIdeals/t21.opt_irr_min000066400000000000000000000000461401527164200212540ustar00rootroot00000000000000vars x, y, z; [ x^2*y^2, x*y^3 ]; 4 frobby-0.9.5/test/commonIdeals/t21.opt_std000066400000000000000000000000321401527164200204020ustar00rootroot00000000000000vars x, y, z; [ x^2 ]; 2 frobby-0.9.5/test/commonIdeals/t21.opt_std_min000066400000000000000000000000321401527164200212450ustar00rootroot00000000000000vars x, y, z; [ x^2 ]; 2 frobby-0.9.5/test/commonIdeals/t21.primdecom000066400000000000000000000001061401527164200207070ustar00rootroot00000000000000vars x, y, z; [ x^3, y, z ]; vars x, y, z; [ x^2, x*y^2, y^3 ]; frobby-0.9.5/test/commonIdeals/t21.radical000066400000000000000000000000321401527164200203250ustar00rootroot00000000000000vars x, y, z; [ x, y ]; frobby-0.9.5/test/commonIdeals/t21.test000066400000000000000000000000661401527164200177140ustar00rootroot00000000000000vars x, y, z; [ x^3, x^2*y, x*y^2, y^3, x^2*z ]; frobby-0.9.5/test/commonIdeals/t21.uni000066400000000000000000000000561401527164200175270ustar00rootroot00000000000000R = QQ[t]; p = -t^5 + 5*t^4 + -5*t^3 + 1; frobby-0.9.5/test/commonIdeals/t22.alexdual000066400000000000000000000000361401527164200205320ustar00rootroot00000000000000vars a, b, c; [ a*b, a*c ]; frobby-0.9.5/test/commonIdeals/t22.assoprimes000066400000000000000000000000361401527164200211200ustar00rootroot00000000000000vars a, b, c; [ a*b, a*c ]; frobby-0.9.5/test/commonIdeals/t22.dim000066400000000000000000000000021401527164200174750ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t22.euler000066400000000000000000000000021401527164200200400ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t22.intersection000066400000000000000000000000361401527164200214410ustar00rootroot00000000000000vars a, b, c; [ a^2, b*c ]; frobby-0.9.5/test/commonIdeals/t22.irrdecom000066400000000000000000000000701401527164200205350ustar00rootroot00000000000000vars a, b, c; [ a^2, b ]; vars a, b, c; [ a^2, c ]; frobby-0.9.5/test/commonIdeals/t22.irrdecom_ideal000066400000000000000000000000421401527164200216720ustar00rootroot00000000000000vars a, b, c; [ a^2*b, a^2*c ]; frobby-0.9.5/test/commonIdeals/t22.maxstandard000066400000000000000000000000231401527164200212350ustar00rootroot00000000000000vars a, b, c; [ ]; frobby-0.9.5/test/commonIdeals/t22.minimize000066400000000000000000000000361401527164200205540ustar00rootroot00000000000000vars a, b, c; [ a^2, b*c ]; frobby-0.9.5/test/commonIdeals/t22.multi000066400000000000000000000000641401527164200200660ustar00rootroot00000000000000R = QQ[a, b, c]; p = a^2*b*c + -a^2 + -b*c + 1; frobby-0.9.5/test/commonIdeals/t22.opt_irr000066400000000000000000000000441401527164200204100ustar00rootroot00000000000000vars a, b, c; [ a^2*b, a^2*c ]; 3 frobby-0.9.5/test/commonIdeals/t22.opt_irr_min000066400000000000000000000000441401527164200212530ustar00rootroot00000000000000vars a, b, c; [ a^2*b, a^2*c ]; 3 frobby-0.9.5/test/commonIdeals/t22.opt_std000066400000000000000000000000401401527164200204020ustar00rootroot00000000000000vars a, b, c; [ ]; no solution. frobby-0.9.5/test/commonIdeals/t22.opt_std_min000066400000000000000000000000401401527164200212450ustar00rootroot00000000000000vars a, b, c; [ ]; no solution. frobby-0.9.5/test/commonIdeals/t22.primdecom000066400000000000000000000000701401527164200207100ustar00rootroot00000000000000vars a, b, c; [ a^2, b ]; vars a, b, c; [ a^2, c ]; frobby-0.9.5/test/commonIdeals/t22.radical000066400000000000000000000000341401527164200203300ustar00rootroot00000000000000vars a, b, c; [ a, b*c ]; frobby-0.9.5/test/commonIdeals/t22.test000066400000000000000000000000361401527164200177120ustar00rootroot00000000000000vars a, b, c; [ a^2, b*c ]; frobby-0.9.5/test/commonIdeals/t22.uni000066400000000000000000000000441401527164200175250ustar00rootroot00000000000000R = QQ[t]; p = t^4 + -2*t^2 + 1; frobby-0.9.5/test/commonIdeals/t23.alexdual000066400000000000000000000000641401527164200205340ustar00rootroot00000000000000vars a, b, c; [ a^3*b, a^3*c, a*b^4, b^4*c^3 ]; frobby-0.9.5/test/commonIdeals/t23.assoprimes000066400000000000000000000000441401527164200211200ustar00rootroot00000000000000vars a, b, c; [ a*b, a*c, b*c ]; frobby-0.9.5/test/commonIdeals/t23.dim000066400000000000000000000000021401527164200174760ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t23.euler000066400000000000000000000000021401527164200200410ustar00rootroot000000000000002 frobby-0.9.5/test/commonIdeals/t23.intersection000066400000000000000000000000561401527164200214440ustar00rootroot00000000000000vars a, b, c; [ a^3*c^4, a*b^2, b^5*c^6 ]; frobby-0.9.5/test/commonIdeals/t23.irrdecom000066400000000000000000000001641401527164200205420ustar00rootroot00000000000000vars a, b, c; [ a^3, b^2 ]; vars a, b, c; [ a, b^5 ]; vars a, b, c; [ a, c^6 ]; vars a, b, c; [ b^2, c^4 ]; frobby-0.9.5/test/commonIdeals/t23.irrdecom_ideal000066400000000000000000000000661401527164200217010ustar00rootroot00000000000000vars a, b, c; [ a^3*b^2, a*b^5, a*c^6, b^2*c^4 ]; frobby-0.9.5/test/commonIdeals/t23.maxstandard000066400000000000000000000000231401527164200212360ustar00rootroot00000000000000vars a, b, c; [ ]; frobby-0.9.5/test/commonIdeals/t23.minimize000066400000000000000000000000561401527164200205570ustar00rootroot00000000000000vars a, b, c; [ a^3*c^4, a*b^2, b^5*c^6 ]; frobby-0.9.5/test/commonIdeals/t23.multi000066400000000000000000000001271401527164200200670ustar00rootroot00000000000000R = QQ[a, b, c]; p = a^3*b^2*c^4 + -a^3*c^4 + a*b^5*c^6 + -a*b^2 + -b^5*c^6 + 1; frobby-0.9.5/test/commonIdeals/t23.opt_irr000066400000000000000000000000341401527164200204100ustar00rootroot00000000000000vars a, b, c; [ a*c^6 ]; 7 frobby-0.9.5/test/commonIdeals/t23.opt_irr_min000066400000000000000000000000361401527164200212550ustar00rootroot00000000000000vars a, b, c; [ a^3*b^2 ]; 5 frobby-0.9.5/test/commonIdeals/t23.opt_std000066400000000000000000000000401401527164200204030ustar00rootroot00000000000000vars a, b, c; [ ]; no solution. frobby-0.9.5/test/commonIdeals/t23.opt_std_min000066400000000000000000000000401401527164200212460ustar00rootroot00000000000000vars a, b, c; [ ]; no solution. frobby-0.9.5/test/commonIdeals/t23.primdecom000066400000000000000000000001401401527164200207070ustar00rootroot00000000000000vars a, b, c; [ a^3, a*b^2, b^5 ]; vars a, b, c; [ a, c^6 ]; vars a, b, c; [ b^2, c^4 ]; frobby-0.9.5/test/commonIdeals/t23.radical000066400000000000000000000000441401527164200203320ustar00rootroot00000000000000vars a, b, c; [ a*b, a*c, b*c ]; frobby-0.9.5/test/commonIdeals/t23.test000066400000000000000000000000561401527164200177150ustar00rootroot00000000000000vars a, b, c; [ a*b^2, a^3*c^4, b^5*c^6 ]; frobby-0.9.5/test/commonIdeals/t23.uni000066400000000000000000000000731401527164200175300ustar00rootroot00000000000000R = QQ[t]; p = t^12 + -t^11 + t^9 + -t^7 + -t^3 + 1; frobby-0.9.5/test/commonIdeals/t24.alexdual000066400000000000000000000000651401527164200205360ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); frobby-0.9.5/test/commonIdeals/t24.alexdual_point000066400000000000000000000000021401527164200217360ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t24.assoprimes000066400000000000000000000000651401527164200211240ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); frobby-0.9.5/test/commonIdeals/t24.dim000066400000000000000000000000031401527164200175000ustar00rootroot00000000000000-1 frobby-0.9.5/test/commonIdeals/t24.euler000066400000000000000000000000031401527164200200430ustar00rootroot00000000000000-1 frobby-0.9.5/test/commonIdeals/t24.intersection000066400000000000000000000000701401527164200214410ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/commonIdeals/t24.irrdecom000066400000000000000000000000351401527164200205400ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; frobby-0.9.5/test/commonIdeals/t24.irrdecom_ideal000066400000000000000000000000651401527164200217010ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); frobby-0.9.5/test/commonIdeals/t24.maxstandard000066400000000000000000000000651401527164200212450ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); frobby-0.9.5/test/commonIdeals/t24.minimize000066400000000000000000000000701401527164200205540ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/commonIdeals/t24.multi000066400000000000000000000000451401527164200200670ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; p = 0; frobby-0.9.5/test/commonIdeals/t24.opt_irr000066400000000000000000000001021401527164200204050ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t24.opt_irr_min000066400000000000000000000001021401527164200212500ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t24.opt_std000066400000000000000000000001021401527164200204030ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t24.opt_std_min000066400000000000000000000001021401527164200212460ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t24.primdecom000066400000000000000000000000351401527164200207130ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; frobby-0.9.5/test/commonIdeals/t24.radical000066400000000000000000000000701401527164200203320ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/commonIdeals/t24.test000066400000000000000000000001221401527164200177100ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal( a^2, b, c*d*e, 1_R, e, f ); frobby-0.9.5/test/commonIdeals/t24.uni000066400000000000000000000000231401527164200175240ustar00rootroot00000000000000R = QQ[t]; p = 0; frobby-0.9.5/test/commonIdeals/t25.alexdual000066400000000000000000000001041401527164200205310ustar00rootroot00000000000000vars a, b, c; [ a^3, a^2*c, a*c^2, b^3, b^2*c, b*c^2, c^3 ]; frobby-0.9.5/test/commonIdeals/t25.assoprimes000066400000000000000000000000521401527164200211210ustar00rootroot00000000000000vars a, b, c; [ a*c, a, b*c, b, c ]; frobby-0.9.5/test/commonIdeals/t25.dim000066400000000000000000000000021401527164200175000ustar00rootroot000000000000002 frobby-0.9.5/test/commonIdeals/t25.euler000066400000000000000000000000031401527164200200440ustar00rootroot00000000000000-1 frobby-0.9.5/test/commonIdeals/t25.intersection000066400000000000000000000000661401527164200214470ustar00rootroot00000000000000vars a, b, c; [ a^3*b^3*c, a^2*b^2*c^2, a*b*c^3 ]; frobby-0.9.5/test/commonIdeals/t25.irrdecom000066400000000000000000000002721401527164200205440ustar00rootroot00000000000000vars a, b, c; [ a^3, c^2 ]; vars a, b, c; [ a^2, c^3 ]; vars a, b, c; [ a ]; vars a, b, c; [ b^3, c^2 ]; vars a, b, c; [ b^2, c^3 ]; vars a, b, c; [ b ]; vars a, b, c; [ c ]; frobby-0.9.5/test/commonIdeals/t25.irrdecom_ideal000066400000000000000000000001061401527164200216760ustar00rootroot00000000000000vars a, b, c; [ a^3*c^2, a^2*c^3, a, b^3*c^2, b^2*c^3, b, c ]; frobby-0.9.5/test/commonIdeals/t25.maxstandard000066400000000000000000000000231401527164200212400ustar00rootroot00000000000000vars a, b, c; [ ]; frobby-0.9.5/test/commonIdeals/t25.minimize000066400000000000000000000000661401527164200205620ustar00rootroot00000000000000vars a, b, c; [ a^3*b^3*c, a^2*b^2*c^2, a*b*c^3 ]; frobby-0.9.5/test/commonIdeals/t25.multi000066400000000000000000000001411401527164200200650ustar00rootroot00000000000000R = QQ[a, b, c]; p = a^3*b^3*c^2 + -a^3*b^3*c + a^2*b^2*c^3 + -a^2*b^2*c^2 + -a*b*c^3 + 1; frobby-0.9.5/test/commonIdeals/t25.opt_irr000066400000000000000000000000741401527164200204160ustar00rootroot00000000000000vars a, b, c; [ a^3*c^2, a^2*c^3, b^3*c^2, b^2*c^3 ]; 5 frobby-0.9.5/test/commonIdeals/t25.opt_irr_min000066400000000000000000000000401401527164200212520ustar00rootroot00000000000000vars a, b, c; [ a, b, c ]; 1 frobby-0.9.5/test/commonIdeals/t25.opt_std000066400000000000000000000000401401527164200204050ustar00rootroot00000000000000vars a, b, c; [ ]; no solution. frobby-0.9.5/test/commonIdeals/t25.opt_std_min000066400000000000000000000000401401527164200212500ustar00rootroot00000000000000vars a, b, c; [ ]; no solution. frobby-0.9.5/test/commonIdeals/t25.primdecom000066400000000000000000000002221401527164200207120ustar00rootroot00000000000000vars a, b, c; [ a^3, a^2*c^2, c^3 ]; vars a, b, c; [ a ]; vars a, b, c; [ b^3, b^2*c^2, c^3 ]; vars a, b, c; [ b ]; vars a, b, c; [ c ]; frobby-0.9.5/test/commonIdeals/t25.radical000066400000000000000000000000321401527164200203310ustar00rootroot00000000000000vars a, b, c; [ a*b*c ]; frobby-0.9.5/test/commonIdeals/t25.test000066400000000000000000000000661401527164200177200ustar00rootroot00000000000000vars a, b, c; [ a^3*b^3*c, a*b*c^3, a^2*b^2*c^2 ]; frobby-0.9.5/test/commonIdeals/t25.uni000066400000000000000000000000521401527164200175270ustar00rootroot00000000000000R = QQ[t]; p = t^8 + -t^6 + -t^5 + 1; frobby-0.9.5/test/commonIdeals/t26.alexdual000066400000000000000000000000741401527164200205400ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a*c, b*d, e ); frobby-0.9.5/test/commonIdeals/t26.assoprimes000066400000000000000000000000741401527164200211260ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a*c, b*d, e ); frobby-0.9.5/test/commonIdeals/t26.dim000066400000000000000000000000021401527164200175010ustar00rootroot000000000000004 frobby-0.9.5/test/commonIdeals/t26.euler000066400000000000000000000000031401527164200200450ustar00rootroot00000000000000-1 frobby-0.9.5/test/commonIdeals/t26.intersection000066400000000000000000000001141401527164200214420ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a*b*e, a*d*e, b*c*e, c*d*e ); frobby-0.9.5/test/commonIdeals/t26.irrdecom000066400000000000000000000001521401527164200205420ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a, c ); I = monomialIdeal( b, d ); I = monomialIdeal( e ); frobby-0.9.5/test/commonIdeals/t26.irrdecom_ideal000066400000000000000000000000741401527164200217030ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a*c, b*d, e ); frobby-0.9.5/test/commonIdeals/t26.maxstandard000066400000000000000000000000571401527164200212500ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal(0_R); frobby-0.9.5/test/commonIdeals/t26.minimize000066400000000000000000000001141401527164200205550ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a*b*e, a*d*e, b*c*e, c*d*e ); frobby-0.9.5/test/commonIdeals/t26.multi000066400000000000000000000002011401527164200200630ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; p = -a*b*c*d*e + a*b*c*e + a*b*d*e + -a*b*e + a*c*d*e + -a*d*e + b*c*d*e + -b*c*e + -c*d*e + 1; frobby-0.9.5/test/commonIdeals/t26.opt_irr000066400000000000000000000000721401527164200204150ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a*c, b*d ); 2 frobby-0.9.5/test/commonIdeals/t26.opt_irr_min000066400000000000000000000000621401527164200212570ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( e ); 1 frobby-0.9.5/test/commonIdeals/t26.opt_std000066400000000000000000000000741401527164200204150ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t26.opt_std_min000066400000000000000000000000741401527164200212600ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t26.primdecom000066400000000000000000000001521401527164200207150ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a, c ); I = monomialIdeal( b, d ); I = monomialIdeal( e ); frobby-0.9.5/test/commonIdeals/t26.radical000066400000000000000000000001141401527164200203330ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a*b*e, a*d*e, b*c*e, c*d*e ); frobby-0.9.5/test/commonIdeals/t26.test000066400000000000000000000001231401527164200177130ustar00rootroot00000000000000R = QQ[a, b, c, d, e]; I = monomialIdeal( a*b*e, b*c*e, c*d*e, a*d*e ); frobby-0.9.5/test/commonIdeals/t26.uni000066400000000000000000000000561401527164200175340ustar00rootroot00000000000000R = QQ[t]; p = -t^5 + 4*t^4 + -4*t^3 + 1; frobby-0.9.5/test/commonIdeals/t3.alexdual000066400000000000000000000001611401527164200204500ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a^2*b^2*c*d, a^2*b*c*d^2, a^2*c^2, a*b*c^2*d^2, b^2*c^2, b^2*d^2 ); frobby-0.9.5/test/commonIdeals/t3.assoprimes000066400000000000000000000001051401527164200210340ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a*b*c*d, a*c, b*c, b*d ); frobby-0.9.5/test/commonIdeals/t3.dim000066400000000000000000000000021401527164200174140ustar00rootroot000000000000002 frobby-0.9.5/test/commonIdeals/t3.euler000066400000000000000000000000021401527164200177570ustar00rootroot000000000000000 frobby-0.9.5/test/commonIdeals/t3.intersection000066400000000000000000000001711401527164200213600ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a^2*b, a*b^2, a*b*c, a*b*d, a*c*d, b^2*c, b*c^2, b*c*d, c^2*d, c*d^2 ); frobby-0.9.5/test/commonIdeals/t3.irrdecom000066400000000000000000000003461401527164200204620ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a^2, b^2, c, d ); I = monomialIdeal( a, b^2, c^2, d ); I = monomialIdeal( a, b, c^2, d^2 ); I = monomialIdeal( a, c ); I = monomialIdeal( b, c ); I = monomialIdeal( b, d ); frobby-0.9.5/test/commonIdeals/t3.irrdecom_ideal000066400000000000000000000001451401527164200216150ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a^2*b^2*c*d, a*b^2*c^2*d, a*b*c^2*d^2, a*c, b*c, b*d ); frobby-0.9.5/test/commonIdeals/t3.maxstandard000066400000000000000000000000731401527164200211610ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a*b, b*c, c*d ); frobby-0.9.5/test/commonIdeals/t3.minimize000066400000000000000000000001711401527164200204730ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a^2*b, a*b^2, a*b*c, a*b*d, a*c*d, b^2*c, b*c^2, b*c*d, c^2*d, c*d^2 ); frobby-0.9.5/test/commonIdeals/t3.multi000066400000000000000000000007351401527164200200120ustar00rootroot00000000000000R = QQ[a, b, c, d]; p = a^2*b^2*c*d + -a^2*b^2*c + -a^2*b^2*d + a^2*b^2 + -a^2*b*c*d + a^2*b*c + a^2*b*d + -a^2*b + a*b^2*c^2*d + -a*b^2*c^2 + -2*a*b^2*c*d + 2*a*b^2*c + a*b^2*d + -a*b^2 + a*b*c^2*d^2 + -2*a*b*c^2*d + a*b*c^2 + -a*b*c*d^2 + 3*a*b*c*d + -a*b*c + -a*b*d + -a*c^2*d^2 + a*c^2*d + a*c*d^2 + -a*c*d + -b^2*c^2*d + b^2*c^2 + b^2*c*d + -b^2*c + -b*c^2*d^2 + 2*b*c^2*d + -b*c^2 + b*c*d^2 + -b*c*d + c^2*d^2 + -c^2*d + -c*d^2 + 1; frobby-0.9.5/test/commonIdeals/t3.opt_irr000066400000000000000000000001251401527164200203270ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a^2*b^2*c*d, a*b^2*c^2*d, a*b*c^2*d^2 ); 6 frobby-0.9.5/test/commonIdeals/t3.opt_irr_min000066400000000000000000000000751401527164200211760ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a*c, b*c, b*d ); 2 frobby-0.9.5/test/commonIdeals/t3.opt_std000066400000000000000000000000751401527164200203310ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a*b, b*c, c*d ); 2 frobby-0.9.5/test/commonIdeals/t3.opt_std_min000066400000000000000000000000751401527164200211740ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a*b, b*c, c*d ); 2 frobby-0.9.5/test/commonIdeals/t3.primdecom000066400000000000000000000002521401527164200206310ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a^2, a*c, a*d, b^2, b*d, c^2, d^2 ); I = monomialIdeal( a, c ); I = monomialIdeal( b, c ); I = monomialIdeal( b, d ); frobby-0.9.5/test/commonIdeals/t3.radical000066400000000000000000000000731401527164200202520ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a*b, b*c, c*d ); frobby-0.9.5/test/commonIdeals/t3.test000066400000000000000000000001711401527164200176310ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( a^2*b, a*b*c, a*c*d, a*b^2, a*b*d, b^2*c, b*c*d, b*c^2, c^2*d, c*d^2 ); frobby-0.9.5/test/commonIdeals/t3.uni000066400000000000000000000000741401527164200174470ustar00rootroot00000000000000R = QQ[t]; p = 3*t^6 + -12*t^5 + 18*t^4 + -10*t^3 + 1; frobby-0.9.5/test/commonIdeals/t4.alexdual000066400000000000000000000001761401527164200204570ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^4*y^4*z, x^4*y^2*z^2, x^4*z^3, x^3*y^5*z, x^2*z^5, x*y*z^5, y^5*z^4, y^3*z^5 ); frobby-0.9.5/test/commonIdeals/t4.assoprimes000066400000000000000000000000721401527164200210400ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x*y*z, x*z, y*z ); frobby-0.9.5/test/commonIdeals/t4.dim000066400000000000000000000000021401527164200174150ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t4.euler000066400000000000000000000000021401527164200177600ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t4.intersection000066400000000000000000000001461401527164200213630ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^4*y^3, x^3*y^5, x^2*z^2, x*y*z, y^4*z^3, y^2*z^4, z^5 ); frobby-0.9.5/test/commonIdeals/t4.irrdecom000066400000000000000000000004411401527164200204570ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^4, y^5, z ); I = monomialIdeal( x^3, z ); I = monomialIdeal( x^2, y, z^5 ); I = monomialIdeal( x, y^4, z^4 ); I = monomialIdeal( x, y^2, z^5 ); I = monomialIdeal( x, z^3 ); I = monomialIdeal( y^3, z ); I = monomialIdeal( y, z^2 ); frobby-0.9.5/test/commonIdeals/t4.irrdecom_ideal000066400000000000000000000001661401527164200216210ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^4*y^5*z, x^3*z, x^2*y*z^5, x*y^4*z^4, x*y^2*z^5, x*z^3, y^3*z, y*z^2 ); frobby-0.9.5/test/commonIdeals/t4.maxstandard000066400000000000000000000001121401527164200211540ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*y^4, x*z^4, y^3*z^3, y*z^4 ); frobby-0.9.5/test/commonIdeals/t4.minimize000066400000000000000000000001461401527164200204760ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^4*y^3, x^3*y^5, x^2*z^2, x*y*z, y^4*z^3, y^2*z^4, z^5 ); frobby-0.9.5/test/commonIdeals/t4.multi000066400000000000000000000004271401527164200200110ustar00rootroot00000000000000R = QQ[x, y, z]; p = -x^4*y^5*z + x^4*y^5 + x^4*y^3*z + -x^4*y^3 + x^3*y^5*z + -x^3*y^5 + -x^2*y*z^5 + x^2*y*z^2 + x^2*z^5 + -x^2*z^2 + -x*y^4*z^4 + x*y^4*z^3 + -x*y^2*z^5 + x*y^2*z^4 + x*y*z^5 + -x*y*z + y^4*z^4 + -y^4*z^3 + y^2*z^5 + -y^2*z^4 + -z^5 + 1; frobby-0.9.5/test/commonIdeals/t4.opt_irr000066400000000000000000000000651401527164200203330ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^4*y^5*z ); 10 frobby-0.9.5/test/commonIdeals/t4.opt_irr_min000066400000000000000000000000601401527164200211710ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( y*z^2 ); 3 frobby-0.9.5/test/commonIdeals/t4.opt_std000066400000000000000000000000621401527164200203260ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*y^4 ); 7 frobby-0.9.5/test/commonIdeals/t4.opt_std_min000066400000000000000000000000701401527164200211700ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x*z^4, y*z^4 ); 5 frobby-0.9.5/test/commonIdeals/t4.primdecom000066400000000000000000000003221401527164200206300ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^4, y^5, z ); I = monomialIdeal( x^3, z ); I = monomialIdeal( x^2, x*y, y^4, y^2*z^4, z^5 ); I = monomialIdeal( x, z^3 ); I = monomialIdeal( y^3, y*z, z^2 ); frobby-0.9.5/test/commonIdeals/t4.radical000066400000000000000000000000601401527164200202470ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x*y, z ); frobby-0.9.5/test/commonIdeals/t4.test000066400000000000000000000001461401527164200176340ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( z^5, x^2*z^2, x^4*y^3, x^3*y^5, y^4*z^3, y^2*z^4, x*y*z ); frobby-0.9.5/test/commonIdeals/t4.uni000066400000000000000000000001041401527164200174420ustar00rootroot00000000000000R = QQ[t]; p = -t^10 + t^9 + 2*t^7 + -t^6 + -t^4 + -t^3 + 1; frobby-0.9.5/test/commonIdeals/t5.alexdual000066400000000000000000000001361401527164200204540ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3, x^2*y^2, x^2*z^2, x*y*z, y^3, y^2*z^2, z^3 ); frobby-0.9.5/test/commonIdeals/t5.assoprimes000066400000000000000000000001141401527164200210360ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x*y*z, x*y, x*z, x, y*z, y, z ); frobby-0.9.5/test/commonIdeals/t5.dim000066400000000000000000000000021401527164200174160ustar00rootroot000000000000002 frobby-0.9.5/test/commonIdeals/t5.euler000066400000000000000000000000031401527164200177620ustar00rootroot00000000000000-1 frobby-0.9.5/test/commonIdeals/t5.intersection000066400000000000000000000001561401527164200213650ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*y^2*z, x^3*y*z^2, x^2*y^3*z, x^2*y*z^3, x*y^3*z^2, x*y^2*z^3 ); frobby-0.9.5/test/commonIdeals/t5.irrdecom000066400000000000000000000003461401527164200204640ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3, y^3, z^3 ); I = monomialIdeal( x^2, y^2 ); I = monomialIdeal( x^2, z^2 ); I = monomialIdeal( x ); I = monomialIdeal( y^2, z^2 ); I = monomialIdeal( y ); I = monomialIdeal( z ); frobby-0.9.5/test/commonIdeals/t5.irrdecom_ideal000066400000000000000000000001361401527164200216170ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*y^3*z^3, x^2*y^2, x^2*z^2, x, y^2*z^2, y, z ); frobby-0.9.5/test/commonIdeals/t5.maxstandard000066400000000000000000000000641401527164200211630ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^2*y^2*z^2 ); frobby-0.9.5/test/commonIdeals/t5.minimize000066400000000000000000000001561401527164200205000ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*y^2*z, x^3*y*z^2, x^2*y^3*z, x^2*y*z^3, x*y^3*z^2, x*y^2*z^3 ); frobby-0.9.5/test/commonIdeals/t5.multi000066400000000000000000000003211401527164200200030ustar00rootroot00000000000000R = QQ[x, y, z]; p = -x^3*y^3*z^3 + x^3*y^3*z + x^3*y^2*z^2 + -x^3*y^2*z + x^3*y*z^3 + -x^3*y*z^2 + x^2*y^3*z^2 + -x^2*y^3*z + x^2*y^2*z^3 + -x^2*y*z^3 + x*y^3*z^3 + -x*y^3*z^2 + -x*y^2*z^3 + 1; frobby-0.9.5/test/commonIdeals/t5.opt_irr000066400000000000000000000000661401527164200203350ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*y^3*z^3 ); 9 frobby-0.9.5/test/commonIdeals/t5.opt_irr_min000066400000000000000000000000641401527164200211760ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x, y, z ); 1 frobby-0.9.5/test/commonIdeals/t5.opt_std000066400000000000000000000000661401527164200203330ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^2*y^2*z^2 ); 6 frobby-0.9.5/test/commonIdeals/t5.opt_std_min000066400000000000000000000000661401527164200211760ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^2*y^2*z^2 ); 6 frobby-0.9.5/test/commonIdeals/t5.primdecom000066400000000000000000000003461401527164200206370ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3, y^3, z^3 ); I = monomialIdeal( x^2, y^2 ); I = monomialIdeal( x^2, z^2 ); I = monomialIdeal( x ); I = monomialIdeal( y^2, z^2 ); I = monomialIdeal( y ); I = monomialIdeal( z ); frobby-0.9.5/test/commonIdeals/t5.radical000066400000000000000000000000561401527164200202550ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x*y*z ); frobby-0.9.5/test/commonIdeals/t5.test000066400000000000000000000001561401527164200176360ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x*y^2*z^3, x*y^3*z^2, x^2*y*z^3, x^2*y^3*z, x^3*y*z^2, x^3*y^2*z ); frobby-0.9.5/test/commonIdeals/t5.uni000066400000000000000000000000561401527164200174510ustar00rootroot00000000000000R = QQ[t]; p = -t^9 + 6*t^7 + -6*t^6 + 1; frobby-0.9.5/test/commonIdeals/t6.alexdual000066400000000000000000000001021401527164200204460ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*y, x*y^3, x*z, y*z ); frobby-0.9.5/test/commonIdeals/t6.assoprimes000066400000000000000000000000701401527164200210400ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x*y, x*z, y*z ); frobby-0.9.5/test/commonIdeals/t6.dim000066400000000000000000000000021401527164200174170ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t6.euler000066400000000000000000000000021401527164200177620ustar00rootroot000000000000002 frobby-0.9.5/test/commonIdeals/t6.intersection000066400000000000000000000001101401527164200213540ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*y^3, x^3*z, x*y*z, y^3*z ); frobby-0.9.5/test/commonIdeals/t6.irrdecom000066400000000000000000000002151401527164200204600ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3, y ); I = monomialIdeal( x^3, z ); I = monomialIdeal( x, y^3 ); I = monomialIdeal( y^3, z ); frobby-0.9.5/test/commonIdeals/t6.irrdecom_ideal000066400000000000000000000001061401527164200216150ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*y, x^3*z, x*y^3, y^3*z ); frobby-0.9.5/test/commonIdeals/t6.maxstandard000066400000000000000000000000511401527164200211600ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal(0_R); frobby-0.9.5/test/commonIdeals/t6.minimize000066400000000000000000000001101401527164200204670ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*y^3, x^3*z, x*y*z, y^3*z ); frobby-0.9.5/test/commonIdeals/t6.multi000066400000000000000000000001461401527164200200110ustar00rootroot00000000000000R = QQ[x, y, z]; p = x^3*y^3*z + -x^3*y^3 + x^3*y*z + -x^3*z + x*y^3*z + -x*y*z + -y^3*z + 1; frobby-0.9.5/test/commonIdeals/t6.opt_irr000066400000000000000000000001101401527164200203240ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*y, x^3*z, x*y^3, y^3*z ); 4 frobby-0.9.5/test/commonIdeals/t6.opt_irr_min000066400000000000000000000001101401527164200211670ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*y, x^3*z, x*y^3, y^3*z ); 4 frobby-0.9.5/test/commonIdeals/t6.opt_std000066400000000000000000000000661401527164200203340ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t6.opt_std_min000066400000000000000000000000661401527164200211770ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t6.primdecom000066400000000000000000000002151401527164200206330ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3, y ); I = monomialIdeal( x^3, z ); I = monomialIdeal( x, y^3 ); I = monomialIdeal( y^3, z ); frobby-0.9.5/test/commonIdeals/t6.radical000066400000000000000000000000701401527164200202520ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x*y, x*z, y*z ); frobby-0.9.5/test/commonIdeals/t6.test000066400000000000000000000001101401527164200176250ustar00rootroot00000000000000R = QQ[x, y, z]; I = monomialIdeal( x^3*z, x*y*z, y^3*z, x^3*y^3 ); frobby-0.9.5/test/commonIdeals/t6.uni000066400000000000000000000000751401527164200174530ustar00rootroot00000000000000R = QQ[t]; p = t^7 + -t^6 + 2*t^5 + -2*t^4 + -t^3 + 1; frobby-0.9.5/test/commonIdeals/t7.alexdual000066400000000000000000000000701401527164200204530ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, a*c, b*c ); frobby-0.9.5/test/commonIdeals/t7.assoprimes000066400000000000000000000000701401527164200210410ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, a*c, b*c ); frobby-0.9.5/test/commonIdeals/t7.dim000066400000000000000000000000021401527164200174200ustar00rootroot000000000000001 frobby-0.9.5/test/commonIdeals/t7.euler000066400000000000000000000000021401527164200177630ustar00rootroot000000000000002 frobby-0.9.5/test/commonIdeals/t7.intersection000066400000000000000000000001041401527164200213600ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^2*b^3, a^2*c^4, b^3*c^4 ); frobby-0.9.5/test/commonIdeals/t7.irrdecom000066400000000000000000000001641401527164200204640ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^2, b^3 ); I = monomialIdeal( a^2, c^4 ); I = monomialIdeal( b^3, c^4 ); frobby-0.9.5/test/commonIdeals/t7.irrdecom_ideal000066400000000000000000000001041401527164200216140ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^2*b^3, a^2*c^4, b^3*c^4 ); frobby-0.9.5/test/commonIdeals/t7.maxstandard000066400000000000000000000000511401527164200211610ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal(0_R); frobby-0.9.5/test/commonIdeals/t7.minimize000066400000000000000000000001041401527164200204730ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^2*b^3, a^2*c^4, b^3*c^4 ); frobby-0.9.5/test/commonIdeals/t7.multi000066400000000000000000000001161401527164200200070ustar00rootroot00000000000000R = QQ[a, b, c]; p = 2*a^2*b^3*c^4 + -a^2*b^3 + -a^2*c^4 + -b^3*c^4 + 1; frobby-0.9.5/test/commonIdeals/t7.opt_irr000066400000000000000000000000621401527164200203330ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( b^3*c^4 ); 7 frobby-0.9.5/test/commonIdeals/t7.opt_irr_min000066400000000000000000000000621401527164200211760ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^2*b^3 ); 5 frobby-0.9.5/test/commonIdeals/t7.opt_std000066400000000000000000000000661401527164200203350ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t7.opt_std_min000066400000000000000000000000661401527164200212000ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/commonIdeals/t7.primdecom000066400000000000000000000001641401527164200206370ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^2, b^3 ); I = monomialIdeal( a^2, c^4 ); I = monomialIdeal( b^3, c^4 ); frobby-0.9.5/test/commonIdeals/t7.radical000066400000000000000000000000701401527164200202530ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, a*c, b*c ); frobby-0.9.5/test/commonIdeals/t7.test000066400000000000000000000001041401527164200176310ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a^2*b^3, b^3*c^4, a^2*c^4 ); frobby-0.9.5/test/commonIdeals/t7.uni000066400000000000000000000000641401527164200174520ustar00rootroot00000000000000R = QQ[t]; p = 2*t^9 + -t^7 + -t^6 + -t^5 + 1; frobby-0.9.5/test/frob/000077500000000000000000000000001401527164200147215ustar00rootroot00000000000000frobby-0.9.5/test/frob/bug1.alexdual000066400000000000000000000000621401527164200172760ustar00rootroot000000000000004 5 0 3 2 2 1 0 3 2 1 13 0 2 1 2 10 0 1 2 2 5 frobby-0.9.5/test/frob/bug1.assoprimes000066400000000000000000000000171401527164200176640ustar00rootroot000000000000001 5 0 1 1 1 1 frobby-0.9.5/test/frob/bug1.dim000066400000000000000000000000021401527164200162420ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug1.euler000066400000000000000000000000021401527164200166050ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug1.frobInstance000066400000000000000000000000161401527164200201130ustar00rootroot0000000000000040 29 52 51 7 frobby-0.9.5/test/frob/bug1.frobNumber000066400000000000000000000000031401527164200175730ustar00rootroot0000000000000074 frobby-0.9.5/test/frob/bug1.intersection000066400000000000000000000001641401527164200202100ustar00rootroot0000000000000010 5 0 3 0 0 0 0 2 1 0 0 0 1 0 1 0 0 1 0 0 9 0 0 2 0 0 0 0 1 1 0 0 0 1 0 4 0 0 0 2 0 0 0 0 1 1 0 0 0 0 13 frobby-0.9.5/test/frob/bug1.irrdecom000066400000000000000000000003011401527164200172770ustar00rootroot000000000000004 5 0 3 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 9 4 5 0 2 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 4 4 5 0 1 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 1 4 5 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 13 frobby-0.9.5/test/frob/bug1.irrdecom_ideal000066400000000000000000000000611401527164200204400ustar00rootroot000000000000004 5 0 3 1 1 9 0 2 2 1 4 0 1 1 2 1 0 1 1 1 13 frobby-0.9.5/test/frob/bug1.maxstandard000066400000000000000000000000041401527164200200010ustar00rootroot000000000000000 5 frobby-0.9.5/test/frob/bug1.minimize000066400000000000000000000001641401527164200173230ustar00rootroot0000000000000010 5 0 3 0 0 0 0 2 1 0 0 0 1 0 1 0 0 1 0 0 9 0 0 2 0 0 0 0 1 1 0 0 0 1 0 4 0 0 0 2 0 0 0 0 1 1 0 0 0 0 13 frobby-0.9.5/test/frob/bug1.multi000066400000000000000000000013101401527164200166260ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5]; p = x2^3*x3*x4*x5^9 + -x2^3*x3*x4 + -x2^3*x3*x5^9 + x2^3*x3 + -x2^3*x4*x5^9 + x2^3*x4 + x2^3*x5^9 + -x2^3 + x2^2*x3^2*x4*x5^4 + -x2^2*x3^2*x4 + -x2^2*x3^2*x5^4 + x2^2*x3^2 + -x2^2*x3*x4*x5^4 + x2^2*x3*x4 + x2^2*x3*x5^4 + -x2^2*x3 + x2*x3*x4^2*x5 + -x2*x3*x4^2 + x2*x3*x4*x5^13 + -x2*x3*x4*x5^9 + -x2*x3*x4*x5 + x2*x3*x4 + -x2*x3*x5^13 + x2*x3*x5^9 + -x2*x4^2*x5 + x2*x4^2 + -x2*x4*x5^13 + x2*x4*x5^9 + x2*x4*x5 + -x2*x4 + x2*x5^13 + -x2*x5^9 + -x3^2*x4*x5^4 + x3^2*x4 + x3^2*x5^4 + -x3^2 + -x3*x4^2*x5 + x3*x4^2 + -x3*x4*x5^13 + x3*x4*x5^4 + x3*x4*x5 + -x3*x4 + x3*x5^13 + -x3*x5^4 + x4^2*x5 + -x4^2 + x4*x5^13 + -x4*x5 + -x5^13 + 1; frobby-0.9.5/test/frob/bug1.opt_irr000066400000000000000000000000231401527164200171520ustar00rootroot000000000000001 5 0 1 1 1 13 16 frobby-0.9.5/test/frob/bug1.opt_irr_min000066400000000000000000000000211401527164200200130ustar00rootroot000000000000001 5 0 1 1 2 1 5 frobby-0.9.5/test/frob/bug1.opt_std000066400000000000000000000000211401527164200171460ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug1.opt_std_min000066400000000000000000000000211401527164200200110ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug1.primdecom000066400000000000000000000001641401527164200174610ustar00rootroot0000000000000010 5 0 3 0 0 0 0 2 1 0 0 0 1 0 1 0 0 1 0 0 9 0 0 2 0 0 0 0 1 1 0 0 0 1 0 4 0 0 0 2 0 0 0 0 1 1 0 0 0 0 13 frobby-0.9.5/test/frob/bug1.radical000066400000000000000000000000601401527164200170740ustar00rootroot000000000000004 5 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug1.test000066400000000000000000000002461401527164200164620ustar00rootroot0000000000000010 5 -2 0 1 0 4 -2 1 0 1 0 -2 3 0 0 -1 -1 -1 2 0 -5 -1 0 0 -1 13 -1 0 1 1 -9 -1 1 -1 0 9 -1 2 1 0 -10 0 -2 0 1 1 0 -1 -1 2 -3 frobby-0.9.5/test/frob/bug1.uni000066400000000000000000000002051401527164200162710ustar00rootroot00000000000000R = QQ[t]; p = t^16 + -3*t^15 + 4*t^14 + -3*t^13 + 2*t^11 + -t^10 + t^9 + -2*t^8 + 2*t^6 + -2*t^5 + 5*t^3 + -5*t^2 + 1; frobby-0.9.5/test/frob/bug10.alexdual000066400000000000000000000000501401527164200173530ustar00rootroot000000000000004 4 0 5 2 1 0 4 1 2 0 3 3 1 0 1 3 5 frobby-0.9.5/test/frob/bug10.assoprimes000066400000000000000000000000151401527164200177420ustar00rootroot000000000000001 4 0 1 1 1 frobby-0.9.5/test/frob/bug10.dim000066400000000000000000000000021401527164200163220ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug10.euler000066400000000000000000000000031401527164200166660ustar00rootroot00000000000000-1 frobby-0.9.5/test/frob/bug10.frobInstance000066400000000000000000000000141401527164200201710ustar00rootroot0000000000000034 35 39 41 frobby-0.9.5/test/frob/bug10.frobNumber000066400000000000000000000000041401527164200176540ustar00rootroot00000000000000202 frobby-0.9.5/test/frob/bug10.intersection000066400000000000000000000001031401527164200202610ustar00rootroot000000000000007 4 0 5 0 0 0 3 0 1 0 2 1 0 0 1 1 4 0 0 3 0 0 0 2 4 0 0 0 5 frobby-0.9.5/test/frob/bug10.irrdecom000066400000000000000000000001741401527164200173670ustar00rootroot000000000000003 4 0 5 0 0 0 0 1 0 0 0 0 1 3 4 0 3 0 0 0 0 1 0 0 0 0 5 3 4 0 2 0 0 0 0 3 0 0 0 0 4 3 4 0 1 0 0 0 0 2 0 0 0 0 5 frobby-0.9.5/test/frob/bug10.irrdecom_ideal000066400000000000000000000000501401527164200205160ustar00rootroot000000000000004 4 0 5 1 1 0 3 1 5 0 2 3 4 0 1 2 5 frobby-0.9.5/test/frob/bug10.maxstandard000066400000000000000000000000041401527164200200610ustar00rootroot000000000000000 4 frobby-0.9.5/test/frob/bug10.minimize000066400000000000000000000001031401527164200173740ustar00rootroot000000000000007 4 0 5 0 0 0 3 0 1 0 2 1 0 0 1 1 4 0 0 3 0 0 0 2 4 0 0 0 5 frobby-0.9.5/test/frob/bug10.multi000066400000000000000000000004721401527164200167160ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; p = -x2^5*x3*x4 + x2^5*x3 + x2^5*x4 + -x2^5 + -x2^3*x3*x4^5 + x2^3*x3*x4 + x2^3*x4^5 + -x2^3*x4 + -x2^2*x3^3*x4^4 + x2^2*x3^3 + x2^2*x3*x4^4 + -x2^2*x3 + -x2*x3^2*x4^5 + x2*x3^2*x4^4 + x2*x3*x4^5 + -x2*x3*x4^4 + x3^3*x4^4 + -x3^3 + x3^2*x4^5 + -x3^2*x4^4 + -x4^5 + 1; frobby-0.9.5/test/frob/bug10.opt_irr000066400000000000000000000000301401527164200172300ustar00rootroot000000000000002 4 0 3 1 5 0 2 3 4 9 frobby-0.9.5/test/frob/bug10.opt_irr_min000066400000000000000000000000171401527164200201000ustar00rootroot000000000000001 4 0 5 1 1 7 frobby-0.9.5/test/frob/bug10.opt_std000066400000000000000000000000211401527164200172260ustar00rootroot000000000000000 4 no solution. frobby-0.9.5/test/frob/bug10.opt_std_min000066400000000000000000000000211401527164200200710ustar00rootroot000000000000000 4 no solution. frobby-0.9.5/test/frob/bug10.primdecom000066400000000000000000000001031401527164200175320ustar00rootroot000000000000007 4 0 5 0 0 0 3 0 1 0 2 1 0 0 1 1 4 0 0 3 0 0 0 2 4 0 0 0 5 frobby-0.9.5/test/frob/bug10.radical000066400000000000000000000000371401527164200171600ustar00rootroot000000000000003 4 0 1 0 0 0 0 1 0 0 0 0 1 frobby-0.9.5/test/frob/bug10.test000066400000000000000000000001371401527164200165410ustar00rootroot000000000000007 4 -7 1 1 4 -5 -1 0 5 -4 5 -1 0 -3 -4 2 4 -2 2 1 -1 -2 3 -2 1 0 -1 3 -2 frobby-0.9.5/test/frob/bug10.uni000066400000000000000000000000701401527164200163510ustar00rootroot00000000000000R = QQ[t]; p = -2*t^9 + 4*t^7 + -t^4 + -2*t^3 + 1; frobby-0.9.5/test/frob/bug11.alexdual000066400000000000000000000005741401527164200173670ustar00rootroot0000000000000025 7 0 5 4 7 2 1 1 0 5 4 7 1 2 1 0 5 4 7 1 1 3 0 5 4 1 2 2 3 0 5 2 5 2 1 3 0 5 1 7 2 1 3 0 5 1 5 2 2 3 0 4 5 7 1 2 1 0 4 5 5 2 2 1 0 4 5 2 2 2 3 0 4 4 4 2 1 3 0 4 3 3 2 2 3 0 4 2 7 2 2 1 0 4 2 5 2 2 3 0 3 5 6 2 2 1 0 3 4 7 2 1 2 0 3 4 6 2 2 3 0 3 3 7 2 2 1 0 2 5 7 2 1 2 0 2 5 7 1 2 2 0 2 2 7 2 2 2 0 1 5 7 1 2 3 0 1 5 6 2 2 2 0 1 4 7 2 2 2 0 1 2 7 2 2 3 frobby-0.9.5/test/frob/bug11.assoprimes000066400000000000000000000000231401527164200177420ustar00rootroot000000000000001 7 0 1 1 1 1 1 1 frobby-0.9.5/test/frob/bug11.dim000066400000000000000000000000021401527164200163230ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug11.euler000066400000000000000000000000021401527164200166660ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug11.frobInstance000066400000000000000000000000421401527164200201730ustar00rootroot00000000000000152 1640 1723 2021 3148 3927 3944 frobby-0.9.5/test/frob/bug11.frobNumber000066400000000000000000000000061401527164200176570ustar00rootroot0000000000000014545 frobby-0.9.5/test/frob/bug11.intersection000066400000000000000000000010601401527164200202650ustar00rootroot0000000000000037 7 0 5 0 0 0 0 0 0 4 2 0 0 0 1 0 4 0 0 1 0 1 0 4 0 0 0 1 0 0 3 1 1 0 0 0 0 3 1 0 0 1 0 0 3 0 0 0 0 2 0 2 3 0 0 0 2 0 2 2 1 0 0 0 0 2 0 2 0 0 0 0 2 0 1 0 1 0 0 2 0 0 1 0 2 0 1 4 0 0 0 0 0 1 2 0 0 1 0 0 1 1 5 0 0 0 0 1 1 0 1 0 0 0 1 0 6 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 2 0 0 5 0 0 0 0 0 0 4 1 0 1 0 0 0 4 0 0 0 1 0 0 3 3 0 0 0 0 0 2 5 0 0 0 0 0 2 3 0 1 0 0 0 2 0 1 0 0 0 0 2 0 0 1 1 0 0 1 1 0 0 1 0 0 0 7 0 0 0 0 0 0 4 0 1 0 0 0 0 3 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 2 0 0 0 0 0 0 1 1 1 0 0 0 0 0 2 0 0 0 0 0 0 0 3 frobby-0.9.5/test/frob/bug11.irrdecom000066400000000000000000000044561401527164200173770ustar00rootroot000000000000006 7 0 5 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 5 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 6 7 0 5 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 6 7 0 5 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 4 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 6 7 0 4 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 6 7 0 4 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 6 7 0 3 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 6 7 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 6 7 0 3 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 6 7 0 2 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 2 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 6 7 0 2 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 6 7 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 6 7 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 6 7 0 1 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 1 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 6 7 0 1 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 6 7 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 6 7 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 6 7 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 3 frobby-0.9.5/test/frob/bug11.irrdecom_ideal000066400000000000000000000005741401527164200205320ustar00rootroot0000000000000025 7 0 5 4 1 1 1 1 0 5 2 1 1 1 2 0 5 1 2 1 1 2 0 5 1 1 2 1 1 0 4 4 1 1 1 2 0 4 1 1 2 1 2 0 4 1 1 1 2 2 0 3 3 1 1 1 3 0 3 2 2 1 1 1 0 3 2 1 1 2 2 0 3 1 2 1 1 3 0 2 4 3 1 1 1 0 2 4 1 1 1 3 0 2 3 5 1 1 1 0 2 2 4 1 2 1 0 2 1 6 1 1 1 0 2 1 3 1 1 3 0 2 1 1 2 1 3 0 1 5 3 1 1 1 0 1 5 1 1 2 1 0 1 4 3 1 2 1 0 1 2 7 1 1 1 0 1 2 1 2 2 1 0 1 2 1 2 1 3 0 1 2 1 1 2 3 frobby-0.9.5/test/frob/bug11.maxstandard000066400000000000000000000000041401527164200200620ustar00rootroot000000000000000 7 frobby-0.9.5/test/frob/bug11.minimize000066400000000000000000000010601401527164200174000ustar00rootroot0000000000000037 7 0 5 0 0 0 0 0 0 4 2 0 0 0 1 0 4 0 0 1 0 1 0 4 0 0 0 1 0 0 3 1 1 0 0 0 0 3 1 0 0 1 0 0 3 0 0 0 0 2 0 2 3 0 0 0 2 0 2 2 1 0 0 0 0 2 0 2 0 0 0 0 2 0 1 0 1 0 0 2 0 0 1 0 2 0 1 4 0 0 0 0 0 1 2 0 0 1 0 0 1 1 5 0 0 0 0 1 1 0 1 0 0 0 1 0 6 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 2 0 0 5 0 0 0 0 0 0 4 1 0 1 0 0 0 4 0 0 0 1 0 0 3 3 0 0 0 0 0 2 5 0 0 0 0 0 2 3 0 1 0 0 0 2 0 1 0 0 0 0 2 0 0 1 1 0 0 1 1 0 0 1 0 0 0 7 0 0 0 0 0 0 4 0 1 0 0 0 0 3 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 2 0 0 0 0 0 0 1 1 1 0 0 0 0 0 2 0 0 0 0 0 0 0 3 frobby-0.9.5/test/frob/bug11.multi000066400000000000000000000427261401527164200167270ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7]; p = x2^5*x3^4*x4*x5*x6*x7 + -x2^5*x3^4*x4*x5*x6 + -x2^5*x3^4*x4*x5*x7 + x2^5*x3^4*x4*x5 + -x2^5*x3^4*x4*x6*x7 + x2^5*x3^4*x4*x6 + x2^5*x3^4*x4*x7 + -x2^5*x3^4*x4 + -x2^5*x3^4*x5*x6*x7 + x2^5*x3^4*x5*x6 + x2^5*x3^4*x5*x7 + -x2^5*x3^4*x5 + x2^5*x3^4*x6*x7 + -x2^5*x3^4*x6 + -x2^5*x3^4*x7 + x2^5*x3^4 + x2^5*x3^2*x4*x5*x6*x7^2 + -x2^5*x3^2*x4*x5*x6*x7 + -x2^5*x3^2*x4*x5*x7^2 + x2^5*x3^2*x4*x5*x7 + -x2^5*x3^2*x4*x6*x7^2 + x2^5*x3^2*x4*x6*x7 + x2^5*x3^2*x4*x7^2 + -x2^5*x3^2*x4*x7 + -x2^5*x3^2*x5*x6*x7^2 + x2^5*x3^2*x5*x6*x7 + x2^5*x3^2*x5*x7^2 + -x2^5*x3^2*x5*x7 + x2^5*x3^2*x6*x7^2 + -x2^5*x3^2*x6*x7 + -x2^5*x3^2*x7^2 + x2^5*x3^2*x7 + x2^5*x3*x4^2*x5*x6*x7^2 + -x2^5*x3*x4^2*x5*x6 + -x2^5*x3*x4^2*x5*x7^2 + x2^5*x3*x4^2*x5 + -x2^5*x3*x4^2*x6*x7^2 + x2^5*x3*x4^2*x6 + x2^5*x3*x4^2*x7^2 + -x2^5*x3*x4^2 + x2^5*x3*x4*x5^2*x6*x7 + -x2^5*x3*x4*x5^2*x6 + -x2^5*x3*x4*x5^2*x7 + x2^5*x3*x4*x5^2 + -x2^5*x3*x4*x5*x6*x7^2 + -x2^5*x3*x4*x5*x6*x7 + 2*x2^5*x3*x4*x5*x6 + x2^5*x3*x4*x5*x7^2 + x2^5*x3*x4*x5*x7 + -2*x2^5*x3*x4*x5 + x2^5*x3*x4*x6*x7^2 + -x2^5*x3*x4*x6 + -x2^5*x3*x4*x7^2 + x2^5*x3*x4 + -x2^5*x3*x5^2*x6*x7 + x2^5*x3*x5^2*x6 + x2^5*x3*x5^2*x7 + -x2^5*x3*x5^2 + x2^5*x3*x5*x6*x7 + -x2^5*x3*x5*x6 + -x2^5*x3*x5*x7 + x2^5*x3*x5 + -x2^5*x4^2*x5*x6*x7^2 + x2^5*x4^2*x5*x6 + x2^5*x4^2*x5*x7^2 + -x2^5*x4^2*x5 + x2^5*x4^2*x6*x7^2 + -x2^5*x4^2*x6 + -x2^5*x4^2*x7^2 + x2^5*x4^2 + -x2^5*x4*x5^2*x6*x7 + x2^5*x4*x5^2*x6 + x2^5*x4*x5^2*x7 + -x2^5*x4*x5^2 + x2^5*x4*x5*x6*x7 + -x2^5*x4*x5*x6 + -x2^5*x4*x5*x7 + x2^5*x4*x5 + x2^5*x5^2*x6*x7 + -x2^5*x5^2*x6 + -x2^5*x5^2*x7 + x2^5*x5^2 + x2^5*x5*x6*x7^2 + -x2^5*x5*x6*x7 + -x2^5*x5*x7^2 + x2^5*x5*x7 + -x2^5*x6*x7^2 + x2^5*x6 + x2^5*x7^2 + -x2^5 + x2^4*x3^4*x4*x5*x6*x7^2 + -x2^4*x3^4*x4*x5*x6*x7 + -x2^4*x3^4*x4*x5*x7^2 + x2^4*x3^4*x4*x5*x7 + -x2^4*x3^4*x4*x6*x7^2 + x2^4*x3^4*x4*x6*x7 + x2^4*x3^4*x4*x7^2 + -x2^4*x3^4*x4*x7 + -x2^4*x3^4*x5*x6*x7^2 + x2^4*x3^4*x5*x6*x7 + x2^4*x3^4*x5*x7^2 + -x2^4*x3^4*x5*x7 + x2^4*x3^4*x6*x7^2 + -x2^4*x3^4*x6*x7 + -x2^4*x3^4*x7^2 + x2^4*x3^4*x7 + -x2^4*x3^2*x4*x5*x6*x7^2 + x2^4*x3^2*x4*x5*x6*x7 + x2^4*x3^2*x4*x5*x7^2 + -x2^4*x3^2*x4*x5*x7 + x2^4*x3^2*x4*x6*x7^2 + -x2^4*x3^2*x4*x6*x7 + -x2^4*x3^2*x4*x7^2 + x2^4*x3^2*x4*x7 + x2^4*x3^2*x5*x6*x7^2 + -x2^4*x3^2*x5*x6*x7 + -x2^4*x3^2*x5*x7^2 + x2^4*x3^2*x5*x7 + -x2^4*x3^2*x6*x7^2 + x2^4*x3^2*x6*x7 + x2^4*x3^2*x7^2 + -x2^4*x3^2*x7 + x2^4*x3*x4*x5^2*x6*x7^2 + -x2^4*x3*x4*x5^2*x6*x7 + -x2^4*x3*x4*x5^2*x7^2 + x2^4*x3*x4*x5^2*x7 + x2^4*x3*x4*x5*x6^2*x7^2 + -x2^4*x3*x4*x5*x6^2 + -2*x2^4*x3*x4*x5*x6*x7^2 + x2^4*x3*x4*x5*x6*x7 + x2^4*x3*x4*x5*x6 + x2^4*x3*x4*x5*x7^2 + -x2^4*x3*x4*x5*x7 + -x2^4*x3*x4*x6^2*x7^2 + x2^4*x3*x4*x6^2 + x2^4*x3*x4*x6*x7^2 + -x2^4*x3*x4*x6 + -x2^4*x3*x5^2*x6*x7^2 + x2^4*x3*x5^2*x6*x7 + x2^4*x3*x5^2*x7^2 + -x2^4*x3*x5^2*x7 + -x2^4*x3*x5*x6^2*x7^2 + x2^4*x3*x5*x6^2 + 2*x2^4*x3*x5*x6*x7^2 + -x2^4*x3*x5*x6*x7 + -x2^4*x3*x5*x6 + -x2^4*x3*x5*x7^2 + x2^4*x3*x5*x7 + x2^4*x3*x6^2*x7^2 + -x2^4*x3*x6^2 + -x2^4*x3*x6*x7^2 + x2^4*x3*x6 + -x2^4*x4*x5^2*x6*x7^2 + x2^4*x4*x5^2*x6*x7 + x2^4*x4*x5^2*x7^2 + -x2^4*x4*x5^2*x7 + -x2^4*x4*x5*x6^2*x7^2 + x2^4*x4*x5*x6^2 + 2*x2^4*x4*x5*x6*x7^2 + -x2^4*x4*x5*x6*x7 + -x2^4*x4*x5*x6 + -x2^4*x4*x5*x7^2 + x2^4*x4*x5*x7 + x2^4*x4*x6^2*x7^2 + -x2^4*x4*x6^2 + -x2^4*x4*x6*x7^2 + x2^4*x4*x6 + x2^4*x5^2*x6*x7^2 + -x2^4*x5^2*x6*x7 + -x2^4*x5^2*x7^2 + x2^4*x5^2*x7 + x2^4*x5*x6^2*x7^2 + -x2^4*x5*x6^2 + -2*x2^4*x5*x6*x7^2 + x2^4*x5*x6*x7 + x2^4*x5*x6 + x2^4*x5*x7^2 + -x2^4*x5*x7 + -x2^4*x6^2*x7^2 + x2^4*x6^2 + x2^4*x6*x7^2 + -x2^4*x6 + x2^3*x3^3*x4*x5*x6*x7^3 + -x2^3*x3^3*x4*x5*x6*x7^2 + -x2^3*x3^3*x4*x5*x7^3 + x2^3*x3^3*x4*x5*x7^2 + -x2^3*x3^3*x4*x6*x7^3 + x2^3*x3^3*x4*x6*x7^2 + x2^3*x3^3*x4*x7^3 + -x2^3*x3^3*x4*x7^2 + -x2^3*x3^3*x5*x6*x7^3 + x2^3*x3^3*x5*x6*x7^2 + x2^3*x3^3*x5*x7^3 + -x2^3*x3^3*x5*x7^2 + x2^3*x3^3*x6*x7^3 + -x2^3*x3^3*x6*x7^2 + -x2^3*x3^3*x7^3 + x2^3*x3^3*x7^2 + x2^3*x3^2*x4^2*x5*x6*x7 + -x2^3*x3^2*x4^2*x5*x6 + -x2^3*x3^2*x4^2*x5*x7 + x2^3*x3^2*x4^2*x5 + -x2^3*x3^2*x4^2*x6*x7 + x2^3*x3^2*x4^2*x6 + x2^3*x3^2*x4^2*x7 + -x2^3*x3^2*x4^2 + x2^3*x3^2*x4*x5*x6^2*x7^2 + -x2^3*x3^2*x4*x5*x6^2 + -x2^3*x3^2*x4*x5*x6*x7^2 + -x2^3*x3^2*x4*x5*x6*x7 + 2*x2^3*x3^2*x4*x5*x6 + x2^3*x3^2*x4*x5*x7 + -x2^3*x3^2*x4*x5 + -x2^3*x3^2*x4*x6^2*x7^2 + x2^3*x3^2*x4*x6^2 + x2^3*x3^2*x4*x6*x7^2 + x2^3*x3^2*x4*x6*x7 + -2*x2^3*x3^2*x4*x6 + -x2^3*x3^2*x4*x7 + x2^3*x3^2*x4 + -x2^3*x3^2*x5*x6^2*x7^2 + x2^3*x3^2*x5*x6^2 + x2^3*x3^2*x5*x6*x7^2 + -x2^3*x3^2*x5*x6 + x2^3*x3^2*x6^2*x7^2 + -x2^3*x3^2*x6^2 + -x2^3*x3^2*x6*x7^2 + x2^3*x3^2*x6 + x2^3*x3*x4^2*x5*x6*x7^3 + -x2^3*x3*x4^2*x5*x6*x7^2 + -x2^3*x3*x4^2*x5*x6*x7 + x2^3*x3*x4^2*x5*x6 + -x2^3*x3*x4^2*x5*x7^3 + x2^3*x3*x4^2*x5*x7^2 + x2^3*x3*x4^2*x5*x7 + -x2^3*x3*x4^2*x5 + -x2^3*x3*x4^2*x6*x7^3 + x2^3*x3*x4^2*x6*x7^2 + x2^3*x3*x4^2*x6*x7 + -x2^3*x3*x4^2*x6 + x2^3*x3*x4^2*x7^3 + -x2^3*x3*x4^2*x7^2 + -x2^3*x3*x4^2*x7 + x2^3*x3*x4^2 + -x2^3*x3*x4*x5*x6^2*x7^2 + x2^3*x3*x4*x5*x6^2 + -x2^3*x3*x4*x5*x6*x7^3 + 2*x2^3*x3*x4*x5*x6*x7^2 + x2^3*x3*x4*x5*x6*x7 + -2*x2^3*x3*x4*x5*x6 + x2^3*x3*x4*x5*x7^3 + -x2^3*x3*x4*x5*x7^2 + -x2^3*x3*x4*x5*x7 + x2^3*x3*x4*x5 + x2^3*x3*x4*x6^2*x7^2 + -x2^3*x3*x4*x6^2 + x2^3*x3*x4*x6*x7^3 + -2*x2^3*x3*x4*x6*x7^2 + -x2^3*x3*x4*x6*x7 + 2*x2^3*x3*x4*x6 + -x2^3*x3*x4*x7^3 + x2^3*x3*x4*x7^2 + x2^3*x3*x4*x7 + -x2^3*x3*x4 + x2^3*x3*x5*x6^2*x7^2 + -x2^3*x3*x5*x6^2 + -x2^3*x3*x5*x6*x7^2 + x2^3*x3*x5*x6 + -x2^3*x3*x6^2*x7^2 + x2^3*x3*x6^2 + x2^3*x3*x6*x7^2 + -x2^3*x3*x6 + -x2^3*x4^2*x5*x6*x7^3 + x2^3*x4^2*x5*x6*x7^2 + x2^3*x4^2*x5*x7^3 + -x2^3*x4^2*x5*x7^2 + x2^3*x4^2*x6*x7^3 + -x2^3*x4^2*x6*x7^2 + -x2^3*x4^2*x7^3 + x2^3*x4^2*x7^2 + x2^3*x5*x6*x7^3 + -x2^3*x5*x6*x7^2 + -x2^3*x5*x7^3 + x2^3*x5*x7^2 + -x2^3*x6*x7^3 + x2^3*x6*x7^2 + x2^3*x7^3 + -x2^3*x7^2 + x2^2*x3^4*x4^3*x5*x6*x7 + -x2^2*x3^4*x4^3*x5*x6 + -x2^2*x3^4*x4^3*x5*x7 + x2^2*x3^4*x4^3*x5 + -x2^2*x3^4*x4^3*x6*x7 + x2^2*x3^4*x4^3*x6 + x2^2*x3^4*x4^3*x7 + -x2^2*x3^4*x4^3 + x2^2*x3^4*x4*x5*x6*x7^3 + -x2^2*x3^4*x4*x5*x6*x7^2 + -x2^2*x3^4*x4*x5*x6*x7 + x2^2*x3^4*x4*x5*x6 + -x2^2*x3^4*x4*x5*x7^3 + x2^2*x3^4*x4*x5*x7^2 + x2^2*x3^4*x4*x5*x7 + -x2^2*x3^4*x4*x5 + -x2^2*x3^4*x4*x6*x7^3 + x2^2*x3^4*x4*x6*x7^2 + x2^2*x3^4*x4*x6*x7 + -x2^2*x3^4*x4*x6 + x2^2*x3^4*x4*x7^3 + -x2^2*x3^4*x4*x7^2 + -x2^2*x3^4*x4*x7 + x2^2*x3^4*x4 + -x2^2*x3^4*x5*x6*x7^3 + x2^2*x3^4*x5*x6*x7^2 + x2^2*x3^4*x5*x7^3 + -x2^2*x3^4*x5*x7^2 + x2^2*x3^4*x6*x7^3 + -x2^2*x3^4*x6*x7^2 + -x2^2*x3^4*x7^3 + x2^2*x3^4*x7^2 + x2^2*x3^3*x4^5*x5*x6*x7 + -x2^2*x3^3*x4^5*x5*x6 + -x2^2*x3^3*x4^5*x5*x7 + x2^2*x3^3*x4^5*x5 + -x2^2*x3^3*x4^5*x6*x7 + x2^2*x3^3*x4^5*x6 + x2^2*x3^3*x4^5*x7 + -x2^2*x3^3*x4^5 + -x2^2*x3^3*x4^3*x5*x6*x7 + x2^2*x3^3*x4^3*x5*x6 + x2^2*x3^3*x4^3*x5*x7 + -x2^2*x3^3*x4^3*x5 + x2^2*x3^3*x4^3*x6*x7 + -x2^2*x3^3*x4^3*x6 + -x2^2*x3^3*x4^3*x7 + x2^2*x3^3*x4^3 + -x2^2*x3^3*x4*x5*x6*x7^3 + x2^2*x3^3*x4*x5*x6*x7^2 + x2^2*x3^3*x4*x5*x7^3 + -x2^2*x3^3*x4*x5*x7^2 + x2^2*x3^3*x4*x6*x7^3 + -x2^2*x3^3*x4*x6*x7^2 + -x2^2*x3^3*x4*x7^3 + x2^2*x3^3*x4*x7^2 + x2^2*x3^3*x5*x6*x7^3 + -x2^2*x3^3*x5*x6*x7^2 + -x2^2*x3^3*x5*x7^3 + x2^2*x3^3*x5*x7^2 + -x2^2*x3^3*x6*x7^3 + x2^2*x3^3*x6*x7^2 + x2^2*x3^3*x7^3 + -x2^2*x3^3*x7^2 + x2^2*x3^2*x4^4*x5*x6^2*x7 + -x2^2*x3^2*x4^4*x5*x6^2 + -x2^2*x3^2*x4^4*x5*x6*x7 + x2^2*x3^2*x4^4*x5*x6 + -x2^2*x3^2*x4^4*x6^2*x7 + x2^2*x3^2*x4^4*x6^2 + x2^2*x3^2*x4^4*x6*x7 + -x2^2*x3^2*x4^4*x6 + -x2^2*x3^2*x4^2*x5*x6*x7 + x2^2*x3^2*x4^2*x5*x6 + x2^2*x3^2*x4^2*x5*x7 + -x2^2*x3^2*x4^2*x5 + x2^2*x3^2*x4^2*x6*x7 + -x2^2*x3^2*x4^2*x6 + -x2^2*x3^2*x4^2*x7 + x2^2*x3^2*x4^2 + -x2^2*x3^2*x4*x5*x6^2*x7 + x2^2*x3^2*x4*x5*x6^2 + 2*x2^2*x3^2*x4*x5*x6*x7 + -2*x2^2*x3^2*x4*x5*x6 + -x2^2*x3^2*x4*x5*x7 + x2^2*x3^2*x4*x5 + x2^2*x3^2*x4*x6^2*x7 + -x2^2*x3^2*x4*x6^2 + -2*x2^2*x3^2*x4*x6*x7 + 2*x2^2*x3^2*x4*x6 + x2^2*x3^2*x4*x7 + -x2^2*x3^2*x4 + x2^2*x3*x4^6*x5*x6*x7 + -x2^2*x3*x4^6*x5*x6 + -x2^2*x3*x4^6*x5*x7 + x2^2*x3*x4^6*x5 + -x2^2*x3*x4^6*x6*x7 + x2^2*x3*x4^6*x6 + x2^2*x3*x4^6*x7 + -x2^2*x3*x4^6 + -x2^2*x3*x4^5*x5*x6*x7 + x2^2*x3*x4^5*x5*x6 + x2^2*x3*x4^5*x5*x7 + -x2^2*x3*x4^5*x5 + x2^2*x3*x4^5*x6*x7 + -x2^2*x3*x4^5*x6 + -x2^2*x3*x4^5*x7 + x2^2*x3*x4^5 + x2^2*x3*x4^3*x5*x6*x7^3 + -x2^2*x3*x4^3*x5*x6*x7 + -x2^2*x3*x4^3*x5*x7^3 + x2^2*x3*x4^3*x5*x7 + -x2^2*x3*x4^3*x6*x7^3 + x2^2*x3*x4^3*x6*x7 + x2^2*x3*x4^3*x7^3 + -x2^2*x3*x4^3*x7 + -x2^2*x3*x4^2*x5*x6*x7^3 + x2^2*x3*x4^2*x5*x6*x7 + x2^2*x3*x4^2*x5*x7^3 + -x2^2*x3*x4^2*x5*x7 + x2^2*x3*x4^2*x6*x7^3 + -x2^2*x3*x4^2*x6*x7 + -x2^2*x3*x4^2*x7^3 + x2^2*x3*x4^2*x7 + x2^2*x3*x4*x5^2*x6*x7^3 + -x2^2*x3*x4*x5^2*x6*x7^2 + -x2^2*x3*x4*x5^2*x7^3 + x2^2*x3*x4*x5^2*x7^2 + -x2^2*x3*x4*x5*x6*x7^3 + x2^2*x3*x4*x5*x6*x7^2 + x2^2*x3*x4*x5*x7^3 + -x2^2*x3*x4*x5*x7^2 + -x2^2*x3*x5^2*x6*x7^3 + x2^2*x3*x5^2*x6*x7^2 + x2^2*x3*x5^2*x7^3 + -x2^2*x3*x5^2*x7^2 + x2^2*x3*x5*x6*x7^3 + -x2^2*x3*x5*x6*x7^2 + -x2^2*x3*x5*x7^3 + x2^2*x3*x5*x7^2 + -x2^2*x4^6*x5*x6*x7 + x2^2*x4^6*x5*x6 + x2^2*x4^6*x5*x7 + -x2^2*x4^6*x5 + x2^2*x4^6*x6*x7 + -x2^2*x4^6*x6 + -x2^2*x4^6*x7 + x2^2*x4^6 + -x2^2*x4^4*x5*x6^2*x7 + x2^2*x4^4*x5*x6^2 + x2^2*x4^4*x5*x6*x7 + -x2^2*x4^4*x5*x6 + x2^2*x4^4*x6^2*x7 + -x2^2*x4^4*x6^2 + -x2^2*x4^4*x6*x7 + x2^2*x4^4*x6 + -x2^2*x4^3*x5*x6*x7^3 + x2^2*x4^3*x5*x6*x7 + x2^2*x4^3*x5*x7^3 + -x2^2*x4^3*x5*x7 + x2^2*x4^3*x6*x7^3 + -x2^2*x4^3*x6*x7 + -x2^2*x4^3*x7^3 + x2^2*x4^3*x7 + x2^2*x4^2*x5*x6*x7^3 + -x2^2*x4^2*x5*x6 + -x2^2*x4^2*x5*x7^3 + x2^2*x4^2*x5 + -x2^2*x4^2*x6*x7^3 + x2^2*x4^2*x6 + x2^2*x4^2*x7^3 + -x2^2*x4^2 + -x2^2*x4*x5^2*x6*x7^3 + x2^2*x4*x5^2*x6*x7^2 + x2^2*x4*x5^2*x7^3 + -x2^2*x4*x5^2*x7^2 + x2^2*x4*x5*x6^2*x7 + -x2^2*x4*x5*x6^2 + x2^2*x4*x5*x6*x7^3 + -x2^2*x4*x5*x6*x7^2 + -x2^2*x4*x5*x6*x7 + x2^2*x4*x5*x6 + -x2^2*x4*x5*x7^3 + x2^2*x4*x5*x7^2 + -x2^2*x4*x6^2*x7 + x2^2*x4*x6^2 + x2^2*x4*x6*x7 + -x2^2*x4*x6 + x2^2*x5^2*x6*x7^3 + -x2^2*x5^2*x6*x7^2 + -x2^2*x5^2*x7^3 + x2^2*x5^2*x7^2 + -x2^2*x5*x6*x7^3 + x2^2*x5*x6*x7^2 + x2^2*x5*x7^3 + -x2^2*x5*x7^2 + x2*x3^5*x4^3*x5*x6*x7 + -x2*x3^5*x4^3*x5*x6 + -x2*x3^5*x4^3*x5*x7 + x2*x3^5*x4^3*x5 + -x2*x3^5*x4^3*x6*x7 + x2*x3^5*x4^3*x6 + x2*x3^5*x4^3*x7 + -x2*x3^5*x4^3 + x2*x3^5*x4*x5*x6^2*x7 + -x2*x3^5*x4*x5*x6^2 + -x2*x3^5*x4*x5*x6*x7 + x2*x3^5*x4*x5*x6 + -x2*x3^5*x4*x6^2*x7 + x2*x3^5*x4*x6^2 + x2*x3^5*x4*x6*x7 + -x2*x3^5*x4*x6 + -x2*x3^5*x5*x6^2*x7 + x2*x3^5*x5*x6^2 + x2*x3^5*x5*x7 + -x2*x3^5*x5 + x2*x3^5*x6^2*x7 + -x2*x3^5*x6^2 + -x2*x3^5*x7 + x2*x3^5 + x2*x3^4*x4^3*x5*x6^2*x7 + -x2*x3^4*x4^3*x5*x6^2 + -2*x2*x3^4*x4^3*x5*x6*x7 + 2*x2*x3^4*x4^3*x5*x6 + x2*x3^4*x4^3*x5*x7 + -x2*x3^4*x4^3*x5 + -x2*x3^4*x4^3*x6^2*x7 + x2*x3^4*x4^3*x6^2 + 2*x2*x3^4*x4^3*x6*x7 + -2*x2*x3^4*x4^3*x6 + -x2*x3^4*x4^3*x7 + x2*x3^4*x4^3 + -x2*x3^4*x4*x5*x6^2*x7 + x2*x3^4*x4*x5*x6^2 + x2*x3^4*x4*x5*x6*x7 + -x2*x3^4*x4*x5*x6 + x2*x3^4*x4*x6^2*x7 + -x2*x3^4*x4*x6^2 + -x2*x3^4*x4*x6*x7 + x2*x3^4*x4*x6 + x2*x3^4*x5*x6*x7 + -x2*x3^4*x5*x6 + -x2*x3^4*x5*x7 + x2*x3^4*x5 + -x2*x3^4*x6*x7 + x2*x3^4*x6 + x2*x3^4*x7 + -x2*x3^4 + x2*x3^2*x4^7*x5*x6*x7 + -x2*x3^2*x4^7*x5*x6 + -x2*x3^2*x4^7*x5*x7 + x2*x3^2*x4^7*x5 + -x2*x3^2*x4^7*x6*x7 + x2*x3^2*x4^7*x6 + x2*x3^2*x4^7*x7 + -x2*x3^2*x4^7 + -x2*x3^2*x4^5*x5*x6*x7 + x2*x3^2*x4^5*x5*x6 + x2*x3^2*x4^5*x5*x7 + -x2*x3^2*x4^5*x5 + x2*x3^2*x4^5*x6*x7 + -x2*x3^2*x4^5*x6 + -x2*x3^2*x4^5*x7 + x2*x3^2*x4^5 + -x2*x3^2*x4^3*x5*x6^2*x7 + x2*x3^2*x4^3*x5*x6^2 + x2*x3^2*x4^3*x5*x6*x7 + -x2*x3^2*x4^3*x5*x6 + x2*x3^2*x4^3*x6^2*x7 + -x2*x3^2*x4^3*x6^2 + -x2*x3^2*x4^3*x6*x7 + x2*x3^2*x4^3*x6 + x2*x3^2*x4*x5^2*x6^2*x7 + -x2*x3^2*x4*x5^2*x6^2 + x2*x3^2*x4*x5^2*x6*x7^3 + -x2*x3^2*x4*x5^2*x6*x7 + -x2*x3^2*x4*x5^2*x7^3 + x2*x3^2*x4*x5^2 + x2*x3^2*x4*x5*x6^2*x7^3 + -x2*x3^2*x4*x5*x6^2*x7^2 + -x2*x3^2*x4*x5*x6^2*x7 + x2*x3^2*x4*x5*x6^2 + -2*x2*x3^2*x4*x5*x6*x7^3 + x2*x3^2*x4*x5*x6*x7^2 + x2*x3^2*x4*x5*x6*x7 + x2*x3^2*x4*x5*x7^3 + -x2*x3^2*x4*x5 + -x2*x3^2*x4*x6^2*x7^3 + x2*x3^2*x4*x6^2*x7^2 + x2*x3^2*x4*x6*x7^3 + -x2*x3^2*x4*x6*x7^2 + -x2*x3^2*x5^2*x6^2*x7 + x2*x3^2*x5^2*x6^2 + -x2*x3^2*x5^2*x6*x7^3 + x2*x3^2*x5^2*x6*x7 + x2*x3^2*x5^2*x7^3 + -x2*x3^2*x5^2 + -x2*x3^2*x5*x6^2*x7^3 + x2*x3^2*x5*x6^2*x7^2 + 2*x2*x3^2*x5*x6^2*x7 + -2*x2*x3^2*x5*x6^2 + 2*x2*x3^2*x5*x6*x7^3 + -x2*x3^2*x5*x6*x7^2 + -2*x2*x3^2*x5*x6*x7 + x2*x3^2*x5*x6 + -x2*x3^2*x5*x7^3 + x2*x3^2*x5 + x2*x3^2*x6^2*x7^3 + -x2*x3^2*x6^2*x7^2 + -x2*x3^2*x6^2*x7 + x2*x3^2*x6^2 + -x2*x3^2*x6*x7^3 + x2*x3^2*x6*x7^2 + x2*x3^2*x6*x7 + -x2*x3^2*x6 + -x2*x3*x4^6*x5*x6*x7 + x2*x3*x4^6*x5*x6 + x2*x3*x4^6*x5*x7 + -x2*x3*x4^6*x5 + x2*x3*x4^6*x6*x7 + -x2*x3*x4^6*x6 + -x2*x3*x4^6*x7 + x2*x3*x4^6 + x2*x3*x4^5*x5*x6*x7 + -x2*x3*x4^5*x5*x6 + -x2*x3*x4^5*x5*x7 + x2*x3*x4^5*x5 + -x2*x3*x4^5*x6*x7 + x2*x3*x4^5*x6 + x2*x3*x4^5*x7 + -x2*x3*x4^5 + -x2*x3*x4*x5^2*x6*x7^3 + x2*x3*x4*x5^2*x6 + x2*x3*x4*x5^2*x7^3 + -x2*x3*x4*x5^2 + x2*x3*x4*x5*x6*x7^3 + -x2*x3*x4*x5*x6 + -x2*x3*x4*x5*x7^3 + x2*x3*x4*x5 + x2*x3*x5^2*x6*x7^3 + -x2*x3*x5^2*x6 + -x2*x3*x5^2*x7^3 + x2*x3*x5^2 + -x2*x3*x5*x6*x7^3 + x2*x3*x5*x6 + x2*x3*x5*x7^3 + -x2*x3*x5 + -x2*x4^7*x5*x6*x7 + x2*x4^7*x5*x6 + x2*x4^7*x5*x7 + -x2*x4^7*x5 + x2*x4^7*x6*x7 + -x2*x4^7*x6 + -x2*x4^7*x7 + x2*x4^7 + x2*x4^6*x5*x6*x7 + -x2*x4^6*x5*x6 + -x2*x4^6*x5*x7 + x2*x4^6*x5 + -x2*x4^6*x6*x7 + x2*x4^6*x6 + x2*x4^6*x7 + -x2*x4^6 + -x2*x4*x5^2*x6^2*x7 + x2*x4*x5^2*x6^2 + x2*x4*x5^2*x6*x7 + -x2*x4*x5^2*x6 + -x2*x4*x5*x6^2*x7^3 + x2*x4*x5*x6^2*x7^2 + x2*x4*x5*x6^2*x7 + -x2*x4*x5*x6^2 + x2*x4*x5*x6*x7^3 + -x2*x4*x5*x6*x7^2 + -x2*x4*x5*x6*x7 + x2*x4*x5*x6 + x2*x4*x6^2*x7^3 + -x2*x4*x6^2*x7^2 + -x2*x4*x6*x7^3 + x2*x4*x6*x7^2 + x2*x5^2*x6^2*x7 + -x2*x5^2*x6^2 + -x2*x5^2*x6*x7 + x2*x5^2*x6 + x2*x5*x6^2*x7^3 + -x2*x5*x6^2*x7^2 + -x2*x5*x6^2*x7 + x2*x5*x6^2 + -x2*x5*x6*x7^3 + x2*x5*x6*x7^2 + x2*x5*x6*x7 + -x2*x5*x6 + -x2*x6^2*x7^3 + x2*x6^2*x7^2 + x2*x6*x7^3 + -x2*x6*x7^2 + -x3^5*x4^3*x5*x6*x7 + x3^5*x4^3*x5*x6 + x3^5*x4^3*x5*x7 + -x3^5*x4^3*x5 + x3^5*x4^3*x6*x7 + -x3^5*x4^3*x6 + -x3^5*x4^3*x7 + x3^5*x4^3 + -x3^5*x4*x5*x6^2*x7 + x3^5*x4*x5*x6^2 + x3^5*x4*x5*x6*x7 + -x3^5*x4*x5*x6 + x3^5*x4*x6^2*x7 + -x3^5*x4*x6^2 + -x3^5*x4*x6*x7 + x3^5*x4*x6 + x3^5*x5*x6^2*x7 + -x3^5*x5*x6^2 + -x3^5*x5*x7 + x3^5*x5 + -x3^5*x6^2*x7 + x3^5*x6^2 + x3^5*x7 + -x3^5 + -x3^4*x4^3*x5*x6^2*x7 + x3^4*x4^3*x5*x6^2 + x3^4*x4^3*x5*x6*x7 + -x3^4*x4^3*x5*x6 + x3^4*x4^3*x6^2*x7 + -x3^4*x4^3*x6^2 + -x3^4*x4^3*x6*x7 + x3^4*x4^3*x6 + x3^4*x4*x5*x6^2*x7 + -x3^4*x4*x5*x6^2 + -x3^4*x4*x5*x6*x7^3 + x3^4*x4*x5*x6 + x3^4*x4*x5*x7^3 + -x3^4*x4*x5*x7 + -x3^4*x4*x6^2*x7 + x3^4*x4*x6^2 + x3^4*x4*x6*x7^3 + -x3^4*x4*x6 + -x3^4*x4*x7^3 + x3^4*x4*x7 + x3^4*x5*x6*x7^3 + -x3^4*x5*x6*x7 + -x3^4*x5*x7^3 + x3^4*x5*x7 + -x3^4*x6*x7^3 + x3^4*x6*x7 + x3^4*x7^3 + -x3^4*x7 + -x3^3*x4^5*x5*x6*x7 + x3^3*x4^5*x5*x6 + x3^3*x4^5*x5*x7 + -x3^3*x4^5*x5 + x3^3*x4^5*x6*x7 + -x3^3*x4^5*x6 + -x3^3*x4^5*x7 + x3^3*x4^5 + x3^3*x4^3*x5*x6*x7 + -x3^3*x4^3*x5*x6 + -x3^3*x4^3*x5*x7 + x3^3*x4^3*x5 + -x3^3*x4^3*x6*x7 + x3^3*x4^3*x6 + x3^3*x4^3*x7 + -x3^3*x4^3 + -x3^2*x4^7*x5*x6*x7 + x3^2*x4^7*x5*x6 + x3^2*x4^7*x5*x7 + -x3^2*x4^7*x5 + x3^2*x4^7*x6*x7 + -x3^2*x4^7*x6 + -x3^2*x4^7*x7 + x3^2*x4^7 + x3^2*x4^5*x5*x6*x7 + -x3^2*x4^5*x5*x6 + -x3^2*x4^5*x5*x7 + x3^2*x4^5*x5 + -x3^2*x4^5*x6*x7 + x3^2*x4^5*x6 + x3^2*x4^5*x7 + -x3^2*x4^5 + -x3^2*x4^4*x5*x6^2*x7 + x3^2*x4^4*x5*x6^2 + x3^2*x4^4*x5*x6*x7 + -x3^2*x4^4*x5*x6 + x3^2*x4^4*x6^2*x7 + -x3^2*x4^4*x6^2 + -x3^2*x4^4*x6*x7 + x3^2*x4^4*x6 + x3^2*x4^3*x5*x6^2*x7 + -x3^2*x4^3*x5*x6^2 + -x3^2*x4^3*x5*x6*x7 + x3^2*x4^3*x5*x6 + -x3^2*x4^3*x6^2*x7 + x3^2*x4^3*x6^2 + x3^2*x4^3*x6*x7 + -x3^2*x4^3*x6 + -x3^2*x4*x5^2*x6^2*x7 + x3^2*x4*x5^2*x6^2 + -x3^2*x4*x5^2*x6*x7^3 + x3^2*x4*x5^2*x6*x7 + x3^2*x4*x5^2*x7^3 + -x3^2*x4*x5^2 + -x3^2*x4*x5*x6^2*x7^3 + 2*x3^2*x4*x5*x6^2*x7 + -x3^2*x4*x5*x6^2 + 2*x3^2*x4*x5*x6*x7^3 + -2*x3^2*x4*x5*x6*x7 + -x3^2*x4*x5*x7^3 + x3^2*x4*x5 + x3^2*x4*x6^2*x7^3 + -x3^2*x4*x6^2*x7 + -x3^2*x4*x6*x7^3 + x3^2*x4*x6*x7 + x3^2*x5^2*x6^2*x7 + -x3^2*x5^2*x6^2 + x3^2*x5^2*x6*x7^3 + -x3^2*x5^2*x6*x7 + -x3^2*x5^2*x7^3 + x3^2*x5^2 + x3^2*x5*x6^2*x7^3 + -2*x3^2*x5*x6^2*x7 + x3^2*x5*x6^2 + -2*x3^2*x5*x6*x7^3 + 2*x3^2*x5*x6*x7 + x3^2*x5*x7^3 + -x3^2*x5 + -x3^2*x6^2*x7^3 + x3^2*x6^2*x7 + x3^2*x6*x7^3 + -x3^2*x6*x7 + -x3*x4^3*x5*x6*x7^3 + x3*x4^3*x5*x6*x7 + x3*x4^3*x5*x7^3 + -x3*x4^3*x5*x7 + x3*x4^3*x6*x7^3 + -x3*x4^3*x6*x7 + -x3*x4^3*x7^3 + x3*x4^3*x7 + x3*x4*x5*x6*x7^3 + -x3*x4*x5*x6*x7 + -x3*x4*x5*x7^3 + x3*x4*x5*x7 + -x3*x4*x6*x7^3 + x3*x4*x6*x7 + x3*x4*x7^3 + -x3*x4*x7 + x4^7*x5*x6*x7 + -x4^7*x5*x6 + -x4^7*x5*x7 + x4^7*x5 + -x4^7*x6*x7 + x4^7*x6 + x4^7*x7 + -x4^7 + x4^4*x5*x6^2*x7 + -x4^4*x5*x6^2 + -x4^4*x5*x6*x7 + x4^4*x5*x6 + -x4^4*x6^2*x7 + x4^4*x6^2 + x4^4*x6*x7 + -x4^4*x6 + x4^3*x5*x6*x7^3 + -x4^3*x5*x6*x7 + -x4^3*x5*x7^3 + x4^3*x5*x7 + -x4^3*x6*x7^3 + x4^3*x6*x7 + x4^3*x7^3 + -x4^3*x7 + x4*x5^2*x6^2*x7 + -x4*x5^2*x6^2 + x4*x5^2*x6*x7^3 + -x4*x5^2*x6*x7 + -x4*x5^2*x7^3 + x4*x5^2 + x4*x5*x6^2*x7^3 + -2*x4*x5*x6^2*x7 + x4*x5*x6^2 + -2*x4*x5*x6*x7^3 + 2*x4*x5*x6*x7 + x4*x5*x7^3 + -x4*x5 + -x4*x6^2*x7^3 + x4*x6^2*x7 + x4*x6*x7^3 + -x4*x6*x7 + -x5^2*x6^2*x7 + x5^2*x6^2 + -x5^2*x6*x7^3 + x5^2*x6*x7 + x5^2*x7^3 + -x5^2 + -x5*x6^2*x7^3 + x5*x6^2*x7 + x5*x6*x7^3 + -x5*x6*x7 + x6^2*x7^3 + -x6^2 + -x7^3 + 1; frobby-0.9.5/test/frob/bug11.opt_irr000066400000000000000000000001031401527164200172320ustar00rootroot000000000000004 7 0 5 4 1 1 1 1 0 4 4 1 1 1 2 0 2 3 5 1 1 1 0 1 2 7 1 1 1 13 frobby-0.9.5/test/frob/bug11.opt_irr_min000066400000000000000000000000251401527164200201000ustar00rootroot000000000000001 7 0 1 2 1 2 2 1 9 frobby-0.9.5/test/frob/bug11.opt_std000066400000000000000000000000211401527164200172270ustar00rootroot000000000000000 7 no solution. frobby-0.9.5/test/frob/bug11.opt_std_min000066400000000000000000000000211401527164200200720ustar00rootroot000000000000000 7 no solution. frobby-0.9.5/test/frob/bug11.primdecom000066400000000000000000000010601401527164200175360ustar00rootroot0000000000000037 7 0 5 0 0 0 0 0 0 4 2 0 0 0 1 0 4 0 0 1 0 1 0 4 0 0 0 1 0 0 3 1 1 0 0 0 0 3 1 0 0 1 0 0 3 0 0 0 0 2 0 2 3 0 0 0 2 0 2 2 1 0 0 0 0 2 0 2 0 0 0 0 2 0 1 0 1 0 0 2 0 0 1 0 2 0 1 4 0 0 0 0 0 1 2 0 0 1 0 0 1 1 5 0 0 0 0 1 1 0 1 0 0 0 1 0 6 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 2 0 0 5 0 0 0 0 0 0 4 1 0 1 0 0 0 4 0 0 0 1 0 0 3 3 0 0 0 0 0 2 5 0 0 0 0 0 2 3 0 1 0 0 0 2 0 1 0 0 0 0 2 0 0 1 1 0 0 1 1 0 0 1 0 0 0 7 0 0 0 0 0 0 4 0 1 0 0 0 0 3 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 2 0 0 0 0 0 0 1 1 1 0 0 0 0 0 2 0 0 0 0 0 0 0 3 frobby-0.9.5/test/frob/bug11.radical000066400000000000000000000001361401527164200171610ustar00rootroot000000000000006 7 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug11.test000066400000000000000000000015211401527164200165400ustar00rootroot0000000000000037 7 -57 3 1 1 0 0 0 -46 1 -1 0 1 1 0 -46 1 2 -1 0 1 0 -45 -1 -1 7 0 0 -1 -41 2 0 -4 1 0 2 -41 2 3 -5 0 0 2 -40 0 0 3 0 -1 1 -40 2 0 1 -1 1 0 -35 3 -2 -2 0 0 2 -29 -2 1 1 0 0 1 -29 -2 4 0 -1 0 1 -29 0 -2 0 0 2 0 -28 5 0 0 0 0 -1 -24 1 -1 -4 0 1 2 -22 0 3 3 0 0 -2 -18 -4 -1 0 1 1 1 -18 -4 2 -1 0 1 1 -18 0 -3 0 0 -1 3 -17 1 1 0 1 -1 0 -17 1 4 -1 0 -1 0 -17 3 1 -2 0 1 -1 -16 1 -2 6 0 0 -2 -16 1 1 5 -1 0 -2 -12 -3 0 1 -1 1 1 -12 4 -1 -5 1 0 1 -12 4 2 -6 0 0 1 -11 -2 4 1 0 1 -2 -11 2 -1 2 0 -1 0 -11 2 2 1 -1 -1 0 -11 4 -1 0 -1 1 -1 -6 -1 -1 -1 2 0 0 -6 -1 2 -2 1 0 0 -6 -1 5 -3 0 0 0 -5 -3 2 5 0 -1 -1 -5 -1 -1 4 0 1 -2 -5 -1 2 3 -1 1 -2 0 0 -3 1 1 0 0 frobby-0.9.5/test/frob/bug11.uni000066400000000000000000000002211401527164200163500ustar00rootroot00000000000000R = QQ[t]; p = 4*t^13 + -6*t^12 + -15*t^11 + 32*t^10 + -13*t^9 + 12*t^8 + -31*t^7 + 15*t^6 + -3*t^5 + 13*t^4 + -6*t^3 + -3*t^2 + 1; frobby-0.9.5/test/frob/bug12.alexdual000066400000000000000000000004331401527164200173620ustar00rootroot0000000000000023 5 0 18 9 9 1 0 18 9 8 3 0 18 9 7 4 0 18 7 1 9 0 18 6 4 6 0 18 6 3 8 0 18 5 6 5 0 18 3 5 7 0 18 3 4 8 0 18 3 3 9 0 18 2 7 5 0 18 2 6 6 0 18 1 9 5 0 15 10 8 3 0 15 10 7 4 0 15 2 7 8 0 13 10 9 2 0 12 1 9 8 0 10 10 9 3 0 9 5 9 9 0 7 10 9 6 0 6 8 9 9 0 1 10 9 9 frobby-0.9.5/test/frob/bug12.assoprimes000066400000000000000000000000171401527164200177460ustar00rootroot000000000000001 5 0 1 1 1 1 frobby-0.9.5/test/frob/bug12.dim000066400000000000000000000000021401527164200163240ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug12.euler000066400000000000000000000000021401527164200166670ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug12.frobInstance000066400000000000000000000000311401527164200201720ustar00rootroot000000000000001159 2050 2861 3293 4003 frobby-0.9.5/test/frob/bug12.frobNumber000066400000000000000000000000061401527164200176600ustar00rootroot0000000000000048427 frobby-0.9.5/test/frob/bug12.intersection000066400000000000000000000005121401527164200202670ustar00rootroot0000000000000029 5 0 20 0 0 0 0 15 1 0 0 0 14 0 0 1 0 12 3 0 0 0 11 0 0 4 0 9 6 0 0 0 9 1 0 1 0 8 0 0 7 0 6 0 1 0 0 3 1 0 2 0 3 0 3 0 0 3 0 0 8 0 0 10 0 0 0 0 9 1 0 0 0 8 4 0 0 0 6 3 4 0 0 5 6 1 0 0 5 5 2 0 0 5 4 3 0 0 4 7 0 0 0 2 0 5 0 0 0 9 0 0 0 0 7 1 0 0 0 6 2 0 0 0 4 4 0 0 0 3 5 0 0 0 2 6 0 0 0 1 7 0 0 0 0 9 frobby-0.9.5/test/frob/bug12.irrdecom000066400000000000000000000021271401527164200173710ustar00rootroot000000000000004 5 0 20 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 15 0 0 0 0 0 3 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 14 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 4 4 5 0 12 0 0 0 0 0 6 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 11 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 7 4 5 0 9 0 0 0 0 0 10 0 0 0 0 0 1 0 0 0 0 0 2 4 5 0 8 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 8 4 5 0 6 0 0 0 0 0 9 0 0 0 0 0 3 0 0 0 0 0 2 4 5 0 6 0 0 0 0 0 1 0 0 0 0 0 3 0 0 0 0 0 6 4 5 0 6 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 7 4 5 0 3 0 0 0 0 0 10 0 0 0 0 0 1 0 0 0 0 0 5 4 5 0 3 0 0 0 0 0 9 0 0 0 0 0 4 0 0 0 0 0 4 4 5 0 3 0 0 0 0 0 9 0 0 0 0 0 3 0 0 0 0 0 5 4 5 0 3 0 0 0 0 0 8 0 0 0 0 0 7 0 0 0 0 0 1 4 5 0 3 0 0 0 0 0 8 0 0 0 0 0 6 0 0 0 0 0 2 4 5 0 3 0 0 0 0 0 8 0 0 0 0 0 5 0 0 0 0 0 3 4 5 0 3 0 0 0 0 0 6 0 0 0 0 0 4 0 0 0 0 0 5 4 5 0 3 0 0 0 0 0 5 0 0 0 0 0 7 0 0 0 0 0 2 4 5 0 3 0 0 0 0 0 5 0 0 0 0 0 6 0 0 0 0 0 4 4 5 0 3 0 0 0 0 0 4 0 0 0 0 0 9 0 0 0 0 0 1 4 5 0 3 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 6 4 5 0 3 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 7 4 5 0 3 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 9 frobby-0.9.5/test/frob/bug12.irrdecom_ideal000066400000000000000000000004111401527164200205210ustar00rootroot0000000000000023 5 0 20 1 1 1 0 15 3 1 1 0 14 1 1 4 0 12 6 1 1 0 11 1 1 7 0 9 10 1 2 0 8 1 1 8 0 6 9 3 2 0 6 1 3 6 0 6 1 2 7 0 3 10 1 5 0 3 9 4 4 0 3 9 3 5 0 3 8 7 1 0 3 8 6 2 0 3 8 5 3 0 3 6 4 5 0 3 5 7 2 0 3 5 6 4 0 3 4 9 1 0 3 2 3 6 0 3 2 2 7 0 3 2 1 9 frobby-0.9.5/test/frob/bug12.maxstandard000066400000000000000000000000041401527164200200630ustar00rootroot000000000000000 5 frobby-0.9.5/test/frob/bug12.minimize000066400000000000000000000005121401527164200174020ustar00rootroot0000000000000029 5 0 20 0 0 0 0 15 1 0 0 0 14 0 0 1 0 12 3 0 0 0 11 0 0 4 0 9 6 0 0 0 9 1 0 1 0 8 0 0 7 0 6 0 1 0 0 3 1 0 2 0 3 0 3 0 0 3 0 0 8 0 0 10 0 0 0 0 9 1 0 0 0 8 4 0 0 0 6 3 4 0 0 5 6 1 0 0 5 5 2 0 0 5 4 3 0 0 4 7 0 0 0 2 0 5 0 0 0 9 0 0 0 0 7 1 0 0 0 6 2 0 0 0 4 4 0 0 0 3 5 0 0 0 2 6 0 0 0 1 7 0 0 0 0 9 frobby-0.9.5/test/frob/bug12.multi000066400000000000000000000070371401527164200167240ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5]; p = x2^20*x3*x4*x5 + -x2^20*x3*x4 + -x2^20*x3*x5 + x2^20*x3 + -x2^20*x4*x5 + x2^20*x4 + x2^20*x5 + -x2^20 + x2^15*x3^3*x4*x5 + -x2^15*x3^3*x4 + -x2^15*x3^3*x5 + x2^15*x3^3 + -x2^15*x3*x4*x5 + x2^15*x3*x4 + x2^15*x3*x5 + -x2^15*x3 + x2^14*x3*x4*x5^4 + -x2^14*x3*x4*x5 + -x2^14*x3*x5^4 + x2^14*x3*x5 + -x2^14*x4*x5^4 + x2^14*x4*x5 + x2^14*x5^4 + -x2^14*x5 + x2^12*x3^6*x4*x5 + -x2^12*x3^6*x4 + -x2^12*x3^6*x5 + x2^12*x3^6 + -x2^12*x3^3*x4*x5 + x2^12*x3^3*x4 + x2^12*x3^3*x5 + -x2^12*x3^3 + x2^11*x3*x4*x5^7 + -x2^11*x3*x4*x5^4 + -x2^11*x3*x5^7 + x2^11*x3*x5^4 + -x2^11*x4*x5^7 + x2^11*x4*x5^4 + x2^11*x5^7 + -x2^11*x5^4 + x2^9*x3^10*x4*x5^2 + -x2^9*x3^10*x4 + -x2^9*x3^10*x5^2 + x2^9*x3^10 + -x2^9*x3^6*x4*x5 + x2^9*x3^6*x4 + x2^9*x3^6*x5 + -x2^9*x3^6 + -x2^9*x3*x4*x5^2 + x2^9*x3*x4*x5 + x2^9*x3*x5^2 + -x2^9*x3*x5 + x2^8*x3*x4*x5^8 + -x2^8*x3*x4*x5^7 + -x2^8*x3*x5^8 + x2^8*x3*x5^7 + -x2^8*x4*x5^8 + x2^8*x4*x5^7 + x2^8*x5^8 + -x2^8*x5^7 + x2^6*x3^9*x4^3*x5^2 + -x2^6*x3^9*x4^3 + -x2^6*x3^9*x4*x5^2 + x2^6*x3^9*x4 + x2^6*x3*x4^3*x5^6 + -x2^6*x3*x4^3*x5^2 + x2^6*x3*x4^2*x5^7 + -x2^6*x3*x4^2*x5^6 + -x2^6*x3*x4*x5^7 + x2^6*x3*x4*x5^2 + -x2^6*x4^3*x5^6 + x2^6*x4^3 + -x2^6*x4^2*x5^7 + x2^6*x4^2*x5^6 + x2^6*x4*x5^7 + -x2^6*x4 + x2^3*x3^10*x4*x5^5 + -x2^3*x3^10*x4*x5^2 + -x2^3*x3^10*x5^5 + x2^3*x3^10*x5^2 + x2^3*x3^9*x4^4*x5^4 + -x2^3*x3^9*x4^4 + x2^3*x3^9*x4^3*x5^5 + -x2^3*x3^9*x4^3*x5^4 + -x2^3*x3^9*x4^3*x5^2 + x2^3*x3^9*x4^3 + -x2^3*x3^9*x4*x5^5 + x2^3*x3^9*x4*x5^2 + x2^3*x3^8*x4^7*x5 + -x2^3*x3^8*x4^7 + x2^3*x3^8*x4^6*x5^2 + -x2^3*x3^8*x4^6*x5 + x2^3*x3^8*x4^5*x5^3 + -x2^3*x3^8*x4^5*x5^2 + -x2^3*x3^8*x4^4*x5^3 + x2^3*x3^8*x4^4 + x2^3*x3^6*x4^4*x5^5 + -x2^3*x3^6*x4^4*x5^4 + -x2^3*x3^6*x4^3*x5^5 + x2^3*x3^6*x4^3*x5^4 + x2^3*x3^5*x4^7*x5^2 + -x2^3*x3^5*x4^7*x5 + x2^3*x3^5*x4^6*x5^4 + -2*x2^3*x3^5*x4^6*x5^2 + x2^3*x3^5*x4^6*x5 + -x2^3*x3^5*x4^5*x5^3 + x2^3*x3^5*x4^5*x5^2 + -x2^3*x3^5*x4^4*x5^4 + x2^3*x3^5*x4^4*x5^3 + x2^3*x3^4*x4^9*x5 + -x2^3*x3^4*x4^9 + -x2^3*x3^4*x4^7*x5 + x2^3*x3^4*x4^7 + x2^3*x3^2*x4^3*x5^6 + -x2^3*x3^2*x4^3*x5^5 + x2^3*x3^2*x4^2*x5^7 + -x2^3*x3^2*x4^2*x5^6 + x2^3*x3^2*x4*x5^9 + -x2^3*x3^2*x4*x5^7 + -x2^3*x3^2*x5^9 + x2^3*x3^2*x5^5 + -x2^3*x3*x4^3*x5^6 + x2^3*x3*x4^3*x5^2 + -x2^3*x3*x4^2*x5^7 + x2^3*x3*x4^2*x5^6 + -x2^3*x3*x4*x5^8 + x2^3*x3*x4*x5^7 + x2^3*x3*x5^8 + -x2^3*x3*x5^2 + -x2^3*x4^9*x5 + x2^3*x4^9 + -x2^3*x4^7*x5^2 + x2^3*x4^7*x5 + -x2^3*x4^6*x5^4 + x2^3*x4^6*x5^2 + -x2^3*x4^4*x5^5 + x2^3*x4^4*x5^4 + x2^3*x4^3*x5^5 + -x2^3*x4^3 + -x2^3*x4*x5^9 + x2^3*x4*x5^8 + x2^3*x5^9 + -x2^3*x5^8 + -x3^10*x4*x5^5 + x3^10*x4 + x3^10*x5^5 + -x3^10 + -x3^9*x4^4*x5^4 + x3^9*x4^4 + -x3^9*x4^3*x5^5 + x3^9*x4^3*x5^4 + x3^9*x4*x5^5 + -x3^9*x4 + -x3^8*x4^7*x5 + x3^8*x4^7 + -x3^8*x4^6*x5^2 + x3^8*x4^6*x5 + -x3^8*x4^5*x5^3 + x3^8*x4^5*x5^2 + x3^8*x4^4*x5^3 + -x3^8*x4^4 + -x3^6*x4^4*x5^5 + x3^6*x4^4*x5^4 + x3^6*x4^3*x5^5 + -x3^6*x4^3*x5^4 + -x3^5*x4^7*x5^2 + x3^5*x4^7*x5 + -x3^5*x4^6*x5^4 + 2*x3^5*x4^6*x5^2 + -x3^5*x4^6*x5 + x3^5*x4^5*x5^3 + -x3^5*x4^5*x5^2 + x3^5*x4^4*x5^4 + -x3^5*x4^4*x5^3 + -x3^4*x4^9*x5 + x3^4*x4^9 + x3^4*x4^7*x5 + -x3^4*x4^7 + -x3^2*x4^3*x5^6 + x3^2*x4^3*x5^5 + -x3^2*x4^2*x5^7 + x3^2*x4^2*x5^6 + -x3^2*x4*x5^9 + x3^2*x4*x5^7 + x3^2*x5^9 + -x3^2*x5^5 + x4^9*x5 + -x4^9 + x4^7*x5^2 + -x4^7*x5 + x4^6*x5^4 + -x4^6*x5^2 + x4^4*x5^5 + -x4^4*x5^4 + x4^3*x5^6 + -x4^3*x5^5 + x4^2*x5^7 + -x4^2*x5^6 + x4*x5^9 + -x4*x5^7 + -x5^9 + 1; frobby-0.9.5/test/frob/bug12.opt_irr000066400000000000000000000000231401527164200172340ustar00rootroot000000000000001 5 0 20 1 1 1 23 frobby-0.9.5/test/frob/bug12.opt_irr_min000066400000000000000000000000351401527164200201020ustar00rootroot000000000000002 5 0 3 2 3 6 0 3 2 2 7 14 frobby-0.9.5/test/frob/bug12.opt_std000066400000000000000000000000211401527164200172300ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug12.opt_std_min000066400000000000000000000000211401527164200200730ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug12.primdecom000066400000000000000000000005121401527164200175400ustar00rootroot0000000000000029 5 0 20 0 0 0 0 15 1 0 0 0 14 0 0 1 0 12 3 0 0 0 11 0 0 4 0 9 6 0 0 0 9 1 0 1 0 8 0 0 7 0 6 0 1 0 0 3 1 0 2 0 3 0 3 0 0 3 0 0 8 0 0 10 0 0 0 0 9 1 0 0 0 8 4 0 0 0 6 3 4 0 0 5 6 1 0 0 5 5 2 0 0 5 4 3 0 0 4 7 0 0 0 2 0 5 0 0 0 9 0 0 0 0 7 1 0 0 0 6 2 0 0 0 4 4 0 0 0 3 5 0 0 0 2 6 0 0 0 1 7 0 0 0 0 9 frobby-0.9.5/test/frob/bug12.radical000066400000000000000000000000601401527164200171560ustar00rootroot000000000000004 5 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug12.test000066400000000000000000000007441401527164200165470ustar00rootroot0000000000000029 5 -29 15 1 0 0 -28 3 -2 0 8 -24 -5 5 6 1 -23 -8 6 3 4 -19 0 -3 2 6 -19 9 1 -1 1 -18 -3 -2 -1 9 -14 -11 5 5 2 -13 -5 10 -1 0 -11 0 -5 7 1 -10 -3 -4 4 4 -10 6 0 1 -1 -9 -6 -3 1 7 -9 3 1 -2 2 -8 0 2 -5 5 -8 9 6 -8 0 -6 14 -9 0 1 -5 -14 4 7 0 -5 -5 8 4 -5 -5 11 -8 -3 4 -5 20 -4 -6 -1 -4 -17 5 4 3 -4 -8 9 1 -2 -4 8 -7 -6 7 -2 -3 -6 9 -1 -1 -6 -5 6 2 -1 3 -1 3 -3 -1 12 3 0 -8 0 -9 -4 3 5 frobby-0.9.5/test/frob/bug12.uni000066400000000000000000000003051401527164200163540ustar00rootroot00000000000000R = QQ[t]; p = t^23 + -2*t^22 + 2*t^21 + 5*t^20 + -4*t^19 + -2*t^18 + -8*t^17 + 3*t^16 + 2*t^15 + 4*t^14 + -4*t^13 + t^12 + t^11 + 6*t^10 + 4*t^9 + -6*t^8 + -2*t^7 + -2*t^6 + 1; frobby-0.9.5/test/frob/bug13.alexdual000066400000000000000000000000371401527164200173630ustar00rootroot000000000000003 4 0 2 2 1 0 2 1 2 0 1 2 2 frobby-0.9.5/test/frob/bug13.assoprimes000066400000000000000000000000151401527164200177450ustar00rootroot000000000000001 4 0 1 1 1 frobby-0.9.5/test/frob/bug13.dim000066400000000000000000000000021401527164200163250ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug13.euler000066400000000000000000000000031401527164200166710ustar00rootroot00000000000000-1 frobby-0.9.5/test/frob/bug13.frobInstance000066400000000000000000000000141401527164200201740ustar00rootroot0000000000000017 47 52 57 frobby-0.9.5/test/frob/bug13.frobNumber000066400000000000000000000000041401527164200176570ustar00rootroot00000000000000191 frobby-0.9.5/test/frob/bug13.intersection000066400000000000000000000000721401527164200202710ustar00rootroot000000000000006 4 0 4 0 0 0 3 1 0 0 3 0 2 0 0 2 0 0 0 1 2 0 0 0 3 frobby-0.9.5/test/frob/bug13.irrdecom000066400000000000000000000001351401527164200173670ustar00rootroot000000000000003 4 0 4 0 0 0 0 1 0 0 0 0 2 3 4 0 3 0 0 0 0 2 0 0 0 0 2 3 4 0 3 0 0 0 0 1 0 0 0 0 3 frobby-0.9.5/test/frob/bug13.irrdecom_ideal000066400000000000000000000000371401527164200205260ustar00rootroot000000000000003 4 0 4 1 2 0 3 2 2 0 3 1 3 frobby-0.9.5/test/frob/bug13.maxstandard000066400000000000000000000000041401527164200200640ustar00rootroot000000000000000 4 frobby-0.9.5/test/frob/bug13.minimize000066400000000000000000000000721401527164200174040ustar00rootroot000000000000006 4 0 4 0 0 0 3 1 0 0 3 0 2 0 0 2 0 0 0 1 2 0 0 0 3 frobby-0.9.5/test/frob/bug13.multi000066400000000000000000000003621401527164200167170ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; p = -x2^4*x3*x4^2 + x2^4*x3 + x2^4*x4^2 + -x2^4 + -x2^3*x3^2*x4^2 + x2^3*x3^2 + -x2^3*x3*x4^3 + 2*x2^3*x3*x4^2 + -x2^3*x3 + x2^3*x4^3 + -x2^3*x4^2 + x3^2*x4^2 + -x3^2 + x3*x4^3 + -x3*x4^2 + -x4^3 + 1; frobby-0.9.5/test/frob/bug13.opt_irr000066400000000000000000000000411401527164200172350ustar00rootroot000000000000003 4 0 4 1 2 0 3 2 2 0 3 1 3 7 frobby-0.9.5/test/frob/bug13.opt_irr_min000066400000000000000000000000411401527164200201000ustar00rootroot000000000000003 4 0 4 1 2 0 3 2 2 0 3 1 3 7 frobby-0.9.5/test/frob/bug13.opt_std000066400000000000000000000000211401527164200172310ustar00rootroot000000000000000 4 no solution. frobby-0.9.5/test/frob/bug13.opt_std_min000066400000000000000000000000211401527164200200740ustar00rootroot000000000000000 4 no solution. frobby-0.9.5/test/frob/bug13.primdecom000066400000000000000000000000721401527164200175420ustar00rootroot000000000000006 4 0 4 0 0 0 3 1 0 0 3 0 2 0 0 2 0 0 0 1 2 0 0 0 3 frobby-0.9.5/test/frob/bug13.radical000066400000000000000000000000371401527164200171630ustar00rootroot000000000000003 4 0 1 0 0 0 0 1 0 0 0 0 1 frobby-0.9.5/test/frob/bug13.test000066400000000000000000000001231401527164200165370ustar00rootroot000000000000006 4 -15 3 0 2 -8 3 1 -1 -8 4 -1 0 -7 -1 1 2 -7 0 -1 3 0 -1 2 -1 frobby-0.9.5/test/frob/bug13.uni000066400000000000000000000000771401527164200163630ustar00rootroot00000000000000R = QQ[t]; p = -3*t^7 + 4*t^6 + t^5 + -2*t^3 + -t^2 + 1; frobby-0.9.5/test/frob/bug14.alexdual000066400000000000000000000012131401527164200173610ustar00rootroot0000000000000047 6 0 16 6 4 5 3 0 16 6 4 4 4 0 16 6 3 6 3 0 16 6 3 5 4 0 16 5 5 6 2 0 16 5 5 5 3 0 16 5 5 4 4 0 16 5 4 6 3 0 16 5 3 6 4 0 16 5 2 5 5 0 15 6 6 2 4 0 15 5 7 2 4 0 15 5 1 6 5 0 14 6 6 6 1 0 14 5 4 4 5 0 14 5 2 6 5 0 13 6 6 1 5 0 13 4 7 2 5 0 13 3 7 3 5 0 13 1 6 6 5 0 12 3 7 4 5 0 12 3 5 5 5 0 11 6 7 1 5 0 11 6 6 2 5 0 11 5 7 4 3 0 11 5 7 2 5 0 11 5 6 5 3 0 11 3 5 6 5 0 11 2 6 6 5 0 10 6 7 6 1 0 10 6 6 3 4 0 10 5 7 3 4 0 10 5 6 6 2 0 10 5 6 4 4 0 10 5 5 4 5 0 9 5 6 6 3 0 9 5 6 5 4 0 9 5 5 5 5 0 9 4 5 6 5 0 8 5 7 6 3 0 6 5 7 5 4 0 5 2 7 6 5 0 3 5 7 6 4 0 3 5 7 5 5 0 3 4 7 6 5 0 1 6 7 6 4 0 1 6 7 5 5 frobby-0.9.5/test/frob/bug14.assoprimes000066400000000000000000000000211401527164200177430ustar00rootroot000000000000001 6 0 1 1 1 1 1 frobby-0.9.5/test/frob/bug14.dim000066400000000000000000000000021401527164200163260ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug14.euler000066400000000000000000000000031401527164200166720ustar00rootroot00000000000000-1 frobby-0.9.5/test/frob/bug14.frobInstance000066400000000000000000000000351401527164200202000ustar00rootroot00000000000000655 1055 2246 2695 2828 3141 frobby-0.9.5/test/frob/bug14.frobNumber000066400000000000000000000000061401527164200176620ustar00rootroot0000000000000020039 frobby-0.9.5/test/frob/bug14.intersection000066400000000000000000000011541401527164200202740ustar00rootroot0000000000000047 6 0 16 0 0 0 0 0 14 1 0 0 0 0 12 3 0 0 0 0 11 0 0 1 1 0 9 0 0 0 2 0 8 0 1 0 0 0 7 0 0 2 0 0 7 0 0 0 3 0 6 3 1 0 0 0 6 0 0 4 0 0 6 0 0 1 2 0 5 2 0 1 0 0 4 5 0 0 0 0 4 2 0 3 0 0 4 0 1 5 0 0 3 0 3 0 0 0 3 0 1 0 4 0 2 0 6 0 0 0 2 0 0 4 1 0 1 0 4 1 0 0 1 0 2 0 1 0 0 6 0 0 0 0 0 4 2 0 0 0 0 4 0 1 0 0 0 3 0 4 0 0 0 2 3 0 0 0 0 2 1 2 0 0 0 2 0 0 1 0 0 1 4 0 2 0 0 1 3 1 1 0 0 1 1 3 0 0 0 1 0 5 0 0 0 1 0 0 4 0 0 0 7 0 0 0 0 0 6 1 0 0 0 0 5 0 1 0 0 0 4 2 0 0 0 0 4 1 2 0 0 0 3 0 3 0 0 0 2 3 0 0 0 0 2 0 4 0 0 0 1 2 2 0 0 0 0 6 0 0 0 0 0 5 1 0 0 0 0 3 2 0 0 0 0 1 3 0 0 0 0 0 5 frobby-0.9.5/test/frob/bug14.irrdecom000066400000000000000000000062621401527164200173770ustar00rootroot000000000000005 6 0 16 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 5 6 0 16 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 2 5 6 0 14 0 0 0 0 0 0 3 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 5 6 0 14 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 5 6 0 14 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 2 5 6 0 12 0 0 0 0 0 0 5 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 5 6 0 11 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 2 5 6 0 9 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 3 5 6 0 8 0 0 0 0 0 0 3 0 0 0 0 0 0 3 0 0 0 0 0 0 1 0 0 0 0 0 0 1 5 6 0 8 0 0 0 0 0 0 2 0 0 0 0 0 0 3 0 0 0 0 0 0 2 0 0 0 0 0 0 1 5 6 0 8 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 2 5 6 0 8 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 3 5 6 0 7 0 0 0 0 0 0 2 0 0 0 0 0 0 3 0 0 0 0 0 0 3 0 0 0 0 0 0 1 5 6 0 7 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 3 0 0 0 0 0 0 2 5 6 0 7 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 4 5 6 0 7 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 4 0 0 0 0 0 0 2 5 6 0 7 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 4 0 0 0 0 0 0 2 5 6 0 7 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 5 5 6 0 6 0 0 0 0 0 0 5 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 1 5 6 0 6 0 0 0 0 0 0 4 0 0 0 0 0 0 3 0 0 0 0 0 0 1 0 0 0 0 0 0 1 5 6 0 6 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 3 5 6 0 6 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 5 0 0 0 0 0 0 1 5 6 0 6 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 3 0 0 0 0 0 0 3 5 6 0 6 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 5 0 0 0 0 0 0 1 5 6 0 6 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 6 0 0 0 0 0 0 1 5 6 0 5 0 0 0 0 0 0 4 0 0 0 0 0 0 3 0 0 0 0 0 0 2 0 0 0 0 0 0 1 5 6 0 5 0 0 0 0 0 0 4 0 0 0 0 0 0 1 0 0 0 0 0 0 3 0 0 0 0 0 0 1 5 6 0 4 0 0 0 0 0 0 6 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 1 5 6 0 4 0 0 0 0 0 0 4 0 0 0 0 0 0 1 0 0 0 0 0 0 4 0 0 0 0 0 0 1 5 6 0 4 0 0 0 0 0 0 3 0 0 0 0 0 0 1 0 0 0 0 0 0 5 0 0 0 0 0 0 1 5 6 0 4 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 6 0 0 0 0 0 0 1 5 6 0 3 0 0 0 0 0 0 2 0 0 0 0 0 0 6 0 0 0 0 0 0 1 0 0 0 0 0 0 1 5 6 0 3 0 0 0 0 0 0 2 0 0 0 0 0 0 4 0 0 0 0 0 0 3 0 0 0 0 0 0 1 5 6 0 3 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 5 5 6 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 7 0 0 0 0 0 0 1 0 0 0 0 0 0 1 5 6 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 5 0 0 0 0 0 0 2 5 6 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 5 0 0 0 0 0 0 2 5 6 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 6 0 0 0 0 0 0 2 0 0 0 0 0 0 1 5 6 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 5 0 0 0 0 0 0 1 0 0 0 0 0 0 2 5 6 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 4 0 0 0 0 0 0 1 0 0 0 0 0 0 3 5 6 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 3 0 0 0 0 0 0 3 0 0 0 0 0 0 2 5 6 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 3 0 0 0 0 0 0 2 0 0 0 0 0 0 3 5 6 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 3 0 0 0 0 0 0 1 0 0 0 0 0 0 4 5 6 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 5 0 0 0 0 0 0 2 0 0 0 0 0 0 2 5 6 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 5 0 0 0 0 0 0 1 0 0 0 0 0 0 3 5 6 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 4 0 0 0 0 0 0 3 0 0 0 0 0 0 2 5 6 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 4 0 0 0 0 0 0 2 0 0 0 0 0 0 3 frobby-0.9.5/test/frob/bug14.irrdecom_ideal000066400000000000000000000011571401527164200205330ustar00rootroot0000000000000047 6 0 16 1 1 2 1 0 16 1 1 1 2 0 14 3 1 1 1 0 14 2 1 2 1 0 14 2 1 1 2 0 12 5 1 1 1 0 11 2 1 2 2 0 9 2 1 1 3 0 8 3 3 1 1 0 8 2 3 2 1 0 8 2 2 2 2 0 8 2 2 1 3 0 7 2 3 3 1 0 7 2 2 3 2 0 7 2 2 1 4 0 7 2 1 4 2 0 7 1 2 4 2 0 7 1 1 1 5 0 6 5 2 1 1 0 6 4 3 1 1 0 6 2 2 2 3 0 6 2 1 5 1 0 6 2 1 3 3 0 6 1 2 5 1 0 6 1 1 6 1 0 5 4 3 2 1 0 5 4 1 3 1 0 4 6 2 1 1 0 4 4 1 4 1 0 4 3 1 5 1 0 4 1 2 6 1 0 3 2 6 1 1 0 3 2 4 3 1 0 3 1 2 1 5 0 2 2 7 1 1 0 2 2 1 5 2 0 2 1 2 5 2 0 1 2 6 2 1 0 1 2 5 1 2 0 1 2 4 1 3 0 1 2 3 3 2 0 1 2 3 2 3 0 1 2 3 1 4 0 1 1 5 2 2 0 1 1 5 1 3 0 1 1 4 3 2 0 1 1 4 2 3 frobby-0.9.5/test/frob/bug14.maxstandard000066400000000000000000000000041401527164200200650ustar00rootroot000000000000000 6 frobby-0.9.5/test/frob/bug14.minimize000066400000000000000000000011541401527164200174070ustar00rootroot0000000000000047 6 0 16 0 0 0 0 0 14 1 0 0 0 0 12 3 0 0 0 0 11 0 0 1 1 0 9 0 0 0 2 0 8 0 1 0 0 0 7 0 0 2 0 0 7 0 0 0 3 0 6 3 1 0 0 0 6 0 0 4 0 0 6 0 0 1 2 0 5 2 0 1 0 0 4 5 0 0 0 0 4 2 0 3 0 0 4 0 1 5 0 0 3 0 3 0 0 0 3 0 1 0 4 0 2 0 6 0 0 0 2 0 0 4 1 0 1 0 4 1 0 0 1 0 2 0 1 0 0 6 0 0 0 0 0 4 2 0 0 0 0 4 0 1 0 0 0 3 0 4 0 0 0 2 3 0 0 0 0 2 1 2 0 0 0 2 0 0 1 0 0 1 4 0 2 0 0 1 3 1 1 0 0 1 1 3 0 0 0 1 0 5 0 0 0 1 0 0 4 0 0 0 7 0 0 0 0 0 6 1 0 0 0 0 5 0 1 0 0 0 4 2 0 0 0 0 4 1 2 0 0 0 3 0 3 0 0 0 2 3 0 0 0 0 2 0 4 0 0 0 1 2 2 0 0 0 0 6 0 0 0 0 0 5 1 0 0 0 0 3 2 0 0 0 0 1 3 0 0 0 0 0 5 frobby-0.9.5/test/frob/bug14.multi000066400000000000000000000336721401527164200167320ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6]; p = -x2^16*x3*x4*x5^2*x6 + x2^16*x3*x4*x5^2 + -x2^16*x3*x4*x5*x6^2 + x2^16*x3*x4*x5*x6 + x2^16*x3*x4*x6^2 + -x2^16*x3*x4 + x2^16*x3*x5^2*x6 + -x2^16*x3*x5^2 + x2^16*x3*x5*x6^2 + -x2^16*x3*x5*x6 + -x2^16*x3*x6^2 + x2^16*x3 + x2^16*x4*x5^2*x6 + -x2^16*x4*x5^2 + x2^16*x4*x5*x6^2 + -x2^16*x4*x5*x6 + -x2^16*x4*x6^2 + x2^16*x4 + -x2^16*x5^2*x6 + x2^16*x5^2 + -x2^16*x5*x6^2 + x2^16*x5*x6 + x2^16*x6^2 + -x2^16 + -x2^14*x3^3*x4*x5*x6 + x2^14*x3^3*x4*x5 + x2^14*x3^3*x4*x6 + -x2^14*x3^3*x4 + x2^14*x3^3*x5*x6 + -x2^14*x3^3*x5 + -x2^14*x3^3*x6 + x2^14*x3^3 + -x2^14*x3^2*x4*x5^2*x6 + x2^14*x3^2*x4*x5^2 + -x2^14*x3^2*x4*x5*x6^2 + 2*x2^14*x3^2*x4*x5*x6 + -x2^14*x3^2*x4*x5 + x2^14*x3^2*x4*x6^2 + -x2^14*x3^2*x4*x6 + x2^14*x3^2*x5^2*x6 + -x2^14*x3^2*x5^2 + x2^14*x3^2*x5*x6^2 + -2*x2^14*x3^2*x5*x6 + x2^14*x3^2*x5 + -x2^14*x3^2*x6^2 + x2^14*x3^2*x6 + x2^14*x3*x4*x5^2*x6 + -x2^14*x3*x4*x5^2 + x2^14*x3*x4*x5*x6^2 + -x2^14*x3*x4*x5*x6 + -x2^14*x3*x4*x6^2 + x2^14*x3*x4 + -x2^14*x3*x5^2*x6 + x2^14*x3*x5^2 + -x2^14*x3*x5*x6^2 + x2^14*x3*x5*x6 + x2^14*x3*x6^2 + -x2^14*x3 + -x2^12*x3^5*x4*x5*x6 + x2^12*x3^5*x4*x5 + x2^12*x3^5*x4*x6 + -x2^12*x3^5*x4 + x2^12*x3^5*x5*x6 + -x2^12*x3^5*x5 + -x2^12*x3^5*x6 + x2^12*x3^5 + x2^12*x3^3*x4*x5*x6 + -x2^12*x3^3*x4*x5 + -x2^12*x3^3*x4*x6 + x2^12*x3^3*x4 + -x2^12*x3^3*x5*x6 + x2^12*x3^3*x5 + x2^12*x3^3*x6 + -x2^12*x3^3 + -x2^11*x3^2*x4*x5^2*x6^2 + x2^11*x3^2*x4*x5^2*x6 + x2^11*x3^2*x4*x5*x6^2 + -x2^11*x3^2*x4*x5*x6 + x2^11*x3^2*x5^2*x6^2 + -x2^11*x3^2*x5^2*x6 + -x2^11*x3^2*x5*x6^2 + x2^11*x3^2*x5*x6 + x2^11*x4*x5^2*x6^2 + -x2^11*x4*x5^2*x6 + -x2^11*x4*x5*x6^2 + x2^11*x4*x5*x6 + -x2^11*x5^2*x6^2 + x2^11*x5^2*x6 + x2^11*x5*x6^2 + -x2^11*x5*x6 + -x2^9*x3^2*x4*x5*x6^3 + x2^9*x3^2*x4*x5*x6^2 + x2^9*x3^2*x4*x6^3 + -x2^9*x3^2*x4*x6^2 + x2^9*x3^2*x5*x6^3 + -x2^9*x3^2*x5*x6^2 + -x2^9*x3^2*x6^3 + x2^9*x3^2*x6^2 + x2^9*x4*x5*x6^3 + -x2^9*x4*x5*x6^2 + -x2^9*x4*x6^3 + x2^9*x4*x6^2 + -x2^9*x5*x6^3 + x2^9*x5*x6^2 + x2^9*x6^3 + -x2^9*x6^2 + -x2^8*x3^3*x4^3*x5*x6 + x2^8*x3^3*x4^3*x5 + x2^8*x3^3*x4^3*x6 + -x2^8*x3^3*x4^3 + x2^8*x3^3*x4*x5*x6 + -x2^8*x3^3*x4*x5 + -x2^8*x3^3*x4*x6 + x2^8*x3^3*x4 + -x2^8*x3^2*x4^3*x5^2*x6 + x2^8*x3^2*x4^3*x5^2 + x2^8*x3^2*x4^3*x5*x6 + -x2^8*x3^2*x4^3*x5 + -x2^8*x3^2*x4^2*x5^2*x6^2 + x2^8*x3^2*x4^2*x5^2*x6 + -x2^8*x3^2*x4^2*x5*x6^3 + x2^8*x3^2*x4^2*x5*x6^2 + x2^8*x3^2*x4^2*x6^3 + -x2^8*x3^2*x4^2*x6 + x2^8*x3^2*x4*x5^2*x6^2 + -x2^8*x3^2*x4*x5^2 + x2^8*x3^2*x4*x5*x6^3 + -x2^8*x3^2*x4*x5*x6^2 + -x2^8*x3^2*x4*x5*x6 + x2^8*x3^2*x4*x5 + -x2^8*x3^2*x4*x6^3 + x2^8*x3^2*x4*x6 + x2^8*x4^3*x5^2*x6 + -x2^8*x4^3*x5^2 + -x2^8*x4^3*x6 + x2^8*x4^3 + x2^8*x4^2*x5^2*x6^2 + -x2^8*x4^2*x5^2*x6 + x2^8*x4^2*x5*x6^3 + -x2^8*x4^2*x5*x6^2 + -x2^8*x4^2*x6^3 + x2^8*x4^2*x6 + -x2^8*x4*x5^2*x6^2 + x2^8*x4*x5^2 + -x2^8*x4*x5*x6^3 + x2^8*x4*x5*x6^2 + x2^8*x4*x6^3 + -x2^8*x4 + -x2^7*x3^2*x4^3*x5^3*x6 + x2^7*x3^2*x4^3*x5^3 + x2^7*x3^2*x4^3*x5^2*x6 + -x2^7*x3^2*x4^3*x5^2 + -x2^7*x3^2*x4^2*x5^3*x6^2 + x2^7*x3^2*x4^2*x5^3*x6 + x2^7*x3^2*x4^2*x5^2*x6^2 + -x2^7*x3^2*x4^2*x5^2*x6 + -x2^7*x3^2*x4^2*x5*x6^4 + x2^7*x3^2*x4^2*x5*x6^3 + x2^7*x3^2*x4^2*x6^4 + -x2^7*x3^2*x4^2*x6^3 + -x2^7*x3^2*x4*x5^4*x6^2 + x2^7*x3^2*x4*x5^4 + x2^7*x3^2*x4*x5^3*x6^2 + -x2^7*x3^2*x4*x5^3 + x2^7*x3^2*x5^4*x6^2 + -x2^7*x3^2*x5^4 + -x2^7*x3^2*x5^2*x6^2 + x2^7*x3^2*x5^2 + x2^7*x3^2*x5*x6^4 + -x2^7*x3^2*x5*x6^3 + -x2^7*x3^2*x6^4 + x2^7*x3^2*x6^3 + -x2^7*x3*x4^2*x5^4*x6^2 + x2^7*x3*x4^2*x5^4 + x2^7*x3*x4^2*x5^3*x6^2 + -x2^7*x3*x4^2*x5^3 + x2^7*x3*x4*x5^4*x6^2 + -x2^7*x3*x4*x5^4 + -x2^7*x3*x4*x5^3*x6^2 + x2^7*x3*x4*x5^3 + -x2^7*x3*x4*x5*x6^5 + x2^7*x3*x4*x5*x6^4 + x2^7*x3*x4*x6^5 + -x2^7*x3*x4*x6^4 + x2^7*x3*x5*x6^5 + -x2^7*x3*x5*x6^4 + -x2^7*x3*x6^5 + x2^7*x3*x6^4 + x2^7*x4^3*x5^3*x6 + -x2^7*x4^3*x5^3 + -x2^7*x4^3*x5^2*x6 + x2^7*x4^3*x5^2 + x2^7*x4^2*x5^4*x6^2 + -x2^7*x4^2*x5^4 + -x2^7*x4^2*x5^3*x6 + x2^7*x4^2*x5^3 + -x2^7*x4^2*x5^2*x6^2 + x2^7*x4^2*x5^2*x6 + x2^7*x4^2*x5*x6^4 + -x2^7*x4^2*x5*x6^3 + -x2^7*x4^2*x6^4 + x2^7*x4^2*x6^3 + x2^7*x4*x5*x6^5 + -x2^7*x4*x5*x6^4 + -x2^7*x4*x6^5 + x2^7*x4*x6^4 + -x2^7*x5^4*x6^2 + x2^7*x5^4 + x2^7*x5^2*x6^2 + -x2^7*x5^2 + -x2^7*x5*x6^5 + x2^7*x5*x6^3 + x2^7*x6^5 + -x2^7*x6^3 + -x2^6*x3^5*x4^2*x5*x6 + x2^6*x3^5*x4^2*x5 + x2^6*x3^5*x4^2*x6 + -x2^6*x3^5*x4^2 + x2^6*x3^5*x4*x5*x6 + -x2^6*x3^5*x4*x5 + -x2^6*x3^5*x4*x6 + x2^6*x3^5*x4 + -x2^6*x3^4*x4^3*x5*x6 + x2^6*x3^4*x4^3*x5 + x2^6*x3^4*x4^3*x6 + -x2^6*x3^4*x4^3 + x2^6*x3^4*x4^2*x5*x6 + -x2^6*x3^4*x4^2*x5 + -x2^6*x3^4*x4^2*x6 + x2^6*x3^4*x4^2 + x2^6*x3^3*x4^3*x5*x6 + -x2^6*x3^3*x4^3*x5 + -x2^6*x3^3*x4^3*x6 + x2^6*x3^3*x4^3 + -x2^6*x3^3*x4*x5*x6 + x2^6*x3^3*x4*x5 + x2^6*x3^3*x4*x6 + -x2^6*x3^3*x4 + -x2^6*x3^2*x4^2*x5^2*x6^3 + x2^6*x3^2*x4^2*x5^2*x6^2 + x2^6*x3^2*x4^2*x5*x6^3 + -x2^6*x3^2*x4^2*x5*x6^2 + -x2^6*x3^2*x4*x5^5*x6 + x2^6*x3^2*x4*x5^5 + x2^6*x3^2*x4*x5^4*x6 + -x2^6*x3^2*x4*x5^4 + -x2^6*x3^2*x4*x5^3*x6^3 + x2^6*x3^2*x4*x5^3*x6^2 + x2^6*x3^2*x4*x5^2*x6^3 + -x2^6*x3^2*x4*x5^2*x6^2 + x2^6*x3^2*x5^5*x6 + -x2^6*x3^2*x5^5 + -x2^6*x3^2*x5^4*x6 + x2^6*x3^2*x5^4 + x2^6*x3^2*x5^3*x6^3 + -x2^6*x3^2*x5^3*x6^2 + -x2^6*x3^2*x5*x6^3 + x2^6*x3^2*x5*x6^2 + -x2^6*x3*x4^2*x5^5*x6 + x2^6*x3*x4^2*x5^5 + x2^6*x3*x4^2*x5^4*x6 + -x2^6*x3*x4^2*x5^4 + -x2^6*x3*x4*x5^6*x6 + x2^6*x3*x4*x5^6 + 2*x2^6*x3*x4*x5^5*x6 + -2*x2^6*x3*x4*x5^5 + -x2^6*x3*x4*x5^4*x6 + x2^6*x3*x4*x5^4 + x2^6*x3*x5^6*x6 + -x2^6*x3*x5^6 + -x2^6*x3*x5^5*x6 + x2^6*x3*x5^5 + x2^6*x4^2*x5^5*x6 + -x2^6*x4^2*x5^5 + -x2^6*x4^2*x5^4*x6 + x2^6*x4^2*x5^4 + x2^6*x4^2*x5^2*x6^3 + -x2^6*x4^2*x5^2*x6^2 + -x2^6*x4^2*x5*x6^3 + x2^6*x4^2*x5*x6^2 + x2^6*x4*x5^6*x6 + -x2^6*x4*x5^6 + -x2^6*x4*x5^5*x6 + x2^6*x4*x5^5 + x2^6*x4*x5^3*x6^3 + -x2^6*x4*x5^3*x6^2 + -x2^6*x4*x5^2*x6^3 + x2^6*x4*x5^2*x6^2 + -x2^6*x5^6*x6 + x2^6*x5^6 + x2^6*x5^4*x6 + -x2^6*x5^4 + -x2^6*x5^3*x6^3 + x2^6*x5^3*x6^2 + x2^6*x5*x6^3 + -x2^6*x5*x6^2 + -x2^5*x3^4*x4^3*x5^2*x6 + x2^5*x3^4*x4^3*x5^2 + x2^5*x3^4*x4^3*x5*x6 + -x2^5*x3^4*x4^3*x5 + -x2^5*x3^4*x4*x5^3*x6 + x2^5*x3^4*x4*x5^3 + x2^5*x3^4*x4*x5^2*x6 + -x2^5*x3^4*x4*x5^2 + x2^5*x3^4*x5^3*x6 + -x2^5*x3^4*x5^3 + -x2^5*x3^4*x5*x6 + x2^5*x3^4*x5 + x2^5*x3^2*x4^3*x5^2*x6 + -x2^5*x3^2*x4^3*x5^2 + -x2^5*x3^2*x4^3*x5*x6 + x2^5*x3^2*x4^3*x5 + x2^5*x3^2*x4*x5^3*x6 + -x2^5*x3^2*x4*x5^3 + -x2^5*x3^2*x4*x5^2*x6 + x2^5*x3^2*x4*x5^2 + -x2^5*x3^2*x5^3*x6 + x2^5*x3^2*x5^3 + x2^5*x3^2*x5*x6 + -x2^5*x3^2*x5 + -x2^4*x3^6*x4^2*x5*x6 + x2^4*x3^6*x4^2*x5 + x2^4*x3^6*x4^2*x6 + -x2^4*x3^6*x4^2 + x2^4*x3^6*x5*x6 + -x2^4*x3^6*x5 + -x2^4*x3^6*x6 + x2^4*x3^6 + x2^4*x3^5*x4^2*x5*x6 + -x2^4*x3^5*x4^2*x5 + -x2^4*x3^5*x4^2*x6 + x2^4*x3^5*x4^2 + -x2^4*x3^5*x5*x6 + x2^4*x3^5*x5 + x2^4*x3^5*x6 + -x2^4*x3^5 + -x2^4*x3^4*x4*x5^4*x6 + x2^4*x3^4*x4*x5^4 + x2^4*x3^4*x4*x5^3*x6 + -x2^4*x3^4*x4*x5^3 + x2^4*x3^4*x5^4*x6 + -x2^4*x3^4*x5^4 + -x2^4*x3^4*x5^3*x6 + x2^4*x3^4*x5^3 + -x2^4*x3^3*x4*x5^5*x6 + x2^4*x3^3*x4*x5^5 + x2^4*x3^3*x4*x5^4*x6 + -x2^4*x3^3*x4*x5^4 + x2^4*x3^3*x5^5*x6 + -x2^4*x3^3*x5^5 + -x2^4*x3^3*x5^4*x6 + x2^4*x3^3*x5^4 + x2^4*x3^2*x4*x5^5*x6 + -x2^4*x3^2*x4*x5^5 + -x2^4*x3^2*x4*x5^3*x6 + x2^4*x3^2*x4*x5^3 + -x2^4*x3^2*x5^5*x6 + x2^4*x3^2*x5^5 + x2^4*x3^2*x5^3*x6 + -x2^4*x3^2*x5^3 + -x2^4*x3*x4^2*x5^6*x6 + x2^4*x3*x4^2*x5^6 + x2^4*x3*x4^2*x5^5*x6 + -x2^4*x3*x4^2*x5^5 + x2^4*x3*x4*x5^6*x6 + -x2^4*x3*x4*x5^6 + -x2^4*x3*x4*x5^5*x6 + x2^4*x3*x4*x5^5 + x2^4*x4^2*x5^6*x6 + -x2^4*x4^2*x5^6 + -x2^4*x4^2*x5^5*x6 + x2^4*x4^2*x5^5 + -x2^4*x4*x5^6*x6 + x2^4*x4*x5^6 + x2^4*x4*x5^5*x6 + -x2^4*x4*x5^5 + -x2^3*x3^2*x4^6*x5*x6 + x2^3*x3^2*x4^6*x5 + x2^3*x3^2*x4^6*x6 + -x2^3*x3^2*x4^6 + -x2^3*x3^2*x4^4*x5^3*x6 + x2^3*x3^2*x4^4*x5^3 + x2^3*x3^2*x4^4*x5*x6 + -x2^3*x3^2*x4^4*x5 + x2^3*x3^2*x4^3*x5^3*x6 + -x2^3*x3^2*x4^3*x5^3 + -x2^3*x3^2*x4^3*x6 + x2^3*x3^2*x4^3 + -x2^3*x3*x4^2*x5*x6^5 + x2^3*x3*x4^2*x5*x6^4 + x2^3*x3*x4^2*x6^5 + -x2^3*x3*x4^2*x6^4 + x2^3*x3*x4*x5*x6^5 + -x2^3*x3*x4*x5*x6^4 + -x2^3*x3*x4*x6^5 + x2^3*x3*x4*x6^4 + x2^3*x4^6*x5*x6 + -x2^3*x4^6*x5 + -x2^3*x4^6*x6 + x2^3*x4^6 + x2^3*x4^4*x5^3*x6 + -x2^3*x4^4*x5^3 + -x2^3*x4^4*x5*x6 + x2^3*x4^4*x5 + -x2^3*x4^3*x5^3*x6 + x2^3*x4^3*x5^3 + x2^3*x4^3*x6 + -x2^3*x4^3 + x2^3*x4^2*x5*x6^5 + -x2^3*x4^2*x5*x6^4 + -x2^3*x4^2*x6^5 + x2^3*x4^2*x6^4 + -x2^3*x4*x5*x6^5 + x2^3*x4*x5*x6^4 + x2^3*x4*x6^5 + -x2^3*x4*x6^4 + -x2^2*x3^2*x4^7*x5*x6 + x2^2*x3^2*x4^7*x5 + x2^2*x3^2*x4^7*x6 + -x2^2*x3^2*x4^7 + x2^2*x3^2*x4^6*x5*x6 + -x2^2*x3^2*x4^6*x5 + -x2^2*x3^2*x4^6*x6 + x2^2*x3^2*x4^6 + -x2^2*x3^2*x4*x5^5*x6^2 + x2^2*x3^2*x4*x5^5*x6 + x2^2*x3^2*x4*x5^4*x6^2 + -x2^2*x3^2*x4*x5^4*x6 + x2^2*x3^2*x5^5*x6^2 + -x2^2*x3^2*x5^5*x6 + -x2^2*x3^2*x5^4*x6^2 + x2^2*x3^2*x5^4*x6 + -x2^2*x3*x4^2*x5^5*x6^2 + x2^2*x3*x4^2*x5^5*x6 + x2^2*x3*x4^2*x5^4*x6^2 + -x2^2*x3*x4^2*x5^4*x6 + x2^2*x3*x4*x5^5*x6^2 + -x2^2*x3*x4*x5^5*x6 + -x2^2*x3*x4*x5^4*x6^2 + x2^2*x3*x4*x5^4*x6 + x2^2*x4^7*x5*x6 + -x2^2*x4^7*x5 + -x2^2*x4^7*x6 + x2^2*x4^7 + -x2^2*x4^6*x5*x6 + x2^2*x4^6*x5 + x2^2*x4^6*x6 + -x2^2*x4^6 + x2^2*x4^2*x5^5*x6^2 + -x2^2*x4^2*x5^5*x6 + -x2^2*x4^2*x5^4*x6^2 + x2^2*x4^2*x5^4*x6 + -x2^2*x5^5*x6^2 + x2^2*x5^5*x6 + x2^2*x5^4*x6^2 + -x2^2*x5^4*x6 + -x2*x3^2*x4^6*x5^2*x6 + x2*x3^2*x4^6*x5^2 + x2*x3^2*x4^6*x5*x6 + -x2*x3^2*x4^6*x5 + -x2*x3^2*x4^5*x5*x6^2 + x2*x3^2*x4^5*x5*x6 + x2*x3^2*x4^5*x6^2 + -x2*x3^2*x4^5*x6 + x2*x3^2*x4^4*x5^2*x6 + -x2*x3^2*x4^4*x5^2 + -x2*x3^2*x4^4*x5*x6^3 + x2*x3^2*x4^4*x5*x6^2 + -x2*x3^2*x4^4*x5*x6 + x2*x3^2*x4^4*x5 + x2*x3^2*x4^4*x6^3 + -x2*x3^2*x4^4*x6^2 + -x2*x3^2*x4^3*x5^3*x6^2 + x2*x3^2*x4^3*x5^3*x6 + -x2*x3^2*x4^3*x5^2*x6^3 + x2*x3^2*x4^3*x5^2*x6^2 + -x2*x3^2*x4^3*x5*x6^4 + 2*x2*x3^2*x4^3*x5*x6^3 + -x2*x3^2*x4^3*x5*x6 + x2*x3^2*x4^3*x6^4 + -x2*x3^2*x4^3*x6^3 + x2*x3^2*x4^2*x5^3*x6^2 + -x2*x3^2*x4^2*x5^3*x6 + x2*x3^2*x4^2*x5^2*x6^3 + -x2*x3^2*x4^2*x5^2*x6^2 + x2*x3^2*x4^2*x5*x6^4 + -x2*x3^2*x4^2*x5*x6^3 + -x2*x3^2*x4^2*x6^4 + x2*x3^2*x4^2*x6 + -x2*x3*x4^5*x5^2*x6^2 + x2*x3*x4^5*x5^2*x6 + -x2*x3*x4^5*x5*x6^3 + 2*x2*x3*x4^5*x5*x6^2 + -x2*x3*x4^5*x5*x6 + x2*x3*x4^5*x6^3 + -x2*x3*x4^5*x6^2 + -x2*x3*x4^4*x5^3*x6^2 + x2*x3*x4^4*x5^3*x6 + -x2*x3*x4^4*x5^2*x6^3 + 2*x2*x3*x4^4*x5^2*x6^2 + -x2*x3*x4^4*x5^2*x6 + 2*x2*x3*x4^4*x5*x6^3 + -2*x2*x3*x4^4*x5*x6^2 + -x2*x3*x4^4*x6^3 + x2*x3*x4^4*x6^2 + x2*x3*x4^3*x5^3*x6^2 + -x2*x3*x4^3*x5^3*x6 + x2*x3*x4^3*x5^2*x6^3 + -x2*x3*x4^3*x5^2*x6^2 + -x2*x3*x4^3*x5*x6^3 + x2*x3*x4^3*x5*x6 + x2*x4^6*x5^2*x6 + -x2*x4^6*x5^2 + -x2*x4^6*x5*x6 + x2*x4^6*x5 + x2*x4^5*x5^2*x6^2 + -x2*x4^5*x5^2*x6 + x2*x4^5*x5*x6^3 + -x2*x4^5*x5*x6^2 + -x2*x4^5*x6^3 + x2*x4^5*x6 + x2*x4^4*x5^3*x6^2 + -x2*x4^4*x5^3*x6 + x2*x4^4*x5^2*x6^3 + -2*x2*x4^4*x5^2*x6^2 + x2*x4^4*x5^2 + -x2*x4^4*x5*x6^3 + x2*x4^4*x5*x6^2 + x2*x4^4*x5*x6 + -x2*x4^4*x5 + x2*x4^3*x5*x6^4 + -x2*x4^3*x5*x6^3 + -x2*x4^3*x6^4 + x2*x4^3*x6^3 + -x2*x4^2*x5^3*x6^2 + x2*x4^2*x5^3*x6 + -x2*x4^2*x5^2*x6^3 + x2*x4^2*x5^2*x6^2 + -x2*x4^2*x5*x6^4 + x2*x4^2*x5*x6^3 + x2*x4^2*x6^4 + -x2*x4^2*x6 + x3^6*x4^2*x5*x6 + -x3^6*x4^2*x5 + -x3^6*x4^2*x6 + x3^6*x4^2 + -x3^6*x5*x6 + x3^6*x5 + x3^6*x6 + -x3^6 + x3^4*x4^3*x5^2*x6 + -x3^4*x4^3*x5^2 + -x3^4*x4^3*x6 + x3^4*x4^3 + -x3^4*x4^2*x5*x6 + x3^4*x4^2*x5 + x3^4*x4^2*x6 + -x3^4*x4^2 + x3^4*x4*x5^4*x6 + -x3^4*x4*x5^4 + -x3^4*x4*x5^2*x6 + x3^4*x4*x5^2 + -x3^4*x5^4*x6 + x3^4*x5^4 + x3^4*x5*x6 + -x3^4*x5 + x3^3*x4*x5^5*x6 + -x3^3*x4*x5^5 + -x3^3*x4*x5^4*x6 + x3^3*x4*x5^4 + -x3^3*x5^5*x6 + x3^3*x5^5 + x3^3*x5^4*x6 + -x3^3*x5^4 + x3^2*x4^7*x5*x6 + -x3^2*x4^7*x5 + -x3^2*x4^7*x6 + x3^2*x4^7 + x3^2*x4^6*x5^2*x6 + -x3^2*x4^6*x5^2 + -x3^2*x4^6*x5*x6 + x3^2*x4^6*x5 + x3^2*x4^5*x5*x6^2 + -x3^2*x4^5*x5*x6 + -x3^2*x4^5*x6^2 + x3^2*x4^5*x6 + x3^2*x4^4*x5^3*x6 + -x3^2*x4^4*x5^3 + -x3^2*x4^4*x5^2*x6 + x3^2*x4^4*x5^2 + x3^2*x4^4*x5*x6^3 + -x3^2*x4^4*x5*x6^2 + -x3^2*x4^4*x6^3 + x3^2*x4^4*x6^2 + x3^2*x4^3*x5^3*x6^2 + -x3^2*x4^3*x5^3*x6 + x3^2*x4^3*x5^2*x6^3 + -x3^2*x4^3*x5^2*x6^2 + -x3^2*x4^3*x5^2*x6 + x3^2*x4^3*x5^2 + x3^2*x4^3*x5*x6^4 + -2*x3^2*x4^3*x5*x6^3 + x3^2*x4^3*x5*x6 + -x3^2*x4^3*x6^4 + x3^2*x4^3*x6^3 + x3^2*x4^3*x6 + -x3^2*x4^3 + x3^2*x4*x5^5*x6^2 + -x3^2*x4*x5^5*x6 + x3^2*x4*x5^3*x6^3 + -2*x3^2*x4*x5^3*x6^2 + x3^2*x4*x5^3 + -x3^2*x4*x5^2*x6^3 + x3^2*x4*x5^2*x6^2 + x3^2*x4*x5^2*x6 + -x3^2*x4*x5^2 + -x3^2*x5^5*x6^2 + x3^2*x5^5*x6 + -x3^2*x5^3*x6^3 + x3^2*x5^3*x6^2 + -x3^2*x5*x6^4 + x3^2*x5*x6^3 + x3^2*x6^4 + -x3^2*x6 + x3*x4^5*x5^2*x6^2 + -x3*x4^5*x5^2*x6 + x3*x4^5*x5*x6^3 + -2*x3*x4^5*x5*x6^2 + x3*x4^5*x5*x6 + -x3*x4^5*x6^3 + x3*x4^5*x6^2 + x3*x4^4*x5^3*x6^2 + -x3*x4^4*x5^3*x6 + x3*x4^4*x5^2*x6^3 + -2*x3*x4^4*x5^2*x6^2 + x3*x4^4*x5^2*x6 + -2*x3*x4^4*x5*x6^3 + 2*x3*x4^4*x5*x6^2 + x3*x4^4*x6^3 + -x3*x4^4*x6^2 + -x3*x4^3*x5^3*x6^2 + x3*x4^3*x5^3*x6 + -x3*x4^3*x5^2*x6^3 + x3*x4^3*x5^2*x6^2 + x3*x4^3*x5*x6^3 + -x3*x4^3*x5*x6 + x3*x4^2*x5^6*x6 + -x3*x4^2*x5^6 + x3*x4^2*x5^5*x6^2 + -x3*x4^2*x5^5*x6 + -x3*x4^2*x5^3*x6^2 + x3*x4^2*x5^3 + x3*x4^2*x5*x6^5 + -x3*x4^2*x5*x6^4 + -x3*x4^2*x6^5 + x3*x4^2*x6^4 + -x3*x4*x5^5*x6^2 + x3*x4*x5^5 + x3*x4*x5^3*x6^2 + -x3*x4*x5^3 + -x3*x5^6*x6 + x3*x5^6 + x3*x5^5*x6 + -x3*x5^5 + -x3*x5*x6^5 + x3*x5*x6^4 + x3*x6^5 + -x3*x6^4 + -x4^7*x5*x6 + x4^7*x5 + x4^7*x6 + -x4^7 + -x4^6*x5^2*x6 + x4^6*x5^2 + x4^6*x5*x6 + -x4^6*x5 + -x4^5*x5^2*x6^2 + x4^5*x5^2*x6 + -x4^5*x5*x6^3 + x4^5*x5*x6^2 + x4^5*x6^3 + -x4^5*x6 + -x4^4*x5^3*x6^2 + x4^4*x5^3 + -x4^4*x5^2*x6^3 + 2*x4^4*x5^2*x6^2 + -x4^4*x5^2 + x4^4*x5*x6^3 + -x4^4*x5*x6^2 + -x4^3*x5*x6^4 + x4^3*x5*x6^3 + x4^3*x6^4 + -x4^3*x6^3 + -x4^2*x5^6*x6 + x4^2*x5^6 + -x4^2*x5^5*x6^2 + x4^2*x5^5*x6 + x4^2*x5^3*x6^2 + -x4^2*x5^3 + -x4^2*x5*x6^5 + x4^2*x5*x6^4 + x4^2*x6^5 + -x4^2*x6^4 + -x4*x5^3*x6^3 + x4*x5^3*x6^2 + x4*x5^2*x6^3 + -x4*x5^2*x6^2 + x5^6*x6 + -x5^6 + x5^5*x6^2 + -x5^5*x6 + x5^3*x6^3 + -x5^3*x6^2 + x5*x6^5 + -x5*x6^3 + -x6^5 + 1; frobby-0.9.5/test/frob/bug14.opt_irr000066400000000000000000000000431401527164200172400ustar00rootroot000000000000002 6 0 16 1 1 2 1 0 16 1 1 1 2 21 frobby-0.9.5/test/frob/bug14.opt_irr_min000066400000000000000000000001741401527164200201100ustar00rootroot000000000000009 6 0 1 2 5 1 2 0 1 2 4 1 3 0 1 2 3 3 2 0 1 2 3 2 3 0 1 2 3 1 4 0 1 1 5 2 2 0 1 1 5 1 3 0 1 1 4 3 2 0 1 1 4 2 3 11 frobby-0.9.5/test/frob/bug14.opt_std000066400000000000000000000000211401527164200172320ustar00rootroot000000000000000 6 no solution. frobby-0.9.5/test/frob/bug14.opt_std_min000066400000000000000000000000211401527164200200750ustar00rootroot000000000000000 6 no solution. frobby-0.9.5/test/frob/bug14.primdecom000066400000000000000000000011541401527164200175450ustar00rootroot0000000000000047 6 0 16 0 0 0 0 0 14 1 0 0 0 0 12 3 0 0 0 0 11 0 0 1 1 0 9 0 0 0 2 0 8 0 1 0 0 0 7 0 0 2 0 0 7 0 0 0 3 0 6 3 1 0 0 0 6 0 0 4 0 0 6 0 0 1 2 0 5 2 0 1 0 0 4 5 0 0 0 0 4 2 0 3 0 0 4 0 1 5 0 0 3 0 3 0 0 0 3 0 1 0 4 0 2 0 6 0 0 0 2 0 0 4 1 0 1 0 4 1 0 0 1 0 2 0 1 0 0 6 0 0 0 0 0 4 2 0 0 0 0 4 0 1 0 0 0 3 0 4 0 0 0 2 3 0 0 0 0 2 1 2 0 0 0 2 0 0 1 0 0 1 4 0 2 0 0 1 3 1 1 0 0 1 1 3 0 0 0 1 0 5 0 0 0 1 0 0 4 0 0 0 7 0 0 0 0 0 6 1 0 0 0 0 5 0 1 0 0 0 4 2 0 0 0 0 4 1 2 0 0 0 3 0 3 0 0 0 2 3 0 0 0 0 2 0 4 0 0 0 1 2 2 0 0 0 0 6 0 0 0 0 0 5 1 0 0 0 0 3 2 0 0 0 0 1 3 0 0 0 0 0 5 frobby-0.9.5/test/frob/bug14.radical000066400000000000000000000001051401527164200171600ustar00rootroot000000000000005 6 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug14.test000066400000000000000000000016241401527164200165470ustar00rootroot0000000000000047 6 -21 -1 1 0 0 4 -17 -4 3 -1 4 0 -17 -2 1 0 5 -1 -17 8 0 1 0 0 -15 0 -1 -1 3 2 -15 2 -3 0 4 1 -15 4 -5 1 5 0 -14 2 0 6 -1 -2 -12 -8 1 3 1 1 -12 -6 -1 4 2 0 -11 5 2 -2 1 0 -11 7 0 -1 2 -1 -10 -6 -1 2 -1 4 -10 -4 -3 3 0 3 -10 -2 -5 4 1 2 -9 -1 -1 -3 5 1 -9 7 0 -3 -1 3 -9 9 -2 -2 0 2 -9 11 -4 -1 1 1 -8 -3 4 2 -1 -1 -8 -1 2 3 0 -2 -8 1 0 4 1 -3 -7 12 3 -2 0 -3 -6 -9 1 1 3 0 -6 1 0 2 -2 1 -6 3 -2 3 -1 0 -5 4 2 -4 3 -1 -5 6 0 -3 4 -2 -5 14 1 -3 -2 0 -5 16 -1 -2 -1 -1 -4 -7 -1 0 1 3 -4 -5 -3 1 2 2 -4 3 -2 1 -4 4 -3 -5 0 7 -3 -1 -3 6 0 -5 1 2 -2 -6 6 -1 0 -1 -2 -4 4 0 1 -2 -2 -3 -5 0 0 5 -2 -2 2 1 2 -3 -2 0 0 2 3 -4 -2 4 5 0 -5 0 -2 6 3 1 -4 -1 -1 -15 1 4 -1 2 -1 -13 -1 5 0 1 -1 -11 -3 6 1 0 0 -8 -1 0 6 -2 0 -2 2 -1 -1 1 frobby-0.9.5/test/frob/bug14.uni000066400000000000000000000003311401527164200163550ustar00rootroot00000000000000R = QQ[t]; p = -2*t^21 + 3*t^20 + 6*t^19 + -15*t^18 + 9*t^17 + -9*t^16 + 10*t^15 + 26*t^14 + -44*t^13 + 2*t^12 + 19*t^11 + 25*t^10 + -60*t^9 + 15*t^8 + 24*t^7 + 2*t^6 + -9*t^5 + -2*t^4 + -t^3 + 1; frobby-0.9.5/test/frob/bug15.alexdual000066400000000000000000000001341401527164200173630ustar00rootroot000000000000008 5 0 8 7 2 1 0 8 7 1 3 0 8 2 2 4 0 8 1 4 3 0 5 7 3 1 0 5 2 4 3 0 5 2 3 4 0 1 3 4 4 frobby-0.9.5/test/frob/bug15.assoprimes000066400000000000000000000000171401527164200177510ustar00rootroot000000000000001 5 0 1 1 1 1 frobby-0.9.5/test/frob/bug15.dim000066400000000000000000000000021401527164200163270ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug15.euler000066400000000000000000000000021401527164200166720ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug15.frobInstance000066400000000000000000000000271401527164200202020ustar00rootroot00000000000000125 919 1749 2228 2530 frobby-0.9.5/test/frob/bug15.frobNumber000066400000000000000000000000061401527164200176630ustar00rootroot0000000000000013907 frobby-0.9.5/test/frob/bug15.intersection000066400000000000000000000002371401527164200202760ustar00rootroot0000000000000014 5 0 8 0 0 0 0 4 5 0 0 0 4 0 1 0 0 4 0 0 1 0 1 6 0 0 0 1 0 2 0 0 0 7 0 0 0 0 6 1 0 0 0 1 3 0 0 0 1 1 1 0 0 1 0 2 0 0 0 4 0 0 0 0 3 2 0 0 0 0 4 frobby-0.9.5/test/frob/bug15.irrdecom000066400000000000000000000006001401527164200173660ustar00rootroot000000000000004 5 0 8 0 0 0 0 0 5 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 4 0 0 0 0 0 6 0 0 0 0 0 2 0 0 0 0 0 1 4 5 0 4 0 0 0 0 0 6 0 0 0 0 0 1 0 0 0 0 0 2 4 5 0 4 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 4 4 5 0 1 0 0 0 0 0 7 0 0 0 0 0 1 0 0 0 0 0 2 4 5 0 1 0 0 0 0 0 6 0 0 0 0 0 3 0 0 0 0 0 1 4 5 0 1 0 0 0 0 0 1 0 0 0 0 0 4 0 0 0 0 0 2 4 5 0 1 0 0 0 0 0 1 0 0 0 0 0 3 0 0 0 0 0 4 frobby-0.9.5/test/frob/bug15.irrdecom_ideal000066400000000000000000000001341401527164200205260ustar00rootroot000000000000008 5 0 8 5 1 1 0 4 6 2 1 0 4 6 1 2 0 4 1 2 4 0 1 7 1 2 0 1 6 3 1 0 1 1 4 2 0 1 1 3 4 frobby-0.9.5/test/frob/bug15.maxstandard000066400000000000000000000000041401527164200200660ustar00rootroot000000000000000 5 frobby-0.9.5/test/frob/bug15.minimize000066400000000000000000000002371401527164200174110ustar00rootroot0000000000000014 5 0 8 0 0 0 0 4 5 0 0 0 4 0 1 0 0 4 0 0 1 0 1 6 0 0 0 1 0 2 0 0 0 7 0 0 0 0 6 1 0 0 0 1 3 0 0 0 1 1 1 0 0 1 0 2 0 0 0 4 0 0 0 0 3 2 0 0 0 0 4 frobby-0.9.5/test/frob/bug15.multi000066400000000000000000000023411401527164200167200ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5]; p = x2^8*x3^5*x4*x5 + -x2^8*x3^5*x4 + -x2^8*x3^5*x5 + x2^8*x3^5 + -x2^8*x4*x5 + x2^8*x4 + x2^8*x5 + -x2^8 + x2^4*x3^6*x4^2*x5 + -x2^4*x3^6*x4^2 + x2^4*x3^6*x4*x5^2 + -x2^4*x3^6*x4*x5 + -x2^4*x3^6*x5^2 + x2^4*x3^6 + -x2^4*x3^5*x4*x5 + x2^4*x3^5*x4 + x2^4*x3^5*x5 + -x2^4*x3^5 + x2^4*x3*x4^2*x5^4 + -x2^4*x3*x4^2*x5 + -x2^4*x3*x4*x5^2 + x2^4*x3*x4*x5 + -x2^4*x3*x5^4 + x2^4*x3*x5^2 + -x2^4*x4^2*x5^4 + x2^4*x4^2 + x2^4*x4*x5 + -x2^4*x4 + x2^4*x5^4 + -x2^4*x5 + x2*x3^7*x4*x5^2 + -x2*x3^7*x4 + -x2*x3^7*x5^2 + x2*x3^7 + x2*x3^6*x4^3*x5 + -x2*x3^6*x4^3 + -x2*x3^6*x4^2*x5 + x2*x3^6*x4^2 + -x2*x3^6*x4*x5^2 + x2*x3^6*x4 + x2*x3^6*x5^2 + -x2*x3^6 + x2*x3*x4^4*x5^2 + -x2*x3*x4^4 + x2*x3*x4^3*x5^4 + -x2*x3*x4^3*x5^2 + -x2*x3*x4^3*x5 + x2*x3*x4^3 + -x2*x3*x4^2*x5^4 + x2*x3*x4^2*x5 + -x2*x4^4*x5^2 + x2*x4^4 + -x2*x4^3*x5^4 + x2*x4^3*x5^2 + x2*x4^2*x5^4 + -x2*x4^2 + -x3^7*x4*x5^2 + x3^7*x4 + x3^7*x5^2 + -x3^7 + -x3^6*x4^3*x5 + x3^6*x4^3 + x3^6*x4*x5 + -x3^6*x4 + -x3*x4^4*x5^2 + x3*x4^4 + -x3*x4^3*x5^4 + x3*x4^3*x5^2 + x3*x4^3*x5 + -x3*x4^3 + x3*x4*x5^2 + -x3*x4*x5 + x3*x5^4 + -x3*x5^2 + x4^4*x5^2 + -x4^4 + x4^3*x5^4 + -x4^3*x5^2 + -x5^4 + 1; frobby-0.9.5/test/frob/bug15.opt_irr000066400000000000000000000000221401527164200172360ustar00rootroot000000000000001 5 0 8 5 1 1 15 frobby-0.9.5/test/frob/bug15.opt_irr_min000066400000000000000000000000211401527164200201000ustar00rootroot000000000000001 5 0 1 1 4 2 8 frobby-0.9.5/test/frob/bug15.opt_std000066400000000000000000000000211401527164200172330ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug15.opt_std_min000066400000000000000000000000211401527164200200760ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug15.primdecom000066400000000000000000000002371401527164200175470ustar00rootroot0000000000000014 5 0 8 0 0 0 0 4 5 0 0 0 4 0 1 0 0 4 0 0 1 0 1 6 0 0 0 1 0 2 0 0 0 7 0 0 0 0 6 1 0 0 0 1 3 0 0 0 1 1 1 0 0 1 0 2 0 0 0 4 0 0 0 0 3 2 0 0 0 0 4 frobby-0.9.5/test/frob/bug15.radical000066400000000000000000000000601401527164200171610ustar00rootroot000000000000004 5 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug15.test000066400000000000000000000003611401527164200165450ustar00rootroot0000000000000014 5 -63 -2 7 0 -1 -43 1 0 2 0 -33 1 6 -1 -2 -30 -3 1 1 1 -29 -3 0 4 -1 -27 8 -1 -1 0 -19 -3 6 1 -3 -16 -7 1 3 0 -14 4 0 -2 1 -13 4 -1 1 -1 -11 0 -5 0 4 -10 0 -6 3 2 -3 4 5 -2 -3 -1 0 1 -3 2 frobby-0.9.5/test/frob/bug15.uni000066400000000000000000000002111401527164200163530ustar00rootroot00000000000000R = QQ[t]; p = t^15 + -2*t^14 + 3*t^13 + -3*t^12 + 2*t^11 + -5*t^10 + 4*t^9 + -2*t^7 + 3*t^6 + 3*t^5 + -2*t^4 + -3*t^3 + 1; frobby-0.9.5/test/frob/bug16.alexdual000066400000000000000000000005551401527164200173730ustar00rootroot0000000000000030 5 0 15 12 8 1 0 15 10 8 2 0 15 9 8 3 0 14 9 8 7 0 13 6 8 8 0 12 4 8 9 0 12 3 9 9 0 11 1 9 10 0 9 12 1 11 0 8 9 3 11 0 7 6 5 11 0 6 11 5 11 0 6 6 8 9 0 6 4 8 10 0 6 3 7 11 0 5 8 8 9 0 5 8 7 11 0 5 3 9 10 0 5 1 9 11 0 4 9 8 8 0 4 5 9 10 0 3 6 9 9 0 2 12 8 7 0 2 10 8 8 0 2 9 9 8 0 2 9 8 10 0 2 7 9 9 0 1 12 5 11 0 1 9 7 11 0 1 6 9 11 frobby-0.9.5/test/frob/bug16.assoprimes000066400000000000000000000000171401527164200177520ustar00rootroot000000000000001 5 0 1 1 1 1 frobby-0.9.5/test/frob/bug16.dim000066400000000000000000000000021401527164200163300ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug16.euler000066400000000000000000000000021401527164200166730ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug16.frobInstance000066400000000000000000000000311401527164200201760ustar00rootroot000000000000001508 1537 2669 3000 3544 frobby-0.9.5/test/frob/bug16.frobNumber000066400000000000000000000000061401527164200176640ustar00rootroot0000000000000045890 frobby-0.9.5/test/frob/bug16.intersection000066400000000000000000000005521401527164200202770ustar00rootroot0000000000000031 5 0 15 0 0 0 0 14 0 0 1 0 13 7 0 1 0 12 8 0 0 0 12 4 1 2 0 11 9 0 0 0 11 5 1 0 0 10 6 1 0 0 10 2 3 0 0 9 3 3 0 0 8 0 5 0 0 7 0 7 0 0 5 11 0 1 0 4 8 0 2 0 3 5 0 3 0 2 2 0 4 0 1 0 0 5 0 0 13 0 0 0 0 11 1 0 0 0 11 0 2 0 0 10 1 1 0 0 8 3 0 0 0 8 0 3 0 0 5 5 0 0 0 5 0 4 0 0 4 0 9 0 0 2 7 0 0 0 2 0 10 0 0 0 9 0 0 0 0 2 1 0 0 0 0 11 frobby-0.9.5/test/frob/bug16.irrdecom000066400000000000000000000026741401527164200174040ustar00rootroot000000000000004 5 0 15 0 0 0 0 0 8 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 15 0 0 0 0 0 5 0 0 0 0 0 3 0 0 0 0 0 1 4 5 0 15 0 0 0 0 0 2 0 0 0 0 0 5 0 0 0 0 0 1 4 5 0 14 0 0 0 0 0 7 0 0 0 0 0 1 0 0 0 0 0 3 4 5 0 14 0 0 0 0 0 5 0 0 0 0 0 2 0 0 0 0 0 2 4 5 0 14 0 0 0 0 0 5 0 0 0 0 0 1 0 0 0 0 0 4 4 5 0 14 0 0 0 0 0 4 0 0 0 0 0 2 0 0 0 0 0 4 4 5 0 14 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 5 4 5 0 13 0 0 0 0 0 8 0 0 0 0 0 1 0 0 0 0 0 3 4 5 0 12 0 0 0 0 0 9 0 0 0 0 0 1 0 0 0 0 0 2 4 5 0 12 0 0 0 0 0 5 0 0 0 0 0 2 0 0 0 0 0 4 4 5 0 11 0 0 0 0 0 13 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 11 0 0 0 0 0 11 0 0 0 0 0 1 0 0 0 0 0 2 4 5 0 11 0 0 0 0 0 6 0 0 0 0 0 3 0 0 0 0 0 1 4 5 0 11 0 0 0 0 0 6 0 0 0 0 0 2 0 0 0 0 0 3 4 5 0 10 0 0 0 0 0 11 0 0 0 0 0 3 0 0 0 0 0 1 4 5 0 10 0 0 0 0 0 10 0 0 0 0 0 2 0 0 0 0 0 2 4 5 0 10 0 0 0 0 0 8 0 0 0 0 0 2 0 0 0 0 0 3 4 5 0 10 0 0 0 0 0 3 0 0 0 0 0 5 0 0 0 0 0 1 4 5 0 9 0 0 0 0 0 8 0 0 0 0 0 5 0 0 0 0 0 1 4 5 0 8 0 0 0 0 0 5 0 0 0 0 0 7 0 0 0 0 0 1 4 5 0 7 0 0 0 0 0 2 0 0 0 0 0 9 0 0 0 0 0 1 4 5 0 5 0 0 0 0 0 13 0 0 0 0 0 1 0 0 0 0 0 2 4 5 0 4 0 0 0 0 0 11 0 0 0 0 0 1 0 0 0 0 0 3 4 5 0 4 0 0 0 0 0 10 0 0 0 0 0 2 0 0 0 0 0 3 4 5 0 3 0 0 0 0 0 8 0 0 0 0 0 2 0 0 0 0 0 4 4 5 0 2 0 0 0 0 0 5 0 0 0 0 0 2 0 0 0 0 0 5 4 5 0 1 0 0 0 0 0 5 0 0 0 0 0 2 0 0 0 0 0 9 4 5 0 1 0 0 0 0 0 4 0 0 0 0 0 2 0 0 0 0 0 10 4 5 0 1 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 11 frobby-0.9.5/test/frob/bug16.irrdecom_ideal000066400000000000000000000005531401527164200205340ustar00rootroot0000000000000030 5 0 15 8 1 1 0 15 5 3 1 0 15 2 5 1 0 14 7 1 3 0 14 5 2 2 0 14 5 1 4 0 14 4 2 4 0 14 2 2 5 0 13 8 1 3 0 12 9 1 2 0 12 5 2 4 0 11 13 1 1 0 11 11 1 2 0 11 6 3 1 0 11 6 2 3 0 10 11 3 1 0 10 10 2 2 0 10 8 2 3 0 10 3 5 1 0 9 8 5 1 0 8 5 7 1 0 7 2 9 1 0 5 13 1 2 0 4 11 1 3 0 4 10 2 3 0 3 8 2 4 0 2 5 2 5 0 1 5 2 9 0 1 4 2 10 0 1 2 2 11 frobby-0.9.5/test/frob/bug16.maxstandard000066400000000000000000000000041401527164200200670ustar00rootroot000000000000000 5 frobby-0.9.5/test/frob/bug16.minimize000066400000000000000000000005521401527164200174120ustar00rootroot0000000000000031 5 0 15 0 0 0 0 14 0 0 1 0 13 7 0 1 0 12 8 0 0 0 12 4 1 2 0 11 9 0 0 0 11 5 1 0 0 10 6 1 0 0 10 2 3 0 0 9 3 3 0 0 8 0 5 0 0 7 0 7 0 0 5 11 0 1 0 4 8 0 2 0 3 5 0 3 0 2 2 0 4 0 1 0 0 5 0 0 13 0 0 0 0 11 1 0 0 0 11 0 2 0 0 10 1 1 0 0 8 3 0 0 0 8 0 3 0 0 5 5 0 0 0 5 0 4 0 0 4 0 9 0 0 2 7 0 0 0 2 0 10 0 0 0 9 0 0 0 0 2 1 0 0 0 0 11 frobby-0.9.5/test/frob/bug16.multi000066400000000000000000000110071401527164200167200ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5]; p = x2^15*x3^8*x4*x5 + -x2^15*x3^8*x4 + -x2^15*x3^8*x5 + x2^15*x3^8 + x2^15*x3^5*x4^3*x5 + -x2^15*x3^5*x4^3 + -x2^15*x3^5*x4*x5 + x2^15*x3^5*x4 + x2^15*x3^2*x4^5*x5 + -x2^15*x3^2*x4^5 + -x2^15*x3^2*x4^3*x5 + x2^15*x3^2*x4^3 + -x2^15*x4^5*x5 + x2^15*x4^5 + x2^15*x5 + -x2^15 + x2^14*x3^7*x4*x5^3 + -x2^14*x3^7*x4*x5 + -x2^14*x3^7*x5^3 + x2^14*x3^7*x5 + x2^14*x3^5*x4^2*x5^2 + -x2^14*x3^5*x4^2*x5 + x2^14*x3^5*x4*x5^4 + -x2^14*x3^5*x4*x5^3 + -x2^14*x3^5*x4*x5^2 + x2^14*x3^5*x4*x5 + -x2^14*x3^5*x5^4 + x2^14*x3^5*x5^3 + x2^14*x3^4*x4^2*x5^4 + -x2^14*x3^4*x4^2*x5^2 + -x2^14*x3^4*x4*x5^4 + x2^14*x3^4*x4*x5^2 + x2^14*x3^2*x4^2*x5^5 + -x2^14*x3^2*x4^2*x5^4 + -x2^14*x3^2*x5^5 + x2^14*x3^2*x5^4 + -x2^14*x4^2*x5^5 + x2^14*x4^2*x5 + x2^14*x5^5 + -x2^14*x5 + x2^13*x3^8*x4*x5^3 + -x2^13*x3^8*x4*x5 + -x2^13*x3^8*x5^3 + x2^13*x3^8*x5 + -x2^13*x3^7*x4*x5^3 + x2^13*x3^7*x4*x5 + x2^13*x3^7*x5^3 + -x2^13*x3^7*x5 + x2^12*x3^9*x4*x5^2 + -x2^12*x3^9*x4 + -x2^12*x3^9*x5^2 + x2^12*x3^9 + -x2^12*x3^8*x4*x5^2 + x2^12*x3^8*x4 + x2^12*x3^8*x5^2 + -x2^12*x3^8 + x2^12*x3^5*x4^2*x5^4 + -x2^12*x3^5*x4^2*x5^2 + -x2^12*x3^5*x4*x5^4 + x2^12*x3^5*x4*x5^2 + -x2^12*x3^4*x4^2*x5^4 + x2^12*x3^4*x4^2*x5^2 + x2^12*x3^4*x4*x5^4 + -x2^12*x3^4*x4*x5^2 + x2^11*x3^13*x4*x5 + -x2^11*x3^13*x4 + -x2^11*x3^13*x5 + x2^11*x3^13 + x2^11*x3^11*x4*x5^2 + -x2^11*x3^11*x4*x5 + -x2^11*x3^11*x5^2 + x2^11*x3^11*x5 + -x2^11*x3^9*x4*x5^2 + x2^11*x3^9*x4 + x2^11*x3^9*x5^2 + -x2^11*x3^9 + x2^11*x3^6*x4^3*x5 + -x2^11*x3^6*x4^3 + x2^11*x3^6*x4^2*x5^3 + -x2^11*x3^6*x4^2*x5 + -x2^11*x3^6*x4*x5^3 + x2^11*x3^6*x4 + -x2^11*x3^5*x4^3*x5 + x2^11*x3^5*x4^3 + -x2^11*x3^5*x4^2*x5^3 + x2^11*x3^5*x4^2*x5 + x2^11*x3^5*x4*x5^3 + -x2^11*x3^5*x4 + x2^10*x3^11*x4^3*x5 + -x2^10*x3^11*x4^3 + -x2^10*x3^11*x4*x5 + x2^10*x3^11*x4 + x2^10*x3^10*x4^2*x5^2 + -x2^10*x3^10*x4^2*x5 + -x2^10*x3^10*x4*x5^2 + x2^10*x3^10*x4*x5 + x2^10*x3^8*x4^2*x5^3 + -x2^10*x3^8*x4^2*x5^2 + -x2^10*x3^8*x4*x5^3 + x2^10*x3^8*x4*x5^2 + -x2^10*x3^6*x4^3*x5 + x2^10*x3^6*x4^3 + -x2^10*x3^6*x4^2*x5^3 + x2^10*x3^6*x4^2*x5 + x2^10*x3^6*x4*x5^3 + -x2^10*x3^6*x4 + x2^10*x3^3*x4^5*x5 + -x2^10*x3^3*x4^5 + -x2^10*x3^3*x4^3*x5 + x2^10*x3^3*x4^3 + -x2^10*x3^2*x4^5*x5 + x2^10*x3^2*x4^5 + x2^10*x3^2*x4^3*x5 + -x2^10*x3^2*x4^3 + x2^9*x3^8*x4^5*x5 + -x2^9*x3^8*x4^5 + -x2^9*x3^8*x4^3*x5 + x2^9*x3^8*x4^3 + -x2^9*x3^3*x4^5*x5 + x2^9*x3^3*x4^5 + x2^9*x3^3*x4^3*x5 + -x2^9*x3^3*x4^3 + x2^8*x3^5*x4^7*x5 + -x2^8*x3^5*x4^7 + -x2^8*x3^5*x4^5*x5 + x2^8*x3^5*x4^5 + -x2^8*x4^7*x5 + x2^8*x4^7 + x2^8*x4^5*x5 + -x2^8*x4^5 + x2^7*x3^2*x4^9*x5 + -x2^7*x3^2*x4^9 + -x2^7*x3^2*x4^7*x5 + x2^7*x3^2*x4^7 + -x2^7*x4^9*x5 + x2^7*x4^9 + x2^7*x4^7*x5 + -x2^7*x4^7 + x2^5*x3^13*x4*x5^2 + -x2^5*x3^13*x4*x5 + -x2^5*x3^13*x5^2 + x2^5*x3^13*x5 + -x2^5*x3^11*x4*x5^2 + x2^5*x3^11*x4*x5 + x2^5*x3^11*x5^2 + -x2^5*x3^11*x5 + x2^4*x3^11*x4*x5^3 + -x2^4*x3^11*x4*x5^2 + -x2^4*x3^11*x5^3 + x2^4*x3^11*x5^2 + x2^4*x3^10*x4^2*x5^3 + -x2^4*x3^10*x4^2*x5^2 + -x2^4*x3^10*x4*x5^3 + x2^4*x3^10*x4*x5^2 + -x2^4*x3^8*x4^2*x5^3 + x2^4*x3^8*x4^2*x5^2 + x2^4*x3^8*x5^3 + -x2^4*x3^8*x5^2 + x2^3*x3^8*x4^2*x5^4 + -x2^3*x3^8*x4^2*x5^3 + -x2^3*x3^8*x5^4 + x2^3*x3^8*x5^3 + -x2^3*x3^5*x4^2*x5^4 + x2^3*x3^5*x4^2*x5^3 + x2^3*x3^5*x5^4 + -x2^3*x3^5*x5^3 + x2^2*x3^5*x4^2*x5^5 + -x2^2*x3^5*x4^2*x5^4 + -x2^2*x3^5*x5^5 + x2^2*x3^5*x5^4 + -x2^2*x3^2*x4^2*x5^5 + x2^2*x3^2*x4^2*x5^4 + x2^2*x3^2*x5^5 + -x2^2*x3^2*x5^4 + x2*x3^5*x4^2*x5^9 + -x2*x3^5*x4^2*x5^5 + -x2*x3^5*x5^9 + x2*x3^5*x5^5 + x2*x3^4*x4^2*x5^10 + -x2*x3^4*x4^2*x5^9 + -x2*x3^4*x5^10 + x2*x3^4*x5^9 + x2*x3^2*x4^2*x5^11 + -x2*x3^2*x4^2*x5^10 + -x2*x3^2*x5^11 + x2*x3^2*x5^10 + -x2*x4^2*x5^11 + x2*x4^2*x5^5 + x2*x5^11 + -x2*x5^5 + -x3^13*x4*x5^2 + x3^13*x4 + x3^13*x5^2 + -x3^13 + -x3^11*x4^3*x5 + x3^11*x4^3 + -x3^11*x4*x5^3 + x3^11*x4*x5^2 + x3^11*x4*x5 + -x3^11*x4 + x3^11*x5^3 + -x3^11*x5^2 + -x3^10*x4^2*x5^3 + x3^10*x4^2*x5 + x3^10*x4*x5^3 + -x3^10*x4*x5 + -x3^8*x4^5*x5 + x3^8*x4^5 + x3^8*x4^3*x5 + -x3^8*x4^3 + -x3^8*x4^2*x5^4 + x3^8*x4^2*x5^3 + x3^8*x5^4 + -x3^8*x5^3 + -x3^5*x4^7*x5 + x3^5*x4^7 + x3^5*x4^5*x5 + -x3^5*x4^5 + -x3^5*x4^2*x5^9 + x3^5*x4^2*x5^4 + x3^5*x5^9 + -x3^5*x5^4 + -x3^4*x4^2*x5^10 + x3^4*x4^2*x5^9 + x3^4*x5^10 + -x3^4*x5^9 + -x3^2*x4^9*x5 + x3^2*x4^9 + x3^2*x4^7*x5 + -x3^2*x4^7 + -x3^2*x4^2*x5^11 + x3^2*x4^2*x5^10 + x3^2*x5^11 + -x3^2*x5^10 + x4^9*x5 + -x4^9 + x4^2*x5^11 + -x4^2*x5 + -x5^11 + 1; frobby-0.9.5/test/frob/bug16.opt_irr000066400000000000000000000000241401527164200172410ustar00rootroot000000000000001 5 0 11 13 1 1 26 frobby-0.9.5/test/frob/bug16.opt_irr_min000066400000000000000000000000221401527164200201020ustar00rootroot000000000000001 5 0 2 5 2 5 14 frobby-0.9.5/test/frob/bug16.opt_std000066400000000000000000000000211401527164200172340ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug16.opt_std_min000066400000000000000000000000211401527164200200770ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug16.primdecom000066400000000000000000000005521401527164200175500ustar00rootroot0000000000000031 5 0 15 0 0 0 0 14 0 0 1 0 13 7 0 1 0 12 8 0 0 0 12 4 1 2 0 11 9 0 0 0 11 5 1 0 0 10 6 1 0 0 10 2 3 0 0 9 3 3 0 0 8 0 5 0 0 7 0 7 0 0 5 11 0 1 0 4 8 0 2 0 3 5 0 3 0 2 2 0 4 0 1 0 0 5 0 0 13 0 0 0 0 11 1 0 0 0 11 0 2 0 0 10 1 1 0 0 8 3 0 0 0 8 0 3 0 0 5 5 0 0 0 5 0 4 0 0 4 0 9 0 0 2 7 0 0 0 2 0 10 0 0 0 9 0 0 0 0 2 1 0 0 0 0 11 frobby-0.9.5/test/frob/bug16.radical000066400000000000000000000000601401527164200171620ustar00rootroot000000000000004 5 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug16.test000066400000000000000000000010061401527164200165430ustar00rootroot0000000000000031 5 -26 12 4 1 2 -26 13 7 -1 1 -20 -2 10 1 1 -20 -1 13 -1 0 -16 -12 4 0 9 -15 10 2 3 -2 -15 11 5 1 -3 -15 12 8 -1 -4 -11 1 -1 0 5 -11 2 2 -2 4 -11 3 5 -4 3 -11 4 8 -6 2 -11 5 11 -8 1 -9 -7 -1 9 0 -9 -6 2 7 -1 -9 -5 5 5 -2 -9 -4 8 3 -3 -9 -3 11 1 -4 -7 -7 -1 -5 11 -7 -6 2 -7 10 -6 14 -6 0 1 -6 15 -3 -2 0 -5 -13 5 0 4 -5 -12 8 -2 3 -5 -11 11 -4 2 -4 7 -3 7 -5 -4 8 0 5 -6 -4 9 3 3 -7 -4 10 6 1 -8 -4 11 9 -1 -9 0 -1 -3 2 1 frobby-0.9.5/test/frob/bug16.uni000066400000000000000000000002771401527164200163700ustar00rootroot00000000000000R = QQ[t]; p = t^26 + 3*t^25 + -2*t^24 + -3*t^23 + -3*t^22 + t^21 + -t^20 + 7*t^19 + -4*t^18 + t^17 + 2*t^16 + -7*t^15 + 5*t^14 + t^13 + 2*t^10 + -2*t^9 + -t^6 + -t^3 + 1; frobby-0.9.5/test/frob/bug17.alexdual000066400000000000000000000000131401527164200173610ustar00rootroot000000000000001 3 0 1 1 frobby-0.9.5/test/frob/bug17.assoprimes000066400000000000000000000000131401527164200177470ustar00rootroot000000000000001 3 0 1 1 frobby-0.9.5/test/frob/bug17.dim000066400000000000000000000000021401527164200163310ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug17.euler000066400000000000000000000000021401527164200166740ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug17.frobInstance000066400000000000000000000000101401527164200201740ustar00rootroot000000000000006 10 15 frobby-0.9.5/test/frob/bug17.frobNumber000066400000000000000000000000031401527164200176620ustar00rootroot0000000000000029 frobby-0.9.5/test/frob/bug17.intersection000066400000000000000000000000221401527164200202700ustar00rootroot000000000000002 3 0 3 0 0 0 2 frobby-0.9.5/test/frob/bug17.irrdecom000066400000000000000000000000221401527164200173660ustar00rootroot000000000000002 3 0 3 0 0 0 2 frobby-0.9.5/test/frob/bug17.irrdecom_ideal000066400000000000000000000000131401527164200205240ustar00rootroot000000000000001 3 0 3 2 frobby-0.9.5/test/frob/bug17.maxstandard000066400000000000000000000000041401527164200200700ustar00rootroot000000000000000 3 frobby-0.9.5/test/frob/bug17.minimize000066400000000000000000000000221401527164200174030ustar00rootroot000000000000002 3 0 3 0 0 0 2 frobby-0.9.5/test/frob/bug17.multi000066400000000000000000000000731401527164200167220ustar00rootroot00000000000000R = QQ[x1, x2, x3]; p = x2^3*x3^2 + -x2^3 + -x3^2 + 1; frobby-0.9.5/test/frob/bug17.opt_irr000066400000000000000000000000151401527164200172420ustar00rootroot000000000000001 3 0 3 2 5 frobby-0.9.5/test/frob/bug17.opt_irr_min000066400000000000000000000000151401527164200201050ustar00rootroot000000000000001 3 0 3 2 5 frobby-0.9.5/test/frob/bug17.opt_std000066400000000000000000000000211401527164200172350ustar00rootroot000000000000000 3 no solution. frobby-0.9.5/test/frob/bug17.opt_std_min000066400000000000000000000000211401527164200201000ustar00rootroot000000000000000 3 no solution. frobby-0.9.5/test/frob/bug17.primdecom000066400000000000000000000000221401527164200175410ustar00rootroot000000000000002 3 0 3 0 0 0 2 frobby-0.9.5/test/frob/bug17.radical000066400000000000000000000000221401527164200171610ustar00rootroot000000000000002 3 0 1 0 0 0 1 frobby-0.9.5/test/frob/bug17.test000066400000000000000000000000301401527164200165400ustar00rootroot000000000000002 3 -5 0 2 -5 3 0 frobby-0.9.5/test/frob/bug17.uni000066400000000000000000000000521401527164200163600ustar00rootroot00000000000000R = QQ[t]; p = t^5 + -t^3 + -t^2 + 1; frobby-0.9.5/test/frob/bug18.alexdual000066400000000000000000000000111401527164200173600ustar00rootroot000000000000001 2 0 1 frobby-0.9.5/test/frob/bug18.assoprimes000066400000000000000000000000111401527164200177460ustar00rootroot000000000000001 2 0 1 frobby-0.9.5/test/frob/bug18.dim000066400000000000000000000000021401527164200163320ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug18.euler000066400000000000000000000000031401527164200166760ustar00rootroot00000000000000-1 frobby-0.9.5/test/frob/bug18.frobInstance000066400000000000000000000000121401527164200201770ustar00rootroot000000000000001000 3333 frobby-0.9.5/test/frob/bug18.frobNumber000066400000000000000000000000101401527164200176610ustar00rootroot000000000000003328667 frobby-0.9.5/test/frob/bug18.intersection000066400000000000000000000000141401527164200202720ustar00rootroot000000000000001 2 0 1000 frobby-0.9.5/test/frob/bug18.irrdecom000066400000000000000000000000141401527164200173700ustar00rootroot000000000000001 2 0 1000 frobby-0.9.5/test/frob/bug18.irrdecom_ideal000066400000000000000000000000141401527164200205260ustar00rootroot000000000000001 2 0 1000 frobby-0.9.5/test/frob/bug18.maxstandard000066400000000000000000000000041401527164200200710ustar00rootroot000000000000000 2 frobby-0.9.5/test/frob/bug18.minimize000066400000000000000000000000141401527164200174050ustar00rootroot000000000000001 2 0 1000 frobby-0.9.5/test/frob/bug18.multi000066400000000000000000000000441401527164200167210ustar00rootroot00000000000000R = QQ[x1, x2]; p = -x2^1000 + 1; frobby-0.9.5/test/frob/bug18.opt_irr000066400000000000000000000000211401527164200172400ustar00rootroot000000000000001 2 0 1000 1000 frobby-0.9.5/test/frob/bug18.opt_irr_min000066400000000000000000000000211401527164200201030ustar00rootroot000000000000001 2 0 1000 1000 frobby-0.9.5/test/frob/bug18.opt_std000066400000000000000000000000211401527164200172360ustar00rootroot000000000000000 2 no solution. frobby-0.9.5/test/frob/bug18.opt_std_min000066400000000000000000000000211401527164200201010ustar00rootroot000000000000000 2 no solution. frobby-0.9.5/test/frob/bug18.primdecom000066400000000000000000000000141401527164200175430ustar00rootroot000000000000001 2 0 1000 frobby-0.9.5/test/frob/bug18.radical000066400000000000000000000000111401527164200171600ustar00rootroot000000000000001 2 0 1 frobby-0.9.5/test/frob/bug18.test000066400000000000000000000000201401527164200165400ustar00rootroot000000000000001 2 -3333 1000 frobby-0.9.5/test/frob/bug18.uni000066400000000000000000000000361401527164200163630ustar00rootroot00000000000000R = QQ[t]; p = -t^1000 + 1; frobby-0.9.5/test/frob/bug19.alexdual000066400000000000000000000072501401527164200173750ustar00rootroot00000000000000193 9 0 10 9 8 8 5 4 2 3 0 10 9 8 8 5 3 2 4 0 10 9 8 8 5 1 2 5 0 10 9 8 7 6 4 1 4 0 10 9 8 7 6 2 2 4 0 10 9 8 7 6 2 1 5 0 10 9 8 6 7 3 1 4 0 10 9 8 5 8 3 1 4 0 10 9 8 5 7 2 2 5 0 10 9 6 8 6 4 2 3 0 10 9 6 8 6 1 2 5 0 10 9 6 7 7 2 1 5 0 10 9 6 7 6 3 1 5 0 10 9 6 7 5 4 1 5 0 10 9 6 6 8 3 1 5 0 10 9 6 6 7 4 1 5 0 10 9 4 8 4 4 1 5 0 10 9 4 8 3 4 2 5 0 10 9 3 8 7 4 1 4 0 10 8 7 8 8 1 2 5 0 10 8 7 8 6 4 2 3 0 10 8 7 8 6 4 1 4 0 10 8 7 8 6 3 1 5 0 10 8 7 7 8 2 1 5 0 10 8 7 7 7 3 1 5 0 10 8 7 7 6 3 2 5 0 10 8 7 6 8 3 1 5 0 10 8 7 6 7 4 1 5 0 10 8 7 4 8 3 2 5 0 10 8 7 4 7 4 2 5 0 10 8 6 8 6 4 1 5 0 10 8 6 6 7 4 2 5 0 10 8 2 8 7 4 1 5 0 10 7 8 8 6 4 1 4 0 10 7 8 8 6 3 1 5 0 10 7 8 7 8 2 1 5 0 10 7 8 7 6 4 2 3 0 10 7 8 7 6 3 2 4 0 10 7 8 6 7 4 1 4 0 10 7 5 8 8 4 1 5 0 10 6 8 6 8 4 2 1 0 10 6 8 4 8 4 2 2 0 10 6 8 2 8 3 2 5 0 10 6 6 8 8 4 1 5 0 10 5 8 8 8 4 2 1 0 10 5 8 5 8 4 2 2 0 10 5 8 5 8 4 1 4 0 10 5 8 4 8 3 2 4 0 10 5 8 4 8 3 1 5 0 10 5 7 2 8 4 2 5 0 10 4 8 8 8 1 2 4 0 10 4 8 6 8 4 1 4 0 10 4 8 6 7 4 2 3 0 10 4 8 6 7 3 2 4 0 10 4 8 5 8 3 1 5 0 10 4 8 5 8 2 2 5 0 10 4 8 5 7 3 2 5 0 10 4 8 4 8 4 1 5 0 10 4 7 3 8 4 2 5 0 10 3 8 8 7 4 2 3 0 10 3 8 7 8 4 1 4 0 10 3 8 7 8 2 2 4 0 10 3 8 7 7 3 2 4 0 10 3 8 7 7 3 1 5 0 10 3 8 6 8 3 1 5 0 10 3 8 6 7 4 1 5 0 10 3 7 7 8 3 2 5 0 10 3 7 6 8 4 1 5 0 10 3 6 6 8 4 2 5 0 10 2 8 8 8 3 2 4 0 10 2 8 8 8 1 2 5 0 10 2 8 8 7 3 1 5 0 10 2 8 7 7 4 1 5 0 10 2 7 8 8 4 1 4 0 10 2 7 7 8 4 1 5 0 10 1 8 8 8 3 1 5 0 10 1 8 8 7 4 1 5 0 10 1 7 8 8 4 1 5 0 10 1 7 8 8 3 2 5 0 9 9 8 8 7 3 1 4 0 9 9 8 8 7 1 2 4 0 9 9 8 8 5 4 1 4 0 9 9 8 7 6 2 2 5 0 9 9 8 7 5 4 2 4 0 9 9 8 6 7 3 2 4 0 9 9 8 5 7 3 2 5 0 9 9 6 8 7 1 2 5 0 9 9 6 8 5 2 1 5 0 9 9 6 8 4 3 1 5 0 9 9 6 7 7 2 2 5 0 9 9 5 8 6 4 1 4 0 9 9 5 8 3 4 1 5 0 9 9 4 8 7 4 1 4 0 9 9 3 8 7 4 2 4 0 9 8 7 8 6 4 2 4 0 9 8 6 7 6 4 2 5 0 9 7 8 7 6 4 2 4 0 9 6 8 4 8 4 2 3 0 9 6 8 1 8 4 2 5 0 9 5 8 5 8 4 2 3 0 9 5 8 4 8 4 2 4 0 9 5 8 2 8 4 2 5 0 9 4 8 6 8 4 2 3 0 9 4 8 6 7 4 2 4 0 9 4 8 3 7 4 2 5 0 9 3 8 7 7 4 2 4 0 9 2 8 8 7 4 2 4 0 8 9 8 8 5 2 1 5 0 8 9 8 8 1 4 2 5 0 8 9 8 7 8 2 2 4 0 8 9 8 4 8 3 2 5 0 8 9 7 8 4 3 1 5 0 8 9 6 8 8 4 2 3 0 8 9 6 8 6 2 1 5 0 8 9 6 8 5 3 1 5 0 8 9 6 8 4 4 1 5 0 8 9 6 7 8 2 2 5 0 8 9 5 8 5 4 1 5 0 8 9 4 8 4 4 2 5 0 8 9 1 8 8 4 2 4 0 8 9 1 8 7 4 2 5 0 8 8 7 6 7 4 2 5 0 8 8 6 7 7 4 2 5 0 8 4 8 8 8 4 2 2 0 8 3 8 6 7 4 2 5 0 8 3 7 8 8 4 2 3 0 8 2 6 7 8 4 2 5 0 8 1 6 8 8 4 2 5 0 7 9 8 8 8 3 1 4 0 7 9 8 8 4 3 1 5 0 7 9 8 7 8 3 2 4 0 7 9 8 6 7 3 2 5 0 7 9 8 5 8 4 2 4 0 7 9 8 5 8 3 2 5 0 7 9 7 8 3 4 1 5 0 7 9 6 8 3 4 2 5 0 7 9 6 7 6 3 2 5 0 7 9 6 7 5 4 2 5 0 7 9 6 6 8 3 2 5 0 7 9 6 6 7 4 2 5 0 7 9 4 8 5 4 2 5 0 7 9 2 8 8 4 1 4 0 7 8 7 7 7 4 2 5 0 7 8 6 8 6 4 2 5 0 7 8 2 8 7 4 2 5 0 7 7 8 8 6 4 2 5 0 7 7 5 8 8 4 2 5 0 7 6 6 8 8 4 2 5 0 7 4 8 6 8 4 2 4 0 7 3 8 7 8 4 2 4 0 7 3 7 6 8 4 2 5 0 7 2 8 7 7 4 2 5 0 7 2 7 8 8 4 2 4 0 7 2 7 7 8 4 2 5 0 7 1 8 8 7 4 2 5 0 7 1 7 8 8 4 2 5 0 6 9 7 8 5 3 1 5 0 6 9 7 8 4 3 2 5 0 6 9 7 8 3 4 2 5 0 6 9 6 8 6 3 1 5 0 6 9 6 8 5 3 2 5 0 6 9 5 8 6 4 1 5 0 6 9 5 8 4 4 2 5 0 6 9 4 8 7 4 1 5 0 6 9 3 8 8 4 1 4 0 5 9 8 8 3 4 2 5 0 5 9 7 8 5 3 2 5 0 5 9 7 8 4 4 1 5 0 5 9 6 8 8 4 1 4 0 5 9 6 8 6 4 1 5 0 5 9 6 8 6 3 2 5 0 5 9 6 8 4 4 2 5 0 5 9 3 8 8 4 2 4 0 4 9 7 8 6 4 1 5 0 4 9 4 8 8 4 2 4 0 4 9 4 8 8 4 1 5 0 4 9 3 8 8 4 2 5 0 3 9 8 8 5 3 2 5 0 3 9 7 8 6 3 2 5 0 3 9 6 8 7 4 1 5 0 3 9 6 8 7 3 2 5 0 3 9 5 8 8 4 2 4 0 3 9 5 8 8 4 1 5 0 3 9 5 8 7 4 2 5 0 2 9 8 8 6 4 1 5 0 2 9 8 8 5 4 2 5 0 2 9 6 8 8 4 2 4 0 2 9 6 8 8 4 1 5 0 2 9 6 8 7 4 2 5 0 2 9 5 8 8 4 2 5 0 1 9 8 8 7 4 1 5 0 1 9 7 8 8 4 1 5 0 1 9 7 8 6 4 2 5 frobby-0.9.5/test/frob/bug19.assoprimes000066400000000000000000000000271401527164200177560ustar00rootroot000000000000001 9 0 1 1 1 1 1 1 1 1 frobby-0.9.5/test/frob/bug19.dim000066400000000000000000000000021401527164200163330ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug19.euler000066400000000000000000000000021401527164200166760ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug19.frobInstance000066400000000000000000000000551401527164200202070ustar00rootroot000000000000002257 2602 2723 2990 3021 3566 3703 3903 3981 frobby-0.9.5/test/frob/bug19.frobNumber000066400000000000000000000000061401527164200176670ustar00rootroot0000000000000032631 frobby-0.9.5/test/frob/bug19.intersection000066400000000000000000000066571401527164200203160ustar00rootroot00000000000000184 9 0 10 0 0 0 0 0 0 0 0 9 0 2 0 0 0 0 0 0 9 0 0 0 3 0 0 0 0 9 0 0 0 2 0 1 0 0 9 0 0 0 0 0 0 1 0 8 0 3 0 1 0 0 0 0 8 0 3 0 0 0 1 0 0 8 0 3 0 0 0 0 1 0 8 0 1 0 1 0 1 0 0 8 0 0 0 0 1 0 0 0 7 0 4 0 0 0 0 0 0 7 0 1 0 2 0 1 0 0 6 0 5 0 0 0 0 1 0 6 0 2 0 2 0 0 0 0 6 0 1 0 3 0 0 0 0 6 0 0 0 4 0 0 0 0 6 0 0 0 3 0 1 0 0 6 0 0 0 0 0 1 1 0 5 0 5 0 0 0 1 0 0 5 0 4 0 1 0 0 0 0 5 0 3 0 2 0 0 0 0 5 0 3 0 1 0 1 0 0 5 0 3 0 0 0 1 1 0 5 0 2 0 3 1 0 0 0 5 0 1 0 5 0 0 0 0 5 0 0 0 4 1 0 0 0 5 0 0 0 0 1 1 0 0 4 1 0 0 0 0 0 0 0 4 0 6 0 0 0 0 0 0 4 0 5 0 1 0 0 0 0 4 0 4 0 2 0 0 0 0 4 0 2 0 5 0 0 0 0 4 0 0 1 0 0 0 0 0 4 0 0 0 5 0 1 0 0 4 0 0 0 4 1 1 0 0 4 0 0 0 0 1 0 1 0 3 4 2 0 0 0 0 0 0 3 1 2 1 0 0 0 0 0 3 1 0 2 1 0 0 0 0 3 0 7 0 0 0 0 0 0 3 0 4 0 4 0 0 0 0 3 0 2 0 3 0 1 0 0 3 0 1 0 4 1 1 0 0 3 0 0 4 0 0 0 0 0 3 0 0 0 6 0 0 0 0 3 0 0 0 0 2 0 0 0 3 0 0 0 0 0 0 2 0 2 1 0 3 0 0 0 0 0 2 1 0 1 2 0 0 0 0 2 0 3 0 5 0 0 0 0 2 0 3 0 4 0 1 0 0 2 0 2 0 5 0 1 0 0 2 0 2 0 4 1 0 0 0 2 0 1 0 3 2 0 0 0 2 0 0 5 0 0 0 0 0 2 0 0 4 0 0 0 1 0 2 0 0 3 1 0 0 0 0 2 0 0 2 0 1 0 1 0 2 0 0 1 1 2 0 0 0 2 0 0 1 0 0 0 2 0 2 0 0 0 1 0 0 1 0 2 0 0 0 0 3 0 0 0 1 1 2 2 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 1 0 5 0 1 0 1 0 0 1 0 4 0 5 0 0 0 0 1 0 4 0 2 0 1 0 0 1 0 1 3 0 0 0 0 0 1 0 0 5 0 1 0 0 0 1 0 0 3 0 1 0 1 0 1 0 0 2 0 2 0 0 0 1 0 0 1 1 2 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 3 0 1 0 0 0 2 3 0 0 0 1 0 0 0 2 1 0 1 0 1 0 0 0 1 0 0 2 0 1 0 0 0 0 0 0 4 0 0 9 0 0 0 0 0 0 0 0 8 0 1 0 0 0 0 0 0 8 0 0 1 1 0 0 0 0 8 0 0 0 2 0 0 0 0 8 0 0 0 0 0 1 0 0 7 0 2 0 0 0 0 0 0 7 0 1 0 1 0 0 0 0 7 0 1 0 0 0 1 0 0 7 0 0 1 1 0 1 0 0 7 0 0 0 2 0 1 0 0 7 0 0 0 0 0 2 0 0 6 0 3 0 0 0 0 0 0 6 0 2 1 1 0 0 0 0 6 0 2 0 2 0 0 0 0 6 0 2 0 0 0 1 0 0 6 0 1 0 0 0 2 0 0 6 0 0 0 3 0 1 0 0 6 0 0 0 0 0 3 0 0 5 0 6 0 0 0 0 0 0 5 0 4 0 1 0 0 0 0 5 0 3 0 0 0 1 0 0 5 0 1 0 0 0 3 0 0 5 0 0 0 0 0 4 0 0 4 2 0 0 0 1 0 0 0 4 0 7 0 0 0 0 0 0 4 0 5 0 1 0 0 0 0 4 0 4 0 0 0 2 0 0 4 0 1 0 0 0 4 0 0 3 3 0 0 0 0 0 0 0 3 0 0 2 0 0 0 0 0 3 0 0 1 0 1 1 0 0 3 0 0 0 2 1 0 0 0 2 4 0 0 0 0 0 0 0 2 1 2 0 1 0 0 0 0 2 1 0 1 0 0 0 0 0 2 1 0 0 2 0 0 0 0 2 1 0 0 1 1 0 0 0 1 7 0 0 0 0 0 0 0 1 3 0 2 0 0 0 0 0 1 2 1 0 0 1 0 0 0 1 2 0 0 1 0 0 0 0 1 2 0 0 0 0 1 0 0 1 0 2 1 1 1 0 0 0 1 0 1 2 0 1 0 0 0 1 0 0 3 0 0 0 0 0 1 0 0 1 2 0 0 0 0 1 0 0 0 1 1 1 0 0 0 8 0 0 0 0 0 0 0 0 7 0 0 0 1 0 0 0 0 6 0 1 0 0 1 0 0 0 5 0 2 0 0 0 0 0 0 4 0 5 0 1 0 0 0 0 4 0 2 0 0 1 0 0 0 3 1 0 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 3 0 0 0 0 2 0 0 0 2 3 0 0 0 0 0 0 0 1 7 0 0 0 0 0 0 0 1 5 1 0 0 0 0 0 0 1 5 0 1 0 0 0 0 0 1 3 0 0 1 0 0 0 0 1 2 1 1 0 0 0 0 0 1 2 0 2 0 0 0 0 0 1 1 2 2 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 6 0 0 0 0 0 0 1 0 3 3 0 0 0 0 0 1 0 3 0 0 1 0 0 0 1 0 0 1 0 1 0 0 0 1 0 0 0 0 3 0 0 0 0 8 0 0 0 0 0 0 0 0 7 0 1 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 5 0 0 1 0 0 0 0 0 5 0 0 0 1 0 0 0 0 4 1 1 0 0 0 0 0 0 4 0 2 0 0 0 0 0 0 4 0 0 1 1 0 0 0 0 3 1 0 1 0 0 0 0 0 3 1 0 0 1 0 0 0 0 3 0 0 0 4 0 0 0 0 2 2 0 0 0 0 0 0 0 2 0 2 1 0 0 0 0 0 2 0 2 0 1 0 0 0 0 1 4 0 0 0 0 0 0 0 1 3 1 0 0 0 0 0 0 1 3 0 1 1 0 0 0 0 1 3 0 0 2 0 0 0 0 1 0 3 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 6 0 1 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 4 2 0 0 0 0 0 0 0 4 0 0 1 0 0 0 0 0 3 2 0 1 0 0 0 0 0 2 3 0 1 0 0 0 0 0 2 1 1 1 0 0 0 0 0 1 0 0 3 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 2 1 1 0 0 0 0 0 0 1 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 5 frobby-0.9.5/test/frob/bug19.irrdecom000066400000000000000000000726371401527164200174150ustar00rootroot000000000000008 9 0 10 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 10 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 10 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 9 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 9 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 9 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 9 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 9 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 9 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 4 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 4 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 4 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 3 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 8 9 0 3 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 8 9 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 8 9 0 2 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 8 9 0 2 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 8 9 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 8 9 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 8 9 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 8 9 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 8 9 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 8 9 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 frobby-0.9.5/test/frob/bug19.irrdecom_ideal000066400000000000000000000071341401527164200205410ustar00rootroot00000000000000193 9 0 10 1 2 1 3 1 1 1 0 10 1 2 1 1 1 2 1 0 10 1 1 1 2 1 2 1 0 9 1 4 1 1 1 1 1 0 9 1 3 1 2 1 1 1 0 9 1 3 1 1 1 2 1 0 9 1 3 1 1 1 1 2 0 9 1 1 1 4 1 1 1 0 9 1 1 1 3 1 2 1 0 8 1 4 1 2 1 1 1 0 8 1 4 1 1 1 2 1 0 8 1 4 1 1 1 1 2 0 8 1 3 1 2 2 1 1 0 8 1 3 1 2 1 2 1 0 8 1 2 1 3 2 1 1 0 8 1 1 1 4 2 1 1 0 7 1 6 1 1 1 1 1 0 7 1 5 1 1 1 2 1 0 7 1 5 1 1 1 1 2 0 7 1 2 1 3 1 2 1 0 6 1 6 1 1 1 1 2 0 6 1 3 1 5 1 1 1 0 6 1 3 1 3 2 1 1 0 6 1 3 1 3 1 2 1 0 6 1 3 1 1 1 2 2 0 6 1 2 1 5 1 2 1 0 6 1 2 1 4 2 1 1 0 6 1 1 1 6 1 1 1 0 5 1 6 1 1 1 2 2 0 5 1 5 1 2 1 2 1 0 5 1 4 1 5 1 1 1 0 5 1 4 1 3 1 2 1 0 5 1 3 1 4 2 1 1 0 5 1 3 1 3 2 2 1 0 5 1 2 1 6 1 1 1 0 5 1 2 1 5 2 1 1 0 5 1 2 1 4 2 2 1 0 4 9 2 1 1 1 1 1 0 4 9 1 1 2 1 1 1 0 4 8 2 2 1 1 1 1 0 4 8 2 1 1 1 1 2 0 4 8 1 2 2 1 1 1 0 4 7 2 3 1 1 1 1 0 4 7 1 2 1 1 1 2 0 4 6 1 3 1 1 1 2 0 4 4 3 1 1 1 1 1 0 4 3 4 1 1 1 1 1 0 4 3 1 1 3 1 1 1 0 4 2 7 1 2 1 1 1 0 4 2 3 1 3 1 1 1 0 4 2 2 2 2 1 1 1 0 4 1 7 1 1 1 2 2 0 4 1 5 1 4 1 1 1 0 4 1 3 3 2 1 1 1 0 4 1 3 3 1 2 1 1 0 4 1 3 2 4 1 1 1 0 4 1 3 2 3 2 1 1 0 4 1 3 1 6 1 1 1 0 4 1 2 1 6 1 2 1 0 4 1 1 4 1 2 1 1 0 4 1 1 4 1 1 1 2 0 4 1 1 3 2 2 1 1 0 4 1 1 2 1 2 1 2 0 4 1 1 1 5 2 2 1 0 4 1 1 1 1 2 2 2 0 3 9 3 1 1 1 1 1 0 3 8 3 2 1 1 1 1 0 3 7 2 1 1 1 1 3 0 3 7 1 3 2 1 1 1 0 3 6 1 1 1 1 1 4 0 3 2 3 2 2 1 1 1 0 3 2 2 3 2 1 1 1 0 3 1 8 1 2 1 1 1 0 3 1 8 1 1 1 1 2 0 3 1 5 1 5 1 1 1 0 3 1 4 1 4 1 2 1 0 3 1 3 2 1 3 1 1 0 3 1 3 1 5 1 2 1 0 3 1 3 1 4 2 2 1 0 3 1 3 1 3 3 2 1 0 3 1 3 1 1 1 1 3 0 3 1 2 1 5 2 2 1 0 3 1 1 5 1 2 1 1 0 3 1 1 2 1 3 1 2 0 3 1 1 1 8 1 1 1 0 3 1 1 1 4 3 2 1 0 2 8 1 1 2 1 1 2 0 2 7 1 2 2 1 1 2 0 2 6 1 6 2 1 1 1 0 2 6 1 3 2 1 1 2 0 2 6 1 3 1 1 1 3 0 2 5 1 7 1 1 1 1 0 2 5 1 5 1 1 1 2 0 2 5 1 4 1 1 1 3 0 2 4 1 8 1 1 1 1 0 2 4 1 5 1 1 1 3 0 2 3 1 2 3 1 1 2 0 2 2 3 2 3 1 1 1 0 2 2 2 1 3 1 1 2 0 2 1 6 1 2 1 1 2 0 2 1 5 1 2 1 2 2 0 2 1 4 1 6 1 2 1 0 2 1 4 1 3 1 2 2 0 2 1 3 2 2 3 1 1 0 2 1 3 1 5 2 2 1 0 2 1 3 1 4 3 2 1 0 2 1 3 1 2 4 1 1 0 2 1 1 4 2 2 1 1 0 2 1 1 3 2 2 1 2 0 2 1 1 2 4 1 1 2 0 2 1 1 2 3 3 1 1 0 2 1 1 1 4 1 2 2 0 2 1 1 1 2 4 1 2 0 2 1 1 1 2 2 2 2 0 1 9 2 1 1 2 1 1 0 1 9 2 1 1 1 2 1 0 1 9 1 1 2 1 2 1 0 1 9 1 1 1 2 2 1 0 1 8 2 2 1 1 2 1 0 1 8 2 1 1 1 2 2 0 1 8 1 2 2 1 2 1 0 1 8 1 1 2 2 2 1 0 1 8 1 1 1 4 1 1 0 1 8 1 1 1 2 1 2 0 1 7 3 3 1 1 1 1 0 1 7 2 3 1 1 2 1 0 1 7 2 2 1 2 1 1 0 1 7 1 3 2 1 2 1 0 1 7 1 3 1 2 2 1 0 1 7 1 2 2 2 2 1 0 1 7 1 2 2 2 1 2 0 1 7 1 2 1 3 1 2 0 1 7 1 2 1 1 2 2 0 1 7 1 1 2 1 1 3 0 1 6 2 6 1 1 1 1 0 1 6 1 5 1 1 2 1 0 1 6 1 4 2 2 1 1 0 1 6 1 4 1 3 1 1 0 1 6 1 4 1 2 2 1 0 1 6 1 3 2 2 1 2 0 1 6 1 3 2 1 1 3 0 1 6 1 3 1 1 2 2 0 1 6 1 1 1 4 1 2 0 1 5 2 7 1 1 1 1 0 1 5 1 5 1 2 2 1 0 1 5 1 5 1 2 1 2 0 1 5 1 4 1 1 2 2 0 1 5 1 4 1 1 1 4 0 1 5 1 1 1 1 1 5 0 1 4 3 1 1 1 2 1 0 1 4 1 7 1 2 1 1 0 1 4 1 5 1 1 1 4 0 1 4 1 3 1 1 1 5 0 1 3 4 1 1 1 2 1 0 1 3 1 3 2 1 2 2 0 1 3 1 2 3 2 1 2 0 1 3 1 2 3 1 1 3 0 1 3 1 2 1 3 2 1 0 1 3 1 1 3 2 2 1 0 1 3 1 1 3 1 2 2 0 1 2 7 1 2 1 2 1 0 1 2 3 3 2 1 1 1 0 1 2 3 1 3 1 2 1 0 1 2 2 5 2 1 1 1 0 1 2 2 5 1 2 1 1 0 1 2 2 3 2 1 2 1 0 1 2 2 3 1 2 2 1 0 1 2 2 2 3 2 1 1 0 1 2 2 2 2 2 2 1 0 1 2 2 2 1 3 2 1 0 1 2 2 1 3 2 2 1 0 1 2 2 1 3 1 2 2 0 1 2 2 1 3 1 1 3 0 1 2 2 1 1 4 1 1 0 1 1 6 1 2 1 2 2 0 1 1 5 1 6 1 1 1 0 1 1 5 1 5 1 2 1 0 1 1 3 3 2 1 2 1 0 1 1 3 3 1 2 2 1 0 1 1 3 2 4 1 2 1 0 1 1 3 2 3 2 2 1 0 1 1 3 2 2 3 2 1 0 1 1 3 1 3 4 1 1 0 1 1 3 1 3 1 1 3 0 1 1 1 4 2 3 1 1 0 1 1 1 4 1 2 2 2 0 1 1 1 3 2 2 2 2 0 1 1 1 2 3 3 2 1 0 1 1 1 2 3 3 1 2 0 1 1 1 2 3 1 2 2 0 1 1 1 1 4 4 1 1 0 1 1 1 1 4 2 1 2 0 1 1 1 1 4 1 1 3 frobby-0.9.5/test/frob/bug19.maxstandard000066400000000000000000000000041401527164200200720ustar00rootroot000000000000000 9 frobby-0.9.5/test/frob/bug19.minimize000066400000000000000000000066571401527164200174310ustar00rootroot00000000000000184 9 0 10 0 0 0 0 0 0 0 0 9 0 2 0 0 0 0 0 0 9 0 0 0 3 0 0 0 0 9 0 0 0 2 0 1 0 0 9 0 0 0 0 0 0 1 0 8 0 3 0 1 0 0 0 0 8 0 3 0 0 0 1 0 0 8 0 3 0 0 0 0 1 0 8 0 1 0 1 0 1 0 0 8 0 0 0 0 1 0 0 0 7 0 4 0 0 0 0 0 0 7 0 1 0 2 0 1 0 0 6 0 5 0 0 0 0 1 0 6 0 2 0 2 0 0 0 0 6 0 1 0 3 0 0 0 0 6 0 0 0 4 0 0 0 0 6 0 0 0 3 0 1 0 0 6 0 0 0 0 0 1 1 0 5 0 5 0 0 0 1 0 0 5 0 4 0 1 0 0 0 0 5 0 3 0 2 0 0 0 0 5 0 3 0 1 0 1 0 0 5 0 3 0 0 0 1 1 0 5 0 2 0 3 1 0 0 0 5 0 1 0 5 0 0 0 0 5 0 0 0 4 1 0 0 0 5 0 0 0 0 1 1 0 0 4 1 0 0 0 0 0 0 0 4 0 6 0 0 0 0 0 0 4 0 5 0 1 0 0 0 0 4 0 4 0 2 0 0 0 0 4 0 2 0 5 0 0 0 0 4 0 0 1 0 0 0 0 0 4 0 0 0 5 0 1 0 0 4 0 0 0 4 1 1 0 0 4 0 0 0 0 1 0 1 0 3 4 2 0 0 0 0 0 0 3 1 2 1 0 0 0 0 0 3 1 0 2 1 0 0 0 0 3 0 7 0 0 0 0 0 0 3 0 4 0 4 0 0 0 0 3 0 2 0 3 0 1 0 0 3 0 1 0 4 1 1 0 0 3 0 0 4 0 0 0 0 0 3 0 0 0 6 0 0 0 0 3 0 0 0 0 2 0 0 0 3 0 0 0 0 0 0 2 0 2 1 0 3 0 0 0 0 0 2 1 0 1 2 0 0 0 0 2 0 3 0 5 0 0 0 0 2 0 3 0 4 0 1 0 0 2 0 2 0 5 0 1 0 0 2 0 2 0 4 1 0 0 0 2 0 1 0 3 2 0 0 0 2 0 0 5 0 0 0 0 0 2 0 0 4 0 0 0 1 0 2 0 0 3 1 0 0 0 0 2 0 0 2 0 1 0 1 0 2 0 0 1 1 2 0 0 0 2 0 0 1 0 0 0 2 0 2 0 0 0 1 0 0 1 0 2 0 0 0 0 3 0 0 0 1 1 2 2 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 1 0 5 0 1 0 1 0 0 1 0 4 0 5 0 0 0 0 1 0 4 0 2 0 1 0 0 1 0 1 3 0 0 0 0 0 1 0 0 5 0 1 0 0 0 1 0 0 3 0 1 0 1 0 1 0 0 2 0 2 0 0 0 1 0 0 1 1 2 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 3 0 1 0 0 0 2 3 0 0 0 1 0 0 0 2 1 0 1 0 1 0 0 0 1 0 0 2 0 1 0 0 0 0 0 0 4 0 0 9 0 0 0 0 0 0 0 0 8 0 1 0 0 0 0 0 0 8 0 0 1 1 0 0 0 0 8 0 0 0 2 0 0 0 0 8 0 0 0 0 0 1 0 0 7 0 2 0 0 0 0 0 0 7 0 1 0 1 0 0 0 0 7 0 1 0 0 0 1 0 0 7 0 0 1 1 0 1 0 0 7 0 0 0 2 0 1 0 0 7 0 0 0 0 0 2 0 0 6 0 3 0 0 0 0 0 0 6 0 2 1 1 0 0 0 0 6 0 2 0 2 0 0 0 0 6 0 2 0 0 0 1 0 0 6 0 1 0 0 0 2 0 0 6 0 0 0 3 0 1 0 0 6 0 0 0 0 0 3 0 0 5 0 6 0 0 0 0 0 0 5 0 4 0 1 0 0 0 0 5 0 3 0 0 0 1 0 0 5 0 1 0 0 0 3 0 0 5 0 0 0 0 0 4 0 0 4 2 0 0 0 1 0 0 0 4 0 7 0 0 0 0 0 0 4 0 5 0 1 0 0 0 0 4 0 4 0 0 0 2 0 0 4 0 1 0 0 0 4 0 0 3 3 0 0 0 0 0 0 0 3 0 0 2 0 0 0 0 0 3 0 0 1 0 1 1 0 0 3 0 0 0 2 1 0 0 0 2 4 0 0 0 0 0 0 0 2 1 2 0 1 0 0 0 0 2 1 0 1 0 0 0 0 0 2 1 0 0 2 0 0 0 0 2 1 0 0 1 1 0 0 0 1 7 0 0 0 0 0 0 0 1 3 0 2 0 0 0 0 0 1 2 1 0 0 1 0 0 0 1 2 0 0 1 0 0 0 0 1 2 0 0 0 0 1 0 0 1 0 2 1 1 1 0 0 0 1 0 1 2 0 1 0 0 0 1 0 0 3 0 0 0 0 0 1 0 0 1 2 0 0 0 0 1 0 0 0 1 1 1 0 0 0 8 0 0 0 0 0 0 0 0 7 0 0 0 1 0 0 0 0 6 0 1 0 0 1 0 0 0 5 0 2 0 0 0 0 0 0 4 0 5 0 1 0 0 0 0 4 0 2 0 0 1 0 0 0 3 1 0 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 3 0 0 0 0 2 0 0 0 2 3 0 0 0 0 0 0 0 1 7 0 0 0 0 0 0 0 1 5 1 0 0 0 0 0 0 1 5 0 1 0 0 0 0 0 1 3 0 0 1 0 0 0 0 1 2 1 1 0 0 0 0 0 1 2 0 2 0 0 0 0 0 1 1 2 2 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 6 0 0 0 0 0 0 1 0 3 3 0 0 0 0 0 1 0 3 0 0 1 0 0 0 1 0 0 1 0 1 0 0 0 1 0 0 0 0 3 0 0 0 0 8 0 0 0 0 0 0 0 0 7 0 1 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 5 0 0 1 0 0 0 0 0 5 0 0 0 1 0 0 0 0 4 1 1 0 0 0 0 0 0 4 0 2 0 0 0 0 0 0 4 0 0 1 1 0 0 0 0 3 1 0 1 0 0 0 0 0 3 1 0 0 1 0 0 0 0 3 0 0 0 4 0 0 0 0 2 2 0 0 0 0 0 0 0 2 0 2 1 0 0 0 0 0 2 0 2 0 1 0 0 0 0 1 4 0 0 0 0 0 0 0 1 3 1 0 0 0 0 0 0 1 3 0 1 1 0 0 0 0 1 3 0 0 2 0 0 0 0 1 0 3 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 6 0 1 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 4 2 0 0 0 0 0 0 0 4 0 0 1 0 0 0 0 0 3 2 0 1 0 0 0 0 0 2 3 0 1 0 0 0 0 0 2 1 1 1 0 0 0 0 0 1 0 0 3 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 2 1 1 0 0 0 0 0 0 1 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 5 frobby-0.9.5/test/frob/bug19.multi000066400000000000000000021407021401527164200167320ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8, x9]; p = x2^10*x3*x4^2*x5*x6^3*x7*x8*x9 + -x2^10*x3*x4^2*x5*x6^3*x7*x8 + -x2^10*x3*x4^2*x5*x6^3*x7*x9 + x2^10*x3*x4^2*x5*x6^3*x7 + -x2^10*x3*x4^2*x5*x6^3*x8*x9 + x2^10*x3*x4^2*x5*x6^3*x8 + x2^10*x3*x4^2*x5*x6^3*x9 + -x2^10*x3*x4^2*x5*x6^3 + x2^10*x3*x4^2*x5*x6*x7*x8^2*x9 + -x2^10*x3*x4^2*x5*x6*x7*x8^2 + -x2^10*x3*x4^2*x5*x6*x7*x8*x9 + x2^10*x3*x4^2*x5*x6*x7*x8 + -x2^10*x3*x4^2*x5*x6*x8^2*x9 + x2^10*x3*x4^2*x5*x6*x8^2 + x2^10*x3*x4^2*x5*x6*x8*x9 + -x2^10*x3*x4^2*x5*x6*x8 + -x2^10*x3*x4^2*x5*x7*x8^2*x9 + x2^10*x3*x4^2*x5*x7*x8^2 + x2^10*x3*x4^2*x5*x7*x9 + -x2^10*x3*x4^2*x5*x7 + x2^10*x3*x4^2*x5*x8^2*x9 + -x2^10*x3*x4^2*x5*x8^2 + -x2^10*x3*x4^2*x5*x9 + x2^10*x3*x4^2*x5 + -x2^10*x3*x4^2*x6^3*x7*x8*x9 + x2^10*x3*x4^2*x6^3*x7*x8 + x2^10*x3*x4^2*x6^3*x7*x9 + -x2^10*x3*x4^2*x6^3*x7 + x2^10*x3*x4^2*x6^3*x8*x9 + -x2^10*x3*x4^2*x6^3*x8 + -x2^10*x3*x4^2*x6^3*x9 + x2^10*x3*x4^2*x6^3 + -x2^10*x3*x4^2*x6*x7*x8^2*x9 + x2^10*x3*x4^2*x6*x7*x8^2 + x2^10*x3*x4^2*x6*x7*x8*x9 + -x2^10*x3*x4^2*x6*x7*x8 + x2^10*x3*x4^2*x6*x8^2*x9 + -x2^10*x3*x4^2*x6*x8^2 + -x2^10*x3*x4^2*x6*x8*x9 + x2^10*x3*x4^2*x6*x8 + x2^10*x3*x4^2*x7*x8^2*x9 + -x2^10*x3*x4^2*x7*x8^2 + -x2^10*x3*x4^2*x7*x9 + x2^10*x3*x4^2*x7 + -x2^10*x3*x4^2*x8^2*x9 + x2^10*x3*x4^2*x8^2 + x2^10*x3*x4^2*x9 + -x2^10*x3*x4^2 + x2^10*x3*x4*x5*x6^2*x7*x8^2*x9 + -x2^10*x3*x4*x5*x6^2*x7*x8^2 + -x2^10*x3*x4*x5*x6^2*x7*x8*x9 + x2^10*x3*x4*x5*x6^2*x7*x8 + -x2^10*x3*x4*x5*x6^2*x8^2*x9 + x2^10*x3*x4*x5*x6^2*x8^2 + x2^10*x3*x4*x5*x6^2*x8*x9 + -x2^10*x3*x4*x5*x6^2*x8 + -x2^10*x3*x4*x5*x6*x7*x8^2*x9 + x2^10*x3*x4*x5*x6*x7*x8^2 + x2^10*x3*x4*x5*x6*x7*x8*x9 + -x2^10*x3*x4*x5*x6*x7*x8 + x2^10*x3*x4*x5*x6*x8^2*x9 + -x2^10*x3*x4*x5*x6*x8^2 + -x2^10*x3*x4*x5*x6*x8*x9 + x2^10*x3*x4*x5*x6*x8 + -x2^10*x3*x4*x6^2*x7*x8^2*x9 + x2^10*x3*x4*x6^2*x7*x8^2 + x2^10*x3*x4*x6^2*x7*x8*x9 + -x2^10*x3*x4*x6^2*x7*x8 + x2^10*x3*x4*x6^2*x8^2*x9 + -x2^10*x3*x4*x6^2*x8^2 + -x2^10*x3*x4*x6^2*x8*x9 + x2^10*x3*x4*x6^2*x8 + x2^10*x3*x4*x6*x7*x8^2*x9 + -x2^10*x3*x4*x6*x7*x8^2 + -x2^10*x3*x4*x6*x7*x8*x9 + x2^10*x3*x4*x6*x7*x8 + -x2^10*x3*x4*x6*x8^2*x9 + x2^10*x3*x4*x6*x8^2 + x2^10*x3*x4*x6*x8*x9 + -x2^10*x3*x4*x6*x8 + -x2^10*x3*x5*x6^3*x7*x8*x9 + x2^10*x3*x5*x6^3*x7*x8 + x2^10*x3*x5*x6^3*x7*x9 + -x2^10*x3*x5*x6^3*x7 + x2^10*x3*x5*x6^3*x8*x9 + -x2^10*x3*x5*x6^3*x8 + -x2^10*x3*x5*x6^3*x9 + x2^10*x3*x5*x6^3 + -x2^10*x3*x5*x6^2*x7*x8^2*x9 + x2^10*x3*x5*x6^2*x7*x8^2 + x2^10*x3*x5*x6^2*x7*x8*x9 + -x2^10*x3*x5*x6^2*x7*x8 + x2^10*x3*x5*x6^2*x8^2*x9 + -x2^10*x3*x5*x6^2*x8^2 + -x2^10*x3*x5*x6^2*x8*x9 + x2^10*x3*x5*x6^2*x8 + x2^10*x3*x5*x7*x8^2*x9 + -x2^10*x3*x5*x7*x8^2 + -x2^10*x3*x5*x7*x9 + x2^10*x3*x5*x7 + -x2^10*x3*x5*x8^2*x9 + x2^10*x3*x5*x8^2 + x2^10*x3*x5*x9 + -x2^10*x3*x5 + x2^10*x3*x6^3*x7*x8*x9 + -x2^10*x3*x6^3*x7*x8 + -x2^10*x3*x6^3*x7*x9 + x2^10*x3*x6^3*x7 + -x2^10*x3*x6^3*x8*x9 + x2^10*x3*x6^3*x8 + x2^10*x3*x6^3*x9 + -x2^10*x3*x6^3 + x2^10*x3*x6^2*x7*x8^2*x9 + -x2^10*x3*x6^2*x7*x8^2 + -x2^10*x3*x6^2*x7*x8*x9 + x2^10*x3*x6^2*x7*x8 + -x2^10*x3*x6^2*x8^2*x9 + x2^10*x3*x6^2*x8^2 + x2^10*x3*x6^2*x8*x9 + -x2^10*x3*x6^2*x8 + -x2^10*x3*x7*x8^2*x9 + x2^10*x3*x7*x8^2 + x2^10*x3*x7*x9 + -x2^10*x3*x7 + x2^10*x3*x8^2*x9 + -x2^10*x3*x8^2 + -x2^10*x3*x9 + x2^10*x3 + -x2^10*x4^2*x5*x6^3*x7*x8*x9 + x2^10*x4^2*x5*x6^3*x7*x8 + x2^10*x4^2*x5*x6^3*x7*x9 + -x2^10*x4^2*x5*x6^3*x7 + x2^10*x4^2*x5*x6^3*x8*x9 + -x2^10*x4^2*x5*x6^3*x8 + -x2^10*x4^2*x5*x6^3*x9 + x2^10*x4^2*x5*x6^3 + -x2^10*x4^2*x5*x6*x7*x8^2*x9 + x2^10*x4^2*x5*x6*x7*x8^2 + x2^10*x4^2*x5*x6*x7*x8*x9 + -x2^10*x4^2*x5*x6*x7*x8 + x2^10*x4^2*x5*x6*x8^2*x9 + -x2^10*x4^2*x5*x6*x8^2 + -x2^10*x4^2*x5*x6*x8*x9 + x2^10*x4^2*x5*x6*x8 + x2^10*x4^2*x5*x7*x8^2*x9 + -x2^10*x4^2*x5*x7*x8^2 + -x2^10*x4^2*x5*x7*x9 + x2^10*x4^2*x5*x7 + -x2^10*x4^2*x5*x8^2*x9 + x2^10*x4^2*x5*x8^2 + x2^10*x4^2*x5*x9 + -x2^10*x4^2*x5 + x2^10*x4^2*x6^3*x7*x8*x9 + -x2^10*x4^2*x6^3*x7*x8 + -x2^10*x4^2*x6^3*x7*x9 + x2^10*x4^2*x6^3*x7 + -x2^10*x4^2*x6^3*x8*x9 + x2^10*x4^2*x6^3*x8 + x2^10*x4^2*x6^3*x9 + -x2^10*x4^2*x6^3 + x2^10*x4^2*x6*x7*x8^2*x9 + -x2^10*x4^2*x6*x7*x8^2 + -x2^10*x4^2*x6*x7*x8*x9 + x2^10*x4^2*x6*x7*x8 + -x2^10*x4^2*x6*x8^2*x9 + x2^10*x4^2*x6*x8^2 + x2^10*x4^2*x6*x8*x9 + -x2^10*x4^2*x6*x8 + -x2^10*x4^2*x7*x8^2*x9 + x2^10*x4^2*x7*x8^2 + x2^10*x4^2*x7*x9 + -x2^10*x4^2*x7 + x2^10*x4^2*x8^2*x9 + -x2^10*x4^2*x8^2 + -x2^10*x4^2*x9 + x2^10*x4^2 + -x2^10*x4*x5*x6^2*x7*x8^2*x9 + x2^10*x4*x5*x6^2*x7*x8^2 + x2^10*x4*x5*x6^2*x7*x8*x9 + -x2^10*x4*x5*x6^2*x7*x8 + x2^10*x4*x5*x6^2*x8^2*x9 + -x2^10*x4*x5*x6^2*x8^2 + -x2^10*x4*x5*x6^2*x8*x9 + x2^10*x4*x5*x6^2*x8 + x2^10*x4*x5*x6*x7*x8^2*x9 + -x2^10*x4*x5*x6*x7*x8^2 + -x2^10*x4*x5*x6*x7*x8*x9 + x2^10*x4*x5*x6*x7*x8 + -x2^10*x4*x5*x6*x8^2*x9 + x2^10*x4*x5*x6*x8^2 + x2^10*x4*x5*x6*x8*x9 + -x2^10*x4*x5*x6*x8 + x2^10*x4*x6^2*x7*x8^2*x9 + -x2^10*x4*x6^2*x7*x8^2 + -x2^10*x4*x6^2*x7*x8*x9 + x2^10*x4*x6^2*x7*x8 + -x2^10*x4*x6^2*x8^2*x9 + x2^10*x4*x6^2*x8^2 + x2^10*x4*x6^2*x8*x9 + -x2^10*x4*x6^2*x8 + -x2^10*x4*x6*x7*x8^2*x9 + x2^10*x4*x6*x7*x8^2 + x2^10*x4*x6*x7*x8*x9 + -x2^10*x4*x6*x7*x8 + x2^10*x4*x6*x8^2*x9 + -x2^10*x4*x6*x8^2 + -x2^10*x4*x6*x8*x9 + x2^10*x4*x6*x8 + x2^10*x5*x6^3*x7*x8*x9 + -x2^10*x5*x6^3*x7*x8 + -x2^10*x5*x6^3*x7*x9 + x2^10*x5*x6^3*x7 + -x2^10*x5*x6^3*x8*x9 + x2^10*x5*x6^3*x8 + x2^10*x5*x6^3*x9 + -x2^10*x5*x6^3 + x2^10*x5*x6^2*x7*x8^2*x9 + -x2^10*x5*x6^2*x7*x8^2 + -x2^10*x5*x6^2*x7*x8*x9 + x2^10*x5*x6^2*x7*x8 + -x2^10*x5*x6^2*x8^2*x9 + x2^10*x5*x6^2*x8^2 + x2^10*x5*x6^2*x8*x9 + -x2^10*x5*x6^2*x8 + -x2^10*x5*x7*x8^2*x9 + x2^10*x5*x7*x8^2 + x2^10*x5*x7*x9 + -x2^10*x5*x7 + x2^10*x5*x8^2*x9 + -x2^10*x5*x8^2 + -x2^10*x5*x9 + x2^10*x5 + -x2^10*x6^3*x7*x8*x9 + x2^10*x6^3*x7*x8 + x2^10*x6^3*x7*x9 + -x2^10*x6^3*x7 + x2^10*x6^3*x8*x9 + -x2^10*x6^3*x8 + -x2^10*x6^3*x9 + x2^10*x6^3 + -x2^10*x6^2*x7*x8^2*x9 + x2^10*x6^2*x7*x8^2 + x2^10*x6^2*x7*x8*x9 + -x2^10*x6^2*x7*x8 + x2^10*x6^2*x8^2*x9 + -x2^10*x6^2*x8^2 + -x2^10*x6^2*x8*x9 + x2^10*x6^2*x8 + x2^10*x7*x8^2*x9 + -x2^10*x7*x8^2 + -x2^10*x7*x9 + x2^10*x7 + -x2^10*x8^2*x9 + x2^10*x8^2 + x2^10*x9 + -x2^10 + x2^9*x3*x4^4*x5*x6*x7*x8*x9 + -x2^9*x3*x4^4*x5*x6*x7*x8 + -x2^9*x3*x4^4*x5*x6*x7*x9 + x2^9*x3*x4^4*x5*x6*x7 + -x2^9*x3*x4^4*x5*x6*x8*x9 + x2^9*x3*x4^4*x5*x6*x8 + x2^9*x3*x4^4*x5*x6*x9 + -x2^9*x3*x4^4*x5*x6 + -x2^9*x3*x4^4*x5*x7*x8*x9 + x2^9*x3*x4^4*x5*x7*x8 + x2^9*x3*x4^4*x5*x7*x9 + -x2^9*x3*x4^4*x5*x7 + x2^9*x3*x4^4*x5*x8*x9 + -x2^9*x3*x4^4*x5*x8 + -x2^9*x3*x4^4*x5*x9 + x2^9*x3*x4^4*x5 + -x2^9*x3*x4^4*x6*x7*x8*x9 + x2^9*x3*x4^4*x6*x7*x8 + x2^9*x3*x4^4*x6*x7*x9 + -x2^9*x3*x4^4*x6*x7 + x2^9*x3*x4^4*x6*x8*x9 + -x2^9*x3*x4^4*x6*x8 + -x2^9*x3*x4^4*x6*x9 + x2^9*x3*x4^4*x6 + x2^9*x3*x4^4*x7*x8*x9 + -x2^9*x3*x4^4*x7*x8 + -x2^9*x3*x4^4*x7*x9 + x2^9*x3*x4^4*x7 + -x2^9*x3*x4^4*x8*x9 + x2^9*x3*x4^4*x8 + x2^9*x3*x4^4*x9 + -x2^9*x3*x4^4 + x2^9*x3*x4^3*x5*x6^2*x7*x8*x9 + -x2^9*x3*x4^3*x5*x6^2*x7*x8 + -x2^9*x3*x4^3*x5*x6^2*x7*x9 + x2^9*x3*x4^3*x5*x6^2*x7 + -x2^9*x3*x4^3*x5*x6^2*x8*x9 + x2^9*x3*x4^3*x5*x6^2*x8 + x2^9*x3*x4^3*x5*x6^2*x9 + -x2^9*x3*x4^3*x5*x6^2 + x2^9*x3*x4^3*x5*x6*x7*x8^2*x9 + -x2^9*x3*x4^3*x5*x6*x7*x8^2 + x2^9*x3*x4^3*x5*x6*x7*x8*x9^2 + -3*x2^9*x3*x4^3*x5*x6*x7*x8*x9 + 2*x2^9*x3*x4^3*x5*x6*x7*x8 + -x2^9*x3*x4^3*x5*x6*x7*x9^2 + 2*x2^9*x3*x4^3*x5*x6*x7*x9 + -x2^9*x3*x4^3*x5*x6*x7 + -x2^9*x3*x4^3*x5*x6*x8^2*x9 + x2^9*x3*x4^3*x5*x6*x8^2 + -x2^9*x3*x4^3*x5*x6*x8*x9^2 + 3*x2^9*x3*x4^3*x5*x6*x8*x9 + -2*x2^9*x3*x4^3*x5*x6*x8 + x2^9*x3*x4^3*x5*x6*x9^2 + -2*x2^9*x3*x4^3*x5*x6*x9 + x2^9*x3*x4^3*x5*x6 + -x2^9*x3*x4^3*x5*x7*x8^2*x9 + x2^9*x3*x4^3*x5*x7*x8^2 + -x2^9*x3*x4^3*x5*x7*x8*x9^2 + 2*x2^9*x3*x4^3*x5*x7*x8*x9 + -x2^9*x3*x4^3*x5*x7*x8 + x2^9*x3*x4^3*x5*x7*x9^2 + -x2^9*x3*x4^3*x5*x7*x9 + x2^9*x3*x4^3*x5*x8^2*x9 + -x2^9*x3*x4^3*x5*x8^2 + x2^9*x3*x4^3*x5*x8*x9^2 + -2*x2^9*x3*x4^3*x5*x8*x9 + x2^9*x3*x4^3*x5*x8 + -x2^9*x3*x4^3*x5*x9^2 + x2^9*x3*x4^3*x5*x9 + -x2^9*x3*x4^3*x6^2*x7*x8*x9 + x2^9*x3*x4^3*x6^2*x7*x8 + x2^9*x3*x4^3*x6^2*x7*x9 + -x2^9*x3*x4^3*x6^2*x7 + x2^9*x3*x4^3*x6^2*x8*x9 + -x2^9*x3*x4^3*x6^2*x8 + -x2^9*x3*x4^3*x6^2*x9 + x2^9*x3*x4^3*x6^2 + -x2^9*x3*x4^3*x6*x7*x8^2*x9 + x2^9*x3*x4^3*x6*x7*x8^2 + -x2^9*x3*x4^3*x6*x7*x8*x9^2 + 3*x2^9*x3*x4^3*x6*x7*x8*x9 + -2*x2^9*x3*x4^3*x6*x7*x8 + x2^9*x3*x4^3*x6*x7*x9^2 + -2*x2^9*x3*x4^3*x6*x7*x9 + x2^9*x3*x4^3*x6*x7 + x2^9*x3*x4^3*x6*x8^2*x9 + -x2^9*x3*x4^3*x6*x8^2 + x2^9*x3*x4^3*x6*x8*x9^2 + -3*x2^9*x3*x4^3*x6*x8*x9 + 2*x2^9*x3*x4^3*x6*x8 + -x2^9*x3*x4^3*x6*x9^2 + 2*x2^9*x3*x4^3*x6*x9 + -x2^9*x3*x4^3*x6 + x2^9*x3*x4^3*x7*x8^2*x9 + -x2^9*x3*x4^3*x7*x8^2 + x2^9*x3*x4^3*x7*x8*x9^2 + -2*x2^9*x3*x4^3*x7*x8*x9 + x2^9*x3*x4^3*x7*x8 + -x2^9*x3*x4^3*x7*x9^2 + x2^9*x3*x4^3*x7*x9 + -x2^9*x3*x4^3*x8^2*x9 + x2^9*x3*x4^3*x8^2 + -x2^9*x3*x4^3*x8*x9^2 + 2*x2^9*x3*x4^3*x8*x9 + -x2^9*x3*x4^3*x8 + x2^9*x3*x4^3*x9^2 + -x2^9*x3*x4^3*x9 + -x2^9*x3*x4^2*x5*x6^2*x7*x8*x9 + x2^9*x3*x4^2*x5*x6^2*x7*x8 + x2^9*x3*x4^2*x5*x6^2*x7*x9 + -x2^9*x3*x4^2*x5*x6^2*x7 + x2^9*x3*x4^2*x5*x6^2*x8*x9 + -x2^9*x3*x4^2*x5*x6^2*x8 + -x2^9*x3*x4^2*x5*x6^2*x9 + x2^9*x3*x4^2*x5*x6^2 + -x2^9*x3*x4^2*x5*x6*x7*x8^2*x9 + x2^9*x3*x4^2*x5*x6*x7*x8^2 + x2^9*x3*x4^2*x5*x6*x7*x8*x9 + -x2^9*x3*x4^2*x5*x6*x7*x8 + x2^9*x3*x4^2*x5*x6*x8^2*x9 + -x2^9*x3*x4^2*x5*x6*x8^2 + -x2^9*x3*x4^2*x5*x6*x8*x9 + x2^9*x3*x4^2*x5*x6*x8 + x2^9*x3*x4^2*x5*x7*x8^2*x9 + -x2^9*x3*x4^2*x5*x7*x8^2 + -x2^9*x3*x4^2*x5*x7*x9 + x2^9*x3*x4^2*x5*x7 + -x2^9*x3*x4^2*x5*x8^2*x9 + x2^9*x3*x4^2*x5*x8^2 + x2^9*x3*x4^2*x5*x9 + -x2^9*x3*x4^2*x5 + x2^9*x3*x4^2*x6^2*x7*x8*x9 + -x2^9*x3*x4^2*x6^2*x7*x8 + -x2^9*x3*x4^2*x6^2*x7*x9 + x2^9*x3*x4^2*x6^2*x7 + -x2^9*x3*x4^2*x6^2*x8*x9 + x2^9*x3*x4^2*x6^2*x8 + x2^9*x3*x4^2*x6^2*x9 + -x2^9*x3*x4^2*x6^2 + x2^9*x3*x4^2*x6*x7*x8^2*x9 + -x2^9*x3*x4^2*x6*x7*x8^2 + -x2^9*x3*x4^2*x6*x7*x8*x9 + x2^9*x3*x4^2*x6*x7*x8 + -x2^9*x3*x4^2*x6*x8^2*x9 + x2^9*x3*x4^2*x6*x8^2 + x2^9*x3*x4^2*x6*x8*x9 + -x2^9*x3*x4^2*x6*x8 + -x2^9*x3*x4^2*x7*x8^2*x9 + x2^9*x3*x4^2*x7*x8^2 + x2^9*x3*x4^2*x7*x9 + -x2^9*x3*x4^2*x7 + x2^9*x3*x4^2*x8^2*x9 + -x2^9*x3*x4^2*x8^2 + -x2^9*x3*x4^2*x9 + x2^9*x3*x4^2 + x2^9*x3*x4*x5*x6^4*x7*x8*x9 + -x2^9*x3*x4*x5*x6^4*x7*x8 + -x2^9*x3*x4*x5*x6^4*x7*x9 + x2^9*x3*x4*x5*x6^4*x7 + -x2^9*x3*x4*x5*x6^4*x8*x9 + x2^9*x3*x4*x5*x6^4*x8 + x2^9*x3*x4*x5*x6^4*x9 + -x2^9*x3*x4*x5*x6^4 + x2^9*x3*x4*x5*x6^3*x7*x8^2*x9 + -x2^9*x3*x4*x5*x6^3*x7*x8^2 + -2*x2^9*x3*x4*x5*x6^3*x7*x8*x9 + 2*x2^9*x3*x4*x5*x6^3*x7*x8 + x2^9*x3*x4*x5*x6^3*x7*x9 + -x2^9*x3*x4*x5*x6^3*x7 + -x2^9*x3*x4*x5*x6^3*x8^2*x9 + x2^9*x3*x4*x5*x6^3*x8^2 + 2*x2^9*x3*x4*x5*x6^3*x8*x9 + -2*x2^9*x3*x4*x5*x6^3*x8 + -x2^9*x3*x4*x5*x6^3*x9 + x2^9*x3*x4*x5*x6^3 + -x2^9*x3*x4*x5*x6^2*x7*x8^2*x9 + x2^9*x3*x4*x5*x6^2*x7*x8^2 + x2^9*x3*x4*x5*x6^2*x7*x8*x9 + -x2^9*x3*x4*x5*x6^2*x7*x8 + x2^9*x3*x4*x5*x6^2*x8^2*x9 + -x2^9*x3*x4*x5*x6^2*x8^2 + -x2^9*x3*x4*x5*x6^2*x8*x9 + x2^9*x3*x4*x5*x6^2*x8 + -x2^9*x3*x4*x6^4*x7*x8*x9 + x2^9*x3*x4*x6^4*x7*x8 + x2^9*x3*x4*x6^4*x7*x9 + -x2^9*x3*x4*x6^4*x7 + x2^9*x3*x4*x6^4*x8*x9 + -x2^9*x3*x4*x6^4*x8 + -x2^9*x3*x4*x6^4*x9 + x2^9*x3*x4*x6^4 + -x2^9*x3*x4*x6^3*x7*x8^2*x9 + x2^9*x3*x4*x6^3*x7*x8^2 + 2*x2^9*x3*x4*x6^3*x7*x8*x9 + -2*x2^9*x3*x4*x6^3*x7*x8 + -x2^9*x3*x4*x6^3*x7*x9 + x2^9*x3*x4*x6^3*x7 + x2^9*x3*x4*x6^3*x8^2*x9 + -x2^9*x3*x4*x6^3*x8^2 + -2*x2^9*x3*x4*x6^3*x8*x9 + 2*x2^9*x3*x4*x6^3*x8 + x2^9*x3*x4*x6^3*x9 + -x2^9*x3*x4*x6^3 + x2^9*x3*x4*x6^2*x7*x8^2*x9 + -x2^9*x3*x4*x6^2*x7*x8^2 + -x2^9*x3*x4*x6^2*x7*x8*x9 + x2^9*x3*x4*x6^2*x7*x8 + -x2^9*x3*x4*x6^2*x8^2*x9 + x2^9*x3*x4*x6^2*x8^2 + x2^9*x3*x4*x6^2*x8*x9 + -x2^9*x3*x4*x6^2*x8 + -x2^9*x3*x5*x6^4*x7*x8*x9 + x2^9*x3*x5*x6^4*x7*x8 + x2^9*x3*x5*x6^4*x7*x9 + -x2^9*x3*x5*x6^4*x7 + x2^9*x3*x5*x6^4*x8*x9 + -x2^9*x3*x5*x6^4*x8 + -x2^9*x3*x5*x6^4*x9 + x2^9*x3*x5*x6^4 + -x2^9*x3*x5*x6^3*x7*x8^2*x9 + x2^9*x3*x5*x6^3*x7*x8^2 + 2*x2^9*x3*x5*x6^3*x7*x8*x9 + -2*x2^9*x3*x5*x6^3*x7*x8 + -x2^9*x3*x5*x6^3*x7*x9 + x2^9*x3*x5*x6^3*x7 + x2^9*x3*x5*x6^3*x8^2*x9 + -x2^9*x3*x5*x6^3*x8^2 + -2*x2^9*x3*x5*x6^3*x8*x9 + 2*x2^9*x3*x5*x6^3*x8 + x2^9*x3*x5*x6^3*x9 + -x2^9*x3*x5*x6^3 + x2^9*x3*x5*x6^2*x7*x8^2*x9 + -x2^9*x3*x5*x6^2*x7*x8^2 + -x2^9*x3*x5*x6^2*x7*x8*x9 + x2^9*x3*x5*x6^2*x7*x8 + -x2^9*x3*x5*x6^2*x8^2*x9 + x2^9*x3*x5*x6^2*x8^2 + x2^9*x3*x5*x6^2*x8*x9 + -x2^9*x3*x5*x6^2*x8 + -x2^9*x3*x5*x6*x7*x8*x9^2 + x2^9*x3*x5*x6*x7*x8*x9 + x2^9*x3*x5*x6*x7*x9^2 + -x2^9*x3*x5*x6*x7*x9 + x2^9*x3*x5*x6*x8*x9^2 + -x2^9*x3*x5*x6*x8*x9 + -x2^9*x3*x5*x6*x9^2 + x2^9*x3*x5*x6*x9 + x2^9*x3*x5*x7*x8*x9^2 + -x2^9*x3*x5*x7*x8*x9 + -x2^9*x3*x5*x7*x9^2 + x2^9*x3*x5*x7*x9 + -x2^9*x3*x5*x8*x9^2 + x2^9*x3*x5*x8*x9 + x2^9*x3*x5*x9^2 + -x2^9*x3*x5*x9 + x2^9*x3*x6^4*x7*x8*x9 + -x2^9*x3*x6^4*x7*x8 + -x2^9*x3*x6^4*x7*x9 + x2^9*x3*x6^4*x7 + -x2^9*x3*x6^4*x8*x9 + x2^9*x3*x6^4*x8 + x2^9*x3*x6^4*x9 + -x2^9*x3*x6^4 + x2^9*x3*x6^3*x7*x8^2*x9 + -x2^9*x3*x6^3*x7*x8^2 + -2*x2^9*x3*x6^3*x7*x8*x9 + 2*x2^9*x3*x6^3*x7*x8 + x2^9*x3*x6^3*x7*x9 + -x2^9*x3*x6^3*x7 + -x2^9*x3*x6^3*x8^2*x9 + x2^9*x3*x6^3*x8^2 + 2*x2^9*x3*x6^3*x8*x9 + -2*x2^9*x3*x6^3*x8 + -x2^9*x3*x6^3*x9 + x2^9*x3*x6^3 + -x2^9*x3*x6^2*x7*x8^2*x9 + x2^9*x3*x6^2*x7*x8^2 + x2^9*x3*x6^2*x7*x8*x9 + -x2^9*x3*x6^2*x7*x8 + x2^9*x3*x6^2*x8^2*x9 + -x2^9*x3*x6^2*x8^2 + -x2^9*x3*x6^2*x8*x9 + x2^9*x3*x6^2*x8 + x2^9*x3*x6*x7*x8*x9^2 + -x2^9*x3*x6*x7*x8*x9 + -x2^9*x3*x6*x7*x9^2 + x2^9*x3*x6*x7*x9 + -x2^9*x3*x6*x8*x9^2 + x2^9*x3*x6*x8*x9 + x2^9*x3*x6*x9^2 + -x2^9*x3*x6*x9 + -x2^9*x3*x7*x8*x9^2 + x2^9*x3*x7*x8*x9 + x2^9*x3*x7*x9^2 + -x2^9*x3*x7*x9 + x2^9*x3*x8*x9^2 + -x2^9*x3*x8*x9 + -x2^9*x3*x9^2 + x2^9*x3*x9 + -x2^9*x4^4*x5*x6*x7*x8*x9 + x2^9*x4^4*x5*x6*x7*x8 + x2^9*x4^4*x5*x6*x7*x9 + -x2^9*x4^4*x5*x6*x7 + x2^9*x4^4*x5*x6*x8*x9 + -x2^9*x4^4*x5*x6*x8 + -x2^9*x4^4*x5*x6*x9 + x2^9*x4^4*x5*x6 + x2^9*x4^4*x5*x7*x8*x9 + -x2^9*x4^4*x5*x7*x8 + -x2^9*x4^4*x5*x7*x9 + x2^9*x4^4*x5*x7 + -x2^9*x4^4*x5*x8*x9 + x2^9*x4^4*x5*x8 + x2^9*x4^4*x5*x9 + -x2^9*x4^4*x5 + x2^9*x4^4*x6*x7*x8*x9 + -x2^9*x4^4*x6*x7*x8 + -x2^9*x4^4*x6*x7*x9 + x2^9*x4^4*x6*x7 + -x2^9*x4^4*x6*x8*x9 + x2^9*x4^4*x6*x8 + x2^9*x4^4*x6*x9 + -x2^9*x4^4*x6 + -x2^9*x4^4*x7*x8*x9 + x2^9*x4^4*x7*x8 + x2^9*x4^4*x7*x9 + -x2^9*x4^4*x7 + x2^9*x4^4*x8*x9 + -x2^9*x4^4*x8 + -x2^9*x4^4*x9 + x2^9*x4^4 + -x2^9*x4^3*x5*x6^2*x7*x8*x9 + x2^9*x4^3*x5*x6^2*x7*x8 + x2^9*x4^3*x5*x6^2*x7*x9 + -x2^9*x4^3*x5*x6^2*x7 + x2^9*x4^3*x5*x6^2*x8*x9 + -x2^9*x4^3*x5*x6^2*x8 + -x2^9*x4^3*x5*x6^2*x9 + x2^9*x4^3*x5*x6^2 + -x2^9*x4^3*x5*x6*x7*x8^2*x9 + x2^9*x4^3*x5*x6*x7*x8^2 + -x2^9*x4^3*x5*x6*x7*x8*x9^2 + 3*x2^9*x4^3*x5*x6*x7*x8*x9 + -2*x2^9*x4^3*x5*x6*x7*x8 + x2^9*x4^3*x5*x6*x7*x9^2 + -2*x2^9*x4^3*x5*x6*x7*x9 + x2^9*x4^3*x5*x6*x7 + x2^9*x4^3*x5*x6*x8^2*x9 + -x2^9*x4^3*x5*x6*x8^2 + x2^9*x4^3*x5*x6*x8*x9^2 + -3*x2^9*x4^3*x5*x6*x8*x9 + 2*x2^9*x4^3*x5*x6*x8 + -x2^9*x4^3*x5*x6*x9^2 + 2*x2^9*x4^3*x5*x6*x9 + -x2^9*x4^3*x5*x6 + x2^9*x4^3*x5*x7*x8^2*x9 + -x2^9*x4^3*x5*x7*x8^2 + x2^9*x4^3*x5*x7*x8*x9^2 + -2*x2^9*x4^3*x5*x7*x8*x9 + x2^9*x4^3*x5*x7*x8 + -x2^9*x4^3*x5*x7*x9^2 + x2^9*x4^3*x5*x7*x9 + -x2^9*x4^3*x5*x8^2*x9 + x2^9*x4^3*x5*x8^2 + -x2^9*x4^3*x5*x8*x9^2 + 2*x2^9*x4^3*x5*x8*x9 + -x2^9*x4^3*x5*x8 + x2^9*x4^3*x5*x9^2 + -x2^9*x4^3*x5*x9 + x2^9*x4^3*x6^2*x7*x8*x9 + -x2^9*x4^3*x6^2*x7*x8 + -x2^9*x4^3*x6^2*x7*x9 + x2^9*x4^3*x6^2*x7 + -x2^9*x4^3*x6^2*x8*x9 + x2^9*x4^3*x6^2*x8 + x2^9*x4^3*x6^2*x9 + -x2^9*x4^3*x6^2 + x2^9*x4^3*x6*x7*x8^2*x9 + -x2^9*x4^3*x6*x7*x8^2 + x2^9*x4^3*x6*x7*x8*x9^2 + -3*x2^9*x4^3*x6*x7*x8*x9 + 2*x2^9*x4^3*x6*x7*x8 + -x2^9*x4^3*x6*x7*x9^2 + 2*x2^9*x4^3*x6*x7*x9 + -x2^9*x4^3*x6*x7 + -x2^9*x4^3*x6*x8^2*x9 + x2^9*x4^3*x6*x8^2 + -x2^9*x4^3*x6*x8*x9^2 + 3*x2^9*x4^3*x6*x8*x9 + -2*x2^9*x4^3*x6*x8 + x2^9*x4^3*x6*x9^2 + -2*x2^9*x4^3*x6*x9 + x2^9*x4^3*x6 + -x2^9*x4^3*x7*x8^2*x9 + x2^9*x4^3*x7*x8^2 + -x2^9*x4^3*x7*x8*x9^2 + 2*x2^9*x4^3*x7*x8*x9 + -x2^9*x4^3*x7*x8 + x2^9*x4^3*x7*x9^2 + -x2^9*x4^3*x7*x9 + x2^9*x4^3*x8^2*x9 + -x2^9*x4^3*x8^2 + x2^9*x4^3*x8*x9^2 + -2*x2^9*x4^3*x8*x9 + x2^9*x4^3*x8 + -x2^9*x4^3*x9^2 + x2^9*x4^3*x9 + x2^9*x4^2*x5*x6^2*x7*x8*x9 + -x2^9*x4^2*x5*x6^2*x7*x8 + -x2^9*x4^2*x5*x6^2*x7*x9 + x2^9*x4^2*x5*x6^2*x7 + -x2^9*x4^2*x5*x6^2*x8*x9 + x2^9*x4^2*x5*x6^2*x8 + x2^9*x4^2*x5*x6^2*x9 + -x2^9*x4^2*x5*x6^2 + x2^9*x4^2*x5*x6*x7*x8^2*x9 + -x2^9*x4^2*x5*x6*x7*x8^2 + -x2^9*x4^2*x5*x6*x7*x8*x9 + x2^9*x4^2*x5*x6*x7*x8 + -x2^9*x4^2*x5*x6*x8^2*x9 + x2^9*x4^2*x5*x6*x8^2 + x2^9*x4^2*x5*x6*x8*x9 + -x2^9*x4^2*x5*x6*x8 + -x2^9*x4^2*x5*x7*x8^2*x9 + x2^9*x4^2*x5*x7*x8^2 + x2^9*x4^2*x5*x7*x9 + -x2^9*x4^2*x5*x7 + x2^9*x4^2*x5*x8^2*x9 + -x2^9*x4^2*x5*x8^2 + -x2^9*x4^2*x5*x9 + x2^9*x4^2*x5 + -x2^9*x4^2*x6^2*x7*x8*x9 + x2^9*x4^2*x6^2*x7*x8 + x2^9*x4^2*x6^2*x7*x9 + -x2^9*x4^2*x6^2*x7 + x2^9*x4^2*x6^2*x8*x9 + -x2^9*x4^2*x6^2*x8 + -x2^9*x4^2*x6^2*x9 + x2^9*x4^2*x6^2 + -x2^9*x4^2*x6*x7*x8^2*x9 + x2^9*x4^2*x6*x7*x8^2 + x2^9*x4^2*x6*x7*x8*x9 + -x2^9*x4^2*x6*x7*x8 + x2^9*x4^2*x6*x8^2*x9 + -x2^9*x4^2*x6*x8^2 + -x2^9*x4^2*x6*x8*x9 + x2^9*x4^2*x6*x8 + x2^9*x4^2*x7*x8^2*x9 + -x2^9*x4^2*x7*x8^2 + -x2^9*x4^2*x7*x9 + x2^9*x4^2*x7 + -x2^9*x4^2*x8^2*x9 + x2^9*x4^2*x8^2 + x2^9*x4^2*x9 + -x2^9*x4^2 + -x2^9*x4*x5*x6^4*x7*x8*x9 + x2^9*x4*x5*x6^4*x7*x8 + x2^9*x4*x5*x6^4*x7*x9 + -x2^9*x4*x5*x6^4*x7 + x2^9*x4*x5*x6^4*x8*x9 + -x2^9*x4*x5*x6^4*x8 + -x2^9*x4*x5*x6^4*x9 + x2^9*x4*x5*x6^4 + -x2^9*x4*x5*x6^3*x7*x8^2*x9 + x2^9*x4*x5*x6^3*x7*x8^2 + 2*x2^9*x4*x5*x6^3*x7*x8*x9 + -2*x2^9*x4*x5*x6^3*x7*x8 + -x2^9*x4*x5*x6^3*x7*x9 + x2^9*x4*x5*x6^3*x7 + x2^9*x4*x5*x6^3*x8^2*x9 + -x2^9*x4*x5*x6^3*x8^2 + -2*x2^9*x4*x5*x6^3*x8*x9 + 2*x2^9*x4*x5*x6^3*x8 + x2^9*x4*x5*x6^3*x9 + -x2^9*x4*x5*x6^3 + x2^9*x4*x5*x6^2*x7*x8^2*x9 + -x2^9*x4*x5*x6^2*x7*x8^2 + -x2^9*x4*x5*x6^2*x7*x8*x9 + x2^9*x4*x5*x6^2*x7*x8 + -x2^9*x4*x5*x6^2*x8^2*x9 + x2^9*x4*x5*x6^2*x8^2 + x2^9*x4*x5*x6^2*x8*x9 + -x2^9*x4*x5*x6^2*x8 + x2^9*x4*x6^4*x7*x8*x9 + -x2^9*x4*x6^4*x7*x8 + -x2^9*x4*x6^4*x7*x9 + x2^9*x4*x6^4*x7 + -x2^9*x4*x6^4*x8*x9 + x2^9*x4*x6^4*x8 + x2^9*x4*x6^4*x9 + -x2^9*x4*x6^4 + x2^9*x4*x6^3*x7*x8^2*x9 + -x2^9*x4*x6^3*x7*x8^2 + -2*x2^9*x4*x6^3*x7*x8*x9 + 2*x2^9*x4*x6^3*x7*x8 + x2^9*x4*x6^3*x7*x9 + -x2^9*x4*x6^3*x7 + -x2^9*x4*x6^3*x8^2*x9 + x2^9*x4*x6^3*x8^2 + 2*x2^9*x4*x6^3*x8*x9 + -2*x2^9*x4*x6^3*x8 + -x2^9*x4*x6^3*x9 + x2^9*x4*x6^3 + -x2^9*x4*x6^2*x7*x8^2*x9 + x2^9*x4*x6^2*x7*x8^2 + x2^9*x4*x6^2*x7*x8*x9 + -x2^9*x4*x6^2*x7*x8 + x2^9*x4*x6^2*x8^2*x9 + -x2^9*x4*x6^2*x8^2 + -x2^9*x4*x6^2*x8*x9 + x2^9*x4*x6^2*x8 + x2^9*x5*x6^4*x7*x8*x9 + -x2^9*x5*x6^4*x7*x8 + -x2^9*x5*x6^4*x7*x9 + x2^9*x5*x6^4*x7 + -x2^9*x5*x6^4*x8*x9 + x2^9*x5*x6^4*x8 + x2^9*x5*x6^4*x9 + -x2^9*x5*x6^4 + x2^9*x5*x6^3*x7*x8^2*x9 + -x2^9*x5*x6^3*x7*x8^2 + -2*x2^9*x5*x6^3*x7*x8*x9 + 2*x2^9*x5*x6^3*x7*x8 + x2^9*x5*x6^3*x7*x9 + -x2^9*x5*x6^3*x7 + -x2^9*x5*x6^3*x8^2*x9 + x2^9*x5*x6^3*x8^2 + 2*x2^9*x5*x6^3*x8*x9 + -2*x2^9*x5*x6^3*x8 + -x2^9*x5*x6^3*x9 + x2^9*x5*x6^3 + -x2^9*x5*x6^2*x7*x8^2*x9 + x2^9*x5*x6^2*x7*x8^2 + x2^9*x5*x6^2*x7*x8*x9 + -x2^9*x5*x6^2*x7*x8 + x2^9*x5*x6^2*x8^2*x9 + -x2^9*x5*x6^2*x8^2 + -x2^9*x5*x6^2*x8*x9 + x2^9*x5*x6^2*x8 + x2^9*x5*x6*x7*x8*x9^2 + -x2^9*x5*x6*x7*x8*x9 + -x2^9*x5*x6*x7*x9^2 + x2^9*x5*x6*x7*x9 + -x2^9*x5*x6*x8*x9^2 + x2^9*x5*x6*x8*x9 + x2^9*x5*x6*x9^2 + -x2^9*x5*x6*x9 + -x2^9*x5*x7*x8*x9^2 + x2^9*x5*x7*x8*x9 + x2^9*x5*x7*x9^2 + -x2^9*x5*x7*x9 + x2^9*x5*x8*x9^2 + -x2^9*x5*x8*x9 + -x2^9*x5*x9^2 + x2^9*x5*x9 + -x2^9*x6^4*x7*x8*x9 + x2^9*x6^4*x7*x8 + x2^9*x6^4*x7*x9 + -x2^9*x6^4*x7 + x2^9*x6^4*x8*x9 + -x2^9*x6^4*x8 + -x2^9*x6^4*x9 + x2^9*x6^4 + -x2^9*x6^3*x7*x8^2*x9 + x2^9*x6^3*x7*x8^2 + 2*x2^9*x6^3*x7*x8*x9 + -2*x2^9*x6^3*x7*x8 + -x2^9*x6^3*x7*x9 + x2^9*x6^3*x7 + x2^9*x6^3*x8^2*x9 + -x2^9*x6^3*x8^2 + -2*x2^9*x6^3*x8*x9 + 2*x2^9*x6^3*x8 + x2^9*x6^3*x9 + -x2^9*x6^3 + x2^9*x6^2*x7*x8^2*x9 + -x2^9*x6^2*x7*x8^2 + -x2^9*x6^2*x7*x8*x9 + x2^9*x6^2*x7*x8 + -x2^9*x6^2*x8^2*x9 + x2^9*x6^2*x8^2 + x2^9*x6^2*x8*x9 + -x2^9*x6^2*x8 + -x2^9*x6*x7*x8*x9^2 + x2^9*x6*x7*x8*x9 + x2^9*x6*x7*x9^2 + -x2^9*x6*x7*x9 + x2^9*x6*x8*x9^2 + -x2^9*x6*x8*x9 + -x2^9*x6*x9^2 + x2^9*x6*x9 + x2^9*x7*x8*x9^2 + -x2^9*x7*x8*x9 + -x2^9*x7*x9^2 + x2^9*x7*x9 + -x2^9*x8*x9^2 + x2^9*x8*x9 + x2^9*x9^2 + -x2^9*x9 + x2^8*x3*x4^4*x5*x6^2*x7*x8*x9 + -x2^8*x3*x4^4*x5*x6^2*x7*x8 + -x2^8*x3*x4^4*x5*x6^2*x7*x9 + x2^8*x3*x4^4*x5*x6^2*x7 + -x2^8*x3*x4^4*x5*x6^2*x8*x9 + x2^8*x3*x4^4*x5*x6^2*x8 + x2^8*x3*x4^4*x5*x6^2*x9 + -x2^8*x3*x4^4*x5*x6^2 + x2^8*x3*x4^4*x5*x6*x7*x8^2*x9 + -x2^8*x3*x4^4*x5*x6*x7*x8^2 + x2^8*x3*x4^4*x5*x6*x7*x8*x9^2 + -3*x2^8*x3*x4^4*x5*x6*x7*x8*x9 + 2*x2^8*x3*x4^4*x5*x6*x7*x8 + -x2^8*x3*x4^4*x5*x6*x7*x9^2 + 2*x2^8*x3*x4^4*x5*x6*x7*x9 + -x2^8*x3*x4^4*x5*x6*x7 + -x2^8*x3*x4^4*x5*x6*x8^2*x9 + x2^8*x3*x4^4*x5*x6*x8^2 + -x2^8*x3*x4^4*x5*x6*x8*x9^2 + 3*x2^8*x3*x4^4*x5*x6*x8*x9 + -2*x2^8*x3*x4^4*x5*x6*x8 + x2^8*x3*x4^4*x5*x6*x9^2 + -2*x2^8*x3*x4^4*x5*x6*x9 + x2^8*x3*x4^4*x5*x6 + -x2^8*x3*x4^4*x5*x7*x8^2*x9 + x2^8*x3*x4^4*x5*x7*x8^2 + -x2^8*x3*x4^4*x5*x7*x8*x9^2 + 2*x2^8*x3*x4^4*x5*x7*x8*x9 + -x2^8*x3*x4^4*x5*x7*x8 + x2^8*x3*x4^4*x5*x7*x9^2 + -x2^8*x3*x4^4*x5*x7*x9 + x2^8*x3*x4^4*x5*x8^2*x9 + -x2^8*x3*x4^4*x5*x8^2 + x2^8*x3*x4^4*x5*x8*x9^2 + -2*x2^8*x3*x4^4*x5*x8*x9 + x2^8*x3*x4^4*x5*x8 + -x2^8*x3*x4^4*x5*x9^2 + x2^8*x3*x4^4*x5*x9 + -x2^8*x3*x4^4*x6^2*x7*x8*x9 + x2^8*x3*x4^4*x6^2*x7*x8 + x2^8*x3*x4^4*x6^2*x7*x9 + -x2^8*x3*x4^4*x6^2*x7 + x2^8*x3*x4^4*x6^2*x8*x9 + -x2^8*x3*x4^4*x6^2*x8 + -x2^8*x3*x4^4*x6^2*x9 + x2^8*x3*x4^4*x6^2 + -x2^8*x3*x4^4*x6*x7*x8^2*x9 + x2^8*x3*x4^4*x6*x7*x8^2 + -x2^8*x3*x4^4*x6*x7*x8*x9^2 + 3*x2^8*x3*x4^4*x6*x7*x8*x9 + -2*x2^8*x3*x4^4*x6*x7*x8 + x2^8*x3*x4^4*x6*x7*x9^2 + -2*x2^8*x3*x4^4*x6*x7*x9 + x2^8*x3*x4^4*x6*x7 + x2^8*x3*x4^4*x6*x8^2*x9 + -x2^8*x3*x4^4*x6*x8^2 + x2^8*x3*x4^4*x6*x8*x9^2 + -3*x2^8*x3*x4^4*x6*x8*x9 + 2*x2^8*x3*x4^4*x6*x8 + -x2^8*x3*x4^4*x6*x9^2 + 2*x2^8*x3*x4^4*x6*x9 + -x2^8*x3*x4^4*x6 + x2^8*x3*x4^4*x7*x8^2*x9 + -x2^8*x3*x4^4*x7*x8^2 + x2^8*x3*x4^4*x7*x8*x9^2 + -2*x2^8*x3*x4^4*x7*x8*x9 + x2^8*x3*x4^4*x7*x8 + -x2^8*x3*x4^4*x7*x9^2 + x2^8*x3*x4^4*x7*x9 + -x2^8*x3*x4^4*x8^2*x9 + x2^8*x3*x4^4*x8^2 + -x2^8*x3*x4^4*x8*x9^2 + 2*x2^8*x3*x4^4*x8*x9 + -x2^8*x3*x4^4*x8 + x2^8*x3*x4^4*x9^2 + -x2^8*x3*x4^4*x9 + x2^8*x3*x4^3*x5*x6^2*x7^2*x8*x9 + -x2^8*x3*x4^3*x5*x6^2*x7^2*x8 + -x2^8*x3*x4^3*x5*x6^2*x7^2*x9 + x2^8*x3*x4^3*x5*x6^2*x7^2 + x2^8*x3*x4^3*x5*x6^2*x7*x8^2*x9 + -x2^8*x3*x4^3*x5*x6^2*x7*x8^2 + -3*x2^8*x3*x4^3*x5*x6^2*x7*x8*x9 + 3*x2^8*x3*x4^3*x5*x6^2*x7*x8 + 2*x2^8*x3*x4^3*x5*x6^2*x7*x9 + -2*x2^8*x3*x4^3*x5*x6^2*x7 + -x2^8*x3*x4^3*x5*x6^2*x8^2*x9 + x2^8*x3*x4^3*x5*x6^2*x8^2 + 2*x2^8*x3*x4^3*x5*x6^2*x8*x9 + -2*x2^8*x3*x4^3*x5*x6^2*x8 + -x2^8*x3*x4^3*x5*x6^2*x9 + x2^8*x3*x4^3*x5*x6^2 + -2*x2^8*x3*x4^3*x5*x6*x7*x8^2*x9 + 2*x2^8*x3*x4^3*x5*x6*x7*x8^2 + -x2^8*x3*x4^3*x5*x6*x7*x8*x9^2 + 4*x2^8*x3*x4^3*x5*x6*x7*x8*x9 + -3*x2^8*x3*x4^3*x5*x6*x7*x8 + x2^8*x3*x4^3*x5*x6*x7*x9^2 + -2*x2^8*x3*x4^3*x5*x6*x7*x9 + x2^8*x3*x4^3*x5*x6*x7 + 2*x2^8*x3*x4^3*x5*x6*x8^2*x9 + -2*x2^8*x3*x4^3*x5*x6*x8^2 + x2^8*x3*x4^3*x5*x6*x8*x9^2 + -4*x2^8*x3*x4^3*x5*x6*x8*x9 + 3*x2^8*x3*x4^3*x5*x6*x8 + -x2^8*x3*x4^3*x5*x6*x9^2 + 2*x2^8*x3*x4^3*x5*x6*x9 + -x2^8*x3*x4^3*x5*x6 + -x2^8*x3*x4^3*x5*x7^2*x8*x9 + x2^8*x3*x4^3*x5*x7^2*x8 + x2^8*x3*x4^3*x5*x7^2*x9 + -x2^8*x3*x4^3*x5*x7^2 + x2^8*x3*x4^3*x5*x7*x8^2*x9 + -x2^8*x3*x4^3*x5*x7*x8^2 + x2^8*x3*x4^3*x5*x7*x8*x9^2 + -x2^8*x3*x4^3*x5*x7*x8*x9 + -x2^8*x3*x4^3*x5*x7*x9^2 + x2^8*x3*x4^3*x5*x7 + -x2^8*x3*x4^3*x5*x8^2*x9 + x2^8*x3*x4^3*x5*x8^2 + -x2^8*x3*x4^3*x5*x8*x9^2 + 2*x2^8*x3*x4^3*x5*x8*x9 + -x2^8*x3*x4^3*x5*x8 + x2^8*x3*x4^3*x5*x9^2 + -x2^8*x3*x4^3*x5*x9 + -x2^8*x3*x4^3*x6^2*x7^2*x8*x9 + x2^8*x3*x4^3*x6^2*x7^2*x8 + x2^8*x3*x4^3*x6^2*x7^2*x9 + -x2^8*x3*x4^3*x6^2*x7^2 + -x2^8*x3*x4^3*x6^2*x7*x8^2*x9 + x2^8*x3*x4^3*x6^2*x7*x8^2 + 3*x2^8*x3*x4^3*x6^2*x7*x8*x9 + -3*x2^8*x3*x4^3*x6^2*x7*x8 + -2*x2^8*x3*x4^3*x6^2*x7*x9 + 2*x2^8*x3*x4^3*x6^2*x7 + x2^8*x3*x4^3*x6^2*x8^2*x9 + -x2^8*x3*x4^3*x6^2*x8^2 + -2*x2^8*x3*x4^3*x6^2*x8*x9 + 2*x2^8*x3*x4^3*x6^2*x8 + x2^8*x3*x4^3*x6^2*x9 + -x2^8*x3*x4^3*x6^2 + 2*x2^8*x3*x4^3*x6*x7*x8^2*x9 + -2*x2^8*x3*x4^3*x6*x7*x8^2 + x2^8*x3*x4^3*x6*x7*x8*x9^2 + -4*x2^8*x3*x4^3*x6*x7*x8*x9 + 3*x2^8*x3*x4^3*x6*x7*x8 + -x2^8*x3*x4^3*x6*x7*x9^2 + 2*x2^8*x3*x4^3*x6*x7*x9 + -x2^8*x3*x4^3*x6*x7 + -2*x2^8*x3*x4^3*x6*x8^2*x9 + 2*x2^8*x3*x4^3*x6*x8^2 + -x2^8*x3*x4^3*x6*x8*x9^2 + 4*x2^8*x3*x4^3*x6*x8*x9 + -3*x2^8*x3*x4^3*x6*x8 + x2^8*x3*x4^3*x6*x9^2 + -2*x2^8*x3*x4^3*x6*x9 + x2^8*x3*x4^3*x6 + x2^8*x3*x4^3*x7^2*x8*x9 + -x2^8*x3*x4^3*x7^2*x8 + -x2^8*x3*x4^3*x7^2*x9 + x2^8*x3*x4^3*x7^2 + -x2^8*x3*x4^3*x7*x8^2*x9 + x2^8*x3*x4^3*x7*x8^2 + -x2^8*x3*x4^3*x7*x8*x9^2 + x2^8*x3*x4^3*x7*x8*x9 + x2^8*x3*x4^3*x7*x9^2 + -x2^8*x3*x4^3*x7 + x2^8*x3*x4^3*x8^2*x9 + -x2^8*x3*x4^3*x8^2 + x2^8*x3*x4^3*x8*x9^2 + -2*x2^8*x3*x4^3*x8*x9 + x2^8*x3*x4^3*x8 + -x2^8*x3*x4^3*x9^2 + x2^8*x3*x4^3*x9 + x2^8*x3*x4^2*x5*x6^3*x7^2*x8*x9 + -x2^8*x3*x4^2*x5*x6^3*x7^2*x8 + -x2^8*x3*x4^2*x5*x6^3*x7^2*x9 + x2^8*x3*x4^2*x5*x6^3*x7^2 + -x2^8*x3*x4^2*x5*x6^3*x7*x8*x9 + x2^8*x3*x4^2*x5*x6^3*x7*x8 + x2^8*x3*x4^2*x5*x6^3*x7*x9 + -x2^8*x3*x4^2*x5*x6^3*x7 + -x2^8*x3*x4^2*x5*x6^2*x7^2*x8*x9 + x2^8*x3*x4^2*x5*x6^2*x7^2*x8 + x2^8*x3*x4^2*x5*x6^2*x7^2*x9 + -x2^8*x3*x4^2*x5*x6^2*x7^2 + x2^8*x3*x4^2*x5*x6^2*x7*x8*x9 + -x2^8*x3*x4^2*x5*x6^2*x7*x8 + -x2^8*x3*x4^2*x5*x6^2*x7*x9 + x2^8*x3*x4^2*x5*x6^2*x7 + -x2^8*x3*x4^2*x6^3*x7^2*x8*x9 + x2^8*x3*x4^2*x6^3*x7^2*x8 + x2^8*x3*x4^2*x6^3*x7^2*x9 + -x2^8*x3*x4^2*x6^3*x7^2 + x2^8*x3*x4^2*x6^3*x7*x8*x9 + -x2^8*x3*x4^2*x6^3*x7*x8 + -x2^8*x3*x4^2*x6^3*x7*x9 + x2^8*x3*x4^2*x6^3*x7 + x2^8*x3*x4^2*x6^2*x7^2*x8*x9 + -x2^8*x3*x4^2*x6^2*x7^2*x8 + -x2^8*x3*x4^2*x6^2*x7^2*x9 + x2^8*x3*x4^2*x6^2*x7^2 + -x2^8*x3*x4^2*x6^2*x7*x8*x9 + x2^8*x3*x4^2*x6^2*x7*x8 + x2^8*x3*x4^2*x6^2*x7*x9 + -x2^8*x3*x4^2*x6^2*x7 + x2^8*x3*x4*x5*x6^4*x7^2*x8*x9 + -x2^8*x3*x4*x5*x6^4*x7^2*x8 + -x2^8*x3*x4*x5*x6^4*x7^2*x9 + x2^8*x3*x4*x5*x6^4*x7^2 + -x2^8*x3*x4*x5*x6^4*x7*x8*x9 + x2^8*x3*x4*x5*x6^4*x7*x8 + x2^8*x3*x4*x5*x6^4*x7*x9 + -x2^8*x3*x4*x5*x6^4*x7 + -x2^8*x3*x4*x5*x6^3*x7^2*x8*x9 + x2^8*x3*x4*x5*x6^3*x7^2*x8 + x2^8*x3*x4*x5*x6^3*x7^2*x9 + -x2^8*x3*x4*x5*x6^3*x7^2 + x2^8*x3*x4*x5*x6^3*x7*x8*x9 + -x2^8*x3*x4*x5*x6^3*x7*x8 + -x2^8*x3*x4*x5*x6^3*x7*x9 + x2^8*x3*x4*x5*x6^3*x7 + -x2^8*x3*x4*x5*x6^2*x7*x8^2*x9 + x2^8*x3*x4*x5*x6^2*x7*x8^2 + x2^8*x3*x4*x5*x6^2*x7*x8*x9 + -x2^8*x3*x4*x5*x6^2*x7*x8 + x2^8*x3*x4*x5*x6^2*x8^2*x9 + -x2^8*x3*x4*x5*x6^2*x8^2 + -x2^8*x3*x4*x5*x6^2*x8*x9 + x2^8*x3*x4*x5*x6^2*x8 + x2^8*x3*x4*x5*x6*x7*x8^2*x9 + -x2^8*x3*x4*x5*x6*x7*x8^2 + -x2^8*x3*x4*x5*x6*x7*x8*x9 + x2^8*x3*x4*x5*x6*x7*x8 + -x2^8*x3*x4*x5*x6*x8^2*x9 + x2^8*x3*x4*x5*x6*x8^2 + x2^8*x3*x4*x5*x6*x8*x9 + -x2^8*x3*x4*x5*x6*x8 + -x2^8*x3*x4*x6^4*x7^2*x8*x9 + x2^8*x3*x4*x6^4*x7^2*x8 + x2^8*x3*x4*x6^4*x7^2*x9 + -x2^8*x3*x4*x6^4*x7^2 + x2^8*x3*x4*x6^4*x7*x8*x9 + -x2^8*x3*x4*x6^4*x7*x8 + -x2^8*x3*x4*x6^4*x7*x9 + x2^8*x3*x4*x6^4*x7 + x2^8*x3*x4*x6^3*x7^2*x8*x9 + -x2^8*x3*x4*x6^3*x7^2*x8 + -x2^8*x3*x4*x6^3*x7^2*x9 + x2^8*x3*x4*x6^3*x7^2 + -x2^8*x3*x4*x6^3*x7*x8*x9 + x2^8*x3*x4*x6^3*x7*x8 + x2^8*x3*x4*x6^3*x7*x9 + -x2^8*x3*x4*x6^3*x7 + x2^8*x3*x4*x6^2*x7*x8^2*x9 + -x2^8*x3*x4*x6^2*x7*x8^2 + -x2^8*x3*x4*x6^2*x7*x8*x9 + x2^8*x3*x4*x6^2*x7*x8 + -x2^8*x3*x4*x6^2*x8^2*x9 + x2^8*x3*x4*x6^2*x8^2 + x2^8*x3*x4*x6^2*x8*x9 + -x2^8*x3*x4*x6^2*x8 + -x2^8*x3*x4*x6*x7*x8^2*x9 + x2^8*x3*x4*x6*x7*x8^2 + x2^8*x3*x4*x6*x7*x8*x9 + -x2^8*x3*x4*x6*x7*x8 + x2^8*x3*x4*x6*x8^2*x9 + -x2^8*x3*x4*x6*x8^2 + -x2^8*x3*x4*x6*x8*x9 + x2^8*x3*x4*x6*x8 + -x2^8*x3*x5*x6^4*x7^2*x8*x9 + x2^8*x3*x5*x6^4*x7^2*x8 + x2^8*x3*x5*x6^4*x7^2*x9 + -x2^8*x3*x5*x6^4*x7^2 + x2^8*x3*x5*x6^4*x7*x8*x9 + -x2^8*x3*x5*x6^4*x7*x8 + -x2^8*x3*x5*x6^4*x7*x9 + x2^8*x3*x5*x6^4*x7 + x2^8*x3*x5*x7^2*x8*x9 + -x2^8*x3*x5*x7^2*x8 + -x2^8*x3*x5*x7^2*x9 + x2^8*x3*x5*x7^2 + -x2^8*x3*x5*x7*x8*x9 + x2^8*x3*x5*x7*x8 + x2^8*x3*x5*x7*x9 + -x2^8*x3*x5*x7 + x2^8*x3*x6^4*x7^2*x8*x9 + -x2^8*x3*x6^4*x7^2*x8 + -x2^8*x3*x6^4*x7^2*x9 + x2^8*x3*x6^4*x7^2 + -x2^8*x3*x6^4*x7*x8*x9 + x2^8*x3*x6^4*x7*x8 + x2^8*x3*x6^4*x7*x9 + -x2^8*x3*x6^4*x7 + -x2^8*x3*x7^2*x8*x9 + x2^8*x3*x7^2*x8 + x2^8*x3*x7^2*x9 + -x2^8*x3*x7^2 + x2^8*x3*x7*x8*x9 + -x2^8*x3*x7*x8 + -x2^8*x3*x7*x9 + x2^8*x3*x7 + -x2^8*x4^4*x5*x6^2*x7*x8*x9 + x2^8*x4^4*x5*x6^2*x7*x8 + x2^8*x4^4*x5*x6^2*x7*x9 + -x2^8*x4^4*x5*x6^2*x7 + x2^8*x4^4*x5*x6^2*x8*x9 + -x2^8*x4^4*x5*x6^2*x8 + -x2^8*x4^4*x5*x6^2*x9 + x2^8*x4^4*x5*x6^2 + -x2^8*x4^4*x5*x6*x7*x8^2*x9 + x2^8*x4^4*x5*x6*x7*x8^2 + -x2^8*x4^4*x5*x6*x7*x8*x9^2 + 3*x2^8*x4^4*x5*x6*x7*x8*x9 + -2*x2^8*x4^4*x5*x6*x7*x8 + x2^8*x4^4*x5*x6*x7*x9^2 + -2*x2^8*x4^4*x5*x6*x7*x9 + x2^8*x4^4*x5*x6*x7 + x2^8*x4^4*x5*x6*x8^2*x9 + -x2^8*x4^4*x5*x6*x8^2 + x2^8*x4^4*x5*x6*x8*x9^2 + -3*x2^8*x4^4*x5*x6*x8*x9 + 2*x2^8*x4^4*x5*x6*x8 + -x2^8*x4^4*x5*x6*x9^2 + 2*x2^8*x4^4*x5*x6*x9 + -x2^8*x4^4*x5*x6 + x2^8*x4^4*x5*x7*x8^2*x9 + -x2^8*x4^4*x5*x7*x8^2 + x2^8*x4^4*x5*x7*x8*x9^2 + -2*x2^8*x4^4*x5*x7*x8*x9 + x2^8*x4^4*x5*x7*x8 + -x2^8*x4^4*x5*x7*x9^2 + x2^8*x4^4*x5*x7*x9 + -x2^8*x4^4*x5*x8^2*x9 + x2^8*x4^4*x5*x8^2 + -x2^8*x4^4*x5*x8*x9^2 + 2*x2^8*x4^4*x5*x8*x9 + -x2^8*x4^4*x5*x8 + x2^8*x4^4*x5*x9^2 + -x2^8*x4^4*x5*x9 + x2^8*x4^4*x6^2*x7*x8*x9 + -x2^8*x4^4*x6^2*x7*x8 + -x2^8*x4^4*x6^2*x7*x9 + x2^8*x4^4*x6^2*x7 + -x2^8*x4^4*x6^2*x8*x9 + x2^8*x4^4*x6^2*x8 + x2^8*x4^4*x6^2*x9 + -x2^8*x4^4*x6^2 + x2^8*x4^4*x6*x7*x8^2*x9 + -x2^8*x4^4*x6*x7*x8^2 + x2^8*x4^4*x6*x7*x8*x9^2 + -3*x2^8*x4^4*x6*x7*x8*x9 + 2*x2^8*x4^4*x6*x7*x8 + -x2^8*x4^4*x6*x7*x9^2 + 2*x2^8*x4^4*x6*x7*x9 + -x2^8*x4^4*x6*x7 + -x2^8*x4^4*x6*x8^2*x9 + x2^8*x4^4*x6*x8^2 + -x2^8*x4^4*x6*x8*x9^2 + 3*x2^8*x4^4*x6*x8*x9 + -2*x2^8*x4^4*x6*x8 + x2^8*x4^4*x6*x9^2 + -2*x2^8*x4^4*x6*x9 + x2^8*x4^4*x6 + -x2^8*x4^4*x7*x8^2*x9 + x2^8*x4^4*x7*x8^2 + -x2^8*x4^4*x7*x8*x9^2 + 2*x2^8*x4^4*x7*x8*x9 + -x2^8*x4^4*x7*x8 + x2^8*x4^4*x7*x9^2 + -x2^8*x4^4*x7*x9 + x2^8*x4^4*x8^2*x9 + -x2^8*x4^4*x8^2 + x2^8*x4^4*x8*x9^2 + -2*x2^8*x4^4*x8*x9 + x2^8*x4^4*x8 + -x2^8*x4^4*x9^2 + x2^8*x4^4*x9 + -x2^8*x4^3*x5*x6^2*x7^2*x8*x9 + x2^8*x4^3*x5*x6^2*x7^2*x8 + x2^8*x4^3*x5*x6^2*x7^2*x9 + -x2^8*x4^3*x5*x6^2*x7^2 + -x2^8*x4^3*x5*x6^2*x7*x8^2*x9 + x2^8*x4^3*x5*x6^2*x7*x8^2 + 3*x2^8*x4^3*x5*x6^2*x7*x8*x9 + -3*x2^8*x4^3*x5*x6^2*x7*x8 + -2*x2^8*x4^3*x5*x6^2*x7*x9 + 2*x2^8*x4^3*x5*x6^2*x7 + x2^8*x4^3*x5*x6^2*x8^2*x9 + -x2^8*x4^3*x5*x6^2*x8^2 + -2*x2^8*x4^3*x5*x6^2*x8*x9 + 2*x2^8*x4^3*x5*x6^2*x8 + x2^8*x4^3*x5*x6^2*x9 + -x2^8*x4^3*x5*x6^2 + 2*x2^8*x4^3*x5*x6*x7*x8^2*x9 + -2*x2^8*x4^3*x5*x6*x7*x8^2 + x2^8*x4^3*x5*x6*x7*x8*x9^2 + -4*x2^8*x4^3*x5*x6*x7*x8*x9 + 3*x2^8*x4^3*x5*x6*x7*x8 + -x2^8*x4^3*x5*x6*x7*x9^2 + 2*x2^8*x4^3*x5*x6*x7*x9 + -x2^8*x4^3*x5*x6*x7 + -2*x2^8*x4^3*x5*x6*x8^2*x9 + 2*x2^8*x4^3*x5*x6*x8^2 + -x2^8*x4^3*x5*x6*x8*x9^2 + 4*x2^8*x4^3*x5*x6*x8*x9 + -3*x2^8*x4^3*x5*x6*x8 + x2^8*x4^3*x5*x6*x9^2 + -2*x2^8*x4^3*x5*x6*x9 + x2^8*x4^3*x5*x6 + x2^8*x4^3*x5*x7^2*x8*x9 + -x2^8*x4^3*x5*x7^2*x8 + -x2^8*x4^3*x5*x7^2*x9 + x2^8*x4^3*x5*x7^2 + -x2^8*x4^3*x5*x7*x8^2*x9 + x2^8*x4^3*x5*x7*x8^2 + -x2^8*x4^3*x5*x7*x8*x9^2 + x2^8*x4^3*x5*x7*x8*x9 + x2^8*x4^3*x5*x7*x9^2 + -x2^8*x4^3*x5*x7 + x2^8*x4^3*x5*x8^2*x9 + -x2^8*x4^3*x5*x8^2 + x2^8*x4^3*x5*x8*x9^2 + -2*x2^8*x4^3*x5*x8*x9 + x2^8*x4^3*x5*x8 + -x2^8*x4^3*x5*x9^2 + x2^8*x4^3*x5*x9 + x2^8*x4^3*x6^2*x7^2*x8*x9 + -x2^8*x4^3*x6^2*x7^2*x8 + -x2^8*x4^3*x6^2*x7^2*x9 + x2^8*x4^3*x6^2*x7^2 + x2^8*x4^3*x6^2*x7*x8^2*x9 + -x2^8*x4^3*x6^2*x7*x8^2 + -3*x2^8*x4^3*x6^2*x7*x8*x9 + 3*x2^8*x4^3*x6^2*x7*x8 + 2*x2^8*x4^3*x6^2*x7*x9 + -2*x2^8*x4^3*x6^2*x7 + -x2^8*x4^3*x6^2*x8^2*x9 + x2^8*x4^3*x6^2*x8^2 + 2*x2^8*x4^3*x6^2*x8*x9 + -2*x2^8*x4^3*x6^2*x8 + -x2^8*x4^3*x6^2*x9 + x2^8*x4^3*x6^2 + -2*x2^8*x4^3*x6*x7*x8^2*x9 + 2*x2^8*x4^3*x6*x7*x8^2 + -x2^8*x4^3*x6*x7*x8*x9^2 + 4*x2^8*x4^3*x6*x7*x8*x9 + -3*x2^8*x4^3*x6*x7*x8 + x2^8*x4^3*x6*x7*x9^2 + -2*x2^8*x4^3*x6*x7*x9 + x2^8*x4^3*x6*x7 + 2*x2^8*x4^3*x6*x8^2*x9 + -2*x2^8*x4^3*x6*x8^2 + x2^8*x4^3*x6*x8*x9^2 + -4*x2^8*x4^3*x6*x8*x9 + 3*x2^8*x4^3*x6*x8 + -x2^8*x4^3*x6*x9^2 + 2*x2^8*x4^3*x6*x9 + -x2^8*x4^3*x6 + -x2^8*x4^3*x7^2*x8*x9 + x2^8*x4^3*x7^2*x8 + x2^8*x4^3*x7^2*x9 + -x2^8*x4^3*x7^2 + x2^8*x4^3*x7*x8^2*x9 + -x2^8*x4^3*x7*x8^2 + x2^8*x4^3*x7*x8*x9^2 + -x2^8*x4^3*x7*x8*x9 + -x2^8*x4^3*x7*x9^2 + x2^8*x4^3*x7 + -x2^8*x4^3*x8^2*x9 + x2^8*x4^3*x8^2 + -x2^8*x4^3*x8*x9^2 + 2*x2^8*x4^3*x8*x9 + -x2^8*x4^3*x8 + x2^8*x4^3*x9^2 + -x2^8*x4^3*x9 + -x2^8*x4^2*x5*x6^3*x7^2*x8*x9 + x2^8*x4^2*x5*x6^3*x7^2*x8 + x2^8*x4^2*x5*x6^3*x7^2*x9 + -x2^8*x4^2*x5*x6^3*x7^2 + x2^8*x4^2*x5*x6^3*x7*x8*x9 + -x2^8*x4^2*x5*x6^3*x7*x8 + -x2^8*x4^2*x5*x6^3*x7*x9 + x2^8*x4^2*x5*x6^3*x7 + x2^8*x4^2*x5*x6^2*x7^2*x8*x9 + -x2^8*x4^2*x5*x6^2*x7^2*x8 + -x2^8*x4^2*x5*x6^2*x7^2*x9 + x2^8*x4^2*x5*x6^2*x7^2 + -x2^8*x4^2*x5*x6^2*x7*x8*x9 + x2^8*x4^2*x5*x6^2*x7*x8 + x2^8*x4^2*x5*x6^2*x7*x9 + -x2^8*x4^2*x5*x6^2*x7 + x2^8*x4^2*x6^3*x7^2*x8*x9 + -x2^8*x4^2*x6^3*x7^2*x8 + -x2^8*x4^2*x6^3*x7^2*x9 + x2^8*x4^2*x6^3*x7^2 + -x2^8*x4^2*x6^3*x7*x8*x9 + x2^8*x4^2*x6^3*x7*x8 + x2^8*x4^2*x6^3*x7*x9 + -x2^8*x4^2*x6^3*x7 + -x2^8*x4^2*x6^2*x7^2*x8*x9 + x2^8*x4^2*x6^2*x7^2*x8 + x2^8*x4^2*x6^2*x7^2*x9 + -x2^8*x4^2*x6^2*x7^2 + x2^8*x4^2*x6^2*x7*x8*x9 + -x2^8*x4^2*x6^2*x7*x8 + -x2^8*x4^2*x6^2*x7*x9 + x2^8*x4^2*x6^2*x7 + -x2^8*x4*x5*x6^4*x7^2*x8*x9 + x2^8*x4*x5*x6^4*x7^2*x8 + x2^8*x4*x5*x6^4*x7^2*x9 + -x2^8*x4*x5*x6^4*x7^2 + x2^8*x4*x5*x6^4*x7*x8*x9 + -x2^8*x4*x5*x6^4*x7*x8 + -x2^8*x4*x5*x6^4*x7*x9 + x2^8*x4*x5*x6^4*x7 + x2^8*x4*x5*x6^3*x7^2*x8*x9 + -x2^8*x4*x5*x6^3*x7^2*x8 + -x2^8*x4*x5*x6^3*x7^2*x9 + x2^8*x4*x5*x6^3*x7^2 + -x2^8*x4*x5*x6^3*x7*x8*x9 + x2^8*x4*x5*x6^3*x7*x8 + x2^8*x4*x5*x6^3*x7*x9 + -x2^8*x4*x5*x6^3*x7 + x2^8*x4*x5*x6^2*x7*x8^2*x9 + -x2^8*x4*x5*x6^2*x7*x8^2 + -x2^8*x4*x5*x6^2*x7*x8*x9 + x2^8*x4*x5*x6^2*x7*x8 + -x2^8*x4*x5*x6^2*x8^2*x9 + x2^8*x4*x5*x6^2*x8^2 + x2^8*x4*x5*x6^2*x8*x9 + -x2^8*x4*x5*x6^2*x8 + -x2^8*x4*x5*x6*x7*x8^2*x9 + x2^8*x4*x5*x6*x7*x8^2 + x2^8*x4*x5*x6*x7*x8*x9 + -x2^8*x4*x5*x6*x7*x8 + x2^8*x4*x5*x6*x8^2*x9 + -x2^8*x4*x5*x6*x8^2 + -x2^8*x4*x5*x6*x8*x9 + x2^8*x4*x5*x6*x8 + x2^8*x4*x6^4*x7^2*x8*x9 + -x2^8*x4*x6^4*x7^2*x8 + -x2^8*x4*x6^4*x7^2*x9 + x2^8*x4*x6^4*x7^2 + -x2^8*x4*x6^4*x7*x8*x9 + x2^8*x4*x6^4*x7*x8 + x2^8*x4*x6^4*x7*x9 + -x2^8*x4*x6^4*x7 + -x2^8*x4*x6^3*x7^2*x8*x9 + x2^8*x4*x6^3*x7^2*x8 + x2^8*x4*x6^3*x7^2*x9 + -x2^8*x4*x6^3*x7^2 + x2^8*x4*x6^3*x7*x8*x9 + -x2^8*x4*x6^3*x7*x8 + -x2^8*x4*x6^3*x7*x9 + x2^8*x4*x6^3*x7 + -x2^8*x4*x6^2*x7*x8^2*x9 + x2^8*x4*x6^2*x7*x8^2 + x2^8*x4*x6^2*x7*x8*x9 + -x2^8*x4*x6^2*x7*x8 + x2^8*x4*x6^2*x8^2*x9 + -x2^8*x4*x6^2*x8^2 + -x2^8*x4*x6^2*x8*x9 + x2^8*x4*x6^2*x8 + x2^8*x4*x6*x7*x8^2*x9 + -x2^8*x4*x6*x7*x8^2 + -x2^8*x4*x6*x7*x8*x9 + x2^8*x4*x6*x7*x8 + -x2^8*x4*x6*x8^2*x9 + x2^8*x4*x6*x8^2 + x2^8*x4*x6*x8*x9 + -x2^8*x4*x6*x8 + x2^8*x5*x6^4*x7^2*x8*x9 + -x2^8*x5*x6^4*x7^2*x8 + -x2^8*x5*x6^4*x7^2*x9 + x2^8*x5*x6^4*x7^2 + -x2^8*x5*x6^4*x7*x8*x9 + x2^8*x5*x6^4*x7*x8 + x2^8*x5*x6^4*x7*x9 + -x2^8*x5*x6^4*x7 + -x2^8*x5*x7^2*x8*x9 + x2^8*x5*x7^2*x8 + x2^8*x5*x7^2*x9 + -x2^8*x5*x7^2 + x2^8*x5*x7*x8*x9 + -x2^8*x5*x7*x8 + -x2^8*x5*x7*x9 + x2^8*x5*x7 + -x2^8*x6^4*x7^2*x8*x9 + x2^8*x6^4*x7^2*x8 + x2^8*x6^4*x7^2*x9 + -x2^8*x6^4*x7^2 + x2^8*x6^4*x7*x8*x9 + -x2^8*x6^4*x7*x8 + -x2^8*x6^4*x7*x9 + x2^8*x6^4*x7 + x2^8*x7^2*x8*x9 + -x2^8*x7^2*x8 + -x2^8*x7^2*x9 + x2^8*x7^2 + -x2^8*x7*x8*x9 + x2^8*x7*x8 + x2^8*x7*x9 + -x2^8*x7 + x2^7*x3*x4^6*x5*x6*x7*x8*x9 + -x2^7*x3*x4^6*x5*x6*x7*x8 + -x2^7*x3*x4^6*x5*x6*x7*x9 + x2^7*x3*x4^6*x5*x6*x7 + -x2^7*x3*x4^6*x5*x6*x8*x9 + x2^7*x3*x4^6*x5*x6*x8 + x2^7*x3*x4^6*x5*x6*x9 + -x2^7*x3*x4^6*x5*x6 + -x2^7*x3*x4^6*x5*x7*x8*x9 + x2^7*x3*x4^6*x5*x7*x8 + x2^7*x3*x4^6*x5*x7*x9 + -x2^7*x3*x4^6*x5*x7 + x2^7*x3*x4^6*x5*x8*x9 + -x2^7*x3*x4^6*x5*x8 + -x2^7*x3*x4^6*x5*x9 + x2^7*x3*x4^6*x5 + -x2^7*x3*x4^6*x6*x7*x8*x9 + x2^7*x3*x4^6*x6*x7*x8 + x2^7*x3*x4^6*x6*x7*x9 + -x2^7*x3*x4^6*x6*x7 + x2^7*x3*x4^6*x6*x8*x9 + -x2^7*x3*x4^6*x6*x8 + -x2^7*x3*x4^6*x6*x9 + x2^7*x3*x4^6*x6 + x2^7*x3*x4^6*x7*x8*x9 + -x2^7*x3*x4^6*x7*x8 + -x2^7*x3*x4^6*x7*x9 + x2^7*x3*x4^6*x7 + -x2^7*x3*x4^6*x8*x9 + x2^7*x3*x4^6*x8 + x2^7*x3*x4^6*x9 + -x2^7*x3*x4^6 + x2^7*x3*x4^5*x5*x6*x7*x8^2*x9 + -x2^7*x3*x4^5*x5*x6*x7*x8^2 + x2^7*x3*x4^5*x5*x6*x7*x8*x9^2 + -2*x2^7*x3*x4^5*x5*x6*x7*x8*x9 + x2^7*x3*x4^5*x5*x6*x7*x8 + -x2^7*x3*x4^5*x5*x6*x7*x9^2 + x2^7*x3*x4^5*x5*x6*x7*x9 + -x2^7*x3*x4^5*x5*x6*x8^2*x9 + x2^7*x3*x4^5*x5*x6*x8^2 + -x2^7*x3*x4^5*x5*x6*x8*x9^2 + 2*x2^7*x3*x4^5*x5*x6*x8*x9 + -x2^7*x3*x4^5*x5*x6*x8 + x2^7*x3*x4^5*x5*x6*x9^2 + -x2^7*x3*x4^5*x5*x6*x9 + -x2^7*x3*x4^5*x5*x7*x8^2*x9 + x2^7*x3*x4^5*x5*x7*x8^2 + -x2^7*x3*x4^5*x5*x7*x8*x9^2 + 2*x2^7*x3*x4^5*x5*x7*x8*x9 + -x2^7*x3*x4^5*x5*x7*x8 + x2^7*x3*x4^5*x5*x7*x9^2 + -x2^7*x3*x4^5*x5*x7*x9 + x2^7*x3*x4^5*x5*x8^2*x9 + -x2^7*x3*x4^5*x5*x8^2 + x2^7*x3*x4^5*x5*x8*x9^2 + -2*x2^7*x3*x4^5*x5*x8*x9 + x2^7*x3*x4^5*x5*x8 + -x2^7*x3*x4^5*x5*x9^2 + x2^7*x3*x4^5*x5*x9 + -x2^7*x3*x4^5*x6*x7*x8^2*x9 + x2^7*x3*x4^5*x6*x7*x8^2 + -x2^7*x3*x4^5*x6*x7*x8*x9^2 + 2*x2^7*x3*x4^5*x6*x7*x8*x9 + -x2^7*x3*x4^5*x6*x7*x8 + x2^7*x3*x4^5*x6*x7*x9^2 + -x2^7*x3*x4^5*x6*x7*x9 + x2^7*x3*x4^5*x6*x8^2*x9 + -x2^7*x3*x4^5*x6*x8^2 + x2^7*x3*x4^5*x6*x8*x9^2 + -2*x2^7*x3*x4^5*x6*x8*x9 + x2^7*x3*x4^5*x6*x8 + -x2^7*x3*x4^5*x6*x9^2 + x2^7*x3*x4^5*x6*x9 + x2^7*x3*x4^5*x7*x8^2*x9 + -x2^7*x3*x4^5*x7*x8^2 + x2^7*x3*x4^5*x7*x8*x9^2 + -2*x2^7*x3*x4^5*x7*x8*x9 + x2^7*x3*x4^5*x7*x8 + -x2^7*x3*x4^5*x7*x9^2 + x2^7*x3*x4^5*x7*x9 + -x2^7*x3*x4^5*x8^2*x9 + x2^7*x3*x4^5*x8^2 + -x2^7*x3*x4^5*x8*x9^2 + 2*x2^7*x3*x4^5*x8*x9 + -x2^7*x3*x4^5*x8 + x2^7*x3*x4^5*x9^2 + -x2^7*x3*x4^5*x9 + -x2^7*x3*x4^4*x5*x6*x7*x8^2*x9 + x2^7*x3*x4^4*x5*x6*x7*x8^2 + -x2^7*x3*x4^4*x5*x6*x7*x8*x9^2 + x2^7*x3*x4^4*x5*x6*x7*x8*x9 + x2^7*x3*x4^4*x5*x6*x7*x9^2 + -x2^7*x3*x4^4*x5*x6*x7 + x2^7*x3*x4^4*x5*x6*x8^2*x9 + -x2^7*x3*x4^4*x5*x6*x8^2 + x2^7*x3*x4^4*x5*x6*x8*x9^2 + -x2^7*x3*x4^4*x5*x6*x8*x9 + -x2^7*x3*x4^4*x5*x6*x9^2 + x2^7*x3*x4^4*x5*x6 + x2^7*x3*x4^4*x5*x7*x8^2*x9 + -x2^7*x3*x4^4*x5*x7*x8^2 + x2^7*x3*x4^4*x5*x7*x8*x9^2 + -x2^7*x3*x4^4*x5*x7*x8*x9 + -x2^7*x3*x4^4*x5*x7*x9^2 + x2^7*x3*x4^4*x5*x7 + -x2^7*x3*x4^4*x5*x8^2*x9 + x2^7*x3*x4^4*x5*x8^2 + -x2^7*x3*x4^4*x5*x8*x9^2 + x2^7*x3*x4^4*x5*x8*x9 + x2^7*x3*x4^4*x5*x9^2 + -x2^7*x3*x4^4*x5 + x2^7*x3*x4^4*x6*x7*x8^2*x9 + -x2^7*x3*x4^4*x6*x7*x8^2 + x2^7*x3*x4^4*x6*x7*x8*x9^2 + -x2^7*x3*x4^4*x6*x7*x8*x9 + -x2^7*x3*x4^4*x6*x7*x9^2 + x2^7*x3*x4^4*x6*x7 + -x2^7*x3*x4^4*x6*x8^2*x9 + x2^7*x3*x4^4*x6*x8^2 + -x2^7*x3*x4^4*x6*x8*x9^2 + x2^7*x3*x4^4*x6*x8*x9 + x2^7*x3*x4^4*x6*x9^2 + -x2^7*x3*x4^4*x6 + -x2^7*x3*x4^4*x7*x8^2*x9 + x2^7*x3*x4^4*x7*x8^2 + -x2^7*x3*x4^4*x7*x8*x9^2 + x2^7*x3*x4^4*x7*x8*x9 + x2^7*x3*x4^4*x7*x9^2 + -x2^7*x3*x4^4*x7 + x2^7*x3*x4^4*x8^2*x9 + -x2^7*x3*x4^4*x8^2 + x2^7*x3*x4^4*x8*x9^2 + -x2^7*x3*x4^4*x8*x9 + -x2^7*x3*x4^4*x9^2 + x2^7*x3*x4^4 + x2^7*x3*x4^2*x5*x6^3*x7*x8^2*x9 + -x2^7*x3*x4^2*x5*x6^3*x7*x8^2 + -x2^7*x3*x4^2*x5*x6^3*x7*x8*x9 + x2^7*x3*x4^2*x5*x6^3*x7*x8 + -x2^7*x3*x4^2*x5*x6^3*x8^2*x9 + x2^7*x3*x4^2*x5*x6^3*x8^2 + x2^7*x3*x4^2*x5*x6^3*x8*x9 + -x2^7*x3*x4^2*x5*x6^3*x8 + -x2^7*x3*x4^2*x5*x6^2*x7*x8^2*x9 + x2^7*x3*x4^2*x5*x6^2*x7*x8^2 + x2^7*x3*x4^2*x5*x6^2*x7*x8*x9 + -x2^7*x3*x4^2*x5*x6^2*x7*x8 + x2^7*x3*x4^2*x5*x6^2*x8^2*x9 + -x2^7*x3*x4^2*x5*x6^2*x8^2 + -x2^7*x3*x4^2*x5*x6^2*x8*x9 + x2^7*x3*x4^2*x5*x6^2*x8 + -x2^7*x3*x4^2*x6^3*x7*x8^2*x9 + x2^7*x3*x4^2*x6^3*x7*x8^2 + x2^7*x3*x4^2*x6^3*x7*x8*x9 + -x2^7*x3*x4^2*x6^3*x7*x8 + x2^7*x3*x4^2*x6^3*x8^2*x9 + -x2^7*x3*x4^2*x6^3*x8^2 + -x2^7*x3*x4^2*x6^3*x8*x9 + x2^7*x3*x4^2*x6^3*x8 + x2^7*x3*x4^2*x6^2*x7*x8^2*x9 + -x2^7*x3*x4^2*x6^2*x7*x8^2 + -x2^7*x3*x4^2*x6^2*x7*x8*x9 + x2^7*x3*x4^2*x6^2*x7*x8 + -x2^7*x3*x4^2*x6^2*x8^2*x9 + x2^7*x3*x4^2*x6^2*x8^2 + x2^7*x3*x4^2*x6^2*x8*x9 + -x2^7*x3*x4^2*x6^2*x8 + -x2^7*x3*x4*x5*x6^3*x7*x8^2*x9 + x2^7*x3*x4*x5*x6^3*x7*x8^2 + x2^7*x3*x4*x5*x6^3*x7*x8*x9 + -x2^7*x3*x4*x5*x6^3*x7*x8 + x2^7*x3*x4*x5*x6^3*x8^2*x9 + -x2^7*x3*x4*x5*x6^3*x8^2 + -x2^7*x3*x4*x5*x6^3*x8*x9 + x2^7*x3*x4*x5*x6^3*x8 + x2^7*x3*x4*x5*x6^2*x7*x8^2*x9 + -x2^7*x3*x4*x5*x6^2*x7*x8^2 + -x2^7*x3*x4*x5*x6^2*x7*x8*x9 + x2^7*x3*x4*x5*x6^2*x7*x8 + -x2^7*x3*x4*x5*x6^2*x8^2*x9 + x2^7*x3*x4*x5*x6^2*x8^2 + x2^7*x3*x4*x5*x6^2*x8*x9 + -x2^7*x3*x4*x5*x6^2*x8 + x2^7*x3*x4*x6^3*x7*x8^2*x9 + -x2^7*x3*x4*x6^3*x7*x8^2 + -x2^7*x3*x4*x6^3*x7*x8*x9 + x2^7*x3*x4*x6^3*x7*x8 + -x2^7*x3*x4*x6^3*x8^2*x9 + x2^7*x3*x4*x6^3*x8^2 + x2^7*x3*x4*x6^3*x8*x9 + -x2^7*x3*x4*x6^3*x8 + -x2^7*x3*x4*x6^2*x7*x8^2*x9 + x2^7*x3*x4*x6^2*x7*x8^2 + x2^7*x3*x4*x6^2*x7*x8*x9 + -x2^7*x3*x4*x6^2*x7*x8 + x2^7*x3*x4*x6^2*x8^2*x9 + -x2^7*x3*x4*x6^2*x8^2 + -x2^7*x3*x4*x6^2*x8*x9 + x2^7*x3*x4*x6^2*x8 + -x2^7*x4^6*x5*x6*x7*x8*x9 + x2^7*x4^6*x5*x6*x7*x8 + x2^7*x4^6*x5*x6*x7*x9 + -x2^7*x4^6*x5*x6*x7 + x2^7*x4^6*x5*x6*x8*x9 + -x2^7*x4^6*x5*x6*x8 + -x2^7*x4^6*x5*x6*x9 + x2^7*x4^6*x5*x6 + x2^7*x4^6*x5*x7*x8*x9 + -x2^7*x4^6*x5*x7*x8 + -x2^7*x4^6*x5*x7*x9 + x2^7*x4^6*x5*x7 + -x2^7*x4^6*x5*x8*x9 + x2^7*x4^6*x5*x8 + x2^7*x4^6*x5*x9 + -x2^7*x4^6*x5 + x2^7*x4^6*x6*x7*x8*x9 + -x2^7*x4^6*x6*x7*x8 + -x2^7*x4^6*x6*x7*x9 + x2^7*x4^6*x6*x7 + -x2^7*x4^6*x6*x8*x9 + x2^7*x4^6*x6*x8 + x2^7*x4^6*x6*x9 + -x2^7*x4^6*x6 + -x2^7*x4^6*x7*x8*x9 + x2^7*x4^6*x7*x8 + x2^7*x4^6*x7*x9 + -x2^7*x4^6*x7 + x2^7*x4^6*x8*x9 + -x2^7*x4^6*x8 + -x2^7*x4^6*x9 + x2^7*x4^6 + -x2^7*x4^5*x5*x6*x7*x8^2*x9 + x2^7*x4^5*x5*x6*x7*x8^2 + -x2^7*x4^5*x5*x6*x7*x8*x9^2 + 2*x2^7*x4^5*x5*x6*x7*x8*x9 + -x2^7*x4^5*x5*x6*x7*x8 + x2^7*x4^5*x5*x6*x7*x9^2 + -x2^7*x4^5*x5*x6*x7*x9 + x2^7*x4^5*x5*x6*x8^2*x9 + -x2^7*x4^5*x5*x6*x8^2 + x2^7*x4^5*x5*x6*x8*x9^2 + -2*x2^7*x4^5*x5*x6*x8*x9 + x2^7*x4^5*x5*x6*x8 + -x2^7*x4^5*x5*x6*x9^2 + x2^7*x4^5*x5*x6*x9 + x2^7*x4^5*x5*x7*x8^2*x9 + -x2^7*x4^5*x5*x7*x8^2 + x2^7*x4^5*x5*x7*x8*x9^2 + -2*x2^7*x4^5*x5*x7*x8*x9 + x2^7*x4^5*x5*x7*x8 + -x2^7*x4^5*x5*x7*x9^2 + x2^7*x4^5*x5*x7*x9 + -x2^7*x4^5*x5*x8^2*x9 + x2^7*x4^5*x5*x8^2 + -x2^7*x4^5*x5*x8*x9^2 + 2*x2^7*x4^5*x5*x8*x9 + -x2^7*x4^5*x5*x8 + x2^7*x4^5*x5*x9^2 + -x2^7*x4^5*x5*x9 + x2^7*x4^5*x6*x7*x8^2*x9 + -x2^7*x4^5*x6*x7*x8^2 + x2^7*x4^5*x6*x7*x8*x9^2 + -2*x2^7*x4^5*x6*x7*x8*x9 + x2^7*x4^5*x6*x7*x8 + -x2^7*x4^5*x6*x7*x9^2 + x2^7*x4^5*x6*x7*x9 + -x2^7*x4^5*x6*x8^2*x9 + x2^7*x4^5*x6*x8^2 + -x2^7*x4^5*x6*x8*x9^2 + 2*x2^7*x4^5*x6*x8*x9 + -x2^7*x4^5*x6*x8 + x2^7*x4^5*x6*x9^2 + -x2^7*x4^5*x6*x9 + -x2^7*x4^5*x7*x8^2*x9 + x2^7*x4^5*x7*x8^2 + -x2^7*x4^5*x7*x8*x9^2 + 2*x2^7*x4^5*x7*x8*x9 + -x2^7*x4^5*x7*x8 + x2^7*x4^5*x7*x9^2 + -x2^7*x4^5*x7*x9 + x2^7*x4^5*x8^2*x9 + -x2^7*x4^5*x8^2 + x2^7*x4^5*x8*x9^2 + -2*x2^7*x4^5*x8*x9 + x2^7*x4^5*x8 + -x2^7*x4^5*x9^2 + x2^7*x4^5*x9 + x2^7*x4^4*x5*x6*x7*x8^2*x9 + -x2^7*x4^4*x5*x6*x7*x8^2 + x2^7*x4^4*x5*x6*x7*x8*x9^2 + -x2^7*x4^4*x5*x6*x7*x8*x9 + -x2^7*x4^4*x5*x6*x7*x9^2 + x2^7*x4^4*x5*x6*x7 + -x2^7*x4^4*x5*x6*x8^2*x9 + x2^7*x4^4*x5*x6*x8^2 + -x2^7*x4^4*x5*x6*x8*x9^2 + x2^7*x4^4*x5*x6*x8*x9 + x2^7*x4^4*x5*x6*x9^2 + -x2^7*x4^4*x5*x6 + -x2^7*x4^4*x5*x7*x8^2*x9 + x2^7*x4^4*x5*x7*x8^2 + -x2^7*x4^4*x5*x7*x8*x9^2 + x2^7*x4^4*x5*x7*x8*x9 + x2^7*x4^4*x5*x7*x9^2 + -x2^7*x4^4*x5*x7 + x2^7*x4^4*x5*x8^2*x9 + -x2^7*x4^4*x5*x8^2 + x2^7*x4^4*x5*x8*x9^2 + -x2^7*x4^4*x5*x8*x9 + -x2^7*x4^4*x5*x9^2 + x2^7*x4^4*x5 + -x2^7*x4^4*x6*x7*x8^2*x9 + x2^7*x4^4*x6*x7*x8^2 + -x2^7*x4^4*x6*x7*x8*x9^2 + x2^7*x4^4*x6*x7*x8*x9 + x2^7*x4^4*x6*x7*x9^2 + -x2^7*x4^4*x6*x7 + x2^7*x4^4*x6*x8^2*x9 + -x2^7*x4^4*x6*x8^2 + x2^7*x4^4*x6*x8*x9^2 + -x2^7*x4^4*x6*x8*x9 + -x2^7*x4^4*x6*x9^2 + x2^7*x4^4*x6 + x2^7*x4^4*x7*x8^2*x9 + -x2^7*x4^4*x7*x8^2 + x2^7*x4^4*x7*x8*x9^2 + -x2^7*x4^4*x7*x8*x9 + -x2^7*x4^4*x7*x9^2 + x2^7*x4^4*x7 + -x2^7*x4^4*x8^2*x9 + x2^7*x4^4*x8^2 + -x2^7*x4^4*x8*x9^2 + x2^7*x4^4*x8*x9 + x2^7*x4^4*x9^2 + -x2^7*x4^4 + -x2^7*x4^2*x5*x6^3*x7*x8^2*x9 + x2^7*x4^2*x5*x6^3*x7*x8^2 + x2^7*x4^2*x5*x6^3*x7*x8*x9 + -x2^7*x4^2*x5*x6^3*x7*x8 + x2^7*x4^2*x5*x6^3*x8^2*x9 + -x2^7*x4^2*x5*x6^3*x8^2 + -x2^7*x4^2*x5*x6^3*x8*x9 + x2^7*x4^2*x5*x6^3*x8 + x2^7*x4^2*x5*x6^2*x7*x8^2*x9 + -x2^7*x4^2*x5*x6^2*x7*x8^2 + -x2^7*x4^2*x5*x6^2*x7*x8*x9 + x2^7*x4^2*x5*x6^2*x7*x8 + -x2^7*x4^2*x5*x6^2*x8^2*x9 + x2^7*x4^2*x5*x6^2*x8^2 + x2^7*x4^2*x5*x6^2*x8*x9 + -x2^7*x4^2*x5*x6^2*x8 + x2^7*x4^2*x6^3*x7*x8^2*x9 + -x2^7*x4^2*x6^3*x7*x8^2 + -x2^7*x4^2*x6^3*x7*x8*x9 + x2^7*x4^2*x6^3*x7*x8 + -x2^7*x4^2*x6^3*x8^2*x9 + x2^7*x4^2*x6^3*x8^2 + x2^7*x4^2*x6^3*x8*x9 + -x2^7*x4^2*x6^3*x8 + -x2^7*x4^2*x6^2*x7*x8^2*x9 + x2^7*x4^2*x6^2*x7*x8^2 + x2^7*x4^2*x6^2*x7*x8*x9 + -x2^7*x4^2*x6^2*x7*x8 + x2^7*x4^2*x6^2*x8^2*x9 + -x2^7*x4^2*x6^2*x8^2 + -x2^7*x4^2*x6^2*x8*x9 + x2^7*x4^2*x6^2*x8 + x2^7*x4*x5*x6^3*x7*x8^2*x9 + -x2^7*x4*x5*x6^3*x7*x8^2 + -x2^7*x4*x5*x6^3*x7*x8*x9 + x2^7*x4*x5*x6^3*x7*x8 + -x2^7*x4*x5*x6^3*x8^2*x9 + x2^7*x4*x5*x6^3*x8^2 + x2^7*x4*x5*x6^3*x8*x9 + -x2^7*x4*x5*x6^3*x8 + -x2^7*x4*x5*x6^2*x7*x8^2*x9 + x2^7*x4*x5*x6^2*x7*x8^2 + x2^7*x4*x5*x6^2*x7*x8*x9 + -x2^7*x4*x5*x6^2*x7*x8 + x2^7*x4*x5*x6^2*x8^2*x9 + -x2^7*x4*x5*x6^2*x8^2 + -x2^7*x4*x5*x6^2*x8*x9 + x2^7*x4*x5*x6^2*x8 + -x2^7*x4*x6^3*x7*x8^2*x9 + x2^7*x4*x6^3*x7*x8^2 + x2^7*x4*x6^3*x7*x8*x9 + -x2^7*x4*x6^3*x7*x8 + x2^7*x4*x6^3*x8^2*x9 + -x2^7*x4*x6^3*x8^2 + -x2^7*x4*x6^3*x8*x9 + x2^7*x4*x6^3*x8 + x2^7*x4*x6^2*x7*x8^2*x9 + -x2^7*x4*x6^2*x7*x8^2 + -x2^7*x4*x6^2*x7*x8*x9 + x2^7*x4*x6^2*x7*x8 + -x2^7*x4*x6^2*x8^2*x9 + x2^7*x4*x6^2*x8^2 + x2^7*x4*x6^2*x8*x9 + -x2^7*x4*x6^2*x8 + x2^6*x3*x4^6*x5*x6*x7*x8*x9^2 + -x2^6*x3*x4^6*x5*x6*x7*x8*x9 + -x2^6*x3*x4^6*x5*x6*x7*x9^2 + x2^6*x3*x4^6*x5*x6*x7*x9 + -x2^6*x3*x4^6*x5*x6*x8*x9^2 + x2^6*x3*x4^6*x5*x6*x8*x9 + x2^6*x3*x4^6*x5*x6*x9^2 + -x2^6*x3*x4^6*x5*x6*x9 + -x2^6*x3*x4^6*x5*x7*x8*x9^2 + x2^6*x3*x4^6*x5*x7*x8*x9 + x2^6*x3*x4^6*x5*x7*x9^2 + -x2^6*x3*x4^6*x5*x7*x9 + x2^6*x3*x4^6*x5*x8*x9^2 + -x2^6*x3*x4^6*x5*x8*x9 + -x2^6*x3*x4^6*x5*x9^2 + x2^6*x3*x4^6*x5*x9 + -x2^6*x3*x4^6*x6*x7*x8*x9^2 + x2^6*x3*x4^6*x6*x7*x8*x9 + x2^6*x3*x4^6*x6*x7*x9^2 + -x2^6*x3*x4^6*x6*x7*x9 + x2^6*x3*x4^6*x6*x8*x9^2 + -x2^6*x3*x4^6*x6*x8*x9 + -x2^6*x3*x4^6*x6*x9^2 + x2^6*x3*x4^6*x6*x9 + x2^6*x3*x4^6*x7*x8*x9^2 + -x2^6*x3*x4^6*x7*x8*x9 + -x2^6*x3*x4^6*x7*x9^2 + x2^6*x3*x4^6*x7*x9 + -x2^6*x3*x4^6*x8*x9^2 + x2^6*x3*x4^6*x8*x9 + x2^6*x3*x4^6*x9^2 + -x2^6*x3*x4^6*x9 + -x2^6*x3*x4^5*x5*x6*x7*x8*x9^2 + x2^6*x3*x4^5*x5*x6*x7*x8*x9 + x2^6*x3*x4^5*x5*x6*x7*x9^2 + -x2^6*x3*x4^5*x5*x6*x7*x9 + x2^6*x3*x4^5*x5*x6*x8*x9^2 + -x2^6*x3*x4^5*x5*x6*x8*x9 + -x2^6*x3*x4^5*x5*x6*x9^2 + x2^6*x3*x4^5*x5*x6*x9 + x2^6*x3*x4^5*x5*x7*x8*x9^2 + -x2^6*x3*x4^5*x5*x7*x8*x9 + -x2^6*x3*x4^5*x5*x7*x9^2 + x2^6*x3*x4^5*x5*x7*x9 + -x2^6*x3*x4^5*x5*x8*x9^2 + x2^6*x3*x4^5*x5*x8*x9 + x2^6*x3*x4^5*x5*x9^2 + -x2^6*x3*x4^5*x5*x9 + x2^6*x3*x4^5*x6*x7*x8*x9^2 + -x2^6*x3*x4^5*x6*x7*x8*x9 + -x2^6*x3*x4^5*x6*x7*x9^2 + x2^6*x3*x4^5*x6*x7*x9 + -x2^6*x3*x4^5*x6*x8*x9^2 + x2^6*x3*x4^5*x6*x8*x9 + x2^6*x3*x4^5*x6*x9^2 + -x2^6*x3*x4^5*x6*x9 + -x2^6*x3*x4^5*x7*x8*x9^2 + x2^6*x3*x4^5*x7*x8*x9 + x2^6*x3*x4^5*x7*x9^2 + -x2^6*x3*x4^5*x7*x9 + x2^6*x3*x4^5*x8*x9^2 + -x2^6*x3*x4^5*x8*x9 + -x2^6*x3*x4^5*x9^2 + x2^6*x3*x4^5*x9 + x2^6*x3*x4^3*x5*x6^5*x7*x8*x9 + -x2^6*x3*x4^3*x5*x6^5*x7*x8 + -x2^6*x3*x4^3*x5*x6^5*x7*x9 + x2^6*x3*x4^3*x5*x6^5*x7 + -x2^6*x3*x4^3*x5*x6^5*x8*x9 + x2^6*x3*x4^3*x5*x6^5*x8 + x2^6*x3*x4^3*x5*x6^5*x9 + -x2^6*x3*x4^3*x5*x6^5 + x2^6*x3*x4^3*x5*x6^3*x7^2*x8*x9 + -x2^6*x3*x4^3*x5*x6^3*x7^2*x8 + -x2^6*x3*x4^3*x5*x6^3*x7^2*x9 + x2^6*x3*x4^3*x5*x6^3*x7^2 + x2^6*x3*x4^3*x5*x6^3*x7*x8^2*x9 + -x2^6*x3*x4^3*x5*x6^3*x7*x8^2 + -2*x2^6*x3*x4^3*x5*x6^3*x7*x8*x9 + 2*x2^6*x3*x4^3*x5*x6^3*x7*x8 + x2^6*x3*x4^3*x5*x6^3*x7*x9 + -x2^6*x3*x4^3*x5*x6^3*x7 + -x2^6*x3*x4^3*x5*x6^3*x8^2*x9 + x2^6*x3*x4^3*x5*x6^3*x8^2 + x2^6*x3*x4^3*x5*x6^3*x8*x9 + -x2^6*x3*x4^3*x5*x6^3*x8 + -x2^6*x3*x4^3*x5*x6^2*x7^2*x8*x9 + x2^6*x3*x4^3*x5*x6^2*x7^2*x8 + x2^6*x3*x4^3*x5*x6^2*x7^2*x9 + -x2^6*x3*x4^3*x5*x6^2*x7^2 + -x2^6*x3*x4^3*x5*x6^2*x7*x8^2*x9 + x2^6*x3*x4^3*x5*x6^2*x7*x8^2 + x2^6*x3*x4^3*x5*x6^2*x7*x8*x9 + -x2^6*x3*x4^3*x5*x6^2*x7*x8 + x2^6*x3*x4^3*x5*x6^2*x8^2*x9 + -x2^6*x3*x4^3*x5*x6^2*x8^2 + -x2^6*x3*x4^3*x5*x6^2*x9 + x2^6*x3*x4^3*x5*x6^2 + x2^6*x3*x4^3*x5*x6*x7*x8^2*x9^2 + -x2^6*x3*x4^3*x5*x6*x7*x8^2*x9 + -x2^6*x3*x4^3*x5*x6*x7*x8*x9^2 + x2^6*x3*x4^3*x5*x6*x7*x8*x9 + -x2^6*x3*x4^3*x5*x6*x8^2*x9^2 + x2^6*x3*x4^3*x5*x6*x8^2*x9 + x2^6*x3*x4^3*x5*x6*x8*x9^2 + -x2^6*x3*x4^3*x5*x6*x8*x9 + -x2^6*x3*x4^3*x5*x7*x8^2*x9^2 + x2^6*x3*x4^3*x5*x7*x8^2*x9 + x2^6*x3*x4^3*x5*x7*x8*x9^2 + -x2^6*x3*x4^3*x5*x7*x8*x9 + x2^6*x3*x4^3*x5*x8^2*x9^2 + -x2^6*x3*x4^3*x5*x8^2*x9 + -x2^6*x3*x4^3*x5*x8*x9^2 + x2^6*x3*x4^3*x5*x8*x9 + -x2^6*x3*x4^3*x6^5*x7*x8*x9 + x2^6*x3*x4^3*x6^5*x7*x8 + x2^6*x3*x4^3*x6^5*x7*x9 + -x2^6*x3*x4^3*x6^5*x7 + x2^6*x3*x4^3*x6^5*x8*x9 + -x2^6*x3*x4^3*x6^5*x8 + -x2^6*x3*x4^3*x6^5*x9 + x2^6*x3*x4^3*x6^5 + -x2^6*x3*x4^3*x6^3*x7^2*x8*x9 + x2^6*x3*x4^3*x6^3*x7^2*x8 + x2^6*x3*x4^3*x6^3*x7^2*x9 + -x2^6*x3*x4^3*x6^3*x7^2 + -x2^6*x3*x4^3*x6^3*x7*x8^2*x9 + x2^6*x3*x4^3*x6^3*x7*x8^2 + 2*x2^6*x3*x4^3*x6^3*x7*x8*x9 + -2*x2^6*x3*x4^3*x6^3*x7*x8 + -x2^6*x3*x4^3*x6^3*x7*x9 + x2^6*x3*x4^3*x6^3*x7 + x2^6*x3*x4^3*x6^3*x8^2*x9 + -x2^6*x3*x4^3*x6^3*x8^2 + -x2^6*x3*x4^3*x6^3*x8*x9 + x2^6*x3*x4^3*x6^3*x8 + x2^6*x3*x4^3*x6^2*x7^2*x8*x9 + -x2^6*x3*x4^3*x6^2*x7^2*x8 + -x2^6*x3*x4^3*x6^2*x7^2*x9 + x2^6*x3*x4^3*x6^2*x7^2 + x2^6*x3*x4^3*x6^2*x7*x8^2*x9 + -x2^6*x3*x4^3*x6^2*x7*x8^2 + -x2^6*x3*x4^3*x6^2*x7*x8*x9 + x2^6*x3*x4^3*x6^2*x7*x8 + -x2^6*x3*x4^3*x6^2*x8^2*x9 + x2^6*x3*x4^3*x6^2*x8^2 + x2^6*x3*x4^3*x6^2*x9 + -x2^6*x3*x4^3*x6^2 + -x2^6*x3*x4^3*x6*x7*x8^2*x9^2 + x2^6*x3*x4^3*x6*x7*x8^2*x9 + x2^6*x3*x4^3*x6*x7*x8*x9^2 + -x2^6*x3*x4^3*x6*x7*x8*x9 + x2^6*x3*x4^3*x6*x8^2*x9^2 + -x2^6*x3*x4^3*x6*x8^2*x9 + -x2^6*x3*x4^3*x6*x8*x9^2 + x2^6*x3*x4^3*x6*x8*x9 + x2^6*x3*x4^3*x7*x8^2*x9^2 + -x2^6*x3*x4^3*x7*x8^2*x9 + -x2^6*x3*x4^3*x7*x8*x9^2 + x2^6*x3*x4^3*x7*x8*x9 + -x2^6*x3*x4^3*x8^2*x9^2 + x2^6*x3*x4^3*x8^2*x9 + x2^6*x3*x4^3*x8*x9^2 + -x2^6*x3*x4^3*x8*x9 + x2^6*x3*x4^2*x5*x6^5*x7*x8^2*x9 + -x2^6*x3*x4^2*x5*x6^5*x7*x8^2 + -x2^6*x3*x4^2*x5*x6^5*x7*x8*x9 + x2^6*x3*x4^2*x5*x6^5*x7*x8 + -x2^6*x3*x4^2*x5*x6^5*x8^2*x9 + x2^6*x3*x4^2*x5*x6^5*x8^2 + x2^6*x3*x4^2*x5*x6^5*x8*x9 + -x2^6*x3*x4^2*x5*x6^5*x8 + x2^6*x3*x4^2*x5*x6^4*x7^2*x8*x9 + -x2^6*x3*x4^2*x5*x6^4*x7^2*x8 + -x2^6*x3*x4^2*x5*x6^4*x7^2*x9 + x2^6*x3*x4^2*x5*x6^4*x7^2 + -x2^6*x3*x4^2*x5*x6^4*x7*x8*x9 + x2^6*x3*x4^2*x5*x6^4*x7*x8 + x2^6*x3*x4^2*x5*x6^4*x7*x9 + -x2^6*x3*x4^2*x5*x6^4*x7 + -2*x2^6*x3*x4^2*x5*x6^3*x7^2*x8*x9 + 2*x2^6*x3*x4^2*x5*x6^3*x7^2*x8 + 2*x2^6*x3*x4^2*x5*x6^3*x7^2*x9 + -2*x2^6*x3*x4^2*x5*x6^3*x7^2 + -2*x2^6*x3*x4^2*x5*x6^3*x7*x8^2*x9 + 2*x2^6*x3*x4^2*x5*x6^3*x7*x8^2 + 3*x2^6*x3*x4^2*x5*x6^3*x7*x8*x9 + -3*x2^6*x3*x4^2*x5*x6^3*x7*x8 + -x2^6*x3*x4^2*x5*x6^3*x7*x9 + x2^6*x3*x4^2*x5*x6^3*x7 + 2*x2^6*x3*x4^2*x5*x6^3*x8^2*x9 + -2*x2^6*x3*x4^2*x5*x6^3*x8^2 + -x2^6*x3*x4^2*x5*x6^3*x8*x9 + x2^6*x3*x4^2*x5*x6^3*x8 + -x2^6*x3*x4^2*x5*x6^3*x9 + x2^6*x3*x4^2*x5*x6^3 + x2^6*x3*x4^2*x5*x6^2*x7^2*x8*x9 + -x2^6*x3*x4^2*x5*x6^2*x7^2*x8 + -x2^6*x3*x4^2*x5*x6^2*x7^2*x9 + x2^6*x3*x4^2*x5*x6^2*x7^2 + x2^6*x3*x4^2*x5*x6^2*x7*x8^2*x9 + -x2^6*x3*x4^2*x5*x6^2*x7*x8^2 + -x2^6*x3*x4^2*x5*x6^2*x7*x8*x9 + x2^6*x3*x4^2*x5*x6^2*x7*x8 + -x2^6*x3*x4^2*x5*x6^2*x8^2*x9 + x2^6*x3*x4^2*x5*x6^2*x8^2 + x2^6*x3*x4^2*x5*x6^2*x9 + -x2^6*x3*x4^2*x5*x6^2 + -x2^6*x3*x4^2*x6^5*x7*x8^2*x9 + x2^6*x3*x4^2*x6^5*x7*x8^2 + x2^6*x3*x4^2*x6^5*x7*x8*x9 + -x2^6*x3*x4^2*x6^5*x7*x8 + x2^6*x3*x4^2*x6^5*x8^2*x9 + -x2^6*x3*x4^2*x6^5*x8^2 + -x2^6*x3*x4^2*x6^5*x8*x9 + x2^6*x3*x4^2*x6^5*x8 + -x2^6*x3*x4^2*x6^4*x7^2*x8*x9 + x2^6*x3*x4^2*x6^4*x7^2*x8 + x2^6*x3*x4^2*x6^4*x7^2*x9 + -x2^6*x3*x4^2*x6^4*x7^2 + x2^6*x3*x4^2*x6^4*x7*x8*x9 + -x2^6*x3*x4^2*x6^4*x7*x8 + -x2^6*x3*x4^2*x6^4*x7*x9 + x2^6*x3*x4^2*x6^4*x7 + 2*x2^6*x3*x4^2*x6^3*x7^2*x8*x9 + -2*x2^6*x3*x4^2*x6^3*x7^2*x8 + -2*x2^6*x3*x4^2*x6^3*x7^2*x9 + 2*x2^6*x3*x4^2*x6^3*x7^2 + 2*x2^6*x3*x4^2*x6^3*x7*x8^2*x9 + -2*x2^6*x3*x4^2*x6^3*x7*x8^2 + -3*x2^6*x3*x4^2*x6^3*x7*x8*x9 + 3*x2^6*x3*x4^2*x6^3*x7*x8 + x2^6*x3*x4^2*x6^3*x7*x9 + -x2^6*x3*x4^2*x6^3*x7 + -2*x2^6*x3*x4^2*x6^3*x8^2*x9 + 2*x2^6*x3*x4^2*x6^3*x8^2 + x2^6*x3*x4^2*x6^3*x8*x9 + -x2^6*x3*x4^2*x6^3*x8 + x2^6*x3*x4^2*x6^3*x9 + -x2^6*x3*x4^2*x6^3 + -x2^6*x3*x4^2*x6^2*x7^2*x8*x9 + x2^6*x3*x4^2*x6^2*x7^2*x8 + x2^6*x3*x4^2*x6^2*x7^2*x9 + -x2^6*x3*x4^2*x6^2*x7^2 + -x2^6*x3*x4^2*x6^2*x7*x8^2*x9 + x2^6*x3*x4^2*x6^2*x7*x8^2 + x2^6*x3*x4^2*x6^2*x7*x8*x9 + -x2^6*x3*x4^2*x6^2*x7*x8 + x2^6*x3*x4^2*x6^2*x8^2*x9 + -x2^6*x3*x4^2*x6^2*x8^2 + -x2^6*x3*x4^2*x6^2*x9 + x2^6*x3*x4^2*x6^2 + x2^6*x3*x4*x5*x6^6*x7*x8*x9 + -x2^6*x3*x4*x5*x6^6*x7*x8 + -x2^6*x3*x4*x5*x6^6*x7*x9 + x2^6*x3*x4*x5*x6^6*x7 + -x2^6*x3*x4*x5*x6^6*x8*x9 + x2^6*x3*x4*x5*x6^6*x8 + x2^6*x3*x4*x5*x6^6*x9 + -x2^6*x3*x4*x5*x6^6 + -x2^6*x3*x4*x5*x6^5*x7*x8*x9 + x2^6*x3*x4*x5*x6^5*x7*x8 + x2^6*x3*x4*x5*x6^5*x7*x9 + -x2^6*x3*x4*x5*x6^5*x7 + x2^6*x3*x4*x5*x6^5*x8*x9 + -x2^6*x3*x4*x5*x6^5*x8 + -x2^6*x3*x4*x5*x6^5*x9 + x2^6*x3*x4*x5*x6^5 + -x2^6*x3*x4*x5*x6^4*x7^2*x8*x9 + x2^6*x3*x4*x5*x6^4*x7^2*x8 + x2^6*x3*x4*x5*x6^4*x7^2*x9 + -x2^6*x3*x4*x5*x6^4*x7^2 + x2^6*x3*x4*x5*x6^4*x8*x9 + -x2^6*x3*x4*x5*x6^4*x8 + -x2^6*x3*x4*x5*x6^4*x9 + x2^6*x3*x4*x5*x6^4 + x2^6*x3*x4*x5*x6^3*x7^2*x8*x9 + -x2^6*x3*x4*x5*x6^3*x7^2*x8 + -x2^6*x3*x4*x5*x6^3*x7^2*x9 + x2^6*x3*x4*x5*x6^3*x7^2 + -x2^6*x3*x4*x5*x6^3*x8*x9 + x2^6*x3*x4*x5*x6^3*x8 + x2^6*x3*x4*x5*x6^3*x9 + -x2^6*x3*x4*x5*x6^3 + -x2^6*x3*x4*x6^6*x7*x8*x9 + x2^6*x3*x4*x6^6*x7*x8 + x2^6*x3*x4*x6^6*x7*x9 + -x2^6*x3*x4*x6^6*x7 + x2^6*x3*x4*x6^6*x8*x9 + -x2^6*x3*x4*x6^6*x8 + -x2^6*x3*x4*x6^6*x9 + x2^6*x3*x4*x6^6 + x2^6*x3*x4*x6^5*x7*x8*x9 + -x2^6*x3*x4*x6^5*x7*x8 + -x2^6*x3*x4*x6^5*x7*x9 + x2^6*x3*x4*x6^5*x7 + -x2^6*x3*x4*x6^5*x8*x9 + x2^6*x3*x4*x6^5*x8 + x2^6*x3*x4*x6^5*x9 + -x2^6*x3*x4*x6^5 + x2^6*x3*x4*x6^4*x7^2*x8*x9 + -x2^6*x3*x4*x6^4*x7^2*x8 + -x2^6*x3*x4*x6^4*x7^2*x9 + x2^6*x3*x4*x6^4*x7^2 + -x2^6*x3*x4*x6^4*x8*x9 + x2^6*x3*x4*x6^4*x8 + x2^6*x3*x4*x6^4*x9 + -x2^6*x3*x4*x6^4 + -x2^6*x3*x4*x6^3*x7^2*x8*x9 + x2^6*x3*x4*x6^3*x7^2*x8 + x2^6*x3*x4*x6^3*x7^2*x9 + -x2^6*x3*x4*x6^3*x7^2 + x2^6*x3*x4*x6^3*x8*x9 + -x2^6*x3*x4*x6^3*x8 + -x2^6*x3*x4*x6^3*x9 + x2^6*x3*x4*x6^3 + -x2^6*x3*x5*x6^6*x7*x8*x9 + x2^6*x3*x5*x6^6*x7*x8 + x2^6*x3*x5*x6^6*x7*x9 + -x2^6*x3*x5*x6^6*x7 + x2^6*x3*x5*x6^6*x8*x9 + -x2^6*x3*x5*x6^6*x8 + -x2^6*x3*x5*x6^6*x9 + x2^6*x3*x5*x6^6 + -x2^6*x3*x5*x6^5*x7*x8^2*x9 + x2^6*x3*x5*x6^5*x7*x8^2 + x2^6*x3*x5*x6^5*x7*x8*x9 + -x2^6*x3*x5*x6^5*x7*x8 + x2^6*x3*x5*x6^5*x8^2*x9 + -x2^6*x3*x5*x6^5*x8^2 + -x2^6*x3*x5*x6^5*x8*x9 + x2^6*x3*x5*x6^5*x8 + x2^6*x3*x5*x6^4*x7*x8*x9 + -x2^6*x3*x5*x6^4*x7*x8 + -x2^6*x3*x5*x6^4*x7*x9 + x2^6*x3*x5*x6^4*x7 + -x2^6*x3*x5*x6^4*x8*x9 + x2^6*x3*x5*x6^4*x8 + x2^6*x3*x5*x6^4*x9 + -x2^6*x3*x5*x6^4 + x2^6*x3*x5*x6^3*x7*x8^2*x9 + -x2^6*x3*x5*x6^3*x7*x8^2 + -x2^6*x3*x5*x6^3*x7*x8*x9 + x2^6*x3*x5*x6^3*x7*x8 + -x2^6*x3*x5*x6^3*x8^2*x9 + x2^6*x3*x5*x6^3*x8^2 + x2^6*x3*x5*x6^3*x8*x9 + -x2^6*x3*x5*x6^3*x8 + -x2^6*x3*x5*x6*x7*x8^2*x9^2 + x2^6*x3*x5*x6*x7*x8^2*x9 + x2^6*x3*x5*x6*x7*x8*x9^2 + -x2^6*x3*x5*x6*x7*x8*x9 + x2^6*x3*x5*x6*x8^2*x9^2 + -x2^6*x3*x5*x6*x8^2*x9 + -x2^6*x3*x5*x6*x8*x9^2 + x2^6*x3*x5*x6*x8*x9 + x2^6*x3*x5*x7*x8^2*x9^2 + -x2^6*x3*x5*x7*x8^2*x9 + -x2^6*x3*x5*x7*x8*x9^2 + x2^6*x3*x5*x7*x8*x9 + -x2^6*x3*x5*x8^2*x9^2 + x2^6*x3*x5*x8^2*x9 + x2^6*x3*x5*x8*x9^2 + -x2^6*x3*x5*x8*x9 + x2^6*x3*x6^6*x7*x8*x9 + -x2^6*x3*x6^6*x7*x8 + -x2^6*x3*x6^6*x7*x9 + x2^6*x3*x6^6*x7 + -x2^6*x3*x6^6*x8*x9 + x2^6*x3*x6^6*x8 + x2^6*x3*x6^6*x9 + -x2^6*x3*x6^6 + x2^6*x3*x6^5*x7*x8^2*x9 + -x2^6*x3*x6^5*x7*x8^2 + -x2^6*x3*x6^5*x7*x8*x9 + x2^6*x3*x6^5*x7*x8 + -x2^6*x3*x6^5*x8^2*x9 + x2^6*x3*x6^5*x8^2 + x2^6*x3*x6^5*x8*x9 + -x2^6*x3*x6^5*x8 + -x2^6*x3*x6^4*x7*x8*x9 + x2^6*x3*x6^4*x7*x8 + x2^6*x3*x6^4*x7*x9 + -x2^6*x3*x6^4*x7 + x2^6*x3*x6^4*x8*x9 + -x2^6*x3*x6^4*x8 + -x2^6*x3*x6^4*x9 + x2^6*x3*x6^4 + -x2^6*x3*x6^3*x7*x8^2*x9 + x2^6*x3*x6^3*x7*x8^2 + x2^6*x3*x6^3*x7*x8*x9 + -x2^6*x3*x6^3*x7*x8 + x2^6*x3*x6^3*x8^2*x9 + -x2^6*x3*x6^3*x8^2 + -x2^6*x3*x6^3*x8*x9 + x2^6*x3*x6^3*x8 + x2^6*x3*x6*x7*x8^2*x9^2 + -x2^6*x3*x6*x7*x8^2*x9 + -x2^6*x3*x6*x7*x8*x9^2 + x2^6*x3*x6*x7*x8*x9 + -x2^6*x3*x6*x8^2*x9^2 + x2^6*x3*x6*x8^2*x9 + x2^6*x3*x6*x8*x9^2 + -x2^6*x3*x6*x8*x9 + -x2^6*x3*x7*x8^2*x9^2 + x2^6*x3*x7*x8^2*x9 + x2^6*x3*x7*x8*x9^2 + -x2^6*x3*x7*x8*x9 + x2^6*x3*x8^2*x9^2 + -x2^6*x3*x8^2*x9 + -x2^6*x3*x8*x9^2 + x2^6*x3*x8*x9 + -x2^6*x4^6*x5*x6*x7*x8*x9^2 + x2^6*x4^6*x5*x6*x7*x8*x9 + x2^6*x4^6*x5*x6*x7*x9^2 + -x2^6*x4^6*x5*x6*x7*x9 + x2^6*x4^6*x5*x6*x8*x9^2 + -x2^6*x4^6*x5*x6*x8*x9 + -x2^6*x4^6*x5*x6*x9^2 + x2^6*x4^6*x5*x6*x9 + x2^6*x4^6*x5*x7*x8*x9^2 + -x2^6*x4^6*x5*x7*x8*x9 + -x2^6*x4^6*x5*x7*x9^2 + x2^6*x4^6*x5*x7*x9 + -x2^6*x4^6*x5*x8*x9^2 + x2^6*x4^6*x5*x8*x9 + x2^6*x4^6*x5*x9^2 + -x2^6*x4^6*x5*x9 + x2^6*x4^6*x6*x7*x8*x9^2 + -x2^6*x4^6*x6*x7*x8*x9 + -x2^6*x4^6*x6*x7*x9^2 + x2^6*x4^6*x6*x7*x9 + -x2^6*x4^6*x6*x8*x9^2 + x2^6*x4^6*x6*x8*x9 + x2^6*x4^6*x6*x9^2 + -x2^6*x4^6*x6*x9 + -x2^6*x4^6*x7*x8*x9^2 + x2^6*x4^6*x7*x8*x9 + x2^6*x4^6*x7*x9^2 + -x2^6*x4^6*x7*x9 + x2^6*x4^6*x8*x9^2 + -x2^6*x4^6*x8*x9 + -x2^6*x4^6*x9^2 + x2^6*x4^6*x9 + x2^6*x4^5*x5*x6*x7*x8*x9^2 + -x2^6*x4^5*x5*x6*x7*x8*x9 + -x2^6*x4^5*x5*x6*x7*x9^2 + x2^6*x4^5*x5*x6*x7*x9 + -x2^6*x4^5*x5*x6*x8*x9^2 + x2^6*x4^5*x5*x6*x8*x9 + x2^6*x4^5*x5*x6*x9^2 + -x2^6*x4^5*x5*x6*x9 + -x2^6*x4^5*x5*x7*x8*x9^2 + x2^6*x4^5*x5*x7*x8*x9 + x2^6*x4^5*x5*x7*x9^2 + -x2^6*x4^5*x5*x7*x9 + x2^6*x4^5*x5*x8*x9^2 + -x2^6*x4^5*x5*x8*x9 + -x2^6*x4^5*x5*x9^2 + x2^6*x4^5*x5*x9 + -x2^6*x4^5*x6*x7*x8*x9^2 + x2^6*x4^5*x6*x7*x8*x9 + x2^6*x4^5*x6*x7*x9^2 + -x2^6*x4^5*x6*x7*x9 + x2^6*x4^5*x6*x8*x9^2 + -x2^6*x4^5*x6*x8*x9 + -x2^6*x4^5*x6*x9^2 + x2^6*x4^5*x6*x9 + x2^6*x4^5*x7*x8*x9^2 + -x2^6*x4^5*x7*x8*x9 + -x2^6*x4^5*x7*x9^2 + x2^6*x4^5*x7*x9 + -x2^6*x4^5*x8*x9^2 + x2^6*x4^5*x8*x9 + x2^6*x4^5*x9^2 + -x2^6*x4^5*x9 + -x2^6*x4^3*x5*x6^5*x7*x8*x9 + x2^6*x4^3*x5*x6^5*x7*x8 + x2^6*x4^3*x5*x6^5*x7*x9 + -x2^6*x4^3*x5*x6^5*x7 + x2^6*x4^3*x5*x6^5*x8*x9 + -x2^6*x4^3*x5*x6^5*x8 + -x2^6*x4^3*x5*x6^5*x9 + x2^6*x4^3*x5*x6^5 + -x2^6*x4^3*x5*x6^3*x7^2*x8*x9 + x2^6*x4^3*x5*x6^3*x7^2*x8 + x2^6*x4^3*x5*x6^3*x7^2*x9 + -x2^6*x4^3*x5*x6^3*x7^2 + -x2^6*x4^3*x5*x6^3*x7*x8^2*x9 + x2^6*x4^3*x5*x6^3*x7*x8^2 + 2*x2^6*x4^3*x5*x6^3*x7*x8*x9 + -2*x2^6*x4^3*x5*x6^3*x7*x8 + -x2^6*x4^3*x5*x6^3*x7*x9 + x2^6*x4^3*x5*x6^3*x7 + x2^6*x4^3*x5*x6^3*x8^2*x9 + -x2^6*x4^3*x5*x6^3*x8^2 + -x2^6*x4^3*x5*x6^3*x8*x9 + x2^6*x4^3*x5*x6^3*x8 + x2^6*x4^3*x5*x6^2*x7^2*x8*x9 + -x2^6*x4^3*x5*x6^2*x7^2*x8 + -x2^6*x4^3*x5*x6^2*x7^2*x9 + x2^6*x4^3*x5*x6^2*x7^2 + x2^6*x4^3*x5*x6^2*x7*x8^2*x9 + -x2^6*x4^3*x5*x6^2*x7*x8^2 + -x2^6*x4^3*x5*x6^2*x7*x8*x9 + x2^6*x4^3*x5*x6^2*x7*x8 + -x2^6*x4^3*x5*x6^2*x8^2*x9 + x2^6*x4^3*x5*x6^2*x8^2 + x2^6*x4^3*x5*x6^2*x9 + -x2^6*x4^3*x5*x6^2 + -x2^6*x4^3*x5*x6*x7*x8^2*x9^2 + x2^6*x4^3*x5*x6*x7*x8^2*x9 + x2^6*x4^3*x5*x6*x7*x8*x9^2 + -x2^6*x4^3*x5*x6*x7*x8*x9 + x2^6*x4^3*x5*x6*x8^2*x9^2 + -x2^6*x4^3*x5*x6*x8^2*x9 + -x2^6*x4^3*x5*x6*x8*x9^2 + x2^6*x4^3*x5*x6*x8*x9 + x2^6*x4^3*x5*x7*x8^2*x9^2 + -x2^6*x4^3*x5*x7*x8^2*x9 + -x2^6*x4^3*x5*x7*x8*x9^2 + x2^6*x4^3*x5*x7*x8*x9 + -x2^6*x4^3*x5*x8^2*x9^2 + x2^6*x4^3*x5*x8^2*x9 + x2^6*x4^3*x5*x8*x9^2 + -x2^6*x4^3*x5*x8*x9 + x2^6*x4^3*x6^5*x7*x8*x9 + -x2^6*x4^3*x6^5*x7*x8 + -x2^6*x4^3*x6^5*x7*x9 + x2^6*x4^3*x6^5*x7 + -x2^6*x4^3*x6^5*x8*x9 + x2^6*x4^3*x6^5*x8 + x2^6*x4^3*x6^5*x9 + -x2^6*x4^3*x6^5 + x2^6*x4^3*x6^3*x7^2*x8*x9 + -x2^6*x4^3*x6^3*x7^2*x8 + -x2^6*x4^3*x6^3*x7^2*x9 + x2^6*x4^3*x6^3*x7^2 + x2^6*x4^3*x6^3*x7*x8^2*x9 + -x2^6*x4^3*x6^3*x7*x8^2 + -2*x2^6*x4^3*x6^3*x7*x8*x9 + 2*x2^6*x4^3*x6^3*x7*x8 + x2^6*x4^3*x6^3*x7*x9 + -x2^6*x4^3*x6^3*x7 + -x2^6*x4^3*x6^3*x8^2*x9 + x2^6*x4^3*x6^3*x8^2 + x2^6*x4^3*x6^3*x8*x9 + -x2^6*x4^3*x6^3*x8 + -x2^6*x4^3*x6^2*x7^2*x8*x9 + x2^6*x4^3*x6^2*x7^2*x8 + x2^6*x4^3*x6^2*x7^2*x9 + -x2^6*x4^3*x6^2*x7^2 + -x2^6*x4^3*x6^2*x7*x8^2*x9 + x2^6*x4^3*x6^2*x7*x8^2 + x2^6*x4^3*x6^2*x7*x8*x9 + -x2^6*x4^3*x6^2*x7*x8 + x2^6*x4^3*x6^2*x8^2*x9 + -x2^6*x4^3*x6^2*x8^2 + -x2^6*x4^3*x6^2*x9 + x2^6*x4^3*x6^2 + x2^6*x4^3*x6*x7*x8^2*x9^2 + -x2^6*x4^3*x6*x7*x8^2*x9 + -x2^6*x4^3*x6*x7*x8*x9^2 + x2^6*x4^3*x6*x7*x8*x9 + -x2^6*x4^3*x6*x8^2*x9^2 + x2^6*x4^3*x6*x8^2*x9 + x2^6*x4^3*x6*x8*x9^2 + -x2^6*x4^3*x6*x8*x9 + -x2^6*x4^3*x7*x8^2*x9^2 + x2^6*x4^3*x7*x8^2*x9 + x2^6*x4^3*x7*x8*x9^2 + -x2^6*x4^3*x7*x8*x9 + x2^6*x4^3*x8^2*x9^2 + -x2^6*x4^3*x8^2*x9 + -x2^6*x4^3*x8*x9^2 + x2^6*x4^3*x8*x9 + -x2^6*x4^2*x5*x6^5*x7*x8^2*x9 + x2^6*x4^2*x5*x6^5*x7*x8^2 + x2^6*x4^2*x5*x6^5*x7*x8*x9 + -x2^6*x4^2*x5*x6^5*x7*x8 + x2^6*x4^2*x5*x6^5*x8^2*x9 + -x2^6*x4^2*x5*x6^5*x8^2 + -x2^6*x4^2*x5*x6^5*x8*x9 + x2^6*x4^2*x5*x6^5*x8 + -x2^6*x4^2*x5*x6^4*x7^2*x8*x9 + x2^6*x4^2*x5*x6^4*x7^2*x8 + x2^6*x4^2*x5*x6^4*x7^2*x9 + -x2^6*x4^2*x5*x6^4*x7^2 + x2^6*x4^2*x5*x6^4*x7*x8*x9 + -x2^6*x4^2*x5*x6^4*x7*x8 + -x2^6*x4^2*x5*x6^4*x7*x9 + x2^6*x4^2*x5*x6^4*x7 + 2*x2^6*x4^2*x5*x6^3*x7^2*x8*x9 + -2*x2^6*x4^2*x5*x6^3*x7^2*x8 + -2*x2^6*x4^2*x5*x6^3*x7^2*x9 + 2*x2^6*x4^2*x5*x6^3*x7^2 + 2*x2^6*x4^2*x5*x6^3*x7*x8^2*x9 + -2*x2^6*x4^2*x5*x6^3*x7*x8^2 + -3*x2^6*x4^2*x5*x6^3*x7*x8*x9 + 3*x2^6*x4^2*x5*x6^3*x7*x8 + x2^6*x4^2*x5*x6^3*x7*x9 + -x2^6*x4^2*x5*x6^3*x7 + -2*x2^6*x4^2*x5*x6^3*x8^2*x9 + 2*x2^6*x4^2*x5*x6^3*x8^2 + x2^6*x4^2*x5*x6^3*x8*x9 + -x2^6*x4^2*x5*x6^3*x8 + x2^6*x4^2*x5*x6^3*x9 + -x2^6*x4^2*x5*x6^3 + -x2^6*x4^2*x5*x6^2*x7^2*x8*x9 + x2^6*x4^2*x5*x6^2*x7^2*x8 + x2^6*x4^2*x5*x6^2*x7^2*x9 + -x2^6*x4^2*x5*x6^2*x7^2 + -x2^6*x4^2*x5*x6^2*x7*x8^2*x9 + x2^6*x4^2*x5*x6^2*x7*x8^2 + x2^6*x4^2*x5*x6^2*x7*x8*x9 + -x2^6*x4^2*x5*x6^2*x7*x8 + x2^6*x4^2*x5*x6^2*x8^2*x9 + -x2^6*x4^2*x5*x6^2*x8^2 + -x2^6*x4^2*x5*x6^2*x9 + x2^6*x4^2*x5*x6^2 + x2^6*x4^2*x6^5*x7*x8^2*x9 + -x2^6*x4^2*x6^5*x7*x8^2 + -x2^6*x4^2*x6^5*x7*x8*x9 + x2^6*x4^2*x6^5*x7*x8 + -x2^6*x4^2*x6^5*x8^2*x9 + x2^6*x4^2*x6^5*x8^2 + x2^6*x4^2*x6^5*x8*x9 + -x2^6*x4^2*x6^5*x8 + x2^6*x4^2*x6^4*x7^2*x8*x9 + -x2^6*x4^2*x6^4*x7^2*x8 + -x2^6*x4^2*x6^4*x7^2*x9 + x2^6*x4^2*x6^4*x7^2 + -x2^6*x4^2*x6^4*x7*x8*x9 + x2^6*x4^2*x6^4*x7*x8 + x2^6*x4^2*x6^4*x7*x9 + -x2^6*x4^2*x6^4*x7 + -2*x2^6*x4^2*x6^3*x7^2*x8*x9 + 2*x2^6*x4^2*x6^3*x7^2*x8 + 2*x2^6*x4^2*x6^3*x7^2*x9 + -2*x2^6*x4^2*x6^3*x7^2 + -2*x2^6*x4^2*x6^3*x7*x8^2*x9 + 2*x2^6*x4^2*x6^3*x7*x8^2 + 3*x2^6*x4^2*x6^3*x7*x8*x9 + -3*x2^6*x4^2*x6^3*x7*x8 + -x2^6*x4^2*x6^3*x7*x9 + x2^6*x4^2*x6^3*x7 + 2*x2^6*x4^2*x6^3*x8^2*x9 + -2*x2^6*x4^2*x6^3*x8^2 + -x2^6*x4^2*x6^3*x8*x9 + x2^6*x4^2*x6^3*x8 + -x2^6*x4^2*x6^3*x9 + x2^6*x4^2*x6^3 + x2^6*x4^2*x6^2*x7^2*x8*x9 + -x2^6*x4^2*x6^2*x7^2*x8 + -x2^6*x4^2*x6^2*x7^2*x9 + x2^6*x4^2*x6^2*x7^2 + x2^6*x4^2*x6^2*x7*x8^2*x9 + -x2^6*x4^2*x6^2*x7*x8^2 + -x2^6*x4^2*x6^2*x7*x8*x9 + x2^6*x4^2*x6^2*x7*x8 + -x2^6*x4^2*x6^2*x8^2*x9 + x2^6*x4^2*x6^2*x8^2 + x2^6*x4^2*x6^2*x9 + -x2^6*x4^2*x6^2 + -x2^6*x4*x5*x6^6*x7*x8*x9 + x2^6*x4*x5*x6^6*x7*x8 + x2^6*x4*x5*x6^6*x7*x9 + -x2^6*x4*x5*x6^6*x7 + x2^6*x4*x5*x6^6*x8*x9 + -x2^6*x4*x5*x6^6*x8 + -x2^6*x4*x5*x6^6*x9 + x2^6*x4*x5*x6^6 + x2^6*x4*x5*x6^5*x7*x8*x9 + -x2^6*x4*x5*x6^5*x7*x8 + -x2^6*x4*x5*x6^5*x7*x9 + x2^6*x4*x5*x6^5*x7 + -x2^6*x4*x5*x6^5*x8*x9 + x2^6*x4*x5*x6^5*x8 + x2^6*x4*x5*x6^5*x9 + -x2^6*x4*x5*x6^5 + x2^6*x4*x5*x6^4*x7^2*x8*x9 + -x2^6*x4*x5*x6^4*x7^2*x8 + -x2^6*x4*x5*x6^4*x7^2*x9 + x2^6*x4*x5*x6^4*x7^2 + -x2^6*x4*x5*x6^4*x8*x9 + x2^6*x4*x5*x6^4*x8 + x2^6*x4*x5*x6^4*x9 + -x2^6*x4*x5*x6^4 + -x2^6*x4*x5*x6^3*x7^2*x8*x9 + x2^6*x4*x5*x6^3*x7^2*x8 + x2^6*x4*x5*x6^3*x7^2*x9 + -x2^6*x4*x5*x6^3*x7^2 + x2^6*x4*x5*x6^3*x8*x9 + -x2^6*x4*x5*x6^3*x8 + -x2^6*x4*x5*x6^3*x9 + x2^6*x4*x5*x6^3 + x2^6*x4*x6^6*x7*x8*x9 + -x2^6*x4*x6^6*x7*x8 + -x2^6*x4*x6^6*x7*x9 + x2^6*x4*x6^6*x7 + -x2^6*x4*x6^6*x8*x9 + x2^6*x4*x6^6*x8 + x2^6*x4*x6^6*x9 + -x2^6*x4*x6^6 + -x2^6*x4*x6^5*x7*x8*x9 + x2^6*x4*x6^5*x7*x8 + x2^6*x4*x6^5*x7*x9 + -x2^6*x4*x6^5*x7 + x2^6*x4*x6^5*x8*x9 + -x2^6*x4*x6^5*x8 + -x2^6*x4*x6^5*x9 + x2^6*x4*x6^5 + -x2^6*x4*x6^4*x7^2*x8*x9 + x2^6*x4*x6^4*x7^2*x8 + x2^6*x4*x6^4*x7^2*x9 + -x2^6*x4*x6^4*x7^2 + x2^6*x4*x6^4*x8*x9 + -x2^6*x4*x6^4*x8 + -x2^6*x4*x6^4*x9 + x2^6*x4*x6^4 + x2^6*x4*x6^3*x7^2*x8*x9 + -x2^6*x4*x6^3*x7^2*x8 + -x2^6*x4*x6^3*x7^2*x9 + x2^6*x4*x6^3*x7^2 + -x2^6*x4*x6^3*x8*x9 + x2^6*x4*x6^3*x8 + x2^6*x4*x6^3*x9 + -x2^6*x4*x6^3 + x2^6*x5*x6^6*x7*x8*x9 + -x2^6*x5*x6^6*x7*x8 + -x2^6*x5*x6^6*x7*x9 + x2^6*x5*x6^6*x7 + -x2^6*x5*x6^6*x8*x9 + x2^6*x5*x6^6*x8 + x2^6*x5*x6^6*x9 + -x2^6*x5*x6^6 + x2^6*x5*x6^5*x7*x8^2*x9 + -x2^6*x5*x6^5*x7*x8^2 + -x2^6*x5*x6^5*x7*x8*x9 + x2^6*x5*x6^5*x7*x8 + -x2^6*x5*x6^5*x8^2*x9 + x2^6*x5*x6^5*x8^2 + x2^6*x5*x6^5*x8*x9 + -x2^6*x5*x6^5*x8 + -x2^6*x5*x6^4*x7*x8*x9 + x2^6*x5*x6^4*x7*x8 + x2^6*x5*x6^4*x7*x9 + -x2^6*x5*x6^4*x7 + x2^6*x5*x6^4*x8*x9 + -x2^6*x5*x6^4*x8 + -x2^6*x5*x6^4*x9 + x2^6*x5*x6^4 + -x2^6*x5*x6^3*x7*x8^2*x9 + x2^6*x5*x6^3*x7*x8^2 + x2^6*x5*x6^3*x7*x8*x9 + -x2^6*x5*x6^3*x7*x8 + x2^6*x5*x6^3*x8^2*x9 + -x2^6*x5*x6^3*x8^2 + -x2^6*x5*x6^3*x8*x9 + x2^6*x5*x6^3*x8 + x2^6*x5*x6*x7*x8^2*x9^2 + -x2^6*x5*x6*x7*x8^2*x9 + -x2^6*x5*x6*x7*x8*x9^2 + x2^6*x5*x6*x7*x8*x9 + -x2^6*x5*x6*x8^2*x9^2 + x2^6*x5*x6*x8^2*x9 + x2^6*x5*x6*x8*x9^2 + -x2^6*x5*x6*x8*x9 + -x2^6*x5*x7*x8^2*x9^2 + x2^6*x5*x7*x8^2*x9 + x2^6*x5*x7*x8*x9^2 + -x2^6*x5*x7*x8*x9 + x2^6*x5*x8^2*x9^2 + -x2^6*x5*x8^2*x9 + -x2^6*x5*x8*x9^2 + x2^6*x5*x8*x9 + -x2^6*x6^6*x7*x8*x9 + x2^6*x6^6*x7*x8 + x2^6*x6^6*x7*x9 + -x2^6*x6^6*x7 + x2^6*x6^6*x8*x9 + -x2^6*x6^6*x8 + -x2^6*x6^6*x9 + x2^6*x6^6 + -x2^6*x6^5*x7*x8^2*x9 + x2^6*x6^5*x7*x8^2 + x2^6*x6^5*x7*x8*x9 + -x2^6*x6^5*x7*x8 + x2^6*x6^5*x8^2*x9 + -x2^6*x6^5*x8^2 + -x2^6*x6^5*x8*x9 + x2^6*x6^5*x8 + x2^6*x6^4*x7*x8*x9 + -x2^6*x6^4*x7*x8 + -x2^6*x6^4*x7*x9 + x2^6*x6^4*x7 + -x2^6*x6^4*x8*x9 + x2^6*x6^4*x8 + x2^6*x6^4*x9 + -x2^6*x6^4 + x2^6*x6^3*x7*x8^2*x9 + -x2^6*x6^3*x7*x8^2 + -x2^6*x6^3*x7*x8*x9 + x2^6*x6^3*x7*x8 + -x2^6*x6^3*x8^2*x9 + x2^6*x6^3*x8^2 + x2^6*x6^3*x8*x9 + -x2^6*x6^3*x8 + -x2^6*x6*x7*x8^2*x9^2 + x2^6*x6*x7*x8^2*x9 + x2^6*x6*x7*x8*x9^2 + -x2^6*x6*x7*x8*x9 + x2^6*x6*x8^2*x9^2 + -x2^6*x6*x8^2*x9 + -x2^6*x6*x8*x9^2 + x2^6*x6*x8*x9 + x2^6*x7*x8^2*x9^2 + -x2^6*x7*x8^2*x9 + -x2^6*x7*x8*x9^2 + x2^6*x7*x8*x9 + -x2^6*x8^2*x9^2 + x2^6*x8^2*x9 + x2^6*x8*x9^2 + -x2^6*x8*x9 + x2^5*x3*x4^6*x5*x6*x7*x8^2*x9^2 + -x2^5*x3*x4^6*x5*x6*x7*x8^2 + -x2^5*x3*x4^6*x5*x6*x7*x8*x9^2 + x2^5*x3*x4^6*x5*x6*x7*x8 + -x2^5*x3*x4^6*x5*x6*x8^2*x9^2 + x2^5*x3*x4^6*x5*x6*x8^2 + x2^5*x3*x4^6*x5*x6*x8*x9^2 + -x2^5*x3*x4^6*x5*x6*x8 + -x2^5*x3*x4^6*x5*x7*x8^2*x9^2 + x2^5*x3*x4^6*x5*x7*x8^2 + x2^5*x3*x4^6*x5*x7*x8*x9^2 + -x2^5*x3*x4^6*x5*x7*x8 + x2^5*x3*x4^6*x5*x8^2*x9^2 + -x2^5*x3*x4^6*x5*x8^2 + -x2^5*x3*x4^6*x5*x8*x9^2 + x2^5*x3*x4^6*x5*x8 + -x2^5*x3*x4^6*x6*x7*x8^2*x9^2 + x2^5*x3*x4^6*x6*x7*x8^2 + x2^5*x3*x4^6*x6*x7*x8*x9^2 + -x2^5*x3*x4^6*x6*x7*x8 + x2^5*x3*x4^6*x6*x8^2*x9^2 + -x2^5*x3*x4^6*x6*x8^2 + -x2^5*x3*x4^6*x6*x8*x9^2 + x2^5*x3*x4^6*x6*x8 + x2^5*x3*x4^6*x7*x8^2*x9^2 + -x2^5*x3*x4^6*x7*x8^2 + -x2^5*x3*x4^6*x7*x8*x9^2 + x2^5*x3*x4^6*x7*x8 + -x2^5*x3*x4^6*x8^2*x9^2 + x2^5*x3*x4^6*x8^2 + x2^5*x3*x4^6*x8*x9^2 + -x2^5*x3*x4^6*x8 + x2^5*x3*x4^5*x5*x6^2*x7*x8^2*x9 + -x2^5*x3*x4^5*x5*x6^2*x7*x8^2 + -x2^5*x3*x4^5*x5*x6^2*x7*x9 + x2^5*x3*x4^5*x5*x6^2*x7 + -x2^5*x3*x4^5*x5*x6^2*x8^2*x9 + x2^5*x3*x4^5*x5*x6^2*x8^2 + x2^5*x3*x4^5*x5*x6^2*x9 + -x2^5*x3*x4^5*x5*x6^2 + -2*x2^5*x3*x4^5*x5*x6*x7*x8^2*x9 + 2*x2^5*x3*x4^5*x5*x6*x7*x8^2 + x2^5*x3*x4^5*x5*x6*x7*x8*x9 + -x2^5*x3*x4^5*x5*x6*x7*x8 + x2^5*x3*x4^5*x5*x6*x7*x9 + -x2^5*x3*x4^5*x5*x6*x7 + 2*x2^5*x3*x4^5*x5*x6*x8^2*x9 + -2*x2^5*x3*x4^5*x5*x6*x8^2 + -x2^5*x3*x4^5*x5*x6*x8*x9 + x2^5*x3*x4^5*x5*x6*x8 + -x2^5*x3*x4^5*x5*x6*x9 + x2^5*x3*x4^5*x5*x6 + x2^5*x3*x4^5*x5*x7*x8^2*x9 + -x2^5*x3*x4^5*x5*x7*x8^2 + -x2^5*x3*x4^5*x5*x7*x8*x9 + x2^5*x3*x4^5*x5*x7*x8 + -x2^5*x3*x4^5*x5*x8^2*x9 + x2^5*x3*x4^5*x5*x8^2 + x2^5*x3*x4^5*x5*x8*x9 + -x2^5*x3*x4^5*x5*x8 + -x2^5*x3*x4^5*x6^2*x7*x8^2*x9 + x2^5*x3*x4^5*x6^2*x7*x8^2 + x2^5*x3*x4^5*x6^2*x7*x9 + -x2^5*x3*x4^5*x6^2*x7 + x2^5*x3*x4^5*x6^2*x8^2*x9 + -x2^5*x3*x4^5*x6^2*x8^2 + -x2^5*x3*x4^5*x6^2*x9 + x2^5*x3*x4^5*x6^2 + 2*x2^5*x3*x4^5*x6*x7*x8^2*x9 + -2*x2^5*x3*x4^5*x6*x7*x8^2 + -x2^5*x3*x4^5*x6*x7*x8*x9 + x2^5*x3*x4^5*x6*x7*x8 + -x2^5*x3*x4^5*x6*x7*x9 + x2^5*x3*x4^5*x6*x7 + -2*x2^5*x3*x4^5*x6*x8^2*x9 + 2*x2^5*x3*x4^5*x6*x8^2 + x2^5*x3*x4^5*x6*x8*x9 + -x2^5*x3*x4^5*x6*x8 + x2^5*x3*x4^5*x6*x9 + -x2^5*x3*x4^5*x6 + -x2^5*x3*x4^5*x7*x8^2*x9 + x2^5*x3*x4^5*x7*x8^2 + x2^5*x3*x4^5*x7*x8*x9 + -x2^5*x3*x4^5*x7*x8 + x2^5*x3*x4^5*x8^2*x9 + -x2^5*x3*x4^5*x8^2 + -x2^5*x3*x4^5*x8*x9 + x2^5*x3*x4^5*x8 + x2^5*x3*x4^4*x5*x6^5*x7*x8*x9 + -x2^5*x3*x4^4*x5*x6^5*x7*x8 + -x2^5*x3*x4^4*x5*x6^5*x7*x9 + x2^5*x3*x4^4*x5*x6^5*x7 + -x2^5*x3*x4^4*x5*x6^5*x8*x9 + x2^5*x3*x4^4*x5*x6^5*x8 + x2^5*x3*x4^4*x5*x6^5*x9 + -x2^5*x3*x4^4*x5*x6^5 + x2^5*x3*x4^4*x5*x6^3*x7*x8^2*x9 + -x2^5*x3*x4^4*x5*x6^3*x7*x8^2 + -x2^5*x3*x4^4*x5*x6^3*x7*x8*x9 + x2^5*x3*x4^4*x5*x6^3*x7*x8 + -x2^5*x3*x4^4*x5*x6^3*x8^2*x9 + x2^5*x3*x4^4*x5*x6^3*x8^2 + x2^5*x3*x4^4*x5*x6^3*x8*x9 + -x2^5*x3*x4^4*x5*x6^3*x8 + -x2^5*x3*x4^4*x5*x6^2*x7*x8^2*x9 + x2^5*x3*x4^4*x5*x6^2*x7*x8^2 + -x2^5*x3*x4^4*x5*x6^2*x7*x8*x9 + x2^5*x3*x4^4*x5*x6^2*x7*x8 + 2*x2^5*x3*x4^4*x5*x6^2*x7*x9 + -2*x2^5*x3*x4^4*x5*x6^2*x7 + x2^5*x3*x4^4*x5*x6^2*x8^2*x9 + -x2^5*x3*x4^4*x5*x6^2*x8^2 + x2^5*x3*x4^4*x5*x6^2*x8*x9 + -x2^5*x3*x4^4*x5*x6^2*x8 + -2*x2^5*x3*x4^4*x5*x6^2*x9 + 2*x2^5*x3*x4^4*x5*x6^2 + x2^5*x3*x4^4*x5*x6*x7*x8*x9 + -x2^5*x3*x4^4*x5*x6*x7*x8 + -x2^5*x3*x4^4*x5*x6*x7*x9 + x2^5*x3*x4^4*x5*x6*x7 + -x2^5*x3*x4^4*x5*x6*x8*x9 + x2^5*x3*x4^4*x5*x6*x8 + x2^5*x3*x4^4*x5*x6*x9 + -x2^5*x3*x4^4*x5*x6 + -x2^5*x3*x4^4*x6^5*x7*x8*x9 + x2^5*x3*x4^4*x6^5*x7*x8 + x2^5*x3*x4^4*x6^5*x7*x9 + -x2^5*x3*x4^4*x6^5*x7 + x2^5*x3*x4^4*x6^5*x8*x9 + -x2^5*x3*x4^4*x6^5*x8 + -x2^5*x3*x4^4*x6^5*x9 + x2^5*x3*x4^4*x6^5 + -x2^5*x3*x4^4*x6^3*x7*x8^2*x9 + x2^5*x3*x4^4*x6^3*x7*x8^2 + x2^5*x3*x4^4*x6^3*x7*x8*x9 + -x2^5*x3*x4^4*x6^3*x7*x8 + x2^5*x3*x4^4*x6^3*x8^2*x9 + -x2^5*x3*x4^4*x6^3*x8^2 + -x2^5*x3*x4^4*x6^3*x8*x9 + x2^5*x3*x4^4*x6^3*x8 + x2^5*x3*x4^4*x6^2*x7*x8^2*x9 + -x2^5*x3*x4^4*x6^2*x7*x8^2 + x2^5*x3*x4^4*x6^2*x7*x8*x9 + -x2^5*x3*x4^4*x6^2*x7*x8 + -2*x2^5*x3*x4^4*x6^2*x7*x9 + 2*x2^5*x3*x4^4*x6^2*x7 + -x2^5*x3*x4^4*x6^2*x8^2*x9 + x2^5*x3*x4^4*x6^2*x8^2 + -x2^5*x3*x4^4*x6^2*x8*x9 + x2^5*x3*x4^4*x6^2*x8 + 2*x2^5*x3*x4^4*x6^2*x9 + -2*x2^5*x3*x4^4*x6^2 + -x2^5*x3*x4^4*x6*x7*x8*x9 + x2^5*x3*x4^4*x6*x7*x8 + x2^5*x3*x4^4*x6*x7*x9 + -x2^5*x3*x4^4*x6*x7 + x2^5*x3*x4^4*x6*x8*x9 + -x2^5*x3*x4^4*x6*x8 + -x2^5*x3*x4^4*x6*x9 + x2^5*x3*x4^4*x6 + -x2^5*x3*x4^3*x5*x6^5*x7*x8*x9 + x2^5*x3*x4^3*x5*x6^5*x7*x8 + x2^5*x3*x4^3*x5*x6^5*x7*x9 + -x2^5*x3*x4^3*x5*x6^5*x7 + x2^5*x3*x4^3*x5*x6^5*x8*x9 + -x2^5*x3*x4^3*x5*x6^5*x8 + -x2^5*x3*x4^3*x5*x6^5*x9 + x2^5*x3*x4^3*x5*x6^5 + x2^5*x3*x4^3*x5*x6^4*x7^2*x8*x9 + -x2^5*x3*x4^3*x5*x6^4*x7^2*x8 + -x2^5*x3*x4^3*x5*x6^4*x7^2*x9 + x2^5*x3*x4^3*x5*x6^4*x7^2 + -x2^5*x3*x4^3*x5*x6^4*x7*x8*x9 + x2^5*x3*x4^3*x5*x6^4*x7*x8 + x2^5*x3*x4^3*x5*x6^4*x7*x9 + -x2^5*x3*x4^3*x5*x6^4*x7 + x2^5*x3*x4^3*x5*x6^3*x7^2*x8^2*x9 + -x2^5*x3*x4^3*x5*x6^3*x7^2*x8^2 + -2*x2^5*x3*x4^3*x5*x6^3*x7^2*x8*x9 + 2*x2^5*x3*x4^3*x5*x6^3*x7^2*x8 + x2^5*x3*x4^3*x5*x6^3*x7^2*x9 + -x2^5*x3*x4^3*x5*x6^3*x7^2 + -2*x2^5*x3*x4^3*x5*x6^3*x7*x8^2*x9 + 2*x2^5*x3*x4^3*x5*x6^3*x7*x8^2 + 3*x2^5*x3*x4^3*x5*x6^3*x7*x8*x9 + -3*x2^5*x3*x4^3*x5*x6^3*x7*x8 + -x2^5*x3*x4^3*x5*x6^3*x7*x9 + x2^5*x3*x4^3*x5*x6^3*x7 + x2^5*x3*x4^3*x5*x6^3*x8^2*x9 + -x2^5*x3*x4^3*x5*x6^3*x8^2 + -x2^5*x3*x4^3*x5*x6^3*x8*x9 + x2^5*x3*x4^3*x5*x6^3*x8 + x2^5*x3*x4^3*x5*x6^2*x7*x8*x9 + -x2^5*x3*x4^3*x5*x6^2*x7*x8 + -x2^5*x3*x4^3*x5*x6^2*x7*x9 + x2^5*x3*x4^3*x5*x6^2*x7 + -x2^5*x3*x4^3*x5*x6^2*x8*x9 + x2^5*x3*x4^3*x5*x6^2*x8 + x2^5*x3*x4^3*x5*x6^2*x9 + -x2^5*x3*x4^3*x5*x6^2 + -x2^5*x3*x4^3*x5*x6*x7*x8^2*x9^2 + 2*x2^5*x3*x4^3*x5*x6*x7*x8^2*x9 + -x2^5*x3*x4^3*x5*x6*x7*x8^2 + x2^5*x3*x4^3*x5*x6*x7*x8*x9^2 + -2*x2^5*x3*x4^3*x5*x6*x7*x8*x9 + x2^5*x3*x4^3*x5*x6*x7*x8 + x2^5*x3*x4^3*x5*x6*x8^2*x9^2 + -2*x2^5*x3*x4^3*x5*x6*x8^2*x9 + x2^5*x3*x4^3*x5*x6*x8^2 + -x2^5*x3*x4^3*x5*x6*x8*x9^2 + 2*x2^5*x3*x4^3*x5*x6*x8*x9 + -x2^5*x3*x4^3*x5*x6*x8 + -x2^5*x3*x4^3*x5*x7^2*x8^2*x9 + x2^5*x3*x4^3*x5*x7^2*x8^2 + x2^5*x3*x4^3*x5*x7^2*x8*x9 + -x2^5*x3*x4^3*x5*x7^2*x8 + x2^5*x3*x4^3*x5*x7*x8^2*x9^2 + -x2^5*x3*x4^3*x5*x7*x8^2 + -x2^5*x3*x4^3*x5*x7*x8*x9^2 + x2^5*x3*x4^3*x5*x7*x8 + -x2^5*x3*x4^3*x5*x8^2*x9^2 + x2^5*x3*x4^3*x5*x8^2*x9 + x2^5*x3*x4^3*x5*x8*x9^2 + -x2^5*x3*x4^3*x5*x8*x9 + x2^5*x3*x4^3*x6^5*x7*x8*x9 + -x2^5*x3*x4^3*x6^5*x7*x8 + -x2^5*x3*x4^3*x6^5*x7*x9 + x2^5*x3*x4^3*x6^5*x7 + -x2^5*x3*x4^3*x6^5*x8*x9 + x2^5*x3*x4^3*x6^5*x8 + x2^5*x3*x4^3*x6^5*x9 + -x2^5*x3*x4^3*x6^5 + -x2^5*x3*x4^3*x6^4*x7^2*x8*x9 + x2^5*x3*x4^3*x6^4*x7^2*x8 + x2^5*x3*x4^3*x6^4*x7^2*x9 + -x2^5*x3*x4^3*x6^4*x7^2 + x2^5*x3*x4^3*x6^4*x7*x8*x9 + -x2^5*x3*x4^3*x6^4*x7*x8 + -x2^5*x3*x4^3*x6^4*x7*x9 + x2^5*x3*x4^3*x6^4*x7 + -x2^5*x3*x4^3*x6^3*x7^2*x8^2*x9 + x2^5*x3*x4^3*x6^3*x7^2*x8^2 + 2*x2^5*x3*x4^3*x6^3*x7^2*x8*x9 + -2*x2^5*x3*x4^3*x6^3*x7^2*x8 + -x2^5*x3*x4^3*x6^3*x7^2*x9 + x2^5*x3*x4^3*x6^3*x7^2 + 2*x2^5*x3*x4^3*x6^3*x7*x8^2*x9 + -2*x2^5*x3*x4^3*x6^3*x7*x8^2 + -3*x2^5*x3*x4^3*x6^3*x7*x8*x9 + 3*x2^5*x3*x4^3*x6^3*x7*x8 + x2^5*x3*x4^3*x6^3*x7*x9 + -x2^5*x3*x4^3*x6^3*x7 + -x2^5*x3*x4^3*x6^3*x8^2*x9 + x2^5*x3*x4^3*x6^3*x8^2 + x2^5*x3*x4^3*x6^3*x8*x9 + -x2^5*x3*x4^3*x6^3*x8 + -x2^5*x3*x4^3*x6^2*x7*x8*x9 + x2^5*x3*x4^3*x6^2*x7*x8 + x2^5*x3*x4^3*x6^2*x7*x9 + -x2^5*x3*x4^3*x6^2*x7 + x2^5*x3*x4^3*x6^2*x8*x9 + -x2^5*x3*x4^3*x6^2*x8 + -x2^5*x3*x4^3*x6^2*x9 + x2^5*x3*x4^3*x6^2 + x2^5*x3*x4^3*x6*x7*x8^2*x9^2 + -2*x2^5*x3*x4^3*x6*x7*x8^2*x9 + x2^5*x3*x4^3*x6*x7*x8^2 + -x2^5*x3*x4^3*x6*x7*x8*x9^2 + 2*x2^5*x3*x4^3*x6*x7*x8*x9 + -x2^5*x3*x4^3*x6*x7*x8 + -x2^5*x3*x4^3*x6*x8^2*x9^2 + 2*x2^5*x3*x4^3*x6*x8^2*x9 + -x2^5*x3*x4^3*x6*x8^2 + x2^5*x3*x4^3*x6*x8*x9^2 + -2*x2^5*x3*x4^3*x6*x8*x9 + x2^5*x3*x4^3*x6*x8 + x2^5*x3*x4^3*x7^2*x8^2*x9 + -x2^5*x3*x4^3*x7^2*x8^2 + -x2^5*x3*x4^3*x7^2*x8*x9 + x2^5*x3*x4^3*x7^2*x8 + -x2^5*x3*x4^3*x7*x8^2*x9^2 + x2^5*x3*x4^3*x7*x8^2 + x2^5*x3*x4^3*x7*x8*x9^2 + -x2^5*x3*x4^3*x7*x8 + x2^5*x3*x4^3*x8^2*x9^2 + -x2^5*x3*x4^3*x8^2*x9 + -x2^5*x3*x4^3*x8*x9^2 + x2^5*x3*x4^3*x8*x9 + x2^5*x3*x4^2*x5*x6^6*x7*x8*x9 + -x2^5*x3*x4^2*x5*x6^6*x7*x8 + -x2^5*x3*x4^2*x5*x6^6*x7*x9 + x2^5*x3*x4^2*x5*x6^6*x7 + -x2^5*x3*x4^2*x5*x6^6*x8*x9 + x2^5*x3*x4^2*x5*x6^6*x8 + x2^5*x3*x4^2*x5*x6^6*x9 + -x2^5*x3*x4^2*x5*x6^6 + x2^5*x3*x4^2*x5*x6^5*x7^2*x8*x9 + -x2^5*x3*x4^2*x5*x6^5*x7^2*x8 + -x2^5*x3*x4^2*x5*x6^5*x7^2*x9 + x2^5*x3*x4^2*x5*x6^5*x7^2 + -2*x2^5*x3*x4^2*x5*x6^5*x7*x8*x9 + 2*x2^5*x3*x4^2*x5*x6^5*x7*x8 + 2*x2^5*x3*x4^2*x5*x6^5*x7*x9 + -2*x2^5*x3*x4^2*x5*x6^5*x7 + x2^5*x3*x4^2*x5*x6^5*x8*x9 + -x2^5*x3*x4^2*x5*x6^5*x8 + -x2^5*x3*x4^2*x5*x6^5*x9 + x2^5*x3*x4^2*x5*x6^5 + x2^5*x3*x4^2*x5*x6^4*x7^2*x8^2*x9 + -x2^5*x3*x4^2*x5*x6^4*x7^2*x8^2 + -3*x2^5*x3*x4^2*x5*x6^4*x7^2*x8*x9 + 3*x2^5*x3*x4^2*x5*x6^4*x7^2*x8 + 2*x2^5*x3*x4^2*x5*x6^4*x7^2*x9 + -2*x2^5*x3*x4^2*x5*x6^4*x7^2 + -x2^5*x3*x4^2*x5*x6^4*x7*x8^2*x9 + x2^5*x3*x4^2*x5*x6^4*x7*x8^2 + 3*x2^5*x3*x4^2*x5*x6^4*x7*x8*x9 + -3*x2^5*x3*x4^2*x5*x6^4*x7*x8 + -2*x2^5*x3*x4^2*x5*x6^4*x7*x9 + 2*x2^5*x3*x4^2*x5*x6^4*x7 + -x2^5*x3*x4^2*x5*x6^3*x7^2*x8^2*x9 + x2^5*x3*x4^2*x5*x6^3*x7^2*x8^2 + 2*x2^5*x3*x4^2*x5*x6^3*x7^2*x8*x9 + -2*x2^5*x3*x4^2*x5*x6^3*x7^2*x8 + -x2^5*x3*x4^2*x5*x6^3*x7^2*x9 + x2^5*x3*x4^2*x5*x6^3*x7^2 + x2^5*x3*x4^2*x5*x6^3*x7*x8^2*x9 + -x2^5*x3*x4^2*x5*x6^3*x7*x8^2 + -2*x2^5*x3*x4^2*x5*x6^3*x7*x8*x9 + 2*x2^5*x3*x4^2*x5*x6^3*x7*x8 + x2^5*x3*x4^2*x5*x6^3*x7*x9 + -x2^5*x3*x4^2*x5*x6^3*x7 + -x2^5*x3*x4^2*x6^6*x7*x8*x9 + x2^5*x3*x4^2*x6^6*x7*x8 + x2^5*x3*x4^2*x6^6*x7*x9 + -x2^5*x3*x4^2*x6^6*x7 + x2^5*x3*x4^2*x6^6*x8*x9 + -x2^5*x3*x4^2*x6^6*x8 + -x2^5*x3*x4^2*x6^6*x9 + x2^5*x3*x4^2*x6^6 + -x2^5*x3*x4^2*x6^5*x7^2*x8*x9 + x2^5*x3*x4^2*x6^5*x7^2*x8 + x2^5*x3*x4^2*x6^5*x7^2*x9 + -x2^5*x3*x4^2*x6^5*x7^2 + 2*x2^5*x3*x4^2*x6^5*x7*x8*x9 + -2*x2^5*x3*x4^2*x6^5*x7*x8 + -2*x2^5*x3*x4^2*x6^5*x7*x9 + 2*x2^5*x3*x4^2*x6^5*x7 + -x2^5*x3*x4^2*x6^5*x8*x9 + x2^5*x3*x4^2*x6^5*x8 + x2^5*x3*x4^2*x6^5*x9 + -x2^5*x3*x4^2*x6^5 + -x2^5*x3*x4^2*x6^4*x7^2*x8^2*x9 + x2^5*x3*x4^2*x6^4*x7^2*x8^2 + 3*x2^5*x3*x4^2*x6^4*x7^2*x8*x9 + -3*x2^5*x3*x4^2*x6^4*x7^2*x8 + -2*x2^5*x3*x4^2*x6^4*x7^2*x9 + 2*x2^5*x3*x4^2*x6^4*x7^2 + x2^5*x3*x4^2*x6^4*x7*x8^2*x9 + -x2^5*x3*x4^2*x6^4*x7*x8^2 + -3*x2^5*x3*x4^2*x6^4*x7*x8*x9 + 3*x2^5*x3*x4^2*x6^4*x7*x8 + 2*x2^5*x3*x4^2*x6^4*x7*x9 + -2*x2^5*x3*x4^2*x6^4*x7 + x2^5*x3*x4^2*x6^3*x7^2*x8^2*x9 + -x2^5*x3*x4^2*x6^3*x7^2*x8^2 + -2*x2^5*x3*x4^2*x6^3*x7^2*x8*x9 + 2*x2^5*x3*x4^2*x6^3*x7^2*x8 + x2^5*x3*x4^2*x6^3*x7^2*x9 + -x2^5*x3*x4^2*x6^3*x7^2 + -x2^5*x3*x4^2*x6^3*x7*x8^2*x9 + x2^5*x3*x4^2*x6^3*x7*x8^2 + 2*x2^5*x3*x4^2*x6^3*x7*x8*x9 + -2*x2^5*x3*x4^2*x6^3*x7*x8 + -x2^5*x3*x4^2*x6^3*x7*x9 + x2^5*x3*x4^2*x6^3*x7 + -x2^5*x3*x4*x5*x6^6*x7*x8*x9 + x2^5*x3*x4*x5*x6^6*x7*x8 + x2^5*x3*x4*x5*x6^6*x7*x9 + -x2^5*x3*x4*x5*x6^6*x7 + x2^5*x3*x4*x5*x6^6*x8*x9 + -x2^5*x3*x4*x5*x6^6*x8 + -x2^5*x3*x4*x5*x6^6*x9 + x2^5*x3*x4*x5*x6^6 + x2^5*x3*x4*x5*x6^5*x7*x8*x9 + -x2^5*x3*x4*x5*x6^5*x7*x8 + -x2^5*x3*x4*x5*x6^5*x7*x9 + x2^5*x3*x4*x5*x6^5*x7 + -x2^5*x3*x4*x5*x6^5*x8*x9 + x2^5*x3*x4*x5*x6^5*x8 + x2^5*x3*x4*x5*x6^5*x9 + -x2^5*x3*x4*x5*x6^5 + x2^5*x3*x4*x6^6*x7*x8*x9 + -x2^5*x3*x4*x6^6*x7*x8 + -x2^5*x3*x4*x6^6*x7*x9 + x2^5*x3*x4*x6^6*x7 + -x2^5*x3*x4*x6^6*x8*x9 + x2^5*x3*x4*x6^6*x8 + x2^5*x3*x4*x6^6*x9 + -x2^5*x3*x4*x6^6 + -x2^5*x3*x4*x6^5*x7*x8*x9 + x2^5*x3*x4*x6^5*x7*x8 + x2^5*x3*x4*x6^5*x7*x9 + -x2^5*x3*x4*x6^5*x7 + x2^5*x3*x4*x6^5*x8*x9 + -x2^5*x3*x4*x6^5*x8 + -x2^5*x3*x4*x6^5*x9 + x2^5*x3*x4*x6^5 + -x2^5*x3*x5*x6^5*x7^2*x8*x9 + x2^5*x3*x5*x6^5*x7^2*x8 + x2^5*x3*x5*x6^5*x7^2*x9 + -x2^5*x3*x5*x6^5*x7^2 + x2^5*x3*x5*x6^5*x7*x8*x9 + -x2^5*x3*x5*x6^5*x7*x8 + -x2^5*x3*x5*x6^5*x7*x9 + x2^5*x3*x5*x6^5*x7 + -x2^5*x3*x5*x6^4*x7^2*x8^2*x9 + x2^5*x3*x5*x6^4*x7^2*x8^2 + 2*x2^5*x3*x5*x6^4*x7^2*x8*x9 + -2*x2^5*x3*x5*x6^4*x7^2*x8 + -x2^5*x3*x5*x6^4*x7^2*x9 + x2^5*x3*x5*x6^4*x7^2 + x2^5*x3*x5*x6^4*x7*x8^2*x9 + -x2^5*x3*x5*x6^4*x7*x8^2 + -2*x2^5*x3*x5*x6^4*x7*x8*x9 + 2*x2^5*x3*x5*x6^4*x7*x8 + x2^5*x3*x5*x6^4*x7*x9 + -x2^5*x3*x5*x6^4*x7 + x2^5*x3*x5*x7^2*x8^2*x9 + -x2^5*x3*x5*x7^2*x8^2 + -x2^5*x3*x5*x7^2*x8*x9 + x2^5*x3*x5*x7^2*x8 + -x2^5*x3*x5*x7*x8^2*x9 + x2^5*x3*x5*x7*x8^2 + x2^5*x3*x5*x7*x8*x9 + -x2^5*x3*x5*x7*x8 + x2^5*x3*x6^5*x7^2*x8*x9 + -x2^5*x3*x6^5*x7^2*x8 + -x2^5*x3*x6^5*x7^2*x9 + x2^5*x3*x6^5*x7^2 + -x2^5*x3*x6^5*x7*x8*x9 + x2^5*x3*x6^5*x7*x8 + x2^5*x3*x6^5*x7*x9 + -x2^5*x3*x6^5*x7 + x2^5*x3*x6^4*x7^2*x8^2*x9 + -x2^5*x3*x6^4*x7^2*x8^2 + -2*x2^5*x3*x6^4*x7^2*x8*x9 + 2*x2^5*x3*x6^4*x7^2*x8 + x2^5*x3*x6^4*x7^2*x9 + -x2^5*x3*x6^4*x7^2 + -x2^5*x3*x6^4*x7*x8^2*x9 + x2^5*x3*x6^4*x7*x8^2 + 2*x2^5*x3*x6^4*x7*x8*x9 + -2*x2^5*x3*x6^4*x7*x8 + -x2^5*x3*x6^4*x7*x9 + x2^5*x3*x6^4*x7 + -x2^5*x3*x7^2*x8^2*x9 + x2^5*x3*x7^2*x8^2 + x2^5*x3*x7^2*x8*x9 + -x2^5*x3*x7^2*x8 + x2^5*x3*x7*x8^2*x9 + -x2^5*x3*x7*x8^2 + -x2^5*x3*x7*x8*x9 + x2^5*x3*x7*x8 + -x2^5*x4^6*x5*x6*x7*x8^2*x9^2 + x2^5*x4^6*x5*x6*x7*x8^2 + x2^5*x4^6*x5*x6*x7*x8*x9^2 + -x2^5*x4^6*x5*x6*x7*x8 + x2^5*x4^6*x5*x6*x8^2*x9^2 + -x2^5*x4^6*x5*x6*x8^2 + -x2^5*x4^6*x5*x6*x8*x9^2 + x2^5*x4^6*x5*x6*x8 + x2^5*x4^6*x5*x7*x8^2*x9^2 + -x2^5*x4^6*x5*x7*x8^2 + -x2^5*x4^6*x5*x7*x8*x9^2 + x2^5*x4^6*x5*x7*x8 + -x2^5*x4^6*x5*x8^2*x9^2 + x2^5*x4^6*x5*x8^2 + x2^5*x4^6*x5*x8*x9^2 + -x2^5*x4^6*x5*x8 + x2^5*x4^6*x6*x7*x8^2*x9^2 + -x2^5*x4^6*x6*x7*x8^2 + -x2^5*x4^6*x6*x7*x8*x9^2 + x2^5*x4^6*x6*x7*x8 + -x2^5*x4^6*x6*x8^2*x9^2 + x2^5*x4^6*x6*x8^2 + x2^5*x4^6*x6*x8*x9^2 + -x2^5*x4^6*x6*x8 + -x2^5*x4^6*x7*x8^2*x9^2 + x2^5*x4^6*x7*x8^2 + x2^5*x4^6*x7*x8*x9^2 + -x2^5*x4^6*x7*x8 + x2^5*x4^6*x8^2*x9^2 + -x2^5*x4^6*x8^2 + -x2^5*x4^6*x8*x9^2 + x2^5*x4^6*x8 + -x2^5*x4^5*x5*x6^2*x7*x8^2*x9 + x2^5*x4^5*x5*x6^2*x7*x8^2 + x2^5*x4^5*x5*x6^2*x7*x9 + -x2^5*x4^5*x5*x6^2*x7 + x2^5*x4^5*x5*x6^2*x8^2*x9 + -x2^5*x4^5*x5*x6^2*x8^2 + -x2^5*x4^5*x5*x6^2*x9 + x2^5*x4^5*x5*x6^2 + 2*x2^5*x4^5*x5*x6*x7*x8^2*x9 + -2*x2^5*x4^5*x5*x6*x7*x8^2 + -x2^5*x4^5*x5*x6*x7*x8*x9 + x2^5*x4^5*x5*x6*x7*x8 + -x2^5*x4^5*x5*x6*x7*x9 + x2^5*x4^5*x5*x6*x7 + -2*x2^5*x4^5*x5*x6*x8^2*x9 + 2*x2^5*x4^5*x5*x6*x8^2 + x2^5*x4^5*x5*x6*x8*x9 + -x2^5*x4^5*x5*x6*x8 + x2^5*x4^5*x5*x6*x9 + -x2^5*x4^5*x5*x6 + -x2^5*x4^5*x5*x7*x8^2*x9 + x2^5*x4^5*x5*x7*x8^2 + x2^5*x4^5*x5*x7*x8*x9 + -x2^5*x4^5*x5*x7*x8 + x2^5*x4^5*x5*x8^2*x9 + -x2^5*x4^5*x5*x8^2 + -x2^5*x4^5*x5*x8*x9 + x2^5*x4^5*x5*x8 + x2^5*x4^5*x6^2*x7*x8^2*x9 + -x2^5*x4^5*x6^2*x7*x8^2 + -x2^5*x4^5*x6^2*x7*x9 + x2^5*x4^5*x6^2*x7 + -x2^5*x4^5*x6^2*x8^2*x9 + x2^5*x4^5*x6^2*x8^2 + x2^5*x4^5*x6^2*x9 + -x2^5*x4^5*x6^2 + -2*x2^5*x4^5*x6*x7*x8^2*x9 + 2*x2^5*x4^5*x6*x7*x8^2 + x2^5*x4^5*x6*x7*x8*x9 + -x2^5*x4^5*x6*x7*x8 + x2^5*x4^5*x6*x7*x9 + -x2^5*x4^5*x6*x7 + 2*x2^5*x4^5*x6*x8^2*x9 + -2*x2^5*x4^5*x6*x8^2 + -x2^5*x4^5*x6*x8*x9 + x2^5*x4^5*x6*x8 + -x2^5*x4^5*x6*x9 + x2^5*x4^5*x6 + x2^5*x4^5*x7*x8^2*x9 + -x2^5*x4^5*x7*x8^2 + -x2^5*x4^5*x7*x8*x9 + x2^5*x4^5*x7*x8 + -x2^5*x4^5*x8^2*x9 + x2^5*x4^5*x8^2 + x2^5*x4^5*x8*x9 + -x2^5*x4^5*x8 + -x2^5*x4^4*x5*x6^5*x7*x8*x9 + x2^5*x4^4*x5*x6^5*x7*x8 + x2^5*x4^4*x5*x6^5*x7*x9 + -x2^5*x4^4*x5*x6^5*x7 + x2^5*x4^4*x5*x6^5*x8*x9 + -x2^5*x4^4*x5*x6^5*x8 + -x2^5*x4^4*x5*x6^5*x9 + x2^5*x4^4*x5*x6^5 + -x2^5*x4^4*x5*x6^3*x7*x8^2*x9 + x2^5*x4^4*x5*x6^3*x7*x8^2 + x2^5*x4^4*x5*x6^3*x7*x8*x9 + -x2^5*x4^4*x5*x6^3*x7*x8 + x2^5*x4^4*x5*x6^3*x8^2*x9 + -x2^5*x4^4*x5*x6^3*x8^2 + -x2^5*x4^4*x5*x6^3*x8*x9 + x2^5*x4^4*x5*x6^3*x8 + x2^5*x4^4*x5*x6^2*x7*x8^2*x9 + -x2^5*x4^4*x5*x6^2*x7*x8^2 + x2^5*x4^4*x5*x6^2*x7*x8*x9 + -x2^5*x4^4*x5*x6^2*x7*x8 + -2*x2^5*x4^4*x5*x6^2*x7*x9 + 2*x2^5*x4^4*x5*x6^2*x7 + -x2^5*x4^4*x5*x6^2*x8^2*x9 + x2^5*x4^4*x5*x6^2*x8^2 + -x2^5*x4^4*x5*x6^2*x8*x9 + x2^5*x4^4*x5*x6^2*x8 + 2*x2^5*x4^4*x5*x6^2*x9 + -2*x2^5*x4^4*x5*x6^2 + -x2^5*x4^4*x5*x6*x7*x8*x9 + x2^5*x4^4*x5*x6*x7*x8 + x2^5*x4^4*x5*x6*x7*x9 + -x2^5*x4^4*x5*x6*x7 + x2^5*x4^4*x5*x6*x8*x9 + -x2^5*x4^4*x5*x6*x8 + -x2^5*x4^4*x5*x6*x9 + x2^5*x4^4*x5*x6 + x2^5*x4^4*x6^5*x7*x8*x9 + -x2^5*x4^4*x6^5*x7*x8 + -x2^5*x4^4*x6^5*x7*x9 + x2^5*x4^4*x6^5*x7 + -x2^5*x4^4*x6^5*x8*x9 + x2^5*x4^4*x6^5*x8 + x2^5*x4^4*x6^5*x9 + -x2^5*x4^4*x6^5 + x2^5*x4^4*x6^3*x7*x8^2*x9 + -x2^5*x4^4*x6^3*x7*x8^2 + -x2^5*x4^4*x6^3*x7*x8*x9 + x2^5*x4^4*x6^3*x7*x8 + -x2^5*x4^4*x6^3*x8^2*x9 + x2^5*x4^4*x6^3*x8^2 + x2^5*x4^4*x6^3*x8*x9 + -x2^5*x4^4*x6^3*x8 + -x2^5*x4^4*x6^2*x7*x8^2*x9 + x2^5*x4^4*x6^2*x7*x8^2 + -x2^5*x4^4*x6^2*x7*x8*x9 + x2^5*x4^4*x6^2*x7*x8 + 2*x2^5*x4^4*x6^2*x7*x9 + -2*x2^5*x4^4*x6^2*x7 + x2^5*x4^4*x6^2*x8^2*x9 + -x2^5*x4^4*x6^2*x8^2 + x2^5*x4^4*x6^2*x8*x9 + -x2^5*x4^4*x6^2*x8 + -2*x2^5*x4^4*x6^2*x9 + 2*x2^5*x4^4*x6^2 + x2^5*x4^4*x6*x7*x8*x9 + -x2^5*x4^4*x6*x7*x8 + -x2^5*x4^4*x6*x7*x9 + x2^5*x4^4*x6*x7 + -x2^5*x4^4*x6*x8*x9 + x2^5*x4^4*x6*x8 + x2^5*x4^4*x6*x9 + -x2^5*x4^4*x6 + x2^5*x4^3*x5*x6^5*x7*x8*x9 + -x2^5*x4^3*x5*x6^5*x7*x8 + -x2^5*x4^3*x5*x6^5*x7*x9 + x2^5*x4^3*x5*x6^5*x7 + -x2^5*x4^3*x5*x6^5*x8*x9 + x2^5*x4^3*x5*x6^5*x8 + x2^5*x4^3*x5*x6^5*x9 + -x2^5*x4^3*x5*x6^5 + -x2^5*x4^3*x5*x6^4*x7^2*x8*x9 + x2^5*x4^3*x5*x6^4*x7^2*x8 + x2^5*x4^3*x5*x6^4*x7^2*x9 + -x2^5*x4^3*x5*x6^4*x7^2 + x2^5*x4^3*x5*x6^4*x7*x8*x9 + -x2^5*x4^3*x5*x6^4*x7*x8 + -x2^5*x4^3*x5*x6^4*x7*x9 + x2^5*x4^3*x5*x6^4*x7 + -x2^5*x4^3*x5*x6^3*x7^2*x8^2*x9 + x2^5*x4^3*x5*x6^3*x7^2*x8^2 + 2*x2^5*x4^3*x5*x6^3*x7^2*x8*x9 + -2*x2^5*x4^3*x5*x6^3*x7^2*x8 + -x2^5*x4^3*x5*x6^3*x7^2*x9 + x2^5*x4^3*x5*x6^3*x7^2 + 2*x2^5*x4^3*x5*x6^3*x7*x8^2*x9 + -2*x2^5*x4^3*x5*x6^3*x7*x8^2 + -3*x2^5*x4^3*x5*x6^3*x7*x8*x9 + 3*x2^5*x4^3*x5*x6^3*x7*x8 + x2^5*x4^3*x5*x6^3*x7*x9 + -x2^5*x4^3*x5*x6^3*x7 + -x2^5*x4^3*x5*x6^3*x8^2*x9 + x2^5*x4^3*x5*x6^3*x8^2 + x2^5*x4^3*x5*x6^3*x8*x9 + -x2^5*x4^3*x5*x6^3*x8 + -x2^5*x4^3*x5*x6^2*x7*x8*x9 + x2^5*x4^3*x5*x6^2*x7*x8 + x2^5*x4^3*x5*x6^2*x7*x9 + -x2^5*x4^3*x5*x6^2*x7 + x2^5*x4^3*x5*x6^2*x8*x9 + -x2^5*x4^3*x5*x6^2*x8 + -x2^5*x4^3*x5*x6^2*x9 + x2^5*x4^3*x5*x6^2 + x2^5*x4^3*x5*x6*x7*x8^2*x9^2 + -2*x2^5*x4^3*x5*x6*x7*x8^2*x9 + x2^5*x4^3*x5*x6*x7*x8^2 + -x2^5*x4^3*x5*x6*x7*x8*x9^2 + 2*x2^5*x4^3*x5*x6*x7*x8*x9 + -x2^5*x4^3*x5*x6*x7*x8 + -x2^5*x4^3*x5*x6*x8^2*x9^2 + 2*x2^5*x4^3*x5*x6*x8^2*x9 + -x2^5*x4^3*x5*x6*x8^2 + x2^5*x4^3*x5*x6*x8*x9^2 + -2*x2^5*x4^3*x5*x6*x8*x9 + x2^5*x4^3*x5*x6*x8 + x2^5*x4^3*x5*x7^2*x8^2*x9 + -x2^5*x4^3*x5*x7^2*x8^2 + -x2^5*x4^3*x5*x7^2*x8*x9 + x2^5*x4^3*x5*x7^2*x8 + -x2^5*x4^3*x5*x7*x8^2*x9^2 + x2^5*x4^3*x5*x7*x8^2 + x2^5*x4^3*x5*x7*x8*x9^2 + -x2^5*x4^3*x5*x7*x8 + x2^5*x4^3*x5*x8^2*x9^2 + -x2^5*x4^3*x5*x8^2*x9 + -x2^5*x4^3*x5*x8*x9^2 + x2^5*x4^3*x5*x8*x9 + -x2^5*x4^3*x6^5*x7*x8*x9 + x2^5*x4^3*x6^5*x7*x8 + x2^5*x4^3*x6^5*x7*x9 + -x2^5*x4^3*x6^5*x7 + x2^5*x4^3*x6^5*x8*x9 + -x2^5*x4^3*x6^5*x8 + -x2^5*x4^3*x6^5*x9 + x2^5*x4^3*x6^5 + x2^5*x4^3*x6^4*x7^2*x8*x9 + -x2^5*x4^3*x6^4*x7^2*x8 + -x2^5*x4^3*x6^4*x7^2*x9 + x2^5*x4^3*x6^4*x7^2 + -x2^5*x4^3*x6^4*x7*x8*x9 + x2^5*x4^3*x6^4*x7*x8 + x2^5*x4^3*x6^4*x7*x9 + -x2^5*x4^3*x6^4*x7 + x2^5*x4^3*x6^3*x7^2*x8^2*x9 + -x2^5*x4^3*x6^3*x7^2*x8^2 + -2*x2^5*x4^3*x6^3*x7^2*x8*x9 + 2*x2^5*x4^3*x6^3*x7^2*x8 + x2^5*x4^3*x6^3*x7^2*x9 + -x2^5*x4^3*x6^3*x7^2 + -2*x2^5*x4^3*x6^3*x7*x8^2*x9 + 2*x2^5*x4^3*x6^3*x7*x8^2 + 3*x2^5*x4^3*x6^3*x7*x8*x9 + -3*x2^5*x4^3*x6^3*x7*x8 + -x2^5*x4^3*x6^3*x7*x9 + x2^5*x4^3*x6^3*x7 + x2^5*x4^3*x6^3*x8^2*x9 + -x2^5*x4^3*x6^3*x8^2 + -x2^5*x4^3*x6^3*x8*x9 + x2^5*x4^3*x6^3*x8 + x2^5*x4^3*x6^2*x7*x8*x9 + -x2^5*x4^3*x6^2*x7*x8 + -x2^5*x4^3*x6^2*x7*x9 + x2^5*x4^3*x6^2*x7 + -x2^5*x4^3*x6^2*x8*x9 + x2^5*x4^3*x6^2*x8 + x2^5*x4^3*x6^2*x9 + -x2^5*x4^3*x6^2 + -x2^5*x4^3*x6*x7*x8^2*x9^2 + 2*x2^5*x4^3*x6*x7*x8^2*x9 + -x2^5*x4^3*x6*x7*x8^2 + x2^5*x4^3*x6*x7*x8*x9^2 + -2*x2^5*x4^3*x6*x7*x8*x9 + x2^5*x4^3*x6*x7*x8 + x2^5*x4^3*x6*x8^2*x9^2 + -2*x2^5*x4^3*x6*x8^2*x9 + x2^5*x4^3*x6*x8^2 + -x2^5*x4^3*x6*x8*x9^2 + 2*x2^5*x4^3*x6*x8*x9 + -x2^5*x4^3*x6*x8 + -x2^5*x4^3*x7^2*x8^2*x9 + x2^5*x4^3*x7^2*x8^2 + x2^5*x4^3*x7^2*x8*x9 + -x2^5*x4^3*x7^2*x8 + x2^5*x4^3*x7*x8^2*x9^2 + -x2^5*x4^3*x7*x8^2 + -x2^5*x4^3*x7*x8*x9^2 + x2^5*x4^3*x7*x8 + -x2^5*x4^3*x8^2*x9^2 + x2^5*x4^3*x8^2*x9 + x2^5*x4^3*x8*x9^2 + -x2^5*x4^3*x8*x9 + -x2^5*x4^2*x5*x6^6*x7*x8*x9 + x2^5*x4^2*x5*x6^6*x7*x8 + x2^5*x4^2*x5*x6^6*x7*x9 + -x2^5*x4^2*x5*x6^6*x7 + x2^5*x4^2*x5*x6^6*x8*x9 + -x2^5*x4^2*x5*x6^6*x8 + -x2^5*x4^2*x5*x6^6*x9 + x2^5*x4^2*x5*x6^6 + -x2^5*x4^2*x5*x6^5*x7^2*x8*x9 + x2^5*x4^2*x5*x6^5*x7^2*x8 + x2^5*x4^2*x5*x6^5*x7^2*x9 + -x2^5*x4^2*x5*x6^5*x7^2 + 2*x2^5*x4^2*x5*x6^5*x7*x8*x9 + -2*x2^5*x4^2*x5*x6^5*x7*x8 + -2*x2^5*x4^2*x5*x6^5*x7*x9 + 2*x2^5*x4^2*x5*x6^5*x7 + -x2^5*x4^2*x5*x6^5*x8*x9 + x2^5*x4^2*x5*x6^5*x8 + x2^5*x4^2*x5*x6^5*x9 + -x2^5*x4^2*x5*x6^5 + -x2^5*x4^2*x5*x6^4*x7^2*x8^2*x9 + x2^5*x4^2*x5*x6^4*x7^2*x8^2 + 3*x2^5*x4^2*x5*x6^4*x7^2*x8*x9 + -3*x2^5*x4^2*x5*x6^4*x7^2*x8 + -2*x2^5*x4^2*x5*x6^4*x7^2*x9 + 2*x2^5*x4^2*x5*x6^4*x7^2 + x2^5*x4^2*x5*x6^4*x7*x8^2*x9 + -x2^5*x4^2*x5*x6^4*x7*x8^2 + -3*x2^5*x4^2*x5*x6^4*x7*x8*x9 + 3*x2^5*x4^2*x5*x6^4*x7*x8 + 2*x2^5*x4^2*x5*x6^4*x7*x9 + -2*x2^5*x4^2*x5*x6^4*x7 + x2^5*x4^2*x5*x6^3*x7^2*x8^2*x9 + -x2^5*x4^2*x5*x6^3*x7^2*x8^2 + -2*x2^5*x4^2*x5*x6^3*x7^2*x8*x9 + 2*x2^5*x4^2*x5*x6^3*x7^2*x8 + x2^5*x4^2*x5*x6^3*x7^2*x9 + -x2^5*x4^2*x5*x6^3*x7^2 + -x2^5*x4^2*x5*x6^3*x7*x8^2*x9 + x2^5*x4^2*x5*x6^3*x7*x8^2 + 2*x2^5*x4^2*x5*x6^3*x7*x8*x9 + -2*x2^5*x4^2*x5*x6^3*x7*x8 + -x2^5*x4^2*x5*x6^3*x7*x9 + x2^5*x4^2*x5*x6^3*x7 + x2^5*x4^2*x6^6*x7*x8*x9 + -x2^5*x4^2*x6^6*x7*x8 + -x2^5*x4^2*x6^6*x7*x9 + x2^5*x4^2*x6^6*x7 + -x2^5*x4^2*x6^6*x8*x9 + x2^5*x4^2*x6^6*x8 + x2^5*x4^2*x6^6*x9 + -x2^5*x4^2*x6^6 + x2^5*x4^2*x6^5*x7^2*x8*x9 + -x2^5*x4^2*x6^5*x7^2*x8 + -x2^5*x4^2*x6^5*x7^2*x9 + x2^5*x4^2*x6^5*x7^2 + -2*x2^5*x4^2*x6^5*x7*x8*x9 + 2*x2^5*x4^2*x6^5*x7*x8 + 2*x2^5*x4^2*x6^5*x7*x9 + -2*x2^5*x4^2*x6^5*x7 + x2^5*x4^2*x6^5*x8*x9 + -x2^5*x4^2*x6^5*x8 + -x2^5*x4^2*x6^5*x9 + x2^5*x4^2*x6^5 + x2^5*x4^2*x6^4*x7^2*x8^2*x9 + -x2^5*x4^2*x6^4*x7^2*x8^2 + -3*x2^5*x4^2*x6^4*x7^2*x8*x9 + 3*x2^5*x4^2*x6^4*x7^2*x8 + 2*x2^5*x4^2*x6^4*x7^2*x9 + -2*x2^5*x4^2*x6^4*x7^2 + -x2^5*x4^2*x6^4*x7*x8^2*x9 + x2^5*x4^2*x6^4*x7*x8^2 + 3*x2^5*x4^2*x6^4*x7*x8*x9 + -3*x2^5*x4^2*x6^4*x7*x8 + -2*x2^5*x4^2*x6^4*x7*x9 + 2*x2^5*x4^2*x6^4*x7 + -x2^5*x4^2*x6^3*x7^2*x8^2*x9 + x2^5*x4^2*x6^3*x7^2*x8^2 + 2*x2^5*x4^2*x6^3*x7^2*x8*x9 + -2*x2^5*x4^2*x6^3*x7^2*x8 + -x2^5*x4^2*x6^3*x7^2*x9 + x2^5*x4^2*x6^3*x7^2 + x2^5*x4^2*x6^3*x7*x8^2*x9 + -x2^5*x4^2*x6^3*x7*x8^2 + -2*x2^5*x4^2*x6^3*x7*x8*x9 + 2*x2^5*x4^2*x6^3*x7*x8 + x2^5*x4^2*x6^3*x7*x9 + -x2^5*x4^2*x6^3*x7 + x2^5*x4*x5*x6^6*x7*x8*x9 + -x2^5*x4*x5*x6^6*x7*x8 + -x2^5*x4*x5*x6^6*x7*x9 + x2^5*x4*x5*x6^6*x7 + -x2^5*x4*x5*x6^6*x8*x9 + x2^5*x4*x5*x6^6*x8 + x2^5*x4*x5*x6^6*x9 + -x2^5*x4*x5*x6^6 + -x2^5*x4*x5*x6^5*x7*x8*x9 + x2^5*x4*x5*x6^5*x7*x8 + x2^5*x4*x5*x6^5*x7*x9 + -x2^5*x4*x5*x6^5*x7 + x2^5*x4*x5*x6^5*x8*x9 + -x2^5*x4*x5*x6^5*x8 + -x2^5*x4*x5*x6^5*x9 + x2^5*x4*x5*x6^5 + -x2^5*x4*x6^6*x7*x8*x9 + x2^5*x4*x6^6*x7*x8 + x2^5*x4*x6^6*x7*x9 + -x2^5*x4*x6^6*x7 + x2^5*x4*x6^6*x8*x9 + -x2^5*x4*x6^6*x8 + -x2^5*x4*x6^6*x9 + x2^5*x4*x6^6 + x2^5*x4*x6^5*x7*x8*x9 + -x2^5*x4*x6^5*x7*x8 + -x2^5*x4*x6^5*x7*x9 + x2^5*x4*x6^5*x7 + -x2^5*x4*x6^5*x8*x9 + x2^5*x4*x6^5*x8 + x2^5*x4*x6^5*x9 + -x2^5*x4*x6^5 + x2^5*x5*x6^5*x7^2*x8*x9 + -x2^5*x5*x6^5*x7^2*x8 + -x2^5*x5*x6^5*x7^2*x9 + x2^5*x5*x6^5*x7^2 + -x2^5*x5*x6^5*x7*x8*x9 + x2^5*x5*x6^5*x7*x8 + x2^5*x5*x6^5*x7*x9 + -x2^5*x5*x6^5*x7 + x2^5*x5*x6^4*x7^2*x8^2*x9 + -x2^5*x5*x6^4*x7^2*x8^2 + -2*x2^5*x5*x6^4*x7^2*x8*x9 + 2*x2^5*x5*x6^4*x7^2*x8 + x2^5*x5*x6^4*x7^2*x9 + -x2^5*x5*x6^4*x7^2 + -x2^5*x5*x6^4*x7*x8^2*x9 + x2^5*x5*x6^4*x7*x8^2 + 2*x2^5*x5*x6^4*x7*x8*x9 + -2*x2^5*x5*x6^4*x7*x8 + -x2^5*x5*x6^4*x7*x9 + x2^5*x5*x6^4*x7 + -x2^5*x5*x7^2*x8^2*x9 + x2^5*x5*x7^2*x8^2 + x2^5*x5*x7^2*x8*x9 + -x2^5*x5*x7^2*x8 + x2^5*x5*x7*x8^2*x9 + -x2^5*x5*x7*x8^2 + -x2^5*x5*x7*x8*x9 + x2^5*x5*x7*x8 + -x2^5*x6^5*x7^2*x8*x9 + x2^5*x6^5*x7^2*x8 + x2^5*x6^5*x7^2*x9 + -x2^5*x6^5*x7^2 + x2^5*x6^5*x7*x8*x9 + -x2^5*x6^5*x7*x8 + -x2^5*x6^5*x7*x9 + x2^5*x6^5*x7 + -x2^5*x6^4*x7^2*x8^2*x9 + x2^5*x6^4*x7^2*x8^2 + 2*x2^5*x6^4*x7^2*x8*x9 + -2*x2^5*x6^4*x7^2*x8 + -x2^5*x6^4*x7^2*x9 + x2^5*x6^4*x7^2 + x2^5*x6^4*x7*x8^2*x9 + -x2^5*x6^4*x7*x8^2 + -2*x2^5*x6^4*x7*x8*x9 + 2*x2^5*x6^4*x7*x8 + x2^5*x6^4*x7*x9 + -x2^5*x6^4*x7 + x2^5*x7^2*x8^2*x9 + -x2^5*x7^2*x8^2 + -x2^5*x7^2*x8*x9 + x2^5*x7^2*x8 + -x2^5*x7*x8^2*x9 + x2^5*x7*x8^2 + x2^5*x7*x8*x9 + -x2^5*x7*x8 + x2^4*x3^9*x4^2*x5*x6*x7*x8*x9 + -x2^4*x3^9*x4^2*x5*x6*x7*x8 + -x2^4*x3^9*x4^2*x5*x6*x7*x9 + x2^4*x3^9*x4^2*x5*x6*x7 + -x2^4*x3^9*x4^2*x5*x6*x8*x9 + x2^4*x3^9*x4^2*x5*x6*x8 + x2^4*x3^9*x4^2*x5*x6*x9 + -x2^4*x3^9*x4^2*x5*x6 + -x2^4*x3^9*x4^2*x5*x7*x8*x9 + x2^4*x3^9*x4^2*x5*x7*x8 + x2^4*x3^9*x4^2*x5*x7*x9 + -x2^4*x3^9*x4^2*x5*x7 + x2^4*x3^9*x4^2*x5*x8*x9 + -x2^4*x3^9*x4^2*x5*x8 + -x2^4*x3^9*x4^2*x5*x9 + x2^4*x3^9*x4^2*x5 + -x2^4*x3^9*x4^2*x6*x7*x8*x9 + x2^4*x3^9*x4^2*x6*x7*x8 + x2^4*x3^9*x4^2*x6*x7*x9 + -x2^4*x3^9*x4^2*x6*x7 + x2^4*x3^9*x4^2*x6*x8*x9 + -x2^4*x3^9*x4^2*x6*x8 + -x2^4*x3^9*x4^2*x6*x9 + x2^4*x3^9*x4^2*x6 + x2^4*x3^9*x4^2*x7*x8*x9 + -x2^4*x3^9*x4^2*x7*x8 + -x2^4*x3^9*x4^2*x7*x9 + x2^4*x3^9*x4^2*x7 + -x2^4*x3^9*x4^2*x8*x9 + x2^4*x3^9*x4^2*x8 + x2^4*x3^9*x4^2*x9 + -x2^4*x3^9*x4^2 + x2^4*x3^9*x4*x5*x6^2*x7*x8*x9 + -x2^4*x3^9*x4*x5*x6^2*x7*x8 + -x2^4*x3^9*x4*x5*x6^2*x7*x9 + x2^4*x3^9*x4*x5*x6^2*x7 + -x2^4*x3^9*x4*x5*x6^2*x8*x9 + x2^4*x3^9*x4*x5*x6^2*x8 + x2^4*x3^9*x4*x5*x6^2*x9 + -x2^4*x3^9*x4*x5*x6^2 + -x2^4*x3^9*x4*x5*x6*x7*x8*x9 + x2^4*x3^9*x4*x5*x6*x7*x8 + x2^4*x3^9*x4*x5*x6*x7*x9 + -x2^4*x3^9*x4*x5*x6*x7 + x2^4*x3^9*x4*x5*x6*x8*x9 + -x2^4*x3^9*x4*x5*x6*x8 + -x2^4*x3^9*x4*x5*x6*x9 + x2^4*x3^9*x4*x5*x6 + -x2^4*x3^9*x4*x6^2*x7*x8*x9 + x2^4*x3^9*x4*x6^2*x7*x8 + x2^4*x3^9*x4*x6^2*x7*x9 + -x2^4*x3^9*x4*x6^2*x7 + x2^4*x3^9*x4*x6^2*x8*x9 + -x2^4*x3^9*x4*x6^2*x8 + -x2^4*x3^9*x4*x6^2*x9 + x2^4*x3^9*x4*x6^2 + x2^4*x3^9*x4*x6*x7*x8*x9 + -x2^4*x3^9*x4*x6*x7*x8 + -x2^4*x3^9*x4*x6*x7*x9 + x2^4*x3^9*x4*x6*x7 + -x2^4*x3^9*x4*x6*x8*x9 + x2^4*x3^9*x4*x6*x8 + x2^4*x3^9*x4*x6*x9 + -x2^4*x3^9*x4*x6 + -x2^4*x3^9*x5*x6^2*x7*x8*x9 + x2^4*x3^9*x5*x6^2*x7*x8 + x2^4*x3^9*x5*x6^2*x7*x9 + -x2^4*x3^9*x5*x6^2*x7 + x2^4*x3^9*x5*x6^2*x8*x9 + -x2^4*x3^9*x5*x6^2*x8 + -x2^4*x3^9*x5*x6^2*x9 + x2^4*x3^9*x5*x6^2 + x2^4*x3^9*x5*x7*x8*x9 + -x2^4*x3^9*x5*x7*x8 + -x2^4*x3^9*x5*x7*x9 + x2^4*x3^9*x5*x7 + -x2^4*x3^9*x5*x8*x9 + x2^4*x3^9*x5*x8 + x2^4*x3^9*x5*x9 + -x2^4*x3^9*x5 + x2^4*x3^9*x6^2*x7*x8*x9 + -x2^4*x3^9*x6^2*x7*x8 + -x2^4*x3^9*x6^2*x7*x9 + x2^4*x3^9*x6^2*x7 + -x2^4*x3^9*x6^2*x8*x9 + x2^4*x3^9*x6^2*x8 + x2^4*x3^9*x6^2*x9 + -x2^4*x3^9*x6^2 + -x2^4*x3^9*x7*x8*x9 + x2^4*x3^9*x7*x8 + x2^4*x3^9*x7*x9 + -x2^4*x3^9*x7 + x2^4*x3^9*x8*x9 + -x2^4*x3^9*x8 + -x2^4*x3^9*x9 + x2^4*x3^9 + x2^4*x3^8*x4^2*x5^2*x6*x7*x8*x9 + -x2^4*x3^8*x4^2*x5^2*x6*x7*x8 + -x2^4*x3^8*x4^2*x5^2*x6*x7*x9 + x2^4*x3^8*x4^2*x5^2*x6*x7 + -x2^4*x3^8*x4^2*x5^2*x6*x8*x9 + x2^4*x3^8*x4^2*x5^2*x6*x8 + x2^4*x3^8*x4^2*x5^2*x6*x9 + -x2^4*x3^8*x4^2*x5^2*x6 + -x2^4*x3^8*x4^2*x5^2*x7*x8*x9 + x2^4*x3^8*x4^2*x5^2*x7*x8 + x2^4*x3^8*x4^2*x5^2*x7*x9 + -x2^4*x3^8*x4^2*x5^2*x7 + x2^4*x3^8*x4^2*x5^2*x8*x9 + -x2^4*x3^8*x4^2*x5^2*x8 + -x2^4*x3^8*x4^2*x5^2*x9 + x2^4*x3^8*x4^2*x5^2 + x2^4*x3^8*x4^2*x5*x6*x7*x8*x9^2 + -2*x2^4*x3^8*x4^2*x5*x6*x7*x8*x9 + x2^4*x3^8*x4^2*x5*x6*x7*x8 + -x2^4*x3^8*x4^2*x5*x6*x7*x9^2 + 2*x2^4*x3^8*x4^2*x5*x6*x7*x9 + -x2^4*x3^8*x4^2*x5*x6*x7 + -x2^4*x3^8*x4^2*x5*x6*x8*x9^2 + 2*x2^4*x3^8*x4^2*x5*x6*x8*x9 + -x2^4*x3^8*x4^2*x5*x6*x8 + x2^4*x3^8*x4^2*x5*x6*x9^2 + -2*x2^4*x3^8*x4^2*x5*x6*x9 + x2^4*x3^8*x4^2*x5*x6 + -x2^4*x3^8*x4^2*x5*x7*x8*x9^2 + 2*x2^4*x3^8*x4^2*x5*x7*x8*x9 + -x2^4*x3^8*x4^2*x5*x7*x8 + x2^4*x3^8*x4^2*x5*x7*x9^2 + -2*x2^4*x3^8*x4^2*x5*x7*x9 + x2^4*x3^8*x4^2*x5*x7 + x2^4*x3^8*x4^2*x5*x8*x9^2 + -2*x2^4*x3^8*x4^2*x5*x8*x9 + x2^4*x3^8*x4^2*x5*x8 + -x2^4*x3^8*x4^2*x5*x9^2 + 2*x2^4*x3^8*x4^2*x5*x9 + -x2^4*x3^8*x4^2*x5 + -x2^4*x3^8*x4^2*x6*x7*x8*x9^2 + x2^4*x3^8*x4^2*x6*x7*x8*x9 + x2^4*x3^8*x4^2*x6*x7*x9^2 + -x2^4*x3^8*x4^2*x6*x7*x9 + x2^4*x3^8*x4^2*x6*x8*x9^2 + -x2^4*x3^8*x4^2*x6*x8*x9 + -x2^4*x3^8*x4^2*x6*x9^2 + x2^4*x3^8*x4^2*x6*x9 + x2^4*x3^8*x4^2*x7*x8*x9^2 + -x2^4*x3^8*x4^2*x7*x8*x9 + -x2^4*x3^8*x4^2*x7*x9^2 + x2^4*x3^8*x4^2*x7*x9 + -x2^4*x3^8*x4^2*x8*x9^2 + x2^4*x3^8*x4^2*x8*x9 + x2^4*x3^8*x4^2*x9^2 + -x2^4*x3^8*x4^2*x9 + x2^4*x3^8*x4*x5^2*x6^2*x7*x8*x9 + -x2^4*x3^8*x4*x5^2*x6^2*x7*x8 + -x2^4*x3^8*x4*x5^2*x6^2*x7*x9 + x2^4*x3^8*x4*x5^2*x6^2*x7 + -x2^4*x3^8*x4*x5^2*x6^2*x8*x9 + x2^4*x3^8*x4*x5^2*x6^2*x8 + x2^4*x3^8*x4*x5^2*x6^2*x9 + -x2^4*x3^8*x4*x5^2*x6^2 + -x2^4*x3^8*x4*x5^2*x6*x7*x8*x9 + x2^4*x3^8*x4*x5^2*x6*x7*x8 + x2^4*x3^8*x4*x5^2*x6*x7*x9 + -x2^4*x3^8*x4*x5^2*x6*x7 + x2^4*x3^8*x4*x5^2*x6*x8*x9 + -x2^4*x3^8*x4*x5^2*x6*x8 + -x2^4*x3^8*x4*x5^2*x6*x9 + x2^4*x3^8*x4*x5^2*x6 + -x2^4*x3^8*x4*x5*x6^2*x7*x8*x9 + x2^4*x3^8*x4*x5*x6^2*x7*x8 + x2^4*x3^8*x4*x5*x6^2*x7*x9 + -x2^4*x3^8*x4*x5*x6^2*x7 + x2^4*x3^8*x4*x5*x6^2*x8*x9 + -x2^4*x3^8*x4*x5*x6^2*x8 + -x2^4*x3^8*x4*x5*x6^2*x9 + x2^4*x3^8*x4*x5*x6^2 + x2^4*x3^8*x4*x5*x6*x7*x8*x9 + -x2^4*x3^8*x4*x5*x6*x7*x8 + -x2^4*x3^8*x4*x5*x6*x7*x9 + x2^4*x3^8*x4*x5*x6*x7 + -x2^4*x3^8*x4*x5*x6*x8*x9 + x2^4*x3^8*x4*x5*x6*x8 + x2^4*x3^8*x4*x5*x6*x9 + -x2^4*x3^8*x4*x5*x6 + -x2^4*x3^8*x5^2*x6^2*x7*x8*x9 + x2^4*x3^8*x5^2*x6^2*x7*x8 + x2^4*x3^8*x5^2*x6^2*x7*x9 + -x2^4*x3^8*x5^2*x6^2*x7 + x2^4*x3^8*x5^2*x6^2*x8*x9 + -x2^4*x3^8*x5^2*x6^2*x8 + -x2^4*x3^8*x5^2*x6^2*x9 + x2^4*x3^8*x5^2*x6^2 + x2^4*x3^8*x5^2*x7*x8*x9 + -x2^4*x3^8*x5^2*x7*x8 + -x2^4*x3^8*x5^2*x7*x9 + x2^4*x3^8*x5^2*x7 + -x2^4*x3^8*x5^2*x8*x9 + x2^4*x3^8*x5^2*x8 + x2^4*x3^8*x5^2*x9 + -x2^4*x3^8*x5^2 + x2^4*x3^8*x5*x6^2*x7*x8*x9 + -x2^4*x3^8*x5*x6^2*x7*x8 + -x2^4*x3^8*x5*x6^2*x7*x9 + x2^4*x3^8*x5*x6^2*x7 + -x2^4*x3^8*x5*x6^2*x8*x9 + x2^4*x3^8*x5*x6^2*x8 + x2^4*x3^8*x5*x6^2*x9 + -x2^4*x3^8*x5*x6^2 + -x2^4*x3^8*x5*x6*x7*x8*x9^2 + x2^4*x3^8*x5*x6*x7*x8*x9 + x2^4*x3^8*x5*x6*x7*x9^2 + -x2^4*x3^8*x5*x6*x7*x9 + x2^4*x3^8*x5*x6*x8*x9^2 + -x2^4*x3^8*x5*x6*x8*x9 + -x2^4*x3^8*x5*x6*x9^2 + x2^4*x3^8*x5*x6*x9 + x2^4*x3^8*x5*x7*x8*x9^2 + -2*x2^4*x3^8*x5*x7*x8*x9 + x2^4*x3^8*x5*x7*x8 + -x2^4*x3^8*x5*x7*x9^2 + 2*x2^4*x3^8*x5*x7*x9 + -x2^4*x3^8*x5*x7 + -x2^4*x3^8*x5*x8*x9^2 + 2*x2^4*x3^8*x5*x8*x9 + -x2^4*x3^8*x5*x8 + x2^4*x3^8*x5*x9^2 + -2*x2^4*x3^8*x5*x9 + x2^4*x3^8*x5 + x2^4*x3^8*x6*x7*x8*x9^2 + -x2^4*x3^8*x6*x7*x8*x9 + -x2^4*x3^8*x6*x7*x9^2 + x2^4*x3^8*x6*x7*x9 + -x2^4*x3^8*x6*x8*x9^2 + x2^4*x3^8*x6*x8*x9 + x2^4*x3^8*x6*x9^2 + -x2^4*x3^8*x6*x9 + -x2^4*x3^8*x7*x8*x9^2 + x2^4*x3^8*x7*x8*x9 + x2^4*x3^8*x7*x9^2 + -x2^4*x3^8*x7*x9 + x2^4*x3^8*x8*x9^2 + -x2^4*x3^8*x8*x9 + -x2^4*x3^8*x9^2 + x2^4*x3^8*x9 + x2^4*x3^7*x4^2*x5^3*x6*x7*x8*x9 + -x2^4*x3^7*x4^2*x5^3*x6*x7*x8 + -x2^4*x3^7*x4^2*x5^3*x6*x7*x9 + x2^4*x3^7*x4^2*x5^3*x6*x7 + -x2^4*x3^7*x4^2*x5^3*x6*x8*x9 + x2^4*x3^7*x4^2*x5^3*x6*x8 + x2^4*x3^7*x4^2*x5^3*x6*x9 + -x2^4*x3^7*x4^2*x5^3*x6 + -x2^4*x3^7*x4^2*x5^3*x7*x8*x9 + x2^4*x3^7*x4^2*x5^3*x7*x8 + x2^4*x3^7*x4^2*x5^3*x7*x9 + -x2^4*x3^7*x4^2*x5^3*x7 + x2^4*x3^7*x4^2*x5^3*x8*x9 + -x2^4*x3^7*x4^2*x5^3*x8 + -x2^4*x3^7*x4^2*x5^3*x9 + x2^4*x3^7*x4^2*x5^3 + -x2^4*x3^7*x4^2*x5^2*x6*x7*x8*x9 + x2^4*x3^7*x4^2*x5^2*x6*x7*x8 + x2^4*x3^7*x4^2*x5^2*x6*x7*x9 + -x2^4*x3^7*x4^2*x5^2*x6*x7 + x2^4*x3^7*x4^2*x5^2*x6*x8*x9 + -x2^4*x3^7*x4^2*x5^2*x6*x8 + -x2^4*x3^7*x4^2*x5^2*x6*x9 + x2^4*x3^7*x4^2*x5^2*x6 + x2^4*x3^7*x4^2*x5^2*x7*x8*x9 + -x2^4*x3^7*x4^2*x5^2*x7*x8 + -x2^4*x3^7*x4^2*x5^2*x7*x9 + x2^4*x3^7*x4^2*x5^2*x7 + -x2^4*x3^7*x4^2*x5^2*x8*x9 + x2^4*x3^7*x4^2*x5^2*x8 + x2^4*x3^7*x4^2*x5^2*x9 + -x2^4*x3^7*x4^2*x5^2 + x2^4*x3^7*x4*x5^2*x6*x7*x8*x9^2 + -x2^4*x3^7*x4*x5^2*x6*x7*x8*x9 + -x2^4*x3^7*x4*x5^2*x6*x7*x9^2 + x2^4*x3^7*x4*x5^2*x6*x7*x9 + -x2^4*x3^7*x4*x5^2*x6*x8*x9^2 + x2^4*x3^7*x4*x5^2*x6*x8*x9 + x2^4*x3^7*x4*x5^2*x6*x9^2 + -x2^4*x3^7*x4*x5^2*x6*x9 + -x2^4*x3^7*x4*x5^2*x7*x8*x9^2 + x2^4*x3^7*x4*x5^2*x7*x8*x9 + x2^4*x3^7*x4*x5^2*x7*x9^2 + -x2^4*x3^7*x4*x5^2*x7*x9 + x2^4*x3^7*x4*x5^2*x8*x9^2 + -x2^4*x3^7*x4*x5^2*x8*x9 + -x2^4*x3^7*x4*x5^2*x9^2 + x2^4*x3^7*x4*x5^2*x9 + -x2^4*x3^7*x4*x5*x6*x7*x8*x9^2 + x2^4*x3^7*x4*x5*x6*x7*x8*x9 + x2^4*x3^7*x4*x5*x6*x7*x9^2 + -x2^4*x3^7*x4*x5*x6*x7*x9 + x2^4*x3^7*x4*x5*x6*x8*x9^2 + -x2^4*x3^7*x4*x5*x6*x8*x9 + -x2^4*x3^7*x4*x5*x6*x9^2 + x2^4*x3^7*x4*x5*x6*x9 + x2^4*x3^7*x4*x5*x7*x8*x9^2 + -x2^4*x3^7*x4*x5*x7*x8*x9 + -x2^4*x3^7*x4*x5*x7*x9^2 + x2^4*x3^7*x4*x5*x7*x9 + -x2^4*x3^7*x4*x5*x8*x9^2 + x2^4*x3^7*x4*x5*x8*x9 + x2^4*x3^7*x4*x5*x9^2 + -x2^4*x3^7*x4*x5*x9 + -x2^4*x3^7*x5^3*x6*x7*x8*x9 + x2^4*x3^7*x5^3*x6*x7*x8 + x2^4*x3^7*x5^3*x6*x7*x9 + -x2^4*x3^7*x5^3*x6*x7 + x2^4*x3^7*x5^3*x6*x8*x9 + -x2^4*x3^7*x5^3*x6*x8 + -x2^4*x3^7*x5^3*x6*x9 + x2^4*x3^7*x5^3*x6 + x2^4*x3^7*x5^3*x7*x8*x9 + -x2^4*x3^7*x5^3*x7*x8 + -x2^4*x3^7*x5^3*x7*x9 + x2^4*x3^7*x5^3*x7 + -x2^4*x3^7*x5^3*x8*x9 + x2^4*x3^7*x5^3*x8 + x2^4*x3^7*x5^3*x9 + -x2^4*x3^7*x5^3 + -x2^4*x3^7*x5^2*x6*x7*x8*x9^2 + 2*x2^4*x3^7*x5^2*x6*x7*x8*x9 + -x2^4*x3^7*x5^2*x6*x7*x8 + x2^4*x3^7*x5^2*x6*x7*x9^2 + -2*x2^4*x3^7*x5^2*x6*x7*x9 + x2^4*x3^7*x5^2*x6*x7 + x2^4*x3^7*x5^2*x6*x8*x9^2 + -2*x2^4*x3^7*x5^2*x6*x8*x9 + x2^4*x3^7*x5^2*x6*x8 + -x2^4*x3^7*x5^2*x6*x9^2 + 2*x2^4*x3^7*x5^2*x6*x9 + -x2^4*x3^7*x5^2*x6 + x2^4*x3^7*x5^2*x7*x8*x9^2 + -2*x2^4*x3^7*x5^2*x7*x8*x9 + x2^4*x3^7*x5^2*x7*x8 + -x2^4*x3^7*x5^2*x7*x9^2 + 2*x2^4*x3^7*x5^2*x7*x9 + -x2^4*x3^7*x5^2*x7 + -x2^4*x3^7*x5^2*x8*x9^2 + 2*x2^4*x3^7*x5^2*x8*x9 + -x2^4*x3^7*x5^2*x8 + x2^4*x3^7*x5^2*x9^2 + -2*x2^4*x3^7*x5^2*x9 + x2^4*x3^7*x5^2 + x2^4*x3^7*x5*x6*x7*x8*x9^2 + -x2^4*x3^7*x5*x6*x7*x8*x9 + -x2^4*x3^7*x5*x6*x7*x9^2 + x2^4*x3^7*x5*x6*x7*x9 + -x2^4*x3^7*x5*x6*x8*x9^2 + x2^4*x3^7*x5*x6*x8*x9 + x2^4*x3^7*x5*x6*x9^2 + -x2^4*x3^7*x5*x6*x9 + -x2^4*x3^7*x5*x7*x8*x9^2 + x2^4*x3^7*x5*x7*x8*x9 + x2^4*x3^7*x5*x7*x9^2 + -x2^4*x3^7*x5*x7*x9 + x2^4*x3^7*x5*x8*x9^2 + -x2^4*x3^7*x5*x8*x9 + -x2^4*x3^7*x5*x9^2 + x2^4*x3^7*x5*x9 + x2^4*x3^6*x4*x5^3*x6*x7*x8*x9^2 + -x2^4*x3^6*x4*x5^3*x6*x7*x8*x9 + -x2^4*x3^6*x4*x5^3*x6*x7*x9^2 + x2^4*x3^6*x4*x5^3*x6*x7*x9 + -x2^4*x3^6*x4*x5^3*x6*x8*x9^2 + x2^4*x3^6*x4*x5^3*x6*x8*x9 + x2^4*x3^6*x4*x5^3*x6*x9^2 + -x2^4*x3^6*x4*x5^3*x6*x9 + -x2^4*x3^6*x4*x5^3*x7*x8*x9^2 + x2^4*x3^6*x4*x5^3*x7*x8*x9 + x2^4*x3^6*x4*x5^3*x7*x9^2 + -x2^4*x3^6*x4*x5^3*x7*x9 + x2^4*x3^6*x4*x5^3*x8*x9^2 + -x2^4*x3^6*x4*x5^3*x8*x9 + -x2^4*x3^6*x4*x5^3*x9^2 + x2^4*x3^6*x4*x5^3*x9 + -x2^4*x3^6*x4*x5^2*x6*x7*x8*x9^2 + x2^4*x3^6*x4*x5^2*x6*x7*x8*x9 + x2^4*x3^6*x4*x5^2*x6*x7*x9^2 + -x2^4*x3^6*x4*x5^2*x6*x7*x9 + x2^4*x3^6*x4*x5^2*x6*x8*x9^2 + -x2^4*x3^6*x4*x5^2*x6*x8*x9 + -x2^4*x3^6*x4*x5^2*x6*x9^2 + x2^4*x3^6*x4*x5^2*x6*x9 + x2^4*x3^6*x4*x5^2*x7*x8*x9^2 + -x2^4*x3^6*x4*x5^2*x7*x8*x9 + -x2^4*x3^6*x4*x5^2*x7*x9^2 + x2^4*x3^6*x4*x5^2*x7*x9 + -x2^4*x3^6*x4*x5^2*x8*x9^2 + x2^4*x3^6*x4*x5^2*x8*x9 + x2^4*x3^6*x4*x5^2*x9^2 + -x2^4*x3^6*x4*x5^2*x9 + -x2^4*x3^6*x5^3*x6*x7*x8*x9^2 + x2^4*x3^6*x5^3*x6*x7*x8*x9 + x2^4*x3^6*x5^3*x6*x7*x9^2 + -x2^4*x3^6*x5^3*x6*x7*x9 + x2^4*x3^6*x5^3*x6*x8*x9^2 + -x2^4*x3^6*x5^3*x6*x8*x9 + -x2^4*x3^6*x5^3*x6*x9^2 + x2^4*x3^6*x5^3*x6*x9 + x2^4*x3^6*x5^3*x7*x8*x9^2 + -x2^4*x3^6*x5^3*x7*x8*x9 + -x2^4*x3^6*x5^3*x7*x9^2 + x2^4*x3^6*x5^3*x7*x9 + -x2^4*x3^6*x5^3*x8*x9^2 + x2^4*x3^6*x5^3*x8*x9 + x2^4*x3^6*x5^3*x9^2 + -x2^4*x3^6*x5^3*x9 + x2^4*x3^6*x5^2*x6*x7*x8*x9^2 + -x2^4*x3^6*x5^2*x6*x7*x8*x9 + -x2^4*x3^6*x5^2*x6*x7*x9^2 + x2^4*x3^6*x5^2*x6*x7*x9 + -x2^4*x3^6*x5^2*x6*x8*x9^2 + x2^4*x3^6*x5^2*x6*x8*x9 + x2^4*x3^6*x5^2*x6*x9^2 + -x2^4*x3^6*x5^2*x6*x9 + -x2^4*x3^6*x5^2*x7*x8*x9^2 + x2^4*x3^6*x5^2*x7*x8*x9 + x2^4*x3^6*x5^2*x7*x9^2 + -x2^4*x3^6*x5^2*x7*x9 + x2^4*x3^6*x5^2*x8*x9^2 + -x2^4*x3^6*x5^2*x8*x9 + -x2^4*x3^6*x5^2*x9^2 + x2^4*x3^6*x5^2*x9 + x2^4*x3^4*x4^3*x5*x6*x7*x8*x9 + -x2^4*x3^4*x4^3*x5*x6*x7*x8 + -x2^4*x3^4*x4^3*x5*x6*x7*x9 + x2^4*x3^4*x4^3*x5*x6*x7 + -x2^4*x3^4*x4^3*x5*x6*x8*x9 + x2^4*x3^4*x4^3*x5*x6*x8 + x2^4*x3^4*x4^3*x5*x6*x9 + -x2^4*x3^4*x4^3*x5*x6 + -x2^4*x3^4*x4^3*x5*x7*x8*x9 + x2^4*x3^4*x4^3*x5*x7*x8 + x2^4*x3^4*x4^3*x5*x7*x9 + -x2^4*x3^4*x4^3*x5*x7 + x2^4*x3^4*x4^3*x5*x8*x9 + -x2^4*x3^4*x4^3*x5*x8 + -x2^4*x3^4*x4^3*x5*x9 + x2^4*x3^4*x4^3*x5 + -x2^4*x3^4*x4^3*x6*x7*x8*x9 + x2^4*x3^4*x4^3*x6*x7*x8 + x2^4*x3^4*x4^3*x6*x7*x9 + -x2^4*x3^4*x4^3*x6*x7 + x2^4*x3^4*x4^3*x6*x8*x9 + -x2^4*x3^4*x4^3*x6*x8 + -x2^4*x3^4*x4^3*x6*x9 + x2^4*x3^4*x4^3*x6 + x2^4*x3^4*x4^3*x7*x8*x9 + -x2^4*x3^4*x4^3*x7*x8 + -x2^4*x3^4*x4^3*x7*x9 + x2^4*x3^4*x4^3*x7 + -x2^4*x3^4*x4^3*x8*x9 + x2^4*x3^4*x4^3*x8 + x2^4*x3^4*x4^3*x9 + -x2^4*x3^4*x4^3 + -x2^4*x3^4*x4^2*x5*x6*x7*x8*x9 + x2^4*x3^4*x4^2*x5*x6*x7*x8 + x2^4*x3^4*x4^2*x5*x6*x7*x9 + -x2^4*x3^4*x4^2*x5*x6*x7 + x2^4*x3^4*x4^2*x5*x6*x8*x9 + -x2^4*x3^4*x4^2*x5*x6*x8 + -x2^4*x3^4*x4^2*x5*x6*x9 + x2^4*x3^4*x4^2*x5*x6 + x2^4*x3^4*x4^2*x5*x7*x8*x9 + -x2^4*x3^4*x4^2*x5*x7*x8 + -x2^4*x3^4*x4^2*x5*x7*x9 + x2^4*x3^4*x4^2*x5*x7 + -x2^4*x3^4*x4^2*x5*x8*x9 + x2^4*x3^4*x4^2*x5*x8 + x2^4*x3^4*x4^2*x5*x9 + -x2^4*x3^4*x4^2*x5 + x2^4*x3^4*x4^2*x6*x7*x8*x9 + -x2^4*x3^4*x4^2*x6*x7*x8 + -x2^4*x3^4*x4^2*x6*x7*x9 + x2^4*x3^4*x4^2*x6*x7 + -x2^4*x3^4*x4^2*x6*x8*x9 + x2^4*x3^4*x4^2*x6*x8 + x2^4*x3^4*x4^2*x6*x9 + -x2^4*x3^4*x4^2*x6 + -x2^4*x3^4*x4^2*x7*x8*x9 + x2^4*x3^4*x4^2*x7*x8 + x2^4*x3^4*x4^2*x7*x9 + -x2^4*x3^4*x4^2*x7 + x2^4*x3^4*x4^2*x8*x9 + -x2^4*x3^4*x4^2*x8 + -x2^4*x3^4*x4^2*x9 + x2^4*x3^4*x4^2 + x2^4*x3^3*x4^4*x5*x6*x7*x8*x9 + -x2^4*x3^3*x4^4*x5*x6*x7*x8 + -x2^4*x3^3*x4^4*x5*x6*x7*x9 + x2^4*x3^3*x4^4*x5*x6*x7 + -x2^4*x3^3*x4^4*x5*x6*x8*x9 + x2^4*x3^3*x4^4*x5*x6*x8 + x2^4*x3^3*x4^4*x5*x6*x9 + -x2^4*x3^3*x4^4*x5*x6 + -x2^4*x3^3*x4^4*x5*x7*x8*x9 + x2^4*x3^3*x4^4*x5*x7*x8 + x2^4*x3^3*x4^4*x5*x7*x9 + -x2^4*x3^3*x4^4*x5*x7 + x2^4*x3^3*x4^4*x5*x8*x9 + -x2^4*x3^3*x4^4*x5*x8 + -x2^4*x3^3*x4^4*x5*x9 + x2^4*x3^3*x4^4*x5 + -x2^4*x3^3*x4^4*x6*x7*x8*x9 + x2^4*x3^3*x4^4*x6*x7*x8 + x2^4*x3^3*x4^4*x6*x7*x9 + -x2^4*x3^3*x4^4*x6*x7 + x2^4*x3^3*x4^4*x6*x8*x9 + -x2^4*x3^3*x4^4*x6*x8 + -x2^4*x3^3*x4^4*x6*x9 + x2^4*x3^3*x4^4*x6 + x2^4*x3^3*x4^4*x7*x8*x9 + -x2^4*x3^3*x4^4*x7*x8 + -x2^4*x3^3*x4^4*x7*x9 + x2^4*x3^3*x4^4*x7 + -x2^4*x3^3*x4^4*x8*x9 + x2^4*x3^3*x4^4*x8 + x2^4*x3^3*x4^4*x9 + -x2^4*x3^3*x4^4 + -x2^4*x3^3*x4^3*x5*x6*x7*x8*x9 + x2^4*x3^3*x4^3*x5*x6*x7*x8 + x2^4*x3^3*x4^3*x5*x6*x7*x9 + -x2^4*x3^3*x4^3*x5*x6*x7 + x2^4*x3^3*x4^3*x5*x6*x8*x9 + -x2^4*x3^3*x4^3*x5*x6*x8 + -x2^4*x3^3*x4^3*x5*x6*x9 + x2^4*x3^3*x4^3*x5*x6 + x2^4*x3^3*x4^3*x5*x7*x8*x9 + -x2^4*x3^3*x4^3*x5*x7*x8 + -x2^4*x3^3*x4^3*x5*x7*x9 + x2^4*x3^3*x4^3*x5*x7 + -x2^4*x3^3*x4^3*x5*x8*x9 + x2^4*x3^3*x4^3*x5*x8 + x2^4*x3^3*x4^3*x5*x9 + -x2^4*x3^3*x4^3*x5 + x2^4*x3^3*x4^3*x6*x7*x8*x9 + -x2^4*x3^3*x4^3*x6*x7*x8 + -x2^4*x3^3*x4^3*x6*x7*x9 + x2^4*x3^3*x4^3*x6*x7 + -x2^4*x3^3*x4^3*x6*x8*x9 + x2^4*x3^3*x4^3*x6*x8 + x2^4*x3^3*x4^3*x6*x9 + -x2^4*x3^3*x4^3*x6 + -x2^4*x3^3*x4^3*x7*x8*x9 + x2^4*x3^3*x4^3*x7*x8 + x2^4*x3^3*x4^3*x7*x9 + -x2^4*x3^3*x4^3*x7 + x2^4*x3^3*x4^3*x8*x9 + -x2^4*x3^3*x4^3*x8 + -x2^4*x3^3*x4^3*x9 + x2^4*x3^3*x4^3 + x2^4*x3^3*x4*x5*x6^3*x7*x8*x9 + -x2^4*x3^3*x4*x5*x6^3*x7*x8 + -x2^4*x3^3*x4*x5*x6^3*x7*x9 + x2^4*x3^3*x4*x5*x6^3*x7 + -x2^4*x3^3*x4*x5*x6^3*x8*x9 + x2^4*x3^3*x4*x5*x6^3*x8 + x2^4*x3^3*x4*x5*x6^3*x9 + -x2^4*x3^3*x4*x5*x6^3 + -x2^4*x3^3*x4*x5*x6^2*x7*x8*x9 + x2^4*x3^3*x4*x5*x6^2*x7*x8 + x2^4*x3^3*x4*x5*x6^2*x7*x9 + -x2^4*x3^3*x4*x5*x6^2*x7 + x2^4*x3^3*x4*x5*x6^2*x8*x9 + -x2^4*x3^3*x4*x5*x6^2*x8 + -x2^4*x3^3*x4*x5*x6^2*x9 + x2^4*x3^3*x4*x5*x6^2 + -x2^4*x3^3*x4*x6^3*x7*x8*x9 + x2^4*x3^3*x4*x6^3*x7*x8 + x2^4*x3^3*x4*x6^3*x7*x9 + -x2^4*x3^3*x4*x6^3*x7 + x2^4*x3^3*x4*x6^3*x8*x9 + -x2^4*x3^3*x4*x6^3*x8 + -x2^4*x3^3*x4*x6^3*x9 + x2^4*x3^3*x4*x6^3 + x2^4*x3^3*x4*x6^2*x7*x8*x9 + -x2^4*x3^3*x4*x6^2*x7*x8 + -x2^4*x3^3*x4*x6^2*x7*x9 + x2^4*x3^3*x4*x6^2*x7 + -x2^4*x3^3*x4*x6^2*x8*x9 + x2^4*x3^3*x4*x6^2*x8 + x2^4*x3^3*x4*x6^2*x9 + -x2^4*x3^3*x4*x6^2 + -x2^4*x3^3*x5*x6^3*x7*x8*x9 + x2^4*x3^3*x5*x6^3*x7*x8 + x2^4*x3^3*x5*x6^3*x7*x9 + -x2^4*x3^3*x5*x6^3*x7 + x2^4*x3^3*x5*x6^3*x8*x9 + -x2^4*x3^3*x5*x6^3*x8 + -x2^4*x3^3*x5*x6^3*x9 + x2^4*x3^3*x5*x6^3 + x2^4*x3^3*x5*x6^2*x7*x8*x9 + -x2^4*x3^3*x5*x6^2*x7*x8 + -x2^4*x3^3*x5*x6^2*x7*x9 + x2^4*x3^3*x5*x6^2*x7 + -x2^4*x3^3*x5*x6^2*x8*x9 + x2^4*x3^3*x5*x6^2*x8 + x2^4*x3^3*x5*x6^2*x9 + -x2^4*x3^3*x5*x6^2 + x2^4*x3^3*x6^3*x7*x8*x9 + -x2^4*x3^3*x6^3*x7*x8 + -x2^4*x3^3*x6^3*x7*x9 + x2^4*x3^3*x6^3*x7 + -x2^4*x3^3*x6^3*x8*x9 + x2^4*x3^3*x6^3*x8 + x2^4*x3^3*x6^3*x9 + -x2^4*x3^3*x6^3 + -x2^4*x3^3*x6^2*x7*x8*x9 + x2^4*x3^3*x6^2*x7*x8 + x2^4*x3^3*x6^2*x7*x9 + -x2^4*x3^3*x6^2*x7 + x2^4*x3^3*x6^2*x8*x9 + -x2^4*x3^3*x6^2*x8 + -x2^4*x3^3*x6^2*x9 + x2^4*x3^3*x6^2 + x2^4*x3^2*x4^7*x5*x6^2*x7*x8*x9 + -x2^4*x3^2*x4^7*x5*x6^2*x7*x8 + -x2^4*x3^2*x4^7*x5*x6^2*x7*x9 + x2^4*x3^2*x4^7*x5*x6^2*x7 + -x2^4*x3^2*x4^7*x5*x6^2*x8*x9 + x2^4*x3^2*x4^7*x5*x6^2*x8 + x2^4*x3^2*x4^7*x5*x6^2*x9 + -x2^4*x3^2*x4^7*x5*x6^2 + -x2^4*x3^2*x4^7*x5*x7*x8*x9 + x2^4*x3^2*x4^7*x5*x7*x8 + x2^4*x3^2*x4^7*x5*x7*x9 + -x2^4*x3^2*x4^7*x5*x7 + x2^4*x3^2*x4^7*x5*x8*x9 + -x2^4*x3^2*x4^7*x5*x8 + -x2^4*x3^2*x4^7*x5*x9 + x2^4*x3^2*x4^7*x5 + -x2^4*x3^2*x4^7*x6^2*x7*x8*x9 + x2^4*x3^2*x4^7*x6^2*x7*x8 + x2^4*x3^2*x4^7*x6^2*x7*x9 + -x2^4*x3^2*x4^7*x6^2*x7 + x2^4*x3^2*x4^7*x6^2*x8*x9 + -x2^4*x3^2*x4^7*x6^2*x8 + -x2^4*x3^2*x4^7*x6^2*x9 + x2^4*x3^2*x4^7*x6^2 + x2^4*x3^2*x4^7*x7*x8*x9 + -x2^4*x3^2*x4^7*x7*x8 + -x2^4*x3^2*x4^7*x7*x9 + x2^4*x3^2*x4^7*x7 + -x2^4*x3^2*x4^7*x8*x9 + x2^4*x3^2*x4^7*x8 + x2^4*x3^2*x4^7*x9 + -x2^4*x3^2*x4^7 + -x2^4*x3^2*x4^4*x5*x6*x7*x8*x9 + x2^4*x3^2*x4^4*x5*x6*x7*x8 + x2^4*x3^2*x4^4*x5*x6*x7*x9 + -x2^4*x3^2*x4^4*x5*x6*x7 + x2^4*x3^2*x4^4*x5*x6*x8*x9 + -x2^4*x3^2*x4^4*x5*x6*x8 + -x2^4*x3^2*x4^4*x5*x6*x9 + x2^4*x3^2*x4^4*x5*x6 + x2^4*x3^2*x4^4*x5*x7*x8*x9 + -x2^4*x3^2*x4^4*x5*x7*x8 + -x2^4*x3^2*x4^4*x5*x7*x9 + x2^4*x3^2*x4^4*x5*x7 + -x2^4*x3^2*x4^4*x5*x8*x9 + x2^4*x3^2*x4^4*x5*x8 + x2^4*x3^2*x4^4*x5*x9 + -x2^4*x3^2*x4^4*x5 + x2^4*x3^2*x4^4*x6*x7*x8*x9 + -x2^4*x3^2*x4^4*x6*x7*x8 + -x2^4*x3^2*x4^4*x6*x7*x9 + x2^4*x3^2*x4^4*x6*x7 + -x2^4*x3^2*x4^4*x6*x8*x9 + x2^4*x3^2*x4^4*x6*x8 + x2^4*x3^2*x4^4*x6*x9 + -x2^4*x3^2*x4^4*x6 + -x2^4*x3^2*x4^4*x7*x8*x9 + x2^4*x3^2*x4^4*x7*x8 + x2^4*x3^2*x4^4*x7*x9 + -x2^4*x3^2*x4^4*x7 + x2^4*x3^2*x4^4*x8*x9 + -x2^4*x3^2*x4^4*x8 + -x2^4*x3^2*x4^4*x9 + x2^4*x3^2*x4^4 + x2^4*x3^2*x4^3*x5*x6^3*x7*x8*x9 + -x2^4*x3^2*x4^3*x5*x6^3*x7*x8 + -x2^4*x3^2*x4^3*x5*x6^3*x7*x9 + x2^4*x3^2*x4^3*x5*x6^3*x7 + -x2^4*x3^2*x4^3*x5*x6^3*x8*x9 + x2^4*x3^2*x4^3*x5*x6^3*x8 + x2^4*x3^2*x4^3*x5*x6^3*x9 + -x2^4*x3^2*x4^3*x5*x6^3 + -x2^4*x3^2*x4^3*x5*x6^2*x7*x8*x9 + x2^4*x3^2*x4^3*x5*x6^2*x7*x8 + x2^4*x3^2*x4^3*x5*x6^2*x7*x9 + -x2^4*x3^2*x4^3*x5*x6^2*x7 + x2^4*x3^2*x4^3*x5*x6^2*x8*x9 + -x2^4*x3^2*x4^3*x5*x6^2*x8 + -x2^4*x3^2*x4^3*x5*x6^2*x9 + x2^4*x3^2*x4^3*x5*x6^2 + -x2^4*x3^2*x4^3*x6^3*x7*x8*x9 + x2^4*x3^2*x4^3*x6^3*x7*x8 + x2^4*x3^2*x4^3*x6^3*x7*x9 + -x2^4*x3^2*x4^3*x6^3*x7 + x2^4*x3^2*x4^3*x6^3*x8*x9 + -x2^4*x3^2*x4^3*x6^3*x8 + -x2^4*x3^2*x4^3*x6^3*x9 + x2^4*x3^2*x4^3*x6^3 + x2^4*x3^2*x4^3*x6^2*x7*x8*x9 + -x2^4*x3^2*x4^3*x6^2*x7*x8 + -x2^4*x3^2*x4^3*x6^2*x7*x9 + x2^4*x3^2*x4^3*x6^2*x7 + -x2^4*x3^2*x4^3*x6^2*x8*x9 + x2^4*x3^2*x4^3*x6^2*x8 + x2^4*x3^2*x4^3*x6^2*x9 + -x2^4*x3^2*x4^3*x6^2 + x2^4*x3^2*x4^2*x5^2*x6^2*x7*x8*x9 + -x2^4*x3^2*x4^2*x5^2*x6^2*x7*x8 + -x2^4*x3^2*x4^2*x5^2*x6^2*x7*x9 + x2^4*x3^2*x4^2*x5^2*x6^2*x7 + -x2^4*x3^2*x4^2*x5^2*x6^2*x8*x9 + x2^4*x3^2*x4^2*x5^2*x6^2*x8 + x2^4*x3^2*x4^2*x5^2*x6^2*x9 + -x2^4*x3^2*x4^2*x5^2*x6^2 + -x2^4*x3^2*x4^2*x5^2*x6*x7*x8*x9 + x2^4*x3^2*x4^2*x5^2*x6*x7*x8 + x2^4*x3^2*x4^2*x5^2*x6*x7*x9 + -x2^4*x3^2*x4^2*x5^2*x6*x7 + x2^4*x3^2*x4^2*x5^2*x6*x8*x9 + -x2^4*x3^2*x4^2*x5^2*x6*x8 + -x2^4*x3^2*x4^2*x5^2*x6*x9 + x2^4*x3^2*x4^2*x5^2*x6 + -x2^4*x3^2*x4^2*x5*x6^2*x7*x8*x9 + x2^4*x3^2*x4^2*x5*x6^2*x7*x8 + x2^4*x3^2*x4^2*x5*x6^2*x7*x9 + -x2^4*x3^2*x4^2*x5*x6^2*x7 + x2^4*x3^2*x4^2*x5*x6^2*x8*x9 + -x2^4*x3^2*x4^2*x5*x6^2*x8 + -x2^4*x3^2*x4^2*x5*x6^2*x9 + x2^4*x3^2*x4^2*x5*x6^2 + x2^4*x3^2*x4^2*x5*x6*x7*x8*x9 + -x2^4*x3^2*x4^2*x5*x6*x7*x8 + -x2^4*x3^2*x4^2*x5*x6*x7*x9 + x2^4*x3^2*x4^2*x5*x6*x7 + -x2^4*x3^2*x4^2*x5*x6*x8*x9 + x2^4*x3^2*x4^2*x5*x6*x8 + x2^4*x3^2*x4^2*x5*x6*x9 + -x2^4*x3^2*x4^2*x5*x6 + -x2^4*x3^2*x4*x5^2*x6^2*x7*x8*x9 + x2^4*x3^2*x4*x5^2*x6^2*x7*x8 + x2^4*x3^2*x4*x5^2*x6^2*x7*x9 + -x2^4*x3^2*x4*x5^2*x6^2*x7 + x2^4*x3^2*x4*x5^2*x6^2*x8*x9 + -x2^4*x3^2*x4*x5^2*x6^2*x8 + -x2^4*x3^2*x4*x5^2*x6^2*x9 + x2^4*x3^2*x4*x5^2*x6^2 + x2^4*x3^2*x4*x5^2*x6*x7*x8*x9 + -x2^4*x3^2*x4*x5^2*x6*x7*x8 + -x2^4*x3^2*x4*x5^2*x6*x7*x9 + x2^4*x3^2*x4*x5^2*x6*x7 + -x2^4*x3^2*x4*x5^2*x6*x8*x9 + x2^4*x3^2*x4*x5^2*x6*x8 + x2^4*x3^2*x4*x5^2*x6*x9 + -x2^4*x3^2*x4*x5^2*x6 + -x2^4*x3^2*x4*x5*x6^3*x7*x8*x9 + x2^4*x3^2*x4*x5*x6^3*x7*x8 + x2^4*x3^2*x4*x5*x6^3*x7*x9 + -x2^4*x3^2*x4*x5*x6^3*x7 + x2^4*x3^2*x4*x5*x6^3*x8*x9 + -x2^4*x3^2*x4*x5*x6^3*x8 + -x2^4*x3^2*x4*x5*x6^3*x9 + x2^4*x3^2*x4*x5*x6^3 + x2^4*x3^2*x4*x5*x6^2*x7*x8*x9 + -x2^4*x3^2*x4*x5*x6^2*x7*x8 + -x2^4*x3^2*x4*x5*x6^2*x7*x9 + x2^4*x3^2*x4*x5*x6^2*x7 + -x2^4*x3^2*x4*x5*x6^2*x8*x9 + x2^4*x3^2*x4*x5*x6^2*x8 + x2^4*x3^2*x4*x5*x6^2*x9 + -x2^4*x3^2*x4*x5*x6^2 + x2^4*x3^2*x4*x6^3*x7*x8*x9 + -x2^4*x3^2*x4*x6^3*x7*x8 + -x2^4*x3^2*x4*x6^3*x7*x9 + x2^4*x3^2*x4*x6^3*x7 + -x2^4*x3^2*x4*x6^3*x8*x9 + x2^4*x3^2*x4*x6^3*x8 + x2^4*x3^2*x4*x6^3*x9 + -x2^4*x3^2*x4*x6^3 + -x2^4*x3^2*x4*x6*x7*x8*x9 + x2^4*x3^2*x4*x6*x7*x8 + x2^4*x3^2*x4*x6*x7*x9 + -x2^4*x3^2*x4*x6*x7 + x2^4*x3^2*x4*x6*x8*x9 + -x2^4*x3^2*x4*x6*x8 + -x2^4*x3^2*x4*x6*x9 + x2^4*x3^2*x4*x6 + x2^4*x3*x4^7*x5*x6*x7*x8^2*x9^2 + -x2^4*x3*x4^7*x5*x6*x7*x8^2 + -x2^4*x3*x4^7*x5*x6*x7*x8*x9 + x2^4*x3*x4^7*x5*x6*x7*x8 + -x2^4*x3*x4^7*x5*x6*x7*x9^2 + x2^4*x3*x4^7*x5*x6*x7*x9 + -x2^4*x3*x4^7*x5*x6*x8^2*x9^2 + x2^4*x3*x4^7*x5*x6*x8^2 + x2^4*x3*x4^7*x5*x6*x8*x9 + -x2^4*x3*x4^7*x5*x6*x8 + x2^4*x3*x4^7*x5*x6*x9^2 + -x2^4*x3*x4^7*x5*x6*x9 + -x2^4*x3*x4^7*x5*x7*x8^2*x9^2 + x2^4*x3*x4^7*x5*x7*x8^2 + x2^4*x3*x4^7*x5*x7*x8*x9 + -x2^4*x3*x4^7*x5*x7*x8 + x2^4*x3*x4^7*x5*x7*x9^2 + -x2^4*x3*x4^7*x5*x7*x9 + x2^4*x3*x4^7*x5*x8^2*x9^2 + -x2^4*x3*x4^7*x5*x8^2 + -x2^4*x3*x4^7*x5*x8*x9 + x2^4*x3*x4^7*x5*x8 + -x2^4*x3*x4^7*x5*x9^2 + x2^4*x3*x4^7*x5*x9 + -x2^4*x3*x4^7*x6*x7*x8^2*x9^2 + x2^4*x3*x4^7*x6*x7*x8^2 + x2^4*x3*x4^7*x6*x7*x8*x9 + -x2^4*x3*x4^7*x6*x7*x8 + x2^4*x3*x4^7*x6*x7*x9^2 + -x2^4*x3*x4^7*x6*x7*x9 + x2^4*x3*x4^7*x6*x8^2*x9^2 + -x2^4*x3*x4^7*x6*x8^2 + -x2^4*x3*x4^7*x6*x8*x9 + x2^4*x3*x4^7*x6*x8 + -x2^4*x3*x4^7*x6*x9^2 + x2^4*x3*x4^7*x6*x9 + x2^4*x3*x4^7*x7*x8^2*x9^2 + -x2^4*x3*x4^7*x7*x8^2 + -x2^4*x3*x4^7*x7*x8*x9 + x2^4*x3*x4^7*x7*x8 + -x2^4*x3*x4^7*x7*x9^2 + x2^4*x3*x4^7*x7*x9 + -x2^4*x3*x4^7*x8^2*x9^2 + x2^4*x3*x4^7*x8^2 + x2^4*x3*x4^7*x8*x9 + -x2^4*x3*x4^7*x8 + x2^4*x3*x4^7*x9^2 + -x2^4*x3*x4^7*x9 + -x2^4*x3*x4^6*x5*x6*x7*x8^2*x9^2 + x2^4*x3*x4^6*x5*x6*x7*x8^2 + x2^4*x3*x4^6*x5*x6*x7*x9^2 + -x2^4*x3*x4^6*x5*x6*x7 + x2^4*x3*x4^6*x5*x6*x8^2*x9^2 + -x2^4*x3*x4^6*x5*x6*x8^2 + -x2^4*x3*x4^6*x5*x6*x9^2 + x2^4*x3*x4^6*x5*x6 + x2^4*x3*x4^6*x5*x7*x8^2*x9^2 + -x2^4*x3*x4^6*x5*x7*x8^2 + -x2^4*x3*x4^6*x5*x7*x9^2 + x2^4*x3*x4^6*x5*x7 + -x2^4*x3*x4^6*x5*x8^2*x9^2 + x2^4*x3*x4^6*x5*x8^2 + x2^4*x3*x4^6*x5*x9^2 + -x2^4*x3*x4^6*x5 + x2^4*x3*x4^6*x6*x7*x8^2*x9^2 + -x2^4*x3*x4^6*x6*x7*x8^2 + -x2^4*x3*x4^6*x6*x7*x9^2 + x2^4*x3*x4^6*x6*x7 + -x2^4*x3*x4^6*x6*x8^2*x9^2 + x2^4*x3*x4^6*x6*x8^2 + x2^4*x3*x4^6*x6*x9^2 + -x2^4*x3*x4^6*x6 + -x2^4*x3*x4^6*x7*x8^2*x9^2 + x2^4*x3*x4^6*x7*x8^2 + x2^4*x3*x4^6*x7*x9^2 + -x2^4*x3*x4^6*x7 + x2^4*x3*x4^6*x8^2*x9^2 + -x2^4*x3*x4^6*x8^2 + -x2^4*x3*x4^6*x9^2 + x2^4*x3*x4^6 + x2^4*x3*x4^5*x5*x6^4*x7*x8*x9 + -x2^4*x3*x4^5*x5*x6^4*x7*x8 + -x2^4*x3*x4^5*x5*x6^4*x7*x9 + x2^4*x3*x4^5*x5*x6^4*x7 + -x2^4*x3*x4^5*x5*x6^4*x8*x9 + x2^4*x3*x4^5*x5*x6^4*x8 + x2^4*x3*x4^5*x5*x6^4*x9 + -x2^4*x3*x4^5*x5*x6^4 + -2*x2^4*x3*x4^5*x5*x6^2*x7*x8*x9 + 2*x2^4*x3*x4^5*x5*x6^2*x7*x8 + 2*x2^4*x3*x4^5*x5*x6^2*x7*x9 + -2*x2^4*x3*x4^5*x5*x6^2*x7 + 2*x2^4*x3*x4^5*x5*x6^2*x8*x9 + -2*x2^4*x3*x4^5*x5*x6^2*x8 + -2*x2^4*x3*x4^5*x5*x6^2*x9 + 2*x2^4*x3*x4^5*x5*x6^2 + x2^4*x3*x4^5*x5*x6*x7*x8*x9 + -x2^4*x3*x4^5*x5*x6*x7*x8 + -x2^4*x3*x4^5*x5*x6*x7*x9 + x2^4*x3*x4^5*x5*x6*x7 + -x2^4*x3*x4^5*x5*x6*x8*x9 + x2^4*x3*x4^5*x5*x6*x8 + x2^4*x3*x4^5*x5*x6*x9 + -x2^4*x3*x4^5*x5*x6 + -x2^4*x3*x4^5*x6^4*x7*x8*x9 + x2^4*x3*x4^5*x6^4*x7*x8 + x2^4*x3*x4^5*x6^4*x7*x9 + -x2^4*x3*x4^5*x6^4*x7 + x2^4*x3*x4^5*x6^4*x8*x9 + -x2^4*x3*x4^5*x6^4*x8 + -x2^4*x3*x4^5*x6^4*x9 + x2^4*x3*x4^5*x6^4 + 2*x2^4*x3*x4^5*x6^2*x7*x8*x9 + -2*x2^4*x3*x4^5*x6^2*x7*x8 + -2*x2^4*x3*x4^5*x6^2*x7*x9 + 2*x2^4*x3*x4^5*x6^2*x7 + -2*x2^4*x3*x4^5*x6^2*x8*x9 + 2*x2^4*x3*x4^5*x6^2*x8 + 2*x2^4*x3*x4^5*x6^2*x9 + -2*x2^4*x3*x4^5*x6^2 + -x2^4*x3*x4^5*x6*x7*x8*x9 + x2^4*x3*x4^5*x6*x7*x8 + x2^4*x3*x4^5*x6*x7*x9 + -x2^4*x3*x4^5*x6*x7 + x2^4*x3*x4^5*x6*x8*x9 + -x2^4*x3*x4^5*x6*x8 + -x2^4*x3*x4^5*x6*x9 + x2^4*x3*x4^5*x6 + -x2^4*x3*x4^4*x5*x6^4*x7*x8*x9 + x2^4*x3*x4^4*x5*x6^4*x7*x8 + x2^4*x3*x4^4*x5*x6^4*x7*x9 + -x2^4*x3*x4^4*x5*x6^4*x7 + x2^4*x3*x4^4*x5*x6^4*x8*x9 + -x2^4*x3*x4^4*x5*x6^4*x8 + -x2^4*x3*x4^4*x5*x6^4*x9 + x2^4*x3*x4^4*x5*x6^4 + x2^4*x3*x4^4*x5*x6^2*x7*x8*x9 + -x2^4*x3*x4^4*x5*x6^2*x7*x8 + -x2^4*x3*x4^4*x5*x6^2*x7*x9 + x2^4*x3*x4^4*x5*x6^2*x7 + -x2^4*x3*x4^4*x5*x6^2*x8*x9 + x2^4*x3*x4^4*x5*x6^2*x8 + x2^4*x3*x4^4*x5*x6^2*x9 + -x2^4*x3*x4^4*x5*x6^2 + x2^4*x3*x4^4*x6^4*x7*x8*x9 + -x2^4*x3*x4^4*x6^4*x7*x8 + -x2^4*x3*x4^4*x6^4*x7*x9 + x2^4*x3*x4^4*x6^4*x7 + -x2^4*x3*x4^4*x6^4*x8*x9 + x2^4*x3*x4^4*x6^4*x8 + x2^4*x3*x4^4*x6^4*x9 + -x2^4*x3*x4^4*x6^4 + -x2^4*x3*x4^4*x6^2*x7*x8*x9 + x2^4*x3*x4^4*x6^2*x7*x8 + x2^4*x3*x4^4*x6^2*x7*x9 + -x2^4*x3*x4^4*x6^2*x7 + x2^4*x3*x4^4*x6^2*x8*x9 + -x2^4*x3*x4^4*x6^2*x8 + -x2^4*x3*x4^4*x6^2*x9 + x2^4*x3*x4^4*x6^2 + x2^4*x3*x4^3*x5^3*x6^2*x7*x8*x9 + -x2^4*x3*x4^3*x5^3*x6^2*x7*x8 + -x2^4*x3*x4^3*x5^3*x6^2*x7*x9 + x2^4*x3*x4^3*x5^3*x6^2*x7 + -x2^4*x3*x4^3*x5^3*x6^2*x8*x9 + x2^4*x3*x4^3*x5^3*x6^2*x8 + x2^4*x3*x4^3*x5^3*x6^2*x9 + -x2^4*x3*x4^3*x5^3*x6^2 + x2^4*x3*x4^3*x5^3*x6*x7^2*x8*x9 + -x2^4*x3*x4^3*x5^3*x6*x7^2*x8 + -x2^4*x3*x4^3*x5^3*x6*x7^2*x9 + x2^4*x3*x4^3*x5^3*x6*x7^2 + -x2^4*x3*x4^3*x5^3*x6*x7*x8*x9 + x2^4*x3*x4^3*x5^3*x6*x7*x8 + x2^4*x3*x4^3*x5^3*x6*x7*x9 + -x2^4*x3*x4^3*x5^3*x6*x7 + -x2^4*x3*x4^3*x5^3*x7^2*x8*x9 + x2^4*x3*x4^3*x5^3*x7^2*x8 + x2^4*x3*x4^3*x5^3*x7^2*x9 + -x2^4*x3*x4^3*x5^3*x7^2 + x2^4*x3*x4^3*x5^3*x8*x9 + -x2^4*x3*x4^3*x5^3*x8 + -x2^4*x3*x4^3*x5^3*x9 + x2^4*x3*x4^3*x5^3 + x2^4*x3*x4^3*x5^2*x6^4*x7*x8*x9 + -x2^4*x3*x4^3*x5^2*x6^4*x7*x8 + -x2^4*x3*x4^3*x5^2*x6^4*x7*x9 + x2^4*x3*x4^3*x5^2*x6^4*x7 + -x2^4*x3*x4^3*x5^2*x6^4*x8*x9 + x2^4*x3*x4^3*x5^2*x6^4*x8 + x2^4*x3*x4^3*x5^2*x6^4*x9 + -x2^4*x3*x4^3*x5^2*x6^4 + x2^4*x3*x4^3*x5^2*x6^3*x7^2*x8*x9 + -x2^4*x3*x4^3*x5^2*x6^3*x7^2*x8 + -x2^4*x3*x4^3*x5^2*x6^3*x7^2*x9 + x2^4*x3*x4^3*x5^2*x6^3*x7^2 + -x2^4*x3*x4^3*x5^2*x6^3*x7*x8*x9 + x2^4*x3*x4^3*x5^2*x6^3*x7*x8 + x2^4*x3*x4^3*x5^2*x6^3*x7*x9 + -x2^4*x3*x4^3*x5^2*x6^3*x7 + -x2^4*x3*x4^3*x5^2*x6^2*x7*x8*x9 + x2^4*x3*x4^3*x5^2*x6^2*x7*x8 + x2^4*x3*x4^3*x5^2*x6^2*x7*x9 + -x2^4*x3*x4^3*x5^2*x6^2*x7 + x2^4*x3*x4^3*x5^2*x6^2*x8*x9 + -x2^4*x3*x4^3*x5^2*x6^2*x8 + -x2^4*x3*x4^3*x5^2*x6^2*x9 + x2^4*x3*x4^3*x5^2*x6^2 + -x2^4*x3*x4^3*x5^2*x6*x7^2*x8*x9 + x2^4*x3*x4^3*x5^2*x6*x7^2*x8 + x2^4*x3*x4^3*x5^2*x6*x7^2*x9 + -x2^4*x3*x4^3*x5^2*x6*x7^2 + x2^4*x3*x4^3*x5^2*x6*x7*x8*x9 + -x2^4*x3*x4^3*x5^2*x6*x7*x8 + -x2^4*x3*x4^3*x5^2*x6*x7*x9 + x2^4*x3*x4^3*x5^2*x6*x7 + x2^4*x3*x4^3*x5*x6^6*x7*x8*x9 + -x2^4*x3*x4^3*x5*x6^6*x7*x8 + -x2^4*x3*x4^3*x5*x6^6*x7*x9 + x2^4*x3*x4^3*x5*x6^6*x7 + -x2^4*x3*x4^3*x5*x6^6*x8*x9 + x2^4*x3*x4^3*x5*x6^6*x8 + x2^4*x3*x4^3*x5*x6^6*x9 + -x2^4*x3*x4^3*x5*x6^6 + -x2^4*x3*x4^3*x5*x6^5*x7*x8*x9 + x2^4*x3*x4^3*x5*x6^5*x7*x8 + x2^4*x3*x4^3*x5*x6^5*x7*x9 + -x2^4*x3*x4^3*x5*x6^5*x7 + x2^4*x3*x4^3*x5*x6^5*x8*x9 + -x2^4*x3*x4^3*x5*x6^5*x8 + -x2^4*x3*x4^3*x5*x6^5*x9 + x2^4*x3*x4^3*x5*x6^5 + -x2^4*x3*x4^3*x5*x6^4*x7*x8*x9 + x2^4*x3*x4^3*x5*x6^4*x7*x8 + x2^4*x3*x4^3*x5*x6^4*x7*x9 + -x2^4*x3*x4^3*x5*x6^4*x7 + x2^4*x3*x4^3*x5*x6^4*x8*x9 + -x2^4*x3*x4^3*x5*x6^4*x8 + -x2^4*x3*x4^3*x5*x6^4*x9 + x2^4*x3*x4^3*x5*x6^4 + -x2^4*x3*x4^3*x5*x6^3*x7^2*x8*x9 + x2^4*x3*x4^3*x5*x6^3*x7^2*x8 + x2^4*x3*x4^3*x5*x6^3*x7^2*x9 + -x2^4*x3*x4^3*x5*x6^3*x7^2 + x2^4*x3*x4^3*x5*x6^3*x8*x9 + -x2^4*x3*x4^3*x5*x6^3*x8 + -x2^4*x3*x4^3*x5*x6^3*x9 + x2^4*x3*x4^3*x5*x6^3 + x2^4*x3*x4^3*x5*x6^2*x7*x8*x9 + -x2^4*x3*x4^3*x5*x6^2*x7*x8 + -x2^4*x3*x4^3*x5*x6^2*x7*x9 + x2^4*x3*x4^3*x5*x6^2*x7 + -x2^4*x3*x4^3*x5*x6^2*x8*x9 + x2^4*x3*x4^3*x5*x6^2*x8 + x2^4*x3*x4^3*x5*x6^2*x9 + -x2^4*x3*x4^3*x5*x6^2 + x2^4*x3*x4^3*x5*x7^2*x8*x9 + -x2^4*x3*x4^3*x5*x7^2*x8 + -x2^4*x3*x4^3*x5*x7^2*x9 + x2^4*x3*x4^3*x5*x7^2 + -x2^4*x3*x4^3*x5*x8*x9 + x2^4*x3*x4^3*x5*x8 + x2^4*x3*x4^3*x5*x9 + -x2^4*x3*x4^3*x5 + -x2^4*x3*x4^3*x6^6*x7*x8*x9 + x2^4*x3*x4^3*x6^6*x7*x8 + x2^4*x3*x4^3*x6^6*x7*x9 + -x2^4*x3*x4^3*x6^6*x7 + x2^4*x3*x4^3*x6^6*x8*x9 + -x2^4*x3*x4^3*x6^6*x8 + -x2^4*x3*x4^3*x6^6*x9 + x2^4*x3*x4^3*x6^6 + x2^4*x3*x4^3*x6^5*x7*x8*x9 + -x2^4*x3*x4^3*x6^5*x7*x8 + -x2^4*x3*x4^3*x6^5*x7*x9 + x2^4*x3*x4^3*x6^5*x7 + -x2^4*x3*x4^3*x6^5*x8*x9 + x2^4*x3*x4^3*x6^5*x8 + x2^4*x3*x4^3*x6^5*x9 + -x2^4*x3*x4^3*x6^5 + x2^4*x3*x4^3*x6^3*x7*x8*x9 + -x2^4*x3*x4^3*x6^3*x7*x8 + -x2^4*x3*x4^3*x6^3*x7*x9 + x2^4*x3*x4^3*x6^3*x7 + -x2^4*x3*x4^3*x6^3*x8*x9 + x2^4*x3*x4^3*x6^3*x8 + x2^4*x3*x4^3*x6^3*x9 + -x2^4*x3*x4^3*x6^3 + -x2^4*x3*x4^3*x6^2*x7*x8*x9 + x2^4*x3*x4^3*x6^2*x7*x8 + x2^4*x3*x4^3*x6^2*x7*x9 + -x2^4*x3*x4^3*x6^2*x7 + x2^4*x3*x4^3*x6^2*x8*x9 + -x2^4*x3*x4^3*x6^2*x8 + -x2^4*x3*x4^3*x6^2*x9 + x2^4*x3*x4^3*x6^2 + -x2^4*x3*x4^2*x5^3*x6*x7*x8*x9 + x2^4*x3*x4^2*x5^3*x6*x7*x8 + x2^4*x3*x4^2*x5^3*x6*x7*x9 + -x2^4*x3*x4^2*x5^3*x6*x7 + x2^4*x3*x4^2*x5^3*x6*x8*x9 + -x2^4*x3*x4^2*x5^3*x6*x8 + -x2^4*x3*x4^2*x5^3*x6*x9 + x2^4*x3*x4^2*x5^3*x6 + x2^4*x3*x4^2*x5^3*x7*x8*x9 + -x2^4*x3*x4^2*x5^3*x7*x8 + -x2^4*x3*x4^2*x5^3*x7*x9 + x2^4*x3*x4^2*x5^3*x7 + -x2^4*x3*x4^2*x5^3*x8*x9 + x2^4*x3*x4^2*x5^3*x8 + x2^4*x3*x4^2*x5^3*x9 + -x2^4*x3*x4^2*x5^3 + -x2^4*x3*x4^2*x5^2*x6^2*x7*x8*x9 + x2^4*x3*x4^2*x5^2*x6^2*x7*x8 + x2^4*x3*x4^2*x5^2*x6^2*x7*x9 + -x2^4*x3*x4^2*x5^2*x6^2*x7 + x2^4*x3*x4^2*x5^2*x6^2*x8*x9 + -x2^4*x3*x4^2*x5^2*x6^2*x8 + -x2^4*x3*x4^2*x5^2*x6^2*x9 + x2^4*x3*x4^2*x5^2*x6^2 + x2^4*x3*x4^2*x5^2*x6*x7*x8*x9 + -x2^4*x3*x4^2*x5^2*x6*x7*x8 + -x2^4*x3*x4^2*x5^2*x6*x7*x9 + x2^4*x3*x4^2*x5^2*x6*x7 + -x2^4*x3*x4^2*x5^2*x6*x8*x9 + x2^4*x3*x4^2*x5^2*x6*x8 + x2^4*x3*x4^2*x5^2*x6*x9 + -x2^4*x3*x4^2*x5^2*x6 + x2^4*x3*x4^2*x5*x6^6*x7*x8^2*x9 + -x2^4*x3*x4^2*x5*x6^6*x7*x8^2 + -2*x2^4*x3*x4^2*x5*x6^6*x7*x8*x9 + 2*x2^4*x3*x4^2*x5*x6^6*x7*x8 + x2^4*x3*x4^2*x5*x6^6*x7*x9 + -x2^4*x3*x4^2*x5*x6^6*x7 + -x2^4*x3*x4^2*x5*x6^6*x8^2*x9 + x2^4*x3*x4^2*x5*x6^6*x8^2 + 2*x2^4*x3*x4^2*x5*x6^6*x8*x9 + -2*x2^4*x3*x4^2*x5*x6^6*x8 + -x2^4*x3*x4^2*x5*x6^6*x9 + x2^4*x3*x4^2*x5*x6^6 + -x2^4*x3*x4^2*x5*x6^5*x7*x8^2*x9 + x2^4*x3*x4^2*x5*x6^5*x7*x8^2 + 2*x2^4*x3*x4^2*x5*x6^5*x7*x8*x9 + -2*x2^4*x3*x4^2*x5*x6^5*x7*x8 + -x2^4*x3*x4^2*x5*x6^5*x7*x9 + x2^4*x3*x4^2*x5*x6^5*x7 + x2^4*x3*x4^2*x5*x6^5*x8^2*x9 + -x2^4*x3*x4^2*x5*x6^5*x8^2 + -2*x2^4*x3*x4^2*x5*x6^5*x8*x9 + 2*x2^4*x3*x4^2*x5*x6^5*x8 + x2^4*x3*x4^2*x5*x6^5*x9 + -x2^4*x3*x4^2*x5*x6^5 + x2^4*x3*x4^2*x5*x6^2*x7*x8*x9 + -x2^4*x3*x4^2*x5*x6^2*x7*x8 + -x2^4*x3*x4^2*x5*x6^2*x7*x9 + x2^4*x3*x4^2*x5*x6^2*x7 + -x2^4*x3*x4^2*x5*x6^2*x8*x9 + x2^4*x3*x4^2*x5*x6^2*x8 + x2^4*x3*x4^2*x5*x6^2*x9 + -x2^4*x3*x4^2*x5*x6^2 + -x2^4*x3*x4^2*x5*x6*x7*x8*x9^2 + x2^4*x3*x4^2*x5*x6*x7*x8*x9 + x2^4*x3*x4^2*x5*x6*x7*x9^2 + -x2^4*x3*x4^2*x5*x6*x7*x9 + x2^4*x3*x4^2*x5*x6*x8*x9^2 + -x2^4*x3*x4^2*x5*x6*x8*x9 + -x2^4*x3*x4^2*x5*x6*x9^2 + x2^4*x3*x4^2*x5*x6*x9 + x2^4*x3*x4^2*x5*x7*x8*x9^2 + -2*x2^4*x3*x4^2*x5*x7*x8*x9 + x2^4*x3*x4^2*x5*x7*x8 + -x2^4*x3*x4^2*x5*x7*x9^2 + 2*x2^4*x3*x4^2*x5*x7*x9 + -x2^4*x3*x4^2*x5*x7 + -x2^4*x3*x4^2*x5*x8*x9^2 + 2*x2^4*x3*x4^2*x5*x8*x9 + -x2^4*x3*x4^2*x5*x8 + x2^4*x3*x4^2*x5*x9^2 + -2*x2^4*x3*x4^2*x5*x9 + x2^4*x3*x4^2*x5 + -x2^4*x3*x4^2*x6^6*x7*x8^2*x9 + x2^4*x3*x4^2*x6^6*x7*x8^2 + 2*x2^4*x3*x4^2*x6^6*x7*x8*x9 + -2*x2^4*x3*x4^2*x6^6*x7*x8 + -x2^4*x3*x4^2*x6^6*x7*x9 + x2^4*x3*x4^2*x6^6*x7 + x2^4*x3*x4^2*x6^6*x8^2*x9 + -x2^4*x3*x4^2*x6^6*x8^2 + -2*x2^4*x3*x4^2*x6^6*x8*x9 + 2*x2^4*x3*x4^2*x6^6*x8 + x2^4*x3*x4^2*x6^6*x9 + -x2^4*x3*x4^2*x6^6 + x2^4*x3*x4^2*x6^5*x7*x8^2*x9 + -x2^4*x3*x4^2*x6^5*x7*x8^2 + -2*x2^4*x3*x4^2*x6^5*x7*x8*x9 + 2*x2^4*x3*x4^2*x6^5*x7*x8 + x2^4*x3*x4^2*x6^5*x7*x9 + -x2^4*x3*x4^2*x6^5*x7 + -x2^4*x3*x4^2*x6^5*x8^2*x9 + x2^4*x3*x4^2*x6^5*x8^2 + 2*x2^4*x3*x4^2*x6^5*x8*x9 + -2*x2^4*x3*x4^2*x6^5*x8 + -x2^4*x3*x4^2*x6^5*x9 + x2^4*x3*x4^2*x6^5 + x2^4*x3*x4^2*x6*x7*x8*x9^2 + -x2^4*x3*x4^2*x6*x7*x8*x9 + -x2^4*x3*x4^2*x6*x7*x9^2 + x2^4*x3*x4^2*x6*x7*x9 + -x2^4*x3*x4^2*x6*x8*x9^2 + x2^4*x3*x4^2*x6*x8*x9 + x2^4*x3*x4^2*x6*x9^2 + -x2^4*x3*x4^2*x6*x9 + -x2^4*x3*x4^2*x7*x8*x9^2 + x2^4*x3*x4^2*x7*x8*x9 + x2^4*x3*x4^2*x7*x9^2 + -x2^4*x3*x4^2*x7*x9 + x2^4*x3*x4^2*x8*x9^2 + -x2^4*x3*x4^2*x8*x9 + -x2^4*x3*x4^2*x9^2 + x2^4*x3*x4^2*x9 + x2^4*x3*x4*x5^4*x6*x7^2*x8*x9 + -x2^4*x3*x4*x5^4*x6*x7^2*x8 + -x2^4*x3*x4*x5^4*x6*x7^2*x9 + x2^4*x3*x4*x5^4*x6*x7^2 + x2^4*x3*x4*x5^4*x6*x7*x8*x9^2 + -x2^4*x3*x4*x5^4*x6*x7*x8*x9 + -x2^4*x3*x4*x5^4*x6*x7*x9^2 + x2^4*x3*x4*x5^4*x6*x7*x9 + -x2^4*x3*x4*x5^4*x6*x8*x9^2 + x2^4*x3*x4*x5^4*x6*x8 + x2^4*x3*x4*x5^4*x6*x9^2 + -x2^4*x3*x4*x5^4*x6 + -x2^4*x3*x4*x5^4*x7^2*x8*x9 + x2^4*x3*x4*x5^4*x7^2*x8 + x2^4*x3*x4*x5^4*x7^2*x9 + -x2^4*x3*x4*x5^4*x7^2 + -x2^4*x3*x4*x5^4*x7*x8*x9^2 + x2^4*x3*x4*x5^4*x7*x8*x9 + x2^4*x3*x4*x5^4*x7*x9^2 + -x2^4*x3*x4*x5^4*x7*x9 + x2^4*x3*x4*x5^4*x8*x9^2 + -x2^4*x3*x4*x5^4*x8 + -x2^4*x3*x4*x5^4*x9^2 + x2^4*x3*x4*x5^4 + x2^4*x3*x4*x5^3*x6^2*x7^2*x8*x9 + -x2^4*x3*x4*x5^3*x6^2*x7^2*x8 + -x2^4*x3*x4*x5^3*x6^2*x7^2*x9 + x2^4*x3*x4*x5^3*x6^2*x7^2 + -x2^4*x3*x4*x5^3*x6^2*x7*x8*x9 + x2^4*x3*x4*x5^3*x6^2*x7*x8 + x2^4*x3*x4*x5^3*x6^2*x7*x9 + -x2^4*x3*x4*x5^3*x6^2*x7 + -2*x2^4*x3*x4*x5^3*x6*x7^2*x8*x9 + 2*x2^4*x3*x4*x5^3*x6*x7^2*x8 + 2*x2^4*x3*x4*x5^3*x6*x7^2*x9 + -2*x2^4*x3*x4*x5^3*x6*x7^2 + -x2^4*x3*x4*x5^3*x6*x7*x8*x9^2 + 2*x2^4*x3*x4*x5^3*x6*x7*x8*x9 + -x2^4*x3*x4*x5^3*x6*x7*x8 + x2^4*x3*x4*x5^3*x6*x7*x9^2 + -2*x2^4*x3*x4*x5^3*x6*x7*x9 + x2^4*x3*x4*x5^3*x6*x7 + x2^4*x3*x4*x5^3*x6*x8*x9^2 + -x2^4*x3*x4*x5^3*x6*x8 + -x2^4*x3*x4*x5^3*x6*x9^2 + x2^4*x3*x4*x5^3*x6 + x2^4*x3*x4*x5^3*x7^2*x8*x9 + -x2^4*x3*x4*x5^3*x7^2*x8 + -x2^4*x3*x4*x5^3*x7^2*x9 + x2^4*x3*x4*x5^3*x7^2 + x2^4*x3*x4*x5^3*x7*x8*x9^2 + -x2^4*x3*x4*x5^3*x7*x8*x9 + -x2^4*x3*x4*x5^3*x7*x9^2 + x2^4*x3*x4*x5^3*x7*x9 + -x2^4*x3*x4*x5^3*x8*x9^2 + x2^4*x3*x4*x5^3*x8 + x2^4*x3*x4*x5^3*x9^2 + -x2^4*x3*x4*x5^3 + -x2^4*x3*x4*x5^2*x6^2*x7^2*x8*x9 + x2^4*x3*x4*x5^2*x6^2*x7^2*x8 + x2^4*x3*x4*x5^2*x6^2*x7^2*x9 + -x2^4*x3*x4*x5^2*x6^2*x7^2 + x2^4*x3*x4*x5^2*x6^2*x7*x8*x9 + -x2^4*x3*x4*x5^2*x6^2*x7*x8 + -x2^4*x3*x4*x5^2*x6^2*x7*x9 + x2^4*x3*x4*x5^2*x6^2*x7 + x2^4*x3*x4*x5^2*x6*x7^2*x8*x9^2 + -x2^4*x3*x4*x5^2*x6*x7^2*x8 + -x2^4*x3*x4*x5^2*x6*x7^2*x9^2 + x2^4*x3*x4*x5^2*x6*x7^2 + -x2^4*x3*x4*x5^2*x6*x7*x8*x9^2 + x2^4*x3*x4*x5^2*x6*x7*x8 + x2^4*x3*x4*x5^2*x6*x7*x9^2 + -x2^4*x3*x4*x5^2*x6*x7 + -x2^4*x3*x4*x5^2*x7^2*x8*x9^2 + x2^4*x3*x4*x5^2*x7^2*x8*x9 + x2^4*x3*x4*x5^2*x7^2*x9^2 + -x2^4*x3*x4*x5^2*x7^2*x9 + x2^4*x3*x4*x5^2*x7*x8*x9^2 + -x2^4*x3*x4*x5^2*x7*x8*x9 + -x2^4*x3*x4*x5^2*x7*x9^2 + x2^4*x3*x4*x5^2*x7*x9 + x2^4*x3*x4*x5*x6^5*x7^2*x8^2*x9 + -x2^4*x3*x4*x5*x6^5*x7^2*x8^2 + -x2^4*x3*x4*x5*x6^5*x7^2*x8*x9 + x2^4*x3*x4*x5*x6^5*x7^2*x8 + -x2^4*x3*x4*x5*x6^5*x7*x8^2*x9 + x2^4*x3*x4*x5*x6^5*x7*x8^2 + x2^4*x3*x4*x5*x6^5*x7*x8*x9 + -x2^4*x3*x4*x5*x6^5*x7*x8 + -x2^4*x3*x4*x5*x6^4*x7^2*x8^2*x9 + x2^4*x3*x4*x5*x6^4*x7^2*x8^2 + x2^4*x3*x4*x5*x6^4*x7^2*x8*x9 + -x2^4*x3*x4*x5*x6^4*x7^2*x8 + x2^4*x3*x4*x5*x6^4*x7*x8^2*x9 + -x2^4*x3*x4*x5*x6^4*x7*x8^2 + -x2^4*x3*x4*x5*x6^4*x7*x8*x9 + x2^4*x3*x4*x5*x6^4*x7*x8 + x2^4*x3*x4*x5*x6*x7^2*x8^2*x9^2 + -x2^4*x3*x4*x5*x6*x7^2*x8^2*x9 + -x2^4*x3*x4*x5*x6*x7^2*x8*x9^2 + x2^4*x3*x4*x5*x6*x7^2*x8*x9 + -x2^4*x3*x4*x5*x6*x7*x8^2*x9^2 + x2^4*x3*x4*x5*x6*x7*x8^2*x9 + x2^4*x3*x4*x5*x6*x7*x8*x9^2 + -x2^4*x3*x4*x5*x6*x7*x8*x9 + -x2^4*x3*x4*x5*x7^2*x8^2*x9^2 + x2^4*x3*x4*x5*x7^2*x8^2*x9 + x2^4*x3*x4*x5*x7^2*x8*x9^2 + -x2^4*x3*x4*x5*x7^2*x8*x9 + x2^4*x3*x4*x5*x7*x8^2*x9^2 + -x2^4*x3*x4*x5*x7*x8^2*x9 + -x2^4*x3*x4*x5*x7*x8*x9^2 + x2^4*x3*x4*x5*x7*x8*x9 + -x2^4*x3*x4*x6^5*x7^2*x8^2*x9 + x2^4*x3*x4*x6^5*x7^2*x8^2 + x2^4*x3*x4*x6^5*x7^2*x8*x9 + -x2^4*x3*x4*x6^5*x7^2*x8 + x2^4*x3*x4*x6^5*x7*x8^2*x9 + -x2^4*x3*x4*x6^5*x7*x8^2 + -x2^4*x3*x4*x6^5*x7*x8*x9 + x2^4*x3*x4*x6^5*x7*x8 + x2^4*x3*x4*x6^4*x7^2*x8^2*x9 + -x2^4*x3*x4*x6^4*x7^2*x8^2 + -x2^4*x3*x4*x6^4*x7^2*x8*x9 + x2^4*x3*x4*x6^4*x7^2*x8 + -x2^4*x3*x4*x6^4*x7*x8^2*x9 + x2^4*x3*x4*x6^4*x7*x8^2 + x2^4*x3*x4*x6^4*x7*x8*x9 + -x2^4*x3*x4*x6^4*x7*x8 + -x2^4*x3*x4*x6*x7^2*x8^2*x9^2 + x2^4*x3*x4*x6*x7^2*x8^2*x9 + x2^4*x3*x4*x6*x7^2*x9^2 + -x2^4*x3*x4*x6*x7^2*x9 + x2^4*x3*x4*x6*x7*x8^2*x9^2 + -x2^4*x3*x4*x6*x7*x8^2*x9 + -x2^4*x3*x4*x6*x7*x9^2 + x2^4*x3*x4*x6*x7*x9 + x2^4*x3*x4*x7^2*x8^2*x9^2 + -x2^4*x3*x4*x7^2*x8^2*x9 + -x2^4*x3*x4*x7^2*x9^2 + x2^4*x3*x4*x7^2*x9 + -x2^4*x3*x4*x7*x8^2*x9^2 + x2^4*x3*x4*x7*x8^2*x9 + x2^4*x3*x4*x7*x9^2 + -x2^4*x3*x4*x7*x9 + -x2^4*x3*x5^4*x6*x7^2*x8*x9 + x2^4*x3*x5^4*x6*x7^2*x8 + x2^4*x3*x5^4*x6*x7^2*x9 + -x2^4*x3*x5^4*x6*x7^2 + -x2^4*x3*x5^4*x6*x7*x8*x9^2 + x2^4*x3*x5^4*x6*x7*x8*x9 + x2^4*x3*x5^4*x6*x7*x9^2 + -x2^4*x3*x5^4*x6*x7*x9 + x2^4*x3*x5^4*x6*x8*x9^2 + -x2^4*x3*x5^4*x6*x8 + -x2^4*x3*x5^4*x6*x9^2 + x2^4*x3*x5^4*x6 + x2^4*x3*x5^4*x7^2*x8*x9 + -x2^4*x3*x5^4*x7^2*x8 + -x2^4*x3*x5^4*x7^2*x9 + x2^4*x3*x5^4*x7^2 + x2^4*x3*x5^4*x7*x8*x9^2 + -x2^4*x3*x5^4*x7*x8*x9 + -x2^4*x3*x5^4*x7*x9^2 + x2^4*x3*x5^4*x7*x9 + -x2^4*x3*x5^4*x8*x9^2 + x2^4*x3*x5^4*x8 + x2^4*x3*x5^4*x9^2 + -x2^4*x3*x5^4 + -x2^4*x3*x5^3*x6^2*x7^2*x8*x9 + x2^4*x3*x5^3*x6^2*x7^2*x8 + x2^4*x3*x5^3*x6^2*x7^2*x9 + -x2^4*x3*x5^3*x6^2*x7^2 + x2^4*x3*x5^3*x6^2*x8*x9 + -x2^4*x3*x5^3*x6^2*x8 + -x2^4*x3*x5^3*x6^2*x9 + x2^4*x3*x5^3*x6^2 + x2^4*x3*x5^3*x6*x7^2*x8*x9 + -x2^4*x3*x5^3*x6*x7^2*x8 + -x2^4*x3*x5^3*x6*x7^2*x9 + x2^4*x3*x5^3*x6*x7^2 + x2^4*x3*x5^3*x6*x7*x8*x9^2 + -x2^4*x3*x5^3*x6*x7*x8 + -x2^4*x3*x5^3*x6*x7*x9^2 + x2^4*x3*x5^3*x6*x7 + -x2^4*x3*x5^3*x6*x8*x9^2 + -x2^4*x3*x5^3*x6*x8*x9 + 2*x2^4*x3*x5^3*x6*x8 + x2^4*x3*x5^3*x6*x9^2 + x2^4*x3*x5^3*x6*x9 + -2*x2^4*x3*x5^3*x6 + -x2^4*x3*x5^3*x7*x8*x9^2 + x2^4*x3*x5^3*x7*x8 + x2^4*x3*x5^3*x7*x9^2 + -x2^4*x3*x5^3*x7 + x2^4*x3*x5^3*x8*x9^2 + -x2^4*x3*x5^3*x8 + -x2^4*x3*x5^3*x9^2 + x2^4*x3*x5^3 + -x2^4*x3*x5^2*x6^4*x7*x8*x9 + x2^4*x3*x5^2*x6^4*x7*x8 + x2^4*x3*x5^2*x6^4*x7*x9 + -x2^4*x3*x5^2*x6^4*x7 + x2^4*x3*x5^2*x6^4*x8*x9 + -x2^4*x3*x5^2*x6^4*x8 + -x2^4*x3*x5^2*x6^4*x9 + x2^4*x3*x5^2*x6^4 + -x2^4*x3*x5^2*x6^3*x7^2*x8*x9 + x2^4*x3*x5^2*x6^3*x7^2*x8 + x2^4*x3*x5^2*x6^3*x7^2*x9 + -x2^4*x3*x5^2*x6^3*x7^2 + x2^4*x3*x5^2*x6^3*x7*x8*x9 + -x2^4*x3*x5^2*x6^3*x7*x8 + -x2^4*x3*x5^2*x6^3*x7*x9 + x2^4*x3*x5^2*x6^3*x7 + x2^4*x3*x5^2*x6^2*x7^2*x8*x9 + -x2^4*x3*x5^2*x6^2*x7^2*x8 + -x2^4*x3*x5^2*x6^2*x7^2*x9 + x2^4*x3*x5^2*x6^2*x7^2 + x2^4*x3*x5^2*x6^2*x7*x8*x9 + -x2^4*x3*x5^2*x6^2*x7*x8 + -x2^4*x3*x5^2*x6^2*x7*x9 + x2^4*x3*x5^2*x6^2*x7 + -2*x2^4*x3*x5^2*x6^2*x8*x9 + 2*x2^4*x3*x5^2*x6^2*x8 + 2*x2^4*x3*x5^2*x6^2*x9 + -2*x2^4*x3*x5^2*x6^2 + -x2^4*x3*x5^2*x6*x7^2*x8*x9^2 + x2^4*x3*x5^2*x6*x7^2*x8*x9 + x2^4*x3*x5^2*x6*x7^2*x9^2 + -x2^4*x3*x5^2*x6*x7^2*x9 + x2^4*x3*x5^2*x6*x7*x8*x9^2 + -2*x2^4*x3*x5^2*x6*x7*x8*x9 + x2^4*x3*x5^2*x6*x7*x8 + -x2^4*x3*x5^2*x6*x7*x9^2 + 2*x2^4*x3*x5^2*x6*x7*x9 + -x2^4*x3*x5^2*x6*x7 + x2^4*x3*x5^2*x6*x8*x9 + -x2^4*x3*x5^2*x6*x8 + -x2^4*x3*x5^2*x6*x9 + x2^4*x3*x5^2*x6 + x2^4*x3*x5^2*x7^2*x8*x9^2 + -x2^4*x3*x5^2*x7^2*x8*x9 + -x2^4*x3*x5^2*x7^2*x9^2 + x2^4*x3*x5^2*x7^2*x9 + -x2^4*x3*x5^2*x7*x8*x9^2 + x2^4*x3*x5^2*x7*x8*x9 + x2^4*x3*x5^2*x7*x9^2 + -x2^4*x3*x5^2*x7*x9 + -x2^4*x3*x5*x6^6*x7*x8^2*x9 + x2^4*x3*x5*x6^6*x7*x8^2 + x2^4*x3*x5*x6^6*x7*x8*x9 + -x2^4*x3*x5*x6^6*x7*x8 + x2^4*x3*x5*x6^6*x8^2*x9 + -x2^4*x3*x5*x6^6*x8^2 + -x2^4*x3*x5*x6^6*x8*x9 + x2^4*x3*x5*x6^6*x8 + -x2^4*x3*x5*x6^5*x7^2*x8^2*x9 + x2^4*x3*x5*x6^5*x7^2*x8^2 + x2^4*x3*x5*x6^5*x7^2*x8*x9 + -x2^4*x3*x5*x6^5*x7^2*x8 + 2*x2^4*x3*x5*x6^5*x7*x8^2*x9 + -2*x2^4*x3*x5*x6^5*x7*x8^2 + -2*x2^4*x3*x5*x6^5*x7*x8*x9 + 2*x2^4*x3*x5*x6^5*x7*x8 + -x2^4*x3*x5*x6^5*x8^2*x9 + x2^4*x3*x5*x6^5*x8^2 + x2^4*x3*x5*x6^5*x8*x9 + -x2^4*x3*x5*x6^5*x8 + x2^4*x3*x5*x6^4*x7^2*x8^2*x9 + -x2^4*x3*x5*x6^4*x7^2*x8^2 + -x2^4*x3*x5*x6^4*x7^2*x8*x9 + x2^4*x3*x5*x6^4*x7^2*x8 + -x2^4*x3*x5*x6^4*x7*x8^2*x9 + x2^4*x3*x5*x6^4*x7*x8^2 + 2*x2^4*x3*x5*x6^4*x7*x8*x9 + -2*x2^4*x3*x5*x6^4*x7*x8 + -x2^4*x3*x5*x6^4*x7*x9 + x2^4*x3*x5*x6^4*x7 + -x2^4*x3*x5*x6^4*x8*x9 + x2^4*x3*x5*x6^4*x8 + x2^4*x3*x5*x6^4*x9 + -x2^4*x3*x5*x6^4 + x2^4*x3*x5*x6^3*x7^2*x8*x9 + -x2^4*x3*x5*x6^3*x7^2*x8 + -x2^4*x3*x5*x6^3*x7^2*x9 + x2^4*x3*x5*x6^3*x7^2 + -x2^4*x3*x5*x6^3*x8*x9 + x2^4*x3*x5*x6^3*x8 + x2^4*x3*x5*x6^3*x9 + -x2^4*x3*x5*x6^3 + -x2^4*x3*x5*x6^2*x7*x8*x9 + x2^4*x3*x5*x6^2*x7*x8 + x2^4*x3*x5*x6^2*x7*x9 + -x2^4*x3*x5*x6^2*x7 + x2^4*x3*x5*x6^2*x8*x9 + -x2^4*x3*x5*x6^2*x8 + -x2^4*x3*x5*x6^2*x9 + x2^4*x3*x5*x6^2 + -x2^4*x3*x5*x6*x7^2*x8^2*x9^2 + x2^4*x3*x5*x6*x7^2*x8^2*x9 + x2^4*x3*x5*x6*x7^2*x8*x9^2 + -x2^4*x3*x5*x6*x7^2*x8*x9 + x2^4*x3*x5*x6*x7*x8^2*x9^2 + -x2^4*x3*x5*x6*x7*x8^2*x9 + -x2^4*x3*x5*x6*x7*x9^2 + x2^4*x3*x5*x6*x7*x9 + -x2^4*x3*x5*x6*x8*x9^2 + x2^4*x3*x5*x6*x8*x9 + x2^4*x3*x5*x6*x9^2 + -x2^4*x3*x5*x6*x9 + x2^4*x3*x5*x7^2*x8^2*x9^2 + -x2^4*x3*x5*x7^2*x8^2*x9 + -x2^4*x3*x5*x7^2*x8*x9^2 + x2^4*x3*x5*x7^2*x8 + x2^4*x3*x5*x7^2*x9 + -x2^4*x3*x5*x7^2 + -x2^4*x3*x5*x7*x8^2*x9^2 + x2^4*x3*x5*x7*x8^2*x9 + x2^4*x3*x5*x7*x9^2 + -x2^4*x3*x5*x7*x9 + x2^4*x3*x5*x8*x9^2 + -x2^4*x3*x5*x8 + -x2^4*x3*x5*x9^2 + x2^4*x3*x5 + x2^4*x3*x6^6*x7*x8^2*x9 + -x2^4*x3*x6^6*x7*x8^2 + -x2^4*x3*x6^6*x7*x8*x9 + x2^4*x3*x6^6*x7*x8 + -x2^4*x3*x6^6*x8^2*x9 + x2^4*x3*x6^6*x8^2 + x2^4*x3*x6^6*x8*x9 + -x2^4*x3*x6^6*x8 + x2^4*x3*x6^5*x7^2*x8^2*x9 + -x2^4*x3*x6^5*x7^2*x8^2 + -x2^4*x3*x6^5*x7^2*x8*x9 + x2^4*x3*x6^5*x7^2*x8 + -2*x2^4*x3*x6^5*x7*x8^2*x9 + 2*x2^4*x3*x6^5*x7*x8^2 + 2*x2^4*x3*x6^5*x7*x8*x9 + -2*x2^4*x3*x6^5*x7*x8 + x2^4*x3*x6^5*x8^2*x9 + -x2^4*x3*x6^5*x8^2 + -x2^4*x3*x6^5*x8*x9 + x2^4*x3*x6^5*x8 + -x2^4*x3*x6^4*x7^2*x8^2*x9 + x2^4*x3*x6^4*x7^2*x8^2 + x2^4*x3*x6^4*x7^2*x8*x9 + -x2^4*x3*x6^4*x7^2*x8 + x2^4*x3*x6^4*x7*x8^2*x9 + -x2^4*x3*x6^4*x7*x8^2 + -x2^4*x3*x6^4*x7*x8*x9 + x2^4*x3*x6^4*x7*x8 + -x2^4*x3*x6^3*x7*x8*x9 + x2^4*x3*x6^3*x7*x8 + x2^4*x3*x6^3*x7*x9 + -x2^4*x3*x6^3*x7 + x2^4*x3*x6^3*x8*x9 + -x2^4*x3*x6^3*x8 + -x2^4*x3*x6^3*x9 + x2^4*x3*x6^3 + x2^4*x3*x6*x7^2*x8^2*x9^2 + -x2^4*x3*x6*x7^2*x8^2*x9 + -x2^4*x3*x6*x7^2*x9^2 + x2^4*x3*x6*x7^2*x9 + -x2^4*x3*x6*x7*x8^2*x9^2 + x2^4*x3*x6*x7*x8^2*x9 + -x2^4*x3*x6*x7*x8*x9^2 + x2^4*x3*x6*x7*x8*x9 + 2*x2^4*x3*x6*x7*x9^2 + -2*x2^4*x3*x6*x7*x9 + x2^4*x3*x6*x8*x9^2 + -x2^4*x3*x6*x8*x9 + -x2^4*x3*x6*x9^2 + x2^4*x3*x6*x9 + -x2^4*x3*x7^2*x8^2*x9^2 + x2^4*x3*x7^2*x8^2*x9 + x2^4*x3*x7^2*x9^2 + -x2^4*x3*x7^2*x9 + x2^4*x3*x7*x8^2*x9^2 + -x2^4*x3*x7*x8^2*x9 + x2^4*x3*x7*x8*x9^2 + -x2^4*x3*x7*x8 + -2*x2^4*x3*x7*x9^2 + x2^4*x3*x7*x9 + x2^4*x3*x7 + -x2^4*x3*x8*x9^2 + x2^4*x3*x8 + x2^4*x3*x9^2 + -x2^4*x3 + -x2^4*x4^7*x5*x6^2*x7*x8*x9 + x2^4*x4^7*x5*x6^2*x7*x8 + x2^4*x4^7*x5*x6^2*x7*x9 + -x2^4*x4^7*x5*x6^2*x7 + x2^4*x4^7*x5*x6^2*x8*x9 + -x2^4*x4^7*x5*x6^2*x8 + -x2^4*x4^7*x5*x6^2*x9 + x2^4*x4^7*x5*x6^2 + -x2^4*x4^7*x5*x6*x7*x8^2*x9^2 + x2^4*x4^7*x5*x6*x7*x8^2 + x2^4*x4^7*x5*x6*x7*x8*x9 + -x2^4*x4^7*x5*x6*x7*x8 + x2^4*x4^7*x5*x6*x7*x9^2 + -x2^4*x4^7*x5*x6*x7*x9 + x2^4*x4^7*x5*x6*x8^2*x9^2 + -x2^4*x4^7*x5*x6*x8^2 + -x2^4*x4^7*x5*x6*x8*x9 + x2^4*x4^7*x5*x6*x8 + -x2^4*x4^7*x5*x6*x9^2 + x2^4*x4^7*x5*x6*x9 + x2^4*x4^7*x5*x7*x8^2*x9^2 + -x2^4*x4^7*x5*x7*x8^2 + -x2^4*x4^7*x5*x7*x9^2 + x2^4*x4^7*x5*x7 + -x2^4*x4^7*x5*x8^2*x9^2 + x2^4*x4^7*x5*x8^2 + x2^4*x4^7*x5*x9^2 + -x2^4*x4^7*x5 + x2^4*x4^7*x6^2*x7*x8*x9 + -x2^4*x4^7*x6^2*x7*x8 + -x2^4*x4^7*x6^2*x7*x9 + x2^4*x4^7*x6^2*x7 + -x2^4*x4^7*x6^2*x8*x9 + x2^4*x4^7*x6^2*x8 + x2^4*x4^7*x6^2*x9 + -x2^4*x4^7*x6^2 + x2^4*x4^7*x6*x7*x8^2*x9^2 + -x2^4*x4^7*x6*x7*x8^2 + -x2^4*x4^7*x6*x7*x8*x9 + x2^4*x4^7*x6*x7*x8 + -x2^4*x4^7*x6*x7*x9^2 + x2^4*x4^7*x6*x7*x9 + -x2^4*x4^7*x6*x8^2*x9^2 + x2^4*x4^7*x6*x8^2 + x2^4*x4^7*x6*x8*x9 + -x2^4*x4^7*x6*x8 + x2^4*x4^7*x6*x9^2 + -x2^4*x4^7*x6*x9 + -x2^4*x4^7*x7*x8^2*x9^2 + x2^4*x4^7*x7*x8^2 + x2^4*x4^7*x7*x9^2 + -x2^4*x4^7*x7 + x2^4*x4^7*x8^2*x9^2 + -x2^4*x4^7*x8^2 + -x2^4*x4^7*x9^2 + x2^4*x4^7 + x2^4*x4^6*x5*x6*x7*x8^2*x9^2 + -x2^4*x4^6*x5*x6*x7*x8^2 + -x2^4*x4^6*x5*x6*x7*x9^2 + x2^4*x4^6*x5*x6*x7 + -x2^4*x4^6*x5*x6*x8^2*x9^2 + x2^4*x4^6*x5*x6*x8^2 + x2^4*x4^6*x5*x6*x9^2 + -x2^4*x4^6*x5*x6 + -x2^4*x4^6*x5*x7*x8^2*x9^2 + x2^4*x4^6*x5*x7*x8^2 + x2^4*x4^6*x5*x7*x9^2 + -x2^4*x4^6*x5*x7 + x2^4*x4^6*x5*x8^2*x9^2 + -x2^4*x4^6*x5*x8^2 + -x2^4*x4^6*x5*x9^2 + x2^4*x4^6*x5 + -x2^4*x4^6*x6*x7*x8^2*x9^2 + x2^4*x4^6*x6*x7*x8^2 + x2^4*x4^6*x6*x7*x9^2 + -x2^4*x4^6*x6*x7 + x2^4*x4^6*x6*x8^2*x9^2 + -x2^4*x4^6*x6*x8^2 + -x2^4*x4^6*x6*x9^2 + x2^4*x4^6*x6 + x2^4*x4^6*x7*x8^2*x9^2 + -x2^4*x4^6*x7*x8^2 + -x2^4*x4^6*x7*x9^2 + x2^4*x4^6*x7 + -x2^4*x4^6*x8^2*x9^2 + x2^4*x4^6*x8^2 + x2^4*x4^6*x9^2 + -x2^4*x4^6 + -x2^4*x4^5*x5*x6^4*x7*x8*x9 + x2^4*x4^5*x5*x6^4*x7*x8 + x2^4*x4^5*x5*x6^4*x7*x9 + -x2^4*x4^5*x5*x6^4*x7 + x2^4*x4^5*x5*x6^4*x8*x9 + -x2^4*x4^5*x5*x6^4*x8 + -x2^4*x4^5*x5*x6^4*x9 + x2^4*x4^5*x5*x6^4 + 2*x2^4*x4^5*x5*x6^2*x7*x8*x9 + -2*x2^4*x4^5*x5*x6^2*x7*x8 + -2*x2^4*x4^5*x5*x6^2*x7*x9 + 2*x2^4*x4^5*x5*x6^2*x7 + -2*x2^4*x4^5*x5*x6^2*x8*x9 + 2*x2^4*x4^5*x5*x6^2*x8 + 2*x2^4*x4^5*x5*x6^2*x9 + -2*x2^4*x4^5*x5*x6^2 + -x2^4*x4^5*x5*x6*x7*x8*x9 + x2^4*x4^5*x5*x6*x7*x8 + x2^4*x4^5*x5*x6*x7*x9 + -x2^4*x4^5*x5*x6*x7 + x2^4*x4^5*x5*x6*x8*x9 + -x2^4*x4^5*x5*x6*x8 + -x2^4*x4^5*x5*x6*x9 + x2^4*x4^5*x5*x6 + x2^4*x4^5*x6^4*x7*x8*x9 + -x2^4*x4^5*x6^4*x7*x8 + -x2^4*x4^5*x6^4*x7*x9 + x2^4*x4^5*x6^4*x7 + -x2^4*x4^5*x6^4*x8*x9 + x2^4*x4^5*x6^4*x8 + x2^4*x4^5*x6^4*x9 + -x2^4*x4^5*x6^4 + -2*x2^4*x4^5*x6^2*x7*x8*x9 + 2*x2^4*x4^5*x6^2*x7*x8 + 2*x2^4*x4^5*x6^2*x7*x9 + -2*x2^4*x4^5*x6^2*x7 + 2*x2^4*x4^5*x6^2*x8*x9 + -2*x2^4*x4^5*x6^2*x8 + -2*x2^4*x4^5*x6^2*x9 + 2*x2^4*x4^5*x6^2 + x2^4*x4^5*x6*x7*x8*x9 + -x2^4*x4^5*x6*x7*x8 + -x2^4*x4^5*x6*x7*x9 + x2^4*x4^5*x6*x7 + -x2^4*x4^5*x6*x8*x9 + x2^4*x4^5*x6*x8 + x2^4*x4^5*x6*x9 + -x2^4*x4^5*x6 + x2^4*x4^4*x5*x6^4*x7*x8*x9 + -x2^4*x4^4*x5*x6^4*x7*x8 + -x2^4*x4^4*x5*x6^4*x7*x9 + x2^4*x4^4*x5*x6^4*x7 + -x2^4*x4^4*x5*x6^4*x8*x9 + x2^4*x4^4*x5*x6^4*x8 + x2^4*x4^4*x5*x6^4*x9 + -x2^4*x4^4*x5*x6^4 + -x2^4*x4^4*x5*x6^2*x7*x8*x9 + x2^4*x4^4*x5*x6^2*x7*x8 + x2^4*x4^4*x5*x6^2*x7*x9 + -x2^4*x4^4*x5*x6^2*x7 + x2^4*x4^4*x5*x6^2*x8*x9 + -x2^4*x4^4*x5*x6^2*x8 + -x2^4*x4^4*x5*x6^2*x9 + x2^4*x4^4*x5*x6^2 + -x2^4*x4^4*x6^4*x7*x8*x9 + x2^4*x4^4*x6^4*x7*x8 + x2^4*x4^4*x6^4*x7*x9 + -x2^4*x4^4*x6^4*x7 + x2^4*x4^4*x6^4*x8*x9 + -x2^4*x4^4*x6^4*x8 + -x2^4*x4^4*x6^4*x9 + x2^4*x4^4*x6^4 + x2^4*x4^4*x6^2*x7*x8*x9 + -x2^4*x4^4*x6^2*x7*x8 + -x2^4*x4^4*x6^2*x7*x9 + x2^4*x4^4*x6^2*x7 + -x2^4*x4^4*x6^2*x8*x9 + x2^4*x4^4*x6^2*x8 + x2^4*x4^4*x6^2*x9 + -x2^4*x4^4*x6^2 + -x2^4*x4^3*x5^3*x6^2*x7*x8*x9 + x2^4*x4^3*x5^3*x6^2*x7*x8 + x2^4*x4^3*x5^3*x6^2*x7*x9 + -x2^4*x4^3*x5^3*x6^2*x7 + x2^4*x4^3*x5^3*x6^2*x8*x9 + -x2^4*x4^3*x5^3*x6^2*x8 + -x2^4*x4^3*x5^3*x6^2*x9 + x2^4*x4^3*x5^3*x6^2 + -x2^4*x4^3*x5^3*x6*x7^2*x8*x9 + x2^4*x4^3*x5^3*x6*x7^2*x8 + x2^4*x4^3*x5^3*x6*x7^2*x9 + -x2^4*x4^3*x5^3*x6*x7^2 + x2^4*x4^3*x5^3*x6*x7*x8*x9 + -x2^4*x4^3*x5^3*x6*x7*x8 + -x2^4*x4^3*x5^3*x6*x7*x9 + x2^4*x4^3*x5^3*x6*x7 + x2^4*x4^3*x5^3*x7^2*x8*x9 + -x2^4*x4^3*x5^3*x7^2*x8 + -x2^4*x4^3*x5^3*x7^2*x9 + x2^4*x4^3*x5^3*x7^2 + -x2^4*x4^3*x5^3*x8*x9 + x2^4*x4^3*x5^3*x8 + x2^4*x4^3*x5^3*x9 + -x2^4*x4^3*x5^3 + -x2^4*x4^3*x5^2*x6^4*x7*x8*x9 + x2^4*x4^3*x5^2*x6^4*x7*x8 + x2^4*x4^3*x5^2*x6^4*x7*x9 + -x2^4*x4^3*x5^2*x6^4*x7 + x2^4*x4^3*x5^2*x6^4*x8*x9 + -x2^4*x4^3*x5^2*x6^4*x8 + -x2^4*x4^3*x5^2*x6^4*x9 + x2^4*x4^3*x5^2*x6^4 + -x2^4*x4^3*x5^2*x6^3*x7^2*x8*x9 + x2^4*x4^3*x5^2*x6^3*x7^2*x8 + x2^4*x4^3*x5^2*x6^3*x7^2*x9 + -x2^4*x4^3*x5^2*x6^3*x7^2 + x2^4*x4^3*x5^2*x6^3*x7*x8*x9 + -x2^4*x4^3*x5^2*x6^3*x7*x8 + -x2^4*x4^3*x5^2*x6^3*x7*x9 + x2^4*x4^3*x5^2*x6^3*x7 + x2^4*x4^3*x5^2*x6^2*x7*x8*x9 + -x2^4*x4^3*x5^2*x6^2*x7*x8 + -x2^4*x4^3*x5^2*x6^2*x7*x9 + x2^4*x4^3*x5^2*x6^2*x7 + -x2^4*x4^3*x5^2*x6^2*x8*x9 + x2^4*x4^3*x5^2*x6^2*x8 + x2^4*x4^3*x5^2*x6^2*x9 + -x2^4*x4^3*x5^2*x6^2 + x2^4*x4^3*x5^2*x6*x7^2*x8*x9 + -x2^4*x4^3*x5^2*x6*x7^2*x8 + -x2^4*x4^3*x5^2*x6*x7^2*x9 + x2^4*x4^3*x5^2*x6*x7^2 + -x2^4*x4^3*x5^2*x6*x7*x8*x9 + x2^4*x4^3*x5^2*x6*x7*x8 + x2^4*x4^3*x5^2*x6*x7*x9 + -x2^4*x4^3*x5^2*x6*x7 + -x2^4*x4^3*x5*x6^6*x7*x8*x9 + x2^4*x4^3*x5*x6^6*x7*x8 + x2^4*x4^3*x5*x6^6*x7*x9 + -x2^4*x4^3*x5*x6^6*x7 + x2^4*x4^3*x5*x6^6*x8*x9 + -x2^4*x4^3*x5*x6^6*x8 + -x2^4*x4^3*x5*x6^6*x9 + x2^4*x4^3*x5*x6^6 + x2^4*x4^3*x5*x6^5*x7*x8*x9 + -x2^4*x4^3*x5*x6^5*x7*x8 + -x2^4*x4^3*x5*x6^5*x7*x9 + x2^4*x4^3*x5*x6^5*x7 + -x2^4*x4^3*x5*x6^5*x8*x9 + x2^4*x4^3*x5*x6^5*x8 + x2^4*x4^3*x5*x6^5*x9 + -x2^4*x4^3*x5*x6^5 + x2^4*x4^3*x5*x6^4*x7*x8*x9 + -x2^4*x4^3*x5*x6^4*x7*x8 + -x2^4*x4^3*x5*x6^4*x7*x9 + x2^4*x4^3*x5*x6^4*x7 + -x2^4*x4^3*x5*x6^4*x8*x9 + x2^4*x4^3*x5*x6^4*x8 + x2^4*x4^3*x5*x6^4*x9 + -x2^4*x4^3*x5*x6^4 + x2^4*x4^3*x5*x6^3*x7^2*x8*x9 + -x2^4*x4^3*x5*x6^3*x7^2*x8 + -x2^4*x4^3*x5*x6^3*x7^2*x9 + x2^4*x4^3*x5*x6^3*x7^2 + -x2^4*x4^3*x5*x6^3*x7*x8*x9 + x2^4*x4^3*x5*x6^3*x7*x8 + x2^4*x4^3*x5*x6^3*x7*x9 + -x2^4*x4^3*x5*x6^3*x7 + -x2^4*x4^3*x5*x7^2*x8*x9 + x2^4*x4^3*x5*x7^2*x8 + x2^4*x4^3*x5*x7^2*x9 + -x2^4*x4^3*x5*x7^2 + x2^4*x4^3*x5*x8*x9 + -x2^4*x4^3*x5*x8 + -x2^4*x4^3*x5*x9 + x2^4*x4^3*x5 + x2^4*x4^3*x6^6*x7*x8*x9 + -x2^4*x4^3*x6^6*x7*x8 + -x2^4*x4^3*x6^6*x7*x9 + x2^4*x4^3*x6^6*x7 + -x2^4*x4^3*x6^6*x8*x9 + x2^4*x4^3*x6^6*x8 + x2^4*x4^3*x6^6*x9 + -x2^4*x4^3*x6^6 + -x2^4*x4^3*x6^5*x7*x8*x9 + x2^4*x4^3*x6^5*x7*x8 + x2^4*x4^3*x6^5*x7*x9 + -x2^4*x4^3*x6^5*x7 + x2^4*x4^3*x6^5*x8*x9 + -x2^4*x4^3*x6^5*x8 + -x2^4*x4^3*x6^5*x9 + x2^4*x4^3*x6^5 + -x2^4*x4^2*x5*x6^6*x7*x8^2*x9 + x2^4*x4^2*x5*x6^6*x7*x8^2 + 2*x2^4*x4^2*x5*x6^6*x7*x8*x9 + -2*x2^4*x4^2*x5*x6^6*x7*x8 + -x2^4*x4^2*x5*x6^6*x7*x9 + x2^4*x4^2*x5*x6^6*x7 + x2^4*x4^2*x5*x6^6*x8^2*x9 + -x2^4*x4^2*x5*x6^6*x8^2 + -2*x2^4*x4^2*x5*x6^6*x8*x9 + 2*x2^4*x4^2*x5*x6^6*x8 + x2^4*x4^2*x5*x6^6*x9 + -x2^4*x4^2*x5*x6^6 + x2^4*x4^2*x5*x6^5*x7*x8^2*x9 + -x2^4*x4^2*x5*x6^5*x7*x8^2 + -2*x2^4*x4^2*x5*x6^5*x7*x8*x9 + 2*x2^4*x4^2*x5*x6^5*x7*x8 + x2^4*x4^2*x5*x6^5*x7*x9 + -x2^4*x4^2*x5*x6^5*x7 + -x2^4*x4^2*x5*x6^5*x8^2*x9 + x2^4*x4^2*x5*x6^5*x8^2 + 2*x2^4*x4^2*x5*x6^5*x8*x9 + -2*x2^4*x4^2*x5*x6^5*x8 + -x2^4*x4^2*x5*x6^5*x9 + x2^4*x4^2*x5*x6^5 + x2^4*x4^2*x6^6*x7*x8^2*x9 + -x2^4*x4^2*x6^6*x7*x8^2 + -2*x2^4*x4^2*x6^6*x7*x8*x9 + 2*x2^4*x4^2*x6^6*x7*x8 + x2^4*x4^2*x6^6*x7*x9 + -x2^4*x4^2*x6^6*x7 + -x2^4*x4^2*x6^6*x8^2*x9 + x2^4*x4^2*x6^6*x8^2 + 2*x2^4*x4^2*x6^6*x8*x9 + -2*x2^4*x4^2*x6^6*x8 + -x2^4*x4^2*x6^6*x9 + x2^4*x4^2*x6^6 + -x2^4*x4^2*x6^5*x7*x8^2*x9 + x2^4*x4^2*x6^5*x7*x8^2 + 2*x2^4*x4^2*x6^5*x7*x8*x9 + -2*x2^4*x4^2*x6^5*x7*x8 + -x2^4*x4^2*x6^5*x7*x9 + x2^4*x4^2*x6^5*x7 + x2^4*x4^2*x6^5*x8^2*x9 + -x2^4*x4^2*x6^5*x8^2 + -2*x2^4*x4^2*x6^5*x8*x9 + 2*x2^4*x4^2*x6^5*x8 + x2^4*x4^2*x6^5*x9 + -x2^4*x4^2*x6^5 + -x2^4*x4*x5^4*x6*x7^2*x8*x9 + x2^4*x4*x5^4*x6*x7^2*x8 + x2^4*x4*x5^4*x6*x7^2*x9 + -x2^4*x4*x5^4*x6*x7^2 + -x2^4*x4*x5^4*x6*x7*x8*x9^2 + x2^4*x4*x5^4*x6*x7*x8*x9 + x2^4*x4*x5^4*x6*x7*x9^2 + -x2^4*x4*x5^4*x6*x7*x9 + x2^4*x4*x5^4*x6*x8*x9^2 + -x2^4*x4*x5^4*x6*x8 + -x2^4*x4*x5^4*x6*x9^2 + x2^4*x4*x5^4*x6 + x2^4*x4*x5^4*x7^2*x8*x9 + -x2^4*x4*x5^4*x7^2*x8 + -x2^4*x4*x5^4*x7^2*x9 + x2^4*x4*x5^4*x7^2 + x2^4*x4*x5^4*x7*x8*x9^2 + -x2^4*x4*x5^4*x7*x8*x9 + -x2^4*x4*x5^4*x7*x9^2 + x2^4*x4*x5^4*x7*x9 + -x2^4*x4*x5^4*x8*x9^2 + x2^4*x4*x5^4*x8 + x2^4*x4*x5^4*x9^2 + -x2^4*x4*x5^4 + -x2^4*x4*x5^3*x6^2*x7^2*x8*x9 + x2^4*x4*x5^3*x6^2*x7^2*x8 + x2^4*x4*x5^3*x6^2*x7^2*x9 + -x2^4*x4*x5^3*x6^2*x7^2 + x2^4*x4*x5^3*x6^2*x7*x8*x9 + -x2^4*x4*x5^3*x6^2*x7*x8 + -x2^4*x4*x5^3*x6^2*x7*x9 + x2^4*x4*x5^3*x6^2*x7 + 2*x2^4*x4*x5^3*x6*x7^2*x8*x9 + -2*x2^4*x4*x5^3*x6*x7^2*x8 + -2*x2^4*x4*x5^3*x6*x7^2*x9 + 2*x2^4*x4*x5^3*x6*x7^2 + -x2^4*x4*x5^3*x6*x7*x8*x9 + x2^4*x4*x5^3*x6*x7*x8 + x2^4*x4*x5^3*x6*x7*x9 + -x2^4*x4*x5^3*x6*x7 + -x2^4*x4*x5^3*x6*x8*x9 + x2^4*x4*x5^3*x6*x8 + x2^4*x4*x5^3*x6*x9 + -x2^4*x4*x5^3*x6 + -x2^4*x4*x5^3*x7^2*x8*x9 + x2^4*x4*x5^3*x7^2*x8 + x2^4*x4*x5^3*x7^2*x9 + -x2^4*x4*x5^3*x7^2 + x2^4*x4*x5^3*x8*x9 + -x2^4*x4*x5^3*x8 + -x2^4*x4*x5^3*x9 + x2^4*x4*x5^3 + x2^4*x4*x5^2*x6^2*x7^2*x8*x9 + -x2^4*x4*x5^2*x6^2*x7^2*x8 + -x2^4*x4*x5^2*x6^2*x7^2*x9 + x2^4*x4*x5^2*x6^2*x7^2 + -x2^4*x4*x5^2*x6^2*x7*x8*x9 + x2^4*x4*x5^2*x6^2*x7*x8 + x2^4*x4*x5^2*x6^2*x7*x9 + -x2^4*x4*x5^2*x6^2*x7 + -x2^4*x4*x5^2*x6*x7^2*x8*x9^2 + x2^4*x4*x5^2*x6*x7^2*x8 + x2^4*x4*x5^2*x6*x7^2*x9^2 + -x2^4*x4*x5^2*x6*x7^2 + x2^4*x4*x5^2*x6*x7*x8*x9^2 + -x2^4*x4*x5^2*x6*x7*x8 + -x2^4*x4*x5^2*x6*x7*x9^2 + x2^4*x4*x5^2*x6*x7 + x2^4*x4*x5^2*x7^2*x8*x9^2 + -x2^4*x4*x5^2*x7^2*x8*x9 + -x2^4*x4*x5^2*x7^2*x9^2 + x2^4*x4*x5^2*x7^2*x9 + -x2^4*x4*x5^2*x7*x8*x9^2 + x2^4*x4*x5^2*x7*x8*x9 + x2^4*x4*x5^2*x7*x9^2 + -x2^4*x4*x5^2*x7*x9 + -x2^4*x4*x5*x6^5*x7^2*x8^2*x9 + x2^4*x4*x5*x6^5*x7^2*x8^2 + x2^4*x4*x5*x6^5*x7^2*x8*x9 + -x2^4*x4*x5*x6^5*x7^2*x8 + x2^4*x4*x5*x6^5*x7*x8^2*x9 + -x2^4*x4*x5*x6^5*x7*x8^2 + -x2^4*x4*x5*x6^5*x7*x8*x9 + x2^4*x4*x5*x6^5*x7*x8 + x2^4*x4*x5*x6^4*x7^2*x8^2*x9 + -x2^4*x4*x5*x6^4*x7^2*x8^2 + -x2^4*x4*x5*x6^4*x7^2*x8*x9 + x2^4*x4*x5*x6^4*x7^2*x8 + -x2^4*x4*x5*x6^4*x7*x8^2*x9 + x2^4*x4*x5*x6^4*x7*x8^2 + x2^4*x4*x5*x6^4*x7*x8*x9 + -x2^4*x4*x5*x6^4*x7*x8 + -x2^4*x4*x5*x6*x7^2*x8^2*x9^2 + x2^4*x4*x5*x6*x7^2*x8^2*x9 + x2^4*x4*x5*x6*x7^2*x8*x9^2 + -x2^4*x4*x5*x6*x7^2*x8*x9 + x2^4*x4*x5*x6*x7*x8^2*x9^2 + -x2^4*x4*x5*x6*x7*x8^2*x9 + -x2^4*x4*x5*x6*x7*x9^2 + x2^4*x4*x5*x6*x7*x9 + -x2^4*x4*x5*x6*x8*x9^2 + x2^4*x4*x5*x6*x8*x9 + x2^4*x4*x5*x6*x9^2 + -x2^4*x4*x5*x6*x9 + x2^4*x4*x5*x7^2*x8^2*x9^2 + -x2^4*x4*x5*x7^2*x8^2*x9 + -x2^4*x4*x5*x7^2*x8*x9^2 + x2^4*x4*x5*x7^2*x8*x9 + -x2^4*x4*x5*x7*x8^2*x9^2 + x2^4*x4*x5*x7*x8^2*x9 + x2^4*x4*x5*x7*x9^2 + -x2^4*x4*x5*x7*x9 + x2^4*x4*x5*x8*x9^2 + -x2^4*x4*x5*x8*x9 + -x2^4*x4*x5*x9^2 + x2^4*x4*x5*x9 + x2^4*x4*x6^5*x7^2*x8^2*x9 + -x2^4*x4*x6^5*x7^2*x8^2 + -x2^4*x4*x6^5*x7^2*x8*x9 + x2^4*x4*x6^5*x7^2*x8 + -x2^4*x4*x6^5*x7*x8^2*x9 + x2^4*x4*x6^5*x7*x8^2 + x2^4*x4*x6^5*x7*x8*x9 + -x2^4*x4*x6^5*x7*x8 + -x2^4*x4*x6^4*x7^2*x8^2*x9 + x2^4*x4*x6^4*x7^2*x8^2 + x2^4*x4*x6^4*x7^2*x8*x9 + -x2^4*x4*x6^4*x7^2*x8 + x2^4*x4*x6^4*x7*x8^2*x9 + -x2^4*x4*x6^4*x7*x8^2 + -x2^4*x4*x6^4*x7*x8*x9 + x2^4*x4*x6^4*x7*x8 + x2^4*x4*x6*x7^2*x8^2*x9^2 + -x2^4*x4*x6*x7^2*x8^2*x9 + -x2^4*x4*x6*x7^2*x9^2 + x2^4*x4*x6*x7^2*x9 + -x2^4*x4*x6*x7*x8^2*x9^2 + x2^4*x4*x6*x7*x8^2*x9 + x2^4*x4*x6*x7*x9^2 + -x2^4*x4*x6*x7*x9 + -x2^4*x4*x7^2*x8^2*x9^2 + x2^4*x4*x7^2*x8^2*x9 + x2^4*x4*x7^2*x9^2 + -x2^4*x4*x7^2*x9 + x2^4*x4*x7*x8^2*x9^2 + -x2^4*x4*x7*x8^2*x9 + -x2^4*x4*x7*x9^2 + x2^4*x4*x7*x9 + x2^4*x5^4*x6*x7^2*x8*x9 + -x2^4*x5^4*x6*x7^2*x8 + -x2^4*x5^4*x6*x7^2*x9 + x2^4*x5^4*x6*x7^2 + x2^4*x5^4*x6*x7*x8*x9^2 + -x2^4*x5^4*x6*x7*x8*x9 + -x2^4*x5^4*x6*x7*x9^2 + x2^4*x5^4*x6*x7*x9 + -x2^4*x5^4*x6*x8*x9^2 + x2^4*x5^4*x6*x8 + x2^4*x5^4*x6*x9^2 + -x2^4*x5^4*x6 + -x2^4*x5^4*x7^2*x8*x9 + x2^4*x5^4*x7^2*x8 + x2^4*x5^4*x7^2*x9 + -x2^4*x5^4*x7^2 + -x2^4*x5^4*x7*x8*x9^2 + x2^4*x5^4*x7*x8*x9 + x2^4*x5^4*x7*x9^2 + -x2^4*x5^4*x7*x9 + x2^4*x5^4*x8*x9^2 + -x2^4*x5^4*x8 + -x2^4*x5^4*x9^2 + x2^4*x5^4 + x2^4*x5^3*x6^2*x7^2*x8*x9 + -x2^4*x5^3*x6^2*x7^2*x8 + -x2^4*x5^3*x6^2*x7^2*x9 + x2^4*x5^3*x6^2*x7^2 + -x2^4*x5^3*x6^2*x8*x9 + x2^4*x5^3*x6^2*x8 + x2^4*x5^3*x6^2*x9 + -x2^4*x5^3*x6^2 + -x2^4*x5^3*x6*x7^2*x8*x9 + x2^4*x5^3*x6*x7^2*x8 + x2^4*x5^3*x6*x7^2*x9 + -x2^4*x5^3*x6*x7^2 + x2^4*x5^3*x6*x8*x9 + -x2^4*x5^3*x6*x8 + -x2^4*x5^3*x6*x9 + x2^4*x5^3*x6 + x2^4*x5^2*x6^4*x7*x8*x9 + -x2^4*x5^2*x6^4*x7*x8 + -x2^4*x5^2*x6^4*x7*x9 + x2^4*x5^2*x6^4*x7 + -x2^4*x5^2*x6^4*x8*x9 + x2^4*x5^2*x6^4*x8 + x2^4*x5^2*x6^4*x9 + -x2^4*x5^2*x6^4 + x2^4*x5^2*x6^3*x7^2*x8*x9 + -x2^4*x5^2*x6^3*x7^2*x8 + -x2^4*x5^2*x6^3*x7^2*x9 + x2^4*x5^2*x6^3*x7^2 + -x2^4*x5^2*x6^3*x7*x8*x9 + x2^4*x5^2*x6^3*x7*x8 + x2^4*x5^2*x6^3*x7*x9 + -x2^4*x5^2*x6^3*x7 + -x2^4*x5^2*x6^2*x7^2*x8*x9 + x2^4*x5^2*x6^2*x7^2*x8 + x2^4*x5^2*x6^2*x7^2*x9 + -x2^4*x5^2*x6^2*x7^2 + x2^4*x5^2*x6^2*x8*x9 + -x2^4*x5^2*x6^2*x8 + -x2^4*x5^2*x6^2*x9 + x2^4*x5^2*x6^2 + x2^4*x5^2*x6*x7^2*x8*x9^2 + -x2^4*x5^2*x6*x7^2*x8*x9 + -x2^4*x5^2*x6*x7^2*x9^2 + x2^4*x5^2*x6*x7^2*x9 + -x2^4*x5^2*x6*x7*x8*x9^2 + x2^4*x5^2*x6*x7*x8*x9 + x2^4*x5^2*x6*x7*x9^2 + -x2^4*x5^2*x6*x7*x9 + -x2^4*x5^2*x7^2*x8*x9^2 + x2^4*x5^2*x7^2*x8*x9 + x2^4*x5^2*x7^2*x9^2 + -x2^4*x5^2*x7^2*x9 + x2^4*x5^2*x7*x8*x9^2 + -x2^4*x5^2*x7*x8*x9 + -x2^4*x5^2*x7*x9^2 + x2^4*x5^2*x7*x9 + x2^4*x5*x6^6*x7*x8^2*x9 + -x2^4*x5*x6^6*x7*x8^2 + -x2^4*x5*x6^6*x7*x8*x9 + x2^4*x5*x6^6*x7*x8 + -x2^4*x5*x6^6*x8^2*x9 + x2^4*x5*x6^6*x8^2 + x2^4*x5*x6^6*x8*x9 + -x2^4*x5*x6^6*x8 + x2^4*x5*x6^5*x7^2*x8^2*x9 + -x2^4*x5*x6^5*x7^2*x8^2 + -x2^4*x5*x6^5*x7^2*x8*x9 + x2^4*x5*x6^5*x7^2*x8 + -2*x2^4*x5*x6^5*x7*x8^2*x9 + 2*x2^4*x5*x6^5*x7*x8^2 + 2*x2^4*x5*x6^5*x7*x8*x9 + -2*x2^4*x5*x6^5*x7*x8 + x2^4*x5*x6^5*x8^2*x9 + -x2^4*x5*x6^5*x8^2 + -x2^4*x5*x6^5*x8*x9 + x2^4*x5*x6^5*x8 + -x2^4*x5*x6^4*x7^2*x8^2*x9 + x2^4*x5*x6^4*x7^2*x8^2 + x2^4*x5*x6^4*x7^2*x8*x9 + -x2^4*x5*x6^4*x7^2*x8 + x2^4*x5*x6^4*x7*x8^2*x9 + -x2^4*x5*x6^4*x7*x8^2 + -2*x2^4*x5*x6^4*x7*x8*x9 + 2*x2^4*x5*x6^4*x7*x8 + x2^4*x5*x6^4*x7*x9 + -x2^4*x5*x6^4*x7 + x2^4*x5*x6^4*x8*x9 + -x2^4*x5*x6^4*x8 + -x2^4*x5*x6^4*x9 + x2^4*x5*x6^4 + -x2^4*x5*x6^3*x7^2*x8*x9 + x2^4*x5*x6^3*x7^2*x8 + x2^4*x5*x6^3*x7^2*x9 + -x2^4*x5*x6^3*x7^2 + x2^4*x5*x6^3*x7*x8*x9 + -x2^4*x5*x6^3*x7*x8 + -x2^4*x5*x6^3*x7*x9 + x2^4*x5*x6^3*x7 + x2^4*x5*x6*x7^2*x8^2*x9^2 + -x2^4*x5*x6*x7^2*x8^2*x9 + -x2^4*x5*x6*x7^2*x8*x9^2 + x2^4*x5*x6*x7^2*x8*x9 + -x2^4*x5*x6*x7*x8^2*x9^2 + x2^4*x5*x6*x7*x8^2*x9 + x2^4*x5*x6*x7*x9^2 + -x2^4*x5*x6*x7*x9 + x2^4*x5*x6*x8*x9^2 + -x2^4*x5*x6*x8*x9 + -x2^4*x5*x6*x9^2 + x2^4*x5*x6*x9 + -x2^4*x5*x7^2*x8^2*x9^2 + x2^4*x5*x7^2*x8^2*x9 + x2^4*x5*x7^2*x8*x9^2 + -x2^4*x5*x7^2*x8 + -x2^4*x5*x7^2*x9 + x2^4*x5*x7^2 + x2^4*x5*x7*x8^2*x9^2 + -x2^4*x5*x7*x8^2*x9 + -x2^4*x5*x7*x9^2 + x2^4*x5*x7*x9 + -x2^4*x5*x8*x9^2 + x2^4*x5*x8 + x2^4*x5*x9^2 + -x2^4*x5 + -x2^4*x6^6*x7*x8^2*x9 + x2^4*x6^6*x7*x8^2 + x2^4*x6^6*x7*x8*x9 + -x2^4*x6^6*x7*x8 + x2^4*x6^6*x8^2*x9 + -x2^4*x6^6*x8^2 + -x2^4*x6^6*x8*x9 + x2^4*x6^6*x8 + -x2^4*x6^5*x7^2*x8^2*x9 + x2^4*x6^5*x7^2*x8^2 + x2^4*x6^5*x7^2*x8*x9 + -x2^4*x6^5*x7^2*x8 + 2*x2^4*x6^5*x7*x8^2*x9 + -2*x2^4*x6^5*x7*x8^2 + -2*x2^4*x6^5*x7*x8*x9 + 2*x2^4*x6^5*x7*x8 + -x2^4*x6^5*x8^2*x9 + x2^4*x6^5*x8^2 + x2^4*x6^5*x8*x9 + -x2^4*x6^5*x8 + x2^4*x6^4*x7^2*x8^2*x9 + -x2^4*x6^4*x7^2*x8^2 + -x2^4*x6^4*x7^2*x8*x9 + x2^4*x6^4*x7^2*x8 + -x2^4*x6^4*x7*x8^2*x9 + x2^4*x6^4*x7*x8^2 + x2^4*x6^4*x7*x8*x9 + -x2^4*x6^4*x7*x8 + -x2^4*x6*x7^2*x8^2*x9^2 + x2^4*x6*x7^2*x8^2*x9 + x2^4*x6*x7^2*x9^2 + -x2^4*x6*x7^2*x9 + x2^4*x6*x7*x8^2*x9^2 + -x2^4*x6*x7*x8^2*x9 + -x2^4*x6*x7*x9^2 + x2^4*x6*x7*x9 + x2^4*x7^2*x8^2*x9^2 + -x2^4*x7^2*x8^2*x9 + -x2^4*x7^2*x9^2 + x2^4*x7^2*x9 + -x2^4*x7*x8^2*x9^2 + x2^4*x7*x8^2*x9 + x2^4*x7*x9^2 + -x2^4*x7*x9 + x2^3*x3^9*x4^3*x5*x6*x7*x8*x9 + -x2^3*x3^9*x4^3*x5*x6*x7*x8 + -x2^3*x3^9*x4^3*x5*x6*x7*x9 + x2^3*x3^9*x4^3*x5*x6*x7 + -x2^3*x3^9*x4^3*x5*x6*x8*x9 + x2^3*x3^9*x4^3*x5*x6*x8 + x2^3*x3^9*x4^3*x5*x6*x9 + -x2^3*x3^9*x4^3*x5*x6 + -x2^3*x3^9*x4^3*x5*x7*x8*x9 + x2^3*x3^9*x4^3*x5*x7*x8 + x2^3*x3^9*x4^3*x5*x7*x9 + -x2^3*x3^9*x4^3*x5*x7 + x2^3*x3^9*x4^3*x5*x8*x9 + -x2^3*x3^9*x4^3*x5*x8 + -x2^3*x3^9*x4^3*x5*x9 + x2^3*x3^9*x4^3*x5 + -x2^3*x3^9*x4^3*x6*x7*x8*x9 + x2^3*x3^9*x4^3*x6*x7*x8 + x2^3*x3^9*x4^3*x6*x7*x9 + -x2^3*x3^9*x4^3*x6*x7 + x2^3*x3^9*x4^3*x6*x8*x9 + -x2^3*x3^9*x4^3*x6*x8 + -x2^3*x3^9*x4^3*x6*x9 + x2^3*x3^9*x4^3*x6 + x2^3*x3^9*x4^3*x7*x8*x9 + -x2^3*x3^9*x4^3*x7*x8 + -x2^3*x3^9*x4^3*x7*x9 + x2^3*x3^9*x4^3*x7 + -x2^3*x3^9*x4^3*x8*x9 + x2^3*x3^9*x4^3*x8 + x2^3*x3^9*x4^3*x9 + -x2^3*x3^9*x4^3 + -x2^3*x3^9*x4^2*x5*x6*x7*x8*x9 + x2^3*x3^9*x4^2*x5*x6*x7*x8 + x2^3*x3^9*x4^2*x5*x6*x7*x9 + -x2^3*x3^9*x4^2*x5*x6*x7 + x2^3*x3^9*x4^2*x5*x6*x8*x9 + -x2^3*x3^9*x4^2*x5*x6*x8 + -x2^3*x3^9*x4^2*x5*x6*x9 + x2^3*x3^9*x4^2*x5*x6 + x2^3*x3^9*x4^2*x5*x7*x8*x9 + -x2^3*x3^9*x4^2*x5*x7*x8 + -x2^3*x3^9*x4^2*x5*x7*x9 + x2^3*x3^9*x4^2*x5*x7 + -x2^3*x3^9*x4^2*x5*x8*x9 + x2^3*x3^9*x4^2*x5*x8 + x2^3*x3^9*x4^2*x5*x9 + -x2^3*x3^9*x4^2*x5 + x2^3*x3^9*x4^2*x6*x7*x8*x9 + -x2^3*x3^9*x4^2*x6*x7*x8 + -x2^3*x3^9*x4^2*x6*x7*x9 + x2^3*x3^9*x4^2*x6*x7 + -x2^3*x3^9*x4^2*x6*x8*x9 + x2^3*x3^9*x4^2*x6*x8 + x2^3*x3^9*x4^2*x6*x9 + -x2^3*x3^9*x4^2*x6 + -x2^3*x3^9*x4^2*x7*x8*x9 + x2^3*x3^9*x4^2*x7*x8 + x2^3*x3^9*x4^2*x7*x9 + -x2^3*x3^9*x4^2*x7 + x2^3*x3^9*x4^2*x8*x9 + -x2^3*x3^9*x4^2*x8 + -x2^3*x3^9*x4^2*x9 + x2^3*x3^9*x4^2 + x2^3*x3^8*x4^3*x5^2*x6*x7*x8*x9 + -x2^3*x3^8*x4^3*x5^2*x6*x7*x8 + -x2^3*x3^8*x4^3*x5^2*x6*x7*x9 + x2^3*x3^8*x4^3*x5^2*x6*x7 + -x2^3*x3^8*x4^3*x5^2*x6*x8*x9 + x2^3*x3^8*x4^3*x5^2*x6*x8 + x2^3*x3^8*x4^3*x5^2*x6*x9 + -x2^3*x3^8*x4^3*x5^2*x6 + -x2^3*x3^8*x4^3*x5^2*x7*x8*x9 + x2^3*x3^8*x4^3*x5^2*x7*x8 + x2^3*x3^8*x4^3*x5^2*x7*x9 + -x2^3*x3^8*x4^3*x5^2*x7 + x2^3*x3^8*x4^3*x5^2*x8*x9 + -x2^3*x3^8*x4^3*x5^2*x8 + -x2^3*x3^8*x4^3*x5^2*x9 + x2^3*x3^8*x4^3*x5^2 + -x2^3*x3^8*x4^3*x5*x6*x7*x8*x9 + x2^3*x3^8*x4^3*x5*x6*x7*x8 + x2^3*x3^8*x4^3*x5*x6*x7*x9 + -x2^3*x3^8*x4^3*x5*x6*x7 + x2^3*x3^8*x4^3*x5*x6*x8*x9 + -x2^3*x3^8*x4^3*x5*x6*x8 + -x2^3*x3^8*x4^3*x5*x6*x9 + x2^3*x3^8*x4^3*x5*x6 + x2^3*x3^8*x4^3*x5*x7*x8*x9 + -x2^3*x3^8*x4^3*x5*x7*x8 + -x2^3*x3^8*x4^3*x5*x7*x9 + x2^3*x3^8*x4^3*x5*x7 + -x2^3*x3^8*x4^3*x5*x8*x9 + x2^3*x3^8*x4^3*x5*x8 + x2^3*x3^8*x4^3*x5*x9 + -x2^3*x3^8*x4^3*x5 + -x2^3*x3^8*x4^2*x5^2*x6*x7*x8*x9 + x2^3*x3^8*x4^2*x5^2*x6*x7*x8 + x2^3*x3^8*x4^2*x5^2*x6*x7*x9 + -x2^3*x3^8*x4^2*x5^2*x6*x7 + x2^3*x3^8*x4^2*x5^2*x6*x8*x9 + -x2^3*x3^8*x4^2*x5^2*x6*x8 + -x2^3*x3^8*x4^2*x5^2*x6*x9 + x2^3*x3^8*x4^2*x5^2*x6 + x2^3*x3^8*x4^2*x5^2*x7*x8*x9 + -x2^3*x3^8*x4^2*x5^2*x7*x8 + -x2^3*x3^8*x4^2*x5^2*x7*x9 + x2^3*x3^8*x4^2*x5^2*x7 + -x2^3*x3^8*x4^2*x5^2*x8*x9 + x2^3*x3^8*x4^2*x5^2*x8 + x2^3*x3^8*x4^2*x5^2*x9 + -x2^3*x3^8*x4^2*x5^2 + x2^3*x3^8*x4^2*x5*x6*x7*x8*x9 + -x2^3*x3^8*x4^2*x5*x6*x7*x8 + -x2^3*x3^8*x4^2*x5*x6*x7*x9 + x2^3*x3^8*x4^2*x5*x6*x7 + -x2^3*x3^8*x4^2*x5*x6*x8*x9 + x2^3*x3^8*x4^2*x5*x6*x8 + x2^3*x3^8*x4^2*x5*x6*x9 + -x2^3*x3^8*x4^2*x5*x6 + -x2^3*x3^8*x4^2*x5*x7*x8*x9 + x2^3*x3^8*x4^2*x5*x7*x8 + x2^3*x3^8*x4^2*x5*x7*x9 + -x2^3*x3^8*x4^2*x5*x7 + x2^3*x3^8*x4^2*x5*x8*x9 + -x2^3*x3^8*x4^2*x5*x8 + -x2^3*x3^8*x4^2*x5*x9 + x2^3*x3^8*x4^2*x5 + x2^3*x3^7*x4^2*x5*x6*x7*x8*x9^3 + -x2^3*x3^7*x4^2*x5*x6*x7*x8*x9^2 + -x2^3*x3^7*x4^2*x5*x6*x7*x9^3 + x2^3*x3^7*x4^2*x5*x6*x7*x9^2 + -x2^3*x3^7*x4^2*x5*x6*x8*x9^3 + x2^3*x3^7*x4^2*x5*x6*x8*x9^2 + x2^3*x3^7*x4^2*x5*x6*x9^3 + -x2^3*x3^7*x4^2*x5*x6*x9^2 + -x2^3*x3^7*x4^2*x5*x7*x8*x9^3 + x2^3*x3^7*x4^2*x5*x7*x8*x9^2 + x2^3*x3^7*x4^2*x5*x7*x9^3 + -x2^3*x3^7*x4^2*x5*x7*x9^2 + x2^3*x3^7*x4^2*x5*x8*x9^3 + -x2^3*x3^7*x4^2*x5*x8*x9^2 + -x2^3*x3^7*x4^2*x5*x9^3 + x2^3*x3^7*x4^2*x5*x9^2 + -x2^3*x3^7*x4^2*x6*x7*x8*x9^3 + x2^3*x3^7*x4^2*x6*x7*x8*x9^2 + x2^3*x3^7*x4^2*x6*x7*x9^3 + -x2^3*x3^7*x4^2*x6*x7*x9^2 + x2^3*x3^7*x4^2*x6*x8*x9^3 + -x2^3*x3^7*x4^2*x6*x8*x9^2 + -x2^3*x3^7*x4^2*x6*x9^3 + x2^3*x3^7*x4^2*x6*x9^2 + x2^3*x3^7*x4^2*x7*x8*x9^3 + -x2^3*x3^7*x4^2*x7*x8*x9^2 + -x2^3*x3^7*x4^2*x7*x9^3 + x2^3*x3^7*x4^2*x7*x9^2 + -x2^3*x3^7*x4^2*x8*x9^3 + x2^3*x3^7*x4^2*x8*x9^2 + x2^3*x3^7*x4^2*x9^3 + -x2^3*x3^7*x4^2*x9^2 + x2^3*x3^7*x4*x5^3*x6^2*x7*x8*x9 + -x2^3*x3^7*x4*x5^3*x6^2*x7*x8 + -x2^3*x3^7*x4*x5^3*x6^2*x7*x9 + x2^3*x3^7*x4*x5^3*x6^2*x7 + -x2^3*x3^7*x4*x5^3*x6^2*x8*x9 + x2^3*x3^7*x4*x5^3*x6^2*x8 + x2^3*x3^7*x4*x5^3*x6^2*x9 + -x2^3*x3^7*x4*x5^3*x6^2 + -x2^3*x3^7*x4*x5^3*x6*x7*x8*x9 + x2^3*x3^7*x4*x5^3*x6*x7*x8 + x2^3*x3^7*x4*x5^3*x6*x7*x9 + -x2^3*x3^7*x4*x5^3*x6*x7 + x2^3*x3^7*x4*x5^3*x6*x8*x9 + -x2^3*x3^7*x4*x5^3*x6*x8 + -x2^3*x3^7*x4*x5^3*x6*x9 + x2^3*x3^7*x4*x5^3*x6 + -x2^3*x3^7*x4*x5^2*x6^2*x7*x8*x9 + x2^3*x3^7*x4*x5^2*x6^2*x7*x8 + x2^3*x3^7*x4*x5^2*x6^2*x7*x9 + -x2^3*x3^7*x4*x5^2*x6^2*x7 + x2^3*x3^7*x4*x5^2*x6^2*x8*x9 + -x2^3*x3^7*x4*x5^2*x6^2*x8 + -x2^3*x3^7*x4*x5^2*x6^2*x9 + x2^3*x3^7*x4*x5^2*x6^2 + x2^3*x3^7*x4*x5^2*x6*x7*x8*x9 + -x2^3*x3^7*x4*x5^2*x6*x7*x8 + -x2^3*x3^7*x4*x5^2*x6*x7*x9 + x2^3*x3^7*x4*x5^2*x6*x7 + -x2^3*x3^7*x4*x5^2*x6*x8*x9 + x2^3*x3^7*x4*x5^2*x6*x8 + x2^3*x3^7*x4*x5^2*x6*x9 + -x2^3*x3^7*x4*x5^2*x6 + -x2^3*x3^7*x5^3*x6^2*x7*x8*x9 + x2^3*x3^7*x5^3*x6^2*x7*x8 + x2^3*x3^7*x5^3*x6^2*x7*x9 + -x2^3*x3^7*x5^3*x6^2*x7 + x2^3*x3^7*x5^3*x6^2*x8*x9 + -x2^3*x3^7*x5^3*x6^2*x8 + -x2^3*x3^7*x5^3*x6^2*x9 + x2^3*x3^7*x5^3*x6^2 + x2^3*x3^7*x5^3*x6*x7*x8*x9 + -x2^3*x3^7*x5^3*x6*x7*x8 + -x2^3*x3^7*x5^3*x6*x7*x9 + x2^3*x3^7*x5^3*x6*x7 + -x2^3*x3^7*x5^3*x6*x8*x9 + x2^3*x3^7*x5^3*x6*x8 + x2^3*x3^7*x5^3*x6*x9 + -x2^3*x3^7*x5^3*x6 + x2^3*x3^7*x5^2*x6^2*x7*x8*x9 + -x2^3*x3^7*x5^2*x6^2*x7*x8 + -x2^3*x3^7*x5^2*x6^2*x7*x9 + x2^3*x3^7*x5^2*x6^2*x7 + -x2^3*x3^7*x5^2*x6^2*x8*x9 + x2^3*x3^7*x5^2*x6^2*x8 + x2^3*x3^7*x5^2*x6^2*x9 + -x2^3*x3^7*x5^2*x6^2 + -x2^3*x3^7*x5^2*x6*x7*x8*x9 + x2^3*x3^7*x5^2*x6*x7*x8 + x2^3*x3^7*x5^2*x6*x7*x9 + -x2^3*x3^7*x5^2*x6*x7 + x2^3*x3^7*x5^2*x6*x8*x9 + -x2^3*x3^7*x5^2*x6*x8 + -x2^3*x3^7*x5^2*x6*x9 + x2^3*x3^7*x5^2*x6 + -x2^3*x3^7*x5*x6*x7*x8*x9^3 + x2^3*x3^7*x5*x6*x7*x8*x9^2 + x2^3*x3^7*x5*x6*x7*x9^3 + -x2^3*x3^7*x5*x6*x7*x9^2 + x2^3*x3^7*x5*x6*x8*x9^3 + -x2^3*x3^7*x5*x6*x8*x9^2 + -x2^3*x3^7*x5*x6*x9^3 + x2^3*x3^7*x5*x6*x9^2 + x2^3*x3^7*x5*x7*x8*x9^3 + -x2^3*x3^7*x5*x7*x8*x9^2 + -x2^3*x3^7*x5*x7*x9^3 + x2^3*x3^7*x5*x7*x9^2 + -x2^3*x3^7*x5*x8*x9^3 + x2^3*x3^7*x5*x8*x9^2 + x2^3*x3^7*x5*x9^3 + -x2^3*x3^7*x5*x9^2 + x2^3*x3^7*x6*x7*x8*x9^3 + -x2^3*x3^7*x6*x7*x8*x9^2 + -x2^3*x3^7*x6*x7*x9^3 + x2^3*x3^7*x6*x7*x9^2 + -x2^3*x3^7*x6*x8*x9^3 + x2^3*x3^7*x6*x8*x9^2 + x2^3*x3^7*x6*x9^3 + -x2^3*x3^7*x6*x9^2 + -x2^3*x3^7*x7*x8*x9^3 + x2^3*x3^7*x7*x8*x9^2 + x2^3*x3^7*x7*x9^3 + -x2^3*x3^7*x7*x9^2 + x2^3*x3^7*x8*x9^3 + -x2^3*x3^7*x8*x9^2 + -x2^3*x3^7*x9^3 + x2^3*x3^7*x9^2 + x2^3*x3^6*x4*x5*x6*x7*x8*x9^4 + -x2^3*x3^6*x4*x5*x6*x7*x8*x9^3 + -x2^3*x3^6*x4*x5*x6*x7*x9^4 + x2^3*x3^6*x4*x5*x6*x7*x9^3 + -x2^3*x3^6*x4*x5*x6*x8*x9^4 + x2^3*x3^6*x4*x5*x6*x8*x9^3 + x2^3*x3^6*x4*x5*x6*x9^4 + -x2^3*x3^6*x4*x5*x6*x9^3 + -x2^3*x3^6*x4*x5*x7*x8*x9^4 + x2^3*x3^6*x4*x5*x7*x8*x9^3 + x2^3*x3^6*x4*x5*x7*x9^4 + -x2^3*x3^6*x4*x5*x7*x9^3 + x2^3*x3^6*x4*x5*x8*x9^4 + -x2^3*x3^6*x4*x5*x8*x9^3 + -x2^3*x3^6*x4*x5*x9^4 + x2^3*x3^6*x4*x5*x9^3 + -x2^3*x3^6*x4*x6*x7*x8*x9^4 + x2^3*x3^6*x4*x6*x7*x8*x9^3 + x2^3*x3^6*x4*x6*x7*x9^4 + -x2^3*x3^6*x4*x6*x7*x9^3 + x2^3*x3^6*x4*x6*x8*x9^4 + -x2^3*x3^6*x4*x6*x8*x9^3 + -x2^3*x3^6*x4*x6*x9^4 + x2^3*x3^6*x4*x6*x9^3 + x2^3*x3^6*x4*x7*x8*x9^4 + -x2^3*x3^6*x4*x7*x8*x9^3 + -x2^3*x3^6*x4*x7*x9^4 + x2^3*x3^6*x4*x7*x9^3 + -x2^3*x3^6*x4*x8*x9^4 + x2^3*x3^6*x4*x8*x9^3 + x2^3*x3^6*x4*x9^4 + -x2^3*x3^6*x4*x9^3 + -x2^3*x3^6*x5*x6*x7*x8*x9^4 + x2^3*x3^6*x5*x6*x7*x8*x9^3 + x2^3*x3^6*x5*x6*x7*x9^4 + -x2^3*x3^6*x5*x6*x7*x9^3 + x2^3*x3^6*x5*x6*x8*x9^4 + -x2^3*x3^6*x5*x6*x8*x9^3 + -x2^3*x3^6*x5*x6*x9^4 + x2^3*x3^6*x5*x6*x9^3 + x2^3*x3^6*x5*x7*x8*x9^4 + -x2^3*x3^6*x5*x7*x8*x9^3 + -x2^3*x3^6*x5*x7*x9^4 + x2^3*x3^6*x5*x7*x9^3 + -x2^3*x3^6*x5*x8*x9^4 + x2^3*x3^6*x5*x8*x9^3 + x2^3*x3^6*x5*x9^4 + -x2^3*x3^6*x5*x9^3 + x2^3*x3^6*x6*x7*x8*x9^4 + -x2^3*x3^6*x6*x7*x8*x9^3 + -x2^3*x3^6*x6*x7*x9^4 + x2^3*x3^6*x6*x7*x9^3 + -x2^3*x3^6*x6*x8*x9^4 + x2^3*x3^6*x6*x8*x9^3 + x2^3*x3^6*x6*x9^4 + -x2^3*x3^6*x6*x9^3 + -x2^3*x3^6*x7*x8*x9^4 + x2^3*x3^6*x7*x8*x9^3 + x2^3*x3^6*x7*x9^4 + -x2^3*x3^6*x7*x9^3 + x2^3*x3^6*x8*x9^4 + -x2^3*x3^6*x8*x9^3 + -x2^3*x3^6*x9^4 + x2^3*x3^6*x9^3 + -x2^3*x3^4*x4^3*x5*x6*x7*x8*x9 + x2^3*x3^4*x4^3*x5*x6*x7*x8 + x2^3*x3^4*x4^3*x5*x6*x7*x9 + -x2^3*x3^4*x4^3*x5*x6*x7 + x2^3*x3^4*x4^3*x5*x6*x8*x9 + -x2^3*x3^4*x4^3*x5*x6*x8 + -x2^3*x3^4*x4^3*x5*x6*x9 + x2^3*x3^4*x4^3*x5*x6 + x2^3*x3^4*x4^3*x5*x7*x8*x9 + -x2^3*x3^4*x4^3*x5*x7*x8 + -x2^3*x3^4*x4^3*x5*x7*x9 + x2^3*x3^4*x4^3*x5*x7 + -x2^3*x3^4*x4^3*x5*x8*x9 + x2^3*x3^4*x4^3*x5*x8 + x2^3*x3^4*x4^3*x5*x9 + -x2^3*x3^4*x4^3*x5 + x2^3*x3^4*x4^3*x6*x7*x8*x9 + -x2^3*x3^4*x4^3*x6*x7*x8 + -x2^3*x3^4*x4^3*x6*x7*x9 + x2^3*x3^4*x4^3*x6*x7 + -x2^3*x3^4*x4^3*x6*x8*x9 + x2^3*x3^4*x4^3*x6*x8 + x2^3*x3^4*x4^3*x6*x9 + -x2^3*x3^4*x4^3*x6 + -x2^3*x3^4*x4^3*x7*x8*x9 + x2^3*x3^4*x4^3*x7*x8 + x2^3*x3^4*x4^3*x7*x9 + -x2^3*x3^4*x4^3*x7 + x2^3*x3^4*x4^3*x8*x9 + -x2^3*x3^4*x4^3*x8 + -x2^3*x3^4*x4^3*x9 + x2^3*x3^4*x4^3 + x2^3*x3^4*x4^2*x5*x6*x7*x8*x9 + -x2^3*x3^4*x4^2*x5*x6*x7*x8 + -x2^3*x3^4*x4^2*x5*x6*x7*x9 + x2^3*x3^4*x4^2*x5*x6*x7 + -x2^3*x3^4*x4^2*x5*x6*x8*x9 + x2^3*x3^4*x4^2*x5*x6*x8 + x2^3*x3^4*x4^2*x5*x6*x9 + -x2^3*x3^4*x4^2*x5*x6 + -x2^3*x3^4*x4^2*x5*x7*x8*x9 + x2^3*x3^4*x4^2*x5*x7*x8 + x2^3*x3^4*x4^2*x5*x7*x9 + -x2^3*x3^4*x4^2*x5*x7 + x2^3*x3^4*x4^2*x5*x8*x9 + -x2^3*x3^4*x4^2*x5*x8 + -x2^3*x3^4*x4^2*x5*x9 + x2^3*x3^4*x4^2*x5 + -x2^3*x3^4*x4^2*x6*x7*x8*x9 + x2^3*x3^4*x4^2*x6*x7*x8 + x2^3*x3^4*x4^2*x6*x7*x9 + -x2^3*x3^4*x4^2*x6*x7 + x2^3*x3^4*x4^2*x6*x8*x9 + -x2^3*x3^4*x4^2*x6*x8 + -x2^3*x3^4*x4^2*x6*x9 + x2^3*x3^4*x4^2*x6 + x2^3*x3^4*x4^2*x7*x8*x9 + -x2^3*x3^4*x4^2*x7*x8 + -x2^3*x3^4*x4^2*x7*x9 + x2^3*x3^4*x4^2*x7 + -x2^3*x3^4*x4^2*x8*x9 + x2^3*x3^4*x4^2*x8 + x2^3*x3^4*x4^2*x9 + -x2^3*x3^4*x4^2 + x2^3*x3^2*x4^3*x5^2*x6^2*x7*x8*x9 + -x2^3*x3^2*x4^3*x5^2*x6^2*x7*x8 + -x2^3*x3^2*x4^3*x5^2*x6^2*x7*x9 + x2^3*x3^2*x4^3*x5^2*x6^2*x7 + -x2^3*x3^2*x4^3*x5^2*x6^2*x8*x9 + x2^3*x3^2*x4^3*x5^2*x6^2*x8 + x2^3*x3^2*x4^3*x5^2*x6^2*x9 + -x2^3*x3^2*x4^3*x5^2*x6^2 + -x2^3*x3^2*x4^3*x5^2*x6*x7*x8*x9 + x2^3*x3^2*x4^3*x5^2*x6*x7*x8 + x2^3*x3^2*x4^3*x5^2*x6*x7*x9 + -x2^3*x3^2*x4^3*x5^2*x6*x7 + x2^3*x3^2*x4^3*x5^2*x6*x8*x9 + -x2^3*x3^2*x4^3*x5^2*x6*x8 + -x2^3*x3^2*x4^3*x5^2*x6*x9 + x2^3*x3^2*x4^3*x5^2*x6 + -x2^3*x3^2*x4^3*x5*x6^2*x7*x8*x9 + x2^3*x3^2*x4^3*x5*x6^2*x7*x8 + x2^3*x3^2*x4^3*x5*x6^2*x7*x9 + -x2^3*x3^2*x4^3*x5*x6^2*x7 + x2^3*x3^2*x4^3*x5*x6^2*x8*x9 + -x2^3*x3^2*x4^3*x5*x6^2*x8 + -x2^3*x3^2*x4^3*x5*x6^2*x9 + x2^3*x3^2*x4^3*x5*x6^2 + x2^3*x3^2*x4^3*x5*x6*x7*x8*x9 + -x2^3*x3^2*x4^3*x5*x6*x7*x8 + -x2^3*x3^2*x4^3*x5*x6*x7*x9 + x2^3*x3^2*x4^3*x5*x6*x7 + -x2^3*x3^2*x4^3*x5*x6*x8*x9 + x2^3*x3^2*x4^3*x5*x6*x8 + x2^3*x3^2*x4^3*x5*x6*x9 + -x2^3*x3^2*x4^3*x5*x6 + x2^3*x3^2*x4^2*x5^3*x6^2*x7*x8*x9 + -x2^3*x3^2*x4^2*x5^3*x6^2*x7*x8 + -x2^3*x3^2*x4^2*x5^3*x6^2*x7*x9 + x2^3*x3^2*x4^2*x5^3*x6^2*x7 + -x2^3*x3^2*x4^2*x5^3*x6^2*x8*x9 + x2^3*x3^2*x4^2*x5^3*x6^2*x8 + x2^3*x3^2*x4^2*x5^3*x6^2*x9 + -x2^3*x3^2*x4^2*x5^3*x6^2 + -x2^3*x3^2*x4^2*x5^3*x6*x7*x8*x9 + x2^3*x3^2*x4^2*x5^3*x6*x7*x8 + x2^3*x3^2*x4^2*x5^3*x6*x7*x9 + -x2^3*x3^2*x4^2*x5^3*x6*x7 + x2^3*x3^2*x4^2*x5^3*x6*x8*x9 + -x2^3*x3^2*x4^2*x5^3*x6*x8 + -x2^3*x3^2*x4^2*x5^3*x6*x9 + x2^3*x3^2*x4^2*x5^3*x6 + -2*x2^3*x3^2*x4^2*x5^2*x6^2*x7*x8*x9 + 2*x2^3*x3^2*x4^2*x5^2*x6^2*x7*x8 + 2*x2^3*x3^2*x4^2*x5^2*x6^2*x7*x9 + -2*x2^3*x3^2*x4^2*x5^2*x6^2*x7 + 2*x2^3*x3^2*x4^2*x5^2*x6^2*x8*x9 + -2*x2^3*x3^2*x4^2*x5^2*x6^2*x8 + -2*x2^3*x3^2*x4^2*x5^2*x6^2*x9 + 2*x2^3*x3^2*x4^2*x5^2*x6^2 + 2*x2^3*x3^2*x4^2*x5^2*x6*x7*x8*x9 + -2*x2^3*x3^2*x4^2*x5^2*x6*x7*x8 + -2*x2^3*x3^2*x4^2*x5^2*x6*x7*x9 + 2*x2^3*x3^2*x4^2*x5^2*x6*x7 + -2*x2^3*x3^2*x4^2*x5^2*x6*x8*x9 + 2*x2^3*x3^2*x4^2*x5^2*x6*x8 + 2*x2^3*x3^2*x4^2*x5^2*x6*x9 + -2*x2^3*x3^2*x4^2*x5^2*x6 + x2^3*x3^2*x4^2*x5*x6^2*x7*x8*x9 + -x2^3*x3^2*x4^2*x5*x6^2*x7*x8 + -x2^3*x3^2*x4^2*x5*x6^2*x7*x9 + x2^3*x3^2*x4^2*x5*x6^2*x7 + -x2^3*x3^2*x4^2*x5*x6^2*x8*x9 + x2^3*x3^2*x4^2*x5*x6^2*x8 + x2^3*x3^2*x4^2*x5*x6^2*x9 + -x2^3*x3^2*x4^2*x5*x6^2 + -x2^3*x3^2*x4^2*x5*x6*x7*x8*x9 + x2^3*x3^2*x4^2*x5*x6*x7*x8 + x2^3*x3^2*x4^2*x5*x6*x7*x9 + -x2^3*x3^2*x4^2*x5*x6*x7 + x2^3*x3^2*x4^2*x5*x6*x8*x9 + -x2^3*x3^2*x4^2*x5*x6*x8 + -x2^3*x3^2*x4^2*x5*x6*x9 + x2^3*x3^2*x4^2*x5*x6 + -x2^3*x3^2*x4*x5^3*x6^2*x7*x8*x9 + x2^3*x3^2*x4*x5^3*x6^2*x7*x8 + x2^3*x3^2*x4*x5^3*x6^2*x7*x9 + -x2^3*x3^2*x4*x5^3*x6^2*x7 + x2^3*x3^2*x4*x5^3*x6^2*x8*x9 + -x2^3*x3^2*x4*x5^3*x6^2*x8 + -x2^3*x3^2*x4*x5^3*x6^2*x9 + x2^3*x3^2*x4*x5^3*x6^2 + x2^3*x3^2*x4*x5^3*x6*x7*x8*x9 + -x2^3*x3^2*x4*x5^3*x6*x7*x8 + -x2^3*x3^2*x4*x5^3*x6*x7*x9 + x2^3*x3^2*x4*x5^3*x6*x7 + -x2^3*x3^2*x4*x5^3*x6*x8*x9 + x2^3*x3^2*x4*x5^3*x6*x8 + x2^3*x3^2*x4*x5^3*x6*x9 + -x2^3*x3^2*x4*x5^3*x6 + x2^3*x3^2*x4*x5^2*x6^2*x7*x8*x9 + -x2^3*x3^2*x4*x5^2*x6^2*x7*x8 + -x2^3*x3^2*x4*x5^2*x6^2*x7*x9 + x2^3*x3^2*x4*x5^2*x6^2*x7 + -x2^3*x3^2*x4*x5^2*x6^2*x8*x9 + x2^3*x3^2*x4*x5^2*x6^2*x8 + x2^3*x3^2*x4*x5^2*x6^2*x9 + -x2^3*x3^2*x4*x5^2*x6^2 + -x2^3*x3^2*x4*x5^2*x6*x7*x8*x9 + x2^3*x3^2*x4*x5^2*x6*x7*x8 + x2^3*x3^2*x4*x5^2*x6*x7*x9 + -x2^3*x3^2*x4*x5^2*x6*x7 + x2^3*x3^2*x4*x5^2*x6*x8*x9 + -x2^3*x3^2*x4*x5^2*x6*x8 + -x2^3*x3^2*x4*x5^2*x6*x9 + x2^3*x3^2*x4*x5^2*x6 + x2^3*x3*x4^8*x5*x6^2*x7*x8*x9 + -x2^3*x3*x4^8*x5*x6^2*x7*x8 + -x2^3*x3*x4^8*x5*x6^2*x7*x9 + x2^3*x3*x4^8*x5*x6^2*x7 + -x2^3*x3*x4^8*x5*x6^2*x8*x9 + x2^3*x3*x4^8*x5*x6^2*x8 + x2^3*x3*x4^8*x5*x6^2*x9 + -x2^3*x3*x4^8*x5*x6^2 + x2^3*x3*x4^8*x5*x6*x7*x8*x9^2 + -x2^3*x3*x4^8*x5*x6*x7*x8*x9 + -x2^3*x3*x4^8*x5*x6*x7*x9^2 + x2^3*x3*x4^8*x5*x6*x7*x9 + -x2^3*x3*x4^8*x5*x6*x8*x9^2 + x2^3*x3*x4^8*x5*x6*x8*x9 + x2^3*x3*x4^8*x5*x6*x9^2 + -x2^3*x3*x4^8*x5*x6*x9 + -x2^3*x3*x4^8*x5*x7*x8*x9^2 + x2^3*x3*x4^8*x5*x7*x8 + x2^3*x3*x4^8*x5*x7*x9^2 + -x2^3*x3*x4^8*x5*x7 + x2^3*x3*x4^8*x5*x8*x9^2 + -x2^3*x3*x4^8*x5*x8 + -x2^3*x3*x4^8*x5*x9^2 + x2^3*x3*x4^8*x5 + -x2^3*x3*x4^8*x6^2*x7*x8*x9 + x2^3*x3*x4^8*x6^2*x7*x8 + x2^3*x3*x4^8*x6^2*x7*x9 + -x2^3*x3*x4^8*x6^2*x7 + x2^3*x3*x4^8*x6^2*x8*x9 + -x2^3*x3*x4^8*x6^2*x8 + -x2^3*x3*x4^8*x6^2*x9 + x2^3*x3*x4^8*x6^2 + -x2^3*x3*x4^8*x6*x7*x8*x9^2 + x2^3*x3*x4^8*x6*x7*x8*x9 + x2^3*x3*x4^8*x6*x7*x9^2 + -x2^3*x3*x4^8*x6*x7*x9 + x2^3*x3*x4^8*x6*x8*x9^2 + -x2^3*x3*x4^8*x6*x8*x9 + -x2^3*x3*x4^8*x6*x9^2 + x2^3*x3*x4^8*x6*x9 + x2^3*x3*x4^8*x7*x8*x9^2 + -x2^3*x3*x4^8*x7*x8 + -x2^3*x3*x4^8*x7*x9^2 + x2^3*x3*x4^8*x7 + -x2^3*x3*x4^8*x8*x9^2 + x2^3*x3*x4^8*x8 + x2^3*x3*x4^8*x9^2 + -x2^3*x3*x4^8 + -x2^3*x3*x4^7*x5*x6^2*x7*x8*x9 + x2^3*x3*x4^7*x5*x6^2*x7*x8 + x2^3*x3*x4^7*x5*x6^2*x7*x9 + -x2^3*x3*x4^7*x5*x6^2*x7 + x2^3*x3*x4^7*x5*x6^2*x8*x9 + -x2^3*x3*x4^7*x5*x6^2*x8 + -x2^3*x3*x4^7*x5*x6^2*x9 + x2^3*x3*x4^7*x5*x6^2 + -x2^3*x3*x4^7*x5*x6*x7*x8*x9^2 + x2^3*x3*x4^7*x5*x6*x7*x8*x9 + x2^3*x3*x4^7*x5*x6*x7*x9^2 + -x2^3*x3*x4^7*x5*x6*x7*x9 + x2^3*x3*x4^7*x5*x6*x8*x9^2 + -x2^3*x3*x4^7*x5*x6*x8*x9 + -x2^3*x3*x4^7*x5*x6*x9^2 + x2^3*x3*x4^7*x5*x6*x9 + x2^3*x3*x4^7*x5*x7*x8*x9^2 + -x2^3*x3*x4^7*x5*x7*x8 + -x2^3*x3*x4^7*x5*x7*x9^2 + x2^3*x3*x4^7*x5*x7 + -x2^3*x3*x4^7*x5*x8*x9^2 + x2^3*x3*x4^7*x5*x8 + x2^3*x3*x4^7*x5*x9^2 + -x2^3*x3*x4^7*x5 + x2^3*x3*x4^7*x6^2*x7*x8*x9 + -x2^3*x3*x4^7*x6^2*x7*x8 + -x2^3*x3*x4^7*x6^2*x7*x9 + x2^3*x3*x4^7*x6^2*x7 + -x2^3*x3*x4^7*x6^2*x8*x9 + x2^3*x3*x4^7*x6^2*x8 + x2^3*x3*x4^7*x6^2*x9 + -x2^3*x3*x4^7*x6^2 + x2^3*x3*x4^7*x6*x7*x8*x9^2 + -x2^3*x3*x4^7*x6*x7*x8*x9 + -x2^3*x3*x4^7*x6*x7*x9^2 + x2^3*x3*x4^7*x6*x7*x9 + -x2^3*x3*x4^7*x6*x8*x9^2 + x2^3*x3*x4^7*x6*x8*x9 + x2^3*x3*x4^7*x6*x9^2 + -x2^3*x3*x4^7*x6*x9 + -x2^3*x3*x4^7*x7*x8*x9^2 + x2^3*x3*x4^7*x7*x8 + x2^3*x3*x4^7*x7*x9^2 + -x2^3*x3*x4^7*x7 + x2^3*x3*x4^7*x8*x9^2 + -x2^3*x3*x4^7*x8 + -x2^3*x3*x4^7*x9^2 + x2^3*x3*x4^7 + x2^3*x3*x4^5*x5*x6^5*x7*x8*x9 + -x2^3*x3*x4^5*x5*x6^5*x7*x8 + -x2^3*x3*x4^5*x5*x6^5*x7*x9 + x2^3*x3*x4^5*x5*x6^5*x7 + -x2^3*x3*x4^5*x5*x6^5*x8*x9 + x2^3*x3*x4^5*x5*x6^5*x8 + x2^3*x3*x4^5*x5*x6^5*x9 + -x2^3*x3*x4^5*x5*x6^5 + -x2^3*x3*x4^5*x5*x6^4*x7*x8*x9 + x2^3*x3*x4^5*x5*x6^4*x7*x8 + x2^3*x3*x4^5*x5*x6^4*x7*x9 + -x2^3*x3*x4^5*x5*x6^4*x7 + x2^3*x3*x4^5*x5*x6^4*x8*x9 + -x2^3*x3*x4^5*x5*x6^4*x8 + -x2^3*x3*x4^5*x5*x6^4*x9 + x2^3*x3*x4^5*x5*x6^4 + -x2^3*x3*x4^5*x6^5*x7*x8*x9 + x2^3*x3*x4^5*x6^5*x7*x8 + x2^3*x3*x4^5*x6^5*x7*x9 + -x2^3*x3*x4^5*x6^5*x7 + x2^3*x3*x4^5*x6^5*x8*x9 + -x2^3*x3*x4^5*x6^5*x8 + -x2^3*x3*x4^5*x6^5*x9 + x2^3*x3*x4^5*x6^5 + x2^3*x3*x4^5*x6^4*x7*x8*x9 + -x2^3*x3*x4^5*x6^4*x7*x8 + -x2^3*x3*x4^5*x6^4*x7*x9 + x2^3*x3*x4^5*x6^4*x7 + -x2^3*x3*x4^5*x6^4*x8*x9 + x2^3*x3*x4^5*x6^4*x8 + x2^3*x3*x4^5*x6^4*x9 + -x2^3*x3*x4^5*x6^4 + -x2^3*x3*x4^4*x5*x6^5*x7*x8*x9 + x2^3*x3*x4^4*x5*x6^5*x7*x8 + x2^3*x3*x4^4*x5*x6^5*x7*x9 + -x2^3*x3*x4^4*x5*x6^5*x7 + x2^3*x3*x4^4*x5*x6^5*x8*x9 + -x2^3*x3*x4^4*x5*x6^5*x8 + -x2^3*x3*x4^4*x5*x6^5*x9 + x2^3*x3*x4^4*x5*x6^5 + x2^3*x3*x4^4*x5*x6^4*x7*x8^2*x9 + -x2^3*x3*x4^4*x5*x6^4*x7*x8^2 + -x2^3*x3*x4^4*x5*x6^4*x7*x9 + x2^3*x3*x4^4*x5*x6^4*x7 + -x2^3*x3*x4^4*x5*x6^4*x8^2*x9 + x2^3*x3*x4^4*x5*x6^4*x8^2 + x2^3*x3*x4^4*x5*x6^4*x9 + -x2^3*x3*x4^4*x5*x6^4 + -x2^3*x3*x4^4*x5*x6^3*x7*x8^2*x9 + x2^3*x3*x4^4*x5*x6^3*x7*x8^2 + x2^3*x3*x4^4*x5*x6^3*x7*x8*x9 + -x2^3*x3*x4^4*x5*x6^3*x7*x8 + x2^3*x3*x4^4*x5*x6^3*x8^2*x9 + -x2^3*x3*x4^4*x5*x6^3*x8^2 + -x2^3*x3*x4^4*x5*x6^3*x8*x9 + x2^3*x3*x4^4*x5*x6^3*x8 + x2^3*x3*x4^4*x6^5*x7*x8*x9 + -x2^3*x3*x4^4*x6^5*x7*x8 + -x2^3*x3*x4^4*x6^5*x7*x9 + x2^3*x3*x4^4*x6^5*x7 + -x2^3*x3*x4^4*x6^5*x8*x9 + x2^3*x3*x4^4*x6^5*x8 + x2^3*x3*x4^4*x6^5*x9 + -x2^3*x3*x4^4*x6^5 + -x2^3*x3*x4^4*x6^4*x7*x8^2*x9 + x2^3*x3*x4^4*x6^4*x7*x8^2 + x2^3*x3*x4^4*x6^4*x7*x9 + -x2^3*x3*x4^4*x6^4*x7 + x2^3*x3*x4^4*x6^4*x8^2*x9 + -x2^3*x3*x4^4*x6^4*x8^2 + -x2^3*x3*x4^4*x6^4*x9 + x2^3*x3*x4^4*x6^4 + x2^3*x3*x4^4*x6^3*x7*x8^2*x9 + -x2^3*x3*x4^4*x6^3*x7*x8^2 + -x2^3*x3*x4^4*x6^3*x7*x8*x9 + x2^3*x3*x4^4*x6^3*x7*x8 + -x2^3*x3*x4^4*x6^3*x8^2*x9 + x2^3*x3*x4^4*x6^3*x8^2 + x2^3*x3*x4^4*x6^3*x8*x9 + -x2^3*x3*x4^4*x6^3*x8 + -x2^3*x3*x4^3*x5^2*x6^2*x7*x8*x9 + x2^3*x3*x4^3*x5^2*x6^2*x7*x8 + x2^3*x3*x4^3*x5^2*x6^2*x7*x9 + -x2^3*x3*x4^3*x5^2*x6^2*x7 + x2^3*x3*x4^3*x5^2*x6^2*x8*x9 + -x2^3*x3*x4^3*x5^2*x6^2*x8 + -x2^3*x3*x4^3*x5^2*x6^2*x9 + x2^3*x3*x4^3*x5^2*x6^2 + x2^3*x3*x4^3*x5^2*x6*x7^3*x8*x9 + -x2^3*x3*x4^3*x5^2*x6*x7^3*x8 + -x2^3*x3*x4^3*x5^2*x6*x7^3*x9 + x2^3*x3*x4^3*x5^2*x6*x7^3 + -x2^3*x3*x4^3*x5^2*x6*x7^2*x8*x9 + x2^3*x3*x4^3*x5^2*x6*x7^2*x8 + x2^3*x3*x4^3*x5^2*x6*x7^2*x9 + -x2^3*x3*x4^3*x5^2*x6*x7^2 + -x2^3*x3*x4^3*x5^2*x7^3*x8*x9 + x2^3*x3*x4^3*x5^2*x7^3*x8 + x2^3*x3*x4^3*x5^2*x7^3*x9 + -x2^3*x3*x4^3*x5^2*x7^3 + x2^3*x3*x4^3*x5^2*x7^2*x8*x9 + -x2^3*x3*x4^3*x5^2*x7^2*x8 + -x2^3*x3*x4^3*x5^2*x7^2*x9 + x2^3*x3*x4^3*x5^2*x7^2 + x2^3*x3*x4^3*x5^2*x7*x8*x9 + -x2^3*x3*x4^3*x5^2*x7*x8 + -x2^3*x3*x4^3*x5^2*x7*x9 + x2^3*x3*x4^3*x5^2*x7 + -x2^3*x3*x4^3*x5^2*x8*x9 + x2^3*x3*x4^3*x5^2*x8 + x2^3*x3*x4^3*x5^2*x9 + -x2^3*x3*x4^3*x5^2 + x2^3*x3*x4^3*x5*x6^5*x7*x8^2*x9 + -x2^3*x3*x4^3*x5*x6^5*x7*x8^2 + -x2^3*x3*x4^3*x5*x6^5*x7*x8*x9 + x2^3*x3*x4^3*x5*x6^5*x7*x8 + -x2^3*x3*x4^3*x5*x6^5*x8^2*x9 + x2^3*x3*x4^3*x5*x6^5*x8^2 + x2^3*x3*x4^3*x5*x6^5*x8*x9 + -x2^3*x3*x4^3*x5*x6^5*x8 + x2^3*x3*x4^3*x5*x6^4*x7^2*x8^2*x9 + -x2^3*x3*x4^3*x5*x6^4*x7^2*x8^2 + -x2^3*x3*x4^3*x5*x6^4*x7^2*x8*x9 + x2^3*x3*x4^3*x5*x6^4*x7^2*x8 + -2*x2^3*x3*x4^3*x5*x6^4*x7*x8^2*x9 + 2*x2^3*x3*x4^3*x5*x6^4*x7*x8^2 + 2*x2^3*x3*x4^3*x5*x6^4*x7*x8*x9 + -2*x2^3*x3*x4^3*x5*x6^4*x7*x8 + x2^3*x3*x4^3*x5*x6^4*x8^2*x9 + -x2^3*x3*x4^3*x5*x6^4*x8^2 + -x2^3*x3*x4^3*x5*x6^4*x8*x9 + x2^3*x3*x4^3*x5*x6^4*x8 + x2^3*x3*x4^3*x5*x6^3*x7^3*x8^2*x9 + -x2^3*x3*x4^3*x5*x6^3*x7^3*x8^2 + -x2^3*x3*x4^3*x5*x6^3*x7^3*x9 + x2^3*x3*x4^3*x5*x6^3*x7^3 + -2*x2^3*x3*x4^3*x5*x6^3*x7^2*x8^2*x9 + 2*x2^3*x3*x4^3*x5*x6^3*x7^2*x8^2 + x2^3*x3*x4^3*x5*x6^3*x7^2*x8*x9 + -x2^3*x3*x4^3*x5*x6^3*x7^2*x8 + x2^3*x3*x4^3*x5*x6^3*x7^2*x9 + -x2^3*x3*x4^3*x5*x6^3*x7^2 + x2^3*x3*x4^3*x5*x6^3*x7*x8^2*x9 + -x2^3*x3*x4^3*x5*x6^3*x7*x8^2 + -x2^3*x3*x4^3*x5*x6^3*x7*x8*x9 + x2^3*x3*x4^3*x5*x6^3*x7*x8 + x2^3*x3*x4^3*x5*x6^2*x7*x8*x9 + -x2^3*x3*x4^3*x5*x6^2*x7*x8 + -x2^3*x3*x4^3*x5*x6^2*x7*x9 + x2^3*x3*x4^3*x5*x6^2*x7 + -x2^3*x3*x4^3*x5*x6^2*x8*x9 + x2^3*x3*x4^3*x5*x6^2*x8 + x2^3*x3*x4^3*x5*x6^2*x9 + -x2^3*x3*x4^3*x5*x6^2 + -x2^3*x3*x4^3*x5*x6*x7^3*x8*x9 + x2^3*x3*x4^3*x5*x6*x7^3*x8 + x2^3*x3*x4^3*x5*x6*x7^3*x9 + -x2^3*x3*x4^3*x5*x6*x7^3 + x2^3*x3*x4^3*x5*x6*x7^2*x8*x9 + -x2^3*x3*x4^3*x5*x6*x7^2*x8 + -x2^3*x3*x4^3*x5*x6*x7^2*x9 + x2^3*x3*x4^3*x5*x6*x7^2 + x2^3*x3*x4^3*x5*x6*x7*x8*x9^3 + -x2^3*x3*x4^3*x5*x6*x7*x8*x9^2 + -x2^3*x3*x4^3*x5*x6*x7*x9^3 + x2^3*x3*x4^3*x5*x6*x7*x9^2 + -x2^3*x3*x4^3*x5*x6*x8*x9^3 + x2^3*x3*x4^3*x5*x6*x8*x9^2 + x2^3*x3*x4^3*x5*x6*x9^3 + -x2^3*x3*x4^3*x5*x6*x9^2 + -x2^3*x3*x4^3*x5*x7^3*x8^2*x9 + x2^3*x3*x4^3*x5*x7^3*x8^2 + x2^3*x3*x4^3*x5*x7^3*x8*x9 + -x2^3*x3*x4^3*x5*x7^3*x8 + x2^3*x3*x4^3*x5*x7^2*x8^2*x9 + -x2^3*x3*x4^3*x5*x7^2*x8^2 + -x2^3*x3*x4^3*x5*x7^2*x8*x9 + x2^3*x3*x4^3*x5*x7^2*x8 + -x2^3*x3*x4^3*x5*x7*x8*x9^3 + x2^3*x3*x4^3*x5*x7*x8*x9^2 + -x2^3*x3*x4^3*x5*x7*x8*x9 + x2^3*x3*x4^3*x5*x7*x8 + x2^3*x3*x4^3*x5*x7*x9^3 + -x2^3*x3*x4^3*x5*x7*x9^2 + x2^3*x3*x4^3*x5*x7*x9 + -x2^3*x3*x4^3*x5*x7 + x2^3*x3*x4^3*x5*x8*x9^3 + -x2^3*x3*x4^3*x5*x8*x9^2 + x2^3*x3*x4^3*x5*x8*x9 + -x2^3*x3*x4^3*x5*x8 + -x2^3*x3*x4^3*x5*x9^3 + x2^3*x3*x4^3*x5*x9^2 + -x2^3*x3*x4^3*x5*x9 + x2^3*x3*x4^3*x5 + -x2^3*x3*x4^3*x6^5*x7*x8^2*x9 + x2^3*x3*x4^3*x6^5*x7*x8^2 + x2^3*x3*x4^3*x6^5*x7*x8*x9 + -x2^3*x3*x4^3*x6^5*x7*x8 + x2^3*x3*x4^3*x6^5*x8^2*x9 + -x2^3*x3*x4^3*x6^5*x8^2 + -x2^3*x3*x4^3*x6^5*x8*x9 + x2^3*x3*x4^3*x6^5*x8 + -x2^3*x3*x4^3*x6^4*x7^2*x8^2*x9 + x2^3*x3*x4^3*x6^4*x7^2*x8^2 + x2^3*x3*x4^3*x6^4*x7^2*x8*x9 + -x2^3*x3*x4^3*x6^4*x7^2*x8 + 2*x2^3*x3*x4^3*x6^4*x7*x8^2*x9 + -2*x2^3*x3*x4^3*x6^4*x7*x8^2 + -2*x2^3*x3*x4^3*x6^4*x7*x8*x9 + 2*x2^3*x3*x4^3*x6^4*x7*x8 + -x2^3*x3*x4^3*x6^4*x8^2*x9 + x2^3*x3*x4^3*x6^4*x8^2 + x2^3*x3*x4^3*x6^4*x8*x9 + -x2^3*x3*x4^3*x6^4*x8 + -x2^3*x3*x4^3*x6^3*x7^3*x8^2*x9 + x2^3*x3*x4^3*x6^3*x7^3*x8^2 + x2^3*x3*x4^3*x6^3*x7^3*x9 + -x2^3*x3*x4^3*x6^3*x7^3 + 2*x2^3*x3*x4^3*x6^3*x7^2*x8^2*x9 + -2*x2^3*x3*x4^3*x6^3*x7^2*x8^2 + -x2^3*x3*x4^3*x6^3*x7^2*x8*x9 + x2^3*x3*x4^3*x6^3*x7^2*x8 + -x2^3*x3*x4^3*x6^3*x7^2*x9 + x2^3*x3*x4^3*x6^3*x7^2 + -x2^3*x3*x4^3*x6^3*x7*x8^2*x9 + x2^3*x3*x4^3*x6^3*x7*x8^2 + x2^3*x3*x4^3*x6^3*x7*x8*x9 + -x2^3*x3*x4^3*x6^3*x7*x8 + -x2^3*x3*x4^3*x6*x7*x8*x9^3 + x2^3*x3*x4^3*x6*x7*x8*x9^2 + x2^3*x3*x4^3*x6*x7*x9^3 + -x2^3*x3*x4^3*x6*x7*x9^2 + x2^3*x3*x4^3*x6*x8*x9^3 + -x2^3*x3*x4^3*x6*x8*x9^2 + -x2^3*x3*x4^3*x6*x9^3 + x2^3*x3*x4^3*x6*x9^2 + x2^3*x3*x4^3*x7^3*x8^2*x9 + -x2^3*x3*x4^3*x7^3*x8^2 + -x2^3*x3*x4^3*x7^3*x9 + x2^3*x3*x4^3*x7^3 + -x2^3*x3*x4^3*x7^2*x8^2*x9 + x2^3*x3*x4^3*x7^2*x8^2 + x2^3*x3*x4^3*x7^2*x9 + -x2^3*x3*x4^3*x7^2 + x2^3*x3*x4^3*x7*x8*x9^3 + -x2^3*x3*x4^3*x7*x8*x9^2 + -x2^3*x3*x4^3*x7*x9^3 + x2^3*x3*x4^3*x7*x9^2 + -x2^3*x3*x4^3*x8*x9^3 + x2^3*x3*x4^3*x8*x9^2 + x2^3*x3*x4^3*x9^3 + -x2^3*x3*x4^3*x9^2 + -x2^3*x3*x4^2*x5^3*x6^2*x7*x8*x9 + x2^3*x3*x4^2*x5^3*x6^2*x7*x8 + x2^3*x3*x4^2*x5^3*x6^2*x7*x9 + -x2^3*x3*x4^2*x5^3*x6^2*x7 + x2^3*x3*x4^2*x5^3*x6^2*x8*x9 + -x2^3*x3*x4^2*x5^3*x6^2*x8 + -x2^3*x3*x4^2*x5^3*x6^2*x9 + x2^3*x3*x4^2*x5^3*x6^2 + x2^3*x3*x4^2*x5^3*x6*x7*x8*x9 + -x2^3*x3*x4^2*x5^3*x6*x7*x8 + -x2^3*x3*x4^2*x5^3*x6*x7*x9 + x2^3*x3*x4^2*x5^3*x6*x7 + -x2^3*x3*x4^2*x5^3*x6*x8*x9 + x2^3*x3*x4^2*x5^3*x6*x8 + x2^3*x3*x4^2*x5^3*x6*x9 + -x2^3*x3*x4^2*x5^3*x6 + 2*x2^3*x3*x4^2*x5^2*x6^2*x7*x8*x9 + -2*x2^3*x3*x4^2*x5^2*x6^2*x7*x8 + -2*x2^3*x3*x4^2*x5^2*x6^2*x7*x9 + 2*x2^3*x3*x4^2*x5^2*x6^2*x7 + -2*x2^3*x3*x4^2*x5^2*x6^2*x8*x9 + 2*x2^3*x3*x4^2*x5^2*x6^2*x8 + 2*x2^3*x3*x4^2*x5^2*x6^2*x9 + -2*x2^3*x3*x4^2*x5^2*x6^2 + -x2^3*x3*x4^2*x5^2*x6*x7*x8*x9 + x2^3*x3*x4^2*x5^2*x6*x7*x8 + x2^3*x3*x4^2*x5^2*x6*x7*x9 + -x2^3*x3*x4^2*x5^2*x6*x7 + x2^3*x3*x4^2*x5^2*x6*x8*x9 + -x2^3*x3*x4^2*x5^2*x6*x8 + -x2^3*x3*x4^2*x5^2*x6*x9 + x2^3*x3*x4^2*x5^2*x6 + -x2^3*x3*x4^2*x5^2*x7*x8*x9 + x2^3*x3*x4^2*x5^2*x7*x8 + x2^3*x3*x4^2*x5^2*x7*x9 + -x2^3*x3*x4^2*x5^2*x7 + x2^3*x3*x4^2*x5^2*x8*x9 + -x2^3*x3*x4^2*x5^2*x8 + -x2^3*x3*x4^2*x5^2*x9 + x2^3*x3*x4^2*x5^2 + x2^3*x3*x4^2*x5*x6^5*x7^2*x8^2*x9 + -x2^3*x3*x4^2*x5*x6^5*x7^2*x8^2 + -x2^3*x3*x4^2*x5*x6^5*x7^2*x8*x9 + x2^3*x3*x4^2*x5*x6^5*x7^2*x8 + -2*x2^3*x3*x4^2*x5*x6^5*x7*x8^2*x9 + 2*x2^3*x3*x4^2*x5*x6^5*x7*x8^2 + 2*x2^3*x3*x4^2*x5*x6^5*x7*x8*x9 + -2*x2^3*x3*x4^2*x5*x6^5*x7*x8 + x2^3*x3*x4^2*x5*x6^5*x8^2*x9 + -x2^3*x3*x4^2*x5*x6^5*x8^2 + -x2^3*x3*x4^2*x5*x6^5*x8*x9 + x2^3*x3*x4^2*x5*x6^5*x8 + -2*x2^3*x3*x4^2*x5*x6^4*x7^2*x8^2*x9 + 2*x2^3*x3*x4^2*x5*x6^4*x7^2*x8^2 + 2*x2^3*x3*x4^2*x5*x6^4*x7^2*x8*x9 + -2*x2^3*x3*x4^2*x5*x6^4*x7^2*x8 + 2*x2^3*x3*x4^2*x5*x6^4*x7*x8^2*x9 + -2*x2^3*x3*x4^2*x5*x6^4*x7*x8^2 + -2*x2^3*x3*x4^2*x5*x6^4*x7*x8*x9 + 2*x2^3*x3*x4^2*x5*x6^4*x7*x8 + x2^3*x3*x4^2*x5*x6^3*x7^2*x8^2*x9 + -x2^3*x3*x4^2*x5*x6^3*x7^2*x8^2 + -x2^3*x3*x4^2*x5*x6^3*x7^2*x8*x9 + x2^3*x3*x4^2*x5*x6^3*x7^2*x8 + -x2^3*x3*x4^2*x5*x6^3*x8^2*x9 + x2^3*x3*x4^2*x5*x6^3*x8^2 + x2^3*x3*x4^2*x5*x6^3*x8*x9 + -x2^3*x3*x4^2*x5*x6^3*x8 + -x2^3*x3*x4^2*x5*x6^2*x7*x8*x9 + x2^3*x3*x4^2*x5*x6^2*x7*x8 + x2^3*x3*x4^2*x5*x6^2*x7*x9 + -x2^3*x3*x4^2*x5*x6^2*x7 + x2^3*x3*x4^2*x5*x6^2*x8*x9 + -x2^3*x3*x4^2*x5*x6^2*x8 + -x2^3*x3*x4^2*x5*x6^2*x9 + x2^3*x3*x4^2*x5*x6^2 + -x2^3*x3*x4^2*x5*x6*x7*x8*x9^3 + x2^3*x3*x4^2*x5*x6*x7*x8*x9^2 + x2^3*x3*x4^2*x5*x6*x7*x9^3 + -x2^3*x3*x4^2*x5*x6*x7*x9^2 + x2^3*x3*x4^2*x5*x6*x8*x9^3 + -x2^3*x3*x4^2*x5*x6*x8*x9^2 + -x2^3*x3*x4^2*x5*x6*x9^3 + x2^3*x3*x4^2*x5*x6*x9^2 + x2^3*x3*x4^2*x5*x7*x8*x9^3 + -x2^3*x3*x4^2*x5*x7*x8*x9^2 + x2^3*x3*x4^2*x5*x7*x8*x9 + -x2^3*x3*x4^2*x5*x7*x8 + -x2^3*x3*x4^2*x5*x7*x9^3 + x2^3*x3*x4^2*x5*x7*x9^2 + -x2^3*x3*x4^2*x5*x7*x9 + x2^3*x3*x4^2*x5*x7 + -x2^3*x3*x4^2*x5*x8*x9^3 + x2^3*x3*x4^2*x5*x8*x9^2 + -x2^3*x3*x4^2*x5*x8*x9 + x2^3*x3*x4^2*x5*x8 + x2^3*x3*x4^2*x5*x9^3 + -x2^3*x3*x4^2*x5*x9^2 + x2^3*x3*x4^2*x5*x9 + -x2^3*x3*x4^2*x5 + -x2^3*x3*x4^2*x6^5*x7^2*x8^2*x9 + x2^3*x3*x4^2*x6^5*x7^2*x8^2 + x2^3*x3*x4^2*x6^5*x7^2*x8*x9 + -x2^3*x3*x4^2*x6^5*x7^2*x8 + 2*x2^3*x3*x4^2*x6^5*x7*x8^2*x9 + -2*x2^3*x3*x4^2*x6^5*x7*x8^2 + -2*x2^3*x3*x4^2*x6^5*x7*x8*x9 + 2*x2^3*x3*x4^2*x6^5*x7*x8 + -x2^3*x3*x4^2*x6^5*x8^2*x9 + x2^3*x3*x4^2*x6^5*x8^2 + x2^3*x3*x4^2*x6^5*x8*x9 + -x2^3*x3*x4^2*x6^5*x8 + 2*x2^3*x3*x4^2*x6^4*x7^2*x8^2*x9 + -2*x2^3*x3*x4^2*x6^4*x7^2*x8^2 + -2*x2^3*x3*x4^2*x6^4*x7^2*x8*x9 + 2*x2^3*x3*x4^2*x6^4*x7^2*x8 + -2*x2^3*x3*x4^2*x6^4*x7*x8^2*x9 + 2*x2^3*x3*x4^2*x6^4*x7*x8^2 + 2*x2^3*x3*x4^2*x6^4*x7*x8*x9 + -2*x2^3*x3*x4^2*x6^4*x7*x8 + -x2^3*x3*x4^2*x6^3*x7^2*x8^2*x9 + x2^3*x3*x4^2*x6^3*x7^2*x8^2 + x2^3*x3*x4^2*x6^3*x7^2*x8*x9 + -x2^3*x3*x4^2*x6^3*x7^2*x8 + x2^3*x3*x4^2*x6^3*x8^2*x9 + -x2^3*x3*x4^2*x6^3*x8^2 + -x2^3*x3*x4^2*x6^3*x8*x9 + x2^3*x3*x4^2*x6^3*x8 + x2^3*x3*x4^2*x6*x7*x8*x9^3 + -x2^3*x3*x4^2*x6*x7*x8*x9^2 + -x2^3*x3*x4^2*x6*x7*x9^3 + x2^3*x3*x4^2*x6*x7*x9^2 + -x2^3*x3*x4^2*x6*x8*x9^3 + x2^3*x3*x4^2*x6*x8*x9^2 + x2^3*x3*x4^2*x6*x9^3 + -x2^3*x3*x4^2*x6*x9^2 + -x2^3*x3*x4^2*x7*x8*x9^3 + x2^3*x3*x4^2*x7*x8*x9^2 + x2^3*x3*x4^2*x7*x9^3 + -x2^3*x3*x4^2*x7*x9^2 + x2^3*x3*x4^2*x8*x9^3 + -x2^3*x3*x4^2*x8*x9^2 + -x2^3*x3*x4^2*x9^3 + x2^3*x3*x4^2*x9^2 + x2^3*x3*x4*x5^5*x6*x7^2*x8*x9 + -x2^3*x3*x4*x5^5*x6*x7^2*x8 + -x2^3*x3*x4*x5^5*x6*x7^2*x9 + x2^3*x3*x4*x5^5*x6*x7^2 + -x2^3*x3*x4*x5^5*x6*x8*x9 + x2^3*x3*x4*x5^5*x6*x8 + x2^3*x3*x4*x5^5*x6*x9 + -x2^3*x3*x4*x5^5*x6 + -x2^3*x3*x4*x5^5*x7^2*x8*x9 + x2^3*x3*x4*x5^5*x7^2*x8 + x2^3*x3*x4*x5^5*x7^2*x9 + -x2^3*x3*x4*x5^5*x7^2 + x2^3*x3*x4*x5^5*x8*x9 + -x2^3*x3*x4*x5^5*x8 + -x2^3*x3*x4*x5^5*x9 + x2^3*x3*x4*x5^5 + -x2^3*x3*x4*x5^4*x6*x7^2*x8*x9 + x2^3*x3*x4*x5^4*x6*x7^2*x8 + x2^3*x3*x4*x5^4*x6*x7^2*x9 + -x2^3*x3*x4*x5^4*x6*x7^2 + x2^3*x3*x4*x5^4*x6*x8*x9 + -x2^3*x3*x4*x5^4*x6*x8 + -x2^3*x3*x4*x5^4*x6*x9 + x2^3*x3*x4*x5^4*x6 + x2^3*x3*x4*x5^4*x7^2*x8*x9 + -x2^3*x3*x4*x5^4*x7^2*x8 + -x2^3*x3*x4*x5^4*x7^2*x9 + x2^3*x3*x4*x5^4*x7^2 + -x2^3*x3*x4*x5^4*x8*x9 + x2^3*x3*x4*x5^4*x8 + x2^3*x3*x4*x5^4*x9 + -x2^3*x3*x4*x5^4 + x2^3*x3*x4*x5^2*x6*x7^3*x8*x9^2 + -x2^3*x3*x4*x5^2*x6*x7^3*x8*x9 + -x2^3*x3*x4*x5^2*x6*x7^3*x9^2 + x2^3*x3*x4*x5^2*x6*x7^3*x9 + -x2^3*x3*x4*x5^2*x6*x7^2*x8*x9^2 + x2^3*x3*x4*x5^2*x6*x7^2*x8*x9 + x2^3*x3*x4*x5^2*x6*x7^2*x9^2 + -x2^3*x3*x4*x5^2*x6*x7^2*x9 + -x2^3*x3*x4*x5^2*x7^3*x8*x9^2 + x2^3*x3*x4*x5^2*x7^3*x8*x9 + x2^3*x3*x4*x5^2*x7^3*x9^2 + -x2^3*x3*x4*x5^2*x7^3*x9 + x2^3*x3*x4*x5^2*x7^2*x8*x9^2 + -x2^3*x3*x4*x5^2*x7^2*x8*x9 + -x2^3*x3*x4*x5^2*x7^2*x9^2 + x2^3*x3*x4*x5^2*x7^2*x9 + x2^3*x3*x4*x5*x6^8*x7*x8*x9 + -x2^3*x3*x4*x5*x6^8*x7*x8 + -x2^3*x3*x4*x5*x6^8*x7*x9 + x2^3*x3*x4*x5*x6^8*x7 + -x2^3*x3*x4*x5*x6^8*x8*x9 + x2^3*x3*x4*x5*x6^8*x8 + x2^3*x3*x4*x5*x6^8*x9 + -x2^3*x3*x4*x5*x6^8 + -x2^3*x3*x4*x5*x6^6*x7*x8*x9 + x2^3*x3*x4*x5*x6^6*x7*x8 + x2^3*x3*x4*x5*x6^6*x7*x9 + -x2^3*x3*x4*x5*x6^6*x7 + x2^3*x3*x4*x5*x6^6*x8*x9 + -x2^3*x3*x4*x5*x6^6*x8 + -x2^3*x3*x4*x5*x6^6*x9 + x2^3*x3*x4*x5*x6^6 + -x2^3*x3*x4*x5*x6^5*x7^2*x8^2*x9 + x2^3*x3*x4*x5*x6^5*x7^2*x8^2 + x2^3*x3*x4*x5*x6^5*x7^2*x8*x9 + -x2^3*x3*x4*x5*x6^5*x7^2*x8 + x2^3*x3*x4*x5*x6^5*x7*x8^2*x9 + -x2^3*x3*x4*x5*x6^5*x7*x8^2 + -x2^3*x3*x4*x5*x6^5*x7*x8*x9 + x2^3*x3*x4*x5*x6^5*x7*x8 + x2^3*x3*x4*x5*x6^4*x7^3*x8^2*x9 + -x2^3*x3*x4*x5*x6^4*x7^3*x8^2 + -x2^3*x3*x4*x5*x6^4*x7^3*x9 + x2^3*x3*x4*x5*x6^4*x7^3 + -x2^3*x3*x4*x5*x6^4*x7^2*x8*x9 + x2^3*x3*x4*x5*x6^4*x7^2*x8 + x2^3*x3*x4*x5*x6^4*x7^2*x9 + -x2^3*x3*x4*x5*x6^4*x7^2 + -x2^3*x3*x4*x5*x6^4*x7*x8^2*x9 + x2^3*x3*x4*x5*x6^4*x7*x8^2 + x2^3*x3*x4*x5*x6^4*x7*x8*x9 + -x2^3*x3*x4*x5*x6^4*x7*x8 + -x2^3*x3*x4*x5*x6^3*x7^3*x8^2*x9 + x2^3*x3*x4*x5*x6^3*x7^3*x8^2 + x2^3*x3*x4*x5*x6^3*x7^3*x9 + -x2^3*x3*x4*x5*x6^3*x7^3 + x2^3*x3*x4*x5*x6^3*x7^2*x8^2*x9 + -x2^3*x3*x4*x5*x6^3*x7^2*x8^2 + -x2^3*x3*x4*x5*x6^3*x7^2*x9 + x2^3*x3*x4*x5*x6^3*x7^2 + -x2^3*x3*x4*x6^8*x7*x8*x9 + x2^3*x3*x4*x6^8*x7*x8 + x2^3*x3*x4*x6^8*x7*x9 + -x2^3*x3*x4*x6^8*x7 + x2^3*x3*x4*x6^8*x8*x9 + -x2^3*x3*x4*x6^8*x8 + -x2^3*x3*x4*x6^8*x9 + x2^3*x3*x4*x6^8 + x2^3*x3*x4*x6^6*x7*x8*x9 + -x2^3*x3*x4*x6^6*x7*x8 + -x2^3*x3*x4*x6^6*x7*x9 + x2^3*x3*x4*x6^6*x7 + -x2^3*x3*x4*x6^6*x8*x9 + x2^3*x3*x4*x6^6*x8 + x2^3*x3*x4*x6^6*x9 + -x2^3*x3*x4*x6^6 + x2^3*x3*x4*x6^5*x7^2*x8^2*x9 + -x2^3*x3*x4*x6^5*x7^2*x8^2 + -x2^3*x3*x4*x6^5*x7^2*x8*x9 + x2^3*x3*x4*x6^5*x7^2*x8 + -x2^3*x3*x4*x6^5*x7*x8^2*x9 + x2^3*x3*x4*x6^5*x7*x8^2 + x2^3*x3*x4*x6^5*x7*x8*x9 + -x2^3*x3*x4*x6^5*x7*x8 + -x2^3*x3*x4*x6^4*x7^3*x8^2*x9 + x2^3*x3*x4*x6^4*x7^3*x8^2 + x2^3*x3*x4*x6^4*x7^3*x9 + -x2^3*x3*x4*x6^4*x7^3 + x2^3*x3*x4*x6^4*x7^2*x8*x9 + -x2^3*x3*x4*x6^4*x7^2*x8 + -x2^3*x3*x4*x6^4*x7^2*x9 + x2^3*x3*x4*x6^4*x7^2 + x2^3*x3*x4*x6^4*x7*x8^2*x9 + -x2^3*x3*x4*x6^4*x7*x8^2 + -x2^3*x3*x4*x6^4*x7*x8*x9 + x2^3*x3*x4*x6^4*x7*x8 + x2^3*x3*x4*x6^3*x7^3*x8^2*x9 + -x2^3*x3*x4*x6^3*x7^3*x8^2 + -x2^3*x3*x4*x6^3*x7^3*x9 + x2^3*x3*x4*x6^3*x7^3 + -x2^3*x3*x4*x6^3*x7^2*x8^2*x9 + x2^3*x3*x4*x6^3*x7^2*x8^2 + x2^3*x3*x4*x6^3*x7^2*x9 + -x2^3*x3*x4*x6^3*x7^2 + -x2^3*x3*x4*x6*x7^3*x8*x9^2 + x2^3*x3*x4*x6*x7^3*x8*x9 + x2^3*x3*x4*x6*x7^3*x9^2 + -x2^3*x3*x4*x6*x7^3*x9 + x2^3*x3*x4*x6*x7^2*x8*x9^2 + -x2^3*x3*x4*x6*x7^2*x8*x9 + -x2^3*x3*x4*x6*x7^2*x9^2 + x2^3*x3*x4*x6*x7^2*x9 + x2^3*x3*x4*x7^3*x8*x9^2 + -x2^3*x3*x4*x7^3*x8*x9 + -x2^3*x3*x4*x7^3*x9^2 + x2^3*x3*x4*x7^3*x9 + -x2^3*x3*x4*x7^2*x8*x9^2 + x2^3*x3*x4*x7^2*x8*x9 + x2^3*x3*x4*x7^2*x9^2 + -x2^3*x3*x4*x7^2*x9 + -x2^3*x3*x5^5*x6*x7^2*x8*x9 + x2^3*x3*x5^5*x6*x7^2*x8 + x2^3*x3*x5^5*x6*x7^2*x9 + -x2^3*x3*x5^5*x6*x7^2 + x2^3*x3*x5^5*x6*x8*x9 + -x2^3*x3*x5^5*x6*x8 + -x2^3*x3*x5^5*x6*x9 + x2^3*x3*x5^5*x6 + x2^3*x3*x5^5*x7^2*x8*x9 + -x2^3*x3*x5^5*x7^2*x8 + -x2^3*x3*x5^5*x7^2*x9 + x2^3*x3*x5^5*x7^2 + -x2^3*x3*x5^5*x8*x9 + x2^3*x3*x5^5*x8 + x2^3*x3*x5^5*x9 + -x2^3*x3*x5^5 + x2^3*x3*x5^4*x6*x7^2*x8*x9 + -x2^3*x3*x5^4*x6*x7^2*x8 + -x2^3*x3*x5^4*x6*x7^2*x9 + x2^3*x3*x5^4*x6*x7^2 + -x2^3*x3*x5^4*x6*x8*x9 + x2^3*x3*x5^4*x6*x8 + x2^3*x3*x5^4*x6*x9 + -x2^3*x3*x5^4*x6 + -x2^3*x3*x5^4*x7^2*x8*x9 + x2^3*x3*x5^4*x7^2*x8 + x2^3*x3*x5^4*x7^2*x9 + -x2^3*x3*x5^4*x7^2 + x2^3*x3*x5^4*x8*x9 + -x2^3*x3*x5^4*x8 + -x2^3*x3*x5^4*x9 + x2^3*x3*x5^4 + x2^3*x3*x5^3*x6^2*x7*x8*x9 + -x2^3*x3*x5^3*x6^2*x7*x8 + -x2^3*x3*x5^3*x6^2*x7*x9 + x2^3*x3*x5^3*x6^2*x7 + -x2^3*x3*x5^3*x6^2*x8*x9 + x2^3*x3*x5^3*x6^2*x8 + x2^3*x3*x5^3*x6^2*x9 + -x2^3*x3*x5^3*x6^2 + -x2^3*x3*x5^3*x6*x7*x8*x9 + x2^3*x3*x5^3*x6*x7*x8 + x2^3*x3*x5^3*x6*x7*x9 + -x2^3*x3*x5^3*x6*x7 + x2^3*x3*x5^3*x6*x8*x9 + -x2^3*x3*x5^3*x6*x8 + -x2^3*x3*x5^3*x6*x9 + x2^3*x3*x5^3*x6 + -x2^3*x3*x5^2*x6^2*x7*x8*x9 + x2^3*x3*x5^2*x6^2*x7*x8 + x2^3*x3*x5^2*x6^2*x7*x9 + -x2^3*x3*x5^2*x6^2*x7 + x2^3*x3*x5^2*x6^2*x8*x9 + -x2^3*x3*x5^2*x6^2*x8 + -x2^3*x3*x5^2*x6^2*x9 + x2^3*x3*x5^2*x6^2 + -x2^3*x3*x5^2*x6*x7^3*x8*x9^2 + x2^3*x3*x5^2*x6*x7^3*x8 + x2^3*x3*x5^2*x6*x7^3*x9^2 + -x2^3*x3*x5^2*x6*x7^3 + x2^3*x3*x5^2*x6*x7^2*x8*x9^2 + -x2^3*x3*x5^2*x6*x7^2*x8 + -x2^3*x3*x5^2*x6*x7^2*x9^2 + x2^3*x3*x5^2*x6*x7^2 + x2^3*x3*x5^2*x6*x7*x8*x9 + -x2^3*x3*x5^2*x6*x7*x8 + -x2^3*x3*x5^2*x6*x7*x9 + x2^3*x3*x5^2*x6*x7 + -x2^3*x3*x5^2*x6*x8*x9 + x2^3*x3*x5^2*x6*x8 + x2^3*x3*x5^2*x6*x9 + -x2^3*x3*x5^2*x6 + x2^3*x3*x5^2*x7^3*x8*x9^2 + -x2^3*x3*x5^2*x7^3*x8 + -x2^3*x3*x5^2*x7^3*x9^2 + x2^3*x3*x5^2*x7^3 + -x2^3*x3*x5^2*x7^2*x8*x9^2 + x2^3*x3*x5^2*x7^2*x8 + x2^3*x3*x5^2*x7^2*x9^2 + -x2^3*x3*x5^2*x7^2 + -x2^3*x3*x5*x6^8*x7*x8*x9 + x2^3*x3*x5*x6^8*x7*x8 + x2^3*x3*x5*x6^8*x7*x9 + -x2^3*x3*x5*x6^8*x7 + x2^3*x3*x5*x6^8*x8*x9 + -x2^3*x3*x5*x6^8*x8 + -x2^3*x3*x5*x6^8*x9 + x2^3*x3*x5*x6^8 + x2^3*x3*x5*x6^6*x7*x8*x9 + -x2^3*x3*x5*x6^6*x7*x8 + -x2^3*x3*x5*x6^6*x7*x9 + x2^3*x3*x5*x6^6*x7 + -x2^3*x3*x5*x6^6*x8*x9 + x2^3*x3*x5*x6^6*x8 + x2^3*x3*x5*x6^6*x9 + -x2^3*x3*x5*x6^6 + -x2^3*x3*x5*x6^4*x7^3*x8^2*x9 + x2^3*x3*x5*x6^4*x7^3*x8^2 + x2^3*x3*x5*x6^4*x7^3*x9 + -x2^3*x3*x5*x6^4*x7^3 + x2^3*x3*x5*x6^4*x7^2*x8^2*x9 + -x2^3*x3*x5*x6^4*x7^2*x8^2 + -x2^3*x3*x5*x6^4*x7^2*x9 + x2^3*x3*x5*x6^4*x7^2 + x2^3*x3*x5*x6*x7^3*x8*x9 + -x2^3*x3*x5*x6*x7^3*x8 + -x2^3*x3*x5*x6*x7^3*x9 + x2^3*x3*x5*x6*x7^3 + -x2^3*x3*x5*x6*x7^2*x8*x9 + x2^3*x3*x5*x6*x7^2*x8 + x2^3*x3*x5*x6*x7^2*x9 + -x2^3*x3*x5*x6*x7^2 + x2^3*x3*x5*x7^3*x8^2*x9 + -x2^3*x3*x5*x7^3*x8^2 + -x2^3*x3*x5*x7^3*x8*x9 + x2^3*x3*x5*x7^3*x8 + -x2^3*x3*x5*x7^2*x8^2*x9 + x2^3*x3*x5*x7^2*x8^2 + x2^3*x3*x5*x7^2*x8*x9 + -x2^3*x3*x5*x7^2*x8 + x2^3*x3*x6^8*x7*x8*x9 + -x2^3*x3*x6^8*x7*x8 + -x2^3*x3*x6^8*x7*x9 + x2^3*x3*x6^8*x7 + -x2^3*x3*x6^8*x8*x9 + x2^3*x3*x6^8*x8 + x2^3*x3*x6^8*x9 + -x2^3*x3*x6^8 + -x2^3*x3*x6^6*x7*x8*x9 + x2^3*x3*x6^6*x7*x8 + x2^3*x3*x6^6*x7*x9 + -x2^3*x3*x6^6*x7 + x2^3*x3*x6^6*x8*x9 + -x2^3*x3*x6^6*x8 + -x2^3*x3*x6^6*x9 + x2^3*x3*x6^6 + x2^3*x3*x6^4*x7^3*x8^2*x9 + -x2^3*x3*x6^4*x7^3*x8^2 + -x2^3*x3*x6^4*x7^3*x9 + x2^3*x3*x6^4*x7^3 + -x2^3*x3*x6^4*x7^2*x8^2*x9 + x2^3*x3*x6^4*x7^2*x8^2 + x2^3*x3*x6^4*x7^2*x9 + -x2^3*x3*x6^4*x7^2 + x2^3*x3*x6*x7^3*x8*x9^2 + -x2^3*x3*x6*x7^3*x8*x9 + -x2^3*x3*x6*x7^3*x9^2 + x2^3*x3*x6*x7^3*x9 + -x2^3*x3*x6*x7^2*x8*x9^2 + x2^3*x3*x6*x7^2*x8*x9 + x2^3*x3*x6*x7^2*x9^2 + -x2^3*x3*x6*x7^2*x9 + -x2^3*x3*x7^3*x8^2*x9 + x2^3*x3*x7^3*x8^2 + -x2^3*x3*x7^3*x8*x9^2 + x2^3*x3*x7^3*x8*x9 + x2^3*x3*x7^3*x9^2 + -x2^3*x3*x7^3 + x2^3*x3*x7^2*x8^2*x9 + -x2^3*x3*x7^2*x8^2 + x2^3*x3*x7^2*x8*x9^2 + -x2^3*x3*x7^2*x8*x9 + -x2^3*x3*x7^2*x9^2 + x2^3*x3*x7^2 + -x2^3*x4^8*x5*x6^2*x7*x8*x9 + x2^3*x4^8*x5*x6^2*x7*x8 + x2^3*x4^8*x5*x6^2*x7*x9 + -x2^3*x4^8*x5*x6^2*x7 + x2^3*x4^8*x5*x6^2*x8*x9 + -x2^3*x4^8*x5*x6^2*x8 + -x2^3*x4^8*x5*x6^2*x9 + x2^3*x4^8*x5*x6^2 + -x2^3*x4^8*x5*x6*x7*x8*x9^2 + x2^3*x4^8*x5*x6*x7*x8*x9 + x2^3*x4^8*x5*x6*x7*x9^2 + -x2^3*x4^8*x5*x6*x7*x9 + x2^3*x4^8*x5*x6*x8*x9^2 + -x2^3*x4^8*x5*x6*x8*x9 + -x2^3*x4^8*x5*x6*x9^2 + x2^3*x4^8*x5*x6*x9 + x2^3*x4^8*x5*x7*x8*x9^2 + -x2^3*x4^8*x5*x7*x8 + -x2^3*x4^8*x5*x7*x9^2 + x2^3*x4^8*x5*x7 + -x2^3*x4^8*x5*x8*x9^2 + x2^3*x4^8*x5*x8 + x2^3*x4^8*x5*x9^2 + -x2^3*x4^8*x5 + x2^3*x4^8*x6^2*x7*x8*x9 + -x2^3*x4^8*x6^2*x7*x8 + -x2^3*x4^8*x6^2*x7*x9 + x2^3*x4^8*x6^2*x7 + -x2^3*x4^8*x6^2*x8*x9 + x2^3*x4^8*x6^2*x8 + x2^3*x4^8*x6^2*x9 + -x2^3*x4^8*x6^2 + x2^3*x4^8*x6*x7*x8*x9^2 + -x2^3*x4^8*x6*x7*x8*x9 + -x2^3*x4^8*x6*x7*x9^2 + x2^3*x4^8*x6*x7*x9 + -x2^3*x4^8*x6*x8*x9^2 + x2^3*x4^8*x6*x8*x9 + x2^3*x4^8*x6*x9^2 + -x2^3*x4^8*x6*x9 + -x2^3*x4^8*x7*x8*x9^2 + x2^3*x4^8*x7*x8 + x2^3*x4^8*x7*x9^2 + -x2^3*x4^8*x7 + x2^3*x4^8*x8*x9^2 + -x2^3*x4^8*x8 + -x2^3*x4^8*x9^2 + x2^3*x4^8 + x2^3*x4^7*x5*x6^2*x7*x8*x9 + -x2^3*x4^7*x5*x6^2*x7*x8 + -x2^3*x4^7*x5*x6^2*x7*x9 + x2^3*x4^7*x5*x6^2*x7 + -x2^3*x4^7*x5*x6^2*x8*x9 + x2^3*x4^7*x5*x6^2*x8 + x2^3*x4^7*x5*x6^2*x9 + -x2^3*x4^7*x5*x6^2 + x2^3*x4^7*x5*x6*x7*x8*x9^2 + -x2^3*x4^7*x5*x6*x7*x8*x9 + -x2^3*x4^7*x5*x6*x7*x9^2 + x2^3*x4^7*x5*x6*x7*x9 + -x2^3*x4^7*x5*x6*x8*x9^2 + x2^3*x4^7*x5*x6*x8*x9 + x2^3*x4^7*x5*x6*x9^2 + -x2^3*x4^7*x5*x6*x9 + -x2^3*x4^7*x5*x7*x8*x9^2 + x2^3*x4^7*x5*x7*x8 + x2^3*x4^7*x5*x7*x9^2 + -x2^3*x4^7*x5*x7 + x2^3*x4^7*x5*x8*x9^2 + -x2^3*x4^7*x5*x8 + -x2^3*x4^7*x5*x9^2 + x2^3*x4^7*x5 + -x2^3*x4^7*x6^2*x7*x8*x9 + x2^3*x4^7*x6^2*x7*x8 + x2^3*x4^7*x6^2*x7*x9 + -x2^3*x4^7*x6^2*x7 + x2^3*x4^7*x6^2*x8*x9 + -x2^3*x4^7*x6^2*x8 + -x2^3*x4^7*x6^2*x9 + x2^3*x4^7*x6^2 + -x2^3*x4^7*x6*x7*x8*x9^2 + x2^3*x4^7*x6*x7*x8*x9 + x2^3*x4^7*x6*x7*x9^2 + -x2^3*x4^7*x6*x7*x9 + x2^3*x4^7*x6*x8*x9^2 + -x2^3*x4^7*x6*x8*x9 + -x2^3*x4^7*x6*x9^2 + x2^3*x4^7*x6*x9 + x2^3*x4^7*x7*x8*x9^2 + -x2^3*x4^7*x7*x8 + -x2^3*x4^7*x7*x9^2 + x2^3*x4^7*x7 + -x2^3*x4^7*x8*x9^2 + x2^3*x4^7*x8 + x2^3*x4^7*x9^2 + -x2^3*x4^7 + -x2^3*x4^5*x5*x6^5*x7*x8*x9 + x2^3*x4^5*x5*x6^5*x7*x8 + x2^3*x4^5*x5*x6^5*x7*x9 + -x2^3*x4^5*x5*x6^5*x7 + x2^3*x4^5*x5*x6^5*x8*x9 + -x2^3*x4^5*x5*x6^5*x8 + -x2^3*x4^5*x5*x6^5*x9 + x2^3*x4^5*x5*x6^5 + x2^3*x4^5*x5*x6^4*x7*x8*x9 + -x2^3*x4^5*x5*x6^4*x7*x8 + -x2^3*x4^5*x5*x6^4*x7*x9 + x2^3*x4^5*x5*x6^4*x7 + -x2^3*x4^5*x5*x6^4*x8*x9 + x2^3*x4^5*x5*x6^4*x8 + x2^3*x4^5*x5*x6^4*x9 + -x2^3*x4^5*x5*x6^4 + x2^3*x4^5*x6^5*x7*x8*x9 + -x2^3*x4^5*x6^5*x7*x8 + -x2^3*x4^5*x6^5*x7*x9 + x2^3*x4^5*x6^5*x7 + -x2^3*x4^5*x6^5*x8*x9 + x2^3*x4^5*x6^5*x8 + x2^3*x4^5*x6^5*x9 + -x2^3*x4^5*x6^5 + -x2^3*x4^5*x6^4*x7*x8*x9 + x2^3*x4^5*x6^4*x7*x8 + x2^3*x4^5*x6^4*x7*x9 + -x2^3*x4^5*x6^4*x7 + x2^3*x4^5*x6^4*x8*x9 + -x2^3*x4^5*x6^4*x8 + -x2^3*x4^5*x6^4*x9 + x2^3*x4^5*x6^4 + x2^3*x4^4*x5*x6^5*x7*x8*x9 + -x2^3*x4^4*x5*x6^5*x7*x8 + -x2^3*x4^4*x5*x6^5*x7*x9 + x2^3*x4^4*x5*x6^5*x7 + -x2^3*x4^4*x5*x6^5*x8*x9 + x2^3*x4^4*x5*x6^5*x8 + x2^3*x4^4*x5*x6^5*x9 + -x2^3*x4^4*x5*x6^5 + -x2^3*x4^4*x5*x6^4*x7*x8^2*x9 + x2^3*x4^4*x5*x6^4*x7*x8^2 + x2^3*x4^4*x5*x6^4*x7*x9 + -x2^3*x4^4*x5*x6^4*x7 + x2^3*x4^4*x5*x6^4*x8^2*x9 + -x2^3*x4^4*x5*x6^4*x8^2 + -x2^3*x4^4*x5*x6^4*x9 + x2^3*x4^4*x5*x6^4 + x2^3*x4^4*x5*x6^3*x7*x8^2*x9 + -x2^3*x4^4*x5*x6^3*x7*x8^2 + -x2^3*x4^4*x5*x6^3*x7*x8*x9 + x2^3*x4^4*x5*x6^3*x7*x8 + -x2^3*x4^4*x5*x6^3*x8^2*x9 + x2^3*x4^4*x5*x6^3*x8^2 + x2^3*x4^4*x5*x6^3*x8*x9 + -x2^3*x4^4*x5*x6^3*x8 + -x2^3*x4^4*x6^5*x7*x8*x9 + x2^3*x4^4*x6^5*x7*x8 + x2^3*x4^4*x6^5*x7*x9 + -x2^3*x4^4*x6^5*x7 + x2^3*x4^4*x6^5*x8*x9 + -x2^3*x4^4*x6^5*x8 + -x2^3*x4^4*x6^5*x9 + x2^3*x4^4*x6^5 + x2^3*x4^4*x6^4*x7*x8^2*x9 + -x2^3*x4^4*x6^4*x7*x8^2 + -x2^3*x4^4*x6^4*x7*x9 + x2^3*x4^4*x6^4*x7 + -x2^3*x4^4*x6^4*x8^2*x9 + x2^3*x4^4*x6^4*x8^2 + x2^3*x4^4*x6^4*x9 + -x2^3*x4^4*x6^4 + -x2^3*x4^4*x6^3*x7*x8^2*x9 + x2^3*x4^4*x6^3*x7*x8^2 + x2^3*x4^4*x6^3*x7*x8*x9 + -x2^3*x4^4*x6^3*x7*x8 + x2^3*x4^4*x6^3*x8^2*x9 + -x2^3*x4^4*x6^3*x8^2 + -x2^3*x4^4*x6^3*x8*x9 + x2^3*x4^4*x6^3*x8 + -x2^3*x4^3*x5^2*x6*x7^3*x8*x9 + x2^3*x4^3*x5^2*x6*x7^3*x8 + x2^3*x4^3*x5^2*x6*x7^3*x9 + -x2^3*x4^3*x5^2*x6*x7^3 + x2^3*x4^3*x5^2*x6*x7^2*x8*x9 + -x2^3*x4^3*x5^2*x6*x7^2*x8 + -x2^3*x4^3*x5^2*x6*x7^2*x9 + x2^3*x4^3*x5^2*x6*x7^2 + x2^3*x4^3*x5^2*x7^3*x8*x9 + -x2^3*x4^3*x5^2*x7^3*x8 + -x2^3*x4^3*x5^2*x7^3*x9 + x2^3*x4^3*x5^2*x7^3 + -x2^3*x4^3*x5^2*x7^2*x8*x9 + x2^3*x4^3*x5^2*x7^2*x8 + x2^3*x4^3*x5^2*x7^2*x9 + -x2^3*x4^3*x5^2*x7^2 + -x2^3*x4^3*x5*x6^5*x7*x8^2*x9 + x2^3*x4^3*x5*x6^5*x7*x8^2 + x2^3*x4^3*x5*x6^5*x7*x8*x9 + -x2^3*x4^3*x5*x6^5*x7*x8 + x2^3*x4^3*x5*x6^5*x8^2*x9 + -x2^3*x4^3*x5*x6^5*x8^2 + -x2^3*x4^3*x5*x6^5*x8*x9 + x2^3*x4^3*x5*x6^5*x8 + -x2^3*x4^3*x5*x6^4*x7^2*x8^2*x9 + x2^3*x4^3*x5*x6^4*x7^2*x8^2 + x2^3*x4^3*x5*x6^4*x7^2*x8*x9 + -x2^3*x4^3*x5*x6^4*x7^2*x8 + 2*x2^3*x4^3*x5*x6^4*x7*x8^2*x9 + -2*x2^3*x4^3*x5*x6^4*x7*x8^2 + -2*x2^3*x4^3*x5*x6^4*x7*x8*x9 + 2*x2^3*x4^3*x5*x6^4*x7*x8 + -x2^3*x4^3*x5*x6^4*x8^2*x9 + x2^3*x4^3*x5*x6^4*x8^2 + x2^3*x4^3*x5*x6^4*x8*x9 + -x2^3*x4^3*x5*x6^4*x8 + -x2^3*x4^3*x5*x6^3*x7^3*x8^2*x9 + x2^3*x4^3*x5*x6^3*x7^3*x8^2 + x2^3*x4^3*x5*x6^3*x7^3*x9 + -x2^3*x4^3*x5*x6^3*x7^3 + 2*x2^3*x4^3*x5*x6^3*x7^2*x8^2*x9 + -2*x2^3*x4^3*x5*x6^3*x7^2*x8^2 + -x2^3*x4^3*x5*x6^3*x7^2*x8*x9 + x2^3*x4^3*x5*x6^3*x7^2*x8 + -x2^3*x4^3*x5*x6^3*x7^2*x9 + x2^3*x4^3*x5*x6^3*x7^2 + -x2^3*x4^3*x5*x6^3*x7*x8^2*x9 + x2^3*x4^3*x5*x6^3*x7*x8^2 + x2^3*x4^3*x5*x6^3*x7*x8*x9 + -x2^3*x4^3*x5*x6^3*x7*x8 + x2^3*x4^3*x5*x6*x7^3*x8*x9 + -x2^3*x4^3*x5*x6*x7^3*x8 + -x2^3*x4^3*x5*x6*x7^3*x9 + x2^3*x4^3*x5*x6*x7^3 + -x2^3*x4^3*x5*x6*x7^2*x8*x9 + x2^3*x4^3*x5*x6*x7^2*x8 + x2^3*x4^3*x5*x6*x7^2*x9 + -x2^3*x4^3*x5*x6*x7^2 + -x2^3*x4^3*x5*x6*x7*x8*x9^3 + x2^3*x4^3*x5*x6*x7*x8*x9^2 + x2^3*x4^3*x5*x6*x7*x9^3 + -x2^3*x4^3*x5*x6*x7*x9^2 + x2^3*x4^3*x5*x6*x8*x9^3 + -x2^3*x4^3*x5*x6*x8*x9^2 + -x2^3*x4^3*x5*x6*x9^3 + x2^3*x4^3*x5*x6*x9^2 + x2^3*x4^3*x5*x7^3*x8^2*x9 + -x2^3*x4^3*x5*x7^3*x8^2 + -x2^3*x4^3*x5*x7^3*x8*x9 + x2^3*x4^3*x5*x7^3*x8 + -x2^3*x4^3*x5*x7^2*x8^2*x9 + x2^3*x4^3*x5*x7^2*x8^2 + x2^3*x4^3*x5*x7^2*x8*x9 + -x2^3*x4^3*x5*x7^2*x8 + x2^3*x4^3*x5*x7*x8*x9^3 + -x2^3*x4^3*x5*x7*x8*x9^2 + -x2^3*x4^3*x5*x7*x9^3 + x2^3*x4^3*x5*x7*x9^2 + -x2^3*x4^3*x5*x8*x9^3 + x2^3*x4^3*x5*x8*x9^2 + x2^3*x4^3*x5*x9^3 + -x2^3*x4^3*x5*x9^2 + x2^3*x4^3*x6^5*x7*x8^2*x9 + -x2^3*x4^3*x6^5*x7*x8^2 + -x2^3*x4^3*x6^5*x7*x8*x9 + x2^3*x4^3*x6^5*x7*x8 + -x2^3*x4^3*x6^5*x8^2*x9 + x2^3*x4^3*x6^5*x8^2 + x2^3*x4^3*x6^5*x8*x9 + -x2^3*x4^3*x6^5*x8 + x2^3*x4^3*x6^4*x7^2*x8^2*x9 + -x2^3*x4^3*x6^4*x7^2*x8^2 + -x2^3*x4^3*x6^4*x7^2*x8*x9 + x2^3*x4^3*x6^4*x7^2*x8 + -2*x2^3*x4^3*x6^4*x7*x8^2*x9 + 2*x2^3*x4^3*x6^4*x7*x8^2 + 2*x2^3*x4^3*x6^4*x7*x8*x9 + -2*x2^3*x4^3*x6^4*x7*x8 + x2^3*x4^3*x6^4*x8^2*x9 + -x2^3*x4^3*x6^4*x8^2 + -x2^3*x4^3*x6^4*x8*x9 + x2^3*x4^3*x6^4*x8 + x2^3*x4^3*x6^3*x7^3*x8^2*x9 + -x2^3*x4^3*x6^3*x7^3*x8^2 + -x2^3*x4^3*x6^3*x7^3*x9 + x2^3*x4^3*x6^3*x7^3 + -2*x2^3*x4^3*x6^3*x7^2*x8^2*x9 + 2*x2^3*x4^3*x6^3*x7^2*x8^2 + x2^3*x4^3*x6^3*x7^2*x8*x9 + -x2^3*x4^3*x6^3*x7^2*x8 + x2^3*x4^3*x6^3*x7^2*x9 + -x2^3*x4^3*x6^3*x7^2 + x2^3*x4^3*x6^3*x7*x8^2*x9 + -x2^3*x4^3*x6^3*x7*x8^2 + -x2^3*x4^3*x6^3*x7*x8*x9 + x2^3*x4^3*x6^3*x7*x8 + x2^3*x4^3*x6*x7*x8*x9^3 + -x2^3*x4^3*x6*x7*x8*x9^2 + -x2^3*x4^3*x6*x7*x9^3 + x2^3*x4^3*x6*x7*x9^2 + -x2^3*x4^3*x6*x8*x9^3 + x2^3*x4^3*x6*x8*x9^2 + x2^3*x4^3*x6*x9^3 + -x2^3*x4^3*x6*x9^2 + -x2^3*x4^3*x7^3*x8^2*x9 + x2^3*x4^3*x7^3*x8^2 + x2^3*x4^3*x7^3*x9 + -x2^3*x4^3*x7^3 + x2^3*x4^3*x7^2*x8^2*x9 + -x2^3*x4^3*x7^2*x8^2 + -x2^3*x4^3*x7^2*x9 + x2^3*x4^3*x7^2 + -x2^3*x4^3*x7*x8*x9^3 + x2^3*x4^3*x7*x8*x9^2 + x2^3*x4^3*x7*x9^3 + -x2^3*x4^3*x7*x9^2 + x2^3*x4^3*x8*x9^3 + -x2^3*x4^3*x8*x9^2 + -x2^3*x4^3*x9^3 + x2^3*x4^3*x9^2 + -x2^3*x4^2*x5*x6^5*x7^2*x8^2*x9 + x2^3*x4^2*x5*x6^5*x7^2*x8^2 + x2^3*x4^2*x5*x6^5*x7^2*x8*x9 + -x2^3*x4^2*x5*x6^5*x7^2*x8 + 2*x2^3*x4^2*x5*x6^5*x7*x8^2*x9 + -2*x2^3*x4^2*x5*x6^5*x7*x8^2 + -2*x2^3*x4^2*x5*x6^5*x7*x8*x9 + 2*x2^3*x4^2*x5*x6^5*x7*x8 + -x2^3*x4^2*x5*x6^5*x8^2*x9 + x2^3*x4^2*x5*x6^5*x8^2 + x2^3*x4^2*x5*x6^5*x8*x9 + -x2^3*x4^2*x5*x6^5*x8 + 2*x2^3*x4^2*x5*x6^4*x7^2*x8^2*x9 + -2*x2^3*x4^2*x5*x6^4*x7^2*x8^2 + -2*x2^3*x4^2*x5*x6^4*x7^2*x8*x9 + 2*x2^3*x4^2*x5*x6^4*x7^2*x8 + -2*x2^3*x4^2*x5*x6^4*x7*x8^2*x9 + 2*x2^3*x4^2*x5*x6^4*x7*x8^2 + 2*x2^3*x4^2*x5*x6^4*x7*x8*x9 + -2*x2^3*x4^2*x5*x6^4*x7*x8 + -x2^3*x4^2*x5*x6^3*x7^2*x8^2*x9 + x2^3*x4^2*x5*x6^3*x7^2*x8^2 + x2^3*x4^2*x5*x6^3*x7^2*x8*x9 + -x2^3*x4^2*x5*x6^3*x7^2*x8 + x2^3*x4^2*x5*x6^3*x8^2*x9 + -x2^3*x4^2*x5*x6^3*x8^2 + -x2^3*x4^2*x5*x6^3*x8*x9 + x2^3*x4^2*x5*x6^3*x8 + x2^3*x4^2*x6^5*x7^2*x8^2*x9 + -x2^3*x4^2*x6^5*x7^2*x8^2 + -x2^3*x4^2*x6^5*x7^2*x8*x9 + x2^3*x4^2*x6^5*x7^2*x8 + -2*x2^3*x4^2*x6^5*x7*x8^2*x9 + 2*x2^3*x4^2*x6^5*x7*x8^2 + 2*x2^3*x4^2*x6^5*x7*x8*x9 + -2*x2^3*x4^2*x6^5*x7*x8 + x2^3*x4^2*x6^5*x8^2*x9 + -x2^3*x4^2*x6^5*x8^2 + -x2^3*x4^2*x6^5*x8*x9 + x2^3*x4^2*x6^5*x8 + -2*x2^3*x4^2*x6^4*x7^2*x8^2*x9 + 2*x2^3*x4^2*x6^4*x7^2*x8^2 + 2*x2^3*x4^2*x6^4*x7^2*x8*x9 + -2*x2^3*x4^2*x6^4*x7^2*x8 + 2*x2^3*x4^2*x6^4*x7*x8^2*x9 + -2*x2^3*x4^2*x6^4*x7*x8^2 + -2*x2^3*x4^2*x6^4*x7*x8*x9 + 2*x2^3*x4^2*x6^4*x7*x8 + x2^3*x4^2*x6^3*x7^2*x8^2*x9 + -x2^3*x4^2*x6^3*x7^2*x8^2 + -x2^3*x4^2*x6^3*x7^2*x8*x9 + x2^3*x4^2*x6^3*x7^2*x8 + -x2^3*x4^2*x6^3*x8^2*x9 + x2^3*x4^2*x6^3*x8^2 + x2^3*x4^2*x6^3*x8*x9 + -x2^3*x4^2*x6^3*x8 + -x2^3*x4*x5^5*x6*x7^2*x8*x9 + x2^3*x4*x5^5*x6*x7^2*x8 + x2^3*x4*x5^5*x6*x7^2*x9 + -x2^3*x4*x5^5*x6*x7^2 + x2^3*x4*x5^5*x6*x8*x9 + -x2^3*x4*x5^5*x6*x8 + -x2^3*x4*x5^5*x6*x9 + x2^3*x4*x5^5*x6 + x2^3*x4*x5^5*x7^2*x8*x9 + -x2^3*x4*x5^5*x7^2*x8 + -x2^3*x4*x5^5*x7^2*x9 + x2^3*x4*x5^5*x7^2 + -x2^3*x4*x5^5*x8*x9 + x2^3*x4*x5^5*x8 + x2^3*x4*x5^5*x9 + -x2^3*x4*x5^5 + x2^3*x4*x5^4*x6*x7^2*x8*x9 + -x2^3*x4*x5^4*x6*x7^2*x8 + -x2^3*x4*x5^4*x6*x7^2*x9 + x2^3*x4*x5^4*x6*x7^2 + -x2^3*x4*x5^4*x6*x8*x9 + x2^3*x4*x5^4*x6*x8 + x2^3*x4*x5^4*x6*x9 + -x2^3*x4*x5^4*x6 + -x2^3*x4*x5^4*x7^2*x8*x9 + x2^3*x4*x5^4*x7^2*x8 + x2^3*x4*x5^4*x7^2*x9 + -x2^3*x4*x5^4*x7^2 + x2^3*x4*x5^4*x8*x9 + -x2^3*x4*x5^4*x8 + -x2^3*x4*x5^4*x9 + x2^3*x4*x5^4 + -x2^3*x4*x5^2*x6*x7^3*x8*x9^2 + x2^3*x4*x5^2*x6*x7^3*x8*x9 + x2^3*x4*x5^2*x6*x7^3*x9^2 + -x2^3*x4*x5^2*x6*x7^3*x9 + x2^3*x4*x5^2*x6*x7^2*x8*x9^2 + -x2^3*x4*x5^2*x6*x7^2*x8*x9 + -x2^3*x4*x5^2*x6*x7^2*x9^2 + x2^3*x4*x5^2*x6*x7^2*x9 + x2^3*x4*x5^2*x7^3*x8*x9^2 + -x2^3*x4*x5^2*x7^3*x8*x9 + -x2^3*x4*x5^2*x7^3*x9^2 + x2^3*x4*x5^2*x7^3*x9 + -x2^3*x4*x5^2*x7^2*x8*x9^2 + x2^3*x4*x5^2*x7^2*x8*x9 + x2^3*x4*x5^2*x7^2*x9^2 + -x2^3*x4*x5^2*x7^2*x9 + -x2^3*x4*x5*x6^8*x7*x8*x9 + x2^3*x4*x5*x6^8*x7*x8 + x2^3*x4*x5*x6^8*x7*x9 + -x2^3*x4*x5*x6^8*x7 + x2^3*x4*x5*x6^8*x8*x9 + -x2^3*x4*x5*x6^8*x8 + -x2^3*x4*x5*x6^8*x9 + x2^3*x4*x5*x6^8 + x2^3*x4*x5*x6^6*x7*x8*x9 + -x2^3*x4*x5*x6^6*x7*x8 + -x2^3*x4*x5*x6^6*x7*x9 + x2^3*x4*x5*x6^6*x7 + -x2^3*x4*x5*x6^6*x8*x9 + x2^3*x4*x5*x6^6*x8 + x2^3*x4*x5*x6^6*x9 + -x2^3*x4*x5*x6^6 + x2^3*x4*x5*x6^5*x7^2*x8^2*x9 + -x2^3*x4*x5*x6^5*x7^2*x8^2 + -x2^3*x4*x5*x6^5*x7^2*x8*x9 + x2^3*x4*x5*x6^5*x7^2*x8 + -x2^3*x4*x5*x6^5*x7*x8^2*x9 + x2^3*x4*x5*x6^5*x7*x8^2 + x2^3*x4*x5*x6^5*x7*x8*x9 + -x2^3*x4*x5*x6^5*x7*x8 + -x2^3*x4*x5*x6^4*x7^3*x8^2*x9 + x2^3*x4*x5*x6^4*x7^3*x8^2 + x2^3*x4*x5*x6^4*x7^3*x9 + -x2^3*x4*x5*x6^4*x7^3 + x2^3*x4*x5*x6^4*x7^2*x8*x9 + -x2^3*x4*x5*x6^4*x7^2*x8 + -x2^3*x4*x5*x6^4*x7^2*x9 + x2^3*x4*x5*x6^4*x7^2 + x2^3*x4*x5*x6^4*x7*x8^2*x9 + -x2^3*x4*x5*x6^4*x7*x8^2 + -x2^3*x4*x5*x6^4*x7*x8*x9 + x2^3*x4*x5*x6^4*x7*x8 + x2^3*x4*x5*x6^3*x7^3*x8^2*x9 + -x2^3*x4*x5*x6^3*x7^3*x8^2 + -x2^3*x4*x5*x6^3*x7^3*x9 + x2^3*x4*x5*x6^3*x7^3 + -x2^3*x4*x5*x6^3*x7^2*x8^2*x9 + x2^3*x4*x5*x6^3*x7^2*x8^2 + x2^3*x4*x5*x6^3*x7^2*x9 + -x2^3*x4*x5*x6^3*x7^2 + -x2^3*x4*x5*x6*x7*x8*x9^4 + x2^3*x4*x5*x6*x7*x8*x9^3 + x2^3*x4*x5*x6*x7*x9^4 + -x2^3*x4*x5*x6*x7*x9^3 + x2^3*x4*x5*x6*x8*x9^4 + -x2^3*x4*x5*x6*x8*x9^3 + -x2^3*x4*x5*x6*x9^4 + x2^3*x4*x5*x6*x9^3 + x2^3*x4*x5*x7*x8*x9^4 + -x2^3*x4*x5*x7*x8*x9^3 + -x2^3*x4*x5*x7*x9^4 + x2^3*x4*x5*x7*x9^3 + -x2^3*x4*x5*x8*x9^4 + x2^3*x4*x5*x8*x9^3 + x2^3*x4*x5*x9^4 + -x2^3*x4*x5*x9^3 + x2^3*x4*x6^8*x7*x8*x9 + -x2^3*x4*x6^8*x7*x8 + -x2^3*x4*x6^8*x7*x9 + x2^3*x4*x6^8*x7 + -x2^3*x4*x6^8*x8*x9 + x2^3*x4*x6^8*x8 + x2^3*x4*x6^8*x9 + -x2^3*x4*x6^8 + -x2^3*x4*x6^6*x7*x8*x9 + x2^3*x4*x6^6*x7*x8 + x2^3*x4*x6^6*x7*x9 + -x2^3*x4*x6^6*x7 + x2^3*x4*x6^6*x8*x9 + -x2^3*x4*x6^6*x8 + -x2^3*x4*x6^6*x9 + x2^3*x4*x6^6 + -x2^3*x4*x6^5*x7^2*x8^2*x9 + x2^3*x4*x6^5*x7^2*x8^2 + x2^3*x4*x6^5*x7^2*x8*x9 + -x2^3*x4*x6^5*x7^2*x8 + x2^3*x4*x6^5*x7*x8^2*x9 + -x2^3*x4*x6^5*x7*x8^2 + -x2^3*x4*x6^5*x7*x8*x9 + x2^3*x4*x6^5*x7*x8 + x2^3*x4*x6^4*x7^3*x8^2*x9 + -x2^3*x4*x6^4*x7^3*x8^2 + -x2^3*x4*x6^4*x7^3*x9 + x2^3*x4*x6^4*x7^3 + -x2^3*x4*x6^4*x7^2*x8*x9 + x2^3*x4*x6^4*x7^2*x8 + x2^3*x4*x6^4*x7^2*x9 + -x2^3*x4*x6^4*x7^2 + -x2^3*x4*x6^4*x7*x8^2*x9 + x2^3*x4*x6^4*x7*x8^2 + x2^3*x4*x6^4*x7*x8*x9 + -x2^3*x4*x6^4*x7*x8 + -x2^3*x4*x6^3*x7^3*x8^2*x9 + x2^3*x4*x6^3*x7^3*x8^2 + x2^3*x4*x6^3*x7^3*x9 + -x2^3*x4*x6^3*x7^3 + x2^3*x4*x6^3*x7^2*x8^2*x9 + -x2^3*x4*x6^3*x7^2*x8^2 + -x2^3*x4*x6^3*x7^2*x9 + x2^3*x4*x6^3*x7^2 + x2^3*x4*x6*x7^3*x8*x9^2 + -x2^3*x4*x6*x7^3*x8*x9 + -x2^3*x4*x6*x7^3*x9^2 + x2^3*x4*x6*x7^3*x9 + -x2^3*x4*x6*x7^2*x8*x9^2 + x2^3*x4*x6*x7^2*x8*x9 + x2^3*x4*x6*x7^2*x9^2 + -x2^3*x4*x6*x7^2*x9 + x2^3*x4*x6*x7*x8*x9^4 + -x2^3*x4*x6*x7*x8*x9^3 + -x2^3*x4*x6*x7*x9^4 + x2^3*x4*x6*x7*x9^3 + -x2^3*x4*x6*x8*x9^4 + x2^3*x4*x6*x8*x9^3 + x2^3*x4*x6*x9^4 + -x2^3*x4*x6*x9^3 + -x2^3*x4*x7^3*x8*x9^2 + x2^3*x4*x7^3*x8*x9 + x2^3*x4*x7^3*x9^2 + -x2^3*x4*x7^3*x9 + x2^3*x4*x7^2*x8*x9^2 + -x2^3*x4*x7^2*x8*x9 + -x2^3*x4*x7^2*x9^2 + x2^3*x4*x7^2*x9 + -x2^3*x4*x7*x8*x9^4 + x2^3*x4*x7*x8*x9^3 + x2^3*x4*x7*x9^4 + -x2^3*x4*x7*x9^3 + x2^3*x4*x8*x9^4 + -x2^3*x4*x8*x9^3 + -x2^3*x4*x9^4 + x2^3*x4*x9^3 + x2^3*x5^5*x6*x7^2*x8*x9 + -x2^3*x5^5*x6*x7^2*x8 + -x2^3*x5^5*x6*x7^2*x9 + x2^3*x5^5*x6*x7^2 + -x2^3*x5^5*x6*x8*x9 + x2^3*x5^5*x6*x8 + x2^3*x5^5*x6*x9 + -x2^3*x5^5*x6 + -x2^3*x5^5*x7^2*x8*x9 + x2^3*x5^5*x7^2*x8 + x2^3*x5^5*x7^2*x9 + -x2^3*x5^5*x7^2 + x2^3*x5^5*x8*x9 + -x2^3*x5^5*x8 + -x2^3*x5^5*x9 + x2^3*x5^5 + -x2^3*x5^4*x6*x7^2*x8*x9 + x2^3*x5^4*x6*x7^2*x8 + x2^3*x5^4*x6*x7^2*x9 + -x2^3*x5^4*x6*x7^2 + x2^3*x5^4*x6*x8*x9 + -x2^3*x5^4*x6*x8 + -x2^3*x5^4*x6*x9 + x2^3*x5^4*x6 + x2^3*x5^4*x7^2*x8*x9 + -x2^3*x5^4*x7^2*x8 + -x2^3*x5^4*x7^2*x9 + x2^3*x5^4*x7^2 + -x2^3*x5^4*x8*x9 + x2^3*x5^4*x8 + x2^3*x5^4*x9 + -x2^3*x5^4 + x2^3*x5^2*x6*x7^3*x8*x9^2 + -x2^3*x5^2*x6*x7^3*x8 + -x2^3*x5^2*x6*x7^3*x9^2 + x2^3*x5^2*x6*x7^3 + -x2^3*x5^2*x6*x7^2*x8*x9^2 + x2^3*x5^2*x6*x7^2*x8 + x2^3*x5^2*x6*x7^2*x9^2 + -x2^3*x5^2*x6*x7^2 + -x2^3*x5^2*x7^3*x8*x9^2 + x2^3*x5^2*x7^3*x8 + x2^3*x5^2*x7^3*x9^2 + -x2^3*x5^2*x7^3 + x2^3*x5^2*x7^2*x8*x9^2 + -x2^3*x5^2*x7^2*x8 + -x2^3*x5^2*x7^2*x9^2 + x2^3*x5^2*x7^2 + x2^3*x5*x6^8*x7*x8*x9 + -x2^3*x5*x6^8*x7*x8 + -x2^3*x5*x6^8*x7*x9 + x2^3*x5*x6^8*x7 + -x2^3*x5*x6^8*x8*x9 + x2^3*x5*x6^8*x8 + x2^3*x5*x6^8*x9 + -x2^3*x5*x6^8 + -x2^3*x5*x6^6*x7*x8*x9 + x2^3*x5*x6^6*x7*x8 + x2^3*x5*x6^6*x7*x9 + -x2^3*x5*x6^6*x7 + x2^3*x5*x6^6*x8*x9 + -x2^3*x5*x6^6*x8 + -x2^3*x5*x6^6*x9 + x2^3*x5*x6^6 + x2^3*x5*x6^4*x7^3*x8^2*x9 + -x2^3*x5*x6^4*x7^3*x8^2 + -x2^3*x5*x6^4*x7^3*x9 + x2^3*x5*x6^4*x7^3 + -x2^3*x5*x6^4*x7^2*x8^2*x9 + x2^3*x5*x6^4*x7^2*x8^2 + x2^3*x5*x6^4*x7^2*x9 + -x2^3*x5*x6^4*x7^2 + -x2^3*x5*x6*x7^3*x8*x9 + x2^3*x5*x6*x7^3*x8 + x2^3*x5*x6*x7^3*x9 + -x2^3*x5*x6*x7^3 + x2^3*x5*x6*x7^2*x8*x9 + -x2^3*x5*x6*x7^2*x8 + -x2^3*x5*x6*x7^2*x9 + x2^3*x5*x6*x7^2 + x2^3*x5*x6*x7*x8*x9^4 + -x2^3*x5*x6*x7*x8*x9^2 + -x2^3*x5*x6*x7*x9^4 + x2^3*x5*x6*x7*x9^2 + -x2^3*x5*x6*x8*x9^4 + x2^3*x5*x6*x8*x9^2 + x2^3*x5*x6*x9^4 + -x2^3*x5*x6*x9^2 + -x2^3*x5*x7^3*x8^2*x9 + x2^3*x5*x7^3*x8^2 + x2^3*x5*x7^3*x8*x9 + -x2^3*x5*x7^3*x8 + x2^3*x5*x7^2*x8^2*x9 + -x2^3*x5*x7^2*x8^2 + -x2^3*x5*x7^2*x8*x9 + x2^3*x5*x7^2*x8 + -x2^3*x5*x7*x8*x9^4 + x2^3*x5*x7*x8*x9^2 + x2^3*x5*x7*x9^4 + -x2^3*x5*x7*x9^2 + x2^3*x5*x8*x9^4 + -x2^3*x5*x8*x9^2 + -x2^3*x5*x9^4 + x2^3*x5*x9^2 + -x2^3*x6^8*x7*x8*x9 + x2^3*x6^8*x7*x8 + x2^3*x6^8*x7*x9 + -x2^3*x6^8*x7 + x2^3*x6^8*x8*x9 + -x2^3*x6^8*x8 + -x2^3*x6^8*x9 + x2^3*x6^8 + x2^3*x6^6*x7*x8*x9 + -x2^3*x6^6*x7*x8 + -x2^3*x6^6*x7*x9 + x2^3*x6^6*x7 + -x2^3*x6^6*x8*x9 + x2^3*x6^6*x8 + x2^3*x6^6*x9 + -x2^3*x6^6 + -x2^3*x6^4*x7^3*x8^2*x9 + x2^3*x6^4*x7^3*x8^2 + x2^3*x6^4*x7^3*x9 + -x2^3*x6^4*x7^3 + x2^3*x6^4*x7^2*x8^2*x9 + -x2^3*x6^4*x7^2*x8^2 + -x2^3*x6^4*x7^2*x9 + x2^3*x6^4*x7^2 + -x2^3*x6*x7^3*x8*x9^2 + x2^3*x6*x7^3*x8*x9 + x2^3*x6*x7^3*x9^2 + -x2^3*x6*x7^3*x9 + x2^3*x6*x7^2*x8*x9^2 + -x2^3*x6*x7^2*x8*x9 + -x2^3*x6*x7^2*x9^2 + x2^3*x6*x7^2*x9 + -x2^3*x6*x7*x8*x9^4 + x2^3*x6*x7*x8*x9^2 + x2^3*x6*x7*x9^4 + -x2^3*x6*x7*x9^2 + x2^3*x6*x8*x9^4 + -x2^3*x6*x8*x9^2 + -x2^3*x6*x9^4 + x2^3*x6*x9^2 + x2^3*x7^3*x8^2*x9 + -x2^3*x7^3*x8^2 + x2^3*x7^3*x8*x9^2 + -x2^3*x7^3*x8*x9 + -x2^3*x7^3*x9^2 + x2^3*x7^3 + -x2^3*x7^2*x8^2*x9 + x2^3*x7^2*x8^2 + -x2^3*x7^2*x8*x9^2 + x2^3*x7^2*x8*x9 + x2^3*x7^2*x9^2 + -x2^3*x7^2 + x2^3*x7*x8*x9^4 + -x2^3*x7*x8*x9^2 + -x2^3*x7*x9^4 + x2^3*x7*x9^2 + -x2^3*x8*x9^4 + x2^3*x8*x9^2 + x2^3*x9^4 + -x2^3*x9^2 + x2^2*x3^8*x4*x5*x6^2*x7*x8*x9^2 + -x2^2*x3^8*x4*x5*x6^2*x7*x8*x9 + -x2^2*x3^8*x4*x5*x6^2*x7*x9^2 + x2^2*x3^8*x4*x5*x6^2*x7*x9 + -x2^2*x3^8*x4*x5*x6^2*x8*x9^2 + x2^2*x3^8*x4*x5*x6^2*x8*x9 + x2^2*x3^8*x4*x5*x6^2*x9^2 + -x2^2*x3^8*x4*x5*x6^2*x9 + -x2^2*x3^8*x4*x5*x6*x7*x8*x9^2 + x2^2*x3^8*x4*x5*x6*x7*x8*x9 + x2^2*x3^8*x4*x5*x6*x7*x9^2 + -x2^2*x3^8*x4*x5*x6*x7*x9 + x2^2*x3^8*x4*x5*x6*x8*x9^2 + -x2^2*x3^8*x4*x5*x6*x8*x9 + -x2^2*x3^8*x4*x5*x6*x9^2 + x2^2*x3^8*x4*x5*x6*x9 + -x2^2*x3^8*x4*x6^2*x7*x8*x9^2 + x2^2*x3^8*x4*x6^2*x7*x8*x9 + x2^2*x3^8*x4*x6^2*x7*x9^2 + -x2^2*x3^8*x4*x6^2*x7*x9 + x2^2*x3^8*x4*x6^2*x8*x9^2 + -x2^2*x3^8*x4*x6^2*x8*x9 + -x2^2*x3^8*x4*x6^2*x9^2 + x2^2*x3^8*x4*x6^2*x9 + x2^2*x3^8*x4*x6*x7*x8*x9^2 + -x2^2*x3^8*x4*x6*x7*x8*x9 + -x2^2*x3^8*x4*x6*x7*x9^2 + x2^2*x3^8*x4*x6*x7*x9 + -x2^2*x3^8*x4*x6*x8*x9^2 + x2^2*x3^8*x4*x6*x8*x9 + x2^2*x3^8*x4*x6*x9^2 + -x2^2*x3^8*x4*x6*x9 + -x2^2*x3^8*x5*x6^2*x7*x8*x9^2 + x2^2*x3^8*x5*x6^2*x7*x8*x9 + x2^2*x3^8*x5*x6^2*x7*x9^2 + -x2^2*x3^8*x5*x6^2*x7*x9 + x2^2*x3^8*x5*x6^2*x8*x9^2 + -x2^2*x3^8*x5*x6^2*x8*x9 + -x2^2*x3^8*x5*x6^2*x9^2 + x2^2*x3^8*x5*x6^2*x9 + x2^2*x3^8*x5*x6*x7*x8*x9^2 + -x2^2*x3^8*x5*x6*x7*x8*x9 + -x2^2*x3^8*x5*x6*x7*x9^2 + x2^2*x3^8*x5*x6*x7*x9 + -x2^2*x3^8*x5*x6*x8*x9^2 + x2^2*x3^8*x5*x6*x8*x9 + x2^2*x3^8*x5*x6*x9^2 + -x2^2*x3^8*x5*x6*x9 + x2^2*x3^8*x6^2*x7*x8*x9^2 + -x2^2*x3^8*x6^2*x7*x8*x9 + -x2^2*x3^8*x6^2*x7*x9^2 + x2^2*x3^8*x6^2*x7*x9 + -x2^2*x3^8*x6^2*x8*x9^2 + x2^2*x3^8*x6^2*x8*x9 + x2^2*x3^8*x6^2*x9^2 + -x2^2*x3^8*x6^2*x9 + -x2^2*x3^8*x6*x7*x8*x9^2 + x2^2*x3^8*x6*x7*x8*x9 + x2^2*x3^8*x6*x7*x9^2 + -x2^2*x3^8*x6*x7*x9 + x2^2*x3^8*x6*x8*x9^2 + -x2^2*x3^8*x6*x8*x9 + -x2^2*x3^8*x6*x9^2 + x2^2*x3^8*x6*x9 + x2^2*x3^7*x4*x5^2*x6^2*x7*x8*x9^2 + -x2^2*x3^7*x4*x5^2*x6^2*x7*x8*x9 + -x2^2*x3^7*x4*x5^2*x6^2*x7*x9^2 + x2^2*x3^7*x4*x5^2*x6^2*x7*x9 + -x2^2*x3^7*x4*x5^2*x6^2*x8*x9^2 + x2^2*x3^7*x4*x5^2*x6^2*x8*x9 + x2^2*x3^7*x4*x5^2*x6^2*x9^2 + -x2^2*x3^7*x4*x5^2*x6^2*x9 + -x2^2*x3^7*x4*x5^2*x6*x7*x8*x9^2 + x2^2*x3^7*x4*x5^2*x6*x7*x8*x9 + x2^2*x3^7*x4*x5^2*x6*x7*x9^2 + -x2^2*x3^7*x4*x5^2*x6*x7*x9 + x2^2*x3^7*x4*x5^2*x6*x8*x9^2 + -x2^2*x3^7*x4*x5^2*x6*x8*x9 + -x2^2*x3^7*x4*x5^2*x6*x9^2 + x2^2*x3^7*x4*x5^2*x6*x9 + -x2^2*x3^7*x4*x5*x6^2*x7*x8*x9^2 + x2^2*x3^7*x4*x5*x6^2*x7*x8*x9 + x2^2*x3^7*x4*x5*x6^2*x7*x9^2 + -x2^2*x3^7*x4*x5*x6^2*x7*x9 + x2^2*x3^7*x4*x5*x6^2*x8*x9^2 + -x2^2*x3^7*x4*x5*x6^2*x8*x9 + -x2^2*x3^7*x4*x5*x6^2*x9^2 + x2^2*x3^7*x4*x5*x6^2*x9 + x2^2*x3^7*x4*x5*x6*x7*x8*x9^2 + -x2^2*x3^7*x4*x5*x6*x7*x8*x9 + -x2^2*x3^7*x4*x5*x6*x7*x9^2 + x2^2*x3^7*x4*x5*x6*x7*x9 + -x2^2*x3^7*x4*x5*x6*x8*x9^2 + x2^2*x3^7*x4*x5*x6*x8*x9 + x2^2*x3^7*x4*x5*x6*x9^2 + -x2^2*x3^7*x4*x5*x6*x9 + -x2^2*x3^7*x5^2*x6^2*x7*x8*x9^2 + x2^2*x3^7*x5^2*x6^2*x7*x8*x9 + x2^2*x3^7*x5^2*x6^2*x7*x9^2 + -x2^2*x3^7*x5^2*x6^2*x7*x9 + x2^2*x3^7*x5^2*x6^2*x8*x9^2 + -x2^2*x3^7*x5^2*x6^2*x8*x9 + -x2^2*x3^7*x5^2*x6^2*x9^2 + x2^2*x3^7*x5^2*x6^2*x9 + x2^2*x3^7*x5^2*x6*x7*x8*x9^2 + -x2^2*x3^7*x5^2*x6*x7*x8*x9 + -x2^2*x3^7*x5^2*x6*x7*x9^2 + x2^2*x3^7*x5^2*x6*x7*x9 + -x2^2*x3^7*x5^2*x6*x8*x9^2 + x2^2*x3^7*x5^2*x6*x8*x9 + x2^2*x3^7*x5^2*x6*x9^2 + -x2^2*x3^7*x5^2*x6*x9 + x2^2*x3^7*x5*x6^2*x7*x8*x9^2 + -x2^2*x3^7*x5*x6^2*x7*x8*x9 + -x2^2*x3^7*x5*x6^2*x7*x9^2 + x2^2*x3^7*x5*x6^2*x7*x9 + -x2^2*x3^7*x5*x6^2*x8*x9^2 + x2^2*x3^7*x5*x6^2*x8*x9 + x2^2*x3^7*x5*x6^2*x9^2 + -x2^2*x3^7*x5*x6^2*x9 + -x2^2*x3^7*x5*x6*x7*x8*x9^2 + x2^2*x3^7*x5*x6*x7*x8*x9 + x2^2*x3^7*x5*x6*x7*x9^2 + -x2^2*x3^7*x5*x6*x7*x9 + x2^2*x3^7*x5*x6*x8*x9^2 + -x2^2*x3^7*x5*x6*x8*x9 + -x2^2*x3^7*x5*x6*x9^2 + x2^2*x3^7*x5*x6*x9 + x2^2*x3^6*x4*x5^6*x6^2*x7*x8*x9 + -x2^2*x3^6*x4*x5^6*x6^2*x7*x8 + -x2^2*x3^6*x4*x5^6*x6^2*x7*x9 + x2^2*x3^6*x4*x5^6*x6^2*x7 + -x2^2*x3^6*x4*x5^6*x6^2*x8*x9 + x2^2*x3^6*x4*x5^6*x6^2*x8 + x2^2*x3^6*x4*x5^6*x6^2*x9 + -x2^2*x3^6*x4*x5^6*x6^2 + -x2^2*x3^6*x4*x5^6*x7*x8*x9 + x2^2*x3^6*x4*x5^6*x7*x8 + x2^2*x3^6*x4*x5^6*x7*x9 + -x2^2*x3^6*x4*x5^6*x7 + x2^2*x3^6*x4*x5^6*x8*x9 + -x2^2*x3^6*x4*x5^6*x8 + -x2^2*x3^6*x4*x5^6*x9 + x2^2*x3^6*x4*x5^6 + x2^2*x3^6*x4*x5^3*x6^2*x7*x8*x9^2 + -2*x2^2*x3^6*x4*x5^3*x6^2*x7*x8*x9 + x2^2*x3^6*x4*x5^3*x6^2*x7*x8 + -x2^2*x3^6*x4*x5^3*x6^2*x7*x9^2 + 2*x2^2*x3^6*x4*x5^3*x6^2*x7*x9 + -x2^2*x3^6*x4*x5^3*x6^2*x7 + -x2^2*x3^6*x4*x5^3*x6^2*x8*x9^2 + 2*x2^2*x3^6*x4*x5^3*x6^2*x8*x9 + -x2^2*x3^6*x4*x5^3*x6^2*x8 + x2^2*x3^6*x4*x5^3*x6^2*x9^2 + -2*x2^2*x3^6*x4*x5^3*x6^2*x9 + x2^2*x3^6*x4*x5^3*x6^2 + x2^2*x3^6*x4*x5^3*x6*x7*x8*x9^3 + -2*x2^2*x3^6*x4*x5^3*x6*x7*x8*x9^2 + x2^2*x3^6*x4*x5^3*x6*x7*x8*x9 + -x2^2*x3^6*x4*x5^3*x6*x7*x9^3 + 2*x2^2*x3^6*x4*x5^3*x6*x7*x9^2 + -x2^2*x3^6*x4*x5^3*x6*x7*x9 + -x2^2*x3^6*x4*x5^3*x6*x8*x9^3 + 2*x2^2*x3^6*x4*x5^3*x6*x8*x9^2 + -x2^2*x3^6*x4*x5^3*x6*x8*x9 + x2^2*x3^6*x4*x5^3*x6*x9^3 + -2*x2^2*x3^6*x4*x5^3*x6*x9^2 + x2^2*x3^6*x4*x5^3*x6*x9 + -x2^2*x3^6*x4*x5^3*x7*x8*x9^3 + x2^2*x3^6*x4*x5^3*x7*x8*x9^2 + x2^2*x3^6*x4*x5^3*x7*x8*x9 + -x2^2*x3^6*x4*x5^3*x7*x8 + x2^2*x3^6*x4*x5^3*x7*x9^3 + -x2^2*x3^6*x4*x5^3*x7*x9^2 + -x2^2*x3^6*x4*x5^3*x7*x9 + x2^2*x3^6*x4*x5^3*x7 + x2^2*x3^6*x4*x5^3*x8*x9^3 + -x2^2*x3^6*x4*x5^3*x8*x9^2 + -x2^2*x3^6*x4*x5^3*x8*x9 + x2^2*x3^6*x4*x5^3*x8 + -x2^2*x3^6*x4*x5^3*x9^3 + x2^2*x3^6*x4*x5^3*x9^2 + x2^2*x3^6*x4*x5^3*x9 + -x2^2*x3^6*x4*x5^3 + -x2^2*x3^6*x4*x5^2*x6^2*x7*x8*x9^2 + x2^2*x3^6*x4*x5^2*x6^2*x7*x8*x9 + x2^2*x3^6*x4*x5^2*x6^2*x7*x9^2 + -x2^2*x3^6*x4*x5^2*x6^2*x7*x9 + x2^2*x3^6*x4*x5^2*x6^2*x8*x9^2 + -x2^2*x3^6*x4*x5^2*x6^2*x8*x9 + -x2^2*x3^6*x4*x5^2*x6^2*x9^2 + x2^2*x3^6*x4*x5^2*x6^2*x9 + x2^2*x3^6*x4*x5^2*x6*x7*x8*x9^2 + -x2^2*x3^6*x4*x5^2*x6*x7*x8*x9 + -x2^2*x3^6*x4*x5^2*x6*x7*x9^2 + x2^2*x3^6*x4*x5^2*x6*x7*x9 + -x2^2*x3^6*x4*x5^2*x6*x8*x9^2 + x2^2*x3^6*x4*x5^2*x6*x8*x9 + x2^2*x3^6*x4*x5^2*x6*x9^2 + -x2^2*x3^6*x4*x5^2*x6*x9 + -x2^2*x3^6*x4*x5*x6*x7*x8*x9^3 + x2^2*x3^6*x4*x5*x6*x7*x8*x9^2 + x2^2*x3^6*x4*x5*x6*x7*x9^3 + -x2^2*x3^6*x4*x5*x6*x7*x9^2 + x2^2*x3^6*x4*x5*x6*x8*x9^3 + -x2^2*x3^6*x4*x5*x6*x8*x9^2 + -x2^2*x3^6*x4*x5*x6*x9^3 + x2^2*x3^6*x4*x5*x6*x9^2 + x2^2*x3^6*x4*x5*x7*x8*x9^3 + -x2^2*x3^6*x4*x5*x7*x8*x9^2 + -x2^2*x3^6*x4*x5*x7*x9^3 + x2^2*x3^6*x4*x5*x7*x9^2 + -x2^2*x3^6*x4*x5*x8*x9^3 + x2^2*x3^6*x4*x5*x8*x9^2 + x2^2*x3^6*x4*x5*x9^3 + -x2^2*x3^6*x4*x5*x9^2 + -x2^2*x3^6*x5^6*x6^2*x7*x8*x9 + x2^2*x3^6*x5^6*x6^2*x7*x8 + x2^2*x3^6*x5^6*x6^2*x7*x9 + -x2^2*x3^6*x5^6*x6^2*x7 + x2^2*x3^6*x5^6*x6^2*x8*x9 + -x2^2*x3^6*x5^6*x6^2*x8 + -x2^2*x3^6*x5^6*x6^2*x9 + x2^2*x3^6*x5^6*x6^2 + x2^2*x3^6*x5^6*x7*x8*x9 + -x2^2*x3^6*x5^6*x7*x8 + -x2^2*x3^6*x5^6*x7*x9 + x2^2*x3^6*x5^6*x7 + -x2^2*x3^6*x5^6*x8*x9 + x2^2*x3^6*x5^6*x8 + x2^2*x3^6*x5^6*x9 + -x2^2*x3^6*x5^6 + -x2^2*x3^6*x5^3*x6^2*x7*x8*x9^2 + 2*x2^2*x3^6*x5^3*x6^2*x7*x8*x9 + -x2^2*x3^6*x5^3*x6^2*x7*x8 + x2^2*x3^6*x5^3*x6^2*x7*x9^2 + -2*x2^2*x3^6*x5^3*x6^2*x7*x9 + x2^2*x3^6*x5^3*x6^2*x7 + x2^2*x3^6*x5^3*x6^2*x8*x9^2 + -2*x2^2*x3^6*x5^3*x6^2*x8*x9 + x2^2*x3^6*x5^3*x6^2*x8 + -x2^2*x3^6*x5^3*x6^2*x9^2 + 2*x2^2*x3^6*x5^3*x6^2*x9 + -x2^2*x3^6*x5^3*x6^2 + -x2^2*x3^6*x5^3*x6*x7*x8*x9^3 + 2*x2^2*x3^6*x5^3*x6*x7*x8*x9^2 + -x2^2*x3^6*x5^3*x6*x7*x8*x9 + x2^2*x3^6*x5^3*x6*x7*x9^3 + -2*x2^2*x3^6*x5^3*x6*x7*x9^2 + x2^2*x3^6*x5^3*x6*x7*x9 + x2^2*x3^6*x5^3*x6*x8*x9^3 + -2*x2^2*x3^6*x5^3*x6*x8*x9^2 + x2^2*x3^6*x5^3*x6*x8*x9 + -x2^2*x3^6*x5^3*x6*x9^3 + 2*x2^2*x3^6*x5^3*x6*x9^2 + -x2^2*x3^6*x5^3*x6*x9 + x2^2*x3^6*x5^3*x7*x8*x9^3 + -x2^2*x3^6*x5^3*x7*x8*x9^2 + -x2^2*x3^6*x5^3*x7*x8*x9 + x2^2*x3^6*x5^3*x7*x8 + -x2^2*x3^6*x5^3*x7*x9^3 + x2^2*x3^6*x5^3*x7*x9^2 + x2^2*x3^6*x5^3*x7*x9 + -x2^2*x3^6*x5^3*x7 + -x2^2*x3^6*x5^3*x8*x9^3 + x2^2*x3^6*x5^3*x8*x9^2 + x2^2*x3^6*x5^3*x8*x9 + -x2^2*x3^6*x5^3*x8 + x2^2*x3^6*x5^3*x9^3 + -x2^2*x3^6*x5^3*x9^2 + -x2^2*x3^6*x5^3*x9 + x2^2*x3^6*x5^3 + x2^2*x3^6*x5^2*x6^2*x7*x8*x9^2 + -x2^2*x3^6*x5^2*x6^2*x7*x8*x9 + -x2^2*x3^6*x5^2*x6^2*x7*x9^2 + x2^2*x3^6*x5^2*x6^2*x7*x9 + -x2^2*x3^6*x5^2*x6^2*x8*x9^2 + x2^2*x3^6*x5^2*x6^2*x8*x9 + x2^2*x3^6*x5^2*x6^2*x9^2 + -x2^2*x3^6*x5^2*x6^2*x9 + -x2^2*x3^6*x5^2*x6*x7*x8*x9^2 + x2^2*x3^6*x5^2*x6*x7*x8*x9 + x2^2*x3^6*x5^2*x6*x7*x9^2 + -x2^2*x3^6*x5^2*x6*x7*x9 + x2^2*x3^6*x5^2*x6*x8*x9^2 + -x2^2*x3^6*x5^2*x6*x8*x9 + -x2^2*x3^6*x5^2*x6*x9^2 + x2^2*x3^6*x5^2*x6*x9 + x2^2*x3^6*x5*x6*x7*x8*x9^3 + -x2^2*x3^6*x5*x6*x7*x8*x9^2 + -x2^2*x3^6*x5*x6*x7*x9^3 + x2^2*x3^6*x5*x6*x7*x9^2 + -x2^2*x3^6*x5*x6*x8*x9^3 + x2^2*x3^6*x5*x6*x8*x9^2 + x2^2*x3^6*x5*x6*x9^3 + -x2^2*x3^6*x5*x6*x9^2 + -x2^2*x3^6*x5*x7*x8*x9^3 + x2^2*x3^6*x5*x7*x8*x9^2 + x2^2*x3^6*x5*x7*x9^3 + -x2^2*x3^6*x5*x7*x9^2 + x2^2*x3^6*x5*x8*x9^3 + -x2^2*x3^6*x5*x8*x9^2 + -x2^2*x3^6*x5*x9^3 + x2^2*x3^6*x5*x9^2 + x2^2*x3^5*x4*x5^7*x6*x7*x8*x9 + -x2^2*x3^5*x4*x5^7*x6*x7*x8 + -x2^2*x3^5*x4*x5^7*x6*x7*x9 + x2^2*x3^5*x4*x5^7*x6*x7 + -x2^2*x3^5*x4*x5^7*x6*x8*x9 + x2^2*x3^5*x4*x5^7*x6*x8 + x2^2*x3^5*x4*x5^7*x6*x9 + -x2^2*x3^5*x4*x5^7*x6 + -x2^2*x3^5*x4*x5^7*x7*x8*x9 + x2^2*x3^5*x4*x5^7*x7*x8 + x2^2*x3^5*x4*x5^7*x7*x9 + -x2^2*x3^5*x4*x5^7*x7 + x2^2*x3^5*x4*x5^7*x8*x9 + -x2^2*x3^5*x4*x5^7*x8 + -x2^2*x3^5*x4*x5^7*x9 + x2^2*x3^5*x4*x5^7 + -x2^2*x3^5*x4*x5^6*x6*x7*x8*x9 + x2^2*x3^5*x4*x5^6*x6*x7*x8 + x2^2*x3^5*x4*x5^6*x6*x7*x9 + -x2^2*x3^5*x4*x5^6*x6*x7 + x2^2*x3^5*x4*x5^6*x6*x8*x9 + -x2^2*x3^5*x4*x5^6*x6*x8 + -x2^2*x3^5*x4*x5^6*x6*x9 + x2^2*x3^5*x4*x5^6*x6 + x2^2*x3^5*x4*x5^6*x7*x8*x9 + -x2^2*x3^5*x4*x5^6*x7*x8 + -x2^2*x3^5*x4*x5^6*x7*x9 + x2^2*x3^5*x4*x5^6*x7 + -x2^2*x3^5*x4*x5^6*x8*x9 + x2^2*x3^5*x4*x5^6*x8 + x2^2*x3^5*x4*x5^6*x9 + -x2^2*x3^5*x4*x5^6 + x2^2*x3^5*x4*x5^5*x6*x7*x8*x9^2 + -x2^2*x3^5*x4*x5^5*x6*x7*x8*x9 + -x2^2*x3^5*x4*x5^5*x6*x7*x9^2 + x2^2*x3^5*x4*x5^5*x6*x7*x9 + -x2^2*x3^5*x4*x5^5*x6*x8*x9^2 + x2^2*x3^5*x4*x5^5*x6*x8*x9 + x2^2*x3^5*x4*x5^5*x6*x9^2 + -x2^2*x3^5*x4*x5^5*x6*x9 + -x2^2*x3^5*x4*x5^5*x7*x8*x9^2 + x2^2*x3^5*x4*x5^5*x7*x8*x9 + x2^2*x3^5*x4*x5^5*x7*x9^2 + -x2^2*x3^5*x4*x5^5*x7*x9 + x2^2*x3^5*x4*x5^5*x8*x9^2 + -x2^2*x3^5*x4*x5^5*x8*x9 + -x2^2*x3^5*x4*x5^5*x9^2 + x2^2*x3^5*x4*x5^5*x9 + x2^2*x3^5*x4*x5^4*x6*x7*x8*x9^3 + -x2^2*x3^5*x4*x5^4*x6*x7*x8*x9^2 + -x2^2*x3^5*x4*x5^4*x6*x7*x9^3 + x2^2*x3^5*x4*x5^4*x6*x7*x9^2 + -x2^2*x3^5*x4*x5^4*x6*x8*x9^3 + x2^2*x3^5*x4*x5^4*x6*x8*x9^2 + x2^2*x3^5*x4*x5^4*x6*x9^3 + -x2^2*x3^5*x4*x5^4*x6*x9^2 + -x2^2*x3^5*x4*x5^4*x7*x8*x9^3 + x2^2*x3^5*x4*x5^4*x7*x8*x9^2 + x2^2*x3^5*x4*x5^4*x7*x9^3 + -x2^2*x3^5*x4*x5^4*x7*x9^2 + x2^2*x3^5*x4*x5^4*x8*x9^3 + -x2^2*x3^5*x4*x5^4*x8*x9^2 + -x2^2*x3^5*x4*x5^4*x9^3 + x2^2*x3^5*x4*x5^4*x9^2 + -x2^2*x3^5*x4*x5^3*x6*x7*x8*x9^3 + x2^2*x3^5*x4*x5^3*x6*x7*x8*x9 + x2^2*x3^5*x4*x5^3*x6*x7*x9^3 + -x2^2*x3^5*x4*x5^3*x6*x7*x9 + x2^2*x3^5*x4*x5^3*x6*x8*x9^3 + -x2^2*x3^5*x4*x5^3*x6*x8*x9 + -x2^2*x3^5*x4*x5^3*x6*x9^3 + x2^2*x3^5*x4*x5^3*x6*x9 + x2^2*x3^5*x4*x5^3*x7*x8*x9^3 + -x2^2*x3^5*x4*x5^3*x7*x8*x9 + -x2^2*x3^5*x4*x5^3*x7*x9^3 + x2^2*x3^5*x4*x5^3*x7*x9 + -x2^2*x3^5*x4*x5^3*x8*x9^3 + x2^2*x3^5*x4*x5^3*x8*x9 + x2^2*x3^5*x4*x5^3*x9^3 + -x2^2*x3^5*x4*x5^3*x9 + -x2^2*x3^5*x5^7*x6*x7*x8*x9 + x2^2*x3^5*x5^7*x6*x7*x8 + x2^2*x3^5*x5^7*x6*x7*x9 + -x2^2*x3^5*x5^7*x6*x7 + x2^2*x3^5*x5^7*x6*x8*x9 + -x2^2*x3^5*x5^7*x6*x8 + -x2^2*x3^5*x5^7*x6*x9 + x2^2*x3^5*x5^7*x6 + x2^2*x3^5*x5^7*x7*x8*x9 + -x2^2*x3^5*x5^7*x7*x8 + -x2^2*x3^5*x5^7*x7*x9 + x2^2*x3^5*x5^7*x7 + -x2^2*x3^5*x5^7*x8*x9 + x2^2*x3^5*x5^7*x8 + x2^2*x3^5*x5^7*x9 + -x2^2*x3^5*x5^7 + x2^2*x3^5*x5^6*x6*x7*x8*x9 + -x2^2*x3^5*x5^6*x6*x7*x8 + -x2^2*x3^5*x5^6*x6*x7*x9 + x2^2*x3^5*x5^6*x6*x7 + -x2^2*x3^5*x5^6*x6*x8*x9 + x2^2*x3^5*x5^6*x6*x8 + x2^2*x3^5*x5^6*x6*x9 + -x2^2*x3^5*x5^6*x6 + -x2^2*x3^5*x5^6*x7*x8*x9 + x2^2*x3^5*x5^6*x7*x8 + x2^2*x3^5*x5^6*x7*x9 + -x2^2*x3^5*x5^6*x7 + x2^2*x3^5*x5^6*x8*x9 + -x2^2*x3^5*x5^6*x8 + -x2^2*x3^5*x5^6*x9 + x2^2*x3^5*x5^6 + -x2^2*x3^5*x5^5*x6*x7*x8*x9^2 + x2^2*x3^5*x5^5*x6*x7*x8*x9 + x2^2*x3^5*x5^5*x6*x7*x9^2 + -x2^2*x3^5*x5^5*x6*x7*x9 + x2^2*x3^5*x5^5*x6*x8*x9^2 + -x2^2*x3^5*x5^5*x6*x8*x9 + -x2^2*x3^5*x5^5*x6*x9^2 + x2^2*x3^5*x5^5*x6*x9 + x2^2*x3^5*x5^5*x7*x8*x9^2 + -x2^2*x3^5*x5^5*x7*x8*x9 + -x2^2*x3^5*x5^5*x7*x9^2 + x2^2*x3^5*x5^5*x7*x9 + -x2^2*x3^5*x5^5*x8*x9^2 + x2^2*x3^5*x5^5*x8*x9 + x2^2*x3^5*x5^5*x9^2 + -x2^2*x3^5*x5^5*x9 + -x2^2*x3^5*x5^4*x6*x7*x8*x9^3 + x2^2*x3^5*x5^4*x6*x7*x8*x9^2 + x2^2*x3^5*x5^4*x6*x7*x9^3 + -x2^2*x3^5*x5^4*x6*x7*x9^2 + x2^2*x3^5*x5^4*x6*x8*x9^3 + -x2^2*x3^5*x5^4*x6*x8*x9^2 + -x2^2*x3^5*x5^4*x6*x9^3 + x2^2*x3^5*x5^4*x6*x9^2 + x2^2*x3^5*x5^4*x7*x8*x9^3 + -x2^2*x3^5*x5^4*x7*x8*x9^2 + -x2^2*x3^5*x5^4*x7*x9^3 + x2^2*x3^5*x5^4*x7*x9^2 + -x2^2*x3^5*x5^4*x8*x9^3 + x2^2*x3^5*x5^4*x8*x9^2 + x2^2*x3^5*x5^4*x9^3 + -x2^2*x3^5*x5^4*x9^2 + x2^2*x3^5*x5^3*x6*x7*x8*x9^3 + -x2^2*x3^5*x5^3*x6*x7*x8*x9 + -x2^2*x3^5*x5^3*x6*x7*x9^3 + x2^2*x3^5*x5^3*x6*x7*x9 + -x2^2*x3^5*x5^3*x6*x8*x9^3 + x2^2*x3^5*x5^3*x6*x8*x9 + x2^2*x3^5*x5^3*x6*x9^3 + -x2^2*x3^5*x5^3*x6*x9 + -x2^2*x3^5*x5^3*x7*x8*x9^3 + x2^2*x3^5*x5^3*x7*x8*x9 + x2^2*x3^5*x5^3*x7*x9^3 + -x2^2*x3^5*x5^3*x7*x9 + x2^2*x3^5*x5^3*x8*x9^3 + -x2^2*x3^5*x5^3*x8*x9 + -x2^2*x3^5*x5^3*x9^3 + x2^2*x3^5*x5^3*x9 + x2^2*x3^4*x4*x5^8*x6*x7*x8*x9 + -x2^2*x3^4*x4*x5^8*x6*x7*x8 + -x2^2*x3^4*x4*x5^8*x6*x7*x9 + x2^2*x3^4*x4*x5^8*x6*x7 + -x2^2*x3^4*x4*x5^8*x6*x8*x9 + x2^2*x3^4*x4*x5^8*x6*x8 + x2^2*x3^4*x4*x5^8*x6*x9 + -x2^2*x3^4*x4*x5^8*x6 + -x2^2*x3^4*x4*x5^8*x7*x8*x9 + x2^2*x3^4*x4*x5^8*x7*x8 + x2^2*x3^4*x4*x5^8*x7*x9 + -x2^2*x3^4*x4*x5^8*x7 + x2^2*x3^4*x4*x5^8*x8*x9 + -x2^2*x3^4*x4*x5^8*x8 + -x2^2*x3^4*x4*x5^8*x9 + x2^2*x3^4*x4*x5^8 + -x2^2*x3^4*x4*x5^7*x6*x7*x8*x9 + x2^2*x3^4*x4*x5^7*x6*x7*x8 + x2^2*x3^4*x4*x5^7*x6*x7*x9 + -x2^2*x3^4*x4*x5^7*x6*x7 + x2^2*x3^4*x4*x5^7*x6*x8*x9 + -x2^2*x3^4*x4*x5^7*x6*x8 + -x2^2*x3^4*x4*x5^7*x6*x9 + x2^2*x3^4*x4*x5^7*x6 + x2^2*x3^4*x4*x5^7*x7*x8*x9 + -x2^2*x3^4*x4*x5^7*x7*x8 + -x2^2*x3^4*x4*x5^7*x7*x9 + x2^2*x3^4*x4*x5^7*x7 + -x2^2*x3^4*x4*x5^7*x8*x9 + x2^2*x3^4*x4*x5^7*x8 + x2^2*x3^4*x4*x5^7*x9 + -x2^2*x3^4*x4*x5^7 + x2^2*x3^4*x4*x5^5*x6*x7*x8*x9^3 + -x2^2*x3^4*x4*x5^5*x6*x7*x8*x9^2 + -x2^2*x3^4*x4*x5^5*x6*x7*x9^3 + x2^2*x3^4*x4*x5^5*x6*x7*x9^2 + -x2^2*x3^4*x4*x5^5*x6*x8*x9^3 + x2^2*x3^4*x4*x5^5*x6*x8*x9^2 + x2^2*x3^4*x4*x5^5*x6*x9^3 + -x2^2*x3^4*x4*x5^5*x6*x9^2 + -x2^2*x3^4*x4*x5^5*x7*x8*x9^3 + x2^2*x3^4*x4*x5^5*x7*x8*x9^2 + x2^2*x3^4*x4*x5^5*x7*x9^3 + -x2^2*x3^4*x4*x5^5*x7*x9^2 + x2^2*x3^4*x4*x5^5*x8*x9^3 + -x2^2*x3^4*x4*x5^5*x8*x9^2 + -x2^2*x3^4*x4*x5^5*x9^3 + x2^2*x3^4*x4*x5^5*x9^2 + -x2^2*x3^4*x4*x5^4*x6*x7*x8*x9^3 + x2^2*x3^4*x4*x5^4*x6*x7*x8*x9^2 + x2^2*x3^4*x4*x5^4*x6*x7*x9^3 + -x2^2*x3^4*x4*x5^4*x6*x7*x9^2 + x2^2*x3^4*x4*x5^4*x6*x8*x9^3 + -x2^2*x3^4*x4*x5^4*x6*x8*x9^2 + -x2^2*x3^4*x4*x5^4*x6*x9^3 + x2^2*x3^4*x4*x5^4*x6*x9^2 + x2^2*x3^4*x4*x5^4*x7*x8*x9^3 + -x2^2*x3^4*x4*x5^4*x7*x8*x9^2 + -x2^2*x3^4*x4*x5^4*x7*x9^3 + x2^2*x3^4*x4*x5^4*x7*x9^2 + -x2^2*x3^4*x4*x5^4*x8*x9^3 + x2^2*x3^4*x4*x5^4*x8*x9^2 + x2^2*x3^4*x4*x5^4*x9^3 + -x2^2*x3^4*x4*x5^4*x9^2 + -x2^2*x3^4*x5^8*x6*x7*x8*x9 + x2^2*x3^4*x5^8*x6*x7*x8 + x2^2*x3^4*x5^8*x6*x7*x9 + -x2^2*x3^4*x5^8*x6*x7 + x2^2*x3^4*x5^8*x6*x8*x9 + -x2^2*x3^4*x5^8*x6*x8 + -x2^2*x3^4*x5^8*x6*x9 + x2^2*x3^4*x5^8*x6 + x2^2*x3^4*x5^8*x7*x8*x9 + -x2^2*x3^4*x5^8*x7*x8 + -x2^2*x3^4*x5^8*x7*x9 + x2^2*x3^4*x5^8*x7 + -x2^2*x3^4*x5^8*x8*x9 + x2^2*x3^4*x5^8*x8 + x2^2*x3^4*x5^8*x9 + -x2^2*x3^4*x5^8 + x2^2*x3^4*x5^7*x6*x7*x8*x9 + -x2^2*x3^4*x5^7*x6*x7*x8 + -x2^2*x3^4*x5^7*x6*x7*x9 + x2^2*x3^4*x5^7*x6*x7 + -x2^2*x3^4*x5^7*x6*x8*x9 + x2^2*x3^4*x5^7*x6*x8 + x2^2*x3^4*x5^7*x6*x9 + -x2^2*x3^4*x5^7*x6 + -x2^2*x3^4*x5^7*x7*x8*x9 + x2^2*x3^4*x5^7*x7*x8 + x2^2*x3^4*x5^7*x7*x9 + -x2^2*x3^4*x5^7*x7 + x2^2*x3^4*x5^7*x8*x9 + -x2^2*x3^4*x5^7*x8 + -x2^2*x3^4*x5^7*x9 + x2^2*x3^4*x5^7 + -x2^2*x3^4*x5^5*x6*x7*x8*x9^3 + x2^2*x3^4*x5^5*x6*x7*x8*x9^2 + x2^2*x3^4*x5^5*x6*x7*x9^3 + -x2^2*x3^4*x5^5*x6*x7*x9^2 + x2^2*x3^4*x5^5*x6*x8*x9^3 + -x2^2*x3^4*x5^5*x6*x8*x9^2 + -x2^2*x3^4*x5^5*x6*x9^3 + x2^2*x3^4*x5^5*x6*x9^2 + x2^2*x3^4*x5^5*x7*x8*x9^3 + -x2^2*x3^4*x5^5*x7*x8*x9^2 + -x2^2*x3^4*x5^5*x7*x9^3 + x2^2*x3^4*x5^5*x7*x9^2 + -x2^2*x3^4*x5^5*x8*x9^3 + x2^2*x3^4*x5^5*x8*x9^2 + x2^2*x3^4*x5^5*x9^3 + -x2^2*x3^4*x5^5*x9^2 + x2^2*x3^4*x5^4*x6*x7*x8*x9^3 + -x2^2*x3^4*x5^4*x6*x7*x8*x9^2 + -x2^2*x3^4*x5^4*x6*x7*x9^3 + x2^2*x3^4*x5^4*x6*x7*x9^2 + -x2^2*x3^4*x5^4*x6*x8*x9^3 + x2^2*x3^4*x5^4*x6*x8*x9^2 + x2^2*x3^4*x5^4*x6*x9^3 + -x2^2*x3^4*x5^4*x6*x9^2 + -x2^2*x3^4*x5^4*x7*x8*x9^3 + x2^2*x3^4*x5^4*x7*x8*x9^2 + x2^2*x3^4*x5^4*x7*x9^3 + -x2^2*x3^4*x5^4*x7*x9^2 + x2^2*x3^4*x5^4*x8*x9^3 + -x2^2*x3^4*x5^4*x8*x9^2 + -x2^2*x3^4*x5^4*x9^3 + x2^2*x3^4*x5^4*x9^2 + x2^2*x3^3*x4*x5^2*x6^3*x7*x8*x9^2 + -x2^2*x3^3*x4*x5^2*x6^3*x7*x8 + -x2^2*x3^3*x4*x5^2*x6^3*x7*x9^2 + x2^2*x3^3*x4*x5^2*x6^3*x7 + -x2^2*x3^3*x4*x5^2*x6^3*x8*x9^2 + x2^2*x3^3*x4*x5^2*x6^3*x8 + x2^2*x3^3*x4*x5^2*x6^3*x9^2 + -x2^2*x3^3*x4*x5^2*x6^3 + -x2^2*x3^3*x4*x5^2*x6^2*x7*x8*x9^2 + x2^2*x3^3*x4*x5^2*x6^2*x7*x8 + x2^2*x3^3*x4*x5^2*x6^2*x7*x9^2 + -x2^2*x3^3*x4*x5^2*x6^2*x7 + x2^2*x3^3*x4*x5^2*x6^2*x8*x9^2 + -x2^2*x3^3*x4*x5^2*x6^2*x8 + -x2^2*x3^3*x4*x5^2*x6^2*x9^2 + x2^2*x3^3*x4*x5^2*x6^2 + -x2^2*x3^3*x4*x5*x6^3*x7*x8*x9 + x2^2*x3^3*x4*x5*x6^3*x7*x8 + x2^2*x3^3*x4*x5*x6^3*x7*x9 + -x2^2*x3^3*x4*x5*x6^3*x7 + x2^2*x3^3*x4*x5*x6^3*x8*x9 + -x2^2*x3^3*x4*x5*x6^3*x8 + -x2^2*x3^3*x4*x5*x6^3*x9 + x2^2*x3^3*x4*x5*x6^3 + x2^2*x3^3*x4*x5*x6^2*x7*x8*x9 + -x2^2*x3^3*x4*x5*x6^2*x7*x8 + -x2^2*x3^3*x4*x5*x6^2*x7*x9 + x2^2*x3^3*x4*x5*x6^2*x7 + -x2^2*x3^3*x4*x5*x6^2*x8*x9 + x2^2*x3^3*x4*x5*x6^2*x8 + x2^2*x3^3*x4*x5*x6^2*x9 + -x2^2*x3^3*x4*x5*x6^2 + -x2^2*x3^3*x4*x6^3*x7*x8*x9^2 + x2^2*x3^3*x4*x6^3*x7*x8*x9 + x2^2*x3^3*x4*x6^3*x7*x9^2 + -x2^2*x3^3*x4*x6^3*x7*x9 + x2^2*x3^3*x4*x6^3*x8*x9^2 + -x2^2*x3^3*x4*x6^3*x8*x9 + -x2^2*x3^3*x4*x6^3*x9^2 + x2^2*x3^3*x4*x6^3*x9 + x2^2*x3^3*x4*x6^2*x7*x8*x9^2 + -x2^2*x3^3*x4*x6^2*x7*x8*x9 + -x2^2*x3^3*x4*x6^2*x7*x9^2 + x2^2*x3^3*x4*x6^2*x7*x9 + -x2^2*x3^3*x4*x6^2*x8*x9^2 + x2^2*x3^3*x4*x6^2*x8*x9 + x2^2*x3^3*x4*x6^2*x9^2 + -x2^2*x3^3*x4*x6^2*x9 + -x2^2*x3^3*x5^2*x6^3*x7*x8*x9^2 + x2^2*x3^3*x5^2*x6^3*x7*x8 + x2^2*x3^3*x5^2*x6^3*x7*x9^2 + -x2^2*x3^3*x5^2*x6^3*x7 + x2^2*x3^3*x5^2*x6^3*x8*x9^2 + -x2^2*x3^3*x5^2*x6^3*x8 + -x2^2*x3^3*x5^2*x6^3*x9^2 + x2^2*x3^3*x5^2*x6^3 + x2^2*x3^3*x5^2*x6^2*x7*x8*x9^2 + -x2^2*x3^3*x5^2*x6^2*x7*x8 + -x2^2*x3^3*x5^2*x6^2*x7*x9^2 + x2^2*x3^3*x5^2*x6^2*x7 + -x2^2*x3^3*x5^2*x6^2*x8*x9^2 + x2^2*x3^3*x5^2*x6^2*x8 + x2^2*x3^3*x5^2*x6^2*x9^2 + -x2^2*x3^3*x5^2*x6^2 + x2^2*x3^3*x5*x6^3*x7*x8*x9 + -x2^2*x3^3*x5*x6^3*x7*x8 + -x2^2*x3^3*x5*x6^3*x7*x9 + x2^2*x3^3*x5*x6^3*x7 + -x2^2*x3^3*x5*x6^3*x8*x9 + x2^2*x3^3*x5*x6^3*x8 + x2^2*x3^3*x5*x6^3*x9 + -x2^2*x3^3*x5*x6^3 + -x2^2*x3^3*x5*x6^2*x7*x8*x9 + x2^2*x3^3*x5*x6^2*x7*x8 + x2^2*x3^3*x5*x6^2*x7*x9 + -x2^2*x3^3*x5*x6^2*x7 + x2^2*x3^3*x5*x6^2*x8*x9 + -x2^2*x3^3*x5*x6^2*x8 + -x2^2*x3^3*x5*x6^2*x9 + x2^2*x3^3*x5*x6^2 + x2^2*x3^3*x6^3*x7*x8*x9^2 + -x2^2*x3^3*x6^3*x7*x8*x9 + -x2^2*x3^3*x6^3*x7*x9^2 + x2^2*x3^3*x6^3*x7*x9 + -x2^2*x3^3*x6^3*x8*x9^2 + x2^2*x3^3*x6^3*x8*x9 + x2^2*x3^3*x6^3*x9^2 + -x2^2*x3^3*x6^3*x9 + -x2^2*x3^3*x6^2*x7*x8*x9^2 + x2^2*x3^3*x6^2*x7*x8*x9 + x2^2*x3^3*x6^2*x7*x9^2 + -x2^2*x3^3*x6^2*x7*x9 + x2^2*x3^3*x6^2*x8*x9^2 + -x2^2*x3^3*x6^2*x8*x9 + -x2^2*x3^3*x6^2*x9^2 + x2^2*x3^3*x6^2*x9 + x2^2*x3^2*x4^3*x5^2*x6^3*x7*x8*x9 + -x2^2*x3^2*x4^3*x5^2*x6^3*x7*x8 + -x2^2*x3^2*x4^3*x5^2*x6^3*x7*x9 + x2^2*x3^2*x4^3*x5^2*x6^3*x7 + -x2^2*x3^2*x4^3*x5^2*x6^3*x8*x9 + x2^2*x3^2*x4^3*x5^2*x6^3*x8 + x2^2*x3^2*x4^3*x5^2*x6^3*x9 + -x2^2*x3^2*x4^3*x5^2*x6^3 + -x2^2*x3^2*x4^3*x5^2*x6^2*x7*x8*x9 + x2^2*x3^2*x4^3*x5^2*x6^2*x7*x8 + x2^2*x3^2*x4^3*x5^2*x6^2*x7*x9 + -x2^2*x3^2*x4^3*x5^2*x6^2*x7 + x2^2*x3^2*x4^3*x5^2*x6^2*x8*x9 + -x2^2*x3^2*x4^3*x5^2*x6^2*x8 + -x2^2*x3^2*x4^3*x5^2*x6^2*x9 + x2^2*x3^2*x4^3*x5^2*x6^2 + -x2^2*x3^2*x4^3*x5*x6^3*x7*x8*x9 + x2^2*x3^2*x4^3*x5*x6^3*x7*x8 + x2^2*x3^2*x4^3*x5*x6^3*x7*x9 + -x2^2*x3^2*x4^3*x5*x6^3*x7 + x2^2*x3^2*x4^3*x5*x6^3*x8*x9 + -x2^2*x3^2*x4^3*x5*x6^3*x8 + -x2^2*x3^2*x4^3*x5*x6^3*x9 + x2^2*x3^2*x4^3*x5*x6^3 + x2^2*x3^2*x4^3*x5*x6^2*x7*x8*x9 + -x2^2*x3^2*x4^3*x5*x6^2*x7*x8 + -x2^2*x3^2*x4^3*x5*x6^2*x7*x9 + x2^2*x3^2*x4^3*x5*x6^2*x7 + -x2^2*x3^2*x4^3*x5*x6^2*x8*x9 + x2^2*x3^2*x4^3*x5*x6^2*x8 + x2^2*x3^2*x4^3*x5*x6^2*x9 + -x2^2*x3^2*x4^3*x5*x6^2 + x2^2*x3^2*x4^2*x5*x6^3*x7*x8*x9^2 + -x2^2*x3^2*x4^2*x5*x6^3*x7*x8*x9 + -x2^2*x3^2*x4^2*x5*x6^3*x7*x9^2 + x2^2*x3^2*x4^2*x5*x6^3*x7*x9 + -x2^2*x3^2*x4^2*x5*x6^3*x8*x9^2 + x2^2*x3^2*x4^2*x5*x6^3*x8*x9 + x2^2*x3^2*x4^2*x5*x6^3*x9^2 + -x2^2*x3^2*x4^2*x5*x6^3*x9 + -x2^2*x3^2*x4^2*x5*x6*x7*x8*x9^2 + x2^2*x3^2*x4^2*x5*x6*x7*x8*x9 + x2^2*x3^2*x4^2*x5*x6*x7*x9^2 + -x2^2*x3^2*x4^2*x5*x6*x7*x9 + x2^2*x3^2*x4^2*x5*x6*x8*x9^2 + -x2^2*x3^2*x4^2*x5*x6*x8*x9 + -x2^2*x3^2*x4^2*x5*x6*x9^2 + x2^2*x3^2*x4^2*x5*x6*x9 + -x2^2*x3^2*x4^2*x6^3*x7*x8*x9^2 + x2^2*x3^2*x4^2*x6^3*x7*x8*x9 + x2^2*x3^2*x4^2*x6^3*x7*x9^2 + -x2^2*x3^2*x4^2*x6^3*x7*x9 + x2^2*x3^2*x4^2*x6^3*x8*x9^2 + -x2^2*x3^2*x4^2*x6^3*x8*x9 + -x2^2*x3^2*x4^2*x6^3*x9^2 + x2^2*x3^2*x4^2*x6^3*x9 + x2^2*x3^2*x4^2*x6*x7*x8*x9^2 + -x2^2*x3^2*x4^2*x6*x7*x8*x9 + -x2^2*x3^2*x4^2*x6*x7*x9^2 + x2^2*x3^2*x4^2*x6*x7*x9 + -x2^2*x3^2*x4^2*x6*x8*x9^2 + x2^2*x3^2*x4^2*x6*x8*x9 + x2^2*x3^2*x4^2*x6*x9^2 + -x2^2*x3^2*x4^2*x6*x9 + -x2^2*x3^2*x4*x5^2*x6^3*x7*x8*x9 + x2^2*x3^2*x4*x5^2*x6^3*x7*x8 + x2^2*x3^2*x4*x5^2*x6^3*x7*x9 + -x2^2*x3^2*x4*x5^2*x6^3*x7 + x2^2*x3^2*x4*x5^2*x6^3*x8*x9 + -x2^2*x3^2*x4*x5^2*x6^3*x8 + -x2^2*x3^2*x4*x5^2*x6^3*x9 + x2^2*x3^2*x4*x5^2*x6^3 + x2^2*x3^2*x4*x5^2*x6^2*x7*x8*x9 + -x2^2*x3^2*x4*x5^2*x6^2*x7*x8 + -x2^2*x3^2*x4*x5^2*x6^2*x7*x9 + x2^2*x3^2*x4*x5^2*x6^2*x7 + -x2^2*x3^2*x4*x5^2*x6^2*x8*x9 + x2^2*x3^2*x4*x5^2*x6^2*x8 + x2^2*x3^2*x4*x5^2*x6^2*x9 + -x2^2*x3^2*x4*x5^2*x6^2 + -x2^2*x3^2*x4*x5*x6^3*x7*x8*x9^2 + 2*x2^2*x3^2*x4*x5*x6^3*x7*x8*x9 + -x2^2*x3^2*x4*x5*x6^3*x7*x8 + x2^2*x3^2*x4*x5*x6^3*x7*x9^2 + -2*x2^2*x3^2*x4*x5*x6^3*x7*x9 + x2^2*x3^2*x4*x5*x6^3*x7 + x2^2*x3^2*x4*x5*x6^3*x8*x9^2 + -2*x2^2*x3^2*x4*x5*x6^3*x8*x9 + x2^2*x3^2*x4*x5*x6^3*x8 + -x2^2*x3^2*x4*x5*x6^3*x9^2 + 2*x2^2*x3^2*x4*x5*x6^3*x9 + -x2^2*x3^2*x4*x5*x6^3 + -x2^2*x3^2*x4*x5*x6^2*x7*x8*x9 + x2^2*x3^2*x4*x5*x6^2*x7*x8 + x2^2*x3^2*x4*x5*x6^2*x7*x9 + -x2^2*x3^2*x4*x5*x6^2*x7 + x2^2*x3^2*x4*x5*x6^2*x8*x9 + -x2^2*x3^2*x4*x5*x6^2*x8 + -x2^2*x3^2*x4*x5*x6^2*x9 + x2^2*x3^2*x4*x5*x6^2 + x2^2*x3^2*x4*x5*x6*x7*x8*x9^2 + -x2^2*x3^2*x4*x5*x6*x7*x8*x9 + -x2^2*x3^2*x4*x5*x6*x7*x9^2 + x2^2*x3^2*x4*x5*x6*x7*x9 + -x2^2*x3^2*x4*x5*x6*x8*x9^2 + x2^2*x3^2*x4*x5*x6*x8*x9 + x2^2*x3^2*x4*x5*x6*x9^2 + -x2^2*x3^2*x4*x5*x6*x9 + x2^2*x3^2*x4*x6^3*x7*x8*x9^2 + -x2^2*x3^2*x4*x6^3*x7*x8*x9 + -x2^2*x3^2*x4*x6^3*x7*x9^2 + x2^2*x3^2*x4*x6^3*x7*x9 + -x2^2*x3^2*x4*x6^3*x8*x9^2 + x2^2*x3^2*x4*x6^3*x8*x9 + x2^2*x3^2*x4*x6^3*x9^2 + -x2^2*x3^2*x4*x6^3*x9 + -x2^2*x3^2*x4*x6*x7*x8*x9^2 + x2^2*x3^2*x4*x6*x7*x8*x9 + x2^2*x3^2*x4*x6*x7*x9^2 + -x2^2*x3^2*x4*x6*x7*x9 + x2^2*x3^2*x4*x6*x8*x9^2 + -x2^2*x3^2*x4*x6*x8*x9 + -x2^2*x3^2*x4*x6*x9^2 + x2^2*x3^2*x4*x6*x9 + x2^2*x3*x4^6*x5*x6^2*x7*x8*x9^2 + -x2^2*x3*x4^6*x5*x6^2*x7*x8*x9 + -x2^2*x3*x4^6*x5*x6^2*x7*x9^2 + x2^2*x3*x4^6*x5*x6^2*x7*x9 + -x2^2*x3*x4^6*x5*x6^2*x8*x9^2 + x2^2*x3*x4^6*x5*x6^2*x8*x9 + x2^2*x3*x4^6*x5*x6^2*x9^2 + -x2^2*x3*x4^6*x5*x6^2*x9 + -x2^2*x3*x4^6*x5*x6*x7*x8*x9^2 + x2^2*x3*x4^6*x5*x6*x7*x8*x9 + x2^2*x3*x4^6*x5*x6*x7*x9^2 + -x2^2*x3*x4^6*x5*x6*x7*x9 + x2^2*x3*x4^6*x5*x6*x8*x9^2 + -x2^2*x3*x4^6*x5*x6*x8*x9 + -x2^2*x3*x4^6*x5*x6*x9^2 + x2^2*x3*x4^6*x5*x6*x9 + -x2^2*x3*x4^6*x6^2*x7*x8*x9^2 + x2^2*x3*x4^6*x6^2*x7*x8*x9 + x2^2*x3*x4^6*x6^2*x7*x9^2 + -x2^2*x3*x4^6*x6^2*x7*x9 + x2^2*x3*x4^6*x6^2*x8*x9^2 + -x2^2*x3*x4^6*x6^2*x8*x9 + -x2^2*x3*x4^6*x6^2*x9^2 + x2^2*x3*x4^6*x6^2*x9 + x2^2*x3*x4^6*x6*x7*x8*x9^2 + -x2^2*x3*x4^6*x6*x7*x8*x9 + -x2^2*x3*x4^6*x6*x7*x9^2 + x2^2*x3*x4^6*x6*x7*x9 + -x2^2*x3*x4^6*x6*x8*x9^2 + x2^2*x3*x4^6*x6*x8*x9 + x2^2*x3*x4^6*x6*x9^2 + -x2^2*x3*x4^6*x6*x9 + x2^2*x3*x4^5*x5*x6^2*x7*x8^2*x9^2 + -x2^2*x3*x4^5*x5*x6^2*x7*x8^2*x9 + -x2^2*x3*x4^5*x5*x6^2*x7*x8*x9^2 + x2^2*x3*x4^5*x5*x6^2*x7*x8*x9 + -x2^2*x3*x4^5*x5*x6^2*x8^2*x9^2 + x2^2*x3*x4^5*x5*x6^2*x8^2*x9 + x2^2*x3*x4^5*x5*x6^2*x8*x9^2 + -x2^2*x3*x4^5*x5*x6^2*x8*x9 + -x2^2*x3*x4^5*x5*x6*x7*x8^2*x9^2 + x2^2*x3*x4^5*x5*x6*x7*x8^2*x9 + x2^2*x3*x4^5*x5*x6*x7*x8*x9^2 + -x2^2*x3*x4^5*x5*x6*x7*x8*x9 + x2^2*x3*x4^5*x5*x6*x8^2*x9^2 + -x2^2*x3*x4^5*x5*x6*x8^2*x9 + -x2^2*x3*x4^5*x5*x6*x8*x9^2 + x2^2*x3*x4^5*x5*x6*x8*x9 + -x2^2*x3*x4^5*x6^2*x7*x8^2*x9^2 + x2^2*x3*x4^5*x6^2*x7*x8^2*x9 + x2^2*x3*x4^5*x6^2*x7*x8*x9^2 + -x2^2*x3*x4^5*x6^2*x7*x8*x9 + x2^2*x3*x4^5*x6^2*x8^2*x9^2 + -x2^2*x3*x4^5*x6^2*x8^2*x9 + -x2^2*x3*x4^5*x6^2*x8*x9^2 + x2^2*x3*x4^5*x6^2*x8*x9 + x2^2*x3*x4^5*x6*x7*x8^2*x9^2 + -x2^2*x3*x4^5*x6*x7*x8^2*x9 + -x2^2*x3*x4^5*x6*x7*x8*x9^2 + x2^2*x3*x4^5*x6*x7*x8*x9 + -x2^2*x3*x4^5*x6*x8^2*x9^2 + x2^2*x3*x4^5*x6*x8^2*x9 + x2^2*x3*x4^5*x6*x8*x9^2 + -x2^2*x3*x4^5*x6*x8*x9 + x2^2*x3*x4^4*x5*x6^6*x7*x8^2*x9 + -x2^2*x3*x4^4*x5*x6^6*x7*x8^2 + -x2^2*x3*x4^4*x5*x6^6*x7*x9 + x2^2*x3*x4^4*x5*x6^6*x7 + -x2^2*x3*x4^4*x5*x6^6*x8^2*x9 + x2^2*x3*x4^4*x5*x6^6*x8^2 + x2^2*x3*x4^4*x5*x6^6*x9 + -x2^2*x3*x4^4*x5*x6^6 + -x2^2*x3*x4^4*x5*x6^5*x7*x8*x9 + x2^2*x3*x4^4*x5*x6^5*x7*x8 + x2^2*x3*x4^4*x5*x6^5*x7*x9 + -x2^2*x3*x4^4*x5*x6^5*x7 + x2^2*x3*x4^4*x5*x6^5*x8*x9 + -x2^2*x3*x4^4*x5*x6^5*x8 + -x2^2*x3*x4^4*x5*x6^5*x9 + x2^2*x3*x4^4*x5*x6^5 + -x2^2*x3*x4^4*x5*x6^4*x7*x8^2*x9 + x2^2*x3*x4^4*x5*x6^4*x7*x8^2 + x2^2*x3*x4^4*x5*x6^4*x7*x8*x9 + -x2^2*x3*x4^4*x5*x6^4*x7*x8 + x2^2*x3*x4^4*x5*x6^4*x8^2*x9 + -x2^2*x3*x4^4*x5*x6^4*x8^2 + -x2^2*x3*x4^4*x5*x6^4*x8*x9 + x2^2*x3*x4^4*x5*x6^4*x8 + x2^2*x3*x4^4*x5*x6^3*x7*x8^2*x9^2 + -x2^2*x3*x4^4*x5*x6^3*x7*x8^2*x9 + -x2^2*x3*x4^4*x5*x6^3*x7*x9^2 + x2^2*x3*x4^4*x5*x6^3*x7*x9 + -x2^2*x3*x4^4*x5*x6^3*x8^2*x9^2 + x2^2*x3*x4^4*x5*x6^3*x8^2*x9 + x2^2*x3*x4^4*x5*x6^3*x9^2 + -x2^2*x3*x4^4*x5*x6^3*x9 + -x2^2*x3*x4^4*x5*x6^2*x7*x8^2*x9^2 + x2^2*x3*x4^4*x5*x6^2*x7*x8^2*x9 + x2^2*x3*x4^4*x5*x6^2*x7*x9^2 + -x2^2*x3*x4^4*x5*x6^2*x7*x9 + x2^2*x3*x4^4*x5*x6^2*x8^2*x9^2 + -x2^2*x3*x4^4*x5*x6^2*x8^2*x9 + -x2^2*x3*x4^4*x5*x6^2*x9^2 + x2^2*x3*x4^4*x5*x6^2*x9 + -x2^2*x3*x4^4*x6^6*x7*x8^2*x9 + x2^2*x3*x4^4*x6^6*x7*x8^2 + x2^2*x3*x4^4*x6^6*x7*x9 + -x2^2*x3*x4^4*x6^6*x7 + x2^2*x3*x4^4*x6^6*x8^2*x9 + -x2^2*x3*x4^4*x6^6*x8^2 + -x2^2*x3*x4^4*x6^6*x9 + x2^2*x3*x4^4*x6^6 + x2^2*x3*x4^4*x6^5*x7*x8*x9 + -x2^2*x3*x4^4*x6^5*x7*x8 + -x2^2*x3*x4^4*x6^5*x7*x9 + x2^2*x3*x4^4*x6^5*x7 + -x2^2*x3*x4^4*x6^5*x8*x9 + x2^2*x3*x4^4*x6^5*x8 + x2^2*x3*x4^4*x6^5*x9 + -x2^2*x3*x4^4*x6^5 + x2^2*x3*x4^4*x6^4*x7*x8^2*x9 + -x2^2*x3*x4^4*x6^4*x7*x8^2 + -x2^2*x3*x4^4*x6^4*x7*x8*x9 + x2^2*x3*x4^4*x6^4*x7*x8 + -x2^2*x3*x4^4*x6^4*x8^2*x9 + x2^2*x3*x4^4*x6^4*x8^2 + x2^2*x3*x4^4*x6^4*x8*x9 + -x2^2*x3*x4^4*x6^4*x8 + -x2^2*x3*x4^4*x6^3*x7*x8^2*x9^2 + x2^2*x3*x4^4*x6^3*x7*x8^2*x9 + x2^2*x3*x4^4*x6^3*x7*x9^2 + -x2^2*x3*x4^4*x6^3*x7*x9 + x2^2*x3*x4^4*x6^3*x8^2*x9^2 + -x2^2*x3*x4^4*x6^3*x8^2*x9 + -x2^2*x3*x4^4*x6^3*x9^2 + x2^2*x3*x4^4*x6^3*x9 + x2^2*x3*x4^4*x6^2*x7*x8^2*x9^2 + -x2^2*x3*x4^4*x6^2*x7*x8^2*x9 + -x2^2*x3*x4^4*x6^2*x7*x9^2 + x2^2*x3*x4^4*x6^2*x7*x9 + -x2^2*x3*x4^4*x6^2*x8^2*x9^2 + x2^2*x3*x4^4*x6^2*x8^2*x9 + x2^2*x3*x4^4*x6^2*x9^2 + -x2^2*x3*x4^4*x6^2*x9 + -x2^2*x3*x4^3*x5^2*x6^3*x7*x8*x9 + x2^2*x3*x4^3*x5^2*x6^3*x7*x8 + x2^2*x3*x4^3*x5^2*x6^3*x7*x9 + -x2^2*x3*x4^3*x5^2*x6^3*x7 + x2^2*x3*x4^3*x5^2*x6^3*x8*x9 + -x2^2*x3*x4^3*x5^2*x6^3*x8 + -x2^2*x3*x4^3*x5^2*x6^3*x9 + x2^2*x3*x4^3*x5^2*x6^3 + x2^2*x3*x4^3*x5^2*x6^2*x7^3*x8*x9 + -x2^2*x3*x4^3*x5^2*x6^2*x7^3*x8 + -x2^2*x3*x4^3*x5^2*x6^2*x7^3*x9 + x2^2*x3*x4^3*x5^2*x6^2*x7^3 + -x2^2*x3*x4^3*x5^2*x6^2*x7^2*x8*x9 + x2^2*x3*x4^3*x5^2*x6^2*x7^2*x8 + x2^2*x3*x4^3*x5^2*x6^2*x7^2*x9 + -x2^2*x3*x4^3*x5^2*x6^2*x7^2 + x2^2*x3*x4^3*x5^2*x6^2*x7*x8*x9 + -x2^2*x3*x4^3*x5^2*x6^2*x7*x8 + -x2^2*x3*x4^3*x5^2*x6^2*x7*x9 + x2^2*x3*x4^3*x5^2*x6^2*x7 + -x2^2*x3*x4^3*x5^2*x6^2*x8*x9 + x2^2*x3*x4^3*x5^2*x6^2*x8 + x2^2*x3*x4^3*x5^2*x6^2*x9 + -x2^2*x3*x4^3*x5^2*x6^2 + -x2^2*x3*x4^3*x5^2*x6*x7^3*x8*x9 + x2^2*x3*x4^3*x5^2*x6*x7^3*x8 + x2^2*x3*x4^3*x5^2*x6*x7^3*x9 + -x2^2*x3*x4^3*x5^2*x6*x7^3 + x2^2*x3*x4^3*x5^2*x6*x7^2*x8*x9 + -x2^2*x3*x4^3*x5^2*x6*x7^2*x8 + -x2^2*x3*x4^3*x5^2*x6*x7^2*x9 + x2^2*x3*x4^3*x5^2*x6*x7^2 + -x2^2*x3*x4^3*x5*x6^6*x7*x8*x9 + x2^2*x3*x4^3*x5*x6^6*x7*x8 + x2^2*x3*x4^3*x5*x6^6*x7*x9 + -x2^2*x3*x4^3*x5*x6^6*x7 + x2^2*x3*x4^3*x5*x6^6*x8*x9 + -x2^2*x3*x4^3*x5*x6^6*x8 + -x2^2*x3*x4^3*x5*x6^6*x9 + x2^2*x3*x4^3*x5*x6^6 + x2^2*x3*x4^3*x5*x6^5*x7^2*x8^2*x9 + -x2^2*x3*x4^3*x5*x6^5*x7^2*x8^2 + -x2^2*x3*x4^3*x5*x6^5*x7^2*x9 + x2^2*x3*x4^3*x5*x6^5*x7^2 + -2*x2^2*x3*x4^3*x5*x6^5*x7*x8^2*x9 + 2*x2^2*x3*x4^3*x5*x6^5*x7*x8^2 + 2*x2^2*x3*x4^3*x5*x6^5*x7*x8*x9 + -2*x2^2*x3*x4^3*x5*x6^5*x7*x8 + x2^2*x3*x4^3*x5*x6^5*x8^2*x9 + -x2^2*x3*x4^3*x5*x6^5*x8^2 + -2*x2^2*x3*x4^3*x5*x6^5*x8*x9 + 2*x2^2*x3*x4^3*x5*x6^5*x8 + x2^2*x3*x4^3*x5*x6^5*x9 + -x2^2*x3*x4^3*x5*x6^5 + x2^2*x3*x4^3*x5*x6^4*x7^3*x8^2*x9 + -x2^2*x3*x4^3*x5*x6^4*x7^3*x8^2 + -x2^2*x3*x4^3*x5*x6^4*x7^3*x9 + x2^2*x3*x4^3*x5*x6^4*x7^3 + -2*x2^2*x3*x4^3*x5*x6^4*x7^2*x8^2*x9 + 2*x2^2*x3*x4^3*x5*x6^4*x7^2*x8^2 + 2*x2^2*x3*x4^3*x5*x6^4*x7^2*x9 + -2*x2^2*x3*x4^3*x5*x6^4*x7^2 + 2*x2^2*x3*x4^3*x5*x6^4*x7*x8^2*x9 + -2*x2^2*x3*x4^3*x5*x6^4*x7*x8^2 + -x2^2*x3*x4^3*x5*x6^4*x7*x8*x9 + x2^2*x3*x4^3*x5*x6^4*x7*x8 + -x2^2*x3*x4^3*x5*x6^4*x7*x9 + x2^2*x3*x4^3*x5*x6^4*x7 + -x2^2*x3*x4^3*x5*x6^4*x8^2*x9 + x2^2*x3*x4^3*x5*x6^4*x8^2 + x2^2*x3*x4^3*x5*x6^4*x8*x9 + -x2^2*x3*x4^3*x5*x6^4*x8 + -x2^2*x3*x4^3*x5*x6^3*x7^3*x8^2*x9 + x2^2*x3*x4^3*x5*x6^3*x7^3*x8^2 + x2^2*x3*x4^3*x5*x6^3*x7^3*x9 + -x2^2*x3*x4^3*x5*x6^3*x7^3 + x2^2*x3*x4^3*x5*x6^3*x7^2*x8^2*x9 + -x2^2*x3*x4^3*x5*x6^3*x7^2*x8^2 + -x2^2*x3*x4^3*x5*x6^3*x7^2*x9 + x2^2*x3*x4^3*x5*x6^3*x7^2 + x2^2*x3*x4^3*x5*x6^3*x7*x8*x9 + -x2^2*x3*x4^3*x5*x6^3*x7*x8 + -x2^2*x3*x4^3*x5*x6^3*x7*x9 + x2^2*x3*x4^3*x5*x6^3*x7 + -x2^2*x3*x4^3*x5*x6^3*x8*x9 + x2^2*x3*x4^3*x5*x6^3*x8 + x2^2*x3*x4^3*x5*x6^3*x9 + -x2^2*x3*x4^3*x5*x6^3 + x2^2*x3*x4^3*x5*x6^2*x7^4*x8*x9 + -x2^2*x3*x4^3*x5*x6^2*x7^4*x8 + -x2^2*x3*x4^3*x5*x6^2*x7^4*x9 + x2^2*x3*x4^3*x5*x6^2*x7^4 + -2*x2^2*x3*x4^3*x5*x6^2*x7^3*x8*x9 + 2*x2^2*x3*x4^3*x5*x6^2*x7^3*x8 + 2*x2^2*x3*x4^3*x5*x6^2*x7^3*x9 + -2*x2^2*x3*x4^3*x5*x6^2*x7^3 + x2^2*x3*x4^3*x5*x6^2*x7^2*x8*x9 + -x2^2*x3*x4^3*x5*x6^2*x7^2*x8 + -x2^2*x3*x4^3*x5*x6^2*x7^2*x9 + x2^2*x3*x4^3*x5*x6^2*x7^2 + -x2^2*x3*x4^3*x5*x6^2*x7*x8*x9 + x2^2*x3*x4^3*x5*x6^2*x7*x8 + x2^2*x3*x4^3*x5*x6^2*x7*x9 + -x2^2*x3*x4^3*x5*x6^2*x7 + x2^2*x3*x4^3*x5*x6^2*x8*x9 + -x2^2*x3*x4^3*x5*x6^2*x8 + -x2^2*x3*x4^3*x5*x6^2*x9 + x2^2*x3*x4^3*x5*x6^2 + x2^2*x3*x4^3*x5*x6*x7^3*x8*x9 + -x2^2*x3*x4^3*x5*x6*x7^3*x8 + -x2^2*x3*x4^3*x5*x6*x7^3*x9 + x2^2*x3*x4^3*x5*x6*x7^3 + -x2^2*x3*x4^3*x5*x6*x7^2*x8*x9 + x2^2*x3*x4^3*x5*x6*x7^2*x8 + x2^2*x3*x4^3*x5*x6*x7^2*x9 + -x2^2*x3*x4^3*x5*x6*x7^2 + -x2^2*x3*x4^3*x5*x7^4*x8*x9 + x2^2*x3*x4^3*x5*x7^4*x8 + x2^2*x3*x4^3*x5*x7^4*x9 + -x2^2*x3*x4^3*x5*x7^4 + x2^2*x3*x4^3*x5*x7^3*x8*x9 + -x2^2*x3*x4^3*x5*x7^3*x8 + -x2^2*x3*x4^3*x5*x7^3*x9 + x2^2*x3*x4^3*x5*x7^3 + x2^2*x3*x4^3*x6^6*x7*x8*x9 + -x2^2*x3*x4^3*x6^6*x7*x8 + -x2^2*x3*x4^3*x6^6*x7*x9 + x2^2*x3*x4^3*x6^6*x7 + -x2^2*x3*x4^3*x6^6*x8*x9 + x2^2*x3*x4^3*x6^6*x8 + x2^2*x3*x4^3*x6^6*x9 + -x2^2*x3*x4^3*x6^6 + -x2^2*x3*x4^3*x6^5*x7^2*x8^2*x9 + x2^2*x3*x4^3*x6^5*x7^2*x8^2 + x2^2*x3*x4^3*x6^5*x7^2*x9 + -x2^2*x3*x4^3*x6^5*x7^2 + 2*x2^2*x3*x4^3*x6^5*x7*x8^2*x9 + -2*x2^2*x3*x4^3*x6^5*x7*x8^2 + -2*x2^2*x3*x4^3*x6^5*x7*x8*x9 + 2*x2^2*x3*x4^3*x6^5*x7*x8 + -x2^2*x3*x4^3*x6^5*x8^2*x9 + x2^2*x3*x4^3*x6^5*x8^2 + 2*x2^2*x3*x4^3*x6^5*x8*x9 + -2*x2^2*x3*x4^3*x6^5*x8 + -x2^2*x3*x4^3*x6^5*x9 + x2^2*x3*x4^3*x6^5 + -x2^2*x3*x4^3*x6^4*x7^3*x8^2*x9 + x2^2*x3*x4^3*x6^4*x7^3*x8^2 + x2^2*x3*x4^3*x6^4*x7^3*x9 + -x2^2*x3*x4^3*x6^4*x7^3 + 2*x2^2*x3*x4^3*x6^4*x7^2*x8^2*x9 + -2*x2^2*x3*x4^3*x6^4*x7^2*x8^2 + -2*x2^2*x3*x4^3*x6^4*x7^2*x9 + 2*x2^2*x3*x4^3*x6^4*x7^2 + -2*x2^2*x3*x4^3*x6^4*x7*x8^2*x9 + 2*x2^2*x3*x4^3*x6^4*x7*x8^2 + x2^2*x3*x4^3*x6^4*x7*x8*x9 + -x2^2*x3*x4^3*x6^4*x7*x8 + x2^2*x3*x4^3*x6^4*x7*x9 + -x2^2*x3*x4^3*x6^4*x7 + x2^2*x3*x4^3*x6^4*x8^2*x9 + -x2^2*x3*x4^3*x6^4*x8^2 + -x2^2*x3*x4^3*x6^4*x8*x9 + x2^2*x3*x4^3*x6^4*x8 + x2^2*x3*x4^3*x6^3*x7^3*x8^2*x9 + -x2^2*x3*x4^3*x6^3*x7^3*x8^2 + -x2^2*x3*x4^3*x6^3*x7^3*x9 + x2^2*x3*x4^3*x6^3*x7^3 + -x2^2*x3*x4^3*x6^3*x7^2*x8^2*x9 + x2^2*x3*x4^3*x6^3*x7^2*x8^2 + x2^2*x3*x4^3*x6^3*x7^2*x9 + -x2^2*x3*x4^3*x6^3*x7^2 + -x2^2*x3*x4^3*x6^2*x7^4*x8*x9 + x2^2*x3*x4^3*x6^2*x7^4*x8 + x2^2*x3*x4^3*x6^2*x7^4*x9 + -x2^2*x3*x4^3*x6^2*x7^4 + x2^2*x3*x4^3*x6^2*x7^3*x8*x9 + -x2^2*x3*x4^3*x6^2*x7^3*x8 + -x2^2*x3*x4^3*x6^2*x7^3*x9 + x2^2*x3*x4^3*x6^2*x7^3 + x2^2*x3*x4^3*x7^4*x8*x9 + -x2^2*x3*x4^3*x7^4*x8 + -x2^2*x3*x4^3*x7^4*x9 + x2^2*x3*x4^3*x7^4 + -x2^2*x3*x4^3*x7^3*x8*x9 + x2^2*x3*x4^3*x7^3*x8 + x2^2*x3*x4^3*x7^3*x9 + -x2^2*x3*x4^3*x7^3 + -x2^2*x3*x4^2*x5*x6^6*x7*x8^2*x9 + x2^2*x3*x4^2*x5*x6^6*x7*x8^2 + x2^2*x3*x4^2*x5*x6^6*x7*x8*x9 + -x2^2*x3*x4^2*x5*x6^6*x7*x8 + x2^2*x3*x4^2*x5*x6^6*x8^2*x9 + -x2^2*x3*x4^2*x5*x6^6*x8^2 + -x2^2*x3*x4^2*x5*x6^6*x8*x9 + x2^2*x3*x4^2*x5*x6^6*x8 + -x2^2*x3*x4^2*x5*x6^5*x7^2*x8^2*x9 + x2^2*x3*x4^2*x5*x6^5*x7^2*x8^2 + x2^2*x3*x4^2*x5*x6^5*x7^2*x9 + -x2^2*x3*x4^2*x5*x6^5*x7^2 + 2*x2^2*x3*x4^2*x5*x6^5*x7*x8^2*x9 + -2*x2^2*x3*x4^2*x5*x6^5*x7*x8^2 + -x2^2*x3*x4^2*x5*x6^5*x7*x8*x9 + x2^2*x3*x4^2*x5*x6^5*x7*x8 + -x2^2*x3*x4^2*x5*x6^5*x7*x9 + x2^2*x3*x4^2*x5*x6^5*x7 + -x2^2*x3*x4^2*x5*x6^5*x8^2*x9 + x2^2*x3*x4^2*x5*x6^5*x8^2 + x2^2*x3*x4^2*x5*x6^5*x8*x9 + -x2^2*x3*x4^2*x5*x6^5*x8 + x2^2*x3*x4^2*x5*x6^4*x7^2*x8^2*x9 + -x2^2*x3*x4^2*x5*x6^4*x7^2*x8^2 + -x2^2*x3*x4^2*x5*x6^4*x7^2*x9 + x2^2*x3*x4^2*x5*x6^4*x7^2 + -x2^2*x3*x4^2*x5*x6^4*x7*x8^2*x9 + x2^2*x3*x4^2*x5*x6^4*x7*x8^2 + x2^2*x3*x4^2*x5*x6^4*x7*x9 + -x2^2*x3*x4^2*x5*x6^4*x7 + -x2^2*x3*x4^2*x5*x6^3*x7*x8*x9^2 + x2^2*x3*x4^2*x5*x6^3*x7*x8*x9 + x2^2*x3*x4^2*x5*x6^3*x7*x9^2 + -x2^2*x3*x4^2*x5*x6^3*x7*x9 + x2^2*x3*x4^2*x5*x6^3*x8*x9^2 + -x2^2*x3*x4^2*x5*x6^3*x8*x9 + -x2^2*x3*x4^2*x5*x6^3*x9^2 + x2^2*x3*x4^2*x5*x6^3*x9 + x2^2*x3*x4^2*x5*x6*x7*x8*x9^2 + -x2^2*x3*x4^2*x5*x6*x7*x8*x9 + -x2^2*x3*x4^2*x5*x6*x7*x9^2 + x2^2*x3*x4^2*x5*x6*x7*x9 + -x2^2*x3*x4^2*x5*x6*x8*x9^2 + x2^2*x3*x4^2*x5*x6*x8*x9 + x2^2*x3*x4^2*x5*x6*x9^2 + -x2^2*x3*x4^2*x5*x6*x9 + x2^2*x3*x4^2*x6^6*x7*x8^2*x9 + -x2^2*x3*x4^2*x6^6*x7*x8^2 + -x2^2*x3*x4^2*x6^6*x7*x8*x9 + x2^2*x3*x4^2*x6^6*x7*x8 + -x2^2*x3*x4^2*x6^6*x8^2*x9 + x2^2*x3*x4^2*x6^6*x8^2 + x2^2*x3*x4^2*x6^6*x8*x9 + -x2^2*x3*x4^2*x6^6*x8 + x2^2*x3*x4^2*x6^5*x7^2*x8^2*x9 + -x2^2*x3*x4^2*x6^5*x7^2*x8^2 + -x2^2*x3*x4^2*x6^5*x7^2*x9 + x2^2*x3*x4^2*x6^5*x7^2 + -2*x2^2*x3*x4^2*x6^5*x7*x8^2*x9 + 2*x2^2*x3*x4^2*x6^5*x7*x8^2 + x2^2*x3*x4^2*x6^5*x7*x8*x9 + -x2^2*x3*x4^2*x6^5*x7*x8 + x2^2*x3*x4^2*x6^5*x7*x9 + -x2^2*x3*x4^2*x6^5*x7 + x2^2*x3*x4^2*x6^5*x8^2*x9 + -x2^2*x3*x4^2*x6^5*x8^2 + -x2^2*x3*x4^2*x6^5*x8*x9 + x2^2*x3*x4^2*x6^5*x8 + -x2^2*x3*x4^2*x6^4*x7^2*x8^2*x9 + x2^2*x3*x4^2*x6^4*x7^2*x8^2 + x2^2*x3*x4^2*x6^4*x7^2*x9 + -x2^2*x3*x4^2*x6^4*x7^2 + x2^2*x3*x4^2*x6^4*x7*x8^2*x9 + -x2^2*x3*x4^2*x6^4*x7*x8^2 + -x2^2*x3*x4^2*x6^4*x7*x9 + x2^2*x3*x4^2*x6^4*x7 + x2^2*x3*x4^2*x6^3*x7*x8*x9^2 + -x2^2*x3*x4^2*x6^3*x7*x8*x9 + -x2^2*x3*x4^2*x6^3*x7*x9^2 + x2^2*x3*x4^2*x6^3*x7*x9 + -x2^2*x3*x4^2*x6^3*x8*x9^2 + x2^2*x3*x4^2*x6^3*x8*x9 + x2^2*x3*x4^2*x6^3*x9^2 + -x2^2*x3*x4^2*x6^3*x9 + -x2^2*x3*x4^2*x6*x7*x8*x9^2 + x2^2*x3*x4^2*x6*x7*x8*x9 + x2^2*x3*x4^2*x6*x7*x9^2 + -x2^2*x3*x4^2*x6*x7*x9 + x2^2*x3*x4^2*x6*x8*x9^2 + -x2^2*x3*x4^2*x6*x8*x9 + -x2^2*x3*x4^2*x6*x9^2 + x2^2*x3*x4^2*x6*x9 + -x2^2*x3*x4*x5^5*x6*x7*x8*x9 + x2^2*x3*x4*x5^5*x6*x7*x8 + x2^2*x3*x4*x5^5*x6*x7*x9 + -x2^2*x3*x4*x5^5*x6*x7 + x2^2*x3*x4*x5^5*x6*x8*x9 + -x2^2*x3*x4*x5^5*x6*x8 + -x2^2*x3*x4*x5^5*x6*x9 + x2^2*x3*x4*x5^5*x6 + x2^2*x3*x4*x5^5*x7*x8*x9 + -x2^2*x3*x4*x5^5*x7*x8 + -x2^2*x3*x4*x5^5*x7*x9 + x2^2*x3*x4*x5^5*x7 + -x2^2*x3*x4*x5^5*x8*x9 + x2^2*x3*x4*x5^5*x8 + x2^2*x3*x4*x5^5*x9 + -x2^2*x3*x4*x5^5 + x2^2*x3*x4*x5^4*x6^2*x7^2*x8*x9 + -x2^2*x3*x4*x5^4*x6^2*x7^2*x8 + -x2^2*x3*x4*x5^4*x6^2*x7^2*x9 + x2^2*x3*x4*x5^4*x6^2*x7^2 + -x2^2*x3*x4*x5^4*x6^2*x7*x8*x9 + x2^2*x3*x4*x5^4*x6^2*x7*x8 + x2^2*x3*x4*x5^4*x6^2*x7*x9 + -x2^2*x3*x4*x5^4*x6^2*x7 + -x2^2*x3*x4*x5^4*x6*x7^2*x8*x9 + x2^2*x3*x4*x5^4*x6*x7^2*x8 + x2^2*x3*x4*x5^4*x6*x7^2*x9 + -x2^2*x3*x4*x5^4*x6*x7^2 + -x2^2*x3*x4*x5^4*x6*x7*x8*x9^2 + 2*x2^2*x3*x4*x5^4*x6*x7*x8*x9 + -x2^2*x3*x4*x5^4*x6*x7*x8 + x2^2*x3*x4*x5^4*x6*x7*x9^2 + -2*x2^2*x3*x4*x5^4*x6*x7*x9 + x2^2*x3*x4*x5^4*x6*x7 + x2^2*x3*x4*x5^4*x6*x8*x9^2 + -x2^2*x3*x4*x5^4*x6*x8*x9 + -x2^2*x3*x4*x5^4*x6*x9^2 + x2^2*x3*x4*x5^4*x6*x9 + x2^2*x3*x4*x5^4*x7*x8*x9^2 + -x2^2*x3*x4*x5^4*x7*x8*x9 + -x2^2*x3*x4*x5^4*x7*x9^2 + x2^2*x3*x4*x5^4*x7*x9 + -x2^2*x3*x4*x5^4*x8*x9^2 + x2^2*x3*x4*x5^4*x8*x9 + x2^2*x3*x4*x5^4*x9^2 + -x2^2*x3*x4*x5^4*x9 + x2^2*x3*x4*x5^3*x6^2*x7^2*x8*x9^2 + -2*x2^2*x3*x4*x5^3*x6^2*x7^2*x8*x9 + x2^2*x3*x4*x5^3*x6^2*x7^2*x8 + -x2^2*x3*x4*x5^3*x6^2*x7^2*x9^2 + 2*x2^2*x3*x4*x5^3*x6^2*x7^2*x9 + -x2^2*x3*x4*x5^3*x6^2*x7^2 + -x2^2*x3*x4*x5^3*x6^2*x7*x8*x9^2 + 2*x2^2*x3*x4*x5^3*x6^2*x7*x8*x9 + -x2^2*x3*x4*x5^3*x6^2*x7*x8 + x2^2*x3*x4*x5^3*x6^2*x7*x9^2 + -2*x2^2*x3*x4*x5^3*x6^2*x7*x9 + x2^2*x3*x4*x5^3*x6^2*x7 + x2^2*x3*x4*x5^3*x6*x7^2*x8*x9 + -x2^2*x3*x4*x5^3*x6*x7^2*x8 + -x2^2*x3*x4*x5^3*x6*x7^2*x9 + x2^2*x3*x4*x5^3*x6*x7^2 + x2^2*x3*x4*x5^3*x6*x7*x8*x9^2 + -x2^2*x3*x4*x5^3*x6*x7*x8*x9 + -x2^2*x3*x4*x5^3*x6*x7*x9^2 + x2^2*x3*x4*x5^3*x6*x7*x9 + -x2^2*x3*x4*x5^3*x6*x8*x9^2 + x2^2*x3*x4*x5^3*x6*x8 + x2^2*x3*x4*x5^3*x6*x9^2 + -x2^2*x3*x4*x5^3*x6 + -x2^2*x3*x4*x5^3*x7^2*x8*x9^2 + x2^2*x3*x4*x5^3*x7^2*x8*x9 + x2^2*x3*x4*x5^3*x7^2*x9^2 + -x2^2*x3*x4*x5^3*x7^2*x9 + -x2^2*x3*x4*x5^3*x7*x8*x9 + x2^2*x3*x4*x5^3*x7*x8 + x2^2*x3*x4*x5^3*x7*x9 + -x2^2*x3*x4*x5^3*x7 + x2^2*x3*x4*x5^3*x8*x9^2 + -x2^2*x3*x4*x5^3*x8 + -x2^2*x3*x4*x5^3*x9^2 + x2^2*x3*x4*x5^3 + x2^2*x3*x4*x5^2*x6^4*x7*x8*x9^2 + -x2^2*x3*x4*x5^2*x6^4*x7*x8*x9 + -x2^2*x3*x4*x5^2*x6^4*x7*x9^2 + x2^2*x3*x4*x5^2*x6^4*x7*x9 + -x2^2*x3*x4*x5^2*x6^4*x8*x9^2 + x2^2*x3*x4*x5^2*x6^4*x8*x9 + x2^2*x3*x4*x5^2*x6^4*x9^2 + -x2^2*x3*x4*x5^2*x6^4*x9 + x2^2*x3*x4*x5^2*x6^3*x7^3*x8*x9 + -x2^2*x3*x4*x5^2*x6^3*x7^3*x8 + -x2^2*x3*x4*x5^2*x6^3*x7^3*x9 + x2^2*x3*x4*x5^2*x6^3*x7^3 + -x2^2*x3*x4*x5^2*x6^3*x7^2*x8*x9 + x2^2*x3*x4*x5^2*x6^3*x7^2*x8 + x2^2*x3*x4*x5^2*x6^3*x7^2*x9 + -x2^2*x3*x4*x5^2*x6^3*x7^2 + -x2^2*x3*x4*x5^2*x6^3*x7*x8*x9^2 + x2^2*x3*x4*x5^2*x6^3*x7*x8*x9 + x2^2*x3*x4*x5^2*x6^3*x7*x9^2 + -x2^2*x3*x4*x5^2*x6^3*x7*x9 + x2^2*x3*x4*x5^2*x6^3*x8*x9^2 + -x2^2*x3*x4*x5^2*x6^3*x8*x9 + -x2^2*x3*x4*x5^2*x6^3*x9^2 + x2^2*x3*x4*x5^2*x6^3*x9 + -x2^2*x3*x4*x5^2*x6^2*x7^3*x8*x9 + x2^2*x3*x4*x5^2*x6^2*x7^3*x8 + x2^2*x3*x4*x5^2*x6^2*x7^3*x9 + -x2^2*x3*x4*x5^2*x6^2*x7^3 + x2^2*x3*x4*x5^2*x6^2*x7^2*x8*x9 + -x2^2*x3*x4*x5^2*x6^2*x7^2*x8 + -x2^2*x3*x4*x5^2*x6^2*x7^2*x9 + x2^2*x3*x4*x5^2*x6^2*x7^2 + -x2^2*x3*x4*x5^2*x6*x7^2*x8*x9^2 + x2^2*x3*x4*x5^2*x6*x7^2*x8*x9 + x2^2*x3*x4*x5^2*x6*x7^2*x9^2 + -x2^2*x3*x4*x5^2*x6*x7^2*x9 + x2^2*x3*x4*x5^2*x6*x7*x8*x9^2 + -x2^2*x3*x4*x5^2*x6*x7*x8*x9 + -x2^2*x3*x4*x5^2*x6*x7*x9^2 + x2^2*x3*x4*x5^2*x6*x7*x9 + x2^2*x3*x4*x5^2*x7^2*x8*x9^2 + -x2^2*x3*x4*x5^2*x7^2*x8*x9 + -x2^2*x3*x4*x5^2*x7^2*x9^2 + x2^2*x3*x4*x5^2*x7^2*x9 + -x2^2*x3*x4*x5^2*x7*x8*x9^2 + x2^2*x3*x4*x5^2*x7*x8*x9 + x2^2*x3*x4*x5^2*x7*x9^2 + -x2^2*x3*x4*x5^2*x7*x9 + -x2^2*x3*x4*x5*x6^4*x7^3*x8^2*x9 + x2^2*x3*x4*x5*x6^4*x7^3*x8^2 + x2^2*x3*x4*x5*x6^4*x7^3*x9 + -x2^2*x3*x4*x5*x6^4*x7^3 + x2^2*x3*x4*x5*x6^4*x7^2*x8^2*x9 + -x2^2*x3*x4*x5*x6^4*x7^2*x8^2 + -x2^2*x3*x4*x5*x6^4*x7^2*x9 + x2^2*x3*x4*x5*x6^4*x7^2 + x2^2*x3*x4*x5*x6^4*x7*x8^2*x9^2 + -x2^2*x3*x4*x5*x6^4*x7*x8^2*x9 + -x2^2*x3*x4*x5*x6^4*x7*x8*x9^2 + x2^2*x3*x4*x5*x6^4*x7*x8*x9 + -x2^2*x3*x4*x5*x6^4*x8^2*x9^2 + x2^2*x3*x4*x5*x6^4*x8^2*x9 + x2^2*x3*x4*x5*x6^4*x8*x9^2 + -x2^2*x3*x4*x5*x6^4*x8*x9 + x2^2*x3*x4*x5*x6^3*x7^3*x8^2*x9 + -x2^2*x3*x4*x5*x6^3*x7^3*x8^2 + -x2^2*x3*x4*x5*x6^3*x7^3*x8*x9 + x2^2*x3*x4*x5*x6^3*x7^3*x8 + -x2^2*x3*x4*x5*x6^3*x7^2*x8^2*x9 + x2^2*x3*x4*x5*x6^3*x7^2*x8^2 + x2^2*x3*x4*x5*x6^3*x7^2*x8*x9 + -x2^2*x3*x4*x5*x6^3*x7^2*x8 + -x2^2*x3*x4*x5*x6^3*x7*x8^2*x9^2 + x2^2*x3*x4*x5*x6^3*x7*x8^2*x9 + x2^2*x3*x4*x5*x6^3*x7*x8*x9^2 + -x2^2*x3*x4*x5*x6^3*x7*x8*x9 + x2^2*x3*x4*x5*x6^3*x8^2*x9^2 + -x2^2*x3*x4*x5*x6^3*x8^2*x9 + -x2^2*x3*x4*x5*x6^3*x8*x9^2 + x2^2*x3*x4*x5*x6^3*x8*x9 + x2^2*x3*x4*x5*x6^2*x7^4*x8*x9^2 + -x2^2*x3*x4*x5*x6^2*x7^4*x8*x9 + -x2^2*x3*x4*x5*x6^2*x7^4*x9^2 + x2^2*x3*x4*x5*x6^2*x7^4*x9 + x2^2*x3*x4*x5*x6^2*x7^3*x8*x9 + -x2^2*x3*x4*x5*x6^2*x7^3*x8 + -x2^2*x3*x4*x5*x6^2*x7^3*x9 + x2^2*x3*x4*x5*x6^2*x7^3 + x2^2*x3*x4*x5*x6^2*x7^2*x8^2*x9^2 + -x2^2*x3*x4*x5*x6^2*x7^2*x8^2*x9 + -2*x2^2*x3*x4*x5*x6^2*x7^2*x8*x9^2 + x2^2*x3*x4*x5*x6^2*x7^2*x8*x9 + x2^2*x3*x4*x5*x6^2*x7^2*x8 + x2^2*x3*x4*x5*x6^2*x7^2*x9^2 + -x2^2*x3*x4*x5*x6^2*x7^2 + -x2^2*x3*x4*x5*x6^2*x7*x8^2*x9^2 + x2^2*x3*x4*x5*x6^2*x7*x8^2*x9 + x2^2*x3*x4*x5*x6^2*x7*x8*x9^2 + -x2^2*x3*x4*x5*x6^2*x7*x8*x9 + -x2^2*x3*x4*x5*x6*x7^3*x8*x9^2 + x2^2*x3*x4*x5*x6*x7^3*x8*x9 + x2^2*x3*x4*x5*x6*x7^3*x9^2 + -x2^2*x3*x4*x5*x6*x7^3*x9 + -x2^2*x3*x4*x5*x6*x7^2*x8^2*x9^2 + x2^2*x3*x4*x5*x6*x7^2*x8^2*x9 + 2*x2^2*x3*x4*x5*x6*x7^2*x8*x9^2 + -2*x2^2*x3*x4*x5*x6*x7^2*x8*x9 + -x2^2*x3*x4*x5*x6*x7^2*x9^2 + x2^2*x3*x4*x5*x6*x7^2*x9 + x2^2*x3*x4*x5*x6*x7*x8^2*x9^2 + -x2^2*x3*x4*x5*x6*x7*x8^2*x9 + -x2^2*x3*x4*x5*x6*x7*x8*x9^2 + x2^2*x3*x4*x5*x6*x7*x8*x9 + -x2^2*x3*x4*x5*x7^4*x8*x9^2 + x2^2*x3*x4*x5*x7^4*x8*x9 + x2^2*x3*x4*x5*x7^4*x9^2 + -x2^2*x3*x4*x5*x7^4*x9 + x2^2*x3*x4*x5*x7^3*x8*x9^2 + -x2^2*x3*x4*x5*x7^3*x8*x9 + -x2^2*x3*x4*x5*x7^3*x9^2 + x2^2*x3*x4*x5*x7^3*x9 + x2^2*x3*x4*x6^4*x7^3*x8^2*x9 + -x2^2*x3*x4*x6^4*x7^3*x8^2 + -x2^2*x3*x4*x6^4*x7^3*x9 + x2^2*x3*x4*x6^4*x7^3 + -x2^2*x3*x4*x6^4*x7^2*x8^2*x9 + x2^2*x3*x4*x6^4*x7^2*x8^2 + x2^2*x3*x4*x6^4*x7^2*x9 + -x2^2*x3*x4*x6^4*x7^2 + -x2^2*x3*x4*x6^4*x7*x8^2*x9^2 + x2^2*x3*x4*x6^4*x7*x8^2*x9 + x2^2*x3*x4*x6^4*x7*x9^2 + -x2^2*x3*x4*x6^4*x7*x9 + x2^2*x3*x4*x6^4*x8^2*x9^2 + -x2^2*x3*x4*x6^4*x8^2*x9 + -x2^2*x3*x4*x6^4*x9^2 + x2^2*x3*x4*x6^4*x9 + -x2^2*x3*x4*x6^3*x7^3*x8^2*x9 + x2^2*x3*x4*x6^3*x7^3*x8^2 + x2^2*x3*x4*x6^3*x7^3*x9 + -x2^2*x3*x4*x6^3*x7^3 + x2^2*x3*x4*x6^3*x7^2*x8^2*x9 + -x2^2*x3*x4*x6^3*x7^2*x8^2 + -x2^2*x3*x4*x6^3*x7^2*x9 + x2^2*x3*x4*x6^3*x7^2 + x2^2*x3*x4*x6^3*x7*x8^2*x9^2 + -x2^2*x3*x4*x6^3*x7*x8^2*x9 + -x2^2*x3*x4*x6^3*x7*x9^2 + x2^2*x3*x4*x6^3*x7*x9 + -x2^2*x3*x4*x6^3*x8^2*x9^2 + x2^2*x3*x4*x6^3*x8^2*x9 + x2^2*x3*x4*x6^3*x9^2 + -x2^2*x3*x4*x6^3*x9 + -x2^2*x3*x4*x6^2*x7^4*x8*x9^2 + x2^2*x3*x4*x6^2*x7^4*x8*x9 + x2^2*x3*x4*x6^2*x7^4*x9^2 + -x2^2*x3*x4*x6^2*x7^4*x9 + -x2^2*x3*x4*x6^2*x7^2*x8^2*x9^2 + x2^2*x3*x4*x6^2*x7^2*x8^2*x9 + x2^2*x3*x4*x6^2*x7^2*x8*x9^2 + -x2^2*x3*x4*x6^2*x7^2*x8*x9 + x2^2*x3*x4*x6^2*x7*x8^2*x9^2 + -x2^2*x3*x4*x6^2*x7*x8^2*x9 + -x2^2*x3*x4*x6^2*x7*x9^2 + x2^2*x3*x4*x6^2*x7*x9 + x2^2*x3*x4*x6*x7^3*x8*x9^2 + -x2^2*x3*x4*x6*x7^3*x8*x9 + -x2^2*x3*x4*x6*x7^3*x9^2 + x2^2*x3*x4*x6*x7^3*x9 + x2^2*x3*x4*x6*x7^2*x8^2*x9^2 + -x2^2*x3*x4*x6*x7^2*x8^2*x9 + -x2^2*x3*x4*x6*x7^2*x8*x9^2 + x2^2*x3*x4*x6*x7^2*x8*x9 + -x2^2*x3*x4*x6*x7*x8^2*x9^2 + x2^2*x3*x4*x6*x7*x8^2*x9 + x2^2*x3*x4*x6*x7*x9^2 + -x2^2*x3*x4*x6*x7*x9 + x2^2*x3*x4*x7^4*x8*x9^2 + -x2^2*x3*x4*x7^4*x8*x9 + -x2^2*x3*x4*x7^4*x9^2 + x2^2*x3*x4*x7^4*x9 + -x2^2*x3*x4*x7^3*x8*x9^2 + x2^2*x3*x4*x7^3*x8*x9 + x2^2*x3*x4*x7^3*x9^2 + -x2^2*x3*x4*x7^3*x9 + x2^2*x3*x5^5*x6*x7*x8*x9 + -x2^2*x3*x5^5*x6*x7*x8 + -x2^2*x3*x5^5*x6*x7*x9 + x2^2*x3*x5^5*x6*x7 + -x2^2*x3*x5^5*x6*x8*x9 + x2^2*x3*x5^5*x6*x8 + x2^2*x3*x5^5*x6*x9 + -x2^2*x3*x5^5*x6 + -x2^2*x3*x5^5*x7*x8*x9 + x2^2*x3*x5^5*x7*x8 + x2^2*x3*x5^5*x7*x9 + -x2^2*x3*x5^5*x7 + x2^2*x3*x5^5*x8*x9 + -x2^2*x3*x5^5*x8 + -x2^2*x3*x5^5*x9 + x2^2*x3*x5^5 + -x2^2*x3*x5^4*x6^2*x7^2*x8*x9 + x2^2*x3*x5^4*x6^2*x7^2*x8 + x2^2*x3*x5^4*x6^2*x7^2*x9 + -x2^2*x3*x5^4*x6^2*x7^2 + x2^2*x3*x5^4*x6^2*x7*x8*x9 + -x2^2*x3*x5^4*x6^2*x7*x8 + -x2^2*x3*x5^4*x6^2*x7*x9 + x2^2*x3*x5^4*x6^2*x7 + x2^2*x3*x5^4*x6*x7^2*x8*x9 + -x2^2*x3*x5^4*x6*x7^2*x8 + -x2^2*x3*x5^4*x6*x7^2*x9 + x2^2*x3*x5^4*x6*x7^2 + x2^2*x3*x5^4*x6*x7*x8*x9^2 + -2*x2^2*x3*x5^4*x6*x7*x8*x9 + x2^2*x3*x5^4*x6*x7*x8 + -x2^2*x3*x5^4*x6*x7*x9^2 + 2*x2^2*x3*x5^4*x6*x7*x9 + -x2^2*x3*x5^4*x6*x7 + -x2^2*x3*x5^4*x6*x8*x9^2 + x2^2*x3*x5^4*x6*x8*x9 + x2^2*x3*x5^4*x6*x9^2 + -x2^2*x3*x5^4*x6*x9 + -x2^2*x3*x5^4*x7*x8*x9^2 + x2^2*x3*x5^4*x7*x8*x9 + x2^2*x3*x5^4*x7*x9^2 + -x2^2*x3*x5^4*x7*x9 + x2^2*x3*x5^4*x8*x9^2 + -x2^2*x3*x5^4*x8*x9 + -x2^2*x3*x5^4*x9^2 + x2^2*x3*x5^4*x9 + -x2^2*x3*x5^3*x6^2*x7^2*x8*x9^2 + 2*x2^2*x3*x5^3*x6^2*x7^2*x8*x9 + -x2^2*x3*x5^3*x6^2*x7^2*x8 + x2^2*x3*x5^3*x6^2*x7^2*x9^2 + -2*x2^2*x3*x5^3*x6^2*x7^2*x9 + x2^2*x3*x5^3*x6^2*x7^2 + x2^2*x3*x5^3*x6^2*x7*x8*x9^2 + -2*x2^2*x3*x5^3*x6^2*x7*x8*x9 + x2^2*x3*x5^3*x6^2*x7*x8 + -x2^2*x3*x5^3*x6^2*x7*x9^2 + 2*x2^2*x3*x5^3*x6^2*x7*x9 + -x2^2*x3*x5^3*x6^2*x7 + -x2^2*x3*x5^3*x6*x7^2*x8*x9 + x2^2*x3*x5^3*x6*x7^2*x8 + x2^2*x3*x5^3*x6*x7^2*x9 + -x2^2*x3*x5^3*x6*x7^2 + -x2^2*x3*x5^3*x6*x7*x8*x9^2 + x2^2*x3*x5^3*x6*x7*x8*x9 + x2^2*x3*x5^3*x6*x7*x9^2 + -x2^2*x3*x5^3*x6*x7*x9 + x2^2*x3*x5^3*x6*x8*x9^2 + -x2^2*x3*x5^3*x6*x8 + -x2^2*x3*x5^3*x6*x9^2 + x2^2*x3*x5^3*x6 + x2^2*x3*x5^3*x7^2*x8*x9^2 + -x2^2*x3*x5^3*x7^2*x8*x9 + -x2^2*x3*x5^3*x7^2*x9^2 + x2^2*x3*x5^3*x7^2*x9 + x2^2*x3*x5^3*x7*x8*x9 + -x2^2*x3*x5^3*x7*x8 + -x2^2*x3*x5^3*x7*x9 + x2^2*x3*x5^3*x7 + -x2^2*x3*x5^3*x8*x9^2 + x2^2*x3*x5^3*x8 + x2^2*x3*x5^3*x9^2 + -x2^2*x3*x5^3 + -x2^2*x3*x5^2*x6^4*x7*x8*x9^2 + x2^2*x3*x5^2*x6^4*x7*x8*x9 + x2^2*x3*x5^2*x6^4*x7*x9^2 + -x2^2*x3*x5^2*x6^4*x7*x9 + x2^2*x3*x5^2*x6^4*x8*x9^2 + -x2^2*x3*x5^2*x6^4*x8*x9 + -x2^2*x3*x5^2*x6^4*x9^2 + x2^2*x3*x5^2*x6^4*x9 + -x2^2*x3*x5^2*x6^3*x7^3*x8*x9 + x2^2*x3*x5^2*x6^3*x7^3*x8 + x2^2*x3*x5^2*x6^3*x7^3*x9 + -x2^2*x3*x5^2*x6^3*x7^3 + x2^2*x3*x5^2*x6^3*x7^2*x8*x9 + -x2^2*x3*x5^2*x6^3*x7^2*x8 + -x2^2*x3*x5^2*x6^3*x7^2*x9 + x2^2*x3*x5^2*x6^3*x7^2 + x2^2*x3*x5^2*x6^3*x7*x8*x9^2 + -x2^2*x3*x5^2*x6^3*x7*x8 + -x2^2*x3*x5^2*x6^3*x7*x9^2 + x2^2*x3*x5^2*x6^3*x7 + -x2^2*x3*x5^2*x6^3*x8*x9^2 + x2^2*x3*x5^2*x6^3*x8 + x2^2*x3*x5^2*x6^3*x9^2 + -x2^2*x3*x5^2*x6^3 + -x2^2*x3*x5^2*x6^2*x7*x8*x9 + x2^2*x3*x5^2*x6^2*x7*x8 + x2^2*x3*x5^2*x6^2*x7*x9 + -x2^2*x3*x5^2*x6^2*x7 + x2^2*x3*x5^2*x6^2*x8*x9 + -x2^2*x3*x5^2*x6^2*x8 + -x2^2*x3*x5^2*x6^2*x9 + x2^2*x3*x5^2*x6^2 + x2^2*x3*x5^2*x6*x7^3*x8*x9 + -x2^2*x3*x5^2*x6*x7^3*x8 + -x2^2*x3*x5^2*x6*x7^3*x9 + x2^2*x3*x5^2*x6*x7^3 + x2^2*x3*x5^2*x6*x7^2*x8*x9^2 + -2*x2^2*x3*x5^2*x6*x7^2*x8*x9 + x2^2*x3*x5^2*x6*x7^2*x8 + -x2^2*x3*x5^2*x6*x7^2*x9^2 + 2*x2^2*x3*x5^2*x6*x7^2*x9 + -x2^2*x3*x5^2*x6*x7^2 + -x2^2*x3*x5^2*x6*x7*x8*x9^2 + x2^2*x3*x5^2*x6*x7*x8*x9 + x2^2*x3*x5^2*x6*x7*x9^2 + -x2^2*x3*x5^2*x6*x7*x9 + -x2^2*x3*x5^2*x7^2*x8*x9^2 + x2^2*x3*x5^2*x7^2*x8*x9 + x2^2*x3*x5^2*x7^2*x9^2 + -x2^2*x3*x5^2*x7^2*x9 + x2^2*x3*x5^2*x7*x8*x9^2 + -x2^2*x3*x5^2*x7*x8*x9 + -x2^2*x3*x5^2*x7*x9^2 + x2^2*x3*x5^2*x7*x9 + -x2^2*x3*x5*x6^4*x7*x8^2*x9^2 + x2^2*x3*x5*x6^4*x7*x8^2*x9 + x2^2*x3*x5*x6^4*x7*x8*x9^2 + -x2^2*x3*x5*x6^4*x7*x8*x9 + x2^2*x3*x5*x6^4*x8^2*x9^2 + -x2^2*x3*x5*x6^4*x8^2*x9 + -x2^2*x3*x5*x6^4*x8*x9^2 + x2^2*x3*x5*x6^4*x8*x9 + x2^2*x3*x5*x6^3*x7^3*x8*x9 + -x2^2*x3*x5*x6^3*x7^3*x8 + -x2^2*x3*x5*x6^3*x7^3*x9 + x2^2*x3*x5*x6^3*x7^3 + -x2^2*x3*x5*x6^3*x7^2*x8*x9 + x2^2*x3*x5*x6^3*x7^2*x8 + x2^2*x3*x5*x6^3*x7^2*x9 + -x2^2*x3*x5*x6^3*x7^2 + -x2^2*x3*x5*x6^3*x7*x8*x9 + x2^2*x3*x5*x6^3*x7*x8 + x2^2*x3*x5*x6^3*x7*x9 + -x2^2*x3*x5*x6^3*x7 + x2^2*x3*x5*x6^3*x8*x9 + -x2^2*x3*x5*x6^3*x8 + -x2^2*x3*x5*x6^3*x9 + x2^2*x3*x5*x6^3 + -x2^2*x3*x5*x6^2*x7^4*x8*x9^2 + x2^2*x3*x5*x6^2*x7^4*x8 + x2^2*x3*x5*x6^2*x7^4*x9^2 + -x2^2*x3*x5*x6^2*x7^4 + x2^2*x3*x5*x6^2*x7^3*x8*x9 + -x2^2*x3*x5*x6^2*x7^3*x8 + -x2^2*x3*x5*x6^2*x7^3*x9 + x2^2*x3*x5*x6^2*x7^3 + -x2^2*x3*x5*x6^2*x7^2*x8^2*x9^2 + x2^2*x3*x5*x6^2*x7^2*x8^2*x9 + 2*x2^2*x3*x5*x6^2*x7^2*x8*x9^2 + -2*x2^2*x3*x5*x6^2*x7^2*x8*x9 + -x2^2*x3*x5*x6^2*x7^2*x9^2 + x2^2*x3*x5*x6^2*x7^2*x9 + x2^2*x3*x5*x6^2*x7*x8^2*x9^2 + -x2^2*x3*x5*x6^2*x7*x8^2*x9 + -x2^2*x3*x5*x6^2*x7*x8*x9^2 + 2*x2^2*x3*x5*x6^2*x7*x8*x9 + -x2^2*x3*x5*x6^2*x7*x8 + -x2^2*x3*x5*x6^2*x7*x9 + x2^2*x3*x5*x6^2*x7 + -x2^2*x3*x5*x6^2*x8*x9 + x2^2*x3*x5*x6^2*x8 + x2^2*x3*x5*x6^2*x9 + -x2^2*x3*x5*x6^2 + x2^2*x3*x5*x6*x7^3*x8*x9^2 + -2*x2^2*x3*x5*x6*x7^3*x8*x9 + x2^2*x3*x5*x6*x7^3*x8 + -x2^2*x3*x5*x6*x7^3*x9^2 + 2*x2^2*x3*x5*x6*x7^3*x9 + -x2^2*x3*x5*x6*x7^3 + x2^2*x3*x5*x6*x7^2*x8^2*x9^2 + -x2^2*x3*x5*x6*x7^2*x8^2*x9 + -2*x2^2*x3*x5*x6*x7^2*x8*x9^2 + 3*x2^2*x3*x5*x6*x7^2*x8*x9 + -x2^2*x3*x5*x6*x7^2*x8 + x2^2*x3*x5*x6*x7^2*x9^2 + -2*x2^2*x3*x5*x6*x7^2*x9 + x2^2*x3*x5*x6*x7^2 + -x2^2*x3*x5*x6*x8^2*x9^2 + x2^2*x3*x5*x6*x8^2*x9 + x2^2*x3*x5*x6*x8*x9^2 + -x2^2*x3*x5*x6*x8*x9 + x2^2*x3*x5*x7^4*x8*x9^2 + -x2^2*x3*x5*x7^4*x8 + -x2^2*x3*x5*x7^4*x9^2 + x2^2*x3*x5*x7^4 + -x2^2*x3*x5*x7^3*x8*x9^2 + x2^2*x3*x5*x7^3*x8 + x2^2*x3*x5*x7^3*x9^2 + -x2^2*x3*x5*x7^3 + x2^2*x3*x6^4*x7*x8^2*x9^2 + -x2^2*x3*x6^4*x7*x8^2*x9 + -x2^2*x3*x6^4*x7*x9^2 + x2^2*x3*x6^4*x7*x9 + -x2^2*x3*x6^4*x8^2*x9^2 + x2^2*x3*x6^4*x8^2*x9 + x2^2*x3*x6^4*x9^2 + -x2^2*x3*x6^4*x9 + -x2^2*x3*x6^3*x7*x8*x9^2 + x2^2*x3*x6^3*x7*x8*x9 + x2^2*x3*x6^3*x7*x9^2 + -x2^2*x3*x6^3*x7*x9 + x2^2*x3*x6^3*x8*x9^2 + -x2^2*x3*x6^3*x8*x9 + -x2^2*x3*x6^3*x9^2 + x2^2*x3*x6^3*x9 + x2^2*x3*x6^2*x7^4*x8*x9^2 + -x2^2*x3*x6^2*x7^4*x8 + -x2^2*x3*x6^2*x7^4*x9^2 + x2^2*x3*x6^2*x7^4 + -x2^2*x3*x6^2*x7^3*x8*x9 + x2^2*x3*x6^2*x7^3*x8 + x2^2*x3*x6^2*x7^3*x9 + -x2^2*x3*x6^2*x7^3 + x2^2*x3*x6^2*x7^2*x8^2*x9^2 + -x2^2*x3*x6^2*x7^2*x8^2*x9 + -x2^2*x3*x6^2*x7^2*x8*x9^2 + x2^2*x3*x6^2*x7^2*x8*x9 + -x2^2*x3*x6^2*x7*x8^2*x9^2 + x2^2*x3*x6^2*x7*x8^2*x9 + x2^2*x3*x6^2*x7*x9^2 + -x2^2*x3*x6^2*x7*x9 + -x2^2*x3*x6*x7^3*x8*x9^2 + x2^2*x3*x6*x7^3*x8*x9 + x2^2*x3*x6*x7^3*x9^2 + -x2^2*x3*x6*x7^3*x9 + -x2^2*x3*x6*x7^2*x8^2*x9^2 + x2^2*x3*x6*x7^2*x8^2*x9 + x2^2*x3*x6*x7^2*x8*x9^2 + -x2^2*x3*x6*x7^2*x8*x9 + x2^2*x3*x6*x7*x8*x9^2 + -x2^2*x3*x6*x7*x8*x9 + -x2^2*x3*x6*x7*x9^2 + x2^2*x3*x6*x7*x9 + x2^2*x3*x6*x8^2*x9^2 + -x2^2*x3*x6*x8^2*x9 + -x2^2*x3*x6*x8*x9^2 + x2^2*x3*x6*x8*x9 + -x2^2*x3*x7^4*x8*x9^2 + x2^2*x3*x7^4*x8 + x2^2*x3*x7^4*x9^2 + -x2^2*x3*x7^4 + x2^2*x3*x7^3*x8*x9^2 + -x2^2*x3*x7^3*x8 + -x2^2*x3*x7^3*x9^2 + x2^2*x3*x7^3 + -x2^2*x4^6*x5*x6^2*x7*x8*x9^2 + x2^2*x4^6*x5*x6^2*x7*x8*x9 + x2^2*x4^6*x5*x6^2*x7*x9^2 + -x2^2*x4^6*x5*x6^2*x7*x9 + x2^2*x4^6*x5*x6^2*x8*x9^2 + -x2^2*x4^6*x5*x6^2*x8*x9 + -x2^2*x4^6*x5*x6^2*x9^2 + x2^2*x4^6*x5*x6^2*x9 + x2^2*x4^6*x5*x6*x7*x8*x9^2 + -x2^2*x4^6*x5*x6*x7*x8*x9 + -x2^2*x4^6*x5*x6*x7*x9^2 + x2^2*x4^6*x5*x6*x7*x9 + -x2^2*x4^6*x5*x6*x8*x9^2 + x2^2*x4^6*x5*x6*x8*x9 + x2^2*x4^6*x5*x6*x9^2 + -x2^2*x4^6*x5*x6*x9 + x2^2*x4^6*x6^2*x7*x8*x9^2 + -x2^2*x4^6*x6^2*x7*x8*x9 + -x2^2*x4^6*x6^2*x7*x9^2 + x2^2*x4^6*x6^2*x7*x9 + -x2^2*x4^6*x6^2*x8*x9^2 + x2^2*x4^6*x6^2*x8*x9 + x2^2*x4^6*x6^2*x9^2 + -x2^2*x4^6*x6^2*x9 + -x2^2*x4^6*x6*x7*x8*x9^2 + x2^2*x4^6*x6*x7*x8*x9 + x2^2*x4^6*x6*x7*x9^2 + -x2^2*x4^6*x6*x7*x9 + x2^2*x4^6*x6*x8*x9^2 + -x2^2*x4^6*x6*x8*x9 + -x2^2*x4^6*x6*x9^2 + x2^2*x4^6*x6*x9 + -x2^2*x4^5*x5*x6^2*x7*x8^2*x9^2 + x2^2*x4^5*x5*x6^2*x7*x8^2*x9 + x2^2*x4^5*x5*x6^2*x7*x8*x9^2 + -x2^2*x4^5*x5*x6^2*x7*x8*x9 + x2^2*x4^5*x5*x6^2*x8^2*x9^2 + -x2^2*x4^5*x5*x6^2*x8^2*x9 + -x2^2*x4^5*x5*x6^2*x8*x9^2 + x2^2*x4^5*x5*x6^2*x8*x9 + x2^2*x4^5*x5*x6*x7*x8^2*x9^2 + -x2^2*x4^5*x5*x6*x7*x8^2*x9 + -x2^2*x4^5*x5*x6*x7*x8*x9^2 + x2^2*x4^5*x5*x6*x7*x8*x9 + -x2^2*x4^5*x5*x6*x8^2*x9^2 + x2^2*x4^5*x5*x6*x8^2*x9 + x2^2*x4^5*x5*x6*x8*x9^2 + -x2^2*x4^5*x5*x6*x8*x9 + x2^2*x4^5*x6^2*x7*x8^2*x9^2 + -x2^2*x4^5*x6^2*x7*x8^2*x9 + -x2^2*x4^5*x6^2*x7*x8*x9^2 + x2^2*x4^5*x6^2*x7*x8*x9 + -x2^2*x4^5*x6^2*x8^2*x9^2 + x2^2*x4^5*x6^2*x8^2*x9 + x2^2*x4^5*x6^2*x8*x9^2 + -x2^2*x4^5*x6^2*x8*x9 + -x2^2*x4^5*x6*x7*x8^2*x9^2 + x2^2*x4^5*x6*x7*x8^2*x9 + x2^2*x4^5*x6*x7*x8*x9^2 + -x2^2*x4^5*x6*x7*x8*x9 + x2^2*x4^5*x6*x8^2*x9^2 + -x2^2*x4^5*x6*x8^2*x9 + -x2^2*x4^5*x6*x8*x9^2 + x2^2*x4^5*x6*x8*x9 + -x2^2*x4^4*x5*x6^6*x7*x8^2*x9 + x2^2*x4^4*x5*x6^6*x7*x8^2 + x2^2*x4^4*x5*x6^6*x7*x9 + -x2^2*x4^4*x5*x6^6*x7 + x2^2*x4^4*x5*x6^6*x8^2*x9 + -x2^2*x4^4*x5*x6^6*x8^2 + -x2^2*x4^4*x5*x6^6*x9 + x2^2*x4^4*x5*x6^6 + x2^2*x4^4*x5*x6^5*x7*x8*x9 + -x2^2*x4^4*x5*x6^5*x7*x8 + -x2^2*x4^4*x5*x6^5*x7*x9 + x2^2*x4^4*x5*x6^5*x7 + -x2^2*x4^4*x5*x6^5*x8*x9 + x2^2*x4^4*x5*x6^5*x8 + x2^2*x4^4*x5*x6^5*x9 + -x2^2*x4^4*x5*x6^5 + x2^2*x4^4*x5*x6^4*x7*x8^2*x9 + -x2^2*x4^4*x5*x6^4*x7*x8^2 + -x2^2*x4^4*x5*x6^4*x7*x8*x9 + x2^2*x4^4*x5*x6^4*x7*x8 + -x2^2*x4^4*x5*x6^4*x8^2*x9 + x2^2*x4^4*x5*x6^4*x8^2 + x2^2*x4^4*x5*x6^4*x8*x9 + -x2^2*x4^4*x5*x6^4*x8 + -x2^2*x4^4*x5*x6^3*x7*x8^2*x9^2 + x2^2*x4^4*x5*x6^3*x7*x8^2*x9 + x2^2*x4^4*x5*x6^3*x7*x9^2 + -x2^2*x4^4*x5*x6^3*x7*x9 + x2^2*x4^4*x5*x6^3*x8^2*x9^2 + -x2^2*x4^4*x5*x6^3*x8^2*x9 + -x2^2*x4^4*x5*x6^3*x9^2 + x2^2*x4^4*x5*x6^3*x9 + x2^2*x4^4*x5*x6^2*x7*x8^2*x9^2 + -x2^2*x4^4*x5*x6^2*x7*x8^2*x9 + -x2^2*x4^4*x5*x6^2*x7*x9^2 + x2^2*x4^4*x5*x6^2*x7*x9 + -x2^2*x4^4*x5*x6^2*x8^2*x9^2 + x2^2*x4^4*x5*x6^2*x8^2*x9 + x2^2*x4^4*x5*x6^2*x9^2 + -x2^2*x4^4*x5*x6^2*x9 + x2^2*x4^4*x6^6*x7*x8^2*x9 + -x2^2*x4^4*x6^6*x7*x8^2 + -x2^2*x4^4*x6^6*x7*x9 + x2^2*x4^4*x6^6*x7 + -x2^2*x4^4*x6^6*x8^2*x9 + x2^2*x4^4*x6^6*x8^2 + x2^2*x4^4*x6^6*x9 + -x2^2*x4^4*x6^6 + -x2^2*x4^4*x6^5*x7*x8*x9 + x2^2*x4^4*x6^5*x7*x8 + x2^2*x4^4*x6^5*x7*x9 + -x2^2*x4^4*x6^5*x7 + x2^2*x4^4*x6^5*x8*x9 + -x2^2*x4^4*x6^5*x8 + -x2^2*x4^4*x6^5*x9 + x2^2*x4^4*x6^5 + -x2^2*x4^4*x6^4*x7*x8^2*x9 + x2^2*x4^4*x6^4*x7*x8^2 + x2^2*x4^4*x6^4*x7*x8*x9 + -x2^2*x4^4*x6^4*x7*x8 + x2^2*x4^4*x6^4*x8^2*x9 + -x2^2*x4^4*x6^4*x8^2 + -x2^2*x4^4*x6^4*x8*x9 + x2^2*x4^4*x6^4*x8 + x2^2*x4^4*x6^3*x7*x8^2*x9^2 + -x2^2*x4^4*x6^3*x7*x8^2*x9 + -x2^2*x4^4*x6^3*x7*x9^2 + x2^2*x4^4*x6^3*x7*x9 + -x2^2*x4^4*x6^3*x8^2*x9^2 + x2^2*x4^4*x6^3*x8^2*x9 + x2^2*x4^4*x6^3*x9^2 + -x2^2*x4^4*x6^3*x9 + -x2^2*x4^4*x6^2*x7*x8^2*x9^2 + x2^2*x4^4*x6^2*x7*x8^2*x9 + x2^2*x4^4*x6^2*x7*x9^2 + -x2^2*x4^4*x6^2*x7*x9 + x2^2*x4^4*x6^2*x8^2*x9^2 + -x2^2*x4^4*x6^2*x8^2*x9 + -x2^2*x4^4*x6^2*x9^2 + x2^2*x4^4*x6^2*x9 + -x2^2*x4^3*x5^2*x6^2*x7^3*x8*x9 + x2^2*x4^3*x5^2*x6^2*x7^3*x8 + x2^2*x4^3*x5^2*x6^2*x7^3*x9 + -x2^2*x4^3*x5^2*x6^2*x7^3 + x2^2*x4^3*x5^2*x6^2*x7^2*x8*x9 + -x2^2*x4^3*x5^2*x6^2*x7^2*x8 + -x2^2*x4^3*x5^2*x6^2*x7^2*x9 + x2^2*x4^3*x5^2*x6^2*x7^2 + x2^2*x4^3*x5^2*x6*x7^3*x8*x9 + -x2^2*x4^3*x5^2*x6*x7^3*x8 + -x2^2*x4^3*x5^2*x6*x7^3*x9 + x2^2*x4^3*x5^2*x6*x7^3 + -x2^2*x4^3*x5^2*x6*x7^2*x8*x9 + x2^2*x4^3*x5^2*x6*x7^2*x8 + x2^2*x4^3*x5^2*x6*x7^2*x9 + -x2^2*x4^3*x5^2*x6*x7^2 + x2^2*x4^3*x5*x6^6*x7*x8*x9 + -x2^2*x4^3*x5*x6^6*x7*x8 + -x2^2*x4^3*x5*x6^6*x7*x9 + x2^2*x4^3*x5*x6^6*x7 + -x2^2*x4^3*x5*x6^6*x8*x9 + x2^2*x4^3*x5*x6^6*x8 + x2^2*x4^3*x5*x6^6*x9 + -x2^2*x4^3*x5*x6^6 + -x2^2*x4^3*x5*x6^5*x7^2*x8^2*x9 + x2^2*x4^3*x5*x6^5*x7^2*x8^2 + x2^2*x4^3*x5*x6^5*x7^2*x9 + -x2^2*x4^3*x5*x6^5*x7^2 + 2*x2^2*x4^3*x5*x6^5*x7*x8^2*x9 + -2*x2^2*x4^3*x5*x6^5*x7*x8^2 + -2*x2^2*x4^3*x5*x6^5*x7*x8*x9 + 2*x2^2*x4^3*x5*x6^5*x7*x8 + -x2^2*x4^3*x5*x6^5*x8^2*x9 + x2^2*x4^3*x5*x6^5*x8^2 + 2*x2^2*x4^3*x5*x6^5*x8*x9 + -2*x2^2*x4^3*x5*x6^5*x8 + -x2^2*x4^3*x5*x6^5*x9 + x2^2*x4^3*x5*x6^5 + -x2^2*x4^3*x5*x6^4*x7^3*x8^2*x9 + x2^2*x4^3*x5*x6^4*x7^3*x8^2 + x2^2*x4^3*x5*x6^4*x7^3*x9 + -x2^2*x4^3*x5*x6^4*x7^3 + 2*x2^2*x4^3*x5*x6^4*x7^2*x8^2*x9 + -2*x2^2*x4^3*x5*x6^4*x7^2*x8^2 + -2*x2^2*x4^3*x5*x6^4*x7^2*x9 + 2*x2^2*x4^3*x5*x6^4*x7^2 + -2*x2^2*x4^3*x5*x6^4*x7*x8^2*x9 + 2*x2^2*x4^3*x5*x6^4*x7*x8^2 + x2^2*x4^3*x5*x6^4*x7*x8*x9 + -x2^2*x4^3*x5*x6^4*x7*x8 + x2^2*x4^3*x5*x6^4*x7*x9 + -x2^2*x4^3*x5*x6^4*x7 + x2^2*x4^3*x5*x6^4*x8^2*x9 + -x2^2*x4^3*x5*x6^4*x8^2 + -x2^2*x4^3*x5*x6^4*x8*x9 + x2^2*x4^3*x5*x6^4*x8 + x2^2*x4^3*x5*x6^3*x7^3*x8^2*x9 + -x2^2*x4^3*x5*x6^3*x7^3*x8^2 + -x2^2*x4^3*x5*x6^3*x7^3*x9 + x2^2*x4^3*x5*x6^3*x7^3 + -x2^2*x4^3*x5*x6^3*x7^2*x8^2*x9 + x2^2*x4^3*x5*x6^3*x7^2*x8^2 + x2^2*x4^3*x5*x6^3*x7^2*x9 + -x2^2*x4^3*x5*x6^3*x7^2 + -x2^2*x4^3*x5*x6^2*x7^4*x8*x9 + x2^2*x4^3*x5*x6^2*x7^4*x8 + x2^2*x4^3*x5*x6^2*x7^4*x9 + -x2^2*x4^3*x5*x6^2*x7^4 + 2*x2^2*x4^3*x5*x6^2*x7^3*x8*x9 + -2*x2^2*x4^3*x5*x6^2*x7^3*x8 + -2*x2^2*x4^3*x5*x6^2*x7^3*x9 + 2*x2^2*x4^3*x5*x6^2*x7^3 + -x2^2*x4^3*x5*x6^2*x7^2*x8*x9 + x2^2*x4^3*x5*x6^2*x7^2*x8 + x2^2*x4^3*x5*x6^2*x7^2*x9 + -x2^2*x4^3*x5*x6^2*x7^2 + -x2^2*x4^3*x5*x6*x7^3*x8*x9 + x2^2*x4^3*x5*x6*x7^3*x8 + x2^2*x4^3*x5*x6*x7^3*x9 + -x2^2*x4^3*x5*x6*x7^3 + x2^2*x4^3*x5*x6*x7^2*x8*x9 + -x2^2*x4^3*x5*x6*x7^2*x8 + -x2^2*x4^3*x5*x6*x7^2*x9 + x2^2*x4^3*x5*x6*x7^2 + x2^2*x4^3*x5*x7^4*x8*x9 + -x2^2*x4^3*x5*x7^4*x8 + -x2^2*x4^3*x5*x7^4*x9 + x2^2*x4^3*x5*x7^4 + -x2^2*x4^3*x5*x7^3*x8*x9 + x2^2*x4^3*x5*x7^3*x8 + x2^2*x4^3*x5*x7^3*x9 + -x2^2*x4^3*x5*x7^3 + -x2^2*x4^3*x6^6*x7*x8*x9 + x2^2*x4^3*x6^6*x7*x8 + x2^2*x4^3*x6^6*x7*x9 + -x2^2*x4^3*x6^6*x7 + x2^2*x4^3*x6^6*x8*x9 + -x2^2*x4^3*x6^6*x8 + -x2^2*x4^3*x6^6*x9 + x2^2*x4^3*x6^6 + x2^2*x4^3*x6^5*x7^2*x8^2*x9 + -x2^2*x4^3*x6^5*x7^2*x8^2 + -x2^2*x4^3*x6^5*x7^2*x9 + x2^2*x4^3*x6^5*x7^2 + -2*x2^2*x4^3*x6^5*x7*x8^2*x9 + 2*x2^2*x4^3*x6^5*x7*x8^2 + 2*x2^2*x4^3*x6^5*x7*x8*x9 + -2*x2^2*x4^3*x6^5*x7*x8 + x2^2*x4^3*x6^5*x8^2*x9 + -x2^2*x4^3*x6^5*x8^2 + -2*x2^2*x4^3*x6^5*x8*x9 + 2*x2^2*x4^3*x6^5*x8 + x2^2*x4^3*x6^5*x9 + -x2^2*x4^3*x6^5 + x2^2*x4^3*x6^4*x7^3*x8^2*x9 + -x2^2*x4^3*x6^4*x7^3*x8^2 + -x2^2*x4^3*x6^4*x7^3*x9 + x2^2*x4^3*x6^4*x7^3 + -2*x2^2*x4^3*x6^4*x7^2*x8^2*x9 + 2*x2^2*x4^3*x6^4*x7^2*x8^2 + 2*x2^2*x4^3*x6^4*x7^2*x9 + -2*x2^2*x4^3*x6^4*x7^2 + 2*x2^2*x4^3*x6^4*x7*x8^2*x9 + -2*x2^2*x4^3*x6^4*x7*x8^2 + -x2^2*x4^3*x6^4*x7*x8*x9 + x2^2*x4^3*x6^4*x7*x8 + -x2^2*x4^3*x6^4*x7*x9 + x2^2*x4^3*x6^4*x7 + -x2^2*x4^3*x6^4*x8^2*x9 + x2^2*x4^3*x6^4*x8^2 + x2^2*x4^3*x6^4*x8*x9 + -x2^2*x4^3*x6^4*x8 + -x2^2*x4^3*x6^3*x7^3*x8^2*x9 + x2^2*x4^3*x6^3*x7^3*x8^2 + x2^2*x4^3*x6^3*x7^3*x9 + -x2^2*x4^3*x6^3*x7^3 + x2^2*x4^3*x6^3*x7^2*x8^2*x9 + -x2^2*x4^3*x6^3*x7^2*x8^2 + -x2^2*x4^3*x6^3*x7^2*x9 + x2^2*x4^3*x6^3*x7^2 + x2^2*x4^3*x6^2*x7^4*x8*x9 + -x2^2*x4^3*x6^2*x7^4*x8 + -x2^2*x4^3*x6^2*x7^4*x9 + x2^2*x4^3*x6^2*x7^4 + -x2^2*x4^3*x6^2*x7^3*x8*x9 + x2^2*x4^3*x6^2*x7^3*x8 + x2^2*x4^3*x6^2*x7^3*x9 + -x2^2*x4^3*x6^2*x7^3 + -x2^2*x4^3*x7^4*x8*x9 + x2^2*x4^3*x7^4*x8 + x2^2*x4^3*x7^4*x9 + -x2^2*x4^3*x7^4 + x2^2*x4^3*x7^3*x8*x9 + -x2^2*x4^3*x7^3*x8 + -x2^2*x4^3*x7^3*x9 + x2^2*x4^3*x7^3 + x2^2*x4^2*x5*x6^6*x7*x8^2*x9 + -x2^2*x4^2*x5*x6^6*x7*x8^2 + -x2^2*x4^2*x5*x6^6*x7*x8*x9 + x2^2*x4^2*x5*x6^6*x7*x8 + -x2^2*x4^2*x5*x6^6*x8^2*x9 + x2^2*x4^2*x5*x6^6*x8^2 + x2^2*x4^2*x5*x6^6*x8*x9 + -x2^2*x4^2*x5*x6^6*x8 + x2^2*x4^2*x5*x6^5*x7^2*x8^2*x9 + -x2^2*x4^2*x5*x6^5*x7^2*x8^2 + -x2^2*x4^2*x5*x6^5*x7^2*x9 + x2^2*x4^2*x5*x6^5*x7^2 + -2*x2^2*x4^2*x5*x6^5*x7*x8^2*x9 + 2*x2^2*x4^2*x5*x6^5*x7*x8^2 + x2^2*x4^2*x5*x6^5*x7*x8*x9 + -x2^2*x4^2*x5*x6^5*x7*x8 + x2^2*x4^2*x5*x6^5*x7*x9 + -x2^2*x4^2*x5*x6^5*x7 + x2^2*x4^2*x5*x6^5*x8^2*x9 + -x2^2*x4^2*x5*x6^5*x8^2 + -x2^2*x4^2*x5*x6^5*x8*x9 + x2^2*x4^2*x5*x6^5*x8 + -x2^2*x4^2*x5*x6^4*x7^2*x8^2*x9 + x2^2*x4^2*x5*x6^4*x7^2*x8^2 + x2^2*x4^2*x5*x6^4*x7^2*x9 + -x2^2*x4^2*x5*x6^4*x7^2 + x2^2*x4^2*x5*x6^4*x7*x8^2*x9 + -x2^2*x4^2*x5*x6^4*x7*x8^2 + -x2^2*x4^2*x5*x6^4*x7*x9 + x2^2*x4^2*x5*x6^4*x7 + -x2^2*x4^2*x6^6*x7*x8^2*x9 + x2^2*x4^2*x6^6*x7*x8^2 + x2^2*x4^2*x6^6*x7*x8*x9 + -x2^2*x4^2*x6^6*x7*x8 + x2^2*x4^2*x6^6*x8^2*x9 + -x2^2*x4^2*x6^6*x8^2 + -x2^2*x4^2*x6^6*x8*x9 + x2^2*x4^2*x6^6*x8 + -x2^2*x4^2*x6^5*x7^2*x8^2*x9 + x2^2*x4^2*x6^5*x7^2*x8^2 + x2^2*x4^2*x6^5*x7^2*x9 + -x2^2*x4^2*x6^5*x7^2 + 2*x2^2*x4^2*x6^5*x7*x8^2*x9 + -2*x2^2*x4^2*x6^5*x7*x8^2 + -x2^2*x4^2*x6^5*x7*x8*x9 + x2^2*x4^2*x6^5*x7*x8 + -x2^2*x4^2*x6^5*x7*x9 + x2^2*x4^2*x6^5*x7 + -x2^2*x4^2*x6^5*x8^2*x9 + x2^2*x4^2*x6^5*x8^2 + x2^2*x4^2*x6^5*x8*x9 + -x2^2*x4^2*x6^5*x8 + x2^2*x4^2*x6^4*x7^2*x8^2*x9 + -x2^2*x4^2*x6^4*x7^2*x8^2 + -x2^2*x4^2*x6^4*x7^2*x9 + x2^2*x4^2*x6^4*x7^2 + -x2^2*x4^2*x6^4*x7*x8^2*x9 + x2^2*x4^2*x6^4*x7*x8^2 + x2^2*x4^2*x6^4*x7*x9 + -x2^2*x4^2*x6^4*x7 + -x2^2*x4*x5^8*x6*x7*x8*x9 + x2^2*x4*x5^8*x6*x7*x8 + x2^2*x4*x5^8*x6*x7*x9 + -x2^2*x4*x5^8*x6*x7 + x2^2*x4*x5^8*x6*x8*x9 + -x2^2*x4*x5^8*x6*x8 + -x2^2*x4*x5^8*x6*x9 + x2^2*x4*x5^8*x6 + x2^2*x4*x5^8*x7*x8*x9 + -x2^2*x4*x5^8*x7*x8 + -x2^2*x4*x5^8*x7*x9 + x2^2*x4*x5^8*x7 + -x2^2*x4*x5^8*x8*x9 + x2^2*x4*x5^8*x8 + x2^2*x4*x5^8*x9 + -x2^2*x4*x5^8 + -x2^2*x4*x5^6*x6^2*x7*x8*x9 + x2^2*x4*x5^6*x6^2*x7*x8 + x2^2*x4*x5^6*x6^2*x7*x9 + -x2^2*x4*x5^6*x6^2*x7 + x2^2*x4*x5^6*x6^2*x8*x9 + -x2^2*x4*x5^6*x6^2*x8 + -x2^2*x4*x5^6*x6^2*x9 + x2^2*x4*x5^6*x6^2 + x2^2*x4*x5^6*x6*x7*x8*x9 + -x2^2*x4*x5^6*x6*x7*x8 + -x2^2*x4*x5^6*x6*x7*x9 + x2^2*x4*x5^6*x6*x7 + -x2^2*x4*x5^6*x6*x8*x9 + x2^2*x4*x5^6*x6*x8 + x2^2*x4*x5^6*x6*x9 + -x2^2*x4*x5^6*x6 + -x2^2*x4*x5^5*x6*x7*x8*x9^3 + 2*x2^2*x4*x5^5*x6*x7*x8*x9 + -x2^2*x4*x5^5*x6*x7*x8 + x2^2*x4*x5^5*x6*x7*x9^3 + -2*x2^2*x4*x5^5*x6*x7*x9 + x2^2*x4*x5^5*x6*x7 + x2^2*x4*x5^5*x6*x8*x9^3 + -2*x2^2*x4*x5^5*x6*x8*x9 + x2^2*x4*x5^5*x6*x8 + -x2^2*x4*x5^5*x6*x9^3 + 2*x2^2*x4*x5^5*x6*x9 + -x2^2*x4*x5^5*x6 + x2^2*x4*x5^5*x7*x8*x9^3 + -2*x2^2*x4*x5^5*x7*x8*x9 + x2^2*x4*x5^5*x7*x8 + -x2^2*x4*x5^5*x7*x9^3 + 2*x2^2*x4*x5^5*x7*x9 + -x2^2*x4*x5^5*x7 + -x2^2*x4*x5^5*x8*x9^3 + 2*x2^2*x4*x5^5*x8*x9 + -x2^2*x4*x5^5*x8 + x2^2*x4*x5^5*x9^3 + -2*x2^2*x4*x5^5*x9 + x2^2*x4*x5^5 + -x2^2*x4*x5^4*x6^2*x7^2*x8*x9 + x2^2*x4*x5^4*x6^2*x7^2*x8 + x2^2*x4*x5^4*x6^2*x7^2*x9 + -x2^2*x4*x5^4*x6^2*x7^2 + x2^2*x4*x5^4*x6^2*x7*x8*x9 + -x2^2*x4*x5^4*x6^2*x7*x8 + -x2^2*x4*x5^4*x6^2*x7*x9 + x2^2*x4*x5^4*x6^2*x7 + x2^2*x4*x5^4*x6*x7^2*x8*x9 + -x2^2*x4*x5^4*x6*x7^2*x8 + -x2^2*x4*x5^4*x6*x7^2*x9 + x2^2*x4*x5^4*x6*x7^2 + x2^2*x4*x5^4*x6*x7*x8*x9^2 + -2*x2^2*x4*x5^4*x6*x7*x8*x9 + x2^2*x4*x5^4*x6*x7*x8 + -x2^2*x4*x5^4*x6*x7*x9^2 + 2*x2^2*x4*x5^4*x6*x7*x9 + -x2^2*x4*x5^4*x6*x7 + -x2^2*x4*x5^4*x6*x8*x9^2 + x2^2*x4*x5^4*x6*x8*x9 + x2^2*x4*x5^4*x6*x9^2 + -x2^2*x4*x5^4*x6*x9 + -x2^2*x4*x5^4*x7*x8*x9^2 + x2^2*x4*x5^4*x7*x8*x9 + x2^2*x4*x5^4*x7*x9^2 + -x2^2*x4*x5^4*x7*x9 + x2^2*x4*x5^4*x8*x9^2 + -x2^2*x4*x5^4*x8*x9 + -x2^2*x4*x5^4*x9^2 + x2^2*x4*x5^4*x9 + -x2^2*x4*x5^3*x6^2*x7^2*x8*x9^2 + 2*x2^2*x4*x5^3*x6^2*x7^2*x8*x9 + -x2^2*x4*x5^3*x6^2*x7^2*x8 + x2^2*x4*x5^3*x6^2*x7^2*x9^2 + -2*x2^2*x4*x5^3*x6^2*x7^2*x9 + x2^2*x4*x5^3*x6^2*x7^2 + x2^2*x4*x5^3*x6^2*x8*x9^2 + -2*x2^2*x4*x5^3*x6^2*x8*x9 + x2^2*x4*x5^3*x6^2*x8 + -x2^2*x4*x5^3*x6^2*x9^2 + 2*x2^2*x4*x5^3*x6^2*x9 + -x2^2*x4*x5^3*x6^2 + -x2^2*x4*x5^3*x6*x7^2*x8*x9 + x2^2*x4*x5^3*x6*x7^2*x8 + x2^2*x4*x5^3*x6*x7^2*x9 + -x2^2*x4*x5^3*x6*x7^2 + x2^2*x4*x5^3*x6*x7*x8*x9^2 + -x2^2*x4*x5^3*x6*x7*x8*x9 + -x2^2*x4*x5^3*x6*x7*x9^2 + x2^2*x4*x5^3*x6*x7*x9 + -x2^2*x4*x5^3*x6*x8*x9^2 + 2*x2^2*x4*x5^3*x6*x8*x9 + -x2^2*x4*x5^3*x6*x8 + x2^2*x4*x5^3*x6*x9^2 + -2*x2^2*x4*x5^3*x6*x9 + x2^2*x4*x5^3*x6 + x2^2*x4*x5^3*x7^2*x8*x9^2 + -x2^2*x4*x5^3*x7^2*x8*x9 + -x2^2*x4*x5^3*x7^2*x9^2 + x2^2*x4*x5^3*x7^2*x9 + -x2^2*x4*x5^3*x7*x8*x9^2 + x2^2*x4*x5^3*x7*x8*x9 + x2^2*x4*x5^3*x7*x9^2 + -x2^2*x4*x5^3*x7*x9 + -x2^2*x4*x5^2*x6^4*x7*x8*x9^2 + x2^2*x4*x5^2*x6^4*x7*x8*x9 + x2^2*x4*x5^2*x6^4*x7*x9^2 + -x2^2*x4*x5^2*x6^4*x7*x9 + x2^2*x4*x5^2*x6^4*x8*x9^2 + -x2^2*x4*x5^2*x6^4*x8*x9 + -x2^2*x4*x5^2*x6^4*x9^2 + x2^2*x4*x5^2*x6^4*x9 + -x2^2*x4*x5^2*x6^3*x7^3*x8*x9 + x2^2*x4*x5^2*x6^3*x7^3*x8 + x2^2*x4*x5^2*x6^3*x7^3*x9 + -x2^2*x4*x5^2*x6^3*x7^3 + x2^2*x4*x5^2*x6^3*x7^2*x8*x9 + -x2^2*x4*x5^2*x6^3*x7^2*x8 + -x2^2*x4*x5^2*x6^3*x7^2*x9 + x2^2*x4*x5^2*x6^3*x7^2 + x2^2*x4*x5^2*x6^2*x7^3*x8*x9 + -x2^2*x4*x5^2*x6^2*x7^3*x8 + -x2^2*x4*x5^2*x6^2*x7^3*x9 + x2^2*x4*x5^2*x6^2*x7^3 + -x2^2*x4*x5^2*x6^2*x7^2*x8*x9 + x2^2*x4*x5^2*x6^2*x7^2*x8 + x2^2*x4*x5^2*x6^2*x7^2*x9 + -x2^2*x4*x5^2*x6^2*x7^2 + x2^2*x4*x5^2*x6^2*x7*x8*x9^2 + -x2^2*x4*x5^2*x6^2*x7*x8*x9 + -x2^2*x4*x5^2*x6^2*x7*x9^2 + x2^2*x4*x5^2*x6^2*x7*x9 + -x2^2*x4*x5^2*x6^2*x8*x9^2 + x2^2*x4*x5^2*x6^2*x8*x9 + x2^2*x4*x5^2*x6^2*x9^2 + -x2^2*x4*x5^2*x6^2*x9 + x2^2*x4*x5^2*x6*x7^2*x8*x9^2 + -x2^2*x4*x5^2*x6*x7^2*x8*x9 + -x2^2*x4*x5^2*x6*x7^2*x9^2 + x2^2*x4*x5^2*x6*x7^2*x9 + -x2^2*x4*x5^2*x6*x7*x8*x9^2 + x2^2*x4*x5^2*x6*x7*x8*x9 + x2^2*x4*x5^2*x6*x7*x9^2 + -x2^2*x4*x5^2*x6*x7*x9 + -x2^2*x4*x5^2*x7^2*x8*x9^2 + x2^2*x4*x5^2*x7^2*x8*x9 + x2^2*x4*x5^2*x7^2*x9^2 + -x2^2*x4*x5^2*x7^2*x9 + x2^2*x4*x5^2*x7*x8*x9^2 + -x2^2*x4*x5^2*x7*x8*x9 + -x2^2*x4*x5^2*x7*x9^2 + x2^2*x4*x5^2*x7*x9 + x2^2*x4*x5*x6^4*x7^3*x8^2*x9 + -x2^2*x4*x5*x6^4*x7^3*x8^2 + -x2^2*x4*x5*x6^4*x7^3*x9 + x2^2*x4*x5*x6^4*x7^3 + -x2^2*x4*x5*x6^4*x7^2*x8^2*x9 + x2^2*x4*x5*x6^4*x7^2*x8^2 + x2^2*x4*x5*x6^4*x7^2*x9 + -x2^2*x4*x5*x6^4*x7^2 + -x2^2*x4*x5*x6^4*x7*x8^2*x9^2 + x2^2*x4*x5*x6^4*x7*x8^2*x9 + x2^2*x4*x5*x6^4*x7*x8*x9^2 + -x2^2*x4*x5*x6^4*x7*x8*x9 + x2^2*x4*x5*x6^4*x8^2*x9^2 + -x2^2*x4*x5*x6^4*x8^2*x9 + -x2^2*x4*x5*x6^4*x8*x9^2 + x2^2*x4*x5*x6^4*x8*x9 + -x2^2*x4*x5*x6^3*x7^3*x8^2*x9 + x2^2*x4*x5*x6^3*x7^3*x8^2 + x2^2*x4*x5*x6^3*x7^3*x8*x9 + -x2^2*x4*x5*x6^3*x7^3*x8 + x2^2*x4*x5*x6^3*x7^2*x8^2*x9 + -x2^2*x4*x5*x6^3*x7^2*x8^2 + -x2^2*x4*x5*x6^3*x7^2*x8*x9 + x2^2*x4*x5*x6^3*x7^2*x8 + x2^2*x4*x5*x6^3*x7*x8^2*x9^2 + -x2^2*x4*x5*x6^3*x7*x8^2*x9 + -x2^2*x4*x5*x6^3*x7*x9^2 + x2^2*x4*x5*x6^3*x7*x9 + -x2^2*x4*x5*x6^3*x8^2*x9^2 + x2^2*x4*x5*x6^3*x8^2*x9 + x2^2*x4*x5*x6^3*x9^2 + -x2^2*x4*x5*x6^3*x9 + -x2^2*x4*x5*x6^2*x7^4*x8*x9^2 + x2^2*x4*x5*x6^2*x7^4*x8*x9 + x2^2*x4*x5*x6^2*x7^4*x9^2 + -x2^2*x4*x5*x6^2*x7^4*x9 + -x2^2*x4*x5*x6^2*x7^3*x8*x9 + x2^2*x4*x5*x6^2*x7^3*x8 + x2^2*x4*x5*x6^2*x7^3*x9 + -x2^2*x4*x5*x6^2*x7^3 + -x2^2*x4*x5*x6^2*x7^2*x8^2*x9^2 + x2^2*x4*x5*x6^2*x7^2*x8^2*x9 + 2*x2^2*x4*x5*x6^2*x7^2*x8*x9^2 + -x2^2*x4*x5*x6^2*x7^2*x8*x9 + -x2^2*x4*x5*x6^2*x7^2*x8 + -x2^2*x4*x5*x6^2*x7^2*x9^2 + x2^2*x4*x5*x6^2*x7^2 + x2^2*x4*x5*x6^2*x7*x8^2*x9^2 + -x2^2*x4*x5*x6^2*x7*x8^2*x9 + -x2^2*x4*x5*x6^2*x7*x8*x9^2 + x2^2*x4*x5*x6^2*x7*x8*x9 + x2^2*x4*x5*x6*x7^3*x8*x9^2 + -x2^2*x4*x5*x6*x7^3*x8*x9 + -x2^2*x4*x5*x6*x7^3*x9^2 + x2^2*x4*x5*x6*x7^3*x9 + x2^2*x4*x5*x6*x7^2*x8^2*x9^2 + -x2^2*x4*x5*x6*x7^2*x8^2*x9 + -2*x2^2*x4*x5*x6*x7^2*x8*x9^2 + 2*x2^2*x4*x5*x6*x7^2*x8*x9 + x2^2*x4*x5*x6*x7^2*x9^2 + -x2^2*x4*x5*x6*x7^2*x9 + -x2^2*x4*x5*x6*x7*x8^2*x9^2 + x2^2*x4*x5*x6*x7*x8^2*x9 + x2^2*x4*x5*x6*x7*x8*x9^3 + -x2^2*x4*x5*x6*x7*x8*x9^2 + -x2^2*x4*x5*x6*x7*x9^3 + 2*x2^2*x4*x5*x6*x7*x9^2 + -x2^2*x4*x5*x6*x7*x9 + -x2^2*x4*x5*x6*x8*x9^3 + 2*x2^2*x4*x5*x6*x8*x9^2 + -x2^2*x4*x5*x6*x8*x9 + x2^2*x4*x5*x6*x9^3 + -2*x2^2*x4*x5*x6*x9^2 + x2^2*x4*x5*x6*x9 + x2^2*x4*x5*x7^4*x8*x9^2 + -x2^2*x4*x5*x7^4*x8*x9 + -x2^2*x4*x5*x7^4*x9^2 + x2^2*x4*x5*x7^4*x9 + -x2^2*x4*x5*x7^3*x8*x9^2 + x2^2*x4*x5*x7^3*x8*x9 + x2^2*x4*x5*x7^3*x9^2 + -x2^2*x4*x5*x7^3*x9 + -x2^2*x4*x5*x7*x8*x9^3 + x2^2*x4*x5*x7*x8*x9^2 + x2^2*x4*x5*x7*x9^3 + -x2^2*x4*x5*x7*x9^2 + x2^2*x4*x5*x8*x9^3 + -x2^2*x4*x5*x8*x9^2 + -x2^2*x4*x5*x9^3 + x2^2*x4*x5*x9^2 + -x2^2*x4*x6^4*x7^3*x8^2*x9 + x2^2*x4*x6^4*x7^3*x8^2 + x2^2*x4*x6^4*x7^3*x9 + -x2^2*x4*x6^4*x7^3 + x2^2*x4*x6^4*x7^2*x8^2*x9 + -x2^2*x4*x6^4*x7^2*x8^2 + -x2^2*x4*x6^4*x7^2*x9 + x2^2*x4*x6^4*x7^2 + x2^2*x4*x6^4*x7*x8^2*x9^2 + -x2^2*x4*x6^4*x7*x8^2*x9 + -x2^2*x4*x6^4*x7*x9^2 + x2^2*x4*x6^4*x7*x9 + -x2^2*x4*x6^4*x8^2*x9^2 + x2^2*x4*x6^4*x8^2*x9 + x2^2*x4*x6^4*x9^2 + -x2^2*x4*x6^4*x9 + x2^2*x4*x6^3*x7^3*x8^2*x9 + -x2^2*x4*x6^3*x7^3*x8^2 + -x2^2*x4*x6^3*x7^3*x9 + x2^2*x4*x6^3*x7^3 + -x2^2*x4*x6^3*x7^2*x8^2*x9 + x2^2*x4*x6^3*x7^2*x8^2 + x2^2*x4*x6^3*x7^2*x9 + -x2^2*x4*x6^3*x7^2 + -x2^2*x4*x6^3*x7*x8^2*x9^2 + x2^2*x4*x6^3*x7*x8^2*x9 + x2^2*x4*x6^3*x7*x9^2 + -x2^2*x4*x6^3*x7*x9 + x2^2*x4*x6^3*x8^2*x9^2 + -x2^2*x4*x6^3*x8^2*x9 + -x2^2*x4*x6^3*x9^2 + x2^2*x4*x6^3*x9 + x2^2*x4*x6^2*x7^4*x8*x9^2 + -x2^2*x4*x6^2*x7^4*x8*x9 + -x2^2*x4*x6^2*x7^4*x9^2 + x2^2*x4*x6^2*x7^4*x9 + x2^2*x4*x6^2*x7^2*x8^2*x9^2 + -x2^2*x4*x6^2*x7^2*x8^2*x9 + -x2^2*x4*x6^2*x7^2*x8*x9^2 + x2^2*x4*x6^2*x7^2*x8*x9 + -x2^2*x4*x6^2*x7*x8^2*x9^2 + x2^2*x4*x6^2*x7*x8^2*x9 + x2^2*x4*x6^2*x7*x9^2 + -x2^2*x4*x6^2*x7*x9 + -x2^2*x4*x6*x7^3*x8*x9^2 + x2^2*x4*x6*x7^3*x8*x9 + x2^2*x4*x6*x7^3*x9^2 + -x2^2*x4*x6*x7^3*x9 + -x2^2*x4*x6*x7^2*x8^2*x9^2 + x2^2*x4*x6*x7^2*x8^2*x9 + x2^2*x4*x6*x7^2*x8*x9^2 + -x2^2*x4*x6*x7^2*x8*x9 + x2^2*x4*x6*x7*x8^2*x9^2 + -x2^2*x4*x6*x7*x8^2*x9 + -x2^2*x4*x6*x7*x9^2 + x2^2*x4*x6*x7*x9 + -x2^2*x4*x7^4*x8*x9^2 + x2^2*x4*x7^4*x8*x9 + x2^2*x4*x7^4*x9^2 + -x2^2*x4*x7^4*x9 + x2^2*x4*x7^3*x8*x9^2 + -x2^2*x4*x7^3*x8*x9 + -x2^2*x4*x7^3*x9^2 + x2^2*x4*x7^3*x9 + x2^2*x5^8*x6*x7*x8*x9 + -x2^2*x5^8*x6*x7*x8 + -x2^2*x5^8*x6*x7*x9 + x2^2*x5^8*x6*x7 + -x2^2*x5^8*x6*x8*x9 + x2^2*x5^8*x6*x8 + x2^2*x5^8*x6*x9 + -x2^2*x5^8*x6 + -x2^2*x5^8*x7*x8*x9 + x2^2*x5^8*x7*x8 + x2^2*x5^8*x7*x9 + -x2^2*x5^8*x7 + x2^2*x5^8*x8*x9 + -x2^2*x5^8*x8 + -x2^2*x5^8*x9 + x2^2*x5^8 + x2^2*x5^6*x6^2*x7*x8*x9 + -x2^2*x5^6*x6^2*x7*x8 + -x2^2*x5^6*x6^2*x7*x9 + x2^2*x5^6*x6^2*x7 + -x2^2*x5^6*x6^2*x8*x9 + x2^2*x5^6*x6^2*x8 + x2^2*x5^6*x6^2*x9 + -x2^2*x5^6*x6^2 + -x2^2*x5^6*x6*x7*x8*x9 + x2^2*x5^6*x6*x7*x8 + x2^2*x5^6*x6*x7*x9 + -x2^2*x5^6*x6*x7 + x2^2*x5^6*x6*x8*x9 + -x2^2*x5^6*x6*x8 + -x2^2*x5^6*x6*x9 + x2^2*x5^6*x6 + x2^2*x5^5*x6*x7*x8*x9^3 + -2*x2^2*x5^5*x6*x7*x8*x9 + x2^2*x5^5*x6*x7*x8 + -x2^2*x5^5*x6*x7*x9^3 + 2*x2^2*x5^5*x6*x7*x9 + -x2^2*x5^5*x6*x7 + -x2^2*x5^5*x6*x8*x9^3 + 2*x2^2*x5^5*x6*x8*x9 + -x2^2*x5^5*x6*x8 + x2^2*x5^5*x6*x9^3 + -2*x2^2*x5^5*x6*x9 + x2^2*x5^5*x6 + -x2^2*x5^5*x7*x8*x9^3 + 2*x2^2*x5^5*x7*x8*x9 + -x2^2*x5^5*x7*x8 + x2^2*x5^5*x7*x9^3 + -2*x2^2*x5^5*x7*x9 + x2^2*x5^5*x7 + x2^2*x5^5*x8*x9^3 + -2*x2^2*x5^5*x8*x9 + x2^2*x5^5*x8 + -x2^2*x5^5*x9^3 + 2*x2^2*x5^5*x9 + -x2^2*x5^5 + x2^2*x5^4*x6^2*x7^2*x8*x9 + -x2^2*x5^4*x6^2*x7^2*x8 + -x2^2*x5^4*x6^2*x7^2*x9 + x2^2*x5^4*x6^2*x7^2 + -x2^2*x5^4*x6^2*x7*x8*x9 + x2^2*x5^4*x6^2*x7*x8 + x2^2*x5^4*x6^2*x7*x9 + -x2^2*x5^4*x6^2*x7 + -x2^2*x5^4*x6*x7^2*x8*x9 + x2^2*x5^4*x6*x7^2*x8 + x2^2*x5^4*x6*x7^2*x9 + -x2^2*x5^4*x6*x7^2 + -x2^2*x5^4*x6*x7*x8*x9^2 + 2*x2^2*x5^4*x6*x7*x8*x9 + -x2^2*x5^4*x6*x7*x8 + x2^2*x5^4*x6*x7*x9^2 + -2*x2^2*x5^4*x6*x7*x9 + x2^2*x5^4*x6*x7 + x2^2*x5^4*x6*x8*x9^2 + -x2^2*x5^4*x6*x8*x9 + -x2^2*x5^4*x6*x9^2 + x2^2*x5^4*x6*x9 + x2^2*x5^4*x7*x8*x9^2 + -x2^2*x5^4*x7*x8*x9 + -x2^2*x5^4*x7*x9^2 + x2^2*x5^4*x7*x9 + -x2^2*x5^4*x8*x9^2 + x2^2*x5^4*x8*x9 + x2^2*x5^4*x9^2 + -x2^2*x5^4*x9 + x2^2*x5^3*x6^2*x7^2*x8*x9^2 + -2*x2^2*x5^3*x6^2*x7^2*x8*x9 + x2^2*x5^3*x6^2*x7^2*x8 + -x2^2*x5^3*x6^2*x7^2*x9^2 + 2*x2^2*x5^3*x6^2*x7^2*x9 + -x2^2*x5^3*x6^2*x7^2 + -x2^2*x5^3*x6^2*x8*x9^2 + 2*x2^2*x5^3*x6^2*x8*x9 + -x2^2*x5^3*x6^2*x8 + x2^2*x5^3*x6^2*x9^2 + -2*x2^2*x5^3*x6^2*x9 + x2^2*x5^3*x6^2 + x2^2*x5^3*x6*x7^2*x8*x9 + -x2^2*x5^3*x6*x7^2*x8 + -x2^2*x5^3*x6*x7^2*x9 + x2^2*x5^3*x6*x7^2 + -x2^2*x5^3*x6*x7*x8*x9^2 + x2^2*x5^3*x6*x7*x8*x9 + x2^2*x5^3*x6*x7*x9^2 + -x2^2*x5^3*x6*x7*x9 + x2^2*x5^3*x6*x8*x9^2 + -2*x2^2*x5^3*x6*x8*x9 + x2^2*x5^3*x6*x8 + -x2^2*x5^3*x6*x9^2 + 2*x2^2*x5^3*x6*x9 + -x2^2*x5^3*x6 + -x2^2*x5^3*x7^2*x8*x9^2 + x2^2*x5^3*x7^2*x8*x9 + x2^2*x5^3*x7^2*x9^2 + -x2^2*x5^3*x7^2*x9 + x2^2*x5^3*x7*x8*x9^2 + -x2^2*x5^3*x7*x8*x9 + -x2^2*x5^3*x7*x9^2 + x2^2*x5^3*x7*x9 + x2^2*x5^2*x6^4*x7*x8*x9^2 + -x2^2*x5^2*x6^4*x7*x8*x9 + -x2^2*x5^2*x6^4*x7*x9^2 + x2^2*x5^2*x6^4*x7*x9 + -x2^2*x5^2*x6^4*x8*x9^2 + x2^2*x5^2*x6^4*x8*x9 + x2^2*x5^2*x6^4*x9^2 + -x2^2*x5^2*x6^4*x9 + x2^2*x5^2*x6^3*x7^3*x8*x9 + -x2^2*x5^2*x6^3*x7^3*x8 + -x2^2*x5^2*x6^3*x7^3*x9 + x2^2*x5^2*x6^3*x7^3 + -x2^2*x5^2*x6^3*x7^2*x8*x9 + x2^2*x5^2*x6^3*x7^2*x8 + x2^2*x5^2*x6^3*x7^2*x9 + -x2^2*x5^2*x6^3*x7^2 + -x2^2*x5^2*x6^2*x7*x8*x9^2 + x2^2*x5^2*x6^2*x7*x8*x9 + x2^2*x5^2*x6^2*x7*x9^2 + -x2^2*x5^2*x6^2*x7*x9 + x2^2*x5^2*x6^2*x8*x9^2 + -x2^2*x5^2*x6^2*x8*x9 + -x2^2*x5^2*x6^2*x9^2 + x2^2*x5^2*x6^2*x9 + -x2^2*x5^2*x6*x7^3*x8*x9 + x2^2*x5^2*x6*x7^3*x8 + x2^2*x5^2*x6*x7^3*x9 + -x2^2*x5^2*x6*x7^3 + -x2^2*x5^2*x6*x7^2*x8*x9^2 + 2*x2^2*x5^2*x6*x7^2*x8*x9 + -x2^2*x5^2*x6*x7^2*x8 + x2^2*x5^2*x6*x7^2*x9^2 + -2*x2^2*x5^2*x6*x7^2*x9 + x2^2*x5^2*x6*x7^2 + x2^2*x5^2*x6*x7*x8*x9^2 + -x2^2*x5^2*x6*x7*x8*x9 + -x2^2*x5^2*x6*x7*x9^2 + x2^2*x5^2*x6*x7*x9 + x2^2*x5^2*x7^2*x8*x9^2 + -x2^2*x5^2*x7^2*x8*x9 + -x2^2*x5^2*x7^2*x9^2 + x2^2*x5^2*x7^2*x9 + -x2^2*x5^2*x7*x8*x9^2 + x2^2*x5^2*x7*x8*x9 + x2^2*x5^2*x7*x9^2 + -x2^2*x5^2*x7*x9 + x2^2*x5*x6^4*x7*x8^2*x9^2 + -x2^2*x5*x6^4*x7*x8^2*x9 + -x2^2*x5*x6^4*x7*x8*x9^2 + x2^2*x5*x6^4*x7*x8*x9 + -x2^2*x5*x6^4*x8^2*x9^2 + x2^2*x5*x6^4*x8^2*x9 + x2^2*x5*x6^4*x8*x9^2 + -x2^2*x5*x6^4*x8*x9 + -x2^2*x5*x6^3*x7^3*x8*x9 + x2^2*x5*x6^3*x7^3*x8 + x2^2*x5*x6^3*x7^3*x9 + -x2^2*x5*x6^3*x7^3 + x2^2*x5*x6^3*x7^2*x8*x9 + -x2^2*x5*x6^3*x7^2*x8 + -x2^2*x5*x6^3*x7^2*x9 + x2^2*x5*x6^3*x7^2 + x2^2*x5*x6^2*x7^4*x8*x9^2 + -x2^2*x5*x6^2*x7^4*x8 + -x2^2*x5*x6^2*x7^4*x9^2 + x2^2*x5*x6^2*x7^4 + -x2^2*x5*x6^2*x7^3*x8*x9 + x2^2*x5*x6^2*x7^3*x8 + x2^2*x5*x6^2*x7^3*x9 + -x2^2*x5*x6^2*x7^3 + x2^2*x5*x6^2*x7^2*x8^2*x9^2 + -x2^2*x5*x6^2*x7^2*x8^2*x9 + -2*x2^2*x5*x6^2*x7^2*x8*x9^2 + 2*x2^2*x5*x6^2*x7^2*x8*x9 + x2^2*x5*x6^2*x7^2*x9^2 + -x2^2*x5*x6^2*x7^2*x9 + -x2^2*x5*x6^2*x7*x8^2*x9^2 + x2^2*x5*x6^2*x7*x8^2*x9 + x2^2*x5*x6^2*x7*x8*x9^2 + -x2^2*x5*x6^2*x7*x8*x9 + -x2^2*x5*x6*x7^3*x8*x9^2 + 2*x2^2*x5*x6*x7^3*x8*x9 + -x2^2*x5*x6*x7^3*x8 + x2^2*x5*x6*x7^3*x9^2 + -2*x2^2*x5*x6*x7^3*x9 + x2^2*x5*x6*x7^3 + -x2^2*x5*x6*x7^2*x8^2*x9^2 + x2^2*x5*x6*x7^2*x8^2*x9 + 2*x2^2*x5*x6*x7^2*x8*x9^2 + -3*x2^2*x5*x6*x7^2*x8*x9 + x2^2*x5*x6*x7^2*x8 + -x2^2*x5*x6*x7^2*x9^2 + 2*x2^2*x5*x6*x7^2*x9 + -x2^2*x5*x6*x7^2 + -x2^2*x5*x6*x7*x8*x9^3 + x2^2*x5*x6*x7*x8*x9^2 + x2^2*x5*x6*x7*x9^3 + -x2^2*x5*x6*x7*x9^2 + x2^2*x5*x6*x8^2*x9^2 + -x2^2*x5*x6*x8^2*x9 + x2^2*x5*x6*x8*x9^3 + -2*x2^2*x5*x6*x8*x9^2 + x2^2*x5*x6*x8*x9 + -x2^2*x5*x6*x9^3 + x2^2*x5*x6*x9^2 + -x2^2*x5*x7^4*x8*x9^2 + x2^2*x5*x7^4*x8 + x2^2*x5*x7^4*x9^2 + -x2^2*x5*x7^4 + x2^2*x5*x7^3*x8*x9^2 + -x2^2*x5*x7^3*x8 + -x2^2*x5*x7^3*x9^2 + x2^2*x5*x7^3 + x2^2*x5*x7*x8*x9^3 + -x2^2*x5*x7*x8*x9^2 + -x2^2*x5*x7*x9^3 + x2^2*x5*x7*x9^2 + -x2^2*x5*x8*x9^3 + x2^2*x5*x8*x9^2 + x2^2*x5*x9^3 + -x2^2*x5*x9^2 + -x2^2*x6^4*x7*x8^2*x9^2 + x2^2*x6^4*x7*x8^2*x9 + x2^2*x6^4*x7*x9^2 + -x2^2*x6^4*x7*x9 + x2^2*x6^4*x8^2*x9^2 + -x2^2*x6^4*x8^2*x9 + -x2^2*x6^4*x9^2 + x2^2*x6^4*x9 + -x2^2*x6^2*x7^4*x8*x9^2 + x2^2*x6^2*x7^4*x8 + x2^2*x6^2*x7^4*x9^2 + -x2^2*x6^2*x7^4 + x2^2*x6^2*x7^3*x8*x9 + -x2^2*x6^2*x7^3*x8 + -x2^2*x6^2*x7^3*x9 + x2^2*x6^2*x7^3 + -x2^2*x6^2*x7^2*x8^2*x9^2 + x2^2*x6^2*x7^2*x8^2*x9 + x2^2*x6^2*x7^2*x8*x9^2 + -x2^2*x6^2*x7^2*x8*x9 + x2^2*x6^2*x7*x8^2*x9^2 + -x2^2*x6^2*x7*x8^2*x9 + -x2^2*x6^2*x7*x9^2 + x2^2*x6^2*x7*x9 + x2^2*x6*x7^3*x8*x9^2 + -x2^2*x6*x7^3*x8*x9 + -x2^2*x6*x7^3*x9^2 + x2^2*x6*x7^3*x9 + x2^2*x6*x7^2*x8^2*x9^2 + -x2^2*x6*x7^2*x8^2*x9 + -x2^2*x6*x7^2*x8*x9^2 + x2^2*x6*x7^2*x8*x9 + -x2^2*x6*x8^2*x9^2 + x2^2*x6*x8^2*x9 + x2^2*x6*x9^2 + -x2^2*x6*x9 + x2^2*x7^4*x8*x9^2 + -x2^2*x7^4*x8 + -x2^2*x7^4*x9^2 + x2^2*x7^4 + -x2^2*x7^3*x8*x9^2 + x2^2*x7^3*x8 + x2^2*x7^3*x9^2 + -x2^2*x7^3 + x2*x3^9*x4^2*x5*x6*x7^2*x8*x9 + -x2*x3^9*x4^2*x5*x6*x7^2*x8 + -x2*x3^9*x4^2*x5*x6*x7^2*x9 + x2*x3^9*x4^2*x5*x6*x7^2 + x2*x3^9*x4^2*x5*x6*x7*x8^2*x9 + -x2*x3^9*x4^2*x5*x6*x7*x8^2 + -2*x2*x3^9*x4^2*x5*x6*x7*x8*x9 + 2*x2*x3^9*x4^2*x5*x6*x7*x8 + x2*x3^9*x4^2*x5*x6*x7*x9 + -x2*x3^9*x4^2*x5*x6*x7 + -x2*x3^9*x4^2*x5*x6*x8^2*x9 + x2*x3^9*x4^2*x5*x6*x8^2 + x2*x3^9*x4^2*x5*x6*x8*x9 + -x2*x3^9*x4^2*x5*x6*x8 + -x2*x3^9*x4^2*x5*x7^2*x8*x9 + x2*x3^9*x4^2*x5*x7^2*x8 + x2*x3^9*x4^2*x5*x7^2*x9 + -x2*x3^9*x4^2*x5*x7^2 + -x2*x3^9*x4^2*x5*x7*x8^2*x9 + x2*x3^9*x4^2*x5*x7*x8^2 + 2*x2*x3^9*x4^2*x5*x7*x8*x9 + -2*x2*x3^9*x4^2*x5*x7*x8 + -x2*x3^9*x4^2*x5*x7*x9 + x2*x3^9*x4^2*x5*x7 + x2*x3^9*x4^2*x5*x8^2*x9 + -x2*x3^9*x4^2*x5*x8^2 + -x2*x3^9*x4^2*x5*x8*x9 + x2*x3^9*x4^2*x5*x8 + -x2*x3^9*x4^2*x6*x7^2*x8*x9 + x2*x3^9*x4^2*x6*x7^2*x8 + x2*x3^9*x4^2*x6*x7^2*x9 + -x2*x3^9*x4^2*x6*x7^2 + -x2*x3^9*x4^2*x6*x7*x8^2*x9 + x2*x3^9*x4^2*x6*x7*x8^2 + 2*x2*x3^9*x4^2*x6*x7*x8*x9 + -2*x2*x3^9*x4^2*x6*x7*x8 + -x2*x3^9*x4^2*x6*x7*x9 + x2*x3^9*x4^2*x6*x7 + x2*x3^9*x4^2*x6*x8^2*x9 + -x2*x3^9*x4^2*x6*x8^2 + -x2*x3^9*x4^2*x6*x8*x9 + x2*x3^9*x4^2*x6*x8 + x2*x3^9*x4^2*x7^2*x8*x9 + -x2*x3^9*x4^2*x7^2*x8 + -x2*x3^9*x4^2*x7^2*x9 + x2*x3^9*x4^2*x7^2 + x2*x3^9*x4^2*x7*x8^2*x9 + -x2*x3^9*x4^2*x7*x8^2 + -2*x2*x3^9*x4^2*x7*x8*x9 + 2*x2*x3^9*x4^2*x7*x8 + x2*x3^9*x4^2*x7*x9 + -x2*x3^9*x4^2*x7 + -x2*x3^9*x4^2*x8^2*x9 + x2*x3^9*x4^2*x8^2 + x2*x3^9*x4^2*x8*x9 + -x2*x3^9*x4^2*x8 + x2*x3^9*x4*x5*x6^2*x7*x8^2*x9 + -x2*x3^9*x4*x5*x6^2*x7*x8^2 + -x2*x3^9*x4*x5*x6^2*x7*x8*x9 + x2*x3^9*x4*x5*x6^2*x7*x8 + -x2*x3^9*x4*x5*x6^2*x8^2*x9 + x2*x3^9*x4*x5*x6^2*x8^2 + x2*x3^9*x4*x5*x6^2*x8*x9 + -x2*x3^9*x4*x5*x6^2*x8 + x2*x3^9*x4*x5*x6*x7^2*x8^2*x9 + -x2*x3^9*x4*x5*x6*x7^2*x8^2 + -x2*x3^9*x4*x5*x6*x7^2*x8*x9 + x2*x3^9*x4*x5*x6*x7^2*x8 + -2*x2*x3^9*x4*x5*x6*x7*x8^2*x9 + 2*x2*x3^9*x4*x5*x6*x7*x8^2 + 2*x2*x3^9*x4*x5*x6*x7*x8*x9 + -2*x2*x3^9*x4*x5*x6*x7*x8 + x2*x3^9*x4*x5*x6*x8^2*x9 + -x2*x3^9*x4*x5*x6*x8^2 + -x2*x3^9*x4*x5*x6*x8*x9 + x2*x3^9*x4*x5*x6*x8 + -x2*x3^9*x4*x5*x7^2*x8^2*x9 + x2*x3^9*x4*x5*x7^2*x8^2 + x2*x3^9*x4*x5*x7^2*x8*x9 + -x2*x3^9*x4*x5*x7^2*x8 + x2*x3^9*x4*x5*x7*x8^2*x9 + -x2*x3^9*x4*x5*x7*x8^2 + -x2*x3^9*x4*x5*x7*x8*x9 + x2*x3^9*x4*x5*x7*x8 + -x2*x3^9*x4*x6^2*x7*x8^2*x9 + x2*x3^9*x4*x6^2*x7*x8^2 + x2*x3^9*x4*x6^2*x7*x8*x9 + -x2*x3^9*x4*x6^2*x7*x8 + x2*x3^9*x4*x6^2*x8^2*x9 + -x2*x3^9*x4*x6^2*x8^2 + -x2*x3^9*x4*x6^2*x8*x9 + x2*x3^9*x4*x6^2*x8 + -x2*x3^9*x4*x6*x7^2*x8^2*x9 + x2*x3^9*x4*x6*x7^2*x8^2 + x2*x3^9*x4*x6*x7^2*x8*x9 + -x2*x3^9*x4*x6*x7^2*x8 + 2*x2*x3^9*x4*x6*x7*x8^2*x9 + -2*x2*x3^9*x4*x6*x7*x8^2 + -2*x2*x3^9*x4*x6*x7*x8*x9 + 2*x2*x3^9*x4*x6*x7*x8 + -x2*x3^9*x4*x6*x8^2*x9 + x2*x3^9*x4*x6*x8^2 + x2*x3^9*x4*x6*x8*x9 + -x2*x3^9*x4*x6*x8 + x2*x3^9*x4*x7^2*x8^2*x9 + -x2*x3^9*x4*x7^2*x8^2 + -x2*x3^9*x4*x7^2*x8*x9 + x2*x3^9*x4*x7^2*x8 + -x2*x3^9*x4*x7*x8^2*x9 + x2*x3^9*x4*x7*x8^2 + x2*x3^9*x4*x7*x8*x9 + -x2*x3^9*x4*x7*x8 + -x2*x3^9*x5*x6^2*x7*x8^2*x9 + x2*x3^9*x5*x6^2*x7*x8^2 + x2*x3^9*x5*x6^2*x7*x8*x9 + -x2*x3^9*x5*x6^2*x7*x8 + x2*x3^9*x5*x6^2*x8^2*x9 + -x2*x3^9*x5*x6^2*x8^2 + -x2*x3^9*x5*x6^2*x8*x9 + x2*x3^9*x5*x6^2*x8 + -x2*x3^9*x5*x6*x7^2*x8^2*x9 + x2*x3^9*x5*x6*x7^2*x8^2 + x2*x3^9*x5*x6*x7^2*x9 + -x2*x3^9*x5*x6*x7^2 + x2*x3^9*x5*x6*x7*x8^2*x9 + -x2*x3^9*x5*x6*x7*x8^2 + -x2*x3^9*x5*x6*x7*x9 + x2*x3^9*x5*x6*x7 + x2*x3^9*x5*x7^2*x8^2*x9 + -x2*x3^9*x5*x7^2*x8^2 + -x2*x3^9*x5*x7^2*x9 + x2*x3^9*x5*x7^2 + -x2*x3^9*x5*x7*x8*x9 + x2*x3^9*x5*x7*x8 + x2*x3^9*x5*x7*x9 + -x2*x3^9*x5*x7 + -x2*x3^9*x5*x8^2*x9 + x2*x3^9*x5*x8^2 + x2*x3^9*x5*x8*x9 + -x2*x3^9*x5*x8 + x2*x3^9*x6^2*x7*x8^2*x9 + -x2*x3^9*x6^2*x7*x8^2 + -x2*x3^9*x6^2*x7*x8*x9 + x2*x3^9*x6^2*x7*x8 + -x2*x3^9*x6^2*x8^2*x9 + x2*x3^9*x6^2*x8^2 + x2*x3^9*x6^2*x8*x9 + -x2*x3^9*x6^2*x8 + x2*x3^9*x6*x7^2*x8^2*x9 + -x2*x3^9*x6*x7^2*x8^2 + -x2*x3^9*x6*x7^2*x9 + x2*x3^9*x6*x7^2 + -x2*x3^9*x6*x7*x8^2*x9 + x2*x3^9*x6*x7*x8^2 + x2*x3^9*x6*x7*x9 + -x2*x3^9*x6*x7 + -x2*x3^9*x7^2*x8^2*x9 + x2*x3^9*x7^2*x8^2 + x2*x3^9*x7^2*x9 + -x2*x3^9*x7^2 + x2*x3^9*x7*x8*x9 + -x2*x3^9*x7*x8 + -x2*x3^9*x7*x9 + x2*x3^9*x7 + x2*x3^9*x8^2*x9 + -x2*x3^9*x8^2 + -x2*x3^9*x8*x9 + x2*x3^9*x8 + x2*x3^8*x4^2*x5^2*x6*x7*x8^2*x9 + -x2*x3^8*x4^2*x5^2*x6*x7*x8^2 + -x2*x3^8*x4^2*x5^2*x6*x7*x8*x9 + x2*x3^8*x4^2*x5^2*x6*x7*x8 + -x2*x3^8*x4^2*x5^2*x6*x8^2*x9 + x2*x3^8*x4^2*x5^2*x6*x8^2 + x2*x3^8*x4^2*x5^2*x6*x8*x9 + -x2*x3^8*x4^2*x5^2*x6*x8 + -x2*x3^8*x4^2*x5^2*x7*x8^2*x9 + x2*x3^8*x4^2*x5^2*x7*x8^2 + x2*x3^8*x4^2*x5^2*x7*x8*x9 + -x2*x3^8*x4^2*x5^2*x7*x8 + x2*x3^8*x4^2*x5^2*x8^2*x9 + -x2*x3^8*x4^2*x5^2*x8^2 + -x2*x3^8*x4^2*x5^2*x8*x9 + x2*x3^8*x4^2*x5^2*x8 + x2*x3^8*x4^2*x5*x6*x7*x8^2*x9^2 + -2*x2*x3^8*x4^2*x5*x6*x7*x8^2*x9 + x2*x3^8*x4^2*x5*x6*x7*x8^2 + -x2*x3^8*x4^2*x5*x6*x7*x8*x9^2 + 2*x2*x3^8*x4^2*x5*x6*x7*x8*x9 + -x2*x3^8*x4^2*x5*x6*x7*x8 + -x2*x3^8*x4^2*x5*x6*x8^2*x9^2 + 2*x2*x3^8*x4^2*x5*x6*x8^2*x9 + -x2*x3^8*x4^2*x5*x6*x8^2 + x2*x3^8*x4^2*x5*x6*x8*x9^2 + -2*x2*x3^8*x4^2*x5*x6*x8*x9 + x2*x3^8*x4^2*x5*x6*x8 + -x2*x3^8*x4^2*x5*x7*x8^2*x9^2 + 2*x2*x3^8*x4^2*x5*x7*x8^2*x9 + -x2*x3^8*x4^2*x5*x7*x8^2 + x2*x3^8*x4^2*x5*x7*x8*x9^2 + -2*x2*x3^8*x4^2*x5*x7*x8*x9 + x2*x3^8*x4^2*x5*x7*x8 + x2*x3^8*x4^2*x5*x8^2*x9^2 + -2*x2*x3^8*x4^2*x5*x8^2*x9 + x2*x3^8*x4^2*x5*x8^2 + -x2*x3^8*x4^2*x5*x8*x9^2 + 2*x2*x3^8*x4^2*x5*x8*x9 + -x2*x3^8*x4^2*x5*x8 + -x2*x3^8*x4^2*x6*x7*x8^2*x9^2 + x2*x3^8*x4^2*x6*x7*x8^2*x9 + x2*x3^8*x4^2*x6*x7*x8*x9^2 + -x2*x3^8*x4^2*x6*x7*x8*x9 + x2*x3^8*x4^2*x6*x8^2*x9^2 + -x2*x3^8*x4^2*x6*x8^2*x9 + -x2*x3^8*x4^2*x6*x8*x9^2 + x2*x3^8*x4^2*x6*x8*x9 + x2*x3^8*x4^2*x7*x8^2*x9^2 + -x2*x3^8*x4^2*x7*x8^2*x9 + -x2*x3^8*x4^2*x7*x8*x9^2 + x2*x3^8*x4^2*x7*x8*x9 + -x2*x3^8*x4^2*x8^2*x9^2 + x2*x3^8*x4^2*x8^2*x9 + x2*x3^8*x4^2*x8*x9^2 + -x2*x3^8*x4^2*x8*x9 + x2*x3^8*x4*x5^2*x6^2*x7*x8^2*x9 + -x2*x3^8*x4*x5^2*x6^2*x7*x8^2 + -x2*x3^8*x4*x5^2*x6^2*x7*x8*x9 + x2*x3^8*x4*x5^2*x6^2*x7*x8 + -x2*x3^8*x4*x5^2*x6^2*x8^2*x9 + x2*x3^8*x4*x5^2*x6^2*x8^2 + x2*x3^8*x4*x5^2*x6^2*x8*x9 + -x2*x3^8*x4*x5^2*x6^2*x8 + -x2*x3^8*x4*x5^2*x6*x7*x8^2*x9 + x2*x3^8*x4*x5^2*x6*x7*x8^2 + x2*x3^8*x4*x5^2*x6*x7*x8*x9 + -x2*x3^8*x4*x5^2*x6*x7*x8 + x2*x3^8*x4*x5^2*x6*x8^2*x9 + -x2*x3^8*x4*x5^2*x6*x8^2 + -x2*x3^8*x4*x5^2*x6*x8*x9 + x2*x3^8*x4*x5^2*x6*x8 + x2*x3^8*x4*x5*x6^2*x7^2*x8^2*x9 + -x2*x3^8*x4*x5*x6^2*x7^2*x8^2 + -x2*x3^8*x4*x5*x6^2*x7^2*x9 + x2*x3^8*x4*x5*x6^2*x7^2 + -2*x2*x3^8*x4*x5*x6^2*x7*x8^2*x9 + 2*x2*x3^8*x4*x5*x6^2*x7*x8^2 + x2*x3^8*x4*x5*x6^2*x7*x8*x9 + -x2*x3^8*x4*x5*x6^2*x7*x8 + x2*x3^8*x4*x5*x6^2*x7*x9 + -x2*x3^8*x4*x5*x6^2*x7 + x2*x3^8*x4*x5*x6^2*x8^2*x9 + -x2*x3^8*x4*x5*x6^2*x8^2 + -x2*x3^8*x4*x5*x6^2*x8*x9 + x2*x3^8*x4*x5*x6^2*x8 + x2*x3^8*x4*x5*x6*x7^4*x8*x9 + -x2*x3^8*x4*x5*x6*x7^4*x8 + -x2*x3^8*x4*x5*x6*x7^4*x9 + x2*x3^8*x4*x5*x6*x7^4 + -x2*x3^8*x4*x5*x6*x7^2*x8^2*x9 + x2*x3^8*x4*x5*x6*x7^2*x8^2 + x2*x3^8*x4*x5*x6*x7^2*x8*x9^2 + -2*x2*x3^8*x4*x5*x6*x7^2*x8*x9 + x2*x3^8*x4*x5*x6*x7^2*x8 + -x2*x3^8*x4*x5*x6*x7^2*x9^2 + 3*x2*x3^8*x4*x5*x6*x7^2*x9 + -2*x2*x3^8*x4*x5*x6*x7^2 + 2*x2*x3^8*x4*x5*x6*x7*x8^2*x9 + -2*x2*x3^8*x4*x5*x6*x7*x8^2 + -x2*x3^8*x4*x5*x6*x7*x8*x9^2 + x2*x3^8*x4*x5*x6*x7*x8 + x2*x3^8*x4*x5*x6*x7*x9^2 + -2*x2*x3^8*x4*x5*x6*x7*x9 + x2*x3^8*x4*x5*x6*x7 + -x2*x3^8*x4*x5*x6*x8^2*x9 + x2*x3^8*x4*x5*x6*x8^2 + x2*x3^8*x4*x5*x6*x8*x9 + -x2*x3^8*x4*x5*x6*x8 + -x2*x3^8*x4*x5*x7^4*x8*x9 + x2*x3^8*x4*x5*x7^4*x8 + x2*x3^8*x4*x5*x7^4*x9 + -x2*x3^8*x4*x5*x7^4 + -x2*x3^8*x4*x5*x7^2*x8*x9^2 + 2*x2*x3^8*x4*x5*x7^2*x8*x9 + -x2*x3^8*x4*x5*x7^2*x8 + x2*x3^8*x4*x5*x7^2*x9^2 + -2*x2*x3^8*x4*x5*x7^2*x9 + x2*x3^8*x4*x5*x7^2 + x2*x3^8*x4*x5*x7*x8*x9^2 + -x2*x3^8*x4*x5*x7*x8*x9 + -x2*x3^8*x4*x5*x7*x9^2 + x2*x3^8*x4*x5*x7*x9 + -x2*x3^8*x4*x6^2*x7^2*x8^2*x9 + x2*x3^8*x4*x6^2*x7^2*x8^2 + x2*x3^8*x4*x6^2*x7^2*x9 + -x2*x3^8*x4*x6^2*x7^2 + x2*x3^8*x4*x6^2*x7*x8^2*x9 + -x2*x3^8*x4*x6^2*x7*x8^2 + -x2*x3^8*x4*x6^2*x7*x9 + x2*x3^8*x4*x6^2*x7 + -x2*x3^8*x4*x6*x7^4*x8*x9 + x2*x3^8*x4*x6*x7^4*x8 + x2*x3^8*x4*x6*x7^4*x9 + -x2*x3^8*x4*x6*x7^4 + x2*x3^8*x4*x6*x7^2*x8^2*x9 + -x2*x3^8*x4*x6*x7^2*x8^2 + -x2*x3^8*x4*x6*x7^2*x8*x9^2 + 2*x2*x3^8*x4*x6*x7^2*x8*x9 + -x2*x3^8*x4*x6*x7^2*x8 + x2*x3^8*x4*x6*x7^2*x9^2 + -3*x2*x3^8*x4*x6*x7^2*x9 + 2*x2*x3^8*x4*x6*x7^2 + -x2*x3^8*x4*x6*x7*x8^2*x9 + x2*x3^8*x4*x6*x7*x8^2 + x2*x3^8*x4*x6*x7*x8*x9^2 + -x2*x3^8*x4*x6*x7*x8*x9 + -x2*x3^8*x4*x6*x7*x9^2 + 2*x2*x3^8*x4*x6*x7*x9 + -x2*x3^8*x4*x6*x7 + x2*x3^8*x4*x7^4*x8*x9 + -x2*x3^8*x4*x7^4*x8 + -x2*x3^8*x4*x7^4*x9 + x2*x3^8*x4*x7^4 + x2*x3^8*x4*x7^2*x8*x9^2 + -2*x2*x3^8*x4*x7^2*x8*x9 + x2*x3^8*x4*x7^2*x8 + -x2*x3^8*x4*x7^2*x9^2 + 2*x2*x3^8*x4*x7^2*x9 + -x2*x3^8*x4*x7^2 + -x2*x3^8*x4*x7*x8*x9^2 + x2*x3^8*x4*x7*x8*x9 + x2*x3^8*x4*x7*x9^2 + -x2*x3^8*x4*x7*x9 + -x2*x3^8*x5^2*x6^2*x7*x8^2*x9 + x2*x3^8*x5^2*x6^2*x7*x8^2 + x2*x3^8*x5^2*x6^2*x7*x8*x9 + -x2*x3^8*x5^2*x6^2*x7*x8 + x2*x3^8*x5^2*x6^2*x8^2*x9 + -x2*x3^8*x5^2*x6^2*x8^2 + -x2*x3^8*x5^2*x6^2*x8*x9 + x2*x3^8*x5^2*x6^2*x8 + x2*x3^8*x5^2*x7*x8^2*x9 + -x2*x3^8*x5^2*x7*x8^2 + -x2*x3^8*x5^2*x7*x8*x9 + x2*x3^8*x5^2*x7*x8 + -x2*x3^8*x5^2*x8^2*x9 + x2*x3^8*x5^2*x8^2 + x2*x3^8*x5^2*x8*x9 + -x2*x3^8*x5^2*x8 + -x2*x3^8*x5*x6^2*x7^2*x8^2*x9 + x2*x3^8*x5*x6^2*x7^2*x8^2 + x2*x3^8*x5*x6^2*x7^2*x9 + -x2*x3^8*x5*x6^2*x7^2 + 2*x2*x3^8*x5*x6^2*x7*x8^2*x9 + -2*x2*x3^8*x5*x6^2*x7*x8^2 + -x2*x3^8*x5*x6^2*x7*x8*x9 + x2*x3^8*x5*x6^2*x7*x8 + -x2*x3^8*x5*x6^2*x7*x9 + x2*x3^8*x5*x6^2*x7 + -x2*x3^8*x5*x6^2*x8^2*x9 + x2*x3^8*x5*x6^2*x8^2 + x2*x3^8*x5*x6^2*x8*x9 + -x2*x3^8*x5*x6^2*x8 + -x2*x3^8*x5*x6*x7^4*x8*x9 + x2*x3^8*x5*x6*x7^4*x8 + x2*x3^8*x5*x6*x7^4*x9 + -x2*x3^8*x5*x6*x7^4 + x2*x3^8*x5*x6*x7^2*x8^2*x9 + -x2*x3^8*x5*x6*x7^2*x8^2 + -x2*x3^8*x5*x6*x7^2*x8*x9^2 + 2*x2*x3^8*x5*x6*x7^2*x8*x9 + -x2*x3^8*x5*x6*x7^2*x8 + x2*x3^8*x5*x6*x7^2*x9^2 + -3*x2*x3^8*x5*x6*x7^2*x9 + 2*x2*x3^8*x5*x6*x7^2 + -x2*x3^8*x5*x6*x7*x8^2*x9^2 + x2*x3^8*x5*x6*x7*x8^2 + 2*x2*x3^8*x5*x6*x7*x8*x9^2 + -2*x2*x3^8*x5*x6*x7*x8*x9 + -x2*x3^8*x5*x6*x7*x9^2 + 2*x2*x3^8*x5*x6*x7*x9 + -x2*x3^8*x5*x6*x7 + x2*x3^8*x5*x6*x8^2*x9^2 + -x2*x3^8*x5*x6*x8^2*x9 + -x2*x3^8*x5*x6*x8*x9^2 + x2*x3^8*x5*x6*x8*x9 + x2*x3^8*x5*x7^4*x8*x9 + -x2*x3^8*x5*x7^4*x8 + -x2*x3^8*x5*x7^4*x9 + x2*x3^8*x5*x7^4 + x2*x3^8*x5*x7^2*x8*x9^2 + -2*x2*x3^8*x5*x7^2*x8*x9 + x2*x3^8*x5*x7^2*x8 + -x2*x3^8*x5*x7^2*x9^2 + 2*x2*x3^8*x5*x7^2*x9 + -x2*x3^8*x5*x7^2 + x2*x3^8*x5*x7*x8^2*x9^2 + -2*x2*x3^8*x5*x7*x8^2*x9 + x2*x3^8*x5*x7*x8^2 + -2*x2*x3^8*x5*x7*x8*x9^2 + 3*x2*x3^8*x5*x7*x8*x9 + -x2*x3^8*x5*x7*x8 + x2*x3^8*x5*x7*x9^2 + -x2*x3^8*x5*x7*x9 + -x2*x3^8*x5*x8^2*x9^2 + 2*x2*x3^8*x5*x8^2*x9 + -x2*x3^8*x5*x8^2 + x2*x3^8*x5*x8*x9^2 + -2*x2*x3^8*x5*x8*x9 + x2*x3^8*x5*x8 + x2*x3^8*x6^2*x7^2*x8^2*x9 + -x2*x3^8*x6^2*x7^2*x8^2 + -x2*x3^8*x6^2*x7^2*x9 + x2*x3^8*x6^2*x7^2 + -x2*x3^8*x6^2*x7*x8^2*x9 + x2*x3^8*x6^2*x7*x8^2 + x2*x3^8*x6^2*x7*x9 + -x2*x3^8*x6^2*x7 + x2*x3^8*x6*x7^4*x8*x9 + -x2*x3^8*x6*x7^4*x8 + -x2*x3^8*x6*x7^4*x9 + x2*x3^8*x6*x7^4 + -x2*x3^8*x6*x7^2*x8^2*x9 + x2*x3^8*x6*x7^2*x8^2 + x2*x3^8*x6*x7^2*x8*x9^2 + -2*x2*x3^8*x6*x7^2*x8*x9 + x2*x3^8*x6*x7^2*x8 + -x2*x3^8*x6*x7^2*x9^2 + 3*x2*x3^8*x6*x7^2*x9 + -2*x2*x3^8*x6*x7^2 + x2*x3^8*x6*x7*x8^2*x9^2 + -x2*x3^8*x6*x7*x8^2 + -2*x2*x3^8*x6*x7*x8*x9^2 + 2*x2*x3^8*x6*x7*x8*x9 + x2*x3^8*x6*x7*x9^2 + -2*x2*x3^8*x6*x7*x9 + x2*x3^8*x6*x7 + -x2*x3^8*x6*x8^2*x9^2 + x2*x3^8*x6*x8^2*x9 + x2*x3^8*x6*x8*x9^2 + -x2*x3^8*x6*x8*x9 + -x2*x3^8*x7^4*x8*x9 + x2*x3^8*x7^4*x8 + x2*x3^8*x7^4*x9 + -x2*x3^8*x7^4 + -x2*x3^8*x7^2*x8*x9^2 + 2*x2*x3^8*x7^2*x8*x9 + -x2*x3^8*x7^2*x8 + x2*x3^8*x7^2*x9^2 + -2*x2*x3^8*x7^2*x9 + x2*x3^8*x7^2 + -x2*x3^8*x7*x8^2*x9^2 + x2*x3^8*x7*x8^2*x9 + 2*x2*x3^8*x7*x8*x9^2 + -2*x2*x3^8*x7*x8*x9 + -x2*x3^8*x7*x9^2 + x2*x3^8*x7*x9 + x2*x3^8*x8^2*x9^2 + -x2*x3^8*x8^2*x9 + -x2*x3^8*x8*x9^2 + x2*x3^8*x8*x9 + x2*x3^7*x4^3*x5^3*x6*x7*x8*x9 + -x2*x3^7*x4^3*x5^3*x6*x7*x8 + -x2*x3^7*x4^3*x5^3*x6*x7*x9 + x2*x3^7*x4^3*x5^3*x6*x7 + -x2*x3^7*x4^3*x5^3*x6*x8*x9 + x2*x3^7*x4^3*x5^3*x6*x8 + x2*x3^7*x4^3*x5^3*x6*x9 + -x2*x3^7*x4^3*x5^3*x6 + -x2*x3^7*x4^3*x5^3*x7*x8*x9 + x2*x3^7*x4^3*x5^3*x7*x8 + x2*x3^7*x4^3*x5^3*x7*x9 + -x2*x3^7*x4^3*x5^3*x7 + x2*x3^7*x4^3*x5^3*x8*x9 + -x2*x3^7*x4^3*x5^3*x8 + -x2*x3^7*x4^3*x5^3*x9 + x2*x3^7*x4^3*x5^3 + -x2*x3^7*x4^3*x5^2*x6*x7*x8*x9 + x2*x3^7*x4^3*x5^2*x6*x7*x8 + x2*x3^7*x4^3*x5^2*x6*x7*x9 + -x2*x3^7*x4^3*x5^2*x6*x7 + x2*x3^7*x4^3*x5^2*x6*x8*x9 + -x2*x3^7*x4^3*x5^2*x6*x8 + -x2*x3^7*x4^3*x5^2*x6*x9 + x2*x3^7*x4^3*x5^2*x6 + x2*x3^7*x4^3*x5^2*x7*x8*x9 + -x2*x3^7*x4^3*x5^2*x7*x8 + -x2*x3^7*x4^3*x5^2*x7*x9 + x2*x3^7*x4^3*x5^2*x7 + -x2*x3^7*x4^3*x5^2*x8*x9 + x2*x3^7*x4^3*x5^2*x8 + x2*x3^7*x4^3*x5^2*x9 + -x2*x3^7*x4^3*x5^2 + x2*x3^7*x4^2*x5^3*x6*x7*x8^2*x9 + -x2*x3^7*x4^2*x5^3*x6*x7*x8^2 + -2*x2*x3^7*x4^2*x5^3*x6*x7*x8*x9 + 2*x2*x3^7*x4^2*x5^3*x6*x7*x8 + x2*x3^7*x4^2*x5^3*x6*x7*x9 + -x2*x3^7*x4^2*x5^3*x6*x7 + -x2*x3^7*x4^2*x5^3*x6*x8^2*x9 + x2*x3^7*x4^2*x5^3*x6*x8^2 + 2*x2*x3^7*x4^2*x5^3*x6*x8*x9 + -2*x2*x3^7*x4^2*x5^3*x6*x8 + -x2*x3^7*x4^2*x5^3*x6*x9 + x2*x3^7*x4^2*x5^3*x6 + -x2*x3^7*x4^2*x5^3*x7*x8^2*x9 + x2*x3^7*x4^2*x5^3*x7*x8^2 + 2*x2*x3^7*x4^2*x5^3*x7*x8*x9 + -2*x2*x3^7*x4^2*x5^3*x7*x8 + -x2*x3^7*x4^2*x5^3*x7*x9 + x2*x3^7*x4^2*x5^3*x7 + x2*x3^7*x4^2*x5^3*x8^2*x9 + -x2*x3^7*x4^2*x5^3*x8^2 + -2*x2*x3^7*x4^2*x5^3*x8*x9 + 2*x2*x3^7*x4^2*x5^3*x8 + x2*x3^7*x4^2*x5^3*x9 + -x2*x3^7*x4^2*x5^3 + x2*x3^7*x4^2*x5^2*x6*x7^2*x8*x9 + -x2*x3^7*x4^2*x5^2*x6*x7^2*x8 + -x2*x3^7*x4^2*x5^2*x6*x7^2*x9 + x2*x3^7*x4^2*x5^2*x6*x7^2 + -x2*x3^7*x4^2*x5^2*x6*x7*x8^2*x9 + x2*x3^7*x4^2*x5^2*x6*x7*x8^2 + x2*x3^7*x4^2*x5^2*x6*x7*x8*x9 + -x2*x3^7*x4^2*x5^2*x6*x7*x8 + x2*x3^7*x4^2*x5^2*x6*x8^2*x9 + -x2*x3^7*x4^2*x5^2*x6*x8^2 + -2*x2*x3^7*x4^2*x5^2*x6*x8*x9 + 2*x2*x3^7*x4^2*x5^2*x6*x8 + x2*x3^7*x4^2*x5^2*x6*x9 + -x2*x3^7*x4^2*x5^2*x6 + -x2*x3^7*x4^2*x5^2*x7^2*x8*x9 + x2*x3^7*x4^2*x5^2*x7^2*x8 + x2*x3^7*x4^2*x5^2*x7^2*x9 + -x2*x3^7*x4^2*x5^2*x7^2 + x2*x3^7*x4^2*x5^2*x7*x8^2*x9 + -x2*x3^7*x4^2*x5^2*x7*x8^2 + -x2*x3^7*x4^2*x5^2*x7*x8*x9 + x2*x3^7*x4^2*x5^2*x7*x8 + -x2*x3^7*x4^2*x5^2*x8^2*x9 + x2*x3^7*x4^2*x5^2*x8^2 + 2*x2*x3^7*x4^2*x5^2*x8*x9 + -2*x2*x3^7*x4^2*x5^2*x8 + -x2*x3^7*x4^2*x5^2*x9 + x2*x3^7*x4^2*x5^2 + -x2*x3^7*x4^2*x5*x6*x7^2*x8*x9 + x2*x3^7*x4^2*x5*x6*x7^2*x8 + x2*x3^7*x4^2*x5*x6*x7^2*x9 + -x2*x3^7*x4^2*x5*x6*x7^2 + x2*x3^7*x4^2*x5*x6*x7*x8*x9 + -x2*x3^7*x4^2*x5*x6*x7*x8 + -x2*x3^7*x4^2*x5*x6*x7*x9 + x2*x3^7*x4^2*x5*x6*x7 + x2*x3^7*x4^2*x5*x7^2*x8*x9 + -x2*x3^7*x4^2*x5*x7^2*x8 + -x2*x3^7*x4^2*x5*x7^2*x9 + x2*x3^7*x4^2*x5*x7^2 + -x2*x3^7*x4^2*x5*x7*x8*x9 + x2*x3^7*x4^2*x5*x7*x8 + x2*x3^7*x4^2*x5*x7*x9 + -x2*x3^7*x4^2*x5*x7 + x2*x3^7*x4*x5^3*x6^2*x7*x8^2*x9 + -x2*x3^7*x4*x5^3*x6^2*x7*x8^2 + -x2*x3^7*x4*x5^3*x6^2*x7*x8*x9 + x2*x3^7*x4*x5^3*x6^2*x7*x8 + -x2*x3^7*x4*x5^3*x6^2*x8^2*x9 + x2*x3^7*x4*x5^3*x6^2*x8^2 + x2*x3^7*x4*x5^3*x6^2*x8*x9 + -x2*x3^7*x4*x5^3*x6^2*x8 + x2*x3^7*x4*x5^3*x6*x7^2*x8^2*x9 + -x2*x3^7*x4*x5^3*x6*x7^2*x8^2 + -x2*x3^7*x4*x5^3*x6*x7^2*x9 + x2*x3^7*x4*x5^3*x6*x7^2 + -2*x2*x3^7*x4*x5^3*x6*x7*x8^2*x9 + 2*x2*x3^7*x4*x5^3*x6*x7*x8^2 + x2*x3^7*x4*x5^3*x6*x7*x8*x9 + -x2*x3^7*x4*x5^3*x6*x7*x8 + x2*x3^7*x4*x5^3*x6*x7*x9 + -x2*x3^7*x4*x5^3*x6*x7 + x2*x3^7*x4*x5^3*x6*x8^2*x9 + -x2*x3^7*x4*x5^3*x6*x8^2 + -x2*x3^7*x4*x5^3*x6*x8*x9 + x2*x3^7*x4*x5^3*x6*x8 + -x2*x3^7*x4*x5^3*x7^2*x8^2*x9 + x2*x3^7*x4*x5^3*x7^2*x8^2 + x2*x3^7*x4*x5^3*x7^2*x9 + -x2*x3^7*x4*x5^3*x7^2 + x2*x3^7*x4*x5^3*x7*x8^2*x9 + -x2*x3^7*x4*x5^3*x7*x8^2 + -x2*x3^7*x4*x5^3*x7*x9 + x2*x3^7*x4*x5^3*x7 + x2*x3^7*x4*x5^2*x6^2*x7^2*x8^2*x9 + -x2*x3^7*x4*x5^2*x6^2*x7^2*x8^2 + x2*x3^7*x4*x5^2*x6^2*x7^2*x8*x9^2 + -x2*x3^7*x4*x5^2*x6^2*x7^2*x8*x9 + -x2*x3^7*x4*x5^2*x6^2*x7^2*x9^2 + x2*x3^7*x4*x5^2*x6^2*x7^2 + -2*x2*x3^7*x4*x5^2*x6^2*x7*x8^2*x9 + 2*x2*x3^7*x4*x5^2*x6^2*x7*x8^2 + -x2*x3^7*x4*x5^2*x6^2*x7*x8*x9^2 + 2*x2*x3^7*x4*x5^2*x6^2*x7*x8*x9 + -x2*x3^7*x4*x5^2*x6^2*x7*x8 + x2*x3^7*x4*x5^2*x6^2*x7*x9^2 + -x2*x3^7*x4*x5^2*x6^2*x7 + x2*x3^7*x4*x5^2*x6^2*x8^2*x9 + -x2*x3^7*x4*x5^2*x6^2*x8^2 + -x2*x3^7*x4*x5^2*x6^2*x8*x9 + x2*x3^7*x4*x5^2*x6^2*x8 + x2*x3^7*x4*x5^2*x6*x7^3*x8*x9^2 + -x2*x3^7*x4*x5^2*x6*x7^3*x8 + -x2*x3^7*x4*x5^2*x6*x7^3*x9^2 + x2*x3^7*x4*x5^2*x6*x7^3 + -x2*x3^7*x4*x5^2*x6*x7^2*x8^2*x9 + x2*x3^7*x4*x5^2*x6*x7^2*x8^2 + -x2*x3^7*x4*x5^2*x6*x7^2*x8*x9^2 + -x2*x3^7*x4*x5^2*x6*x7^2*x8*x9 + 2*x2*x3^7*x4*x5^2*x6*x7^2*x8 + x2*x3^7*x4*x5^2*x6*x7^2*x9^2 + 2*x2*x3^7*x4*x5^2*x6*x7^2*x9 + -3*x2*x3^7*x4*x5^2*x6*x7^2 + x2*x3^7*x4*x5^2*x6*x7*x8^2*x9^2 + x2*x3^7*x4*x5^2*x6*x7*x8^2*x9 + -2*x2*x3^7*x4*x5^2*x6*x7*x8^2 + -x2*x3^7*x4*x5^2*x6*x7*x8*x9^2 + x2*x3^7*x4*x5^2*x6*x7*x8*x9 + -2*x2*x3^7*x4*x5^2*x6*x7*x9 + 2*x2*x3^7*x4*x5^2*x6*x7 + -x2*x3^7*x4*x5^2*x6*x8^2*x9^2 + x2*x3^7*x4*x5^2*x6*x8^2 + x2*x3^7*x4*x5^2*x6*x8*x9^2 + -x2*x3^7*x4*x5^2*x6*x8 + -x2*x3^7*x4*x5^2*x7^3*x8*x9^2 + x2*x3^7*x4*x5^2*x7^3*x8 + x2*x3^7*x4*x5^2*x7^3*x9^2 + -x2*x3^7*x4*x5^2*x7^3 + 2*x2*x3^7*x4*x5^2*x7^2*x8*x9 + -2*x2*x3^7*x4*x5^2*x7^2*x8 + -2*x2*x3^7*x4*x5^2*x7^2*x9 + 2*x2*x3^7*x4*x5^2*x7^2 + -x2*x3^7*x4*x5^2*x7*x8^2*x9^2 + x2*x3^7*x4*x5^2*x7*x8^2*x9 + 2*x2*x3^7*x4*x5^2*x7*x8*x9^2 + -3*x2*x3^7*x4*x5^2*x7*x8*x9 + x2*x3^7*x4*x5^2*x7*x8 + -x2*x3^7*x4*x5^2*x7*x9^2 + 2*x2*x3^7*x4*x5^2*x7*x9 + -x2*x3^7*x4*x5^2*x7 + x2*x3^7*x4*x5^2*x8^2*x9^2 + -x2*x3^7*x4*x5^2*x8^2*x9 + -x2*x3^7*x4*x5^2*x8*x9^2 + x2*x3^7*x4*x5^2*x8*x9 + -x2*x3^7*x4*x5*x6^2*x7^2*x8^2*x9 + x2*x3^7*x4*x5*x6^2*x7^2*x8^2 + x2*x3^7*x4*x5*x6^2*x7^2*x9 + -x2*x3^7*x4*x5*x6^2*x7^2 + x2*x3^7*x4*x5*x6^2*x7*x8^2*x9 + -x2*x3^7*x4*x5*x6^2*x7*x8^2 + x2*x3^7*x4*x5*x6^2*x7*x8*x9^3 + -x2*x3^7*x4*x5*x6^2*x7*x8*x9^2 + -x2*x3^7*x4*x5*x6^2*x7*x9^3 + x2*x3^7*x4*x5*x6^2*x7*x9^2 + -x2*x3^7*x4*x5*x6^2*x7*x9 + x2*x3^7*x4*x5*x6^2*x7 + -x2*x3^7*x4*x5*x6^2*x8*x9^3 + x2*x3^7*x4*x5*x6^2*x8*x9^2 + x2*x3^7*x4*x5*x6^2*x9^3 + -x2*x3^7*x4*x5*x6^2*x9^2 + -x2*x3^7*x4*x5*x6*x7^3*x8*x9 + x2*x3^7*x4*x5*x6*x7^3*x8 + x2*x3^7*x4*x5*x6*x7^3*x9 + -x2*x3^7*x4*x5*x6*x7^3 + -x2*x3^7*x4*x5*x6*x7^2*x8*x9^2 + 3*x2*x3^7*x4*x5*x6*x7^2*x8*x9 + -2*x2*x3^7*x4*x5*x6*x7^2*x8 + x2*x3^7*x4*x5*x6*x7^2*x9^2 + -3*x2*x3^7*x4*x5*x6*x7^2*x9 + 2*x2*x3^7*x4*x5*x6*x7^2 + -x2*x3^7*x4*x5*x6*x7*x8^2*x9^2 + x2*x3^7*x4*x5*x6*x7*x8^2*x9 + -x2*x3^7*x4*x5*x6*x7*x8*x9^3 + 3*x2*x3^7*x4*x5*x6*x7*x8*x9^2 + -3*x2*x3^7*x4*x5*x6*x7*x8*x9 + x2*x3^7*x4*x5*x6*x7*x8 + x2*x3^7*x4*x5*x6*x7*x9^3 + -2*x2*x3^7*x4*x5*x6*x7*x9^2 + 2*x2*x3^7*x4*x5*x6*x7*x9 + -x2*x3^7*x4*x5*x6*x7 + x2*x3^7*x4*x5*x6*x8^2*x9^2 + -x2*x3^7*x4*x5*x6*x8^2*x9 + x2*x3^7*x4*x5*x6*x8*x9^3 + -2*x2*x3^7*x4*x5*x6*x8*x9^2 + x2*x3^7*x4*x5*x6*x8*x9 + -x2*x3^7*x4*x5*x6*x9^3 + x2*x3^7*x4*x5*x6*x9^2 + x2*x3^7*x4*x5*x7^3*x8*x9 + -x2*x3^7*x4*x5*x7^3*x8 + -x2*x3^7*x4*x5*x7^3*x9 + x2*x3^7*x4*x5*x7^3 + x2*x3^7*x4*x5*x7^2*x8^2*x9 + -x2*x3^7*x4*x5*x7^2*x8^2 + x2*x3^7*x4*x5*x7^2*x8*x9^2 + -3*x2*x3^7*x4*x5*x7^2*x8*x9 + 2*x2*x3^7*x4*x5*x7^2*x8 + -x2*x3^7*x4*x5*x7^2*x9^2 + 2*x2*x3^7*x4*x5*x7^2*x9 + -x2*x3^7*x4*x5*x7^2 + x2*x3^7*x4*x5*x7*x8^2*x9^2 + -2*x2*x3^7*x4*x5*x7*x8^2*x9 + x2*x3^7*x4*x5*x7*x8^2 + -2*x2*x3^7*x4*x5*x7*x8*x9^2 + 3*x2*x3^7*x4*x5*x7*x8*x9 + -x2*x3^7*x4*x5*x7*x8 + x2*x3^7*x4*x5*x7*x9^2 + -x2*x3^7*x4*x5*x7*x9 + -x2*x3^7*x4*x5*x8^2*x9^2 + x2*x3^7*x4*x5*x8^2*x9 + x2*x3^7*x4*x5*x8*x9^2 + -x2*x3^7*x4*x5*x8*x9 + -x2*x3^7*x4*x6^2*x7^2*x8*x9^2 + x2*x3^7*x4*x6^2*x7^2*x8*x9 + x2*x3^7*x4*x6^2*x7^2*x9^2 + -x2*x3^7*x4*x6^2*x7^2*x9 + -x2*x3^7*x4*x6^2*x7*x8*x9^3 + 2*x2*x3^7*x4*x6^2*x7*x8*x9^2 + -x2*x3^7*x4*x6^2*x7*x8*x9 + x2*x3^7*x4*x6^2*x7*x9^3 + -2*x2*x3^7*x4*x6^2*x7*x9^2 + x2*x3^7*x4*x6^2*x7*x9 + x2*x3^7*x4*x6^2*x8*x9^3 + -x2*x3^7*x4*x6^2*x8*x9^2 + -x2*x3^7*x4*x6^2*x9^3 + x2*x3^7*x4*x6^2*x9^2 + -x2*x3^7*x4*x6*x7^3*x8*x9^2 + x2*x3^7*x4*x6*x7^3*x8*x9 + x2*x3^7*x4*x6*x7^3*x9^2 + -x2*x3^7*x4*x6*x7^3*x9 + 2*x2*x3^7*x4*x6*x7^2*x8*x9^2 + -2*x2*x3^7*x4*x6*x7^2*x8*x9 + -2*x2*x3^7*x4*x6*x7^2*x9^2 + 2*x2*x3^7*x4*x6*x7^2*x9 + x2*x3^7*x4*x6*x7*x8*x9^3 + -2*x2*x3^7*x4*x6*x7*x8*x9^2 + x2*x3^7*x4*x6*x7*x8*x9 + -x2*x3^7*x4*x6*x7*x9^3 + 2*x2*x3^7*x4*x6*x7*x9^2 + -x2*x3^7*x4*x6*x7*x9 + -x2*x3^7*x4*x6*x8*x9^3 + x2*x3^7*x4*x6*x8*x9^2 + x2*x3^7*x4*x6*x9^3 + -x2*x3^7*x4*x6*x9^2 + x2*x3^7*x4*x7^3*x8*x9^2 + -x2*x3^7*x4*x7^3*x8*x9 + -x2*x3^7*x4*x7^3*x9^2 + x2*x3^7*x4*x7^3*x9 + -x2*x3^7*x4*x7^2*x8*x9^2 + x2*x3^7*x4*x7^2*x8*x9 + x2*x3^7*x4*x7^2*x9^2 + -x2*x3^7*x4*x7^2*x9 + -x2*x3^7*x5^3*x6^2*x7*x8^2*x9 + x2*x3^7*x5^3*x6^2*x7*x8^2 + x2*x3^7*x5^3*x6^2*x7*x8*x9 + -x2*x3^7*x5^3*x6^2*x7*x8 + x2*x3^7*x5^3*x6^2*x8^2*x9 + -x2*x3^7*x5^3*x6^2*x8^2 + -x2*x3^7*x5^3*x6^2*x8*x9 + x2*x3^7*x5^3*x6^2*x8 + -x2*x3^7*x5^3*x6*x7^2*x8^2*x9 + x2*x3^7*x5^3*x6*x7^2*x8^2 + x2*x3^7*x5^3*x6*x7^2*x9 + -x2*x3^7*x5^3*x6*x7^2 + x2*x3^7*x5^3*x6*x7*x8^2*x9 + -x2*x3^7*x5^3*x6*x7*x8^2 + -x2*x3^7*x5^3*x6*x7*x9 + x2*x3^7*x5^3*x6*x7 + x2*x3^7*x5^3*x7^2*x8^2*x9 + -x2*x3^7*x5^3*x7^2*x8^2 + -x2*x3^7*x5^3*x7^2*x9 + x2*x3^7*x5^3*x7^2 + -x2*x3^7*x5^3*x7*x8*x9 + x2*x3^7*x5^3*x7*x8 + x2*x3^7*x5^3*x7*x9 + -x2*x3^7*x5^3*x7 + -x2*x3^7*x5^3*x8^2*x9 + x2*x3^7*x5^3*x8^2 + x2*x3^7*x5^3*x8*x9 + -x2*x3^7*x5^3*x8 + -x2*x3^7*x5^2*x6^2*x7^2*x8^2*x9 + x2*x3^7*x5^2*x6^2*x7^2*x8^2 + -x2*x3^7*x5^2*x6^2*x7^2*x8*x9^2 + x2*x3^7*x5^2*x6^2*x7^2*x8*x9 + x2*x3^7*x5^2*x6^2*x7^2*x9^2 + -x2*x3^7*x5^2*x6^2*x7^2 + 2*x2*x3^7*x5^2*x6^2*x7*x8^2*x9 + -2*x2*x3^7*x5^2*x6^2*x7*x8^2 + x2*x3^7*x5^2*x6^2*x7*x8*x9^2 + -2*x2*x3^7*x5^2*x6^2*x7*x8*x9 + x2*x3^7*x5^2*x6^2*x7*x8 + -x2*x3^7*x5^2*x6^2*x7*x9^2 + x2*x3^7*x5^2*x6^2*x7 + -x2*x3^7*x5^2*x6^2*x8^2*x9 + x2*x3^7*x5^2*x6^2*x8^2 + x2*x3^7*x5^2*x6^2*x8*x9 + -x2*x3^7*x5^2*x6^2*x8 + -x2*x3^7*x5^2*x6*x7^3*x8*x9^2 + x2*x3^7*x5^2*x6*x7^3*x8 + x2*x3^7*x5^2*x6*x7^3*x9^2 + -x2*x3^7*x5^2*x6*x7^3 + x2*x3^7*x5^2*x6*x7^2*x8^2*x9 + -x2*x3^7*x5^2*x6*x7^2*x8^2 + x2*x3^7*x5^2*x6*x7^2*x8*x9^2 + -x2*x3^7*x5^2*x6*x7^2*x8 + -x2*x3^7*x5^2*x6*x7^2*x9^2 + -x2*x3^7*x5^2*x6*x7^2*x9 + 2*x2*x3^7*x5^2*x6*x7^2 + -x2*x3^7*x5^2*x6*x7*x8^2*x9^2 + x2*x3^7*x5^2*x6*x7*x8^2 + x2*x3^7*x5^2*x6*x7*x8*x9^2 + -x2*x3^7*x5^2*x6*x7*x8*x9 + x2*x3^7*x5^2*x6*x7*x9 + -x2*x3^7*x5^2*x6*x7 + x2*x3^7*x5^2*x6*x8^2*x9^2 + -x2*x3^7*x5^2*x6*x8^2*x9 + -x2*x3^7*x5^2*x6*x8*x9^2 + x2*x3^7*x5^2*x6*x8*x9 + x2*x3^7*x5^2*x7^3*x8*x9^2 + -x2*x3^7*x5^2*x7^3*x8 + -x2*x3^7*x5^2*x7^3*x9^2 + x2*x3^7*x5^2*x7^3 + -x2*x3^7*x5^2*x7^2*x8*x9 + x2*x3^7*x5^2*x7^2*x8 + x2*x3^7*x5^2*x7^2*x9 + -x2*x3^7*x5^2*x7^2 + x2*x3^7*x5^2*x7*x8^2*x9^2 + -2*x2*x3^7*x5^2*x7*x8^2*x9 + x2*x3^7*x5^2*x7*x8^2 + -2*x2*x3^7*x5^2*x7*x8*x9^2 + 3*x2*x3^7*x5^2*x7*x8*x9 + -x2*x3^7*x5^2*x7*x8 + x2*x3^7*x5^2*x7*x9^2 + -x2*x3^7*x5^2*x7*x9 + -x2*x3^7*x5^2*x8^2*x9^2 + 2*x2*x3^7*x5^2*x8^2*x9 + -x2*x3^7*x5^2*x8^2 + x2*x3^7*x5^2*x8*x9^2 + -2*x2*x3^7*x5^2*x8*x9 + x2*x3^7*x5^2*x8 + x2*x3^7*x5*x6^2*x7^2*x8^2*x9 + -x2*x3^7*x5*x6^2*x7^2*x8^2 + -x2*x3^7*x5*x6^2*x7^2*x9 + x2*x3^7*x5*x6^2*x7^2 + -x2*x3^7*x5*x6^2*x7*x8^2*x9 + x2*x3^7*x5*x6^2*x7*x8^2 + -x2*x3^7*x5*x6^2*x7*x8*x9^3 + x2*x3^7*x5*x6^2*x7*x8*x9^2 + x2*x3^7*x5*x6^2*x7*x9^3 + -x2*x3^7*x5*x6^2*x7*x9^2 + x2*x3^7*x5*x6^2*x7*x9 + -x2*x3^7*x5*x6^2*x7 + x2*x3^7*x5*x6^2*x8*x9^3 + -x2*x3^7*x5*x6^2*x8*x9^2 + -x2*x3^7*x5*x6^2*x9^3 + x2*x3^7*x5*x6^2*x9^2 + x2*x3^7*x5*x6*x7^3*x8*x9 + -x2*x3^7*x5*x6*x7^3*x8 + -x2*x3^7*x5*x6*x7^3*x9 + x2*x3^7*x5*x6*x7^3 + x2*x3^7*x5*x6*x7^2*x8*x9^2 + -2*x2*x3^7*x5*x6*x7^2*x8*x9 + x2*x3^7*x5*x6*x7^2*x8 + -x2*x3^7*x5*x6*x7^2*x9^2 + 2*x2*x3^7*x5*x6*x7^2*x9 + -x2*x3^7*x5*x6*x7^2 + x2*x3^7*x5*x6*x7*x8^2*x9^2 + -x2*x3^7*x5*x6*x7*x8^2*x9 + x2*x3^7*x5*x6*x7*x8*x9^3 + -3*x2*x3^7*x5*x6*x7*x8*x9^2 + 2*x2*x3^7*x5*x6*x7*x8*x9 + -x2*x3^7*x5*x6*x7*x9^3 + 2*x2*x3^7*x5*x6*x7*x9^2 + -x2*x3^7*x5*x6*x7*x9 + -x2*x3^7*x5*x6*x8^2*x9^2 + x2*x3^7*x5*x6*x8^2*x9 + -x2*x3^7*x5*x6*x8*x9^3 + 2*x2*x3^7*x5*x6*x8*x9^2 + -x2*x3^7*x5*x6*x8*x9 + x2*x3^7*x5*x6*x9^3 + -x2*x3^7*x5*x6*x9^2 + -x2*x3^7*x5*x7^3*x8*x9 + x2*x3^7*x5*x7^3*x8 + x2*x3^7*x5*x7^3*x9 + -x2*x3^7*x5*x7^3 + -x2*x3^7*x5*x7^2*x8^2*x9 + x2*x3^7*x5*x7^2*x8^2 + -x2*x3^7*x5*x7^2*x8*x9^2 + 2*x2*x3^7*x5*x7^2*x8*x9 + -x2*x3^7*x5*x7^2*x8 + x2*x3^7*x5*x7^2*x9^2 + -x2*x3^7*x5*x7^2*x9 + -x2*x3^7*x5*x7*x8^2*x9^2 + 2*x2*x3^7*x5*x7*x8^2*x9 + -x2*x3^7*x5*x7*x8^2 + 2*x2*x3^7*x5*x7*x8*x9^2 + -2*x2*x3^7*x5*x7*x8*x9 + -x2*x3^7*x5*x7*x9^2 + x2*x3^7*x5*x7 + x2*x3^7*x5*x8^2*x9^2 + -x2*x3^7*x5*x8^2*x9 + -x2*x3^7*x5*x8*x9^2 + x2*x3^7*x5*x8*x9 + x2*x3^7*x6^2*x7^2*x8*x9^2 + -x2*x3^7*x6^2*x7^2*x8*x9 + -x2*x3^7*x6^2*x7^2*x9^2 + x2*x3^7*x6^2*x7^2*x9 + x2*x3^7*x6^2*x7*x8*x9^3 + -2*x2*x3^7*x6^2*x7*x8*x9^2 + x2*x3^7*x6^2*x7*x8*x9 + -x2*x3^7*x6^2*x7*x9^3 + 2*x2*x3^7*x6^2*x7*x9^2 + -x2*x3^7*x6^2*x7*x9 + -x2*x3^7*x6^2*x8*x9^3 + x2*x3^7*x6^2*x8*x9^2 + x2*x3^7*x6^2*x9^3 + -x2*x3^7*x6^2*x9^2 + x2*x3^7*x6*x7^3*x8*x9^2 + -x2*x3^7*x6*x7^3*x8*x9 + -x2*x3^7*x6*x7^3*x9^2 + x2*x3^7*x6*x7^3*x9 + -2*x2*x3^7*x6*x7^2*x8*x9^2 + 2*x2*x3^7*x6*x7^2*x8*x9 + 2*x2*x3^7*x6*x7^2*x9^2 + -2*x2*x3^7*x6*x7^2*x9 + -x2*x3^7*x6*x7*x8*x9^3 + 2*x2*x3^7*x6*x7*x8*x9^2 + -x2*x3^7*x6*x7*x8*x9 + x2*x3^7*x6*x7*x9^3 + -2*x2*x3^7*x6*x7*x9^2 + x2*x3^7*x6*x7*x9 + x2*x3^7*x6*x8*x9^3 + -x2*x3^7*x6*x8*x9^2 + -x2*x3^7*x6*x9^3 + x2*x3^7*x6*x9^2 + -x2*x3^7*x7^3*x8*x9^2 + x2*x3^7*x7^3*x8*x9 + x2*x3^7*x7^3*x9^2 + -x2*x3^7*x7^3*x9 + x2*x3^7*x7^2*x8*x9^2 + -x2*x3^7*x7^2*x8*x9 + -x2*x3^7*x7^2*x9^2 + x2*x3^7*x7^2*x9 + x2*x3^6*x4^2*x5^6*x6*x7*x8*x9 + -x2*x3^6*x4^2*x5^6*x6*x7*x8 + -x2*x3^6*x4^2*x5^6*x6*x7*x9 + x2*x3^6*x4^2*x5^6*x6*x7 + -x2*x3^6*x4^2*x5^6*x6*x8*x9 + x2*x3^6*x4^2*x5^6*x6*x8 + x2*x3^6*x4^2*x5^6*x6*x9 + -x2*x3^6*x4^2*x5^6*x6 + -x2*x3^6*x4^2*x5^6*x7*x8*x9 + x2*x3^6*x4^2*x5^6*x7*x8 + x2*x3^6*x4^2*x5^6*x7*x9 + -x2*x3^6*x4^2*x5^6*x7 + x2*x3^6*x4^2*x5^6*x8*x9 + -x2*x3^6*x4^2*x5^6*x8 + -x2*x3^6*x4^2*x5^6*x9 + x2*x3^6*x4^2*x5^6 + -x2*x3^6*x4^2*x5^3*x6*x7*x8*x9 + x2*x3^6*x4^2*x5^3*x6*x7*x8 + x2*x3^6*x4^2*x5^3*x6*x7*x9 + -x2*x3^6*x4^2*x5^3*x6*x7 + x2*x3^6*x4^2*x5^3*x6*x8*x9 + -x2*x3^6*x4^2*x5^3*x6*x8 + -x2*x3^6*x4^2*x5^3*x6*x9 + x2*x3^6*x4^2*x5^3*x6 + x2*x3^6*x4^2*x5^3*x7*x8*x9 + -x2*x3^6*x4^2*x5^3*x7*x8 + -x2*x3^6*x4^2*x5^3*x7*x9 + x2*x3^6*x4^2*x5^3*x7 + -x2*x3^6*x4^2*x5^3*x8*x9 + x2*x3^6*x4^2*x5^3*x8 + x2*x3^6*x4^2*x5^3*x9 + -x2*x3^6*x4^2*x5^3 + -x2*x3^6*x4*x5^6*x6*x7*x8*x9 + x2*x3^6*x4*x5^6*x6*x7*x8 + x2*x3^6*x4*x5^6*x6*x7*x9 + -x2*x3^6*x4*x5^6*x6*x7 + x2*x3^6*x4*x5^6*x6*x8*x9 + -x2*x3^6*x4*x5^6*x6*x8 + -x2*x3^6*x4*x5^6*x6*x9 + x2*x3^6*x4*x5^6*x6 + x2*x3^6*x4*x5^6*x7*x8*x9 + -x2*x3^6*x4*x5^6*x7*x8 + -x2*x3^6*x4*x5^6*x7*x9 + x2*x3^6*x4*x5^6*x7 + -x2*x3^6*x4*x5^6*x8*x9 + x2*x3^6*x4*x5^6*x8 + x2*x3^6*x4*x5^6*x9 + -x2*x3^6*x4*x5^6 + x2*x3^6*x4*x5^5*x6*x7*x8^2*x9 + -x2*x3^6*x4*x5^5*x6*x7*x8^2 + -x2*x3^6*x4*x5^5*x6*x7*x8*x9 + x2*x3^6*x4*x5^5*x6*x7*x8 + -x2*x3^6*x4*x5^5*x6*x8^2*x9 + x2*x3^6*x4*x5^5*x6*x8^2 + x2*x3^6*x4*x5^5*x6*x8*x9 + -x2*x3^6*x4*x5^5*x6*x8 + -x2*x3^6*x4*x5^5*x7*x8^2*x9 + x2*x3^6*x4*x5^5*x7*x8^2 + x2*x3^6*x4*x5^5*x7*x8*x9 + -x2*x3^6*x4*x5^5*x7*x8 + x2*x3^6*x4*x5^5*x8^2*x9 + -x2*x3^6*x4*x5^5*x8^2 + -x2*x3^6*x4*x5^5*x8*x9 + x2*x3^6*x4*x5^5*x8 + x2*x3^6*x4*x5^4*x6^2*x7^2*x8*x9 + -x2*x3^6*x4*x5^4*x6^2*x7^2*x8 + -x2*x3^6*x4*x5^4*x6^2*x7^2*x9 + x2*x3^6*x4*x5^4*x6^2*x7^2 + -x2*x3^6*x4*x5^4*x6^2*x7*x8*x9 + x2*x3^6*x4*x5^4*x6^2*x7*x8 + x2*x3^6*x4*x5^4*x6^2*x7*x9 + -x2*x3^6*x4*x5^4*x6^2*x7 + x2*x3^6*x4*x5^4*x6*x7^3*x8*x9 + -x2*x3^6*x4*x5^4*x6*x7^3*x8 + -x2*x3^6*x4*x5^4*x6*x7^3*x9 + x2*x3^6*x4*x5^4*x6*x7^3 + x2*x3^6*x4*x5^4*x6*x7^2*x8^2*x9 + -x2*x3^6*x4*x5^4*x6*x7^2*x8^2 + -2*x2*x3^6*x4*x5^4*x6*x7^2*x8*x9 + 2*x2*x3^6*x4*x5^4*x6*x7^2*x8 + x2*x3^6*x4*x5^4*x6*x7^2*x9 + -x2*x3^6*x4*x5^4*x6*x7^2 + -x2*x3^6*x4*x5^4*x6*x7*x8^2*x9 + x2*x3^6*x4*x5^4*x6*x7*x8^2 + x2*x3^6*x4*x5^4*x6*x7*x8*x9 + -x2*x3^6*x4*x5^4*x6*x7*x8 + -x2*x3^6*x4*x5^4*x7^3*x8*x9 + x2*x3^6*x4*x5^4*x7^3*x8 + x2*x3^6*x4*x5^4*x7^3*x9 + -x2*x3^6*x4*x5^4*x7^3 + -x2*x3^6*x4*x5^4*x7^2*x8^2*x9 + x2*x3^6*x4*x5^4*x7^2*x8^2 + x2*x3^6*x4*x5^4*x7^2*x8*x9 + -x2*x3^6*x4*x5^4*x7^2*x8 + x2*x3^6*x4*x5^4*x7*x8^2*x9 + -x2*x3^6*x4*x5^4*x7*x8^2 + -x2*x3^6*x4*x5^4*x7*x9 + x2*x3^6*x4*x5^4*x7 + x2*x3^6*x4*x5^3*x6^2*x7^2*x8*x9^2 + -x2*x3^6*x4*x5^3*x6^2*x7^2*x8*x9 + -x2*x3^6*x4*x5^3*x6^2*x7^2*x9^2 + x2*x3^6*x4*x5^3*x6^2*x7^2*x9 + x2*x3^6*x4*x5^3*x6^2*x7*x8*x9^3 + -2*x2*x3^6*x4*x5^3*x6^2*x7*x8*x9^2 + x2*x3^6*x4*x5^3*x6^2*x7*x8*x9 + -x2*x3^6*x4*x5^3*x6^2*x7*x9^3 + 2*x2*x3^6*x4*x5^3*x6^2*x7*x9^2 + -x2*x3^6*x4*x5^3*x6^2*x7*x9 + -x2*x3^6*x4*x5^3*x6^2*x8*x9^3 + x2*x3^6*x4*x5^3*x6^2*x8*x9^2 + x2*x3^6*x4*x5^3*x6^2*x9^3 + -x2*x3^6*x4*x5^3*x6^2*x9^2 + -x2*x3^6*x4*x5^3*x6*x7^2*x8^2*x9 + x2*x3^6*x4*x5^3*x6*x7^2*x8^2 + x2*x3^6*x4*x5^3*x6*x7^2*x9 + -x2*x3^6*x4*x5^3*x6*x7^2 + x2*x3^6*x4*x5^3*x6*x7*x8^2*x9^2 + -x2*x3^6*x4*x5^3*x6*x7*x8^2*x9 + -x2*x3^6*x4*x5^3*x6*x7*x8*x9^3 + 3*x2*x3^6*x4*x5^3*x6*x7*x8*x9 + -2*x2*x3^6*x4*x5^3*x6*x7*x8 + x2*x3^6*x4*x5^3*x6*x7*x9^3 + -x2*x3^6*x4*x5^3*x6*x7*x9^2 + -2*x2*x3^6*x4*x5^3*x6*x7*x9 + 2*x2*x3^6*x4*x5^3*x6*x7 + -x2*x3^6*x4*x5^3*x6*x8^2*x9^2 + 2*x2*x3^6*x4*x5^3*x6*x8^2*x9 + -x2*x3^6*x4*x5^3*x6*x8^2 + x2*x3^6*x4*x5^3*x6*x8*x9^3 + -3*x2*x3^6*x4*x5^3*x6*x8*x9 + 2*x2*x3^6*x4*x5^3*x6*x8 + -x2*x3^6*x4*x5^3*x6*x9^3 + x2*x3^6*x4*x5^3*x6*x9^2 + x2*x3^6*x4*x5^3*x6*x9 + -x2*x3^6*x4*x5^3*x6 + x2*x3^6*x4*x5^3*x7^2*x8^2*x9 + -x2*x3^6*x4*x5^3*x7^2*x8^2 + -x2*x3^6*x4*x5^3*x7^2*x8*x9^2 + x2*x3^6*x4*x5^3*x7^2*x8*x9 + x2*x3^6*x4*x5^3*x7^2*x9^2 + -2*x2*x3^6*x4*x5^3*x7^2*x9 + x2*x3^6*x4*x5^3*x7^2 + -x2*x3^6*x4*x5^3*x7*x8^2*x9^2 + x2*x3^6*x4*x5^3*x7*x8^2*x9 + 2*x2*x3^6*x4*x5^3*x7*x8*x9^2 + -4*x2*x3^6*x4*x5^3*x7*x8*x9 + 2*x2*x3^6*x4*x5^3*x7*x8 + -x2*x3^6*x4*x5^3*x7*x9^2 + 3*x2*x3^6*x4*x5^3*x7*x9 + -2*x2*x3^6*x4*x5^3*x7 + x2*x3^6*x4*x5^3*x8^2*x9^2 + -2*x2*x3^6*x4*x5^3*x8^2*x9 + x2*x3^6*x4*x5^3*x8^2 + -x2*x3^6*x4*x5^3*x8*x9^2 + 3*x2*x3^6*x4*x5^3*x8*x9 + -2*x2*x3^6*x4*x5^3*x8 + -x2*x3^6*x4*x5^3*x9 + x2*x3^6*x4*x5^3 + -x2*x3^6*x4*x5^2*x6^2*x7^2*x8*x9^2 + x2*x3^6*x4*x5^2*x6^2*x7^2*x8 + x2*x3^6*x4*x5^2*x6^2*x7^2*x9^2 + -x2*x3^6*x4*x5^2*x6^2*x7^2 + x2*x3^6*x4*x5^2*x6^2*x7*x8*x9^2 + -x2*x3^6*x4*x5^2*x6^2*x7*x8 + -x2*x3^6*x4*x5^2*x6^2*x7*x9^2 + x2*x3^6*x4*x5^2*x6^2*x7 + -x2*x3^6*x4*x5^2*x6*x7^3*x8*x9 + x2*x3^6*x4*x5^2*x6*x7^3*x8 + x2*x3^6*x4*x5^2*x6*x7^3*x9 + -x2*x3^6*x4*x5^2*x6*x7^3 + 2*x2*x3^6*x4*x5^2*x6*x7^2*x8*x9 + -2*x2*x3^6*x4*x5^2*x6*x7^2*x8 + -2*x2*x3^6*x4*x5^2*x6*x7^2*x9 + 2*x2*x3^6*x4*x5^2*x6*x7^2 + -x2*x3^6*x4*x5^2*x6*x7*x8^2*x9^2 + x2*x3^6*x4*x5^2*x6*x7*x8^2*x9 + x2*x3^6*x4*x5^2*x6*x7*x8*x9^2 + -2*x2*x3^6*x4*x5^2*x6*x7*x8*x9 + x2*x3^6*x4*x5^2*x6*x7*x8 + x2*x3^6*x4*x5^2*x6*x7*x9 + -x2*x3^6*x4*x5^2*x6*x7 + x2*x3^6*x4*x5^2*x6*x8^2*x9^2 + -x2*x3^6*x4*x5^2*x6*x8^2*x9 + -x2*x3^6*x4*x5^2*x6*x8*x9^2 + x2*x3^6*x4*x5^2*x6*x8*x9 + x2*x3^6*x4*x5^2*x7^3*x8*x9 + -x2*x3^6*x4*x5^2*x7^3*x8 + -x2*x3^6*x4*x5^2*x7^3*x9 + x2*x3^6*x4*x5^2*x7^3 + x2*x3^6*x4*x5^2*x7^2*x8*x9^2 + -2*x2*x3^6*x4*x5^2*x7^2*x8*x9 + x2*x3^6*x4*x5^2*x7^2*x8 + -x2*x3^6*x4*x5^2*x7^2*x9^2 + 2*x2*x3^6*x4*x5^2*x7^2*x9 + -x2*x3^6*x4*x5^2*x7^2 + x2*x3^6*x4*x5^2*x7*x8^2*x9^2 + -x2*x3^6*x4*x5^2*x7*x8^2*x9 + -2*x2*x3^6*x4*x5^2*x7*x8*x9^2 + 2*x2*x3^6*x4*x5^2*x7*x8*x9 + x2*x3^6*x4*x5^2*x7*x9^2 + -x2*x3^6*x4*x5^2*x7*x9 + -x2*x3^6*x4*x5^2*x8^2*x9^2 + x2*x3^6*x4*x5^2*x8^2*x9 + x2*x3^6*x4*x5^2*x8*x9^2 + -x2*x3^6*x4*x5^2*x8*x9 + -x2*x3^6*x4*x5*x6^2*x7*x8*x9^3 + x2*x3^6*x4*x5*x6^2*x7*x8*x9^2 + x2*x3^6*x4*x5*x6^2*x7*x9^3 + -x2*x3^6*x4*x5*x6^2*x7*x9^2 + x2*x3^6*x4*x5*x6^2*x8*x9^3 + -x2*x3^6*x4*x5*x6^2*x8*x9^2 + -x2*x3^6*x4*x5*x6^2*x9^3 + x2*x3^6*x4*x5*x6^2*x9^2 + x2*x3^6*x4*x5*x6*x7^4*x8*x9^2 + -x2*x3^6*x4*x5*x6*x7^4*x8*x9 + -x2*x3^6*x4*x5*x6*x7^4*x9^2 + x2*x3^6*x4*x5*x6*x7^4*x9 + -x2*x3^6*x4*x5*x6*x7^3*x8*x9^2 + x2*x3^6*x4*x5*x6*x7^3*x8*x9 + x2*x3^6*x4*x5*x6*x7^3*x9^2 + -x2*x3^6*x4*x5*x6*x7^3*x9 + x2*x3^6*x4*x5*x6*x7*x8*x9^3 + -x2*x3^6*x4*x5*x6*x7*x8*x9^2 + -x2*x3^6*x4*x5*x6*x7*x9^3 + x2*x3^6*x4*x5*x6*x7*x9^2 + -x2*x3^6*x4*x5*x6*x8*x9^3 + x2*x3^6*x4*x5*x6*x8*x9^2 + x2*x3^6*x4*x5*x6*x9^3 + -x2*x3^6*x4*x5*x6*x9^2 + -x2*x3^6*x4*x5*x7^4*x8*x9^2 + x2*x3^6*x4*x5*x7^4*x8*x9 + x2*x3^6*x4*x5*x7^4*x9^2 + -x2*x3^6*x4*x5*x7^4*x9 + x2*x3^6*x4*x5*x7^3*x8*x9^2 + -x2*x3^6*x4*x5*x7^3*x8*x9 + -x2*x3^6*x4*x5*x7^3*x9^2 + x2*x3^6*x4*x5*x7^3*x9 + -x2*x3^6*x4*x6*x7^4*x8*x9^2 + x2*x3^6*x4*x6*x7^4*x8*x9 + x2*x3^6*x4*x6*x7^4*x9^2 + -x2*x3^6*x4*x6*x7^4*x9 + x2*x3^6*x4*x6*x7^3*x8*x9^2 + -x2*x3^6*x4*x6*x7^3*x8*x9 + -x2*x3^6*x4*x6*x7^3*x9^2 + x2*x3^6*x4*x6*x7^3*x9 + x2*x3^6*x4*x7^4*x8*x9^2 + -x2*x3^6*x4*x7^4*x8*x9 + -x2*x3^6*x4*x7^4*x9^2 + x2*x3^6*x4*x7^4*x9 + -x2*x3^6*x4*x7^3*x8*x9^2 + x2*x3^6*x4*x7^3*x8*x9 + x2*x3^6*x4*x7^3*x9^2 + -x2*x3^6*x4*x7^3*x9 + -x2*x3^6*x5^5*x6*x7*x8^2*x9 + x2*x3^6*x5^5*x6*x7*x8^2 + x2*x3^6*x5^5*x6*x7*x8*x9 + -x2*x3^6*x5^5*x6*x7*x8 + x2*x3^6*x5^5*x6*x8^2*x9 + -x2*x3^6*x5^5*x6*x8^2 + -x2*x3^6*x5^5*x6*x8*x9 + x2*x3^6*x5^5*x6*x8 + x2*x3^6*x5^5*x7*x8^2*x9 + -x2*x3^6*x5^5*x7*x8^2 + -x2*x3^6*x5^5*x7*x8*x9 + x2*x3^6*x5^5*x7*x8 + -x2*x3^6*x5^5*x8^2*x9 + x2*x3^6*x5^5*x8^2 + x2*x3^6*x5^5*x8*x9 + -x2*x3^6*x5^5*x8 + -x2*x3^6*x5^4*x6^2*x7^2*x8*x9 + x2*x3^6*x5^4*x6^2*x7^2*x8 + x2*x3^6*x5^4*x6^2*x7^2*x9 + -x2*x3^6*x5^4*x6^2*x7^2 + x2*x3^6*x5^4*x6^2*x7*x8*x9 + -x2*x3^6*x5^4*x6^2*x7*x8 + -x2*x3^6*x5^4*x6^2*x7*x9 + x2*x3^6*x5^4*x6^2*x7 + -x2*x3^6*x5^4*x6*x7^3*x8*x9 + x2*x3^6*x5^4*x6*x7^3*x8 + x2*x3^6*x5^4*x6*x7^3*x9 + -x2*x3^6*x5^4*x6*x7^3 + -x2*x3^6*x5^4*x6*x7^2*x8^2*x9 + x2*x3^6*x5^4*x6*x7^2*x8^2 + 2*x2*x3^6*x5^4*x6*x7^2*x8*x9 + -2*x2*x3^6*x5^4*x6*x7^2*x8 + -x2*x3^6*x5^4*x6*x7^2*x9 + x2*x3^6*x5^4*x6*x7^2 + x2*x3^6*x5^4*x6*x7*x8^2*x9 + -x2*x3^6*x5^4*x6*x7*x8^2 + -x2*x3^6*x5^4*x6*x7*x8*x9 + x2*x3^6*x5^4*x6*x7*x8 + x2*x3^6*x5^4*x7^3*x8*x9 + -x2*x3^6*x5^4*x7^3*x8 + -x2*x3^6*x5^4*x7^3*x9 + x2*x3^6*x5^4*x7^3 + x2*x3^6*x5^4*x7^2*x8^2*x9 + -x2*x3^6*x5^4*x7^2*x8^2 + -x2*x3^6*x5^4*x7^2*x8*x9 + x2*x3^6*x5^4*x7^2*x8 + -x2*x3^6*x5^4*x7*x8^2*x9 + x2*x3^6*x5^4*x7*x8^2 + x2*x3^6*x5^4*x7*x9 + -x2*x3^6*x5^4*x7 + -x2*x3^6*x5^3*x6^2*x7^2*x8*x9^2 + x2*x3^6*x5^3*x6^2*x7^2*x8*x9 + x2*x3^6*x5^3*x6^2*x7^2*x9^2 + -x2*x3^6*x5^3*x6^2*x7^2*x9 + -x2*x3^6*x5^3*x6^2*x7*x8*x9^3 + 2*x2*x3^6*x5^3*x6^2*x7*x8*x9^2 + -x2*x3^6*x5^3*x6^2*x7*x8*x9 + x2*x3^6*x5^3*x6^2*x7*x9^3 + -2*x2*x3^6*x5^3*x6^2*x7*x9^2 + x2*x3^6*x5^3*x6^2*x7*x9 + x2*x3^6*x5^3*x6^2*x8*x9^3 + -x2*x3^6*x5^3*x6^2*x8*x9^2 + -x2*x3^6*x5^3*x6^2*x9^3 + x2*x3^6*x5^3*x6^2*x9^2 + x2*x3^6*x5^3*x6*x7^2*x8^2*x9 + -x2*x3^6*x5^3*x6*x7^2*x8^2 + -x2*x3^6*x5^3*x6*x7^2*x9 + x2*x3^6*x5^3*x6*x7^2 + -x2*x3^6*x5^3*x6*x7*x8^2*x9^2 + x2*x3^6*x5^3*x6*x7*x8^2*x9 + x2*x3^6*x5^3*x6*x7*x8*x9^3 + -2*x2*x3^6*x5^3*x6*x7*x8*x9 + x2*x3^6*x5^3*x6*x7*x8 + -x2*x3^6*x5^3*x6*x7*x9^3 + x2*x3^6*x5^3*x6*x7*x9^2 + x2*x3^6*x5^3*x6*x7*x9 + -x2*x3^6*x5^3*x6*x7 + x2*x3^6*x5^3*x6*x8^2*x9^2 + -2*x2*x3^6*x5^3*x6*x8^2*x9 + x2*x3^6*x5^3*x6*x8^2 + -x2*x3^6*x5^3*x6*x8*x9^3 + 2*x2*x3^6*x5^3*x6*x8*x9 + -x2*x3^6*x5^3*x6*x8 + x2*x3^6*x5^3*x6*x9^3 + -x2*x3^6*x5^3*x6*x9^2 + -x2*x3^6*x5^3*x7^2*x8^2*x9 + x2*x3^6*x5^3*x7^2*x8^2 + x2*x3^6*x5^3*x7^2*x8*x9^2 + -x2*x3^6*x5^3*x7^2*x8*x9 + -x2*x3^6*x5^3*x7^2*x9^2 + 2*x2*x3^6*x5^3*x7^2*x9 + -x2*x3^6*x5^3*x7^2 + x2*x3^6*x5^3*x7*x8^2*x9^2 + -x2*x3^6*x5^3*x7*x8^2*x9 + -2*x2*x3^6*x5^3*x7*x8*x9^2 + 3*x2*x3^6*x5^3*x7*x8*x9 + -x2*x3^6*x5^3*x7*x8 + x2*x3^6*x5^3*x7*x9^2 + -2*x2*x3^6*x5^3*x7*x9 + x2*x3^6*x5^3*x7 + -x2*x3^6*x5^3*x8^2*x9^2 + 2*x2*x3^6*x5^3*x8^2*x9 + -x2*x3^6*x5^3*x8^2 + x2*x3^6*x5^3*x8*x9^2 + -2*x2*x3^6*x5^3*x8*x9 + x2*x3^6*x5^3*x8 + x2*x3^6*x5^2*x6^2*x7^2*x8*x9^2 + -x2*x3^6*x5^2*x6^2*x7^2*x8 + -x2*x3^6*x5^2*x6^2*x7^2*x9^2 + x2*x3^6*x5^2*x6^2*x7^2 + -x2*x3^6*x5^2*x6^2*x7*x8*x9^2 + x2*x3^6*x5^2*x6^2*x7*x8 + x2*x3^6*x5^2*x6^2*x7*x9^2 + -x2*x3^6*x5^2*x6^2*x7 + x2*x3^6*x5^2*x6*x7^3*x8*x9 + -x2*x3^6*x5^2*x6*x7^3*x8 + -x2*x3^6*x5^2*x6*x7^3*x9 + x2*x3^6*x5^2*x6*x7^3 + -2*x2*x3^6*x5^2*x6*x7^2*x8*x9 + 2*x2*x3^6*x5^2*x6*x7^2*x8 + 2*x2*x3^6*x5^2*x6*x7^2*x9 + -2*x2*x3^6*x5^2*x6*x7^2 + x2*x3^6*x5^2*x6*x7*x8^2*x9^2 + -x2*x3^6*x5^2*x6*x7*x8^2*x9 + -x2*x3^6*x5^2*x6*x7*x8*x9^2 + 2*x2*x3^6*x5^2*x6*x7*x8*x9 + -x2*x3^6*x5^2*x6*x7*x8 + -x2*x3^6*x5^2*x6*x7*x9 + x2*x3^6*x5^2*x6*x7 + -x2*x3^6*x5^2*x6*x8^2*x9^2 + x2*x3^6*x5^2*x6*x8^2*x9 + x2*x3^6*x5^2*x6*x8*x9^2 + -x2*x3^6*x5^2*x6*x8*x9 + -x2*x3^6*x5^2*x7^3*x8*x9 + x2*x3^6*x5^2*x7^3*x8 + x2*x3^6*x5^2*x7^3*x9 + -x2*x3^6*x5^2*x7^3 + -x2*x3^6*x5^2*x7^2*x8*x9^2 + 2*x2*x3^6*x5^2*x7^2*x8*x9 + -x2*x3^6*x5^2*x7^2*x8 + x2*x3^6*x5^2*x7^2*x9^2 + -2*x2*x3^6*x5^2*x7^2*x9 + x2*x3^6*x5^2*x7^2 + -x2*x3^6*x5^2*x7*x8^2*x9^2 + x2*x3^6*x5^2*x7*x8^2*x9 + 2*x2*x3^6*x5^2*x7*x8*x9^2 + -2*x2*x3^6*x5^2*x7*x8*x9 + -x2*x3^6*x5^2*x7*x9^2 + x2*x3^6*x5^2*x7*x9 + x2*x3^6*x5^2*x8^2*x9^2 + -x2*x3^6*x5^2*x8^2*x9 + -x2*x3^6*x5^2*x8*x9^2 + x2*x3^6*x5^2*x8*x9 + x2*x3^6*x5*x6^2*x7*x8*x9^3 + -x2*x3^6*x5*x6^2*x7*x8*x9^2 + -x2*x3^6*x5*x6^2*x7*x9^3 + x2*x3^6*x5*x6^2*x7*x9^2 + -x2*x3^6*x5*x6^2*x8*x9^3 + x2*x3^6*x5*x6^2*x8*x9^2 + x2*x3^6*x5*x6^2*x9^3 + -x2*x3^6*x5*x6^2*x9^2 + -x2*x3^6*x5*x6*x7^4*x8*x9^2 + x2*x3^6*x5*x6*x7^4*x8*x9 + x2*x3^6*x5*x6*x7^4*x9^2 + -x2*x3^6*x5*x6*x7^4*x9 + x2*x3^6*x5*x6*x7^3*x8*x9^2 + -x2*x3^6*x5*x6*x7^3*x8*x9 + -x2*x3^6*x5*x6*x7^3*x9^2 + x2*x3^6*x5*x6*x7^3*x9 + -x2*x3^6*x5*x6*x7*x8*x9^3 + x2*x3^6*x5*x6*x7*x8*x9^2 + x2*x3^6*x5*x6*x7*x9^3 + -x2*x3^6*x5*x6*x7*x9^2 + x2*x3^6*x5*x6*x8*x9^3 + -x2*x3^6*x5*x6*x8*x9^2 + -x2*x3^6*x5*x6*x9^3 + x2*x3^6*x5*x6*x9^2 + x2*x3^6*x5*x7^4*x8*x9^2 + -x2*x3^6*x5*x7^4*x8*x9 + -x2*x3^6*x5*x7^4*x9^2 + x2*x3^6*x5*x7^4*x9 + -x2*x3^6*x5*x7^3*x8*x9^2 + x2*x3^6*x5*x7^3*x8*x9 + x2*x3^6*x5*x7^3*x9^2 + -x2*x3^6*x5*x7^3*x9 + x2*x3^6*x6*x7^4*x8*x9^2 + -x2*x3^6*x6*x7^4*x8*x9 + -x2*x3^6*x6*x7^4*x9^2 + x2*x3^6*x6*x7^4*x9 + -x2*x3^6*x6*x7^3*x8*x9^2 + x2*x3^6*x6*x7^3*x8*x9 + x2*x3^6*x6*x7^3*x9^2 + -x2*x3^6*x6*x7^3*x9 + -x2*x3^6*x7^4*x8*x9^2 + x2*x3^6*x7^4*x8*x9 + x2*x3^6*x7^4*x9^2 + -x2*x3^6*x7^4*x9 + x2*x3^6*x7^3*x8*x9^2 + -x2*x3^6*x7^3*x8*x9 + -x2*x3^6*x7^3*x9^2 + x2*x3^6*x7^3*x9 + x2*x3^5*x4^2*x5^7*x6*x7*x8*x9 + -x2*x3^5*x4^2*x5^7*x6*x7*x8 + -x2*x3^5*x4^2*x5^7*x6*x7*x9 + x2*x3^5*x4^2*x5^7*x6*x7 + -x2*x3^5*x4^2*x5^7*x6*x8*x9 + x2*x3^5*x4^2*x5^7*x6*x8 + x2*x3^5*x4^2*x5^7*x6*x9 + -x2*x3^5*x4^2*x5^7*x6 + -x2*x3^5*x4^2*x5^7*x7*x8*x9 + x2*x3^5*x4^2*x5^7*x7*x8 + x2*x3^5*x4^2*x5^7*x7*x9 + -x2*x3^5*x4^2*x5^7*x7 + x2*x3^5*x4^2*x5^7*x8*x9 + -x2*x3^5*x4^2*x5^7*x8 + -x2*x3^5*x4^2*x5^7*x9 + x2*x3^5*x4^2*x5^7 + -x2*x3^5*x4^2*x5^6*x6*x7*x8*x9 + x2*x3^5*x4^2*x5^6*x6*x7*x8 + x2*x3^5*x4^2*x5^6*x6*x7*x9 + -x2*x3^5*x4^2*x5^6*x6*x7 + x2*x3^5*x4^2*x5^6*x6*x8*x9 + -x2*x3^5*x4^2*x5^6*x6*x8 + -x2*x3^5*x4^2*x5^6*x6*x9 + x2*x3^5*x4^2*x5^6*x6 + x2*x3^5*x4^2*x5^6*x7*x8*x9 + -x2*x3^5*x4^2*x5^6*x7*x8 + -x2*x3^5*x4^2*x5^6*x7*x9 + x2*x3^5*x4^2*x5^6*x7 + -x2*x3^5*x4^2*x5^6*x8*x9 + x2*x3^5*x4^2*x5^6*x8 + x2*x3^5*x4^2*x5^6*x9 + -x2*x3^5*x4^2*x5^6 + -x2*x3^5*x4*x5^7*x6*x7*x8*x9 + x2*x3^5*x4*x5^7*x6*x7*x8 + x2*x3^5*x4*x5^7*x6*x7*x9 + -x2*x3^5*x4*x5^7*x6*x7 + x2*x3^5*x4*x5^7*x6*x8*x9 + -x2*x3^5*x4*x5^7*x6*x8 + -x2*x3^5*x4*x5^7*x6*x9 + x2*x3^5*x4*x5^7*x6 + x2*x3^5*x4*x5^7*x7*x8*x9 + -x2*x3^5*x4*x5^7*x7*x8 + -x2*x3^5*x4*x5^7*x7*x9 + x2*x3^5*x4*x5^7*x7 + -x2*x3^5*x4*x5^7*x8*x9 + x2*x3^5*x4*x5^7*x8 + x2*x3^5*x4*x5^7*x9 + -x2*x3^5*x4*x5^7 + x2*x3^5*x4*x5^6*x6*x7*x8*x9 + -x2*x3^5*x4*x5^6*x6*x7*x8 + -x2*x3^5*x4*x5^6*x6*x7*x9 + x2*x3^5*x4*x5^6*x6*x7 + -x2*x3^5*x4*x5^6*x6*x8*x9 + x2*x3^5*x4*x5^6*x6*x8 + x2*x3^5*x4*x5^6*x6*x9 + -x2*x3^5*x4*x5^6*x6 + -x2*x3^5*x4*x5^6*x7*x8*x9 + x2*x3^5*x4*x5^6*x7*x8 + x2*x3^5*x4*x5^6*x7*x9 + -x2*x3^5*x4*x5^6*x7 + x2*x3^5*x4*x5^6*x8*x9 + -x2*x3^5*x4*x5^6*x8 + -x2*x3^5*x4*x5^6*x9 + x2*x3^5*x4*x5^6 + x2*x3^5*x4*x5^5*x6*x7^2*x8^2*x9 + -x2*x3^5*x4*x5^5*x6*x7^2*x8^2 + x2*x3^5*x4*x5^5*x6*x7^2*x8*x9^2 + -x2*x3^5*x4*x5^5*x6*x7^2*x8*x9 + -x2*x3^5*x4*x5^5*x6*x7^2*x9^2 + x2*x3^5*x4*x5^5*x6*x7^2 + -x2*x3^5*x4*x5^5*x6*x7*x8^2*x9 + x2*x3^5*x4*x5^5*x6*x7*x8^2 + -x2*x3^5*x4*x5^5*x6*x7*x8*x9^2 + x2*x3^5*x4*x5^5*x6*x7*x8*x9 + x2*x3^5*x4*x5^5*x6*x7*x9^2 + -x2*x3^5*x4*x5^5*x6*x7 + -x2*x3^5*x4*x5^5*x7^2*x8^2*x9 + x2*x3^5*x4*x5^5*x7^2*x8^2 + -x2*x3^5*x4*x5^5*x7^2*x8*x9^2 + x2*x3^5*x4*x5^5*x7^2*x8*x9 + x2*x3^5*x4*x5^5*x7^2*x9^2 + -x2*x3^5*x4*x5^5*x7^2 + x2*x3^5*x4*x5^5*x7*x8^2*x9 + -x2*x3^5*x4*x5^5*x7*x8^2 + x2*x3^5*x4*x5^5*x7*x8*x9^2 + -x2*x3^5*x4*x5^5*x7*x8*x9 + -x2*x3^5*x4*x5^5*x7*x9^2 + x2*x3^5*x4*x5^5*x7 + -x2*x3^5*x4*x5^4*x6*x7^2*x8^2*x9 + x2*x3^5*x4*x5^4*x6*x7^2*x8^2 + x2*x3^5*x4*x5^4*x6*x7^2*x9 + -x2*x3^5*x4*x5^4*x6*x7^2 + x2*x3^5*x4*x5^4*x6*x7*x8^2*x9^2 + -x2*x3^5*x4*x5^4*x6*x7*x8^2 + x2*x3^5*x4*x5^4*x6*x7*x8*x9^4 + -x2*x3^5*x4*x5^4*x6*x7*x8*x9^3 + -x2*x3^5*x4*x5^4*x6*x7*x8*x9^2 + x2*x3^5*x4*x5^4*x6*x7*x8*x9 + -x2*x3^5*x4*x5^4*x6*x7*x9^4 + x2*x3^5*x4*x5^4*x6*x7*x9^3 + -x2*x3^5*x4*x5^4*x6*x7*x9 + x2*x3^5*x4*x5^4*x6*x7 + -x2*x3^5*x4*x5^4*x6*x8^2*x9^2 + x2*x3^5*x4*x5^4*x6*x8^2*x9 + -x2*x3^5*x4*x5^4*x6*x8*x9^4 + x2*x3^5*x4*x5^4*x6*x8*x9^3 + x2*x3^5*x4*x5^4*x6*x8*x9^2 + -x2*x3^5*x4*x5^4*x6*x8*x9 + x2*x3^5*x4*x5^4*x6*x9^4 + -x2*x3^5*x4*x5^4*x6*x9^3 + x2*x3^5*x4*x5^4*x7^2*x8^2*x9 + -x2*x3^5*x4*x5^4*x7^2*x8^2 + -x2*x3^5*x4*x5^4*x7^2*x9 + x2*x3^5*x4*x5^4*x7^2 + -x2*x3^5*x4*x5^4*x7*x8^2*x9^2 + x2*x3^5*x4*x5^4*x7*x8^2 + -x2*x3^5*x4*x5^4*x7*x8*x9^4 + x2*x3^5*x4*x5^4*x7*x8*x9^3 + x2*x3^5*x4*x5^4*x7*x8*x9^2 + -x2*x3^5*x4*x5^4*x7*x8*x9 + x2*x3^5*x4*x5^4*x7*x9^4 + -x2*x3^5*x4*x5^4*x7*x9^3 + x2*x3^5*x4*x5^4*x7*x9 + -x2*x3^5*x4*x5^4*x7 + x2*x3^5*x4*x5^4*x8^2*x9^2 + -x2*x3^5*x4*x5^4*x8^2*x9 + x2*x3^5*x4*x5^4*x8*x9^4 + -x2*x3^5*x4*x5^4*x8*x9^3 + -x2*x3^5*x4*x5^4*x8*x9^2 + x2*x3^5*x4*x5^4*x8*x9 + -x2*x3^5*x4*x5^4*x9^4 + x2*x3^5*x4*x5^4*x9^3 + -x2*x3^5*x4*x5^3*x6*x7^2*x8*x9^2 + x2*x3^5*x4*x5^3*x6*x7^2*x8*x9 + x2*x3^5*x4*x5^3*x6*x7^2*x9^2 + -x2*x3^5*x4*x5^3*x6*x7^2*x9 + -x2*x3^5*x4*x5^3*x6*x7*x8^2*x9^2 + x2*x3^5*x4*x5^3*x6*x7*x8^2*x9 + 2*x2*x3^5*x4*x5^3*x6*x7*x8*x9^2 + -2*x2*x3^5*x4*x5^3*x6*x7*x8*x9 + -x2*x3^5*x4*x5^3*x6*x7*x9^2 + x2*x3^5*x4*x5^3*x6*x7*x9 + x2*x3^5*x4*x5^3*x6*x8^2*x9^2 + -x2*x3^5*x4*x5^3*x6*x8^2*x9 + -x2*x3^5*x4*x5^3*x6*x8*x9^2 + x2*x3^5*x4*x5^3*x6*x8*x9 + x2*x3^5*x4*x5^3*x7^2*x8*x9^2 + -x2*x3^5*x4*x5^3*x7^2*x8*x9 + -x2*x3^5*x4*x5^3*x7^2*x9^2 + x2*x3^5*x4*x5^3*x7^2*x9 + x2*x3^5*x4*x5^3*x7*x8^2*x9^2 + -x2*x3^5*x4*x5^3*x7*x8^2*x9 + -2*x2*x3^5*x4*x5^3*x7*x8*x9^2 + 2*x2*x3^5*x4*x5^3*x7*x8*x9 + x2*x3^5*x4*x5^3*x7*x9^2 + -x2*x3^5*x4*x5^3*x7*x9 + -x2*x3^5*x4*x5^3*x8^2*x9^2 + x2*x3^5*x4*x5^3*x8^2*x9 + x2*x3^5*x4*x5^3*x8*x9^2 + -x2*x3^5*x4*x5^3*x8*x9 + x2*x3^5*x4*x5*x6*x7*x8*x9^5 + -2*x2*x3^5*x4*x5*x6*x7*x8*x9^4 + x2*x3^5*x4*x5*x6*x7*x8*x9^3 + -x2*x3^5*x4*x5*x6*x7*x9^5 + 2*x2*x3^5*x4*x5*x6*x7*x9^4 + -x2*x3^5*x4*x5*x6*x7*x9^3 + -x2*x3^5*x4*x5*x6*x8*x9^5 + 2*x2*x3^5*x4*x5*x6*x8*x9^4 + -x2*x3^5*x4*x5*x6*x8*x9^3 + x2*x3^5*x4*x5*x6*x9^5 + -2*x2*x3^5*x4*x5*x6*x9^4 + x2*x3^5*x4*x5*x6*x9^3 + -x2*x3^5*x4*x5*x7*x8*x9^5 + 2*x2*x3^5*x4*x5*x7*x8*x9^4 + -x2*x3^5*x4*x5*x7*x8*x9^3 + x2*x3^5*x4*x5*x7*x9^5 + -2*x2*x3^5*x4*x5*x7*x9^4 + x2*x3^5*x4*x5*x7*x9^3 + x2*x3^5*x4*x5*x8*x9^5 + -2*x2*x3^5*x4*x5*x8*x9^4 + x2*x3^5*x4*x5*x8*x9^3 + -x2*x3^5*x4*x5*x9^5 + 2*x2*x3^5*x4*x5*x9^4 + -x2*x3^5*x4*x5*x9^3 + -x2*x3^5*x4*x6*x7*x8*x9^5 + x2*x3^5*x4*x6*x7*x8*x9^4 + x2*x3^5*x4*x6*x7*x9^5 + -x2*x3^5*x4*x6*x7*x9^4 + x2*x3^5*x4*x6*x8*x9^5 + -x2*x3^5*x4*x6*x8*x9^4 + -x2*x3^5*x4*x6*x9^5 + x2*x3^5*x4*x6*x9^4 + x2*x3^5*x4*x7*x8*x9^5 + -x2*x3^5*x4*x7*x8*x9^4 + -x2*x3^5*x4*x7*x9^5 + x2*x3^5*x4*x7*x9^4 + -x2*x3^5*x4*x8*x9^5 + x2*x3^5*x4*x8*x9^4 + x2*x3^5*x4*x9^5 + -x2*x3^5*x4*x9^4 + -x2*x3^5*x5^5*x6*x7^2*x8^2*x9 + x2*x3^5*x5^5*x6*x7^2*x8^2 + -x2*x3^5*x5^5*x6*x7^2*x8*x9^2 + x2*x3^5*x5^5*x6*x7^2*x8*x9 + x2*x3^5*x5^5*x6*x7^2*x9^2 + -x2*x3^5*x5^5*x6*x7^2 + x2*x3^5*x5^5*x6*x7*x8^2*x9 + -x2*x3^5*x5^5*x6*x7*x8^2 + x2*x3^5*x5^5*x6*x7*x8*x9^2 + -x2*x3^5*x5^5*x6*x7*x8*x9 + -x2*x3^5*x5^5*x6*x7*x9^2 + x2*x3^5*x5^5*x6*x7 + x2*x3^5*x5^5*x7^2*x8^2*x9 + -x2*x3^5*x5^5*x7^2*x8^2 + x2*x3^5*x5^5*x7^2*x8*x9^2 + -x2*x3^5*x5^5*x7^2*x8*x9 + -x2*x3^5*x5^5*x7^2*x9^2 + x2*x3^5*x5^5*x7^2 + -x2*x3^5*x5^5*x7*x8^2*x9 + x2*x3^5*x5^5*x7*x8^2 + -x2*x3^5*x5^5*x7*x8*x9^2 + x2*x3^5*x5^5*x7*x8*x9 + x2*x3^5*x5^5*x7*x9^2 + -x2*x3^5*x5^5*x7 + x2*x3^5*x5^4*x6*x7^2*x8^2*x9 + -x2*x3^5*x5^4*x6*x7^2*x8^2 + -x2*x3^5*x5^4*x6*x7^2*x9 + x2*x3^5*x5^4*x6*x7^2 + -x2*x3^5*x5^4*x6*x7*x8^2*x9^2 + x2*x3^5*x5^4*x6*x7*x8^2 + -x2*x3^5*x5^4*x6*x7*x8*x9^4 + x2*x3^5*x5^4*x6*x7*x8*x9^3 + x2*x3^5*x5^4*x6*x7*x8*x9^2 + -x2*x3^5*x5^4*x6*x7*x8*x9 + x2*x3^5*x5^4*x6*x7*x9^4 + -x2*x3^5*x5^4*x6*x7*x9^3 + x2*x3^5*x5^4*x6*x7*x9 + -x2*x3^5*x5^4*x6*x7 + x2*x3^5*x5^4*x6*x8^2*x9^2 + -x2*x3^5*x5^4*x6*x8^2*x9 + x2*x3^5*x5^4*x6*x8*x9^4 + -x2*x3^5*x5^4*x6*x8*x9^3 + -x2*x3^5*x5^4*x6*x8*x9^2 + x2*x3^5*x5^4*x6*x8*x9 + -x2*x3^5*x5^4*x6*x9^4 + x2*x3^5*x5^4*x6*x9^3 + -x2*x3^5*x5^4*x7^2*x8^2*x9 + x2*x3^5*x5^4*x7^2*x8^2 + x2*x3^5*x5^4*x7^2*x9 + -x2*x3^5*x5^4*x7^2 + x2*x3^5*x5^4*x7*x8^2*x9^2 + -x2*x3^5*x5^4*x7*x8^2 + x2*x3^5*x5^4*x7*x8*x9^4 + -x2*x3^5*x5^4*x7*x8*x9^3 + -x2*x3^5*x5^4*x7*x8*x9^2 + x2*x3^5*x5^4*x7*x8*x9 + -x2*x3^5*x5^4*x7*x9^4 + x2*x3^5*x5^4*x7*x9^3 + -x2*x3^5*x5^4*x7*x9 + x2*x3^5*x5^4*x7 + -x2*x3^5*x5^4*x8^2*x9^2 + x2*x3^5*x5^4*x8^2*x9 + -x2*x3^5*x5^4*x8*x9^4 + x2*x3^5*x5^4*x8*x9^3 + x2*x3^5*x5^4*x8*x9^2 + -x2*x3^5*x5^4*x8*x9 + x2*x3^5*x5^4*x9^4 + -x2*x3^5*x5^4*x9^3 + x2*x3^5*x5^3*x6*x7^2*x8*x9^2 + -x2*x3^5*x5^3*x6*x7^2*x8*x9 + -x2*x3^5*x5^3*x6*x7^2*x9^2 + x2*x3^5*x5^3*x6*x7^2*x9 + x2*x3^5*x5^3*x6*x7*x8^2*x9^2 + -x2*x3^5*x5^3*x6*x7*x8^2*x9 + -2*x2*x3^5*x5^3*x6*x7*x8*x9^2 + 2*x2*x3^5*x5^3*x6*x7*x8*x9 + x2*x3^5*x5^3*x6*x7*x9^2 + -x2*x3^5*x5^3*x6*x7*x9 + -x2*x3^5*x5^3*x6*x8^2*x9^2 + x2*x3^5*x5^3*x6*x8^2*x9 + x2*x3^5*x5^3*x6*x8*x9^2 + -x2*x3^5*x5^3*x6*x8*x9 + -x2*x3^5*x5^3*x7^2*x8*x9^2 + x2*x3^5*x5^3*x7^2*x8*x9 + x2*x3^5*x5^3*x7^2*x9^2 + -x2*x3^5*x5^3*x7^2*x9 + -x2*x3^5*x5^3*x7*x8^2*x9^2 + x2*x3^5*x5^3*x7*x8^2*x9 + 2*x2*x3^5*x5^3*x7*x8*x9^2 + -2*x2*x3^5*x5^3*x7*x8*x9 + -x2*x3^5*x5^3*x7*x9^2 + x2*x3^5*x5^3*x7*x9 + x2*x3^5*x5^3*x8^2*x9^2 + -x2*x3^5*x5^3*x8^2*x9 + -x2*x3^5*x5^3*x8*x9^2 + x2*x3^5*x5^3*x8*x9 + -x2*x3^5*x5*x6*x7*x8*x9^5 + 2*x2*x3^5*x5*x6*x7*x8*x9^4 + -x2*x3^5*x5*x6*x7*x8*x9^3 + x2*x3^5*x5*x6*x7*x9^5 + -2*x2*x3^5*x5*x6*x7*x9^4 + x2*x3^5*x5*x6*x7*x9^3 + x2*x3^5*x5*x6*x8*x9^5 + -2*x2*x3^5*x5*x6*x8*x9^4 + x2*x3^5*x5*x6*x8*x9^3 + -x2*x3^5*x5*x6*x9^5 + 2*x2*x3^5*x5*x6*x9^4 + -x2*x3^5*x5*x6*x9^3 + x2*x3^5*x5*x7*x8*x9^5 + -2*x2*x3^5*x5*x7*x8*x9^4 + x2*x3^5*x5*x7*x8*x9^3 + -x2*x3^5*x5*x7*x9^5 + 2*x2*x3^5*x5*x7*x9^4 + -x2*x3^5*x5*x7*x9^3 + -x2*x3^5*x5*x8*x9^5 + 2*x2*x3^5*x5*x8*x9^4 + -x2*x3^5*x5*x8*x9^3 + x2*x3^5*x5*x9^5 + -2*x2*x3^5*x5*x9^4 + x2*x3^5*x5*x9^3 + x2*x3^5*x6*x7*x8*x9^5 + -x2*x3^5*x6*x7*x8*x9^4 + -x2*x3^5*x6*x7*x9^5 + x2*x3^5*x6*x7*x9^4 + -x2*x3^5*x6*x8*x9^5 + x2*x3^5*x6*x8*x9^4 + x2*x3^5*x6*x9^5 + -x2*x3^5*x6*x9^4 + -x2*x3^5*x7*x8*x9^5 + x2*x3^5*x7*x8*x9^4 + x2*x3^5*x7*x9^5 + -x2*x3^5*x7*x9^4 + x2*x3^5*x8*x9^5 + -x2*x3^5*x8*x9^4 + -x2*x3^5*x9^5 + x2*x3^5*x9^4 + x2*x3^4*x4^3*x5*x6*x7*x8^2*x9 + -x2*x3^4*x4^3*x5*x6*x7*x8^2 + -x2*x3^4*x4^3*x5*x6*x7*x8*x9 + x2*x3^4*x4^3*x5*x6*x7*x8 + -x2*x3^4*x4^3*x5*x6*x8^2*x9 + x2*x3^4*x4^3*x5*x6*x8^2 + x2*x3^4*x4^3*x5*x6*x8*x9 + -x2*x3^4*x4^3*x5*x6*x8 + -x2*x3^4*x4^3*x5*x7*x8^2*x9 + x2*x3^4*x4^3*x5*x7*x8^2 + x2*x3^4*x4^3*x5*x7*x8*x9 + -x2*x3^4*x4^3*x5*x7*x8 + x2*x3^4*x4^3*x5*x8^2*x9 + -x2*x3^4*x4^3*x5*x8^2 + -x2*x3^4*x4^3*x5*x8*x9 + x2*x3^4*x4^3*x5*x8 + -x2*x3^4*x4^3*x6*x7*x8^2*x9 + x2*x3^4*x4^3*x6*x7*x8^2 + x2*x3^4*x4^3*x6*x7*x8*x9 + -x2*x3^4*x4^3*x6*x7*x8 + x2*x3^4*x4^3*x6*x8^2*x9 + -x2*x3^4*x4^3*x6*x8^2 + -x2*x3^4*x4^3*x6*x8*x9 + x2*x3^4*x4^3*x6*x8 + x2*x3^4*x4^3*x7*x8^2*x9 + -x2*x3^4*x4^3*x7*x8^2 + -x2*x3^4*x4^3*x7*x8*x9 + x2*x3^4*x4^3*x7*x8 + -x2*x3^4*x4^3*x8^2*x9 + x2*x3^4*x4^3*x8^2 + x2*x3^4*x4^3*x8*x9 + -x2*x3^4*x4^3*x8 + -x2*x3^4*x4^2*x5*x6*x7*x8^2*x9 + x2*x3^4*x4^2*x5*x6*x7*x8^2 + x2*x3^4*x4^2*x5*x6*x7*x8*x9 + -x2*x3^4*x4^2*x5*x6*x7*x8 + x2*x3^4*x4^2*x5*x6*x8^2*x9 + -x2*x3^4*x4^2*x5*x6*x8^2 + -x2*x3^4*x4^2*x5*x6*x8*x9 + x2*x3^4*x4^2*x5*x6*x8 + x2*x3^4*x4^2*x5*x7*x8^2*x9 + -x2*x3^4*x4^2*x5*x7*x8^2 + -x2*x3^4*x4^2*x5*x7*x8*x9 + x2*x3^4*x4^2*x5*x7*x8 + -x2*x3^4*x4^2*x5*x8^2*x9 + x2*x3^4*x4^2*x5*x8^2 + x2*x3^4*x4^2*x5*x8*x9 + -x2*x3^4*x4^2*x5*x8 + x2*x3^4*x4^2*x6*x7*x8^2*x9 + -x2*x3^4*x4^2*x6*x7*x8^2 + -x2*x3^4*x4^2*x6*x7*x8*x9 + x2*x3^4*x4^2*x6*x7*x8 + -x2*x3^4*x4^2*x6*x8^2*x9 + x2*x3^4*x4^2*x6*x8^2 + x2*x3^4*x4^2*x6*x8*x9 + -x2*x3^4*x4^2*x6*x8 + -x2*x3^4*x4^2*x7*x8^2*x9 + x2*x3^4*x4^2*x7*x8^2 + x2*x3^4*x4^2*x7*x8*x9 + -x2*x3^4*x4^2*x7*x8 + x2*x3^4*x4^2*x8^2*x9 + -x2*x3^4*x4^2*x8^2 + -x2*x3^4*x4^2*x8*x9 + x2*x3^4*x4^2*x8 + x2*x3^4*x4*x5^7*x6*x7^2*x8*x9 + -x2*x3^4*x4*x5^7*x6*x7^2*x8 + -x2*x3^4*x4*x5^7*x6*x7^2*x9 + x2*x3^4*x4*x5^7*x6*x7^2 + -x2*x3^4*x4*x5^7*x6*x7*x8*x9 + x2*x3^4*x4*x5^7*x6*x7*x8 + x2*x3^4*x4*x5^7*x6*x7*x9 + -x2*x3^4*x4*x5^7*x6*x7 + -x2*x3^4*x4*x5^7*x7^2*x8*x9 + x2*x3^4*x4*x5^7*x7^2*x8 + x2*x3^4*x4*x5^7*x7^2*x9 + -x2*x3^4*x4*x5^7*x7^2 + x2*x3^4*x4*x5^7*x7*x8*x9 + -x2*x3^4*x4*x5^7*x7*x8 + -x2*x3^4*x4*x5^7*x7*x9 + x2*x3^4*x4*x5^7*x7 + -x2*x3^4*x4*x5^5*x6*x7^2*x8*x9 + x2*x3^4*x4*x5^5*x6*x7^2*x8 + x2*x3^4*x4*x5^5*x6*x7^2*x9 + -x2*x3^4*x4*x5^5*x6*x7^2 + x2*x3^4*x4*x5^5*x6*x7*x8*x9^4 + -x2*x3^4*x4*x5^5*x6*x7*x8*x9^3 + x2*x3^4*x4*x5^5*x6*x7*x8*x9 + -x2*x3^4*x4*x5^5*x6*x7*x8 + -x2*x3^4*x4*x5^5*x6*x7*x9^4 + x2*x3^4*x4*x5^5*x6*x7*x9^3 + -x2*x3^4*x4*x5^5*x6*x7*x9 + x2*x3^4*x4*x5^5*x6*x7 + -x2*x3^4*x4*x5^5*x6*x8*x9^4 + x2*x3^4*x4*x5^5*x6*x8*x9^3 + x2*x3^4*x4*x5^5*x6*x9^4 + -x2*x3^4*x4*x5^5*x6*x9^3 + x2*x3^4*x4*x5^5*x7^2*x8*x9 + -x2*x3^4*x4*x5^5*x7^2*x8 + -x2*x3^4*x4*x5^5*x7^2*x9 + x2*x3^4*x4*x5^5*x7^2 + -x2*x3^4*x4*x5^5*x7*x8*x9^4 + x2*x3^4*x4*x5^5*x7*x8*x9^3 + -x2*x3^4*x4*x5^5*x7*x8*x9 + x2*x3^4*x4*x5^5*x7*x8 + x2*x3^4*x4*x5^5*x7*x9^4 + -x2*x3^4*x4*x5^5*x7*x9^3 + x2*x3^4*x4*x5^5*x7*x9 + -x2*x3^4*x4*x5^5*x7 + x2*x3^4*x4*x5^5*x8*x9^4 + -x2*x3^4*x4*x5^5*x8*x9^3 + -x2*x3^4*x4*x5^5*x9^4 + x2*x3^4*x4*x5^5*x9^3 + -x2*x3^4*x4*x5^4*x6*x7*x8*x9^4 + x2*x3^4*x4*x5^4*x6*x7*x8*x9^3 + x2*x3^4*x4*x5^4*x6*x7*x9^4 + -x2*x3^4*x4*x5^4*x6*x7*x9^3 + x2*x3^4*x4*x5^4*x6*x8*x9^4 + -x2*x3^4*x4*x5^4*x6*x8*x9^3 + -x2*x3^4*x4*x5^4*x6*x9^4 + x2*x3^4*x4*x5^4*x6*x9^3 + x2*x3^4*x4*x5^4*x7*x8*x9^4 + -x2*x3^4*x4*x5^4*x7*x8*x9^3 + -x2*x3^4*x4*x5^4*x7*x9^4 + x2*x3^4*x4*x5^4*x7*x9^3 + -x2*x3^4*x4*x5^4*x8*x9^4 + x2*x3^4*x4*x5^4*x8*x9^3 + x2*x3^4*x4*x5^4*x9^4 + -x2*x3^4*x4*x5^4*x9^3 + x2*x3^4*x4*x5^3*x6*x7*x8*x9^5 + -x2*x3^4*x4*x5^3*x6*x7*x8*x9^4 + -x2*x3^4*x4*x5^3*x6*x7*x9^5 + x2*x3^4*x4*x5^3*x6*x7*x9^4 + -x2*x3^4*x4*x5^3*x6*x8*x9^5 + x2*x3^4*x4*x5^3*x6*x8*x9^4 + x2*x3^4*x4*x5^3*x6*x9^5 + -x2*x3^4*x4*x5^3*x6*x9^4 + -x2*x3^4*x4*x5^3*x7*x8*x9^5 + x2*x3^4*x4*x5^3*x7*x8*x9^4 + x2*x3^4*x4*x5^3*x7*x9^5 + -x2*x3^4*x4*x5^3*x7*x9^4 + x2*x3^4*x4*x5^3*x8*x9^5 + -x2*x3^4*x4*x5^3*x8*x9^4 + -x2*x3^4*x4*x5^3*x9^5 + x2*x3^4*x4*x5^3*x9^4 + -x2*x3^4*x4*x5*x6*x7*x8*x9^5 + x2*x3^4*x4*x5*x6*x7*x8*x9^4 + x2*x3^4*x4*x5*x6*x7*x9^5 + -x2*x3^4*x4*x5*x6*x7*x9^4 + x2*x3^4*x4*x5*x6*x8*x9^5 + -x2*x3^4*x4*x5*x6*x8*x9^4 + -x2*x3^4*x4*x5*x6*x9^5 + x2*x3^4*x4*x5*x6*x9^4 + x2*x3^4*x4*x5*x7*x8*x9^5 + -x2*x3^4*x4*x5*x7*x8*x9^4 + -x2*x3^4*x4*x5*x7*x9^5 + x2*x3^4*x4*x5*x7*x9^4 + -x2*x3^4*x4*x5*x8*x9^5 + x2*x3^4*x4*x5*x8*x9^4 + x2*x3^4*x4*x5*x9^5 + -x2*x3^4*x4*x5*x9^4 + -x2*x3^4*x5^7*x6*x7^2*x8*x9 + x2*x3^4*x5^7*x6*x7^2*x8 + x2*x3^4*x5^7*x6*x7^2*x9 + -x2*x3^4*x5^7*x6*x7^2 + x2*x3^4*x5^7*x6*x7*x8*x9 + -x2*x3^4*x5^7*x6*x7*x8 + -x2*x3^4*x5^7*x6*x7*x9 + x2*x3^4*x5^7*x6*x7 + x2*x3^4*x5^7*x7^2*x8*x9 + -x2*x3^4*x5^7*x7^2*x8 + -x2*x3^4*x5^7*x7^2*x9 + x2*x3^4*x5^7*x7^2 + -x2*x3^4*x5^7*x7*x8*x9 + x2*x3^4*x5^7*x7*x8 + x2*x3^4*x5^7*x7*x9 + -x2*x3^4*x5^7*x7 + x2*x3^4*x5^5*x6*x7^2*x8*x9 + -x2*x3^4*x5^5*x6*x7^2*x8 + -x2*x3^4*x5^5*x6*x7^2*x9 + x2*x3^4*x5^5*x6*x7^2 + -x2*x3^4*x5^5*x6*x7*x8*x9^4 + x2*x3^4*x5^5*x6*x7*x8*x9^3 + -x2*x3^4*x5^5*x6*x7*x8*x9 + x2*x3^4*x5^5*x6*x7*x8 + x2*x3^4*x5^5*x6*x7*x9^4 + -x2*x3^4*x5^5*x6*x7*x9^3 + x2*x3^4*x5^5*x6*x7*x9 + -x2*x3^4*x5^5*x6*x7 + x2*x3^4*x5^5*x6*x8*x9^4 + -x2*x3^4*x5^5*x6*x8*x9^3 + -x2*x3^4*x5^5*x6*x9^4 + x2*x3^4*x5^5*x6*x9^3 + -x2*x3^4*x5^5*x7^2*x8*x9 + x2*x3^4*x5^5*x7^2*x8 + x2*x3^4*x5^5*x7^2*x9 + -x2*x3^4*x5^5*x7^2 + x2*x3^4*x5^5*x7*x8*x9^4 + -x2*x3^4*x5^5*x7*x8*x9^3 + x2*x3^4*x5^5*x7*x8*x9 + -x2*x3^4*x5^5*x7*x8 + -x2*x3^4*x5^5*x7*x9^4 + x2*x3^4*x5^5*x7*x9^3 + -x2*x3^4*x5^5*x7*x9 + x2*x3^4*x5^5*x7 + -x2*x3^4*x5^5*x8*x9^4 + x2*x3^4*x5^5*x8*x9^3 + x2*x3^4*x5^5*x9^4 + -x2*x3^4*x5^5*x9^3 + x2*x3^4*x5^4*x6*x7*x8*x9^4 + -x2*x3^4*x5^4*x6*x7*x8*x9^3 + -x2*x3^4*x5^4*x6*x7*x9^4 + x2*x3^4*x5^4*x6*x7*x9^3 + -x2*x3^4*x5^4*x6*x8*x9^4 + x2*x3^4*x5^4*x6*x8*x9^3 + x2*x3^4*x5^4*x6*x9^4 + -x2*x3^4*x5^4*x6*x9^3 + -x2*x3^4*x5^4*x7*x8*x9^4 + x2*x3^4*x5^4*x7*x8*x9^3 + x2*x3^4*x5^4*x7*x9^4 + -x2*x3^4*x5^4*x7*x9^3 + x2*x3^4*x5^4*x8*x9^4 + -x2*x3^4*x5^4*x8*x9^3 + -x2*x3^4*x5^4*x9^4 + x2*x3^4*x5^4*x9^3 + -x2*x3^4*x5^3*x6*x7*x8*x9^5 + x2*x3^4*x5^3*x6*x7*x8*x9^4 + x2*x3^4*x5^3*x6*x7*x9^5 + -x2*x3^4*x5^3*x6*x7*x9^4 + x2*x3^4*x5^3*x6*x8*x9^5 + -x2*x3^4*x5^3*x6*x8*x9^4 + -x2*x3^4*x5^3*x6*x9^5 + x2*x3^4*x5^3*x6*x9^4 + x2*x3^4*x5^3*x7*x8*x9^5 + -x2*x3^4*x5^3*x7*x8*x9^4 + -x2*x3^4*x5^3*x7*x9^5 + x2*x3^4*x5^3*x7*x9^4 + -x2*x3^4*x5^3*x8*x9^5 + x2*x3^4*x5^3*x8*x9^4 + x2*x3^4*x5^3*x9^5 + -x2*x3^4*x5^3*x9^4 + x2*x3^4*x5*x6*x7*x8*x9^5 + -x2*x3^4*x5*x6*x7*x8*x9^4 + -x2*x3^4*x5*x6*x7*x9^5 + x2*x3^4*x5*x6*x7*x9^4 + -x2*x3^4*x5*x6*x8*x9^5 + x2*x3^4*x5*x6*x8*x9^4 + x2*x3^4*x5*x6*x9^5 + -x2*x3^4*x5*x6*x9^4 + -x2*x3^4*x5*x7*x8*x9^5 + x2*x3^4*x5*x7*x8*x9^4 + x2*x3^4*x5*x7*x9^5 + -x2*x3^4*x5*x7*x9^4 + x2*x3^4*x5*x8*x9^5 + -x2*x3^4*x5*x8*x9^4 + -x2*x3^4*x5*x9^5 + x2*x3^4*x5*x9^4 + x2*x3^3*x4^4*x5*x6*x7*x8^2*x9 + -x2*x3^3*x4^4*x5*x6*x7*x8^2 + -x2*x3^3*x4^4*x5*x6*x7*x8*x9 + x2*x3^3*x4^4*x5*x6*x7*x8 + -x2*x3^3*x4^4*x5*x6*x8^2*x9 + x2*x3^3*x4^4*x5*x6*x8^2 + x2*x3^3*x4^4*x5*x6*x8*x9 + -x2*x3^3*x4^4*x5*x6*x8 + -x2*x3^3*x4^4*x5*x7*x8^2*x9 + x2*x3^3*x4^4*x5*x7*x8^2 + x2*x3^3*x4^4*x5*x7*x8*x9 + -x2*x3^3*x4^4*x5*x7*x8 + x2*x3^3*x4^4*x5*x8^2*x9 + -x2*x3^3*x4^4*x5*x8^2 + -x2*x3^3*x4^4*x5*x8*x9 + x2*x3^3*x4^4*x5*x8 + -x2*x3^3*x4^4*x6*x7*x8^2*x9 + x2*x3^3*x4^4*x6*x7*x8^2 + x2*x3^3*x4^4*x6*x7*x8*x9 + -x2*x3^3*x4^4*x6*x7*x8 + x2*x3^3*x4^4*x6*x8^2*x9 + -x2*x3^3*x4^4*x6*x8^2 + -x2*x3^3*x4^4*x6*x8*x9 + x2*x3^3*x4^4*x6*x8 + x2*x3^3*x4^4*x7*x8^2*x9 + -x2*x3^3*x4^4*x7*x8^2 + -x2*x3^3*x4^4*x7*x8*x9 + x2*x3^3*x4^4*x7*x8 + -x2*x3^3*x4^4*x8^2*x9 + x2*x3^3*x4^4*x8^2 + x2*x3^3*x4^4*x8*x9 + -x2*x3^3*x4^4*x8 + -x2*x3^3*x4^3*x5*x6*x7*x8^2*x9 + x2*x3^3*x4^3*x5*x6*x7*x8^2 + x2*x3^3*x4^3*x5*x6*x7*x8*x9 + -x2*x3^3*x4^3*x5*x6*x7*x8 + x2*x3^3*x4^3*x5*x6*x8^2*x9 + -x2*x3^3*x4^3*x5*x6*x8^2 + -x2*x3^3*x4^3*x5*x6*x8*x9 + x2*x3^3*x4^3*x5*x6*x8 + x2*x3^3*x4^3*x5*x7*x8^2*x9 + -x2*x3^3*x4^3*x5*x7*x8^2 + -x2*x3^3*x4^3*x5*x7*x8*x9 + x2*x3^3*x4^3*x5*x7*x8 + -x2*x3^3*x4^3*x5*x8^2*x9 + x2*x3^3*x4^3*x5*x8^2 + x2*x3^3*x4^3*x5*x8*x9 + -x2*x3^3*x4^3*x5*x8 + x2*x3^3*x4^3*x6*x7*x8^2*x9 + -x2*x3^3*x4^3*x6*x7*x8^2 + -x2*x3^3*x4^3*x6*x7*x8*x9 + x2*x3^3*x4^3*x6*x7*x8 + -x2*x3^3*x4^3*x6*x8^2*x9 + x2*x3^3*x4^3*x6*x8^2 + x2*x3^3*x4^3*x6*x8*x9 + -x2*x3^3*x4^3*x6*x8 + -x2*x3^3*x4^3*x7*x8^2*x9 + x2*x3^3*x4^3*x7*x8^2 + x2*x3^3*x4^3*x7*x8*x9 + -x2*x3^3*x4^3*x7*x8 + x2*x3^3*x4^3*x8^2*x9 + -x2*x3^3*x4^3*x8^2 + -x2*x3^3*x4^3*x8*x9 + x2*x3^3*x4^3*x8 + x2*x3^3*x4*x5^3*x6^2*x7*x8^2*x9^2 + -x2*x3^3*x4*x5^3*x6^2*x7*x8^2*x9 + -x2*x3^3*x4*x5^3*x6^2*x7*x8*x9^2 + x2*x3^3*x4*x5^3*x6^2*x7*x8*x9 + -x2*x3^3*x4*x5^3*x6^2*x8^2*x9^2 + x2*x3^3*x4*x5^3*x6^2*x8^2*x9 + x2*x3^3*x4*x5^3*x6^2*x8*x9^2 + -x2*x3^3*x4*x5^3*x6^2*x8*x9 + -x2*x3^3*x4*x5^3*x6*x7*x8^2*x9^2 + x2*x3^3*x4*x5^3*x6*x7*x8^2*x9 + x2*x3^3*x4*x5^3*x6*x7*x8*x9^2 + -x2*x3^3*x4*x5^3*x6*x7*x8*x9 + x2*x3^3*x4*x5^3*x6*x8^2*x9^2 + -x2*x3^3*x4*x5^3*x6*x8^2*x9 + -x2*x3^3*x4*x5^3*x6*x8*x9^2 + x2*x3^3*x4*x5^3*x6*x8*x9 + x2*x3^3*x4*x5^2*x6^3*x7^2*x8*x9^2 + -x2*x3^3*x4*x5^2*x6^3*x7^2*x8 + -x2*x3^3*x4*x5^2*x6^3*x7^2*x9^2 + x2*x3^3*x4*x5^2*x6^3*x7^2 + x2*x3^3*x4*x5^2*x6^3*x7*x8*x9^3 + -2*x2*x3^3*x4*x5^2*x6^3*x7*x8*x9^2 + x2*x3^3*x4*x5^2*x6^3*x7*x8 + -x2*x3^3*x4*x5^2*x6^3*x7*x9^3 + 2*x2*x3^3*x4*x5^2*x6^3*x7*x9^2 + -x2*x3^3*x4*x5^2*x6^3*x7 + -x2*x3^3*x4*x5^2*x6^3*x8*x9^3 + x2*x3^3*x4*x5^2*x6^3*x8*x9^2 + x2*x3^3*x4*x5^2*x6^3*x9^3 + -x2*x3^3*x4*x5^2*x6^3*x9^2 + -x2*x3^3*x4*x5^2*x6^2*x7^2*x8*x9^2 + x2*x3^3*x4*x5^2*x6^2*x7^2*x8 + x2*x3^3*x4*x5^2*x6^2*x7^2*x9^2 + -x2*x3^3*x4*x5^2*x6^2*x7^2 + -x2*x3^3*x4*x5^2*x6^2*x7*x8*x9^3 + 2*x2*x3^3*x4*x5^2*x6^2*x7*x8*x9^2 + -x2*x3^3*x4*x5^2*x6^2*x7*x8 + x2*x3^3*x4*x5^2*x6^2*x7*x9^3 + -2*x2*x3^3*x4*x5^2*x6^2*x7*x9^2 + x2*x3^3*x4*x5^2*x6^2*x7 + x2*x3^3*x4*x5^2*x6^2*x8*x9^3 + -x2*x3^3*x4*x5^2*x6^2*x8*x9^2 + -x2*x3^3*x4*x5^2*x6^2*x9^3 + x2*x3^3*x4*x5^2*x6^2*x9^2 + x2*x3^3*x4*x5^2*x6*x7^3*x8^2*x9 + -x2*x3^3*x4*x5^2*x6*x7^3*x8^2 + -x2*x3^3*x4*x5^2*x6*x7^3*x8*x9 + x2*x3^3*x4*x5^2*x6*x7^3*x8 + -x2*x3^3*x4*x5^2*x6*x7^2*x8^2*x9 + x2*x3^3*x4*x5^2*x6*x7^2*x8^2 + x2*x3^3*x4*x5^2*x6*x7^2*x8*x9 + -x2*x3^3*x4*x5^2*x6*x7^2*x8 + -x2*x3^3*x4*x5^2*x7^3*x8^2*x9 + x2*x3^3*x4*x5^2*x7^3*x8^2 + x2*x3^3*x4*x5^2*x7^3*x8*x9 + -x2*x3^3*x4*x5^2*x7^3*x8 + x2*x3^3*x4*x5^2*x7^2*x8^2*x9 + -x2*x3^3*x4*x5^2*x7^2*x8^2 + -x2*x3^3*x4*x5^2*x7^2*x8*x9 + x2*x3^3*x4*x5^2*x7^2*x8 + x2*x3^3*x4*x5*x6^3*x7^2*x8^2*x9 + -x2*x3^3*x4*x5*x6^3*x7^2*x8^2 + -x2*x3^3*x4*x5*x6^3*x7^2*x8*x9 + x2*x3^3*x4*x5*x6^3*x7^2*x8 + x2*x3^3*x4*x5*x6^3*x7*x8^2*x9^2 + -x2*x3^3*x4*x5*x6^3*x7*x8^2*x9 + -x2*x3^3*x4*x5*x6^3*x7*x8*x9^2 + x2*x3^3*x4*x5*x6^3*x7*x8*x9 + -x2*x3^3*x4*x5*x6^3*x8^2*x9^2 + x2*x3^3*x4*x5*x6^3*x8^2 + x2*x3^3*x4*x5*x6^3*x8*x9^2 + -x2*x3^3*x4*x5*x6^3*x8 + -x2*x3^3*x4*x5*x6^2*x7^2*x8^2*x9 + x2*x3^3*x4*x5*x6^2*x7^2*x8^2 + x2*x3^3*x4*x5*x6^2*x7^2*x8*x9 + -x2*x3^3*x4*x5*x6^2*x7^2*x8 + -x2*x3^3*x4*x5*x6^2*x7*x8^2*x9^2 + x2*x3^3*x4*x5*x6^2*x7*x8^2*x9 + x2*x3^3*x4*x5*x6^2*x7*x8*x9^2 + -x2*x3^3*x4*x5*x6^2*x7*x8*x9 + x2*x3^3*x4*x5*x6^2*x8^2*x9^2 + -x2*x3^3*x4*x5*x6^2*x8^2 + -x2*x3^3*x4*x5*x6^2*x8*x9^2 + x2*x3^3*x4*x5*x6^2*x8 + -x2*x3^3*x4*x6^3*x7^2*x8^2*x9 + x2*x3^3*x4*x6^3*x7^2*x8^2 + -x2*x3^3*x4*x6^3*x7^2*x8*x9^2 + x2*x3^3*x4*x6^3*x7^2*x8*x9 + x2*x3^3*x4*x6^3*x7^2*x9^2 + -x2*x3^3*x4*x6^3*x7^2 + -x2*x3^3*x4*x6^3*x7*x8^2*x9^2 + x2*x3^3*x4*x6^3*x7*x8^2*x9 + -x2*x3^3*x4*x6^3*x7*x8*x9^3 + 3*x2*x3^3*x4*x6^3*x7*x8*x9^2 + -x2*x3^3*x4*x6^3*x7*x8*x9 + -x2*x3^3*x4*x6^3*x7*x8 + x2*x3^3*x4*x6^3*x7*x9^3 + -2*x2*x3^3*x4*x6^3*x7*x9^2 + x2*x3^3*x4*x6^3*x7 + x2*x3^3*x4*x6^3*x8^2*x9^2 + -x2*x3^3*x4*x6^3*x8^2 + x2*x3^3*x4*x6^3*x8*x9^3 + -2*x2*x3^3*x4*x6^3*x8*x9^2 + x2*x3^3*x4*x6^3*x8 + -x2*x3^3*x4*x6^3*x9^3 + x2*x3^3*x4*x6^3*x9^2 + x2*x3^3*x4*x6^2*x7^2*x8^2*x9 + -x2*x3^3*x4*x6^2*x7^2*x8^2 + x2*x3^3*x4*x6^2*x7^2*x8*x9^2 + -x2*x3^3*x4*x6^2*x7^2*x8*x9 + -x2*x3^3*x4*x6^2*x7^2*x9^2 + x2*x3^3*x4*x6^2*x7^2 + x2*x3^3*x4*x6^2*x7*x8*x9^3 + -2*x2*x3^3*x4*x6^2*x7*x8*x9^2 + x2*x3^3*x4*x6^2*x7*x8 + -x2*x3^3*x4*x6^2*x7*x9^3 + 2*x2*x3^3*x4*x6^2*x7*x9^2 + -x2*x3^3*x4*x6^2*x7 + -x2*x3^3*x4*x6^2*x8^2*x9 + x2*x3^3*x4*x6^2*x8^2 + -x2*x3^3*x4*x6^2*x8*x9^3 + x2*x3^3*x4*x6^2*x8*x9^2 + x2*x3^3*x4*x6^2*x8*x9 + -x2*x3^3*x4*x6^2*x8 + x2*x3^3*x4*x6^2*x9^3 + -x2*x3^3*x4*x6^2*x9^2 + -x2*x3^3*x4*x6*x7^3*x8^2*x9 + x2*x3^3*x4*x6*x7^3*x8^2 + x2*x3^3*x4*x6*x7^3*x8*x9 + -x2*x3^3*x4*x6*x7^3*x8 + x2*x3^3*x4*x6*x7^2*x8^2*x9 + -x2*x3^3*x4*x6*x7^2*x8^2 + -x2*x3^3*x4*x6*x7^2*x8*x9 + x2*x3^3*x4*x6*x7^2*x8 + x2*x3^3*x4*x6*x7*x8^2*x9^2 + -x2*x3^3*x4*x6*x7*x8^2*x9 + -x2*x3^3*x4*x6*x7*x8*x9^2 + x2*x3^3*x4*x6*x7*x8*x9 + -x2*x3^3*x4*x6*x8^2*x9^2 + x2*x3^3*x4*x6*x8^2*x9 + x2*x3^3*x4*x6*x8*x9^2 + -x2*x3^3*x4*x6*x8*x9 + x2*x3^3*x4*x7^3*x8^2*x9 + -x2*x3^3*x4*x7^3*x8^2 + -x2*x3^3*x4*x7^3*x8*x9 + x2*x3^3*x4*x7^3*x8 + -x2*x3^3*x4*x7^2*x8^2*x9 + x2*x3^3*x4*x7^2*x8^2 + x2*x3^3*x4*x7^2*x8*x9 + -x2*x3^3*x4*x7^2*x8 + -x2*x3^3*x5^3*x6^2*x7*x8^2*x9^2 + x2*x3^3*x5^3*x6^2*x7*x8^2*x9 + x2*x3^3*x5^3*x6^2*x7*x8*x9^2 + -x2*x3^3*x5^3*x6^2*x7*x8*x9 + x2*x3^3*x5^3*x6^2*x8^2*x9^2 + -x2*x3^3*x5^3*x6^2*x8^2*x9 + -x2*x3^3*x5^3*x6^2*x8*x9^2 + x2*x3^3*x5^3*x6^2*x8*x9 + x2*x3^3*x5^3*x6*x7*x8^2*x9^2 + -x2*x3^3*x5^3*x6*x7*x8^2*x9 + -x2*x3^3*x5^3*x6*x7*x8*x9^2 + x2*x3^3*x5^3*x6*x7*x8*x9 + -x2*x3^3*x5^3*x6*x8^2*x9^2 + x2*x3^3*x5^3*x6*x8^2*x9 + x2*x3^3*x5^3*x6*x8*x9^2 + -x2*x3^3*x5^3*x6*x8*x9 + -x2*x3^3*x5^2*x6^3*x7^2*x8*x9^2 + x2*x3^3*x5^2*x6^3*x7^2*x8 + x2*x3^3*x5^2*x6^3*x7^2*x9^2 + -x2*x3^3*x5^2*x6^3*x7^2 + -x2*x3^3*x5^2*x6^3*x7*x8*x9^3 + 2*x2*x3^3*x5^2*x6^3*x7*x8*x9^2 + -x2*x3^3*x5^2*x6^3*x7*x8 + x2*x3^3*x5^2*x6^3*x7*x9^3 + -2*x2*x3^3*x5^2*x6^3*x7*x9^2 + x2*x3^3*x5^2*x6^3*x7 + x2*x3^3*x5^2*x6^3*x8*x9^3 + -x2*x3^3*x5^2*x6^3*x8*x9^2 + -x2*x3^3*x5^2*x6^3*x9^3 + x2*x3^3*x5^2*x6^3*x9^2 + x2*x3^3*x5^2*x6^2*x7^2*x8*x9^2 + -x2*x3^3*x5^2*x6^2*x7^2*x8 + -x2*x3^3*x5^2*x6^2*x7^2*x9^2 + x2*x3^3*x5^2*x6^2*x7^2 + x2*x3^3*x5^2*x6^2*x7*x8*x9^3 + -2*x2*x3^3*x5^2*x6^2*x7*x8*x9^2 + x2*x3^3*x5^2*x6^2*x7*x8 + -x2*x3^3*x5^2*x6^2*x7*x9^3 + 2*x2*x3^3*x5^2*x6^2*x7*x9^2 + -x2*x3^3*x5^2*x6^2*x7 + -x2*x3^3*x5^2*x6^2*x8*x9^3 + x2*x3^3*x5^2*x6^2*x8*x9^2 + x2*x3^3*x5^2*x6^2*x9^3 + -x2*x3^3*x5^2*x6^2*x9^2 + -x2*x3^3*x5^2*x6*x7^3*x8^2*x9 + x2*x3^3*x5^2*x6*x7^3*x8^2 + x2*x3^3*x5^2*x6*x7^3*x8*x9 + -x2*x3^3*x5^2*x6*x7^3*x8 + x2*x3^3*x5^2*x6*x7^2*x8^2*x9 + -x2*x3^3*x5^2*x6*x7^2*x8^2 + -x2*x3^3*x5^2*x6*x7^2*x8*x9 + x2*x3^3*x5^2*x6*x7^2*x8 + x2*x3^3*x5^2*x7^3*x8^2*x9 + -x2*x3^3*x5^2*x7^3*x8^2 + -x2*x3^3*x5^2*x7^3*x8*x9 + x2*x3^3*x5^2*x7^3*x8 + -x2*x3^3*x5^2*x7^2*x8^2*x9 + x2*x3^3*x5^2*x7^2*x8^2 + x2*x3^3*x5^2*x7^2*x8*x9 + -x2*x3^3*x5^2*x7^2*x8 + -x2*x3^3*x5*x6^3*x7^2*x8^2*x9 + x2*x3^3*x5*x6^3*x7^2*x8^2 + x2*x3^3*x5*x6^3*x7^2*x8*x9 + -x2*x3^3*x5*x6^3*x7^2*x8 + -x2*x3^3*x5*x6^3*x7*x8^2*x9^2 + x2*x3^3*x5*x6^3*x7*x8^2*x9 + x2*x3^3*x5*x6^3*x7*x8*x9^2 + -x2*x3^3*x5*x6^3*x7*x8*x9 + x2*x3^3*x5*x6^3*x8^2*x9^2 + -x2*x3^3*x5*x6^3*x8^2 + -x2*x3^3*x5*x6^3*x8*x9^2 + x2*x3^3*x5*x6^3*x8 + x2*x3^3*x5*x6^2*x7^2*x8^2*x9 + -x2*x3^3*x5*x6^2*x7^2*x8^2 + -x2*x3^3*x5*x6^2*x7^2*x8*x9 + x2*x3^3*x5*x6^2*x7^2*x8 + x2*x3^3*x5*x6^2*x7*x8^2*x9^2 + -x2*x3^3*x5*x6^2*x7*x8^2*x9 + -x2*x3^3*x5*x6^2*x7*x8*x9^2 + x2*x3^3*x5*x6^2*x7*x8*x9 + -x2*x3^3*x5*x6^2*x8^2*x9^2 + x2*x3^3*x5*x6^2*x8^2 + x2*x3^3*x5*x6^2*x8*x9^2 + -x2*x3^3*x5*x6^2*x8 + x2*x3^3*x6^3*x7^2*x8^2*x9 + -x2*x3^3*x6^3*x7^2*x8^2 + x2*x3^3*x6^3*x7^2*x8*x9^2 + -x2*x3^3*x6^3*x7^2*x8*x9 + -x2*x3^3*x6^3*x7^2*x9^2 + x2*x3^3*x6^3*x7^2 + x2*x3^3*x6^3*x7*x8^2*x9^2 + -x2*x3^3*x6^3*x7*x8^2*x9 + x2*x3^3*x6^3*x7*x8*x9^3 + -3*x2*x3^3*x6^3*x7*x8*x9^2 + x2*x3^3*x6^3*x7*x8*x9 + x2*x3^3*x6^3*x7*x8 + -x2*x3^3*x6^3*x7*x9^3 + 2*x2*x3^3*x6^3*x7*x9^2 + -x2*x3^3*x6^3*x7 + -x2*x3^3*x6^3*x8^2*x9^2 + x2*x3^3*x6^3*x8^2 + -x2*x3^3*x6^3*x8*x9^3 + 2*x2*x3^3*x6^3*x8*x9^2 + -x2*x3^3*x6^3*x8 + x2*x3^3*x6^3*x9^3 + -x2*x3^3*x6^3*x9^2 + -x2*x3^3*x6^2*x7^2*x8^2*x9 + x2*x3^3*x6^2*x7^2*x8^2 + -x2*x3^3*x6^2*x7^2*x8*x9^2 + x2*x3^3*x6^2*x7^2*x8*x9 + x2*x3^3*x6^2*x7^2*x9^2 + -x2*x3^3*x6^2*x7^2 + -x2*x3^3*x6^2*x7*x8*x9^3 + 2*x2*x3^3*x6^2*x7*x8*x9^2 + -x2*x3^3*x6^2*x7*x8 + x2*x3^3*x6^2*x7*x9^3 + -2*x2*x3^3*x6^2*x7*x9^2 + x2*x3^3*x6^2*x7 + x2*x3^3*x6^2*x8^2*x9 + -x2*x3^3*x6^2*x8^2 + x2*x3^3*x6^2*x8*x9^3 + -x2*x3^3*x6^2*x8*x9^2 + -x2*x3^3*x6^2*x8*x9 + x2*x3^3*x6^2*x8 + -x2*x3^3*x6^2*x9^3 + x2*x3^3*x6^2*x9^2 + x2*x3^3*x6*x7^3*x8^2*x9 + -x2*x3^3*x6*x7^3*x8^2 + -x2*x3^3*x6*x7^3*x8*x9 + x2*x3^3*x6*x7^3*x8 + -x2*x3^3*x6*x7^2*x8^2*x9 + x2*x3^3*x6*x7^2*x8^2 + x2*x3^3*x6*x7^2*x8*x9 + -x2*x3^3*x6*x7^2*x8 + -x2*x3^3*x6*x7*x8^2*x9^2 + x2*x3^3*x6*x7*x8^2*x9 + x2*x3^3*x6*x7*x8*x9^2 + -x2*x3^3*x6*x7*x8*x9 + x2*x3^3*x6*x8^2*x9^2 + -x2*x3^3*x6*x8^2*x9 + -x2*x3^3*x6*x8*x9^2 + x2*x3^3*x6*x8*x9 + -x2*x3^3*x7^3*x8^2*x9 + x2*x3^3*x7^3*x8^2 + x2*x3^3*x7^3*x8*x9 + -x2*x3^3*x7^3*x8 + x2*x3^3*x7^2*x8^2*x9 + -x2*x3^3*x7^2*x8^2 + -x2*x3^3*x7^2*x8*x9 + x2*x3^3*x7^2*x8 + x2*x3^2*x4^7*x5*x6^2*x7*x8^2*x9 + -x2*x3^2*x4^7*x5*x6^2*x7*x8^2 + -x2*x3^2*x4^7*x5*x6^2*x7*x8*x9 + x2*x3^2*x4^7*x5*x6^2*x7*x8 + -x2*x3^2*x4^7*x5*x6^2*x8^2*x9 + x2*x3^2*x4^7*x5*x6^2*x8^2 + x2*x3^2*x4^7*x5*x6^2*x8*x9 + -x2*x3^2*x4^7*x5*x6^2*x8 + -x2*x3^2*x4^7*x5*x7*x8^2*x9 + x2*x3^2*x4^7*x5*x7*x8^2 + x2*x3^2*x4^7*x5*x7*x8*x9 + -x2*x3^2*x4^7*x5*x7*x8 + x2*x3^2*x4^7*x5*x8^2*x9 + -x2*x3^2*x4^7*x5*x8^2 + -x2*x3^2*x4^7*x5*x8*x9 + x2*x3^2*x4^7*x5*x8 + -x2*x3^2*x4^7*x6^2*x7*x8^2*x9 + x2*x3^2*x4^7*x6^2*x7*x8^2 + x2*x3^2*x4^7*x6^2*x7*x8*x9 + -x2*x3^2*x4^7*x6^2*x7*x8 + x2*x3^2*x4^7*x6^2*x8^2*x9 + -x2*x3^2*x4^7*x6^2*x8^2 + -x2*x3^2*x4^7*x6^2*x8*x9 + x2*x3^2*x4^7*x6^2*x8 + x2*x3^2*x4^7*x7*x8^2*x9 + -x2*x3^2*x4^7*x7*x8^2 + -x2*x3^2*x4^7*x7*x8*x9 + x2*x3^2*x4^7*x7*x8 + -x2*x3^2*x4^7*x8^2*x9 + x2*x3^2*x4^7*x8^2 + x2*x3^2*x4^7*x8*x9 + -x2*x3^2*x4^7*x8 + -x2*x3^2*x4^4*x5*x6*x7*x8^2*x9 + x2*x3^2*x4^4*x5*x6*x7*x8^2 + x2*x3^2*x4^4*x5*x6*x7*x8*x9 + -x2*x3^2*x4^4*x5*x6*x7*x8 + x2*x3^2*x4^4*x5*x6*x8^2*x9 + -x2*x3^2*x4^4*x5*x6*x8^2 + -x2*x3^2*x4^4*x5*x6*x8*x9 + x2*x3^2*x4^4*x5*x6*x8 + x2*x3^2*x4^4*x5*x7*x8^2*x9 + -x2*x3^2*x4^4*x5*x7*x8^2 + -x2*x3^2*x4^4*x5*x7*x8*x9 + x2*x3^2*x4^4*x5*x7*x8 + -x2*x3^2*x4^4*x5*x8^2*x9 + x2*x3^2*x4^4*x5*x8^2 + x2*x3^2*x4^4*x5*x8*x9 + -x2*x3^2*x4^4*x5*x8 + x2*x3^2*x4^4*x6*x7*x8^2*x9 + -x2*x3^2*x4^4*x6*x7*x8^2 + -x2*x3^2*x4^4*x6*x7*x8*x9 + x2*x3^2*x4^4*x6*x7*x8 + -x2*x3^2*x4^4*x6*x8^2*x9 + x2*x3^2*x4^4*x6*x8^2 + x2*x3^2*x4^4*x6*x8*x9 + -x2*x3^2*x4^4*x6*x8 + -x2*x3^2*x4^4*x7*x8^2*x9 + x2*x3^2*x4^4*x7*x8^2 + x2*x3^2*x4^4*x7*x8*x9 + -x2*x3^2*x4^4*x7*x8 + x2*x3^2*x4^4*x8^2*x9 + -x2*x3^2*x4^4*x8^2 + -x2*x3^2*x4^4*x8*x9 + x2*x3^2*x4^4*x8 + x2*x3^2*x4^3*x5^3*x6^2*x7*x8*x9 + -x2*x3^2*x4^3*x5^3*x6^2*x7*x8 + -x2*x3^2*x4^3*x5^3*x6^2*x7*x9 + x2*x3^2*x4^3*x5^3*x6^2*x7 + -x2*x3^2*x4^3*x5^3*x6^2*x8*x9 + x2*x3^2*x4^3*x5^3*x6^2*x8 + x2*x3^2*x4^3*x5^3*x6^2*x9 + -x2*x3^2*x4^3*x5^3*x6^2 + -x2*x3^2*x4^3*x5^3*x6*x7*x8*x9 + x2*x3^2*x4^3*x5^3*x6*x7*x8 + x2*x3^2*x4^3*x5^3*x6*x7*x9 + -x2*x3^2*x4^3*x5^3*x6*x7 + x2*x3^2*x4^3*x5^3*x6*x8*x9 + -x2*x3^2*x4^3*x5^3*x6*x8 + -x2*x3^2*x4^3*x5^3*x6*x9 + x2*x3^2*x4^3*x5^3*x6 + -x2*x3^2*x4^3*x5^2*x6^2*x7*x8*x9 + x2*x3^2*x4^3*x5^2*x6^2*x7*x8 + x2*x3^2*x4^3*x5^2*x6^2*x7*x9 + -x2*x3^2*x4^3*x5^2*x6^2*x7 + x2*x3^2*x4^3*x5^2*x6^2*x8*x9 + -x2*x3^2*x4^3*x5^2*x6^2*x8 + -x2*x3^2*x4^3*x5^2*x6^2*x9 + x2*x3^2*x4^3*x5^2*x6^2 + x2*x3^2*x4^3*x5^2*x6*x7*x8*x9 + -x2*x3^2*x4^3*x5^2*x6*x7*x8 + -x2*x3^2*x4^3*x5^2*x6*x7*x9 + x2*x3^2*x4^3*x5^2*x6*x7 + -x2*x3^2*x4^3*x5^2*x6*x8*x9 + x2*x3^2*x4^3*x5^2*x6*x8 + x2*x3^2*x4^3*x5^2*x6*x9 + -x2*x3^2*x4^3*x5^2*x6 + x2*x3^2*x4^3*x5*x6^3*x7*x8^2*x9 + -x2*x3^2*x4^3*x5*x6^3*x7*x8^2 + -x2*x3^2*x4^3*x5*x6^3*x7*x8*x9 + x2*x3^2*x4^3*x5*x6^3*x7*x8 + -x2*x3^2*x4^3*x5*x6^3*x8^2*x9 + x2*x3^2*x4^3*x5*x6^3*x8^2 + x2*x3^2*x4^3*x5*x6^3*x8*x9 + -x2*x3^2*x4^3*x5*x6^3*x8 + -x2*x3^2*x4^3*x5*x6^2*x7*x8^2*x9 + x2*x3^2*x4^3*x5*x6^2*x7*x8^2 + x2*x3^2*x4^3*x5*x6^2*x7*x8*x9 + -x2*x3^2*x4^3*x5*x6^2*x7*x8 + x2*x3^2*x4^3*x5*x6^2*x8^2*x9 + -x2*x3^2*x4^3*x5*x6^2*x8^2 + -x2*x3^2*x4^3*x5*x6^2*x8*x9 + x2*x3^2*x4^3*x5*x6^2*x8 + -x2*x3^2*x4^3*x6^3*x7*x8^2*x9 + x2*x3^2*x4^3*x6^3*x7*x8^2 + x2*x3^2*x4^3*x6^3*x7*x8*x9 + -x2*x3^2*x4^3*x6^3*x7*x8 + x2*x3^2*x4^3*x6^3*x8^2*x9 + -x2*x3^2*x4^3*x6^3*x8^2 + -x2*x3^2*x4^3*x6^3*x8*x9 + x2*x3^2*x4^3*x6^3*x8 + x2*x3^2*x4^3*x6^2*x7*x8^2*x9 + -x2*x3^2*x4^3*x6^2*x7*x8^2 + -x2*x3^2*x4^3*x6^2*x7*x8*x9 + x2*x3^2*x4^3*x6^2*x7*x8 + -x2*x3^2*x4^3*x6^2*x8^2*x9 + x2*x3^2*x4^3*x6^2*x8^2 + x2*x3^2*x4^3*x6^2*x8*x9 + -x2*x3^2*x4^3*x6^2*x8 + x2*x3^2*x4^2*x5^5*x6^2*x7*x8*x9 + -x2*x3^2*x4^2*x5^5*x6^2*x7*x8 + -x2*x3^2*x4^2*x5^5*x6^2*x7*x9 + x2*x3^2*x4^2*x5^5*x6^2*x7 + -x2*x3^2*x4^2*x5^5*x6^2*x8*x9 + x2*x3^2*x4^2*x5^5*x6^2*x8 + x2*x3^2*x4^2*x5^5*x6^2*x9 + -x2*x3^2*x4^2*x5^5*x6^2 + x2*x3^2*x4^2*x5^5*x6*x7^2*x8*x9 + -x2*x3^2*x4^2*x5^5*x6*x7^2*x8 + -x2*x3^2*x4^2*x5^5*x6*x7^2*x9 + x2*x3^2*x4^2*x5^5*x6*x7^2 + -2*x2*x3^2*x4^2*x5^5*x6*x7*x8*x9 + 2*x2*x3^2*x4^2*x5^5*x6*x7*x8 + 2*x2*x3^2*x4^2*x5^5*x6*x7*x9 + -2*x2*x3^2*x4^2*x5^5*x6*x7 + x2*x3^2*x4^2*x5^5*x6*x8*x9 + -x2*x3^2*x4^2*x5^5*x6*x8 + -x2*x3^2*x4^2*x5^5*x6*x9 + x2*x3^2*x4^2*x5^5*x6 + -x2*x3^2*x4^2*x5^5*x7^2*x8*x9 + x2*x3^2*x4^2*x5^5*x7^2*x8 + x2*x3^2*x4^2*x5^5*x7^2*x9 + -x2*x3^2*x4^2*x5^5*x7^2 + x2*x3^2*x4^2*x5^5*x7*x8*x9 + -x2*x3^2*x4^2*x5^5*x7*x8 + -x2*x3^2*x4^2*x5^5*x7*x9 + x2*x3^2*x4^2*x5^5*x7 + x2*x3^2*x4^2*x5^3*x6^2*x7*x8^2*x9 + -x2*x3^2*x4^2*x5^3*x6^2*x7*x8^2 + -3*x2*x3^2*x4^2*x5^3*x6^2*x7*x8*x9 + 3*x2*x3^2*x4^2*x5^3*x6^2*x7*x8 + 2*x2*x3^2*x4^2*x5^3*x6^2*x7*x9 + -2*x2*x3^2*x4^2*x5^3*x6^2*x7 + -x2*x3^2*x4^2*x5^3*x6^2*x8^2*x9 + x2*x3^2*x4^2*x5^3*x6^2*x8^2 + 3*x2*x3^2*x4^2*x5^3*x6^2*x8*x9 + -3*x2*x3^2*x4^2*x5^3*x6^2*x8 + -2*x2*x3^2*x4^2*x5^3*x6^2*x9 + 2*x2*x3^2*x4^2*x5^3*x6^2 + x2*x3^2*x4^2*x5^3*x6*x7^2*x8^2*x9 + -x2*x3^2*x4^2*x5^3*x6*x7^2*x8^2 + -x2*x3^2*x4^2*x5^3*x6*x7^2*x8*x9 + x2*x3^2*x4^2*x5^3*x6*x7^2*x8 + -2*x2*x3^2*x4^2*x5^3*x6*x7*x8^2*x9 + 2*x2*x3^2*x4^2*x5^3*x6*x7*x8^2 + 4*x2*x3^2*x4^2*x5^3*x6*x7*x8*x9 + -4*x2*x3^2*x4^2*x5^3*x6*x7*x8 + -2*x2*x3^2*x4^2*x5^3*x6*x7*x9 + 2*x2*x3^2*x4^2*x5^3*x6*x7 + x2*x3^2*x4^2*x5^3*x6*x8^2*x9 + -x2*x3^2*x4^2*x5^3*x6*x8^2 + -3*x2*x3^2*x4^2*x5^3*x6*x8*x9 + 3*x2*x3^2*x4^2*x5^3*x6*x8 + 2*x2*x3^2*x4^2*x5^3*x6*x9 + -2*x2*x3^2*x4^2*x5^3*x6 + -x2*x3^2*x4^2*x5^3*x7^2*x8^2*x9 + x2*x3^2*x4^2*x5^3*x7^2*x8^2 + x2*x3^2*x4^2*x5^3*x7^2*x8*x9 + -x2*x3^2*x4^2*x5^3*x7^2*x8 + x2*x3^2*x4^2*x5^3*x7*x8^2*x9 + -x2*x3^2*x4^2*x5^3*x7*x8^2 + -x2*x3^2*x4^2*x5^3*x7*x8*x9 + x2*x3^2*x4^2*x5^3*x7*x8 + x2*x3^2*x4^2*x5^2*x6^3*x7^2*x8*x9 + -x2*x3^2*x4^2*x5^2*x6^3*x7^2*x8 + -x2*x3^2*x4^2*x5^2*x6^3*x7^2*x9 + x2*x3^2*x4^2*x5^2*x6^3*x7^2 + -x2*x3^2*x4^2*x5^2*x6^3*x7*x8*x9 + x2*x3^2*x4^2*x5^2*x6^3*x7*x8 + x2*x3^2*x4^2*x5^2*x6^3*x7*x9 + -x2*x3^2*x4^2*x5^2*x6^3*x7 + x2*x3^2*x4^2*x5^2*x6^2*x7^2*x8^2*x9 + -x2*x3^2*x4^2*x5^2*x6^2*x7^2*x8^2 + -x2*x3^2*x4^2*x5^2*x6^2*x7^2*x8*x9 + x2*x3^2*x4^2*x5^2*x6^2*x7^2*x8 + -x2*x3^2*x4^2*x5^2*x6^2*x7*x8^2*x9 + x2*x3^2*x4^2*x5^2*x6^2*x7*x8^2 + 2*x2*x3^2*x4^2*x5^2*x6^2*x7*x8*x9 + -2*x2*x3^2*x4^2*x5^2*x6^2*x7*x8 + -x2*x3^2*x4^2*x5^2*x6^2*x7*x9 + x2*x3^2*x4^2*x5^2*x6^2*x7 + -x2*x3^2*x4^2*x5^2*x6^2*x8*x9 + x2*x3^2*x4^2*x5^2*x6^2*x8 + x2*x3^2*x4^2*x5^2*x6^2*x9 + -x2*x3^2*x4^2*x5^2*x6^2 + x2*x3^2*x4^2*x5^2*x6*x7^3*x8^2*x9 + -x2*x3^2*x4^2*x5^2*x6*x7^3*x8^2 + -x2*x3^2*x4^2*x5^2*x6*x7^3*x9 + x2*x3^2*x4^2*x5^2*x6*x7^3 + -2*x2*x3^2*x4^2*x5^2*x6*x7^2*x8^2*x9 + 2*x2*x3^2*x4^2*x5^2*x6*x7^2*x8^2 + -x2*x3^2*x4^2*x5^2*x6*x7^2*x8*x9 + x2*x3^2*x4^2*x5^2*x6*x7^2*x8 + 3*x2*x3^2*x4^2*x5^2*x6*x7^2*x9 + -3*x2*x3^2*x4^2*x5^2*x6*x7^2 + x2*x3^2*x4^2*x5^2*x6*x7*x8^2*x9 + -x2*x3^2*x4^2*x5^2*x6*x7*x8^2 + -x2*x3^2*x4^2*x5^2*x6*x7*x9 + x2*x3^2*x4^2*x5^2*x6*x7 + x2*x3^2*x4^2*x5^2*x6*x8*x9 + -x2*x3^2*x4^2*x5^2*x6*x8 + -x2*x3^2*x4^2*x5^2*x6*x9 + x2*x3^2*x4^2*x5^2*x6 + -x2*x3^2*x4^2*x5^2*x7^3*x8^2*x9 + x2*x3^2*x4^2*x5^2*x7^3*x8^2 + x2*x3^2*x4^2*x5^2*x7^3*x9 + -x2*x3^2*x4^2*x5^2*x7^3 + x2*x3^2*x4^2*x5^2*x7^2*x8^2*x9 + -x2*x3^2*x4^2*x5^2*x7^2*x8^2 + x2*x3^2*x4^2*x5^2*x7^2*x8*x9 + -x2*x3^2*x4^2*x5^2*x7^2*x8 + -2*x2*x3^2*x4^2*x5^2*x7^2*x9 + 2*x2*x3^2*x4^2*x5^2*x7^2 + -x2*x3^2*x4^2*x5^2*x7*x8*x9 + x2*x3^2*x4^2*x5^2*x7*x8 + x2*x3^2*x4^2*x5^2*x7*x9 + -x2*x3^2*x4^2*x5^2*x7 + x2*x3^2*x4^2*x5*x6^3*x7^2*x8^2*x9 + -x2*x3^2*x4^2*x5*x6^3*x7^2*x8^2 + -x2*x3^2*x4^2*x5*x6^3*x7^2*x8*x9 + x2*x3^2*x4^2*x5*x6^3*x7^2*x8 + x2*x3^2*x4^2*x5*x6^3*x7*x8^2*x9^2 + -2*x2*x3^2*x4^2*x5*x6^3*x7*x8^2*x9 + x2*x3^2*x4^2*x5*x6^3*x7*x8^2 + x2*x3^2*x4^2*x5*x6^3*x7*x8*x9^3 + -2*x2*x3^2*x4^2*x5*x6^3*x7*x8*x9^2 + 2*x2*x3^2*x4^2*x5*x6^3*x7*x8*x9 + -x2*x3^2*x4^2*x5*x6^3*x7*x8 + -x2*x3^2*x4^2*x5*x6^3*x7*x9^3 + x2*x3^2*x4^2*x5*x6^3*x7*x9^2 + -x2*x3^2*x4^2*x5*x6^3*x8^2*x9^2 + x2*x3^2*x4^2*x5*x6^3*x8^2*x9 + -x2*x3^2*x4^2*x5*x6^3*x8*x9^3 + 2*x2*x3^2*x4^2*x5*x6^3*x8*x9^2 + -x2*x3^2*x4^2*x5*x6^3*x8*x9 + x2*x3^2*x4^2*x5*x6^3*x9^3 + -x2*x3^2*x4^2*x5*x6^3*x9^2 + -x2*x3^2*x4^2*x5*x6^2*x7^2*x8^2*x9 + x2*x3^2*x4^2*x5*x6^2*x7^2*x8^2 + x2*x3^2*x4^2*x5*x6^2*x7^2*x8*x9 + -x2*x3^2*x4^2*x5*x6^2*x7^2*x8 + x2*x3^2*x4^2*x5*x6^2*x8^2*x9 + -x2*x3^2*x4^2*x5*x6^2*x8^2 + -x2*x3^2*x4^2*x5*x6^2*x8*x9 + x2*x3^2*x4^2*x5*x6^2*x8 + x2*x3^2*x4^2*x5*x6*x7^4*x8*x9 + -x2*x3^2*x4^2*x5*x6*x7^4*x8 + -x2*x3^2*x4^2*x5*x6*x7^4*x9 + x2*x3^2*x4^2*x5*x6*x7^4 + -x2*x3^2*x4^2*x5*x6*x7^3*x8*x9 + x2*x3^2*x4^2*x5*x6*x7^3*x8 + x2*x3^2*x4^2*x5*x6*x7^3*x9 + -x2*x3^2*x4^2*x5*x6*x7^3 + -x2*x3^2*x4^2*x5*x6*x7*x8^2*x9^2 + 2*x2*x3^2*x4^2*x5*x6*x7*x8^2*x9 + -x2*x3^2*x4^2*x5*x6*x7*x8^2 + -x2*x3^2*x4^2*x5*x6*x7*x8*x9^3 + 2*x2*x3^2*x4^2*x5*x6*x7*x8*x9^2 + -2*x2*x3^2*x4^2*x5*x6*x7*x8*x9 + x2*x3^2*x4^2*x5*x6*x7*x8 + x2*x3^2*x4^2*x5*x6*x7*x9^3 + -x2*x3^2*x4^2*x5*x6*x7*x9^2 + x2*x3^2*x4^2*x5*x6*x8^2*x9^2 + -2*x2*x3^2*x4^2*x5*x6*x8^2*x9 + x2*x3^2*x4^2*x5*x6*x8^2 + x2*x3^2*x4^2*x5*x6*x8*x9^3 + -2*x2*x3^2*x4^2*x5*x6*x8*x9^2 + 2*x2*x3^2*x4^2*x5*x6*x8*x9 + -x2*x3^2*x4^2*x5*x6*x8 + -x2*x3^2*x4^2*x5*x6*x9^3 + x2*x3^2*x4^2*x5*x6*x9^2 + -x2*x3^2*x4^2*x5*x7^4*x8*x9 + x2*x3^2*x4^2*x5*x7^4*x8 + x2*x3^2*x4^2*x5*x7^4*x9 + -x2*x3^2*x4^2*x5*x7^4 + x2*x3^2*x4^2*x5*x7^3*x8*x9 + -x2*x3^2*x4^2*x5*x7^3*x8 + -x2*x3^2*x4^2*x5*x7^3*x9 + x2*x3^2*x4^2*x5*x7^3 + -x2*x3^2*x4^2*x6^3*x7^2*x8^2*x9 + x2*x3^2*x4^2*x6^3*x7^2*x8^2 + x2*x3^2*x4^2*x6^3*x7^2*x9 + -x2*x3^2*x4^2*x6^3*x7^2 + -x2*x3^2*x4^2*x6^3*x7*x8^2*x9^2 + 2*x2*x3^2*x4^2*x6^3*x7*x8^2*x9 + -x2*x3^2*x4^2*x6^3*x7*x8^2 + -x2*x3^2*x4^2*x6^3*x7*x8*x9^3 + 2*x2*x3^2*x4^2*x6^3*x7*x8*x9^2 + -x2*x3^2*x4^2*x6^3*x7*x8*x9 + x2*x3^2*x4^2*x6^3*x7*x9^3 + -x2*x3^2*x4^2*x6^3*x7*x9^2 + -x2*x3^2*x4^2*x6^3*x7*x9 + x2*x3^2*x4^2*x6^3*x7 + x2*x3^2*x4^2*x6^3*x8^2*x9^2 + -x2*x3^2*x4^2*x6^3*x8^2*x9 + x2*x3^2*x4^2*x6^3*x8*x9^3 + -2*x2*x3^2*x4^2*x6^3*x8*x9^2 + x2*x3^2*x4^2*x6^3*x8*x9 + -x2*x3^2*x4^2*x6^3*x9^3 + x2*x3^2*x4^2*x6^3*x9^2 + -x2*x3^2*x4^2*x6*x7^4*x8*x9 + x2*x3^2*x4^2*x6*x7^4*x8 + x2*x3^2*x4^2*x6*x7^4*x9 + -x2*x3^2*x4^2*x6*x7^4 + -x2*x3^2*x4^2*x6*x7^3*x8^2*x9 + x2*x3^2*x4^2*x6*x7^3*x8^2 + x2*x3^2*x4^2*x6*x7^3*x8*x9 + -x2*x3^2*x4^2*x6*x7^3*x8 + x2*x3^2*x4^2*x6*x7^2*x8^2*x9 + -x2*x3^2*x4^2*x6*x7^2*x8^2 + x2*x3^2*x4^2*x6*x7^2*x8*x9 + -x2*x3^2*x4^2*x6*x7^2*x8 + -2*x2*x3^2*x4^2*x6*x7^2*x9 + 2*x2*x3^2*x4^2*x6*x7^2 + x2*x3^2*x4^2*x6*x7*x8^2*x9^2 + -x2*x3^2*x4^2*x6*x7*x8^2*x9 + x2*x3^2*x4^2*x6*x7*x8*x9^3 + -2*x2*x3^2*x4^2*x6*x7*x8*x9^2 + x2*x3^2*x4^2*x6*x7*x8 + -x2*x3^2*x4^2*x6*x7*x9^3 + x2*x3^2*x4^2*x6*x7*x9^2 + x2*x3^2*x4^2*x6*x7*x9 + -x2*x3^2*x4^2*x6*x7 + -x2*x3^2*x4^2*x6*x8^2*x9^2 + x2*x3^2*x4^2*x6*x8^2*x9 + -x2*x3^2*x4^2*x6*x8*x9^3 + 2*x2*x3^2*x4^2*x6*x8*x9^2 + -x2*x3^2*x4^2*x6*x8*x9 + x2*x3^2*x4^2*x6*x9^3 + -x2*x3^2*x4^2*x6*x9^2 + x2*x3^2*x4^2*x7^4*x8*x9 + -x2*x3^2*x4^2*x7^4*x8 + -x2*x3^2*x4^2*x7^4*x9 + x2*x3^2*x4^2*x7^4 + x2*x3^2*x4^2*x7^3*x8^2*x9 + -x2*x3^2*x4^2*x7^3*x8^2 + -x2*x3^2*x4^2*x7^3*x8*x9 + x2*x3^2*x4^2*x7^3*x8 + -x2*x3^2*x4^2*x7^2*x8*x9 + x2*x3^2*x4^2*x7^2*x8 + x2*x3^2*x4^2*x7^2*x9 + -x2*x3^2*x4^2*x7^2 + -x2*x3^2*x4^2*x7*x8^2*x9 + x2*x3^2*x4^2*x7*x8^2 + x2*x3^2*x4^2*x7*x8*x9 + -x2*x3^2*x4^2*x7*x8 + -x2*x3^2*x4*x5^5*x6^2*x7*x8*x9 + x2*x3^2*x4*x5^5*x6^2*x7*x8 + x2*x3^2*x4*x5^5*x6^2*x7*x9 + -x2*x3^2*x4*x5^5*x6^2*x7 + x2*x3^2*x4*x5^5*x6^2*x8*x9 + -x2*x3^2*x4*x5^5*x6^2*x8 + -x2*x3^2*x4*x5^5*x6^2*x9 + x2*x3^2*x4*x5^5*x6^2 + -x2*x3^2*x4*x5^5*x6*x7^2*x8*x9 + x2*x3^2*x4*x5^5*x6*x7^2*x8 + x2*x3^2*x4*x5^5*x6*x7^2*x9 + -x2*x3^2*x4*x5^5*x6*x7^2 + 2*x2*x3^2*x4*x5^5*x6*x7*x8*x9 + -2*x2*x3^2*x4*x5^5*x6*x7*x8 + -2*x2*x3^2*x4*x5^5*x6*x7*x9 + 2*x2*x3^2*x4*x5^5*x6*x7 + -x2*x3^2*x4*x5^5*x6*x8*x9 + x2*x3^2*x4*x5^5*x6*x8 + x2*x3^2*x4*x5^5*x6*x9 + -x2*x3^2*x4*x5^5*x6 + x2*x3^2*x4*x5^5*x7^2*x8*x9 + -x2*x3^2*x4*x5^5*x7^2*x8 + -x2*x3^2*x4*x5^5*x7^2*x9 + x2*x3^2*x4*x5^5*x7^2 + -x2*x3^2*x4*x5^5*x7*x8*x9 + x2*x3^2*x4*x5^5*x7*x8 + x2*x3^2*x4*x5^5*x7*x9 + -x2*x3^2*x4*x5^5*x7 + -x2*x3^2*x4*x5^3*x6^2*x7*x8^2*x9 + x2*x3^2*x4*x5^3*x6^2*x7*x8^2 + 2*x2*x3^2*x4*x5^3*x6^2*x7*x8*x9 + -2*x2*x3^2*x4*x5^3*x6^2*x7*x8 + -x2*x3^2*x4*x5^3*x6^2*x7*x9 + x2*x3^2*x4*x5^3*x6^2*x7 + x2*x3^2*x4*x5^3*x6^2*x8^2*x9 + -x2*x3^2*x4*x5^3*x6^2*x8^2 + -2*x2*x3^2*x4*x5^3*x6^2*x8*x9 + 2*x2*x3^2*x4*x5^3*x6^2*x8 + x2*x3^2*x4*x5^3*x6^2*x9 + -x2*x3^2*x4*x5^3*x6^2 + -x2*x3^2*x4*x5^3*x6*x7^2*x8^2*x9 + x2*x3^2*x4*x5^3*x6*x7^2*x8^2 + x2*x3^2*x4*x5^3*x6*x7^2*x8*x9 + -x2*x3^2*x4*x5^3*x6*x7^2*x8 + 2*x2*x3^2*x4*x5^3*x6*x7*x8^2*x9 + -2*x2*x3^2*x4*x5^3*x6*x7*x8^2 + -3*x2*x3^2*x4*x5^3*x6*x7*x8*x9 + 3*x2*x3^2*x4*x5^3*x6*x7*x8 + x2*x3^2*x4*x5^3*x6*x7*x9 + -x2*x3^2*x4*x5^3*x6*x7 + -x2*x3^2*x4*x5^3*x6*x8^2*x9 + x2*x3^2*x4*x5^3*x6*x8^2 + 2*x2*x3^2*x4*x5^3*x6*x8*x9 + -2*x2*x3^2*x4*x5^3*x6*x8 + -x2*x3^2*x4*x5^3*x6*x9 + x2*x3^2*x4*x5^3*x6 + x2*x3^2*x4*x5^3*x7^2*x8^2*x9 + -x2*x3^2*x4*x5^3*x7^2*x8^2 + -x2*x3^2*x4*x5^3*x7^2*x8*x9 + x2*x3^2*x4*x5^3*x7^2*x8 + -x2*x3^2*x4*x5^3*x7*x8^2*x9 + x2*x3^2*x4*x5^3*x7*x8^2 + x2*x3^2*x4*x5^3*x7*x8*x9 + -x2*x3^2*x4*x5^3*x7*x8 + -x2*x3^2*x4*x5^2*x6^3*x7^2*x8*x9 + x2*x3^2*x4*x5^2*x6^3*x7^2*x8 + x2*x3^2*x4*x5^2*x6^3*x7^2*x9 + -x2*x3^2*x4*x5^2*x6^3*x7^2 + x2*x3^2*x4*x5^2*x6^3*x7*x8*x9 + -x2*x3^2*x4*x5^2*x6^3*x7*x8 + -x2*x3^2*x4*x5^2*x6^3*x7*x9 + x2*x3^2*x4*x5^2*x6^3*x7 + -x2*x3^2*x4*x5^2*x6^2*x7^2*x8^2*x9 + x2*x3^2*x4*x5^2*x6^2*x7^2*x8^2 + x2*x3^2*x4*x5^2*x6^2*x7^2*x8*x9 + -x2*x3^2*x4*x5^2*x6^2*x7^2*x8 + x2*x3^2*x4*x5^2*x6^2*x7*x8^2*x9 + -x2*x3^2*x4*x5^2*x6^2*x7*x8^2 + -x2*x3^2*x4*x5^2*x6^2*x7*x8*x9 + x2*x3^2*x4*x5^2*x6^2*x7*x8 + -x2*x3^2*x4*x5^2*x6*x7^3*x8^2*x9 + x2*x3^2*x4*x5^2*x6*x7^3*x8^2 + x2*x3^2*x4*x5^2*x6*x7^3*x9 + -x2*x3^2*x4*x5^2*x6*x7^3 + 2*x2*x3^2*x4*x5^2*x6*x7^2*x8^2*x9 + -2*x2*x3^2*x4*x5^2*x6*x7^2*x8^2 + x2*x3^2*x4*x5^2*x6*x7^2*x8*x9 + -x2*x3^2*x4*x5^2*x6*x7^2*x8 + -3*x2*x3^2*x4*x5^2*x6*x7^2*x9 + 3*x2*x3^2*x4*x5^2*x6*x7^2 + -x2*x3^2*x4*x5^2*x6*x7*x8^2*x9 + x2*x3^2*x4*x5^2*x6*x7*x8^2 + -x2*x3^2*x4*x5^2*x6*x7*x8*x9 + x2*x3^2*x4*x5^2*x6*x7*x8 + 2*x2*x3^2*x4*x5^2*x6*x7*x9 + -2*x2*x3^2*x4*x5^2*x6*x7 + x2*x3^2*x4*x5^2*x7^3*x8^2*x9 + -x2*x3^2*x4*x5^2*x7^3*x8^2 + -x2*x3^2*x4*x5^2*x7^3*x9 + x2*x3^2*x4*x5^2*x7^3 + -x2*x3^2*x4*x5^2*x7^2*x8^2*x9 + x2*x3^2*x4*x5^2*x7^2*x8^2 + -x2*x3^2*x4*x5^2*x7^2*x8*x9 + x2*x3^2*x4*x5^2*x7^2*x8 + 2*x2*x3^2*x4*x5^2*x7^2*x9 + -2*x2*x3^2*x4*x5^2*x7^2 + x2*x3^2*x4*x5^2*x7*x8*x9 + -x2*x3^2*x4*x5^2*x7*x8 + -x2*x3^2*x4*x5^2*x7*x9 + x2*x3^2*x4*x5^2*x7 + -x2*x3^2*x4*x5*x6^3*x7^2*x8^2*x9 + x2*x3^2*x4*x5*x6^3*x7^2*x8^2 + x2*x3^2*x4*x5*x6^3*x7^2*x8*x9 + -x2*x3^2*x4*x5*x6^3*x7^2*x8 + -x2*x3^2*x4*x5*x6^3*x7*x8^2*x9^2 + x2*x3^2*x4*x5*x6^3*x7*x8^2*x9 + -x2*x3^2*x4*x5*x6^3*x7*x8*x9^3 + 2*x2*x3^2*x4*x5*x6^3*x7*x8*x9^2 + -x2*x3^2*x4*x5*x6^3*x7*x8*x9 + x2*x3^2*x4*x5*x6^3*x7*x9^3 + -x2*x3^2*x4*x5*x6^3*x7*x9^2 + x2*x3^2*x4*x5*x6^3*x8^2*x9^2 + -x2*x3^2*x4*x5*x6^3*x8^2 + x2*x3^2*x4*x5*x6^3*x8*x9^3 + -2*x2*x3^2*x4*x5*x6^3*x8*x9^2 + x2*x3^2*x4*x5*x6^3*x8 + -x2*x3^2*x4*x5*x6^3*x9^3 + x2*x3^2*x4*x5*x6^3*x9^2 + x2*x3^2*x4*x5*x6^2*x7^2*x8^2*x9 + -x2*x3^2*x4*x5*x6^2*x7^2*x8^2 + -x2*x3^2*x4*x5*x6^2*x7^2*x8*x9 + x2*x3^2*x4*x5*x6^2*x7^2*x8 + -x2*x3^2*x4*x5*x6^2*x8^2*x9 + x2*x3^2*x4*x5*x6^2*x8^2 + x2*x3^2*x4*x5*x6^2*x8*x9 + -x2*x3^2*x4*x5*x6^2*x8 + -x2*x3^2*x4*x5*x6*x7^4*x8*x9 + x2*x3^2*x4*x5*x6*x7^4*x8 + x2*x3^2*x4*x5*x6*x7^4*x9 + -x2*x3^2*x4*x5*x6*x7^4 + x2*x3^2*x4*x5*x6*x7^3*x8*x9 + -x2*x3^2*x4*x5*x6*x7^3*x8 + -x2*x3^2*x4*x5*x6*x7^3*x9 + x2*x3^2*x4*x5*x6*x7^3 + x2*x3^2*x4*x5*x6*x7*x8^2*x9^2 + -x2*x3^2*x4*x5*x6*x7*x8^2*x9 + x2*x3^2*x4*x5*x6*x7*x8*x9^3 + -2*x2*x3^2*x4*x5*x6*x7*x8*x9^2 + x2*x3^2*x4*x5*x6*x7*x8*x9 + -x2*x3^2*x4*x5*x6*x7*x9^3 + x2*x3^2*x4*x5*x6*x7*x9^2 + -x2*x3^2*x4*x5*x6*x8^2*x9^2 + x2*x3^2*x4*x5*x6*x8^2*x9 + -x2*x3^2*x4*x5*x6*x8*x9^3 + 2*x2*x3^2*x4*x5*x6*x8*x9^2 + -x2*x3^2*x4*x5*x6*x8*x9 + x2*x3^2*x4*x5*x6*x9^3 + -x2*x3^2*x4*x5*x6*x9^2 + x2*x3^2*x4*x5*x7^4*x8*x9 + -x2*x3^2*x4*x5*x7^4*x8 + -x2*x3^2*x4*x5*x7^4*x9 + x2*x3^2*x4*x5*x7^4 + -x2*x3^2*x4*x5*x7^3*x8*x9 + x2*x3^2*x4*x5*x7^3*x8 + x2*x3^2*x4*x5*x7^3*x9 + -x2*x3^2*x4*x5*x7^3 + x2*x3^2*x4*x6^3*x7^2*x8^2*x9 + -x2*x3^2*x4*x6^3*x7^2*x8^2 + -x2*x3^2*x4*x6^3*x7^2*x9 + x2*x3^2*x4*x6^3*x7^2 + x2*x3^2*x4*x6^3*x7*x8^2*x9^2 + -x2*x3^2*x4*x6^3*x7*x8^2*x9 + x2*x3^2*x4*x6^3*x7*x8*x9^3 + -2*x2*x3^2*x4*x6^3*x7*x8*x9^2 + x2*x3^2*x4*x6^3*x7*x8 + -x2*x3^2*x4*x6^3*x7*x9^3 + x2*x3^2*x4*x6^3*x7*x9^2 + x2*x3^2*x4*x6^3*x7*x9 + -x2*x3^2*x4*x6^3*x7 + -x2*x3^2*x4*x6^3*x8^2*x9^2 + x2*x3^2*x4*x6^3*x8^2 + -x2*x3^2*x4*x6^3*x8*x9^3 + 2*x2*x3^2*x4*x6^3*x8*x9^2 + -x2*x3^2*x4*x6^3*x8 + x2*x3^2*x4*x6^3*x9^3 + -x2*x3^2*x4*x6^3*x9^2 + x2*x3^2*x4*x6*x7^4*x8*x9 + -x2*x3^2*x4*x6*x7^4*x8 + -x2*x3^2*x4*x6*x7^4*x9 + x2*x3^2*x4*x6*x7^4 + x2*x3^2*x4*x6*x7^3*x8^2*x9 + -x2*x3^2*x4*x6*x7^3*x8^2 + -x2*x3^2*x4*x6*x7^3*x8*x9 + x2*x3^2*x4*x6*x7^3*x8 + -x2*x3^2*x4*x6*x7^2*x8^2*x9 + x2*x3^2*x4*x6*x7^2*x8^2 + -x2*x3^2*x4*x6*x7^2*x8*x9 + x2*x3^2*x4*x6*x7^2*x8 + 2*x2*x3^2*x4*x6*x7^2*x9 + -2*x2*x3^2*x4*x6*x7^2 + -x2*x3^2*x4*x6*x7*x8^2*x9^2 + x2*x3^2*x4*x6*x7*x8^2 + -x2*x3^2*x4*x6*x7*x8*x9^3 + 2*x2*x3^2*x4*x6*x7*x8*x9^2 + x2*x3^2*x4*x6*x7*x8*x9 + -2*x2*x3^2*x4*x6*x7*x8 + x2*x3^2*x4*x6*x7*x9^3 + -x2*x3^2*x4*x6*x7*x9^2 + -x2*x3^2*x4*x6*x7*x9 + x2*x3^2*x4*x6*x7 + x2*x3^2*x4*x6*x8^2*x9^2 + -x2*x3^2*x4*x6*x8^2 + x2*x3^2*x4*x6*x8*x9^3 + -2*x2*x3^2*x4*x6*x8*x9^2 + x2*x3^2*x4*x6*x8 + -x2*x3^2*x4*x6*x9^3 + x2*x3^2*x4*x6*x9^2 + -x2*x3^2*x4*x7^4*x8*x9 + x2*x3^2*x4*x7^4*x8 + x2*x3^2*x4*x7^4*x9 + -x2*x3^2*x4*x7^4 + -x2*x3^2*x4*x7^3*x8^2*x9 + x2*x3^2*x4*x7^3*x8^2 + x2*x3^2*x4*x7^3*x8*x9 + -x2*x3^2*x4*x7^3*x8 + x2*x3^2*x4*x7^2*x8*x9 + -x2*x3^2*x4*x7^2*x8 + -x2*x3^2*x4*x7^2*x9 + x2*x3^2*x4*x7^2 + x2*x3^2*x4*x7*x8^2*x9 + -x2*x3^2*x4*x7*x8^2 + -x2*x3^2*x4*x7*x8*x9 + x2*x3^2*x4*x7*x8 + -x2*x3*x4^7*x5*x6*x7*x8^2*x9 + x2*x3*x4^7*x5*x6*x7*x8^2 + x2*x3*x4^7*x5*x6*x7*x8*x9 + -x2*x3*x4^7*x5*x6*x7*x8 + x2*x3*x4^7*x5*x6*x8^2*x9 + -x2*x3*x4^7*x5*x6*x8^2 + -x2*x3*x4^7*x5*x6*x8*x9 + x2*x3*x4^7*x5*x6*x8 + x2*x3*x4^7*x5*x7*x8^2*x9 + -x2*x3*x4^7*x5*x7*x8^2 + -x2*x3*x4^7*x5*x7*x8*x9 + x2*x3*x4^7*x5*x7*x8 + -x2*x3*x4^7*x5*x8^2*x9 + x2*x3*x4^7*x5*x8^2 + x2*x3*x4^7*x5*x8*x9 + -x2*x3*x4^7*x5*x8 + x2*x3*x4^7*x6*x7*x8^2*x9 + -x2*x3*x4^7*x6*x7*x8^2 + -x2*x3*x4^7*x6*x7*x8*x9 + x2*x3*x4^7*x6*x7*x8 + -x2*x3*x4^7*x6*x8^2*x9 + x2*x3*x4^7*x6*x8^2 + x2*x3*x4^7*x6*x8*x9 + -x2*x3*x4^7*x6*x8 + -x2*x3*x4^7*x7*x8^2*x9 + x2*x3*x4^7*x7*x8^2 + x2*x3*x4^7*x7*x8*x9 + -x2*x3*x4^7*x7*x8 + x2*x3*x4^7*x8^2*x9 + -x2*x3*x4^7*x8^2 + -x2*x3*x4^7*x8*x9 + x2*x3*x4^7*x8 + x2*x3*x4^6*x5*x6^2*x7*x8^2*x9^2 + -x2*x3*x4^6*x5*x6^2*x7*x8^2*x9 + -x2*x3*x4^6*x5*x6^2*x7*x8*x9^2 + x2*x3*x4^6*x5*x6^2*x7*x8*x9 + -x2*x3*x4^6*x5*x6^2*x8^2*x9^2 + x2*x3*x4^6*x5*x6^2*x8^2*x9 + x2*x3*x4^6*x5*x6^2*x8*x9^2 + -x2*x3*x4^6*x5*x6^2*x8*x9 + -x2*x3*x4^6*x5*x6*x7*x8^2*x9^2 + x2*x3*x4^6*x5*x6*x7*x8^2*x9 + x2*x3*x4^6*x5*x6*x7*x8*x9^2 + -x2*x3*x4^6*x5*x6*x7*x8*x9 + x2*x3*x4^6*x5*x6*x8^2*x9^2 + -x2*x3*x4^6*x5*x6*x8^2*x9 + -x2*x3*x4^6*x5*x6*x8*x9^2 + x2*x3*x4^6*x5*x6*x8*x9 + -x2*x3*x4^6*x6^2*x7*x8^2*x9^2 + x2*x3*x4^6*x6^2*x7*x8^2*x9 + x2*x3*x4^6*x6^2*x7*x8*x9^2 + -x2*x3*x4^6*x6^2*x7*x8*x9 + x2*x3*x4^6*x6^2*x8^2*x9^2 + -x2*x3*x4^6*x6^2*x8^2*x9 + -x2*x3*x4^6*x6^2*x8*x9^2 + x2*x3*x4^6*x6^2*x8*x9 + x2*x3*x4^6*x6*x7*x8^2*x9^2 + -x2*x3*x4^6*x6*x7*x8^2*x9 + -x2*x3*x4^6*x6*x7*x8*x9^2 + x2*x3*x4^6*x6*x7*x8*x9 + -x2*x3*x4^6*x6*x8^2*x9^2 + x2*x3*x4^6*x6*x8^2*x9 + x2*x3*x4^6*x6*x8*x9^2 + -x2*x3*x4^6*x6*x8*x9 + x2*x3*x4^5*x5*x6^6*x7*x8*x9 + -x2*x3*x4^5*x5*x6^6*x7*x8 + -x2*x3*x4^5*x5*x6^6*x7*x9 + x2*x3*x4^5*x5*x6^6*x7 + -x2*x3*x4^5*x5*x6^6*x8*x9 + x2*x3*x4^5*x5*x6^6*x8 + x2*x3*x4^5*x5*x6^6*x9 + -x2*x3*x4^5*x5*x6^6 + x2*x3*x4^5*x5*x6^5*x7*x8^2*x9 + -x2*x3*x4^5*x5*x6^5*x7*x8^2 + -2*x2*x3*x4^5*x5*x6^5*x7*x8*x9 + 2*x2*x3*x4^5*x5*x6^5*x7*x8 + x2*x3*x4^5*x5*x6^5*x7*x9 + -x2*x3*x4^5*x5*x6^5*x7 + -x2*x3*x4^5*x5*x6^5*x8^2*x9 + x2*x3*x4^5*x5*x6^5*x8^2 + 2*x2*x3*x4^5*x5*x6^5*x8*x9 + -2*x2*x3*x4^5*x5*x6^5*x8 + -x2*x3*x4^5*x5*x6^5*x9 + x2*x3*x4^5*x5*x6^5 + -x2*x3*x4^5*x5*x6^2*x7*x8^2*x9^2 + -x2*x3*x4^5*x5*x6^2*x7*x8^2*x9 + 2*x2*x3*x4^5*x5*x6^2*x7*x8^2 + x2*x3*x4^5*x5*x6^2*x7*x8*x9^2 + x2*x3*x4^5*x5*x6^2*x7*x8*x9 + -2*x2*x3*x4^5*x5*x6^2*x7*x8 + x2*x3*x4^5*x5*x6^2*x8^2*x9^2 + x2*x3*x4^5*x5*x6^2*x8^2*x9 + -2*x2*x3*x4^5*x5*x6^2*x8^2 + -x2*x3*x4^5*x5*x6^2*x8*x9^2 + -x2*x3*x4^5*x5*x6^2*x8*x9 + 2*x2*x3*x4^5*x5*x6^2*x8 + x2*x3*x4^5*x5*x6*x7*x8^2*x9^2 + -x2*x3*x4^5*x5*x6*x7*x8^2 + -x2*x3*x4^5*x5*x6*x7*x8*x9^2 + x2*x3*x4^5*x5*x6*x7*x8 + -x2*x3*x4^5*x5*x6*x8^2*x9^2 + x2*x3*x4^5*x5*x6*x8^2 + x2*x3*x4^5*x5*x6*x8*x9^2 + -x2*x3*x4^5*x5*x6*x8 + -x2*x3*x4^5*x6^6*x7*x8*x9 + x2*x3*x4^5*x6^6*x7*x8 + x2*x3*x4^5*x6^6*x7*x9 + -x2*x3*x4^5*x6^6*x7 + x2*x3*x4^5*x6^6*x8*x9 + -x2*x3*x4^5*x6^6*x8 + -x2*x3*x4^5*x6^6*x9 + x2*x3*x4^5*x6^6 + -x2*x3*x4^5*x6^5*x7*x8^2*x9 + x2*x3*x4^5*x6^5*x7*x8^2 + 2*x2*x3*x4^5*x6^5*x7*x8*x9 + -2*x2*x3*x4^5*x6^5*x7*x8 + -x2*x3*x4^5*x6^5*x7*x9 + x2*x3*x4^5*x6^5*x7 + x2*x3*x4^5*x6^5*x8^2*x9 + -x2*x3*x4^5*x6^5*x8^2 + -2*x2*x3*x4^5*x6^5*x8*x9 + 2*x2*x3*x4^5*x6^5*x8 + x2*x3*x4^5*x6^5*x9 + -x2*x3*x4^5*x6^5 + x2*x3*x4^5*x6^2*x7*x8^2*x9^2 + x2*x3*x4^5*x6^2*x7*x8^2*x9 + -2*x2*x3*x4^5*x6^2*x7*x8^2 + -x2*x3*x4^5*x6^2*x7*x8*x9^2 + -x2*x3*x4^5*x6^2*x7*x8*x9 + 2*x2*x3*x4^5*x6^2*x7*x8 + -x2*x3*x4^5*x6^2*x8^2*x9^2 + -x2*x3*x4^5*x6^2*x8^2*x9 + 2*x2*x3*x4^5*x6^2*x8^2 + x2*x3*x4^5*x6^2*x8*x9^2 + x2*x3*x4^5*x6^2*x8*x9 + -2*x2*x3*x4^5*x6^2*x8 + -x2*x3*x4^5*x6*x7*x8^2*x9^2 + x2*x3*x4^5*x6*x7*x8^2 + x2*x3*x4^5*x6*x7*x8*x9^2 + -x2*x3*x4^5*x6*x7*x8 + x2*x3*x4^5*x6*x8^2*x9^2 + -x2*x3*x4^5*x6*x8^2 + -x2*x3*x4^5*x6*x8*x9^2 + x2*x3*x4^5*x6*x8 + -x2*x3*x4^4*x5*x6^6*x7*x8*x9 + x2*x3*x4^4*x5*x6^6*x7*x8 + x2*x3*x4^4*x5*x6^6*x7*x9 + -x2*x3*x4^4*x5*x6^6*x7 + x2*x3*x4^4*x5*x6^6*x8*x9 + -x2*x3*x4^4*x5*x6^6*x8 + -x2*x3*x4^4*x5*x6^6*x9 + x2*x3*x4^4*x5*x6^6 + -x2*x3*x4^4*x5*x6^5*x7*x8^2*x9 + x2*x3*x4^4*x5*x6^5*x7*x8^2 + 2*x2*x3*x4^4*x5*x6^5*x7*x8*x9 + -2*x2*x3*x4^4*x5*x6^5*x7*x8 + -x2*x3*x4^4*x5*x6^5*x7*x9 + x2*x3*x4^4*x5*x6^5*x7 + x2*x3*x4^4*x5*x6^5*x8^2*x9 + -x2*x3*x4^4*x5*x6^5*x8^2 + -2*x2*x3*x4^4*x5*x6^5*x8*x9 + 2*x2*x3*x4^4*x5*x6^5*x8 + x2*x3*x4^4*x5*x6^5*x9 + -x2*x3*x4^4*x5*x6^5 + x2*x3*x4^4*x5*x6^2*x7*x8^2*x9 + -x2*x3*x4^4*x5*x6^2*x7*x8^2 + -x2*x3*x4^4*x5*x6^2*x7*x8*x9 + x2*x3*x4^4*x5*x6^2*x7*x8 + -x2*x3*x4^4*x5*x6^2*x8^2*x9 + x2*x3*x4^4*x5*x6^2*x8^2 + x2*x3*x4^4*x5*x6^2*x8*x9 + -x2*x3*x4^4*x5*x6^2*x8 + x2*x3*x4^4*x6^6*x7*x8*x9 + -x2*x3*x4^4*x6^6*x7*x8 + -x2*x3*x4^4*x6^6*x7*x9 + x2*x3*x4^4*x6^6*x7 + -x2*x3*x4^4*x6^6*x8*x9 + x2*x3*x4^4*x6^6*x8 + x2*x3*x4^4*x6^6*x9 + -x2*x3*x4^4*x6^6 + x2*x3*x4^4*x6^5*x7*x8^2*x9 + -x2*x3*x4^4*x6^5*x7*x8^2 + -2*x2*x3*x4^4*x6^5*x7*x8*x9 + 2*x2*x3*x4^4*x6^5*x7*x8 + x2*x3*x4^4*x6^5*x7*x9 + -x2*x3*x4^4*x6^5*x7 + -x2*x3*x4^4*x6^5*x8^2*x9 + x2*x3*x4^4*x6^5*x8^2 + 2*x2*x3*x4^4*x6^5*x8*x9 + -2*x2*x3*x4^4*x6^5*x8 + -x2*x3*x4^4*x6^5*x9 + x2*x3*x4^4*x6^5 + -x2*x3*x4^4*x6^2*x7*x8^2*x9 + x2*x3*x4^4*x6^2*x7*x8^2 + x2*x3*x4^4*x6^2*x7*x8*x9 + -x2*x3*x4^4*x6^2*x7*x8 + x2*x3*x4^4*x6^2*x8^2*x9 + -x2*x3*x4^4*x6^2*x8^2 + -x2*x3*x4^4*x6^2*x8*x9 + x2*x3*x4^4*x6^2*x8 + x2*x3*x4^3*x5^3*x6^2*x7*x8^2*x9 + -x2*x3*x4^3*x5^3*x6^2*x7*x8^2 + -2*x2*x3*x4^3*x5^3*x6^2*x7*x8*x9 + 2*x2*x3*x4^3*x5^3*x6^2*x7*x8 + x2*x3*x4^3*x5^3*x6^2*x7*x9 + -x2*x3*x4^3*x5^3*x6^2*x7 + -x2*x3*x4^3*x5^3*x6^2*x8^2*x9 + x2*x3*x4^3*x5^3*x6^2*x8^2 + 2*x2*x3*x4^3*x5^3*x6^2*x8*x9 + -2*x2*x3*x4^3*x5^3*x6^2*x8 + -x2*x3*x4^3*x5^3*x6^2*x9 + x2*x3*x4^3*x5^3*x6^2 + x2*x3*x4^3*x5^3*x6*x7^2*x8^2*x9 + -x2*x3*x4^3*x5^3*x6*x7^2*x8^2 + -x2*x3*x4^3*x5^3*x6*x7^2*x8*x9 + x2*x3*x4^3*x5^3*x6*x7^2*x8 + -x2*x3*x4^3*x5^3*x6*x7*x8^2*x9 + x2*x3*x4^3*x5^3*x6*x7*x8^2 + x2*x3*x4^3*x5^3*x6*x7*x8*x9 + -x2*x3*x4^3*x5^3*x6*x7*x8 + -x2*x3*x4^3*x5^3*x7^2*x8^2*x9 + x2*x3*x4^3*x5^3*x7^2*x8^2 + x2*x3*x4^3*x5^3*x7^2*x8*x9 + -x2*x3*x4^3*x5^3*x7^2*x8 + x2*x3*x4^3*x5^3*x7*x8*x9 + -x2*x3*x4^3*x5^3*x7*x8 + -x2*x3*x4^3*x5^3*x7*x9 + x2*x3*x4^3*x5^3*x7 + x2*x3*x4^3*x5^3*x8^2*x9 + -x2*x3*x4^3*x5^3*x8^2 + -2*x2*x3*x4^3*x5^3*x8*x9 + 2*x2*x3*x4^3*x5^3*x8 + x2*x3*x4^3*x5^3*x9 + -x2*x3*x4^3*x5^3 + x2*x3*x4^3*x5^2*x6^4*x7*x8^2*x9 + -x2*x3*x4^3*x5^2*x6^4*x7*x8^2 + -x2*x3*x4^3*x5^2*x6^4*x7*x8*x9 + x2*x3*x4^3*x5^2*x6^4*x7*x8 + -x2*x3*x4^3*x5^2*x6^4*x8^2*x9 + x2*x3*x4^3*x5^2*x6^4*x8^2 + x2*x3*x4^3*x5^2*x6^4*x8*x9 + -x2*x3*x4^3*x5^2*x6^4*x8 + x2*x3*x4^3*x5^2*x6^3*x7^2*x8^2*x9 + -x2*x3*x4^3*x5^2*x6^3*x7^2*x8^2 + -x2*x3*x4^3*x5^2*x6^3*x7^2*x8*x9 + x2*x3*x4^3*x5^2*x6^3*x7^2*x8 + -x2*x3*x4^3*x5^2*x6^3*x7*x8^2*x9 + x2*x3*x4^3*x5^2*x6^3*x7*x8^2 + x2*x3*x4^3*x5^2*x6^3*x7*x8*x9 + -x2*x3*x4^3*x5^2*x6^3*x7*x8 + x2*x3*x4^3*x5^2*x6^2*x7^3*x8^2*x9 + -x2*x3*x4^3*x5^2*x6^2*x7^3*x8^2 + -x2*x3*x4^3*x5^2*x6^2*x7^3*x8*x9 + x2*x3*x4^3*x5^2*x6^2*x7^3*x8 + -x2*x3*x4^3*x5^2*x6^2*x7^2*x8^2*x9 + x2*x3*x4^3*x5^2*x6^2*x7^2*x8^2 + x2*x3*x4^3*x5^2*x6^2*x7^2*x8*x9 + -x2*x3*x4^3*x5^2*x6^2*x7^2*x8 + -x2*x3*x4^3*x5^2*x6^2*x7*x8^2*x9 + x2*x3*x4^3*x5^2*x6^2*x7*x8^2 + 2*x2*x3*x4^3*x5^2*x6^2*x7*x8*x9 + -2*x2*x3*x4^3*x5^2*x6^2*x7*x8 + -x2*x3*x4^3*x5^2*x6^2*x7*x9 + x2*x3*x4^3*x5^2*x6^2*x7 + x2*x3*x4^3*x5^2*x6^2*x8^2*x9 + -x2*x3*x4^3*x5^2*x6^2*x8^2 + -2*x2*x3*x4^3*x5^2*x6^2*x8*x9 + 2*x2*x3*x4^3*x5^2*x6^2*x8 + x2*x3*x4^3*x5^2*x6^2*x9 + -x2*x3*x4^3*x5^2*x6^2 + -x2*x3*x4^3*x5^2*x6*x7^2*x8^2*x9 + x2*x3*x4^3*x5^2*x6*x7^2*x8^2 + x2*x3*x4^3*x5^2*x6*x7^2*x8*x9 + -x2*x3*x4^3*x5^2*x6*x7^2*x8 + x2*x3*x4^3*x5^2*x6*x7*x8^2*x9 + -x2*x3*x4^3*x5^2*x6*x7*x8^2 + -x2*x3*x4^3*x5^2*x6*x7*x8*x9 + x2*x3*x4^3*x5^2*x6*x7*x8 + -x2*x3*x4^3*x5^2*x7^3*x8^2*x9 + x2*x3*x4^3*x5^2*x7^3*x8^2 + x2*x3*x4^3*x5^2*x7^3*x8*x9 + -x2*x3*x4^3*x5^2*x7^3*x8 + x2*x3*x4^3*x5^2*x7^2*x8^2*x9 + -x2*x3*x4^3*x5^2*x7^2*x8^2 + -x2*x3*x4^3*x5^2*x7^2*x8*x9 + x2*x3*x4^3*x5^2*x7^2*x8 + -x2*x3*x4^3*x5^2*x7*x8*x9 + x2*x3*x4^3*x5^2*x7*x8 + x2*x3*x4^3*x5^2*x7*x9 + -x2*x3*x4^3*x5^2*x7 + x2*x3*x4^3*x5^2*x8*x9 + -x2*x3*x4^3*x5^2*x8 + -x2*x3*x4^3*x5^2*x9 + x2*x3*x4^3*x5^2 + -x2*x3*x4^3*x5*x6^4*x7*x8^2*x9 + x2*x3*x4^3*x5*x6^4*x7*x8^2 + x2*x3*x4^3*x5*x6^4*x7*x8*x9 + -x2*x3*x4^3*x5*x6^4*x7*x8 + x2*x3*x4^3*x5*x6^4*x8^2*x9 + -x2*x3*x4^3*x5*x6^4*x8^2 + -x2*x3*x4^3*x5*x6^4*x8*x9 + x2*x3*x4^3*x5*x6^4*x8 + x2*x3*x4^3*x5*x6^3*x7^4*x8*x9 + -x2*x3*x4^3*x5*x6^3*x7^4*x8 + -x2*x3*x4^3*x5*x6^3*x7^4*x9 + x2*x3*x4^3*x5*x6^3*x7^4 + -x2*x3*x4^3*x5*x6^3*x7^3*x8*x9 + x2*x3*x4^3*x5*x6^3*x7^3*x8 + x2*x3*x4^3*x5*x6^3*x7^3*x9 + -x2*x3*x4^3*x5*x6^3*x7^3 + -x2*x3*x4^3*x5*x6^3*x7^2*x8^2*x9 + x2*x3*x4^3*x5*x6^3*x7^2*x8^2 + x2*x3*x4^3*x5*x6^3*x7^2*x8*x9 + -x2*x3*x4^3*x5*x6^3*x7^2*x8 + x2*x3*x4^3*x5*x6^3*x7*x8*x9^3 + -x2*x3*x4^3*x5*x6^3*x7*x8*x9^2 + -x2*x3*x4^3*x5*x6^3*x7*x9^3 + x2*x3*x4^3*x5*x6^3*x7*x9^2 + x2*x3*x4^3*x5*x6^3*x8^2*x9 + -x2*x3*x4^3*x5*x6^3*x8^2 + -x2*x3*x4^3*x5*x6^3*x8*x9^3 + x2*x3*x4^3*x5*x6^3*x8*x9^2 + -x2*x3*x4^3*x5*x6^3*x8*x9 + x2*x3*x4^3*x5*x6^3*x8 + x2*x3*x4^3*x5*x6^3*x9^3 + -x2*x3*x4^3*x5*x6^3*x9^2 + -x2*x3*x4^3*x5*x6^2*x7^4*x8*x9 + x2*x3*x4^3*x5*x6^2*x7^4*x8 + x2*x3*x4^3*x5*x6^2*x7^4*x9 + -x2*x3*x4^3*x5*x6^2*x7^4 + -x2*x3*x4^3*x5*x6^2*x7^3*x8^2*x9 + x2*x3*x4^3*x5*x6^2*x7^3*x8^2 + 2*x2*x3*x4^3*x5*x6^2*x7^3*x8*x9 + -2*x2*x3*x4^3*x5*x6^2*x7^3*x8 + -x2*x3*x4^3*x5*x6^2*x7^3*x9 + x2*x3*x4^3*x5*x6^2*x7^3 + x2*x3*x4^3*x5*x6^2*x7^2*x8^2*x9 + -x2*x3*x4^3*x5*x6^2*x7^2*x8^2 + -x2*x3*x4^3*x5*x6^2*x7^2*x8*x9 + x2*x3*x4^3*x5*x6^2*x7^2*x8 + x2*x3*x4^3*x5*x6^2*x7*x8^2*x9 + -x2*x3*x4^3*x5*x6^2*x7*x8^2 + -x2*x3*x4^3*x5*x6^2*x7*x8*x9 + x2*x3*x4^3*x5*x6^2*x7*x8 + -x2*x3*x4^3*x5*x6^2*x8^2*x9 + x2*x3*x4^3*x5*x6^2*x8^2 + x2*x3*x4^3*x5*x6^2*x8*x9 + -x2*x3*x4^3*x5*x6^2*x8 + -x2*x3*x4^3*x5*x6*x7*x8*x9^3 + x2*x3*x4^3*x5*x6*x7*x8*x9^2 + x2*x3*x4^3*x5*x6*x7*x9^3 + -x2*x3*x4^3*x5*x6*x7*x9^2 + x2*x3*x4^3*x5*x6*x8*x9^3 + -x2*x3*x4^3*x5*x6*x8*x9^2 + -x2*x3*x4^3*x5*x6*x9^3 + x2*x3*x4^3*x5*x6*x9^2 + x2*x3*x4^3*x5*x7^3*x8^2*x9 + -x2*x3*x4^3*x5*x7^3*x8^2 + -x2*x3*x4^3*x5*x7^3*x8*x9 + x2*x3*x4^3*x5*x7^3*x8 + -x2*x3*x4^3*x5*x8^2*x9 + x2*x3*x4^3*x5*x8^2 + x2*x3*x4^3*x5*x8*x9 + -x2*x3*x4^3*x5*x8 + -x2*x3*x4^3*x6^3*x7^4*x8*x9 + x2*x3*x4^3*x6^3*x7^4*x8 + x2*x3*x4^3*x6^3*x7^4*x9 + -x2*x3*x4^3*x6^3*x7^4 + x2*x3*x4^3*x6^3*x7^3*x8*x9 + -x2*x3*x4^3*x6^3*x7^3*x8 + -x2*x3*x4^3*x6^3*x7^3*x9 + x2*x3*x4^3*x6^3*x7^3 + x2*x3*x4^3*x6^3*x7*x8^2*x9 + -x2*x3*x4^3*x6^3*x7*x8^2 + -x2*x3*x4^3*x6^3*x7*x8*x9^3 + x2*x3*x4^3*x6^3*x7*x8*x9^2 + -x2*x3*x4^3*x6^3*x7*x8*x9 + x2*x3*x4^3*x6^3*x7*x8 + x2*x3*x4^3*x6^3*x7*x9^3 + -x2*x3*x4^3*x6^3*x7*x9^2 + -x2*x3*x4^3*x6^3*x8^2*x9 + x2*x3*x4^3*x6^3*x8^2 + x2*x3*x4^3*x6^3*x8*x9^3 + -x2*x3*x4^3*x6^3*x8*x9^2 + x2*x3*x4^3*x6^3*x8*x9 + -x2*x3*x4^3*x6^3*x8 + -x2*x3*x4^3*x6^3*x9^3 + x2*x3*x4^3*x6^3*x9^2 + x2*x3*x4^3*x6^2*x7^4*x8*x9 + -x2*x3*x4^3*x6^2*x7^4*x8 + -x2*x3*x4^3*x6^2*x7^4*x9 + x2*x3*x4^3*x6^2*x7^4 + -x2*x3*x4^3*x6^2*x7^3*x8*x9 + x2*x3*x4^3*x6^2*x7^3*x8 + x2*x3*x4^3*x6^2*x7^3*x9 + -x2*x3*x4^3*x6^2*x7^3 + -x2*x3*x4^3*x6^2*x7*x8^2*x9 + x2*x3*x4^3*x6^2*x7*x8^2 + x2*x3*x4^3*x6^2*x7*x8*x9 + -x2*x3*x4^3*x6^2*x7*x8 + x2*x3*x4^3*x6^2*x8^2*x9 + -x2*x3*x4^3*x6^2*x8^2 + -x2*x3*x4^3*x6^2*x8*x9 + x2*x3*x4^3*x6^2*x8 + x2*x3*x4^3*x6*x7*x8*x9^3 + -x2*x3*x4^3*x6*x7*x8*x9^2 + -x2*x3*x4^3*x6*x7*x9^3 + x2*x3*x4^3*x6*x7*x9^2 + -x2*x3*x4^3*x6*x8*x9^3 + x2*x3*x4^3*x6*x8*x9^2 + x2*x3*x4^3*x6*x9^3 + -x2*x3*x4^3*x6*x9^2 + -x2*x3*x4^2*x5^3*x6^2*x7*x8^2*x9 + x2*x3*x4^2*x5^3*x6^2*x7*x8^2 + 2*x2*x3*x4^2*x5^3*x6^2*x7*x8*x9 + -2*x2*x3*x4^2*x5^3*x6^2*x7*x8 + -x2*x3*x4^2*x5^3*x6^2*x7*x9 + x2*x3*x4^2*x5^3*x6^2*x7 + x2*x3*x4^2*x5^3*x6^2*x8^2*x9 + -x2*x3*x4^2*x5^3*x6^2*x8^2 + -2*x2*x3*x4^2*x5^3*x6^2*x8*x9 + 2*x2*x3*x4^2*x5^3*x6^2*x8 + x2*x3*x4^2*x5^3*x6^2*x9 + -x2*x3*x4^2*x5^3*x6^2 + -x2*x3*x4^2*x5^3*x6*x7^2*x8^2*x9 + x2*x3*x4^2*x5^3*x6*x7^2*x8^2 + x2*x3*x4^2*x5^3*x6*x7^2*x9 + -x2*x3*x4^2*x5^3*x6*x7^2 + x2*x3*x4^2*x5^3*x6*x7*x8^2*x9 + -x2*x3*x4^2*x5^3*x6*x7*x8^2 + -x2*x3*x4^2*x5^3*x6*x7*x9 + x2*x3*x4^2*x5^3*x6*x7 + x2*x3*x4^2*x5^3*x7^2*x8^2*x9 + -x2*x3*x4^2*x5^3*x7^2*x8^2 + -x2*x3*x4^2*x5^3*x7^2*x9 + x2*x3*x4^2*x5^3*x7^2 + -2*x2*x3*x4^2*x5^3*x7*x8*x9 + 2*x2*x3*x4^2*x5^3*x7*x8 + 2*x2*x3*x4^2*x5^3*x7*x9 + -2*x2*x3*x4^2*x5^3*x7 + -x2*x3*x4^2*x5^3*x8^2*x9 + x2*x3*x4^2*x5^3*x8^2 + 2*x2*x3*x4^2*x5^3*x8*x9 + -2*x2*x3*x4^2*x5^3*x8 + -x2*x3*x4^2*x5^3*x9 + x2*x3*x4^2*x5^3 + -x2*x3*x4^2*x5^2*x6^3*x7^2*x8*x9 + x2*x3*x4^2*x5^2*x6^3*x7^2*x8 + x2*x3*x4^2*x5^2*x6^3*x7^2*x9 + -x2*x3*x4^2*x5^2*x6^3*x7^2 + x2*x3*x4^2*x5^2*x6^3*x7*x8*x9 + -x2*x3*x4^2*x5^2*x6^3*x7*x8 + -x2*x3*x4^2*x5^2*x6^3*x7*x9 + x2*x3*x4^2*x5^2*x6^3*x7 + -x2*x3*x4^2*x5^2*x6^2*x7^2*x8^2*x9 + x2*x3*x4^2*x5^2*x6^2*x7^2*x8^2 + x2*x3*x4^2*x5^2*x6^2*x7^2*x8*x9 + -x2*x3*x4^2*x5^2*x6^2*x7^2*x8 + x2*x3*x4^2*x5^2*x6^2*x7*x8^2*x9 + -x2*x3*x4^2*x5^2*x6^2*x7*x8^2 + -2*x2*x3*x4^2*x5^2*x6^2*x7*x8*x9 + 2*x2*x3*x4^2*x5^2*x6^2*x7*x8 + x2*x3*x4^2*x5^2*x6^2*x7*x9 + -x2*x3*x4^2*x5^2*x6^2*x7 + x2*x3*x4^2*x5^2*x6^2*x8*x9 + -x2*x3*x4^2*x5^2*x6^2*x8 + -x2*x3*x4^2*x5^2*x6^2*x9 + x2*x3*x4^2*x5^2*x6^2 + -x2*x3*x4^2*x5^2*x6*x7^3*x8^2*x9 + x2*x3*x4^2*x5^2*x6*x7^3*x8^2 + x2*x3*x4^2*x5^2*x6*x7^3*x9 + -x2*x3*x4^2*x5^2*x6*x7^3 + 2*x2*x3*x4^2*x5^2*x6*x7^2*x8^2*x9 + -2*x2*x3*x4^2*x5^2*x6*x7^2*x8^2 + -2*x2*x3*x4^2*x5^2*x6*x7^2*x9 + 2*x2*x3*x4^2*x5^2*x6*x7^2 + -x2*x3*x4^2*x5^2*x6*x7*x8^2*x9 + x2*x3*x4^2*x5^2*x6*x7*x8^2 + x2*x3*x4^2*x5^2*x6*x7*x9 + -x2*x3*x4^2*x5^2*x6*x7 + x2*x3*x4^2*x5^2*x7^3*x8^2*x9 + -x2*x3*x4^2*x5^2*x7^3*x8^2 + -x2*x3*x4^2*x5^2*x7^3*x9 + x2*x3*x4^2*x5^2*x7^3 + -x2*x3*x4^2*x5^2*x7^2*x8^2*x9 + x2*x3*x4^2*x5^2*x7^2*x8^2 + x2*x3*x4^2*x5^2*x7^2*x9 + -x2*x3*x4^2*x5^2*x7^2 + x2*x3*x4^2*x5^2*x7*x8*x9 + -x2*x3*x4^2*x5^2*x7*x8 + -x2*x3*x4^2*x5^2*x7*x9 + x2*x3*x4^2*x5^2*x7 + -x2*x3*x4^2*x5^2*x8*x9 + x2*x3*x4^2*x5^2*x8 + x2*x3*x4^2*x5^2*x9 + -x2*x3*x4^2*x5^2 + -x2*x3*x4^2*x5*x6^3*x7^2*x8^2*x9 + x2*x3*x4^2*x5*x6^3*x7^2*x8^2 + x2*x3*x4^2*x5*x6^3*x7^2*x8*x9 + -x2*x3*x4^2*x5*x6^3*x7^2*x8 + -x2*x3*x4^2*x5*x6^3*x7*x8^2*x9^2 + 2*x2*x3*x4^2*x5*x6^3*x7*x8^2*x9 + -x2*x3*x4^2*x5*x6^3*x7*x8^2 + -x2*x3*x4^2*x5*x6^3*x7*x8*x9^3 + 2*x2*x3*x4^2*x5*x6^3*x7*x8*x9^2 + -2*x2*x3*x4^2*x5*x6^3*x7*x8*x9 + x2*x3*x4^2*x5*x6^3*x7*x8 + x2*x3*x4^2*x5*x6^3*x7*x9^3 + -x2*x3*x4^2*x5*x6^3*x7*x9^2 + x2*x3*x4^2*x5*x6^3*x8^2*x9^2 + -x2*x3*x4^2*x5*x6^3*x8^2*x9 + x2*x3*x4^2*x5*x6^3*x8*x9^3 + -2*x2*x3*x4^2*x5*x6^3*x8*x9^2 + x2*x3*x4^2*x5*x6^3*x8*x9 + -x2*x3*x4^2*x5*x6^3*x9^3 + x2*x3*x4^2*x5*x6^3*x9^2 + x2*x3*x4^2*x5*x6^2*x7^2*x8^2*x9 + -x2*x3*x4^2*x5*x6^2*x7^2*x8^2 + -x2*x3*x4^2*x5*x6^2*x7^2*x8*x9 + x2*x3*x4^2*x5*x6^2*x7^2*x8 + -x2*x3*x4^2*x5*x6^2*x8^2*x9 + x2*x3*x4^2*x5*x6^2*x8^2 + x2*x3*x4^2*x5*x6^2*x8*x9 + -x2*x3*x4^2*x5*x6^2*x8 + -x2*x3*x4^2*x5*x6*x7^4*x8*x9 + x2*x3*x4^2*x5*x6*x7^4*x8 + x2*x3*x4^2*x5*x6*x7^4*x9 + -x2*x3*x4^2*x5*x6*x7^4 + x2*x3*x4^2*x5*x6*x7^3*x8*x9 + -x2*x3*x4^2*x5*x6*x7^3*x8 + -x2*x3*x4^2*x5*x6*x7^3*x9 + x2*x3*x4^2*x5*x6*x7^3 + x2*x3*x4^2*x5*x6*x7*x8*x9^3 + -x2*x3*x4^2*x5*x6*x7*x8*x9^2 + -x2*x3*x4^2*x5*x6*x7*x9^3 + x2*x3*x4^2*x5*x6*x7*x9^2 + -x2*x3*x4^2*x5*x6*x8*x9^3 + x2*x3*x4^2*x5*x6*x8*x9^2 + x2*x3*x4^2*x5*x6*x9^3 + -x2*x3*x4^2*x5*x6*x9^2 + x2*x3*x4^2*x5*x7^4*x8*x9 + -x2*x3*x4^2*x5*x7^4*x8 + -x2*x3*x4^2*x5*x7^4*x9 + x2*x3*x4^2*x5*x7^4 + -x2*x3*x4^2*x5*x7^3*x8*x9 + x2*x3*x4^2*x5*x7^3*x8 + x2*x3*x4^2*x5*x7^3*x9 + -x2*x3*x4^2*x5*x7^3 + x2*x3*x4^2*x5*x7*x8^2*x9^2 + -2*x2*x3*x4^2*x5*x7*x8^2*x9 + x2*x3*x4^2*x5*x7*x8^2 + -x2*x3*x4^2*x5*x7*x8*x9^2 + 2*x2*x3*x4^2*x5*x7*x8*x9 + -x2*x3*x4^2*x5*x7*x8 + -x2*x3*x4^2*x5*x8^2*x9^2 + 2*x2*x3*x4^2*x5*x8^2*x9 + -x2*x3*x4^2*x5*x8^2 + x2*x3*x4^2*x5*x8*x9^2 + -2*x2*x3*x4^2*x5*x8*x9 + x2*x3*x4^2*x5*x8 + x2*x3*x4^2*x6^3*x7^2*x8^2*x9 + -x2*x3*x4^2*x6^3*x7^2*x8^2 + -x2*x3*x4^2*x6^3*x7^2*x9 + x2*x3*x4^2*x6^3*x7^2 + x2*x3*x4^2*x6^3*x7*x8^2*x9^2 + -2*x2*x3*x4^2*x6^3*x7*x8^2*x9 + x2*x3*x4^2*x6^3*x7*x8^2 + x2*x3*x4^2*x6^3*x7*x8*x9^3 + -2*x2*x3*x4^2*x6^3*x7*x8*x9^2 + x2*x3*x4^2*x6^3*x7*x8*x9 + -x2*x3*x4^2*x6^3*x7*x9^3 + x2*x3*x4^2*x6^3*x7*x9^2 + x2*x3*x4^2*x6^3*x7*x9 + -x2*x3*x4^2*x6^3*x7 + -x2*x3*x4^2*x6^3*x8^2*x9^2 + x2*x3*x4^2*x6^3*x8^2*x9 + -x2*x3*x4^2*x6^3*x8*x9^3 + 2*x2*x3*x4^2*x6^3*x8*x9^2 + -x2*x3*x4^2*x6^3*x8*x9 + x2*x3*x4^2*x6^3*x9^3 + -x2*x3*x4^2*x6^3*x9^2 + x2*x3*x4^2*x6*x7^4*x8*x9 + -x2*x3*x4^2*x6*x7^4*x8 + -x2*x3*x4^2*x6*x7^4*x9 + x2*x3*x4^2*x6*x7^4 + x2*x3*x4^2*x6*x7^3*x8^2*x9 + -x2*x3*x4^2*x6*x7^3*x8^2 + -x2*x3*x4^2*x6*x7^3*x8*x9 + x2*x3*x4^2*x6*x7^3*x8 + -x2*x3*x4^2*x6*x7^2*x8^2*x9 + x2*x3*x4^2*x6*x7^2*x8^2 + x2*x3*x4^2*x6*x7^2*x9 + -x2*x3*x4^2*x6*x7^2 + -x2*x3*x4^2*x6*x7*x8*x9^3 + x2*x3*x4^2*x6*x7*x8*x9^2 + x2*x3*x4^2*x6*x7*x9^3 + -x2*x3*x4^2*x6*x7*x9^2 + x2*x3*x4^2*x6*x8*x9^3 + -x2*x3*x4^2*x6*x8*x9^2 + -x2*x3*x4^2*x6*x9^3 + x2*x3*x4^2*x6*x9^2 + -x2*x3*x4^2*x7^4*x8*x9 + x2*x3*x4^2*x7^4*x8 + x2*x3*x4^2*x7^4*x9 + -x2*x3*x4^2*x7^4 + -x2*x3*x4^2*x7^3*x8^2*x9 + x2*x3*x4^2*x7^3*x8^2 + x2*x3*x4^2*x7^3*x8*x9 + -x2*x3*x4^2*x7^3*x8 + -x2*x3*x4^2*x7*x8^2*x9^2 + 2*x2*x3*x4^2*x7*x8^2*x9 + -x2*x3*x4^2*x7*x8^2 + x2*x3*x4^2*x7*x8*x9^2 + -x2*x3*x4^2*x7*x8*x9 + -x2*x3*x4^2*x7*x9 + x2*x3*x4^2*x7 + x2*x3*x4^2*x8^2*x9^2 + -x2*x3*x4^2*x8^2*x9 + -x2*x3*x4^2*x8*x9^2 + x2*x3*x4^2*x8*x9 + -x2*x3*x4*x5^5*x6*x7^2*x8*x9 + x2*x3*x4*x5^5*x6*x7^2*x8 + x2*x3*x4*x5^5*x6*x7^2*x9 + -x2*x3*x4*x5^5*x6*x7^2 + x2*x3*x4*x5^5*x6*x7*x8*x9 + -x2*x3*x4*x5^5*x6*x7*x8 + -x2*x3*x4*x5^5*x6*x7*x9 + x2*x3*x4*x5^5*x6*x7 + x2*x3*x4*x5^5*x7^2*x8*x9 + -x2*x3*x4*x5^5*x7^2*x8 + -x2*x3*x4*x5^5*x7^2*x9 + x2*x3*x4*x5^5*x7^2 + -x2*x3*x4*x5^5*x7*x8*x9 + x2*x3*x4*x5^5*x7*x8 + x2*x3*x4*x5^5*x7*x9 + -x2*x3*x4*x5^5*x7 + x2*x3*x4*x5^4*x6^2*x7^3*x8*x9 + -x2*x3*x4*x5^4*x6^2*x7^3*x8 + -x2*x3*x4*x5^4*x6^2*x7^3*x9 + x2*x3*x4*x5^4*x6^2*x7^3 + -2*x2*x3*x4*x5^4*x6^2*x7^2*x8*x9 + 2*x2*x3*x4*x5^4*x6^2*x7^2*x8 + 2*x2*x3*x4*x5^4*x6^2*x7^2*x9 + -2*x2*x3*x4*x5^4*x6^2*x7^2 + x2*x3*x4*x5^4*x6^2*x7*x8*x9 + -x2*x3*x4*x5^4*x6^2*x7*x8 + -x2*x3*x4*x5^4*x6^2*x7*x9 + x2*x3*x4*x5^4*x6^2*x7 + -x2*x3*x4*x5^4*x6*x7^3*x8*x9 + x2*x3*x4*x5^4*x6*x7^3*x8 + x2*x3*x4*x5^4*x6*x7^3*x9 + -x2*x3*x4*x5^4*x6*x7^3 + x2*x3*x4*x5^4*x6*x7^2*x8^2*x9^2 + -x2*x3*x4*x5^4*x6*x7^2*x8^2*x9 + -x2*x3*x4*x5^4*x6*x7^2*x8*x9^2 + 3*x2*x3*x4*x5^4*x6*x7^2*x8*x9 + -2*x2*x3*x4*x5^4*x6*x7^2*x8 + -2*x2*x3*x4*x5^4*x6*x7^2*x9 + 2*x2*x3*x4*x5^4*x6*x7^2 + -x2*x3*x4*x5^4*x6*x7*x8^2*x9^2 + x2*x3*x4*x5^4*x6*x7*x8^2*x9 + x2*x3*x4*x5^4*x6*x7*x8*x9^2 + -2*x2*x3*x4*x5^4*x6*x7*x8*x9 + x2*x3*x4*x5^4*x6*x7*x8 + x2*x3*x4*x5^4*x6*x7*x9 + -x2*x3*x4*x5^4*x6*x7 + -x2*x3*x4*x5^4*x7^2*x8^2*x9^2 + x2*x3*x4*x5^4*x7^2*x8^2*x9 + x2*x3*x4*x5^4*x7^2*x8*x9^2 + -x2*x3*x4*x5^4*x7^2*x8*x9 + x2*x3*x4*x5^4*x7*x8^2*x9^2 + -x2*x3*x4*x5^4*x7*x8^2*x9 + -x2*x3*x4*x5^4*x7*x8*x9^2 + x2*x3*x4*x5^4*x7*x8*x9 + x2*x3*x4*x5^3*x6^2*x7^2*x8^2*x9^2 + -x2*x3*x4*x5^3*x6^2*x7^2*x8^2 + -2*x2*x3*x4*x5^3*x6^2*x7^2*x8*x9^2 + x2*x3*x4*x5^3*x6^2*x7^2*x8*x9 + x2*x3*x4*x5^3*x6^2*x7^2*x8 + x2*x3*x4*x5^3*x6^2*x7^2*x9^2 + -x2*x3*x4*x5^3*x6^2*x7^2*x9 + -x2*x3*x4*x5^3*x6^2*x7*x8^2*x9^2 + x2*x3*x4*x5^3*x6^2*x7*x8^2 + 2*x2*x3*x4*x5^3*x6^2*x7*x8*x9^2 + -x2*x3*x4*x5^3*x6^2*x7*x8*x9 + -x2*x3*x4*x5^3*x6^2*x7*x8 + -x2*x3*x4*x5^3*x6^2*x7*x9^2 + x2*x3*x4*x5^3*x6^2*x7*x9 + -x2*x3*x4*x5^3*x6*x7^2*x8^2*x9^2 + x2*x3*x4*x5^3*x6*x7^2*x8^2 + x2*x3*x4*x5^3*x6*x7^2*x8*x9^2 + x2*x3*x4*x5^3*x6*x7^2*x8*x9 + -2*x2*x3*x4*x5^3*x6*x7^2*x8 + -x2*x3*x4*x5^3*x6*x7^2*x9 + x2*x3*x4*x5^3*x6*x7^2 + x2*x3*x4*x5^3*x6*x7*x8^2*x9^2 + -x2*x3*x4*x5^3*x6*x7*x8^2 + -x2*x3*x4*x5^3*x6*x7*x8*x9^2 + -x2*x3*x4*x5^3*x6*x7*x8*x9 + 2*x2*x3*x4*x5^3*x6*x7*x8 + x2*x3*x4*x5^3*x6*x7*x9 + -x2*x3*x4*x5^3*x6*x7 + x2*x3*x4*x5^3*x7^2*x8*x9^2 + -2*x2*x3*x4*x5^3*x7^2*x8*x9 + x2*x3*x4*x5^3*x7^2*x8 + -x2*x3*x4*x5^3*x7^2*x9^2 + 2*x2*x3*x4*x5^3*x7^2*x9 + -x2*x3*x4*x5^3*x7^2 + -x2*x3*x4*x5^3*x7*x8*x9^2 + 2*x2*x3*x4*x5^3*x7*x8*x9 + -x2*x3*x4*x5^3*x7*x8 + x2*x3*x4*x5^3*x7*x9^2 + -2*x2*x3*x4*x5^3*x7*x9 + x2*x3*x4*x5^3*x7 + x2*x3*x4*x5^2*x6^3*x7^3*x8^2*x9 + -x2*x3*x4*x5^2*x6^3*x7^3*x8^2 + x2*x3*x4*x5^2*x6^3*x7^3*x8*x9^2 + -2*x2*x3*x4*x5^2*x6^3*x7^3*x8*x9 + x2*x3*x4*x5^2*x6^3*x7^3*x8 + -x2*x3*x4*x5^2*x6^3*x7^3*x9^2 + x2*x3*x4*x5^2*x6^3*x7^3*x9 + -x2*x3*x4*x5^2*x6^3*x7^2*x8^2*x9 + x2*x3*x4*x5^2*x6^3*x7^2*x8^2 + -x2*x3*x4*x5^2*x6^3*x7^2*x8*x9^2 + 2*x2*x3*x4*x5^2*x6^3*x7^2*x8*x9 + -x2*x3*x4*x5^2*x6^3*x7^2*x8 + x2*x3*x4*x5^2*x6^3*x7^2*x9^2 + -x2*x3*x4*x5^2*x6^3*x7^2*x9 + x2*x3*x4*x5^2*x6^3*x7*x8^2*x9^2 + -x2*x3*x4*x5^2*x6^3*x7*x8^2*x9 + -x2*x3*x4*x5^2*x6^3*x7*x8*x9^2 + x2*x3*x4*x5^2*x6^3*x7*x8*x9 + -x2*x3*x4*x5^2*x6^3*x8^2*x9^2 + x2*x3*x4*x5^2*x6^3*x8^2*x9 + x2*x3*x4*x5^2*x6^3*x8*x9^2 + -x2*x3*x4*x5^2*x6^3*x8*x9 + -x2*x3*x4*x5^2*x6^2*x7^3*x8^2*x9 + x2*x3*x4*x5^2*x6^2*x7^3*x8^2 + x2*x3*x4*x5^2*x6^2*x7^3*x9 + -x2*x3*x4*x5^2*x6^2*x7^3 + 2*x2*x3*x4*x5^2*x6^2*x7^2*x8*x9 + -2*x2*x3*x4*x5^2*x6^2*x7^2*x8 + -2*x2*x3*x4*x5^2*x6^2*x7^2*x9 + 2*x2*x3*x4*x5^2*x6^2*x7^2 + -x2*x3*x4*x5^2*x6^2*x7*x8^2*x9^2 + 2*x2*x3*x4*x5^2*x6^2*x7*x8^2*x9 + -x2*x3*x4*x5^2*x6^2*x7*x8^2 + x2*x3*x4*x5^2*x6^2*x7*x8*x9^2 + -3*x2*x3*x4*x5^2*x6^2*x7*x8*x9 + 2*x2*x3*x4*x5^2*x6^2*x7*x8 + x2*x3*x4*x5^2*x6^2*x7*x9 + -x2*x3*x4*x5^2*x6^2*x7 + x2*x3*x4*x5^2*x6^2*x8^2*x9^2 + -x2*x3*x4*x5^2*x6^2*x8^2*x9 + -x2*x3*x4*x5^2*x6^2*x8*x9^2 + x2*x3*x4*x5^2*x6^2*x8*x9 + -2*x2*x3*x4*x5^2*x6*x7^3*x8*x9^2 + 3*x2*x3*x4*x5^2*x6*x7^3*x8*x9 + -x2*x3*x4*x5^2*x6*x7^3*x8 + 2*x2*x3*x4*x5^2*x6*x7^3*x9^2 + -3*x2*x3*x4*x5^2*x6*x7^3*x9 + x2*x3*x4*x5^2*x6*x7^3 + x2*x3*x4*x5^2*x6*x7^2*x8^2*x9 + -x2*x3*x4*x5^2*x6*x7^2*x8^2 + 2*x2*x3*x4*x5^2*x6*x7^2*x8*x9^2 + -5*x2*x3*x4*x5^2*x6*x7^2*x8*x9 + 3*x2*x3*x4*x5^2*x6*x7^2*x8 + -2*x2*x3*x4*x5^2*x6*x7^2*x9^2 + 4*x2*x3*x4*x5^2*x6*x7^2*x9 + -2*x2*x3*x4*x5^2*x6*x7^2 + -x2*x3*x4*x5^2*x6*x7*x8^2*x9 + x2*x3*x4*x5^2*x6*x7*x8^2 + 2*x2*x3*x4*x5^2*x6*x7*x8*x9 + -2*x2*x3*x4*x5^2*x6*x7*x8 + -x2*x3*x4*x5^2*x6*x7*x9 + x2*x3*x4*x5^2*x6*x7 + x2*x3*x4*x5^2*x7^3*x8*x9^2 + -x2*x3*x4*x5^2*x7^3*x8*x9 + -x2*x3*x4*x5^2*x7^3*x9^2 + x2*x3*x4*x5^2*x7^3*x9 + -x2*x3*x4*x5^2*x7^2*x8*x9^2 + x2*x3*x4*x5^2*x7^2*x8*x9 + x2*x3*x4*x5^2*x7^2*x9^2 + -x2*x3*x4*x5^2*x7^2*x9 + x2*x3*x4*x5*x6^4*x7^4*x8*x9 + -x2*x3*x4*x5*x6^4*x7^4*x8 + -x2*x3*x4*x5*x6^4*x7^4*x9 + x2*x3*x4*x5*x6^4*x7^4 + -x2*x3*x4*x5*x6^4*x7^3*x8*x9 + x2*x3*x4*x5*x6^4*x7^3*x8 + x2*x3*x4*x5*x6^4*x7^3*x9 + -x2*x3*x4*x5*x6^4*x7^3 + x2*x3*x4*x5*x6^4*x7^2*x8*x9^2 + -x2*x3*x4*x5*x6^4*x7^2*x8*x9 + -x2*x3*x4*x5*x6^4*x7^2*x9^2 + x2*x3*x4*x5*x6^4*x7^2*x9 + x2*x3*x4*x5*x6^4*x7*x8*x9^3 + -2*x2*x3*x4*x5*x6^4*x7*x8*x9^2 + x2*x3*x4*x5*x6^4*x7*x8*x9 + -x2*x3*x4*x5*x6^4*x7*x9^3 + 2*x2*x3*x4*x5*x6^4*x7*x9^2 + -x2*x3*x4*x5*x6^4*x7*x9 + -x2*x3*x4*x5*x6^4*x8*x9^3 + x2*x3*x4*x5*x6^4*x8*x9^2 + x2*x3*x4*x5*x6^4*x9^3 + -x2*x3*x4*x5*x6^4*x9^2 + -x2*x3*x4*x5*x6^3*x7^4*x8*x9 + x2*x3*x4*x5*x6^3*x7^4*x8 + x2*x3*x4*x5*x6^3*x7^4*x9 + -x2*x3*x4*x5*x6^3*x7^4 + -x2*x3*x4*x5*x6^3*x7^3*x8^2*x9 + x2*x3*x4*x5*x6^3*x7^3*x8^2 + 2*x2*x3*x4*x5*x6^3*x7^3*x8*x9 + -2*x2*x3*x4*x5*x6^3*x7^3*x8 + -x2*x3*x4*x5*x6^3*x7^3*x9 + x2*x3*x4*x5*x6^3*x7^3 + x2*x3*x4*x5*x6^3*x7^2*x8^2*x9 + -x2*x3*x4*x5*x6^3*x7^2*x8^2 + -x2*x3*x4*x5*x6^3*x7^2*x8*x9^2 + x2*x3*x4*x5*x6^3*x7^2*x8 + x2*x3*x4*x5*x6^3*x7^2*x9^2 + -x2*x3*x4*x5*x6^3*x7^2*x9 + -x2*x3*x4*x5*x6^3*x7*x8^2*x9^2 + x2*x3*x4*x5*x6^3*x7*x8^2*x9 + -x2*x3*x4*x5*x6^3*x7*x8*x9^3 + 3*x2*x3*x4*x5*x6^3*x7*x8*x9^2 + -2*x2*x3*x4*x5*x6^3*x7*x8*x9 + x2*x3*x4*x5*x6^3*x7*x9^3 + -2*x2*x3*x4*x5*x6^3*x7*x9^2 + x2*x3*x4*x5*x6^3*x7*x9 + x2*x3*x4*x5*x6^3*x8^2*x9^2 + -x2*x3*x4*x5*x6^3*x8^2*x9 + x2*x3*x4*x5*x6^3*x8*x9^3 + -2*x2*x3*x4*x5*x6^3*x8*x9^2 + x2*x3*x4*x5*x6^3*x8*x9 + -x2*x3*x4*x5*x6^3*x9^3 + x2*x3*x4*x5*x6^3*x9^2 + x2*x3*x4*x5*x6^2*x7^3*x8^2*x9 + -x2*x3*x4*x5*x6^2*x7^3*x8^2 + -x2*x3*x4*x5*x6^2*x7^3*x8*x9^2 + x2*x3*x4*x5*x6^2*x7^3*x8 + x2*x3*x4*x5*x6^2*x7^3*x9^2 + -x2*x3*x4*x5*x6^2*x7^3*x9 + -x2*x3*x4*x5*x6^2*x7^2*x8^2*x9^2 + x2*x3*x4*x5*x6^2*x7^2*x8^2 + 2*x2*x3*x4*x5*x6^2*x7^2*x8*x9^2 + -x2*x3*x4*x5*x6^2*x7^2*x8*x9 + -x2*x3*x4*x5*x6^2*x7^2*x8 + -x2*x3*x4*x5*x6^2*x7^2*x9^2 + x2*x3*x4*x5*x6^2*x7^2*x9 + 2*x2*x3*x4*x5*x6^2*x7*x8^2*x9^2 + -2*x2*x3*x4*x5*x6^2*x7*x8^2*x9 + -2*x2*x3*x4*x5*x6^2*x7*x8*x9^2 + 2*x2*x3*x4*x5*x6^2*x7*x8*x9 + -x2*x3*x4*x5*x6^2*x8^2*x9^2 + x2*x3*x4*x5*x6^2*x8^2*x9 + x2*x3*x4*x5*x6^2*x8*x9^2 + -x2*x3*x4*x5*x6^2*x8*x9 + -x2*x3*x4*x5*x6*x7^4*x8*x9^2 + x2*x3*x4*x5*x6*x7^4*x8*x9 + x2*x3*x4*x5*x6*x7^4*x9^2 + -x2*x3*x4*x5*x6*x7^4*x9 + 2*x2*x3*x4*x5*x6*x7^3*x8*x9^2 + -2*x2*x3*x4*x5*x6*x7^3*x8*x9 + -2*x2*x3*x4*x5*x6*x7^3*x9^2 + 2*x2*x3*x4*x5*x6*x7^3*x9 + -x2*x3*x4*x5*x6*x7^2*x8*x9^2 + x2*x3*x4*x5*x6*x7^2*x8*x9 + x2*x3*x4*x5*x6*x7^2*x9^2 + -x2*x3*x4*x5*x6*x7^2*x9 + x2*x3*x4*x5*x7^4*x8*x9^2 + -x2*x3*x4*x5*x7^4*x8*x9 + -x2*x3*x4*x5*x7^4*x9^2 + x2*x3*x4*x5*x7^4*x9 + -x2*x3*x4*x5*x7^3*x8*x9^2 + x2*x3*x4*x5*x7^3*x8*x9 + x2*x3*x4*x5*x7^3*x9^2 + -x2*x3*x4*x5*x7^3*x9 + x2*x3*x4*x5*x7^2*x8^2*x9^2 + -x2*x3*x4*x5*x7^2*x8^2*x9 + -x2*x3*x4*x5*x7^2*x8*x9^2 + x2*x3*x4*x5*x7^2*x8*x9 + -x2*x3*x4*x5*x7*x8^2*x9^2 + x2*x3*x4*x5*x7*x8^2*x9 + x2*x3*x4*x5*x7*x8*x9^2 + -x2*x3*x4*x5*x7*x8*x9 + -x2*x3*x4*x6^4*x7^4*x8*x9 + x2*x3*x4*x6^4*x7^4*x8 + x2*x3*x4*x6^4*x7^4*x9 + -x2*x3*x4*x6^4*x7^4 + x2*x3*x4*x6^4*x7^3*x8*x9 + -x2*x3*x4*x6^4*x7^3*x8 + -x2*x3*x4*x6^4*x7^3*x9 + x2*x3*x4*x6^4*x7^3 + -x2*x3*x4*x6^4*x7^2*x8*x9^2 + x2*x3*x4*x6^4*x7^2*x8*x9 + x2*x3*x4*x6^4*x7^2*x9^2 + -x2*x3*x4*x6^4*x7^2*x9 + -x2*x3*x4*x6^4*x7*x8*x9^3 + 2*x2*x3*x4*x6^4*x7*x8*x9^2 + -x2*x3*x4*x6^4*x7*x8*x9 + x2*x3*x4*x6^4*x7*x9^3 + -2*x2*x3*x4*x6^4*x7*x9^2 + x2*x3*x4*x6^4*x7*x9 + x2*x3*x4*x6^4*x8*x9^3 + -x2*x3*x4*x6^4*x8*x9^2 + -x2*x3*x4*x6^4*x9^3 + x2*x3*x4*x6^4*x9^2 + x2*x3*x4*x6^3*x7^4*x8*x9 + -x2*x3*x4*x6^3*x7^4*x8 + -x2*x3*x4*x6^3*x7^4*x9 + x2*x3*x4*x6^3*x7^4 + -x2*x3*x4*x6^3*x7^3*x8*x9^2 + x2*x3*x4*x6^3*x7^3*x8 + x2*x3*x4*x6^3*x7^3*x9^2 + -x2*x3*x4*x6^3*x7^3 + 2*x2*x3*x4*x6^3*x7^2*x8*x9^2 + -2*x2*x3*x4*x6^3*x7^2*x8*x9 + -2*x2*x3*x4*x6^3*x7^2*x9^2 + 2*x2*x3*x4*x6^3*x7^2*x9 + x2*x3*x4*x6^3*x7*x8*x9^3 + -2*x2*x3*x4*x6^3*x7*x8*x9^2 + x2*x3*x4*x6^3*x7*x8*x9 + -x2*x3*x4*x6^3*x7*x9^3 + 2*x2*x3*x4*x6^3*x7*x9^2 + -x2*x3*x4*x6^3*x7*x9 + -x2*x3*x4*x6^3*x8*x9^3 + x2*x3*x4*x6^3*x8*x9^2 + x2*x3*x4*x6^3*x9^3 + -x2*x3*x4*x6^3*x9^2 + x2*x3*x4*x6^2*x7^3*x8*x9^2 + -x2*x3*x4*x6^2*x7^3*x8*x9 + -x2*x3*x4*x6^2*x7^3*x9^2 + x2*x3*x4*x6^2*x7^3*x9 + -x2*x3*x4*x6^2*x7*x8*x9^2 + x2*x3*x4*x6^2*x7*x8*x9 + x2*x3*x4*x6^2*x7*x9^2 + -x2*x3*x4*x6^2*x7*x9 + x2*x3*x4*x6*x7^4*x8*x9^2 + -x2*x3*x4*x6*x7^4*x8*x9 + -x2*x3*x4*x6*x7^4*x9^2 + x2*x3*x4*x6*x7^4*x9 + -x2*x3*x4*x6*x7^2*x8*x9^2 + x2*x3*x4*x6*x7^2*x8*x9 + x2*x3*x4*x6*x7^2*x9^2 + -x2*x3*x4*x6*x7^2*x9 + -x2*x3*x4*x7^4*x8*x9^2 + x2*x3*x4*x7^4*x8*x9 + x2*x3*x4*x7^4*x9^2 + -x2*x3*x4*x7^4*x9 + x2*x3*x4*x7*x8*x9^2 + -x2*x3*x4*x7*x8*x9 + -x2*x3*x4*x7*x9^2 + x2*x3*x4*x7*x9 + x2*x3*x5^5*x6*x7^2*x8*x9 + -x2*x3*x5^5*x6*x7^2*x8 + -x2*x3*x5^5*x6*x7^2*x9 + x2*x3*x5^5*x6*x7^2 + -x2*x3*x5^5*x6*x7*x8*x9 + x2*x3*x5^5*x6*x7*x8 + x2*x3*x5^5*x6*x7*x9 + -x2*x3*x5^5*x6*x7 + -x2*x3*x5^5*x7^2*x8*x9 + x2*x3*x5^5*x7^2*x8 + x2*x3*x5^5*x7^2*x9 + -x2*x3*x5^5*x7^2 + x2*x3*x5^5*x7*x8*x9 + -x2*x3*x5^5*x7*x8 + -x2*x3*x5^5*x7*x9 + x2*x3*x5^5*x7 + -x2*x3*x5^4*x6^2*x7^3*x8*x9 + x2*x3*x5^4*x6^2*x7^3*x8 + x2*x3*x5^4*x6^2*x7^3*x9 + -x2*x3*x5^4*x6^2*x7^3 + 2*x2*x3*x5^4*x6^2*x7^2*x8*x9 + -2*x2*x3*x5^4*x6^2*x7^2*x8 + -2*x2*x3*x5^4*x6^2*x7^2*x9 + 2*x2*x3*x5^4*x6^2*x7^2 + -x2*x3*x5^4*x6^2*x7*x8*x9 + x2*x3*x5^4*x6^2*x7*x8 + x2*x3*x5^4*x6^2*x7*x9 + -x2*x3*x5^4*x6^2*x7 + x2*x3*x5^4*x6*x7^3*x8*x9 + -x2*x3*x5^4*x6*x7^3*x8 + -x2*x3*x5^4*x6*x7^3*x9 + x2*x3*x5^4*x6*x7^3 + -x2*x3*x5^4*x6*x7^2*x8^2*x9^2 + x2*x3*x5^4*x6*x7^2*x8^2*x9 + x2*x3*x5^4*x6*x7^2*x8*x9^2 + -3*x2*x3*x5^4*x6*x7^2*x8*x9 + 2*x2*x3*x5^4*x6*x7^2*x8 + 2*x2*x3*x5^4*x6*x7^2*x9 + -2*x2*x3*x5^4*x6*x7^2 + x2*x3*x5^4*x6*x7*x8^2*x9^2 + -x2*x3*x5^4*x6*x7*x8^2*x9 + -x2*x3*x5^4*x6*x7*x8*x9^2 + 2*x2*x3*x5^4*x6*x7*x8*x9 + -x2*x3*x5^4*x6*x7*x8 + -x2*x3*x5^4*x6*x7*x9 + x2*x3*x5^4*x6*x7 + x2*x3*x5^4*x7^2*x8^2*x9^2 + -x2*x3*x5^4*x7^2*x8^2*x9 + -x2*x3*x5^4*x7^2*x8*x9^2 + x2*x3*x5^4*x7^2*x8*x9 + -x2*x3*x5^4*x7*x8^2*x9^2 + x2*x3*x5^4*x7*x8^2*x9 + x2*x3*x5^4*x7*x8*x9^2 + -x2*x3*x5^4*x7*x8*x9 + -x2*x3*x5^3*x6^2*x7^2*x8^2*x9^2 + x2*x3*x5^3*x6^2*x7^2*x8^2 + 2*x2*x3*x5^3*x6^2*x7^2*x8*x9^2 + -x2*x3*x5^3*x6^2*x7^2*x8*x9 + -x2*x3*x5^3*x6^2*x7^2*x8 + -x2*x3*x5^3*x6^2*x7^2*x9^2 + x2*x3*x5^3*x6^2*x7^2*x9 + x2*x3*x5^3*x6^2*x7*x8^2*x9^2 + -x2*x3*x5^3*x6^2*x7*x8^2 + -2*x2*x3*x5^3*x6^2*x7*x8*x9^2 + x2*x3*x5^3*x6^2*x7*x8*x9 + x2*x3*x5^3*x6^2*x7*x8 + x2*x3*x5^3*x6^2*x7*x9^2 + -x2*x3*x5^3*x6^2*x7*x9 + x2*x3*x5^3*x6*x7^2*x8^2*x9^2 + -x2*x3*x5^3*x6*x7^2*x8^2 + -x2*x3*x5^3*x6*x7^2*x8*x9^2 + x2*x3*x5^3*x6*x7^2*x8 + -x2*x3*x5^3*x6*x7*x8^2*x9^2 + x2*x3*x5^3*x6*x7*x8^2 + x2*x3*x5^3*x6*x7*x8*x9^2 + -x2*x3*x5^3*x6*x7*x8 + -x2*x3*x5^3*x7^2*x8*x9^2 + x2*x3*x5^3*x7^2*x8*x9 + x2*x3*x5^3*x7^2*x9^2 + -x2*x3*x5^3*x7^2*x9 + x2*x3*x5^3*x7*x8*x9^2 + -x2*x3*x5^3*x7*x8*x9 + -x2*x3*x5^3*x7*x9^2 + x2*x3*x5^3*x7*x9 + -x2*x3*x5^2*x6^4*x7*x8^2*x9 + x2*x3*x5^2*x6^4*x7*x8^2 + x2*x3*x5^2*x6^4*x7*x8*x9 + -x2*x3*x5^2*x6^4*x7*x8 + x2*x3*x5^2*x6^4*x8^2*x9 + -x2*x3*x5^2*x6^4*x8^2 + -x2*x3*x5^2*x6^4*x8*x9 + x2*x3*x5^2*x6^4*x8 + -x2*x3*x5^2*x6^3*x7^3*x8^2*x9 + x2*x3*x5^2*x6^3*x7^3*x8^2 + -x2*x3*x5^2*x6^3*x7^3*x8*x9^2 + 2*x2*x3*x5^2*x6^3*x7^3*x8*x9 + -x2*x3*x5^2*x6^3*x7^3*x8 + x2*x3*x5^2*x6^3*x7^3*x9^2 + -x2*x3*x5^2*x6^3*x7^3*x9 + x2*x3*x5^2*x6^3*x7^2*x8*x9^2 + -x2*x3*x5^2*x6^3*x7^2*x8 + -x2*x3*x5^2*x6^3*x7^2*x9^2 + x2*x3*x5^2*x6^3*x7^2 + -x2*x3*x5^2*x6^3*x7*x8^2*x9^2 + 2*x2*x3*x5^2*x6^3*x7*x8^2*x9 + -x2*x3*x5^2*x6^3*x7*x8^2 + x2*x3*x5^2*x6^3*x7*x8*x9^2 + -3*x2*x3*x5^2*x6^3*x7*x8*x9 + 2*x2*x3*x5^2*x6^3*x7*x8 + x2*x3*x5^2*x6^3*x7*x9 + -x2*x3*x5^2*x6^3*x7 + x2*x3*x5^2*x6^3*x8^2*x9^2 + -x2*x3*x5^2*x6^3*x8^2*x9 + -x2*x3*x5^2*x6^3*x8*x9^2 + x2*x3*x5^2*x6^3*x8*x9 + x2*x3*x5^2*x6^2*x7^3*x8*x9 + -x2*x3*x5^2*x6^2*x7^3*x8 + -x2*x3*x5^2*x6^2*x7^3*x9 + x2*x3*x5^2*x6^2*x7^3 + 2*x2*x3*x5^2*x6^2*x7^2*x8^2*x9 + -2*x2*x3*x5^2*x6^2*x7^2*x8^2 + -4*x2*x3*x5^2*x6^2*x7^2*x8*x9 + 4*x2*x3*x5^2*x6^2*x7^2*x8 + 2*x2*x3*x5^2*x6^2*x7^2*x9 + -2*x2*x3*x5^2*x6^2*x7^2 + x2*x3*x5^2*x6^2*x7*x8^2*x9^2 + -2*x2*x3*x5^2*x6^2*x7*x8^2*x9 + x2*x3*x5^2*x6^2*x7*x8^2 + -x2*x3*x5^2*x6^2*x7*x8*x9^2 + 3*x2*x3*x5^2*x6^2*x7*x8*x9 + -2*x2*x3*x5^2*x6^2*x7*x8 + -x2*x3*x5^2*x6^2*x7*x9 + x2*x3*x5^2*x6^2*x7 + -x2*x3*x5^2*x6^2*x8^2*x9^2 + x2*x3*x5^2*x6^2*x8^2 + x2*x3*x5^2*x6^2*x8*x9^2 + -x2*x3*x5^2*x6^2*x8 + x2*x3*x5^2*x6*x7^3*x8^2*x9 + -x2*x3*x5^2*x6*x7^3*x8^2 + 2*x2*x3*x5^2*x6*x7^3*x8*x9^2 + -3*x2*x3*x5^2*x6*x7^3*x8*x9 + x2*x3*x5^2*x6*x7^3*x8 + -2*x2*x3*x5^2*x6*x7^3*x9^2 + 2*x2*x3*x5^2*x6*x7^3*x9 + -2*x2*x3*x5^2*x6*x7^2*x8^2*x9 + 2*x2*x3*x5^2*x6*x7^2*x8^2 + -2*x2*x3*x5^2*x6*x7^2*x8*x9^2 + 4*x2*x3*x5^2*x6*x7^2*x8*x9 + -2*x2*x3*x5^2*x6*x7^2*x8 + 2*x2*x3*x5^2*x6*x7^2*x9^2 + -2*x2*x3*x5^2*x6*x7^2*x9 + x2*x3*x5^2*x6*x7*x8^2*x9 + -x2*x3*x5^2*x6*x7*x8^2 + -x2*x3*x5^2*x6*x7*x8*x9 + x2*x3*x5^2*x6*x7*x8 + -x2*x3*x5^2*x7^3*x8*x9^2 + x2*x3*x5^2*x7^3*x8 + x2*x3*x5^2*x7^3*x9^2 + -x2*x3*x5^2*x7^3 + x2*x3*x5^2*x7^2*x8*x9^2 + -x2*x3*x5^2*x7^2*x8 + -x2*x3*x5^2*x7^2*x9^2 + x2*x3*x5^2*x7^2 + -x2*x3*x5*x6^4*x7^4*x8*x9 + x2*x3*x5*x6^4*x7^4*x8 + x2*x3*x5*x6^4*x7^4*x9 + -x2*x3*x5*x6^4*x7^4 + x2*x3*x5*x6^4*x7^3*x8*x9 + -x2*x3*x5*x6^4*x7^3*x8 + -x2*x3*x5*x6^4*x7^3*x9 + x2*x3*x5*x6^4*x7^3 + -x2*x3*x5*x6^4*x7^2*x8*x9^2 + x2*x3*x5*x6^4*x7^2*x8*x9 + x2*x3*x5*x6^4*x7^2*x9^2 + -x2*x3*x5*x6^4*x7^2*x9 + x2*x3*x5*x6^4*x7*x8^2*x9 + -x2*x3*x5*x6^4*x7*x8^2 + -x2*x3*x5*x6^4*x7*x8*x9^3 + 2*x2*x3*x5*x6^4*x7*x8*x9^2 + -2*x2*x3*x5*x6^4*x7*x8*x9 + x2*x3*x5*x6^4*x7*x8 + x2*x3*x5*x6^4*x7*x9^3 + -2*x2*x3*x5*x6^4*x7*x9^2 + x2*x3*x5*x6^4*x7*x9 + -x2*x3*x5*x6^4*x8^2*x9 + x2*x3*x5*x6^4*x8^2 + x2*x3*x5*x6^4*x8*x9^3 + -x2*x3*x5*x6^4*x8*x9^2 + x2*x3*x5*x6^4*x8*x9 + -x2*x3*x5*x6^4*x8 + -x2*x3*x5*x6^4*x9^3 + x2*x3*x5*x6^4*x9^2 + x2*x3*x5*x6^3*x7^3*x8^2*x9 + -x2*x3*x5*x6^3*x7^3*x8^2 + -x2*x3*x5*x6^3*x7^3*x8*x9 + x2*x3*x5*x6^3*x7^3*x8 + x2*x3*x5*x6^3*x7^2*x8^2*x9 + -x2*x3*x5*x6^3*x7^2*x8^2 + x2*x3*x5*x6^3*x7^2*x8*x9^2 + -2*x2*x3*x5*x6^3*x7^2*x8*x9 + x2*x3*x5*x6^3*x7^2*x8 + -x2*x3*x5*x6^3*x7^2*x9^2 + x2*x3*x5*x6^3*x7^2*x9 + 2*x2*x3*x5*x6^3*x7*x8^2*x9^2 + -3*x2*x3*x5*x6^3*x7*x8^2*x9 + x2*x3*x5*x6^3*x7*x8^2 + x2*x3*x5*x6^3*x7*x8*x9^3 + -4*x2*x3*x5*x6^3*x7*x8*x9^2 + 4*x2*x3*x5*x6^3*x7*x8*x9 + -x2*x3*x5*x6^3*x7*x8 + -x2*x3*x5*x6^3*x7*x9^3 + 2*x2*x3*x5*x6^3*x7*x9^2 + -x2*x3*x5*x6^3*x7*x9 + -2*x2*x3*x5*x6^3*x8^2*x9^2 + x2*x3*x5*x6^3*x8^2*x9 + x2*x3*x5*x6^3*x8^2 + -x2*x3*x5*x6^3*x8*x9^3 + 3*x2*x3*x5*x6^3*x8*x9^2 + -x2*x3*x5*x6^3*x8*x9 + -x2*x3*x5*x6^3*x8 + x2*x3*x5*x6^3*x9^3 + -x2*x3*x5*x6^3*x9^2 + x2*x3*x5*x6^2*x7^4*x8*x9 + -x2*x3*x5*x6^2*x7^4*x8 + -x2*x3*x5*x6^2*x7^4*x9 + x2*x3*x5*x6^2*x7^4 + x2*x3*x5*x6^2*x7^3*x8*x9^2 + -2*x2*x3*x5*x6^2*x7^3*x8*x9 + x2*x3*x5*x6^2*x7^3*x8 + -x2*x3*x5*x6^2*x7^3*x9^2 + 2*x2*x3*x5*x6^2*x7^3*x9 + -x2*x3*x5*x6^2*x7^3 + x2*x3*x5*x6^2*x7^2*x8^2*x9^2 + -2*x2*x3*x5*x6^2*x7^2*x8^2*x9 + x2*x3*x5*x6^2*x7^2*x8^2 + -2*x2*x3*x5*x6^2*x7^2*x8*x9^2 + 3*x2*x3*x5*x6^2*x7^2*x8*x9 + -x2*x3*x5*x6^2*x7^2*x8 + x2*x3*x5*x6^2*x7^2*x9^2 + -x2*x3*x5*x6^2*x7^2*x9 + -2*x2*x3*x5*x6^2*x7*x8^2*x9^2 + 2*x2*x3*x5*x6^2*x7*x8^2*x9 + 2*x2*x3*x5*x6^2*x7*x8*x9^2 + -2*x2*x3*x5*x6^2*x7*x8*x9 + x2*x3*x5*x6^2*x8^2*x9^2 + -x2*x3*x5*x6^2*x8^2 + -x2*x3*x5*x6^2*x8*x9^2 + x2*x3*x5*x6^2*x8 + x2*x3*x5*x6*x7^4*x8*x9^2 + -x2*x3*x5*x6*x7^4*x8 + -x2*x3*x5*x6*x7^4*x9^2 + x2*x3*x5*x6*x7^4 + -2*x2*x3*x5*x6*x7^3*x8*x9^2 + x2*x3*x5*x6*x7^3*x8*x9 + x2*x3*x5*x6*x7^3*x8 + 2*x2*x3*x5*x6*x7^3*x9^2 + -x2*x3*x5*x6*x7^3*x9 + -x2*x3*x5*x6*x7^3 + x2*x3*x5*x6*x7^2*x8*x9^2 + -x2*x3*x5*x6*x7^2*x8*x9 + -x2*x3*x5*x6*x7^2*x9^2 + x2*x3*x5*x6*x7^2*x9 + -x2*x3*x5*x7^4*x8*x9^2 + x2*x3*x5*x7^4*x8 + x2*x3*x5*x7^4*x9^2 + -x2*x3*x5*x7^4 + -x2*x3*x5*x7^3*x8^2*x9 + x2*x3*x5*x7^3*x8^2 + x2*x3*x5*x7^3*x8*x9^2 + x2*x3*x5*x7^3*x8*x9 + -2*x2*x3*x5*x7^3*x8 + -x2*x3*x5*x7^3*x9^2 + x2*x3*x5*x7^3 + -x2*x3*x5*x7^2*x8^2*x9^2 + x2*x3*x5*x7^2*x8^2*x9 + x2*x3*x5*x7^2*x8*x9^2 + -x2*x3*x5*x7^2*x8*x9 + x2*x3*x5*x8^2*x9^2 + -x2*x3*x5*x8^2 + -x2*x3*x5*x8*x9^2 + x2*x3*x5*x8 + x2*x3*x6^4*x7^4*x8*x9 + -x2*x3*x6^4*x7^4*x8 + -x2*x3*x6^4*x7^4*x9 + x2*x3*x6^4*x7^4 + -x2*x3*x6^4*x7^3*x8*x9 + x2*x3*x6^4*x7^3*x8 + x2*x3*x6^4*x7^3*x9 + -x2*x3*x6^4*x7^3 + x2*x3*x6^4*x7^2*x8*x9^2 + -x2*x3*x6^4*x7^2*x8*x9 + -x2*x3*x6^4*x7^2*x9^2 + x2*x3*x6^4*x7^2*x9 + x2*x3*x6^4*x7*x8*x9^3 + -2*x2*x3*x6^4*x7*x8*x9^2 + x2*x3*x6^4*x7*x8*x9 + -x2*x3*x6^4*x7*x9^3 + 2*x2*x3*x6^4*x7*x9^2 + -x2*x3*x6^4*x7*x9 + -x2*x3*x6^4*x8*x9^3 + x2*x3*x6^4*x8*x9^2 + x2*x3*x6^4*x9^3 + -x2*x3*x6^4*x9^2 + x2*x3*x6^3*x7^3*x8*x9^2 + -x2*x3*x6^3*x7^3*x8*x9 + -x2*x3*x6^3*x7^3*x9^2 + x2*x3*x6^3*x7^3*x9 + -x2*x3*x6^3*x7^2*x8^2*x9 + x2*x3*x6^3*x7^2*x8^2 + -2*x2*x3*x6^3*x7^2*x8*x9^2 + 2*x2*x3*x6^3*x7^2*x8*x9 + 2*x2*x3*x6^3*x7^2*x9^2 + -x2*x3*x6^3*x7^2*x9 + -x2*x3*x6^3*x7^2 + -x2*x3*x6^3*x7*x8^2*x9^2 + x2*x3*x6^3*x7*x8^2*x9 + -x2*x3*x6^3*x7*x8*x9^3 + 3*x2*x3*x6^3*x7*x8*x9^2 + -x2*x3*x6^3*x7*x8*x9 + -x2*x3*x6^3*x7*x8 + x2*x3*x6^3*x7*x9^3 + -2*x2*x3*x6^3*x7*x9^2 + x2*x3*x6^3*x7 + x2*x3*x6^3*x8^2*x9^2 + -x2*x3*x6^3*x8^2 + x2*x3*x6^3*x8*x9^3 + -2*x2*x3*x6^3*x8*x9^2 + x2*x3*x6^3*x8 + -x2*x3*x6^3*x9^3 + x2*x3*x6^3*x9^2 + -x2*x3*x6^2*x7^4*x8*x9 + x2*x3*x6^2*x7^4*x8 + x2*x3*x6^2*x7^4*x9 + -x2*x3*x6^2*x7^4 + -x2*x3*x6^2*x7^3*x8*x9^2 + 2*x2*x3*x6^2*x7^3*x8*x9 + -x2*x3*x6^2*x7^3*x8 + x2*x3*x6^2*x7^3*x9^2 + -2*x2*x3*x6^2*x7^3*x9 + x2*x3*x6^2*x7^3 + x2*x3*x6^2*x7*x8*x9^2 + -x2*x3*x6^2*x7*x8*x9 + -x2*x3*x6^2*x7*x9^2 + x2*x3*x6^2*x7*x9 + -x2*x3*x6*x7^4*x8*x9^2 + x2*x3*x6*x7^4*x8 + x2*x3*x6*x7^4*x9^2 + -x2*x3*x6*x7^4 + -x2*x3*x6*x7^3*x8^2*x9 + x2*x3*x6*x7^3*x8^2 + x2*x3*x6*x7^3*x8*x9 + -x2*x3*x6*x7^3*x8 + x2*x3*x6*x7^2*x8^2*x9 + -x2*x3*x6*x7^2*x8^2 + x2*x3*x6*x7^2*x8*x9^2 + -x2*x3*x6*x7^2*x8*x9 + -x2*x3*x6*x7^2*x9^2 + x2*x3*x6*x7^2 + x2*x3*x7^4*x8*x9^2 + -x2*x3*x7^4*x8 + -x2*x3*x7^4*x9^2 + x2*x3*x7^4 + x2*x3*x7^3*x8^2*x9 + -x2*x3*x7^3*x8^2 + -x2*x3*x7^3*x8*x9 + x2*x3*x7^3*x8 + x2*x3*x7*x8^2*x9^2 + -x2*x3*x7*x8^2*x9 + -2*x2*x3*x7*x8*x9^2 + x2*x3*x7*x8*x9 + x2*x3*x7*x8 + x2*x3*x7*x9^2 + -x2*x3*x7 + -x2*x3*x8^2*x9^2 + x2*x3*x8^2 + x2*x3*x8*x9^2 + -x2*x3*x8 + -x2*x4^7*x5*x6^2*x7*x8^2*x9 + x2*x4^7*x5*x6^2*x7*x8^2 + x2*x4^7*x5*x6^2*x7*x8*x9 + -x2*x4^7*x5*x6^2*x7*x8 + x2*x4^7*x5*x6^2*x8^2*x9 + -x2*x4^7*x5*x6^2*x8^2 + -x2*x4^7*x5*x6^2*x8*x9 + x2*x4^7*x5*x6^2*x8 + x2*x4^7*x5*x6*x7*x8^2*x9 + -x2*x4^7*x5*x6*x7*x8^2 + -x2*x4^7*x5*x6*x7*x8*x9 + x2*x4^7*x5*x6*x7*x8 + -x2*x4^7*x5*x6*x8^2*x9 + x2*x4^7*x5*x6*x8^2 + x2*x4^7*x5*x6*x8*x9 + -x2*x4^7*x5*x6*x8 + x2*x4^7*x6^2*x7*x8^2*x9 + -x2*x4^7*x6^2*x7*x8^2 + -x2*x4^7*x6^2*x7*x8*x9 + x2*x4^7*x6^2*x7*x8 + -x2*x4^7*x6^2*x8^2*x9 + x2*x4^7*x6^2*x8^2 + x2*x4^7*x6^2*x8*x9 + -x2*x4^7*x6^2*x8 + -x2*x4^7*x6*x7*x8^2*x9 + x2*x4^7*x6*x7*x8^2 + x2*x4^7*x6*x7*x8*x9 + -x2*x4^7*x6*x7*x8 + x2*x4^7*x6*x8^2*x9 + -x2*x4^7*x6*x8^2 + -x2*x4^7*x6*x8*x9 + x2*x4^7*x6*x8 + -x2*x4^6*x5*x6^2*x7*x8^2*x9^2 + x2*x4^6*x5*x6^2*x7*x8^2*x9 + x2*x4^6*x5*x6^2*x7*x8*x9^2 + -x2*x4^6*x5*x6^2*x7*x8*x9 + x2*x4^6*x5*x6^2*x8^2*x9^2 + -x2*x4^6*x5*x6^2*x8^2*x9 + -x2*x4^6*x5*x6^2*x8*x9^2 + x2*x4^6*x5*x6^2*x8*x9 + x2*x4^6*x5*x6*x7*x8^2*x9^2 + -x2*x4^6*x5*x6*x7*x8^2*x9 + -x2*x4^6*x5*x6*x7*x8*x9^2 + x2*x4^6*x5*x6*x7*x8*x9 + -x2*x4^6*x5*x6*x8^2*x9^2 + x2*x4^6*x5*x6*x8^2*x9 + x2*x4^6*x5*x6*x8*x9^2 + -x2*x4^6*x5*x6*x8*x9 + x2*x4^6*x6^2*x7*x8^2*x9^2 + -x2*x4^6*x6^2*x7*x8^2*x9 + -x2*x4^6*x6^2*x7*x8*x9^2 + x2*x4^6*x6^2*x7*x8*x9 + -x2*x4^6*x6^2*x8^2*x9^2 + x2*x4^6*x6^2*x8^2*x9 + x2*x4^6*x6^2*x8*x9^2 + -x2*x4^6*x6^2*x8*x9 + -x2*x4^6*x6*x7*x8^2*x9^2 + x2*x4^6*x6*x7*x8^2*x9 + x2*x4^6*x6*x7*x8*x9^2 + -x2*x4^6*x6*x7*x8*x9 + x2*x4^6*x6*x8^2*x9^2 + -x2*x4^6*x6*x8^2*x9 + -x2*x4^6*x6*x8*x9^2 + x2*x4^6*x6*x8*x9 + -x2*x4^5*x5*x6^6*x7*x8*x9 + x2*x4^5*x5*x6^6*x7*x8 + x2*x4^5*x5*x6^6*x7*x9 + -x2*x4^5*x5*x6^6*x7 + x2*x4^5*x5*x6^6*x8*x9 + -x2*x4^5*x5*x6^6*x8 + -x2*x4^5*x5*x6^6*x9 + x2*x4^5*x5*x6^6 + -x2*x4^5*x5*x6^5*x7*x8^2*x9 + x2*x4^5*x5*x6^5*x7*x8^2 + 2*x2*x4^5*x5*x6^5*x7*x8*x9 + -2*x2*x4^5*x5*x6^5*x7*x8 + -x2*x4^5*x5*x6^5*x7*x9 + x2*x4^5*x5*x6^5*x7 + x2*x4^5*x5*x6^5*x8^2*x9 + -x2*x4^5*x5*x6^5*x8^2 + -2*x2*x4^5*x5*x6^5*x8*x9 + 2*x2*x4^5*x5*x6^5*x8 + x2*x4^5*x5*x6^5*x9 + -x2*x4^5*x5*x6^5 + x2*x4^5*x5*x6^2*x7*x8^2*x9^2 + x2*x4^5*x5*x6^2*x7*x8^2*x9 + -2*x2*x4^5*x5*x6^2*x7*x8^2 + -x2*x4^5*x5*x6^2*x7*x8*x9^2 + -x2*x4^5*x5*x6^2*x7*x8*x9 + 2*x2*x4^5*x5*x6^2*x7*x8 + -x2*x4^5*x5*x6^2*x8^2*x9^2 + -x2*x4^5*x5*x6^2*x8^2*x9 + 2*x2*x4^5*x5*x6^2*x8^2 + x2*x4^5*x5*x6^2*x8*x9^2 + x2*x4^5*x5*x6^2*x8*x9 + -2*x2*x4^5*x5*x6^2*x8 + -x2*x4^5*x5*x6*x7*x8^2*x9^2 + x2*x4^5*x5*x6*x7*x8^2 + x2*x4^5*x5*x6*x7*x8*x9^2 + -x2*x4^5*x5*x6*x7*x8 + x2*x4^5*x5*x6*x8^2*x9^2 + -x2*x4^5*x5*x6*x8^2 + -x2*x4^5*x5*x6*x8*x9^2 + x2*x4^5*x5*x6*x8 + x2*x4^5*x6^6*x7*x8*x9 + -x2*x4^5*x6^6*x7*x8 + -x2*x4^5*x6^6*x7*x9 + x2*x4^5*x6^6*x7 + -x2*x4^5*x6^6*x8*x9 + x2*x4^5*x6^6*x8 + x2*x4^5*x6^6*x9 + -x2*x4^5*x6^6 + x2*x4^5*x6^5*x7*x8^2*x9 + -x2*x4^5*x6^5*x7*x8^2 + -2*x2*x4^5*x6^5*x7*x8*x9 + 2*x2*x4^5*x6^5*x7*x8 + x2*x4^5*x6^5*x7*x9 + -x2*x4^5*x6^5*x7 + -x2*x4^5*x6^5*x8^2*x9 + x2*x4^5*x6^5*x8^2 + 2*x2*x4^5*x6^5*x8*x9 + -2*x2*x4^5*x6^5*x8 + -x2*x4^5*x6^5*x9 + x2*x4^5*x6^5 + -x2*x4^5*x6^2*x7*x8^2*x9^2 + -x2*x4^5*x6^2*x7*x8^2*x9 + 2*x2*x4^5*x6^2*x7*x8^2 + x2*x4^5*x6^2*x7*x8*x9^2 + x2*x4^5*x6^2*x7*x8*x9 + -2*x2*x4^5*x6^2*x7*x8 + x2*x4^5*x6^2*x8^2*x9^2 + x2*x4^5*x6^2*x8^2*x9 + -2*x2*x4^5*x6^2*x8^2 + -x2*x4^5*x6^2*x8*x9^2 + -x2*x4^5*x6^2*x8*x9 + 2*x2*x4^5*x6^2*x8 + x2*x4^5*x6*x7*x8^2*x9^2 + -x2*x4^5*x6*x7*x8^2 + -x2*x4^5*x6*x7*x8*x9^2 + x2*x4^5*x6*x7*x8 + -x2*x4^5*x6*x8^2*x9^2 + x2*x4^5*x6*x8^2 + x2*x4^5*x6*x8*x9^2 + -x2*x4^5*x6*x8 + x2*x4^4*x5*x6^6*x7*x8*x9 + -x2*x4^4*x5*x6^6*x7*x8 + -x2*x4^4*x5*x6^6*x7*x9 + x2*x4^4*x5*x6^6*x7 + -x2*x4^4*x5*x6^6*x8*x9 + x2*x4^4*x5*x6^6*x8 + x2*x4^4*x5*x6^6*x9 + -x2*x4^4*x5*x6^6 + x2*x4^4*x5*x6^5*x7*x8^2*x9 + -x2*x4^4*x5*x6^5*x7*x8^2 + -2*x2*x4^4*x5*x6^5*x7*x8*x9 + 2*x2*x4^4*x5*x6^5*x7*x8 + x2*x4^4*x5*x6^5*x7*x9 + -x2*x4^4*x5*x6^5*x7 + -x2*x4^4*x5*x6^5*x8^2*x9 + x2*x4^4*x5*x6^5*x8^2 + 2*x2*x4^4*x5*x6^5*x8*x9 + -2*x2*x4^4*x5*x6^5*x8 + -x2*x4^4*x5*x6^5*x9 + x2*x4^4*x5*x6^5 + -x2*x4^4*x5*x6^2*x7*x8^2*x9 + x2*x4^4*x5*x6^2*x7*x8^2 + x2*x4^4*x5*x6^2*x7*x8*x9 + -x2*x4^4*x5*x6^2*x7*x8 + x2*x4^4*x5*x6^2*x8^2*x9 + -x2*x4^4*x5*x6^2*x8^2 + -x2*x4^4*x5*x6^2*x8*x9 + x2*x4^4*x5*x6^2*x8 + -x2*x4^4*x6^6*x7*x8*x9 + x2*x4^4*x6^6*x7*x8 + x2*x4^4*x6^6*x7*x9 + -x2*x4^4*x6^6*x7 + x2*x4^4*x6^6*x8*x9 + -x2*x4^4*x6^6*x8 + -x2*x4^4*x6^6*x9 + x2*x4^4*x6^6 + -x2*x4^4*x6^5*x7*x8^2*x9 + x2*x4^4*x6^5*x7*x8^2 + 2*x2*x4^4*x6^5*x7*x8*x9 + -2*x2*x4^4*x6^5*x7*x8 + -x2*x4^4*x6^5*x7*x9 + x2*x4^4*x6^5*x7 + x2*x4^4*x6^5*x8^2*x9 + -x2*x4^4*x6^5*x8^2 + -2*x2*x4^4*x6^5*x8*x9 + 2*x2*x4^4*x6^5*x8 + x2*x4^4*x6^5*x9 + -x2*x4^4*x6^5 + x2*x4^4*x6^2*x7*x8^2*x9 + -x2*x4^4*x6^2*x7*x8^2 + -x2*x4^4*x6^2*x7*x8*x9 + x2*x4^4*x6^2*x7*x8 + -x2*x4^4*x6^2*x8^2*x9 + x2*x4^4*x6^2*x8^2 + x2*x4^4*x6^2*x8*x9 + -x2*x4^4*x6^2*x8 + -x2*x4^3*x5^3*x6^2*x7*x8^2*x9 + x2*x4^3*x5^3*x6^2*x7*x8^2 + x2*x4^3*x5^3*x6^2*x7*x8*x9 + -x2*x4^3*x5^3*x6^2*x7*x8 + x2*x4^3*x5^3*x6^2*x8^2*x9 + -x2*x4^3*x5^3*x6^2*x8^2 + -x2*x4^3*x5^3*x6^2*x8*x9 + x2*x4^3*x5^3*x6^2*x8 + -x2*x4^3*x5^3*x6*x7^2*x8^2*x9 + x2*x4^3*x5^3*x6*x7^2*x8^2 + x2*x4^3*x5^3*x6*x7^2*x8*x9 + -x2*x4^3*x5^3*x6*x7^2*x8 + x2*x4^3*x5^3*x6*x7*x8^2*x9 + -x2*x4^3*x5^3*x6*x7*x8^2 + -x2*x4^3*x5^3*x6*x7*x8*x9 + x2*x4^3*x5^3*x6*x7*x8 + x2*x4^3*x5^3*x7^2*x8^2*x9 + -x2*x4^3*x5^3*x7^2*x8^2 + -x2*x4^3*x5^3*x7^2*x8*x9 + x2*x4^3*x5^3*x7^2*x8 + -x2*x4^3*x5^3*x8^2*x9 + x2*x4^3*x5^3*x8^2 + x2*x4^3*x5^3*x8*x9 + -x2*x4^3*x5^3*x8 + -x2*x4^3*x5^2*x6^4*x7*x8^2*x9 + x2*x4^3*x5^2*x6^4*x7*x8^2 + x2*x4^3*x5^2*x6^4*x7*x8*x9 + -x2*x4^3*x5^2*x6^4*x7*x8 + x2*x4^3*x5^2*x6^4*x8^2*x9 + -x2*x4^3*x5^2*x6^4*x8^2 + -x2*x4^3*x5^2*x6^4*x8*x9 + x2*x4^3*x5^2*x6^4*x8 + -x2*x4^3*x5^2*x6^3*x7^2*x8^2*x9 + x2*x4^3*x5^2*x6^3*x7^2*x8^2 + x2*x4^3*x5^2*x6^3*x7^2*x8*x9 + -x2*x4^3*x5^2*x6^3*x7^2*x8 + x2*x4^3*x5^2*x6^3*x7*x8^2*x9 + -x2*x4^3*x5^2*x6^3*x7*x8^2 + -x2*x4^3*x5^2*x6^3*x7*x8*x9 + x2*x4^3*x5^2*x6^3*x7*x8 + -x2*x4^3*x5^2*x6^2*x7^3*x8^2*x9 + x2*x4^3*x5^2*x6^2*x7^3*x8^2 + x2*x4^3*x5^2*x6^2*x7^3*x8*x9 + -x2*x4^3*x5^2*x6^2*x7^3*x8 + x2*x4^3*x5^2*x6^2*x7^2*x8^2*x9 + -x2*x4^3*x5^2*x6^2*x7^2*x8^2 + -x2*x4^3*x5^2*x6^2*x7^2*x8*x9 + x2*x4^3*x5^2*x6^2*x7^2*x8 + x2*x4^3*x5^2*x6^2*x7*x8^2*x9 + -x2*x4^3*x5^2*x6^2*x7*x8^2 + -x2*x4^3*x5^2*x6^2*x7*x8*x9 + x2*x4^3*x5^2*x6^2*x7*x8 + -x2*x4^3*x5^2*x6^2*x8^2*x9 + x2*x4^3*x5^2*x6^2*x8^2 + x2*x4^3*x5^2*x6^2*x8*x9 + -x2*x4^3*x5^2*x6^2*x8 + x2*x4^3*x5^2*x6*x7^2*x8^2*x9 + -x2*x4^3*x5^2*x6*x7^2*x8^2 + -x2*x4^3*x5^2*x6*x7^2*x8*x9 + x2*x4^3*x5^2*x6*x7^2*x8 + -x2*x4^3*x5^2*x6*x7*x8^2*x9 + x2*x4^3*x5^2*x6*x7*x8^2 + x2*x4^3*x5^2*x6*x7*x8*x9 + -x2*x4^3*x5^2*x6*x7*x8 + x2*x4^3*x5^2*x7^3*x8^2*x9 + -x2*x4^3*x5^2*x7^3*x8^2 + -x2*x4^3*x5^2*x7^3*x8*x9 + x2*x4^3*x5^2*x7^3*x8 + -x2*x4^3*x5^2*x7^2*x8^2*x9 + x2*x4^3*x5^2*x7^2*x8^2 + x2*x4^3*x5^2*x7^2*x8*x9 + -x2*x4^3*x5^2*x7^2*x8 + x2*x4^3*x5*x6^4*x7*x8^2*x9 + -x2*x4^3*x5*x6^4*x7*x8^2 + -x2*x4^3*x5*x6^4*x7*x8*x9 + x2*x4^3*x5*x6^4*x7*x8 + -x2*x4^3*x5*x6^4*x8^2*x9 + x2*x4^3*x5*x6^4*x8^2 + x2*x4^3*x5*x6^4*x8*x9 + -x2*x4^3*x5*x6^4*x8 + -x2*x4^3*x5*x6^3*x7^4*x8*x9 + x2*x4^3*x5*x6^3*x7^4*x8 + x2*x4^3*x5*x6^3*x7^4*x9 + -x2*x4^3*x5*x6^3*x7^4 + x2*x4^3*x5*x6^3*x7^3*x8*x9 + -x2*x4^3*x5*x6^3*x7^3*x8 + -x2*x4^3*x5*x6^3*x7^3*x9 + x2*x4^3*x5*x6^3*x7^3 + x2*x4^3*x5*x6^3*x7^2*x8^2*x9 + -x2*x4^3*x5*x6^3*x7^2*x8^2 + -x2*x4^3*x5*x6^3*x7^2*x8*x9 + x2*x4^3*x5*x6^3*x7^2*x8 + -x2*x4^3*x5*x6^3*x7*x8^2*x9 + x2*x4^3*x5*x6^3*x7*x8^2 + -x2*x4^3*x5*x6^3*x7*x8*x9^3 + x2*x4^3*x5*x6^3*x7*x8*x9^2 + x2*x4^3*x5*x6^3*x7*x8*x9 + -x2*x4^3*x5*x6^3*x7*x8 + x2*x4^3*x5*x6^3*x7*x9^3 + -x2*x4^3*x5*x6^3*x7*x9^2 + x2*x4^3*x5*x6^3*x8*x9^3 + -x2*x4^3*x5*x6^3*x8*x9^2 + -x2*x4^3*x5*x6^3*x9^3 + x2*x4^3*x5*x6^3*x9^2 + x2*x4^3*x5*x6^2*x7^4*x8*x9 + -x2*x4^3*x5*x6^2*x7^4*x8 + -x2*x4^3*x5*x6^2*x7^4*x9 + x2*x4^3*x5*x6^2*x7^4 + x2*x4^3*x5*x6^2*x7^3*x8^2*x9 + -x2*x4^3*x5*x6^2*x7^3*x8^2 + -2*x2*x4^3*x5*x6^2*x7^3*x8*x9 + 2*x2*x4^3*x5*x6^2*x7^3*x8 + x2*x4^3*x5*x6^2*x7^3*x9 + -x2*x4^3*x5*x6^2*x7^3 + -x2*x4^3*x5*x6^2*x7^2*x8^2*x9 + x2*x4^3*x5*x6^2*x7^2*x8^2 + x2*x4^3*x5*x6^2*x7^2*x8*x9 + -x2*x4^3*x5*x6^2*x7^2*x8 + x2*x4^3*x5*x6*x7*x8*x9^3 + -x2*x4^3*x5*x6*x7*x8*x9^2 + -x2*x4^3*x5*x6*x7*x9^3 + x2*x4^3*x5*x6*x7*x9^2 + -x2*x4^3*x5*x6*x8*x9^3 + x2*x4^3*x5*x6*x8*x9^2 + x2*x4^3*x5*x6*x9^3 + -x2*x4^3*x5*x6*x9^2 + -x2*x4^3*x5*x7^3*x8^2*x9 + x2*x4^3*x5*x7^3*x8^2 + x2*x4^3*x5*x7^3*x8*x9 + -x2*x4^3*x5*x7^3*x8 + x2*x4^3*x5*x8^2*x9 + -x2*x4^3*x5*x8^2 + -x2*x4^3*x5*x8*x9 + x2*x4^3*x5*x8 + x2*x4^3*x6^3*x7^4*x8*x9 + -x2*x4^3*x6^3*x7^4*x8 + -x2*x4^3*x6^3*x7^4*x9 + x2*x4^3*x6^3*x7^4 + -x2*x4^3*x6^3*x7^3*x8*x9 + x2*x4^3*x6^3*x7^3*x8 + x2*x4^3*x6^3*x7^3*x9 + -x2*x4^3*x6^3*x7^3 + x2*x4^3*x6^3*x7*x8*x9^3 + -x2*x4^3*x6^3*x7*x8*x9^2 + -x2*x4^3*x6^3*x7*x9^3 + x2*x4^3*x6^3*x7*x9^2 + -x2*x4^3*x6^3*x8*x9^3 + x2*x4^3*x6^3*x8*x9^2 + x2*x4^3*x6^3*x9^3 + -x2*x4^3*x6^3*x9^2 + -x2*x4^3*x6^2*x7^4*x8*x9 + x2*x4^3*x6^2*x7^4*x8 + x2*x4^3*x6^2*x7^4*x9 + -x2*x4^3*x6^2*x7^4 + x2*x4^3*x6^2*x7^3*x8*x9 + -x2*x4^3*x6^2*x7^3*x8 + -x2*x4^3*x6^2*x7^3*x9 + x2*x4^3*x6^2*x7^3 + -x2*x4^3*x6*x7*x8*x9^3 + x2*x4^3*x6*x7*x8*x9^2 + x2*x4^3*x6*x7*x9^3 + -x2*x4^3*x6*x7*x9^2 + x2*x4^3*x6*x8*x9^3 + -x2*x4^3*x6*x8*x9^2 + -x2*x4^3*x6*x9^3 + x2*x4^3*x6*x9^2 + -x2*x4^2*x5^7*x6*x7*x8*x9 + x2*x4^2*x5^7*x6*x7*x8 + x2*x4^2*x5^7*x6*x7*x9 + -x2*x4^2*x5^7*x6*x7 + x2*x4^2*x5^7*x6*x8*x9 + -x2*x4^2*x5^7*x6*x8 + -x2*x4^2*x5^7*x6*x9 + x2*x4^2*x5^7*x6 + x2*x4^2*x5^7*x7*x8*x9 + -x2*x4^2*x5^7*x7*x8 + -x2*x4^2*x5^7*x7*x9 + x2*x4^2*x5^7*x7 + -x2*x4^2*x5^7*x8*x9 + x2*x4^2*x5^7*x8 + x2*x4^2*x5^7*x9 + -x2*x4^2*x5^7 + -x2*x4^2*x5^5*x6^2*x7*x8*x9 + x2*x4^2*x5^5*x6^2*x7*x8 + x2*x4^2*x5^5*x6^2*x7*x9 + -x2*x4^2*x5^5*x6^2*x7 + x2*x4^2*x5^5*x6^2*x8*x9 + -x2*x4^2*x5^5*x6^2*x8 + -x2*x4^2*x5^5*x6^2*x9 + x2*x4^2*x5^5*x6^2 + -x2*x4^2*x5^5*x6*x7^2*x8*x9 + x2*x4^2*x5^5*x6*x7^2*x8 + x2*x4^2*x5^5*x6*x7^2*x9 + -x2*x4^2*x5^5*x6*x7^2 + 2*x2*x4^2*x5^5*x6*x7*x8*x9 + -2*x2*x4^2*x5^5*x6*x7*x8 + -2*x2*x4^2*x5^5*x6*x7*x9 + 2*x2*x4^2*x5^5*x6*x7 + -x2*x4^2*x5^5*x6*x8*x9 + x2*x4^2*x5^5*x6*x8 + x2*x4^2*x5^5*x6*x9 + -x2*x4^2*x5^5*x6 + x2*x4^2*x5^5*x7^2*x8*x9 + -x2*x4^2*x5^5*x7^2*x8 + -x2*x4^2*x5^5*x7^2*x9 + x2*x4^2*x5^5*x7^2 + -x2*x4^2*x5^5*x7*x8*x9 + x2*x4^2*x5^5*x7*x8 + x2*x4^2*x5^5*x7*x9 + -x2*x4^2*x5^5*x7 + x2*x4^2*x5^3*x6^2*x7*x8*x9 + -x2*x4^2*x5^3*x6^2*x7*x8 + -x2*x4^2*x5^3*x6^2*x7*x9 + x2*x4^2*x5^3*x6^2*x7 + -x2*x4^2*x5^3*x6^2*x8*x9 + x2*x4^2*x5^3*x6^2*x8 + x2*x4^2*x5^3*x6^2*x9 + -x2*x4^2*x5^3*x6^2 + x2*x4^2*x5^3*x6*x7^2*x8*x9 + -x2*x4^2*x5^3*x6*x7^2*x8 + -x2*x4^2*x5^3*x6*x7^2*x9 + x2*x4^2*x5^3*x6*x7^2 + -x2*x4^2*x5^3*x6*x7*x8*x9 + x2*x4^2*x5^3*x6*x7*x8 + x2*x4^2*x5^3*x6*x7*x9 + -x2*x4^2*x5^3*x6*x7 + -x2*x4^2*x5^3*x7^2*x8*x9 + x2*x4^2*x5^3*x7^2*x8 + x2*x4^2*x5^3*x7^2*x9 + -x2*x4^2*x5^3*x7^2 + x2*x4^2*x5^3*x8*x9 + -x2*x4^2*x5^3*x8 + -x2*x4^2*x5^3*x9 + x2*x4^2*x5^3 + -x2*x4*x5^7*x6*x7^2*x8*x9 + x2*x4*x5^7*x6*x7^2*x8 + x2*x4*x5^7*x6*x7^2*x9 + -x2*x4*x5^7*x6*x7^2 + 2*x2*x4*x5^7*x6*x7*x8*x9 + -2*x2*x4*x5^7*x6*x7*x8 + -2*x2*x4*x5^7*x6*x7*x9 + 2*x2*x4*x5^7*x6*x7 + -x2*x4*x5^7*x6*x8*x9 + x2*x4*x5^7*x6*x8 + x2*x4*x5^7*x6*x9 + -x2*x4*x5^7*x6 + x2*x4*x5^7*x7^2*x8*x9 + -x2*x4*x5^7*x7^2*x8 + -x2*x4*x5^7*x7^2*x9 + x2*x4*x5^7*x7^2 + -2*x2*x4*x5^7*x7*x8*x9 + 2*x2*x4*x5^7*x7*x8 + 2*x2*x4*x5^7*x7*x9 + -2*x2*x4*x5^7*x7 + x2*x4*x5^7*x8*x9 + -x2*x4*x5^7*x8 + -x2*x4*x5^7*x9 + x2*x4*x5^7 + x2*x4*x5^5*x6^2*x7*x8*x9 + -x2*x4*x5^5*x6^2*x7*x8 + -x2*x4*x5^5*x6^2*x7*x9 + x2*x4*x5^5*x6^2*x7 + -x2*x4*x5^5*x6^2*x8*x9 + x2*x4*x5^5*x6^2*x8 + x2*x4*x5^5*x6^2*x9 + -x2*x4*x5^5*x6^2 + -x2*x4*x5^5*x6*x7^2*x8^2*x9 + x2*x4*x5^5*x6*x7^2*x8^2 + -x2*x4*x5^5*x6*x7^2*x8*x9^2 + 4*x2*x4*x5^5*x6*x7^2*x8*x9 + -3*x2*x4*x5^5*x6*x7^2*x8 + x2*x4*x5^5*x6*x7^2*x9^2 + -3*x2*x4*x5^5*x6*x7^2*x9 + 2*x2*x4*x5^5*x6*x7^2 + -x2*x4*x5^5*x6*x7*x8*x9^4 + x2*x4*x5^5*x6*x7*x8*x9^3 + x2*x4*x5^5*x6*x7*x8*x9^2 + -4*x2*x4*x5^5*x6*x7*x8*x9 + 3*x2*x4*x5^5*x6*x7*x8 + x2*x4*x5^5*x6*x7*x9^4 + -x2*x4*x5^5*x6*x7*x9^3 + -x2*x4*x5^5*x6*x7*x9^2 + 4*x2*x4*x5^5*x6*x7*x9 + -3*x2*x4*x5^5*x6*x7 + x2*x4*x5^5*x6*x8^2*x9 + -x2*x4*x5^5*x6*x8^2 + x2*x4*x5^5*x6*x8*x9^4 + -x2*x4*x5^5*x6*x8*x9^3 + -x2*x4*x5^5*x6*x9^4 + x2*x4*x5^5*x6*x9^3 + -x2*x4*x5^5*x6*x9 + x2*x4*x5^5*x6 + x2*x4*x5^5*x7^2*x8^2*x9 + -x2*x4*x5^5*x7^2*x8^2 + x2*x4*x5^5*x7^2*x8*x9^2 + -4*x2*x4*x5^5*x7^2*x8*x9 + 3*x2*x4*x5^5*x7^2*x8 + -x2*x4*x5^5*x7^2*x9^2 + 3*x2*x4*x5^5*x7^2*x9 + -2*x2*x4*x5^5*x7^2 + x2*x4*x5^5*x7*x8*x9^4 + -x2*x4*x5^5*x7*x8*x9^3 + -x2*x4*x5^5*x7*x8*x9^2 + 3*x2*x4*x5^5*x7*x8*x9 + -2*x2*x4*x5^5*x7*x8 + -x2*x4*x5^5*x7*x9^4 + x2*x4*x5^5*x7*x9^3 + x2*x4*x5^5*x7*x9^2 + -3*x2*x4*x5^5*x7*x9 + 2*x2*x4*x5^5*x7 + -x2*x4*x5^5*x8^2*x9 + x2*x4*x5^5*x8^2 + -x2*x4*x5^5*x8*x9^4 + x2*x4*x5^5*x8*x9^3 + x2*x4*x5^5*x8*x9 + -x2*x4*x5^5*x8 + x2*x4*x5^5*x9^4 + -x2*x4*x5^5*x9^3 + -x2*x4*x5^4*x6^2*x7^3*x8*x9 + x2*x4*x5^4*x6^2*x7^3*x8 + x2*x4*x5^4*x6^2*x7^3*x9 + -x2*x4*x5^4*x6^2*x7^3 + x2*x4*x5^4*x6^2*x7^2*x8*x9 + -x2*x4*x5^4*x6^2*x7^2*x8 + -x2*x4*x5^4*x6^2*x7^2*x9 + x2*x4*x5^4*x6^2*x7^2 + -x2*x4*x5^4*x6*x7^2*x8^2*x9^2 + x2*x4*x5^4*x6*x7^2*x8^2*x9 + x2*x4*x5^4*x6*x7^2*x8*x9^2 + -x2*x4*x5^4*x6*x7^2*x8*x9 + x2*x4*x5^4*x6*x8^2*x9^2 + -x2*x4*x5^4*x6*x8^2*x9 + -x2*x4*x5^4*x6*x8*x9^2 + x2*x4*x5^4*x6*x8*x9 + x2*x4*x5^4*x7^3*x8*x9 + -x2*x4*x5^4*x7^3*x8 + -x2*x4*x5^4*x7^3*x9 + x2*x4*x5^4*x7^3 + x2*x4*x5^4*x7^2*x8^2*x9^2 + -x2*x4*x5^4*x7^2*x8^2*x9 + -x2*x4*x5^4*x7^2*x8*x9^2 + x2*x4*x5^4*x7^2*x8 + x2*x4*x5^4*x7^2*x9 + -x2*x4*x5^4*x7^2 + -x2*x4*x5^4*x8^2*x9^2 + x2*x4*x5^4*x8^2*x9 + x2*x4*x5^4*x8*x9^2 + -x2*x4*x5^4*x8*x9 + -x2*x4*x5^3*x6^2*x7^2*x8^2*x9^2 + x2*x4*x5^3*x6^2*x7^2*x8^2 + x2*x4*x5^3*x6^2*x7^2*x8*x9^2 + -x2*x4*x5^3*x6^2*x7^2*x8 + x2*x4*x5^3*x6^2*x7*x8^2*x9 + -x2*x4*x5^3*x6^2*x7*x8^2 + -x2*x4*x5^3*x6^2*x7*x8*x9^3 + x2*x4*x5^3*x6^2*x7*x8*x9^2 + -2*x2*x4*x5^3*x6^2*x7*x8*x9 + 2*x2*x4*x5^3*x6^2*x7*x8 + x2*x4*x5^3*x6^2*x7*x9^3 + -x2*x4*x5^3*x6^2*x7*x9^2 + x2*x4*x5^3*x6^2*x7*x9 + -x2*x4*x5^3*x6^2*x7 + x2*x4*x5^3*x6^2*x8^2*x9^2 + -x2*x4*x5^3*x6^2*x8^2*x9 + x2*x4*x5^3*x6^2*x8*x9^3 + -2*x2*x4*x5^3*x6^2*x8*x9^2 + 2*x2*x4*x5^3*x6^2*x8*x9 + -x2*x4*x5^3*x6^2*x8 + -x2*x4*x5^3*x6^2*x9^3 + x2*x4*x5^3*x6^2*x9^2 + -x2*x4*x5^3*x6^2*x9 + x2*x4*x5^3*x6^2 + x2*x4*x5^3*x6*x7^2*x8^2*x9^2 + x2*x4*x5^3*x6*x7^2*x8^2*x9 + -2*x2*x4*x5^3*x6*x7^2*x8^2 + -3*x2*x4*x5^3*x6*x7^2*x8*x9 + 3*x2*x4*x5^3*x6*x7^2*x8 + -x2*x4*x5^3*x6*x7^2*x9^2 + 2*x2*x4*x5^3*x6*x7^2*x9 + -x2*x4*x5^3*x6*x7^2 + -x2*x4*x5^3*x6*x7*x8^2*x9 + x2*x4*x5^3*x6*x7*x8^2 + -x2*x4*x5^3*x6*x7*x8*x9^5 + x2*x4*x5^3*x6*x7*x8*x9^4 + x2*x4*x5^3*x6*x7*x8*x9^3 + -2*x2*x4*x5^3*x6*x7*x8*x9^2 + 3*x2*x4*x5^3*x6*x7*x8*x9 + -2*x2*x4*x5^3*x6*x7*x8 + x2*x4*x5^3*x6*x7*x9^5 + -x2*x4*x5^3*x6*x7*x9^4 + -x2*x4*x5^3*x6*x7*x9^3 + 2*x2*x4*x5^3*x6*x7*x9^2 + -2*x2*x4*x5^3*x6*x7*x9 + x2*x4*x5^3*x6*x7 + -x2*x4*x5^3*x6*x8^2*x9^2 + x2*x4*x5^3*x6*x8^2 + x2*x4*x5^3*x6*x8*x9^5 + -x2*x4*x5^3*x6*x8*x9^4 + -x2*x4*x5^3*x6*x8*x9^3 + 2*x2*x4*x5^3*x6*x8*x9^2 + -x2*x4*x5^3*x6*x8 + -x2*x4*x5^3*x6*x9^5 + x2*x4*x5^3*x6*x9^4 + x2*x4*x5^3*x6*x9^3 + -x2*x4*x5^3*x6*x9^2 + -x2*x4*x5^3*x7^2*x8^2*x9 + x2*x4*x5^3*x7^2*x8^2 + -x2*x4*x5^3*x7^2*x8*x9^2 + 3*x2*x4*x5^3*x7^2*x8*x9 + -2*x2*x4*x5^3*x7^2*x8 + x2*x4*x5^3*x7^2*x9^2 + -2*x2*x4*x5^3*x7^2*x9 + x2*x4*x5^3*x7^2 + x2*x4*x5^3*x7*x8*x9^5 + -x2*x4*x5^3*x7*x8*x9^4 + x2*x4*x5^3*x7*x8*x9^2 + -x2*x4*x5^3*x7*x8*x9 + -x2*x4*x5^3*x7*x9^5 + x2*x4*x5^3*x7*x9^4 + -x2*x4*x5^3*x7*x9^2 + x2*x4*x5^3*x7*x9 + x2*x4*x5^3*x8^2*x9 + -x2*x4*x5^3*x8^2 + -x2*x4*x5^3*x8*x9^5 + x2*x4*x5^3*x8*x9^4 + -2*x2*x4*x5^3*x8*x9 + 2*x2*x4*x5^3*x8 + x2*x4*x5^3*x9^5 + -x2*x4*x5^3*x9^4 + x2*x4*x5^3*x9 + -x2*x4*x5^3 + -x2*x4*x5^2*x6^3*x7^3*x8^2*x9 + x2*x4*x5^2*x6^3*x7^3*x8^2 + -x2*x4*x5^2*x6^3*x7^3*x8*x9^2 + 2*x2*x4*x5^2*x6^3*x7^3*x8*x9 + -x2*x4*x5^2*x6^3*x7^3*x8 + x2*x4*x5^2*x6^3*x7^3*x9^2 + -x2*x4*x5^2*x6^3*x7^3*x9 + x2*x4*x5^2*x6^3*x7^2*x8^2*x9 + -x2*x4*x5^2*x6^3*x7^2*x8^2 + -x2*x4*x5^2*x6^3*x7^2*x8*x9 + x2*x4*x5^2*x6^3*x7^2*x8 + -x2*x4*x5^2*x6^3*x7*x8^2*x9^2 + x2*x4*x5^2*x6^3*x7*x8^2*x9 + -x2*x4*x5^2*x6^3*x7*x8*x9^3 + 3*x2*x4*x5^2*x6^3*x7*x8*x9^2 + -2*x2*x4*x5^2*x6^3*x7*x8*x9 + x2*x4*x5^2*x6^3*x7*x9^3 + -2*x2*x4*x5^2*x6^3*x7*x9^2 + x2*x4*x5^2*x6^3*x7*x9 + x2*x4*x5^2*x6^3*x8^2*x9^2 + -x2*x4*x5^2*x6^3*x8^2*x9 + x2*x4*x5^2*x6^3*x8*x9^3 + -2*x2*x4*x5^2*x6^3*x8*x9^2 + x2*x4*x5^2*x6^3*x8*x9 + -x2*x4*x5^2*x6^3*x9^3 + x2*x4*x5^2*x6^3*x9^2 + x2*x4*x5^2*x6^2*x7^3*x8^2*x9 + -x2*x4*x5^2*x6^2*x7^3*x8^2 + -x2*x4*x5^2*x6^2*x7^3*x9 + x2*x4*x5^2*x6^2*x7^3 + x2*x4*x5^2*x6^2*x7^2*x8*x9^2 + -2*x2*x4*x5^2*x6^2*x7^2*x8*x9 + x2*x4*x5^2*x6^2*x7^2*x8 + -x2*x4*x5^2*x6^2*x7^2*x9^2 + 2*x2*x4*x5^2*x6^2*x7^2*x9 + -x2*x4*x5^2*x6^2*x7^2 + x2*x4*x5^2*x6^2*x7*x8^2*x9^2 + -2*x2*x4*x5^2*x6^2*x7*x8^2*x9 + x2*x4*x5^2*x6^2*x7*x8^2 + x2*x4*x5^2*x6^2*x7*x8*x9^3 + -3*x2*x4*x5^2*x6^2*x7*x8*x9^2 + 3*x2*x4*x5^2*x6^2*x7*x8*x9 + -x2*x4*x5^2*x6^2*x7*x8 + -x2*x4*x5^2*x6^2*x7*x9^3 + 2*x2*x4*x5^2*x6^2*x7*x9^2 + -x2*x4*x5^2*x6^2*x7*x9 + -x2*x4*x5^2*x6^2*x8^2*x9^2 + x2*x4*x5^2*x6^2*x8^2*x9 + -x2*x4*x5^2*x6^2*x8*x9^3 + 2*x2*x4*x5^2*x6^2*x8*x9^2 + -x2*x4*x5^2*x6^2*x8*x9 + x2*x4*x5^2*x6^2*x9^3 + -x2*x4*x5^2*x6^2*x9^2 + x2*x4*x5^2*x6*x7^3*x8*x9^2 + -x2*x4*x5^2*x6*x7^3*x8*x9 + -x2*x4*x5^2*x6*x7^3*x9^2 + x2*x4*x5^2*x6*x7^3*x9 + -x2*x4*x5^2*x6*x7^2*x8^2*x9 + x2*x4*x5^2*x6*x7^2*x8^2 + -x2*x4*x5^2*x6*x7^2*x8*x9^2 + 2*x2*x4*x5^2*x6*x7^2*x8*x9 + -x2*x4*x5^2*x6*x7^2*x8 + x2*x4*x5^2*x6*x7^2*x9^2 + -x2*x4*x5^2*x6*x7^2*x9 + x2*x4*x5^2*x6*x7*x8^2*x9 + -x2*x4*x5^2*x6*x7*x8^2 + -x2*x4*x5^2*x6*x7*x8*x9 + x2*x4*x5^2*x6*x7*x8 + -x2*x4*x5^2*x7^3*x8*x9 + x2*x4*x5^2*x7^3*x8 + x2*x4*x5^2*x7^3*x9 + -x2*x4*x5^2*x7^3 + x2*x4*x5^2*x7^2*x8*x9 + -x2*x4*x5^2*x7^2*x8 + -x2*x4*x5^2*x7^2*x9 + x2*x4*x5^2*x7^2 + -x2*x4*x5*x6^4*x7^4*x8*x9 + x2*x4*x5*x6^4*x7^4*x8 + x2*x4*x5*x6^4*x7^4*x9 + -x2*x4*x5*x6^4*x7^4 + x2*x4*x5*x6^4*x7^3*x8*x9 + -x2*x4*x5*x6^4*x7^3*x8 + -x2*x4*x5*x6^4*x7^3*x9 + x2*x4*x5*x6^4*x7^3 + -x2*x4*x5*x6^4*x7^2*x8*x9^2 + x2*x4*x5*x6^4*x7^2*x8*x9 + x2*x4*x5*x6^4*x7^2*x9^2 + -x2*x4*x5*x6^4*x7^2*x9 + -x2*x4*x5*x6^4*x7*x8*x9^3 + 2*x2*x4*x5*x6^4*x7*x8*x9^2 + -x2*x4*x5*x6^4*x7*x8*x9 + x2*x4*x5*x6^4*x7*x9^3 + -2*x2*x4*x5*x6^4*x7*x9^2 + x2*x4*x5*x6^4*x7*x9 + x2*x4*x5*x6^4*x8*x9^3 + -x2*x4*x5*x6^4*x8*x9^2 + -x2*x4*x5*x6^4*x9^3 + x2*x4*x5*x6^4*x9^2 + x2*x4*x5*x6^3*x7^4*x8*x9 + -x2*x4*x5*x6^3*x7^4*x8 + -x2*x4*x5*x6^3*x7^4*x9 + x2*x4*x5*x6^3*x7^4 + x2*x4*x5*x6^3*x7^3*x8^2*x9 + -x2*x4*x5*x6^3*x7^3*x8^2 + -2*x2*x4*x5*x6^3*x7^3*x8*x9 + 2*x2*x4*x5*x6^3*x7^3*x8 + x2*x4*x5*x6^3*x7^3*x9 + -x2*x4*x5*x6^3*x7^3 + -x2*x4*x5*x6^3*x7^2*x8^2*x9 + x2*x4*x5*x6^3*x7^2*x8^2 + x2*x4*x5*x6^3*x7^2*x8*x9^2 + -x2*x4*x5*x6^3*x7^2*x8 + -x2*x4*x5*x6^3*x7^2*x9^2 + x2*x4*x5*x6^3*x7^2*x9 + x2*x4*x5*x6^3*x7*x8^2*x9^2 + -x2*x4*x5*x6^3*x7*x8^2*x9 + 2*x2*x4*x5*x6^3*x7*x8*x9^3 + -4*x2*x4*x5*x6^3*x7*x8*x9^2 + 2*x2*x4*x5*x6^3*x7*x8*x9 + -2*x2*x4*x5*x6^3*x7*x9^3 + 3*x2*x4*x5*x6^3*x7*x9^2 + -x2*x4*x5*x6^3*x7*x9 + -x2*x4*x5*x6^3*x8^2*x9^2 + x2*x4*x5*x6^3*x8^2*x9 + -2*x2*x4*x5*x6^3*x8*x9^3 + 3*x2*x4*x5*x6^3*x8*x9^2 + -x2*x4*x5*x6^3*x8*x9 + 2*x2*x4*x5*x6^3*x9^3 + -2*x2*x4*x5*x6^3*x9^2 + -x2*x4*x5*x6^2*x7^3*x8^2*x9 + x2*x4*x5*x6^2*x7^3*x8^2 + x2*x4*x5*x6^2*x7^3*x8*x9^2 + -x2*x4*x5*x6^2*x7^3*x8 + -x2*x4*x5*x6^2*x7^3*x9^2 + x2*x4*x5*x6^2*x7^3*x9 + x2*x4*x5*x6^2*x7^2*x8^2*x9^2 + -x2*x4*x5*x6^2*x7^2*x8^2 + -2*x2*x4*x5*x6^2*x7^2*x8*x9^2 + x2*x4*x5*x6^2*x7^2*x8*x9 + x2*x4*x5*x6^2*x7^2*x8 + x2*x4*x5*x6^2*x7^2*x9^2 + -x2*x4*x5*x6^2*x7^2*x9 + -x2*x4*x5*x6^2*x7*x8^2*x9^2 + x2*x4*x5*x6^2*x7*x8^2*x9 + x2*x4*x5*x6^2*x7*x8*x9^2 + -x2*x4*x5*x6^2*x7*x8*x9 + -x2*x4*x5*x6*x7^3*x8*x9^2 + x2*x4*x5*x6*x7^3*x8*x9 + x2*x4*x5*x6*x7^3*x9^2 + -x2*x4*x5*x6*x7^3*x9 + x2*x4*x5*x6*x7^2*x8*x9^2 + -x2*x4*x5*x6*x7^2*x8*x9 + -x2*x4*x5*x6*x7^2*x9^2 + x2*x4*x5*x6*x7^2*x9 + x2*x4*x5*x6*x7*x8*x9^4 + -2*x2*x4*x5*x6*x7*x8*x9^3 + x2*x4*x5*x6*x7*x8*x9^2 + -x2*x4*x5*x6*x7*x9^4 + 2*x2*x4*x5*x6*x7*x9^3 + -x2*x4*x5*x6*x7*x9^2 + -x2*x4*x5*x6*x8*x9^4 + 2*x2*x4*x5*x6*x8*x9^3 + -x2*x4*x5*x6*x8*x9^2 + x2*x4*x5*x6*x9^4 + -2*x2*x4*x5*x6*x9^3 + x2*x4*x5*x6*x9^2 + -x2*x4*x5*x7^2*x8^2*x9^2 + x2*x4*x5*x7^2*x8^2*x9 + x2*x4*x5*x7^2*x8*x9^2 + -x2*x4*x5*x7^2*x8*x9 + -x2*x4*x5*x7*x8*x9^4 + x2*x4*x5*x7*x8*x9^3 + x2*x4*x5*x7*x9^4 + -x2*x4*x5*x7*x9^3 + x2*x4*x5*x8^2*x9^2 + -x2*x4*x5*x8^2*x9 + x2*x4*x5*x8*x9^4 + -x2*x4*x5*x8*x9^3 + -x2*x4*x5*x8*x9^2 + x2*x4*x5*x8*x9 + -x2*x4*x5*x9^4 + x2*x4*x5*x9^3 + x2*x4*x6^4*x7^4*x8*x9 + -x2*x4*x6^4*x7^4*x8 + -x2*x4*x6^4*x7^4*x9 + x2*x4*x6^4*x7^4 + -x2*x4*x6^4*x7^3*x8*x9 + x2*x4*x6^4*x7^3*x8 + x2*x4*x6^4*x7^3*x9 + -x2*x4*x6^4*x7^3 + x2*x4*x6^4*x7^2*x8*x9^2 + -x2*x4*x6^4*x7^2*x8*x9 + -x2*x4*x6^4*x7^2*x9^2 + x2*x4*x6^4*x7^2*x9 + x2*x4*x6^4*x7*x8*x9^3 + -2*x2*x4*x6^4*x7*x8*x9^2 + x2*x4*x6^4*x7*x8*x9 + -x2*x4*x6^4*x7*x9^3 + 2*x2*x4*x6^4*x7*x9^2 + -x2*x4*x6^4*x7*x9 + -x2*x4*x6^4*x8*x9^3 + x2*x4*x6^4*x8*x9^2 + x2*x4*x6^4*x9^3 + -x2*x4*x6^4*x9^2 + -x2*x4*x6^3*x7^4*x8*x9 + x2*x4*x6^3*x7^4*x8 + x2*x4*x6^3*x7^4*x9 + -x2*x4*x6^3*x7^4 + x2*x4*x6^3*x7^3*x8*x9^2 + -x2*x4*x6^3*x7^3*x8 + -x2*x4*x6^3*x7^3*x9^2 + x2*x4*x6^3*x7^3 + -x2*x4*x6^3*x7^2*x8*x9^2 + x2*x4*x6^3*x7^2*x8*x9 + x2*x4*x6^3*x7^2*x9^2 + -x2*x4*x6^3*x7^2*x9 + -x2*x4*x6^3*x7*x8*x9^3 + x2*x4*x6^3*x7*x8*x9^2 + x2*x4*x6^3*x7*x9^3 + -x2*x4*x6^3*x7*x9^2 + x2*x4*x6^3*x8*x9^3 + -x2*x4*x6^3*x8*x9^2 + -x2*x4*x6^3*x9^3 + x2*x4*x6^3*x9^2 + -x2*x4*x6^2*x7^3*x8*x9^2 + x2*x4*x6^2*x7^3*x8*x9 + x2*x4*x6^2*x7^3*x9^2 + -x2*x4*x6^2*x7^3*x9 + x2*x4*x6^2*x7*x8*x9^2 + -x2*x4*x6^2*x7*x8*x9 + -x2*x4*x6^2*x7*x9^2 + x2*x4*x6^2*x7*x9 + x2*x4*x6*x7*x8*x9^5 + -x2*x4*x6*x7*x8*x9^4 + -x2*x4*x6*x7*x9^5 + x2*x4*x6*x7*x9^4 + -x2*x4*x6*x8*x9^5 + x2*x4*x6*x8*x9^4 + x2*x4*x6*x9^5 + -x2*x4*x6*x9^4 + -x2*x4*x7*x8*x9^5 + x2*x4*x7*x8*x9^4 + x2*x4*x7*x9^5 + -x2*x4*x7*x9^4 + x2*x4*x8*x9^5 + -x2*x4*x8*x9^4 + -x2*x4*x9^5 + x2*x4*x9^4 + x2*x5^7*x6*x7^2*x8*x9 + -x2*x5^7*x6*x7^2*x8 + -x2*x5^7*x6*x7^2*x9 + x2*x5^7*x6*x7^2 + -x2*x5^7*x6*x7*x8*x9 + x2*x5^7*x6*x7*x8 + x2*x5^7*x6*x7*x9 + -x2*x5^7*x6*x7 + -x2*x5^7*x7^2*x8*x9 + x2*x5^7*x7^2*x8 + x2*x5^7*x7^2*x9 + -x2*x5^7*x7^2 + x2*x5^7*x7*x8*x9 + -x2*x5^7*x7*x8 + -x2*x5^7*x7*x9 + x2*x5^7*x7 + x2*x5^5*x6*x7^2*x8^2*x9 + -x2*x5^5*x6*x7^2*x8^2 + x2*x5^5*x6*x7^2*x8*x9^2 + -3*x2*x5^5*x6*x7^2*x8*x9 + 2*x2*x5^5*x6*x7^2*x8 + -x2*x5^5*x6*x7^2*x9^2 + 2*x2*x5^5*x6*x7^2*x9 + -x2*x5^5*x6*x7^2 + x2*x5^5*x6*x7*x8*x9^4 + -x2*x5^5*x6*x7*x8*x9^3 + -x2*x5^5*x6*x7*x8*x9^2 + 2*x2*x5^5*x6*x7*x8*x9 + -x2*x5^5*x6*x7*x8 + -x2*x5^5*x6*x7*x9^4 + x2*x5^5*x6*x7*x9^3 + x2*x5^5*x6*x7*x9^2 + -2*x2*x5^5*x6*x7*x9 + x2*x5^5*x6*x7 + -x2*x5^5*x6*x8^2*x9 + x2*x5^5*x6*x8^2 + -x2*x5^5*x6*x8*x9^4 + x2*x5^5*x6*x8*x9^3 + x2*x5^5*x6*x8*x9 + -x2*x5^5*x6*x8 + x2*x5^5*x6*x9^4 + -x2*x5^5*x6*x9^3 + -x2*x5^5*x7^2*x8^2*x9 + x2*x5^5*x7^2*x8^2 + -x2*x5^5*x7^2*x8*x9^2 + 3*x2*x5^5*x7^2*x8*x9 + -2*x2*x5^5*x7^2*x8 + x2*x5^5*x7^2*x9^2 + -2*x2*x5^5*x7^2*x9 + x2*x5^5*x7^2 + -x2*x5^5*x7*x8*x9^4 + x2*x5^5*x7*x8*x9^3 + x2*x5^5*x7*x8*x9^2 + -2*x2*x5^5*x7*x8*x9 + x2*x5^5*x7*x8 + x2*x5^5*x7*x9^4 + -x2*x5^5*x7*x9^3 + -x2*x5^5*x7*x9^2 + 2*x2*x5^5*x7*x9 + -x2*x5^5*x7 + x2*x5^5*x8^2*x9 + -x2*x5^5*x8^2 + x2*x5^5*x8*x9^4 + -x2*x5^5*x8*x9^3 + -x2*x5^5*x8*x9 + x2*x5^5*x8 + -x2*x5^5*x9^4 + x2*x5^5*x9^3 + x2*x5^4*x6^2*x7^3*x8*x9 + -x2*x5^4*x6^2*x7^3*x8 + -x2*x5^4*x6^2*x7^3*x9 + x2*x5^4*x6^2*x7^3 + -x2*x5^4*x6^2*x7^2*x8*x9 + x2*x5^4*x6^2*x7^2*x8 + x2*x5^4*x6^2*x7^2*x9 + -x2*x5^4*x6^2*x7^2 + x2*x5^4*x6*x7^2*x8^2*x9^2 + -x2*x5^4*x6*x7^2*x8^2*x9 + -x2*x5^4*x6*x7^2*x8*x9^2 + x2*x5^4*x6*x7^2*x8*x9 + -x2*x5^4*x6*x8^2*x9^2 + x2*x5^4*x6*x8^2*x9 + x2*x5^4*x6*x8*x9^2 + -x2*x5^4*x6*x8*x9 + -x2*x5^4*x7^3*x8*x9 + x2*x5^4*x7^3*x8 + x2*x5^4*x7^3*x9 + -x2*x5^4*x7^3 + -x2*x5^4*x7^2*x8^2*x9^2 + x2*x5^4*x7^2*x8^2*x9 + x2*x5^4*x7^2*x8*x9^2 + -x2*x5^4*x7^2*x8 + -x2*x5^4*x7^2*x9 + x2*x5^4*x7^2 + x2*x5^4*x8^2*x9^2 + -x2*x5^4*x8^2*x9 + -x2*x5^4*x8*x9^2 + x2*x5^4*x8*x9 + x2*x5^3*x6^2*x7^2*x8^2*x9^2 + -x2*x5^3*x6^2*x7^2*x8^2 + -x2*x5^3*x6^2*x7^2*x8*x9^2 + x2*x5^3*x6^2*x7^2*x8 + x2*x5^3*x6^2*x7*x8*x9^3 + -x2*x5^3*x6^2*x7*x8*x9^2 + -x2*x5^3*x6^2*x7*x9^3 + x2*x5^3*x6^2*x7*x9^2 + -x2*x5^3*x6^2*x8^2*x9^2 + x2*x5^3*x6^2*x8^2 + -x2*x5^3*x6^2*x8*x9^3 + 2*x2*x5^3*x6^2*x8*x9^2 + -x2*x5^3*x6^2*x8 + x2*x5^3*x6^2*x9^3 + -x2*x5^3*x6^2*x9^2 + -x2*x5^3*x6*x7^2*x8^2*x9^2 + x2*x5^3*x6*x7^2*x8^2 + x2*x5^3*x6*x7^2*x8*x9 + -x2*x5^3*x6*x7^2*x8 + x2*x5^3*x6*x7^2*x9^2 + -x2*x5^3*x6*x7^2*x9 + x2*x5^3*x6*x7*x8*x9^5 + -x2*x5^3*x6*x7*x8*x9^4 + -x2*x5^3*x6*x7*x8*x9^3 + 2*x2*x5^3*x6*x7*x8*x9^2 + -x2*x5^3*x6*x7*x8*x9 + -x2*x5^3*x6*x7*x9^5 + x2*x5^3*x6*x7*x9^4 + x2*x5^3*x6*x7*x9^3 + -2*x2*x5^3*x6*x7*x9^2 + x2*x5^3*x6*x7*x9 + x2*x5^3*x6*x8^2*x9^2 + -x2*x5^3*x6*x8^2 + -x2*x5^3*x6*x8*x9^5 + x2*x5^3*x6*x8*x9^4 + x2*x5^3*x6*x8*x9^3 + -2*x2*x5^3*x6*x8*x9^2 + x2*x5^3*x6*x8 + x2*x5^3*x6*x9^5 + -x2*x5^3*x6*x9^4 + -x2*x5^3*x6*x9^3 + x2*x5^3*x6*x9^2 + x2*x5^3*x7^2*x8*x9^2 + -x2*x5^3*x7^2*x8*x9 + -x2*x5^3*x7^2*x9^2 + x2*x5^3*x7^2*x9 + -x2*x5^3*x7*x8*x9^5 + x2*x5^3*x7*x8*x9^4 + -x2*x5^3*x7*x8*x9^2 + x2*x5^3*x7*x8*x9 + x2*x5^3*x7*x9^5 + -x2*x5^3*x7*x9^4 + x2*x5^3*x7*x9^2 + -x2*x5^3*x7*x9 + x2*x5^3*x8*x9^5 + -x2*x5^3*x8*x9^4 + -x2*x5^3*x9^5 + x2*x5^3*x9^4 + x2*x5^2*x6^4*x7*x8^2*x9 + -x2*x5^2*x6^4*x7*x8^2 + -x2*x5^2*x6^4*x7*x8*x9 + x2*x5^2*x6^4*x7*x8 + -x2*x5^2*x6^4*x8^2*x9 + x2*x5^2*x6^4*x8^2 + x2*x5^2*x6^4*x8*x9 + -x2*x5^2*x6^4*x8 + x2*x5^2*x6^3*x7^3*x8^2*x9 + -x2*x5^2*x6^3*x7^3*x8^2 + x2*x5^2*x6^3*x7^3*x8*x9^2 + -2*x2*x5^2*x6^3*x7^3*x8*x9 + x2*x5^2*x6^3*x7^3*x8 + -x2*x5^2*x6^3*x7^3*x9^2 + x2*x5^2*x6^3*x7^3*x9 + x2*x5^2*x6^3*x7*x8^2*x9^2 + -2*x2*x5^2*x6^3*x7*x8^2*x9 + x2*x5^2*x6^3*x7*x8^2 + x2*x5^2*x6^3*x7*x8*x9^3 + -3*x2*x5^2*x6^3*x7*x8*x9^2 + 3*x2*x5^2*x6^3*x7*x8*x9 + -x2*x5^2*x6^3*x7*x8 + -x2*x5^2*x6^3*x7*x9^3 + 2*x2*x5^2*x6^3*x7*x9^2 + -x2*x5^2*x6^3*x7*x9 + -x2*x5^2*x6^3*x8^2*x9^2 + x2*x5^2*x6^3*x8^2*x9 + -x2*x5^2*x6^3*x8*x9^3 + 2*x2*x5^2*x6^3*x8*x9^2 + -x2*x5^2*x6^3*x8*x9 + x2*x5^2*x6^3*x9^3 + -x2*x5^2*x6^3*x9^2 + -x2*x5^2*x6^2*x7^3*x8*x9 + x2*x5^2*x6^2*x7^3*x8 + x2*x5^2*x6^2*x7^3*x9 + -x2*x5^2*x6^2*x7^3 + -x2*x5^2*x6^2*x7^2*x8^2*x9 + x2*x5^2*x6^2*x7^2*x8^2 + -x2*x5^2*x6^2*x7^2*x8*x9^2 + 3*x2*x5^2*x6^2*x7^2*x8*x9 + -2*x2*x5^2*x6^2*x7^2*x8 + x2*x5^2*x6^2*x7^2*x9^2 + -2*x2*x5^2*x6^2*x7^2*x9 + x2*x5^2*x6^2*x7^2 + -x2*x5^2*x6^2*x7*x8^2*x9^2 + x2*x5^2*x6^2*x7*x8^2*x9 + -x2*x5^2*x6^2*x7*x8*x9^3 + 3*x2*x5^2*x6^2*x7*x8*x9^2 + -2*x2*x5^2*x6^2*x7*x8*x9 + x2*x5^2*x6^2*x7*x9^3 + -2*x2*x5^2*x6^2*x7*x9^2 + x2*x5^2*x6^2*x7*x9 + x2*x5^2*x6^2*x8^2*x9^2 + -x2*x5^2*x6^2*x8^2 + x2*x5^2*x6^2*x8*x9^3 + -2*x2*x5^2*x6^2*x8*x9^2 + x2*x5^2*x6^2*x8 + -x2*x5^2*x6^2*x9^3 + x2*x5^2*x6^2*x9^2 + -x2*x5^2*x6*x7^3*x8*x9^2 + x2*x5^2*x6*x7^3*x8*x9 + x2*x5^2*x6*x7^3*x9^2 + -x2*x5^2*x6*x7^3*x9 + x2*x5^2*x6*x7^2*x8*x9^2 + -x2*x5^2*x6*x7^2*x8*x9 + -x2*x5^2*x6*x7^2*x9^2 + x2*x5^2*x6*x7^2*x9 + -x2*x5^2*x7^3*x8^2*x9 + x2*x5^2*x7^3*x8^2 + 2*x2*x5^2*x7^3*x8*x9 + -2*x2*x5^2*x7^3*x8 + -x2*x5^2*x7^3*x9 + x2*x5^2*x7^3 + x2*x5^2*x7^2*x8^2*x9 + -x2*x5^2*x7^2*x8^2 + -2*x2*x5^2*x7^2*x8*x9 + 2*x2*x5^2*x7^2*x8 + x2*x5^2*x7^2*x9 + -x2*x5^2*x7^2 + x2*x5*x6^4*x7^4*x8*x9 + -x2*x5*x6^4*x7^4*x8 + -x2*x5*x6^4*x7^4*x9 + x2*x5*x6^4*x7^4 + -x2*x5*x6^4*x7^3*x8*x9 + x2*x5*x6^4*x7^3*x8 + x2*x5*x6^4*x7^3*x9 + -x2*x5*x6^4*x7^3 + x2*x5*x6^4*x7^2*x8*x9^2 + -x2*x5*x6^4*x7^2*x8*x9 + -x2*x5*x6^4*x7^2*x9^2 + x2*x5*x6^4*x7^2*x9 + -x2*x5*x6^4*x7*x8^2*x9 + x2*x5*x6^4*x7*x8^2 + x2*x5*x6^4*x7*x8*x9^3 + -2*x2*x5*x6^4*x7*x8*x9^2 + 2*x2*x5*x6^4*x7*x8*x9 + -x2*x5*x6^4*x7*x8 + -x2*x5*x6^4*x7*x9^3 + 2*x2*x5*x6^4*x7*x9^2 + -x2*x5*x6^4*x7*x9 + x2*x5*x6^4*x8^2*x9 + -x2*x5*x6^4*x8^2 + -x2*x5*x6^4*x8*x9^3 + x2*x5*x6^4*x8*x9^2 + -x2*x5*x6^4*x8*x9 + x2*x5*x6^4*x8 + x2*x5*x6^4*x9^3 + -x2*x5*x6^4*x9^2 + -x2*x5*x6^3*x7^3*x8^2*x9 + x2*x5*x6^3*x7^3*x8^2 + x2*x5*x6^3*x7^3*x8*x9 + -x2*x5*x6^3*x7^3*x8 + -x2*x5*x6^3*x7^2*x8*x9^2 + x2*x5*x6^3*x7^2*x8*x9 + x2*x5*x6^3*x7^2*x9^2 + -x2*x5*x6^3*x7^2*x9 + -x2*x5*x6^3*x7*x8^2*x9^2 + 2*x2*x5*x6^3*x7*x8^2*x9 + -x2*x5*x6^3*x7*x8^2 + -x2*x5*x6^3*x7*x8*x9^3 + 3*x2*x5*x6^3*x7*x8*x9^2 + -3*x2*x5*x6^3*x7*x8*x9 + x2*x5*x6^3*x7*x8 + x2*x5*x6^3*x7*x9^3 + -2*x2*x5*x6^3*x7*x9^2 + x2*x5*x6^3*x7*x9 + x2*x5*x6^3*x8^2*x9^2 + -x2*x5*x6^3*x8^2*x9 + x2*x5*x6^3*x8*x9^3 + -2*x2*x5*x6^3*x8*x9^2 + x2*x5*x6^3*x8*x9 + -x2*x5*x6^3*x9^3 + x2*x5*x6^3*x9^2 + -x2*x5*x6^2*x7^4*x8*x9 + x2*x5*x6^2*x7^4*x8 + x2*x5*x6^2*x7^4*x9 + -x2*x5*x6^2*x7^4 + -x2*x5*x6^2*x7^3*x8*x9^2 + 2*x2*x5*x6^2*x7^3*x8*x9 + -x2*x5*x6^2*x7^3*x8 + x2*x5*x6^2*x7^3*x9^2 + -2*x2*x5*x6^2*x7^3*x9 + x2*x5*x6^2*x7^3 + -x2*x5*x6^2*x7^2*x8^2*x9^2 + x2*x5*x6^2*x7^2*x8^2*x9 + 2*x2*x5*x6^2*x7^2*x8*x9^2 + -2*x2*x5*x6^2*x7^2*x8*x9 + -x2*x5*x6^2*x7^2*x9^2 + x2*x5*x6^2*x7^2*x9 + x2*x5*x6^2*x7*x8^2*x9^2 + -x2*x5*x6^2*x7*x8^2*x9 + -x2*x5*x6^2*x7*x8*x9^2 + x2*x5*x6^2*x7*x8*x9 + x2*x5*x6*x7^3*x8*x9^2 + -x2*x5*x6*x7^3*x8*x9 + -x2*x5*x6*x7^3*x9^2 + x2*x5*x6*x7^3*x9 + -x2*x5*x6*x7^2*x8*x9^2 + x2*x5*x6*x7^2*x8*x9 + x2*x5*x6*x7^2*x9^2 + -x2*x5*x6*x7^2*x9 + -x2*x5*x6*x7*x8*x9^4 + x2*x5*x6*x7*x8*x9^3 + x2*x5*x6*x7*x9^4 + -x2*x5*x6*x7*x9^3 + x2*x5*x6*x8*x9^4 + -x2*x5*x6*x8*x9^3 + -x2*x5*x6*x9^4 + x2*x5*x6*x9^3 + x2*x5*x7^3*x8^2*x9 + -x2*x5*x7^3*x8^2 + -x2*x5*x7^3*x8*x9 + x2*x5*x7^3*x8 + x2*x5*x7^2*x8^2*x9^2 + -x2*x5*x7^2*x8^2*x9 + -x2*x5*x7^2*x8*x9^2 + x2*x5*x7^2*x8*x9 + x2*x5*x7*x8*x9^4 + -x2*x5*x7*x8*x9^3 + -x2*x5*x7*x9^4 + x2*x5*x7*x9^3 + -x2*x5*x8^2*x9^2 + x2*x5*x8^2 + -x2*x5*x8*x9^4 + x2*x5*x8*x9^3 + x2*x5*x8*x9^2 + -x2*x5*x8 + x2*x5*x9^4 + -x2*x5*x9^3 + -x2*x6^4*x7^4*x8*x9 + x2*x6^4*x7^4*x8 + x2*x6^4*x7^4*x9 + -x2*x6^4*x7^4 + x2*x6^4*x7^3*x8*x9 + -x2*x6^4*x7^3*x8 + -x2*x6^4*x7^3*x9 + x2*x6^4*x7^3 + -x2*x6^4*x7^2*x8*x9^2 + x2*x6^4*x7^2*x8*x9 + x2*x6^4*x7^2*x9^2 + -x2*x6^4*x7^2*x9 + -x2*x6^4*x7*x8*x9^3 + 2*x2*x6^4*x7*x8*x9^2 + -x2*x6^4*x7*x8*x9 + x2*x6^4*x7*x9^3 + -2*x2*x6^4*x7*x9^2 + x2*x6^4*x7*x9 + x2*x6^4*x8*x9^3 + -x2*x6^4*x8*x9^2 + -x2*x6^4*x9^3 + x2*x6^4*x9^2 + -x2*x6^3*x7^3*x8*x9^2 + x2*x6^3*x7^3*x8*x9 + x2*x6^3*x7^3*x9^2 + -x2*x6^3*x7^3*x9 + x2*x6^3*x7^2*x8*x9^2 + -x2*x6^3*x7^2*x8*x9 + -x2*x6^3*x7^2*x9^2 + x2*x6^3*x7^2*x9 + x2*x6^2*x7^4*x8*x9 + -x2*x6^2*x7^4*x8 + -x2*x6^2*x7^4*x9 + x2*x6^2*x7^4 + x2*x6^2*x7^3*x8*x9^2 + -2*x2*x6^2*x7^3*x8*x9 + x2*x6^2*x7^3*x8 + -x2*x6^2*x7^3*x9^2 + 2*x2*x6^2*x7^3*x9 + -x2*x6^2*x7^3 + -x2*x6^2*x7*x8*x9^2 + x2*x6^2*x7*x8*x9 + x2*x6^2*x7*x9^2 + -x2*x6^2*x7*x9 + -x2*x6*x7*x8*x9^5 + x2*x6*x7*x8*x9^4 + x2*x6*x7*x8*x9^3 + -x2*x6*x7*x8*x9^2 + x2*x6*x7*x9^5 + -x2*x6*x7*x9^4 + -x2*x6*x7*x9^3 + x2*x6*x7*x9^2 + x2*x6*x8*x9^5 + -x2*x6*x8*x9^4 + -x2*x6*x8*x9^3 + x2*x6*x8*x9^2 + -x2*x6*x9^5 + x2*x6*x9^4 + x2*x6*x9^3 + -x2*x6*x9^2 + x2*x7*x8*x9^5 + -x2*x7*x8*x9^4 + -x2*x7*x9^5 + x2*x7*x9^4 + -x2*x8*x9^5 + x2*x8*x9^4 + x2*x9^5 + -x2*x9^4 + -x3^9*x4^3*x5*x6*x7*x8*x9 + x3^9*x4^3*x5*x6*x7*x8 + x3^9*x4^3*x5*x6*x7*x9 + -x3^9*x4^3*x5*x6*x7 + x3^9*x4^3*x5*x6*x8*x9 + -x3^9*x4^3*x5*x6*x8 + -x3^9*x4^3*x5*x6*x9 + x3^9*x4^3*x5*x6 + x3^9*x4^3*x5*x7*x8*x9 + -x3^9*x4^3*x5*x7*x8 + -x3^9*x4^3*x5*x7*x9 + x3^9*x4^3*x5*x7 + -x3^9*x4^3*x5*x8*x9 + x3^9*x4^3*x5*x8 + x3^9*x4^3*x5*x9 + -x3^9*x4^3*x5 + x3^9*x4^3*x6*x7*x8*x9 + -x3^9*x4^3*x6*x7*x8 + -x3^9*x4^3*x6*x7*x9 + x3^9*x4^3*x6*x7 + -x3^9*x4^3*x6*x8*x9 + x3^9*x4^3*x6*x8 + x3^9*x4^3*x6*x9 + -x3^9*x4^3*x6 + -x3^9*x4^3*x7*x8*x9 + x3^9*x4^3*x7*x8 + x3^9*x4^3*x7*x9 + -x3^9*x4^3*x7 + x3^9*x4^3*x8*x9 + -x3^9*x4^3*x8 + -x3^9*x4^3*x9 + x3^9*x4^3 + -x3^9*x4^2*x5*x6*x7^2*x8*x9 + x3^9*x4^2*x5*x6*x7^2*x8 + x3^9*x4^2*x5*x6*x7^2*x9 + -x3^9*x4^2*x5*x6*x7^2 + -x3^9*x4^2*x5*x6*x7*x8^2*x9 + x3^9*x4^2*x5*x6*x7*x8^2 + 2*x3^9*x4^2*x5*x6*x7*x8*x9 + -2*x3^9*x4^2*x5*x6*x7*x8 + -x3^9*x4^2*x5*x6*x7*x9 + x3^9*x4^2*x5*x6*x7 + x3^9*x4^2*x5*x6*x8^2*x9 + -x3^9*x4^2*x5*x6*x8^2 + -x3^9*x4^2*x5*x6*x8*x9 + x3^9*x4^2*x5*x6*x8 + x3^9*x4^2*x5*x7^2*x8*x9 + -x3^9*x4^2*x5*x7^2*x8 + -x3^9*x4^2*x5*x7^2*x9 + x3^9*x4^2*x5*x7^2 + x3^9*x4^2*x5*x7*x8^2*x9 + -x3^9*x4^2*x5*x7*x8^2 + -2*x3^9*x4^2*x5*x7*x8*x9 + 2*x3^9*x4^2*x5*x7*x8 + x3^9*x4^2*x5*x7*x9 + -x3^9*x4^2*x5*x7 + -x3^9*x4^2*x5*x8^2*x9 + x3^9*x4^2*x5*x8^2 + x3^9*x4^2*x5*x8*x9 + -x3^9*x4^2*x5*x8 + x3^9*x4^2*x6*x7^2*x8*x9 + -x3^9*x4^2*x6*x7^2*x8 + -x3^9*x4^2*x6*x7^2*x9 + x3^9*x4^2*x6*x7^2 + x3^9*x4^2*x6*x7*x8^2*x9 + -x3^9*x4^2*x6*x7*x8^2 + -2*x3^9*x4^2*x6*x7*x8*x9 + 2*x3^9*x4^2*x6*x7*x8 + x3^9*x4^2*x6*x7*x9 + -x3^9*x4^2*x6*x7 + -x3^9*x4^2*x6*x8^2*x9 + x3^9*x4^2*x6*x8^2 + x3^9*x4^2*x6*x8*x9 + -x3^9*x4^2*x6*x8 + -x3^9*x4^2*x7^2*x8*x9 + x3^9*x4^2*x7^2*x8 + x3^9*x4^2*x7^2*x9 + -x3^9*x4^2*x7^2 + -x3^9*x4^2*x7*x8^2*x9 + x3^9*x4^2*x7*x8^2 + 2*x3^9*x4^2*x7*x8*x9 + -2*x3^9*x4^2*x7*x8 + -x3^9*x4^2*x7*x9 + x3^9*x4^2*x7 + x3^9*x4^2*x8^2*x9 + -x3^9*x4^2*x8^2 + -x3^9*x4^2*x8*x9 + x3^9*x4^2*x8 + -x3^9*x4*x5*x6^2*x7*x8^2*x9 + x3^9*x4*x5*x6^2*x7*x8^2 + x3^9*x4*x5*x6^2*x7*x9 + -x3^9*x4*x5*x6^2*x7 + x3^9*x4*x5*x6^2*x8^2*x9 + -x3^9*x4*x5*x6^2*x8^2 + -x3^9*x4*x5*x6^2*x9 + x3^9*x4*x5*x6^2 + -x3^9*x4*x5*x6*x7^2*x8^2*x9 + x3^9*x4*x5*x6*x7^2*x8^2 + x3^9*x4*x5*x6*x7^2*x8*x9 + -x3^9*x4*x5*x6*x7^2*x8 + 2*x3^9*x4*x5*x6*x7*x8^2*x9 + -2*x3^9*x4*x5*x6*x7*x8^2 + -x3^9*x4*x5*x6*x7*x8*x9 + x3^9*x4*x5*x6*x7*x8 + -x3^9*x4*x5*x6*x7*x9 + x3^9*x4*x5*x6*x7 + -x3^9*x4*x5*x6*x8^2*x9 + x3^9*x4*x5*x6*x8^2 + x3^9*x4*x5*x6*x9 + -x3^9*x4*x5*x6 + x3^9*x4*x5*x7^2*x8^2*x9 + -x3^9*x4*x5*x7^2*x8^2 + -x3^9*x4*x5*x7^2*x8*x9 + x3^9*x4*x5*x7^2*x8 + -x3^9*x4*x5*x7*x8^2*x9 + x3^9*x4*x5*x7*x8^2 + x3^9*x4*x5*x7*x8*x9 + -x3^9*x4*x5*x7*x8 + x3^9*x4*x6^2*x7*x8^2*x9 + -x3^9*x4*x6^2*x7*x8^2 + -x3^9*x4*x6^2*x7*x9 + x3^9*x4*x6^2*x7 + -x3^9*x4*x6^2*x8^2*x9 + x3^9*x4*x6^2*x8^2 + x3^9*x4*x6^2*x9 + -x3^9*x4*x6^2 + x3^9*x4*x6*x7^2*x8^2*x9 + -x3^9*x4*x6*x7^2*x8^2 + -x3^9*x4*x6*x7^2*x8*x9 + x3^9*x4*x6*x7^2*x8 + -2*x3^9*x4*x6*x7*x8^2*x9 + 2*x3^9*x4*x6*x7*x8^2 + x3^9*x4*x6*x7*x8*x9 + -x3^9*x4*x6*x7*x8 + x3^9*x4*x6*x7*x9 + -x3^9*x4*x6*x7 + x3^9*x4*x6*x8^2*x9 + -x3^9*x4*x6*x8^2 + -x3^9*x4*x6*x9 + x3^9*x4*x6 + -x3^9*x4*x7^2*x8^2*x9 + x3^9*x4*x7^2*x8^2 + x3^9*x4*x7^2*x8*x9 + -x3^9*x4*x7^2*x8 + x3^9*x4*x7*x8^2*x9 + -x3^9*x4*x7*x8^2 + -x3^9*x4*x7*x8*x9 + x3^9*x4*x7*x8 + x3^9*x5*x6^2*x7*x8^2*x9 + -x3^9*x5*x6^2*x7*x8^2 + -x3^9*x5*x6^2*x7*x9 + x3^9*x5*x6^2*x7 + -x3^9*x5*x6^2*x8^2*x9 + x3^9*x5*x6^2*x8^2 + x3^9*x5*x6^2*x9 + -x3^9*x5*x6^2 + x3^9*x5*x6*x7^2*x8^2*x9 + -x3^9*x5*x6*x7^2*x8^2 + -x3^9*x5*x6*x7^2*x9 + x3^9*x5*x6*x7^2 + -x3^9*x5*x6*x7*x8^2*x9 + x3^9*x5*x6*x7*x8^2 + x3^9*x5*x6*x7*x9 + -x3^9*x5*x6*x7 + -x3^9*x5*x7^2*x8^2*x9 + x3^9*x5*x7^2*x8^2 + x3^9*x5*x7^2*x9 + -x3^9*x5*x7^2 + x3^9*x5*x8^2*x9 + -x3^9*x5*x8^2 + -x3^9*x5*x9 + x3^9*x5 + -x3^9*x6^2*x7*x8^2*x9 + x3^9*x6^2*x7*x8^2 + x3^9*x6^2*x7*x9 + -x3^9*x6^2*x7 + x3^9*x6^2*x8^2*x9 + -x3^9*x6^2*x8^2 + -x3^9*x6^2*x9 + x3^9*x6^2 + -x3^9*x6*x7^2*x8^2*x9 + x3^9*x6*x7^2*x8^2 + x3^9*x6*x7^2*x9 + -x3^9*x6*x7^2 + x3^9*x6*x7*x8^2*x9 + -x3^9*x6*x7*x8^2 + -x3^9*x6*x7*x9 + x3^9*x6*x7 + x3^9*x7^2*x8^2*x9 + -x3^9*x7^2*x8^2 + -x3^9*x7^2*x9 + x3^9*x7^2 + -x3^9*x8^2*x9 + x3^9*x8^2 + x3^9*x9 + -x3^9 + -x3^8*x4^3*x5^2*x6*x7*x8*x9 + x3^8*x4^3*x5^2*x6*x7*x8 + x3^8*x4^3*x5^2*x6*x7*x9 + -x3^8*x4^3*x5^2*x6*x7 + x3^8*x4^3*x5^2*x6*x8*x9 + -x3^8*x4^3*x5^2*x6*x8 + -x3^8*x4^3*x5^2*x6*x9 + x3^8*x4^3*x5^2*x6 + x3^8*x4^3*x5^2*x7*x8*x9 + -x3^8*x4^3*x5^2*x7*x8 + -x3^8*x4^3*x5^2*x7*x9 + x3^8*x4^3*x5^2*x7 + -x3^8*x4^3*x5^2*x8*x9 + x3^8*x4^3*x5^2*x8 + x3^8*x4^3*x5^2*x9 + -x3^8*x4^3*x5^2 + x3^8*x4^3*x5*x6*x7*x8*x9 + -x3^8*x4^3*x5*x6*x7*x8 + -x3^8*x4^3*x5*x6*x7*x9 + x3^8*x4^3*x5*x6*x7 + -x3^8*x4^3*x5*x6*x8*x9 + x3^8*x4^3*x5*x6*x8 + x3^8*x4^3*x5*x6*x9 + -x3^8*x4^3*x5*x6 + -x3^8*x4^3*x5*x7*x8*x9 + x3^8*x4^3*x5*x7*x8 + x3^8*x4^3*x5*x7*x9 + -x3^8*x4^3*x5*x7 + x3^8*x4^3*x5*x8*x9 + -x3^8*x4^3*x5*x8 + -x3^8*x4^3*x5*x9 + x3^8*x4^3*x5 + -x3^8*x4^2*x5^2*x6*x7*x8^2*x9 + x3^8*x4^2*x5^2*x6*x7*x8^2 + x3^8*x4^2*x5^2*x6*x7*x8*x9 + -x3^8*x4^2*x5^2*x6*x7*x8 + x3^8*x4^2*x5^2*x6*x8^2*x9 + -x3^8*x4^2*x5^2*x6*x8^2 + -x3^8*x4^2*x5^2*x6*x8*x9 + x3^8*x4^2*x5^2*x6*x8 + x3^8*x4^2*x5^2*x7*x8^2*x9 + -x3^8*x4^2*x5^2*x7*x8^2 + -x3^8*x4^2*x5^2*x7*x8*x9 + x3^8*x4^2*x5^2*x7*x8 + -x3^8*x4^2*x5^2*x8^2*x9 + x3^8*x4^2*x5^2*x8^2 + x3^8*x4^2*x5^2*x8*x9 + -x3^8*x4^2*x5^2*x8 + -x3^8*x4^2*x5*x6*x7*x8^2*x9^2 + 2*x3^8*x4^2*x5*x6*x7*x8^2*x9 + -x3^8*x4^2*x5*x6*x7*x8^2 + -x3^8*x4^2*x5*x6*x7*x8*x9 + x3^8*x4^2*x5*x6*x7*x8 + x3^8*x4^2*x5*x6*x7*x9^2 + -x3^8*x4^2*x5*x6*x7*x9 + x3^8*x4^2*x5*x6*x8^2*x9^2 + -2*x3^8*x4^2*x5*x6*x8^2*x9 + x3^8*x4^2*x5*x6*x8^2 + x3^8*x4^2*x5*x6*x8*x9 + -x3^8*x4^2*x5*x6*x8 + -x3^8*x4^2*x5*x6*x9^2 + x3^8*x4^2*x5*x6*x9 + x3^8*x4^2*x5*x7*x8^2*x9^2 + -2*x3^8*x4^2*x5*x7*x8^2*x9 + x3^8*x4^2*x5*x7*x8^2 + x3^8*x4^2*x5*x7*x8*x9 + -x3^8*x4^2*x5*x7*x8 + -x3^8*x4^2*x5*x7*x9^2 + x3^8*x4^2*x5*x7*x9 + -x3^8*x4^2*x5*x8^2*x9^2 + 2*x3^8*x4^2*x5*x8^2*x9 + -x3^8*x4^2*x5*x8^2 + -x3^8*x4^2*x5*x8*x9 + x3^8*x4^2*x5*x8 + x3^8*x4^2*x5*x9^2 + -x3^8*x4^2*x5*x9 + x3^8*x4^2*x6*x7*x8^2*x9^2 + -x3^8*x4^2*x6*x7*x8^2*x9 + -x3^8*x4^2*x6*x7*x9^2 + x3^8*x4^2*x6*x7*x9 + -x3^8*x4^2*x6*x8^2*x9^2 + x3^8*x4^2*x6*x8^2*x9 + x3^8*x4^2*x6*x9^2 + -x3^8*x4^2*x6*x9 + -x3^8*x4^2*x7*x8^2*x9^2 + x3^8*x4^2*x7*x8^2*x9 + x3^8*x4^2*x7*x9^2 + -x3^8*x4^2*x7*x9 + x3^8*x4^2*x8^2*x9^2 + -x3^8*x4^2*x8^2*x9 + -x3^8*x4^2*x9^2 + x3^8*x4^2*x9 + -x3^8*x4*x5^2*x6^2*x7*x8^2*x9 + x3^8*x4*x5^2*x6^2*x7*x8^2 + x3^8*x4*x5^2*x6^2*x7*x9 + -x3^8*x4*x5^2*x6^2*x7 + x3^8*x4*x5^2*x6^2*x8^2*x9 + -x3^8*x4*x5^2*x6^2*x8^2 + -x3^8*x4*x5^2*x6^2*x9 + x3^8*x4*x5^2*x6^2 + x3^8*x4*x5^2*x6*x7*x8^2*x9 + -x3^8*x4*x5^2*x6*x7*x8^2 + -x3^8*x4*x5^2*x6*x7*x9 + x3^8*x4*x5^2*x6*x7 + -x3^8*x4*x5^2*x6*x8^2*x9 + x3^8*x4*x5^2*x6*x8^2 + x3^8*x4*x5^2*x6*x9 + -x3^8*x4*x5^2*x6 + -x3^8*x4*x5*x6^2*x7^2*x8^2*x9 + x3^8*x4*x5*x6^2*x7^2*x8^2 + x3^8*x4*x5*x6^2*x7^2*x9 + -x3^8*x4*x5*x6^2*x7^2 + 2*x3^8*x4*x5*x6^2*x7*x8^2*x9 + -2*x3^8*x4*x5*x6^2*x7*x8^2 + -x3^8*x4*x5*x6^2*x7*x8*x9^2 + x3^8*x4*x5*x6^2*x7*x8*x9 + x3^8*x4*x5*x6^2*x7*x9^2 + -3*x3^8*x4*x5*x6^2*x7*x9 + 2*x3^8*x4*x5*x6^2*x7 + -x3^8*x4*x5*x6^2*x8^2*x9 + x3^8*x4*x5*x6^2*x8^2 + x3^8*x4*x5*x6^2*x8*x9^2 + -x3^8*x4*x5*x6^2*x8*x9 + -x3^8*x4*x5*x6^2*x9^2 + 2*x3^8*x4*x5*x6^2*x9 + -x3^8*x4*x5*x6^2 + -x3^8*x4*x5*x6*x7^4*x8*x9 + x3^8*x4*x5*x6*x7^4*x8 + x3^8*x4*x5*x6*x7^4*x9 + -x3^8*x4*x5*x6*x7^4 + x3^8*x4*x5*x6*x7^2*x8^2*x9 + -x3^8*x4*x5*x6*x7^2*x8^2 + -x3^8*x4*x5*x6*x7^2*x8*x9^2 + 2*x3^8*x4*x5*x6*x7^2*x8*x9 + -x3^8*x4*x5*x6*x7^2*x8 + x3^8*x4*x5*x6*x7^2*x9^2 + -3*x3^8*x4*x5*x6*x7^2*x9 + 2*x3^8*x4*x5*x6*x7^2 + -2*x3^8*x4*x5*x6*x7*x8^2*x9 + 2*x3^8*x4*x5*x6*x7*x8^2 + 2*x3^8*x4*x5*x6*x7*x8*x9^2 + -2*x3^8*x4*x5*x6*x7*x8*x9 + -2*x3^8*x4*x5*x6*x7*x9^2 + 4*x3^8*x4*x5*x6*x7*x9 + -2*x3^8*x4*x5*x6*x7 + x3^8*x4*x5*x6*x8^2*x9 + -x3^8*x4*x5*x6*x8^2 + -x3^8*x4*x5*x6*x8*x9^2 + x3^8*x4*x5*x6*x8*x9 + x3^8*x4*x5*x6*x9^2 + -2*x3^8*x4*x5*x6*x9 + x3^8*x4*x5*x6 + x3^8*x4*x5*x7^4*x8*x9 + -x3^8*x4*x5*x7^4*x8 + -x3^8*x4*x5*x7^4*x9 + x3^8*x4*x5*x7^4 + x3^8*x4*x5*x7^2*x8*x9^2 + -2*x3^8*x4*x5*x7^2*x8*x9 + x3^8*x4*x5*x7^2*x8 + -x3^8*x4*x5*x7^2*x9^2 + 2*x3^8*x4*x5*x7^2*x9 + -x3^8*x4*x5*x7^2 + -x3^8*x4*x5*x7*x8*x9^2 + x3^8*x4*x5*x7*x8*x9 + x3^8*x4*x5*x7*x9^2 + -x3^8*x4*x5*x7*x9 + x3^8*x4*x6^2*x7^2*x8^2*x9 + -x3^8*x4*x6^2*x7^2*x8^2 + -x3^8*x4*x6^2*x7^2*x9 + x3^8*x4*x6^2*x7^2 + -x3^8*x4*x6^2*x7*x8^2*x9 + x3^8*x4*x6^2*x7*x8^2 + x3^8*x4*x6^2*x7*x8*x9^2 + -x3^8*x4*x6^2*x7*x8*x9 + -x3^8*x4*x6^2*x7*x9^2 + 2*x3^8*x4*x6^2*x7*x9 + -x3^8*x4*x6^2*x7 + -x3^8*x4*x6^2*x8*x9^2 + x3^8*x4*x6^2*x8*x9 + x3^8*x4*x6^2*x9^2 + -x3^8*x4*x6^2*x9 + x3^8*x4*x6*x7^4*x8*x9 + -x3^8*x4*x6*x7^4*x8 + -x3^8*x4*x6*x7^4*x9 + x3^8*x4*x6*x7^4 + -x3^8*x4*x6*x7^2*x8^2*x9 + x3^8*x4*x6*x7^2*x8^2 + x3^8*x4*x6*x7^2*x8*x9^2 + -2*x3^8*x4*x6*x7^2*x8*x9 + x3^8*x4*x6*x7^2*x8 + -x3^8*x4*x6*x7^2*x9^2 + 3*x3^8*x4*x6*x7^2*x9 + -2*x3^8*x4*x6*x7^2 + x3^8*x4*x6*x7*x8^2*x9 + -x3^8*x4*x6*x7*x8^2 + -2*x3^8*x4*x6*x7*x8*x9^2 + 2*x3^8*x4*x6*x7*x8*x9 + 2*x3^8*x4*x6*x7*x9^2 + -3*x3^8*x4*x6*x7*x9 + x3^8*x4*x6*x7 + x3^8*x4*x6*x8*x9^2 + -x3^8*x4*x6*x8*x9 + -x3^8*x4*x6*x9^2 + x3^8*x4*x6*x9 + -x3^8*x4*x7^4*x8*x9 + x3^8*x4*x7^4*x8 + x3^8*x4*x7^4*x9 + -x3^8*x4*x7^4 + -x3^8*x4*x7^2*x8*x9^2 + 2*x3^8*x4*x7^2*x8*x9 + -x3^8*x4*x7^2*x8 + x3^8*x4*x7^2*x9^2 + -2*x3^8*x4*x7^2*x9 + x3^8*x4*x7^2 + x3^8*x4*x7*x8*x9^2 + -x3^8*x4*x7*x8*x9 + -x3^8*x4*x7*x9^2 + x3^8*x4*x7*x9 + x3^8*x5^2*x6^2*x7*x8^2*x9 + -x3^8*x5^2*x6^2*x7*x8^2 + -x3^8*x5^2*x6^2*x7*x9 + x3^8*x5^2*x6^2*x7 + -x3^8*x5^2*x6^2*x8^2*x9 + x3^8*x5^2*x6^2*x8^2 + x3^8*x5^2*x6^2*x9 + -x3^8*x5^2*x6^2 + -x3^8*x5^2*x7*x8^2*x9 + x3^8*x5^2*x7*x8^2 + x3^8*x5^2*x7*x9 + -x3^8*x5^2*x7 + x3^8*x5^2*x8^2*x9 + -x3^8*x5^2*x8^2 + -x3^8*x5^2*x9 + x3^8*x5^2 + x3^8*x5*x6^2*x7^2*x8^2*x9 + -x3^8*x5*x6^2*x7^2*x8^2 + -x3^8*x5*x6^2*x7^2*x9 + x3^8*x5*x6^2*x7^2 + -2*x3^8*x5*x6^2*x7*x8^2*x9 + 2*x3^8*x5*x6^2*x7*x8^2 + x3^8*x5*x6^2*x7*x8*x9^2 + -x3^8*x5*x6^2*x7*x8*x9 + -x3^8*x5*x6^2*x7*x9^2 + 3*x3^8*x5*x6^2*x7*x9 + -2*x3^8*x5*x6^2*x7 + x3^8*x5*x6^2*x8^2*x9 + -x3^8*x5*x6^2*x8^2 + -x3^8*x5*x6^2*x8*x9^2 + x3^8*x5*x6^2*x8*x9 + x3^8*x5*x6^2*x9^2 + -2*x3^8*x5*x6^2*x9 + x3^8*x5*x6^2 + x3^8*x5*x6*x7^4*x8*x9 + -x3^8*x5*x6*x7^4*x8 + -x3^8*x5*x6*x7^4*x9 + x3^8*x5*x6*x7^4 + -x3^8*x5*x6*x7^2*x8^2*x9 + x3^8*x5*x6*x7^2*x8^2 + x3^8*x5*x6*x7^2*x8*x9^2 + -2*x3^8*x5*x6*x7^2*x8*x9 + x3^8*x5*x6*x7^2*x8 + -x3^8*x5*x6*x7^2*x9^2 + 3*x3^8*x5*x6*x7^2*x9 + -2*x3^8*x5*x6*x7^2 + x3^8*x5*x6*x7*x8^2*x9^2 + -x3^8*x5*x6*x7*x8^2 + -2*x3^8*x5*x6*x7*x8*x9^2 + 2*x3^8*x5*x6*x7*x8*x9 + x3^8*x5*x6*x7*x9^2 + -2*x3^8*x5*x6*x7*x9 + x3^8*x5*x6*x7 + -x3^8*x5*x6*x8^2*x9^2 + x3^8*x5*x6*x8^2*x9 + x3^8*x5*x6*x8*x9^2 + -x3^8*x5*x6*x8*x9 + -x3^8*x5*x7^4*x8*x9 + x3^8*x5*x7^4*x8 + x3^8*x5*x7^4*x9 + -x3^8*x5*x7^4 + -x3^8*x5*x7^2*x8*x9^2 + 2*x3^8*x5*x7^2*x8*x9 + -x3^8*x5*x7^2*x8 + x3^8*x5*x7^2*x9^2 + -2*x3^8*x5*x7^2*x9 + x3^8*x5*x7^2 + -x3^8*x5*x7*x8^2*x9^2 + 2*x3^8*x5*x7*x8^2*x9 + -x3^8*x5*x7*x8^2 + x3^8*x5*x7*x8*x9^2 + -x3^8*x5*x7*x8*x9 + -x3^8*x5*x7*x9 + x3^8*x5*x7 + x3^8*x5*x8^2*x9^2 + -2*x3^8*x5*x8^2*x9 + x3^8*x5*x8^2 + -x3^8*x5*x9^2 + 2*x3^8*x5*x9 + -x3^8*x5 + -x3^8*x6^2*x7^2*x8^2*x9 + x3^8*x6^2*x7^2*x8^2 + x3^8*x6^2*x7^2*x9 + -x3^8*x6^2*x7^2 + x3^8*x6^2*x7*x8^2*x9 + -x3^8*x6^2*x7*x8^2 + -x3^8*x6^2*x7*x8*x9^2 + x3^8*x6^2*x7*x8*x9 + x3^8*x6^2*x7*x9^2 + -2*x3^8*x6^2*x7*x9 + x3^8*x6^2*x7 + x3^8*x6^2*x8*x9^2 + -x3^8*x6^2*x8*x9 + -x3^8*x6^2*x9^2 + x3^8*x6^2*x9 + -x3^8*x6*x7^4*x8*x9 + x3^8*x6*x7^4*x8 + x3^8*x6*x7^4*x9 + -x3^8*x6*x7^4 + x3^8*x6*x7^2*x8^2*x9 + -x3^8*x6*x7^2*x8^2 + -x3^8*x6*x7^2*x8*x9^2 + 2*x3^8*x6*x7^2*x8*x9 + -x3^8*x6*x7^2*x8 + x3^8*x6*x7^2*x9^2 + -3*x3^8*x6*x7^2*x9 + 2*x3^8*x6*x7^2 + -x3^8*x6*x7*x8^2*x9^2 + x3^8*x6*x7*x8^2 + 2*x3^8*x6*x7*x8*x9^2 + -2*x3^8*x6*x7*x8*x9 + -x3^8*x6*x7*x9^2 + 2*x3^8*x6*x7*x9 + -x3^8*x6*x7 + x3^8*x6*x8^2*x9^2 + -x3^8*x6*x8^2*x9 + -x3^8*x6*x8*x9^2 + x3^8*x6*x8*x9 + x3^8*x7^4*x8*x9 + -x3^8*x7^4*x8 + -x3^8*x7^4*x9 + x3^8*x7^4 + x3^8*x7^2*x8*x9^2 + -2*x3^8*x7^2*x8*x9 + x3^8*x7^2*x8 + -x3^8*x7^2*x9^2 + 2*x3^8*x7^2*x9 + -x3^8*x7^2 + x3^8*x7*x8^2*x9^2 + -x3^8*x7*x8^2*x9 + -x3^8*x7*x8*x9^2 + x3^8*x7*x8*x9 + -x3^8*x8^2*x9^2 + x3^8*x8^2*x9 + x3^8*x9^2 + -x3^8*x9 + -x3^7*x4^3*x5^3*x6*x7*x8*x9 + x3^7*x4^3*x5^3*x6*x7*x8 + x3^7*x4^3*x5^3*x6*x7*x9 + -x3^7*x4^3*x5^3*x6*x7 + x3^7*x4^3*x5^3*x6*x8*x9 + -x3^7*x4^3*x5^3*x6*x8 + -x3^7*x4^3*x5^3*x6*x9 + x3^7*x4^3*x5^3*x6 + x3^7*x4^3*x5^3*x7*x8*x9 + -x3^7*x4^3*x5^3*x7*x8 + -x3^7*x4^3*x5^3*x7*x9 + x3^7*x4^3*x5^3*x7 + -x3^7*x4^3*x5^3*x8*x9 + x3^7*x4^3*x5^3*x8 + x3^7*x4^3*x5^3*x9 + -x3^7*x4^3*x5^3 + x3^7*x4^3*x5^2*x6*x7*x8*x9 + -x3^7*x4^3*x5^2*x6*x7*x8 + -x3^7*x4^3*x5^2*x6*x7*x9 + x3^7*x4^3*x5^2*x6*x7 + -x3^7*x4^3*x5^2*x6*x8*x9 + x3^7*x4^3*x5^2*x6*x8 + x3^7*x4^3*x5^2*x6*x9 + -x3^7*x4^3*x5^2*x6 + -x3^7*x4^3*x5^2*x7*x8*x9 + x3^7*x4^3*x5^2*x7*x8 + x3^7*x4^3*x5^2*x7*x9 + -x3^7*x4^3*x5^2*x7 + x3^7*x4^3*x5^2*x8*x9 + -x3^7*x4^3*x5^2*x8 + -x3^7*x4^3*x5^2*x9 + x3^7*x4^3*x5^2 + -x3^7*x4^2*x5^3*x6*x7*x8^2*x9 + x3^7*x4^2*x5^3*x6*x7*x8^2 + x3^7*x4^2*x5^3*x6*x7*x8*x9 + -x3^7*x4^2*x5^3*x6*x7*x8 + x3^7*x4^2*x5^3*x6*x8^2*x9 + -x3^7*x4^2*x5^3*x6*x8^2 + -x3^7*x4^2*x5^3*x6*x8*x9 + x3^7*x4^2*x5^3*x6*x8 + x3^7*x4^2*x5^3*x7*x8^2*x9 + -x3^7*x4^2*x5^3*x7*x8^2 + -x3^7*x4^2*x5^3*x7*x8*x9 + x3^7*x4^2*x5^3*x7*x8 + -x3^7*x4^2*x5^3*x8^2*x9 + x3^7*x4^2*x5^3*x8^2 + x3^7*x4^2*x5^3*x8*x9 + -x3^7*x4^2*x5^3*x8 + -x3^7*x4^2*x5^2*x6*x7^2*x8*x9 + x3^7*x4^2*x5^2*x6*x7^2*x8 + x3^7*x4^2*x5^2*x6*x7^2*x9 + -x3^7*x4^2*x5^2*x6*x7^2 + x3^7*x4^2*x5^2*x6*x7*x8^2*x9 + -x3^7*x4^2*x5^2*x6*x7*x8^2 + -x3^7*x4^2*x5^2*x6*x7*x9 + x3^7*x4^2*x5^2*x6*x7 + -x3^7*x4^2*x5^2*x6*x8^2*x9 + x3^7*x4^2*x5^2*x6*x8^2 + x3^7*x4^2*x5^2*x6*x8*x9 + -x3^7*x4^2*x5^2*x6*x8 + x3^7*x4^2*x5^2*x7^2*x8*x9 + -x3^7*x4^2*x5^2*x7^2*x8 + -x3^7*x4^2*x5^2*x7^2*x9 + x3^7*x4^2*x5^2*x7^2 + -x3^7*x4^2*x5^2*x7*x8^2*x9 + x3^7*x4^2*x5^2*x7*x8^2 + x3^7*x4^2*x5^2*x7*x9 + -x3^7*x4^2*x5^2*x7 + x3^7*x4^2*x5^2*x8^2*x9 + -x3^7*x4^2*x5^2*x8^2 + -x3^7*x4^2*x5^2*x8*x9 + x3^7*x4^2*x5^2*x8 + x3^7*x4^2*x5*x6*x7^2*x8*x9 + -x3^7*x4^2*x5*x6*x7^2*x8 + -x3^7*x4^2*x5*x6*x7^2*x9 + x3^7*x4^2*x5*x6*x7^2 + -x3^7*x4^2*x5*x6*x7*x8*x9^3 + x3^7*x4^2*x5*x6*x7*x8*x9^2 + -x3^7*x4^2*x5*x6*x7*x8*x9 + x3^7*x4^2*x5*x6*x7*x8 + x3^7*x4^2*x5*x6*x7*x9^3 + -x3^7*x4^2*x5*x6*x7*x9^2 + x3^7*x4^2*x5*x6*x7*x9 + -x3^7*x4^2*x5*x6*x7 + x3^7*x4^2*x5*x6*x8*x9^3 + -x3^7*x4^2*x5*x6*x8*x9^2 + -x3^7*x4^2*x5*x6*x9^3 + x3^7*x4^2*x5*x6*x9^2 + -x3^7*x4^2*x5*x7^2*x8*x9 + x3^7*x4^2*x5*x7^2*x8 + x3^7*x4^2*x5*x7^2*x9 + -x3^7*x4^2*x5*x7^2 + x3^7*x4^2*x5*x7*x8*x9^3 + -x3^7*x4^2*x5*x7*x8*x9^2 + x3^7*x4^2*x5*x7*x8*x9 + -x3^7*x4^2*x5*x7*x8 + -x3^7*x4^2*x5*x7*x9^3 + x3^7*x4^2*x5*x7*x9^2 + -x3^7*x4^2*x5*x7*x9 + x3^7*x4^2*x5*x7 + -x3^7*x4^2*x5*x8*x9^3 + x3^7*x4^2*x5*x8*x9^2 + x3^7*x4^2*x5*x9^3 + -x3^7*x4^2*x5*x9^2 + x3^7*x4^2*x6*x7*x8*x9^3 + -x3^7*x4^2*x6*x7*x8*x9^2 + -x3^7*x4^2*x6*x7*x9^3 + x3^7*x4^2*x6*x7*x9^2 + -x3^7*x4^2*x6*x8*x9^3 + x3^7*x4^2*x6*x8*x9^2 + x3^7*x4^2*x6*x9^3 + -x3^7*x4^2*x6*x9^2 + -x3^7*x4^2*x7*x8*x9^3 + x3^7*x4^2*x7*x8*x9^2 + x3^7*x4^2*x7*x9^3 + -x3^7*x4^2*x7*x9^2 + x3^7*x4^2*x8*x9^3 + -x3^7*x4^2*x8*x9^2 + -x3^7*x4^2*x9^3 + x3^7*x4^2*x9^2 + -x3^7*x4*x5^3*x6^2*x7*x8^2*x9 + x3^7*x4*x5^3*x6^2*x7*x8^2 + x3^7*x4*x5^3*x6^2*x7*x9 + -x3^7*x4*x5^3*x6^2*x7 + x3^7*x4*x5^3*x6^2*x8^2*x9 + -x3^7*x4*x5^3*x6^2*x8^2 + -x3^7*x4*x5^3*x6^2*x9 + x3^7*x4*x5^3*x6^2 + -x3^7*x4*x5^3*x6*x7^2*x8^2*x9 + x3^7*x4*x5^3*x6*x7^2*x8^2 + x3^7*x4*x5^3*x6*x7^2*x9 + -x3^7*x4*x5^3*x6*x7^2 + 2*x3^7*x4*x5^3*x6*x7*x8^2*x9 + -2*x3^7*x4*x5^3*x6*x7*x8^2 + -2*x3^7*x4*x5^3*x6*x7*x9 + 2*x3^7*x4*x5^3*x6*x7 + -x3^7*x4*x5^3*x6*x8^2*x9 + x3^7*x4*x5^3*x6*x8^2 + x3^7*x4*x5^3*x6*x9 + -x3^7*x4*x5^3*x6 + x3^7*x4*x5^3*x7^2*x8^2*x9 + -x3^7*x4*x5^3*x7^2*x8^2 + -x3^7*x4*x5^3*x7^2*x9 + x3^7*x4*x5^3*x7^2 + -x3^7*x4*x5^3*x7*x8^2*x9 + x3^7*x4*x5^3*x7*x8^2 + x3^7*x4*x5^3*x7*x9 + -x3^7*x4*x5^3*x7 + -x3^7*x4*x5^2*x6^2*x7^2*x8^2*x9 + x3^7*x4*x5^2*x6^2*x7^2*x8^2 + -x3^7*x4*x5^2*x6^2*x7^2*x8*x9^2 + x3^7*x4*x5^2*x6^2*x7^2*x8*x9 + x3^7*x4*x5^2*x6^2*x7^2*x9^2 + -x3^7*x4*x5^2*x6^2*x7^2 + 2*x3^7*x4*x5^2*x6^2*x7*x8^2*x9 + -2*x3^7*x4*x5^2*x6^2*x7*x8^2 + -2*x3^7*x4*x5^2*x6^2*x7*x9 + 2*x3^7*x4*x5^2*x6^2*x7 + -x3^7*x4*x5^2*x6^2*x8^2*x9 + x3^7*x4*x5^2*x6^2*x8^2 + x3^7*x4*x5^2*x6^2*x8*x9^2 + -x3^7*x4*x5^2*x6^2*x8*x9 + -x3^7*x4*x5^2*x6^2*x9^2 + 2*x3^7*x4*x5^2*x6^2*x9 + -x3^7*x4*x5^2*x6^2 + -x3^7*x4*x5^2*x6*x7^3*x8*x9^2 + x3^7*x4*x5^2*x6*x7^3*x8 + x3^7*x4*x5^2*x6*x7^3*x9^2 + -x3^7*x4*x5^2*x6*x7^3 + x3^7*x4*x5^2*x6*x7^2*x8^2*x9 + -x3^7*x4*x5^2*x6*x7^2*x8^2 + x3^7*x4*x5^2*x6*x7^2*x8*x9^2 + x3^7*x4*x5^2*x6*x7^2*x8*x9 + -2*x3^7*x4*x5^2*x6*x7^2*x8 + -x3^7*x4*x5^2*x6*x7^2*x9^2 + -2*x3^7*x4*x5^2*x6*x7^2*x9 + 3*x3^7*x4*x5^2*x6*x7^2 + -x3^7*x4*x5^2*x6*x7*x8^2*x9^2 + -x3^7*x4*x5^2*x6*x7*x8^2*x9 + 2*x3^7*x4*x5^2*x6*x7*x8^2 + x3^7*x4*x5^2*x6*x7*x8*x9^2 + -2*x3^7*x4*x5^2*x6*x7*x8*x9 + x3^7*x4*x5^2*x6*x7*x8 + 3*x3^7*x4*x5^2*x6*x7*x9 + -3*x3^7*x4*x5^2*x6*x7 + x3^7*x4*x5^2*x6*x8^2*x9^2 + -x3^7*x4*x5^2*x6*x8^2 + -x3^7*x4*x5^2*x6*x8*x9^2 + x3^7*x4*x5^2*x6*x8*x9 + -x3^7*x4*x5^2*x6*x9 + x3^7*x4*x5^2*x6 + x3^7*x4*x5^2*x7^3*x8*x9^2 + -x3^7*x4*x5^2*x7^3*x8 + -x3^7*x4*x5^2*x7^3*x9^2 + x3^7*x4*x5^2*x7^3 + -2*x3^7*x4*x5^2*x7^2*x8*x9 + 2*x3^7*x4*x5^2*x7^2*x8 + 2*x3^7*x4*x5^2*x7^2*x9 + -2*x3^7*x4*x5^2*x7^2 + x3^7*x4*x5^2*x7*x8^2*x9^2 + -x3^7*x4*x5^2*x7*x8^2*x9 + -x3^7*x4*x5^2*x7*x8*x9^2 + 2*x3^7*x4*x5^2*x7*x8*x9 + -x3^7*x4*x5^2*x7*x8 + -x3^7*x4*x5^2*x7*x9 + x3^7*x4*x5^2*x7 + -x3^7*x4*x5^2*x8^2*x9^2 + x3^7*x4*x5^2*x8^2*x9 + x3^7*x4*x5^2*x9^2 + -x3^7*x4*x5^2*x9 + x3^7*x4*x5*x6^2*x7^2*x8^2*x9 + -x3^7*x4*x5*x6^2*x7^2*x8^2 + -x3^7*x4*x5*x6^2*x7^2*x9 + x3^7*x4*x5*x6^2*x7^2 + -x3^7*x4*x5*x6^2*x7*x8^2*x9 + x3^7*x4*x5*x6^2*x7*x8^2 + -x3^7*x4*x5*x6^2*x7*x8*x9^3 + 2*x3^7*x4*x5*x6^2*x7*x8*x9^2 + -x3^7*x4*x5*x6^2*x7*x8*x9 + x3^7*x4*x5*x6^2*x7*x9^3 + -2*x3^7*x4*x5*x6^2*x7*x9^2 + 2*x3^7*x4*x5*x6^2*x7*x9 + -x3^7*x4*x5*x6^2*x7 + x3^7*x4*x5*x6^2*x8*x9^3 + -2*x3^7*x4*x5*x6^2*x8*x9^2 + x3^7*x4*x5*x6^2*x8*x9 + -x3^7*x4*x5*x6^2*x9^3 + 2*x3^7*x4*x5*x6^2*x9^2 + -x3^7*x4*x5*x6^2*x9 + x3^7*x4*x5*x6*x7^3*x8*x9 + -x3^7*x4*x5*x6*x7^3*x8 + -x3^7*x4*x5*x6*x7^3*x9 + x3^7*x4*x5*x6*x7^3 + x3^7*x4*x5*x6*x7^2*x8*x9^2 + -3*x3^7*x4*x5*x6*x7^2*x8*x9 + 2*x3^7*x4*x5*x6*x7^2*x8 + -x3^7*x4*x5*x6*x7^2*x9^2 + 3*x3^7*x4*x5*x6*x7^2*x9 + -2*x3^7*x4*x5*x6*x7^2 + x3^7*x4*x5*x6*x7*x8^2*x9^2 + -x3^7*x4*x5*x6*x7*x8^2*x9 + x3^7*x4*x5*x6*x7*x8*x9^3 + -3*x3^7*x4*x5*x6*x7*x8*x9^2 + 3*x3^7*x4*x5*x6*x7*x8*x9 + -x3^7*x4*x5*x6*x7*x8 + -x3^7*x4*x5*x6*x7*x9^3 + 2*x3^7*x4*x5*x6*x7*x9^2 + -2*x3^7*x4*x5*x6*x7*x9 + x3^7*x4*x5*x6*x7 + -x3^7*x4*x5*x6*x8^2*x9^2 + x3^7*x4*x5*x6*x8^2*x9 + -x3^7*x4*x5*x6*x8*x9^3 + 2*x3^7*x4*x5*x6*x8*x9^2 + -x3^7*x4*x5*x6*x8*x9 + x3^7*x4*x5*x6*x9^3 + -x3^7*x4*x5*x6*x9^2 + -x3^7*x4*x5*x7^3*x8*x9 + x3^7*x4*x5*x7^3*x8 + x3^7*x4*x5*x7^3*x9 + -x3^7*x4*x5*x7^3 + -x3^7*x4*x5*x7^2*x8^2*x9 + x3^7*x4*x5*x7^2*x8^2 + -x3^7*x4*x5*x7^2*x8*x9^2 + 3*x3^7*x4*x5*x7^2*x8*x9 + -2*x3^7*x4*x5*x7^2*x8 + x3^7*x4*x5*x7^2*x9^2 + -2*x3^7*x4*x5*x7^2*x9 + x3^7*x4*x5*x7^2 + -x3^7*x4*x5*x7*x8^2*x9^2 + 2*x3^7*x4*x5*x7*x8^2*x9 + -x3^7*x4*x5*x7*x8^2 + x3^7*x4*x5*x7*x8*x9^2 + -2*x3^7*x4*x5*x7*x8*x9 + x3^7*x4*x5*x7*x8 + x3^7*x4*x5*x8^2*x9^2 + -x3^7*x4*x5*x8^2*x9 + -x3^7*x4*x5*x9^2 + x3^7*x4*x5*x9 + x3^7*x4*x6^2*x7^2*x8*x9^2 + -x3^7*x4*x6^2*x7^2*x8*x9 + -x3^7*x4*x6^2*x7^2*x9^2 + x3^7*x4*x6^2*x7^2*x9 + x3^7*x4*x6^2*x7*x8*x9^3 + -2*x3^7*x4*x6^2*x7*x8*x9^2 + x3^7*x4*x6^2*x7*x8*x9 + -x3^7*x4*x6^2*x7*x9^3 + 2*x3^7*x4*x6^2*x7*x9^2 + -x3^7*x4*x6^2*x7*x9 + -x3^7*x4*x6^2*x8*x9^3 + x3^7*x4*x6^2*x8*x9^2 + x3^7*x4*x6^2*x9^3 + -x3^7*x4*x6^2*x9^2 + x3^7*x4*x6*x7^3*x8*x9^2 + -x3^7*x4*x6*x7^3*x8*x9 + -x3^7*x4*x6*x7^3*x9^2 + x3^7*x4*x6*x7^3*x9 + -2*x3^7*x4*x6*x7^2*x8*x9^2 + 2*x3^7*x4*x6*x7^2*x8*x9 + 2*x3^7*x4*x6*x7^2*x9^2 + -2*x3^7*x4*x6*x7^2*x9 + -x3^7*x4*x6*x7*x8*x9^3 + 2*x3^7*x4*x6*x7*x8*x9^2 + -x3^7*x4*x6*x7*x8*x9 + x3^7*x4*x6*x7*x9^3 + -2*x3^7*x4*x6*x7*x9^2 + x3^7*x4*x6*x7*x9 + x3^7*x4*x6*x8*x9^3 + -x3^7*x4*x6*x8*x9^2 + -x3^7*x4*x6*x9^3 + x3^7*x4*x6*x9^2 + -x3^7*x4*x7^3*x8*x9^2 + x3^7*x4*x7^3*x8*x9 + x3^7*x4*x7^3*x9^2 + -x3^7*x4*x7^3*x9 + x3^7*x4*x7^2*x8*x9^2 + -x3^7*x4*x7^2*x8*x9 + -x3^7*x4*x7^2*x9^2 + x3^7*x4*x7^2*x9 + x3^7*x5^3*x6^2*x7*x8^2*x9 + -x3^7*x5^3*x6^2*x7*x8^2 + -x3^7*x5^3*x6^2*x7*x9 + x3^7*x5^3*x6^2*x7 + -x3^7*x5^3*x6^2*x8^2*x9 + x3^7*x5^3*x6^2*x8^2 + x3^7*x5^3*x6^2*x9 + -x3^7*x5^3*x6^2 + x3^7*x5^3*x6*x7^2*x8^2*x9 + -x3^7*x5^3*x6*x7^2*x8^2 + -x3^7*x5^3*x6*x7^2*x9 + x3^7*x5^3*x6*x7^2 + -x3^7*x5^3*x6*x7*x8^2*x9 + x3^7*x5^3*x6*x7*x8^2 + x3^7*x5^3*x6*x7*x9 + -x3^7*x5^3*x6*x7 + -x3^7*x5^3*x7^2*x8^2*x9 + x3^7*x5^3*x7^2*x8^2 + x3^7*x5^3*x7^2*x9 + -x3^7*x5^3*x7^2 + x3^7*x5^3*x8^2*x9 + -x3^7*x5^3*x8^2 + -x3^7*x5^3*x9 + x3^7*x5^3 + x3^7*x5^2*x6^2*x7^2*x8^2*x9 + -x3^7*x5^2*x6^2*x7^2*x8^2 + x3^7*x5^2*x6^2*x7^2*x8*x9^2 + -x3^7*x5^2*x6^2*x7^2*x8*x9 + -x3^7*x5^2*x6^2*x7^2*x9^2 + x3^7*x5^2*x6^2*x7^2 + -2*x3^7*x5^2*x6^2*x7*x8^2*x9 + 2*x3^7*x5^2*x6^2*x7*x8^2 + 2*x3^7*x5^2*x6^2*x7*x9 + -2*x3^7*x5^2*x6^2*x7 + x3^7*x5^2*x6^2*x8^2*x9 + -x3^7*x5^2*x6^2*x8^2 + -x3^7*x5^2*x6^2*x8*x9^2 + x3^7*x5^2*x6^2*x8*x9 + x3^7*x5^2*x6^2*x9^2 + -2*x3^7*x5^2*x6^2*x9 + x3^7*x5^2*x6^2 + x3^7*x5^2*x6*x7^3*x8*x9^2 + -x3^7*x5^2*x6*x7^3*x8 + -x3^7*x5^2*x6*x7^3*x9^2 + x3^7*x5^2*x6*x7^3 + -x3^7*x5^2*x6*x7^2*x8^2*x9 + x3^7*x5^2*x6*x7^2*x8^2 + -x3^7*x5^2*x6*x7^2*x8*x9^2 + x3^7*x5^2*x6*x7^2*x8 + x3^7*x5^2*x6*x7^2*x9^2 + x3^7*x5^2*x6*x7^2*x9 + -2*x3^7*x5^2*x6*x7^2 + x3^7*x5^2*x6*x7*x8^2*x9^2 + -x3^7*x5^2*x6*x7*x8^2 + -x3^7*x5^2*x6*x7*x8*x9^2 + x3^7*x5^2*x6*x7*x8*x9 + -x3^7*x5^2*x6*x7*x9 + x3^7*x5^2*x6*x7 + -x3^7*x5^2*x6*x8^2*x9^2 + x3^7*x5^2*x6*x8^2*x9 + x3^7*x5^2*x6*x8*x9^2 + -x3^7*x5^2*x6*x8*x9 + -x3^7*x5^2*x7^3*x8*x9^2 + x3^7*x5^2*x7^3*x8 + x3^7*x5^2*x7^3*x9^2 + -x3^7*x5^2*x7^3 + x3^7*x5^2*x7^2*x8*x9 + -x3^7*x5^2*x7^2*x8 + -x3^7*x5^2*x7^2*x9 + x3^7*x5^2*x7^2 + -x3^7*x5^2*x7*x8^2*x9^2 + 2*x3^7*x5^2*x7*x8^2*x9 + -x3^7*x5^2*x7*x8^2 + x3^7*x5^2*x7*x8*x9^2 + -x3^7*x5^2*x7*x8*x9 + -x3^7*x5^2*x7*x9 + x3^7*x5^2*x7 + x3^7*x5^2*x8^2*x9^2 + -2*x3^7*x5^2*x8^2*x9 + x3^7*x5^2*x8^2 + -x3^7*x5^2*x9^2 + 2*x3^7*x5^2*x9 + -x3^7*x5^2 + -x3^7*x5*x6^2*x7^2*x8^2*x9 + x3^7*x5*x6^2*x7^2*x8^2 + x3^7*x5*x6^2*x7^2*x9 + -x3^7*x5*x6^2*x7^2 + x3^7*x5*x6^2*x7*x8^2*x9 + -x3^7*x5*x6^2*x7*x8^2 + x3^7*x5*x6^2*x7*x8*x9^3 + -2*x3^7*x5*x6^2*x7*x8*x9^2 + x3^7*x5*x6^2*x7*x8*x9 + -x3^7*x5*x6^2*x7*x9^3 + 2*x3^7*x5*x6^2*x7*x9^2 + -2*x3^7*x5*x6^2*x7*x9 + x3^7*x5*x6^2*x7 + -x3^7*x5*x6^2*x8*x9^3 + 2*x3^7*x5*x6^2*x8*x9^2 + -x3^7*x5*x6^2*x8*x9 + x3^7*x5*x6^2*x9^3 + -2*x3^7*x5*x6^2*x9^2 + x3^7*x5*x6^2*x9 + -x3^7*x5*x6*x7^3*x8*x9 + x3^7*x5*x6*x7^3*x8 + x3^7*x5*x6*x7^3*x9 + -x3^7*x5*x6*x7^3 + -x3^7*x5*x6*x7^2*x8*x9^2 + 2*x3^7*x5*x6*x7^2*x8*x9 + -x3^7*x5*x6*x7^2*x8 + x3^7*x5*x6*x7^2*x9^2 + -2*x3^7*x5*x6*x7^2*x9 + x3^7*x5*x6*x7^2 + -x3^7*x5*x6*x7*x8^2*x9^2 + x3^7*x5*x6*x7*x8^2*x9 + 2*x3^7*x5*x6*x7*x8*x9^2 + -2*x3^7*x5*x6*x7*x8*x9 + -x3^7*x5*x6*x7*x9^2 + x3^7*x5*x6*x7*x9 + x3^7*x5*x6*x8^2*x9^2 + -x3^7*x5*x6*x8^2*x9 + -x3^7*x5*x6*x8*x9^2 + x3^7*x5*x6*x8*x9 + x3^7*x5*x7^3*x8*x9 + -x3^7*x5*x7^3*x8 + -x3^7*x5*x7^3*x9 + x3^7*x5*x7^3 + x3^7*x5*x7^2*x8^2*x9 + -x3^7*x5*x7^2*x8^2 + x3^7*x5*x7^2*x8*x9^2 + -2*x3^7*x5*x7^2*x8*x9 + x3^7*x5*x7^2*x8 + -x3^7*x5*x7^2*x9^2 + x3^7*x5*x7^2*x9 + x3^7*x5*x7*x8^2*x9^2 + -2*x3^7*x5*x7*x8^2*x9 + x3^7*x5*x7*x8^2 + -x3^7*x5*x7*x8*x9^3 + x3^7*x5*x7*x8*x9 + x3^7*x5*x7*x9^3 + -x3^7*x5*x7*x9^2 + x3^7*x5*x7*x9 + -x3^7*x5*x7 + -x3^7*x5*x8^2*x9^2 + x3^7*x5*x8^2*x9 + x3^7*x5*x8*x9^3 + -x3^7*x5*x8*x9^2 + -x3^7*x5*x9^3 + 2*x3^7*x5*x9^2 + -x3^7*x5*x9 + -x3^7*x6^2*x7^2*x8*x9^2 + x3^7*x6^2*x7^2*x8*x9 + x3^7*x6^2*x7^2*x9^2 + -x3^7*x6^2*x7^2*x9 + -x3^7*x6^2*x7*x8*x9^3 + 2*x3^7*x6^2*x7*x8*x9^2 + -x3^7*x6^2*x7*x8*x9 + x3^7*x6^2*x7*x9^3 + -2*x3^7*x6^2*x7*x9^2 + x3^7*x6^2*x7*x9 + x3^7*x6^2*x8*x9^3 + -x3^7*x6^2*x8*x9^2 + -x3^7*x6^2*x9^3 + x3^7*x6^2*x9^2 + -x3^7*x6*x7^3*x8*x9^2 + x3^7*x6*x7^3*x8*x9 + x3^7*x6*x7^3*x9^2 + -x3^7*x6*x7^3*x9 + 2*x3^7*x6*x7^2*x8*x9^2 + -2*x3^7*x6*x7^2*x8*x9 + -2*x3^7*x6*x7^2*x9^2 + 2*x3^7*x6*x7^2*x9 + -x3^7*x6*x7*x8*x9^2 + x3^7*x6*x7*x8*x9 + x3^7*x6*x7*x9^2 + -x3^7*x6*x7*x9 + x3^7*x7^3*x8*x9^2 + -x3^7*x7^3*x8*x9 + -x3^7*x7^3*x9^2 + x3^7*x7^3*x9 + -x3^7*x7^2*x8*x9^2 + x3^7*x7^2*x8*x9 + x3^7*x7^2*x9^2 + -x3^7*x7^2*x9 + x3^7*x7*x8*x9^3 + -x3^7*x7*x8*x9^2 + -x3^7*x7*x9^3 + x3^7*x7*x9^2 + -x3^7*x8*x9^3 + x3^7*x8*x9^2 + x3^7*x9^3 + -x3^7*x9^2 + -x3^6*x4^2*x5^6*x6*x7*x8*x9 + x3^6*x4^2*x5^6*x6*x7*x8 + x3^6*x4^2*x5^6*x6*x7*x9 + -x3^6*x4^2*x5^6*x6*x7 + x3^6*x4^2*x5^6*x6*x8*x9 + -x3^6*x4^2*x5^6*x6*x8 + -x3^6*x4^2*x5^6*x6*x9 + x3^6*x4^2*x5^6*x6 + x3^6*x4^2*x5^6*x7*x8*x9 + -x3^6*x4^2*x5^6*x7*x8 + -x3^6*x4^2*x5^6*x7*x9 + x3^6*x4^2*x5^6*x7 + -x3^6*x4^2*x5^6*x8*x9 + x3^6*x4^2*x5^6*x8 + x3^6*x4^2*x5^6*x9 + -x3^6*x4^2*x5^6 + x3^6*x4^2*x5^3*x6*x7*x8*x9 + -x3^6*x4^2*x5^3*x6*x7*x8 + -x3^6*x4^2*x5^3*x6*x7*x9 + x3^6*x4^2*x5^3*x6*x7 + -x3^6*x4^2*x5^3*x6*x8*x9 + x3^6*x4^2*x5^3*x6*x8 + x3^6*x4^2*x5^3*x6*x9 + -x3^6*x4^2*x5^3*x6 + -x3^6*x4^2*x5^3*x7*x8*x9 + x3^6*x4^2*x5^3*x7*x8 + x3^6*x4^2*x5^3*x7*x9 + -x3^6*x4^2*x5^3*x7 + x3^6*x4^2*x5^3*x8*x9 + -x3^6*x4^2*x5^3*x8 + -x3^6*x4^2*x5^3*x9 + x3^6*x4^2*x5^3 + -x3^6*x4*x5^6*x6^2*x7*x8*x9 + x3^6*x4*x5^6*x6^2*x7*x8 + x3^6*x4*x5^6*x6^2*x7*x9 + -x3^6*x4*x5^6*x6^2*x7 + x3^6*x4*x5^6*x6^2*x8*x9 + -x3^6*x4*x5^6*x6^2*x8 + -x3^6*x4*x5^6*x6^2*x9 + x3^6*x4*x5^6*x6^2 + x3^6*x4*x5^6*x6*x7*x8*x9 + -x3^6*x4*x5^6*x6*x7*x8 + -x3^6*x4*x5^6*x6*x7*x9 + x3^6*x4*x5^6*x6*x7 + -x3^6*x4*x5^6*x6*x8*x9 + x3^6*x4*x5^6*x6*x8 + x3^6*x4*x5^6*x6*x9 + -x3^6*x4*x5^6*x6 + -x3^6*x4*x5^5*x6*x7*x8^2*x9 + x3^6*x4*x5^5*x6*x7*x8^2 + x3^6*x4*x5^5*x6*x7*x8*x9 + -x3^6*x4*x5^5*x6*x7*x8 + x3^6*x4*x5^5*x6*x8^2*x9 + -x3^6*x4*x5^5*x6*x8^2 + -x3^6*x4*x5^5*x6*x8*x9 + x3^6*x4*x5^5*x6*x8 + x3^6*x4*x5^5*x7*x8^2*x9 + -x3^6*x4*x5^5*x7*x8^2 + -x3^6*x4*x5^5*x7*x8*x9 + x3^6*x4*x5^5*x7*x8 + -x3^6*x4*x5^5*x8^2*x9 + x3^6*x4*x5^5*x8^2 + x3^6*x4*x5^5*x8*x9 + -x3^6*x4*x5^5*x8 + -x3^6*x4*x5^4*x6^2*x7^2*x8*x9 + x3^6*x4*x5^4*x6^2*x7^2*x8 + x3^6*x4*x5^4*x6^2*x7^2*x9 + -x3^6*x4*x5^4*x6^2*x7^2 + x3^6*x4*x5^4*x6^2*x7*x8*x9 + -x3^6*x4*x5^4*x6^2*x7*x8 + -x3^6*x4*x5^4*x6^2*x7*x9 + x3^6*x4*x5^4*x6^2*x7 + -x3^6*x4*x5^4*x6*x7^3*x8*x9 + x3^6*x4*x5^4*x6*x7^3*x8 + x3^6*x4*x5^4*x6*x7^3*x9 + -x3^6*x4*x5^4*x6*x7^3 + -x3^6*x4*x5^4*x6*x7^2*x8^2*x9 + x3^6*x4*x5^4*x6*x7^2*x8^2 + 2*x3^6*x4*x5^4*x6*x7^2*x8*x9 + -2*x3^6*x4*x5^4*x6*x7^2*x8 + -x3^6*x4*x5^4*x6*x7^2*x9 + x3^6*x4*x5^4*x6*x7^2 + x3^6*x4*x5^4*x6*x7*x8^2*x9 + -x3^6*x4*x5^4*x6*x7*x8^2 + -x3^6*x4*x5^4*x6*x7*x8*x9 + x3^6*x4*x5^4*x6*x7*x8 + x3^6*x4*x5^4*x7^3*x8*x9 + -x3^6*x4*x5^4*x7^3*x8 + -x3^6*x4*x5^4*x7^3*x9 + x3^6*x4*x5^4*x7^3 + x3^6*x4*x5^4*x7^2*x8^2*x9 + -x3^6*x4*x5^4*x7^2*x8^2 + -x3^6*x4*x5^4*x7^2*x8*x9 + x3^6*x4*x5^4*x7^2*x8 + -x3^6*x4*x5^4*x7*x8^2*x9 + x3^6*x4*x5^4*x7*x8^2 + x3^6*x4*x5^4*x7*x9 + -x3^6*x4*x5^4*x7 + -x3^6*x4*x5^3*x6^2*x7^2*x8*x9^2 + x3^6*x4*x5^3*x6^2*x7^2*x8*x9 + x3^6*x4*x5^3*x6^2*x7^2*x9^2 + -x3^6*x4*x5^3*x6^2*x7^2*x9 + -x3^6*x4*x5^3*x6^2*x7*x8*x9^3 + x3^6*x4*x5^3*x6^2*x7*x8*x9^2 + x3^6*x4*x5^3*x6^2*x7*x8*x9 + -x3^6*x4*x5^3*x6^2*x7*x8 + x3^6*x4*x5^3*x6^2*x7*x9^3 + -x3^6*x4*x5^3*x6^2*x7*x9^2 + -x3^6*x4*x5^3*x6^2*x7*x9 + x3^6*x4*x5^3*x6^2*x7 + x3^6*x4*x5^3*x6^2*x8*x9^3 + -2*x3^6*x4*x5^3*x6^2*x8*x9 + x3^6*x4*x5^3*x6^2*x8 + -x3^6*x4*x5^3*x6^2*x9^3 + 2*x3^6*x4*x5^3*x6^2*x9 + -x3^6*x4*x5^3*x6^2 + x3^6*x4*x5^3*x6*x7^2*x8^2*x9 + -x3^6*x4*x5^3*x6*x7^2*x8^2 + -x3^6*x4*x5^3*x6*x7^2*x9 + x3^6*x4*x5^3*x6*x7^2 + -x3^6*x4*x5^3*x6*x7*x8^2*x9^2 + x3^6*x4*x5^3*x6*x7*x8^2*x9 + x3^6*x4*x5^3*x6*x7*x8*x9^2 + -3*x3^6*x4*x5^3*x6*x7*x8*x9 + 2*x3^6*x4*x5^3*x6*x7*x8 + 2*x3^6*x4*x5^3*x6*x7*x9 + -2*x3^6*x4*x5^3*x6*x7 + x3^6*x4*x5^3*x6*x8^2*x9^2 + -2*x3^6*x4*x5^3*x6*x8^2*x9 + x3^6*x4*x5^3*x6*x8^2 + -x3^6*x4*x5^3*x6*x8*x9^2 + 3*x3^6*x4*x5^3*x6*x8*x9 + -2*x3^6*x4*x5^3*x6*x8 + -x3^6*x4*x5^3*x6*x9 + x3^6*x4*x5^3*x6 + -x3^6*x4*x5^3*x7^2*x8^2*x9 + x3^6*x4*x5^3*x7^2*x8^2 + x3^6*x4*x5^3*x7^2*x8*x9^2 + -x3^6*x4*x5^3*x7^2*x8*x9 + -x3^6*x4*x5^3*x7^2*x9^2 + 2*x3^6*x4*x5^3*x7^2*x9 + -x3^6*x4*x5^3*x7^2 + x3^6*x4*x5^3*x7*x8^2*x9^2 + -x3^6*x4*x5^3*x7*x8^2*x9 + x3^6*x4*x5^3*x7*x8*x9^3 + -2*x3^6*x4*x5^3*x7*x8*x9^2 + 2*x3^6*x4*x5^3*x7*x8*x9 + -x3^6*x4*x5^3*x7*x8 + -x3^6*x4*x5^3*x7*x9^3 + x3^6*x4*x5^3*x7*x9^2 + -x3^6*x4*x5^3*x7*x9 + x3^6*x4*x5^3*x7 + -x3^6*x4*x5^3*x8^2*x9^2 + 2*x3^6*x4*x5^3*x8^2*x9 + -x3^6*x4*x5^3*x8^2 + -x3^6*x4*x5^3*x8*x9^3 + x3^6*x4*x5^3*x8*x9^2 + -x3^6*x4*x5^3*x8*x9 + x3^6*x4*x5^3*x8 + x3^6*x4*x5^3*x9^3 + -x3^6*x4*x5^3*x9 + x3^6*x4*x5^2*x6^2*x7^2*x8*x9^2 + -x3^6*x4*x5^2*x6^2*x7^2*x8 + -x3^6*x4*x5^2*x6^2*x7^2*x9^2 + x3^6*x4*x5^2*x6^2*x7^2 + -x3^6*x4*x5^2*x6^2*x7*x8*x9 + x3^6*x4*x5^2*x6^2*x7*x8 + x3^6*x4*x5^2*x6^2*x7*x9 + -x3^6*x4*x5^2*x6^2*x7 + -x3^6*x4*x5^2*x6^2*x8*x9^2 + x3^6*x4*x5^2*x6^2*x8*x9 + x3^6*x4*x5^2*x6^2*x9^2 + -x3^6*x4*x5^2*x6^2*x9 + x3^6*x4*x5^2*x6*x7^3*x8*x9 + -x3^6*x4*x5^2*x6*x7^3*x8 + -x3^6*x4*x5^2*x6*x7^3*x9 + x3^6*x4*x5^2*x6*x7^3 + -2*x3^6*x4*x5^2*x6*x7^2*x8*x9 + 2*x3^6*x4*x5^2*x6*x7^2*x8 + 2*x3^6*x4*x5^2*x6*x7^2*x9 + -2*x3^6*x4*x5^2*x6*x7^2 + x3^6*x4*x5^2*x6*x7*x8^2*x9^2 + -x3^6*x4*x5^2*x6*x7*x8^2*x9 + -x3^6*x4*x5^2*x6*x7*x8*x9^2 + 2*x3^6*x4*x5^2*x6*x7*x8*x9 + -x3^6*x4*x5^2*x6*x7*x8 + -x3^6*x4*x5^2*x6*x7*x9 + x3^6*x4*x5^2*x6*x7 + -x3^6*x4*x5^2*x6*x8^2*x9^2 + x3^6*x4*x5^2*x6*x8^2*x9 + x3^6*x4*x5^2*x6*x8*x9^2 + -x3^6*x4*x5^2*x6*x8*x9 + -x3^6*x4*x5^2*x7^3*x8*x9 + x3^6*x4*x5^2*x7^3*x8 + x3^6*x4*x5^2*x7^3*x9 + -x3^6*x4*x5^2*x7^3 + -x3^6*x4*x5^2*x7^2*x8*x9^2 + 2*x3^6*x4*x5^2*x7^2*x8*x9 + -x3^6*x4*x5^2*x7^2*x8 + x3^6*x4*x5^2*x7^2*x9^2 + -2*x3^6*x4*x5^2*x7^2*x9 + x3^6*x4*x5^2*x7^2 + -x3^6*x4*x5^2*x7*x8^2*x9^2 + x3^6*x4*x5^2*x7*x8^2*x9 + x3^6*x4*x5^2*x7*x8*x9^2 + -x3^6*x4*x5^2*x7*x8*x9 + x3^6*x4*x5^2*x8^2*x9^2 + -x3^6*x4*x5^2*x8^2*x9 + -x3^6*x4*x5^2*x9^2 + x3^6*x4*x5^2*x9 + x3^6*x4*x5*x6^2*x7*x8*x9^3 + -x3^6*x4*x5*x6^2*x7*x8*x9^2 + -x3^6*x4*x5*x6^2*x7*x9^3 + x3^6*x4*x5*x6^2*x7*x9^2 + -x3^6*x4*x5*x6^2*x8*x9^3 + x3^6*x4*x5*x6^2*x8*x9^2 + x3^6*x4*x5*x6^2*x9^3 + -x3^6*x4*x5*x6^2*x9^2 + -x3^6*x4*x5*x6*x7^4*x8*x9^2 + x3^6*x4*x5*x6*x7^4*x8*x9 + x3^6*x4*x5*x6*x7^4*x9^2 + -x3^6*x4*x5*x6*x7^4*x9 + x3^6*x4*x5*x6*x7^3*x8*x9^2 + -x3^6*x4*x5*x6*x7^3*x8*x9 + -x3^6*x4*x5*x6*x7^3*x9^2 + x3^6*x4*x5*x6*x7^3*x9 + -x3^6*x4*x5*x6*x7*x8*x9^4 + x3^6*x4*x5*x6*x7*x8*x9^3 + x3^6*x4*x5*x6*x7*x9^4 + -x3^6*x4*x5*x6*x7*x9^3 + x3^6*x4*x5*x6*x8*x9^4 + -x3^6*x4*x5*x6*x8*x9^3 + -x3^6*x4*x5*x6*x9^4 + x3^6*x4*x5*x6*x9^3 + x3^6*x4*x5*x7^4*x8*x9^2 + -x3^6*x4*x5*x7^4*x8*x9 + -x3^6*x4*x5*x7^4*x9^2 + x3^6*x4*x5*x7^4*x9 + -x3^6*x4*x5*x7^3*x8*x9^2 + x3^6*x4*x5*x7^3*x8*x9 + x3^6*x4*x5*x7^3*x9^2 + -x3^6*x4*x5*x7^3*x9 + x3^6*x4*x5*x7*x8*x9^4 + -2*x3^6*x4*x5*x7*x8*x9^3 + x3^6*x4*x5*x7*x8*x9^2 + -x3^6*x4*x5*x7*x9^4 + 2*x3^6*x4*x5*x7*x9^3 + -x3^6*x4*x5*x7*x9^2 + -x3^6*x4*x5*x8*x9^4 + 2*x3^6*x4*x5*x8*x9^3 + -x3^6*x4*x5*x8*x9^2 + x3^6*x4*x5*x9^4 + -2*x3^6*x4*x5*x9^3 + x3^6*x4*x5*x9^2 + x3^6*x4*x6*x7^4*x8*x9^2 + -x3^6*x4*x6*x7^4*x8*x9 + -x3^6*x4*x6*x7^4*x9^2 + x3^6*x4*x6*x7^4*x9 + -x3^6*x4*x6*x7^3*x8*x9^2 + x3^6*x4*x6*x7^3*x8*x9 + x3^6*x4*x6*x7^3*x9^2 + -x3^6*x4*x6*x7^3*x9 + x3^6*x4*x6*x7*x8*x9^4 + -x3^6*x4*x6*x7*x8*x9^3 + -x3^6*x4*x6*x7*x9^4 + x3^6*x4*x6*x7*x9^3 + -x3^6*x4*x6*x8*x9^4 + x3^6*x4*x6*x8*x9^3 + x3^6*x4*x6*x9^4 + -x3^6*x4*x6*x9^3 + -x3^6*x4*x7^4*x8*x9^2 + x3^6*x4*x7^4*x8*x9 + x3^6*x4*x7^4*x9^2 + -x3^6*x4*x7^4*x9 + x3^6*x4*x7^3*x8*x9^2 + -x3^6*x4*x7^3*x8*x9 + -x3^6*x4*x7^3*x9^2 + x3^6*x4*x7^3*x9 + -x3^6*x4*x7*x8*x9^4 + x3^6*x4*x7*x8*x9^3 + x3^6*x4*x7*x9^4 + -x3^6*x4*x7*x9^3 + x3^6*x4*x8*x9^4 + -x3^6*x4*x8*x9^3 + -x3^6*x4*x9^4 + x3^6*x4*x9^3 + x3^6*x5^6*x6^2*x7*x8*x9 + -x3^6*x5^6*x6^2*x7*x8 + -x3^6*x5^6*x6^2*x7*x9 + x3^6*x5^6*x6^2*x7 + -x3^6*x5^6*x6^2*x8*x9 + x3^6*x5^6*x6^2*x8 + x3^6*x5^6*x6^2*x9 + -x3^6*x5^6*x6^2 + -x3^6*x5^6*x7*x8*x9 + x3^6*x5^6*x7*x8 + x3^6*x5^6*x7*x9 + -x3^6*x5^6*x7 + x3^6*x5^6*x8*x9 + -x3^6*x5^6*x8 + -x3^6*x5^6*x9 + x3^6*x5^6 + x3^6*x5^5*x6*x7*x8^2*x9 + -x3^6*x5^5*x6*x7*x8^2 + -x3^6*x5^5*x6*x7*x8*x9 + x3^6*x5^5*x6*x7*x8 + -x3^6*x5^5*x6*x8^2*x9 + x3^6*x5^5*x6*x8^2 + x3^6*x5^5*x6*x8*x9 + -x3^6*x5^5*x6*x8 + -x3^6*x5^5*x7*x8^2*x9 + x3^6*x5^5*x7*x8^2 + x3^6*x5^5*x7*x8*x9 + -x3^6*x5^5*x7*x8 + x3^6*x5^5*x8^2*x9 + -x3^6*x5^5*x8^2 + -x3^6*x5^5*x8*x9 + x3^6*x5^5*x8 + x3^6*x5^4*x6^2*x7^2*x8*x9 + -x3^6*x5^4*x6^2*x7^2*x8 + -x3^6*x5^4*x6^2*x7^2*x9 + x3^6*x5^4*x6^2*x7^2 + -x3^6*x5^4*x6^2*x7*x8*x9 + x3^6*x5^4*x6^2*x7*x8 + x3^6*x5^4*x6^2*x7*x9 + -x3^6*x5^4*x6^2*x7 + x3^6*x5^4*x6*x7^3*x8*x9 + -x3^6*x5^4*x6*x7^3*x8 + -x3^6*x5^4*x6*x7^3*x9 + x3^6*x5^4*x6*x7^3 + x3^6*x5^4*x6*x7^2*x8^2*x9 + -x3^6*x5^4*x6*x7^2*x8^2 + -2*x3^6*x5^4*x6*x7^2*x8*x9 + 2*x3^6*x5^4*x6*x7^2*x8 + x3^6*x5^4*x6*x7^2*x9 + -x3^6*x5^4*x6*x7^2 + -x3^6*x5^4*x6*x7*x8^2*x9 + x3^6*x5^4*x6*x7*x8^2 + x3^6*x5^4*x6*x7*x8*x9 + -x3^6*x5^4*x6*x7*x8 + -x3^6*x5^4*x7^3*x8*x9 + x3^6*x5^4*x7^3*x8 + x3^6*x5^4*x7^3*x9 + -x3^6*x5^4*x7^3 + -x3^6*x5^4*x7^2*x8^2*x9 + x3^6*x5^4*x7^2*x8^2 + x3^6*x5^4*x7^2*x8*x9 + -x3^6*x5^4*x7^2*x8 + x3^6*x5^4*x7*x8^2*x9 + -x3^6*x5^4*x7*x8^2 + -x3^6*x5^4*x7*x9 + x3^6*x5^4*x7 + x3^6*x5^3*x6^2*x7^2*x8*x9^2 + -x3^6*x5^3*x6^2*x7^2*x8*x9 + -x3^6*x5^3*x6^2*x7^2*x9^2 + x3^6*x5^3*x6^2*x7^2*x9 + x3^6*x5^3*x6^2*x7*x8*x9^3 + -x3^6*x5^3*x6^2*x7*x8*x9^2 + -x3^6*x5^3*x6^2*x7*x8*x9 + x3^6*x5^3*x6^2*x7*x8 + -x3^6*x5^3*x6^2*x7*x9^3 + x3^6*x5^3*x6^2*x7*x9^2 + x3^6*x5^3*x6^2*x7*x9 + -x3^6*x5^3*x6^2*x7 + -x3^6*x5^3*x6^2*x8*x9^3 + 2*x3^6*x5^3*x6^2*x8*x9 + -x3^6*x5^3*x6^2*x8 + x3^6*x5^3*x6^2*x9^3 + -2*x3^6*x5^3*x6^2*x9 + x3^6*x5^3*x6^2 + -x3^6*x5^3*x6*x7^2*x8^2*x9 + x3^6*x5^3*x6*x7^2*x8^2 + x3^6*x5^3*x6*x7^2*x9 + -x3^6*x5^3*x6*x7^2 + x3^6*x5^3*x6*x7*x8^2*x9^2 + -x3^6*x5^3*x6*x7*x8^2*x9 + -x3^6*x5^3*x6*x7*x8*x9^2 + 2*x3^6*x5^3*x6*x7*x8*x9 + -x3^6*x5^3*x6*x7*x8 + -x3^6*x5^3*x6*x7*x9 + x3^6*x5^3*x6*x7 + -x3^6*x5^3*x6*x8^2*x9^2 + 2*x3^6*x5^3*x6*x8^2*x9 + -x3^6*x5^3*x6*x8^2 + x3^6*x5^3*x6*x8*x9^2 + -2*x3^6*x5^3*x6*x8*x9 + x3^6*x5^3*x6*x8 + x3^6*x5^3*x7^2*x8^2*x9 + -x3^6*x5^3*x7^2*x8^2 + -x3^6*x5^3*x7^2*x8*x9^2 + x3^6*x5^3*x7^2*x8*x9 + x3^6*x5^3*x7^2*x9^2 + -2*x3^6*x5^3*x7^2*x9 + x3^6*x5^3*x7^2 + -x3^6*x5^3*x7*x8^2*x9^2 + x3^6*x5^3*x7*x8^2*x9 + -x3^6*x5^3*x7*x8*x9^3 + 2*x3^6*x5^3*x7*x8*x9^2 + -x3^6*x5^3*x7*x8*x9 + x3^6*x5^3*x7*x9^3 + -x3^6*x5^3*x7*x9^2 + x3^6*x5^3*x8^2*x9^2 + -2*x3^6*x5^3*x8^2*x9 + x3^6*x5^3*x8^2 + x3^6*x5^3*x8*x9^3 + -x3^6*x5^3*x8*x9^2 + -x3^6*x5^3*x9^3 + 2*x3^6*x5^3*x9 + -x3^6*x5^3 + -x3^6*x5^2*x6^2*x7^2*x8*x9^2 + x3^6*x5^2*x6^2*x7^2*x8 + x3^6*x5^2*x6^2*x7^2*x9^2 + -x3^6*x5^2*x6^2*x7^2 + x3^6*x5^2*x6^2*x7*x8*x9 + -x3^6*x5^2*x6^2*x7*x8 + -x3^6*x5^2*x6^2*x7*x9 + x3^6*x5^2*x6^2*x7 + x3^6*x5^2*x6^2*x8*x9^2 + -x3^6*x5^2*x6^2*x8*x9 + -x3^6*x5^2*x6^2*x9^2 + x3^6*x5^2*x6^2*x9 + -x3^6*x5^2*x6*x7^3*x8*x9 + x3^6*x5^2*x6*x7^3*x8 + x3^6*x5^2*x6*x7^3*x9 + -x3^6*x5^2*x6*x7^3 + 2*x3^6*x5^2*x6*x7^2*x8*x9 + -2*x3^6*x5^2*x6*x7^2*x8 + -2*x3^6*x5^2*x6*x7^2*x9 + 2*x3^6*x5^2*x6*x7^2 + -x3^6*x5^2*x6*x7*x8^2*x9^2 + x3^6*x5^2*x6*x7*x8^2*x9 + x3^6*x5^2*x6*x7*x8*x9^2 + -2*x3^6*x5^2*x6*x7*x8*x9 + x3^6*x5^2*x6*x7*x8 + x3^6*x5^2*x6*x7*x9 + -x3^6*x5^2*x6*x7 + x3^6*x5^2*x6*x8^2*x9^2 + -x3^6*x5^2*x6*x8^2*x9 + -x3^6*x5^2*x6*x8*x9^2 + x3^6*x5^2*x6*x8*x9 + x3^6*x5^2*x7^3*x8*x9 + -x3^6*x5^2*x7^3*x8 + -x3^6*x5^2*x7^3*x9 + x3^6*x5^2*x7^3 + x3^6*x5^2*x7^2*x8*x9^2 + -2*x3^6*x5^2*x7^2*x8*x9 + x3^6*x5^2*x7^2*x8 + -x3^6*x5^2*x7^2*x9^2 + 2*x3^6*x5^2*x7^2*x9 + -x3^6*x5^2*x7^2 + x3^6*x5^2*x7*x8^2*x9^2 + -x3^6*x5^2*x7*x8^2*x9 + -x3^6*x5^2*x7*x8*x9^2 + x3^6*x5^2*x7*x8*x9 + -x3^6*x5^2*x8^2*x9^2 + x3^6*x5^2*x8^2*x9 + x3^6*x5^2*x9^2 + -x3^6*x5^2*x9 + -x3^6*x5*x6^2*x7*x8*x9^3 + x3^6*x5*x6^2*x7*x8*x9^2 + x3^6*x5*x6^2*x7*x9^3 + -x3^6*x5*x6^2*x7*x9^2 + x3^6*x5*x6^2*x8*x9^3 + -x3^6*x5*x6^2*x8*x9^2 + -x3^6*x5*x6^2*x9^3 + x3^6*x5*x6^2*x9^2 + x3^6*x5*x6*x7^4*x8*x9^2 + -x3^6*x5*x6*x7^4*x8*x9 + -x3^6*x5*x6*x7^4*x9^2 + x3^6*x5*x6*x7^4*x9 + -x3^6*x5*x6*x7^3*x8*x9^2 + x3^6*x5*x6*x7^3*x8*x9 + x3^6*x5*x6*x7^3*x9^2 + -x3^6*x5*x6*x7^3*x9 + x3^6*x5*x6*x7*x8*x9^4 + -x3^6*x5*x6*x7*x8*x9^3 + -x3^6*x5*x6*x7*x9^4 + x3^6*x5*x6*x7*x9^3 + -x3^6*x5*x6*x8*x9^4 + x3^6*x5*x6*x8*x9^3 + x3^6*x5*x6*x9^4 + -x3^6*x5*x6*x9^3 + -x3^6*x5*x7^4*x8*x9^2 + x3^6*x5*x7^4*x8*x9 + x3^6*x5*x7^4*x9^2 + -x3^6*x5*x7^4*x9 + x3^6*x5*x7^3*x8*x9^2 + -x3^6*x5*x7^3*x8*x9 + -x3^6*x5*x7^3*x9^2 + x3^6*x5*x7^3*x9 + -x3^6*x5*x7*x8*x9^4 + 2*x3^6*x5*x7*x8*x9^3 + -x3^6*x5*x7*x8*x9^2 + x3^6*x5*x7*x9^4 + -2*x3^6*x5*x7*x9^3 + x3^6*x5*x7*x9^2 + x3^6*x5*x8*x9^4 + -2*x3^6*x5*x8*x9^3 + x3^6*x5*x8*x9^2 + -x3^6*x5*x9^4 + 2*x3^6*x5*x9^3 + -x3^6*x5*x9^2 + -x3^6*x6*x7^4*x8*x9^2 + x3^6*x6*x7^4*x8*x9 + x3^6*x6*x7^4*x9^2 + -x3^6*x6*x7^4*x9 + x3^6*x6*x7^3*x8*x9^2 + -x3^6*x6*x7^3*x8*x9 + -x3^6*x6*x7^3*x9^2 + x3^6*x6*x7^3*x9 + -x3^6*x6*x7*x8*x9^4 + x3^6*x6*x7*x8*x9^3 + x3^6*x6*x7*x9^4 + -x3^6*x6*x7*x9^3 + x3^6*x6*x8*x9^4 + -x3^6*x6*x8*x9^3 + -x3^6*x6*x9^4 + x3^6*x6*x9^3 + x3^6*x7^4*x8*x9^2 + -x3^6*x7^4*x8*x9 + -x3^6*x7^4*x9^2 + x3^6*x7^4*x9 + -x3^6*x7^3*x8*x9^2 + x3^6*x7^3*x8*x9 + x3^6*x7^3*x9^2 + -x3^6*x7^3*x9 + x3^6*x7*x8*x9^4 + -x3^6*x7*x8*x9^3 + -x3^6*x7*x9^4 + x3^6*x7*x9^3 + -x3^6*x8*x9^4 + x3^6*x8*x9^3 + x3^6*x9^4 + -x3^6*x9^3 + -x3^5*x4^2*x5^7*x6*x7*x8*x9 + x3^5*x4^2*x5^7*x6*x7*x8 + x3^5*x4^2*x5^7*x6*x7*x9 + -x3^5*x4^2*x5^7*x6*x7 + x3^5*x4^2*x5^7*x6*x8*x9 + -x3^5*x4^2*x5^7*x6*x8 + -x3^5*x4^2*x5^7*x6*x9 + x3^5*x4^2*x5^7*x6 + x3^5*x4^2*x5^7*x7*x8*x9 + -x3^5*x4^2*x5^7*x7*x8 + -x3^5*x4^2*x5^7*x7*x9 + x3^5*x4^2*x5^7*x7 + -x3^5*x4^2*x5^7*x8*x9 + x3^5*x4^2*x5^7*x8 + x3^5*x4^2*x5^7*x9 + -x3^5*x4^2*x5^7 + x3^5*x4^2*x5^6*x6*x7*x8*x9 + -x3^5*x4^2*x5^6*x6*x7*x8 + -x3^5*x4^2*x5^6*x6*x7*x9 + x3^5*x4^2*x5^6*x6*x7 + -x3^5*x4^2*x5^6*x6*x8*x9 + x3^5*x4^2*x5^6*x6*x8 + x3^5*x4^2*x5^6*x6*x9 + -x3^5*x4^2*x5^6*x6 + -x3^5*x4^2*x5^6*x7*x8*x9 + x3^5*x4^2*x5^6*x7*x8 + x3^5*x4^2*x5^6*x7*x9 + -x3^5*x4^2*x5^6*x7 + x3^5*x4^2*x5^6*x8*x9 + -x3^5*x4^2*x5^6*x8 + -x3^5*x4^2*x5^6*x9 + x3^5*x4^2*x5^6 + -x3^5*x4*x5^5*x6*x7^2*x8^2*x9 + x3^5*x4*x5^5*x6*x7^2*x8^2 + -x3^5*x4*x5^5*x6*x7^2*x8*x9^2 + x3^5*x4*x5^5*x6*x7^2*x8*x9 + x3^5*x4*x5^5*x6*x7^2*x9^2 + -x3^5*x4*x5^5*x6*x7^2 + x3^5*x4*x5^5*x6*x7*x8^2*x9 + -x3^5*x4*x5^5*x6*x7*x8^2 + -x3^5*x4*x5^5*x6*x7*x9 + x3^5*x4*x5^5*x6*x7 + x3^5*x4*x5^5*x6*x8*x9^2 + -x3^5*x4*x5^5*x6*x8*x9 + -x3^5*x4*x5^5*x6*x9^2 + x3^5*x4*x5^5*x6*x9 + x3^5*x4*x5^5*x7^2*x8^2*x9 + -x3^5*x4*x5^5*x7^2*x8^2 + x3^5*x4*x5^5*x7^2*x8*x9^2 + -x3^5*x4*x5^5*x7^2*x8*x9 + -x3^5*x4*x5^5*x7^2*x9^2 + x3^5*x4*x5^5*x7^2 + -x3^5*x4*x5^5*x7*x8^2*x9 + x3^5*x4*x5^5*x7*x8^2 + x3^5*x4*x5^5*x7*x9 + -x3^5*x4*x5^5*x7 + -x3^5*x4*x5^5*x8*x9^2 + x3^5*x4*x5^5*x8*x9 + x3^5*x4*x5^5*x9^2 + -x3^5*x4*x5^5*x9 + x3^5*x4*x5^4*x6*x7^2*x8^2*x9 + -x3^5*x4*x5^4*x6*x7^2*x8^2 + -x3^5*x4*x5^4*x6*x7^2*x9 + x3^5*x4*x5^4*x6*x7^2 + -x3^5*x4*x5^4*x6*x7*x8^2*x9^2 + x3^5*x4*x5^4*x6*x7*x8^2 + -x3^5*x4*x5^4*x6*x7*x8*x9^4 + 2*x3^5*x4*x5^4*x6*x7*x8*x9^2 + -x3^5*x4*x5^4*x6*x7*x8*x9 + x3^5*x4*x5^4*x6*x7*x9^4 + -x3^5*x4*x5^4*x6*x7*x9^2 + x3^5*x4*x5^4*x6*x7*x9 + -x3^5*x4*x5^4*x6*x7 + x3^5*x4*x5^4*x6*x8^2*x9^2 + -x3^5*x4*x5^4*x6*x8^2*x9 + x3^5*x4*x5^4*x6*x8*x9^4 + -2*x3^5*x4*x5^4*x6*x8*x9^2 + x3^5*x4*x5^4*x6*x8*x9 + -x3^5*x4*x5^4*x6*x9^4 + x3^5*x4*x5^4*x6*x9^2 + -x3^5*x4*x5^4*x7^2*x8^2*x9 + x3^5*x4*x5^4*x7^2*x8^2 + x3^5*x4*x5^4*x7^2*x9 + -x3^5*x4*x5^4*x7^2 + x3^5*x4*x5^4*x7*x8^2*x9^2 + -x3^5*x4*x5^4*x7*x8^2 + x3^5*x4*x5^4*x7*x8*x9^4 + -2*x3^5*x4*x5^4*x7*x8*x9^2 + x3^5*x4*x5^4*x7*x8*x9 + -x3^5*x4*x5^4*x7*x9^4 + x3^5*x4*x5^4*x7*x9^2 + -x3^5*x4*x5^4*x7*x9 + x3^5*x4*x5^4*x7 + -x3^5*x4*x5^4*x8^2*x9^2 + x3^5*x4*x5^4*x8^2*x9 + -x3^5*x4*x5^4*x8*x9^4 + 2*x3^5*x4*x5^4*x8*x9^2 + -x3^5*x4*x5^4*x8*x9 + x3^5*x4*x5^4*x9^4 + -x3^5*x4*x5^4*x9^2 + x3^5*x4*x5^3*x6*x7^2*x8*x9^2 + -x3^5*x4*x5^3*x6*x7^2*x8*x9 + -x3^5*x4*x5^3*x6*x7^2*x9^2 + x3^5*x4*x5^3*x6*x7^2*x9 + x3^5*x4*x5^3*x6*x7*x8^2*x9^2 + -x3^5*x4*x5^3*x6*x7*x8^2*x9 + x3^5*x4*x5^3*x6*x7*x8*x9^3 + -2*x3^5*x4*x5^3*x6*x7*x8*x9^2 + x3^5*x4*x5^3*x6*x7*x8*x9 + -x3^5*x4*x5^3*x6*x7*x9^3 + x3^5*x4*x5^3*x6*x7*x9^2 + -x3^5*x4*x5^3*x6*x8^2*x9^2 + x3^5*x4*x5^3*x6*x8^2*x9 + -x3^5*x4*x5^3*x6*x8*x9^3 + x3^5*x4*x5^3*x6*x8*x9^2 + x3^5*x4*x5^3*x6*x9^3 + -x3^5*x4*x5^3*x6*x9 + -x3^5*x4*x5^3*x7^2*x8*x9^2 + x3^5*x4*x5^3*x7^2*x8*x9 + x3^5*x4*x5^3*x7^2*x9^2 + -x3^5*x4*x5^3*x7^2*x9 + -x3^5*x4*x5^3*x7*x8^2*x9^2 + x3^5*x4*x5^3*x7*x8^2*x9 + -x3^5*x4*x5^3*x7*x8*x9^3 + 2*x3^5*x4*x5^3*x7*x8*x9^2 + -x3^5*x4*x5^3*x7*x8*x9 + x3^5*x4*x5^3*x7*x9^3 + -x3^5*x4*x5^3*x7*x9^2 + x3^5*x4*x5^3*x8^2*x9^2 + -x3^5*x4*x5^3*x8^2*x9 + x3^5*x4*x5^3*x8*x9^3 + -x3^5*x4*x5^3*x8*x9^2 + -x3^5*x4*x5^3*x9^3 + x3^5*x4*x5^3*x9 + -x3^5*x4*x5*x6*x7*x8*x9^5 + 2*x3^5*x4*x5*x6*x7*x8*x9^4 + -x3^5*x4*x5*x6*x7*x8*x9^3 + x3^5*x4*x5*x6*x7*x9^5 + -2*x3^5*x4*x5*x6*x7*x9^4 + x3^5*x4*x5*x6*x7*x9^3 + x3^5*x4*x5*x6*x8*x9^5 + -2*x3^5*x4*x5*x6*x8*x9^4 + x3^5*x4*x5*x6*x8*x9^3 + -x3^5*x4*x5*x6*x9^5 + 2*x3^5*x4*x5*x6*x9^4 + -x3^5*x4*x5*x6*x9^3 + x3^5*x4*x5*x7*x8*x9^5 + -2*x3^5*x4*x5*x7*x8*x9^4 + x3^5*x4*x5*x7*x8*x9^3 + -x3^5*x4*x5*x7*x9^5 + 2*x3^5*x4*x5*x7*x9^4 + -x3^5*x4*x5*x7*x9^3 + -x3^5*x4*x5*x8*x9^5 + 2*x3^5*x4*x5*x8*x9^4 + -x3^5*x4*x5*x8*x9^3 + x3^5*x4*x5*x9^5 + -2*x3^5*x4*x5*x9^4 + x3^5*x4*x5*x9^3 + x3^5*x4*x6*x7*x8*x9^5 + -x3^5*x4*x6*x7*x8*x9^4 + -x3^5*x4*x6*x7*x9^5 + x3^5*x4*x6*x7*x9^4 + -x3^5*x4*x6*x8*x9^5 + x3^5*x4*x6*x8*x9^4 + x3^5*x4*x6*x9^5 + -x3^5*x4*x6*x9^4 + -x3^5*x4*x7*x8*x9^5 + x3^5*x4*x7*x8*x9^4 + x3^5*x4*x7*x9^5 + -x3^5*x4*x7*x9^4 + x3^5*x4*x8*x9^5 + -x3^5*x4*x8*x9^4 + -x3^5*x4*x9^5 + x3^5*x4*x9^4 + x3^5*x5^7*x6*x7*x8*x9 + -x3^5*x5^7*x6*x7*x8 + -x3^5*x5^7*x6*x7*x9 + x3^5*x5^7*x6*x7 + -x3^5*x5^7*x6*x8*x9 + x3^5*x5^7*x6*x8 + x3^5*x5^7*x6*x9 + -x3^5*x5^7*x6 + -x3^5*x5^7*x7*x8*x9 + x3^5*x5^7*x7*x8 + x3^5*x5^7*x7*x9 + -x3^5*x5^7*x7 + x3^5*x5^7*x8*x9 + -x3^5*x5^7*x8 + -x3^5*x5^7*x9 + x3^5*x5^7 + -x3^5*x5^6*x6*x7*x8*x9 + x3^5*x5^6*x6*x7*x8 + x3^5*x5^6*x6*x7*x9 + -x3^5*x5^6*x6*x7 + x3^5*x5^6*x6*x8*x9 + -x3^5*x5^6*x6*x8 + -x3^5*x5^6*x6*x9 + x3^5*x5^6*x6 + x3^5*x5^6*x7*x8*x9 + -x3^5*x5^6*x7*x8 + -x3^5*x5^6*x7*x9 + x3^5*x5^6*x7 + -x3^5*x5^6*x8*x9 + x3^5*x5^6*x8 + x3^5*x5^6*x9 + -x3^5*x5^6 + x3^5*x5^5*x6*x7^2*x8^2*x9 + -x3^5*x5^5*x6*x7^2*x8^2 + x3^5*x5^5*x6*x7^2*x8*x9^2 + -x3^5*x5^5*x6*x7^2*x8*x9 + -x3^5*x5^5*x6*x7^2*x9^2 + x3^5*x5^5*x6*x7^2 + -x3^5*x5^5*x6*x7*x8^2*x9 + x3^5*x5^5*x6*x7*x8^2 + x3^5*x5^5*x6*x7*x9 + -x3^5*x5^5*x6*x7 + -x3^5*x5^5*x6*x8*x9^2 + x3^5*x5^5*x6*x8*x9 + x3^5*x5^5*x6*x9^2 + -x3^5*x5^5*x6*x9 + -x3^5*x5^5*x7^2*x8^2*x9 + x3^5*x5^5*x7^2*x8^2 + -x3^5*x5^5*x7^2*x8*x9^2 + x3^5*x5^5*x7^2*x8*x9 + x3^5*x5^5*x7^2*x9^2 + -x3^5*x5^5*x7^2 + x3^5*x5^5*x7*x8^2*x9 + -x3^5*x5^5*x7*x8^2 + -x3^5*x5^5*x7*x9 + x3^5*x5^5*x7 + x3^5*x5^5*x8*x9^2 + -x3^5*x5^5*x8*x9 + -x3^5*x5^5*x9^2 + x3^5*x5^5*x9 + -x3^5*x5^4*x6*x7^2*x8^2*x9 + x3^5*x5^4*x6*x7^2*x8^2 + x3^5*x5^4*x6*x7^2*x9 + -x3^5*x5^4*x6*x7^2 + x3^5*x5^4*x6*x7*x8^2*x9^2 + -x3^5*x5^4*x6*x7*x8^2 + x3^5*x5^4*x6*x7*x8*x9^4 + -2*x3^5*x5^4*x6*x7*x8*x9^2 + x3^5*x5^4*x6*x7*x8*x9 + -x3^5*x5^4*x6*x7*x9^4 + x3^5*x5^4*x6*x7*x9^2 + -x3^5*x5^4*x6*x7*x9 + x3^5*x5^4*x6*x7 + -x3^5*x5^4*x6*x8^2*x9^2 + x3^5*x5^4*x6*x8^2*x9 + -x3^5*x5^4*x6*x8*x9^4 + 2*x3^5*x5^4*x6*x8*x9^2 + -x3^5*x5^4*x6*x8*x9 + x3^5*x5^4*x6*x9^4 + -x3^5*x5^4*x6*x9^2 + x3^5*x5^4*x7^2*x8^2*x9 + -x3^5*x5^4*x7^2*x8^2 + -x3^5*x5^4*x7^2*x9 + x3^5*x5^4*x7^2 + -x3^5*x5^4*x7*x8^2*x9^2 + x3^5*x5^4*x7*x8^2 + -x3^5*x5^4*x7*x8*x9^4 + 2*x3^5*x5^4*x7*x8*x9^2 + -x3^5*x5^4*x7*x8*x9 + x3^5*x5^4*x7*x9^4 + -x3^5*x5^4*x7*x9^2 + x3^5*x5^4*x7*x9 + -x3^5*x5^4*x7 + x3^5*x5^4*x8^2*x9^2 + -x3^5*x5^4*x8^2*x9 + x3^5*x5^4*x8*x9^4 + -2*x3^5*x5^4*x8*x9^2 + x3^5*x5^4*x8*x9 + -x3^5*x5^4*x9^4 + x3^5*x5^4*x9^2 + -x3^5*x5^3*x6*x7^2*x8*x9^2 + x3^5*x5^3*x6*x7^2*x8*x9 + x3^5*x5^3*x6*x7^2*x9^2 + -x3^5*x5^3*x6*x7^2*x9 + -x3^5*x5^3*x6*x7*x8^2*x9^2 + x3^5*x5^3*x6*x7*x8^2*x9 + -x3^5*x5^3*x6*x7*x8*x9^3 + 2*x3^5*x5^3*x6*x7*x8*x9^2 + -x3^5*x5^3*x6*x7*x8*x9 + x3^5*x5^3*x6*x7*x9^3 + -x3^5*x5^3*x6*x7*x9^2 + x3^5*x5^3*x6*x8^2*x9^2 + -x3^5*x5^3*x6*x8^2*x9 + x3^5*x5^3*x6*x8*x9^3 + -x3^5*x5^3*x6*x8*x9^2 + -x3^5*x5^3*x6*x9^3 + x3^5*x5^3*x6*x9 + x3^5*x5^3*x7^2*x8*x9^2 + -x3^5*x5^3*x7^2*x8*x9 + -x3^5*x5^3*x7^2*x9^2 + x3^5*x5^3*x7^2*x9 + x3^5*x5^3*x7*x8^2*x9^2 + -x3^5*x5^3*x7*x8^2*x9 + x3^5*x5^3*x7*x8*x9^3 + -2*x3^5*x5^3*x7*x8*x9^2 + x3^5*x5^3*x7*x8*x9 + -x3^5*x5^3*x7*x9^3 + x3^5*x5^3*x7*x9^2 + -x3^5*x5^3*x8^2*x9^2 + x3^5*x5^3*x8^2*x9 + -x3^5*x5^3*x8*x9^3 + x3^5*x5^3*x8*x9^2 + x3^5*x5^3*x9^3 + -x3^5*x5^3*x9 + x3^5*x5*x6*x7*x8*x9^5 + -2*x3^5*x5*x6*x7*x8*x9^4 + x3^5*x5*x6*x7*x8*x9^3 + -x3^5*x5*x6*x7*x9^5 + 2*x3^5*x5*x6*x7*x9^4 + -x3^5*x5*x6*x7*x9^3 + -x3^5*x5*x6*x8*x9^5 + 2*x3^5*x5*x6*x8*x9^4 + -x3^5*x5*x6*x8*x9^3 + x3^5*x5*x6*x9^5 + -2*x3^5*x5*x6*x9^4 + x3^5*x5*x6*x9^3 + -x3^5*x5*x7*x8*x9^5 + 2*x3^5*x5*x7*x8*x9^4 + -x3^5*x5*x7*x8*x9^3 + x3^5*x5*x7*x9^5 + -2*x3^5*x5*x7*x9^4 + x3^5*x5*x7*x9^3 + x3^5*x5*x8*x9^5 + -2*x3^5*x5*x8*x9^4 + x3^5*x5*x8*x9^3 + -x3^5*x5*x9^5 + 2*x3^5*x5*x9^4 + -x3^5*x5*x9^3 + -x3^5*x6*x7*x8*x9^5 + x3^5*x6*x7*x8*x9^4 + x3^5*x6*x7*x9^5 + -x3^5*x6*x7*x9^4 + x3^5*x6*x8*x9^5 + -x3^5*x6*x8*x9^4 + -x3^5*x6*x9^5 + x3^5*x6*x9^4 + x3^5*x7*x8*x9^5 + -x3^5*x7*x8*x9^4 + -x3^5*x7*x9^5 + x3^5*x7*x9^4 + -x3^5*x8*x9^5 + x3^5*x8*x9^4 + x3^5*x9^5 + -x3^5*x9^4 + -x3^4*x4^3*x5*x6*x7*x8^2*x9 + x3^4*x4^3*x5*x6*x7*x8^2 + x3^4*x4^3*x5*x6*x7*x8*x9 + -x3^4*x4^3*x5*x6*x7*x8 + x3^4*x4^3*x5*x6*x8^2*x9 + -x3^4*x4^3*x5*x6*x8^2 + -x3^4*x4^3*x5*x6*x8*x9 + x3^4*x4^3*x5*x6*x8 + x3^4*x4^3*x5*x7*x8^2*x9 + -x3^4*x4^3*x5*x7*x8^2 + -x3^4*x4^3*x5*x7*x8*x9 + x3^4*x4^3*x5*x7*x8 + -x3^4*x4^3*x5*x8^2*x9 + x3^4*x4^3*x5*x8^2 + x3^4*x4^3*x5*x8*x9 + -x3^4*x4^3*x5*x8 + x3^4*x4^3*x6*x7*x8^2*x9 + -x3^4*x4^3*x6*x7*x8^2 + -x3^4*x4^3*x6*x7*x8*x9 + x3^4*x4^3*x6*x7*x8 + -x3^4*x4^3*x6*x8^2*x9 + x3^4*x4^3*x6*x8^2 + x3^4*x4^3*x6*x8*x9 + -x3^4*x4^3*x6*x8 + -x3^4*x4^3*x7*x8^2*x9 + x3^4*x4^3*x7*x8^2 + x3^4*x4^3*x7*x8*x9 + -x3^4*x4^3*x7*x8 + x3^4*x4^3*x8^2*x9 + -x3^4*x4^3*x8^2 + -x3^4*x4^3*x8*x9 + x3^4*x4^3*x8 + x3^4*x4^2*x5*x6*x7*x8^2*x9 + -x3^4*x4^2*x5*x6*x7*x8^2 + -x3^4*x4^2*x5*x6*x7*x8*x9 + x3^4*x4^2*x5*x6*x7*x8 + -x3^4*x4^2*x5*x6*x8^2*x9 + x3^4*x4^2*x5*x6*x8^2 + x3^4*x4^2*x5*x6*x8*x9 + -x3^4*x4^2*x5*x6*x8 + -x3^4*x4^2*x5*x7*x8^2*x9 + x3^4*x4^2*x5*x7*x8^2 + x3^4*x4^2*x5*x7*x8*x9 + -x3^4*x4^2*x5*x7*x8 + x3^4*x4^2*x5*x8^2*x9 + -x3^4*x4^2*x5*x8^2 + -x3^4*x4^2*x5*x8*x9 + x3^4*x4^2*x5*x8 + -x3^4*x4^2*x6*x7*x8^2*x9 + x3^4*x4^2*x6*x7*x8^2 + x3^4*x4^2*x6*x7*x8*x9 + -x3^4*x4^2*x6*x7*x8 + x3^4*x4^2*x6*x8^2*x9 + -x3^4*x4^2*x6*x8^2 + -x3^4*x4^2*x6*x8*x9 + x3^4*x4^2*x6*x8 + x3^4*x4^2*x7*x8^2*x9 + -x3^4*x4^2*x7*x8^2 + -x3^4*x4^2*x7*x8*x9 + x3^4*x4^2*x7*x8 + -x3^4*x4^2*x8^2*x9 + x3^4*x4^2*x8^2 + x3^4*x4^2*x8*x9 + -x3^4*x4^2*x8 + -x3^4*x4*x5^8*x6*x7*x8*x9 + x3^4*x4*x5^8*x6*x7*x8 + x3^4*x4*x5^8*x6*x7*x9 + -x3^4*x4*x5^8*x6*x7 + x3^4*x4*x5^8*x6*x8*x9 + -x3^4*x4*x5^8*x6*x8 + -x3^4*x4*x5^8*x6*x9 + x3^4*x4*x5^8*x6 + x3^4*x4*x5^8*x7*x8*x9 + -x3^4*x4*x5^8*x7*x8 + -x3^4*x4*x5^8*x7*x9 + x3^4*x4*x5^8*x7 + -x3^4*x4*x5^8*x8*x9 + x3^4*x4*x5^8*x8 + x3^4*x4*x5^8*x9 + -x3^4*x4*x5^8 + -x3^4*x4*x5^7*x6*x7^2*x8*x9 + x3^4*x4*x5^7*x6*x7^2*x8 + x3^4*x4*x5^7*x6*x7^2*x9 + -x3^4*x4*x5^7*x6*x7^2 + 2*x3^4*x4*x5^7*x6*x7*x8*x9 + -2*x3^4*x4*x5^7*x6*x7*x8 + -2*x3^4*x4*x5^7*x6*x7*x9 + 2*x3^4*x4*x5^7*x6*x7 + -x3^4*x4*x5^7*x6*x8*x9 + x3^4*x4*x5^7*x6*x8 + x3^4*x4*x5^7*x6*x9 + -x3^4*x4*x5^7*x6 + x3^4*x4*x5^7*x7^2*x8*x9 + -x3^4*x4*x5^7*x7^2*x8 + -x3^4*x4*x5^7*x7^2*x9 + x3^4*x4*x5^7*x7^2 + -2*x3^4*x4*x5^7*x7*x8*x9 + 2*x3^4*x4*x5^7*x7*x8 + 2*x3^4*x4*x5^7*x7*x9 + -2*x3^4*x4*x5^7*x7 + x3^4*x4*x5^7*x8*x9 + -x3^4*x4*x5^7*x8 + -x3^4*x4*x5^7*x9 + x3^4*x4*x5^7 + x3^4*x4*x5^5*x6*x7^2*x8*x9 + -x3^4*x4*x5^5*x6*x7^2*x8 + -x3^4*x4*x5^5*x6*x7^2*x9 + x3^4*x4*x5^5*x6*x7^2 + -x3^4*x4*x5^5*x6*x7*x8*x9^4 + x3^4*x4*x5^5*x6*x7*x8*x9^2 + -x3^4*x4*x5^5*x6*x7*x8*x9 + x3^4*x4*x5^5*x6*x7*x8 + x3^4*x4*x5^5*x6*x7*x9^4 + -x3^4*x4*x5^5*x6*x7*x9^2 + x3^4*x4*x5^5*x6*x7*x9 + -x3^4*x4*x5^5*x6*x7 + x3^4*x4*x5^5*x6*x8*x9^4 + -x3^4*x4*x5^5*x6*x8*x9^2 + -x3^4*x4*x5^5*x6*x9^4 + x3^4*x4*x5^5*x6*x9^2 + -x3^4*x4*x5^5*x7^2*x8*x9 + x3^4*x4*x5^5*x7^2*x8 + x3^4*x4*x5^5*x7^2*x9 + -x3^4*x4*x5^5*x7^2 + x3^4*x4*x5^5*x7*x8*x9^4 + -x3^4*x4*x5^5*x7*x8*x9^2 + x3^4*x4*x5^5*x7*x8*x9 + -x3^4*x4*x5^5*x7*x8 + -x3^4*x4*x5^5*x7*x9^4 + x3^4*x4*x5^5*x7*x9^2 + -x3^4*x4*x5^5*x7*x9 + x3^4*x4*x5^5*x7 + -x3^4*x4*x5^5*x8*x9^4 + x3^4*x4*x5^5*x8*x9^2 + x3^4*x4*x5^5*x9^4 + -x3^4*x4*x5^5*x9^2 + x3^4*x4*x5^4*x6*x7*x8*x9^4 + -x3^4*x4*x5^4*x6*x7*x8*x9^2 + -x3^4*x4*x5^4*x6*x7*x9^4 + x3^4*x4*x5^4*x6*x7*x9^2 + -x3^4*x4*x5^4*x6*x8*x9^4 + x3^4*x4*x5^4*x6*x8*x9^2 + x3^4*x4*x5^4*x6*x9^4 + -x3^4*x4*x5^4*x6*x9^2 + -x3^4*x4*x5^4*x7*x8*x9^4 + x3^4*x4*x5^4*x7*x8*x9^2 + x3^4*x4*x5^4*x7*x9^4 + -x3^4*x4*x5^4*x7*x9^2 + x3^4*x4*x5^4*x8*x9^4 + -x3^4*x4*x5^4*x8*x9^2 + -x3^4*x4*x5^4*x9^4 + x3^4*x4*x5^4*x9^2 + -x3^4*x4*x5^3*x6*x7*x8*x9^5 + x3^4*x4*x5^3*x6*x7*x8*x9^4 + x3^4*x4*x5^3*x6*x7*x9^5 + -x3^4*x4*x5^3*x6*x7*x9^4 + x3^4*x4*x5^3*x6*x8*x9^5 + -x3^4*x4*x5^3*x6*x8*x9^4 + -x3^4*x4*x5^3*x6*x9^5 + x3^4*x4*x5^3*x6*x9^4 + x3^4*x4*x5^3*x7*x8*x9^5 + -x3^4*x4*x5^3*x7*x8*x9^4 + -x3^4*x4*x5^3*x7*x9^5 + x3^4*x4*x5^3*x7*x9^4 + -x3^4*x4*x5^3*x8*x9^5 + x3^4*x4*x5^3*x8*x9^4 + x3^4*x4*x5^3*x9^5 + -x3^4*x4*x5^3*x9^4 + x3^4*x4*x5*x6*x7*x8*x9^5 + -x3^4*x4*x5*x6*x7*x8*x9^4 + -x3^4*x4*x5*x6*x7*x9^5 + x3^4*x4*x5*x6*x7*x9^4 + -x3^4*x4*x5*x6*x8*x9^5 + x3^4*x4*x5*x6*x8*x9^4 + x3^4*x4*x5*x6*x9^5 + -x3^4*x4*x5*x6*x9^4 + -x3^4*x4*x5*x7*x8*x9^5 + x3^4*x4*x5*x7*x8*x9^4 + x3^4*x4*x5*x7*x9^5 + -x3^4*x4*x5*x7*x9^4 + x3^4*x4*x5*x8*x9^5 + -x3^4*x4*x5*x8*x9^4 + -x3^4*x4*x5*x9^5 + x3^4*x4*x5*x9^4 + x3^4*x5^8*x6*x7*x8*x9 + -x3^4*x5^8*x6*x7*x8 + -x3^4*x5^8*x6*x7*x9 + x3^4*x5^8*x6*x7 + -x3^4*x5^8*x6*x8*x9 + x3^4*x5^8*x6*x8 + x3^4*x5^8*x6*x9 + -x3^4*x5^8*x6 + -x3^4*x5^8*x7*x8*x9 + x3^4*x5^8*x7*x8 + x3^4*x5^8*x7*x9 + -x3^4*x5^8*x7 + x3^4*x5^8*x8*x9 + -x3^4*x5^8*x8 + -x3^4*x5^8*x9 + x3^4*x5^8 + x3^4*x5^7*x6*x7^2*x8*x9 + -x3^4*x5^7*x6*x7^2*x8 + -x3^4*x5^7*x6*x7^2*x9 + x3^4*x5^7*x6*x7^2 + -2*x3^4*x5^7*x6*x7*x8*x9 + 2*x3^4*x5^7*x6*x7*x8 + 2*x3^4*x5^7*x6*x7*x9 + -2*x3^4*x5^7*x6*x7 + x3^4*x5^7*x6*x8*x9 + -x3^4*x5^7*x6*x8 + -x3^4*x5^7*x6*x9 + x3^4*x5^7*x6 + -x3^4*x5^7*x7^2*x8*x9 + x3^4*x5^7*x7^2*x8 + x3^4*x5^7*x7^2*x9 + -x3^4*x5^7*x7^2 + 2*x3^4*x5^7*x7*x8*x9 + -2*x3^4*x5^7*x7*x8 + -2*x3^4*x5^7*x7*x9 + 2*x3^4*x5^7*x7 + -x3^4*x5^7*x8*x9 + x3^4*x5^7*x8 + x3^4*x5^7*x9 + -x3^4*x5^7 + -x3^4*x5^5*x6*x7^2*x8*x9 + x3^4*x5^5*x6*x7^2*x8 + x3^4*x5^5*x6*x7^2*x9 + -x3^4*x5^5*x6*x7^2 + x3^4*x5^5*x6*x7*x8*x9^4 + -x3^4*x5^5*x6*x7*x8*x9^2 + x3^4*x5^5*x6*x7*x8*x9 + -x3^4*x5^5*x6*x7*x8 + -x3^4*x5^5*x6*x7*x9^4 + x3^4*x5^5*x6*x7*x9^2 + -x3^4*x5^5*x6*x7*x9 + x3^4*x5^5*x6*x7 + -x3^4*x5^5*x6*x8*x9^4 + x3^4*x5^5*x6*x8*x9^2 + x3^4*x5^5*x6*x9^4 + -x3^4*x5^5*x6*x9^2 + x3^4*x5^5*x7^2*x8*x9 + -x3^4*x5^5*x7^2*x8 + -x3^4*x5^5*x7^2*x9 + x3^4*x5^5*x7^2 + -x3^4*x5^5*x7*x8*x9^4 + x3^4*x5^5*x7*x8*x9^2 + -x3^4*x5^5*x7*x8*x9 + x3^4*x5^5*x7*x8 + x3^4*x5^5*x7*x9^4 + -x3^4*x5^5*x7*x9^2 + x3^4*x5^5*x7*x9 + -x3^4*x5^5*x7 + x3^4*x5^5*x8*x9^4 + -x3^4*x5^5*x8*x9^2 + -x3^4*x5^5*x9^4 + x3^4*x5^5*x9^2 + -x3^4*x5^4*x6*x7*x8*x9^4 + x3^4*x5^4*x6*x7*x8*x9^2 + x3^4*x5^4*x6*x7*x9^4 + -x3^4*x5^4*x6*x7*x9^2 + x3^4*x5^4*x6*x8*x9^4 + -x3^4*x5^4*x6*x8*x9^2 + -x3^4*x5^4*x6*x9^4 + x3^4*x5^4*x6*x9^2 + x3^4*x5^4*x7*x8*x9^4 + -x3^4*x5^4*x7*x8*x9^2 + -x3^4*x5^4*x7*x9^4 + x3^4*x5^4*x7*x9^2 + -x3^4*x5^4*x8*x9^4 + x3^4*x5^4*x8*x9^2 + x3^4*x5^4*x9^4 + -x3^4*x5^4*x9^2 + x3^4*x5^3*x6*x7*x8*x9^5 + -x3^4*x5^3*x6*x7*x8*x9^4 + -x3^4*x5^3*x6*x7*x9^5 + x3^4*x5^3*x6*x7*x9^4 + -x3^4*x5^3*x6*x8*x9^5 + x3^4*x5^3*x6*x8*x9^4 + x3^4*x5^3*x6*x9^5 + -x3^4*x5^3*x6*x9^4 + -x3^4*x5^3*x7*x8*x9^5 + x3^4*x5^3*x7*x8*x9^4 + x3^4*x5^3*x7*x9^5 + -x3^4*x5^3*x7*x9^4 + x3^4*x5^3*x8*x9^5 + -x3^4*x5^3*x8*x9^4 + -x3^4*x5^3*x9^5 + x3^4*x5^3*x9^4 + -x3^4*x5*x6*x7*x8*x9^5 + x3^4*x5*x6*x7*x8*x9^4 + x3^4*x5*x6*x7*x9^5 + -x3^4*x5*x6*x7*x9^4 + x3^4*x5*x6*x8*x9^5 + -x3^4*x5*x6*x8*x9^4 + -x3^4*x5*x6*x9^5 + x3^4*x5*x6*x9^4 + x3^4*x5*x7*x8*x9^5 + -x3^4*x5*x7*x8*x9^4 + -x3^4*x5*x7*x9^5 + x3^4*x5*x7*x9^4 + -x3^4*x5*x8*x9^5 + x3^4*x5*x8*x9^4 + x3^4*x5*x9^5 + -x3^4*x5*x9^4 + -x3^3*x4^4*x5*x6*x7*x8^2*x9 + x3^3*x4^4*x5*x6*x7*x8^2 + x3^3*x4^4*x5*x6*x7*x9 + -x3^3*x4^4*x5*x6*x7 + x3^3*x4^4*x5*x6*x8^2*x9 + -x3^3*x4^4*x5*x6*x8^2 + -x3^3*x4^4*x5*x6*x9 + x3^3*x4^4*x5*x6 + x3^3*x4^4*x5*x7*x8^2*x9 + -x3^3*x4^4*x5*x7*x8^2 + -x3^3*x4^4*x5*x7*x9 + x3^3*x4^4*x5*x7 + -x3^3*x4^4*x5*x8^2*x9 + x3^3*x4^4*x5*x8^2 + x3^3*x4^4*x5*x9 + -x3^3*x4^4*x5 + x3^3*x4^4*x6*x7*x8^2*x9 + -x3^3*x4^4*x6*x7*x8^2 + -x3^3*x4^4*x6*x7*x9 + x3^3*x4^4*x6*x7 + -x3^3*x4^4*x6*x8^2*x9 + x3^3*x4^4*x6*x8^2 + x3^3*x4^4*x6*x9 + -x3^3*x4^4*x6 + -x3^3*x4^4*x7*x8^2*x9 + x3^3*x4^4*x7*x8^2 + x3^3*x4^4*x7*x9 + -x3^3*x4^4*x7 + x3^3*x4^4*x8^2*x9 + -x3^3*x4^4*x8^2 + -x3^3*x4^4*x9 + x3^3*x4^4 + x3^3*x4^3*x5*x6*x7*x8^2*x9 + -x3^3*x4^3*x5*x6*x7*x8^2 + -x3^3*x4^3*x5*x6*x7*x9 + x3^3*x4^3*x5*x6*x7 + -x3^3*x4^3*x5*x6*x8^2*x9 + x3^3*x4^3*x5*x6*x8^2 + x3^3*x4^3*x5*x6*x9 + -x3^3*x4^3*x5*x6 + -x3^3*x4^3*x5*x7*x8^2*x9 + x3^3*x4^3*x5*x7*x8^2 + x3^3*x4^3*x5*x7*x9 + -x3^3*x4^3*x5*x7 + x3^3*x4^3*x5*x8^2*x9 + -x3^3*x4^3*x5*x8^2 + -x3^3*x4^3*x5*x9 + x3^3*x4^3*x5 + -x3^3*x4^3*x6*x7*x8^2*x9 + x3^3*x4^3*x6*x7*x8^2 + x3^3*x4^3*x6*x7*x9 + -x3^3*x4^3*x6*x7 + x3^3*x4^3*x6*x8^2*x9 + -x3^3*x4^3*x6*x8^2 + -x3^3*x4^3*x6*x9 + x3^3*x4^3*x6 + x3^3*x4^3*x7*x8^2*x9 + -x3^3*x4^3*x7*x8^2 + -x3^3*x4^3*x7*x9 + x3^3*x4^3*x7 + -x3^3*x4^3*x8^2*x9 + x3^3*x4^3*x8^2 + x3^3*x4^3*x9 + -x3^3*x4^3 + -x3^3*x4*x5^3*x6^2*x7*x8^2*x9^2 + x3^3*x4*x5^3*x6^2*x7*x8^2*x9 + x3^3*x4*x5^3*x6^2*x7*x8*x9^2 + -x3^3*x4*x5^3*x6^2*x7*x8*x9 + x3^3*x4*x5^3*x6^2*x8^2*x9^2 + -x3^3*x4*x5^3*x6^2*x8^2*x9 + -x3^3*x4*x5^3*x6^2*x8*x9^2 + x3^3*x4*x5^3*x6^2*x8*x9 + x3^3*x4*x5^3*x6*x7*x8^2*x9^2 + -x3^3*x4*x5^3*x6*x7*x8^2*x9 + -x3^3*x4*x5^3*x6*x7*x8*x9^2 + x3^3*x4*x5^3*x6*x7*x8*x9 + -x3^3*x4*x5^3*x6*x8^2*x9^2 + x3^3*x4*x5^3*x6*x8^2*x9 + x3^3*x4*x5^3*x6*x8*x9^2 + -x3^3*x4*x5^3*x6*x8*x9 + -x3^3*x4*x5^2*x6^3*x7^2*x8*x9^2 + x3^3*x4*x5^2*x6^3*x7^2*x8 + x3^3*x4*x5^2*x6^3*x7^2*x9^2 + -x3^3*x4*x5^2*x6^3*x7^2 + -x3^3*x4*x5^2*x6^3*x7*x8*x9^3 + x3^3*x4*x5^2*x6^3*x7*x8*x9^2 + x3^3*x4*x5^2*x6^3*x7*x9^3 + -x3^3*x4*x5^2*x6^3*x7*x9^2 + x3^3*x4*x5^2*x6^3*x8*x9^3 + -x3^3*x4*x5^2*x6^3*x8 + -x3^3*x4*x5^2*x6^3*x9^3 + x3^3*x4*x5^2*x6^3 + x3^3*x4*x5^2*x6^2*x7^2*x8*x9^2 + -x3^3*x4*x5^2*x6^2*x7^2*x8 + -x3^3*x4*x5^2*x6^2*x7^2*x9^2 + x3^3*x4*x5^2*x6^2*x7^2 + x3^3*x4*x5^2*x6^2*x7*x8*x9^3 + -x3^3*x4*x5^2*x6^2*x7*x8*x9^2 + -x3^3*x4*x5^2*x6^2*x7*x9^3 + x3^3*x4*x5^2*x6^2*x7*x9^2 + -x3^3*x4*x5^2*x6^2*x8*x9^3 + x3^3*x4*x5^2*x6^2*x8 + x3^3*x4*x5^2*x6^2*x9^3 + -x3^3*x4*x5^2*x6^2 + -x3^3*x4*x5^2*x6*x7^3*x8^2*x9 + x3^3*x4*x5^2*x6*x7^3*x8^2 + x3^3*x4*x5^2*x6*x7^3*x8*x9 + -x3^3*x4*x5^2*x6*x7^3*x8 + x3^3*x4*x5^2*x6*x7^2*x8^2*x9 + -x3^3*x4*x5^2*x6*x7^2*x8^2 + -x3^3*x4*x5^2*x6*x7^2*x8*x9 + x3^3*x4*x5^2*x6*x7^2*x8 + x3^3*x4*x5^2*x7^3*x8^2*x9 + -x3^3*x4*x5^2*x7^3*x8^2 + -x3^3*x4*x5^2*x7^3*x8*x9 + x3^3*x4*x5^2*x7^3*x8 + -x3^3*x4*x5^2*x7^2*x8^2*x9 + x3^3*x4*x5^2*x7^2*x8^2 + x3^3*x4*x5^2*x7^2*x8*x9 + -x3^3*x4*x5^2*x7^2*x8 + -x3^3*x4*x5*x6^3*x7^2*x8^2*x9 + x3^3*x4*x5*x6^3*x7^2*x8^2 + x3^3*x4*x5*x6^3*x7^2*x8*x9 + -x3^3*x4*x5*x6^3*x7^2*x8 + -x3^3*x4*x5*x6^3*x7*x8^2*x9^2 + x3^3*x4*x5*x6^3*x7*x8^2*x9 + x3^3*x4*x5*x6^3*x7*x8*x9^2 + -x3^3*x4*x5*x6^3*x7*x8*x9 + x3^3*x4*x5*x6^3*x8^2*x9^2 + -x3^3*x4*x5*x6^3*x8^2 + -x3^3*x4*x5*x6^3*x8*x9^2 + x3^3*x4*x5*x6^3*x8 + x3^3*x4*x5*x6^2*x7^2*x8^2*x9 + -x3^3*x4*x5*x6^2*x7^2*x8^2 + -x3^3*x4*x5*x6^2*x7^2*x8*x9 + x3^3*x4*x5*x6^2*x7^2*x8 + x3^3*x4*x5*x6^2*x7*x8^2*x9^2 + -x3^3*x4*x5*x6^2*x7*x8^2*x9 + -x3^3*x4*x5*x6^2*x7*x8*x9^2 + x3^3*x4*x5*x6^2*x7*x8*x9 + -x3^3*x4*x5*x6^2*x8^2*x9^2 + x3^3*x4*x5*x6^2*x8^2 + x3^3*x4*x5*x6^2*x8*x9^2 + -x3^3*x4*x5*x6^2*x8 + x3^3*x4*x6^3*x7^2*x8^2*x9 + -x3^3*x4*x6^3*x7^2*x8^2 + x3^3*x4*x6^3*x7^2*x8*x9^2 + -x3^3*x4*x6^3*x7^2*x8*x9 + -x3^3*x4*x6^3*x7^2*x9^2 + x3^3*x4*x6^3*x7^2 + x3^3*x4*x6^3*x7*x8^2*x9^2 + -x3^3*x4*x6^3*x7*x8^2*x9 + x3^3*x4*x6^3*x7*x8*x9^3 + -2*x3^3*x4*x6^3*x7*x8*x9^2 + x3^3*x4*x6^3*x7*x8*x9 + -x3^3*x4*x6^3*x7*x9^3 + x3^3*x4*x6^3*x7*x9^2 + -x3^3*x4*x6^3*x8^2*x9^2 + x3^3*x4*x6^3*x8^2 + -x3^3*x4*x6^3*x8*x9^3 + x3^3*x4*x6^3*x8*x9^2 + x3^3*x4*x6^3*x9^3 + -x3^3*x4*x6^3 + -x3^3*x4*x6^2*x7^2*x8^2*x9 + x3^3*x4*x6^2*x7^2*x8^2 + -x3^3*x4*x6^2*x7^2*x8*x9^2 + x3^3*x4*x6^2*x7^2*x8*x9 + x3^3*x4*x6^2*x7^2*x9^2 + -x3^3*x4*x6^2*x7^2 + -x3^3*x4*x6^2*x7*x8*x9^3 + x3^3*x4*x6^2*x7*x8*x9^2 + x3^3*x4*x6^2*x7*x9^3 + -x3^3*x4*x6^2*x7*x9^2 + x3^3*x4*x6^2*x8^2*x9 + -x3^3*x4*x6^2*x8^2 + x3^3*x4*x6^2*x8*x9^3 + -x3^3*x4*x6^2*x8*x9 + -x3^3*x4*x6^2*x9^3 + x3^3*x4*x6^2 + x3^3*x4*x6*x7^3*x8^2*x9 + -x3^3*x4*x6*x7^3*x8^2 + -x3^3*x4*x6*x7^3*x8*x9 + x3^3*x4*x6*x7^3*x8 + -x3^3*x4*x6*x7^2*x8^2*x9 + x3^3*x4*x6*x7^2*x8^2 + x3^3*x4*x6*x7^2*x8*x9 + -x3^3*x4*x6*x7^2*x8 + -x3^3*x4*x6*x7*x8^2*x9^2 + x3^3*x4*x6*x7*x8^2*x9 + x3^3*x4*x6*x7*x8*x9^2 + -x3^3*x4*x6*x7*x8*x9 + x3^3*x4*x6*x8^2*x9^2 + -x3^3*x4*x6*x8^2*x9 + -x3^3*x4*x6*x8*x9^2 + x3^3*x4*x6*x8*x9 + -x3^3*x4*x7^3*x8^2*x9 + x3^3*x4*x7^3*x8^2 + x3^3*x4*x7^3*x8*x9 + -x3^3*x4*x7^3*x8 + x3^3*x4*x7^2*x8^2*x9 + -x3^3*x4*x7^2*x8^2 + -x3^3*x4*x7^2*x8*x9 + x3^3*x4*x7^2*x8 + x3^3*x5^3*x6^2*x7*x8^2*x9^2 + -x3^3*x5^3*x6^2*x7*x8^2*x9 + -x3^3*x5^3*x6^2*x7*x8*x9^2 + x3^3*x5^3*x6^2*x7*x8*x9 + -x3^3*x5^3*x6^2*x8^2*x9^2 + x3^3*x5^3*x6^2*x8^2*x9 + x3^3*x5^3*x6^2*x8*x9^2 + -x3^3*x5^3*x6^2*x8*x9 + -x3^3*x5^3*x6*x7*x8^2*x9^2 + x3^3*x5^3*x6*x7*x8^2*x9 + x3^3*x5^3*x6*x7*x8*x9^2 + -x3^3*x5^3*x6*x7*x8*x9 + x3^3*x5^3*x6*x8^2*x9^2 + -x3^3*x5^3*x6*x8^2*x9 + -x3^3*x5^3*x6*x8*x9^2 + x3^3*x5^3*x6*x8*x9 + x3^3*x5^2*x6^3*x7^2*x8*x9^2 + -x3^3*x5^2*x6^3*x7^2*x8 + -x3^3*x5^2*x6^3*x7^2*x9^2 + x3^3*x5^2*x6^3*x7^2 + x3^3*x5^2*x6^3*x7*x8*x9^3 + -x3^3*x5^2*x6^3*x7*x8*x9^2 + -x3^3*x5^2*x6^3*x7*x9^3 + x3^3*x5^2*x6^3*x7*x9^2 + -x3^3*x5^2*x6^3*x8*x9^3 + x3^3*x5^2*x6^3*x8 + x3^3*x5^2*x6^3*x9^3 + -x3^3*x5^2*x6^3 + -x3^3*x5^2*x6^2*x7^2*x8*x9^2 + x3^3*x5^2*x6^2*x7^2*x8 + x3^3*x5^2*x6^2*x7^2*x9^2 + -x3^3*x5^2*x6^2*x7^2 + -x3^3*x5^2*x6^2*x7*x8*x9^3 + x3^3*x5^2*x6^2*x7*x8*x9^2 + x3^3*x5^2*x6^2*x7*x9^3 + -x3^3*x5^2*x6^2*x7*x9^2 + x3^3*x5^2*x6^2*x8*x9^3 + -x3^3*x5^2*x6^2*x8 + -x3^3*x5^2*x6^2*x9^3 + x3^3*x5^2*x6^2 + x3^3*x5^2*x6*x7^3*x8^2*x9 + -x3^3*x5^2*x6*x7^3*x8^2 + -x3^3*x5^2*x6*x7^3*x8*x9 + x3^3*x5^2*x6*x7^3*x8 + -x3^3*x5^2*x6*x7^2*x8^2*x9 + x3^3*x5^2*x6*x7^2*x8^2 + x3^3*x5^2*x6*x7^2*x8*x9 + -x3^3*x5^2*x6*x7^2*x8 + -x3^3*x5^2*x7^3*x8^2*x9 + x3^3*x5^2*x7^3*x8^2 + x3^3*x5^2*x7^3*x8*x9 + -x3^3*x5^2*x7^3*x8 + x3^3*x5^2*x7^2*x8^2*x9 + -x3^3*x5^2*x7^2*x8^2 + -x3^3*x5^2*x7^2*x8*x9 + x3^3*x5^2*x7^2*x8 + x3^3*x5*x6^3*x7^2*x8^2*x9 + -x3^3*x5*x6^3*x7^2*x8^2 + -x3^3*x5*x6^3*x7^2*x8*x9 + x3^3*x5*x6^3*x7^2*x8 + x3^3*x5*x6^3*x7*x8^2*x9^2 + -x3^3*x5*x6^3*x7*x8^2*x9 + -x3^3*x5*x6^3*x7*x8*x9^2 + x3^3*x5*x6^3*x7*x8*x9 + -x3^3*x5*x6^3*x8^2*x9^2 + x3^3*x5*x6^3*x8^2 + x3^3*x5*x6^3*x8*x9^2 + -x3^3*x5*x6^3*x8 + -x3^3*x5*x6^2*x7^2*x8^2*x9 + x3^3*x5*x6^2*x7^2*x8^2 + x3^3*x5*x6^2*x7^2*x8*x9 + -x3^3*x5*x6^2*x7^2*x8 + -x3^3*x5*x6^2*x7*x8^2*x9^2 + x3^3*x5*x6^2*x7*x8^2*x9 + x3^3*x5*x6^2*x7*x8*x9^2 + -x3^3*x5*x6^2*x7*x8*x9 + x3^3*x5*x6^2*x8^2*x9^2 + -x3^3*x5*x6^2*x8^2 + -x3^3*x5*x6^2*x8*x9^2 + x3^3*x5*x6^2*x8 + -x3^3*x6^3*x7^2*x8^2*x9 + x3^3*x6^3*x7^2*x8^2 + -x3^3*x6^3*x7^2*x8*x9^2 + x3^3*x6^3*x7^2*x8*x9 + x3^3*x6^3*x7^2*x9^2 + -x3^3*x6^3*x7^2 + -x3^3*x6^3*x7*x8^2*x9^2 + x3^3*x6^3*x7*x8^2*x9 + -x3^3*x6^3*x7*x8*x9^3 + 2*x3^3*x6^3*x7*x8*x9^2 + -x3^3*x6^3*x7*x8*x9 + x3^3*x6^3*x7*x9^3 + -x3^3*x6^3*x7*x9^2 + x3^3*x6^3*x8^2*x9^2 + -x3^3*x6^3*x8^2 + x3^3*x6^3*x8*x9^3 + -x3^3*x6^3*x8*x9^2 + -x3^3*x6^3*x9^3 + x3^3*x6^3 + x3^3*x6^2*x7^2*x8^2*x9 + -x3^3*x6^2*x7^2*x8^2 + x3^3*x6^2*x7^2*x8*x9^2 + -x3^3*x6^2*x7^2*x8*x9 + -x3^3*x6^2*x7^2*x9^2 + x3^3*x6^2*x7^2 + x3^3*x6^2*x7*x8*x9^3 + -x3^3*x6^2*x7*x8*x9^2 + -x3^3*x6^2*x7*x9^3 + x3^3*x6^2*x7*x9^2 + -x3^3*x6^2*x8^2*x9 + x3^3*x6^2*x8^2 + -x3^3*x6^2*x8*x9^3 + x3^3*x6^2*x8*x9 + x3^3*x6^2*x9^3 + -x3^3*x6^2 + -x3^3*x6*x7^3*x8^2*x9 + x3^3*x6*x7^3*x8^2 + x3^3*x6*x7^3*x8*x9 + -x3^3*x6*x7^3*x8 + x3^3*x6*x7^2*x8^2*x9 + -x3^3*x6*x7^2*x8^2 + -x3^3*x6*x7^2*x8*x9 + x3^3*x6*x7^2*x8 + x3^3*x6*x7*x8^2*x9^2 + -x3^3*x6*x7*x8^2*x9 + -x3^3*x6*x7*x8*x9^2 + x3^3*x6*x7*x8*x9 + -x3^3*x6*x8^2*x9^2 + x3^3*x6*x8^2*x9 + x3^3*x6*x8*x9^2 + -x3^3*x6*x8*x9 + x3^3*x7^3*x8^2*x9 + -x3^3*x7^3*x8^2 + -x3^3*x7^3*x8*x9 + x3^3*x7^3*x8 + -x3^3*x7^2*x8^2*x9 + x3^3*x7^2*x8^2 + x3^3*x7^2*x8*x9 + -x3^3*x7^2*x8 + -x3^2*x4^7*x5*x6^2*x7*x8^2*x9 + x3^2*x4^7*x5*x6^2*x7*x8^2 + x3^2*x4^7*x5*x6^2*x7*x9 + -x3^2*x4^7*x5*x6^2*x7 + x3^2*x4^7*x5*x6^2*x8^2*x9 + -x3^2*x4^7*x5*x6^2*x8^2 + -x3^2*x4^7*x5*x6^2*x9 + x3^2*x4^7*x5*x6^2 + x3^2*x4^7*x5*x7*x8^2*x9 + -x3^2*x4^7*x5*x7*x8^2 + -x3^2*x4^7*x5*x7*x9 + x3^2*x4^7*x5*x7 + -x3^2*x4^7*x5*x8^2*x9 + x3^2*x4^7*x5*x8^2 + x3^2*x4^7*x5*x9 + -x3^2*x4^7*x5 + x3^2*x4^7*x6^2*x7*x8^2*x9 + -x3^2*x4^7*x6^2*x7*x8^2 + -x3^2*x4^7*x6^2*x7*x9 + x3^2*x4^7*x6^2*x7 + -x3^2*x4^7*x6^2*x8^2*x9 + x3^2*x4^7*x6^2*x8^2 + x3^2*x4^7*x6^2*x9 + -x3^2*x4^7*x6^2 + -x3^2*x4^7*x7*x8^2*x9 + x3^2*x4^7*x7*x8^2 + x3^2*x4^7*x7*x9 + -x3^2*x4^7*x7 + x3^2*x4^7*x8^2*x9 + -x3^2*x4^7*x8^2 + -x3^2*x4^7*x9 + x3^2*x4^7 + x3^2*x4^4*x5*x6*x7*x8^2*x9 + -x3^2*x4^4*x5*x6*x7*x8^2 + -x3^2*x4^4*x5*x6*x7*x9 + x3^2*x4^4*x5*x6*x7 + -x3^2*x4^4*x5*x6*x8^2*x9 + x3^2*x4^4*x5*x6*x8^2 + x3^2*x4^4*x5*x6*x9 + -x3^2*x4^4*x5*x6 + -x3^2*x4^4*x5*x7*x8^2*x9 + x3^2*x4^4*x5*x7*x8^2 + x3^2*x4^4*x5*x7*x9 + -x3^2*x4^4*x5*x7 + x3^2*x4^4*x5*x8^2*x9 + -x3^2*x4^4*x5*x8^2 + -x3^2*x4^4*x5*x9 + x3^2*x4^4*x5 + -x3^2*x4^4*x6*x7*x8^2*x9 + x3^2*x4^4*x6*x7*x8^2 + x3^2*x4^4*x6*x7*x9 + -x3^2*x4^4*x6*x7 + x3^2*x4^4*x6*x8^2*x9 + -x3^2*x4^4*x6*x8^2 + -x3^2*x4^4*x6*x9 + x3^2*x4^4*x6 + x3^2*x4^4*x7*x8^2*x9 + -x3^2*x4^4*x7*x8^2 + -x3^2*x4^4*x7*x9 + x3^2*x4^4*x7 + -x3^2*x4^4*x8^2*x9 + x3^2*x4^4*x8^2 + x3^2*x4^4*x9 + -x3^2*x4^4 + -x3^2*x4^3*x5^3*x6^2*x7*x8*x9 + x3^2*x4^3*x5^3*x6^2*x7*x8 + x3^2*x4^3*x5^3*x6^2*x7*x9 + -x3^2*x4^3*x5^3*x6^2*x7 + x3^2*x4^3*x5^3*x6^2*x8*x9 + -x3^2*x4^3*x5^3*x6^2*x8 + -x3^2*x4^3*x5^3*x6^2*x9 + x3^2*x4^3*x5^3*x6^2 + x3^2*x4^3*x5^3*x6*x7*x8*x9 + -x3^2*x4^3*x5^3*x6*x7*x8 + -x3^2*x4^3*x5^3*x6*x7*x9 + x3^2*x4^3*x5^3*x6*x7 + -x3^2*x4^3*x5^3*x6*x8*x9 + x3^2*x4^3*x5^3*x6*x8 + x3^2*x4^3*x5^3*x6*x9 + -x3^2*x4^3*x5^3*x6 + -x3^2*x4^3*x5^2*x6^3*x7*x8*x9 + x3^2*x4^3*x5^2*x6^3*x7*x8 + x3^2*x4^3*x5^2*x6^3*x7*x9 + -x3^2*x4^3*x5^2*x6^3*x7 + x3^2*x4^3*x5^2*x6^3*x8*x9 + -x3^2*x4^3*x5^2*x6^3*x8 + -x3^2*x4^3*x5^2*x6^3*x9 + x3^2*x4^3*x5^2*x6^3 + x3^2*x4^3*x5^2*x6^2*x7*x8*x9 + -x3^2*x4^3*x5^2*x6^2*x7*x8 + -x3^2*x4^3*x5^2*x6^2*x7*x9 + x3^2*x4^3*x5^2*x6^2*x7 + -x3^2*x4^3*x5^2*x6^2*x8*x9 + x3^2*x4^3*x5^2*x6^2*x8 + x3^2*x4^3*x5^2*x6^2*x9 + -x3^2*x4^3*x5^2*x6^2 + -x3^2*x4^3*x5*x6^3*x7*x8^2*x9 + x3^2*x4^3*x5*x6^3*x7*x8^2 + x3^2*x4^3*x5*x6^3*x7*x8*x9 + -x3^2*x4^3*x5*x6^3*x7*x8 + x3^2*x4^3*x5*x6^3*x8^2*x9 + -x3^2*x4^3*x5*x6^3*x8^2 + -x3^2*x4^3*x5*x6^3*x8*x9 + x3^2*x4^3*x5*x6^3*x8 + x3^2*x4^3*x5*x6^2*x7*x8^2*x9 + -x3^2*x4^3*x5*x6^2*x7*x8^2 + -x3^2*x4^3*x5*x6^2*x7*x9 + x3^2*x4^3*x5*x6^2*x7 + -x3^2*x4^3*x5*x6^2*x8^2*x9 + x3^2*x4^3*x5*x6^2*x8^2 + x3^2*x4^3*x5*x6^2*x9 + -x3^2*x4^3*x5*x6^2 + -x3^2*x4^3*x5*x6*x7*x8*x9 + x3^2*x4^3*x5*x6*x7*x8 + x3^2*x4^3*x5*x6*x7*x9 + -x3^2*x4^3*x5*x6*x7 + x3^2*x4^3*x5*x6*x8*x9 + -x3^2*x4^3*x5*x6*x8 + -x3^2*x4^3*x5*x6*x9 + x3^2*x4^3*x5*x6 + x3^2*x4^3*x6^3*x7*x8^2*x9 + -x3^2*x4^3*x6^3*x7*x8^2 + -x3^2*x4^3*x6^3*x7*x9 + x3^2*x4^3*x6^3*x7 + -x3^2*x4^3*x6^3*x8^2*x9 + x3^2*x4^3*x6^3*x8^2 + x3^2*x4^3*x6^3*x9 + -x3^2*x4^3*x6^3 + -x3^2*x4^3*x6^2*x7*x8^2*x9 + x3^2*x4^3*x6^2*x7*x8^2 + x3^2*x4^3*x6^2*x7*x9 + -x3^2*x4^3*x6^2*x7 + x3^2*x4^3*x6^2*x8^2*x9 + -x3^2*x4^3*x6^2*x8^2 + -x3^2*x4^3*x6^2*x9 + x3^2*x4^3*x6^2 + -x3^2*x4^2*x5^5*x6^2*x7*x8*x9 + x3^2*x4^2*x5^5*x6^2*x7*x8 + x3^2*x4^2*x5^5*x6^2*x7*x9 + -x3^2*x4^2*x5^5*x6^2*x7 + x3^2*x4^2*x5^5*x6^2*x8*x9 + -x3^2*x4^2*x5^5*x6^2*x8 + -x3^2*x4^2*x5^5*x6^2*x9 + x3^2*x4^2*x5^5*x6^2 + -x3^2*x4^2*x5^5*x6*x7^2*x8*x9 + x3^2*x4^2*x5^5*x6*x7^2*x8 + x3^2*x4^2*x5^5*x6*x7^2*x9 + -x3^2*x4^2*x5^5*x6*x7^2 + 2*x3^2*x4^2*x5^5*x6*x7*x8*x9 + -2*x3^2*x4^2*x5^5*x6*x7*x8 + -2*x3^2*x4^2*x5^5*x6*x7*x9 + 2*x3^2*x4^2*x5^5*x6*x7 + -x3^2*x4^2*x5^5*x6*x8*x9 + x3^2*x4^2*x5^5*x6*x8 + x3^2*x4^2*x5^5*x6*x9 + -x3^2*x4^2*x5^5*x6 + x3^2*x4^2*x5^5*x7^2*x8*x9 + -x3^2*x4^2*x5^5*x7^2*x8 + -x3^2*x4^2*x5^5*x7^2*x9 + x3^2*x4^2*x5^5*x7^2 + -x3^2*x4^2*x5^5*x7*x8*x9 + x3^2*x4^2*x5^5*x7*x8 + x3^2*x4^2*x5^5*x7*x9 + -x3^2*x4^2*x5^5*x7 + -x3^2*x4^2*x5^3*x6^2*x7*x8^2*x9 + x3^2*x4^2*x5^3*x6^2*x7*x8^2 + 2*x3^2*x4^2*x5^3*x6^2*x7*x8*x9 + -2*x3^2*x4^2*x5^3*x6^2*x7*x8 + -x3^2*x4^2*x5^3*x6^2*x7*x9 + x3^2*x4^2*x5^3*x6^2*x7 + x3^2*x4^2*x5^3*x6^2*x8^2*x9 + -x3^2*x4^2*x5^3*x6^2*x8^2 + -2*x3^2*x4^2*x5^3*x6^2*x8*x9 + 2*x3^2*x4^2*x5^3*x6^2*x8 + x3^2*x4^2*x5^3*x6^2*x9 + -x3^2*x4^2*x5^3*x6^2 + -x3^2*x4^2*x5^3*x6*x7^2*x8^2*x9 + x3^2*x4^2*x5^3*x6*x7^2*x8^2 + x3^2*x4^2*x5^3*x6*x7^2*x8*x9 + -x3^2*x4^2*x5^3*x6*x7^2*x8 + 2*x3^2*x4^2*x5^3*x6*x7*x8^2*x9 + -2*x3^2*x4^2*x5^3*x6*x7*x8^2 + -3*x3^2*x4^2*x5^3*x6*x7*x8*x9 + 3*x3^2*x4^2*x5^3*x6*x7*x8 + x3^2*x4^2*x5^3*x6*x7*x9 + -x3^2*x4^2*x5^3*x6*x7 + -x3^2*x4^2*x5^3*x6*x8^2*x9 + x3^2*x4^2*x5^3*x6*x8^2 + 2*x3^2*x4^2*x5^3*x6*x8*x9 + -2*x3^2*x4^2*x5^3*x6*x8 + -x3^2*x4^2*x5^3*x6*x9 + x3^2*x4^2*x5^3*x6 + x3^2*x4^2*x5^3*x7^2*x8^2*x9 + -x3^2*x4^2*x5^3*x7^2*x8^2 + -x3^2*x4^2*x5^3*x7^2*x8*x9 + x3^2*x4^2*x5^3*x7^2*x8 + -x3^2*x4^2*x5^3*x7*x8^2*x9 + x3^2*x4^2*x5^3*x7*x8^2 + x3^2*x4^2*x5^3*x7*x8*x9 + -x3^2*x4^2*x5^3*x7*x8 + -x3^2*x4^2*x5^2*x6^3*x7^2*x8*x9 + x3^2*x4^2*x5^2*x6^3*x7^2*x8 + x3^2*x4^2*x5^2*x6^3*x7^2*x9 + -x3^2*x4^2*x5^2*x6^3*x7^2 + x3^2*x4^2*x5^2*x6^3*x7*x8*x9 + -x3^2*x4^2*x5^2*x6^3*x7*x8 + -x3^2*x4^2*x5^2*x6^3*x7*x9 + x3^2*x4^2*x5^2*x6^3*x7 + -x3^2*x4^2*x5^2*x6^2*x7^2*x8^2*x9 + x3^2*x4^2*x5^2*x6^2*x7^2*x8^2 + x3^2*x4^2*x5^2*x6^2*x7^2*x8*x9 + -x3^2*x4^2*x5^2*x6^2*x7^2*x8 + x3^2*x4^2*x5^2*x6^2*x7*x8^2*x9 + -x3^2*x4^2*x5^2*x6^2*x7*x8^2 + -x3^2*x4^2*x5^2*x6^2*x7*x8*x9 + x3^2*x4^2*x5^2*x6^2*x7*x8 + -x3^2*x4^2*x5^2*x6*x7^3*x8^2*x9 + x3^2*x4^2*x5^2*x6*x7^3*x8^2 + x3^2*x4^2*x5^2*x6*x7^3*x9 + -x3^2*x4^2*x5^2*x6*x7^3 + 2*x3^2*x4^2*x5^2*x6*x7^2*x8^2*x9 + -2*x3^2*x4^2*x5^2*x6*x7^2*x8^2 + x3^2*x4^2*x5^2*x6*x7^2*x8*x9 + -x3^2*x4^2*x5^2*x6*x7^2*x8 + -3*x3^2*x4^2*x5^2*x6*x7^2*x9 + 3*x3^2*x4^2*x5^2*x6*x7^2 + -x3^2*x4^2*x5^2*x6*x7*x8^2*x9 + x3^2*x4^2*x5^2*x6*x7*x8^2 + -x3^2*x4^2*x5^2*x6*x7*x8*x9 + x3^2*x4^2*x5^2*x6*x7*x8 + 2*x3^2*x4^2*x5^2*x6*x7*x9 + -2*x3^2*x4^2*x5^2*x6*x7 + x3^2*x4^2*x5^2*x7^3*x8^2*x9 + -x3^2*x4^2*x5^2*x7^3*x8^2 + -x3^2*x4^2*x5^2*x7^3*x9 + x3^2*x4^2*x5^2*x7^3 + -x3^2*x4^2*x5^2*x7^2*x8^2*x9 + x3^2*x4^2*x5^2*x7^2*x8^2 + -x3^2*x4^2*x5^2*x7^2*x8*x9 + x3^2*x4^2*x5^2*x7^2*x8 + 2*x3^2*x4^2*x5^2*x7^2*x9 + -2*x3^2*x4^2*x5^2*x7^2 + x3^2*x4^2*x5^2*x7*x8*x9 + -x3^2*x4^2*x5^2*x7*x8 + -x3^2*x4^2*x5^2*x7*x9 + x3^2*x4^2*x5^2*x7 + -x3^2*x4^2*x5*x6^3*x7^2*x8^2*x9 + x3^2*x4^2*x5*x6^3*x7^2*x8^2 + x3^2*x4^2*x5*x6^3*x7^2*x8*x9 + -x3^2*x4^2*x5*x6^3*x7^2*x8 + -x3^2*x4^2*x5*x6^3*x7*x8^2*x9^2 + 2*x3^2*x4^2*x5*x6^3*x7*x8^2*x9 + -x3^2*x4^2*x5*x6^3*x7*x8^2 + -x3^2*x4^2*x5*x6^3*x7*x8*x9^3 + x3^2*x4^2*x5*x6^3*x7*x8*x9^2 + -x3^2*x4^2*x5*x6^3*x7*x8*x9 + x3^2*x4^2*x5*x6^3*x7*x8 + x3^2*x4^2*x5*x6^3*x7*x9^3 + -x3^2*x4^2*x5*x6^3*x7*x9 + x3^2*x4^2*x5*x6^3*x8^2*x9^2 + -x3^2*x4^2*x5*x6^3*x8^2*x9 + x3^2*x4^2*x5*x6^3*x8*x9^3 + -x3^2*x4^2*x5*x6^3*x8*x9^2 + -x3^2*x4^2*x5*x6^3*x9^3 + x3^2*x4^2*x5*x6^3*x9 + x3^2*x4^2*x5*x6^2*x7^2*x8^2*x9 + -x3^2*x4^2*x5*x6^2*x7^2*x8^2 + -x3^2*x4^2*x5*x6^2*x7^2*x8*x9 + x3^2*x4^2*x5*x6^2*x7^2*x8 + -x3^2*x4^2*x5*x6^2*x8^2*x9 + x3^2*x4^2*x5*x6^2*x8^2 + x3^2*x4^2*x5*x6^2*x8*x9 + -x3^2*x4^2*x5*x6^2*x8 + -x3^2*x4^2*x5*x6*x7^4*x8*x9 + x3^2*x4^2*x5*x6*x7^4*x8 + x3^2*x4^2*x5*x6*x7^4*x9 + -x3^2*x4^2*x5*x6*x7^4 + x3^2*x4^2*x5*x6*x7^3*x8*x9 + -x3^2*x4^2*x5*x6*x7^3*x8 + -x3^2*x4^2*x5*x6*x7^3*x9 + x3^2*x4^2*x5*x6*x7^3 + x3^2*x4^2*x5*x6*x7*x8^2*x9^2 + -2*x3^2*x4^2*x5*x6*x7*x8^2*x9 + x3^2*x4^2*x5*x6*x7*x8^2 + x3^2*x4^2*x5*x6*x7*x8*x9^3 + -x3^2*x4^2*x5*x6*x7*x8*x9^2 + x3^2*x4^2*x5*x6*x7*x8*x9 + -x3^2*x4^2*x5*x6*x7*x8 + -x3^2*x4^2*x5*x6*x7*x9^3 + x3^2*x4^2*x5*x6*x7*x9 + -x3^2*x4^2*x5*x6*x8^2*x9^2 + 2*x3^2*x4^2*x5*x6*x8^2*x9 + -x3^2*x4^2*x5*x6*x8^2 + -x3^2*x4^2*x5*x6*x8*x9^3 + x3^2*x4^2*x5*x6*x8*x9^2 + -x3^2*x4^2*x5*x6*x8*x9 + x3^2*x4^2*x5*x6*x8 + x3^2*x4^2*x5*x6*x9^3 + -x3^2*x4^2*x5*x6*x9 + x3^2*x4^2*x5*x7^4*x8*x9 + -x3^2*x4^2*x5*x7^4*x8 + -x3^2*x4^2*x5*x7^4*x9 + x3^2*x4^2*x5*x7^4 + -x3^2*x4^2*x5*x7^3*x8*x9 + x3^2*x4^2*x5*x7^3*x8 + x3^2*x4^2*x5*x7^3*x9 + -x3^2*x4^2*x5*x7^3 + x3^2*x4^2*x6^3*x7^2*x8^2*x9 + -x3^2*x4^2*x6^3*x7^2*x8^2 + -x3^2*x4^2*x6^3*x7^2*x9 + x3^2*x4^2*x6^3*x7^2 + x3^2*x4^2*x6^3*x7*x8^2*x9^2 + -2*x3^2*x4^2*x6^3*x7*x8^2*x9 + x3^2*x4^2*x6^3*x7*x8^2 + x3^2*x4^2*x6^3*x7*x8*x9^3 + -x3^2*x4^2*x6^3*x7*x8*x9^2 + -x3^2*x4^2*x6^3*x7*x9^3 + 2*x3^2*x4^2*x6^3*x7*x9 + -x3^2*x4^2*x6^3*x7 + -x3^2*x4^2*x6^3*x8^2*x9^2 + x3^2*x4^2*x6^3*x8^2*x9 + -x3^2*x4^2*x6^3*x8*x9^3 + x3^2*x4^2*x6^3*x8*x9^2 + x3^2*x4^2*x6^3*x9^3 + -x3^2*x4^2*x6^3*x9 + x3^2*x4^2*x6*x7^4*x8*x9 + -x3^2*x4^2*x6*x7^4*x8 + -x3^2*x4^2*x6*x7^4*x9 + x3^2*x4^2*x6*x7^4 + x3^2*x4^2*x6*x7^3*x8^2*x9 + -x3^2*x4^2*x6*x7^3*x8^2 + -x3^2*x4^2*x6*x7^3*x8*x9 + x3^2*x4^2*x6*x7^3*x8 + -x3^2*x4^2*x6*x7^2*x8^2*x9 + x3^2*x4^2*x6*x7^2*x8^2 + -x3^2*x4^2*x6*x7^2*x8*x9 + x3^2*x4^2*x6*x7^2*x8 + 2*x3^2*x4^2*x6*x7^2*x9 + -2*x3^2*x4^2*x6*x7^2 + -x3^2*x4^2*x6*x7*x8^2*x9^2 + x3^2*x4^2*x6*x7*x8^2*x9 + -x3^2*x4^2*x6*x7*x8*x9^3 + x3^2*x4^2*x6*x7*x8*x9^2 + x3^2*x4^2*x6*x7*x8*x9 + -x3^2*x4^2*x6*x7*x8 + x3^2*x4^2*x6*x7*x9^3 + -2*x3^2*x4^2*x6*x7*x9 + x3^2*x4^2*x6*x7 + x3^2*x4^2*x6*x8^2*x9^2 + -x3^2*x4^2*x6*x8^2*x9 + x3^2*x4^2*x6*x8*x9^3 + -x3^2*x4^2*x6*x8*x9^2 + -x3^2*x4^2*x6*x9^3 + x3^2*x4^2*x6*x9 + -x3^2*x4^2*x7^4*x8*x9 + x3^2*x4^2*x7^4*x8 + x3^2*x4^2*x7^4*x9 + -x3^2*x4^2*x7^4 + -x3^2*x4^2*x7^3*x8^2*x9 + x3^2*x4^2*x7^3*x8^2 + x3^2*x4^2*x7^3*x8*x9 + -x3^2*x4^2*x7^3*x8 + x3^2*x4^2*x7^2*x8*x9 + -x3^2*x4^2*x7^2*x8 + -x3^2*x4^2*x7^2*x9 + x3^2*x4^2*x7^2 + x3^2*x4^2*x7*x8^2*x9 + -x3^2*x4^2*x7*x8^2 + -x3^2*x4^2*x7*x8*x9 + x3^2*x4^2*x7*x8 + x3^2*x4*x5^5*x6^2*x7*x8*x9 + -x3^2*x4*x5^5*x6^2*x7*x8 + -x3^2*x4*x5^5*x6^2*x7*x9 + x3^2*x4*x5^5*x6^2*x7 + -x3^2*x4*x5^5*x6^2*x8*x9 + x3^2*x4*x5^5*x6^2*x8 + x3^2*x4*x5^5*x6^2*x9 + -x3^2*x4*x5^5*x6^2 + x3^2*x4*x5^5*x6*x7^2*x8*x9 + -x3^2*x4*x5^5*x6*x7^2*x8 + -x3^2*x4*x5^5*x6*x7^2*x9 + x3^2*x4*x5^5*x6*x7^2 + -2*x3^2*x4*x5^5*x6*x7*x8*x9 + 2*x3^2*x4*x5^5*x6*x7*x8 + 2*x3^2*x4*x5^5*x6*x7*x9 + -2*x3^2*x4*x5^5*x6*x7 + x3^2*x4*x5^5*x6*x8*x9 + -x3^2*x4*x5^5*x6*x8 + -x3^2*x4*x5^5*x6*x9 + x3^2*x4*x5^5*x6 + -x3^2*x4*x5^5*x7^2*x8*x9 + x3^2*x4*x5^5*x7^2*x8 + x3^2*x4*x5^5*x7^2*x9 + -x3^2*x4*x5^5*x7^2 + x3^2*x4*x5^5*x7*x8*x9 + -x3^2*x4*x5^5*x7*x8 + -x3^2*x4*x5^5*x7*x9 + x3^2*x4*x5^5*x7 + x3^2*x4*x5^3*x6^2*x7*x8^2*x9 + -x3^2*x4*x5^3*x6^2*x7*x8^2 + -x3^2*x4*x5^3*x6^2*x7*x8*x9 + x3^2*x4*x5^3*x6^2*x7*x8 + -x3^2*x4*x5^3*x6^2*x8^2*x9 + x3^2*x4*x5^3*x6^2*x8^2 + x3^2*x4*x5^3*x6^2*x8*x9 + -x3^2*x4*x5^3*x6^2*x8 + x3^2*x4*x5^3*x6*x7^2*x8^2*x9 + -x3^2*x4*x5^3*x6*x7^2*x8^2 + -x3^2*x4*x5^3*x6*x7^2*x8*x9 + x3^2*x4*x5^3*x6*x7^2*x8 + -2*x3^2*x4*x5^3*x6*x7*x8^2*x9 + 2*x3^2*x4*x5^3*x6*x7*x8^2 + 2*x3^2*x4*x5^3*x6*x7*x8*x9 + -2*x3^2*x4*x5^3*x6*x7*x8 + x3^2*x4*x5^3*x6*x8^2*x9 + -x3^2*x4*x5^3*x6*x8^2 + -x3^2*x4*x5^3*x6*x8*x9 + x3^2*x4*x5^3*x6*x8 + -x3^2*x4*x5^3*x7^2*x8^2*x9 + x3^2*x4*x5^3*x7^2*x8^2 + x3^2*x4*x5^3*x7^2*x8*x9 + -x3^2*x4*x5^3*x7^2*x8 + x3^2*x4*x5^3*x7*x8^2*x9 + -x3^2*x4*x5^3*x7*x8^2 + -x3^2*x4*x5^3*x7*x8*x9 + x3^2*x4*x5^3*x7*x8 + x3^2*x4*x5^2*x6^3*x7^2*x8*x9 + -x3^2*x4*x5^2*x6^3*x7^2*x8 + -x3^2*x4*x5^2*x6^3*x7^2*x9 + x3^2*x4*x5^2*x6^3*x7^2 + -x3^2*x4*x5^2*x6^3*x8*x9 + x3^2*x4*x5^2*x6^3*x8 + x3^2*x4*x5^2*x6^3*x9 + -x3^2*x4*x5^2*x6^3 + x3^2*x4*x5^2*x6^2*x7^2*x8^2*x9 + -x3^2*x4*x5^2*x6^2*x7^2*x8^2 + -x3^2*x4*x5^2*x6^2*x7^2*x8*x9 + x3^2*x4*x5^2*x6^2*x7^2*x8 + -x3^2*x4*x5^2*x6^2*x7*x8^2*x9 + x3^2*x4*x5^2*x6^2*x7*x8^2 + x3^2*x4*x5^2*x6^2*x7*x9 + -x3^2*x4*x5^2*x6^2*x7 + x3^2*x4*x5^2*x6^2*x8*x9 + -x3^2*x4*x5^2*x6^2*x8 + -x3^2*x4*x5^2*x6^2*x9 + x3^2*x4*x5^2*x6^2 + x3^2*x4*x5^2*x6*x7^3*x8^2*x9 + -x3^2*x4*x5^2*x6*x7^3*x8^2 + -x3^2*x4*x5^2*x6*x7^3*x9 + x3^2*x4*x5^2*x6*x7^3 + -2*x3^2*x4*x5^2*x6*x7^2*x8^2*x9 + 2*x3^2*x4*x5^2*x6*x7^2*x8^2 + -x3^2*x4*x5^2*x6*x7^2*x8*x9 + x3^2*x4*x5^2*x6*x7^2*x8 + 3*x3^2*x4*x5^2*x6*x7^2*x9 + -3*x3^2*x4*x5^2*x6*x7^2 + x3^2*x4*x5^2*x6*x7*x8^2*x9 + -x3^2*x4*x5^2*x6*x7*x8^2 + x3^2*x4*x5^2*x6*x7*x8*x9 + -x3^2*x4*x5^2*x6*x7*x8 + -2*x3^2*x4*x5^2*x6*x7*x9 + 2*x3^2*x4*x5^2*x6*x7 + -x3^2*x4*x5^2*x7^3*x8^2*x9 + x3^2*x4*x5^2*x7^3*x8^2 + x3^2*x4*x5^2*x7^3*x9 + -x3^2*x4*x5^2*x7^3 + x3^2*x4*x5^2*x7^2*x8^2*x9 + -x3^2*x4*x5^2*x7^2*x8^2 + x3^2*x4*x5^2*x7^2*x8*x9 + -x3^2*x4*x5^2*x7^2*x8 + -2*x3^2*x4*x5^2*x7^2*x9 + 2*x3^2*x4*x5^2*x7^2 + -x3^2*x4*x5^2*x7*x8*x9 + x3^2*x4*x5^2*x7*x8 + x3^2*x4*x5^2*x7*x9 + -x3^2*x4*x5^2*x7 + x3^2*x4*x5*x6^3*x7^2*x8^2*x9 + -x3^2*x4*x5*x6^3*x7^2*x8^2 + -x3^2*x4*x5*x6^3*x7^2*x8*x9 + x3^2*x4*x5*x6^3*x7^2*x8 + x3^2*x4*x5*x6^3*x7*x8^2*x9^2 + -x3^2*x4*x5*x6^3*x7*x8^2*x9 + x3^2*x4*x5*x6^3*x7*x8*x9^3 + -x3^2*x4*x5*x6^3*x7*x8*x9^2 + -x3^2*x4*x5*x6^3*x7*x9^3 + x3^2*x4*x5*x6^3*x7*x9 + -x3^2*x4*x5*x6^3*x8^2*x9^2 + x3^2*x4*x5*x6^3*x8^2 + -x3^2*x4*x5*x6^3*x8*x9^3 + x3^2*x4*x5*x6^3*x8*x9^2 + x3^2*x4*x5*x6^3*x8*x9 + -x3^2*x4*x5*x6^3*x8 + x3^2*x4*x5*x6^3*x9^3 + -x3^2*x4*x5*x6^3*x9 + -x3^2*x4*x5*x6^2*x7^2*x8^2*x9 + x3^2*x4*x5*x6^2*x7^2*x8^2 + x3^2*x4*x5*x6^2*x7^2*x8*x9 + -x3^2*x4*x5*x6^2*x7^2*x8 + x3^2*x4*x5*x6^2*x8^2*x9 + -x3^2*x4*x5*x6^2*x8^2 + -x3^2*x4*x5*x6^2*x8*x9 + x3^2*x4*x5*x6^2*x8 + x3^2*x4*x5*x6*x7^4*x8*x9 + -x3^2*x4*x5*x6*x7^4*x8 + -x3^2*x4*x5*x6*x7^4*x9 + x3^2*x4*x5*x6*x7^4 + -x3^2*x4*x5*x6*x7^3*x8*x9 + x3^2*x4*x5*x6*x7^3*x8 + x3^2*x4*x5*x6*x7^3*x9 + -x3^2*x4*x5*x6*x7^3 + -x3^2*x4*x5*x6*x7*x8^2*x9^2 + x3^2*x4*x5*x6*x7*x8^2*x9 + -x3^2*x4*x5*x6*x7*x8*x9^3 + x3^2*x4*x5*x6*x7*x8*x9^2 + x3^2*x4*x5*x6*x7*x9^3 + -x3^2*x4*x5*x6*x7*x9 + x3^2*x4*x5*x6*x8^2*x9^2 + -x3^2*x4*x5*x6*x8^2*x9 + x3^2*x4*x5*x6*x8*x9^3 + -x3^2*x4*x5*x6*x8*x9^2 + -x3^2*x4*x5*x6*x9^3 + x3^2*x4*x5*x6*x9 + -x3^2*x4*x5*x7^4*x8*x9 + x3^2*x4*x5*x7^4*x8 + x3^2*x4*x5*x7^4*x9 + -x3^2*x4*x5*x7^4 + x3^2*x4*x5*x7^3*x8*x9 + -x3^2*x4*x5*x7^3*x8 + -x3^2*x4*x5*x7^3*x9 + x3^2*x4*x5*x7^3 + -x3^2*x4*x6^3*x7^2*x8^2*x9 + x3^2*x4*x6^3*x7^2*x8^2 + x3^2*x4*x6^3*x7^2*x9 + -x3^2*x4*x6^3*x7^2 + -x3^2*x4*x6^3*x7*x8^2*x9^2 + x3^2*x4*x6^3*x7*x8^2*x9 + -x3^2*x4*x6^3*x7*x8*x9^3 + x3^2*x4*x6^3*x7*x8*x9^2 + x3^2*x4*x6^3*x7*x9^3 + -x3^2*x4*x6^3*x7*x9 + x3^2*x4*x6^3*x8^2*x9^2 + -x3^2*x4*x6^3*x8^2 + x3^2*x4*x6^3*x8*x9^3 + -x3^2*x4*x6^3*x8*x9^2 + -x3^2*x4*x6^3*x9^3 + x3^2*x4*x6^3 + -x3^2*x4*x6*x7^4*x8*x9 + x3^2*x4*x6*x7^4*x8 + x3^2*x4*x6*x7^4*x9 + -x3^2*x4*x6*x7^4 + -x3^2*x4*x6*x7^3*x8^2*x9 + x3^2*x4*x6*x7^3*x8^2 + x3^2*x4*x6*x7^3*x8*x9 + -x3^2*x4*x6*x7^3*x8 + x3^2*x4*x6*x7^2*x8^2*x9 + -x3^2*x4*x6*x7^2*x8^2 + x3^2*x4*x6*x7^2*x8*x9 + -x3^2*x4*x6*x7^2*x8 + -2*x3^2*x4*x6*x7^2*x9 + 2*x3^2*x4*x6*x7^2 + x3^2*x4*x6*x7*x8^2*x9^2 + -x3^2*x4*x6*x7*x8^2 + x3^2*x4*x6*x7*x8*x9^3 + -x3^2*x4*x6*x7*x8*x9^2 + -x3^2*x4*x6*x7*x8*x9 + x3^2*x4*x6*x7*x8 + -x3^2*x4*x6*x7*x9^3 + x3^2*x4*x6*x7*x9 + -x3^2*x4*x6*x8^2*x9^2 + x3^2*x4*x6*x8^2 + -x3^2*x4*x6*x8*x9^3 + x3^2*x4*x6*x8*x9^2 + x3^2*x4*x6*x9^3 + -x3^2*x4*x6 + x3^2*x4*x7^4*x8*x9 + -x3^2*x4*x7^4*x8 + -x3^2*x4*x7^4*x9 + x3^2*x4*x7^4 + x3^2*x4*x7^3*x8^2*x9 + -x3^2*x4*x7^3*x8^2 + -x3^2*x4*x7^3*x8*x9 + x3^2*x4*x7^3*x8 + -x3^2*x4*x7^2*x8*x9 + x3^2*x4*x7^2*x8 + x3^2*x4*x7^2*x9 + -x3^2*x4*x7^2 + -x3^2*x4*x7*x8^2*x9 + x3^2*x4*x7*x8^2 + x3^2*x4*x7*x8*x9 + -x3^2*x4*x7*x8 + -x3*x4^8*x5*x6^2*x7*x8*x9 + x3*x4^8*x5*x6^2*x7*x8 + x3*x4^8*x5*x6^2*x7*x9 + -x3*x4^8*x5*x6^2*x7 + x3*x4^8*x5*x6^2*x8*x9 + -x3*x4^8*x5*x6^2*x8 + -x3*x4^8*x5*x6^2*x9 + x3*x4^8*x5*x6^2 + -x3*x4^8*x5*x6*x7*x8*x9^2 + x3*x4^8*x5*x6*x7*x8*x9 + x3*x4^8*x5*x6*x7*x9^2 + -x3*x4^8*x5*x6*x7*x9 + x3*x4^8*x5*x6*x8*x9^2 + -x3*x4^8*x5*x6*x8*x9 + -x3*x4^8*x5*x6*x9^2 + x3*x4^8*x5*x6*x9 + x3*x4^8*x5*x7*x8*x9^2 + -x3*x4^8*x5*x7*x8 + -x3*x4^8*x5*x7*x9^2 + x3*x4^8*x5*x7 + -x3*x4^8*x5*x8*x9^2 + x3*x4^8*x5*x8 + x3*x4^8*x5*x9^2 + -x3*x4^8*x5 + x3*x4^8*x6^2*x7*x8*x9 + -x3*x4^8*x6^2*x7*x8 + -x3*x4^8*x6^2*x7*x9 + x3*x4^8*x6^2*x7 + -x3*x4^8*x6^2*x8*x9 + x3*x4^8*x6^2*x8 + x3*x4^8*x6^2*x9 + -x3*x4^8*x6^2 + x3*x4^8*x6*x7*x8*x9^2 + -x3*x4^8*x6*x7*x8*x9 + -x3*x4^8*x6*x7*x9^2 + x3*x4^8*x6*x7*x9 + -x3*x4^8*x6*x8*x9^2 + x3*x4^8*x6*x8*x9 + x3*x4^8*x6*x9^2 + -x3*x4^8*x6*x9 + -x3*x4^8*x7*x8*x9^2 + x3*x4^8*x7*x8 + x3*x4^8*x7*x9^2 + -x3*x4^8*x7 + x3*x4^8*x8*x9^2 + -x3*x4^8*x8 + -x3*x4^8*x9^2 + x3*x4^8 + x3*x4^7*x5*x6^2*x7*x8*x9 + -x3*x4^7*x5*x6^2*x7*x8 + -x3*x4^7*x5*x6^2*x7*x9 + x3*x4^7*x5*x6^2*x7 + -x3*x4^7*x5*x6^2*x8*x9 + x3*x4^7*x5*x6^2*x8 + x3*x4^7*x5*x6^2*x9 + -x3*x4^7*x5*x6^2 + -x3*x4^7*x5*x6*x7*x8^2*x9^2 + x3*x4^7*x5*x6*x7*x8^2*x9 + x3*x4^7*x5*x6*x7*x8*x9^2 + -x3*x4^7*x5*x6*x7*x8*x9 + x3*x4^7*x5*x6*x8^2*x9^2 + -x3*x4^7*x5*x6*x8^2*x9 + -x3*x4^7*x5*x6*x8*x9^2 + x3*x4^7*x5*x6*x8*x9 + x3*x4^7*x5*x7*x8^2*x9^2 + -x3*x4^7*x5*x7*x8^2*x9 + -x3*x4^7*x5*x7*x8*x9^2 + x3*x4^7*x5*x7*x8 + x3*x4^7*x5*x7*x9 + -x3*x4^7*x5*x7 + -x3*x4^7*x5*x8^2*x9^2 + x3*x4^7*x5*x8^2*x9 + x3*x4^7*x5*x8*x9^2 + -x3*x4^7*x5*x8 + -x3*x4^7*x5*x9 + x3*x4^7*x5 + -x3*x4^7*x6^2*x7*x8*x9 + x3*x4^7*x6^2*x7*x8 + x3*x4^7*x6^2*x7*x9 + -x3*x4^7*x6^2*x7 + x3*x4^7*x6^2*x8*x9 + -x3*x4^7*x6^2*x8 + -x3*x4^7*x6^2*x9 + x3*x4^7*x6^2 + x3*x4^7*x6*x7*x8^2*x9^2 + -x3*x4^7*x6*x7*x8^2*x9 + -x3*x4^7*x6*x7*x8*x9^2 + x3*x4^7*x6*x7*x8*x9 + -x3*x4^7*x6*x8^2*x9^2 + x3*x4^7*x6*x8^2*x9 + x3*x4^7*x6*x8*x9^2 + -x3*x4^7*x6*x8*x9 + -x3*x4^7*x7*x8^2*x9^2 + x3*x4^7*x7*x8^2*x9 + x3*x4^7*x7*x8*x9^2 + -x3*x4^7*x7*x8 + -x3*x4^7*x7*x9 + x3*x4^7*x7 + x3*x4^7*x8^2*x9^2 + -x3*x4^7*x8^2*x9 + -x3*x4^7*x8*x9^2 + x3*x4^7*x8 + x3*x4^7*x9 + -x3*x4^7 + -x3*x4^6*x5*x6^2*x7*x8^2*x9^2 + x3*x4^6*x5*x6^2*x7*x8^2*x9 + x3*x4^6*x5*x6^2*x7*x9^2 + -x3*x4^6*x5*x6^2*x7*x9 + x3*x4^6*x5*x6^2*x8^2*x9^2 + -x3*x4^6*x5*x6^2*x8^2*x9 + -x3*x4^6*x5*x6^2*x9^2 + x3*x4^6*x5*x6^2*x9 + x3*x4^6*x5*x6*x7*x8^2*x9^2 + -x3*x4^6*x5*x6*x7*x8^2*x9 + -x3*x4^6*x5*x6*x7*x9^2 + x3*x4^6*x5*x6*x7*x9 + -x3*x4^6*x5*x6*x8^2*x9^2 + x3*x4^6*x5*x6*x8^2*x9 + x3*x4^6*x5*x6*x9^2 + -x3*x4^6*x5*x6*x9 + x3*x4^6*x6^2*x7*x8^2*x9^2 + -x3*x4^6*x6^2*x7*x8^2*x9 + -x3*x4^6*x6^2*x7*x9^2 + x3*x4^6*x6^2*x7*x9 + -x3*x4^6*x6^2*x8^2*x9^2 + x3*x4^6*x6^2*x8^2*x9 + x3*x4^6*x6^2*x9^2 + -x3*x4^6*x6^2*x9 + -x3*x4^6*x6*x7*x8^2*x9^2 + x3*x4^6*x6*x7*x8^2*x9 + x3*x4^6*x6*x7*x9^2 + -x3*x4^6*x6*x7*x9 + x3*x4^6*x6*x8^2*x9^2 + -x3*x4^6*x6*x8^2*x9 + -x3*x4^6*x6*x9^2 + x3*x4^6*x6*x9 + -x3*x4^5*x5*x6^6*x7*x8*x9 + x3*x4^5*x5*x6^6*x7*x8 + x3*x4^5*x5*x6^6*x7*x9 + -x3*x4^5*x5*x6^6*x7 + x3*x4^5*x5*x6^6*x8*x9 + -x3*x4^5*x5*x6^6*x8 + -x3*x4^5*x5*x6^6*x9 + x3*x4^5*x5*x6^6 + -x3*x4^5*x5*x6^5*x7*x8^2*x9 + x3*x4^5*x5*x6^5*x7*x8^2 + x3*x4^5*x5*x6^5*x7*x8*x9 + -x3*x4^5*x5*x6^5*x7*x8 + x3*x4^5*x5*x6^5*x8^2*x9 + -x3*x4^5*x5*x6^5*x8^2 + -x3*x4^5*x5*x6^5*x8*x9 + x3*x4^5*x5*x6^5*x8 + x3*x4^5*x5*x6^2*x7*x8^2*x9 + -x3*x4^5*x5*x6^2*x7*x8^2 + -x3*x4^5*x5*x6^2*x7*x9 + x3*x4^5*x5*x6^2*x7 + -x3*x4^5*x5*x6^2*x8^2*x9 + x3*x4^5*x5*x6^2*x8^2 + x3*x4^5*x5*x6^2*x9 + -x3*x4^5*x5*x6^2 + x3*x4^5*x6^6*x7*x8*x9 + -x3*x4^5*x6^6*x7*x8 + -x3*x4^5*x6^6*x7*x9 + x3*x4^5*x6^6*x7 + -x3*x4^5*x6^6*x8*x9 + x3*x4^5*x6^6*x8 + x3*x4^5*x6^6*x9 + -x3*x4^5*x6^6 + x3*x4^5*x6^5*x7*x8^2*x9 + -x3*x4^5*x6^5*x7*x8^2 + -x3*x4^5*x6^5*x7*x8*x9 + x3*x4^5*x6^5*x7*x8 + -x3*x4^5*x6^5*x8^2*x9 + x3*x4^5*x6^5*x8^2 + x3*x4^5*x6^5*x8*x9 + -x3*x4^5*x6^5*x8 + -x3*x4^5*x6^2*x7*x8^2*x9 + x3*x4^5*x6^2*x7*x8^2 + x3*x4^5*x6^2*x7*x9 + -x3*x4^5*x6^2*x7 + x3*x4^5*x6^2*x8^2*x9 + -x3*x4^5*x6^2*x8^2 + -x3*x4^5*x6^2*x9 + x3*x4^5*x6^2 + -x3*x4^4*x5*x6^6*x7*x8^2*x9 + x3*x4^4*x5*x6^6*x7*x8^2 + x3*x4^4*x5*x6^6*x7*x8*x9 + -x3*x4^4*x5*x6^6*x7*x8 + x3*x4^4*x5*x6^6*x8^2*x9 + -x3*x4^4*x5*x6^6*x8^2 + -x3*x4^4*x5*x6^6*x8*x9 + x3*x4^4*x5*x6^6*x8 + x3*x4^4*x5*x6^5*x7*x8^2*x9 + -x3*x4^4*x5*x6^5*x7*x8^2 + -x3*x4^4*x5*x6^5*x7*x8*x9 + x3*x4^4*x5*x6^5*x7*x8 + -x3*x4^4*x5*x6^5*x8^2*x9 + x3*x4^4*x5*x6^5*x8^2 + x3*x4^4*x5*x6^5*x8*x9 + -x3*x4^4*x5*x6^5*x8 + -x3*x4^4*x5*x6^3*x7*x8^2*x9^2 + x3*x4^4*x5*x6^3*x7*x8^2*x9 + x3*x4^4*x5*x6^3*x7*x9^2 + -x3*x4^4*x5*x6^3*x7*x9 + x3*x4^4*x5*x6^3*x8^2*x9^2 + -x3*x4^4*x5*x6^3*x8^2*x9 + -x3*x4^4*x5*x6^3*x9^2 + x3*x4^4*x5*x6^3*x9 + x3*x4^4*x5*x6^2*x7*x8^2*x9^2 + -x3*x4^4*x5*x6^2*x7*x8^2*x9 + -x3*x4^4*x5*x6^2*x7*x9^2 + x3*x4^4*x5*x6^2*x7*x9 + -x3*x4^4*x5*x6^2*x8^2*x9^2 + x3*x4^4*x5*x6^2*x8^2*x9 + x3*x4^4*x5*x6^2*x9^2 + -x3*x4^4*x5*x6^2*x9 + x3*x4^4*x6^6*x7*x8^2*x9 + -x3*x4^4*x6^6*x7*x8^2 + -x3*x4^4*x6^6*x7*x8*x9 + x3*x4^4*x6^6*x7*x8 + -x3*x4^4*x6^6*x8^2*x9 + x3*x4^4*x6^6*x8^2 + x3*x4^4*x6^6*x8*x9 + -x3*x4^4*x6^6*x8 + -x3*x4^4*x6^5*x7*x8^2*x9 + x3*x4^4*x6^5*x7*x8^2 + x3*x4^4*x6^5*x7*x8*x9 + -x3*x4^4*x6^5*x7*x8 + x3*x4^4*x6^5*x8^2*x9 + -x3*x4^4*x6^5*x8^2 + -x3*x4^4*x6^5*x8*x9 + x3*x4^4*x6^5*x8 + x3*x4^4*x6^3*x7*x8^2*x9^2 + -x3*x4^4*x6^3*x7*x8^2*x9 + -x3*x4^4*x6^3*x7*x9^2 + x3*x4^4*x6^3*x7*x9 + -x3*x4^4*x6^3*x8^2*x9^2 + x3*x4^4*x6^3*x8^2*x9 + x3*x4^4*x6^3*x9^2 + -x3*x4^4*x6^3*x9 + -x3*x4^4*x6^2*x7*x8^2*x9^2 + x3*x4^4*x6^2*x7*x8^2*x9 + x3*x4^4*x6^2*x7*x9^2 + -x3*x4^4*x6^2*x7*x9 + x3*x4^4*x6^2*x8^2*x9^2 + -x3*x4^4*x6^2*x8^2*x9 + -x3*x4^4*x6^2*x9^2 + x3*x4^4*x6^2*x9 + -x3*x4^3*x5^3*x6^2*x7*x8^2*x9 + x3*x4^3*x5^3*x6^2*x7*x8^2 + x3*x4^3*x5^3*x6^2*x7*x8*x9 + -x3*x4^3*x5^3*x6^2*x7*x8 + x3*x4^3*x5^3*x6^2*x8^2*x9 + -x3*x4^3*x5^3*x6^2*x8^2 + -x3*x4^3*x5^3*x6^2*x8*x9 + x3*x4^3*x5^3*x6^2*x8 + -x3*x4^3*x5^3*x6*x7^2*x8^2*x9 + x3*x4^3*x5^3*x6*x7^2*x8^2 + x3*x4^3*x5^3*x6*x7^2*x9 + -x3*x4^3*x5^3*x6*x7^2 + x3*x4^3*x5^3*x6*x7*x8^2*x9 + -x3*x4^3*x5^3*x6*x7*x8^2 + -x3*x4^3*x5^3*x6*x7*x9 + x3*x4^3*x5^3*x6*x7 + x3*x4^3*x5^3*x7^2*x8^2*x9 + -x3*x4^3*x5^3*x7^2*x8^2 + -x3*x4^3*x5^3*x7^2*x9 + x3*x4^3*x5^3*x7^2 + -x3*x4^3*x5^3*x7*x8*x9 + x3*x4^3*x5^3*x7*x8 + x3*x4^3*x5^3*x7*x9 + -x3*x4^3*x5^3*x7 + -x3*x4^3*x5^3*x8^2*x9 + x3*x4^3*x5^3*x8^2 + x3*x4^3*x5^3*x8*x9 + -x3*x4^3*x5^3*x8 + -x3*x4^3*x5^2*x6^4*x7*x8^2*x9 + x3*x4^3*x5^2*x6^4*x7*x8^2 + x3*x4^3*x5^2*x6^4*x7*x9 + -x3*x4^3*x5^2*x6^4*x7 + x3*x4^3*x5^2*x6^4*x8^2*x9 + -x3*x4^3*x5^2*x6^4*x8^2 + -x3*x4^3*x5^2*x6^4*x9 + x3*x4^3*x5^2*x6^4 + -x3*x4^3*x5^2*x6^3*x7^2*x8^2*x9 + x3*x4^3*x5^2*x6^3*x7^2*x8^2 + x3*x4^3*x5^2*x6^3*x7^2*x9 + -x3*x4^3*x5^2*x6^3*x7^2 + x3*x4^3*x5^2*x6^3*x7*x8^2*x9 + -x3*x4^3*x5^2*x6^3*x7*x8^2 + x3*x4^3*x5^2*x6^3*x7*x8*x9 + -x3*x4^3*x5^2*x6^3*x7*x8 + -2*x3*x4^3*x5^2*x6^3*x7*x9 + 2*x3*x4^3*x5^2*x6^3*x7 + -x3*x4^3*x5^2*x6^3*x8*x9 + x3*x4^3*x5^2*x6^3*x8 + x3*x4^3*x5^2*x6^3*x9 + -x3*x4^3*x5^2*x6^3 + -x3*x4^3*x5^2*x6^2*x7^3*x8^2*x9 + x3*x4^3*x5^2*x6^2*x7^3*x8^2 + x3*x4^3*x5^2*x6^2*x7^3*x9 + -x3*x4^3*x5^2*x6^2*x7^3 + x3*x4^3*x5^2*x6^2*x7^2*x8^2*x9 + -x3*x4^3*x5^2*x6^2*x7^2*x8^2 + -x3*x4^3*x5^2*x6^2*x7^2*x9 + x3*x4^3*x5^2*x6^2*x7^2 + x3*x4^3*x5^2*x6^2*x7*x8^2*x9 + -x3*x4^3*x5^2*x6^2*x7*x8^2 + -x3*x4^3*x5^2*x6^2*x7*x8*x9 + x3*x4^3*x5^2*x6^2*x7*x8 + -x3*x4^3*x5^2*x6^2*x8^2*x9 + x3*x4^3*x5^2*x6^2*x8^2 + x3*x4^3*x5^2*x6^2*x8*x9 + -x3*x4^3*x5^2*x6^2*x8 + x3*x4^3*x5^2*x6*x7^2*x8^2*x9 + -x3*x4^3*x5^2*x6*x7^2*x8^2 + -x3*x4^3*x5^2*x6*x7^2*x9 + x3*x4^3*x5^2*x6*x7^2 + -x3*x4^3*x5^2*x6*x7*x8^2*x9 + x3*x4^3*x5^2*x6*x7*x8^2 + x3*x4^3*x5^2*x6*x7*x9 + -x3*x4^3*x5^2*x6*x7 + x3*x4^3*x5^2*x7^3*x8^2*x9 + -x3*x4^3*x5^2*x7^3*x8^2 + -x3*x4^3*x5^2*x7^3*x9 + x3*x4^3*x5^2*x7^3 + -x3*x4^3*x5^2*x7^2*x8^2*x9 + x3*x4^3*x5^2*x7^2*x8^2 + x3*x4^3*x5^2*x7^2*x9 + -x3*x4^3*x5^2*x7^2 + -x3*x4^3*x5*x6^5*x7^2*x8^2*x9 + x3*x4^3*x5*x6^5*x7^2*x8^2 + x3*x4^3*x5*x6^5*x7^2*x9 + -x3*x4^3*x5*x6^5*x7^2 + x3*x4^3*x5*x6^5*x7*x8^2*x9 + -x3*x4^3*x5*x6^5*x7*x8^2 + -x3*x4^3*x5*x6^5*x7*x9 + x3*x4^3*x5*x6^5*x7 + -x3*x4^3*x5*x6^4*x7^3*x8^2*x9 + x3*x4^3*x5*x6^4*x7^3*x8^2 + x3*x4^3*x5*x6^4*x7^3*x9 + -x3*x4^3*x5*x6^4*x7^3 + x3*x4^3*x5*x6^4*x7^2*x8^2*x9 + -x3*x4^3*x5*x6^4*x7^2*x8^2 + -x3*x4^3*x5*x6^4*x7^2*x9 + x3*x4^3*x5*x6^4*x7^2 + x3*x4^3*x5*x6^4*x7*x8^2*x9 + -x3*x4^3*x5*x6^4*x7*x8^2 + -x3*x4^3*x5*x6^4*x7*x9 + x3*x4^3*x5*x6^4*x7 + -x3*x4^3*x5*x6^4*x8^2*x9 + x3*x4^3*x5*x6^4*x8^2 + x3*x4^3*x5*x6^4*x9 + -x3*x4^3*x5*x6^4 + -x3*x4^3*x5*x6^3*x7^4*x8*x9 + x3*x4^3*x5*x6^3*x7^4*x8 + x3*x4^3*x5*x6^3*x7^4*x9 + -x3*x4^3*x5*x6^3*x7^4 + x3*x4^3*x5*x6^3*x7^3*x8*x9 + -x3*x4^3*x5*x6^3*x7^3*x8 + -x3*x4^3*x5*x6^3*x7^3*x9 + x3*x4^3*x5*x6^3*x7^3 + x3*x4^3*x5*x6^3*x7^2*x8^2*x9 + -x3*x4^3*x5*x6^3*x7^2*x8^2 + -x3*x4^3*x5*x6^3*x7^2*x9 + x3*x4^3*x5*x6^3*x7^2 + -x3*x4^3*x5*x6^3*x7*x8*x9^3 + x3*x4^3*x5*x6^3*x7*x8*x9^2 + -x3*x4^3*x5*x6^3*x7*x8*x9 + x3*x4^3*x5*x6^3*x7*x8 + x3*x4^3*x5*x6^3*x7*x9^3 + -x3*x4^3*x5*x6^3*x7*x9^2 + x3*x4^3*x5*x6^3*x7*x9 + -x3*x4^3*x5*x6^3*x7 + -x3*x4^3*x5*x6^3*x8^2*x9 + x3*x4^3*x5*x6^3*x8^2 + x3*x4^3*x5*x6^3*x8*x9^3 + -x3*x4^3*x5*x6^3*x8*x9^2 + x3*x4^3*x5*x6^3*x8*x9 + -x3*x4^3*x5*x6^3*x8 + -x3*x4^3*x5*x6^3*x9^3 + x3*x4^3*x5*x6^3*x9^2 + x3*x4^3*x5*x6^2*x7^3*x8^2*x9 + -x3*x4^3*x5*x6^2*x7^3*x8^2 + -x3*x4^3*x5*x6^2*x7^3*x9 + x3*x4^3*x5*x6^2*x7^3 + -x3*x4^3*x5*x6^2*x7^2*x8^2*x9 + x3*x4^3*x5*x6^2*x7^2*x8^2 + x3*x4^3*x5*x6^2*x7^2*x9 + -x3*x4^3*x5*x6^2*x7^2 + -x3*x4^3*x5*x6^2*x7*x8^2*x9 + x3*x4^3*x5*x6^2*x7*x8^2 + x3*x4^3*x5*x6^2*x7*x9 + -x3*x4^3*x5*x6^2*x7 + x3*x4^3*x5*x6^2*x8^2*x9 + -x3*x4^3*x5*x6^2*x8^2 + -x3*x4^3*x5*x6^2*x9 + x3*x4^3*x5*x6^2 + x3*x4^3*x5*x7^4*x8*x9 + -x3*x4^3*x5*x7^4*x8 + -x3*x4^3*x5*x7^4*x9 + x3*x4^3*x5*x7^4 + -x3*x4^3*x5*x7^3*x8*x9 + x3*x4^3*x5*x7^3*x8 + x3*x4^3*x5*x7^3*x9 + -x3*x4^3*x5*x7^3 + -x3*x4^3*x5*x7*x8^2*x9 + x3*x4^3*x5*x7*x8^2 + x3*x4^3*x5*x7*x8*x9^3 + -x3*x4^3*x5*x7*x8*x9^2 + x3*x4^3*x5*x7*x8*x9 + -x3*x4^3*x5*x7*x8 + -x3*x4^3*x5*x7*x9^3 + x3*x4^3*x5*x7*x9^2 + x3*x4^3*x5*x8^2*x9 + -x3*x4^3*x5*x8^2 + -x3*x4^3*x5*x8*x9^3 + x3*x4^3*x5*x8*x9^2 + -x3*x4^3*x5*x8*x9 + x3*x4^3*x5*x8 + x3*x4^3*x5*x9^3 + -x3*x4^3*x5*x9^2 + x3*x4^3*x6^5*x7^2*x8^2*x9 + -x3*x4^3*x6^5*x7^2*x8^2 + -x3*x4^3*x6^5*x7^2*x9 + x3*x4^3*x6^5*x7^2 + -x3*x4^3*x6^5*x7*x8^2*x9 + x3*x4^3*x6^5*x7*x8^2 + x3*x4^3*x6^5*x7*x9 + -x3*x4^3*x6^5*x7 + x3*x4^3*x6^4*x7^3*x8^2*x9 + -x3*x4^3*x6^4*x7^3*x8^2 + -x3*x4^3*x6^4*x7^3*x9 + x3*x4^3*x6^4*x7^3 + -x3*x4^3*x6^4*x7^2*x8^2*x9 + x3*x4^3*x6^4*x7^2*x8^2 + x3*x4^3*x6^4*x7^2*x9 + -x3*x4^3*x6^4*x7^2 + x3*x4^3*x6^3*x7^4*x8*x9 + -x3*x4^3*x6^3*x7^4*x8 + -x3*x4^3*x6^3*x7^4*x9 + x3*x4^3*x6^3*x7^4 + -x3*x4^3*x6^3*x7^3*x8*x9 + x3*x4^3*x6^3*x7^3*x8 + x3*x4^3*x6^3*x7^3*x9 + -x3*x4^3*x6^3*x7^3 + -x3*x4^3*x6^3*x7*x8^2*x9 + x3*x4^3*x6^3*x7*x8^2 + x3*x4^3*x6^3*x7*x8*x9^3 + -x3*x4^3*x6^3*x7*x8*x9^2 + -x3*x4^3*x6^3*x7*x9^3 + x3*x4^3*x6^3*x7*x9^2 + x3*x4^3*x6^3*x7*x9 + -x3*x4^3*x6^3*x7 + x3*x4^3*x6^3*x8^2*x9 + -x3*x4^3*x6^3*x8^2 + -x3*x4^3*x6^3*x8*x9^3 + x3*x4^3*x6^3*x8*x9^2 + x3*x4^3*x6^3*x9^3 + -x3*x4^3*x6^3*x9^2 + -x3*x4^3*x6^3*x9 + x3*x4^3*x6^3 + x3*x4^3*x6^2*x7*x8^2*x9 + -x3*x4^3*x6^2*x7*x8^2 + -x3*x4^3*x6^2*x7*x9 + x3*x4^3*x6^2*x7 + -x3*x4^3*x6^2*x8^2*x9 + x3*x4^3*x6^2*x8^2 + x3*x4^3*x6^2*x9 + -x3*x4^3*x6^2 + -x3*x4^3*x7^4*x8*x9 + x3*x4^3*x7^4*x8 + x3*x4^3*x7^4*x9 + -x3*x4^3*x7^4 + -x3*x4^3*x7^3*x8^2*x9 + x3*x4^3*x7^3*x8^2 + x3*x4^3*x7^3*x8*x9 + -x3*x4^3*x7^3*x8 + x3*x4^3*x7*x8^2*x9 + -x3*x4^3*x7*x8^2 + -x3*x4^3*x7*x8*x9^3 + x3*x4^3*x7*x8*x9^2 + x3*x4^3*x7*x9^3 + -x3*x4^3*x7*x9^2 + -x3*x4^3*x7*x9 + x3*x4^3*x7 + x3*x4^3*x8*x9^3 + -x3*x4^3*x8*x9^2 + -x3*x4^3*x9^3 + x3*x4^3*x9^2 + x3*x4^2*x5^3*x6^2*x7*x8^2*x9 + -x3*x4^2*x5^3*x6^2*x7*x8^2 + -x3*x4^2*x5^3*x6^2*x7*x8*x9 + x3*x4^2*x5^3*x6^2*x7*x8 + -x3*x4^2*x5^3*x6^2*x8^2*x9 + x3*x4^2*x5^3*x6^2*x8^2 + x3*x4^2*x5^3*x6^2*x8*x9 + -x3*x4^2*x5^3*x6^2*x8 + x3*x4^2*x5^3*x6*x7^2*x8^2*x9 + -x3*x4^2*x5^3*x6*x7^2*x8^2 + -x3*x4^2*x5^3*x6*x7^2*x9 + x3*x4^2*x5^3*x6*x7^2 + -x3*x4^2*x5^3*x6*x7*x8^2*x9 + x3*x4^2*x5^3*x6*x7*x8^2 + x3*x4^2*x5^3*x6*x7*x9 + -x3*x4^2*x5^3*x6*x7 + -x3*x4^2*x5^3*x7^2*x8^2*x9 + x3*x4^2*x5^3*x7^2*x8^2 + x3*x4^2*x5^3*x7^2*x9 + -x3*x4^2*x5^3*x7^2 + x3*x4^2*x5^3*x7*x8*x9 + -x3*x4^2*x5^3*x7*x8 + -x3*x4^2*x5^3*x7*x9 + x3*x4^2*x5^3*x7 + x3*x4^2*x5^3*x8^2*x9 + -x3*x4^2*x5^3*x8^2 + -x3*x4^2*x5^3*x8*x9 + x3*x4^2*x5^3*x8 + x3*x4^2*x5^2*x6^3*x7^2*x8*x9 + -x3*x4^2*x5^2*x6^3*x7^2*x8 + -x3*x4^2*x5^2*x6^3*x7^2*x9 + x3*x4^2*x5^2*x6^3*x7^2 + -x3*x4^2*x5^2*x6^3*x7*x8*x9 + x3*x4^2*x5^2*x6^3*x7*x8 + x3*x4^2*x5^2*x6^3*x7*x9 + -x3*x4^2*x5^2*x6^3*x7 + x3*x4^2*x5^2*x6^2*x7^2*x8^2*x9 + -x3*x4^2*x5^2*x6^2*x7^2*x8^2 + -x3*x4^2*x5^2*x6^2*x7^2*x8*x9 + x3*x4^2*x5^2*x6^2*x7^2*x8 + -x3*x4^2*x5^2*x6^2*x7*x8^2*x9 + x3*x4^2*x5^2*x6^2*x7*x8^2 + x3*x4^2*x5^2*x6^2*x7*x8*x9 + -x3*x4^2*x5^2*x6^2*x7*x8 + x3*x4^2*x5^2*x6*x7^3*x8^2*x9 + -x3*x4^2*x5^2*x6*x7^3*x8^2 + -x3*x4^2*x5^2*x6*x7^3*x9 + x3*x4^2*x5^2*x6*x7^3 + -2*x3*x4^2*x5^2*x6*x7^2*x8^2*x9 + 2*x3*x4^2*x5^2*x6*x7^2*x8^2 + 2*x3*x4^2*x5^2*x6*x7^2*x9 + -2*x3*x4^2*x5^2*x6*x7^2 + x3*x4^2*x5^2*x6*x7*x8^2*x9 + -x3*x4^2*x5^2*x6*x7*x8^2 + -x3*x4^2*x5^2*x6*x7*x9 + x3*x4^2*x5^2*x6*x7 + -x3*x4^2*x5^2*x7^3*x8^2*x9 + x3*x4^2*x5^2*x7^3*x8^2 + x3*x4^2*x5^2*x7^3*x9 + -x3*x4^2*x5^2*x7^3 + x3*x4^2*x5^2*x7^2*x8^2*x9 + -x3*x4^2*x5^2*x7^2*x8^2 + -x3*x4^2*x5^2*x7^2*x9 + x3*x4^2*x5^2*x7^2 + x3*x4^2*x5*x6^3*x7^2*x8^2*x9 + -x3*x4^2*x5*x6^3*x7^2*x8^2 + -x3*x4^2*x5*x6^3*x7^2*x8*x9 + x3*x4^2*x5*x6^3*x7^2*x8 + x3*x4^2*x5*x6^3*x7*x8^2*x9^2 + -2*x3*x4^2*x5*x6^3*x7*x8^2*x9 + x3*x4^2*x5*x6^3*x7*x8^2 + x3*x4^2*x5*x6^3*x7*x8*x9^3 + -x3*x4^2*x5*x6^3*x7*x8*x9^2 + x3*x4^2*x5*x6^3*x7*x8*x9 + -x3*x4^2*x5*x6^3*x7*x8 + -x3*x4^2*x5*x6^3*x7*x9^3 + x3*x4^2*x5*x6^3*x7*x9 + -x3*x4^2*x5*x6^3*x8^2*x9^2 + x3*x4^2*x5*x6^3*x8^2*x9 + -x3*x4^2*x5*x6^3*x8*x9^3 + x3*x4^2*x5*x6^3*x8*x9^2 + x3*x4^2*x5*x6^3*x9^3 + -x3*x4^2*x5*x6^3*x9 + -x3*x4^2*x5*x6^2*x7^2*x8^2*x9 + x3*x4^2*x5*x6^2*x7^2*x8^2 + x3*x4^2*x5*x6^2*x7^2*x8*x9 + -x3*x4^2*x5*x6^2*x7^2*x8 + x3*x4^2*x5*x6^2*x8^2*x9 + -x3*x4^2*x5*x6^2*x8^2 + -x3*x4^2*x5*x6^2*x8*x9 + x3*x4^2*x5*x6^2*x8 + x3*x4^2*x5*x6*x7^4*x8*x9 + -x3*x4^2*x5*x6*x7^4*x8 + -x3*x4^2*x5*x6*x7^4*x9 + x3*x4^2*x5*x6*x7^4 + -x3*x4^2*x5*x6*x7^3*x8*x9 + x3*x4^2*x5*x6*x7^3*x8 + x3*x4^2*x5*x6*x7^3*x9 + -x3*x4^2*x5*x6*x7^3 + -x3*x4^2*x5*x7^4*x8*x9 + x3*x4^2*x5*x7^4*x8 + x3*x4^2*x5*x7^4*x9 + -x3*x4^2*x5*x7^4 + x3*x4^2*x5*x7^3*x8*x9 + -x3*x4^2*x5*x7^3*x8 + -x3*x4^2*x5*x7^3*x9 + x3*x4^2*x5*x7^3 + -x3*x4^2*x5*x7*x8^2*x9^2 + 2*x3*x4^2*x5*x7*x8^2*x9 + -x3*x4^2*x5*x7*x8^2 + -x3*x4^2*x5*x7*x8*x9^3 + x3*x4^2*x5*x7*x8*x9^2 + -x3*x4^2*x5*x7*x8*x9 + x3*x4^2*x5*x7*x8 + x3*x4^2*x5*x7*x9^3 + -x3*x4^2*x5*x7*x9 + x3*x4^2*x5*x8^2*x9^2 + -2*x3*x4^2*x5*x8^2*x9 + x3*x4^2*x5*x8^2 + x3*x4^2*x5*x8*x9^3 + -x3*x4^2*x5*x8*x9^2 + x3*x4^2*x5*x8*x9 + -x3*x4^2*x5*x8 + -x3*x4^2*x5*x9^3 + x3*x4^2*x5*x9 + -x3*x4^2*x6^3*x7^2*x8^2*x9 + x3*x4^2*x6^3*x7^2*x8^2 + x3*x4^2*x6^3*x7^2*x9 + -x3*x4^2*x6^3*x7^2 + -x3*x4^2*x6^3*x7*x8^2*x9^2 + 2*x3*x4^2*x6^3*x7*x8^2*x9 + -x3*x4^2*x6^3*x7*x8^2 + -x3*x4^2*x6^3*x7*x8*x9^3 + x3*x4^2*x6^3*x7*x8*x9^2 + x3*x4^2*x6^3*x7*x9^3 + -2*x3*x4^2*x6^3*x7*x9 + x3*x4^2*x6^3*x7 + x3*x4^2*x6^3*x8^2*x9^2 + -x3*x4^2*x6^3*x8^2*x9 + x3*x4^2*x6^3*x8*x9^3 + -x3*x4^2*x6^3*x8*x9^2 + -x3*x4^2*x6^3*x9^3 + x3*x4^2*x6^3*x9 + -x3*x4^2*x6*x7^4*x8*x9 + x3*x4^2*x6*x7^4*x8 + x3*x4^2*x6*x7^4*x9 + -x3*x4^2*x6*x7^4 + -x3*x4^2*x6*x7^3*x8^2*x9 + x3*x4^2*x6*x7^3*x8^2 + x3*x4^2*x6*x7^3*x8*x9 + -x3*x4^2*x6*x7^3*x8 + x3*x4^2*x6*x7^2*x8^2*x9 + -x3*x4^2*x6*x7^2*x8^2 + -x3*x4^2*x6*x7^2*x9 + x3*x4^2*x6*x7^2 + x3*x4^2*x7^4*x8*x9 + -x3*x4^2*x7^4*x8 + -x3*x4^2*x7^4*x9 + x3*x4^2*x7^4 + x3*x4^2*x7^3*x8^2*x9 + -x3*x4^2*x7^3*x8^2 + -x3*x4^2*x7^3*x8*x9 + x3*x4^2*x7^3*x8 + x3*x4^2*x7*x8^2*x9^2 + -2*x3*x4^2*x7*x8^2*x9 + x3*x4^2*x7*x8^2 + x3*x4^2*x7*x8*x9^3 + -x3*x4^2*x7*x8*x9^2 + -x3*x4^2*x7*x9^3 + 2*x3*x4^2*x7*x9 + -x3*x4^2*x7 + -x3*x4^2*x8^2*x9^2 + x3*x4^2*x8^2*x9 + -x3*x4^2*x8*x9^3 + x3*x4^2*x8*x9^2 + x3*x4^2*x9^3 + -x3*x4^2*x9 + -x3*x4*x5^4*x6^2*x7^3*x8*x9 + x3*x4*x5^4*x6^2*x7^3*x8 + x3*x4*x5^4*x6^2*x7^3*x9 + -x3*x4*x5^4*x6^2*x7^3 + x3*x4*x5^4*x6^2*x7^2*x8*x9 + -x3*x4*x5^4*x6^2*x7^2*x8 + -x3*x4*x5^4*x6^2*x7^2*x9 + x3*x4*x5^4*x6^2*x7^2 + x3*x4*x5^4*x6*x7^3*x8*x9 + -x3*x4*x5^4*x6*x7^3*x8 + -x3*x4*x5^4*x6*x7^3*x9 + x3*x4*x5^4*x6*x7^3 + -x3*x4*x5^4*x6*x7^2*x8^2*x9^2 + x3*x4*x5^4*x6*x7^2*x8^2*x9 + x3*x4*x5^4*x6*x7^2*x8*x9^2 + -2*x3*x4*x5^4*x6*x7^2*x8*x9 + x3*x4*x5^4*x6*x7^2*x8 + x3*x4*x5^4*x6*x7^2*x9 + -x3*x4*x5^4*x6*x7^2 + x3*x4*x5^4*x6*x7*x8^2*x9^2 + -x3*x4*x5^4*x6*x7*x8^2*x9 + -x3*x4*x5^4*x6*x7*x8*x9^2 + x3*x4*x5^4*x6*x7*x8*x9 + x3*x4*x5^4*x7^2*x8^2*x9^2 + -x3*x4*x5^4*x7^2*x8^2*x9 + -x3*x4*x5^4*x7^2*x8*x9^2 + x3*x4*x5^4*x7^2*x8*x9 + -x3*x4*x5^4*x7*x8^2*x9^2 + x3*x4*x5^4*x7*x8^2*x9 + x3*x4*x5^4*x7*x8*x9^2 + -x3*x4*x5^4*x7*x8*x9 + -x3*x4*x5^3*x6^2*x7^2*x8^2*x9^2 + x3*x4*x5^3*x6^2*x7^2*x8^2 + x3*x4*x5^3*x6^2*x7^2*x8*x9^2 + -x3*x4*x5^3*x6^2*x7^2*x8 + x3*x4*x5^3*x6^2*x7*x8^2*x9^2 + -x3*x4*x5^3*x6^2*x7*x8^2 + -x3*x4*x5^3*x6^2*x7*x8*x9^2 + x3*x4*x5^3*x6^2*x7*x8 + x3*x4*x5^3*x6*x7^2*x8^2*x9^2 + -x3*x4*x5^3*x6*x7^2*x8^2 + -x3*x4*x5^3*x6*x7^2*x8*x9^2 + x3*x4*x5^3*x6*x7^2*x8 + -x3*x4*x5^3*x6*x7*x8^2*x9^2 + x3*x4*x5^3*x6*x7*x8^2 + x3*x4*x5^3*x6*x7*x8*x9^2 + -x3*x4*x5^3*x6*x7*x8 + -x3*x4*x5^2*x6^4*x7*x8*x9^2 + x3*x4*x5^2*x6^4*x7*x8*x9 + x3*x4*x5^2*x6^4*x7*x9^2 + -x3*x4*x5^2*x6^4*x7*x9 + x3*x4*x5^2*x6^4*x8*x9^2 + -x3*x4*x5^2*x6^4*x8*x9 + -x3*x4*x5^2*x6^4*x9^2 + x3*x4*x5^2*x6^4*x9 + -x3*x4*x5^2*x6^3*x7^3*x8^2*x9 + x3*x4*x5^2*x6^3*x7^3*x8^2 + -x3*x4*x5^2*x6^3*x7^3*x8*x9^2 + x3*x4*x5^2*x6^3*x7^3*x8*x9 + x3*x4*x5^2*x6^3*x7^3*x9^2 + -x3*x4*x5^2*x6^3*x7^3 + x3*x4*x5^2*x6^3*x7^2*x8^2*x9 + -x3*x4*x5^2*x6^3*x7^2*x8^2 + x3*x4*x5^2*x6^3*x7^2*x8*x9^2 + -x3*x4*x5^2*x6^3*x7^2*x8*x9 + -x3*x4*x5^2*x6^3*x7^2*x9^2 + x3*x4*x5^2*x6^3*x7^2 + -x3*x4*x5^2*x6^3*x7*x8^2*x9^2 + x3*x4*x5^2*x6^3*x7*x8^2*x9 + 2*x3*x4*x5^2*x6^3*x7*x8*x9^2 + -2*x3*x4*x5^2*x6^3*x7*x8*x9 + -x3*x4*x5^2*x6^3*x7*x9^2 + x3*x4*x5^2*x6^3*x7*x9 + x3*x4*x5^2*x6^3*x8^2*x9^2 + -x3*x4*x5^2*x6^3*x8^2*x9 + -2*x3*x4*x5^2*x6^3*x8*x9^2 + 2*x3*x4*x5^2*x6^3*x8*x9 + x3*x4*x5^2*x6^3*x9^2 + -x3*x4*x5^2*x6^3*x9 + x3*x4*x5^2*x6^2*x7^3*x8^2*x9 + -x3*x4*x5^2*x6^2*x7^3*x8^2 + x3*x4*x5^2*x6^2*x7^3*x8*x9 + -x3*x4*x5^2*x6^2*x7^3*x8 + -2*x3*x4*x5^2*x6^2*x7^3*x9 + 2*x3*x4*x5^2*x6^2*x7^3 + -2*x3*x4*x5^2*x6^2*x7^2*x8*x9 + 2*x3*x4*x5^2*x6^2*x7^2*x8 + 2*x3*x4*x5^2*x6^2*x7^2*x9 + -2*x3*x4*x5^2*x6^2*x7^2 + x3*x4*x5^2*x6^2*x7*x8^2*x9^2 + -2*x3*x4*x5^2*x6^2*x7*x8^2*x9 + x3*x4*x5^2*x6^2*x7*x8^2 + -x3*x4*x5^2*x6^2*x7*x8*x9^2 + 2*x3*x4*x5^2*x6^2*x7*x8*x9 + -x3*x4*x5^2*x6^2*x7*x8 + -x3*x4*x5^2*x6^2*x8^2*x9^2 + x3*x4*x5^2*x6^2*x8^2*x9 + x3*x4*x5^2*x6^2*x8*x9^2 + -x3*x4*x5^2*x6^2*x8*x9 + x3*x4*x5^2*x6*x7^3*x8*x9^2 + -2*x3*x4*x5^2*x6*x7^3*x8*x9 + x3*x4*x5^2*x6*x7^3*x8 + -x3*x4*x5^2*x6*x7^3*x9^2 + 2*x3*x4*x5^2*x6*x7^3*x9 + -x3*x4*x5^2*x6*x7^3 + -x3*x4*x5^2*x6*x7^2*x8^2*x9 + x3*x4*x5^2*x6*x7^2*x8^2 + -x3*x4*x5^2*x6*x7^2*x8*x9^2 + 3*x3*x4*x5^2*x6*x7^2*x8*x9 + -2*x3*x4*x5^2*x6*x7^2*x8 + x3*x4*x5^2*x6*x7^2*x9^2 + -2*x3*x4*x5^2*x6*x7^2*x9 + x3*x4*x5^2*x6*x7^2 + x3*x4*x5^2*x6*x7*x8^2*x9 + -x3*x4*x5^2*x6*x7*x8^2 + -x3*x4*x5^2*x6*x7*x8*x9 + x3*x4*x5^2*x6*x7*x8 + -x3*x4*x5*x6^8*x7*x8*x9 + x3*x4*x5*x6^8*x7*x8 + x3*x4*x5*x6^8*x7*x9 + -x3*x4*x5*x6^8*x7 + x3*x4*x5*x6^8*x8*x9 + -x3*x4*x5*x6^8*x8 + -x3*x4*x5*x6^8*x9 + x3*x4*x5*x6^8 + x3*x4*x5*x6^6*x7*x8*x9 + -x3*x4*x5*x6^6*x7*x8 + -x3*x4*x5*x6^6*x7*x9 + x3*x4*x5*x6^6*x7 + -x3*x4*x5*x6^6*x8*x9 + x3*x4*x5*x6^6*x8 + x3*x4*x5*x6^6*x9 + -x3*x4*x5*x6^6 + -x3*x4*x5*x6^4*x7^4*x8*x9 + x3*x4*x5*x6^4*x7^4*x8 + x3*x4*x5*x6^4*x7^4*x9 + -x3*x4*x5*x6^4*x7^4 + x3*x4*x5*x6^4*x7^3*x8*x9 + -x3*x4*x5*x6^4*x7^3*x8 + -x3*x4*x5*x6^4*x7^3*x9 + x3*x4*x5*x6^4*x7^3 + -x3*x4*x5*x6^4*x7^2*x8*x9^2 + x3*x4*x5*x6^4*x7^2*x8*x9 + x3*x4*x5*x6^4*x7^2*x9^2 + -x3*x4*x5*x6^4*x7^2*x9 + -x3*x4*x5*x6^4*x7*x8^2*x9^2 + x3*x4*x5*x6^4*x7*x8^2*x9 + -x3*x4*x5*x6^4*x7*x8*x9^3 + 3*x3*x4*x5*x6^4*x7*x8*x9^2 + -2*x3*x4*x5*x6^4*x7*x8*x9 + x3*x4*x5*x6^4*x7*x9^3 + -2*x3*x4*x5*x6^4*x7*x9^2 + x3*x4*x5*x6^4*x7*x9 + x3*x4*x5*x6^4*x8^2*x9^2 + -x3*x4*x5*x6^4*x8^2*x9 + x3*x4*x5*x6^4*x8*x9^3 + -2*x3*x4*x5*x6^4*x8*x9^2 + x3*x4*x5*x6^4*x8*x9 + -x3*x4*x5*x6^4*x9^3 + x3*x4*x5*x6^4*x9^2 + x3*x4*x5*x6^3*x7^4*x8*x9 + -x3*x4*x5*x6^3*x7^4*x8 + -x3*x4*x5*x6^3*x7^4*x9 + x3*x4*x5*x6^3*x7^4 + x3*x4*x5*x6^3*x7^3*x8^2*x9 + -x3*x4*x5*x6^3*x7^3*x8^2 + -x3*x4*x5*x6^3*x7^3*x8*x9 + x3*x4*x5*x6^3*x7^3*x8 + -x3*x4*x5*x6^3*x7^2*x8^2*x9 + x3*x4*x5*x6^3*x7^2*x8^2 + x3*x4*x5*x6^3*x7^2*x8*x9^2 + -x3*x4*x5*x6^3*x7^2*x8*x9 + -x3*x4*x5*x6^3*x7^2*x9^2 + 2*x3*x4*x5*x6^3*x7^2*x9 + -x3*x4*x5*x6^3*x7^2 + 2*x3*x4*x5*x6^3*x7*x8^2*x9^2 + -2*x3*x4*x5*x6^3*x7*x8^2*x9 + x3*x4*x5*x6^3*x7*x8*x9^3 + -4*x3*x4*x5*x6^3*x7*x8*x9^2 + 3*x3*x4*x5*x6^3*x7*x8*x9 + -x3*x4*x5*x6^3*x7*x9^3 + 2*x3*x4*x5*x6^3*x7*x9^2 + -x3*x4*x5*x6^3*x7*x9 + -2*x3*x4*x5*x6^3*x8^2*x9^2 + 2*x3*x4*x5*x6^3*x8^2*x9 + -x3*x4*x5*x6^3*x8*x9^3 + 3*x3*x4*x5*x6^3*x8*x9^2 + -2*x3*x4*x5*x6^3*x8*x9 + x3*x4*x5*x6^3*x9^3 + -x3*x4*x5*x6^3*x9^2 + -x3*x4*x5*x6^2*x7^4*x8*x9^2 + x3*x4*x5*x6^2*x7^4*x8*x9 + x3*x4*x5*x6^2*x7^4*x9^2 + -x3*x4*x5*x6^2*x7^4*x9 + -x3*x4*x5*x6^2*x7^3*x8^2*x9 + x3*x4*x5*x6^2*x7^3*x8^2 + x3*x4*x5*x6^2*x7^3*x8*x9^2 + -x3*x4*x5*x6^2*x7^3*x8*x9 + -x3*x4*x5*x6^2*x7^3*x9^2 + 2*x3*x4*x5*x6^2*x7^3*x9 + -x3*x4*x5*x6^2*x7^3 + x3*x4*x5*x6^2*x7^2*x8^2*x9 + -x3*x4*x5*x6^2*x7^2*x8^2 + -x3*x4*x5*x6^2*x7^2*x9 + x3*x4*x5*x6^2*x7^2 + -x3*x4*x5*x6^2*x7*x8^2*x9^2 + x3*x4*x5*x6^2*x7*x8^2*x9 + x3*x4*x5*x6^2*x7*x8*x9^2 + -x3*x4*x5*x6^2*x7*x8*x9 + x3*x4*x5*x6^2*x8^2*x9^2 + -x3*x4*x5*x6^2*x8^2*x9 + -x3*x4*x5*x6^2*x8*x9^2 + x3*x4*x5*x6^2*x8*x9 + x3*x4*x5*x6*x7^4*x8*x9^2 + -x3*x4*x5*x6*x7^4*x8*x9 + -x3*x4*x5*x6*x7^4*x9^2 + x3*x4*x5*x6*x7^4*x9 + -x3*x4*x5*x6*x7^3*x8*x9^2 + x3*x4*x5*x6*x7^3*x8*x9 + x3*x4*x5*x6*x7^3*x9^2 + -x3*x4*x5*x6*x7^3*x9 + x3*x4*x6^8*x7*x8*x9 + -x3*x4*x6^8*x7*x8 + -x3*x4*x6^8*x7*x9 + x3*x4*x6^8*x7 + -x3*x4*x6^8*x8*x9 + x3*x4*x6^8*x8 + x3*x4*x6^8*x9 + -x3*x4*x6^8 + -x3*x4*x6^6*x7*x8*x9 + x3*x4*x6^6*x7*x8 + x3*x4*x6^6*x7*x9 + -x3*x4*x6^6*x7 + x3*x4*x6^6*x8*x9 + -x3*x4*x6^6*x8 + -x3*x4*x6^6*x9 + x3*x4*x6^6 + x3*x4*x6^4*x7^4*x8*x9 + -x3*x4*x6^4*x7^4*x8 + -x3*x4*x6^4*x7^4*x9 + x3*x4*x6^4*x7^4 + -x3*x4*x6^4*x7^3*x8*x9 + x3*x4*x6^4*x7^3*x8 + x3*x4*x6^4*x7^3*x9 + -x3*x4*x6^4*x7^3 + x3*x4*x6^4*x7^2*x8*x9^2 + -x3*x4*x6^4*x7^2*x8*x9 + -x3*x4*x6^4*x7^2*x9^2 + x3*x4*x6^4*x7^2*x9 + x3*x4*x6^4*x7*x8^2*x9^2 + -x3*x4*x6^4*x7*x8^2*x9 + x3*x4*x6^4*x7*x8*x9^3 + -2*x3*x4*x6^4*x7*x8*x9^2 + x3*x4*x6^4*x7*x8*x9 + -x3*x4*x6^4*x7*x9^3 + x3*x4*x6^4*x7*x9^2 + -x3*x4*x6^4*x8^2*x9^2 + x3*x4*x6^4*x8^2*x9 + -x3*x4*x6^4*x8*x9^3 + x3*x4*x6^4*x8*x9^2 + x3*x4*x6^4*x9^3 + -x3*x4*x6^4*x9 + -x3*x4*x6^3*x7^4*x8*x9 + x3*x4*x6^3*x7^4*x8 + x3*x4*x6^3*x7^4*x9 + -x3*x4*x6^3*x7^4 + x3*x4*x6^3*x7^3*x8*x9^2 + -x3*x4*x6^3*x7^3*x8 + -x3*x4*x6^3*x7^3*x9^2 + x3*x4*x6^3*x7^3 + -2*x3*x4*x6^3*x7^2*x8*x9^2 + 2*x3*x4*x6^3*x7^2*x8*x9 + 2*x3*x4*x6^3*x7^2*x9^2 + -2*x3*x4*x6^3*x7^2*x9 + -x3*x4*x6^3*x7*x8^2*x9^2 + x3*x4*x6^3*x7*x8^2*x9 + -x3*x4*x6^3*x7*x8*x9^3 + 2*x3*x4*x6^3*x7*x8*x9^2 + -x3*x4*x6^3*x7*x8*x9 + x3*x4*x6^3*x7*x9^3 + -x3*x4*x6^3*x7*x9^2 + x3*x4*x6^3*x8^2*x9^2 + -x3*x4*x6^3*x8^2*x9 + x3*x4*x6^3*x8*x9^3 + -x3*x4*x6^3*x8*x9^2 + -x3*x4*x6^3*x9^3 + x3*x4*x6^3*x9 + x3*x4*x6^2*x7^4*x8*x9^2 + -x3*x4*x6^2*x7^4*x8*x9 + -x3*x4*x6^2*x7^4*x9^2 + x3*x4*x6^2*x7^4*x9 + -x3*x4*x6^2*x7^3*x8*x9^2 + x3*x4*x6^2*x7^3*x8*x9 + x3*x4*x6^2*x7^3*x9^2 + -x3*x4*x6^2*x7^3*x9 + x3*x4*x6^2*x7^2*x8^2*x9^2 + -x3*x4*x6^2*x7^2*x8^2*x9 + -x3*x4*x6^2*x7^2*x8*x9^2 + x3*x4*x6^2*x7^2*x8*x9 + -x3*x4*x6^2*x7*x8^2*x9^2 + x3*x4*x6^2*x7*x8^2*x9 + x3*x4*x6^2*x7*x8*x9^2 + -x3*x4*x6^2*x7*x8*x9 + -x3*x4*x6*x7^4*x8*x9^2 + x3*x4*x6*x7^4*x8*x9 + x3*x4*x6*x7^4*x9^2 + -x3*x4*x6*x7^4*x9 + x3*x4*x6*x7^2*x8*x9^2 + -x3*x4*x6*x7^2*x8*x9 + -x3*x4*x6*x7^2*x9^2 + x3*x4*x6*x7^2*x9 + -x3*x4*x7^2*x8^2*x9^2 + x3*x4*x7^2*x8^2*x9 + x3*x4*x7^2*x8*x9^2 + -x3*x4*x7^2*x8*x9 + x3*x4*x7*x8^2*x9^2 + -x3*x4*x7*x8^2*x9 + -x3*x4*x7*x8*x9^2 + x3*x4*x7*x8*x9 + x3*x5^4*x6^2*x7^3*x8*x9 + -x3*x5^4*x6^2*x7^3*x8 + -x3*x5^4*x6^2*x7^3*x9 + x3*x5^4*x6^2*x7^3 + -x3*x5^4*x6^2*x7^2*x8*x9 + x3*x5^4*x6^2*x7^2*x8 + x3*x5^4*x6^2*x7^2*x9 + -x3*x5^4*x6^2*x7^2 + -x3*x5^4*x6*x7^3*x8*x9 + x3*x5^4*x6*x7^3*x8 + x3*x5^4*x6*x7^3*x9 + -x3*x5^4*x6*x7^3 + x3*x5^4*x6*x7^2*x8^2*x9^2 + -x3*x5^4*x6*x7^2*x8^2*x9 + -x3*x5^4*x6*x7^2*x8*x9^2 + 2*x3*x5^4*x6*x7^2*x8*x9 + -x3*x5^4*x6*x7^2*x8 + -x3*x5^4*x6*x7^2*x9 + x3*x5^4*x6*x7^2 + -x3*x5^4*x6*x7*x8^2*x9^2 + x3*x5^4*x6*x7*x8^2*x9 + x3*x5^4*x6*x7*x8*x9^2 + -x3*x5^4*x6*x7*x8*x9 + -x3*x5^4*x7^2*x8^2*x9^2 + x3*x5^4*x7^2*x8^2*x9 + x3*x5^4*x7^2*x8*x9^2 + -x3*x5^4*x7^2*x8*x9 + x3*x5^4*x7*x8^2*x9^2 + -x3*x5^4*x7*x8^2*x9 + -x3*x5^4*x7*x8*x9^2 + x3*x5^4*x7*x8*x9 + x3*x5^3*x6^2*x7^2*x8^2*x9^2 + -x3*x5^3*x6^2*x7^2*x8^2 + -x3*x5^3*x6^2*x7^2*x8*x9^2 + x3*x5^3*x6^2*x7^2*x8 + -x3*x5^3*x6^2*x7*x8^2*x9^2 + x3*x5^3*x6^2*x7*x8^2 + x3*x5^3*x6^2*x7*x8*x9^2 + -x3*x5^3*x6^2*x7*x8 + -x3*x5^3*x6*x7^2*x8^2*x9^2 + x3*x5^3*x6*x7^2*x8^2 + x3*x5^3*x6*x7^2*x8*x9^2 + -x3*x5^3*x6*x7^2*x8 + x3*x5^3*x6*x7*x8^2*x9^2 + -x3*x5^3*x6*x7*x8^2 + -x3*x5^3*x6*x7*x8*x9^2 + x3*x5^3*x6*x7*x8 + x3*x5^2*x6^4*x7*x8^2*x9 + -x3*x5^2*x6^4*x7*x8^2 + x3*x5^2*x6^4*x7*x8*x9^2 + -x3*x5^2*x6^4*x7*x8*x9 + -x3*x5^2*x6^4*x7*x9^2 + x3*x5^2*x6^4*x7 + -x3*x5^2*x6^4*x8^2*x9 + x3*x5^2*x6^4*x8^2 + -x3*x5^2*x6^4*x8*x9^2 + x3*x5^2*x6^4*x8*x9 + x3*x5^2*x6^4*x9^2 + -x3*x5^2*x6^4 + x3*x5^2*x6^3*x7^3*x8^2*x9 + -x3*x5^2*x6^3*x7^3*x8^2 + x3*x5^2*x6^3*x7^3*x8*x9^2 + -x3*x5^2*x6^3*x7^3*x8*x9 + -x3*x5^2*x6^3*x7^3*x9^2 + x3*x5^2*x6^3*x7^3 + -x3*x5^2*x6^3*x7^2*x8*x9^2 + x3*x5^2*x6^3*x7^2*x8 + x3*x5^2*x6^3*x7^2*x9^2 + -x3*x5^2*x6^3*x7^2 + x3*x5^2*x6^3*x7*x8^2*x9^2 + -2*x3*x5^2*x6^3*x7*x8^2*x9 + x3*x5^2*x6^3*x7*x8^2 + -2*x3*x5^2*x6^3*x7*x8*x9^2 + 2*x3*x5^2*x6^3*x7*x8*x9 + x3*x5^2*x6^3*x7*x9^2 + -x3*x5^2*x6^3*x7 + -x3*x5^2*x6^3*x8^2*x9^2 + x3*x5^2*x6^3*x8^2*x9 + 2*x3*x5^2*x6^3*x8*x9^2 + -x3*x5^2*x6^3*x8*x9 + -x3*x5^2*x6^3*x8 + -x3*x5^2*x6^3*x9^2 + x3*x5^2*x6^3 + -x3*x5^2*x6^2*x7^3*x8*x9 + x3*x5^2*x6^2*x7^3*x8 + x3*x5^2*x6^2*x7^3*x9 + -x3*x5^2*x6^2*x7^3 + -2*x3*x5^2*x6^2*x7^2*x8^2*x9 + 2*x3*x5^2*x6^2*x7^2*x8^2 + 3*x3*x5^2*x6^2*x7^2*x8*x9 + -3*x3*x5^2*x6^2*x7^2*x8 + -x3*x5^2*x6^2*x7^2*x9 + x3*x5^2*x6^2*x7^2 + -x3*x5^2*x6^2*x7*x8^2*x9^2 + 2*x3*x5^2*x6^2*x7*x8^2*x9 + -x3*x5^2*x6^2*x7*x8^2 + x3*x5^2*x6^2*x7*x8*x9^2 + -2*x3*x5^2*x6^2*x7*x8*x9 + x3*x5^2*x6^2*x7*x8 + x3*x5^2*x6^2*x8^2*x9^2 + -x3*x5^2*x6^2*x8^2 + -x3*x5^2*x6^2*x8*x9^2 + x3*x5^2*x6^2*x8 + -x3*x5^2*x6*x7^3*x8^2*x9 + x3*x5^2*x6*x7^3*x8^2 + -x3*x5^2*x6*x7^3*x8*x9^2 + 2*x3*x5^2*x6*x7^3*x8*x9 + -x3*x5^2*x6*x7^3*x8 + x3*x5^2*x6*x7^3*x9^2 + -x3*x5^2*x6*x7^3*x9 + 2*x3*x5^2*x6*x7^2*x8^2*x9 + -2*x3*x5^2*x6*x7^2*x8^2 + x3*x5^2*x6*x7^2*x8*x9^2 + -3*x3*x5^2*x6*x7^2*x8*x9 + 2*x3*x5^2*x6*x7^2*x8 + -x3*x5^2*x6*x7^2*x9^2 + x3*x5^2*x6*x7^2*x9 + -x3*x5^2*x6*x7*x8^2*x9 + x3*x5^2*x6*x7*x8^2 + x3*x5^2*x6*x7*x8*x9 + -x3*x5^2*x6*x7*x8 + x3*x5*x6^8*x7*x8*x9 + -x3*x5*x6^8*x7*x8 + -x3*x5*x6^8*x7*x9 + x3*x5*x6^8*x7 + -x3*x5*x6^8*x8*x9 + x3*x5*x6^8*x8 + x3*x5*x6^8*x9 + -x3*x5*x6^8 + x3*x5*x6^6*x7*x8^2*x9 + -x3*x5*x6^6*x7*x8^2 + -x3*x5*x6^6*x7*x8*x9 + x3*x5*x6^6*x7*x8 + -x3*x5*x6^6*x8^2*x9 + x3*x5*x6^6*x8^2 + x3*x5*x6^6*x8*x9 + -x3*x5*x6^6*x8 + x3*x5*x6^5*x7^2*x8^2*x9 + -x3*x5*x6^5*x7^2*x8^2 + -x3*x5*x6^5*x7^2*x9 + x3*x5*x6^5*x7^2 + -x3*x5*x6^5*x7*x8^2*x9 + x3*x5*x6^5*x7*x8^2 + x3*x5*x6^5*x7*x9 + -x3*x5*x6^5*x7 + x3*x5*x6^4*x7^4*x8*x9 + -x3*x5*x6^4*x7^4*x8 + -x3*x5*x6^4*x7^4*x9 + x3*x5*x6^4*x7^4 + x3*x5*x6^4*x7^3*x8^2*x9 + -x3*x5*x6^4*x7^3*x8^2 + -x3*x5*x6^4*x7^3*x8*x9 + x3*x5*x6^4*x7^3*x8 + -x3*x5*x6^4*x7^2*x8^2*x9 + x3*x5*x6^4*x7^2*x8^2 + x3*x5*x6^4*x7^2*x8*x9^2 + -x3*x5*x6^4*x7^2*x8*x9 + -x3*x5*x6^4*x7^2*x9^2 + 2*x3*x5*x6^4*x7^2*x9 + -x3*x5*x6^4*x7^2 + x3*x5*x6^4*x7*x8^2*x9^2 + -2*x3*x5*x6^4*x7*x8^2*x9 + x3*x5*x6^4*x7*x8^2 + x3*x5*x6^4*x7*x8*x9^3 + -3*x3*x5*x6^4*x7*x8*x9^2 + 2*x3*x5*x6^4*x7*x8*x9 + -x3*x5*x6^4*x7*x9^3 + 2*x3*x5*x6^4*x7*x9^2 + -x3*x5*x6^4*x7 + -x3*x5*x6^4*x8^2*x9^2 + 2*x3*x5*x6^4*x8^2*x9 + -x3*x5*x6^4*x8^2 + -x3*x5*x6^4*x8*x9^3 + 2*x3*x5*x6^4*x8*x9^2 + -x3*x5*x6^4*x8*x9 + x3*x5*x6^4*x9^3 + -x3*x5*x6^4*x9^2 + -x3*x5*x6^4*x9 + x3*x5*x6^4 + -x3*x5*x6^3*x7^3*x8^2*x9 + x3*x5*x6^3*x7^3*x8^2 + x3*x5*x6^3*x7^3*x9 + -x3*x5*x6^3*x7^3 + -x3*x5*x6^3*x7^2*x8^2*x9 + x3*x5*x6^3*x7^2*x8^2 + -x3*x5*x6^3*x7^2*x8*x9^2 + 2*x3*x5*x6^3*x7^2*x8*x9 + -x3*x5*x6^3*x7^2*x8 + x3*x5*x6^3*x7^2*x9^2 + -x3*x5*x6^3*x7^2*x9 + -2*x3*x5*x6^3*x7*x8^2*x9^2 + 3*x3*x5*x6^3*x7*x8^2*x9 + -x3*x5*x6^3*x7*x8^2 + -x3*x5*x6^3*x7*x8*x9^3 + 4*x3*x5*x6^3*x7*x8*x9^2 + -3*x3*x5*x6^3*x7*x8*x9 + x3*x5*x6^3*x7*x9^3 + -2*x3*x5*x6^3*x7*x9^2 + x3*x5*x6^3*x7 + 2*x3*x5*x6^3*x8^2*x9^2 + -x3*x5*x6^3*x8^2*x9 + -x3*x5*x6^3*x8^2 + x3*x5*x6^3*x8*x9^3 + -3*x3*x5*x6^3*x8*x9^2 + x3*x5*x6^3*x8*x9 + x3*x5*x6^3*x8 + -x3*x5*x6^3*x9^3 + x3*x5*x6^3*x9^2 + x3*x5*x6^2*x7^4*x8*x9^2 + -x3*x5*x6^2*x7^4*x8*x9 + -x3*x5*x6^2*x7^4*x9^2 + x3*x5*x6^2*x7^4*x9 + -x3*x5*x6^2*x7^3*x8*x9^2 + x3*x5*x6^2*x7^3*x8*x9 + x3*x5*x6^2*x7^3*x9^2 + -x3*x5*x6^2*x7^3*x9 + x3*x5*x6^2*x7^2*x8^2*x9 + -x3*x5*x6^2*x7^2*x8^2 + -x3*x5*x6^2*x7^2*x8*x9 + x3*x5*x6^2*x7^2*x8 + x3*x5*x6^2*x7*x8^2*x9^2 + -x3*x5*x6^2*x7*x8^2*x9 + -x3*x5*x6^2*x7*x8*x9^2 + x3*x5*x6^2*x7*x8*x9 + -x3*x5*x6^2*x8^2*x9^2 + x3*x5*x6^2*x8^2 + x3*x5*x6^2*x8*x9^2 + -x3*x5*x6^2*x8 + -x3*x5*x6*x7^4*x8*x9^2 + x3*x5*x6*x7^4*x8 + x3*x5*x6*x7^4*x9^2 + -x3*x5*x6*x7^4 + x3*x5*x6*x7^3*x8*x9^2 + -x3*x5*x6*x7^3*x8 + -x3*x5*x6*x7^3*x9^2 + x3*x5*x6*x7^3 + -x3*x6^8*x7*x8*x9 + x3*x6^8*x7*x8 + x3*x6^8*x7*x9 + -x3*x6^8*x7 + x3*x6^8*x8*x9 + -x3*x6^8*x8 + -x3*x6^8*x9 + x3*x6^8 + -x3*x6^6*x7*x8^2*x9 + x3*x6^6*x7*x8^2 + x3*x6^6*x7*x8*x9 + -x3*x6^6*x7*x8 + x3*x6^6*x8^2*x9 + -x3*x6^6*x8^2 + -x3*x6^6*x8*x9 + x3*x6^6*x8 + -x3*x6^5*x7^2*x8^2*x9 + x3*x6^5*x7^2*x8^2 + x3*x6^5*x7^2*x9 + -x3*x6^5*x7^2 + x3*x6^5*x7*x8^2*x9 + -x3*x6^5*x7*x8^2 + -x3*x6^5*x7*x9 + x3*x6^5*x7 + -x3*x6^4*x7^4*x8*x9 + x3*x6^4*x7^4*x8 + x3*x6^4*x7^4*x9 + -x3*x6^4*x7^4 + -x3*x6^4*x7^3*x8^2*x9 + x3*x6^4*x7^3*x8^2 + x3*x6^4*x7^3*x8*x9 + -x3*x6^4*x7^3*x8 + x3*x6^4*x7^2*x8^2*x9 + -x3*x6^4*x7^2*x8^2 + -x3*x6^4*x7^2*x8*x9^2 + x3*x6^4*x7^2*x8*x9 + x3*x6^4*x7^2*x9^2 + -2*x3*x6^4*x7^2*x9 + x3*x6^4*x7^2 + -x3*x6^4*x7*x8^2*x9^2 + x3*x6^4*x7*x8^2*x9 + -x3*x6^4*x7*x8*x9^3 + 2*x3*x6^4*x7*x8*x9^2 + -x3*x6^4*x7*x8*x9 + x3*x6^4*x7*x9^3 + -x3*x6^4*x7*x9^2 + x3*x6^4*x8^2*x9^2 + -x3*x6^4*x8^2*x9 + x3*x6^4*x8*x9^3 + -x3*x6^4*x8*x9^2 + -x3*x6^4*x9^3 + x3*x6^4*x9 + -x3*x6^3*x7^3*x8*x9^2 + x3*x6^3*x7^3*x8*x9 + x3*x6^3*x7^3*x9^2 + -x3*x6^3*x7^3*x9 + x3*x6^3*x7^2*x8^2*x9 + -x3*x6^3*x7^2*x8^2 + 2*x3*x6^3*x7^2*x8*x9^2 + -2*x3*x6^3*x7^2*x8*x9 + -2*x3*x6^3*x7^2*x9^2 + x3*x6^3*x7^2*x9 + x3*x6^3*x7^2 + x3*x6^3*x7*x8^2*x9^2 + -x3*x6^3*x7*x8^2*x9 + x3*x6^3*x7*x8*x9^3 + -2*x3*x6^3*x7*x8*x9^2 + x3*x6^3*x7*x8*x9 + -x3*x6^3*x7*x9^3 + x3*x6^3*x7*x9^2 + -x3*x6^3*x8^2*x9^2 + x3*x6^3*x8^2 + -x3*x6^3*x8*x9^3 + x3*x6^3*x8*x9^2 + x3*x6^3*x9^3 + -x3*x6^3 + -x3*x6^2*x7^4*x8*x9^2 + x3*x6^2*x7^4*x8*x9 + x3*x6^2*x7^4*x9^2 + -x3*x6^2*x7^4*x9 + x3*x6^2*x7^3*x8*x9^2 + -x3*x6^2*x7^3*x8*x9 + -x3*x6^2*x7^3*x9^2 + x3*x6^2*x7^3*x9 + -x3*x6^2*x7^2*x8^2*x9^2 + x3*x6^2*x7^2*x8^2*x9 + x3*x6^2*x7^2*x8*x9^2 + -x3*x6^2*x7^2*x8*x9 + x3*x6^2*x7*x8^2*x9^2 + -x3*x6^2*x7*x8^2*x9 + -x3*x6^2*x7*x8*x9^2 + x3*x6^2*x7*x8*x9 + x3*x6*x7^4*x8*x9^2 + -x3*x6*x7^4*x8 + -x3*x6*x7^4*x9^2 + x3*x6*x7^4 + x3*x6*x7^3*x8^2*x9 + -x3*x6*x7^3*x8^2 + -x3*x6*x7^3*x8*x9 + x3*x6*x7^3*x8 + -x3*x6*x7^2*x8^2*x9 + x3*x6*x7^2*x8^2 + -x3*x6*x7^2*x8*x9^2 + x3*x6*x7^2*x8*x9 + x3*x6*x7^2*x9^2 + -x3*x6*x7^2 + x3*x7^2*x8^2*x9^2 + -x3*x7^2*x8^2*x9 + -x3*x7^2*x8*x9^2 + x3*x7^2*x8*x9 + -x3*x7*x8^2*x9^2 + x3*x7*x8^2*x9 + x3*x7*x8*x9^2 + -x3*x7*x8*x9 + x4^8*x5*x6^2*x7*x8*x9 + -x4^8*x5*x6^2*x7*x8 + -x4^8*x5*x6^2*x7*x9 + x4^8*x5*x6^2*x7 + -x4^8*x5*x6^2*x8*x9 + x4^8*x5*x6^2*x8 + x4^8*x5*x6^2*x9 + -x4^8*x5*x6^2 + x4^8*x5*x6*x7*x8*x9^2 + -x4^8*x5*x6*x7*x8*x9 + -x4^8*x5*x6*x7*x9^2 + x4^8*x5*x6*x7*x9 + -x4^8*x5*x6*x8*x9^2 + x4^8*x5*x6*x8*x9 + x4^8*x5*x6*x9^2 + -x4^8*x5*x6*x9 + -x4^8*x5*x7*x8*x9^2 + x4^8*x5*x7*x8 + x4^8*x5*x7*x9^2 + -x4^8*x5*x7 + x4^8*x5*x8*x9^2 + -x4^8*x5*x8 + -x4^8*x5*x9^2 + x4^8*x5 + -x4^8*x6^2*x7*x8*x9 + x4^8*x6^2*x7*x8 + x4^8*x6^2*x7*x9 + -x4^8*x6^2*x7 + x4^8*x6^2*x8*x9 + -x4^8*x6^2*x8 + -x4^8*x6^2*x9 + x4^8*x6^2 + -x4^8*x6*x7*x8*x9^2 + x4^8*x6*x7*x8*x9 + x4^8*x6*x7*x9^2 + -x4^8*x6*x7*x9 + x4^8*x6*x8*x9^2 + -x4^8*x6*x8*x9 + -x4^8*x6*x9^2 + x4^8*x6*x9 + x4^8*x7*x8*x9^2 + -x4^8*x7*x8 + -x4^8*x7*x9^2 + x4^8*x7 + -x4^8*x8*x9^2 + x4^8*x8 + x4^8*x9^2 + -x4^8 + x4^7*x5*x6^2*x7*x8^2*x9 + -x4^7*x5*x6^2*x7*x8^2 + -x4^7*x5*x6^2*x7*x8*x9 + x4^7*x5*x6^2*x7*x8 + -x4^7*x5*x6^2*x8^2*x9 + x4^7*x5*x6^2*x8^2 + x4^7*x5*x6^2*x8*x9 + -x4^7*x5*x6^2*x8 + x4^7*x5*x6*x7*x8^2*x9^2 + -x4^7*x5*x6*x7*x8^2*x9 + -x4^7*x5*x6*x7*x8*x9^2 + x4^7*x5*x6*x7*x8*x9 + -x4^7*x5*x6*x8^2*x9^2 + x4^7*x5*x6*x8^2*x9 + x4^7*x5*x6*x8*x9^2 + -x4^7*x5*x6*x8*x9 + -x4^7*x5*x7*x8^2*x9^2 + x4^7*x5*x7*x8^2 + x4^7*x5*x7*x8*x9^2 + -x4^7*x5*x7*x8 + x4^7*x5*x8^2*x9^2 + -x4^7*x5*x8^2 + -x4^7*x5*x8*x9^2 + x4^7*x5*x8 + -x4^7*x6^2*x7*x8^2*x9 + x4^7*x6^2*x7*x8^2 + x4^7*x6^2*x7*x8*x9 + -x4^7*x6^2*x7*x8 + x4^7*x6^2*x8^2*x9 + -x4^7*x6^2*x8^2 + -x4^7*x6^2*x8*x9 + x4^7*x6^2*x8 + -x4^7*x6*x7*x8^2*x9^2 + x4^7*x6*x7*x8^2*x9 + x4^7*x6*x7*x8*x9^2 + -x4^7*x6*x7*x8*x9 + x4^7*x6*x8^2*x9^2 + -x4^7*x6*x8^2*x9 + -x4^7*x6*x8*x9^2 + x4^7*x6*x8*x9 + x4^7*x7*x8^2*x9^2 + -x4^7*x7*x8^2 + -x4^7*x7*x8*x9^2 + x4^7*x7*x8 + -x4^7*x8^2*x9^2 + x4^7*x8^2 + x4^7*x8*x9^2 + -x4^7*x8 + x4^6*x5*x6^2*x7*x8^2*x9^2 + -x4^6*x5*x6^2*x7*x8^2*x9 + -x4^6*x5*x6^2*x7*x9^2 + x4^6*x5*x6^2*x7*x9 + -x4^6*x5*x6^2*x8^2*x9^2 + x4^6*x5*x6^2*x8^2*x9 + x4^6*x5*x6^2*x9^2 + -x4^6*x5*x6^2*x9 + -x4^6*x5*x6*x7*x8^2*x9^2 + x4^6*x5*x6*x7*x8^2*x9 + x4^6*x5*x6*x7*x9^2 + -x4^6*x5*x6*x7*x9 + x4^6*x5*x6*x8^2*x9^2 + -x4^6*x5*x6*x8^2*x9 + -x4^6*x5*x6*x9^2 + x4^6*x5*x6*x9 + -x4^6*x6^2*x7*x8^2*x9^2 + x4^6*x6^2*x7*x8^2*x9 + x4^6*x6^2*x7*x9^2 + -x4^6*x6^2*x7*x9 + x4^6*x6^2*x8^2*x9^2 + -x4^6*x6^2*x8^2*x9 + -x4^6*x6^2*x9^2 + x4^6*x6^2*x9 + x4^6*x6*x7*x8^2*x9^2 + -x4^6*x6*x7*x8^2*x9 + -x4^6*x6*x7*x9^2 + x4^6*x6*x7*x9 + -x4^6*x6*x8^2*x9^2 + x4^6*x6*x8^2*x9 + x4^6*x6*x9^2 + -x4^6*x6*x9 + x4^5*x5*x6^6*x7*x8*x9 + -x4^5*x5*x6^6*x7*x8 + -x4^5*x5*x6^6*x7*x9 + x4^5*x5*x6^6*x7 + -x4^5*x5*x6^6*x8*x9 + x4^5*x5*x6^6*x8 + x4^5*x5*x6^6*x9 + -x4^5*x5*x6^6 + x4^5*x5*x6^5*x7*x8^2*x9 + -x4^5*x5*x6^5*x7*x8^2 + -x4^5*x5*x6^5*x7*x8*x9 + x4^5*x5*x6^5*x7*x8 + -x4^5*x5*x6^5*x8^2*x9 + x4^5*x5*x6^5*x8^2 + x4^5*x5*x6^5*x8*x9 + -x4^5*x5*x6^5*x8 + -x4^5*x5*x6^2*x7*x8^2*x9 + x4^5*x5*x6^2*x7*x8^2 + x4^5*x5*x6^2*x7*x9 + -x4^5*x5*x6^2*x7 + x4^5*x5*x6^2*x8^2*x9 + -x4^5*x5*x6^2*x8^2 + -x4^5*x5*x6^2*x9 + x4^5*x5*x6^2 + -x4^5*x6^6*x7*x8*x9 + x4^5*x6^6*x7*x8 + x4^5*x6^6*x7*x9 + -x4^5*x6^6*x7 + x4^5*x6^6*x8*x9 + -x4^5*x6^6*x8 + -x4^5*x6^6*x9 + x4^5*x6^6 + -x4^5*x6^5*x7*x8^2*x9 + x4^5*x6^5*x7*x8^2 + x4^5*x6^5*x7*x8*x9 + -x4^5*x6^5*x7*x8 + x4^5*x6^5*x8^2*x9 + -x4^5*x6^5*x8^2 + -x4^5*x6^5*x8*x9 + x4^5*x6^5*x8 + x4^5*x6^2*x7*x8^2*x9 + -x4^5*x6^2*x7*x8^2 + -x4^5*x6^2*x7*x9 + x4^5*x6^2*x7 + -x4^5*x6^2*x8^2*x9 + x4^5*x6^2*x8^2 + x4^5*x6^2*x9 + -x4^5*x6^2 + x4^4*x5*x6^6*x7*x8^2*x9 + -x4^4*x5*x6^6*x7*x8^2 + -x4^4*x5*x6^6*x7*x8*x9 + x4^4*x5*x6^6*x7*x8 + -x4^4*x5*x6^6*x8^2*x9 + x4^4*x5*x6^6*x8^2 + x4^4*x5*x6^6*x8*x9 + -x4^4*x5*x6^6*x8 + -x4^4*x5*x6^5*x7*x8^2*x9 + x4^4*x5*x6^5*x7*x8^2 + x4^4*x5*x6^5*x7*x8*x9 + -x4^4*x5*x6^5*x7*x8 + x4^4*x5*x6^5*x8^2*x9 + -x4^4*x5*x6^5*x8^2 + -x4^4*x5*x6^5*x8*x9 + x4^4*x5*x6^5*x8 + x4^4*x5*x6^3*x7*x8^2*x9^2 + -x4^4*x5*x6^3*x7*x8^2*x9 + -x4^4*x5*x6^3*x7*x9^2 + x4^4*x5*x6^3*x7*x9 + -x4^4*x5*x6^3*x8^2*x9^2 + x4^4*x5*x6^3*x8^2*x9 + x4^4*x5*x6^3*x9^2 + -x4^4*x5*x6^3*x9 + -x4^4*x5*x6^2*x7*x8^2*x9^2 + x4^4*x5*x6^2*x7*x8^2*x9 + x4^4*x5*x6^2*x7*x9^2 + -x4^4*x5*x6^2*x7*x9 + x4^4*x5*x6^2*x8^2*x9^2 + -x4^4*x5*x6^2*x8^2*x9 + -x4^4*x5*x6^2*x9^2 + x4^4*x5*x6^2*x9 + -x4^4*x6^6*x7*x8^2*x9 + x4^4*x6^6*x7*x8^2 + x4^4*x6^6*x7*x8*x9 + -x4^4*x6^6*x7*x8 + x4^4*x6^6*x8^2*x9 + -x4^4*x6^6*x8^2 + -x4^4*x6^6*x8*x9 + x4^4*x6^6*x8 + x4^4*x6^5*x7*x8^2*x9 + -x4^4*x6^5*x7*x8^2 + -x4^4*x6^5*x7*x8*x9 + x4^4*x6^5*x7*x8 + -x4^4*x6^5*x8^2*x9 + x4^4*x6^5*x8^2 + x4^4*x6^5*x8*x9 + -x4^4*x6^5*x8 + -x4^4*x6^3*x7*x8^2*x9^2 + x4^4*x6^3*x7*x8^2*x9 + x4^4*x6^3*x7*x9^2 + -x4^4*x6^3*x7*x9 + x4^4*x6^3*x8^2*x9^2 + -x4^4*x6^3*x8^2*x9 + -x4^4*x6^3*x9^2 + x4^4*x6^3*x9 + x4^4*x6^2*x7*x8^2*x9^2 + -x4^4*x6^2*x7*x8^2*x9 + -x4^4*x6^2*x7*x9^2 + x4^4*x6^2*x7*x9 + -x4^4*x6^2*x8^2*x9^2 + x4^4*x6^2*x8^2*x9 + x4^4*x6^2*x9^2 + -x4^4*x6^2*x9 + x4^3*x5^3*x6^2*x7*x8^2*x9 + -x4^3*x5^3*x6^2*x7*x8^2 + -x4^3*x5^3*x6^2*x7*x9 + x4^3*x5^3*x6^2*x7 + -x4^3*x5^3*x6^2*x8^2*x9 + x4^3*x5^3*x6^2*x8^2 + x4^3*x5^3*x6^2*x9 + -x4^3*x5^3*x6^2 + x4^3*x5^3*x6*x7^2*x8^2*x9 + -x4^3*x5^3*x6*x7^2*x8^2 + -x4^3*x5^3*x6*x7^2*x9 + x4^3*x5^3*x6*x7^2 + -x4^3*x5^3*x6*x7*x8^2*x9 + x4^3*x5^3*x6*x7*x8^2 + x4^3*x5^3*x6*x7*x9 + -x4^3*x5^3*x6*x7 + -x4^3*x5^3*x7^2*x8^2*x9 + x4^3*x5^3*x7^2*x8^2 + x4^3*x5^3*x7^2*x9 + -x4^3*x5^3*x7^2 + x4^3*x5^3*x8^2*x9 + -x4^3*x5^3*x8^2 + -x4^3*x5^3*x9 + x4^3*x5^3 + x4^3*x5^2*x6^4*x7*x8^2*x9 + -x4^3*x5^2*x6^4*x7*x8^2 + -x4^3*x5^2*x6^4*x7*x9 + x4^3*x5^2*x6^4*x7 + -x4^3*x5^2*x6^4*x8^2*x9 + x4^3*x5^2*x6^4*x8^2 + x4^3*x5^2*x6^4*x9 + -x4^3*x5^2*x6^4 + x4^3*x5^2*x6^3*x7^2*x8^2*x9 + -x4^3*x5^2*x6^3*x7^2*x8^2 + -x4^3*x5^2*x6^3*x7^2*x9 + x4^3*x5^2*x6^3*x7^2 + -x4^3*x5^2*x6^3*x7*x8^2*x9 + x4^3*x5^2*x6^3*x7*x8^2 + x4^3*x5^2*x6^3*x7*x9 + -x4^3*x5^2*x6^3*x7 + x4^3*x5^2*x6^2*x7^3*x8^2*x9 + -x4^3*x5^2*x6^2*x7^3*x8^2 + -x4^3*x5^2*x6^2*x7^3*x9 + x4^3*x5^2*x6^2*x7^3 + -x4^3*x5^2*x6^2*x7^2*x8^2*x9 + x4^3*x5^2*x6^2*x7^2*x8^2 + x4^3*x5^2*x6^2*x7^2*x9 + -x4^3*x5^2*x6^2*x7^2 + -x4^3*x5^2*x6^2*x7*x8^2*x9 + x4^3*x5^2*x6^2*x7*x8^2 + x4^3*x5^2*x6^2*x7*x9 + -x4^3*x5^2*x6^2*x7 + x4^3*x5^2*x6^2*x8^2*x9 + -x4^3*x5^2*x6^2*x8^2 + -x4^3*x5^2*x6^2*x9 + x4^3*x5^2*x6^2 + -x4^3*x5^2*x6*x7^2*x8^2*x9 + x4^3*x5^2*x6*x7^2*x8^2 + x4^3*x5^2*x6*x7^2*x9 + -x4^3*x5^2*x6*x7^2 + x4^3*x5^2*x6*x7*x8^2*x9 + -x4^3*x5^2*x6*x7*x8^2 + -x4^3*x5^2*x6*x7*x9 + x4^3*x5^2*x6*x7 + -x4^3*x5^2*x7^3*x8^2*x9 + x4^3*x5^2*x7^3*x8^2 + x4^3*x5^2*x7^3*x9 + -x4^3*x5^2*x7^3 + x4^3*x5^2*x7^2*x8^2*x9 + -x4^3*x5^2*x7^2*x8^2 + -x4^3*x5^2*x7^2*x9 + x4^3*x5^2*x7^2 + x4^3*x5*x6^5*x7^2*x8^2*x9 + -x4^3*x5*x6^5*x7^2*x8^2 + -x4^3*x5*x6^5*x7^2*x9 + x4^3*x5*x6^5*x7^2 + -x4^3*x5*x6^5*x7*x8^2*x9 + x4^3*x5*x6^5*x7*x8^2 + x4^3*x5*x6^5*x7*x9 + -x4^3*x5*x6^5*x7 + x4^3*x5*x6^4*x7^3*x8^2*x9 + -x4^3*x5*x6^4*x7^3*x8^2 + -x4^3*x5*x6^4*x7^3*x9 + x4^3*x5*x6^4*x7^3 + -x4^3*x5*x6^4*x7^2*x8^2*x9 + x4^3*x5*x6^4*x7^2*x8^2 + x4^3*x5*x6^4*x7^2*x9 + -x4^3*x5*x6^4*x7^2 + -x4^3*x5*x6^4*x7*x8^2*x9 + x4^3*x5*x6^4*x7*x8^2 + x4^3*x5*x6^4*x7*x9 + -x4^3*x5*x6^4*x7 + x4^3*x5*x6^4*x8^2*x9 + -x4^3*x5*x6^4*x8^2 + -x4^3*x5*x6^4*x9 + x4^3*x5*x6^4 + x4^3*x5*x6^3*x7^4*x8*x9 + -x4^3*x5*x6^3*x7^4*x8 + -x4^3*x5*x6^3*x7^4*x9 + x4^3*x5*x6^3*x7^4 + -x4^3*x5*x6^3*x7^3*x8*x9 + x4^3*x5*x6^3*x7^3*x8 + x4^3*x5*x6^3*x7^3*x9 + -x4^3*x5*x6^3*x7^3 + -x4^3*x5*x6^3*x7^2*x8^2*x9 + x4^3*x5*x6^3*x7^2*x8^2 + x4^3*x5*x6^3*x7^2*x9 + -x4^3*x5*x6^3*x7^2 + x4^3*x5*x6^3*x7*x8^2*x9 + -x4^3*x5*x6^3*x7*x8^2 + x4^3*x5*x6^3*x7*x8*x9^3 + -x4^3*x5*x6^3*x7*x8*x9^2 + -x4^3*x5*x6^3*x7*x9^3 + x4^3*x5*x6^3*x7*x9^2 + -x4^3*x5*x6^3*x7*x9 + x4^3*x5*x6^3*x7 + -x4^3*x5*x6^3*x8*x9^3 + x4^3*x5*x6^3*x8*x9^2 + x4^3*x5*x6^3*x9^3 + -x4^3*x5*x6^3*x9^2 + -x4^3*x5*x6^2*x7^3*x8^2*x9 + x4^3*x5*x6^2*x7^3*x8^2 + x4^3*x5*x6^2*x7^3*x9 + -x4^3*x5*x6^2*x7^3 + x4^3*x5*x6^2*x7^2*x8^2*x9 + -x4^3*x5*x6^2*x7^2*x8^2 + -x4^3*x5*x6^2*x7^2*x9 + x4^3*x5*x6^2*x7^2 + -x4^3*x5*x7^4*x8*x9 + x4^3*x5*x7^4*x8 + x4^3*x5*x7^4*x9 + -x4^3*x5*x7^4 + x4^3*x5*x7^3*x8*x9 + -x4^3*x5*x7^3*x8 + -x4^3*x5*x7^3*x9 + x4^3*x5*x7^3 + x4^3*x5*x7*x8^2*x9 + -x4^3*x5*x7*x8^2 + -x4^3*x5*x7*x8*x9^3 + x4^3*x5*x7*x8*x9^2 + x4^3*x5*x7*x9^3 + -x4^3*x5*x7*x9^2 + -x4^3*x5*x7*x9 + x4^3*x5*x7 + -x4^3*x5*x8^2*x9 + x4^3*x5*x8^2 + x4^3*x5*x8*x9^3 + -x4^3*x5*x8*x9^2 + -x4^3*x5*x9^3 + x4^3*x5*x9^2 + x4^3*x5*x9 + -x4^3*x5 + -x4^3*x6^5*x7^2*x8^2*x9 + x4^3*x6^5*x7^2*x8^2 + x4^3*x6^5*x7^2*x9 + -x4^3*x6^5*x7^2 + x4^3*x6^5*x7*x8^2*x9 + -x4^3*x6^5*x7*x8^2 + -x4^3*x6^5*x7*x9 + x4^3*x6^5*x7 + -x4^3*x6^4*x7^3*x8^2*x9 + x4^3*x6^4*x7^3*x8^2 + x4^3*x6^4*x7^3*x9 + -x4^3*x6^4*x7^3 + x4^3*x6^4*x7^2*x8^2*x9 + -x4^3*x6^4*x7^2*x8^2 + -x4^3*x6^4*x7^2*x9 + x4^3*x6^4*x7^2 + -x4^3*x6^3*x7^4*x8*x9 + x4^3*x6^3*x7^4*x8 + x4^3*x6^3*x7^4*x9 + -x4^3*x6^3*x7^4 + x4^3*x6^3*x7^3*x8*x9 + -x4^3*x6^3*x7^3*x8 + -x4^3*x6^3*x7^3*x9 + x4^3*x6^3*x7^3 + -x4^3*x6^3*x7*x8*x9^3 + x4^3*x6^3*x7*x8*x9^2 + x4^3*x6^3*x7*x9^3 + -x4^3*x6^3*x7*x9^2 + x4^3*x6^3*x8*x9^3 + -x4^3*x6^3*x8*x9^2 + -x4^3*x6^3*x9^3 + x4^3*x6^3*x9^2 + x4^3*x7^4*x8*x9 + -x4^3*x7^4*x8 + -x4^3*x7^4*x9 + x4^3*x7^4 + x4^3*x7^3*x8^2*x9 + -x4^3*x7^3*x8^2 + -x4^3*x7^3*x8*x9 + x4^3*x7^3*x8 + -x4^3*x7*x8^2*x9 + x4^3*x7*x8^2 + x4^3*x7*x8*x9^3 + -x4^3*x7*x8*x9^2 + -x4^3*x7*x9^3 + x4^3*x7*x9^2 + x4^3*x7*x9 + -x4^3*x7 + -x4^3*x8*x9^3 + x4^3*x8*x9^2 + x4^3*x9^3 + -x4^3*x9^2 + x4^2*x5^7*x6*x7*x8*x9 + -x4^2*x5^7*x6*x7*x8 + -x4^2*x5^7*x6*x7*x9 + x4^2*x5^7*x6*x7 + -x4^2*x5^7*x6*x8*x9 + x4^2*x5^7*x6*x8 + x4^2*x5^7*x6*x9 + -x4^2*x5^7*x6 + -x4^2*x5^7*x7*x8*x9 + x4^2*x5^7*x7*x8 + x4^2*x5^7*x7*x9 + -x4^2*x5^7*x7 + x4^2*x5^7*x8*x9 + -x4^2*x5^7*x8 + -x4^2*x5^7*x9 + x4^2*x5^7 + x4^2*x5^5*x6^2*x7*x8*x9 + -x4^2*x5^5*x6^2*x7*x8 + -x4^2*x5^5*x6^2*x7*x9 + x4^2*x5^5*x6^2*x7 + -x4^2*x5^5*x6^2*x8*x9 + x4^2*x5^5*x6^2*x8 + x4^2*x5^5*x6^2*x9 + -x4^2*x5^5*x6^2 + x4^2*x5^5*x6*x7^2*x8*x9 + -x4^2*x5^5*x6*x7^2*x8 + -x4^2*x5^5*x6*x7^2*x9 + x4^2*x5^5*x6*x7^2 + -2*x4^2*x5^5*x6*x7*x8*x9 + 2*x4^2*x5^5*x6*x7*x8 + 2*x4^2*x5^5*x6*x7*x9 + -2*x4^2*x5^5*x6*x7 + x4^2*x5^5*x6*x8*x9 + -x4^2*x5^5*x6*x8 + -x4^2*x5^5*x6*x9 + x4^2*x5^5*x6 + -x4^2*x5^5*x7^2*x8*x9 + x4^2*x5^5*x7^2*x8 + x4^2*x5^5*x7^2*x9 + -x4^2*x5^5*x7^2 + x4^2*x5^5*x7*x8*x9 + -x4^2*x5^5*x7*x8 + -x4^2*x5^5*x7*x9 + x4^2*x5^5*x7 + -x4^2*x5^3*x6^2*x7*x8*x9 + x4^2*x5^3*x6^2*x7*x8 + x4^2*x5^3*x6^2*x7*x9 + -x4^2*x5^3*x6^2*x7 + x4^2*x5^3*x6^2*x8*x9 + -x4^2*x5^3*x6^2*x8 + -x4^2*x5^3*x6^2*x9 + x4^2*x5^3*x6^2 + -x4^2*x5^3*x6*x7^2*x8*x9 + x4^2*x5^3*x6*x7^2*x8 + x4^2*x5^3*x6*x7^2*x9 + -x4^2*x5^3*x6*x7^2 + x4^2*x5^3*x6*x7*x8*x9 + -x4^2*x5^3*x6*x7*x8 + -x4^2*x5^3*x6*x7*x9 + x4^2*x5^3*x6*x7 + x4^2*x5^3*x7^2*x8*x9 + -x4^2*x5^3*x7^2*x8 + -x4^2*x5^3*x7^2*x9 + x4^2*x5^3*x7^2 + -x4^2*x5^3*x8*x9 + x4^2*x5^3*x8 + x4^2*x5^3*x9 + -x4^2*x5^3 + x4*x5^8*x6*x7*x8*x9 + -x4*x5^8*x6*x7*x8 + -x4*x5^8*x6*x7*x9 + x4*x5^8*x6*x7 + -x4*x5^8*x6*x8*x9 + x4*x5^8*x6*x8 + x4*x5^8*x6*x9 + -x4*x5^8*x6 + -x4*x5^8*x7*x8*x9 + x4*x5^8*x7*x8 + x4*x5^8*x7*x9 + -x4*x5^8*x7 + x4*x5^8*x8*x9 + -x4*x5^8*x8 + -x4*x5^8*x9 + x4*x5^8 + x4*x5^7*x6*x7^2*x8*x9 + -x4*x5^7*x6*x7^2*x8 + -x4*x5^7*x6*x7^2*x9 + x4*x5^7*x6*x7^2 + -2*x4*x5^7*x6*x7*x8*x9 + 2*x4*x5^7*x6*x7*x8 + 2*x4*x5^7*x6*x7*x9 + -2*x4*x5^7*x6*x7 + x4*x5^7*x6*x8*x9 + -x4*x5^7*x6*x8 + -x4*x5^7*x6*x9 + x4*x5^7*x6 + -x4*x5^7*x7^2*x8*x9 + x4*x5^7*x7^2*x8 + x4*x5^7*x7^2*x9 + -x4*x5^7*x7^2 + 2*x4*x5^7*x7*x8*x9 + -2*x4*x5^7*x7*x8 + -2*x4*x5^7*x7*x9 + 2*x4*x5^7*x7 + -x4*x5^7*x8*x9 + x4*x5^7*x8 + x4*x5^7*x9 + -x4*x5^7 + x4*x5^6*x6^2*x7*x8*x9 + -x4*x5^6*x6^2*x7*x8 + -x4*x5^6*x6^2*x7*x9 + x4*x5^6*x6^2*x7 + -x4*x5^6*x6^2*x8*x9 + x4*x5^6*x6^2*x8 + x4*x5^6*x6^2*x9 + -x4*x5^6*x6^2 + -x4*x5^6*x6*x7*x8*x9 + x4*x5^6*x6*x7*x8 + x4*x5^6*x6*x7*x9 + -x4*x5^6*x6*x7 + x4*x5^6*x6*x8*x9 + -x4*x5^6*x6*x8 + -x4*x5^6*x6*x9 + x4*x5^6*x6 + -x4*x5^5*x6^2*x7*x8*x9 + x4*x5^5*x6^2*x7*x8 + x4*x5^5*x6^2*x7*x9 + -x4*x5^5*x6^2*x7 + x4*x5^5*x6^2*x8*x9 + -x4*x5^5*x6^2*x8 + -x4*x5^5*x6^2*x9 + x4*x5^5*x6^2 + x4*x5^5*x6*x7^2*x8^2*x9 + -x4*x5^5*x6*x7^2*x8^2 + x4*x5^5*x6*x7^2*x8*x9^2 + -3*x4*x5^5*x6*x7^2*x8*x9 + 2*x4*x5^5*x6*x7^2*x8 + -x4*x5^5*x6*x7^2*x9^2 + 2*x4*x5^5*x6*x7^2*x9 + -x4*x5^5*x6*x7^2 + x4*x5^5*x6*x7*x8*x9^4 + -x4*x5^5*x6*x7*x8*x9^2 + 2*x4*x5^5*x6*x7*x8*x9 + -2*x4*x5^5*x6*x7*x8 + -x4*x5^5*x6*x7*x9^4 + x4*x5^5*x6*x7*x9^2 + -2*x4*x5^5*x6*x7*x9 + 2*x4*x5^5*x6*x7 + -x4*x5^5*x6*x8^2*x9 + x4*x5^5*x6*x8^2 + -x4*x5^5*x6*x8*x9^4 + x4*x5^5*x6*x8*x9 + x4*x5^5*x6*x9^4 + -x4*x5^5*x6 + -x4*x5^5*x7^2*x8^2*x9 + x4*x5^5*x7^2*x8^2 + -x4*x5^5*x7^2*x8*x9^2 + 3*x4*x5^5*x7^2*x8*x9 + -2*x4*x5^5*x7^2*x8 + x4*x5^5*x7^2*x9^2 + -2*x4*x5^5*x7^2*x9 + x4*x5^5*x7^2 + -x4*x5^5*x7*x8*x9^4 + x4*x5^5*x7*x8*x9^2 + -x4*x5^5*x7*x8*x9 + x4*x5^5*x7*x8 + x4*x5^5*x7*x9^4 + -x4*x5^5*x7*x9^2 + x4*x5^5*x7*x9 + -x4*x5^5*x7 + x4*x5^5*x8^2*x9 + -x4*x5^5*x8^2 + x4*x5^5*x8*x9^4 + -2*x4*x5^5*x8*x9 + x4*x5^5*x8 + -x4*x5^5*x9^4 + x4*x5^5*x9 + x4*x5^4*x6^2*x7^3*x8*x9 + -x4*x5^4*x6^2*x7^3*x8 + -x4*x5^4*x6^2*x7^3*x9 + x4*x5^4*x6^2*x7^3 + -x4*x5^4*x6^2*x7*x8*x9 + x4*x5^4*x6^2*x7*x8 + x4*x5^4*x6^2*x7*x9 + -x4*x5^4*x6^2*x7 + x4*x5^4*x6*x7^2*x8^2*x9^2 + -x4*x5^4*x6*x7^2*x8^2*x9 + -x4*x5^4*x6*x7^2*x8*x9^2 + x4*x5^4*x6*x7^2*x8 + x4*x5^4*x6*x7^2*x9 + -x4*x5^4*x6*x7^2 + x4*x5^4*x6*x7*x8*x9 + -x4*x5^4*x6*x7*x8 + -x4*x5^4*x6*x7*x9 + x4*x5^4*x6*x7 + -x4*x5^4*x6*x8^2*x9^2 + x4*x5^4*x6*x8^2*x9 + x4*x5^4*x6*x8*x9^2 + -x4*x5^4*x6*x8*x9 + -x4*x5^4*x7^3*x8*x9 + x4*x5^4*x7^3*x8 + x4*x5^4*x7^3*x9 + -x4*x5^4*x7^3 + -x4*x5^4*x7^2*x8^2*x9^2 + x4*x5^4*x7^2*x8^2*x9 + x4*x5^4*x7^2*x8*x9^2 + -x4*x5^4*x7^2*x8 + -x4*x5^4*x7^2*x9 + x4*x5^4*x7^2 + x4*x5^4*x8^2*x9^2 + -x4*x5^4*x8^2*x9 + -x4*x5^4*x8*x9^2 + x4*x5^4*x8*x9 + x4*x5^3*x6^2*x7^2*x8^2*x9^2 + -x4*x5^3*x6^2*x7^2*x8^2 + -x4*x5^3*x6^2*x7^2*x8*x9 + x4*x5^3*x6^2*x7^2*x8 + -x4*x5^3*x6^2*x7^2*x9^2 + x4*x5^3*x6^2*x7^2*x9 + -x4*x5^3*x6^2*x7*x8^2*x9 + x4*x5^3*x6^2*x7*x8^2 + x4*x5^3*x6^2*x7*x8*x9^3 + -x4*x5^3*x6^2*x7*x8*x9^2 + x4*x5^3*x6^2*x7*x8*x9 + -x4*x5^3*x6^2*x7*x8 + -x4*x5^3*x6^2*x7*x9^3 + x4*x5^3*x6^2*x7*x9^2 + -x4*x5^3*x6^2*x8^2*x9^2 + x4*x5^3*x6^2*x8^2*x9 + -x4*x5^3*x6^2*x8*x9^3 + x4*x5^3*x6^2*x8*x9^2 + x4*x5^3*x6^2*x9^3 + -x4*x5^3*x6^2*x9 + -x4*x5^3*x6*x7^2*x8^2*x9^2 + -x4*x5^3*x6*x7^2*x8^2*x9 + 2*x4*x5^3*x6*x7^2*x8^2 + 2*x4*x5^3*x6*x7^2*x8*x9 + -2*x4*x5^3*x6*x7^2*x8 + x4*x5^3*x6*x7^2*x9^2 + -x4*x5^3*x6*x7^2*x9 + x4*x5^3*x6*x7*x8^2*x9 + -x4*x5^3*x6*x7*x8^2 + x4*x5^3*x6*x7*x8*x9^5 + -x4*x5^3*x6*x7*x8*x9^4 + -x4*x5^3*x6*x7*x8*x9^3 + x4*x5^3*x6*x7*x8*x9^2 + -x4*x5^3*x6*x7*x8*x9 + x4*x5^3*x6*x7*x8 + -x4*x5^3*x6*x7*x9^5 + x4*x5^3*x6*x7*x9^4 + x4*x5^3*x6*x7*x9^3 + -x4*x5^3*x6*x7*x9^2 + x4*x5^3*x6*x8^2*x9^2 + -x4*x5^3*x6*x8^2 + -x4*x5^3*x6*x8*x9^5 + x4*x5^3*x6*x8*x9^4 + x4*x5^3*x6*x8*x9^3 + -x4*x5^3*x6*x8*x9^2 + -x4*x5^3*x6*x8*x9 + x4*x5^3*x6*x8 + x4*x5^3*x6*x9^5 + -x4*x5^3*x6*x9^4 + -x4*x5^3*x6*x9^3 + x4*x5^3*x6*x9 + x4*x5^3*x7^2*x8^2*x9 + -x4*x5^3*x7^2*x8^2 + -x4*x5^3*x7^2*x8*x9 + x4*x5^3*x7^2*x8 + -x4*x5^3*x7*x8*x9^5 + x4*x5^3*x7*x8*x9^4 + x4*x5^3*x7*x9^5 + -x4*x5^3*x7*x9^4 + -x4*x5^3*x8^2*x9 + x4*x5^3*x8^2 + x4*x5^3*x8*x9^5 + -x4*x5^3*x8*x9^4 + x4*x5^3*x8*x9 + -x4*x5^3*x8 + -x4*x5^3*x9^5 + x4*x5^3*x9^4 + x4*x5^2*x6^4*x7*x8*x9^2 + -x4*x5^2*x6^4*x7*x8*x9 + -x4*x5^2*x6^4*x7*x9^2 + x4*x5^2*x6^4*x7*x9 + -x4*x5^2*x6^4*x8*x9^2 + x4*x5^2*x6^4*x8*x9 + x4*x5^2*x6^4*x9^2 + -x4*x5^2*x6^4*x9 + x4*x5^2*x6^3*x7^3*x8^2*x9 + -x4*x5^2*x6^3*x7^3*x8^2 + x4*x5^2*x6^3*x7^3*x8*x9^2 + -x4*x5^2*x6^3*x7^3*x8*x9 + -x4*x5^2*x6^3*x7^3*x9^2 + x4*x5^2*x6^3*x7^3 + -x4*x5^2*x6^3*x7^2*x8^2*x9 + x4*x5^2*x6^3*x7^2*x8^2 + x4*x5^2*x6^3*x7^2*x9 + -x4*x5^2*x6^3*x7^2 + x4*x5^2*x6^3*x7*x8^2*x9^2 + -x4*x5^2*x6^3*x7*x8^2*x9 + x4*x5^2*x6^3*x7*x8*x9^3 + -3*x4*x5^2*x6^3*x7*x8*x9^2 + 2*x4*x5^2*x6^3*x7*x8*x9 + -x4*x5^2*x6^3*x7*x9^3 + 2*x4*x5^2*x6^3*x7*x9^2 + -x4*x5^2*x6^3*x7*x9 + -x4*x5^2*x6^3*x8^2*x9^2 + x4*x5^2*x6^3*x8^2*x9 + -x4*x5^2*x6^3*x8*x9^3 + 2*x4*x5^2*x6^3*x8*x9^2 + -x4*x5^2*x6^3*x8*x9 + x4*x5^2*x6^3*x9^3 + -x4*x5^2*x6^3*x9^2 + -x4*x5^2*x6^2*x7^3*x8^2*x9 + x4*x5^2*x6^2*x7^3*x8^2 + -x4*x5^2*x6^2*x7^3*x8*x9 + x4*x5^2*x6^2*x7^3*x8 + 2*x4*x5^2*x6^2*x7^3*x9 + -2*x4*x5^2*x6^2*x7^3 + -x4*x5^2*x6^2*x7^2*x8*x9^2 + 2*x4*x5^2*x6^2*x7^2*x8*x9 + -x4*x5^2*x6^2*x7^2*x8 + x4*x5^2*x6^2*x7^2*x9^2 + -2*x4*x5^2*x6^2*x7^2*x9 + x4*x5^2*x6^2*x7^2 + -x4*x5^2*x6^2*x7*x8^2*x9^2 + 2*x4*x5^2*x6^2*x7*x8^2*x9 + -x4*x5^2*x6^2*x7*x8^2 + -x4*x5^2*x6^2*x7*x8*x9^3 + 2*x4*x5^2*x6^2*x7*x8*x9^2 + -x4*x5^2*x6^2*x7*x8*x9 + x4*x5^2*x6^2*x7*x9^3 + -x4*x5^2*x6^2*x7*x9^2 + -x4*x5^2*x6^2*x7*x9 + x4*x5^2*x6^2*x7 + x4*x5^2*x6^2*x8^2*x9^2 + -x4*x5^2*x6^2*x8^2*x9 + x4*x5^2*x6^2*x8*x9^3 + -x4*x5^2*x6^2*x8*x9^2 + -x4*x5^2*x6^2*x9^3 + x4*x5^2*x6^2*x9 + x4*x5^2*x6*x7^2*x8^2*x9 + -x4*x5^2*x6*x7^2*x8^2 + -x4*x5^2*x6*x7^2*x9 + x4*x5^2*x6*x7^2 + -x4*x5^2*x6*x7*x8^2*x9 + x4*x5^2*x6*x7*x8^2 + x4*x5^2*x6*x7*x9 + -x4*x5^2*x6*x7 + -x4*x5^2*x7^3*x8*x9^2 + 2*x4*x5^2*x7^3*x8*x9 + -x4*x5^2*x7^3*x8 + x4*x5^2*x7^3*x9^2 + -2*x4*x5^2*x7^3*x9 + x4*x5^2*x7^3 + x4*x5^2*x7^2*x8*x9^2 + -2*x4*x5^2*x7^2*x8*x9 + x4*x5^2*x7^2*x8 + -x4*x5^2*x7^2*x9^2 + 2*x4*x5^2*x7^2*x9 + -x4*x5^2*x7^2 + x4*x5*x6^8*x7*x8*x9 + -x4*x5*x6^8*x7*x8 + -x4*x5*x6^8*x7*x9 + x4*x5*x6^8*x7 + -x4*x5*x6^8*x8*x9 + x4*x5*x6^8*x8 + x4*x5*x6^8*x9 + -x4*x5*x6^8 + -x4*x5*x6^6*x7*x8*x9 + x4*x5*x6^6*x7*x8 + x4*x5*x6^6*x7*x9 + -x4*x5*x6^6*x7 + x4*x5*x6^6*x8*x9 + -x4*x5*x6^6*x8 + -x4*x5*x6^6*x9 + x4*x5*x6^6 + x4*x5*x6^4*x7^4*x8*x9 + -x4*x5*x6^4*x7^4*x8 + -x4*x5*x6^4*x7^4*x9 + x4*x5*x6^4*x7^4 + -x4*x5*x6^4*x7^3*x8*x9 + x4*x5*x6^4*x7^3*x8 + x4*x5*x6^4*x7^3*x9 + -x4*x5*x6^4*x7^3 + x4*x5*x6^4*x7^2*x8*x9^2 + -x4*x5*x6^4*x7^2*x8*x9 + -x4*x5*x6^4*x7^2*x9^2 + x4*x5*x6^4*x7^2*x9 + x4*x5*x6^4*x7*x8^2*x9^2 + -x4*x5*x6^4*x7*x8^2*x9 + x4*x5*x6^4*x7*x8*x9^3 + -3*x4*x5*x6^4*x7*x8*x9^2 + 2*x4*x5*x6^4*x7*x8*x9 + -x4*x5*x6^4*x7*x9^3 + 2*x4*x5*x6^4*x7*x9^2 + -x4*x5*x6^4*x7*x9 + -x4*x5*x6^4*x8^2*x9^2 + x4*x5*x6^4*x8^2*x9 + -x4*x5*x6^4*x8*x9^3 + 2*x4*x5*x6^4*x8*x9^2 + -x4*x5*x6^4*x8*x9 + x4*x5*x6^4*x9^3 + -x4*x5*x6^4*x9^2 + -x4*x5*x6^3*x7^4*x8*x9 + x4*x5*x6^3*x7^4*x8 + x4*x5*x6^3*x7^4*x9 + -x4*x5*x6^3*x7^4 + -x4*x5*x6^3*x7^3*x8^2*x9 + x4*x5*x6^3*x7^3*x8^2 + x4*x5*x6^3*x7^3*x8*x9 + -x4*x5*x6^3*x7^3*x8 + x4*x5*x6^3*x7^2*x8^2*x9 + -x4*x5*x6^3*x7^2*x8^2 + -x4*x5*x6^3*x7^2*x8*x9^2 + x4*x5*x6^3*x7^2*x8*x9 + x4*x5*x6^3*x7^2*x9^2 + -2*x4*x5*x6^3*x7^2*x9 + x4*x5*x6^3*x7^2 + -2*x4*x5*x6^3*x7*x8^2*x9^2 + 2*x4*x5*x6^3*x7*x8^2*x9 + -2*x4*x5*x6^3*x7*x8*x9^3 + 4*x4*x5*x6^3*x7*x8*x9^2 + -2*x4*x5*x6^3*x7*x8*x9 + 2*x4*x5*x6^3*x7*x9^3 + -2*x4*x5*x6^3*x7*x9^2 + 2*x4*x5*x6^3*x8^2*x9^2 + -2*x4*x5*x6^3*x8^2*x9 + 2*x4*x5*x6^3*x8*x9^3 + -3*x4*x5*x6^3*x8*x9^2 + x4*x5*x6^3*x8*x9 + -2*x4*x5*x6^3*x9^3 + x4*x5*x6^3*x9^2 + x4*x5*x6^3*x9 + x4*x5*x6^2*x7^4*x8*x9^2 + -x4*x5*x6^2*x7^4*x8*x9 + -x4*x5*x6^2*x7^4*x9^2 + x4*x5*x6^2*x7^4*x9 + x4*x5*x6^2*x7^3*x8^2*x9 + -x4*x5*x6^2*x7^3*x8^2 + -x4*x5*x6^2*x7^3*x8*x9^2 + x4*x5*x6^2*x7^3*x8*x9 + x4*x5*x6^2*x7^3*x9^2 + -2*x4*x5*x6^2*x7^3*x9 + x4*x5*x6^2*x7^3 + -x4*x5*x6^2*x7^2*x8^2*x9 + x4*x5*x6^2*x7^2*x8^2 + x4*x5*x6^2*x7^2*x9 + -x4*x5*x6^2*x7^2 + -x4*x5*x7^4*x8*x9^2 + x4*x5*x7^4*x8*x9 + x4*x5*x7^4*x9^2 + -x4*x5*x7^4*x9 + x4*x5*x7^3*x8*x9^2 + -x4*x5*x7^3*x8*x9 + -x4*x5*x7^3*x9^2 + x4*x5*x7^3*x9 + x4*x5*x7*x8^2*x9^2 + -x4*x5*x7*x8^2*x9 + x4*x5*x7*x8*x9^3 + -x4*x5*x7*x8*x9^2 + -x4*x5*x7*x9^3 + x4*x5*x7*x9 + -x4*x5*x8^2*x9^2 + x4*x5*x8^2*x9 + -x4*x5*x8*x9^3 + x4*x5*x8*x9^2 + x4*x5*x9^3 + -x4*x5*x9 + -x4*x6^8*x7*x8*x9 + x4*x6^8*x7*x8 + x4*x6^8*x7*x9 + -x4*x6^8*x7 + x4*x6^8*x8*x9 + -x4*x6^8*x8 + -x4*x6^8*x9 + x4*x6^8 + x4*x6^6*x7*x8*x9 + -x4*x6^6*x7*x8 + -x4*x6^6*x7*x9 + x4*x6^6*x7 + -x4*x6^6*x8*x9 + x4*x6^6*x8 + x4*x6^6*x9 + -x4*x6^6 + -x4*x6^4*x7^4*x8*x9 + x4*x6^4*x7^4*x8 + x4*x6^4*x7^4*x9 + -x4*x6^4*x7^4 + x4*x6^4*x7^3*x8*x9 + -x4*x6^4*x7^3*x8 + -x4*x6^4*x7^3*x9 + x4*x6^4*x7^3 + -x4*x6^4*x7^2*x8*x9^2 + x4*x6^4*x7^2*x8*x9 + x4*x6^4*x7^2*x9^2 + -x4*x6^4*x7^2*x9 + -x4*x6^4*x7*x8^2*x9^2 + x4*x6^4*x7*x8^2*x9 + -x4*x6^4*x7*x8*x9^3 + 2*x4*x6^4*x7*x8*x9^2 + -x4*x6^4*x7*x8*x9 + x4*x6^4*x7*x9^3 + -x4*x6^4*x7*x9^2 + x4*x6^4*x8^2*x9^2 + -x4*x6^4*x8^2*x9 + x4*x6^4*x8*x9^3 + -x4*x6^4*x8*x9^2 + -x4*x6^4*x9^3 + x4*x6^4*x9 + x4*x6^3*x7^4*x8*x9 + -x4*x6^3*x7^4*x8 + -x4*x6^3*x7^4*x9 + x4*x6^3*x7^4 + -x4*x6^3*x7^3*x8*x9^2 + x4*x6^3*x7^3*x8 + x4*x6^3*x7^3*x9^2 + -x4*x6^3*x7^3 + x4*x6^3*x7^2*x8*x9^2 + -x4*x6^3*x7^2*x8*x9 + -x4*x6^3*x7^2*x9^2 + x4*x6^3*x7^2*x9 + x4*x6^3*x7*x8^2*x9^2 + -x4*x6^3*x7*x8^2*x9 + x4*x6^3*x7*x8*x9^3 + -x4*x6^3*x7*x8*x9^2 + -x4*x6^3*x7*x9^3 + x4*x6^3*x7*x9 + -x4*x6^3*x8^2*x9^2 + x4*x6^3*x8^2*x9 + -x4*x6^3*x8*x9^3 + x4*x6^3*x8*x9^2 + x4*x6^3*x9^3 + -x4*x6^3*x9 + -x4*x6^2*x7^4*x8*x9^2 + x4*x6^2*x7^4*x8*x9 + x4*x6^2*x7^4*x9^2 + -x4*x6^2*x7^4*x9 + x4*x6^2*x7^3*x8*x9^2 + -x4*x6^2*x7^3*x8*x9 + -x4*x6^2*x7^3*x9^2 + x4*x6^2*x7^3*x9 + -x4*x6^2*x7^2*x8^2*x9^2 + x4*x6^2*x7^2*x8^2*x9 + x4*x6^2*x7^2*x8*x9^2 + -x4*x6^2*x7^2*x8*x9 + x4*x6^2*x7*x8^2*x9^2 + -x4*x6^2*x7*x8^2*x9 + -x4*x6^2*x7*x8*x9^2 + x4*x6^2*x7*x8*x9 + -x4*x6*x7*x8*x9^5 + x4*x6*x7*x8*x9^3 + x4*x6*x7*x9^5 + -x4*x6*x7*x9^3 + x4*x6*x8*x9^5 + -x4*x6*x8*x9^3 + -x4*x6*x9^5 + x4*x6*x9^3 + x4*x7^4*x8*x9^2 + -x4*x7^4*x8*x9 + -x4*x7^4*x9^2 + x4*x7^4*x9 + x4*x7^2*x8^2*x9^2 + -x4*x7^2*x8^2*x9 + -x4*x7^2*x8*x9^2 + x4*x7^2*x8*x9 + -x4*x7*x8^2*x9^2 + x4*x7*x8^2*x9 + x4*x7*x8*x9^5 + -x4*x7*x8*x9^3 + -x4*x7*x9^5 + x4*x7*x9^3 + x4*x7*x9^2 + -x4*x7*x9 + -x4*x8*x9^5 + x4*x8*x9^3 + x4*x9^5 + -x4*x9^3 + -x5^8*x6*x7*x8*x9 + x5^8*x6*x7*x8 + x5^8*x6*x7*x9 + -x5^8*x6*x7 + x5^8*x6*x8*x9 + -x5^8*x6*x8 + -x5^8*x6*x9 + x5^8*x6 + x5^8*x7*x8*x9 + -x5^8*x7*x8 + -x5^8*x7*x9 + x5^8*x7 + -x5^8*x8*x9 + x5^8*x8 + x5^8*x9 + -x5^8 + -x5^7*x6*x7^2*x8*x9 + x5^7*x6*x7^2*x8 + x5^7*x6*x7^2*x9 + -x5^7*x6*x7^2 + x5^7*x6*x7*x8*x9 + -x5^7*x6*x7*x8 + -x5^7*x6*x7*x9 + x5^7*x6*x7 + x5^7*x7^2*x8*x9 + -x5^7*x7^2*x8 + -x5^7*x7^2*x9 + x5^7*x7^2 + -x5^7*x7*x8*x9 + x5^7*x7*x8 + x5^7*x7*x9 + -x5^7*x7 + -x5^6*x6^2*x7*x8*x9 + x5^6*x6^2*x7*x8 + x5^6*x6^2*x7*x9 + -x5^6*x6^2*x7 + x5^6*x6^2*x8*x9 + -x5^6*x6^2*x8 + -x5^6*x6^2*x9 + x5^6*x6^2 + x5^6*x6*x7*x8*x9 + -x5^6*x6*x7*x8 + -x5^6*x6*x7*x9 + x5^6*x6*x7 + -x5^6*x6*x8*x9 + x5^6*x6*x8 + x5^6*x6*x9 + -x5^6*x6 + -x5^5*x6*x7^2*x8^2*x9 + x5^5*x6*x7^2*x8^2 + -x5^5*x6*x7^2*x8*x9^2 + 2*x5^5*x6*x7^2*x8*x9 + -x5^5*x6*x7^2*x8 + x5^5*x6*x7^2*x9^2 + -x5^5*x6*x7^2*x9 + -x5^5*x6*x7*x8*x9^4 + x5^5*x6*x7*x8*x9^2 + x5^5*x6*x7*x9^4 + -x5^5*x6*x7*x9^2 + x5^5*x6*x8^2*x9 + -x5^5*x6*x8^2 + x5^5*x6*x8*x9^4 + -2*x5^5*x6*x8*x9 + x5^5*x6*x8 + -x5^5*x6*x9^4 + x5^5*x6*x9 + x5^5*x7^2*x8^2*x9 + -x5^5*x7^2*x8^2 + x5^5*x7^2*x8*x9^2 + -2*x5^5*x7^2*x8*x9 + x5^5*x7^2*x8 + -x5^5*x7^2*x9^2 + x5^5*x7^2*x9 + x5^5*x7*x8*x9^4 + -x5^5*x7*x8*x9^2 + -x5^5*x7*x9^4 + x5^5*x7*x9^2 + -x5^5*x8^2*x9 + x5^5*x8^2 + -x5^5*x8*x9^4 + 2*x5^5*x8*x9 + -x5^5*x8 + x5^5*x9^4 + -x5^5*x9 + -x5^4*x6^2*x7^3*x8*x9 + x5^4*x6^2*x7^3*x8 + x5^4*x6^2*x7^3*x9 + -x5^4*x6^2*x7^3 + x5^4*x6^2*x7*x8*x9 + -x5^4*x6^2*x7*x8 + -x5^4*x6^2*x7*x9 + x5^4*x6^2*x7 + -x5^4*x6*x7^2*x8^2*x9^2 + x5^4*x6*x7^2*x8^2*x9 + x5^4*x6*x7^2*x8*x9^2 + -x5^4*x6*x7^2*x8 + -x5^4*x6*x7^2*x9 + x5^4*x6*x7^2 + -x5^4*x6*x7*x8*x9 + x5^4*x6*x7*x8 + x5^4*x6*x7*x9 + -x5^4*x6*x7 + x5^4*x6*x8^2*x9^2 + -x5^4*x6*x8^2*x9 + -x5^4*x6*x8*x9^2 + x5^4*x6*x8*x9 + x5^4*x7^3*x8*x9 + -x5^4*x7^3*x8 + -x5^4*x7^3*x9 + x5^4*x7^3 + x5^4*x7^2*x8^2*x9^2 + -x5^4*x7^2*x8^2*x9 + -x5^4*x7^2*x8*x9^2 + x5^4*x7^2*x8 + x5^4*x7^2*x9 + -x5^4*x7^2 + -x5^4*x8^2*x9^2 + x5^4*x8^2*x9 + x5^4*x8*x9^2 + -x5^4*x8*x9 + -x5^3*x6^2*x7^2*x8^2*x9^2 + x5^3*x6^2*x7^2*x8^2 + x5^3*x6^2*x7^2*x8*x9 + -x5^3*x6^2*x7^2*x8 + x5^3*x6^2*x7^2*x9^2 + -x5^3*x6^2*x7^2*x9 + -x5^3*x6^2*x7*x8*x9^3 + x5^3*x6^2*x7*x8*x9^2 + x5^3*x6^2*x7*x9^3 + -x5^3*x6^2*x7*x9^2 + x5^3*x6^2*x8^2*x9^2 + -x5^3*x6^2*x8^2 + x5^3*x6^2*x8*x9^3 + -x5^3*x6^2*x8*x9^2 + -x5^3*x6^2*x8*x9 + x5^3*x6^2*x8 + -x5^3*x6^2*x9^3 + x5^3*x6^2*x9 + x5^3*x6*x7^2*x8^2*x9^2 + -x5^3*x6*x7^2*x8^2 + -x5^3*x6*x7^2*x8*x9 + x5^3*x6*x7^2*x8 + -x5^3*x6*x7^2*x9^2 + x5^3*x6*x7^2*x9 + -x5^3*x6*x7*x8*x9^5 + x5^3*x6*x7*x8*x9^4 + x5^3*x6*x7*x8*x9^3 + -x5^3*x6*x7*x8*x9^2 + x5^3*x6*x7*x9^5 + -x5^3*x6*x7*x9^4 + -x5^3*x6*x7*x9^3 + x5^3*x6*x7*x9^2 + -x5^3*x6*x8^2*x9^2 + x5^3*x6*x8^2 + x5^3*x6*x8*x9^5 + -x5^3*x6*x8*x9^4 + -x5^3*x6*x8*x9^3 + x5^3*x6*x8*x9^2 + x5^3*x6*x8*x9 + -x5^3*x6*x8 + -x5^3*x6*x9^5 + x5^3*x6*x9^4 + x5^3*x6*x9^3 + -x5^3*x6*x9 + x5^3*x7*x8*x9^5 + -x5^3*x7*x8*x9^4 + -x5^3*x7*x9^5 + x5^3*x7*x9^4 + -x5^3*x8*x9^5 + x5^3*x8*x9^4 + x5^3*x9^5 + -x5^3*x9^4 + -x5^2*x6^4*x7*x8^2*x9 + x5^2*x6^4*x7*x8^2 + -x5^2*x6^4*x7*x8*x9^2 + x5^2*x6^4*x7*x8*x9 + x5^2*x6^4*x7*x9^2 + -x5^2*x6^4*x7 + x5^2*x6^4*x8^2*x9 + -x5^2*x6^4*x8^2 + x5^2*x6^4*x8*x9^2 + -x5^2*x6^4*x8*x9 + -x5^2*x6^4*x9^2 + x5^2*x6^4 + -x5^2*x6^3*x7^3*x8^2*x9 + x5^2*x6^3*x7^3*x8^2 + -x5^2*x6^3*x7^3*x8*x9^2 + x5^2*x6^3*x7^3*x8*x9 + x5^2*x6^3*x7^3*x9^2 + -x5^2*x6^3*x7^3 + -x5^2*x6^3*x7*x8^2*x9^2 + 2*x5^2*x6^3*x7*x8^2*x9 + -x5^2*x6^3*x7*x8^2 + -x5^2*x6^3*x7*x8*x9^3 + 3*x5^2*x6^3*x7*x8*x9^2 + -2*x5^2*x6^3*x7*x8*x9 + x5^2*x6^3*x7*x9^3 + -2*x5^2*x6^3*x7*x9^2 + x5^2*x6^3*x7 + x5^2*x6^3*x8^2*x9^2 + -x5^2*x6^3*x8^2*x9 + x5^2*x6^3*x8*x9^3 + -2*x5^2*x6^3*x8*x9^2 + x5^2*x6^3*x8*x9 + -x5^2*x6^3*x9^3 + x5^2*x6^3*x9^2 + x5^2*x6^2*x7^3*x8*x9 + -x5^2*x6^2*x7^3*x8 + -x5^2*x6^2*x7^3*x9 + x5^2*x6^2*x7^3 + x5^2*x6^2*x7^2*x8^2*x9 + -x5^2*x6^2*x7^2*x8^2 + x5^2*x6^2*x7^2*x8*x9^2 + -2*x5^2*x6^2*x7^2*x8*x9 + x5^2*x6^2*x7^2*x8 + -x5^2*x6^2*x7^2*x9^2 + x5^2*x6^2*x7^2*x9 + x5^2*x6^2*x7*x8^2*x9^2 + -x5^2*x6^2*x7*x8^2*x9 + x5^2*x6^2*x7*x8*x9^3 + -2*x5^2*x6^2*x7*x8*x9^2 + x5^2*x6^2*x7*x8*x9 + -x5^2*x6^2*x7*x9^3 + x5^2*x6^2*x7*x9^2 + -x5^2*x6^2*x8^2*x9^2 + x5^2*x6^2*x8^2 + -x5^2*x6^2*x8*x9^3 + x5^2*x6^2*x8*x9^2 + x5^2*x6^2*x9^3 + -x5^2*x6^2 + x5^2*x7^3*x8^2*x9 + -x5^2*x7^3*x8^2 + x5^2*x7^3*x8*x9^2 + -2*x5^2*x7^3*x8*x9 + x5^2*x7^3*x8 + -x5^2*x7^3*x9^2 + x5^2*x7^3*x9 + -x5^2*x7^2*x8^2*x9 + x5^2*x7^2*x8^2 + -x5^2*x7^2*x8*x9^2 + 2*x5^2*x7^2*x8*x9 + -x5^2*x7^2*x8 + x5^2*x7^2*x9^2 + -x5^2*x7^2*x9 + -x5*x6^8*x7*x8*x9 + x5*x6^8*x7*x8 + x5*x6^8*x7*x9 + -x5*x6^8*x7 + x5*x6^8*x8*x9 + -x5*x6^8*x8 + -x5*x6^8*x9 + x5*x6^8 + -x5*x6^6*x7*x8^2*x9 + x5*x6^6*x7*x8^2 + x5*x6^6*x7*x8*x9 + -x5*x6^6*x7*x8 + x5*x6^6*x8^2*x9 + -x5*x6^6*x8^2 + -x5*x6^6*x8*x9 + x5*x6^6*x8 + -x5*x6^5*x7^2*x8^2*x9 + x5*x6^5*x7^2*x8^2 + x5*x6^5*x7^2*x9 + -x5*x6^5*x7^2 + x5*x6^5*x7*x8^2*x9 + -x5*x6^5*x7*x8^2 + -x5*x6^5*x7*x9 + x5*x6^5*x7 + -x5*x6^4*x7^4*x8*x9 + x5*x6^4*x7^4*x8 + x5*x6^4*x7^4*x9 + -x5*x6^4*x7^4 + -x5*x6^4*x7^3*x8^2*x9 + x5*x6^4*x7^3*x8^2 + x5*x6^4*x7^3*x8*x9 + -x5*x6^4*x7^3*x8 + x5*x6^4*x7^2*x8^2*x9 + -x5*x6^4*x7^2*x8^2 + -x5*x6^4*x7^2*x8*x9^2 + x5*x6^4*x7^2*x8*x9 + x5*x6^4*x7^2*x9^2 + -2*x5*x6^4*x7^2*x9 + x5*x6^4*x7^2 + -x5*x6^4*x7*x8^2*x9^2 + 2*x5*x6^4*x7*x8^2*x9 + -x5*x6^4*x7*x8^2 + -x5*x6^4*x7*x8*x9^3 + 3*x5*x6^4*x7*x8*x9^2 + -2*x5*x6^4*x7*x8*x9 + x5*x6^4*x7*x9^3 + -2*x5*x6^4*x7*x9^2 + x5*x6^4*x7 + x5*x6^4*x8^2*x9^2 + -2*x5*x6^4*x8^2*x9 + x5*x6^4*x8^2 + x5*x6^4*x8*x9^3 + -2*x5*x6^4*x8*x9^2 + x5*x6^4*x8*x9 + -x5*x6^4*x9^3 + x5*x6^4*x9^2 + x5*x6^4*x9 + -x5*x6^4 + x5*x6^3*x7^3*x8^2*x9 + -x5*x6^3*x7^3*x8^2 + -x5*x6^3*x7^3*x9 + x5*x6^3*x7^3 + x5*x6^3*x7^2*x8*x9^2 + -x5*x6^3*x7^2*x8*x9 + -x5*x6^3*x7^2*x9^2 + x5*x6^3*x7^2*x9 + x5*x6^3*x7*x8^2*x9^2 + -2*x5*x6^3*x7*x8^2*x9 + x5*x6^3*x7*x8^2 + x5*x6^3*x7*x8*x9^3 + -3*x5*x6^3*x7*x8*x9^2 + 2*x5*x6^3*x7*x8*x9 + -x5*x6^3*x7*x9^3 + 2*x5*x6^3*x7*x9^2 + -x5*x6^3*x7 + -x5*x6^3*x8^2*x9^2 + x5*x6^3*x8^2*x9 + -x5*x6^3*x8*x9^3 + 2*x5*x6^3*x8*x9^2 + -x5*x6^3*x8*x9 + x5*x6^3*x9^3 + -x5*x6^3*x9^2 + -x5*x6^2*x7^4*x8*x9^2 + x5*x6^2*x7^4*x8*x9 + x5*x6^2*x7^4*x9^2 + -x5*x6^2*x7^4*x9 + x5*x6^2*x7^3*x8*x9^2 + -x5*x6^2*x7^3*x8*x9 + -x5*x6^2*x7^3*x9^2 + x5*x6^2*x7^3*x9 + x5*x7^4*x8*x9^2 + -x5*x7^4*x8 + -x5*x7^4*x9^2 + x5*x7^4 + -x5*x7^3*x8*x9^2 + x5*x7^3*x8 + x5*x7^3*x9^2 + -x5*x7^3 + x6^8*x7*x8*x9 + -x6^8*x7*x8 + -x6^8*x7*x9 + x6^8*x7 + -x6^8*x8*x9 + x6^8*x8 + x6^8*x9 + -x6^8 + x6^6*x7*x8^2*x9 + -x6^6*x7*x8^2 + -x6^6*x7*x8*x9 + x6^6*x7*x8 + -x6^6*x8^2*x9 + x6^6*x8^2 + x6^6*x8*x9 + -x6^6*x8 + x6^5*x7^2*x8^2*x9 + -x6^5*x7^2*x8^2 + -x6^5*x7^2*x9 + x6^5*x7^2 + -x6^5*x7*x8^2*x9 + x6^5*x7*x8^2 + x6^5*x7*x9 + -x6^5*x7 + x6^4*x7^4*x8*x9 + -x6^4*x7^4*x8 + -x6^4*x7^4*x9 + x6^4*x7^4 + x6^4*x7^3*x8^2*x9 + -x6^4*x7^3*x8^2 + -x6^4*x7^3*x8*x9 + x6^4*x7^3*x8 + -x6^4*x7^2*x8^2*x9 + x6^4*x7^2*x8^2 + x6^4*x7^2*x8*x9^2 + -x6^4*x7^2*x8*x9 + -x6^4*x7^2*x9^2 + 2*x6^4*x7^2*x9 + -x6^4*x7^2 + x6^4*x7*x8^2*x9^2 + -x6^4*x7*x8^2*x9 + x6^4*x7*x8*x9^3 + -2*x6^4*x7*x8*x9^2 + x6^4*x7*x8*x9 + -x6^4*x7*x9^3 + x6^4*x7*x9^2 + -x6^4*x8^2*x9^2 + x6^4*x8^2*x9 + -x6^4*x8*x9^3 + x6^4*x8*x9^2 + x6^4*x9^3 + -x6^4*x9 + x6^3*x7^3*x8*x9^2 + -x6^3*x7^3*x8*x9 + -x6^3*x7^3*x9^2 + x6^3*x7^3*x9 + -x6^3*x7^2*x8*x9^2 + x6^3*x7^2*x8*x9 + x6^3*x7^2*x9^2 + -x6^3*x7^2*x9 + x6^2*x7^4*x8*x9^2 + -x6^2*x7^4*x8*x9 + -x6^2*x7^4*x9^2 + x6^2*x7^4*x9 + -x6^2*x7^3*x8*x9^2 + x6^2*x7^3*x8*x9 + x6^2*x7^3*x9^2 + -x6^2*x7^3*x9 + x6^2*x7^2*x8^2*x9^2 + -x6^2*x7^2*x8^2*x9 + -x6^2*x7^2*x8*x9^2 + x6^2*x7^2*x8*x9 + -x6^2*x7*x8^2*x9^2 + x6^2*x7*x8^2*x9 + x6^2*x7*x8*x9^2 + -x6^2*x7*x8*x9 + x6*x7*x8*x9^5 + -x6*x7*x8*x9^3 + -x6*x7*x9^5 + x6*x7*x9^3 + -x6*x8*x9^5 + x6*x8*x9^3 + x6*x9^5 + -x6*x9^3 + -x7^4*x8*x9^2 + x7^4*x8 + x7^4*x9^2 + -x7^4 + -x7^3*x8^2*x9 + x7^3*x8^2 + x7^3*x8*x9 + -x7^3*x8 + -x7^2*x8^2*x9^2 + x7^2*x8^2*x9 + x7^2*x8*x9^2 + -x7^2*x8*x9 + -x7*x8*x9^5 + x7*x8*x9^2 + x7*x9^5 + -x7*x9^2 + x8^2*x9^2 + -x8^2 + x8*x9^5 + -x8*x9^2 + -x9^5 + 1; frobby-0.9.5/test/frob/bug19.opt_irr000066400000000000000000000003071401527164200172500ustar00rootroot0000000000000010 9 0 10 1 2 1 3 1 1 1 0 4 9 2 1 1 1 1 1 0 4 9 1 1 2 1 1 1 0 4 8 2 2 1 1 1 1 0 4 8 2 1 1 1 1 2 0 4 8 1 2 2 1 1 1 0 4 7 2 3 1 1 1 1 0 3 9 3 1 1 1 1 1 0 3 8 3 2 1 1 1 1 0 2 6 1 6 2 1 1 1 20 frobby-0.9.5/test/frob/bug19.opt_irr_min000066400000000000000000000001461401527164200201140ustar00rootroot000000000000005 9 0 2 1 1 1 2 2 2 2 0 1 2 2 1 1 4 1 1 0 1 1 1 2 3 1 2 2 0 1 1 1 1 4 2 1 2 0 1 1 1 1 4 1 1 3 13 frobby-0.9.5/test/frob/bug19.opt_std000066400000000000000000000000211401527164200172370ustar00rootroot000000000000000 9 no solution. frobby-0.9.5/test/frob/bug19.opt_std_min000066400000000000000000000000211401527164200201020ustar00rootroot000000000000000 9 no solution. frobby-0.9.5/test/frob/bug19.primdecom000066400000000000000000000066571401527164200175670ustar00rootroot00000000000000184 9 0 10 0 0 0 0 0 0 0 0 9 0 2 0 0 0 0 0 0 9 0 0 0 3 0 0 0 0 9 0 0 0 2 0 1 0 0 9 0 0 0 0 0 0 1 0 8 0 3 0 1 0 0 0 0 8 0 3 0 0 0 1 0 0 8 0 3 0 0 0 0 1 0 8 0 1 0 1 0 1 0 0 8 0 0 0 0 1 0 0 0 7 0 4 0 0 0 0 0 0 7 0 1 0 2 0 1 0 0 6 0 5 0 0 0 0 1 0 6 0 2 0 2 0 0 0 0 6 0 1 0 3 0 0 0 0 6 0 0 0 4 0 0 0 0 6 0 0 0 3 0 1 0 0 6 0 0 0 0 0 1 1 0 5 0 5 0 0 0 1 0 0 5 0 4 0 1 0 0 0 0 5 0 3 0 2 0 0 0 0 5 0 3 0 1 0 1 0 0 5 0 3 0 0 0 1 1 0 5 0 2 0 3 1 0 0 0 5 0 1 0 5 0 0 0 0 5 0 0 0 4 1 0 0 0 5 0 0 0 0 1 1 0 0 4 1 0 0 0 0 0 0 0 4 0 6 0 0 0 0 0 0 4 0 5 0 1 0 0 0 0 4 0 4 0 2 0 0 0 0 4 0 2 0 5 0 0 0 0 4 0 0 1 0 0 0 0 0 4 0 0 0 5 0 1 0 0 4 0 0 0 4 1 1 0 0 4 0 0 0 0 1 0 1 0 3 4 2 0 0 0 0 0 0 3 1 2 1 0 0 0 0 0 3 1 0 2 1 0 0 0 0 3 0 7 0 0 0 0 0 0 3 0 4 0 4 0 0 0 0 3 0 2 0 3 0 1 0 0 3 0 1 0 4 1 1 0 0 3 0 0 4 0 0 0 0 0 3 0 0 0 6 0 0 0 0 3 0 0 0 0 2 0 0 0 3 0 0 0 0 0 0 2 0 2 1 0 3 0 0 0 0 0 2 1 0 1 2 0 0 0 0 2 0 3 0 5 0 0 0 0 2 0 3 0 4 0 1 0 0 2 0 2 0 5 0 1 0 0 2 0 2 0 4 1 0 0 0 2 0 1 0 3 2 0 0 0 2 0 0 5 0 0 0 0 0 2 0 0 4 0 0 0 1 0 2 0 0 3 1 0 0 0 0 2 0 0 2 0 1 0 1 0 2 0 0 1 1 2 0 0 0 2 0 0 1 0 0 0 2 0 2 0 0 0 1 0 0 1 0 2 0 0 0 0 3 0 0 0 1 1 2 2 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 1 0 5 0 1 0 1 0 0 1 0 4 0 5 0 0 0 0 1 0 4 0 2 0 1 0 0 1 0 1 3 0 0 0 0 0 1 0 0 5 0 1 0 0 0 1 0 0 3 0 1 0 1 0 1 0 0 2 0 2 0 0 0 1 0 0 1 1 2 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 3 0 1 0 0 0 2 3 0 0 0 1 0 0 0 2 1 0 1 0 1 0 0 0 1 0 0 2 0 1 0 0 0 0 0 0 4 0 0 9 0 0 0 0 0 0 0 0 8 0 1 0 0 0 0 0 0 8 0 0 1 1 0 0 0 0 8 0 0 0 2 0 0 0 0 8 0 0 0 0 0 1 0 0 7 0 2 0 0 0 0 0 0 7 0 1 0 1 0 0 0 0 7 0 1 0 0 0 1 0 0 7 0 0 1 1 0 1 0 0 7 0 0 0 2 0 1 0 0 7 0 0 0 0 0 2 0 0 6 0 3 0 0 0 0 0 0 6 0 2 1 1 0 0 0 0 6 0 2 0 2 0 0 0 0 6 0 2 0 0 0 1 0 0 6 0 1 0 0 0 2 0 0 6 0 0 0 3 0 1 0 0 6 0 0 0 0 0 3 0 0 5 0 6 0 0 0 0 0 0 5 0 4 0 1 0 0 0 0 5 0 3 0 0 0 1 0 0 5 0 1 0 0 0 3 0 0 5 0 0 0 0 0 4 0 0 4 2 0 0 0 1 0 0 0 4 0 7 0 0 0 0 0 0 4 0 5 0 1 0 0 0 0 4 0 4 0 0 0 2 0 0 4 0 1 0 0 0 4 0 0 3 3 0 0 0 0 0 0 0 3 0 0 2 0 0 0 0 0 3 0 0 1 0 1 1 0 0 3 0 0 0 2 1 0 0 0 2 4 0 0 0 0 0 0 0 2 1 2 0 1 0 0 0 0 2 1 0 1 0 0 0 0 0 2 1 0 0 2 0 0 0 0 2 1 0 0 1 1 0 0 0 1 7 0 0 0 0 0 0 0 1 3 0 2 0 0 0 0 0 1 2 1 0 0 1 0 0 0 1 2 0 0 1 0 0 0 0 1 2 0 0 0 0 1 0 0 1 0 2 1 1 1 0 0 0 1 0 1 2 0 1 0 0 0 1 0 0 3 0 0 0 0 0 1 0 0 1 2 0 0 0 0 1 0 0 0 1 1 1 0 0 0 8 0 0 0 0 0 0 0 0 7 0 0 0 1 0 0 0 0 6 0 1 0 0 1 0 0 0 5 0 2 0 0 0 0 0 0 4 0 5 0 1 0 0 0 0 4 0 2 0 0 1 0 0 0 3 1 0 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 3 0 0 0 0 2 0 0 0 2 3 0 0 0 0 0 0 0 1 7 0 0 0 0 0 0 0 1 5 1 0 0 0 0 0 0 1 5 0 1 0 0 0 0 0 1 3 0 0 1 0 0 0 0 1 2 1 1 0 0 0 0 0 1 2 0 2 0 0 0 0 0 1 1 2 2 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 6 0 0 0 0 0 0 1 0 3 3 0 0 0 0 0 1 0 3 0 0 1 0 0 0 1 0 0 1 0 1 0 0 0 1 0 0 0 0 3 0 0 0 0 8 0 0 0 0 0 0 0 0 7 0 1 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 5 0 0 1 0 0 0 0 0 5 0 0 0 1 0 0 0 0 4 1 1 0 0 0 0 0 0 4 0 2 0 0 0 0 0 0 4 0 0 1 1 0 0 0 0 3 1 0 1 0 0 0 0 0 3 1 0 0 1 0 0 0 0 3 0 0 0 4 0 0 0 0 2 2 0 0 0 0 0 0 0 2 0 2 1 0 0 0 0 0 2 0 2 0 1 0 0 0 0 1 4 0 0 0 0 0 0 0 1 3 1 0 0 0 0 0 0 1 3 0 1 1 0 0 0 0 1 3 0 0 2 0 0 0 0 1 0 3 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 6 0 1 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 4 2 0 0 0 0 0 0 0 4 0 0 1 0 0 0 0 0 3 2 0 1 0 0 0 0 0 2 3 0 1 0 0 0 0 0 2 1 1 1 0 0 0 0 0 1 0 0 3 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 2 1 1 0 0 0 0 0 0 1 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 5 frobby-0.9.5/test/frob/bug19.radical000066400000000000000000000002341401527164200171700ustar00rootroot000000000000008 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug19.test000066400000000000000000000120461401527164200165540ustar00rootroot00000000000000184 9 -7 0 -4 4 -1 5 0 1 -1 -6 0 -1 0 4 0 -1 1 1 -6 0 0 -1 3 1 0 1 0 -5 -1 -1 0 3 1 0 0 1 -5 0 -2 1 7 0 -2 0 0 -5 0 -1 0 6 1 -1 0 -1 -5 0 0 -1 1 3 -2 0 2 -4 0 -3 -1 8 0 0 0 -1 -4 1 1 0 0 0 1 0 0 -4 2 -4 3 -4 5 0 0 0 -4 2 1 0 3 0 0 0 -2 -4 3 -6 2 -1 3 0 1 0 -4 3 -5 1 -2 4 1 1 -1 -4 3 -5 4 0 4 -2 0 -1 -4 3 1 0 2 1 -3 0 0 -4 3 4 2 -4 -1 0 0 0 -4 5 -4 5 0 0 0 1 -3 -3 -5 5 -4 6 0 0 0 0 -3 -2 0 1 3 0 0 1 -1 -3 -2 1 0 2 1 1 1 -2 -3 -1 1 0 1 2 -2 1 0 -3 0 0 1 0 0 1 -1 1 -3 0 1 0 -1 1 2 -1 0 -3 0 4 2 -2 0 0 1 -2 -3 0 8 -5 0 -1 2 -1 0 -3 1 -2 0 3 -2 1 0 1 -3 1 -1 -1 -2 0 0 0 4 -3 1 -1 -1 2 -1 2 0 0 -3 1 0 1 3 0 0 -1 -1 -3 2 -6 2 -2 4 1 0 0 -3 2 -1 -1 1 0 -1 0 2 -3 2 0 -2 0 1 0 0 1 -3 2 1 0 1 2 -2 -1 0 -3 3 -1 -1 4 0 -2 0 0 -3 4 -6 -1 -2 5 0 1 0 -3 4 -6 2 0 5 -3 0 0 -3 4 -5 6 0 0 0 0 -2 -3 5 -5 3 -3 1 0 1 0 -3 8 -5 3 -3 1 0 -1 0 -3 9 -7 2 0 -1 0 0 0 -2 -4 1 3 0 2 0 -1 0 -2 -4 7 -4 0 -1 2 0 1 -2 -4 8 -2 1 0 0 -1 0 -2 -3 -1 2 3 0 0 0 0 -2 -3 0 1 2 1 1 0 -1 -2 -2 0 -2 -1 2 1 1 1 -2 -2 0 1 5 1 0 0 -3 -2 -2 1 0 0 3 -1 0 0 -2 -1 2 4 -1 -1 -1 0 0 -2 -1 3 3 -2 0 0 0 -1 -2 -1 9 -1 0 -3 -1 0 0 -2 0 -6 7 0 0 0 1 -1 -2 0 -2 0 -2 0 0 -1 5 -2 0 -2 0 2 -1 2 -1 1 -2 0 -1 -1 1 0 3 -1 0 -2 0 0 -2 1 3 -3 1 1 -2 0 1 2 1 -2 0 1 -1 -2 0 2 1 0 -1 1 1 -2 -2 0 3 0 -5 1 0 1 1 -2 0 3 0 -1 0 2 1 -3 -2 1 -2 0 1 0 -1 -1 3 -2 1 -2 0 5 -1 1 -1 -1 -2 1 -1 -1 0 1 0 -1 2 -2 1 0 -2 -1 2 1 -1 1 -2 2 -8 1 0 3 2 0 0 -2 2 -2 -3 2 0 1 0 1 -2 2 -2 0 4 0 -2 -1 1 -2 2 -1 -4 1 1 2 0 0 -2 2 -1 -1 3 1 -1 -1 0 -2 3 -6 7 0 0 0 -1 -1 -2 3 0 0 0 -3 2 0 0 -2 3 1 2 1 -2 0 -1 -1 -2 4 -8 -2 0 4 1 1 0 -2 5 -8 3 0 -1 0 1 1 -2 5 -6 4 0 1 -1 0 -1 -2 5 -5 3 -1 2 0 0 -2 -2 5 -4 2 -2 3 1 0 -3 -2 5 -3 1 -7 5 0 0 0 -2 5 0 -3 0 -2 1 1 0 -2 6 -5 0 -4 3 0 1 0 -2 7 -6 1 0 2 -2 1 -1 -2 8 -8 3 0 -1 0 -1 1 -2 8 -3 3 -3 0 0 1 -3 -2 8 0 -3 0 -2 1 -1 0 -2 9 -5 0 -4 3 0 -1 0 -2 10 0 -6 0 -1 0 0 0 -1 -8 0 4 0 2 0 0 1 -1 -8 7 -1 1 0 0 0 1 -1 -8 8 -2 0 1 1 0 0 -1 -4 0 -4 0 8 0 -1 0 -1 -4 0 1 1 2 2 -1 -1 -1 -3 -3 1 5 -1 1 0 0 -1 -3 -2 0 0 1 0 0 3 -1 -3 -2 0 4 0 2 0 -1 -1 -3 0 -2 -2 3 2 0 1 -1 -3 0 1 0 3 -1 -1 1 -1 -3 5 -5 1 -1 0 0 3 -1 -2 -2 0 7 0 1 0 -3 -1 -2 -1 -1 2 2 0 0 0 -1 -2 0 -2 1 3 1 0 -1 -1 -2 6 -6 3 0 0 0 0 -1 -2 6 -1 0 -5 0 0 3 -1 -2 8 0 0 -3 -1 -1 1 -1 -1 -7 8 0 0 0 0 0 -1 -1 -3 -2 5 0 0 1 0 -1 -1 0 -2 0 4 -2 0 1 -1 -1 0 0 -1 -2 3 1 0 -1 -1 0 3 1 -2 0 0 0 -1 -1 1 2 0 -1 1 0 -1 -1 -1 2 1 -1 0 2 0 -2 -1 -1 7 -2 2 -4 0 0 0 -1 0 -7 0 0 6 0 1 -1 -1 0 0 0 -2 -1 0 1 2 -1 0 0 0 2 -2 2 1 -2 -1 0 0 3 0 -1 -3 0 2 -1 0 1 -1 -3 0 1 1 1 -1 0 1 2 -1 0 -2 0 1 -1 0 1 7 0 -6 0 0 0 -1 0 2 1 -2 1 -1 0 0 -1 0 2 1 2 0 1 0 -4 -1 0 3 0 -3 2 0 0 -1 -1 1 -7 5 0 1 -1 1 0 -1 1 -6 4 -1 2 0 1 -1 -1 1 -3 4 -2 5 0 0 -4 -1 1 -2 -3 1 1 2 -1 1 -1 1 -1 -4 0 2 3 -1 0 -1 1 0 0 1 -1 -1 1 0 -1 1 1 -1 0 0 0 1 -1 -1 1 1 2 2 0 -3 0 -1 -1 2 -5 3 -3 4 -2 1 0 -1 2 -4 2 -4 5 -1 1 -1 -1 2 -3 -2 5 0 0 -1 0 -1 2 0 0 -1 -2 3 -1 0 -1 3 -7 0 0 6 0 -1 -1 -1 3 0 0 -2 -1 0 -1 2 -1 4 -7 5 0 1 -1 -1 0 -1 4 -6 4 -1 2 0 -1 -1 -1 4 -1 -2 0 -2 1 0 1 -1 4 0 0 1 -1 -1 -1 0 -1 4 1 -1 0 0 0 -1 -1 -1 5 -5 0 -5 4 1 0 0 -1 6 -7 2 0 2 -2 0 0 -1 6 -6 1 -1 3 -1 0 -1 -1 6 -5 0 -2 4 0 0 -2 -1 6 -5 5 -5 -1 0 0 1 -1 6 -1 -5 0 -1 0 1 1 -1 7 -4 4 -3 0 0 0 -2 -1 8 -4 1 -6 1 0 1 0 -1 9 -3 0 -4 2 0 1 -3 -1 9 -1 -5 0 -1 0 -1 1 0 -9 6 0 1 0 0 -1 2 0 -9 7 -1 0 1 1 -1 1 0 -8 0 1 0 3 3 0 -1 0 -8 4 -1 4 -2 0 0 2 0 -8 6 -3 2 0 2 0 0 0 -7 4 -1 7 -2 -1 0 0 0 -4 4 -4 1 -1 0 -1 4 0 -3 -5 0 3 -1 0 0 4 0 -3 -2 -3 0 2 3 0 1 0 -3 0 -2 0 4 2 -1 -1 0 -3 0 0 0 0 0 2 0 0 -3 5 -5 3 0 0 -1 1 0 -3 5 0 0 -5 0 -1 4 0 -3 6 -6 2 1 1 -1 0 0 -2 -4 -1 5 0 0 0 1 0 -2 -3 -2 4 1 1 0 0 0 -2 0 0 -2 -1 4 0 0 0 -2 0 3 0 -1 1 -1 0 0 -2 4 -7 5 -1 1 0 0 0 -2 6 -4 0 -4 3 0 1 0 -2 6 -1 2 -4 0 -1 1 0 -2 7 -2 1 -3 1 -1 0 0 -1 -8 1 0 6 0 0 0 0 -1 -1 -4 1 4 0 0 0 0 -1 -1 1 -2 -1 0 0 3 0 -1 -1 1 2 -2 2 0 -1 0 -1 0 -5 0 5 1 0 -1 0 -1 0 0 -3 0 1 0 2 0 -1 5 -3 4 -5 1 0 0 0 -1 7 -2 0 -2 -2 -1 2 0 0 -8 6 0 1 -1 0 1 0 0 -7 5 -1 2 0 0 0 0 0 -1 -2 -1 -1 2 1 1 0 0 -1 1 1 -1 -1 0 1 frobby-0.9.5/test/frob/bug19.uni000066400000000000000000000003501401527164200163630ustar00rootroot00000000000000R = QQ[t]; p = 10*t^20 + -20*t^19 + -40*t^18 + 102*t^17 + 30*t^16 + -90*t^15 + -337*t^14 + 712*t^13 + -289*t^12 + -287*t^11 + -39*t^10 + 706*t^9 + -575*t^8 + 28*t^7 + 97*t^6 + 8*t^5 + -9*t^4 + -7*t^3 + -t^2 + 1; frobby-0.9.5/test/frob/bug2.alexdual000066400000000000000000000000731401527164200173010ustar00rootroot000000000000005 5 0 2 8 1 1 0 2 7 2 2 0 2 1 3 1 0 1 3 3 1 0 1 2 3 2 frobby-0.9.5/test/frob/bug2.assoprimes000066400000000000000000000000171401527164200176650ustar00rootroot000000000000001 5 0 1 1 1 1 frobby-0.9.5/test/frob/bug2.dim000066400000000000000000000000021401527164200162430ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug2.euler000066400000000000000000000000021401527164200166060ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug2.frobInstance000066400000000000000000000000161401527164200201140ustar00rootroot0000000000000034 35 18 42 9 frobby-0.9.5/test/frob/bug2.frobNumber000066400000000000000000000000041401527164200175750ustar00rootroot00000000000000109 frobby-0.9.5/test/frob/bug2.intersection000066400000000000000000000001631401527164200202100ustar00rootroot0000000000000010 5 0 2 0 0 0 0 1 7 0 0 0 1 6 0 1 0 1 0 1 0 0 0 8 0 0 0 0 2 1 0 0 0 1 2 0 0 0 1 1 1 0 0 0 3 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug2.irrdecom000066400000000000000000000003601401527164200173050ustar00rootroot000000000000004 5 0 2 0 0 0 0 0 7 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 2 0 0 0 0 0 6 0 0 0 0 0 1 0 0 0 0 0 2 4 5 0 1 0 0 0 0 0 8 0 0 0 0 0 1 0 0 0 0 0 2 4 5 0 1 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 1 4 5 0 1 0 0 0 0 0 1 0 0 0 0 0 3 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug2.irrdecom_ideal000066400000000000000000000000731401527164200204440ustar00rootroot000000000000005 5 0 2 7 1 1 0 2 6 1 2 0 1 8 1 2 0 1 2 2 1 0 1 1 3 2 frobby-0.9.5/test/frob/bug2.maxstandard000066400000000000000000000000041401527164200200020ustar00rootroot000000000000000 5 frobby-0.9.5/test/frob/bug2.minimize000066400000000000000000000001631401527164200173230ustar00rootroot0000000000000010 5 0 2 0 0 0 0 1 7 0 0 0 1 6 0 1 0 1 0 1 0 0 0 8 0 0 0 0 2 1 0 0 0 1 2 0 0 0 1 1 1 0 0 0 3 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug2.multi000066400000000000000000000015251401527164200166370ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5]; p = x2^2*x3^7*x4*x5 + -x2^2*x3^7*x4 + -x2^2*x3^7*x5 + x2^2*x3^7 + x2^2*x3^6*x4*x5^2 + -x2^2*x3^6*x4*x5 + -x2^2*x3^6*x5^2 + x2^2*x3^6*x5 + -x2^2*x4*x5^2 + x2^2*x4 + x2^2*x5^2 + -x2^2 + x2*x3^8*x4*x5^2 + -x2*x3^8*x4 + -x2*x3^8*x5^2 + x2*x3^8 + -x2*x3^7*x4*x5 + x2*x3^7*x4 + x2*x3^7*x5 + -x2*x3^7 + -x2*x3^6*x4*x5^2 + x2*x3^6*x4*x5 + x2*x3^6*x5^2 + -x2*x3^6*x5 + x2*x3^2*x4^2*x5 + -x2*x3^2*x4^2 + -x2*x3^2*x4*x5 + x2*x3^2*x4 + x2*x3*x4^3*x5^2 + -x2*x3*x4^3 + -x2*x3*x4^2*x5 + x2*x3*x4^2 + -x2*x3*x4*x5^2 + x2*x3*x4*x5 + -x2*x4^3*x5^2 + x2*x4^3 + x2*x4*x5^2 + -x2*x4 + -x3^8*x4*x5^2 + x3^8*x4 + x3^8*x5^2 + -x3^8 + -x3^2*x4^2*x5 + x3^2*x4^2 + x3^2*x4*x5 + -x3^2*x4 + -x3*x4^3*x5^2 + x3*x4^3 + x3*x4^2*x5 + -x3*x4^2 + x3*x4*x5^2 + -x3*x4*x5 + x4^3*x5^2 + -x4^3 + -x5^2 + 1; frobby-0.9.5/test/frob/bug2.opt_irr000066400000000000000000000000221401527164200171520ustar00rootroot000000000000001 5 0 1 8 1 2 12 frobby-0.9.5/test/frob/bug2.opt_irr_min000066400000000000000000000000211401527164200200140ustar00rootroot000000000000001 5 0 1 2 2 1 6 frobby-0.9.5/test/frob/bug2.opt_std000066400000000000000000000000211401527164200171470ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug2.opt_std_min000066400000000000000000000000211401527164200200120ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug2.primdecom000066400000000000000000000001631401527164200174610ustar00rootroot0000000000000010 5 0 2 0 0 0 0 1 7 0 0 0 1 6 0 1 0 1 0 1 0 0 0 8 0 0 0 0 2 1 0 0 0 1 2 0 0 0 1 1 1 0 0 0 3 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug2.radical000066400000000000000000000000601401527164200170750ustar00rootroot000000000000004 5 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug2.test000066400000000000000000000002451401527164200164620ustar00rootroot0000000000000010 5 -3 0 1 2 0 -3 0 8 -1 0 -2 1 0 1 -1 -2 1 6 -2 1 -2 1 7 -2 -1 -1 -1 1 1 1 -1 -1 2 1 -1 -1 2 -2 0 0 0 0 -7 3 0 0 0 -1 0 2 frobby-0.9.5/test/frob/bug2.uni000066400000000000000000000001601401527164200162720ustar00rootroot00000000000000R = QQ[t]; p = t^12 + -6*t^10 + 8*t^9 + -3*t^8 + t^7 + -t^6 + -6*t^5 + 11*t^4 + -3*t^3 + -3*t^2 + 1; frobby-0.9.5/test/frob/bug20.alexdual000066400000000000000000000002441401527164200173610ustar00rootroot0000000000000010 7 0 23 8 1 1 1 2 0 23 5 3 1 1 2 0 23 1 5 1 1 2 0 20 7 5 1 1 1 0 18 8 5 1 1 1 0 18 5 4 1 1 2 0 13 4 5 1 1 2 0 11 8 4 1 1 2 0 11 6 5 1 1 2 0 1 9 5 1 1 2 frobby-0.9.5/test/frob/bug20.assoprimes000066400000000000000000000000231401527164200177420ustar00rootroot000000000000001 7 0 1 1 1 1 1 1 frobby-0.9.5/test/frob/bug20.dim000066400000000000000000000000021401527164200163230ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug20.euler000066400000000000000000000000021401527164200166660ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug20.frobInstance000066400000000000000000000000401401527164200201710ustar00rootroot00000000000000182 239 436 1234 3106 3145 3597 frobby-0.9.5/test/frob/bug20.frobNumber000066400000000000000000000000051401527164200176560ustar00rootroot000000000000005429 frobby-0.9.5/test/frob/bug20.intersection000066400000000000000000000004271401527164200202730ustar00rootroot0000000000000018 7 0 24 0 0 0 0 0 0 14 1 0 0 0 0 0 14 0 1 0 0 0 0 12 4 0 0 0 0 0 7 2 1 0 0 0 0 7 0 0 0 0 1 0 5 2 0 0 0 1 0 2 6 0 0 0 0 0 2 0 2 0 0 0 0 0 9 0 0 0 0 0 0 5 1 0 0 0 0 0 3 0 0 0 1 0 0 2 3 0 0 0 0 0 0 5 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug20.irrdecom000066400000000000000000000016601401527164200173710ustar00rootroot000000000000006 7 0 24 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 14 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 14 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 12 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 7 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 7 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 6 7 0 5 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 6 7 0 2 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 2 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug20.irrdecom_ideal000066400000000000000000000002371401527164200205260ustar00rootroot0000000000000010 7 0 24 1 1 1 1 1 0 14 4 1 1 1 1 0 14 2 2 1 1 1 0 12 6 1 1 1 1 0 7 5 2 1 1 1 0 7 2 1 1 1 2 0 5 3 1 1 1 2 0 2 9 1 1 1 1 0 2 5 3 1 1 1 0 2 2 5 1 1 1 frobby-0.9.5/test/frob/bug20.maxstandard000066400000000000000000000000041401527164200200620ustar00rootroot000000000000000 7 frobby-0.9.5/test/frob/bug20.minimize000066400000000000000000000004271401527164200174060ustar00rootroot0000000000000018 7 0 24 0 0 0 0 0 0 14 1 0 0 0 0 0 14 0 1 0 0 0 0 12 4 0 0 0 0 0 7 2 1 0 0 0 0 7 0 0 0 0 1 0 5 2 0 0 0 1 0 2 6 0 0 0 0 0 2 0 2 0 0 0 0 0 9 0 0 0 0 0 0 5 1 0 0 0 0 0 3 0 0 0 1 0 0 2 3 0 0 0 0 0 0 5 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug20.multi000066400000000000000000000163111401527164200167160ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7]; p = x2^24*x3*x4*x5*x6*x7 + -x2^24*x3*x4*x5*x6 + -x2^24*x3*x4*x5*x7 + x2^24*x3*x4*x5 + -x2^24*x3*x4*x6*x7 + x2^24*x3*x4*x6 + x2^24*x3*x4*x7 + -x2^24*x3*x4 + -x2^24*x3*x5*x6*x7 + x2^24*x3*x5*x6 + x2^24*x3*x5*x7 + -x2^24*x3*x5 + x2^24*x3*x6*x7 + -x2^24*x3*x6 + -x2^24*x3*x7 + x2^24*x3 + -x2^24*x4*x5*x6*x7 + x2^24*x4*x5*x6 + x2^24*x4*x5*x7 + -x2^24*x4*x5 + x2^24*x4*x6*x7 + -x2^24*x4*x6 + -x2^24*x4*x7 + x2^24*x4 + x2^24*x5*x6*x7 + -x2^24*x5*x6 + -x2^24*x5*x7 + x2^24*x5 + -x2^24*x6*x7 + x2^24*x6 + x2^24*x7 + -x2^24 + x2^14*x3^4*x4*x5*x6*x7 + -x2^14*x3^4*x4*x5*x6 + -x2^14*x3^4*x4*x5*x7 + x2^14*x3^4*x4*x5 + -x2^14*x3^4*x4*x6*x7 + x2^14*x3^4*x4*x6 + x2^14*x3^4*x4*x7 + -x2^14*x3^4*x4 + -x2^14*x3^4*x5*x6*x7 + x2^14*x3^4*x5*x6 + x2^14*x3^4*x5*x7 + -x2^14*x3^4*x5 + x2^14*x3^4*x6*x7 + -x2^14*x3^4*x6 + -x2^14*x3^4*x7 + x2^14*x3^4 + x2^14*x3^2*x4^2*x5*x6*x7 + -x2^14*x3^2*x4^2*x5*x6 + -x2^14*x3^2*x4^2*x5*x7 + x2^14*x3^2*x4^2*x5 + -x2^14*x3^2*x4^2*x6*x7 + x2^14*x3^2*x4^2*x6 + x2^14*x3^2*x4^2*x7 + -x2^14*x3^2*x4^2 + -x2^14*x3^2*x4*x5*x6*x7 + x2^14*x3^2*x4*x5*x6 + x2^14*x3^2*x4*x5*x7 + -x2^14*x3^2*x4*x5 + x2^14*x3^2*x4*x6*x7 + -x2^14*x3^2*x4*x6 + -x2^14*x3^2*x4*x7 + x2^14*x3^2*x4 + -x2^14*x3*x4*x5*x6*x7 + x2^14*x3*x4*x5*x6 + x2^14*x3*x4*x5*x7 + -x2^14*x3*x4*x5 + x2^14*x3*x4*x6*x7 + -x2^14*x3*x4*x6 + -x2^14*x3*x4*x7 + x2^14*x3*x4 + x2^14*x3*x5*x6*x7 + -x2^14*x3*x5*x6 + -x2^14*x3*x5*x7 + x2^14*x3*x5 + -x2^14*x3*x6*x7 + x2^14*x3*x6 + x2^14*x3*x7 + -x2^14*x3 + -x2^14*x4^2*x5*x6*x7 + x2^14*x4^2*x5*x6 + x2^14*x4^2*x5*x7 + -x2^14*x4^2*x5 + x2^14*x4^2*x6*x7 + -x2^14*x4^2*x6 + -x2^14*x4^2*x7 + x2^14*x4^2 + x2^14*x4*x5*x6*x7 + -x2^14*x4*x5*x6 + -x2^14*x4*x5*x7 + x2^14*x4*x5 + -x2^14*x4*x6*x7 + x2^14*x4*x6 + x2^14*x4*x7 + -x2^14*x4 + x2^12*x3^6*x4*x5*x6*x7 + -x2^12*x3^6*x4*x5*x6 + -x2^12*x3^6*x4*x5*x7 + x2^12*x3^6*x4*x5 + -x2^12*x3^6*x4*x6*x7 + x2^12*x3^6*x4*x6 + x2^12*x3^6*x4*x7 + -x2^12*x3^6*x4 + -x2^12*x3^6*x5*x6*x7 + x2^12*x3^6*x5*x6 + x2^12*x3^6*x5*x7 + -x2^12*x3^6*x5 + x2^12*x3^6*x6*x7 + -x2^12*x3^6*x6 + -x2^12*x3^6*x7 + x2^12*x3^6 + -x2^12*x3^4*x4*x5*x6*x7 + x2^12*x3^4*x4*x5*x6 + x2^12*x3^4*x4*x5*x7 + -x2^12*x3^4*x4*x5 + x2^12*x3^4*x4*x6*x7 + -x2^12*x3^4*x4*x6 + -x2^12*x3^4*x4*x7 + x2^12*x3^4*x4 + x2^12*x3^4*x5*x6*x7 + -x2^12*x3^4*x5*x6 + -x2^12*x3^4*x5*x7 + x2^12*x3^4*x5 + -x2^12*x3^4*x6*x7 + x2^12*x3^4*x6 + x2^12*x3^4*x7 + -x2^12*x3^4 + x2^7*x3^5*x4^2*x5*x6*x7 + -x2^7*x3^5*x4^2*x5*x6 + -x2^7*x3^5*x4^2*x5*x7 + x2^7*x3^5*x4^2*x5 + -x2^7*x3^5*x4^2*x6*x7 + x2^7*x3^5*x4^2*x6 + x2^7*x3^5*x4^2*x7 + -x2^7*x3^5*x4^2 + -x2^7*x3^5*x4*x5*x6*x7 + x2^7*x3^5*x4*x5*x6 + x2^7*x3^5*x4*x5*x7 + -x2^7*x3^5*x4*x5 + x2^7*x3^5*x4*x6*x7 + -x2^7*x3^5*x4*x6 + -x2^7*x3^5*x4*x7 + x2^7*x3^5*x4 + -x2^7*x3^2*x4^2*x5*x6*x7 + x2^7*x3^2*x4^2*x5*x6 + x2^7*x3^2*x4^2*x5*x7 + -x2^7*x3^2*x4^2*x5 + x2^7*x3^2*x4^2*x6*x7 + -x2^7*x3^2*x4^2*x6 + -x2^7*x3^2*x4^2*x7 + x2^7*x3^2*x4^2 + x2^7*x3^2*x4*x5*x6*x7^2 + -x2^7*x3^2*x4*x5*x6 + -x2^7*x3^2*x4*x5*x7^2 + x2^7*x3^2*x4*x5 + -x2^7*x3^2*x4*x6*x7^2 + x2^7*x3^2*x4*x6 + x2^7*x3^2*x4*x7^2 + -x2^7*x3^2*x4 + -x2^7*x3^2*x5*x6*x7^2 + x2^7*x3^2*x5*x6*x7 + x2^7*x3^2*x5*x7^2 + -x2^7*x3^2*x5*x7 + x2^7*x3^2*x6*x7^2 + -x2^7*x3^2*x6*x7 + -x2^7*x3^2*x7^2 + x2^7*x3^2*x7 + -x2^7*x4*x5*x6*x7^2 + x2^7*x4*x5*x6*x7 + x2^7*x4*x5*x7^2 + -x2^7*x4*x5*x7 + x2^7*x4*x6*x7^2 + -x2^7*x4*x6*x7 + -x2^7*x4*x7^2 + x2^7*x4*x7 + x2^7*x5*x6*x7^2 + -x2^7*x5*x6*x7 + -x2^7*x5*x7^2 + x2^7*x5*x7 + -x2^7*x6*x7^2 + x2^7*x6*x7 + x2^7*x7^2 + -x2^7*x7 + x2^5*x3^3*x4*x5*x6*x7^2 + -x2^5*x3^3*x4*x5*x6*x7 + -x2^5*x3^3*x4*x5*x7^2 + x2^5*x3^3*x4*x5*x7 + -x2^5*x3^3*x4*x6*x7^2 + x2^5*x3^3*x4*x6*x7 + x2^5*x3^3*x4*x7^2 + -x2^5*x3^3*x4*x7 + -x2^5*x3^3*x5*x6*x7^2 + x2^5*x3^3*x5*x6*x7 + x2^5*x3^3*x5*x7^2 + -x2^5*x3^3*x5*x7 + x2^5*x3^3*x6*x7^2 + -x2^5*x3^3*x6*x7 + -x2^5*x3^3*x7^2 + x2^5*x3^3*x7 + -x2^5*x3^2*x4*x5*x6*x7^2 + x2^5*x3^2*x4*x5*x6*x7 + x2^5*x3^2*x4*x5*x7^2 + -x2^5*x3^2*x4*x5*x7 + x2^5*x3^2*x4*x6*x7^2 + -x2^5*x3^2*x4*x6*x7 + -x2^5*x3^2*x4*x7^2 + x2^5*x3^2*x4*x7 + x2^5*x3^2*x5*x6*x7^2 + -x2^5*x3^2*x5*x6*x7 + -x2^5*x3^2*x5*x7^2 + x2^5*x3^2*x5*x7 + -x2^5*x3^2*x6*x7^2 + x2^5*x3^2*x6*x7 + x2^5*x3^2*x7^2 + -x2^5*x3^2*x7 + x2^2*x3^9*x4*x5*x6*x7 + -x2^2*x3^9*x4*x5*x6 + -x2^2*x3^9*x4*x5*x7 + x2^2*x3^9*x4*x5 + -x2^2*x3^9*x4*x6*x7 + x2^2*x3^9*x4*x6 + x2^2*x3^9*x4*x7 + -x2^2*x3^9*x4 + -x2^2*x3^9*x5*x6*x7 + x2^2*x3^9*x5*x6 + x2^2*x3^9*x5*x7 + -x2^2*x3^9*x5 + x2^2*x3^9*x6*x7 + -x2^2*x3^9*x6 + -x2^2*x3^9*x7 + x2^2*x3^9 + -x2^2*x3^6*x4*x5*x6*x7 + x2^2*x3^6*x4*x5*x6 + x2^2*x3^6*x4*x5*x7 + -x2^2*x3^6*x4*x5 + x2^2*x3^6*x4*x6*x7 + -x2^2*x3^6*x4*x6 + -x2^2*x3^6*x4*x7 + x2^2*x3^6*x4 + x2^2*x3^6*x5*x6*x7 + -x2^2*x3^6*x5*x6 + -x2^2*x3^6*x5*x7 + x2^2*x3^6*x5 + -x2^2*x3^6*x6*x7 + x2^2*x3^6*x6 + x2^2*x3^6*x7 + -x2^2*x3^6 + x2^2*x3^5*x4^3*x5*x6*x7 + -x2^2*x3^5*x4^3*x5*x6 + -x2^2*x3^5*x4^3*x5*x7 + x2^2*x3^5*x4^3*x5 + -x2^2*x3^5*x4^3*x6*x7 + x2^2*x3^5*x4^3*x6 + x2^2*x3^5*x4^3*x7 + -x2^2*x3^5*x4^3 + -x2^2*x3^5*x4^2*x5*x6*x7 + x2^2*x3^5*x4^2*x5*x6 + x2^2*x3^5*x4^2*x5*x7 + -x2^2*x3^5*x4^2*x5 + x2^2*x3^5*x4^2*x6*x7 + -x2^2*x3^5*x4^2*x6 + -x2^2*x3^5*x4^2*x7 + x2^2*x3^5*x4^2 + x2^2*x3^2*x4^5*x5*x6*x7 + -x2^2*x3^2*x4^5*x5*x6 + -x2^2*x3^2*x4^5*x5*x7 + x2^2*x3^2*x4^5*x5 + -x2^2*x3^2*x4^5*x6*x7 + x2^2*x3^2*x4^5*x6 + x2^2*x3^2*x4^5*x7 + -x2^2*x3^2*x4^5 + -x2^2*x3^2*x4^3*x5*x6*x7 + x2^2*x3^2*x4^3*x5*x6 + x2^2*x3^2*x4^3*x5*x7 + -x2^2*x3^2*x4^3*x5 + x2^2*x3^2*x4^3*x6*x7 + -x2^2*x3^2*x4^3*x6 + -x2^2*x3^2*x4^3*x7 + x2^2*x3^2*x4^3 + -x2^2*x4^5*x5*x6*x7 + x2^2*x4^5*x5*x6 + x2^2*x4^5*x5*x7 + -x2^2*x4^5*x5 + x2^2*x4^5*x6*x7 + -x2^2*x4^5*x6 + -x2^2*x4^5*x7 + x2^2*x4^5 + x2^2*x4^2*x5*x6*x7 + -x2^2*x4^2*x5*x6 + -x2^2*x4^2*x5*x7 + x2^2*x4^2*x5 + -x2^2*x4^2*x6*x7 + x2^2*x4^2*x6 + x2^2*x4^2*x7 + -x2^2*x4^2 + -x3^9*x4*x5*x6*x7 + x3^9*x4*x5*x6 + x3^9*x4*x5*x7 + -x3^9*x4*x5 + x3^9*x4*x6*x7 + -x3^9*x4*x6 + -x3^9*x4*x7 + x3^9*x4 + x3^9*x5*x6*x7 + -x3^9*x5*x6 + -x3^9*x5*x7 + x3^9*x5 + -x3^9*x6*x7 + x3^9*x6 + x3^9*x7 + -x3^9 + -x3^5*x4^3*x5*x6*x7 + x3^5*x4^3*x5*x6 + x3^5*x4^3*x5*x7 + -x3^5*x4^3*x5 + x3^5*x4^3*x6*x7 + -x3^5*x4^3*x6 + -x3^5*x4^3*x7 + x3^5*x4^3 + x3^5*x4*x5*x6*x7 + -x3^5*x4*x5*x6 + -x3^5*x4*x5*x7 + x3^5*x4*x5 + -x3^5*x4*x6*x7 + x3^5*x4*x6 + x3^5*x4*x7 + -x3^5*x4 + -x3^3*x4*x5*x6*x7^2 + x3^3*x4*x5*x6*x7 + x3^3*x4*x5*x7^2 + -x3^3*x4*x5*x7 + x3^3*x4*x6*x7^2 + -x3^3*x4*x6*x7 + -x3^3*x4*x7^2 + x3^3*x4*x7 + x3^3*x5*x6*x7^2 + -x3^3*x5*x6*x7 + -x3^3*x5*x7^2 + x3^3*x5*x7 + -x3^3*x6*x7^2 + x3^3*x6*x7 + x3^3*x7^2 + -x3^3*x7 + -x3^2*x4^5*x5*x6*x7 + x3^2*x4^5*x5*x6 + x3^2*x4^5*x5*x7 + -x3^2*x4^5*x5 + x3^2*x4^5*x6*x7 + -x3^2*x4^5*x6 + -x3^2*x4^5*x7 + x3^2*x4^5 + x3^2*x4^3*x5*x6*x7 + -x3^2*x4^3*x5*x6 + -x3^2*x4^3*x5*x7 + x3^2*x4^3*x5 + -x3^2*x4^3*x6*x7 + x3^2*x4^3*x6 + x3^2*x4^3*x7 + -x3^2*x4^3 + x4^5*x5*x6*x7 + -x4^5*x5*x6 + -x4^5*x5*x7 + x4^5*x5 + -x4^5*x6*x7 + x4^5*x6 + x4^5*x7 + -x4^5 + x4*x5*x6*x7^2 + -x4*x5*x6*x7 + -x4*x5*x7^2 + x4*x5*x7 + -x4*x6*x7^2 + x4*x6*x7 + x4*x7^2 + -x4*x7 + -x5*x6*x7^2 + x5*x6 + x5*x7^2 + -x5 + x6*x7^2 + -x6 + -x7^2 + 1; frobby-0.9.5/test/frob/bug20.opt_irr000066400000000000000000000000271401527164200172370ustar00rootroot000000000000001 7 0 24 1 1 1 1 1 29 frobby-0.9.5/test/frob/bug20.opt_irr_min000066400000000000000000000000261401527164200201010ustar00rootroot000000000000001 7 0 2 2 5 1 1 1 12 frobby-0.9.5/test/frob/bug20.opt_std000066400000000000000000000000211401527164200172270ustar00rootroot000000000000000 7 no solution. frobby-0.9.5/test/frob/bug20.opt_std_min000066400000000000000000000000211401527164200200720ustar00rootroot000000000000000 7 no solution. frobby-0.9.5/test/frob/bug20.primdecom000066400000000000000000000004271401527164200175440ustar00rootroot0000000000000018 7 0 24 0 0 0 0 0 0 14 1 0 0 0 0 0 14 0 1 0 0 0 0 12 4 0 0 0 0 0 7 2 1 0 0 0 0 7 0 0 0 0 1 0 5 2 0 0 0 1 0 2 6 0 0 0 0 0 2 0 2 0 0 0 0 0 9 0 0 0 0 0 0 5 1 0 0 0 0 0 3 0 0 0 1 0 0 2 3 0 0 0 0 0 0 5 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug20.radical000066400000000000000000000001361401527164200171610ustar00rootroot000000000000006 7 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug20.test000066400000000000000000000006331401527164200165430ustar00rootroot0000000000000018 7 -24 -10 -1 0 0 0 2 -21 -8 -1 5 0 0 0 -17 2 6 0 0 0 0 -14 14 1 -1 0 0 0 -13 7 -1 -2 0 0 1 -12 -10 2 3 0 0 0 -9 2 -3 2 0 0 0 -8 -5 -5 1 0 0 1 -8 0 9 -2 0 0 0 -6 14 -8 1 0 0 0 -5 12 4 -3 0 0 0 -4 5 2 -4 0 0 1 -3 -12 5 1 0 0 0 -2 -19 3 0 0 0 1 -2 -6 -3 0 1 0 0 -2 -1 -3 -1 0 1 0 -2 24 -1 -4 0 0 0 -1 7 2 1 0 0 -1 frobby-0.9.5/test/frob/bug20.uni000066400000000000000000000004321401527164200163540ustar00rootroot00000000000000R = QQ[t]; p = t^29 + -5*t^28 + 10*t^27 + -10*t^26 + 5*t^25 + -t^24 + 2*t^22 + -7*t^21 + 7*t^20 + -6*t^17 + 3*t^16 + 5*t^15 + -8*t^14 + 8*t^13 + -10*t^12 + 15*t^11 + -19*t^10 + 19*t^9 + -13*t^8 + 5*t^7 + -4*t^6 + 6*t^5 + -6*t^4 + 5*t^3 + -t^2 + -2*t + 1; frobby-0.9.5/test/frob/bug21.alexdual000066400000000000000000000004511401527164200173620ustar00rootroot0000000000000015 9 0 10 4 3 2 1 1 1 1 0 10 3 4 1 2 1 1 1 0 10 3 1 3 2 1 1 1 0 10 2 5 1 2 1 1 1 0 10 2 3 3 1 1 1 1 0 10 1 5 2 1 1 1 1 0 10 1 3 2 2 1 1 1 0 9 4 4 1 2 1 1 1 0 8 4 1 3 2 1 1 1 0 8 3 2 3 2 1 1 1 0 8 1 3 3 2 1 1 1 0 6 2 3 3 2 1 1 1 0 4 4 3 3 2 1 1 1 0 4 1 5 3 2 1 1 1 0 1 2 5 3 2 1 1 1 frobby-0.9.5/test/frob/bug21.assoprimes000066400000000000000000000000271401527164200177470ustar00rootroot000000000000001 9 0 1 1 1 1 1 1 1 1 frobby-0.9.5/test/frob/bug21.dim000066400000000000000000000000021401527164200163240ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug21.euler000066400000000000000000000000021401527164200166670ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug21.frobInstance000066400000000000000000000000521401527164200201750ustar00rootroot00000000000000124 593 747 1308 1796 2516 2648 3659 3956 frobby-0.9.5/test/frob/bug21.frobNumber000066400000000000000000000000051401527164200176570ustar00rootroot000000000000006804 frobby-0.9.5/test/frob/bug21.intersection000066400000000000000000000010071401527164200202670ustar00rootroot0000000000000027 9 0 10 0 0 0 0 0 0 0 0 7 3 0 0 0 0 0 0 0 7 0 1 0 0 0 0 0 0 5 1 1 0 0 0 0 0 0 3 3 1 0 0 0 0 0 0 3 0 3 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 1 1 4 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 2 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 4 0 0 0 0 0 0 0 0 3 1 0 1 0 0 0 0 0 3 0 2 0 0 0 0 0 0 2 3 0 0 0 0 0 0 0 2 1 2 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 3 0 1 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug21.irrdecom000066400000000000000000000044451401527164200173760ustar00rootroot000000000000008 9 0 10 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 7 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 5 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug21.irrdecom_ideal000066400000000000000000000004431401527164200205260ustar00rootroot0000000000000015 9 0 10 3 1 1 1 1 1 1 0 7 4 1 1 1 1 1 1 0 7 1 3 1 1 1 1 1 0 5 3 3 1 1 1 1 1 0 3 4 3 1 1 1 1 1 0 3 2 4 1 1 1 1 1 0 3 1 5 1 1 1 1 1 0 2 1 2 3 1 1 1 1 0 1 4 3 2 1 1 1 1 0 1 4 1 2 2 1 1 1 0 1 3 3 1 2 1 1 1 0 1 3 1 3 1 1 1 1 0 1 2 5 1 1 1 1 1 0 1 2 2 3 1 1 1 1 0 1 1 3 2 2 1 1 1 frobby-0.9.5/test/frob/bug21.maxstandard000066400000000000000000000000041401527164200200630ustar00rootroot000000000000000 9 frobby-0.9.5/test/frob/bug21.minimize000066400000000000000000000010071401527164200174020ustar00rootroot0000000000000027 9 0 10 0 0 0 0 0 0 0 0 7 3 0 0 0 0 0 0 0 7 0 1 0 0 0 0 0 0 5 1 1 0 0 0 0 0 0 3 3 1 0 0 0 0 0 0 3 0 3 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 1 1 4 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 2 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 4 0 0 0 0 0 0 0 0 3 1 0 1 0 0 0 0 0 3 0 2 0 0 0 0 0 0 2 3 0 0 0 0 0 0 0 2 1 2 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 3 0 1 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug21.multi000066400000000000000000001410411401527164200167160ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8, x9]; p = x2^10*x3^3*x4*x5*x6*x7*x8*x9 + -x2^10*x3^3*x4*x5*x6*x7*x8 + -x2^10*x3^3*x4*x5*x6*x7*x9 + x2^10*x3^3*x4*x5*x6*x7 + -x2^10*x3^3*x4*x5*x6*x8*x9 + x2^10*x3^3*x4*x5*x6*x8 + x2^10*x3^3*x4*x5*x6*x9 + -x2^10*x3^3*x4*x5*x6 + -x2^10*x3^3*x4*x5*x7*x8*x9 + x2^10*x3^3*x4*x5*x7*x8 + x2^10*x3^3*x4*x5*x7*x9 + -x2^10*x3^3*x4*x5*x7 + x2^10*x3^3*x4*x5*x8*x9 + -x2^10*x3^3*x4*x5*x8 + -x2^10*x3^3*x4*x5*x9 + x2^10*x3^3*x4*x5 + -x2^10*x3^3*x4*x6*x7*x8*x9 + x2^10*x3^3*x4*x6*x7*x8 + x2^10*x3^3*x4*x6*x7*x9 + -x2^10*x3^3*x4*x6*x7 + x2^10*x3^3*x4*x6*x8*x9 + -x2^10*x3^3*x4*x6*x8 + -x2^10*x3^3*x4*x6*x9 + x2^10*x3^3*x4*x6 + x2^10*x3^3*x4*x7*x8*x9 + -x2^10*x3^3*x4*x7*x8 + -x2^10*x3^3*x4*x7*x9 + x2^10*x3^3*x4*x7 + -x2^10*x3^3*x4*x8*x9 + x2^10*x3^3*x4*x8 + x2^10*x3^3*x4*x9 + -x2^10*x3^3*x4 + -x2^10*x3^3*x5*x6*x7*x8*x9 + x2^10*x3^3*x5*x6*x7*x8 + x2^10*x3^3*x5*x6*x7*x9 + -x2^10*x3^3*x5*x6*x7 + x2^10*x3^3*x5*x6*x8*x9 + -x2^10*x3^3*x5*x6*x8 + -x2^10*x3^3*x5*x6*x9 + x2^10*x3^3*x5*x6 + x2^10*x3^3*x5*x7*x8*x9 + -x2^10*x3^3*x5*x7*x8 + -x2^10*x3^3*x5*x7*x9 + x2^10*x3^3*x5*x7 + -x2^10*x3^3*x5*x8*x9 + x2^10*x3^3*x5*x8 + x2^10*x3^3*x5*x9 + -x2^10*x3^3*x5 + x2^10*x3^3*x6*x7*x8*x9 + -x2^10*x3^3*x6*x7*x8 + -x2^10*x3^3*x6*x7*x9 + x2^10*x3^3*x6*x7 + -x2^10*x3^3*x6*x8*x9 + x2^10*x3^3*x6*x8 + x2^10*x3^3*x6*x9 + -x2^10*x3^3*x6 + -x2^10*x3^3*x7*x8*x9 + x2^10*x3^3*x7*x8 + x2^10*x3^3*x7*x9 + -x2^10*x3^3*x7 + x2^10*x3^3*x8*x9 + -x2^10*x3^3*x8 + -x2^10*x3^3*x9 + x2^10*x3^3 + -x2^10*x4*x5*x6*x7*x8*x9 + x2^10*x4*x5*x6*x7*x8 + x2^10*x4*x5*x6*x7*x9 + -x2^10*x4*x5*x6*x7 + x2^10*x4*x5*x6*x8*x9 + -x2^10*x4*x5*x6*x8 + -x2^10*x4*x5*x6*x9 + x2^10*x4*x5*x6 + x2^10*x4*x5*x7*x8*x9 + -x2^10*x4*x5*x7*x8 + -x2^10*x4*x5*x7*x9 + x2^10*x4*x5*x7 + -x2^10*x4*x5*x8*x9 + x2^10*x4*x5*x8 + x2^10*x4*x5*x9 + -x2^10*x4*x5 + x2^10*x4*x6*x7*x8*x9 + -x2^10*x4*x6*x7*x8 + -x2^10*x4*x6*x7*x9 + x2^10*x4*x6*x7 + -x2^10*x4*x6*x8*x9 + x2^10*x4*x6*x8 + x2^10*x4*x6*x9 + -x2^10*x4*x6 + -x2^10*x4*x7*x8*x9 + x2^10*x4*x7*x8 + x2^10*x4*x7*x9 + -x2^10*x4*x7 + x2^10*x4*x8*x9 + -x2^10*x4*x8 + -x2^10*x4*x9 + x2^10*x4 + x2^10*x5*x6*x7*x8*x9 + -x2^10*x5*x6*x7*x8 + -x2^10*x5*x6*x7*x9 + x2^10*x5*x6*x7 + -x2^10*x5*x6*x8*x9 + x2^10*x5*x6*x8 + x2^10*x5*x6*x9 + -x2^10*x5*x6 + -x2^10*x5*x7*x8*x9 + x2^10*x5*x7*x8 + x2^10*x5*x7*x9 + -x2^10*x5*x7 + x2^10*x5*x8*x9 + -x2^10*x5*x8 + -x2^10*x5*x9 + x2^10*x5 + -x2^10*x6*x7*x8*x9 + x2^10*x6*x7*x8 + x2^10*x6*x7*x9 + -x2^10*x6*x7 + x2^10*x6*x8*x9 + -x2^10*x6*x8 + -x2^10*x6*x9 + x2^10*x6 + x2^10*x7*x8*x9 + -x2^10*x7*x8 + -x2^10*x7*x9 + x2^10*x7 + -x2^10*x8*x9 + x2^10*x8 + x2^10*x9 + -x2^10 + x2^7*x3^4*x4*x5*x6*x7*x8*x9 + -x2^7*x3^4*x4*x5*x6*x7*x8 + -x2^7*x3^4*x4*x5*x6*x7*x9 + x2^7*x3^4*x4*x5*x6*x7 + -x2^7*x3^4*x4*x5*x6*x8*x9 + x2^7*x3^4*x4*x5*x6*x8 + x2^7*x3^4*x4*x5*x6*x9 + -x2^7*x3^4*x4*x5*x6 + -x2^7*x3^4*x4*x5*x7*x8*x9 + x2^7*x3^4*x4*x5*x7*x8 + x2^7*x3^4*x4*x5*x7*x9 + -x2^7*x3^4*x4*x5*x7 + x2^7*x3^4*x4*x5*x8*x9 + -x2^7*x3^4*x4*x5*x8 + -x2^7*x3^4*x4*x5*x9 + x2^7*x3^4*x4*x5 + -x2^7*x3^4*x4*x6*x7*x8*x9 + x2^7*x3^4*x4*x6*x7*x8 + x2^7*x3^4*x4*x6*x7*x9 + -x2^7*x3^4*x4*x6*x7 + x2^7*x3^4*x4*x6*x8*x9 + -x2^7*x3^4*x4*x6*x8 + -x2^7*x3^4*x4*x6*x9 + x2^7*x3^4*x4*x6 + x2^7*x3^4*x4*x7*x8*x9 + -x2^7*x3^4*x4*x7*x8 + -x2^7*x3^4*x4*x7*x9 + x2^7*x3^4*x4*x7 + -x2^7*x3^4*x4*x8*x9 + x2^7*x3^4*x4*x8 + x2^7*x3^4*x4*x9 + -x2^7*x3^4*x4 + -x2^7*x3^4*x5*x6*x7*x8*x9 + x2^7*x3^4*x5*x6*x7*x8 + x2^7*x3^4*x5*x6*x7*x9 + -x2^7*x3^4*x5*x6*x7 + x2^7*x3^4*x5*x6*x8*x9 + -x2^7*x3^4*x5*x6*x8 + -x2^7*x3^4*x5*x6*x9 + x2^7*x3^4*x5*x6 + x2^7*x3^4*x5*x7*x8*x9 + -x2^7*x3^4*x5*x7*x8 + -x2^7*x3^4*x5*x7*x9 + x2^7*x3^4*x5*x7 + -x2^7*x3^4*x5*x8*x9 + x2^7*x3^4*x5*x8 + x2^7*x3^4*x5*x9 + -x2^7*x3^4*x5 + x2^7*x3^4*x6*x7*x8*x9 + -x2^7*x3^4*x6*x7*x8 + -x2^7*x3^4*x6*x7*x9 + x2^7*x3^4*x6*x7 + -x2^7*x3^4*x6*x8*x9 + x2^7*x3^4*x6*x8 + x2^7*x3^4*x6*x9 + -x2^7*x3^4*x6 + -x2^7*x3^4*x7*x8*x9 + x2^7*x3^4*x7*x8 + x2^7*x3^4*x7*x9 + -x2^7*x3^4*x7 + x2^7*x3^4*x8*x9 + -x2^7*x3^4*x8 + -x2^7*x3^4*x9 + x2^7*x3^4 + -x2^7*x3^3*x4*x5*x6*x7*x8*x9 + x2^7*x3^3*x4*x5*x6*x7*x8 + x2^7*x3^3*x4*x5*x6*x7*x9 + -x2^7*x3^3*x4*x5*x6*x7 + x2^7*x3^3*x4*x5*x6*x8*x9 + -x2^7*x3^3*x4*x5*x6*x8 + -x2^7*x3^3*x4*x5*x6*x9 + x2^7*x3^3*x4*x5*x6 + x2^7*x3^3*x4*x5*x7*x8*x9 + -x2^7*x3^3*x4*x5*x7*x8 + -x2^7*x3^3*x4*x5*x7*x9 + x2^7*x3^3*x4*x5*x7 + -x2^7*x3^3*x4*x5*x8*x9 + x2^7*x3^3*x4*x5*x8 + x2^7*x3^3*x4*x5*x9 + -x2^7*x3^3*x4*x5 + x2^7*x3^3*x4*x6*x7*x8*x9 + -x2^7*x3^3*x4*x6*x7*x8 + -x2^7*x3^3*x4*x6*x7*x9 + x2^7*x3^3*x4*x6*x7 + -x2^7*x3^3*x4*x6*x8*x9 + x2^7*x3^3*x4*x6*x8 + x2^7*x3^3*x4*x6*x9 + -x2^7*x3^3*x4*x6 + -x2^7*x3^3*x4*x7*x8*x9 + x2^7*x3^3*x4*x7*x8 + x2^7*x3^3*x4*x7*x9 + -x2^7*x3^3*x4*x7 + x2^7*x3^3*x4*x8*x9 + -x2^7*x3^3*x4*x8 + -x2^7*x3^3*x4*x9 + x2^7*x3^3*x4 + x2^7*x3^3*x5*x6*x7*x8*x9 + -x2^7*x3^3*x5*x6*x7*x8 + -x2^7*x3^3*x5*x6*x7*x9 + x2^7*x3^3*x5*x6*x7 + -x2^7*x3^3*x5*x6*x8*x9 + x2^7*x3^3*x5*x6*x8 + x2^7*x3^3*x5*x6*x9 + -x2^7*x3^3*x5*x6 + -x2^7*x3^3*x5*x7*x8*x9 + x2^7*x3^3*x5*x7*x8 + x2^7*x3^3*x5*x7*x9 + -x2^7*x3^3*x5*x7 + x2^7*x3^3*x5*x8*x9 + -x2^7*x3^3*x5*x8 + -x2^7*x3^3*x5*x9 + x2^7*x3^3*x5 + -x2^7*x3^3*x6*x7*x8*x9 + x2^7*x3^3*x6*x7*x8 + x2^7*x3^3*x6*x7*x9 + -x2^7*x3^3*x6*x7 + x2^7*x3^3*x6*x8*x9 + -x2^7*x3^3*x6*x8 + -x2^7*x3^3*x6*x9 + x2^7*x3^3*x6 + x2^7*x3^3*x7*x8*x9 + -x2^7*x3^3*x7*x8 + -x2^7*x3^3*x7*x9 + x2^7*x3^3*x7 + -x2^7*x3^3*x8*x9 + x2^7*x3^3*x8 + x2^7*x3^3*x9 + -x2^7*x3^3 + x2^7*x3*x4^3*x5*x6*x7*x8*x9 + -x2^7*x3*x4^3*x5*x6*x7*x8 + -x2^7*x3*x4^3*x5*x6*x7*x9 + x2^7*x3*x4^3*x5*x6*x7 + -x2^7*x3*x4^3*x5*x6*x8*x9 + x2^7*x3*x4^3*x5*x6*x8 + x2^7*x3*x4^3*x5*x6*x9 + -x2^7*x3*x4^3*x5*x6 + -x2^7*x3*x4^3*x5*x7*x8*x9 + x2^7*x3*x4^3*x5*x7*x8 + x2^7*x3*x4^3*x5*x7*x9 + -x2^7*x3*x4^3*x5*x7 + x2^7*x3*x4^3*x5*x8*x9 + -x2^7*x3*x4^3*x5*x8 + -x2^7*x3*x4^3*x5*x9 + x2^7*x3*x4^3*x5 + -x2^7*x3*x4^3*x6*x7*x8*x9 + x2^7*x3*x4^3*x6*x7*x8 + x2^7*x3*x4^3*x6*x7*x9 + -x2^7*x3*x4^3*x6*x7 + x2^7*x3*x4^3*x6*x8*x9 + -x2^7*x3*x4^3*x6*x8 + -x2^7*x3*x4^3*x6*x9 + x2^7*x3*x4^3*x6 + x2^7*x3*x4^3*x7*x8*x9 + -x2^7*x3*x4^3*x7*x8 + -x2^7*x3*x4^3*x7*x9 + x2^7*x3*x4^3*x7 + -x2^7*x3*x4^3*x8*x9 + x2^7*x3*x4^3*x8 + x2^7*x3*x4^3*x9 + -x2^7*x3*x4^3 + -x2^7*x3*x4*x5*x6*x7*x8*x9 + x2^7*x3*x4*x5*x6*x7*x8 + x2^7*x3*x4*x5*x6*x7*x9 + -x2^7*x3*x4*x5*x6*x7 + x2^7*x3*x4*x5*x6*x8*x9 + -x2^7*x3*x4*x5*x6*x8 + -x2^7*x3*x4*x5*x6*x9 + x2^7*x3*x4*x5*x6 + x2^7*x3*x4*x5*x7*x8*x9 + -x2^7*x3*x4*x5*x7*x8 + -x2^7*x3*x4*x5*x7*x9 + x2^7*x3*x4*x5*x7 + -x2^7*x3*x4*x5*x8*x9 + x2^7*x3*x4*x5*x8 + x2^7*x3*x4*x5*x9 + -x2^7*x3*x4*x5 + x2^7*x3*x4*x6*x7*x8*x9 + -x2^7*x3*x4*x6*x7*x8 + -x2^7*x3*x4*x6*x7*x9 + x2^7*x3*x4*x6*x7 + -x2^7*x3*x4*x6*x8*x9 + x2^7*x3*x4*x6*x8 + x2^7*x3*x4*x6*x9 + -x2^7*x3*x4*x6 + -x2^7*x3*x4*x7*x8*x9 + x2^7*x3*x4*x7*x8 + x2^7*x3*x4*x7*x9 + -x2^7*x3*x4*x7 + x2^7*x3*x4*x8*x9 + -x2^7*x3*x4*x8 + -x2^7*x3*x4*x9 + x2^7*x3*x4 + -x2^7*x4^3*x5*x6*x7*x8*x9 + x2^7*x4^3*x5*x6*x7*x8 + x2^7*x4^3*x5*x6*x7*x9 + -x2^7*x4^3*x5*x6*x7 + x2^7*x4^3*x5*x6*x8*x9 + -x2^7*x4^3*x5*x6*x8 + -x2^7*x4^3*x5*x6*x9 + x2^7*x4^3*x5*x6 + x2^7*x4^3*x5*x7*x8*x9 + -x2^7*x4^3*x5*x7*x8 + -x2^7*x4^3*x5*x7*x9 + x2^7*x4^3*x5*x7 + -x2^7*x4^3*x5*x8*x9 + x2^7*x4^3*x5*x8 + x2^7*x4^3*x5*x9 + -x2^7*x4^3*x5 + x2^7*x4^3*x6*x7*x8*x9 + -x2^7*x4^3*x6*x7*x8 + -x2^7*x4^3*x6*x7*x9 + x2^7*x4^3*x6*x7 + -x2^7*x4^3*x6*x8*x9 + x2^7*x4^3*x6*x8 + x2^7*x4^3*x6*x9 + -x2^7*x4^3*x6 + -x2^7*x4^3*x7*x8*x9 + x2^7*x4^3*x7*x8 + x2^7*x4^3*x7*x9 + -x2^7*x4^3*x7 + x2^7*x4^3*x8*x9 + -x2^7*x4^3*x8 + -x2^7*x4^3*x9 + x2^7*x4^3 + x2^7*x4*x5*x6*x7*x8*x9 + -x2^7*x4*x5*x6*x7*x8 + -x2^7*x4*x5*x6*x7*x9 + x2^7*x4*x5*x6*x7 + -x2^7*x4*x5*x6*x8*x9 + x2^7*x4*x5*x6*x8 + x2^7*x4*x5*x6*x9 + -x2^7*x4*x5*x6 + -x2^7*x4*x5*x7*x8*x9 + x2^7*x4*x5*x7*x8 + x2^7*x4*x5*x7*x9 + -x2^7*x4*x5*x7 + x2^7*x4*x5*x8*x9 + -x2^7*x4*x5*x8 + -x2^7*x4*x5*x9 + x2^7*x4*x5 + -x2^7*x4*x6*x7*x8*x9 + x2^7*x4*x6*x7*x8 + x2^7*x4*x6*x7*x9 + -x2^7*x4*x6*x7 + x2^7*x4*x6*x8*x9 + -x2^7*x4*x6*x8 + -x2^7*x4*x6*x9 + x2^7*x4*x6 + x2^7*x4*x7*x8*x9 + -x2^7*x4*x7*x8 + -x2^7*x4*x7*x9 + x2^7*x4*x7 + -x2^7*x4*x8*x9 + x2^7*x4*x8 + x2^7*x4*x9 + -x2^7*x4 + x2^5*x3^3*x4^3*x5*x6*x7*x8*x9 + -x2^5*x3^3*x4^3*x5*x6*x7*x8 + -x2^5*x3^3*x4^3*x5*x6*x7*x9 + x2^5*x3^3*x4^3*x5*x6*x7 + -x2^5*x3^3*x4^3*x5*x6*x8*x9 + x2^5*x3^3*x4^3*x5*x6*x8 + x2^5*x3^3*x4^3*x5*x6*x9 + -x2^5*x3^3*x4^3*x5*x6 + -x2^5*x3^3*x4^3*x5*x7*x8*x9 + x2^5*x3^3*x4^3*x5*x7*x8 + x2^5*x3^3*x4^3*x5*x7*x9 + -x2^5*x3^3*x4^3*x5*x7 + x2^5*x3^3*x4^3*x5*x8*x9 + -x2^5*x3^3*x4^3*x5*x8 + -x2^5*x3^3*x4^3*x5*x9 + x2^5*x3^3*x4^3*x5 + -x2^5*x3^3*x4^3*x6*x7*x8*x9 + x2^5*x3^3*x4^3*x6*x7*x8 + x2^5*x3^3*x4^3*x6*x7*x9 + -x2^5*x3^3*x4^3*x6*x7 + x2^5*x3^3*x4^3*x6*x8*x9 + -x2^5*x3^3*x4^3*x6*x8 + -x2^5*x3^3*x4^3*x6*x9 + x2^5*x3^3*x4^3*x6 + x2^5*x3^3*x4^3*x7*x8*x9 + -x2^5*x3^3*x4^3*x7*x8 + -x2^5*x3^3*x4^3*x7*x9 + x2^5*x3^3*x4^3*x7 + -x2^5*x3^3*x4^3*x8*x9 + x2^5*x3^3*x4^3*x8 + x2^5*x3^3*x4^3*x9 + -x2^5*x3^3*x4^3 + -x2^5*x3^3*x4*x5*x6*x7*x8*x9 + x2^5*x3^3*x4*x5*x6*x7*x8 + x2^5*x3^3*x4*x5*x6*x7*x9 + -x2^5*x3^3*x4*x5*x6*x7 + x2^5*x3^3*x4*x5*x6*x8*x9 + -x2^5*x3^3*x4*x5*x6*x8 + -x2^5*x3^3*x4*x5*x6*x9 + x2^5*x3^3*x4*x5*x6 + x2^5*x3^3*x4*x5*x7*x8*x9 + -x2^5*x3^3*x4*x5*x7*x8 + -x2^5*x3^3*x4*x5*x7*x9 + x2^5*x3^3*x4*x5*x7 + -x2^5*x3^3*x4*x5*x8*x9 + x2^5*x3^3*x4*x5*x8 + x2^5*x3^3*x4*x5*x9 + -x2^5*x3^3*x4*x5 + x2^5*x3^3*x4*x6*x7*x8*x9 + -x2^5*x3^3*x4*x6*x7*x8 + -x2^5*x3^3*x4*x6*x7*x9 + x2^5*x3^3*x4*x6*x7 + -x2^5*x3^3*x4*x6*x8*x9 + x2^5*x3^3*x4*x6*x8 + x2^5*x3^3*x4*x6*x9 + -x2^5*x3^3*x4*x6 + -x2^5*x3^3*x4*x7*x8*x9 + x2^5*x3^3*x4*x7*x8 + x2^5*x3^3*x4*x7*x9 + -x2^5*x3^3*x4*x7 + x2^5*x3^3*x4*x8*x9 + -x2^5*x3^3*x4*x8 + -x2^5*x3^3*x4*x9 + x2^5*x3^3*x4 + -x2^5*x3*x4^3*x5*x6*x7*x8*x9 + x2^5*x3*x4^3*x5*x6*x7*x8 + x2^5*x3*x4^3*x5*x6*x7*x9 + -x2^5*x3*x4^3*x5*x6*x7 + x2^5*x3*x4^3*x5*x6*x8*x9 + -x2^5*x3*x4^3*x5*x6*x8 + -x2^5*x3*x4^3*x5*x6*x9 + x2^5*x3*x4^3*x5*x6 + x2^5*x3*x4^3*x5*x7*x8*x9 + -x2^5*x3*x4^3*x5*x7*x8 + -x2^5*x3*x4^3*x5*x7*x9 + x2^5*x3*x4^3*x5*x7 + -x2^5*x3*x4^3*x5*x8*x9 + x2^5*x3*x4^3*x5*x8 + x2^5*x3*x4^3*x5*x9 + -x2^5*x3*x4^3*x5 + x2^5*x3*x4^3*x6*x7*x8*x9 + -x2^5*x3*x4^3*x6*x7*x8 + -x2^5*x3*x4^3*x6*x7*x9 + x2^5*x3*x4^3*x6*x7 + -x2^5*x3*x4^3*x6*x8*x9 + x2^5*x3*x4^3*x6*x8 + x2^5*x3*x4^3*x6*x9 + -x2^5*x3*x4^3*x6 + -x2^5*x3*x4^3*x7*x8*x9 + x2^5*x3*x4^3*x7*x8 + x2^5*x3*x4^3*x7*x9 + -x2^5*x3*x4^3*x7 + x2^5*x3*x4^3*x8*x9 + -x2^5*x3*x4^3*x8 + -x2^5*x3*x4^3*x9 + x2^5*x3*x4^3 + x2^5*x3*x4*x5*x6*x7*x8*x9 + -x2^5*x3*x4*x5*x6*x7*x8 + -x2^5*x3*x4*x5*x6*x7*x9 + x2^5*x3*x4*x5*x6*x7 + -x2^5*x3*x4*x5*x6*x8*x9 + x2^5*x3*x4*x5*x6*x8 + x2^5*x3*x4*x5*x6*x9 + -x2^5*x3*x4*x5*x6 + -x2^5*x3*x4*x5*x7*x8*x9 + x2^5*x3*x4*x5*x7*x8 + x2^5*x3*x4*x5*x7*x9 + -x2^5*x3*x4*x5*x7 + x2^5*x3*x4*x5*x8*x9 + -x2^5*x3*x4*x5*x8 + -x2^5*x3*x4*x5*x9 + x2^5*x3*x4*x5 + -x2^5*x3*x4*x6*x7*x8*x9 + x2^5*x3*x4*x6*x7*x8 + x2^5*x3*x4*x6*x7*x9 + -x2^5*x3*x4*x6*x7 + x2^5*x3*x4*x6*x8*x9 + -x2^5*x3*x4*x6*x8 + -x2^5*x3*x4*x6*x9 + x2^5*x3*x4*x6 + x2^5*x3*x4*x7*x8*x9 + -x2^5*x3*x4*x7*x8 + -x2^5*x3*x4*x7*x9 + x2^5*x3*x4*x7 + -x2^5*x3*x4*x8*x9 + x2^5*x3*x4*x8 + x2^5*x3*x4*x9 + -x2^5*x3*x4 + x2^3*x3^4*x4^3*x5*x6*x7*x8*x9 + -x2^3*x3^4*x4^3*x5*x6*x7*x8 + -x2^3*x3^4*x4^3*x5*x6*x7*x9 + x2^3*x3^4*x4^3*x5*x6*x7 + -x2^3*x3^4*x4^3*x5*x6*x8*x9 + x2^3*x3^4*x4^3*x5*x6*x8 + x2^3*x3^4*x4^3*x5*x6*x9 + -x2^3*x3^4*x4^3*x5*x6 + -x2^3*x3^4*x4^3*x5*x7*x8*x9 + x2^3*x3^4*x4^3*x5*x7*x8 + x2^3*x3^4*x4^3*x5*x7*x9 + -x2^3*x3^4*x4^3*x5*x7 + x2^3*x3^4*x4^3*x5*x8*x9 + -x2^3*x3^4*x4^3*x5*x8 + -x2^3*x3^4*x4^3*x5*x9 + x2^3*x3^4*x4^3*x5 + -x2^3*x3^4*x4^3*x6*x7*x8*x9 + x2^3*x3^4*x4^3*x6*x7*x8 + x2^3*x3^4*x4^3*x6*x7*x9 + -x2^3*x3^4*x4^3*x6*x7 + x2^3*x3^4*x4^3*x6*x8*x9 + -x2^3*x3^4*x4^3*x6*x8 + -x2^3*x3^4*x4^3*x6*x9 + x2^3*x3^4*x4^3*x6 + x2^3*x3^4*x4^3*x7*x8*x9 + -x2^3*x3^4*x4^3*x7*x8 + -x2^3*x3^4*x4^3*x7*x9 + x2^3*x3^4*x4^3*x7 + -x2^3*x3^4*x4^3*x8*x9 + x2^3*x3^4*x4^3*x8 + x2^3*x3^4*x4^3*x9 + -x2^3*x3^4*x4^3 + -x2^3*x3^4*x4*x5*x6*x7*x8*x9 + x2^3*x3^4*x4*x5*x6*x7*x8 + x2^3*x3^4*x4*x5*x6*x7*x9 + -x2^3*x3^4*x4*x5*x6*x7 + x2^3*x3^4*x4*x5*x6*x8*x9 + -x2^3*x3^4*x4*x5*x6*x8 + -x2^3*x3^4*x4*x5*x6*x9 + x2^3*x3^4*x4*x5*x6 + x2^3*x3^4*x4*x5*x7*x8*x9 + -x2^3*x3^4*x4*x5*x7*x8 + -x2^3*x3^4*x4*x5*x7*x9 + x2^3*x3^4*x4*x5*x7 + -x2^3*x3^4*x4*x5*x8*x9 + x2^3*x3^4*x4*x5*x8 + x2^3*x3^4*x4*x5*x9 + -x2^3*x3^4*x4*x5 + x2^3*x3^4*x4*x6*x7*x8*x9 + -x2^3*x3^4*x4*x6*x7*x8 + -x2^3*x3^4*x4*x6*x7*x9 + x2^3*x3^4*x4*x6*x7 + -x2^3*x3^4*x4*x6*x8*x9 + x2^3*x3^4*x4*x6*x8 + x2^3*x3^4*x4*x6*x9 + -x2^3*x3^4*x4*x6 + -x2^3*x3^4*x4*x7*x8*x9 + x2^3*x3^4*x4*x7*x8 + x2^3*x3^4*x4*x7*x9 + -x2^3*x3^4*x4*x7 + x2^3*x3^4*x4*x8*x9 + -x2^3*x3^4*x4*x8 + -x2^3*x3^4*x4*x9 + x2^3*x3^4*x4 + -x2^3*x3^3*x4^3*x5*x6*x7*x8*x9 + x2^3*x3^3*x4^3*x5*x6*x7*x8 + x2^3*x3^3*x4^3*x5*x6*x7*x9 + -x2^3*x3^3*x4^3*x5*x6*x7 + x2^3*x3^3*x4^3*x5*x6*x8*x9 + -x2^3*x3^3*x4^3*x5*x6*x8 + -x2^3*x3^3*x4^3*x5*x6*x9 + x2^3*x3^3*x4^3*x5*x6 + x2^3*x3^3*x4^3*x5*x7*x8*x9 + -x2^3*x3^3*x4^3*x5*x7*x8 + -x2^3*x3^3*x4^3*x5*x7*x9 + x2^3*x3^3*x4^3*x5*x7 + -x2^3*x3^3*x4^3*x5*x8*x9 + x2^3*x3^3*x4^3*x5*x8 + x2^3*x3^3*x4^3*x5*x9 + -x2^3*x3^3*x4^3*x5 + x2^3*x3^3*x4^3*x6*x7*x8*x9 + -x2^3*x3^3*x4^3*x6*x7*x8 + -x2^3*x3^3*x4^3*x6*x7*x9 + x2^3*x3^3*x4^3*x6*x7 + -x2^3*x3^3*x4^3*x6*x8*x9 + x2^3*x3^3*x4^3*x6*x8 + x2^3*x3^3*x4^3*x6*x9 + -x2^3*x3^3*x4^3*x6 + -x2^3*x3^3*x4^3*x7*x8*x9 + x2^3*x3^3*x4^3*x7*x8 + x2^3*x3^3*x4^3*x7*x9 + -x2^3*x3^3*x4^3*x7 + x2^3*x3^3*x4^3*x8*x9 + -x2^3*x3^3*x4^3*x8 + -x2^3*x3^3*x4^3*x9 + x2^3*x3^3*x4^3 + x2^3*x3^3*x4*x5*x6*x7*x8*x9 + -x2^3*x3^3*x4*x5*x6*x7*x8 + -x2^3*x3^3*x4*x5*x6*x7*x9 + x2^3*x3^3*x4*x5*x6*x7 + -x2^3*x3^3*x4*x5*x6*x8*x9 + x2^3*x3^3*x4*x5*x6*x8 + x2^3*x3^3*x4*x5*x6*x9 + -x2^3*x3^3*x4*x5*x6 + -x2^3*x3^3*x4*x5*x7*x8*x9 + x2^3*x3^3*x4*x5*x7*x8 + x2^3*x3^3*x4*x5*x7*x9 + -x2^3*x3^3*x4*x5*x7 + x2^3*x3^3*x4*x5*x8*x9 + -x2^3*x3^3*x4*x5*x8 + -x2^3*x3^3*x4*x5*x9 + x2^3*x3^3*x4*x5 + -x2^3*x3^3*x4*x6*x7*x8*x9 + x2^3*x3^3*x4*x6*x7*x8 + x2^3*x3^3*x4*x6*x7*x9 + -x2^3*x3^3*x4*x6*x7 + x2^3*x3^3*x4*x6*x8*x9 + -x2^3*x3^3*x4*x6*x8 + -x2^3*x3^3*x4*x6*x9 + x2^3*x3^3*x4*x6 + x2^3*x3^3*x4*x7*x8*x9 + -x2^3*x3^3*x4*x7*x8 + -x2^3*x3^3*x4*x7*x9 + x2^3*x3^3*x4*x7 + -x2^3*x3^3*x4*x8*x9 + x2^3*x3^3*x4*x8 + x2^3*x3^3*x4*x9 + -x2^3*x3^3*x4 + x2^3*x3^2*x4^4*x5*x6*x7*x8*x9 + -x2^3*x3^2*x4^4*x5*x6*x7*x8 + -x2^3*x3^2*x4^4*x5*x6*x7*x9 + x2^3*x3^2*x4^4*x5*x6*x7 + -x2^3*x3^2*x4^4*x5*x6*x8*x9 + x2^3*x3^2*x4^4*x5*x6*x8 + x2^3*x3^2*x4^4*x5*x6*x9 + -x2^3*x3^2*x4^4*x5*x6 + -x2^3*x3^2*x4^4*x5*x7*x8*x9 + x2^3*x3^2*x4^4*x5*x7*x8 + x2^3*x3^2*x4^4*x5*x7*x9 + -x2^3*x3^2*x4^4*x5*x7 + x2^3*x3^2*x4^4*x5*x8*x9 + -x2^3*x3^2*x4^4*x5*x8 + -x2^3*x3^2*x4^4*x5*x9 + x2^3*x3^2*x4^4*x5 + -x2^3*x3^2*x4^4*x6*x7*x8*x9 + x2^3*x3^2*x4^4*x6*x7*x8 + x2^3*x3^2*x4^4*x6*x7*x9 + -x2^3*x3^2*x4^4*x6*x7 + x2^3*x3^2*x4^4*x6*x8*x9 + -x2^3*x3^2*x4^4*x6*x8 + -x2^3*x3^2*x4^4*x6*x9 + x2^3*x3^2*x4^4*x6 + x2^3*x3^2*x4^4*x7*x8*x9 + -x2^3*x3^2*x4^4*x7*x8 + -x2^3*x3^2*x4^4*x7*x9 + x2^3*x3^2*x4^4*x7 + -x2^3*x3^2*x4^4*x8*x9 + x2^3*x3^2*x4^4*x8 + x2^3*x3^2*x4^4*x9 + -x2^3*x3^2*x4^4 + -x2^3*x3^2*x4^3*x5*x6*x7*x8*x9 + x2^3*x3^2*x4^3*x5*x6*x7*x8 + x2^3*x3^2*x4^3*x5*x6*x7*x9 + -x2^3*x3^2*x4^3*x5*x6*x7 + x2^3*x3^2*x4^3*x5*x6*x8*x9 + -x2^3*x3^2*x4^3*x5*x6*x8 + -x2^3*x3^2*x4^3*x5*x6*x9 + x2^3*x3^2*x4^3*x5*x6 + x2^3*x3^2*x4^3*x5*x7*x8*x9 + -x2^3*x3^2*x4^3*x5*x7*x8 + -x2^3*x3^2*x4^3*x5*x7*x9 + x2^3*x3^2*x4^3*x5*x7 + -x2^3*x3^2*x4^3*x5*x8*x9 + x2^3*x3^2*x4^3*x5*x8 + x2^3*x3^2*x4^3*x5*x9 + -x2^3*x3^2*x4^3*x5 + x2^3*x3^2*x4^3*x6*x7*x8*x9 + -x2^3*x3^2*x4^3*x6*x7*x8 + -x2^3*x3^2*x4^3*x6*x7*x9 + x2^3*x3^2*x4^3*x6*x7 + -x2^3*x3^2*x4^3*x6*x8*x9 + x2^3*x3^2*x4^3*x6*x8 + x2^3*x3^2*x4^3*x6*x9 + -x2^3*x3^2*x4^3*x6 + -x2^3*x3^2*x4^3*x7*x8*x9 + x2^3*x3^2*x4^3*x7*x8 + x2^3*x3^2*x4^3*x7*x9 + -x2^3*x3^2*x4^3*x7 + x2^3*x3^2*x4^3*x8*x9 + -x2^3*x3^2*x4^3*x8 + -x2^3*x3^2*x4^3*x9 + x2^3*x3^2*x4^3 + x2^3*x3*x4^5*x5*x6*x7*x8*x9 + -x2^3*x3*x4^5*x5*x6*x7*x8 + -x2^3*x3*x4^5*x5*x6*x7*x9 + x2^3*x3*x4^5*x5*x6*x7 + -x2^3*x3*x4^5*x5*x6*x8*x9 + x2^3*x3*x4^5*x5*x6*x8 + x2^3*x3*x4^5*x5*x6*x9 + -x2^3*x3*x4^5*x5*x6 + -x2^3*x3*x4^5*x5*x7*x8*x9 + x2^3*x3*x4^5*x5*x7*x8 + x2^3*x3*x4^5*x5*x7*x9 + -x2^3*x3*x4^5*x5*x7 + x2^3*x3*x4^5*x5*x8*x9 + -x2^3*x3*x4^5*x5*x8 + -x2^3*x3*x4^5*x5*x9 + x2^3*x3*x4^5*x5 + -x2^3*x3*x4^5*x6*x7*x8*x9 + x2^3*x3*x4^5*x6*x7*x8 + x2^3*x3*x4^5*x6*x7*x9 + -x2^3*x3*x4^5*x6*x7 + x2^3*x3*x4^5*x6*x8*x9 + -x2^3*x3*x4^5*x6*x8 + -x2^3*x3*x4^5*x6*x9 + x2^3*x3*x4^5*x6 + x2^3*x3*x4^5*x7*x8*x9 + -x2^3*x3*x4^5*x7*x8 + -x2^3*x3*x4^5*x7*x9 + x2^3*x3*x4^5*x7 + -x2^3*x3*x4^5*x8*x9 + x2^3*x3*x4^5*x8 + x2^3*x3*x4^5*x9 + -x2^3*x3*x4^5 + -x2^3*x3*x4^4*x5*x6*x7*x8*x9 + x2^3*x3*x4^4*x5*x6*x7*x8 + x2^3*x3*x4^4*x5*x6*x7*x9 + -x2^3*x3*x4^4*x5*x6*x7 + x2^3*x3*x4^4*x5*x6*x8*x9 + -x2^3*x3*x4^4*x5*x6*x8 + -x2^3*x3*x4^4*x5*x6*x9 + x2^3*x3*x4^4*x5*x6 + x2^3*x3*x4^4*x5*x7*x8*x9 + -x2^3*x3*x4^4*x5*x7*x8 + -x2^3*x3*x4^4*x5*x7*x9 + x2^3*x3*x4^4*x5*x7 + -x2^3*x3*x4^4*x5*x8*x9 + x2^3*x3*x4^4*x5*x8 + x2^3*x3*x4^4*x5*x9 + -x2^3*x3*x4^4*x5 + x2^3*x3*x4^4*x6*x7*x8*x9 + -x2^3*x3*x4^4*x6*x7*x8 + -x2^3*x3*x4^4*x6*x7*x9 + x2^3*x3*x4^4*x6*x7 + -x2^3*x3*x4^4*x6*x8*x9 + x2^3*x3*x4^4*x6*x8 + x2^3*x3*x4^4*x6*x9 + -x2^3*x3*x4^4*x6 + -x2^3*x3*x4^4*x7*x8*x9 + x2^3*x3*x4^4*x7*x8 + x2^3*x3*x4^4*x7*x9 + -x2^3*x3*x4^4*x7 + x2^3*x3*x4^4*x8*x9 + -x2^3*x3*x4^4*x8 + -x2^3*x3*x4^4*x9 + x2^3*x3*x4^4 + -x2^3*x4^5*x5*x6*x7*x8*x9 + x2^3*x4^5*x5*x6*x7*x8 + x2^3*x4^5*x5*x6*x7*x9 + -x2^3*x4^5*x5*x6*x7 + x2^3*x4^5*x5*x6*x8*x9 + -x2^3*x4^5*x5*x6*x8 + -x2^3*x4^5*x5*x6*x9 + x2^3*x4^5*x5*x6 + x2^3*x4^5*x5*x7*x8*x9 + -x2^3*x4^5*x5*x7*x8 + -x2^3*x4^5*x5*x7*x9 + x2^3*x4^5*x5*x7 + -x2^3*x4^5*x5*x8*x9 + x2^3*x4^5*x5*x8 + x2^3*x4^5*x5*x9 + -x2^3*x4^5*x5 + x2^3*x4^5*x6*x7*x8*x9 + -x2^3*x4^5*x6*x7*x8 + -x2^3*x4^5*x6*x7*x9 + x2^3*x4^5*x6*x7 + -x2^3*x4^5*x6*x8*x9 + x2^3*x4^5*x6*x8 + x2^3*x4^5*x6*x9 + -x2^3*x4^5*x6 + -x2^3*x4^5*x7*x8*x9 + x2^3*x4^5*x7*x8 + x2^3*x4^5*x7*x9 + -x2^3*x4^5*x7 + x2^3*x4^5*x8*x9 + -x2^3*x4^5*x8 + -x2^3*x4^5*x9 + x2^3*x4^5 + x2^3*x4^3*x5*x6*x7*x8*x9 + -x2^3*x4^3*x5*x6*x7*x8 + -x2^3*x4^3*x5*x6*x7*x9 + x2^3*x4^3*x5*x6*x7 + -x2^3*x4^3*x5*x6*x8*x9 + x2^3*x4^3*x5*x6*x8 + x2^3*x4^3*x5*x6*x9 + -x2^3*x4^3*x5*x6 + -x2^3*x4^3*x5*x7*x8*x9 + x2^3*x4^3*x5*x7*x8 + x2^3*x4^3*x5*x7*x9 + -x2^3*x4^3*x5*x7 + x2^3*x4^3*x5*x8*x9 + -x2^3*x4^3*x5*x8 + -x2^3*x4^3*x5*x9 + x2^3*x4^3*x5 + -x2^3*x4^3*x6*x7*x8*x9 + x2^3*x4^3*x6*x7*x8 + x2^3*x4^3*x6*x7*x9 + -x2^3*x4^3*x6*x7 + x2^3*x4^3*x6*x8*x9 + -x2^3*x4^3*x6*x8 + -x2^3*x4^3*x6*x9 + x2^3*x4^3*x6 + x2^3*x4^3*x7*x8*x9 + -x2^3*x4^3*x7*x8 + -x2^3*x4^3*x7*x9 + x2^3*x4^3*x7 + -x2^3*x4^3*x8*x9 + x2^3*x4^3*x8 + x2^3*x4^3*x9 + -x2^3*x4^3 + x2^2*x3*x4^2*x5^3*x6*x7*x8*x9 + -x2^2*x3*x4^2*x5^3*x6*x7*x8 + -x2^2*x3*x4^2*x5^3*x6*x7*x9 + x2^2*x3*x4^2*x5^3*x6*x7 + -x2^2*x3*x4^2*x5^3*x6*x8*x9 + x2^2*x3*x4^2*x5^3*x6*x8 + x2^2*x3*x4^2*x5^3*x6*x9 + -x2^2*x3*x4^2*x5^3*x6 + -x2^2*x3*x4^2*x5^3*x7*x8*x9 + x2^2*x3*x4^2*x5^3*x7*x8 + x2^2*x3*x4^2*x5^3*x7*x9 + -x2^2*x3*x4^2*x5^3*x7 + x2^2*x3*x4^2*x5^3*x8*x9 + -x2^2*x3*x4^2*x5^3*x8 + -x2^2*x3*x4^2*x5^3*x9 + x2^2*x3*x4^2*x5^3 + -x2^2*x3*x4^2*x5*x6*x7*x8*x9 + x2^2*x3*x4^2*x5*x6*x7*x8 + x2^2*x3*x4^2*x5*x6*x7*x9 + -x2^2*x3*x4^2*x5*x6*x7 + x2^2*x3*x4^2*x5*x6*x8*x9 + -x2^2*x3*x4^2*x5*x6*x8 + -x2^2*x3*x4^2*x5*x6*x9 + x2^2*x3*x4^2*x5*x6 + x2^2*x3*x4^2*x5*x7*x8*x9 + -x2^2*x3*x4^2*x5*x7*x8 + -x2^2*x3*x4^2*x5*x7*x9 + x2^2*x3*x4^2*x5*x7 + -x2^2*x3*x4^2*x5*x8*x9 + x2^2*x3*x4^2*x5*x8 + x2^2*x3*x4^2*x5*x9 + -x2^2*x3*x4^2*x5 + -x2^2*x3*x5^3*x6*x7*x8*x9 + x2^2*x3*x5^3*x6*x7*x8 + x2^2*x3*x5^3*x6*x7*x9 + -x2^2*x3*x5^3*x6*x7 + x2^2*x3*x5^3*x6*x8*x9 + -x2^2*x3*x5^3*x6*x8 + -x2^2*x3*x5^3*x6*x9 + x2^2*x3*x5^3*x6 + x2^2*x3*x5^3*x7*x8*x9 + -x2^2*x3*x5^3*x7*x8 + -x2^2*x3*x5^3*x7*x9 + x2^2*x3*x5^3*x7 + -x2^2*x3*x5^3*x8*x9 + x2^2*x3*x5^3*x8 + x2^2*x3*x5^3*x9 + -x2^2*x3*x5^3 + x2^2*x3*x5*x6*x7*x8*x9 + -x2^2*x3*x5*x6*x7*x8 + -x2^2*x3*x5*x6*x7*x9 + x2^2*x3*x5*x6*x7 + -x2^2*x3*x5*x6*x8*x9 + x2^2*x3*x5*x6*x8 + x2^2*x3*x5*x6*x9 + -x2^2*x3*x5*x6 + -x2^2*x3*x5*x7*x8*x9 + x2^2*x3*x5*x7*x8 + x2^2*x3*x5*x7*x9 + -x2^2*x3*x5*x7 + x2^2*x3*x5*x8*x9 + -x2^2*x3*x5*x8 + -x2^2*x3*x5*x9 + x2^2*x3*x5 + -x2^2*x4^2*x5^3*x6*x7*x8*x9 + x2^2*x4^2*x5^3*x6*x7*x8 + x2^2*x4^2*x5^3*x6*x7*x9 + -x2^2*x4^2*x5^3*x6*x7 + x2^2*x4^2*x5^3*x6*x8*x9 + -x2^2*x4^2*x5^3*x6*x8 + -x2^2*x4^2*x5^3*x6*x9 + x2^2*x4^2*x5^3*x6 + x2^2*x4^2*x5^3*x7*x8*x9 + -x2^2*x4^2*x5^3*x7*x8 + -x2^2*x4^2*x5^3*x7*x9 + x2^2*x4^2*x5^3*x7 + -x2^2*x4^2*x5^3*x8*x9 + x2^2*x4^2*x5^3*x8 + x2^2*x4^2*x5^3*x9 + -x2^2*x4^2*x5^3 + x2^2*x4^2*x5*x6*x7*x8*x9 + -x2^2*x4^2*x5*x6*x7*x8 + -x2^2*x4^2*x5*x6*x7*x9 + x2^2*x4^2*x5*x6*x7 + -x2^2*x4^2*x5*x6*x8*x9 + x2^2*x4^2*x5*x6*x8 + x2^2*x4^2*x5*x6*x9 + -x2^2*x4^2*x5*x6 + -x2^2*x4^2*x5*x7*x8*x9 + x2^2*x4^2*x5*x7*x8 + x2^2*x4^2*x5*x7*x9 + -x2^2*x4^2*x5*x7 + x2^2*x4^2*x5*x8*x9 + -x2^2*x4^2*x5*x8 + -x2^2*x4^2*x5*x9 + x2^2*x4^2*x5 + x2^2*x5^3*x6*x7*x8*x9 + -x2^2*x5^3*x6*x7*x8 + -x2^2*x5^3*x6*x7*x9 + x2^2*x5^3*x6*x7 + -x2^2*x5^3*x6*x8*x9 + x2^2*x5^3*x6*x8 + x2^2*x5^3*x6*x9 + -x2^2*x5^3*x6 + -x2^2*x5^3*x7*x8*x9 + x2^2*x5^3*x7*x8 + x2^2*x5^3*x7*x9 + -x2^2*x5^3*x7 + x2^2*x5^3*x8*x9 + -x2^2*x5^3*x8 + -x2^2*x5^3*x9 + x2^2*x5^3 + -x2^2*x5*x6*x7*x8*x9 + x2^2*x5*x6*x7*x8 + x2^2*x5*x6*x7*x9 + -x2^2*x5*x6*x7 + x2^2*x5*x6*x8*x9 + -x2^2*x5*x6*x8 + -x2^2*x5*x6*x9 + x2^2*x5*x6 + x2^2*x5*x7*x8*x9 + -x2^2*x5*x7*x8 + -x2^2*x5*x7*x9 + x2^2*x5*x7 + -x2^2*x5*x8*x9 + x2^2*x5*x8 + x2^2*x5*x9 + -x2^2*x5 + x2*x3^4*x4^3*x5^2*x6*x7*x8*x9 + -x2*x3^4*x4^3*x5^2*x6*x7*x8 + -x2*x3^4*x4^3*x5^2*x6*x7*x9 + x2*x3^4*x4^3*x5^2*x6*x7 + -x2*x3^4*x4^3*x5^2*x6*x8*x9 + x2*x3^4*x4^3*x5^2*x6*x8 + x2*x3^4*x4^3*x5^2*x6*x9 + -x2*x3^4*x4^3*x5^2*x6 + -x2*x3^4*x4^3*x5^2*x7*x8*x9 + x2*x3^4*x4^3*x5^2*x7*x8 + x2*x3^4*x4^3*x5^2*x7*x9 + -x2*x3^4*x4^3*x5^2*x7 + x2*x3^4*x4^3*x5^2*x8*x9 + -x2*x3^4*x4^3*x5^2*x8 + -x2*x3^4*x4^3*x5^2*x9 + x2*x3^4*x4^3*x5^2 + -x2*x3^4*x4^3*x5*x6*x7*x8*x9 + x2*x3^4*x4^3*x5*x6*x7*x8 + x2*x3^4*x4^3*x5*x6*x7*x9 + -x2*x3^4*x4^3*x5*x6*x7 + x2*x3^4*x4^3*x5*x6*x8*x9 + -x2*x3^4*x4^3*x5*x6*x8 + -x2*x3^4*x4^3*x5*x6*x9 + x2*x3^4*x4^3*x5*x6 + x2*x3^4*x4^3*x5*x7*x8*x9 + -x2*x3^4*x4^3*x5*x7*x8 + -x2*x3^4*x4^3*x5*x7*x9 + x2*x3^4*x4^3*x5*x7 + -x2*x3^4*x4^3*x5*x8*x9 + x2*x3^4*x4^3*x5*x8 + x2*x3^4*x4^3*x5*x9 + -x2*x3^4*x4^3*x5 + x2*x3^4*x4*x5^2*x6^2*x7*x8*x9 + -x2*x3^4*x4*x5^2*x6^2*x7*x8 + -x2*x3^4*x4*x5^2*x6^2*x7*x9 + x2*x3^4*x4*x5^2*x6^2*x7 + -x2*x3^4*x4*x5^2*x6^2*x8*x9 + x2*x3^4*x4*x5^2*x6^2*x8 + x2*x3^4*x4*x5^2*x6^2*x9 + -x2*x3^4*x4*x5^2*x6^2 + -x2*x3^4*x4*x5^2*x6*x7*x8*x9 + x2*x3^4*x4*x5^2*x6*x7*x8 + x2*x3^4*x4*x5^2*x6*x7*x9 + -x2*x3^4*x4*x5^2*x6*x7 + x2*x3^4*x4*x5^2*x6*x8*x9 + -x2*x3^4*x4*x5^2*x6*x8 + -x2*x3^4*x4*x5^2*x6*x9 + x2*x3^4*x4*x5^2*x6 + -x2*x3^4*x4*x6^2*x7*x8*x9 + x2*x3^4*x4*x6^2*x7*x8 + x2*x3^4*x4*x6^2*x7*x9 + -x2*x3^4*x4*x6^2*x7 + x2*x3^4*x4*x6^2*x8*x9 + -x2*x3^4*x4*x6^2*x8 + -x2*x3^4*x4*x6^2*x9 + x2*x3^4*x4*x6^2 + x2*x3^4*x4*x6*x7*x8*x9 + -x2*x3^4*x4*x6*x7*x8 + -x2*x3^4*x4*x6*x7*x9 + x2*x3^4*x4*x6*x7 + -x2*x3^4*x4*x6*x8*x9 + x2*x3^4*x4*x6*x8 + x2*x3^4*x4*x6*x9 + -x2*x3^4*x4*x6 + -x2*x3^4*x5^2*x6^2*x7*x8*x9 + x2*x3^4*x5^2*x6^2*x7*x8 + x2*x3^4*x5^2*x6^2*x7*x9 + -x2*x3^4*x5^2*x6^2*x7 + x2*x3^4*x5^2*x6^2*x8*x9 + -x2*x3^4*x5^2*x6^2*x8 + -x2*x3^4*x5^2*x6^2*x9 + x2*x3^4*x5^2*x6^2 + x2*x3^4*x5^2*x7*x8*x9 + -x2*x3^4*x5^2*x7*x8 + -x2*x3^4*x5^2*x7*x9 + x2*x3^4*x5^2*x7 + -x2*x3^4*x5^2*x8*x9 + x2*x3^4*x5^2*x8 + x2*x3^4*x5^2*x9 + -x2*x3^4*x5^2 + x2*x3^4*x5*x6*x7*x8*x9 + -x2*x3^4*x5*x6*x7*x8 + -x2*x3^4*x5*x6*x7*x9 + x2*x3^4*x5*x6*x7 + -x2*x3^4*x5*x6*x8*x9 + x2*x3^4*x5*x6*x8 + x2*x3^4*x5*x6*x9 + -x2*x3^4*x5*x6 + -x2*x3^4*x5*x7*x8*x9 + x2*x3^4*x5*x7*x8 + x2*x3^4*x5*x7*x9 + -x2*x3^4*x5*x7 + x2*x3^4*x5*x8*x9 + -x2*x3^4*x5*x8 + -x2*x3^4*x5*x9 + x2*x3^4*x5 + x2*x3^4*x6^2*x7*x8*x9 + -x2*x3^4*x6^2*x7*x8 + -x2*x3^4*x6^2*x7*x9 + x2*x3^4*x6^2*x7 + -x2*x3^4*x6^2*x8*x9 + x2*x3^4*x6^2*x8 + x2*x3^4*x6^2*x9 + -x2*x3^4*x6^2 + -x2*x3^4*x6*x7*x8*x9 + x2*x3^4*x6*x7*x8 + x2*x3^4*x6*x7*x9 + -x2*x3^4*x6*x7 + x2*x3^4*x6*x8*x9 + -x2*x3^4*x6*x8 + -x2*x3^4*x6*x9 + x2*x3^4*x6 + x2*x3^3*x4^3*x5*x6^2*x7*x8*x9 + -x2*x3^3*x4^3*x5*x6^2*x7*x8 + -x2*x3^3*x4^3*x5*x6^2*x7*x9 + x2*x3^3*x4^3*x5*x6^2*x7 + -x2*x3^3*x4^3*x5*x6^2*x8*x9 + x2*x3^3*x4^3*x5*x6^2*x8 + x2*x3^3*x4^3*x5*x6^2*x9 + -x2*x3^3*x4^3*x5*x6^2 + -x2*x3^3*x4^3*x5*x6*x7*x8*x9 + x2*x3^3*x4^3*x5*x6*x7*x8 + x2*x3^3*x4^3*x5*x6*x7*x9 + -x2*x3^3*x4^3*x5*x6*x7 + x2*x3^3*x4^3*x5*x6*x8*x9 + -x2*x3^3*x4^3*x5*x6*x8 + -x2*x3^3*x4^3*x5*x6*x9 + x2*x3^3*x4^3*x5*x6 + -x2*x3^3*x4^3*x6^2*x7*x8*x9 + x2*x3^3*x4^3*x6^2*x7*x8 + x2*x3^3*x4^3*x6^2*x7*x9 + -x2*x3^3*x4^3*x6^2*x7 + x2*x3^3*x4^3*x6^2*x8*x9 + -x2*x3^3*x4^3*x6^2*x8 + -x2*x3^3*x4^3*x6^2*x9 + x2*x3^3*x4^3*x6^2 + x2*x3^3*x4^3*x6*x7*x8*x9 + -x2*x3^3*x4^3*x6*x7*x8 + -x2*x3^3*x4^3*x6*x7*x9 + x2*x3^3*x4^3*x6*x7 + -x2*x3^3*x4^3*x6*x8*x9 + x2*x3^3*x4^3*x6*x8 + x2*x3^3*x4^3*x6*x9 + -x2*x3^3*x4^3*x6 + x2*x3^3*x4*x5^3*x6*x7*x8*x9 + -x2*x3^3*x4*x5^3*x6*x7*x8 + -x2*x3^3*x4*x5^3*x6*x7*x9 + x2*x3^3*x4*x5^3*x6*x7 + -x2*x3^3*x4*x5^3*x6*x8*x9 + x2*x3^3*x4*x5^3*x6*x8 + x2*x3^3*x4*x5^3*x6*x9 + -x2*x3^3*x4*x5^3*x6 + -x2*x3^3*x4*x5^3*x7*x8*x9 + x2*x3^3*x4*x5^3*x7*x8 + x2*x3^3*x4*x5^3*x7*x9 + -x2*x3^3*x4*x5^3*x7 + x2*x3^3*x4*x5^3*x8*x9 + -x2*x3^3*x4*x5^3*x8 + -x2*x3^3*x4*x5^3*x9 + x2*x3^3*x4*x5^3 + -x2*x3^3*x4*x5^2*x6*x7*x8*x9 + x2*x3^3*x4*x5^2*x6*x7*x8 + x2*x3^3*x4*x5^2*x6*x7*x9 + -x2*x3^3*x4*x5^2*x6*x7 + x2*x3^3*x4*x5^2*x6*x8*x9 + -x2*x3^3*x4*x5^2*x6*x8 + -x2*x3^3*x4*x5^2*x6*x9 + x2*x3^3*x4*x5^2*x6 + x2*x3^3*x4*x5^2*x7*x8*x9 + -x2*x3^3*x4*x5^2*x7*x8 + -x2*x3^3*x4*x5^2*x7*x9 + x2*x3^3*x4*x5^2*x7 + -x2*x3^3*x4*x5^2*x8*x9 + x2*x3^3*x4*x5^2*x8 + x2*x3^3*x4*x5^2*x9 + -x2*x3^3*x4*x5^2 + -x2*x3^3*x4*x5*x6^2*x7*x8*x9 + x2*x3^3*x4*x5*x6^2*x7*x8 + x2*x3^3*x4*x5*x6^2*x7*x9 + -x2*x3^3*x4*x5*x6^2*x7 + x2*x3^3*x4*x5*x6^2*x8*x9 + -x2*x3^3*x4*x5*x6^2*x8 + -x2*x3^3*x4*x5*x6^2*x9 + x2*x3^3*x4*x5*x6^2 + x2*x3^3*x4*x5*x6*x7*x8*x9 + -x2*x3^3*x4*x5*x6*x7*x8 + -x2*x3^3*x4*x5*x6*x7*x9 + x2*x3^3*x4*x5*x6*x7 + -x2*x3^3*x4*x5*x6*x8*x9 + x2*x3^3*x4*x5*x6*x8 + x2*x3^3*x4*x5*x6*x9 + -x2*x3^3*x4*x5*x6 + x2*x3^3*x4*x6^2*x7*x8*x9 + -x2*x3^3*x4*x6^2*x7*x8 + -x2*x3^3*x4*x6^2*x7*x9 + x2*x3^3*x4*x6^2*x7 + -x2*x3^3*x4*x6^2*x8*x9 + x2*x3^3*x4*x6^2*x8 + x2*x3^3*x4*x6^2*x9 + -x2*x3^3*x4*x6^2 + -x2*x3^3*x4*x6*x7*x8*x9 + x2*x3^3*x4*x6*x7*x8 + x2*x3^3*x4*x6*x7*x9 + -x2*x3^3*x4*x6*x7 + x2*x3^3*x4*x6*x8*x9 + -x2*x3^3*x4*x6*x8 + -x2*x3^3*x4*x6*x9 + x2*x3^3*x4*x6 + -x2*x3^3*x5^3*x6*x7*x8*x9 + x2*x3^3*x5^3*x6*x7*x8 + x2*x3^3*x5^3*x6*x7*x9 + -x2*x3^3*x5^3*x6*x7 + x2*x3^3*x5^3*x6*x8*x9 + -x2*x3^3*x5^3*x6*x8 + -x2*x3^3*x5^3*x6*x9 + x2*x3^3*x5^3*x6 + x2*x3^3*x5^3*x7*x8*x9 + -x2*x3^3*x5^3*x7*x8 + -x2*x3^3*x5^3*x7*x9 + x2*x3^3*x5^3*x7 + -x2*x3^3*x5^3*x8*x9 + x2*x3^3*x5^3*x8 + x2*x3^3*x5^3*x9 + -x2*x3^3*x5^3 + x2*x3^3*x5^2*x6*x7*x8*x9 + -x2*x3^3*x5^2*x6*x7*x8 + -x2*x3^3*x5^2*x6*x7*x9 + x2*x3^3*x5^2*x6*x7 + -x2*x3^3*x5^2*x6*x8*x9 + x2*x3^3*x5^2*x6*x8 + x2*x3^3*x5^2*x6*x9 + -x2*x3^3*x5^2*x6 + -x2*x3^3*x5^2*x7*x8*x9 + x2*x3^3*x5^2*x7*x8 + x2*x3^3*x5^2*x7*x9 + -x2*x3^3*x5^2*x7 + x2*x3^3*x5^2*x8*x9 + -x2*x3^3*x5^2*x8 + -x2*x3^3*x5^2*x9 + x2*x3^3*x5^2 + x2*x3^2*x4^5*x5*x6*x7*x8*x9 + -x2*x3^2*x4^5*x5*x6*x7*x8 + -x2*x3^2*x4^5*x5*x6*x7*x9 + x2*x3^2*x4^5*x5*x6*x7 + -x2*x3^2*x4^5*x5*x6*x8*x9 + x2*x3^2*x4^5*x5*x6*x8 + x2*x3^2*x4^5*x5*x6*x9 + -x2*x3^2*x4^5*x5*x6 + -x2*x3^2*x4^5*x5*x7*x8*x9 + x2*x3^2*x4^5*x5*x7*x8 + x2*x3^2*x4^5*x5*x7*x9 + -x2*x3^2*x4^5*x5*x7 + x2*x3^2*x4^5*x5*x8*x9 + -x2*x3^2*x4^5*x5*x8 + -x2*x3^2*x4^5*x5*x9 + x2*x3^2*x4^5*x5 + -x2*x3^2*x4^5*x6*x7*x8*x9 + x2*x3^2*x4^5*x6*x7*x8 + x2*x3^2*x4^5*x6*x7*x9 + -x2*x3^2*x4^5*x6*x7 + x2*x3^2*x4^5*x6*x8*x9 + -x2*x3^2*x4^5*x6*x8 + -x2*x3^2*x4^5*x6*x9 + x2*x3^2*x4^5*x6 + x2*x3^2*x4^5*x7*x8*x9 + -x2*x3^2*x4^5*x7*x8 + -x2*x3^2*x4^5*x7*x9 + x2*x3^2*x4^5*x7 + -x2*x3^2*x4^5*x8*x9 + x2*x3^2*x4^5*x8 + x2*x3^2*x4^5*x9 + -x2*x3^2*x4^5 + -x2*x3^2*x4^4*x5*x6*x7*x8*x9 + x2*x3^2*x4^4*x5*x6*x7*x8 + x2*x3^2*x4^4*x5*x6*x7*x9 + -x2*x3^2*x4^4*x5*x6*x7 + x2*x3^2*x4^4*x5*x6*x8*x9 + -x2*x3^2*x4^4*x5*x6*x8 + -x2*x3^2*x4^4*x5*x6*x9 + x2*x3^2*x4^4*x5*x6 + x2*x3^2*x4^4*x5*x7*x8*x9 + -x2*x3^2*x4^4*x5*x7*x8 + -x2*x3^2*x4^4*x5*x7*x9 + x2*x3^2*x4^4*x5*x7 + -x2*x3^2*x4^4*x5*x8*x9 + x2*x3^2*x4^4*x5*x8 + x2*x3^2*x4^4*x5*x9 + -x2*x3^2*x4^4*x5 + x2*x3^2*x4^4*x6*x7*x8*x9 + -x2*x3^2*x4^4*x6*x7*x8 + -x2*x3^2*x4^4*x6*x7*x9 + x2*x3^2*x4^4*x6*x7 + -x2*x3^2*x4^4*x6*x8*x9 + x2*x3^2*x4^4*x6*x8 + x2*x3^2*x4^4*x6*x9 + -x2*x3^2*x4^4*x6 + -x2*x3^2*x4^4*x7*x8*x9 + x2*x3^2*x4^4*x7*x8 + x2*x3^2*x4^4*x7*x9 + -x2*x3^2*x4^4*x7 + x2*x3^2*x4^4*x8*x9 + -x2*x3^2*x4^4*x8 + -x2*x3^2*x4^4*x9 + x2*x3^2*x4^4 + x2*x3^2*x4^2*x5^3*x6*x7*x8*x9 + -x2*x3^2*x4^2*x5^3*x6*x7*x8 + -x2*x3^2*x4^2*x5^3*x6*x7*x9 + x2*x3^2*x4^2*x5^3*x6*x7 + -x2*x3^2*x4^2*x5^3*x6*x8*x9 + x2*x3^2*x4^2*x5^3*x6*x8 + x2*x3^2*x4^2*x5^3*x6*x9 + -x2*x3^2*x4^2*x5^3*x6 + -x2*x3^2*x4^2*x5^3*x7*x8*x9 + x2*x3^2*x4^2*x5^3*x7*x8 + x2*x3^2*x4^2*x5^3*x7*x9 + -x2*x3^2*x4^2*x5^3*x7 + x2*x3^2*x4^2*x5^3*x8*x9 + -x2*x3^2*x4^2*x5^3*x8 + -x2*x3^2*x4^2*x5^3*x9 + x2*x3^2*x4^2*x5^3 + -x2*x3^2*x4^2*x5^2*x6*x7*x8*x9 + x2*x3^2*x4^2*x5^2*x6*x7*x8 + x2*x3^2*x4^2*x5^2*x6*x7*x9 + -x2*x3^2*x4^2*x5^2*x6*x7 + x2*x3^2*x4^2*x5^2*x6*x8*x9 + -x2*x3^2*x4^2*x5^2*x6*x8 + -x2*x3^2*x4^2*x5^2*x6*x9 + x2*x3^2*x4^2*x5^2*x6 + x2*x3^2*x4^2*x5^2*x7*x8*x9 + -x2*x3^2*x4^2*x5^2*x7*x8 + -x2*x3^2*x4^2*x5^2*x7*x9 + x2*x3^2*x4^2*x5^2*x7 + -x2*x3^2*x4^2*x5^2*x8*x9 + x2*x3^2*x4^2*x5^2*x8 + x2*x3^2*x4^2*x5^2*x9 + -x2*x3^2*x4^2*x5^2 + -x2*x3^2*x4*x5^3*x6*x7*x8*x9 + x2*x3^2*x4*x5^3*x6*x7*x8 + x2*x3^2*x4*x5^3*x6*x7*x9 + -x2*x3^2*x4*x5^3*x6*x7 + x2*x3^2*x4*x5^3*x6*x8*x9 + -x2*x3^2*x4*x5^3*x6*x8 + -x2*x3^2*x4*x5^3*x6*x9 + x2*x3^2*x4*x5^3*x6 + x2*x3^2*x4*x5^3*x7*x8*x9 + -x2*x3^2*x4*x5^3*x7*x8 + -x2*x3^2*x4*x5^3*x7*x9 + x2*x3^2*x4*x5^3*x7 + -x2*x3^2*x4*x5^3*x8*x9 + x2*x3^2*x4*x5^3*x8 + x2*x3^2*x4*x5^3*x9 + -x2*x3^2*x4*x5^3 + x2*x3^2*x4*x5^2*x6*x7*x8*x9 + -x2*x3^2*x4*x5^2*x6*x7*x8 + -x2*x3^2*x4*x5^2*x6*x7*x9 + x2*x3^2*x4*x5^2*x6*x7 + -x2*x3^2*x4*x5^2*x6*x8*x9 + x2*x3^2*x4*x5^2*x6*x8 + x2*x3^2*x4*x5^2*x6*x9 + -x2*x3^2*x4*x5^2*x6 + -x2*x3^2*x4*x5^2*x7*x8*x9 + x2*x3^2*x4*x5^2*x7*x8 + x2*x3^2*x4*x5^2*x7*x9 + -x2*x3^2*x4*x5^2*x7 + x2*x3^2*x4*x5^2*x8*x9 + -x2*x3^2*x4*x5^2*x8 + -x2*x3^2*x4*x5^2*x9 + x2*x3^2*x4*x5^2 + -x2*x3*x4^5*x5*x6*x7*x8*x9 + x2*x3*x4^5*x5*x6*x7*x8 + x2*x3*x4^5*x5*x6*x7*x9 + -x2*x3*x4^5*x5*x6*x7 + x2*x3*x4^5*x5*x6*x8*x9 + -x2*x3*x4^5*x5*x6*x8 + -x2*x3*x4^5*x5*x6*x9 + x2*x3*x4^5*x5*x6 + x2*x3*x4^5*x5*x7*x8*x9 + -x2*x3*x4^5*x5*x7*x8 + -x2*x3*x4^5*x5*x7*x9 + x2*x3*x4^5*x5*x7 + -x2*x3*x4^5*x5*x8*x9 + x2*x3*x4^5*x5*x8 + x2*x3*x4^5*x5*x9 + -x2*x3*x4^5*x5 + x2*x3*x4^5*x6*x7*x8*x9 + -x2*x3*x4^5*x6*x7*x8 + -x2*x3*x4^5*x6*x7*x9 + x2*x3*x4^5*x6*x7 + -x2*x3*x4^5*x6*x8*x9 + x2*x3*x4^5*x6*x8 + x2*x3*x4^5*x6*x9 + -x2*x3*x4^5*x6 + -x2*x3*x4^5*x7*x8*x9 + x2*x3*x4^5*x7*x8 + x2*x3*x4^5*x7*x9 + -x2*x3*x4^5*x7 + x2*x3*x4^5*x8*x9 + -x2*x3*x4^5*x8 + -x2*x3*x4^5*x9 + x2*x3*x4^5 + x2*x3*x4^4*x5*x6*x7*x8*x9 + -x2*x3*x4^4*x5*x6*x7*x8 + -x2*x3*x4^4*x5*x6*x7*x9 + x2*x3*x4^4*x5*x6*x7 + -x2*x3*x4^4*x5*x6*x8*x9 + x2*x3*x4^4*x5*x6*x8 + x2*x3*x4^4*x5*x6*x9 + -x2*x3*x4^4*x5*x6 + -x2*x3*x4^4*x5*x7*x8*x9 + x2*x3*x4^4*x5*x7*x8 + x2*x3*x4^4*x5*x7*x9 + -x2*x3*x4^4*x5*x7 + x2*x3*x4^4*x5*x8*x9 + -x2*x3*x4^4*x5*x8 + -x2*x3*x4^4*x5*x9 + x2*x3*x4^4*x5 + -x2*x3*x4^4*x6*x7*x8*x9 + x2*x3*x4^4*x6*x7*x8 + x2*x3*x4^4*x6*x7*x9 + -x2*x3*x4^4*x6*x7 + x2*x3*x4^4*x6*x8*x9 + -x2*x3*x4^4*x6*x8 + -x2*x3*x4^4*x6*x9 + x2*x3*x4^4*x6 + x2*x3*x4^4*x7*x8*x9 + -x2*x3*x4^4*x7*x8 + -x2*x3*x4^4*x7*x9 + x2*x3*x4^4*x7 + -x2*x3*x4^4*x8*x9 + x2*x3*x4^4*x8 + x2*x3*x4^4*x9 + -x2*x3*x4^4 + x2*x3*x4^3*x5^2*x6^2*x7*x8*x9 + -x2*x3*x4^3*x5^2*x6^2*x7*x8 + -x2*x3*x4^3*x5^2*x6^2*x7*x9 + x2*x3*x4^3*x5^2*x6^2*x7 + -x2*x3*x4^3*x5^2*x6^2*x8*x9 + x2*x3*x4^3*x5^2*x6^2*x8 + x2*x3*x4^3*x5^2*x6^2*x9 + -x2*x3*x4^3*x5^2*x6^2 + -x2*x3*x4^3*x5^2*x6*x7*x8*x9 + x2*x3*x4^3*x5^2*x6*x7*x8 + x2*x3*x4^3*x5^2*x6*x7*x9 + -x2*x3*x4^3*x5^2*x6*x7 + x2*x3*x4^3*x5^2*x6*x8*x9 + -x2*x3*x4^3*x5^2*x6*x8 + -x2*x3*x4^3*x5^2*x6*x9 + x2*x3*x4^3*x5^2*x6 + -x2*x3*x4^3*x5*x6^2*x7*x8*x9 + x2*x3*x4^3*x5*x6^2*x7*x8 + x2*x3*x4^3*x5*x6^2*x7*x9 + -x2*x3*x4^3*x5*x6^2*x7 + x2*x3*x4^3*x5*x6^2*x8*x9 + -x2*x3*x4^3*x5*x6^2*x8 + -x2*x3*x4^3*x5*x6^2*x9 + x2*x3*x4^3*x5*x6^2 + x2*x3*x4^3*x5*x6*x7*x8*x9 + -x2*x3*x4^3*x5*x6*x7*x8 + -x2*x3*x4^3*x5*x6*x7*x9 + x2*x3*x4^3*x5*x6*x7 + -x2*x3*x4^3*x5*x6*x8*x9 + x2*x3*x4^3*x5*x6*x8 + x2*x3*x4^3*x5*x6*x9 + -x2*x3*x4^3*x5*x6 + -x2*x3*x4^2*x5^3*x6*x7*x8*x9 + x2*x3*x4^2*x5^3*x6*x7*x8 + x2*x3*x4^2*x5^3*x6*x7*x9 + -x2*x3*x4^2*x5^3*x6*x7 + x2*x3*x4^2*x5^3*x6*x8*x9 + -x2*x3*x4^2*x5^3*x6*x8 + -x2*x3*x4^2*x5^3*x6*x9 + x2*x3*x4^2*x5^3*x6 + x2*x3*x4^2*x5^3*x7*x8*x9 + -x2*x3*x4^2*x5^3*x7*x8 + -x2*x3*x4^2*x5^3*x7*x9 + x2*x3*x4^2*x5^3*x7 + -x2*x3*x4^2*x5^3*x8*x9 + x2*x3*x4^2*x5^3*x8 + x2*x3*x4^2*x5^3*x9 + -x2*x3*x4^2*x5^3 + x2*x3*x4^2*x5*x6*x7*x8*x9 + -x2*x3*x4^2*x5*x6*x7*x8 + -x2*x3*x4^2*x5*x6*x7*x9 + x2*x3*x4^2*x5*x6*x7 + -x2*x3*x4^2*x5*x6*x8*x9 + x2*x3*x4^2*x5*x6*x8 + x2*x3*x4^2*x5*x6*x9 + -x2*x3*x4^2*x5*x6 + -x2*x3*x4^2*x5*x7*x8*x9 + x2*x3*x4^2*x5*x7*x8 + x2*x3*x4^2*x5*x7*x9 + -x2*x3*x4^2*x5*x7 + x2*x3*x4^2*x5*x8*x9 + -x2*x3*x4^2*x5*x8 + -x2*x3*x4^2*x5*x9 + x2*x3*x4^2*x5 + -x2*x3*x4*x5^2*x6^2*x7*x8*x9 + x2*x3*x4*x5^2*x6^2*x7*x8 + x2*x3*x4*x5^2*x6^2*x7*x9 + -x2*x3*x4*x5^2*x6^2*x7 + x2*x3*x4*x5^2*x6^2*x8*x9 + -x2*x3*x4*x5^2*x6^2*x8 + -x2*x3*x4*x5^2*x6^2*x9 + x2*x3*x4*x5^2*x6^2 + x2*x3*x4*x5^2*x6*x7*x8*x9 + -x2*x3*x4*x5^2*x6*x7*x8 + -x2*x3*x4*x5^2*x6*x7*x9 + x2*x3*x4*x5^2*x6*x7 + -x2*x3*x4*x5^2*x6*x8*x9 + x2*x3*x4*x5^2*x6*x8 + x2*x3*x4*x5^2*x6*x9 + -x2*x3*x4*x5^2*x6 + x2*x3*x4*x5*x6^2*x7*x8*x9 + -x2*x3*x4*x5*x6^2*x7*x8 + -x2*x3*x4*x5*x6^2*x7*x9 + x2*x3*x4*x5*x6^2*x7 + -x2*x3*x4*x5*x6^2*x8*x9 + x2*x3*x4*x5*x6^2*x8 + x2*x3*x4*x5*x6^2*x9 + -x2*x3*x4*x5*x6^2 + -x2*x3*x4*x5*x6*x7*x8*x9 + x2*x3*x4*x5*x6*x7*x8 + x2*x3*x4*x5*x6*x7*x9 + -x2*x3*x4*x5*x6*x7 + x2*x3*x4*x5*x6*x8*x9 + -x2*x3*x4*x5*x6*x8 + -x2*x3*x4*x5*x6*x9 + x2*x3*x4*x5*x6 + x2*x3*x5^3*x6*x7*x8*x9 + -x2*x3*x5^3*x6*x7*x8 + -x2*x3*x5^3*x6*x7*x9 + x2*x3*x5^3*x6*x7 + -x2*x3*x5^3*x6*x8*x9 + x2*x3*x5^3*x6*x8 + x2*x3*x5^3*x6*x9 + -x2*x3*x5^3*x6 + -x2*x3*x5^3*x7*x8*x9 + x2*x3*x5^3*x7*x8 + x2*x3*x5^3*x7*x9 + -x2*x3*x5^3*x7 + x2*x3*x5^3*x8*x9 + -x2*x3*x5^3*x8 + -x2*x3*x5^3*x9 + x2*x3*x5^3 + -x2*x3*x5*x6*x7*x8*x9 + x2*x3*x5*x6*x7*x8 + x2*x3*x5*x6*x7*x9 + -x2*x3*x5*x6*x7 + x2*x3*x5*x6*x8*x9 + -x2*x3*x5*x6*x8 + -x2*x3*x5*x6*x9 + x2*x3*x5*x6 + x2*x3*x5*x7*x8*x9 + -x2*x3*x5*x7*x8 + -x2*x3*x5*x7*x9 + x2*x3*x5*x7 + -x2*x3*x5*x8*x9 + x2*x3*x5*x8 + x2*x3*x5*x9 + -x2*x3*x5 + -x2*x4^3*x5^2*x6^2*x7*x8*x9 + x2*x4^3*x5^2*x6^2*x7*x8 + x2*x4^3*x5^2*x6^2*x7*x9 + -x2*x4^3*x5^2*x6^2*x7 + x2*x4^3*x5^2*x6^2*x8*x9 + -x2*x4^3*x5^2*x6^2*x8 + -x2*x4^3*x5^2*x6^2*x9 + x2*x4^3*x5^2*x6^2 + x2*x4^3*x5^2*x7*x8*x9 + -x2*x4^3*x5^2*x7*x8 + -x2*x4^3*x5^2*x7*x9 + x2*x4^3*x5^2*x7 + -x2*x4^3*x5^2*x8*x9 + x2*x4^3*x5^2*x8 + x2*x4^3*x5^2*x9 + -x2*x4^3*x5^2 + x2*x4^3*x5*x6*x7*x8*x9 + -x2*x4^3*x5*x6*x7*x8 + -x2*x4^3*x5*x6*x7*x9 + x2*x4^3*x5*x6*x7 + -x2*x4^3*x5*x6*x8*x9 + x2*x4^3*x5*x6*x8 + x2*x4^3*x5*x6*x9 + -x2*x4^3*x5*x6 + -x2*x4^3*x5*x7*x8*x9 + x2*x4^3*x5*x7*x8 + x2*x4^3*x5*x7*x9 + -x2*x4^3*x5*x7 + x2*x4^3*x5*x8*x9 + -x2*x4^3*x5*x8 + -x2*x4^3*x5*x9 + x2*x4^3*x5 + x2*x4^3*x6^2*x7*x8*x9 + -x2*x4^3*x6^2*x7*x8 + -x2*x4^3*x6^2*x7*x9 + x2*x4^3*x6^2*x7 + -x2*x4^3*x6^2*x8*x9 + x2*x4^3*x6^2*x8 + x2*x4^3*x6^2*x9 + -x2*x4^3*x6^2 + -x2*x4^3*x6*x7*x8*x9 + x2*x4^3*x6*x7*x8 + x2*x4^3*x6*x7*x9 + -x2*x4^3*x6*x7 + x2*x4^3*x6*x8*x9 + -x2*x4^3*x6*x8 + -x2*x4^3*x6*x9 + x2*x4^3*x6 + x2*x4^2*x5^2*x6*x7*x8*x9 + -x2*x4^2*x5^2*x6*x7*x8 + -x2*x4^2*x5^2*x6*x7*x9 + x2*x4^2*x5^2*x6*x7 + -x2*x4^2*x5^2*x6*x8*x9 + x2*x4^2*x5^2*x6*x8 + x2*x4^2*x5^2*x6*x9 + -x2*x4^2*x5^2*x6 + -x2*x4^2*x5^2*x7*x8*x9 + x2*x4^2*x5^2*x7*x8 + x2*x4^2*x5^2*x7*x9 + -x2*x4^2*x5^2*x7 + x2*x4^2*x5^2*x8*x9 + -x2*x4^2*x5^2*x8 + -x2*x4^2*x5^2*x9 + x2*x4^2*x5^2 + -x2*x4^2*x5*x6*x7*x8*x9 + x2*x4^2*x5*x6*x7*x8 + x2*x4^2*x5*x6*x7*x9 + -x2*x4^2*x5*x6*x7 + x2*x4^2*x5*x6*x8*x9 + -x2*x4^2*x5*x6*x8 + -x2*x4^2*x5*x6*x9 + x2*x4^2*x5*x6 + x2*x4^2*x5*x7*x8*x9 + -x2*x4^2*x5*x7*x8 + -x2*x4^2*x5*x7*x9 + x2*x4^2*x5*x7 + -x2*x4^2*x5*x8*x9 + x2*x4^2*x5*x8 + x2*x4^2*x5*x9 + -x2*x4^2*x5 + x2*x5^2*x6^2*x7*x8*x9 + -x2*x5^2*x6^2*x7*x8 + -x2*x5^2*x6^2*x7*x9 + x2*x5^2*x6^2*x7 + -x2*x5^2*x6^2*x8*x9 + x2*x5^2*x6^2*x8 + x2*x5^2*x6^2*x9 + -x2*x5^2*x6^2 + -x2*x5^2*x6*x7*x8*x9 + x2*x5^2*x6*x7*x8 + x2*x5^2*x6*x7*x9 + -x2*x5^2*x6*x7 + x2*x5^2*x6*x8*x9 + -x2*x5^2*x6*x8 + -x2*x5^2*x6*x9 + x2*x5^2*x6 + -x2*x6^2*x7*x8*x9 + x2*x6^2*x7*x8 + x2*x6^2*x7*x9 + -x2*x6^2*x7 + x2*x6^2*x8*x9 + -x2*x6^2*x8 + -x2*x6^2*x9 + x2*x6^2 + x2*x6*x7*x8*x9 + -x2*x6*x7*x8 + -x2*x6*x7*x9 + x2*x6*x7 + -x2*x6*x8*x9 + x2*x6*x8 + x2*x6*x9 + -x2*x6 + -x3^4*x4^3*x5^2*x6*x7*x8*x9 + x3^4*x4^3*x5^2*x6*x7*x8 + x3^4*x4^3*x5^2*x6*x7*x9 + -x3^4*x4^3*x5^2*x6*x7 + x3^4*x4^3*x5^2*x6*x8*x9 + -x3^4*x4^3*x5^2*x6*x8 + -x3^4*x4^3*x5^2*x6*x9 + x3^4*x4^3*x5^2*x6 + x3^4*x4^3*x5^2*x7*x8*x9 + -x3^4*x4^3*x5^2*x7*x8 + -x3^4*x4^3*x5^2*x7*x9 + x3^4*x4^3*x5^2*x7 + -x3^4*x4^3*x5^2*x8*x9 + x3^4*x4^3*x5^2*x8 + x3^4*x4^3*x5^2*x9 + -x3^4*x4^3*x5^2 + x3^4*x4^3*x6*x7*x8*x9 + -x3^4*x4^3*x6*x7*x8 + -x3^4*x4^3*x6*x7*x9 + x3^4*x4^3*x6*x7 + -x3^4*x4^3*x6*x8*x9 + x3^4*x4^3*x6*x8 + x3^4*x4^3*x6*x9 + -x3^4*x4^3*x6 + -x3^4*x4^3*x7*x8*x9 + x3^4*x4^3*x7*x8 + x3^4*x4^3*x7*x9 + -x3^4*x4^3*x7 + x3^4*x4^3*x8*x9 + -x3^4*x4^3*x8 + -x3^4*x4^3*x9 + x3^4*x4^3 + -x3^4*x4*x5^2*x6^2*x7*x8*x9 + x3^4*x4*x5^2*x6^2*x7*x8 + x3^4*x4*x5^2*x6^2*x7*x9 + -x3^4*x4*x5^2*x6^2*x7 + x3^4*x4*x5^2*x6^2*x8*x9 + -x3^4*x4*x5^2*x6^2*x8 + -x3^4*x4*x5^2*x6^2*x9 + x3^4*x4*x5^2*x6^2 + x3^4*x4*x5^2*x6*x7*x8*x9 + -x3^4*x4*x5^2*x6*x7*x8 + -x3^4*x4*x5^2*x6*x7*x9 + x3^4*x4*x5^2*x6*x7 + -x3^4*x4*x5^2*x6*x8*x9 + x3^4*x4*x5^2*x6*x8 + x3^4*x4*x5^2*x6*x9 + -x3^4*x4*x5^2*x6 + x3^4*x4*x6^2*x7*x8*x9 + -x3^4*x4*x6^2*x7*x8 + -x3^4*x4*x6^2*x7*x9 + x3^4*x4*x6^2*x7 + -x3^4*x4*x6^2*x8*x9 + x3^4*x4*x6^2*x8 + x3^4*x4*x6^2*x9 + -x3^4*x4*x6^2 + -x3^4*x4*x6*x7*x8*x9 + x3^4*x4*x6*x7*x8 + x3^4*x4*x6*x7*x9 + -x3^4*x4*x6*x7 + x3^4*x4*x6*x8*x9 + -x3^4*x4*x6*x8 + -x3^4*x4*x6*x9 + x3^4*x4*x6 + x3^4*x5^2*x6^2*x7*x8*x9 + -x3^4*x5^2*x6^2*x7*x8 + -x3^4*x5^2*x6^2*x7*x9 + x3^4*x5^2*x6^2*x7 + -x3^4*x5^2*x6^2*x8*x9 + x3^4*x5^2*x6^2*x8 + x3^4*x5^2*x6^2*x9 + -x3^4*x5^2*x6^2 + -x3^4*x5^2*x7*x8*x9 + x3^4*x5^2*x7*x8 + x3^4*x5^2*x7*x9 + -x3^4*x5^2*x7 + x3^4*x5^2*x8*x9 + -x3^4*x5^2*x8 + -x3^4*x5^2*x9 + x3^4*x5^2 + -x3^4*x6^2*x7*x8*x9 + x3^4*x6^2*x7*x8 + x3^4*x6^2*x7*x9 + -x3^4*x6^2*x7 + x3^4*x6^2*x8*x9 + -x3^4*x6^2*x8 + -x3^4*x6^2*x9 + x3^4*x6^2 + x3^4*x7*x8*x9 + -x3^4*x7*x8 + -x3^4*x7*x9 + x3^4*x7 + -x3^4*x8*x9 + x3^4*x8 + x3^4*x9 + -x3^4 + -x3^3*x4^3*x5*x6^2*x7*x8*x9 + x3^3*x4^3*x5*x6^2*x7*x8 + x3^3*x4^3*x5*x6^2*x7*x9 + -x3^3*x4^3*x5*x6^2*x7 + x3^3*x4^3*x5*x6^2*x8*x9 + -x3^3*x4^3*x5*x6^2*x8 + -x3^3*x4^3*x5*x6^2*x9 + x3^3*x4^3*x5*x6^2 + x3^3*x4^3*x5*x6*x7*x8*x9 + -x3^3*x4^3*x5*x6*x7*x8 + -x3^3*x4^3*x5*x6*x7*x9 + x3^3*x4^3*x5*x6*x7 + -x3^3*x4^3*x5*x6*x8*x9 + x3^3*x4^3*x5*x6*x8 + x3^3*x4^3*x5*x6*x9 + -x3^3*x4^3*x5*x6 + x3^3*x4^3*x6^2*x7*x8*x9 + -x3^3*x4^3*x6^2*x7*x8 + -x3^3*x4^3*x6^2*x7*x9 + x3^3*x4^3*x6^2*x7 + -x3^3*x4^3*x6^2*x8*x9 + x3^3*x4^3*x6^2*x8 + x3^3*x4^3*x6^2*x9 + -x3^3*x4^3*x6^2 + -x3^3*x4^3*x6*x7*x8*x9 + x3^3*x4^3*x6*x7*x8 + x3^3*x4^3*x6*x7*x9 + -x3^3*x4^3*x6*x7 + x3^3*x4^3*x6*x8*x9 + -x3^3*x4^3*x6*x8 + -x3^3*x4^3*x6*x9 + x3^3*x4^3*x6 + -x3^3*x4*x5^3*x6*x7*x8*x9 + x3^3*x4*x5^3*x6*x7*x8 + x3^3*x4*x5^3*x6*x7*x9 + -x3^3*x4*x5^3*x6*x7 + x3^3*x4*x5^3*x6*x8*x9 + -x3^3*x4*x5^3*x6*x8 + -x3^3*x4*x5^3*x6*x9 + x3^3*x4*x5^3*x6 + x3^3*x4*x5^3*x7*x8*x9 + -x3^3*x4*x5^3*x7*x8 + -x3^3*x4*x5^3*x7*x9 + x3^3*x4*x5^3*x7 + -x3^3*x4*x5^3*x8*x9 + x3^3*x4*x5^3*x8 + x3^3*x4*x5^3*x9 + -x3^3*x4*x5^3 + x3^3*x4*x5^2*x6*x7*x8*x9 + -x3^3*x4*x5^2*x6*x7*x8 + -x3^3*x4*x5^2*x6*x7*x9 + x3^3*x4*x5^2*x6*x7 + -x3^3*x4*x5^2*x6*x8*x9 + x3^3*x4*x5^2*x6*x8 + x3^3*x4*x5^2*x6*x9 + -x3^3*x4*x5^2*x6 + -x3^3*x4*x5^2*x7*x8*x9 + x3^3*x4*x5^2*x7*x8 + x3^3*x4*x5^2*x7*x9 + -x3^3*x4*x5^2*x7 + x3^3*x4*x5^2*x8*x9 + -x3^3*x4*x5^2*x8 + -x3^3*x4*x5^2*x9 + x3^3*x4*x5^2 + x3^3*x4*x5*x6^2*x7*x8*x9 + -x3^3*x4*x5*x6^2*x7*x8 + -x3^3*x4*x5*x6^2*x7*x9 + x3^3*x4*x5*x6^2*x7 + -x3^3*x4*x5*x6^2*x8*x9 + x3^3*x4*x5*x6^2*x8 + x3^3*x4*x5*x6^2*x9 + -x3^3*x4*x5*x6^2 + -x3^3*x4*x5*x6*x7*x8*x9 + x3^3*x4*x5*x6*x7*x8 + x3^3*x4*x5*x6*x7*x9 + -x3^3*x4*x5*x6*x7 + x3^3*x4*x5*x6*x8*x9 + -x3^3*x4*x5*x6*x8 + -x3^3*x4*x5*x6*x9 + x3^3*x4*x5*x6 + -x3^3*x4*x6^2*x7*x8*x9 + x3^3*x4*x6^2*x7*x8 + x3^3*x4*x6^2*x7*x9 + -x3^3*x4*x6^2*x7 + x3^3*x4*x6^2*x8*x9 + -x3^3*x4*x6^2*x8 + -x3^3*x4*x6^2*x9 + x3^3*x4*x6^2 + x3^3*x4*x6*x7*x8*x9 + -x3^3*x4*x6*x7*x8 + -x3^3*x4*x6*x7*x9 + x3^3*x4*x6*x7 + -x3^3*x4*x6*x8*x9 + x3^3*x4*x6*x8 + x3^3*x4*x6*x9 + -x3^3*x4*x6 + x3^3*x5^3*x6*x7*x8*x9 + -x3^3*x5^3*x6*x7*x8 + -x3^3*x5^3*x6*x7*x9 + x3^3*x5^3*x6*x7 + -x3^3*x5^3*x6*x8*x9 + x3^3*x5^3*x6*x8 + x3^3*x5^3*x6*x9 + -x3^3*x5^3*x6 + -x3^3*x5^3*x7*x8*x9 + x3^3*x5^3*x7*x8 + x3^3*x5^3*x7*x9 + -x3^3*x5^3*x7 + x3^3*x5^3*x8*x9 + -x3^3*x5^3*x8 + -x3^3*x5^3*x9 + x3^3*x5^3 + -x3^3*x5^2*x6*x7*x8*x9 + x3^3*x5^2*x6*x7*x8 + x3^3*x5^2*x6*x7*x9 + -x3^3*x5^2*x6*x7 + x3^3*x5^2*x6*x8*x9 + -x3^3*x5^2*x6*x8 + -x3^3*x5^2*x6*x9 + x3^3*x5^2*x6 + x3^3*x5^2*x7*x8*x9 + -x3^3*x5^2*x7*x8 + -x3^3*x5^2*x7*x9 + x3^3*x5^2*x7 + -x3^3*x5^2*x8*x9 + x3^3*x5^2*x8 + x3^3*x5^2*x9 + -x3^3*x5^2 + -x3^2*x4^5*x5*x6*x7*x8*x9 + x3^2*x4^5*x5*x6*x7*x8 + x3^2*x4^5*x5*x6*x7*x9 + -x3^2*x4^5*x5*x6*x7 + x3^2*x4^5*x5*x6*x8*x9 + -x3^2*x4^5*x5*x6*x8 + -x3^2*x4^5*x5*x6*x9 + x3^2*x4^5*x5*x6 + x3^2*x4^5*x5*x7*x8*x9 + -x3^2*x4^5*x5*x7*x8 + -x3^2*x4^5*x5*x7*x9 + x3^2*x4^5*x5*x7 + -x3^2*x4^5*x5*x8*x9 + x3^2*x4^5*x5*x8 + x3^2*x4^5*x5*x9 + -x3^2*x4^5*x5 + x3^2*x4^5*x6*x7*x8*x9 + -x3^2*x4^5*x6*x7*x8 + -x3^2*x4^5*x6*x7*x9 + x3^2*x4^5*x6*x7 + -x3^2*x4^5*x6*x8*x9 + x3^2*x4^5*x6*x8 + x3^2*x4^5*x6*x9 + -x3^2*x4^5*x6 + -x3^2*x4^5*x7*x8*x9 + x3^2*x4^5*x7*x8 + x3^2*x4^5*x7*x9 + -x3^2*x4^5*x7 + x3^2*x4^5*x8*x9 + -x3^2*x4^5*x8 + -x3^2*x4^5*x9 + x3^2*x4^5 + x3^2*x4^3*x5*x6*x7*x8*x9 + -x3^2*x4^3*x5*x6*x7*x8 + -x3^2*x4^3*x5*x6*x7*x9 + x3^2*x4^3*x5*x6*x7 + -x3^2*x4^3*x5*x6*x8*x9 + x3^2*x4^3*x5*x6*x8 + x3^2*x4^3*x5*x6*x9 + -x3^2*x4^3*x5*x6 + -x3^2*x4^3*x5*x7*x8*x9 + x3^2*x4^3*x5*x7*x8 + x3^2*x4^3*x5*x7*x9 + -x3^2*x4^3*x5*x7 + x3^2*x4^3*x5*x8*x9 + -x3^2*x4^3*x5*x8 + -x3^2*x4^3*x5*x9 + x3^2*x4^3*x5 + -x3^2*x4^3*x6*x7*x8*x9 + x3^2*x4^3*x6*x7*x8 + x3^2*x4^3*x6*x7*x9 + -x3^2*x4^3*x6*x7 + x3^2*x4^3*x6*x8*x9 + -x3^2*x4^3*x6*x8 + -x3^2*x4^3*x6*x9 + x3^2*x4^3*x6 + x3^2*x4^3*x7*x8*x9 + -x3^2*x4^3*x7*x8 + -x3^2*x4^3*x7*x9 + x3^2*x4^3*x7 + -x3^2*x4^3*x8*x9 + x3^2*x4^3*x8 + x3^2*x4^3*x9 + -x3^2*x4^3 + -x3^2*x4^2*x5^3*x6*x7*x8*x9 + x3^2*x4^2*x5^3*x6*x7*x8 + x3^2*x4^2*x5^3*x6*x7*x9 + -x3^2*x4^2*x5^3*x6*x7 + x3^2*x4^2*x5^3*x6*x8*x9 + -x3^2*x4^2*x5^3*x6*x8 + -x3^2*x4^2*x5^3*x6*x9 + x3^2*x4^2*x5^3*x6 + x3^2*x4^2*x5^3*x7*x8*x9 + -x3^2*x4^2*x5^3*x7*x8 + -x3^2*x4^2*x5^3*x7*x9 + x3^2*x4^2*x5^3*x7 + -x3^2*x4^2*x5^3*x8*x9 + x3^2*x4^2*x5^3*x8 + x3^2*x4^2*x5^3*x9 + -x3^2*x4^2*x5^3 + x3^2*x4^2*x5^2*x6*x7*x8*x9 + -x3^2*x4^2*x5^2*x6*x7*x8 + -x3^2*x4^2*x5^2*x6*x7*x9 + x3^2*x4^2*x5^2*x6*x7 + -x3^2*x4^2*x5^2*x6*x8*x9 + x3^2*x4^2*x5^2*x6*x8 + x3^2*x4^2*x5^2*x6*x9 + -x3^2*x4^2*x5^2*x6 + -x3^2*x4^2*x5^2*x7*x8*x9 + x3^2*x4^2*x5^2*x7*x8 + x3^2*x4^2*x5^2*x7*x9 + -x3^2*x4^2*x5^2*x7 + x3^2*x4^2*x5^2*x8*x9 + -x3^2*x4^2*x5^2*x8 + -x3^2*x4^2*x5^2*x9 + x3^2*x4^2*x5^2 + x3^2*x4*x5^3*x6*x7*x8*x9 + -x3^2*x4*x5^3*x6*x7*x8 + -x3^2*x4*x5^3*x6*x7*x9 + x3^2*x4*x5^3*x6*x7 + -x3^2*x4*x5^3*x6*x8*x9 + x3^2*x4*x5^3*x6*x8 + x3^2*x4*x5^3*x6*x9 + -x3^2*x4*x5^3*x6 + -x3^2*x4*x5^3*x7*x8*x9 + x3^2*x4*x5^3*x7*x8 + x3^2*x4*x5^3*x7*x9 + -x3^2*x4*x5^3*x7 + x3^2*x4*x5^3*x8*x9 + -x3^2*x4*x5^3*x8 + -x3^2*x4*x5^3*x9 + x3^2*x4*x5^3 + -x3^2*x4*x5^2*x6*x7*x8*x9 + x3^2*x4*x5^2*x6*x7*x8 + x3^2*x4*x5^2*x6*x7*x9 + -x3^2*x4*x5^2*x6*x7 + x3^2*x4*x5^2*x6*x8*x9 + -x3^2*x4*x5^2*x6*x8 + -x3^2*x4*x5^2*x6*x9 + x3^2*x4*x5^2*x6 + x3^2*x4*x5^2*x7*x8*x9 + -x3^2*x4*x5^2*x7*x8 + -x3^2*x4*x5^2*x7*x9 + x3^2*x4*x5^2*x7 + -x3^2*x4*x5^2*x8*x9 + x3^2*x4*x5^2*x8 + x3^2*x4*x5^2*x9 + -x3^2*x4*x5^2 + -x3*x4^3*x5^2*x6^2*x7*x8*x9 + x3*x4^3*x5^2*x6^2*x7*x8 + x3*x4^3*x5^2*x6^2*x7*x9 + -x3*x4^3*x5^2*x6^2*x7 + x3*x4^3*x5^2*x6^2*x8*x9 + -x3*x4^3*x5^2*x6^2*x8 + -x3*x4^3*x5^2*x6^2*x9 + x3*x4^3*x5^2*x6^2 + x3*x4^3*x5^2*x6*x7*x8*x9 + -x3*x4^3*x5^2*x6*x7*x8 + -x3*x4^3*x5^2*x6*x7*x9 + x3*x4^3*x5^2*x6*x7 + -x3*x4^3*x5^2*x6*x8*x9 + x3*x4^3*x5^2*x6*x8 + x3*x4^3*x5^2*x6*x9 + -x3*x4^3*x5^2*x6 + x3*x4^3*x5*x6^2*x7*x8*x9 + -x3*x4^3*x5*x6^2*x7*x8 + -x3*x4^3*x5*x6^2*x7*x9 + x3*x4^3*x5*x6^2*x7 + -x3*x4^3*x5*x6^2*x8*x9 + x3*x4^3*x5*x6^2*x8 + x3*x4^3*x5*x6^2*x9 + -x3*x4^3*x5*x6^2 + -x3*x4^3*x5*x6*x7*x8*x9 + x3*x4^3*x5*x6*x7*x8 + x3*x4^3*x5*x6*x7*x9 + -x3*x4^3*x5*x6*x7 + x3*x4^3*x5*x6*x8*x9 + -x3*x4^3*x5*x6*x8 + -x3*x4^3*x5*x6*x9 + x3*x4^3*x5*x6 + x3*x4*x5^2*x6^2*x7*x8*x9 + -x3*x4*x5^2*x6^2*x7*x8 + -x3*x4*x5^2*x6^2*x7*x9 + x3*x4*x5^2*x6^2*x7 + -x3*x4*x5^2*x6^2*x8*x9 + x3*x4*x5^2*x6^2*x8 + x3*x4*x5^2*x6^2*x9 + -x3*x4*x5^2*x6^2 + -x3*x4*x5^2*x6*x7*x8*x9 + x3*x4*x5^2*x6*x7*x8 + x3*x4*x5^2*x6*x7*x9 + -x3*x4*x5^2*x6*x7 + x3*x4*x5^2*x6*x8*x9 + -x3*x4*x5^2*x6*x8 + -x3*x4*x5^2*x6*x9 + x3*x4*x5^2*x6 + -x3*x4*x5*x6^2*x7*x8*x9 + x3*x4*x5*x6^2*x7*x8 + x3*x4*x5*x6^2*x7*x9 + -x3*x4*x5*x6^2*x7 + x3*x4*x5*x6^2*x8*x9 + -x3*x4*x5*x6^2*x8 + -x3*x4*x5*x6^2*x9 + x3*x4*x5*x6^2 + x3*x4*x5*x6*x7*x8*x9 + -x3*x4*x5*x6*x7*x8 + -x3*x4*x5*x6*x7*x9 + x3*x4*x5*x6*x7 + -x3*x4*x5*x6*x8*x9 + x3*x4*x5*x6*x8 + x3*x4*x5*x6*x9 + -x3*x4*x5*x6 + x4^5*x5*x6*x7*x8*x9 + -x4^5*x5*x6*x7*x8 + -x4^5*x5*x6*x7*x9 + x4^5*x5*x6*x7 + -x4^5*x5*x6*x8*x9 + x4^5*x5*x6*x8 + x4^5*x5*x6*x9 + -x4^5*x5*x6 + -x4^5*x5*x7*x8*x9 + x4^5*x5*x7*x8 + x4^5*x5*x7*x9 + -x4^5*x5*x7 + x4^5*x5*x8*x9 + -x4^5*x5*x8 + -x4^5*x5*x9 + x4^5*x5 + -x4^5*x6*x7*x8*x9 + x4^5*x6*x7*x8 + x4^5*x6*x7*x9 + -x4^5*x6*x7 + x4^5*x6*x8*x9 + -x4^5*x6*x8 + -x4^5*x6*x9 + x4^5*x6 + x4^5*x7*x8*x9 + -x4^5*x7*x8 + -x4^5*x7*x9 + x4^5*x7 + -x4^5*x8*x9 + x4^5*x8 + x4^5*x9 + -x4^5 + x4^3*x5^2*x6^2*x7*x8*x9 + -x4^3*x5^2*x6^2*x7*x8 + -x4^3*x5^2*x6^2*x7*x9 + x4^3*x5^2*x6^2*x7 + -x4^3*x5^2*x6^2*x8*x9 + x4^3*x5^2*x6^2*x8 + x4^3*x5^2*x6^2*x9 + -x4^3*x5^2*x6^2 + -x4^3*x5^2*x7*x8*x9 + x4^3*x5^2*x7*x8 + x4^3*x5^2*x7*x9 + -x4^3*x5^2*x7 + x4^3*x5^2*x8*x9 + -x4^3*x5^2*x8 + -x4^3*x5^2*x9 + x4^3*x5^2 + -x4^3*x5*x6*x7*x8*x9 + x4^3*x5*x6*x7*x8 + x4^3*x5*x6*x7*x9 + -x4^3*x5*x6*x7 + x4^3*x5*x6*x8*x9 + -x4^3*x5*x6*x8 + -x4^3*x5*x6*x9 + x4^3*x5*x6 + x4^3*x5*x7*x8*x9 + -x4^3*x5*x7*x8 + -x4^3*x5*x7*x9 + x4^3*x5*x7 + -x4^3*x5*x8*x9 + x4^3*x5*x8 + x4^3*x5*x9 + -x4^3*x5 + -x4^3*x6^2*x7*x8*x9 + x4^3*x6^2*x7*x8 + x4^3*x6^2*x7*x9 + -x4^3*x6^2*x7 + x4^3*x6^2*x8*x9 + -x4^3*x6^2*x8 + -x4^3*x6^2*x9 + x4^3*x6^2 + x4^3*x6*x7*x8*x9 + -x4^3*x6*x7*x8 + -x4^3*x6*x7*x9 + x4^3*x6*x7 + -x4^3*x6*x8*x9 + x4^3*x6*x8 + x4^3*x6*x9 + -x4^3*x6 + x4^2*x5^3*x6*x7*x8*x9 + -x4^2*x5^3*x6*x7*x8 + -x4^2*x5^3*x6*x7*x9 + x4^2*x5^3*x6*x7 + -x4^2*x5^3*x6*x8*x9 + x4^2*x5^3*x6*x8 + x4^2*x5^3*x6*x9 + -x4^2*x5^3*x6 + -x4^2*x5^3*x7*x8*x9 + x4^2*x5^3*x7*x8 + x4^2*x5^3*x7*x9 + -x4^2*x5^3*x7 + x4^2*x5^3*x8*x9 + -x4^2*x5^3*x8 + -x4^2*x5^3*x9 + x4^2*x5^3 + -x4^2*x5^2*x6*x7*x8*x9 + x4^2*x5^2*x6*x7*x8 + x4^2*x5^2*x6*x7*x9 + -x4^2*x5^2*x6*x7 + x4^2*x5^2*x6*x8*x9 + -x4^2*x5^2*x6*x8 + -x4^2*x5^2*x6*x9 + x4^2*x5^2*x6 + x4^2*x5^2*x7*x8*x9 + -x4^2*x5^2*x7*x8 + -x4^2*x5^2*x7*x9 + x4^2*x5^2*x7 + -x4^2*x5^2*x8*x9 + x4^2*x5^2*x8 + x4^2*x5^2*x9 + -x4^2*x5^2 + -x5^3*x6*x7*x8*x9 + x5^3*x6*x7*x8 + x5^3*x6*x7*x9 + -x5^3*x6*x7 + x5^3*x6*x8*x9 + -x5^3*x6*x8 + -x5^3*x6*x9 + x5^3*x6 + x5^3*x7*x8*x9 + -x5^3*x7*x8 + -x5^3*x7*x9 + x5^3*x7 + -x5^3*x8*x9 + x5^3*x8 + x5^3*x9 + -x5^3 + -x5^2*x6^2*x7*x8*x9 + x5^2*x6^2*x7*x8 + x5^2*x6^2*x7*x9 + -x5^2*x6^2*x7 + x5^2*x6^2*x8*x9 + -x5^2*x6^2*x8 + -x5^2*x6^2*x9 + x5^2*x6^2 + x5^2*x6*x7*x8*x9 + -x5^2*x6*x7*x8 + -x5^2*x6*x7*x9 + x5^2*x6*x7 + -x5^2*x6*x8*x9 + x5^2*x6*x8 + x5^2*x6*x9 + -x5^2*x6 + x6^2*x7*x8*x9 + -x6^2*x7*x8 + -x6^2*x7*x9 + x6^2*x7 + -x6^2*x8*x9 + x6^2*x8 + x6^2*x9 + -x6^2 + -x7*x8*x9 + x7*x8 + x7*x9 + -x7 + x8*x9 + -x8 + -x9 + 1; frobby-0.9.5/test/frob/bug21.opt_irr000066400000000000000000000000331401527164200172350ustar00rootroot000000000000001 9 0 10 3 1 1 1 1 1 1 19 frobby-0.9.5/test/frob/bug21.opt_irr_min000066400000000000000000000001231401527164200201000ustar00rootroot000000000000004 9 0 2 1 2 3 1 1 1 1 0 1 3 1 3 1 1 1 1 0 1 2 2 3 1 1 1 1 0 1 1 3 2 2 1 1 1 12 frobby-0.9.5/test/frob/bug21.opt_std000066400000000000000000000000211401527164200172300ustar00rootroot000000000000000 9 no solution. frobby-0.9.5/test/frob/bug21.opt_std_min000066400000000000000000000000211401527164200200730ustar00rootroot000000000000000 9 no solution. frobby-0.9.5/test/frob/bug21.primdecom000066400000000000000000000010071401527164200175400ustar00rootroot0000000000000027 9 0 10 0 0 0 0 0 0 0 0 7 3 0 0 0 0 0 0 0 7 0 1 0 0 0 0 0 0 5 1 1 0 0 0 0 0 0 3 3 1 0 0 0 0 0 0 3 0 3 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 1 1 4 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 2 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 4 0 0 0 0 0 0 0 0 3 1 0 1 0 0 0 0 0 3 0 2 0 0 0 0 0 0 2 3 0 0 0 0 0 0 0 2 1 2 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 3 0 1 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug21.radical000066400000000000000000000002341401527164200171610ustar00rootroot000000000000008 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug21.test000066400000000000000000000014101401527164200165360ustar00rootroot0000000000000027 9 -53 1 1 4 0 0 0 0 0 -42 -2 2 1 2 0 0 0 0 -41 7 3 -1 0 0 0 0 0 -38 7 -1 1 0 0 0 0 0 -37 -3 1 1 1 1 0 0 0 -27 -4 0 3 1 0 0 0 0 -26 5 1 1 -1 0 0 0 0 -25 -5 3 1 0 1 0 0 0 -22 -5 -1 3 0 1 0 0 0 -15 -6 2 3 0 0 0 0 0 -14 3 3 1 -2 0 0 0 0 -12 -6 -2 5 0 0 0 0 0 -12 2 -2 0 1 0 0 0 0 -11 -8 0 0 2 1 0 0 0 -11 3 -1 3 -2 0 0 0 0 -9 0 -1 0 -1 0 0 1 0 -7 1 -3 0 0 1 0 0 0 -5 0 0 -2 -1 2 0 0 0 -5 1 1 0 1 -1 0 0 0 -4 -9 3 0 2 0 0 0 0 -3 0 4 -2 0 0 0 0 0 -2 1 -3 2 1 -1 0 0 0 -1 -9 -1 2 2 0 0 0 0 -1 -1 -1 -3 3 0 0 0 0 -1 10 -2 0 -1 -1 0 0 0 0 -1 -1 -2 0 0 0 0 1 0 -1 -1 -1 0 0 1 0 0 frobby-0.9.5/test/frob/bug21.uni000066400000000000000000000003241401527164200163550ustar00rootroot00000000000000R = QQ[t]; p = t^19 + -6*t^18 + 16*t^17 + -26*t^16 + 32*t^15 + -37*t^14 + 40*t^13 + -31*t^12 + 3*t^11 + 45*t^10 + -87*t^9 + 69*t^8 + -6*t^7 + -19*t^6 + 2*t^5 + 3*t^4 + 2*t^3 + t^2 + -3*t + 1; frobby-0.9.5/test/frob/bug22.alexdual000066400000000000000000000002571401527164200173670ustar00rootroot000000000000009 9 0 3 1 3 3 3 2 1 1 0 3 1 3 3 3 1 2 1 0 3 1 3 2 1 2 2 1 0 3 1 2 3 1 2 2 1 0 3 1 2 1 3 2 2 1 0 3 1 1 3 2 2 2 1 0 2 1 3 3 1 2 2 1 0 2 1 3 2 2 2 2 1 0 1 1 3 3 2 2 2 1 frobby-0.9.5/test/frob/bug22.assoprimes000066400000000000000000000000271401527164200177500ustar00rootroot000000000000001 9 0 1 1 1 1 1 1 1 1 frobby-0.9.5/test/frob/bug22.dim000066400000000000000000000000021401527164200163250ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug22.euler000066400000000000000000000000021401527164200166700ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug22.frobInstance000066400000000000000000000000331401527164200201750ustar00rootroot0000000000000023 25 25 29 31 32 51 53 63 frobby-0.9.5/test/frob/bug22.frobNumber000066400000000000000000000000031401527164200176560ustar00rootroot0000000000000072 frobby-0.9.5/test/frob/bug22.intersection000066400000000000000000000007631401527164200203000ustar00rootroot0000000000000026 9 0 3 0 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 2 0 0 0 2 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 1 0 0 1 2 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug22.irrdecom000066400000000000000000000025741401527164200174000ustar00rootroot000000000000008 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug22.irrdecom_ideal000066400000000000000000000002571401527164200205320ustar00rootroot000000000000009 9 0 3 1 1 1 2 1 1 1 0 2 1 1 2 2 1 1 1 0 2 1 1 1 3 1 1 1 0 1 1 3 1 2 1 1 1 0 1 1 2 3 1 1 1 1 0 1 1 2 1 3 1 1 1 0 1 1 1 2 3 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 frobby-0.9.5/test/frob/bug22.maxstandard000066400000000000000000000000041401527164200200640ustar00rootroot000000000000000 9 frobby-0.9.5/test/frob/bug22.minimize000066400000000000000000000007631401527164200174130ustar00rootroot0000000000000026 9 0 3 0 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 2 0 0 0 2 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 1 0 0 1 2 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug22.multi000066400000000000000000000752511401527164200167300ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8, x9]; p = x2^3*x3*x4*x5*x6^2*x7*x8*x9 + -x2^3*x3*x4*x5*x6^2*x7*x8 + -x2^3*x3*x4*x5*x6^2*x7*x9 + x2^3*x3*x4*x5*x6^2*x7 + -x2^3*x3*x4*x5*x6^2*x8*x9 + x2^3*x3*x4*x5*x6^2*x8 + x2^3*x3*x4*x5*x6^2*x9 + -x2^3*x3*x4*x5*x6^2 + -x2^3*x3*x4*x5*x7*x8*x9 + x2^3*x3*x4*x5*x7*x8 + x2^3*x3*x4*x5*x7*x9 + -x2^3*x3*x4*x5*x7 + x2^3*x3*x4*x5*x8*x9 + -x2^3*x3*x4*x5*x8 + -x2^3*x3*x4*x5*x9 + x2^3*x3*x4*x5 + -x2^3*x3*x4*x6^2*x7*x8*x9 + x2^3*x3*x4*x6^2*x7*x8 + x2^3*x3*x4*x6^2*x7*x9 + -x2^3*x3*x4*x6^2*x7 + x2^3*x3*x4*x6^2*x8*x9 + -x2^3*x3*x4*x6^2*x8 + -x2^3*x3*x4*x6^2*x9 + x2^3*x3*x4*x6^2 + x2^3*x3*x4*x7*x8*x9 + -x2^3*x3*x4*x7*x8 + -x2^3*x3*x4*x7*x9 + x2^3*x3*x4*x7 + -x2^3*x3*x4*x8*x9 + x2^3*x3*x4*x8 + x2^3*x3*x4*x9 + -x2^3*x3*x4 + -x2^3*x3*x5*x6^2*x7*x8*x9 + x2^3*x3*x5*x6^2*x7*x8 + x2^3*x3*x5*x6^2*x7*x9 + -x2^3*x3*x5*x6^2*x7 + x2^3*x3*x5*x6^2*x8*x9 + -x2^3*x3*x5*x6^2*x8 + -x2^3*x3*x5*x6^2*x9 + x2^3*x3*x5*x6^2 + x2^3*x3*x5*x7*x8*x9 + -x2^3*x3*x5*x7*x8 + -x2^3*x3*x5*x7*x9 + x2^3*x3*x5*x7 + -x2^3*x3*x5*x8*x9 + x2^3*x3*x5*x8 + x2^3*x3*x5*x9 + -x2^3*x3*x5 + x2^3*x3*x6^2*x7*x8*x9 + -x2^3*x3*x6^2*x7*x8 + -x2^3*x3*x6^2*x7*x9 + x2^3*x3*x6^2*x7 + -x2^3*x3*x6^2*x8*x9 + x2^3*x3*x6^2*x8 + x2^3*x3*x6^2*x9 + -x2^3*x3*x6^2 + -x2^3*x3*x7*x8*x9 + x2^3*x3*x7*x8 + x2^3*x3*x7*x9 + -x2^3*x3*x7 + x2^3*x3*x8*x9 + -x2^3*x3*x8 + -x2^3*x3*x9 + x2^3*x3 + -x2^3*x4*x5*x6^2*x7*x8*x9 + x2^3*x4*x5*x6^2*x7*x8 + x2^3*x4*x5*x6^2*x7*x9 + -x2^3*x4*x5*x6^2*x7 + x2^3*x4*x5*x6^2*x8*x9 + -x2^3*x4*x5*x6^2*x8 + -x2^3*x4*x5*x6^2*x9 + x2^3*x4*x5*x6^2 + x2^3*x4*x5*x7*x8*x9 + -x2^3*x4*x5*x7*x8 + -x2^3*x4*x5*x7*x9 + x2^3*x4*x5*x7 + -x2^3*x4*x5*x8*x9 + x2^3*x4*x5*x8 + x2^3*x4*x5*x9 + -x2^3*x4*x5 + x2^3*x4*x6^2*x7*x8*x9 + -x2^3*x4*x6^2*x7*x8 + -x2^3*x4*x6^2*x7*x9 + x2^3*x4*x6^2*x7 + -x2^3*x4*x6^2*x8*x9 + x2^3*x4*x6^2*x8 + x2^3*x4*x6^2*x9 + -x2^3*x4*x6^2 + -x2^3*x4*x7*x8*x9 + x2^3*x4*x7*x8 + x2^3*x4*x7*x9 + -x2^3*x4*x7 + x2^3*x4*x8*x9 + -x2^3*x4*x8 + -x2^3*x4*x9 + x2^3*x4 + x2^3*x5*x6^2*x7*x8*x9 + -x2^3*x5*x6^2*x7*x8 + -x2^3*x5*x6^2*x7*x9 + x2^3*x5*x6^2*x7 + -x2^3*x5*x6^2*x8*x9 + x2^3*x5*x6^2*x8 + x2^3*x5*x6^2*x9 + -x2^3*x5*x6^2 + -x2^3*x5*x7*x8*x9 + x2^3*x5*x7*x8 + x2^3*x5*x7*x9 + -x2^3*x5*x7 + x2^3*x5*x8*x9 + -x2^3*x5*x8 + -x2^3*x5*x9 + x2^3*x5 + -x2^3*x6^2*x7*x8*x9 + x2^3*x6^2*x7*x8 + x2^3*x6^2*x7*x9 + -x2^3*x6^2*x7 + x2^3*x6^2*x8*x9 + -x2^3*x6^2*x8 + -x2^3*x6^2*x9 + x2^3*x6^2 + x2^3*x7*x8*x9 + -x2^3*x7*x8 + -x2^3*x7*x9 + x2^3*x7 + -x2^3*x8*x9 + x2^3*x8 + x2^3*x9 + -x2^3 + x2^2*x3*x4*x5^2*x6^2*x7*x8*x9 + -x2^2*x3*x4*x5^2*x6^2*x7*x8 + -x2^2*x3*x4*x5^2*x6^2*x7*x9 + x2^2*x3*x4*x5^2*x6^2*x7 + -x2^2*x3*x4*x5^2*x6^2*x8*x9 + x2^2*x3*x4*x5^2*x6^2*x8 + x2^2*x3*x4*x5^2*x6^2*x9 + -x2^2*x3*x4*x5^2*x6^2 + -x2^2*x3*x4*x5^2*x7*x8*x9 + x2^2*x3*x4*x5^2*x7*x8 + x2^2*x3*x4*x5^2*x7*x9 + -x2^2*x3*x4*x5^2*x7 + x2^2*x3*x4*x5^2*x8*x9 + -x2^2*x3*x4*x5^2*x8 + -x2^2*x3*x4*x5^2*x9 + x2^2*x3*x4*x5^2 + x2^2*x3*x4*x5*x6^3*x7*x8*x9 + -x2^2*x3*x4*x5*x6^3*x7*x8 + -x2^2*x3*x4*x5*x6^3*x7*x9 + x2^2*x3*x4*x5*x6^3*x7 + -x2^2*x3*x4*x5*x6^3*x8*x9 + x2^2*x3*x4*x5*x6^3*x8 + x2^2*x3*x4*x5*x6^3*x9 + -x2^2*x3*x4*x5*x6^3 + -2*x2^2*x3*x4*x5*x6^2*x7*x8*x9 + 2*x2^2*x3*x4*x5*x6^2*x7*x8 + 2*x2^2*x3*x4*x5*x6^2*x7*x9 + -2*x2^2*x3*x4*x5*x6^2*x7 + 2*x2^2*x3*x4*x5*x6^2*x8*x9 + -2*x2^2*x3*x4*x5*x6^2*x8 + -2*x2^2*x3*x4*x5*x6^2*x9 + 2*x2^2*x3*x4*x5*x6^2 + x2^2*x3*x4*x5*x7*x8*x9 + -x2^2*x3*x4*x5*x7*x8 + -x2^2*x3*x4*x5*x7*x9 + x2^2*x3*x4*x5*x7 + -x2^2*x3*x4*x5*x8*x9 + x2^2*x3*x4*x5*x8 + x2^2*x3*x4*x5*x9 + -x2^2*x3*x4*x5 + -x2^2*x3*x4*x6^3*x7*x8*x9 + x2^2*x3*x4*x6^3*x7*x8 + x2^2*x3*x4*x6^3*x7*x9 + -x2^2*x3*x4*x6^3*x7 + x2^2*x3*x4*x6^3*x8*x9 + -x2^2*x3*x4*x6^3*x8 + -x2^2*x3*x4*x6^3*x9 + x2^2*x3*x4*x6^3 + x2^2*x3*x4*x6^2*x7*x8*x9 + -x2^2*x3*x4*x6^2*x7*x8 + -x2^2*x3*x4*x6^2*x7*x9 + x2^2*x3*x4*x6^2*x7 + -x2^2*x3*x4*x6^2*x8*x9 + x2^2*x3*x4*x6^2*x8 + x2^2*x3*x4*x6^2*x9 + -x2^2*x3*x4*x6^2 + -x2^2*x3*x5^2*x6^2*x7*x8*x9 + x2^2*x3*x5^2*x6^2*x7*x8 + x2^2*x3*x5^2*x6^2*x7*x9 + -x2^2*x3*x5^2*x6^2*x7 + x2^2*x3*x5^2*x6^2*x8*x9 + -x2^2*x3*x5^2*x6^2*x8 + -x2^2*x3*x5^2*x6^2*x9 + x2^2*x3*x5^2*x6^2 + x2^2*x3*x5^2*x7*x8*x9 + -x2^2*x3*x5^2*x7*x8 + -x2^2*x3*x5^2*x7*x9 + x2^2*x3*x5^2*x7 + -x2^2*x3*x5^2*x8*x9 + x2^2*x3*x5^2*x8 + x2^2*x3*x5^2*x9 + -x2^2*x3*x5^2 + -x2^2*x3*x5*x6^3*x7*x8*x9 + x2^2*x3*x5*x6^3*x7*x8 + x2^2*x3*x5*x6^3*x7*x9 + -x2^2*x3*x5*x6^3*x7 + x2^2*x3*x5*x6^3*x8*x9 + -x2^2*x3*x5*x6^3*x8 + -x2^2*x3*x5*x6^3*x9 + x2^2*x3*x5*x6^3 + 2*x2^2*x3*x5*x6^2*x7*x8*x9 + -2*x2^2*x3*x5*x6^2*x7*x8 + -2*x2^2*x3*x5*x6^2*x7*x9 + 2*x2^2*x3*x5*x6^2*x7 + -2*x2^2*x3*x5*x6^2*x8*x9 + 2*x2^2*x3*x5*x6^2*x8 + 2*x2^2*x3*x5*x6^2*x9 + -2*x2^2*x3*x5*x6^2 + -x2^2*x3*x5*x7*x8*x9 + x2^2*x3*x5*x7*x8 + x2^2*x3*x5*x7*x9 + -x2^2*x3*x5*x7 + x2^2*x3*x5*x8*x9 + -x2^2*x3*x5*x8 + -x2^2*x3*x5*x9 + x2^2*x3*x5 + x2^2*x3*x6^3*x7*x8*x9 + -x2^2*x3*x6^3*x7*x8 + -x2^2*x3*x6^3*x7*x9 + x2^2*x3*x6^3*x7 + -x2^2*x3*x6^3*x8*x9 + x2^2*x3*x6^3*x8 + x2^2*x3*x6^3*x9 + -x2^2*x3*x6^3 + -x2^2*x3*x6^2*x7*x8*x9 + x2^2*x3*x6^2*x7*x8 + x2^2*x3*x6^2*x7*x9 + -x2^2*x3*x6^2*x7 + x2^2*x3*x6^2*x8*x9 + -x2^2*x3*x6^2*x8 + -x2^2*x3*x6^2*x9 + x2^2*x3*x6^2 + -x2^2*x4*x5^2*x6^2*x7*x8*x9 + x2^2*x4*x5^2*x6^2*x7*x8 + x2^2*x4*x5^2*x6^2*x7*x9 + -x2^2*x4*x5^2*x6^2*x7 + x2^2*x4*x5^2*x6^2*x8*x9 + -x2^2*x4*x5^2*x6^2*x8 + -x2^2*x4*x5^2*x6^2*x9 + x2^2*x4*x5^2*x6^2 + x2^2*x4*x5^2*x7*x8*x9 + -x2^2*x4*x5^2*x7*x8 + -x2^2*x4*x5^2*x7*x9 + x2^2*x4*x5^2*x7 + -x2^2*x4*x5^2*x8*x9 + x2^2*x4*x5^2*x8 + x2^2*x4*x5^2*x9 + -x2^2*x4*x5^2 + -x2^2*x4*x5*x6^3*x7*x8*x9 + x2^2*x4*x5*x6^3*x7*x8 + x2^2*x4*x5*x6^3*x7*x9 + -x2^2*x4*x5*x6^3*x7 + x2^2*x4*x5*x6^3*x8*x9 + -x2^2*x4*x5*x6^3*x8 + -x2^2*x4*x5*x6^3*x9 + x2^2*x4*x5*x6^3 + 2*x2^2*x4*x5*x6^2*x7*x8*x9 + -2*x2^2*x4*x5*x6^2*x7*x8 + -2*x2^2*x4*x5*x6^2*x7*x9 + 2*x2^2*x4*x5*x6^2*x7 + -2*x2^2*x4*x5*x6^2*x8*x9 + 2*x2^2*x4*x5*x6^2*x8 + 2*x2^2*x4*x5*x6^2*x9 + -2*x2^2*x4*x5*x6^2 + -x2^2*x4*x5*x7*x8*x9 + x2^2*x4*x5*x7*x8 + x2^2*x4*x5*x7*x9 + -x2^2*x4*x5*x7 + x2^2*x4*x5*x8*x9 + -x2^2*x4*x5*x8 + -x2^2*x4*x5*x9 + x2^2*x4*x5 + x2^2*x4*x6^3*x7*x8*x9 + -x2^2*x4*x6^3*x7*x8 + -x2^2*x4*x6^3*x7*x9 + x2^2*x4*x6^3*x7 + -x2^2*x4*x6^3*x8*x9 + x2^2*x4*x6^3*x8 + x2^2*x4*x6^3*x9 + -x2^2*x4*x6^3 + -x2^2*x4*x6^2*x7*x8*x9 + x2^2*x4*x6^2*x7*x8 + x2^2*x4*x6^2*x7*x9 + -x2^2*x4*x6^2*x7 + x2^2*x4*x6^2*x8*x9 + -x2^2*x4*x6^2*x8 + -x2^2*x4*x6^2*x9 + x2^2*x4*x6^2 + x2^2*x5^2*x6^2*x7*x8*x9 + -x2^2*x5^2*x6^2*x7*x8 + -x2^2*x5^2*x6^2*x7*x9 + x2^2*x5^2*x6^2*x7 + -x2^2*x5^2*x6^2*x8*x9 + x2^2*x5^2*x6^2*x8 + x2^2*x5^2*x6^2*x9 + -x2^2*x5^2*x6^2 + -x2^2*x5^2*x7*x8*x9 + x2^2*x5^2*x7*x8 + x2^2*x5^2*x7*x9 + -x2^2*x5^2*x7 + x2^2*x5^2*x8*x9 + -x2^2*x5^2*x8 + -x2^2*x5^2*x9 + x2^2*x5^2 + x2^2*x5*x6^3*x7*x8*x9 + -x2^2*x5*x6^3*x7*x8 + -x2^2*x5*x6^3*x7*x9 + x2^2*x5*x6^3*x7 + -x2^2*x5*x6^3*x8*x9 + x2^2*x5*x6^3*x8 + x2^2*x5*x6^3*x9 + -x2^2*x5*x6^3 + -2*x2^2*x5*x6^2*x7*x8*x9 + 2*x2^2*x5*x6^2*x7*x8 + 2*x2^2*x5*x6^2*x7*x9 + -2*x2^2*x5*x6^2*x7 + 2*x2^2*x5*x6^2*x8*x9 + -2*x2^2*x5*x6^2*x8 + -2*x2^2*x5*x6^2*x9 + 2*x2^2*x5*x6^2 + x2^2*x5*x7*x8*x9 + -x2^2*x5*x7*x8 + -x2^2*x5*x7*x9 + x2^2*x5*x7 + -x2^2*x5*x8*x9 + x2^2*x5*x8 + x2^2*x5*x9 + -x2^2*x5 + -x2^2*x6^3*x7*x8*x9 + x2^2*x6^3*x7*x8 + x2^2*x6^3*x7*x9 + -x2^2*x6^3*x7 + x2^2*x6^3*x8*x9 + -x2^2*x6^3*x8 + -x2^2*x6^3*x9 + x2^2*x6^3 + x2^2*x6^2*x7*x8*x9 + -x2^2*x6^2*x7*x8 + -x2^2*x6^2*x7*x9 + x2^2*x6^2*x7 + -x2^2*x6^2*x8*x9 + x2^2*x6^2*x8 + x2^2*x6^2*x9 + -x2^2*x6^2 + x2*x3*x4^3*x5*x6^2*x7*x8*x9 + -x2*x3*x4^3*x5*x6^2*x7*x8 + -x2*x3*x4^3*x5*x6^2*x7*x9 + x2*x3*x4^3*x5*x6^2*x7 + -x2*x3*x4^3*x5*x6^2*x8*x9 + x2*x3*x4^3*x5*x6^2*x8 + x2*x3*x4^3*x5*x6^2*x9 + -x2*x3*x4^3*x5*x6^2 + -x2*x3*x4^3*x5*x7*x8*x9 + x2*x3*x4^3*x5*x7*x8 + x2*x3*x4^3*x5*x7*x9 + -x2*x3*x4^3*x5*x7 + x2*x3*x4^3*x5*x8*x9 + -x2*x3*x4^3*x5*x8 + -x2*x3*x4^3*x5*x9 + x2*x3*x4^3*x5 + -x2*x3*x4^3*x6^2*x7*x8*x9 + x2*x3*x4^3*x6^2*x7*x8 + x2*x3*x4^3*x6^2*x7*x9 + -x2*x3*x4^3*x6^2*x7 + x2*x3*x4^3*x6^2*x8*x9 + -x2*x3*x4^3*x6^2*x8 + -x2*x3*x4^3*x6^2*x9 + x2*x3*x4^3*x6^2 + x2*x3*x4^3*x7*x8*x9 + -x2*x3*x4^3*x7*x8 + -x2*x3*x4^3*x7*x9 + x2*x3*x4^3*x7 + -x2*x3*x4^3*x8*x9 + x2*x3*x4^3*x8 + x2*x3*x4^3*x9 + -x2*x3*x4^3 + x2*x3*x4^2*x5^3*x6*x7*x8*x9 + -x2*x3*x4^2*x5^3*x6*x7*x8 + -x2*x3*x4^2*x5^3*x6*x7*x9 + x2*x3*x4^2*x5^3*x6*x7 + -x2*x3*x4^2*x5^3*x6*x8*x9 + x2*x3*x4^2*x5^3*x6*x8 + x2*x3*x4^2*x5^3*x6*x9 + -x2*x3*x4^2*x5^3*x6 + -x2*x3*x4^2*x5^3*x7*x8*x9 + x2*x3*x4^2*x5^3*x7*x8 + x2*x3*x4^2*x5^3*x7*x9 + -x2*x3*x4^2*x5^3*x7 + x2*x3*x4^2*x5^3*x8*x9 + -x2*x3*x4^2*x5^3*x8 + -x2*x3*x4^2*x5^3*x9 + x2*x3*x4^2*x5^3 + x2*x3*x4^2*x5*x6^3*x7*x8*x9 + -x2*x3*x4^2*x5*x6^3*x7*x8 + -x2*x3*x4^2*x5*x6^3*x7*x9 + x2*x3*x4^2*x5*x6^3*x7 + -x2*x3*x4^2*x5*x6^3*x8*x9 + x2*x3*x4^2*x5*x6^3*x8 + x2*x3*x4^2*x5*x6^3*x9 + -x2*x3*x4^2*x5*x6^3 + -x2*x3*x4^2*x5*x6^2*x7*x8*x9 + x2*x3*x4^2*x5*x6^2*x7*x8 + x2*x3*x4^2*x5*x6^2*x7*x9 + -x2*x3*x4^2*x5*x6^2*x7 + x2*x3*x4^2*x5*x6^2*x8*x9 + -x2*x3*x4^2*x5*x6^2*x8 + -x2*x3*x4^2*x5*x6^2*x9 + x2*x3*x4^2*x5*x6^2 + -x2*x3*x4^2*x5*x6*x7*x8*x9 + x2*x3*x4^2*x5*x6*x7*x8 + x2*x3*x4^2*x5*x6*x7*x9 + -x2*x3*x4^2*x5*x6*x7 + x2*x3*x4^2*x5*x6*x8*x9 + -x2*x3*x4^2*x5*x6*x8 + -x2*x3*x4^2*x5*x6*x9 + x2*x3*x4^2*x5*x6 + x2*x3*x4^2*x5*x7*x8*x9 + -x2*x3*x4^2*x5*x7*x8 + -x2*x3*x4^2*x5*x7*x9 + x2*x3*x4^2*x5*x7 + -x2*x3*x4^2*x5*x8*x9 + x2*x3*x4^2*x5*x8 + x2*x3*x4^2*x5*x9 + -x2*x3*x4^2*x5 + -x2*x3*x4^2*x6^3*x7*x8*x9 + x2*x3*x4^2*x6^3*x7*x8 + x2*x3*x4^2*x6^3*x7*x9 + -x2*x3*x4^2*x6^3*x7 + x2*x3*x4^2*x6^3*x8*x9 + -x2*x3*x4^2*x6^3*x8 + -x2*x3*x4^2*x6^3*x9 + x2*x3*x4^2*x6^3 + x2*x3*x4^2*x6^2*x7*x8*x9 + -x2*x3*x4^2*x6^2*x7*x8 + -x2*x3*x4^2*x6^2*x7*x9 + x2*x3*x4^2*x6^2*x7 + -x2*x3*x4^2*x6^2*x8*x9 + x2*x3*x4^2*x6^2*x8 + x2*x3*x4^2*x6^2*x9 + -x2*x3*x4^2*x6^2 + x2*x3*x4*x5^2*x6^3*x7*x8*x9 + -x2*x3*x4*x5^2*x6^3*x7*x8 + -x2*x3*x4*x5^2*x6^3*x7*x9 + x2*x3*x4*x5^2*x6^3*x7 + -x2*x3*x4*x5^2*x6^3*x8*x9 + x2*x3*x4*x5^2*x6^3*x8 + x2*x3*x4*x5^2*x6^3*x9 + -x2*x3*x4*x5^2*x6^3 + -x2*x3*x4*x5^2*x6^2*x7*x8*x9 + x2*x3*x4*x5^2*x6^2*x7*x8 + x2*x3*x4*x5^2*x6^2*x7*x9 + -x2*x3*x4*x5^2*x6^2*x7 + x2*x3*x4*x5^2*x6^2*x8*x9 + -x2*x3*x4*x5^2*x6^2*x8 + -x2*x3*x4*x5^2*x6^2*x9 + x2*x3*x4*x5^2*x6^2 + -x2*x3*x4*x5^2*x6*x7*x8*x9 + x2*x3*x4*x5^2*x6*x7*x8 + x2*x3*x4*x5^2*x6*x7*x9 + -x2*x3*x4*x5^2*x6*x7 + x2*x3*x4*x5^2*x6*x8*x9 + -x2*x3*x4*x5^2*x6*x8 + -x2*x3*x4*x5^2*x6*x9 + x2*x3*x4*x5^2*x6 + x2*x3*x4*x5^2*x7*x8*x9 + -x2*x3*x4*x5^2*x7*x8 + -x2*x3*x4*x5^2*x7*x9 + x2*x3*x4*x5^2*x7 + -x2*x3*x4*x5^2*x8*x9 + x2*x3*x4*x5^2*x8 + x2*x3*x4*x5^2*x9 + -x2*x3*x4*x5^2 + -2*x2*x3*x4*x5*x6^3*x7*x8*x9 + 2*x2*x3*x4*x5*x6^3*x7*x8 + 2*x2*x3*x4*x5*x6^3*x7*x9 + -2*x2*x3*x4*x5*x6^3*x7 + 2*x2*x3*x4*x5*x6^3*x8*x9 + -2*x2*x3*x4*x5*x6^3*x8 + -2*x2*x3*x4*x5*x6^3*x9 + 2*x2*x3*x4*x5*x6^3 + x2*x3*x4*x5*x6^2*x7*x8*x9 + -x2*x3*x4*x5*x6^2*x7*x8 + -x2*x3*x4*x5*x6^2*x7*x9 + x2*x3*x4*x5*x6^2*x7 + -x2*x3*x4*x5*x6^2*x8*x9 + x2*x3*x4*x5*x6^2*x8 + x2*x3*x4*x5*x6^2*x9 + -x2*x3*x4*x5*x6^2 + x2*x3*x4*x5*x6*x7^2*x8*x9 + -x2*x3*x4*x5*x6*x7^2*x8 + -x2*x3*x4*x5*x6*x7^2*x9 + x2*x3*x4*x5*x6*x7^2 + x2*x3*x4*x5*x6*x7*x8^2*x9 + -x2*x3*x4*x5*x6*x7*x8^2 + -x2*x3*x4*x5*x6*x7*x8*x9 + x2*x3*x4*x5*x6*x7*x8 + -x2*x3*x4*x5*x6*x8^2*x9 + x2*x3*x4*x5*x6*x8^2 + x2*x3*x4*x5*x6*x9 + -x2*x3*x4*x5*x6 + -x2*x3*x4*x5*x7^2*x8*x9 + x2*x3*x4*x5*x7^2*x8 + x2*x3*x4*x5*x7^2*x9 + -x2*x3*x4*x5*x7^2 + -x2*x3*x4*x5*x7*x8^2*x9 + x2*x3*x4*x5*x7*x8^2 + 2*x2*x3*x4*x5*x7*x8*x9 + -2*x2*x3*x4*x5*x7*x8 + -x2*x3*x4*x5*x7*x9 + x2*x3*x4*x5*x7 + x2*x3*x4*x5*x8^2*x9 + -x2*x3*x4*x5*x8^2 + -x2*x3*x4*x5*x8*x9 + x2*x3*x4*x5*x8 + x2*x3*x4*x6^3*x7*x8*x9 + -x2*x3*x4*x6^3*x7*x8 + -x2*x3*x4*x6^3*x7*x9 + x2*x3*x4*x6^3*x7 + -x2*x3*x4*x6^3*x8*x9 + x2*x3*x4*x6^3*x8 + x2*x3*x4*x6^3*x9 + -x2*x3*x4*x6^3 + -x2*x3*x4*x6*x7^2*x8*x9 + x2*x3*x4*x6*x7^2*x8 + x2*x3*x4*x6*x7^2*x9 + -x2*x3*x4*x6*x7^2 + -x2*x3*x4*x6*x7*x8^2*x9 + x2*x3*x4*x6*x7*x8^2 + 2*x2*x3*x4*x6*x7*x8*x9 + -2*x2*x3*x4*x6*x7*x8 + -x2*x3*x4*x6*x7*x9 + x2*x3*x4*x6*x7 + x2*x3*x4*x6*x8^2*x9 + -x2*x3*x4*x6*x8^2 + -x2*x3*x4*x6*x8*x9 + x2*x3*x4*x6*x8 + x2*x3*x4*x7^2*x8*x9 + -x2*x3*x4*x7^2*x8 + -x2*x3*x4*x7^2*x9 + x2*x3*x4*x7^2 + x2*x3*x4*x7*x8^2*x9 + -x2*x3*x4*x7*x8^2 + -3*x2*x3*x4*x7*x8*x9 + 3*x2*x3*x4*x7*x8 + 2*x2*x3*x4*x7*x9 + -2*x2*x3*x4*x7 + -x2*x3*x4*x8^2*x9 + x2*x3*x4*x8^2 + 2*x2*x3*x4*x8*x9 + -2*x2*x3*x4*x8 + -x2*x3*x4*x9 + x2*x3*x4 + -x2*x3*x5^3*x6*x7*x8*x9 + x2*x3*x5^3*x6*x7*x8 + x2*x3*x5^3*x6*x7*x9 + -x2*x3*x5^3*x6*x7 + x2*x3*x5^3*x6*x8*x9 + -x2*x3*x5^3*x6*x8 + -x2*x3*x5^3*x6*x9 + x2*x3*x5^3*x6 + x2*x3*x5^3*x7*x8*x9 + -x2*x3*x5^3*x7*x8 + -x2*x3*x5^3*x7*x9 + x2*x3*x5^3*x7 + -x2*x3*x5^3*x8*x9 + x2*x3*x5^3*x8 + x2*x3*x5^3*x9 + -x2*x3*x5^3 + -x2*x3*x5^2*x6^3*x7*x8*x9 + x2*x3*x5^2*x6^3*x7*x8 + x2*x3*x5^2*x6^3*x7*x9 + -x2*x3*x5^2*x6^3*x7 + x2*x3*x5^2*x6^3*x8*x9 + -x2*x3*x5^2*x6^3*x8 + -x2*x3*x5^2*x6^3*x9 + x2*x3*x5^2*x6^3 + x2*x3*x5^2*x6^2*x7*x8*x9 + -x2*x3*x5^2*x6^2*x7*x8 + -x2*x3*x5^2*x6^2*x7*x9 + x2*x3*x5^2*x6^2*x7 + -x2*x3*x5^2*x6^2*x8*x9 + x2*x3*x5^2*x6^2*x8 + x2*x3*x5^2*x6^2*x9 + -x2*x3*x5^2*x6^2 + x2*x3*x5^2*x6*x7*x8*x9 + -x2*x3*x5^2*x6*x7*x8 + -x2*x3*x5^2*x6*x7*x9 + x2*x3*x5^2*x6*x7 + -x2*x3*x5^2*x6*x8*x9 + x2*x3*x5^2*x6*x8 + x2*x3*x5^2*x6*x9 + -x2*x3*x5^2*x6 + -x2*x3*x5^2*x7*x8*x9 + x2*x3*x5^2*x7*x8 + x2*x3*x5^2*x7*x9 + -x2*x3*x5^2*x7 + x2*x3*x5^2*x8*x9 + -x2*x3*x5^2*x8 + -x2*x3*x5^2*x9 + x2*x3*x5^2 + x2*x3*x5*x6^3*x7*x8*x9 + -x2*x3*x5*x6^3*x7*x8 + -x2*x3*x5*x6^3*x7*x9 + x2*x3*x5*x6^3*x7 + -x2*x3*x5*x6^3*x8*x9 + x2*x3*x5*x6^3*x8 + x2*x3*x5*x6^3*x9 + -x2*x3*x5*x6^3 + -x2*x3*x5*x6^2*x7*x8*x9 + x2*x3*x5*x6^2*x7*x8 + x2*x3*x5*x6^2*x7*x9 + -x2*x3*x5*x6^2*x7 + x2*x3*x5*x6^2*x8*x9 + -x2*x3*x5*x6^2*x8 + -x2*x3*x5*x6^2*x9 + x2*x3*x5*x6^2 + -x2*x3*x5*x6*x7^2*x8*x9 + x2*x3*x5*x6*x7^2*x8 + x2*x3*x5*x6*x7^2*x9 + -x2*x3*x5*x6*x7^2 + -x2*x3*x5*x6*x7*x8^2*x9 + x2*x3*x5*x6*x7*x8^2 + 2*x2*x3*x5*x6*x7*x8*x9 + -2*x2*x3*x5*x6*x7*x8 + -x2*x3*x5*x6*x7*x9 + x2*x3*x5*x6*x7 + x2*x3*x5*x6*x8^2*x9 + -x2*x3*x5*x6*x8^2 + -x2*x3*x5*x6*x8*x9 + x2*x3*x5*x6*x8 + x2*x3*x5*x7^2*x8*x9 + -x2*x3*x5*x7^2*x8 + -x2*x3*x5*x7^2*x9 + x2*x3*x5*x7^2 + x2*x3*x5*x7*x8^2*x9 + -x2*x3*x5*x7*x8^2 + -2*x2*x3*x5*x7*x8*x9 + 2*x2*x3*x5*x7*x8 + x2*x3*x5*x7*x9 + -x2*x3*x5*x7 + -x2*x3*x5*x8^2*x9 + x2*x3*x5*x8^2 + x2*x3*x5*x8*x9 + -x2*x3*x5*x8 + x2*x3*x6*x7^2*x8*x9 + -x2*x3*x6*x7^2*x8 + -x2*x3*x6*x7^2*x9 + x2*x3*x6*x7^2 + x2*x3*x6*x7*x8^2*x9 + -x2*x3*x6*x7*x8^2 + -2*x2*x3*x6*x7*x8*x9 + 2*x2*x3*x6*x7*x8 + x2*x3*x6*x7*x9 + -x2*x3*x6*x7 + -x2*x3*x6*x8^2*x9 + x2*x3*x6*x8^2 + x2*x3*x6*x8*x9 + -x2*x3*x6*x8 + -x2*x3*x7^2*x8*x9 + x2*x3*x7^2*x8 + x2*x3*x7^2*x9 + -x2*x3*x7^2 + -x2*x3*x7*x8^2*x9 + x2*x3*x7*x8^2 + 2*x2*x3*x7*x8*x9 + -2*x2*x3*x7*x8 + -x2*x3*x7*x9 + x2*x3*x7 + x2*x3*x8^2*x9 + -x2*x3*x8^2 + -x2*x3*x8*x9 + x2*x3*x8 + -x2*x4^3*x5*x6^2*x7*x8*x9 + x2*x4^3*x5*x6^2*x7*x8 + x2*x4^3*x5*x6^2*x7*x9 + -x2*x4^3*x5*x6^2*x7 + x2*x4^3*x5*x6^2*x8*x9 + -x2*x4^3*x5*x6^2*x8 + -x2*x4^3*x5*x6^2*x9 + x2*x4^3*x5*x6^2 + x2*x4^3*x5*x7*x8*x9 + -x2*x4^3*x5*x7*x8 + -x2*x4^3*x5*x7*x9 + x2*x4^3*x5*x7 + -x2*x4^3*x5*x8*x9 + x2*x4^3*x5*x8 + x2*x4^3*x5*x9 + -x2*x4^3*x5 + x2*x4^3*x6^2*x7*x8*x9 + -x2*x4^3*x6^2*x7*x8 + -x2*x4^3*x6^2*x7*x9 + x2*x4^3*x6^2*x7 + -x2*x4^3*x6^2*x8*x9 + x2*x4^3*x6^2*x8 + x2*x4^3*x6^2*x9 + -x2*x4^3*x6^2 + -x2*x4^3*x7*x8*x9 + x2*x4^3*x7*x8 + x2*x4^3*x7*x9 + -x2*x4^3*x7 + x2*x4^3*x8*x9 + -x2*x4^3*x8 + -x2*x4^3*x9 + x2*x4^3 + -x2*x4^2*x5^3*x6*x7*x8*x9 + x2*x4^2*x5^3*x6*x7*x8 + x2*x4^2*x5^3*x6*x7*x9 + -x2*x4^2*x5^3*x6*x7 + x2*x4^2*x5^3*x6*x8*x9 + -x2*x4^2*x5^3*x6*x8 + -x2*x4^2*x5^3*x6*x9 + x2*x4^2*x5^3*x6 + x2*x4^2*x5^3*x7*x8*x9 + -x2*x4^2*x5^3*x7*x8 + -x2*x4^2*x5^3*x7*x9 + x2*x4^2*x5^3*x7 + -x2*x4^2*x5^3*x8*x9 + x2*x4^2*x5^3*x8 + x2*x4^2*x5^3*x9 + -x2*x4^2*x5^3 + -x2*x4^2*x5*x6^3*x7*x8*x9 + x2*x4^2*x5*x6^3*x7*x8 + x2*x4^2*x5*x6^3*x7*x9 + -x2*x4^2*x5*x6^3*x7 + x2*x4^2*x5*x6^3*x8*x9 + -x2*x4^2*x5*x6^3*x8 + -x2*x4^2*x5*x6^3*x9 + x2*x4^2*x5*x6^3 + x2*x4^2*x5*x6^2*x7*x8*x9 + -x2*x4^2*x5*x6^2*x7*x8 + -x2*x4^2*x5*x6^2*x7*x9 + x2*x4^2*x5*x6^2*x7 + -x2*x4^2*x5*x6^2*x8*x9 + x2*x4^2*x5*x6^2*x8 + x2*x4^2*x5*x6^2*x9 + -x2*x4^2*x5*x6^2 + x2*x4^2*x5*x6*x7*x8*x9 + -x2*x4^2*x5*x6*x7*x8 + -x2*x4^2*x5*x6*x7*x9 + x2*x4^2*x5*x6*x7 + -x2*x4^2*x5*x6*x8*x9 + x2*x4^2*x5*x6*x8 + x2*x4^2*x5*x6*x9 + -x2*x4^2*x5*x6 + -x2*x4^2*x5*x7*x8*x9 + x2*x4^2*x5*x7*x8 + x2*x4^2*x5*x7*x9 + -x2*x4^2*x5*x7 + x2*x4^2*x5*x8*x9 + -x2*x4^2*x5*x8 + -x2*x4^2*x5*x9 + x2*x4^2*x5 + x2*x4^2*x6^3*x7*x8*x9 + -x2*x4^2*x6^3*x7*x8 + -x2*x4^2*x6^3*x7*x9 + x2*x4^2*x6^3*x7 + -x2*x4^2*x6^3*x8*x9 + x2*x4^2*x6^3*x8 + x2*x4^2*x6^3*x9 + -x2*x4^2*x6^3 + -x2*x4^2*x6^2*x7*x8*x9 + x2*x4^2*x6^2*x7*x8 + x2*x4^2*x6^2*x7*x9 + -x2*x4^2*x6^2*x7 + x2*x4^2*x6^2*x8*x9 + -x2*x4^2*x6^2*x8 + -x2*x4^2*x6^2*x9 + x2*x4^2*x6^2 + -x2*x4*x5^2*x6^3*x7*x8*x9 + x2*x4*x5^2*x6^3*x7*x8 + x2*x4*x5^2*x6^3*x7*x9 + -x2*x4*x5^2*x6^3*x7 + x2*x4*x5^2*x6^3*x8*x9 + -x2*x4*x5^2*x6^3*x8 + -x2*x4*x5^2*x6^3*x9 + x2*x4*x5^2*x6^3 + x2*x4*x5^2*x6^2*x7*x8*x9 + -x2*x4*x5^2*x6^2*x7*x8 + -x2*x4*x5^2*x6^2*x7*x9 + x2*x4*x5^2*x6^2*x7 + -x2*x4*x5^2*x6^2*x8*x9 + x2*x4*x5^2*x6^2*x8 + x2*x4*x5^2*x6^2*x9 + -x2*x4*x5^2*x6^2 + x2*x4*x5^2*x6*x7*x8*x9 + -x2*x4*x5^2*x6*x7*x8 + -x2*x4*x5^2*x6*x7*x9 + x2*x4*x5^2*x6*x7 + -x2*x4*x5^2*x6*x8*x9 + x2*x4*x5^2*x6*x8 + x2*x4*x5^2*x6*x9 + -x2*x4*x5^2*x6 + -x2*x4*x5^2*x7*x8*x9 + x2*x4*x5^2*x7*x8 + x2*x4*x5^2*x7*x9 + -x2*x4*x5^2*x7 + x2*x4*x5^2*x8*x9 + -x2*x4*x5^2*x8 + -x2*x4*x5^2*x9 + x2*x4*x5^2 + 2*x2*x4*x5*x6^3*x7*x8*x9 + -2*x2*x4*x5*x6^3*x7*x8 + -2*x2*x4*x5*x6^3*x7*x9 + 2*x2*x4*x5*x6^3*x7 + -2*x2*x4*x5*x6^3*x8*x9 + 2*x2*x4*x5*x6^3*x8 + 2*x2*x4*x5*x6^3*x9 + -2*x2*x4*x5*x6^3 + -x2*x4*x5*x6^2*x7*x8*x9 + x2*x4*x5*x6^2*x7*x8 + x2*x4*x5*x6^2*x7*x9 + -x2*x4*x5*x6^2*x7 + x2*x4*x5*x6^2*x8*x9 + -x2*x4*x5*x6^2*x8 + -x2*x4*x5*x6^2*x9 + x2*x4*x5*x6^2 + -x2*x4*x5*x6*x7^2*x8*x9 + x2*x4*x5*x6*x7^2*x8 + x2*x4*x5*x6*x7^2*x9 + -x2*x4*x5*x6*x7^2 + -x2*x4*x5*x6*x7*x8^2*x9 + x2*x4*x5*x6*x7*x8^2 + x2*x4*x5*x6*x7*x8*x9 + -x2*x4*x5*x6*x7*x8 + x2*x4*x5*x6*x8^2*x9 + -x2*x4*x5*x6*x8^2 + -x2*x4*x5*x6*x9 + x2*x4*x5*x6 + x2*x4*x5*x7^2*x8*x9 + -x2*x4*x5*x7^2*x8 + -x2*x4*x5*x7^2*x9 + x2*x4*x5*x7^2 + x2*x4*x5*x7*x8^2*x9 + -x2*x4*x5*x7*x8^2 + -2*x2*x4*x5*x7*x8*x9 + 2*x2*x4*x5*x7*x8 + x2*x4*x5*x7*x9 + -x2*x4*x5*x7 + -x2*x4*x5*x8^2*x9 + x2*x4*x5*x8^2 + x2*x4*x5*x8*x9 + -x2*x4*x5*x8 + -x2*x4*x6^3*x7*x8*x9 + x2*x4*x6^3*x7*x8 + x2*x4*x6^3*x7*x9 + -x2*x4*x6^3*x7 + x2*x4*x6^3*x8*x9 + -x2*x4*x6^3*x8 + -x2*x4*x6^3*x9 + x2*x4*x6^3 + x2*x4*x6*x7^2*x8*x9 + -x2*x4*x6*x7^2*x8 + -x2*x4*x6*x7^2*x9 + x2*x4*x6*x7^2 + x2*x4*x6*x7*x8^2*x9 + -x2*x4*x6*x7*x8^2 + -2*x2*x4*x6*x7*x8*x9 + 2*x2*x4*x6*x7*x8 + x2*x4*x6*x7*x9 + -x2*x4*x6*x7 + -x2*x4*x6*x8^2*x9 + x2*x4*x6*x8^2 + x2*x4*x6*x8*x9 + -x2*x4*x6*x8 + -x2*x4*x7^2*x8*x9 + x2*x4*x7^2*x8 + x2*x4*x7^2*x9 + -x2*x4*x7^2 + -x2*x4*x7*x8^2*x9 + x2*x4*x7*x8^2 + 3*x2*x4*x7*x8*x9 + -3*x2*x4*x7*x8 + -2*x2*x4*x7*x9 + 2*x2*x4*x7 + x2*x4*x8^2*x9 + -x2*x4*x8^2 + -2*x2*x4*x8*x9 + 2*x2*x4*x8 + x2*x4*x9 + -x2*x4 + x2*x5^3*x6*x7*x8*x9 + -x2*x5^3*x6*x7*x8 + -x2*x5^3*x6*x7*x9 + x2*x5^3*x6*x7 + -x2*x5^3*x6*x8*x9 + x2*x5^3*x6*x8 + x2*x5^3*x6*x9 + -x2*x5^3*x6 + -x2*x5^3*x7*x8*x9 + x2*x5^3*x7*x8 + x2*x5^3*x7*x9 + -x2*x5^3*x7 + x2*x5^3*x8*x9 + -x2*x5^3*x8 + -x2*x5^3*x9 + x2*x5^3 + x2*x5^2*x6^3*x7*x8*x9 + -x2*x5^2*x6^3*x7*x8 + -x2*x5^2*x6^3*x7*x9 + x2*x5^2*x6^3*x7 + -x2*x5^2*x6^3*x8*x9 + x2*x5^2*x6^3*x8 + x2*x5^2*x6^3*x9 + -x2*x5^2*x6^3 + -x2*x5^2*x6^2*x7*x8*x9 + x2*x5^2*x6^2*x7*x8 + x2*x5^2*x6^2*x7*x9 + -x2*x5^2*x6^2*x7 + x2*x5^2*x6^2*x8*x9 + -x2*x5^2*x6^2*x8 + -x2*x5^2*x6^2*x9 + x2*x5^2*x6^2 + -x2*x5^2*x6*x7*x8*x9 + x2*x5^2*x6*x7*x8 + x2*x5^2*x6*x7*x9 + -x2*x5^2*x6*x7 + x2*x5^2*x6*x8*x9 + -x2*x5^2*x6*x8 + -x2*x5^2*x6*x9 + x2*x5^2*x6 + x2*x5^2*x7*x8*x9 + -x2*x5^2*x7*x8 + -x2*x5^2*x7*x9 + x2*x5^2*x7 + -x2*x5^2*x8*x9 + x2*x5^2*x8 + x2*x5^2*x9 + -x2*x5^2 + -x2*x5*x6^3*x7*x8*x9 + x2*x5*x6^3*x7*x8 + x2*x5*x6^3*x7*x9 + -x2*x5*x6^3*x7 + x2*x5*x6^3*x8*x9 + -x2*x5*x6^3*x8 + -x2*x5*x6^3*x9 + x2*x5*x6^3 + x2*x5*x6^2*x7*x8*x9 + -x2*x5*x6^2*x7*x8 + -x2*x5*x6^2*x7*x9 + x2*x5*x6^2*x7 + -x2*x5*x6^2*x8*x9 + x2*x5*x6^2*x8 + x2*x5*x6^2*x9 + -x2*x5*x6^2 + x2*x5*x6*x7^2*x8*x9 + -x2*x5*x6*x7^2*x8 + -x2*x5*x6*x7^2*x9 + x2*x5*x6*x7^2 + x2*x5*x6*x7*x8^2*x9 + -x2*x5*x6*x7*x8^2 + -2*x2*x5*x6*x7*x8*x9 + 2*x2*x5*x6*x7*x8 + x2*x5*x6*x7*x9 + -x2*x5*x6*x7 + -x2*x5*x6*x8^2*x9 + x2*x5*x6*x8^2 + x2*x5*x6*x8*x9 + -x2*x5*x6*x8 + -x2*x5*x7^2*x8*x9 + x2*x5*x7^2*x8 + x2*x5*x7^2*x9 + -x2*x5*x7^2 + -x2*x5*x7*x8^2*x9 + x2*x5*x7*x8^2 + 2*x2*x5*x7*x8*x9 + -2*x2*x5*x7*x8 + -x2*x5*x7*x9 + x2*x5*x7 + x2*x5*x8^2*x9 + -x2*x5*x8^2 + -x2*x5*x8*x9 + x2*x5*x8 + -x2*x6*x7^2*x8*x9 + x2*x6*x7^2*x8 + x2*x6*x7^2*x9 + -x2*x6*x7^2 + -x2*x6*x7*x8^2*x9 + x2*x6*x7*x8^2 + 2*x2*x6*x7*x8*x9 + -2*x2*x6*x7*x8 + -x2*x6*x7*x9 + x2*x6*x7 + x2*x6*x8^2*x9 + -x2*x6*x8^2 + -x2*x6*x8*x9 + x2*x6*x8 + x2*x7^2*x8*x9 + -x2*x7^2*x8 + -x2*x7^2*x9 + x2*x7^2 + x2*x7*x8^2*x9 + -x2*x7*x8^2 + -2*x2*x7*x8*x9 + 2*x2*x7*x8 + x2*x7*x9 + -x2*x7 + -x2*x8^2*x9 + x2*x8^2 + x2*x8*x9 + -x2*x8 + -x3*x4^3*x5*x6^2*x7*x8*x9 + x3*x4^3*x5*x6^2*x7*x8 + x3*x4^3*x5*x6^2*x7*x9 + -x3*x4^3*x5*x6^2*x7 + x3*x4^3*x5*x6^2*x8*x9 + -x3*x4^3*x5*x6^2*x8 + -x3*x4^3*x5*x6^2*x9 + x3*x4^3*x5*x6^2 + x3*x4^3*x5*x7*x8*x9 + -x3*x4^3*x5*x7*x8 + -x3*x4^3*x5*x7*x9 + x3*x4^3*x5*x7 + -x3*x4^3*x5*x8*x9 + x3*x4^3*x5*x8 + x3*x4^3*x5*x9 + -x3*x4^3*x5 + x3*x4^3*x6^2*x7*x8*x9 + -x3*x4^3*x6^2*x7*x8 + -x3*x4^3*x6^2*x7*x9 + x3*x4^3*x6^2*x7 + -x3*x4^3*x6^2*x8*x9 + x3*x4^3*x6^2*x8 + x3*x4^3*x6^2*x9 + -x3*x4^3*x6^2 + -x3*x4^3*x7*x8*x9 + x3*x4^3*x7*x8 + x3*x4^3*x7*x9 + -x3*x4^3*x7 + x3*x4^3*x8*x9 + -x3*x4^3*x8 + -x3*x4^3*x9 + x3*x4^3 + -x3*x4^2*x5^3*x6*x7*x8*x9 + x3*x4^2*x5^3*x6*x7*x8 + x3*x4^2*x5^3*x6*x7*x9 + -x3*x4^2*x5^3*x6*x7 + x3*x4^2*x5^3*x6*x8*x9 + -x3*x4^2*x5^3*x6*x8 + -x3*x4^2*x5^3*x6*x9 + x3*x4^2*x5^3*x6 + x3*x4^2*x5^3*x7*x8*x9 + -x3*x4^2*x5^3*x7*x8 + -x3*x4^2*x5^3*x7*x9 + x3*x4^2*x5^3*x7 + -x3*x4^2*x5^3*x8*x9 + x3*x4^2*x5^3*x8 + x3*x4^2*x5^3*x9 + -x3*x4^2*x5^3 + -x3*x4^2*x5*x6^3*x7*x8*x9 + x3*x4^2*x5*x6^3*x7*x8 + x3*x4^2*x5*x6^3*x7*x9 + -x3*x4^2*x5*x6^3*x7 + x3*x4^2*x5*x6^3*x8*x9 + -x3*x4^2*x5*x6^3*x8 + -x3*x4^2*x5*x6^3*x9 + x3*x4^2*x5*x6^3 + x3*x4^2*x5*x6^2*x7*x8*x9 + -x3*x4^2*x5*x6^2*x7*x8 + -x3*x4^2*x5*x6^2*x7*x9 + x3*x4^2*x5*x6^2*x7 + -x3*x4^2*x5*x6^2*x8*x9 + x3*x4^2*x5*x6^2*x8 + x3*x4^2*x5*x6^2*x9 + -x3*x4^2*x5*x6^2 + x3*x4^2*x5*x6*x7*x8*x9 + -x3*x4^2*x5*x6*x7*x8 + -x3*x4^2*x5*x6*x7*x9 + x3*x4^2*x5*x6*x7 + -x3*x4^2*x5*x6*x8*x9 + x3*x4^2*x5*x6*x8 + x3*x4^2*x5*x6*x9 + -x3*x4^2*x5*x6 + -x3*x4^2*x5*x7*x8*x9 + x3*x4^2*x5*x7*x8 + x3*x4^2*x5*x7*x9 + -x3*x4^2*x5*x7 + x3*x4^2*x5*x8*x9 + -x3*x4^2*x5*x8 + -x3*x4^2*x5*x9 + x3*x4^2*x5 + x3*x4^2*x6^3*x7*x8*x9 + -x3*x4^2*x6^3*x7*x8 + -x3*x4^2*x6^3*x7*x9 + x3*x4^2*x6^3*x7 + -x3*x4^2*x6^3*x8*x9 + x3*x4^2*x6^3*x8 + x3*x4^2*x6^3*x9 + -x3*x4^2*x6^3 + -x3*x4^2*x6^2*x7*x8*x9 + x3*x4^2*x6^2*x7*x8 + x3*x4^2*x6^2*x7*x9 + -x3*x4^2*x6^2*x7 + x3*x4^2*x6^2*x8*x9 + -x3*x4^2*x6^2*x8 + -x3*x4^2*x6^2*x9 + x3*x4^2*x6^2 + -x3*x4*x5^2*x6^3*x7*x8*x9 + x3*x4*x5^2*x6^3*x7*x8 + x3*x4*x5^2*x6^3*x7*x9 + -x3*x4*x5^2*x6^3*x7 + x3*x4*x5^2*x6^3*x8*x9 + -x3*x4*x5^2*x6^3*x8 + -x3*x4*x5^2*x6^3*x9 + x3*x4*x5^2*x6^3 + x3*x4*x5^2*x6*x7*x8*x9 + -x3*x4*x5^2*x6*x7*x8 + -x3*x4*x5^2*x6*x7*x9 + x3*x4*x5^2*x6*x7 + -x3*x4*x5^2*x6*x8*x9 + x3*x4*x5^2*x6*x8 + x3*x4*x5^2*x6*x9 + -x3*x4*x5^2*x6 + x3*x4*x5*x6^3*x7*x8*x9 + -x3*x4*x5*x6^3*x7*x8 + -x3*x4*x5*x6^3*x7*x9 + x3*x4*x5*x6^3*x7 + -x3*x4*x5*x6^3*x8*x9 + x3*x4*x5*x6^3*x8 + x3*x4*x5*x6^3*x9 + -x3*x4*x5*x6^3 + -x3*x4*x5*x6*x7^2*x8*x9 + x3*x4*x5*x6*x7^2*x8 + x3*x4*x5*x6*x7^2*x9 + -x3*x4*x5*x6*x7^2 + -x3*x4*x5*x6*x7*x8^2*x9 + x3*x4*x5*x6*x7*x8^2 + x3*x4*x5*x6*x7*x8*x9 + -x3*x4*x5*x6*x7*x8 + x3*x4*x5*x6*x8^2*x9 + -x3*x4*x5*x6*x8^2 + -x3*x4*x5*x6*x9 + x3*x4*x5*x6 + x3*x4*x5*x7^2*x8*x9 + -x3*x4*x5*x7^2*x8 + -x3*x4*x5*x7^2*x9 + x3*x4*x5*x7^2 + x3*x4*x5*x7*x8^2*x9 + -x3*x4*x5*x7*x8^2 + -2*x3*x4*x5*x7*x8*x9 + 2*x3*x4*x5*x7*x8 + x3*x4*x5*x7*x9 + -x3*x4*x5*x7 + -x3*x4*x5*x8^2*x9 + x3*x4*x5*x8^2 + x3*x4*x5*x8*x9 + -x3*x4*x5*x8 + x3*x4*x6*x7^2*x8*x9 + -x3*x4*x6*x7^2*x8 + -x3*x4*x6*x7^2*x9 + x3*x4*x6*x7^2 + x3*x4*x6*x7*x8^2*x9 + -x3*x4*x6*x7*x8^2 + -2*x3*x4*x6*x7*x8*x9 + 2*x3*x4*x6*x7*x8 + x3*x4*x6*x7*x9 + -x3*x4*x6*x7 + -x3*x4*x6*x8^2*x9 + x3*x4*x6*x8^2 + x3*x4*x6*x8*x9 + -x3*x4*x6*x8 + -x3*x4*x7^2*x8*x9 + x3*x4*x7^2*x8 + x3*x4*x7^2*x9 + -x3*x4*x7^2 + -x3*x4*x7*x8^2*x9 + x3*x4*x7*x8^2 + 2*x3*x4*x7*x8*x9 + -2*x3*x4*x7*x8 + -x3*x4*x7*x9 + x3*x4*x7 + x3*x4*x8^2*x9 + -x3*x4*x8^2 + -x3*x4*x8*x9 + x3*x4*x8 + x3*x5^3*x6*x7*x8*x9 + -x3*x5^3*x6*x7*x8 + -x3*x5^3*x6*x7*x9 + x3*x5^3*x6*x7 + -x3*x5^3*x6*x8*x9 + x3*x5^3*x6*x8 + x3*x5^3*x6*x9 + -x3*x5^3*x6 + -x3*x5^3*x7*x8*x9 + x3*x5^3*x7*x8 + x3*x5^3*x7*x9 + -x3*x5^3*x7 + x3*x5^3*x8*x9 + -x3*x5^3*x8 + -x3*x5^3*x9 + x3*x5^3 + x3*x5^2*x6^3*x7*x8*x9 + -x3*x5^2*x6^3*x7*x8 + -x3*x5^2*x6^3*x7*x9 + x3*x5^2*x6^3*x7 + -x3*x5^2*x6^3*x8*x9 + x3*x5^2*x6^3*x8 + x3*x5^2*x6^3*x9 + -x3*x5^2*x6^3 + -x3*x5^2*x6*x7*x8*x9 + x3*x5^2*x6*x7*x8 + x3*x5^2*x6*x7*x9 + -x3*x5^2*x6*x7 + x3*x5^2*x6*x8*x9 + -x3*x5^2*x6*x8 + -x3*x5^2*x6*x9 + x3*x5^2*x6 + x3*x5*x6*x7^2*x8*x9 + -x3*x5*x6*x7^2*x8 + -x3*x5*x6*x7^2*x9 + x3*x5*x6*x7^2 + x3*x5*x6*x7*x8^2*x9 + -x3*x5*x6*x7*x8^2 + -2*x3*x5*x6*x7*x8*x9 + 2*x3*x5*x6*x7*x8 + x3*x5*x6*x7*x9 + -x3*x5*x6*x7 + -x3*x5*x6*x8^2*x9 + x3*x5*x6*x8^2 + x3*x5*x6*x8*x9 + -x3*x5*x6*x8 + -x3*x5*x7^2*x8*x9 + x3*x5*x7^2*x8 + x3*x5*x7^2*x9 + -x3*x5*x7^2 + -x3*x5*x7*x8^2*x9 + x3*x5*x7*x8^2 + 2*x3*x5*x7*x8*x9 + -2*x3*x5*x7*x8 + -x3*x5*x7*x9 + x3*x5*x7 + x3*x5*x8^2*x9 + -x3*x5*x8^2 + -x3*x5*x8*x9 + x3*x5*x8 + -x3*x6^3*x7*x8*x9 + x3*x6^3*x7*x8 + x3*x6^3*x7*x9 + -x3*x6^3*x7 + x3*x6^3*x8*x9 + -x3*x6^3*x8 + -x3*x6^3*x9 + x3*x6^3 + -x3*x6*x7^2*x8*x9 + x3*x6*x7^2*x8 + x3*x6*x7^2*x9 + -x3*x6*x7^2 + -x3*x6*x7*x8^2*x9 + x3*x6*x7*x8^2 + 2*x3*x6*x7*x8*x9 + -2*x3*x6*x7*x8 + -x3*x6*x7*x9 + x3*x6*x7 + x3*x6*x8^2*x9 + -x3*x6*x8^2 + -x3*x6*x8*x9 + x3*x6*x8 + x3*x7^2*x8*x9 + -x3*x7^2*x8 + -x3*x7^2*x9 + x3*x7^2 + x3*x7*x8^2*x9 + -x3*x7*x8^2 + -x3*x7*x8*x9 + x3*x7*x8 + -x3*x8^2*x9 + x3*x8^2 + x3*x9 + -x3 + x4^3*x5*x6^2*x7*x8*x9 + -x4^3*x5*x6^2*x7*x8 + -x4^3*x5*x6^2*x7*x9 + x4^3*x5*x6^2*x7 + -x4^3*x5*x6^2*x8*x9 + x4^3*x5*x6^2*x8 + x4^3*x5*x6^2*x9 + -x4^3*x5*x6^2 + -x4^3*x5*x7*x8*x9 + x4^3*x5*x7*x8 + x4^3*x5*x7*x9 + -x4^3*x5*x7 + x4^3*x5*x8*x9 + -x4^3*x5*x8 + -x4^3*x5*x9 + x4^3*x5 + -x4^3*x6^2*x7*x8*x9 + x4^3*x6^2*x7*x8 + x4^3*x6^2*x7*x9 + -x4^3*x6^2*x7 + x4^3*x6^2*x8*x9 + -x4^3*x6^2*x8 + -x4^3*x6^2*x9 + x4^3*x6^2 + x4^3*x7*x8*x9 + -x4^3*x7*x8 + -x4^3*x7*x9 + x4^3*x7 + -x4^3*x8*x9 + x4^3*x8 + x4^3*x9 + -x4^3 + x4^2*x5^3*x6*x7*x8*x9 + -x4^2*x5^3*x6*x7*x8 + -x4^2*x5^3*x6*x7*x9 + x4^2*x5^3*x6*x7 + -x4^2*x5^3*x6*x8*x9 + x4^2*x5^3*x6*x8 + x4^2*x5^3*x6*x9 + -x4^2*x5^3*x6 + -x4^2*x5^3*x7*x8*x9 + x4^2*x5^3*x7*x8 + x4^2*x5^3*x7*x9 + -x4^2*x5^3*x7 + x4^2*x5^3*x8*x9 + -x4^2*x5^3*x8 + -x4^2*x5^3*x9 + x4^2*x5^3 + x4^2*x5*x6^3*x7*x8*x9 + -x4^2*x5*x6^3*x7*x8 + -x4^2*x5*x6^3*x7*x9 + x4^2*x5*x6^3*x7 + -x4^2*x5*x6^3*x8*x9 + x4^2*x5*x6^3*x8 + x4^2*x5*x6^3*x9 + -x4^2*x5*x6^3 + -x4^2*x5*x6^2*x7*x8*x9 + x4^2*x5*x6^2*x7*x8 + x4^2*x5*x6^2*x7*x9 + -x4^2*x5*x6^2*x7 + x4^2*x5*x6^2*x8*x9 + -x4^2*x5*x6^2*x8 + -x4^2*x5*x6^2*x9 + x4^2*x5*x6^2 + -x4^2*x5*x6*x7*x8*x9 + x4^2*x5*x6*x7*x8 + x4^2*x5*x6*x7*x9 + -x4^2*x5*x6*x7 + x4^2*x5*x6*x8*x9 + -x4^2*x5*x6*x8 + -x4^2*x5*x6*x9 + x4^2*x5*x6 + x4^2*x5*x7*x8*x9 + -x4^2*x5*x7*x8 + -x4^2*x5*x7*x9 + x4^2*x5*x7 + -x4^2*x5*x8*x9 + x4^2*x5*x8 + x4^2*x5*x9 + -x4^2*x5 + -x4^2*x6^3*x7*x8*x9 + x4^2*x6^3*x7*x8 + x4^2*x6^3*x7*x9 + -x4^2*x6^3*x7 + x4^2*x6^3*x8*x9 + -x4^2*x6^3*x8 + -x4^2*x6^3*x9 + x4^2*x6^3 + x4^2*x6^2*x7*x8*x9 + -x4^2*x6^2*x7*x8 + -x4^2*x6^2*x7*x9 + x4^2*x6^2*x7 + -x4^2*x6^2*x8*x9 + x4^2*x6^2*x8 + x4^2*x6^2*x9 + -x4^2*x6^2 + x4*x5^2*x6^3*x7*x8*x9 + -x4*x5^2*x6^3*x7*x8 + -x4*x5^2*x6^3*x7*x9 + x4*x5^2*x6^3*x7 + -x4*x5^2*x6^3*x8*x9 + x4*x5^2*x6^3*x8 + x4*x5^2*x6^3*x9 + -x4*x5^2*x6^3 + -x4*x5^2*x6*x7*x8*x9 + x4*x5^2*x6*x7*x8 + x4*x5^2*x6*x7*x9 + -x4*x5^2*x6*x7 + x4*x5^2*x6*x8*x9 + -x4*x5^2*x6*x8 + -x4*x5^2*x6*x9 + x4*x5^2*x6 + -x4*x5*x6^3*x7*x8*x9 + x4*x5*x6^3*x7*x8 + x4*x5*x6^3*x7*x9 + -x4*x5*x6^3*x7 + x4*x5*x6^3*x8*x9 + -x4*x5*x6^3*x8 + -x4*x5*x6^3*x9 + x4*x5*x6^3 + x4*x5*x6*x7^2*x8*x9 + -x4*x5*x6*x7^2*x8 + -x4*x5*x6*x7^2*x9 + x4*x5*x6*x7^2 + x4*x5*x6*x7*x8^2*x9 + -x4*x5*x6*x7*x8^2 + -x4*x5*x6*x7*x8*x9 + x4*x5*x6*x7*x8 + -x4*x5*x6*x8^2*x9 + x4*x5*x6*x8^2 + x4*x5*x6*x9 + -x4*x5*x6 + -x4*x5*x7^2*x8*x9 + x4*x5*x7^2*x8 + x4*x5*x7^2*x9 + -x4*x5*x7^2 + -x4*x5*x7*x8^2*x9 + x4*x5*x7*x8^2 + 2*x4*x5*x7*x8*x9 + -2*x4*x5*x7*x8 + -x4*x5*x7*x9 + x4*x5*x7 + x4*x5*x8^2*x9 + -x4*x5*x8^2 + -x4*x5*x8*x9 + x4*x5*x8 + -x4*x6*x7^2*x8*x9 + x4*x6*x7^2*x8 + x4*x6*x7^2*x9 + -x4*x6*x7^2 + -x4*x6*x7*x8^2*x9 + x4*x6*x7*x8^2 + 2*x4*x6*x7*x8*x9 + -2*x4*x6*x7*x8 + -x4*x6*x7*x9 + x4*x6*x7 + x4*x6*x8^2*x9 + -x4*x6*x8^2 + -x4*x6*x8*x9 + x4*x6*x8 + x4*x7^2*x8*x9 + -x4*x7^2*x8 + -x4*x7^2*x9 + x4*x7^2 + x4*x7*x8^2*x9 + -x4*x7*x8^2 + -2*x4*x7*x8*x9 + 2*x4*x7*x8 + x4*x7*x9 + -x4*x7 + -x4*x8^2*x9 + x4*x8^2 + x4*x8*x9 + -x4*x8 + -x5^3*x6*x7*x8*x9 + x5^3*x6*x7*x8 + x5^3*x6*x7*x9 + -x5^3*x6*x7 + x5^3*x6*x8*x9 + -x5^3*x6*x8 + -x5^3*x6*x9 + x5^3*x6 + x5^3*x7*x8*x9 + -x5^3*x7*x8 + -x5^3*x7*x9 + x5^3*x7 + -x5^3*x8*x9 + x5^3*x8 + x5^3*x9 + -x5^3 + -x5^2*x6^3*x7*x8*x9 + x5^2*x6^3*x7*x8 + x5^2*x6^3*x7*x9 + -x5^2*x6^3*x7 + x5^2*x6^3*x8*x9 + -x5^2*x6^3*x8 + -x5^2*x6^3*x9 + x5^2*x6^3 + x5^2*x6*x7*x8*x9 + -x5^2*x6*x7*x8 + -x5^2*x6*x7*x9 + x5^2*x6*x7 + -x5^2*x6*x8*x9 + x5^2*x6*x8 + x5^2*x6*x9 + -x5^2*x6 + -x5*x6*x7^2*x8*x9 + x5*x6*x7^2*x8 + x5*x6*x7^2*x9 + -x5*x6*x7^2 + -x5*x6*x7*x8^2*x9 + x5*x6*x7*x8^2 + 2*x5*x6*x7*x8*x9 + -2*x5*x6*x7*x8 + -x5*x6*x7*x9 + x5*x6*x7 + x5*x6*x8^2*x9 + -x5*x6*x8^2 + -x5*x6*x8*x9 + x5*x6*x8 + x5*x7^2*x8*x9 + -x5*x7^2*x8 + -x5*x7^2*x9 + x5*x7^2 + x5*x7*x8^2*x9 + -x5*x7*x8^2 + -2*x5*x7*x8*x9 + 2*x5*x7*x8 + x5*x7*x9 + -x5*x7 + -x5*x8^2*x9 + x5*x8^2 + x5*x8*x9 + -x5*x8 + x6^3*x7*x8*x9 + -x6^3*x7*x8 + -x6^3*x7*x9 + x6^3*x7 + -x6^3*x8*x9 + x6^3*x8 + x6^3*x9 + -x6^3 + x6*x7^2*x8*x9 + -x6*x7^2*x8 + -x6*x7^2*x9 + x6*x7^2 + x6*x7*x8^2*x9 + -x6*x7*x8^2 + -2*x6*x7*x8*x9 + 2*x6*x7*x8 + x6*x7*x9 + -x6*x7 + -x6*x8^2*x9 + x6*x8^2 + x6*x8*x9 + -x6*x8 + -x7^2*x8*x9 + x7^2*x8 + x7^2*x9 + -x7^2 + -x7*x8^2*x9 + x7*x8^2 + x7*x8*x9 + -x7*x8 + x8^2*x9 + -x8^2 + -x9 + 1; frobby-0.9.5/test/frob/bug22.opt_irr000066400000000000000000000002141401527164200172370ustar00rootroot000000000000007 9 0 3 1 1 1 2 1 1 1 0 2 1 1 2 2 1 1 1 0 2 1 1 1 3 1 1 1 0 1 1 3 1 2 1 1 1 0 1 1 2 3 1 1 1 1 0 1 1 2 1 3 1 1 1 0 1 1 1 2 3 1 1 1 11 frobby-0.9.5/test/frob/bug22.opt_irr_min000066400000000000000000000000541401527164200201040ustar00rootroot000000000000002 9 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 9 frobby-0.9.5/test/frob/bug22.opt_std000066400000000000000000000000211401527164200172310ustar00rootroot000000000000000 9 no solution. frobby-0.9.5/test/frob/bug22.opt_std_min000066400000000000000000000000211401527164200200740ustar00rootroot000000000000000 9 no solution. frobby-0.9.5/test/frob/bug22.primdecom000066400000000000000000000007631401527164200175510ustar00rootroot0000000000000026 9 0 3 0 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 2 0 0 0 2 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 1 0 0 1 2 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug22.radical000066400000000000000000000002341401527164200171620ustar00rootroot000000000000008 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug22.test000066400000000000000000000013351401527164200165450ustar00rootroot0000000000000026 9 -4 0 0 1 1 1 0 0 0 -3 -1 0 0 2 1 0 0 0 -3 0 0 2 0 2 0 -1 0 -3 1 0 0 1 2 -1 0 0 -2 -2 0 0 0 3 0 0 0 -2 -1 0 0 -1 0 2 0 0 -2 0 0 -2 0 0 1 1 0 -2 0 0 -1 -1 0 0 2 0 -2 1 0 0 0 -1 0 1 0 -2 3 0 -1 0 0 0 0 0 -1 -1 0 1 0 -1 1 0 0 -1 0 0 -1 -1 1 1 0 0 -1 0 0 -1 1 -1 0 1 0 -1 0 0 0 -2 1 0 1 0 -1 0 0 3 0 -2 0 0 0 -1 1 0 0 0 0 1 -1 0 -1 1 0 0 2 -2 0 0 0 -1 1 0 1 -1 0 0 0 0 -1 2 0 -2 1 0 0 0 0 -1 2 0 -1 -2 2 0 0 0 0 -2 0 0 1 -1 1 0 0 0 -2 0 1 0 -1 0 1 0 0 -1 0 2 1 -2 0 0 0 0 -1 1 0 0 0 0 0 0 0 0 0 -1 3 -2 0 0 0 0 0 0 0 -1 -1 0 0 1 frobby-0.9.5/test/frob/bug22.uni000066400000000000000000000002101401527164200163500ustar00rootroot00000000000000R = QQ[t]; p = 7*t^11 + -47*t^10 + 130*t^9 + -187*t^8 + 146*t^7 + -70*t^6 + 56*t^5 + -70*t^4 + 47*t^3 + -11*t^2 + -2*t + 1; frobby-0.9.5/test/frob/bug23.alexdual000066400000000000000000000001311401527164200173570ustar00rootroot000000000000005 8 0 2 3 1 3 1 2 1 0 2 3 1 1 2 2 1 0 2 2 1 3 2 1 1 0 2 1 1 2 2 2 1 0 1 2 1 3 2 2 1 frobby-0.9.5/test/frob/bug23.assoprimes000066400000000000000000000000251401527164200177470ustar00rootroot000000000000001 8 0 1 1 1 1 1 1 1 frobby-0.9.5/test/frob/bug23.dim000066400000000000000000000000021401527164200163260ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug23.euler000066400000000000000000000000031401527164200166720ustar00rootroot00000000000000-1 frobby-0.9.5/test/frob/bug23.frobInstance000066400000000000000000000000301401527164200201730ustar00rootroot0000000000000012 42 46 60 61 67 77 89 frobby-0.9.5/test/frob/bug23.frobNumber000066400000000000000000000000041401527164200176600ustar00rootroot00000000000000141 frobby-0.9.5/test/frob/bug23.intersection000066400000000000000000000004461401527164200202770ustar00rootroot0000000000000017 8 0 2 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 1 0 2 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug23.irrdecom000066400000000000000000000011471401527164200173740ustar00rootroot000000000000007 8 0 2 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 7 8 0 1 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 7 8 0 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 7 8 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 7 8 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug23.irrdecom_ideal000066400000000000000000000001311401527164200205220ustar00rootroot000000000000005 8 0 2 2 1 1 1 1 1 0 1 3 1 2 1 1 1 0 1 2 1 1 1 2 1 0 1 1 1 3 1 1 1 0 1 1 1 1 2 1 1 frobby-0.9.5/test/frob/bug23.maxstandard000066400000000000000000000000041401527164200200650ustar00rootroot000000000000000 8 frobby-0.9.5/test/frob/bug23.minimize000066400000000000000000000004461401527164200174120ustar00rootroot0000000000000017 8 0 2 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 1 0 2 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug23.multi000066400000000000000000000206251401527164200167240ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8]; p = -x2^2*x3^2*x4*x5*x6*x7*x8 + x2^2*x3^2*x4*x5*x6*x7 + x2^2*x3^2*x4*x5*x6*x8 + -x2^2*x3^2*x4*x5*x6 + x2^2*x3^2*x4*x5*x7*x8 + -x2^2*x3^2*x4*x5*x7 + -x2^2*x3^2*x4*x5*x8 + x2^2*x3^2*x4*x5 + x2^2*x3^2*x4*x6*x7*x8 + -x2^2*x3^2*x4*x6*x7 + -x2^2*x3^2*x4*x6*x8 + x2^2*x3^2*x4*x6 + -x2^2*x3^2*x4*x7*x8 + x2^2*x3^2*x4*x7 + x2^2*x3^2*x4*x8 + -x2^2*x3^2*x4 + x2^2*x3^2*x5*x6*x7*x8 + -x2^2*x3^2*x5*x6*x7 + -x2^2*x3^2*x5*x6*x8 + x2^2*x3^2*x5*x6 + -x2^2*x3^2*x5*x7*x8 + x2^2*x3^2*x5*x7 + x2^2*x3^2*x5*x8 + -x2^2*x3^2*x5 + -x2^2*x3^2*x6*x7*x8 + x2^2*x3^2*x6*x7 + x2^2*x3^2*x6*x8 + -x2^2*x3^2*x6 + x2^2*x3^2*x7*x8 + -x2^2*x3^2*x7 + -x2^2*x3^2*x8 + x2^2*x3^2 + x2^2*x4*x5*x6*x7*x8 + -x2^2*x4*x5*x6*x7 + -x2^2*x4*x5*x6*x8 + x2^2*x4*x5*x6 + -x2^2*x4*x5*x7*x8 + x2^2*x4*x5*x7 + x2^2*x4*x5*x8 + -x2^2*x4*x5 + -x2^2*x4*x6*x7*x8 + x2^2*x4*x6*x7 + x2^2*x4*x6*x8 + -x2^2*x4*x6 + x2^2*x4*x7*x8 + -x2^2*x4*x7 + -x2^2*x4*x8 + x2^2*x4 + -x2^2*x5*x6*x7*x8 + x2^2*x5*x6*x7 + x2^2*x5*x6*x8 + -x2^2*x5*x6 + x2^2*x5*x7*x8 + -x2^2*x5*x7 + -x2^2*x5*x8 + x2^2*x5 + x2^2*x6*x7*x8 + -x2^2*x6*x7 + -x2^2*x6*x8 + x2^2*x6 + -x2^2*x7*x8 + x2^2*x7 + x2^2*x8 + -x2^2 + -x2*x3^3*x4*x5^2*x6*x7*x8 + x2*x3^3*x4*x5^2*x6*x7 + x2*x3^3*x4*x5^2*x6*x8 + -x2*x3^3*x4*x5^2*x6 + x2*x3^3*x4*x5^2*x7*x8 + -x2*x3^3*x4*x5^2*x7 + -x2*x3^3*x4*x5^2*x8 + x2*x3^3*x4*x5^2 + x2*x3^3*x4*x6*x7*x8 + -x2*x3^3*x4*x6*x7 + -x2*x3^3*x4*x6*x8 + x2*x3^3*x4*x6 + -x2*x3^3*x4*x7*x8 + x2*x3^3*x4*x7 + x2*x3^3*x4*x8 + -x2*x3^3*x4 + x2*x3^3*x5^2*x6*x7*x8 + -x2*x3^3*x5^2*x6*x7 + -x2*x3^3*x5^2*x6*x8 + x2*x3^3*x5^2*x6 + -x2*x3^3*x5^2*x7*x8 + x2*x3^3*x5^2*x7 + x2*x3^3*x5^2*x8 + -x2*x3^3*x5^2 + -x2*x3^3*x6*x7*x8 + x2*x3^3*x6*x7 + x2*x3^3*x6*x8 + -x2*x3^3*x6 + x2*x3^3*x7*x8 + -x2*x3^3*x7 + -x2*x3^3*x8 + x2*x3^3 + -x2*x3^2*x4*x5*x6*x7^2*x8 + x2*x3^2*x4*x5*x6*x7^2 + 2*x2*x3^2*x4*x5*x6*x7*x8 + -2*x2*x3^2*x4*x5*x6*x7 + -x2*x3^2*x4*x5*x6*x8 + x2*x3^2*x4*x5*x6 + x2*x3^2*x4*x5*x7^2*x8 + -x2*x3^2*x4*x5*x7^2 + -2*x2*x3^2*x4*x5*x7*x8 + 2*x2*x3^2*x4*x5*x7 + x2*x3^2*x4*x5*x8 + -x2*x3^2*x4*x5 + x2*x3^2*x4*x6*x7^2*x8 + -x2*x3^2*x4*x6*x7^2 + -2*x2*x3^2*x4*x6*x7*x8 + 2*x2*x3^2*x4*x6*x7 + x2*x3^2*x4*x6*x8 + -x2*x3^2*x4*x6 + -x2*x3^2*x4*x7^2*x8 + x2*x3^2*x4*x7^2 + 2*x2*x3^2*x4*x7*x8 + -2*x2*x3^2*x4*x7 + -x2*x3^2*x4*x8 + x2*x3^2*x4 + x2*x3^2*x5*x6*x7^2*x8 + -x2*x3^2*x5*x6*x7^2 + -2*x2*x3^2*x5*x6*x7*x8 + 2*x2*x3^2*x5*x6*x7 + x2*x3^2*x5*x6*x8 + -x2*x3^2*x5*x6 + -x2*x3^2*x5*x7^2*x8 + x2*x3^2*x5*x7^2 + 2*x2*x3^2*x5*x7*x8 + -2*x2*x3^2*x5*x7 + -x2*x3^2*x5*x8 + x2*x3^2*x5 + -x2*x3^2*x6*x7^2*x8 + x2*x3^2*x6*x7^2 + 2*x2*x3^2*x6*x7*x8 + -2*x2*x3^2*x6*x7 + -x2*x3^2*x6*x8 + x2*x3^2*x6 + x2*x3^2*x7^2*x8 + -x2*x3^2*x7^2 + -2*x2*x3^2*x7*x8 + 2*x2*x3^2*x7 + x2*x3^2*x8 + -x2*x3^2 + -x2*x3*x4*x5^3*x6*x7*x8 + x2*x3*x4*x5^3*x6*x7 + x2*x3*x4*x5^3*x6*x8 + -x2*x3*x4*x5^3*x6 + x2*x3*x4*x5^3*x7*x8 + -x2*x3*x4*x5^3*x7 + -x2*x3*x4*x5^3*x8 + x2*x3*x4*x5^3 + x2*x3*x4*x5^2*x6*x7*x8 + -x2*x3*x4*x5^2*x6*x7 + -x2*x3*x4*x5^2*x6*x8 + x2*x3*x4*x5^2*x6 + -x2*x3*x4*x5^2*x7*x8 + x2*x3*x4*x5^2*x7 + x2*x3*x4*x5^2*x8 + -x2*x3*x4*x5^2 + -x2*x3*x4*x5*x6^2*x7*x8 + x2*x3*x4*x5*x6^2*x7 + x2*x3*x4*x5*x6^2*x8 + -x2*x3*x4*x5*x6^2 + x2*x3*x4*x5*x6*x7*x8 + -x2*x3*x4*x5*x6*x7 + -x2*x3*x4*x5*x6*x8 + x2*x3*x4*x5*x6 + x2*x3*x4*x6^2*x7*x8 + -x2*x3*x4*x6^2*x7 + -x2*x3*x4*x6^2*x8 + x2*x3*x4*x6^2 + -x2*x3*x4*x6*x7*x8 + x2*x3*x4*x6*x7 + x2*x3*x4*x6*x8 + -x2*x3*x4*x6 + x2*x3*x5^3*x6*x7*x8 + -x2*x3*x5^3*x6*x7 + -x2*x3*x5^3*x6*x8 + x2*x3*x5^3*x6 + -x2*x3*x5^3*x7*x8 + x2*x3*x5^3*x7 + x2*x3*x5^3*x8 + -x2*x3*x5^3 + -x2*x3*x5^2*x6*x7*x8 + x2*x3*x5^2*x6*x7 + x2*x3*x5^2*x6*x8 + -x2*x3*x5^2*x6 + x2*x3*x5^2*x7*x8 + -x2*x3*x5^2*x7 + -x2*x3*x5^2*x8 + x2*x3*x5^2 + x2*x3*x5*x6^2*x7*x8 + -x2*x3*x5*x6^2*x7 + -x2*x3*x5*x6^2*x8 + x2*x3*x5*x6^2 + -x2*x3*x5*x6*x7*x8 + x2*x3*x5*x6*x7 + x2*x3*x5*x6*x8 + -x2*x3*x5*x6 + -x2*x3*x6^2*x7*x8 + x2*x3*x6^2*x7 + x2*x3*x6^2*x8 + -x2*x3*x6^2 + x2*x3*x6*x7*x8 + -x2*x3*x6*x7 + -x2*x3*x6*x8 + x2*x3*x6 + x2*x4*x5^3*x6*x7*x8 + -x2*x4*x5^3*x6*x7 + -x2*x4*x5^3*x6*x8 + x2*x4*x5^3*x6 + -x2*x4*x5^3*x7*x8 + x2*x4*x5^3*x7 + x2*x4*x5^3*x8 + -x2*x4*x5^3 + x2*x4*x5*x6^2*x7*x8 + -x2*x4*x5*x6^2*x7 + -x2*x4*x5*x6^2*x8 + x2*x4*x5*x6^2 + x2*x4*x5*x6*x7^2*x8 + -x2*x4*x5*x6*x7^2 + -3*x2*x4*x5*x6*x7*x8 + 3*x2*x4*x5*x6*x7 + 2*x2*x4*x5*x6*x8 + -2*x2*x4*x5*x6 + -x2*x4*x5*x7^2*x8 + x2*x4*x5*x7^2 + 2*x2*x4*x5*x7*x8 + -2*x2*x4*x5*x7 + -x2*x4*x5*x8 + x2*x4*x5 + -x2*x4*x6^2*x7*x8 + x2*x4*x6^2*x7 + x2*x4*x6^2*x8 + -x2*x4*x6^2 + -x2*x4*x6*x7^2*x8 + x2*x4*x6*x7^2 + 2*x2*x4*x6*x7*x8 + -2*x2*x4*x6*x7 + -x2*x4*x6*x8 + x2*x4*x6 + x2*x4*x7^2*x8 + -x2*x4*x7^2 + -x2*x4*x7*x8 + x2*x4*x7 + -x2*x5^3*x6*x7*x8 + x2*x5^3*x6*x7 + x2*x5^3*x6*x8 + -x2*x5^3*x6 + x2*x5^3*x7*x8 + -x2*x5^3*x7 + -x2*x5^3*x8 + x2*x5^3 + -x2*x5*x6^2*x7*x8 + x2*x5*x6^2*x7 + x2*x5*x6^2*x8 + -x2*x5*x6^2 + -x2*x5*x6*x7^2*x8 + x2*x5*x6*x7^2 + 3*x2*x5*x6*x7*x8 + -3*x2*x5*x6*x7 + -2*x2*x5*x6*x8 + 2*x2*x5*x6 + x2*x5*x7^2*x8 + -x2*x5*x7^2 + -2*x2*x5*x7*x8 + 2*x2*x5*x7 + x2*x5*x8 + -x2*x5 + x2*x6^2*x7*x8 + -x2*x6^2*x7 + -x2*x6^2*x8 + x2*x6^2 + x2*x6*x7^2*x8 + -x2*x6*x7^2 + -2*x2*x6*x7*x8 + 2*x2*x6*x7 + x2*x6*x8 + -x2*x6 + -x2*x7^2*x8 + x2*x7^2 + x2*x7*x8 + -x2*x7 + x3^3*x4*x5^2*x6*x7*x8 + -x3^3*x4*x5^2*x6*x7 + -x3^3*x4*x5^2*x6*x8 + x3^3*x4*x5^2*x6 + -x3^3*x4*x5^2*x7*x8 + x3^3*x4*x5^2*x7 + x3^3*x4*x5^2*x8 + -x3^3*x4*x5^2 + -x3^3*x4*x6*x7*x8 + x3^3*x4*x6*x7 + x3^3*x4*x6*x8 + -x3^3*x4*x6 + x3^3*x4*x7*x8 + -x3^3*x4*x7 + -x3^3*x4*x8 + x3^3*x4 + -x3^3*x5^2*x6*x7*x8 + x3^3*x5^2*x6*x7 + x3^3*x5^2*x6*x8 + -x3^3*x5^2*x6 + x3^3*x5^2*x7*x8 + -x3^3*x5^2*x7 + -x3^3*x5^2*x8 + x3^3*x5^2 + x3^3*x6*x7*x8 + -x3^3*x6*x7 + -x3^3*x6*x8 + x3^3*x6 + -x3^3*x7*x8 + x3^3*x7 + x3^3*x8 + -x3^3 + x3^2*x4*x5*x6*x7^2*x8 + -x3^2*x4*x5*x6*x7^2 + -x3^2*x4*x5*x6*x7*x8 + x3^2*x4*x5*x6*x7 + -x3^2*x4*x5*x7^2*x8 + x3^2*x4*x5*x7^2 + x3^2*x4*x5*x7*x8 + -x3^2*x4*x5*x7 + -x3^2*x4*x6*x7^2*x8 + x3^2*x4*x6*x7^2 + x3^2*x4*x6*x7*x8 + -x3^2*x4*x6*x7 + x3^2*x4*x7^2*x8 + -x3^2*x4*x7^2 + -x3^2*x4*x7*x8 + x3^2*x4*x7 + -x3^2*x5*x6*x7^2*x8 + x3^2*x5*x6*x7^2 + x3^2*x5*x6*x7*x8 + -x3^2*x5*x6*x7 + x3^2*x5*x7^2*x8 + -x3^2*x5*x7^2 + -x3^2*x5*x7*x8 + x3^2*x5*x7 + x3^2*x6*x7^2*x8 + -x3^2*x6*x7^2 + -x3^2*x6*x7*x8 + x3^2*x6*x7 + -x3^2*x7^2*x8 + x3^2*x7^2 + x3^2*x7*x8 + -x3^2*x7 + x3*x4*x5^3*x6*x7*x8 + -x3*x4*x5^3*x6*x7 + -x3*x4*x5^3*x6*x8 + x3*x4*x5^3*x6 + -x3*x4*x5^3*x7*x8 + x3*x4*x5^3*x7 + x3*x4*x5^3*x8 + -x3*x4*x5^3 + -x3*x4*x5^2*x6*x7*x8 + x3*x4*x5^2*x6*x7 + x3*x4*x5^2*x6*x8 + -x3*x4*x5^2*x6 + x3*x4*x5^2*x7*x8 + -x3*x4*x5^2*x7 + -x3*x4*x5^2*x8 + x3*x4*x5^2 + x3*x4*x5*x6^2*x7*x8 + -x3*x4*x5*x6^2*x7 + -x3*x4*x5*x6^2*x8 + x3*x4*x5*x6^2 + -x3*x4*x5*x6*x7*x8 + x3*x4*x5*x6*x7 + x3*x4*x5*x6*x8 + -x3*x4*x5*x6 + -x3*x4*x6^2*x7*x8 + x3*x4*x6^2*x7 + x3*x4*x6^2*x8 + -x3*x4*x6^2 + x3*x4*x6*x7*x8 + -x3*x4*x6*x7 + -x3*x4*x6*x8 + x3*x4*x6 + -x3*x5^3*x6*x7*x8 + x3*x5^3*x6*x7 + x3*x5^3*x6*x8 + -x3*x5^3*x6 + x3*x5^3*x7*x8 + -x3*x5^3*x7 + -x3*x5^3*x8 + x3*x5^3 + x3*x5^2*x6*x7*x8 + -x3*x5^2*x6*x7 + -x3*x5^2*x6*x8 + x3*x5^2*x6 + -x3*x5^2*x7*x8 + x3*x5^2*x7 + x3*x5^2*x8 + -x3*x5^2 + -x3*x5*x6^2*x7*x8 + x3*x5*x6^2*x7 + x3*x5*x6^2*x8 + -x3*x5*x6^2 + x3*x5*x6*x7*x8 + -x3*x5*x6*x7 + -x3*x5*x6*x8 + x3*x5*x6 + x3*x6^2*x7*x8 + -x3*x6^2*x7 + -x3*x6^2*x8 + x3*x6^2 + -x3*x6*x7*x8 + x3*x6*x7 + x3*x6*x8 + -x3*x6 + -x4*x5^3*x6*x7*x8 + x4*x5^3*x6*x7 + x4*x5^3*x6*x8 + -x4*x5^3*x6 + x4*x5^3*x7*x8 + -x4*x5^3*x7 + -x4*x5^3*x8 + x4*x5^3 + -x4*x5*x6^2*x7*x8 + x4*x5*x6^2*x7 + x4*x5*x6^2*x8 + -x4*x5*x6^2 + -x4*x5*x6*x7^2*x8 + x4*x5*x6*x7^2 + 2*x4*x5*x6*x7*x8 + -2*x4*x5*x6*x7 + -x4*x5*x6*x8 + x4*x5*x6 + x4*x5*x7^2*x8 + -x4*x5*x7^2 + -x4*x5*x7*x8 + x4*x5*x7 + x4*x6^2*x7*x8 + -x4*x6^2*x7 + -x4*x6^2*x8 + x4*x6^2 + x4*x6*x7^2*x8 + -x4*x6*x7^2 + -x4*x6*x7*x8 + x4*x6*x7 + -x4*x7^2*x8 + x4*x7^2 + x4*x8 + -x4 + x5^3*x6*x7*x8 + -x5^3*x6*x7 + -x5^3*x6*x8 + x5^3*x6 + -x5^3*x7*x8 + x5^3*x7 + x5^3*x8 + -x5^3 + x5*x6^2*x7*x8 + -x5*x6^2*x7 + -x5*x6^2*x8 + x5*x6^2 + x5*x6*x7^2*x8 + -x5*x6*x7^2 + -2*x5*x6*x7*x8 + 2*x5*x6*x7 + x5*x6*x8 + -x5*x6 + -x5*x7^2*x8 + x5*x7^2 + x5*x7*x8 + -x5*x7 + -x6^2*x7*x8 + x6^2*x7 + x6^2*x8 + -x6^2 + -x6*x7^2*x8 + x6*x7^2 + x6*x7*x8 + -x6*x7 + x7^2*x8 + -x7^2 + -x8 + 1; frobby-0.9.5/test/frob/bug23.opt_irr000066400000000000000000000000301401527164200172340ustar00rootroot000000000000001 8 0 1 3 1 2 1 1 1 10 frobby-0.9.5/test/frob/bug23.opt_irr_min000066400000000000000000000000271401527164200201050ustar00rootroot000000000000001 8 0 1 1 1 1 2 1 1 8 frobby-0.9.5/test/frob/bug23.opt_std000066400000000000000000000000211401527164200172320ustar00rootroot000000000000000 8 no solution. frobby-0.9.5/test/frob/bug23.opt_std_min000066400000000000000000000000211401527164200200750ustar00rootroot000000000000000 8 no solution. frobby-0.9.5/test/frob/bug23.primdecom000066400000000000000000000004461401527164200175500ustar00rootroot0000000000000017 8 0 2 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 1 0 2 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug23.radical000066400000000000000000000001731401527164200171650ustar00rootroot000000000000007 8 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug23.test000066400000000000000000000006601401527164200165460ustar00rootroot0000000000000017 8 -14 0 1 0 2 0 0 0 -12 0 0 0 0 1 1 0 -9 0 -1 0 0 0 2 0 -9 0 2 0 -1 0 1 0 -8 -1 0 0 1 0 1 0 -8 -1 3 0 0 0 0 0 -7 2 0 0 0 0 0 0 -5 0 -1 0 3 0 -1 0 -5 0 0 1 0 0 0 0 -4 1 0 0 -1 1 0 0 -3 0 -2 0 1 1 0 0 -3 0 1 0 0 1 -1 0 -3 1 0 0 1 -1 0 0 -1 0 0 0 -2 2 0 0 -1 0 0 0 0 0 -1 1 -1 1 -1 0 -1 0 1 0 -1 1 2 0 -2 0 0 0 frobby-0.9.5/test/frob/bug23.uni000066400000000000000000000001521401527164200163560ustar00rootroot00000000000000R = QQ[t]; p = -t^10 + 2*t^9 + 9*t^8 + -36*t^7 + 42*t^6 + -42*t^4 + 36*t^3 + -9*t^2 + -2*t + 1; frobby-0.9.5/test/frob/bug24.alexdual000066400000000000000000000001001401527164200173540ustar00rootroot000000000000004 7 0 6 2 1 1 1 1 0 6 1 1 1 2 1 0 3 1 1 1 3 1 0 1 2 1 1 3 1 frobby-0.9.5/test/frob/bug24.assoprimes000066400000000000000000000000231401527164200177460ustar00rootroot000000000000001 7 0 1 1 1 1 1 1 frobby-0.9.5/test/frob/bug24.dim000066400000000000000000000000021401527164200163270ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug24.euler000066400000000000000000000000021401527164200166720ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug24.frobInstance000066400000000000000000000000261401527164200202010ustar00rootroot0000000000000018 29 45 54 74 86 101 frobby-0.9.5/test/frob/bug24.frobNumber000066400000000000000000000000041401527164200176610ustar00rootroot00000000000000183 frobby-0.9.5/test/frob/bug24.intersection000066400000000000000000000002131401527164200202700ustar00rootroot000000000000009 7 0 7 0 0 0 0 0 0 5 1 0 0 0 0 0 2 0 0 0 1 0 0 0 2 0 0 0 0 0 0 1 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug24.irrdecom000066400000000000000000000005701401527164200173740ustar00rootroot000000000000006 7 0 7 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 5 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 6 7 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 6 7 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug24.irrdecom_ideal000066400000000000000000000001001401527164200205170ustar00rootroot000000000000004 7 0 7 1 1 1 1 1 0 5 2 1 1 1 1 0 2 2 1 1 2 1 0 2 1 1 1 3 1 frobby-0.9.5/test/frob/bug24.maxstandard000066400000000000000000000000041401527164200200660ustar00rootroot000000000000000 7 frobby-0.9.5/test/frob/bug24.minimize000066400000000000000000000002131401527164200174030ustar00rootroot000000000000009 7 0 7 0 0 0 0 0 0 5 1 0 0 0 0 0 2 0 0 0 1 0 0 0 2 0 0 0 0 0 0 1 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug24.multi000066400000000000000000000053311401527164200167220ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7]; p = x2^7*x3*x4*x5*x6*x7 + -x2^7*x3*x4*x5*x6 + -x2^7*x3*x4*x5*x7 + x2^7*x3*x4*x5 + -x2^7*x3*x4*x6*x7 + x2^7*x3*x4*x6 + x2^7*x3*x4*x7 + -x2^7*x3*x4 + -x2^7*x3*x5*x6*x7 + x2^7*x3*x5*x6 + x2^7*x3*x5*x7 + -x2^7*x3*x5 + x2^7*x3*x6*x7 + -x2^7*x3*x6 + -x2^7*x3*x7 + x2^7*x3 + -x2^7*x4*x5*x6*x7 + x2^7*x4*x5*x6 + x2^7*x4*x5*x7 + -x2^7*x4*x5 + x2^7*x4*x6*x7 + -x2^7*x4*x6 + -x2^7*x4*x7 + x2^7*x4 + x2^7*x5*x6*x7 + -x2^7*x5*x6 + -x2^7*x5*x7 + x2^7*x5 + -x2^7*x6*x7 + x2^7*x6 + x2^7*x7 + -x2^7 + x2^5*x3^2*x4*x5*x6*x7 + -x2^5*x3^2*x4*x5*x6 + -x2^5*x3^2*x4*x5*x7 + x2^5*x3^2*x4*x5 + -x2^5*x3^2*x4*x6*x7 + x2^5*x3^2*x4*x6 + x2^5*x3^2*x4*x7 + -x2^5*x3^2*x4 + -x2^5*x3^2*x5*x6*x7 + x2^5*x3^2*x5*x6 + x2^5*x3^2*x5*x7 + -x2^5*x3^2*x5 + x2^5*x3^2*x6*x7 + -x2^5*x3^2*x6 + -x2^5*x3^2*x7 + x2^5*x3^2 + -x2^5*x3*x4*x5*x6*x7 + x2^5*x3*x4*x5*x6 + x2^5*x3*x4*x5*x7 + -x2^5*x3*x4*x5 + x2^5*x3*x4*x6*x7 + -x2^5*x3*x4*x6 + -x2^5*x3*x4*x7 + x2^5*x3*x4 + x2^5*x3*x5*x6*x7 + -x2^5*x3*x5*x6 + -x2^5*x3*x5*x7 + x2^5*x3*x5 + -x2^5*x3*x6*x7 + x2^5*x3*x6 + x2^5*x3*x7 + -x2^5*x3 + x2^2*x3^2*x4*x5*x6^2*x7 + -x2^2*x3^2*x4*x5*x6^2 + -x2^2*x3^2*x4*x5*x6*x7 + x2^2*x3^2*x4*x5*x6 + -x2^2*x3^2*x4*x6^2*x7 + x2^2*x3^2*x4*x6^2 + x2^2*x3^2*x4*x6*x7 + -x2^2*x3^2*x4*x6 + -x2^2*x3^2*x5*x6^2*x7 + x2^2*x3^2*x5*x6^2 + x2^2*x3^2*x5*x6*x7 + -x2^2*x3^2*x5*x6 + x2^2*x3^2*x6^2*x7 + -x2^2*x3^2*x6^2 + -x2^2*x3^2*x6*x7 + x2^2*x3^2*x6 + x2^2*x3*x4*x5*x6^3*x7 + -x2^2*x3*x4*x5*x6^3 + -x2^2*x3*x4*x5*x6^2*x7 + x2^2*x3*x4*x5*x6^2 + -x2^2*x3*x4*x6^3*x7 + x2^2*x3*x4*x6^3 + x2^2*x3*x4*x6^2*x7 + -x2^2*x3*x4*x6^2 + -x2^2*x3*x5*x6^3*x7 + x2^2*x3*x5*x6^3 + x2^2*x3*x5*x6^2*x7 + -x2^2*x3*x5*x6^2 + x2^2*x3*x6^3*x7 + -x2^2*x3*x6^3 + -x2^2*x3*x6^2*x7 + x2^2*x3*x6^2 + -x2^2*x4*x5*x6^3*x7 + x2^2*x4*x5*x6^3 + x2^2*x4*x5*x6*x7 + -x2^2*x4*x5*x6 + x2^2*x4*x6^3*x7 + -x2^2*x4*x6^3 + -x2^2*x4*x6*x7 + x2^2*x4*x6 + x2^2*x5*x6^3*x7 + -x2^2*x5*x6^3 + -x2^2*x5*x6*x7 + x2^2*x5*x6 + -x2^2*x6^3*x7 + x2^2*x6^3 + x2^2*x6*x7 + -x2^2*x6 + -x3^2*x4*x5*x6^2*x7 + x3^2*x4*x5*x6^2 + x3^2*x4*x5*x7 + -x3^2*x4*x5 + x3^2*x4*x6^2*x7 + -x3^2*x4*x6^2 + -x3^2*x4*x7 + x3^2*x4 + x3^2*x5*x6^2*x7 + -x3^2*x5*x6^2 + -x3^2*x5*x7 + x3^2*x5 + -x3^2*x6^2*x7 + x3^2*x6^2 + x3^2*x7 + -x3^2 + -x3*x4*x5*x6^3*x7 + x3*x4*x5*x6^3 + x3*x4*x5*x6^2*x7 + -x3*x4*x5*x6^2 + x3*x4*x6^3*x7 + -x3*x4*x6^3 + -x3*x4*x6^2*x7 + x3*x4*x6^2 + x3*x5*x6^3*x7 + -x3*x5*x6^3 + -x3*x5*x6^2*x7 + x3*x5*x6^2 + -x3*x6^3*x7 + x3*x6^3 + x3*x6^2*x7 + -x3*x6^2 + x4*x5*x6^3*x7 + -x4*x5*x6^3 + -x4*x5*x7 + x4*x5 + -x4*x6^3*x7 + x4*x6^3 + x4*x7 + -x4 + -x5*x6^3*x7 + x5*x6^3 + x5*x7 + -x5 + x6^3*x7 + -x6^3 + -x7 + 1; frobby-0.9.5/test/frob/bug24.opt_irr000066400000000000000000000000261401527164200172420ustar00rootroot000000000000001 7 0 7 1 1 1 1 1 12 frobby-0.9.5/test/frob/bug24.opt_irr_min000066400000000000000000000000441401527164200201050ustar00rootroot000000000000002 7 0 2 2 1 1 2 1 0 2 1 1 1 3 1 9 frobby-0.9.5/test/frob/bug24.opt_std000066400000000000000000000000211401527164200172330ustar00rootroot000000000000000 7 no solution. frobby-0.9.5/test/frob/bug24.opt_std_min000066400000000000000000000000211401527164200200760ustar00rootroot000000000000000 7 no solution. frobby-0.9.5/test/frob/bug24.primdecom000066400000000000000000000002131401527164200175410ustar00rootroot000000000000009 7 0 7 0 0 0 0 0 0 5 1 0 0 0 0 0 2 0 0 0 1 0 0 0 2 0 0 0 0 0 0 1 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug24.radical000066400000000000000000000001361401527164200171650ustar00rootroot000000000000006 7 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug24.test000066400000000000000000000003121401527164200165410ustar00rootroot000000000000009 7 -8 2 0 0 0 1 0 -7 -3 -1 0 0 3 0 -5 0 2 0 0 0 0 -4 -5 1 0 0 2 0 -4 -1 0 0 0 0 1 -4 7 -1 0 0 -1 0 -3 0 0 1 0 0 0 -1 5 1 0 0 -2 0 0 -1 -1 0 1 0 0 frobby-0.9.5/test/frob/bug24.uni000066400000000000000000000002051401527164200163560ustar00rootroot00000000000000R = QQ[t]; p = t^12 + -4*t^11 + 5*t^10 + 2*t^9 + -14*t^8 + 17*t^7 + -3*t^6 + -11*t^5 + 8*t^4 + -t^3 + 2*t^2 + -3*t + 1; frobby-0.9.5/test/frob/bug26.alexdual000066400000000000000000000011451401527164200173700ustar00rootroot0000000000000032 9 0 7 4 3 3 2 1 2 2 0 7 4 3 2 1 3 2 2 0 7 4 2 3 3 2 2 1 0 7 4 1 3 3 3 2 1 0 7 4 1 3 3 2 2 2 0 7 4 1 2 2 3 2 2 0 7 3 3 3 3 3 1 1 0 7 3 3 3 3 2 2 1 0 7 3 3 3 3 2 1 2 0 7 3 3 3 1 2 2 2 0 7 3 3 2 3 2 2 2 0 7 3 3 2 2 3 2 2 0 7 3 2 3 3 1 2 2 0 7 3 2 2 3 3 2 2 0 7 2 3 3 2 2 2 2 0 7 2 3 3 1 3 2 2 0 7 2 2 3 3 3 2 1 0 7 2 2 3 3 3 1 2 0 7 1 1 3 3 3 2 2 0 6 4 3 3 3 3 1 1 0 6 4 3 2 3 2 2 2 0 6 4 3 1 2 3 2 2 0 6 4 2 3 3 2 2 2 0 5 4 3 3 3 3 1 2 0 5 4 2 3 3 3 2 1 0 5 4 2 2 2 3 2 2 0 5 4 1 3 2 3 2 2 0 5 4 1 2 3 3 2 2 0 4 4 3 2 3 3 2 2 0 4 4 1 3 3 3 2 2 0 3 4 2 3 3 3 2 2 0 1 4 3 3 3 3 2 2 frobby-0.9.5/test/frob/bug26.assoprimes000066400000000000000000000000271401527164200177540ustar00rootroot000000000000001 9 0 1 1 1 1 1 1 1 1 frobby-0.9.5/test/frob/bug26.dim000066400000000000000000000000021401527164200163310ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug26.euler000066400000000000000000000000021401527164200166740ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug26.frobInstance000066400000000000000000000000441401527164200202030ustar00rootroot00000000000000112 490 593 666 794 869 934 955 971 frobby-0.9.5/test/frob/bug26.frobNumber000066400000000000000000000000051401527164200176640ustar00rootroot000000000000003197 frobby-0.9.5/test/frob/bug26.intersection000066400000000000000000000024211401527164200202750ustar00rootroot0000000000000068 9 0 7 0 0 0 0 0 0 0 0 5 0 1 0 0 0 0 0 0 4 0 2 0 0 0 0 0 0 4 0 0 1 0 0 0 0 0 3 0 1 1 0 0 0 0 0 3 0 0 0 1 0 0 0 0 3 0 0 0 0 0 1 0 0 3 0 0 0 0 0 0 1 0 2 0 0 2 0 0 0 0 0 2 0 0 0 0 1 0 0 0 2 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 1 0 2 1 1 0 0 0 0 1 0 2 0 0 1 0 0 0 1 0 2 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 2 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 4 0 0 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 3 0 0 0 1 0 0 0 0 3 0 0 0 0 1 0 0 0 3 0 0 0 0 0 1 0 0 2 1 0 0 1 0 0 0 0 2 0 1 0 0 0 0 0 0 2 0 0 2 1 0 0 0 0 2 0 0 0 2 0 0 0 0 2 0 0 0 1 1 0 0 0 2 0 0 0 1 0 1 0 0 2 0 0 0 0 1 1 0 0 1 2 1 0 0 0 0 0 0 1 2 0 0 1 0 0 0 0 1 2 0 0 0 0 1 0 0 1 1 0 1 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 0 2 0 0 0 0 0 0 1 0 1 2 0 0 0 0 0 1 0 0 1 2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 0 0 2 0 0 0 0 0 2 0 0 1 0 1 0 0 0 2 0 0 0 1 0 0 0 0 1 2 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 2 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 3 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 2 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug26.irrdecom000066400000000000000000000116001401527164200173720ustar00rootroot000000000000008 9 0 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug26.irrdecom_ideal000066400000000000000000000011451401527164200205330ustar00rootroot0000000000000032 9 0 7 1 1 1 1 1 1 1 0 5 1 2 1 1 1 1 1 0 4 1 3 1 1 1 1 1 0 4 1 1 2 1 1 1 1 0 3 1 3 2 1 1 1 1 0 3 1 3 1 2 1 1 1 0 3 1 2 2 2 1 1 1 0 3 1 2 1 1 1 1 2 0 3 1 1 1 1 1 2 1 0 2 1 2 1 1 2 1 1 0 2 1 1 3 2 1 1 1 0 2 1 1 2 1 2 1 1 0 2 1 1 1 1 1 2 2 0 1 4 3 1 1 1 1 1 0 1 3 2 1 1 1 2 1 0 1 3 2 1 1 1 1 2 0 1 3 1 1 3 1 1 1 0 1 3 1 1 2 2 1 1 0 1 2 2 2 1 1 1 1 0 1 2 2 1 1 3 1 1 0 1 2 1 2 2 1 1 1 0 1 2 1 2 1 2 1 1 0 1 2 1 1 3 2 1 1 0 1 2 1 1 1 2 2 1 0 1 2 1 1 1 2 1 2 0 1 2 1 1 1 1 2 2 0 1 1 3 2 2 1 1 1 0 1 1 3 1 1 2 1 1 0 1 1 3 1 1 1 1 2 0 1 1 2 1 1 2 1 2 0 1 1 1 2 3 1 1 1 0 1 1 1 1 2 3 1 1 frobby-0.9.5/test/frob/bug26.maxstandard000066400000000000000000000000041401527164200200700ustar00rootroot000000000000000 9 frobby-0.9.5/test/frob/bug26.minimize000066400000000000000000000024211401527164200174100ustar00rootroot0000000000000068 9 0 7 0 0 0 0 0 0 0 0 5 0 1 0 0 0 0 0 0 4 0 2 0 0 0 0 0 0 4 0 0 1 0 0 0 0 0 3 0 1 1 0 0 0 0 0 3 0 0 0 1 0 0 0 0 3 0 0 0 0 0 1 0 0 3 0 0 0 0 0 0 1 0 2 0 0 2 0 0 0 0 0 2 0 0 0 0 1 0 0 0 2 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 1 0 2 1 1 0 0 0 0 1 0 2 0 0 1 0 0 0 1 0 2 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 2 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 4 0 0 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 3 0 0 0 1 0 0 0 0 3 0 0 0 0 1 0 0 0 3 0 0 0 0 0 1 0 0 2 1 0 0 1 0 0 0 0 2 0 1 0 0 0 0 0 0 2 0 0 2 1 0 0 0 0 2 0 0 0 2 0 0 0 0 2 0 0 0 1 1 0 0 0 2 0 0 0 1 0 1 0 0 2 0 0 0 0 1 1 0 0 1 2 1 0 0 0 0 0 0 1 2 0 0 1 0 0 0 0 1 2 0 0 0 0 1 0 0 1 1 0 1 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 0 2 0 0 0 0 0 0 1 0 1 2 0 0 0 0 0 1 0 0 1 2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 0 0 2 0 0 0 0 0 2 0 0 1 0 1 0 0 0 2 0 0 0 1 0 0 0 0 1 2 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 2 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 3 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 2 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug26.multi000066400000000000000000003040631401527164200167300ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8, x9]; p = x2^7*x3*x4*x5*x6*x7*x8*x9 + -x2^7*x3*x4*x5*x6*x7*x8 + -x2^7*x3*x4*x5*x6*x7*x9 + x2^7*x3*x4*x5*x6*x7 + -x2^7*x3*x4*x5*x6*x8*x9 + x2^7*x3*x4*x5*x6*x8 + x2^7*x3*x4*x5*x6*x9 + -x2^7*x3*x4*x5*x6 + -x2^7*x3*x4*x5*x7*x8*x9 + x2^7*x3*x4*x5*x7*x8 + x2^7*x3*x4*x5*x7*x9 + -x2^7*x3*x4*x5*x7 + x2^7*x3*x4*x5*x8*x9 + -x2^7*x3*x4*x5*x8 + -x2^7*x3*x4*x5*x9 + x2^7*x3*x4*x5 + -x2^7*x3*x4*x6*x7*x8*x9 + x2^7*x3*x4*x6*x7*x8 + x2^7*x3*x4*x6*x7*x9 + -x2^7*x3*x4*x6*x7 + x2^7*x3*x4*x6*x8*x9 + -x2^7*x3*x4*x6*x8 + -x2^7*x3*x4*x6*x9 + x2^7*x3*x4*x6 + x2^7*x3*x4*x7*x8*x9 + -x2^7*x3*x4*x7*x8 + -x2^7*x3*x4*x7*x9 + x2^7*x3*x4*x7 + -x2^7*x3*x4*x8*x9 + x2^7*x3*x4*x8 + x2^7*x3*x4*x9 + -x2^7*x3*x4 + -x2^7*x3*x5*x6*x7*x8*x9 + x2^7*x3*x5*x6*x7*x8 + x2^7*x3*x5*x6*x7*x9 + -x2^7*x3*x5*x6*x7 + x2^7*x3*x5*x6*x8*x9 + -x2^7*x3*x5*x6*x8 + -x2^7*x3*x5*x6*x9 + x2^7*x3*x5*x6 + x2^7*x3*x5*x7*x8*x9 + -x2^7*x3*x5*x7*x8 + -x2^7*x3*x5*x7*x9 + x2^7*x3*x5*x7 + -x2^7*x3*x5*x8*x9 + x2^7*x3*x5*x8 + x2^7*x3*x5*x9 + -x2^7*x3*x5 + x2^7*x3*x6*x7*x8*x9 + -x2^7*x3*x6*x7*x8 + -x2^7*x3*x6*x7*x9 + x2^7*x3*x6*x7 + -x2^7*x3*x6*x8*x9 + x2^7*x3*x6*x8 + x2^7*x3*x6*x9 + -x2^7*x3*x6 + -x2^7*x3*x7*x8*x9 + x2^7*x3*x7*x8 + x2^7*x3*x7*x9 + -x2^7*x3*x7 + x2^7*x3*x8*x9 + -x2^7*x3*x8 + -x2^7*x3*x9 + x2^7*x3 + -x2^7*x4*x5*x6*x7*x8*x9 + x2^7*x4*x5*x6*x7*x8 + x2^7*x4*x5*x6*x7*x9 + -x2^7*x4*x5*x6*x7 + x2^7*x4*x5*x6*x8*x9 + -x2^7*x4*x5*x6*x8 + -x2^7*x4*x5*x6*x9 + x2^7*x4*x5*x6 + x2^7*x4*x5*x7*x8*x9 + -x2^7*x4*x5*x7*x8 + -x2^7*x4*x5*x7*x9 + x2^7*x4*x5*x7 + -x2^7*x4*x5*x8*x9 + x2^7*x4*x5*x8 + x2^7*x4*x5*x9 + -x2^7*x4*x5 + x2^7*x4*x6*x7*x8*x9 + -x2^7*x4*x6*x7*x8 + -x2^7*x4*x6*x7*x9 + x2^7*x4*x6*x7 + -x2^7*x4*x6*x8*x9 + x2^7*x4*x6*x8 + x2^7*x4*x6*x9 + -x2^7*x4*x6 + -x2^7*x4*x7*x8*x9 + x2^7*x4*x7*x8 + x2^7*x4*x7*x9 + -x2^7*x4*x7 + x2^7*x4*x8*x9 + -x2^7*x4*x8 + -x2^7*x4*x9 + x2^7*x4 + x2^7*x5*x6*x7*x8*x9 + -x2^7*x5*x6*x7*x8 + -x2^7*x5*x6*x7*x9 + x2^7*x5*x6*x7 + -x2^7*x5*x6*x8*x9 + x2^7*x5*x6*x8 + x2^7*x5*x6*x9 + -x2^7*x5*x6 + -x2^7*x5*x7*x8*x9 + x2^7*x5*x7*x8 + x2^7*x5*x7*x9 + -x2^7*x5*x7 + x2^7*x5*x8*x9 + -x2^7*x5*x8 + -x2^7*x5*x9 + x2^7*x5 + -x2^7*x6*x7*x8*x9 + x2^7*x6*x7*x8 + x2^7*x6*x7*x9 + -x2^7*x6*x7 + x2^7*x6*x8*x9 + -x2^7*x6*x8 + -x2^7*x6*x9 + x2^7*x6 + x2^7*x7*x8*x9 + -x2^7*x7*x8 + -x2^7*x7*x9 + x2^7*x7 + -x2^7*x8*x9 + x2^7*x8 + x2^7*x9 + -x2^7 + x2^5*x3*x4^2*x5*x6*x7*x8*x9 + -x2^5*x3*x4^2*x5*x6*x7*x8 + -x2^5*x3*x4^2*x5*x6*x7*x9 + x2^5*x3*x4^2*x5*x6*x7 + -x2^5*x3*x4^2*x5*x6*x8*x9 + x2^5*x3*x4^2*x5*x6*x8 + x2^5*x3*x4^2*x5*x6*x9 + -x2^5*x3*x4^2*x5*x6 + -x2^5*x3*x4^2*x5*x7*x8*x9 + x2^5*x3*x4^2*x5*x7*x8 + x2^5*x3*x4^2*x5*x7*x9 + -x2^5*x3*x4^2*x5*x7 + x2^5*x3*x4^2*x5*x8*x9 + -x2^5*x3*x4^2*x5*x8 + -x2^5*x3*x4^2*x5*x9 + x2^5*x3*x4^2*x5 + -x2^5*x3*x4^2*x6*x7*x8*x9 + x2^5*x3*x4^2*x6*x7*x8 + x2^5*x3*x4^2*x6*x7*x9 + -x2^5*x3*x4^2*x6*x7 + x2^5*x3*x4^2*x6*x8*x9 + -x2^5*x3*x4^2*x6*x8 + -x2^5*x3*x4^2*x6*x9 + x2^5*x3*x4^2*x6 + x2^5*x3*x4^2*x7*x8*x9 + -x2^5*x3*x4^2*x7*x8 + -x2^5*x3*x4^2*x7*x9 + x2^5*x3*x4^2*x7 + -x2^5*x3*x4^2*x8*x9 + x2^5*x3*x4^2*x8 + x2^5*x3*x4^2*x9 + -x2^5*x3*x4^2 + -x2^5*x3*x4*x5*x6*x7*x8*x9 + x2^5*x3*x4*x5*x6*x7*x8 + x2^5*x3*x4*x5*x6*x7*x9 + -x2^5*x3*x4*x5*x6*x7 + x2^5*x3*x4*x5*x6*x8*x9 + -x2^5*x3*x4*x5*x6*x8 + -x2^5*x3*x4*x5*x6*x9 + x2^5*x3*x4*x5*x6 + x2^5*x3*x4*x5*x7*x8*x9 + -x2^5*x3*x4*x5*x7*x8 + -x2^5*x3*x4*x5*x7*x9 + x2^5*x3*x4*x5*x7 + -x2^5*x3*x4*x5*x8*x9 + x2^5*x3*x4*x5*x8 + x2^5*x3*x4*x5*x9 + -x2^5*x3*x4*x5 + x2^5*x3*x4*x6*x7*x8*x9 + -x2^5*x3*x4*x6*x7*x8 + -x2^5*x3*x4*x6*x7*x9 + x2^5*x3*x4*x6*x7 + -x2^5*x3*x4*x6*x8*x9 + x2^5*x3*x4*x6*x8 + x2^5*x3*x4*x6*x9 + -x2^5*x3*x4*x6 + -x2^5*x3*x4*x7*x8*x9 + x2^5*x3*x4*x7*x8 + x2^5*x3*x4*x7*x9 + -x2^5*x3*x4*x7 + x2^5*x3*x4*x8*x9 + -x2^5*x3*x4*x8 + -x2^5*x3*x4*x9 + x2^5*x3*x4 + -x2^5*x4^2*x5*x6*x7*x8*x9 + x2^5*x4^2*x5*x6*x7*x8 + x2^5*x4^2*x5*x6*x7*x9 + -x2^5*x4^2*x5*x6*x7 + x2^5*x4^2*x5*x6*x8*x9 + -x2^5*x4^2*x5*x6*x8 + -x2^5*x4^2*x5*x6*x9 + x2^5*x4^2*x5*x6 + x2^5*x4^2*x5*x7*x8*x9 + -x2^5*x4^2*x5*x7*x8 + -x2^5*x4^2*x5*x7*x9 + x2^5*x4^2*x5*x7 + -x2^5*x4^2*x5*x8*x9 + x2^5*x4^2*x5*x8 + x2^5*x4^2*x5*x9 + -x2^5*x4^2*x5 + x2^5*x4^2*x6*x7*x8*x9 + -x2^5*x4^2*x6*x7*x8 + -x2^5*x4^2*x6*x7*x9 + x2^5*x4^2*x6*x7 + -x2^5*x4^2*x6*x8*x9 + x2^5*x4^2*x6*x8 + x2^5*x4^2*x6*x9 + -x2^5*x4^2*x6 + -x2^5*x4^2*x7*x8*x9 + x2^5*x4^2*x7*x8 + x2^5*x4^2*x7*x9 + -x2^5*x4^2*x7 + x2^5*x4^2*x8*x9 + -x2^5*x4^2*x8 + -x2^5*x4^2*x9 + x2^5*x4^2 + x2^5*x4*x5*x6*x7*x8*x9 + -x2^5*x4*x5*x6*x7*x8 + -x2^5*x4*x5*x6*x7*x9 + x2^5*x4*x5*x6*x7 + -x2^5*x4*x5*x6*x8*x9 + x2^5*x4*x5*x6*x8 + x2^5*x4*x5*x6*x9 + -x2^5*x4*x5*x6 + -x2^5*x4*x5*x7*x8*x9 + x2^5*x4*x5*x7*x8 + x2^5*x4*x5*x7*x9 + -x2^5*x4*x5*x7 + x2^5*x4*x5*x8*x9 + -x2^5*x4*x5*x8 + -x2^5*x4*x5*x9 + x2^5*x4*x5 + -x2^5*x4*x6*x7*x8*x9 + x2^5*x4*x6*x7*x8 + x2^5*x4*x6*x7*x9 + -x2^5*x4*x6*x7 + x2^5*x4*x6*x8*x9 + -x2^5*x4*x6*x8 + -x2^5*x4*x6*x9 + x2^5*x4*x6 + x2^5*x4*x7*x8*x9 + -x2^5*x4*x7*x8 + -x2^5*x4*x7*x9 + x2^5*x4*x7 + -x2^5*x4*x8*x9 + x2^5*x4*x8 + x2^5*x4*x9 + -x2^5*x4 + x2^4*x3*x4^3*x5*x6*x7*x8*x9 + -x2^4*x3*x4^3*x5*x6*x7*x8 + -x2^4*x3*x4^3*x5*x6*x7*x9 + x2^4*x3*x4^3*x5*x6*x7 + -x2^4*x3*x4^3*x5*x6*x8*x9 + x2^4*x3*x4^3*x5*x6*x8 + x2^4*x3*x4^3*x5*x6*x9 + -x2^4*x3*x4^3*x5*x6 + -x2^4*x3*x4^3*x5*x7*x8*x9 + x2^4*x3*x4^3*x5*x7*x8 + x2^4*x3*x4^3*x5*x7*x9 + -x2^4*x3*x4^3*x5*x7 + x2^4*x3*x4^3*x5*x8*x9 + -x2^4*x3*x4^3*x5*x8 + -x2^4*x3*x4^3*x5*x9 + x2^4*x3*x4^3*x5 + -x2^4*x3*x4^3*x6*x7*x8*x9 + x2^4*x3*x4^3*x6*x7*x8 + x2^4*x3*x4^3*x6*x7*x9 + -x2^4*x3*x4^3*x6*x7 + x2^4*x3*x4^3*x6*x8*x9 + -x2^4*x3*x4^3*x6*x8 + -x2^4*x3*x4^3*x6*x9 + x2^4*x3*x4^3*x6 + x2^4*x3*x4^3*x7*x8*x9 + -x2^4*x3*x4^3*x7*x8 + -x2^4*x3*x4^3*x7*x9 + x2^4*x3*x4^3*x7 + -x2^4*x3*x4^3*x8*x9 + x2^4*x3*x4^3*x8 + x2^4*x3*x4^3*x9 + -x2^4*x3*x4^3 + -x2^4*x3*x4^2*x5*x6*x7*x8*x9 + x2^4*x3*x4^2*x5*x6*x7*x8 + x2^4*x3*x4^2*x5*x6*x7*x9 + -x2^4*x3*x4^2*x5*x6*x7 + x2^4*x3*x4^2*x5*x6*x8*x9 + -x2^4*x3*x4^2*x5*x6*x8 + -x2^4*x3*x4^2*x5*x6*x9 + x2^4*x3*x4^2*x5*x6 + x2^4*x3*x4^2*x5*x7*x8*x9 + -x2^4*x3*x4^2*x5*x7*x8 + -x2^4*x3*x4^2*x5*x7*x9 + x2^4*x3*x4^2*x5*x7 + -x2^4*x3*x4^2*x5*x8*x9 + x2^4*x3*x4^2*x5*x8 + x2^4*x3*x4^2*x5*x9 + -x2^4*x3*x4^2*x5 + x2^4*x3*x4^2*x6*x7*x8*x9 + -x2^4*x3*x4^2*x6*x7*x8 + -x2^4*x3*x4^2*x6*x7*x9 + x2^4*x3*x4^2*x6*x7 + -x2^4*x3*x4^2*x6*x8*x9 + x2^4*x3*x4^2*x6*x8 + x2^4*x3*x4^2*x6*x9 + -x2^4*x3*x4^2*x6 + -x2^4*x3*x4^2*x7*x8*x9 + x2^4*x3*x4^2*x7*x8 + x2^4*x3*x4^2*x7*x9 + -x2^4*x3*x4^2*x7 + x2^4*x3*x4^2*x8*x9 + -x2^4*x3*x4^2*x8 + -x2^4*x3*x4^2*x9 + x2^4*x3*x4^2 + x2^4*x3*x4*x5^2*x6*x7*x8*x9 + -x2^4*x3*x4*x5^2*x6*x7*x8 + -x2^4*x3*x4*x5^2*x6*x7*x9 + x2^4*x3*x4*x5^2*x6*x7 + -x2^4*x3*x4*x5^2*x6*x8*x9 + x2^4*x3*x4*x5^2*x6*x8 + x2^4*x3*x4*x5^2*x6*x9 + -x2^4*x3*x4*x5^2*x6 + -x2^4*x3*x4*x5^2*x7*x8*x9 + x2^4*x3*x4*x5^2*x7*x8 + x2^4*x3*x4*x5^2*x7*x9 + -x2^4*x3*x4*x5^2*x7 + x2^4*x3*x4*x5^2*x8*x9 + -x2^4*x3*x4*x5^2*x8 + -x2^4*x3*x4*x5^2*x9 + x2^4*x3*x4*x5^2 + -x2^4*x3*x4*x5*x6*x7*x8*x9 + x2^4*x3*x4*x5*x6*x7*x8 + x2^4*x3*x4*x5*x6*x7*x9 + -x2^4*x3*x4*x5*x6*x7 + x2^4*x3*x4*x5*x6*x8*x9 + -x2^4*x3*x4*x5*x6*x8 + -x2^4*x3*x4*x5*x6*x9 + x2^4*x3*x4*x5*x6 + x2^4*x3*x4*x5*x7*x8*x9 + -x2^4*x3*x4*x5*x7*x8 + -x2^4*x3*x4*x5*x7*x9 + x2^4*x3*x4*x5*x7 + -x2^4*x3*x4*x5*x8*x9 + x2^4*x3*x4*x5*x8 + x2^4*x3*x4*x5*x9 + -x2^4*x3*x4*x5 + -x2^4*x3*x5^2*x6*x7*x8*x9 + x2^4*x3*x5^2*x6*x7*x8 + x2^4*x3*x5^2*x6*x7*x9 + -x2^4*x3*x5^2*x6*x7 + x2^4*x3*x5^2*x6*x8*x9 + -x2^4*x3*x5^2*x6*x8 + -x2^4*x3*x5^2*x6*x9 + x2^4*x3*x5^2*x6 + x2^4*x3*x5^2*x7*x8*x9 + -x2^4*x3*x5^2*x7*x8 + -x2^4*x3*x5^2*x7*x9 + x2^4*x3*x5^2*x7 + -x2^4*x3*x5^2*x8*x9 + x2^4*x3*x5^2*x8 + x2^4*x3*x5^2*x9 + -x2^4*x3*x5^2 + x2^4*x3*x5*x6*x7*x8*x9 + -x2^4*x3*x5*x6*x7*x8 + -x2^4*x3*x5*x6*x7*x9 + x2^4*x3*x5*x6*x7 + -x2^4*x3*x5*x6*x8*x9 + x2^4*x3*x5*x6*x8 + x2^4*x3*x5*x6*x9 + -x2^4*x3*x5*x6 + -x2^4*x3*x5*x7*x8*x9 + x2^4*x3*x5*x7*x8 + x2^4*x3*x5*x7*x9 + -x2^4*x3*x5*x7 + x2^4*x3*x5*x8*x9 + -x2^4*x3*x5*x8 + -x2^4*x3*x5*x9 + x2^4*x3*x5 + -x2^4*x4^3*x5*x6*x7*x8*x9 + x2^4*x4^3*x5*x6*x7*x8 + x2^4*x4^3*x5*x6*x7*x9 + -x2^4*x4^3*x5*x6*x7 + x2^4*x4^3*x5*x6*x8*x9 + -x2^4*x4^3*x5*x6*x8 + -x2^4*x4^3*x5*x6*x9 + x2^4*x4^3*x5*x6 + x2^4*x4^3*x5*x7*x8*x9 + -x2^4*x4^3*x5*x7*x8 + -x2^4*x4^3*x5*x7*x9 + x2^4*x4^3*x5*x7 + -x2^4*x4^3*x5*x8*x9 + x2^4*x4^3*x5*x8 + x2^4*x4^3*x5*x9 + -x2^4*x4^3*x5 + x2^4*x4^3*x6*x7*x8*x9 + -x2^4*x4^3*x6*x7*x8 + -x2^4*x4^3*x6*x7*x9 + x2^4*x4^3*x6*x7 + -x2^4*x4^3*x6*x8*x9 + x2^4*x4^3*x6*x8 + x2^4*x4^3*x6*x9 + -x2^4*x4^3*x6 + -x2^4*x4^3*x7*x8*x9 + x2^4*x4^3*x7*x8 + x2^4*x4^3*x7*x9 + -x2^4*x4^3*x7 + x2^4*x4^3*x8*x9 + -x2^4*x4^3*x8 + -x2^4*x4^3*x9 + x2^4*x4^3 + x2^4*x4^2*x5*x6*x7*x8*x9 + -x2^4*x4^2*x5*x6*x7*x8 + -x2^4*x4^2*x5*x6*x7*x9 + x2^4*x4^2*x5*x6*x7 + -x2^4*x4^2*x5*x6*x8*x9 + x2^4*x4^2*x5*x6*x8 + x2^4*x4^2*x5*x6*x9 + -x2^4*x4^2*x5*x6 + -x2^4*x4^2*x5*x7*x8*x9 + x2^4*x4^2*x5*x7*x8 + x2^4*x4^2*x5*x7*x9 + -x2^4*x4^2*x5*x7 + x2^4*x4^2*x5*x8*x9 + -x2^4*x4^2*x5*x8 + -x2^4*x4^2*x5*x9 + x2^4*x4^2*x5 + -x2^4*x4^2*x6*x7*x8*x9 + x2^4*x4^2*x6*x7*x8 + x2^4*x4^2*x6*x7*x9 + -x2^4*x4^2*x6*x7 + x2^4*x4^2*x6*x8*x9 + -x2^4*x4^2*x6*x8 + -x2^4*x4^2*x6*x9 + x2^4*x4^2*x6 + x2^4*x4^2*x7*x8*x9 + -x2^4*x4^2*x7*x8 + -x2^4*x4^2*x7*x9 + x2^4*x4^2*x7 + -x2^4*x4^2*x8*x9 + x2^4*x4^2*x8 + x2^4*x4^2*x9 + -x2^4*x4^2 + -x2^4*x4*x5^2*x6*x7*x8*x9 + x2^4*x4*x5^2*x6*x7*x8 + x2^4*x4*x5^2*x6*x7*x9 + -x2^4*x4*x5^2*x6*x7 + x2^4*x4*x5^2*x6*x8*x9 + -x2^4*x4*x5^2*x6*x8 + -x2^4*x4*x5^2*x6*x9 + x2^4*x4*x5^2*x6 + x2^4*x4*x5^2*x7*x8*x9 + -x2^4*x4*x5^2*x7*x8 + -x2^4*x4*x5^2*x7*x9 + x2^4*x4*x5^2*x7 + -x2^4*x4*x5^2*x8*x9 + x2^4*x4*x5^2*x8 + x2^4*x4*x5^2*x9 + -x2^4*x4*x5^2 + x2^4*x4*x5*x6*x7*x8*x9 + -x2^4*x4*x5*x6*x7*x8 + -x2^4*x4*x5*x6*x7*x9 + x2^4*x4*x5*x6*x7 + -x2^4*x4*x5*x6*x8*x9 + x2^4*x4*x5*x6*x8 + x2^4*x4*x5*x6*x9 + -x2^4*x4*x5*x6 + -x2^4*x4*x5*x7*x8*x9 + x2^4*x4*x5*x7*x8 + x2^4*x4*x5*x7*x9 + -x2^4*x4*x5*x7 + x2^4*x4*x5*x8*x9 + -x2^4*x4*x5*x8 + -x2^4*x4*x5*x9 + x2^4*x4*x5 + x2^4*x5^2*x6*x7*x8*x9 + -x2^4*x5^2*x6*x7*x8 + -x2^4*x5^2*x6*x7*x9 + x2^4*x5^2*x6*x7 + -x2^4*x5^2*x6*x8*x9 + x2^4*x5^2*x6*x8 + x2^4*x5^2*x6*x9 + -x2^4*x5^2*x6 + -x2^4*x5^2*x7*x8*x9 + x2^4*x5^2*x7*x8 + x2^4*x5^2*x7*x9 + -x2^4*x5^2*x7 + x2^4*x5^2*x8*x9 + -x2^4*x5^2*x8 + -x2^4*x5^2*x9 + x2^4*x5^2 + -x2^4*x5*x6*x7*x8*x9 + x2^4*x5*x6*x7*x8 + x2^4*x5*x6*x7*x9 + -x2^4*x5*x6*x7 + x2^4*x5*x6*x8*x9 + -x2^4*x5*x6*x8 + -x2^4*x5*x6*x9 + x2^4*x5*x6 + x2^4*x5*x7*x8*x9 + -x2^4*x5*x7*x8 + -x2^4*x5*x7*x9 + x2^4*x5*x7 + -x2^4*x5*x8*x9 + x2^4*x5*x8 + x2^4*x5*x9 + -x2^4*x5 + x2^3*x3*x4^3*x5^2*x6*x7*x8*x9 + -x2^3*x3*x4^3*x5^2*x6*x7*x8 + -x2^3*x3*x4^3*x5^2*x6*x7*x9 + x2^3*x3*x4^3*x5^2*x6*x7 + -x2^3*x3*x4^3*x5^2*x6*x8*x9 + x2^3*x3*x4^3*x5^2*x6*x8 + x2^3*x3*x4^3*x5^2*x6*x9 + -x2^3*x3*x4^3*x5^2*x6 + -x2^3*x3*x4^3*x5^2*x7*x8*x9 + x2^3*x3*x4^3*x5^2*x7*x8 + x2^3*x3*x4^3*x5^2*x7*x9 + -x2^3*x3*x4^3*x5^2*x7 + x2^3*x3*x4^3*x5^2*x8*x9 + -x2^3*x3*x4^3*x5^2*x8 + -x2^3*x3*x4^3*x5^2*x9 + x2^3*x3*x4^3*x5^2 + x2^3*x3*x4^3*x5*x6^2*x7*x8*x9 + -x2^3*x3*x4^3*x5*x6^2*x7*x8 + -x2^3*x3*x4^3*x5*x6^2*x7*x9 + x2^3*x3*x4^3*x5*x6^2*x7 + -x2^3*x3*x4^3*x5*x6^2*x8*x9 + x2^3*x3*x4^3*x5*x6^2*x8 + x2^3*x3*x4^3*x5*x6^2*x9 + -x2^3*x3*x4^3*x5*x6^2 + -2*x2^3*x3*x4^3*x5*x6*x7*x8*x9 + 2*x2^3*x3*x4^3*x5*x6*x7*x8 + 2*x2^3*x3*x4^3*x5*x6*x7*x9 + -2*x2^3*x3*x4^3*x5*x6*x7 + 2*x2^3*x3*x4^3*x5*x6*x8*x9 + -2*x2^3*x3*x4^3*x5*x6*x8 + -2*x2^3*x3*x4^3*x5*x6*x9 + 2*x2^3*x3*x4^3*x5*x6 + x2^3*x3*x4^3*x5*x7*x8*x9 + -x2^3*x3*x4^3*x5*x7*x8 + -x2^3*x3*x4^3*x5*x7*x9 + x2^3*x3*x4^3*x5*x7 + -x2^3*x3*x4^3*x5*x8*x9 + x2^3*x3*x4^3*x5*x8 + x2^3*x3*x4^3*x5*x9 + -x2^3*x3*x4^3*x5 + -x2^3*x3*x4^3*x6^2*x7*x8*x9 + x2^3*x3*x4^3*x6^2*x7*x8 + x2^3*x3*x4^3*x6^2*x7*x9 + -x2^3*x3*x4^3*x6^2*x7 + x2^3*x3*x4^3*x6^2*x8*x9 + -x2^3*x3*x4^3*x6^2*x8 + -x2^3*x3*x4^3*x6^2*x9 + x2^3*x3*x4^3*x6^2 + x2^3*x3*x4^3*x6*x7*x8*x9 + -x2^3*x3*x4^3*x6*x7*x8 + -x2^3*x3*x4^3*x6*x7*x9 + x2^3*x3*x4^3*x6*x7 + -x2^3*x3*x4^3*x6*x8*x9 + x2^3*x3*x4^3*x6*x8 + x2^3*x3*x4^3*x6*x9 + -x2^3*x3*x4^3*x6 + x2^3*x3*x4^2*x5^2*x6^2*x7*x8*x9 + -x2^3*x3*x4^2*x5^2*x6^2*x7*x8 + -x2^3*x3*x4^2*x5^2*x6^2*x7*x9 + x2^3*x3*x4^2*x5^2*x6^2*x7 + -x2^3*x3*x4^2*x5^2*x6^2*x8*x9 + x2^3*x3*x4^2*x5^2*x6^2*x8 + x2^3*x3*x4^2*x5^2*x6^2*x9 + -x2^3*x3*x4^2*x5^2*x6^2 + -x2^3*x3*x4^2*x5^2*x6*x7*x8*x9 + x2^3*x3*x4^2*x5^2*x6*x7*x8 + x2^3*x3*x4^2*x5^2*x6*x7*x9 + -x2^3*x3*x4^2*x5^2*x6*x7 + x2^3*x3*x4^2*x5^2*x6*x8*x9 + -x2^3*x3*x4^2*x5^2*x6*x8 + -x2^3*x3*x4^2*x5^2*x6*x9 + x2^3*x3*x4^2*x5^2*x6 + -x2^3*x3*x4^2*x5*x6^2*x7*x8*x9 + x2^3*x3*x4^2*x5*x6^2*x7*x8 + x2^3*x3*x4^2*x5*x6^2*x7*x9 + -x2^3*x3*x4^2*x5*x6^2*x7 + x2^3*x3*x4^2*x5*x6^2*x8*x9 + -x2^3*x3*x4^2*x5*x6^2*x8 + -x2^3*x3*x4^2*x5*x6^2*x9 + x2^3*x3*x4^2*x5*x6^2 + x2^3*x3*x4^2*x5*x6*x7*x8*x9^2 + -x2^3*x3*x4^2*x5*x6*x7*x8 + -x2^3*x3*x4^2*x5*x6*x7*x9^2 + x2^3*x3*x4^2*x5*x6*x7 + -x2^3*x3*x4^2*x5*x6*x8*x9^2 + x2^3*x3*x4^2*x5*x6*x8 + x2^3*x3*x4^2*x5*x6*x9^2 + -x2^3*x3*x4^2*x5*x6 + -x2^3*x3*x4^2*x5*x7*x8*x9^2 + x2^3*x3*x4^2*x5*x7*x8*x9 + x2^3*x3*x4^2*x5*x7*x9^2 + -x2^3*x3*x4^2*x5*x7*x9 + x2^3*x3*x4^2*x5*x8*x9^2 + -x2^3*x3*x4^2*x5*x8*x9 + -x2^3*x3*x4^2*x5*x9^2 + x2^3*x3*x4^2*x5*x9 + -x2^3*x3*x4^2*x6*x7*x8*x9^2 + x2^3*x3*x4^2*x6*x7*x8*x9 + x2^3*x3*x4^2*x6*x7*x9^2 + -x2^3*x3*x4^2*x6*x7*x9 + x2^3*x3*x4^2*x6*x8*x9^2 + -x2^3*x3*x4^2*x6*x8*x9 + -x2^3*x3*x4^2*x6*x9^2 + x2^3*x3*x4^2*x6*x9 + x2^3*x3*x4^2*x7*x8*x9^2 + -x2^3*x3*x4^2*x7*x8*x9 + -x2^3*x3*x4^2*x7*x9^2 + x2^3*x3*x4^2*x7*x9 + -x2^3*x3*x4^2*x8*x9^2 + x2^3*x3*x4^2*x8*x9 + x2^3*x3*x4^2*x9^2 + -x2^3*x3*x4^2*x9 + -x2^3*x3*x4*x5^2*x6*x7*x8*x9 + x2^3*x3*x4*x5^2*x6*x7*x8 + x2^3*x3*x4*x5^2*x6*x7*x9 + -x2^3*x3*x4*x5^2*x6*x7 + x2^3*x3*x4*x5^2*x6*x8*x9 + -x2^3*x3*x4*x5^2*x6*x8 + -x2^3*x3*x4*x5^2*x6*x9 + x2^3*x3*x4*x5^2*x6 + x2^3*x3*x4*x5^2*x7*x8*x9 + -x2^3*x3*x4*x5^2*x7*x8 + -x2^3*x3*x4*x5^2*x7*x9 + x2^3*x3*x4*x5^2*x7 + -x2^3*x3*x4*x5^2*x8*x9 + x2^3*x3*x4*x5^2*x8 + x2^3*x3*x4*x5^2*x9 + -x2^3*x3*x4*x5^2 + x2^3*x3*x4*x5*x6*x7*x8^2*x9 + -x2^3*x3*x4*x5*x6*x7*x8^2 + -x2^3*x3*x4*x5*x6*x7*x9 + x2^3*x3*x4*x5*x6*x7 + -x2^3*x3*x4*x5*x6*x8^2*x9 + x2^3*x3*x4*x5*x6*x8^2 + x2^3*x3*x4*x5*x6*x9 + -x2^3*x3*x4*x5*x6 + -x2^3*x3*x4*x5*x7*x8^2*x9 + x2^3*x3*x4*x5*x7*x8^2 + x2^3*x3*x4*x5*x7*x9 + -x2^3*x3*x4*x5*x7 + x2^3*x3*x4*x5*x8^2*x9 + -x2^3*x3*x4*x5*x8^2 + -x2^3*x3*x4*x5*x9 + x2^3*x3*x4*x5 + -x2^3*x3*x4*x6*x7*x8^2*x9 + x2^3*x3*x4*x6*x7*x8^2 + x2^3*x3*x4*x6*x7*x8*x9 + -x2^3*x3*x4*x6*x7*x8 + x2^3*x3*x4*x6*x8^2*x9 + -x2^3*x3*x4*x6*x8^2 + -x2^3*x3*x4*x6*x8*x9 + x2^3*x3*x4*x6*x8 + x2^3*x3*x4*x7*x8^2*x9 + -x2^3*x3*x4*x7*x8^2 + -x2^3*x3*x4*x7*x8*x9 + x2^3*x3*x4*x7*x8 + -x2^3*x3*x4*x8^2*x9 + x2^3*x3*x4*x8^2 + x2^3*x3*x4*x8*x9 + -x2^3*x3*x4*x8 + -x2^3*x3*x5^2*x6^2*x7*x8*x9 + x2^3*x3*x5^2*x6^2*x7*x8 + x2^3*x3*x5^2*x6^2*x7*x9 + -x2^3*x3*x5^2*x6^2*x7 + x2^3*x3*x5^2*x6^2*x8*x9 + -x2^3*x3*x5^2*x6^2*x8 + -x2^3*x3*x5^2*x6^2*x9 + x2^3*x3*x5^2*x6^2 + x2^3*x3*x5^2*x6*x7*x8*x9 + -x2^3*x3*x5^2*x6*x7*x8 + -x2^3*x3*x5^2*x6*x7*x9 + x2^3*x3*x5^2*x6*x7 + -x2^3*x3*x5^2*x6*x8*x9 + x2^3*x3*x5^2*x6*x8 + x2^3*x3*x5^2*x6*x9 + -x2^3*x3*x5^2*x6 + -x2^3*x3*x5*x6*x7*x8^2*x9 + x2^3*x3*x5*x6*x7*x8^2 + -x2^3*x3*x5*x6*x7*x8*x9^2 + 2*x2^3*x3*x5*x6*x7*x8*x9 + -x2^3*x3*x5*x6*x7*x8 + x2^3*x3*x5*x6*x7*x9^2 + -x2^3*x3*x5*x6*x7*x9 + x2^3*x3*x5*x6*x8^2*x9 + -x2^3*x3*x5*x6*x8^2 + x2^3*x3*x5*x6*x8*x9^2 + -2*x2^3*x3*x5*x6*x8*x9 + x2^3*x3*x5*x6*x8 + -x2^3*x3*x5*x6*x9^2 + x2^3*x3*x5*x6*x9 + x2^3*x3*x5*x7*x8^2*x9 + -x2^3*x3*x5*x7*x8^2 + x2^3*x3*x5*x7*x8*x9^2 + -2*x2^3*x3*x5*x7*x8*x9 + x2^3*x3*x5*x7*x8 + -x2^3*x3*x5*x7*x9^2 + x2^3*x3*x5*x7*x9 + -x2^3*x3*x5*x8^2*x9 + x2^3*x3*x5*x8^2 + -x2^3*x3*x5*x8*x9^2 + 2*x2^3*x3*x5*x8*x9 + -x2^3*x3*x5*x8 + x2^3*x3*x5*x9^2 + -x2^3*x3*x5*x9 + x2^3*x3*x6^2*x7*x8*x9 + -x2^3*x3*x6^2*x7*x8 + -x2^3*x3*x6^2*x7*x9 + x2^3*x3*x6^2*x7 + -x2^3*x3*x6^2*x8*x9 + x2^3*x3*x6^2*x8 + x2^3*x3*x6^2*x9 + -x2^3*x3*x6^2 + x2^3*x3*x6*x7*x8^2*x9 + -x2^3*x3*x6*x7*x8^2 + x2^3*x3*x6*x7*x8*x9^2 + -3*x2^3*x3*x6*x7*x8*x9 + 2*x2^3*x3*x6*x7*x8 + -x2^3*x3*x6*x7*x9^2 + 2*x2^3*x3*x6*x7*x9 + -x2^3*x3*x6*x7 + -x2^3*x3*x6*x8^2*x9 + x2^3*x3*x6*x8^2 + -x2^3*x3*x6*x8*x9^2 + 3*x2^3*x3*x6*x8*x9 + -2*x2^3*x3*x6*x8 + x2^3*x3*x6*x9^2 + -2*x2^3*x3*x6*x9 + x2^3*x3*x6 + -x2^3*x3*x7*x8^2*x9 + x2^3*x3*x7*x8^2 + -x2^3*x3*x7*x8*x9^2 + 2*x2^3*x3*x7*x8*x9 + -x2^3*x3*x7*x8 + x2^3*x3*x7*x9^2 + -x2^3*x3*x7*x9 + x2^3*x3*x8^2*x9 + -x2^3*x3*x8^2 + x2^3*x3*x8*x9^2 + -2*x2^3*x3*x8*x9 + x2^3*x3*x8 + -x2^3*x3*x9^2 + x2^3*x3*x9 + -x2^3*x4^3*x5^2*x6*x7*x8*x9 + x2^3*x4^3*x5^2*x6*x7*x8 + x2^3*x4^3*x5^2*x6*x7*x9 + -x2^3*x4^3*x5^2*x6*x7 + x2^3*x4^3*x5^2*x6*x8*x9 + -x2^3*x4^3*x5^2*x6*x8 + -x2^3*x4^3*x5^2*x6*x9 + x2^3*x4^3*x5^2*x6 + x2^3*x4^3*x5^2*x7*x8*x9 + -x2^3*x4^3*x5^2*x7*x8 + -x2^3*x4^3*x5^2*x7*x9 + x2^3*x4^3*x5^2*x7 + -x2^3*x4^3*x5^2*x8*x9 + x2^3*x4^3*x5^2*x8 + x2^3*x4^3*x5^2*x9 + -x2^3*x4^3*x5^2 + -x2^3*x4^3*x5*x6^2*x7*x8*x9 + x2^3*x4^3*x5*x6^2*x7*x8 + x2^3*x4^3*x5*x6^2*x7*x9 + -x2^3*x4^3*x5*x6^2*x7 + x2^3*x4^3*x5*x6^2*x8*x9 + -x2^3*x4^3*x5*x6^2*x8 + -x2^3*x4^3*x5*x6^2*x9 + x2^3*x4^3*x5*x6^2 + 2*x2^3*x4^3*x5*x6*x7*x8*x9 + -2*x2^3*x4^3*x5*x6*x7*x8 + -2*x2^3*x4^3*x5*x6*x7*x9 + 2*x2^3*x4^3*x5*x6*x7 + -2*x2^3*x4^3*x5*x6*x8*x9 + 2*x2^3*x4^3*x5*x6*x8 + 2*x2^3*x4^3*x5*x6*x9 + -2*x2^3*x4^3*x5*x6 + -x2^3*x4^3*x5*x7*x8*x9 + x2^3*x4^3*x5*x7*x8 + x2^3*x4^3*x5*x7*x9 + -x2^3*x4^3*x5*x7 + x2^3*x4^3*x5*x8*x9 + -x2^3*x4^3*x5*x8 + -x2^3*x4^3*x5*x9 + x2^3*x4^3*x5 + x2^3*x4^3*x6^2*x7*x8*x9 + -x2^3*x4^3*x6^2*x7*x8 + -x2^3*x4^3*x6^2*x7*x9 + x2^3*x4^3*x6^2*x7 + -x2^3*x4^3*x6^2*x8*x9 + x2^3*x4^3*x6^2*x8 + x2^3*x4^3*x6^2*x9 + -x2^3*x4^3*x6^2 + -x2^3*x4^3*x6*x7*x8*x9 + x2^3*x4^3*x6*x7*x8 + x2^3*x4^3*x6*x7*x9 + -x2^3*x4^3*x6*x7 + x2^3*x4^3*x6*x8*x9 + -x2^3*x4^3*x6*x8 + -x2^3*x4^3*x6*x9 + x2^3*x4^3*x6 + -x2^3*x4^2*x5^2*x6^2*x7*x8*x9 + x2^3*x4^2*x5^2*x6^2*x7*x8 + x2^3*x4^2*x5^2*x6^2*x7*x9 + -x2^3*x4^2*x5^2*x6^2*x7 + x2^3*x4^2*x5^2*x6^2*x8*x9 + -x2^3*x4^2*x5^2*x6^2*x8 + -x2^3*x4^2*x5^2*x6^2*x9 + x2^3*x4^2*x5^2*x6^2 + x2^3*x4^2*x5^2*x6*x7*x8*x9 + -x2^3*x4^2*x5^2*x6*x7*x8 + -x2^3*x4^2*x5^2*x6*x7*x9 + x2^3*x4^2*x5^2*x6*x7 + -x2^3*x4^2*x5^2*x6*x8*x9 + x2^3*x4^2*x5^2*x6*x8 + x2^3*x4^2*x5^2*x6*x9 + -x2^3*x4^2*x5^2*x6 + x2^3*x4^2*x5*x6^2*x7*x8*x9 + -x2^3*x4^2*x5*x6^2*x7*x8 + -x2^3*x4^2*x5*x6^2*x7*x9 + x2^3*x4^2*x5*x6^2*x7 + -x2^3*x4^2*x5*x6^2*x8*x9 + x2^3*x4^2*x5*x6^2*x8 + x2^3*x4^2*x5*x6^2*x9 + -x2^3*x4^2*x5*x6^2 + -x2^3*x4^2*x5*x6*x7*x8*x9^2 + x2^3*x4^2*x5*x6*x7*x8 + x2^3*x4^2*x5*x6*x7*x9^2 + -x2^3*x4^2*x5*x6*x7 + x2^3*x4^2*x5*x6*x8*x9^2 + -x2^3*x4^2*x5*x6*x8 + -x2^3*x4^2*x5*x6*x9^2 + x2^3*x4^2*x5*x6 + x2^3*x4^2*x5*x7*x8*x9^2 + -x2^3*x4^2*x5*x7*x8*x9 + -x2^3*x4^2*x5*x7*x9^2 + x2^3*x4^2*x5*x7*x9 + -x2^3*x4^2*x5*x8*x9^2 + x2^3*x4^2*x5*x8*x9 + x2^3*x4^2*x5*x9^2 + -x2^3*x4^2*x5*x9 + x2^3*x4^2*x6*x7*x8*x9^2 + -x2^3*x4^2*x6*x7*x8*x9 + -x2^3*x4^2*x6*x7*x9^2 + x2^3*x4^2*x6*x7*x9 + -x2^3*x4^2*x6*x8*x9^2 + x2^3*x4^2*x6*x8*x9 + x2^3*x4^2*x6*x9^2 + -x2^3*x4^2*x6*x9 + -x2^3*x4^2*x7*x8*x9^2 + x2^3*x4^2*x7*x8*x9 + x2^3*x4^2*x7*x9^2 + -x2^3*x4^2*x7*x9 + x2^3*x4^2*x8*x9^2 + -x2^3*x4^2*x8*x9 + -x2^3*x4^2*x9^2 + x2^3*x4^2*x9 + x2^3*x4*x5^2*x6*x7*x8*x9 + -x2^3*x4*x5^2*x6*x7*x8 + -x2^3*x4*x5^2*x6*x7*x9 + x2^3*x4*x5^2*x6*x7 + -x2^3*x4*x5^2*x6*x8*x9 + x2^3*x4*x5^2*x6*x8 + x2^3*x4*x5^2*x6*x9 + -x2^3*x4*x5^2*x6 + -x2^3*x4*x5^2*x7*x8*x9 + x2^3*x4*x5^2*x7*x8 + x2^3*x4*x5^2*x7*x9 + -x2^3*x4*x5^2*x7 + x2^3*x4*x5^2*x8*x9 + -x2^3*x4*x5^2*x8 + -x2^3*x4*x5^2*x9 + x2^3*x4*x5^2 + -x2^3*x4*x5*x6*x7*x8^2*x9 + x2^3*x4*x5*x6*x7*x8^2 + x2^3*x4*x5*x6*x7*x9 + -x2^3*x4*x5*x6*x7 + x2^3*x4*x5*x6*x8^2*x9 + -x2^3*x4*x5*x6*x8^2 + -x2^3*x4*x5*x6*x9 + x2^3*x4*x5*x6 + x2^3*x4*x5*x7*x8^2*x9 + -x2^3*x4*x5*x7*x8^2 + -x2^3*x4*x5*x7*x9 + x2^3*x4*x5*x7 + -x2^3*x4*x5*x8^2*x9 + x2^3*x4*x5*x8^2 + x2^3*x4*x5*x9 + -x2^3*x4*x5 + x2^3*x4*x6*x7*x8^2*x9 + -x2^3*x4*x6*x7*x8^2 + -x2^3*x4*x6*x7*x8*x9 + x2^3*x4*x6*x7*x8 + -x2^3*x4*x6*x8^2*x9 + x2^3*x4*x6*x8^2 + x2^3*x4*x6*x8*x9 + -x2^3*x4*x6*x8 + -x2^3*x4*x7*x8^2*x9 + x2^3*x4*x7*x8^2 + x2^3*x4*x7*x8*x9 + -x2^3*x4*x7*x8 + x2^3*x4*x8^2*x9 + -x2^3*x4*x8^2 + -x2^3*x4*x8*x9 + x2^3*x4*x8 + x2^3*x5^2*x6^2*x7*x8*x9 + -x2^3*x5^2*x6^2*x7*x8 + -x2^3*x5^2*x6^2*x7*x9 + x2^3*x5^2*x6^2*x7 + -x2^3*x5^2*x6^2*x8*x9 + x2^3*x5^2*x6^2*x8 + x2^3*x5^2*x6^2*x9 + -x2^3*x5^2*x6^2 + -x2^3*x5^2*x6*x7*x8*x9 + x2^3*x5^2*x6*x7*x8 + x2^3*x5^2*x6*x7*x9 + -x2^3*x5^2*x6*x7 + x2^3*x5^2*x6*x8*x9 + -x2^3*x5^2*x6*x8 + -x2^3*x5^2*x6*x9 + x2^3*x5^2*x6 + x2^3*x5*x6*x7*x8^2*x9 + -x2^3*x5*x6*x7*x8^2 + x2^3*x5*x6*x7*x8*x9^2 + -2*x2^3*x5*x6*x7*x8*x9 + x2^3*x5*x6*x7*x8 + -x2^3*x5*x6*x7*x9^2 + x2^3*x5*x6*x7*x9 + -x2^3*x5*x6*x8^2*x9 + x2^3*x5*x6*x8^2 + -x2^3*x5*x6*x8*x9^2 + 2*x2^3*x5*x6*x8*x9 + -x2^3*x5*x6*x8 + x2^3*x5*x6*x9^2 + -x2^3*x5*x6*x9 + -x2^3*x5*x7*x8^2*x9 + x2^3*x5*x7*x8^2 + -x2^3*x5*x7*x8*x9^2 + 2*x2^3*x5*x7*x8*x9 + -x2^3*x5*x7*x8 + x2^3*x5*x7*x9^2 + -x2^3*x5*x7*x9 + x2^3*x5*x8^2*x9 + -x2^3*x5*x8^2 + x2^3*x5*x8*x9^2 + -2*x2^3*x5*x8*x9 + x2^3*x5*x8 + -x2^3*x5*x9^2 + x2^3*x5*x9 + -x2^3*x6^2*x7*x8*x9 + x2^3*x6^2*x7*x8 + x2^3*x6^2*x7*x9 + -x2^3*x6^2*x7 + x2^3*x6^2*x8*x9 + -x2^3*x6^2*x8 + -x2^3*x6^2*x9 + x2^3*x6^2 + -x2^3*x6*x7*x8^2*x9 + x2^3*x6*x7*x8^2 + -x2^3*x6*x7*x8*x9^2 + 3*x2^3*x6*x7*x8*x9 + -2*x2^3*x6*x7*x8 + x2^3*x6*x7*x9^2 + -2*x2^3*x6*x7*x9 + x2^3*x6*x7 + x2^3*x6*x8^2*x9 + -x2^3*x6*x8^2 + x2^3*x6*x8*x9^2 + -3*x2^3*x6*x8*x9 + 2*x2^3*x6*x8 + -x2^3*x6*x9^2 + 2*x2^3*x6*x9 + -x2^3*x6 + x2^3*x7*x8^2*x9 + -x2^3*x7*x8^2 + x2^3*x7*x8*x9^2 + -2*x2^3*x7*x8*x9 + x2^3*x7*x8 + -x2^3*x7*x9^2 + x2^3*x7*x9 + -x2^3*x8^2*x9 + x2^3*x8^2 + -x2^3*x8*x9^2 + 2*x2^3*x8*x9 + -x2^3*x8 + x2^3*x9^2 + -x2^3*x9 + x2^2*x3*x4^2*x5*x6*x7^2*x8*x9 + -x2^2*x3*x4^2*x5*x6*x7^2*x8 + -x2^2*x3*x4^2*x5*x6*x7^2*x9 + x2^2*x3*x4^2*x5*x6*x7^2 + -x2^2*x3*x4^2*x5*x6*x7*x8*x9 + x2^2*x3*x4^2*x5*x6*x7*x8 + x2^2*x3*x4^2*x5*x6*x7*x9 + -x2^2*x3*x4^2*x5*x6*x7 + -x2^2*x3*x4^2*x5*x7^2*x8*x9 + x2^2*x3*x4^2*x5*x7^2*x8 + x2^2*x3*x4^2*x5*x7^2*x9 + -x2^2*x3*x4^2*x5*x7^2 + x2^2*x3*x4^2*x5*x7*x8*x9 + -x2^2*x3*x4^2*x5*x7*x8 + -x2^2*x3*x4^2*x5*x7*x9 + x2^2*x3*x4^2*x5*x7 + -x2^2*x3*x4^2*x6*x7^2*x8*x9 + x2^2*x3*x4^2*x6*x7^2*x8 + x2^2*x3*x4^2*x6*x7^2*x9 + -x2^2*x3*x4^2*x6*x7^2 + x2^2*x3*x4^2*x6*x7*x8*x9 + -x2^2*x3*x4^2*x6*x7*x8 + -x2^2*x3*x4^2*x6*x7*x9 + x2^2*x3*x4^2*x6*x7 + x2^2*x3*x4^2*x7^2*x8*x9 + -x2^2*x3*x4^2*x7^2*x8 + -x2^2*x3*x4^2*x7^2*x9 + x2^2*x3*x4^2*x7^2 + -x2^2*x3*x4^2*x7*x8*x9 + x2^2*x3*x4^2*x7*x8 + x2^2*x3*x4^2*x7*x9 + -x2^2*x3*x4^2*x7 + x2^2*x3*x4*x5^3*x6^2*x7*x8*x9 + -x2^2*x3*x4*x5^3*x6^2*x7*x8 + -x2^2*x3*x4*x5^3*x6^2*x7*x9 + x2^2*x3*x4*x5^3*x6^2*x7 + -x2^2*x3*x4*x5^3*x6^2*x8*x9 + x2^2*x3*x4*x5^3*x6^2*x8 + x2^2*x3*x4*x5^3*x6^2*x9 + -x2^2*x3*x4*x5^3*x6^2 + -x2^2*x3*x4*x5^3*x7*x8*x9 + x2^2*x3*x4*x5^3*x7*x8 + x2^2*x3*x4*x5^3*x7*x9 + -x2^2*x3*x4*x5^3*x7 + x2^2*x3*x4*x5^3*x8*x9 + -x2^2*x3*x4*x5^3*x8 + -x2^2*x3*x4*x5^3*x9 + x2^2*x3*x4*x5^3 + -x2^2*x3*x4*x5^2*x6^2*x7*x8*x9 + x2^2*x3*x4*x5^2*x6^2*x7*x8 + x2^2*x3*x4*x5^2*x6^2*x7*x9 + -x2^2*x3*x4*x5^2*x6^2*x7 + x2^2*x3*x4*x5^2*x6^2*x8*x9 + -x2^2*x3*x4*x5^2*x6^2*x8 + -x2^2*x3*x4*x5^2*x6^2*x9 + x2^2*x3*x4*x5^2*x6^2 + x2^2*x3*x4*x5^2*x6*x7^2*x8*x9 + -x2^2*x3*x4*x5^2*x6*x7^2*x8 + -x2^2*x3*x4*x5^2*x6*x7^2*x9 + x2^2*x3*x4*x5^2*x6*x7^2 + -x2^2*x3*x4*x5^2*x6*x7*x8*x9 + x2^2*x3*x4*x5^2*x6*x7*x8 + x2^2*x3*x4*x5^2*x6*x7*x9 + -x2^2*x3*x4*x5^2*x6*x7 + -x2^2*x3*x4*x5^2*x7^2*x8*x9 + x2^2*x3*x4*x5^2*x7^2*x8 + x2^2*x3*x4*x5^2*x7^2*x9 + -x2^2*x3*x4*x5^2*x7^2 + 2*x2^2*x3*x4*x5^2*x7*x8*x9 + -2*x2^2*x3*x4*x5^2*x7*x8 + -2*x2^2*x3*x4*x5^2*x7*x9 + 2*x2^2*x3*x4*x5^2*x7 + -x2^2*x3*x4*x5^2*x8*x9 + x2^2*x3*x4*x5^2*x8 + x2^2*x3*x4*x5^2*x9 + -x2^2*x3*x4*x5^2 + -x2^2*x3*x4*x5*x6*x7^2*x8*x9 + x2^2*x3*x4*x5*x6*x7^2*x8 + x2^2*x3*x4*x5*x6*x7^2*x9 + -x2^2*x3*x4*x5*x6*x7^2 + x2^2*x3*x4*x5*x6*x7*x8^2*x9^2 + -x2^2*x3*x4*x5*x6*x7*x8^2*x9 + -x2^2*x3*x4*x5*x6*x7*x8*x9^2 + 2*x2^2*x3*x4*x5*x6*x7*x8*x9 + -x2^2*x3*x4*x5*x6*x7*x8 + -x2^2*x3*x4*x5*x6*x7*x9 + x2^2*x3*x4*x5*x6*x7 + -x2^2*x3*x4*x5*x6*x8^2*x9^2 + x2^2*x3*x4*x5*x6*x8^2*x9 + x2^2*x3*x4*x5*x6*x8*x9^2 + -x2^2*x3*x4*x5*x6*x8*x9 + x2^2*x3*x4*x5*x7^2*x8*x9 + -x2^2*x3*x4*x5*x7^2*x8 + -x2^2*x3*x4*x5*x7^2*x9 + x2^2*x3*x4*x5*x7^2 + -x2^2*x3*x4*x5*x7*x8^2*x9^2 + x2^2*x3*x4*x5*x7*x8^2*x9 + x2^2*x3*x4*x5*x7*x8*x9^2 + -2*x2^2*x3*x4*x5*x7*x8*x9 + x2^2*x3*x4*x5*x7*x8 + x2^2*x3*x4*x5*x7*x9 + -x2^2*x3*x4*x5*x7 + x2^2*x3*x4*x5*x8^2*x9^2 + -x2^2*x3*x4*x5*x8^2*x9 + -x2^2*x3*x4*x5*x8*x9^2 + x2^2*x3*x4*x5*x8*x9 + -x2^2*x3*x4*x6*x7*x8^2*x9^2 + x2^2*x3*x4*x6*x7*x8^2*x9 + x2^2*x3*x4*x6*x7*x8*x9^2 + -x2^2*x3*x4*x6*x7*x8*x9 + x2^2*x3*x4*x6*x8^2*x9^2 + -x2^2*x3*x4*x6*x8^2*x9 + -x2^2*x3*x4*x6*x8*x9^2 + x2^2*x3*x4*x6*x8*x9 + x2^2*x3*x4*x7*x8^2*x9^2 + -x2^2*x3*x4*x7*x8^2*x9 + -x2^2*x3*x4*x7*x8*x9^2 + x2^2*x3*x4*x7*x8*x9 + -x2^2*x3*x4*x8^2*x9^2 + x2^2*x3*x4*x8^2*x9 + x2^2*x3*x4*x8*x9^2 + -x2^2*x3*x4*x8*x9 + -x2^2*x3*x5^3*x6^2*x7*x8*x9 + x2^2*x3*x5^3*x6^2*x7*x8 + x2^2*x3*x5^3*x6^2*x7*x9 + -x2^2*x3*x5^3*x6^2*x7 + x2^2*x3*x5^3*x6^2*x8*x9 + -x2^2*x3*x5^3*x6^2*x8 + -x2^2*x3*x5^3*x6^2*x9 + x2^2*x3*x5^3*x6^2 + x2^2*x3*x5^3*x7*x8*x9 + -x2^2*x3*x5^3*x7*x8 + -x2^2*x3*x5^3*x7*x9 + x2^2*x3*x5^3*x7 + -x2^2*x3*x5^3*x8*x9 + x2^2*x3*x5^3*x8 + x2^2*x3*x5^3*x9 + -x2^2*x3*x5^3 + x2^2*x3*x5^2*x6^2*x7*x8*x9 + -x2^2*x3*x5^2*x6^2*x7*x8 + -x2^2*x3*x5^2*x6^2*x7*x9 + x2^2*x3*x5^2*x6^2*x7 + -x2^2*x3*x5^2*x6^2*x8*x9 + x2^2*x3*x5^2*x6^2*x8 + x2^2*x3*x5^2*x6^2*x9 + -x2^2*x3*x5^2*x6^2 + -x2^2*x3*x5^2*x6*x7^2*x8*x9 + x2^2*x3*x5^2*x6*x7^2*x8 + x2^2*x3*x5^2*x6*x7^2*x9 + -x2^2*x3*x5^2*x6*x7^2 + x2^2*x3*x5^2*x6*x7*x8*x9 + -x2^2*x3*x5^2*x6*x7*x8 + -x2^2*x3*x5^2*x6*x7*x9 + x2^2*x3*x5^2*x6*x7 + x2^2*x3*x5^2*x7^2*x8*x9 + -x2^2*x3*x5^2*x7^2*x8 + -x2^2*x3*x5^2*x7^2*x9 + x2^2*x3*x5^2*x7^2 + -2*x2^2*x3*x5^2*x7*x8*x9 + 2*x2^2*x3*x5^2*x7*x8 + 2*x2^2*x3*x5^2*x7*x9 + -2*x2^2*x3*x5^2*x7 + x2^2*x3*x5^2*x8*x9 + -x2^2*x3*x5^2*x8 + -x2^2*x3*x5^2*x9 + x2^2*x3*x5^2 + -x2^2*x3*x5*x6*x7*x8^2*x9^2 + x2^2*x3*x5*x6*x7*x8^2*x9 + x2^2*x3*x5*x6*x7*x8*x9^2 + -x2^2*x3*x5*x6*x7*x8*x9 + x2^2*x3*x5*x6*x8^2*x9^2 + -x2^2*x3*x5*x6*x8^2*x9 + -x2^2*x3*x5*x6*x8*x9^2 + x2^2*x3*x5*x6*x8*x9 + x2^2*x3*x5*x7*x8^2*x9^2 + -x2^2*x3*x5*x7*x8^2*x9 + -x2^2*x3*x5*x7*x8*x9^2 + x2^2*x3*x5*x7*x8*x9 + -x2^2*x3*x5*x8^2*x9^2 + x2^2*x3*x5*x8^2*x9 + x2^2*x3*x5*x8*x9^2 + -x2^2*x3*x5*x8*x9 + x2^2*x3*x6*x7^2*x8*x9 + -x2^2*x3*x6*x7^2*x8 + -x2^2*x3*x6*x7^2*x9 + x2^2*x3*x6*x7^2 + x2^2*x3*x6*x7*x8^2*x9^2 + -x2^2*x3*x6*x7*x8^2*x9 + -x2^2*x3*x6*x7*x8*x9^2 + x2^2*x3*x6*x7*x8 + x2^2*x3*x6*x7*x9 + -x2^2*x3*x6*x7 + -x2^2*x3*x6*x8^2*x9^2 + x2^2*x3*x6*x8^2*x9 + x2^2*x3*x6*x8*x9^2 + -x2^2*x3*x6*x8*x9 + -x2^2*x3*x7^2*x8*x9 + x2^2*x3*x7^2*x8 + x2^2*x3*x7^2*x9 + -x2^2*x3*x7^2 + -x2^2*x3*x7*x8^2*x9^2 + x2^2*x3*x7*x8^2*x9 + x2^2*x3*x7*x8*x9^2 + -x2^2*x3*x7*x8 + -x2^2*x3*x7*x9 + x2^2*x3*x7 + x2^2*x3*x8^2*x9^2 + -x2^2*x3*x8^2*x9 + -x2^2*x3*x8*x9^2 + x2^2*x3*x8*x9 + -x2^2*x4^2*x5*x6*x7^2*x8*x9 + x2^2*x4^2*x5*x6*x7^2*x8 + x2^2*x4^2*x5*x6*x7^2*x9 + -x2^2*x4^2*x5*x6*x7^2 + x2^2*x4^2*x5*x6*x7*x8*x9 + -x2^2*x4^2*x5*x6*x7*x8 + -x2^2*x4^2*x5*x6*x7*x9 + x2^2*x4^2*x5*x6*x7 + x2^2*x4^2*x5*x7^2*x8*x9 + -x2^2*x4^2*x5*x7^2*x8 + -x2^2*x4^2*x5*x7^2*x9 + x2^2*x4^2*x5*x7^2 + -x2^2*x4^2*x5*x7*x8*x9 + x2^2*x4^2*x5*x7*x8 + x2^2*x4^2*x5*x7*x9 + -x2^2*x4^2*x5*x7 + x2^2*x4^2*x6*x7^2*x8*x9 + -x2^2*x4^2*x6*x7^2*x8 + -x2^2*x4^2*x6*x7^2*x9 + x2^2*x4^2*x6*x7^2 + -x2^2*x4^2*x6*x7*x8*x9 + x2^2*x4^2*x6*x7*x8 + x2^2*x4^2*x6*x7*x9 + -x2^2*x4^2*x6*x7 + -x2^2*x4^2*x7^2*x8*x9 + x2^2*x4^2*x7^2*x8 + x2^2*x4^2*x7^2*x9 + -x2^2*x4^2*x7^2 + x2^2*x4^2*x7*x8*x9 + -x2^2*x4^2*x7*x8 + -x2^2*x4^2*x7*x9 + x2^2*x4^2*x7 + -x2^2*x4*x5^3*x6^2*x7*x8*x9 + x2^2*x4*x5^3*x6^2*x7*x8 + x2^2*x4*x5^3*x6^2*x7*x9 + -x2^2*x4*x5^3*x6^2*x7 + x2^2*x4*x5^3*x6^2*x8*x9 + -x2^2*x4*x5^3*x6^2*x8 + -x2^2*x4*x5^3*x6^2*x9 + x2^2*x4*x5^3*x6^2 + x2^2*x4*x5^3*x7*x8*x9 + -x2^2*x4*x5^3*x7*x8 + -x2^2*x4*x5^3*x7*x9 + x2^2*x4*x5^3*x7 + -x2^2*x4*x5^3*x8*x9 + x2^2*x4*x5^3*x8 + x2^2*x4*x5^3*x9 + -x2^2*x4*x5^3 + x2^2*x4*x5^2*x6^2*x7*x8*x9 + -x2^2*x4*x5^2*x6^2*x7*x8 + -x2^2*x4*x5^2*x6^2*x7*x9 + x2^2*x4*x5^2*x6^2*x7 + -x2^2*x4*x5^2*x6^2*x8*x9 + x2^2*x4*x5^2*x6^2*x8 + x2^2*x4*x5^2*x6^2*x9 + -x2^2*x4*x5^2*x6^2 + -x2^2*x4*x5^2*x6*x7^2*x8*x9 + x2^2*x4*x5^2*x6*x7^2*x8 + x2^2*x4*x5^2*x6*x7^2*x9 + -x2^2*x4*x5^2*x6*x7^2 + x2^2*x4*x5^2*x6*x7*x8*x9 + -x2^2*x4*x5^2*x6*x7*x8 + -x2^2*x4*x5^2*x6*x7*x9 + x2^2*x4*x5^2*x6*x7 + x2^2*x4*x5^2*x7^2*x8*x9 + -x2^2*x4*x5^2*x7^2*x8 + -x2^2*x4*x5^2*x7^2*x9 + x2^2*x4*x5^2*x7^2 + -2*x2^2*x4*x5^2*x7*x8*x9 + 2*x2^2*x4*x5^2*x7*x8 + 2*x2^2*x4*x5^2*x7*x9 + -2*x2^2*x4*x5^2*x7 + x2^2*x4*x5^2*x8*x9 + -x2^2*x4*x5^2*x8 + -x2^2*x4*x5^2*x9 + x2^2*x4*x5^2 + x2^2*x4*x5*x6*x7^2*x8*x9 + -x2^2*x4*x5*x6*x7^2*x8 + -x2^2*x4*x5*x6*x7^2*x9 + x2^2*x4*x5*x6*x7^2 + -x2^2*x4*x5*x6*x7*x8^2*x9^2 + x2^2*x4*x5*x6*x7*x8^2*x9 + x2^2*x4*x5*x6*x7*x8*x9^2 + -2*x2^2*x4*x5*x6*x7*x8*x9 + x2^2*x4*x5*x6*x7*x8 + x2^2*x4*x5*x6*x7*x9 + -x2^2*x4*x5*x6*x7 + x2^2*x4*x5*x6*x8^2*x9^2 + -x2^2*x4*x5*x6*x8^2*x9 + -x2^2*x4*x5*x6*x8*x9^2 + x2^2*x4*x5*x6*x8*x9 + -x2^2*x4*x5*x7^2*x8*x9 + x2^2*x4*x5*x7^2*x8 + x2^2*x4*x5*x7^2*x9 + -x2^2*x4*x5*x7^2 + x2^2*x4*x5*x7*x8^2*x9^2 + -x2^2*x4*x5*x7*x8^2*x9 + -x2^2*x4*x5*x7*x8*x9^2 + 2*x2^2*x4*x5*x7*x8*x9 + -x2^2*x4*x5*x7*x8 + -x2^2*x4*x5*x7*x9 + x2^2*x4*x5*x7 + -x2^2*x4*x5*x8^2*x9^2 + x2^2*x4*x5*x8^2*x9 + x2^2*x4*x5*x8*x9^2 + -x2^2*x4*x5*x8*x9 + x2^2*x4*x6*x7*x8^2*x9^2 + -x2^2*x4*x6*x7*x8^2*x9 + -x2^2*x4*x6*x7*x8*x9^2 + x2^2*x4*x6*x7*x8*x9 + -x2^2*x4*x6*x8^2*x9^2 + x2^2*x4*x6*x8^2*x9 + x2^2*x4*x6*x8*x9^2 + -x2^2*x4*x6*x8*x9 + -x2^2*x4*x7*x8^2*x9^2 + x2^2*x4*x7*x8^2*x9 + x2^2*x4*x7*x8*x9^2 + -x2^2*x4*x7*x8*x9 + x2^2*x4*x8^2*x9^2 + -x2^2*x4*x8^2*x9 + -x2^2*x4*x8*x9^2 + x2^2*x4*x8*x9 + x2^2*x5^3*x6^2*x7*x8*x9 + -x2^2*x5^3*x6^2*x7*x8 + -x2^2*x5^3*x6^2*x7*x9 + x2^2*x5^3*x6^2*x7 + -x2^2*x5^3*x6^2*x8*x9 + x2^2*x5^3*x6^2*x8 + x2^2*x5^3*x6^2*x9 + -x2^2*x5^3*x6^2 + -x2^2*x5^3*x7*x8*x9 + x2^2*x5^3*x7*x8 + x2^2*x5^3*x7*x9 + -x2^2*x5^3*x7 + x2^2*x5^3*x8*x9 + -x2^2*x5^3*x8 + -x2^2*x5^3*x9 + x2^2*x5^3 + -x2^2*x5^2*x6^2*x7*x8*x9 + x2^2*x5^2*x6^2*x7*x8 + x2^2*x5^2*x6^2*x7*x9 + -x2^2*x5^2*x6^2*x7 + x2^2*x5^2*x6^2*x8*x9 + -x2^2*x5^2*x6^2*x8 + -x2^2*x5^2*x6^2*x9 + x2^2*x5^2*x6^2 + x2^2*x5^2*x6*x7^2*x8*x9 + -x2^2*x5^2*x6*x7^2*x8 + -x2^2*x5^2*x6*x7^2*x9 + x2^2*x5^2*x6*x7^2 + -x2^2*x5^2*x6*x7*x8*x9 + x2^2*x5^2*x6*x7*x8 + x2^2*x5^2*x6*x7*x9 + -x2^2*x5^2*x6*x7 + -x2^2*x5^2*x7^2*x8*x9 + x2^2*x5^2*x7^2*x8 + x2^2*x5^2*x7^2*x9 + -x2^2*x5^2*x7^2 + 2*x2^2*x5^2*x7*x8*x9 + -2*x2^2*x5^2*x7*x8 + -2*x2^2*x5^2*x7*x9 + 2*x2^2*x5^2*x7 + -x2^2*x5^2*x8*x9 + x2^2*x5^2*x8 + x2^2*x5^2*x9 + -x2^2*x5^2 + x2^2*x5*x6*x7*x8^2*x9^2 + -x2^2*x5*x6*x7*x8^2*x9 + -x2^2*x5*x6*x7*x8*x9^2 + x2^2*x5*x6*x7*x8*x9 + -x2^2*x5*x6*x8^2*x9^2 + x2^2*x5*x6*x8^2*x9 + x2^2*x5*x6*x8*x9^2 + -x2^2*x5*x6*x8*x9 + -x2^2*x5*x7*x8^2*x9^2 + x2^2*x5*x7*x8^2*x9 + x2^2*x5*x7*x8*x9^2 + -x2^2*x5*x7*x8*x9 + x2^2*x5*x8^2*x9^2 + -x2^2*x5*x8^2*x9 + -x2^2*x5*x8*x9^2 + x2^2*x5*x8*x9 + -x2^2*x6*x7^2*x8*x9 + x2^2*x6*x7^2*x8 + x2^2*x6*x7^2*x9 + -x2^2*x6*x7^2 + -x2^2*x6*x7*x8^2*x9^2 + x2^2*x6*x7*x8^2*x9 + x2^2*x6*x7*x8*x9^2 + -x2^2*x6*x7*x8 + -x2^2*x6*x7*x9 + x2^2*x6*x7 + x2^2*x6*x8^2*x9^2 + -x2^2*x6*x8^2*x9 + -x2^2*x6*x8*x9^2 + x2^2*x6*x8*x9 + x2^2*x7^2*x8*x9 + -x2^2*x7^2*x8 + -x2^2*x7^2*x9 + x2^2*x7^2 + x2^2*x7*x8^2*x9^2 + -x2^2*x7*x8^2*x9 + -x2^2*x7*x8*x9^2 + x2^2*x7*x8 + x2^2*x7*x9 + -x2^2*x7 + -x2^2*x8^2*x9^2 + x2^2*x8^2*x9 + x2^2*x8*x9^2 + -x2^2*x8*x9 + x2*x3^4*x4^3*x5*x6*x7*x8*x9 + -x2*x3^4*x4^3*x5*x6*x7*x8 + -x2*x3^4*x4^3*x5*x6*x7*x9 + x2*x3^4*x4^3*x5*x6*x7 + -x2*x3^4*x4^3*x5*x6*x8*x9 + x2*x3^4*x4^3*x5*x6*x8 + x2*x3^4*x4^3*x5*x6*x9 + -x2*x3^4*x4^3*x5*x6 + -x2*x3^4*x4^3*x5*x7*x8*x9 + x2*x3^4*x4^3*x5*x7*x8 + x2*x3^4*x4^3*x5*x7*x9 + -x2*x3^4*x4^3*x5*x7 + x2*x3^4*x4^3*x5*x8*x9 + -x2*x3^4*x4^3*x5*x8 + -x2*x3^4*x4^3*x5*x9 + x2*x3^4*x4^3*x5 + -x2*x3^4*x4^3*x6*x7*x8*x9 + x2*x3^4*x4^3*x6*x7*x8 + x2*x3^4*x4^3*x6*x7*x9 + -x2*x3^4*x4^3*x6*x7 + x2*x3^4*x4^3*x6*x8*x9 + -x2*x3^4*x4^3*x6*x8 + -x2*x3^4*x4^3*x6*x9 + x2*x3^4*x4^3*x6 + x2*x3^4*x4^3*x7*x8*x9 + -x2*x3^4*x4^3*x7*x8 + -x2*x3^4*x4^3*x7*x9 + x2*x3^4*x4^3*x7 + -x2*x3^4*x4^3*x8*x9 + x2*x3^4*x4^3*x8 + x2*x3^4*x4^3*x9 + -x2*x3^4*x4^3 + -x2*x3^4*x5*x6*x7*x8*x9 + x2*x3^4*x5*x6*x7*x8 + x2*x3^4*x5*x6*x7*x9 + -x2*x3^4*x5*x6*x7 + x2*x3^4*x5*x6*x8*x9 + -x2*x3^4*x5*x6*x8 + -x2*x3^4*x5*x6*x9 + x2*x3^4*x5*x6 + x2*x3^4*x5*x7*x8*x9 + -x2*x3^4*x5*x7*x8 + -x2*x3^4*x5*x7*x9 + x2*x3^4*x5*x7 + -x2*x3^4*x5*x8*x9 + x2*x3^4*x5*x8 + x2*x3^4*x5*x9 + -x2*x3^4*x5 + x2*x3^4*x6*x7*x8*x9 + -x2*x3^4*x6*x7*x8 + -x2*x3^4*x6*x7*x9 + x2*x3^4*x6*x7 + -x2*x3^4*x6*x8*x9 + x2*x3^4*x6*x8 + x2*x3^4*x6*x9 + -x2*x3^4*x6 + -x2*x3^4*x7*x8*x9 + x2*x3^4*x7*x8 + x2*x3^4*x7*x9 + -x2*x3^4*x7 + x2*x3^4*x8*x9 + -x2*x3^4*x8 + -x2*x3^4*x9 + x2*x3^4 + x2*x3^3*x4^2*x5*x6*x7*x8^2*x9 + -x2*x3^3*x4^2*x5*x6*x7*x8^2 + x2*x3^3*x4^2*x5*x6*x7*x8*x9^2 + -2*x2*x3^3*x4^2*x5*x6*x7*x8*x9 + x2*x3^3*x4^2*x5*x6*x7*x8 + -x2*x3^3*x4^2*x5*x6*x7*x9^2 + x2*x3^3*x4^2*x5*x6*x7*x9 + -x2*x3^3*x4^2*x5*x6*x8^2*x9 + x2*x3^3*x4^2*x5*x6*x8^2 + -x2*x3^3*x4^2*x5*x6*x8*x9^2 + 2*x2*x3^3*x4^2*x5*x6*x8*x9 + -x2*x3^3*x4^2*x5*x6*x8 + x2*x3^3*x4^2*x5*x6*x9^2 + -x2*x3^3*x4^2*x5*x6*x9 + -x2*x3^3*x4^2*x5*x7*x8^2*x9 + x2*x3^3*x4^2*x5*x7*x8^2 + -x2*x3^3*x4^2*x5*x7*x8*x9^2 + 2*x2*x3^3*x4^2*x5*x7*x8*x9 + -x2*x3^3*x4^2*x5*x7*x8 + x2*x3^3*x4^2*x5*x7*x9^2 + -x2*x3^3*x4^2*x5*x7*x9 + x2*x3^3*x4^2*x5*x8^2*x9 + -x2*x3^3*x4^2*x5*x8^2 + x2*x3^3*x4^2*x5*x8*x9^2 + -2*x2*x3^3*x4^2*x5*x8*x9 + x2*x3^3*x4^2*x5*x8 + -x2*x3^3*x4^2*x5*x9^2 + x2*x3^3*x4^2*x5*x9 + -x2*x3^3*x4^2*x6*x7*x8^2*x9 + x2*x3^3*x4^2*x6*x7*x8^2 + -x2*x3^3*x4^2*x6*x7*x8*x9^2 + 2*x2*x3^3*x4^2*x6*x7*x8*x9 + -x2*x3^3*x4^2*x6*x7*x8 + x2*x3^3*x4^2*x6*x7*x9^2 + -x2*x3^3*x4^2*x6*x7*x9 + x2*x3^3*x4^2*x6*x8^2*x9 + -x2*x3^3*x4^2*x6*x8^2 + x2*x3^3*x4^2*x6*x8*x9^2 + -2*x2*x3^3*x4^2*x6*x8*x9 + x2*x3^3*x4^2*x6*x8 + -x2*x3^3*x4^2*x6*x9^2 + x2*x3^3*x4^2*x6*x9 + x2*x3^3*x4^2*x7*x8^2*x9 + -x2*x3^3*x4^2*x7*x8^2 + x2*x3^3*x4^2*x7*x8*x9^2 + -2*x2*x3^3*x4^2*x7*x8*x9 + x2*x3^3*x4^2*x7*x8 + -x2*x3^3*x4^2*x7*x9^2 + x2*x3^3*x4^2*x7*x9 + -x2*x3^3*x4^2*x8^2*x9 + x2*x3^3*x4^2*x8^2 + -x2*x3^3*x4^2*x8*x9^2 + 2*x2*x3^3*x4^2*x8*x9 + -x2*x3^3*x4^2*x8 + x2*x3^3*x4^2*x9^2 + -x2*x3^3*x4^2*x9 + x2*x3^3*x4*x5*x6^3*x7*x8*x9 + -x2*x3^3*x4*x5*x6^3*x7*x8 + -x2*x3^3*x4*x5*x6^3*x7*x9 + x2*x3^3*x4*x5*x6^3*x7 + -x2*x3^3*x4*x5*x6^3*x8*x9 + x2*x3^3*x4*x5*x6^3*x8 + x2*x3^3*x4*x5*x6^3*x9 + -x2*x3^3*x4*x5*x6^3 + x2*x3^3*x4*x5*x6^2*x7^2*x8*x9 + -x2*x3^3*x4*x5*x6^2*x7^2*x8 + -x2*x3^3*x4*x5*x6^2*x7^2*x9 + x2*x3^3*x4*x5*x6^2*x7^2 + -x2*x3^3*x4*x5*x6^2*x7*x8*x9 + x2*x3^3*x4*x5*x6^2*x7*x8 + x2*x3^3*x4*x5*x6^2*x7*x9 + -x2*x3^3*x4*x5*x6^2*x7 + -x2*x3^3*x4*x5*x6*x7*x8*x9 + x2*x3^3*x4*x5*x6*x7*x8 + x2*x3^3*x4*x5*x6*x7*x9 + -x2*x3^3*x4*x5*x6*x7 + x2*x3^3*x4*x5*x6*x8*x9 + -x2*x3^3*x4*x5*x6*x8 + -x2*x3^3*x4*x5*x6*x9 + x2*x3^3*x4*x5*x6 + -x2*x3^3*x4*x5*x7^2*x8*x9 + x2*x3^3*x4*x5*x7^2*x8 + x2*x3^3*x4*x5*x7^2*x9 + -x2*x3^3*x4*x5*x7^2 + x2*x3^3*x4*x5*x7*x8*x9 + -x2*x3^3*x4*x5*x7*x8 + -x2*x3^3*x4*x5*x7*x9 + x2*x3^3*x4*x5*x7 + -x2*x3^3*x4*x6^3*x7*x8*x9 + x2*x3^3*x4*x6^3*x7*x8 + x2*x3^3*x4*x6^3*x7*x9 + -x2*x3^3*x4*x6^3*x7 + x2*x3^3*x4*x6^3*x8*x9 + -x2*x3^3*x4*x6^3*x8 + -x2*x3^3*x4*x6^3*x9 + x2*x3^3*x4*x6^3 + -x2*x3^3*x4*x6^2*x7^2*x8*x9 + x2*x3^3*x4*x6^2*x7^2*x8 + x2*x3^3*x4*x6^2*x7^2*x9 + -x2*x3^3*x4*x6^2*x7^2 + x2*x3^3*x4*x6^2*x7*x8*x9 + -x2*x3^3*x4*x6^2*x7*x8 + -x2*x3^3*x4*x6^2*x7*x9 + x2*x3^3*x4*x6^2*x7 + x2*x3^3*x4*x6*x7*x8*x9 + -x2*x3^3*x4*x6*x7*x8 + -x2*x3^3*x4*x6*x7*x9 + x2*x3^3*x4*x6*x7 + -x2*x3^3*x4*x6*x8*x9 + x2*x3^3*x4*x6*x8 + x2*x3^3*x4*x6*x9 + -x2*x3^3*x4*x6 + x2*x3^3*x4*x7^2*x8*x9 + -x2*x3^3*x4*x7^2*x8 + -x2*x3^3*x4*x7^2*x9 + x2*x3^3*x4*x7^2 + -x2*x3^3*x4*x7*x8*x9 + x2*x3^3*x4*x7*x8 + x2*x3^3*x4*x7*x9 + -x2*x3^3*x4*x7 + -x2*x3^3*x5*x6^3*x7*x8*x9 + x2*x3^3*x5*x6^3*x7*x8 + x2*x3^3*x5*x6^3*x7*x9 + -x2*x3^3*x5*x6^3*x7 + x2*x3^3*x5*x6^3*x8*x9 + -x2*x3^3*x5*x6^3*x8 + -x2*x3^3*x5*x6^3*x9 + x2*x3^3*x5*x6^3 + -x2*x3^3*x5*x6^2*x7^2*x8*x9 + x2*x3^3*x5*x6^2*x7^2*x8 + x2*x3^3*x5*x6^2*x7^2*x9 + -x2*x3^3*x5*x6^2*x7^2 + x2*x3^3*x5*x6^2*x7*x8*x9 + -x2*x3^3*x5*x6^2*x7*x8 + -x2*x3^3*x5*x6^2*x7*x9 + x2*x3^3*x5*x6^2*x7 + -x2*x3^3*x5*x6*x7*x8^2*x9 + x2*x3^3*x5*x6*x7*x8^2 + -x2*x3^3*x5*x6*x7*x8*x9^2 + 3*x2*x3^3*x5*x6*x7*x8*x9 + -2*x2*x3^3*x5*x6*x7*x8 + x2*x3^3*x5*x6*x7*x9^2 + -2*x2*x3^3*x5*x6*x7*x9 + x2*x3^3*x5*x6*x7 + x2*x3^3*x5*x6*x8^2*x9 + -x2*x3^3*x5*x6*x8^2 + x2*x3^3*x5*x6*x8*x9^2 + -3*x2*x3^3*x5*x6*x8*x9 + 2*x2*x3^3*x5*x6*x8 + -x2*x3^3*x5*x6*x9^2 + 2*x2*x3^3*x5*x6*x9 + -x2*x3^3*x5*x6 + x2*x3^3*x5*x7^2*x8*x9 + -x2*x3^3*x5*x7^2*x8 + -x2*x3^3*x5*x7^2*x9 + x2*x3^3*x5*x7^2 + x2*x3^3*x5*x7*x8^2*x9 + -x2*x3^3*x5*x7*x8^2 + x2*x3^3*x5*x7*x8*x9^2 + -3*x2*x3^3*x5*x7*x8*x9 + 2*x2*x3^3*x5*x7*x8 + -x2*x3^3*x5*x7*x9^2 + 2*x2*x3^3*x5*x7*x9 + -x2*x3^3*x5*x7 + -x2*x3^3*x5*x8^2*x9 + x2*x3^3*x5*x8^2 + -x2*x3^3*x5*x8*x9^2 + 2*x2*x3^3*x5*x8*x9 + -x2*x3^3*x5*x8 + x2*x3^3*x5*x9^2 + -x2*x3^3*x5*x9 + x2*x3^3*x6^3*x7*x8*x9 + -x2*x3^3*x6^3*x7*x8 + -x2*x3^3*x6^3*x7*x9 + x2*x3^3*x6^3*x7 + -x2*x3^3*x6^3*x8*x9 + x2*x3^3*x6^3*x8 + x2*x3^3*x6^3*x9 + -x2*x3^3*x6^3 + x2*x3^3*x6^2*x7^2*x8*x9 + -x2*x3^3*x6^2*x7^2*x8 + -x2*x3^3*x6^2*x7^2*x9 + x2*x3^3*x6^2*x7^2 + -x2*x3^3*x6^2*x7*x8*x9 + x2*x3^3*x6^2*x7*x8 + x2*x3^3*x6^2*x7*x9 + -x2*x3^3*x6^2*x7 + x2*x3^3*x6*x7*x8^2*x9 + -x2*x3^3*x6*x7*x8^2 + x2*x3^3*x6*x7*x8*x9^2 + -3*x2*x3^3*x6*x7*x8*x9 + 2*x2*x3^3*x6*x7*x8 + -x2*x3^3*x6*x7*x9^2 + 2*x2*x3^3*x6*x7*x9 + -x2*x3^3*x6*x7 + -x2*x3^3*x6*x8^2*x9 + x2*x3^3*x6*x8^2 + -x2*x3^3*x6*x8*x9^2 + 3*x2*x3^3*x6*x8*x9 + -2*x2*x3^3*x6*x8 + x2*x3^3*x6*x9^2 + -2*x2*x3^3*x6*x9 + x2*x3^3*x6 + -x2*x3^3*x7^2*x8*x9 + x2*x3^3*x7^2*x8 + x2*x3^3*x7^2*x9 + -x2*x3^3*x7^2 + -x2*x3^3*x7*x8^2*x9 + x2*x3^3*x7*x8^2 + -x2*x3^3*x7*x8*x9^2 + 3*x2*x3^3*x7*x8*x9 + -2*x2*x3^3*x7*x8 + x2*x3^3*x7*x9^2 + -2*x2*x3^3*x7*x9 + x2*x3^3*x7 + x2*x3^3*x8^2*x9 + -x2*x3^3*x8^2 + x2*x3^3*x8*x9^2 + -2*x2*x3^3*x8*x9 + x2*x3^3*x8 + -x2*x3^3*x9^2 + x2*x3^3*x9 + x2*x3^2*x4^2*x5^2*x6*x7*x8*x9 + -x2*x3^2*x4^2*x5^2*x6*x7*x8 + -x2*x3^2*x4^2*x5^2*x6*x7*x9 + x2*x3^2*x4^2*x5^2*x6*x7 + -x2*x3^2*x4^2*x5^2*x6*x8*x9 + x2*x3^2*x4^2*x5^2*x6*x8 + x2*x3^2*x4^2*x5^2*x6*x9 + -x2*x3^2*x4^2*x5^2*x6 + -x2*x3^2*x4^2*x5^2*x7*x8*x9 + x2*x3^2*x4^2*x5^2*x7*x8 + x2*x3^2*x4^2*x5^2*x7*x9 + -x2*x3^2*x4^2*x5^2*x7 + x2*x3^2*x4^2*x5^2*x8*x9 + -x2*x3^2*x4^2*x5^2*x8 + -x2*x3^2*x4^2*x5^2*x9 + x2*x3^2*x4^2*x5^2 + x2*x3^2*x4^2*x5*x6*x7^3*x8*x9 + -x2*x3^2*x4^2*x5*x6*x7^3*x8 + -x2*x3^2*x4^2*x5*x6*x7^3*x9 + x2*x3^2*x4^2*x5*x6*x7^3 + -2*x2*x3^2*x4^2*x5*x6*x7*x8*x9 + 2*x2*x3^2*x4^2*x5*x6*x7*x8 + 2*x2*x3^2*x4^2*x5*x6*x7*x9 + -2*x2*x3^2*x4^2*x5*x6*x7 + x2*x3^2*x4^2*x5*x6*x8*x9 + -x2*x3^2*x4^2*x5*x6*x8 + -x2*x3^2*x4^2*x5*x6*x9 + x2*x3^2*x4^2*x5*x6 + -x2*x3^2*x4^2*x5*x7^3*x8*x9 + x2*x3^2*x4^2*x5*x7^3*x8 + x2*x3^2*x4^2*x5*x7^3*x9 + -x2*x3^2*x4^2*x5*x7^3 + 2*x2*x3^2*x4^2*x5*x7*x8*x9 + -2*x2*x3^2*x4^2*x5*x7*x8 + -2*x2*x3^2*x4^2*x5*x7*x9 + 2*x2*x3^2*x4^2*x5*x7 + -x2*x3^2*x4^2*x5*x8*x9 + x2*x3^2*x4^2*x5*x8 + x2*x3^2*x4^2*x5*x9 + -x2*x3^2*x4^2*x5 + -x2*x3^2*x4^2*x6*x7^3*x8*x9 + x2*x3^2*x4^2*x6*x7^3*x8 + x2*x3^2*x4^2*x6*x7^3*x9 + -x2*x3^2*x4^2*x6*x7^3 + x2*x3^2*x4^2*x6*x7*x8*x9 + -x2*x3^2*x4^2*x6*x7*x8 + -x2*x3^2*x4^2*x6*x7*x9 + x2*x3^2*x4^2*x6*x7 + x2*x3^2*x4^2*x7^3*x8*x9 + -x2*x3^2*x4^2*x7^3*x8 + -x2*x3^2*x4^2*x7^3*x9 + x2*x3^2*x4^2*x7^3 + -x2*x3^2*x4^2*x7*x8*x9 + x2*x3^2*x4^2*x7*x8 + x2*x3^2*x4^2*x7*x9 + -x2*x3^2*x4^2*x7 + x2*x3^2*x4*x5^2*x6^2*x7*x8*x9 + -x2*x3^2*x4*x5^2*x6^2*x7*x8 + -x2*x3^2*x4*x5^2*x6^2*x7*x9 + x2*x3^2*x4*x5^2*x6^2*x7 + -x2*x3^2*x4*x5^2*x6^2*x8*x9 + x2*x3^2*x4*x5^2*x6^2*x8 + x2*x3^2*x4*x5^2*x6^2*x9 + -x2*x3^2*x4*x5^2*x6^2 + x2*x3^2*x4*x5^2*x6*x7^2*x8*x9 + -x2*x3^2*x4*x5^2*x6*x7^2*x8 + -x2*x3^2*x4*x5^2*x6*x7^2*x9 + x2*x3^2*x4*x5^2*x6*x7^2 + -2*x2*x3^2*x4*x5^2*x6*x7*x8*x9 + 2*x2*x3^2*x4*x5^2*x6*x7*x8 + 2*x2*x3^2*x4*x5^2*x6*x7*x9 + -2*x2*x3^2*x4*x5^2*x6*x7 + x2*x3^2*x4*x5^2*x6*x8*x9 + -x2*x3^2*x4*x5^2*x6*x8 + -x2*x3^2*x4*x5^2*x6*x9 + x2*x3^2*x4*x5^2*x6 + -x2*x3^2*x4*x5^2*x7^2*x8*x9 + x2*x3^2*x4*x5^2*x7^2*x8 + x2*x3^2*x4*x5^2*x7^2*x9 + -x2*x3^2*x4*x5^2*x7^2 + x2*x3^2*x4*x5^2*x7*x8*x9 + -x2*x3^2*x4*x5^2*x7*x8 + -x2*x3^2*x4*x5^2*x7*x9 + x2*x3^2*x4*x5^2*x7 + x2*x3^2*x4*x5*x6^3*x7^2*x8*x9 + -x2*x3^2*x4*x5*x6^3*x7^2*x8 + -x2*x3^2*x4*x5*x6^3*x7^2*x9 + x2*x3^2*x4*x5*x6^3*x7^2 + -x2*x3^2*x4*x5*x6^3*x7*x8*x9 + x2*x3^2*x4*x5*x6^3*x7*x8 + x2*x3^2*x4*x5*x6^3*x7*x9 + -x2*x3^2*x4*x5*x6^3*x7 + -x2*x3^2*x4*x5*x6^2*x7^2*x8*x9 + x2*x3^2*x4*x5*x6^2*x7^2*x8 + x2*x3^2*x4*x5*x6^2*x7^2*x9 + -x2*x3^2*x4*x5*x6^2*x7^2 + x2*x3^2*x4*x5*x6^2*x8*x9 + -x2*x3^2*x4*x5*x6^2*x8 + -x2*x3^2*x4*x5*x6^2*x9 + x2*x3^2*x4*x5*x6^2 + x2*x3^2*x4*x5*x6*x7^2*x8^2*x9 + -x2*x3^2*x4*x5*x6*x7^2*x8^2 + x2*x3^2*x4*x5*x6*x7^2*x8*x9^2 + -4*x2*x3^2*x4*x5*x6*x7^2*x8*x9 + 3*x2*x3^2*x4*x5*x6*x7^2*x8 + -x2*x3^2*x4*x5*x6*x7^2*x9^2 + 3*x2*x3^2*x4*x5*x6*x7^2*x9 + -2*x2*x3^2*x4*x5*x6*x7^2 + x2*x3^2*x4*x5*x6*x7*x8^2*x9^2 + -2*x2*x3^2*x4*x5*x6*x7*x8^2*x9 + x2*x3^2*x4*x5*x6*x7*x8^2 + -2*x2*x3^2*x4*x5*x6*x7*x8*x9^2 + 6*x2*x3^2*x4*x5*x6*x7*x8*x9 + -4*x2*x3^2*x4*x5*x6*x7*x8 + x2*x3^2*x4*x5*x6*x7*x9^2 + -4*x2*x3^2*x4*x5*x6*x7*x9 + 3*x2*x3^2*x4*x5*x6*x7 + -x2*x3^2*x4*x5*x6*x8^2*x9^2 + x2*x3^2*x4*x5*x6*x8^2*x9 + x2*x3^2*x4*x5*x6*x8*x9^2 + -2*x2*x3^2*x4*x5*x6*x8*x9 + x2*x3^2*x4*x5*x6*x8 + x2*x3^2*x4*x5*x6*x9 + -x2*x3^2*x4*x5*x6 + -x2*x3^2*x4*x5*x7^2*x8^2*x9 + x2*x3^2*x4*x5*x7^2*x8^2 + -x2*x3^2*x4*x5*x7^2*x8*x9^2 + 4*x2*x3^2*x4*x5*x7^2*x8*x9 + -3*x2*x3^2*x4*x5*x7^2*x8 + x2*x3^2*x4*x5*x7^2*x9^2 + -3*x2*x3^2*x4*x5*x7^2*x9 + 2*x2*x3^2*x4*x5*x7^2 + -x2*x3^2*x4*x5*x7*x8^2*x9^2 + 2*x2*x3^2*x4*x5*x7*x8^2*x9 + -x2*x3^2*x4*x5*x7*x8^2 + 2*x2*x3^2*x4*x5*x7*x8*x9^2 + -5*x2*x3^2*x4*x5*x7*x8*x9 + 3*x2*x3^2*x4*x5*x7*x8 + -x2*x3^2*x4*x5*x7*x9^2 + 3*x2*x3^2*x4*x5*x7*x9 + -2*x2*x3^2*x4*x5*x7 + x2*x3^2*x4*x5*x8^2*x9^2 + -x2*x3^2*x4*x5*x8^2*x9 + -x2*x3^2*x4*x5*x8*x9^2 + x2*x3^2*x4*x5*x8*x9 + -x2*x3^2*x4*x6^3*x7^2*x8*x9 + x2*x3^2*x4*x6^3*x7^2*x8 + x2*x3^2*x4*x6^3*x7^2*x9 + -x2*x3^2*x4*x6^3*x7^2 + x2*x3^2*x4*x6^3*x7*x8*x9 + -x2*x3^2*x4*x6^3*x7*x8 + -x2*x3^2*x4*x6^3*x7*x9 + x2*x3^2*x4*x6^3*x7 + x2*x3^2*x4*x6^2*x7^2*x8*x9 + -x2*x3^2*x4*x6^2*x7^2*x8 + -x2*x3^2*x4*x6^2*x7^2*x9 + x2*x3^2*x4*x6^2*x7^2 + -x2*x3^2*x4*x6^2*x7*x8*x9 + x2*x3^2*x4*x6^2*x7*x8 + x2*x3^2*x4*x6^2*x7*x9 + -x2*x3^2*x4*x6^2*x7 + -x2*x3^2*x4*x6*x7^2*x8^2*x9 + x2*x3^2*x4*x6*x7^2*x8^2 + -x2*x3^2*x4*x6*x7^2*x8*x9^2 + 3*x2*x3^2*x4*x6*x7^2*x8*x9 + -2*x2*x3^2*x4*x6*x7^2*x8 + x2*x3^2*x4*x6*x7^2*x9^2 + -2*x2*x3^2*x4*x6*x7^2*x9 + x2*x3^2*x4*x6*x7^2 + -x2*x3^2*x4*x6*x7*x8^2*x9^2 + 2*x2*x3^2*x4*x6*x7*x8^2*x9 + -x2*x3^2*x4*x6*x7*x8^2 + 2*x2*x3^2*x4*x6*x7*x8*x9^2 + -4*x2*x3^2*x4*x6*x7*x8*x9 + 2*x2*x3^2*x4*x6*x7*x8 + -x2*x3^2*x4*x6*x7*x9^2 + 2*x2*x3^2*x4*x6*x7*x9 + -x2*x3^2*x4*x6*x7 + x2*x3^2*x4*x6*x8^2*x9^2 + -x2*x3^2*x4*x6*x8^2*x9 + -x2*x3^2*x4*x6*x8*x9^2 + x2*x3^2*x4*x6*x8*x9 + x2*x3^2*x4*x7^2*x8^2*x9 + -x2*x3^2*x4*x7^2*x8^2 + x2*x3^2*x4*x7^2*x8*x9^2 + -3*x2*x3^2*x4*x7^2*x8*x9 + 2*x2*x3^2*x4*x7^2*x8 + -x2*x3^2*x4*x7^2*x9^2 + 2*x2*x3^2*x4*x7^2*x9 + -x2*x3^2*x4*x7^2 + x2*x3^2*x4*x7*x8^2*x9^2 + -2*x2*x3^2*x4*x7*x8^2*x9 + x2*x3^2*x4*x7*x8^2 + -2*x2*x3^2*x4*x7*x8*x9^2 + 4*x2*x3^2*x4*x7*x8*x9 + -2*x2*x3^2*x4*x7*x8 + x2*x3^2*x4*x7*x9^2 + -2*x2*x3^2*x4*x7*x9 + x2*x3^2*x4*x7 + -x2*x3^2*x4*x8^2*x9^2 + x2*x3^2*x4*x8^2*x9 + x2*x3^2*x4*x8*x9^2 + -x2*x3^2*x4*x8*x9 + -x2*x3^2*x5^2*x6^2*x7*x8*x9 + x2*x3^2*x5^2*x6^2*x7*x8 + x2*x3^2*x5^2*x6^2*x7*x9 + -x2*x3^2*x5^2*x6^2*x7 + x2*x3^2*x5^2*x6^2*x8*x9 + -x2*x3^2*x5^2*x6^2*x8 + -x2*x3^2*x5^2*x6^2*x9 + x2*x3^2*x5^2*x6^2 + -x2*x3^2*x5^2*x6*x7^2*x8*x9 + x2*x3^2*x5^2*x6*x7^2*x8 + x2*x3^2*x5^2*x6*x7^2*x9 + -x2*x3^2*x5^2*x6*x7^2 + x2*x3^2*x5^2*x6*x7*x8*x9 + -x2*x3^2*x5^2*x6*x7*x8 + -x2*x3^2*x5^2*x6*x7*x9 + x2*x3^2*x5^2*x6*x7 + x2*x3^2*x5^2*x7^2*x8*x9 + -x2*x3^2*x5^2*x7^2*x8 + -x2*x3^2*x5^2*x7^2*x9 + x2*x3^2*x5^2*x7^2 + -x2*x3^2*x5^2*x8*x9 + x2*x3^2*x5^2*x8 + x2*x3^2*x5^2*x9 + -x2*x3^2*x5^2 + -x2*x3^2*x5*x6^3*x7^2*x8*x9 + x2*x3^2*x5*x6^3*x7^2*x8 + x2*x3^2*x5*x6^3*x7^2*x9 + -x2*x3^2*x5*x6^3*x7^2 + x2*x3^2*x5*x6^3*x7*x8*x9 + -x2*x3^2*x5*x6^3*x7*x8 + -x2*x3^2*x5*x6^3*x7*x9 + x2*x3^2*x5*x6^3*x7 + x2*x3^2*x5*x6^2*x7^2*x8*x9 + -x2*x3^2*x5*x6^2*x7^2*x8 + -x2*x3^2*x5*x6^2*x7^2*x9 + x2*x3^2*x5*x6^2*x7^2 + -x2*x3^2*x5*x6^2*x8*x9 + x2*x3^2*x5*x6^2*x8 + x2*x3^2*x5*x6^2*x9 + -x2*x3^2*x5*x6^2 + -x2*x3^2*x5*x6*x7^3*x8*x9 + x2*x3^2*x5*x6*x7^3*x8 + x2*x3^2*x5*x6*x7^3*x9 + -x2*x3^2*x5*x6*x7^3 + -x2*x3^2*x5*x6*x7^2*x8^2*x9 + x2*x3^2*x5*x6*x7^2*x8^2 + -x2*x3^2*x5*x6*x7^2*x8*x9^2 + 4*x2*x3^2*x5*x6*x7^2*x8*x9 + -3*x2*x3^2*x5*x6*x7^2*x8 + x2*x3^2*x5*x6*x7^2*x9^2 + -3*x2*x3^2*x5*x6*x7^2*x9 + 2*x2*x3^2*x5*x6*x7^2 + -x2*x3^2*x5*x6*x7*x8^2*x9^2 + 2*x2*x3^2*x5*x6*x7*x8^2*x9 + -x2*x3^2*x5*x6*x7*x8^2 + 2*x2*x3^2*x5*x6*x7*x8*x9^2 + -4*x2*x3^2*x5*x6*x7*x8*x9 + 2*x2*x3^2*x5*x6*x7*x8 + -x2*x3^2*x5*x6*x7*x9^2 + 2*x2*x3^2*x5*x6*x7*x9 + -x2*x3^2*x5*x6*x7 + x2*x3^2*x5*x6*x8^2*x9^2 + -x2*x3^2*x5*x6*x8^2*x9 + -x2*x3^2*x5*x6*x8*x9^2 + x2*x3^2*x5*x6*x8*x9 + x2*x3^2*x5*x7^3*x8*x9 + -x2*x3^2*x5*x7^3*x8 + -x2*x3^2*x5*x7^3*x9 + x2*x3^2*x5*x7^3 + x2*x3^2*x5*x7^2*x8^2*x9 + -x2*x3^2*x5*x7^2*x8^2 + x2*x3^2*x5*x7^2*x8*x9^2 + -4*x2*x3^2*x5*x7^2*x8*x9 + 3*x2*x3^2*x5*x7^2*x8 + -x2*x3^2*x5*x7^2*x9^2 + 3*x2*x3^2*x5*x7^2*x9 + -2*x2*x3^2*x5*x7^2 + x2*x3^2*x5*x7*x8^2*x9^2 + -2*x2*x3^2*x5*x7*x8^2*x9 + x2*x3^2*x5*x7*x8^2 + -2*x2*x3^2*x5*x7*x8*x9^2 + 3*x2*x3^2*x5*x7*x8*x9 + -x2*x3^2*x5*x7*x8 + x2*x3^2*x5*x7*x9^2 + -x2*x3^2*x5*x7*x9 + -x2*x3^2*x5*x8^2*x9^2 + x2*x3^2*x5*x8^2*x9 + x2*x3^2*x5*x8*x9^2 + -x2*x3^2*x5*x8 + -x2*x3^2*x5*x9 + x2*x3^2*x5 + x2*x3^2*x6^3*x7^2*x8*x9 + -x2*x3^2*x6^3*x7^2*x8 + -x2*x3^2*x6^3*x7^2*x9 + x2*x3^2*x6^3*x7^2 + -x2*x3^2*x6^3*x7*x8*x9 + x2*x3^2*x6^3*x7*x8 + x2*x3^2*x6^3*x7*x9 + -x2*x3^2*x6^3*x7 + -x2*x3^2*x6^2*x7^2*x8*x9 + x2*x3^2*x6^2*x7^2*x8 + x2*x3^2*x6^2*x7^2*x9 + -x2*x3^2*x6^2*x7^2 + x2*x3^2*x6^2*x7*x8*x9 + -x2*x3^2*x6^2*x7*x8 + -x2*x3^2*x6^2*x7*x9 + x2*x3^2*x6^2*x7 + x2*x3^2*x6*x7^3*x8*x9 + -x2*x3^2*x6*x7^3*x8 + -x2*x3^2*x6*x7^3*x9 + x2*x3^2*x6*x7^3 + x2*x3^2*x6*x7^2*x8^2*x9 + -x2*x3^2*x6*x7^2*x8^2 + x2*x3^2*x6*x7^2*x8*x9^2 + -3*x2*x3^2*x6*x7^2*x8*x9 + 2*x2*x3^2*x6*x7^2*x8 + -x2*x3^2*x6*x7^2*x9^2 + 2*x2*x3^2*x6*x7^2*x9 + -x2*x3^2*x6*x7^2 + x2*x3^2*x6*x7*x8^2*x9^2 + -2*x2*x3^2*x6*x7*x8^2*x9 + x2*x3^2*x6*x7*x8^2 + -2*x2*x3^2*x6*x7*x8*x9^2 + 3*x2*x3^2*x6*x7*x8*x9 + -x2*x3^2*x6*x7*x8 + x2*x3^2*x6*x7*x9^2 + -x2*x3^2*x6*x7*x9 + -x2*x3^2*x6*x8^2*x9^2 + x2*x3^2*x6*x8^2*x9 + x2*x3^2*x6*x8*x9^2 + -x2*x3^2*x6*x8*x9 + -x2*x3^2*x7^3*x8*x9 + x2*x3^2*x7^3*x8 + x2*x3^2*x7^3*x9 + -x2*x3^2*x7^3 + -x2*x3^2*x7^2*x8^2*x9 + x2*x3^2*x7^2*x8^2 + -x2*x3^2*x7^2*x8*x9^2 + 3*x2*x3^2*x7^2*x8*x9 + -2*x2*x3^2*x7^2*x8 + x2*x3^2*x7^2*x9^2 + -2*x2*x3^2*x7^2*x9 + x2*x3^2*x7^2 + -x2*x3^2*x7*x8^2*x9^2 + 2*x2*x3^2*x7*x8^2*x9 + -x2*x3^2*x7*x8^2 + 2*x2*x3^2*x7*x8*x9^2 + -3*x2*x3^2*x7*x8*x9 + x2*x3^2*x7*x8 + -x2*x3^2*x7*x9^2 + x2*x3^2*x7*x9 + x2*x3^2*x8^2*x9^2 + -x2*x3^2*x8^2*x9 + -x2*x3^2*x8*x9^2 + x2*x3^2*x8*x9 + x2*x3*x4^3*x5^2*x6^2*x7*x8*x9 + -x2*x3*x4^3*x5^2*x6^2*x7*x8 + -x2*x3*x4^3*x5^2*x6^2*x7*x9 + x2*x3*x4^3*x5^2*x6^2*x7 + -x2*x3*x4^3*x5^2*x6^2*x8*x9 + x2*x3*x4^3*x5^2*x6^2*x8 + x2*x3*x4^3*x5^2*x6^2*x9 + -x2*x3*x4^3*x5^2*x6^2 + -x2*x3*x4^3*x5^2*x6*x7*x8*x9 + x2*x3*x4^3*x5^2*x6*x7*x8 + x2*x3*x4^3*x5^2*x6*x7*x9 + -x2*x3*x4^3*x5^2*x6*x7 + x2*x3*x4^3*x5^2*x6*x8*x9 + -x2*x3*x4^3*x5^2*x6*x8 + -x2*x3*x4^3*x5^2*x6*x9 + x2*x3*x4^3*x5^2*x6 + -x2*x3*x4^3*x5*x6^2*x7*x8*x9 + x2*x3*x4^3*x5*x6^2*x7*x8 + x2*x3*x4^3*x5*x6^2*x7*x9 + -x2*x3*x4^3*x5*x6^2*x7 + x2*x3*x4^3*x5*x6^2*x8*x9 + -x2*x3*x4^3*x5*x6^2*x8 + -x2*x3*x4^3*x5*x6^2*x9 + x2*x3*x4^3*x5*x6^2 + x2*x3*x4^3*x5*x6*x7^2*x8*x9 + -x2*x3*x4^3*x5*x6*x7^2*x8 + -x2*x3*x4^3*x5*x6*x7^2*x9 + x2*x3*x4^3*x5*x6*x7^2 + x2*x3*x4^3*x5*x6*x7*x8*x9^2 + -2*x2*x3*x4^3*x5*x6*x7*x8*x9 + x2*x3*x4^3*x5*x6*x7*x8 + -x2*x3*x4^3*x5*x6*x7*x9^2 + 2*x2*x3*x4^3*x5*x6*x7*x9 + -x2*x3*x4^3*x5*x6*x7 + -x2*x3*x4^3*x5*x6*x8*x9^2 + x2*x3*x4^3*x5*x6*x8*x9 + x2*x3*x4^3*x5*x6*x9^2 + -x2*x3*x4^3*x5*x6*x9 + -x2*x3*x4^3*x5*x7^2*x8*x9 + x2*x3*x4^3*x5*x7^2*x8 + x2*x3*x4^3*x5*x7^2*x9 + -x2*x3*x4^3*x5*x7^2 + -x2*x3*x4^3*x5*x7*x8*x9^2 + 3*x2*x3*x4^3*x5*x7*x8*x9 + -2*x2*x3*x4^3*x5*x7*x8 + x2*x3*x4^3*x5*x7*x9^2 + -3*x2*x3*x4^3*x5*x7*x9 + 2*x2*x3*x4^3*x5*x7 + x2*x3*x4^3*x5*x8*x9^2 + -2*x2*x3*x4^3*x5*x8*x9 + x2*x3*x4^3*x5*x8 + -x2*x3*x4^3*x5*x9^2 + 2*x2*x3*x4^3*x5*x9 + -x2*x3*x4^3*x5 + -x2*x3*x4^3*x6*x7^2*x8*x9 + x2*x3*x4^3*x6*x7^2*x8 + x2*x3*x4^3*x6*x7^2*x9 + -x2*x3*x4^3*x6*x7^2 + -x2*x3*x4^3*x6*x7*x8*x9^2 + 3*x2*x3*x4^3*x6*x7*x8*x9 + -2*x2*x3*x4^3*x6*x7*x8 + x2*x3*x4^3*x6*x7*x9^2 + -3*x2*x3*x4^3*x6*x7*x9 + 2*x2*x3*x4^3*x6*x7 + x2*x3*x4^3*x6*x8*x9^2 + -2*x2*x3*x4^3*x6*x8*x9 + x2*x3*x4^3*x6*x8 + -x2*x3*x4^3*x6*x9^2 + 2*x2*x3*x4^3*x6*x9 + -x2*x3*x4^3*x6 + x2*x3*x4^3*x7^2*x8*x9 + -x2*x3*x4^3*x7^2*x8 + -x2*x3*x4^3*x7^2*x9 + x2*x3*x4^3*x7^2 + x2*x3*x4^3*x7*x8*x9^2 + -3*x2*x3*x4^3*x7*x8*x9 + 2*x2*x3*x4^3*x7*x8 + -x2*x3*x4^3*x7*x9^2 + 3*x2*x3*x4^3*x7*x9 + -2*x2*x3*x4^3*x7 + -x2*x3*x4^3*x8*x9^2 + 2*x2*x3*x4^3*x8*x9 + -x2*x3*x4^3*x8 + x2*x3*x4^3*x9^2 + -2*x2*x3*x4^3*x9 + x2*x3*x4^3 + -x2*x3*x4^2*x5^2*x6^2*x7*x8*x9 + x2*x3*x4^2*x5^2*x6^2*x7*x8 + x2*x3*x4^2*x5^2*x6^2*x7*x9 + -x2*x3*x4^2*x5^2*x6^2*x7 + x2*x3*x4^2*x5^2*x6^2*x8*x9 + -x2*x3*x4^2*x5^2*x6^2*x8 + -x2*x3*x4^2*x5^2*x6^2*x9 + x2*x3*x4^2*x5^2*x6^2 + x2*x3*x4^2*x5^2*x7*x8*x9 + -x2*x3*x4^2*x5^2*x7*x8 + -x2*x3*x4^2*x5^2*x7*x9 + x2*x3*x4^2*x5^2*x7 + -x2*x3*x4^2*x5^2*x8*x9 + x2*x3*x4^2*x5^2*x8 + x2*x3*x4^2*x5^2*x9 + -x2*x3*x4^2*x5^2 + x2*x3*x4^2*x5*x6^2*x7*x8*x9 + -x2*x3*x4^2*x5*x6^2*x7*x8 + -x2*x3*x4^2*x5*x6^2*x7*x9 + x2*x3*x4^2*x5*x6^2*x7 + -x2*x3*x4^2*x5*x6^2*x8*x9 + x2*x3*x4^2*x5*x6^2*x8 + x2*x3*x4^2*x5*x6^2*x9 + -x2*x3*x4^2*x5*x6^2 + x2*x3*x4^2*x5*x6*x7^2*x8*x9^2 + -3*x2*x3*x4^2*x5*x6*x7^2*x8*x9 + 2*x2*x3*x4^2*x5*x6*x7^2*x8 + -x2*x3*x4^2*x5*x6*x7^2*x9^2 + 3*x2*x3*x4^2*x5*x6*x7^2*x9 + -2*x2*x3*x4^2*x5*x6*x7^2 + -3*x2*x3*x4^2*x5*x6*x7*x8*x9^2 + 5*x2*x3*x4^2*x5*x6*x7*x8*x9 + -2*x2*x3*x4^2*x5*x6*x7*x8 + 3*x2*x3*x4^2*x5*x6*x7*x9^2 + -5*x2*x3*x4^2*x5*x6*x7*x9 + 2*x2*x3*x4^2*x5*x6*x7 + 2*x2*x3*x4^2*x5*x6*x8*x9^2 + -2*x2*x3*x4^2*x5*x6*x8*x9 + -2*x2*x3*x4^2*x5*x6*x9^2 + 2*x2*x3*x4^2*x5*x6*x9 + -x2*x3*x4^2*x5*x7^2*x8*x9^2 + 3*x2*x3*x4^2*x5*x7^2*x8*x9 + -2*x2*x3*x4^2*x5*x7^2*x8 + x2*x3*x4^2*x5*x7^2*x9^2 + -3*x2*x3*x4^2*x5*x7^2*x9 + 2*x2*x3*x4^2*x5*x7^2 + 3*x2*x3*x4^2*x5*x7*x8*x9^2 + -6*x2*x3*x4^2*x5*x7*x8*x9 + 3*x2*x3*x4^2*x5*x7*x8 + -3*x2*x3*x4^2*x5*x7*x9^2 + 6*x2*x3*x4^2*x5*x7*x9 + -3*x2*x3*x4^2*x5*x7 + -2*x2*x3*x4^2*x5*x8*x9^2 + 3*x2*x3*x4^2*x5*x8*x9 + -x2*x3*x4^2*x5*x8 + 2*x2*x3*x4^2*x5*x9^2 + -3*x2*x3*x4^2*x5*x9 + x2*x3*x4^2*x5 + -x2*x3*x4^2*x6*x7^2*x8*x9^2 + 3*x2*x3*x4^2*x6*x7^2*x8*x9 + -2*x2*x3*x4^2*x6*x7^2*x8 + x2*x3*x4^2*x6*x7^2*x9^2 + -3*x2*x3*x4^2*x6*x7^2*x9 + 2*x2*x3*x4^2*x6*x7^2 + 3*x2*x3*x4^2*x6*x7*x8*x9^2 + -5*x2*x3*x4^2*x6*x7*x8*x9 + 2*x2*x3*x4^2*x6*x7*x8 + -3*x2*x3*x4^2*x6*x7*x9^2 + 5*x2*x3*x4^2*x6*x7*x9 + -2*x2*x3*x4^2*x6*x7 + -2*x2*x3*x4^2*x6*x8*x9^2 + 2*x2*x3*x4^2*x6*x8*x9 + 2*x2*x3*x4^2*x6*x9^2 + -2*x2*x3*x4^2*x6*x9 + x2*x3*x4^2*x7^2*x8*x9^2 + -3*x2*x3*x4^2*x7^2*x8*x9 + 2*x2*x3*x4^2*x7^2*x8 + -x2*x3*x4^2*x7^2*x9^2 + 3*x2*x3*x4^2*x7^2*x9 + -2*x2*x3*x4^2*x7^2 + -3*x2*x3*x4^2*x7*x8*x9^2 + 5*x2*x3*x4^2*x7*x8*x9 + -2*x2*x3*x4^2*x7*x8 + 3*x2*x3*x4^2*x7*x9^2 + -5*x2*x3*x4^2*x7*x9 + 2*x2*x3*x4^2*x7 + 2*x2*x3*x4^2*x8*x9^2 + -2*x2*x3*x4^2*x8*x9 + -2*x2*x3*x4^2*x9^2 + 2*x2*x3*x4^2*x9 + x2*x3*x4*x5^2*x6^3*x7*x8*x9 + -x2*x3*x4*x5^2*x6^3*x7*x8 + -x2*x3*x4*x5^2*x6^3*x7*x9 + x2*x3*x4*x5^2*x6^3*x7 + -x2*x3*x4*x5^2*x6^3*x8*x9 + x2*x3*x4*x5^2*x6^3*x8 + x2*x3*x4*x5^2*x6^3*x9 + -x2*x3*x4*x5^2*x6^3 + -2*x2*x3*x4*x5^2*x6^2*x7*x8*x9 + 2*x2*x3*x4*x5^2*x6^2*x7*x8 + 2*x2*x3*x4*x5^2*x6^2*x7*x9 + -2*x2*x3*x4*x5^2*x6^2*x7 + 2*x2*x3*x4*x5^2*x6^2*x8*x9 + -2*x2*x3*x4*x5^2*x6^2*x8 + -2*x2*x3*x4*x5^2*x6^2*x9 + 2*x2*x3*x4*x5^2*x6^2 + -x2*x3*x4*x5^2*x6*x7^2*x8*x9 + x2*x3*x4*x5^2*x6*x7^2*x8 + x2*x3*x4*x5^2*x6*x7^2*x9 + -x2*x3*x4*x5^2*x6*x7^2 + 2*x2*x3*x4*x5^2*x6*x7*x8*x9 + -2*x2*x3*x4*x5^2*x6*x7*x8 + -2*x2*x3*x4*x5^2*x6*x7*x9 + 2*x2*x3*x4*x5^2*x6*x7 + -x2*x3*x4*x5^2*x6*x8*x9 + x2*x3*x4*x5^2*x6*x8 + x2*x3*x4*x5^2*x6*x9 + -x2*x3*x4*x5^2*x6 + x2*x3*x4*x5^2*x7^2*x8*x9 + -x2*x3*x4*x5^2*x7^2*x8 + -x2*x3*x4*x5^2*x7^2*x9 + x2*x3*x4*x5^2*x7^2 + -x2*x3*x4*x5^2*x7*x8*x9 + x2*x3*x4*x5^2*x7*x8 + x2*x3*x4*x5^2*x7*x9 + -x2*x3*x4*x5^2*x7 + -x2*x3*x4*x5*x6^3*x7*x8*x9 + x2*x3*x4*x5*x6^3*x7*x8 + x2*x3*x4*x5*x6^3*x7*x9 + -x2*x3*x4*x5*x6^3*x7 + x2*x3*x4*x5*x6^3*x8*x9 + -x2*x3*x4*x5*x6^3*x8 + -x2*x3*x4*x5*x6^3*x9 + x2*x3*x4*x5*x6^3 + x2*x3*x4*x5*x6^2*x7^3*x8*x9 + -x2*x3*x4*x5*x6^2*x7^3*x8 + -x2*x3*x4*x5*x6^2*x7^3*x9 + x2*x3*x4*x5*x6^2*x7^3 + -x2*x3*x4*x5*x6^2*x7^2*x8*x9 + x2*x3*x4*x5*x6^2*x7^2*x8 + x2*x3*x4*x5*x6^2*x7^2*x9 + -x2*x3*x4*x5*x6^2*x7^2 + x2*x3*x4*x5*x6^2*x7*x8*x9 + -x2*x3*x4*x5*x6^2*x7*x8 + -x2*x3*x4*x5*x6^2*x7*x9 + x2*x3*x4*x5*x6^2*x7 + -x2*x3*x4*x5*x6^2*x8*x9 + x2*x3*x4*x5*x6^2*x8 + x2*x3*x4*x5*x6^2*x9 + -x2*x3*x4*x5*x6^2 + -x2*x3*x4*x5*x6*x7^3*x8*x9 + x2*x3*x4*x5*x6*x7^3*x8 + x2*x3*x4*x5*x6*x7^3*x9 + -x2*x3*x4*x5*x6*x7^3 + -x2*x3*x4*x5*x6*x7^2*x8*x9^2 + 3*x2*x3*x4*x5*x6*x7^2*x8*x9 + -2*x2*x3*x4*x5*x6*x7^2*x8 + x2*x3*x4*x5*x6*x7^2*x9^2 + -3*x2*x3*x4*x5*x6*x7^2*x9 + 2*x2*x3*x4*x5*x6*x7^2 + -x2*x3*x4*x5*x6*x7*x8^2*x9^2 + x2*x3*x4*x5*x6*x7*x8^2 + 2*x2*x3*x4*x5*x6*x7*x8*x9^2 + -2*x2*x3*x4*x5*x6*x7*x8*x9 + -x2*x3*x4*x5*x6*x7*x9^2 + 2*x2*x3*x4*x5*x6*x7*x9 + -x2*x3*x4*x5*x6*x7 + x2*x3*x4*x5*x6*x8^2*x9^2 + -x2*x3*x4*x5*x6*x8^2 + -x2*x3*x4*x5*x6*x8*x9^2 + x2*x3*x4*x5*x6*x8 + x2*x3*x4*x5*x7^2*x8*x9^2 + -2*x2*x3*x4*x5*x7^2*x8*x9 + x2*x3*x4*x5*x7^2*x8 + -x2*x3*x4*x5*x7^2*x9^2 + 2*x2*x3*x4*x5*x7^2*x9 + -x2*x3*x4*x5*x7^2 + x2*x3*x4*x5*x7*x8^2*x9^2 + -x2*x3*x4*x5*x7*x8^2 + -2*x2*x3*x4*x5*x7*x8*x9^2 + 2*x2*x3*x4*x5*x7*x8*x9 + x2*x3*x4*x5*x7*x9^2 + -2*x2*x3*x4*x5*x7*x9 + x2*x3*x4*x5*x7 + -x2*x3*x4*x5*x8^2*x9^2 + x2*x3*x4*x5*x8^2 + x2*x3*x4*x5*x8*x9^2 + -x2*x3*x4*x5*x8 + -x2*x3*x4*x6^2*x7^3*x8*x9 + x2*x3*x4*x6^2*x7^3*x8 + x2*x3*x4*x6^2*x7^3*x9 + -x2*x3*x4*x6^2*x7^3 + x2*x3*x4*x6^2*x7^2*x8*x9 + -x2*x3*x4*x6^2*x7^2*x8 + -x2*x3*x4*x6^2*x7^2*x9 + x2*x3*x4*x6^2*x7^2 + x2*x3*x4*x6^2*x7*x8*x9 + -x2*x3*x4*x6^2*x7*x8 + -x2*x3*x4*x6^2*x7*x9 + x2*x3*x4*x6^2*x7 + -x2*x3*x4*x6^2*x8*x9 + x2*x3*x4*x6^2*x8 + x2*x3*x4*x6^2*x9 + -x2*x3*x4*x6^2 + x2*x3*x4*x6*x7^3*x8*x9 + -x2*x3*x4*x6*x7^3*x8 + -x2*x3*x4*x6*x7^3*x9 + x2*x3*x4*x6*x7^3 + x2*x3*x4*x6*x7^2*x8*x9^2 + -2*x2*x3*x4*x6*x7^2*x8*x9 + x2*x3*x4*x6*x7^2*x8 + -x2*x3*x4*x6*x7^2*x9^2 + 2*x2*x3*x4*x6*x7^2*x9 + -x2*x3*x4*x6*x7^2 + x2*x3*x4*x6*x7*x8^2*x9^2 + -x2*x3*x4*x6*x7*x8^2 + -2*x2*x3*x4*x6*x7*x8*x9^2 + 2*x2*x3*x4*x6*x7*x8 + x2*x3*x4*x6*x7*x9^2 + -x2*x3*x4*x6*x7 + -x2*x3*x4*x6*x8^2*x9^2 + x2*x3*x4*x6*x8^2 + x2*x3*x4*x6*x8*x9^2 + x2*x3*x4*x6*x8*x9 + -2*x2*x3*x4*x6*x8 + -x2*x3*x4*x6*x9 + x2*x3*x4*x6 + -x2*x3*x4*x7^2*x8*x9^2 + x2*x3*x4*x7^2*x8*x9 + x2*x3*x4*x7^2*x9^2 + -x2*x3*x4*x7^2*x9 + -x2*x3*x4*x7*x8^2*x9^2 + x2*x3*x4*x7*x8^2 + 2*x2*x3*x4*x7*x8*x9^2 + -x2*x3*x4*x7*x8*x9 + -x2*x3*x4*x7*x8 + -x2*x3*x4*x7*x9^2 + x2*x3*x4*x7*x9 + x2*x3*x4*x8^2*x9^2 + -x2*x3*x4*x8^2 + -x2*x3*x4*x8*x9^2 + x2*x3*x4*x8 + -x2*x3*x5^2*x6^3*x7*x8*x9 + x2*x3*x5^2*x6^3*x7*x8 + x2*x3*x5^2*x6^3*x7*x9 + -x2*x3*x5^2*x6^3*x7 + x2*x3*x5^2*x6^3*x8*x9 + -x2*x3*x5^2*x6^3*x8 + -x2*x3*x5^2*x6^3*x9 + x2*x3*x5^2*x6^3 + 2*x2*x3*x5^2*x6^2*x7*x8*x9 + -2*x2*x3*x5^2*x6^2*x7*x8 + -2*x2*x3*x5^2*x6^2*x7*x9 + 2*x2*x3*x5^2*x6^2*x7 + -2*x2*x3*x5^2*x6^2*x8*x9 + 2*x2*x3*x5^2*x6^2*x8 + 2*x2*x3*x5^2*x6^2*x9 + -2*x2*x3*x5^2*x6^2 + x2*x3*x5^2*x6*x7^2*x8*x9 + -x2*x3*x5^2*x6*x7^2*x8 + -x2*x3*x5^2*x6*x7^2*x9 + x2*x3*x5^2*x6*x7^2 + -x2*x3*x5^2*x6*x7*x8*x9 + x2*x3*x5^2*x6*x7*x8 + x2*x3*x5^2*x6*x7*x9 + -x2*x3*x5^2*x6*x7 + -x2*x3*x5^2*x7^2*x8*x9 + x2*x3*x5^2*x7^2*x8 + x2*x3*x5^2*x7^2*x9 + -x2*x3*x5^2*x7^2 + x2*x3*x5^2*x8*x9 + -x2*x3*x5^2*x8 + -x2*x3*x5^2*x9 + x2*x3*x5^2 + x2*x3*x5*x6^3*x7*x8*x9 + -x2*x3*x5*x6^3*x7*x8 + -x2*x3*x5*x6^3*x7*x9 + x2*x3*x5*x6^3*x7 + -x2*x3*x5*x6^3*x8*x9 + x2*x3*x5*x6^3*x8 + x2*x3*x5*x6^3*x9 + -x2*x3*x5*x6^3 + -x2*x3*x5*x6^2*x7^3*x8*x9 + x2*x3*x5*x6^2*x7^3*x8 + x2*x3*x5*x6^2*x7^3*x9 + -x2*x3*x5*x6^2*x7^3 + x2*x3*x5*x6^2*x7^2*x8*x9 + -x2*x3*x5*x6^2*x7^2*x8 + -x2*x3*x5*x6^2*x7^2*x9 + x2*x3*x5*x6^2*x7^2 + -x2*x3*x5*x6^2*x7*x8*x9 + x2*x3*x5*x6^2*x7*x8 + x2*x3*x5*x6^2*x7*x9 + -x2*x3*x5*x6^2*x7 + x2*x3*x5*x6^2*x8*x9 + -x2*x3*x5*x6^2*x8 + -x2*x3*x5*x6^2*x9 + x2*x3*x5*x6^2 + x2*x3*x5*x6*x7^3*x8*x9 + -x2*x3*x5*x6*x7^3*x8 + -x2*x3*x5*x6*x7^3*x9 + x2*x3*x5*x6*x7^3 + -x2*x3*x5*x6*x7^2*x8*x9 + x2*x3*x5*x6*x7^2*x8 + x2*x3*x5*x6*x7^2*x9 + -x2*x3*x5*x6*x7^2 + x2*x3*x5*x6*x7*x8^2*x9^2 + -x2*x3*x5*x6*x7*x8^2 + -x2*x3*x5*x6*x7*x8*x9 + x2*x3*x5*x6*x7*x8 + -x2*x3*x5*x6*x7*x9^2 + x2*x3*x5*x6*x7*x9 + -x2*x3*x5*x6*x8^2*x9^2 + x2*x3*x5*x6*x8^2 + x2*x3*x5*x6*x8*x9 + -x2*x3*x5*x6*x8 + x2*x3*x5*x6*x9^2 + -x2*x3*x5*x6*x9 + -x2*x3*x5*x7*x8^2*x9^2 + x2*x3*x5*x7*x8^2 + x2*x3*x5*x7*x8*x9 + -x2*x3*x5*x7*x8 + x2*x3*x5*x7*x9^2 + -x2*x3*x5*x7*x9 + x2*x3*x5*x8^2*x9^2 + -x2*x3*x5*x8^2 + -x2*x3*x5*x8*x9 + x2*x3*x5*x8 + -x2*x3*x5*x9^2 + x2*x3*x5*x9 + x2*x3*x6^2*x7^3*x8*x9 + -x2*x3*x6^2*x7^3*x8 + -x2*x3*x6^2*x7^3*x9 + x2*x3*x6^2*x7^3 + -x2*x3*x6^2*x7^2*x8*x9 + x2*x3*x6^2*x7^2*x8 + x2*x3*x6^2*x7^2*x9 + -x2*x3*x6^2*x7^2 + -x2*x3*x6^2*x7*x8*x9 + x2*x3*x6^2*x7*x8 + x2*x3*x6^2*x7*x9 + -x2*x3*x6^2*x7 + x2*x3*x6^2*x8*x9 + -x2*x3*x6^2*x8 + -x2*x3*x6^2*x9 + x2*x3*x6^2 + -x2*x3*x6*x7^3*x8*x9 + x2*x3*x6*x7^3*x8 + x2*x3*x6*x7^3*x9 + -x2*x3*x6*x7^3 + -x2*x3*x6*x7*x8^2*x9^2 + x2*x3*x6*x7*x8^2 + 2*x2*x3*x6*x7*x8*x9 + -2*x2*x3*x6*x7*x8 + x2*x3*x6*x7*x9^2 + -2*x2*x3*x6*x7*x9 + x2*x3*x6*x7 + x2*x3*x6*x8^2*x9^2 + -x2*x3*x6*x8^2 + -x2*x3*x6*x8*x9 + x2*x3*x6*x8 + -x2*x3*x6*x9^2 + x2*x3*x6*x9 + x2*x3*x7^2*x8*x9 + -x2*x3*x7^2*x8 + -x2*x3*x7^2*x9 + x2*x3*x7^2 + x2*x3*x7*x8^2*x9^2 + -x2*x3*x7*x8^2 + -x2*x3*x7*x8*x9 + x2*x3*x7*x8 + -x2*x3*x7*x9^2 + x2*x3*x7*x9 + -x2*x3*x8^2*x9^2 + x2*x3*x8^2 + x2*x3*x9^2 + -x2*x3 + -x2*x4^3*x5^2*x6^2*x7*x8*x9 + x2*x4^3*x5^2*x6^2*x7*x8 + x2*x4^3*x5^2*x6^2*x7*x9 + -x2*x4^3*x5^2*x6^2*x7 + x2*x4^3*x5^2*x6^2*x8*x9 + -x2*x4^3*x5^2*x6^2*x8 + -x2*x4^3*x5^2*x6^2*x9 + x2*x4^3*x5^2*x6^2 + x2*x4^3*x5^2*x6*x7*x8*x9 + -x2*x4^3*x5^2*x6*x7*x8 + -x2*x4^3*x5^2*x6*x7*x9 + x2*x4^3*x5^2*x6*x7 + -x2*x4^3*x5^2*x6*x8*x9 + x2*x4^3*x5^2*x6*x8 + x2*x4^3*x5^2*x6*x9 + -x2*x4^3*x5^2*x6 + x2*x4^3*x5*x6^2*x7*x8*x9 + -x2*x4^3*x5*x6^2*x7*x8 + -x2*x4^3*x5*x6^2*x7*x9 + x2*x4^3*x5*x6^2*x7 + -x2*x4^3*x5*x6^2*x8*x9 + x2*x4^3*x5*x6^2*x8 + x2*x4^3*x5*x6^2*x9 + -x2*x4^3*x5*x6^2 + -x2*x4^3*x5*x6*x7^2*x8*x9 + x2*x4^3*x5*x6*x7^2*x8 + x2*x4^3*x5*x6*x7^2*x9 + -x2*x4^3*x5*x6*x7^2 + -x2*x4^3*x5*x6*x7*x8*x9^2 + x2*x4^3*x5*x6*x7*x8*x9 + x2*x4^3*x5*x6*x7*x9^2 + -x2*x4^3*x5*x6*x7*x9 + x2*x4^3*x5*x6*x8*x9^2 + -x2*x4^3*x5*x6*x8 + -x2*x4^3*x5*x6*x9^2 + x2*x4^3*x5*x6 + x2*x4^3*x5*x7^2*x8*x9 + -x2*x4^3*x5*x7^2*x8 + -x2*x4^3*x5*x7^2*x9 + x2*x4^3*x5*x7^2 + x2*x4^3*x5*x7*x8*x9^2 + -2*x2*x4^3*x5*x7*x8*x9 + x2*x4^3*x5*x7*x8 + -x2*x4^3*x5*x7*x9^2 + 2*x2*x4^3*x5*x7*x9 + -x2*x4^3*x5*x7 + -x2*x4^3*x5*x8*x9^2 + x2*x4^3*x5*x8*x9 + x2*x4^3*x5*x9^2 + -x2*x4^3*x5*x9 + x2*x4^3*x6*x7^2*x8*x9 + -x2*x4^3*x6*x7^2*x8 + -x2*x4^3*x6*x7^2*x9 + x2*x4^3*x6*x7^2 + x2*x4^3*x6*x7*x8*x9^2 + -2*x2*x4^3*x6*x7*x8*x9 + x2*x4^3*x6*x7*x8 + -x2*x4^3*x6*x7*x9^2 + 2*x2*x4^3*x6*x7*x9 + -x2*x4^3*x6*x7 + -x2*x4^3*x6*x8*x9^2 + x2*x4^3*x6*x8*x9 + x2*x4^3*x6*x9^2 + -x2*x4^3*x6*x9 + -x2*x4^3*x7^2*x8*x9 + x2*x4^3*x7^2*x8 + x2*x4^3*x7^2*x9 + -x2*x4^3*x7^2 + -x2*x4^3*x7*x8*x9^2 + 2*x2*x4^3*x7*x8*x9 + -x2*x4^3*x7*x8 + x2*x4^3*x7*x9^2 + -2*x2*x4^3*x7*x9 + x2*x4^3*x7 + x2*x4^3*x8*x9^2 + -x2*x4^3*x8*x9 + -x2*x4^3*x9^2 + x2*x4^3*x9 + x2*x4^2*x5^2*x6^2*x7*x8*x9 + -x2*x4^2*x5^2*x6^2*x7*x8 + -x2*x4^2*x5^2*x6^2*x7*x9 + x2*x4^2*x5^2*x6^2*x7 + -x2*x4^2*x5^2*x6^2*x8*x9 + x2*x4^2*x5^2*x6^2*x8 + x2*x4^2*x5^2*x6^2*x9 + -x2*x4^2*x5^2*x6^2 + -x2*x4^2*x5^2*x6*x7*x8*x9 + x2*x4^2*x5^2*x6*x7*x8 + x2*x4^2*x5^2*x6*x7*x9 + -x2*x4^2*x5^2*x6*x7 + x2*x4^2*x5^2*x6*x8*x9 + -x2*x4^2*x5^2*x6*x8 + -x2*x4^2*x5^2*x6*x9 + x2*x4^2*x5^2*x6 + -x2*x4^2*x5*x6^2*x7*x8*x9 + x2*x4^2*x5*x6^2*x7*x8 + x2*x4^2*x5*x6^2*x7*x9 + -x2*x4^2*x5*x6^2*x7 + x2*x4^2*x5*x6^2*x8*x9 + -x2*x4^2*x5*x6^2*x8 + -x2*x4^2*x5*x6^2*x9 + x2*x4^2*x5*x6^2 + -x2*x4^2*x5*x6*x7^3*x8*x9 + x2*x4^2*x5*x6*x7^3*x8 + x2*x4^2*x5*x6*x7^3*x9 + -x2*x4^2*x5*x6*x7^3 + -x2*x4^2*x5*x6*x7^2*x8*x9^2 + 3*x2*x4^2*x5*x6*x7^2*x8*x9 + -2*x2*x4^2*x5*x6*x7^2*x8 + x2*x4^2*x5*x6*x7^2*x9^2 + -3*x2*x4^2*x5*x6*x7^2*x9 + 2*x2*x4^2*x5*x6*x7^2 + -x2*x4^2*x5*x6*x7*x8^2*x9 + x2*x4^2*x5*x6*x7*x8^2 + 2*x2*x4^2*x5*x6*x7*x8*x9^2 + -x2*x4^2*x5*x6*x7*x8*x9 + -x2*x4^2*x5*x6*x7*x8 + -2*x2*x4^2*x5*x6*x7*x9^2 + 2*x2*x4^2*x5*x6*x7*x9 + x2*x4^2*x5*x6*x8^2*x9 + -x2*x4^2*x5*x6*x8^2 + -x2*x4^2*x5*x6*x8*x9^2 + -x2*x4^2*x5*x6*x8*x9 + 2*x2*x4^2*x5*x6*x8 + x2*x4^2*x5*x6*x9^2 + -x2*x4^2*x5*x6 + x2*x4^2*x5*x7^3*x8*x9 + -x2*x4^2*x5*x7^3*x8 + -x2*x4^2*x5*x7^3*x9 + x2*x4^2*x5*x7^3 + x2*x4^2*x5*x7^2*x8*x9^2 + -3*x2*x4^2*x5*x7^2*x8*x9 + 2*x2*x4^2*x5*x7^2*x8 + -x2*x4^2*x5*x7^2*x9^2 + 3*x2*x4^2*x5*x7^2*x9 + -2*x2*x4^2*x5*x7^2 + x2*x4^2*x5*x7*x8^2*x9 + -x2*x4^2*x5*x7*x8^2 + -2*x2*x4^2*x5*x7*x8*x9^2 + 2*x2*x4^2*x5*x7*x8*x9 + 2*x2*x4^2*x5*x7*x9^2 + -3*x2*x4^2*x5*x7*x9 + x2*x4^2*x5*x7 + -x2*x4^2*x5*x8^2*x9 + x2*x4^2*x5*x8^2 + x2*x4^2*x5*x8*x9^2 + -x2*x4^2*x5*x8 + -x2*x4^2*x5*x9^2 + x2*x4^2*x5*x9 + x2*x4^2*x6*x7^3*x8*x9 + -x2*x4^2*x6*x7^3*x8 + -x2*x4^2*x6*x7^3*x9 + x2*x4^2*x6*x7^3 + x2*x4^2*x6*x7^2*x8*x9^2 + -3*x2*x4^2*x6*x7^2*x8*x9 + 2*x2*x4^2*x6*x7^2*x8 + -x2*x4^2*x6*x7^2*x9^2 + 3*x2*x4^2*x6*x7^2*x9 + -2*x2*x4^2*x6*x7^2 + x2*x4^2*x6*x7*x8^2*x9 + -x2*x4^2*x6*x7*x8^2 + -2*x2*x4^2*x6*x7*x8*x9^2 + 2*x2*x4^2*x6*x7*x8*x9 + 2*x2*x4^2*x6*x7*x9^2 + -3*x2*x4^2*x6*x7*x9 + x2*x4^2*x6*x7 + -x2*x4^2*x6*x8^2*x9 + x2*x4^2*x6*x8^2 + x2*x4^2*x6*x8*x9^2 + -x2*x4^2*x6*x8 + -x2*x4^2*x6*x9^2 + x2*x4^2*x6*x9 + -x2*x4^2*x7^3*x8*x9 + x2*x4^2*x7^3*x8 + x2*x4^2*x7^3*x9 + -x2*x4^2*x7^3 + -x2*x4^2*x7^2*x8*x9^2 + 3*x2*x4^2*x7^2*x8*x9 + -2*x2*x4^2*x7^2*x8 + x2*x4^2*x7^2*x9^2 + -3*x2*x4^2*x7^2*x9 + 2*x2*x4^2*x7^2 + -x2*x4^2*x7*x8^2*x9 + x2*x4^2*x7*x8^2 + 2*x2*x4^2*x7*x8*x9^2 + -2*x2*x4^2*x7*x8*x9 + -2*x2*x4^2*x7*x9^2 + 3*x2*x4^2*x7*x9 + -x2*x4^2*x7 + x2*x4^2*x8^2*x9 + -x2*x4^2*x8^2 + -x2*x4^2*x8*x9^2 + x2*x4^2*x8 + x2*x4^2*x9^2 + -x2*x4^2*x9 + -x2*x4*x5^2*x6^3*x7*x8*x9 + x2*x4*x5^2*x6^3*x7*x8 + x2*x4*x5^2*x6^3*x7*x9 + -x2*x4*x5^2*x6^3*x7 + x2*x4*x5^2*x6^3*x8*x9 + -x2*x4*x5^2*x6^3*x8 + -x2*x4*x5^2*x6^3*x9 + x2*x4*x5^2*x6^3 + x2*x4*x5^2*x6^2*x7*x8*x9 + -x2*x4*x5^2*x6^2*x7*x8 + -x2*x4*x5^2*x6^2*x7*x9 + x2*x4*x5^2*x6^2*x7 + -x2*x4*x5^2*x6^2*x8*x9 + x2*x4*x5^2*x6^2*x8 + x2*x4*x5^2*x6^2*x9 + -x2*x4*x5^2*x6^2 + -x2*x4*x5*x6^3*x7^2*x8*x9 + x2*x4*x5*x6^3*x7^2*x8 + x2*x4*x5*x6^3*x7^2*x9 + -x2*x4*x5*x6^3*x7^2 + x2*x4*x5*x6^3*x7*x8*x9 + -x2*x4*x5*x6^3*x7*x8 + -x2*x4*x5*x6^3*x7*x9 + x2*x4*x5*x6^3*x7 + -x2*x4*x5*x6^2*x7^3*x8*x9 + x2*x4*x5*x6^2*x7^3*x8 + x2*x4*x5*x6^2*x7^3*x9 + -x2*x4*x5*x6^2*x7^3 + x2*x4*x5*x6^2*x7^2*x8*x9 + -x2*x4*x5*x6^2*x7^2*x8 + -x2*x4*x5*x6^2*x7^2*x9 + x2*x4*x5*x6^2*x7^2 + x2*x4*x5*x6*x7^3*x8*x9 + -x2*x4*x5*x6*x7^3*x8 + -x2*x4*x5*x6*x7^3*x9 + x2*x4*x5*x6*x7^3 + -x2*x4*x5*x6*x7^2*x8^2*x9 + x2*x4*x5*x6*x7^2*x8^2 + x2*x4*x5*x6*x7^2*x8*x9 + -x2*x4*x5*x6*x7^2*x8 + 2*x2*x4*x5*x6*x7*x8^2*x9 + -2*x2*x4*x5*x6*x7*x8^2 + -3*x2*x4*x5*x6*x7*x8*x9 + 3*x2*x4*x5*x6*x7*x8 + x2*x4*x5*x6*x7*x9 + -x2*x4*x5*x6*x7 + -x2*x4*x5*x6*x8^2*x9 + x2*x4*x5*x6*x8^2 + x2*x4*x5*x6*x8*x9 + -x2*x4*x5*x6*x8 + x2*x4*x5*x7^2*x8^2*x9 + -x2*x4*x5*x7^2*x8^2 + -x2*x4*x5*x7^2*x8*x9 + x2*x4*x5*x7^2*x8 + -2*x2*x4*x5*x7*x8^2*x9 + 2*x2*x4*x5*x7*x8^2 + 2*x2*x4*x5*x7*x8*x9 + -2*x2*x4*x5*x7*x8 + x2*x4*x5*x8^2*x9 + -x2*x4*x5*x8^2 + -x2*x4*x5*x8*x9 + x2*x4*x5*x8 + x2*x4*x6^3*x7^2*x8*x9 + -x2*x4*x6^3*x7^2*x8 + -x2*x4*x6^3*x7^2*x9 + x2*x4*x6^3*x7^2 + -x2*x4*x6^3*x8*x9 + x2*x4*x6^3*x8 + x2*x4*x6^3*x9 + -x2*x4*x6^3 + x2*x4*x6^2*x7^3*x8*x9 + -x2*x4*x6^2*x7^3*x8 + -x2*x4*x6^2*x7^3*x9 + x2*x4*x6^2*x7^3 + -x2*x4*x6^2*x7^2*x8*x9 + x2*x4*x6^2*x7^2*x8 + x2*x4*x6^2*x7^2*x9 + -x2*x4*x6^2*x7^2 + -x2*x4*x6^2*x7*x8*x9 + x2*x4*x6^2*x7*x8 + x2*x4*x6^2*x7*x9 + -x2*x4*x6^2*x7 + x2*x4*x6^2*x8*x9 + -x2*x4*x6^2*x8 + -x2*x4*x6^2*x9 + x2*x4*x6^2 + -x2*x4*x6*x7^3*x8*x9 + x2*x4*x6*x7^3*x8 + x2*x4*x6*x7^3*x9 + -x2*x4*x6*x7^3 + x2*x4*x6*x7^2*x8^2*x9 + -x2*x4*x6*x7^2*x8^2 + -x2*x4*x6*x7^2*x8*x9 + x2*x4*x6*x7^2*x8 + -2*x2*x4*x6*x7*x8^2*x9 + 2*x2*x4*x6*x7*x8^2 + 3*x2*x4*x6*x7*x8*x9 + -3*x2*x4*x6*x7*x8 + -x2*x4*x6*x7*x9 + x2*x4*x6*x7 + x2*x4*x6*x8^2*x9 + -x2*x4*x6*x8^2 + -x2*x4*x6*x8*x9 + x2*x4*x6*x8 + -x2*x4*x7^2*x8^2*x9 + x2*x4*x7^2*x8^2 + x2*x4*x7^2*x8*x9 + -x2*x4*x7^2*x8 + 2*x2*x4*x7*x8^2*x9 + -2*x2*x4*x7*x8^2 + -2*x2*x4*x7*x8*x9 + 2*x2*x4*x7*x8 + -x2*x4*x8^2*x9 + x2*x4*x8^2 + x2*x4*x8*x9 + -x2*x4*x8 + x2*x5^2*x6^3*x7*x8*x9 + -x2*x5^2*x6^3*x7*x8 + -x2*x5^2*x6^3*x7*x9 + x2*x5^2*x6^3*x7 + -x2*x5^2*x6^3*x8*x9 + x2*x5^2*x6^3*x8 + x2*x5^2*x6^3*x9 + -x2*x5^2*x6^3 + -x2*x5^2*x6^2*x7*x8*x9 + x2*x5^2*x6^2*x7*x8 + x2*x5^2*x6^2*x7*x9 + -x2*x5^2*x6^2*x7 + x2*x5^2*x6^2*x8*x9 + -x2*x5^2*x6^2*x8 + -x2*x5^2*x6^2*x9 + x2*x5^2*x6^2 + x2*x5*x6^3*x7^2*x8*x9 + -x2*x5*x6^3*x7^2*x8 + -x2*x5*x6^3*x7^2*x9 + x2*x5*x6^3*x7^2 + -x2*x5*x6^3*x7*x8*x9 + x2*x5*x6^3*x7*x8 + x2*x5*x6^3*x7*x9 + -x2*x5*x6^3*x7 + x2*x5*x6^2*x7^3*x8*x9 + -x2*x5*x6^2*x7^3*x8 + -x2*x5*x6^2*x7^3*x9 + x2*x5*x6^2*x7^3 + -x2*x5*x6^2*x7^2*x8*x9 + x2*x5*x6^2*x7^2*x8 + x2*x5*x6^2*x7^2*x9 + -x2*x5*x6^2*x7^2 + x2*x5*x6*x7^2*x8^2*x9 + -x2*x5*x6*x7^2*x8^2 + x2*x5*x6*x7^2*x8*x9^2 + -3*x2*x5*x6*x7^2*x8*x9 + 2*x2*x5*x6*x7^2*x8 + -x2*x5*x6*x7^2*x9^2 + 2*x2*x5*x6*x7^2*x9 + -x2*x5*x6*x7^2 + -x2*x5*x6*x7*x8^2*x9 + x2*x5*x6*x7*x8^2 + -x2*x5*x6*x7*x8*x9^2 + 3*x2*x5*x6*x7*x8*x9 + -2*x2*x5*x6*x7*x8 + x2*x5*x6*x7*x9^2 + -2*x2*x5*x6*x7*x9 + x2*x5*x6*x7 + -x2*x5*x7^3*x8*x9 + x2*x5*x7^3*x8 + x2*x5*x7^3*x9 + -x2*x5*x7^3 + -x2*x5*x7^2*x8^2*x9 + x2*x5*x7^2*x8^2 + -x2*x5*x7^2*x8*x9^2 + 3*x2*x5*x7^2*x8*x9 + -2*x2*x5*x7^2*x8 + x2*x5*x7^2*x9^2 + -2*x2*x5*x7^2*x9 + x2*x5*x7^2 + x2*x5*x7*x8^2*x9 + -x2*x5*x7*x8^2 + x2*x5*x7*x8*x9^2 + -2*x2*x5*x7*x8*x9 + x2*x5*x7*x8 + -x2*x5*x7*x9^2 + x2*x5*x7*x9 + -x2*x6^3*x7^2*x8*x9 + x2*x6^3*x7^2*x8 + x2*x6^3*x7^2*x9 + -x2*x6^3*x7^2 + x2*x6^3*x8*x9 + -x2*x6^3*x8 + -x2*x6^3*x9 + x2*x6^3 + -x2*x6^2*x7^3*x8*x9 + x2*x6^2*x7^3*x8 + x2*x6^2*x7^3*x9 + -x2*x6^2*x7^3 + x2*x6^2*x7^2*x8*x9 + -x2*x6^2*x7^2*x8 + -x2*x6^2*x7^2*x9 + x2*x6^2*x7^2 + x2*x6^2*x7*x8*x9 + -x2*x6^2*x7*x8 + -x2*x6^2*x7*x9 + x2*x6^2*x7 + -x2*x6^2*x8*x9 + x2*x6^2*x8 + x2*x6^2*x9 + -x2*x6^2 + -x2*x6*x7^2*x8^2*x9 + x2*x6*x7^2*x8^2 + -x2*x6*x7^2*x8*x9^2 + 3*x2*x6*x7^2*x8*x9 + -2*x2*x6*x7^2*x8 + x2*x6*x7^2*x9^2 + -2*x2*x6*x7^2*x9 + x2*x6*x7^2 + x2*x6*x7*x8^2*x9 + -x2*x6*x7*x8^2 + x2*x6*x7*x8*x9^2 + -3*x2*x6*x7*x8*x9 + 2*x2*x6*x7*x8 + -x2*x6*x7*x9^2 + 2*x2*x6*x7*x9 + -x2*x6*x7 + x2*x7^3*x8*x9 + -x2*x7^3*x8 + -x2*x7^3*x9 + x2*x7^3 + x2*x7^2*x8^2*x9 + -x2*x7^2*x8^2 + x2*x7^2*x8*x9^2 + -3*x2*x7^2*x8*x9 + 2*x2*x7^2*x8 + -x2*x7^2*x9^2 + 2*x2*x7^2*x9 + -x2*x7^2 + -x2*x7*x8^2*x9 + x2*x7*x8^2 + -x2*x7*x8*x9^2 + 2*x2*x7*x8*x9 + -x2*x7*x8 + x2*x7*x9^2 + -x2*x7*x9 + -x3^4*x4^3*x5*x6*x7*x8*x9 + x3^4*x4^3*x5*x6*x7*x8 + x3^4*x4^3*x5*x6*x7*x9 + -x3^4*x4^3*x5*x6*x7 + x3^4*x4^3*x5*x6*x8*x9 + -x3^4*x4^3*x5*x6*x8 + -x3^4*x4^3*x5*x6*x9 + x3^4*x4^3*x5*x6 + x3^4*x4^3*x5*x7*x8*x9 + -x3^4*x4^3*x5*x7*x8 + -x3^4*x4^3*x5*x7*x9 + x3^4*x4^3*x5*x7 + -x3^4*x4^3*x5*x8*x9 + x3^4*x4^3*x5*x8 + x3^4*x4^3*x5*x9 + -x3^4*x4^3*x5 + x3^4*x4^3*x6*x7*x8*x9 + -x3^4*x4^3*x6*x7*x8 + -x3^4*x4^3*x6*x7*x9 + x3^4*x4^3*x6*x7 + -x3^4*x4^3*x6*x8*x9 + x3^4*x4^3*x6*x8 + x3^4*x4^3*x6*x9 + -x3^4*x4^3*x6 + -x3^4*x4^3*x7*x8*x9 + x3^4*x4^3*x7*x8 + x3^4*x4^3*x7*x9 + -x3^4*x4^3*x7 + x3^4*x4^3*x8*x9 + -x3^4*x4^3*x8 + -x3^4*x4^3*x9 + x3^4*x4^3 + x3^4*x5*x6*x7*x8*x9 + -x3^4*x5*x6*x7*x8 + -x3^4*x5*x6*x7*x9 + x3^4*x5*x6*x7 + -x3^4*x5*x6*x8*x9 + x3^4*x5*x6*x8 + x3^4*x5*x6*x9 + -x3^4*x5*x6 + -x3^4*x5*x7*x8*x9 + x3^4*x5*x7*x8 + x3^4*x5*x7*x9 + -x3^4*x5*x7 + x3^4*x5*x8*x9 + -x3^4*x5*x8 + -x3^4*x5*x9 + x3^4*x5 + -x3^4*x6*x7*x8*x9 + x3^4*x6*x7*x8 + x3^4*x6*x7*x9 + -x3^4*x6*x7 + x3^4*x6*x8*x9 + -x3^4*x6*x8 + -x3^4*x6*x9 + x3^4*x6 + x3^4*x7*x8*x9 + -x3^4*x7*x8 + -x3^4*x7*x9 + x3^4*x7 + -x3^4*x8*x9 + x3^4*x8 + x3^4*x9 + -x3^4 + -x3^3*x4^2*x5*x6*x7*x8^2*x9 + x3^3*x4^2*x5*x6*x7*x8^2 + -x3^3*x4^2*x5*x6*x7*x8*x9^2 + 2*x3^3*x4^2*x5*x6*x7*x8*x9 + -x3^3*x4^2*x5*x6*x7*x8 + x3^3*x4^2*x5*x6*x7*x9^2 + -x3^3*x4^2*x5*x6*x7*x9 + x3^3*x4^2*x5*x6*x8^2*x9 + -x3^3*x4^2*x5*x6*x8^2 + x3^3*x4^2*x5*x6*x8*x9^2 + -2*x3^3*x4^2*x5*x6*x8*x9 + x3^3*x4^2*x5*x6*x8 + -x3^3*x4^2*x5*x6*x9^2 + x3^3*x4^2*x5*x6*x9 + x3^3*x4^2*x5*x7*x8^2*x9 + -x3^3*x4^2*x5*x7*x8^2 + x3^3*x4^2*x5*x7*x8*x9^2 + -2*x3^3*x4^2*x5*x7*x8*x9 + x3^3*x4^2*x5*x7*x8 + -x3^3*x4^2*x5*x7*x9^2 + x3^3*x4^2*x5*x7*x9 + -x3^3*x4^2*x5*x8^2*x9 + x3^3*x4^2*x5*x8^2 + -x3^3*x4^2*x5*x8*x9^2 + 2*x3^3*x4^2*x5*x8*x9 + -x3^3*x4^2*x5*x8 + x3^3*x4^2*x5*x9^2 + -x3^3*x4^2*x5*x9 + x3^3*x4^2*x6*x7*x8^2*x9 + -x3^3*x4^2*x6*x7*x8^2 + x3^3*x4^2*x6*x7*x8*x9^2 + -2*x3^3*x4^2*x6*x7*x8*x9 + x3^3*x4^2*x6*x7*x8 + -x3^3*x4^2*x6*x7*x9^2 + x3^3*x4^2*x6*x7*x9 + -x3^3*x4^2*x6*x8^2*x9 + x3^3*x4^2*x6*x8^2 + -x3^3*x4^2*x6*x8*x9^2 + 2*x3^3*x4^2*x6*x8*x9 + -x3^3*x4^2*x6*x8 + x3^3*x4^2*x6*x9^2 + -x3^3*x4^2*x6*x9 + -x3^3*x4^2*x7*x8^2*x9 + x3^3*x4^2*x7*x8^2 + -x3^3*x4^2*x7*x8*x9^2 + 2*x3^3*x4^2*x7*x8*x9 + -x3^3*x4^2*x7*x8 + x3^3*x4^2*x7*x9^2 + -x3^3*x4^2*x7*x9 + x3^3*x4^2*x8^2*x9 + -x3^3*x4^2*x8^2 + x3^3*x4^2*x8*x9^2 + -2*x3^3*x4^2*x8*x9 + x3^3*x4^2*x8 + -x3^3*x4^2*x9^2 + x3^3*x4^2*x9 + -x3^3*x4*x5*x6^3*x7*x8*x9 + x3^3*x4*x5*x6^3*x7*x8 + x3^3*x4*x5*x6^3*x7*x9 + -x3^3*x4*x5*x6^3*x7 + x3^3*x4*x5*x6^3*x8*x9 + -x3^3*x4*x5*x6^3*x8 + -x3^3*x4*x5*x6^3*x9 + x3^3*x4*x5*x6^3 + -x3^3*x4*x5*x6^2*x7^2*x8*x9 + x3^3*x4*x5*x6^2*x7^2*x8 + x3^3*x4*x5*x6^2*x7^2*x9 + -x3^3*x4*x5*x6^2*x7^2 + x3^3*x4*x5*x6^2*x7*x8*x9 + -x3^3*x4*x5*x6^2*x7*x8 + -x3^3*x4*x5*x6^2*x7*x9 + x3^3*x4*x5*x6^2*x7 + x3^3*x4*x5*x6*x7*x8*x9 + -x3^3*x4*x5*x6*x7*x8 + -x3^3*x4*x5*x6*x7*x9 + x3^3*x4*x5*x6*x7 + -x3^3*x4*x5*x6*x8*x9 + x3^3*x4*x5*x6*x8 + x3^3*x4*x5*x6*x9 + -x3^3*x4*x5*x6 + x3^3*x4*x5*x7^2*x8*x9 + -x3^3*x4*x5*x7^2*x8 + -x3^3*x4*x5*x7^2*x9 + x3^3*x4*x5*x7^2 + -x3^3*x4*x5*x7*x8*x9 + x3^3*x4*x5*x7*x8 + x3^3*x4*x5*x7*x9 + -x3^3*x4*x5*x7 + x3^3*x4*x6^3*x7*x8*x9 + -x3^3*x4*x6^3*x7*x8 + -x3^3*x4*x6^3*x7*x9 + x3^3*x4*x6^3*x7 + -x3^3*x4*x6^3*x8*x9 + x3^3*x4*x6^3*x8 + x3^3*x4*x6^3*x9 + -x3^3*x4*x6^3 + x3^3*x4*x6^2*x7^2*x8*x9 + -x3^3*x4*x6^2*x7^2*x8 + -x3^3*x4*x6^2*x7^2*x9 + x3^3*x4*x6^2*x7^2 + -x3^3*x4*x6^2*x7*x8*x9 + x3^3*x4*x6^2*x7*x8 + x3^3*x4*x6^2*x7*x9 + -x3^3*x4*x6^2*x7 + -x3^3*x4*x6*x7*x8*x9 + x3^3*x4*x6*x7*x8 + x3^3*x4*x6*x7*x9 + -x3^3*x4*x6*x7 + x3^3*x4*x6*x8*x9 + -x3^3*x4*x6*x8 + -x3^3*x4*x6*x9 + x3^3*x4*x6 + -x3^3*x4*x7^2*x8*x9 + x3^3*x4*x7^2*x8 + x3^3*x4*x7^2*x9 + -x3^3*x4*x7^2 + x3^3*x4*x7*x8*x9 + -x3^3*x4*x7*x8 + -x3^3*x4*x7*x9 + x3^3*x4*x7 + x3^3*x5*x6^3*x7*x8*x9 + -x3^3*x5*x6^3*x7*x8 + -x3^3*x5*x6^3*x7*x9 + x3^3*x5*x6^3*x7 + -x3^3*x5*x6^3*x8*x9 + x3^3*x5*x6^3*x8 + x3^3*x5*x6^3*x9 + -x3^3*x5*x6^3 + x3^3*x5*x6^2*x7^2*x8*x9 + -x3^3*x5*x6^2*x7^2*x8 + -x3^3*x5*x6^2*x7^2*x9 + x3^3*x5*x6^2*x7^2 + -x3^3*x5*x6^2*x7*x8*x9 + x3^3*x5*x6^2*x7*x8 + x3^3*x5*x6^2*x7*x9 + -x3^3*x5*x6^2*x7 + x3^3*x5*x6*x7*x8^2*x9 + -x3^3*x5*x6*x7*x8^2 + x3^3*x5*x6*x7*x8*x9^2 + -3*x3^3*x5*x6*x7*x8*x9 + 2*x3^3*x5*x6*x7*x8 + -x3^3*x5*x6*x7*x9^2 + 2*x3^3*x5*x6*x7*x9 + -x3^3*x5*x6*x7 + -x3^3*x5*x6*x8^2*x9 + x3^3*x5*x6*x8^2 + -x3^3*x5*x6*x8*x9^2 + 3*x3^3*x5*x6*x8*x9 + -2*x3^3*x5*x6*x8 + x3^3*x5*x6*x9^2 + -2*x3^3*x5*x6*x9 + x3^3*x5*x6 + -x3^3*x5*x7^2*x8*x9 + x3^3*x5*x7^2*x8 + x3^3*x5*x7^2*x9 + -x3^3*x5*x7^2 + -x3^3*x5*x7*x8^2*x9 + x3^3*x5*x7*x8^2 + -x3^3*x5*x7*x8*x9^2 + 3*x3^3*x5*x7*x8*x9 + -2*x3^3*x5*x7*x8 + x3^3*x5*x7*x9^2 + -2*x3^3*x5*x7*x9 + x3^3*x5*x7 + x3^3*x5*x8^2*x9 + -x3^3*x5*x8^2 + x3^3*x5*x8*x9^2 + -2*x3^3*x5*x8*x9 + x3^3*x5*x8 + -x3^3*x5*x9^2 + x3^3*x5*x9 + -x3^3*x6^3*x7*x8*x9 + x3^3*x6^3*x7*x8 + x3^3*x6^3*x7*x9 + -x3^3*x6^3*x7 + x3^3*x6^3*x8*x9 + -x3^3*x6^3*x8 + -x3^3*x6^3*x9 + x3^3*x6^3 + -x3^3*x6^2*x7^2*x8*x9 + x3^3*x6^2*x7^2*x8 + x3^3*x6^2*x7^2*x9 + -x3^3*x6^2*x7^2 + x3^3*x6^2*x7*x8*x9 + -x3^3*x6^2*x7*x8 + -x3^3*x6^2*x7*x9 + x3^3*x6^2*x7 + -x3^3*x6*x7*x8^2*x9 + x3^3*x6*x7*x8^2 + -x3^3*x6*x7*x8*x9^2 + 3*x3^3*x6*x7*x8*x9 + -2*x3^3*x6*x7*x8 + x3^3*x6*x7*x9^2 + -2*x3^3*x6*x7*x9 + x3^3*x6*x7 + x3^3*x6*x8^2*x9 + -x3^3*x6*x8^2 + x3^3*x6*x8*x9^2 + -3*x3^3*x6*x8*x9 + 2*x3^3*x6*x8 + -x3^3*x6*x9^2 + 2*x3^3*x6*x9 + -x3^3*x6 + x3^3*x7^2*x8*x9 + -x3^3*x7^2*x8 + -x3^3*x7^2*x9 + x3^3*x7^2 + x3^3*x7*x8^2*x9 + -x3^3*x7*x8^2 + x3^3*x7*x8*x9^2 + -3*x3^3*x7*x8*x9 + 2*x3^3*x7*x8 + -x3^3*x7*x9^2 + 2*x3^3*x7*x9 + -x3^3*x7 + -x3^3*x8^2*x9 + x3^3*x8^2 + -x3^3*x8*x9^2 + 2*x3^3*x8*x9 + -x3^3*x8 + x3^3*x9^2 + -x3^3*x9 + -x3^2*x4^2*x5^2*x6*x7*x8*x9 + x3^2*x4^2*x5^2*x6*x7*x8 + x3^2*x4^2*x5^2*x6*x7*x9 + -x3^2*x4^2*x5^2*x6*x7 + x3^2*x4^2*x5^2*x6*x8*x9 + -x3^2*x4^2*x5^2*x6*x8 + -x3^2*x4^2*x5^2*x6*x9 + x3^2*x4^2*x5^2*x6 + x3^2*x4^2*x5^2*x7*x8*x9 + -x3^2*x4^2*x5^2*x7*x8 + -x3^2*x4^2*x5^2*x7*x9 + x3^2*x4^2*x5^2*x7 + -x3^2*x4^2*x5^2*x8*x9 + x3^2*x4^2*x5^2*x8 + x3^2*x4^2*x5^2*x9 + -x3^2*x4^2*x5^2 + -x3^2*x4^2*x5*x6*x7^3*x8*x9 + x3^2*x4^2*x5*x6*x7^3*x8 + x3^2*x4^2*x5*x6*x7^3*x9 + -x3^2*x4^2*x5*x6*x7^3 + 2*x3^2*x4^2*x5*x6*x7*x8*x9 + -2*x3^2*x4^2*x5*x6*x7*x8 + -2*x3^2*x4^2*x5*x6*x7*x9 + 2*x3^2*x4^2*x5*x6*x7 + -x3^2*x4^2*x5*x6*x8*x9 + x3^2*x4^2*x5*x6*x8 + x3^2*x4^2*x5*x6*x9 + -x3^2*x4^2*x5*x6 + x3^2*x4^2*x5*x7^3*x8*x9 + -x3^2*x4^2*x5*x7^3*x8 + -x3^2*x4^2*x5*x7^3*x9 + x3^2*x4^2*x5*x7^3 + -2*x3^2*x4^2*x5*x7*x8*x9 + 2*x3^2*x4^2*x5*x7*x8 + 2*x3^2*x4^2*x5*x7*x9 + -2*x3^2*x4^2*x5*x7 + x3^2*x4^2*x5*x8*x9 + -x3^2*x4^2*x5*x8 + -x3^2*x4^2*x5*x9 + x3^2*x4^2*x5 + x3^2*x4^2*x6*x7^3*x8*x9 + -x3^2*x4^2*x6*x7^3*x8 + -x3^2*x4^2*x6*x7^3*x9 + x3^2*x4^2*x6*x7^3 + -x3^2*x4^2*x6*x7*x8*x9 + x3^2*x4^2*x6*x7*x8 + x3^2*x4^2*x6*x7*x9 + -x3^2*x4^2*x6*x7 + -x3^2*x4^2*x7^3*x8*x9 + x3^2*x4^2*x7^3*x8 + x3^2*x4^2*x7^3*x9 + -x3^2*x4^2*x7^3 + x3^2*x4^2*x7*x8*x9 + -x3^2*x4^2*x7*x8 + -x3^2*x4^2*x7*x9 + x3^2*x4^2*x7 + -x3^2*x4*x5^2*x6^2*x7*x8*x9 + x3^2*x4*x5^2*x6^2*x7*x8 + x3^2*x4*x5^2*x6^2*x7*x9 + -x3^2*x4*x5^2*x6^2*x7 + x3^2*x4*x5^2*x6^2*x8*x9 + -x3^2*x4*x5^2*x6^2*x8 + -x3^2*x4*x5^2*x6^2*x9 + x3^2*x4*x5^2*x6^2 + -x3^2*x4*x5^2*x6*x7^2*x8*x9 + x3^2*x4*x5^2*x6*x7^2*x8 + x3^2*x4*x5^2*x6*x7^2*x9 + -x3^2*x4*x5^2*x6*x7^2 + 2*x3^2*x4*x5^2*x6*x7*x8*x9 + -2*x3^2*x4*x5^2*x6*x7*x8 + -2*x3^2*x4*x5^2*x6*x7*x9 + 2*x3^2*x4*x5^2*x6*x7 + -x3^2*x4*x5^2*x6*x8*x9 + x3^2*x4*x5^2*x6*x8 + x3^2*x4*x5^2*x6*x9 + -x3^2*x4*x5^2*x6 + x3^2*x4*x5^2*x7^2*x8*x9 + -x3^2*x4*x5^2*x7^2*x8 + -x3^2*x4*x5^2*x7^2*x9 + x3^2*x4*x5^2*x7^2 + -x3^2*x4*x5^2*x7*x8*x9 + x3^2*x4*x5^2*x7*x8 + x3^2*x4*x5^2*x7*x9 + -x3^2*x4*x5^2*x7 + -x3^2*x4*x5*x6^3*x7^2*x8*x9 + x3^2*x4*x5*x6^3*x7^2*x8 + x3^2*x4*x5*x6^3*x7^2*x9 + -x3^2*x4*x5*x6^3*x7^2 + x3^2*x4*x5*x6^3*x7*x8*x9 + -x3^2*x4*x5*x6^3*x7*x8 + -x3^2*x4*x5*x6^3*x7*x9 + x3^2*x4*x5*x6^3*x7 + x3^2*x4*x5*x6^2*x7^2*x8*x9 + -x3^2*x4*x5*x6^2*x7^2*x8 + -x3^2*x4*x5*x6^2*x7^2*x9 + x3^2*x4*x5*x6^2*x7^2 + -x3^2*x4*x5*x6^2*x8*x9 + x3^2*x4*x5*x6^2*x8 + x3^2*x4*x5*x6^2*x9 + -x3^2*x4*x5*x6^2 + -x3^2*x4*x5*x6*x7^2*x8^2*x9 + x3^2*x4*x5*x6*x7^2*x8^2 + -x3^2*x4*x5*x6*x7^2*x8*x9^2 + 4*x3^2*x4*x5*x6*x7^2*x8*x9 + -3*x3^2*x4*x5*x6*x7^2*x8 + x3^2*x4*x5*x6*x7^2*x9^2 + -3*x3^2*x4*x5*x6*x7^2*x9 + 2*x3^2*x4*x5*x6*x7^2 + -x3^2*x4*x5*x6*x7*x8^2*x9^2 + 2*x3^2*x4*x5*x6*x7*x8^2*x9 + -x3^2*x4*x5*x6*x7*x8^2 + 2*x3^2*x4*x5*x6*x7*x8*x9^2 + -6*x3^2*x4*x5*x6*x7*x8*x9 + 4*x3^2*x4*x5*x6*x7*x8 + -x3^2*x4*x5*x6*x7*x9^2 + 4*x3^2*x4*x5*x6*x7*x9 + -3*x3^2*x4*x5*x6*x7 + x3^2*x4*x5*x6*x8^2*x9^2 + -x3^2*x4*x5*x6*x8^2*x9 + -x3^2*x4*x5*x6*x8*x9^2 + 2*x3^2*x4*x5*x6*x8*x9 + -x3^2*x4*x5*x6*x8 + -x3^2*x4*x5*x6*x9 + x3^2*x4*x5*x6 + x3^2*x4*x5*x7^2*x8^2*x9 + -x3^2*x4*x5*x7^2*x8^2 + x3^2*x4*x5*x7^2*x8*x9^2 + -4*x3^2*x4*x5*x7^2*x8*x9 + 3*x3^2*x4*x5*x7^2*x8 + -x3^2*x4*x5*x7^2*x9^2 + 3*x3^2*x4*x5*x7^2*x9 + -2*x3^2*x4*x5*x7^2 + x3^2*x4*x5*x7*x8^2*x9^2 + -2*x3^2*x4*x5*x7*x8^2*x9 + x3^2*x4*x5*x7*x8^2 + -2*x3^2*x4*x5*x7*x8*x9^2 + 5*x3^2*x4*x5*x7*x8*x9 + -3*x3^2*x4*x5*x7*x8 + x3^2*x4*x5*x7*x9^2 + -3*x3^2*x4*x5*x7*x9 + 2*x3^2*x4*x5*x7 + -x3^2*x4*x5*x8^2*x9^2 + x3^2*x4*x5*x8^2*x9 + x3^2*x4*x5*x8*x9^2 + -x3^2*x4*x5*x8*x9 + x3^2*x4*x6^3*x7^2*x8*x9 + -x3^2*x4*x6^3*x7^2*x8 + -x3^2*x4*x6^3*x7^2*x9 + x3^2*x4*x6^3*x7^2 + -x3^2*x4*x6^3*x7*x8*x9 + x3^2*x4*x6^3*x7*x8 + x3^2*x4*x6^3*x7*x9 + -x3^2*x4*x6^3*x7 + -x3^2*x4*x6^2*x7^2*x8*x9 + x3^2*x4*x6^2*x7^2*x8 + x3^2*x4*x6^2*x7^2*x9 + -x3^2*x4*x6^2*x7^2 + x3^2*x4*x6^2*x7*x8*x9 + -x3^2*x4*x6^2*x7*x8 + -x3^2*x4*x6^2*x7*x9 + x3^2*x4*x6^2*x7 + x3^2*x4*x6*x7^2*x8^2*x9 + -x3^2*x4*x6*x7^2*x8^2 + x3^2*x4*x6*x7^2*x8*x9^2 + -3*x3^2*x4*x6*x7^2*x8*x9 + 2*x3^2*x4*x6*x7^2*x8 + -x3^2*x4*x6*x7^2*x9^2 + 2*x3^2*x4*x6*x7^2*x9 + -x3^2*x4*x6*x7^2 + x3^2*x4*x6*x7*x8^2*x9^2 + -2*x3^2*x4*x6*x7*x8^2*x9 + x3^2*x4*x6*x7*x8^2 + -2*x3^2*x4*x6*x7*x8*x9^2 + 4*x3^2*x4*x6*x7*x8*x9 + -2*x3^2*x4*x6*x7*x8 + x3^2*x4*x6*x7*x9^2 + -2*x3^2*x4*x6*x7*x9 + x3^2*x4*x6*x7 + -x3^2*x4*x6*x8^2*x9^2 + x3^2*x4*x6*x8^2*x9 + x3^2*x4*x6*x8*x9^2 + -x3^2*x4*x6*x8*x9 + -x3^2*x4*x7^2*x8^2*x9 + x3^2*x4*x7^2*x8^2 + -x3^2*x4*x7^2*x8*x9^2 + 3*x3^2*x4*x7^2*x8*x9 + -2*x3^2*x4*x7^2*x8 + x3^2*x4*x7^2*x9^2 + -2*x3^2*x4*x7^2*x9 + x3^2*x4*x7^2 + -x3^2*x4*x7*x8^2*x9^2 + 2*x3^2*x4*x7*x8^2*x9 + -x3^2*x4*x7*x8^2 + 2*x3^2*x4*x7*x8*x9^2 + -4*x3^2*x4*x7*x8*x9 + 2*x3^2*x4*x7*x8 + -x3^2*x4*x7*x9^2 + 2*x3^2*x4*x7*x9 + -x3^2*x4*x7 + x3^2*x4*x8^2*x9^2 + -x3^2*x4*x8^2*x9 + -x3^2*x4*x8*x9^2 + x3^2*x4*x8*x9 + x3^2*x5^2*x6^2*x7*x8*x9 + -x3^2*x5^2*x6^2*x7*x8 + -x3^2*x5^2*x6^2*x7*x9 + x3^2*x5^2*x6^2*x7 + -x3^2*x5^2*x6^2*x8*x9 + x3^2*x5^2*x6^2*x8 + x3^2*x5^2*x6^2*x9 + -x3^2*x5^2*x6^2 + x3^2*x5^2*x6*x7^2*x8*x9 + -x3^2*x5^2*x6*x7^2*x8 + -x3^2*x5^2*x6*x7^2*x9 + x3^2*x5^2*x6*x7^2 + -x3^2*x5^2*x6*x7*x8*x9 + x3^2*x5^2*x6*x7*x8 + x3^2*x5^2*x6*x7*x9 + -x3^2*x5^2*x6*x7 + -x3^2*x5^2*x7^2*x8*x9 + x3^2*x5^2*x7^2*x8 + x3^2*x5^2*x7^2*x9 + -x3^2*x5^2*x7^2 + x3^2*x5^2*x8*x9 + -x3^2*x5^2*x8 + -x3^2*x5^2*x9 + x3^2*x5^2 + x3^2*x5*x6^3*x7^2*x8*x9 + -x3^2*x5*x6^3*x7^2*x8 + -x3^2*x5*x6^3*x7^2*x9 + x3^2*x5*x6^3*x7^2 + -x3^2*x5*x6^3*x7*x8*x9 + x3^2*x5*x6^3*x7*x8 + x3^2*x5*x6^3*x7*x9 + -x3^2*x5*x6^3*x7 + -x3^2*x5*x6^2*x7^2*x8*x9 + x3^2*x5*x6^2*x7^2*x8 + x3^2*x5*x6^2*x7^2*x9 + -x3^2*x5*x6^2*x7^2 + x3^2*x5*x6^2*x8*x9 + -x3^2*x5*x6^2*x8 + -x3^2*x5*x6^2*x9 + x3^2*x5*x6^2 + x3^2*x5*x6*x7^3*x8*x9 + -x3^2*x5*x6*x7^3*x8 + -x3^2*x5*x6*x7^3*x9 + x3^2*x5*x6*x7^3 + x3^2*x5*x6*x7^2*x8^2*x9 + -x3^2*x5*x6*x7^2*x8^2 + x3^2*x5*x6*x7^2*x8*x9^2 + -4*x3^2*x5*x6*x7^2*x8*x9 + 3*x3^2*x5*x6*x7^2*x8 + -x3^2*x5*x6*x7^2*x9^2 + 3*x3^2*x5*x6*x7^2*x9 + -2*x3^2*x5*x6*x7^2 + x3^2*x5*x6*x7*x8^2*x9^2 + -2*x3^2*x5*x6*x7*x8^2*x9 + x3^2*x5*x6*x7*x8^2 + -2*x3^2*x5*x6*x7*x8*x9^2 + 4*x3^2*x5*x6*x7*x8*x9 + -2*x3^2*x5*x6*x7*x8 + x3^2*x5*x6*x7*x9^2 + -2*x3^2*x5*x6*x7*x9 + x3^2*x5*x6*x7 + -x3^2*x5*x6*x8^2*x9^2 + x3^2*x5*x6*x8^2*x9 + x3^2*x5*x6*x8*x9^2 + -x3^2*x5*x6*x8*x9 + -x3^2*x5*x7^3*x8*x9 + x3^2*x5*x7^3*x8 + x3^2*x5*x7^3*x9 + -x3^2*x5*x7^3 + -x3^2*x5*x7^2*x8^2*x9 + x3^2*x5*x7^2*x8^2 + -x3^2*x5*x7^2*x8*x9^2 + 4*x3^2*x5*x7^2*x8*x9 + -3*x3^2*x5*x7^2*x8 + x3^2*x5*x7^2*x9^2 + -3*x3^2*x5*x7^2*x9 + 2*x3^2*x5*x7^2 + -x3^2*x5*x7*x8^2*x9^2 + 2*x3^2*x5*x7*x8^2*x9 + -x3^2*x5*x7*x8^2 + 2*x3^2*x5*x7*x8*x9^2 + -3*x3^2*x5*x7*x8*x9 + x3^2*x5*x7*x8 + -x3^2*x5*x7*x9^2 + x3^2*x5*x7*x9 + x3^2*x5*x8^2*x9^2 + -x3^2*x5*x8^2*x9 + -x3^2*x5*x8*x9^2 + x3^2*x5*x8 + x3^2*x5*x9 + -x3^2*x5 + -x3^2*x6^3*x7^2*x8*x9 + x3^2*x6^3*x7^2*x8 + x3^2*x6^3*x7^2*x9 + -x3^2*x6^3*x7^2 + x3^2*x6^3*x7*x8*x9 + -x3^2*x6^3*x7*x8 + -x3^2*x6^3*x7*x9 + x3^2*x6^3*x7 + x3^2*x6^2*x7^2*x8*x9 + -x3^2*x6^2*x7^2*x8 + -x3^2*x6^2*x7^2*x9 + x3^2*x6^2*x7^2 + -x3^2*x6^2*x7*x8*x9 + x3^2*x6^2*x7*x8 + x3^2*x6^2*x7*x9 + -x3^2*x6^2*x7 + -x3^2*x6*x7^3*x8*x9 + x3^2*x6*x7^3*x8 + x3^2*x6*x7^3*x9 + -x3^2*x6*x7^3 + -x3^2*x6*x7^2*x8^2*x9 + x3^2*x6*x7^2*x8^2 + -x3^2*x6*x7^2*x8*x9^2 + 3*x3^2*x6*x7^2*x8*x9 + -2*x3^2*x6*x7^2*x8 + x3^2*x6*x7^2*x9^2 + -2*x3^2*x6*x7^2*x9 + x3^2*x6*x7^2 + -x3^2*x6*x7*x8^2*x9^2 + 2*x3^2*x6*x7*x8^2*x9 + -x3^2*x6*x7*x8^2 + 2*x3^2*x6*x7*x8*x9^2 + -3*x3^2*x6*x7*x8*x9 + x3^2*x6*x7*x8 + -x3^2*x6*x7*x9^2 + x3^2*x6*x7*x9 + x3^2*x6*x8^2*x9^2 + -x3^2*x6*x8^2*x9 + -x3^2*x6*x8*x9^2 + x3^2*x6*x8*x9 + x3^2*x7^3*x8*x9 + -x3^2*x7^3*x8 + -x3^2*x7^3*x9 + x3^2*x7^3 + x3^2*x7^2*x8^2*x9 + -x3^2*x7^2*x8^2 + x3^2*x7^2*x8*x9^2 + -3*x3^2*x7^2*x8*x9 + 2*x3^2*x7^2*x8 + -x3^2*x7^2*x9^2 + 2*x3^2*x7^2*x9 + -x3^2*x7^2 + x3^2*x7*x8^2*x9^2 + -2*x3^2*x7*x8^2*x9 + x3^2*x7*x8^2 + -2*x3^2*x7*x8*x9^2 + 3*x3^2*x7*x8*x9 + -x3^2*x7*x8 + x3^2*x7*x9^2 + -x3^2*x7*x9 + -x3^2*x8^2*x9^2 + x3^2*x8^2*x9 + x3^2*x8*x9^2 + -x3^2*x8*x9 + -x3*x4^3*x5^2*x6^2*x7*x8*x9 + x3*x4^3*x5^2*x6^2*x7*x8 + x3*x4^3*x5^2*x6^2*x7*x9 + -x3*x4^3*x5^2*x6^2*x7 + x3*x4^3*x5^2*x6^2*x8*x9 + -x3*x4^3*x5^2*x6^2*x8 + -x3*x4^3*x5^2*x6^2*x9 + x3*x4^3*x5^2*x6^2 + x3*x4^3*x5^2*x7*x8*x9 + -x3*x4^3*x5^2*x7*x8 + -x3*x4^3*x5^2*x7*x9 + x3*x4^3*x5^2*x7 + -x3*x4^3*x5^2*x8*x9 + x3*x4^3*x5^2*x8 + x3*x4^3*x5^2*x9 + -x3*x4^3*x5^2 + -x3*x4^3*x5*x6*x7^2*x8*x9 + x3*x4^3*x5*x6*x7^2*x8 + x3*x4^3*x5*x6*x7^2*x9 + -x3*x4^3*x5*x6*x7^2 + -x3*x4^3*x5*x6*x7*x8*x9^2 + 3*x3*x4^3*x5*x6*x7*x8*x9 + -2*x3*x4^3*x5*x6*x7*x8 + x3*x4^3*x5*x6*x7*x9^2 + -3*x3*x4^3*x5*x6*x7*x9 + 2*x3*x4^3*x5*x6*x7 + x3*x4^3*x5*x6*x8*x9^2 + -2*x3*x4^3*x5*x6*x8*x9 + x3*x4^3*x5*x6*x8 + -x3*x4^3*x5*x6*x9^2 + 2*x3*x4^3*x5*x6*x9 + -x3*x4^3*x5*x6 + x3*x4^3*x5*x7^2*x8*x9 + -x3*x4^3*x5*x7^2*x8 + -x3*x4^3*x5*x7^2*x9 + x3*x4^3*x5*x7^2 + x3*x4^3*x5*x7*x8*x9^2 + -3*x3*x4^3*x5*x7*x8*x9 + 2*x3*x4^3*x5*x7*x8 + -x3*x4^3*x5*x7*x9^2 + 3*x3*x4^3*x5*x7*x9 + -2*x3*x4^3*x5*x7 + -x3*x4^3*x5*x8*x9^2 + 2*x3*x4^3*x5*x8*x9 + -x3*x4^3*x5*x8 + x3*x4^3*x5*x9^2 + -2*x3*x4^3*x5*x9 + x3*x4^3*x5 + x3*x4^3*x6^2*x7*x8*x9 + -x3*x4^3*x6^2*x7*x8 + -x3*x4^3*x6^2*x7*x9 + x3*x4^3*x6^2*x7 + -x3*x4^3*x6^2*x8*x9 + x3*x4^3*x6^2*x8 + x3*x4^3*x6^2*x9 + -x3*x4^3*x6^2 + x3*x4^3*x6*x7^2*x8*x9 + -x3*x4^3*x6*x7^2*x8 + -x3*x4^3*x6*x7^2*x9 + x3*x4^3*x6*x7^2 + x3*x4^3*x6*x7*x8*x9^2 + -3*x3*x4^3*x6*x7*x8*x9 + 2*x3*x4^3*x6*x7*x8 + -x3*x4^3*x6*x7*x9^2 + 3*x3*x4^3*x6*x7*x9 + -2*x3*x4^3*x6*x7 + -x3*x4^3*x6*x8*x9^2 + 2*x3*x4^3*x6*x8*x9 + -x3*x4^3*x6*x8 + x3*x4^3*x6*x9^2 + -2*x3*x4^3*x6*x9 + x3*x4^3*x6 + -x3*x4^3*x7^2*x8*x9 + x3*x4^3*x7^2*x8 + x3*x4^3*x7^2*x9 + -x3*x4^3*x7^2 + -x3*x4^3*x7*x8*x9^2 + 2*x3*x4^3*x7*x8*x9 + -x3*x4^3*x7*x8 + x3*x4^3*x7*x9^2 + -2*x3*x4^3*x7*x9 + x3*x4^3*x7 + x3*x4^3*x8*x9^2 + -x3*x4^3*x8*x9 + -x3*x4^3*x9^2 + x3*x4^3*x9 + x3*x4^2*x5^2*x6*x7*x8*x9 + -x3*x4^2*x5^2*x6*x7*x8 + -x3*x4^2*x5^2*x6*x7*x9 + x3*x4^2*x5^2*x6*x7 + -x3*x4^2*x5^2*x6*x8*x9 + x3*x4^2*x5^2*x6*x8 + x3*x4^2*x5^2*x6*x9 + -x3*x4^2*x5^2*x6 + -x3*x4^2*x5^2*x7*x8*x9 + x3*x4^2*x5^2*x7*x8 + x3*x4^2*x5^2*x7*x9 + -x3*x4^2*x5^2*x7 + x3*x4^2*x5^2*x8*x9 + -x3*x4^2*x5^2*x8 + -x3*x4^2*x5^2*x9 + x3*x4^2*x5^2 + -x3*x4^2*x5*x6*x7^2*x8*x9^2 + 2*x3*x4^2*x5*x6*x7^2*x8*x9 + -x3*x4^2*x5*x6*x7^2*x8 + x3*x4^2*x5*x6*x7^2*x9^2 + -2*x3*x4^2*x5*x6*x7^2*x9 + x3*x4^2*x5*x6*x7^2 + 2*x3*x4^2*x5*x6*x7*x8*x9^2 + -4*x3*x4^2*x5*x6*x7*x8*x9 + 2*x3*x4^2*x5*x6*x7*x8 + -2*x3*x4^2*x5*x6*x7*x9^2 + 4*x3*x4^2*x5*x6*x7*x9 + -2*x3*x4^2*x5*x6*x7 + -x3*x4^2*x5*x6*x8*x9^2 + 2*x3*x4^2*x5*x6*x8*x9 + -x3*x4^2*x5*x6*x8 + x3*x4^2*x5*x6*x9^2 + -2*x3*x4^2*x5*x6*x9 + x3*x4^2*x5*x6 + x3*x4^2*x5*x7^2*x8*x9^2 + -2*x3*x4^2*x5*x7^2*x8*x9 + x3*x4^2*x5*x7^2*x8 + -x3*x4^2*x5*x7^2*x9^2 + 2*x3*x4^2*x5*x7^2*x9 + -x3*x4^2*x5*x7^2 + -2*x3*x4^2*x5*x7*x8*x9^2 + 4*x3*x4^2*x5*x7*x8*x9 + -2*x3*x4^2*x5*x7*x8 + 2*x3*x4^2*x5*x7*x9^2 + -4*x3*x4^2*x5*x7*x9 + 2*x3*x4^2*x5*x7 + x3*x4^2*x5*x8*x9^2 + -2*x3*x4^2*x5*x8*x9 + x3*x4^2*x5*x8 + -x3*x4^2*x5*x9^2 + 2*x3*x4^2*x5*x9 + -x3*x4^2*x5 + x3*x4^2*x6*x7^2*x8*x9^2 + -2*x3*x4^2*x6*x7^2*x8*x9 + x3*x4^2*x6*x7^2*x8 + -x3*x4^2*x6*x7^2*x9^2 + 2*x3*x4^2*x6*x7^2*x9 + -x3*x4^2*x6*x7^2 + -2*x3*x4^2*x6*x7*x8*x9^2 + 3*x3*x4^2*x6*x7*x8*x9 + -x3*x4^2*x6*x7*x8 + 2*x3*x4^2*x6*x7*x9^2 + -3*x3*x4^2*x6*x7*x9 + x3*x4^2*x6*x7 + x3*x4^2*x6*x8*x9^2 + -x3*x4^2*x6*x8*x9 + -x3*x4^2*x6*x9^2 + x3*x4^2*x6*x9 + -x3*x4^2*x7^2*x8*x9^2 + 2*x3*x4^2*x7^2*x8*x9 + -x3*x4^2*x7^2*x8 + x3*x4^2*x7^2*x9^2 + -2*x3*x4^2*x7^2*x9 + x3*x4^2*x7^2 + 2*x3*x4^2*x7*x8*x9^2 + -3*x3*x4^2*x7*x8*x9 + x3*x4^2*x7*x8 + -2*x3*x4^2*x7*x9^2 + 3*x3*x4^2*x7*x9 + -x3*x4^2*x7 + -x3*x4^2*x8*x9^2 + x3*x4^2*x8*x9 + x3*x4^2*x9^2 + -x3*x4^2*x9 + -x3*x4*x5^3*x6^2*x7*x8*x9 + x3*x4*x5^3*x6^2*x7*x8 + x3*x4*x5^3*x6^2*x7*x9 + -x3*x4*x5^3*x6^2*x7 + x3*x4*x5^3*x6^2*x8*x9 + -x3*x4*x5^3*x6^2*x8 + -x3*x4*x5^3*x6^2*x9 + x3*x4*x5^3*x6^2 + x3*x4*x5^3*x7*x8*x9 + -x3*x4*x5^3*x7*x8 + -x3*x4*x5^3*x7*x9 + x3*x4*x5^3*x7 + -x3*x4*x5^3*x8*x9 + x3*x4*x5^3*x8 + x3*x4*x5^3*x9 + -x3*x4*x5^3 + -x3*x4*x5^2*x6^3*x7*x8*x9 + x3*x4*x5^2*x6^3*x7*x8 + x3*x4*x5^2*x6^3*x7*x9 + -x3*x4*x5^2*x6^3*x7 + x3*x4*x5^2*x6^3*x8*x9 + -x3*x4*x5^2*x6^3*x8 + -x3*x4*x5^2*x6^3*x9 + x3*x4*x5^2*x6^3 + 3*x3*x4*x5^2*x6^2*x7*x8*x9 + -3*x3*x4*x5^2*x6^2*x7*x8 + -3*x3*x4*x5^2*x6^2*x7*x9 + 3*x3*x4*x5^2*x6^2*x7 + -3*x3*x4*x5^2*x6^2*x8*x9 + 3*x3*x4*x5^2*x6^2*x8 + 3*x3*x4*x5^2*x6^2*x9 + -3*x3*x4*x5^2*x6^2 + -x3*x4*x5^2*x6*x7*x8*x9 + x3*x4*x5^2*x6*x7*x8 + x3*x4*x5^2*x6*x7*x9 + -x3*x4*x5^2*x6*x7 + x3*x4*x5^2*x6*x8*x9 + -x3*x4*x5^2*x6*x8 + -x3*x4*x5^2*x6*x9 + x3*x4*x5^2*x6 + -x3*x4*x5^2*x7*x8*x9 + x3*x4*x5^2*x7*x8 + x3*x4*x5^2*x7*x9 + -x3*x4*x5^2*x7 + x3*x4*x5^2*x8*x9 + -x3*x4*x5^2*x8 + -x3*x4*x5^2*x9 + x3*x4*x5^2 + x3*x4*x5*x6^3*x7*x8*x9 + -x3*x4*x5*x6^3*x7*x8 + -x3*x4*x5*x6^3*x7*x9 + x3*x4*x5*x6^3*x7 + -x3*x4*x5*x6^3*x8*x9 + x3*x4*x5*x6^3*x8 + x3*x4*x5*x6^3*x9 + -x3*x4*x5*x6^3 + -x3*x4*x5*x6^2*x7^3*x8*x9 + x3*x4*x5*x6^2*x7^3*x8 + x3*x4*x5*x6^2*x7^3*x9 + -x3*x4*x5*x6^2*x7^3 + x3*x4*x5*x6^2*x7^2*x8*x9 + -x3*x4*x5*x6^2*x7^2*x8 + -x3*x4*x5*x6^2*x7^2*x9 + x3*x4*x5*x6^2*x7^2 + -x3*x4*x5*x6^2*x7*x8*x9 + x3*x4*x5*x6^2*x7*x8 + x3*x4*x5*x6^2*x7*x9 + -x3*x4*x5*x6^2*x7 + x3*x4*x5*x6^2*x8*x9 + -x3*x4*x5*x6^2*x8 + -x3*x4*x5*x6^2*x9 + x3*x4*x5*x6^2 + x3*x4*x5*x6*x7^3*x8*x9 + -x3*x4*x5*x6*x7^3*x8 + -x3*x4*x5*x6*x7^3*x9 + x3*x4*x5*x6*x7^3 + x3*x4*x5*x6*x7^2*x8*x9^2 + -2*x3*x4*x5*x6*x7^2*x8*x9 + x3*x4*x5*x6*x7^2*x8 + -x3*x4*x5*x6*x7^2*x9^2 + 2*x3*x4*x5*x6*x7^2*x9 + -x3*x4*x5*x6*x7^2 + -x3*x4*x5*x6*x7*x8*x9^2 + x3*x4*x5*x6*x7*x8*x9 + x3*x4*x5*x6*x7*x9^2 + -x3*x4*x5*x6*x7*x9 + -x3*x4*x5*x7^2*x8*x9^2 + x3*x4*x5*x7^2*x8*x9 + x3*x4*x5*x7^2*x9^2 + -x3*x4*x5*x7^2*x9 + x3*x4*x5*x7*x8*x9^2 + -x3*x4*x5*x7*x8*x9 + -x3*x4*x5*x7*x9^2 + x3*x4*x5*x7*x9 + x3*x4*x6^2*x7^3*x8*x9 + -x3*x4*x6^2*x7^3*x8 + -x3*x4*x6^2*x7^3*x9 + x3*x4*x6^2*x7^3 + -x3*x4*x6^2*x7^2*x8*x9 + x3*x4*x6^2*x7^2*x8 + x3*x4*x6^2*x7^2*x9 + -x3*x4*x6^2*x7^2 + -x3*x4*x6^2*x7*x8*x9 + x3*x4*x6^2*x7*x8 + x3*x4*x6^2*x7*x9 + -x3*x4*x6^2*x7 + x3*x4*x6^2*x8*x9 + -x3*x4*x6^2*x8 + -x3*x4*x6^2*x9 + x3*x4*x6^2 + -x3*x4*x6*x7^3*x8*x9 + x3*x4*x6*x7^3*x8 + x3*x4*x6*x7^3*x9 + -x3*x4*x6*x7^3 + -x3*x4*x6*x7^2*x8*x9^2 + 2*x3*x4*x6*x7^2*x8*x9 + -x3*x4*x6*x7^2*x8 + x3*x4*x6*x7^2*x9^2 + -2*x3*x4*x6*x7^2*x9 + x3*x4*x6*x7^2 + x3*x4*x6*x7*x8*x9^2 + -x3*x4*x6*x7*x8 + -x3*x4*x6*x7*x9^2 + x3*x4*x6*x7 + -x3*x4*x6*x8*x9 + x3*x4*x6*x8 + x3*x4*x6*x9 + -x3*x4*x6 + x3*x4*x7^2*x8*x9^2 + -x3*x4*x7^2*x8*x9 + -x3*x4*x7^2*x9^2 + x3*x4*x7^2*x9 + -x3*x4*x7*x8*x9^2 + x3*x4*x7*x8*x9 + x3*x4*x7*x9^2 + -x3*x4*x7*x9 + x3*x5^3*x6^2*x7*x8*x9 + -x3*x5^3*x6^2*x7*x8 + -x3*x5^3*x6^2*x7*x9 + x3*x5^3*x6^2*x7 + -x3*x5^3*x6^2*x8*x9 + x3*x5^3*x6^2*x8 + x3*x5^3*x6^2*x9 + -x3*x5^3*x6^2 + -x3*x5^3*x7*x8*x9 + x3*x5^3*x7*x8 + x3*x5^3*x7*x9 + -x3*x5^3*x7 + x3*x5^3*x8*x9 + -x3*x5^3*x8 + -x3*x5^3*x9 + x3*x5^3 + x3*x5^2*x6^3*x7*x8*x9 + -x3*x5^2*x6^3*x7*x8 + -x3*x5^2*x6^3*x7*x9 + x3*x5^2*x6^3*x7 + -x3*x5^2*x6^3*x8*x9 + x3*x5^2*x6^3*x8 + x3*x5^2*x6^3*x9 + -x3*x5^2*x6^3 + -2*x3*x5^2*x6^2*x7*x8*x9 + 2*x3*x5^2*x6^2*x7*x8 + 2*x3*x5^2*x6^2*x7*x9 + -2*x3*x5^2*x6^2*x7 + 2*x3*x5^2*x6^2*x8*x9 + -2*x3*x5^2*x6^2*x8 + -2*x3*x5^2*x6^2*x9 + 2*x3*x5^2*x6^2 + x3*x5^2*x7*x8*x9 + -x3*x5^2*x7*x8 + -x3*x5^2*x7*x9 + x3*x5^2*x7 + -x3*x5^2*x8*x9 + x3*x5^2*x8 + x3*x5^2*x9 + -x3*x5^2 + -x3*x5*x6^3*x7*x8*x9 + x3*x5*x6^3*x7*x8 + x3*x5*x6^3*x7*x9 + -x3*x5*x6^3*x7 + x3*x5*x6^3*x8*x9 + -x3*x5*x6^3*x8 + -x3*x5*x6^3*x9 + x3*x5*x6^3 + x3*x5*x6^2*x7^3*x8*x9 + -x3*x5*x6^2*x7^3*x8 + -x3*x5*x6^2*x7^3*x9 + x3*x5*x6^2*x7^3 + -x3*x5*x6^2*x7^2*x8*x9 + x3*x5*x6^2*x7^2*x8 + x3*x5*x6^2*x7^2*x9 + -x3*x5*x6^2*x7^2 + x3*x5*x6^2*x7*x8*x9 + -x3*x5*x6^2*x7*x8 + -x3*x5*x6^2*x7*x9 + x3*x5*x6^2*x7 + -x3*x5*x6^2*x8*x9 + x3*x5*x6^2*x8 + x3*x5*x6^2*x9 + -x3*x5*x6^2 + -x3*x5*x6*x7^3*x8*x9 + x3*x5*x6*x7^3*x8 + x3*x5*x6*x7^3*x9 + -x3*x5*x6*x7^3 + x3*x5*x6*x7^2*x8*x9 + -x3*x5*x6*x7^2*x8 + -x3*x5*x6*x7^2*x9 + x3*x5*x6*x7^2 + -x3*x6^2*x7^3*x8*x9 + x3*x6^2*x7^3*x8 + x3*x6^2*x7^3*x9 + -x3*x6^2*x7^3 + x3*x6^2*x7^2*x8*x9 + -x3*x6^2*x7^2*x8 + -x3*x6^2*x7^2*x9 + x3*x6^2*x7^2 + x3*x6*x7^3*x8*x9 + -x3*x6*x7^3*x8 + -x3*x6*x7^3*x9 + x3*x6*x7^3 + -x3*x6*x7^2*x8*x9 + x3*x6*x7^2*x8 + x3*x6*x7^2*x9 + -x3*x6*x7^2 + x4^3*x5^2*x6^2*x7*x8*x9 + -x4^3*x5^2*x6^2*x7*x8 + -x4^3*x5^2*x6^2*x7*x9 + x4^3*x5^2*x6^2*x7 + -x4^3*x5^2*x6^2*x8*x9 + x4^3*x5^2*x6^2*x8 + x4^3*x5^2*x6^2*x9 + -x4^3*x5^2*x6^2 + -x4^3*x5^2*x7*x8*x9 + x4^3*x5^2*x7*x8 + x4^3*x5^2*x7*x9 + -x4^3*x5^2*x7 + x4^3*x5^2*x8*x9 + -x4^3*x5^2*x8 + -x4^3*x5^2*x9 + x4^3*x5^2 + x4^3*x5*x6*x7^2*x8*x9 + -x4^3*x5*x6*x7^2*x8 + -x4^3*x5*x6*x7^2*x9 + x4^3*x5*x6*x7^2 + x4^3*x5*x6*x7*x8*x9^2 + -2*x4^3*x5*x6*x7*x8*x9 + x4^3*x5*x6*x7*x8 + -x4^3*x5*x6*x7*x9^2 + 2*x4^3*x5*x6*x7*x9 + -x4^3*x5*x6*x7 + -x4^3*x5*x6*x8*x9^2 + x4^3*x5*x6*x8*x9 + x4^3*x5*x6*x9^2 + -x4^3*x5*x6*x9 + -x4^3*x5*x7^2*x8*x9 + x4^3*x5*x7^2*x8 + x4^3*x5*x7^2*x9 + -x4^3*x5*x7^2 + -x4^3*x5*x7*x8*x9^2 + 2*x4^3*x5*x7*x8*x9 + -x4^3*x5*x7*x8 + x4^3*x5*x7*x9^2 + -2*x4^3*x5*x7*x9 + x4^3*x5*x7 + x4^3*x5*x8*x9^2 + -x4^3*x5*x8*x9 + -x4^3*x5*x9^2 + x4^3*x5*x9 + -x4^3*x6^2*x7*x8*x9 + x4^3*x6^2*x7*x8 + x4^3*x6^2*x7*x9 + -x4^3*x6^2*x7 + x4^3*x6^2*x8*x9 + -x4^3*x6^2*x8 + -x4^3*x6^2*x9 + x4^3*x6^2 + -x4^3*x6*x7^2*x8*x9 + x4^3*x6*x7^2*x8 + x4^3*x6*x7^2*x9 + -x4^3*x6*x7^2 + -x4^3*x6*x7*x8*x9^2 + 2*x4^3*x6*x7*x8*x9 + -x4^3*x6*x7*x8 + x4^3*x6*x7*x9^2 + -2*x4^3*x6*x7*x9 + x4^3*x6*x7 + x4^3*x6*x8*x9^2 + -x4^3*x6*x8*x9 + -x4^3*x6*x9^2 + x4^3*x6*x9 + x4^3*x7^2*x8*x9 + -x4^3*x7^2*x8 + -x4^3*x7^2*x9 + x4^3*x7^2 + x4^3*x7*x8*x9^2 + -x4^3*x7*x8*x9 + -x4^3*x7*x9^2 + x4^3*x7*x9 + -x4^3*x8*x9^2 + x4^3*x8 + x4^3*x9^2 + -x4^3 + x4^2*x5*x6*x7^3*x8*x9 + -x4^2*x5*x6*x7^3*x8 + -x4^2*x5*x6*x7^3*x9 + x4^2*x5*x6*x7^3 + x4^2*x5*x6*x7^2*x8*x9^2 + -2*x4^2*x5*x6*x7^2*x8*x9 + x4^2*x5*x6*x7^2*x8 + -x4^2*x5*x6*x7^2*x9^2 + 2*x4^2*x5*x6*x7^2*x9 + -x4^2*x5*x6*x7^2 + x4^2*x5*x6*x7*x8^2*x9 + -x4^2*x5*x6*x7*x8^2 + -x4^2*x5*x6*x7*x8*x9^2 + x4^2*x5*x6*x7*x8 + x4^2*x5*x6*x7*x9^2 + -x4^2*x5*x6*x7*x9 + -x4^2*x5*x6*x8^2*x9 + x4^2*x5*x6*x8^2 + x4^2*x5*x6*x8*x9 + -x4^2*x5*x6*x8 + -x4^2*x5*x7^3*x8*x9 + x4^2*x5*x7^3*x8 + x4^2*x5*x7^3*x9 + -x4^2*x5*x7^3 + -x4^2*x5*x7^2*x8*x9^2 + 2*x4^2*x5*x7^2*x8*x9 + -x4^2*x5*x7^2*x8 + x4^2*x5*x7^2*x9^2 + -2*x4^2*x5*x7^2*x9 + x4^2*x5*x7^2 + -x4^2*x5*x7*x8^2*x9 + x4^2*x5*x7*x8^2 + x4^2*x5*x7*x8*x9^2 + -x4^2*x5*x7*x8 + -x4^2*x5*x7*x9^2 + x4^2*x5*x7*x9 + x4^2*x5*x8^2*x9 + -x4^2*x5*x8^2 + -x4^2*x5*x8*x9 + x4^2*x5*x8 + -x4^2*x6*x7^3*x8*x9 + x4^2*x6*x7^3*x8 + x4^2*x6*x7^3*x9 + -x4^2*x6*x7^3 + -x4^2*x6*x7^2*x8*x9^2 + 2*x4^2*x6*x7^2*x8*x9 + -x4^2*x6*x7^2*x8 + x4^2*x6*x7^2*x9^2 + -2*x4^2*x6*x7^2*x9 + x4^2*x6*x7^2 + -x4^2*x6*x7*x8^2*x9 + x4^2*x6*x7*x8^2 + x4^2*x6*x7*x8*x9^2 + -x4^2*x6*x7*x8 + -x4^2*x6*x7*x9^2 + x4^2*x6*x7*x9 + x4^2*x6*x8^2*x9 + -x4^2*x6*x8^2 + -x4^2*x6*x8*x9 + x4^2*x6*x8 + x4^2*x7^3*x8*x9 + -x4^2*x7^3*x8 + -x4^2*x7^3*x9 + x4^2*x7^3 + x4^2*x7^2*x8*x9^2 + -2*x4^2*x7^2*x8*x9 + x4^2*x7^2*x8 + -x4^2*x7^2*x9^2 + 2*x4^2*x7^2*x9 + -x4^2*x7^2 + x4^2*x7*x8^2*x9 + -x4^2*x7*x8^2 + -x4^2*x7*x8*x9^2 + x4^2*x7*x8 + x4^2*x7*x9^2 + -x4^2*x7*x9 + -x4^2*x8^2*x9 + x4^2*x8^2 + x4^2*x8*x9 + -x4^2*x8 + x4*x5^3*x6^2*x7*x8*x9 + -x4*x5^3*x6^2*x7*x8 + -x4*x5^3*x6^2*x7*x9 + x4*x5^3*x6^2*x7 + -x4*x5^3*x6^2*x8*x9 + x4*x5^3*x6^2*x8 + x4*x5^3*x6^2*x9 + -x4*x5^3*x6^2 + -x4*x5^3*x7*x8*x9 + x4*x5^3*x7*x8 + x4*x5^3*x7*x9 + -x4*x5^3*x7 + x4*x5^3*x8*x9 + -x4*x5^3*x8 + -x4*x5^3*x9 + x4*x5^3 + x4*x5^2*x6^3*x7*x8*x9 + -x4*x5^2*x6^3*x7*x8 + -x4*x5^2*x6^3*x7*x9 + x4*x5^2*x6^3*x7 + -x4*x5^2*x6^3*x8*x9 + x4*x5^2*x6^3*x8 + x4*x5^2*x6^3*x9 + -x4*x5^2*x6^3 + -2*x4*x5^2*x6^2*x7*x8*x9 + 2*x4*x5^2*x6^2*x7*x8 + 2*x4*x5^2*x6^2*x7*x9 + -2*x4*x5^2*x6^2*x7 + 2*x4*x5^2*x6^2*x8*x9 + -2*x4*x5^2*x6^2*x8 + -2*x4*x5^2*x6^2*x9 + 2*x4*x5^2*x6^2 + x4*x5^2*x6*x7^2*x8*x9 + -x4*x5^2*x6*x7^2*x8 + -x4*x5^2*x6*x7^2*x9 + x4*x5^2*x6*x7^2 + -x4*x5^2*x6*x7*x8*x9 + x4*x5^2*x6*x7*x8 + x4*x5^2*x6*x7*x9 + -x4*x5^2*x6*x7 + -x4*x5^2*x7^2*x8*x9 + x4*x5^2*x7^2*x8 + x4*x5^2*x7^2*x9 + -x4*x5^2*x7^2 + 2*x4*x5^2*x7*x8*x9 + -2*x4*x5^2*x7*x8 + -2*x4*x5^2*x7*x9 + 2*x4*x5^2*x7 + -x4*x5^2*x8*x9 + x4*x5^2*x8 + x4*x5^2*x9 + -x4*x5^2 + x4*x5*x6^3*x7^2*x8*x9 + -x4*x5*x6^3*x7^2*x8 + -x4*x5*x6^3*x7^2*x9 + x4*x5*x6^3*x7^2 + -x4*x5*x6^3*x7*x8*x9 + x4*x5*x6^3*x7*x8 + x4*x5*x6^3*x7*x9 + -x4*x5*x6^3*x7 + x4*x5*x6^2*x7^3*x8*x9 + -x4*x5*x6^2*x7^3*x8 + -x4*x5*x6^2*x7^3*x9 + x4*x5*x6^2*x7^3 + -x4*x5*x6^2*x7^2*x8*x9 + x4*x5*x6^2*x7^2*x8 + x4*x5*x6^2*x7^2*x9 + -x4*x5*x6^2*x7^2 + -x4*x5*x6*x7^3*x8*x9 + x4*x5*x6*x7^3*x8 + x4*x5*x6*x7^3*x9 + -x4*x5*x6*x7^3 + x4*x5*x6*x7^2*x8^2*x9 + -x4*x5*x6*x7^2*x8^2 + -2*x4*x5*x6*x7^2*x8*x9 + 2*x4*x5*x6*x7^2*x8 + x4*x5*x6*x7^2*x9 + -x4*x5*x6*x7^2 + x4*x5*x6*x7*x8^2*x9^2 + -2*x4*x5*x6*x7*x8^2*x9 + x4*x5*x6*x7*x8^2 + -x4*x5*x6*x7*x8*x9^2 + 4*x4*x5*x6*x7*x8*x9 + -3*x4*x5*x6*x7*x8 + -2*x4*x5*x6*x7*x9 + 2*x4*x5*x6*x7 + -x4*x5*x6*x8^2*x9^2 + x4*x5*x6*x8^2*x9 + x4*x5*x6*x8*x9^2 + -x4*x5*x6*x8*x9 + -x4*x5*x7^2*x8^2*x9 + x4*x5*x7^2*x8^2 + 2*x4*x5*x7^2*x8*x9 + -2*x4*x5*x7^2*x8 + -x4*x5*x7^2*x9 + x4*x5*x7^2 + -x4*x5*x7*x8^2*x9^2 + 2*x4*x5*x7*x8^2*x9 + -x4*x5*x7*x8^2 + x4*x5*x7*x8*x9^2 + -3*x4*x5*x7*x8*x9 + 2*x4*x5*x7*x8 + x4*x5*x7*x9 + -x4*x5*x7 + x4*x5*x8^2*x9^2 + -x4*x5*x8^2*x9 + -x4*x5*x8*x9^2 + x4*x5*x8*x9 + -x4*x6^3*x7^2*x8*x9 + x4*x6^3*x7^2*x8 + x4*x6^3*x7^2*x9 + -x4*x6^3*x7^2 + x4*x6^3*x8*x9 + -x4*x6^3*x8 + -x4*x6^3*x9 + x4*x6^3 + -x4*x6^2*x7^3*x8*x9 + x4*x6^2*x7^3*x8 + x4*x6^2*x7^3*x9 + -x4*x6^2*x7^3 + x4*x6^2*x7^2*x8*x9 + -x4*x6^2*x7^2*x8 + -x4*x6^2*x7^2*x9 + x4*x6^2*x7^2 + x4*x6^2*x7*x8*x9 + -x4*x6^2*x7*x8 + -x4*x6^2*x7*x9 + x4*x6^2*x7 + -x4*x6^2*x8*x9 + x4*x6^2*x8 + x4*x6^2*x9 + -x4*x6^2 + x4*x6*x7^3*x8*x9 + -x4*x6*x7^3*x8 + -x4*x6*x7^3*x9 + x4*x6*x7^3 + -x4*x6*x7^2*x8^2*x9 + x4*x6*x7^2*x8^2 + x4*x6*x7^2*x8*x9 + -x4*x6*x7^2*x8 + -x4*x6*x7*x8^2*x9^2 + 2*x4*x6*x7*x8^2*x9 + -x4*x6*x7*x8^2 + x4*x6*x7*x8*x9^2 + -3*x4*x6*x7*x8*x9 + 2*x4*x6*x7*x8 + x4*x6*x7*x9 + -x4*x6*x7 + x4*x6*x8^2*x9^2 + -x4*x6*x8^2*x9 + -x4*x6*x8*x9^2 + x4*x6*x8*x9 + x4*x7^2*x8^2*x9 + -x4*x7^2*x8^2 + -x4*x7^2*x8*x9 + x4*x7^2*x8 + x4*x7*x8^2*x9^2 + -2*x4*x7*x8^2*x9 + x4*x7*x8^2 + -x4*x7*x8*x9^2 + 2*x4*x7*x8*x9 + -x4*x7*x8 + -x4*x8^2*x9^2 + x4*x8^2*x9 + x4*x8*x9^2 + -x4*x8*x9 + -x5^3*x6^2*x7*x8*x9 + x5^3*x6^2*x7*x8 + x5^3*x6^2*x7*x9 + -x5^3*x6^2*x7 + x5^3*x6^2*x8*x9 + -x5^3*x6^2*x8 + -x5^3*x6^2*x9 + x5^3*x6^2 + x5^3*x7*x8*x9 + -x5^3*x7*x8 + -x5^3*x7*x9 + x5^3*x7 + -x5^3*x8*x9 + x5^3*x8 + x5^3*x9 + -x5^3 + -x5^2*x6^3*x7*x8*x9 + x5^2*x6^3*x7*x8 + x5^2*x6^3*x7*x9 + -x5^2*x6^3*x7 + x5^2*x6^3*x8*x9 + -x5^2*x6^3*x8 + -x5^2*x6^3*x9 + x5^2*x6^3 + x5^2*x6^2*x7*x8*x9 + -x5^2*x6^2*x7*x8 + -x5^2*x6^2*x7*x9 + x5^2*x6^2*x7 + -x5^2*x6^2*x8*x9 + x5^2*x6^2*x8 + x5^2*x6^2*x9 + -x5^2*x6^2 + -x5^2*x6*x7^2*x8*x9 + x5^2*x6*x7^2*x8 + x5^2*x6*x7^2*x9 + -x5^2*x6*x7^2 + x5^2*x6*x7*x8*x9 + -x5^2*x6*x7*x8 + -x5^2*x6*x7*x9 + x5^2*x6*x7 + x5^2*x7^2*x8*x9 + -x5^2*x7^2*x8 + -x5^2*x7^2*x9 + x5^2*x7^2 + -x5^2*x7*x8*x9 + x5^2*x7*x8 + x5^2*x7*x9 + -x5^2*x7 + -x5*x6^3*x7^2*x8*x9 + x5*x6^3*x7^2*x8 + x5*x6^3*x7^2*x9 + -x5*x6^3*x7^2 + x5*x6^3*x7*x8*x9 + -x5*x6^3*x7*x8 + -x5*x6^3*x7*x9 + x5*x6^3*x7 + -x5*x6^2*x7^3*x8*x9 + x5*x6^2*x7^3*x8 + x5*x6^2*x7^3*x9 + -x5*x6^2*x7^3 + x5*x6^2*x7^2*x8*x9 + -x5*x6^2*x7^2*x8 + -x5*x6^2*x7^2*x9 + x5*x6^2*x7^2 + -x5*x6*x7^2*x8^2*x9 + x5*x6*x7^2*x8^2 + -x5*x6*x7^2*x8*x9^2 + 3*x5*x6*x7^2*x8*x9 + -2*x5*x6*x7^2*x8 + x5*x6*x7^2*x9^2 + -2*x5*x6*x7^2*x9 + x5*x6*x7^2 + -x5*x6*x7*x8^2*x9^2 + x5*x6*x7*x8^2*x9 + x5*x6*x7*x8*x9^2 + -2*x5*x6*x7*x8*x9 + x5*x6*x7*x8 + x5*x6*x7*x9 + -x5*x6*x7 + x5*x6*x8^2*x9^2 + -x5*x6*x8^2 + -x5*x6*x8*x9 + x5*x6*x8 + -x5*x6*x9^2 + x5*x6*x9 + x5*x7^3*x8*x9 + -x5*x7^3*x8 + -x5*x7^3*x9 + x5*x7^3 + x5*x7^2*x8^2*x9 + -x5*x7^2*x8^2 + x5*x7^2*x8*x9^2 + -3*x5*x7^2*x8*x9 + 2*x5*x7^2*x8 + -x5*x7^2*x9^2 + 2*x5*x7^2*x9 + -x5*x7^2 + x5*x7*x8^2*x9^2 + -x5*x7*x8^2*x9 + -x5*x7*x8*x9^2 + x5*x7*x8*x9 + -x5*x8^2*x9^2 + x5*x8^2 + x5*x8*x9 + -x5*x8 + x5*x9^2 + -x5*x9 + x6^3*x7^2*x8*x9 + -x6^3*x7^2*x8 + -x6^3*x7^2*x9 + x6^3*x7^2 + -x6^3*x8*x9 + x6^3*x8 + x6^3*x9 + -x6^3 + x6^2*x7^3*x8*x9 + -x6^2*x7^3*x8 + -x6^2*x7^3*x9 + x6^2*x7^3 + -x6^2*x7^2*x8*x9 + x6^2*x7^2*x8 + x6^2*x7^2*x9 + -x6^2*x7^2 + x6*x7^2*x8^2*x9 + -x6*x7^2*x8^2 + x6*x7^2*x8*x9^2 + -2*x6*x7^2*x8*x9 + x6*x7^2*x8 + -x6*x7^2*x9^2 + x6*x7^2*x9 + x6*x7*x8^2*x9^2 + -x6*x7*x8^2*x9 + -x6*x7*x8*x9^2 + x6*x7*x8*x9 + -x6*x8^2*x9^2 + x6*x8^2 + x6*x8*x9 + -x6*x8 + x6*x9^2 + -x6*x9 + -x7^3*x8*x9 + x7^3*x8 + x7^3*x9 + -x7^3 + -x7^2*x8^2*x9 + x7^2*x8^2 + -x7^2*x8*x9^2 + 2*x7^2*x8*x9 + -x7^2*x8 + x7^2*x9^2 + -x7^2*x9 + -x7*x8^2*x9^2 + x7*x8^2*x9 + x7*x8*x9^2 + -x7*x8*x9 + x8^2*x9^2 + -x8^2 + -x9^2 + 1; frobby-0.9.5/test/frob/bug26.opt_irr000066400000000000000000000000321401527164200172410ustar00rootroot000000000000001 9 0 7 1 1 1 1 1 1 1 14 frobby-0.9.5/test/frob/bug26.opt_irr_min000066400000000000000000000004451401527164200201140ustar00rootroot0000000000000015 9 0 3 1 1 1 1 1 2 1 0 2 1 2 1 1 2 1 1 0 2 1 1 2 1 2 1 1 0 2 1 1 1 1 1 2 2 0 1 2 2 2 1 1 1 1 0 1 2 1 2 2 1 1 1 0 1 2 1 2 1 2 1 1 0 1 2 1 1 1 2 2 1 0 1 2 1 1 1 2 1 2 0 1 2 1 1 1 1 2 2 0 1 1 3 1 1 2 1 1 0 1 1 3 1 1 1 1 2 0 1 1 2 1 1 2 1 2 0 1 1 1 2 3 1 1 1 0 1 1 1 1 2 3 1 1 11 frobby-0.9.5/test/frob/bug26.opt_std000066400000000000000000000000211401527164200172350ustar00rootroot000000000000000 9 no solution. frobby-0.9.5/test/frob/bug26.opt_std_min000066400000000000000000000000211401527164200201000ustar00rootroot000000000000000 9 no solution. frobby-0.9.5/test/frob/bug26.primdecom000066400000000000000000000024211401527164200175460ustar00rootroot0000000000000068 9 0 7 0 0 0 0 0 0 0 0 5 0 1 0 0 0 0 0 0 4 0 2 0 0 0 0 0 0 4 0 0 1 0 0 0 0 0 3 0 1 1 0 0 0 0 0 3 0 0 0 1 0 0 0 0 3 0 0 0 0 0 1 0 0 3 0 0 0 0 0 0 1 0 2 0 0 2 0 0 0 0 0 2 0 0 0 0 1 0 0 0 2 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 1 0 2 1 1 0 0 0 0 1 0 2 0 0 1 0 0 0 1 0 2 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 2 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 4 0 0 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 3 0 0 0 1 0 0 0 0 3 0 0 0 0 1 0 0 0 3 0 0 0 0 0 1 0 0 2 1 0 0 1 0 0 0 0 2 0 1 0 0 0 0 0 0 2 0 0 2 1 0 0 0 0 2 0 0 0 2 0 0 0 0 2 0 0 0 1 1 0 0 0 2 0 0 0 1 0 1 0 0 2 0 0 0 0 1 1 0 0 1 2 1 0 0 0 0 0 0 1 2 0 0 1 0 0 0 0 1 2 0 0 0 0 1 0 0 1 1 0 1 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 0 2 0 0 0 0 0 0 1 0 1 2 0 0 0 0 0 1 0 0 1 2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 0 0 2 0 0 0 0 0 2 0 0 1 0 1 0 0 0 2 0 0 0 1 0 0 0 0 1 2 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 2 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 3 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 2 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug26.radical000066400000000000000000000002341401527164200171660ustar00rootroot000000000000008 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug26.test000066400000000000000000000036051401527164200165530ustar00rootroot0000000000000068 9 -20 2 0 -1 0 0 0 1 1 -19 0 1 1 0 1 0 0 0 -17 -1 0 1 1 0 1 0 0 -17 0 1 2 0 0 1 -1 0 -16 -1 0 2 0 0 1 -1 1 -15 -2 0 -1 2 2 0 0 0 -15 -1 1 0 1 2 0 -1 0 -15 0 0 0 0 2 2 -1 -1 -14 4 -2 0 1 0 0 0 0 -14 5 -1 1 0 0 0 -1 0 -12 1 -2 2 1 1 0 -1 0 -11 -4 2 -1 0 2 1 0 0 -11 -1 2 -2 0 0 2 0 0 -10 -1 0 1 -1 2 0 0 0 -10 1 -1 -1 0 0 1 1 0 -10 2 0 0 -1 0 1 0 0 -9 -1 0 1 0 1 1 0 -1 -9 0 -2 -1 0 0 1 1 1 -9 0 0 0 0 0 -1 0 2 -9 1 -1 0 -1 0 1 0 1 -8 0 0 0 1 -1 0 0 1 -8 1 -1 0 0 -1 2 0 0 -8 1 0 -2 0 2 0 0 0 -8 4 -1 2 0 -1 -1 0 0 -8 7 0 -1 0 0 -2 0 0 -7 -3 0 1 2 0 0 0 0 -7 -2 1 2 1 0 0 -1 0 -7 -1 0 2 0 0 2 -1 -1 -7 -1 3 -1 -1 0 0 1 0 -7 0 -2 0 0 -1 2 0 1 -7 0 0 0 2 -2 1 0 0 -7 0 4 0 -2 0 0 0 0 -6 -2 0 0 0 3 0 -1 0 -6 -2 2 -1 -1 0 0 1 1 -6 -1 3 0 -2 0 0 0 1 -6 0 -1 -2 1 1 1 0 0 -6 1 0 -1 0 1 1 -1 0 -5 -2 2 -1 0 -1 1 1 0 -5 -1 0 -2 3 0 0 0 0 -5 -1 3 0 -1 -1 1 0 0 -5 0 1 -1 2 0 0 -1 0 -5 3 -3 0 0 1 0 0 0 -4 -2 2 0 -1 -1 1 0 1 -4 0 -1 -1 1 0 2 -1 0 -4 0 -1 0 0 -1 0 2 0 -4 1 0 1 -1 -1 0 1 0 -4 2 -2 0 2 0 -1 0 0 -4 3 -1 1 1 0 -1 -1 0 -3 -5 2 1 0 0 1 0 0 -3 -2 0 2 0 0 0 1 -1 -3 -2 3 -2 0 1 0 0 0 -3 0 -1 1 -1 -1 0 1 1 -3 1 0 2 -2 -1 0 0 1 -2 -6 1 1 0 0 1 0 1 -2 -2 0 3 -1 0 0 0 0 -2 -2 1 -2 -1 1 2 0 0 -2 0 -1 1 0 -2 1 1 0 -2 0 0 -1 0 1 -1 1 0 -2 0 1 2 0 -2 -1 0 1 -2 1 0 2 -1 -2 1 0 0 -2 3 0 -2 0 -1 0 1 0 -1 0 0 -1 1 0 0 1 -1 -1 0 0 0 -1 1 -1 0 1 -1 0 2 0 1 0 -2 0 0 -1 1 1 0 0 0 0 0 -1 -1 3 0 -1 -1 -1 0 0 1 0 -3 0 -2 0 0 3 0 0 0 0 -2 -1 0 0 2 1 -1 frobby-0.9.5/test/frob/bug26.uni000066400000000000000000000002361401527164200163640ustar00rootroot00000000000000R = QQ[t]; p = t^14 + -t^13 + -7*t^12 + 17*t^11 + -65*t^10 + 294*t^9 + -665*t^8 + 754*t^7 + -377*t^6 + -21*t^5 + 95*t^4 + -19*t^3 + -7*t^2 + 1; frobby-0.9.5/test/frob/bug27.alexdual000066400000000000000000000005101401527164200173640ustar00rootroot0000000000000017 9 0 4 4 2 1 2 3 2 1 0 4 4 1 2 2 3 1 2 0 4 4 1 2 1 3 2 1 0 4 3 2 2 2 1 2 2 0 4 3 2 1 1 3 2 2 0 4 3 1 2 2 2 2 2 0 4 3 1 2 1 3 2 2 0 4 2 2 1 2 3 2 2 0 4 2 1 2 2 3 2 2 0 4 1 2 2 2 3 2 2 0 3 4 2 2 2 3 1 2 0 3 4 2 2 2 2 2 1 0 3 4 2 2 1 3 2 1 0 3 3 2 2 2 2 2 2 0 3 2 2 2 1 3 2 2 0 2 2 2 2 2 3 2 2 0 1 4 2 2 2 3 2 2 frobby-0.9.5/test/frob/bug27.assoprimes000066400000000000000000000000271401527164200177550ustar00rootroot000000000000001 9 0 1 1 1 1 1 1 1 1 frobby-0.9.5/test/frob/bug27.dim000066400000000000000000000000021401527164200163320ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug27.euler000066400000000000000000000000021401527164200166750ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug27.frobInstance000066400000000000000000000000331401527164200202020ustar00rootroot0000000000000047 51 52 63 67 71 79 89 97 frobby-0.9.5/test/frob/bug27.frobNumber000066400000000000000000000000041401527164200176640ustar00rootroot00000000000000184 frobby-0.9.5/test/frob/bug27.intersection000066400000000000000000000012611401527164200202770ustar00rootroot0000000000000036 9 0 4 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 2 0 0 0 0 1 0 0 0 2 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 1 0 1 3 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 4 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 3 0 1 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 2 1 0 1 0 0 0 0 0 2 0 1 1 0 0 0 0 0 2 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug27.irrdecom000066400000000000000000000051341401527164200174000ustar00rootroot000000000000008 9 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 8 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug27.irrdecom_ideal000066400000000000000000000005101401527164200205270ustar00rootroot0000000000000017 9 0 4 1 1 1 1 1 1 1 0 3 3 1 1 1 1 1 1 0 2 3 1 1 2 1 1 1 0 2 2 1 1 1 2 1 1 0 2 1 1 1 2 1 1 2 0 2 1 1 1 1 2 1 2 0 2 1 1 1 1 1 2 1 0 1 4 1 1 1 1 1 1 0 1 3 2 1 1 1 1 1 0 1 3 1 2 1 1 1 1 0 1 2 2 1 2 1 1 1 0 1 2 2 1 1 2 1 1 0 1 2 1 2 2 1 1 1 0 1 2 1 1 1 3 1 1 0 1 1 2 1 2 1 1 2 0 1 1 2 1 1 1 2 1 0 1 1 1 2 1 1 1 2 frobby-0.9.5/test/frob/bug27.maxstandard000066400000000000000000000000041401527164200200710ustar00rootroot000000000000000 9 frobby-0.9.5/test/frob/bug27.minimize000066400000000000000000000012611401527164200174120ustar00rootroot0000000000000036 9 0 4 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 2 0 0 0 0 1 0 0 0 2 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 1 0 1 3 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 4 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 3 0 1 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 2 1 0 1 0 0 0 0 0 2 0 1 1 0 0 0 0 0 2 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug27.multi000066400000000000000000001475411401527164200167370ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8, x9]; p = x2^4*x3*x4*x5*x6*x7*x8*x9 + -x2^4*x3*x4*x5*x6*x7*x8 + -x2^4*x3*x4*x5*x6*x7*x9 + x2^4*x3*x4*x5*x6*x7 + -x2^4*x3*x4*x5*x6*x8*x9 + x2^4*x3*x4*x5*x6*x8 + x2^4*x3*x4*x5*x6*x9 + -x2^4*x3*x4*x5*x6 + -x2^4*x3*x4*x5*x7*x8*x9 + x2^4*x3*x4*x5*x7*x8 + x2^4*x3*x4*x5*x7*x9 + -x2^4*x3*x4*x5*x7 + x2^4*x3*x4*x5*x8*x9 + -x2^4*x3*x4*x5*x8 + -x2^4*x3*x4*x5*x9 + x2^4*x3*x4*x5 + -x2^4*x3*x4*x6*x7*x8*x9 + x2^4*x3*x4*x6*x7*x8 + x2^4*x3*x4*x6*x7*x9 + -x2^4*x3*x4*x6*x7 + x2^4*x3*x4*x6*x8*x9 + -x2^4*x3*x4*x6*x8 + -x2^4*x3*x4*x6*x9 + x2^4*x3*x4*x6 + x2^4*x3*x4*x7*x8*x9 + -x2^4*x3*x4*x7*x8 + -x2^4*x3*x4*x7*x9 + x2^4*x3*x4*x7 + -x2^4*x3*x4*x8*x9 + x2^4*x3*x4*x8 + x2^4*x3*x4*x9 + -x2^4*x3*x4 + -x2^4*x3*x5*x6*x7*x8*x9 + x2^4*x3*x5*x6*x7*x8 + x2^4*x3*x5*x6*x7*x9 + -x2^4*x3*x5*x6*x7 + x2^4*x3*x5*x6*x8*x9 + -x2^4*x3*x5*x6*x8 + -x2^4*x3*x5*x6*x9 + x2^4*x3*x5*x6 + x2^4*x3*x5*x7*x8*x9 + -x2^4*x3*x5*x7*x8 + -x2^4*x3*x5*x7*x9 + x2^4*x3*x5*x7 + -x2^4*x3*x5*x8*x9 + x2^4*x3*x5*x8 + x2^4*x3*x5*x9 + -x2^4*x3*x5 + x2^4*x3*x6*x7*x8*x9 + -x2^4*x3*x6*x7*x8 + -x2^4*x3*x6*x7*x9 + x2^4*x3*x6*x7 + -x2^4*x3*x6*x8*x9 + x2^4*x3*x6*x8 + x2^4*x3*x6*x9 + -x2^4*x3*x6 + -x2^4*x3*x7*x8*x9 + x2^4*x3*x7*x8 + x2^4*x3*x7*x9 + -x2^4*x3*x7 + x2^4*x3*x8*x9 + -x2^4*x3*x8 + -x2^4*x3*x9 + x2^4*x3 + -x2^4*x4*x5*x6*x7*x8*x9 + x2^4*x4*x5*x6*x7*x8 + x2^4*x4*x5*x6*x7*x9 + -x2^4*x4*x5*x6*x7 + x2^4*x4*x5*x6*x8*x9 + -x2^4*x4*x5*x6*x8 + -x2^4*x4*x5*x6*x9 + x2^4*x4*x5*x6 + x2^4*x4*x5*x7*x8*x9 + -x2^4*x4*x5*x7*x8 + -x2^4*x4*x5*x7*x9 + x2^4*x4*x5*x7 + -x2^4*x4*x5*x8*x9 + x2^4*x4*x5*x8 + x2^4*x4*x5*x9 + -x2^4*x4*x5 + x2^4*x4*x6*x7*x8*x9 + -x2^4*x4*x6*x7*x8 + -x2^4*x4*x6*x7*x9 + x2^4*x4*x6*x7 + -x2^4*x4*x6*x8*x9 + x2^4*x4*x6*x8 + x2^4*x4*x6*x9 + -x2^4*x4*x6 + -x2^4*x4*x7*x8*x9 + x2^4*x4*x7*x8 + x2^4*x4*x7*x9 + -x2^4*x4*x7 + x2^4*x4*x8*x9 + -x2^4*x4*x8 + -x2^4*x4*x9 + x2^4*x4 + x2^4*x5*x6*x7*x8*x9 + -x2^4*x5*x6*x7*x8 + -x2^4*x5*x6*x7*x9 + x2^4*x5*x6*x7 + -x2^4*x5*x6*x8*x9 + x2^4*x5*x6*x8 + x2^4*x5*x6*x9 + -x2^4*x5*x6 + -x2^4*x5*x7*x8*x9 + x2^4*x5*x7*x8 + x2^4*x5*x7*x9 + -x2^4*x5*x7 + x2^4*x5*x8*x9 + -x2^4*x5*x8 + -x2^4*x5*x9 + x2^4*x5 + -x2^4*x6*x7*x8*x9 + x2^4*x6*x7*x8 + x2^4*x6*x7*x9 + -x2^4*x6*x7 + x2^4*x6*x8*x9 + -x2^4*x6*x8 + -x2^4*x6*x9 + x2^4*x6 + x2^4*x7*x8*x9 + -x2^4*x7*x8 + -x2^4*x7*x9 + x2^4*x7 + -x2^4*x8*x9 + x2^4*x8 + x2^4*x9 + -x2^4 + x2^3*x3^3*x4*x5*x6*x7*x8*x9 + -x2^3*x3^3*x4*x5*x6*x7*x8 + -x2^3*x3^3*x4*x5*x6*x7*x9 + x2^3*x3^3*x4*x5*x6*x7 + -x2^3*x3^3*x4*x5*x6*x8*x9 + x2^3*x3^3*x4*x5*x6*x8 + x2^3*x3^3*x4*x5*x6*x9 + -x2^3*x3^3*x4*x5*x6 + -x2^3*x3^3*x4*x5*x7*x8*x9 + x2^3*x3^3*x4*x5*x7*x8 + x2^3*x3^3*x4*x5*x7*x9 + -x2^3*x3^3*x4*x5*x7 + x2^3*x3^3*x4*x5*x8*x9 + -x2^3*x3^3*x4*x5*x8 + -x2^3*x3^3*x4*x5*x9 + x2^3*x3^3*x4*x5 + -x2^3*x3^3*x4*x6*x7*x8*x9 + x2^3*x3^3*x4*x6*x7*x8 + x2^3*x3^3*x4*x6*x7*x9 + -x2^3*x3^3*x4*x6*x7 + x2^3*x3^3*x4*x6*x8*x9 + -x2^3*x3^3*x4*x6*x8 + -x2^3*x3^3*x4*x6*x9 + x2^3*x3^3*x4*x6 + x2^3*x3^3*x4*x7*x8*x9 + -x2^3*x3^3*x4*x7*x8 + -x2^3*x3^3*x4*x7*x9 + x2^3*x3^3*x4*x7 + -x2^3*x3^3*x4*x8*x9 + x2^3*x3^3*x4*x8 + x2^3*x3^3*x4*x9 + -x2^3*x3^3*x4 + -x2^3*x3^3*x5*x6*x7*x8*x9 + x2^3*x3^3*x5*x6*x7*x8 + x2^3*x3^3*x5*x6*x7*x9 + -x2^3*x3^3*x5*x6*x7 + x2^3*x3^3*x5*x6*x8*x9 + -x2^3*x3^3*x5*x6*x8 + -x2^3*x3^3*x5*x6*x9 + x2^3*x3^3*x5*x6 + x2^3*x3^3*x5*x7*x8*x9 + -x2^3*x3^3*x5*x7*x8 + -x2^3*x3^3*x5*x7*x9 + x2^3*x3^3*x5*x7 + -x2^3*x3^3*x5*x8*x9 + x2^3*x3^3*x5*x8 + x2^3*x3^3*x5*x9 + -x2^3*x3^3*x5 + x2^3*x3^3*x6*x7*x8*x9 + -x2^3*x3^3*x6*x7*x8 + -x2^3*x3^3*x6*x7*x9 + x2^3*x3^3*x6*x7 + -x2^3*x3^3*x6*x8*x9 + x2^3*x3^3*x6*x8 + x2^3*x3^3*x6*x9 + -x2^3*x3^3*x6 + -x2^3*x3^3*x7*x8*x9 + x2^3*x3^3*x7*x8 + x2^3*x3^3*x7*x9 + -x2^3*x3^3*x7 + x2^3*x3^3*x8*x9 + -x2^3*x3^3*x8 + -x2^3*x3^3*x9 + x2^3*x3^3 + -x2^3*x3*x4*x5*x6*x7*x8*x9 + x2^3*x3*x4*x5*x6*x7*x8 + x2^3*x3*x4*x5*x6*x7*x9 + -x2^3*x3*x4*x5*x6*x7 + x2^3*x3*x4*x5*x6*x8*x9 + -x2^3*x3*x4*x5*x6*x8 + -x2^3*x3*x4*x5*x6*x9 + x2^3*x3*x4*x5*x6 + x2^3*x3*x4*x5*x7*x8*x9 + -x2^3*x3*x4*x5*x7*x8 + -x2^3*x3*x4*x5*x7*x9 + x2^3*x3*x4*x5*x7 + -x2^3*x3*x4*x5*x8*x9 + x2^3*x3*x4*x5*x8 + x2^3*x3*x4*x5*x9 + -x2^3*x3*x4*x5 + x2^3*x3*x4*x6*x7*x8*x9 + -x2^3*x3*x4*x6*x7*x8 + -x2^3*x3*x4*x6*x7*x9 + x2^3*x3*x4*x6*x7 + -x2^3*x3*x4*x6*x8*x9 + x2^3*x3*x4*x6*x8 + x2^3*x3*x4*x6*x9 + -x2^3*x3*x4*x6 + -x2^3*x3*x4*x7*x8*x9 + x2^3*x3*x4*x7*x8 + x2^3*x3*x4*x7*x9 + -x2^3*x3*x4*x7 + x2^3*x3*x4*x8*x9 + -x2^3*x3*x4*x8 + -x2^3*x3*x4*x9 + x2^3*x3*x4 + x2^3*x3*x5*x6*x7*x8*x9 + -x2^3*x3*x5*x6*x7*x8 + -x2^3*x3*x5*x6*x7*x9 + x2^3*x3*x5*x6*x7 + -x2^3*x3*x5*x6*x8*x9 + x2^3*x3*x5*x6*x8 + x2^3*x3*x5*x6*x9 + -x2^3*x3*x5*x6 + -x2^3*x3*x5*x7*x8*x9 + x2^3*x3*x5*x7*x8 + x2^3*x3*x5*x7*x9 + -x2^3*x3*x5*x7 + x2^3*x3*x5*x8*x9 + -x2^3*x3*x5*x8 + -x2^3*x3*x5*x9 + x2^3*x3*x5 + -x2^3*x3*x6*x7*x8*x9 + x2^3*x3*x6*x7*x8 + x2^3*x3*x6*x7*x9 + -x2^3*x3*x6*x7 + x2^3*x3*x6*x8*x9 + -x2^3*x3*x6*x8 + -x2^3*x3*x6*x9 + x2^3*x3*x6 + x2^3*x3*x7*x8*x9 + -x2^3*x3*x7*x8 + -x2^3*x3*x7*x9 + x2^3*x3*x7 + -x2^3*x3*x8*x9 + x2^3*x3*x8 + x2^3*x3*x9 + -x2^3*x3 + x2^2*x3^3*x4*x5*x6^2*x7*x8*x9 + -x2^2*x3^3*x4*x5*x6^2*x7*x8 + -x2^2*x3^3*x4*x5*x6^2*x7*x9 + x2^2*x3^3*x4*x5*x6^2*x7 + -x2^2*x3^3*x4*x5*x6^2*x8*x9 + x2^2*x3^3*x4*x5*x6^2*x8 + x2^2*x3^3*x4*x5*x6^2*x9 + -x2^2*x3^3*x4*x5*x6^2 + -x2^2*x3^3*x4*x5*x6*x7*x8*x9 + x2^2*x3^3*x4*x5*x6*x7*x8 + x2^2*x3^3*x4*x5*x6*x7*x9 + -x2^2*x3^3*x4*x5*x6*x7 + x2^2*x3^3*x4*x5*x6*x8*x9 + -x2^2*x3^3*x4*x5*x6*x8 + -x2^2*x3^3*x4*x5*x6*x9 + x2^2*x3^3*x4*x5*x6 + -x2^2*x3^3*x4*x6^2*x7*x8*x9 + x2^2*x3^3*x4*x6^2*x7*x8 + x2^2*x3^3*x4*x6^2*x7*x9 + -x2^2*x3^3*x4*x6^2*x7 + x2^2*x3^3*x4*x6^2*x8*x9 + -x2^2*x3^3*x4*x6^2*x8 + -x2^2*x3^3*x4*x6^2*x9 + x2^2*x3^3*x4*x6^2 + x2^2*x3^3*x4*x6*x7*x8*x9 + -x2^2*x3^3*x4*x6*x7*x8 + -x2^2*x3^3*x4*x6*x7*x9 + x2^2*x3^3*x4*x6*x7 + -x2^2*x3^3*x4*x6*x8*x9 + x2^2*x3^3*x4*x6*x8 + x2^2*x3^3*x4*x6*x9 + -x2^2*x3^3*x4*x6 + -x2^2*x3^3*x5*x6^2*x7*x8*x9 + x2^2*x3^3*x5*x6^2*x7*x8 + x2^2*x3^3*x5*x6^2*x7*x9 + -x2^2*x3^3*x5*x6^2*x7 + x2^2*x3^3*x5*x6^2*x8*x9 + -x2^2*x3^3*x5*x6^2*x8 + -x2^2*x3^3*x5*x6^2*x9 + x2^2*x3^3*x5*x6^2 + x2^2*x3^3*x5*x6*x7*x8*x9 + -x2^2*x3^3*x5*x6*x7*x8 + -x2^2*x3^3*x5*x6*x7*x9 + x2^2*x3^3*x5*x6*x7 + -x2^2*x3^3*x5*x6*x8*x9 + x2^2*x3^3*x5*x6*x8 + x2^2*x3^3*x5*x6*x9 + -x2^2*x3^3*x5*x6 + x2^2*x3^3*x6^2*x7*x8*x9 + -x2^2*x3^3*x6^2*x7*x8 + -x2^2*x3^3*x6^2*x7*x9 + x2^2*x3^3*x6^2*x7 + -x2^2*x3^3*x6^2*x8*x9 + x2^2*x3^3*x6^2*x8 + x2^2*x3^3*x6^2*x9 + -x2^2*x3^3*x6^2 + -x2^2*x3^3*x6*x7*x8*x9 + x2^2*x3^3*x6*x7*x8 + x2^2*x3^3*x6*x7*x9 + -x2^2*x3^3*x6*x7 + x2^2*x3^3*x6*x8*x9 + -x2^2*x3^3*x6*x8 + -x2^2*x3^3*x6*x9 + x2^2*x3^3*x6 + x2^2*x3^2*x4*x5*x6*x7^2*x8*x9 + -x2^2*x3^2*x4*x5*x6*x7^2*x8 + -x2^2*x3^2*x4*x5*x6*x7^2*x9 + x2^2*x3^2*x4*x5*x6*x7^2 + -x2^2*x3^2*x4*x5*x6*x7*x8*x9 + x2^2*x3^2*x4*x5*x6*x7*x8 + x2^2*x3^2*x4*x5*x6*x7*x9 + -x2^2*x3^2*x4*x5*x6*x7 + -x2^2*x3^2*x4*x5*x7^2*x8*x9 + x2^2*x3^2*x4*x5*x7^2*x8 + x2^2*x3^2*x4*x5*x7^2*x9 + -x2^2*x3^2*x4*x5*x7^2 + x2^2*x3^2*x4*x5*x7*x8*x9 + -x2^2*x3^2*x4*x5*x7*x8 + -x2^2*x3^2*x4*x5*x7*x9 + x2^2*x3^2*x4*x5*x7 + -x2^2*x3^2*x4*x6*x7^2*x8*x9 + x2^2*x3^2*x4*x6*x7^2*x8 + x2^2*x3^2*x4*x6*x7^2*x9 + -x2^2*x3^2*x4*x6*x7^2 + x2^2*x3^2*x4*x6*x7*x8*x9 + -x2^2*x3^2*x4*x6*x7*x8 + -x2^2*x3^2*x4*x6*x7*x9 + x2^2*x3^2*x4*x6*x7 + x2^2*x3^2*x4*x7^2*x8*x9 + -x2^2*x3^2*x4*x7^2*x8 + -x2^2*x3^2*x4*x7^2*x9 + x2^2*x3^2*x4*x7^2 + -x2^2*x3^2*x4*x7*x8*x9 + x2^2*x3^2*x4*x7*x8 + x2^2*x3^2*x4*x7*x9 + -x2^2*x3^2*x4*x7 + -x2^2*x3^2*x5*x6*x7^2*x8*x9 + x2^2*x3^2*x5*x6*x7^2*x8 + x2^2*x3^2*x5*x6*x7^2*x9 + -x2^2*x3^2*x5*x6*x7^2 + x2^2*x3^2*x5*x6*x7*x8*x9 + -x2^2*x3^2*x5*x6*x7*x8 + -x2^2*x3^2*x5*x6*x7*x9 + x2^2*x3^2*x5*x6*x7 + x2^2*x3^2*x5*x7^2*x8*x9 + -x2^2*x3^2*x5*x7^2*x8 + -x2^2*x3^2*x5*x7^2*x9 + x2^2*x3^2*x5*x7^2 + -x2^2*x3^2*x5*x7*x8*x9 + x2^2*x3^2*x5*x7*x8 + x2^2*x3^2*x5*x7*x9 + -x2^2*x3^2*x5*x7 + x2^2*x3^2*x6*x7^2*x8*x9 + -x2^2*x3^2*x6*x7^2*x8 + -x2^2*x3^2*x6*x7^2*x9 + x2^2*x3^2*x6*x7^2 + -x2^2*x3^2*x6*x7*x8*x9 + x2^2*x3^2*x6*x7*x8 + x2^2*x3^2*x6*x7*x9 + -x2^2*x3^2*x6*x7 + -x2^2*x3^2*x7^2*x8*x9 + x2^2*x3^2*x7^2*x8 + x2^2*x3^2*x7^2*x9 + -x2^2*x3^2*x7^2 + x2^2*x3^2*x7*x8*x9 + -x2^2*x3^2*x7*x8 + -x2^2*x3^2*x7*x9 + x2^2*x3^2*x7 + x2^2*x3*x4*x5*x6^2*x7*x8*x9^2 + -x2^2*x3*x4*x5*x6^2*x7*x8*x9 + -x2^2*x3*x4*x5*x6^2*x7*x9^2 + x2^2*x3*x4*x5*x6^2*x7*x9 + -x2^2*x3*x4*x5*x6^2*x8*x9^2 + x2^2*x3*x4*x5*x6^2*x8*x9 + x2^2*x3*x4*x5*x6^2*x9^2 + -x2^2*x3*x4*x5*x6^2*x9 + x2^2*x3*x4*x5*x6*x7^2*x8*x9^2 + -x2^2*x3*x4*x5*x6*x7^2*x8*x9 + -x2^2*x3*x4*x5*x6*x7^2*x9^2 + x2^2*x3*x4*x5*x6*x7^2*x9 + x2^2*x3*x4*x5*x6*x7*x8^2*x9 + -x2^2*x3*x4*x5*x6*x7*x8^2 + -x2^2*x3*x4*x5*x6*x7*x8*x9^2 + x2^2*x3*x4*x5*x6*x7*x8 + x2^2*x3*x4*x5*x6*x7*x9^2 + -x2^2*x3*x4*x5*x6*x7*x9 + -x2^2*x3*x4*x5*x6*x8^2*x9 + x2^2*x3*x4*x5*x6*x8^2 + x2^2*x3*x4*x5*x6*x8*x9 + -x2^2*x3*x4*x5*x6*x8 + -x2^2*x3*x4*x5*x7^2*x8*x9^2 + x2^2*x3*x4*x5*x7^2*x8*x9 + x2^2*x3*x4*x5*x7^2*x9^2 + -x2^2*x3*x4*x5*x7^2*x9 + -x2^2*x3*x4*x5*x7*x8^2*x9 + x2^2*x3*x4*x5*x7*x8^2 + x2^2*x3*x4*x5*x7*x8*x9 + -x2^2*x3*x4*x5*x7*x8 + x2^2*x3*x4*x5*x8^2*x9 + -x2^2*x3*x4*x5*x8^2 + x2^2*x3*x4*x5*x8*x9^2 + -2*x2^2*x3*x4*x5*x8*x9 + x2^2*x3*x4*x5*x8 + -x2^2*x3*x4*x5*x9^2 + x2^2*x3*x4*x5*x9 + -x2^2*x3*x4*x6^2*x7*x8*x9^2 + x2^2*x3*x4*x6^2*x7*x8*x9 + x2^2*x3*x4*x6^2*x7*x9^2 + -x2^2*x3*x4*x6^2*x7*x9 + x2^2*x3*x4*x6^2*x8*x9^2 + -x2^2*x3*x4*x6^2*x8*x9 + -x2^2*x3*x4*x6^2*x9^2 + x2^2*x3*x4*x6^2*x9 + -x2^2*x3*x4*x6*x7^2*x8*x9^2 + x2^2*x3*x4*x6*x7^2*x8*x9 + x2^2*x3*x4*x6*x7^2*x9^2 + -x2^2*x3*x4*x6*x7^2*x9 + -x2^2*x3*x4*x6*x7*x8^2*x9 + x2^2*x3*x4*x6*x7*x8^2 + x2^2*x3*x4*x6*x7*x8*x9^2 + -x2^2*x3*x4*x6*x7*x8 + -x2^2*x3*x4*x6*x7*x9^2 + x2^2*x3*x4*x6*x7*x9 + x2^2*x3*x4*x6*x8^2*x9 + -x2^2*x3*x4*x6*x8^2 + -x2^2*x3*x4*x6*x8*x9 + x2^2*x3*x4*x6*x8 + x2^2*x3*x4*x7^2*x8*x9^2 + -x2^2*x3*x4*x7^2*x8*x9 + -x2^2*x3*x4*x7^2*x9^2 + x2^2*x3*x4*x7^2*x9 + x2^2*x3*x4*x7*x8^2*x9 + -x2^2*x3*x4*x7*x8^2 + -x2^2*x3*x4*x7*x8*x9 + x2^2*x3*x4*x7*x8 + -x2^2*x3*x4*x8^2*x9 + x2^2*x3*x4*x8^2 + -x2^2*x3*x4*x8*x9^2 + 2*x2^2*x3*x4*x8*x9 + -x2^2*x3*x4*x8 + x2^2*x3*x4*x9^2 + -x2^2*x3*x4*x9 + -x2^2*x3*x5*x6^2*x7*x8*x9^2 + x2^2*x3*x5*x6^2*x7*x8*x9 + x2^2*x3*x5*x6^2*x7*x9^2 + -x2^2*x3*x5*x6^2*x7*x9 + x2^2*x3*x5*x6^2*x8*x9^2 + -x2^2*x3*x5*x6^2*x8*x9 + -x2^2*x3*x5*x6^2*x9^2 + x2^2*x3*x5*x6^2*x9 + -x2^2*x3*x5*x6*x7^2*x8*x9^2 + x2^2*x3*x5*x6*x7^2*x8*x9 + x2^2*x3*x5*x6*x7^2*x9^2 + -x2^2*x3*x5*x6*x7^2*x9 + -x2^2*x3*x5*x6*x7*x8^2*x9 + x2^2*x3*x5*x6*x7*x8^2 + x2^2*x3*x5*x6*x7*x8*x9^2 + -x2^2*x3*x5*x6*x7*x8 + -x2^2*x3*x5*x6*x7*x9^2 + x2^2*x3*x5*x6*x7*x9 + x2^2*x3*x5*x6*x8^2*x9 + -x2^2*x3*x5*x6*x8^2 + -x2^2*x3*x5*x6*x8*x9 + x2^2*x3*x5*x6*x8 + x2^2*x3*x5*x7^2*x8*x9^2 + -x2^2*x3*x5*x7^2*x8*x9 + -x2^2*x3*x5*x7^2*x9^2 + x2^2*x3*x5*x7^2*x9 + x2^2*x3*x5*x7*x8^2*x9 + -x2^2*x3*x5*x7*x8^2 + -x2^2*x3*x5*x7*x8*x9 + x2^2*x3*x5*x7*x8 + -x2^2*x3*x5*x8^2*x9 + x2^2*x3*x5*x8^2 + -x2^2*x3*x5*x8*x9^2 + 2*x2^2*x3*x5*x8*x9 + -x2^2*x3*x5*x8 + x2^2*x3*x5*x9^2 + -x2^2*x3*x5*x9 + x2^2*x3*x6^2*x7*x8*x9^2 + -x2^2*x3*x6^2*x7*x8*x9 + -x2^2*x3*x6^2*x7*x9^2 + x2^2*x3*x6^2*x7*x9 + -x2^2*x3*x6^2*x8*x9^2 + x2^2*x3*x6^2*x8*x9 + x2^2*x3*x6^2*x9^2 + -x2^2*x3*x6^2*x9 + x2^2*x3*x6*x7^2*x8*x9^2 + -x2^2*x3*x6*x7^2*x8*x9 + -x2^2*x3*x6*x7^2*x9^2 + x2^2*x3*x6*x7^2*x9 + x2^2*x3*x6*x7*x8^2*x9 + -x2^2*x3*x6*x7*x8^2 + -x2^2*x3*x6*x7*x8*x9^2 + x2^2*x3*x6*x7*x8 + x2^2*x3*x6*x7*x9^2 + -x2^2*x3*x6*x7*x9 + -x2^2*x3*x6*x8^2*x9 + x2^2*x3*x6*x8^2 + x2^2*x3*x6*x8*x9 + -x2^2*x3*x6*x8 + -x2^2*x3*x7^2*x8*x9^2 + x2^2*x3*x7^2*x8*x9 + x2^2*x3*x7^2*x9^2 + -x2^2*x3*x7^2*x9 + -x2^2*x3*x7*x8^2*x9 + x2^2*x3*x7*x8^2 + x2^2*x3*x7*x8*x9 + -x2^2*x3*x7*x8 + x2^2*x3*x8^2*x9 + -x2^2*x3*x8^2 + x2^2*x3*x8*x9^2 + -2*x2^2*x3*x8*x9 + x2^2*x3*x8 + -x2^2*x3*x9^2 + x2^2*x3*x9 + -x2^2*x4*x5*x6^2*x7*x8*x9^2 + x2^2*x4*x5*x6^2*x7*x8 + x2^2*x4*x5*x6^2*x7*x9^2 + -x2^2*x4*x5*x6^2*x7 + x2^2*x4*x5*x6^2*x8*x9^2 + -x2^2*x4*x5*x6^2*x8 + -x2^2*x4*x5*x6^2*x9^2 + x2^2*x4*x5*x6^2 + -x2^2*x4*x5*x6*x7^2*x8*x9^2 + x2^2*x4*x5*x6*x7^2*x8 + x2^2*x4*x5*x6*x7^2*x9^2 + -x2^2*x4*x5*x6*x7^2 + -x2^2*x4*x5*x6*x7*x8^2*x9 + x2^2*x4*x5*x6*x7*x8^2 + x2^2*x4*x5*x6*x7*x8*x9^2 + 2*x2^2*x4*x5*x6*x7*x8*x9 + -3*x2^2*x4*x5*x6*x7*x8 + -x2^2*x4*x5*x6*x7*x9^2 + -x2^2*x4*x5*x6*x7*x9 + 2*x2^2*x4*x5*x6*x7 + x2^2*x4*x5*x6*x8^2*x9 + -x2^2*x4*x5*x6*x8^2 + -2*x2^2*x4*x5*x6*x8*x9 + 2*x2^2*x4*x5*x6*x8 + x2^2*x4*x5*x6*x9 + -x2^2*x4*x5*x6 + x2^2*x4*x5*x7^2*x8*x9^2 + -x2^2*x4*x5*x7^2*x8 + -x2^2*x4*x5*x7^2*x9^2 + x2^2*x4*x5*x7^2 + x2^2*x4*x5*x7*x8^2*x9 + -x2^2*x4*x5*x7*x8^2 + -2*x2^2*x4*x5*x7*x8*x9 + 2*x2^2*x4*x5*x7*x8 + x2^2*x4*x5*x7*x9 + -x2^2*x4*x5*x7 + -x2^2*x4*x5*x8^2*x9 + x2^2*x4*x5*x8^2 + -x2^2*x4*x5*x8*x9^2 + 2*x2^2*x4*x5*x8*x9 + -x2^2*x4*x5*x8 + x2^2*x4*x5*x9^2 + -x2^2*x4*x5*x9 + x2^2*x4*x6^2*x7*x8*x9^2 + -x2^2*x4*x6^2*x7*x8 + -x2^2*x4*x6^2*x7*x9^2 + x2^2*x4*x6^2*x7 + -x2^2*x4*x6^2*x8*x9^2 + x2^2*x4*x6^2*x8 + x2^2*x4*x6^2*x9^2 + -x2^2*x4*x6^2 + x2^2*x4*x6*x7^2*x8*x9^2 + -x2^2*x4*x6*x7^2*x8 + -x2^2*x4*x6*x7^2*x9^2 + x2^2*x4*x6*x7^2 + x2^2*x4*x6*x7*x8^2*x9 + -x2^2*x4*x6*x7*x8^2 + -x2^2*x4*x6*x7*x8*x9^2 + -2*x2^2*x4*x6*x7*x8*x9 + 3*x2^2*x4*x6*x7*x8 + x2^2*x4*x6*x7*x9^2 + x2^2*x4*x6*x7*x9 + -2*x2^2*x4*x6*x7 + -x2^2*x4*x6*x8^2*x9 + x2^2*x4*x6*x8^2 + 2*x2^2*x4*x6*x8*x9 + -2*x2^2*x4*x6*x8 + -x2^2*x4*x6*x9 + x2^2*x4*x6 + -x2^2*x4*x7^2*x8*x9^2 + x2^2*x4*x7^2*x8 + x2^2*x4*x7^2*x9^2 + -x2^2*x4*x7^2 + -x2^2*x4*x7*x8^2*x9 + x2^2*x4*x7*x8^2 + 2*x2^2*x4*x7*x8*x9 + -2*x2^2*x4*x7*x8 + -x2^2*x4*x7*x9 + x2^2*x4*x7 + x2^2*x4*x8^2*x9 + -x2^2*x4*x8^2 + x2^2*x4*x8*x9^2 + -2*x2^2*x4*x8*x9 + x2^2*x4*x8 + -x2^2*x4*x9^2 + x2^2*x4*x9 + x2^2*x5*x6^2*x7*x8*x9^2 + -x2^2*x5*x6^2*x7*x8 + -x2^2*x5*x6^2*x7*x9^2 + x2^2*x5*x6^2*x7 + -x2^2*x5*x6^2*x8*x9^2 + x2^2*x5*x6^2*x8 + x2^2*x5*x6^2*x9^2 + -x2^2*x5*x6^2 + x2^2*x5*x6*x7^2*x8*x9^2 + -x2^2*x5*x6*x7^2*x8 + -x2^2*x5*x6*x7^2*x9^2 + x2^2*x5*x6*x7^2 + x2^2*x5*x6*x7*x8^2*x9 + -x2^2*x5*x6*x7*x8^2 + -x2^2*x5*x6*x7*x8*x9^2 + -2*x2^2*x5*x6*x7*x8*x9 + 3*x2^2*x5*x6*x7*x8 + x2^2*x5*x6*x7*x9^2 + x2^2*x5*x6*x7*x9 + -2*x2^2*x5*x6*x7 + -x2^2*x5*x6*x8^2*x9 + x2^2*x5*x6*x8^2 + 2*x2^2*x5*x6*x8*x9 + -2*x2^2*x5*x6*x8 + -x2^2*x5*x6*x9 + x2^2*x5*x6 + -x2^2*x5*x7^2*x8*x9^2 + x2^2*x5*x7^2*x8 + x2^2*x5*x7^2*x9^2 + -x2^2*x5*x7^2 + -x2^2*x5*x7*x8^2*x9 + x2^2*x5*x7*x8^2 + 2*x2^2*x5*x7*x8*x9 + -2*x2^2*x5*x7*x8 + -x2^2*x5*x7*x9 + x2^2*x5*x7 + x2^2*x5*x8^2*x9 + -x2^2*x5*x8^2 + x2^2*x5*x8*x9^2 + -2*x2^2*x5*x8*x9 + x2^2*x5*x8 + -x2^2*x5*x9^2 + x2^2*x5*x9 + -x2^2*x6^2*x7*x8*x9^2 + x2^2*x6^2*x7*x8 + x2^2*x6^2*x7*x9^2 + -x2^2*x6^2*x7 + x2^2*x6^2*x8*x9^2 + -x2^2*x6^2*x8 + -x2^2*x6^2*x9^2 + x2^2*x6^2 + -x2^2*x6*x7^2*x8*x9^2 + x2^2*x6*x7^2*x8 + x2^2*x6*x7^2*x9^2 + -x2^2*x6*x7^2 + -x2^2*x6*x7*x8^2*x9 + x2^2*x6*x7*x8^2 + x2^2*x6*x7*x8*x9^2 + 2*x2^2*x6*x7*x8*x9 + -3*x2^2*x6*x7*x8 + -x2^2*x6*x7*x9^2 + -x2^2*x6*x7*x9 + 2*x2^2*x6*x7 + x2^2*x6*x8^2*x9 + -x2^2*x6*x8^2 + -2*x2^2*x6*x8*x9 + 2*x2^2*x6*x8 + x2^2*x6*x9 + -x2^2*x6 + x2^2*x7^2*x8*x9^2 + -x2^2*x7^2*x8 + -x2^2*x7^2*x9^2 + x2^2*x7^2 + x2^2*x7*x8^2*x9 + -x2^2*x7*x8^2 + -2*x2^2*x7*x8*x9 + 2*x2^2*x7*x8 + x2^2*x7*x9 + -x2^2*x7 + -x2^2*x8^2*x9 + x2^2*x8^2 + -x2^2*x8*x9^2 + 2*x2^2*x8*x9 + -x2^2*x8 + x2^2*x9^2 + -x2^2*x9 + x2*x3^4*x4*x5*x6*x7*x8*x9 + -x2*x3^4*x4*x5*x6*x7*x8 + -x2*x3^4*x4*x5*x6*x7*x9 + x2*x3^4*x4*x5*x6*x7 + -x2*x3^4*x4*x5*x6*x8*x9 + x2*x3^4*x4*x5*x6*x8 + x2*x3^4*x4*x5*x6*x9 + -x2*x3^4*x4*x5*x6 + -x2*x3^4*x4*x5*x7*x8*x9 + x2*x3^4*x4*x5*x7*x8 + x2*x3^4*x4*x5*x7*x9 + -x2*x3^4*x4*x5*x7 + x2*x3^4*x4*x5*x8*x9 + -x2*x3^4*x4*x5*x8 + -x2*x3^4*x4*x5*x9 + x2*x3^4*x4*x5 + -x2*x3^4*x4*x6*x7*x8*x9 + x2*x3^4*x4*x6*x7*x8 + x2*x3^4*x4*x6*x7*x9 + -x2*x3^4*x4*x6*x7 + x2*x3^4*x4*x6*x8*x9 + -x2*x3^4*x4*x6*x8 + -x2*x3^4*x4*x6*x9 + x2*x3^4*x4*x6 + x2*x3^4*x4*x7*x8*x9 + -x2*x3^4*x4*x7*x8 + -x2*x3^4*x4*x7*x9 + x2*x3^4*x4*x7 + -x2*x3^4*x4*x8*x9 + x2*x3^4*x4*x8 + x2*x3^4*x4*x9 + -x2*x3^4*x4 + -x2*x3^4*x5*x6*x7*x8*x9 + x2*x3^4*x5*x6*x7*x8 + x2*x3^4*x5*x6*x7*x9 + -x2*x3^4*x5*x6*x7 + x2*x3^4*x5*x6*x8*x9 + -x2*x3^4*x5*x6*x8 + -x2*x3^4*x5*x6*x9 + x2*x3^4*x5*x6 + x2*x3^4*x5*x7*x8*x9 + -x2*x3^4*x5*x7*x8 + -x2*x3^4*x5*x7*x9 + x2*x3^4*x5*x7 + -x2*x3^4*x5*x8*x9 + x2*x3^4*x5*x8 + x2*x3^4*x5*x9 + -x2*x3^4*x5 + x2*x3^4*x6*x7*x8*x9 + -x2*x3^4*x6*x7*x8 + -x2*x3^4*x6*x7*x9 + x2*x3^4*x6*x7 + -x2*x3^4*x6*x8*x9 + x2*x3^4*x6*x8 + x2*x3^4*x6*x9 + -x2*x3^4*x6 + -x2*x3^4*x7*x8*x9 + x2*x3^4*x7*x8 + x2*x3^4*x7*x9 + -x2*x3^4*x7 + x2*x3^4*x8*x9 + -x2*x3^4*x8 + -x2*x3^4*x9 + x2*x3^4 + x2*x3^3*x4^2*x5*x6*x7*x8*x9 + -x2*x3^3*x4^2*x5*x6*x7*x8 + -x2*x3^3*x4^2*x5*x6*x7*x9 + x2*x3^3*x4^2*x5*x6*x7 + -x2*x3^3*x4^2*x5*x6*x8*x9 + x2*x3^3*x4^2*x5*x6*x8 + x2*x3^3*x4^2*x5*x6*x9 + -x2*x3^3*x4^2*x5*x6 + -x2*x3^3*x4^2*x5*x7*x8*x9 + x2*x3^3*x4^2*x5*x7*x8 + x2*x3^3*x4^2*x5*x7*x9 + -x2*x3^3*x4^2*x5*x7 + x2*x3^3*x4^2*x5*x8*x9 + -x2*x3^3*x4^2*x5*x8 + -x2*x3^3*x4^2*x5*x9 + x2*x3^3*x4^2*x5 + -x2*x3^3*x4^2*x6*x7*x8*x9 + x2*x3^3*x4^2*x6*x7*x8 + x2*x3^3*x4^2*x6*x7*x9 + -x2*x3^3*x4^2*x6*x7 + x2*x3^3*x4^2*x6*x8*x9 + -x2*x3^3*x4^2*x6*x8 + -x2*x3^3*x4^2*x6*x9 + x2*x3^3*x4^2*x6 + x2*x3^3*x4^2*x7*x8*x9 + -x2*x3^3*x4^2*x7*x8 + -x2*x3^3*x4^2*x7*x9 + x2*x3^3*x4^2*x7 + -x2*x3^3*x4^2*x8*x9 + x2*x3^3*x4^2*x8 + x2*x3^3*x4^2*x9 + -x2*x3^3*x4^2 + x2*x3^3*x4*x5^2*x6*x7*x8*x9 + -x2*x3^3*x4*x5^2*x6*x7*x8 + -x2*x3^3*x4*x5^2*x6*x7*x9 + x2*x3^3*x4*x5^2*x6*x7 + -x2*x3^3*x4*x5^2*x6*x8*x9 + x2*x3^3*x4*x5^2*x6*x8 + x2*x3^3*x4*x5^2*x6*x9 + -x2*x3^3*x4*x5^2*x6 + -x2*x3^3*x4*x5^2*x7*x8*x9 + x2*x3^3*x4*x5^2*x7*x8 + x2*x3^3*x4*x5^2*x7*x9 + -x2*x3^3*x4*x5^2*x7 + x2*x3^3*x4*x5^2*x8*x9 + -x2*x3^3*x4*x5^2*x8 + -x2*x3^3*x4*x5^2*x9 + x2*x3^3*x4*x5^2 + -3*x2*x3^3*x4*x5*x6*x7*x8*x9 + 3*x2*x3^3*x4*x5*x6*x7*x8 + 3*x2*x3^3*x4*x5*x6*x7*x9 + -3*x2*x3^3*x4*x5*x6*x7 + 3*x2*x3^3*x4*x5*x6*x8*x9 + -3*x2*x3^3*x4*x5*x6*x8 + -3*x2*x3^3*x4*x5*x6*x9 + 3*x2*x3^3*x4*x5*x6 + 3*x2*x3^3*x4*x5*x7*x8*x9 + -3*x2*x3^3*x4*x5*x7*x8 + -3*x2*x3^3*x4*x5*x7*x9 + 3*x2*x3^3*x4*x5*x7 + -3*x2*x3^3*x4*x5*x8*x9 + 3*x2*x3^3*x4*x5*x8 + 3*x2*x3^3*x4*x5*x9 + -3*x2*x3^3*x4*x5 + 2*x2*x3^3*x4*x6*x7*x8*x9 + -2*x2*x3^3*x4*x6*x7*x8 + -2*x2*x3^3*x4*x6*x7*x9 + 2*x2*x3^3*x4*x6*x7 + -2*x2*x3^3*x4*x6*x8*x9 + 2*x2*x3^3*x4*x6*x8 + 2*x2*x3^3*x4*x6*x9 + -2*x2*x3^3*x4*x6 + -2*x2*x3^3*x4*x7*x8*x9 + 2*x2*x3^3*x4*x7*x8 + 2*x2*x3^3*x4*x7*x9 + -2*x2*x3^3*x4*x7 + 2*x2*x3^3*x4*x8*x9 + -2*x2*x3^3*x4*x8 + -2*x2*x3^3*x4*x9 + 2*x2*x3^3*x4 + -x2*x3^3*x5^2*x6*x7*x8*x9 + x2*x3^3*x5^2*x6*x7*x8 + x2*x3^3*x5^2*x6*x7*x9 + -x2*x3^3*x5^2*x6*x7 + x2*x3^3*x5^2*x6*x8*x9 + -x2*x3^3*x5^2*x6*x8 + -x2*x3^3*x5^2*x6*x9 + x2*x3^3*x5^2*x6 + x2*x3^3*x5^2*x7*x8*x9 + -x2*x3^3*x5^2*x7*x8 + -x2*x3^3*x5^2*x7*x9 + x2*x3^3*x5^2*x7 + -x2*x3^3*x5^2*x8*x9 + x2*x3^3*x5^2*x8 + x2*x3^3*x5^2*x9 + -x2*x3^3*x5^2 + 2*x2*x3^3*x5*x6*x7*x8*x9 + -2*x2*x3^3*x5*x6*x7*x8 + -2*x2*x3^3*x5*x6*x7*x9 + 2*x2*x3^3*x5*x6*x7 + -2*x2*x3^3*x5*x6*x8*x9 + 2*x2*x3^3*x5*x6*x8 + 2*x2*x3^3*x5*x6*x9 + -2*x2*x3^3*x5*x6 + -2*x2*x3^3*x5*x7*x8*x9 + 2*x2*x3^3*x5*x7*x8 + 2*x2*x3^3*x5*x7*x9 + -2*x2*x3^3*x5*x7 + 2*x2*x3^3*x5*x8*x9 + -2*x2*x3^3*x5*x8 + -2*x2*x3^3*x5*x9 + 2*x2*x3^3*x5 + -x2*x3^3*x6*x7*x8*x9 + x2*x3^3*x6*x7*x8 + x2*x3^3*x6*x7*x9 + -x2*x3^3*x6*x7 + x2*x3^3*x6*x8*x9 + -x2*x3^3*x6*x8 + -x2*x3^3*x6*x9 + x2*x3^3*x6 + x2*x3^3*x7*x8*x9 + -x2*x3^3*x7*x8 + -x2*x3^3*x7*x9 + x2*x3^3*x7 + -x2*x3^3*x8*x9 + x2*x3^3*x8 + x2*x3^3*x9 + -x2*x3^3 + x2*x3^2*x4^2*x5*x6^2*x7*x8*x9 + -x2*x3^2*x4^2*x5*x6^2*x7*x8 + -x2*x3^2*x4^2*x5*x6^2*x7*x9 + x2*x3^2*x4^2*x5*x6^2*x7 + -x2*x3^2*x4^2*x5*x6^2*x8*x9 + x2*x3^2*x4^2*x5*x6^2*x8 + x2*x3^2*x4^2*x5*x6^2*x9 + -x2*x3^2*x4^2*x5*x6^2 + x2*x3^2*x4^2*x5*x6*x7^2*x8*x9 + -x2*x3^2*x4^2*x5*x6*x7^2*x8 + -x2*x3^2*x4^2*x5*x6*x7^2*x9 + x2*x3^2*x4^2*x5*x6*x7^2 + -2*x2*x3^2*x4^2*x5*x6*x7*x8*x9 + 2*x2*x3^2*x4^2*x5*x6*x7*x8 + 2*x2*x3^2*x4^2*x5*x6*x7*x9 + -2*x2*x3^2*x4^2*x5*x6*x7 + x2*x3^2*x4^2*x5*x6*x8*x9 + -x2*x3^2*x4^2*x5*x6*x8 + -x2*x3^2*x4^2*x5*x6*x9 + x2*x3^2*x4^2*x5*x6 + -x2*x3^2*x4^2*x5*x7^2*x8*x9 + x2*x3^2*x4^2*x5*x7^2*x8 + x2*x3^2*x4^2*x5*x7^2*x9 + -x2*x3^2*x4^2*x5*x7^2 + x2*x3^2*x4^2*x5*x7*x8*x9 + -x2*x3^2*x4^2*x5*x7*x8 + -x2*x3^2*x4^2*x5*x7*x9 + x2*x3^2*x4^2*x5*x7 + -x2*x3^2*x4^2*x6^2*x7*x8*x9 + x2*x3^2*x4^2*x6^2*x7*x8 + x2*x3^2*x4^2*x6^2*x7*x9 + -x2*x3^2*x4^2*x6^2*x7 + x2*x3^2*x4^2*x6^2*x8*x9 + -x2*x3^2*x4^2*x6^2*x8 + -x2*x3^2*x4^2*x6^2*x9 + x2*x3^2*x4^2*x6^2 + -x2*x3^2*x4^2*x6*x7^2*x8*x9 + x2*x3^2*x4^2*x6*x7^2*x8 + x2*x3^2*x4^2*x6*x7^2*x9 + -x2*x3^2*x4^2*x6*x7^2 + 2*x2*x3^2*x4^2*x6*x7*x8*x9 + -2*x2*x3^2*x4^2*x6*x7*x8 + -2*x2*x3^2*x4^2*x6*x7*x9 + 2*x2*x3^2*x4^2*x6*x7 + -x2*x3^2*x4^2*x6*x8*x9 + x2*x3^2*x4^2*x6*x8 + x2*x3^2*x4^2*x6*x9 + -x2*x3^2*x4^2*x6 + x2*x3^2*x4^2*x7^2*x8*x9 + -x2*x3^2*x4^2*x7^2*x8 + -x2*x3^2*x4^2*x7^2*x9 + x2*x3^2*x4^2*x7^2 + -x2*x3^2*x4^2*x7*x8*x9 + x2*x3^2*x4^2*x7*x8 + x2*x3^2*x4^2*x7*x9 + -x2*x3^2*x4^2*x7 + x2*x3^2*x4*x5^2*x6^2*x7*x8*x9 + -x2*x3^2*x4*x5^2*x6^2*x7*x8 + -x2*x3^2*x4*x5^2*x6^2*x7*x9 + x2*x3^2*x4*x5^2*x6^2*x7 + -x2*x3^2*x4*x5^2*x6^2*x8*x9 + x2*x3^2*x4*x5^2*x6^2*x8 + x2*x3^2*x4*x5^2*x6^2*x9 + -x2*x3^2*x4*x5^2*x6^2 + -x2*x3^2*x4*x5^2*x6*x7*x8*x9 + x2*x3^2*x4*x5^2*x6*x7*x8 + x2*x3^2*x4*x5^2*x6*x7*x9 + -x2*x3^2*x4*x5^2*x6*x7 + x2*x3^2*x4*x5^2*x6*x8*x9 + -x2*x3^2*x4*x5^2*x6*x8 + -x2*x3^2*x4*x5^2*x6*x9 + x2*x3^2*x4*x5^2*x6 + -2*x2*x3^2*x4*x5*x6^2*x7*x8*x9 + 2*x2*x3^2*x4*x5*x6^2*x7*x8 + 2*x2*x3^2*x4*x5*x6^2*x7*x9 + -2*x2*x3^2*x4*x5*x6^2*x7 + 2*x2*x3^2*x4*x5*x6^2*x8*x9 + -2*x2*x3^2*x4*x5*x6^2*x8 + -2*x2*x3^2*x4*x5*x6^2*x9 + 2*x2*x3^2*x4*x5*x6^2 + x2*x3^2*x4*x5*x6*x7^3*x8*x9 + -x2*x3^2*x4*x5*x6*x7^3*x8 + -x2*x3^2*x4*x5*x6*x7^3*x9 + x2*x3^2*x4*x5*x6*x7^3 + -2*x2*x3^2*x4*x5*x6*x7^2*x8*x9 + 2*x2*x3^2*x4*x5*x6*x7^2*x8 + 2*x2*x3^2*x4*x5*x6*x7^2*x9 + -2*x2*x3^2*x4*x5*x6*x7^2 + 3*x2*x3^2*x4*x5*x6*x7*x8*x9 + -3*x2*x3^2*x4*x5*x6*x7*x8 + -3*x2*x3^2*x4*x5*x6*x7*x9 + 3*x2*x3^2*x4*x5*x6*x7 + -2*x2*x3^2*x4*x5*x6*x8*x9 + 2*x2*x3^2*x4*x5*x6*x8 + 2*x2*x3^2*x4*x5*x6*x9 + -2*x2*x3^2*x4*x5*x6 + -x2*x3^2*x4*x5*x7^3*x8*x9 + x2*x3^2*x4*x5*x7^3*x8 + x2*x3^2*x4*x5*x7^3*x9 + -x2*x3^2*x4*x5*x7^3 + 2*x2*x3^2*x4*x5*x7^2*x8*x9 + -2*x2*x3^2*x4*x5*x7^2*x8 + -2*x2*x3^2*x4*x5*x7^2*x9 + 2*x2*x3^2*x4*x5*x7^2 + -x2*x3^2*x4*x5*x7*x8*x9 + x2*x3^2*x4*x5*x7*x8 + x2*x3^2*x4*x5*x7*x9 + -x2*x3^2*x4*x5*x7 + x2*x3^2*x4*x6^2*x7*x8*x9 + -x2*x3^2*x4*x6^2*x7*x8 + -x2*x3^2*x4*x6^2*x7*x9 + x2*x3^2*x4*x6^2*x7 + -x2*x3^2*x4*x6^2*x8*x9 + x2*x3^2*x4*x6^2*x8 + x2*x3^2*x4*x6^2*x9 + -x2*x3^2*x4*x6^2 + -x2*x3^2*x4*x6*x7^3*x8*x9 + x2*x3^2*x4*x6*x7^3*x8 + x2*x3^2*x4*x6*x7^3*x9 + -x2*x3^2*x4*x6*x7^3 + 2*x2*x3^2*x4*x6*x7^2*x8*x9 + -2*x2*x3^2*x4*x6*x7^2*x8 + -2*x2*x3^2*x4*x6*x7^2*x9 + 2*x2*x3^2*x4*x6*x7^2 + -2*x2*x3^2*x4*x6*x7*x8*x9 + 2*x2*x3^2*x4*x6*x7*x8 + 2*x2*x3^2*x4*x6*x7*x9 + -2*x2*x3^2*x4*x6*x7 + x2*x3^2*x4*x6*x8*x9 + -x2*x3^2*x4*x6*x8 + -x2*x3^2*x4*x6*x9 + x2*x3^2*x4*x6 + x2*x3^2*x4*x7^3*x8*x9 + -x2*x3^2*x4*x7^3*x8 + -x2*x3^2*x4*x7^3*x9 + x2*x3^2*x4*x7^3 + -2*x2*x3^2*x4*x7^2*x8*x9 + 2*x2*x3^2*x4*x7^2*x8 + 2*x2*x3^2*x4*x7^2*x9 + -2*x2*x3^2*x4*x7^2 + x2*x3^2*x4*x7*x8*x9 + -x2*x3^2*x4*x7*x8 + -x2*x3^2*x4*x7*x9 + x2*x3^2*x4*x7 + -x2*x3^2*x5^2*x6^2*x7*x8*x9 + x2*x3^2*x5^2*x6^2*x7*x8 + x2*x3^2*x5^2*x6^2*x7*x9 + -x2*x3^2*x5^2*x6^2*x7 + x2*x3^2*x5^2*x6^2*x8*x9 + -x2*x3^2*x5^2*x6^2*x8 + -x2*x3^2*x5^2*x6^2*x9 + x2*x3^2*x5^2*x6^2 + x2*x3^2*x5^2*x6*x7*x8*x9 + -x2*x3^2*x5^2*x6*x7*x8 + -x2*x3^2*x5^2*x6*x7*x9 + x2*x3^2*x5^2*x6*x7 + -x2*x3^2*x5^2*x6*x8*x9 + x2*x3^2*x5^2*x6*x8 + x2*x3^2*x5^2*x6*x9 + -x2*x3^2*x5^2*x6 + x2*x3^2*x5*x6^2*x7*x8*x9 + -x2*x3^2*x5*x6^2*x7*x8 + -x2*x3^2*x5*x6^2*x7*x9 + x2*x3^2*x5*x6^2*x7 + -x2*x3^2*x5*x6^2*x8*x9 + x2*x3^2*x5*x6^2*x8 + x2*x3^2*x5*x6^2*x9 + -x2*x3^2*x5*x6^2 + -x2*x3^2*x5*x6*x7^3*x8*x9 + x2*x3^2*x5*x6*x7^3*x8 + x2*x3^2*x5*x6*x7^3*x9 + -x2*x3^2*x5*x6*x7^3 + x2*x3^2*x5*x6*x7^2*x8*x9 + -x2*x3^2*x5*x6*x7^2*x8 + -x2*x3^2*x5*x6*x7^2*x9 + x2*x3^2*x5*x6*x7^2 + -x2*x3^2*x5*x6*x7*x8*x9 + x2*x3^2*x5*x6*x7*x8 + x2*x3^2*x5*x6*x7*x9 + -x2*x3^2*x5*x6*x7 + x2*x3^2*x5*x6*x8*x9 + -x2*x3^2*x5*x6*x8 + -x2*x3^2*x5*x6*x9 + x2*x3^2*x5*x6 + x2*x3^2*x5*x7^3*x8*x9 + -x2*x3^2*x5*x7^3*x8 + -x2*x3^2*x5*x7^3*x9 + x2*x3^2*x5*x7^3 + -x2*x3^2*x5*x7^2*x8*x9 + x2*x3^2*x5*x7^2*x8 + x2*x3^2*x5*x7^2*x9 + -x2*x3^2*x5*x7^2 + x2*x3^2*x6*x7^3*x8*x9 + -x2*x3^2*x6*x7^3*x8 + -x2*x3^2*x6*x7^3*x9 + x2*x3^2*x6*x7^3 + -x2*x3^2*x6*x7^2*x8*x9 + x2*x3^2*x6*x7^2*x8 + x2*x3^2*x6*x7^2*x9 + -x2*x3^2*x6*x7^2 + -x2*x3^2*x7^3*x8*x9 + x2*x3^2*x7^3*x8 + x2*x3^2*x7^3*x9 + -x2*x3^2*x7^3 + x2*x3^2*x7^2*x8*x9 + -x2*x3^2*x7^2*x8 + -x2*x3^2*x7^2*x9 + x2*x3^2*x7^2 + x2*x3*x4^2*x5*x6^2*x7*x8*x9^2 + -x2*x3*x4^2*x5*x6^2*x7*x8*x9 + -x2*x3*x4^2*x5*x6^2*x7*x9^2 + x2*x3*x4^2*x5*x6^2*x7*x9 + -x2*x3*x4^2*x5*x6^2*x8*x9^2 + x2*x3*x4^2*x5*x6^2*x8*x9 + x2*x3*x4^2*x5*x6^2*x9^2 + -x2*x3*x4^2*x5*x6^2*x9 + x2*x3*x4^2*x5*x6*x7*x8^2*x9 + -x2*x3*x4^2*x5*x6*x7*x8^2 + -x2*x3*x4^2*x5*x6*x7*x8*x9 + x2*x3*x4^2*x5*x6*x7*x8 + -x2*x3*x4^2*x5*x6*x8^2*x9 + x2*x3*x4^2*x5*x6*x8^2 + x2*x3*x4^2*x5*x6*x8*x9 + -x2*x3*x4^2*x5*x6*x8 + -x2*x3*x4^2*x5*x7*x8^2*x9 + x2*x3*x4^2*x5*x7*x8^2 + -x2*x3*x4^2*x5*x7*x8*x9^2 + 2*x2*x3*x4^2*x5*x7*x8*x9 + -x2*x3*x4^2*x5*x7*x8 + x2*x3*x4^2*x5*x7*x9^2 + -x2*x3*x4^2*x5*x7*x9 + x2*x3*x4^2*x5*x8^2*x9 + -x2*x3*x4^2*x5*x8^2 + x2*x3*x4^2*x5*x8*x9^2 + -2*x2*x3*x4^2*x5*x8*x9 + x2*x3*x4^2*x5*x8 + -x2*x3*x4^2*x5*x9^2 + x2*x3*x4^2*x5*x9 + -x2*x3*x4^2*x6^2*x7*x8*x9^2 + x2*x3*x4^2*x6^2*x7*x8*x9 + x2*x3*x4^2*x6^2*x7*x9^2 + -x2*x3*x4^2*x6^2*x7*x9 + x2*x3*x4^2*x6^2*x8*x9^2 + -x2*x3*x4^2*x6^2*x8*x9 + -x2*x3*x4^2*x6^2*x9^2 + x2*x3*x4^2*x6^2*x9 + -x2*x3*x4^2*x6*x7*x8^2*x9 + x2*x3*x4^2*x6*x7*x8^2 + x2*x3*x4^2*x6*x7*x8*x9 + -x2*x3*x4^2*x6*x7*x8 + x2*x3*x4^2*x6*x8^2*x9 + -x2*x3*x4^2*x6*x8^2 + -x2*x3*x4^2*x6*x8*x9 + x2*x3*x4^2*x6*x8 + x2*x3*x4^2*x7*x8^2*x9 + -x2*x3*x4^2*x7*x8^2 + x2*x3*x4^2*x7*x8*x9^2 + -2*x2*x3*x4^2*x7*x8*x9 + x2*x3*x4^2*x7*x8 + -x2*x3*x4^2*x7*x9^2 + x2*x3*x4^2*x7*x9 + -x2*x3*x4^2*x8^2*x9 + x2*x3*x4^2*x8^2 + -x2*x3*x4^2*x8*x9^2 + 2*x2*x3*x4^2*x8*x9 + -x2*x3*x4^2*x8 + x2*x3*x4^2*x9^2 + -x2*x3*x4^2*x9 + x2*x3*x4*x5^2*x6*x7*x8*x9^2 + -x2*x3*x4*x5^2*x6*x7*x8*x9 + -x2*x3*x4*x5^2*x6*x7*x9^2 + x2*x3*x4*x5^2*x6*x7*x9 + -x2*x3*x4*x5^2*x6*x8*x9^2 + x2*x3*x4*x5^2*x6*x8*x9 + x2*x3*x4*x5^2*x6*x9^2 + -x2*x3*x4*x5^2*x6*x9 + -x2*x3*x4*x5^2*x7*x8*x9^2 + x2*x3*x4*x5^2*x7*x8*x9 + x2*x3*x4*x5^2*x7*x9^2 + -x2*x3*x4*x5^2*x7*x9 + x2*x3*x4*x5^2*x8*x9^2 + -x2*x3*x4*x5^2*x8*x9 + -x2*x3*x4*x5^2*x9^2 + x2*x3*x4*x5^2*x9 + -x2*x3*x4*x5*x6^2*x7*x8*x9^2 + x2*x3*x4*x5*x6^2*x7*x8*x9 + x2*x3*x4*x5*x6^2*x7*x9^2 + -x2*x3*x4*x5*x6^2*x7*x9 + x2*x3*x4*x5*x6^2*x8*x9^2 + -x2*x3*x4*x5*x6^2*x8*x9 + -x2*x3*x4*x5*x6^2*x9^2 + x2*x3*x4*x5*x6^2*x9 + -x2*x3*x4*x5*x6*x7*x8^2*x9 + x2*x3*x4*x5*x6*x7*x8^2 + -x2*x3*x4*x5*x6*x7*x8*x9^2 + 2*x2*x3*x4*x5*x6*x7*x8*x9 + -x2*x3*x4*x5*x6*x7*x8 + x2*x3*x4*x5*x6*x7*x9^2 + -x2*x3*x4*x5*x6*x7*x9 + x2*x3*x4*x5*x6*x8^2*x9 + -x2*x3*x4*x5*x6*x8^2 + x2*x3*x4*x5*x6*x8*x9^2 + -2*x2*x3*x4*x5*x6*x8*x9 + x2*x3*x4*x5*x6*x8 + -x2*x3*x4*x5*x6*x9^2 + x2*x3*x4*x5*x6*x9 + x2*x3*x4*x5*x7*x8^2*x9 + -x2*x3*x4*x5*x7*x8^2 + 2*x2*x3*x4*x5*x7*x8*x9^2 + -3*x2*x3*x4*x5*x7*x8*x9 + x2*x3*x4*x5*x7*x8 + -2*x2*x3*x4*x5*x7*x9^2 + 2*x2*x3*x4*x5*x7*x9 + -x2*x3*x4*x5*x8^2*x9 + x2*x3*x4*x5*x8^2 + -2*x2*x3*x4*x5*x8*x9^2 + 3*x2*x3*x4*x5*x8*x9 + -x2*x3*x4*x5*x8 + 2*x2*x3*x4*x5*x9^2 + -2*x2*x3*x4*x5*x9 + x2*x3*x4*x6^2*x7*x8*x9^2 + -x2*x3*x4*x6^2*x7*x8*x9 + -x2*x3*x4*x6^2*x7*x9^2 + x2*x3*x4*x6^2*x7*x9 + -x2*x3*x4*x6^2*x8*x9^2 + x2*x3*x4*x6^2*x8*x9 + x2*x3*x4*x6^2*x9^2 + -x2*x3*x4*x6^2*x9 + x2*x3*x4*x6*x7*x8^2*x9 + -x2*x3*x4*x6*x7*x8^2 + -x2*x3*x4*x6*x7*x8*x9 + x2*x3*x4*x6*x7*x8 + -x2*x3*x4*x6*x8^2*x9 + x2*x3*x4*x6*x8^2 + x2*x3*x4*x6*x8*x9 + -x2*x3*x4*x6*x8 + -x2*x3*x4*x7*x8^2*x9 + x2*x3*x4*x7*x8^2 + -x2*x3*x4*x7*x8*x9^2 + 2*x2*x3*x4*x7*x8*x9 + -x2*x3*x4*x7*x8 + x2*x3*x4*x7*x9^2 + -x2*x3*x4*x7*x9 + x2*x3*x4*x8^2*x9 + -x2*x3*x4*x8^2 + x2*x3*x4*x8*x9^2 + -2*x2*x3*x4*x8*x9 + x2*x3*x4*x8 + -x2*x3*x4*x9^2 + x2*x3*x4*x9 + -x2*x3*x5^2*x6*x7*x8*x9^2 + x2*x3*x5^2*x6*x7*x8*x9 + x2*x3*x5^2*x6*x7*x9^2 + -x2*x3*x5^2*x6*x7*x9 + x2*x3*x5^2*x6*x8*x9^2 + -x2*x3*x5^2*x6*x8*x9 + -x2*x3*x5^2*x6*x9^2 + x2*x3*x5^2*x6*x9 + x2*x3*x5^2*x7*x8*x9^2 + -x2*x3*x5^2*x7*x8*x9 + -x2*x3*x5^2*x7*x9^2 + x2*x3*x5^2*x7*x9 + -x2*x3*x5^2*x8*x9^2 + x2*x3*x5^2*x8*x9 + x2*x3*x5^2*x9^2 + -x2*x3*x5^2*x9 + x2*x3*x5*x6*x7*x8*x9^2 + -x2*x3*x5*x6*x7*x8*x9 + -x2*x3*x5*x6*x7*x9^2 + x2*x3*x5*x6*x7*x9 + -x2*x3*x5*x6*x8*x9^2 + x2*x3*x5*x6*x8*x9 + x2*x3*x5*x6*x9^2 + -x2*x3*x5*x6*x9 + -x2*x3*x5*x7*x8*x9^2 + x2*x3*x5*x7*x8*x9 + x2*x3*x5*x7*x9^2 + -x2*x3*x5*x7*x9 + x2*x3*x5*x8*x9^2 + -x2*x3*x5*x8*x9 + -x2*x3*x5*x9^2 + x2*x3*x5*x9 + -x2*x4^2*x5*x6^2*x7*x8*x9^2 + x2*x4^2*x5*x6^2*x7*x8 + x2*x4^2*x5*x6^2*x7*x9^2 + -x2*x4^2*x5*x6^2*x7 + x2*x4^2*x5*x6^2*x8*x9^2 + -x2*x4^2*x5*x6^2*x8 + -x2*x4^2*x5*x6^2*x9^2 + x2*x4^2*x5*x6^2 + -x2*x4^2*x5*x6*x7^2*x8*x9 + x2*x4^2*x5*x6*x7^2*x8 + x2*x4^2*x5*x6*x7^2*x9 + -x2*x4^2*x5*x6*x7^2 + -x2*x4^2*x5*x6*x7*x8^2*x9 + x2*x4^2*x5*x6*x7*x8^2 + 2*x2*x4^2*x5*x6*x7*x8*x9 + -2*x2*x4^2*x5*x6*x7*x8 + -x2*x4^2*x5*x6*x7*x9 + x2*x4^2*x5*x6*x7 + x2*x4^2*x5*x6*x8^2*x9 + -x2*x4^2*x5*x6*x8^2 + -x2*x4^2*x5*x6*x8*x9 + x2*x4^2*x5*x6*x8 + x2*x4^2*x5*x7^2*x8*x9 + -x2*x4^2*x5*x7^2*x8 + -x2*x4^2*x5*x7^2*x9 + x2*x4^2*x5*x7^2 + x2*x4^2*x5*x7*x8^2*x9 + -x2*x4^2*x5*x7*x8^2 + x2*x4^2*x5*x7*x8*x9^2 + -2*x2*x4^2*x5*x7*x8*x9 + x2*x4^2*x5*x7*x8 + -x2*x4^2*x5*x7*x9^2 + x2*x4^2*x5*x7*x9 + -x2*x4^2*x5*x8^2*x9 + x2*x4^2*x5*x8^2 + -x2*x4^2*x5*x8*x9^2 + x2*x4^2*x5*x8*x9 + x2*x4^2*x5*x9^2 + -x2*x4^2*x5 + x2*x4^2*x6^2*x7*x8*x9^2 + -x2*x4^2*x6^2*x7*x8 + -x2*x4^2*x6^2*x7*x9^2 + x2*x4^2*x6^2*x7 + -x2*x4^2*x6^2*x8*x9^2 + x2*x4^2*x6^2*x8 + x2*x4^2*x6^2*x9^2 + -x2*x4^2*x6^2 + x2*x4^2*x6*x7^2*x8*x9 + -x2*x4^2*x6*x7^2*x8 + -x2*x4^2*x6*x7^2*x9 + x2*x4^2*x6*x7^2 + x2*x4^2*x6*x7*x8^2*x9 + -x2*x4^2*x6*x7*x8^2 + -2*x2*x4^2*x6*x7*x8*x9 + 2*x2*x4^2*x6*x7*x8 + x2*x4^2*x6*x7*x9 + -x2*x4^2*x6*x7 + -x2*x4^2*x6*x8^2*x9 + x2*x4^2*x6*x8^2 + x2*x4^2*x6*x8*x9 + -x2*x4^2*x6*x8 + -x2*x4^2*x7^2*x8*x9 + x2*x4^2*x7^2*x8 + x2*x4^2*x7^2*x9 + -x2*x4^2*x7^2 + -x2*x4^2*x7*x8^2*x9 + x2*x4^2*x7*x8^2 + -x2*x4^2*x7*x8*x9^2 + 2*x2*x4^2*x7*x8*x9 + -x2*x4^2*x7*x8 + x2*x4^2*x7*x9^2 + -x2*x4^2*x7*x9 + x2*x4^2*x8^2*x9 + -x2*x4^2*x8^2 + x2*x4^2*x8*x9^2 + -x2*x4^2*x8*x9 + -x2*x4^2*x9^2 + x2*x4^2 + -x2*x4*x5^2*x6^2*x7*x8*x9 + x2*x4*x5^2*x6^2*x7*x8 + x2*x4*x5^2*x6^2*x7*x9 + -x2*x4*x5^2*x6^2*x7 + x2*x4*x5^2*x6^2*x8*x9 + -x2*x4*x5^2*x6^2*x8 + -x2*x4*x5^2*x6^2*x9 + x2*x4*x5^2*x6^2 + -x2*x4*x5^2*x6*x7*x8*x9^2 + x2*x4*x5^2*x6*x7*x8*x9 + x2*x4*x5^2*x6*x7*x9^2 + -x2*x4*x5^2*x6*x7*x9 + x2*x4*x5^2*x6*x8*x9^2 + -x2*x4*x5^2*x6*x8*x9 + -x2*x4*x5^2*x6*x9^2 + x2*x4*x5^2*x6*x9 + x2*x4*x5^2*x7*x8*x9^2 + -x2*x4*x5^2*x7*x8 + -x2*x4*x5^2*x7*x9^2 + x2*x4*x5^2*x7 + -x2*x4*x5^2*x8*x9^2 + x2*x4*x5^2*x8 + x2*x4*x5^2*x9^2 + -x2*x4*x5^2 + x2*x4*x5*x6^2*x7*x8*x9^2 + x2*x4*x5*x6^2*x7*x8*x9 + -2*x2*x4*x5*x6^2*x7*x8 + -x2*x4*x5*x6^2*x7*x9^2 + -x2*x4*x5*x6^2*x7*x9 + 2*x2*x4*x5*x6^2*x7 + -x2*x4*x5*x6^2*x8*x9^2 + -x2*x4*x5*x6^2*x8*x9 + 2*x2*x4*x5*x6^2*x8 + x2*x4*x5*x6^2*x9^2 + x2*x4*x5*x6^2*x9 + -2*x2*x4*x5*x6^2 + -x2*x4*x5*x6*x7^3*x8*x9 + x2*x4*x5*x6*x7^3*x8 + x2*x4*x5*x6*x7^3*x9 + -x2*x4*x5*x6*x7^3 + 2*x2*x4*x5*x6*x7^2*x8*x9 + -2*x2*x4*x5*x6*x7^2*x8 + -2*x2*x4*x5*x6*x7^2*x9 + 2*x2*x4*x5*x6*x7^2 + x2*x4*x5*x6*x7*x8^2*x9 + -x2*x4*x5*x6*x7*x8^2 + x2*x4*x5*x6*x7*x8*x9^2 + -3*x2*x4*x5*x6*x7*x8*x9 + 2*x2*x4*x5*x6*x7*x8 + -x2*x4*x5*x6*x7*x9^2 + 2*x2*x4*x5*x6*x7*x9 + -x2*x4*x5*x6*x7 + -x2*x4*x5*x6*x8^2*x9 + x2*x4*x5*x6*x8^2 + -x2*x4*x5*x6*x8*x9^2 + 2*x2*x4*x5*x6*x8*x9 + -x2*x4*x5*x6*x8 + x2*x4*x5*x6*x9^2 + -x2*x4*x5*x6*x9 + x2*x4*x5*x7^3*x8*x9 + -x2*x4*x5*x7^3*x8 + -x2*x4*x5*x7^3*x9 + x2*x4*x5*x7^3 + -2*x2*x4*x5*x7^2*x8*x9 + 2*x2*x4*x5*x7^2*x8 + 2*x2*x4*x5*x7^2*x9 + -2*x2*x4*x5*x7^2 + -x2*x4*x5*x7*x8^2*x9 + x2*x4*x5*x7*x8^2 + -2*x2*x4*x5*x7*x8*x9^2 + 2*x2*x4*x5*x7*x8*x9 + 2*x2*x4*x5*x7*x9^2 + -x2*x4*x5*x7*x9 + -x2*x4*x5*x7 + x2*x4*x5*x8^2*x9 + -x2*x4*x5*x8^2 + 2*x2*x4*x5*x8*x9^2 + -x2*x4*x5*x8*x9 + -x2*x4*x5*x8 + -2*x2*x4*x5*x9^2 + 2*x2*x4*x5 + -x2*x4*x6^2*x7*x8*x9^2 + x2*x4*x6^2*x7*x8 + x2*x4*x6^2*x7*x9^2 + -x2*x4*x6^2*x7 + x2*x4*x6^2*x8*x9^2 + -x2*x4*x6^2*x8 + -x2*x4*x6^2*x9^2 + x2*x4*x6^2 + x2*x4*x6*x7^3*x8*x9 + -x2*x4*x6*x7^3*x8 + -x2*x4*x6*x7^3*x9 + x2*x4*x6*x7^3 + -2*x2*x4*x6*x7^2*x8*x9 + 2*x2*x4*x6*x7^2*x8 + 2*x2*x4*x6*x7^2*x9 + -2*x2*x4*x6*x7^2 + -x2*x4*x6*x7*x8^2*x9 + x2*x4*x6*x7*x8^2 + 2*x2*x4*x6*x7*x8*x9 + -2*x2*x4*x6*x7*x8 + -x2*x4*x6*x7*x9 + x2*x4*x6*x7 + x2*x4*x6*x8^2*x9 + -x2*x4*x6*x8^2 + -x2*x4*x6*x8*x9 + x2*x4*x6*x8 + -x2*x4*x7^3*x8*x9 + x2*x4*x7^3*x8 + x2*x4*x7^3*x9 + -x2*x4*x7^3 + 2*x2*x4*x7^2*x8*x9 + -2*x2*x4*x7^2*x8 + -2*x2*x4*x7^2*x9 + 2*x2*x4*x7^2 + x2*x4*x7*x8^2*x9 + -x2*x4*x7*x8^2 + x2*x4*x7*x8*x9^2 + -2*x2*x4*x7*x8*x9 + x2*x4*x7*x8 + -x2*x4*x7*x9^2 + x2*x4*x7*x9 + -x2*x4*x8^2*x9 + x2*x4*x8^2 + -x2*x4*x8*x9^2 + x2*x4*x8*x9 + x2*x4*x9^2 + -x2*x4 + x2*x5^2*x6^2*x7*x8*x9 + -x2*x5^2*x6^2*x7*x8 + -x2*x5^2*x6^2*x7*x9 + x2*x5^2*x6^2*x7 + -x2*x5^2*x6^2*x8*x9 + x2*x5^2*x6^2*x8 + x2*x5^2*x6^2*x9 + -x2*x5^2*x6^2 + x2*x5^2*x6*x7*x8*x9^2 + -x2*x5^2*x6*x7*x8*x9 + -x2*x5^2*x6*x7*x9^2 + x2*x5^2*x6*x7*x9 + -x2*x5^2*x6*x8*x9^2 + x2*x5^2*x6*x8*x9 + x2*x5^2*x6*x9^2 + -x2*x5^2*x6*x9 + -x2*x5^2*x7*x8*x9^2 + x2*x5^2*x7*x8 + x2*x5^2*x7*x9^2 + -x2*x5^2*x7 + x2*x5^2*x8*x9^2 + -x2*x5^2*x8 + -x2*x5^2*x9^2 + x2*x5^2 + -x2*x5*x6^2*x7*x8*x9 + x2*x5*x6^2*x7*x8 + x2*x5*x6^2*x7*x9 + -x2*x5*x6^2*x7 + x2*x5*x6^2*x8*x9 + -x2*x5*x6^2*x8 + -x2*x5*x6^2*x9 + x2*x5*x6^2 + x2*x5*x6*x7^3*x8*x9 + -x2*x5*x6*x7^3*x8 + -x2*x5*x6*x7^3*x9 + x2*x5*x6*x7^3 + -x2*x5*x6*x7^2*x8*x9 + x2*x5*x6*x7^2*x8 + x2*x5*x6*x7^2*x9 + -x2*x5*x6*x7^2 + -x2*x5*x6*x7*x8*x9^2 + x2*x5*x6*x7*x8*x9 + x2*x5*x6*x7*x9^2 + -x2*x5*x6*x7*x9 + x2*x5*x6*x8*x9^2 + -x2*x5*x6*x8*x9 + -x2*x5*x6*x9^2 + x2*x5*x6*x9 + -x2*x5*x7^3*x8*x9 + x2*x5*x7^3*x8 + x2*x5*x7^3*x9 + -x2*x5*x7^3 + x2*x5*x7^2*x8*x9 + -x2*x5*x7^2*x8 + -x2*x5*x7^2*x9 + x2*x5*x7^2 + x2*x5*x7*x8*x9^2 + -x2*x5*x7*x8 + -x2*x5*x7*x9^2 + x2*x5*x7 + -x2*x5*x8*x9^2 + x2*x5*x8 + x2*x5*x9^2 + -x2*x5 + -x2*x6*x7^3*x8*x9 + x2*x6*x7^3*x8 + x2*x6*x7^3*x9 + -x2*x6*x7^3 + x2*x6*x7^2*x8*x9 + -x2*x6*x7^2*x8 + -x2*x6*x7^2*x9 + x2*x6*x7^2 + x2*x7^3*x8*x9 + -x2*x7^3*x8 + -x2*x7^3*x9 + x2*x7^3 + -x2*x7^2*x8*x9 + x2*x7^2*x8 + x2*x7^2*x9 + -x2*x7^2 + -x3^4*x4*x5*x6*x7*x8*x9 + x3^4*x4*x5*x6*x7*x8 + x3^4*x4*x5*x6*x7*x9 + -x3^4*x4*x5*x6*x7 + x3^4*x4*x5*x6*x8*x9 + -x3^4*x4*x5*x6*x8 + -x3^4*x4*x5*x6*x9 + x3^4*x4*x5*x6 + x3^4*x4*x5*x7*x8*x9 + -x3^4*x4*x5*x7*x8 + -x3^4*x4*x5*x7*x9 + x3^4*x4*x5*x7 + -x3^4*x4*x5*x8*x9 + x3^4*x4*x5*x8 + x3^4*x4*x5*x9 + -x3^4*x4*x5 + x3^4*x4*x6*x7*x8*x9 + -x3^4*x4*x6*x7*x8 + -x3^4*x4*x6*x7*x9 + x3^4*x4*x6*x7 + -x3^4*x4*x6*x8*x9 + x3^4*x4*x6*x8 + x3^4*x4*x6*x9 + -x3^4*x4*x6 + -x3^4*x4*x7*x8*x9 + x3^4*x4*x7*x8 + x3^4*x4*x7*x9 + -x3^4*x4*x7 + x3^4*x4*x8*x9 + -x3^4*x4*x8 + -x3^4*x4*x9 + x3^4*x4 + x3^4*x5*x6*x7*x8*x9 + -x3^4*x5*x6*x7*x8 + -x3^4*x5*x6*x7*x9 + x3^4*x5*x6*x7 + -x3^4*x5*x6*x8*x9 + x3^4*x5*x6*x8 + x3^4*x5*x6*x9 + -x3^4*x5*x6 + -x3^4*x5*x7*x8*x9 + x3^4*x5*x7*x8 + x3^4*x5*x7*x9 + -x3^4*x5*x7 + x3^4*x5*x8*x9 + -x3^4*x5*x8 + -x3^4*x5*x9 + x3^4*x5 + -x3^4*x6*x7*x8*x9 + x3^4*x6*x7*x8 + x3^4*x6*x7*x9 + -x3^4*x6*x7 + x3^4*x6*x8*x9 + -x3^4*x6*x8 + -x3^4*x6*x9 + x3^4*x6 + x3^4*x7*x8*x9 + -x3^4*x7*x8 + -x3^4*x7*x9 + x3^4*x7 + -x3^4*x8*x9 + x3^4*x8 + x3^4*x9 + -x3^4 + -x3^3*x4^2*x5*x6*x7*x8*x9 + x3^3*x4^2*x5*x6*x7*x8 + x3^3*x4^2*x5*x6*x7*x9 + -x3^3*x4^2*x5*x6*x7 + x3^3*x4^2*x5*x6*x8*x9 + -x3^3*x4^2*x5*x6*x8 + -x3^3*x4^2*x5*x6*x9 + x3^3*x4^2*x5*x6 + x3^3*x4^2*x5*x7*x8*x9 + -x3^3*x4^2*x5*x7*x8 + -x3^3*x4^2*x5*x7*x9 + x3^3*x4^2*x5*x7 + -x3^3*x4^2*x5*x8*x9 + x3^3*x4^2*x5*x8 + x3^3*x4^2*x5*x9 + -x3^3*x4^2*x5 + x3^3*x4^2*x6*x7*x8*x9 + -x3^3*x4^2*x6*x7*x8 + -x3^3*x4^2*x6*x7*x9 + x3^3*x4^2*x6*x7 + -x3^3*x4^2*x6*x8*x9 + x3^3*x4^2*x6*x8 + x3^3*x4^2*x6*x9 + -x3^3*x4^2*x6 + -x3^3*x4^2*x7*x8*x9 + x3^3*x4^2*x7*x8 + x3^3*x4^2*x7*x9 + -x3^3*x4^2*x7 + x3^3*x4^2*x8*x9 + -x3^3*x4^2*x8 + -x3^3*x4^2*x9 + x3^3*x4^2 + -x3^3*x4*x5^2*x6*x7*x8*x9 + x3^3*x4*x5^2*x6*x7*x8 + x3^3*x4*x5^2*x6*x7*x9 + -x3^3*x4*x5^2*x6*x7 + x3^3*x4*x5^2*x6*x8*x9 + -x3^3*x4*x5^2*x6*x8 + -x3^3*x4*x5^2*x6*x9 + x3^3*x4*x5^2*x6 + x3^3*x4*x5^2*x7*x8*x9 + -x3^3*x4*x5^2*x7*x8 + -x3^3*x4*x5^2*x7*x9 + x3^3*x4*x5^2*x7 + -x3^3*x4*x5^2*x8*x9 + x3^3*x4*x5^2*x8 + x3^3*x4*x5^2*x9 + -x3^3*x4*x5^2 + -x3^3*x4*x5*x6^2*x7*x8*x9 + x3^3*x4*x5*x6^2*x7*x8 + x3^3*x4*x5*x6^2*x7*x9 + -x3^3*x4*x5*x6^2*x7 + x3^3*x4*x5*x6^2*x8*x9 + -x3^3*x4*x5*x6^2*x8 + -x3^3*x4*x5*x6^2*x9 + x3^3*x4*x5*x6^2 + 3*x3^3*x4*x5*x6*x7*x8*x9 + -3*x3^3*x4*x5*x6*x7*x8 + -3*x3^3*x4*x5*x6*x7*x9 + 3*x3^3*x4*x5*x6*x7 + -3*x3^3*x4*x5*x6*x8*x9 + 3*x3^3*x4*x5*x6*x8 + 3*x3^3*x4*x5*x6*x9 + -3*x3^3*x4*x5*x6 + -2*x3^3*x4*x5*x7*x8*x9 + 2*x3^3*x4*x5*x7*x8 + 2*x3^3*x4*x5*x7*x9 + -2*x3^3*x4*x5*x7 + 2*x3^3*x4*x5*x8*x9 + -2*x3^3*x4*x5*x8 + -2*x3^3*x4*x5*x9 + 2*x3^3*x4*x5 + x3^3*x4*x6^2*x7*x8*x9 + -x3^3*x4*x6^2*x7*x8 + -x3^3*x4*x6^2*x7*x9 + x3^3*x4*x6^2*x7 + -x3^3*x4*x6^2*x8*x9 + x3^3*x4*x6^2*x8 + x3^3*x4*x6^2*x9 + -x3^3*x4*x6^2 + -2*x3^3*x4*x6*x7*x8*x9 + 2*x3^3*x4*x6*x7*x8 + 2*x3^3*x4*x6*x7*x9 + -2*x3^3*x4*x6*x7 + 2*x3^3*x4*x6*x8*x9 + -2*x3^3*x4*x6*x8 + -2*x3^3*x4*x6*x9 + 2*x3^3*x4*x6 + x3^3*x4*x7*x8*x9 + -x3^3*x4*x7*x8 + -x3^3*x4*x7*x9 + x3^3*x4*x7 + -x3^3*x4*x8*x9 + x3^3*x4*x8 + x3^3*x4*x9 + -x3^3*x4 + x3^3*x5^2*x6*x7*x8*x9 + -x3^3*x5^2*x6*x7*x8 + -x3^3*x5^2*x6*x7*x9 + x3^3*x5^2*x6*x7 + -x3^3*x5^2*x6*x8*x9 + x3^3*x5^2*x6*x8 + x3^3*x5^2*x6*x9 + -x3^3*x5^2*x6 + -x3^3*x5^2*x7*x8*x9 + x3^3*x5^2*x7*x8 + x3^3*x5^2*x7*x9 + -x3^3*x5^2*x7 + x3^3*x5^2*x8*x9 + -x3^3*x5^2*x8 + -x3^3*x5^2*x9 + x3^3*x5^2 + x3^3*x5*x6^2*x7*x8*x9 + -x3^3*x5*x6^2*x7*x8 + -x3^3*x5*x6^2*x7*x9 + x3^3*x5*x6^2*x7 + -x3^3*x5*x6^2*x8*x9 + x3^3*x5*x6^2*x8 + x3^3*x5*x6^2*x9 + -x3^3*x5*x6^2 + -2*x3^3*x5*x6*x7*x8*x9 + 2*x3^3*x5*x6*x7*x8 + 2*x3^3*x5*x6*x7*x9 + -2*x3^3*x5*x6*x7 + 2*x3^3*x5*x6*x8*x9 + -2*x3^3*x5*x6*x8 + -2*x3^3*x5*x6*x9 + 2*x3^3*x5*x6 + x3^3*x5*x7*x8*x9 + -x3^3*x5*x7*x8 + -x3^3*x5*x7*x9 + x3^3*x5*x7 + -x3^3*x5*x8*x9 + x3^3*x5*x8 + x3^3*x5*x9 + -x3^3*x5 + -x3^3*x6^2*x7*x8*x9 + x3^3*x6^2*x7*x8 + x3^3*x6^2*x7*x9 + -x3^3*x6^2*x7 + x3^3*x6^2*x8*x9 + -x3^3*x6^2*x8 + -x3^3*x6^2*x9 + x3^3*x6^2 + x3^3*x6*x7*x8*x9 + -x3^3*x6*x7*x8 + -x3^3*x6*x7*x9 + x3^3*x6*x7 + -x3^3*x6*x8*x9 + x3^3*x6*x8 + x3^3*x6*x9 + -x3^3*x6 + -x3^2*x4^2*x5*x6^2*x7*x8*x9 + x3^2*x4^2*x5*x6^2*x7*x8 + x3^2*x4^2*x5*x6^2*x7*x9 + -x3^2*x4^2*x5*x6^2*x7 + x3^2*x4^2*x5*x6^2*x8*x9 + -x3^2*x4^2*x5*x6^2*x8 + -x3^2*x4^2*x5*x6^2*x9 + x3^2*x4^2*x5*x6^2 + -x3^2*x4^2*x5*x6*x7^2*x8*x9 + x3^2*x4^2*x5*x6*x7^2*x8 + x3^2*x4^2*x5*x6*x7^2*x9 + -x3^2*x4^2*x5*x6*x7^2 + 2*x3^2*x4^2*x5*x6*x7*x8*x9 + -2*x3^2*x4^2*x5*x6*x7*x8 + -2*x3^2*x4^2*x5*x6*x7*x9 + 2*x3^2*x4^2*x5*x6*x7 + -x3^2*x4^2*x5*x6*x8*x9 + x3^2*x4^2*x5*x6*x8 + x3^2*x4^2*x5*x6*x9 + -x3^2*x4^2*x5*x6 + x3^2*x4^2*x5*x7^2*x8*x9 + -x3^2*x4^2*x5*x7^2*x8 + -x3^2*x4^2*x5*x7^2*x9 + x3^2*x4^2*x5*x7^2 + -x3^2*x4^2*x5*x7*x8*x9 + x3^2*x4^2*x5*x7*x8 + x3^2*x4^2*x5*x7*x9 + -x3^2*x4^2*x5*x7 + x3^2*x4^2*x6^2*x7*x8*x9 + -x3^2*x4^2*x6^2*x7*x8 + -x3^2*x4^2*x6^2*x7*x9 + x3^2*x4^2*x6^2*x7 + -x3^2*x4^2*x6^2*x8*x9 + x3^2*x4^2*x6^2*x8 + x3^2*x4^2*x6^2*x9 + -x3^2*x4^2*x6^2 + x3^2*x4^2*x6*x7^2*x8*x9 + -x3^2*x4^2*x6*x7^2*x8 + -x3^2*x4^2*x6*x7^2*x9 + x3^2*x4^2*x6*x7^2 + -2*x3^2*x4^2*x6*x7*x8*x9 + 2*x3^2*x4^2*x6*x7*x8 + 2*x3^2*x4^2*x6*x7*x9 + -2*x3^2*x4^2*x6*x7 + x3^2*x4^2*x6*x8*x9 + -x3^2*x4^2*x6*x8 + -x3^2*x4^2*x6*x9 + x3^2*x4^2*x6 + -x3^2*x4^2*x7^2*x8*x9 + x3^2*x4^2*x7^2*x8 + x3^2*x4^2*x7^2*x9 + -x3^2*x4^2*x7^2 + x3^2*x4^2*x7*x8*x9 + -x3^2*x4^2*x7*x8 + -x3^2*x4^2*x7*x9 + x3^2*x4^2*x7 + -x3^2*x4*x5^2*x6^2*x7*x8*x9 + x3^2*x4*x5^2*x6^2*x7*x8 + x3^2*x4*x5^2*x6^2*x7*x9 + -x3^2*x4*x5^2*x6^2*x7 + x3^2*x4*x5^2*x6^2*x8*x9 + -x3^2*x4*x5^2*x6^2*x8 + -x3^2*x4*x5^2*x6^2*x9 + x3^2*x4*x5^2*x6^2 + x3^2*x4*x5^2*x6*x7*x8*x9 + -x3^2*x4*x5^2*x6*x7*x8 + -x3^2*x4*x5^2*x6*x7*x9 + x3^2*x4*x5^2*x6*x7 + -x3^2*x4*x5^2*x6*x8*x9 + x3^2*x4*x5^2*x6*x8 + x3^2*x4*x5^2*x6*x9 + -x3^2*x4*x5^2*x6 + 2*x3^2*x4*x5*x6^2*x7*x8*x9 + -2*x3^2*x4*x5*x6^2*x7*x8 + -2*x3^2*x4*x5*x6^2*x7*x9 + 2*x3^2*x4*x5*x6^2*x7 + -2*x3^2*x4*x5*x6^2*x8*x9 + 2*x3^2*x4*x5*x6^2*x8 + 2*x3^2*x4*x5*x6^2*x9 + -2*x3^2*x4*x5*x6^2 + -x3^2*x4*x5*x6*x7^3*x8*x9 + x3^2*x4*x5*x6*x7^3*x8 + x3^2*x4*x5*x6*x7^3*x9 + -x3^2*x4*x5*x6*x7^3 + x3^2*x4*x5*x6*x7^2*x8*x9 + -x3^2*x4*x5*x6*x7^2*x8 + -x3^2*x4*x5*x6*x7^2*x9 + x3^2*x4*x5*x6*x7^2 + -2*x3^2*x4*x5*x6*x7*x8*x9 + 2*x3^2*x4*x5*x6*x7*x8 + 2*x3^2*x4*x5*x6*x7*x9 + -2*x3^2*x4*x5*x6*x7 + 2*x3^2*x4*x5*x6*x8*x9 + -2*x3^2*x4*x5*x6*x8 + -2*x3^2*x4*x5*x6*x9 + 2*x3^2*x4*x5*x6 + x3^2*x4*x5*x7^3*x8*x9 + -x3^2*x4*x5*x7^3*x8 + -x3^2*x4*x5*x7^3*x9 + x3^2*x4*x5*x7^3 + -x3^2*x4*x5*x7^2*x8*x9 + x3^2*x4*x5*x7^2*x8 + x3^2*x4*x5*x7^2*x9 + -x3^2*x4*x5*x7^2 + -x3^2*x4*x6^2*x7*x8*x9 + x3^2*x4*x6^2*x7*x8 + x3^2*x4*x6^2*x7*x9 + -x3^2*x4*x6^2*x7 + x3^2*x4*x6^2*x8*x9 + -x3^2*x4*x6^2*x8 + -x3^2*x4*x6^2*x9 + x3^2*x4*x6^2 + x3^2*x4*x6*x7^3*x8*x9 + -x3^2*x4*x6*x7^3*x8 + -x3^2*x4*x6*x7^3*x9 + x3^2*x4*x6*x7^3 + -x3^2*x4*x6*x7^2*x8*x9 + x3^2*x4*x6*x7^2*x8 + x3^2*x4*x6*x7^2*x9 + -x3^2*x4*x6*x7^2 + x3^2*x4*x6*x7*x8*x9 + -x3^2*x4*x6*x7*x8 + -x3^2*x4*x6*x7*x9 + x3^2*x4*x6*x7 + -x3^2*x4*x6*x8*x9 + x3^2*x4*x6*x8 + x3^2*x4*x6*x9 + -x3^2*x4*x6 + -x3^2*x4*x7^3*x8*x9 + x3^2*x4*x7^3*x8 + x3^2*x4*x7^3*x9 + -x3^2*x4*x7^3 + x3^2*x4*x7^2*x8*x9 + -x3^2*x4*x7^2*x8 + -x3^2*x4*x7^2*x9 + x3^2*x4*x7^2 + x3^2*x5^2*x6^2*x7*x8*x9 + -x3^2*x5^2*x6^2*x7*x8 + -x3^2*x5^2*x6^2*x7*x9 + x3^2*x5^2*x6^2*x7 + -x3^2*x5^2*x6^2*x8*x9 + x3^2*x5^2*x6^2*x8 + x3^2*x5^2*x6^2*x9 + -x3^2*x5^2*x6^2 + -x3^2*x5^2*x6*x7*x8*x9 + x3^2*x5^2*x6*x7*x8 + x3^2*x5^2*x6*x7*x9 + -x3^2*x5^2*x6*x7 + x3^2*x5^2*x6*x8*x9 + -x3^2*x5^2*x6*x8 + -x3^2*x5^2*x6*x9 + x3^2*x5^2*x6 + -x3^2*x5*x6^2*x7*x8*x9 + x3^2*x5*x6^2*x7*x8 + x3^2*x5*x6^2*x7*x9 + -x3^2*x5*x6^2*x7 + x3^2*x5*x6^2*x8*x9 + -x3^2*x5*x6^2*x8 + -x3^2*x5*x6^2*x9 + x3^2*x5*x6^2 + x3^2*x5*x6*x7^3*x8*x9 + -x3^2*x5*x6*x7^3*x8 + -x3^2*x5*x6*x7^3*x9 + x3^2*x5*x6*x7^3 + -x3^2*x5*x6*x8*x9 + x3^2*x5*x6*x8 + x3^2*x5*x6*x9 + -x3^2*x5*x6 + -x3^2*x5*x7^3*x8*x9 + x3^2*x5*x7^3*x8 + x3^2*x5*x7^3*x9 + -x3^2*x5*x7^3 + x3^2*x5*x7*x8*x9 + -x3^2*x5*x7*x8 + -x3^2*x5*x7*x9 + x3^2*x5*x7 + -x3^2*x6*x7^3*x8*x9 + x3^2*x6*x7^3*x8 + x3^2*x6*x7^3*x9 + -x3^2*x6*x7^3 + x3^2*x6*x7*x8*x9 + -x3^2*x6*x7*x8 + -x3^2*x6*x7*x9 + x3^2*x6*x7 + x3^2*x7^3*x8*x9 + -x3^2*x7^3*x8 + -x3^2*x7^3*x9 + x3^2*x7^3 + -x3^2*x7*x8*x9 + x3^2*x7*x8 + x3^2*x7*x9 + -x3^2*x7 + -x3*x4^2*x5*x6^2*x7*x8*x9^2 + x3*x4^2*x5*x6^2*x7*x8*x9 + x3*x4^2*x5*x6^2*x7*x9^2 + -x3*x4^2*x5*x6^2*x7*x9 + x3*x4^2*x5*x6^2*x8*x9^2 + -x3*x4^2*x5*x6^2*x8*x9 + -x3*x4^2*x5*x6^2*x9^2 + x3*x4^2*x5*x6^2*x9 + -x3*x4^2*x5*x6*x7*x8^2*x9 + x3*x4^2*x5*x6*x7*x8^2 + x3*x4^2*x5*x6*x7*x8*x9 + -x3*x4^2*x5*x6*x7*x8 + x3*x4^2*x5*x6*x8^2*x9 + -x3*x4^2*x5*x6*x8^2 + -x3*x4^2*x5*x6*x8*x9 + x3*x4^2*x5*x6*x8 + x3*x4^2*x5*x7*x8^2*x9 + -x3*x4^2*x5*x7*x8^2 + x3*x4^2*x5*x7*x8*x9^2 + -2*x3*x4^2*x5*x7*x8*x9 + x3*x4^2*x5*x7*x8 + -x3*x4^2*x5*x7*x9^2 + x3*x4^2*x5*x7*x9 + -x3*x4^2*x5*x8^2*x9 + x3*x4^2*x5*x8^2 + -x3*x4^2*x5*x8*x9^2 + 2*x3*x4^2*x5*x8*x9 + -x3*x4^2*x5*x8 + x3*x4^2*x5*x9^2 + -x3*x4^2*x5*x9 + x3*x4^2*x6^2*x7*x8*x9^2 + -x3*x4^2*x6^2*x7*x8*x9 + -x3*x4^2*x6^2*x7*x9^2 + x3*x4^2*x6^2*x7*x9 + -x3*x4^2*x6^2*x8*x9^2 + x3*x4^2*x6^2*x8*x9 + x3*x4^2*x6^2*x9^2 + -x3*x4^2*x6^2*x9 + x3*x4^2*x6*x7*x8^2*x9 + -x3*x4^2*x6*x7*x8^2 + -x3*x4^2*x6*x7*x8*x9 + x3*x4^2*x6*x7*x8 + -x3*x4^2*x6*x8^2*x9 + x3*x4^2*x6*x8^2 + x3*x4^2*x6*x8*x9 + -x3*x4^2*x6*x8 + -x3*x4^2*x7*x8^2*x9 + x3*x4^2*x7*x8^2 + -x3*x4^2*x7*x8*x9^2 + 2*x3*x4^2*x7*x8*x9 + -x3*x4^2*x7*x8 + x3*x4^2*x7*x9^2 + -x3*x4^2*x7*x9 + x3*x4^2*x8^2*x9 + -x3*x4^2*x8^2 + x3*x4^2*x8*x9^2 + -2*x3*x4^2*x8*x9 + x3*x4^2*x8 + -x3*x4^2*x9^2 + x3*x4^2*x9 + -x3*x4*x5^2*x6*x7*x8*x9^2 + x3*x4*x5^2*x6*x7*x8*x9 + x3*x4*x5^2*x6*x7*x9^2 + -x3*x4*x5^2*x6*x7*x9 + x3*x4*x5^2*x6*x8*x9^2 + -x3*x4*x5^2*x6*x8*x9 + -x3*x4*x5^2*x6*x9^2 + x3*x4*x5^2*x6*x9 + x3*x4*x5^2*x7*x8*x9^2 + -x3*x4*x5^2*x7*x8*x9 + -x3*x4*x5^2*x7*x9^2 + x3*x4*x5^2*x7*x9 + -x3*x4*x5^2*x8*x9^2 + x3*x4*x5^2*x8*x9 + x3*x4*x5^2*x9^2 + -x3*x4*x5^2*x9 + -x3*x4*x5*x6*x7^2*x8*x9^2 + x3*x4*x5*x6*x7^2*x8*x9 + x3*x4*x5*x6*x7^2*x9^2 + -x3*x4*x5*x6*x7^2*x9 + 2*x3*x4*x5*x6*x7*x8*x9^2 + -2*x3*x4*x5*x6*x7*x8*x9 + -2*x3*x4*x5*x6*x7*x9^2 + 2*x3*x4*x5*x6*x7*x9 + -x3*x4*x5*x6*x8*x9^2 + x3*x4*x5*x6*x8*x9 + x3*x4*x5*x6*x9^2 + -x3*x4*x5*x6*x9 + x3*x4*x5*x7^2*x8*x9^2 + -x3*x4*x5*x7^2*x8*x9 + -x3*x4*x5*x7^2*x9^2 + x3*x4*x5*x7^2*x9 + -2*x3*x4*x5*x7*x8*x9^2 + 2*x3*x4*x5*x7*x8*x9 + 2*x3*x4*x5*x7*x9^2 + -2*x3*x4*x5*x7*x9 + x3*x4*x5*x8*x9^2 + -x3*x4*x5*x8*x9 + -x3*x4*x5*x9^2 + x3*x4*x5*x9 + x3*x4*x6*x7^2*x8*x9^2 + -x3*x4*x6*x7^2*x8*x9 + -x3*x4*x6*x7^2*x9^2 + x3*x4*x6*x7^2*x9 + -x3*x4*x6*x7*x8*x9^2 + x3*x4*x6*x7*x8*x9 + x3*x4*x6*x7*x9^2 + -x3*x4*x6*x7*x9 + -x3*x4*x7^2*x8*x9^2 + x3*x4*x7^2*x8*x9 + x3*x4*x7^2*x9^2 + -x3*x4*x7^2*x9 + x3*x4*x7*x8*x9^2 + -x3*x4*x7*x8*x9 + -x3*x4*x7*x9^2 + x3*x4*x7*x9 + x3*x5^2*x6*x7*x8*x9^2 + -x3*x5^2*x6*x7*x8*x9 + -x3*x5^2*x6*x7*x9^2 + x3*x5^2*x6*x7*x9 + -x3*x5^2*x6*x8*x9^2 + x3*x5^2*x6*x8*x9 + x3*x5^2*x6*x9^2 + -x3*x5^2*x6*x9 + -x3*x5^2*x7*x8*x9^2 + x3*x5^2*x7*x8*x9 + x3*x5^2*x7*x9^2 + -x3*x5^2*x7*x9 + x3*x5^2*x8*x9^2 + -x3*x5^2*x8*x9 + -x3*x5^2*x9^2 + x3*x5^2*x9 + x3*x5*x6^2*x7*x8*x9^2 + -x3*x5*x6^2*x7*x8*x9 + -x3*x5*x6^2*x7*x9^2 + x3*x5*x6^2*x7*x9 + -x3*x5*x6^2*x8*x9^2 + x3*x5*x6^2*x8*x9 + x3*x5*x6^2*x9^2 + -x3*x5*x6^2*x9 + x3*x5*x6*x7^2*x8*x9^2 + -x3*x5*x6*x7^2*x8*x9 + -x3*x5*x6*x7^2*x9^2 + x3*x5*x6*x7^2*x9 + x3*x5*x6*x7*x8^2*x9 + -x3*x5*x6*x7*x8^2 + -2*x3*x5*x6*x7*x8*x9^2 + x3*x5*x6*x7*x8*x9 + x3*x5*x6*x7*x8 + 2*x3*x5*x6*x7*x9^2 + -2*x3*x5*x6*x7*x9 + -x3*x5*x6*x8^2*x9 + x3*x5*x6*x8^2 + x3*x5*x6*x8*x9^2 + -x3*x5*x6*x8 + -x3*x5*x6*x9^2 + x3*x5*x6*x9 + -x3*x5*x7^2*x8*x9^2 + x3*x5*x7^2*x8*x9 + x3*x5*x7^2*x9^2 + -x3*x5*x7^2*x9 + -x3*x5*x7*x8^2*x9 + x3*x5*x7*x8^2 + x3*x5*x7*x8*x9^2 + -x3*x5*x7*x8 + -x3*x5*x7*x9^2 + x3*x5*x7*x9 + x3*x5*x8^2*x9 + -x3*x5*x8^2 + -x3*x5*x8*x9 + x3*x5*x8 + -x3*x6^2*x7*x8*x9^2 + x3*x6^2*x7*x8*x9 + x3*x6^2*x7*x9^2 + -x3*x6^2*x7*x9 + x3*x6^2*x8*x9^2 + -x3*x6^2*x8*x9 + -x3*x6^2*x9^2 + x3*x6^2*x9 + -x3*x6*x7^2*x8*x9^2 + x3*x6*x7^2*x8*x9 + x3*x6*x7^2*x9^2 + -x3*x6*x7^2*x9 + -x3*x6*x7*x8^2*x9 + x3*x6*x7*x8^2 + x3*x6*x7*x8*x9^2 + -x3*x6*x7*x8 + -x3*x6*x7*x9^2 + x3*x6*x7*x9 + x3*x6*x8^2*x9 + -x3*x6*x8^2 + -x3*x6*x8*x9 + x3*x6*x8 + x3*x7^2*x8*x9^2 + -x3*x7^2*x8*x9 + -x3*x7^2*x9^2 + x3*x7^2*x9 + x3*x7*x8^2*x9 + -x3*x7*x8^2 + -x3*x7*x8*x9 + x3*x7*x8 + -x3*x8^2*x9 + x3*x8^2 + -x3*x8*x9^2 + 2*x3*x8*x9 + -x3*x8 + x3*x9^2 + -x3*x9 + x4^2*x5*x6^2*x7*x8*x9^2 + -x4^2*x5*x6^2*x7*x8 + -x4^2*x5*x6^2*x7*x9^2 + x4^2*x5*x6^2*x7 + -x4^2*x5*x6^2*x8*x9^2 + x4^2*x5*x6^2*x8 + x4^2*x5*x6^2*x9^2 + -x4^2*x5*x6^2 + x4^2*x5*x6*x7^2*x8*x9 + -x4^2*x5*x6*x7^2*x8 + -x4^2*x5*x6*x7^2*x9 + x4^2*x5*x6*x7^2 + x4^2*x5*x6*x7*x8^2*x9 + -x4^2*x5*x6*x7*x8^2 + -2*x4^2*x5*x6*x7*x8*x9 + 2*x4^2*x5*x6*x7*x8 + x4^2*x5*x6*x7*x9 + -x4^2*x5*x6*x7 + -x4^2*x5*x6*x8^2*x9 + x4^2*x5*x6*x8^2 + x4^2*x5*x6*x8*x9 + -x4^2*x5*x6*x8 + -x4^2*x5*x7^2*x8*x9 + x4^2*x5*x7^2*x8 + x4^2*x5*x7^2*x9 + -x4^2*x5*x7^2 + -x4^2*x5*x7*x8^2*x9 + x4^2*x5*x7*x8^2 + -x4^2*x5*x7*x8*x9^2 + 2*x4^2*x5*x7*x8*x9 + -x4^2*x5*x7*x8 + x4^2*x5*x7*x9^2 + -x4^2*x5*x7*x9 + x4^2*x5*x8^2*x9 + -x4^2*x5*x8^2 + x4^2*x5*x8*x9^2 + -x4^2*x5*x8*x9 + -x4^2*x5*x9^2 + x4^2*x5 + -x4^2*x6^2*x7*x8*x9^2 + x4^2*x6^2*x7*x8 + x4^2*x6^2*x7*x9^2 + -x4^2*x6^2*x7 + x4^2*x6^2*x8*x9^2 + -x4^2*x6^2*x8 + -x4^2*x6^2*x9^2 + x4^2*x6^2 + -x4^2*x6*x7^2*x8*x9 + x4^2*x6*x7^2*x8 + x4^2*x6*x7^2*x9 + -x4^2*x6*x7^2 + -x4^2*x6*x7*x8^2*x9 + x4^2*x6*x7*x8^2 + 2*x4^2*x6*x7*x8*x9 + -2*x4^2*x6*x7*x8 + -x4^2*x6*x7*x9 + x4^2*x6*x7 + x4^2*x6*x8^2*x9 + -x4^2*x6*x8^2 + -x4^2*x6*x8*x9 + x4^2*x6*x8 + x4^2*x7^2*x8*x9 + -x4^2*x7^2*x8 + -x4^2*x7^2*x9 + x4^2*x7^2 + x4^2*x7*x8^2*x9 + -x4^2*x7*x8^2 + x4^2*x7*x8*x9^2 + -2*x4^2*x7*x8*x9 + x4^2*x7*x8 + -x4^2*x7*x9^2 + x4^2*x7*x9 + -x4^2*x8^2*x9 + x4^2*x8^2 + -x4^2*x8*x9^2 + x4^2*x8*x9 + x4^2*x9^2 + -x4^2 + x4*x5^2*x6^2*x7*x8*x9 + -x4*x5^2*x6^2*x7*x8 + -x4*x5^2*x6^2*x7*x9 + x4*x5^2*x6^2*x7 + -x4*x5^2*x6^2*x8*x9 + x4*x5^2*x6^2*x8 + x4*x5^2*x6^2*x9 + -x4*x5^2*x6^2 + x4*x5^2*x6*x7*x8*x9^2 + -x4*x5^2*x6*x7*x8*x9 + -x4*x5^2*x6*x7*x9^2 + x4*x5^2*x6*x7*x9 + -x4*x5^2*x6*x8*x9^2 + x4*x5^2*x6*x8*x9 + x4*x5^2*x6*x9^2 + -x4*x5^2*x6*x9 + -x4*x5^2*x7*x8*x9^2 + x4*x5^2*x7*x8 + x4*x5^2*x7*x9^2 + -x4*x5^2*x7 + x4*x5^2*x8*x9^2 + -x4*x5^2*x8 + -x4*x5^2*x9^2 + x4*x5^2 + -x4*x5*x6^2*x7*x8*x9 + x4*x5*x6^2*x7*x8 + x4*x5*x6^2*x7*x9 + -x4*x5*x6^2*x7 + x4*x5*x6^2*x8*x9 + -x4*x5*x6^2*x8 + -x4*x5*x6^2*x9 + x4*x5*x6^2 + x4*x5*x6*x7^3*x8*x9 + -x4*x5*x6*x7^3*x8 + -x4*x5*x6*x7^3*x9 + x4*x5*x6*x7^3 + x4*x5*x6*x7^2*x8*x9^2 + -2*x4*x5*x6*x7^2*x8*x9 + x4*x5*x6*x7^2*x8 + -x4*x5*x6*x7^2*x9^2 + 2*x4*x5*x6*x7^2*x9 + -x4*x5*x6*x7^2 + -2*x4*x5*x6*x7*x8*x9^2 + 2*x4*x5*x6*x7*x8*x9 + 2*x4*x5*x6*x7*x9^2 + -2*x4*x5*x6*x7*x9 + x4*x5*x6*x8*x9^2 + -x4*x5*x6*x8*x9 + -x4*x5*x6*x9^2 + x4*x5*x6*x9 + -x4*x5*x7^3*x8*x9 + x4*x5*x7^3*x8 + x4*x5*x7^3*x9 + -x4*x5*x7^3 + -x4*x5*x7^2*x8*x9^2 + 2*x4*x5*x7^2*x8*x9 + -x4*x5*x7^2*x8 + x4*x5*x7^2*x9^2 + -2*x4*x5*x7^2*x9 + x4*x5*x7^2 + 2*x4*x5*x7*x8*x9^2 + -x4*x5*x7*x8*x9 + -x4*x5*x7*x8 + -2*x4*x5*x7*x9^2 + x4*x5*x7*x9 + x4*x5*x7 + -x4*x5*x8*x9^2 + x4*x5*x8 + x4*x5*x9^2 + -x4*x5 + -x4*x6*x7^3*x8*x9 + x4*x6*x7^3*x8 + x4*x6*x7^3*x9 + -x4*x6*x7^3 + -x4*x6*x7^2*x8*x9^2 + 2*x4*x6*x7^2*x8*x9 + -x4*x6*x7^2*x8 + x4*x6*x7^2*x9^2 + -2*x4*x6*x7^2*x9 + x4*x6*x7^2 + x4*x6*x7*x8*x9^2 + -x4*x6*x7*x8*x9 + -x4*x6*x7*x9^2 + x4*x6*x7*x9 + x4*x7^3*x8*x9 + -x4*x7^3*x8 + -x4*x7^3*x9 + x4*x7^3 + x4*x7^2*x8*x9^2 + -2*x4*x7^2*x8*x9 + x4*x7^2*x8 + -x4*x7^2*x9^2 + 2*x4*x7^2*x9 + -x4*x7^2 + -x4*x7*x8*x9^2 + x4*x7*x8*x9 + x4*x7*x9^2 + -x4*x7*x9 + -x5^2*x6^2*x7*x8*x9 + x5^2*x6^2*x7*x8 + x5^2*x6^2*x7*x9 + -x5^2*x6^2*x7 + x5^2*x6^2*x8*x9 + -x5^2*x6^2*x8 + -x5^2*x6^2*x9 + x5^2*x6^2 + -x5^2*x6*x7*x8*x9^2 + x5^2*x6*x7*x8*x9 + x5^2*x6*x7*x9^2 + -x5^2*x6*x7*x9 + x5^2*x6*x8*x9^2 + -x5^2*x6*x8*x9 + -x5^2*x6*x9^2 + x5^2*x6*x9 + x5^2*x7*x8*x9^2 + -x5^2*x7*x8 + -x5^2*x7*x9^2 + x5^2*x7 + -x5^2*x8*x9^2 + x5^2*x8 + x5^2*x9^2 + -x5^2 + -x5*x6^2*x7*x8*x9^2 + x5*x6^2*x7*x8*x9 + x5*x6^2*x7*x9^2 + -x5*x6^2*x7*x9 + x5*x6^2*x8*x9^2 + -x5*x6^2*x8*x9 + -x5*x6^2*x9^2 + x5*x6^2*x9 + -x5*x6*x7^3*x8*x9 + x5*x6*x7^3*x8 + x5*x6*x7^3*x9 + -x5*x6*x7^3 + -x5*x6*x7^2*x8*x9^2 + x5*x6*x7^2*x8*x9 + x5*x6*x7^2*x9^2 + -x5*x6*x7^2*x9 + -x5*x6*x7*x8^2*x9 + x5*x6*x7*x8^2 + 2*x5*x6*x7*x8*x9^2 + -2*x5*x6*x7*x8 + -2*x5*x6*x7*x9^2 + x5*x6*x7*x9 + x5*x6*x7 + x5*x6*x8^2*x9 + -x5*x6*x8^2 + -x5*x6*x8*x9^2 + x5*x6*x8 + x5*x6*x9^2 + -x5*x6*x9 + x5*x7^3*x8*x9 + -x5*x7^3*x8 + -x5*x7^3*x9 + x5*x7^3 + x5*x7^2*x8*x9^2 + -x5*x7^2*x8*x9 + -x5*x7^2*x9^2 + x5*x7^2*x9 + x5*x7*x8^2*x9 + -x5*x7*x8^2 + -x5*x7*x8*x9^2 + -x5*x7*x8*x9 + 2*x5*x7*x8 + x5*x7*x9^2 + -x5*x7 + -x5*x8^2*x9 + x5*x8^2 + x5*x8*x9 + -x5*x8 + x6^2*x7*x8*x9^2 + -x6^2*x7*x8 + -x6^2*x7*x9^2 + x6^2*x7 + -x6^2*x8*x9^2 + x6^2*x8 + x6^2*x9^2 + -x6^2 + x6*x7^3*x8*x9 + -x6*x7^3*x8 + -x6*x7^3*x9 + x6*x7^3 + x6*x7^2*x8*x9^2 + -x6*x7^2*x8*x9 + -x6*x7^2*x9^2 + x6*x7^2*x9 + x6*x7*x8^2*x9 + -x6*x7*x8^2 + -x6*x7*x8*x9^2 + -x6*x7*x8*x9 + 2*x6*x7*x8 + x6*x7*x9^2 + -x6*x7 + -x6*x8^2*x9 + x6*x8^2 + x6*x8*x9 + -x6*x8 + -x7^3*x8*x9 + x7^3*x8 + x7^3*x9 + -x7^3 + -x7^2*x8*x9^2 + x7^2*x8*x9 + x7^2*x9^2 + -x7^2*x9 + -x7*x8^2*x9 + x7*x8^2 + x7*x8*x9 + -x7*x8 + x8^2*x9 + -x8^2 + x8*x9^2 + -x8*x9 + -x9^2 + 1; frobby-0.9.5/test/frob/bug27.opt_irr000066400000000000000000000000551401527164200172470ustar00rootroot000000000000002 9 0 3 3 1 1 1 1 1 1 0 2 3 1 1 2 1 1 1 12 frobby-0.9.5/test/frob/bug27.opt_irr_min000066400000000000000000000001001401527164200201010ustar00rootroot000000000000003 9 0 2 1 1 1 1 1 2 1 0 1 1 2 1 1 1 2 1 0 1 1 1 2 1 1 1 2 10 frobby-0.9.5/test/frob/bug27.opt_std000066400000000000000000000000211401527164200172360ustar00rootroot000000000000000 9 no solution. frobby-0.9.5/test/frob/bug27.opt_std_min000066400000000000000000000000211401527164200201010ustar00rootroot000000000000000 9 no solution. frobby-0.9.5/test/frob/bug27.primdecom000066400000000000000000000012611401527164200175500ustar00rootroot0000000000000036 9 0 4 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 2 0 0 0 0 1 0 0 0 2 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 1 0 1 3 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 4 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 3 0 1 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 2 1 0 1 0 0 0 0 0 2 0 1 1 0 0 0 0 0 2 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug27.radical000066400000000000000000000002341401527164200171670ustar00rootroot000000000000008 9 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug27.test000066400000000000000000000017651401527164200165610ustar00rootroot0000000000000036 9 -5 0 0 0 1 1 0 0 1 -4 -1 0 1 0 0 1 0 1 -4 0 0 0 -1 0 2 0 1 -3 0 1 0 0 0 0 1 0 -3 0 2 1 0 1 0 0 -1 -3 0 4 0 -1 0 0 0 0 -3 4 0 -1 0 0 0 0 0 -2 -1 2 0 1 1 0 0 -1 -2 0 -1 0 1 0 1 0 0 -2 0 2 0 0 0 1 -1 0 -2 1 -1 -1 0 0 2 0 0 -2 2 0 0 0 0 0 1 -1 -2 2 0 0 0 1 -1 0 0 -1 -2 1 0 0 0 0 0 1 -1 -1 -1 0 0 1 1 0 0 -1 -1 -1 1 0 -1 2 0 0 -1 0 -1 0 -1 -1 3 0 0 -1 0 -1 0 0 0 -1 2 0 -1 0 0 2 0 0 -1 0 0 -1 0 3 0 1 0 -1 0 -1 -1 1 0 0 1 -1 0 0 0 -1 1 0 1 -1 0 0 0 0 -1 1 3 -1 0 0 0 0 -1 -1 2 0 -1 0 -1 1 0 0 -1 2 0 -1 0 0 0 -1 1 -1 3 1 0 0 0 -2 0 0 0 -1 0 1 1 0 -1 0 0 0 -1 3 0 0 1 -1 0 -1 0 -1 3 1 0 -1 0 0 -1 0 0 -3 0 1 0 0 1 0 0 0 -1 -1 0 -1 0 1 1 0 0 -1 -1 0 0 -1 0 2 0 0 0 -1 0 1 0 1 -1 0 0 0 -1 0 2 -1 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 1 1 -1 frobby-0.9.5/test/frob/bug27.uni000066400000000000000000000002011401527164200163550ustar00rootroot00000000000000R = QQ[t]; p = 2*t^12 + -52*t^10 + 184*t^9 + -259*t^8 + 104*t^7 + 140*t^6 + -184*t^5 + 56*t^4 + 24*t^3 + -16*t^2 + 1; frobby-0.9.5/test/frob/bug3.alexdual000066400000000000000000000004471401527164200173070ustar00rootroot0000000000000025 5 0 6 7 3 2 0 6 6 4 1 0 6 6 3 9 0 6 4 3 14 0 6 1 5 14 0 5 9 4 1 0 5 9 3 2 0 5 6 6 1 0 5 4 1 39 0 5 1 6 19 0 5 1 5 20 0 4 9 3 7 0 4 7 1 39 0 4 4 3 20 0 3 6 6 7 0 3 5 6 14 0 3 3 6 19 0 3 3 5 20 0 2 9 5 7 0 2 8 6 7 0 2 3 5 25 0 1 9 5 13 0 1 8 6 12 0 1 8 5 20 0 1 6 5 25 frobby-0.9.5/test/frob/bug3.assoprimes000066400000000000000000000000171401527164200176660ustar00rootroot000000000000001 5 0 1 1 1 1 frobby-0.9.5/test/frob/bug3.dim000066400000000000000000000000021401527164200162440ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug3.euler000066400000000000000000000000021401527164200166070ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug3.frobInstance000066400000000000000000000000271401527164200201170ustar00rootroot000000000000003761 1606 839 1213 161 frobby-0.9.5/test/frob/bug3.frobNumber000066400000000000000000000000061401527164200176000ustar00rootroot0000000000000011808 frobby-0.9.5/test/frob/bug3.intersection000066400000000000000000000003401401527164200202060ustar00rootroot0000000000000019 5 0 6 0 0 0 0 5 4 0 0 0 5 0 1 31 0 5 0 0 32 0 4 2 0 19 0 3 0 2 0 0 2 7 0 0 0 2 3 4 0 0 2 0 0 37 0 1 5 0 25 0 1 1 1 24 0 0 9 0 0 0 0 6 2 0 0 0 4 0 30 0 0 3 3 35 0 0 0 6 0 0 0 0 4 5 0 0 0 3 42 0 0 0 0 43 frobby-0.9.5/test/frob/bug3.irrdecom000066400000000000000000000023071401527164200173110ustar00rootroot000000000000004 5 0 6 0 0 0 0 0 4 0 0 0 0 0 2 0 0 0 0 0 19 4 5 0 6 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 24 4 5 0 6 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 32 4 5 0 6 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 31 4 5 0 5 0 0 0 0 0 7 0 0 0 0 0 2 0 0 0 0 0 19 4 5 0 5 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 37 4 5 0 5 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 37 4 5 0 4 0 0 0 0 0 7 0 0 0 0 0 2 0 0 0 0 0 24 4 5 0 4 0 0 0 0 0 7 0 0 0 0 0 1 0 0 0 0 0 25 4 5 0 4 0 0 0 0 0 5 0 0 0 0 0 1 0 0 0 0 0 30 4 5 0 4 0 0 0 0 0 4 0 0 0 0 0 1 0 0 0 0 0 37 4 5 0 3 0 0 0 0 0 6 0 0 0 0 0 4 0 0 0 0 0 24 4 5 0 3 0 0 0 0 0 3 0 0 0 0 0 6 0 0 0 0 0 5 4 5 0 3 0 0 0 0 0 1 0 0 0 0 0 4 0 0 0 0 0 37 4 5 0 2 0 0 0 0 0 9 0 0 0 0 0 2 0 0 0 0 0 24 4 5 0 2 0 0 0 0 0 9 0 0 0 0 0 1 0 0 0 0 0 25 4 5 0 2 0 0 0 0 0 6 0 0 0 0 0 6 0 0 0 0 0 5 4 5 0 2 0 0 0 0 0 4 0 0 0 0 0 1 0 0 0 0 0 43 4 5 0 2 0 0 0 0 0 1 0 0 0 0 0 4 0 0 0 0 0 42 4 5 0 2 0 0 0 0 0 1 0 0 0 0 0 3 0 0 0 0 0 43 4 5 0 1 0 0 0 0 0 9 0 0 0 0 0 2 0 0 0 0 0 30 4 5 0 1 0 0 0 0 0 6 0 0 0 0 0 4 0 0 0 0 0 30 4 5 0 1 0 0 0 0 0 4 0 0 0 0 0 4 0 0 0 0 0 35 4 5 0 1 0 0 0 0 0 4 0 0 0 0 0 3 0 0 0 0 0 43 4 5 0 1 0 0 0 0 0 3 0 0 0 0 0 4 0 0 0 0 0 42 frobby-0.9.5/test/frob/bug3.irrdecom_ideal000066400000000000000000000004571401527164200204530ustar00rootroot0000000000000025 5 0 6 4 2 19 0 6 2 2 24 0 6 2 1 32 0 6 1 2 31 0 5 7 2 19 0 5 2 1 37 0 5 1 2 37 0 4 7 2 24 0 4 7 1 25 0 4 5 1 30 0 4 4 1 37 0 3 6 4 24 0 3 3 6 5 0 3 1 4 37 0 2 9 2 24 0 2 9 1 25 0 2 6 6 5 0 2 4 1 43 0 2 1 4 42 0 2 1 3 43 0 1 9 2 30 0 1 6 4 30 0 1 4 4 35 0 1 4 3 43 0 1 3 4 42 frobby-0.9.5/test/frob/bug3.maxstandard000066400000000000000000000000041401527164200200030ustar00rootroot000000000000000 5 frobby-0.9.5/test/frob/bug3.minimize000066400000000000000000000003401401527164200173210ustar00rootroot0000000000000019 5 0 6 0 0 0 0 5 4 0 0 0 5 0 1 31 0 5 0 0 32 0 4 2 0 19 0 3 0 2 0 0 2 7 0 0 0 2 3 4 0 0 2 0 0 37 0 1 5 0 25 0 1 1 1 24 0 0 9 0 0 0 0 6 2 0 0 0 4 0 30 0 0 3 3 35 0 0 0 6 0 0 0 0 4 5 0 0 0 3 42 0 0 0 0 43 frobby-0.9.5/test/frob/bug3.multi000066400000000000000000000065541401527164200166470ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5]; p = x2^6*x3^4*x4^2*x5^19 + -x2^6*x3^4*x4^2 + -x2^6*x3^4*x5^19 + x2^6*x3^4 + x2^6*x3^2*x4^2*x5^24 + -x2^6*x3^2*x4^2*x5^19 + x2^6*x3^2*x4*x5^32 + -x2^6*x3^2*x4*x5^24 + -x2^6*x3^2*x5^32 + x2^6*x3^2*x5^19 + x2^6*x3*x4^2*x5^31 + -x2^6*x3*x4^2*x5^24 + -x2^6*x3*x4*x5^31 + x2^6*x3*x4*x5^24 + -x2^6*x4^2*x5^31 + x2^6*x4^2 + -x2^6*x4*x5^32 + x2^6*x4*x5^31 + x2^6*x5^32 + -x2^6 + x2^5*x3^7*x4^2*x5^19 + -x2^5*x3^7*x4^2 + -x2^5*x3^7*x5^19 + x2^5*x3^7 + -x2^5*x3^4*x4^2*x5^19 + x2^5*x3^4*x4^2 + x2^5*x3^4*x5^19 + -x2^5*x3^4 + x2^5*x3^2*x4*x5^37 + -x2^5*x3^2*x4*x5^32 + -x2^5*x3^2*x5^37 + x2^5*x3^2*x5^32 + x2^5*x3*x4^2*x5^37 + -x2^5*x3*x4^2*x5^31 + -x2^5*x3*x4*x5^37 + x2^5*x3*x4*x5^31 + -x2^5*x4^2*x5^37 + x2^5*x4^2*x5^31 + x2^5*x4*x5^32 + -x2^5*x4*x5^31 + x2^5*x5^37 + -x2^5*x5^32 + x2^4*x3^7*x4^2*x5^24 + -x2^4*x3^7*x4^2*x5^19 + x2^4*x3^7*x4*x5^25 + -x2^4*x3^7*x4*x5^24 + -x2^4*x3^7*x5^25 + x2^4*x3^7*x5^19 + x2^4*x3^5*x4*x5^30 + -x2^4*x3^5*x4*x5^25 + -x2^4*x3^5*x5^30 + x2^4*x3^5*x5^25 + x2^4*x3^4*x4*x5^37 + -x2^4*x3^4*x4*x5^30 + -x2^4*x3^4*x5^37 + x2^4*x3^4*x5^30 + -x2^4*x3^2*x4^2*x5^24 + x2^4*x3^2*x4^2*x5^19 + -x2^4*x3^2*x4*x5^37 + x2^4*x3^2*x4*x5^24 + x2^4*x3^2*x5^37 + -x2^4*x3^2*x5^19 + x2^3*x3^6*x4^4*x5^24 + -x2^3*x3^6*x4^4 + -x2^3*x3^6*x4^2*x5^24 + x2^3*x3^6*x4^2 + x2^3*x3^3*x4^6*x5^5 + -x2^3*x3^3*x4^6 + -x2^3*x3^3*x4^4*x5^5 + x2^3*x3^3*x4^4 + x2^3*x3*x4^4*x5^37 + -x2^3*x3*x4^4*x5^24 + -x2^3*x3*x4^2*x5^37 + x2^3*x3*x4^2*x5^24 + -x2^3*x4^6*x5^5 + x2^3*x4^6 + -x2^3*x4^4*x5^37 + x2^3*x4^4*x5^5 + x2^3*x4^2*x5^37 + -x2^3*x4^2 + x2^2*x3^9*x4^2*x5^24 + -x2^2*x3^9*x4^2 + x2^2*x3^9*x4*x5^25 + -x2^2*x3^9*x4*x5^24 + -x2^2*x3^9*x5^25 + x2^2*x3^9 + -x2^2*x3^7*x4^2*x5^24 + x2^2*x3^7*x4^2 + -x2^2*x3^7*x4*x5^25 + x2^2*x3^7*x4*x5^24 + x2^2*x3^7*x5^25 + -x2^2*x3^7 + x2^2*x3^6*x4^6*x5^5 + -x2^2*x3^6*x4^6 + -x2^2*x3^6*x4^4*x5^5 + x2^2*x3^6*x4^4 + x2^2*x3^4*x4*x5^43 + -x2^2*x3^4*x4*x5^37 + -x2^2*x3^4*x5^43 + x2^2*x3^4*x5^37 + -x2^2*x3^3*x4^6*x5^5 + x2^2*x3^3*x4^6 + x2^2*x3^3*x4^4*x5^5 + -x2^2*x3^3*x4^4 + x2^2*x3*x4^4*x5^42 + -x2^2*x3*x4^4*x5^37 + x2^2*x3*x4^3*x5^43 + -x2^2*x3*x4^3*x5^42 + -x2^2*x3*x4*x5^43 + x2^2*x3*x4*x5^37 + -x2^2*x4^4*x5^42 + x2^2*x4^4*x5^37 + -x2^2*x4^3*x5^43 + x2^2*x4^3*x5^42 + x2^2*x5^43 + -x2^2*x5^37 + x2*x3^9*x4^2*x5^30 + -x2*x3^9*x4^2*x5^24 + -x2*x3^9*x4*x5^25 + x2*x3^9*x4*x5^24 + -x2*x3^9*x5^30 + x2*x3^9*x5^25 + x2*x3^6*x4^4*x5^30 + -x2*x3^6*x4^4*x5^24 + -x2*x3^6*x4^2*x5^30 + x2*x3^6*x4^2*x5^24 + -x2*x3^5*x4*x5^30 + x2*x3^5*x4*x5^25 + x2*x3^5*x5^30 + -x2*x3^5*x5^25 + x2*x3^4*x4^4*x5^35 + -x2*x3^4*x4^4*x5^30 + x2*x3^4*x4^3*x5^43 + -x2*x3^4*x4^3*x5^35 + -x2*x3^4*x4*x5^43 + x2*x3^4*x4*x5^30 + x2*x3^3*x4^4*x5^42 + -x2*x3^3*x4^4*x5^35 + -x2*x3^3*x4^3*x5^42 + x2*x3^3*x4^3*x5^35 + -x2*x3*x4^4*x5^42 + x2*x3*x4^4*x5^24 + -x2*x3*x4^3*x5^43 + x2*x3*x4^3*x5^42 + x2*x3*x4*x5^43 + -x2*x3*x4*x5^24 + -x3^9*x4^2*x5^30 + x3^9*x4^2 + x3^9*x5^30 + -x3^9 + -x3^6*x4^6*x5^5 + x3^6*x4^6 + -x3^6*x4^4*x5^30 + x3^6*x4^4*x5^5 + x3^6*x4^2*x5^30 + -x3^6*x4^2 + -x3^4*x4^4*x5^35 + x3^4*x4^4*x5^30 + -x3^4*x4^3*x5^43 + x3^4*x4^3*x5^35 + x3^4*x5^43 + -x3^4*x5^30 + -x3^3*x4^4*x5^42 + x3^3*x4^4*x5^35 + x3^3*x4^3*x5^42 + -x3^3*x4^3*x5^35 + x4^6*x5^5 + -x4^6 + x4^4*x5^42 + -x4^4*x5^5 + x4^3*x5^43 + -x4^3*x5^42 + -x5^43 + 1; frobby-0.9.5/test/frob/bug3.opt_irr000066400000000000000000000000231401527164200171540ustar00rootroot000000000000001 5 0 1 4 3 43 51 frobby-0.9.5/test/frob/bug3.opt_irr_min000066400000000000000000000000221401527164200200160ustar00rootroot000000000000001 5 0 3 3 6 5 17 frobby-0.9.5/test/frob/bug3.opt_std000066400000000000000000000000211401527164200171500ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug3.opt_std_min000066400000000000000000000000211401527164200200130ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug3.primdecom000066400000000000000000000003401401527164200174570ustar00rootroot0000000000000019 5 0 6 0 0 0 0 5 4 0 0 0 5 0 1 31 0 5 0 0 32 0 4 2 0 19 0 3 0 2 0 0 2 7 0 0 0 2 3 4 0 0 2 0 0 37 0 1 5 0 25 0 1 1 1 24 0 0 9 0 0 0 0 6 2 0 0 0 4 0 30 0 0 3 3 35 0 0 0 6 0 0 0 0 4 5 0 0 0 3 42 0 0 0 0 43 frobby-0.9.5/test/frob/bug3.radical000066400000000000000000000000601401527164200170760ustar00rootroot000000000000004 5 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug3.test000066400000000000000000000004721401527164200164650ustar00rootroot0000000000000019 5 -2 1 1 1 24 -2 2 3 4 -19 -2 4 2 -3 19 -2 5 -8 1 31 -2 5 4 0 -24 -1 -5 3 3 35 -1 -2 4 -1 30 -1 -1 -6 3 42 -1 -1 6 2 -13 -1 0 -4 6 -1 -1 1 5 -5 25 -1 2 -5 -1 37 -1 2 7 -2 -18 -1 3 -3 2 -6 -1 5 -4 -5 32 -1 6 -2 -2 -11 0 -4 9 0 -7 0 -3 -1 4 5 0 -1 -2 -3 43 frobby-0.9.5/test/frob/bug3.uni000066400000000000000000000005521401527164200163000ustar00rootroot00000000000000R = QQ[t]; p = t^51 + t^50 + -2*t^49 + -4*t^48 + 2*t^47 + 4*t^46 + 2*t^45 + -6*t^44 + -2*t^43 + 6*t^42 + t^41 + -2*t^40 + -7*t^39 + 8*t^38 + 2*t^37 + -4*t^36 + -3*t^35 + 3*t^34 + -t^32 + 2*t^30 + -2*t^29 + t^28 + t^27 + -t^25 + t^19 + -t^17 + -t^16 + -2*t^14 + -2*t^13 + 2*t^12 + 7*t^11 + 2*t^10 + -4*t^9 + -2*t^6 + -t^5 + 1; frobby-0.9.5/test/frob/bug4.alexdual000066400000000000000000000001061401527164200173000ustar00rootroot000000000000006 5 0 4 3 1 2 0 4 2 4 1 0 3 1 4 2 0 2 3 4 1 0 2 3 3 2 0 1 3 4 2 frobby-0.9.5/test/frob/bug4.assoprimes000066400000000000000000000000171401527164200176670ustar00rootroot000000000000001 5 0 1 1 1 1 frobby-0.9.5/test/frob/bug4.dim000066400000000000000000000000021401527164200162450ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug4.euler000066400000000000000000000000021401527164200166100ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug4.frobInstance000066400000000000000000000000171401527164200201170ustar00rootroot0000000000000017 25 35 32 55 frobby-0.9.5/test/frob/bug4.frobNumber000066400000000000000000000000031401527164200175760ustar00rootroot0000000000000088 frobby-0.9.5/test/frob/bug4.intersection000066400000000000000000000002111401527164200202040ustar00rootroot0000000000000012 5 0 4 0 0 0 0 3 0 1 0 0 3 0 0 1 0 2 1 0 0 0 1 1 0 1 0 1 0 2 0 0 0 3 0 0 0 0 2 0 1 0 0 1 1 0 0 0 0 4 0 0 0 0 1 1 0 0 0 0 2 frobby-0.9.5/test/frob/bug4.irrdecom000066400000000000000000000004401401527164200173060ustar00rootroot000000000000004 5 0 4 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 3 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 1 4 5 0 3 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 2 4 5 0 2 0 0 0 0 0 3 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 1 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 2 4 5 0 1 0 0 0 0 0 1 0 0 0 0 0 4 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug4.irrdecom_ideal000066400000000000000000000001061401527164200204430ustar00rootroot000000000000006 5 0 4 1 1 1 0 3 1 2 1 0 3 1 1 2 0 2 3 1 1 0 1 2 1 2 0 1 1 4 1 frobby-0.9.5/test/frob/bug4.maxstandard000066400000000000000000000000041401527164200200040ustar00rootroot000000000000000 5 frobby-0.9.5/test/frob/bug4.minimize000066400000000000000000000002111401527164200173170ustar00rootroot0000000000000012 5 0 4 0 0 0 0 3 0 1 0 0 3 0 0 1 0 2 1 0 0 0 1 1 0 1 0 1 0 2 0 0 0 3 0 0 0 0 2 0 1 0 0 1 1 0 0 0 0 4 0 0 0 0 1 1 0 0 0 0 2 frobby-0.9.5/test/frob/bug4.multi000066400000000000000000000016401401527164200166370ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5]; p = x2^4*x3*x4*x5 + -x2^4*x3*x4 + -x2^4*x3*x5 + x2^4*x3 + -x2^4*x4*x5 + x2^4*x4 + x2^4*x5 + -x2^4 + x2^3*x3*x4^2*x5 + -x2^3*x3*x4^2 + x2^3*x3*x4*x5^2 + -2*x2^3*x3*x4*x5 + x2^3*x3*x4 + -x2^3*x3*x5^2 + x2^3*x3*x5 + -x2^3*x4^2*x5 + x2^3*x4^2 + -x2^3*x4*x5^2 + 2*x2^3*x4*x5 + -x2^3*x4 + x2^3*x5^2 + -x2^3*x5 + x2^2*x3^3*x4*x5 + -x2^2*x3^3*x4 + -x2^2*x3^3*x5 + x2^2*x3^3 + -x2^2*x3*x4*x5 + x2^2*x3*x4 + x2^2*x3*x5 + -x2^2*x3 + x2*x3^2*x4*x5^2 + -x2*x3^2*x4*x5 + -x2*x3^2*x5^2 + x2*x3^2*x5 + x2*x3*x4^4*x5 + -x2*x3*x4^4 + -x2*x3*x4^2*x5 + x2*x3*x4^2 + -x2*x3*x4*x5^2 + x2*x3*x4*x5 + x2*x3*x5^2 + -x2*x3*x5 + -x2*x4^4*x5 + x2*x4^4 + x2*x4^2*x5 + -x2*x4^2 + -x3^3*x4*x5 + x3^3*x4 + x3^3*x5 + -x3^3 + -x3^2*x4*x5^2 + x3^2*x4*x5 + x3^2*x5^2 + -x3^2*x5 + -x3*x4^4*x5 + x3*x4^4 + x3*x4*x5 + -x3*x4 + x4^4*x5 + -x4^4 + x4*x5^2 + -x4*x5 + -x5^2 + 1; frobby-0.9.5/test/frob/bug4.opt_irr000066400000000000000000000000751401527164200171640ustar00rootroot000000000000005 5 0 4 1 1 1 0 3 1 2 1 0 3 1 1 2 0 2 3 1 1 0 1 1 4 1 7 frobby-0.9.5/test/frob/bug4.opt_irr_min000066400000000000000000000000211401527164200200160ustar00rootroot000000000000001 5 0 1 2 1 2 6 frobby-0.9.5/test/frob/bug4.opt_std000066400000000000000000000000211401527164200171510ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug4.opt_std_min000066400000000000000000000000211401527164200200140ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug4.primdecom000066400000000000000000000002111401527164200174550ustar00rootroot0000000000000012 5 0 4 0 0 0 0 3 0 1 0 0 3 0 0 1 0 2 1 0 0 0 1 1 0 1 0 1 0 2 0 0 0 3 0 0 0 0 2 0 1 0 0 1 1 0 0 0 0 4 0 0 0 0 1 1 0 0 0 0 2 frobby-0.9.5/test/frob/bug4.radical000066400000000000000000000000601401527164200170770ustar00rootroot000000000000004 5 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug4.test000066400000000000000000000003051401527164200164610ustar00rootroot0000000000000012 5 -5 -1 0 0 2 -5 2 1 0 0 -4 -1 -1 4 0 -4 -1 2 -1 1 -4 4 0 -1 0 -3 1 1 -2 1 -2 1 0 2 -1 -2 3 0 -3 1 -1 -2 1 1 0 -1 0 -2 1 1 -1 3 -1 1 -1 0 -2 3 0 -1 frobby-0.9.5/test/frob/bug4.uni000066400000000000000000000001151401527164200162740ustar00rootroot00000000000000R = QQ[t]; p = 5*t^7 + -13*t^6 + 6*t^5 + 7*t^4 + -3*t^3 + -3*t^2 + 1; frobby-0.9.5/test/frob/bug5.alexdual000066400000000000000000000000151401527164200173000ustar00rootroot000000000000001 4 0 1 1 1 frobby-0.9.5/test/frob/bug5.assoprimes000066400000000000000000000000151401527164200176660ustar00rootroot000000000000001 4 0 1 1 1 frobby-0.9.5/test/frob/bug5.dim000066400000000000000000000000021401527164200162460ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug5.euler000066400000000000000000000000031401527164200166120ustar00rootroot00000000000000-1 frobby-0.9.5/test/frob/bug5.frobInstance000066400000000000000000000000121401527164200201130ustar00rootroot000000000000002 3 10 44 frobby-0.9.5/test/frob/bug5.frobNumber000066400000000000000000000000021401527164200175760ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug5.intersection000066400000000000000000000000371401527164200202130ustar00rootroot000000000000003 4 0 2 0 0 0 0 1 0 0 0 0 1 frobby-0.9.5/test/frob/bug5.irrdecom000066400000000000000000000000371401527164200173110ustar00rootroot000000000000003 4 0 2 0 0 0 0 1 0 0 0 0 1 frobby-0.9.5/test/frob/bug5.irrdecom_ideal000066400000000000000000000000151401527164200204430ustar00rootroot000000000000001 4 0 2 1 1 frobby-0.9.5/test/frob/bug5.maxstandard000066400000000000000000000000041401527164200200050ustar00rootroot000000000000000 4 frobby-0.9.5/test/frob/bug5.minimize000066400000000000000000000000371401527164200173260ustar00rootroot000000000000003 4 0 2 0 0 0 0 1 0 0 0 0 1 frobby-0.9.5/test/frob/bug5.multi000066400000000000000000000001451401527164200166370ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; p = -x2^2*x3*x4 + x2^2*x3 + x2^2*x4 + -x2^2 + x3*x4 + -x3 + -x4 + 1; frobby-0.9.5/test/frob/bug5.opt_irr000066400000000000000000000000171401527164200171610ustar00rootroot000000000000001 4 0 2 1 1 4 frobby-0.9.5/test/frob/bug5.opt_irr_min000066400000000000000000000000171401527164200200240ustar00rootroot000000000000001 4 0 2 1 1 4 frobby-0.9.5/test/frob/bug5.opt_std000066400000000000000000000000211401527164200171520ustar00rootroot000000000000000 4 no solution. frobby-0.9.5/test/frob/bug5.opt_std_min000066400000000000000000000000211401527164200200150ustar00rootroot000000000000000 4 no solution. frobby-0.9.5/test/frob/bug5.primdecom000066400000000000000000000000371401527164200174640ustar00rootroot000000000000003 4 0 2 0 0 0 0 1 0 0 0 0 1 frobby-0.9.5/test/frob/bug5.radical000066400000000000000000000000371401527164200171040ustar00rootroot000000000000003 4 0 1 0 0 0 0 1 0 0 0 0 1 frobby-0.9.5/test/frob/bug5.test000066400000000000000000000000541401527164200164630ustar00rootroot000000000000003 4 -22 0 0 1 -5 0 1 0 -3 2 0 0 frobby-0.9.5/test/frob/bug5.uni000066400000000000000000000000541401527164200162770ustar00rootroot00000000000000R = QQ[t]; p = -t^4 + 2*t^3 + -2*t + 1; frobby-0.9.5/test/frob/bug6.alexdual000066400000000000000000000000701401527164200173020ustar00rootroot000000000000004 6 0 2 2 2 1 2 0 2 2 1 2 2 0 2 1 2 2 2 0 1 2 2 2 1 frobby-0.9.5/test/frob/bug6.assoprimes000066400000000000000000000000211401527164200176640ustar00rootroot000000000000001 6 0 1 1 1 1 1 frobby-0.9.5/test/frob/bug6.dim000066400000000000000000000000021401527164200162470ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug6.euler000066400000000000000000000000031401527164200166130ustar00rootroot00000000000000-1 frobby-0.9.5/test/frob/bug6.frobInstance000066400000000000000000000000221401527164200201150ustar00rootroot0000000000000012 13 14 15 16 17 frobby-0.9.5/test/frob/bug6.frobNumber000066400000000000000000000000031401527164200176000ustar00rootroot0000000000000035 frobby-0.9.5/test/frob/bug6.intersection000066400000000000000000000002731401527164200202160ustar00rootroot0000000000000014 6 0 2 0 0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 2 0 0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 0 1 0 0 2 0 0 0 2 0 0 0 0 0 1 1 0 0 0 0 1 0 2 0 0 0 0 2 0 0 0 0 0 1 2 0 0 0 0 0 3 frobby-0.9.5/test/frob/bug6.irrdecom000066400000000000000000000004241401527164200173120ustar00rootroot000000000000005 6 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 3 5 6 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 2 5 6 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 2 5 6 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug6.irrdecom_ideal000066400000000000000000000000701401527164200204450ustar00rootroot000000000000004 6 0 2 1 1 1 3 0 1 2 1 1 2 0 1 1 2 1 2 0 1 1 1 2 2 frobby-0.9.5/test/frob/bug6.maxstandard000066400000000000000000000000041401527164200200060ustar00rootroot000000000000000 6 frobby-0.9.5/test/frob/bug6.minimize000066400000000000000000000002731401527164200173310ustar00rootroot0000000000000014 6 0 2 0 0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 2 0 0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 0 1 0 0 2 0 0 0 2 0 0 0 0 0 1 1 0 0 0 0 1 0 2 0 0 0 0 2 0 0 0 0 0 1 2 0 0 0 0 0 3 frobby-0.9.5/test/frob/bug6.multi000066400000000000000000000027321401527164200166440ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6]; p = -x2^2*x3*x4*x5*x6^3 + x2^2*x3*x4*x5 + x2^2*x3*x4*x6^3 + -x2^2*x3*x4 + x2^2*x3*x5*x6^3 + -x2^2*x3*x5 + -x2^2*x3*x6^3 + x2^2*x3 + x2^2*x4*x5*x6^3 + -x2^2*x4*x5 + -x2^2*x4*x6^3 + x2^2*x4 + -x2^2*x5*x6^3 + x2^2*x5 + x2^2*x6^3 + -x2^2 + -x2*x3^2*x4*x5*x6^2 + x2*x3^2*x4*x5 + x2*x3^2*x4*x6^2 + -x2*x3^2*x4 + x2*x3^2*x5*x6^2 + -x2*x3^2*x5 + -x2*x3^2*x6^2 + x2*x3^2 + -x2*x3*x4^2*x5*x6^2 + x2*x3*x4^2*x5 + x2*x3*x4^2*x6^2 + -x2*x3*x4^2 + -x2*x3*x4*x5^2*x6^2 + x2*x3*x4*x5^2 + 3*x2*x3*x4*x5*x6^2 + -3*x2*x3*x4*x5 + -2*x2*x3*x4*x6^2 + 2*x2*x3*x4 + x2*x3*x5^2*x6^2 + -x2*x3*x5^2 + -2*x2*x3*x5*x6^2 + 2*x2*x3*x5 + x2*x3*x6^2 + -x2*x3 + x2*x4^2*x5*x6^2 + -x2*x4^2*x5 + -x2*x4^2*x6^2 + x2*x4^2 + x2*x4*x5^2*x6^2 + -x2*x4*x5^2 + -2*x2*x4*x5*x6^2 + 2*x2*x4*x5 + x2*x4*x6^2 + -x2*x4 + -x2*x5^2*x6^2 + x2*x5^2 + x2*x5*x6^2 + -x2*x5 + x3^2*x4*x5*x6^2 + -x3^2*x4*x5 + -x3^2*x4*x6^2 + x3^2*x4 + -x3^2*x5*x6^2 + x3^2*x5 + x3^2*x6^2 + -x3^2 + x3*x4^2*x5*x6^2 + -x3*x4^2*x5 + -x3*x4^2*x6^2 + x3*x4^2 + x3*x4*x5^2*x6^2 + -x3*x4*x5^2 + x3*x4*x5*x6^3 + -3*x3*x4*x5*x6^2 + 2*x3*x4*x5 + -x3*x4*x6^3 + 2*x3*x4*x6^2 + -x3*x4 + -x3*x5^2*x6^2 + x3*x5^2 + -x3*x5*x6^3 + 2*x3*x5*x6^2 + -x3*x5 + x3*x6^3 + -x3*x6^2 + -x4^2*x5*x6^2 + x4^2*x5 + x4^2*x6^2 + -x4^2 + -x4*x5^2*x6^2 + x4*x5^2 + -x4*x5*x6^3 + 2*x4*x5*x6^2 + -x4*x5 + x4*x6^3 + -x4*x6^2 + x5^2*x6^2 + -x5^2 + x5*x6^3 + -x5*x6^2 + -x6^3 + 1; frobby-0.9.5/test/frob/bug6.opt_irr000066400000000000000000000000231401527164200171570ustar00rootroot000000000000001 6 0 2 1 1 1 3 8 frobby-0.9.5/test/frob/bug6.opt_irr_min000066400000000000000000000000551401527164200200270ustar00rootroot000000000000003 6 0 1 2 1 1 2 0 1 1 2 1 2 0 1 1 1 2 2 7 frobby-0.9.5/test/frob/bug6.opt_std000066400000000000000000000000211401527164200171530ustar00rootroot000000000000000 6 no solution. frobby-0.9.5/test/frob/bug6.opt_std_min000066400000000000000000000000211401527164200200160ustar00rootroot000000000000000 6 no solution. frobby-0.9.5/test/frob/bug6.primdecom000066400000000000000000000002731401527164200174670ustar00rootroot0000000000000014 6 0 2 0 0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 2 0 0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 0 1 0 0 2 0 0 0 2 0 0 0 0 0 1 1 0 0 0 0 1 0 2 0 0 0 0 2 0 0 0 0 0 1 2 0 0 0 0 0 3 frobby-0.9.5/test/frob/bug6.radical000066400000000000000000000001051401527164200171010ustar00rootroot000000000000005 6 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug6.test000066400000000000000000000004171401527164200164670ustar00rootroot0000000000000014 6 -4 0 1 0 0 2 -3 -1 0 1 0 2 -3 0 -1 0 1 2 -3 0 0 -1 0 3 -1 0 1 1 0 -1 -1 0 2 0 -1 0 -1 1 0 0 1 -1 -1 1 0 1 -1 0 -1 1 1 -1 0 0 -1 2 -1 0 0 0 0 -1 0 2 0 -1 0 -1 1 0 1 -1 0 0 -1 1 1 -1 0 0 0 -1 2 -1 frobby-0.9.5/test/frob/bug6.uni000066400000000000000000000001051401527164200162750ustar00rootroot00000000000000R = QQ[t]; p = -t^8 + 10*t^6 + -16*t^5 + 16*t^3 + -10*t^2 + 1; frobby-0.9.5/test/frob/bug7.alexdual000066400000000000000000000001211401527164200173000ustar00rootroot000000000000007 5 0 7 3 1 2 0 6 3 3 2 0 3 2 5 1 0 3 1 5 2 0 2 3 5 1 0 2 2 5 2 0 1 3 5 2 frobby-0.9.5/test/frob/bug7.assoprimes000066400000000000000000000000171401527164200176720ustar00rootroot000000000000001 5 0 1 1 1 1 frobby-0.9.5/test/frob/bug7.dim000066400000000000000000000000021401527164200162500ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug7.euler000066400000000000000000000000021401527164200166130ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug7.frobInstance000066400000000000000000000000171401527164200201220ustar00rootroot0000000000000035 36 43 49 57 frobby-0.9.5/test/frob/bug7.frobNumber000066400000000000000000000000041401527164200176020ustar00rootroot00000000000000209 frobby-0.9.5/test/frob/bug7.intersection000066400000000000000000000002241401527164200202130ustar00rootroot0000000000000013 5 0 7 0 0 0 0 6 1 0 0 0 6 0 0 1 0 5 2 0 0 0 5 1 0 1 0 2 0 1 0 0 1 0 3 0 0 0 3 0 0 0 0 2 0 1 0 0 1 1 0 0 0 0 5 0 0 0 0 1 1 0 0 0 0 2 frobby-0.9.5/test/frob/bug7.irrdecom000066400000000000000000000005201401527164200173100ustar00rootroot000000000000004 5 0 7 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 6 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 6 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 2 4 5 0 5 0 0 0 0 0 3 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 5 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 2 4 5 0 2 0 0 0 0 0 1 0 0 0 0 0 3 0 0 0 0 0 1 4 5 0 1 0 0 0 0 0 1 0 0 0 0 0 5 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug7.irrdecom_ideal000066400000000000000000000001211401527164200204430ustar00rootroot000000000000007 5 0 7 1 1 1 0 6 2 1 1 0 6 1 1 2 0 5 3 1 1 0 5 2 1 2 0 2 1 3 1 0 1 1 5 1 frobby-0.9.5/test/frob/bug7.maxstandard000066400000000000000000000000041401527164200200070ustar00rootroot000000000000000 5 frobby-0.9.5/test/frob/bug7.minimize000066400000000000000000000002241401527164200173260ustar00rootroot0000000000000013 5 0 7 0 0 0 0 6 1 0 0 0 6 0 0 1 0 5 2 0 0 0 5 1 0 1 0 2 0 1 0 0 1 0 3 0 0 0 3 0 0 0 0 2 0 1 0 0 1 1 0 0 0 0 5 0 0 0 0 1 1 0 0 0 0 2 frobby-0.9.5/test/frob/bug7.multi000066400000000000000000000020241401527164200166370ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5]; p = x2^7*x3*x4*x5 + -x2^7*x3*x4 + -x2^7*x3*x5 + x2^7*x3 + -x2^7*x4*x5 + x2^7*x4 + x2^7*x5 + -x2^7 + x2^6*x3^2*x4*x5 + -x2^6*x3^2*x4 + -x2^6*x3^2*x5 + x2^6*x3^2 + x2^6*x3*x4*x5^2 + -2*x2^6*x3*x4*x5 + x2^6*x3*x4 + -x2^6*x3*x5^2 + 2*x2^6*x3*x5 + -x2^6*x3 + -x2^6*x4*x5^2 + x2^6*x4*x5 + x2^6*x5^2 + -x2^6*x5 + x2^5*x3^3*x4*x5 + -x2^5*x3^3*x4 + -x2^5*x3^3*x5 + x2^5*x3^3 + x2^5*x3^2*x4*x5^2 + -2*x2^5*x3^2*x4*x5 + x2^5*x3^2*x4 + -x2^5*x3^2*x5^2 + 2*x2^5*x3^2*x5 + -x2^5*x3^2 + -x2^5*x3*x4*x5^2 + x2^5*x3*x4*x5 + x2^5*x3*x5^2 + -x2^5*x3*x5 + x2^2*x3*x4^3*x5 + -x2^2*x3*x4^3 + -x2^2*x3*x4*x5 + x2^2*x3*x4 + -x2^2*x4^3*x5 + x2^2*x4^3 + x2^2*x4*x5 + -x2^2*x4 + x2*x3*x4^5*x5 + -x2*x3*x4^5 + -x2*x3*x4^3*x5 + x2*x3*x4^3 + -x2*x4^5*x5 + x2*x4^5 + x2*x4^3*x5 + -x2*x4^3 + -x3^3*x4*x5 + x3^3*x4 + x3^3*x5 + -x3^3 + -x3^2*x4*x5^2 + x3^2*x4*x5 + x3^2*x5^2 + -x3^2*x5 + -x3*x4^5*x5 + x3*x4^5 + x3*x4*x5 + -x3*x4 + x4^5*x5 + -x4^5 + x4*x5^2 + -x4*x5 + -x5^2 + 1; frobby-0.9.5/test/frob/bug7.opt_irr000066400000000000000000000000761401527164200171700ustar00rootroot000000000000005 5 0 7 1 1 1 0 6 2 1 1 0 6 1 1 2 0 5 3 1 1 0 5 2 1 2 10 frobby-0.9.5/test/frob/bug7.opt_irr_min000066400000000000000000000000211401527164200200210ustar00rootroot000000000000001 5 0 2 1 3 1 7 frobby-0.9.5/test/frob/bug7.opt_std000066400000000000000000000000211401527164200171540ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug7.opt_std_min000066400000000000000000000000211401527164200200170ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug7.primdecom000066400000000000000000000002241401527164200174640ustar00rootroot0000000000000013 5 0 7 0 0 0 0 6 1 0 0 0 6 0 0 1 0 5 2 0 0 0 5 1 0 1 0 2 0 1 0 0 1 0 3 0 0 0 3 0 0 0 0 2 0 1 0 0 1 1 0 0 0 0 5 0 0 0 0 1 1 0 0 0 0 2 frobby-0.9.5/test/frob/bug7.radical000066400000000000000000000000601401527164200171020ustar00rootroot000000000000004 5 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug7.test000066400000000000000000000003251401527164200164660ustar00rootroot0000000000000013 5 -8 5 1 0 1 -7 0 0 5 0 -6 6 1 -1 0 -5 6 0 -2 1 -4 1 -1 3 0 -3 7 0 -3 0 -2 -1 0 1 1 -2 5 2 -4 0 -1 -3 2 0 1 -1 -1 -1 0 2 -1 0 1 1 -1 -1 2 -2 1 0 0 -2 3 0 -1 frobby-0.9.5/test/frob/bug7.uni000066400000000000000000000001371401527164200163030ustar00rootroot00000000000000R = QQ[t]; p = 5*t^10 + -15*t^9 + 16*t^8 + -7*t^7 + -t^5 + 5*t^4 + -t^3 + -3*t^2 + 1; frobby-0.9.5/test/frob/bug8.alexdual000066400000000000000000000001341401527164200173050ustar00rootroot000000000000008 5 0 4 2 1 3 0 4 1 3 2 0 3 2 4 1 0 3 2 3 2 0 3 2 2 3 0 3 1 3 4 0 2 1 4 4 0 1 2 4 4 frobby-0.9.5/test/frob/bug8.assoprimes000066400000000000000000000000171401527164200176730ustar00rootroot000000000000001 5 0 1 1 1 1 frobby-0.9.5/test/frob/bug8.dim000066400000000000000000000000021401527164200162510ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug8.euler000066400000000000000000000000021401527164200166140ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug8.frobInstance000066400000000000000000000000171401527164200201230ustar00rootroot0000000000000031 34 43 52 58 frobby-0.9.5/test/frob/bug8.frobNumber000066400000000000000000000000041401527164200176030ustar00rootroot00000000000000183 frobby-0.9.5/test/frob/bug8.intersection000066400000000000000000000002241401527164200202140ustar00rootroot0000000000000013 5 0 4 0 0 0 0 3 1 0 0 0 2 0 1 0 0 2 0 0 1 0 1 1 0 1 0 1 0 3 0 0 0 2 0 0 0 0 1 2 0 0 0 1 0 3 0 0 0 4 0 0 0 0 2 2 0 0 0 1 3 0 0 0 0 4 frobby-0.9.5/test/frob/bug8.irrdecom000066400000000000000000000006001401527164200173100ustar00rootroot000000000000004 5 0 4 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 3 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 2 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 1 4 5 0 2 0 0 0 0 0 1 0 0 0 0 0 3 0 0 0 0 0 2 4 5 0 2 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 3 4 5 0 2 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 4 4 5 0 1 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 3 4 5 0 1 0 0 0 0 0 1 0 0 0 0 0 4 0 0 0 0 0 2 frobby-0.9.5/test/frob/bug8.irrdecom_ideal000066400000000000000000000001341401527164200204500ustar00rootroot000000000000008 5 0 4 1 1 1 0 3 2 1 1 0 2 2 2 1 0 2 1 3 2 0 2 1 2 3 0 2 1 1 4 0 1 2 2 3 0 1 1 4 2 frobby-0.9.5/test/frob/bug8.maxstandard000066400000000000000000000000041401527164200200100ustar00rootroot000000000000000 5 frobby-0.9.5/test/frob/bug8.minimize000066400000000000000000000002241401527164200173270ustar00rootroot0000000000000013 5 0 4 0 0 0 0 3 1 0 0 0 2 0 1 0 0 2 0 0 1 0 1 1 0 1 0 1 0 3 0 0 0 2 0 0 0 0 1 2 0 0 0 1 0 3 0 0 0 4 0 0 0 0 2 2 0 0 0 1 3 0 0 0 0 4 frobby-0.9.5/test/frob/bug8.multi000066400000000000000000000022371401527164200166460ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5]; p = x2^4*x3*x4*x5 + -x2^4*x3*x4 + -x2^4*x3*x5 + x2^4*x3 + -x2^4*x4*x5 + x2^4*x4 + x2^4*x5 + -x2^4 + x2^3*x3^2*x4*x5 + -x2^3*x3^2*x4 + -x2^3*x3^2*x5 + x2^3*x3^2 + -x2^3*x3*x4*x5 + x2^3*x3*x4 + x2^3*x3*x5 + -x2^3*x3 + x2^2*x3^2*x4^2*x5 + -x2^2*x3^2*x4^2 + -x2^2*x3^2*x4*x5 + x2^2*x3^2*x4 + x2^2*x3*x4^3*x5^2 + -x2^2*x3*x4^3 + x2^2*x3*x4^2*x5^3 + -x2^2*x3*x4^2*x5^2 + -x2^2*x3*x4^2*x5 + x2^2*x3*x4^2 + x2^2*x3*x4*x5^4 + -x2^2*x3*x4*x5^3 + -x2^2*x3*x5^4 + x2^2*x3*x5 + -x2^2*x4^3*x5^2 + x2^2*x4^3 + -x2^2*x4^2*x5^3 + x2^2*x4^2*x5^2 + -x2^2*x4*x5^4 + x2^2*x4*x5^3 + x2^2*x4*x5 + -x2^2*x4 + x2^2*x5^4 + -x2^2*x5 + x2*x3^2*x4^2*x5^3 + -x2*x3^2*x4^2*x5 + -x2*x3^2*x5^3 + x2*x3^2*x5 + x2*x3*x4^4*x5^2 + -x2*x3*x4^4 + -x2*x3*x4^3*x5^2 + x2*x3*x4^3 + -x2*x3*x4^2*x5^3 + x2*x3*x4^2*x5 + x2*x3*x5^3 + -x2*x3*x5 + -x2*x4^4*x5^2 + x2*x4^4 + x2*x4^3*x5^2 + -x2*x4^3 + -x3^2*x4^2*x5^3 + x3^2*x4^2 + x3^2*x5^3 + -x3^2 + -x3*x4^4*x5^2 + x3*x4^4 + x3*x4^2*x5^2 + -x3*x4^2 + -x3*x4*x5^4 + x3*x4*x5^3 + x3*x5^4 + -x3*x5^3 + x4^4*x5^2 + -x4^4 + x4^2*x5^3 + -x4^2*x5^2 + x4*x5^4 + -x4*x5^3 + -x5^4 + 1; frobby-0.9.5/test/frob/bug8.opt_irr000066400000000000000000000000751401527164200171700ustar00rootroot000000000000005 5 0 2 1 3 2 0 2 1 2 3 0 2 1 1 4 0 1 2 2 3 0 1 1 4 2 8 frobby-0.9.5/test/frob/bug8.opt_irr_min000066400000000000000000000000471401527164200200320ustar00rootroot000000000000003 5 0 4 1 1 1 0 3 2 1 1 0 2 2 2 1 7 frobby-0.9.5/test/frob/bug8.opt_std000066400000000000000000000000211401527164200171550ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug8.opt_std_min000066400000000000000000000000211401527164200200200ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/bug8.primdecom000066400000000000000000000002241401527164200174650ustar00rootroot0000000000000013 5 0 4 0 0 0 0 3 1 0 0 0 2 0 1 0 0 2 0 0 1 0 1 1 0 1 0 1 0 3 0 0 0 2 0 0 0 0 1 2 0 0 0 1 0 3 0 0 0 4 0 0 0 0 2 2 0 0 0 1 3 0 0 0 0 4 frobby-0.9.5/test/frob/bug8.radical000066400000000000000000000000601401527164200171030ustar00rootroot000000000000004 5 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 frobby-0.9.5/test/frob/bug8.test000066400000000000000000000003251401527164200164670ustar00rootroot0000000000000013 5 -7 0 1 0 3 -6 -1 0 2 2 -5 -1 -1 0 4 -4 -3 0 1 3 -3 3 1 -1 0 -3 4 -1 0 0 -2 2 0 1 -1 -1 0 1 2 -2 -1 1 -1 3 -2 -1 1 1 -2 1 -1 2 -1 -1 1 0 -1 0 4 -3 0 -1 2 -1 0 frobby-0.9.5/test/frob/bug8.uni000066400000000000000000000001261401527164200163020ustar00rootroot00000000000000R = QQ[t]; p = 5*t^8 + -8*t^7 + -9*t^6 + 20*t^5 + -4*t^4 + -4*t^3 + -t^2 + 1; frobby-0.9.5/test/frob/bug9.alexdual000066400000000000000000000000371401527164200173100ustar00rootroot000000000000003 4 0 3 1 2 0 2 3 1 0 1 2 2 frobby-0.9.5/test/frob/bug9.assoprimes000066400000000000000000000000151401527164200176720ustar00rootroot000000000000001 4 0 1 1 1 frobby-0.9.5/test/frob/bug9.dim000066400000000000000000000000021401527164200162520ustar00rootroot000000000000001 frobby-0.9.5/test/frob/bug9.euler000066400000000000000000000000031401527164200166160ustar00rootroot00000000000000-1 frobby-0.9.5/test/frob/bug9.frobInstance000066400000000000000000000000131401527164200201200ustar00rootroot000000000000009 15 17 31 frobby-0.9.5/test/frob/bug9.frobNumber000066400000000000000000000000031401527164200176030ustar00rootroot0000000000000038 frobby-0.9.5/test/frob/bug9.intersection000066400000000000000000000000721401527164200202160ustar00rootroot000000000000006 4 0 3 0 0 0 2 0 1 0 1 2 0 0 0 3 0 0 0 1 1 0 0 0 2 frobby-0.9.5/test/frob/bug9.irrdecom000066400000000000000000000001351401527164200173140ustar00rootroot000000000000003 4 0 3 0 0 0 0 2 0 0 0 0 1 3 4 0 2 0 0 0 0 1 0 0 0 0 2 3 4 0 1 0 0 0 0 3 0 0 0 0 1 frobby-0.9.5/test/frob/bug9.irrdecom_ideal000066400000000000000000000000371401527164200204530ustar00rootroot000000000000003 4 0 3 2 1 0 2 1 2 0 1 3 1 frobby-0.9.5/test/frob/bug9.maxstandard000066400000000000000000000000041401527164200200110ustar00rootroot000000000000000 4 frobby-0.9.5/test/frob/bug9.minimize000066400000000000000000000000721401527164200173310ustar00rootroot000000000000006 4 0 3 0 0 0 2 0 1 0 1 2 0 0 0 3 0 0 0 1 1 0 0 0 2 frobby-0.9.5/test/frob/bug9.multi000066400000000000000000000003601401527164200166420ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; p = -x2^3*x3^2*x4 + x2^3*x3^2 + x2^3*x4 + -x2^3 + -x2^2*x3*x4^2 + x2^2*x3*x4 + x2^2*x4^2 + -x2^2*x4 + -x2*x3^3*x4 + x2*x3^3 + x2*x3^2*x4 + -x2*x3^2 + x3^3*x4 + -x3^3 + x3*x4^2 + -x3*x4 + -x4^2 + 1; frobby-0.9.5/test/frob/bug9.opt_irr000066400000000000000000000000171401527164200171650ustar00rootroot000000000000001 4 0 3 2 1 6 frobby-0.9.5/test/frob/bug9.opt_irr_min000066400000000000000000000000301401527164200200230ustar00rootroot000000000000002 4 0 2 1 2 0 1 3 1 5 frobby-0.9.5/test/frob/bug9.opt_std000066400000000000000000000000211401527164200171560ustar00rootroot000000000000000 4 no solution. frobby-0.9.5/test/frob/bug9.opt_std_min000066400000000000000000000000211401527164200200210ustar00rootroot000000000000000 4 no solution. frobby-0.9.5/test/frob/bug9.primdecom000066400000000000000000000000721401527164200174670ustar00rootroot000000000000006 4 0 3 0 0 0 2 0 1 0 1 2 0 0 0 3 0 0 0 1 1 0 0 0 2 frobby-0.9.5/test/frob/bug9.radical000066400000000000000000000000371401527164200171100ustar00rootroot000000000000003 4 0 1 0 0 0 0 1 0 0 0 0 1 frobby-0.9.5/test/frob/bug9.test000066400000000000000000000001221401527164200164630ustar00rootroot000000000000006 4 -5 0 -1 2 -5 3 0 0 -4 -1 3 0 -3 2 -2 1 -2 -2 1 1 -2 1 2 -1 frobby-0.9.5/test/frob/bug9.uni000066400000000000000000000001001401527164200162730ustar00rootroot00000000000000R = QQ[t]; p = -t^6 + -t^5 + 6*t^4 + -3*t^3 + -2*t^2 + 1; frobby-0.9.5/test/frob/makerandom000077500000000000000000000004771401527164200167750ustar00rootroot00000000000000#!/bin/bash ../../$frobby genfrob $* > random 2> /dev/null echo -n "1 " > random.out.mat wc random | sed "s/ *[0-9]* *\([0-9]*\) *.*/\1/" >> random.out.mat cat random >> random.out.mat ../../4ti2/4ti2gmp groebner random.out > /dev/null rm random.out.mat cat random | ../../$frobby frobdyn > random.ref 2> /dev/null frobby-0.9.5/test/frob/runrandomtests000077500000000000000000000002661401527164200177430ustar00rootroot00000000000000#!/bin/bash while true do ./makerandom ./runtest random if [ $? != 0 ] then mv random $1 mv random.out.gro $1.out.gro mv random.ref $1.ref exit 1 fi done frobby-0.9.5/test/frob/test2.alexdual000066400000000000000000000004201401527164200174770ustar00rootroot0000000000000022 5 0 13 6 2 5 0 12 6 9 2 0 12 6 2 6 0 12 6 1 7 0 12 2 8 3 0 12 2 7 4 0 12 2 6 5 0 12 1 9 7 0 11 6 10 1 0 10 7 10 1 0 10 2 10 4 0 9 6 10 2 0 8 7 10 2 0 8 2 10 5 0 7 6 10 3 0 6 7 10 3 0 6 1 10 6 0 5 1 10 7 0 4 6 10 4 0 4 5 10 7 0 2 6 10 5 0 1 6 10 6 frobby-0.9.5/test/frob/test2.assoprimes000066400000000000000000000000171401527164200200670ustar00rootroot000000000000001 5 0 1 1 1 1 frobby-0.9.5/test/frob/test2.dim000066400000000000000000000000021401527164200164450ustar00rootroot000000000000001 frobby-0.9.5/test/frob/test2.euler000066400000000000000000000000021401527164200170100ustar00rootroot000000000000001 frobby-0.9.5/test/frob/test2.frobInstance000066400000000000000000000000271401527164200203200ustar00rootroot00000000000000765 2254 2771 3048 3731frobby-0.9.5/test/frob/test2.frobNumber000066400000000000000000000000061401527164200200010ustar00rootroot0000000000000041906 frobby-0.9.5/test/frob/test2.intersection000066400000000000000000000005241401527164200204130ustar00rootroot0000000000000030 5 0 13 0 0 0 0 12 0 0 2 0 10 4 0 0 0 10 0 0 3 0 9 5 0 0 0 8 4 0 1 0 8 0 0 4 0 7 3 0 4 0 6 4 0 2 0 6 0 0 5 0 5 3 0 5 0 4 4 0 3 0 4 0 0 6 0 3 3 0 6 0 2 4 0 4 0 2 0 1 0 0 1 0 5 2 0 0 9 0 0 0 0 8 2 0 0 0 8 1 1 0 0 8 0 2 0 0 4 5 0 0 0 4 0 5 0 0 0 10 0 0 0 0 9 1 0 0 0 4 3 0 0 0 3 4 0 0 0 2 5 0 0 0 1 6 0 0 0 0 7 frobby-0.9.5/test/frob/test2.irrdecom000066400000000000000000000020451401527164200175110ustar00rootroot000000000000004 5 0 13 0 0 0 0 0 4 0 0 0 0 0 1 0 0 0 0 0 2 4 5 0 12 0 0 0 0 0 4 0 0 0 0 0 1 0 0 0 0 0 3 4 5 0 10 0 0 0 0 0 5 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 10 0 0 0 0 0 4 0 0 0 0 0 1 0 0 0 0 0 4 4 5 0 9 0 0 0 0 0 9 0 0 0 0 0 1 0 0 0 0 0 1 4 5 0 8 0 0 0 0 0 9 0 0 0 0 0 1 0 0 0 0 0 2 4 5 0 8 0 0 0 0 0 3 0 0 0 0 0 1 0 0 0 0 0 5 4 5 0 7 0 0 0 0 0 4 0 0 0 0 0 1 0 0 0 0 0 5 4 5 0 6 0 0 0 0 0 8 0 0 0 0 0 1 0 0 0 0 0 3 4 5 0 6 0 0 0 0 0 3 0 0 0 0 0 1 0 0 0 0 0 6 4 5 0 5 0 0 0 0 0 4 0 0 0 0 0 1 0 0 0 0 0 6 4 5 0 4 0 0 0 0 0 8 0 0 0 0 0 1 0 0 0 0 0 4 4 5 0 4 0 0 0 0 0 3 0 0 0 0 0 1 0 0 0 0 0 7 4 5 0 3 0 0 0 0 0 4 0 0 0 0 0 1 0 0 0 0 0 7 4 5 0 2 0 0 0 0 0 9 0 0 0 0 0 2 0 0 0 0 0 1 4 5 0 2 0 0 0 0 0 8 0 0 0 0 0 5 0 0 0 0 0 3 4 5 0 2 0 0 0 0 0 8 0 0 0 0 0 4 0 0 0 0 0 4 4 5 0 2 0 0 0 0 0 8 0 0 0 0 0 3 0 0 0 0 0 5 4 5 0 2 0 0 0 0 0 4 0 0 0 0 0 10 0 0 0 0 0 1 4 5 0 2 0 0 0 0 0 4 0 0 0 0 0 9 0 0 0 0 0 2 4 5 0 2 0 0 0 0 0 4 0 0 0 0 0 2 0 0 0 0 0 6 4 5 0 1 0 0 0 0 0 4 0 0 0 0 0 9 0 0 0 0 0 3 frobby-0.9.5/test/frob/test2.irrdecom_ideal000066400000000000000000000003741401527164200206520ustar00rootroot0000000000000022 5 0 13 4 1 2 0 12 4 1 3 0 10 5 1 1 0 10 4 1 4 0 9 9 1 1 0 8 9 1 2 0 8 3 1 5 0 7 4 1 5 0 6 8 1 3 0 6 3 1 6 0 5 4 1 6 0 4 8 1 4 0 4 3 1 7 0 3 4 1 7 0 2 9 2 1 0 2 8 5 3 0 2 8 4 4 0 2 8 3 5 0 2 4 10 1 0 2 4 9 2 0 2 4 2 6 0 1 4 9 3 frobby-0.9.5/test/frob/test2.maxstandard000066400000000000000000000000041401527164200202040ustar00rootroot000000000000000 5 frobby-0.9.5/test/frob/test2.minimize000066400000000000000000000005241401527164200175260ustar00rootroot0000000000000030 5 0 13 0 0 0 0 12 0 0 2 0 10 4 0 0 0 10 0 0 3 0 9 5 0 0 0 8 4 0 1 0 8 0 0 4 0 7 3 0 4 0 6 4 0 2 0 6 0 0 5 0 5 3 0 5 0 4 4 0 3 0 4 0 0 6 0 3 3 0 6 0 2 4 0 4 0 2 0 1 0 0 1 0 5 2 0 0 9 0 0 0 0 8 2 0 0 0 8 1 1 0 0 8 0 2 0 0 4 5 0 0 0 4 0 5 0 0 0 10 0 0 0 0 9 1 0 0 0 4 3 0 0 0 3 4 0 0 0 2 5 0 0 0 1 6 0 0 0 0 7 frobby-0.9.5/test/frob/test2.multi000066400000000000000000000072061401527164200170430ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5]; p = x2^13*x3^4*x4*x5^2 + -x2^13*x3^4*x4 + -x2^13*x3^4*x5^2 + x2^13*x3^4 + -x2^13*x4*x5^2 + x2^13*x4 + x2^13*x5^2 + -x2^13 + x2^12*x3^4*x4*x5^3 + -x2^12*x3^4*x4*x5^2 + -x2^12*x3^4*x5^3 + x2^12*x3^4*x5^2 + -x2^12*x4*x5^3 + x2^12*x4*x5^2 + x2^12*x5^3 + -x2^12*x5^2 + x2^10*x3^5*x4*x5 + -x2^10*x3^5*x4 + -x2^10*x3^5*x5 + x2^10*x3^5 + x2^10*x3^4*x4*x5^4 + -x2^10*x3^4*x4*x5^3 + -x2^10*x3^4*x4*x5 + x2^10*x3^4*x4 + -x2^10*x3^4*x5^4 + x2^10*x3^4*x5^3 + x2^10*x3^4*x5 + -x2^10*x3^4 + -x2^10*x4*x5^4 + x2^10*x4*x5^3 + x2^10*x5^4 + -x2^10*x5^3 + x2^9*x3^9*x4*x5 + -x2^9*x3^9*x4 + -x2^9*x3^9*x5 + x2^9*x3^9 + -x2^9*x3^5*x4*x5 + x2^9*x3^5*x4 + x2^9*x3^5*x5 + -x2^9*x3^5 + x2^8*x3^9*x4*x5^2 + -x2^8*x3^9*x4*x5 + -x2^8*x3^9*x5^2 + x2^8*x3^9*x5 + -x2^8*x3^4*x4*x5^2 + x2^8*x3^4*x4*x5 + x2^8*x3^4*x5^2 + -x2^8*x3^4*x5 + x2^8*x3^3*x4*x5^5 + -x2^8*x3^3*x4*x5^4 + -x2^8*x3^3*x5^5 + x2^8*x3^3*x5^4 + -x2^8*x4*x5^5 + x2^8*x4*x5^4 + x2^8*x5^5 + -x2^8*x5^4 + x2^7*x3^4*x4*x5^5 + -x2^7*x3^4*x4*x5^4 + -x2^7*x3^4*x5^5 + x2^7*x3^4*x5^4 + -x2^7*x3^3*x4*x5^5 + x2^7*x3^3*x4*x5^4 + x2^7*x3^3*x5^5 + -x2^7*x3^3*x5^4 + x2^6*x3^8*x4*x5^3 + -x2^6*x3^8*x4*x5^2 + -x2^6*x3^8*x5^3 + x2^6*x3^8*x5^2 + -x2^6*x3^4*x4*x5^3 + x2^6*x3^4*x4*x5^2 + x2^6*x3^4*x5^3 + -x2^6*x3^4*x5^2 + x2^6*x3^3*x4*x5^6 + -x2^6*x3^3*x4*x5^5 + -x2^6*x3^3*x5^6 + x2^6*x3^3*x5^5 + -x2^6*x4*x5^6 + x2^6*x4*x5^5 + x2^6*x5^6 + -x2^6*x5^5 + x2^5*x3^4*x4*x5^6 + -x2^5*x3^4*x4*x5^5 + -x2^5*x3^4*x5^6 + x2^5*x3^4*x5^5 + -x2^5*x3^3*x4*x5^6 + x2^5*x3^3*x4*x5^5 + x2^5*x3^3*x5^6 + -x2^5*x3^3*x5^5 + x2^4*x3^8*x4*x5^4 + -x2^4*x3^8*x4*x5^3 + -x2^4*x3^8*x5^4 + x2^4*x3^8*x5^3 + -x2^4*x3^4*x4*x5^4 + x2^4*x3^4*x4*x5^3 + x2^4*x3^4*x5^4 + -x2^4*x3^4*x5^3 + x2^4*x3^3*x4*x5^7 + -x2^4*x3^3*x4*x5^6 + -x2^4*x3^3*x5^7 + x2^4*x3^3*x5^6 + -x2^4*x4*x5^7 + x2^4*x4*x5^6 + x2^4*x5^7 + -x2^4*x5^6 + x2^3*x3^4*x4*x5^7 + -x2^3*x3^4*x4*x5^6 + -x2^3*x3^4*x5^7 + x2^3*x3^4*x5^6 + -x2^3*x3^3*x4*x5^7 + x2^3*x3^3*x4*x5^6 + x2^3*x3^3*x5^7 + -x2^3*x3^3*x5^6 + x2^2*x3^9*x4^2*x5 + -x2^2*x3^9*x4^2 + -x2^2*x3^9*x4*x5 + x2^2*x3^9*x4 + x2^2*x3^8*x4^5*x5^3 + -x2^2*x3^8*x4^5 + x2^2*x3^8*x4^4*x5^4 + -x2^2*x3^8*x4^4*x5^3 + x2^2*x3^8*x4^3*x5^5 + -x2^2*x3^8*x4^3*x5^4 + -x2^2*x3^8*x4^2*x5 + x2^2*x3^8*x4^2 + -x2^2*x3^8*x4*x5^4 + x2^2*x3^8*x4*x5 + -x2^2*x3^8*x5^5 + x2^2*x3^8*x5^4 + x2^2*x3^4*x4^10*x5 + -x2^2*x3^4*x4^10 + x2^2*x3^4*x4^9*x5^2 + -x2^2*x3^4*x4^9*x5 + -x2^2*x3^4*x4^5*x5^2 + x2^2*x3^4*x4^5 + x2^2*x3^4*x4^2*x5^6 + -x2^2*x3^4*x4^2*x5^5 + -x2^2*x3^4*x4*x5^6 + x2^2*x3^4*x4*x5^4 + x2^2*x3^4*x5^5 + -x2^2*x3^4*x5^4 + -x2^2*x4^10*x5 + x2^2*x4^10 + -x2^2*x4^9*x5^2 + x2^2*x4^9*x5 + -x2^2*x4^5*x5^3 + x2^2*x4^5*x5^2 + -x2^2*x4^4*x5^4 + x2^2*x4^4*x5^3 + -x2^2*x4^3*x5^5 + x2^2*x4^3*x5^4 + -x2^2*x4^2*x5^6 + x2^2*x4^2*x5^5 + x2^2*x4*x5^6 + -x2^2*x4 + x2*x3^4*x4^9*x5^3 + -x2*x3^4*x4^9*x5^2 + -x2*x3^4*x4^5*x5^3 + x2*x3^4*x4^5*x5^2 + -x2*x4^9*x5^3 + x2*x4^9*x5^2 + x2*x4^5*x5^3 + -x2*x4^5*x5^2 + -x3^9*x4^2*x5 + x3^9*x4^2 + -x3^9*x4*x5^2 + x3^9*x4*x5 + x3^9*x5^2 + -x3^9 + -x3^8*x4^5*x5^3 + x3^8*x4^5 + -x3^8*x4^4*x5^4 + x3^8*x4^4*x5^3 + -x3^8*x4^3*x5^5 + x3^8*x4^3*x5^4 + x3^8*x4^2*x5 + -x3^8*x4^2 + x3^8*x4*x5^2 + -x3^8*x4*x5 + x3^8*x5^5 + -x3^8*x5^2 + -x3^4*x4^10*x5 + x3^4*x4^10 + -x3^4*x4^9*x5^3 + x3^4*x4^9*x5 + x3^4*x4^5*x5^3 + -x3^4*x4^5 + -x3^4*x4^2*x5^6 + x3^4*x4^2*x5^5 + -x3^4*x4*x5^7 + x3^4*x4*x5^6 + x3^4*x5^7 + -x3^4*x5^5 + x4^10*x5 + -x4^10 + x4^9*x5^3 + -x4^9*x5 + x4^4*x5^4 + -x4^4*x5^3 + x4^3*x5^5 + -x4^3*x5^4 + x4^2*x5^6 + -x4^2*x5^5 + x4*x5^7 + -x4*x5^6 + -x5^7 + 1; frobby-0.9.5/test/frob/test2.opt_irr000066400000000000000000000000651401527164200173630ustar00rootroot000000000000004 5 0 13 4 1 2 0 12 4 1 3 0 9 9 1 1 0 8 9 1 2 20 frobby-0.9.5/test/frob/test2.opt_irr_min000066400000000000000000000000351401527164200202230ustar00rootroot000000000000002 5 0 2 9 2 1 0 2 4 2 6 14 frobby-0.9.5/test/frob/test2.opt_std000066400000000000000000000000211401527164200173510ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/test2.opt_std_min000066400000000000000000000000211401527164200202140ustar00rootroot000000000000000 5 no solution. frobby-0.9.5/test/frob/test2.primdecom000066400000000000000000000005241401527164200176640ustar00rootroot0000000000000030 5 0 13 0 0 0 0 12 0 0 2 0 10 4 0 0 0 10 0 0 3 0 9 5 0 0 0 8 4 0 1 0 8 0 0 4 0 7 3 0 4 0 6 4 0 2 0 6 0 0 5 0 5 3 0 5 0 4 4 0 3 0 4 0 0 6 0 3 3 0 6 0 2 4 0 4 0 2 0 1 0 0 1 0 5 2 0 0 9 0 0 0 0 8 2 0 0 0 8 1 1 0 0 8 0 2 0 0 4 5 0 0 0 4 0 5 0 0 0 10 0 0 0 0 9 1 0 0 0 4 3 0 0 0 3 4 0 0 0 2 5 0 0 0 1 6 0 0 0 0 7 frobby-0.9.5/test/frob/test2.radical000066400000000000000000000000601401527164200172770ustar00rootroot000000000000004 5 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 frobby-0.9.5/test/frob/test2.test000066400000000000000000000007721401527164200166710ustar00rootroot0000000000000030 5 -51 7 3 0 4 -46 5 3 -1 5 -41 3 3 -2 6 -34 -1 8 2 0 -32 10 4 -3 0 -29 -3 8 1 1 -29 1 -1 5 2 -27 8 4 -4 1 -27 12 -5 0 2 -24 -5 8 0 2 -24 -1 -1 4 3 -22 6 4 -5 2 -22 10 -5 -1 3 -19 -3 -1 3 4 -17 4 4 -6 3 -17 8 -5 -2 4 -14 -5 -1 2 5 -12 2 4 -7 4 -12 6 -5 -3 5 -10 0 9 -2 -3 -9 -7 -1 1 6 -7 -5 -5 10 0 -7 0 4 -8 5 -7 4 -5 -4 6 -5 2 0 1 -1 -4 -9 -1 0 7 -3 9 5 -8 -2 -3 13 -4 -4 -1 -2 -11 4 5 0 -2 -7 -5 9 1 frobby-0.9.5/test/frob/test2.uni000066400000000000000000000002541401527164200165000ustar00rootroot00000000000000R = QQ[t]; p = 4*t^20 + -6*t^19 + 4*t^18 + 5*t^17 + -17*t^16 + 6*t^15 + 3*t^14 + -6*t^13 + 5*t^12 + 12*t^11 + -11*t^10 + 3*t^9 + 3*t^8 + -5*t^7 + -t^3 + 1; frobby-0.9.5/test/frob/test3.alexdual000066400000000000000000000004611401527164200175050ustar00rootroot0000000000000021 6 0 16 8 1 25 1 0 16 8 1 19 2 0 16 8 1 13 3 0 16 8 1 7 4 0 16 8 1 1 5 0 16 7 1 32 2 0 16 6 1 32 3 0 16 5 1 32 4 0 16 4 1 32 5 0 16 1 1 32 6 0 6 8 1 1 8 0 6 1 1 32 8 0 5 8 1 8 8 0 5 2 1 32 8 0 4 8 1 14 8 0 4 3 1 32 8 0 3 8 1 20 8 0 3 4 1 32 8 0 2 8 1 26 8 0 2 5 1 32 8 0 1 6 1 32 8 frobby-0.9.5/test/frob/test3.assoprimes000066400000000000000000000000211401527164200200630ustar00rootroot000000000000001 6 0 1 1 1 1 1 frobby-0.9.5/test/frob/test3.dim000066400000000000000000000000021401527164200164460ustar00rootroot000000000000001 frobby-0.9.5/test/frob/test3.euler000066400000000000000000000000031401527164200170120ustar00rootroot00000000000000-1 frobby-0.9.5/test/frob/test3.frobInstance000066400000000000000000000000321401527164200203150ustar00rootroot000000000000003002 501 703 1102 133 1000frobby-0.9.5/test/frob/test3.frobNumber000066400000000000000000000000051401527164200200010ustar00rootroot000000000000009095 frobby-0.9.5/test/frob/test3.intersection000066400000000000000000000005531401527164200204160ustar00rootroot0000000000000026 6 0 17 0 0 0 0 0 16 3 0 0 0 0 16 0 0 6 0 0 15 4 0 0 0 0 15 0 0 12 0 0 14 5 0 0 0 0 14 0 0 18 0 0 13 6 0 0 0 0 13 0 0 24 0 0 12 7 0 0 0 0 12 0 0 30 0 0 2 0 0 0 2 0 0 8 0 0 0 0 0 5 0 0 4 0 0 4 0 0 5 0 0 3 0 0 6 0 0 2 0 0 7 0 0 1 0 6 0 0 0 1 0 0 8 0 0 0 1 0 0 0 0 0 0 37 0 0 0 0 0 31 5 0 0 0 0 25 6 0 0 0 0 19 7 0 0 0 0 13 8 0 0 0 0 0 9 frobby-0.9.5/test/frob/test3.irrdecom000066400000000000000000000026761401527164200175240ustar00rootroot000000000000005 6 0 17 0 0 0 0 0 0 3 0 0 0 0 0 0 1 0 0 0 0 0 0 6 0 0 0 0 0 0 2 5 6 0 16 0 0 0 0 0 0 4 0 0 0 0 0 0 1 0 0 0 0 0 0 6 0 0 0 0 0 0 2 5 6 0 16 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 12 0 0 0 0 0 0 2 5 6 0 15 0 0 0 0 0 0 5 0 0 0 0 0 0 1 0 0 0 0 0 0 6 0 0 0 0 0 0 2 5 6 0 15 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 18 0 0 0 0 0 0 2 5 6 0 14 0 0 0 0 0 0 6 0 0 0 0 0 0 1 0 0 0 0 0 0 6 0 0 0 0 0 0 2 5 6 0 14 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 24 0 0 0 0 0 0 2 5 6 0 13 0 0 0 0 0 0 7 0 0 0 0 0 0 1 0 0 0 0 0 0 6 0 0 0 0 0 0 2 5 6 0 13 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 30 0 0 0 0 0 0 2 5 6 0 12 0 0 0 0 0 0 8 0 0 0 0 0 0 1 0 0 0 0 0 0 6 0 0 0 0 0 0 2 5 6 0 12 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 37 0 0 0 0 0 0 2 5 6 0 2 0 0 0 0 0 0 8 0 0 0 0 0 0 1 0 0 0 0 0 0 6 0 0 0 0 0 0 4 5 6 0 2 0 0 0 0 0 0 5 0 0 0 0 0 0 1 0 0 0 0 0 0 6 0 0 0 0 0 0 5 5 6 0 2 0 0 0 0 0 0 4 0 0 0 0 0 0 1 0 0 0 0 0 0 6 0 0 0 0 0 0 6 5 6 0 2 0 0 0 0 0 0 3 0 0 0 0 0 0 1 0 0 0 0 0 0 6 0 0 0 0 0 0 7 5 6 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 6 0 0 0 0 0 0 8 5 6 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 37 0 0 0 0 0 0 5 5 6 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 31 0 0 0 0 0 0 6 5 6 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 25 0 0 0 0 0 0 7 5 6 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 19 0 0 0 0 0 0 8 5 6 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 13 0 0 0 0 0 0 9 frobby-0.9.5/test/frob/test3.irrdecom_ideal000066400000000000000000000004531401527164200206510ustar00rootroot0000000000000021 6 0 17 3 1 6 2 0 16 4 1 6 2 0 16 1 1 12 2 0 15 5 1 6 2 0 15 1 1 18 2 0 14 6 1 6 2 0 14 1 1 24 2 0 13 7 1 6 2 0 13 1 1 30 2 0 12 8 1 6 2 0 12 1 1 37 2 0 2 8 1 6 4 0 2 5 1 6 5 0 2 4 1 6 6 0 2 3 1 6 7 0 2 2 1 6 8 0 2 1 1 37 5 0 2 1 1 31 6 0 2 1 1 25 7 0 2 1 1 19 8 0 2 1 1 13 9 frobby-0.9.5/test/frob/test3.maxstandard000066400000000000000000000000041401527164200202050ustar00rootroot000000000000000 6 frobby-0.9.5/test/frob/test3.minimize000066400000000000000000000005531401527164200175310ustar00rootroot0000000000000026 6 0 17 0 0 0 0 0 16 3 0 0 0 0 16 0 0 6 0 0 15 4 0 0 0 0 15 0 0 12 0 0 14 5 0 0 0 0 14 0 0 18 0 0 13 6 0 0 0 0 13 0 0 24 0 0 12 7 0 0 0 0 12 0 0 30 0 0 2 0 0 0 2 0 0 8 0 0 0 0 0 5 0 0 4 0 0 4 0 0 5 0 0 3 0 0 6 0 0 2 0 0 7 0 0 1 0 6 0 0 0 1 0 0 8 0 0 0 1 0 0 0 0 0 0 37 0 0 0 0 0 31 5 0 0 0 0 25 6 0 0 0 0 19 7 0 0 0 0 13 8 0 0 0 0 0 9 frobby-0.9.5/test/frob/test3.multi000066400000000000000000000160551401527164200170460ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6]; p = -x2^17*x3^3*x4*x5^6*x6^2 + x2^17*x3^3*x4*x5^6 + x2^17*x3^3*x4*x6^2 + -x2^17*x3^3*x4 + x2^17*x3^3*x5^6*x6^2 + -x2^17*x3^3*x5^6 + -x2^17*x3^3*x6^2 + x2^17*x3^3 + x2^17*x4*x5^6*x6^2 + -x2^17*x4*x5^6 + -x2^17*x4*x6^2 + x2^17*x4 + -x2^17*x5^6*x6^2 + x2^17*x5^6 + x2^17*x6^2 + -x2^17 + -x2^16*x3^4*x4*x5^6*x6^2 + x2^16*x3^4*x4*x5^6 + x2^16*x3^4*x4*x6^2 + -x2^16*x3^4*x4 + x2^16*x3^4*x5^6*x6^2 + -x2^16*x3^4*x5^6 + -x2^16*x3^4*x6^2 + x2^16*x3^4 + x2^16*x3^3*x4*x5^6*x6^2 + -x2^16*x3^3*x4*x5^6 + -x2^16*x3^3*x4*x6^2 + x2^16*x3^3*x4 + -x2^16*x3^3*x5^6*x6^2 + x2^16*x3^3*x5^6 + x2^16*x3^3*x6^2 + -x2^16*x3^3 + -x2^16*x3*x4*x5^12*x6^2 + x2^16*x3*x4*x5^12 + x2^16*x3*x4*x5^6*x6^2 + -x2^16*x3*x4*x5^6 + x2^16*x3*x5^12*x6^2 + -x2^16*x3*x5^12 + -x2^16*x3*x5^6*x6^2 + x2^16*x3*x5^6 + x2^16*x4*x5^12*x6^2 + -x2^16*x4*x5^12 + -x2^16*x4*x5^6*x6^2 + x2^16*x4*x5^6 + -x2^16*x5^12*x6^2 + x2^16*x5^12 + x2^16*x5^6*x6^2 + -x2^16*x5^6 + -x2^15*x3^5*x4*x5^6*x6^2 + x2^15*x3^5*x4*x5^6 + x2^15*x3^5*x4*x6^2 + -x2^15*x3^5*x4 + x2^15*x3^5*x5^6*x6^2 + -x2^15*x3^5*x5^6 + -x2^15*x3^5*x6^2 + x2^15*x3^5 + x2^15*x3^4*x4*x5^6*x6^2 + -x2^15*x3^4*x4*x5^6 + -x2^15*x3^4*x4*x6^2 + x2^15*x3^4*x4 + -x2^15*x3^4*x5^6*x6^2 + x2^15*x3^4*x5^6 + x2^15*x3^4*x6^2 + -x2^15*x3^4 + -x2^15*x3*x4*x5^18*x6^2 + x2^15*x3*x4*x5^18 + x2^15*x3*x4*x5^12*x6^2 + -x2^15*x3*x4*x5^12 + x2^15*x3*x5^18*x6^2 + -x2^15*x3*x5^18 + -x2^15*x3*x5^12*x6^2 + x2^15*x3*x5^12 + x2^15*x4*x5^18*x6^2 + -x2^15*x4*x5^18 + -x2^15*x4*x5^12*x6^2 + x2^15*x4*x5^12 + -x2^15*x5^18*x6^2 + x2^15*x5^18 + x2^15*x5^12*x6^2 + -x2^15*x5^12 + -x2^14*x3^6*x4*x5^6*x6^2 + x2^14*x3^6*x4*x5^6 + x2^14*x3^6*x4*x6^2 + -x2^14*x3^6*x4 + x2^14*x3^6*x5^6*x6^2 + -x2^14*x3^6*x5^6 + -x2^14*x3^6*x6^2 + x2^14*x3^6 + x2^14*x3^5*x4*x5^6*x6^2 + -x2^14*x3^5*x4*x5^6 + -x2^14*x3^5*x4*x6^2 + x2^14*x3^5*x4 + -x2^14*x3^5*x5^6*x6^2 + x2^14*x3^5*x5^6 + x2^14*x3^5*x6^2 + -x2^14*x3^5 + -x2^14*x3*x4*x5^24*x6^2 + x2^14*x3*x4*x5^24 + x2^14*x3*x4*x5^18*x6^2 + -x2^14*x3*x4*x5^18 + x2^14*x3*x5^24*x6^2 + -x2^14*x3*x5^24 + -x2^14*x3*x5^18*x6^2 + x2^14*x3*x5^18 + x2^14*x4*x5^24*x6^2 + -x2^14*x4*x5^24 + -x2^14*x4*x5^18*x6^2 + x2^14*x4*x5^18 + -x2^14*x5^24*x6^2 + x2^14*x5^24 + x2^14*x5^18*x6^2 + -x2^14*x5^18 + -x2^13*x3^7*x4*x5^6*x6^2 + x2^13*x3^7*x4*x5^6 + x2^13*x3^7*x4*x6^2 + -x2^13*x3^7*x4 + x2^13*x3^7*x5^6*x6^2 + -x2^13*x3^7*x5^6 + -x2^13*x3^7*x6^2 + x2^13*x3^7 + x2^13*x3^6*x4*x5^6*x6^2 + -x2^13*x3^6*x4*x5^6 + -x2^13*x3^6*x4*x6^2 + x2^13*x3^6*x4 + -x2^13*x3^6*x5^6*x6^2 + x2^13*x3^6*x5^6 + x2^13*x3^6*x6^2 + -x2^13*x3^6 + -x2^13*x3*x4*x5^30*x6^2 + x2^13*x3*x4*x5^30 + x2^13*x3*x4*x5^24*x6^2 + -x2^13*x3*x4*x5^24 + x2^13*x3*x5^30*x6^2 + -x2^13*x3*x5^30 + -x2^13*x3*x5^24*x6^2 + x2^13*x3*x5^24 + x2^13*x4*x5^30*x6^2 + -x2^13*x4*x5^30 + -x2^13*x4*x5^24*x6^2 + x2^13*x4*x5^24 + -x2^13*x5^30*x6^2 + x2^13*x5^30 + x2^13*x5^24*x6^2 + -x2^13*x5^24 + -x2^12*x3^8*x4*x5^6*x6^2 + x2^12*x3^8*x4*x5^6 + x2^12*x3^8*x4*x6^2 + -x2^12*x3^8*x4 + x2^12*x3^8*x5^6*x6^2 + -x2^12*x3^8*x5^6 + -x2^12*x3^8*x6^2 + x2^12*x3^8 + x2^12*x3^7*x4*x5^6*x6^2 + -x2^12*x3^7*x4*x5^6 + -x2^12*x3^7*x4*x6^2 + x2^12*x3^7*x4 + -x2^12*x3^7*x5^6*x6^2 + x2^12*x3^7*x5^6 + x2^12*x3^7*x6^2 + -x2^12*x3^7 + -x2^12*x3*x4*x5^37*x6^2 + x2^12*x3*x4*x5^37 + x2^12*x3*x4*x5^30*x6^2 + -x2^12*x3*x4*x5^30 + x2^12*x3*x5^37*x6^2 + -x2^12*x3*x5^37 + -x2^12*x3*x5^30*x6^2 + x2^12*x3*x5^30 + x2^12*x4*x5^37*x6^2 + -x2^12*x4*x5^37 + -x2^12*x4*x5^30*x6^2 + x2^12*x4*x5^30 + -x2^12*x5^37*x6^2 + x2^12*x5^37 + x2^12*x5^30*x6^2 + -x2^12*x5^30 + -x2^2*x3^8*x4*x5^6*x6^4 + x2^2*x3^8*x4*x5^6*x6^2 + x2^2*x3^8*x4*x6^4 + -x2^2*x3^8*x4*x6^2 + x2^2*x3^8*x5^6*x6^4 + -x2^2*x3^8*x5^6*x6^2 + -x2^2*x3^8*x6^4 + x2^2*x3^8*x6^2 + -x2^2*x3^5*x4*x5^6*x6^5 + x2^2*x3^5*x4*x5^6*x6^4 + x2^2*x3^5*x4*x6^5 + -x2^2*x3^5*x4*x6^4 + x2^2*x3^5*x5^6*x6^5 + -x2^2*x3^5*x5^6*x6^4 + -x2^2*x3^5*x6^5 + x2^2*x3^5*x6^4 + -x2^2*x3^4*x4*x5^6*x6^6 + x2^2*x3^4*x4*x5^6*x6^5 + x2^2*x3^4*x4*x6^6 + -x2^2*x3^4*x4*x6^5 + x2^2*x3^4*x5^6*x6^6 + -x2^2*x3^4*x5^6*x6^5 + -x2^2*x3^4*x6^6 + x2^2*x3^4*x6^5 + -x2^2*x3^3*x4*x5^6*x6^7 + x2^2*x3^3*x4*x5^6*x6^6 + x2^2*x3^3*x4*x6^7 + -x2^2*x3^3*x4*x6^6 + x2^2*x3^3*x5^6*x6^7 + -x2^2*x3^3*x5^6*x6^6 + -x2^2*x3^3*x6^7 + x2^2*x3^3*x6^6 + -x2^2*x3^2*x4*x5^6*x6^8 + x2^2*x3^2*x4*x5^6*x6^7 + x2^2*x3^2*x4*x6^8 + -x2^2*x3^2*x4*x6^7 + x2^2*x3^2*x5^6*x6^8 + -x2^2*x3^2*x5^6*x6^7 + -x2^2*x3^2*x6^8 + x2^2*x3^2*x6^7 + -x2^2*x3*x4*x5^37*x6^5 + x2^2*x3*x4*x5^37*x6^2 + -x2^2*x3*x4*x5^31*x6^6 + x2^2*x3*x4*x5^31*x6^5 + -x2^2*x3*x4*x5^25*x6^7 + x2^2*x3*x4*x5^25*x6^6 + -x2^2*x3*x4*x5^19*x6^8 + x2^2*x3*x4*x5^19*x6^7 + -x2^2*x3*x4*x5^13*x6^9 + x2^2*x3*x4*x5^13*x6^8 + x2^2*x3*x4*x5^6*x6^8 + -x2^2*x3*x4*x5^6*x6^2 + x2^2*x3*x4*x6^9 + -x2^2*x3*x4*x6^8 + x2^2*x3*x5^37*x6^5 + -x2^2*x3*x5^37*x6^2 + x2^2*x3*x5^31*x6^6 + -x2^2*x3*x5^31*x6^5 + x2^2*x3*x5^25*x6^7 + -x2^2*x3*x5^25*x6^6 + x2^2*x3*x5^19*x6^8 + -x2^2*x3*x5^19*x6^7 + x2^2*x3*x5^13*x6^9 + -x2^2*x3*x5^13*x6^8 + -x2^2*x3*x5^6*x6^8 + x2^2*x3*x5^6*x6^2 + -x2^2*x3*x6^9 + x2^2*x3*x6^8 + x2^2*x4*x5^37*x6^5 + -x2^2*x4*x5^37*x6^2 + x2^2*x4*x5^31*x6^6 + -x2^2*x4*x5^31*x6^5 + x2^2*x4*x5^25*x6^7 + -x2^2*x4*x5^25*x6^6 + x2^2*x4*x5^19*x6^8 + -x2^2*x4*x5^19*x6^7 + x2^2*x4*x5^13*x6^9 + -x2^2*x4*x5^13*x6^8 + -x2^2*x4*x6^9 + x2^2*x4*x6^2 + -x2^2*x5^37*x6^5 + x2^2*x5^37*x6^2 + -x2^2*x5^31*x6^6 + x2^2*x5^31*x6^5 + -x2^2*x5^25*x6^7 + x2^2*x5^25*x6^6 + -x2^2*x5^19*x6^8 + x2^2*x5^19*x6^7 + -x2^2*x5^13*x6^9 + x2^2*x5^13*x6^8 + x2^2*x6^9 + -x2^2*x6^2 + x3^8*x4*x5^6*x6^4 + -x3^8*x4*x5^6 + -x3^8*x4*x6^4 + x3^8*x4 + -x3^8*x5^6*x6^4 + x3^8*x5^6 + x3^8*x6^4 + -x3^8 + x3^5*x4*x5^6*x6^5 + -x3^5*x4*x5^6*x6^4 + -x3^5*x4*x6^5 + x3^5*x4*x6^4 + -x3^5*x5^6*x6^5 + x3^5*x5^6*x6^4 + x3^5*x6^5 + -x3^5*x6^4 + x3^4*x4*x5^6*x6^6 + -x3^4*x4*x5^6*x6^5 + -x3^4*x4*x6^6 + x3^4*x4*x6^5 + -x3^4*x5^6*x6^6 + x3^4*x5^6*x6^5 + x3^4*x6^6 + -x3^4*x6^5 + x3^3*x4*x5^6*x6^7 + -x3^3*x4*x5^6*x6^6 + -x3^3*x4*x6^7 + x3^3*x4*x6^6 + -x3^3*x5^6*x6^7 + x3^3*x5^6*x6^6 + x3^3*x6^7 + -x3^3*x6^6 + x3^2*x4*x5^6*x6^8 + -x3^2*x4*x5^6*x6^7 + -x3^2*x4*x6^8 + x3^2*x4*x6^7 + -x3^2*x5^6*x6^8 + x3^2*x5^6*x6^7 + x3^2*x6^8 + -x3^2*x6^7 + x3*x4*x5^37*x6^5 + -x3*x4*x5^37 + x3*x4*x5^31*x6^6 + -x3*x4*x5^31*x6^5 + x3*x4*x5^25*x6^7 + -x3*x4*x5^25*x6^6 + x3*x4*x5^19*x6^8 + -x3*x4*x5^19*x6^7 + x3*x4*x5^13*x6^9 + -x3*x4*x5^13*x6^8 + -x3*x4*x5^6*x6^8 + x3*x4*x5^6 + -x3*x4*x6^9 + x3*x4*x6^8 + -x3*x5^37*x6^5 + x3*x5^37 + -x3*x5^31*x6^6 + x3*x5^31*x6^5 + -x3*x5^25*x6^7 + x3*x5^25*x6^6 + -x3*x5^19*x6^8 + x3*x5^19*x6^7 + -x3*x5^13*x6^9 + x3*x5^13*x6^8 + x3*x5^6*x6^8 + -x3*x5^6 + x3*x6^9 + -x3*x6^8 + -x4*x5^37*x6^5 + x4*x5^37 + -x4*x5^31*x6^6 + x4*x5^31*x6^5 + -x4*x5^25*x6^7 + x4*x5^25*x6^6 + -x4*x5^19*x6^8 + x4*x5^19*x6^7 + -x4*x5^13*x6^9 + x4*x5^13*x6^8 + x4*x6^9 + -x4 + x5^37*x6^5 + -x5^37 + x5^31*x6^6 + -x5^31*x6^5 + x5^25*x6^7 + -x5^25*x6^6 + x5^19*x6^8 + -x5^19*x6^7 + x5^13*x6^9 + -x5^13*x6^8 + -x6^9 + 1; frobby-0.9.5/test/frob/test3.opt_irr000066400000000000000000000000261401527164200173610ustar00rootroot000000000000001 6 0 12 1 1 37 2 53 frobby-0.9.5/test/frob/test3.opt_irr_min000066400000000000000000000000731401527164200202260ustar00rootroot000000000000004 6 0 2 5 1 6 5 0 2 4 1 6 6 0 2 3 1 6 7 0 2 2 1 6 8 19 frobby-0.9.5/test/frob/test3.opt_std000066400000000000000000000000211401527164200173520ustar00rootroot000000000000000 6 no solution. frobby-0.9.5/test/frob/test3.opt_std_min000066400000000000000000000000211401527164200202150ustar00rootroot000000000000000 6 no solution. frobby-0.9.5/test/frob/test3.primdecom000066400000000000000000000005531401527164200176670ustar00rootroot0000000000000026 6 0 17 0 0 0 0 0 16 3 0 0 0 0 16 0 0 6 0 0 15 4 0 0 0 0 15 0 0 12 0 0 14 5 0 0 0 0 14 0 0 18 0 0 13 6 0 0 0 0 13 0 0 24 0 0 12 7 0 0 0 0 12 0 0 30 0 0 2 0 0 0 2 0 0 8 0 0 0 0 0 5 0 0 4 0 0 4 0 0 5 0 0 3 0 0 6 0 0 2 0 0 7 0 0 1 0 6 0 0 0 1 0 0 8 0 0 0 1 0 0 0 0 0 0 37 0 0 0 0 0 31 5 0 0 0 0 25 6 0 0 0 0 19 7 0 0 0 0 13 8 0 0 0 0 0 9 frobby-0.9.5/test/frob/test3.radical000066400000000000000000000001051401527164200173000ustar00rootroot000000000000005 6 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 frobby-0.9.5/test/frob/test3.test000066400000000000000000000010061401527164200166610ustar00rootroot0000000000000026 6 -1 2 0 0 0 2 -1 12 0 0 30 -7 -1 12 7 0 -7 -7 -1 13 -1 0 24 -6 -1 13 6 0 -13 -6 -1 14 -2 0 18 -5 -1 14 5 0 -19 -5 -1 15 -3 0 12 -4 -1 15 4 0 -25 -4 -1 16 -4 0 6 -3 -1 16 3 0 -31 -3 -1 17 -5 0 0 -2 0 -15 5 0 0 4 0 -14 -3 0 31 5 0 -14 4 0 -6 5 0 -13 -4 0 25 6 0 -13 3 0 -12 6 0 -12 -5 0 19 7 0 -12 2 0 -18 7 0 -11 -6 0 13 8 0 -11 1 0 -24 8 0 -10 0 0 -30 9 0 -1 1 0 6 -1 0 -1 8 0 -31 -1 0 0 -7 0 37 0 0 0 -1 1 -3 0 frobby-0.9.5/test/frob/test3.uni000066400000000000000000000007021401527164200164770ustar00rootroot00000000000000R = QQ[t]; p = -t^53 + 2*t^52 + -2*t^50 + t^49 + -t^47 + 2*t^46 + -2*t^44 + 2*t^43 + -3*t^42 + 3*t^41 + t^40 + -5*t^39 + 3*t^38 + t^36 + t^35 + -4*t^34 + t^33 + t^32 + t^31 + t^30 + -10*t^29 + 12*t^28 + 3*t^27 + -11*t^26 + 5*t^25 + -3*t^24 + 7*t^23 + -9*t^22 + -3*t^21 + 11*t^20 + -6*t^19 + 8*t^18 + -2*t^17 + -9*t^16 + 5*t^15 + 3*t^13 + -10*t^12 + 2*t^11 + 11*t^10 + -5*t^9 + -t^7 + t^5 + -t^4 + -t + 1; frobby-0.9.5/test/idealFormats/000077500000000000000000000000001401527164200164035ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/null.4ti2000066400000000000000000000000101401527164200200500ustar00rootroot0000000000000042 ring frobby-0.9.5/test/idealFormats/null.canon000066400000000000000000000000001401527164200203630ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/null.cocoa4000066400000000000000000000000351401527164200204450ustar00rootroot00000000000000Use R ::= Q[x]; Names := []; frobby-0.9.5/test/idealFormats/null.count000066400000000000000000000000001401527164200204150ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/null.m2000066400000000000000000000000121401527164200176060ustar00rootroot00000000000000R = QQ[]; frobby-0.9.5/test/idealFormats/null.monos000066400000000000000000000000071401527164200204270ustar00rootroot00000000000000vars ; frobby-0.9.5/test/idealFormats/null.newmonos000066400000000000000000000000131401527164200211360ustar00rootroot00000000000000(lex-order)frobby-0.9.5/test/idealFormats/null.null000066400000000000000000000000001401527164200202370ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/null.singular000066400000000000000000000000511401527164200211170ustar00rootroot00000000000000ring R = 0, (dummy), lp; int noVars = 1; frobby-0.9.5/test/idealFormats/null.test000066400000000000000000000001701401527164200202540ustar00rootroot00000000000000This is an input file intended to be read only by the null input format, which does not actually read any of the input. frobby-0.9.5/test/idealFormats/runtests000077500000000000000000000000451401527164200202170ustar00rootroot00000000000000../testScripts/runtests transform $* frobby-0.9.5/test/idealFormats/t1.4ti2000066400000000000000000000000041401527164200174250ustar00rootroot000000000000000 0 frobby-0.9.5/test/idealFormats/t1.canon000066400000000000000000000000141401527164200177420ustar00rootroot00000000000000vars ; [ ]; frobby-0.9.5/test/idealFormats/t1.cocoa4000066400000000000000000000000541401527164200200200ustar00rootroot00000000000000Use R ::= Q[x]; Names := []; I := Ideal( ); frobby-0.9.5/test/idealFormats/t1.count000066400000000000000000000000021401527164200177710ustar00rootroot000000000000000 frobby-0.9.5/test/idealFormats/t1.m2000066400000000000000000000000421401527164200171630ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/idealFormats/t1.monos000066400000000000000000000000141401527164200177770ustar00rootroot00000000000000vars ; [ ]; frobby-0.9.5/test/idealFormats/t1.newmonos000066400000000000000000000000521401527164200205130ustar00rootroot00000000000000(monomial-ideal-with-order (lex-order) ) frobby-0.9.5/test/idealFormats/t1.null000066400000000000000000000000001401527164200176110ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/t1.singular000066400000000000000000000000671401527164200205000ustar00rootroot00000000000000ring R = 0, (dummy), lp; int noVars = 1; ideal I = 0; frobby-0.9.5/test/idealFormats/t1.test000066400000000000000000000000111401527164200176200ustar00rootroot00000000000000vars;[]; frobby-0.9.5/test/idealFormats/t10.4ti2000066400000000000000000000000051401527164200175060ustar00rootroot0000000000000042 0 frobby-0.9.5/test/idealFormats/t10.canon000066400000000000000000000000051401527164200200220ustar00rootroot0000000000000042 0 frobby-0.9.5/test/idealFormats/t10.cocoa4000066400000000000000000000003231401527164200200770ustar00rootroot00000000000000Use R ::= Q[x]; Names := []; I := Ideal( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ); frobby-0.9.5/test/idealFormats/t10.count000066400000000000000000000000031401527164200200520ustar00rootroot0000000000000042 frobby-0.9.5/test/idealFormats/t10.m2000066400000000000000000000004331401527164200172470ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R, 1_R ); frobby-0.9.5/test/idealFormats/t10.monos000066400000000000000000000002631401527164200200650ustar00rootroot00000000000000vars ; [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; frobby-0.9.5/test/idealFormats/t10.newmonos000066400000000000000000000002501401527164200205730ustar00rootroot00000000000000(monomial-ideal-with-order (lex-order) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) frobby-0.9.5/test/idealFormats/t10.null000066400000000000000000000000001401527164200176710ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/t10.singular000066400000000000000000000003331401527164200205540ustar00rootroot00000000000000ring R = 0, (dummy), lp; int noVars = 1; ideal I = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1; frobby-0.9.5/test/idealFormats/t10.test000066400000000000000000000000051401527164200177030ustar00rootroot0000000000000042 0 frobby-0.9.5/test/idealFormats/t11.4ti2000066400000000000000000000001051401527164200175100ustar00rootroot000000000000000 5 R R1 R2 R3 x 2 5 0 0 0 0 0 1 1 1 1 1 R R1 R2 R3 x 1 1 1 R1 frobby-0.9.5/test/idealFormats/t11.canon000066400000000000000000000002051401527164200200250ustar00rootroot00000000000000R4 = QQ[R, R1, R2, R3, x]; I = monomialIdeal( R*R1*R2*R3*x, 1_R4 ); I = monomialIdeal(0_R4); R = QQ[R1]; I = monomialIdeal( R1 ); frobby-0.9.5/test/idealFormats/t11.cocoa4000066400000000000000000000003561401527164200201060ustar00rootroot00000000000000Use R ::= Q[x[1..5]]; Names := ["R", "R1", "R2", "R3", "x"]; I := Ideal( ); Use R ::= Q[x[1..5]]; Names := ["R", "R1", "R2", "R3", "x"]; I := Ideal( 1, x[1]x[2]x[3]x[4]x[5] ); Use R ::= Q[x[1..1]]; Names := ["R1"]; I := Ideal( x[1] ); frobby-0.9.5/test/idealFormats/t11.count000066400000000000000000000000061401527164200200560ustar00rootroot000000000000000 2 1 frobby-0.9.5/test/idealFormats/t11.m2000066400000000000000000000002051401527164200172450ustar00rootroot00000000000000R4 = QQ[R, R1, R2, R3, x]; I = monomialIdeal(0_R4); I = monomialIdeal( 1_R4, R*R1*R2*R3*x ); R = QQ[R1]; I = monomialIdeal( R1 ); frobby-0.9.5/test/idealFormats/t11.monos000066400000000000000000000001341401527164200200630ustar00rootroot00000000000000vars R, R1, R2, R3, x; [ ]; vars R, R1, R2, R3, x; [ 1, R*R1*R2*R3*x ]; vars R1; [ R1 ]; frobby-0.9.5/test/idealFormats/t11.newmonos000066400000000000000000000002601401527164200205750ustar00rootroot00000000000000(monomial-ideal-with-order (lex-order R R1 R2 R3 x) ) (monomial-ideal-with-order (lex-order R R1 R2 R3 x) 1 R*R1*R2*R3*x ) (monomial-ideal-with-order (lex-order R1) R1 ) frobby-0.9.5/test/idealFormats/t11.null000066400000000000000000000000001401527164200176720ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/t11.singular000066400000000000000000000003101401527164200205500ustar00rootroot00000000000000ring R = 0, (R, R1, R2, R3, x), lp; int noVars = 0; ideal I = 0; ring R = 0, (R, R1, R2, R3, x), lp; int noVars = 0; ideal I = 1, R*R1*R2*R3*x; ring R = 0, (R1), lp; int noVars = 0; ideal I = R1; frobby-0.9.5/test/idealFormats/t11.test000066400000000000000000000002041401527164200177050ustar00rootroot00000000000000R = QQ[R,R1,R2,R3, x]; I = monomialIdeal( 0_R ); I = monomialIdeal( 1_R, R*R1*R2*R3*x ); R = QQ[R1]; I = monomialIdeal( R1 ); frobby-0.9.5/test/idealFormats/t2.4ti2000066400000000000000000000000041401527164200174260ustar00rootroot000000000000001 0 frobby-0.9.5/test/idealFormats/t2.canon000066400000000000000000000000451401527164200177470ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/idealFormats/t2.cocoa4000066400000000000000000000000571401527164200200240ustar00rootroot00000000000000Use R ::= Q[x]; Names := []; I := Ideal( 1 ); frobby-0.9.5/test/idealFormats/t2.count000066400000000000000000000000021401527164200177720ustar00rootroot000000000000001 frobby-0.9.5/test/idealFormats/t2.m2000066400000000000000000000000451401527164200171670ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/idealFormats/t2.monos000066400000000000000000000000171401527164200200030ustar00rootroot00000000000000vars ; [ 1 ]; frobby-0.9.5/test/idealFormats/t2.newmonos000066400000000000000000000000551401527164200205170ustar00rootroot00000000000000(monomial-ideal-with-order (lex-order) 1 ) frobby-0.9.5/test/idealFormats/t2.null000066400000000000000000000000001401527164200176120ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/t2.singular000066400000000000000000000000671401527164200205010ustar00rootroot00000000000000ring R = 0, (dummy), lp; int noVars = 1; ideal I = 1; frobby-0.9.5/test/idealFormats/t2.test000066400000000000000000000001031401527164200176230ustar00rootroot00000000000000R = QQ [ ] ; I= monomialIdeal ( 1 _ R) ; frobby-0.9.5/test/idealFormats/t3.4ti2000066400000000000000000000000471401527164200174360ustar00rootroot0000000000000010 1 2 2 0 0 1 10 0 1 2 2 a frobby-0.9.5/test/idealFormats/t3.canon000066400000000000000000000001741401527164200177530ustar00rootroot00000000000000Use R ::= Q[x[1..1]]; Names := ["a"]; I := Ideal( x[1]^10, x[1]^2, x[1]^2, x[1]^2, x[1]^2, x[1], x[1], 1, 1, 1 ); frobby-0.9.5/test/idealFormats/t3.cocoa4000066400000000000000000000001741401527164200200250ustar00rootroot00000000000000Use R ::= Q[x[1..1]]; Names := ["a"]; I := Ideal( x[1]^2, x[1]^2, 1, 1, x[1], x[1]^10, 1, x[1], x[1]^2, x[1]^2 ); frobby-0.9.5/test/idealFormats/t3.count000066400000000000000000000000031401527164200177740ustar00rootroot0000000000000010 frobby-0.9.5/test/idealFormats/t3.m2000066400000000000000000000001311401527164200171640ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( a^2, a^2, 1_R, 1_R, a, a^10, 1_R, a, a^2, a^2 ); frobby-0.9.5/test/idealFormats/t3.monos000066400000000000000000000000771401527164200200120ustar00rootroot00000000000000vars a; [ a^2, a^2, 1, 1, a, a^10, 1, a, a^2, a^2 ]; frobby-0.9.5/test/idealFormats/t3.newmonos000066400000000000000000000001251401527164200205160ustar00rootroot00000000000000(monomial-ideal-with-order (lex-order a) a^2 a^2 1 1 a a^10 1 a a^2 a^2 ) frobby-0.9.5/test/idealFormats/t3.null000066400000000000000000000000001401527164200176130ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/t3.singular000066400000000000000000000001421401527164200204740ustar00rootroot00000000000000ring R = 0, (a), lp; int noVars = 0; ideal I = a^2, a^2, 1, 1, a, a^10, 1, a, a^2, a^2; frobby-0.9.5/test/idealFormats/t3.test000066400000000000000000000002331401527164200176300ustar00rootroot00000000000000Use R ::= Q [ x [ 1 .. 1 ] ] ; Names := [ "a" ] ;I := Ideal ( x [ 1 ] ^ 2 , x[1]^2, 1, 1, x[1], x[1]^10, 1, x[1], x[1]^2,x[1]^2); frobby-0.9.5/test/idealFormats/t4.4ti2000066400000000000000000000011301401527164200174310ustar00rootroot000000000000007 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 frobby-0.9.5/test/idealFormats/t4.canon000066400000000000000000000004311401527164200177500ustar00rootroot00000000000000ring R = 0, (x1, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x2, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x3, x30, x31, x32, x33, x34, x35, x36, x37, x38, x39, x4, x40, x41, x42, x5, x6, x7, x8, x9), lp; int noVars = 0; ideal I = x1, x15, x2, x42^2, 1, 1, 1; frobby-0.9.5/test/idealFormats/t4.cocoa4000066400000000000000000000005711401527164200200270ustar00rootroot00000000000000Use R ::= Q[x[1..42]]; Names := ["x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", "x18", "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26", "x27", "x28", "x29", "x30", "x31", "x32", "x33", "x34", "x35", "x36", "x37", "x38", "x39", "x40", "x41", "x42"]; I := Ideal( 1, x[1], x[15], x[2], 1, x[42]^2, 1 ); frobby-0.9.5/test/idealFormats/t4.count000066400000000000000000000000021401527164200177740ustar00rootroot000000000000007 frobby-0.9.5/test/idealFormats/t4.m2000066400000000000000000000004201401527164200171660ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42]; I = monomialIdeal( 1_R, x1, x15, x2, 1_R, x42^2, 1_R ); frobby-0.9.5/test/idealFormats/t4.monos000066400000000000000000000003661401527164200200140ustar00rootroot00000000000000vars x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42; [ 1, x1, x15, x2, 1, x42^2, 1 ]; frobby-0.9.5/test/idealFormats/t4.newmonos000066400000000000000000000003461401527164200205240ustar00rootroot00000000000000(monomial-ideal-with-order (lex-order x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 x35 x36 x37 x38 x39 x40 x41 x42) 1 x1 x15 x2 1 x42^2 1 ) frobby-0.9.5/test/idealFormats/t4.null000066400000000000000000000000001401527164200176140ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/t4.singular000066400000000000000000000004311401527164200204760ustar00rootroot00000000000000ring R = 0, (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42), lp; int noVars = 0; ideal I = 1, x1, x15, x2, 1, x42^2, 1; frobby-0.9.5/test/idealFormats/t4.test000066400000000000000000000004631401527164200176360ustar00rootroot00000000000000 ring R = 0 , ( x1 , x2 , x3, x4,x5,x6,x7, x8, x9, x10, x11, x12, x13, x14, x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30, x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42 ) , lp ; int noVars = 0 ; ideal I =1 , x1,x15,x2, 1, x42^2, 1 ; frobby-0.9.5/test/idealFormats/t5.4ti2000066400000000000000000000004221401527164200174350ustar00rootroot000000000000007 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x1 x2 x3 x4 x5 x6 x7 x9 x8 x10 x11 x12 x13 x14 x15 frobby-0.9.5/test/idealFormats/t5.canon000066400000000000000000000004221401527164200177510ustar00rootroot000000000000007 15 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x1 x10 x11 x12 x13 x14 x15 x2 x3 x4 x5 x6 x7 x8 x9 frobby-0.9.5/test/idealFormats/t5.cocoa4000066400000000000000000000002741401527164200200300ustar00rootroot00000000000000Use R ::= Q[x[1..15]]; Names := ["x1", "x2", "x3", "x4", "x5", "x6", "x7", "x9", "x8", "x10", "x11", "x12", "x13", "x14", "x15"]; I := Ideal( 1, x[1], x[15], x[2], 1, x[15]^2, 1 ); frobby-0.9.5/test/idealFormats/t5.count000066400000000000000000000000021401527164200177750ustar00rootroot000000000000007 frobby-0.9.5/test/idealFormats/t5.m2000066400000000000000000000002111401527164200171650ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4, x5, x6, x7, x9, x8, x10, x11, x12, x13, x14, x15]; I = monomialIdeal( 1_R, x1, x15, x2, 1_R, x15^2, 1_R ); frobby-0.9.5/test/idealFormats/t5.monos000066400000000000000000000001571401527164200200130ustar00rootroot00000000000000vars x1, x2, x3, x4, x5, x6, x7, x9, x8, x10, x11, x12, x13, x14, x15; [ 1, x1, x15, x2, 1, x15^2, 1 ]; frobby-0.9.5/test/idealFormats/t5.newmonos000066400000000000000000000001721401527164200205220ustar00rootroot00000000000000(monomial-ideal-with-order (lex-order x1 x2 x3 x4 x5 x6 x7 x9 x8 x10 x11 x12 x13 x14 x15) 1 x1 x15 x2 1 x15^2 1 ) frobby-0.9.5/test/idealFormats/t5.null000066400000000000000000000000001401527164200176150ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/t5.singular000066400000000000000000000002221401527164200204750ustar00rootroot00000000000000ring R = 0, (x1, x2, x3, x4, x5, x6, x7, x9, x8, x10, x11, x12, x13, x14, x15), lp; int noVars = 0; ideal I = 1, x1, x15, x2, 1, x15^2, 1; frobby-0.9.5/test/idealFormats/t5.test000066400000000000000000000005111401527164200176310ustar00rootroot00000000000000 7 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x1 x2 x3 x4 x5 x6 x7 x9 x8 x10 x11 x12 x13 x14 x15 frobby-0.9.5/test/idealFormats/t6.4ti2000066400000000000000000000004721401527164200174430ustar00rootroot000000000000000 0 1 0 0 1 a 1 1 0 a 1 1 1 a 1 1 1 a 0 2 b a 0 2 a b 1 2 0 0 a b 1 2 0 0 b c 2 2 1 1 2 0 a b 2 2 1 1 3 0 a b 2 2 1 1 1 0 a b 3 3 0 0 0 100000000000000000000001 0 0 0 0 42 long longer l_ongestlongest___with_underscores 2 3 100000000000000000000000 0 0 0 0 0 long longer longestlongest frobby-0.9.5/test/idealFormats/t6.canon000066400000000000000000000012161401527164200177540ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); I = monomialIdeal(0_R); R = QQ[a]; I = monomialIdeal( a ); I = monomialIdeal( a ); I = monomialIdeal( 1_R ); I = monomialIdeal(0_R); R = QQ[a, b]; I = monomialIdeal( a^3, a*b ); I = monomialIdeal( a^2, a*b ); I = monomialIdeal( a*b, a ); I = monomialIdeal( 1_R ); I = monomialIdeal(0_R); I = monomialIdeal(0_R); R = QQ[b, c]; I = monomialIdeal( 1_R ); R = QQ[l_ongestlongest___with_underscores, long, longer]; I = monomialIdeal( l_ongestlongest___with_underscores^42, long^100000000000000000000001, 1_R ); R = QQ[long, longer, longestlongest]; I = monomialIdeal( long^100000000000000000000000, 1_R ); frobby-0.9.5/test/idealFormats/t6.cocoa4000066400000000000000000000020351401527164200200260ustar00rootroot00000000000000Use R ::= Q[x]; Names := []; I := Ideal( ); Use R ::= Q[x]; Names := []; I := Ideal( 1 ); Use R ::= Q[x[1..1]]; Names := ["a"]; I := Ideal( ); Use R ::= Q[x[1..1]]; Names := ["a"]; I := Ideal( 1 ); Use R ::= Q[x[1..1]]; Names := ["a"]; I := Ideal( x[1] ); Use R ::= Q[x[1..1]]; Names := ["a"]; I := Ideal( x[1] ); Use R ::= Q[x[1..2]]; Names := ["b", "a"]; I := Ideal( ); Use R ::= Q[x[1..2]]; Names := ["a", "b"]; I := Ideal( ); Use R ::= Q[x[1..2]]; Names := ["a", "b"]; I := Ideal( 1 ); Use R ::= Q[x[1..2]]; Names := ["b", "c"]; I := Ideal( 1 ); Use R ::= Q[x[1..2]]; Names := ["a", "b"]; I := Ideal( x[1]x[2], x[1]^2 ); Use R ::= Q[x[1..2]]; Names := ["a", "b"]; I := Ideal( x[1]x[2], x[1]^3 ); Use R ::= Q[x[1..2]]; Names := ["a", "b"]; I := Ideal( x[1]x[2], x[1] ); Use R ::= Q[x[1..3]]; Names := ["long", "longer", "l_ongestlongest___with_underscores"]; I := Ideal( 1, x[1]^100000000000000000000001, x[3]^42 ); Use R ::= Q[x[1..3]]; Names := ["long", "longer", "longestlongest"]; I := Ideal( x[1]^100000000000000000000000, 1 ); frobby-0.9.5/test/idealFormats/t6.count000066400000000000000000000000361401527164200200050ustar00rootroot000000000000000 1 0 1 1 1 0 0 1 1 2 2 2 3 2 frobby-0.9.5/test/idealFormats/t6.m2000066400000000000000000000012521401527164200171740ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); I = monomialIdeal( 1_R ); R = QQ[a]; I = monomialIdeal(0_R); I = monomialIdeal( 1_R ); I = monomialIdeal( a ); I = monomialIdeal( a ); R = QQ[b, a]; I = monomialIdeal(0_R); R = QQ[a, b]; I = monomialIdeal(0_R); I = monomialIdeal( 1_R ); R = QQ[b, c]; I = monomialIdeal( 1_R ); R = QQ[a, b]; I = monomialIdeal( a*b, a^2 ); I = monomialIdeal( a*b, a^3 ); I = monomialIdeal( a*b, a ); R = QQ[long, longer, l_ongestlongest___with_underscores]; I = monomialIdeal( 1_R, long^100000000000000000000001, l_ongestlongest___with_underscores^42 ); R = QQ[long, longer, longestlongest]; I = monomialIdeal( long^100000000000000000000000, 1_R ); frobby-0.9.5/test/idealFormats/t6.monos000066400000000000000000000006771401527164200200230ustar00rootroot00000000000000vars ; [ ]; vars ; [ 1 ]; vars a; [ ]; vars a; [ 1 ]; vars a; [ a ]; vars a; [ a ]; vars b, a; [ ]; vars a, b; [ ]; vars a, b; [ 1 ]; vars b, c; [ 1 ]; vars a, b; [ a*b, a^2 ]; vars a, b; [ a*b, a^3 ]; vars a, b; [ a*b, a ]; vars long, longer, l_ongestlongest___with_underscores; [ 1, long^100000000000000000000001, l_ongestlongest___with_underscores^42 ]; vars long, longer, longestlongest; [ long^100000000000000000000000, 1 ]; frobby-0.9.5/test/idealFormats/t6.newmonos000066400000000000000000000015751401527164200205330ustar00rootroot00000000000000(monomial-ideal-with-order (lex-order) ) (monomial-ideal-with-order (lex-order) 1 ) (monomial-ideal-with-order (lex-order a) ) (monomial-ideal-with-order (lex-order a) 1 ) (monomial-ideal-with-order (lex-order a) a ) (monomial-ideal-with-order (lex-order a) a ) (monomial-ideal-with-order (lex-order b a) ) (monomial-ideal-with-order (lex-order a b) ) (monomial-ideal-with-order (lex-order a b) 1 ) (monomial-ideal-with-order (lex-order b c) 1 ) (monomial-ideal-with-order (lex-order a b) a*b a^2 ) (monomial-ideal-with-order (lex-order a b) a*b a^3 ) (monomial-ideal-with-order (lex-order a b) a*b a ) (monomial-ideal-with-order (lex-order long longer l_ongestlongest___with_underscores) 1 long^100000000000000000000001 l_ongestlongest___with_underscores^42 ) (monomial-ideal-with-order (lex-order long longer longestlongest) long^100000000000000000000000 1 ) frobby-0.9.5/test/idealFormats/t6.null000066400000000000000000000000001401527164200176160ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/t6.singular000066400000000000000000000017421401527164200205060ustar00rootroot00000000000000ring R = 0, (dummy), lp; int noVars = 1; ideal I = 0; ring R = 0, (dummy), lp; int noVars = 1; ideal I = 1; ring R = 0, (a), lp; int noVars = 0; ideal I = 0; ring R = 0, (a), lp; int noVars = 0; ideal I = 1; ring R = 0, (a), lp; int noVars = 0; ideal I = a; ring R = 0, (a), lp; int noVars = 0; ideal I = a; ring R = 0, (b, a), lp; int noVars = 0; ideal I = 0; ring R = 0, (a, b), lp; int noVars = 0; ideal I = 0; ring R = 0, (a, b), lp; int noVars = 0; ideal I = 1; ring R = 0, (b, c), lp; int noVars = 0; ideal I = 1; ring R = 0, (a, b), lp; int noVars = 0; ideal I = a*b, a^2; ring R = 0, (a, b), lp; int noVars = 0; ideal I = a*b, a^3; ring R = 0, (a, b), lp; int noVars = 0; ideal I = a*b, a; ring R = 0, (long, longer, l_ongestlongest___with_underscores), lp; int noVars = 0; ideal I = 1, long^100000000000000000000001, l_ongestlongest___with_underscores^42; ring R = 0, (long, longer, longestlongest), lp; int noVars = 0; ideal I = long^100000000000000000000000, 1; frobby-0.9.5/test/idealFormats/t6.test000066400000000000000000000015171401527164200176410ustar00rootroot00000000000000 R = QQ[]; I = monomialIdeal ( 0 _ R ) ; R = QQ [ ]; I = monomialIdeal( 1 _ R ); R = QQ[a]; I = monomialIdeal(0_R); R = QQ[a]; I = monomialIdeal( 1_R ); R = QQ[a]; I = monomialIdeal( a ); R = QQ[a]; I = monomialIdeal( a ); R = QQ[b, a]; I = monomialIdeal(0_R); R = QQ[a, b]; I = monomialIdeal(0_R); R = QQ[a, b]; I = monomialIdeal( 1_R ); R = QQ[b, c]; I = monomialIdeal( 1_R ); R = QQ[a, b]; I = monomialIdeal( a*b, a^2 ); R = QQ[a, b]; I = monomialIdeal( a*b, a^3 ); R = QQ[a, b]; I = monomialIdeal( a*b, a ); R = QQ[long, longer, l_ongestlongest___with_underscores]; I = monomialIdeal( 1_R, long ^ 100000000000000000000001, l_ongestlongest___with_underscores^42); R = QQ[long, longer, longestlongest]; I = monomialIdeal( long^100000000000000000000000, 1_R ); frobby-0.9.5/test/idealFormats/t7.4ti2000066400000000000000000000001411401527164200174350ustar00rootroot000000000000007 4 12345678901234567890 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 a A b abe frobby-0.9.5/test/idealFormats/t7.canon000066400000000000000000000001301401527164200177470ustar00rootroot00000000000000vars A, a, abe, b; [ A*a*abe*b, A*a, A, a^12345678901234567890, abe*b, abe, b ]; frobby-0.9.5/test/idealFormats/t7.cocoa4000066400000000000000000000002371401527164200200310ustar00rootroot00000000000000Use R ::= Q[x[1..4]]; Names := ["a", "A", "b", "abe"]; I := Ideal( x[1]^12345678901234567890, x[3], x[2], x[4], x[1]x[2]x[3]x[4], x[1]x[2], x[3]x[4] ); frobby-0.9.5/test/idealFormats/t7.count000066400000000000000000000000021401527164200177770ustar00rootroot000000000000007 frobby-0.9.5/test/idealFormats/t7.m2000066400000000000000000000001541401527164200171750ustar00rootroot00000000000000R = QQ[a, A, b, abe]; I = monomialIdeal( a^12345678901234567890, b, A, abe, a*A*b*abe, a*A, b*abe ); frobby-0.9.5/test/idealFormats/t7.monos000066400000000000000000000001301401527164200200040ustar00rootroot00000000000000vars a, A, b, abe; [ a^12345678901234567890, b, A, abe, a*A*b*abe, a*A, b*abe ]; frobby-0.9.5/test/idealFormats/t7.newmonos000066400000000000000000000001561401527164200205260ustar00rootroot00000000000000(monomial-ideal-with-order (lex-order a A b abe) a^12345678901234567890 b A abe a*A*b*abe a*A b*abe ) frobby-0.9.5/test/idealFormats/t7.null000066400000000000000000000000001401527164200176170ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/t7.singular000066400000000000000000000001731401527164200205040ustar00rootroot00000000000000ring R = 0, (a, A, b, abe), lp; int noVars = 0; ideal I = a^12345678901234567890, b, A, abe, a*A*b*abe, a*A, b*abe; frobby-0.9.5/test/idealFormats/t7.test000066400000000000000000000001621401527164200176350ustar00rootroot00000000000000vars a , A , b , abe ; [ a ^ 12345678901234567890 , b , A,abe,a*A*b*abe,a*A,b*abe] ; frobby-0.9.5/test/idealFormats/t8.4ti2000066400000000000000000000000261401527164200174400ustar00rootroot000000000000001 4 0 0 0 0 a b c d frobby-0.9.5/test/idealFormats/t8.canon000066400000000000000000000000651401527164200177570ustar00rootroot00000000000000(monomial-ideal-with-order (lex-order a b c d) 1 ) frobby-0.9.5/test/idealFormats/t8.cocoa4000066400000000000000000000001071401527164200200260ustar00rootroot00000000000000Use R ::= Q[x[1..4]]; Names := ["a", "b", "c", "d"]; I := Ideal( 1 ); frobby-0.9.5/test/idealFormats/t8.count000066400000000000000000000000021401527164200200000ustar00rootroot000000000000001 frobby-0.9.5/test/idealFormats/t8.m2000066400000000000000000000000571401527164200172000ustar00rootroot00000000000000R = QQ[a, b, c, d]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/idealFormats/t8.monos000066400000000000000000000000311401527164200200050ustar00rootroot00000000000000vars a, b, c, d; [ 1 ]; frobby-0.9.5/test/idealFormats/t8.newmonos000066400000000000000000000000651401527164200205260ustar00rootroot00000000000000(monomial-ideal-with-order (lex-order a b c d) 1 ) frobby-0.9.5/test/idealFormats/t8.null000066400000000000000000000000001401527164200176200ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/t8.singular000066400000000000000000000000741401527164200205050ustar00rootroot00000000000000ring R = 0, (a, b, c, d), lp; int noVars = 0; ideal I = 1; frobby-0.9.5/test/idealFormats/t8.test000066400000000000000000000001141401527164200176330ustar00rootroot00000000000000( monomial-ideal-with-order( lex-order a b c d ) 1) frobby-0.9.5/test/idealFormats/t9.4ti2000066400000000000000000000000221401527164200174350ustar00rootroot0000000000000042 ring c b aa a frobby-0.9.5/test/idealFormats/t9.canon000066400000000000000000000000251401527164200177540ustar00rootroot00000000000000R = QQ[a, aa, b, c]; frobby-0.9.5/test/idealFormats/t9.cocoa4000066400000000000000000000000661401527164200200330ustar00rootroot00000000000000Use R ::= Q[x[1..4]]; Names := ["c", "b", "aa", "a"]; frobby-0.9.5/test/idealFormats/t9.count000066400000000000000000000000001401527164200177770ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/t9.m2000066400000000000000000000000251401527164200171740ustar00rootroot00000000000000R = QQ[c, b, aa, a]; frobby-0.9.5/test/idealFormats/t9.monos000066400000000000000000000000221401527164200200060ustar00rootroot00000000000000vars c, b, aa, a; frobby-0.9.5/test/idealFormats/t9.newmonos000066400000000000000000000000241401527164200205220ustar00rootroot00000000000000(lex-order c b aa a)frobby-0.9.5/test/idealFormats/t9.null000066400000000000000000000000001401527164200176210ustar00rootroot00000000000000frobby-0.9.5/test/idealFormats/t9.singular000066400000000000000000000000571401527164200205070ustar00rootroot00000000000000ring R = 0, (c, b, aa, a), lp; int noVars = 0; frobby-0.9.5/test/idealFormats/t9.test000066400000000000000000000000351401527164200176360ustar00rootroot00000000000000R = QQ [ c , b , aa , a ] ; frobby-0.9.5/test/internal/000077500000000000000000000000001401527164200156055ustar00rootroot00000000000000frobby-0.9.5/test/internal/reference000066400000000000000000000132021401527164200174640ustar00rootroot00000000000000Ideal.IsWeaklyGeneric1: . Ideal.IsWeaklyGeneric2: . LibraryInterface.AlexanderDual.ExplicitPoint: . LibraryInterface.AlexanderDual.ImplicitPoint: . LibraryInterface.AlexanderDual.WholeRing: .... LibraryInterface.AlexanderDual.ZeroIdeal: .... LibraryInterface.AssociatedPrimes.Typical: . LibraryInterface.AssociatedPrimes.WholeRing: .... LibraryInterface.AssociatedPrimes.ZeroIdeal: .... LibraryInterface.DimensionAndCodimension.Typical: .... LibraryInterface.DimensionAndCodimension.WholeRing: .... LibraryInterface.DimensionAndCodimension.ZeroIdeal: .... LibraryInterface.HilbertPoincare.TypicalMultigraded: . LibraryInterface.HilbertPoincare.TypicalUnivariate: . LibraryInterface.HilbertPoincare.WholeRingMultigraded: .... LibraryInterface.HilbertPoincare.WholeRingUnivariate: .... LibraryInterface.HilbertPoincare.ZeroIdealMultigraded: .... LibraryInterface.HilbertPoincare.ZeroIdealUnivariate: .... LibraryInterface.IrreducibleDecom.Typical: . LibraryInterface.IrreducibleDecom.TypicalEncoded: ... LibraryInterface.IrreducibleDecom.WholeRing: .... LibraryInterface.IrreducibleDecom.WholeRingEncoded: ............ LibraryInterface.IrreducibleDecom.ZeroIdeal: .... LibraryInterface.IrreducibleDecom.ZeroIdealEncoded: ........ LibraryInterface.MaxStd.Typical: . LibraryInterface.MaxStd.WholeRing: .... LibraryInterface.MaxStd.ZeroIdeal: .... LibraryInterface.PrimaryDecom.Typical: . LibraryInterface.PrimaryDecom.WholeRing: .... LibraryInterface.PrimaryDecom.ZeroIdeal: .... LibraryInterface.StandardProgram.TypicalNegative: .. LibraryInterface.StandardProgram.TypicalNonNegative: .. LibraryInterface.StandardProgram.WholeRing: ........ LibraryInterface.StandardProgram.ZeroIdeal: ........ Matrix.AddMultiplyRow: ... Matrix.Basic: .......... Matrix.Determinant: .... Matrix.Inverse: .. Matrix.MultiplyRows: . Matrix.NullSpace1: . Matrix.NullSpace2: . Matrix.NullSpace3: . Matrix.Print: . Matrix.Resize: ............. Matrix.RowReduceAndFully1: .. Matrix.RowReduceAndFully2: ... Matrix.RowReduceAndFully3: .. Matrix.RowReduceAndFully4: .. Matrix.Solve1: .. Matrix.Solve2: .. Matrix.Solve3: .. Matrix.SubMatrix: .... Matrix.Swap: .. Matrix.SwapRows: .. Matrix.Transpose: .... RawSquareFreeTerm.Assign: ...... RawSquareFreeTerm.Colon: ........................................................................................................................................................................................................................................................................................................................................................................................ RawSquareFreeTerm.Divides: .................................................................. RawSquareFreeTerm.Gcd: ........................................................................................................................................................................................................................................................................................................................................................................................ RawSquareFreeTerm.HasFullSupport: .................................................................. RawSquareFreeTerm.Invert: .......................................................................................................................................................................................................................................................................................................................................................................................................................................................................... RawSquareFreeTerm.IsIdentity: .................................................................................................................................... RawSquareFreeTerm.IsRelativelyPrime: .................................................................................................................................... RawSquareFreeTerm.IsValid: ......... RawSquareFreeTerm.Lcm: ........................................................................................................................................................................................................................................................................................................................................................................................ RawSquareFreeTerm.SetAndGetExponent: ................................................................................................................................................................................................................................................................ RawSquareFreeTerm.SetToAllVarProd: .................................................................. RawSquareFreeTerm.SetToIdentity: .................................................................. RawSquareFreeTerm.getWordCount: ........ SliceStrategy.OptimizeStrategy.ChangedInWayRelevantToBound: ...... SliceStrategy.OptimizeStrategy.Simplify: .. SliceStrategy.OptimizeStrategy.SimplifyNegativeGrading: ................... SliceStrategy.OptimizeStrategy.SimplifyPositiveGrading: .................... Term.ParseStringConstructor: . Term.ParseStringConstructorNull: . Term.ShareNonZeroExponent: .. TermGrader.getMaxIndexLessThanNegative: .......... TermGrader.getMaxIndexLessThanPositive: ........................ TermGrader.getMaxIndexLessThanZero: ......... TermGrader.getMinIndexLessThanNegative: ........................ TermGrader.getMinIndexLessThanPositive: .............. TermGrader.getMinIndexLessThanZero: ........... TermGrader.getUpperBound: .......... TermTranslator.IdentityConstructor: . frobby-0.9.5/test/internal/runtests000077500000000000000000000003501401527164200174200ustar00rootroot00000000000000#!/usr/bin/env sh frobby=../../bin/frobby if [ "$1" = "_full" ]; then shift; fi $frobby test 2> /dev/null > /dev/null if [ $? = 0 ]; then exit 0; fi echo "*** Internal test failed, rerunning tests with output ***" $frobby test frobby-0.9.5/test/intersect/000077500000000000000000000000001401527164200157715ustar00rootroot00000000000000frobby-0.9.5/test/intersect/t10.intersection000066400000000000000000000000261401527164200210230ustar00rootroot00000000000000vars a, b, c, d; [ ]; frobby-0.9.5/test/intersect/t10.test000066400000000000000000000004211401527164200172730ustar00rootroot00000000000000vars a;[a^2]; vars b;[b^2]; vars c;[c^2]; vars ; [1]; vars a;[a^3]; vars b;[b^4]; vars c;[c^5]; vars ; [1]; vars ; []; vars a; [a]; vars a,b;[a]; vars b,a;[a]; vars b,d; [b]; vars c; [c]; vars ; [1]; vars a; [1]; vars b; [1]; vars a,b; [1]; vars b,c; [1]; frobby-0.9.5/test/intersect/t2.intersection000066400000000000000000000000221401527164200207400ustar00rootroot00000000000000vars a; [ a^4 ]; frobby-0.9.5/test/intersect/t2.test000066400000000000000000000000661401527164200172210ustar00rootroot00000000000000vars a;[a^3]; vars a;[a]; vars a;[a^4]; vars a;[a^2]; frobby-0.9.5/test/intersect/t3.intersection000066400000000000000000000000521401527164200207440ustar00rootroot00000000000000vars a, b, c; [ a^3, a^2*c^3, b*c^3 ]; frobby-0.9.5/test/intersect/t3.test000066400000000000000000000000721401527164200172170ustar00rootroot00000000000000vars b, a, c; [ a^2, b ]; vars c, b, a; [ c^3, a^3 ]; frobby-0.9.5/test/intersect/t4.intersection000066400000000000000000000000271401527164200207470ustar00rootroot00000000000000vars a, b; [ a*b^2 ]; frobby-0.9.5/test/intersect/t4.test000066400000000000000000000000321401527164200172140ustar00rootroot00000000000000vars a;[a]; vars b;[b^2]; frobby-0.9.5/test/intersect/t5.intersection000066400000000000000000000000401401527164200207430ustar00rootroot00000000000000vars a, b, c; [ a^3*b^4*c^5 ]; frobby-0.9.5/test/intersect/t5.test000066400000000000000000000004031401527164200172170ustar00rootroot00000000000000vars a;[a^2]; vars b;[b^2]; vars c;[c^2]; vars ; [1]; vars a;[a^3]; vars b;[b^4]; vars c;[c^5]; vars ; [1]; vars a; [a]; vars a,b;[a]; vars b,a;[a]; vars b; [b]; vars c; [c]; vars ; [1]; vars a; [1]; vars b; [1]; vars a,b; [1]; vars b,c; [1]; frobby-0.9.5/test/intersect/t6.intersection000066400000000000000000000000521401527164200207470ustar00rootroot00000000000000vars a, b, c; [ a^3, a^2*c^3, b*c^3 ]; frobby-0.9.5/test/intersect/t6.test000066400000000000000000000000641401527164200172230ustar00rootroot00000000000000vars b, a; [ a^2, b ]; vars a, c; [ c^3, a^3 ]; frobby-0.9.5/test/irrdecom/000077500000000000000000000000001401527164200155755ustar00rootroot00000000000000frobby-0.9.5/test/irrdecom/makerandom000066400000000000000000000001241401527164200176330ustar00rootroot00000000000000../../$frobby genideal -varCount 8 -genCount 100 -expRange 10 > random 2> /dev/null frobby-0.9.5/test/irrdecom/runrandomtest000066400000000000000000000006701401527164200204300ustar00rootroot00000000000000 ../../$frobby irrdecom -split label < random 2> /dev/null|../../$frobby format -canon > random.label 2> /dev/null ../../$frobby irrdecom -split midart < random 2>/dev/null|../../$frobby format -canon > random.mid 2> /dev/null ../../$frobby irrdecom -slice off < random 2>/dev/null|../../$frobby format -canon -unique > random.old 2> /dev/null diff random.label random.mid if [ $? != 0 ] then exit 1 fi diff random.label random.old frobby-0.9.5/test/irrdecom/runrandomtests000066400000000000000000000002311401527164200206040ustar00rootroot00000000000000while true do ./makerandom ./runrandomtest if [ $? != 0 ] then exit 1 fi rm random random.label random.mid random.old echo -n . done frobby-0.9.5/test/irrdecom/runtest000077500000000000000000000003171401527164200172300ustar00rootroot00000000000000#!/bin/bash testName="$1" shift inputFile="$testName.test" params="$*" outputFile="$testName.irrdecom" ../testhelper irrdecom $inputFile $outputFile $params -encode -canon if [ $? != 0 ]; then exit 1; fi frobby-0.9.5/test/irrdecom/runtests000077500000000000000000000001651401527164200174140ustar00rootroot00000000000000#!/bin/bash for t in `ls -S -r *.test` do ./runtest `basename $t .test` $* if [ $? != 0 ]; then exit 1; fi done frobby-0.9.5/test/irrdecom/t10.irrdecom000066400000000000000000000001261401527164200177260ustar00rootroot00000000000000vars x1, x2, x3, x4, x5; [ x1*x3, x1*x4^2*x5^2, x2*x3*x4^2, x3*x4^2*x5, x3*x4 ]; frobby-0.9.5/test/irrdecom/t10.test000066400000000000000000000001141401527164200170760ustar00rootroot00000000000000vars x1, x2, x3, x4, x5; [ x1*x2*x4*x5, x1*x4^2, x1*x3, x3*x4^2, x3*x5^2 ]; frobby-0.9.5/test/irrdecom/t11.irrdecom000066400000000000000000000001301401527164200177220ustar00rootroot00000000000000vars x1, x2, x3, x4, x5; [ x1*x2*x3, x1*x2*x4^2, x1*x3*x5, x2*x3^2*x4, x3*x4*x5 ]; frobby-0.9.5/test/irrdecom/t11.test000066400000000000000000000001041401527164200170760ustar00rootroot00000000000000vars x1, x2, x3, x4, x5; [ x1*x4, x1*x3^2, x2*x5, x2*x3, x3*x4^2 ]; frobby-0.9.5/test/irrdecom/t12.irrdecom000066400000000000000000000000731401527164200177310ustar00rootroot00000000000000vars x1, x2, x3, x4; [ x1*x2^2, x1*x3, x2*x3, x3*x4 ]; frobby-0.9.5/test/irrdecom/t12.test000066400000000000000000000000631401527164200171030ustar00rootroot00000000000000vars x1, x2, x3, x4; [ x2^2*x3, x1*x2*x4, x1*x3 ]; frobby-0.9.5/test/irrdecom/t13.irrdecom000066400000000000000000000000601401527164200177260ustar00rootroot00000000000000vars x1, x2, x3, x4; [ x1*x2, x1*x3^2, x3 ]; frobby-0.9.5/test/irrdecom/t13.test000066400000000000000000000000461401527164200171050ustar00rootroot00000000000000vars x1,x2,x3,x4; [ x1*x3, x2*x3^2 ]; frobby-0.9.5/test/irrdecom/t14.irrdecom000066400000000000000000000001421401527164200177300ustar00rootroot00000000000000vars x1, x2, x3, x4, x5; [ x1*x3, x1*x4, x1*x5, x2^2*x3*x5^2, x2^2*x4*x5^2, x2^2*x5, x2 ]; frobby-0.9.5/test/irrdecom/t14.test000066400000000000000000000000731401527164200171060ustar00rootroot00000000000000vars x1,x2,x3,x4,x5; [ x2*x3*x4*x5, x1*x2*x5^2, x1*x2^2 ]; frobby-0.9.5/test/irrdecom/t15.irrdecom000066400000000000000000000000561401527164200177350ustar00rootroot00000000000000vars x1, x2, x3, x4; [ x1, x2*x3, x2*x4 ]; frobby-0.9.5/test/irrdecom/t15.test000066400000000000000000000000521401527164200171040ustar00rootroot00000000000000vars x1, x2, x3, x4; [ x1*x3*x4, x1*x2 ]; frobby-0.9.5/test/irrdecom/t16.irrdecom000066400000000000000000000005361401527164200177410ustar00rootroot00000000000000vars x1, x10, x11, x12, x2, x3, x4, x5, x6, x7, x8, x9; [ x1*x10*x5*x6, x1*x10*x6*x9, x1*x11*x12*x5, x1*x12*x4*x5, x1*x12*x5*x6, x1*x12*x9, x1*x3*x5*x6, x1*x3*x6*x9, x11*x12*x2*x5, x11*x12*x5*x7, x11*x12*x5*x8, x12*x2*x4*x5, x12*x2*x5*x6, x12*x2*x9, x12*x4*x5*x7, x12*x4*x5*x8, x12*x5*x6*x7, x12*x5*x6*x8, x12*x7*x9, x12*x8*x9 ]; frobby-0.9.5/test/irrdecom/t16.test000066400000000000000000000001721401527164200171100ustar00rootroot00000000000000vars x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12; [ x5*x9, x4*x6*x9*x11, x1*x2*x7*x8, x3*x10*x12, x6*x12, x1*x12 ]; frobby-0.9.5/test/irrdecom/t17.irrdecom000066400000000000000000000004641401527164200177420ustar00rootroot00000000000000vars x1, x10, x11, x12, x13, x2, x3, x4, x5, x6, x7, x8, x9; [ x1*x11*x13, x1*x11*x4*x8, x1*x11*x5*x8, x1*x12*x13, x1*x12*x4*x8, x1*x12*x5*x8, x1*x13*x3, x1*x13*x7, x1*x3*x4*x8, x1*x3*x5*x8, x1*x7*x8, x10*x13*x7, x10*x7*x8, x13*x2*x7, x13*x6*x7, x13*x7*x9, x2*x7*x8, x6*x7*x8, x7*x8*x9 ]; frobby-0.9.5/test/irrdecom/t17.test000066400000000000000000000001621401527164200171100ustar00rootroot00000000000000vars x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13; [ x3*x7*x11*x12, x8*x13, x1*x2*x6*x9*x10, x1*x7, x4*x5*x7*x13 ]; frobby-0.9.5/test/irrdecom/t18.irrdecom000066400000000000000000000001201401527164200177300ustar00rootroot00000000000000vars a, b, c; [ a^5*b*c, a^4*b*c^8, a^2*b^7*c^3, a^2*b^2*c^4, a*b^7*c^8 ]; frobby-0.9.5/test/irrdecom/t18.test000066400000000000000000000001031401527164200171040ustar00rootroot00000000000000vars a, b, c; [ a^2*b, a*b*c^4, a*b^2*c^3, a^5, a^4*c, b^7, c^8 ]; frobby-0.9.5/test/irrdecom/t25.irrdecom000066400000000000000000000001351401527164200177340ustar00rootroot00000000000000vars x2, x3, x5, x6, x8; [ x2^2*x3, x2^2*x6, x2^2*x8, x2, x3*x5, x5*x6*x8^2, x5*x8 ]; frobby-0.9.5/test/irrdecom/t25.test000066400000000000000000000001051401527164200171040ustar00rootroot00000000000000vars x2, x3, x5, x6, x8; [ x2^2*x3*x8^2, x2^2*x5, x2*x3*x6*x8 ]; frobby-0.9.5/test/irrdecom/t5.irrdecom000066400000000000000000000006221401527164200176530ustar00rootroot00000000000000vars x1, x2, x3, x4, x5, x6; [ x1^50*x2^20*x3^70*x4^500*x5^200*x6^700, x1^50*x2^20*x3^70*x4^100*x5^600*x6^400, x1^50*x2^20*x3^70*x4^100*x5^300*x6^700, x1^10*x2^60*x3^40*x4^500*x5^200*x6^700, x1^10*x2^60*x3^40*x4^100*x5^600*x6^400, x1^10*x2^60*x3^40*x4^100*x5^300*x6^700, x1^10*x2^30*x3^70*x4^500*x5^200*x6^700, x1^10*x2^30*x3^70*x4^100*x5^600*x6^400, x1^10*x2^30*x3^70*x4^100*x5^300*x6^700 ]; frobby-0.9.5/test/irrdecom/t5.test000066400000000000000000000002021401527164200170200ustar00rootroot00000000000000vars x1,x2,x3,x4,x5,x6; [ x1^10*x2^20, x2^30*x3^40, x1^50, x2^60, x3^70, x4^100*x5^200, x5^300*x6^400, x4^500, x5^600, x6^700 ]; frobby-0.9.5/test/irrdecom/t7.irrdecom000066400000000000000000000000711401527164200176530ustar00rootroot00000000000000vars x1, x2, x3, x4, x5; [ x1^2*x2*x3, x1*x2^2*x3^2 ]; frobby-0.9.5/test/irrdecom/t7.test000066400000000000000000000000711401527164200170260ustar00rootroot00000000000000vars x1,x2,x3,x4,x5; [ x1^2, x2^2, x3^2, x1*x2, x1*x3 ]; frobby-0.9.5/test/irrdecom/t8.irrdecom000066400000000000000000000001531401527164200176550ustar00rootroot00000000000000vars x1, x2, x3, x4; [ x1^3*x2^2*x3^2*x4, x1^3*x2^2*x3*x4^2, x1^3*x2*x3^2*x4^2, x1^2*x2^2*x3^2*x4^2 ]; frobby-0.9.5/test/irrdecom/t8.test000066400000000000000000000001001401527164200170200ustar00rootroot00000000000000vars x1, x2, x3, x4; [ x1^3, x2^2, x3^2, x4^2, x1^2*x2*x3*x4 ]; frobby-0.9.5/test/irrdecom/t9.irrdecom000066400000000000000000000000701401527164200176540ustar00rootroot00000000000000vars x1, x2, x3, x4, x5; [ x1^2, x2^2*x3, x2*x3^2 ]; frobby-0.9.5/test/irrdecom/t9.test000066400000000000000000000000731401527164200170320ustar00rootroot00000000000000vars x1,x2,x3,x4,x5; [ x1^2*x2^2, x1^2*x3^2, x1^2*x2*x3 ]; frobby-0.9.5/test/latticeFormats/000077500000000000000000000000001401527164200167525ustar00rootroot00000000000000frobby-0.9.5/test/latticeFormats/runtest000077500000000000000000000005721401527164200204100ustar00rootroot00000000000000#!/bin/bash testhelper=../testScripts/testhelper testName="$1" shift if [ "$1" = "_full" ]; then shift; fi params="$*" $testhelper latformat $testName.4ti2 $testName.fplll \ $params -iformat 4ti2 -oformat fplll if [ $? != 0 ]; then exit 1; fi $testhelper latformat $testName.fplll $testName.4ti2 \ $params -iformat fplll -oformat 4ti2 if [ $? != 0 ]; then exit 1; fi frobby-0.9.5/test/latticeFormats/runtests000077500000000000000000000001651401527164200205710ustar00rootroot00000000000000#!/bin/bash for t in `ls -S -r *.4ti2` do ./runtest `basename $t .4ti2` $* if [ $? != 0 ]; then exit 1; fi done frobby-0.9.5/test/latticeFormats/t1.4ti2000066400000000000000000000000421401527164200177760ustar00rootroot000000000000003 5 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 frobby-0.9.5/test/latticeFormats/t1.fplll000066400000000000000000000000531401527164200203270ustar00rootroot00000000000000[ [0 0 0 0 1] [0 0 0 1 0] [1 0 0 0 0] ] frobby-0.9.5/test/latticeFormats/t2.4ti2000066400000000000000000000004701401527164200200040ustar00rootroot000000000000007 8 -469 7593 -2382 9085 389 923 2462 -5544 11406 -1631 -1088 6135 2829 -1230 -6430 1029 12265 -9722 4923 646 -8665 8110 4951 -5526 -7252 3269 -2720 11420 -12872 46 -7576 8469 -4696 -2010 13766 1818 -1067 13903 -16146 498 9404 13165 2127 -15275 -7927 11643 -4932 -747 -1304 223 -27042 -5841 373 11782 6309 -3026 frobby-0.9.5/test/latticeFormats/t2.fplll000066400000000000000000000005151401527164200203330ustar00rootroot00000000000000[ [-469 7593 -2382 9085 389 923 2462 -5544] [11406 -1631 -1088 6135 2829 -1230 -6430 1029] [12265 -9722 4923 646 -8665 8110 4951 -5526] [-7252 3269 -2720 11420 -12872 46 -7576 8469] [-4696 -2010 13766 1818 -1067 13903 -16146 498] [9404 13165 2127 -15275 -7927 11643 -4932 -747] [-1304 223 -27042 -5841 373 11782 6309 -3026] ] frobby-0.9.5/test/latticeFormats/t3.4ti2000066400000000000000000000000061401527164200200000ustar00rootroot000000000000001 1 0 frobby-0.9.5/test/latticeFormats/t3.fplll000066400000000000000000000000111401527164200203230ustar00rootroot00000000000000[ [0] ] frobby-0.9.5/test/latticeFormats/t4.4ti2000066400000000000000000000000041401527164200177770ustar00rootroot000000000000000 0 frobby-0.9.5/test/latticeFormats/t4.fplll000066400000000000000000000000041401527164200203260ustar00rootroot00000000000000[ ] frobby-0.9.5/test/latticeFormats/t5.4ti2000066400000000000000000000000071401527164200200030ustar00rootroot000000000000003 0 frobby-0.9.5/test/latticeFormats/t5.fplll000066400000000000000000000000201401527164200203250ustar00rootroot00000000000000[ [] [] [] ] frobby-0.9.5/test/messages/000077500000000000000000000000001401527164200156005ustar00rootroot00000000000000frobby-0.9.5/test/messages/4ti2-invalidPoly.err000066400000000000000000000001321401527164200213600ustar00rootroot00000000000000ERROR: A polynomial has at least one column in the matrix,but this matrix has no columns. frobby-0.9.5/test/messages/4ti2-noInteger.err000066400000000000000000000000731401527164200210240ustar00rootroot00000000000000SYNTAX ERROR (format 4ti2, line 2): Expected an integer. frobby-0.9.5/test/messages/action-ambigous.err000066400000000000000000000001121401527164200213650ustar00rootroot00000000000000ERROR: More than one action has prefix "a": alexdual analyze assoprimes frobby-0.9.5/test/messages/action-unknown.err000066400000000000000000000000611401527164200212610ustar00rootroot00000000000000ERROR: No action has the prefix "unknownAction". frobby-0.9.5/test/messages/alexdual-invalidPoint.err000066400000000000000000000001771401527164200225540ustar00rootroot00000000000000ERROR: The specified point to dualize on is not divisible by the least common multiple of the minimal generators of the ideal. frobby-0.9.5/test/messages/cocoa4-doubleVar.err000066400000000000000000000001121401527164200213750ustar00rootroot00000000000000SYNTAX ERROR (format cocoa4, line 1): The variable x is declared twice. frobby-0.9.5/test/messages/cocoa4-doubleVar2.err000066400000000000000000000001331401527164200214620ustar00rootroot00000000000000SYNTAX ERROR (format cocoa4, line 1): The variable x appears twice in the same monomial. frobby-0.9.5/test/messages/cocoa4-negativeExponent.err000066400000000000000000000001361401527164200230030ustar00rootroot00000000000000SYNTAX ERROR (format cocoa4, line 1): Expected integer without preceding sign, but got "-". frobby-0.9.5/test/messages/cocoa4-tooManySigns.err000066400000000000000000000001011401527164200221020ustar00rootroot00000000000000SYNTAX ERROR (format cocoa4, line 1): Too many adjacent signs. frobby-0.9.5/test/messages/cocoa4-unknownVar.err000066400000000000000000000001071401527164200216260ustar00rootroot00000000000000SYNTAX ERROR (format cocoa4, line 1): There is no variable number 2. frobby-0.9.5/test/messages/cocoa4-varSpace1.err000066400000000000000000000001061401527164200213020ustar00rootroot00000000000000SYNTAX ERROR (format cocoa4, line 1): Variable name contains space. frobby-0.9.5/test/messages/cocoa4-varSpace2.err000066400000000000000000000001061401527164200213030ustar00rootroot00000000000000SYNTAX ERROR (format cocoa4, line 1): Variable name contains space. frobby-0.9.5/test/messages/frobgrob-firstPositive.err000066400000000000000000000007601401527164200227670ustar00rootroot00000000000000NOTE: The action frobgrob is DEPRECATED, and will be removed in a future release of Frobby. Use the action optimize with options -chopFirstAndSubtract and -maxStandard instead to get the same effect. NOTE: The split selection strategy "frob" is deprecated and will be removed in a future version of Frobby. Use the name "degree" to achieve the same thing. ERROR: Encountered positive entry as first entry in term. This is impossible if using the required degree reverse lexicographic term order. frobby-0.9.5/test/messages/frobgrob-frobHasOne.err000066400000000000000000000007431401527164200221440ustar00rootroot00000000000000NOTE: The action frobgrob is DEPRECATED, and will be removed in a future release of Frobby. Use the action optimize with options -chopFirstAndSubtract and -maxStandard instead to get the same effect. NOTE: The split selection strategy "frob" is deprecated and will be removed in a future version of Frobby. Use the name "degree" to achieve the same thing. SYNTAX ERROR (line 1): Read the number 1 while reading Frobenius instance. Only integers strictly larger than 1 are valid. frobby-0.9.5/test/messages/frobgrob-frobMismatch.err000066400000000000000000000007721401527164200225360ustar00rootroot00000000000000NOTE: The action frobgrob is DEPRECATED, and will be removed in a future release of Frobby. Use the action optimize with options -chopFirstAndSubtract and -maxStandard instead to get the same effect. NOTE: The split selection strategy "frob" is deprecated and will be removed in a future version of Frobby. Use the name "degree" to achieve the same thing. SYNTAX ERROR (line 2): The Grobner basis has 1 entries, and the Frobenius instance should then also have 1 entries, but in fact it has 2 entries. frobby-0.9.5/test/messages/frobgrob-frobNotPrime.err000066400000000000000000000007341401527164200225240ustar00rootroot00000000000000NOTE: The action frobgrob is DEPRECATED, and will be removed in a future release of Frobby. Use the action optimize with options -chopFirstAndSubtract and -maxStandard instead to get the same effect. NOTE: The split selection strategy "frob" is deprecated and will be removed in a future version of Frobby. Use the name "degree" to achieve the same thing. SYNTAX ERROR (line 2): The numbers in the Frobenius instance are not relatively prime. They are all divisible by 2. frobby-0.9.5/test/messages/frobgrob-noFrob.err000066400000000000000000000006621401527164200213430ustar00rootroot00000000000000NOTE: The action frobgrob is DEPRECATED, and will be removed in a future release of Frobby. Use the action optimize with options -chopFirstAndSubtract and -maxStandard instead to get the same effect. NOTE: The split selection strategy "frob" is deprecated and will be removed in a future version of Frobby. Use the name "degree" to achieve the same thing. SYNTAX ERROR (line 2): Read empty Frobenius instance, which is not allowed. frobby-0.9.5/test/messages/frobgrob-notEnoughColumns.err000066400000000000000000000007311401527164200234220ustar00rootroot00000000000000NOTE: The action frobgrob is DEPRECATED, and will be removed in a future release of Frobby. Use the action optimize with options -chopFirstAndSubtract and -maxStandard instead to get the same effect. NOTE: The split selection strategy "frob" is deprecated and will be removed in a future version of Frobby. Use the name "degree" to achieve the same thing. ERROR: The matrix defining the Frobenius-related Grobner basis must have at least one column, and this one has none. frobby-0.9.5/test/messages/help-alexdual.err000066400000000000000000000040351401527164200210410ustar00rootroot00000000000000Displaying information on action: alexdual Compute the alexander dual of the input monomial ideal. The computation is done using irreducible decomposition, which is why there are a number of options related to that. See the help topic on irrdecom for details. The parameters accepted by alexdual are as follows. -canon [BOOL] (default is off) Sort the output, including the variables, to get a canonical representation. This requires storing the entire output in memory, which can increase run time modestly and increase memory consumption greatly. -debug [BOOL] (default is off) Print what the algorithm does at each step. -iformat STRING (default is autodetect) The format used to read the input. This action supports the formats: 4ti2 cocoa4 m2 monos newmonos null singular. The format "autodetect" instructs Frobby to guess the format. Type 'frobby help io' for more information on input formats. -independence [BOOL] (default is on) Perform independence splits when possible. -minimal [BOOL] (default is off) Specifies that the input ideal is minimally generated by the given generators. Turning this on can improve performance, but if it is not true then Frobby may go into an infinite loop or produce incorrect results. -oformat STRING (default is input) The format used to write the output. This action supports the formats: 4ti2 cocoa4 count m2 monos newmonos null singular. The format "input" instructs Frobby to use the input format. Type 'frobby help io' for more information on output formats. -simplify [BOOL] (default is on) Perform simplification when possible. -split STRING (default is median) The split selection strategy to use. Slice options are maxlabel, minlabel, varlabel, minimum, median, maximum, mingen, indep and gcd. Optimization computations support the specialized strategy degree as well. -stats [BOOL] (default is off) Print statistics on what the algorithm did. -time [BOOL] (default is off) Display and time each subcomputation. frobby-0.9.5/test/messages/help-analyze.err000066400000000000000000000031651401527164200207100ustar00rootroot00000000000000Displaying information on action: analyze Display information about input ideal. This is useful for getting a quick impression of how the ideal looks like, and it can be used in scripts that need information about the ideal. The parameters accepted by analyze are as follows. -genCount [BOOL] (default is off) Print the number of generators. -iformat STRING (default is autodetect) The format used to read the input. This action supports the formats: 4ti2 cocoa4 m2 monos newmonos null singular. The format "autodetect" instructs Frobby to guess the format. Type 'frobby help io' for more information on input formats. -lcm [BOOL] (default is off) Print the least common multiple of the generators. -maxExp [BOOL] (default is off) Print the largest exponent that appears in the input file -minimal [BOOL] (default is off) Print 1 if the ideal has no non-minimal generators. Print 0 otherwise. -oformat STRING (default is input) The format used to write the output. This action supports the formats: 4ti2 cocoa4 count m2 monos newmonos null singular. The format "input" instructs Frobby to use the input format. Type 'frobby help io' for more information on output formats. -summaryLevel INTEGER (default is 1) If non-zero, then print a summary of the ideal to the error output stream. A higher summary level results in more expensive analysis in order to provide more information. Currently levels 0, 1 and 2 are available. -time [BOOL] (default is off) Display and time each subcomputation. -varCount [BOOL] (default is off) Print the number of variables. frobby-0.9.5/test/messages/help-assoprimes.err000066400000000000000000000041061401527164200214260ustar00rootroot00000000000000Displaying information on action: assoprimes Computes the associated prime ideals of the input monomial ideal. The computation is accomplished using irreducible decomposition. The quality of the algorithm for computing associated primes is expected to be much improved in a future version of Frobby. The parameters accepted by assoprimes are as follows. -canon [BOOL] (default is off) Sort the output, including the variables, to get a canonical representation. This requires storing the entire output in memory, which can increase run time modestly and increase memory consumption greatly. -debug [BOOL] (default is off) Print what the algorithm does at each step. -iformat STRING (default is autodetect) The format used to read the input. This action supports the formats: 4ti2 cocoa4 m2 monos newmonos null singular. The format "autodetect" instructs Frobby to guess the format. Type 'frobby help io' for more information on input formats. -independence [BOOL] (default is on) Perform independence splits when possible. -minimal [BOOL] (default is off) Specifies that the input ideal is minimally generated by the given generators. Turning this on can improve performance, but if it is not true then Frobby may go into an infinite loop or produce incorrect results. -oformat STRING (default is input) The format used to write the output. This action supports the formats: 4ti2 cocoa4 count m2 monos newmonos null singular. The format "input" instructs Frobby to use the input format. Type 'frobby help io' for more information on output formats. -simplify [BOOL] (default is on) Perform simplification when possible. -split STRING (default is median) The split selection strategy to use. Slice options are maxlabel, minlabel, varlabel, minimum, median, maximum, mingen, indep and gcd. Optimization computations support the specialized strategy degree as well. -stats [BOOL] (default is off) Print statistics on what the algorithm did. -time [BOOL] (default is off) Display and time each subcomputation. frobby-0.9.5/test/messages/help-dimension.err000066400000000000000000000023501401527164200212250ustar00rootroot00000000000000Displaying information on action: dimension Compute the dimension or codimension of the input ideal. This is the dimension of the zero set of the ideal. The ideal containing the identity has an empty zero set, and we define the dimension of this to be -1. All other ideals have non-negative dimension. The parameters accepted by dimension are as follows. -codim [BOOL] (default is off) Compute the codimension instead of the dimension. The codimension is the number of variables in the polynomial ring minus the dimension. -iformat STRING (default is autodetect) The format used to read the input. This action supports the formats: 4ti2 cocoa4 m2 monos newmonos null singular. The format "autodetect" instructs Frobby to guess the format. Type 'frobby help io' for more information on input formats. -squareFreeAndMinimal [BOOL] (default is off) State that the input ideal is square free and minimally generated. This can speed up the the computation, but will result in unpredictable behavior if it is not true. -time [BOOL] (default is off) Display and time each subcomputation. -useSlice [BOOL] (default is off) Use the Slice Algorithm to compute the dimension instead of the usual algorithm. frobby-0.9.5/test/messages/help-frobdyn.err000066400000000000000000000006251401527164200207060ustar00rootroot00000000000000Displaying information on action: frobdyn Compute the Frobenius number of the input Frobenius instance using a simple and quite slow dynamic programming algorithm. This functionality has mainly been implemented to check the answers of the Grobner basis-based Frobenius solver. The parameters accepted by frobdyn are as follows. -time [BOOL] (default is off) Display and time each subcomputation. frobby-0.9.5/test/messages/help-frobgrob.err000066400000000000000000000040771401527164200210520ustar00rootroot00000000000000Displaying information on action: frobgrob Compute the Frobenius number of the passed-in Frobenius instance. This instance must be preceded in the input by a deg-rev-lex lattice ideal Grobner basis as produced by the program 4ti2. The algorithm for this uses irreducible decomposition to compute the Frobenius number, which is why this action accepts parameters related to that. See the paper "Solving Thousand Digit Frobenius Problems Using Grobner Bases" at www.broune.com for more details. The parameters accepted by frobgrob are as follows. -bound [BOOL] (default is on) Use the bound optimization to solve optimization problems faster by eliminating non-improving slices. -boundSimplify [BOOL] (default is on) Use the bound optimization to solve optimization problems faster by simplifying slices through seeking to generate non-improving slices. This requires turning elimination of non-improving slices on. -canon [BOOL] (default is off) Sort the output, including the variables, to get a canonical representation. This requires storing the entire output in memory, which can increase run time modestly and increase memory consumption greatly. -debug [BOOL] (default is off) Print what the algorithm does at each step. -minimal [BOOL] (default is off) Specifies that the input ideal is minimally generated by the given generators. Turning this on can improve performance, but if it is not true then Frobby may go into an infinite loop or produce incorrect results. -simplify [BOOL] (default is on) Perform simplification when possible. -split STRING (default is frob) The split selection strategy to use. Slice options are maxlabel, minlabel, varlabel, minimum, median, maximum, mingen, indep and gcd. Optimization computations support the specialized strategy degree as well. -stats [BOOL] (default is off) Print statistics on what the algorithm did. -time [BOOL] (default is off) Display and time each subcomputation. -vector [BOOL] (default is off) Display the vector that achieves the optimal value. frobby-0.9.5/test/messages/help-genfrob.err000066400000000000000000000006621401527164200206660ustar00rootroot00000000000000Displaying information on action: genfrob Generate a random Frobenius problem instance. The parameters accepted by genfrob are as follows. -entryCount INTEGER (default is 4) The number of entries in the random instance. -maxEntryDigits INTEGER (default is 2) The largest allowed number of decimal digits for entries in the random instance. -time [BOOL] (default is off) Display and time each subcomputation. frobby-0.9.5/test/messages/help-genideal.err000066400000000000000000000022461401527164200210140ustar00rootroot00000000000000Displaying information on action: genideal Generate a monomial ideal. The default is to generate a random one, and in certain rare cases the generated ideal may have less than the requested number of minimial generators. This can be alleviated by increasing the exponent range or the number of variables. The other types of ideals are not random, and they use the number of variables as a parameter and may thus have more generators, depending on the type. The parameters accepted by genideal are as follows. -expRange INTEGER (default is 9) Exponents are chosen uniformly in the range [0,INTEGER]. -genCount INTEGER (default is 5) The number of minimal generators. -oformat STRING (default is m2) The format used to write the output. This action supports the formats: 4ti2 cocoa4 count m2 monos newmonos null singular. Type 'frobby help io' for more information on output formats. -time [BOOL] (default is off) Display and time each subcomputation. -type STRING (default is random) The supported types of ideals are random, edge, list, king, knight, rook, matching and tree. -varCount INTEGER (default is 3) The number of variables. frobby-0.9.5/test/messages/help-help.err000066400000000000000000000004341401527164200201710ustar00rootroot00000000000000Displaying information on action: help Typing `frobby help' displays a list of the available actions. Typing `frobby help ACTION' displays a detailed description of that action. As an example, typing `frobby help irrdecom' will yield detailed information about the irrdecom action. frobby-0.9.5/test/messages/help-hilbert.err000066400000000000000000000070041401527164200206720ustar00rootroot00000000000000Displaying information on action: hilbert Compute the multigraded Hilbert-Poincare series of the input ideal. Use the -univariate option to get the univariate series. The Hilbert-Poincare series of a monomial ideal is the sum of all monomials not in the ideal. This sum can be written as a (finite) rational function with (x1-1)(x2-1)...(xn-1) in the denominator, assuming the variables of the ring are x1,x2,...,xn. This action computes the polynomial in the numerator of this fraction. The parameters accepted by hilbert are as follows. -algorithm STRING (default is bigatti) Which algorithm to use. Options are slice, bigatti and deform. -canon [BOOL] (default is off) Sort the output, including the variables, to get a canonical representation. This requires storing the entire output in memory, which can increase run time modestly and increase memory consumption greatly. The impact for the Bigatti et.al. algorithm is much less than for the Slice Algorithm since the Bigatti et.al. algorithm always has to store the entire output in memory regardless of this option. -debug [BOOL] (default is off) Print what the algorithm does at each step. Slice algorithm only. -deformStrong [BOOL] (default is off) Deform to a strongly generic ideal if true. Otherwise deform to a weakly generic ideal. -deformationOrder STRING (default is tdeg_lex) The deformation order used for the deformation algorithm. -enum STRING (default is revlex) The enumeration order used for the deformation algorithm. -genericBase [BOOL] (default is on) Detect generic ideals as a base case of the Bigatti algorithm. -iformat STRING (default is autodetect) The format used to read the input. This action supports the formats: 4ti2 cocoa4 m2 monos newmonos null singular. The format "autodetect" instructs Frobby to guess the format. Type 'frobby help io' for more information on input formats. -independence [BOOL] (default is on) Perform independence splits when possible. Slice algorithm only. -minimal [BOOL] (default is off) Specifies that the input ideal is minimally generated by the given generators. Turning this on can improve performance, but if it is not true then Frobby may go into an infinite loop or produce incorrect results. Slice algorithm only. -oformat STRING (default is input) The format used to write the output. This action supports the formats: 4ti2 cocoa4 count m2 null singular. The format "input" instructs Frobby to use the input format. Type 'frobby help io' for more information on output formats. -simplify [BOOL] (default is on) Perform simplification when possible. -split STRING (default is median) The split selection strategy to use. Slice options are maxlabel, minlabel, varlabel, minimum, median, maximum, mingen, indep and gcd. Optimization computations support the specialized strategy degree as well. Bigatti et.al. options are median, mostNGPure, mostNGGcd, mostNGTight, typicalPure, typicalGcd, typicalTight, typicalNGPure, typicalNGGcd, typicalNGTight, someNGPure, someNGGcd and someNGTight. -stats [BOOL] (default is off) Print statistics on what the algorithm did. Slice algorithm only. -time [BOOL] (default is off) Display and time each subcomputation. -univariate [BOOL] (default is off) Output a univariate polynomial by substituting t for each variable. -widenPivot [BOOL] (default is on) Widen selected pivots when performing pivot splits. Bigatti et.al. algorithm only. frobby-0.9.5/test/messages/help-intersection.err000066400000000000000000000020711401527164200217460ustar00rootroot00000000000000Displaying information on action: intersection Computes the intersection of the input ideals. Simply concatenate the textual representations of the ideals in order to intersect them. Note that this operation is currently implemented in a rather slow way. The parameters accepted by intersection are as follows. -canon [BOOL] (default is off) Sort the generators and variables to get a canonical output. -iformat STRING (default is autodetect) The format used to read the input. This action supports the formats: 4ti2 cocoa4 m2 monos newmonos null singular. The format "autodetect" instructs Frobby to guess the format. Type 'frobby help io' for more information on input formats. -oformat STRING (default is input) The format used to write the output. This action supports the formats: 4ti2 cocoa4 count m2 monos newmonos null singular. The format "input" instructs Frobby to use the input format. Type 'frobby help io' for more information on output formats. -time [BOOL] (default is off) Display and time each subcomputation. frobby-0.9.5/test/messages/help-io.err000066400000000000000000000052751401527164200176600ustar00rootroot00000000000000Displaying information on topic: io Frobby understands several file formats. These are not documented, but they are simple enough that seeing an example should be enough to figure them out. Getting an example is as simple as making Frobby produce output in that format. It is true of all the formats that white-space is insignificant, but other than that Frobby is quite fuzzy about how the input must look. E.g. a Macaulay 2 file containing a monomial ideal must start with "R = ", so writing "r = " with a lower-case r is an error. To help with this, Frobby tries to say what is wrong if there is an error. If no input format is specified, Frobby will guess at the format, and it will guess correctly if there are no errors in the input. If no output format is specified, Frobby will use the same format for output as for input. If you want to force Frobby to use a specific format, use the -iformat and -oformat options. Using these with the transform action allows translation between formats. The formats available in Frobby and the types of data they support are as follows. * The format 4ti2: Format used by the software package 4ti2. - supports input and output of a monomial ideal. - supports input and output of a list of monomial ideals. - supports input and output of a polynomial. - supports input of a saturated binomial ideal. * The format cocoa4: Format understandable by the program CoCoA 4. - supports input and output of a monomial ideal. - supports input of a list of monomial ideals. - supports input and output of a polynomial. * The format count: Writes the number of output terms. - supports output of a monomial ideal. - supports output of a list of monomial ideals. - supports output of a polynomial. * The format m2: Format understandable by the program Macaulay 2. - supports input and output of a monomial ideal. - supports input and output of a list of monomial ideals. - supports input and output of a polynomial. * The format monos: Older format used by the program Monos. - supports input and output of a monomial ideal. - supports input and output of a list of monomial ideals. * The format newmonos: Newer format used by the program Monos. - supports input and output of a monomial ideal. - supports input of a list of monomial ideals. * The format null: Ignores input and produces no output. - supports input and output of a monomial ideal. - supports input and output of a list of monomial ideals. - supports input and output of a polynomial. * The format singular: Format understandable by the program Singular. - supports input and output of a monomial ideal. - supports input of a list of monomial ideals. - supports input and output of a polynomial. frobby-0.9.5/test/messages/help-irrdecom.err000066400000000000000000000043061401527164200210470ustar00rootroot00000000000000Displaying information on action: irrdecom Compute the irredundant irreducible decomposition of the input monomial ideal. The decomposition is computed using the Slice Algorithm. This algorithm is described in the paper `The Slice Algorithm For Irreducible Decomposition of Monomial Ideals', which is available at www.broune.com . The parameters accepted by irrdecom are as follows. -canon [BOOL] (default is off) Sort the output, including the variables, to get a canonical representation. This requires storing the entire output in memory, which can increase run time modestly and increase memory consumption greatly. -debug [BOOL] (default is off) Print what the algorithm does at each step. -encode [BOOL] (default is off) Encode the decomposition as monomials generating an ideal. -iformat STRING (default is autodetect) The format used to read the input. This action supports the formats: 4ti2 cocoa4 m2 monos newmonos null singular. The format "autodetect" instructs Frobby to guess the format. Type 'frobby help io' for more information on input formats. -independence [BOOL] (default is on) Perform independence splits when possible. -minimal [BOOL] (default is off) Specifies that the input ideal is minimally generated by the given generators. Turning this on can improve performance, but if it is not true then Frobby may go into an infinite loop or produce incorrect results. -oformat STRING (default is input) The format used to write the output. This action supports the formats: 4ti2 cocoa4 count m2 monos newmonos null singular. The format "input" instructs Frobby to use the input format. Type 'frobby help io' for more information on output formats. -simplify [BOOL] (default is on) Perform simplification when possible. -split STRING (default is median) The split selection strategy to use. Slice options are maxlabel, minlabel, varlabel, minimum, median, maximum, mingen, indep and gcd. Optimization computations support the specialized strategy degree as well. -stats [BOOL] (default is off) Print statistics on what the algorithm did. -time [BOOL] (default is off) Display and time each subcomputation. frobby-0.9.5/test/messages/help-latformat.err000066400000000000000000000011311401527164200212250ustar00rootroot00000000000000Displaying information on action: latformat By default, latformat simply writes the input lattice to output. The main functionality is to change the format. The parameters accepted by latformat are as follows. -iformat STRING (default is 4ti2) The input format. The available formats are 4ti2 and fplll. -oformat STRING (default is input) The output format. The additional format "input" means use input format. -time [BOOL] (default is off) Display and time each subcomputation. -zero [BOOL] (default is off) Adjust lattice basis to increase the number of zero entries. frobby-0.9.5/test/messages/help-maxstandard.err000066400000000000000000000044041401527164200215500ustar00rootroot00000000000000Displaying information on action: maxstandard Compute the maximal standard monomials of the input ideal. A standard monomial is a monomial that does not lie in the ideal, while a maximal standard monomial m is a standard monomial such that m * v does lie in the ideal for every variable v in the ambient polynomial ring of I. The parameters accepted by maxstandard are as follows. -canon [BOOL] (default is off) Sort the output, including the variables, to get a canonical representation. This requires storing the entire output in memory, which can increase run time modestly and increase memory consumption greatly. -debug [BOOL] (default is off) Print what the algorithm does at each step. -iformat STRING (default is autodetect) The format used to read the input. This action supports the formats: 4ti2 cocoa4 m2 monos newmonos null singular. The format "autodetect" instructs Frobby to guess the format. Type 'frobby help io' for more information on input formats. -increment [BOOL] (default is off) Increase each entry of the output by 1 to compute maximal staircase monomials in place of maximal standard monomials. -independence [BOOL] (default is on) Perform independence splits when possible. -minimal [BOOL] (default is off) Specifies that the input ideal is minimally generated by the given generators. Turning this on can improve performance, but if it is not true then Frobby may go into an infinite loop or produce incorrect results. -oformat STRING (default is input) The format used to write the output. This action supports the formats: 4ti2 cocoa4 count m2 monos newmonos null singular. The format "input" instructs Frobby to use the input format. Type 'frobby help io' for more information on output formats. -simplify [BOOL] (default is on) Perform simplification when possible. -split STRING (default is median) The split selection strategy to use. Slice options are maxlabel, minlabel, varlabel, minimum, median, maximum, mingen, indep and gcd. Optimization computations support the specialized strategy degree as well. -stats [BOOL] (default is off) Print statistics on what the algorithm did. -time [BOOL] (default is off) Display and time each subcomputation. frobby-0.9.5/test/messages/help-noparam.err000066400000000000000000000033641401527164200207030ustar00rootroot00000000000000Frobby version 0.9.5 Copyright (C) 2007 Bjarke Hammersholt Roune Frobby performs a number of computations related to monomial ideals. You run it by typing `frobby ACTION', where ACTION is one of the following. alexdual - Compute the Alexander dual of the input ideal. analyze - Display information about the input ideal. assoprimes - Compute the associated primes of the input ideal. dimension - Compute the (co)dimension of the input ideal. euler - Compute the Euler characteristic. frobdyn - Compute Frobenius number using dynamic programming. genfrob - Generate a random Frobenius problem instance. genideal - Generate a random monomial ideal. hilbert - Compute the Hilbert-Poincare series of the input ideal. intersection - Intersect the input ideals. irrdecom - Compute the irreducible decomposition of the input ideal. latformat - Change the representation of the input lattice. maxstandard - Compute the maximal standard monomials of the input ideal. optimize - Solve optimization problems related to the input ideal. primdecom - Compute the primary decomposition of monomial ideals. ptransform - Change the representation of the input polynomial. transform - Change the representation of the input ideal. Type 'frobby help ACTION' to get more details on a specific action. Note that all input and output is done via the standard streams. Type 'frobby help io' for more information on input and output formats. See www.broune.com for further information and new versions of Frobby. Frobby is free software and you are welcome to redistribute it under certain conditions. Frobby comes with ABSOLUTELY NO WARRANTY. See the GNU General Public License version 2.0 in the file COPYING for details. frobby-0.9.5/test/messages/help-optimize.err000066400000000000000000000076671401527164200211200ustar00rootroot00000000000000Displaying information on action: optimize Solves an optimization program defined by the input monomial ideal I, and an input vector of integers v. The optimization program is maximize v * e such that e encodes an irreducible component of I, where * is dot product and e is a vector of integers that uniquely encodes an irreducible ideal by being the exponent vector of the product of the minimal generators. The input is composed of the ideal I in any format, optionally followed by the entries of v in a space separated list. If v is not explicitly specified, then every entry is assumed to 1, i.e. then v is of the form (1, ..., 1). This action has options for displaying the optimal value or not and for displaying zero, one or all of the optimal solutions. The algorithm used to solve the optimization program is the Slice Algorithm using the bound optimization. Thus this action also has options related to that. The parameters accepted by optimize are as follows. -bound [BOOL] (default is on) Use the bound optimization to solve optimization problems faster by eliminating non-improving slices. -boundSimplify [BOOL] (default is on) Use the bound optimization to solve optimization problems faster by simplifying slices through seeking to generate non-improving slices. This requires turning elimination of non-improving slices on. -canon [BOOL] (default is off) Sort the output, including the variables, to get a canonical representation. This requires storing the entire output in memory, which can increase run time modestly and increase memory consumption greatly. -chopFirstAndSubtract [BOOL] (default is off) Remove the first variable from generators, from the ring and from v, and subtract the value of the first entry of v from the reported optimal value. This is useful for Frobenius number calculations. -debug [BOOL] (default is off) Print what the algorithm does at each step. -displayLevel INTEGER (default is 0) Controls how many optimal solutions to display. If the value is 0 or 1, Frobby displays 0 or 1 solutions respectively. If the value is 2 or more, all solutions are displayed. The output is presented as generators of a monomial ideal. -displayValue [BOOL] (default is on) Display the optimal value of the optimization program. -iformat STRING (default is autodetect) The format used to read the input. This action supports the formats: 4ti2 cocoa4 m2 monos newmonos null singular. The format "autodetect" instructs Frobby to guess the format. Type 'frobby help io' for more information on input formats. -maxStandard [BOOL] (default is off) Solve the optimization program for maximal standard monomials instead of for monomials representing irreducible components. -minValue [BOOL] (default is off) Minimize the value of v * e above. If this option is not set, maximize v * e instead, as is the stated default above. -minimal [BOOL] (default is off) Specifies that the input ideal is minimally generated by the given generators. Turning this on can improve performance, but if it is not true then Frobby may go into an infinite loop or produce incorrect results. -oformat STRING (default is input) The format used to write the output. This action supports the formats: 4ti2 cocoa4 count m2 monos newmonos null singular. The format "input" instructs Frobby to use the input format. Type 'frobby help io' for more information on output formats. -simplify [BOOL] (default is on) Perform simplification when possible. -split STRING (default is degree) The split selection strategy to use. Slice options are maxlabel, minlabel, varlabel, minimum, median, maximum, mingen, indep and gcd. Optimization computations support the specialized strategy degree as well. -stats [BOOL] (default is off) Print statistics on what the algorithm did. -time [BOOL] (default is off) Display and time each subcomputation. frobby-0.9.5/test/messages/help-ptransform.err000066400000000000000000000020271401527164200214340ustar00rootroot00000000000000Displaying information on action: ptransform By default, transform simply writes the input polynomial to output. A number of parameters allow one to transform the input polynomial in various ways. The parameters accepted by ptransform are as follows. -canon [BOOL] (default is off) Sort variables and generators to get a canonical representation. -iformat STRING (default is autodetect) The format used to read the input. This action supports the formats: 4ti2 cocoa4 m2 null singular. The format "autodetect" instructs Frobby to guess the format. Type 'frobby help io' for more information on input formats. -oformat STRING (default is input) The format used to write the output. This action supports the formats: 4ti2 cocoa4 count m2 null singular. The format "input" instructs Frobby to use the input format. Type 'frobby help io' for more information on output formats. -sort [BOOL] (default is off) Sort the terms. -time [BOOL] (default is off) Display and time each subcomputation. frobby-0.9.5/test/messages/help-transform.err000066400000000000000000000047151401527164200212620ustar00rootroot00000000000000Displaying information on action: transform By default, transform simply writes the input ideals to output. A number of parameters allow one to transform the input ideal in various ways. The parameters accepted by transform are as follows. -addPurePowers [BOOL] (default is off) Adds a pure power for each variable that does not already have a pure power in the ideal. Each exponent is chosen to be one larger than the maximal exponent of that variable that appears in the ideal. -canon [BOOL] (default is off) Sort variables, generators and ideals to get canonical representation. -deform [BOOL] (default is off) Apply a generic deformation to the input ideal. -iformat STRING (default is autodetect) The format used to read the input. This action supports the formats: 4ti2 cocoa4 m2 monos newmonos null singular. The format "autodetect" instructs Frobby to guess the format. Type 'frobby help io' for more information on input formats. -minimize [BOOL] (default is off) Remove non-minimial generators. -oformat STRING (default is input) The format used to write the output. This action supports the formats: 4ti2 cocoa4 count m2 monos newmonos null singular. The format "input" instructs Frobby to use the input format. Type 'frobby help io' for more information on output formats. -product [BOOL] (default is off) Replace each ideal with the product of its generators. -projectVar INTEGER (default is 0) Project away the i'th variable counting from 1. No action is taken for a value of 0 or more than the number of variables in the ring. -radical [BOOL] (default is off) Take the radical of the generators. Combine this with -minimize to get rid of any non-minimal ones. -sort [BOOL] (default is off) Sort generators according to the reverse lexicographic order. -swap01 [BOOL] (default is off) Change all 0 exponents to 1 and vice versa. -time [BOOL] (default is off) Display and time each subcomputation. -transpose [BOOL] (default is off) Exchange variables and minimal generators. Let M be a matrix whose rows are labeled by minimal generators and whose columns are labeled by variables. The entry at row g and column x is the number of times that x divides g. This options transposes that matrix. -trimVariables [BOOL] (default is off) Remove variables that divide none of the generators. -unique [BOOL] (default is off) Remove duplicate generators. frobby-0.9.5/test/messages/help-twoparams.err000066400000000000000000000001241401527164200212520ustar00rootroot00000000000000ERROR: Expected an option when reading "topic2", but options start with a dash (-). frobby-0.9.5/test/messages/help-unknownTopic.err000066400000000000000000000000601401527164200217320ustar00rootroot00000000000000ERROR: No action has the prefix "unknownTopic". frobby-0.9.5/test/messages/latformat-unevenRows.err000066400000000000000000000001271401527164200224540ustar00rootroot00000000000000SYNTAX ERROR (format fplll, line 1): Row 1 has 1 entries, while row 2 has 0 entries. frobby-0.9.5/test/messages/latformat-unknownInput.err000066400000000000000000000000651401527164200230210ustar00rootroot00000000000000ERROR: Unknown lattice input format "unknownFormat". frobby-0.9.5/test/messages/latformat-unknownOutput.err000066400000000000000000000000661401527164200232230ustar00rootroot00000000000000ERROR: Unknown lattice output format "unknownFormat". frobby-0.9.5/test/messages/m2-extra.err000066400000000000000000000000741401527164200177520ustar00rootroot00000000000000SYNTAX ERROR (format m2, line 1): Expected no more input. frobby-0.9.5/test/messages/m2-invalidChar1.err000066400000000000000000000001311401527164200211260ustar00rootroot00000000000000SYNTAX ERROR (format m2, line 1): Expected name of ring to start with an upper case R. frobby-0.9.5/test/messages/m2-invalidChar2.err000066400000000000000000000001071401527164200211320ustar00rootroot00000000000000SYNTAX ERROR (format m2, line 2): Expected =, but got no more input. frobby-0.9.5/test/messages/m2-invalidString1.err000066400000000000000000000001001401527164200215130ustar00rootroot00000000000000SYNTAX ERROR (format m2, line 1): Expected QQ, but got "Qxx". frobby-0.9.5/test/messages/m2-invalidString2.err000066400000000000000000000001101401527164200215150ustar00rootroot00000000000000SYNTAX ERROR (format m2, line 2): Expected QQ, but got no more input. frobby-0.9.5/test/messages/m2-noIdentifier.err000066400000000000000000000000741401527164200212460ustar00rootroot00000000000000SYNTAX ERROR (format m2, line 2): Expected an identifier. frobby-0.9.5/test/messages/m2-unknownVariable.err000066400000000000000000000001211401527164200217650ustar00rootroot00000000000000SYNTAX ERROR (format m2, line 1): Unknown variable "ab". Maybe you forgot a *. frobby-0.9.5/test/messages/macaulay2-doubleVar.err000066400000000000000000000001061401527164200221060ustar00rootroot00000000000000SYNTAX ERROR (format m2, line 1): The variable a is declared twice. frobby-0.9.5/test/messages/monos-doubleVar.err000066400000000000000000000001111401527164200213570ustar00rootroot00000000000000SYNTAX ERROR (format monos, line 1): The variable a is declared twice. frobby-0.9.5/test/messages/newmonos-doubleVar.err000066400000000000000000000001141401527164200220740ustar00rootroot00000000000000SYNTAX ERROR (format newmonos, line 1): The variable a is declared twice. frobby-0.9.5/test/messages/opt-incompleteVector.err000066400000000000000000000000711401527164200224320ustar00rootroot00000000000000SYNTAX ERROR (format m2, line 2): Expected an integer. frobby-0.9.5/test/messages/option-ambiguous.err000066400000000000000000000001031401527164200216050ustar00rootroot00000000000000ERROR: More than one option has prefix "s": simplify split stats frobby-0.9.5/test/messages/option-ambiguousSplitSplit.err000066400000000000000000000001541401527164200236430ustar00rootroot00000000000000ERROR: More than one Slice split strategy has prefix "m": maximum maxlabel median mingen minimum minlabel frobby-0.9.5/test/messages/option-frobNotHere.err000066400000000000000000000003371401527164200220400ustar00rootroot00000000000000NOTE: The split selection strategy "frob" is deprecated and will be removed in a future version of Frobby. Use the name "degree" to achieve the same thing. ERROR: The split strategy frob is not appropriate in this context. frobby-0.9.5/test/messages/option-labelNotHere.err000066400000000000000000000001001401527164200221530ustar00rootroot00000000000000ERROR: Label split strategy is not appropriate in this context. frobby-0.9.5/test/messages/option-negative.err000066400000000000000000000002341401527164200214210ustar00rootroot00000000000000ERROR: Option -varCount takes one parameter, but no parameters were provided. The option -varCount has the following description: The number of variables. frobby-0.9.5/test/messages/option-noPolyInput.err000066400000000000000000000001001401527164200221070ustar00rootroot00000000000000ERROR: The monos format does not support input of a polynomial. frobby-0.9.5/test/messages/option-noPolyOutput.err000066400000000000000000000001011401527164200223110ustar00rootroot00000000000000ERROR: The monos format does not support output of a polynomial. frobby-0.9.5/test/messages/option-nodash.err000066400000000000000000000001221401527164200210670ustar00rootroot00000000000000ERROR: Expected an option when reading "time", but options start with a dash (-). frobby-0.9.5/test/messages/option-notInteger.err000066400000000000000000000001601401527164200217330ustar00rootroot00000000000000ERROR: Option -varCount was given the parameter "notInteger", which is not an integer in the range [0, 2^31-1]. frobby-0.9.5/test/messages/option-notonoff.err000066400000000000000000000001511401527164200214450ustar00rootroot00000000000000ERROR: Option -time was given the argument "not_on_or_off". The only valid arguments are "on" and "off". frobby-0.9.5/test/messages/option-tooBig.err000066400000000000000000000001601401527164200210400ustar00rootroot00000000000000ERROR: Option -varCount was given the parameter "4294967296", which is not an integer in the range [0, 2^31-1]. frobby-0.9.5/test/messages/option-tooManyParams.err000066400000000000000000000007311401527164200224130ustar00rootroot00000000000000ERROR: Option -oformat takes one parameter, but 2 parameters were provided. The provided parameters were: o1, o2. (Did you forget to put a - in front of one of the options?) The option -oformat has the following description: The format used to write the output. This action supports the formats: 4ti2 cocoa4 count m2 monos newmonos null singular. The format "input" instructs Frobby to use the input format. Type 'frobby help io' for more information on output formats. frobby-0.9.5/test/messages/option-unknown.err000066400000000000000000000000611401527164200213140ustar00rootroot00000000000000ERROR: No option has the prefix "unknownOption". frobby-0.9.5/test/messages/option-unknownBigattiSplit.err000066400000000000000000000001071401527164200236350ustar00rootroot00000000000000ERROR: No Bigatti et.al. pivot strategy has the prefix "unknownSplit". frobby-0.9.5/test/messages/option-unknownEnumerationOrder.err000066400000000000000000000000731401527164200245220ustar00rootroot00000000000000ERROR: No ordering of terms has the prefix "unknownOrder". frobby-0.9.5/test/messages/option-unknownIdealType.err000066400000000000000000000000511401527164200231140ustar00rootroot00000000000000ERROR: Unknown ideal type "unknownType". frobby-0.9.5/test/messages/option-unknownInput.err000066400000000000000000000000611401527164200223340ustar00rootroot00000000000000ERROR: No format has the prefix "unknownFormat". frobby-0.9.5/test/messages/option-unknownOutput.err000066400000000000000000000000611401527164200225350ustar00rootroot00000000000000ERROR: No format has the prefix "unknownFormat". frobby-0.9.5/test/messages/option-unknownSplit.err000066400000000000000000000000761401527164200223360ustar00rootroot00000000000000ERROR: No Slice split strategy has the prefix "unknownSplit". frobby-0.9.5/test/messages/runtest000077500000000000000000000007321401527164200172340ustar00rootroot00000000000000#!/usr/bin/env bash # This runs a test while providing diagnostic output on error. It is a # convenience script that wraps around ../testhelper to provide some # often-used options. The usage is the same, except that $2 is the # actual input used as a string, not a filename. # action="$1" shift tmpFile="./errorTestHelperTmp" echo "$1" > $tmpFile shift outputFile="$1.err" shift ../testScripts/testhelper $action $tmpFile $outputFile _expectExitCode 1 _matchError $* frobby-0.9.5/test/messages/runtests000077500000000000000000000155611401527164200174250ustar00rootroot00000000000000#!/usr/bin/env bash # Makes Frobby report all error messages and other messages and # compare this to reference outputs. Parameters to this script should # only be parameters of ../testHelper, e.g. _generate or _valgrind, # not options for Frobby. t="./runtest" noInput="There is no input for this computation." if [ "$1" = "_full" ]; then shift; fi ####################################### # The help action helpTopics="help hilbert irrdecom alexdual assoprimes transform ptransform io intersection genideal frobgrob frobdyn genfrob analyze latformat optimize maxstandard dimension"; for topic in $helpTopics; do $t help "$noInput" help-$topic _expectExitCode 0 $* $topic if [ $? != 0 ]; then exit 1; fi done $t help "$noInput" help-unknownTopic $* unknownTopic if [ $? != 0 ]; then exit 1; fi $t help "$noInput" help-noparam $* _expectExitCode 0 # no help topic if [ $? != 0 ]; then exit 1; fi $t help "$noInput" help-twoparams $* help topic2 $* # two topics if [ $? != 0 ]; then exit 1; fi ####################################### # Processing of options $t alexdual "$noInput" option-nodash $* time $* # no dash (-) on option if [ $? != 0 ]; then exit 1; fi $t alexdual "$noInput" option-unknown $* -unknownOption if [ $? != 0 ]; then exit 1; fi $t hilb "$noInput" option-ambiguous $* -s #ambigous prefix if [ $? != 0 ]; then exit 1; fi $t alexdual "$noInput" option-unknownSplit $* -split unknownSplit if [ $? != 0 ]; then exit 1; fi $t alexdual "$noInput" option-ambiguousSplitSplit $* -split m if [ $? != 0 ]; then exit 1; fi $t alexdual "$noInput" option-frobNotHere $* -split frob if [ $? != 0 ]; then exit 1; fi $t hilbert "$noInput" option-labelNotHere $* -split varlabel -algorithm slice if [ $? != 0 ]; then exit 1; fi $t alexdual "$noInput" option-notonoff $* -time not_on_or_off if [ $? != 0 ]; then exit 1; fi $t alexdual "$noInput" option-unknownInput $* -iformat unknownFormat if [ $? != 0 ]; then exit 1; fi $t alexdual "$noInput" option-unknownOutput $* -oformat unknownFormat if [ $? != 0 ]; then exit 1; fi $t alexdual "$noInput" option-tooManyParams $* -oformat o1 o2 if [ $? != 0 ]; then exit 1; fi $t hilbert "$noInput" option-noPolyOutput $* -oformat monos -iformat null if [ $? != 0 ]; then exit 1; fi $t ptransform "$noInput" option-noPolyInput $* -oformat null -iformat monos if [ $? != 0 ]; then exit 1; fi $t genideal "$noInput" option-notInteger $* -varCount notInteger if [ $? != 0 ]; then exit 1; fi # This does not actually get interpreted as a negative integer, since # the minus in front makes it look like another option entirely. $t genideal "$noInput" option-negative $* -varCount -1 if [ $? != 0 ]; then exit 1; fi $t genideal "$noInput" option-tooBig $* -varCount 4294967296 if [ $? != 0 ]; then exit 1; fi $t genideal "$noInput" option-unknownIdealType $* -type unknownType if [ $? != 0 ]; then exit 1; fi $t latformat "$noInput" latformat-unknownInput $* -iformat unknownFormat if [ $? != 0 ]; then exit 1; fi $t latformat "$noInput" latformat-unknownOutput $* -oformat unknownFormat if [ $? != 0 ]; then exit 1; fi $t hilbert "$noInput" option-unknownBigattiSplit $* -algorithm bigatti -split unknownSplit if [ $? != 0 ]; then exit 1; fi $t hilbert "$noInput" option-unknownEnumerationOrder $* -algorithm deform -enum unknownOrder if [ $? != 0 ]; then exit 1; fi ####################################### # action prefixes $t unknownAction "$noInput" action-unknown $* # Unknown action if [ $? != 0 ]; then exit 1; fi $t a "$noInput" action-ambigous $* # Ambigous prefix if [ $? != 0 ]; then exit 1; fi ####################################### # Syntax errors $t transform "Use R::=Q[x[1..1]];Names:=[\" x\"];I:=Ideal();" \ cocoa4-varSpace1 $* -iformat cocoa4 if [ $? != 0 ]; then exit 1; fi $t transform "Use R::=Q[x[1..1]];Names:=[\"x \"];I:=Ideal();" \ cocoa4-varSpace2 $* -iformat cocoa4 if [ $? != 0 ]; then exit 1; fi $t transform "Use R::=Q[x[1..2]];Names:=[\"x\",\"x\"];I:=Ideal();" \ cocoa4-doubleVar $* -iformat cocoa4 if [ $? != 0 ]; then exit 1; fi $t transform "Use R::=Q[x[1..1]];Names:=[\"x\"];I:=Ideal(x[2]);" \ cocoa4-unknownVar $* -iformat cocoa4 if [ $? != 0 ]; then exit 1; fi $t transform "Use R::=Q[x[1..1]];Names:=[\"x\"];I:=Ideal(x[1]x[1]);" \ cocoa4-doubleVar2 $* -iformat cocoa4 if [ $? != 0 ]; then exit 1; fi $t transform "Use R::=Q[x[1..1]];Names:=[\"x\"];I:=Ideal(x[1]^-1);" \ cocoa4-negativeExponent $* -iformat cocoa4 if [ $? != 0 ]; then exit 1; fi $t ptransform "Use R::=Q[x[1..1]];Names:=[\"x\"];p:=++1;" \ cocoa4-tooManySigns $* -iformat cocoa4 if [ $? != 0 ]; then exit 1; fi $t transform "ring R=0,(x1,x1)" \ singular-doubleVar $* -iformat singular if [ $? != 0 ]; then exit 1; fi $t transform "ring R=0,(a,b),lp;int noVars=1;" \ singular-hasNoVars $* -iformat singular if [ $? != 0 ]; then exit 1; fi $t transform "ring R=0,(a),lp;int noVars=1;" \ singular-hasNoVars2 $* -iformat singular if [ $? != 0 ]; then exit 1; fi $t transform "ring R=0,(a,b),lp;int noVars=2;" \ singular-invalidNoVars $* -iformat singular if [ $? != 0 ]; then exit 1; fi $t latformat "[[1][]]" \ latformat-unevenRows $* -iformat fplll $t transform "R=QQ[a,a];" \ macaulay2-doubleVar $* -iformat m2 $t transform "vars a,a;" \ monos-doubleVar $* -iformat monos $t transform "(monomial-ideal-with-order(lex-order a a))" \ newmonos-doubleVar $* -iformat newmonos $t ptransform "0 0" 4ti2-invalidPoly $* if [ $? != 0 ]; then exit 1; fi $t frobgrob "0 0" frobgrob-notEnoughColumns $* if [ $? != 0 ]; then exit 1; fi $t frobgrob "1 1 1" frobgrob-firstPositive $* if [ $? != 0 ]; then exit 1; fi $t frobgrob "1 1 -1" frobgrob-noFrob $* if [ $? != 0 ]; then exit 1; fi $t frobgrob "1 1 -1 2 3" frobgrob-frobMismatch $* if [ $? != 0 ]; then exit 1; fi $t frobgrob "1 1 -1 1" frobgrob-frobHasOne $* if [ $? != 0 ]; then exit 1; fi $t frobgrob "1 1 -1 2 2" frobgrob-frobNotPrime $* if [ $? != 0 ]; then exit 1; fi $t alexdual "R=QQ[a];I=monomialIdeal(a^2);a" alexdual-invalidPoint $* if [ $? != 0 ]; then exit 1; fi $t transform "R=QQ[a];I=monomialIdeal(a);R=QQ[b];I=monomialIdeal(b);" \ transform-mismatchedProduct $* -product if [ $? != 0 ]; then exit 1; fi $t transform "q" m2-invalidChar1 $* -iformat m2 if [ $? != 0 ]; then exit 1; fi $t transform "R" m2-invalidChar2 $* -iformat m2 if [ $? != 0 ]; then exit 1; fi $t transform "R=Qxx x" m2-invalidString1 $* -iformat m2 if [ $? != 0 ]; then exit 1; fi $t transform "R=" m2-invalidString2 $* -iformat m2 if [ $? != 0 ]; then exit 1; fi $t hilbert "R=QQ[a];I=monomialIdeal(a);extra" m2-extra $* -iformat m2 if [ $? != 0 ]; then exit 1; fi $t transform "1 1" 4ti2-noInteger $* -iformat 4ti2 if [ $? != 0 ]; then exit 1; fi $t hilbert "R=QQ[a];I=monomialIdeal(" m2-noIdentifier $* -iformat m2 if [ $? != 0 ]; then exit 1; fi $t hilbert "R=QQ[a,b];I=monomialIdeal(ab" m2-unknownVariable $* -iformat m2 if [ $? != 0 ]; then exit 1; fi $t optimize "R=QQ[a,b];I=monomialIdeal(a);3" opt-incompleteVector $* frobby-0.9.5/test/messages/singular-doubleVar.err000066400000000000000000000001151401527164200220540ustar00rootroot00000000000000SYNTAX ERROR (format singular, line 1): The variable x1 is declared twice. frobby-0.9.5/test/messages/singular-hasNoVars.err000066400000000000000000000003021401527164200220330ustar00rootroot00000000000000SYNTAX ERROR (format singular, line 1): A singular ring with no actual variables must have a single place-holder variable named "dummy", and in this case there are 2 place-holder variables. frobby-0.9.5/test/messages/singular-hasNoVars2.err000066400000000000000000000002631401527164200221230ustar00rootroot00000000000000SYNTAX ERROR (format singular, line 1): A singular ring with no actual variables must have a single place-holder variable named "dummy", and in this case it has the name "a". frobby-0.9.5/test/messages/singular-invalidNoVars.err000066400000000000000000000001101401527164200227030ustar00rootroot00000000000000SYNTAX ERROR (format singular, line 1): noVars must be either 0 or 1. frobby-0.9.5/test/messages/transform-mismatchedProduct.err000066400000000000000000000003041401527164200237770ustar00rootroot00000000000000ERROR: Taking products of ideals in rings with different variable lists. One ring has variables b, while another has variables a. Contact the Frobby developers if you need this functionality. frobby-0.9.5/test/polyFormats/000077500000000000000000000000001401527164200163105ustar00rootroot00000000000000frobby-0.9.5/test/polyFormats/null.4ti2000066400000000000000000000000221401527164200177600ustar00rootroot000000000000000 1 (coefficient) frobby-0.9.5/test/polyFormats/null.canon000066400000000000000000000000001401527164200202700ustar00rootroot00000000000000frobby-0.9.5/test/polyFormats/null.cocoa4000066400000000000000000000000461401527164200203540ustar00rootroot00000000000000Use R ::= Q[x]; Names := []; p := 0; frobby-0.9.5/test/polyFormats/null.count000066400000000000000000000000021401527164200203240ustar00rootroot000000000000000 frobby-0.9.5/test/polyFormats/null.m2000066400000000000000000000000221401527164200175140ustar00rootroot00000000000000R = QQ[]; p = 0; frobby-0.9.5/test/polyFormats/null.null000066400000000000000000000000001401527164200201440ustar00rootroot00000000000000frobby-0.9.5/test/polyFormats/null.singular000066400000000000000000000000661401527164200210320ustar00rootroot00000000000000ring R = 0, (dummy), lp; int noVars = 1; poly p = 0; frobby-0.9.5/test/polyFormats/null.test000066400000000000000000000001701401527164200201610ustar00rootroot00000000000000This is an input file intended to be read only by the null input format, which does not actually read any of the input. frobby-0.9.5/test/polyFormats/runtests000077500000000000000000000000461401527164200201250ustar00rootroot00000000000000../testScripts/runtests ptransform $* frobby-0.9.5/test/polyFormats/t1.4ti2000066400000000000000000000001621401527164200173370ustar00rootroot000000000000006 5 -1 4 9 3 0 -1 5 8 9 0 0 0 0 0 0 -1 0 0 0 0 1 5 9 8 1 0 0 0 0 0 (coefficient) x1 x2 x3 x_with_underscore frobby-0.9.5/test/polyFormats/t1.canon000066400000000000000000000002041401527164200176500ustar00rootroot00000000000000R = QQ[x1, x2, x3, x_with_underscore]; p = x1^5*x2^9*x3^8*x_with_underscore + -x1^5*x2^8*x3^9 + -x1^4*x2^9*x3^3 + -1 + 0 + 0; frobby-0.9.5/test/polyFormats/t1.cocoa4000066400000000000000000000002351401527164200177260ustar00rootroot00000000000000Use R ::= Q[x[1..4]]; Names := ["x1", "x2", "x3", "x_with_underscore"]; p := -x[1]^4x[2]^9x[3]^3 -x[1]^5x[2]^8x[3]^9 +0 -1 +x[1]^5x[2]^9x[3]^8x[4] +0; frobby-0.9.5/test/polyFormats/t1.count000066400000000000000000000000021401527164200176760ustar00rootroot000000000000006 frobby-0.9.5/test/polyFormats/t1.m2000066400000000000000000000002041401527164200170700ustar00rootroot00000000000000R = QQ[x1, x2, x3, x_with_underscore]; p = -x1^4*x2^9*x3^3 + -x1^5*x2^8*x3^9 + 0 + -1 + x1^5*x2^9*x3^8*x_with_underscore + 0; frobby-0.9.5/test/polyFormats/t1.null000066400000000000000000000000001401527164200175160ustar00rootroot00000000000000frobby-0.9.5/test/polyFormats/t1.singular000066400000000000000000000002341401527164200204010ustar00rootroot00000000000000ring R = 0, (x1, x2, x3, x_with_underscore), lp; int noVars = 0; poly p = -x1^4*x2^9*x3^3 -x1^5*x2^8*x3^9 +0 -1 +x1^5*x2^9*x3^8*x_with_underscore +0; frobby-0.9.5/test/polyFormats/t1.test000066400000000000000000000002631401527164200175360ustar00rootroot00000000000000R = QQ [ x1 , x2 , x3,x_with_underscore ] ; p = - x1 ^ 4 * x2 ^ 9 * x3 ^ 3 - x1 ^ 5 * x2 ^ 8 * x3 ^ 9 -0 +-1 + x1 ^ 5 * x2 ^ 9 *x_with_underscore* x3 ^ 8 -0 ; frobby-0.9.5/test/polyFormats/t2.4ti2000066400000000000000000000000771401527164200173450ustar00rootroot000000000000008 2 1 1 0 2 0 0 -5 1 2 0 0 1 -3 0 0 3 (coefficient) aA frobby-0.9.5/test/polyFormats/t2.canon000066400000000000000000000001431401527164200176530ustar00rootroot00000000000000Use R ::= Q[x[1..1]]; Names := ["aA"]; p := 0x[1]^3 +0x[1]^2 -5x[1] +0x[1] +x[1] -3 +0 +2; frobby-0.9.5/test/polyFormats/t2.cocoa4000066400000000000000000000001431401527164200177250ustar00rootroot00000000000000Use R ::= Q[x[1..1]]; Names := ["aA"]; p := x[1] +0x[1]^2 +0 -5x[1] +2 +0x[1] -3 +0x[1]^3; frobby-0.9.5/test/polyFormats/t2.count000066400000000000000000000000021401527164200176770ustar00rootroot000000000000008 frobby-0.9.5/test/polyFormats/t2.m2000066400000000000000000000001121401527164200170670ustar00rootroot00000000000000R = QQ[aA]; p = aA + 0*aA^2 + 0 + -5*aA + 2 + 0*aA + -3 + 0*aA^3; frobby-0.9.5/test/polyFormats/t2.null000066400000000000000000000000001401527164200175170ustar00rootroot00000000000000frobby-0.9.5/test/polyFormats/t2.singular000066400000000000000000000001401401527164200203760ustar00rootroot00000000000000ring R = 0, (aA), lp; int noVars = 0; poly p = aA +0*aA^2 +0 -5*aA +2 +0*aA -3 +0*aA^3; frobby-0.9.5/test/polyFormats/t2.test000066400000000000000000000001601401527164200175330ustar00rootroot00000000000000Use R ::= Q [ x [ 1 .. 1 ] ] ; Names := [ "aA" ] ; p := 1 x[1] +0 x[1] ^ 2 +0+-5x[1]+2+0x[1]-3+0x[1]^3 ; frobby-0.9.5/test/polyFormats/t3.4ti2000066400000000000000000000001241401527164200173370ustar00rootroot000000000000009 3 -1 1 2 1 1 5 0 0 9 0 0 7 -1 0 3 1 0 4 1 0 6 0 1 8 -1 0 1 (coefficient) frobby-0.9.5/test/polyFormats/t3.canon000066400000000000000000000001241401527164200176530ustar00rootroot000000000000009 3 0 1 8 1 1 5 -1 1 2 0 0 9 0 0 7 1 0 6 1 0 4 -1 0 3 -1 0 1 (coefficient) frobby-0.9.5/test/polyFormats/t3.cocoa4000066400000000000000000000002211401527164200177230ustar00rootroot00000000000000Use R ::= Q[x[1..2]]; Names := ["x1", "x2"]; p := -x[1]x[2]^2 +x[1]x[2]^5 +0x[2]^9 +0x[2]^7 -x[2]^3 +x[2]^4 +x[2]^6 +0x[1]x[2]^8 -x[2]; frobby-0.9.5/test/polyFormats/t3.count000066400000000000000000000000021401527164200177000ustar00rootroot000000000000009 frobby-0.9.5/test/polyFormats/t3.m2000066400000000000000000000001531401527164200170750ustar00rootroot00000000000000R = QQ[x1, x2]; p = -x1*x2^2 + x1*x2^5 + 0*x2^9 + 0*x2^7 + -x2^3 + x2^4 + x2^6 + 0*x1*x2^8 + -x2; frobby-0.9.5/test/polyFormats/t3.null000066400000000000000000000000001401527164200175200ustar00rootroot00000000000000frobby-0.9.5/test/polyFormats/t3.singular000066400000000000000000000002001401527164200203740ustar00rootroot00000000000000ring R = 0, (x1, x2), lp; int noVars = 0; poly p = -x1*x2^2 +x1*x2^5 +0*x2^9 +0*x2^7 -x2^3 +x2^4 +x2^6 +0*x1*x2^8 -x2; frobby-0.9.5/test/polyFormats/t3.test000066400000000000000000000001161401527164200175350ustar00rootroot000000000000009 3 -1 1 2 1 1 5 0 -1 9 0 0 7 -1 -1 3 1 0 4 1 -1 6 0 1 8 -1 0 1 (coefficient) frobby-0.9.5/test/polyFormats/t4.4ti2000066400000000000000000000001101401527164200173330ustar00rootroot000000000000005 4 1 1 0 0 -1 0 1 2 0 0 0 0 1 0 1 5 1 0 0 0 (coefficient) q x1 x2 frobby-0.9.5/test/polyFormats/t4.canon000066400000000000000000000001261401527164200176560ustar00rootroot00000000000000ring R = 0, (q, x1, x2), lp; int noVars = 0; poly p = q +x1*x2^5 -x1*x2^2 +0 +1; frobby-0.9.5/test/polyFormats/t4.cocoa4000066400000000000000000000001401401527164200177240ustar00rootroot00000000000000Use R ::= Q[x[1..3]]; Names := ["q", "x1", "x2"]; p := x[1] -x[2]x[3]^2 +0 +x[2]x[3]^5 +1; frobby-0.9.5/test/polyFormats/t4.count000066400000000000000000000000021401527164200177010ustar00rootroot000000000000005 frobby-0.9.5/test/polyFormats/t4.m2000066400000000000000000000000741401527164200171000ustar00rootroot00000000000000R = QQ[q, x1, x2]; p = q + -x1*x2^2 + 0 + x1*x2^5 + 1; frobby-0.9.5/test/polyFormats/t4.null000066400000000000000000000000001401527164200175210ustar00rootroot00000000000000frobby-0.9.5/test/polyFormats/t4.singular000066400000000000000000000001261401527164200204040ustar00rootroot00000000000000ring R = 0, (q, x1, x2), lp; int noVars = 0; poly p = q -x1*x2^2 +0 +x1*x2^5 +1; frobby-0.9.5/test/polyFormats/t4.test000066400000000000000000000002021401527164200175320ustar00rootroot00000000000000 ring R = 0 , ( q , x1 , x2 ) , lp ; int noVars = 0 ; poly p = q - x1 * x2 ^ 2 +-0 + x1 * x2 ^ 5 +1 ;frobby-0.9.5/test/polyFormats/t6.4ti2000066400000000000000000000000251401527164200173420ustar00rootroot000000000000001 1 -1 (coefficient) frobby-0.9.5/test/polyFormats/t6.canon000066400000000000000000000000231401527164200176540ustar00rootroot00000000000000R = QQ[]; p = -1; frobby-0.9.5/test/polyFormats/t6.cocoa4000066400000000000000000000000471401527164200177340ustar00rootroot00000000000000Use R ::= Q[x]; Names := []; p := -1; frobby-0.9.5/test/polyFormats/t6.count000066400000000000000000000000021401527164200177030ustar00rootroot000000000000001 frobby-0.9.5/test/polyFormats/t6.m2000066400000000000000000000000231401527164200170740ustar00rootroot00000000000000R = QQ[]; p = -1; frobby-0.9.5/test/polyFormats/t6.null000066400000000000000000000000001401527164200175230ustar00rootroot00000000000000frobby-0.9.5/test/polyFormats/t6.singular000066400000000000000000000000671401527164200204120ustar00rootroot00000000000000ring R = 0, (dummy), lp; int noVars = 1; poly p = -1; frobby-0.9.5/test/polyFormats/t6.test000066400000000000000000000000221401527164200175340ustar00rootroot00000000000000R = QQ[]; p = -1; frobby-0.9.5/test/polyFormats/t7.4ti2000066400000000000000000000000241401527164200173420ustar00rootroot000000000000001 1 1 (coefficient) frobby-0.9.5/test/polyFormats/t7.canon000066400000000000000000000000221401527164200176540ustar00rootroot00000000000000R = QQ[]; p = 1; frobby-0.9.5/test/polyFormats/t7.cocoa4000066400000000000000000000000461401527164200177340ustar00rootroot00000000000000Use R ::= Q[x]; Names := []; p := 1; frobby-0.9.5/test/polyFormats/t7.count000066400000000000000000000000021401527164200177040ustar00rootroot000000000000001 frobby-0.9.5/test/polyFormats/t7.m2000066400000000000000000000000221401527164200170740ustar00rootroot00000000000000R = QQ[]; p = 1; frobby-0.9.5/test/polyFormats/t7.null000066400000000000000000000000001401527164200175240ustar00rootroot00000000000000frobby-0.9.5/test/polyFormats/t7.singular000066400000000000000000000000661401527164200204120ustar00rootroot00000000000000ring R = 0, (dummy), lp; int noVars = 1; poly p = 1; frobby-0.9.5/test/polyFormats/t7.test000066400000000000000000000000211401527164200175340ustar00rootroot00000000000000R = QQ[]; p = 1; frobby-0.9.5/test/polyFormats/t8.4ti2000066400000000000000000000004311401527164200173450ustar00rootroot000000000000003 15 1 1234567890000000000000000000000000000000000000000000000000000000000000012345 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (coefficient) aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 frobby-0.9.5/test/polyFormats/t8.canon000066400000000000000000000004061401527164200176630ustar00rootroot00000000000000R = QQ[a1, a10, a11, a12, a13, a2, a3, a4, a5, a6, a7, a8, a9, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab]; p = -5*a1 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab^1234567890000000000000000000000000000000000000000000000000000000000000012345 + 0; frobby-0.9.5/test/polyFormats/t8.cocoa4000066400000000000000000000004161401527164200177360ustar00rootroot00000000000000Use R ::= Q[x[1..14]]; Names := ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"]; p := x[1]^1234567890000000000000000000000000000000000000000000000000000000000000012345 -5x[2] +0; frobby-0.9.5/test/polyFormats/t8.count000066400000000000000000000000021401527164200177050ustar00rootroot000000000000003 frobby-0.9.5/test/polyFormats/t8.m2000066400000000000000000000004061401527164200171030ustar00rootroot00000000000000R = QQ[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13]; p = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab^1234567890000000000000000000000000000000000000000000000000000000000000012345 + -5*a1 + 0; frobby-0.9.5/test/polyFormats/t8.null000066400000000000000000000000001401527164200175250ustar00rootroot00000000000000frobby-0.9.5/test/polyFormats/t8.singular000066400000000000000000000004421401527164200204110ustar00rootroot00000000000000ring R = 0, (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13), lp; int noVars = 0; poly p = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab^1234567890000000000000000000000000000000000000000000000000000000000000012345 -5*a1 +0; frobby-0.9.5/test/polyFormats/t8.test000066400000000000000000000004001401527164200175360ustar00rootroot00000000000000R = QQ[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13]; p = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab^ 1234567890000000000000000000000000000000000000000000000000000000000000012345 -5*a1+0; frobby-0.9.5/test/runSplitTests000077500000000000000000000026311401527164200165640ustar00rootroot00000000000000#!/bin/bash #test/runtests $* #if [ $? != 0 ]; then exit 1; fi if [ "$1" = "_few" ]; then testLevel="few"; shift; else testLevel="normal" fi TIMEFORMAT=$' (%2lR real)' pivotSplits="minimum median maximum gcd indep" pivotActions="hilbert_slice" labelSplits="maxlabel varlabel minlabel $pivotSplits" labelActions="optimize irrdecom assoprimes alexdual" frobSplits="frob $labelSplits" frobActions="frob" bigattiSplits="median mostNGPure mostNGGcd mostNGTight typicalPure \ typicalGcd typicalTight typicalNGPure typicalNGGcd typicalNGTight \ someNGPure someNGGcd someNGTight" bigattiActions="hilbert_bigatti" params="$*" testhelper=../testScripts/testhelper paths="specialIdeals commonIdeals frob" runTests () { action="$1"; shift; splits="$*"; echo "*** $action"; for split in $splits; do echo -n " $split "; for path in $paths; do cd test/$path; ../testScripts/runtests $action $params -split $split; if [ $? != 0 ]; then exit 1; fi cd ../..; if [ "$testLevel" = "few" ]; then if [ "$action" != "frob" ]; then break; fi fi done echo; done } for action in $bigattiActions; do runTests "$action" $bigattiSplits done for action in $labelActions; do runTests "$action" $labelSplits done for action in $pivotActions; do runTests "$action" $pivotSplits done for action in $frobActions; do runTests "$action" $frobSplits done frobby-0.9.5/test/runTests000077500000000000000000000021411401527164200155440ustar00rootroot00000000000000#!/bin/bash if [ "$1" = "_few" ]; then testLevel="few"; shift; else testLevel="normal" fi TIMEFORMAT=$' (%2lR real)' normalTests="euler alexdual hilbert_deform hilbert_bigatti hilbert_slice \ dimension primdecom intersect assoprimes minimize \ irrdecom radical frob maxstandard optimize" specialTests="internal idealFormats polyFormats latticeFormats messages" params="$*" runNormalTests () { action="$1"; shift; path="$1"; shift; cd test/$path; ../testScripts/runtests $action $params if [ $? != 0 ]; then exit 1; fi cd ../..; } for t in $normalTests; do echo -n "$t " runNormalTests $t specialIdeals if [ "$testLevel" = "few" ]; then if [ "$t" != "frob" ]; then echo; continue; fi fi runNormalTests $t commonIdeals runNormalTests $t frob if [ "$t" == "euler" ]; then runNormalTests $t bigIdeals fi if [ -e "$t" ]; then runNormalTests $t $t fi echo done for t in $specialTests; do echo -n "$t " cd test/$t ./runtests $* if [ $? != 0 ]; then exit 1; fi echo cd ../.. done echo "All normal tests passed." frobby-0.9.5/test/specialIdeals/000077500000000000000000000000001401527164200165335ustar00rootroot00000000000000frobby-0.9.5/test/specialIdeals/descriptions000066400000000000000000000013551401527164200211700ustar00rootroot00000000000000These are edge cases, such as ideals having no variables or a very large number of variables, and special cases. e1 - no variables, zero ideal e2 - no variables, whole ring e3 - one variable, zero ideal e4 - one variable, whole ring e5 - one variable, that var as generator e6 - long variable name, large exponent e7 - large number of variables, various special exponents e8 - several variables, zero ideal e9 - three independent blocks of generators e10 - two variables, three generators e11 - square-free ideal, circle of three elements, one non-minimal generator e12 - two variables, zero ideal e13 - two variables, whole ring e14 - four variables, four pure powers e15 - no variables, redundant 1 generators e16 - several variables, whole ring frobby-0.9.5/test/specialIdeals/e1.alexdual000066400000000000000000000000451401527164200205600ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e1.assoprimes000066400000000000000000000000451401527164200211460ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e1.dim000066400000000000000000000000021401527164200175230ustar00rootroot000000000000000 frobby-0.9.5/test/specialIdeals/e1.euler000066400000000000000000000000021401527164200200660ustar00rootroot000000000000000 frobby-0.9.5/test/specialIdeals/e1.intersection000066400000000000000000000000421401527164200214640ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e1.irrdecom000066400000000000000000000000421401527164200205620ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e1.irrdecom_ideal000066400000000000000000000000451401527164200217230ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e1.maxstandard000066400000000000000000000000451401527164200212670ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e1.minimize000066400000000000000000000000421401527164200205770ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e1.multi000066400000000000000000000000221401527164200201060ustar00rootroot00000000000000R = QQ[]; p = 1; frobby-0.9.5/test/specialIdeals/e1.opt_irr000066400000000000000000000000471401527164200204410ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); 0 frobby-0.9.5/test/specialIdeals/e1.opt_irr_min000066400000000000000000000000471401527164200213040ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); 0 frobby-0.9.5/test/specialIdeals/e1.opt_std000066400000000000000000000000471401527164200204370ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); 0 frobby-0.9.5/test/specialIdeals/e1.opt_std_min000066400000000000000000000000471401527164200213020ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); 0 frobby-0.9.5/test/specialIdeals/e1.primdecom000066400000000000000000000000421401527164200207350ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e1.radical000066400000000000000000000000421401527164200203550ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e1.test000066400000000000000000000000421401527164200177350ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e1.uni000066400000000000000000000000231401527164200175500ustar00rootroot00000000000000R = QQ[t]; p = 1; frobby-0.9.5/test/specialIdeals/e10.alexdual000066400000000000000000000000631401527164200206400ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^3*b, a*b^3 ); frobby-0.9.5/test/specialIdeals/e10.assoprimes000066400000000000000000000000511401527164200212230ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a*b ); frobby-0.9.5/test/specialIdeals/e10.dim000066400000000000000000000000021401527164200176030ustar00rootroot000000000000000 frobby-0.9.5/test/specialIdeals/e10.euler000066400000000000000000000000021401527164200201460ustar00rootroot000000000000001 frobby-0.9.5/test/specialIdeals/e10.intersection000066400000000000000000000000671401527164200215530ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^3, a*b^2, b^4 ); frobby-0.9.5/test/specialIdeals/e10.irrdecom000066400000000000000000000001161401527164200206440ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^3, b^2 ); I = monomialIdeal( a, b^4 ); frobby-0.9.5/test/specialIdeals/e10.irrdecom_ideal000066400000000000000000000000651401527164200220050ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^3*b^2, a*b^4 ); frobby-0.9.5/test/specialIdeals/e10.maxstandard000066400000000000000000000000611401527164200213450ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^2*b, b^3 ); frobby-0.9.5/test/specialIdeals/e10.minimize000066400000000000000000000000671401527164200206660ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^3, a*b^2, b^4 ); frobby-0.9.5/test/specialIdeals/e10.multi000066400000000000000000000001041401527164200201670ustar00rootroot00000000000000R = QQ[a, b]; p = a^3*b^2 + -a^3 + a*b^4 + -a*b^2 + -b^4 + 1; frobby-0.9.5/test/specialIdeals/e10.opt_irr000066400000000000000000000000671401527164200205230ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^3*b^2, a*b^4 ); 5 frobby-0.9.5/test/specialIdeals/e10.opt_irr_min000066400000000000000000000000671401527164200213660ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^3*b^2, a*b^4 ); 5 frobby-0.9.5/test/specialIdeals/e10.opt_std000066400000000000000000000000631401527164200205150ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^2*b, b^3 ); 3 frobby-0.9.5/test/specialIdeals/e10.opt_std_min000066400000000000000000000000631401527164200213600ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^2*b, b^3 ); 3 frobby-0.9.5/test/specialIdeals/e10.primdecom000066400000000000000000000000671401527164200210240ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a^3, a*b^2, b^4 ); frobby-0.9.5/test/specialIdeals/e10.radical000066400000000000000000000000531401527164200204370ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a, b ); frobby-0.9.5/test/specialIdeals/e10.test000066400000000000000000000000671401527164200200240ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( a*b^2, a^3, b^4 ); frobby-0.9.5/test/specialIdeals/e10.uni000066400000000000000000000000561401527164200176360ustar00rootroot00000000000000R = QQ[t]; p = 2*t^5 + -t^4 + -2*t^3 + 1; frobby-0.9.5/test/specialIdeals/e11.alexdual000066400000000000000000000000701401527164200206370ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, a*c, b*c ); frobby-0.9.5/test/specialIdeals/e11.assoprimes000066400000000000000000000000701401527164200212250ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, a*c, b*c ); frobby-0.9.5/test/specialIdeals/e11.dim000066400000000000000000000000021401527164200176040ustar00rootroot000000000000001 frobby-0.9.5/test/specialIdeals/e11.euler000066400000000000000000000000021401527164200201470ustar00rootroot000000000000002 frobby-0.9.5/test/specialIdeals/e11.intersection000066400000000000000000000000701401527164200215460ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, a*c, b*c ); frobby-0.9.5/test/specialIdeals/e11.irrdecom000066400000000000000000000001501401527164200206430ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a, b ); I = monomialIdeal( a, c ); I = monomialIdeal( b, c ); frobby-0.9.5/test/specialIdeals/e11.irrdecom_ideal000066400000000000000000000000701401527164200220020ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, a*c, b*c ); frobby-0.9.5/test/specialIdeals/e11.maxstandard000066400000000000000000000000511401527164200213450ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e11.minimize000066400000000000000000000000701401527164200206610ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, a*c, b*c ); frobby-0.9.5/test/specialIdeals/e11.multi000066400000000000000000000000741401527164200201760ustar00rootroot00000000000000R = QQ[a, b, c]; p = 2*a*b*c + -a*b + -a*c + -b*c + 1; frobby-0.9.5/test/specialIdeals/e11.opt_irr000066400000000000000000000000721401527164200205200ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, a*c, b*c ); 2 frobby-0.9.5/test/specialIdeals/e11.opt_irr_min000066400000000000000000000000721401527164200213630ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, a*c, b*c ); 2 frobby-0.9.5/test/specialIdeals/e11.opt_std000066400000000000000000000000661401527164200205210ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e11.opt_std_min000066400000000000000000000000661401527164200213640ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e11.primdecom000066400000000000000000000001501401527164200210160ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a, b ); I = monomialIdeal( a, c ); I = monomialIdeal( b, c ); frobby-0.9.5/test/specialIdeals/e11.radical000066400000000000000000000000701401527164200204370ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, a*c, b*c ); frobby-0.9.5/test/specialIdeals/e11.test000066400000000000000000000001001401527164200200110ustar00rootroot00000000000000R = QQ[a, b, c]; I = monomialIdeal( a*b, b*c, a*c, a*b*c ); frobby-0.9.5/test/specialIdeals/e11.uni000066400000000000000000000000461401527164200176360ustar00rootroot00000000000000R = QQ[t]; p = 2*t^3 + -3*t^2 + 1; frobby-0.9.5/test/specialIdeals/e12.alexdual000066400000000000000000000000511401527164200206370ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e12.assoprimes000066400000000000000000000000511401527164200212250ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e12.dim000066400000000000000000000000021401527164200176050ustar00rootroot000000000000002 frobby-0.9.5/test/specialIdeals/e12.euler000066400000000000000000000000021401527164200201500ustar00rootroot000000000000000 frobby-0.9.5/test/specialIdeals/e12.intersection000066400000000000000000000000461401527164200215520ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e12.irrdecom000066400000000000000000000000461401527164200206500ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e12.irrdecom_ideal000066400000000000000000000000511401527164200220020ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e12.maxstandard000066400000000000000000000000461401527164200213520ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e12.minimize000066400000000000000000000000461401527164200206650ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e12.multi000066400000000000000000000000261401527164200201740ustar00rootroot00000000000000R = QQ[a, b]; p = 1; frobby-0.9.5/test/specialIdeals/e12.opt_irr000066400000000000000000000000531401527164200205200ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( 1_R ); 0 frobby-0.9.5/test/specialIdeals/e12.opt_irr_min000066400000000000000000000000531401527164200213630ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( 1_R ); 0 frobby-0.9.5/test/specialIdeals/e12.opt_std000066400000000000000000000000631401527164200205170ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e12.opt_std_min000066400000000000000000000000631401527164200213620ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e12.primdecom000066400000000000000000000000461401527164200210230ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e12.radical000066400000000000000000000000461401527164200204430ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e12.test000066400000000000000000000000461401527164200200230ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e12.uni000066400000000000000000000000231401527164200176320ustar00rootroot00000000000000R = QQ[t]; p = 1; frobby-0.9.5/test/specialIdeals/e13.alexdual000066400000000000000000000000461401527164200206440ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e13.assoprimes000066400000000000000000000000461401527164200212320ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e13.dim000066400000000000000000000000031401527164200176070ustar00rootroot00000000000000-1 frobby-0.9.5/test/specialIdeals/e13.euler000066400000000000000000000000031401527164200201520ustar00rootroot00000000000000-1 frobby-0.9.5/test/specialIdeals/e13.intersection000066400000000000000000000000511401527164200215470ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e13.irrdecom000066400000000000000000000000161401527164200206460ustar00rootroot00000000000000R = QQ[a, b]; frobby-0.9.5/test/specialIdeals/e13.irrdecom_ideal000066400000000000000000000000461401527164200220070ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e13.maxstandard000066400000000000000000000000461401527164200213530ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e13.minimize000066400000000000000000000000511401527164200206620ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e13.multi000066400000000000000000000000261401527164200201750ustar00rootroot00000000000000R = QQ[a, b]; p = 0; frobby-0.9.5/test/specialIdeals/e13.opt_irr000066400000000000000000000000631401527164200205220ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e13.opt_irr_min000066400000000000000000000000631401527164200213650ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e13.opt_std000066400000000000000000000000631401527164200205200ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e13.opt_std_min000066400000000000000000000000631401527164200213630ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e13.primdecom000066400000000000000000000000161401527164200210210ustar00rootroot00000000000000R = QQ[a, b]; frobby-0.9.5/test/specialIdeals/e13.radical000066400000000000000000000000511401527164200204400ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e13.test000066400000000000000000000000511401527164200200200ustar00rootroot00000000000000R = QQ[a, b]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e13.uni000066400000000000000000000000231401527164200176330ustar00rootroot00000000000000R = QQ[t]; p = 0; frobby-0.9.5/test/specialIdeals/e14.alexdual000066400000000000000000000000731401527164200206450ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; I = monomialIdeal( x1*x2*x3*x4 ); frobby-0.9.5/test/specialIdeals/e14.assoprimes000066400000000000000000000000731401527164200212330ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; I = monomialIdeal( x1*x2*x3*x4 ); frobby-0.9.5/test/specialIdeals/e14.dim000066400000000000000000000000021401527164200176070ustar00rootroot000000000000000 frobby-0.9.5/test/specialIdeals/e14.euler000066400000000000000000000000021401527164200201520ustar00rootroot000000000000001 frobby-0.9.5/test/specialIdeals/e14.intersection000066400000000000000000000001151401527164200215510ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; I = monomialIdeal( x1^10, x2^20, x3^30, x4^40 ); frobby-0.9.5/test/specialIdeals/e14.irrdecom000066400000000000000000000001151401527164200206470ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; I = monomialIdeal( x1^10, x2^20, x3^30, x4^40 ); frobby-0.9.5/test/specialIdeals/e14.irrdecom_ideal000066400000000000000000000001071401527164200220060ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; I = monomialIdeal( x1^10*x2^20*x3^30*x4^40 ); frobby-0.9.5/test/specialIdeals/e14.maxstandard000066400000000000000000000001061401527164200213510ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; I = monomialIdeal( x1^9*x2^19*x3^29*x4^39 ); frobby-0.9.5/test/specialIdeals/e14.minimize000066400000000000000000000001151401527164200206640ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; I = monomialIdeal( x1^10, x2^20, x3^30, x4^40 ); frobby-0.9.5/test/specialIdeals/e14.multi000066400000000000000000000004251401527164200202010ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; p = x1^10*x2^20*x3^30*x4^40 + -x1^10*x2^20*x3^30 + -x1^10*x2^20*x4^40 + x1^10*x2^20 + -x1^10*x3^30*x4^40 + x1^10*x3^30 + x1^10*x4^40 + -x1^10 + -x2^20*x3^30*x4^40 + x2^20*x3^30 + x2^20*x4^40 + -x2^20 + x3^30*x4^40 + -x3^30 + -x4^40 + 1; frobby-0.9.5/test/specialIdeals/e14.opt_irr000066400000000000000000000001131401527164200205170ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; I = monomialIdeal( x1^10*x2^20*x3^30*x4^40 ); 100 frobby-0.9.5/test/specialIdeals/e14.opt_irr_min000066400000000000000000000001131401527164200213620ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; I = monomialIdeal( x1^10*x2^20*x3^30*x4^40 ); 100 frobby-0.9.5/test/specialIdeals/e14.opt_std000066400000000000000000000001111401527164200205130ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; I = monomialIdeal( x1^9*x2^19*x3^29*x4^39 ); 96 frobby-0.9.5/test/specialIdeals/e14.opt_std_min000066400000000000000000000001111401527164200213560ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; I = monomialIdeal( x1^9*x2^19*x3^29*x4^39 ); 96 frobby-0.9.5/test/specialIdeals/e14.primdecom000066400000000000000000000001151401527164200210220ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; I = monomialIdeal( x1^10, x2^20, x3^30, x4^40 ); frobby-0.9.5/test/specialIdeals/e14.radical000066400000000000000000000001011401527164200204350ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; I = monomialIdeal( x1, x2, x3, x4 ); frobby-0.9.5/test/specialIdeals/e14.test000066400000000000000000000001151401527164200200220ustar00rootroot00000000000000R = QQ[x1, x2, x3, x4]; I = monomialIdeal( x1^10, x2^20, x3^30, x4^40 ); frobby-0.9.5/test/specialIdeals/e14.uni000066400000000000000000000001121401527164200176330ustar00rootroot00000000000000R = QQ[t]; p = t^100 + -t^90 + -t^80 + 2*t^50 + -t^20 + -t^10 + 1; frobby-0.9.5/test/specialIdeals/e15.alexdual000066400000000000000000000000421401527164200206420ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e15.assoprimes000066400000000000000000000000421401527164200212300ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e15.dim000066400000000000000000000000031401527164200176110ustar00rootroot00000000000000-1 frobby-0.9.5/test/specialIdeals/e15.euler000066400000000000000000000000031401527164200201540ustar00rootroot00000000000000-1 frobby-0.9.5/test/specialIdeals/e15.intersection000066400000000000000000000000451401527164200215540ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e15.irrdecom000066400000000000000000000000121401527164200206440ustar00rootroot00000000000000R = QQ[]; frobby-0.9.5/test/specialIdeals/e15.irrdecom_ideal000066400000000000000000000000421401527164200220050ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e15.maxstandard000066400000000000000000000000421401527164200213510ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e15.minimize000066400000000000000000000000451401527164200206670ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e15.multi000066400000000000000000000000221401527164200201730ustar00rootroot00000000000000R = QQ[]; p = 0; frobby-0.9.5/test/specialIdeals/e15.opt_irr000066400000000000000000000000571401527164200205270ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e15.opt_irr_min000066400000000000000000000000571401527164200213720ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e15.opt_std000066400000000000000000000000571401527164200205250ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e15.opt_std_min000066400000000000000000000000571401527164200213700ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e15.primdecom000066400000000000000000000000121401527164200210170ustar00rootroot00000000000000R = QQ[]; frobby-0.9.5/test/specialIdeals/e15.radical000066400000000000000000000000451401527164200204450ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e15.test000066400000000000000000000000751401527164200200300ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R, 1_R, 1_R, 1_R, 1_R ); frobby-0.9.5/test/specialIdeals/e15.uni000066400000000000000000000000231401527164200176350ustar00rootroot00000000000000R = QQ[t]; p = 0; frobby-0.9.5/test/specialIdeals/e16.alexdual000066400000000000000000000000651401527164200206500ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e16.assoprimes000066400000000000000000000000651401527164200212360ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e16.dim000066400000000000000000000000031401527164200176120ustar00rootroot00000000000000-1 frobby-0.9.5/test/specialIdeals/e16.euler000066400000000000000000000000031401527164200201550ustar00rootroot00000000000000-1 frobby-0.9.5/test/specialIdeals/e16.intersection000066400000000000000000000000701401527164200215530ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e16.irrdecom000066400000000000000000000000351401527164200206520ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; frobby-0.9.5/test/specialIdeals/e16.irrdecom_ideal000066400000000000000000000000651401527164200220130ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e16.maxstandard000066400000000000000000000000651401527164200213570ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e16.minimize000066400000000000000000000000701401527164200206660ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e16.multi000066400000000000000000000000451401527164200202010ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; p = 0; frobby-0.9.5/test/specialIdeals/e16.opt_irr000066400000000000000000000001021401527164200205170ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e16.opt_irr_min000066400000000000000000000001021401527164200213620ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e16.opt_std000066400000000000000000000001021401527164200205150ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e16.opt_std_min000066400000000000000000000001021401527164200213600ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e16.primdecom000066400000000000000000000000351401527164200210250ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; frobby-0.9.5/test/specialIdeals/e16.radical000066400000000000000000000000701401527164200204440ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e16.test000066400000000000000000000000701401527164200200240ustar00rootroot00000000000000R = QQ[a, b, c, d, e, f, g]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e16.uni000066400000000000000000000000231401527164200176360ustar00rootroot00000000000000R = QQ[t]; p = 0; frobby-0.9.5/test/specialIdeals/e2.alexdual000066400000000000000000000000421401527164200205560ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e2.assoprimes000066400000000000000000000000421401527164200211440ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e2.dim000066400000000000000000000000031401527164200175250ustar00rootroot00000000000000-1 frobby-0.9.5/test/specialIdeals/e2.euler000066400000000000000000000000031401527164200200700ustar00rootroot00000000000000-1 frobby-0.9.5/test/specialIdeals/e2.intersection000066400000000000000000000000451401527164200214700ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e2.irrdecom000066400000000000000000000000121401527164200205600ustar00rootroot00000000000000R = QQ[]; frobby-0.9.5/test/specialIdeals/e2.irrdecom_ideal000066400000000000000000000000421401527164200217210ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e2.maxstandard000066400000000000000000000000421401527164200212650ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e2.minimize000066400000000000000000000000451401527164200206030ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e2.multi000066400000000000000000000000221401527164200201070ustar00rootroot00000000000000R = QQ[]; p = 0; frobby-0.9.5/test/specialIdeals/e2.opt_irr000066400000000000000000000000571401527164200204430ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e2.opt_irr_min000066400000000000000000000000571401527164200213060ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e2.opt_std000066400000000000000000000000571401527164200204410ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e2.opt_std_min000066400000000000000000000000571401527164200213040ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e2.primdecom000066400000000000000000000000121401527164200207330ustar00rootroot00000000000000R = QQ[]; frobby-0.9.5/test/specialIdeals/e2.radical000066400000000000000000000000451401527164200203610ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e2.test000066400000000000000000000000451401527164200177410ustar00rootroot00000000000000R = QQ[]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e2.uni000066400000000000000000000000231401527164200175510ustar00rootroot00000000000000R = QQ[t]; p = 0; frobby-0.9.5/test/specialIdeals/e3.alexdual000066400000000000000000000000461401527164200205630ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e3.assoprimes000066400000000000000000000000461401527164200211510ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e3.dim000066400000000000000000000000021401527164200175250ustar00rootroot000000000000001 frobby-0.9.5/test/specialIdeals/e3.euler000066400000000000000000000000021401527164200200700ustar00rootroot000000000000000 frobby-0.9.5/test/specialIdeals/e3.intersection000066400000000000000000000000431401527164200214670ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e3.irrdecom000066400000000000000000000000431401527164200205650ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e3.irrdecom_ideal000066400000000000000000000000461401527164200217260ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e3.maxstandard000066400000000000000000000000431401527164200212670ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e3.minimize000066400000000000000000000000431401527164200206020ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e3.multi000066400000000000000000000000231401527164200201110ustar00rootroot00000000000000R = QQ[a]; p = 1; frobby-0.9.5/test/specialIdeals/e3.opt_irr000066400000000000000000000000501401527164200204350ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( 1_R ); 0 frobby-0.9.5/test/specialIdeals/e3.opt_irr_min000066400000000000000000000000501401527164200213000ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( 1_R ); 0 frobby-0.9.5/test/specialIdeals/e3.opt_std000066400000000000000000000000601401527164200204340ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e3.opt_std_min000066400000000000000000000000601401527164200212770ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e3.primdecom000066400000000000000000000000431401527164200207400ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e3.radical000066400000000000000000000000431401527164200203600ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e3.test000066400000000000000000000000431401527164200177400ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e3.uni000066400000000000000000000000231401527164200175520ustar00rootroot00000000000000R = QQ[t]; p = 1; frobby-0.9.5/test/specialIdeals/e4.alexdual000066400000000000000000000000431401527164200205610ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e4.assoprimes000066400000000000000000000000431401527164200211470ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e4.dim000066400000000000000000000000031401527164200175270ustar00rootroot00000000000000-1 frobby-0.9.5/test/specialIdeals/e4.euler000066400000000000000000000000031401527164200200720ustar00rootroot00000000000000-1 frobby-0.9.5/test/specialIdeals/e4.intersection000066400000000000000000000000461401527164200214730ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e4.irrdecom000066400000000000000000000000131401527164200205630ustar00rootroot00000000000000R = QQ[a]; frobby-0.9.5/test/specialIdeals/e4.irrdecom_ideal000066400000000000000000000000431401527164200217240ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e4.maxstandard000066400000000000000000000000431401527164200212700ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e4.minimize000066400000000000000000000000461401527164200206060ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e4.multi000066400000000000000000000000231401527164200201120ustar00rootroot00000000000000R = QQ[a]; p = 0; frobby-0.9.5/test/specialIdeals/e4.opt_irr000066400000000000000000000000601401527164200204370ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e4.opt_irr_min000066400000000000000000000000601401527164200213020ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e4.opt_std000066400000000000000000000000601401527164200204350ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e4.opt_std_min000066400000000000000000000000601401527164200213000ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e4.primdecom000066400000000000000000000000131401527164200207360ustar00rootroot00000000000000R = QQ[a]; frobby-0.9.5/test/specialIdeals/e4.radical000066400000000000000000000000461401527164200203640ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e4.test000066400000000000000000000000461401527164200177440ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e4.uni000066400000000000000000000000231401527164200175530ustar00rootroot00000000000000R = QQ[t]; p = 0; frobby-0.9.5/test/specialIdeals/e5.alexdual000066400000000000000000000000441401527164200205630ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( a ); frobby-0.9.5/test/specialIdeals/e5.assoprimes000066400000000000000000000000441401527164200211510ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( a ); frobby-0.9.5/test/specialIdeals/e5.dim000066400000000000000000000000021401527164200175270ustar00rootroot000000000000000 frobby-0.9.5/test/specialIdeals/e5.euler000066400000000000000000000000031401527164200200730ustar00rootroot00000000000000-1 frobby-0.9.5/test/specialIdeals/e5.intersection000066400000000000000000000000441401527164200214720ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( a ); frobby-0.9.5/test/specialIdeals/e5.irrdecom000066400000000000000000000000441401527164200205700ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( a ); frobby-0.9.5/test/specialIdeals/e5.irrdecom_ideal000066400000000000000000000000441401527164200217260ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( a ); frobby-0.9.5/test/specialIdeals/e5.maxstandard000066400000000000000000000000461401527164200212740ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e5.minimize000066400000000000000000000000441401527164200206050ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( a ); frobby-0.9.5/test/specialIdeals/e5.multi000066400000000000000000000000311401527164200201120ustar00rootroot00000000000000R = QQ[a]; p = -a + 1; frobby-0.9.5/test/specialIdeals/e5.opt_irr000066400000000000000000000000461401527164200204440ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( a ); 1 frobby-0.9.5/test/specialIdeals/e5.opt_irr_min000066400000000000000000000000461401527164200213070ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( a ); 1 frobby-0.9.5/test/specialIdeals/e5.opt_std000066400000000000000000000000501401527164200204350ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( 1_R ); 0 frobby-0.9.5/test/specialIdeals/e5.opt_std_min000066400000000000000000000000501401527164200213000ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( 1_R ); 0 frobby-0.9.5/test/specialIdeals/e5.primdecom000066400000000000000000000000441401527164200207430ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( a ); frobby-0.9.5/test/specialIdeals/e5.radical000066400000000000000000000000441401527164200203630ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( a ); frobby-0.9.5/test/specialIdeals/e5.test000066400000000000000000000000441401527164200177430ustar00rootroot00000000000000R = QQ[a]; I = monomialIdeal( a ); frobby-0.9.5/test/specialIdeals/e5.uni000066400000000000000000000000311401527164200175530ustar00rootroot00000000000000R = QQ[t]; p = -t + 1; frobby-0.9.5/test/specialIdeals/e6.alexdual000066400000000000000000000032711401527164200205710ustar00rootroot00000000000000R = QQ[a, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000, b, c]; I = monomialIdeal( a*b*c, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000*b*c, b^2*c, b*c^2 ); frobby-0.9.5/test/specialIdeals/e6.assoprimes000066400000000000000000000032571401527164200211630ustar00rootroot00000000000000R = QQ[a, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000, b, c]; I = monomialIdeal( a*b*c, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000*b*c, b*c ); frobby-0.9.5/test/specialIdeals/e6.dim000066400000000000000000000000021401527164200175300ustar00rootroot000000000000002 frobby-0.9.5/test/specialIdeals/e6.euler000066400000000000000000000000021401527164200200730ustar00rootroot000000000000001 frobby-0.9.5/test/specialIdeals/e6.intersection000066400000000000000000000052301401527164200214750ustar00rootroot00000000000000R = QQ[a, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000, b, c]; I = monomialIdeal( a*aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000^1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045345*b*c, b^2, c^2 ); frobby-0.9.5/test/specialIdeals/e6.irrdecom000066400000000000000000000053651401527164200206040ustar00rootroot00000000000000R = QQ[a, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000, b, c]; I = monomialIdeal( a, b^2, c^2 ); I = monomialIdeal( aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000^1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045345, b^2, c^2 ); I = monomialIdeal( b^2, c ); I = monomialIdeal( b, c^2 ); frobby-0.9.5/test/specialIdeals/e6.irrdecom_ideal000066400000000000000000000052521401527164200217350ustar00rootroot00000000000000R = QQ[a, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000, b, c]; I = monomialIdeal( a*b^2*c^2, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000^1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045345*b^2*c^2, b^2*c, b*c^2 ); frobby-0.9.5/test/specialIdeals/e6.maxstandard000066400000000000000000000015441401527164200213010ustar00rootroot00000000000000R = QQ[a, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000, b, c]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e6.minimize000066400000000000000000000052301401527164200206100ustar00rootroot00000000000000R = QQ[a, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000, b, c]; I = monomialIdeal( a*aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000^1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045345*b*c, b^2, c^2 ); frobby-0.9.5/test/specialIdeals/e6.multi000066400000000000000000000200511401527164200201170ustar00rootroot00000000000000R = QQ[a, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000, b, c]; p = -a*aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000^1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045345*b^2*c^2 + a*aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000^1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045345*b^2*c + a*aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000^1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045345*b*c^2 + -a*aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000^1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045345*b*c + b^2*c^2 + -b^2 + -c^2 + 1; frobby-0.9.5/test/specialIdeals/e6.opt_irr000066400000000000000000000071671401527164200204600ustar00rootroot00000000000000R = QQ[a, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000, b, c]; I = monomialIdeal( aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000^1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045345*b^2*c^2 ); 1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045349 frobby-0.9.5/test/specialIdeals/e6.opt_irr_min000066400000000000000000000015631401527164200213150ustar00rootroot00000000000000R = QQ[a, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000, b, c]; I = monomialIdeal( b^2*c, b*c^2 ); 3 frobby-0.9.5/test/specialIdeals/e6.opt_std000066400000000000000000000015611401527164200204460ustar00rootroot00000000000000R = QQ[a, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000, b, c]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e6.opt_std_min000066400000000000000000000015611401527164200213110ustar00rootroot00000000000000R = QQ[a, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000, b, c]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e6.primdecom000066400000000000000000000053361401527164200207550ustar00rootroot00000000000000R = QQ[a, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000, b, c]; I = monomialIdeal( a, b^2, c^2 ); I = monomialIdeal( aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000^1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045345, b^2, c^2 ); I = monomialIdeal( b^2, b*c, c^2 ); frobby-0.9.5/test/specialIdeals/e6.radical000066400000000000000000000015511401527164200203700ustar00rootroot00000000000000R = QQ[a, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000, b, c]; I = monomialIdeal( b, c ); frobby-0.9.5/test/specialIdeals/e6.test000066400000000000000000000052301401527164200177460ustar00rootroot00000000000000R = QQ[b, a, c, aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000]; I = monomialIdeal( b*a*c*aefawefalnnfaehfljawehfjkahwefkjhawkejfhklajewhflkawjehfewfwefadkjlfadsjkhfaafeafewagwhefghwegfkhgfhawgefkaewgfkjahwgefkjahwegfkjahwgefjhwaegfjkwahegfweagfjkweahgfkewhgfkjawegfwahgefjwahegfahwegfhawgefkhagwekjhfagwejhfgawkjehgfawjehgfakjwehgfkjawefdsfhajdkhfaksjdfhakjsldhfakjdhfkjasdhfkjashdflkjahdsljkfhasdljkfhalksjdfhalkjsdhfalkjsdhfalkjdshfakljsdhfkljadhflkajsdhfkljasdhfkljasdhfkljashdflkjahslkdjfhaslkjdhflakjsdhfakljhfalkwjfhakljwehfaliwuefgaiwluegfialwuegfaliwuehflaiuwehfaefglwyegflyawehfuawhefuiagf784hliafg237rtga3l8fhg123ulfhaluefhaliwuefhaliweufhaliweufhlaiweufhaliweufgaliwughawweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0000000000000000^1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045345, c^2, b^2 ); frobby-0.9.5/test/specialIdeals/e6.uni000066400000000000000000000057621401527164200175740ustar00rootroot00000000000000R = QQ[t]; p = -t^1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045350 + 2*t^1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045349 + -t^1234500000034859034850394850394850934850394850349850394853094850348503948530948509348503498530948530498539048530948590348503948503948509348509348509348509348503948503948530948503948509348509348509348530948539048530948530948530948530498530498530498530948503948530498530498530948530945830498530498530498530498530498530948503498530498530498530498503498530498530948530498530498530498530948530498530495830498530495304985304985309458304985304985039485390485039485093454859043853947583475837485748573957395739574857384579384759384759384759348579384759384759384759384759384759348759384753984759300000000000000000000000000000000000000000000534534531341234781634897162398476172841111111111111222222222222223333333333333344444444444445555555555555555666666666666667777777777777777888888888888888889999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045348 + t^4 + -2*t^2 + 1; frobby-0.9.5/test/specialIdeals/e8.alexdual000066400000000000000000000000761401527164200205730ustar00rootroot00000000000000R = QQ[e, i, o, q, r, t, u, w, y]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e8.assoprimes000066400000000000000000000000761401527164200211610ustar00rootroot00000000000000R = QQ[e, i, o, q, r, t, u, w, y]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e8.dim000066400000000000000000000000021401527164200175320ustar00rootroot000000000000009 frobby-0.9.5/test/specialIdeals/e8.euler000066400000000000000000000000021401527164200200750ustar00rootroot000000000000000 frobby-0.9.5/test/specialIdeals/e8.intersection000066400000000000000000000000731401527164200214770ustar00rootroot00000000000000R = QQ[e, i, o, q, r, t, u, w, y]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e8.irrdecom000066400000000000000000000000731401527164200205750ustar00rootroot00000000000000R = QQ[e, i, o, q, r, t, u, w, y]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e8.irrdecom_ideal000066400000000000000000000000761401527164200217360ustar00rootroot00000000000000R = QQ[e, i, o, q, r, t, u, w, y]; I = monomialIdeal( 1_R ); frobby-0.9.5/test/specialIdeals/e8.maxstandard000066400000000000000000000000731401527164200212770ustar00rootroot00000000000000R = QQ[e, i, o, q, r, t, u, w, y]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e8.minimize000066400000000000000000000000731401527164200206120ustar00rootroot00000000000000R = QQ[e, i, o, q, r, t, u, w, y]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e8.multi000066400000000000000000000000531401527164200201210ustar00rootroot00000000000000R = QQ[e, i, o, q, r, t, u, w, y]; p = 1; frobby-0.9.5/test/specialIdeals/e8.opt_irr000066400000000000000000000001001401527164200204360ustar00rootroot00000000000000R = QQ[e, i, o, q, r, t, u, w, y]; I = monomialIdeal( 1_R ); 0 frobby-0.9.5/test/specialIdeals/e8.opt_irr_min000066400000000000000000000001001401527164200213010ustar00rootroot00000000000000R = QQ[e, i, o, q, r, t, u, w, y]; I = monomialIdeal( 1_R ); 0 frobby-0.9.5/test/specialIdeals/e8.opt_std000066400000000000000000000001101401527164200204350ustar00rootroot00000000000000R = QQ[e, i, o, q, r, t, u, w, y]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e8.opt_std_min000066400000000000000000000001101401527164200213000ustar00rootroot00000000000000R = QQ[e, i, o, q, r, t, u, w, y]; I = monomialIdeal(0_R); no solution. frobby-0.9.5/test/specialIdeals/e8.primdecom000066400000000000000000000000731401527164200207500ustar00rootroot00000000000000R = QQ[e, i, o, q, r, t, u, w, y]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e8.radical000066400000000000000000000000731401527164200203700ustar00rootroot00000000000000R = QQ[e, i, o, q, r, t, u, w, y]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e8.test000066400000000000000000000000731401527164200177500ustar00rootroot00000000000000R = QQ[q, w, e, r, t, y, u, i, o]; I = monomialIdeal(0_R); frobby-0.9.5/test/specialIdeals/e8.uni000066400000000000000000000000231401527164200175570ustar00rootroot00000000000000R = QQ[t]; p = 1; frobby-0.9.5/test/specialIdeals/e9.alexdual000066400000000000000000000004051401527164200205700ustar00rootroot00000000000000R = QQ[a1, a2, b1, b2, c1, c2]; I = monomialIdeal( a1^3*a2*b1^3*b2*c1^3*c2, a1^3*a2*b1^3*b2*c1*c2^3, a1^3*a2*b1*b2^3*c1^3*c2, a1^3*a2*b1*b2^3*c1*c2^3, a1*a2^3*b1^3*b2*c1^3*c2, a1*a2^3*b1^3*b2*c1*c2^3, a1*a2^3*b1*b2^3*c1^3*c2, a1*a2^3*b1*b2^3*c1*c2^3 ); frobby-0.9.5/test/specialIdeals/e9.assoprimes000066400000000000000000000001111401527164200211500ustar00rootroot00000000000000R = QQ[a1, a2, b1, b2, c1, c2]; I = monomialIdeal( a1*a2*b1*b2*c1*c2 ); frobby-0.9.5/test/specialIdeals/e9.dim000066400000000000000000000000021401527164200175330ustar00rootroot000000000000000 frobby-0.9.5/test/specialIdeals/e9.euler000066400000000000000000000000021401527164200200760ustar00rootroot000000000000001 frobby-0.9.5/test/specialIdeals/e9.intersection000066400000000000000000000002071401527164200214770ustar00rootroot00000000000000R = QQ[a1, a2, b1, b2, c1, c2]; I = monomialIdeal( a1^4, a1^2*a2^3, a2^5, b1^8, b1^6*b2^7, b2^9, c1^12, c1^10*c2^11, c2^13 ); frobby-0.9.5/test/specialIdeals/e9.irrdecom000066400000000000000000000010501401527164200205720ustar00rootroot00000000000000R = QQ[a1, a2, b1, b2, c1, c2]; I = monomialIdeal( a1^4, a2^3, b1^8, b2^7, c1^12, c2^11 ); I = monomialIdeal( a1^4, a2^3, b1^8, b2^7, c1^10, c2^13 ); I = monomialIdeal( a1^4, a2^3, b1^6, b2^9, c1^12, c2^11 ); I = monomialIdeal( a1^4, a2^3, b1^6, b2^9, c1^10, c2^13 ); I = monomialIdeal( a1^2, a2^5, b1^8, b2^7, c1^12, c2^11 ); I = monomialIdeal( a1^2, a2^5, b1^8, b2^7, c1^10, c2^13 ); I = monomialIdeal( a1^2, a2^5, b1^6, b2^9, c1^12, c2^11 ); I = monomialIdeal( a1^2, a2^5, b1^6, b2^9, c1^10, c2^13 ); frobby-0.9.5/test/specialIdeals/e9.irrdecom_ideal000066400000000000000000000005051401527164200217340ustar00rootroot00000000000000R = QQ[a1, a2, b1, b2, c1, c2]; I = monomialIdeal( a1^4*a2^3*b1^8*b2^7*c1^12*c2^11, a1^4*a2^3*b1^8*b2^7*c1^10*c2^13, a1^4*a2^3*b1^6*b2^9*c1^12*c2^11, a1^4*a2^3*b1^6*b2^9*c1^10*c2^13, a1^2*a2^5*b1^8*b2^7*c1^12*c2^11, a1^2*a2^5*b1^8*b2^7*c1^10*c2^13, a1^2*a2^5*b1^6*b2^9*c1^12*c2^11, a1^2*a2^5*b1^6*b2^9*c1^10*c2^13 ); frobby-0.9.5/test/specialIdeals/e9.maxstandard000066400000000000000000000004711401527164200213020ustar00rootroot00000000000000R = QQ[a1, a2, b1, b2, c1, c2]; I = monomialIdeal( a1^3*a2^2*b1^7*b2^6*c1^11*c2^10, a1^3*a2^2*b1^7*b2^6*c1^9*c2^12, a1^3*a2^2*b1^5*b2^8*c1^11*c2^10, a1^3*a2^2*b1^5*b2^8*c1^9*c2^12, a1*a2^4*b1^7*b2^6*c1^11*c2^10, a1*a2^4*b1^7*b2^6*c1^9*c2^12, a1*a2^4*b1^5*b2^8*c1^11*c2^10, a1*a2^4*b1^5*b2^8*c1^9*c2^12 ); frobby-0.9.5/test/specialIdeals/e9.minimize000066400000000000000000000002071401527164200206120ustar00rootroot00000000000000R = QQ[a1, a2, b1, b2, c1, c2]; I = monomialIdeal( a1^4, a1^2*a2^3, a2^5, b1^8, b1^6*b2^7, b2^9, c1^12, c1^10*c2^11, c2^13 ); frobby-0.9.5/test/specialIdeals/e9.multi000066400000000000000000000124311401527164200201250ustar00rootroot00000000000000R = QQ[a1, a2, b1, b2, c1, c2]; p = a1^4*a2^3*b1^8*b2^7*c1^12*c2^11 + -a1^4*a2^3*b1^8*b2^7*c1^12 + a1^4*a2^3*b1^8*b2^7*c1^10*c2^13 + -a1^4*a2^3*b1^8*b2^7*c1^10*c2^11 + -a1^4*a2^3*b1^8*b2^7*c2^13 + a1^4*a2^3*b1^8*b2^7 + -a1^4*a2^3*b1^8*c1^12*c2^11 + a1^4*a2^3*b1^8*c1^12 + -a1^4*a2^3*b1^8*c1^10*c2^13 + a1^4*a2^3*b1^8*c1^10*c2^11 + a1^4*a2^3*b1^8*c2^13 + -a1^4*a2^3*b1^8 + a1^4*a2^3*b1^6*b2^9*c1^12*c2^11 + -a1^4*a2^3*b1^6*b2^9*c1^12 + a1^4*a2^3*b1^6*b2^9*c1^10*c2^13 + -a1^4*a2^3*b1^6*b2^9*c1^10*c2^11 + -a1^4*a2^3*b1^6*b2^9*c2^13 + a1^4*a2^3*b1^6*b2^9 + -a1^4*a2^3*b1^6*b2^7*c1^12*c2^11 + a1^4*a2^3*b1^6*b2^7*c1^12 + -a1^4*a2^3*b1^6*b2^7*c1^10*c2^13 + a1^4*a2^3*b1^6*b2^7*c1^10*c2^11 + a1^4*a2^3*b1^6*b2^7*c2^13 + -a1^4*a2^3*b1^6*b2^7 + -a1^4*a2^3*b2^9*c1^12*c2^11 + a1^4*a2^3*b2^9*c1^12 + -a1^4*a2^3*b2^9*c1^10*c2^13 + a1^4*a2^3*b2^9*c1^10*c2^11 + a1^4*a2^3*b2^9*c2^13 + -a1^4*a2^3*b2^9 + a1^4*a2^3*c1^12*c2^11 + -a1^4*a2^3*c1^12 + a1^4*a2^3*c1^10*c2^13 + -a1^4*a2^3*c1^10*c2^11 + -a1^4*a2^3*c2^13 + a1^4*a2^3 + -a1^4*b1^8*b2^7*c1^12*c2^11 + a1^4*b1^8*b2^7*c1^12 + -a1^4*b1^8*b2^7*c1^10*c2^13 + a1^4*b1^8*b2^7*c1^10*c2^11 + a1^4*b1^8*b2^7*c2^13 + -a1^4*b1^8*b2^7 + a1^4*b1^8*c1^12*c2^11 + -a1^4*b1^8*c1^12 + a1^4*b1^8*c1^10*c2^13 + -a1^4*b1^8*c1^10*c2^11 + -a1^4*b1^8*c2^13 + a1^4*b1^8 + -a1^4*b1^6*b2^9*c1^12*c2^11 + a1^4*b1^6*b2^9*c1^12 + -a1^4*b1^6*b2^9*c1^10*c2^13 + a1^4*b1^6*b2^9*c1^10*c2^11 + a1^4*b1^6*b2^9*c2^13 + -a1^4*b1^6*b2^9 + a1^4*b1^6*b2^7*c1^12*c2^11 + -a1^4*b1^6*b2^7*c1^12 + a1^4*b1^6*b2^7*c1^10*c2^13 + -a1^4*b1^6*b2^7*c1^10*c2^11 + -a1^4*b1^6*b2^7*c2^13 + a1^4*b1^6*b2^7 + a1^4*b2^9*c1^12*c2^11 + -a1^4*b2^9*c1^12 + a1^4*b2^9*c1^10*c2^13 + -a1^4*b2^9*c1^10*c2^11 + -a1^4*b2^9*c2^13 + a1^4*b2^9 + -a1^4*c1^12*c2^11 + a1^4*c1^12 + -a1^4*c1^10*c2^13 + a1^4*c1^10*c2^11 + a1^4*c2^13 + -a1^4 + a1^2*a2^5*b1^8*b2^7*c1^12*c2^11 + -a1^2*a2^5*b1^8*b2^7*c1^12 + a1^2*a2^5*b1^8*b2^7*c1^10*c2^13 + -a1^2*a2^5*b1^8*b2^7*c1^10*c2^11 + -a1^2*a2^5*b1^8*b2^7*c2^13 + a1^2*a2^5*b1^8*b2^7 + -a1^2*a2^5*b1^8*c1^12*c2^11 + a1^2*a2^5*b1^8*c1^12 + -a1^2*a2^5*b1^8*c1^10*c2^13 + a1^2*a2^5*b1^8*c1^10*c2^11 + a1^2*a2^5*b1^8*c2^13 + -a1^2*a2^5*b1^8 + a1^2*a2^5*b1^6*b2^9*c1^12*c2^11 + -a1^2*a2^5*b1^6*b2^9*c1^12 + a1^2*a2^5*b1^6*b2^9*c1^10*c2^13 + -a1^2*a2^5*b1^6*b2^9*c1^10*c2^11 + -a1^2*a2^5*b1^6*b2^9*c2^13 + a1^2*a2^5*b1^6*b2^9 + -a1^2*a2^5*b1^6*b2^7*c1^12*c2^11 + a1^2*a2^5*b1^6*b2^7*c1^12 + -a1^2*a2^5*b1^6*b2^7*c1^10*c2^13 + a1^2*a2^5*b1^6*b2^7*c1^10*c2^11 + a1^2*a2^5*b1^6*b2^7*c2^13 + -a1^2*a2^5*b1^6*b2^7 + -a1^2*a2^5*b2^9*c1^12*c2^11 + a1^2*a2^5*b2^9*c1^12 + -a1^2*a2^5*b2^9*c1^10*c2^13 + a1^2*a2^5*b2^9*c1^10*c2^11 + a1^2*a2^5*b2^9*c2^13 + -a1^2*a2^5*b2^9 + a1^2*a2^5*c1^12*c2^11 + -a1^2*a2^5*c1^12 + a1^2*a2^5*c1^10*c2^13 + -a1^2*a2^5*c1^10*c2^11 + -a1^2*a2^5*c2^13 + a1^2*a2^5 + -a1^2*a2^3*b1^8*b2^7*c1^12*c2^11 + a1^2*a2^3*b1^8*b2^7*c1^12 + -a1^2*a2^3*b1^8*b2^7*c1^10*c2^13 + a1^2*a2^3*b1^8*b2^7*c1^10*c2^11 + a1^2*a2^3*b1^8*b2^7*c2^13 + -a1^2*a2^3*b1^8*b2^7 + a1^2*a2^3*b1^8*c1^12*c2^11 + -a1^2*a2^3*b1^8*c1^12 + a1^2*a2^3*b1^8*c1^10*c2^13 + -a1^2*a2^3*b1^8*c1^10*c2^11 + -a1^2*a2^3*b1^8*c2^13 + a1^2*a2^3*b1^8 + -a1^2*a2^3*b1^6*b2^9*c1^12*c2^11 + a1^2*a2^3*b1^6*b2^9*c1^12 + -a1^2*a2^3*b1^6*b2^9*c1^10*c2^13 + a1^2*a2^3*b1^6*b2^9*c1^10*c2^11 + a1^2*a2^3*b1^6*b2^9*c2^13 + -a1^2*a2^3*b1^6*b2^9 + a1^2*a2^3*b1^6*b2^7*c1^12*c2^11 + -a1^2*a2^3*b1^6*b2^7*c1^12 + a1^2*a2^3*b1^6*b2^7*c1^10*c2^13 + -a1^2*a2^3*b1^6*b2^7*c1^10*c2^11 + -a1^2*a2^3*b1^6*b2^7*c2^13 + a1^2*a2^3*b1^6*b2^7 + a1^2*a2^3*b2^9*c1^12*c2^11 + -a1^2*a2^3*b2^9*c1^12 + a1^2*a2^3*b2^9*c1^10*c2^13 + -a1^2*a2^3*b2^9*c1^10*c2^11 + -a1^2*a2^3*b2^9*c2^13 + a1^2*a2^3*b2^9 + -a1^2*a2^3*c1^12*c2^11 + a1^2*a2^3*c1^12 + -a1^2*a2^3*c1^10*c2^13 + a1^2*a2^3*c1^10*c2^11 + a1^2*a2^3*c2^13 + -a1^2*a2^3 + -a2^5*b1^8*b2^7*c1^12*c2^11 + a2^5*b1^8*b2^7*c1^12 + -a2^5*b1^8*b2^7*c1^10*c2^13 + a2^5*b1^8*b2^7*c1^10*c2^11 + a2^5*b1^8*b2^7*c2^13 + -a2^5*b1^8*b2^7 + a2^5*b1^8*c1^12*c2^11 + -a2^5*b1^8*c1^12 + a2^5*b1^8*c1^10*c2^13 + -a2^5*b1^8*c1^10*c2^11 + -a2^5*b1^8*c2^13 + a2^5*b1^8 + -a2^5*b1^6*b2^9*c1^12*c2^11 + a2^5*b1^6*b2^9*c1^12 + -a2^5*b1^6*b2^9*c1^10*c2^13 + a2^5*b1^6*b2^9*c1^10*c2^11 + a2^5*b1^6*b2^9*c2^13 + -a2^5*b1^6*b2^9 + a2^5*b1^6*b2^7*c1^12*c2^11 + -a2^5*b1^6*b2^7*c1^12 + a2^5*b1^6*b2^7*c1^10*c2^13 + -a2^5*b1^6*b2^7*c1^10*c2^11 + -a2^5*b1^6*b2^7*c2^13 + a2^5*b1^6*b2^7 + a2^5*b2^9*c1^12*c2^11 + -a2^5*b2^9*c1^12 + a2^5*b2^9*c1^10*c2^13 + -a2^5*b2^9*c1^10*c2^11 + -a2^5*b2^9*c2^13 + a2^5*b2^9 + -a2^5*c1^12*c2^11 + a2^5*c1^12 + -a2^5*c1^10*c2^13 + a2^5*c1^10*c2^11 + a2^5*c2^13 + -a2^5 + b1^8*b2^7*c1^12*c2^11 + -b1^8*b2^7*c1^12 + b1^8*b2^7*c1^10*c2^13 + -b1^8*b2^7*c1^10*c2^11 + -b1^8*b2^7*c2^13 + b1^8*b2^7 + -b1^8*c1^12*c2^11 + b1^8*c1^12 + -b1^8*c1^10*c2^13 + b1^8*c1^10*c2^11 + b1^8*c2^13 + -b1^8 + b1^6*b2^9*c1^12*c2^11 + -b1^6*b2^9*c1^12 + b1^6*b2^9*c1^10*c2^13 + -b1^6*b2^9*c1^10*c2^11 + -b1^6*b2^9*c2^13 + b1^6*b2^9 + -b1^6*b2^7*c1^12*c2^11 + b1^6*b2^7*c1^12 + -b1^6*b2^7*c1^10*c2^13 + b1^6*b2^7*c1^10*c2^11 + b1^6*b2^7*c2^13 + -b1^6*b2^7 + -b2^9*c1^12*c2^11 + b2^9*c1^12 + -b2^9*c1^10*c2^13 + b2^9*c1^10*c2^11 + b2^9*c2^13 + -b2^9 + c1^12*c2^11 + -c1^12 + c1^10*c2^13 + -c1^10*c2^11 + -c2^13 + 1; frobby-0.9.5/test/specialIdeals/e9.opt_irr000066400000000000000000000005101401527164200204440ustar00rootroot00000000000000R = QQ[a1, a2, b1, b2, c1, c2]; I = monomialIdeal( a1^4*a2^3*b1^8*b2^7*c1^12*c2^11, a1^4*a2^3*b1^8*b2^7*c1^10*c2^13, a1^4*a2^3*b1^6*b2^9*c1^12*c2^11, a1^4*a2^3*b1^6*b2^9*c1^10*c2^13, a1^2*a2^5*b1^8*b2^7*c1^12*c2^11, a1^2*a2^5*b1^8*b2^7*c1^10*c2^13, a1^2*a2^5*b1^6*b2^9*c1^12*c2^11, a1^2*a2^5*b1^6*b2^9*c1^10*c2^13 ); 45 frobby-0.9.5/test/specialIdeals/e9.opt_irr_min000066400000000000000000000005101401527164200213070ustar00rootroot00000000000000R = QQ[a1, a2, b1, b2, c1, c2]; I = monomialIdeal( a1^4*a2^3*b1^8*b2^7*c1^12*c2^11, a1^4*a2^3*b1^8*b2^7*c1^10*c2^13, a1^4*a2^3*b1^6*b2^9*c1^12*c2^11, a1^4*a2^3*b1^6*b2^9*c1^10*c2^13, a1^2*a2^5*b1^8*b2^7*c1^12*c2^11, a1^2*a2^5*b1^8*b2^7*c1^10*c2^13, a1^2*a2^5*b1^6*b2^9*c1^12*c2^11, a1^2*a2^5*b1^6*b2^9*c1^10*c2^13 ); 45 frobby-0.9.5/test/specialIdeals/e9.opt_std000066400000000000000000000004741401527164200204530ustar00rootroot00000000000000R = QQ[a1, a2, b1, b2, c1, c2]; I = monomialIdeal( a1^3*a2^2*b1^7*b2^6*c1^11*c2^10, a1^3*a2^2*b1^7*b2^6*c1^9*c2^12, a1^3*a2^2*b1^5*b2^8*c1^11*c2^10, a1^3*a2^2*b1^5*b2^8*c1^9*c2^12, a1*a2^4*b1^7*b2^6*c1^11*c2^10, a1*a2^4*b1^7*b2^6*c1^9*c2^12, a1*a2^4*b1^5*b2^8*c1^11*c2^10, a1*a2^4*b1^5*b2^8*c1^9*c2^12 ); 39 frobby-0.9.5/test/specialIdeals/e9.opt_std_min000066400000000000000000000004741401527164200213160ustar00rootroot00000000000000R = QQ[a1, a2, b1, b2, c1, c2]; I = monomialIdeal( a1^3*a2^2*b1^7*b2^6*c1^11*c2^10, a1^3*a2^2*b1^7*b2^6*c1^9*c2^12, a1^3*a2^2*b1^5*b2^8*c1^11*c2^10, a1^3*a2^2*b1^5*b2^8*c1^9*c2^12, a1*a2^4*b1^7*b2^6*c1^11*c2^10, a1*a2^4*b1^7*b2^6*c1^9*c2^12, a1*a2^4*b1^5*b2^8*c1^11*c2^10, a1*a2^4*b1^5*b2^8*c1^9*c2^12 ); 39 frobby-0.9.5/test/specialIdeals/e9.primdecom000066400000000000000000000002071401527164200207500ustar00rootroot00000000000000R = QQ[a1, a2, b1, b2, c1, c2]; I = monomialIdeal( a1^4, a1^2*a2^3, a2^5, b1^8, b1^6*b2^7, b2^9, c1^12, c1^10*c2^11, c2^13 ); frobby-0.9.5/test/specialIdeals/e9.radical000066400000000000000000000001231401527164200203650ustar00rootroot00000000000000R = QQ[a1, a2, b1, b2, c1, c2]; I = monomialIdeal( a1, a2, b1, b2, c1, c2 ); frobby-0.9.5/test/specialIdeals/e9.test000066400000000000000000000002071401527164200177500ustar00rootroot00000000000000R = QQ[a1, c1, a2, b1, b2, c2]; I = monomialIdeal( a1^2*a2^3, a1^4, a2^5, b1^6*b2^7, b1^8, b2^9, c1^10*c2^11, c1^12, c2^13 ); frobby-0.9.5/test/specialIdeals/e9.uni000066400000000000000000000005731401527164200175720ustar00rootroot00000000000000R = QQ[t]; p = 8*t^45 + -16*t^43 + -4*t^42 + 10*t^41 + 4*t^40 + -6*t^39 + -t^38 + 6*t^37 + 4*t^36 + -4*t^35 + -6*t^34 + 5*t^33 + 6*t^32 + -2*t^31 + 2*t^30 + 2*t^29 + -4*t^28 + -4*t^27 + -2*t^26 + -2*t^25 + -t^24 + 2*t^23 + 5*t^22 + t^21 + -7*t^20 + -4*t^19 + 4*t^18 + 4*t^17 + -t^16 + 2*t^14 + t^13 + -t^9 + -t^8 + 2*t^7 + -2*t^5 + -t^4 + 1; frobby-0.9.5/test/testScripts/000077500000000000000000000000001401527164200163205ustar00rootroot00000000000000frobby-0.9.5/test/testScripts/run_alexdual_test000077500000000000000000000017241401527164200217740ustar00rootroot00000000000000#!/usr/bin/env sh frobby=../../bin/frobby testhelper=../testScripts/testhelper test="$1" shift if [ -e "$test.alexdual_point" ]; then input="$test.test $test.alexdual_point"; else input="$test.test" fi if [ "$1" = "_full" ]; then shift; # Check -canon agrees with transform. $testhelper transform $test.alexdual $test.alexdual -canon if [ $? != 0 ]; then exit 1; fi # Check that double dual on the same point is identity. $frobby transform < `ls $test.*test` > /tmp/$test.test \ -canon -minimize 2>/dev/null if [ -e "$test.alexdual_point" ]; then pointFile="$test.alexdual_point"; else $frobby analyze < /tmp/$test.test 2>/dev/null > /tmp/alexdual_point \ -lcm -summaryLevel 0 pointFile="/tmp/alexdual_point"; fi $testhelper alexdual "$test.alexdual $pointFile" /tmp/$test.test $* -canon if [ $? != 0 ]; then exit 1; fi rm -f /tmp/$test.test /tmp/alexdual_point fi $testhelper alexdual "$input" $test.alexdual $* -canon frobby-0.9.5/test/testScripts/run_assoprimes_test000077500000000000000000000010201401527164200223470ustar00rootroot00000000000000#!/usr/bin/env sh frobby=../../bin/frobby testhelper=../testScripts/testhelper test="$1" shift if [ "$1" = "_full" ]; then shift; # Check -canon agrees with transform. $testhelper transform $test.assoprimes $test.assoprimes -canon if [ $? != 0 ]; then exit 1; fi # Check that radical of Alexander dual equals associated primes. $testhelper transform $test.alexdual $test.assoprimes \ -radical -unique -canon if [ $? != 0 ]; then exit 1; fi fi $testhelper assoprimes $test.*test $test.assoprimes $* -canon frobby-0.9.5/test/testScripts/run_dimension_test000077500000000000000000000013211401527164200221530ustar00rootroot00000000000000#!/bin/bash testHelper=../testScripts/testhelper frobby=../../bin/frobby test="$1" shift inputFile="$test.test" if [ "$1" = "_full" ]; then shift; $testHelper dimension $test.test $test.dim $* -useSlice if [ $? != 0 ]; then exit 1; fi $frobby transform < $test.test -radical -minimize > /tmp/frobbyTestTmp 2> /dev/null $testHelper dimension /tmp/frobbyTestTmp $test.dim $* -squareFreeAndMinimal if [ $? != 0 ]; then rm /tmp/frobbyTestTmp; exit 1; fi $testHelper dimension /tmp/frobbyTestTmp $test.dim $* -useSlice -squareFreeAndMinimal if [ $? != 0 ]; then rm /tmp/frobbyTestTmp; exit 1; fi rm /tmp/frobbyTestTmp; fi $testHelper dimension $test.test $test.dim $* if [ $? != 0 ]; then exit 1; fi frobby-0.9.5/test/testScripts/run_euler_test000077500000000000000000000060441401527164200213110ustar00rootroot00000000000000#!/usr/bin/env sh frobby=../../bin/frobby testhelper=../testScripts/testhelper test="$1" tmpFile=./frobbyEulerRadicalTmp tmpFileInverted=./frobbyEulerRadicalInvertedTmp tmpFileTransposed=./frobbyEulerRadicalTransposedTmp genPivots="rarevar popvar maxsupp minsupp any random rarest raremax" stdPivots="popvar rarevar popgcd any random" shift $frobby transform -radical -minimize -trimVariables < $test.test > $tmpFile \ 2> /dev/null if [ "$1" = "_full" ]; then shift; # try hybrid too $testhelper euler $tmpFile $test.euler -pivot hybrid $* if [ $? != 0 ]; then exit 1; fi # inverting twice should give the same answer $frobby transform -swap01 < $tmpFile > $tmpFileInverted 2>/dev/null $testhelper euler $tmpFileInverted $test.euler -swap01 $* if [ $? != 0 ]; then exit 1; fi # no transpose $testhelper euler $tmpFile $test.euler -pivot gen -autotranspose off $* if [ $? != 0 ]; then exit 1; fi $testhelper euler $tmpFile $test.euler -pivot std -autotranspose off $* if [ $? != 0 ]; then exit 1; fi $testhelper euler $tmpFile $test.euler -pivot hybrid -autotranspose off $* if [ $? != 0 ]; then exit 1; fi # e2, e4, e13, e15, e16 and t24 are mathematical counterexamples # to the transpose having the same Euler characteristic. if [ "$test" != "e2" ]; then if [ "$test" != "e4" ]; then if [ "$test" != "e13" ]; then if [ "$test" != "e15" ]; then if [ "$test" != "e16" ]; then if [ "$test" != "t24" ]; then # forced transpose $frobby transform -transpose < $tmpFile > $tmpFileTransposed 2>/dev/null $testhelper euler $tmpFileTransposed $test.euler \ -pivot gen -autotranspose off $* if [ $? != 0 ]; then exit 1; fi $testhelper euler $tmpFileTransposed $test.euler \ -pivot std -autotranspose off $* if [ $? != 0 ]; then exit 1; fi $testhelper euler $tmpFileTransposed $test.euler \ -pivot hybrid -autotranspose off $* if [ $? != 0 ]; then exit 1; fi fi fi fi fi fi fi # try gen pivot selection strategies for genp in $genPivots; do $testhelper euler $tmpFile $test.euler -pivot gen -genPivot $genp $* if [ $? != 0 ]; then exit 1; fi $testhelper euler $tmpFile $test.euler -pivot gen -genPivot $genp -stats $* if [ $? != 0 ]; then exit 1; fi $testhelper euler $tmpFile $test.euler -pivot gen \ -genPivot ${genp}_maxsupp_${genp}_any $* # composite strategy if [ $? != 0 ]; then exit 1; fi done # try std pivot selection strategies for stdp in $stdPivots; do $testhelper euler $tmpFile $test.euler -pivot std -stdPivot $stdp $* if [ $? != 0 ]; then exit 1; fi $testhelper euler $tmpFile $test.euler -pivot std -stdPivot $stdp -stats $* if [ $? != 0 ]; then exit 1; fi $testhelper euler $tmpFile $test.euler -pivot std \ -stdPivot widen_${stdp} $* # composite strategy if [ $? != 0 ]; then exit 1; fi done fi $testhelper euler $tmpFile $test.euler -pivot gen $* if [ $? != 0 ]; then exit 1; fi $testhelper euler $tmpFile $test.euler -pivot std $* if [ $? != 0 ]; then exit 1; fi rm -f $tmpFile $tmpFileInverted $tmpFileTransposed frobby-0.9.5/test/testScripts/run_frob_test000077500000000000000000000012771401527164200211300ustar00rootroot00000000000000#!/bin/bash testName="$1" shift if [ ! -e "$testName.frobInstance" ]; then exit 0; fi inputFile="$testName.test $testName.frobInstance" outputFile="$testName.frobNumber" if [ "$1" = "_full" ]; then shift; # Test the legacy frobgrob action. ../testScripts/testhelper frobgrob "$inputFile" $outputFile $* if [ $? != 0 ]; then exit 1; fi # Try it without the bound optimization. ../testScripts/testhelper optimize "$inputFile" $outputFile $* -maxStandard -displayLevel 0 -chopFirstAndSubtract -bound off if [ $? != 0 ]; then exit 1; fi fi ../testScripts/testhelper optimize "$inputFile" $outputFile $* -maxStandard -displayLevel 0 -chopFirstAndSubtract if [ $? != 0 ]; then exit 1; fi frobby-0.9.5/test/testScripts/run_hilbert_bigatti_test000077500000000000000000000015731401527164200233330ustar00rootroot00000000000000#!/usr/bin/env sh frobby=../../bin/frobby testhelper=../testScripts/testhelper test="$1" shift if [ "$1" = "_full" ]; then shift; # Check that -canon agrees with ptransform on multivariate output. $testhelper ptransform $test.multi $test.multi -canon if [ $? != 0 ]; then exit 1; fi # Check that -canon agrees with ptransform on univariate output. $testhelper ptransform $test.uni $test.uni -canon if [ $? != 0 ]; then exit 1; fi # Check without genericBase and simplify. $testhelper hilbert $test.*test $test.multi $* -genericBase off -simplify off -canon -oformat m2 if [ $? != 0 ]; then exit 1; fi fi $testhelper hilbert $test.*test $test.multi $* -univariate off -canon -algorithm bigatti -oformat m2 if [ $? != 0 ]; then exit 1; fi $testhelper hilbert $test.*test $test.uni $* -univariate -algorithm bigatti -canon -oformat m2 if [ $? != 0 ]; then exit 1; fi frobby-0.9.5/test/testScripts/run_hilbert_deform_test000077500000000000000000000013071401527164200231570ustar00rootroot00000000000000#!/usr/bin/env sh frobby=../../bin/frobby testhelper=../testScripts/testhelper test="$1" shift if [ "$1" = "_full" ]; then shift; # Check that -canon agrees with ptransform on multivariate output. $testhelper ptransform $test.multi $test.multi -canon if [ $? != 0 ]; then exit 1; fi # Check that -canon agrees with ptransform on univariate output. $testhelper ptransform $test.uni $test.uni -canon if [ $? != 0 ]; then exit 1; fi fi $testhelper hilbert $test.*test $test.multi $* -univariate off -canon -algorithm deform -oformat m2 if [ $? != 0 ]; then exit 1; fi $testhelper hilbert $test.*test $test.uni $* -univariate -algorithm deform -canon -oformat m2 if [ $? != 0 ]; then exit 1; fi frobby-0.9.5/test/testScripts/run_hilbert_slice_test000077500000000000000000000013051401527164200230000ustar00rootroot00000000000000#!/usr/bin/env sh frobby=../../bin/frobby testhelper=../testScripts/testhelper test="$1" shift if [ "$1" = "_full" ]; then shift; # Check that -canon agrees with ptransform on multivariate output. $testhelper ptransform $test.multi $test.multi -canon if [ $? != 0 ]; then exit 1; fi # Check that -canon agrees with ptransform on univariate output. $testhelper ptransform $test.uni $test.uni -canon if [ $? != 0 ]; then exit 1; fi fi $testhelper hilbert $test.*test $test.multi $* -univariate off -algorithm slice -canon -oformat m2 if [ $? != 0 ]; then exit 1; fi $testhelper hilbert $test.*test $test.uni $* -univariate -algorithm slice -canon -oformat m2 if [ $? != 0 ]; then exit 1; fi frobby-0.9.5/test/testScripts/run_intersect_test000077500000000000000000000017651401527164200222020ustar00rootroot00000000000000#!/usr/bin/env sh frobby=../../bin/frobby testhelper=../testScripts/testhelper test="$1" shift if [ "$1" = "_full" ]; then shift; # Check -canon agrees with transform and that intersection is minimal. $testhelper transform $test.intersection $test.intersection \ -minimize -canon if [ $? != 0 ]; then exit 1; fi # Check that intersecting the same ideals more times, along with # other ideals that should contain the intersection, yields the same # result. cat $test.*test $test.intersection $test.radical \ $test.minimize $test.*test > /tmp/$test.test $testhelper intersection /tmp/$test.test $test.intersection $* -canon if [ $? != 0 ]; then exit 1; fi # Try again after a canonicalization. $frobby transform < /tmp/$test.test > /tmp/$test.test2 2>/dev/null $testhelper intersection /tmp/$test.test2 $test.intersection $* -canon if [ $? != 0 ]; then exit 1; fi rm /tmp/$test.test /tmp/$test.test2 fi $testhelper intersection $test.*test $test.intersection $* -canon frobby-0.9.5/test/testScripts/run_irrdecom_test000077500000000000000000000021071401527164200217750ustar00rootroot00000000000000#!/usr/bin/env sh frobby=../../bin/frobby testhelper=../testScripts/testhelper test="$1" shift if [ "$1" = "_full" ]; then shift; # Check -canon agrees with transform on ideal list $testhelper transform $test.irrdecom $test.irrdecom -canon if [ $? != 0 ]; then exit 1; fi # Check -canon agrees with transform on ideal $testhelper transform $test.irrdecom_ideal $test.irrdecom_ideal -canon if [ $? != 0 ]; then exit 1; fi # Check that taking products relate the two representations. $testhelper transform $test.irrdecom $test.irrdecom_ideal \ -product -canon if [ $? != 0 ]; then exit 1; fi # Check that intersection is inverse of irrdecom. $frobby transform < `ls $test.*test` > /tmp/$test.test \ -canon -minimize 2>/dev/null $testhelper intersect $test.irrdecom /tmp/$test.test -canon if [ $? != 0 ]; then exit 1; fi rm /tmp/$test.test fi $testhelper irrdecom $test.*test $test.irrdecom $* -encode off -canon if [ $? != 0 ]; then exit 1; fi $testhelper irrdecom $test.*test $test.irrdecom_ideal $* -encode on -canon if [ $? != 0 ]; then exit 1; fi frobby-0.9.5/test/testScripts/run_maxstandard_test000077500000000000000000000006001401527164200224730ustar00rootroot00000000000000#!/usr/bin/env sh frobby=../../bin/frobby testhelper=../testScripts/testhelper test="$1" shift if [ "$1" = "_full" ]; then shift; # Check -canon agrees with transform on ideal $testhelper transform $test.maxstandard $test.maxstandard -canon if [ $? != 0 ]; then exit 1; fi fi $testhelper maxstandard $test.*test $test.maxstandard $* -canon if [ $? != 0 ]; then exit 1; fi frobby-0.9.5/test/testScripts/run_minimize_test000077500000000000000000000010021401527164200220030ustar00rootroot00000000000000#!/usr/bin/env sh frobby=../../bin/frobby testhelper=../testScripts/testhelper test="$1" shift if [ "$1" = "_full" ]; then shift; # Check that -canon agrees with transform without -minimize on. $testhelper transform $test.minimize $test.minimize -canon if [ $? != 0 ]; then exit 1; fi # Check that minimize is idempotent. $testhelper transform $test.minimize $test.minimize -minimize -canon if [ $? != 0 ]; then exit 1; fi fi $testhelper transform $test.*test $test.minimize $* -canon -minimize frobby-0.9.5/test/testScripts/run_optimize_test000077500000000000000000000102131401527164200220260ustar00rootroot00000000000000#!/bin/bash testHelper=../testScripts/testhelper frobby=../../bin/frobby test="$1" shift if [ -e "$test.optVector" ]; then inputFile="$test.test $test.optVector" else inputFile="$test.test" fi if [ "$1" = "_full" ]; then shift; tmpFile="/tmp/frobby_optTmp" # Check that -canon agrees with transform. Transform does not understand # the value at the end, so generate a file without that. $frobby optimize < "$inputFile" > $tmpFile 2> /dev/null \ -canon -displayLevel 2 -displayValue off $testHelper transform $tmpFile $tmpFile -canon if [ $? != 0 ]; then exit 1; fi rm -f $tmpFile # And again with -maxStandard. $frobby optimize < "$inputFile" > $tmpFile 2> /dev/null \ -canon -displayLevel 2 -displayValue off -maxStandard $testHelper transform $tmpFile $tmpFile -canon if [ $? != 0 ]; then exit 1; fi rm -f $tmpFile # and again for minimizing. $frobby optimize < "$inputFile" > $tmpFile 2> /dev/null \ -canon -displayLevel 2 -displayValue off -minValue $testHelper transform $tmpFile $tmpFile -canon if [ $? != 0 ]; then exit 1; fi rm -f $tmpFile # And again for minimizing with -maxStandard. $frobby optimize < "$inputFile" > $tmpFile 2> /dev/null \ -canon -displayLevel 2 -displayValue off -maxStandard -minValue $testHelper transform $tmpFile $tmpFile -canon if [ $? != 0 ]; then exit 1; fi rm -f $tmpFile # **************************************************************** # Check that the right value is found even when only looking for a # single optimal vector. This is relevant since it allows more # aggresive use of the bound. # maximize, irreducible tail -n 1 < $test.opt_irr > $tmpFile # pick out value at end $testHelper optimize "$inputFile" $tmpFile -displayLevel 0 -displayValue \ $* -maxStandard off -minValue off if [ $? != 0 ]; then exit 1; fi rm -f $tmpFile # maximize, msm tail -n 1 < $test.opt_std > $tmpFile # pick out value at end $testHelper optimize "$inputFile" $tmpFile -displayLevel 0 -displayValue \ $* -maxStandard on -minValue off if [ $? != 0 ]; then exit 1; fi rm -f $tmpFile # minimize, irreducible tail -n 1 < $test.opt_irr_min > $tmpFile # pick out value at end $testHelper optimize "$inputFile" $tmpFile -displayLevel 0 -displayValue \ $* -maxStandard off -minValue if [ $? != 0 ]; then exit 1; fi rm -f $tmpFile # minimize, msm tail -n 1 < $test.opt_std_min > $tmpFile # pick out value at end $testHelper optimize "$inputFile" $tmpFile -displayLevel 0 -displayValue \ $* -maxStandard on -minValue if [ $? != 0 ]; then exit 1; fi rm -f $tmpFile # **************************************************************** # Solve the problems without using the bound, thus increasing # confidence that a bug in the bound code is not causing # miscalculation of the value or solutions. # maximize, irreducible $testHelper optimize "$inputFile" $test.opt_irr \ $* -canon -displayLevel 2 -bound off if [ $? != 0 ]; then exit 1; fi # maximize, msm $testHelper optimize "$inputFile" $test.opt_std \ $* -canon -displayLevel 2 -maxStandard -bound off if [ $? != 0 ]; then exit 1; fi # minimize, irreducible $testHelper optimize "$inputFile" $test.opt_irr_min \ $* -canon -displayLevel 2 -bound off -minValue if [ $? != 0 ]; then exit 1; fi # minimize, msm $testHelper optimize "$inputFile" $test.opt_std_min \ $* -canon -displayLevel 2 -maxStandard -bound off -minValue if [ $? != 0 ]; then exit 1; fi fi # Solve the maximize irreducible decomposition program. $testHelper optimize "$inputFile" $test.opt_irr \ $* -canon -displayLevel 2 if [ $? != 0 ]; then exit 1; fi # Solve the maximize maximal standard monomial program. $testHelper optimize "$inputFile" $test.opt_std \ $* -canon -displayLevel 2 -maxStandard if [ $? != 0 ]; then exit 1; fi # Solve the minimize irreducible decomposition program. $testHelper optimize "$inputFile" $test.opt_irr_min \ $* -canon -displayLevel 2 -minValue if [ $? != 0 ]; then exit 1; fi # Solve the minimize maximal standard monomial program. $testHelper optimize "$inputFile" $test.opt_std_min \ $* -canon -displayLevel 2 -maxStandard -minValue if [ $? != 0 ]; then exit 1; fi frobby-0.9.5/test/testScripts/run_primdecom_test000077500000000000000000000012011401527164200221420ustar00rootroot00000000000000#!/usr/bin/env sh frobby=../../bin/frobby testhelper=../testScripts/testhelper test="$1" shift if [ "$1" = "_full" ]; then shift; # Check -canon agrees with transform on output $testhelper transform $test.primdecom $test.primdecom -canon if [ $? != 0 ]; then exit 1; fi # Check that intersection is inverse of primdecom. $frobby transform < `ls $test.*test` > /tmp/$test.test \ -canon -minimize 2>/dev/null $testhelper intersect $test.primdecom /tmp/$test.test -canon if [ $? != 0 ]; then exit 1; fi rm /tmp/$test.test fi $testhelper primdecom $test.*test $test.primdecom $* -canon if [ $? != 0 ]; then exit 1; fi frobby-0.9.5/test/testScripts/run_ptransform_test000077500000000000000000000026171401527164200223720ustar00rootroot00000000000000#!/bin/bash # Note that not specifying the input format tests the format # autodetection. We first produce output in all formats with no other # transformation, and we end with producing canonical output without # specifying the output format. testhelper=../testScripts/testhelper testName="$1" shift formats="m2 cocoa4 4ti2 singular" if [ "$testName" = "null" ]; then null="-iformat null" fi if [ "$1" = "_full" ]; then shift; # Test same-format transform. for format in $formats; do $testhelper ptransform $testName.$format $testName.$format $*; if [ $? != 0 ]; then exit 1; fi done # And again with specified formats. for format in $formats null; do $testhelper ptransform $testName.$format $testName.$format $* \ -iformat $format -oformat $format if [ $? != 0 ]; then exit 1; fi done # Test same-format transform on canon. $testhelper ptransform $testName.canon $testName.canon $* $null; if [ $? != 0 ]; then exit 1; fi # And again with -canon option. $testhelper ptransform $testName.canon $testName.canon $* -canon $null; if [ $? != 0 ]; then exit 1; fi fi for format in $formats null count; do # Test format conversion to $format $testhelper ptransform $testName.test $testName.$format $* \ -oformat $format $null; if [ $? != 0 ]; then exit 1; fi done # Test canonicalization of input $testhelper ptransform $testName.test $testName.canon $* -canon $null frobby-0.9.5/test/testScripts/run_radical_test000077500000000000000000000014771401527164200216010ustar00rootroot00000000000000#!/usr/bin/env sh frobby=../../bin/frobby testhelper=../testScripts/testhelper test="$1" shift if [ "$1" = "_full" ]; then shift; # Check that -canon agrees with transform without -radical on. $testhelper transform $test.radical $test.radical -canon if [ $? != 0 ]; then exit 1; fi # Check that radical is idempotent. $testhelper transform $test.radical $test.radical $* -radical -canon if [ $? != 0 ]; then exit 1; fi # Check that radical is minimized. $testhelper transform $test.radical $test.radical -minimize -canon if [ $? != 0 ]; then exit 1; fi # Check that radical of minimized is the same. $testhelper transform $test.minimize $test.radical \ $* -radical -canon -minimize if [ $? != 0 ]; then exit 1; fi fi $testhelper transform $test.*test $test.radical $* -canon -radical -minimize frobby-0.9.5/test/testScripts/run_transform_test000077500000000000000000000064341401527164200222130ustar00rootroot00000000000000#!/bin/bash # Note that not specifying the input format tests the format # autodetection. We first produce output in all formats with no other # transformation, and we end with producing canonical output without # specifying the output format. testhelper=../testScripts/testhelper frobby=../../bin/frobby testName="$1" shift inputFile="$testName.test" formats="m2 4ti2 monos newmonos singular cocoa4" if [ "$testName" = "null" ]; then null="-iformat null" fi if [ "$1" = "_full" ]; then shift; # Inverting twice should give same answer for format in $formats; do $frobby transform -swap01 -oformat $format < $inputFile \ > /tmp/frobbyTestInvert 2>/dev/null $null; $testhelper transform /tmp/frobbyTestInvert $testName.$format \ -iformat $format -swap01; if [ $? != 0 ]; then exit 1; fi done # Test same-format transform. for format in $formats; do $testhelper transform $testName.$format $testName.$format $*; if [ $? != 0 ]; then exit 1; fi done # And again with specified formats. for format in $formats null; do $testhelper transform $testName.$format $testName.$format \ $* -iformat $format -oformat $format; if [ $? != 0 ]; then exit 1; fi done # Test same-format transform on canon $testhelper transform $testName.canon $testName.canon $* $null; if [ $? != 0 ]; then exit 1; fi # And again with -canon option $testhelper transform $testName.canon $testName.canon $* -canon $null; if [ $? != 0 ]; then exit 1; fi # The Alexander dual option is the only one that reads a raw term # that is not a part of an ideal. The -lcm option of analyze is the # only one that writes a raw term that is not part of an ideal. We # test both of these by adding the lcm at the bottom of an Alexander # dual instance. This should not change the output since the # Alexander dual assumes the lcm if no point is specified, so we # also have a way to ensure that the reading and writing of the term # has been done correctly. # We first take the intersection of the ideals in the input to # ensure that there is only one, since the Alexander dual expects # only one. for format in $formats; do id="-$testName-$format"; $frobby intersect < $inputFile > /tmp/frobby_intersect$id \ -oformat $format 2>/dev/null $null; $frobby alexdual < /tmp/frobby_intersect$id \ > /tmp/frobby_alex_out$id 2>/dev/null -canon; $frobby transform < /tmp/frobby_intersect$id -minimize 2>/dev/null| \ $frobby analyze -summaryLevel 0 -lcm 2>/dev/null| \ cat /tmp/frobby_intersect$id - > /tmp/frobby_alex_in$id; $testhelper alexdual /tmp/frobby_alex_in$id \ /tmp/frobby_alex_out$id -canon; if [ $? != 0 ]; then exit 1; fi rm /tmp/frobby_intersect$id /tmp/frobby_alex_in$id /tmp/frobby_alex_out$id done fi for format in $formats null count; do # Test format conversion to $format outputFile="$testName.$format"; $testhelper transform $inputFile $outputFile $* -oformat $format $null; if [ $? != 0 ]; then exit 1; fi done # Test null input format on this input, which should default to null # output format and so produce no output. $testhelper transform $inputFile null.null $* -iformat null # Test canonicalization of input outputFile="$testName.canon"; $testhelper transform $inputFile $outputFile $* -canon $null frobby-0.9.5/test/testScripts/runall000077500000000000000000000003321401527164200175410ustar00rootroot00000000000000#!/usr/bin/env bash tests="primdecom alexdual irrdecom assoprimes hilbert radical intersect minimize" for t in $tests; do echo -n "$t " ../testScripts/runtests $t $* if [ $? != 0 ]; then exit 1; fi echo done frobby-0.9.5/test/testScripts/runtests000077500000000000000000000002401401527164200201310ustar00rootroot00000000000000#!/usr/bin/env sh test="run_$1_test" shift for t in `ls -S -r *.test` do ../testScripts/$test `basename $t .test` $* if [ $? != 0 ]; then exit 1; fi done frobby-0.9.5/test/testScripts/testhelper000077500000000000000000000203711401527164200204300ustar00rootroot00000000000000#!/usr/bin/env bash # This runs a test while providing diagnostic output on error. # $1 The Frobby action to run (e.g. alexdual) # $2 The name of one or more space-seperated input files # $3 The reference output file # $4+ Parameters to this script and then parameters to frobby # # Parameter 2 can contain more than one file if this script has been called # as e.g. "../thisscript action "file1 file2" reference # # If the output produced by Frobby does not match that from the # reference output according to diff, then this is considered an # error, diagnostics will be printed and the exit status will be 1. # Otherwise a dot '.' is printed and the exit status is 0. # # If $4 is _generate, then the output from Frobby is piped into the # reference output file, overwriting any previous contents. It is # recommended to manually inspect the output to check if it is correct # and to keep a copy of the previous contents of the file. # # If $4 is _summary, then nothing will be printed on success, and a # short summary line is printed on failure. In this case the exit # status is zero even on failure. The intent of this is to get a # summary of all failing tests, instead of getting detailed # information on the first failure. # # If $4 is _valgrind, then frobby will be run under valgrind. If # valgrind reports no errors and no memory leaks, then a 'v' is # printed to indicate this, and the exist status is 0. If valgrind # does report an issue, then the valgrind output is displayed and the # exit status is 1. In either case the actual output of Frobby is # ignored and is thus not compared to the correct reference output. # # If $4 is _expectExitCode, then the expected error code is $5 instead # of the usual expectation of 0. # # If $4 is _matchError, then the output written to standard error is # matched against the reference output, instead of that written to # standard out. Lines containing the word DEBUG is removed from this # output. # # If $4 is _debugAlloc, then Frobby will be run with the _debugAlloc # option, which will make it run through every scenario of runnning # out of memory and recovering, which can take a long time. This only # works for the debug versions of Frobby. # # These options can all be combined by adding them one after each # other. In that case replace $4 in the descriptions above by the # appropriate parameter. The script stops looking for further # parameters as soon as it encounters a parameter it does not # understand, so script parameters have to be before parameters to # Frobby. # # This script is designed to be run from a sub-directory of where it # resides. origParams="$*" # used for debug output below origFrobby="../../bin/frobby" origFrobbyOut="./frobbyTestScriptTemporary_standardOutput" origFrobbyErr="./frobbyTestScriptTemporary_standardError" frobbyChangedErr="./frobbyTestScriptTemporary_standardErrorChanged" frobbyChangedInput="./frobbyTestScriptTemporary_standardInput" frobby="$origFrobby" frobbyOut="$origFrobbyOut" frobbyErr="$origFrobbyErr" action="$1" inputFile="$2" referenceOutputFile="$3" # Note that we *must* use # echo $inputFile|... # instead of the simpler # ... < $inputFile # because the latter does not work if $inputFile has more than one # file name in it. shift shift shift # Set initial values generate=0; expectedExitCode=0; matchErr=0; useValgrind=0; useDebugAlloc=0 summary=0; changed=1; while [ $changed = 1 ]; do changed=0; if [ "$1" = "_generate" ]; then changed=1; if [ "$inputFile" == "$referenceOutputFile" ]; then exit 0; fi generate=1; shift; fi if [ "$1" = "_summary" ]; then changed=1; summary=1; shift; fi if [ "$1" = "_valgrind" ]; then changed=1; useValgrind=1; shift; fi if [ "$1" = "_debugAlloc" ]; then changed=1; useDebugAlloc=1; shift; fi if [ "$1" = "_expectExitCode" ]; then changed=1; expectedExitCode="$2"; shift; shift; fi if [ "$1" = "_matchError" ]; then changed=1; matchErr=1; shift; fi done if [ $useDebugAlloc = 1 ]; then # note that we have to use the _input option, since Frobby starts # the computation over after each simulated recovery, so it needs to # be able to rewind the input too, which is not possible using # pipes. Also, since the _input notation only supports a single # file, we have to collect all the input into a single file, in case # $inputFile contains more than a single filename. cat $inputFile > $frobbyChangedInput origFrobby="$frobby _debugAlloc _input $frobbyChangedInput"; frobby="$origFrobby" # OK, I change origFrobby, so it is not quite original. So shoot me. fi if [ $useValgrind = 1 ]; then frobby="valgrind $frobby"; fi params="$*" # Set printDebugOutput to 1 outside the script to see this output. if [ "$printDebugOutput" == 1 ]; then echo "------ debug output ------" echo "frobby is \"$frobby\"" echo "origParams is \"$origParams\"" echo "action is \"$action\"" echo "inputFile is \"$inputFile\"" echo "params is \"$params\"" echo "referenceOutputFile is \"$referenceOutputFile\"" echo "cmd is \"$cmd\"" echo "generate is $generate" echo "summary is $summary" echo "useValgrind is $useValgrind" echo "useDebugAlloc is $useDebugAlloc" echo "expectedExitCode is $expectedExitCode" echo "matchErr is $matchErr" fi # This is where we actually run Frobby cat $inputFile|$frobby $action $params > $frobbyOut 2> $frobbyErr frobbyExitCode="$?" if [ $matchErr = 1 ]; then # Use a new file to remove lines containing the words DEBUG frobbyOut="$frobbyChangedErr"; sed /DEBUG/d < $frobbyErr|sed /^==/d > $frobbyOut fi # Check if Frobby's output matches the reference output file. diff $frobbyOut $referenceOutputFile > /dev/null 2> /dev/null referenceMatch="$?" if [ $generate = 1 ]; then if [ $frobbyExitCode != $expectedExitCode ]; then echo "Halting generation of output due to getting exit code $frobbyExitCode." echo "The expected exit code was $expectedExitCode. This is for " echo " cat $inputFile|$frobby $action $params" echo "Giving error output of " cat $origFrobbyErr exit 1 fi cp -f $frobbyOut $referenceOutputFile; if [ $referenceMatch = 0 ]; then echo -n "g"; else echo; echo -n "Replaced output file $referenceOutputFile with different version."; fi exit 0 fi if [ $useValgrind = 1 ]; then errs=`grep -e "ERROR SUMMARY: [^0].* error" \ -e "--leak-check=full" $frobbyErr`; if [ "$errs" == "" ]; then echo -n v else echo echo echo "valgrind reports issue on running:" echo " cat $inputFile|valgrind $frobby $action $params" echo "Re-running to show details:" echo cat $inputFile|valgrind --leak-check=full --show-reachable=no $origFrobby $action $params > /dev/null; echo "This is a valgrind report on running:" echo " cat $inputFile|valgrind $frobby $action $params" exit 1; fi fi # The option _debugAlloc makes Frobby rerun many times, and to avoid # making the same output many times, it closes standard out after one # run. It does not close standard error, so matching on error and # _debugAlloc cannot be combined in a sensible way, so we stop that # from happening. if [[ $matchErr = 1 && $useDebugAlloc = 1 && $frobbyExitCode = $expectedExitCode ]]; then echo -n "d"; exit 0; fi if [[ $referenceMatch = 0 && $frobbyExitCode = $expectedExitCode ]]; then if [ $summary = 0 ]; then if [ $useDebugAlloc = 1 ]; then echo -n ".d" else echo -n "." fi fi exit 0; fi if [ $summary = 1 ]; then echo "Error on $action: $inputFile -> $referenceOutputFile"; exit 0; fi echo echo echo "***** Encountered failure on output $referenceOutputFile. Input head was:" cat $inputFile|head echo "***** Reference output head:" cat $referenceOutputFile|head echo "***** Standard output head from Frobby:" cat $origFrobbyOut|head echo "***** Error output head from Frobby:" cat $origFrobbyErr|head echo "***** Head of diff of output versus reference is" diff $referenceOutputFile $frobbyOut|head echo "***** Exit code was $frobbyExitCode, and expecting $expectedExitCode" if [ $matchErr = 1 ]; then echo "***** Matching on error output, not standard output."; fi echo echo "***** A test $action: $inputFile -> $referenceOutputFile failed." echo " cat $inputFile|$frobby $action $params" exit 1