diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2015-2017, Balazs Komuves
+Copyright (c) 2015-2021, Balazs Komuves
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,54 @@
+
+Characteristic classes of coincident root loci
+==============================================
+
+Coincident root loci (or discriminant strata) are subsets 
+of the space of homogeneous polynomials in two variables defined by
+root multiplicities: A nonzero degree _n_ polynomial has _n_ roots in the
+complex projective line P^1, but some of these can coincide, which gives us a
+partition of _n_. Hence for each partition _lambda_ we get a set of polynomials
+(those with root multiplicities given by _lambda_), 
+which  together stratify the space of these polynomials, which (modulo multiplying by scalars) 
+is P^n. These are quasi-projective varieties, invariant under the action of GL(2);
+their closures are highly singular projective varieties, making them a good
+example for studying invariants of singular varieties.
+
+This package contains a number of different algorithms to compute invariants
+and characteristic classes of these varieties:
+
+- degree
+- Euler characteristic
+- the fundamental class in equivariant cohomology
+- Chern-Schwartz-MacPherson (CSM) class, Segre-SM class
+- equivariant CSM class
+- Hirzebruch Chi-y genus
+- Todd class, motivic Hirzebruch class
+- motivic Chern class
+- equivariant motivic Chern class
+
+Some of the algorithms are implemented in Mathematica 
+instead of (or in addition to) Haskell.
+
+Another (better organized) Mathematica implementation is available at
+<https://github.com/bkomuves/mathematica-packages>.
+
+
+Example usage
+=============
+
+For example if you want to know what is the equivariant CSM class of the
+(open) loci corresponding to the partition [2,2,1,1], you can use the following
+piece of code:
+
+    {-# LANGUAGE TypeApplications #-}
+
+    import Math.Combinat.Partitions
+    import Math.RootLoci.Algebra.SymmPoly ( AB )
+    import Math.Algebra.Polynomial.Pretty ( pretty )
+    import Math.RootLoci.CSM.Equivariant.Umbral
+
+    csm ps = umbralOpenCSM @AB (mkPartition ps)
+
+    main = do
+      putStrLn $ pretty $ csm [2,2,1,1]
+      
diff --git a/coincident-root-loci.cabal b/coincident-root-loci.cabal
--- a/coincident-root-loci.cabal
+++ b/coincident-root-loci.cabal
@@ -1,100 +1,114 @@
-Name:                coincident-root-loci
-Version:             0.2
-Synopsis:            Equivariant CSM classes of coincident root loci
+Cabal-Version:        2.4
+Name:                 coincident-root-loci
+Version:              0.3
+Synopsis:             Equivariant CSM classes of coincident root loci
 
-Description:         This library contians a set of function to compute, among
-                     others, the @GL(2)@-equivariant Chern-Schwartz-MacPherson
-                     classes of coincident root loci, which are subvarieties
-                     of the space of unordered @n@-tuples of points in the complex
-                     projective line. To such an @n@-tuples we can associate 
-                     a partition of @n@ given by the multiplicities of the distinct
-                     points; this stratifies the set of all @n@-tuples, and we
-                     call these strata \"coincident root loci\".
+Description:          This library contians a set of function to compute, among
+                      others, the @GL(2)@-equivariant Chern-Schwartz-MacPherson
+                      classes of coincident root loci, which are subvarieties
+                      of the space of unordered @n@-tuples of points in the complex
+                      projective line. To such an @n@-tuples we can associate 
+                      a partition of @n@ given by the multiplicities of the distinct
+                      points; this stratifies the set of all @n@-tuples, and we
+                      call these strata \"coincident root loci\".
+                      
+                      This package is supplementary software for a forthcoming paper.
 
-                     This package is supplementary software for a forthcoming paper.
+License:              BSD-3-Clause
+License-file:         LICENSE
+Author:               Balazs Komuves
+Copyright:            (c) 2015-2021 Balazs Komuves
+Maintainer:           bkomuves (plus) hackage (at) gmail (dot) com
+Homepage:             https://hub.darcs.net/bkomuves/coincident-root-loci
+Stability:            Experimental
+Category:             Math
+Tested-With:          GHC == 8.6.5
+Build-Type:           Simple
 
-License:             BSD3
-License-file:        LICENSE
-Author:              Balazs Komuves
-Copyright:           (c) 2015-2017 Balazs Komuves
-Maintainer:          bkomuves (plus) hackage (at) gmail (dot) com
-Homepage:            http://code.haskell.org/~bkomuves/
-Stability:           Experimental
-Category:            Math
-Tested-With:         GHC == 8.0.2
-Cabal-Version:       >= 1.18
-Build-Type:          Simple
+extra-source-files:   README.md
+                      mathematica/equiv_motivic_chern.nb
+                      mathematica/equiv_motivic_chern.src
+                      mathematica/equivariant_CSM_via_motivic.nb
+                      mathematica/equivariant_CSM_via_motivic.src
+                      slides/motivic_slides_2018.pdf
+                      slides/csm_slides_2017.pdf
 
+source-repository head
+  type:                 darcs
+  location:             https://hub.darcs.net/bkomuves/coincident-root-loci
+
 --------------------------------------------------------------------------------
 
 Library
 
-  Build-Depends:       base >= 4 && < 5, 
-                       array >= 0.5, containers, random, transformers,
-                       combinat >= 0.2.8.2
+  Build-Depends:        base >= 4 && < 5, 
+                        array >= 0.5, containers >= 0.5, random, transformers,
+                        combinat >= 0.2.10.0, polynomial-algebra >= 0.1
 
   Exposed-Modules:     
-                       -- Math.RootLoci
-                       Math.RootLoci.Classic
-                       -- Math.RootLoci.Dual
-                       Math.RootLoci.Dual.Restriction
-                       Math.RootLoci.Dual.Localization
-                       -- Math.RootLoci.CSM
-                       -- Math.RootLoci.CSM.Equivariant
-                       Math.RootLoci.CSM.Equivariant.Direct
-                       Math.RootLoci.CSM.Equivariant.Recursive
-                       Math.RootLoci.CSM.Equivariant.Ordered
-                       Math.RootLoci.CSM.Equivariant.PushForward
-                       Math.RootLoci.CSM.Equivariant.Umbral
-                       Math.RootLoci.CSM.Aluffi
-                       Math.RootLoci.CSM.Projective
-                       Math.RootLoci.Geometry
-                       Math.RootLoci.Geometry.Forget
-                       Math.RootLoci.Geometry.Cohomology
-                       Math.RootLoci.Geometry.Mobius
-                       -- Math.RootLoci.Applications
-                       -- Math.RootLoci.Applications.FlexLines
-                       Math.RootLoci.Algebra
-                       Math.RootLoci.Algebra.FreeMod
-                       Math.RootLoci.Algebra.Polynomial
-                       Math.RootLoci.Algebra.SymmPoly
-                       Math.RootLoci.Misc
-                       Math.RootLoci.Misc.Pretty
-                       Math.RootLoci.Misc.PTable
-                       Math.RootLoci.Misc.Common
+                        -- Math.RootLoci
+                        Math.RootLoci.Classic
+                        -- Math.RootLoci.Dual
+                        Math.RootLoci.Dual.Restriction
+                        Math.RootLoci.Dual.Localization
+                        -- Math.RootLoci.CSM
+                        -- Math.RootLoci.CSM.Equivariant
+                        Math.RootLoci.CSM.Equivariant.Direct
+                        Math.RootLoci.CSM.Equivariant.Recursive
+                        Math.RootLoci.CSM.Equivariant.Ordered
+                        Math.RootLoci.CSM.Equivariant.PushForward
+                        Math.RootLoci.CSM.Equivariant.Umbral
+                        Math.RootLoci.CSM.Aluffi
+                        Math.RootLoci.CSM.Projective
+                        Math.RootLoci.Segre.Equivariant
+                        Math.RootLoci.Geometry
+                        Math.RootLoci.Geometry.Forget
+                        Math.RootLoci.Geometry.Cohomology
+                        Math.RootLoci.Geometry.Mobius
+                        -- Math.RootLoci.Motivic
+                        Math.RootLoci.Motivic.Classes
+                        Math.RootLoci.Motivic.Abstract
+                        Math.RootLoci.Motivic.Homology
+                        -- Math.RootLoci.Motivic.Formula
+                        Math.RootLoci.Algebra
+                        Math.RootLoci.Algebra.SymmPoly
+                        Math.RootLoci.Misc
+                        Math.RootLoci.Misc.PTable
+                        Math.RootLoci.Misc.Common
 
-  Default-Extensions:  CPP, BangPatterns
-  Other-Extensions:    MultiParamTypeClasses, ScopedTypeVariables, 
-                       GeneralizedNewtypeDeriving
+  Default-Extensions:   CPP, BangPatterns
+  Other-Extensions:     MultiParamTypeClasses, ScopedTypeVariables, 
+                        GeneralizedNewtypeDeriving
 
-  Default-Language:    Haskell2010
+  Default-Language:     Haskell2010
 
-  Hs-Source-Dirs:      src
+  Hs-Source-Dirs:       src
 
-  ghc-options:         -fwarn-tabs -fno-warn-unused-matches -fno-warn-name-shadowing -fno-warn-unused-imports
+  ghc-options:          -fwarn-tabs -fno-warn-unused-matches -fno-warn-name-shadowing -fno-warn-unused-imports
     
 --------------------------------------------------------------------------------
     
 test-suite test
 
-  default-language:    Haskell2010
-  type:                exitcode-stdio-1.0
-  hs-source-dirs:      test
-  main-is:             testSuite.hs
+  default-language:     Haskell2010
+  type:                 exitcode-stdio-1.0
+  hs-source-dirs:       test
+  main-is:              testSuite.hs
   
-  build-depends:       base >= 4 && < 5, containers >= 0.4, array >= 0.5,
-                       tasty >= 0.11, tasty-hunit >= 0.9,
-                       combinat >= 0.2.8.2,
-                       coincident-root-loci >= 0.2
+  build-depends:        base >= 4 && < 5, 
+                        array >= 0.5, containers >= 0.5,
+                        tasty >= 0.11, tasty-hunit >= 0.9,
+                        combinat >= 0.2.9.0, polynomial-algebra >= 0.1,
+                        coincident-root-loci 
                        
-  other-modules:       Tests.Common
-                       Tests.Dual
-                       Tests.Pushforward                  
-                       Tests.CSM.Equivariant                  
-                       Tests.CSM.Projective                  
-                       Tests.RootVsClass.Check                  
-                       Tests.RootVsClass.Direct                  
-                       Tests.RootVsClass.Ordered                  
-                       Tests.RootVsClass.PushForward                  
-                       Tests.RootVsClass.Recursive                  
-                       Tests.RootVsClass.Umbral                  
+  other-modules:        Tests.Common
+                        Tests.Dual
+                        Tests.Pushforward                  
+                        Tests.CSM.Equivariant                  
+                        Tests.CSM.Projective                  
+                        Tests.RootVsClass.Check                  
+                        Tests.RootVsClass.Direct                  
+                        Tests.RootVsClass.Ordered                  
+                        Tests.RootVsClass.PushForward                  
+                        Tests.RootVsClass.Recursive                  
+                        Tests.RootVsClass.Umbral                  
diff --git a/mathematica/equiv_motivic_chern.nb b/mathematica/equiv_motivic_chern.nb
new file mode 100644
--- /dev/null
+++ b/mathematica/equiv_motivic_chern.nb
@@ -0,0 +1,4062 @@
+(* Content-type: application/vnd.wolfram.mathematica *)
+
+(*** Wolfram Notebook File ***)
+(* http://www.wolfram.com/nb *)
+
+(* CreatedBy='Mathematica 9.0' *)
+
+(*CacheID: 234*)
+(* Internal cache information:
+NotebookFileLineBreakTest
+NotebookFileLineBreakTest
+NotebookDataPosition[       157,          7]
+NotebookDataLength[    139568,       4053]
+NotebookOptionsPosition[    138197,       4007]
+NotebookOutlinePosition[    138552,       4023]
+CellTagsIndexPosition[    138509,       4020]
+WindowFrame->Normal*)
+
+(* Beginning of Notebook Content *)
+Notebook[{
+
+Cell[CellGroupData[{
+Cell[BoxData[
+ RowBox[{"\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+    RowBox[{"===", 
+     RowBox[{"\[Equal]", " ", 
+      RowBox[{
+      "EQUIVARIANT", " ", "MOTIVIC", " ", "CHERN", " ", "CLASSES", " ", "OF", 
+       " ", "COINCIDENT", " ", "ROOT", " ", "LOCI"}]}], " ", "==="}], "="}], 
+   " ", "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", 
+  RowBox[{"<<", "Combinatorica`"}]}]], "Input",
+ CellChangeTimes->{{3.801069380385396*^9, 3.801069381601409*^9}, {
+  3.801071567533555*^9, 3.801071572467383*^9}, {3.801135940168188*^9, 
+  3.801135957390024*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  StyleBox[
+   RowBox[{"General", "::", "compat"}], "MessageName"], 
+  RowBox[{
+  ":", " "}], "\<\"Combinatorica Graph and Permutations functionality has \
+been superseded by preloaded functionality. The package now being loaded may \
+conflict with this. Please see the Compatibility Guide for details.\"\>"}]], \
+"Message", "MSG",
+ CellChangeTimes->{3.801136075045025*^9, 3.80113681966651*^9}]
+}, Open  ]],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 2}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 4}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"===", " ", 
+    RowBox[{"NORMALIZATION", " ", "in", " ", "K", 
+     RowBox[{"(", 
+      RowBox[{"P", "^", "n"}], ")"}]}], " ", "==="}], " ", "*)"}], 
+  "\[IndentingNewLine]", "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{"Weights", " ", "of", " ", 
+    RowBox[{"Sym", "^", "n"}], " ", 
+    RowBox[{"C", "^", "2"}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{"Clear", "[", 
+    RowBox[{"L", ",", "X", ",", "Y"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"WT", "[", 
+     RowBox[{"n_", ",", "i_"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"X", "^", 
+      RowBox[{"(", 
+       RowBox[{"n", "-", "i"}], ")"}]}], "*", 
+     RowBox[{"Y", "^", "i"}]}]}], "\[IndentingNewLine]", 
+   "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{
+     RowBox[{"the", " ", "relation", " ", "in", " ", "K", 
+      RowBox[{
+       RowBox[{"(", 
+        RowBox[{"P", "^", "n"}], ")"}], ".", " ", 
+       RowBox[{"Convention", ":", " ", "\[IndentingNewLine]", 
+        RowBox[{
+        "L", " ", "is", " ", "the", " ", "tautological", " ", "line", " ", 
+         "bundle"}]}]}]}], ",", " ", "\[IndentingNewLine]", "   ", 
+     RowBox[{
+      RowBox[{"c_", "1", 
+       RowBox[{"(", "X", ")"}]}], " ", "=", " ", 
+      RowBox[{"-", "alpha"}]}], ",", " ", 
+     RowBox[{
+      RowBox[{"c_", "1", 
+       RowBox[{"(", "Y", ")"}]}], " ", "=", " ", 
+      RowBox[{"-", "beta"}]}]}], " ", "*)"}], "\n", 
+   RowBox[{
+    RowBox[{"KREL", "[", "n_", "]"}], ":=", 
+    RowBox[{"Product", "[", 
+     RowBox[{
+      RowBox[{"1", "-", 
+       RowBox[{"L", "*", 
+        RowBox[{"WT", "[", 
+         RowBox[{"n", ",", "i"}], "]"}]}]}], ",", 
+      RowBox[{"{", 
+       RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}]}], 
+   "\[IndentingNewLine]", "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{"normal", " ", "form", " ", "of", " ", 
+     RowBox[{"L", "^", 
+      RowBox[{"(", 
+       RowBox[{"n", "+", "1"}], ")"}]}]}], " ", "*)"}], "\[IndentingNewLine]", 
+   RowBox[{"Clear", "[", "Lpow$nplus1", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"Lpow$nplus1", "[", "n_", "]"}], " ", ":=", " ", 
+    RowBox[{
+     RowBox[{"Lpow$nplus1", "[", "n", "]"}], "=", " ", 
+     RowBox[{"Expand", "[", 
+      RowBox[{
+       RowBox[{"L", "^", 
+        RowBox[{"(", 
+         RowBox[{"n", "+", "1"}], ")"}]}], "-", 
+       RowBox[{
+        RowBox[{
+         RowBox[{"(", 
+          RowBox[{"-", "1"}], ")"}], "^", 
+         RowBox[{"(", 
+          RowBox[{"n", "+", "1"}], ")"}]}], 
+        RowBox[{
+         RowBox[{"KREL", "[", "n", "]"}], "/", 
+         RowBox[{
+          RowBox[{"(", 
+           RowBox[{"X", "*", "Y"}], ")"}], "^", 
+          RowBox[{"Binomial", "[", 
+           RowBox[{
+            RowBox[{"n", "+", "1"}], ",", "2"}], "]"}]}]}]}]}], "]"}]}]}], 
+   "\n", "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{
+     RowBox[{"(", "unefficiently", ")"}], " ", "normalize", " ", "a", " ", 
+     "polynomial", " ", "in", " ", "L"}], " ", "*)"}], " ", 
+   "\[IndentingNewLine]", 
+   RowBox[{"Clear", "[", "KnormalizeSlow", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"KnormalizeSlow", "[", 
+     RowBox[{"n_", ",", " ", "Z0_"}], "]"}], ":=", 
+    RowBox[{"Module", "[", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"Z", "=", 
+         RowBox[{"Expand", "[", "Z0", "]"}]}], ",", "m"}], "}"}], ",", 
+      "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"m", "=", 
+        RowBox[{"Exponent", "[", 
+         RowBox[{"Z", ",", "L"}], "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"If", "[", 
+        RowBox[{
+         RowBox[{"m", "\[LessEqual]", "n"}], ",", "Z", ",", 
+         RowBox[{"KnormalizeSlow", "[", 
+          RowBox[{"n", ",", 
+           RowBox[{"Z", "/.", 
+            RowBox[{"{", 
+             RowBox[{
+              RowBox[{"L", "^", "m"}], "\[Rule]", 
+              RowBox[{
+               RowBox[{"L", "^", 
+                RowBox[{"(", 
+                 RowBox[{"m", "-", "n", "-", "1"}], ")"}]}], "*", 
+               RowBox[{"Lpow$nplus1", "[", "n", "]"}]}]}], "}"}]}]}], "]"}]}],
+         "]"}]}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", 
+   "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{"Table", " ", "of", " ", "normal", " ", "forms", " ", "of", " ", 
+     RowBox[{"L", "^", "p"}]}], " ", "*)"}], "\n", 
+   RowBox[{"Clear", "[", "LPowXY", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"LPowXY", "[", 
+     RowBox[{"n_", ",", "k_"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"LPowXY", "[", 
+      RowBox[{"n", ",", "k"}], "]"}], " ", "=", " ", 
+     RowBox[{"Expand", "[", 
+      RowBox[{"KnormalizeSlow", "[", 
+       RowBox[{"n", ",", 
+        RowBox[{"L", "^", "k"}]}], "]"}], "]"}]}]}], "\n", 
+   "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{"MoreE", " ", "eficient", " ", "normalization", " ", "in", " ", 
+     RowBox[{"K", "^", 
+      RowBox[{"(", 
+       RowBox[{"P", "^", "n"}], ")"}]}], " ", "\[IndentingNewLine]", 
+     RowBox[{"usage", ":", " ", 
+      RowBox[{"KnormalizeVarXY", "[", 
+       RowBox[{"dim", ",", "L", ",", "expr"}], "]"}]}]}], " ", "*)"}], "\n", 
+   RowBox[{"Clear", "[", "KnormalizeVarXY", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"KnormalizeVarXY", "[", 
+     RowBox[{"n_", ",", "uuu_", ",", "Z0_"}], "]"}], ":=", 
+    RowBox[{"Module", "[", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{"m", ",", "Z"}], "}"}], ",", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"Z", "=", 
+        RowBox[{"Expand", "[", "Z0", "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"m", "=", 
+        RowBox[{"Exponent", "[", 
+         RowBox[{"Z", ",", "uuu"}], "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"Expand", "[", 
+        RowBox[{"Sum", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"Coefficient", "[", 
+            RowBox[{"Z", ",", "uuu", ",", "k"}], "]"}], "*", 
+           RowBox[{"(", 
+            RowBox[{
+             RowBox[{"LPowXY", "[", 
+              RowBox[{"n", ",", "k"}], "]"}], "/.", 
+             RowBox[{"{", 
+              RowBox[{"L", "\[Rule]", "uuu"}], "}"}]}], ")"}]}], ",", 
+          RowBox[{"{", 
+           RowBox[{"k", ",", "0", ",", "m"}], "}"}]}], "]"}], "]"}]}]}], 
+     "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]"}]}]], "Input",
+ CellChangeTimes->{{3.801069536445114*^9, 3.8010695374127903`*^9}, {
+  3.801135975104397*^9, 3.801136088365362*^9}}],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 2}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 4}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"===", " ", 
+    RowBox[{"PUSHFORWARD", " ", "ALONG", " ", "PSI", " ", 
+     RowBox[{"(", 
+      RowBox[{"THE", " ", "MULTIPLICATION", " ", "MAP"}], ")"}]}], " ", 
+    "==="}], " ", "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{"formulas", " ", "for", " ", 
+    RowBox[{"(", 
+     RowBox[{"psi_", 
+      RowBox[{"{", 
+       RowBox[{"n", ",", "1"}], "}"}]}], ")"}], 
+    RowBox[{"_", "!"}], " ", 
+    RowBox[{"(", 
+     RowBox[{
+      RowBox[{"L1", "^", "p"}], "*", 
+      RowBox[{"L2", "^", "q"}]}], ")"}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{"Clear", "[", "PSI$N1f", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"PSI$N1f", "[", 
+     RowBox[{"n_", ",", "0", ",", "1"}], "]"}], ":=", 
+    RowBox[{"L", "*", 
+     RowBox[{
+      RowBox[{"(", 
+       RowBox[{
+        RowBox[{"X", "^", 
+         RowBox[{"(", 
+          RowBox[{"n", "+", "1"}], ")"}]}], "-", 
+        RowBox[{"Y", "^", 
+         RowBox[{"(", 
+          RowBox[{"n", "+", "1"}], ")"}]}]}], ")"}], "/", 
+      RowBox[{"(", 
+       RowBox[{"X", "-", "Y"}], ")"}]}]}]}], "\n", 
+   RowBox[{
+    RowBox[{"PSI$N1f", "[", 
+     RowBox[{"n_", ",", "p_", ",", "0"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{
+      RowBox[{"L", "^", "p"}], "*", 
+      RowBox[{
+       RowBox[{"(", 
+        RowBox[{
+         RowBox[{"X", "^", 
+          RowBox[{"(", 
+           RowBox[{"p", "+", "1"}], ")"}]}], "-", 
+         RowBox[{"Y", "^", 
+          RowBox[{"(", 
+           RowBox[{"p", "+", "1"}], ")"}]}]}], ")"}], "/", 
+       RowBox[{"(", 
+        RowBox[{"X", "-", "Y"}], ")"}]}]}], "+", 
+     RowBox[{
+      RowBox[{"L", "^", 
+       RowBox[{"(", 
+        RowBox[{"p", "+", "1"}], ")"}]}], " ", 
+      RowBox[{
+       RowBox[{"(", 
+        RowBox[{
+         RowBox[{
+          RowBox[{"X", "^", 
+           RowBox[{"(", 
+            RowBox[{"n", "+", "1"}], ")"}]}], "*", 
+          RowBox[{"Y", "^", 
+           RowBox[{"(", 
+            RowBox[{"p", "+", "1"}], ")"}]}]}], "-", 
+         RowBox[{
+          RowBox[{"Y", "^", 
+           RowBox[{"(", 
+            RowBox[{"n", "+", "1"}], ")"}]}], " ", 
+          RowBox[{"X", "^", 
+           RowBox[{"(", 
+            RowBox[{"p", "+", "1"}], ")"}]}]}]}], ")"}], "/", 
+       RowBox[{"(", 
+        RowBox[{"X", "-", "Y"}], ")"}]}]}]}]}], "\n", 
+   RowBox[{
+    RowBox[{"PSI$N1f", "[", 
+     RowBox[{"n_", ",", "p_", ",", "q_"}], "]"}], ":=", 
+    RowBox[{"If", "[", 
+     RowBox[{
+      RowBox[{"p", "\[GreaterEqual]", "q"}], ",", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"L", "^", "q"}], "*", 
+       RowBox[{"PSI$N1f", "[", 
+        RowBox[{"n", ",", 
+         RowBox[{"p", "-", "q"}], ",", "0"}], "]"}]}], ",", 
+      "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"L", "^", "p"}], "*", 
+       RowBox[{"PSI$N1f", "[", 
+        RowBox[{"n", ",", "0", ",", 
+         RowBox[{"q", "-", "p"}]}], "]"}]}]}], "\[IndentingNewLine]", "]"}]}],
+    "\n", "\[IndentingNewLine]", 
+   RowBox[{"Clear", "[", "PSI$N1", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"PSI$N1", "[", 
+     RowBox[{"n_", ",", "p_", ",", "q_"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"PSI$N1", "[", 
+      RowBox[{"n", ",", "p", ",", "q"}], "]"}], "=", 
+     RowBox[{"Expand", "[", 
+      RowBox[{"Factor", "[", 
+       RowBox[{"PSI$N1f", "[", 
+        RowBox[{"n", ",", "p", ",", "q"}], "]"}], "]"}], "]"}]}]}], "\n", 
+   "\[IndentingNewLine]", 
+   RowBox[{"Clear", "[", "newPsiBang2", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"newPsiBang2", "[", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{"n_", ",", "1"}], "}"}], ",", 
+      RowBox[{"{", 
+       RowBox[{"var1_", ",", "var2_"}], "}"}], ",", "outvar_", ",", "ZZ_"}], 
+     "]"}], ":=", 
+    RowBox[{"Module", "[", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"{", "Z", "}"}], ",", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"Z", "=", 
+        RowBox[{"Expand", "[", "ZZ", "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"Expand", "[", 
+        RowBox[{"Sum", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"Coefficient", "[", 
+            RowBox[{
+             RowBox[{"Coefficient", "[", 
+              RowBox[{"Z", ",", "var1", ",", "i"}], "]"}], ",", "var2", ",", 
+             "j"}], "]"}], "*", 
+           RowBox[{"(", 
+            RowBox[{
+             RowBox[{"PSI$N1", "[", 
+              RowBox[{"n", ",", "i", ",", "j"}], "]"}], "/.", 
+             RowBox[{"{", 
+              RowBox[{"L", "\[Rule]", "outvar"}], "}"}]}], ")"}]}], ",", 
+          RowBox[{"{", 
+           RowBox[{"i", ",", "0", ",", "n"}], "}"}], ",", 
+          RowBox[{"{", 
+           RowBox[{"j", ",", "0", ",", "1"}], "}"}]}], "]"}], "]"}]}]}], 
+     "\[IndentingNewLine]", "]"}]}], "\n", "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{"find", " ", "elements", " ", "in", " ", "K", 
+     RowBox[{"(", 
+      RowBox[{
+       RowBox[{"P", "^", "m"}], " ", "x", " ", 
+       RowBox[{"P", "^", "1"}]}], ")"}], " ", "such", " ", "that", " ", 
+     "their", " ", "pushforward", " ", "to", " ", "K", 
+     RowBox[{"(", 
+      RowBox[{"P", "^", 
+       RowBox[{"(", 
+        RowBox[{"m", "+", "1"}], ")"}]}], ")"}], " ", "is", " ", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "L", ",", 
+       RowBox[{"L", "^", "2"}], ",", 
+       RowBox[{"...", 
+        RowBox[{"L", "^", 
+         RowBox[{"(", 
+          RowBox[{"m", "+", "1"}], ")"}]}]}]}], "}"}]}], " ", "*)"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"findBasis$M1", "[", "m_", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"findBasis$M1", "[", "m", "]"}], "=", "\[IndentingNewLine]", 
+     RowBox[{"Module", "[", 
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{
+        "vars", ",", "A", ",", "B", ",", "list", ",", "i", ",", "j", ",", "k",
+          ",", "eqs", ",", "sols", ",", "sol"}], "}"}], ",", 
+       "\[IndentingNewLine]", 
+       RowBox[{
+        RowBox[{"vars", "=", 
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"Subscript", "[", 
+            RowBox[{"a", ",", "i"}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "0", ",", 
+             RowBox[{"m", "+", "1"}]}], "}"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"A", "=", 
+         RowBox[{
+          RowBox[{"Sum", "[", 
+           RowBox[{
+            RowBox[{
+             RowBox[{"Subscript", "[", 
+              RowBox[{"a", ",", "i"}], "]"}], "*", 
+             RowBox[{"L1", "^", "i"}]}], ",", 
+            RowBox[{"{", 
+             RowBox[{"i", ",", "0", ",", "m"}], "}"}]}], "]"}], "+", 
+          "\[IndentingNewLine]", 
+          RowBox[{
+           RowBox[{"Subscript", "[", 
+            RowBox[{"a", ",", 
+             RowBox[{"m", "+", "1"}]}], "]"}], "*", 
+           RowBox[{"L1", "^", "m"}], "*", "L2"}]}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"B", "=", 
+         RowBox[{"newPsiBang2", "[", 
+          RowBox[{
+           RowBox[{"{", 
+            RowBox[{"m", ",", "1"}], "}"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"L1", ",", "L2"}], "}"}], ",", "L", ",", "A"}], "]"}]}], 
+        ";", "\[IndentingNewLine]", 
+        RowBox[{"list", "=", 
+         RowBox[{"Table", "[", 
+          RowBox[{"Null", ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "0", ",", 
+             RowBox[{"m", "+", "1"}]}], "}"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"For", "[", 
+         RowBox[{
+          RowBox[{"k", "=", "0"}], ",", 
+          RowBox[{"k", "\[LessEqual]", 
+           RowBox[{"m", "+", "1"}]}], ",", 
+          RowBox[{"k", "++"}], ",", "\[IndentingNewLine]", 
+          RowBox[{
+           RowBox[{"eqs", "=", 
+            RowBox[{"Table", "[", 
+             RowBox[{
+              RowBox[{
+               RowBox[{"Coefficient", "[", 
+                RowBox[{"B", ",", "L", ",", "i"}], "]"}], "\[Equal]", 
+               RowBox[{"If", "[", 
+                RowBox[{
+                 RowBox[{"k", "\[Equal]", "i"}], ",", "1", ",", "0"}], 
+                "]"}]}], ",", 
+              RowBox[{"{", 
+               RowBox[{"i", ",", "0", ",", 
+                RowBox[{"m", "+", "1"}]}], "}"}]}], "]"}]}], ";", 
+           "\[IndentingNewLine]", 
+           RowBox[{"sols", " ", "=", 
+            RowBox[{"Solve", "[", 
+             RowBox[{"eqs", ",", "vars"}], "]"}]}], ";", 
+           "\[IndentingNewLine]", 
+           RowBox[{"sol", " ", "=", " ", 
+            RowBox[{
+            "sols", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}]}], 
+           ";", "\[IndentingNewLine]", 
+           RowBox[{
+            RowBox[{"list", "\[LeftDoubleBracket]", 
+             RowBox[{"k", "+", "1"}], "\[RightDoubleBracket]"}], " ", "=", 
+            RowBox[{"A", "/.", "sol"}]}], ";"}]}], "\[IndentingNewLine]", 
+         "]"}], ";", "\[IndentingNewLine]", "list"}]}], "\[IndentingNewLine]",
+       "]"}]}]}], "\[IndentingNewLine]"}]}]], "Input",
+ CellChangeTimes->{{3.801066388986641*^9, 3.8010664015310593`*^9}, {
+   3.801066503394569*^9, 3.80106651662502*^9}, {3.801066564574067*^9, 
+   3.801066564741948*^9}, {3.8010670236288843`*^9, 3.801067027753759*^9}, {
+   3.801067100792351*^9, 3.80106710544508*^9}, {3.8010671878060493`*^9, 
+   3.80106730349851*^9}, {3.801068087792117*^9, 3.8010680923566713`*^9}, 
+   3.8010694137602043`*^9, {3.801136097102274*^9, 3.8011361141220093`*^9}, {
+   3.8011362235083227`*^9, 3.801136224919012*^9}, {3.801136755713544*^9, 
+   3.801136757460051*^9}}],
+
+Cell[BoxData[{
+ RowBox[{"Clear", "[", 
+  RowBox[{"PSI$NM", ",", "S", ",", "T"}], "]"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"PSI$NM", "[", 
+   RowBox[{"n_", ",", "0", ",", "p_", ",", "0"}], "]"}], ":=", 
+  RowBox[{"L", "^", "p"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"PSI$NM", "[", 
+   RowBox[{"0", ",", "m_", ",", "0", ",", "q_"}], "]"}], ":=", 
+  RowBox[{"L", "^", "q"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"PSI$NM", "[", 
+   RowBox[{"n_", ",", "1", ",", "p_", ",", "q_"}], "]"}], ":=", 
+  RowBox[{
+   RowBox[{"PSI$NM", "[", 
+    RowBox[{"n", ",", "1", ",", "p", ",", "q"}], "]"}], "=", 
+   RowBox[{"PSI$N1", "[", 
+    RowBox[{"n", ",", "p", ",", "q"}], "]"}]}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"PSI$NM", "[", 
+    RowBox[{"n_", ",", "mplus1_", ",", "p_", ",", "q_"}], "]"}], ":=", 
+   RowBox[{
+    RowBox[{"PSI$NM", "[", 
+     RowBox[{"n", ",", "mplus1", ",", "p", ",", "q"}], "]"}], "=", 
+    RowBox[{"Module", "[", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"m", "=", 
+         RowBox[{"mplus1", "-", "1"}]}], ",", "basis", ",", "A", ",", "B", 
+        ",", "C"}], "}"}], ",", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"basis", "=", 
+        RowBox[{"findBasis$M1", "[", "m", "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"A", "=", 
+        RowBox[{
+         RowBox[{"basis", "\[LeftDoubleBracket]", 
+          RowBox[{"q", "+", "1"}], "\[RightDoubleBracket]"}], "/.", 
+         RowBox[{"{", 
+          RowBox[{
+           RowBox[{"L1", "\[Rule]", "L2"}], ",", 
+           RowBox[{"L2", "\[Rule]", "T"}]}], "}"}]}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"B", "=", 
+        RowBox[{"newPsiBang2", "[", 
+         RowBox[{
+          RowBox[{"{", 
+           RowBox[{"n", ",", "m"}], "}"}], ",", 
+          RowBox[{"{", 
+           RowBox[{"L1", ",", "L2"}], "}"}], ",", "S", ",", 
+          RowBox[{
+           RowBox[{"L1", "^", "p"}], "*", "A"}]}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"C", "=", 
+        RowBox[{"newPsiBang2", "[", 
+         RowBox[{
+          RowBox[{"{", 
+           RowBox[{
+            RowBox[{"n", "+", "m"}], ",", "1"}], "}"}], ",", 
+          RowBox[{"{", 
+           RowBox[{"S", ",", "T"}], "}"}], ",", "L", ",", "B"}], "]"}]}], ";",
+        "\[IndentingNewLine]", 
+       RowBox[{"Expand", "[", 
+        RowBox[{"Factor", "[", "C", "]"}], "]"}]}]}], "\[IndentingNewLine]", 
+     "]"}]}]}], "\[IndentingNewLine]"}], "\n", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"newPsiBang2", "[", 
+    RowBox[{
+     RowBox[{"{", 
+      RowBox[{"n_", ",", "m_"}], "}"}], ",", 
+     RowBox[{"{", 
+      RowBox[{"var1_", ",", "var2_"}], "}"}], ",", "outvar_", ",", "ZZ_"}], 
+    "]"}], ":=", 
+   RowBox[{"Module", "[", "\[IndentingNewLine]", 
+    RowBox[{
+     RowBox[{"{", 
+      RowBox[{"Z", ",", "deg1", ",", "deg2"}], "}"}], ",", 
+     "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"Z", "=", 
+       RowBox[{"Expand", "[", "ZZ", "]"}]}], ";", "\[IndentingNewLine]", 
+      RowBox[{"deg1", "=", 
+       RowBox[{"Exponent", "[", 
+        RowBox[{"Z", ",", "var1"}], "]"}]}], ";", "\[IndentingNewLine]", 
+      RowBox[{"deg2", "=", 
+       RowBox[{"Exponent", "[", 
+        RowBox[{"Z", ",", "var2"}], "]"}]}], ";", "\[IndentingNewLine]", 
+      RowBox[{"Expand", "[", 
+       RowBox[{"Sum", "[", 
+        RowBox[{
+         RowBox[{
+          RowBox[{"Coefficient", "[", 
+           RowBox[{
+            RowBox[{"Coefficient", "[", 
+             RowBox[{"Z", ",", "var1", ",", "i"}], "]"}], ",", "var2", ",", 
+            "j"}], "]"}], "*", 
+          RowBox[{"(", 
+           RowBox[{
+            RowBox[{"PSI$NM", "[", 
+             RowBox[{"n", ",", "m", ",", "i", ",", "j"}], "]"}], "/.", 
+            RowBox[{"{", 
+             RowBox[{"L", "\[Rule]", "outvar"}], "}"}]}], ")"}]}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "0", ",", "deg1"}], "}"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"j", ",", "0", ",", "deg2"}], "}"}]}], "]"}], "]"}]}]}], 
+    "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]"}], "\n", 
+ RowBox[{
+  RowBox[{"newPsiBangMany", "[", 
+   RowBox[{
+    RowBox[{"{", "n_", "}"}], ",", 
+    RowBox[{"{", "uuu_", "}"}], ",", "www_", ",", "Z_"}], "]"}], ":=", 
+  RowBox[{"Z", "/.", 
+   RowBox[{"{", 
+    RowBox[{"uuu", "\[Rule]", "www"}], "}"}]}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"newPsiBangMany", "[", 
+   RowBox[{"ns_", ",", "uuus_", ",", "www_", ",", "Z_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", 
+   RowBox[{
+    RowBox[{"{", 
+     RowBox[{"ttt", ",", "vvvs", ",", "ms"}], "}"}], ",", 
+    "\[IndentingNewLine]", 
+    RowBox[{"If", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"Length", "[", "uuus", "]"}], "\[Equal]", "1"}], ",", 
+      RowBox[{"Z", "/.", 
+       RowBox[{"{", 
+        RowBox[{
+         RowBox[{
+         "uuus", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}], 
+         "\[Rule]", "www"}], "}"}]}], ",", "\[IndentingNewLine]", 
+      RowBox[{"If", "[", 
+       RowBox[{
+        RowBox[{
+         RowBox[{"Length", "[", "uuus", "]"}], "\[Equal]", "2"}], ",", 
+        RowBox[{"newPsiBang2", "[", 
+         RowBox[{"ns", ",", "uuus", ",", "www", ",", "Z"}], "]"}], ",", 
+        "\[IndentingNewLine]", 
+        RowBox[{
+         RowBox[{"ms", "=", 
+          RowBox[{"Join", "[", 
+           RowBox[{
+            RowBox[{"{", 
+             RowBox[{
+              RowBox[{
+              "ns", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}], 
+              "+", 
+              RowBox[{
+              "ns", "\[LeftDoubleBracket]", "2", "\[RightDoubleBracket]"}]}], 
+             "}"}], ",", 
+            RowBox[{"Drop", "[", 
+             RowBox[{"ns", ",", "2"}], "]"}]}], "]"}]}], ";", 
+         "\[IndentingNewLine]", 
+         RowBox[{"vvvs", "=", 
+          RowBox[{"Join", "[", 
+           RowBox[{
+            RowBox[{"{", "ttt", "}"}], ",", 
+            RowBox[{"Drop", "[", 
+             RowBox[{"uuus", ",", "2"}], "]"}]}], "]"}]}], ";", 
+         "\[IndentingNewLine]", 
+         RowBox[{"newPsiBangMany", "[", 
+          RowBox[{"ms", ",", "vvvs", ",", "www", ",", " ", 
+           RowBox[{"newPsiBang2", "[", 
+            RowBox[{
+             RowBox[{"Take", "[", 
+              RowBox[{"ns", ",", "2"}], "]"}], ",", 
+             RowBox[{"Take", "[", 
+              RowBox[{"uuus", ",", "2"}], "]"}], ",", "ttt", ",", "Z"}], 
+            "]"}]}], "]"}]}]}], "]"}]}], "]"}]}], "]"}]}]}], "Input",
+ CellChangeTimes->{{3.801067686551507*^9, 3.801067757806052*^9}, {
+  3.8010679277141123`*^9, 3.801067940230144*^9}, {3.801068120744752*^9, 
+  3.801068298368375*^9}, {3.801068793586752*^9, 3.8010688873986397`*^9}, {
+  3.801069015383294*^9, 3.8010691177256727`*^9}, {3.801070830884396*^9, 
+  3.8010708325946302`*^9}, {3.8011130758108263`*^9, 3.8011131226335583`*^9}, {
+  3.801136192770171*^9, 3.801136198915134*^9}}],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 2}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 4}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"===", " ", 
+    RowBox[{
+    "PUSHFORwARD", " ", "ALONG", " ", "THE", " ", "DIAGONAL", " ", "MAP"}], 
+    " ", "==="}], " ", "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"notk", "[", 
+     RowBox[{"n_", ",", "k_"}], "]"}], ":=", 
+    RowBox[{"Select", "[", 
+     RowBox[{
+      RowBox[{"Range", "[", 
+       RowBox[{"0", ",", "n"}], "]"}], ",", 
+      RowBox[{
+       RowBox[{"#", "\[NotEqual]", "k"}], "&"}]}], "]"}]}], 
+   "\[IndentingNewLine]", "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{
+    "class", " ", "of", " ", "the", " ", "diagonal", " ", "in", " ", "K", 
+     RowBox[{"(", 
+      RowBox[{
+       RowBox[{"P", "^", "n"}], " ", "x", " ", 
+       RowBox[{"P", "^", "n"}]}], ")"}]}], " ", "*)"}], "\[IndentingNewLine]", 
+   RowBox[{"Clear", "[", "DELTA$CLASS$2", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"DELTA$CLASS$2", "[", "n_", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"DELTA$CLASS$2", "[", "n", "]"}], "=", "\[IndentingNewLine]", 
+     RowBox[{"Factor", "[", 
+      RowBox[{"Sum", "[", " ", 
+       RowBox[{
+        RowBox[{"Product", "[", " ", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"(", 
+            RowBox[{"1", "-", 
+             RowBox[{"L1", "*", 
+              RowBox[{"WT", "[", 
+               RowBox[{"n", ",", "i"}], "]"}]}]}], ")"}], 
+           RowBox[{
+            RowBox[{"(", 
+             RowBox[{"1", "-", 
+              RowBox[{"L2", "*", 
+               RowBox[{"WT", "[", 
+                RowBox[{"n", ",", "i"}], "]"}]}]}], ")"}], "/", 
+            RowBox[{"(", 
+             RowBox[{"1", "-", 
+              RowBox[{
+               RowBox[{"WT", "[", 
+                RowBox[{"n", ",", "i"}], "]"}], "/", 
+               RowBox[{"WT", "[", 
+                RowBox[{"n", ",", "k"}], "]"}]}]}], ")"}]}]}], "  ", ",", 
+          RowBox[{"{", 
+           RowBox[{"i", ",", 
+            RowBox[{"notk", "[", 
+             RowBox[{"n", ",", "k"}], "]"}]}], "}"}]}], "]"}], " ", ",", 
+        RowBox[{"{", 
+         RowBox[{"k", ",", "0", ",", "n"}], "}"}]}], "]"}], "]"}]}]}], 
+   "\[IndentingNewLine]", "\n", 
+   RowBox[{
+    RowBox[{"newDeltaBang2", "[", 
+     RowBox[{"n_", ",", "invar_", ",", 
+      RowBox[{"{", 
+       RowBox[{"var1_", ",", "var2_"}], "}"}], ",", "ZZ_"}], "]"}], ":=", 
+    RowBox[{"Module", "[", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"Z", "=", 
+         RowBox[{"Expand", "[", "ZZ", "]"}]}], ",", "m", ",", "A"}], "}"}], 
+      ",", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"m", "=", 
+        RowBox[{"Exponent", "[", 
+         RowBox[{"Z", ",", "invar"}], "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"A", "=", 
+        RowBox[{"Expand", "[", 
+         RowBox[{
+          RowBox[{"(", 
+           RowBox[{
+            RowBox[{"DELTA$CLASS$2", "[", "n", "]"}], "/.", 
+            RowBox[{"{", 
+             RowBox[{
+              RowBox[{"L1", "\[Rule]", "var1"}], ",", 
+              RowBox[{"L2", "\[Rule]", "var2"}]}], "}"}]}], ")"}], "*", 
+          RowBox[{"Sum", "[", 
+           RowBox[{
+            RowBox[{
+             RowBox[{"var1", "^", "p"}], "*", 
+             RowBox[{"Coefficient", "[", 
+              RowBox[{"Z", ",", "invar", ",", "p"}], "]"}]}], ",", 
+            RowBox[{"{", 
+             RowBox[{"p", ",", "0", ",", "m"}], "}"}]}], "]"}]}], "]"}]}], 
+       ";", "\[IndentingNewLine]", 
+       RowBox[{"KnormalizeVarXY", "[", 
+        RowBox[{"n", ",", "var1", ",", "A"}], "]"}]}]}], 
+     "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", 
+   "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{"usage", ":", " ", 
+     RowBox[{"deltaBangMany", "[", 
+      RowBox[{"dim", ",", "L", ",", 
+       RowBox[{"{", 
+        RowBox[{"L1", ",", "L2", ",", "L3"}], "}"}], ",", "X"}], "]"}]}], " ",
+     "*)"}], "\n", 
+   RowBox[{
+    RowBox[{"newDeltaBangMany", "[", 
+     RowBox[{"n_", ",", "uuu_", ",", "vvvs_", ",", "Z_"}], "]"}], ":=", 
+    RowBox[{"Module", "[", 
+     RowBox[{
+      RowBox[{"{", "ttt", "}"}], ",", "\[IndentingNewLine]", 
+      RowBox[{"If", "[", 
+       RowBox[{
+        RowBox[{
+         RowBox[{"Length", "[", "vvvs", "]"}], "\[Equal]", "1"}], ",", 
+        RowBox[{"Z", "/.", 
+         RowBox[{"{", 
+          RowBox[{"uuu", "\[Rule]", 
+           RowBox[{
+           "vvvs", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}]}], 
+          "}"}]}], ",", "\[IndentingNewLine]", 
+        RowBox[{"If", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"Length", "[", "vvvs", "]"}], "\[Equal]", "2"}], ",", 
+          RowBox[{"newDeltaBang2", "[", 
+           RowBox[{"n", ",", "uuu", ",", "vvvs", ",", "Z"}], "]"}], ",", 
+          "\[IndentingNewLine]", 
+          RowBox[{"newDeltaBangMany", "[", 
+           RowBox[{"n", ",", "ttt", ",", 
+            RowBox[{"Drop", "[", 
+             RowBox[{"vvvs", ",", "1"}], "]"}], ",", " ", 
+            RowBox[{"newDeltaBang2", "[", 
+             RowBox[{"n", ",", "uuu", ",", 
+              RowBox[{"{", 
+               RowBox[{
+                RowBox[{
+                "vvvs", "\[LeftDoubleBracket]", "1", 
+                 "\[RightDoubleBracket]"}], ",", "ttt"}], "}"}], ",", "Z"}], 
+             "]"}]}], "]"}]}], "]"}]}], "]"}]}], "]"}]}]}]}]], "Input",
+ CellChangeTimes->{{3.8010694276831083`*^9, 3.801069434269802*^9}, {
+  3.801069600632613*^9, 3.801069629592244*^9}, {3.801113235025399*^9, 
+  3.801113235608663*^9}, {3.801113291271837*^9, 3.8011133545199003`*^9}, {
+  3.801113390957038*^9, 3.80111339175294*^9}, {3.801136134192531*^9, 
+  3.801136178622281*^9}}],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 2}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 4}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "PUSHFORWARD", " ", "ALONG", " ", "THE", " ", "POWER", " ", "MAP"}], " ", 
+   "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{"Clear", "[", "OMEGA$ND", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"OMEGA$ND", "[", 
+     RowBox[{"n_", ",", "d_", ",", "p_"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"OMEGA$ND", "[", 
+      RowBox[{"n", ",", "d", ",", "p"}], "]"}], "=", 
+     RowBox[{"Module", "[", 
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{"vars", ",", "ns", ",", "A", ",", "B"}], "}"}], ",", 
+       "\[IndentingNewLine]", 
+       RowBox[{
+        RowBox[{"vars", "=", 
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"Subscript", "[", 
+            RowBox[{"TMP$X", ",", "i"}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"ns", "=", " ", 
+         RowBox[{"Table", "[", 
+          RowBox[{"n", ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"A", "=", 
+         RowBox[{"newDeltaBangMany", "[", 
+          RowBox[{"n", ",", "L", ",", "vars", ",", 
+           RowBox[{"L", "^", "p"}]}], "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{"B", "=", 
+         RowBox[{"newPsiBangMany", "[", 
+          RowBox[{"ns", ",", "vars", ",", "L", ",", 
+           RowBox[{"Expand", "[", "A", "]"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"Expand", "[", "B", "]"}]}]}], "\[IndentingNewLine]", 
+      "]"}]}]}], "\[IndentingNewLine]", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"newOmegaBang", "[", 
+     RowBox[{"n_", ",", "0", ",", "var1_", ",", "var2_", ",", "ZZ_"}], "]"}], 
+    ":=", 
+    RowBox[{"Coefficient", "[", 
+     RowBox[{"ZZ", ",", "var1", ",", "0"}], "]"}]}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"newOmegaBang", "[", 
+     RowBox[{"n_", ",", "1", ",", "var1_", ",", "var2_", ",", "ZZ_"}], "]"}], 
+    ":=", 
+    RowBox[{"ZZ", "/.", 
+     RowBox[{"{", 
+      RowBox[{"var1", "\[Rule]", "var2"}], "}"}]}]}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"newOmegaBang", "[", 
+     RowBox[{"n_", ",", "d_", ",", "var1_", ",", "var2_", ",", "ZZ_"}], "]"}],
+     ":=", 
+    RowBox[{"Module", "[", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"Z", "=", 
+         RowBox[{"Expand", "[", "ZZ", "]"}]}], ",", "m", ",", "A"}], "}"}], 
+      ",", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"m", "=", 
+        RowBox[{"Exponent", "[", 
+         RowBox[{"Z", ",", "var1"}], "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"A", "=", 
+        RowBox[{"Sum", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"(", 
+            RowBox[{
+             RowBox[{"OMEGA$ND", "[", 
+              RowBox[{"n", ",", "d", ",", "p"}], "]"}], "/.", 
+             RowBox[{"{", 
+              RowBox[{"L", "\[Rule]", "var2"}], "}"}]}], ")"}], "*", 
+           RowBox[{"Coefficient", "[", 
+            RowBox[{"Z", ",", "var1", ",", "p"}], "]"}]}], ",", 
+          RowBox[{"{", 
+           RowBox[{"p", ",", "0", ",", "m"}], "}"}]}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"Expand", "[", "A", "]"}]}]}], "\[IndentingNewLine]", "]"}]}], 
+   "\[IndentingNewLine]", "\n", 
+   RowBox[{"(*", " ", 
+    RowBox[{
+     RowBox[{
+      RowBox[{"P", "^", "n1"}], " ", "x", " ", 
+      RowBox[{"P", "^", "n2"}], " ", "x", " ", 
+      RowBox[{"P", "^", "n3"}]}], " ", "\[Rule]", " ", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"P", "^", 
+        RowBox[{"(", 
+         RowBox[{"d1", "*", "n1"}], ")"}]}], " ", "x", " ", 
+       RowBox[{"P", "^", 
+        RowBox[{"(", 
+         RowBox[{"d2", "*", "n2"}], ")"}]}], " ", "x", " ", 
+       RowBox[{"P", "^", 
+        RowBox[{"(", 
+         RowBox[{"d3", "*", "n3"}], ")"}]}]}], " ", "\[Rule]", " ", 
+      RowBox[{"P", "^", 
+       RowBox[{"(", 
+        RowBox[{
+         RowBox[{"d1", "*", "n1"}], " ", "+", " ", 
+         RowBox[{"d2", "*", "n2"}], " ", "+", " ", 
+         RowBox[{"d3", "*", "n3"}]}], " "}]}]}]}], "*)"}], " ", 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"newOmegaBangLam", "[", 
+     RowBox[{"ns_", ",", "ds_", ",", "uuus_", ",", "www_", ",", "Z0_"}], 
+     "]"}], ":=", 
+    RowBox[{"Module", "[", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"Z", "=", 
+         RowBox[{"Expand", "[", "Z0", "]"}]}], ",", "\[IndentingNewLine]", 
+        RowBox[{"m", " ", "=", " ", 
+         RowBox[{"Length", "[", "ns", "]"}]}], ",", "\[IndentingNewLine]", 
+        "vars", ",", "W", ",", "nds", ",", "ttt", ",", "i"}], "}"}], ",", 
+      "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"vars", "=", 
+        RowBox[{"Table", "[", 
+         RowBox[{
+          RowBox[{"Subscript", "[", 
+           RowBox[{"ttt", ",", "i"}], "]"}], ",", 
+          RowBox[{"{", 
+           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"nds", "=", 
+        RowBox[{"Table", "[", " ", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"ns", "[", 
+            RowBox[{"[", "i", "]"}], "]"}], "*", 
+           RowBox[{"ds", "[", 
+            RowBox[{"[", "i", "]"}], "]"}]}], ",", " ", 
+          RowBox[{"{", 
+           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"W", "=", "Z"}], ";", "\[IndentingNewLine]", 
+       RowBox[{"For", "[", 
+        RowBox[{
+         RowBox[{"i", "=", "1"}], ",", 
+         RowBox[{"i", "\[LessEqual]", "m"}], ",", 
+         RowBox[{"i", "++"}], ",", 
+         RowBox[{"W", "=", 
+          RowBox[{"newOmegaBang", "[", 
+           RowBox[{
+            RowBox[{"ns", "[", 
+             RowBox[{"[", "i", "]"}], "]"}], ",", 
+            RowBox[{"ds", "[", 
+             RowBox[{"[", "i", "]"}], "]"}], ",", 
+            RowBox[{"uuus", "[", 
+             RowBox[{"[", "i", "]"}], "]"}], ",", 
+            RowBox[{"vars", "[", 
+             RowBox[{"[", "i", "]"}], "]"}], ",", "W"}], "]"}]}]}], "]"}], 
+       ";", "\[IndentingNewLine]", 
+       RowBox[{"newPsiBangMany", "[", 
+        RowBox[{"nds", ",", "vars", ",", "www", ",", "W"}], "]"}]}]}], 
+     "\[IndentingNewLine]", "]"}]}]}]}]], "Input",
+ CellChangeTimes->{{3.801070352996221*^9, 3.801070565349876*^9}, {
+  3.80107060971841*^9, 3.8010706107384243`*^9}, {3.8010709729287777`*^9, 
+  3.8010709732164087`*^9}, {3.801071164182687*^9, 3.801071164313745*^9}, {
+  3.801071203324443*^9, 3.801071220495305*^9}, {3.801071259284038*^9, 
+  3.8010713728549137`*^9}, {3.801071459809278*^9, 3.801071460958413*^9}, {
+  3.801113170295889*^9, 3.801113206388917*^9}, {3.801136238289638*^9, 
+  3.8011362562914467`*^9}}],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 2}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 4}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", 
+   RowBox[{
+   "only", " ", "works", " ", "for", " ", "lists", " ", "of", " ", "equal", 
+    " ", 
+    RowBox[{"length", "!!"}]}], "*)"}], 
+  RowBox[{
+   RowBox[{
+    RowBox[{"Zip", "[", 
+     RowBox[{"as_", ",", "bs_"}], "]"}], ":=", 
+    RowBox[{"MapThread", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{"#1", ",", "#2"}], "}"}], "&"}], ",", 
+      RowBox[{"{", 
+       RowBox[{"as", ",", "bs"}], "}"}]}], "]"}]}], "\n", 
+   RowBox[{
+    RowBox[{"Zip3", "[", 
+     RowBox[{"as_", ",", "bs_", ",", "cs_"}], "]"}], ":=", 
+    RowBox[{"MapThread", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{"#1", ",", "#2", ",", "#3"}], "}"}], "&"}], ",", 
+      RowBox[{"{", 
+       RowBox[{"as", ",", "bs", ",", "cs"}], "}"}]}], "]"}]}], "\n", 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"Fst", "[", "pair_", "]"}], ":=", 
+    RowBox[{"pair", "[", 
+     RowBox[{"[", "1", "]"}], "]"}]}], "\n", 
+   RowBox[{
+    RowBox[{"Snd", "[", "pair_", "]"}], ":=", 
+    RowBox[{"pair", "[", 
+     RowBox[{"[", "2", "]"}], "]"}]}], "\n", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"extendListWithZeros", "[", 
+     RowBox[{"L_", ",", "n_"}], "]"}], ":=", 
+    RowBox[{"Join", "[", 
+     RowBox[{"L", ",", 
+      RowBox[{"Table", "[", 
+       RowBox[{"0", ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "1", ",", 
+          RowBox[{"n", "-", 
+           RowBox[{"Length", "[", "L", "]"}]}]}], "}"}]}], "]"}]}], 
+     "]"}]}]}]}]], "Input"],
+
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{
+   RowBox[{"EmptyPartQ", "[", "part_", "]"}], ":=", 
+   RowBox[{
+    RowBox[{"Length", "[", "part", "]"}], "\[Equal]", "0"}]}], 
+  "\[IndentingNewLine]"}], "\n", 
+ RowBox[{
+  RowBox[{"DualPart", "[", 
+   RowBox[{"{", "}"}], "]"}], ":=", 
+  RowBox[{"{", "}"}]}], "\n", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"DualPart", "[", "lam_", "]"}], ":=", 
+   RowBox[{"With", "[", 
+    RowBox[{
+     RowBox[{"{", 
+      RowBox[{"m", "=", 
+       RowBox[{"lam", "[", 
+        RowBox[{"[", "1", "]"}], "]"}]}], "}"}], ",", 
+     RowBox[{"Table", "[", 
+      RowBox[{
+       RowBox[{"Length", "[", 
+        RowBox[{"Select", "[", 
+         RowBox[{"lam", ",", 
+          RowBox[{
+           RowBox[{"#", "\[GreaterEqual]", "i"}], "&"}]}], "]"}], "]"}], ",", 
+       
+       RowBox[{"{", 
+        RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], "]"}]}], 
+  "\[IndentingNewLine]", " "}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"toExpoForm", "[", 
+    RowBox[{"{", "}"}], "]"}], ":=", 
+   RowBox[{"{", "}"}]}], " "}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"toExpoForm", "[", "part_", "]"}], ":=", 
+   RowBox[{"Module", "[", 
+    RowBox[{
+     RowBox[{"{", 
+      RowBox[{"k", "=", 
+       RowBox[{"Max", "[", "part", "]"}]}], "}"}], ",", 
+     RowBox[{"Table", "[", 
+      RowBox[{
+       RowBox[{"Length", "[", 
+        RowBox[{"Select", "[", 
+         RowBox[{"part", ",", 
+          RowBox[{
+           RowBox[{"#", "\[Equal]", "j"}], "&"}]}], "]"}], "]"}], ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "k"}], "}"}]}], "]"}]}], "]"}]}], 
+  "\[IndentingNewLine]"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"posVectorQ", "[", "as_", "]"}], ":=", 
+   RowBox[{
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"#", "\[GreaterEqual]", "0"}], "&"}], ",", "as"}], "]"}], "/.", 
+    RowBox[{"{", 
+     RowBox[{"List", "\[Rule]", "And"}], "}"}]}]}], 
+  ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"kdeTriples", "[", 
+   RowBox[{"p_", ",", "ns_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"{", 
+     RowBox[{
+      RowBox[{"m", " ", "=", " ", 
+       RowBox[{"Length", "[", "ns", "]"}]}], ",", "\[IndentingNewLine]", 
+      "posQ", ",", "oneK", ",", "A"}], "}"}], ",", "\[IndentingNewLine]", 
+    RowBox[{
+     RowBox[{
+      RowBox[{"oneK", "[", "k_", "]"}], ":=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"{", 
+         RowBox[{"k", ",", 
+          RowBox[{"ns", "-", "es"}], ",", "es"}], "}"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"es", ",", 
+          RowBox[{"Combinatorica`Compositions", "[", 
+           RowBox[{
+            RowBox[{"p", "-", "k"}], ",", "m"}], "]"}]}], "}"}]}], "]"}]}], 
+     ";", "\[IndentingNewLine]", 
+     RowBox[{"A", "=", 
+      RowBox[{"Table", " ", "[", 
+       RowBox[{
+        RowBox[{"oneK", "[", "k", "]"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"k", ",", "0", ",", 
+          RowBox[{"p", "-", "1"}]}], "}"}]}], "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"A", "=", 
+      RowBox[{"Select", "[", 
+       RowBox[{
+        RowBox[{"Flatten", "[", 
+         RowBox[{"A", ",", "1"}], "]"}], ",", 
+        RowBox[{
+         RowBox[{"posVectorQ", "[", 
+          RowBox[{"Snd", "[", "#", "]"}], "]"}], "&"}]}], "]"}]}], ";", 
+     "\[IndentingNewLine]", "A"}]}], "]"}]}], "\[IndentingNewLine]"}], "Input",\
+
+ CellChangeTimes->{{3.801071512912022*^9, 3.80107154768006*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"motivic", " ", "Chern", " ", "class", " ", "of", " ", 
+    RowBox[{"P", "^", "n"}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"Clear", "[", "mcPn", "]"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"mcPn", "[", "n_", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"mcPn", "[", "n", "]"}], "=", "\[IndentingNewLine]", 
+     RowBox[{"Module", "[", 
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{"rel", ",", "tmp"}], "}"}], ",", 
+       RowBox[{
+        RowBox[{"rel", "=", 
+         RowBox[{"Product", "[", 
+          RowBox[{
+           RowBox[{"1", "-", 
+            RowBox[{"L", "*", 
+             RowBox[{"X", "^", 
+              RowBox[{"(", 
+               RowBox[{"n", "-", "i"}], ")"}]}], "*", 
+             RowBox[{"Y", "^", "i"}]}]}], ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"tmp", "=", 
+         RowBox[{"Product", "[", 
+          RowBox[{
+           RowBox[{"1", "+", 
+            RowBox[{"t", "*", "L", "*", 
+             RowBox[{"X", "^", 
+              RowBox[{"(", 
+               RowBox[{"n", "-", "i"}], ")"}]}], "*", 
+             RowBox[{"Y", "^", "i"}]}]}], ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"Factor", "[", 
+         RowBox[{
+          RowBox[{"(", 
+           RowBox[{"tmp", "-", 
+            RowBox[{
+             RowBox[{
+              RowBox[{"(", 
+               RowBox[{"-", "t"}], ")"}], "^", 
+              RowBox[{"(", 
+               RowBox[{"n", "+", "1"}], ")"}]}], " ", "rel"}]}], ")"}], "/", 
+          RowBox[{"(", 
+           RowBox[{"1", "+", "t"}], ")"}]}], "]"}]}]}], 
+      "]"}]}]}]}]}]], "Input",
+ CellChangeTimes->{{3.801136267380416*^9, 3.801136273051806*^9}}],
+
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{"Clear", "[", 
+   RowBox[{"L", ",", "S"}], "]"}], 
+  "\[IndentingNewLine]"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"LL", "[", "i_", "]"}], ":=", 
+   RowBox[{"Subscript", "[", 
+    RowBox[{"L", ",", "i"}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"SS", "[", "i_", "]"}], ":=", 
+   RowBox[{"Subscript", "[", 
+    RowBox[{"S", ",", "i"}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"LLs", "[", "n_", "]"}], ":=", 
+  RowBox[{"Table", "[", 
+   RowBox[{
+    RowBox[{"LL", "[", "i", "]"}], ",", 
+    RowBox[{"{", 
+     RowBox[{"i", ",", "1", ",", "n"}], "}"}]}], 
+   "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"SSs", "[", "n_", "]"}], ":=", 
+   RowBox[{"Table", "[", 
+    RowBox[{
+     RowBox[{"SS", "[", "i", "]"}], ",", 
+     RowBox[{"{", 
+      RowBox[{"i", ",", "1", ",", "n"}], "}"}]}], "]"}]}], 
+  "\[IndentingNewLine]"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"Clear", "[", 
+   RowBox[{"mcXLam", ",", "mcDisj1", ",", "mcDisj", ",", "mcDisjSorted"}], 
+   "]"}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"mcXLam", "[", 
+   RowBox[{"{", "}"}], "]"}], ":=", 
+  RowBox[{
+   RowBox[{"mcXLam", "[", 
+    RowBox[{"{", "}"}], "]"}], "=", "1"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"mcXLam", "[", 
+    RowBox[{"{", "1", "}"}], "]"}], ":=", 
+   RowBox[{
+    RowBox[{"mcXLam", "[", 
+     RowBox[{"{", "1", "}"}], "]"}], "=", 
+    RowBox[{"mcPn", "[", "1", "]"}]}]}], 
+  "\[IndentingNewLine]"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"mcDisj1", "[", "0", "]"}], ":=", 
+  RowBox[{
+   RowBox[{"mcDisj1", "[", "0", "]"}], "=", "1"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"mcDisj1", "[", "1", "]"}], ":=", 
+   RowBox[{
+    RowBox[{"mcDisj1", "[", "1", "]"}], "=", 
+    RowBox[{"mcPn", "[", "1", "]"}]}]}], 
+  "\[IndentingNewLine]"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"mcDisj", "[", 
+    RowBox[{"{", "}"}], "]"}], ":=", 
+   RowBox[{
+    RowBox[{"mcDisj", "[", 
+     RowBox[{"{", "}"}], "]"}], "=", "1"}]}], 
+  "\[IndentingNewLine]"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"mcDisjSorted", "[", 
+    RowBox[{"{", "}"}], "]"}], ":=", 
+   RowBox[{
+    RowBox[{"mcDisjSorted", "[", 
+     RowBox[{"{", "}"}], "]"}], "=", "1"}]}], "\n", "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+    RowBox[{
+    "equivariant", " ", "motivic", " ", "chern", " ", "class", " ", "of", " ",
+      "D", 
+     RowBox[{"(", "n", ")"}]}], "=", 
+    RowBox[{"X", 
+     RowBox[{"(", 
+      RowBox[{"1", "^", "n"}], ")"}]}]}], " ", 
+   "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"mcDisj1", "[", "n_", "]"}], ":=", 
+   RowBox[{
+    RowBox[{"mcDisj1", "[", "n", "]"}], "=", 
+    RowBox[{"Module", "[", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{"parts", "=", 
+        RowBox[{"Select", "[", 
+         RowBox[{
+          RowBox[{"Combinatorica`Partitions", "[", "n", "]"}], ",", 
+          RowBox[{
+           RowBox[{
+            RowBox[{"Length", "[", "#", "]"}], "<", "n"}], "&"}]}], "]"}]}], 
+       "}"}], ",", "\[IndentingNewLine]", 
+      RowBox[{"Expand", "[", 
+       RowBox[{
+        RowBox[{"mcPn", "[", "n", "]"}], "-", 
+        RowBox[{"Sum", "[", 
+         RowBox[{
+          RowBox[{"mcXLam", "[", "p", "]"}], ",", 
+          RowBox[{"{", 
+           RowBox[{"p", ",", "parts"}], "}"}]}], "]"}]}], "]"}]}], 
+     "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", "\n", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "equivariant", " ", "motivic", " ", "chern", " ", "class", " ", "of", " ", 
+    "X_lambda"}], " ", "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"mcXLam", "[", "lambda_", "]"}], ":=", 
+   RowBox[{
+    RowBox[{"mcXLam", "[", "lambda", "]"}], "=", 
+    RowBox[{"Module", "[", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"es", " ", "=", " ", 
+         RowBox[{"toExpoForm", "[", "lambda", "]"}]}], ",", "m", ",", "m1", 
+        ",", "ns", ",", "pairs", ",", "Z"}], "}"}], ",", 
+      "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"m", "=", 
+        RowBox[{"Length", "[", "es", "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"ns", " ", "=", " ", 
+        RowBox[{"Range", "[", "m", "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"pairs", " ", "=", " ", 
+        RowBox[{"Zip", "[", 
+         RowBox[{"ns", ",", "es"}], "]"}]}], ";", "   ", 
+       RowBox[{"(*", " ", 
+        RowBox[{"i", "^", "e_"}], " ", "*)"}], "\[IndentingNewLine]", 
+       RowBox[{"pairs", " ", "=", " ", 
+        RowBox[{"Select", "[", 
+         RowBox[{"pairs", ",", 
+          RowBox[{
+           RowBox[{
+            RowBox[{"Snd", "[", "#", "]"}], ">", "0"}], "&"}]}], "]"}]}], ";",
+        " ", 
+       RowBox[{"(*", " ", 
+        RowBox[{"!!", "!"}], " ", "*)"}], "\[IndentingNewLine]", 
+       RowBox[{"m1", " ", "=", " ", 
+        RowBox[{"Length", "[", "pairs", "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"ns", " ", "=", 
+        RowBox[{"Map", "[", 
+         RowBox[{"Fst", ",", "pairs"}], "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"es", " ", "=", 
+        RowBox[{"Map", "[", 
+         RowBox[{"Snd", ",", "pairs"}], "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"Z", "=", 
+        RowBox[{"mcDisj", "[", "es", "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"(*", " ", 
+        RowBox[{
+         RowBox[{"Print", "[", 
+          RowBox[{"\"\<xlam1 - \>\"", ",", "pairs"}], "]"}], ";", 
+         "\[IndentingNewLine]", 
+         RowBox[{"Print", "[", 
+          RowBox[{
+          "\"\<xlam2 - \>\"", ",", "es", ",", "\"\< | \>\"", ",", "ns", ",", 
+           "\"\< | \>\"", ",", 
+           RowBox[{"uus", "[", "m1", "]"}], ",", "\"\< | \>\"", ",", "X"}], 
+          "]"}], ";"}], " ", "*)"}], "\[IndentingNewLine]", 
+       RowBox[{"Expand", "[", 
+        RowBox[{"newOmegaBangLam", "[", 
+         RowBox[{"es", ",", "ns", ",", 
+          RowBox[{"LLs", "[", "m1", "]"}], ",", "L", ",", "Z"}], "]"}], 
+        "]"}]}]}], "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", 
+  "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "equivariant", " ", "motivic", " ", "chern", " ", "class", " ", "of", " ", 
+    "D", 
+    RowBox[{"(", 
+     RowBox[{"d1", ",", "d2", ",", "..."}], ")"}]}], " ", 
+   "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"mcDisj", "[", 
+   RowBox[{"{", "n_", "}"}], "]"}], ":=", 
+  RowBox[{
+   RowBox[{"mcDisj", "[", 
+    RowBox[{"{", "n", "}"}], "]"}], " ", "=", 
+   RowBox[{
+    RowBox[{"mcDisj1", "[", "n", "]"}], "/.", 
+    RowBox[{"{", 
+     RowBox[{"L", "\[Rule]", 
+      RowBox[{"LL", "[", "1", "]"}]}], "}"}]}]}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"mcDisj", "[", "ns0_", "]"}], ":=", 
+   RowBox[{
+    RowBox[{"mcDisj", "[", "ns0", "]"}], "=", 
+    RowBox[{"Module", "[", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"m", "=", 
+         RowBox[{"Length", "[", "ns0", "]"}]}], ",", "\[IndentingNewLine]", 
+        "nis0", ",", "nis1", ",", "ns1", ",", "idxs", ",", "X", ",", "ttt"}], 
+       "}"}], ",", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"nis0", " ", "=", 
+        RowBox[{"Zip", "[", 
+         RowBox[{"ns0", ",", 
+          RowBox[{"Range", "[", "m", "]"}]}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"nis1", "=", 
+        RowBox[{"SortBy", "[", 
+         RowBox[{"nis0", ",", 
+          RowBox[{
+           RowBox[{"-", 
+            RowBox[{"Fst", "[", "#", "]"}]}], "&"}]}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"idxs", "=", 
+        RowBox[{"Map", "[", 
+         RowBox[{"Snd", ",", "nis1"}], "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"ns1", " ", "=", 
+        RowBox[{"Select", "[", 
+         RowBox[{
+          RowBox[{"Map", "[", 
+           RowBox[{"Fst", ",", "nis1"}], "]"}], ",", 
+          RowBox[{
+           RowBox[{"#", ">", "0"}], "&"}]}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"(*", " ", 
+        RowBox[{
+         RowBox[{"Print", "[", 
+          RowBox[{
+          "\"\<nis1 - \>\"", ",", "nis0", ",", "\"\< | \>\"", ",", "nis1"}], 
+          "]"}], ";", "\[IndentingNewLine]", 
+         RowBox[{"Print", "[", 
+          RowBox[{"\"\<nis2 - \>\"", ",", "ns1"}], "]"}], ";"}], " ", "*)"}], 
+       "\[IndentingNewLine]", 
+       RowBox[{"X", "=", 
+        RowBox[{"mcDisjSorted", "[", "ns1", "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"X", "=", 
+        RowBox[{"X", "/.", 
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{
+            RowBox[{"LL", "[", "i", "]"}], "\[Rule]", 
+            RowBox[{"Subscript", "[", 
+             RowBox[{"ttt", ",", "i"}], "]"}]}], ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"X", "/.", 
+        RowBox[{"Table", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"Subscript", "[", 
+            RowBox[{"ttt", ",", "i"}], "]"}], "\[Rule]", 
+           RowBox[{"LL", "[", 
+            RowBox[{
+            "idxs", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}], 
+            "]"}]}], ",", 
+          RowBox[{"{", 
+           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}]}]}], 
+     "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", 
+  "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "a", " ", "single", " ", "term", " ", "corresponding", " ", "to", " ", "a",
+     " ", "triple", " ", 
+    RowBox[{"(", 
+     RowBox[{"k", ",", "ds", ",", "es"}], ")"}]}], " ", 
+   "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{"Clear", "[", "singleKDE", "]"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"singleKDE", "[", 
+    RowBox[{"{", 
+     RowBox[{"k_", ",", "ds_", ",", "es_"}], "}"}], "]"}], ":=", 
+   RowBox[{
+    RowBox[{"ssingleKDE", "[", 
+     RowBox[{"{", 
+      RowBox[{"k", ",", "ds", ",", "es"}], "}"}], "]"}], "=", 
+    RowBox[{"Module", "[", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{
+       "A", ",", "B", ",", "\[IndentingNewLine]", "m", ",", "vars", ",", 
+        "dims", ",", "\[IndentingNewLine]", "pp", ",", "qq", ",", "rr", ",", 
+        "ss", ",", "\[IndentingNewLine]", "pps", ",", "qqs", ",", "rrs", ",", 
+        "sss"}], "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"m", "=", 
+        RowBox[{"Length", "[", "ds", "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{
+        RowBox[{"pp", "[", "i_", "]"}], ":=", 
+        RowBox[{"Subscript", "[", 
+         RowBox[{"pp$p", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{
+        RowBox[{"qq", "[", "i_", "]"}], ":=", 
+        RowBox[{"Subscript", "[", 
+         RowBox[{"qq$q", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{
+        RowBox[{"rr", "[", "i_", "]"}], ":=", 
+        RowBox[{"Subscript", "[", 
+         RowBox[{"rr$r", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{
+        RowBox[{"ss", "[", "i_", "]"}], ":=", 
+        RowBox[{"Subscript", "[", 
+         RowBox[{"ss$s", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"pps", "=", 
+        RowBox[{"Table", "[", 
+         RowBox[{
+          RowBox[{"pp", "[", "i", "]"}], ",", 
+          RowBox[{"{", 
+           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"qqs", "=", 
+        RowBox[{"Table", "[", 
+         RowBox[{
+          RowBox[{"qq", "[", "i", "]"}], ",", 
+          RowBox[{"{", 
+           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"rrs", "=", 
+        RowBox[{"Table", "[", 
+         RowBox[{
+          RowBox[{"rr", "[", "i", "]"}], ",", 
+          RowBox[{"{", 
+           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"sss", "=", 
+        RowBox[{"Table", "[", 
+         RowBox[{
+          RowBox[{"ss", "[", "i", "]"}], ",", 
+          RowBox[{"{", 
+           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"vars", "=", 
+        RowBox[{"Join", "[", 
+         RowBox[{
+          RowBox[{"{", "zzz", "}"}], ",", "pps", ",", "qqs"}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"dims", "=", 
+        RowBox[{"Join", "[", 
+         RowBox[{
+          RowBox[{"{", "k", "}"}], ",", "ds", ",", "es"}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"A", "=", 
+        RowBox[{
+         RowBox[{"mcDisj", "[", "dims", "]"}], "/.", 
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{
+            RowBox[{"LL", "[", "i", "]"}], "\[Rule]", 
+            RowBox[{
+            "vars", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}]}], 
+           ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "1", ",", 
+             RowBox[{
+              RowBox[{"2", "m"}], "+", "1"}]}], "}"}]}], "]"}]}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"B", "=", "A"}], ";", "\[IndentingNewLine]", 
+       RowBox[{"For", "[", 
+        RowBox[{
+         RowBox[{"i", "=", "1"}], ",", 
+         RowBox[{"i", "\[LessEqual]", "m"}], ",", 
+         RowBox[{"i", "++"}], ",", 
+         RowBox[{"B", "=", 
+          RowBox[{"Expand", "[", 
+           RowBox[{"newDeltaBang2", "[", 
+            RowBox[{
+             RowBox[{
+             "es", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}], 
+             ",", 
+             RowBox[{"qq", "[", "i", "]"}], ",", 
+             RowBox[{"{", 
+              RowBox[{
+               RowBox[{"rr", "[", "i", "]"}], ",", 
+               RowBox[{"ss", "[", "i", "]"}]}], "}"}], ",", "B"}], "]"}], 
+           "]"}]}]}], "]"}], ";", "\[IndentingNewLine]", 
+       RowBox[{"For", "[", 
+        RowBox[{
+         RowBox[{"i", "=", "1"}], ",", 
+         RowBox[{"i", "\[LessEqual]", "m"}], ",", 
+         RowBox[{"i", "++"}], ",", 
+         RowBox[{"B", "=", 
+          RowBox[{"Expand", "[", 
+           RowBox[{"newPsiBang2", "[", 
+            RowBox[{
+             RowBox[{"{", 
+              RowBox[{
+               RowBox[{
+               "ds", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}], 
+               ",", 
+               RowBox[{
+               "es", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}]}],
+               "}"}], ",", 
+             RowBox[{"{", 
+              RowBox[{
+               RowBox[{"pp", "[", "i", "]"}], ",", 
+               RowBox[{"ss", "[", "i", "]"}]}], "}"}], ",", 
+             RowBox[{"LL", "[", "i", "]"}], ",", "B"}], "]"}], "]"}]}]}], 
+        "]"}], ";", "\[IndentingNewLine]", 
+       RowBox[{"B", "=", 
+        RowBox[{"newPsiBangMany", "[", 
+         RowBox[{
+          RowBox[{"Join", "[", 
+           RowBox[{
+            RowBox[{"{", "k", "}"}], ",", "es"}], "]"}], ",", 
+          RowBox[{"Join", "[", 
+           RowBox[{
+            RowBox[{"{", "zzz", "}"}], ",", "rrs"}], "]"}], ",", "z", ",", 
+          "B"}], "]"}]}], ";", "\[IndentingNewLine]", "B"}]}], 
+     "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", 
+  "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+    RowBox[{"equiv", " ", "mc", " ", "of", " ", "D", 
+     RowBox[{"(", 
+      RowBox[{"d1", ",", "d2", ",", "..."}], ")"}]}], ",", " ", 
+    RowBox[{
+     RowBox[{
+      RowBox[{
+       RowBox[{"but", " ", "we", " ", "require", " ", "d1"}], 
+       "\[GreaterEqual]", "d2", "\[GreaterEqual]", "d3", "\[GreaterEqual]"}], 
+      "..."}], "\[GreaterEqual]", "dn", ">", "0"}]}], " ", 
+   "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"mcDisjSorted", "[", 
+   RowBox[{"{", "n_", "}"}], "]"}], ":=", 
+  RowBox[{
+   RowBox[{"mcDisjSorted", "[", 
+    RowBox[{"{", "n", "}"}], "]"}], "=", 
+   RowBox[{
+    RowBox[{"mcDisj1", "[", "n", "]"}], "/.", 
+    RowBox[{"{", 
+     RowBox[{"L", "\[Rule]", 
+      RowBox[{"LL", "[", "1", "]"}]}], "}"}]}]}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"mcDisjSorted", "[", "pns_", "]"}], ":=", 
+  RowBox[{
+   RowBox[{"mcDisjSorted", "[", "pns", "]"}], "=", 
+   RowBox[{"Module", "[", "\[IndentingNewLine]", 
+    RowBox[{
+     RowBox[{"{", 
+      RowBox[{
+       RowBox[{"p", "=", 
+        RowBox[{
+        "pns", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}]}], ",", 
+       "\[IndentingNewLine]", 
+       RowBox[{"ns", "=", 
+        RowBox[{"Drop", "[", 
+         RowBox[{"pns", ",", "1"}], "]"}]}], ",", "\[IndentingNewLine]", "A", 
+       ",", "B", ",", "rest", ",", "\[IndentingNewLine]", "KDE"}], 
+      "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"KDE", "=", 
+       RowBox[{"kdeTriples", "[", 
+        RowBox[{"p", ",", "ns"}], "]"}]}], ";", "\[IndentingNewLine]", 
+      RowBox[{"(*", " ", 
+       RowBox[{
+        RowBox[{"Print", "[", 
+         RowBox[{
+         "\"\<sorted1 - \>\"", ",", "p", ",", "\"\< | \>\"", ",", "ns"}], 
+         "]"}], ";", "\[IndentingNewLine]", 
+        RowBox[{"Print", "[", 
+         RowBox[{"\"\<sorted2 - \>\"", ",", "KDE"}], "]"}], ";"}], " ", 
+       "*)"}], "\[IndentingNewLine]", 
+      RowBox[{"A", "=", 
+       RowBox[{
+        RowBox[{"(", 
+         RowBox[{
+          RowBox[{"mcDisj1", "[", "p", "]"}], "/.", 
+          RowBox[{"{", 
+           RowBox[{"L", "\[Rule]", "z"}], "}"}]}], ")"}], "*", 
+        RowBox[{"mcDisj", "[", "ns", "]"}]}]}], ";", "\[IndentingNewLine]", 
+      RowBox[{"rest", "=", 
+       RowBox[{"Sum", "[", 
+        RowBox[{
+         RowBox[{"singleKDE", "[", "kde", "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"kde", ",", "KDE"}], "}"}]}], "]"}]}], ";", 
+      "\[IndentingNewLine]", 
+      RowBox[{"B", " ", "=", " ", 
+       RowBox[{"Expand", "[", 
+        RowBox[{"A", "-", "rest"}], "]"}]}], ";", "\[IndentingNewLine]", 
+      RowBox[{"B", " ", "=", 
+       RowBox[{"B", "/.", 
+        RowBox[{"Table", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"LL", "[", "i", "]"}], "\[Rule]", 
+           RowBox[{"LL", "[", 
+            RowBox[{"i", "+", "1"}], "]"}]}], ",", 
+          RowBox[{"{", 
+           RowBox[{"i", ",", "1", ",", 
+            RowBox[{"Length", "[", "ns", "]"}]}], "}"}]}], "]"}]}]}], ";", 
+      "\[IndentingNewLine]", 
+      RowBox[{"B", "=", 
+       RowBox[{"B", "/.", 
+        RowBox[{"{", 
+         RowBox[{"z", "\[Rule]", 
+          RowBox[{"LL", "[", "1", "]"}]}], "}"}]}]}]}]}], 
+    "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]"}], "Input",
+ CellChangeTimes->{{3.799904396615363*^9, 3.799904406889674*^9}, 
+   3.7999044864107447`*^9, {3.799904522981793*^9, 3.799904542217388*^9}, {
+   3.799905368188403*^9, 3.799905440526905*^9}, {3.799910778489602*^9, 
+   3.799910789411199*^9}, {3.7999114574287767`*^9, 3.7999114795107517`*^9}, {
+   3.7999117495827513`*^9, 3.799911793714377*^9}, {3.7999118288998423`*^9, 
+   3.799911896725374*^9}, {3.799912109841093*^9, 3.7999121125284853`*^9}, {
+   3.7999125865497513`*^9, 3.7999126172056303`*^9}, 3.79991266733438*^9, {
+   3.799912899384604*^9, 3.7999129587478647`*^9}, {3.7999130239335003`*^9, 
+   3.79991307814552*^9}, {3.799914094737917*^9, 3.799914115471753*^9}, {
+   3.800879610477685*^9, 3.800879627666667*^9}, {3.8008796639878073`*^9, 
+   3.80087988408841*^9}, {3.800879937132431*^9, 3.8008799455428457`*^9}, {
+   3.800880007952732*^9, 3.80088000842714*^9}, {3.801071584758039*^9, 
+   3.801071601266988*^9}, {3.8010716924998083`*^9, 3.801071693783765*^9}, {
+   3.80111350677731*^9, 3.801113662213182*^9}, {3.80113627702074*^9, 
+   3.8011364016607447`*^9}}],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 2}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 4}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{
+    RowBox[{"export", " ", "the", " ", "classes", " ", "of", " ", "X", 
+     RowBox[{"(", "lambda", ")"}], " ", "for"}], " ", "|", "lambda", "|", 
+    RowBox[{"\[LessEqual]", "n"}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{"ExportMC", "[", "n_", "]"}], ":=", 
+   RowBox[{"Module", "[", "\[IndentingNewLine]", 
+    RowBox[{
+     RowBox[{"{", 
+      RowBox[{
+      "h", ",", "i", ",", "p", ",", "parts", ",", "k", ",", "m", ",", "s", 
+       ",", "j", ",", "A"}], "}"}], ",", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"h", "=", 
+       RowBox[{
+       "OpenWrite", "[", "\"\<equivariant_mc_classes.txt\>\"", "]"}]}], ";", 
+      "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"For", "[", 
+        RowBox[{
+         RowBox[{"i", "=", "1"}], ",", 
+         RowBox[{"i", "\[LessEqual]", "n"}], ",", 
+         RowBox[{"i", "++"}], ",", "\[IndentingNewLine]", 
+         RowBox[{
+          RowBox[{"Print", "[", 
+           RowBox[{"\"\<\\nn = \>\"", ",", "i"}], "]"}], ";", 
+          "\[IndentingNewLine]", 
+          RowBox[{"WriteString", "[", 
+           RowBox[{"h", ",", "\"\<\\n(* =================== *)\>\""}], "]"}], 
+          ";", "\[IndentingNewLine]", 
+          RowBox[{"WriteString", "[", 
+           RowBox[{"h", ",", 
+            RowBox[{"\"\<\\n(* ----   n = \>\"", "<>", 
+             RowBox[{"ToString", "[", "i", "]"}], "<>", 
+             "\"\<   ---- *)\\n\\n\>\""}]}], "]"}], ";", 
+          "\[IndentingNewLine]", 
+          RowBox[{"parts", "=", 
+           RowBox[{"Partitions", "[", "i", "]"}]}], ";", 
+          "\[IndentingNewLine]", 
+          RowBox[{"m", "=", 
+           RowBox[{"Length", "[", "parts", "]"}]}], ";", 
+          "\[IndentingNewLine]", 
+          RowBox[{"For", "[", 
+           RowBox[{
+            RowBox[{"j", "=", "1"}], ",", 
+            RowBox[{"j", "\[LessEqual]", "m"}], ",", 
+            RowBox[{"j", "++"}], ",", "\[IndentingNewLine]", 
+            RowBox[{
+             RowBox[{"p", " ", "=", 
+              RowBox[{
+              "parts", "\[LeftDoubleBracket]", "j", 
+               "\[RightDoubleBracket]"}]}], ";", "\[IndentingNewLine]", 
+             RowBox[{"Print", "[", 
+              RowBox[{"\"\<part = \>\"", ",", "p"}], "]"}], ";", 
+             "\[IndentingNewLine]", 
+             RowBox[{"A", " ", "=", 
+              RowBox[{"Expand", "[", 
+               RowBox[{"mcXLam", "[", "p", "]"}], "]"}]}], ";", 
+             "\[IndentingNewLine]", 
+             RowBox[{"(*", " ", 
+              RowBox[{
+               RowBox[{"Print", "[", "A", "]"}], ";"}], " ", "*)"}], 
+             "\[IndentingNewLine]", 
+             RowBox[{"s", "=", 
+              RowBox[{"ToString", "[", 
+               RowBox[{"A", ",", 
+                RowBox[{"FormatType", "\[Rule]", "InputForm"}], ",", 
+                RowBox[{"PageWidth", "\[Rule]", "Infinity"}], ",", 
+                RowBox[{"TotalWidth", "\[Rule]", "Infinity"}]}], "]"}]}], ";",
+              "\[IndentingNewLine]", 
+             RowBox[{"s", "=", 
+              RowBox[{"StringJoin", "[", 
+               RowBox[{"\"\<mc[\>\"", ",", 
+                RowBox[{"ToString", "[", "p", "]"}], ",", "\"\<] = \>\"", ",",
+                 "s", ",", "\"\< ;\\n\\n\>\""}], "]"}]}], ";", 
+             "\[IndentingNewLine]", 
+             RowBox[{"(*", " ", 
+              RowBox[{
+               RowBox[{"Print", "[", "s", "]"}], ";"}], " ", "*)"}], 
+             "\[IndentingNewLine]", 
+             RowBox[{"WriteString", "[", 
+              RowBox[{"h", ",", "s"}], "]"}], ";"}]}], "\[IndentingNewLine]", 
+           "]"}]}]}], "\[IndentingNewLine]", "]"}], "\[IndentingNewLine]", 
+       RowBox[{"Close", "[", "h", "]"}]}], ";"}]}], "\[IndentingNewLine]", 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.8010696348056927`*^9, 3.801069676577145*^9}, {
+   3.8010698703892193`*^9, 3.8010698731444807`*^9}, {3.801070034862121*^9, 
+   3.801070129428359*^9}, {3.801070348521194*^9, 3.8010703684698143`*^9}, 
+   3.8010705779746532`*^9, {3.8011138755594053`*^9, 3.801113953709689*^9}, {
+   3.801114017451393*^9, 3.801114021495187*^9}, {3.801126780457333*^9, 
+   3.8011267819827213`*^9}, {3.801136419578253*^9, 3.80113645733673*^9}}],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 2}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 4}],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+ RowBox[{"mcXLam", "[", 
+  RowBox[{"{", 
+   RowBox[{"1", ",", "1", ",", "1"}], "}"}], "]"}]], "Input",
+ CellChangeTimes->{{3.801136537782967*^9, 3.801136542901239*^9}}],
+
+Cell[BoxData[
+ RowBox[{"t", "-", 
+  SuperscriptBox["t", "3"], "-", 
+  RowBox[{"L", " ", "t", " ", 
+   SuperscriptBox["X", "3"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "3"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["X", "2"], " ", "Y"}], "-", 
+  RowBox[{"2", " ", "L", " ", "t", " ", 
+   SuperscriptBox["X", "2"], " ", "Y"}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "2"], " ", "Y"}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "5"], " ", "Y"}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "5"], " ", "Y"}], "-", 
+  RowBox[{"L", " ", "X", " ", 
+   SuperscriptBox["Y", "2"]}], "-", 
+  RowBox[{"2", " ", "L", " ", "t", " ", "X", " ", 
+   SuperscriptBox["Y", "2"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", "X", " ", 
+   SuperscriptBox["Y", "2"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "2"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "2"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "2"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "2"]}], "-", 
+  RowBox[{"L", " ", "t", " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "3"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "3"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "4"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "4"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", "t", " ", "X", " ", 
+   SuperscriptBox["Y", "5"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", "X", " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "6"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "6"]}]}]], "Output",
+ CellChangeTimes->{3.801136543352934*^9, 3.801136596052211*^9, 
+  3.801136778356182*^9, 3.8011368485104017`*^9}]
+}, Open  ]],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+ RowBox[{"mcXLam", "[", 
+  RowBox[{"{", 
+   RowBox[{"1", ",", "1", ",", "1", ",", "1", ",", "1"}], "}"}], 
+  "]"}]], "Input",
+ CellChangeTimes->{{3.8011367835025377`*^9, 3.8011367837109613`*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  SuperscriptBox["t", "3"], "-", 
+  SuperscriptBox["t", "5"], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "5"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "5"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "4"], " ", "Y"}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "4"], " ", "Y"}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "9"], " ", "Y"}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "9"], " ", "Y"}], "+", 
+  RowBox[{"L", " ", "t", " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "2"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "2"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "2"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "2"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "2"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "2"]}], "+", 
+  RowBox[{"L", " ", "t", " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "3"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "3"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "3"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "3"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "3"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", "X", " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "5"], " ", "X", " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "4"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "4"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "4"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "4"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "4"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{"5", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "5"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "5"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "5"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "5"]}], "-", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "5"]}], "-", 
+  RowBox[{"5", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "6"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{"6", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{"7", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "6"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "6"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "7"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "7"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "7"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "7"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "7"]}], "-", 
+  RowBox[{"7", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "7"]}], "-", 
+  RowBox[{"8", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "7"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "7"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "7"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "7"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "7"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "7"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "7"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "8"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "8"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "8"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "8"]}], "-", 
+  RowBox[{"7", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "8"]}], "-", 
+  RowBox[{"8", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "8"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "8"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "8"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "8"]}], "+", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "8"]}], "+", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "8"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "8"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "8"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", "X", " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "5"], " ", "X", " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{"6", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{"7", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "9"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "9"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "9"]}], "+", 
+  RowBox[{"5", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "9"]}], "+", 
+  RowBox[{"8", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "9"]}], "+", 
+  RowBox[{"5", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{"5", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "10"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "10"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "10"]}], "+", 
+  RowBox[{"5", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "10"]}], "+", 
+  RowBox[{"9", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "10"]}], "+", 
+  RowBox[{"8", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "10"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "10"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{"5", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{"8", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{"5", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "12"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "12"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", "t", " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "13"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "13"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "13"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "13"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "13"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", "t", " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "13"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "13"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "13"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "13"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "13"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "14"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "14"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "14"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "14"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "14"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "14"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "15"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "5"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "15"]}]}]], "Output",
+ CellChangeTimes->{3.8011367844243927`*^9, 3.801136850336916*^9}]
+}, Open  ]],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+ RowBox[{"mcXLam", "[", 
+  RowBox[{"{", 
+   RowBox[{"2", ",", "2", ",", "1", ",", "1"}], "}"}], "]"}]], "Input",
+ CellChangeTimes->{{3.8011367926691723`*^9, 3.8011367954781446`*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"-", "t"}], "-", 
+  SuperscriptBox["t", "2"], "+", 
+  SuperscriptBox["t", "3"], "+", 
+  SuperscriptBox["t", "4"], "+", 
+  RowBox[{"L", " ", "t", " ", 
+   SuperscriptBox["X", "6"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "6"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "6"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "6"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["X", "5"], " ", "Y"}], "+", 
+  RowBox[{"2", " ", "L", " ", "t", " ", 
+   SuperscriptBox["X", "5"], " ", "Y"}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "5"], " ", "Y"}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "5"], " ", "Y"}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "5"], " ", "Y"}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "11"], " ", "Y"}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "11"], " ", "Y"}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "11"], " ", "Y"}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "11"], " ", "Y"}], "+", 
+  RowBox[{"2", " ", "L", " ", "t", " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "2"]}], "+", 
+  RowBox[{"2", " ", "L", " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "2"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "2"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "2"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "2"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "2"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "2"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "2"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "2"]}], "+", 
+  RowBox[{"L", " ", "t", " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "3"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "3"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "3"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "3"]}], "-", 
+  RowBox[{"7", " ", 
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "3"]}], "-", 
+  RowBox[{"6", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "3"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "3"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "3"]}], "+", 
+  RowBox[{"2", " ", "L", " ", "t", " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{"2", " ", "L", " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "4"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "4"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "4"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "4"]}], "-", 
+  RowBox[{"11", " ", 
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "4"]}], "-", 
+  RowBox[{"10", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "4"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "4"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "4"]}], "+", 
+  RowBox[{"L", " ", "X", " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{"2", " ", "L", " ", "t", " ", "X", " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "2"], " ", "X", " ", 
+   SuperscriptBox["Y", "5"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", "X", " ", 
+   SuperscriptBox["Y", "5"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "4"], " ", "X", " ", 
+   SuperscriptBox["Y", "5"]}], "-", 
+  RowBox[{"5", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "5"]}], "-", 
+  RowBox[{"15", " ", 
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "5"]}], "-", 
+  RowBox[{"13", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{"11", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{"11", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "5"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "5"]}], "+", 
+  RowBox[{"L", " ", "t", " ", 
+   SuperscriptBox["Y", "6"]}], "+", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{"L", " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{"5", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{"16", " ", 
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{"14", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "6"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "6"]}], "+", 
+  RowBox[{"7", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "6"]}], "+", 
+  RowBox[{"21", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "6"]}], "+", 
+  RowBox[{"19", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "6"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "18"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "18"], " ", 
+   SuperscriptBox["Y", "6"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "18"], " ", 
+   SuperscriptBox["Y", "6"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "18"], " ", 
+   SuperscriptBox["Y", "6"]}], "-", 
+  RowBox[{"5", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "7"]}], "-", 
+  RowBox[{"15", " ", 
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "7"]}], "-", 
+  RowBox[{"13", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "7"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "7"]}], "+", 
+  RowBox[{"9", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "7"]}], "+", 
+  RowBox[{"30", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "7"]}], "+", 
+  RowBox[{"30", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "7"]}], "+", 
+  RowBox[{"6", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "7"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "7"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "17"], " ", 
+   SuperscriptBox["Y", "7"]}], "-", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "17"], " ", 
+   SuperscriptBox["Y", "7"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "17"], " ", 
+   SuperscriptBox["Y", "7"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "17"], " ", 
+   SuperscriptBox["Y", "7"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "17"], " ", 
+   SuperscriptBox["Y", "7"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "8"]}], "-", 
+  RowBox[{"11", " ", 
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "8"]}], "-", 
+  RowBox[{"10", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "8"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "8"]}], "+", 
+  RowBox[{"13", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "8"]}], "+", 
+  RowBox[{"38", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "8"]}], "+", 
+  RowBox[{"36", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "8"]}], "+", 
+  RowBox[{"9", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "8"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "8"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "16"], " ", 
+   SuperscriptBox["Y", "8"]}], "-", 
+  RowBox[{"10", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "16"], " ", 
+   SuperscriptBox["Y", "8"]}], "-", 
+  RowBox[{"9", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "16"], " ", 
+   SuperscriptBox["Y", "8"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "16"], " ", 
+   SuperscriptBox["Y", "8"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{"7", " ", 
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{"6", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "9"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "9"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "9"]}], "+", 
+  RowBox[{"13", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "9"]}], "+", 
+  RowBox[{"42", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "9"]}], "+", 
+  RowBox[{"42", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "9"]}], "+", 
+  RowBox[{"10", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{"6", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{"18", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{"16", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "9"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "9"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "2"], " ", "t", " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "10"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "10"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "2"], " ", 
+   SuperscriptBox["Y", "10"]}], "+", 
+  RowBox[{"13", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "10"]}], "+", 
+  RowBox[{"38", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "10"]}], "+", 
+  RowBox[{"36", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "10"]}], "+", 
+  RowBox[{"9", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{"9", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{"27", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{"24", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "10"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "20"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "20"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "20"], " ", 
+   SuperscriptBox["Y", "10"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", "t", " ", "X", " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "2"], " ", "X", " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "3"], " ", "X", " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "2"], " ", 
+   SuperscriptBox["t", "4"], " ", "X", " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{"9", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{"30", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{"30", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{"6", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{"11", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{"31", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{"27", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "5"], " ", "t", " ", 
+   SuperscriptBox["X", "19"], " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{"6", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "19"], " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{"6", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "19"], " ", 
+   SuperscriptBox["Y", "11"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "19"], " ", 
+   SuperscriptBox["Y", "11"]}], "+", 
+  RowBox[{"7", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{"21", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{"19", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "12"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "12"]}], "-", 
+  RowBox[{"11", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "12"]}], "-", 
+  RowBox[{"33", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "12"]}], "-", 
+  RowBox[{"29", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "12"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "12"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["X", "18"], " ", 
+   SuperscriptBox["Y", "12"]}], "-", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "5"], " ", "t", " ", 
+   SuperscriptBox["X", "18"], " ", 
+   SuperscriptBox["Y", "12"]}], "-", 
+  RowBox[{"9", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "18"], " ", 
+   SuperscriptBox["Y", "12"]}], "-", 
+  RowBox[{"10", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "18"], " ", 
+   SuperscriptBox["Y", "12"]}], "-", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "18"], " ", 
+   SuperscriptBox["Y", "12"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "13"]}], "+", 
+  RowBox[{"11", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "13"]}], "+", 
+  RowBox[{"11", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "13"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "13"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "5"], " ", 
+   SuperscriptBox["Y", "13"]}], "-", 
+  RowBox[{"11", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "13"]}], "-", 
+  RowBox[{"31", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "13"]}], "-", 
+  RowBox[{"27", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "13"]}], "-", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "13"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "13"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "5"], " ", "t", " ", 
+   SuperscriptBox["X", "17"], " ", 
+   SuperscriptBox["Y", "13"]}], "-", 
+  RowBox[{"11", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "17"], " ", 
+   SuperscriptBox["Y", "13"]}], "-", 
+  RowBox[{"12", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "17"], " ", 
+   SuperscriptBox["Y", "13"]}], "-", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "17"], " ", 
+   SuperscriptBox["Y", "13"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "14"]}], "+", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "14"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "14"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "14"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "4"], " ", 
+   SuperscriptBox["Y", "14"]}], "-", 
+  RowBox[{"9", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "14"]}], "-", 
+  RowBox[{"27", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "14"]}], "-", 
+  RowBox[{"24", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "14"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "14"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "14"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["X", "16"], " ", 
+   SuperscriptBox["Y", "14"]}], "-", 
+  RowBox[{"7", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "16"], " ", 
+   SuperscriptBox["Y", "14"]}], "-", 
+  RowBox[{"11", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "16"], " ", 
+   SuperscriptBox["Y", "14"]}], "-", 
+  RowBox[{"5", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "16"], " ", 
+   SuperscriptBox["Y", "14"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", "t", " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "15"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "15"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "15"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "3"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "3"], " ", 
+   SuperscriptBox["Y", "15"]}], "-", 
+  RowBox[{"6", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "15"]}], "-", 
+  RowBox[{"18", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "15"]}], "-", 
+  RowBox[{"16", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "15"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "15"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "9"], " ", 
+   SuperscriptBox["Y", "15"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "15"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "5"], " ", "t", " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "15"]}], "-", 
+  RowBox[{"7", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "15"]}], "-", 
+  RowBox[{"11", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "15"]}], "-", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "15"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "6"], " ", "t", " ", 
+   SuperscriptBox["X", "21"], " ", 
+   SuperscriptBox["Y", "15"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "21"], " ", 
+   SuperscriptBox["Y", "15"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "21"], " ", 
+   SuperscriptBox["Y", "15"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "21"], " ", 
+   SuperscriptBox["Y", "15"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "16"]}], "-", 
+  RowBox[{"10", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "16"]}], "-", 
+  RowBox[{"9", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "16"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "8"], " ", 
+   SuperscriptBox["Y", "16"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "16"]}], "-", 
+  RowBox[{"7", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "16"]}], "-", 
+  RowBox[{"11", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "16"]}], "-", 
+  RowBox[{"5", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "14"], " ", 
+   SuperscriptBox["Y", "16"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["X", "20"], " ", 
+   SuperscriptBox["Y", "16"]}], "+", 
+  RowBox[{"7", " ", 
+   SuperscriptBox["L", "6"], " ", "t", " ", 
+   SuperscriptBox["X", "20"], " ", 
+   SuperscriptBox["Y", "16"]}], "+", 
+  RowBox[{"12", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "20"], " ", 
+   SuperscriptBox["Y", "16"]}], "+", 
+  RowBox[{"8", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "20"], " ", 
+   SuperscriptBox["Y", "16"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "20"], " ", 
+   SuperscriptBox["Y", "16"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "17"]}], "-", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "17"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "17"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "17"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "7"], " ", 
+   SuperscriptBox["Y", "17"]}], "-", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "5"], " ", "t", " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "17"]}], "-", 
+  RowBox[{"11", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "17"]}], "-", 
+  RowBox[{"12", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "17"]}], "-", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "13"], " ", 
+   SuperscriptBox["Y", "17"]}], "+", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["X", "19"], " ", 
+   SuperscriptBox["Y", "17"]}], "+", 
+  RowBox[{"13", " ", 
+   SuperscriptBox["L", "6"], " ", "t", " ", 
+   SuperscriptBox["X", "19"], " ", 
+   SuperscriptBox["Y", "17"]}], "+", 
+  RowBox[{"19", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "19"], " ", 
+   SuperscriptBox["Y", "17"]}], "+", 
+  RowBox[{"14", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "19"], " ", 
+   SuperscriptBox["Y", "17"]}], "+", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "19"], " ", 
+   SuperscriptBox["Y", "17"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", "t", " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "18"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "18"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "18"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "4"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "6"], " ", 
+   SuperscriptBox["Y", "18"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "18"]}], "-", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "5"], " ", "t", " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "18"]}], "-", 
+  RowBox[{"9", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "18"]}], "-", 
+  RowBox[{"10", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "18"]}], "-", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "12"], " ", 
+   SuperscriptBox["Y", "18"]}], "+", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["X", "18"], " ", 
+   SuperscriptBox["Y", "18"]}], "+", 
+  RowBox[{"16", " ", 
+   SuperscriptBox["L", "6"], " ", "t", " ", 
+   SuperscriptBox["X", "18"], " ", 
+   SuperscriptBox["Y", "18"]}], "+", 
+  RowBox[{"24", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "18"], " ", 
+   SuperscriptBox["Y", "18"]}], "+", 
+  RowBox[{"16", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "18"], " ", 
+   SuperscriptBox["Y", "18"]}], "+", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "18"], " ", 
+   SuperscriptBox["Y", "18"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "5"], " ", "t", " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "19"]}], "-", 
+  RowBox[{"6", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "19"]}], "-", 
+  RowBox[{"6", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "19"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "11"], " ", 
+   SuperscriptBox["Y", "19"]}], "+", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["X", "17"], " ", 
+   SuperscriptBox["Y", "19"]}], "+", 
+  RowBox[{"13", " ", 
+   SuperscriptBox["L", "6"], " ", "t", " ", 
+   SuperscriptBox["X", "17"], " ", 
+   SuperscriptBox["Y", "19"]}], "+", 
+  RowBox[{"19", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "17"], " ", 
+   SuperscriptBox["Y", "19"]}], "+", 
+  RowBox[{"14", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "17"], " ", 
+   SuperscriptBox["Y", "19"]}], "+", 
+  RowBox[{"4", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "17"], " ", 
+   SuperscriptBox["Y", "19"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "20"]}], "-", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "20"]}], "-", 
+  RowBox[{
+   SuperscriptBox["L", "5"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "10"], " ", 
+   SuperscriptBox["Y", "20"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["X", "16"], " ", 
+   SuperscriptBox["Y", "20"]}], "+", 
+  RowBox[{"7", " ", 
+   SuperscriptBox["L", "6"], " ", "t", " ", 
+   SuperscriptBox["X", "16"], " ", 
+   SuperscriptBox["Y", "20"]}], "+", 
+  RowBox[{"12", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "16"], " ", 
+   SuperscriptBox["Y", "20"]}], "+", 
+  RowBox[{"8", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "16"], " ", 
+   SuperscriptBox["Y", "20"]}], "+", 
+  RowBox[{"2", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "16"], " ", 
+   SuperscriptBox["Y", "20"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "6"], " ", "t", " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "21"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "2"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "21"]}], "+", 
+  RowBox[{"3", " ", 
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "3"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "21"]}], "+", 
+  RowBox[{
+   SuperscriptBox["L", "6"], " ", 
+   SuperscriptBox["t", "4"], " ", 
+   SuperscriptBox["X", "15"], " ", 
+   SuperscriptBox["Y", "21"]}]}]], "Output",
+ CellChangeTimes->{3.80113679587457*^9, 3.801136857122386*^9}]
+}, Open  ]]
+},
+WindowSize->{740, 655},
+WindowMargins->{{1, Automatic}, {0, Automatic}},
+FrontEndVersion->"9.0 for Mac OS X x86 (32-bit, 64-bit Kernel) (November 20, \
+2012)",
+StyleDefinitions->"Default.nb"
+]
+(* End of Notebook Content *)
+
+(* Internal cache information *)
+(*CellTagsOutline
+CellTagsIndex->{}
+*)
+(*CellTagsIndex
+CellTagsIndex->{}
+*)
+(*NotebookFileOutline
+Notebook[{
+Cell[CellGroupData[{
+Cell[579, 22, 578, 13, 80, "Input"],
+Cell[1160, 37, 418, 9, 58, "Message"]
+}, Open  ]],
+Cell[1593, 49, 271, 9, 8, "Text"],
+Cell[1867, 60, 6508, 172, 641, "Input"],
+Cell[8378, 234, 271, 9, 8, "Text"],
+Cell[8652, 245, 9520, 255, 709, "Input"],
+Cell[18175, 502, 6900, 179, 522, "Input"],
+Cell[25078, 683, 271, 9, 8, "Text"],
+Cell[25352, 694, 5659, 146, 420, "Input"],
+Cell[31014, 842, 271, 9, 8, "Text"],
+Cell[31288, 853, 6864, 175, 573, "Input"],
+Cell[38155, 1030, 271, 9, 8, "Text"],
+Cell[38429, 1041, 1528, 48, 148, "Input"],
+Cell[39960, 1091, 3509, 107, 335, "Input"],
+Cell[43472, 1200, 1930, 54, 114, "Input"],
+Cell[45405, 1256, 19681, 521, 1780, "Input"],
+Cell[65089, 1779, 271, 9, 8, "Text"],
+Cell[65363, 1790, 4258, 94, 438, "Input"],
+Cell[69624, 1886, 271, 9, 8, "Text"],
+Cell[CellGroupData[{
+Cell[69920, 1899, 182, 4, 28, "Input"],
+Cell[70105, 1905, 4665, 144, 109, "Output"]
+}, Open  ]],
+Cell[CellGroupData[{
+Cell[74807, 2054, 209, 5, 28, "Input"],
+Cell[75019, 2061, 21949, 683, 470, "Output"]
+}, Open  ]],
+Cell[CellGroupData[{
+Cell[97005, 2749, 196, 4, 28, "Input"],
+Cell[97204, 2755, 40977, 1249, 922, "Output"]
+}, Open  ]]
+}
+]
+*)
+
+(* End of internal cache information *)
diff --git a/mathematica/equiv_motivic_chern.src b/mathematica/equiv_motivic_chern.src
new file mode 100644
--- /dev/null
+++ b/mathematica/equiv_motivic_chern.src
@@ -0,0 +1,504 @@
+
+(* ===== EQUIVARIANT MOTIVIC CHERN CLASSES OF COINCIDENT ROOT LOCI ==== *)
+
+<< Combinatorica`
+
+(* === NORMALIZATION in K(P^n) === *)
+
+(* Weights of Sym^n C^2 *)
+Clear[L, X, Y]
+WT[n_, i_] := X^(n - i)*Y^i
+
+(* the relation in K (P^n). Convention: 
+L is the tautological line bundle, 
+   c_ 1(X) = -alpha, c_ 1(Y) = -beta *)
+
+KREL[n_] := Product[1 - L*WT[n, i], {i, 0, n}]
+
+(* normal form of L^(n+1) *)
+Clear[Lpow$nplus1]
+Lpow$nplus1[n_] := 
+ Lpow$nplus1[n] = 
+  Expand[L^(n + 1) - (-1)^(n + 1) KREL[n]/(X*Y)^Binomial[n + 1, 2]]
+
+(* (unefficiently) normalize a polynomial in L *) 
+Clear[KnormalizeSlow]
+KnormalizeSlow[n_, Z0_] := Module[{Z = Expand[Z0], m},
+  m = Exponent[Z, L];
+  If[m <= n, Z, 
+   KnormalizeSlow[n, Z /. {L^m -> L^(m - n - 1)*Lpow$nplus1[n]}]]
+  ]
+
+(* Table of normal forms of L^p *)
+Clear[LPowXY]
+LPowXY[n_, k_] := LPowXY[n, k] = Expand[KnormalizeSlow[n, L^k]]
+
+(* More efficient normalization in K^(P^n) 
+usage: KnormalizeVarXY[dim,L,expr] *)
+Clear[KnormalizeVarXY]
+KnormalizeVarXY[n_, uuu_, Z0_] := Module[
+  {m, Z},
+  Z = Expand[Z0];
+  m = Exponent[Z, uuu];
+  Expand[Sum[Coefficient[Z, uuu, k]*(LPowXY[n, k] /. {L -> uuu}), {k, 0, m}]]
+  ] 
+
+(* === PUSHFORWARD ALONG PSI (THE MULTIPLICATION MAP) === *)
+
+(* formulas for (psi_{n,1})_! (L1^p*L2^q) *)
+Clear[PSI$N1f]
+PSI$N1f[n_, 0, 1] := L*(X^(n + 1) - Y^(n + 1))/(X - Y)
+PSI$N1f[n_, p_, 0] := 
+ L^p*(X^(p + 1) - Y^(p + 1))/(X - Y) + 
+  L^(p + 1) (X^(n + 1)*Y^(p + 1) - Y^(n + 1) X^(p + 1))/(X - Y)
+PSI$N1f[n_, p_, q_] := If[p >= q,
+  L^q*PSI$N1f[n, p - q, 0],
+  L^p*PSI$N1f[n, 0, q - p]
+  ]
+
+Clear[PSI$N1]
+PSI$N1[n_, p_, q_] := PSI$N1[n, p, q] = Expand[Factor[PSI$N1f[n, p, q]]]
+
+Clear[newPsiBang2]
+newPsiBang2[{n_, 1}, {var1_, var2_}, outvar_, ZZ_] := Module[
+  {Z},
+  Z = Expand[ZZ];
+  Expand[Sum[
+    Coefficient[Coefficient[Z, var1, i], var2, 
+      j]*(PSI$N1[n, i, j] /. {L -> outvar}), {i, 0, n}, {j, 0, 1}]]
+  ]
+
+(* find elements in K(P^m x P^1) such that their pushforward to K(P^(m+1)) is \
+{1,L,L^2,...L^(m+1)} *)
+findBasis$M1[m_] := findBasis$M1[m] =
+  Module[{vars, A, B, list, i, j, k, eqs, sols, sol},
+   vars = Table[Subscript[a, i], {i, 0, m + 1}];
+   A = Sum[Subscript[a, i]*L1^i, {i, 0, m}] +
+     Subscript[a, m + 1]*L1^m*L2;
+   B = newPsiBang2[{m, 1}, {L1, L2}, L, A];
+   list = Table[Null, {i, 0, m + 1}];
+   For[k = 0, k <= m + 1, k++,
+    eqs = Table[Coefficient[B, L, i] == If[k == i, 1, 0], {i, 0, m + 1}];
+    sols = Solve[eqs, vars];
+    sol = sols[[1]];
+    list[[k + 1]] = A /. sol;
+    ];
+   list
+   ]
+
+
+Clear[PSI$NM, S, T]
+PSI$NM[n_, 0, p_, 0] := L^p
+PSI$NM[0, m_, 0, q_] := L^q
+PSI$NM[n_, 1, p_, q_] := PSI$NM[n, 1, p, q] = PSI$N1[n, p, q]
+PSI$NM[n_, mplus1_, p_, q_] := PSI$NM[n, mplus1, p, q] = Module[
+   {m = mplus1 - 1, basis, A, B, C},
+   basis = findBasis$M1[m];
+   A = basis[[q + 1]] /. {L1 -> L2, L2 -> T};
+   B = newPsiBang2[{n, m}, {L1, L2}, S, L1^p*A];
+   C = newPsiBang2[{n + m, 1}, {S, T}, L, B];
+   Expand[Factor[C]]
+   ]
+
+newPsiBang2[{n_, m_}, {var1_, var2_}, outvar_, ZZ_] := Module[
+  {Z, deg1, deg2},
+  Z = Expand[ZZ];
+  deg1 = Exponent[Z, var1];
+  deg2 = Exponent[Z, var2];
+  Expand[Sum[
+    Coefficient[Coefficient[Z, var1, i], var2, 
+      j]*(PSI$NM[n, m, i, j] /. {L -> outvar}), {i, 0, deg1}, {j, 0, deg2}]]
+  ]
+
+newPsiBangMany[{n_}, {uuu_}, www_, Z_] := Z /. {uuu -> www}
+newPsiBangMany[ns_, uuus_, www_, Z_] := Module[{ttt, vvvs, ms},
+  If[Length[uuus] == 1, Z /. {uuus[[1]] -> www},
+   If[Length[uuus] == 2, newPsiBang2[ns, uuus, www, Z],
+    ms = Join[{ns[[1]] + ns[[2]]}, Drop[ns, 2]];
+    vvvs = Join[{ttt}, Drop[uuus, 2]];
+    newPsiBangMany[ms, vvvs, www, 
+     newPsiBang2[Take[ns, 2], Take[uuus, 2], ttt, Z]]]]]
+
+(* === PUSHFORwARD ALONG THE DIAGONAL MAP === *)
+
+notk[n_, k_] := Select[Range[0, n], # != k &]
+
+(* class of the diagonal in K(P^n x P^n) *)
+Clear[DELTA$CLASS$2]
+DELTA$CLASS$2[n_] := DELTA$CLASS$2[n] =
+  Factor[Sum[ 
+    Product[ (1 - 
+        L1*WT[n, i]) (1 - L2*WT[n, i])/(1 - WT[n, i]/WT[n, k])  , {i, 
+      notk[n, k]}] , {k, 0, n}]]
+
+newDeltaBang2[n_, invar_, {var1_, var2_}, ZZ_] := Module[
+  {Z = Expand[ZZ], m, A},
+  m = Exponent[Z, invar];
+  A = Expand[(DELTA$CLASS$2[n] /. {L1 -> var1, L2 -> var2})*
+     Sum[var1^p*Coefficient[Z, invar, p], {p, 0, m}]];
+  KnormalizeVarXY[n, var1, A]
+  ]
+
+(* usage: deltaBangMany[dim,L,{L1,L2,L3},X] *)
+
+newDeltaBangMany[n_, uuu_, vvvs_, Z_] := Module[{ttt},
+  If[Length[vvvs] == 1, Z /. {uuu -> vvvs[[1]]},
+   If[Length[vvvs] == 2, newDeltaBang2[n, uuu, vvvs, Z],
+    newDeltaBangMany[n, ttt, Drop[vvvs, 1], 
+     newDeltaBang2[n, uuu, {vvvs[[1]], ttt}, Z]]]]]
+
+ 
+(* PUSHFORWARD ALONG THE POWER MAP *)
+
+Clear[OMEGA$ND]
+OMEGA$ND[n_, d_, p_] := OMEGA$ND[n, d, p] = Module[{vars, ns, A, B},
+   vars = Table[Subscript[TMP$X, i], {i, 1, d}];
+   ns = Table[n, {i, 1, d}];
+   A = newDeltaBangMany[n, L, vars, L^p];
+   B = newPsiBangMany[ns, vars, L, Expand[A]];
+   Expand[B]
+   ]
+
+newOmegaBang[n_, 0, var1_, var2_, ZZ_] := Coefficient[ZZ, var1, 0]
+newOmegaBang[n_, 1, var1_, var2_, ZZ_] := ZZ /. {var1 -> var2}
+newOmegaBang[n_, d_, var1_, var2_, ZZ_] := Module[
+  {Z = Expand[ZZ], m, A},
+  m = Exponent[Z, var1];
+  A = Sum[(OMEGA$ND[n, d, p] /. {L -> var2})*Coefficient[Z, var1, p], {p, 0, 
+     m}];
+  Expand[A]
+  ]
+
+(* P^n1 x P^n2 x P^n3 -> P^(d1*n1) x P^(d2*n2) x P^(d3*n3) -> P^(d1*n1 + \
+d2*n2 + d3*n3 *) 
+newOmegaBangLam[ns_, ds_, uuus_, www_, Z0_] := Module[
+  {Z = Expand[Z0],
+   m = Length[ns],
+   vars, W, nds, ttt, i},
+  vars = Table[Subscript[ttt, i], {i, 1, m}];
+  nds = Table[ ns[[i]]*ds[[i]], {i, 1, m}];
+  W = Z;
+  For[i = 1, i <= m, i++, 
+   W = newOmegaBang[ns[[i]], ds[[i]], uuus[[i]], vars[[i]], W]];
+  newPsiBangMany[nds, vars, www, W]
+  ]
+
+ 
+(*only works for lists of equal length!!*)
+Zip[as_, bs_] := MapThread[{#1, #2} &, {as, bs}]
+Zip3[as_, bs_, cs_] := MapThread[{#1, #2, #3} &, {as, bs, cs}]
+
+Fst[pair_] := pair[[1]]
+Snd[pair_] := pair[[2]]
+
+extendListWithZeros[L_, n_] := Join[L, Table[0, {i, 1, n - Length[L]}]]
+
+EmptyPartQ[part_] := Length[part] == 0
+
+DualPart[{}] := {}
+DualPart[lam_] := 
+ With[{m = lam[[1]]}, Table[Length[Select[lam, # >= i &]], {i, 1, m}]]
+ 
+toExpoForm[{}] := {} 
+toExpoForm[part_] := 
+ Module[{k = Max[part]}, Table[Length[Select[part, # == j &]], {j, 1, k}]]
+
+posVectorQ[as_] := Map[# >= 0 &, as] /. {List -> And};
+kdeTriples[p_, ns_] := Module[
+  {m = Length[ns],
+   posQ, oneK, A},
+  oneK[k_] := 
+   Table[{k, ns - es, es}, {es, Combinatorica`Compositions[p - k, m]}];
+  A = Table [oneK[k], {k, 0, p - 1}];
+  A = Select[Flatten[A, 1], posVectorQ[Snd[#]] &];
+  A]
+
+
+(* motivic Chern class of P^n *)
+Clear[mcPn];
+mcPn[n_] := mcPn[n] =
+  Module[{rel, tmp}, rel = Product[1 - L*X^(n - i)*Y^i, {i, 0, n}];
+   tmp = Product[1 + t*L*X^(n - i)*Y^i, {i, 0, n}];
+   Factor[(tmp - (-t)^(n + 1) rel)/(1 + t)]]
+
+Clear[L, S]
+
+LL[i_] := Subscript[L, i];
+SS[i_] := Subscript[S, i];
+LLs[n_] := Table[LL[i], {i, 1, n}]
+SSs[n_] := Table[SS[i], {i, 1, n}]
+
+Clear[mcXLam, mcDisj1, mcDisj, mcDisjSorted]
+
+mcXLam[{}] := mcXLam[{}] = 1
+mcXLam[{1}] := mcXLam[{1}] = mcPn[1]
+
+mcDisj1[0] := mcDisj1[0] = 1
+mcDisj1[1] := mcDisj1[1] = mcPn[1]
+
+mcDisj[{}] := mcDisj[{}] = 1
+
+mcDisjSorted[{}] := mcDisjSorted[{}] = 1
+
+(* equivariant motivic chern class of D(n)=X(1^n) *)
+
+mcDisj1[n_] := mcDisj1[n] = Module[
+   {parts = Select[Combinatorica`Partitions[n], Length[#] < n &]},
+   Expand[mcPn[n] - Sum[mcXLam[p], {p, parts}]]
+   ]
+
+(* equivariant motivic chern class of X_lambda *)
+
+mcXLam[lambda_] := mcXLam[lambda] = Module[
+   {es = toExpoForm[lambda], m, m1, ns, pairs, Z},
+   m = Length[es];
+   ns = Range[m];
+   pairs = Zip[ns, es];   (* i^e_ *)
+   
+   pairs = Select[pairs, Snd[#] > 0 &]; (* !!! *)
+   m1 = Length[pairs];
+   ns = Map[Fst, pairs];
+   es = Map[Snd, pairs];
+   Z = mcDisj[es];
+   (* Print["xlam1 - ",pairs];
+   Print["xlam2 - ",es," | ",ns," | ",uus[m1]," | ",X]; *)
+   
+   Expand[newOmegaBangLam[es, ns, LLs[m1], L, Z]]
+   ]
+
+(* equivariant motivic chern class of D(d1,d2,...) *)
+
+mcDisj[{n_}] := mcDisj[{n}] = mcDisj1[n] /. {L -> LL[1]}
+mcDisj[ns0_] := mcDisj[ns0] = Module[
+   {m = Length[ns0],
+    nis0, nis1, ns1, idxs, X, ttt},
+   nis0 = Zip[ns0, Range[m]];
+   nis1 = SortBy[nis0, -Fst[#] &];
+   idxs = Map[Snd, nis1];
+   ns1 = Select[Map[Fst, nis1], # > 0 &];
+   (* Print["nis1 - ",nis0," | ",nis1];
+   Print["nis2 - ",ns1]; *)
+   X = mcDisjSorted[ns1];
+   X = X /. Table[LL[i] -> Subscript[ttt, i], {i, 1, m}];
+   X /. Table[Subscript[ttt, i] -> LL[idxs[[i]]], {i, 1, m}]
+   ]
+
+(* a single term corresponding to a triple (k,ds,es) *)
+Clear[singleKDE]
+singleKDE[{k_, ds_, es_}] := ssingleKDE[{k, ds, es}] = Module[
+   {A, B,
+    m, vars, dims,
+    pp, qq, rr, ss,
+    pps, qqs, rrs, sss
+    },
+   m = Length[ds];
+   pp[i_] := Subscript[pp$p, i];
+   qq[i_] := Subscript[qq$q, i];
+   rr[i_] := Subscript[rr$r, i];
+   ss[i_] := Subscript[ss$s, i];
+   pps = Table[pp[i], {i, 1, m}];
+   qqs = Table[qq[i], {i, 1, m}];
+   rrs = Table[rr[i], {i, 1, m}];
+   sss = Table[ss[i], {i, 1, m}];
+   vars = Join[{zzz}, pps, qqs];
+   dims = Join[{k}, ds, es];
+   A = mcDisj[dims] /. Table[LL[i] -> vars[[i]], {i, 1, 2 m + 1}];
+   B = A;
+   For[i = 1, i <= m, i++, 
+    B = Expand[newDeltaBang2[es[[i]], qq[i], {rr[i], ss[i]}, B]]];
+   For[i = 1, i <= m, i++, 
+    B = Expand[newPsiBang2[{ds[[i]], es[[i]]}, {pp[i], ss[i]}, LL[i], B]]];
+   B = newPsiBangMany[Join[{k}, es], Join[{zzz}, rrs], z, B];
+   B
+   ]
+
+(* equiv mc of D(d1,d2,...), but we require d1>=d2>=d3>=...>=dn>0 *)
+
+mcDisjSorted[{n_}] := mcDisjSorted[{n}] = mcDisj1[n] /. {L -> LL[1]}
+mcDisjSorted[pns_] := mcDisjSorted[pns] = Module[
+   {p = pns[[1]],
+    ns = Drop[pns, 1],
+    A, B, rest,
+    KDE
+    },
+   KDE = kdeTriples[p, ns];
+   (* Print["sorted1 - ",p," | ",ns];
+   Print["sorted2 - ",KDE]; *)
+   A = (mcDisj1[p] /. {L -> z})*mcDisj[ns];
+   rest = Sum[singleKDE[kde], {kde, KDE}];
+   B = Expand[A - rest];
+   B = B /. Table[LL[i] -> LL[i + 1], {i, 1, Length[ns]}];
+   B = B /. {z -> LL[1]}
+   ]
+
+
+(* export the classes of X(lambda) for |lambda|<=n *)
+
+ExportMC[n_] := Module[
+  {h, i, p, parts, k, m, s, j, A},
+  h = OpenWrite["equivariant_mc_classes.txt"];
+  For[i = 1, i <= n, i++,
+    Print["\nn = ", i];
+    WriteString[h, "\n(* =================== *)"];
+    WriteString[h, "\n(* ----   n = " <> ToString[i] <> "   ---- *)\n\n"];
+    parts = Partitions[i];
+    m = Length[parts];
+    For[j = 1, j <= m, j++,
+     p = parts[[j]];
+     Print["part = ", p];
+     A = Expand[mcXLam[p]];
+     (* Print[A]; *)
+     
+     s = ToString[A, FormatType -> InputForm, PageWidth -> Infinity, 
+       TotalWidth -> Infinity];
+     s = StringJoin["mc[", ToString[p], "] = ", s, " ;\n\n"];
+     (* Print[s]; *)
+     WriteString[h, s];
+     ]
+    ]
+   Close[h];
+  ]
+
+
+mcXLam[{1, 1, 1}]
+
+t - t^3 - L t X^3 + L t^3 X^3 - L X^2 Y - 2 L t X^2 Y + L t^3 X^2 Y + 
+ L^2 t X^5 Y - L^2 t^3 X^5 Y - L X Y^2 - 2 L t X Y^2 + L t^3 X Y^2 + 
+ L^2 X^4 Y^2 + L^2 t X^4 Y^2 - L^2 t^2 X^4 Y^2 - L^2 t^3 X^4 Y^2 - L t Y^3 + 
+ L t^3 Y^3 + L^2 X^3 Y^3 + 2 L^2 t X^3 Y^3 - L^2 t^2 X^3 Y^3 - 
+ 2 L^2 t^3 X^3 Y^3 + L^3 t^2 X^6 Y^3 + L^3 t^3 X^6 Y^3 + L^2 X^2 Y^4 + 
+ L^2 t X^2 Y^4 - L^2 t^2 X^2 Y^4 - L^2 t^3 X^2 Y^4 + L^3 t X^5 Y^4 + 
+ 2 L^3 t^2 X^5 Y^4 + L^3 t^3 X^5 Y^4 + L^2 t X Y^5 - L^2 t^3 X Y^5 + 
+ L^3 t X^4 Y^5 + 2 L^3 t^2 X^4 Y^5 + L^3 t^3 X^4 Y^5 + L^3 t^2 X^3 Y^6 + 
+ L^3 t^3 X^3 Y^6
+
+mcXLam[{1, 1, 1, 1, 1}]
+
+t^3 - t^5 - L t^3 X^5 + L t^5 X^5 - L t^3 X^4 Y + L t^5 X^4 Y + 
+ L^2 t^3 X^9 Y - L^2 t^5 X^9 Y + L t X^3 Y^2 + L t^2 X^3 Y^2 - L t^3 X^3 Y^2 +
+  L t^5 X^3 Y^2 + L^2 t^3 X^8 Y^2 - L^2 t^5 X^8 Y^2 + L t X^2 Y^3 + 
+ L t^2 X^2 Y^3 - L t^3 X^2 Y^3 + L t^5 X^2 Y^3 - L^2 t X^7 Y^3 + 
+ 3 L^2 t^3 X^7 Y^3 - 2 L^2 t^5 X^7 Y^3 - L^3 t^3 X^12 Y^3 + L^3 t^5 X^12 Y^3 -
+  L t^3 X Y^4 + L t^5 X Y^4 + L^2 t^2 X^6 Y^4 + 3 L^2 t^3 X^6 Y^4 - 
+ 2 L^2 t^5 X^6 Y^4 - L^3 t X^11 Y^4 - 2 L^3 t^2 X^11 Y^4 - 
+ 2 L^3 t^3 X^11 Y^4 + L^3 t^5 X^11 Y^4 - L t^3 Y^5 + L t^5 Y^5 + L^2 X^5 Y^5 +
+  L^2 t^2 X^5 Y^5 + 5 L^2 t^3 X^5 Y^5 - 3 L^2 t^5 X^5 Y^5 - L^3 X^10 Y^5 - 
+ 2 L^3 t X^10 Y^5 - 4 L^3 t^2 X^10 Y^5 - 5 L^3 t^3 X^10 Y^5 + 
+ 2 L^3 t^5 X^10 Y^5 + L^2 t^2 X^4 Y^6 + 3 L^2 t^3 X^4 Y^6 - 
+ 2 L^2 t^5 X^4 Y^6 - L^3 X^9 Y^6 - 3 L^3 t X^9 Y^6 - 6 L^3 t^2 X^9 Y^6 - 
+ 7 L^3 t^3 X^9 Y^6 + 3 L^3 t^5 X^9 Y^6 + L^4 t^3 X^14 Y^6 - L^4 t^5 X^14 Y^6 -
+  L^2 t X^3 Y^7 + 3 L^2 t^3 X^3 Y^7 - 2 L^2 t^5 X^3 Y^7 - L^3 X^8 Y^7 - 
+ 3 L^3 t X^8 Y^7 - 7 L^3 t^2 X^8 Y^7 - 8 L^3 t^3 X^8 Y^7 + 3 L^3 t^5 X^8 Y^7 +
+  L^4 t X^13 Y^7 + 2 L^4 t^2 X^13 Y^7 + L^4 t^3 X^13 Y^7 - L^4 t^4 X^13 Y^7 - 
+ L^4 t^5 X^13 Y^7 + L^2 t^3 X^2 Y^8 - L^2 t^5 X^2 Y^8 - L^3 X^7 Y^8 - 
+ 3 L^3 t X^7 Y^8 - 7 L^3 t^2 X^7 Y^8 - 8 L^3 t^3 X^7 Y^8 + 3 L^3 t^5 X^7 Y^8 +
+  L^4 X^12 Y^8 + 2 L^4 t X^12 Y^8 + 4 L^4 t^2 X^12 Y^8 + 4 L^4 t^3 X^12 Y^8 - 
+ L^4 t^4 X^12 Y^8 - 2 L^4 t^5 X^12 Y^8 + L^2 t^3 X Y^9 - L^2 t^5 X Y^9 - 
+ L^3 X^6 Y^9 - 3 L^3 t X^6 Y^9 - 6 L^3 t^2 X^6 Y^9 - 7 L^3 t^3 X^6 Y^9 + 
+ 3 L^3 t^5 X^6 Y^9 + L^4 X^11 Y^9 + 5 L^4 t X^11 Y^9 + 8 L^4 t^2 X^11 Y^9 + 
+ 5 L^4 t^3 X^11 Y^9 - L^4 t^4 X^11 Y^9 - 2 L^4 t^5 X^11 Y^9 - L^3 X^5 Y^10 - 
+ 2 L^3 t X^5 Y^10 - 4 L^3 t^2 X^5 Y^10 - 5 L^3 t^3 X^5 Y^10 + 
+ 2 L^3 t^5 X^5 Y^10 + 2 L^4 X^10 Y^10 + 5 L^4 t X^10 Y^10 + 
+ 9 L^4 t^2 X^10 Y^10 + 8 L^4 t^3 X^10 Y^10 - L^4 t^4 X^10 Y^10 - 
+ 3 L^4 t^5 X^10 Y^10 + L^5 t^4 X^15 Y^10 + L^5 t^5 X^15 Y^10 - 
+ L^3 t X^4 Y^11 - 2 L^3 t^2 X^4 Y^11 - 2 L^3 t^3 X^4 Y^11 + L^3 t^5 X^4 Y^11 +
+  L^4 X^9 Y^11 + 5 L^4 t X^9 Y^11 + 8 L^4 t^2 X^9 Y^11 + 5 L^4 t^3 X^9 Y^11 - 
+ L^4 t^4 X^9 Y^11 - 2 L^4 t^5 X^9 Y^11 + L^5 t^2 X^14 Y^11 + 
+ 2 L^5 t^3 X^14 Y^11 + 2 L^5 t^4 X^14 Y^11 + L^5 t^5 X^14 Y^11 - 
+ L^3 t^3 X^3 Y^12 + L^3 t^5 X^3 Y^12 + L^4 X^8 Y^12 + 2 L^4 t X^8 Y^12 + 
+ 4 L^4 t^2 X^8 Y^12 + 4 L^4 t^3 X^8 Y^12 - L^4 t^4 X^8 Y^12 - 
+ 2 L^4 t^5 X^8 Y^12 + L^5 t X^13 Y^12 + 2 L^5 t^2 X^13 Y^12 + 
+ 3 L^5 t^3 X^13 Y^12 + 3 L^5 t^4 X^13 Y^12 + L^5 t^5 X^13 Y^12 + 
+ L^4 t X^7 Y^13 + 2 L^4 t^2 X^7 Y^13 + L^4 t^3 X^7 Y^13 - L^4 t^4 X^7 Y^13 - 
+ L^4 t^5 X^7 Y^13 + L^5 t X^12 Y^13 + 2 L^5 t^2 X^12 Y^13 + 
+ 3 L^5 t^3 X^12 Y^13 + 3 L^5 t^4 X^12 Y^13 + L^5 t^5 X^12 Y^13 + 
+ L^4 t^3 X^6 Y^14 - L^4 t^5 X^6 Y^14 + L^5 t^2 X^11 Y^14 + 
+ 2 L^5 t^3 X^11 Y^14 + 2 L^5 t^4 X^11 Y^14 + L^5 t^5 X^11 Y^14 + 
+ L^5 t^4 X^10 Y^15 + L^5 t^5 X^10 Y^15
+
+mcXLam[{2, 2, 1, 1}]
+
+-t - t^2 + t^3 + t^4 + L t X^6 + L t^2 X^6 - L t^3 X^6 - L t^4 X^6 + 
+ L X^5 Y + 2 L t X^5 Y + L t^2 X^5 Y - L t^3 X^5 Y - L t^4 X^5 Y - 
+ L^2 t X^11 Y - L^2 t^2 X^11 Y + L^2 t^3 X^11 Y + L^2 t^4 X^11 Y + 
+ 2 L t X^4 Y^2 + 2 L t^2 X^4 Y^2 - L t^3 X^4 Y^2 - L t^4 X^4 Y^2 - 
+ L^2 X^10 Y^2 - 3 L^2 t X^10 Y^2 - 2 L^2 t^2 X^10 Y^2 + L^2 t^3 X^10 Y^2 + 
+ L^2 t^4 X^10 Y^2 + L t X^3 Y^3 + L t^2 X^3 Y^3 - L t^3 X^3 Y^3 - 
+ L t^4 X^3 Y^3 - 2 L^2 X^9 Y^3 - 7 L^2 t X^9 Y^3 - 6 L^2 t^2 X^9 Y^3 + 
+ L^2 t^3 X^9 Y^3 + 2 L^2 t^4 X^9 Y^3 + L^3 t X^15 Y^3 + L^3 t^2 X^15 Y^3 - 
+ L^3 t^3 X^15 Y^3 - L^3 t^4 X^15 Y^3 + 2 L t X^2 Y^4 + 2 L t^2 X^2 Y^4 - 
+ L t^3 X^2 Y^4 - L t^4 X^2 Y^4 - 3 L^2 X^8 Y^4 - 11 L^2 t X^8 Y^4 - 
+ 10 L^2 t^2 X^8 Y^4 + 2 L^2 t^4 X^8 Y^4 + L^3 X^14 Y^4 + 4 L^3 t X^14 Y^4 + 
+ 3 L^3 t^2 X^14 Y^4 - L^3 t^3 X^14 Y^4 - L^3 t^4 X^14 Y^4 + L X Y^5 + 
+ 2 L t X Y^5 + L t^2 X Y^5 - L t^3 X Y^5 - L t^4 X Y^5 - 5 L^2 X^7 Y^5 - 
+ 15 L^2 t X^7 Y^5 - 13 L^2 t^2 X^7 Y^5 + 3 L^2 t^4 X^7 Y^5 + 3 L^3 X^13 Y^5 + 
+ 11 L^3 t X^13 Y^5 + 11 L^3 t^2 X^13 Y^5 + L^3 t^3 X^13 Y^5 - 
+ 2 L^3 t^4 X^13 Y^5 + L t Y^6 + L t^2 Y^6 - L t^3 Y^6 - L t^4 Y^6 - 
+ 5 L^2 X^6 Y^6 - 16 L^2 t X^6 Y^6 - 14 L^2 t^2 X^6 Y^6 + 3 L^2 t^4 X^6 Y^6 + 
+ 7 L^3 X^12 Y^6 + 21 L^3 t X^12 Y^6 + 19 L^3 t^2 X^12 Y^6 + 
+ 3 L^3 t^3 X^12 Y^6 - 2 L^3 t^4 X^12 Y^6 - L^4 t X^18 Y^6 - L^4 t^2 X^18 Y^6 +
+  L^4 t^3 X^18 Y^6 + L^4 t^4 X^18 Y^6 - 5 L^2 X^5 Y^7 - 15 L^2 t X^5 Y^7 - 
+ 13 L^2 t^2 X^5 Y^7 + 3 L^2 t^4 X^5 Y^7 + 9 L^3 X^11 Y^7 + 
+ 30 L^3 t X^11 Y^7 + 30 L^3 t^2 X^11 Y^7 + 6 L^3 t^3 X^11 Y^7 - 
+ 3 L^3 t^4 X^11 Y^7 - L^4 X^17 Y^7 - 4 L^4 t X^17 Y^7 - 3 L^4 t^2 X^17 Y^7 + 
+ L^4 t^3 X^17 Y^7 + L^4 t^4 X^17 Y^7 - 3 L^2 X^4 Y^8 - 11 L^2 t X^4 Y^8 - 
+ 10 L^2 t^2 X^4 Y^8 + 2 L^2 t^4 X^4 Y^8 + 13 L^3 X^10 Y^8 + 
+ 38 L^3 t X^10 Y^8 + 36 L^3 t^2 X^10 Y^8 + 9 L^3 t^3 X^10 Y^8 - 
+ 2 L^3 t^4 X^10 Y^8 - 3 L^4 X^16 Y^8 - 10 L^4 t X^16 Y^8 - 
+ 9 L^4 t^2 X^16 Y^8 + 2 L^4 t^4 X^16 Y^8 - 2 L^2 X^3 Y^9 - 7 L^2 t X^3 Y^9 - 
+ 6 L^2 t^2 X^3 Y^9 + L^2 t^3 X^3 Y^9 + 2 L^2 t^4 X^3 Y^9 + 13 L^3 X^9 Y^9 + 
+ 42 L^3 t X^9 Y^9 + 42 L^3 t^2 X^9 Y^9 + 10 L^3 t^3 X^9 Y^9 - 
+ 3 L^3 t^4 X^9 Y^9 - 6 L^4 X^15 Y^9 - 18 L^4 t X^15 Y^9 - 
+ 16 L^4 t^2 X^15 Y^9 - 2 L^4 t^3 X^15 Y^9 + 2 L^4 t^4 X^15 Y^9 - 
+ L^2 X^2 Y^10 - 3 L^2 t X^2 Y^10 - 2 L^2 t^2 X^2 Y^10 + L^2 t^3 X^2 Y^10 + 
+ L^2 t^4 X^2 Y^10 + 13 L^3 X^8 Y^10 + 38 L^3 t X^8 Y^10 + 
+ 36 L^3 t^2 X^8 Y^10 + 9 L^3 t^3 X^8 Y^10 - 2 L^3 t^4 X^8 Y^10 - 
+ 9 L^4 X^14 Y^10 - 27 L^4 t X^14 Y^10 - 24 L^4 t^2 X^14 Y^10 - 
+ 3 L^4 t^3 X^14 Y^10 + 3 L^4 t^4 X^14 Y^10 - L^5 t^2 X^20 Y^10 - 
+ 2 L^5 t^3 X^20 Y^10 - L^5 t^4 X^20 Y^10 - L^2 t X Y^11 - L^2 t^2 X Y^11 + 
+ L^2 t^3 X Y^11 + L^2 t^4 X Y^11 + 9 L^3 X^7 Y^11 + 30 L^3 t X^7 Y^11 + 
+ 30 L^3 t^2 X^7 Y^11 + 6 L^3 t^3 X^7 Y^11 - 3 L^3 t^4 X^7 Y^11 - 
+ 11 L^4 X^13 Y^11 - 31 L^4 t X^13 Y^11 - 27 L^4 t^2 X^13 Y^11 - 
+ 4 L^4 t^3 X^13 Y^11 + 3 L^4 t^4 X^13 Y^11 - 2 L^5 t X^19 Y^11 - 
+ 6 L^5 t^2 X^19 Y^11 - 6 L^5 t^3 X^19 Y^11 - 2 L^5 t^4 X^19 Y^11 + 
+ 7 L^3 X^6 Y^12 + 21 L^3 t X^6 Y^12 + 19 L^3 t^2 X^6 Y^12 + 
+ 3 L^3 t^3 X^6 Y^12 - 2 L^3 t^4 X^6 Y^12 - 11 L^4 X^12 Y^12 - 
+ 33 L^4 t X^12 Y^12 - 29 L^4 t^2 X^12 Y^12 - 3 L^4 t^3 X^12 Y^12 + 
+ 4 L^4 t^4 X^12 Y^12 - L^5 X^18 Y^12 - 4 L^5 t X^18 Y^12 - 
+ 9 L^5 t^2 X^18 Y^12 - 10 L^5 t^3 X^18 Y^12 - 4 L^5 t^4 X^18 Y^12 + 
+ 3 L^3 X^5 Y^13 + 11 L^3 t X^5 Y^13 + 11 L^3 t^2 X^5 Y^13 + 
+ L^3 t^3 X^5 Y^13 - 2 L^3 t^4 X^5 Y^13 - 11 L^4 X^11 Y^13 - 
+ 31 L^4 t X^11 Y^13 - 27 L^4 t^2 X^11 Y^13 - 4 L^4 t^3 X^11 Y^13 + 
+ 3 L^4 t^4 X^11 Y^13 - 3 L^5 t X^17 Y^13 - 11 L^5 t^2 X^17 Y^13 - 
+ 12 L^5 t^3 X^17 Y^13 - 4 L^5 t^4 X^17 Y^13 + L^3 X^4 Y^14 + 
+ 4 L^3 t X^4 Y^14 + 3 L^3 t^2 X^4 Y^14 - L^3 t^3 X^4 Y^14 - 
+ L^3 t^4 X^4 Y^14 - 9 L^4 X^10 Y^14 - 27 L^4 t X^10 Y^14 - 
+ 24 L^4 t^2 X^10 Y^14 - 3 L^4 t^3 X^10 Y^14 + 3 L^4 t^4 X^10 Y^14 + 
+ L^5 X^16 Y^14 - 7 L^5 t^2 X^16 Y^14 - 11 L^5 t^3 X^16 Y^14 - 
+ 5 L^5 t^4 X^16 Y^14 + L^3 t X^3 Y^15 + L^3 t^2 X^3 Y^15 - L^3 t^3 X^3 Y^15 - 
+ L^3 t^4 X^3 Y^15 - 6 L^4 X^9 Y^15 - 18 L^4 t X^9 Y^15 - 
+ 16 L^4 t^2 X^9 Y^15 - 2 L^4 t^3 X^9 Y^15 + 2 L^4 t^4 X^9 Y^15 + 
+ 3 L^5 X^15 Y^15 + 3 L^5 t X^15 Y^15 - 7 L^5 t^2 X^15 Y^15 - 
+ 11 L^5 t^3 X^15 Y^15 - 4 L^5 t^4 X^15 Y^15 + L^6 t X^21 Y^15 + 
+ 3 L^6 t^2 X^21 Y^15 + 3 L^6 t^3 X^21 Y^15 + L^6 t^4 X^21 Y^15 - 
+ 3 L^4 X^8 Y^16 - 10 L^4 t X^8 Y^16 - 9 L^4 t^2 X^8 Y^16 + 
+ 2 L^4 t^4 X^8 Y^16 + L^5 X^14 Y^16 - 7 L^5 t^2 X^14 Y^16 - 
+ 11 L^5 t^3 X^14 Y^16 - 5 L^5 t^4 X^14 Y^16 + L^6 X^20 Y^16 + 
+ 7 L^6 t X^20 Y^16 + 12 L^6 t^2 X^20 Y^16 + 8 L^6 t^3 X^20 Y^16 + 
+ 2 L^6 t^4 X^20 Y^16 - L^4 X^7 Y^17 - 4 L^4 t X^7 Y^17 - 3 L^4 t^2 X^7 Y^17 + 
+ L^4 t^3 X^7 Y^17 + L^4 t^4 X^7 Y^17 - 3 L^5 t X^13 Y^17 - 
+ 11 L^5 t^2 X^13 Y^17 - 12 L^5 t^3 X^13 Y^17 - 4 L^5 t^4 X^13 Y^17 + 
+ 4 L^6 X^19 Y^17 + 13 L^6 t X^19 Y^17 + 19 L^6 t^2 X^19 Y^17 + 
+ 14 L^6 t^3 X^19 Y^17 + 4 L^6 t^4 X^19 Y^17 - L^4 t X^6 Y^18 - 
+ L^4 t^2 X^6 Y^18 + L^4 t^3 X^6 Y^18 + L^4 t^4 X^6 Y^18 - L^5 X^12 Y^18 - 
+ 4 L^5 t X^12 Y^18 - 9 L^5 t^2 X^12 Y^18 - 10 L^5 t^3 X^12 Y^18 - 
+ 4 L^5 t^4 X^12 Y^18 + 4 L^6 X^18 Y^18 + 16 L^6 t X^18 Y^18 + 
+ 24 L^6 t^2 X^18 Y^18 + 16 L^6 t^3 X^18 Y^18 + 4 L^6 t^4 X^18 Y^18 - 
+ 2 L^5 t X^11 Y^19 - 6 L^5 t^2 X^11 Y^19 - 6 L^5 t^3 X^11 Y^19 - 
+ 2 L^5 t^4 X^11 Y^19 + 4 L^6 X^17 Y^19 + 13 L^6 t X^17 Y^19 + 
+ 19 L^6 t^2 X^17 Y^19 + 14 L^6 t^3 X^17 Y^19 + 4 L^6 t^4 X^17 Y^19 - 
+ L^5 t^2 X^10 Y^20 - 2 L^5 t^3 X^10 Y^20 - L^5 t^4 X^10 Y^20 + 
+ L^6 X^16 Y^20 + 7 L^6 t X^16 Y^20 + 12 L^6 t^2 X^16 Y^20 + 
+ 8 L^6 t^3 X^16 Y^20 + 2 L^6 t^4 X^16 Y^20 + L^6 t X^15 Y^21 + 
+ 3 L^6 t^2 X^15 Y^21 + 3 L^6 t^3 X^15 Y^21 + L^6 t^4 X^15 Y^21
+
diff --git a/mathematica/equivariant_CSM_via_motivic.nb b/mathematica/equivariant_CSM_via_motivic.nb
new file mode 100644
--- /dev/null
+++ b/mathematica/equivariant_CSM_via_motivic.nb
@@ -0,0 +1,2195 @@
+(* Content-type: application/vnd.wolfram.mathematica *)
+
+(*** Wolfram Notebook File ***)
+(* http://www.wolfram.com/nb *)
+
+(* CreatedBy='Mathematica 9.0' *)
+
+(*CacheID: 234*)
+(* Internal cache information:
+NotebookFileLineBreakTest
+NotebookFileLineBreakTest
+NotebookDataPosition[       157,          7]
+NotebookDataLength[     79871,       2186]
+NotebookOptionsPosition[     78389,       2136]
+NotebookOutlinePosition[     78746,       2152]
+CellTagsIndexPosition[     78703,       2149]
+WindowFrame->Normal*)
+
+(* Beginning of Notebook Content *)
+Notebook[{
+
+Cell[CellGroupData[{
+Cell[BoxData[
+ RowBox[{"\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{"===", 
+    RowBox[{"=", " ", 
+     RowBox[{
+      RowBox[{
+       RowBox[{
+        RowBox[{"COMPUTE", " ", "THR", " ", "EQUIVARIANT", " ", "CHERN"}], 
+        "-", "SCHWARTZ", "-", 
+        RowBox[{
+        "MACPHERSON", " ", "\[IndentingNewLine]", "CLASS", " ", "OF", " ", 
+         "COINCIDENT", " ", "ROOT", " ", "LOCI", " ", "VIA", " ", "THE", " ", 
+         "MOTIVIC", " ", "ALGORITHM"}]}], " ", "==="}], "="}]}]}], " ", 
+   "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{"<<", "Combinatorica`"}], "\n", "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{
+     RowBox[{"convention", ":", " ", "u"}], " ", "=", " ", 
+     RowBox[{
+      RowBox[{"-", "c_"}], "1", 
+      RowBox[{"(", "L", ")"}], " ", "where", " ", "L", " ", "is", " ", "the", 
+      " ", "tautological", " ", "line", " ", "bundle", " ", "on", " ", 
+      RowBox[{"P", "^", "n"}]}]}], " ", "*)"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"uu", "[", "i_", "]"}], ":=", 
+    RowBox[{"Subscript", "[", 
+     RowBox[{"u", ",", "i"}], "]"}]}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"vv", "[", "i_", "]"}], ":=", 
+    RowBox[{"Subscript", "[", 
+     RowBox[{"u", ",", "i"}], "]"}]}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"ww", "[", "i_", "]"}], ":=", 
+    RowBox[{"Subscript", "[", 
+     RowBox[{"u", ",", "i"}], "]"}]}], "\[IndentingNewLine]", 
+   "\[IndentingNewLine]", 
+   RowBox[{"(*", 
+    RowBox[{
+    "only", " ", "works", " ", "for", " ", "lists", " ", "of", " ", "equal", 
+     " ", 
+     RowBox[{"length", "!!"}]}], "*)"}], 
+   RowBox[{
+    RowBox[{"Zip", "[", 
+     RowBox[{"as_", ",", "bs_"}], "]"}], ":=", 
+    RowBox[{"MapThread", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{"#1", ",", "#2"}], "}"}], "&"}], ",", 
+      RowBox[{"{", 
+       RowBox[{"as", ",", "bs"}], "}"}]}], "]"}]}], "\n", 
+   RowBox[{
+    RowBox[{"Zip3", "[", 
+     RowBox[{"as_", ",", "bs_", ",", "cs_"}], "]"}], ":=", 
+    RowBox[{"MapThread", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{"#1", ",", "#2", ",", "#3"}], "}"}], "&"}], ",", 
+      RowBox[{"{", 
+       RowBox[{"as", ",", "bs", ",", "cs"}], "}"}]}], "]"}]}], "\n", 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"Fst", "[", "pair_", "]"}], ":=", 
+    RowBox[{"pair", "[", 
+     RowBox[{"[", "1", "]"}], "]"}]}], "\n", 
+   RowBox[{
+    RowBox[{"Snd", "[", "pair_", "]"}], ":=", 
+    RowBox[{"pair", "[", 
+     RowBox[{"[", "2", "]"}], "]"}]}], "\n", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"extendListWithZeros", "[", 
+     RowBox[{"L_", ",", "n_"}], "]"}], ":=", 
+    RowBox[{"Join", "[", 
+     RowBox[{"L", ",", 
+      RowBox[{"Table", "[", 
+       RowBox[{"0", ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "1", ",", 
+          RowBox[{"n", "-", 
+           RowBox[{"Length", "[", "L", "]"}]}]}], "}"}]}], "]"}]}], "]"}]}], 
+   "\n", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"SumList", "[", "L_", "]"}], ":=", 
+    RowBox[{"Sum", "[", 
+     RowBox[{"x", ",", 
+      RowBox[{"{", 
+       RowBox[{"x", ",", "L"}], "}"}]}], "]"}]}]}]}]], "Input",
+ CellChangeTimes->{{3.799905685678034*^9, 3.799905717212275*^9}, {
+  3.799913522600854*^9, 3.799913527152174*^9}, {3.7999135913325577`*^9, 
+  3.799913592101347*^9}, {3.8011372389408627`*^9, 3.8011373095459747`*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  StyleBox[
+   RowBox[{"General", "::", "compat"}], "MessageName"], 
+  RowBox[{
+  ":", " "}], "\<\"Combinatorica Graph and Permutations functionality has \
+been superseded by preloaded functionality. The package now being loaded may \
+conflict with this. Please see the Compatibility Guide for details.\"\>"}]], \
+"Message", "MSG",
+ CellChangeTimes->{3.801137314352317*^9, 3.801137453501457*^9, 
+  3.8011377668896217`*^9, 3.8011379201269207`*^9}]
+}, Open  ]],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 0.5}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 3}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"===", " ", 
+    RowBox[{"EQUIVARIANT", " ", "COHOMOLOGY", " ", "RING", " ", "OF", " ", 
+     RowBox[{"P", "^", "n"}]}], " ", "==="}], " ", "*)"}], "\n", 
+  "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{"Weights", " ", "of", " ", 
+    RowBox[{"Sym", "^", "n"}], " ", 
+    RowBox[{"C", "^", "2"}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"wt", "[", 
+     RowBox[{"n_", ",", "i_"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{
+      RowBox[{"(", 
+       RowBox[{"n", "-", "i"}], ")"}], "*", "\[Alpha]"}], "+", 
+     RowBox[{"i", "*", "\[Beta]"}]}]}], "\[IndentingNewLine]", "\n", 
+   RowBox[{"(*", " ", 
+    RowBox[{
+     RowBox[{"the", " ", "relation", " ", "in", " ", 
+      RowBox[{"H", "^"}], "*", 
+      RowBox[{
+       RowBox[{"(", 
+        RowBox[{"P", "^", "n"}], ")"}], ".", " ", 
+       RowBox[{"Convention", ":", " ", "\[IndentingNewLine]", "u"}]}]}], " ", 
+     "=", " ", 
+     RowBox[{
+      RowBox[{"-", "c1"}], 
+      RowBox[{"(", "L", ")"}], " ", "where", " ", "L", " ", "is", " ", "the", 
+      " ", "tautological", " ", "line", " ", "bundle"}]}], " ", "*)"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"rel", "[", "n_", "]"}], ":=", 
+    RowBox[{"Product", "[", 
+     RowBox[{
+      RowBox[{"u", "+", 
+       RowBox[{"wt", "[", 
+        RowBox[{"n", ",", "i"}], "]"}]}], ",", 
+      RowBox[{"{", 
+       RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}]}], 
+   "\[IndentingNewLine]", "\[IndentingNewLine]", 
+   RowBox[{"Clear", "[", "upow$nplus1", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"upow$nplus1", "[", "n_", "]"}], " ", ":=", " ", 
+    RowBox[{
+     RowBox[{"upow$nplus1", "[", "n", "]"}], "=", " ", 
+     RowBox[{"Expand", "[", 
+      RowBox[{
+       RowBox[{"u", "^", 
+        RowBox[{"(", 
+         RowBox[{"n", "+", "1"}], ")"}]}], "-", 
+       RowBox[{"rel", "[", "n", "]"}]}], "]"}]}]}], "\n", 
+   RowBox[{"(*", " ", 
+    RowBox[{
+     RowBox[{"(", "unefficiently", ")"}], " ", "normalize", " ", 
+     RowBox[{
+      RowBox[{"a", " ", "/", "polynomial"}], "/", " ", "in"}], " ", "u"}], 
+    " ", "*)"}], " ", "\[IndentingNewLine]", "\[IndentingNewLine]", 
+   RowBox[{"Clear", "[", "normalizeSlow", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"normalizeSlow", "[", 
+     RowBox[{"n_", ",", " ", "X0_"}], "]"}], ":=", 
+    RowBox[{"Module", "[", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"X", "=", 
+         RowBox[{"Expand", "[", "X0", "]"}]}], ",", "m"}], "}"}], ",", 
+      "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"m", "=", 
+        RowBox[{"Exponent", "[", 
+         RowBox[{"X", ",", "u"}], "]"}]}], ";", "\[IndentingNewLine]", 
+       RowBox[{"If", "[", 
+        RowBox[{
+         RowBox[{"m", "\[LessEqual]", "n"}], ",", "X", ",", 
+         RowBox[{"normalizeSlow", "[", 
+          RowBox[{"n", ",", 
+           RowBox[{"X", "/.", 
+            RowBox[{"{", 
+             RowBox[{
+              RowBox[{"u", "^", "m"}], "\[Rule]", 
+              RowBox[{
+               RowBox[{"u", "^", 
+                RowBox[{"(", 
+                 RowBox[{"m", "-", "n", "-", "1"}], ")"}]}], "*", 
+               RowBox[{"upow$nplus1", "[", "n", "]"}]}]}], "}"}]}]}], "]"}]}],
+         "]"}]}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", 
+   "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{
+    "table", " ", "of", " ", "normalized", " ", "powers", " ", "of", " ", 
+     "u"}], " ", "*)"}], "\n", 
+   RowBox[{"Clear", "[", "UPowAB", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"UPowAB", "[", 
+     RowBox[{"n_", ",", "k_"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"UPowAB", "[", 
+      RowBox[{"n", ",", "k"}], "]"}], " ", "=", " ", 
+     RowBox[{"Expand", "[", 
+      RowBox[{"normalizeSlow", "[", 
+       RowBox[{"n", ",", 
+        RowBox[{"u", "^", "k"}]}], "]"}], "]"}]}]}], "\[IndentingNewLine]", 
+   "\n", 
+   RowBox[{"Clear", "[", "normalizeVarAB", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"normalizeVarAB", "[", 
+     RowBox[{"n_", ",", "uuu_", ",", "X_"}], "]"}], ":=", 
+    RowBox[{"Module", "[", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{"m", "=", 
+        RowBox[{"Exponent", "[", 
+         RowBox[{"X", ",", "uuu"}], "]"}]}], "}"}], ",", 
+      "\[IndentingNewLine]", 
+      RowBox[{"Expand", "[", 
+       RowBox[{"Sum", "[", 
+        RowBox[{
+         RowBox[{
+          RowBox[{"Coefficient", "[", 
+           RowBox[{"X", ",", "uuu", ",", "k"}], "]"}], "*", 
+          RowBox[{"(", 
+           RowBox[{
+            RowBox[{"UPowAB", "[", 
+             RowBox[{"n", ",", "k"}], "]"}], "/.", 
+            RowBox[{"{", 
+             RowBox[{"u", "\[Rule]", "uuu"}], "}"}]}], ")"}]}], ",", 
+         RowBox[{"{", 
+          RowBox[{"k", ",", "0", ",", "m"}], "}"}]}], "]"}], "]"}]}], 
+     "\[IndentingNewLine]", "]"}]}]}]}]], "Input",
+ CellChangeTimes->{{3.799905722746293*^9, 3.799905732364284*^9}, {
+  3.799913537797875*^9, 3.799913551058023*^9}, {3.8011373223183937`*^9, 
+  3.801137341966631*^9}}],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 2}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 4}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"===", " ", 
+    RowBox[{
+    "pushforward", " ", "along", " ", "the", " ", "multiplication", " ", 
+     RowBox[{"(", 
+      RowBox[{"single", " ", "monom"}], ")"}]}], " ", "==="}], " ", "*)"}], 
+  "\n", "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+    RowBox[{"Psi_", "*", " ", 
+     RowBox[{"(", 
+      RowBox[{
+       RowBox[{"u", "^", "k"}], " ", "*", " ", 
+       RowBox[{"v", "^", "l"}]}], ")"}]}], " ", "=", " ", 
+    RowBox[{"?", " ", 
+     RowBox[{"cohomology", " ", "indexing"}]}]}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{"Clear", "[", "psiStarAB", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"psiStarAB", "[", 
+     RowBox[{"n_", ",", "m_", ",", "0", ",", "0"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"psiStarAB", "[", 
+      RowBox[{"n", ",", "m", ",", "0", ",", "0"}], "]"}], "=", 
+     RowBox[{"Binomial", "[", 
+      RowBox[{
+       RowBox[{"n", "+", "m"}], ",", "n"}], "]"}]}]}], "\[IndentingNewLine]", 
+   
+   RowBox[{
+    RowBox[{"psiStarAB", "[", 
+     RowBox[{"n_", ",", "m_", ",", "k_", ",", "l_"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"psiStarAB", "[", 
+      RowBox[{"n", ",", "m", ",", "k", ",", "l"}], "]"}], " ", "=", " ", 
+     RowBox[{"Module", "[", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{
+        "A", ",", "B", ",", "AB", ",", "F", ",", "R", ",", "IJ", ",", "sel", 
+         ",", "fun", ",", "cft"}], "}"}], ",", "\[IndentingNewLine]", 
+       RowBox[{
+        RowBox[{"A", "=", 
+         RowBox[{"Product", "[", 
+          RowBox[{
+           RowBox[{"u", "+", 
+            RowBox[{"wt", "[", 
+             RowBox[{"n", ",", "i"}], "]"}]}], ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "0", ",", 
+             RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"B", "=", 
+         RowBox[{"Product", "[", 
+          RowBox[{
+           RowBox[{"v", "+", 
+            RowBox[{"wt", "[", 
+             RowBox[{"m", ",", "j"}], "]"}]}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "0", ",", 
+             RowBox[{"l", "-", "1"}]}], "}"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"AB", " ", "=", 
+         RowBox[{"Expand", "[", 
+          RowBox[{"A", "*", "B"}], "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{
+         RowBox[{"sel", "[", 
+          RowBox[{"{", 
+           RowBox[{"i_", ",", "j_"}], "}"}], "]"}], ":=", 
+         RowBox[{
+          RowBox[{"(", 
+           RowBox[{"i", "<", "k"}], ")"}], " ", "||", " ", 
+          RowBox[{"(", 
+           RowBox[{"j", "<", "l"}], ")"}]}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{
+         RowBox[{"cft", "[", 
+          RowBox[{"{", 
+           RowBox[{"i_", ",", "j_"}], "}"}], "]"}], ":=", 
+         RowBox[{"Coefficient", "[", 
+          RowBox[{
+           RowBox[{"Coefficient", "[", 
+            RowBox[{"AB", ",", "u", ",", "i"}], "]"}], ",", "v", ",", "j"}], 
+          "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{
+         RowBox[{"fun", "[", 
+          RowBox[{"{", 
+           RowBox[{"i_", ",", "j_"}], "}"}], "]"}], ":=", 
+         RowBox[{"psiStarAB", "[", 
+          RowBox[{"n", ",", "m", ",", "i", ",", "j"}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"IJ", " ", "=", " ", 
+         RowBox[{"Flatten", "[", 
+          RowBox[{
+           RowBox[{"Table", "[", 
+            RowBox[{
+             RowBox[{"{", 
+              RowBox[{"i", ",", "j"}], "}"}], ",", 
+             RowBox[{"{", 
+              RowBox[{"i", ",", "0", ",", "k"}], "}"}], ",", 
+             RowBox[{"{", 
+              RowBox[{"j", ",", "0", ",", "l"}], "}"}]}], "]"}], ",", "1"}], 
+          "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{"IJ", " ", "=", 
+         RowBox[{"Select", "[", " ", 
+          RowBox[{"IJ", ",", "sel"}], "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{"(*", " ", 
+         RowBox[{
+          RowBox[{"Print", "[", "IJ", "]"}], ";", "\[IndentingNewLine]", 
+          RowBox[{"Print", "[", "AB", "]"}], ";"}], " ", "*)"}], 
+        "\[IndentingNewLine]", 
+        RowBox[{"F", " ", "=", " ", 
+         RowBox[{
+          RowBox[{"Binomial", "[", 
+           RowBox[{
+            RowBox[{"n", "+", "m", "-", "k", "-", "l"}], ",", 
+            RowBox[{"n", "-", "k"}]}], "]"}], "*", 
+          RowBox[{"Product", "[", 
+           RowBox[{
+            RowBox[{"w", "+", 
+             RowBox[{"wt", "[", 
+              RowBox[{
+               RowBox[{"n", "+", "m"}], ",", "i"}], "]"}]}], ",", 
+            RowBox[{"{", 
+             RowBox[{"i", ",", "0", ",", 
+              RowBox[{"k", "+", "l", "-", "1"}]}], "}"}]}], "]"}]}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"R", " ", "=", 
+         RowBox[{"Sum", "[", " ", 
+          RowBox[{
+           RowBox[{
+            RowBox[{"cft", "[", "ij", "]"}], "*", 
+            RowBox[{"fun", "[", "ij", "]"}]}], ",", 
+           RowBox[{"{", 
+            RowBox[{"ij", ",", "IJ"}], "}"}]}], "]"}]}], ";", "  ", 
+        "\[IndentingNewLine]", 
+        RowBox[{"Expand", "[", 
+         RowBox[{"F", "-", "R"}], "]"}]}]}], "\[IndentingNewLine]", "]"}]}]}],
+    "\n", "\[IndentingNewLine]", 
+   RowBox[{"Clear", "[", "psiStarChern", "]"}], "\n", 
+   RowBox[{
+    RowBox[{"psiStarChern", "[", 
+     RowBox[{"n_", ",", "m_", ",", "k_", ",", "l_"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"psiStarChern", "[", 
+      RowBox[{"n", ",", "m", ",", "k", ",", "l"}], "]"}], " ", "=", " ", 
+     "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"SymmetricReduction", "[", 
+       RowBox[{
+        RowBox[{"psiStarAB", "[", 
+         RowBox[{"n", ",", "m", ",", "k", ",", "l"}], "]"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"\[Alpha]", ",", "\[Beta]"}], "}"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"c", ",", "d"}], "}"}]}], "]"}], "[", 
+      RowBox[{"[", "1", "]"}], "]"}]}]}], "\[IndentingNewLine]"}]}]], "Input",\
+
+ CellChangeTimes->{{3.799905744141039*^9, 3.799905769496408*^9}, {
+  3.7999135651971607`*^9, 3.79991357100387*^9}}],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 2}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 4}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"===", " ", 
+    RowBox[{"class", " ", "of", " ", "the", " ", "diagonal"}], " ", "==="}], 
+   " ", "*)"}], "\n", "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"notk", "[", 
+     RowBox[{"n_", ",", "k_"}], "]"}], ":=", 
+    RowBox[{"Select", "[", 
+     RowBox[{
+      RowBox[{"Table", "[", 
+       RowBox[{"i", ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}], ",", 
+      RowBox[{
+       RowBox[{"#", "\[NotEqual]", "k"}], "&"}]}], "]"}]}], 
+   "\[IndentingNewLine]", "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{"class", " ", "of", " ", "the", " ", "diagonal", " ", "in", " ", 
+     RowBox[{"P", "^", "n"}], " ", "x", " ", 
+     RowBox[{"P", "^", "n"}]}], " ", "*)"}], "\[IndentingNewLine]", 
+   RowBox[{"Clear", "[", "deltaClassAB", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"deltaClassAB", "[", "n_", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"deltaClassAB", "[", "n", "]"}], " ", "=", "\[IndentingNewLine]", 
+     RowBox[{"Expand", "[", 
+      RowBox[{"Factor", "[", 
+       RowBox[{"Sum", "[", " ", 
+        RowBox[{
+         RowBox[{"Product", "[", 
+          RowBox[{
+           RowBox[{
+            RowBox[{"(", 
+             RowBox[{"v", "+", 
+              RowBox[{"wt", "[", 
+               RowBox[{"n", ",", "i"}], "]"}]}], ")"}], 
+            RowBox[{
+             RowBox[{"(", 
+              RowBox[{"w", "+", 
+               RowBox[{"wt", "[", 
+                RowBox[{"n", ",", "i"}], "]"}]}], ")"}], "/", 
+             RowBox[{"(", 
+              RowBox[{
+               RowBox[{"wt", "[", 
+                RowBox[{"n", ",", "i"}], "]"}], "-", 
+               RowBox[{"wt", "[", 
+                RowBox[{"n", ",", "k"}], "]"}]}], ")"}]}]}], ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", 
+             RowBox[{"notk", "[", 
+              RowBox[{"n", ",", "k"}], "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"k", ",", "0", ",", "n"}], "}"}]}], "]"}], "]"}], "]"}]}]}],
+    "\[IndentingNewLine]", "\n", 
+   RowBox[{"Clear", "[", "deltaClassCh", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"deltaClassCh", "[", "n_", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"deltaClassCh", "[", "n", "]"}], " ", "=", "\[IndentingNewLine]", 
+     RowBox[{"Expand", "[", 
+      RowBox[{
+       RowBox[{"SymmetricReduction", "[", 
+        RowBox[{
+         RowBox[{"deltaClassAB", "[", "n", "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"\[Alpha]", ",", "\[Beta]"}], "}"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"c", ",", "d"}], "}"}]}], "]"}], "[", 
+       RowBox[{"[", "1", "]"}], "]"}], "]"}]}]}], "\[IndentingNewLine]", "\n", 
+   RowBox[{"(*", " ", 
+    RowBox[{"small", " ", "diagonal", " ", "in", " ", 
+     RowBox[{"P", "^", "n"}], " ", "x", " ", 
+     RowBox[{"P", "^", "n"}], " ", "x", " ", 
+     RowBox[{"P", "^", "n"}]}], " ", "*)"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"deltaClassTri", "[", "n_", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"deltaClassTri", "[", "n", "]"}], " ", "=", 
+     "\[IndentingNewLine]", 
+     RowBox[{"Expand", "[", 
+      RowBox[{"Factor", "[", 
+       RowBox[{"Sum", "[", " ", 
+        RowBox[{
+         RowBox[{"Product", "[", 
+          RowBox[{
+           RowBox[{
+            RowBox[{"(", 
+             RowBox[{
+              RowBox[{"uu", "[", "1", "]"}], "+", 
+              RowBox[{"wt", "[", 
+               RowBox[{"n", ",", "i"}], "]"}]}], ")"}], 
+            RowBox[{"(", 
+             RowBox[{
+              RowBox[{"uu", "[", "2", "]"}], "+", 
+              RowBox[{"wt", "[", 
+               RowBox[{"n", ",", "i"}], "]"}]}], ")"}], 
+            RowBox[{
+             RowBox[{"(", 
+              RowBox[{
+               RowBox[{"uu", "[", "3", "]"}], "+", 
+               RowBox[{"wt", "[", 
+                RowBox[{"n", ",", "i"}], "]"}]}], ")"}], "/", 
+             RowBox[{"(", 
+              RowBox[{
+               RowBox[{"wt", "[", 
+                RowBox[{"n", ",", "i"}], "]"}], "-", 
+               RowBox[{"wt", "[", 
+                RowBox[{"n", ",", "k"}], "]"}]}], ")"}]}]}], ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", 
+             RowBox[{"notk", "[", 
+              RowBox[{"n", ",", "k"}], "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"k", ",", "0", ",", "n"}], "}"}]}], "]"}], "]"}], 
+      "]"}]}]}]}]}]], "Input",
+ CellChangeTimes->{{3.799905776542532*^9, 3.799905781984827*^9}, {
+   3.7999136010678368`*^9, 3.799913629960795*^9}, {3.7999137031951857`*^9, 
+   3.799913712604754*^9}, 3.80113777875804*^9}],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 0.5}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 3}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"===", " ", 
+    RowBox[{
+    "pushforward", " ", "along", " ", "the", " ", "diagonal", " ", "map", " ", 
+     RowBox[{"(", 
+      RowBox[{"single", " ", "monom"}], ")"}]}], " ", "==="}], " ", "*)"}], 
+  "\n", "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+    RowBox[{"pushforward", " ", "of", " ", 
+     RowBox[{"u", "^", "k"}], " ", "along", " ", 
+     RowBox[{"Delta", " ", ":", " ", 
+      RowBox[{"P", "^", "n"}]}]}], " ", "\[Rule]", " ", 
+    RowBox[{
+     RowBox[{"P", "^", "n"}], " ", "x", " ", 
+     RowBox[{"P", "^", "n"}]}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{"Clear", "[", "deltaStarAB", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"deltaStarAB", "[", 
+     RowBox[{"n_", ",", "0"}], "]"}], "  ", ":=", " ", 
+    RowBox[{
+     RowBox[{"deltaStarAB", "[", 
+      RowBox[{"n", ",", "0"}], "]"}], " ", "=", " ", 
+     RowBox[{"deltaClassAB", "[", "n", "]"}]}]}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"deltaStarAB", "[", 
+     RowBox[{"n_", ",", "k_"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"deltaStarAB", "[", 
+      RowBox[{"n", ",", "k"}], "]"}], "=", " ", 
+     RowBox[{"Module", "[", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{"prod", ",", "Y", ",", "preY", ",", "Delta", ",", "rest"}], 
+        "}"}], ",", "\[IndentingNewLine]", 
+       RowBox[{
+        RowBox[{"Y", " ", "=", " ", 
+         RowBox[{"Expand", "[", 
+          RowBox[{"Product", "[", 
+           RowBox[{
+            RowBox[{"v", "+", 
+             RowBox[{"wt", "[", 
+              RowBox[{"n", ",", "i"}], "]"}]}], ",", 
+            RowBox[{"{", 
+             RowBox[{"i", ",", "0", ",", 
+              RowBox[{"k", "-", "1"}]}], "}"}]}], "]"}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"preY", " ", "=", " ", 
+         RowBox[{"Y", "/.", 
+          RowBox[{"{", 
+           RowBox[{"v", "\[Rule]", "u"}], "}"}]}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"Delta", " ", "=", " ", 
+         RowBox[{"deltaClassAB", "[", "n", "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"prod", "=", 
+         RowBox[{"normalizeVarAB", "[", 
+          RowBox[{"n", ",", "v", ",", 
+           RowBox[{"Y", "*", "Delta"}]}], "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{"rest", "=", " ", 
+         RowBox[{"Sum", "[", 
+          RowBox[{
+           RowBox[{
+            RowBox[{"Coefficient", "[", 
+             RowBox[{"preY", ",", "u", ",", "i"}], "]"}], "*", 
+            RowBox[{"deltaStarAB", "[", 
+             RowBox[{"n", ",", "i"}], "]"}]}], ",", "  ", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "0", ",", 
+             RowBox[{"k", "-", "1"}]}], "}"}]}], " ", "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"Expand", "[", " ", 
+         RowBox[{"prod", " ", "-", " ", "rest"}], "]"}]}]}], 
+      "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", "\n", 
+   RowBox[{"Clear", "[", "deltaStarCh", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"deltaStarCh", "[", "n_", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"deltaStarCh", "[", "n", "]"}], " ", "=", "\[IndentingNewLine]", 
+     
+     RowBox[{"Expand", "[", 
+      RowBox[{
+       RowBox[{"SymmetricReduction", "[", 
+        RowBox[{
+         RowBox[{"deltaStarAB", "[", "n", "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"\[Alpha]", ",", "\[Beta]"}], "}"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"c", ",", "d"}], "}"}]}], "]"}], "[", 
+       RowBox[{"[", "1", "]"}], "]"}], "]"}]}]}], 
+   "\[IndentingNewLine]"}]}]], "Input",
+ CellChangeTimes->{{3.799905799813909*^9, 3.79990583862068*^9}, {
+  3.79991365241033*^9, 3.7999136977381983`*^9}}],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 2}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 4}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"===", " ", 
+    RowBox[{"pushforwards", " ", "for", " ", "polynomials", " ", 
+     RowBox[{"(", 
+      RowBox[{"not", " ", "just", " ", "single", " ", "monoms"}], ")"}]}], 
+    " ", "==="}], " ", "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"delta2", "[", 
+     RowBox[{"n_", ",", "uuu_", ",", 
+      RowBox[{"{", 
+       RowBox[{"vvv_", ",", "www_"}], "}"}], ",", "X0_"}], "]"}], ":=", 
+    RowBox[{"Module", "[", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{"X", "=", 
+        RowBox[{"Expand", "[", "X0", "]"}]}], "}"}], ",", 
+      "\[IndentingNewLine]", 
+      RowBox[{"Sum", "[", 
+       RowBox[{
+        RowBox[{
+         RowBox[{"Coefficient", "[", 
+          RowBox[{"X", ",", "uuu", ",", "i"}], "]"}], "*", 
+         RowBox[{"(", 
+          RowBox[{
+           RowBox[{"deltaStarAB", "[", 
+            RowBox[{"n", ",", "i"}], "]"}], "/.", 
+           RowBox[{"{", 
+            RowBox[{
+             RowBox[{"v", "\[Rule]", "vvv"}], ",", 
+             RowBox[{"w", "\[Rule]", "www"}]}], "}"}]}], ")"}]}], " ", ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}]}], 
+     "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"deltaMany", "[", 
+     RowBox[{"n_", ",", "uuu_", ",", "vvvs_", ",", "X_"}], "]"}], ":=", 
+    RowBox[{"Module", "[", 
+     RowBox[{
+      RowBox[{"{", "ttt", "}"}], ",", "\[IndentingNewLine]", 
+      RowBox[{"If", "[", 
+       RowBox[{
+        RowBox[{
+         RowBox[{"Length", "[", "vvvs", "]"}], "\[Equal]", "1"}], ",", 
+        RowBox[{"X", "/.", 
+         RowBox[{"{", 
+          RowBox[{"uuu", "\[Rule]", 
+           RowBox[{
+           "vvvs", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}]}], 
+          "}"}]}], ",", "\[IndentingNewLine]", 
+        RowBox[{"If", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"Length", "[", "vvvs", "]"}], "\[Equal]", "2"}], ",", 
+          RowBox[{"delta2", "[", 
+           RowBox[{"n", ",", "uuu", ",", "vvvs", ",", "X"}], "]"}], ",", 
+          "\[IndentingNewLine]", 
+          RowBox[{"deltaMany", "[", 
+           RowBox[{"n", ",", "ttt", ",", 
+            RowBox[{"Drop", "[", 
+             RowBox[{"vvvs", ",", "1"}], "]"}], ",", " ", 
+            RowBox[{"delta2", "[", 
+             RowBox[{"n", ",", "uuu", ",", 
+              RowBox[{"{", 
+               RowBox[{
+                RowBox[{
+                "vvvs", "\[LeftDoubleBracket]", "1", 
+                 "\[RightDoubleBracket]"}], ",", "ttt"}], "}"}], ",", "X"}], 
+             "]"}]}], "]"}]}], "]"}]}], "]"}]}], "]"}]}], 
+   "\[IndentingNewLine]", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"psi2", "[", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{"n1_", ",", "n2_"}], "}"}], ",", 
+      RowBox[{"{", 
+       RowBox[{"uuu_", ",", "vvv_"}], "}"}], ",", "www_", ",", "X0_"}], "]"}],
+     ":=", 
+    RowBox[{"Module", "[", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{"X", "=", 
+        RowBox[{"Expand", "[", "X0", "]"}]}], "}"}], ",", 
+      "\[IndentingNewLine]", 
+      RowBox[{"Sum", "[", 
+       RowBox[{
+        RowBox[{
+         RowBox[{"Coefficient", "[", 
+          RowBox[{
+           RowBox[{"Coefficient", "[", 
+            RowBox[{"X", ",", "uuu", ",", "i"}], "]"}], ",", "vvv", ",", 
+           "j"}], "]"}], "*", 
+         RowBox[{"(", 
+          RowBox[{
+           RowBox[{"psiStarAB", "[", 
+            RowBox[{"n1", ",", "n2", ",", "i", ",", "j"}], "]"}], "/.", 
+           RowBox[{"{", 
+            RowBox[{"w", "\[Rule]", "www"}], "}"}]}], ")"}]}], " ", ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "0", ",", "n1"}], "}"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"j", ",", "0", ",", "n2"}], "}"}]}], "]"}]}], 
+     "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"psiMany", "[", 
+     RowBox[{"ns_", ",", "uuus_", ",", "www_", ",", "X_"}], "]"}], ":=", 
+    RowBox[{"Module", "[", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{"ttt", ",", "vvvs", ",", "ms"}], "}"}], ",", 
+      "\[IndentingNewLine]", 
+      RowBox[{"If", "[", 
+       RowBox[{
+        RowBox[{
+         RowBox[{"Length", "[", "uuus", "]"}], "\[Equal]", "1"}], ",", 
+        RowBox[{"X", "/.", 
+         RowBox[{"{", 
+          RowBox[{
+           RowBox[{
+           "uuus", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}], 
+           "\[Rule]", "www"}], "}"}]}], ",", "\[IndentingNewLine]", 
+        RowBox[{"If", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"Length", "[", "uuus", "]"}], "\[Equal]", "2"}], ",", 
+          RowBox[{"psi2", "[", 
+           RowBox[{"ns", ",", "uuus", ",", "www", ",", "X"}], "]"}], ",", 
+          "\[IndentingNewLine]", 
+          RowBox[{
+           RowBox[{"ms", "=", 
+            RowBox[{"Join", "[", 
+             RowBox[{
+              RowBox[{"{", 
+               RowBox[{
+                RowBox[{
+                "ns", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}], 
+                "+", 
+                RowBox[{
+                "ns", "\[LeftDoubleBracket]", "2", 
+                 "\[RightDoubleBracket]"}]}], "}"}], ",", 
+              RowBox[{"Drop", "[", 
+               RowBox[{"ns", ",", "2"}], "]"}]}], "]"}]}], ";", 
+           "\[IndentingNewLine]", 
+           RowBox[{"vvvs", "=", 
+            RowBox[{"Join", "[", 
+             RowBox[{
+              RowBox[{"{", "ttt", "}"}], ",", 
+              RowBox[{"Drop", "[", 
+               RowBox[{"uuus", ",", "2"}], "]"}]}], "]"}]}], ";", 
+           "\[IndentingNewLine]", 
+           RowBox[{"psiMany", "[", 
+            RowBox[{"ms", ",", "vvvs", ",", "www", ",", " ", 
+             RowBox[{"psi2", "[", 
+              RowBox[{
+               RowBox[{"Take", "[", 
+                RowBox[{"ns", ",", "2"}], "]"}], ",", 
+               RowBox[{"Take", "[", 
+                RowBox[{"uuus", ",", "2"}], "]"}], ",", "ttt", ",", "X"}], 
+              "]"}]}], "]"}]}]}], "]"}]}], "]"}]}], "]"}]}]}]}]], "Input",
+ CellChangeTimes->{{3.799667476439917*^9, 3.7996677149825773`*^9}, {
+  3.7996677601261387`*^9, 3.799667786948341*^9}, {3.79966786245846*^9, 
+  3.799667910243636*^9}, {3.801137629197691*^9, 3.801137675043544*^9}}],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 0.5}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 3}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"===", " ", 
+    RowBox[{
+    "pushforward", " ", "along", " ", "the", " ", "power", " ", "map"}], " ", 
+    "==="}], " ", "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "compute", " ", "the", " ", "pushforward", " ", "by", " ", "composing", 
+    " ", "the", " ", "diagonal", " ", "with", " ", "the", " ", "merging", " ",
+     "map"}], " ", "*)"}], "\n", 
+  RowBox[{
+   RowBox[{"Clear", "[", "slowOmegaAB", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"slowOmegaAB", "[", 
+     RowBox[{"n_", ",", "d_", ",", "k_"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"slowOmegaAB", "[", 
+      RowBox[{"n", ",", "d", ",", "k"}], "]"}], "=", 
+     RowBox[{"Module", "[", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{
+         RowBox[{"vars", "=", 
+          RowBox[{"Table", "[", 
+           RowBox[{
+            RowBox[{"Subscript", "[", 
+             RowBox[{"ttt", ",", "i"}], "]"}], ",", 
+            RowBox[{"{", 
+             RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ",", 
+         "\[IndentingNewLine]", 
+         RowBox[{"dims", "=", 
+          RowBox[{"Table", "[", 
+           RowBox[{"n", ",", 
+            RowBox[{"{", 
+             RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}]}], "}"}], 
+       ",", "\[IndentingNewLine]", 
+       RowBox[{"Factor", "[", 
+        RowBox[{"psiMany", "[", 
+         RowBox[{"dims", ",", "vars", ",", "u", ",", 
+          RowBox[{"deltaMany", "[", 
+           RowBox[{"n", ",", "u", ",", "vars", ",", 
+            RowBox[{"u", "^", "k"}]}], "]"}]}], "]"}], "]"}]}], 
+      "\[IndentingNewLine]", "]"}]}]}], "\n", "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{
+     RowBox[{"d", "-", 
+      RowBox[{"th", " ", "power", " ", "of", " ", 
+       RowBox[{"u", "^", 
+        RowBox[{"k", " ", ":", " ", 
+         RowBox[{"P", "^", "n"}]}]}]}]}], " ", "\[Rule]", " ", 
+     RowBox[{"P", "^", 
+      RowBox[{"(", 
+       RowBox[{"n", "*", "d"}], ")"}]}]}], " ", "*)"}], "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{"NOTE", ":", " ", 
+     RowBox[{
+      RowBox[{
+      "this", " ", "formula", " ", "is", " ", "valid", " ", "for", " ", "k"}],
+       ">", 
+      RowBox[{
+       RowBox[{"n", " ", 
+        RowBox[{"too", "!"}], " ", "\[IndentingNewLine]", "you", " ", "can", 
+        " ", "experimentally", " ", "check", " ", "this", " ", 
+        "\[IndentingNewLine]", "by", " ", "pre"}], "-", 
+       RowBox[{"normalizing", " ", "and", " ", "post"}], "-", 
+       "normalizing"}]}]}], " ", "*)"}], "\[IndentingNewLine]", 
+   RowBox[{"Clear", "[", "omegaAB", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"omegaAB", "[", 
+     RowBox[{"n_", ",", "d_", ",", "k_"}], "]"}], ":=", "\[IndentingNewLine]", 
+    RowBox[{"Module", "[", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{"idxs", "=", " ", 
+        RowBox[{"Select", "[", 
+         RowBox[{
+          RowBox[{"Table", "[", 
+           RowBox[{"i", ",", 
+            RowBox[{"{", 
+             RowBox[{"i", ",", "0", ",", 
+              RowBox[{"n", "*", "d"}]}], "}"}]}], "]"}], ",", 
+          RowBox[{
+           RowBox[{"Not", "[", 
+            RowBox[{"Divisible", "[", 
+             RowBox[{"#", ",", "d"}], "]"}], "]"}], "&"}]}], "]"}]}], "}"}], 
+      "\[IndentingNewLine]", ",", 
+      RowBox[{
+       RowBox[{"u", "^", "k"}], "*", 
+       RowBox[{"d", "^", 
+        RowBox[{"(", 
+         RowBox[{"n", "-", "k"}], ")"}]}], "*", 
+       RowBox[{"Product", "[", 
+        RowBox[{
+         RowBox[{"u", "+", 
+          RowBox[{
+           RowBox[{"(", 
+            RowBox[{
+             RowBox[{"n", "*", "d"}], "-", "i"}], ")"}], "*", "\[Alpha]"}], 
+          "+", 
+          RowBox[{"i", "*", "\[Beta]"}]}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "idxs"}], "}"}]}], "]"}]}]}], 
+     "\[IndentingNewLine]", "]"}]}], "\n", "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{
+     RowBox[{
+      RowBox[{"pushforward", " ", "along", " ", "d"}], "-", 
+      RowBox[{"th", " ", 
+       RowBox[{"power", " ", ":", " ", 
+        RowBox[{"P", "^", "n"}]}]}]}], " ", "\[Rule]", " ", 
+     RowBox[{"P", "^", 
+      RowBox[{"(", 
+       RowBox[{"n", "*", "d"}], ")"}]}]}], " ", "*)"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"omega1", "[", 
+     RowBox[{"n_", ",", "d_", ",", "uuu_", ",", "www_", ",", "X0_"}], "]"}], ":=", 
+    RowBox[{"Module", "[", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{"X", "=", 
+        RowBox[{"Expand", "[", "X0", "]"}]}], "}"}], ",", 
+      "\[IndentingNewLine]", 
+      RowBox[{"Sum", "[", 
+       RowBox[{
+        RowBox[{
+         RowBox[{"Coefficient", "[", 
+          RowBox[{"X", ",", "uuu", ",", "i"}], "]"}], "*", 
+         RowBox[{"(", 
+          RowBox[{
+           RowBox[{"omegaAB", "[", 
+            RowBox[{"n", ",", "d", ",", "i"}], "]"}], "/.", 
+           RowBox[{"{", 
+            RowBox[{"u", "\[Rule]", "www"}], "}"}]}], ")"}]}], " ", ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}]}], 
+     "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", "\n", 
+   RowBox[{"(*", " ", 
+    RowBox[{
+     RowBox[{
+      RowBox[{"P", "^", "n1"}], " ", "x", " ", 
+      RowBox[{"P", "^", "n2"}], " ", "x", " ", 
+      RowBox[{"P", "^", "n3"}]}], " ", "\[Rule]", " ", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"P", "^", 
+        RowBox[{"(", 
+         RowBox[{"d1", "*", "n1"}], ")"}]}], " ", "x", " ", 
+       RowBox[{"P", "^", 
+        RowBox[{"(", 
+         RowBox[{"d2", "*", "n2"}], ")"}]}], " ", "x", " ", 
+       RowBox[{"P", "^", 
+        RowBox[{"(", 
+         RowBox[{"d3", "*", "n3"}], ")"}]}]}], " ", "\[Rule]", " ", 
+      RowBox[{"P", "^", 
+       RowBox[{"(", 
+        RowBox[{
+         RowBox[{"d1", "*", "n1"}], " ", "+", " ", 
+         RowBox[{"d2", "*", "n2"}], " ", "+", " ", 
+         RowBox[{"d3", "*", "n3"}]}], " "}]}]}]}], "*)"}], " ", 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"omegaLam", "[", 
+     RowBox[{"ns_", ",", "ds_", ",", "uuus_", ",", "www_", ",", "X0_"}], 
+     "]"}], ":=", 
+    RowBox[{"Module", "[", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"X", "=", 
+         RowBox[{"Expand", "[", "X0", "]"}]}], ",", "\[IndentingNewLine]", 
+        RowBox[{"m", " ", "=", " ", 
+         RowBox[{"Length", "[", "ns", "]"}]}], ",", "\[IndentingNewLine]", 
+        "vars", ",", "Y", ",", "nds", ",", "ttt", ",", "i"}], "}"}], ",", 
+      "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"vars", "=", 
+        RowBox[{"Table", "[", 
+         RowBox[{
+          RowBox[{"Subscript", "[", 
+           RowBox[{"ttt", ",", "i"}], "]"}], ",", 
+          RowBox[{"{", 
+           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"nds", "=", 
+        RowBox[{"Table", "[", " ", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"ns", "[", 
+            RowBox[{"[", "i", "]"}], "]"}], "*", 
+           RowBox[{"ds", "[", 
+            RowBox[{"[", "i", "]"}], "]"}]}], ",", " ", 
+          RowBox[{"{", 
+           RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", 
+       "\[IndentingNewLine]", 
+       RowBox[{"Y", "=", "X"}], ";", "\[IndentingNewLine]", 
+       RowBox[{"For", "[", 
+        RowBox[{
+         RowBox[{"i", "=", "1"}], ",", 
+         RowBox[{"i", "\[LessEqual]", "m"}], ",", 
+         RowBox[{"i", "++"}], ",", 
+         RowBox[{"Y", "=", 
+          RowBox[{"omega1", "[", 
+           RowBox[{
+            RowBox[{"ns", "[", 
+             RowBox[{"[", "i", "]"}], "]"}], ",", 
+            RowBox[{"ds", "[", 
+             RowBox[{"[", "i", "]"}], "]"}], ",", 
+            RowBox[{"uuus", "[", 
+             RowBox[{"[", "i", "]"}], "]"}], ",", 
+            RowBox[{"vars", "[", 
+             RowBox[{"[", "i", "]"}], "]"}], ",", "Y"}], "]"}]}]}], "]"}], 
+       ";", "\[IndentingNewLine]", 
+       RowBox[{"psiMany", "[", 
+        RowBox[{"nds", ",", "vars", ",", "www", ",", "Y"}], "]"}]}]}], 
+     "\[IndentingNewLine]", "]"}]}]}]}]], "Input",
+ CellChangeTimes->{{3.7999058649845*^9, 3.7999058698453217`*^9}, {
+  3.799913868197979*^9, 3.7999139371723003`*^9}, {3.8008792882621317`*^9, 
+  3.8008792885238028`*^9}, {3.80113759876646*^9, 3.801137620241535*^9}}],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 2}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 4}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"===", " ", 
+    RowBox[{"EQUIVARIANT", " ", "CSM", " ", "CLASS"}], " ", "==="}], " ", 
+   "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"uus", "[", "n_", "]"}], ":=", 
+    RowBox[{"Table", "[", 
+     RowBox[{
+      RowBox[{"uu", "[", "i", "]"}], ",", 
+      RowBox[{"{", 
+       RowBox[{"i", ",", "1", ",", "n"}], "}"}]}], "]"}]}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"vvs", "[", "n_", "]"}], ":=", 
+    RowBox[{"Table", "[", 
+     RowBox[{
+      RowBox[{"vv", "[", "i", "]"}], ",", 
+      RowBox[{"{", 
+       RowBox[{"i", ",", "1", ",", "n"}], "}"}]}], "]"}]}], 
+   "\[IndentingNewLine]", "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{"total", " ", "chern", " ", "class", " ", "of", " ", 
+     RowBox[{"P", "^", "n"}]}], " ", "*)"}], "\[IndentingNewLine]", 
+   RowBox[{"Clear", "[", "chernPnAB", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"chernPnAB", "[", "n_", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"chernPnAB", "[", "n", "]"}], "=", 
+     RowBox[{"normalizeVarAB", "[", 
+      RowBox[{"n", ",", "u", ",", "\[IndentingNewLine]", 
+       RowBox[{"Expand", "[", 
+        RowBox[{"Product", "[", 
+         RowBox[{
+          RowBox[{"1", "+", "u", "+", 
+           RowBox[{"wt", "[", 
+            RowBox[{"n", ",", "i"}], "]"}]}], ",", 
+          RowBox[{"{", 
+           RowBox[{"i", ",", "0", ",", "n"}], "}"}]}], "]"}], "]"}]}], 
+      "]"}]}]}], "\[IndentingNewLine]", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"chernPnABVar", "[", 
+     RowBox[{"n_", ",", "uuu_"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"chernPnAB", "[", "n", "]"}], "/.", 
+     RowBox[{"{", 
+      RowBox[{"u", "\[Rule]", "uuu"}], "}"}]}]}]}]}]], "Input",
+ CellChangeTimes->{{3.7999058758298073`*^9, 3.799905884427569*^9}, {
+  3.801137947291946*^9, 3.801137966294516*^9}}],
+
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{
+   RowBox[{"EmptyPartQ", "[", "part_", "]"}], ":=", 
+   RowBox[{
+    RowBox[{"Length", "[", "part", "]"}], "\[Equal]", "0"}]}], 
+  "\n"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"DualPart", "[", 
+   RowBox[{"{", "}"}], "]"}], ":=", 
+  RowBox[{"{", "}"}]}], "\n", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"DualPart", "[", "lam_", "]"}], ":=", 
+   RowBox[{"With", "[", 
+    RowBox[{
+     RowBox[{"{", 
+      RowBox[{"m", "=", 
+       RowBox[{"lam", "[", 
+        RowBox[{"[", "1", "]"}], "]"}]}], "}"}], ",", 
+     RowBox[{"Table", "[", 
+      RowBox[{
+       RowBox[{"Length", "[", 
+        RowBox[{"Select", "[", 
+         RowBox[{"lam", ",", 
+          RowBox[{
+           RowBox[{"#", "\[GreaterEqual]", "i"}], "&"}]}], "]"}], "]"}], ",", 
+       
+       RowBox[{"{", 
+        RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], "]"}]}], 
+  "\[IndentingNewLine]", " "}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"toExpoForm", "[", 
+    RowBox[{"{", "}"}], "]"}], ":=", 
+   RowBox[{"{", "}"}]}], " "}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"toExpoForm", "[", "part_", "]"}], ":=", 
+   RowBox[{"Module", "[", 
+    RowBox[{
+     RowBox[{"{", 
+      RowBox[{"k", "=", 
+       RowBox[{"Max", "[", "part", "]"}]}], "}"}], ",", 
+     RowBox[{"Table", "[", 
+      RowBox[{
+       RowBox[{"Length", "[", 
+        RowBox[{"Select", "[", 
+         RowBox[{"part", ",", 
+          RowBox[{
+           RowBox[{"#", "\[Equal]", "j"}], "&"}]}], "]"}], "]"}], ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "k"}], "}"}]}], "]"}]}], "]"}]}], 
+  "\[IndentingNewLine]"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"posVectorQ", "[", "as_", "]"}], ":=", 
+   RowBox[{
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"#", "\[GreaterEqual]", "0"}], "&"}], ",", "as"}], "]"}], "/.", 
+    RowBox[{"{", 
+     RowBox[{"List", "\[Rule]", "And"}], "}"}]}]}], 
+  ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"kdeTriples", "[", 
+   RowBox[{"p_", ",", "ns_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"{", 
+     RowBox[{
+      RowBox[{"m", " ", "=", " ", 
+       RowBox[{"Length", "[", "ns", "]"}]}], ",", "\[IndentingNewLine]", 
+      "posQ", ",", "oneK", ",", "A"}], "}"}], ",", "\[IndentingNewLine]", 
+    RowBox[{
+     RowBox[{
+      RowBox[{"oneK", "[", "k_", "]"}], ":=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"{", 
+         RowBox[{"k", ",", 
+          RowBox[{"ns", "-", "es"}], ",", "es"}], "}"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"es", ",", 
+          RowBox[{"Combinatorica`Compositions", "[", 
+           RowBox[{
+            RowBox[{"p", "-", "k"}], ",", "m"}], "]"}]}], "}"}]}], "]"}]}], 
+     ";", "\[IndentingNewLine]", 
+     RowBox[{"A", "=", 
+      RowBox[{"Table", " ", "[", 
+       RowBox[{
+        RowBox[{"oneK", "[", "k", "]"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"k", ",", "0", ",", 
+          RowBox[{"p", "-", "1"}]}], "}"}]}], "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"A", "=", 
+      RowBox[{"Select", "[", 
+       RowBox[{
+        RowBox[{"Flatten", "[", 
+         RowBox[{"A", ",", "1"}], "]"}], ",", 
+        RowBox[{
+         RowBox[{"posVectorQ", "[", 
+          RowBox[{"Snd", "[", "#", "]"}], "]"}], "&"}]}], "]"}]}], ";", 
+     "\[IndentingNewLine]", "A"}]}], "]"}]}], "\[IndentingNewLine]"}], "Input",\
+
+ CellChangeTimes->{{3.799903570801889*^9, 3.799903621715088*^9}, {
+  3.801138022561639*^9, 3.80113802310922*^9}}],
+
+Cell[BoxData[
+ RowBox[{"\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{"Clear", "[", 
+    RowBox[{
+    "csmXLam", ",", "csmDisj1", ",", "csmDisj", ",", "csmDisjSorted"}], "]"}],
+    "\[IndentingNewLine]", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"csmXLam", "[", 
+     RowBox[{"{", "}"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"csmXLam", "[", 
+      RowBox[{"{", "}"}], "]"}], "=", "1"}]}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"csmXLam", "[", 
+     RowBox[{"{", "1", "}"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"csmXLam", "[", 
+      RowBox[{"{", "1", "}"}], "]"}], "=", 
+     RowBox[{"chernPnAB", "[", "1", "]"}]}]}], "\[IndentingNewLine]", 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"csmDisj1", "[", "0", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"csmDisj1", "[", "0", "]"}], "=", "1"}]}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"csmDisj1", "[", "1", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"csmDisj1", "[", "1", "]"}], "=", 
+     RowBox[{"chernPnAB", "[", "1", "]"}]}]}], "\[IndentingNewLine]", 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"csmDisj", "[", 
+     RowBox[{"{", "}"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"csmDisj", "[", 
+      RowBox[{"{", "}"}], "]"}], "=", "1"}]}], "\[IndentingNewLine]", 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"csmDisjSorted", "[", 
+     RowBox[{"{", "}"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"csmDisjSorted", "[", 
+      RowBox[{"{", "}"}], "]"}], "=", "1"}]}], "\[IndentingNewLine]", 
+   "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{"equiv", " ", "CSM", " ", "of", " ", "D", 
+     RowBox[{"(", "n", ")"}]}], " ", "*)"}], "\n", 
+   RowBox[{
+    RowBox[{"csmDisj1", "[", "n_", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"csmDisj1", "[", "n", "]"}], "=", 
+     RowBox[{"Module", "[", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{"parts", "=", 
+         RowBox[{"Select", "[", 
+          RowBox[{
+           RowBox[{"Combinatorica`Partitions", "[", "n", "]"}], ",", 
+           RowBox[{
+            RowBox[{
+             RowBox[{"Length", "[", "#", "]"}], "<", "n"}], "&"}]}], "]"}]}], 
+        "}"}], ",", "\[IndentingNewLine]", 
+       RowBox[{"Expand", "[", 
+        RowBox[{
+         RowBox[{"chernPnAB", "[", "n", "]"}], "-", 
+         RowBox[{"Sum", "[", 
+          RowBox[{
+           RowBox[{"csmXLam", "[", "p", "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"p", ",", "parts"}], "}"}]}], "]"}]}], "]"}]}], 
+      "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", "\n", 
+   RowBox[{"(*", " ", 
+    RowBox[{"equiv", " ", "CSM", " ", "of", " ", "X_lambda"}], " ", "*)"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"csmXLam", "[", "lambda_", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"csmXLam", "[", "lambda", "]"}], "=", 
+     RowBox[{"Module", "[", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{
+         RowBox[{"es", " ", "=", " ", 
+          RowBox[{"toExpoForm", "[", "lambda", "]"}]}], ",", "m", ",", "m1", 
+         ",", "ns", ",", "pairs", ",", "X"}], "}"}], ",", 
+       "\[IndentingNewLine]", 
+       RowBox[{
+        RowBox[{"m", "=", 
+         RowBox[{"Length", "[", "es", "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{"ns", " ", "=", " ", 
+         RowBox[{"Range", "[", "m", "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{"pairs", " ", "=", " ", 
+         RowBox[{"Zip", "[", 
+          RowBox[{"ns", ",", "es"}], "]"}]}], ";", "   ", 
+        RowBox[{"(*", " ", 
+         RowBox[{"i", "^", "e_"}], " ", "*)"}], "\[IndentingNewLine]", 
+        RowBox[{"pairs", " ", "=", " ", 
+         RowBox[{"Select", "[", 
+          RowBox[{"pairs", ",", 
+           RowBox[{
+            RowBox[{
+             RowBox[{"Snd", "[", "#", "]"}], ">", "0"}], "&"}]}], "]"}]}], 
+        ";", " ", 
+        RowBox[{"(*", " ", 
+         RowBox[{"!!", "!"}], " ", "*)"}], "\[IndentingNewLine]", 
+        RowBox[{"m1", " ", "=", " ", 
+         RowBox[{"Length", "[", "pairs", "]"}]}], ";", "\[IndentingNewLine]", 
+        
+        RowBox[{"ns", " ", "=", 
+         RowBox[{"Map", "[", 
+          RowBox[{"Fst", ",", "pairs"}], "]"}]}], ";", "\[IndentingNewLine]", 
+        
+        RowBox[{"es", " ", "=", 
+         RowBox[{"Map", "[", 
+          RowBox[{"Snd", ",", "pairs"}], "]"}]}], ";", "\[IndentingNewLine]", 
+        
+        RowBox[{"X", "=", 
+         RowBox[{"csmDisj", "[", "es", "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{"(*", " ", 
+         RowBox[{
+          RowBox[{"Print", "[", 
+           RowBox[{"\"\<xlam1 - \>\"", ",", "pairs"}], "]"}], ";", 
+          "\[IndentingNewLine]", 
+          RowBox[{"Print", "[", 
+           RowBox[{
+           "\"\<xlam2 - \>\"", ",", "es", ",", "\"\< | \>\"", ",", "ns", ",", 
+            "\"\< | \>\"", ",", 
+            RowBox[{"uus", "[", "m1", "]"}], ",", "\"\< | \>\"", ",", "X"}], 
+           "]"}], ";"}], " ", "*)"}], "\[IndentingNewLine]", 
+        RowBox[{"Expand", "[", 
+         RowBox[{"omegaLam", "[", 
+          RowBox[{"es", ",", "ns", ",", 
+           RowBox[{"uus", "[", "m1", "]"}], ",", "u", ",", "X"}], "]"}], 
+         "]"}]}]}], "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", 
+   "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{"equiv", " ", "CSM", " ", "of", " ", "D", 
+     RowBox[{"(", 
+      RowBox[{"d1", ",", "d2", ",", "..."}], ")"}]}], " ", "*)"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"csmDisj", "[", 
+     RowBox[{"{", "n_", "}"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"csmDisj", "[", 
+      RowBox[{"{", "n", "}"}], "]"}], " ", "=", " ", 
+     RowBox[{
+      RowBox[{"csmDisj1", "[", "n", "]"}], "/.", 
+      RowBox[{"{", 
+       RowBox[{"u", "\[Rule]", 
+        RowBox[{"uu", "[", "1", "]"}]}], "}"}]}]}]}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"csmDisj", "[", "ns0_", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"csmDisj", "[", "ns0", "]"}], "=", 
+     RowBox[{"Module", "[", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{
+         RowBox[{"m", "=", 
+          RowBox[{"Length", "[", "ns0", "]"}]}], ",", "\[IndentingNewLine]", 
+         "nis0", ",", "nis1", ",", "ns1", ",", "idxs", ",", "X", ",", "ttt"}],
+         "}"}], ",", "\[IndentingNewLine]", 
+       RowBox[{
+        RowBox[{"nis0", " ", "=", 
+         RowBox[{"Zip", "[", 
+          RowBox[{"ns0", ",", 
+           RowBox[{"Range", "[", "m", "]"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"nis1", "=", 
+         RowBox[{"SortBy", "[", 
+          RowBox[{"nis0", ",", 
+           RowBox[{
+            RowBox[{"-", 
+             RowBox[{"Fst", "[", "#", "]"}]}], "&"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"idxs", "=", 
+         RowBox[{"Map", "[", 
+          RowBox[{"Snd", ",", "nis1"}], "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{"ns1", " ", "=", 
+         RowBox[{"Select", "[", 
+          RowBox[{
+           RowBox[{"Map", "[", 
+            RowBox[{"Fst", ",", "nis1"}], "]"}], ",", 
+           RowBox[{
+            RowBox[{"#", ">", "0"}], "&"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"(*", " ", 
+         RowBox[{
+          RowBox[{"Print", "[", 
+           RowBox[{
+           "\"\<nis1 - \>\"", ",", "nis0", ",", "\"\< | \>\"", ",", "nis1"}], 
+           "]"}], ";", "\[IndentingNewLine]", 
+          RowBox[{"Print", "[", 
+           RowBox[{"\"\<nis2 - \>\"", ",", "ns1"}], "]"}], ";"}], " ", "*)"}],
+         "\[IndentingNewLine]", 
+        RowBox[{"X", "=", 
+         RowBox[{"csmDisjSorted", "[", "ns1", "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"X", "=", 
+         RowBox[{"X", "/.", 
+          RowBox[{"Table", "[", 
+           RowBox[{
+            RowBox[{
+             RowBox[{"uu", "[", "i", "]"}], "\[Rule]", 
+             RowBox[{"Subscript", "[", 
+              RowBox[{"ttt", ",", "i"}], "]"}]}], ",", 
+            RowBox[{"{", 
+             RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"X", "/.", 
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{
+            RowBox[{"Subscript", "[", 
+             RowBox[{"ttt", ",", "i"}], "]"}], "\[Rule]", 
+            RowBox[{"uu", "[", 
+             RowBox[{
+             "idxs", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}], 
+             "]"}]}], ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}]}]}], 
+      "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", 
+   "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{
+    "a", " ", "single", " ", "term", " ", "corresponding", " ", "to", " ", 
+     "a", " ", "triple", " ", 
+     RowBox[{"(", 
+      RowBox[{"k", ",", "ds", ",", "es"}], ")"}]}], " ", "*)"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{"Clear", "[", "singleKDE", "]"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"singleKDE", "[", 
+     RowBox[{"{", 
+      RowBox[{"k_", ",", "ds_", ",", "es_"}], "}"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"singleKDE", "[", 
+      RowBox[{"{", 
+       RowBox[{"k", ",", "ds", ",", "es"}], "}"}], "]"}], "=", 
+     RowBox[{"Module", "[", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{
+        "A", ",", "B", ",", "\[IndentingNewLine]", "m", ",", "vars", ",", 
+         "dims", ",", "\[IndentingNewLine]", "pp", ",", "qq", ",", "rr", ",", 
+         "ss", ",", "\[IndentingNewLine]", "pps", ",", "qqs", ",", "rrs", ",",
+          "sss"}], "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", 
+       RowBox[{
+        RowBox[{"m", "=", 
+         RowBox[{"Length", "[", "ds", "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{
+         RowBox[{"pp", "[", "i_", "]"}], ":=", 
+         RowBox[{"Subscript", "[", 
+          RowBox[{"pp$p", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{
+         RowBox[{"qq", "[", "i_", "]"}], ":=", 
+         RowBox[{"Subscript", "[", 
+          RowBox[{"qq$q", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{
+         RowBox[{"rr", "[", "i_", "]"}], ":=", 
+         RowBox[{"Subscript", "[", 
+          RowBox[{"rr$r", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{
+         RowBox[{"ss", "[", "i_", "]"}], ":=", 
+         RowBox[{"Subscript", "[", 
+          RowBox[{"ss$s", ",", "i"}], "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{"pps", "=", 
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"pp", "[", "i", "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"qqs", "=", 
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"qq", "[", "i", "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"rrs", "=", 
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"rr", "[", "i", "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"sss", "=", 
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"ss", "[", "i", "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "1", ",", "m"}], "}"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"vars", "=", 
+         RowBox[{"Join", "[", 
+          RowBox[{
+           RowBox[{"{", "zzz", "}"}], ",", "pps", ",", "qqs"}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"dims", "=", 
+         RowBox[{"Join", "[", 
+          RowBox[{
+           RowBox[{"{", "k", "}"}], ",", "ds", ",", "es"}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"A", "=", 
+         RowBox[{
+          RowBox[{"csmDisj", "[", "dims", "]"}], "/.", 
+          RowBox[{"Table", "[", 
+           RowBox[{
+            RowBox[{
+             RowBox[{"uu", "[", "i", "]"}], "\[Rule]", 
+             RowBox[{
+             "vars", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}]}],
+             ",", 
+            RowBox[{"{", 
+             RowBox[{"i", ",", "1", ",", 
+              RowBox[{
+               RowBox[{"2", "m"}], "+", "1"}]}], "}"}]}], "]"}]}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"B", "=", "A"}], ";", "\[IndentingNewLine]", 
+        RowBox[{"For", "[", 
+         RowBox[{
+          RowBox[{"i", "=", "1"}], ",", 
+          RowBox[{"i", "\[LessEqual]", "m"}], ",", 
+          RowBox[{"i", "++"}], ",", 
+          RowBox[{"B", "=", 
+           RowBox[{"Expand", "[", 
+            RowBox[{"delta2", "[", 
+             RowBox[{
+              RowBox[{
+              "es", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}], 
+              ",", 
+              RowBox[{"qq", "[", "i", "]"}], ",", 
+              RowBox[{"{", 
+               RowBox[{
+                RowBox[{"rr", "[", "i", "]"}], ",", 
+                RowBox[{"ss", "[", "i", "]"}]}], "}"}], ",", "B"}], "]"}], 
+            "]"}]}]}], "]"}], ";", "\[IndentingNewLine]", 
+        RowBox[{"For", "[", 
+         RowBox[{
+          RowBox[{"i", "=", "1"}], ",", 
+          RowBox[{"i", "\[LessEqual]", "m"}], ",", 
+          RowBox[{"i", "++"}], ",", 
+          RowBox[{"B", "=", 
+           RowBox[{"Expand", "[", 
+            RowBox[{"psi2", "[", 
+             RowBox[{
+              RowBox[{"{", 
+               RowBox[{
+                RowBox[{
+                "ds", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}], 
+                ",", 
+                RowBox[{
+                "es", "\[LeftDoubleBracket]", "i", 
+                 "\[RightDoubleBracket]"}]}], "}"}], ",", 
+              RowBox[{"{", 
+               RowBox[{
+                RowBox[{"pp", "[", "i", "]"}], ",", 
+                RowBox[{"ss", "[", "i", "]"}]}], "}"}], ",", 
+              RowBox[{"uu", "[", "i", "]"}], ",", "B"}], "]"}], "]"}]}]}], 
+         "]"}], ";", "\[IndentingNewLine]", 
+        RowBox[{"B", "=", 
+         RowBox[{"psiMany", "[", 
+          RowBox[{
+           RowBox[{"Join", "[", 
+            RowBox[{
+             RowBox[{"{", "k", "}"}], ",", "es"}], "]"}], ",", 
+           RowBox[{"Join", "[", 
+            RowBox[{
+             RowBox[{"{", "zzz", "}"}], ",", "rrs"}], "]"}], ",", "z", ",", 
+           "B"}], "]"}]}], ";", "\[IndentingNewLine]", "B"}]}], 
+      "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]", 
+   "\[IndentingNewLine]", 
+   RowBox[{"(*", " ", 
+    RowBox[{
+     RowBox[{"equiv", " ", "CSM", " ", "of", " ", "D", 
+      RowBox[{"(", 
+       RowBox[{"d1", ",", "d2", ",", "..."}], ")"}]}], ",", " ", 
+     RowBox[{
+      RowBox[{
+       RowBox[{
+        RowBox[{"but", " ", "we", " ", "require", " ", "d1"}], 
+        "\[GreaterEqual]", "d2", "\[GreaterEqual]", "d3", "\[GreaterEqual]"}],
+        "..."}], "\[GreaterEqual]", "dn", ">", "0"}]}], " ", "*)"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"csmDisjSorted", "[", 
+     RowBox[{"{", "n_", "}"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"csmDisjSorted", "[", 
+      RowBox[{"{", "n", "}"}], "]"}], "=", 
+     RowBox[{
+      RowBox[{"csmDisj1", "[", "n", "]"}], "/.", 
+      RowBox[{"{", 
+       RowBox[{"u", "\[Rule]", 
+        RowBox[{"uu", "[", "1", "]"}]}], "}"}]}]}]}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"csmDisjSorted", "[", "pns_", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"csmDisjSorted", "[", "pns", "]"}], "=", 
+     RowBox[{"Module", "[", "\[IndentingNewLine]", 
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{
+         RowBox[{"p", "=", 
+          RowBox[{
+          "pns", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}]}], 
+         ",", "\[IndentingNewLine]", 
+         RowBox[{"ns", "=", 
+          RowBox[{"Drop", "[", 
+           RowBox[{"pns", ",", "1"}], "]"}]}], ",", "\[IndentingNewLine]", 
+         "A", ",", "B", ",", "rest", ",", "\[IndentingNewLine]", "KDE"}], 
+        "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", 
+       RowBox[{
+        RowBox[{"KDE", "=", 
+         RowBox[{"kdeTriples", "[", 
+          RowBox[{"p", ",", "ns"}], "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{"(*", " ", 
+         RowBox[{
+          RowBox[{"Print", "[", 
+           RowBox[{
+           "\"\<sorted1 - \>\"", ",", "p", ",", "\"\< | \>\"", ",", "ns"}], 
+           "]"}], ";", "\[IndentingNewLine]", 
+          RowBox[{"Print", "[", 
+           RowBox[{"\"\<sorted2 - \>\"", ",", "KDE"}], "]"}], ";"}], " ", 
+         "*)"}], "\[IndentingNewLine]", 
+        RowBox[{"A", "=", 
+         RowBox[{
+          RowBox[{"(", 
+           RowBox[{
+            RowBox[{"csmDisj1", "[", "p", "]"}], "/.", 
+            RowBox[{"{", 
+             RowBox[{"u", "\[Rule]", "z"}], "}"}]}], ")"}], "*", 
+          RowBox[{"csmDisj", "[", "ns", "]"}]}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{"rest", "=", 
+         RowBox[{"Sum", "[", 
+          RowBox[{
+           RowBox[{"singleKDE", "[", "kde", "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"kde", ",", "KDE"}], "}"}]}], "]"}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"B", " ", "=", " ", 
+         RowBox[{"Expand", "[", 
+          RowBox[{"A", "-", "rest"}], "]"}]}], ";", "\[IndentingNewLine]", 
+        RowBox[{"B", " ", "=", 
+         RowBox[{"B", "/.", 
+          RowBox[{"Table", "[", 
+           RowBox[{
+            RowBox[{
+             RowBox[{"uu", "[", "i", "]"}], "\[Rule]", 
+             RowBox[{"uu", "[", 
+              RowBox[{"i", "+", "1"}], "]"}]}], ",", 
+            RowBox[{"{", 
+             RowBox[{"i", ",", "1", ",", 
+              RowBox[{"Length", "[", "ns", "]"}]}], "}"}]}], "]"}]}]}], ";", 
+        "\[IndentingNewLine]", 
+        RowBox[{"B", "=", 
+         RowBox[{"B", "/.", 
+          RowBox[{"{", 
+           RowBox[{"z", "\[Rule]", 
+            RowBox[{"uu", "[", "1", "]"}]}], "}"}]}]}]}]}], 
+      "\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]"}]}]], "Input",
+ CellChangeTimes->{{3.799904396615363*^9, 3.799904406889674*^9}, 
+   3.7999044864107447`*^9, {3.799904522981793*^9, 3.799904542217388*^9}, {
+   3.799905368188403*^9, 3.799905440526905*^9}, {3.799910778489602*^9, 
+   3.799910789411199*^9}, {3.7999114574287767`*^9, 3.7999114795107517`*^9}, {
+   3.7999117495827513`*^9, 3.799911793714377*^9}, {3.7999118288998423`*^9, 
+   3.799911896725374*^9}, {3.799912109841093*^9, 3.7999121125284853`*^9}, {
+   3.7999125865497513`*^9, 3.7999126172056303`*^9}, 3.79991266733438*^9, {
+   3.799912899384604*^9, 3.7999129587478647`*^9}, {3.7999130239335003`*^9, 
+   3.79991307814552*^9}, {3.799914094737917*^9, 3.799914115471753*^9}, {
+   3.801080167288307*^9, 3.801080168489579*^9}}],
+
+Cell[" ", "Text",
+ Editable->False,
+ Selectable->False,
+ CellFrame->{{0, 0}, {0, 2}},
+ ShowCellBracket->False,
+ CellMargins->{{0, 0}, {1, 1}},
+ CellElementSpacings->{"CellMinHeight"->1},
+ CellFrameMargins->0,
+ CellFrameColor->RGBColor[0, 0, 1],
+ CellSize->{Inherited, 4}],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+ RowBox[{"hs2mat", "=", 
+  RowBox[{"{", 
+   RowBox[{
+    RowBox[{"g", "\[Rule]", "u"}], ",", 
+    RowBox[{"a", "\[Rule]", "\[Alpha]"}], ",", 
+    RowBox[{"b", "\[Rule]", "\[Beta]"}]}], "}"}]}]], "Input",
+ CellChangeTimes->{{3.799912245620652*^9, 3.799912259016245*^9}}],
+
+Cell[BoxData[
+ RowBox[{"{", 
+  RowBox[{
+   RowBox[{"g", "\[Rule]", "u"}], ",", 
+   RowBox[{"a", "\[Rule]", "\[Alpha]"}], ",", 
+   RowBox[{"b", "\[Rule]", "\[Beta]"}]}], "}"}]], "Output",
+ CellChangeTimes->{3.799912260023808*^9, 3.7999140879900007`*^9, 
+  3.8010801719598103`*^9, 3.801138036574416*^9}]
+}, Open  ]],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+ RowBox[{"csmXLam", "[", 
+  RowBox[{"{", 
+   RowBox[{"2", ",", "2", ",", "1", ",", "1"}], "}"}], "]"}]], "Input",
+ CellChangeTimes->{{3.801080172892398*^9, 3.801080178385489*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"24", " ", 
+   SuperscriptBox["u", "2"]}], "-", 
+  RowBox[{"18", " ", 
+   SuperscriptBox["u", "3"]}], "+", 
+  RowBox[{"144", " ", "u", " ", "\[Alpha]"}], "-", 
+  RowBox[{"162", " ", 
+   SuperscriptBox["u", "2"], " ", "\[Alpha]"}], "+", 
+  RowBox[{"180", " ", 
+   SuperscriptBox["\[Alpha]", "2"]}], "-", 
+  RowBox[{"444", " ", "u", " ", 
+   SuperscriptBox["\[Alpha]", "2"]}], "-", 
+  RowBox[{"24", " ", 
+   SuperscriptBox["u", "2"], " ", 
+   SuperscriptBox["\[Alpha]", "2"]}], "+", 
+  RowBox[{"18", " ", 
+   SuperscriptBox["u", "3"], " ", 
+   SuperscriptBox["\[Alpha]", "2"]}], "-", 
+  RowBox[{"360", " ", 
+   SuperscriptBox["\[Alpha]", "3"]}], "-", 
+  RowBox[{"144", " ", "u", " ", 
+   SuperscriptBox["\[Alpha]", "3"]}], "+", 
+  RowBox[{"162", " ", 
+   SuperscriptBox["u", "2"], " ", 
+   SuperscriptBox["\[Alpha]", "3"]}], "-", 
+  RowBox[{"180", " ", 
+   SuperscriptBox["\[Alpha]", "4"]}], "+", 
+  RowBox[{"444", " ", "u", " ", 
+   SuperscriptBox["\[Alpha]", "4"]}], "+", 
+  RowBox[{"360", " ", 
+   SuperscriptBox["\[Alpha]", "5"]}], "+", 
+  RowBox[{"144", " ", "u", " ", "\[Beta]"}], "-", 
+  RowBox[{"162", " ", 
+   SuperscriptBox["u", "2"], " ", "\[Beta]"}], "+", 
+  RowBox[{"504", " ", "\[Alpha]", " ", "\[Beta]"}], "-", 
+  RowBox[{"1056", " ", "u", " ", "\[Alpha]", " ", "\[Beta]"}], "+", 
+  RowBox[{"48", " ", 
+   SuperscriptBox["u", "2"], " ", "\[Alpha]", " ", "\[Beta]"}], "-", 
+  RowBox[{"36", " ", 
+   SuperscriptBox["u", "3"], " ", "\[Alpha]", " ", "\[Beta]"}], "-", 
+  RowBox[{"1584", " ", 
+   SuperscriptBox["\[Alpha]", "2"], " ", "\[Beta]"}], "+", 
+  RowBox[{"144", " ", "u", " ", 
+   SuperscriptBox["\[Alpha]", "2"], " ", "\[Beta]"}], "-", 
+  RowBox[{"162", " ", 
+   SuperscriptBox["u", "2"], " ", 
+   SuperscriptBox["\[Alpha]", "2"], " ", "\[Beta]"}], "-", 
+  RowBox[{"144", " ", 
+   SuperscriptBox["\[Alpha]", "3"], " ", "\[Beta]"}], "+", 
+  RowBox[{"168", " ", "u", " ", 
+   SuperscriptBox["\[Alpha]", "3"], " ", "\[Beta]"}], "+", 
+  RowBox[{"864", " ", 
+   SuperscriptBox["\[Alpha]", "4"], " ", "\[Beta]"}], "+", 
+  RowBox[{"180", " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "-", 
+  RowBox[{"444", " ", "u", " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "-", 
+  RowBox[{"24", " ", 
+   SuperscriptBox["u", "2"], " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "+", 
+  RowBox[{"18", " ", 
+   SuperscriptBox["u", "3"], " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "-", 
+  RowBox[{"1584", " ", "\[Alpha]", " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "+", 
+  RowBox[{"144", " ", "u", " ", "\[Alpha]", " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "-", 
+  RowBox[{"162", " ", 
+   SuperscriptBox["u", "2"], " ", "\[Alpha]", " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "+", 
+  RowBox[{"648", " ", 
+   SuperscriptBox["\[Alpha]", "2"], " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "-", 
+  RowBox[{"1224", " ", "u", " ", 
+   SuperscriptBox["\[Alpha]", "2"], " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "-", 
+  RowBox[{"1224", " ", 
+   SuperscriptBox["\[Alpha]", "3"], " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "-", 
+  RowBox[{"360", " ", 
+   SuperscriptBox["\[Beta]", "3"]}], "-", 
+  RowBox[{"144", " ", "u", " ", 
+   SuperscriptBox["\[Beta]", "3"]}], "+", 
+  RowBox[{"162", " ", 
+   SuperscriptBox["u", "2"], " ", 
+   SuperscriptBox["\[Beta]", "3"]}], "-", 
+  RowBox[{"144", " ", "\[Alpha]", " ", 
+   SuperscriptBox["\[Beta]", "3"]}], "+", 
+  RowBox[{"168", " ", "u", " ", "\[Alpha]", " ", 
+   SuperscriptBox["\[Beta]", "3"]}], "-", 
+  RowBox[{"1224", " ", 
+   SuperscriptBox["\[Alpha]", "2"], " ", 
+   SuperscriptBox["\[Beta]", "3"]}], "-", 
+  RowBox[{"180", " ", 
+   SuperscriptBox["\[Beta]", "4"]}], "+", 
+  RowBox[{"444", " ", "u", " ", 
+   SuperscriptBox["\[Beta]", "4"]}], "+", 
+  RowBox[{"864", " ", "\[Alpha]", " ", 
+   SuperscriptBox["\[Beta]", "4"]}], "+", 
+  RowBox[{"360", " ", 
+   SuperscriptBox["\[Beta]", "5"]}]}]], "Output",
+ CellChangeTimes->{3.801080178836585*^9, 3.801138037480577*^9}]
+}, Open  ]],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+ RowBox[{"ref2211", "=", 
+  RowBox[{
+   RowBox[{"(", 
+    RowBox[{
+     RowBox[{"180", "*", 
+      RowBox[{"b", "^", "2"}]}], "-", 
+     RowBox[{"360", "*", 
+      RowBox[{"b", "^", "3"}]}], "-", 
+     RowBox[{"180", "*", 
+      RowBox[{"b", "^", "4"}]}], "+", 
+     RowBox[{"360", "*", 
+      RowBox[{"b", "^", "5"}]}], "+", 
+     RowBox[{"504", "*", "a", "*", "b"}], "-", 
+     RowBox[{"1584", "*", "a", "*", 
+      RowBox[{"b", "^", "2"}]}], "-", 
+     RowBox[{"144", "*", "a", "*", 
+      RowBox[{"b", "^", "3"}]}], "+", 
+     RowBox[{"864", "*", "a", "*", 
+      RowBox[{"b", "^", "4"}]}], "+", 
+     RowBox[{"180", "*", 
+      RowBox[{"a", "^", "2"}]}], "-", 
+     RowBox[{"1584", "*", 
+      RowBox[{"a", "^", "2"}], "*", "b"}], "+", 
+     RowBox[{"648", "*", 
+      RowBox[{"a", "^", "2"}], "*", 
+      RowBox[{"b", "^", "2"}]}], "-", 
+     RowBox[{"1224", "*", 
+      RowBox[{"a", "^", "2"}], "*", 
+      RowBox[{"b", "^", "3"}]}], "-", 
+     RowBox[{"360", "*", 
+      RowBox[{"a", "^", "3"}]}], "-", 
+     RowBox[{"144", "*", 
+      RowBox[{"a", "^", "3"}], "*", "b"}], "-", 
+     RowBox[{"1224", "*", 
+      RowBox[{"a", "^", "3"}], "*", 
+      RowBox[{"b", "^", "2"}]}], "-", 
+     RowBox[{"180", "*", 
+      RowBox[{"a", "^", "4"}]}], "+", 
+     RowBox[{"864", "*", 
+      RowBox[{"a", "^", "4"}], "*", "b"}], "+", 
+     RowBox[{"360", "*", 
+      RowBox[{"a", "^", "5"}]}], "+", 
+     RowBox[{"144", "*", 
+      RowBox[{"g", "^", "1"}], "*", "b"}], "-", 
+     RowBox[{"444", "*", 
+      RowBox[{"g", "^", "1"}], "*", 
+      RowBox[{"b", "^", "2"}]}], "-", 
+     RowBox[{"144", "*", 
+      RowBox[{"g", "^", "1"}], "*", 
+      RowBox[{"b", "^", "3"}]}], "+", 
+     RowBox[{"444", "*", 
+      RowBox[{"g", "^", "1"}], "*", 
+      RowBox[{"b", "^", "4"}]}], "+", 
+     RowBox[{"144", "*", 
+      RowBox[{"g", "^", "1"}], "*", "a"}], "-", 
+     RowBox[{"1056", "*", 
+      RowBox[{"g", "^", "1"}], "*", "a", "*", "b"}], "+", 
+     RowBox[{"144", "*", 
+      RowBox[{"g", "^", "1"}], "*", "a", "*", 
+      RowBox[{"b", "^", "2"}]}], "+", 
+     RowBox[{"168", "*", 
+      RowBox[{"g", "^", "1"}], "*", "a", "*", 
+      RowBox[{"b", "^", "3"}]}], "-", 
+     RowBox[{"444", "*", 
+      RowBox[{"g", "^", "1"}], "*", 
+      RowBox[{"a", "^", "2"}]}], "+", 
+     RowBox[{"144", "*", 
+      RowBox[{"g", "^", "1"}], "*", 
+      RowBox[{"a", "^", "2"}], "*", "b"}], "-", 
+     RowBox[{"1224", "*", 
+      RowBox[{"g", "^", "1"}], "*", 
+      RowBox[{"a", "^", "2"}], "*", 
+      RowBox[{"b", "^", "2"}]}], "-", 
+     RowBox[{"144", "*", 
+      RowBox[{"g", "^", "1"}], "*", 
+      RowBox[{"a", "^", "3"}]}], "+", 
+     RowBox[{"168", "*", 
+      RowBox[{"g", "^", "1"}], "*", 
+      RowBox[{"a", "^", "3"}], "*", "b"}], "+", 
+     RowBox[{"444", "*", 
+      RowBox[{"g", "^", "1"}], "*", 
+      RowBox[{"a", "^", "4"}]}], "+", 
+     RowBox[{"24", "*", 
+      RowBox[{"g", "^", "2"}]}], "-", 
+     RowBox[{"162", "*", 
+      RowBox[{"g", "^", "2"}], "*", "b"}], "-", 
+     RowBox[{"24", "*", 
+      RowBox[{"g", "^", "2"}], "*", 
+      RowBox[{"b", "^", "2"}]}], "+", 
+     RowBox[{"162", "*", 
+      RowBox[{"g", "^", "2"}], "*", 
+      RowBox[{"b", "^", "3"}]}], "-", 
+     RowBox[{"162", "*", 
+      RowBox[{"g", "^", "2"}], "*", "a"}], "+", 
+     RowBox[{"48", "*", 
+      RowBox[{"g", "^", "2"}], "*", "a", "*", "b"}], "-", 
+     RowBox[{"162", "*", 
+      RowBox[{"g", "^", "2"}], "*", "a", "*", 
+      RowBox[{"b", "^", "2"}]}], "-", 
+     RowBox[{"24", "*", 
+      RowBox[{"g", "^", "2"}], "*", 
+      RowBox[{"a", "^", "2"}]}], "-", 
+     RowBox[{"162", "*", 
+      RowBox[{"g", "^", "2"}], "*", 
+      RowBox[{"a", "^", "2"}], "*", "b"}], "+", 
+     RowBox[{"162", "*", 
+      RowBox[{"g", "^", "2"}], "*", 
+      RowBox[{"a", "^", "3"}]}], "-", 
+     RowBox[{"18", "*", 
+      RowBox[{"g", "^", "3"}]}], "+", 
+     RowBox[{"18", "*", 
+      RowBox[{"g", "^", "3"}], "*", 
+      RowBox[{"b", "^", "2"}]}], "-", 
+     RowBox[{"36", "*", 
+      RowBox[{"g", "^", "3"}], "*", "a", "*", "b"}], "+", 
+     RowBox[{"18", "*", 
+      RowBox[{"g", "^", "3"}], "*", 
+      RowBox[{"a", "^", "2"}]}]}], ")"}], "/.", "hs2mat"}]}]], "Input",
+ CellChangeTimes->{{3.801080194677876*^9, 3.801080214599786*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"24", " ", 
+   SuperscriptBox["u", "2"]}], "-", 
+  RowBox[{"18", " ", 
+   SuperscriptBox["u", "3"]}], "+", 
+  RowBox[{"144", " ", "u", " ", "\[Alpha]"}], "-", 
+  RowBox[{"162", " ", 
+   SuperscriptBox["u", "2"], " ", "\[Alpha]"}], "+", 
+  RowBox[{"180", " ", 
+   SuperscriptBox["\[Alpha]", "2"]}], "-", 
+  RowBox[{"444", " ", "u", " ", 
+   SuperscriptBox["\[Alpha]", "2"]}], "-", 
+  RowBox[{"24", " ", 
+   SuperscriptBox["u", "2"], " ", 
+   SuperscriptBox["\[Alpha]", "2"]}], "+", 
+  RowBox[{"18", " ", 
+   SuperscriptBox["u", "3"], " ", 
+   SuperscriptBox["\[Alpha]", "2"]}], "-", 
+  RowBox[{"360", " ", 
+   SuperscriptBox["\[Alpha]", "3"]}], "-", 
+  RowBox[{"144", " ", "u", " ", 
+   SuperscriptBox["\[Alpha]", "3"]}], "+", 
+  RowBox[{"162", " ", 
+   SuperscriptBox["u", "2"], " ", 
+   SuperscriptBox["\[Alpha]", "3"]}], "-", 
+  RowBox[{"180", " ", 
+   SuperscriptBox["\[Alpha]", "4"]}], "+", 
+  RowBox[{"444", " ", "u", " ", 
+   SuperscriptBox["\[Alpha]", "4"]}], "+", 
+  RowBox[{"360", " ", 
+   SuperscriptBox["\[Alpha]", "5"]}], "+", 
+  RowBox[{"144", " ", "u", " ", "\[Beta]"}], "-", 
+  RowBox[{"162", " ", 
+   SuperscriptBox["u", "2"], " ", "\[Beta]"}], "+", 
+  RowBox[{"504", " ", "\[Alpha]", " ", "\[Beta]"}], "-", 
+  RowBox[{"1056", " ", "u", " ", "\[Alpha]", " ", "\[Beta]"}], "+", 
+  RowBox[{"48", " ", 
+   SuperscriptBox["u", "2"], " ", "\[Alpha]", " ", "\[Beta]"}], "-", 
+  RowBox[{"36", " ", 
+   SuperscriptBox["u", "3"], " ", "\[Alpha]", " ", "\[Beta]"}], "-", 
+  RowBox[{"1584", " ", 
+   SuperscriptBox["\[Alpha]", "2"], " ", "\[Beta]"}], "+", 
+  RowBox[{"144", " ", "u", " ", 
+   SuperscriptBox["\[Alpha]", "2"], " ", "\[Beta]"}], "-", 
+  RowBox[{"162", " ", 
+   SuperscriptBox["u", "2"], " ", 
+   SuperscriptBox["\[Alpha]", "2"], " ", "\[Beta]"}], "-", 
+  RowBox[{"144", " ", 
+   SuperscriptBox["\[Alpha]", "3"], " ", "\[Beta]"}], "+", 
+  RowBox[{"168", " ", "u", " ", 
+   SuperscriptBox["\[Alpha]", "3"], " ", "\[Beta]"}], "+", 
+  RowBox[{"864", " ", 
+   SuperscriptBox["\[Alpha]", "4"], " ", "\[Beta]"}], "+", 
+  RowBox[{"180", " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "-", 
+  RowBox[{"444", " ", "u", " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "-", 
+  RowBox[{"24", " ", 
+   SuperscriptBox["u", "2"], " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "+", 
+  RowBox[{"18", " ", 
+   SuperscriptBox["u", "3"], " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "-", 
+  RowBox[{"1584", " ", "\[Alpha]", " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "+", 
+  RowBox[{"144", " ", "u", " ", "\[Alpha]", " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "-", 
+  RowBox[{"162", " ", 
+   SuperscriptBox["u", "2"], " ", "\[Alpha]", " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "+", 
+  RowBox[{"648", " ", 
+   SuperscriptBox["\[Alpha]", "2"], " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "-", 
+  RowBox[{"1224", " ", "u", " ", 
+   SuperscriptBox["\[Alpha]", "2"], " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "-", 
+  RowBox[{"1224", " ", 
+   SuperscriptBox["\[Alpha]", "3"], " ", 
+   SuperscriptBox["\[Beta]", "2"]}], "-", 
+  RowBox[{"360", " ", 
+   SuperscriptBox["\[Beta]", "3"]}], "-", 
+  RowBox[{"144", " ", "u", " ", 
+   SuperscriptBox["\[Beta]", "3"]}], "+", 
+  RowBox[{"162", " ", 
+   SuperscriptBox["u", "2"], " ", 
+   SuperscriptBox["\[Beta]", "3"]}], "-", 
+  RowBox[{"144", " ", "\[Alpha]", " ", 
+   SuperscriptBox["\[Beta]", "3"]}], "+", 
+  RowBox[{"168", " ", "u", " ", "\[Alpha]", " ", 
+   SuperscriptBox["\[Beta]", "3"]}], "-", 
+  RowBox[{"1224", " ", 
+   SuperscriptBox["\[Alpha]", "2"], " ", 
+   SuperscriptBox["\[Beta]", "3"]}], "-", 
+  RowBox[{"180", " ", 
+   SuperscriptBox["\[Beta]", "4"]}], "+", 
+  RowBox[{"444", " ", "u", " ", 
+   SuperscriptBox["\[Beta]", "4"]}], "+", 
+  RowBox[{"864", " ", "\[Alpha]", " ", 
+   SuperscriptBox["\[Beta]", "4"]}], "+", 
+  RowBox[{"360", " ", 
+   SuperscriptBox["\[Beta]", "5"]}]}]], "Output",
+ CellChangeTimes->{3.8010802149214277`*^9, 3.8011380407777863`*^9}]
+}, Open  ]],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+ RowBox[{"ref2211", "-", 
+  RowBox[{"csmXLam", "[", 
+   RowBox[{"{", 
+    RowBox[{"2", ",", "2", ",", "1", ",", "1"}], "}"}], "]"}]}]], "Input",
+ CellChangeTimes->{{3.801138043577608*^9, 3.80113805412545*^9}}],
+
+Cell[BoxData["0"], "Output",
+ CellChangeTimes->{3.801138054701275*^9}]
+}, Open  ]]
+},
+WindowSize->{740, 655},
+WindowMargins->{{12, Automatic}, {Automatic, 24}},
+FrontEndVersion->"9.0 for Mac OS X x86 (32-bit, 64-bit Kernel) (November 20, \
+2012)",
+StyleDefinitions->"Default.nb"
+]
+(* End of Notebook Content *)
+
+(* Internal cache information *)
+(*CellTagsOutline
+CellTagsIndex->{}
+*)
+(*CellTagsIndex
+CellTagsIndex->{}
+*)
+(*NotebookFileOutline
+Notebook[{
+Cell[CellGroupData[{
+Cell[579, 22, 3405, 92, 369, "Input"],
+Cell[3987, 116, 470, 10, 58, "Message"]
+}, Open  ]],
+Cell[4472, 129, 273, 9, 5, "Text"],
+Cell[4748, 140, 5089, 136, 488, "Input"],
+Cell[9840, 278, 271, 9, 8, "Text"],
+Cell[10114, 289, 6112, 160, 454, "Input"],
+Cell[16229, 451, 271, 9, 8, "Text"],
+Cell[16503, 462, 4631, 120, 369, "Input"],
+Cell[21137, 584, 273, 9, 5, "Text"],
+Cell[21413, 595, 3740, 95, 335, "Input"],
+Cell[25156, 692, 271, 9, 8, "Text"],
+Cell[25430, 703, 6312, 165, 386, "Input"],
+Cell[31745, 870, 273, 9, 5, "Text"],
+Cell[32021, 881, 8347, 219, 658, "Input"],
+Cell[40371, 1102, 271, 9, 8, "Text"],
+Cell[40645, 1113, 1899, 50, 199, "Input"],
+Cell[42547, 1165, 3558, 108, 335, "Input"],
+Cell[46108, 1275, 18692, 473, 1661, "Input"],
+Cell[64803, 1750, 271, 9, 8, "Text"],
+Cell[CellGroupData[{
+Cell[65099, 1763, 283, 7, 28, "Input"],
+Cell[65385, 1772, 301, 7, 28, "Output"]
+}, Open  ]],
+Cell[CellGroupData[{
+Cell[65723, 1784, 193, 4, 28, "Input"],
+Cell[65919, 1790, 3928, 102, 128, "Output"]
+}, Open  ]],
+Cell[CellGroupData[{
+Cell[69884, 1897, 4221, 119, 199, "Input"],
+Cell[74108, 2018, 3932, 102, 128, "Output"]
+}, Open  ]],
+Cell[CellGroupData[{
+Cell[78077, 2125, 223, 5, 28, "Input"],
+Cell[78303, 2132, 70, 1, 62, "Output"]
+}, Open  ]]
+}
+]
+*)
+
+(* End of internal cache information *)
diff --git a/mathematica/equivariant_CSM_via_motivic.src b/mathematica/equivariant_CSM_via_motivic.src
new file mode 100644
--- /dev/null
+++ b/mathematica/equivariant_CSM_via_motivic.src
@@ -0,0 +1,372 @@
+
+(* ==== COMPUTE THR EQUIVARIANT CHERN-SCHWARTZ-MACPHERSON 
+        CLASS OF COINCIDENT ROOT LOCI VIA THE MOTIVIC ALGORITHM ==== *)
+
+<< Combinatorica`
+
+(* convention: u = -c_1(L) where L is the tautological line bundle on P^n *)
+
+uu[i_] := Subscript[u, i]
+vv[i_] := Subscript[u, i]
+ww[i_] := Subscript[u, i]
+
+(* only works for lists of equal length!! *)
+Zip[as_, bs_] := MapThread[{#1, #2} &, {as, bs}]
+Zip3[as_, bs_, cs_] := MapThread[{#1, #2, #3} &, {as, bs, cs}]
+
+Fst[pair_] := pair[[1]]
+Snd[pair_] := pair[[2]]
+
+extendListWithZeros[L_, n_] := Join[L, Table[0, {i, 1, n - Length[L]}]]
+
+SumList[L_] := Sum[x, {x, L}]
+
+(* === EQUIVARIANT COHOMOLOGY RING OF P^n === *)
+
+(* Weights of Sym^n C^2 *)
+wt[n_, i_] := (n - i)*\[Alpha] + i*\[Beta]
+
+(* the relation in H^*(P^n). Convention: 
+u = -c1(L) where L is the tautological line bundle *)
+
+rel[n_] := Product[u + wt[n, i], {i, 0, n}]
+
+Clear[upow$nplus1]
+upow$nplus1[n_] := upow$nplus1[n] = Expand[u^(n + 1) - rel[n]]
+(* (unefficiently) normalize a /polynomial/ in u *) 
+
+Clear[normalizeSlow]
+normalizeSlow[n_, X0_] := Module[{X = Expand[X0], m},
+  m = Exponent[X, u];
+  If[m <= n, X, normalizeSlow[n, X /. {u^m -> u^(m - n - 1)*upow$nplus1[n]}]]
+  ]
+
+(* table of normalized powers of u *)
+Clear[UPowAB]
+UPowAB[n_, k_] := UPowAB[n, k] = Expand[normalizeSlow[n, u^k]]
+
+Clear[normalizeVarAB]
+normalizeVarAB[n_, uuu_, X_] := Module[
+  {m = Exponent[X, uuu]},
+  Expand[Sum[Coefficient[X, uuu, k]*(UPowAB[n, k] /. {u -> uuu}), {k, 0, m}]]
+  ]
+
+(* === pushforward along the multiplication (single monom) === *)
+
+(* Psi_* (u^k * v^l) = ? cohomology indexing *)
+Clear[psiStarAB]
+psiStarAB[n_, m_, 0, 0] := psiStarAB[n, m, 0, 0] = Binomial[n + m, n]
+psiStarAB[n_, m_, k_, l_] := psiStarAB[n, m, k, l] = Module[
+   {A, B, AB, F, R, IJ, sel, fun, cft},
+   A = Product[u + wt[n, i], {i, 0, k - 1}];
+   B = Product[v + wt[m, j], {j, 0, l - 1}];
+   AB = Expand[A*B];
+   sel[{i_, j_}] := (i < k) || (j < l);
+   cft[{i_, j_}] := Coefficient[Coefficient[AB, u, i], v, j];
+   fun[{i_, j_}] := psiStarAB[n, m, i, j];
+   IJ = Flatten[Table[{i, j}, {i, 0, k}, {j, 0, l}], 1];
+   IJ = Select[ IJ, sel];
+   (* Print[IJ];
+   Print[AB]; *)
+   
+   F = Binomial[n + m - k - l, n - k]*
+     Product[w + wt[n + m, i], {i, 0, k + l - 1}];
+   R = Sum[ cft[ij]*fun[ij], {ij, IJ}];  
+   Expand[F - R]
+   ]
+
+Clear[psiStarChern]
+psiStarChern[n_, m_, k_, l_] := psiStarChern[n, m, k, l] = 
+  SymmetricReduction[psiStarAB[n, m, k, l], {\[Alpha], \[Beta]}, {c, d}][[1]]
+
+
+(* === class of the diagonal === *)
+
+notk[n_, k_] := Select[Table[i, {i, 0, n}], # != k &]
+
+(* class of the diagonal in P^n x P^n *)
+Clear[deltaClassAB]
+deltaClassAB[n_] := deltaClassAB[n] =
+  Expand[Factor[
+    Sum[ Product[(v + wt[n, i]) (w + wt[n, i])/(wt[n, i] - wt[n, k]), {i, 
+       notk[n, k]}], {k, 0, n}]]]
+
+Clear[deltaClassCh]
+deltaClassCh[n_] := deltaClassCh[n] =
+  Expand[SymmetricReduction[deltaClassAB[n], {\[Alpha], \[Beta]}, {c, d}][[1]]]
+
+(* small diagonal in P^n x P^n x P^n *)
+deltaClassTri[n_] := deltaClassTri[n] =
+  Expand[Factor[
+    Sum[ Product[(uu[1] + wt[n, i]) (uu[2] + 
+         wt[n, i]) (uu[3] + wt[n, i])/(wt[n, i] - wt[n, k]), {i, 
+       notk[n, k]}], {k, 0, n}]]]
+
+(* === pushforward along the diagonal map (single monom) === *)
+
+(* pushforward of u^k along Delta : P^n -> P^n x P^n *)
+Clear[deltaStarAB]
+deltaStarAB[n_, 0]  := deltaStarAB[n, 0] = deltaClassAB[n]
+deltaStarAB[n_, k_] := deltaStarAB[n, k] = Module[
+   {prod, Y, preY, Delta, rest},
+   Y = Expand[Product[v + wt[n, i], {i, 0, k - 1}]];
+   preY = Y /. {v -> u};
+   Delta = deltaClassAB[n];
+   prod = normalizeVarAB[n, v, Y*Delta];
+   rest = Sum[Coefficient[preY, u, i]*deltaStarAB[n, i],  {i, 0, k - 1} ];
+   Expand[ prod - rest]
+   ]
+
+Clear[deltaStarCh]
+deltaStarCh[n_] := deltaStarCh[n] =
+  Expand[SymmetricReduction[deltaStarAB[n], {\[Alpha], \[Beta]}, {c, d}][[1]]]
+
+
+(* === pushforwards for polynomials (not just single monoms) === *)
+
+delta2[n_, uuu_, {vvv_, www_}, X0_] := Module[{X = Expand[X0]},
+  Sum[Coefficient[X, uuu, i]*(deltaStarAB[n, i] /. {v -> vvv, w -> www}) , {i,
+     0, n}]
+  ]
+
+deltaMany[n_, uuu_, vvvs_, X_] := Module[{ttt},
+  If[Length[vvvs] == 1, X /. {uuu -> vvvs[[1]]},
+   If[Length[vvvs] == 2, delta2[n, uuu, vvvs, X],
+    deltaMany[n, ttt, Drop[vvvs, 1], delta2[n, uuu, {vvvs[[1]], ttt}, X]]]]]
+
+psi2[{n1_, n2_}, {uuu_, vvv_}, www_, X0_] := Module[{X = Expand[X0]},
+  Sum[Coefficient[Coefficient[X, uuu, i], vvv, 
+     j]*(psiStarAB[n1, n2, i, j] /. {w -> www}) , {i, 0, n1}, {j, 0, n2}]
+  ]
+
+psiMany[ns_, uuus_, www_, X_] := Module[{ttt, vvvs, ms},
+  If[Length[uuus] == 1, X /. {uuus[[1]] -> www},
+   If[Length[uuus] == 2, psi2[ns, uuus, www, X],
+    ms = Join[{ns[[1]] + ns[[2]]}, Drop[ns, 2]];
+    vvvs = Join[{ttt}, Drop[uuus, 2]];
+    psiMany[ms, vvvs, www, psi2[Take[ns, 2], Take[uuus, 2], ttt, X]]]]]
+
+ 
+(* === pushforward along the power map === *)
+
+(* compute the pushforward by composing the diagonal with the merging map *)
+
+Clear[slowOmegaAB]
+slowOmegaAB[n_, d_, k_] := slowOmegaAB[n, d, k] = Module[
+   {vars = Table[Subscript[ttt, i], {i, 1, d}],
+    dims = Table[n, {i, 1, d}]},
+   Factor[psiMany[dims, vars, u, deltaMany[n, u, vars, u^k]]]
+   ]
+
+(* d-th power of u^k : P^n -> P^(n*d) *)
+(* NOTE: this formula is valid for  k>n too! 
+    you can experimentally check this 
+    by pre-normalizing and post-normalizing *)
+Clear[omegaAB]
+omegaAB[n_, d_, k_] :=
+ Module[
+  {idxs = Select[Table[i, {i, 0, n*d}], Not[Divisible[#, d]] &]}
+  , u^k*d^(n - k)*Product[u + (n*d - i)*\[Alpha] + i*\[Beta], {i, idxs}]
+  ]
+
+(* pushforward along d-th power : P^n -> P^(n*d) *)
+
+omega1[n_, d_, uuu_, www_, X0_] := Module[{X = Expand[X0]},
+  Sum[Coefficient[X, uuu, i]*(omegaAB[n, d, i] /. {u -> www}) , {i, 0, n}]
+  ]
+
+(* P^n1 x P^n2 x P^n3 -> P^(d1*n1) x P^(d2*n2) x P^(d3*n3) -> P^(d1*n1 + \
+d2*n2 + d3*n3 *) 
+omegaLam[ns_, ds_, uuus_, www_, X0_] := Module[
+  {X = Expand[X0],
+   m = Length[ns],
+   vars, Y, nds, ttt, i},
+  vars = Table[Subscript[ttt, i], {i, 1, m}];
+  nds = Table[ ns[[i]]*ds[[i]], {i, 1, m}];
+  Y = X;
+  For[i = 1, i <= m, i++, 
+   Y = omega1[ns[[i]], ds[[i]], uuus[[i]], vars[[i]], Y]];
+  psiMany[nds, vars, www, Y]
+  ]
+
+(* === EQUIVARIANT CSM CLASS === *)
+
+uus[n_] := Table[uu[i], {i, 1, n}]
+vvs[n_] := Table[vv[i], {i, 1, n}]
+
+(* total chern class of P^n *)
+Clear[chernPnAB]
+chernPnAB[n_] := chernPnAB[n] = normalizeVarAB[n, u,
+   Expand[Product[1 + u + wt[n, i], {i, 0, n}]]]
+
+chernPnABVar[n_, uuu_] := chernPnAB[n] /. {u -> uuu}
+
+EmptyPartQ[part_] := Length[part] == 0
+
+DualPart[{}] := {}
+DualPart[lam_] := 
+ With[{m = lam[[1]]}, Table[Length[Select[lam, # >= i &]], {i, 1, m}]]
+ 
+toExpoForm[{}] := {} 
+toExpoForm[part_] := 
+ Module[{k = Max[part]}, Table[Length[Select[part, # == j &]], {j, 1, k}]]
+
+posVectorQ[as_] := Map[# >= 0 &, as] /. {List -> And};
+kdeTriples[p_, ns_] := Module[
+  {m = Length[ns],
+   posQ, oneK, A},
+  oneK[k_] := 
+   Table[{k, ns - es, es}, {es, Combinatorica`Compositions[p - k, m]}];
+  A = Table [oneK[k], {k, 0, p - 1}];
+  A = Select[Flatten[A, 1], posVectorQ[Snd[#]] &];
+  A]
+
+Clear[csmXLam, csmDisj1, csmDisj, csmDisjSorted]
+
+csmXLam[{}] := csmXLam[{}] = 1
+csmXLam[{1}] := csmXLam[{1}] = chernPnAB[1]
+
+csmDisj1[0] := csmDisj1[0] = 1
+csmDisj1[1] := csmDisj1[1] = chernPnAB[1]
+
+csmDisj[{}] := csmDisj[{}] = 1
+
+csmDisjSorted[{}] := csmDisjSorted[{}] = 1
+
+(* equiv CSM of D(n) *)
+csmDisj1[n_] := csmDisj1[n] = Module[
+   {parts = Select[Combinatorica`Partitions[n], Length[#] < n &]},
+   Expand[chernPnAB[n] - Sum[csmXLam[p], {p, parts}]]
+   ]
+
+(* equiv CSM of X_lambda *)
+csmXLam[lambda_] := csmXLam[lambda] = Module[
+   {es = toExpoForm[lambda], m, m1, ns, pairs, X},
+   m = Length[es];
+   ns = Range[m];
+   pairs = Zip[ns, es];   (* i^e_ *)
+   
+   pairs = Select[pairs, Snd[#] > 0 &]; (* !!! *)
+   m1 = Length[pairs];
+   ns = Map[Fst, pairs];
+   es = Map[Snd, pairs];
+   X = csmDisj[es];
+   (* Print["xlam1 - ",pairs];
+   Print["xlam2 - ",es," | ",ns," | ",uus[m1]," | ",X]; *)
+   
+   Expand[omegaLam[es, ns, uus[m1], u, X]]
+   ]
+
+(* equiv CSM of D(d1,d2,...) *)
+
+csmDisj[{n_}] := csmDisj[{n}] = csmDisj1[n] /. {u -> uu[1]}
+csmDisj[ns0_] := csmDisj[ns0] = Module[
+   {m = Length[ns0],
+    nis0, nis1, ns1, idxs, X, ttt},
+   nis0 = Zip[ns0, Range[m]];
+   nis1 = SortBy[nis0, -Fst[#] &];
+   idxs = Map[Snd, nis1];
+   ns1 = Select[Map[Fst, nis1], # > 0 &];
+   (* Print["nis1 - ",nis0," | ",nis1];
+   Print["nis2 - ",ns1]; *)
+   X = csmDisjSorted[ns1];
+   X = X /. Table[uu[i] -> Subscript[ttt, i], {i, 1, m}];
+   X /. Table[Subscript[ttt, i] -> uu[idxs[[i]]], {i, 1, m}]
+   ]
+
+(* a single term corresponding to a triple (k,ds,es) *)
+Clear[singleKDE]
+singleKDE[{k_, ds_, es_}] := singleKDE[{k, ds, es}] = Module[
+   {A, B,
+    m, vars, dims,
+    pp, qq, rr, ss,
+    pps, qqs, rrs, sss
+    },
+   m = Length[ds];
+   pp[i_] := Subscript[pp$p, i];
+   qq[i_] := Subscript[qq$q, i];
+   rr[i_] := Subscript[rr$r, i];
+   ss[i_] := Subscript[ss$s, i];
+   pps = Table[pp[i], {i, 1, m}];
+   qqs = Table[qq[i], {i, 1, m}];
+   rrs = Table[rr[i], {i, 1, m}];
+   sss = Table[ss[i], {i, 1, m}];
+   vars = Join[{zzz}, pps, qqs];
+   dims = Join[{k}, ds, es];
+   A = csmDisj[dims] /. Table[uu[i] -> vars[[i]], {i, 1, 2 m + 1}];
+   B = A;
+   For[i = 1, i <= m, i++, 
+    B = Expand[delta2[es[[i]], qq[i], {rr[i], ss[i]}, B]]];
+   For[i = 1, i <= m, i++, 
+    B = Expand[psi2[{ds[[i]], es[[i]]}, {pp[i], ss[i]}, uu[i], B]]];
+   B = psiMany[Join[{k}, es], Join[{zzz}, rrs], z, B];
+   B
+   ]
+
+(* equiv CSM of D(d1,d2,...), but we require d1>=d2>=d3>=...>=dn>0 *)
+
+csmDisjSorted[{n_}] := csmDisjSorted[{n}] = csmDisj1[n] /. {u -> uu[1]}
+csmDisjSorted[pns_] := csmDisjSorted[pns] = Module[
+   {p = pns[[1]],
+    ns = Drop[pns, 1],
+    A, B, rest,
+    KDE
+    },
+   KDE = kdeTriples[p, ns];
+   (* Print["sorted1 - ",p," | ",ns];
+   Print["sorted2 - ",KDE]; *)
+   A = (csmDisj1[p] /. {u -> z})*csmDisj[ns];
+   rest = Sum[singleKDE[kde], {kde, KDE}];
+   B = Expand[A - rest];
+   B = B /. Table[uu[i] -> uu[i + 1], {i, 1, Length[ns]}];
+   B = B /. {z -> uu[1]}
+   ]
+
+
+hs2mat = {g -> u, a -> \[Alpha], b -> \[Beta]}
+
+csmXLam[{2, 2, 1, 1}]
+
+24 u^2 - 18 u^3 + 144 u \[Alpha] - 162 u^2 \[Alpha] + 180 \[Alpha]^2 - 
+ 444 u \[Alpha]^2 - 24 u^2 \[Alpha]^2 + 18 u^3 \[Alpha]^2 - 360 \[Alpha]^3 - 
+ 144 u \[Alpha]^3 + 162 u^2 \[Alpha]^3 - 180 \[Alpha]^4 + 444 u \[Alpha]^4 + 
+ 360 \[Alpha]^5 + 144 u \[Beta] - 162 u^2 \[Beta] + 504 \[Alpha] \[Beta] - 
+ 1056 u \[Alpha] \[Beta] + 48 u^2 \[Alpha] \[Beta] - 
+ 36 u^3 \[Alpha] \[Beta] - 1584 \[Alpha]^2 \[Beta] + 
+ 144 u \[Alpha]^2 \[Beta] - 162 u^2 \[Alpha]^2 \[Beta] - 
+ 144 \[Alpha]^3 \[Beta] + 168 u \[Alpha]^3 \[Beta] + 864 \[Alpha]^4 \[Beta] + 
+ 180 \[Beta]^2 - 444 u \[Beta]^2 - 24 u^2 \[Beta]^2 + 18 u^3 \[Beta]^2 - 
+ 1584 \[Alpha] \[Beta]^2 + 144 u \[Alpha] \[Beta]^2 - 
+ 162 u^2 \[Alpha] \[Beta]^2 + 648 \[Alpha]^2 \[Beta]^2 - 
+ 1224 u \[Alpha]^2 \[Beta]^2 - 1224 \[Alpha]^3 \[Beta]^2 - 360 \[Beta]^3 - 
+ 144 u \[Beta]^3 + 162 u^2 \[Beta]^3 - 144 \[Alpha] \[Beta]^3 + 
+ 168 u \[Alpha] \[Beta]^3 - 1224 \[Alpha]^2 \[Beta]^3 - 180 \[Beta]^4 + 
+ 444 u \[Beta]^4 + 864 \[Alpha] \[Beta]^4 + 360 \[Beta]^5
+
+ref2211 = (180*b^2 - 360*b^3 - 180*b^4 + 360*b^5 + 504*a*b - 1584*a*b^2 - 
+    144*a*b^3 + 864*a*b^4 + 180*a^2 - 1584*a^2*b + 648*a^2*b^2 - 
+    1224*a^2*b^3 - 360*a^3 - 144*a^3*b - 1224*a^3*b^2 - 180*a^4 + 864*a^4*b + 
+    360*a^5 + 144*g^1*b - 444*g^1*b^2 - 144*g^1*b^3 + 444*g^1*b^4 + 
+    144*g^1*a - 1056*g^1*a*b + 144*g^1*a*b^2 + 168*g^1*a*b^3 - 444*g^1*a^2 + 
+    144*g^1*a^2*b - 1224*g^1*a^2*b^2 - 144*g^1*a^3 + 168*g^1*a^3*b + 
+    444*g^1*a^4 + 24*g^2 - 162*g^2*b - 24*g^2*b^2 + 162*g^2*b^3 - 162*g^2*a + 
+    48*g^2*a*b - 162*g^2*a*b^2 - 24*g^2*a^2 - 162*g^2*a^2*b + 162*g^2*a^3 - 
+    18*g^3 + 18*g^3*b^2 - 36*g^3*a*b + 18*g^3*a^2) /. hs2mat
+
+24 u^2 - 18 u^3 + 144 u \[Alpha] - 162 u^2 \[Alpha] + 180 \[Alpha]^2 - 
+ 444 u \[Alpha]^2 - 24 u^2 \[Alpha]^2 + 18 u^3 \[Alpha]^2 - 360 \[Alpha]^3 - 
+ 144 u \[Alpha]^3 + 162 u^2 \[Alpha]^3 - 180 \[Alpha]^4 + 444 u \[Alpha]^4 + 
+ 360 \[Alpha]^5 + 144 u \[Beta] - 162 u^2 \[Beta] + 504 \[Alpha] \[Beta] - 
+ 1056 u \[Alpha] \[Beta] + 48 u^2 \[Alpha] \[Beta] - 
+ 36 u^3 \[Alpha] \[Beta] - 1584 \[Alpha]^2 \[Beta] + 
+ 144 u \[Alpha]^2 \[Beta] - 162 u^2 \[Alpha]^2 \[Beta] - 
+ 144 \[Alpha]^3 \[Beta] + 168 u \[Alpha]^3 \[Beta] + 864 \[Alpha]^4 \[Beta] + 
+ 180 \[Beta]^2 - 444 u \[Beta]^2 - 24 u^2 \[Beta]^2 + 18 u^3 \[Beta]^2 - 
+ 1584 \[Alpha] \[Beta]^2 + 144 u \[Alpha] \[Beta]^2 - 
+ 162 u^2 \[Alpha] \[Beta]^2 + 648 \[Alpha]^2 \[Beta]^2 - 
+ 1224 u \[Alpha]^2 \[Beta]^2 - 1224 \[Alpha]^3 \[Beta]^2 - 360 \[Beta]^3 - 
+ 144 u \[Beta]^3 + 162 u^2 \[Beta]^3 - 144 \[Alpha] \[Beta]^3 + 
+ 168 u \[Alpha] \[Beta]^3 - 1224 \[Alpha]^2 \[Beta]^3 - 180 \[Beta]^4 + 
+ 444 u \[Beta]^4 + 864 \[Alpha] \[Beta]^4 + 360 \[Beta]^5
+
+ref2211 - csmXLam[{2, 2, 1, 1}]
diff --git a/slides/csm_slides_2017.pdf b/slides/csm_slides_2017.pdf
new file mode 100644
Binary files /dev/null and b/slides/csm_slides_2017.pdf differ
diff --git a/slides/motivic_slides_2018.pdf b/slides/motivic_slides_2018.pdf
new file mode 100644
Binary files /dev/null and b/slides/motivic_slides_2018.pdf differ
diff --git a/src/Math/RootLoci/Algebra.hs b/src/Math/RootLoci/Algebra.hs
--- a/src/Math/RootLoci/Algebra.hs
+++ b/src/Math/RootLoci/Algebra.hs
@@ -5,19 +5,17 @@
 -- to do
 --
 -- > import Math.RootLoci.Algebra
--- > import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+-- > import qualified Math.Algebra.Polynomial.FreeModule as ZMod
 --
 
 module Math.RootLoci.Algebra
   ( ZMod , QMod , FreeMod 
-  , module Math.RootLoci.Algebra.Polynomial
+--  , module Math.RootLoci.Algebra.Polynomial
   , module Math.RootLoci.Algebra.SymmPoly
---  , module ZMod                               -- apparently this does not work
   )
   where
 
-import Math.RootLoci.Algebra.FreeMod ( ZMod , QMod , FreeMod )
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import           Math.Algebra.Polynomial.FreeModule ( ZMod , QMod , FreeMod )
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
 
-import Math.RootLoci.Algebra.Polynomial
 import Math.RootLoci.Algebra.SymmPoly
diff --git a/src/Math/RootLoci/Algebra/FreeMod.hs b/src/Math/RootLoci/Algebra/FreeMod.hs
deleted file mode 100644
--- a/src/Math/RootLoci/Algebra/FreeMod.hs
+++ /dev/null
@@ -1,214 +0,0 @@
-
--- | Free modules. 
---
--- This module should be imported qualified
-
-{-# LANGUAGE BangPatterns, FlexibleInstances, TypeSynonymInstances #-}
-module Math.RootLoci.Algebra.FreeMod where
-
---------------------------------------------------------------------------------
-
-import Prelude   hiding ( sum , product )
-import Data.List hiding ( sum , product )
-
-import Data.Monoid
-import Data.Ratio
-import Data.Maybe
-
-import Math.Combinat.Sets ( choose )
-
-import qualified Data.Map.Strict as Map
-import Data.Map.Strict (Map)
-
---------------------------------------------------------------------------------
-
--- | Free module over a coefficient ring with the given base. Internally a map
--- storing the coefficients. We maintain the invariant that the coefficients
--- are never zero.
-newtype FreeMod coeff base = FreeMod { unFreeMod :: Map base coeff } deriving (Eq,Show)
-
--- | Free module with integer coefficients
-type ZMod base = FreeMod Integer  base
-
--- | Free module with rational coefficients
-type QMod base = FreeMod Rational base
-
---------------------------------------------------------------------------------
-
-instance (Monoid b, Ord b, Eq c, Num c) => Num (FreeMod c b) where
-  (+)    = add
-  (-)    = sub
-  negate = neg
-  (*)    = mul
-  fromInteger = konst . fromInteger
-  abs    = error "FreeMod/abs"
-  signum = error "FreeMod/signum"
-
---------------------------------------------------------------------------------
--- * Sanity checking
-
--- | Should be the identity function
-normalize :: (Ord b, Eq c, Num c) => FreeMod c b -> FreeMod c b
-normalize = FreeMod . Map.filter (/=0) . unFreeMod
-
--- | Safe equality testing (should be identical to @==@)
-safeEq :: (Ord b, Eq b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> Bool
-safeEq x y = normalize x == normalize y
-
---------------------------------------------------------------------------------
--- * Constructing and deconstructing
-
--- | The additive unit
-zero :: FreeMod c b
-zero = FreeMod $ Map.empty
-
--- | A module generator
-generator :: Num c => b -> FreeMod c b 
-generator x = FreeMod $ Map.singleton x 1
-
--- | A single generator with a coefficient
-singleton :: (Ord b) => b -> c -> FreeMod c b
-singleton b c = FreeMod $ Map.singleton b c
-
--- | Conversion from list. 
--- Note that we assume here that each generator appears at most once!
-fromList :: (Eq c, Num c, Ord b) => [(b,c)] -> FreeMod c b
-fromList = FreeMod . Map.fromList . filter cond where
-  cond (b,x) = (x/=0)
-
--- | Conversion to list 
-toList :: FreeMod c b -> [(b,c)]
-toList = Map.toList . unFreeMod
-
--- | Extract the coefficient of a generator
-coeffOf :: (Ord b, Num c) => b -> FreeMod c b -> c
-coeffOf b (FreeMod x) = case Map.lookup b x of
-  Just c  -> c
-  Nothing -> 0
-
--- | Finds the term with the largest generator (in the natural ordering of the generators)
-findMaxTerm :: (Ord b) => FreeMod c b -> Maybe (b,c)
-findMaxTerm (FreeMod m) = if Map.null m
-  then Nothing
-  else Just (Map.findMax m)
-
--- | Finds the term with the smallest generator (in the natural ordering of the generators)
-findMinTerm :: (Ord b) => FreeMod c b -> Maybe (b,c)
-findMinTerm (FreeMod m) = if Map.null m
-  then Nothing
-  else Just (Map.findMin m)
-
---------------------------------------------------------------------------------
--- * Basic operations
-
--- | Negation
-neg :: Num c => FreeMod c b -> FreeMod c b 
-neg (FreeMod m) = FreeMod (Map.map negate m)
-
--- | Additions
-add :: (Ord b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> FreeMod c b
-add (FreeMod m1) (FreeMod m2) = FreeMod (Map.mergeWithKey f id id m1 m2) where
-  f _ x y = case x+y of { 0 -> Nothing ; z -> Just z }
-
--- | Subtraction
-sub :: (Ord b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> FreeMod c b
-sub (FreeMod m1) (FreeMod m2) = FreeMod (Map.mergeWithKey f id (Map.map negate) m1 m2) where
-  f _ x y = case x-y of { 0 -> Nothing ; z -> Just z }
-
--- | Scaling by a number
-scale :: (Ord b, Eq c, Num c) => c -> FreeMod c b -> FreeMod c b
-scale 0 _           = zero
-scale x (FreeMod m) = FreeMod (Map.mapMaybe f m) where
-  f y = case x*y of { 0 -> Nothing ; z -> Just z }
-
--- | Dividing by a number (assuming that the coefficient ring is integral, and each coefficient
--- is divisible by the given number)
-invScale :: (Ord b, Eq c, Integral c, Show c) => c -> FreeMod c b -> FreeMod c b
-invScale d (FreeMod m) = FreeMod (Map.mapMaybe f m) where
-  f a = case divMod a d of
-    (b,0) -> case b of { 0 -> Nothing ; z -> Just z }
-    _     -> error $ "FreeMod/invScale: not divisible by " ++ show d
-
---------------------------------------------------------------------------------
-
--- | Summation
-sum :: (Ord b, Eq c, Num c) => [FreeMod c b] -> FreeMod c b
-sum []  = zero
-sum zms = (foldl1' add) zms
-
--- | Linear combination
-linComb :: (Ord b, Eq c, Num c) => [(c, FreeMod c b)] -> FreeMod c b
-linComb = sumWith where
-
-   sumWith :: (Ord b, Eq c, Num c) => [(c, FreeMod c b)] -> FreeMod c b
-   sumWith []  = zero
-   sumWith zms = sum [ scale c zm | (c,zm) <- zms ]
-
--- | Expand each generator into a term in another module and then sum the results
-flatMap :: (Ord b1, Ord b2, Eq c, Num c) => (b1 -> FreeMod c b2) -> FreeMod c b1 -> FreeMod c b2
-flatMap f = sum . map g . Map.assocs . unFreeMod where
-  g (x,c) = scale c (f x)
-
-flatMap' :: (Ord b1, Ord b2, Eq c2, Num c2) => (c1 -> c2) -> (b1 -> FreeMod c2 b2) -> FreeMod c1 b1 -> FreeMod c2 b2
-flatMap' embed f = sum . map g . Map.assocs . unFreeMod where
-  g (x,c) = scale (embed c) (f x)
-
--- | The histogram of a multiset of generators is naturally an element of the given Z-module.
-{-# SPECIALIZE histogram :: Ord b => [b] -> ZMod b #-} 
-histogram :: (Ord b, Num c) => [b] -> FreeMod c b
-histogram xs = FreeMod $ foldl' f Map.empty xs where
-  f old x = Map.insertWith (+) x 1 old
-  
---------------------------------------------------------------------------------
--- * Rings
-
--- | The multiplicative unit
-one :: (Monoid b, Num c) => FreeMod c b
-one = konst 1
-
--- | A constant
-konst :: (Monoid b) => c -> FreeMod c b
-konst c = FreeMod (Map.singleton mempty c)
-
--- | Multiplying two ring elements
-mul :: (Ord b, Monoid b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> FreeMod c b
-mul xx yy = sum [ (f x c) | (x,c) <- toList xx ] where
-  f x c = FreeMod $ Map.fromList [ (x<>y, cd) | (y,d) <- ylist , let cd = c*d , cd /= 0 ]
-  ylist = toList yy
-
--- | Product
-product :: (Ord b, Monoid b, Eq c, Num c) => [FreeMod c b] -> FreeMod c b
-product []  = generator mempty
-product xs  = foldl1' mul xs
-
--- | Multiplies by a monomial
-mulMonom :: (Ord b, Monoid b) => b -> FreeMod c b -> FreeMod c b
-mulMonom monom = FreeMod . Map.mapKeys (mappend monom) . unFreeMod
-
---------------------------------------------------------------------------------
--- * Misc
-
--- | A symmetric polynomial of some generators
-symPoly :: (Ord a, Monoid a) => Int -> [a] -> ZMod a
-symPoly k xs = fromList $ map (\x -> (x,1)) $ (map mconcat $ choose k xs) 
-
--- | Changing the base set
-mapBase :: (Ord a, Ord b) => (a -> b) -> FreeMod c a -> FreeMod c b
-mapBase f = onFreeMod (Map.mapKeys f)
-
--- | Changing the coefficient ring
-mapCoeff :: (Ord b) => (c1 -> c2) -> FreeMod c1 b -> FreeMod c2 b
-mapCoeff f = onFreeMod' (Map.map f)
-
--- | Extract a subset of terms
-filterBase :: (Ord a, Ord b) => (a -> Maybe b) -> FreeMod c a -> FreeMod c b
-filterBase f = onFreeMod (Map.fromList . mapMaybe g . Map.toList) where
-  g (k,x) = case f k of { Just k' -> Just (k',x) ; Nothing -> Nothing }
-
-onFreeMod :: (Ord a, Ord b) => (Map a c -> Map b c) -> FreeMod c a -> FreeMod c b
-onFreeMod f = FreeMod . f . unFreeMod
-
-onFreeMod' :: (Ord a, Ord b) => (Map a c -> Map b d) -> FreeMod c a -> FreeMod d b
-onFreeMod' f = FreeMod . f . unFreeMod
-
---------------------------------------------------------------------------------
diff --git a/src/Math/RootLoci/Algebra/Polynomial.hs b/src/Math/RootLoci/Algebra/Polynomial.hs
deleted file mode 100644
--- a/src/Math/RootLoci/Algebra/Polynomial.hs
+++ /dev/null
@@ -1,102 +0,0 @@
-
--- | Univariate polynomials
-
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Math.RootLoci.Algebra.Polynomial where
-
---------------------------------------------------------------------------------
-
-import Data.Array ( assocs ) 
-
-import Math.Combinat.Numbers
-
-import Math.RootLoci.Misc
-
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
-import Math.RootLoci.Algebra.FreeMod ( FreeMod , ZMod , QMod )
-
---------------------------------------------------------------------------------
--- * Polynomials
-
--- | Standard univariate polynomials
-newtype Poly coeff = Poly { fromPoly :: FreeMod coeff X } deriving (Eq,Num,Show)
-
--- | Univariate polynomials using /rising factorials/ as a basis function
-newtype RisingPoly  coeff = RisingPoly  { fromRisingPoly  :: FreeMod coeff RisingF }  deriving (Eq,Show)
-
--- | Univariate polynomials using /falling factorials/ as a basis function
-newtype FallingPoly coeff = FallingPoly { fromFallingPoly :: FreeMod coeff FallingF } deriving (Eq,Show)
-
-instance (Num c, Show c, Eq c, IsSigned c) => Pretty (Poly        c) where pretty (Poly        p) = pretty p 
-instance (Num c, Show c, Eq c, IsSigned c) => Pretty (RisingPoly  c) where pretty (RisingPoly  p) = pretty p 
-instance (Num c, Show c, Eq c, IsSigned c) => Pretty (FallingPoly c) where pretty (FallingPoly p) = pretty p 
-
---------------------------------------------------------------------------------
--- * Monomials 
-
--- | A power of @x@ (that is, a monomial of the form @x^i@)
-newtype X = X Int deriving (Eq,Ord,Show)
-
-instance Monoid X where
-  mempty = X 0
-  mappend (X e) (X f) = X (e+f)
-
-instance Pretty X where
-  pretty (X e) = case e of
-    0 -> "1"
-    1 -> "x"
-    _ -> "x^" ++ show e
-
---------------------------------------------------------------------------------
--- * Rising and falling factorials 
-
--- | Rising factorial @x^(k) = x(x+1)(x+2)...(x+k-1)@
-newtype RisingF = RF Int deriving (Eq,Ord,Show)
-
--- | Falling factorial @x_(k) = x(x-1)(x-2)...(x-k+1)@
-newtype FallingF = FF Int deriving (Eq,Ord,Show)
-
-instance Pretty RisingF where
-  pretty (RF k) = case k of
-    0 -> "1"
-    1 -> "x"
-    _ -> "x^(" ++ show k ++ ")"
-
-instance Pretty FallingF where
-  pretty (FF k) = case k of
-    0 -> "1"
-    1 -> "x"
-    _ -> "x_(" ++ show k ++ ")"
-
-risingPoly :: RisingF -> Poly Integer
-risingPoly (RF k) = Poly $ ZMod.fromList
-  [ (X p, abs c) | (p,c) <- assocs (signedStirling1stArray k) ]
-
-fallingPoly :: FallingF -> Poly Integer
-fallingPoly (FF k) = Poly $ ZMod.fromList
-  [ (X p,     c) | (p,c) <- assocs (signedStirling1stArray k) ]
-
---------------------------------------------------------------------------------
--- * Lagrange interpolation
-
-lagrangeInterp :: [(Rational,Rational)] -> Poly Rational
-lagrangeInterp = Poly . lagrangeInterp'
-
-lagrangeInterp' :: [(Rational,Rational)] -> QMod X
-lagrangeInterp' xys = final where
-  final = ZMod.sum [ ZMod.scale (ys!!j) (lagrangePoly' xs j) | j<-[0..m-1] ]  where
-  m = length xys
-  (xs,ys) = unzip xys
-
-lagrangePoly' :: [Rational] -> Int -> QMod X
-lagrangePoly' xs j = ZMod.scale (1/denom) numer where
-  numer  = ZMod.product [ term i    | i<-[0..m-1] , i /= j ]
-  denom  = product      [ x j - x i | i<-[0..m-1] , i /= j ]
-  m      = length xs
-  x i    = xs !! i
-  term i = ZMod.fromList 
-    [ (X 1 ,     1 )
-    , (X 0 , - x i )
-    ]
-
---------------------------------------------------------------------------------
diff --git a/src/Math/RootLoci/Algebra/SymmPoly.hs b/src/Math/RootLoci/Algebra/SymmPoly.hs
--- a/src/Math/RootLoci/Algebra/SymmPoly.hs
+++ b/src/Math/RootLoci/Algebra/SymmPoly.hs
@@ -30,28 +30,43 @@
 --
 
 
-{-# LANGUAGE DataKinds, TypeFamilies, Rank2Types, GADTs, StandaloneDeriving #-}
+{-# LANGUAGE BangPatterns, DataKinds, TypeFamilies, Rank2Types, GADTs, StandaloneDeriving #-}
 module Math.RootLoci.Algebra.SymmPoly where
 
 --------------------------------------------------------------------------------
 
-import Data.Proxy
+import Control.Monad
+import Data.List
 
+-- Semigroup became a superclass of Monoid
+#if MIN_VERSION_base(4,11,0)     
+import Data.Foldable
+import Data.Semigroup
+#endif
+
+import System.Random       -- testing only
+
 import Math.Combinat.Sign
 import Math.Combinat.Numbers
+import Math.Combinat.Sets ( choose ) 
 
 import qualified Data.Map.Strict as Map
 
-import Control.Monad
-import System.Random
+import Data.Array ( Array )
+import Data.Array.IArray
 
-import Math.RootLoci.Algebra.FreeMod (ZMod)
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import Math.Algebra.Polynomial.FreeModule (ZMod)
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
 
-import Math.RootLoci.Misc.Pretty
+import Math.RootLoci.Misc.Common
+import Math.Algebra.Polynomial.Pretty
 
-import Unsafe.Coerce as Unsafe
+--------------------------------------------------------------------------------
 
+-- | An elementary symmetric polynomial of some generators
+symPoly :: (Ord a, Monoid a) => Int -> [a] -> ZMod a
+symPoly k xs = ZMod.fromList $ map (\x -> (x,1)) $ (map mconcat $ choose k xs) 
+
 --------------------------------------------------------------------------------
 -- * Base monomials
 
@@ -185,8 +200,31 @@
 
 --------------------------------------------------------------------------------
 
+-- Semigroup became a superclass of Monoid
+#if MIN_VERSION_base(4,11,0)        
+
+instance Semigroup AB where
+  (AB a1 b1) <> (AB a2 b2) = AB (a1+a2) (b1+b2)
+
+instance Semigroup Chern where
+  (Chern e1 f1) <> (Chern e2 f2) = Chern (e1+e2) (f1+f2)
+
+instance Semigroup Schur where
+  (<>) = error "Schur/mappend: not a monoid"
+
 instance Monoid AB where
   mempty = AB 0 0 
+
+instance Monoid Chern where
+  mempty = Chern 0 0 
+
+instance Monoid Schur where
+  mempty  = Schur 0 0
+
+#else
+
+instance Monoid AB where
+  mempty = AB 0 0 
   (AB a1 b1) `mappend` (AB a2 b2) = AB (a1+a2) (b1+b2)
 
 instance Monoid Chern where
@@ -197,6 +235,8 @@
   mempty  = Schur 0 0
   mappend = error "Schur/mappend: not a monoid"
 
+#endif
+
 --------------------------------------------------------------------------------
 
 instance Pretty AB where
@@ -227,9 +267,20 @@
 instance Graded Chern where grade (Chern e f) = e + 2*f
 instance Graded Schur where grade (Schur i j) = i + j
 
+-- | Filters out the given grade
 filterGrade :: (Ord b, Graded b) => Int -> ZMod b -> ZMod b
 filterGrade g = ZMod.onFreeMod filt where
   filt = Map.filterWithKey $ \x _ -> (grade x == g)
+
+-- | Separates the different grades
+separateGradedParts :: (Ord b, Graded b) => ZMod b -> Array Int (ZMod b)
+separateGradedParts input = arr where
+  table = foldl' worker Map.empty (ZMod.toList input) 
+  worker !old (base,coeff) = insertMap (:[]) (:) (grade base) (base,coeff) old
+  size  = if Map.null table then 0 else fst (Map.findMax table)
+  arr   = listArray (0,size) 
+            [ ZMod.fromList (Map.findWithDefault [] d table) 
+            | d <- [0..size] ]
 
 --------------------------------------------------------------------------------
 -- * Conversions
diff --git a/src/Math/RootLoci/CSM/Aluffi.hs b/src/Math/RootLoci/CSM/Aluffi.hs
--- a/src/Math/RootLoci/CSM/Aluffi.hs
+++ b/src/Math/RootLoci/CSM/Aluffi.hs
@@ -30,14 +30,14 @@
 import Math.RootLoci.Classic
 import Math.RootLoci.Misc
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
 
 --------------------------------------------------------------------------------
 -- * CSM computation
 
 -- | Paolo Aluffi's explicit formula for the (non-equivariant) CSM of open coincident root loci
 aluffiOpenCSM :: Partition -> ZMod G
-aluffiOpenCSM part@(Partition ps) = ZMod.invScale (aut part) xsum where
+aluffiOpenCSM part@(Partition ps) = ZMod.divideByConst (aut part) xsum where
   n = sum ps
   d = length ps
   xsum = ZMod.fromList [ ( G (n-d+k) , coeff k ) | k<-[0..d] ] 
diff --git a/src/Math/RootLoci/CSM/Equivariant/Direct.hs b/src/Math/RootLoci/CSM/Equivariant/Direct.hs
--- a/src/Math/RootLoci/CSM/Equivariant/Direct.hs
+++ b/src/Math/RootLoci/CSM/Equivariant/Direct.hs
@@ -29,7 +29,7 @@
 import Math.RootLoci.Geometry
 import Math.RootLoci.Misc
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
 
 import Math.RootLoci.CSM.Equivariant.PushForward
 import qualified Math.RootLoci.CSM.Equivariant.Ordered as Ordered
@@ -47,14 +47,14 @@
   directCalcOpenCSM :: ChernBase base => Partition -> ZMod (Gam base)
   directCalcOpenCSM part@(Partition xs) = result where
     m = partitionWeight part
-    result   = ZMod.invScale (aut part) $ pi_star m middle
+    result   = ZMod.divideByConst (aut part) $ pi_star m middle
     middle   = delta_star_ part distinct
     distinct = Ordered.formulaDistinctCSM (length xs)
 
 --------------------------------------------------------------------------------
 
 -- | To compute the CSM of the closed loci, we just some over the open strata
--- in the closure.
+-- in the closure 
 directClosedCSM :: ChernBase base => Partition -> ZMod (Gam base)
 directClosedCSM = polyCache2 calc where
   
@@ -62,4 +62,3 @@
   calc part = ZMod.sum [ directOpenCSM q | q <- Set.toList (closureSet part) ] 
 
 --------------------------------------------------------------------------------
-
diff --git a/src/Math/RootLoci/CSM/Equivariant/Ordered.hs b/src/Math/RootLoci/CSM/Equivariant/Ordered.hs
--- a/src/Math/RootLoci/CSM/Equivariant/Ordered.hs
+++ b/src/Math/RootLoci/CSM/Equivariant/Ordered.hs
@@ -43,6 +43,12 @@
 
 --------------------------------------------------------------------------------
 
+-- Semigroup became a superclass of Monoid
+#if MIN_VERSION_base(4,11,0)     
+import Data.Foldable
+import Data.Semigroup
+#endif
+
 import Math.Combinat.Classes
 import Math.Combinat.Numbers
 import Math.Combinat.Sign
@@ -56,7 +62,7 @@
 
 import qualified Data.Set as Set ; import Data.Set (Set)
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
 
 import Math.RootLoci.CSM.Equivariant.PushForward
 
@@ -181,10 +187,22 @@
 -- | A formal monomial @q^k@
 newtype QPow = QPow Int deriving (Eq,Ord,Show)
 
+#if MIN_VERSION_base(4,11,0)     
+
+instance Semigroup QPow where
+  (<>) (QPow e) (QPow f) = QPow (e+f)
+
 instance Monoid QPow where
   mempty = QPow 0
+
+#else
+
+instance Monoid QPow where
+  mempty = QPow 0
   mappend (QPow e) (QPow f) = QPow (e+f)
 
+#endif
+
 instance Pretty QPow where
   pretty (QPow k) = showVarPower "q" k
 
@@ -217,7 +235,7 @@
                 , (monom [1,2] (-3) , 2)
                 ]
   | n >= 3  = ZMod.sum
-                [ ZMod.scale coeff $ (ZMod.symPoly (n-3-k) us) * (ZMod.generator $ monom [] k)
+                [ ZMod.scale coeff $ (symPoly (n-3-k) us) * (ZMod.generator $ monom [] k)
                 | k<-[0..n-3]
                 , let coeff = negateIfOdd (n-3+k) (factorial (n-3) `div` factorial k)
                 ]
@@ -270,7 +288,7 @@
 {-
       smaller = ZMod.sum 
         [ ZMod.scale coeff $ 
-            (ZMod.symPoly (n-k) us) * (embed $ computeQPolys k)
+            (symPoly (n-k) us) * (embed $ computeQPolys k)
         | k<-[0..n-1]
         , let coeff = negateIfOdd (n+k) (factorial n `div` factorial k)
         ]
diff --git a/src/Math/RootLoci/CSM/Equivariant/PushForward.hs b/src/Math/RootLoci/CSM/Equivariant/PushForward.hs
--- a/src/Math/RootLoci/CSM/Equivariant/PushForward.hs
+++ b/src/Math/RootLoci/CSM/Equivariant/PushForward.hs
@@ -47,7 +47,7 @@
 import Math.RootLoci.Geometry
 import Math.RootLoci.Misc
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
 
 --------------------------------------------------------------------------------
 -- * The function tau
@@ -94,7 +94,7 @@
     full = ZMod.generator (Eta ks mempty)      -- == sigma_n(eta)
     rest = ZMod.sum [ sigma (n-i) * tauEta (i-2) * ab | i<-[2..n] ]
 
-    sigma k = ZMod.symPoly k [ Eta [k] mempty | k<-ks ]
+    sigma k = symPoly k [ Eta [k] mempty | k<-ks ]
   
 -- | a group generator on the left is a subset (=product) of U-s, which
 -- we map to a linear combinaton of H-s
@@ -224,7 +224,7 @@
 
   g :: Integer -> ZMod (Gam Chern) -> ZMod (Gam Chern) -> ZMod (Gam Chern)
   g k prev1 prev2 
-    = ZMod.invScale (mm-k)
+    = ZMod.divideByConst (mm-k)
     $ mulGam prev1 + ZMod.scale k (mulInjMonom c1 prev1) 
                    + ZMod.scale k (mulInjMonom c2 prev2) 
 
@@ -245,9 +245,9 @@
 
   g :: Integer -> ZMod Chern -> ZMod Chern -> ZMod Chern
   g k prev1 prev2 
-    = ZMod.invScale (mm-k)
-    $ ZMod.scale    (   k)
-    $ (ZMod.mulMonom c1 prev1 + ZMod.mulMonom c2 prev2) 
+    = ZMod.divideByConst (mm-k)
+    $ ZMod.scale         (   k)
+    $ (ZMod.mulByMonom c1 prev1 + ZMod.mulByMonom c2 prev2) 
 
   mm = fromIntegral m :: Integer
 
diff --git a/src/Math/RootLoci/CSM/Equivariant/Recursive.hs b/src/Math/RootLoci/CSM/Equivariant/Recursive.hs
--- a/src/Math/RootLoci/CSM/Equivariant/Recursive.hs
+++ b/src/Math/RootLoci/CSM/Equivariant/Recursive.hs
@@ -31,7 +31,7 @@
 import Math.RootLoci.Geometry
 import Math.RootLoci.Misc
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
 
 --------------------------------------------------------------------------------
 -- * CSM calculation
@@ -66,7 +66,7 @@
 openCSM = polyCache2 calcOpenCSM where
 
   calcOpenCSM :: ChernBase base => Partition -> ZMod (Gam base)
-  calcOpenCSM part = ZMod.invScale thisCoeff (pushdown `ZMod.sub` smaller) where
+  calcOpenCSM part = ZMod.divideByConst thisCoeff (pushdown `ZMod.sub` smaller) where
     n = partitionWeight part
     pushdown  = lowerClass part
     smaller   = ZMod.linComb [ (c , openCSM q) | (q,c) <- Map.assocs theClosure ]
diff --git a/src/Math/RootLoci/CSM/Equivariant/Umbral.hs b/src/Math/RootLoci/CSM/Equivariant/Umbral.hs
--- a/src/Math/RootLoci/CSM/Equivariant/Umbral.hs
+++ b/src/Math/RootLoci/CSM/Equivariant/Umbral.hs
@@ -19,6 +19,12 @@
 
 --------------------------------------------------------------------------------
 
+-- Semigroup became a superclass of Monoid
+#if MIN_VERSION_base(4,11,0)     
+import Data.Foldable
+import Data.Semigroup
+#endif
+
 import Math.Combinat.Classes
 import Math.Combinat.Numbers
 import Math.Combinat.Partitions.Integer
@@ -31,8 +37,11 @@
 import Math.RootLoci.Geometry
 import Math.RootLoci.Misc
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import Math.Algebra.Polynomial.Misc ( IsSigned(..) ) 
+import Math.Algebra.Polynomial.Pretty
 
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
+
 import Math.RootLoci.CSM.Equivariant.PushForward ( tau , piStarTableAff , piStarTableProj )
 import Math.RootLoci.CSM.Equivariant.Ordered     ( formulaQPoly )
 
@@ -46,10 +55,23 @@
   = ST !Int !Int
   deriving (Eq,Ord,Show)
 
+-- Semigroup became a superclass of Monoid
+#if MIN_VERSION_base(4,11,0)     
+
+instance Semigroup ST where
+  (ST s1 t1) <> (ST s2 t2) = ST (s1+s2) (t1+t2)
+
 instance Monoid ST where
   mempty = ST 0 0 
+
+#else
+
+instance Monoid ST where
+  mempty = ST 0 0 
   (ST s1 t1) `mappend` (ST s2 t2) = ST (s1+s2) (t1+t2)
 
+#endif
+
 instance Pretty ST where
   pretty st = case st of
     ST 0 0 -> "" 
@@ -57,7 +79,7 @@
     ST 0 f -> showVarPower "t" f
     ST e f -> showVarPower "s" e ++ "*" ++ showVarPower "t" f
 
-prettyMixedST :: forall b c. (Pretty b, Num c, Eq c, IsSigned c, Show c) => FreeMod (FreeMod c b) ST -> String
+prettyMixedST :: forall b c. (Pretty b, Num c, Eq c, IsSigned c, Pretty c) => FreeMod (FreeMod c b) ST -> String
 prettyMixedST = prettyFreeMod'' prettyInner pretty where
 
   prettyInner :: FreeMod c b -> String
@@ -78,8 +100,8 @@
   | otherwise = error "theta: non-positive input"
   where
  
-    term0 =  [ (ST 0 i , ZMod.scale (binomial p i) (                         tau (p-i-1)) ) | i<-[0..p-1] ]
-    term1 =  [ (ST 1 i , ZMod.scale (binomial p i) (ZMod.mulMonom c2_monom $ tau (p-i-2)) ) | i<-[0..p-2] ] 
+    term0 =  [ (ST 0 i , ZMod.scale (binomial p i) (                           tau (p-i-1)) ) | i<-[0..p-1] ]
+    term1 =  [ (ST 1 i , ZMod.scale (binomial p i) (ZMod.mulByMonom c2_monom $ tau (p-i-2)) ) | i<-[0..p-2] ] 
           ++ [ (ST 1 p , ZMod.konst (-1) ) ]
 
     c2_monom = select0 (alphaBeta,c2)
@@ -107,6 +129,25 @@
 --------------------------------------------------------------------------------
 -- * The affine CSM
 
+-- | Weights of the representation @Sym^m C^2@
+affineWeights :: Int -> [ZMod AB]
+affineWeights m = 
+  [ ZMod.fromList [ ( AB 1 0 , fi (m-j) ) , ( AB 0 1 , fi j ) ]
+  | j <- [0..m]
+  ]
+  where
+    fi :: Int -> Integer
+    fi = fromIntegral
+
+-- | The top Chern class of the representation is just the product of weights.
+-- This represents the zero orbit, and we need to add this to the closure in the
+-- affine case!
+topChernClass :: ChernBase base => Int -> ZMod base
+topChernClass m = select1 (total , abToChern total) where
+  total = product [ w | w <- affineWeights m ]
+
+--------------------------------------------------------------------------------
+
 -- | The polynomial to be substituted in the place of @s^k*t^j@:
 --
 -- > s^k*t^j  ->  P_j(m) * Q_k(n-3-k) * (n-3)_k
@@ -144,18 +185,25 @@
   -- the current umbral formula only works for @n >= 3@ ??
   calc mu 
     | n < 3     = forgetGamma (Direct.directOpenCSM mu)
-    | otherwise = ZMod.invScale (aut mu)
+    | otherwise = ZMod.divideByConst (aut mu)
                 $ umbralSubstitutionAff mu
                 $ integralUmbralFormula mu
     where
       n = numberOfParts mu
 
--- | Sum over the strata in the closure
+--------------------------------------------------------------------------------
+
+-- | CSM class of the zero orbit (which is just the top Chern class)
+affineZeroCSM :: ChernBase base => Int -> ZMod base
+affineZeroCSM m = topChernClass m
+
+-- | Sum over the strata in the closure (including the zero orbit!)
 umbralAffClosedCSM :: ChernBase base => Partition -> ZMod base   
 umbralAffClosedCSM = polyCache1 calc where
   
   calc :: ChernBase base => Partition -> ZMod base
-  calc part = ZMod.sum [ umbralAffOpenCSM q | q <- Set.toList (closureSet part) ] 
+  calc part = affineZeroCSM (weight part)
+            + ZMod.sum [ umbralAffOpenCSM q | q <- Set.toList (closureSet part) ] 
 
 --------------------------------------------------------------------------------
 -- * The projective CSM
@@ -198,7 +246,7 @@
   -- the current umbral formula only works for @n >= 3@ ??
   calc mu 
     | n < 3     = Direct.directOpenCSM mu     
-    | otherwise = ZMod.invScale (aut mu)
+    | otherwise = ZMod.divideByConst (aut mu)
                 $ umbralSubstitutionProj mu
                 $ integralUmbralFormula mu
     where
diff --git a/src/Math/RootLoci/CSM/Projective.hs b/src/Math/RootLoci/CSM/Projective.hs
--- a/src/Math/RootLoci/CSM/Projective.hs
+++ b/src/Math/RootLoci/CSM/Projective.hs
@@ -39,7 +39,7 @@
 import Math.RootLoci.Geometry
 import Math.RootLoci.Misc
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
  
 --------------------------------------------------------------------------------
 
@@ -171,7 +171,7 @@
 
   -- | we know that (pi_* upperCSM) = sum (chi * openCSM)
   calcOpenCSM :: Partition -> ZMod G
-  calcOpenCSM part = ZMod.invScale thisCoeff (pushdown - smaller) where
+  calcOpenCSM part = ZMod.divideByConst thisCoeff (pushdown - smaller) where
     n = partitionWeight part
     pushdown  = lowerCSM part -- pi_star n (upperCSM part) 
     smaller   = ZMod.linComb [ (c , openCSM q) | (q,c) <- Map.assocs theClosure ]
diff --git a/src/Math/RootLoci/Classic.hs b/src/Math/RootLoci/Classic.hs
--- a/src/Math/RootLoci/Classic.hs
+++ b/src/Math/RootLoci/Classic.hs
@@ -70,21 +70,67 @@
 -- check_hilbert2 = and [ hilbert p == hilbert2 p | n<-[0..20] , p<-partitions n ]
 
 --------------------------------------------------------------------------------
--- * Schubert
+-- * Enumerative geometry
 
--- | Number of 4-tangent lines to a generic degree @d@ surface 
-quadTangentLines :: Int -> Integer
-quadTangentLines d0
+-- | The degree of the dual curve is @d(d-1)@
+degreeOfDualCurve :: Int -> Integer
+degreeOfDualCurve d0 
+  | d < 2     = 0
+  | otherwise = d*(d-1) 
+  where
+    d = fromIntegral d0 :: Integer
+
+-- | Number of flex lines to a generic degree @d@ plane curve
+numberOfCurveFlexes :: Int -> Integer
+numberOfCurveFlexes d0
+  | d < 3     = 0
+  | otherwise = 3*d*(d-2)
+  where
+    d = fromIntegral d0 :: Integer
+
+-- | Number of bitangent lines to a generic degree @d@ plane curve
+numberOfCurveBiTangents :: Int -> Integer
+numberOfCurveBiTangents d0
+  | d < 3     = 0
+  | otherwise = div ((-3 + d)* (-2 + d)* d* (3 + d)) 2 
+  where
+    d = fromIntegral d0 :: Integer
+
+-- | Number of 4-tangent lines to a generic degree @d@ surface (Schubert)
+numberOfSurface4xTangents :: Int -> Integer
+numberOfSurface4xTangents d0
   | d < 8     = 0
   | otherwise = d * (d - 4) * (d - 5) * (d - 6) * (d - 7) * (d^3 + 6*d^2 + 7*d - 30)
   where
     d = fromIntegral d0 :: Integer
 
 -- | Number of lines meeting a generic degree @d@ surface at point with 5x multiplicity
-quintFlexLines :: Int -> Integer
-quintFlexLines d0
+numberOfSurface5xHyperflexes :: Int -> Integer
+numberOfSurface5xHyperflexes d0
   | d < 5     = 0
-  | otherwise = error "quintFlexLines"
+  | otherwise = (35*d^3 - 200*d^2 + 240*d)
+  where
+    d = fromIntegral d0 :: Integer
+
+-- | Bidegree of bitangent locus of a generic hypersurface
+-- 
+-- (See: Kathlen Kohn, Bernt Ivar Utstol Nodland, Paolo Tripoli: Secants, bitangents, and their congruences)
+--
+bidegreeOfSurfaceBiTangents :: Int -> (Integer,Integer)
+bidegreeOfSurfaceBiTangents d0 
+  | d < 4     = ( 0 , 0 )
+  | otherwise = ( div (d*(d-1)*(d-2)*(d-3)) 2 , div (d*(d-2)*(d-3)*(d+3)) 2 )
+  where
+    d = fromIntegral d0 :: Integer
+
+-- | Bidegree of the flex locus of a generic hypersurface
+--
+-- (See: Kathlen Kohn, Bernt Ivar Utstol Nodland, Paolo Tripoli: Secants, bitangents, and their congruences)
+--
+bidegreeOfSurfaceFlexes :: Int -> (Integer,Integer)
+bidegreeOfSurfaceFlexes d0
+  | d < 4     = ( 0 , 0 ) 
+  | otherwise = ( d*(d-1)*(d-3) , 3*d*(d-2) )
   where
     d = fromIntegral d0 :: Integer
 
diff --git a/src/Math/RootLoci/Dual/Localization.hs b/src/Math/RootLoci/Dual/Localization.hs
--- a/src/Math/RootLoci/Dual/Localization.hs
+++ b/src/Math/RootLoci/Dual/Localization.hs
@@ -11,6 +11,7 @@
 -- out the result (we know a priori that it is a homogenenous polynomial
 -- in @alpha@ and @beta@).
 
+{-# LANGUAGE DataKinds #-}
 module Math.RootLoci.Dual.Localization where
 
 --------------------------------------------------------------------------------
@@ -27,13 +28,23 @@
 
 import qualified Data.Map as Map
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
 
+import Math.Algebra.Polynomial.Univariate
+import Math.Algebra.Polynomial.Univariate.Lagrange
+
 import Math.RootLoci.Algebra
 import Math.RootLoci.Classic
 
 --------------------------------------------------------------------------------
 
+type X = U "x"
+
+mkX :: Int -> X
+mkX = U
+
+--------------------------------------------------------------------------------
+
 -- | The localization formula as a string which Mathematica can parse
 localizeMathematica :: Partition -> String
 localizeMathematica (Partition xs) = formula where
@@ -86,7 +97,7 @@
 localizeDual :: Partition -> ZMod AB
 localizeDual part = ZMod.mapBase worker $ localizeInterpolatedZ part where
   c = codim part
-  worker (X i) = AB (c-i) i 
+  worker (U i) = AB (c-i) i 
 
 -- | We can use Lagrange interpolation to express the dual class from the
 -- localization formula (since we know a priori that the result is a homogeneous
@@ -97,7 +108,7 @@
   codim = sum xs - length xs
   bs = map fromIntegral [ 2..codim+2 ]    :: [Rational]
   qs = [ localizeEval part 1 b | b<-bs ] :: [Rational]
-  final = lagrangeInterp' (zip bs qs)
+  final = unUni $ lagrangeInterp (zip bs qs)
 
 localizeInterpolatedZ :: Partition -> ZMod X
 localizeInterpolatedZ = (ZMod.mapCoeff f . localizeInterpolatedQ) where
diff --git a/src/Math/RootLoci/Dual/Restriction.hs b/src/Math/RootLoci/Dual/Restriction.hs
--- a/src/Math/RootLoci/Dual/Restriction.hs
+++ b/src/Math/RootLoci/Dual/Restriction.hs
@@ -27,7 +27,7 @@
 
 import qualified Data.Set as Set ; import Data.Set (Set)
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
 
 import Math.RootLoci.Algebra
 import Math.RootLoci.Classic
@@ -144,7 +144,7 @@
 
 -- | The dual class of the closure agress with the lowest degree part of the CSM class.
 dualClassFromProjCSM :: forall base. ChernBase base => ZMod (Gam base) -> ZMod base
-dualClassFromProjCSM csm = dualClassFromAffCSM (ZMod.filterBase nogamma csm) where
+dualClassFromProjCSM csm = dualClassFromAffCSM (ZMod.mapMaybeBase nogamma csm) where
   nogamma :: Gam base -> Maybe base
   nogamma (Gam k ab) = if k==0 then Just ab else Nothing
 
diff --git a/src/Math/RootLoci/Geometry/Cohomology.hs b/src/Math/RootLoci/Geometry/Cohomology.hs
--- a/src/Math/RootLoci/Geometry/Cohomology.hs
+++ b/src/Math/RootLoci/Geometry/Cohomology.hs
@@ -23,16 +23,22 @@
 import Data.List
 import Data.Monoid
 
+-- Semigroup became a superclass of Monoid
+#if MIN_VERSION_base(4,11,0)     
+import Data.Foldable
+import Data.Semigroup
+#endif
+
 import Math.Combinat.Numbers
 
 import qualified Data.Map as Map
 import qualified Data.Set as Set
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
-import Math.RootLoci.Algebra.FreeMod ( ZMod , FreeMod(..) , unFreeMod )
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
+import Math.Algebra.Polynomial.FreeModule ( ZMod , FreeMod(..) , unFreeMod )
 
 import Math.RootLoci.Algebra.SymmPoly 
-import Math.RootLoci.Misc.Pretty
+import Math.Algebra.Polynomial.Pretty
 
 --------------------------------------------------------------------------------
 -- * The non-equivariant case
@@ -54,8 +60,41 @@
 
 --------------------------------------------------------------------------------
 
+-- Semigroup became a superclass of Monoid
+#if MIN_VERSION_base(4,11,0)     
+
+instance Semigroup US where
+  (US us1) <> (US us2) = 
+    if nub us3 == us3
+      then US us3
+      else error "[U]/monoid: duplicate indices"
+    where
+      us3 = sort (us1 ++ us2)
+
+instance Semigroup HS where
+  (HS hs1) <> (HS hs2) = 
+    if nub hs3 == hs3
+      then HS hs3
+      else error "[H]/monoid: duplicate indices"
+    where
+      hs3 = sort (hs1 ++ hs2)
+
+instance Semigroup G where
+  (G e) <> (G f) = G (e+f)
+
 instance Monoid US where
   mempty = US []
+
+instance Monoid HS where
+  mempty = HS []
+
+instance Monoid G where
+  mempty = G 0
+
+#else
+
+instance Monoid US where
+  mempty = US []
   (US us1) `mappend` (US us2) = 
     if nub us3 == us3
       then US us3
@@ -75,6 +114,8 @@
 instance Monoid G where
   mempty = G 0
   (G e) `mappend` (G f) = G (e+f)
+
+#endif
  
 --------------------------------------------------------------------------------
 
@@ -149,13 +190,13 @@
 injectZMod = ZMod.mapBase injectMonom
 
 forgetGamma :: Ord base => ZMod (Gam base) -> ZMod base 
-forgetGamma = ZMod.filterBase f where
+forgetGamma = ZMod.mapMaybeBase f where
   f (Gam k ab) = case k of
     0 -> Just ab
     _ -> Nothing
 
 forgetEquiv :: ChernBase base => ZMod (Gam base) -> ZMod G
-forgetEquiv = ZMod.filterBase f where
+forgetEquiv = ZMod.mapMaybeBase f where
   f (Gam k ab) = if (ab == mempty) 
     then Just (G k)
     else Nothing
@@ -211,18 +252,50 @@
 --------------------------------------------------------------------------------
 
 -- | This is a hack to reuse the same pushforward code
-unsafeEtaToOmega :: Ord ab => FreeMod coeff (Eta ab) -> FreeMod coeff (Omega ab)
+unsafeEtaToOmega :: (Eq coeff, Num coeff, Ord ab) => FreeMod coeff (Eta ab) -> FreeMod coeff (Omega ab)
 unsafeEtaToOmega = ZMod.mapBase f where
   f (Eta js ab) = Omega js ab
 
-unsafeOmegaToEta :: Ord ab => FreeMod coeff (Omega ab) -> FreeMod coeff (Eta ab)
+unsafeOmegaToEta :: (Eq coeff, Num coeff, Ord ab) => FreeMod coeff (Omega ab) -> FreeMod coeff (Eta ab)
 unsafeOmegaToEta = ZMod.mapBase f where
   f (Omega js ab) = Eta js ab
 
 --------------------------------------------------------------------------------
 
+#if MIN_VERSION_base(4,11,0)     
+
+instance Semigroup ab => Semigroup (Omega ab) where
+  (Omega as ab1) <> (Omega bs ab2) = 
+    if nub cs == cs
+      then Omega cs (ab1 <> ab2)
+      else error "Omega/monoid: duplicate indices"
+    where
+      cs = sort (as ++ bs)
+
+instance Semigroup ab => Semigroup (Eta ab) where
+  (Eta fs ab1) <> (Eta gs ab2) = 
+    if nub hs == hs
+      then Eta hs (ab1 <> ab2)
+      else error "Eta/monoid: duplicate indices"
+    where
+      hs = sort (fs ++ gs)
+
+instance Semigroup ab => Semigroup (Gam ab) where
+  (Gam e ab1) <> (Gam f ab2) = Gam (e+f) (ab1 <> ab2)
+
 instance Monoid ab => Monoid (Omega ab) where
   mempty = Omega [] mempty
+
+instance Monoid ab => Monoid (Eta ab) where
+  mempty = Eta [] mempty
+
+instance Monoid ab => Monoid (Gam ab) where
+  mempty = Gam 0 mempty
+
+#else
+
+instance Monoid ab => Monoid (Omega ab) where
+  mempty = Omega [] mempty
   (Omega as ab1) `mappend` (Omega bs ab2) = 
     if nub cs == cs
       then Omega cs (ab1 <> ab2)
@@ -242,6 +315,8 @@
 instance Monoid ab => Monoid (Gam ab) where
   mempty = Gam 0 mempty
   (Gam e ab1) `mappend` (Gam f ab2) = Gam (e+f) (ab1 <> ab2)
+
+#endif
 
 --------------------------------------------------------------------------------
 
diff --git a/src/Math/RootLoci/Geometry/Forget.hs b/src/Math/RootLoci/Geometry/Forget.hs
--- a/src/Math/RootLoci/Geometry/Forget.hs
+++ b/src/Math/RootLoci/Geometry/Forget.hs
@@ -62,10 +62,10 @@
 countDirectCoarsenings :: Partition -> Map Partition Integer
 countDirectCoarsenings part = Map.fromListWith (+) list where
   list =  
-    [ ( fromExponentialFrom ((i1+i2,1):(i1,e1-1):(i2,e2-1):rest) , fromIntegral (e1*e2) )
+    [ ( fromExponentialForm ((i1+i2,1):(i1,e1-1):(i2,e2-1):rest) , fromIntegral (e1*e2) )
     | ( (i1,e1):(i2,e2):[] , rest ) <- choose' 2 ies
     ] ++
-    [ ( fromExponentialFrom ((2*i,1):(i,e-2):rest) , binomial e 2 )
+    [ ( fromExponentialForm ((2*i,1):(i,e-2):rest) , binomial e 2 )
     | ( (i,e):[] , rest ) <- choose' 1 ies
     , e >= 2
     ]
diff --git a/src/Math/RootLoci/Geometry/Mobius.hs b/src/Math/RootLoci/Geometry/Mobius.hs
--- a/src/Math/RootLoci/Geometry/Mobius.hs
+++ b/src/Math/RootLoci/Geometry/Mobius.hs
@@ -31,7 +31,7 @@
 import Math.Combinat.Partitions.Set
 import Math.Combinat.Sets
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
 
 import Math.RootLoci.Algebra
 import Math.RootLoci.Misc
diff --git a/src/Math/RootLoci/Misc.hs b/src/Math/RootLoci/Misc.hs
--- a/src/Math/RootLoci/Misc.hs
+++ b/src/Math/RootLoci/Misc.hs
@@ -4,10 +4,10 @@
 module Math.RootLoci.Misc 
   ( module Math.RootLoci.Misc.Common 
   , module Math.RootLoci.Misc.PTable
-  , module Math.RootLoci.Misc.Pretty 
+  , module Math.Algebra.Polynomial.Pretty
   )
   where
 
 import Math.RootLoci.Misc.Common 
 import Math.RootLoci.Misc.PTable
-import Math.RootLoci.Misc.Pretty 
+import Math.Algebra.Polynomial.Pretty
diff --git a/src/Math/RootLoci/Misc/Common.hs b/src/Math/RootLoci/Misc/Common.hs
--- a/src/Math/RootLoci/Misc/Common.hs
+++ b/src/Math/RootLoci/Misc/Common.hs
@@ -1,7 +1,7 @@
 
 -- | Some auxilary functions
 
-{-# LANGUAGE BangPatterns, TypeSynonymInstances, FlexibleInstances, DeriveFunctor #-}
+{-# LANGUAGE CPP, BangPatterns, TypeSynonymInstances, FlexibleInstances, DeriveFunctor #-}
 module Math.RootLoci.Misc.Common where
 
 --------------------------------------------------------------------------------
@@ -9,6 +9,7 @@
 import Data.List
 import Data.Monoid
 import Data.Ratio
+import Data.Ord
 
 import Control.Monad
 
@@ -21,10 +22,6 @@
 import qualified Data.Map.Strict as Map
 import Data.Map (Map)
 
--- import qualified Math.RootLoci.Algebra.FreeMod as ZMod
--- import Math.RootLoci.Algebra.SymmPoly
--- import Math.RootLoci.Geometry.Cohomology
-
 --------------------------------------------------------------------------------
 -- * Pairs
 
@@ -35,6 +32,10 @@
 --------------------------------------------------------------------------------
 -- * Lists
 
+{-# SPECIALIZE sum' :: [Int] -> Int #-}
+sum' :: Num a => [a] -> a
+sum' = foldl' (+) 0 
+
 {-# SPECIALIZE unique :: [Partition] -> [Partition] #-}
 unique :: Ord a => [a] -> [a]
 unique = map head . group . sort
@@ -48,6 +49,34 @@
 histogram xs = foldl' f Map.empty xs where
   f old x = Map.insertWith (+) x 1 old
 
+#if MIN_VERSION_base(4,8,0)
+-- sortOn already in base, nothing to do
+#else
+-- sortOn not yet in base, let's define it
+sortOn :: Ord b => (a -> b) -> [a] -> [a]
+sortOn f = sortBy (comparing f)
+#endif
+
+longZipWith :: (a -> c) -> (b -> c) -> (a -> b -> c) -> [a] -> [b] -> [c]
+longZipWith f g h = go where
+  go (x:xs) (y:ys) = h x y : go xs ys
+  go xs     []     = map f xs
+  go []     ys     = map g ys
+
+evens :: [a] -> [a]
+evens (x:xs) = x : odds xs
+evens []     = []
+
+odds :: [a] -> [a]
+odds (_:xs) = evens xs
+odds []     = []
+
+interleave :: [a] -> [a] -> [a]
+interleave = go where 
+  go (x:xs) (y:ys) = x : y : go xs ys
+  go []     []     = []
+  go _      _      = error "interleave: input lists do not have the same length"
+
 --------------------------------------------------------------------------------
 -- * Maps
   
@@ -60,6 +89,21 @@
     Just y  -> y
     Nothing -> error "unsafeDeleteLookup: key not found"
 
+-- | Example usage: @insertMap (:[]) (:) ...@
+insertMap :: Ord k => (b -> a) -> (b -> a -> a) -> k -> b -> Map k a -> Map k a
+insertMap f g k y = Map.alter h k where
+  h mb = case mb of
+    Nothing -> Just (f y)
+    Just x  -> Just (g y x)    
+
+-- | Example usage: @buildMap (:[]) (:) ...@
+buildMap :: Ord k => (b -> a) -> (b -> a -> a) -> [(k,b)] -> Map k a
+buildMap f g xs = foldl' worker Map.empty xs where
+  worker !old (k,y) = Map.alter h k old where
+    h mb = case mb of
+      Nothing -> Just (f y)
+      Just x  -> Just (g y x)    
+
 --------------------------------------------------------------------------------
 -- * Partitions
 
@@ -72,6 +116,14 @@
 aut part = product $ map factorial es where
   es = map snd $ toExponentialForm part   
 
+-- | TODO: move this into combinat
+exponentVector :: Partition -> [Int]
+exponentVector p = go 1 (toExponentialForm p) where
+  go _  []              = []
+  go !i ef@((j,e):rest) = if i<j 
+    then 0 : go (i+1) ef
+    else e : go (i+1) rest
+
 --------------------------------------------------------------------------------
 -- * Set partitions
  
@@ -89,6 +141,7 @@
 --------------------------------------------------------------------------------
 -- * Signs
 
+{-
 class IsSigned a where
   signOf :: a -> Maybe Sign
 
@@ -101,6 +154,7 @@
 instance IsSigned Int      where signOf = signOfNum
 instance IsSigned Integer  where signOf = signOfNum
 instance IsSigned Rational where signOf = signOfNum
+-}
 
 --------------------------------------------------------------------------------
 -- * Numbers
@@ -130,3 +184,48 @@
   prod' = foldl' (*) 1
 
 --------------------------------------------------------------------------------
+-- * Utility
+
+-- | Put into parentheses
+paren :: String -> String
+paren s = '(' : s ++ ")"
+
+--------------------------------------------------------------------------------
+
+-- | Exponential form of a partition
+expFormString :: Partition -> String
+expFormString p = "(" ++ intercalate "," (map f ies) ++ ")" where
+  ies = toExponentialForm p
+  f (i,e) = show i ++ "^" ++ show e
+
+extendStringL :: Int -> String -> String
+extendStringL k s = s ++ replicate (k - length s) ' '
+
+extendStringR :: Int -> String -> String
+extendStringR k s = replicate (k - length s) ' ' ++ s
+
+--------------------------------------------------------------------------------
+-- * Mathematica-formatted output
+
+class Mathematica a where
+  mathematica :: a -> String
+
+instance Mathematica Int where
+  mathematica = show
+
+instance Mathematica Integer where
+  mathematica = show
+
+instance Mathematica String where
+  mathematica = show
+
+instance Mathematica Partition where
+  mathematica (Partition ps) = "{" ++ intercalate "," (map show ps) ++ "}"
+
+data Indexed a = Indexed String a
+
+instance Mathematica a => Mathematica (Indexed a) where
+  mathematica (Indexed x sub) = "Subscript[" ++ x ++ "," ++ mathematica sub ++ "]"
+
+--------------------------------------------------------------------------------
+
diff --git a/src/Math/RootLoci/Misc/Pretty.hs b/src/Math/RootLoci/Misc/Pretty.hs
deleted file mode 100644
--- a/src/Math/RootLoci/Misc/Pretty.hs
+++ /dev/null
@@ -1,137 +0,0 @@
-
-{-# LANGUAGE FlexibleInstances #-}
-
--- | Pretty-printing
- 
-module Math.RootLoci.Misc.Pretty where
-
---------------------------------------------------------------------------------
-
-import Data.List
-
-import Math.Combinat.Sign
-import Math.Combinat.Partitions.Integer
-
-import qualified Data.Map.Strict as Map
-import Data.Map.Strict (Map)
-
-import Math.RootLoci.Algebra.FreeMod ( FreeMod, ZMod, QMod )
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
-
-import Math.RootLoci.Misc.Common
-
---------------------------------------------------------------------------------
-
-class Pretty a where
-  pretty :: a -> String
-
--- instance Pretty a => Pretty (ZMod a) where
---   pretty = prettyZMod pretty
-
-instance (Num c, Eq c, Show c, IsSigned c, Pretty b) => Pretty (FreeMod c b) where
-  pretty = prettyFreeMod' True pretty
-
---------------------------------------------------------------------------------
--- * Pretty printing elements of free modules
-
--- | Example: @showVarPower "x" 5 == "x^5"@
-showVarPower :: String -> Int -> String
-showVarPower name expo = case expo of
-  0 -> "1"
-  1 -> name
-  _ -> name ++ "^" ++ show expo
-
---------------------------------------------------------------------------------
-
--- | no multiplication sign (ok for mathematica and humans)
-prettyZMod_ :: (b -> String) -> ZMod b -> String
-prettyZMod_ = prettyFreeMod' False
-  
--- | multiplication sign (ok for maple etc)
-prettyZMod :: (b -> String) -> ZMod b -> String
-prettyZMod = prettyFreeMod' True
-
---------------------------------------------------------------------------------
-
-prettyFreeMod' 
-  :: (Num c, Eq c, Show c, IsSigned c) 
-  => Bool                -- ^ use star for multiplication (@False@ means just concatenation)
-  -> (b -> String)       -- ^ show base
-  -> FreeMod c b 
-  -> String
-prettyFreeMod' star showBase what = final where
-  final = if take 3 stuff == " + " then drop 3 stuff else drop 1 stuff
-  stuff = concatMap f (ZMod.toList what) 
-  f (g,  1) = plus  ++ showBase' g
-  f (g, -1) = minus ++ showBase' g
-  f (g, c)  = sgn c ++ {- extendStringR 3 -} (show $ abs c) ++ starStr ++ showBase' g
-  -- cond (_,c) = (c/=0)
-  starStr = if star then "*" else " "
-  showBase' g = case showBase g of
-    "" -> "1"  -- "(1)"
-    s  -> s
-  sgn c = case signOf c of
-    Just Minus -> minus
-    _          -> plus
-  plus  = " + "
-  minus = " - "
-
-prettyFreeMod'' 
-  :: (c -> String)    -- ^ show coefficient
-  -> (b -> String)    -- ^ show base
-  -> FreeMod c b 
-  -> String
-prettyFreeMod'' showCoeff showBase what = result where
-  result = intercalate " + " (map f $ ZMod.toList what) 
-  f (g, c) = showCoeff c ++ starStr ++ showBase' g
-  starStr = "*" -- if star then "*" else " "
-  showBase' g = case showBase g of
-    "" -> "1"  -- "(1)"
-    s  -> s
-
---------------------------------------------------------------------------------
--- * Utility
-
--- | Put into parentheses
-paren :: String -> String
-paren s = '(' : s ++ ")"
-
---------------------------------------------------------------------------------
-
--- | Exponential form of a partition
-expFormString :: Partition -> String
-expFormString p = "(" ++ intercalate "," (map f ies) ++ ")" where
-  ies = toExponentialForm p
-  f (i,e) = show i ++ "^" ++ show e
-
-extendStringL :: Int -> String -> String
-extendStringL k s = s ++ replicate (k - length s) ' '
-
-extendStringR :: Int -> String -> String
-extendStringR k s = replicate (k - length s) ' ' ++ s
-
---------------------------------------------------------------------------------
--- * Mathematica-formatted output
-
-class Mathematica a where
-  mathematica :: a -> String
-
-instance Mathematica Int where
-  mathematica = show
-
-instance Mathematica Integer where
-  mathematica = show
-
-instance Mathematica String where
-  mathematica = show
-
-instance Mathematica Partition where
-  mathematica (Partition ps) = "{" ++ intercalate "," (map show ps) ++ "}"
-
-data Indexed a = Indexed String a
-
-instance Mathematica a => Mathematica (Indexed a) where
-  mathematica (Indexed x sub) = "Subscript[" ++ x ++ "," ++ mathematica sub ++ "]"
-
---------------------------------------------------------------------------------
-
diff --git a/src/Math/RootLoci/Motivic/Abstract.hs b/src/Math/RootLoci/Motivic/Abstract.hs
new file mode 100644
--- /dev/null
+++ b/src/Math/RootLoci/Motivic/Abstract.hs
@@ -0,0 +1,430 @@
+
+-- | The abstract motivic algorithm
+--
+-- See: B. Komuves: Motivic characteristic classes of discriminant strata
+--
+-- TODO: caching of results (otherwise it is very slow)
+
+{-# LANGUAGE CPP, BangPatterns, FlexibleInstances, TypeSynonymInstances,
+             MultiParamTypeClasses, FunctionalDependencies, GeneralizedNewtypeDeriving,
+             TypeFamilies
+  #-}
+module Math.RootLoci.Motivic.Abstract where
+
+--------------------------------------------------------------------------------
+
+import Data.Char
+import Data.List
+import Data.Ord
+import Data.Maybe
+
+import Data.Map.Strict (Map)
+import qualified Data.Map.Strict as Map
+
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod 
+import Math.Algebra.Polynomial.FreeModule (ZMod,QMod,FreeMod)
+import Math.Algebra.Polynomial.Pretty
+
+import Math.Combinat.Classes hiding (empty)
+import Math.Combinat.Tuples
+import Math.Combinat.Partitions
+import Math.Combinat.Permutations hiding (permute)
+
+-- import Debug.Trace
+-- debug s x y = trace (">>> " ++ s ++ " -> " ++ show x) y
+
+import Math.RootLoci.Motivic.Classes
+import Math.RootLoci.Misc.Common
+
+--------------------------------------------------------------------------------
+-- * The abstract algorithm
+
+-- | The (abstract) class of @Sym^n(X)@
+symn :: Num c => Dim -> FreeMod c SingleLam
+symn dim = ZMod.generator $ SingleLam (Bindings [dim]) (Single [(DeBruijn 0, 1)])
+
+-- | The open stratum X(1,1,...,1)
+open :: Dim -> ZMod SingleLam
+open d@(Dim n) = symn d `ZMod.sub` rest where
+  rest = ZMod.sum [ xlam p | p <- partitions n , width p < n ]
+
+zeros :: Int -> ZMod MultiLam
+zeros k = ZMod.generator 
+        $ MultiLam (Bindings []) (Multi $ replicate k (Single []))
+
+-- | The open stratum X(lambda)
+xlam :: Partition -> ZMod SingleLam
+xlam p = 
+  if height p == 1   
+    then open (Dim $ weight p)
+    else normalize $ psi $ omega123 $ dvec $ dimVector p
+
+-- | The open stratum D(n1,n2,...)
+dvec :: [Dim] -> ZMod MultiLam
+dvec dims0 = permute invperm sorted where
+  invperm = inversePermutation perm
+  perm    = sortingPermutationDesc dims0
+  dims1   = permuteList perm dims0
+  (dims2,dzeros) = span (>0) dims1        -- separate zero dimensions
+  sorted  = cross (dvecSorted dims2) (zeros $ length dzeros)
+
+-- | The open stratum D(n1,n2,...), assuming @n1 >= n2 >= n3 >= ...@
+dvecSorted :: [Dim] -> ZMod MultiLam
+dvecSorted []     = error "dvec: empty dimension vector shouldn't appear in the algorithm"
+dvecSorted [n]    = singleToMulti (open n)
+dvecSorted (p:ns) = normalize (ZMod.sub big rest) where
+  big  = cross (singleToMulti $ open p) (dvecSorted ns)
+  rest = ZMod.sum  
+    [ theta (dvec (k : interleave ds es))
+    | ds <- dimTuples ns
+    , let es = zipWith (-) ns ds
+    , let l = sum es
+    , l > 0 
+    , let k = p - l
+    , k >= 0
+    ] 
+
+--------------------------------------------------------------------------------
+-- * Data types and instances
+
+-- | A variable, implemented as a /de Bruijn level/ (indexing starts from 0)
+newtype Var 
+  = DeBruijn Int      
+  deriving (Eq,Ord,Show)
+
+--------------------------------------------------------------------------------
+
+-- | We use de Bruijn levels to index the bound variables, and ecah bound variables has a dimension
+newtype Bindings 
+  = Bindings [Dim]
+  deriving (Eq,Ord,Show)
+
+numberOfBoundVariables :: Bindings -> Int
+numberOfBoundVariables (Bindings ds) = length ds
+
+dimensionTable :: Bindings -> Map Var Dim
+dimensionTable (Bindings dims) = Map.fromList $ zip (map DeBruijn [0..]) dims
+
+--------------------------------------------------------------------------------
+
+-- | An expression living on @Sym^n(X)@, with free variables
+newtype Single
+  = Single [(Var,Int)]
+  deriving (Eq,Ord,Show)
+
+unSingle :: Single -> [(Var,Int)]
+unSingle (Single ves) = ves
+
+-- | An expression living on @Sym^{n_1}(X) x ... x Sym^{n_r}(X)@, with free variables
+newtype Multi
+  = Multi [Single]
+  deriving (Eq,Ord,Show)
+
+-- | A lambda expression living on @Sym^n(X)@, with variables bound to @Sym^d(X)@ with different dimensions
+data SingleLam
+  = SingleLam !Bindings !Single
+  deriving (Eq,Ord,Show)
+
+-- | A lambda expression living on @Sym^{n_1}(X) x ... x Sym^{n_r}(X)@, with variables bound to @Sym^d(X)@ with different dimensions
+data MultiLam
+  = MultiLam !Bindings !Multi
+  deriving (Eq,Ord,Show)
+
+--------------------------------------------------------------------------------
+
+instance Pretty Bindings where
+  pretty (Bindings dims) = "\\" ++ concat (zipWith f vars dims) where
+    vars = map DeBruijn [0..]
+    f v d = "(" ++ pretty v ++ ":S" ++ show d ++ ")"
+
+instance Pretty Var where 
+  pretty (DeBruijn i) = chr (97 + i) : []
+
+instance Pretty (Var,Int) where
+  pretty (v,0) = "1"
+  pretty (v,1) = pretty v
+  pretty (v,e) = pretty v ++ "^" ++ show e
+
+instance Pretty Single where
+  pretty (Single ves) = intercalate "*" $ map pretty ves
+
+instance Pretty Multi where
+  pretty (Multi ts) = "[" ++ (intercalate "," $ map pretty ts) ++ "]"
+
+instance Pretty SingleLam where
+  pretty (SingleLam binds body) = "{" ++ pretty binds ++ "->" ++ pretty body ++ "}"
+
+instance Pretty MultiLam where
+  pretty (MultiLam binds body) = "{" ++ pretty binds ++ "->" ++ pretty body ++ "}"
+
+--------------------------------------------------------------------------------
+
+instance Degree SingleLam where
+  type MultiDegree SingleLam = Int
+  multiDegree (SingleLam binds (Single ves)) = sum [ (unDim $ (Map.!) dimTable v) * e | (v,e) <- ves ] where
+    dimTable = dimensionTable binds
+  totalDegree = multiDegree
+
+instance Degree MultiLam where
+  type MultiDegree MultiLam = [Int]
+  multiDegree (MultiLam binds (Multi bodies)) = map totalDegree [ (SingleLam binds b) | b <- bodies ]
+  totalDegree = sum . multiDegree
+
+--------------------------------------------------------------------------------
+
+instance Empty Bindings where
+  empty = Bindings []
+
+instance Empty Single where
+  empty = Single []
+
+instance Empty Multi where
+  empty = Multi []
+
+instance Empty SingleLam where
+  empty = SingleLam empty empty
+
+instance Empty MultiLam where
+  empty = MultiLam empty empty
+
+--------------------------------------------------------------------------------
+
+-- | Shift de Bruijn levels
+class Shift a where
+  shift :: Int -> a -> a
+  
+instance Shift Var where
+  shift k (DeBruijn l) = DeBruijn (k+l)
+
+instance Shift Single where
+  shift k (Single ves) = Single [ (shift k v, e) | (v,e) <- ves ]
+
+instance Shift Multi where
+  shift k (Multi terms) = Multi $ map (shift k) terms
+
+--------------------------------------------------------------------------------
+
+-- | Rename variables
+class Rename a where
+  rename :: (Var -> Var) -> a -> a
+
+instance Rename Var where
+  rename f v = f v
+
+instance Rename (Var,Int) where
+  rename f (v,e) = (f v, e)
+
+instance Rename Single where
+  rename f (Single ves) = Single $ map (rename f) ves
+
+instance Rename Multi where
+  rename f (Multi ts) = Multi $ map (rename f) ts
+
+--------------------------------------------------------------------------------
+
+-- | Extract the exponent of a given variable
+exponentOf :: Var -> Single -> Int
+exponentOf u (Single ves) = sum [ e | (v,e) <- ves , v==u ]
+
+-- | Extract the exponent vector of a given variable
+exponentVectorOf :: Var -> Multi -> [Int]
+exponentVectorOf v (Multi ts) = map (exponentOf v) ts
+
+--------------------------------------------------------------------------------
+
+instance Normalize Single where
+  normalize (Single ves) = Single $ Map.toList $ Map.fromListWith (+) ves
+
+instance Normalize Multi where
+  normalize (Multi terms) = Multi (map normalize terms) 
+
+normalizeWithExpo :: (Rename term, Normalize term, Ord expo) => (expo -> Bool) -> (Var -> term -> expo) -> (Bindings,term) -> (Bindings,term) 
+normalizeWithExpo cond expo (binds,body) = (binds',body') where
+  Bindings dims = binds
+  vars   = map DeBruijn [0..]
+  vby    = [ (v,(d,es)) | (v,d) <- zip vars dims , let es = expo v body , cond es ]
+  sorted = sortOn snd vby
+  dims'  = map (fst . snd) sorted
+  binds' = Bindings dims'
+  f v    = DeBruijn $ fromJust $ findIndex (\pair -> fst pair == v) sorted
+  body'  = normalize $ rename f $ body
+
+instance Normalize SingleLam where
+  normalize (SingleLam binds body) = SingleLam binds' body' where
+    (binds',body') = normalizeWithExpo (>0) exponentOf (binds,body)
+
+instance Normalize MultiLam where
+  normalize (MultiLam binds body) = MultiLam binds' body' where
+    cond ds = any (>0) ds
+    (binds',body') = normalizeWithExpo cond f (binds,body)
+    f v = {- reverse . -} exponentVectorOf v
+
+instance (Eq c, Num c) => Normalize (FreeMod c SingleLam) where
+  normalize = ZMod.mapBase normalize
+
+instance (Eq c, Num c) => Normalize (FreeMod c MultiLam) where
+  normalize = ZMod.mapBase normalize
+
+--------------------------------------------------------------------------------
+
+instance SuperNormalize Multi where
+  superNormalize (Multi ts) = Multi $ reverse $ dropWhile isempty $ reverse $ map normalize $ ts where
+    isempty (Single xs) = null xs
+
+instance SuperNormalize MultiLam where
+  superNormalize mlam = MultiLam binds (superNormalize body) where
+    (MultiLam binds body) = normalize mlam
+
+instance (Eq c, Num c) => SuperNormalize (FreeMod c MultiLam) where
+  superNormalize = ZMod.mapBase superNormalize
+  
+--------------------------------------------------------------------------------
+
+instance Cross Bindings where
+  cross (Bindings ds) (Bindings es) = Bindings (ds++es)
+  crossInterleave = error "Bindings/crossInterleave: undefined"
+  
+instance Cross Multi where
+  cross (Multi xs) (Multi ys) = Multi (xs++ys)
+  crossInterleave (Multi xs) (Multi ys) = Multi (interleave xs ys)
+
+instance Cross MultiLam where
+  cross (MultiLam binds1 bodies1) (MultiLam binds2 bodies2) = normalize $ MultiLam binds3 bodies3 where
+    n1 = numberOfBoundVariables binds1
+    binds3  = binds1  `cross` binds2
+    bodies3 = bodies1 `cross` (shift n1 bodies2)
+
+  crossInterleave (MultiLam binds1 bodies1) (MultiLam binds2 bodies2) = normalize $ MultiLam binds3 bodies3 where
+    n1 = numberOfBoundVariables binds1
+    binds3  = binds1  `cross` binds2
+    bodies3 = bodies1 `crossInterleave` (shift n1 bodies2)
+
+instance (Eq c, Num c) => Cross (FreeMod c MultiLam) where
+  cross x y = normalize $ ZMod.mulWith cross x y
+  crossInterleave x y = normalize $ ZMod.mulWith crossInterleave x y
+
+--------------------------------------------------------------------------------
+
+instance SingleToMulti Single Multi where
+  singleToMulti = Multi . (:[])
+
+instance SingleToMulti SingleLam MultiLam where
+  singleToMulti (SingleLam binds single) = MultiLam binds (Multi [single])
+
+instance (Eq c, Num c) => SingleToMulti (FreeMod c SingleLam) (FreeMod c MultiLam) where
+  singleToMulti = ZMod.mapBase singleToMulti
+
+--------------------------------------------------------------------------------
+
+instance Omega (Var,Int) where
+  omega 0 _     = omegaZeroError 
+  omega k (v,d) = (v,d*k)
+
+instance Omega Single where
+  omega 0 _            = Single [] -- omegaZeroError 
+  omega k (Single ves) = Single $ map (omega k) ves
+
+instance Omega Multi where
+  omega 0 _          = omegaZeroError 
+  omega k (Multi ts) = Multi $ map (omega k) ts
+
+instance Omega SingleLam where
+  omega 0 _                      = omegaZeroError 
+  omega k (SingleLam binds body) = SingleLam binds (omega k body)
+
+instance Omega MultiLam where
+  omega 0 _                     = omegaZeroError 
+  omega k (MultiLam binds body) = MultiLam binds (omega k body)
+
+instance (Eq c, Num c) => Omega (FreeMod c SingleLam) where
+  omega 0 = omegaZeroError 
+  omega k = ZMod.mapBase (omega k)
+
+instance (Eq c, Num c) => Omega (FreeMod c MultiLam) where
+  omega 0 = omegaZeroError 
+  omega k = normalize . ZMod.mapBase (omega k)
+
+--------------------------------------------------------------------------------
+
+instance Omega123 Multi where
+  omega123 (Multi ts) = Multi $ zipWith omega [1..] ts
+
+instance Omega123 MultiLam where
+  omega123 (MultiLam binds body) = MultiLam binds (omega123 body)
+
+instance (Eq c, Num c) => Omega123 (FreeMod c MultiLam) where
+  omega123 = normalize . ZMod.mapBase omega123
+
+--------------------------------------------------------------------------------
+
+instance Psi Multi Single where
+  psi (Multi ts) = normalize $ Single $ concat $ map unSingle ts
+
+instance Psi MultiLam SingleLam where
+  psi (MultiLam binds body) = SingleLam binds (psi body)
+
+instance (Eq c, Num c) => Psi (FreeMod c MultiLam) (FreeMod c SingleLam) where
+  psi = normalize . ZMod.mapBase psi
+
+instance (Eq c, Num c) => Psi [FreeMod c SingleLam] (FreeMod c SingleLam) where
+  psi = normalize . psi . crossMany . map singleToMulti
+
+--------------------------------------------------------------------------------
+
+instance PsiEvenOdd Multi where
+  psiEvenOdd (Multi ts) = normalize $ Multi $ zipWith f (evens ts) (odds ts) where
+    f (Single xs) (Single ys) = Single (xs++ys)
+
+instance PsiEvenOdd MultiLam where
+  psiEvenOdd (MultiLam binds body) = MultiLam binds (psiEvenOdd body)
+
+instance PsiEvenOdd (ZMod MultiLam) where
+  psiEvenOdd = normalize . ZMod.mapBase psiEvenOdd
+
+--------------------------------------------------------------------------------
+
+instance Pontrjagin SingleLam where
+  pontrjaginOne     = empty
+  pontrjaginMul a b = psi $ cross (singleToMulti a) (singleToMulti b)
+
+instance Pontrjagin MultiLam where
+  pontrjaginOne     = empty
+  pontrjaginMul a b = psiEvenOdd $ crossInterleave a' b' where
+    (a',b') = extendToCommonSize (a,b)
+
+--------------------------------------------------------------------------------
+
+instance ExtendToCommonSize Multi where
+  extendToCommonSize (Multi xs, Multi ys) = (Multi xs', Multi ys') where
+    (xs',ys') = extendToCommonSize (xs,ys) 
+
+instance ExtendToCommonSize MultiLam where
+  extendToCommonSize (MultiLam as xs, MultiLam bs ys) = (MultiLam as xs', MultiLam bs ys') where
+    (xs',ys') = extendToCommonSize (xs,ys) 
+
+--------------------------------------------------------------------------------
+
+instance Permute Multi where
+  permute p (Multi ts) = Multi (permuteList p ts)
+
+instance Permute MultiLam where
+  permute p (MultiLam binds multi) = MultiLam binds (permute p multi)
+
+instance Permute (ZMod MultiLam) where
+  permute p = ZMod.mapBase (permute p)
+
+--------------------------------------------------------------------------------
+
+instance Theta Multi where
+  theta (Multi (u:us)) = Multi (a:bs) where
+    a = psi $ Multi (u : odds us)
+    bs = zipWith f (evens us) (odds us)
+    f (Single u) (Single v) = normalize $ Single (u ++ v)
+
+instance Theta MultiLam where
+  theta (MultiLam binds body) = MultiLam binds (theta body)
+
+instance Theta (ZMod MultiLam) where
+  theta = normalize . ZMod.mapBase theta
+
+--------------------------------------------------------------------------------
diff --git a/src/Math/RootLoci/Motivic/Classes.hs b/src/Math/RootLoci/Motivic/Classes.hs
new file mode 100644
--- /dev/null
+++ b/src/Math/RootLoci/Motivic/Classes.hs
@@ -0,0 +1,182 @@
+
+{-# LANGUAGE FlexibleInstances, TypeSynonymInstances,
+             MultiParamTypeClasses, FunctionalDependencies, 
+             TypeFamilies, DataKinds, GeneralizedNewtypeDeriving
+  #-}
+module Math.RootLoci.Motivic.Classes where
+
+--------------------------------------------------------------------------------
+
+import Data.Char
+import Data.List
+import Data.Ord
+import Data.Maybe
+
+import GHC.TypeLits
+
+import Data.Map.Strict (Map)
+import qualified Data.Map.Strict as Map
+
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod 
+import Math.Algebra.Polynomial.FreeModule (ZMod,QMod,FreeMod)
+import Math.Algebra.Polynomial.Pretty
+
+import Math.Combinat.Classes hiding (empty)
+import Math.Combinat.Tuples
+import Math.Combinat.Partitions
+import Math.Combinat.Permutations hiding (permute)
+
+import Math.Algebra.Polynomial.Class
+import Math.Algebra.Polynomial.Monomial.Indexed 
+
+import Math.RootLoci.Misc.Common
+
+--------------------------------------------------------------------------------
+-- * Dimensions
+
+-- | A dimension (@d@ in @Sym^d(X)@)
+newtype Dim 
+  = Dim Int
+  deriving (Eq,Ord,Show,Num)
+
+unDim :: Dim -> Int
+unDim (Dim d) = d
+
+dimVector :: Partition -> [Dim]
+dimVector = map Dim . exponentVector
+
+dimTuples :: [Dim] -> [[Dim]]
+dimTuples  
+  = (map . map) Dim
+  . tuples'
+  . map unDim 
+
+--------------------------------------------------------------------------------
+-- * Classes
+
+-- | Degree of something
+class Degree a where
+  type MultiDegree a :: *
+  totalDegree :: a -> Int
+  multiDegree :: a -> MultiDegree a
+
+instance (KnownNat n) => Degree (XS v n) where
+  type MultiDegree (XS v n) = [Int]
+  totalDegree = totalDegXS
+  multiDegree = xsToExponents
+
+--------------------------------------------------------------------------------
+
+class Empty a where
+  empty :: a
+
+instance Empty [a] where
+  empty = []
+
+instance Empty (Maybe a) where
+  empty = Nothing
+
+instance Empty Int where
+  empty = 0
+
+instance KnownNat n => Empty (XS v n) where
+  empty = emptyXS
+
+--------------------------------------------------------------------------------
+
+-- | Normalize terms and lambdas
+class Normalize a where
+  normalize :: a -> a
+
+-- | This is a hack because there is some issue when this is included in normalize that i don't want to debug right now
+class SuperNormalize a where
+  superNormalize :: a -> a 
+  
+--------------------------------------------------------------------------------
+
+-- | Exterior (or cross) product
+class Cross a where
+  cross :: a -> a -> a
+  crossMany :: [a] -> a
+  crossMany = foldl1' cross
+  crossInterleave :: a -> a -> a       -- ^ interleaved cross product of vectors
+
+instance Cross [a] where
+  cross     = (++)
+  crossMany = concat 
+  crossInterleave xs ys = interleave xs ys
+
+-------------------------------------------------------------------------------
+
+-- | Conversion from scalar to vector
+class SingleToMulti s t | s->t, t->s where
+  singleToMulti :: s -> t
+
+--------------------------------------------------------------------------------
+
+omegaZeroError :: a
+omegaZeroError = error "Omega^0 should not appear in the algorithm"
+
+-- | replicating points (power map)
+class Omega a where
+  omega :: Int -> a -> a
+
+--------------------------------------------------------------------------------
+
+-- | @Omega^{1,2,3,...}@
+class Omega123 a where
+  omega123 :: a -> a
+
+--------------------------------------------------------------------------------
+
+-- | The merging (or multiplication) map
+class Psi t s | t->s where
+  psi :: t -> s
+
+--------------------------------------------------------------------------------
+
+-- | The interleaved pairwise merging map
+class PsiEvenOdd t where
+  psiEvenOdd :: t -> t
+
+--------------------------------------------------------------------------------
+
+-- | Pontrjagin ring
+class Pontrjagin a where
+  pontrjaginOne :: a 
+  pontrjaginMul :: a -> a -> a
+
+--------------------------------------------------------------------------------
+
+class ExtendToCommonSize a where
+  extendToCommonSize :: (a,a) -> (a,a)
+
+instance Empty a => ExtendToCommonSize [a] where
+  extendToCommonSize (xs,ys) = (xs',ys') where
+    a = length xs
+    b = length ys
+    n = max a b
+    xs' = xs ++ replicate (n-a) empty
+    ys' = ys ++ replicate (n-b) empty
+
+--------------------------------------------------------------------------------
+
+-- | Applying permutations
+class Permute a where
+  permute :: Permutation -> a -> a
+
+instance Permute [a] where
+  permute = permuteList
+
+--------------------------------------------------------------------------------
+
+-- | The custom pusforward @Theta@ appearing in the algorithm
+--
+-- we subdivide the input as @[z;x1,y1,x2,y2,x3,y3...]@
+-- and then duplicate each of @y1,y2,y3...@, then combine the left copies of @y_i@ with
+-- @z@, and the right copies of @y_i@ with the corresponding @x_i@-s, resulting in
+-- @[z*y1*y2*...;x1*y1,x2*y2,...]@
+class Theta a where
+  theta :: a -> a       --mypf :: a -> a
+
+--------------------------------------------------------------------------------
diff --git a/src/Math/RootLoci/Motivic/Homology.hs b/src/Math/RootLoci/Motivic/Homology.hs
new file mode 100644
--- /dev/null
+++ b/src/Math/RootLoci/Motivic/Homology.hs
@@ -0,0 +1,173 @@
+
+-- | Motivic classes in homology
+
+{-# LANGUAGE 
+      DataKinds, KindSignatures, TypeOperators, ScopedTypeVariables, MultiParamTypeClasses,
+      TypeFamilies, FlexibleContexts, TypeSynonymInstances, FlexibleInstances
+  #-}
+module Math.RootLoci.Motivic.Homology where
+
+--------------------------------------------------------------------------------
+
+import Data.Array
+
+import Data.Proxy
+import GHC.TypeLits
+
+import Unsafe.Coerce as Unsafe
+
+import Math.Combinat.Classes
+import Math.Combinat.Numbers
+import Math.Combinat.Partitions
+
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
+
+import qualified Math.Algebra.Polynomial.Monomial.Infinite as XInf
+import qualified Math.Algebra.Polynomial.Monomial.Indexed  as XS
+
+import Math.Algebra.Polynomial.Multivariate.Infinite as XInf
+import Math.Algebra.Polynomial.Multivariate.Indexed  as XS
+
+import Math.Algebra.Polynomial.Class
+import Math.Algebra.Polynomial.Univariate
+import Math.Algebra.Polynomial.Pretty
+
+import Math.RootLoci.Geometry.Cohomology ( G(..) )
+
+import Math.RootLoci.Misc.Common
+import Math.RootLoci.Motivic.Abstract as Abstract
+import Math.RootLoci.Motivic.Classes
+
+import Math.RootLoci.CSM.Aluffi
+
+--------------------------------------------------------------------------------
+
+interpretSingleLam :: (Dim -> KRing Integer) -> SingleLam -> KRing Integer
+interpretSingleLam symFun (SingleLam (Bindings bindings) (Single body)) = result where
+  syms   = map symFun bindings
+  result = psiAny $ crossKs $ map f body 
+  f (DeBruijn i, e) = omegaH e (syms!!i)  
+
+csmPn :: Dim -> KRing Integer
+csmPn (Dim d) = Uni $ ZMod.fromList [ (U k , binomial (d+1) (k+1)) | k<-[0..d] ]
+
+-- | CSM class in homology
+csm_xlam_P1 :: Partition -> KRing Integer
+csm_xlam_P1 part = Uni $ ZMod.flatMap f (Abstract.xlam part) where
+  f x = unUni (interpretSingleLam csmPn x)
+
+-- | CSM class in cohomology (via Poincare duality)
+csm_xlam_P1_cohom :: Partition -> ZMod.ZMod G 
+csm_xlam_P1_cohom part = ZMod.mapBase f $ unUni $ csm_xlam_P1 part  where
+  n   = weight part
+  f (U k) = G (n-k)
+
+-- | Compares Aluffi's CSM formula to the motivic algorithm (up to partitions of size @n@)
+test_motivic_csm_vs_aluffi :: Int -> Bool
+test_motivic_csm_vs_aluffi n = and
+  [ csm_xlam_P1_cohom part == aluffiOpenCSM part
+  | k<-[1..n] , part <- partitions k 
+  ]
+
+--------------------------------------------------------------------------------
+
+instance SingleToMulti (KRing c) (GRing c) where
+  singleToMulti = embedInf
+
+instance Ring c => Psi (GRing c) (KRing c) where
+  psi = psiAny
+
+instance Ring c => Omega (KRing c) where
+  omega = omegaH
+
+--------------------------------------------------------------------------------
+
+type KRing c   = Univariate c "u"     -- ^ @lim_n H_*(Sym^n(P1))@
+type GRing c   = XInf.Poly  c "u"     -- ^ @lim_{n1,n2,...} H_*(Sym^n1(P1) x Sym^n2(P1) x ... )@
+
+-- fuck Haskell's type level naturals, they are completely unusable
+-- type NRing c k = XS.Poly    c "u" k   -- ^ @lim_{n1,...,nk} H_*(Sym^n1(P1) x ... x Sym^nk(P1) )@
+
+embedInf :: KRing c -> GRing c
+embedInf = XInf.Poly . ZMod.unsafeMapBase f . unUni where
+  f (U k) = if k > 0 then XInf [k] else XInf []
+
+project1 :: GRing c -> KRing c
+project1 = Uni . ZMod.unsafeMapBase f . XInf.unPoly where
+  f (XInf ns) = U $ head ns
+
+delta2 :: Ring c => KRing c -> GRing c
+delta2 = XInf.Poly . ZMod.flatMap f . unUni where
+  f (U k) = ZMod.sum [ ZMod.generator (XInf [i,k-i]) | i<-[0..k] ] 
+
+deltaN :: Ring c => Int -> KRing c -> GRing c
+deltaN n input 
+  | n <= 0    = error "deltaN: n <= 0"
+  | n == 1    = embedInf input
+  | n == 2    = delta2   input
+  | otherwise = unify1st2nd
+              $ mapCoeffP delta2 
+              $ separate1st (deltaN (n-1) input)
+  where
+    mapCoeffP f = XInf.Poly . ZMod.mapCoeff f . XInf.unPoly
+
+psi2 :: Ring c => GRing c -> KRing c
+psi2 = Uni . ZMod.mapMaybeBaseCoeff f . XInf.unPoly where
+  f (XInf xs) = let [i,j] = take 2 (xs ++ [0,0])
+                in  Just ( U (i+j) , fromInteger (binomial (i+j) i) )
+
+psiNaive :: (Ring c) => Int -> GRing c -> KRing c
+psiNaive n input 
+  | n <= 0    = error "psiN: n <= 0"
+  | n == 1    = project1 input
+  | n == 2    = psi2     input
+  | otherwise = psi2 $ kkToG2 $ psiNaive (n-1) $ separate1st input
+
+psiAny :: Ring c => GRing c -> KRing c
+psiAny = Uni . ZMod.mapMaybeBaseCoeff f . XInf.unPoly where
+  f (XInf is) = Just (U (sum is) , fromInteger (multinomial is))
+
+omegaNaive :: Ring c => Int -> KRing c -> KRing c
+omegaNaive n = psiAny . deltaN n
+
+omegaH :: Ring c => Int -> KRing c -> KRing c
+omegaH d = Uni . ZMod.mapMaybeBaseCoeff f . unUni where
+  f (U k) = Just (U k, fromIntegral d ^ k)
+
+separate1st :: forall c n. (Ring c) => GRing c -> GRing (KRing c) 
+separate1st = XInf.Poly . ZMod.mapMaybeBaseCoeff g . ZMod.mapCoeff f . XInf.unPoly where
+  f c  = scalarP c :: KRing c
+  g (XInf (k:ns)) = Just (XInf ns, c) where
+    c = monomP (U k)
+
+unify1st :: forall c n. (Ring c) => GRing (KRing c) -> GRing c 
+unify1st = XInf.Poly . ZMod.fromList . concatMap f . ZMod.toList . XInf.unPoly where
+  f (XInf xs , Uni poly) = [ (XInf (k:xs) , c)  | (U k, c) <- ZMod.toList poly ]
+
+unify1st2nd :: forall c n. (Ring c) => GRing (GRing c) -> GRing c 
+unify1st2nd = XInf.Poly . ZMod.fromList . concatMap f . ZMod.toList . XInf.unPoly where
+  f (XInf xs , XInf.Poly poly) = [ (XInf (kl++xs) , c)  | (XInf kl0, c) <- ZMod.toList poly , let kl = take 2 (kl0++[0,0]) ]
+
+crossKs :: Ring c => [KRing c] -> GRing c
+crossKs = XInf.Poly . ZMod.productWith empty cross . map (ZMod.mapBase sing) . map unUni where
+  sing (U k) = XInf [k]
+  cross (XInf as) (XInf bs) = XInf (as++bs)
+  empty = XInf []
+
+kkToG2 :: Ring c => KRing (KRing c) -> GRing c 
+kkToG2 = XInf.Poly . ZMod.fromList . concatMap f . ZMod.toList . unUni where
+  f (U k , Uni poly) = [ (XInf [k,l] , c)  | (U l, c) <- ZMod.toList poly ]
+
+unifyKK :: Ring c => KRing (KRing c) -> KRing c 
+unifyKK = Uni . ZMod.fromList . concatMap f . ZMod.toList . unUni where
+  f (U k , Uni poly) = [ (U (k+l) , c)  | (U l, c) <- ZMod.toList poly ]
+
+--------------------------------------------------------------------------------
+
+{-
+deltaN :: Num c => Int -> KRing c -> GRing c
+deltaN 0 = error "deltaN: 0"
+deltaN 1 = embed
+deltaN 2 = delta2
+deltaN 
+-}
diff --git a/src/Math/RootLoci/Segre/Equivariant.hs b/src/Math/RootLoci/Segre/Equivariant.hs
new file mode 100644
--- /dev/null
+++ b/src/Math/RootLoci/Segre/Equivariant.hs
@@ -0,0 +1,137 @@
+
+-- | The equivariant Segre-Schwartz-MacPherson classes
+--
+-- We can recover the Segre-SM classes by dividing the CSM class
+-- by the total Chern class of the tangent bundle of the (smooth)
+-- ambient variety.
+--
+-- The Segre-SM class is useful because it behaves well wrt. pullback.
+--
+
+{-# LANGUAGE ScopedTypeVariables, BangPatterns #-}
+module Math.RootLoci.Segre.Equivariant where
+
+--------------------------------------------------------------------------------
+
+import Math.Combinat.Classes
+import Math.Combinat.Numbers
+import Math.Combinat.Sign
+import Math.Combinat.Compositions
+import Math.Combinat.Partitions.Integer
+import Math.Combinat.Numbers.Series
+
+import Data.Array (Array)
+import Data.Array.IArray
+
+import Math.RootLoci.Algebra
+import Math.RootLoci.Geometry
+import Math.RootLoci.Misc
+
+import qualified Math.Algebra.Polynomial.FreeModule as ZMod
+
+import Math.RootLoci.CSM.Equivariant.Umbral       -- this is the fastest one
+
+--------------------------------------------------------------------------------
+-- * The total Chern class
+
+-- | Total Chern class of the representation @Sym^m C^2@ 
+--
+-- > c(Sym^m C^2) = \prod_{i=0}^m (1 + i*a + (m-i)*b)
+--
+affTotalChernClass :: ChernBase base => Int -> ZMod base
+affTotalChernClass m = select1 (total , abToChern total) where
+  total = product [ 1 + w | w <- affineWeights m ]
+
+-- | Parts of the total Chern class, separated by degree
+affTotalChernClassByDegree :: ChernBase base => Int -> [ZMod base]
+affTotalChernClassByDegree = elems . separateGradedParts . affTotalChernClass
+
+--------------------------------------------------------------------------------
+-- * Inverse of the total Chern class
+
+-- | Infinite power series expansion (by degree) of the multiplicative
+-- inverse of the total Chern class of the representation @Sym^m C^2@
+--
+-- This is just the sum of all complete symmetric polynomials of the sums.
+--
+recipTotalChernClass :: forall base. ChernBase base => Int -> [ZMod base]
+recipTotalChernClass m = pseries' coeffs where
+
+  coeffs      = zip (map ZMod.neg prodWeights) [1..]
+  prodWeights = tail (affTotalChernClassByDegree m)
+
+-- | Another implementation of 'recipTotalChernClass'
+recipTotalChernClass2 :: forall base. ChernBase base => Int -> [ZMod base]
+recipTotalChernClass2 m = integralReciprocalSeries (affTotalChernClassByDegree m) where
+
+-- | A third, very slow implementation of 'recipTotalChernClass'
+recipTotalChernClassSlow :: forall base. ChernBase base => Int -> [ZMod base]
+recipTotalChernClassSlow m = select2 (list , map abToChern list) where
+
+  weights = affineWeights m
+  list    = [ grade d | d <- [0..] ]
+
+  grade :: Int -> ZMod AB
+  grade d = negateIfOdd d 
+          $ ZMod.sum (map mkProduct $ compositions (m+1) d)
+
+  mkProduct es = ZMod.product [ (weightPowers!i) !! e | (i,e) <- zip [0..m] es ]
+
+  -- much faster to cache to powers of the weights!
+  weightPowers :: Array Int [ZMod AB]
+  weightPowers = listArray (0,m) [ wtPowList (weights !! i) | i <- [0..m] ] 
+
+  wtPowList :: ZMod AB -> [ZMod AB]
+  wtPowList w = go 1 where { go !x = x : go (x*w) }
+
+
+--------------------------------------------------------------------------------
+
+-- | Divides a polynomial with the total chern class. As the result is an
+-- infinite power series, we return it's homogeneous parts as an infinite list.
+--
+-- Equivalent (but should be faster than) to:
+--
+-- > separeteGradedParts what `mulSeries` (recipTotalChernClass m)
+-- 
+divideByTotalChernClass :: ChernBase base => Int -> ZMod base -> [ZMod base]
+divideByTotalChernClass m what = convolveWithPSeries' coeffs numerList where
+
+  numerArr  = separateGradedParts what
+  numerList = elems numerArr
+
+  coeffs      = zip (map ZMod.neg prodWeights) [1..]
+  prodWeights = tail (affTotalChernClassByDegree m)
+
+-- | Another, very slow implementation of 'divideByTotalChernClass'
+divideByTotalChernClassSlow :: ChernBase base => Int -> ZMod base -> [ZMod base]
+divideByTotalChernClassSlow m what = final where
+  (0,n)     = bounds numerArr
+  numerArr  = separateGradedParts what
+  denomList = recipTotalChernClassSlow m
+  final     = [ part d | d <- [0..] ]
+  part deg  = ZMod.sum 
+    [ (numerArr ! i) * (denomList !! j)   
+    | j <- [ max 0 (deg-n) .. deg ] 
+    , let i = deg - j 
+    ]
+
+--------------------------------------------------------------------------------
+-- * Affine Segre-SM classes
+
+-- | Affine equivariant Segre-SM class of the open strata
+affineOpenSegreSM :: ChernBase base => Partition -> [ZMod base]
+affineOpenSegreSM part = divideByTotalChernClass m (umbralAffOpenCSM part) where
+  m = weight part
+
+-- | Affine equivariant Segre-SM class of the zero orbit
+affineZeroSegreSM :: ChernBase base => Int -> [ZMod base]
+affineZeroSegreSM m = divideByTotalChernClass m (affineZeroCSM m)
+
+-- | Affine equivariant Segre-SM class of the closure of the strata (including the zero orbit!)
+affineClosedSegreSM :: ChernBase base => Partition -> [ZMod base]
+affineClosedSegreSM part = divideByTotalChernClass m (umbralAffClosedCSM part) where
+  m = weight part
+
+--------------------------------------------------------------------------------
+
diff --git a/test/Tests/CSM/Equivariant.hs b/test/Tests/CSM/Equivariant.hs
--- a/test/Tests/CSM/Equivariant.hs
+++ b/test/Tests/CSM/Equivariant.hs
@@ -1,8 +1,7 @@
 
 -- | Tests for the equivariant CSM class
 
-
-{-# LANGUAGE Rank2Types, GADTs, TypeFamilies #-}
+{-# LANGUAGE Rank2Types, GADTs, TypeFamilies, PackageImports #-}
 module Tests.CSM.Equivariant where
 
 --------------------------------------------------------------------------------
@@ -13,7 +12,7 @@
 import Math.Combinat.Partitions.Integer
 import Math.Combinat.Partitions.Set
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import qualified "polynomial-algebra" Math.Algebra.Polynomial.FreeModule as ZMod
 
 import Math.RootLoci.Algebra
 import Math.RootLoci.Geometry
diff --git a/test/Tests/CSM/Projective.hs b/test/Tests/CSM/Projective.hs
--- a/test/Tests/CSM/Projective.hs
+++ b/test/Tests/CSM/Projective.hs
@@ -1,7 +1,7 @@
 
 -- | Tests for the non-equivarant CSM classes
 
-{-# LANGUAGE Rank2Types, GADTs, TypeFamilies #-}
+{-# LANGUAGE Rank2Types, GADTs, TypeFamilies, PackageImports #-}
 module Tests.CSM.Projective where
 
 --------------------------------------------------------------------------------
@@ -12,7 +12,7 @@
 import Math.Combinat.Partitions.Integer
 import Math.Combinat.Partitions.Set
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import qualified "polynomial-algebra" Math.Algebra.Polynomial.FreeModule as ZMod
 
 import Math.RootLoci.Algebra
 import Math.RootLoci.Geometry
diff --git a/test/Tests/Pushforward.hs b/test/Tests/Pushforward.hs
--- a/test/Tests/Pushforward.hs
+++ b/test/Tests/Pushforward.hs
@@ -2,7 +2,7 @@
 -- | Tests for the push-forward
 
 
-{-# LANGUAGE Rank2Types, GADTs, TypeFamilies #-}
+{-# LANGUAGE Rank2Types, GADTs, TypeFamilies, PackageImports #-}
 module Tests.Pushforward where
 
 --------------------------------------------------------------------------------
@@ -12,7 +12,7 @@
 import Math.Combinat.Classes
 import Math.Combinat.Partitions
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import qualified "polynomial-algebra" Math.Algebra.Polynomial.FreeModule as ZMod
 
 import Math.RootLoci.Algebra
 import Math.RootLoci.Geometry
diff --git a/test/Tests/RootVsClass/Check.hs b/test/Tests/RootVsClass/Check.hs
--- a/test/Tests/RootVsClass/Check.hs
+++ b/test/Tests/RootVsClass/Check.hs
@@ -1,7 +1,7 @@
 
 -- | Checking polymorphic functions
 
-{-# LANGUAGE Rank2Types, GADTs, TypeFamilies, ScopedTypeVariables #-}
+{-# LANGUAGE Rank2Types, GADTs, TypeFamilies, ScopedTypeVariables, PackageImports #-}
 module Tests.RootVsClass.Check where
 
 --------------------------------------------------------------------------------
@@ -15,7 +15,7 @@
 import Math.RootLoci.Misc
 import Math.RootLoci.Geometry.Cohomology 
 
-import qualified Math.RootLoci.Algebra.FreeMod as ZMod
+import qualified "polynomial-algebra" Math.Algebra.Polynomial.FreeModule as ZMod
 
 import Math.RootLoci.CSM.Equivariant.Umbral ( ST )
 
