(* Content-type: application/mathematica *)

(*** Wolfram Notebook File ***)
(* http://www.wolfram.com/nb *)

(* CreatedBy='Mathematica 7.0' *)

(*CacheID: 234*)
(* Internal cache information:
NotebookFileLineBreakTest
NotebookFileLineBreakTest
NotebookDataPosition[       145,          7]
NotebookDataLength[     41743,       1152]
NotebookOptionsPosition[     37640,       1022]
NotebookOutlinePosition[     38215,       1045]
CellTagsIndexPosition[     38172,       1042]
WindowFrame->Normal*)

(* Beginning of Notebook Content *)
Notebook[{
Cell[TextData[StyleBox["In this example we use the package IntroToSymmetry.m \
to work out the point groups of the Korteweg-de Vries equation, \n\n\
Uxxx+UUx+Ut=0.\n\nLie-Backlund groups are worked out in a notebook contained \
in the folder entitled \"Chapter 14 Lie Backlund groups\". ",
 FontSize->14,
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["\<\
This next command turns off spurious spelling error warnings.\
\>", "Text"],

Cell[BoxData[
 RowBox[{"Off", "[", 
  RowBox[{"General", "::", "spell"}], "]"}]], "Input"],

Cell["Clear all symbols in the current context.", "Text",
 CellChangeTimes->{{3.4715644485587473`*^9, 3.47156448605101*^9}}],

Cell[BoxData[
 RowBox[{"ClearAll", "[", 
  RowBox[{"Evaluate", "[", 
   RowBox[{
    RowBox[{"Context", "[", "]"}], "<>", "\"\<*\>\""}], "]"}], "]"}]], "Input",\

 CellChangeTimes->{{3.4715664380286417`*^9, 3.471566443307003*^9}, {
  3.4715664752353897`*^9, 3.471566479873062*^9}}],

Cell[TextData[{
 StyleBox["First read in the package which is located in User Home \
Folder/Library/",
  FontWeight->"Plain"],
 StyleBox["Mathematica",
  FontWeight->"Plain",
  FontSlant->"Italic"],
 StyleBox["/Applications/SymmetryAnalysis.",
  FontWeight->"Plain"]
}], "Text",
 CellChangeTimes->{{3.472046215957556*^9, 3.472046255573135*^9}, {
  3.472046289795615*^9, 3.472046308115048*^9}, {3.4720466725423717`*^9, 
  3.472046673357225*^9}},
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["Needs[\"SymmetryAnalysis`IntroToSymmetry`\"]", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[TextData[StyleBox["Enter the input equation as a string. Don't include \
the == 0 at the end.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{
  "inputequation", "=", "\n", 
   "\"\<D[U[x,t],x,x,x]+U[x,t]*D[U[x,t],x]+D[U[x,t],t]\>\""}], ";"}]], "Input"],

Cell[TextData[{
 StyleBox["The function ",
  FontWeight->"Plain"],
 "U",
 StyleBox[" is a solution of the equation and this constraint must be applied \
in the form of a rule to the invariance condition. Be careful to check signs.",
  FontWeight->"Plain"]
}], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"rulesarray", "=", "\[IndentingNewLine]", 
   RowBox[{
   "{", "\"\<D[U[x,t],x,x,x]\[Rule]-U[x,t]*D[U[x,t],x]-D[U[x,t],t]\>\"", 
    "}"}]}], ";"}]], "Input"],

Cell[TextData[StyleBox["Enter the list of independent variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"independentvariables", "=", 
   RowBox[{"{", 
    RowBox[{"\"\<x\>\"", ",", "\"\<t\>\""}], "}"}]}], ";"}]], "Input"],

Cell[TextData[StyleBox["Enter the list of dependent variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"dependentvariables", "=", 
   RowBox[{"{", "\"\<U\>\"", "}"}]}], ";"}]], "Input"],

Cell[TextData[StyleBox["Enter the list of function and/or constant names that \
must be preserved when the equation is expressed in terms of generic \
variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"frozennames", "=", 
   RowBox[{"{", "\"\<\>\"", "}"}]}], ";"}]], "Input"],

Cell[TextData[StyleBox["Enter the maximum derivative order of the input \
equation(s).",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"porder", "=", "3"}], ";"}]], "Input"],

Cell[TextData[StyleBox["The maximum derivative order that the infinitesimals \
are assumed to depend on is specified by the input parameter rorder. This \
parameter is only nonzero when the user is looking for Lie contact groups or \
Lie-Backlund groups. For the usual case where one is searching for point \
groups set rorder=0.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"rorder", "=", "0"}], ";"}]], "Input"],

Cell[TextData[StyleBox["When searching for Lie-Backlund groups (rorder=1 or \
greater) one can, without loss of generality, leave the independent variables \
untransformed. The corresponding infinitesimals (the xse's) are set to zero \
by setting xseon=0. If one is searching for point groups then set xseon=1. \
The choice xseon=1 is also an option when looking for Lie-Backlund groups and \
this can be useful when \nlooking for contact symmetries.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"xseon", "=", "1"}], ";"}]], "Input"],

Cell[TextData[StyleBox["When searching for Lie-Backlund groups it is \
necessary to differentiate the input equation to produce derivatives of order \
porder+rorder and append these higher order differential consequences to the \
set of rules applied to the invariance condition. This process is carried out \
automatically when internalrules=1. For point groups the equation or equation \
system is the only rule or set of rules needed and one sets internalrules=0.",
 
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"internalrules", "=", "0"}], ";"}]], "Input"],

Cell[TextData[StyleBox["Now work out the determining equations of the Lie \
point group that leaves the equation invariant. The output is available as a \
table of strings called zdeterminingequations.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Timing", "[", 
  RowBox[{"FindDeterminingEquations", "[", "\[IndentingNewLine]", 
   RowBox[{
   "independentvariables", ",", "dependentvariables", ",", "frozennames", ",",
     "porder", ",", "rorder", ",", "xseon", ",", "\[IndentingNewLine]", 
    "inputequation", ",", "rulesarray", ",", "internalrules"}], "]"}], 
  "]"}]], "Input"],

Cell[BoxData[
 InterpretationBox["\<\"The function FindDetermining Equations has begun, the \
memory in use = \\!\\(25091864\\), the time used = \\!\\(0.522037`\\)\"\>",
  StringForm[
  "The function FindDetermining Equations has begun, the memory in use = ``, \
the time used = ``", 25091864, 0.522037],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694711132128687`*^9, 3.471562490609313*^9, 
  3.471579402541843*^9, 3.471579460171418*^9, 3.483747050354862*^9}],

Cell[BoxData["\<\"The function FindDeterminingEquations is nearly complete. \
The invariance condition has been created with all rules applied. The final \
step in the generation of the determining equations is to sum together terms \
in the table of invariance condition terms (called infinitesimaltable) that \
are multiplied by the same combination of products of free y derivatives. The \
result is the table infinitesimaltablesums corresponding to matching \
y-derivative expressions. If the invariance condition is long as it often is \
this process could take a long time since it requires sorting through the \
table infinitesimaltable once for each possible combination of y derivative \
products. This is the rate limiting step in the function \
FindDeterminingEquations.Virtually all other steps are quite fast including \
the generation of the extended derivatives of the infinitesimals.\"\>"], \
"Print",
 CellChangeTimes->{3.4694711132128687`*^9, 3.471562490609313*^9, 
  3.471579402541843*^9, 3.471579460171418*^9, 3.483747050445952*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The determining equations have been expressed in \
terms of z-variables, the length of zdeterminingequations = \\!\\(19\\), the \
byte count of zdeterminingequations = \\!\\(2304\\), the memory in use = \
\\!\\(25320056\\), the time used = \\!\\(0.632235`\\)\"\>",
  StringForm[
  "The determining equations have been expressed in terms of z-variables, the \
length of zdeterminingequations = ``, the byte count of zdeterminingequations \
= ``, the memory in use = ``, the time used = ``", 19, 2304, 25320056, 
   0.632235],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694711132128687`*^9, 3.471562490609313*^9, 
  3.471579402541843*^9, 3.471579460171418*^9, 3.48374705047472*^9}],

Cell[BoxData[
 InterpretationBox["\<\"FindDeterminingEquations is done. The memory in use = \
\\!\\(25321112\\), the time used = \\!\\(0.632521`\\)\"\>",
  StringForm[
  "FindDeterminingEquations is done. The memory in use = ``, the time used = \
``", 25321112, 0.632521],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694711132128687`*^9, 3.471562490609313*^9, 
  3.471579402541843*^9, 3.471579460171418*^9, 3.4837470504766273`*^9}],

Cell[BoxData["\<\"FindDeterminingEquations has finished executing. You can \
look at the output in the table zdeterminingequations. Each entry in this \
table is a determining equation in string format expressed in terms of \
z-variables. Rules for converting between z-variables and conventional \
variables are contained in the table ztableofrules. To view the determining \
equations in terms of conventional variables use the command \
ToExpression[zdeterminingequations]/.ztableofrules. There are two other items \
the user may wish to look at; the equation converted to generic \
(x1,x2,...,y1,y2,...) variables is designated equationgenericvariables and \
the various derivatives of the equation that appear in the invariance \
condition can be viewed in the table invarconditiontable. Rules for \
converting between z-variables and generic variables are contained in the \
table ztableofrulesxy.\"\>"], "Print",
 CellChangeTimes->{3.4694711132128687`*^9, 3.471562490609313*^9, 
  3.471579402541843*^9, 3.471579460171418*^9, 3.4837470504783087`*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0.11132500000000001`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.469471113339526*^9, 3.4715624907165403`*^9, 
  3.471579402679515*^9, 3.471579460294593*^9, 3.483747050508539*^9}]
}, Open  ]],

Cell["\<\
Let's look at the partial derivatives of Burgers equation thatappear in the \
invariance condition.\
\>", "Text"],

Cell[CellGroupData[{

Cell["invarconditiontable", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0", ",", "0", ",", 
   RowBox[{
    SuperscriptBox["y1", 
     TagBox[
      RowBox[{"(", 
       RowBox[{"1", ",", "0"}], ")"}],
      Derivative],
     MultilineFunction->None], "[", 
    RowBox[{"x1", ",", "x2"}], "]"}], ",", 
   RowBox[{"y1", "[", 
    RowBox[{"x1", ",", "x2"}], "]"}], ",", "1", ",", "0", ",", "0", ",", "0", 
   ",", "1", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output",
 CellChangeTimes->{3.469471113381962*^9, 3.4715624907440042`*^9, 
  3.471579402714349*^9, 3.471579460325286*^9, 3.483747050563426*^9}]
}, Open  ]],

Cell["Here are the determining equations in terms of z-variables.", "Text"],

Cell["zdeterminingequations;", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[CellGroupData[{

Cell["Length[zdeterminingequations]", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData["19"], "Output",
 CellChangeTimes->{3.4694711134632893`*^9, 3.471562490792185*^9, 
  3.4715794027753572`*^9, 3.4715794604041643`*^9, 3.483747050637833*^9}]
}, Open  ]],

Cell["\<\
Here is the correspondence between z-variables and conventional variables.\
\>", "Text"],

Cell[CellGroupData[{

Cell["ztableofrules", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
   RowBox[{"z1", "\[Rule]", "x"}], ",", 
   RowBox[{"z2", "\[Rule]", "t"}], ",", 
   RowBox[{"z3", "\[Rule]", 
    RowBox[{"U", "[", 
     RowBox[{"x", ",", "t"}], "]"}]}]}], "}"}]], "Output",
 CellChangeTimes->{3.469471113520643*^9, 3.471562490831362*^9, 
  3.4715794028096657`*^9, 3.4715794604644213`*^9, 3.483747050679858*^9}]
}, Open  ]],

Cell["\<\
Now solve the determining equations in terms of multivariable polynomials. \
The Mathematica function Solve uses Gaussian elimination to solve a large \
number of linear equations for the polynomial coefficients. The time roughly \
follows

time/timeref=((number of equations)/(number of equationsref))^n

where the exponent is between 2.4 and 2.7. The Mathematica function Timing \
outputs the time required for the SolveDeterminingEquations function to \
execute.\
\>", "Text"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Timing", "[", 
  RowBox[{"SolveDeterminingEquations", "[", "\[IndentingNewLine]", 
   RowBox[{
   "independentvariables", ",", "dependentvariables", ",", "rorder", ",", 
    "xseon", ",", "zdeterminingequations", ",", 
    RowBox[{"polyorder", "=", "4"}]}], "]"}], "]"}]], "Input"],

Cell[BoxData[
 InterpretationBox["\<\"The variable powertablelength is the number of terms \
required for each multivariate polynomial used for the infinitesimals. This \
number is determined by the choice of polynomial order and the number of \
zvariables. The time needed to solve the determining equations increases as \
powertable increases. powertablelength = \\!\\(35\\)\"\>",
  StringForm[
  "The variable powertablelength is the number of terms required for each \
multivariate polynomial used for the infinitesimals. This number is \
determined by the choice of polynomial order and the number of zvariables. \
The time needed to solve the determining equations increases as powertable \
increases. powertablelength = ``", 35],
  Editable->False]], "Print",
 CellChangeTimes->{3.469471113580216*^9, 3.4715624908627872`*^9, 
  3.471579402850955*^9, 3.471579460510989*^9, 3.483747050708461*^9}],

Cell[BoxData["\<\"The polynomial expansions have been substituted into the \
determining equations. It is now time to collect the coefficients of various \
powers of zvariables into a table called table of coefficientsall. This step \
uses the function CoefficientList and is a fairly time consuming procedure.\"\
\>"], "Print",
 CellChangeTimes->{3.469471113580216*^9, 3.4715624908627872`*^9, 
  3.471579402850955*^9, 3.471579460510989*^9, 3.483747050764317*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(25798480\\), The time = \\!\
\\(0.6777`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 25798480, 0.6777],
  Editable->False]], "Print",
 CellChangeTimes->{3.469471113580216*^9, 3.4715624908627872`*^9, 
  3.471579402850955*^9, 3.471579460510989*^9, 3.4837470507654943`*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The number of unknown polynomial coefficients = \
\\!\\(105\\)\"\>",
  StringForm["The number of unknown polynomial coefficients = ``", 105],
  Editable->False]], "Print",
 CellChangeTimes->{3.469471113580216*^9, 3.4715624908627872`*^9, 
  3.471579402850955*^9, 3.471579460510989*^9, 3.483747050766631*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The number of equations for the polynomial \
coefficients = \\!\\(230\\)\"\>",
  StringForm[
  "The number of equations for the polynomial coefficients = ``", 230],
  Editable->False]], "Print",
 CellChangeTimes->{3.469471113580216*^9, 3.4715624908627872`*^9, 
  3.471579402850955*^9, 3.471579460510989*^9, 3.4837470507677813`*^9}],

Cell[BoxData["\<\"Now it we are ready to use the function Solve to find the \
nonzero polynomial coefficients corresponding to the symmetries of the input \
equation(s). This can take a while.\"\>"], "Print",
 CellChangeTimes->{3.469471113580216*^9, 3.4715624908627872`*^9, 
  3.471579402850955*^9, 3.471579460510989*^9, 3.4837470507690573`*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(25887592\\), The time = \\!\
\\(0.685457`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 25887592, 0.685457],
  Editable->False]], "Print",
 CellChangeTimes->{3.469471113580216*^9, 3.4715624908627872`*^9, 
  3.471579402850955*^9, 3.471579460510989*^9, 3.4837470507702*^9}],

Cell[BoxData["\<\"Solve has finished.\"\>"], "Print",
 CellChangeTimes->{3.469471113580216*^9, 3.4715624908627872`*^9, 
  3.471579402850955*^9, 3.471579460510989*^9, 3.483747050771268*^9}],

Cell[BoxData["\<\"The function SolveDeterminingEquations is finished \
executing.\"\>"], "Print",
 CellChangeTimes->{3.469471113580216*^9, 3.4715624908627872`*^9, 
  3.471579402850955*^9, 3.471579460510989*^9, 3.4837470507723503`*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(26082088\\), The time = \\!\
\\(0.695838`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 26082088, 0.695838],
  Editable->False]], "Print",
 CellChangeTimes->{3.469471113580216*^9, 3.4715624908627872`*^9, 
  3.471579402850955*^9, 3.471579460510989*^9, 3.4837470507734823`*^9}],

Cell[BoxData["\<\"You can look at the output in the tables xsefunctions and \
etafunctions. Each entry in these tables is an infinitesimal function in \
string format expressed in terms of z-variables and the group parameters. The \
output can also be viewed with the group parameters stripped away by looking \
at the table infinitesimalgroups. In either case you may wish to convert the \
z-variables to conventional variables using the table ztableofrules. \
\\n\\nKeep in mind that this function only finds solutions of the determining \
equations that are of polynomial form. The determining equations may admit \
solutions that involve transcendental functions and/or integrals. Note that \
arbitrary functions may appear in the infinitesimals and that these can be \
detected by running the package function SolveDeterminingEquations for \
several polynomial orders. If terms of ever increasing order appear, then an \
arbitrary function is indicated.\"\>"], "Print",
 CellChangeTimes->{3.469471113580216*^9, 3.4715624908627872`*^9, 
  3.471579402850955*^9, 3.471579460510989*^9, 3.483747050775373*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0.05943599999999993`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.4694711136187277`*^9, 3.471562490913612*^9, 
  3.471579402916059*^9, 3.471579460545878*^9, 3.4837470507764187`*^9}]
}, Open  ]],

Cell["\<\
Here are the infinitesimal transformation functions for the independent \
variables.\
\>", "Text"],

Cell[CellGroupData[{

Cell["xsefunctions", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"\<\"xse1[z1_, z2_, z3_]=a10 - (b115*z1)/2 + b10*z2\"\>", 
   ",", "\<\"xse2[z1_, z2_, z3_]=a20 - (3*b115*z2)/2\"\>"}], "}"}]], "Output",\

 CellChangeTimes->{3.469471113648603*^9, 3.471562490945527*^9, 
  3.47157940294744*^9, 3.47157946059245*^9, 3.483747050809716*^9}]
}, Open  ]],

Cell["and for the dependent variables.", "Text"],

Cell[CellGroupData[{

Cell["etafunctions", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{"{", "\<\"eta1[z1_, z2_, z3_]=b10 + b115*z3\"\>", "}"}]], "Output",
 CellChangeTimes->{3.469471113703846*^9, 3.471562490994397*^9, 
  3.471579402980587*^9, 3.471579460646942*^9, 3.4837470508553257`*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[StyleBox["Usually the KdV equation is expressed in terms of x, \
t and u.Express the xse functions in terms of these variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"ToExpression", "[", "xsefunctions", "]"}], "/.", 
  RowBox[{"{", 
   RowBox[{
    RowBox[{"z1", "\[Rule]", "x"}], ",", 
    RowBox[{"z2", "\[Rule]", "t"}], ",", 
    RowBox[{"z3", "\[Rule]", "U"}]}], "}"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
   RowBox[{"a10", "+", 
    RowBox[{"b10", " ", "t"}], "-", 
    FractionBox[
     RowBox[{"b115", " ", "x"}], "2"]}], ",", 
   RowBox[{"a20", "-", 
    FractionBox[
     RowBox[{"3", " ", "b115", " ", "t"}], "2"]}]}], "}"}]], "Output",
 CellChangeTimes->{3.469471113737443*^9, 3.4715624910438213`*^9, 
  3.4715794030094357`*^9, 3.471579460693946*^9, 3.483747050922163*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[StyleBox["Express the eta function in terms of these variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"ToExpression", "[", "etafunctions", "]"}], "/.", 
  RowBox[{"{", 
   RowBox[{
    RowBox[{"z1", "\[Rule]", "x"}], ",", 
    RowBox[{"z2", "\[Rule]", "t"}], ",", 
    RowBox[{"z3", "\[Rule]", "U"}]}], "}"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"b10", "+", 
   RowBox[{"b115", " ", "U"}]}], "}"}]], "Output",
 CellChangeTimes->{3.4694711137879133`*^9, 3.4715624910947313`*^9, 
  3.4715794030480843`*^9, 3.47157946074226*^9, 3.483747050971973*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"infinitesimalgroups1", "=", 
  RowBox[{"infinitesimalgroups", "/.", 
   RowBox[{"{", 
    RowBox[{
     RowBox[{"z1", "\[Rule]", "x"}], ",", 
     RowBox[{"z2", "\[Rule]", "t"}], ",", 
     RowBox[{"z3", "\[Rule]", "U"}]}], "}"}]}]}]], "Input"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
   RowBox[{"{", 
    RowBox[{
     RowBox[{"{", 
      RowBox[{"1", ",", "0"}], "}"}], ",", 
     RowBox[{"{", "0", "}"}]}], "}"}], ",", 
   RowBox[{"{", 
    RowBox[{
     RowBox[{"{", 
      RowBox[{"0", ",", "1"}], "}"}], ",", 
     RowBox[{"{", "0", "}"}]}], "}"}], ",", 
   RowBox[{"{", 
    RowBox[{
     RowBox[{"{", 
      RowBox[{"t", ",", "0"}], "}"}], ",", 
     RowBox[{"{", "1", "}"}]}], "}"}], ",", 
   RowBox[{"{", 
    RowBox[{
     RowBox[{"{", 
      RowBox[{
       RowBox[{"-", 
        FractionBox["x", "2"]}], ",", 
       RowBox[{"-", 
        FractionBox[
         RowBox[{"3", " ", "t"}], "2"]}]}], "}"}], ",", 
     RowBox[{"{", "U", "}"}]}], "}"}]}], "}"}]], "Output",
 CellChangeTimes->{3.46947111383807*^9, 3.471562491145562*^9, 
  3.471579403077265*^9, 3.4715794607974997`*^9, 3.4837470511221533`*^9}]
}, Open  ]],

Cell["\<\
Check the groups. xse's are on the left,eta's are on the right.\
\>", "Text"],

Cell[BoxData[
 RowBox[{"Column", "[", "infinitesimalgroups1", "]"}]], "Input"],

Cell[BoxData[
 TagBox[GridBox[{
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{"1", ",", "0"}], "}"}], ",", 
       RowBox[{"{", "0", "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{"0", ",", "1"}], "}"}], ",", 
       RowBox[{"{", "0", "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{"t", ",", "0"}], "}"}], ",", 
       RowBox[{"{", "1", "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{
         RowBox[{"-", 
          FractionBox["x", "2"]}], ",", 
         RowBox[{"-", 
          FractionBox[
           RowBox[{"3", " ", "t"}], "2"]}]}], "}"}], ",", 
       RowBox[{"{", "U", "}"}]}], "}"}]}
   },
   GridBoxAlignment->{"Columns" -> {{Left}}},
   GridBoxItemSize->{"Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}],
  "Column"]], "Output",
 CellChangeTimes->{3.469471113888722*^9, 3.4715624911950283`*^9, 
  3.4715794031140203`*^9, 3.471579460843169*^9, 3.483747051171126*^9}],

Cell[TextData[StyleBox["Check the solution in the determining equations.",
 FontWeight->"Plain"]], "Text",
 CellChangeTimes->{{3.471560687887658*^9, 3.471560717268311*^9}},
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Simplify", "[", 
  RowBox[{"ToExpression", "[", "zdeterminingequations", "]"}], "]"}]], "Input",\

 CellChangeTimes->{{3.471560722979608*^9, 3.4715607756901417`*^9}}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
  "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", 
   ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", 
   "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", 
   ",", "True", ",", "True"}], "}"}]], "Output",
 CellChangeTimes->{3.471562491245331*^9, 3.4715794031443377`*^9, 
  3.471579460898511*^9, 3.483747051242762*^9}]
}, Open  ]],

Cell[TextData[StyleBox["This is the four-parameter point group of the KdV \
equation. This equation is discussed extensively in Chapter 14 and Chapter \
16.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{"MakeCommutatorTable", "[", "\[IndentingNewLine]", 
  RowBox[{
  "independentvariables", ",", "dependentvariables", ",", 
   "infinitesimalgroups1"}], "]"}]], "Input"],

Cell[BoxData["\<\"MakeCommutatorTable has finished executing. You can look at \
the output in the table commutatortable. To present the output in the most \
readable form you may want view it as a matrix using \
MatrixForm[commutatortable]. Occasionally the entries in the commutatortable \
will have terms that cancel. To get rid of these terms use the function \
Simplify before viewing the table.\"\>"], "Print",
 CellChangeTimes->{3.4694711140156193`*^9, 3.471562491294619*^9, 
  3.471579403194491*^9, 3.471579461021297*^9, 3.4837470513106833`*^9}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"MatrixForm", "[", "commutatortable", "]"}]], "Input"],

Cell[BoxData[
 TagBox[
  RowBox[{"(", "\[NoBreak]", GridBox[{
     {
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{
             RowBox[{"-", 
              FractionBox["1", "2"]}], ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}]},
     {
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"1", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", 
             RowBox[{"-", 
              FractionBox["3", "2"]}]}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}]},
     {
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{
             RowBox[{"-", "1"}], ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"t", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "1", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}]},
     {
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{
             FractionBox["1", "2"], ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", 
             FractionBox["3", "2"]}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{
             RowBox[{"-", "t"}], ",", "0"}], "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"-", "1"}], "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}]}
    },
    GridBoxAlignment->{
     "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, 
      "RowsIndexed" -> {}},
    GridBoxSpacings->{"Columns" -> {
        Offset[0.27999999999999997`], {
         Offset[0.7]}, 
        Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
        Offset[0.2], {
         Offset[0.4]}, 
        Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}],
  Function[BoxForm`e$, 
   MatrixForm[BoxForm`e$]]]], "Output",
 CellChangeTimes->{3.469471114075657*^9, 3.47156249141152*^9, 
  3.4715794032338*^9, 3.4715794610702744`*^9, 3.4837470513742123`*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"MaxMemoryUsed", "[", " ", "]"}]], "Input"],

Cell[BoxData["26593568"], "Output",
 CellChangeTimes->{3.469471114117669*^9, 3.4715624914615107`*^9, 
  3.471579403342956*^9, 3.47157946110931*^9, 3.483747051445972*^9}]
}, Open  ]]
},
WindowToolbars->{},
CellGrouping->Manual,
WindowSize->{988, 871},
WindowMargins->{{182, Automatic}, {Automatic, 54}},
PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}},
ShowCellLabel->True,
ShowCellTags->False,
RenderingOptions->{"ObjectDithering"->True,
"RasterDithering"->False},
Magnification->1.25,
FrontEndVersion->"7.0 for Mac OS X x86 (32-bit) (February 18, 2009)",
StyleDefinitions->"Default.nb"
]
(* End of Notebook Content *)

(* Internal cache information *)
(*CellTagsOutline
CellTagsIndex->{}
*)
(*CellTagsIndex
CellTagsIndex->{}
*)
(*NotebookFileOutline
Notebook[{
Cell[545, 20, 368, 6, 117, "Text"],
Cell[916, 28, 85, 2, 32, "Text"],
Cell[1004, 32, 90, 2, 33, "Input"],
Cell[1097, 36, 124, 1, 32, "Text"],
Cell[1224, 39, 281, 7, 33, "Input"],
Cell[1508, 48, 476, 13, 32, "Text"],
Cell[1987, 63, 93, 1, 33, "Input"],
Cell[2083, 66, 164, 3, 32, "Text"],
Cell[2250, 71, 145, 4, 53, "Input"],
Cell[2398, 77, 299, 8, 51, "Text"],
Cell[2700, 87, 192, 5, 53, "Input"],
Cell[2895, 94, 130, 2, 32, "Text"],
Cell[3028, 98, 151, 4, 33, "Input"],
Cell[3182, 104, 128, 2, 32, "Text"],
Cell[3313, 108, 116, 3, 33, "Input"],
Cell[3432, 113, 227, 4, 32, "Text"],
Cell[3662, 119, 108, 3, 33, "Input"],
Cell[3773, 124, 152, 3, 32, "Text"],
Cell[3928, 129, 72, 2, 33, "Input"],
Cell[4003, 133, 395, 6, 70, "Text"],
Cell[4401, 141, 72, 2, 33, "Input"],
Cell[4476, 145, 516, 7, 89, "Text"],
Cell[4995, 154, 71, 2, 33, "Input"],
Cell[5069, 158, 534, 8, 89, "Text"],
Cell[5606, 168, 79, 2, 33, "Input"],
Cell[5688, 172, 267, 4, 51, "Text"],
Cell[CellGroupData[{
Cell[5980, 180, 360, 7, 72, "Input"],
Cell[6343, 189, 469, 8, 45, "Print"],
Cell[6815, 199, 1052, 14, 197, "Print"],
Cell[7870, 215, 726, 12, 64, "Print"],
Cell[8599, 229, 439, 8, 25, "Print"],
Cell[9041, 239, 1056, 14, 216, "Print"],
Cell[10100, 255, 230, 4, 33, "Output"]
}, Open  ]],
Cell[10345, 262, 123, 3, 32, "Text"],
Cell[CellGroupData[{
Cell[10493, 269, 68, 1, 33, "Input"],
Cell[10564, 272, 569, 15, 42, "Output"]
}, Open  ]],
Cell[11148, 290, 75, 0, 32, "Text"],
Cell[11226, 292, 71, 1, 33, "Input"],
Cell[CellGroupData[{
Cell[11322, 297, 78, 1, 33, "Input"],
Cell[11403, 300, 168, 2, 33, "Output"]
}, Open  ]],
Cell[11586, 305, 98, 2, 32, "Text"],
Cell[CellGroupData[{
Cell[11709, 311, 62, 1, 33, "Input"],
Cell[11774, 314, 369, 9, 33, "Output"]
}, Open  ]],
Cell[12158, 326, 489, 11, 145, "Text"],
Cell[CellGroupData[{
Cell[12672, 341, 305, 6, 53, "Input"],
Cell[12980, 349, 901, 14, 83, "Print"],
Cell[13884, 365, 463, 6, 83, "Print"],
Cell[14350, 373, 352, 6, 25, "Print"],
Cell[14705, 381, 344, 6, 25, "Print"],
Cell[15052, 389, 369, 7, 25, "Print"],
Cell[15424, 398, 345, 4, 45, "Print"],
Cell[15772, 404, 352, 6, 25, "Print"],
Cell[16127, 412, 188, 2, 25, "Print"],
Cell[16318, 416, 234, 3, 25, "Print"],
Cell[16555, 421, 356, 6, 25, "Print"],
Cell[16914, 429, 1109, 14, 235, "Print"],
Cell[18026, 445, 232, 4, 33, "Output"]
}, Open  ]],
Cell[18273, 452, 108, 3, 32, "Text"],
Cell[CellGroupData[{
Cell[18406, 459, 61, 1, 33, "Input"],
Cell[18470, 462, 309, 6, 33, "Output"]
}, Open  ]],
Cell[18794, 471, 48, 0, 32, "Text"],
Cell[CellGroupData[{
Cell[18867, 475, 61, 1, 33, "Input"],
Cell[18931, 478, 225, 3, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[19193, 486, 207, 3, 32, "Text"],
Cell[19403, 491, 253, 7, 33, "Input"],
Cell[19659, 500, 413, 11, 53, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[20109, 516, 143, 2, 32, "Text"],
Cell[20255, 520, 253, 7, 33, "Input"],
Cell[20511, 529, 240, 5, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[20788, 539, 268, 7, 33, "Input"],
Cell[21059, 548, 871, 29, 53, "Output"]
}, Open  ]],
Cell[21945, 580, 87, 2, 32, "Text"],
Cell[22035, 584, 78, 1, 33, "Input"],
Cell[22116, 587, 1055, 36, 103, "Output"],
Cell[23174, 625, 204, 3, 32, "Text"],
Cell[CellGroupData[{
Cell[23403, 632, 190, 4, 33, "Input"],
Cell[23596, 638, 428, 8, 53, "Output"]
}, Open  ]],
Cell[24039, 649, 222, 4, 32, "Text"],
Cell[24264, 655, 190, 4, 53, "Input"],
Cell[24457, 661, 552, 7, 102, "Print"],
Cell[CellGroupData[{
Cell[25034, 672, 77, 1, 33, "Input"],
Cell[25114, 675, 12235, 334, 223, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[37386, 1014, 66, 1, 33, "Input"],
Cell[37455, 1017, 169, 2, 33, "Output"]
}, Open  ]]
}
]
*)

(* End of internal cache information *)
