(* 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[     41136,       1102]
NotebookOptionsPosition[     37019,        973]
NotebookOutlinePosition[     37797,       1000]
CellTagsIndexPosition[     37754,        997]
WindowFrame->Normal*)

(* Beginning of Notebook Content *)
Notebook[{
Cell[TextData[StyleBox["In this example we use the package IntroToSymmetry.m \
to work out the point group of the PDE, \n\nfxx+fyy-(c^2/4)f=0.\n\nThis \
equation comes up in connection with a model of a laminar jet diffusion flame \
with convection. See the 1993 paper by S. Mahalingam entitled \"Self-similar \
diffusion flame including effects of streamwise diffusion\", Combustion \
Science and Technology, 89: 363-373. ",
 FontSize->14,
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

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"],

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[BoxData[
 RowBox[{"Needs", "[", "\"\<SymmetryAnalysis`IntroToSymmetry`\>\"", 
  "]"}]], "Input"],

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[f[x,y],x,x]+D[f[x,y],y,y]-(c^2/4)*f[x,y]\>\""}], ";"}]], "Input"],

Cell[TextData[{
 StyleBox["The function ",
  FontWeight->"Plain"],
 "f[x, y]",
 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[f[x,y],y,y]\[Rule]-D[f[x,y],x,x]+(c^2/4)*f[x,y]\>\"", "}"}]}], 
  ";"}]], "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\>\"", ",", "\"\<y\>\""}], "}"}]}], ";"}]], "Input"],

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

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

Cell[TextData[StyleBox["Enter the list of function and/or constant names that \
need to be preserved when the equation is converted to generic y1[x1,x2] \
variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"frozennames", "=", 
   RowBox[{"{", "\"\<c\>\"", "}"}]}], ";"}]], "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[{"p", "=", "2"}], ";"}]], "Input"],

Cell[TextData[StyleBox["The maximum derivative order that the infinitesimals \
are assumed to depend on is specified by the input parameter r. 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 r=0.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

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

Cell[TextData[StyleBox["When searching for Lie-Backlund groups (r=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  looking 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 with respect to each \
independent variable producing derivatives of order p+r. These higher order \
differential consequences are appended 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", ",",
     "p", ",", "r", ",", "xseon", ",", "inputequation", ",", "rulesarray", 
    ",", "internalrules"}], "]"}], "]"}]], "Input"],

Cell[BoxData[
 InterpretationBox["\<\"The function FindDetermining Equations has begun, the \
memory in use = \\!\\(38309760\\), the time used = \\!\\(14.03032`\\)\"\>",
  StringForm[
  "The function FindDetermining Equations has begun, the memory in use = ``, \
the time used = ``", 38309760, 14.03032],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694060025394783`*^9, 3.4715610176635647`*^9, 
  3.4715791223051147`*^9, 3.4837464580842876`*^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.4694060025394783`*^9, 3.4715610176635647`*^9, 
  3.4715791223051147`*^9, 3.4837464581354713`*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The determining equations have been expressed in \
terms of z-variables, the length of zdeterminingequations = \\!\\(13\\), the \
byte count of zdeterminingequations = \\!\\(1816\\), the memory in use = \
\\!\\(38376032\\), the time used = \\!\\(14.116943`\\)\"\>",
  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 = ``", 13, 1816, 38376032, 
   14.116943],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694060025394783`*^9, 3.4715610176635647`*^9, 
  3.4715791223051147`*^9, 3.483746458169791*^9}],

Cell[BoxData[
 InterpretationBox["\<\"FindDeterminingEquations is done. The memory in use = \
\\!\\(38376496\\), the time used = \\!\\(14.117168999999999`\\)\"\>",
  StringForm[
  "FindDeterminingEquations is done. The memory in use = ``, the time used = \
``", 38376496, 14.117168999999999`],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694060025394783`*^9, 3.4715610176635647`*^9, 
  3.4715791223051147`*^9, 3.483746458171788*^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.4694060025394783`*^9, 3.4715610176635647`*^9, 
  3.4715791223051147`*^9, 3.483746458173566*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0.08771899999999988`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.4694060026471*^9, 3.471561017777307*^9, 
  3.471579122408423*^9, 3.483746458176136*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData["equationgenericvariables"], "Input"],

Cell[BoxData["\<\"D[y1[x1,x2],x1,x1]+D[y1[x1,x2],x2,x2]-(c^2/4)*y1[x1,x2]\"\>\
"], "Output",
 CellChangeTimes->{3.4694060026790857`*^9, 3.471561017817338*^9, 
  3.4715791224549007`*^9, 3.4837464582070627`*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData["invarconditiontable"], "Input"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0", ",", "0", ",", 
   RowBox[{"-", 
    FractionBox[
     SuperscriptBox["c", "2"], "4"]}], ",", "0", ",", "0", ",", "1", ",", "0",
    ",", "1"}], "}"}]], "Output",
 CellChangeTimes->{3.469406002730777*^9, 3.471561017872716*^9, 
  3.471579122509371*^9, 3.483746458258565*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[StyleBox["The program expresses the determining equations in \
terms of zvariables. Here is the correspondence between z-variables and \
conventional variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[CellGroupData[{

Cell[BoxData["ztableofrules"], "Input"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
   RowBox[{"z1", "\[Rule]", "x"}], ",", 
   RowBox[{"z2", "\[Rule]", "y"}], ",", 
   RowBox[{"z3", "\[Rule]", 
    RowBox[{"f", "[", 
     RowBox[{"x", ",", "y"}], "]"}]}]}], "}"}]], "Output",
 CellChangeTimes->{3.469406002781229*^9, 3.471561017917799*^9, 
  3.471579122555801*^9, 3.48374645830862*^9}]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[StyleBox["Here are the determining equations expressed in terms \
of z-variables.The equations in the table can be distinguished by the == 0 at \
the end of each item.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 TagBox[
  FormBox[
   RowBox[{"Column", "[", "zdeterminingequations", "]"}],
   TraditionalForm],
  TraditionalForm,
  Editable->True]], "Input"],

Cell[BoxData[
 TagBox[GridBox[{
    {"\<\"-4*Derivative[0, 0, 1][xse1][z1, z2, z3] == 0\"\>"},
    {"\<\"-4*Derivative[0, 0, 1][xse2][z1, z2, z3] == 0\"\>"},
    {"\<\"4*Derivative[0, 0, 1][xse2][z1, z2, z3] == 0\"\>"},
    {"\<\"-2*Derivative[0, 0, 2][xse1][z1, z2, z3] == 0\"\>"},
    {"\<\"-2*Derivative[0, 0, 2][xse2][z1, z2, z3] == 0\"\>"},
    {"\<\"2*Derivative[0, 0, 2][eta1][z1, z2, z3] - 4*Derivative[0, 1, \
1][xse2][z1, z2, z3] == 0\"\>"},
    {"\<\"4*Derivative[0, 1, 0][xse2][z1, z2, z3] - 4*Derivative[1, 0, \
0][xse1][z1, z2, z3] == 0\"\>"},
    {"\<\"-4*Derivative[0, 1, 0][xse1][z1, z2, z3] - 4*Derivative[1, 0, \
0][xse2][z1, z2, z3] == 0\"\>"},
    {"\<\"2*Derivative[0, 0, 2][eta1][z1, z2, z3] - 4*Derivative[1, 0, \
1][xse1][z1, z2, z3] == 0\"\>"},
    {"\<\"-4*Derivative[0, 1, 1][xse1][z1, z2, z3] - 4*Derivative[1, 0, \
1][xse2][z1, z2, z3] == 0\"\>"},
    {"\<\"-(c^2*eta1[z1, z2, z3])/2 + (c^2*z3*Derivative[0, 0, 1][eta1][z1, \
z2, z3])/2 - c^2*z3*Derivative[0, 1, 0][xse2][z1, z2, z3] + 2*Derivative[0, \
2, 0][eta1][z1, z2, z3] + 2*Derivative[2, 0, 0][eta1][z1, z2, z3] == 0\"\>"},
    {"\<\"-(c^2*z3*Derivative[0, 0, 1][xse1][z1, z2, z3])/2 - 2*Derivative[0, \
2, 0][xse1][z1, z2, z3] + 4*Derivative[1, 0, 1][eta1][z1, z2, z3] - \
2*Derivative[2, 0, 0][xse1][z1, z2, z3] == 0\"\>"},
    {"\<\"(-3*c^2*z3*Derivative[0, 0, 1][xse2][z1, z2, z3])/2 + \
4*Derivative[0, 1, 1][eta1][z1, z2, z3] - 2*Derivative[0, 2, 0][xse2][z1, z2, \
z3] - 2*Derivative[2, 0, 0][xse2][z1, z2, z3] == 0\"\>"}
   },
   GridBoxAlignment->{"Columns" -> {{Left}}},
   GridBoxItemSize->{"Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}],
  "Column"]], "Output",
 CellChangeTimes->{3.469406002825747*^9, 3.471561017972711*^9, 
  3.4715791226098843`*^9, 3.483746458353632*^9}]
}, Open  ]],

Cell["How many determining equations are there?", "Text"],

Cell[CellGroupData[{

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

Cell[BoxData["13"], "Output",
 CellChangeTimes->{3.4694060028619013`*^9, 3.471561018017454*^9, 
  3.471579122655548*^9, 3.4837464584084797`*^9}]
}, Open  ]],

Cell["\<\
Now solve the determining equations in terms of multivariable polynomials of \
a selected order. 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", ",", "r", ",", "xseon", 
    ",", "zdeterminingequations", ",", 
    RowBox[{"order", "=", "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.4694060029156647`*^9, 3.471561018073339*^9, 
  3.4715791227137423`*^9, 3.483746458451408*^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.4694060029156647`*^9, 3.471561018073339*^9, 
  3.4715791227137423`*^9, 3.483746458508388*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(38474264\\), The time = \\!\
\\(14.167491`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 38474264, 14.167491],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694060029156647`*^9, 3.471561018073339*^9, 
  3.4715791227137423`*^9, 3.483746458509635*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The number of unknown polynomial coefficients = \
\\!\\(105\\)\"\>",
  StringForm["The number of unknown polynomial coefficients = ``", 105],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694060029156647`*^9, 3.471561018073339*^9, 
  3.4715791227137423`*^9, 3.483746458510806*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The number of equations for the polynomial \
coefficients = \\!\\(225\\)\"\>",
  StringForm[
  "The number of equations for the polynomial coefficients = ``", 225],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694060029156647`*^9, 3.471561018073339*^9, 
  3.4715791227137423`*^9, 3.4837464585119677`*^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.4694060029156647`*^9, 3.471561018073339*^9, 
  3.4715791227137423`*^9, 3.483746458513296*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(38496032\\), The time = \\!\
\\(14.176361`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 38496032, 14.176361],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694060029156647`*^9, 3.471561018073339*^9, 
  3.4715791227137423`*^9, 3.4837464585144873`*^9}],

Cell[BoxData["\<\"Solve has finished.\"\>"], "Print",
 CellChangeTimes->{3.4694060029156647`*^9, 3.471561018073339*^9, 
  3.4715791227137423`*^9, 3.4837464585155897`*^9}],

Cell[BoxData["\<\"The function SolveDeterminingEquations is finished \
executing.\"\>"], "Print",
 CellChangeTimes->{3.4694060029156647`*^9, 3.471561018073339*^9, 
  3.4715791227137423`*^9, 3.4837464585167093`*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(38517096\\), The time = \\!\
\\(14.192622`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 38517096, 14.192622],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694060029156647`*^9, 3.471561018073339*^9, 
  3.4715791227137423`*^9, 3.4837464585179043`*^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.4694060029156647`*^9, 3.471561018073339*^9, 
  3.4715791227137423`*^9, 3.483746458519862*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0.07076899999999853`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.469406003014071*^9, 3.471561018124208*^9, 
  3.471579122764037*^9, 3.4837464585209503`*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[StyleBox["Here are the infinitesimals for the independent \
variables expressed in terms of z-variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData["xsefunctions"], "Input"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"\<\"xse1[z1_, z2_, z3_]=a10 - a21*z2\"\>", 
   ",", "\<\"xse2[z1_, z2_, z3_]=a20 + a21*z1\"\>"}], "}"}]], "Output",
 CellChangeTimes->{3.469406003077324*^9, 3.471561018168685*^9, 
  3.4715791228057423`*^9, 3.483746458553747*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[StyleBox["and the infinitesimals for the dependent variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData["etafunctions"], "Input"],

Cell[BoxData[
 RowBox[{"{", "\<\"eta1[z1_, z2_, z3_]=b115*z3\"\>", "}"}]], "Output",
 CellChangeTimes->{3.469406003140018*^9, 3.471561018223289*^9, 
  3.471579122860869*^9, 3.483746458607749*^9}]
}, Open  ]],

Cell["Here is a list of the various infinitesimal groups.", "Text"],

Cell[BoxData[
 RowBox[{
  RowBox[{"infinitesimalgroupsxy", "=", 
   RowBox[{"infinitesimalgroups", "/.", 
    RowBox[{"{", 
     RowBox[{
      RowBox[{"z1", "\[Rule]", "x"}], ",", 
      RowBox[{"z2", "\[Rule]", "y"}], ",", 
      RowBox[{"z3", "\[Rule]", "f"}], ",", 
      RowBox[{"z4", "\[Rule]", "fx"}], ",", 
      RowBox[{"z5", "\[Rule]", "fy"}]}], "}"}]}]}], ";"}]], "Input"],

Cell[BoxData[
 RowBox[{"Column", "[", "infinitesimalgroupsxy", "]"}]], "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[{
         RowBox[{"-", "y"}], ",", "x"}], "}"}], ",", 
       RowBox[{"{", "0", "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{"0", ",", "0"}], "}"}], ",", 
       RowBox[{"{", "f", "}"}]}], "}"}]}
   },
   GridBoxAlignment->{"Columns" -> {{Left}}},
   GridBoxItemSize->{"Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}],
  "Column"]], "Output",
 CellChangeTimes->{3.4694060032399282`*^9, 3.471561018296946*^9, 
  3.4715791229355383`*^9, 3.4837464586847563`*^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"}], "}"}]], "Output",
 CellChangeTimes->{3.4715610183641376`*^9, 3.4715791229942923`*^9, 
  3.483746458735434*^9}]
}, Open  ]],

Cell[TextData[{
 "Note that the infinitesimal polynomials truncate in spite of the linearity \
of the equation. In other words the order of the solution does not continue \
to increase as the order of the trial polynomial is increased. The reason for \
this is that the presence of f[x,y] in the last term of the equation rather \
than a derivative of f[x,y] makes it impossible for a polynomial of any order \
to satisfy the equation.  Nevertheless the equation must admit the group \
{{0,0},{g[x,y]}} where g[x,y] is any solution of the equation. ",
 StyleBox["Now generate the commutator table.",
  FontWeight->"Plain"]
}], "Text",
 CellChangeTimes->{{3.4715609430802393`*^9, 3.471560954941564*^9}}],

Cell[BoxData[
 RowBox[{"MakeCommutatorTable", "[", "\[IndentingNewLine]", 
  RowBox[{
  "independentvariables", ",", "dependentvariables", ",", 
   "infinitesimalgroupsxy"}], "]"}]], "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.469406003373088*^9, 3.471561018435657*^9, 
  3.47157912311829*^9, 3.483746458882341*^9}],

Cell[TextData[StyleBox["Put the commutator table in readable form.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

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", ",", "1"}], "}"}]},
          {
           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[{"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[{"0", ",", 
             RowBox[{"-", "1"}]}], "}"}]},
          {
           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", ",", "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[{"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]", ")"}]}
    },
    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.469406003443329*^9, 3.4715610185831003`*^9, 
  3.471579123184167*^9, 3.483746458953567*^9}]
}, Open  ]],

Cell[CellGroupData[{

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

Cell[BoxData["40944184"], "Output",
 CellChangeTimes->{3.469406003574398*^9, 3.471561018652321*^9, 
  3.47157912322269*^9, 3.483746459017641*^9}]
}, Open  ]]
},
WindowToolbars->{},
CellGrouping->Manual,
WindowSize->{1033, 1078},
WindowMargins->{{26, Automatic}, {Automatic, 23}},
PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}},
ShowCellLabel->True,
ShowCellTags->False,
RenderingOptions->{"ObjectDithering"->True,
"RasterDithering"->False},
MacintoshSystemPageSetup -> \
"01@0001804P000000_82@?okonh34`9B;@85:0?l0@00009H0UP00P0068dB`001\n\
2@00I00100000@004Q800BL?0040000000000000000004<001000`00000@0?oH\n\
ofXIX1=F8040400000400000000000l1",
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, 504, 8, 159, "Text"],
Cell[1052, 30, 124, 1, 32, "Text"],
Cell[1179, 33, 160, 4, 33, "Input"],
Cell[1342, 39, 476, 13, 32, "Text"],
Cell[1821, 54, 101, 2, 33, "Input"],
Cell[1925, 58, 164, 3, 32, "Text"],
Cell[2092, 63, 141, 4, 53, "Input"],
Cell[2236, 69, 305, 8, 51, "Text"],
Cell[2544, 79, 186, 5, 53, "Input"],
Cell[2733, 86, 130, 2, 32, "Text"],
Cell[2866, 90, 151, 4, 33, "Input"],
Cell[3020, 96, 128, 2, 32, "Text"],
Cell[3151, 100, 116, 3, 33, "Input"],
Cell[3270, 105, 231, 4, 32, "Text"],
Cell[3504, 111, 109, 3, 33, "Input"],
Cell[3616, 116, 152, 3, 32, "Text"],
Cell[3771, 121, 67, 2, 33, "Input"],
Cell[3841, 125, 385, 6, 51, "Text"],
Cell[4229, 133, 67, 2, 33, "Input"],
Cell[4299, 137, 510, 7, 70, "Text"],
Cell[4812, 146, 71, 2, 33, "Input"],
Cell[4886, 150, 568, 8, 89, "Text"],
Cell[5457, 160, 79, 2, 33, "Input"],
Cell[5539, 164, 268, 4, 51, "Text"],
Cell[CellGroupData[{
Cell[5832, 172, 324, 6, 72, "Input"],
Cell[6159, 180, 453, 8, 45, "Print"],
Cell[6615, 190, 1036, 14, 197, "Print"],
Cell[7654, 206, 711, 12, 64, "Print"],
Cell[8368, 220, 440, 8, 25, "Print"],
Cell[8811, 230, 1036, 14, 197, "Print"],
Cell[9850, 246, 204, 4, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[10091, 255, 50, 0, 33, "Input"],
Cell[10144, 257, 209, 3, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[10390, 265, 45, 0, 33, "Input"],
Cell[10438, 267, 317, 8, 57, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[10792, 280, 240, 4, 32, "Text"],
Cell[CellGroupData[{
Cell[11057, 288, 39, 0, 33, "Input"],
Cell[11099, 290, 342, 9, 33, "Output"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[11490, 305, 247, 4, 51, "Text"],
Cell[11740, 311, 160, 6, 33, "Input"],
Cell[11903, 319, 1781, 31, 353, "Output"]
}, Open  ]],
Cell[13699, 353, 57, 0, 32, "Text"],
Cell[CellGroupData[{
Cell[13781, 357, 78, 1, 33, "Input"],
Cell[13862, 360, 144, 2, 33, "Output"]
}, Open  ]],
Cell[14021, 365, 510, 11, 145, "Text"],
Cell[CellGroupData[{
Cell[14556, 380, 296, 6, 53, "Input"],
Cell[14855, 388, 881, 14, 83, "Print"],
Cell[15739, 404, 443, 6, 83, "Print"],
Cell[16185, 412, 336, 6, 25, "Print"],
Cell[16524, 420, 324, 6, 25, "Print"],
Cell[16851, 428, 349, 7, 25, "Print"],
Cell[17203, 437, 323, 4, 45, "Print"],
Cell[17529, 443, 338, 6, 25, "Print"],
Cell[17870, 451, 170, 2, 25, "Print"],
Cell[18043, 455, 214, 3, 25, "Print"],
Cell[18260, 460, 338, 6, 25, "Print"],
Cell[18601, 468, 1089, 14, 235, "Print"],
Cell[19693, 484, 208, 4, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[19938, 493, 184, 3, 32, "Text"],
Cell[20125, 498, 38, 0, 33, "Input"],
Cell[20166, 500, 268, 5, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[20471, 510, 141, 2, 32, "Text"],
Cell[20615, 514, 38, 0, 33, "Input"],
Cell[20656, 516, 195, 3, 33, "Output"]
}, Open  ]],
Cell[20866, 522, 67, 0, 32, "Text"],
Cell[20936, 524, 383, 10, 33, "Input"],
Cell[21322, 536, 79, 1, 33, "Input"],
Cell[21404, 539, 920, 32, 91, "Output"],
Cell[22327, 573, 204, 3, 32, "Text"],
Cell[CellGroupData[{
Cell[22556, 580, 190, 4, 33, "Input"],
Cell[22749, 586, 326, 7, 33, "Output"]
}, Open  ]],
Cell[23090, 596, 702, 11, 89, "Text"],
Cell[23795, 609, 191, 4, 53, "Input"],
Cell[23989, 615, 525, 7, 83, "Print"],
Cell[24517, 624, 132, 2, 32, "Text"],
Cell[CellGroupData[{
Cell[24674, 630, 77, 1, 33, "Input"],
Cell[24754, 633, 11998, 327, 185, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[36789, 965, 66, 1, 33, "Input"],
Cell[36858, 968, 145, 2, 33, "Output"]
}, Open  ]]
}
]
*)

(* End of internal cache information *)
