Added cddlib-094h from http://www.inf.ethz.ch/personal/fukudak/cdd_home/
Change-Id: I64519509269e434b1b9ea87c3fe0805e711c0ac9
diff --git a/third_party/cddlib/examples-ml/cddml-notebook.nb b/third_party/cddlib/examples-ml/cddml-notebook.nb
new file mode 100644
index 0000000..0f5cb7c
--- /dev/null
+++ b/third_party/cddlib/examples-ml/cddml-notebook.nb
@@ -0,0 +1,663 @@
+(************** Content-type: application/mathematica **************
+
+ Mathematica-Compatible Notebook
+
+This notebook can be used with any Mathematica-compatible
+application, such as Mathematica, MathReader or Publicon. The data
+for the notebook starts with the line containing stars above.
+
+To get the notebook into a Mathematica-compatible application, do
+one of the following:
+
+* Save the data starting with the line of stars above into a file
+ with a name ending in .nb, then open the file inside the
+ application;
+
+* Copy the data starting with the line of stars above to the
+ clipboard, then use the Paste menu command inside the application.
+
+Data for notebooks contains only printable 7-bit ASCII and can be
+sent directly in email or through ftp in text mode. Newlines can be
+CR, LF or CRLF (Unix, Macintosh or MS-DOS style).
+
+NOTE: If you modify the data for this notebook not in a Mathematica-
+compatible application, you must delete the line below containing
+the word CacheID, otherwise Mathematica-compatible applications may
+try to use invalid cache data.
+
+For more information on notebooks and Mathematica-compatible
+applications, contact Wolfram Research:
+ web: http://www.wolfram.com
+ email: info@wolfram.com
+ phone: +1-217-398-0700 (U.S.)
+
+Notebook reader applications are available free of charge from
+Wolfram Research.
+*******************************************************************)
+
+(*CacheID: 232*)
+
+
+(*NotebookFileLineBreakTest
+NotebookFileLineBreakTest*)
+(*NotebookOptionsPosition[ 14720, 468]*)
+(*NotebookOutlinePosition[ 16078, 512]*)
+(* CellTagsIndexPosition[ 15906, 504]*)
+(*WindowFrame->Normal*)
+
+
+
+Notebook[{
+Cell[TextData[{
+ StyleBox["cddmathlink",
+ FontColor->RGBColor[0.0557107, 0.137819, 0.517113]],
+ "\nConvex Hull and Vertex Enumeration by ",
+ StyleBox["MathLink",
+ FontSlant->"Italic",
+ FontColor->RGBColor[0.0146487, 0.461387, 0.0967727]],
+ " to ",
+ StyleBox["cddlib",
+ FontColor->RGBColor[0.517113, 0.0273594, 0.0273594]],
+ "\nby Komei Fukuda\nApril 17, 2001"
+}], "Title",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[CellGroupData[{
+
+Cell["Connecting cddmathlink", "Subsection",
+ InitializationCell->True,
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[CellGroupData[{
+
+Cell[TextData[{
+ "You just put the compiled cddmathlink for your computer in some directory. \
+ In this example, the name of the directory is ",
+ StyleBox["\"~/Math\".",
+ FontFamily->"Courier",
+ FontWeight->"Bold"]
+}], "Text",
+ InitializationCell->True,
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell["Off[General::spell1]; Off[General::spell];", "Input",
+ InitializationCell->True,
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[CellGroupData[{
+
+Cell["\<\
+cddml=
+Install[\"~/Math/cddmathlink\"]\
+\>", "Input",
+ InitializationCell->True,
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \(LinkObject["/Users/fukuda/Math/cddmathlink", 9, 8]\)], "Output"]
+}, Open ]]
+}, Open ]]
+}, Closed]],
+
+Cell[CellGroupData[{
+
+Cell["Generating All Vertices ", "Subsection",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[CellGroupData[{
+
+Cell["?AllVertices", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \("AllVertices[m,d+1,A] generates all extreme points (vertices) and \
+extreme rays of the convex polyhedron in R^(d+1) given as the solution set to \
+an inequality system A x >= 0 where A is an m*(d+1) matrix and \
+x=(1,x1,...,xd). The output is {{extlist, linearity}, ecdlist} where extlist \
+is the extreme point list and ecdlist is the incidence list. Each vertex \
+(ray) has the first component 1 (0). If the convex polyhedron is nonempty \
+and has no vertices, extlist is a (nonunique) set of generators of the \
+polyhedron where those generators in the linearity list are considered as \
+linearity space (of points satisfying A (0, x1, x2, ...., xd) = 0) \
+generators."\)], "Print",
+ CellTags->"Info3249106863-2654627"],
+
+Cell["\<\
+Let's try this function with a 3-dimenstional cube defined by 6 \
+inequalities (facets);
+x1 >= 0, x2 >=0, x3 >= 0, 1 - x1 >= 0, 1 - x2 >= 0 and 1 - x3 >= 0. We \
+write these six inequalities as A x >= 0 and x=(1, x1, x2, x3).\
+\>", \
+"Text",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[CellGroupData[{
+
+Cell["\<\
+MatrixForm[a={{0,1,0,0},{0,0,1,0},{0,0,0,1},
+\t{1,-1,0,0},{1,0,-1,0},{1,0,0,-1}}]\
+\>", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ TagBox[
+ RowBox[{"(", "\[NoBreak]", GridBox[{
+ {"0", "1", "0", "0"},
+ {"0", "0", "1", "0"},
+ {"0", "0", "0", "1"},
+ {"1", \(-1\), "0", "0"},
+ {"1", "0", \(-1\), "0"},
+ {"1", "0", "0", \(-1\)}
+ }], "\[NoBreak]", ")"}],
+ Function[ BoxForm`e$,
+ MatrixForm[ BoxForm`e$]]]], "Output"],
+
+Cell[CellGroupData[{
+
+Cell["{m,d1}=Dimensions[a]", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \({6, 4}\)], "Output"]
+}, Open ]],
+
+Cell[CellGroupData[{
+
+Cell["\<\
+{{vertices, linearity}, \
+incidences}=AllVertices[m,d1,Flatten[a]]\
+\>", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \({{{{1.`, 1.`, 1.`, 0.`}, {1.`, 0.`, 1.`, 0.`}, {1.`, 0.`, 0.`,
+ 0.`}, {1.`, 1.`, 0.`, 0.`}, {1.`, 0.`, 0.`, 1.`}, {1.`, 1.`, 0.`,
+ 1.`}, {1.`, 0.`, 1.`, 1.`}, {1.`, 1.`, 1.`, 1.`}}, {}}, {{3, 4,
+ 5}, {1, 3, 5}, {1, 2, 3}, {2, 3, 4}, {1, 2, 6}, {2, 4, 6}, {1, 5,
+ 6}, {4, 5, 6}}}\)], "Output"]
+}, Open ]]
+}, Open ]]
+}, Open ]]
+}, Closed]],
+
+Cell[CellGroupData[{
+
+Cell["Generating the Graph Structure", "Subsection",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[CellGroupData[{
+
+Cell["?AllVerticesWithAdjacency", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \("AllVerticesWithAdjacency[m,d+1,A] generates all extreme points \
+(vertices) and extreme rays of the convex polyhedron in R^(d+1) given as the \
+solution set to an inequality system A x >= 0 where A is an m*(d+1) matrix \
+ and x=(1,x1,...,xd). The output is {{extlist, linearity}, ecdlist, eadlist, \
+icdlist, iadlist} where extlist, ecdlist, eadlist are the extreme point list, \
+the incidence list, the adjacency list (of extreme points and rays), and \
+icdlist, iadlist are the incidence list, the adjacency list (of \
+inequalities). Each vertex (ray) has the first component 1 (0). If the \
+convex polyhedron is nonempty and has no vertices, extlist is a (nonunique) \
+set of generators of the polyhedron where those generators in the linearity \
+list are considered as linearity space (of points satisfying A (0, x1, x2, \
+...., xd) = 0) generators."\)], "Print",
+ CellTags->"Info3249106869-2272285"],
+
+Cell[CellGroupData[{
+
+Cell["\<\
+{{vertices,linearity},ecd,ead,icd,iad}=
+\tAllVerticesWithAdjacency[m,d1,Flatten[a]]\
+\>", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \({{{{1.`, 1.`, 1.`, 0.`}, {1.`, 0.`, 1.`, 0.`}, {1.`, 0.`, 0.`,
+ 0.`}, {1.`, 1.`, 0.`, 0.`}, {1.`, 0.`, 0.`, 1.`}, {1.`, 1.`, 0.`,
+ 1.`}, {1.`, 0.`, 1.`, 1.`}, {1.`, 1.`, 1.`, 1.`}}, {}}, {{3, 4,
+ 5}, {1, 3, 5}, {1, 2, 3}, {2, 3, 4}, {1, 2, 6}, {2, 4, 6}, {1, 5,
+ 6}, {4, 5, 6}}, {{2, 4, 8}, {1, 3, 7}, {2, 4, 5}, {1, 3, 6}, {3, 6,
+ 7}, {4, 5, 8}, {2, 5, 8}, {1, 6, 7}}, {{2, 3, 5, 7}, {3, 4, 5,
+ 6}, {1, 2, 3, 4}, {1, 4, 6, 8}, {1, 2, 7, 8}, {5, 6, 7,
+ 8}, {}}, {{2, 3, 5, 6}, {1, 3, 4, 6}, {1, 2, 4, 5}, {2, 3, 5,
+ 6}, {1, 3, 4, 6}, {1, 2, 4, 5}, {}}}\)], "Output"]
+}, Open ]]
+}, Open ]],
+
+Cell[TextData[{
+ "The graph structure is output as the adjacency list ",
+ StyleBox["ead. ",
+ FontFamily->"Courier",
+ FontWeight->"Bold"],
+ "For example, the first list {2, 4 ,8} represents the neighbour vertices of \
+the first vertex 1. The adjacency of input is given by\nthe list ",
+ StyleBox["iad.",
+ FontFamily->"Courier",
+ FontWeight->"Bold"]
+}], "Text",
+ ImageRegion->{{0, 1}, {0, 1}}]
+}, Closed]],
+
+Cell[CellGroupData[{
+
+Cell["Convex Hull (Facet Generation)", "Subsection",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[CellGroupData[{
+
+Cell["?AllFacets", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \("AllFacets[n,d+1,G] generates all facet inequalities of the convex \
+polyhedron in R^(d+1) generated by points and rays given in the rows of an \
+n*(d+1) matrix G. Each point (ray) must have 1 (0) in the first coordinate. \
+The output is {{faclist, equalities}, icdlist} where faclist is the facet \
+list and icdlist is the incidence list. If the convex polyhedron is not \
+full-dimensional, extlist is a (nonunique) set of inequalities of the \
+polyhedron where those inequalities in the equalities list are considered as \
+equalities."\)], "Print",
+ CellTags->"Info3249106877-5554290"],
+
+Cell["\<\
+We have computed all the vertices of a 3-cube. Let's try the \
+reverse operation. First check the size of the list of vertics. It should \
+reconstruct the facets we have started with.\
+\>", "Text",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[CellGroupData[{
+
+Cell["{n, d1}=Dimensions[vertices]", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \({8, 4}\)], "Output"]
+}, Open ]],
+
+Cell[CellGroupData[{
+
+Cell["\<\
+
+{{facets,equalities}, fincidences}= AllFacets[n,d1,Flatten[vertices]]\
+\>", \
+"Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \({{{{0.`, 0.`, 0.`, 1.`}, {0.`, 1.`, 0.`, 0.`}, {0.`, 0.`, 1.`,
+ 0.`}, {1.`, 0.`, 0.`, \(-1.`\)}, {1.`, 0.`, \(-1.`\),
+ 0.`}, {1.`, \(-1.`\), 0.`, 0.`}}, {}}, {{1, 2, 3, 4}, {2, 3, 5,
+ 7}, {3, 4, 5, 6}, {5, 6, 7, 8}, {1, 2, 7, 8}, {1, 4, 6,
+ 8}}}\)], "Output"]
+}, Open ]],
+
+Cell[TextData[{
+ "We can compute how the facets are connected by using ",
+ StyleBox["AllFacetsWithAdjacency",
+ FontWeight->"Bold"],
+ " function."
+}], "Text",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[CellGroupData[{
+
+Cell["\<\
+
+{{facets,equalities}, icd,iad, ecd,ead}=
+\tAllFacetsWithAdjacency[n,d1,Flatten[vertices]]\
+\>", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \({{{{0.`, 0.`, 0.`, 1.`}, {0.`, 1.`, 0.`, 0.`}, {0.`, 0.`, 1.`,
+ 0.`}, {1.`, 0.`, 0.`, \(-1.`\)}, {1.`, 0.`, \(-1.`\),
+ 0.`}, {1.`, \(-1.`\), 0.`, 0.`}}, {}}, {{1, 2, 3, 4}, {2, 3, 5,
+ 7}, {3, 4, 5, 6}, {5, 6, 7, 8}, {1, 2, 7, 8}, {1, 4, 6, 8}}, {{2,
+ 3, 5, 6}, {1, 3, 4, 5}, {1, 2, 4, 6}, {2, 3, 5, 6}, {1, 2, 4,
+ 6}, {1, 3, 4, 5}}, {{1, 5, 6}, {1, 2, 5}, {1, 2, 3}, {1, 3, 6}, {2,
+ 3, 4}, {3, 4, 6}, {2, 4, 5}, {4, 5, 6}}, {{2, 4, 8}, {1, 3, 7}, {2,
+ 4, 5}, {1, 3, 6}, {3, 6, 7}, {4, 5, 8}, {2, 5, 8}, {1, 6,
+ 7}}}\)], "Output"]
+}, Open ]]
+}, Open ]],
+
+Cell[CellGroupData[{
+
+Cell["\<\
+If you want to compute an inequality description of the \
+one-dimensional cone in R^3 with a vertex at origin and containing the \
+direction (1,1,1), you must set up the input (generator) data as:\
+\>", "Text",\
+
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[CellGroupData[{
+
+Cell["coneGenerators={{1,0,0,0},{0,1,1,1}}", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \({{1, 0, 0, 0}, {0, 1, 1, 1}}\)], "Output"]
+}, Open ]],
+
+Cell[CellGroupData[{
+
+Cell["\<\
+{{cfacets,cequalities}, cfincidences}=
+\tAllFacets[2,4,Flatten[coneGenerators]]\
+\>", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \({{{{1.`, 0.`, 0.`, 0.`}, {0.`, 1.`, 0.`, 0.`}, {0.`, \(-1.`\), 1.`,
+ 0.`}, {0.`, \(-1.`\), 0.`, 1.`}}, {3, 4}}, {{2}, {1}, {1, 2}, {1,
+ 2}}}\)], "Output"]
+}, Open ]],
+
+Cell["\<\
+Since the equalities list contains 3 and 4, of the four output \
+inequalities , the third and the forth must be considered as equalities. It \
+is important to note that this cone can have infinitely many different \
+minimal inequality descriptions, since it is not full-dimensional.\
+\>", \
+"Text",
+ ImageRegion->{{0, 1}, {0, 1}}]
+}, Open ]]
+}, Closed]],
+
+Cell[CellGroupData[{
+
+Cell["A Larger Example (Random 0/1 Polytopes)", "Subsection",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell["\<\
+Let's compute the convex hull of 0/1 points in R^d. First generate \
+0/1 points. Below each point with the first component 0 is considered as a \
+direction that must be included in the convex hull.\
+\>", "Text",
+ ImageRegion->{{0, 1}, {0, 1}},
+ FontSize->13],
+
+Cell["n=30; d1=8;", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[CellGroupData[{
+
+Cell["\<\
+points=Table[Prepend[Table[Random[Integer,{0,1}],{d1-1}],0],{n}]\
+\>\
+", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \({{0, 0, 1, 1, 0, 1, 1, 1}, {0, 1, 0, 0, 1, 1, 0, 0}, {0, 1, 0, 1, 0, 0,
+ 0, 0}, {0, 0, 0, 0, 1, 1, 1, 1}, {0, 0, 1, 1, 0, 1, 1, 1}, {0, 1, 0,
+ 1, 0, 1, 1, 1}, {0, 0, 1, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 1, 0,
+ 1}, {0, 0, 0, 0, 1, 0, 1, 1}, {0, 0, 1, 0, 0, 0, 1, 1}, {0, 0, 1, 0,
+ 0, 0, 1, 0}, {0, 0, 0, 0, 1, 0, 1, 0}, {0, 0, 0, 0, 0, 1, 0, 0}, {0,
+ 0, 0, 0, 1, 0, 0, 0}, {0, 1, 0, 0, 1, 1, 0, 1}, {0, 0, 0, 1, 1, 1, 0,
+ 0}, {0, 0, 1, 1, 1, 0, 0, 1}, {0, 1, 1, 0, 0, 1, 1, 0}, {0, 0, 1, 1,
+ 0, 0, 0, 1}, {0, 1, 0, 1, 1, 0, 1, 0}, {0, 1, 1, 1, 0, 1, 0, 1}, {0,
+ 1, 1, 1, 1, 0, 1, 1}, {0, 0, 0, 0, 1, 0, 0, 1}, {0, 1, 1, 0, 0, 0, 1,
+ 1}, {0, 0, 1, 0, 1, 1, 0, 1}, {0, 1, 0, 0, 0, 1, 1, 1}, {0, 1, 0, 0,
+ 0, 1, 1, 1}, {0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 1, 0, 1, 1, 0, 0}, {0,
+ 0, 0, 0, 1, 0, 1, 1}}\)], "Output"]
+}, Open ]],
+
+Cell[CellGroupData[{
+
+Cell["Dimensions[points]", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \({30, 8}\)], "Output"]
+}, Open ]],
+
+Cell["\<\
+
+{CPUtime, {{facets,equalities}, inc}}=
+\tTiming[AllFacets[n,d1,Flatten[points]]];\
+\>", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[CellGroupData[{
+
+Cell["{CPUtime,Length[facets]}", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \({0.`\ Second, 33}\)], "Output"]
+}, Open ]],
+
+Cell["\<\
+Usually facets of 0/1 polytopes are very pretty and their \
+coefficients are small integers.\
+\>", "Text",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[CellGroupData[{
+
+Cell["Take[facets,5]", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \({{0.`, 0.`, 0.`, 1.`, 0.`, 0.`, 0.`, 0.`}, {0.`, \(-1.`\), 0.`, 1.`,
+ 0.`, 1.`, 0.`, 1.`}, {0.`, \(-1.`\), \(-1.`\), 1.`, 0.`, 1.`, 1.`,
+ 1.`}, {0.`, 0.`, 0.`, 0.`, 0.`, 0.`, 0.`, 1.`}, {0.`, 0.`, 1.`, 0.`,
+ 1.`, 0.`, \(-1.`\), 1.`}}\)], "Output"]
+}, Open ]]
+}, Closed]],
+
+Cell[CellGroupData[{
+
+Cell["Disconnecting cddmathlink", "Subsection",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[CellGroupData[{
+
+Cell["Uninstall[cddml]", "Input",
+ ImageRegion->{{0, 1}, {0, 1}}],
+
+Cell[BoxData[
+ \("/Users/fukuda/Math/cddmathlink"\)], "Output"]
+}, Open ]]
+}, Closed]]
+},
+FrontEndVersion->"4.1 for Macintosh",
+ScreenRectangle->{{0, 1152}, {0, 746}},
+AutoGeneratedPackage->None,
+WindowToolbars->{},
+CellGrouping->Manual,
+WindowSize->{583, 634},
+WindowMargins->{{17, Automatic}, {Automatic, 41}},
+PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}},
+ShowCellLabel->True,
+ShowCellTags->False,
+RenderingOptions->{"ObjectDithering"->True,
+"RasterDithering"->False}
+]
+
+(*******************************************************************
+Cached data follows. If you edit this Notebook file directly, not
+using Mathematica, you must remove the line containing CacheID at
+the top of the file. The cache data will then be recreated when
+you save this file from within Mathematica.
+*******************************************************************)
+
+(*CellTagsOutline
+CellTagsIndex->{
+ "Info3249106863-2654627"->{
+ Cell[3168, 111, 753, 11, 183, "Print",
+ CellTags->"Info3249106863-2654627"]},
+ "Info3249106869-2272285"->{
+ Cell[5701, 192, 930, 13, 231, "Print",
+ CellTags->"Info3249106869-2272285"]},
+ "Info3249106877-5554290"->{
+ Cell[8119, 252, 613, 9, 151, "Print",
+ CellTags->"Info3249106877-5554290"]}
+ }
+*)
+
+(*CellTagsIndex
+CellTagsIndex->{
+ {"Info3249106863-2654627", 15561, 491},
+ {"Info3249106869-2272285", 15678, 494},
+ {"Info3249106877-5554290", 15795, 497}
+ }
+*)
+
+(*NotebookFileOutline
+Notebook[{
+Cell[1705, 50, 423, 12, 348, "Title"],
+
+Cell[CellGroupData[{
+Cell[2153, 66, 106, 2, 46, "Subsection",
+ InitializationCell->True],
+
+Cell[CellGroupData[{
+Cell[2284, 72, 295, 8, 50, "Text",
+ InitializationCell->True],
+Cell[2582, 82, 120, 2, 27, "Input",
+ InitializationCell->True],
+
+Cell[CellGroupData[{
+Cell[2727, 88, 124, 5, 42, "Input",
+ InitializationCell->True],
+Cell[2854, 95, 84, 1, 27, "Output"]
+}, Open ]]
+}, Open ]]
+}, Closed]],
+
+Cell[CellGroupData[{
+Cell[2999, 103, 79, 1, 30, "Subsection"],
+
+Cell[CellGroupData[{
+Cell[3103, 108, 62, 1, 27, "Input"],
+Cell[3168, 111, 753, 11, 183, "Print",
+ CellTags->"Info3249106863-2654627"],
+Cell[3924, 124, 299, 7, 68, "Text"],
+
+Cell[CellGroupData[{
+Cell[4248, 135, 139, 4, 42, "Input"],
+Cell[4390, 141, 392, 11, 117, "Output"],
+
+Cell[CellGroupData[{
+Cell[4807, 156, 70, 1, 27, "Input"],
+Cell[4880, 159, 40, 1, 27, "Output"]
+}, Open ]],
+
+Cell[CellGroupData[{
+Cell[4957, 165, 124, 4, 42, "Input"],
+Cell[5084, 171, 356, 5, 91, "Output"]
+}, Open ]]
+}, Open ]]
+}, Open ]]
+}, Closed]],
+
+Cell[CellGroupData[{
+Cell[5513, 184, 85, 1, 30, "Subsection"],
+
+Cell[CellGroupData[{
+Cell[5623, 189, 75, 1, 27, "Input"],
+Cell[5701, 192, 930, 13, 231, "Print",
+ CellTags->"Info3249106869-2272285"],
+
+Cell[CellGroupData[{
+Cell[6656, 209, 141, 4, 42, "Input"],
+Cell[6800, 215, 670, 9, 155, "Output"]
+}, Open ]]
+}, Open ]],
+Cell[7497, 228, 412, 11, 68, "Text"]
+}, Closed]],
+
+Cell[CellGroupData[{
+Cell[7946, 244, 85, 1, 30, "Subsection"],
+
+Cell[CellGroupData[{
+Cell[8056, 249, 60, 1, 27, "Input"],
+Cell[8119, 252, 613, 9, 151, "Print",
+ CellTags->"Info3249106877-5554290"],
+Cell[8735, 263, 244, 5, 50, "Text"],
+
+Cell[CellGroupData[{
+Cell[9004, 272, 78, 1, 27, "Input"],
+Cell[9085, 275, 40, 1, 27, "Output"]
+}, Open ]],
+
+Cell[CellGroupData[{
+Cell[9162, 281, 130, 5, 57, "Input"],
+Cell[9295, 288, 323, 5, 75, "Output"]
+}, Open ]],
+Cell[9633, 296, 196, 6, 32, "Text"],
+
+Cell[CellGroupData[{
+Cell[9854, 306, 149, 5, 57, "Input"],
+Cell[10006, 313, 633, 9, 139, "Output"]
+}, Open ]]
+}, Open ]],
+
+Cell[CellGroupData[{
+Cell[10688, 328, 255, 6, 50, "Text"],
+
+Cell[CellGroupData[{
+Cell[10968, 338, 86, 1, 27, "Input"],
+Cell[11057, 341, 62, 1, 27, "Output"]
+}, Open ]],
+
+Cell[CellGroupData[{
+Cell[11156, 347, 138, 4, 42, "Input"],
+Cell[11297, 353, 196, 3, 43, "Output"]
+}, Open ]],
+Cell[11508, 359, 342, 7, 68, "Text"]
+}, Open ]]
+}, Closed]],
+
+Cell[CellGroupData[{
+Cell[11899, 372, 94, 1, 30, "Subsection"],
+Cell[11996, 375, 272, 6, 48, "Text"],
+Cell[12271, 383, 61, 1, 27, "Input"],
+
+Cell[CellGroupData[{
+Cell[12357, 388, 124, 4, 42, "Input"],
+Cell[12484, 394, 913, 12, 171, "Output"]
+}, Open ]],
+
+Cell[CellGroupData[{
+Cell[13434, 411, 68, 1, 27, "Input"],
+Cell[13505, 414, 41, 1, 27, "Output"]
+}, Open ]],
+Cell[13561, 418, 141, 5, 57, "Input"],
+
+Cell[CellGroupData[{
+Cell[13727, 427, 74, 1, 27, "Input"],
+Cell[13804, 430, 51, 1, 27, "Output"]
+}, Open ]],
+Cell[13870, 434, 149, 4, 32, "Text"],
+
+Cell[CellGroupData[{
+Cell[14044, 442, 64, 1, 27, "Input"],
+Cell[14111, 445, 291, 4, 59, "Output"]
+}, Open ]]
+}, Closed]],
+
+Cell[CellGroupData[{
+Cell[14451, 455, 81, 1, 30, "Subsection"],
+
+Cell[CellGroupData[{
+Cell[14557, 460, 66, 1, 27, "Input"],
+Cell[14626, 463, 66, 1, 27, "Output"]
+}, Open ]]
+}, Closed]]
+}
+]
+*)
+
+
+
+(*******************************************************************
+End of Mathematica Notebook file.
+*******************************************************************)
+