diff --git a/BREAKING-CHANGES.md b/BREAKING-CHANGES.md
index 3edf5ec44..9ff038866 100644
--- a/BREAKING-CHANGES.md
+++ b/BREAKING-CHANGES.md
@@ -45,6 +45,7 @@ read first.
| | `RewriteRules.Power.Rules.Count` | `35` | `31` |
| | `RewriteRules.Common.Rules.Count` | `100` | `62` |
| | `RewriteRules.All.Sum(set => set.Rules.Count)` | `407` | `313` |
+| **Loud** | `"max(x, y in S)".ToEntity()`, and `argmax`/`argmin` of any arguments | `max(x, y in S)` — the two-value max of `x` and the membership statement; `argmax(f, t in S)` was a parse error | `max(f(t), t in S)` reads as the largest value over the set: `max(sin(t)^3 cos(t), t in [0; pi/2])` is `3 sqrt(3) / 16`, and `argmax` and `argmin` are the points where it is taken |
| **Silent** | `RewriteRules.ExpandFactorialDivisions.Rules[0].Growth` | `Collects` — guessed from string length | `Unknown`; whether it collects depends on the offsets |
| **Silent** | `RewriteStep.Soundness` on a rewrite whose rule declares a tier — `RewriteRules.SetOperator` on `A /\ A`, and every rewrite of the nineteen sets described from their data form | `SoundUnderAssumptions` — its rule set's tier, which is the minimum over every rule in the set | `Sound` — the rule's own |
| **Silent** | `DerivationStep.Soundness` | its rule set's tier | the weakest tier any rewrite that actually fired inside the step holds at |
@@ -248,6 +249,38 @@ suspect was measured and ruled out.
[#717](https://github.com/asc-community/AngouriMath/issues/717).
+### The extremum of an expression over a set, as a binder
+
+An expression had no way to name its largest value over a set. `max` and `min` took two values and
+returned the larger or smaller, and `max(f(t), t in S)` parsed as the two-value `max` of `f(t)` and
+the membership statement `t in S` — a category error that stayed unevaluated. `argmax` and `argmin`
+were not functions at all. Four binders now read the second argument as `variable in set` and bind
+the variable over the expression and the set: `Maximumf`, `Minimumf`, `Argmaxf`, `Argminf`, spelt
+`max(f, t in S)`, `min`, `argmax`, `argmin`, printed `\max_{t \in S} f` and
+`\operatorname{argmax}_{t \in S} f` in LaTeX. The two-value `max(a, b)` is untouched, and a second
+argument that is not `variable in set` — `max(x, y)`, or `max(x, 1 in S)` — stays the two-value form.
+
+The value is answered over a finite set of numbers, by evaluating at each and comparing, and over a
+closed interval with numeric ends for an expression whose extrema are all stationary — sums,
+products, whole non-negative powers, sines, cosines, exponentials with a positive base — by
+comparing the closed endpoints with the derivative's zeros inside, a periodic family of them
+enumerated where it lands in the interval. The best candidate is checked against the expression
+sampled along the interval, and the question is left as written where a sample beats it, since the
+solver's list of zeros is not guaranteed complete. An open endpoint is not a candidate, so
+`max(x, x in [0; 1))` has no maximum and stays as written; a symbolic set or end, a pole, a kink,
+and a set with a symbol in it are all left as written. `argmax` and `argmin` return the set of
+points. Question I.6 of [#1212](https://github.com/asc-community/AngouriMath/issues/1212). Both
+columns measured on a build, `27ed5b53` against this change.
+
+| | Was | Is |
+|---|---|---|
+| `"max(sin(t)^3 * cos(t), t in [0; pi/2])".ToEntity().Simplify()` | `max(sin(t)^3 * cos(t), t in [0; pi/2])` — a two-value `max` with a membership statement, unevaluated | `3/16 * sqrt(3)` |
+| `"argmax(sin(t)^3 * cos(t), t in [0; pi/2])".ToEntity()` | a parse error — `argmax` was not a function | `{ pi/3 }` once simplified |
+| `"max(x^3 - 3x, x in [-2; 2])".ToEntity().Simplify()`, and `min` | a two-value `max`/`min` with a membership statement | `2`, `-2` |
+| `"max(x^2, x in { 1, -3, 2 })".ToEntity().Simplify()`, `argmax` of the same | `max(x^2, x in { 1, -3, 2 })` | `9`, `{ -3 }` |
+| `"max(1, 2)".ToEntity().Evaled`, `max(x, y)` | `2`, `max(x, y)` | the same — the two-value form is untouched |
+| `"max(x, x in [0; 1))".ToEntity().Simplify()` | a two-value `max` with a membership statement | left as written — the value at an open end is not attained |
+
### A polynomial summand is summed in closed form
A summation wrote itself out term by term where the bounds were concrete and there were fewer
diff --git a/Sources/.editorconfig b/Sources/.editorconfig
index 0f716891b..3e6104ec4 100644
--- a/Sources/.editorconfig
+++ b/Sources/.editorconfig
@@ -216,6 +216,12 @@ file_header_template=\nCopyright (c) 2019-2026 Angouri.\nAngouriMath is licensed
[AngouriMath/Functions/Continuous/Integration/BreakpointIntegration.cs]
file_header_template=\nCopyright (c) 2019-2026 Angouri.\nAngouriMath is licensed under MIT.\nDetails: https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md.\nWebsite: https://am.angouri.org.\n
+[AngouriMath/Functions/Continuous/ExtremumOverSet.cs]
+file_header_template=\nCopyright (c) 2019-2026 Angouri.\nAngouriMath is licensed under MIT.\nDetails: https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md.\nWebsite: https://am.angouri.org.\n
+
+[Tests/UnitTests/Calculus/ExtremumTest.cs]
+file_header_template=\nCopyright (c) 2019-2026 Angouri.\nAngouriMath is licensed under MIT.\nDetails: https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md.\nWebsite: https://am.angouri.org.\n
+
[Tests/UnitTests/Calculus/BreakpointIntegrationTest.cs]
file_header_template=\nCopyright (c) 2019-2026 Angouri.\nAngouriMath is licensed under MIT.\nDetails: https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md.\nWebsite: https://am.angouri.org.\n
diff --git a/Sources/AngouriMath/Convenience/MathS.cs b/Sources/AngouriMath/Convenience/MathS.cs
index 0cc2c8248..240440ba0 100644
--- a/Sources/AngouriMath/Convenience/MathS.cs
+++ b/Sources/AngouriMath/Convenience/MathS.cs
@@ -7013,6 +7013,33 @@ public static Entity Limit(Entity expr, Entity var, Entity dest, ApproachFrom ap
public static Entity Sum(Entity expr, Entity var, Entity from, Entity to)
=> new Summationf(expr, var, from, to);
+ ///
+ /// The largest value takes as ranges over
+ /// , written max(expr, var in over). Answered over a finite
+ /// set of numbers, and over a closed interval with numeric ends for an expression whose
+ /// extrema are all stationary; left as written otherwise, and where the value is not
+ /// attained. https://github.com/asc-community/AngouriMath/issues/1212
+ ///
+ ///
+ ///
+ /// Console.WriteLine(MathS.Maximum("sin(t)^3 * cos(t)", "t", "[0; pi/2]").Simplify());
+ ///
+ /// Prints
+ ///
+ /// 3/16 * sqrt(3)
+ ///
+ ///
+ public static Entity Maximum(Entity expr, Entity var, Entity over) => new Maximumf(expr, var, over);
+
+ /// The smallest value; see .
+ public static Entity Minimum(Entity expr, Entity var, Entity over) => new Minimumf(expr, var, over);
+
+ /// The set of points where is taken, written argmax(expr, var in over).
+ public static Entity Argmax(Entity expr, Entity var, Entity over) => new Argmaxf(expr, var, over);
+
+ /// The set of points where is taken, written argmin(expr, var in over).
+ public static Entity Argmin(Entity expr, Entity var, Entity over) => new Argminf(expr, var, over);
+
///
/// A product of as runs from
/// to inclusive. Mirrors
diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMath.g b/Sources/AngouriMath/Core/Antlr/AngouriMath.g
index c1b34f953..f9589f5c4 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMath.g
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMath.g
@@ -460,8 +460,10 @@ atom returns[Entity value]
| 'round(' args = function_arguments ')' { Assert("round", 1, $args.list.Count); $value = MathS.Round($args.list[0]); }
/* min and max take any number of arguments, as they do everywhere else, and fold left
into the binary node. One argument is that argument. */
- | 'min(' args = function_arguments ')' { AssertAtLeast("min", 1, $args.list.Count); $value = $args.list.Aggregate((a, b) => MathS.Min(a, b)); }
- | 'max(' args = function_arguments ')' { AssertAtLeast("max", 1, $args.list.Count); $value = $args.list.Aggregate((a, b) => MathS.Max(a, b)); }
+ | 'min(' args = function_arguments ')' { AssertAtLeast("min", 1, $args.list.Count); $value = $args.list.Count == 2 && $args.list[1] is Entity.Set.Inf { Element: Variable } minRange ? MathS.Minimum($args.list[0], minRange.Element, minRange.SupSet) : $args.list.Aggregate((a, b) => MathS.Min(a, b)); }
+ | 'max(' args = function_arguments ')' { AssertAtLeast("max", 1, $args.list.Count); $value = $args.list.Count == 2 && $args.list[1] is Entity.Set.Inf { Element: Variable } maxRange ? MathS.Maximum($args.list[0], maxRange.Element, maxRange.SupSet) : $args.list.Aggregate((a, b) => MathS.Max(a, b)); }
+ | 'argmax(' args = function_arguments ')' { Assert("argmax", 2, $args.list.Count); $value = $args.list[1] is Entity.Set.Inf { Element: Variable } argmaxRange ? MathS.Argmax($args.list[0], argmaxRange.Element, argmaxRange.SupSet) : throw new InvalidArgumentParseException("argmax expects its second argument to say which variable ranges over which set, as in argmax(f(t), t in S)"); }
+ | 'argmin(' args = function_arguments ')' { Assert("argmin", 2, $args.list.Count); $value = $args.list[1] is Entity.Set.Inf { Element: Variable } argminRange ? MathS.Argmin($args.list[0], argminRange.Element, argminRange.SupSet) : throw new InvalidArgumentParseException("argmin expects its second argument to say which variable ranges over which set, as in argmin(f(t), t in S)"); }
| 'gcd(' args = function_arguments ')' { AssertAtLeast("gcd", 1, $args.list.Count); $value = $args.list.Aggregate((a, b) => MathS.Gcd(a, b)); }
/* Names the library does not have. Each is a function every other CAS spells this way, so
diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMath.interp b/Sources/AngouriMath/Core/Antlr/AngouriMath.interp
index 993253b45..bab942c3b 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMath.interp
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMath.interp
@@ -138,6 +138,8 @@ null
'round('
'min('
'max('
+'argmax('
+'argmin('
'gcd('
'trunc('
'lcm('
@@ -305,6 +307,8 @@ null
null
null
null
+null
+null
NEWLINE
NUMBER
SPECIALSET
@@ -340,4 +344,4 @@ statement
atn:
-[4, 1, 155, 907, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 52, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 58, 8, 1, 11, 1, 12, 1, 59, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 66, 8, 1, 11, 1, 12, 1, 67, 3, 1, 70, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 77, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 87, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 97, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 102, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 118, 8, 4, 10, 4, 12, 4, 121, 9, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 133, 8, 5, 10, 5, 12, 5, 136, 9, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 148, 8, 6, 10, 6, 12, 6, 151, 9, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 171, 8, 7, 10, 7, 12, 7, 174, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 186, 8, 8, 10, 8, 12, 8, 189, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 205, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 210, 8, 9, 10, 9, 12, 9, 213, 9, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 228, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 240, 8, 11, 10, 11, 12, 11, 243, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 251, 8, 12, 10, 12, 12, 12, 254, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 266, 8, 13, 10, 13, 12, 13, 269, 9, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 281, 8, 14, 10, 14, 12, 14, 284, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 292, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 300, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 5, 17, 308, 8, 17, 10, 17, 12, 17, 311, 9, 17, 3, 17, 313, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 901, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 0, 0, 22, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 0, 0, 1043, 0, 51, 1, 0, 0, 0, 2, 69, 1, 0, 0, 0, 4, 71, 1, 0, 0, 0, 6, 101, 1, 0, 0, 0, 8, 103, 1, 0, 0, 0, 10, 122, 1, 0, 0, 0, 12, 137, 1, 0, 0, 0, 14, 152, 1, 0, 0, 0, 16, 175, 1, 0, 0, 0, 18, 190, 1, 0, 0, 0, 20, 227, 1, 0, 0, 0, 22, 229, 1, 0, 0, 0, 24, 244, 1, 0, 0, 0, 26, 255, 1, 0, 0, 0, 28, 270, 1, 0, 0, 0, 30, 285, 1, 0, 0, 0, 32, 293, 1, 0, 0, 0, 34, 312, 1, 0, 0, 0, 36, 314, 1, 0, 0, 0, 38, 320, 1, 0, 0, 0, 40, 900, 1, 0, 0, 0, 42, 902, 1, 0, 0, 0, 44, 45, 3, 40, 20, 0, 45, 46, 5, 1, 0, 0, 46, 47, 6, 0, -1, 0, 47, 52, 1, 0, 0, 0, 48, 49, 3, 40, 20, 0, 49, 50, 6, 0, -1, 0, 50, 52, 1, 0, 0, 0, 51, 44, 1, 0, 0, 0, 51, 48, 1, 0, 0, 0, 52, 1, 1, 0, 0, 0, 53, 54, 5, 2, 0, 0, 54, 55, 3, 0, 0, 0, 55, 56, 6, 1, -1, 0, 56, 58, 1, 0, 0, 0, 57, 53, 1, 0, 0, 0, 58, 59, 1, 0, 0, 0, 59, 57, 1, 0, 0, 0, 59, 60, 1, 0, 0, 0, 60, 70, 1, 0, 0, 0, 61, 62, 5, 2, 0, 0, 62, 63, 3, 6, 3, 0, 63, 64, 6, 1, -1, 0, 64, 66, 1, 0, 0, 0, 65, 61, 1, 0, 0, 0, 66, 67, 1, 0, 0, 0, 67, 65, 1, 0, 0, 0, 67, 68, 1, 0, 0, 0, 68, 70, 1, 0, 0, 0, 69, 57, 1, 0, 0, 0, 69, 65, 1, 0, 0, 0, 70, 3, 1, 0, 0, 0, 71, 72, 3, 0, 0, 0, 72, 76, 6, 2, -1, 0, 73, 74, 3, 2, 1, 0, 74, 75, 6, 2, -1, 0, 75, 77, 1, 0, 0, 0, 76, 73, 1, 0, 0, 0, 76, 77, 1, 0, 0, 0, 77, 5, 1, 0, 0, 0, 78, 79, 5, 3, 0, 0, 79, 80, 3, 4, 2, 0, 80, 81, 6, 3, -1, 0, 81, 87, 1, 0, 0, 0, 82, 83, 5, 4, 0, 0, 83, 84, 3, 4, 2, 0, 84, 85, 6, 3, -1, 0, 85, 87, 1, 0, 0, 0, 86, 78, 1, 0, 0, 0, 86, 82, 1, 0, 0, 0, 87, 102, 1, 0, 0, 0, 88, 89, 5, 3, 0, 0, 89, 90, 3, 6, 3, 0, 90, 91, 6, 3, -1, 0, 91, 97, 1, 0, 0, 0, 92, 93, 5, 4, 0, 0, 93, 94, 3, 6, 3, 0, 94, 95, 6, 3, -1, 0, 95, 97, 1, 0, 0, 0, 96, 88, 1, 0, 0, 0, 96, 92, 1, 0, 0, 0, 97, 102, 1, 0, 0, 0, 98, 99, 3, 4, 2, 0, 99, 100, 6, 3, -1, 0, 100, 102, 1, 0, 0, 0, 101, 86, 1, 0, 0, 0, 101, 96, 1, 0, 0, 0, 101, 98, 1, 0, 0, 0, 102, 7, 1, 0, 0, 0, 103, 104, 3, 6, 3, 0, 104, 119, 6, 4, -1, 0, 105, 106, 5, 5, 0, 0, 106, 107, 3, 6, 3, 0, 107, 108, 6, 4, -1, 0, 108, 118, 1, 0, 0, 0, 109, 110, 5, 6, 0, 0, 110, 111, 3, 6, 3, 0, 111, 112, 6, 4, -1, 0, 112, 118, 1, 0, 0, 0, 113, 114, 5, 7, 0, 0, 114, 115, 3, 6, 3, 0, 115, 116, 6, 4, -1, 0, 116, 118, 1, 0, 0, 0, 117, 105, 1, 0, 0, 0, 117, 109, 1, 0, 0, 0, 117, 113, 1, 0, 0, 0, 118, 121, 1, 0, 0, 0, 119, 117, 1, 0, 0, 0, 119, 120, 1, 0, 0, 0, 120, 9, 1, 0, 0, 0, 121, 119, 1, 0, 0, 0, 122, 123, 3, 8, 4, 0, 123, 134, 6, 5, -1, 0, 124, 125, 5, 4, 0, 0, 125, 126, 3, 8, 4, 0, 126, 127, 6, 5, -1, 0, 127, 133, 1, 0, 0, 0, 128, 129, 5, 3, 0, 0, 129, 130, 3, 8, 4, 0, 130, 131, 6, 5, -1, 0, 131, 133, 1, 0, 0, 0, 132, 124, 1, 0, 0, 0, 132, 128, 1, 0, 0, 0, 133, 136, 1, 0, 0, 0, 134, 132, 1, 0, 0, 0, 134, 135, 1, 0, 0, 0, 135, 11, 1, 0, 0, 0, 136, 134, 1, 0, 0, 0, 137, 138, 3, 10, 5, 0, 138, 149, 6, 6, -1, 0, 139, 140, 5, 8, 0, 0, 140, 141, 3, 10, 5, 0, 141, 142, 6, 6, -1, 0, 142, 148, 1, 0, 0, 0, 143, 144, 5, 9, 0, 0, 144, 145, 3, 10, 5, 0, 145, 146, 6, 6, -1, 0, 146, 148, 1, 0, 0, 0, 147, 139, 1, 0, 0, 0, 147, 143, 1, 0, 0, 0, 148, 151, 1, 0, 0, 0, 149, 147, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 13, 1, 0, 0, 0, 151, 149, 1, 0, 0, 0, 152, 153, 3, 12, 6, 0, 153, 172, 6, 7, -1, 0, 154, 155, 5, 10, 0, 0, 155, 156, 3, 12, 6, 0, 156, 157, 6, 7, -1, 0, 157, 171, 1, 0, 0, 0, 158, 159, 5, 11, 0, 0, 159, 160, 3, 12, 6, 0, 160, 161, 6, 7, -1, 0, 161, 171, 1, 0, 0, 0, 162, 163, 5, 12, 0, 0, 163, 164, 3, 12, 6, 0, 164, 165, 6, 7, -1, 0, 165, 171, 1, 0, 0, 0, 166, 167, 5, 13, 0, 0, 167, 168, 3, 12, 6, 0, 168, 169, 6, 7, -1, 0, 169, 171, 1, 0, 0, 0, 170, 154, 1, 0, 0, 0, 170, 158, 1, 0, 0, 0, 170, 162, 1, 0, 0, 0, 170, 166, 1, 0, 0, 0, 171, 174, 1, 0, 0, 0, 172, 170, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 15, 1, 0, 0, 0, 174, 172, 1, 0, 0, 0, 175, 176, 3, 14, 7, 0, 176, 187, 6, 8, -1, 0, 177, 178, 5, 14, 0, 0, 178, 179, 3, 14, 7, 0, 179, 180, 6, 8, -1, 0, 180, 186, 1, 0, 0, 0, 181, 182, 5, 15, 0, 0, 182, 183, 3, 14, 7, 0, 183, 184, 6, 8, -1, 0, 184, 186, 1, 0, 0, 0, 185, 177, 1, 0, 0, 0, 185, 181, 1, 0, 0, 0, 186, 189, 1, 0, 0, 0, 187, 185, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 17, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 190, 191, 3, 16, 8, 0, 191, 211, 6, 9, -1, 0, 192, 193, 5, 16, 0, 0, 193, 205, 6, 9, -1, 0, 194, 195, 5, 17, 0, 0, 195, 205, 6, 9, -1, 0, 196, 197, 5, 18, 0, 0, 197, 205, 6, 9, -1, 0, 198, 199, 5, 19, 0, 0, 199, 205, 6, 9, -1, 0, 200, 201, 5, 20, 0, 0, 201, 205, 6, 9, -1, 0, 202, 203, 5, 21, 0, 0, 203, 205, 6, 9, -1, 0, 204, 192, 1, 0, 0, 0, 204, 194, 1, 0, 0, 0, 204, 196, 1, 0, 0, 0, 204, 198, 1, 0, 0, 0, 204, 200, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 207, 3, 16, 8, 0, 207, 208, 6, 9, -1, 0, 208, 210, 1, 0, 0, 0, 209, 204, 1, 0, 0, 0, 210, 213, 1, 0, 0, 0, 211, 209, 1, 0, 0, 0, 211, 212, 1, 0, 0, 0, 212, 214, 1, 0, 0, 0, 213, 211, 1, 0, 0, 0, 214, 215, 6, 9, -1, 0, 215, 19, 1, 0, 0, 0, 216, 217, 5, 22, 0, 0, 217, 218, 3, 18, 9, 0, 218, 219, 6, 10, -1, 0, 219, 228, 1, 0, 0, 0, 220, 221, 5, 22, 0, 0, 221, 222, 3, 20, 10, 0, 222, 223, 6, 10, -1, 0, 223, 228, 1, 0, 0, 0, 224, 225, 3, 18, 9, 0, 225, 226, 6, 10, -1, 0, 226, 228, 1, 0, 0, 0, 227, 216, 1, 0, 0, 0, 227, 220, 1, 0, 0, 0, 227, 224, 1, 0, 0, 0, 228, 21, 1, 0, 0, 0, 229, 230, 3, 20, 10, 0, 230, 241, 6, 11, -1, 0, 231, 232, 5, 23, 0, 0, 232, 233, 3, 20, 10, 0, 233, 234, 6, 11, -1, 0, 234, 240, 1, 0, 0, 0, 235, 236, 5, 24, 0, 0, 236, 237, 3, 20, 10, 0, 237, 238, 6, 11, -1, 0, 238, 240, 1, 0, 0, 0, 239, 231, 1, 0, 0, 0, 239, 235, 1, 0, 0, 0, 240, 243, 1, 0, 0, 0, 241, 239, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 23, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 244, 245, 3, 22, 11, 0, 245, 252, 6, 12, -1, 0, 246, 247, 5, 25, 0, 0, 247, 248, 3, 22, 11, 0, 248, 249, 6, 12, -1, 0, 249, 251, 1, 0, 0, 0, 250, 246, 1, 0, 0, 0, 251, 254, 1, 0, 0, 0, 252, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 25, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 255, 256, 3, 24, 12, 0, 256, 267, 6, 13, -1, 0, 257, 258, 5, 26, 0, 0, 258, 259, 3, 24, 12, 0, 259, 260, 6, 13, -1, 0, 260, 266, 1, 0, 0, 0, 261, 262, 5, 27, 0, 0, 262, 263, 3, 24, 12, 0, 263, 264, 6, 13, -1, 0, 264, 266, 1, 0, 0, 0, 265, 257, 1, 0, 0, 0, 265, 261, 1, 0, 0, 0, 266, 269, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 267, 268, 1, 0, 0, 0, 268, 27, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 270, 271, 3, 26, 13, 0, 271, 282, 6, 14, -1, 0, 272, 273, 5, 28, 0, 0, 273, 274, 3, 26, 13, 0, 274, 275, 6, 14, -1, 0, 275, 281, 1, 0, 0, 0, 276, 277, 5, 29, 0, 0, 277, 278, 3, 26, 13, 0, 278, 279, 6, 14, -1, 0, 279, 281, 1, 0, 0, 0, 280, 272, 1, 0, 0, 0, 280, 276, 1, 0, 0, 0, 281, 284, 1, 0, 0, 0, 282, 280, 1, 0, 0, 0, 282, 283, 1, 0, 0, 0, 283, 29, 1, 0, 0, 0, 284, 282, 1, 0, 0, 0, 285, 286, 3, 28, 14, 0, 286, 291, 6, 15, -1, 0, 287, 288, 5, 30, 0, 0, 288, 289, 3, 30, 15, 0, 289, 290, 6, 15, -1, 0, 290, 292, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 31, 1, 0, 0, 0, 293, 294, 3, 30, 15, 0, 294, 299, 6, 16, -1, 0, 295, 296, 5, 31, 0, 0, 296, 297, 3, 32, 16, 0, 297, 298, 6, 16, -1, 0, 298, 300, 1, 0, 0, 0, 299, 295, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 33, 1, 0, 0, 0, 301, 302, 3, 32, 16, 0, 302, 309, 6, 17, -1, 0, 303, 304, 5, 32, 0, 0, 304, 305, 3, 32, 16, 0, 305, 306, 6, 17, -1, 0, 306, 308, 1, 0, 0, 0, 307, 303, 1, 0, 0, 0, 308, 311, 1, 0, 0, 0, 309, 307, 1, 0, 0, 0, 309, 310, 1, 0, 0, 0, 310, 313, 1, 0, 0, 0, 311, 309, 1, 0, 0, 0, 312, 301, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 35, 1, 0, 0, 0, 314, 315, 3, 32, 16, 0, 315, 316, 6, 18, -1, 0, 316, 317, 5, 33, 0, 0, 317, 318, 3, 32, 16, 0, 318, 319, 6, 18, -1, 0, 319, 37, 1, 0, 0, 0, 320, 321, 3, 32, 16, 0, 321, 322, 6, 19, -1, 0, 322, 323, 5, 34, 0, 0, 323, 324, 3, 32, 16, 0, 324, 325, 6, 19, -1, 0, 325, 39, 1, 0, 0, 0, 326, 327, 5, 35, 0, 0, 327, 901, 6, 20, -1, 0, 328, 329, 5, 36, 0, 0, 329, 901, 6, 20, -1, 0, 330, 331, 5, 152, 0, 0, 331, 901, 6, 20, -1, 0, 332, 333, 5, 149, 0, 0, 333, 901, 6, 20, -1, 0, 334, 335, 5, 151, 0, 0, 335, 901, 6, 20, -1, 0, 336, 337, 5, 150, 0, 0, 337, 901, 6, 20, -1, 0, 338, 339, 5, 153, 0, 0, 339, 901, 6, 20, -1, 0, 340, 341, 5, 37, 0, 0, 341, 342, 3, 32, 16, 0, 342, 343, 5, 38, 0, 0, 343, 344, 6, 20, -1, 0, 344, 901, 1, 0, 0, 0, 345, 346, 5, 39, 0, 0, 346, 347, 3, 34, 17, 0, 347, 348, 5, 40, 0, 0, 348, 349, 6, 20, -1, 0, 349, 901, 1, 0, 0, 0, 350, 351, 5, 39, 0, 0, 351, 352, 3, 34, 17, 0, 352, 353, 5, 41, 0, 0, 353, 354, 6, 20, -1, 0, 354, 901, 1, 0, 0, 0, 355, 356, 5, 42, 0, 0, 356, 357, 3, 36, 18, 0, 357, 358, 5, 43, 0, 0, 358, 359, 6, 20, -1, 0, 359, 901, 1, 0, 0, 0, 360, 361, 5, 39, 0, 0, 361, 362, 3, 36, 18, 0, 362, 363, 5, 43, 0, 0, 363, 364, 6, 20, -1, 0, 364, 901, 1, 0, 0, 0, 365, 366, 5, 39, 0, 0, 366, 367, 3, 36, 18, 0, 367, 368, 5, 41, 0, 0, 368, 369, 6, 20, -1, 0, 369, 901, 1, 0, 0, 0, 370, 371, 5, 42, 0, 0, 371, 372, 3, 36, 18, 0, 372, 373, 5, 41, 0, 0, 373, 374, 6, 20, -1, 0, 374, 901, 1, 0, 0, 0, 375, 376, 5, 42, 0, 0, 376, 377, 3, 32, 16, 0, 377, 378, 5, 43, 0, 0, 378, 379, 6, 20, -1, 0, 379, 901, 1, 0, 0, 0, 380, 381, 5, 44, 0, 0, 381, 382, 3, 38, 19, 0, 382, 383, 5, 45, 0, 0, 383, 384, 6, 20, -1, 0, 384, 901, 1, 0, 0, 0, 385, 386, 5, 44, 0, 0, 386, 387, 3, 34, 17, 0, 387, 388, 5, 45, 0, 0, 388, 389, 6, 20, -1, 0, 389, 901, 1, 0, 0, 0, 390, 391, 5, 46, 0, 0, 391, 392, 3, 34, 17, 0, 392, 393, 5, 43, 0, 0, 393, 394, 6, 20, -1, 0, 394, 901, 1, 0, 0, 0, 395, 396, 5, 47, 0, 0, 396, 397, 3, 34, 17, 0, 397, 398, 5, 43, 0, 0, 398, 399, 6, 20, -1, 0, 399, 901, 1, 0, 0, 0, 400, 401, 5, 48, 0, 0, 401, 402, 3, 34, 17, 0, 402, 403, 5, 43, 0, 0, 403, 404, 6, 20, -1, 0, 404, 901, 1, 0, 0, 0, 405, 406, 5, 49, 0, 0, 406, 407, 3, 34, 17, 0, 407, 408, 5, 43, 0, 0, 408, 409, 6, 20, -1, 0, 409, 901, 1, 0, 0, 0, 410, 411, 5, 50, 0, 0, 411, 412, 3, 34, 17, 0, 412, 413, 5, 43, 0, 0, 413, 414, 6, 20, -1, 0, 414, 901, 1, 0, 0, 0, 415, 416, 5, 51, 0, 0, 416, 417, 3, 34, 17, 0, 417, 418, 5, 43, 0, 0, 418, 419, 6, 20, -1, 0, 419, 901, 1, 0, 0, 0, 420, 421, 5, 52, 0, 0, 421, 422, 3, 34, 17, 0, 422, 423, 5, 43, 0, 0, 423, 424, 6, 20, -1, 0, 424, 901, 1, 0, 0, 0, 425, 426, 5, 53, 0, 0, 426, 427, 3, 34, 17, 0, 427, 428, 5, 43, 0, 0, 428, 429, 6, 20, -1, 0, 429, 901, 1, 0, 0, 0, 430, 431, 5, 54, 0, 0, 431, 432, 3, 34, 17, 0, 432, 433, 5, 43, 0, 0, 433, 434, 6, 20, -1, 0, 434, 901, 1, 0, 0, 0, 435, 436, 5, 55, 0, 0, 436, 437, 3, 34, 17, 0, 437, 438, 5, 43, 0, 0, 438, 439, 6, 20, -1, 0, 439, 901, 1, 0, 0, 0, 440, 441, 5, 56, 0, 0, 441, 442, 3, 34, 17, 0, 442, 443, 5, 43, 0, 0, 443, 444, 6, 20, -1, 0, 444, 901, 1, 0, 0, 0, 445, 446, 5, 57, 0, 0, 446, 447, 3, 34, 17, 0, 447, 448, 5, 43, 0, 0, 448, 449, 6, 20, -1, 0, 449, 901, 1, 0, 0, 0, 450, 451, 5, 58, 0, 0, 451, 452, 3, 34, 17, 0, 452, 453, 5, 43, 0, 0, 453, 454, 6, 20, -1, 0, 454, 901, 1, 0, 0, 0, 455, 456, 5, 59, 0, 0, 456, 457, 3, 34, 17, 0, 457, 458, 5, 43, 0, 0, 458, 459, 6, 20, -1, 0, 459, 901, 1, 0, 0, 0, 460, 461, 5, 60, 0, 0, 461, 462, 3, 34, 17, 0, 462, 463, 5, 43, 0, 0, 463, 464, 6, 20, -1, 0, 464, 901, 1, 0, 0, 0, 465, 466, 5, 61, 0, 0, 466, 467, 3, 34, 17, 0, 467, 468, 5, 43, 0, 0, 468, 469, 6, 20, -1, 0, 469, 901, 1, 0, 0, 0, 470, 471, 5, 62, 0, 0, 471, 472, 3, 34, 17, 0, 472, 473, 5, 43, 0, 0, 473, 474, 6, 20, -1, 0, 474, 901, 1, 0, 0, 0, 475, 476, 5, 63, 0, 0, 476, 477, 3, 34, 17, 0, 477, 478, 5, 43, 0, 0, 478, 479, 6, 20, -1, 0, 479, 901, 1, 0, 0, 0, 480, 481, 5, 64, 0, 0, 481, 482, 3, 34, 17, 0, 482, 483, 5, 43, 0, 0, 483, 484, 6, 20, -1, 0, 484, 901, 1, 0, 0, 0, 485, 486, 5, 65, 0, 0, 486, 487, 3, 34, 17, 0, 487, 488, 5, 43, 0, 0, 488, 489, 6, 20, -1, 0, 489, 901, 1, 0, 0, 0, 490, 491, 5, 66, 0, 0, 491, 492, 3, 34, 17, 0, 492, 493, 5, 43, 0, 0, 493, 494, 6, 20, -1, 0, 494, 901, 1, 0, 0, 0, 495, 496, 5, 67, 0, 0, 496, 497, 3, 34, 17, 0, 497, 498, 5, 43, 0, 0, 498, 499, 6, 20, -1, 0, 499, 901, 1, 0, 0, 0, 500, 501, 5, 68, 0, 0, 501, 502, 3, 34, 17, 0, 502, 503, 5, 43, 0, 0, 503, 504, 6, 20, -1, 0, 504, 901, 1, 0, 0, 0, 505, 506, 5, 69, 0, 0, 506, 507, 3, 34, 17, 0, 507, 508, 5, 43, 0, 0, 508, 509, 6, 20, -1, 0, 509, 901, 1, 0, 0, 0, 510, 511, 5, 70, 0, 0, 511, 512, 3, 34, 17, 0, 512, 513, 5, 43, 0, 0, 513, 514, 6, 20, -1, 0, 514, 901, 1, 0, 0, 0, 515, 516, 5, 71, 0, 0, 516, 517, 3, 34, 17, 0, 517, 518, 5, 43, 0, 0, 518, 519, 6, 20, -1, 0, 519, 901, 1, 0, 0, 0, 520, 521, 5, 72, 0, 0, 521, 522, 3, 34, 17, 0, 522, 523, 5, 43, 0, 0, 523, 524, 6, 20, -1, 0, 524, 901, 1, 0, 0, 0, 525, 526, 5, 73, 0, 0, 526, 527, 3, 34, 17, 0, 527, 528, 5, 43, 0, 0, 528, 529, 6, 20, -1, 0, 529, 901, 1, 0, 0, 0, 530, 531, 5, 74, 0, 0, 531, 532, 3, 34, 17, 0, 532, 533, 5, 43, 0, 0, 533, 534, 6, 20, -1, 0, 534, 901, 1, 0, 0, 0, 535, 536, 5, 75, 0, 0, 536, 537, 3, 34, 17, 0, 537, 538, 5, 43, 0, 0, 538, 539, 6, 20, -1, 0, 539, 901, 1, 0, 0, 0, 540, 541, 5, 76, 0, 0, 541, 542, 3, 34, 17, 0, 542, 543, 5, 43, 0, 0, 543, 544, 6, 20, -1, 0, 544, 901, 1, 0, 0, 0, 545, 546, 5, 77, 0, 0, 546, 547, 3, 34, 17, 0, 547, 548, 5, 43, 0, 0, 548, 549, 6, 20, -1, 0, 549, 901, 1, 0, 0, 0, 550, 551, 5, 78, 0, 0, 551, 552, 3, 34, 17, 0, 552, 553, 5, 43, 0, 0, 553, 554, 6, 20, -1, 0, 554, 901, 1, 0, 0, 0, 555, 556, 5, 79, 0, 0, 556, 557, 3, 34, 17, 0, 557, 558, 5, 43, 0, 0, 558, 559, 6, 20, -1, 0, 559, 901, 1, 0, 0, 0, 560, 561, 5, 80, 0, 0, 561, 562, 3, 34, 17, 0, 562, 563, 5, 43, 0, 0, 563, 564, 6, 20, -1, 0, 564, 901, 1, 0, 0, 0, 565, 566, 5, 81, 0, 0, 566, 567, 3, 34, 17, 0, 567, 568, 5, 43, 0, 0, 568, 569, 6, 20, -1, 0, 569, 901, 1, 0, 0, 0, 570, 571, 5, 82, 0, 0, 571, 572, 3, 34, 17, 0, 572, 573, 5, 43, 0, 0, 573, 574, 6, 20, -1, 0, 574, 901, 1, 0, 0, 0, 575, 576, 5, 83, 0, 0, 576, 577, 3, 34, 17, 0, 577, 578, 5, 43, 0, 0, 578, 579, 6, 20, -1, 0, 579, 901, 1, 0, 0, 0, 580, 581, 5, 84, 0, 0, 581, 582, 3, 34, 17, 0, 582, 583, 5, 43, 0, 0, 583, 584, 6, 20, -1, 0, 584, 901, 1, 0, 0, 0, 585, 586, 5, 85, 0, 0, 586, 587, 3, 34, 17, 0, 587, 588, 5, 43, 0, 0, 588, 589, 6, 20, -1, 0, 589, 901, 1, 0, 0, 0, 590, 591, 5, 86, 0, 0, 591, 592, 3, 34, 17, 0, 592, 593, 5, 43, 0, 0, 593, 594, 6, 20, -1, 0, 594, 901, 1, 0, 0, 0, 595, 596, 5, 87, 0, 0, 596, 597, 3, 34, 17, 0, 597, 598, 5, 43, 0, 0, 598, 599, 6, 20, -1, 0, 599, 901, 1, 0, 0, 0, 600, 601, 5, 88, 0, 0, 601, 602, 3, 34, 17, 0, 602, 603, 5, 43, 0, 0, 603, 604, 6, 20, -1, 0, 604, 901, 1, 0, 0, 0, 605, 606, 5, 89, 0, 0, 606, 607, 3, 34, 17, 0, 607, 608, 5, 43, 0, 0, 608, 609, 6, 20, -1, 0, 609, 901, 1, 0, 0, 0, 610, 611, 5, 90, 0, 0, 611, 612, 3, 34, 17, 0, 612, 613, 5, 43, 0, 0, 613, 614, 6, 20, -1, 0, 614, 901, 1, 0, 0, 0, 615, 616, 5, 91, 0, 0, 616, 617, 3, 34, 17, 0, 617, 618, 5, 43, 0, 0, 618, 619, 6, 20, -1, 0, 619, 901, 1, 0, 0, 0, 620, 621, 5, 92, 0, 0, 621, 622, 3, 34, 17, 0, 622, 623, 5, 43, 0, 0, 623, 624, 6, 20, -1, 0, 624, 901, 1, 0, 0, 0, 625, 626, 5, 93, 0, 0, 626, 627, 3, 34, 17, 0, 627, 628, 5, 43, 0, 0, 628, 629, 6, 20, -1, 0, 629, 901, 1, 0, 0, 0, 630, 631, 5, 94, 0, 0, 631, 632, 3, 34, 17, 0, 632, 633, 5, 43, 0, 0, 633, 634, 6, 20, -1, 0, 634, 901, 1, 0, 0, 0, 635, 636, 5, 95, 0, 0, 636, 637, 3, 34, 17, 0, 637, 638, 5, 43, 0, 0, 638, 639, 6, 20, -1, 0, 639, 901, 1, 0, 0, 0, 640, 641, 5, 96, 0, 0, 641, 642, 3, 34, 17, 0, 642, 643, 5, 43, 0, 0, 643, 644, 6, 20, -1, 0, 644, 901, 1, 0, 0, 0, 645, 646, 5, 97, 0, 0, 646, 647, 3, 34, 17, 0, 647, 648, 5, 43, 0, 0, 648, 649, 6, 20, -1, 0, 649, 901, 1, 0, 0, 0, 650, 651, 5, 98, 0, 0, 651, 652, 3, 34, 17, 0, 652, 653, 5, 43, 0, 0, 653, 654, 6, 20, -1, 0, 654, 901, 1, 0, 0, 0, 655, 656, 5, 99, 0, 0, 656, 657, 3, 34, 17, 0, 657, 658, 5, 43, 0, 0, 658, 659, 6, 20, -1, 0, 659, 901, 1, 0, 0, 0, 660, 661, 5, 100, 0, 0, 661, 662, 3, 34, 17, 0, 662, 663, 5, 43, 0, 0, 663, 664, 6, 20, -1, 0, 664, 901, 1, 0, 0, 0, 665, 666, 5, 101, 0, 0, 666, 667, 3, 34, 17, 0, 667, 668, 5, 43, 0, 0, 668, 669, 6, 20, -1, 0, 669, 901, 1, 0, 0, 0, 670, 671, 5, 102, 0, 0, 671, 672, 3, 34, 17, 0, 672, 673, 5, 43, 0, 0, 673, 674, 6, 20, -1, 0, 674, 901, 1, 0, 0, 0, 675, 676, 5, 103, 0, 0, 676, 677, 3, 34, 17, 0, 677, 678, 5, 43, 0, 0, 678, 679, 6, 20, -1, 0, 679, 901, 1, 0, 0, 0, 680, 681, 5, 104, 0, 0, 681, 682, 3, 34, 17, 0, 682, 683, 5, 43, 0, 0, 683, 684, 6, 20, -1, 0, 684, 901, 1, 0, 0, 0, 685, 686, 5, 105, 0, 0, 686, 687, 3, 34, 17, 0, 687, 688, 5, 43, 0, 0, 688, 689, 6, 20, -1, 0, 689, 901, 1, 0, 0, 0, 690, 691, 5, 106, 0, 0, 691, 692, 3, 34, 17, 0, 692, 693, 5, 43, 0, 0, 693, 694, 6, 20, -1, 0, 694, 901, 1, 0, 0, 0, 695, 696, 5, 107, 0, 0, 696, 697, 3, 34, 17, 0, 697, 698, 5, 43, 0, 0, 698, 699, 6, 20, -1, 0, 699, 901, 1, 0, 0, 0, 700, 701, 5, 108, 0, 0, 701, 702, 3, 34, 17, 0, 702, 703, 5, 43, 0, 0, 703, 704, 6, 20, -1, 0, 704, 901, 1, 0, 0, 0, 705, 706, 5, 109, 0, 0, 706, 707, 3, 34, 17, 0, 707, 708, 5, 43, 0, 0, 708, 709, 6, 20, -1, 0, 709, 901, 1, 0, 0, 0, 710, 711, 5, 110, 0, 0, 711, 712, 3, 34, 17, 0, 712, 713, 5, 43, 0, 0, 713, 714, 6, 20, -1, 0, 714, 901, 1, 0, 0, 0, 715, 716, 5, 111, 0, 0, 716, 717, 3, 34, 17, 0, 717, 718, 5, 43, 0, 0, 718, 719, 6, 20, -1, 0, 719, 901, 1, 0, 0, 0, 720, 721, 5, 112, 0, 0, 721, 722, 3, 34, 17, 0, 722, 723, 5, 43, 0, 0, 723, 724, 6, 20, -1, 0, 724, 901, 1, 0, 0, 0, 725, 726, 5, 113, 0, 0, 726, 727, 3, 34, 17, 0, 727, 728, 5, 43, 0, 0, 728, 729, 6, 20, -1, 0, 729, 901, 1, 0, 0, 0, 730, 731, 5, 114, 0, 0, 731, 732, 3, 34, 17, 0, 732, 733, 5, 43, 0, 0, 733, 734, 6, 20, -1, 0, 734, 901, 1, 0, 0, 0, 735, 736, 5, 115, 0, 0, 736, 737, 3, 34, 17, 0, 737, 738, 5, 43, 0, 0, 738, 739, 6, 20, -1, 0, 739, 901, 1, 0, 0, 0, 740, 741, 5, 116, 0, 0, 741, 742, 3, 34, 17, 0, 742, 743, 5, 43, 0, 0, 743, 744, 6, 20, -1, 0, 744, 901, 1, 0, 0, 0, 745, 746, 5, 117, 0, 0, 746, 747, 3, 34, 17, 0, 747, 748, 5, 43, 0, 0, 748, 749, 6, 20, -1, 0, 749, 901, 1, 0, 0, 0, 750, 751, 5, 118, 0, 0, 751, 752, 3, 34, 17, 0, 752, 753, 5, 43, 0, 0, 753, 754, 6, 20, -1, 0, 754, 901, 1, 0, 0, 0, 755, 756, 5, 119, 0, 0, 756, 757, 3, 34, 17, 0, 757, 758, 5, 43, 0, 0, 758, 759, 6, 20, -1, 0, 759, 901, 1, 0, 0, 0, 760, 761, 5, 120, 0, 0, 761, 762, 3, 34, 17, 0, 762, 763, 5, 43, 0, 0, 763, 764, 6, 20, -1, 0, 764, 901, 1, 0, 0, 0, 765, 766, 5, 121, 0, 0, 766, 767, 3, 34, 17, 0, 767, 768, 5, 43, 0, 0, 768, 769, 6, 20, -1, 0, 769, 901, 1, 0, 0, 0, 770, 771, 5, 122, 0, 0, 771, 772, 3, 34, 17, 0, 772, 773, 5, 43, 0, 0, 773, 774, 6, 20, -1, 0, 774, 901, 1, 0, 0, 0, 775, 776, 5, 123, 0, 0, 776, 777, 3, 34, 17, 0, 777, 778, 5, 43, 0, 0, 778, 779, 6, 20, -1, 0, 779, 901, 1, 0, 0, 0, 780, 781, 5, 124, 0, 0, 781, 782, 3, 34, 17, 0, 782, 783, 5, 43, 0, 0, 783, 784, 6, 20, -1, 0, 784, 901, 1, 0, 0, 0, 785, 786, 5, 125, 0, 0, 786, 787, 3, 34, 17, 0, 787, 788, 5, 43, 0, 0, 788, 789, 6, 20, -1, 0, 789, 901, 1, 0, 0, 0, 790, 791, 5, 126, 0, 0, 791, 792, 3, 34, 17, 0, 792, 793, 5, 43, 0, 0, 793, 794, 6, 20, -1, 0, 794, 901, 1, 0, 0, 0, 795, 796, 5, 127, 0, 0, 796, 797, 3, 34, 17, 0, 797, 798, 5, 43, 0, 0, 798, 799, 6, 20, -1, 0, 799, 901, 1, 0, 0, 0, 800, 801, 5, 128, 0, 0, 801, 802, 3, 34, 17, 0, 802, 803, 5, 43, 0, 0, 803, 804, 6, 20, -1, 0, 804, 901, 1, 0, 0, 0, 805, 806, 5, 129, 0, 0, 806, 807, 3, 34, 17, 0, 807, 808, 5, 43, 0, 0, 808, 809, 6, 20, -1, 0, 809, 901, 1, 0, 0, 0, 810, 811, 5, 130, 0, 0, 811, 812, 3, 34, 17, 0, 812, 813, 5, 43, 0, 0, 813, 814, 6, 20, -1, 0, 814, 901, 1, 0, 0, 0, 815, 816, 5, 131, 0, 0, 816, 817, 3, 34, 17, 0, 817, 818, 5, 43, 0, 0, 818, 819, 6, 20, -1, 0, 819, 901, 1, 0, 0, 0, 820, 821, 5, 132, 0, 0, 821, 822, 3, 34, 17, 0, 822, 823, 5, 43, 0, 0, 823, 824, 6, 20, -1, 0, 824, 901, 1, 0, 0, 0, 825, 826, 5, 133, 0, 0, 826, 827, 3, 34, 17, 0, 827, 828, 5, 43, 0, 0, 828, 829, 6, 20, -1, 0, 829, 901, 1, 0, 0, 0, 830, 831, 5, 134, 0, 0, 831, 832, 3, 34, 17, 0, 832, 833, 5, 43, 0, 0, 833, 834, 6, 20, -1, 0, 834, 901, 1, 0, 0, 0, 835, 836, 5, 135, 0, 0, 836, 837, 3, 34, 17, 0, 837, 838, 5, 43, 0, 0, 838, 839, 6, 20, -1, 0, 839, 901, 1, 0, 0, 0, 840, 841, 5, 136, 0, 0, 841, 842, 3, 34, 17, 0, 842, 843, 5, 43, 0, 0, 843, 844, 6, 20, -1, 0, 844, 901, 1, 0, 0, 0, 845, 846, 5, 137, 0, 0, 846, 847, 3, 34, 17, 0, 847, 848, 5, 43, 0, 0, 848, 849, 6, 20, -1, 0, 849, 901, 1, 0, 0, 0, 850, 851, 5, 138, 0, 0, 851, 852, 3, 34, 17, 0, 852, 853, 5, 43, 0, 0, 853, 854, 6, 20, -1, 0, 854, 901, 1, 0, 0, 0, 855, 856, 5, 139, 0, 0, 856, 857, 3, 34, 17, 0, 857, 858, 5, 43, 0, 0, 858, 859, 6, 20, -1, 0, 859, 901, 1, 0, 0, 0, 860, 861, 5, 140, 0, 0, 861, 862, 3, 34, 17, 0, 862, 863, 5, 43, 0, 0, 863, 864, 6, 20, -1, 0, 864, 901, 1, 0, 0, 0, 865, 866, 5, 141, 0, 0, 866, 867, 3, 34, 17, 0, 867, 868, 5, 43, 0, 0, 868, 869, 6, 20, -1, 0, 869, 901, 1, 0, 0, 0, 870, 871, 5, 142, 0, 0, 871, 872, 3, 34, 17, 0, 872, 873, 5, 43, 0, 0, 873, 874, 6, 20, -1, 0, 874, 901, 1, 0, 0, 0, 875, 876, 5, 143, 0, 0, 876, 877, 3, 34, 17, 0, 877, 878, 5, 43, 0, 0, 878, 879, 6, 20, -1, 0, 879, 901, 1, 0, 0, 0, 880, 881, 5, 144, 0, 0, 881, 882, 3, 34, 17, 0, 882, 883, 5, 43, 0, 0, 883, 884, 6, 20, -1, 0, 884, 901, 1, 0, 0, 0, 885, 886, 5, 145, 0, 0, 886, 887, 3, 34, 17, 0, 887, 888, 5, 43, 0, 0, 888, 889, 6, 20, -1, 0, 889, 901, 1, 0, 0, 0, 890, 891, 5, 146, 0, 0, 891, 892, 3, 34, 17, 0, 892, 893, 5, 43, 0, 0, 893, 894, 6, 20, -1, 0, 894, 901, 1, 0, 0, 0, 895, 896, 5, 147, 0, 0, 896, 897, 3, 34, 17, 0, 897, 898, 5, 43, 0, 0, 898, 899, 6, 20, -1, 0, 899, 901, 1, 0, 0, 0, 900, 326, 1, 0, 0, 0, 900, 328, 1, 0, 0, 0, 900, 330, 1, 0, 0, 0, 900, 332, 1, 0, 0, 0, 900, 334, 1, 0, 0, 0, 900, 336, 1, 0, 0, 0, 900, 338, 1, 0, 0, 0, 900, 340, 1, 0, 0, 0, 900, 345, 1, 0, 0, 0, 900, 350, 1, 0, 0, 0, 900, 355, 1, 0, 0, 0, 900, 360, 1, 0, 0, 0, 900, 365, 1, 0, 0, 0, 900, 370, 1, 0, 0, 0, 900, 375, 1, 0, 0, 0, 900, 380, 1, 0, 0, 0, 900, 385, 1, 0, 0, 0, 900, 390, 1, 0, 0, 0, 900, 395, 1, 0, 0, 0, 900, 400, 1, 0, 0, 0, 900, 405, 1, 0, 0, 0, 900, 410, 1, 0, 0, 0, 900, 415, 1, 0, 0, 0, 900, 420, 1, 0, 0, 0, 900, 425, 1, 0, 0, 0, 900, 430, 1, 0, 0, 0, 900, 435, 1, 0, 0, 0, 900, 440, 1, 0, 0, 0, 900, 445, 1, 0, 0, 0, 900, 450, 1, 0, 0, 0, 900, 455, 1, 0, 0, 0, 900, 460, 1, 0, 0, 0, 900, 465, 1, 0, 0, 0, 900, 470, 1, 0, 0, 0, 900, 475, 1, 0, 0, 0, 900, 480, 1, 0, 0, 0, 900, 485, 1, 0, 0, 0, 900, 490, 1, 0, 0, 0, 900, 495, 1, 0, 0, 0, 900, 500, 1, 0, 0, 0, 900, 505, 1, 0, 0, 0, 900, 510, 1, 0, 0, 0, 900, 515, 1, 0, 0, 0, 900, 520, 1, 0, 0, 0, 900, 525, 1, 0, 0, 0, 900, 530, 1, 0, 0, 0, 900, 535, 1, 0, 0, 0, 900, 540, 1, 0, 0, 0, 900, 545, 1, 0, 0, 0, 900, 550, 1, 0, 0, 0, 900, 555, 1, 0, 0, 0, 900, 560, 1, 0, 0, 0, 900, 565, 1, 0, 0, 0, 900, 570, 1, 0, 0, 0, 900, 575, 1, 0, 0, 0, 900, 580, 1, 0, 0, 0, 900, 585, 1, 0, 0, 0, 900, 590, 1, 0, 0, 0, 900, 595, 1, 0, 0, 0, 900, 600, 1, 0, 0, 0, 900, 605, 1, 0, 0, 0, 900, 610, 1, 0, 0, 0, 900, 615, 1, 0, 0, 0, 900, 620, 1, 0, 0, 0, 900, 625, 1, 0, 0, 0, 900, 630, 1, 0, 0, 0, 900, 635, 1, 0, 0, 0, 900, 640, 1, 0, 0, 0, 900, 645, 1, 0, 0, 0, 900, 650, 1, 0, 0, 0, 900, 655, 1, 0, 0, 0, 900, 660, 1, 0, 0, 0, 900, 665, 1, 0, 0, 0, 900, 670, 1, 0, 0, 0, 900, 675, 1, 0, 0, 0, 900, 680, 1, 0, 0, 0, 900, 685, 1, 0, 0, 0, 900, 690, 1, 0, 0, 0, 900, 695, 1, 0, 0, 0, 900, 700, 1, 0, 0, 0, 900, 705, 1, 0, 0, 0, 900, 710, 1, 0, 0, 0, 900, 715, 1, 0, 0, 0, 900, 720, 1, 0, 0, 0, 900, 725, 1, 0, 0, 0, 900, 730, 1, 0, 0, 0, 900, 735, 1, 0, 0, 0, 900, 740, 1, 0, 0, 0, 900, 745, 1, 0, 0, 0, 900, 750, 1, 0, 0, 0, 900, 755, 1, 0, 0, 0, 900, 760, 1, 0, 0, 0, 900, 765, 1, 0, 0, 0, 900, 770, 1, 0, 0, 0, 900, 775, 1, 0, 0, 0, 900, 780, 1, 0, 0, 0, 900, 785, 1, 0, 0, 0, 900, 790, 1, 0, 0, 0, 900, 795, 1, 0, 0, 0, 900, 800, 1, 0, 0, 0, 900, 805, 1, 0, 0, 0, 900, 810, 1, 0, 0, 0, 900, 815, 1, 0, 0, 0, 900, 820, 1, 0, 0, 0, 900, 825, 1, 0, 0, 0, 900, 830, 1, 0, 0, 0, 900, 835, 1, 0, 0, 0, 900, 840, 1, 0, 0, 0, 900, 845, 1, 0, 0, 0, 900, 850, 1, 0, 0, 0, 900, 855, 1, 0, 0, 0, 900, 860, 1, 0, 0, 0, 900, 865, 1, 0, 0, 0, 900, 870, 1, 0, 0, 0, 900, 875, 1, 0, 0, 0, 900, 880, 1, 0, 0, 0, 900, 885, 1, 0, 0, 0, 900, 890, 1, 0, 0, 0, 900, 895, 1, 0, 0, 0, 901, 41, 1, 0, 0, 0, 902, 903, 3, 32, 16, 0, 903, 904, 5, 0, 0, 1, 904, 905, 6, 21, -1, 0, 905, 43, 1, 0, 0, 0, 33, 51, 59, 67, 69, 76, 86, 96, 101, 117, 119, 132, 134, 147, 149, 170, 172, 185, 187, 204, 211, 227, 239, 241, 252, 265, 267, 280, 282, 291, 299, 309, 312, 900]
\ No newline at end of file
+[4, 1, 157, 917, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 52, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 58, 8, 1, 11, 1, 12, 1, 59, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 66, 8, 1, 11, 1, 12, 1, 67, 3, 1, 70, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 77, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 87, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 97, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 102, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 118, 8, 4, 10, 4, 12, 4, 121, 9, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 133, 8, 5, 10, 5, 12, 5, 136, 9, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 148, 8, 6, 10, 6, 12, 6, 151, 9, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 171, 8, 7, 10, 7, 12, 7, 174, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 186, 8, 8, 10, 8, 12, 8, 189, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 205, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 210, 8, 9, 10, 9, 12, 9, 213, 9, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 228, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 240, 8, 11, 10, 11, 12, 11, 243, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 251, 8, 12, 10, 12, 12, 12, 254, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 266, 8, 13, 10, 13, 12, 13, 269, 9, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 281, 8, 14, 10, 14, 12, 14, 284, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 292, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 300, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 5, 17, 308, 8, 17, 10, 17, 12, 17, 311, 9, 17, 3, 17, 313, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 911, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 0, 0, 22, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 0, 0, 1055, 0, 51, 1, 0, 0, 0, 2, 69, 1, 0, 0, 0, 4, 71, 1, 0, 0, 0, 6, 101, 1, 0, 0, 0, 8, 103, 1, 0, 0, 0, 10, 122, 1, 0, 0, 0, 12, 137, 1, 0, 0, 0, 14, 152, 1, 0, 0, 0, 16, 175, 1, 0, 0, 0, 18, 190, 1, 0, 0, 0, 20, 227, 1, 0, 0, 0, 22, 229, 1, 0, 0, 0, 24, 244, 1, 0, 0, 0, 26, 255, 1, 0, 0, 0, 28, 270, 1, 0, 0, 0, 30, 285, 1, 0, 0, 0, 32, 293, 1, 0, 0, 0, 34, 312, 1, 0, 0, 0, 36, 314, 1, 0, 0, 0, 38, 320, 1, 0, 0, 0, 40, 910, 1, 0, 0, 0, 42, 912, 1, 0, 0, 0, 44, 45, 3, 40, 20, 0, 45, 46, 5, 1, 0, 0, 46, 47, 6, 0, -1, 0, 47, 52, 1, 0, 0, 0, 48, 49, 3, 40, 20, 0, 49, 50, 6, 0, -1, 0, 50, 52, 1, 0, 0, 0, 51, 44, 1, 0, 0, 0, 51, 48, 1, 0, 0, 0, 52, 1, 1, 0, 0, 0, 53, 54, 5, 2, 0, 0, 54, 55, 3, 0, 0, 0, 55, 56, 6, 1, -1, 0, 56, 58, 1, 0, 0, 0, 57, 53, 1, 0, 0, 0, 58, 59, 1, 0, 0, 0, 59, 57, 1, 0, 0, 0, 59, 60, 1, 0, 0, 0, 60, 70, 1, 0, 0, 0, 61, 62, 5, 2, 0, 0, 62, 63, 3, 6, 3, 0, 63, 64, 6, 1, -1, 0, 64, 66, 1, 0, 0, 0, 65, 61, 1, 0, 0, 0, 66, 67, 1, 0, 0, 0, 67, 65, 1, 0, 0, 0, 67, 68, 1, 0, 0, 0, 68, 70, 1, 0, 0, 0, 69, 57, 1, 0, 0, 0, 69, 65, 1, 0, 0, 0, 70, 3, 1, 0, 0, 0, 71, 72, 3, 0, 0, 0, 72, 76, 6, 2, -1, 0, 73, 74, 3, 2, 1, 0, 74, 75, 6, 2, -1, 0, 75, 77, 1, 0, 0, 0, 76, 73, 1, 0, 0, 0, 76, 77, 1, 0, 0, 0, 77, 5, 1, 0, 0, 0, 78, 79, 5, 3, 0, 0, 79, 80, 3, 4, 2, 0, 80, 81, 6, 3, -1, 0, 81, 87, 1, 0, 0, 0, 82, 83, 5, 4, 0, 0, 83, 84, 3, 4, 2, 0, 84, 85, 6, 3, -1, 0, 85, 87, 1, 0, 0, 0, 86, 78, 1, 0, 0, 0, 86, 82, 1, 0, 0, 0, 87, 102, 1, 0, 0, 0, 88, 89, 5, 3, 0, 0, 89, 90, 3, 6, 3, 0, 90, 91, 6, 3, -1, 0, 91, 97, 1, 0, 0, 0, 92, 93, 5, 4, 0, 0, 93, 94, 3, 6, 3, 0, 94, 95, 6, 3, -1, 0, 95, 97, 1, 0, 0, 0, 96, 88, 1, 0, 0, 0, 96, 92, 1, 0, 0, 0, 97, 102, 1, 0, 0, 0, 98, 99, 3, 4, 2, 0, 99, 100, 6, 3, -1, 0, 100, 102, 1, 0, 0, 0, 101, 86, 1, 0, 0, 0, 101, 96, 1, 0, 0, 0, 101, 98, 1, 0, 0, 0, 102, 7, 1, 0, 0, 0, 103, 104, 3, 6, 3, 0, 104, 119, 6, 4, -1, 0, 105, 106, 5, 5, 0, 0, 106, 107, 3, 6, 3, 0, 107, 108, 6, 4, -1, 0, 108, 118, 1, 0, 0, 0, 109, 110, 5, 6, 0, 0, 110, 111, 3, 6, 3, 0, 111, 112, 6, 4, -1, 0, 112, 118, 1, 0, 0, 0, 113, 114, 5, 7, 0, 0, 114, 115, 3, 6, 3, 0, 115, 116, 6, 4, -1, 0, 116, 118, 1, 0, 0, 0, 117, 105, 1, 0, 0, 0, 117, 109, 1, 0, 0, 0, 117, 113, 1, 0, 0, 0, 118, 121, 1, 0, 0, 0, 119, 117, 1, 0, 0, 0, 119, 120, 1, 0, 0, 0, 120, 9, 1, 0, 0, 0, 121, 119, 1, 0, 0, 0, 122, 123, 3, 8, 4, 0, 123, 134, 6, 5, -1, 0, 124, 125, 5, 4, 0, 0, 125, 126, 3, 8, 4, 0, 126, 127, 6, 5, -1, 0, 127, 133, 1, 0, 0, 0, 128, 129, 5, 3, 0, 0, 129, 130, 3, 8, 4, 0, 130, 131, 6, 5, -1, 0, 131, 133, 1, 0, 0, 0, 132, 124, 1, 0, 0, 0, 132, 128, 1, 0, 0, 0, 133, 136, 1, 0, 0, 0, 134, 132, 1, 0, 0, 0, 134, 135, 1, 0, 0, 0, 135, 11, 1, 0, 0, 0, 136, 134, 1, 0, 0, 0, 137, 138, 3, 10, 5, 0, 138, 149, 6, 6, -1, 0, 139, 140, 5, 8, 0, 0, 140, 141, 3, 10, 5, 0, 141, 142, 6, 6, -1, 0, 142, 148, 1, 0, 0, 0, 143, 144, 5, 9, 0, 0, 144, 145, 3, 10, 5, 0, 145, 146, 6, 6, -1, 0, 146, 148, 1, 0, 0, 0, 147, 139, 1, 0, 0, 0, 147, 143, 1, 0, 0, 0, 148, 151, 1, 0, 0, 0, 149, 147, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 13, 1, 0, 0, 0, 151, 149, 1, 0, 0, 0, 152, 153, 3, 12, 6, 0, 153, 172, 6, 7, -1, 0, 154, 155, 5, 10, 0, 0, 155, 156, 3, 12, 6, 0, 156, 157, 6, 7, -1, 0, 157, 171, 1, 0, 0, 0, 158, 159, 5, 11, 0, 0, 159, 160, 3, 12, 6, 0, 160, 161, 6, 7, -1, 0, 161, 171, 1, 0, 0, 0, 162, 163, 5, 12, 0, 0, 163, 164, 3, 12, 6, 0, 164, 165, 6, 7, -1, 0, 165, 171, 1, 0, 0, 0, 166, 167, 5, 13, 0, 0, 167, 168, 3, 12, 6, 0, 168, 169, 6, 7, -1, 0, 169, 171, 1, 0, 0, 0, 170, 154, 1, 0, 0, 0, 170, 158, 1, 0, 0, 0, 170, 162, 1, 0, 0, 0, 170, 166, 1, 0, 0, 0, 171, 174, 1, 0, 0, 0, 172, 170, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 15, 1, 0, 0, 0, 174, 172, 1, 0, 0, 0, 175, 176, 3, 14, 7, 0, 176, 187, 6, 8, -1, 0, 177, 178, 5, 14, 0, 0, 178, 179, 3, 14, 7, 0, 179, 180, 6, 8, -1, 0, 180, 186, 1, 0, 0, 0, 181, 182, 5, 15, 0, 0, 182, 183, 3, 14, 7, 0, 183, 184, 6, 8, -1, 0, 184, 186, 1, 0, 0, 0, 185, 177, 1, 0, 0, 0, 185, 181, 1, 0, 0, 0, 186, 189, 1, 0, 0, 0, 187, 185, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 17, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 190, 191, 3, 16, 8, 0, 191, 211, 6, 9, -1, 0, 192, 193, 5, 16, 0, 0, 193, 205, 6, 9, -1, 0, 194, 195, 5, 17, 0, 0, 195, 205, 6, 9, -1, 0, 196, 197, 5, 18, 0, 0, 197, 205, 6, 9, -1, 0, 198, 199, 5, 19, 0, 0, 199, 205, 6, 9, -1, 0, 200, 201, 5, 20, 0, 0, 201, 205, 6, 9, -1, 0, 202, 203, 5, 21, 0, 0, 203, 205, 6, 9, -1, 0, 204, 192, 1, 0, 0, 0, 204, 194, 1, 0, 0, 0, 204, 196, 1, 0, 0, 0, 204, 198, 1, 0, 0, 0, 204, 200, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 207, 3, 16, 8, 0, 207, 208, 6, 9, -1, 0, 208, 210, 1, 0, 0, 0, 209, 204, 1, 0, 0, 0, 210, 213, 1, 0, 0, 0, 211, 209, 1, 0, 0, 0, 211, 212, 1, 0, 0, 0, 212, 214, 1, 0, 0, 0, 213, 211, 1, 0, 0, 0, 214, 215, 6, 9, -1, 0, 215, 19, 1, 0, 0, 0, 216, 217, 5, 22, 0, 0, 217, 218, 3, 18, 9, 0, 218, 219, 6, 10, -1, 0, 219, 228, 1, 0, 0, 0, 220, 221, 5, 22, 0, 0, 221, 222, 3, 20, 10, 0, 222, 223, 6, 10, -1, 0, 223, 228, 1, 0, 0, 0, 224, 225, 3, 18, 9, 0, 225, 226, 6, 10, -1, 0, 226, 228, 1, 0, 0, 0, 227, 216, 1, 0, 0, 0, 227, 220, 1, 0, 0, 0, 227, 224, 1, 0, 0, 0, 228, 21, 1, 0, 0, 0, 229, 230, 3, 20, 10, 0, 230, 241, 6, 11, -1, 0, 231, 232, 5, 23, 0, 0, 232, 233, 3, 20, 10, 0, 233, 234, 6, 11, -1, 0, 234, 240, 1, 0, 0, 0, 235, 236, 5, 24, 0, 0, 236, 237, 3, 20, 10, 0, 237, 238, 6, 11, -1, 0, 238, 240, 1, 0, 0, 0, 239, 231, 1, 0, 0, 0, 239, 235, 1, 0, 0, 0, 240, 243, 1, 0, 0, 0, 241, 239, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 23, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 244, 245, 3, 22, 11, 0, 245, 252, 6, 12, -1, 0, 246, 247, 5, 25, 0, 0, 247, 248, 3, 22, 11, 0, 248, 249, 6, 12, -1, 0, 249, 251, 1, 0, 0, 0, 250, 246, 1, 0, 0, 0, 251, 254, 1, 0, 0, 0, 252, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 25, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 255, 256, 3, 24, 12, 0, 256, 267, 6, 13, -1, 0, 257, 258, 5, 26, 0, 0, 258, 259, 3, 24, 12, 0, 259, 260, 6, 13, -1, 0, 260, 266, 1, 0, 0, 0, 261, 262, 5, 27, 0, 0, 262, 263, 3, 24, 12, 0, 263, 264, 6, 13, -1, 0, 264, 266, 1, 0, 0, 0, 265, 257, 1, 0, 0, 0, 265, 261, 1, 0, 0, 0, 266, 269, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 267, 268, 1, 0, 0, 0, 268, 27, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 270, 271, 3, 26, 13, 0, 271, 282, 6, 14, -1, 0, 272, 273, 5, 28, 0, 0, 273, 274, 3, 26, 13, 0, 274, 275, 6, 14, -1, 0, 275, 281, 1, 0, 0, 0, 276, 277, 5, 29, 0, 0, 277, 278, 3, 26, 13, 0, 278, 279, 6, 14, -1, 0, 279, 281, 1, 0, 0, 0, 280, 272, 1, 0, 0, 0, 280, 276, 1, 0, 0, 0, 281, 284, 1, 0, 0, 0, 282, 280, 1, 0, 0, 0, 282, 283, 1, 0, 0, 0, 283, 29, 1, 0, 0, 0, 284, 282, 1, 0, 0, 0, 285, 286, 3, 28, 14, 0, 286, 291, 6, 15, -1, 0, 287, 288, 5, 30, 0, 0, 288, 289, 3, 30, 15, 0, 289, 290, 6, 15, -1, 0, 290, 292, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 31, 1, 0, 0, 0, 293, 294, 3, 30, 15, 0, 294, 299, 6, 16, -1, 0, 295, 296, 5, 31, 0, 0, 296, 297, 3, 32, 16, 0, 297, 298, 6, 16, -1, 0, 298, 300, 1, 0, 0, 0, 299, 295, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 33, 1, 0, 0, 0, 301, 302, 3, 32, 16, 0, 302, 309, 6, 17, -1, 0, 303, 304, 5, 32, 0, 0, 304, 305, 3, 32, 16, 0, 305, 306, 6, 17, -1, 0, 306, 308, 1, 0, 0, 0, 307, 303, 1, 0, 0, 0, 308, 311, 1, 0, 0, 0, 309, 307, 1, 0, 0, 0, 309, 310, 1, 0, 0, 0, 310, 313, 1, 0, 0, 0, 311, 309, 1, 0, 0, 0, 312, 301, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 35, 1, 0, 0, 0, 314, 315, 3, 32, 16, 0, 315, 316, 6, 18, -1, 0, 316, 317, 5, 33, 0, 0, 317, 318, 3, 32, 16, 0, 318, 319, 6, 18, -1, 0, 319, 37, 1, 0, 0, 0, 320, 321, 3, 32, 16, 0, 321, 322, 6, 19, -1, 0, 322, 323, 5, 34, 0, 0, 323, 324, 3, 32, 16, 0, 324, 325, 6, 19, -1, 0, 325, 39, 1, 0, 0, 0, 326, 327, 5, 35, 0, 0, 327, 911, 6, 20, -1, 0, 328, 329, 5, 36, 0, 0, 329, 911, 6, 20, -1, 0, 330, 331, 5, 154, 0, 0, 331, 911, 6, 20, -1, 0, 332, 333, 5, 151, 0, 0, 333, 911, 6, 20, -1, 0, 334, 335, 5, 153, 0, 0, 335, 911, 6, 20, -1, 0, 336, 337, 5, 152, 0, 0, 337, 911, 6, 20, -1, 0, 338, 339, 5, 155, 0, 0, 339, 911, 6, 20, -1, 0, 340, 341, 5, 37, 0, 0, 341, 342, 3, 32, 16, 0, 342, 343, 5, 38, 0, 0, 343, 344, 6, 20, -1, 0, 344, 911, 1, 0, 0, 0, 345, 346, 5, 39, 0, 0, 346, 347, 3, 34, 17, 0, 347, 348, 5, 40, 0, 0, 348, 349, 6, 20, -1, 0, 349, 911, 1, 0, 0, 0, 350, 351, 5, 39, 0, 0, 351, 352, 3, 34, 17, 0, 352, 353, 5, 41, 0, 0, 353, 354, 6, 20, -1, 0, 354, 911, 1, 0, 0, 0, 355, 356, 5, 42, 0, 0, 356, 357, 3, 36, 18, 0, 357, 358, 5, 43, 0, 0, 358, 359, 6, 20, -1, 0, 359, 911, 1, 0, 0, 0, 360, 361, 5, 39, 0, 0, 361, 362, 3, 36, 18, 0, 362, 363, 5, 43, 0, 0, 363, 364, 6, 20, -1, 0, 364, 911, 1, 0, 0, 0, 365, 366, 5, 39, 0, 0, 366, 367, 3, 36, 18, 0, 367, 368, 5, 41, 0, 0, 368, 369, 6, 20, -1, 0, 369, 911, 1, 0, 0, 0, 370, 371, 5, 42, 0, 0, 371, 372, 3, 36, 18, 0, 372, 373, 5, 41, 0, 0, 373, 374, 6, 20, -1, 0, 374, 911, 1, 0, 0, 0, 375, 376, 5, 42, 0, 0, 376, 377, 3, 32, 16, 0, 377, 378, 5, 43, 0, 0, 378, 379, 6, 20, -1, 0, 379, 911, 1, 0, 0, 0, 380, 381, 5, 44, 0, 0, 381, 382, 3, 38, 19, 0, 382, 383, 5, 45, 0, 0, 383, 384, 6, 20, -1, 0, 384, 911, 1, 0, 0, 0, 385, 386, 5, 44, 0, 0, 386, 387, 3, 34, 17, 0, 387, 388, 5, 45, 0, 0, 388, 389, 6, 20, -1, 0, 389, 911, 1, 0, 0, 0, 390, 391, 5, 46, 0, 0, 391, 392, 3, 34, 17, 0, 392, 393, 5, 43, 0, 0, 393, 394, 6, 20, -1, 0, 394, 911, 1, 0, 0, 0, 395, 396, 5, 47, 0, 0, 396, 397, 3, 34, 17, 0, 397, 398, 5, 43, 0, 0, 398, 399, 6, 20, -1, 0, 399, 911, 1, 0, 0, 0, 400, 401, 5, 48, 0, 0, 401, 402, 3, 34, 17, 0, 402, 403, 5, 43, 0, 0, 403, 404, 6, 20, -1, 0, 404, 911, 1, 0, 0, 0, 405, 406, 5, 49, 0, 0, 406, 407, 3, 34, 17, 0, 407, 408, 5, 43, 0, 0, 408, 409, 6, 20, -1, 0, 409, 911, 1, 0, 0, 0, 410, 411, 5, 50, 0, 0, 411, 412, 3, 34, 17, 0, 412, 413, 5, 43, 0, 0, 413, 414, 6, 20, -1, 0, 414, 911, 1, 0, 0, 0, 415, 416, 5, 51, 0, 0, 416, 417, 3, 34, 17, 0, 417, 418, 5, 43, 0, 0, 418, 419, 6, 20, -1, 0, 419, 911, 1, 0, 0, 0, 420, 421, 5, 52, 0, 0, 421, 422, 3, 34, 17, 0, 422, 423, 5, 43, 0, 0, 423, 424, 6, 20, -1, 0, 424, 911, 1, 0, 0, 0, 425, 426, 5, 53, 0, 0, 426, 427, 3, 34, 17, 0, 427, 428, 5, 43, 0, 0, 428, 429, 6, 20, -1, 0, 429, 911, 1, 0, 0, 0, 430, 431, 5, 54, 0, 0, 431, 432, 3, 34, 17, 0, 432, 433, 5, 43, 0, 0, 433, 434, 6, 20, -1, 0, 434, 911, 1, 0, 0, 0, 435, 436, 5, 55, 0, 0, 436, 437, 3, 34, 17, 0, 437, 438, 5, 43, 0, 0, 438, 439, 6, 20, -1, 0, 439, 911, 1, 0, 0, 0, 440, 441, 5, 56, 0, 0, 441, 442, 3, 34, 17, 0, 442, 443, 5, 43, 0, 0, 443, 444, 6, 20, -1, 0, 444, 911, 1, 0, 0, 0, 445, 446, 5, 57, 0, 0, 446, 447, 3, 34, 17, 0, 447, 448, 5, 43, 0, 0, 448, 449, 6, 20, -1, 0, 449, 911, 1, 0, 0, 0, 450, 451, 5, 58, 0, 0, 451, 452, 3, 34, 17, 0, 452, 453, 5, 43, 0, 0, 453, 454, 6, 20, -1, 0, 454, 911, 1, 0, 0, 0, 455, 456, 5, 59, 0, 0, 456, 457, 3, 34, 17, 0, 457, 458, 5, 43, 0, 0, 458, 459, 6, 20, -1, 0, 459, 911, 1, 0, 0, 0, 460, 461, 5, 60, 0, 0, 461, 462, 3, 34, 17, 0, 462, 463, 5, 43, 0, 0, 463, 464, 6, 20, -1, 0, 464, 911, 1, 0, 0, 0, 465, 466, 5, 61, 0, 0, 466, 467, 3, 34, 17, 0, 467, 468, 5, 43, 0, 0, 468, 469, 6, 20, -1, 0, 469, 911, 1, 0, 0, 0, 470, 471, 5, 62, 0, 0, 471, 472, 3, 34, 17, 0, 472, 473, 5, 43, 0, 0, 473, 474, 6, 20, -1, 0, 474, 911, 1, 0, 0, 0, 475, 476, 5, 63, 0, 0, 476, 477, 3, 34, 17, 0, 477, 478, 5, 43, 0, 0, 478, 479, 6, 20, -1, 0, 479, 911, 1, 0, 0, 0, 480, 481, 5, 64, 0, 0, 481, 482, 3, 34, 17, 0, 482, 483, 5, 43, 0, 0, 483, 484, 6, 20, -1, 0, 484, 911, 1, 0, 0, 0, 485, 486, 5, 65, 0, 0, 486, 487, 3, 34, 17, 0, 487, 488, 5, 43, 0, 0, 488, 489, 6, 20, -1, 0, 489, 911, 1, 0, 0, 0, 490, 491, 5, 66, 0, 0, 491, 492, 3, 34, 17, 0, 492, 493, 5, 43, 0, 0, 493, 494, 6, 20, -1, 0, 494, 911, 1, 0, 0, 0, 495, 496, 5, 67, 0, 0, 496, 497, 3, 34, 17, 0, 497, 498, 5, 43, 0, 0, 498, 499, 6, 20, -1, 0, 499, 911, 1, 0, 0, 0, 500, 501, 5, 68, 0, 0, 501, 502, 3, 34, 17, 0, 502, 503, 5, 43, 0, 0, 503, 504, 6, 20, -1, 0, 504, 911, 1, 0, 0, 0, 505, 506, 5, 69, 0, 0, 506, 507, 3, 34, 17, 0, 507, 508, 5, 43, 0, 0, 508, 509, 6, 20, -1, 0, 509, 911, 1, 0, 0, 0, 510, 511, 5, 70, 0, 0, 511, 512, 3, 34, 17, 0, 512, 513, 5, 43, 0, 0, 513, 514, 6, 20, -1, 0, 514, 911, 1, 0, 0, 0, 515, 516, 5, 71, 0, 0, 516, 517, 3, 34, 17, 0, 517, 518, 5, 43, 0, 0, 518, 519, 6, 20, -1, 0, 519, 911, 1, 0, 0, 0, 520, 521, 5, 72, 0, 0, 521, 522, 3, 34, 17, 0, 522, 523, 5, 43, 0, 0, 523, 524, 6, 20, -1, 0, 524, 911, 1, 0, 0, 0, 525, 526, 5, 73, 0, 0, 526, 527, 3, 34, 17, 0, 527, 528, 5, 43, 0, 0, 528, 529, 6, 20, -1, 0, 529, 911, 1, 0, 0, 0, 530, 531, 5, 74, 0, 0, 531, 532, 3, 34, 17, 0, 532, 533, 5, 43, 0, 0, 533, 534, 6, 20, -1, 0, 534, 911, 1, 0, 0, 0, 535, 536, 5, 75, 0, 0, 536, 537, 3, 34, 17, 0, 537, 538, 5, 43, 0, 0, 538, 539, 6, 20, -1, 0, 539, 911, 1, 0, 0, 0, 540, 541, 5, 76, 0, 0, 541, 542, 3, 34, 17, 0, 542, 543, 5, 43, 0, 0, 543, 544, 6, 20, -1, 0, 544, 911, 1, 0, 0, 0, 545, 546, 5, 77, 0, 0, 546, 547, 3, 34, 17, 0, 547, 548, 5, 43, 0, 0, 548, 549, 6, 20, -1, 0, 549, 911, 1, 0, 0, 0, 550, 551, 5, 78, 0, 0, 551, 552, 3, 34, 17, 0, 552, 553, 5, 43, 0, 0, 553, 554, 6, 20, -1, 0, 554, 911, 1, 0, 0, 0, 555, 556, 5, 79, 0, 0, 556, 557, 3, 34, 17, 0, 557, 558, 5, 43, 0, 0, 558, 559, 6, 20, -1, 0, 559, 911, 1, 0, 0, 0, 560, 561, 5, 80, 0, 0, 561, 562, 3, 34, 17, 0, 562, 563, 5, 43, 0, 0, 563, 564, 6, 20, -1, 0, 564, 911, 1, 0, 0, 0, 565, 566, 5, 81, 0, 0, 566, 567, 3, 34, 17, 0, 567, 568, 5, 43, 0, 0, 568, 569, 6, 20, -1, 0, 569, 911, 1, 0, 0, 0, 570, 571, 5, 82, 0, 0, 571, 572, 3, 34, 17, 0, 572, 573, 5, 43, 0, 0, 573, 574, 6, 20, -1, 0, 574, 911, 1, 0, 0, 0, 575, 576, 5, 83, 0, 0, 576, 577, 3, 34, 17, 0, 577, 578, 5, 43, 0, 0, 578, 579, 6, 20, -1, 0, 579, 911, 1, 0, 0, 0, 580, 581, 5, 84, 0, 0, 581, 582, 3, 34, 17, 0, 582, 583, 5, 43, 0, 0, 583, 584, 6, 20, -1, 0, 584, 911, 1, 0, 0, 0, 585, 586, 5, 85, 0, 0, 586, 587, 3, 34, 17, 0, 587, 588, 5, 43, 0, 0, 588, 589, 6, 20, -1, 0, 589, 911, 1, 0, 0, 0, 590, 591, 5, 86, 0, 0, 591, 592, 3, 34, 17, 0, 592, 593, 5, 43, 0, 0, 593, 594, 6, 20, -1, 0, 594, 911, 1, 0, 0, 0, 595, 596, 5, 87, 0, 0, 596, 597, 3, 34, 17, 0, 597, 598, 5, 43, 0, 0, 598, 599, 6, 20, -1, 0, 599, 911, 1, 0, 0, 0, 600, 601, 5, 88, 0, 0, 601, 602, 3, 34, 17, 0, 602, 603, 5, 43, 0, 0, 603, 604, 6, 20, -1, 0, 604, 911, 1, 0, 0, 0, 605, 606, 5, 89, 0, 0, 606, 607, 3, 34, 17, 0, 607, 608, 5, 43, 0, 0, 608, 609, 6, 20, -1, 0, 609, 911, 1, 0, 0, 0, 610, 611, 5, 90, 0, 0, 611, 612, 3, 34, 17, 0, 612, 613, 5, 43, 0, 0, 613, 614, 6, 20, -1, 0, 614, 911, 1, 0, 0, 0, 615, 616, 5, 91, 0, 0, 616, 617, 3, 34, 17, 0, 617, 618, 5, 43, 0, 0, 618, 619, 6, 20, -1, 0, 619, 911, 1, 0, 0, 0, 620, 621, 5, 92, 0, 0, 621, 622, 3, 34, 17, 0, 622, 623, 5, 43, 0, 0, 623, 624, 6, 20, -1, 0, 624, 911, 1, 0, 0, 0, 625, 626, 5, 93, 0, 0, 626, 627, 3, 34, 17, 0, 627, 628, 5, 43, 0, 0, 628, 629, 6, 20, -1, 0, 629, 911, 1, 0, 0, 0, 630, 631, 5, 94, 0, 0, 631, 632, 3, 34, 17, 0, 632, 633, 5, 43, 0, 0, 633, 634, 6, 20, -1, 0, 634, 911, 1, 0, 0, 0, 635, 636, 5, 95, 0, 0, 636, 637, 3, 34, 17, 0, 637, 638, 5, 43, 0, 0, 638, 639, 6, 20, -1, 0, 639, 911, 1, 0, 0, 0, 640, 641, 5, 96, 0, 0, 641, 642, 3, 34, 17, 0, 642, 643, 5, 43, 0, 0, 643, 644, 6, 20, -1, 0, 644, 911, 1, 0, 0, 0, 645, 646, 5, 97, 0, 0, 646, 647, 3, 34, 17, 0, 647, 648, 5, 43, 0, 0, 648, 649, 6, 20, -1, 0, 649, 911, 1, 0, 0, 0, 650, 651, 5, 98, 0, 0, 651, 652, 3, 34, 17, 0, 652, 653, 5, 43, 0, 0, 653, 654, 6, 20, -1, 0, 654, 911, 1, 0, 0, 0, 655, 656, 5, 99, 0, 0, 656, 657, 3, 34, 17, 0, 657, 658, 5, 43, 0, 0, 658, 659, 6, 20, -1, 0, 659, 911, 1, 0, 0, 0, 660, 661, 5, 100, 0, 0, 661, 662, 3, 34, 17, 0, 662, 663, 5, 43, 0, 0, 663, 664, 6, 20, -1, 0, 664, 911, 1, 0, 0, 0, 665, 666, 5, 101, 0, 0, 666, 667, 3, 34, 17, 0, 667, 668, 5, 43, 0, 0, 668, 669, 6, 20, -1, 0, 669, 911, 1, 0, 0, 0, 670, 671, 5, 102, 0, 0, 671, 672, 3, 34, 17, 0, 672, 673, 5, 43, 0, 0, 673, 674, 6, 20, -1, 0, 674, 911, 1, 0, 0, 0, 675, 676, 5, 103, 0, 0, 676, 677, 3, 34, 17, 0, 677, 678, 5, 43, 0, 0, 678, 679, 6, 20, -1, 0, 679, 911, 1, 0, 0, 0, 680, 681, 5, 104, 0, 0, 681, 682, 3, 34, 17, 0, 682, 683, 5, 43, 0, 0, 683, 684, 6, 20, -1, 0, 684, 911, 1, 0, 0, 0, 685, 686, 5, 105, 0, 0, 686, 687, 3, 34, 17, 0, 687, 688, 5, 43, 0, 0, 688, 689, 6, 20, -1, 0, 689, 911, 1, 0, 0, 0, 690, 691, 5, 106, 0, 0, 691, 692, 3, 34, 17, 0, 692, 693, 5, 43, 0, 0, 693, 694, 6, 20, -1, 0, 694, 911, 1, 0, 0, 0, 695, 696, 5, 107, 0, 0, 696, 697, 3, 34, 17, 0, 697, 698, 5, 43, 0, 0, 698, 699, 6, 20, -1, 0, 699, 911, 1, 0, 0, 0, 700, 701, 5, 108, 0, 0, 701, 702, 3, 34, 17, 0, 702, 703, 5, 43, 0, 0, 703, 704, 6, 20, -1, 0, 704, 911, 1, 0, 0, 0, 705, 706, 5, 109, 0, 0, 706, 707, 3, 34, 17, 0, 707, 708, 5, 43, 0, 0, 708, 709, 6, 20, -1, 0, 709, 911, 1, 0, 0, 0, 710, 711, 5, 110, 0, 0, 711, 712, 3, 34, 17, 0, 712, 713, 5, 43, 0, 0, 713, 714, 6, 20, -1, 0, 714, 911, 1, 0, 0, 0, 715, 716, 5, 111, 0, 0, 716, 717, 3, 34, 17, 0, 717, 718, 5, 43, 0, 0, 718, 719, 6, 20, -1, 0, 719, 911, 1, 0, 0, 0, 720, 721, 5, 112, 0, 0, 721, 722, 3, 34, 17, 0, 722, 723, 5, 43, 0, 0, 723, 724, 6, 20, -1, 0, 724, 911, 1, 0, 0, 0, 725, 726, 5, 113, 0, 0, 726, 727, 3, 34, 17, 0, 727, 728, 5, 43, 0, 0, 728, 729, 6, 20, -1, 0, 729, 911, 1, 0, 0, 0, 730, 731, 5, 114, 0, 0, 731, 732, 3, 34, 17, 0, 732, 733, 5, 43, 0, 0, 733, 734, 6, 20, -1, 0, 734, 911, 1, 0, 0, 0, 735, 736, 5, 115, 0, 0, 736, 737, 3, 34, 17, 0, 737, 738, 5, 43, 0, 0, 738, 739, 6, 20, -1, 0, 739, 911, 1, 0, 0, 0, 740, 741, 5, 116, 0, 0, 741, 742, 3, 34, 17, 0, 742, 743, 5, 43, 0, 0, 743, 744, 6, 20, -1, 0, 744, 911, 1, 0, 0, 0, 745, 746, 5, 117, 0, 0, 746, 747, 3, 34, 17, 0, 747, 748, 5, 43, 0, 0, 748, 749, 6, 20, -1, 0, 749, 911, 1, 0, 0, 0, 750, 751, 5, 118, 0, 0, 751, 752, 3, 34, 17, 0, 752, 753, 5, 43, 0, 0, 753, 754, 6, 20, -1, 0, 754, 911, 1, 0, 0, 0, 755, 756, 5, 119, 0, 0, 756, 757, 3, 34, 17, 0, 757, 758, 5, 43, 0, 0, 758, 759, 6, 20, -1, 0, 759, 911, 1, 0, 0, 0, 760, 761, 5, 120, 0, 0, 761, 762, 3, 34, 17, 0, 762, 763, 5, 43, 0, 0, 763, 764, 6, 20, -1, 0, 764, 911, 1, 0, 0, 0, 765, 766, 5, 121, 0, 0, 766, 767, 3, 34, 17, 0, 767, 768, 5, 43, 0, 0, 768, 769, 6, 20, -1, 0, 769, 911, 1, 0, 0, 0, 770, 771, 5, 122, 0, 0, 771, 772, 3, 34, 17, 0, 772, 773, 5, 43, 0, 0, 773, 774, 6, 20, -1, 0, 774, 911, 1, 0, 0, 0, 775, 776, 5, 123, 0, 0, 776, 777, 3, 34, 17, 0, 777, 778, 5, 43, 0, 0, 778, 779, 6, 20, -1, 0, 779, 911, 1, 0, 0, 0, 780, 781, 5, 124, 0, 0, 781, 782, 3, 34, 17, 0, 782, 783, 5, 43, 0, 0, 783, 784, 6, 20, -1, 0, 784, 911, 1, 0, 0, 0, 785, 786, 5, 125, 0, 0, 786, 787, 3, 34, 17, 0, 787, 788, 5, 43, 0, 0, 788, 789, 6, 20, -1, 0, 789, 911, 1, 0, 0, 0, 790, 791, 5, 126, 0, 0, 791, 792, 3, 34, 17, 0, 792, 793, 5, 43, 0, 0, 793, 794, 6, 20, -1, 0, 794, 911, 1, 0, 0, 0, 795, 796, 5, 127, 0, 0, 796, 797, 3, 34, 17, 0, 797, 798, 5, 43, 0, 0, 798, 799, 6, 20, -1, 0, 799, 911, 1, 0, 0, 0, 800, 801, 5, 128, 0, 0, 801, 802, 3, 34, 17, 0, 802, 803, 5, 43, 0, 0, 803, 804, 6, 20, -1, 0, 804, 911, 1, 0, 0, 0, 805, 806, 5, 129, 0, 0, 806, 807, 3, 34, 17, 0, 807, 808, 5, 43, 0, 0, 808, 809, 6, 20, -1, 0, 809, 911, 1, 0, 0, 0, 810, 811, 5, 130, 0, 0, 811, 812, 3, 34, 17, 0, 812, 813, 5, 43, 0, 0, 813, 814, 6, 20, -1, 0, 814, 911, 1, 0, 0, 0, 815, 816, 5, 131, 0, 0, 816, 817, 3, 34, 17, 0, 817, 818, 5, 43, 0, 0, 818, 819, 6, 20, -1, 0, 819, 911, 1, 0, 0, 0, 820, 821, 5, 132, 0, 0, 821, 822, 3, 34, 17, 0, 822, 823, 5, 43, 0, 0, 823, 824, 6, 20, -1, 0, 824, 911, 1, 0, 0, 0, 825, 826, 5, 133, 0, 0, 826, 827, 3, 34, 17, 0, 827, 828, 5, 43, 0, 0, 828, 829, 6, 20, -1, 0, 829, 911, 1, 0, 0, 0, 830, 831, 5, 134, 0, 0, 831, 832, 3, 34, 17, 0, 832, 833, 5, 43, 0, 0, 833, 834, 6, 20, -1, 0, 834, 911, 1, 0, 0, 0, 835, 836, 5, 135, 0, 0, 836, 837, 3, 34, 17, 0, 837, 838, 5, 43, 0, 0, 838, 839, 6, 20, -1, 0, 839, 911, 1, 0, 0, 0, 840, 841, 5, 136, 0, 0, 841, 842, 3, 34, 17, 0, 842, 843, 5, 43, 0, 0, 843, 844, 6, 20, -1, 0, 844, 911, 1, 0, 0, 0, 845, 846, 5, 137, 0, 0, 846, 847, 3, 34, 17, 0, 847, 848, 5, 43, 0, 0, 848, 849, 6, 20, -1, 0, 849, 911, 1, 0, 0, 0, 850, 851, 5, 138, 0, 0, 851, 852, 3, 34, 17, 0, 852, 853, 5, 43, 0, 0, 853, 854, 6, 20, -1, 0, 854, 911, 1, 0, 0, 0, 855, 856, 5, 139, 0, 0, 856, 857, 3, 34, 17, 0, 857, 858, 5, 43, 0, 0, 858, 859, 6, 20, -1, 0, 859, 911, 1, 0, 0, 0, 860, 861, 5, 140, 0, 0, 861, 862, 3, 34, 17, 0, 862, 863, 5, 43, 0, 0, 863, 864, 6, 20, -1, 0, 864, 911, 1, 0, 0, 0, 865, 866, 5, 141, 0, 0, 866, 867, 3, 34, 17, 0, 867, 868, 5, 43, 0, 0, 868, 869, 6, 20, -1, 0, 869, 911, 1, 0, 0, 0, 870, 871, 5, 142, 0, 0, 871, 872, 3, 34, 17, 0, 872, 873, 5, 43, 0, 0, 873, 874, 6, 20, -1, 0, 874, 911, 1, 0, 0, 0, 875, 876, 5, 143, 0, 0, 876, 877, 3, 34, 17, 0, 877, 878, 5, 43, 0, 0, 878, 879, 6, 20, -1, 0, 879, 911, 1, 0, 0, 0, 880, 881, 5, 144, 0, 0, 881, 882, 3, 34, 17, 0, 882, 883, 5, 43, 0, 0, 883, 884, 6, 20, -1, 0, 884, 911, 1, 0, 0, 0, 885, 886, 5, 145, 0, 0, 886, 887, 3, 34, 17, 0, 887, 888, 5, 43, 0, 0, 888, 889, 6, 20, -1, 0, 889, 911, 1, 0, 0, 0, 890, 891, 5, 146, 0, 0, 891, 892, 3, 34, 17, 0, 892, 893, 5, 43, 0, 0, 893, 894, 6, 20, -1, 0, 894, 911, 1, 0, 0, 0, 895, 896, 5, 147, 0, 0, 896, 897, 3, 34, 17, 0, 897, 898, 5, 43, 0, 0, 898, 899, 6, 20, -1, 0, 899, 911, 1, 0, 0, 0, 900, 901, 5, 148, 0, 0, 901, 902, 3, 34, 17, 0, 902, 903, 5, 43, 0, 0, 903, 904, 6, 20, -1, 0, 904, 911, 1, 0, 0, 0, 905, 906, 5, 149, 0, 0, 906, 907, 3, 34, 17, 0, 907, 908, 5, 43, 0, 0, 908, 909, 6, 20, -1, 0, 909, 911, 1, 0, 0, 0, 910, 326, 1, 0, 0, 0, 910, 328, 1, 0, 0, 0, 910, 330, 1, 0, 0, 0, 910, 332, 1, 0, 0, 0, 910, 334, 1, 0, 0, 0, 910, 336, 1, 0, 0, 0, 910, 338, 1, 0, 0, 0, 910, 340, 1, 0, 0, 0, 910, 345, 1, 0, 0, 0, 910, 350, 1, 0, 0, 0, 910, 355, 1, 0, 0, 0, 910, 360, 1, 0, 0, 0, 910, 365, 1, 0, 0, 0, 910, 370, 1, 0, 0, 0, 910, 375, 1, 0, 0, 0, 910, 380, 1, 0, 0, 0, 910, 385, 1, 0, 0, 0, 910, 390, 1, 0, 0, 0, 910, 395, 1, 0, 0, 0, 910, 400, 1, 0, 0, 0, 910, 405, 1, 0, 0, 0, 910, 410, 1, 0, 0, 0, 910, 415, 1, 0, 0, 0, 910, 420, 1, 0, 0, 0, 910, 425, 1, 0, 0, 0, 910, 430, 1, 0, 0, 0, 910, 435, 1, 0, 0, 0, 910, 440, 1, 0, 0, 0, 910, 445, 1, 0, 0, 0, 910, 450, 1, 0, 0, 0, 910, 455, 1, 0, 0, 0, 910, 460, 1, 0, 0, 0, 910, 465, 1, 0, 0, 0, 910, 470, 1, 0, 0, 0, 910, 475, 1, 0, 0, 0, 910, 480, 1, 0, 0, 0, 910, 485, 1, 0, 0, 0, 910, 490, 1, 0, 0, 0, 910, 495, 1, 0, 0, 0, 910, 500, 1, 0, 0, 0, 910, 505, 1, 0, 0, 0, 910, 510, 1, 0, 0, 0, 910, 515, 1, 0, 0, 0, 910, 520, 1, 0, 0, 0, 910, 525, 1, 0, 0, 0, 910, 530, 1, 0, 0, 0, 910, 535, 1, 0, 0, 0, 910, 540, 1, 0, 0, 0, 910, 545, 1, 0, 0, 0, 910, 550, 1, 0, 0, 0, 910, 555, 1, 0, 0, 0, 910, 560, 1, 0, 0, 0, 910, 565, 1, 0, 0, 0, 910, 570, 1, 0, 0, 0, 910, 575, 1, 0, 0, 0, 910, 580, 1, 0, 0, 0, 910, 585, 1, 0, 0, 0, 910, 590, 1, 0, 0, 0, 910, 595, 1, 0, 0, 0, 910, 600, 1, 0, 0, 0, 910, 605, 1, 0, 0, 0, 910, 610, 1, 0, 0, 0, 910, 615, 1, 0, 0, 0, 910, 620, 1, 0, 0, 0, 910, 625, 1, 0, 0, 0, 910, 630, 1, 0, 0, 0, 910, 635, 1, 0, 0, 0, 910, 640, 1, 0, 0, 0, 910, 645, 1, 0, 0, 0, 910, 650, 1, 0, 0, 0, 910, 655, 1, 0, 0, 0, 910, 660, 1, 0, 0, 0, 910, 665, 1, 0, 0, 0, 910, 670, 1, 0, 0, 0, 910, 675, 1, 0, 0, 0, 910, 680, 1, 0, 0, 0, 910, 685, 1, 0, 0, 0, 910, 690, 1, 0, 0, 0, 910, 695, 1, 0, 0, 0, 910, 700, 1, 0, 0, 0, 910, 705, 1, 0, 0, 0, 910, 710, 1, 0, 0, 0, 910, 715, 1, 0, 0, 0, 910, 720, 1, 0, 0, 0, 910, 725, 1, 0, 0, 0, 910, 730, 1, 0, 0, 0, 910, 735, 1, 0, 0, 0, 910, 740, 1, 0, 0, 0, 910, 745, 1, 0, 0, 0, 910, 750, 1, 0, 0, 0, 910, 755, 1, 0, 0, 0, 910, 760, 1, 0, 0, 0, 910, 765, 1, 0, 0, 0, 910, 770, 1, 0, 0, 0, 910, 775, 1, 0, 0, 0, 910, 780, 1, 0, 0, 0, 910, 785, 1, 0, 0, 0, 910, 790, 1, 0, 0, 0, 910, 795, 1, 0, 0, 0, 910, 800, 1, 0, 0, 0, 910, 805, 1, 0, 0, 0, 910, 810, 1, 0, 0, 0, 910, 815, 1, 0, 0, 0, 910, 820, 1, 0, 0, 0, 910, 825, 1, 0, 0, 0, 910, 830, 1, 0, 0, 0, 910, 835, 1, 0, 0, 0, 910, 840, 1, 0, 0, 0, 910, 845, 1, 0, 0, 0, 910, 850, 1, 0, 0, 0, 910, 855, 1, 0, 0, 0, 910, 860, 1, 0, 0, 0, 910, 865, 1, 0, 0, 0, 910, 870, 1, 0, 0, 0, 910, 875, 1, 0, 0, 0, 910, 880, 1, 0, 0, 0, 910, 885, 1, 0, 0, 0, 910, 890, 1, 0, 0, 0, 910, 895, 1, 0, 0, 0, 910, 900, 1, 0, 0, 0, 910, 905, 1, 0, 0, 0, 911, 41, 1, 0, 0, 0, 912, 913, 3, 32, 16, 0, 913, 914, 5, 0, 0, 1, 914, 915, 6, 21, -1, 0, 915, 43, 1, 0, 0, 0, 33, 51, 59, 67, 69, 76, 86, 96, 101, 117, 119, 132, 134, 147, 149, 170, 172, 185, 187, 204, 211, 227, 239, 241, 252, 265, 267, 280, 282, 291, 299, 309, 312, 910]
\ No newline at end of file
diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens b/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens
index eb0affa31..1b90b5ff7 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens
@@ -145,14 +145,16 @@ T__143=144
T__144=145
T__145=146
T__146=147
-NEWLINE=148
-NUMBER=149
-SPECIALSET=150
-BOOLEAN=151
-NAN=152
-VARIABLE=153
-COMMENT=154
-WS=155
+T__147=148
+T__148=149
+NEWLINE=150
+NUMBER=151
+SPECIALSET=152
+BOOLEAN=153
+NAN=154
+VARIABLE=155
+COMMENT=156
+WS=157
'!'=1
'^'=2
'-'=3
@@ -291,13 +293,15 @@ WS=155
'round('=136
'min('=137
'max('=138
-'gcd('=139
-'trunc('=140
-'lcm('=141
-'erf('=142
-'conjugate('=143
-'domain('=144
-'piecewise('=145
-'apply('=146
-'lambda('=147
-'NaN'=152
+'argmax('=139
+'argmin('=140
+'gcd('=141
+'trunc('=142
+'lcm('=143
+'erf('=144
+'conjugate('=145
+'domain('=146
+'piecewise('=147
+'apply('=148
+'lambda('=149
+'NaN'=154
diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs
index b08df7854..db7e92699 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs
@@ -55,8 +55,9 @@ public const int
T__125=126, T__126=127, T__127=128, T__128=129, T__129=130, T__130=131,
T__131=132, T__132=133, T__133=134, T__134=135, T__135=136, T__136=137,
T__137=138, T__138=139, T__139=140, T__140=141, T__141=142, T__142=143,
- T__143=144, T__144=145, T__145=146, T__146=147, NEWLINE=148, NUMBER=149,
- SPECIALSET=150, BOOLEAN=151, NAN=152, VARIABLE=153, COMMENT=154, WS=155;
+ T__143=144, T__144=145, T__145=146, T__146=147, T__147=148, T__148=149,
+ NEWLINE=150, NUMBER=151, SPECIALSET=152, BOOLEAN=153, NAN=154, VARIABLE=155,
+ COMMENT=156, WS=157;
public static string[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
@@ -85,8 +86,8 @@ public const int
"T__126", "T__127", "T__128", "T__129", "T__130", "T__131", "T__132",
"T__133", "T__134", "T__135", "T__136", "T__137", "T__138", "T__139",
"T__140", "T__141", "T__142", "T__143", "T__144", "T__145", "T__146",
- "NEWLINE", "EXPONENT", "NUMBER", "SPECIALSET", "BOOLEAN", "NAN", "VARIABLE",
- "COMMENT", "WS"
+ "T__147", "T__148", "NEWLINE", "EXPONENT", "NUMBER", "SPECIALSET", "BOOLEAN",
+ "NAN", "VARIABLE", "COMMENT", "WS"
};
@@ -127,8 +128,9 @@ public AngouriMathLexer(ICharStream input, TextWriter output, TextWriter errorOu
"'gamma('", "'derivative('", "'integral('", "'limit('", "'limitleft('",
"'limitright('", "'sum('", "'product('", "'signum('", "'sgn('", "'sign('",
"'abs('", "'phi('", "'floor('", "'ceil('", "'ceiling('", "'round('", "'min('",
- "'max('", "'gcd('", "'trunc('", "'lcm('", "'erf('", "'conjugate('", "'domain('",
- "'piecewise('", "'apply('", "'lambda('", null, null, null, null, "'NaN'"
+ "'max('", "'argmax('", "'argmin('", "'gcd('", "'trunc('", "'lcm('", "'erf('",
+ "'conjugate('", "'domain('", "'piecewise('", "'apply('", "'lambda('",
+ null, null, null, null, "'NaN'"
};
private static readonly string[] _SymbolicNames = {
null, null, null, null, null, null, null, null, null, null, null, null,
@@ -143,8 +145,8 @@ public AngouriMathLexer(ICharStream input, TextWriter output, TextWriter errorOu
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, "NEWLINE", "NUMBER", "SPECIALSET", "BOOLEAN",
- "NAN", "VARIABLE", "COMMENT", "WS"
+ null, null, null, null, null, null, "NEWLINE", "NUMBER", "SPECIALSET",
+ "BOOLEAN", "NAN", "VARIABLE", "COMMENT", "WS"
};
public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames);
@@ -174,7 +176,7 @@ static AngouriMathLexer() {
}
}
private static int[] _serializedATN = {
- 4,0,155,1332,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,
+ 4,0,157,1352,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,
7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,
14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,
21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,
@@ -197,435 +199,442 @@ static AngouriMathLexer() {
7,134,2,135,7,135,2,136,7,136,2,137,7,137,2,138,7,138,2,139,7,139,2,140,
7,140,2,141,7,141,2,142,7,142,2,143,7,143,2,144,7,144,2,145,7,145,2,146,
7,146,2,147,7,147,2,148,7,148,2,149,7,149,2,150,7,150,2,151,7,151,2,152,
- 7,152,2,153,7,153,2,154,7,154,2,155,7,155,1,0,1,0,1,1,1,1,1,2,1,2,1,3,
- 1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,
- 7,1,7,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,11,1,11,1,11,
- 1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,13,1,13,1,13,
- 1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,16,1,16,1,16,
- 1,17,1,17,1,18,1,18,1,19,1,19,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,22,
- 1,22,1,22,1,22,1,23,1,23,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,26,1,26,
- 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,29,1,29,1,29,
- 1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,31,1,31,1,32,1,32,1,33,
- 1,33,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,37,1,37,
- 1,37,1,38,1,38,1,39,1,39,1,39,1,40,1,40,1,41,1,41,1,42,1,42,1,43,1,43,
- 1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,
- 1,47,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,
- 1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,51,1,51,
- 1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,54,
- 1,55,1,55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,
- 1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,60,
- 1,60,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,
- 1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,64,
- 1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,
- 1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,
- 1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,
- 1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,71,
- 1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73,
- 1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,
- 1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,
- 1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1,79,
- 1,79,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,82,1,82,1,82,
- 1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,
- 1,84,1,85,1,85,1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,87,1,87,
- 1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,89,1,89,1,89,1,89,1,89,
- 1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,91,1,91,1,91,
- 1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,
- 1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,
- 1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,97,1,97,
- 1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,99,
- 1,99,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,100,1,100,
- 1,100,1,101,1,101,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,
- 1,102,1,102,1,102,1,102,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,104,
- 1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105,1,105,1,105,
- 1,105,1,105,1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,
- 1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,108,
- 1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109,1,109,
- 1,109,1,109,1,109,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,111,
- 1,111,1,111,1,111,1,111,1,111,1,111,1,112,1,112,1,112,1,112,1,112,1,112,
- 1,112,1,112,1,112,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,
- 1,114,1,114,1,114,1,114,1,114,1,114,1,114,1,114,1,114,1,114,1,115,1,115,
- 1,115,1,115,1,115,1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,116,1,116,
- 1,116,1,116,1,116,1,116,1,116,1,117,1,117,1,117,1,117,1,117,1,117,1,117,
- 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,119,
- 1,119,1,119,1,119,1,119,1,119,1,119,1,120,1,120,1,120,1,120,1,120,1,120,
- 1,120,1,120,1,120,1,120,1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121,
- 1,121,1,121,1,121,1,121,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,123,
- 1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,124,1,124,
- 1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,125,1,125,
- 1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,
- 1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,128,1,128,1,128,1,128,
- 1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,130,1,130,1,130,1,130,1,130,
- 1,131,1,131,1,131,1,131,1,131,1,132,1,132,1,132,1,132,1,132,1,132,1,132,
- 1,133,1,133,1,133,1,133,1,133,1,133,1,134,1,134,1,134,1,134,1,134,1,134,
- 1,134,1,134,1,134,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,136,1,136,
- 1,136,1,136,1,136,1,137,1,137,1,137,1,137,1,137,1,138,1,138,1,138,1,138,
- 1,138,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,140,1,140,1,140,1,140,
- 1,140,1,141,1,141,1,141,1,141,1,141,1,142,1,142,1,142,1,142,1,142,1,142,
- 1,142,1,142,1,142,1,142,1,142,1,143,1,143,1,143,1,143,1,143,1,143,1,143,
- 1,143,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,
- 1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,146,1,146,1,146,1,146,1,146,
- 1,146,1,146,1,146,1,147,3,147,1194,8,147,1,147,4,147,1197,8,147,11,147,
- 12,147,1198,1,147,1,147,1,148,1,148,3,148,1205,8,148,1,148,4,148,1208,
- 8,148,11,148,12,148,1209,1,149,4,149,1213,8,149,11,149,12,149,1214,1,149,
- 1,149,5,149,1219,8,149,10,149,12,149,1222,9,149,1,149,3,149,1225,8,149,
- 1,149,3,149,1228,8,149,1,149,3,149,1231,8,149,1,149,4,149,1234,8,149,11,
- 149,12,149,1235,1,149,3,149,1239,8,149,1,149,3,149,1242,8,149,1,149,3,
- 149,1245,8,149,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,
- 150,3,150,1257,8,150,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,
- 151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,3,151,1277,8,
- 151,1,152,1,152,1,152,1,152,1,153,4,153,1284,8,153,11,153,12,153,1285,
- 1,153,1,153,4,153,1290,8,153,11,153,12,153,1291,3,153,1294,8,153,1,154,
- 1,154,1,154,1,154,5,154,1300,8,154,10,154,12,154,1303,9,154,1,154,3,154,
- 1306,8,154,1,154,3,154,1309,8,154,1,154,1,154,1,154,1,154,5,154,1315,8,
- 154,10,154,12,154,1318,9,154,1,154,1,154,3,154,1322,8,154,1,154,1,154,
- 1,155,4,155,1327,8,155,11,155,12,155,1328,1,155,1,155,1,1316,0,156,1,1,
- 3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,
- 31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,
- 55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,
- 79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,
- 51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117,59,119,60,121,
- 61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137,69,139,70,141,
- 71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,157,79,159,80,161,
- 81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,89,179,90,181,
- 91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,197,99,199,100,201,
- 101,203,102,205,103,207,104,209,105,211,106,213,107,215,108,217,109,219,
- 110,221,111,223,112,225,113,227,114,229,115,231,116,233,117,235,118,237,
- 119,239,120,241,121,243,122,245,123,247,124,249,125,251,126,253,127,255,
- 128,257,129,259,130,261,131,263,132,265,133,267,134,269,135,271,136,273,
- 137,275,138,277,139,279,140,281,141,283,142,285,143,287,144,289,145,291,
- 146,293,147,295,148,297,0,299,149,301,150,303,151,305,152,307,153,309,
- 154,311,155,1,0,6,2,0,69,69,101,101,2,0,43,43,45,45,4,0,65,90,97,122,880,
- 1279,7936,8191,5,0,48,57,65,90,97,122,880,1279,7936,8191,2,0,10,10,13,
- 13,2,0,9,9,32,32,1360,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,
- 0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,
- 0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,
- 0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,
- 1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,
- 0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,
- 1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,
- 0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,
- 1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,
- 0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,
- 0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,
- 0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,
- 0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,
- 0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,
- 0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,
- 0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0,
- 0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0,0,0,
- 0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0,0,0,
- 0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195,1,0,0,0,
- 0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,
- 0,207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,
- 0,217,1,0,0,0,0,219,1,0,0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,
- 0,227,1,0,0,0,0,229,1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,
- 0,237,1,0,0,0,0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,
- 0,247,1,0,0,0,0,249,1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,
- 0,257,1,0,0,0,0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,
- 0,267,1,0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,
- 0,277,1,0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0,0,0,
- 0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295,1,0,0,0,
- 0,299,1,0,0,0,0,301,1,0,0,0,0,303,1,0,0,0,0,305,1,0,0,0,0,307,1,0,0,0,
- 0,309,1,0,0,0,0,311,1,0,0,0,1,313,1,0,0,0,3,315,1,0,0,0,5,317,1,0,0,0,
- 7,319,1,0,0,0,9,321,1,0,0,0,11,323,1,0,0,0,13,325,1,0,0,0,15,329,1,0,0,
- 0,17,339,1,0,0,0,19,342,1,0,0,0,21,348,1,0,0,0,23,351,1,0,0,0,25,363,1,
- 0,0,0,27,365,1,0,0,0,29,368,1,0,0,0,31,376,1,0,0,0,33,379,1,0,0,0,35,382,
- 1,0,0,0,37,384,1,0,0,0,39,386,1,0,0,0,41,388,1,0,0,0,43,391,1,0,0,0,45,
- 395,1,0,0,0,47,399,1,0,0,0,49,401,1,0,0,0,51,405,1,0,0,0,53,408,1,0,0,
- 0,55,410,1,0,0,0,57,418,1,0,0,0,59,421,1,0,0,0,61,430,1,0,0,0,63,433,1,
- 0,0,0,65,435,1,0,0,0,67,437,1,0,0,0,69,439,1,0,0,0,71,443,1,0,0,0,73,447,
- 1,0,0,0,75,450,1,0,0,0,77,453,1,0,0,0,79,455,1,0,0,0,81,458,1,0,0,0,83,
- 460,1,0,0,0,85,462,1,0,0,0,87,464,1,0,0,0,89,466,1,0,0,0,91,468,1,0,0,
- 0,93,473,1,0,0,0,95,480,1,0,0,0,97,486,1,0,0,0,99,491,1,0,0,0,101,497,
- 1,0,0,0,103,503,1,0,0,0,105,508,1,0,0,0,107,512,1,0,0,0,109,517,1,0,0,
- 0,111,522,1,0,0,0,113,527,1,0,0,0,115,532,1,0,0,0,117,539,1,0,0,0,119,
- 544,1,0,0,0,121,549,1,0,0,0,123,556,1,0,0,0,125,561,1,0,0,0,127,569,1,
- 0,0,0,129,577,1,0,0,0,131,585,1,0,0,0,133,595,1,0,0,0,135,603,1,0,0,0,
- 137,613,1,0,0,0,139,621,1,0,0,0,141,627,1,0,0,0,143,633,1,0,0,0,145,639,
- 1,0,0,0,147,645,1,0,0,0,149,653,1,0,0,0,151,659,1,0,0,0,153,667,1,0,0,
- 0,155,673,1,0,0,0,157,681,1,0,0,0,159,687,1,0,0,0,161,691,1,0,0,0,163,
- 697,1,0,0,0,165,701,1,0,0,0,167,707,1,0,0,0,169,711,1,0,0,0,171,719,1,
- 0,0,0,173,725,1,0,0,0,175,730,1,0,0,0,177,736,1,0,0,0,179,741,1,0,0,0,
- 181,749,1,0,0,0,183,755,1,0,0,0,185,762,1,0,0,0,187,770,1,0,0,0,189,776,
- 1,0,0,0,191,785,1,0,0,0,193,792,1,0,0,0,195,800,1,0,0,0,197,806,1,0,0,
- 0,199,815,1,0,0,0,201,822,1,0,0,0,203,830,1,0,0,0,205,836,1,0,0,0,207,
- 845,1,0,0,0,209,852,1,0,0,0,211,860,1,0,0,0,213,869,1,0,0,0,215,879,1,
- 0,0,0,217,886,1,0,0,0,219,897,1,0,0,0,221,904,1,0,0,0,223,912,1,0,0,0,
- 225,919,1,0,0,0,227,928,1,0,0,0,229,937,1,0,0,0,231,947,1,0,0,0,233,955,
- 1,0,0,0,235,966,1,0,0,0,237,973,1,0,0,0,239,984,1,0,0,0,241,991,1,0,0,
- 0,243,1003,1,0,0,0,245,1013,1,0,0,0,247,1020,1,0,0,0,249,1031,1,0,0,0,
- 251,1043,1,0,0,0,253,1048,1,0,0,0,255,1057,1,0,0,0,257,1065,1,0,0,0,259,
- 1070,1,0,0,0,261,1076,1,0,0,0,263,1081,1,0,0,0,265,1086,1,0,0,0,267,1093,
- 1,0,0,0,269,1099,1,0,0,0,271,1108,1,0,0,0,273,1115,1,0,0,0,275,1120,1,
- 0,0,0,277,1125,1,0,0,0,279,1130,1,0,0,0,281,1137,1,0,0,0,283,1142,1,0,
- 0,0,285,1147,1,0,0,0,287,1158,1,0,0,0,289,1166,1,0,0,0,291,1177,1,0,0,
- 0,293,1184,1,0,0,0,295,1196,1,0,0,0,297,1202,1,0,0,0,299,1244,1,0,0,0,
- 301,1256,1,0,0,0,303,1276,1,0,0,0,305,1278,1,0,0,0,307,1283,1,0,0,0,309,
- 1321,1,0,0,0,311,1326,1,0,0,0,313,314,5,33,0,0,314,2,1,0,0,0,315,316,5,
- 94,0,0,316,4,1,0,0,0,317,318,5,45,0,0,318,6,1,0,0,0,319,320,5,43,0,0,320,
- 8,1,0,0,0,321,322,5,42,0,0,322,10,1,0,0,0,323,324,5,47,0,0,324,12,1,0,
- 0,0,325,326,5,109,0,0,326,327,5,111,0,0,327,328,5,100,0,0,328,14,1,0,0,
- 0,329,330,5,105,0,0,330,331,5,110,0,0,331,332,5,116,0,0,332,333,5,101,
- 0,0,333,334,5,114,0,0,334,335,5,115,0,0,335,336,5,101,0,0,336,337,5,99,
- 0,0,337,338,5,116,0,0,338,16,1,0,0,0,339,340,5,47,0,0,340,341,5,92,0,0,
- 341,18,1,0,0,0,342,343,5,117,0,0,343,344,5,110,0,0,344,345,5,105,0,0,345,
- 346,5,116,0,0,346,347,5,101,0,0,347,20,1,0,0,0,348,349,5,92,0,0,349,350,
- 5,47,0,0,350,22,1,0,0,0,351,352,5,115,0,0,352,353,5,101,0,0,353,354,5,
- 116,0,0,354,355,5,115,0,0,355,356,5,117,0,0,356,357,5,98,0,0,357,358,5,
- 116,0,0,358,359,5,114,0,0,359,360,5,97,0,0,360,361,5,99,0,0,361,362,5,
- 116,0,0,362,24,1,0,0,0,363,364,5,92,0,0,364,26,1,0,0,0,365,366,5,105,0,
- 0,366,367,5,110,0,0,367,28,1,0,0,0,368,369,5,100,0,0,369,370,5,105,0,0,
- 370,371,5,118,0,0,371,372,5,105,0,0,372,373,5,100,0,0,373,374,5,101,0,
- 0,374,375,5,115,0,0,375,30,1,0,0,0,376,377,5,62,0,0,377,378,5,61,0,0,378,
- 32,1,0,0,0,379,380,5,60,0,0,380,381,5,61,0,0,381,34,1,0,0,0,382,383,5,
- 62,0,0,383,36,1,0,0,0,384,385,5,60,0,0,385,38,1,0,0,0,386,387,5,61,0,0,
- 387,40,1,0,0,0,388,389,5,60,0,0,389,390,5,62,0,0,390,42,1,0,0,0,391,392,
- 5,110,0,0,392,393,5,111,0,0,393,394,5,116,0,0,394,44,1,0,0,0,395,396,5,
- 97,0,0,396,397,5,110,0,0,397,398,5,100,0,0,398,46,1,0,0,0,399,400,5,38,
- 0,0,400,48,1,0,0,0,401,402,5,120,0,0,402,403,5,111,0,0,403,404,5,114,0,
- 0,404,50,1,0,0,0,405,406,5,111,0,0,406,407,5,114,0,0,407,52,1,0,0,0,408,
- 409,5,124,0,0,409,54,1,0,0,0,410,411,5,105,0,0,411,412,5,109,0,0,412,413,
- 5,112,0,0,413,414,5,108,0,0,414,415,5,105,0,0,415,416,5,101,0,0,416,417,
- 5,115,0,0,417,56,1,0,0,0,418,419,5,45,0,0,419,420,5,62,0,0,420,58,1,0,
- 0,0,421,422,5,112,0,0,422,423,5,114,0,0,423,424,5,111,0,0,424,425,5,118,
- 0,0,425,426,5,105,0,0,426,427,5,100,0,0,427,428,5,101,0,0,428,429,5,100,
- 0,0,429,60,1,0,0,0,430,431,5,61,0,0,431,432,5,62,0,0,432,62,1,0,0,0,433,
- 434,5,44,0,0,434,64,1,0,0,0,435,436,5,59,0,0,436,66,1,0,0,0,437,438,5,
- 58,0,0,438,68,1,0,0,0,439,440,5,43,0,0,440,441,5,111,0,0,441,442,5,111,
- 0,0,442,70,1,0,0,0,443,444,5,45,0,0,444,445,5,111,0,0,445,446,5,111,0,
- 0,446,72,1,0,0,0,447,448,5,40,0,0,448,449,5,124,0,0,449,74,1,0,0,0,450,
- 451,5,124,0,0,451,452,5,41,0,0,452,76,1,0,0,0,453,454,5,91,0,0,454,78,
- 1,0,0,0,455,456,5,93,0,0,456,457,5,84,0,0,457,80,1,0,0,0,458,459,5,93,
- 0,0,459,82,1,0,0,0,460,461,5,40,0,0,461,84,1,0,0,0,462,463,5,41,0,0,463,
- 86,1,0,0,0,464,465,5,123,0,0,465,88,1,0,0,0,466,467,5,125,0,0,467,90,1,
- 0,0,0,468,469,5,108,0,0,469,470,5,111,0,0,470,471,5,103,0,0,471,472,5,
- 40,0,0,472,92,1,0,0,0,473,474,5,108,0,0,474,475,5,111,0,0,475,476,5,103,
- 0,0,476,477,5,49,0,0,477,478,5,48,0,0,478,479,5,40,0,0,479,94,1,0,0,0,
- 480,481,5,108,0,0,481,482,5,111,0,0,482,483,5,103,0,0,483,484,5,50,0,0,
- 484,485,5,40,0,0,485,96,1,0,0,0,486,487,5,112,0,0,487,488,5,111,0,0,488,
- 489,5,119,0,0,489,490,5,40,0,0,490,98,1,0,0,0,491,492,5,115,0,0,492,493,
- 5,113,0,0,493,494,5,114,0,0,494,495,5,116,0,0,495,496,5,40,0,0,496,100,
- 1,0,0,0,497,498,5,99,0,0,498,499,5,98,0,0,499,500,5,114,0,0,500,501,5,
- 116,0,0,501,502,5,40,0,0,502,102,1,0,0,0,503,504,5,115,0,0,504,505,5,113,
- 0,0,505,506,5,114,0,0,506,507,5,40,0,0,507,104,1,0,0,0,508,509,5,108,0,
- 0,509,510,5,110,0,0,510,511,5,40,0,0,511,106,1,0,0,0,512,513,5,101,0,0,
- 513,514,5,120,0,0,514,515,5,112,0,0,515,516,5,40,0,0,516,108,1,0,0,0,517,
- 518,5,115,0,0,518,519,5,105,0,0,519,520,5,110,0,0,520,521,5,40,0,0,521,
- 110,1,0,0,0,522,523,5,99,0,0,523,524,5,111,0,0,524,525,5,115,0,0,525,526,
- 5,40,0,0,526,112,1,0,0,0,527,528,5,116,0,0,528,529,5,97,0,0,529,530,5,
- 110,0,0,530,531,5,40,0,0,531,114,1,0,0,0,532,533,5,99,0,0,533,534,5,111,
- 0,0,534,535,5,116,0,0,535,536,5,97,0,0,536,537,5,110,0,0,537,538,5,40,
- 0,0,538,116,1,0,0,0,539,540,5,99,0,0,540,541,5,111,0,0,541,542,5,116,0,
- 0,542,543,5,40,0,0,543,118,1,0,0,0,544,545,5,115,0,0,545,546,5,101,0,0,
- 546,547,5,99,0,0,547,548,5,40,0,0,548,120,1,0,0,0,549,550,5,99,0,0,550,
- 551,5,111,0,0,551,552,5,115,0,0,552,553,5,101,0,0,553,554,5,99,0,0,554,
- 555,5,40,0,0,555,122,1,0,0,0,556,557,5,99,0,0,557,558,5,115,0,0,558,559,
- 5,99,0,0,559,560,5,40,0,0,560,124,1,0,0,0,561,562,5,97,0,0,562,563,5,114,
- 0,0,563,564,5,99,0,0,564,565,5,115,0,0,565,566,5,105,0,0,566,567,5,110,
- 0,0,567,568,5,40,0,0,568,126,1,0,0,0,569,570,5,97,0,0,570,571,5,114,0,
- 0,571,572,5,99,0,0,572,573,5,99,0,0,573,574,5,111,0,0,574,575,5,115,0,
- 0,575,576,5,40,0,0,576,128,1,0,0,0,577,578,5,97,0,0,578,579,5,114,0,0,
- 579,580,5,99,0,0,580,581,5,116,0,0,581,582,5,97,0,0,582,583,5,110,0,0,
- 583,584,5,40,0,0,584,130,1,0,0,0,585,586,5,97,0,0,586,587,5,114,0,0,587,
- 588,5,99,0,0,588,589,5,99,0,0,589,590,5,111,0,0,590,591,5,116,0,0,591,
- 592,5,97,0,0,592,593,5,110,0,0,593,594,5,40,0,0,594,132,1,0,0,0,595,596,
- 5,97,0,0,596,597,5,114,0,0,597,598,5,99,0,0,598,599,5,115,0,0,599,600,
- 5,101,0,0,600,601,5,99,0,0,601,602,5,40,0,0,602,134,1,0,0,0,603,604,5,
- 97,0,0,604,605,5,114,0,0,605,606,5,99,0,0,606,607,5,99,0,0,607,608,5,111,
- 0,0,608,609,5,115,0,0,609,610,5,101,0,0,610,611,5,99,0,0,611,612,5,40,
- 0,0,612,136,1,0,0,0,613,614,5,97,0,0,614,615,5,114,0,0,615,616,5,99,0,
- 0,616,617,5,99,0,0,617,618,5,115,0,0,618,619,5,99,0,0,619,620,5,40,0,0,
- 620,138,1,0,0,0,621,622,5,97,0,0,622,623,5,99,0,0,623,624,5,115,0,0,624,
- 625,5,99,0,0,625,626,5,40,0,0,626,140,1,0,0,0,627,628,5,97,0,0,628,629,
- 5,115,0,0,629,630,5,105,0,0,630,631,5,110,0,0,631,632,5,40,0,0,632,142,
- 1,0,0,0,633,634,5,97,0,0,634,635,5,99,0,0,635,636,5,111,0,0,636,637,5,
- 115,0,0,637,638,5,40,0,0,638,144,1,0,0,0,639,640,5,97,0,0,640,641,5,116,
- 0,0,641,642,5,97,0,0,642,643,5,110,0,0,643,644,5,40,0,0,644,146,1,0,0,
- 0,645,646,5,97,0,0,646,647,5,99,0,0,647,648,5,111,0,0,648,649,5,116,0,
- 0,649,650,5,97,0,0,650,651,5,110,0,0,651,652,5,40,0,0,652,148,1,0,0,0,
- 653,654,5,97,0,0,654,655,5,115,0,0,655,656,5,101,0,0,656,657,5,99,0,0,
- 657,658,5,40,0,0,658,150,1,0,0,0,659,660,5,97,0,0,660,661,5,99,0,0,661,
- 662,5,111,0,0,662,663,5,115,0,0,663,664,5,101,0,0,664,665,5,99,0,0,665,
- 666,5,40,0,0,666,152,1,0,0,0,667,668,5,97,0,0,668,669,5,99,0,0,669,670,
- 5,111,0,0,670,671,5,116,0,0,671,672,5,40,0,0,672,154,1,0,0,0,673,674,5,
- 97,0,0,674,675,5,114,0,0,675,676,5,99,0,0,676,677,5,99,0,0,677,678,5,111,
- 0,0,678,679,5,116,0,0,679,680,5,40,0,0,680,156,1,0,0,0,681,682,5,115,0,
- 0,682,683,5,105,0,0,683,684,5,110,0,0,684,685,5,104,0,0,685,686,5,40,0,
- 0,686,158,1,0,0,0,687,688,5,115,0,0,688,689,5,104,0,0,689,690,5,40,0,0,
- 690,160,1,0,0,0,691,692,5,99,0,0,692,693,5,111,0,0,693,694,5,115,0,0,694,
- 695,5,104,0,0,695,696,5,40,0,0,696,162,1,0,0,0,697,698,5,99,0,0,698,699,
- 5,104,0,0,699,700,5,40,0,0,700,164,1,0,0,0,701,702,5,116,0,0,702,703,5,
- 97,0,0,703,704,5,110,0,0,704,705,5,104,0,0,705,706,5,40,0,0,706,166,1,
- 0,0,0,707,708,5,116,0,0,708,709,5,104,0,0,709,710,5,40,0,0,710,168,1,0,
- 0,0,711,712,5,99,0,0,712,713,5,111,0,0,713,714,5,116,0,0,714,715,5,97,
- 0,0,715,716,5,110,0,0,716,717,5,104,0,0,717,718,5,40,0,0,718,170,1,0,0,
- 0,719,720,5,99,0,0,720,721,5,111,0,0,721,722,5,116,0,0,722,723,5,104,0,
- 0,723,724,5,40,0,0,724,172,1,0,0,0,725,726,5,99,0,0,726,727,5,116,0,0,
- 727,728,5,104,0,0,728,729,5,40,0,0,729,174,1,0,0,0,730,731,5,115,0,0,731,
- 732,5,101,0,0,732,733,5,99,0,0,733,734,5,104,0,0,734,735,5,40,0,0,735,
- 176,1,0,0,0,736,737,5,115,0,0,737,738,5,99,0,0,738,739,5,104,0,0,739,740,
- 5,40,0,0,740,178,1,0,0,0,741,742,5,99,0,0,742,743,5,111,0,0,743,744,5,
- 115,0,0,744,745,5,101,0,0,745,746,5,99,0,0,746,747,5,104,0,0,747,748,5,
- 40,0,0,748,180,1,0,0,0,749,750,5,99,0,0,750,751,5,115,0,0,751,752,5,99,
- 0,0,752,753,5,104,0,0,753,754,5,40,0,0,754,182,1,0,0,0,755,756,5,97,0,
- 0,756,757,5,115,0,0,757,758,5,105,0,0,758,759,5,110,0,0,759,760,5,104,
- 0,0,760,761,5,40,0,0,761,184,1,0,0,0,762,763,5,97,0,0,763,764,5,114,0,
- 0,764,765,5,115,0,0,765,766,5,105,0,0,766,767,5,110,0,0,767,768,5,104,
- 0,0,768,769,5,40,0,0,769,186,1,0,0,0,770,771,5,97,0,0,771,772,5,114,0,
- 0,772,773,5,115,0,0,773,774,5,104,0,0,774,775,5,40,0,0,775,188,1,0,0,0,
- 776,777,5,97,0,0,777,778,5,114,0,0,778,779,5,99,0,0,779,780,5,115,0,0,
- 780,781,5,105,0,0,781,782,5,110,0,0,782,783,5,104,0,0,783,784,5,40,0,0,
- 784,190,1,0,0,0,785,786,5,97,0,0,786,787,5,99,0,0,787,788,5,111,0,0,788,
- 789,5,115,0,0,789,790,5,104,0,0,790,791,5,40,0,0,791,192,1,0,0,0,792,793,
- 5,97,0,0,793,794,5,114,0,0,794,795,5,99,0,0,795,796,5,111,0,0,796,797,
- 5,115,0,0,797,798,5,104,0,0,798,799,5,40,0,0,799,194,1,0,0,0,800,801,5,
- 97,0,0,801,802,5,114,0,0,802,803,5,99,0,0,803,804,5,104,0,0,804,805,5,
- 40,0,0,805,196,1,0,0,0,806,807,5,97,0,0,807,808,5,114,0,0,808,809,5,99,
- 0,0,809,810,5,99,0,0,810,811,5,111,0,0,811,812,5,115,0,0,812,813,5,104,
- 0,0,813,814,5,40,0,0,814,198,1,0,0,0,815,816,5,97,0,0,816,817,5,116,0,
- 0,817,818,5,97,0,0,818,819,5,110,0,0,819,820,5,104,0,0,820,821,5,40,0,
- 0,821,200,1,0,0,0,822,823,5,97,0,0,823,824,5,114,0,0,824,825,5,116,0,0,
- 825,826,5,97,0,0,826,827,5,110,0,0,827,828,5,104,0,0,828,829,5,40,0,0,
- 829,202,1,0,0,0,830,831,5,97,0,0,831,832,5,114,0,0,832,833,5,116,0,0,833,
- 834,5,104,0,0,834,835,5,40,0,0,835,204,1,0,0,0,836,837,5,97,0,0,837,838,
- 5,114,0,0,838,839,5,99,0,0,839,840,5,116,0,0,840,841,5,97,0,0,841,842,
- 5,110,0,0,842,843,5,104,0,0,843,844,5,40,0,0,844,206,1,0,0,0,845,846,5,
- 97,0,0,846,847,5,99,0,0,847,848,5,111,0,0,848,849,5,116,0,0,849,850,5,
- 104,0,0,850,851,5,40,0,0,851,208,1,0,0,0,852,853,5,97,0,0,853,854,5,114,
- 0,0,854,855,5,99,0,0,855,856,5,111,0,0,856,857,5,116,0,0,857,858,5,104,
- 0,0,858,859,5,40,0,0,859,210,1,0,0,0,860,861,5,97,0,0,861,862,5,99,0,0,
- 862,863,5,111,0,0,863,864,5,116,0,0,864,865,5,97,0,0,865,866,5,110,0,0,
- 866,867,5,104,0,0,867,868,5,40,0,0,868,212,1,0,0,0,869,870,5,97,0,0,870,
- 871,5,114,0,0,871,872,5,99,0,0,872,873,5,111,0,0,873,874,5,116,0,0,874,
- 875,5,97,0,0,875,876,5,110,0,0,876,877,5,104,0,0,877,878,5,40,0,0,878,
- 214,1,0,0,0,879,880,5,97,0,0,880,881,5,114,0,0,881,882,5,99,0,0,882,883,
- 5,116,0,0,883,884,5,104,0,0,884,885,5,40,0,0,885,216,1,0,0,0,886,887,5,
- 97,0,0,887,888,5,114,0,0,888,889,5,99,0,0,889,890,5,99,0,0,890,891,5,111,
- 0,0,891,892,5,116,0,0,892,893,5,97,0,0,893,894,5,110,0,0,894,895,5,104,
- 0,0,895,896,5,40,0,0,896,218,1,0,0,0,897,898,5,97,0,0,898,899,5,115,0,
- 0,899,900,5,101,0,0,900,901,5,99,0,0,901,902,5,104,0,0,902,903,5,40,0,
- 0,903,220,1,0,0,0,904,905,5,97,0,0,905,906,5,114,0,0,906,907,5,115,0,0,
- 907,908,5,101,0,0,908,909,5,99,0,0,909,910,5,104,0,0,910,911,5,40,0,0,
- 911,222,1,0,0,0,912,913,5,97,0,0,913,914,5,114,0,0,914,915,5,115,0,0,915,
- 916,5,99,0,0,916,917,5,104,0,0,917,918,5,40,0,0,918,224,1,0,0,0,919,920,
- 5,97,0,0,920,921,5,114,0,0,921,922,5,99,0,0,922,923,5,115,0,0,923,924,
- 5,101,0,0,924,925,5,99,0,0,925,926,5,104,0,0,926,927,5,40,0,0,927,226,
- 1,0,0,0,928,929,5,97,0,0,929,930,5,99,0,0,930,931,5,111,0,0,931,932,5,
- 115,0,0,932,933,5,101,0,0,933,934,5,99,0,0,934,935,5,104,0,0,935,936,5,
- 40,0,0,936,228,1,0,0,0,937,938,5,97,0,0,938,939,5,114,0,0,939,940,5,99,
- 0,0,940,941,5,111,0,0,941,942,5,115,0,0,942,943,5,101,0,0,943,944,5,99,
- 0,0,944,945,5,104,0,0,945,946,5,40,0,0,946,230,1,0,0,0,947,948,5,97,0,
- 0,948,949,5,114,0,0,949,950,5,99,0,0,950,951,5,115,0,0,951,952,5,99,0,
- 0,952,953,5,104,0,0,953,954,5,40,0,0,954,232,1,0,0,0,955,956,5,97,0,0,
- 956,957,5,114,0,0,957,958,5,99,0,0,958,959,5,99,0,0,959,960,5,111,0,0,
- 960,961,5,115,0,0,961,962,5,101,0,0,962,963,5,99,0,0,963,964,5,104,0,0,
- 964,965,5,40,0,0,965,234,1,0,0,0,966,967,5,97,0,0,967,968,5,99,0,0,968,
- 969,5,115,0,0,969,970,5,99,0,0,970,971,5,104,0,0,971,972,5,40,0,0,972,
- 236,1,0,0,0,973,974,5,102,0,0,974,975,5,97,0,0,975,976,5,99,0,0,976,977,
- 5,116,0,0,977,978,5,111,0,0,978,979,5,114,0,0,979,980,5,105,0,0,980,981,
- 5,97,0,0,981,982,5,108,0,0,982,983,5,40,0,0,983,238,1,0,0,0,984,985,5,
- 103,0,0,985,986,5,97,0,0,986,987,5,109,0,0,987,988,5,109,0,0,988,989,5,
- 97,0,0,989,990,5,40,0,0,990,240,1,0,0,0,991,992,5,100,0,0,992,993,5,101,
- 0,0,993,994,5,114,0,0,994,995,5,105,0,0,995,996,5,118,0,0,996,997,5,97,
- 0,0,997,998,5,116,0,0,998,999,5,105,0,0,999,1000,5,118,0,0,1000,1001,5,
- 101,0,0,1001,1002,5,40,0,0,1002,242,1,0,0,0,1003,1004,5,105,0,0,1004,1005,
- 5,110,0,0,1005,1006,5,116,0,0,1006,1007,5,101,0,0,1007,1008,5,103,0,0,
- 1008,1009,5,114,0,0,1009,1010,5,97,0,0,1010,1011,5,108,0,0,1011,1012,5,
- 40,0,0,1012,244,1,0,0,0,1013,1014,5,108,0,0,1014,1015,5,105,0,0,1015,1016,
- 5,109,0,0,1016,1017,5,105,0,0,1017,1018,5,116,0,0,1018,1019,5,40,0,0,1019,
- 246,1,0,0,0,1020,1021,5,108,0,0,1021,1022,5,105,0,0,1022,1023,5,109,0,
- 0,1023,1024,5,105,0,0,1024,1025,5,116,0,0,1025,1026,5,108,0,0,1026,1027,
- 5,101,0,0,1027,1028,5,102,0,0,1028,1029,5,116,0,0,1029,1030,5,40,0,0,1030,
- 248,1,0,0,0,1031,1032,5,108,0,0,1032,1033,5,105,0,0,1033,1034,5,109,0,
- 0,1034,1035,5,105,0,0,1035,1036,5,116,0,0,1036,1037,5,114,0,0,1037,1038,
- 5,105,0,0,1038,1039,5,103,0,0,1039,1040,5,104,0,0,1040,1041,5,116,0,0,
- 1041,1042,5,40,0,0,1042,250,1,0,0,0,1043,1044,5,115,0,0,1044,1045,5,117,
- 0,0,1045,1046,5,109,0,0,1046,1047,5,40,0,0,1047,252,1,0,0,0,1048,1049,
- 5,112,0,0,1049,1050,5,114,0,0,1050,1051,5,111,0,0,1051,1052,5,100,0,0,
- 1052,1053,5,117,0,0,1053,1054,5,99,0,0,1054,1055,5,116,0,0,1055,1056,5,
- 40,0,0,1056,254,1,0,0,0,1057,1058,5,115,0,0,1058,1059,5,105,0,0,1059,1060,
- 5,103,0,0,1060,1061,5,110,0,0,1061,1062,5,117,0,0,1062,1063,5,109,0,0,
- 1063,1064,5,40,0,0,1064,256,1,0,0,0,1065,1066,5,115,0,0,1066,1067,5,103,
- 0,0,1067,1068,5,110,0,0,1068,1069,5,40,0,0,1069,258,1,0,0,0,1070,1071,
- 5,115,0,0,1071,1072,5,105,0,0,1072,1073,5,103,0,0,1073,1074,5,110,0,0,
- 1074,1075,5,40,0,0,1075,260,1,0,0,0,1076,1077,5,97,0,0,1077,1078,5,98,
- 0,0,1078,1079,5,115,0,0,1079,1080,5,40,0,0,1080,262,1,0,0,0,1081,1082,
- 5,112,0,0,1082,1083,5,104,0,0,1083,1084,5,105,0,0,1084,1085,5,40,0,0,1085,
- 264,1,0,0,0,1086,1087,5,102,0,0,1087,1088,5,108,0,0,1088,1089,5,111,0,
- 0,1089,1090,5,111,0,0,1090,1091,5,114,0,0,1091,1092,5,40,0,0,1092,266,
- 1,0,0,0,1093,1094,5,99,0,0,1094,1095,5,101,0,0,1095,1096,5,105,0,0,1096,
- 1097,5,108,0,0,1097,1098,5,40,0,0,1098,268,1,0,0,0,1099,1100,5,99,0,0,
- 1100,1101,5,101,0,0,1101,1102,5,105,0,0,1102,1103,5,108,0,0,1103,1104,
- 5,105,0,0,1104,1105,5,110,0,0,1105,1106,5,103,0,0,1106,1107,5,40,0,0,1107,
- 270,1,0,0,0,1108,1109,5,114,0,0,1109,1110,5,111,0,0,1110,1111,5,117,0,
- 0,1111,1112,5,110,0,0,1112,1113,5,100,0,0,1113,1114,5,40,0,0,1114,272,
- 1,0,0,0,1115,1116,5,109,0,0,1116,1117,5,105,0,0,1117,1118,5,110,0,0,1118,
- 1119,5,40,0,0,1119,274,1,0,0,0,1120,1121,5,109,0,0,1121,1122,5,97,0,0,
- 1122,1123,5,120,0,0,1123,1124,5,40,0,0,1124,276,1,0,0,0,1125,1126,5,103,
- 0,0,1126,1127,5,99,0,0,1127,1128,5,100,0,0,1128,1129,5,40,0,0,1129,278,
- 1,0,0,0,1130,1131,5,116,0,0,1131,1132,5,114,0,0,1132,1133,5,117,0,0,1133,
- 1134,5,110,0,0,1134,1135,5,99,0,0,1135,1136,5,40,0,0,1136,280,1,0,0,0,
- 1137,1138,5,108,0,0,1138,1139,5,99,0,0,1139,1140,5,109,0,0,1140,1141,5,
- 40,0,0,1141,282,1,0,0,0,1142,1143,5,101,0,0,1143,1144,5,114,0,0,1144,1145,
- 5,102,0,0,1145,1146,5,40,0,0,1146,284,1,0,0,0,1147,1148,5,99,0,0,1148,
- 1149,5,111,0,0,1149,1150,5,110,0,0,1150,1151,5,106,0,0,1151,1152,5,117,
- 0,0,1152,1153,5,103,0,0,1153,1154,5,97,0,0,1154,1155,5,116,0,0,1155,1156,
- 5,101,0,0,1156,1157,5,40,0,0,1157,286,1,0,0,0,1158,1159,5,100,0,0,1159,
- 1160,5,111,0,0,1160,1161,5,109,0,0,1161,1162,5,97,0,0,1162,1163,5,105,
- 0,0,1163,1164,5,110,0,0,1164,1165,5,40,0,0,1165,288,1,0,0,0,1166,1167,
- 5,112,0,0,1167,1168,5,105,0,0,1168,1169,5,101,0,0,1169,1170,5,99,0,0,1170,
- 1171,5,101,0,0,1171,1172,5,119,0,0,1172,1173,5,105,0,0,1173,1174,5,115,
- 0,0,1174,1175,5,101,0,0,1175,1176,5,40,0,0,1176,290,1,0,0,0,1177,1178,
- 5,97,0,0,1178,1179,5,112,0,0,1179,1180,5,112,0,0,1180,1181,5,108,0,0,1181,
- 1182,5,121,0,0,1182,1183,5,40,0,0,1183,292,1,0,0,0,1184,1185,5,108,0,0,
- 1185,1186,5,97,0,0,1186,1187,5,109,0,0,1187,1188,5,98,0,0,1188,1189,5,
- 100,0,0,1189,1190,5,97,0,0,1190,1191,5,40,0,0,1191,294,1,0,0,0,1192,1194,
- 5,13,0,0,1193,1192,1,0,0,0,1193,1194,1,0,0,0,1194,1195,1,0,0,0,1195,1197,
- 5,10,0,0,1196,1193,1,0,0,0,1197,1198,1,0,0,0,1198,1196,1,0,0,0,1198,1199,
- 1,0,0,0,1199,1200,1,0,0,0,1200,1201,6,147,0,0,1201,296,1,0,0,0,1202,1204,
- 7,0,0,0,1203,1205,7,1,0,0,1204,1203,1,0,0,0,1204,1205,1,0,0,0,1205,1207,
- 1,0,0,0,1206,1208,2,48,57,0,1207,1206,1,0,0,0,1208,1209,1,0,0,0,1209,1207,
- 1,0,0,0,1209,1210,1,0,0,0,1210,298,1,0,0,0,1211,1213,2,48,57,0,1212,1211,
- 1,0,0,0,1213,1214,1,0,0,0,1214,1212,1,0,0,0,1214,1215,1,0,0,0,1215,1216,
- 1,0,0,0,1216,1220,5,46,0,0,1217,1219,2,48,57,0,1218,1217,1,0,0,0,1219,
- 1222,1,0,0,0,1220,1218,1,0,0,0,1220,1221,1,0,0,0,1221,1224,1,0,0,0,1222,
- 1220,1,0,0,0,1223,1225,3,297,148,0,1224,1223,1,0,0,0,1224,1225,1,0,0,0,
- 1225,1227,1,0,0,0,1226,1228,5,105,0,0,1227,1226,1,0,0,0,1227,1228,1,0,
- 0,0,1228,1245,1,0,0,0,1229,1231,5,46,0,0,1230,1229,1,0,0,0,1230,1231,1,
- 0,0,0,1231,1233,1,0,0,0,1232,1234,2,48,57,0,1233,1232,1,0,0,0,1234,1235,
- 1,0,0,0,1235,1233,1,0,0,0,1235,1236,1,0,0,0,1236,1238,1,0,0,0,1237,1239,
- 3,297,148,0,1238,1237,1,0,0,0,1238,1239,1,0,0,0,1239,1241,1,0,0,0,1240,
- 1242,5,105,0,0,1241,1240,1,0,0,0,1241,1242,1,0,0,0,1242,1245,1,0,0,0,1243,
- 1245,5,105,0,0,1244,1212,1,0,0,0,1244,1230,1,0,0,0,1244,1243,1,0,0,0,1245,
- 300,1,0,0,0,1246,1247,5,67,0,0,1247,1257,5,67,0,0,1248,1249,5,82,0,0,1249,
- 1257,5,82,0,0,1250,1251,5,81,0,0,1251,1257,5,81,0,0,1252,1253,5,90,0,0,
- 1253,1257,5,90,0,0,1254,1255,5,66,0,0,1255,1257,5,66,0,0,1256,1246,1,0,
- 0,0,1256,1248,1,0,0,0,1256,1250,1,0,0,0,1256,1252,1,0,0,0,1256,1254,1,
- 0,0,0,1257,302,1,0,0,0,1258,1259,5,116,0,0,1259,1260,5,114,0,0,1260,1261,
- 5,117,0,0,1261,1277,5,101,0,0,1262,1263,5,84,0,0,1263,1264,5,114,0,0,1264,
- 1265,5,117,0,0,1265,1277,5,101,0,0,1266,1267,5,102,0,0,1267,1268,5,97,
- 0,0,1268,1269,5,108,0,0,1269,1270,5,115,0,0,1270,1277,5,101,0,0,1271,1272,
- 5,70,0,0,1272,1273,5,97,0,0,1273,1274,5,108,0,0,1274,1275,5,115,0,0,1275,
- 1277,5,101,0,0,1276,1258,1,0,0,0,1276,1262,1,0,0,0,1276,1266,1,0,0,0,1276,
- 1271,1,0,0,0,1277,304,1,0,0,0,1278,1279,5,78,0,0,1279,1280,5,97,0,0,1280,
- 1281,5,78,0,0,1281,306,1,0,0,0,1282,1284,7,2,0,0,1283,1282,1,0,0,0,1284,
- 1285,1,0,0,0,1285,1283,1,0,0,0,1285,1286,1,0,0,0,1286,1293,1,0,0,0,1287,
- 1289,5,95,0,0,1288,1290,7,3,0,0,1289,1288,1,0,0,0,1290,1291,1,0,0,0,1291,
- 1289,1,0,0,0,1291,1292,1,0,0,0,1292,1294,1,0,0,0,1293,1287,1,0,0,0,1293,
- 1294,1,0,0,0,1294,308,1,0,0,0,1295,1296,5,47,0,0,1296,1297,5,47,0,0,1297,
- 1301,1,0,0,0,1298,1300,8,4,0,0,1299,1298,1,0,0,0,1300,1303,1,0,0,0,1301,
- 1299,1,0,0,0,1301,1302,1,0,0,0,1302,1308,1,0,0,0,1303,1301,1,0,0,0,1304,
- 1306,5,13,0,0,1305,1304,1,0,0,0,1305,1306,1,0,0,0,1306,1307,1,0,0,0,1307,
- 1309,5,10,0,0,1308,1305,1,0,0,0,1308,1309,1,0,0,0,1309,1322,1,0,0,0,1310,
- 1311,5,47,0,0,1311,1312,5,42,0,0,1312,1316,1,0,0,0,1313,1315,9,0,0,0,1314,
- 1313,1,0,0,0,1315,1318,1,0,0,0,1316,1317,1,0,0,0,1316,1314,1,0,0,0,1317,
- 1319,1,0,0,0,1318,1316,1,0,0,0,1319,1320,5,42,0,0,1320,1322,5,47,0,0,1321,
- 1295,1,0,0,0,1321,1310,1,0,0,0,1322,1323,1,0,0,0,1323,1324,6,154,0,0,1324,
- 310,1,0,0,0,1325,1327,7,5,0,0,1326,1325,1,0,0,0,1327,1328,1,0,0,0,1328,
- 1326,1,0,0,0,1328,1329,1,0,0,0,1329,1330,1,0,0,0,1330,1331,6,155,0,0,1331,
- 312,1,0,0,0,25,0,1193,1198,1204,1209,1214,1220,1224,1227,1230,1235,1238,
- 1241,1244,1256,1276,1285,1291,1293,1301,1305,1308,1316,1321,1328,1,6,0,
- 0
+ 7,152,2,153,7,153,2,154,7,154,2,155,7,155,2,156,7,156,2,157,7,157,1,0,
+ 1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,6,1,6,1,7,1,7,1,
+ 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,10,
+ 1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,
+ 1,12,1,12,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,15,
+ 1,15,1,15,1,16,1,16,1,16,1,17,1,17,1,18,1,18,1,19,1,19,1,20,1,20,1,20,
+ 1,21,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1,23,1,23,1,24,1,24,1,24,1,24,
+ 1,25,1,25,1,25,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,28,
+ 1,28,1,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,
+ 1,31,1,31,1,32,1,32,1,33,1,33,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,
+ 1,36,1,36,1,36,1,37,1,37,1,37,1,38,1,38,1,39,1,39,1,39,1,40,1,40,1,41,
+ 1,41,1,42,1,42,1,43,1,43,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,46,1,46,
+ 1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,
+ 1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,
+ 1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,
+ 1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,
+ 1,56,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,59,
+ 1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,
+ 1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,
+ 1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,65,1,65,
+ 1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,
+ 1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,
+ 1,68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,
+ 1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,
+ 1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74,
+ 1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76,
+ 1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,
+ 1,78,1,78,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,
+ 1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,84,1,84,
+ 1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,1,86,1,86,
+ 1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,
+ 1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,
+ 1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1,92,
+ 1,92,1,93,1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,94,
+ 1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,
+ 1,96,1,96,1,96,1,97,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,98,
+ 1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1,100,
+ 1,100,1,100,1,100,1,100,1,100,1,101,1,101,1,101,1,101,1,101,1,101,1,102,
+ 1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103,1,103,
+ 1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,105,
+ 1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106,1,106,
+ 1,106,1,106,1,106,1,106,1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,
+ 1,107,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,
+ 1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,110,1,110,1,110,1,110,1,110,
+ 1,110,1,110,1,110,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,112,1,112,
+ 1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,113,1,113,1,113,1,113,1,113,
+ 1,113,1,113,1,113,1,113,1,114,1,114,1,114,1,114,1,114,1,114,1,114,1,114,
+ 1,114,1,114,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,116,1,116,
+ 1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,117,1,117,1,117,
+ 1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,
+ 1,118,1,118,1,118,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,120,1,120,
+ 1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,121,1,121,
+ 1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,122,1,122,1,122,1,122,
+ 1,122,1,122,1,122,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,
+ 1,123,1,123,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,
+ 1,124,1,124,1,125,1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,126,
+ 1,126,1,126,1,126,1,126,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,
+ 1,128,1,128,1,128,1,128,1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,130,
+ 1,130,1,130,1,130,1,130,1,131,1,131,1,131,1,131,1,131,1,132,1,132,1,132,
+ 1,132,1,132,1,132,1,132,1,133,1,133,1,133,1,133,1,133,1,133,1,134,1,134,
+ 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,135,1,135,1,135,1,135,1,135,
+ 1,135,1,135,1,136,1,136,1,136,1,136,1,136,1,137,1,137,1,137,1,137,1,137,
+ 1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,139,1,139,1,139,1,139,
+ 1,139,1,139,1,139,1,139,1,140,1,140,1,140,1,140,1,140,1,141,1,141,1,141,
+ 1,141,1,141,1,141,1,141,1,142,1,142,1,142,1,142,1,142,1,143,1,143,1,143,
+ 1,143,1,143,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,
+ 1,144,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,146,1,146,1,146,
+ 1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,147,1,147,1,147,1,147,
+ 1,147,1,147,1,147,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,149,
+ 3,149,1214,8,149,1,149,4,149,1217,8,149,11,149,12,149,1218,1,149,1,149,
+ 1,150,1,150,3,150,1225,8,150,1,150,4,150,1228,8,150,11,150,12,150,1229,
+ 1,151,4,151,1233,8,151,11,151,12,151,1234,1,151,1,151,5,151,1239,8,151,
+ 10,151,12,151,1242,9,151,1,151,3,151,1245,8,151,1,151,3,151,1248,8,151,
+ 1,151,3,151,1251,8,151,1,151,4,151,1254,8,151,11,151,12,151,1255,1,151,
+ 3,151,1259,8,151,1,151,3,151,1262,8,151,1,151,3,151,1265,8,151,1,152,1,
+ 152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,3,152,1277,8,152,1,
+ 153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,
+ 1,153,1,153,1,153,1,153,1,153,1,153,3,153,1297,8,153,1,154,1,154,1,154,
+ 1,154,1,155,4,155,1304,8,155,11,155,12,155,1305,1,155,1,155,4,155,1310,
+ 8,155,11,155,12,155,1311,3,155,1314,8,155,1,156,1,156,1,156,1,156,5,156,
+ 1320,8,156,10,156,12,156,1323,9,156,1,156,3,156,1326,8,156,1,156,3,156,
+ 1329,8,156,1,156,1,156,1,156,1,156,5,156,1335,8,156,10,156,12,156,1338,
+ 9,156,1,156,1,156,3,156,1342,8,156,1,156,1,156,1,157,4,157,1347,8,157,
+ 11,157,12,157,1348,1,157,1,157,1,1336,0,158,1,1,3,2,5,3,7,4,9,5,11,6,13,
+ 7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,
+ 39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31,
+ 63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85,43,
+ 87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,51,103,52,105,53,107,54,
+ 109,55,111,56,113,57,115,58,117,59,119,60,121,61,123,62,125,63,127,64,
+ 129,65,131,66,133,67,135,68,137,69,139,70,141,71,143,72,145,73,147,74,
+ 149,75,151,76,153,77,155,78,157,79,159,80,161,81,163,82,165,83,167,84,
+ 169,85,171,86,173,87,175,88,177,89,179,90,181,91,183,92,185,93,187,94,
+ 189,95,191,96,193,97,195,98,197,99,199,100,201,101,203,102,205,103,207,
+ 104,209,105,211,106,213,107,215,108,217,109,219,110,221,111,223,112,225,
+ 113,227,114,229,115,231,116,233,117,235,118,237,119,239,120,241,121,243,
+ 122,245,123,247,124,249,125,251,126,253,127,255,128,257,129,259,130,261,
+ 131,263,132,265,133,267,134,269,135,271,136,273,137,275,138,277,139,279,
+ 140,281,141,283,142,285,143,287,144,289,145,291,146,293,147,295,148,297,
+ 149,299,150,301,0,303,151,305,152,307,153,309,154,311,155,313,156,315,
+ 157,1,0,6,2,0,69,69,101,101,2,0,43,43,45,45,4,0,65,90,97,122,880,1279,
+ 7936,8191,5,0,48,57,65,90,97,122,880,1279,7936,8191,2,0,10,10,13,13,2,
+ 0,9,9,32,32,1380,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,
+ 0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,
+ 0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,
+ 1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,
+ 0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,
+ 1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,
+ 0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,
+ 1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,
+ 0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,
+ 1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,
+ 0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,
+ 0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,
+ 0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,
+ 0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,
+ 0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,
+ 0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0,0,167,1,
+ 0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0,0,0,0,177,1,
+ 0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0,0,0,0,187,1,
+ 0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,
+ 0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,0,207,1,
+ 0,0,0,0,209,1,0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,
+ 0,0,0,0,219,1,0,0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,
+ 0,0,0,0,229,1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,
+ 0,0,0,0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,
+ 0,0,0,0,249,1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,
+ 0,0,0,0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267,1,
+ 0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0,277,1,
+ 0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0,0,0,0,287,1,
+ 0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295,1,0,0,0,0,297,1,
+ 0,0,0,0,299,1,0,0,0,0,303,1,0,0,0,0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,
+ 0,0,0,0,311,1,0,0,0,0,313,1,0,0,0,0,315,1,0,0,0,1,317,1,0,0,0,3,319,1,
+ 0,0,0,5,321,1,0,0,0,7,323,1,0,0,0,9,325,1,0,0,0,11,327,1,0,0,0,13,329,
+ 1,0,0,0,15,333,1,0,0,0,17,343,1,0,0,0,19,346,1,0,0,0,21,352,1,0,0,0,23,
+ 355,1,0,0,0,25,367,1,0,0,0,27,369,1,0,0,0,29,372,1,0,0,0,31,380,1,0,0,
+ 0,33,383,1,0,0,0,35,386,1,0,0,0,37,388,1,0,0,0,39,390,1,0,0,0,41,392,1,
+ 0,0,0,43,395,1,0,0,0,45,399,1,0,0,0,47,403,1,0,0,0,49,405,1,0,0,0,51,409,
+ 1,0,0,0,53,412,1,0,0,0,55,414,1,0,0,0,57,422,1,0,0,0,59,425,1,0,0,0,61,
+ 434,1,0,0,0,63,437,1,0,0,0,65,439,1,0,0,0,67,441,1,0,0,0,69,443,1,0,0,
+ 0,71,447,1,0,0,0,73,451,1,0,0,0,75,454,1,0,0,0,77,457,1,0,0,0,79,459,1,
+ 0,0,0,81,462,1,0,0,0,83,464,1,0,0,0,85,466,1,0,0,0,87,468,1,0,0,0,89,470,
+ 1,0,0,0,91,472,1,0,0,0,93,477,1,0,0,0,95,484,1,0,0,0,97,490,1,0,0,0,99,
+ 495,1,0,0,0,101,501,1,0,0,0,103,507,1,0,0,0,105,512,1,0,0,0,107,516,1,
+ 0,0,0,109,521,1,0,0,0,111,526,1,0,0,0,113,531,1,0,0,0,115,536,1,0,0,0,
+ 117,543,1,0,0,0,119,548,1,0,0,0,121,553,1,0,0,0,123,560,1,0,0,0,125,565,
+ 1,0,0,0,127,573,1,0,0,0,129,581,1,0,0,0,131,589,1,0,0,0,133,599,1,0,0,
+ 0,135,607,1,0,0,0,137,617,1,0,0,0,139,625,1,0,0,0,141,631,1,0,0,0,143,
+ 637,1,0,0,0,145,643,1,0,0,0,147,649,1,0,0,0,149,657,1,0,0,0,151,663,1,
+ 0,0,0,153,671,1,0,0,0,155,677,1,0,0,0,157,685,1,0,0,0,159,691,1,0,0,0,
+ 161,695,1,0,0,0,163,701,1,0,0,0,165,705,1,0,0,0,167,711,1,0,0,0,169,715,
+ 1,0,0,0,171,723,1,0,0,0,173,729,1,0,0,0,175,734,1,0,0,0,177,740,1,0,0,
+ 0,179,745,1,0,0,0,181,753,1,0,0,0,183,759,1,0,0,0,185,766,1,0,0,0,187,
+ 774,1,0,0,0,189,780,1,0,0,0,191,789,1,0,0,0,193,796,1,0,0,0,195,804,1,
+ 0,0,0,197,810,1,0,0,0,199,819,1,0,0,0,201,826,1,0,0,0,203,834,1,0,0,0,
+ 205,840,1,0,0,0,207,849,1,0,0,0,209,856,1,0,0,0,211,864,1,0,0,0,213,873,
+ 1,0,0,0,215,883,1,0,0,0,217,890,1,0,0,0,219,901,1,0,0,0,221,908,1,0,0,
+ 0,223,916,1,0,0,0,225,923,1,0,0,0,227,932,1,0,0,0,229,941,1,0,0,0,231,
+ 951,1,0,0,0,233,959,1,0,0,0,235,970,1,0,0,0,237,977,1,0,0,0,239,988,1,
+ 0,0,0,241,995,1,0,0,0,243,1007,1,0,0,0,245,1017,1,0,0,0,247,1024,1,0,0,
+ 0,249,1035,1,0,0,0,251,1047,1,0,0,0,253,1052,1,0,0,0,255,1061,1,0,0,0,
+ 257,1069,1,0,0,0,259,1074,1,0,0,0,261,1080,1,0,0,0,263,1085,1,0,0,0,265,
+ 1090,1,0,0,0,267,1097,1,0,0,0,269,1103,1,0,0,0,271,1112,1,0,0,0,273,1119,
+ 1,0,0,0,275,1124,1,0,0,0,277,1129,1,0,0,0,279,1137,1,0,0,0,281,1145,1,
+ 0,0,0,283,1150,1,0,0,0,285,1157,1,0,0,0,287,1162,1,0,0,0,289,1167,1,0,
+ 0,0,291,1178,1,0,0,0,293,1186,1,0,0,0,295,1197,1,0,0,0,297,1204,1,0,0,
+ 0,299,1216,1,0,0,0,301,1222,1,0,0,0,303,1264,1,0,0,0,305,1276,1,0,0,0,
+ 307,1296,1,0,0,0,309,1298,1,0,0,0,311,1303,1,0,0,0,313,1341,1,0,0,0,315,
+ 1346,1,0,0,0,317,318,5,33,0,0,318,2,1,0,0,0,319,320,5,94,0,0,320,4,1,0,
+ 0,0,321,322,5,45,0,0,322,6,1,0,0,0,323,324,5,43,0,0,324,8,1,0,0,0,325,
+ 326,5,42,0,0,326,10,1,0,0,0,327,328,5,47,0,0,328,12,1,0,0,0,329,330,5,
+ 109,0,0,330,331,5,111,0,0,331,332,5,100,0,0,332,14,1,0,0,0,333,334,5,105,
+ 0,0,334,335,5,110,0,0,335,336,5,116,0,0,336,337,5,101,0,0,337,338,5,114,
+ 0,0,338,339,5,115,0,0,339,340,5,101,0,0,340,341,5,99,0,0,341,342,5,116,
+ 0,0,342,16,1,0,0,0,343,344,5,47,0,0,344,345,5,92,0,0,345,18,1,0,0,0,346,
+ 347,5,117,0,0,347,348,5,110,0,0,348,349,5,105,0,0,349,350,5,116,0,0,350,
+ 351,5,101,0,0,351,20,1,0,0,0,352,353,5,92,0,0,353,354,5,47,0,0,354,22,
+ 1,0,0,0,355,356,5,115,0,0,356,357,5,101,0,0,357,358,5,116,0,0,358,359,
+ 5,115,0,0,359,360,5,117,0,0,360,361,5,98,0,0,361,362,5,116,0,0,362,363,
+ 5,114,0,0,363,364,5,97,0,0,364,365,5,99,0,0,365,366,5,116,0,0,366,24,1,
+ 0,0,0,367,368,5,92,0,0,368,26,1,0,0,0,369,370,5,105,0,0,370,371,5,110,
+ 0,0,371,28,1,0,0,0,372,373,5,100,0,0,373,374,5,105,0,0,374,375,5,118,0,
+ 0,375,376,5,105,0,0,376,377,5,100,0,0,377,378,5,101,0,0,378,379,5,115,
+ 0,0,379,30,1,0,0,0,380,381,5,62,0,0,381,382,5,61,0,0,382,32,1,0,0,0,383,
+ 384,5,60,0,0,384,385,5,61,0,0,385,34,1,0,0,0,386,387,5,62,0,0,387,36,1,
+ 0,0,0,388,389,5,60,0,0,389,38,1,0,0,0,390,391,5,61,0,0,391,40,1,0,0,0,
+ 392,393,5,60,0,0,393,394,5,62,0,0,394,42,1,0,0,0,395,396,5,110,0,0,396,
+ 397,5,111,0,0,397,398,5,116,0,0,398,44,1,0,0,0,399,400,5,97,0,0,400,401,
+ 5,110,0,0,401,402,5,100,0,0,402,46,1,0,0,0,403,404,5,38,0,0,404,48,1,0,
+ 0,0,405,406,5,120,0,0,406,407,5,111,0,0,407,408,5,114,0,0,408,50,1,0,0,
+ 0,409,410,5,111,0,0,410,411,5,114,0,0,411,52,1,0,0,0,412,413,5,124,0,0,
+ 413,54,1,0,0,0,414,415,5,105,0,0,415,416,5,109,0,0,416,417,5,112,0,0,417,
+ 418,5,108,0,0,418,419,5,105,0,0,419,420,5,101,0,0,420,421,5,115,0,0,421,
+ 56,1,0,0,0,422,423,5,45,0,0,423,424,5,62,0,0,424,58,1,0,0,0,425,426,5,
+ 112,0,0,426,427,5,114,0,0,427,428,5,111,0,0,428,429,5,118,0,0,429,430,
+ 5,105,0,0,430,431,5,100,0,0,431,432,5,101,0,0,432,433,5,100,0,0,433,60,
+ 1,0,0,0,434,435,5,61,0,0,435,436,5,62,0,0,436,62,1,0,0,0,437,438,5,44,
+ 0,0,438,64,1,0,0,0,439,440,5,59,0,0,440,66,1,0,0,0,441,442,5,58,0,0,442,
+ 68,1,0,0,0,443,444,5,43,0,0,444,445,5,111,0,0,445,446,5,111,0,0,446,70,
+ 1,0,0,0,447,448,5,45,0,0,448,449,5,111,0,0,449,450,5,111,0,0,450,72,1,
+ 0,0,0,451,452,5,40,0,0,452,453,5,124,0,0,453,74,1,0,0,0,454,455,5,124,
+ 0,0,455,456,5,41,0,0,456,76,1,0,0,0,457,458,5,91,0,0,458,78,1,0,0,0,459,
+ 460,5,93,0,0,460,461,5,84,0,0,461,80,1,0,0,0,462,463,5,93,0,0,463,82,1,
+ 0,0,0,464,465,5,40,0,0,465,84,1,0,0,0,466,467,5,41,0,0,467,86,1,0,0,0,
+ 468,469,5,123,0,0,469,88,1,0,0,0,470,471,5,125,0,0,471,90,1,0,0,0,472,
+ 473,5,108,0,0,473,474,5,111,0,0,474,475,5,103,0,0,475,476,5,40,0,0,476,
+ 92,1,0,0,0,477,478,5,108,0,0,478,479,5,111,0,0,479,480,5,103,0,0,480,481,
+ 5,49,0,0,481,482,5,48,0,0,482,483,5,40,0,0,483,94,1,0,0,0,484,485,5,108,
+ 0,0,485,486,5,111,0,0,486,487,5,103,0,0,487,488,5,50,0,0,488,489,5,40,
+ 0,0,489,96,1,0,0,0,490,491,5,112,0,0,491,492,5,111,0,0,492,493,5,119,0,
+ 0,493,494,5,40,0,0,494,98,1,0,0,0,495,496,5,115,0,0,496,497,5,113,0,0,
+ 497,498,5,114,0,0,498,499,5,116,0,0,499,500,5,40,0,0,500,100,1,0,0,0,501,
+ 502,5,99,0,0,502,503,5,98,0,0,503,504,5,114,0,0,504,505,5,116,0,0,505,
+ 506,5,40,0,0,506,102,1,0,0,0,507,508,5,115,0,0,508,509,5,113,0,0,509,510,
+ 5,114,0,0,510,511,5,40,0,0,511,104,1,0,0,0,512,513,5,108,0,0,513,514,5,
+ 110,0,0,514,515,5,40,0,0,515,106,1,0,0,0,516,517,5,101,0,0,517,518,5,120,
+ 0,0,518,519,5,112,0,0,519,520,5,40,0,0,520,108,1,0,0,0,521,522,5,115,0,
+ 0,522,523,5,105,0,0,523,524,5,110,0,0,524,525,5,40,0,0,525,110,1,0,0,0,
+ 526,527,5,99,0,0,527,528,5,111,0,0,528,529,5,115,0,0,529,530,5,40,0,0,
+ 530,112,1,0,0,0,531,532,5,116,0,0,532,533,5,97,0,0,533,534,5,110,0,0,534,
+ 535,5,40,0,0,535,114,1,0,0,0,536,537,5,99,0,0,537,538,5,111,0,0,538,539,
+ 5,116,0,0,539,540,5,97,0,0,540,541,5,110,0,0,541,542,5,40,0,0,542,116,
+ 1,0,0,0,543,544,5,99,0,0,544,545,5,111,0,0,545,546,5,116,0,0,546,547,5,
+ 40,0,0,547,118,1,0,0,0,548,549,5,115,0,0,549,550,5,101,0,0,550,551,5,99,
+ 0,0,551,552,5,40,0,0,552,120,1,0,0,0,553,554,5,99,0,0,554,555,5,111,0,
+ 0,555,556,5,115,0,0,556,557,5,101,0,0,557,558,5,99,0,0,558,559,5,40,0,
+ 0,559,122,1,0,0,0,560,561,5,99,0,0,561,562,5,115,0,0,562,563,5,99,0,0,
+ 563,564,5,40,0,0,564,124,1,0,0,0,565,566,5,97,0,0,566,567,5,114,0,0,567,
+ 568,5,99,0,0,568,569,5,115,0,0,569,570,5,105,0,0,570,571,5,110,0,0,571,
+ 572,5,40,0,0,572,126,1,0,0,0,573,574,5,97,0,0,574,575,5,114,0,0,575,576,
+ 5,99,0,0,576,577,5,99,0,0,577,578,5,111,0,0,578,579,5,115,0,0,579,580,
+ 5,40,0,0,580,128,1,0,0,0,581,582,5,97,0,0,582,583,5,114,0,0,583,584,5,
+ 99,0,0,584,585,5,116,0,0,585,586,5,97,0,0,586,587,5,110,0,0,587,588,5,
+ 40,0,0,588,130,1,0,0,0,589,590,5,97,0,0,590,591,5,114,0,0,591,592,5,99,
+ 0,0,592,593,5,99,0,0,593,594,5,111,0,0,594,595,5,116,0,0,595,596,5,97,
+ 0,0,596,597,5,110,0,0,597,598,5,40,0,0,598,132,1,0,0,0,599,600,5,97,0,
+ 0,600,601,5,114,0,0,601,602,5,99,0,0,602,603,5,115,0,0,603,604,5,101,0,
+ 0,604,605,5,99,0,0,605,606,5,40,0,0,606,134,1,0,0,0,607,608,5,97,0,0,608,
+ 609,5,114,0,0,609,610,5,99,0,0,610,611,5,99,0,0,611,612,5,111,0,0,612,
+ 613,5,115,0,0,613,614,5,101,0,0,614,615,5,99,0,0,615,616,5,40,0,0,616,
+ 136,1,0,0,0,617,618,5,97,0,0,618,619,5,114,0,0,619,620,5,99,0,0,620,621,
+ 5,99,0,0,621,622,5,115,0,0,622,623,5,99,0,0,623,624,5,40,0,0,624,138,1,
+ 0,0,0,625,626,5,97,0,0,626,627,5,99,0,0,627,628,5,115,0,0,628,629,5,99,
+ 0,0,629,630,5,40,0,0,630,140,1,0,0,0,631,632,5,97,0,0,632,633,5,115,0,
+ 0,633,634,5,105,0,0,634,635,5,110,0,0,635,636,5,40,0,0,636,142,1,0,0,0,
+ 637,638,5,97,0,0,638,639,5,99,0,0,639,640,5,111,0,0,640,641,5,115,0,0,
+ 641,642,5,40,0,0,642,144,1,0,0,0,643,644,5,97,0,0,644,645,5,116,0,0,645,
+ 646,5,97,0,0,646,647,5,110,0,0,647,648,5,40,0,0,648,146,1,0,0,0,649,650,
+ 5,97,0,0,650,651,5,99,0,0,651,652,5,111,0,0,652,653,5,116,0,0,653,654,
+ 5,97,0,0,654,655,5,110,0,0,655,656,5,40,0,0,656,148,1,0,0,0,657,658,5,
+ 97,0,0,658,659,5,115,0,0,659,660,5,101,0,0,660,661,5,99,0,0,661,662,5,
+ 40,0,0,662,150,1,0,0,0,663,664,5,97,0,0,664,665,5,99,0,0,665,666,5,111,
+ 0,0,666,667,5,115,0,0,667,668,5,101,0,0,668,669,5,99,0,0,669,670,5,40,
+ 0,0,670,152,1,0,0,0,671,672,5,97,0,0,672,673,5,99,0,0,673,674,5,111,0,
+ 0,674,675,5,116,0,0,675,676,5,40,0,0,676,154,1,0,0,0,677,678,5,97,0,0,
+ 678,679,5,114,0,0,679,680,5,99,0,0,680,681,5,99,0,0,681,682,5,111,0,0,
+ 682,683,5,116,0,0,683,684,5,40,0,0,684,156,1,0,0,0,685,686,5,115,0,0,686,
+ 687,5,105,0,0,687,688,5,110,0,0,688,689,5,104,0,0,689,690,5,40,0,0,690,
+ 158,1,0,0,0,691,692,5,115,0,0,692,693,5,104,0,0,693,694,5,40,0,0,694,160,
+ 1,0,0,0,695,696,5,99,0,0,696,697,5,111,0,0,697,698,5,115,0,0,698,699,5,
+ 104,0,0,699,700,5,40,0,0,700,162,1,0,0,0,701,702,5,99,0,0,702,703,5,104,
+ 0,0,703,704,5,40,0,0,704,164,1,0,0,0,705,706,5,116,0,0,706,707,5,97,0,
+ 0,707,708,5,110,0,0,708,709,5,104,0,0,709,710,5,40,0,0,710,166,1,0,0,0,
+ 711,712,5,116,0,0,712,713,5,104,0,0,713,714,5,40,0,0,714,168,1,0,0,0,715,
+ 716,5,99,0,0,716,717,5,111,0,0,717,718,5,116,0,0,718,719,5,97,0,0,719,
+ 720,5,110,0,0,720,721,5,104,0,0,721,722,5,40,0,0,722,170,1,0,0,0,723,724,
+ 5,99,0,0,724,725,5,111,0,0,725,726,5,116,0,0,726,727,5,104,0,0,727,728,
+ 5,40,0,0,728,172,1,0,0,0,729,730,5,99,0,0,730,731,5,116,0,0,731,732,5,
+ 104,0,0,732,733,5,40,0,0,733,174,1,0,0,0,734,735,5,115,0,0,735,736,5,101,
+ 0,0,736,737,5,99,0,0,737,738,5,104,0,0,738,739,5,40,0,0,739,176,1,0,0,
+ 0,740,741,5,115,0,0,741,742,5,99,0,0,742,743,5,104,0,0,743,744,5,40,0,
+ 0,744,178,1,0,0,0,745,746,5,99,0,0,746,747,5,111,0,0,747,748,5,115,0,0,
+ 748,749,5,101,0,0,749,750,5,99,0,0,750,751,5,104,0,0,751,752,5,40,0,0,
+ 752,180,1,0,0,0,753,754,5,99,0,0,754,755,5,115,0,0,755,756,5,99,0,0,756,
+ 757,5,104,0,0,757,758,5,40,0,0,758,182,1,0,0,0,759,760,5,97,0,0,760,761,
+ 5,115,0,0,761,762,5,105,0,0,762,763,5,110,0,0,763,764,5,104,0,0,764,765,
+ 5,40,0,0,765,184,1,0,0,0,766,767,5,97,0,0,767,768,5,114,0,0,768,769,5,
+ 115,0,0,769,770,5,105,0,0,770,771,5,110,0,0,771,772,5,104,0,0,772,773,
+ 5,40,0,0,773,186,1,0,0,0,774,775,5,97,0,0,775,776,5,114,0,0,776,777,5,
+ 115,0,0,777,778,5,104,0,0,778,779,5,40,0,0,779,188,1,0,0,0,780,781,5,97,
+ 0,0,781,782,5,114,0,0,782,783,5,99,0,0,783,784,5,115,0,0,784,785,5,105,
+ 0,0,785,786,5,110,0,0,786,787,5,104,0,0,787,788,5,40,0,0,788,190,1,0,0,
+ 0,789,790,5,97,0,0,790,791,5,99,0,0,791,792,5,111,0,0,792,793,5,115,0,
+ 0,793,794,5,104,0,0,794,795,5,40,0,0,795,192,1,0,0,0,796,797,5,97,0,0,
+ 797,798,5,114,0,0,798,799,5,99,0,0,799,800,5,111,0,0,800,801,5,115,0,0,
+ 801,802,5,104,0,0,802,803,5,40,0,0,803,194,1,0,0,0,804,805,5,97,0,0,805,
+ 806,5,114,0,0,806,807,5,99,0,0,807,808,5,104,0,0,808,809,5,40,0,0,809,
+ 196,1,0,0,0,810,811,5,97,0,0,811,812,5,114,0,0,812,813,5,99,0,0,813,814,
+ 5,99,0,0,814,815,5,111,0,0,815,816,5,115,0,0,816,817,5,104,0,0,817,818,
+ 5,40,0,0,818,198,1,0,0,0,819,820,5,97,0,0,820,821,5,116,0,0,821,822,5,
+ 97,0,0,822,823,5,110,0,0,823,824,5,104,0,0,824,825,5,40,0,0,825,200,1,
+ 0,0,0,826,827,5,97,0,0,827,828,5,114,0,0,828,829,5,116,0,0,829,830,5,97,
+ 0,0,830,831,5,110,0,0,831,832,5,104,0,0,832,833,5,40,0,0,833,202,1,0,0,
+ 0,834,835,5,97,0,0,835,836,5,114,0,0,836,837,5,116,0,0,837,838,5,104,0,
+ 0,838,839,5,40,0,0,839,204,1,0,0,0,840,841,5,97,0,0,841,842,5,114,0,0,
+ 842,843,5,99,0,0,843,844,5,116,0,0,844,845,5,97,0,0,845,846,5,110,0,0,
+ 846,847,5,104,0,0,847,848,5,40,0,0,848,206,1,0,0,0,849,850,5,97,0,0,850,
+ 851,5,99,0,0,851,852,5,111,0,0,852,853,5,116,0,0,853,854,5,104,0,0,854,
+ 855,5,40,0,0,855,208,1,0,0,0,856,857,5,97,0,0,857,858,5,114,0,0,858,859,
+ 5,99,0,0,859,860,5,111,0,0,860,861,5,116,0,0,861,862,5,104,0,0,862,863,
+ 5,40,0,0,863,210,1,0,0,0,864,865,5,97,0,0,865,866,5,99,0,0,866,867,5,111,
+ 0,0,867,868,5,116,0,0,868,869,5,97,0,0,869,870,5,110,0,0,870,871,5,104,
+ 0,0,871,872,5,40,0,0,872,212,1,0,0,0,873,874,5,97,0,0,874,875,5,114,0,
+ 0,875,876,5,99,0,0,876,877,5,111,0,0,877,878,5,116,0,0,878,879,5,97,0,
+ 0,879,880,5,110,0,0,880,881,5,104,0,0,881,882,5,40,0,0,882,214,1,0,0,0,
+ 883,884,5,97,0,0,884,885,5,114,0,0,885,886,5,99,0,0,886,887,5,116,0,0,
+ 887,888,5,104,0,0,888,889,5,40,0,0,889,216,1,0,0,0,890,891,5,97,0,0,891,
+ 892,5,114,0,0,892,893,5,99,0,0,893,894,5,99,0,0,894,895,5,111,0,0,895,
+ 896,5,116,0,0,896,897,5,97,0,0,897,898,5,110,0,0,898,899,5,104,0,0,899,
+ 900,5,40,0,0,900,218,1,0,0,0,901,902,5,97,0,0,902,903,5,115,0,0,903,904,
+ 5,101,0,0,904,905,5,99,0,0,905,906,5,104,0,0,906,907,5,40,0,0,907,220,
+ 1,0,0,0,908,909,5,97,0,0,909,910,5,114,0,0,910,911,5,115,0,0,911,912,5,
+ 101,0,0,912,913,5,99,0,0,913,914,5,104,0,0,914,915,5,40,0,0,915,222,1,
+ 0,0,0,916,917,5,97,0,0,917,918,5,114,0,0,918,919,5,115,0,0,919,920,5,99,
+ 0,0,920,921,5,104,0,0,921,922,5,40,0,0,922,224,1,0,0,0,923,924,5,97,0,
+ 0,924,925,5,114,0,0,925,926,5,99,0,0,926,927,5,115,0,0,927,928,5,101,0,
+ 0,928,929,5,99,0,0,929,930,5,104,0,0,930,931,5,40,0,0,931,226,1,0,0,0,
+ 932,933,5,97,0,0,933,934,5,99,0,0,934,935,5,111,0,0,935,936,5,115,0,0,
+ 936,937,5,101,0,0,937,938,5,99,0,0,938,939,5,104,0,0,939,940,5,40,0,0,
+ 940,228,1,0,0,0,941,942,5,97,0,0,942,943,5,114,0,0,943,944,5,99,0,0,944,
+ 945,5,111,0,0,945,946,5,115,0,0,946,947,5,101,0,0,947,948,5,99,0,0,948,
+ 949,5,104,0,0,949,950,5,40,0,0,950,230,1,0,0,0,951,952,5,97,0,0,952,953,
+ 5,114,0,0,953,954,5,99,0,0,954,955,5,115,0,0,955,956,5,99,0,0,956,957,
+ 5,104,0,0,957,958,5,40,0,0,958,232,1,0,0,0,959,960,5,97,0,0,960,961,5,
+ 114,0,0,961,962,5,99,0,0,962,963,5,99,0,0,963,964,5,111,0,0,964,965,5,
+ 115,0,0,965,966,5,101,0,0,966,967,5,99,0,0,967,968,5,104,0,0,968,969,5,
+ 40,0,0,969,234,1,0,0,0,970,971,5,97,0,0,971,972,5,99,0,0,972,973,5,115,
+ 0,0,973,974,5,99,0,0,974,975,5,104,0,0,975,976,5,40,0,0,976,236,1,0,0,
+ 0,977,978,5,102,0,0,978,979,5,97,0,0,979,980,5,99,0,0,980,981,5,116,0,
+ 0,981,982,5,111,0,0,982,983,5,114,0,0,983,984,5,105,0,0,984,985,5,97,0,
+ 0,985,986,5,108,0,0,986,987,5,40,0,0,987,238,1,0,0,0,988,989,5,103,0,0,
+ 989,990,5,97,0,0,990,991,5,109,0,0,991,992,5,109,0,0,992,993,5,97,0,0,
+ 993,994,5,40,0,0,994,240,1,0,0,0,995,996,5,100,0,0,996,997,5,101,0,0,997,
+ 998,5,114,0,0,998,999,5,105,0,0,999,1000,5,118,0,0,1000,1001,5,97,0,0,
+ 1001,1002,5,116,0,0,1002,1003,5,105,0,0,1003,1004,5,118,0,0,1004,1005,
+ 5,101,0,0,1005,1006,5,40,0,0,1006,242,1,0,0,0,1007,1008,5,105,0,0,1008,
+ 1009,5,110,0,0,1009,1010,5,116,0,0,1010,1011,5,101,0,0,1011,1012,5,103,
+ 0,0,1012,1013,5,114,0,0,1013,1014,5,97,0,0,1014,1015,5,108,0,0,1015,1016,
+ 5,40,0,0,1016,244,1,0,0,0,1017,1018,5,108,0,0,1018,1019,5,105,0,0,1019,
+ 1020,5,109,0,0,1020,1021,5,105,0,0,1021,1022,5,116,0,0,1022,1023,5,40,
+ 0,0,1023,246,1,0,0,0,1024,1025,5,108,0,0,1025,1026,5,105,0,0,1026,1027,
+ 5,109,0,0,1027,1028,5,105,0,0,1028,1029,5,116,0,0,1029,1030,5,108,0,0,
+ 1030,1031,5,101,0,0,1031,1032,5,102,0,0,1032,1033,5,116,0,0,1033,1034,
+ 5,40,0,0,1034,248,1,0,0,0,1035,1036,5,108,0,0,1036,1037,5,105,0,0,1037,
+ 1038,5,109,0,0,1038,1039,5,105,0,0,1039,1040,5,116,0,0,1040,1041,5,114,
+ 0,0,1041,1042,5,105,0,0,1042,1043,5,103,0,0,1043,1044,5,104,0,0,1044,1045,
+ 5,116,0,0,1045,1046,5,40,0,0,1046,250,1,0,0,0,1047,1048,5,115,0,0,1048,
+ 1049,5,117,0,0,1049,1050,5,109,0,0,1050,1051,5,40,0,0,1051,252,1,0,0,0,
+ 1052,1053,5,112,0,0,1053,1054,5,114,0,0,1054,1055,5,111,0,0,1055,1056,
+ 5,100,0,0,1056,1057,5,117,0,0,1057,1058,5,99,0,0,1058,1059,5,116,0,0,1059,
+ 1060,5,40,0,0,1060,254,1,0,0,0,1061,1062,5,115,0,0,1062,1063,5,105,0,0,
+ 1063,1064,5,103,0,0,1064,1065,5,110,0,0,1065,1066,5,117,0,0,1066,1067,
+ 5,109,0,0,1067,1068,5,40,0,0,1068,256,1,0,0,0,1069,1070,5,115,0,0,1070,
+ 1071,5,103,0,0,1071,1072,5,110,0,0,1072,1073,5,40,0,0,1073,258,1,0,0,0,
+ 1074,1075,5,115,0,0,1075,1076,5,105,0,0,1076,1077,5,103,0,0,1077,1078,
+ 5,110,0,0,1078,1079,5,40,0,0,1079,260,1,0,0,0,1080,1081,5,97,0,0,1081,
+ 1082,5,98,0,0,1082,1083,5,115,0,0,1083,1084,5,40,0,0,1084,262,1,0,0,0,
+ 1085,1086,5,112,0,0,1086,1087,5,104,0,0,1087,1088,5,105,0,0,1088,1089,
+ 5,40,0,0,1089,264,1,0,0,0,1090,1091,5,102,0,0,1091,1092,5,108,0,0,1092,
+ 1093,5,111,0,0,1093,1094,5,111,0,0,1094,1095,5,114,0,0,1095,1096,5,40,
+ 0,0,1096,266,1,0,0,0,1097,1098,5,99,0,0,1098,1099,5,101,0,0,1099,1100,
+ 5,105,0,0,1100,1101,5,108,0,0,1101,1102,5,40,0,0,1102,268,1,0,0,0,1103,
+ 1104,5,99,0,0,1104,1105,5,101,0,0,1105,1106,5,105,0,0,1106,1107,5,108,
+ 0,0,1107,1108,5,105,0,0,1108,1109,5,110,0,0,1109,1110,5,103,0,0,1110,1111,
+ 5,40,0,0,1111,270,1,0,0,0,1112,1113,5,114,0,0,1113,1114,5,111,0,0,1114,
+ 1115,5,117,0,0,1115,1116,5,110,0,0,1116,1117,5,100,0,0,1117,1118,5,40,
+ 0,0,1118,272,1,0,0,0,1119,1120,5,109,0,0,1120,1121,5,105,0,0,1121,1122,
+ 5,110,0,0,1122,1123,5,40,0,0,1123,274,1,0,0,0,1124,1125,5,109,0,0,1125,
+ 1126,5,97,0,0,1126,1127,5,120,0,0,1127,1128,5,40,0,0,1128,276,1,0,0,0,
+ 1129,1130,5,97,0,0,1130,1131,5,114,0,0,1131,1132,5,103,0,0,1132,1133,5,
+ 109,0,0,1133,1134,5,97,0,0,1134,1135,5,120,0,0,1135,1136,5,40,0,0,1136,
+ 278,1,0,0,0,1137,1138,5,97,0,0,1138,1139,5,114,0,0,1139,1140,5,103,0,0,
+ 1140,1141,5,109,0,0,1141,1142,5,105,0,0,1142,1143,5,110,0,0,1143,1144,
+ 5,40,0,0,1144,280,1,0,0,0,1145,1146,5,103,0,0,1146,1147,5,99,0,0,1147,
+ 1148,5,100,0,0,1148,1149,5,40,0,0,1149,282,1,0,0,0,1150,1151,5,116,0,0,
+ 1151,1152,5,114,0,0,1152,1153,5,117,0,0,1153,1154,5,110,0,0,1154,1155,
+ 5,99,0,0,1155,1156,5,40,0,0,1156,284,1,0,0,0,1157,1158,5,108,0,0,1158,
+ 1159,5,99,0,0,1159,1160,5,109,0,0,1160,1161,5,40,0,0,1161,286,1,0,0,0,
+ 1162,1163,5,101,0,0,1163,1164,5,114,0,0,1164,1165,5,102,0,0,1165,1166,
+ 5,40,0,0,1166,288,1,0,0,0,1167,1168,5,99,0,0,1168,1169,5,111,0,0,1169,
+ 1170,5,110,0,0,1170,1171,5,106,0,0,1171,1172,5,117,0,0,1172,1173,5,103,
+ 0,0,1173,1174,5,97,0,0,1174,1175,5,116,0,0,1175,1176,5,101,0,0,1176,1177,
+ 5,40,0,0,1177,290,1,0,0,0,1178,1179,5,100,0,0,1179,1180,5,111,0,0,1180,
+ 1181,5,109,0,0,1181,1182,5,97,0,0,1182,1183,5,105,0,0,1183,1184,5,110,
+ 0,0,1184,1185,5,40,0,0,1185,292,1,0,0,0,1186,1187,5,112,0,0,1187,1188,
+ 5,105,0,0,1188,1189,5,101,0,0,1189,1190,5,99,0,0,1190,1191,5,101,0,0,1191,
+ 1192,5,119,0,0,1192,1193,5,105,0,0,1193,1194,5,115,0,0,1194,1195,5,101,
+ 0,0,1195,1196,5,40,0,0,1196,294,1,0,0,0,1197,1198,5,97,0,0,1198,1199,5,
+ 112,0,0,1199,1200,5,112,0,0,1200,1201,5,108,0,0,1201,1202,5,121,0,0,1202,
+ 1203,5,40,0,0,1203,296,1,0,0,0,1204,1205,5,108,0,0,1205,1206,5,97,0,0,
+ 1206,1207,5,109,0,0,1207,1208,5,98,0,0,1208,1209,5,100,0,0,1209,1210,5,
+ 97,0,0,1210,1211,5,40,0,0,1211,298,1,0,0,0,1212,1214,5,13,0,0,1213,1212,
+ 1,0,0,0,1213,1214,1,0,0,0,1214,1215,1,0,0,0,1215,1217,5,10,0,0,1216,1213,
+ 1,0,0,0,1217,1218,1,0,0,0,1218,1216,1,0,0,0,1218,1219,1,0,0,0,1219,1220,
+ 1,0,0,0,1220,1221,6,149,0,0,1221,300,1,0,0,0,1222,1224,7,0,0,0,1223,1225,
+ 7,1,0,0,1224,1223,1,0,0,0,1224,1225,1,0,0,0,1225,1227,1,0,0,0,1226,1228,
+ 2,48,57,0,1227,1226,1,0,0,0,1228,1229,1,0,0,0,1229,1227,1,0,0,0,1229,1230,
+ 1,0,0,0,1230,302,1,0,0,0,1231,1233,2,48,57,0,1232,1231,1,0,0,0,1233,1234,
+ 1,0,0,0,1234,1232,1,0,0,0,1234,1235,1,0,0,0,1235,1236,1,0,0,0,1236,1240,
+ 5,46,0,0,1237,1239,2,48,57,0,1238,1237,1,0,0,0,1239,1242,1,0,0,0,1240,
+ 1238,1,0,0,0,1240,1241,1,0,0,0,1241,1244,1,0,0,0,1242,1240,1,0,0,0,1243,
+ 1245,3,301,150,0,1244,1243,1,0,0,0,1244,1245,1,0,0,0,1245,1247,1,0,0,0,
+ 1246,1248,5,105,0,0,1247,1246,1,0,0,0,1247,1248,1,0,0,0,1248,1265,1,0,
+ 0,0,1249,1251,5,46,0,0,1250,1249,1,0,0,0,1250,1251,1,0,0,0,1251,1253,1,
+ 0,0,0,1252,1254,2,48,57,0,1253,1252,1,0,0,0,1254,1255,1,0,0,0,1255,1253,
+ 1,0,0,0,1255,1256,1,0,0,0,1256,1258,1,0,0,0,1257,1259,3,301,150,0,1258,
+ 1257,1,0,0,0,1258,1259,1,0,0,0,1259,1261,1,0,0,0,1260,1262,5,105,0,0,1261,
+ 1260,1,0,0,0,1261,1262,1,0,0,0,1262,1265,1,0,0,0,1263,1265,5,105,0,0,1264,
+ 1232,1,0,0,0,1264,1250,1,0,0,0,1264,1263,1,0,0,0,1265,304,1,0,0,0,1266,
+ 1267,5,67,0,0,1267,1277,5,67,0,0,1268,1269,5,82,0,0,1269,1277,5,82,0,0,
+ 1270,1271,5,81,0,0,1271,1277,5,81,0,0,1272,1273,5,90,0,0,1273,1277,5,90,
+ 0,0,1274,1275,5,66,0,0,1275,1277,5,66,0,0,1276,1266,1,0,0,0,1276,1268,
+ 1,0,0,0,1276,1270,1,0,0,0,1276,1272,1,0,0,0,1276,1274,1,0,0,0,1277,306,
+ 1,0,0,0,1278,1279,5,116,0,0,1279,1280,5,114,0,0,1280,1281,5,117,0,0,1281,
+ 1297,5,101,0,0,1282,1283,5,84,0,0,1283,1284,5,114,0,0,1284,1285,5,117,
+ 0,0,1285,1297,5,101,0,0,1286,1287,5,102,0,0,1287,1288,5,97,0,0,1288,1289,
+ 5,108,0,0,1289,1290,5,115,0,0,1290,1297,5,101,0,0,1291,1292,5,70,0,0,1292,
+ 1293,5,97,0,0,1293,1294,5,108,0,0,1294,1295,5,115,0,0,1295,1297,5,101,
+ 0,0,1296,1278,1,0,0,0,1296,1282,1,0,0,0,1296,1286,1,0,0,0,1296,1291,1,
+ 0,0,0,1297,308,1,0,0,0,1298,1299,5,78,0,0,1299,1300,5,97,0,0,1300,1301,
+ 5,78,0,0,1301,310,1,0,0,0,1302,1304,7,2,0,0,1303,1302,1,0,0,0,1304,1305,
+ 1,0,0,0,1305,1303,1,0,0,0,1305,1306,1,0,0,0,1306,1313,1,0,0,0,1307,1309,
+ 5,95,0,0,1308,1310,7,3,0,0,1309,1308,1,0,0,0,1310,1311,1,0,0,0,1311,1309,
+ 1,0,0,0,1311,1312,1,0,0,0,1312,1314,1,0,0,0,1313,1307,1,0,0,0,1313,1314,
+ 1,0,0,0,1314,312,1,0,0,0,1315,1316,5,47,0,0,1316,1317,5,47,0,0,1317,1321,
+ 1,0,0,0,1318,1320,8,4,0,0,1319,1318,1,0,0,0,1320,1323,1,0,0,0,1321,1319,
+ 1,0,0,0,1321,1322,1,0,0,0,1322,1328,1,0,0,0,1323,1321,1,0,0,0,1324,1326,
+ 5,13,0,0,1325,1324,1,0,0,0,1325,1326,1,0,0,0,1326,1327,1,0,0,0,1327,1329,
+ 5,10,0,0,1328,1325,1,0,0,0,1328,1329,1,0,0,0,1329,1342,1,0,0,0,1330,1331,
+ 5,47,0,0,1331,1332,5,42,0,0,1332,1336,1,0,0,0,1333,1335,9,0,0,0,1334,1333,
+ 1,0,0,0,1335,1338,1,0,0,0,1336,1337,1,0,0,0,1336,1334,1,0,0,0,1337,1339,
+ 1,0,0,0,1338,1336,1,0,0,0,1339,1340,5,42,0,0,1340,1342,5,47,0,0,1341,1315,
+ 1,0,0,0,1341,1330,1,0,0,0,1342,1343,1,0,0,0,1343,1344,6,156,0,0,1344,314,
+ 1,0,0,0,1345,1347,7,5,0,0,1346,1345,1,0,0,0,1347,1348,1,0,0,0,1348,1346,
+ 1,0,0,0,1348,1349,1,0,0,0,1349,1350,1,0,0,0,1350,1351,6,157,0,0,1351,316,
+ 1,0,0,0,25,0,1213,1218,1224,1229,1234,1240,1244,1247,1250,1255,1258,1261,
+ 1264,1276,1296,1305,1311,1313,1321,1325,1328,1336,1341,1348,1,6,0,0
};
public static readonly ATN _ATN =
diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.interp b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.interp
index ea7630b3d..1408b2b8d 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.interp
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.interp
@@ -138,6 +138,8 @@ null
'round('
'min('
'max('
+'argmax('
+'argmin('
'gcd('
'trunc('
'lcm('
@@ -305,6 +307,8 @@ null
null
null
null
+null
+null
NEWLINE
NUMBER
SPECIALSET
@@ -462,6 +466,8 @@ T__143
T__144
T__145
T__146
+T__147
+T__148
NEWLINE
EXPONENT
NUMBER
@@ -480,4 +486,4 @@ mode names:
DEFAULT_MODE
atn:
-[4, 0, 155, 1332, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 3, 147, 1194, 8, 147, 1, 147, 4, 147, 1197, 8, 147, 11, 147, 12, 147, 1198, 1, 147, 1, 147, 1, 148, 1, 148, 3, 148, 1205, 8, 148, 1, 148, 4, 148, 1208, 8, 148, 11, 148, 12, 148, 1209, 1, 149, 4, 149, 1213, 8, 149, 11, 149, 12, 149, 1214, 1, 149, 1, 149, 5, 149, 1219, 8, 149, 10, 149, 12, 149, 1222, 9, 149, 1, 149, 3, 149, 1225, 8, 149, 1, 149, 3, 149, 1228, 8, 149, 1, 149, 3, 149, 1231, 8, 149, 1, 149, 4, 149, 1234, 8, 149, 11, 149, 12, 149, 1235, 1, 149, 3, 149, 1239, 8, 149, 1, 149, 3, 149, 1242, 8, 149, 1, 149, 3, 149, 1245, 8, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 3, 150, 1257, 8, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 3, 151, 1277, 8, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 4, 153, 1284, 8, 153, 11, 153, 12, 153, 1285, 1, 153, 1, 153, 4, 153, 1290, 8, 153, 11, 153, 12, 153, 1291, 3, 153, 1294, 8, 153, 1, 154, 1, 154, 1, 154, 1, 154, 5, 154, 1300, 8, 154, 10, 154, 12, 154, 1303, 9, 154, 1, 154, 3, 154, 1306, 8, 154, 1, 154, 3, 154, 1309, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 5, 154, 1315, 8, 154, 10, 154, 12, 154, 1318, 9, 154, 1, 154, 1, 154, 3, 154, 1322, 8, 154, 1, 154, 1, 154, 1, 155, 4, 155, 1327, 8, 155, 11, 155, 12, 155, 1328, 1, 155, 1, 155, 1, 1316, 0, 156, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 0, 299, 149, 301, 150, 303, 151, 305, 152, 307, 153, 309, 154, 311, 155, 1, 0, 6, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 4, 0, 65, 90, 97, 122, 880, 1279, 7936, 8191, 5, 0, 48, 57, 65, 90, 97, 122, 880, 1279, 7936, 8191, 2, 0, 10, 10, 13, 13, 2, 0, 9, 9, 32, 32, 1360, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 1, 313, 1, 0, 0, 0, 3, 315, 1, 0, 0, 0, 5, 317, 1, 0, 0, 0, 7, 319, 1, 0, 0, 0, 9, 321, 1, 0, 0, 0, 11, 323, 1, 0, 0, 0, 13, 325, 1, 0, 0, 0, 15, 329, 1, 0, 0, 0, 17, 339, 1, 0, 0, 0, 19, 342, 1, 0, 0, 0, 21, 348, 1, 0, 0, 0, 23, 351, 1, 0, 0, 0, 25, 363, 1, 0, 0, 0, 27, 365, 1, 0, 0, 0, 29, 368, 1, 0, 0, 0, 31, 376, 1, 0, 0, 0, 33, 379, 1, 0, 0, 0, 35, 382, 1, 0, 0, 0, 37, 384, 1, 0, 0, 0, 39, 386, 1, 0, 0, 0, 41, 388, 1, 0, 0, 0, 43, 391, 1, 0, 0, 0, 45, 395, 1, 0, 0, 0, 47, 399, 1, 0, 0, 0, 49, 401, 1, 0, 0, 0, 51, 405, 1, 0, 0, 0, 53, 408, 1, 0, 0, 0, 55, 410, 1, 0, 0, 0, 57, 418, 1, 0, 0, 0, 59, 421, 1, 0, 0, 0, 61, 430, 1, 0, 0, 0, 63, 433, 1, 0, 0, 0, 65, 435, 1, 0, 0, 0, 67, 437, 1, 0, 0, 0, 69, 439, 1, 0, 0, 0, 71, 443, 1, 0, 0, 0, 73, 447, 1, 0, 0, 0, 75, 450, 1, 0, 0, 0, 77, 453, 1, 0, 0, 0, 79, 455, 1, 0, 0, 0, 81, 458, 1, 0, 0, 0, 83, 460, 1, 0, 0, 0, 85, 462, 1, 0, 0, 0, 87, 464, 1, 0, 0, 0, 89, 466, 1, 0, 0, 0, 91, 468, 1, 0, 0, 0, 93, 473, 1, 0, 0, 0, 95, 480, 1, 0, 0, 0, 97, 486, 1, 0, 0, 0, 99, 491, 1, 0, 0, 0, 101, 497, 1, 0, 0, 0, 103, 503, 1, 0, 0, 0, 105, 508, 1, 0, 0, 0, 107, 512, 1, 0, 0, 0, 109, 517, 1, 0, 0, 0, 111, 522, 1, 0, 0, 0, 113, 527, 1, 0, 0, 0, 115, 532, 1, 0, 0, 0, 117, 539, 1, 0, 0, 0, 119, 544, 1, 0, 0, 0, 121, 549, 1, 0, 0, 0, 123, 556, 1, 0, 0, 0, 125, 561, 1, 0, 0, 0, 127, 569, 1, 0, 0, 0, 129, 577, 1, 0, 0, 0, 131, 585, 1, 0, 0, 0, 133, 595, 1, 0, 0, 0, 135, 603, 1, 0, 0, 0, 137, 613, 1, 0, 0, 0, 139, 621, 1, 0, 0, 0, 141, 627, 1, 0, 0, 0, 143, 633, 1, 0, 0, 0, 145, 639, 1, 0, 0, 0, 147, 645, 1, 0, 0, 0, 149, 653, 1, 0, 0, 0, 151, 659, 1, 0, 0, 0, 153, 667, 1, 0, 0, 0, 155, 673, 1, 0, 0, 0, 157, 681, 1, 0, 0, 0, 159, 687, 1, 0, 0, 0, 161, 691, 1, 0, 0, 0, 163, 697, 1, 0, 0, 0, 165, 701, 1, 0, 0, 0, 167, 707, 1, 0, 0, 0, 169, 711, 1, 0, 0, 0, 171, 719, 1, 0, 0, 0, 173, 725, 1, 0, 0, 0, 175, 730, 1, 0, 0, 0, 177, 736, 1, 0, 0, 0, 179, 741, 1, 0, 0, 0, 181, 749, 1, 0, 0, 0, 183, 755, 1, 0, 0, 0, 185, 762, 1, 0, 0, 0, 187, 770, 1, 0, 0, 0, 189, 776, 1, 0, 0, 0, 191, 785, 1, 0, 0, 0, 193, 792, 1, 0, 0, 0, 195, 800, 1, 0, 0, 0, 197, 806, 1, 0, 0, 0, 199, 815, 1, 0, 0, 0, 201, 822, 1, 0, 0, 0, 203, 830, 1, 0, 0, 0, 205, 836, 1, 0, 0, 0, 207, 845, 1, 0, 0, 0, 209, 852, 1, 0, 0, 0, 211, 860, 1, 0, 0, 0, 213, 869, 1, 0, 0, 0, 215, 879, 1, 0, 0, 0, 217, 886, 1, 0, 0, 0, 219, 897, 1, 0, 0, 0, 221, 904, 1, 0, 0, 0, 223, 912, 1, 0, 0, 0, 225, 919, 1, 0, 0, 0, 227, 928, 1, 0, 0, 0, 229, 937, 1, 0, 0, 0, 231, 947, 1, 0, 0, 0, 233, 955, 1, 0, 0, 0, 235, 966, 1, 0, 0, 0, 237, 973, 1, 0, 0, 0, 239, 984, 1, 0, 0, 0, 241, 991, 1, 0, 0, 0, 243, 1003, 1, 0, 0, 0, 245, 1013, 1, 0, 0, 0, 247, 1020, 1, 0, 0, 0, 249, 1031, 1, 0, 0, 0, 251, 1043, 1, 0, 0, 0, 253, 1048, 1, 0, 0, 0, 255, 1057, 1, 0, 0, 0, 257, 1065, 1, 0, 0, 0, 259, 1070, 1, 0, 0, 0, 261, 1076, 1, 0, 0, 0, 263, 1081, 1, 0, 0, 0, 265, 1086, 1, 0, 0, 0, 267, 1093, 1, 0, 0, 0, 269, 1099, 1, 0, 0, 0, 271, 1108, 1, 0, 0, 0, 273, 1115, 1, 0, 0, 0, 275, 1120, 1, 0, 0, 0, 277, 1125, 1, 0, 0, 0, 279, 1130, 1, 0, 0, 0, 281, 1137, 1, 0, 0, 0, 283, 1142, 1, 0, 0, 0, 285, 1147, 1, 0, 0, 0, 287, 1158, 1, 0, 0, 0, 289, 1166, 1, 0, 0, 0, 291, 1177, 1, 0, 0, 0, 293, 1184, 1, 0, 0, 0, 295, 1196, 1, 0, 0, 0, 297, 1202, 1, 0, 0, 0, 299, 1244, 1, 0, 0, 0, 301, 1256, 1, 0, 0, 0, 303, 1276, 1, 0, 0, 0, 305, 1278, 1, 0, 0, 0, 307, 1283, 1, 0, 0, 0, 309, 1321, 1, 0, 0, 0, 311, 1326, 1, 0, 0, 0, 313, 314, 5, 33, 0, 0, 314, 2, 1, 0, 0, 0, 315, 316, 5, 94, 0, 0, 316, 4, 1, 0, 0, 0, 317, 318, 5, 45, 0, 0, 318, 6, 1, 0, 0, 0, 319, 320, 5, 43, 0, 0, 320, 8, 1, 0, 0, 0, 321, 322, 5, 42, 0, 0, 322, 10, 1, 0, 0, 0, 323, 324, 5, 47, 0, 0, 324, 12, 1, 0, 0, 0, 325, 326, 5, 109, 0, 0, 326, 327, 5, 111, 0, 0, 327, 328, 5, 100, 0, 0, 328, 14, 1, 0, 0, 0, 329, 330, 5, 105, 0, 0, 330, 331, 5, 110, 0, 0, 331, 332, 5, 116, 0, 0, 332, 333, 5, 101, 0, 0, 333, 334, 5, 114, 0, 0, 334, 335, 5, 115, 0, 0, 335, 336, 5, 101, 0, 0, 336, 337, 5, 99, 0, 0, 337, 338, 5, 116, 0, 0, 338, 16, 1, 0, 0, 0, 339, 340, 5, 47, 0, 0, 340, 341, 5, 92, 0, 0, 341, 18, 1, 0, 0, 0, 342, 343, 5, 117, 0, 0, 343, 344, 5, 110, 0, 0, 344, 345, 5, 105, 0, 0, 345, 346, 5, 116, 0, 0, 346, 347, 5, 101, 0, 0, 347, 20, 1, 0, 0, 0, 348, 349, 5, 92, 0, 0, 349, 350, 5, 47, 0, 0, 350, 22, 1, 0, 0, 0, 351, 352, 5, 115, 0, 0, 352, 353, 5, 101, 0, 0, 353, 354, 5, 116, 0, 0, 354, 355, 5, 115, 0, 0, 355, 356, 5, 117, 0, 0, 356, 357, 5, 98, 0, 0, 357, 358, 5, 116, 0, 0, 358, 359, 5, 114, 0, 0, 359, 360, 5, 97, 0, 0, 360, 361, 5, 99, 0, 0, 361, 362, 5, 116, 0, 0, 362, 24, 1, 0, 0, 0, 363, 364, 5, 92, 0, 0, 364, 26, 1, 0, 0, 0, 365, 366, 5, 105, 0, 0, 366, 367, 5, 110, 0, 0, 367, 28, 1, 0, 0, 0, 368, 369, 5, 100, 0, 0, 369, 370, 5, 105, 0, 0, 370, 371, 5, 118, 0, 0, 371, 372, 5, 105, 0, 0, 372, 373, 5, 100, 0, 0, 373, 374, 5, 101, 0, 0, 374, 375, 5, 115, 0, 0, 375, 30, 1, 0, 0, 0, 376, 377, 5, 62, 0, 0, 377, 378, 5, 61, 0, 0, 378, 32, 1, 0, 0, 0, 379, 380, 5, 60, 0, 0, 380, 381, 5, 61, 0, 0, 381, 34, 1, 0, 0, 0, 382, 383, 5, 62, 0, 0, 383, 36, 1, 0, 0, 0, 384, 385, 5, 60, 0, 0, 385, 38, 1, 0, 0, 0, 386, 387, 5, 61, 0, 0, 387, 40, 1, 0, 0, 0, 388, 389, 5, 60, 0, 0, 389, 390, 5, 62, 0, 0, 390, 42, 1, 0, 0, 0, 391, 392, 5, 110, 0, 0, 392, 393, 5, 111, 0, 0, 393, 394, 5, 116, 0, 0, 394, 44, 1, 0, 0, 0, 395, 396, 5, 97, 0, 0, 396, 397, 5, 110, 0, 0, 397, 398, 5, 100, 0, 0, 398, 46, 1, 0, 0, 0, 399, 400, 5, 38, 0, 0, 400, 48, 1, 0, 0, 0, 401, 402, 5, 120, 0, 0, 402, 403, 5, 111, 0, 0, 403, 404, 5, 114, 0, 0, 404, 50, 1, 0, 0, 0, 405, 406, 5, 111, 0, 0, 406, 407, 5, 114, 0, 0, 407, 52, 1, 0, 0, 0, 408, 409, 5, 124, 0, 0, 409, 54, 1, 0, 0, 0, 410, 411, 5, 105, 0, 0, 411, 412, 5, 109, 0, 0, 412, 413, 5, 112, 0, 0, 413, 414, 5, 108, 0, 0, 414, 415, 5, 105, 0, 0, 415, 416, 5, 101, 0, 0, 416, 417, 5, 115, 0, 0, 417, 56, 1, 0, 0, 0, 418, 419, 5, 45, 0, 0, 419, 420, 5, 62, 0, 0, 420, 58, 1, 0, 0, 0, 421, 422, 5, 112, 0, 0, 422, 423, 5, 114, 0, 0, 423, 424, 5, 111, 0, 0, 424, 425, 5, 118, 0, 0, 425, 426, 5, 105, 0, 0, 426, 427, 5, 100, 0, 0, 427, 428, 5, 101, 0, 0, 428, 429, 5, 100, 0, 0, 429, 60, 1, 0, 0, 0, 430, 431, 5, 61, 0, 0, 431, 432, 5, 62, 0, 0, 432, 62, 1, 0, 0, 0, 433, 434, 5, 44, 0, 0, 434, 64, 1, 0, 0, 0, 435, 436, 5, 59, 0, 0, 436, 66, 1, 0, 0, 0, 437, 438, 5, 58, 0, 0, 438, 68, 1, 0, 0, 0, 439, 440, 5, 43, 0, 0, 440, 441, 5, 111, 0, 0, 441, 442, 5, 111, 0, 0, 442, 70, 1, 0, 0, 0, 443, 444, 5, 45, 0, 0, 444, 445, 5, 111, 0, 0, 445, 446, 5, 111, 0, 0, 446, 72, 1, 0, 0, 0, 447, 448, 5, 40, 0, 0, 448, 449, 5, 124, 0, 0, 449, 74, 1, 0, 0, 0, 450, 451, 5, 124, 0, 0, 451, 452, 5, 41, 0, 0, 452, 76, 1, 0, 0, 0, 453, 454, 5, 91, 0, 0, 454, 78, 1, 0, 0, 0, 455, 456, 5, 93, 0, 0, 456, 457, 5, 84, 0, 0, 457, 80, 1, 0, 0, 0, 458, 459, 5, 93, 0, 0, 459, 82, 1, 0, 0, 0, 460, 461, 5, 40, 0, 0, 461, 84, 1, 0, 0, 0, 462, 463, 5, 41, 0, 0, 463, 86, 1, 0, 0, 0, 464, 465, 5, 123, 0, 0, 465, 88, 1, 0, 0, 0, 466, 467, 5, 125, 0, 0, 467, 90, 1, 0, 0, 0, 468, 469, 5, 108, 0, 0, 469, 470, 5, 111, 0, 0, 470, 471, 5, 103, 0, 0, 471, 472, 5, 40, 0, 0, 472, 92, 1, 0, 0, 0, 473, 474, 5, 108, 0, 0, 474, 475, 5, 111, 0, 0, 475, 476, 5, 103, 0, 0, 476, 477, 5, 49, 0, 0, 477, 478, 5, 48, 0, 0, 478, 479, 5, 40, 0, 0, 479, 94, 1, 0, 0, 0, 480, 481, 5, 108, 0, 0, 481, 482, 5, 111, 0, 0, 482, 483, 5, 103, 0, 0, 483, 484, 5, 50, 0, 0, 484, 485, 5, 40, 0, 0, 485, 96, 1, 0, 0, 0, 486, 487, 5, 112, 0, 0, 487, 488, 5, 111, 0, 0, 488, 489, 5, 119, 0, 0, 489, 490, 5, 40, 0, 0, 490, 98, 1, 0, 0, 0, 491, 492, 5, 115, 0, 0, 492, 493, 5, 113, 0, 0, 493, 494, 5, 114, 0, 0, 494, 495, 5, 116, 0, 0, 495, 496, 5, 40, 0, 0, 496, 100, 1, 0, 0, 0, 497, 498, 5, 99, 0, 0, 498, 499, 5, 98, 0, 0, 499, 500, 5, 114, 0, 0, 500, 501, 5, 116, 0, 0, 501, 502, 5, 40, 0, 0, 502, 102, 1, 0, 0, 0, 503, 504, 5, 115, 0, 0, 504, 505, 5, 113, 0, 0, 505, 506, 5, 114, 0, 0, 506, 507, 5, 40, 0, 0, 507, 104, 1, 0, 0, 0, 508, 509, 5, 108, 0, 0, 509, 510, 5, 110, 0, 0, 510, 511, 5, 40, 0, 0, 511, 106, 1, 0, 0, 0, 512, 513, 5, 101, 0, 0, 513, 514, 5, 120, 0, 0, 514, 515, 5, 112, 0, 0, 515, 516, 5, 40, 0, 0, 516, 108, 1, 0, 0, 0, 517, 518, 5, 115, 0, 0, 518, 519, 5, 105, 0, 0, 519, 520, 5, 110, 0, 0, 520, 521, 5, 40, 0, 0, 521, 110, 1, 0, 0, 0, 522, 523, 5, 99, 0, 0, 523, 524, 5, 111, 0, 0, 524, 525, 5, 115, 0, 0, 525, 526, 5, 40, 0, 0, 526, 112, 1, 0, 0, 0, 527, 528, 5, 116, 0, 0, 528, 529, 5, 97, 0, 0, 529, 530, 5, 110, 0, 0, 530, 531, 5, 40, 0, 0, 531, 114, 1, 0, 0, 0, 532, 533, 5, 99, 0, 0, 533, 534, 5, 111, 0, 0, 534, 535, 5, 116, 0, 0, 535, 536, 5, 97, 0, 0, 536, 537, 5, 110, 0, 0, 537, 538, 5, 40, 0, 0, 538, 116, 1, 0, 0, 0, 539, 540, 5, 99, 0, 0, 540, 541, 5, 111, 0, 0, 541, 542, 5, 116, 0, 0, 542, 543, 5, 40, 0, 0, 543, 118, 1, 0, 0, 0, 544, 545, 5, 115, 0, 0, 545, 546, 5, 101, 0, 0, 546, 547, 5, 99, 0, 0, 547, 548, 5, 40, 0, 0, 548, 120, 1, 0, 0, 0, 549, 550, 5, 99, 0, 0, 550, 551, 5, 111, 0, 0, 551, 552, 5, 115, 0, 0, 552, 553, 5, 101, 0, 0, 553, 554, 5, 99, 0, 0, 554, 555, 5, 40, 0, 0, 555, 122, 1, 0, 0, 0, 556, 557, 5, 99, 0, 0, 557, 558, 5, 115, 0, 0, 558, 559, 5, 99, 0, 0, 559, 560, 5, 40, 0, 0, 560, 124, 1, 0, 0, 0, 561, 562, 5, 97, 0, 0, 562, 563, 5, 114, 0, 0, 563, 564, 5, 99, 0, 0, 564, 565, 5, 115, 0, 0, 565, 566, 5, 105, 0, 0, 566, 567, 5, 110, 0, 0, 567, 568, 5, 40, 0, 0, 568, 126, 1, 0, 0, 0, 569, 570, 5, 97, 0, 0, 570, 571, 5, 114, 0, 0, 571, 572, 5, 99, 0, 0, 572, 573, 5, 99, 0, 0, 573, 574, 5, 111, 0, 0, 574, 575, 5, 115, 0, 0, 575, 576, 5, 40, 0, 0, 576, 128, 1, 0, 0, 0, 577, 578, 5, 97, 0, 0, 578, 579, 5, 114, 0, 0, 579, 580, 5, 99, 0, 0, 580, 581, 5, 116, 0, 0, 581, 582, 5, 97, 0, 0, 582, 583, 5, 110, 0, 0, 583, 584, 5, 40, 0, 0, 584, 130, 1, 0, 0, 0, 585, 586, 5, 97, 0, 0, 586, 587, 5, 114, 0, 0, 587, 588, 5, 99, 0, 0, 588, 589, 5, 99, 0, 0, 589, 590, 5, 111, 0, 0, 590, 591, 5, 116, 0, 0, 591, 592, 5, 97, 0, 0, 592, 593, 5, 110, 0, 0, 593, 594, 5, 40, 0, 0, 594, 132, 1, 0, 0, 0, 595, 596, 5, 97, 0, 0, 596, 597, 5, 114, 0, 0, 597, 598, 5, 99, 0, 0, 598, 599, 5, 115, 0, 0, 599, 600, 5, 101, 0, 0, 600, 601, 5, 99, 0, 0, 601, 602, 5, 40, 0, 0, 602, 134, 1, 0, 0, 0, 603, 604, 5, 97, 0, 0, 604, 605, 5, 114, 0, 0, 605, 606, 5, 99, 0, 0, 606, 607, 5, 99, 0, 0, 607, 608, 5, 111, 0, 0, 608, 609, 5, 115, 0, 0, 609, 610, 5, 101, 0, 0, 610, 611, 5, 99, 0, 0, 611, 612, 5, 40, 0, 0, 612, 136, 1, 0, 0, 0, 613, 614, 5, 97, 0, 0, 614, 615, 5, 114, 0, 0, 615, 616, 5, 99, 0, 0, 616, 617, 5, 99, 0, 0, 617, 618, 5, 115, 0, 0, 618, 619, 5, 99, 0, 0, 619, 620, 5, 40, 0, 0, 620, 138, 1, 0, 0, 0, 621, 622, 5, 97, 0, 0, 622, 623, 5, 99, 0, 0, 623, 624, 5, 115, 0, 0, 624, 625, 5, 99, 0, 0, 625, 626, 5, 40, 0, 0, 626, 140, 1, 0, 0, 0, 627, 628, 5, 97, 0, 0, 628, 629, 5, 115, 0, 0, 629, 630, 5, 105, 0, 0, 630, 631, 5, 110, 0, 0, 631, 632, 5, 40, 0, 0, 632, 142, 1, 0, 0, 0, 633, 634, 5, 97, 0, 0, 634, 635, 5, 99, 0, 0, 635, 636, 5, 111, 0, 0, 636, 637, 5, 115, 0, 0, 637, 638, 5, 40, 0, 0, 638, 144, 1, 0, 0, 0, 639, 640, 5, 97, 0, 0, 640, 641, 5, 116, 0, 0, 641, 642, 5, 97, 0, 0, 642, 643, 5, 110, 0, 0, 643, 644, 5, 40, 0, 0, 644, 146, 1, 0, 0, 0, 645, 646, 5, 97, 0, 0, 646, 647, 5, 99, 0, 0, 647, 648, 5, 111, 0, 0, 648, 649, 5, 116, 0, 0, 649, 650, 5, 97, 0, 0, 650, 651, 5, 110, 0, 0, 651, 652, 5, 40, 0, 0, 652, 148, 1, 0, 0, 0, 653, 654, 5, 97, 0, 0, 654, 655, 5, 115, 0, 0, 655, 656, 5, 101, 0, 0, 656, 657, 5, 99, 0, 0, 657, 658, 5, 40, 0, 0, 658, 150, 1, 0, 0, 0, 659, 660, 5, 97, 0, 0, 660, 661, 5, 99, 0, 0, 661, 662, 5, 111, 0, 0, 662, 663, 5, 115, 0, 0, 663, 664, 5, 101, 0, 0, 664, 665, 5, 99, 0, 0, 665, 666, 5, 40, 0, 0, 666, 152, 1, 0, 0, 0, 667, 668, 5, 97, 0, 0, 668, 669, 5, 99, 0, 0, 669, 670, 5, 111, 0, 0, 670, 671, 5, 116, 0, 0, 671, 672, 5, 40, 0, 0, 672, 154, 1, 0, 0, 0, 673, 674, 5, 97, 0, 0, 674, 675, 5, 114, 0, 0, 675, 676, 5, 99, 0, 0, 676, 677, 5, 99, 0, 0, 677, 678, 5, 111, 0, 0, 678, 679, 5, 116, 0, 0, 679, 680, 5, 40, 0, 0, 680, 156, 1, 0, 0, 0, 681, 682, 5, 115, 0, 0, 682, 683, 5, 105, 0, 0, 683, 684, 5, 110, 0, 0, 684, 685, 5, 104, 0, 0, 685, 686, 5, 40, 0, 0, 686, 158, 1, 0, 0, 0, 687, 688, 5, 115, 0, 0, 688, 689, 5, 104, 0, 0, 689, 690, 5, 40, 0, 0, 690, 160, 1, 0, 0, 0, 691, 692, 5, 99, 0, 0, 692, 693, 5, 111, 0, 0, 693, 694, 5, 115, 0, 0, 694, 695, 5, 104, 0, 0, 695, 696, 5, 40, 0, 0, 696, 162, 1, 0, 0, 0, 697, 698, 5, 99, 0, 0, 698, 699, 5, 104, 0, 0, 699, 700, 5, 40, 0, 0, 700, 164, 1, 0, 0, 0, 701, 702, 5, 116, 0, 0, 702, 703, 5, 97, 0, 0, 703, 704, 5, 110, 0, 0, 704, 705, 5, 104, 0, 0, 705, 706, 5, 40, 0, 0, 706, 166, 1, 0, 0, 0, 707, 708, 5, 116, 0, 0, 708, 709, 5, 104, 0, 0, 709, 710, 5, 40, 0, 0, 710, 168, 1, 0, 0, 0, 711, 712, 5, 99, 0, 0, 712, 713, 5, 111, 0, 0, 713, 714, 5, 116, 0, 0, 714, 715, 5, 97, 0, 0, 715, 716, 5, 110, 0, 0, 716, 717, 5, 104, 0, 0, 717, 718, 5, 40, 0, 0, 718, 170, 1, 0, 0, 0, 719, 720, 5, 99, 0, 0, 720, 721, 5, 111, 0, 0, 721, 722, 5, 116, 0, 0, 722, 723, 5, 104, 0, 0, 723, 724, 5, 40, 0, 0, 724, 172, 1, 0, 0, 0, 725, 726, 5, 99, 0, 0, 726, 727, 5, 116, 0, 0, 727, 728, 5, 104, 0, 0, 728, 729, 5, 40, 0, 0, 729, 174, 1, 0, 0, 0, 730, 731, 5, 115, 0, 0, 731, 732, 5, 101, 0, 0, 732, 733, 5, 99, 0, 0, 733, 734, 5, 104, 0, 0, 734, 735, 5, 40, 0, 0, 735, 176, 1, 0, 0, 0, 736, 737, 5, 115, 0, 0, 737, 738, 5, 99, 0, 0, 738, 739, 5, 104, 0, 0, 739, 740, 5, 40, 0, 0, 740, 178, 1, 0, 0, 0, 741, 742, 5, 99, 0, 0, 742, 743, 5, 111, 0, 0, 743, 744, 5, 115, 0, 0, 744, 745, 5, 101, 0, 0, 745, 746, 5, 99, 0, 0, 746, 747, 5, 104, 0, 0, 747, 748, 5, 40, 0, 0, 748, 180, 1, 0, 0, 0, 749, 750, 5, 99, 0, 0, 750, 751, 5, 115, 0, 0, 751, 752, 5, 99, 0, 0, 752, 753, 5, 104, 0, 0, 753, 754, 5, 40, 0, 0, 754, 182, 1, 0, 0, 0, 755, 756, 5, 97, 0, 0, 756, 757, 5, 115, 0, 0, 757, 758, 5, 105, 0, 0, 758, 759, 5, 110, 0, 0, 759, 760, 5, 104, 0, 0, 760, 761, 5, 40, 0, 0, 761, 184, 1, 0, 0, 0, 762, 763, 5, 97, 0, 0, 763, 764, 5, 114, 0, 0, 764, 765, 5, 115, 0, 0, 765, 766, 5, 105, 0, 0, 766, 767, 5, 110, 0, 0, 767, 768, 5, 104, 0, 0, 768, 769, 5, 40, 0, 0, 769, 186, 1, 0, 0, 0, 770, 771, 5, 97, 0, 0, 771, 772, 5, 114, 0, 0, 772, 773, 5, 115, 0, 0, 773, 774, 5, 104, 0, 0, 774, 775, 5, 40, 0, 0, 775, 188, 1, 0, 0, 0, 776, 777, 5, 97, 0, 0, 777, 778, 5, 114, 0, 0, 778, 779, 5, 99, 0, 0, 779, 780, 5, 115, 0, 0, 780, 781, 5, 105, 0, 0, 781, 782, 5, 110, 0, 0, 782, 783, 5, 104, 0, 0, 783, 784, 5, 40, 0, 0, 784, 190, 1, 0, 0, 0, 785, 786, 5, 97, 0, 0, 786, 787, 5, 99, 0, 0, 787, 788, 5, 111, 0, 0, 788, 789, 5, 115, 0, 0, 789, 790, 5, 104, 0, 0, 790, 791, 5, 40, 0, 0, 791, 192, 1, 0, 0, 0, 792, 793, 5, 97, 0, 0, 793, 794, 5, 114, 0, 0, 794, 795, 5, 99, 0, 0, 795, 796, 5, 111, 0, 0, 796, 797, 5, 115, 0, 0, 797, 798, 5, 104, 0, 0, 798, 799, 5, 40, 0, 0, 799, 194, 1, 0, 0, 0, 800, 801, 5, 97, 0, 0, 801, 802, 5, 114, 0, 0, 802, 803, 5, 99, 0, 0, 803, 804, 5, 104, 0, 0, 804, 805, 5, 40, 0, 0, 805, 196, 1, 0, 0, 0, 806, 807, 5, 97, 0, 0, 807, 808, 5, 114, 0, 0, 808, 809, 5, 99, 0, 0, 809, 810, 5, 99, 0, 0, 810, 811, 5, 111, 0, 0, 811, 812, 5, 115, 0, 0, 812, 813, 5, 104, 0, 0, 813, 814, 5, 40, 0, 0, 814, 198, 1, 0, 0, 0, 815, 816, 5, 97, 0, 0, 816, 817, 5, 116, 0, 0, 817, 818, 5, 97, 0, 0, 818, 819, 5, 110, 0, 0, 819, 820, 5, 104, 0, 0, 820, 821, 5, 40, 0, 0, 821, 200, 1, 0, 0, 0, 822, 823, 5, 97, 0, 0, 823, 824, 5, 114, 0, 0, 824, 825, 5, 116, 0, 0, 825, 826, 5, 97, 0, 0, 826, 827, 5, 110, 0, 0, 827, 828, 5, 104, 0, 0, 828, 829, 5, 40, 0, 0, 829, 202, 1, 0, 0, 0, 830, 831, 5, 97, 0, 0, 831, 832, 5, 114, 0, 0, 832, 833, 5, 116, 0, 0, 833, 834, 5, 104, 0, 0, 834, 835, 5, 40, 0, 0, 835, 204, 1, 0, 0, 0, 836, 837, 5, 97, 0, 0, 837, 838, 5, 114, 0, 0, 838, 839, 5, 99, 0, 0, 839, 840, 5, 116, 0, 0, 840, 841, 5, 97, 0, 0, 841, 842, 5, 110, 0, 0, 842, 843, 5, 104, 0, 0, 843, 844, 5, 40, 0, 0, 844, 206, 1, 0, 0, 0, 845, 846, 5, 97, 0, 0, 846, 847, 5, 99, 0, 0, 847, 848, 5, 111, 0, 0, 848, 849, 5, 116, 0, 0, 849, 850, 5, 104, 0, 0, 850, 851, 5, 40, 0, 0, 851, 208, 1, 0, 0, 0, 852, 853, 5, 97, 0, 0, 853, 854, 5, 114, 0, 0, 854, 855, 5, 99, 0, 0, 855, 856, 5, 111, 0, 0, 856, 857, 5, 116, 0, 0, 857, 858, 5, 104, 0, 0, 858, 859, 5, 40, 0, 0, 859, 210, 1, 0, 0, 0, 860, 861, 5, 97, 0, 0, 861, 862, 5, 99, 0, 0, 862, 863, 5, 111, 0, 0, 863, 864, 5, 116, 0, 0, 864, 865, 5, 97, 0, 0, 865, 866, 5, 110, 0, 0, 866, 867, 5, 104, 0, 0, 867, 868, 5, 40, 0, 0, 868, 212, 1, 0, 0, 0, 869, 870, 5, 97, 0, 0, 870, 871, 5, 114, 0, 0, 871, 872, 5, 99, 0, 0, 872, 873, 5, 111, 0, 0, 873, 874, 5, 116, 0, 0, 874, 875, 5, 97, 0, 0, 875, 876, 5, 110, 0, 0, 876, 877, 5, 104, 0, 0, 877, 878, 5, 40, 0, 0, 878, 214, 1, 0, 0, 0, 879, 880, 5, 97, 0, 0, 880, 881, 5, 114, 0, 0, 881, 882, 5, 99, 0, 0, 882, 883, 5, 116, 0, 0, 883, 884, 5, 104, 0, 0, 884, 885, 5, 40, 0, 0, 885, 216, 1, 0, 0, 0, 886, 887, 5, 97, 0, 0, 887, 888, 5, 114, 0, 0, 888, 889, 5, 99, 0, 0, 889, 890, 5, 99, 0, 0, 890, 891, 5, 111, 0, 0, 891, 892, 5, 116, 0, 0, 892, 893, 5, 97, 0, 0, 893, 894, 5, 110, 0, 0, 894, 895, 5, 104, 0, 0, 895, 896, 5, 40, 0, 0, 896, 218, 1, 0, 0, 0, 897, 898, 5, 97, 0, 0, 898, 899, 5, 115, 0, 0, 899, 900, 5, 101, 0, 0, 900, 901, 5, 99, 0, 0, 901, 902, 5, 104, 0, 0, 902, 903, 5, 40, 0, 0, 903, 220, 1, 0, 0, 0, 904, 905, 5, 97, 0, 0, 905, 906, 5, 114, 0, 0, 906, 907, 5, 115, 0, 0, 907, 908, 5, 101, 0, 0, 908, 909, 5, 99, 0, 0, 909, 910, 5, 104, 0, 0, 910, 911, 5, 40, 0, 0, 911, 222, 1, 0, 0, 0, 912, 913, 5, 97, 0, 0, 913, 914, 5, 114, 0, 0, 914, 915, 5, 115, 0, 0, 915, 916, 5, 99, 0, 0, 916, 917, 5, 104, 0, 0, 917, 918, 5, 40, 0, 0, 918, 224, 1, 0, 0, 0, 919, 920, 5, 97, 0, 0, 920, 921, 5, 114, 0, 0, 921, 922, 5, 99, 0, 0, 922, 923, 5, 115, 0, 0, 923, 924, 5, 101, 0, 0, 924, 925, 5, 99, 0, 0, 925, 926, 5, 104, 0, 0, 926, 927, 5, 40, 0, 0, 927, 226, 1, 0, 0, 0, 928, 929, 5, 97, 0, 0, 929, 930, 5, 99, 0, 0, 930, 931, 5, 111, 0, 0, 931, 932, 5, 115, 0, 0, 932, 933, 5, 101, 0, 0, 933, 934, 5, 99, 0, 0, 934, 935, 5, 104, 0, 0, 935, 936, 5, 40, 0, 0, 936, 228, 1, 0, 0, 0, 937, 938, 5, 97, 0, 0, 938, 939, 5, 114, 0, 0, 939, 940, 5, 99, 0, 0, 940, 941, 5, 111, 0, 0, 941, 942, 5, 115, 0, 0, 942, 943, 5, 101, 0, 0, 943, 944, 5, 99, 0, 0, 944, 945, 5, 104, 0, 0, 945, 946, 5, 40, 0, 0, 946, 230, 1, 0, 0, 0, 947, 948, 5, 97, 0, 0, 948, 949, 5, 114, 0, 0, 949, 950, 5, 99, 0, 0, 950, 951, 5, 115, 0, 0, 951, 952, 5, 99, 0, 0, 952, 953, 5, 104, 0, 0, 953, 954, 5, 40, 0, 0, 954, 232, 1, 0, 0, 0, 955, 956, 5, 97, 0, 0, 956, 957, 5, 114, 0, 0, 957, 958, 5, 99, 0, 0, 958, 959, 5, 99, 0, 0, 959, 960, 5, 111, 0, 0, 960, 961, 5, 115, 0, 0, 961, 962, 5, 101, 0, 0, 962, 963, 5, 99, 0, 0, 963, 964, 5, 104, 0, 0, 964, 965, 5, 40, 0, 0, 965, 234, 1, 0, 0, 0, 966, 967, 5, 97, 0, 0, 967, 968, 5, 99, 0, 0, 968, 969, 5, 115, 0, 0, 969, 970, 5, 99, 0, 0, 970, 971, 5, 104, 0, 0, 971, 972, 5, 40, 0, 0, 972, 236, 1, 0, 0, 0, 973, 974, 5, 102, 0, 0, 974, 975, 5, 97, 0, 0, 975, 976, 5, 99, 0, 0, 976, 977, 5, 116, 0, 0, 977, 978, 5, 111, 0, 0, 978, 979, 5, 114, 0, 0, 979, 980, 5, 105, 0, 0, 980, 981, 5, 97, 0, 0, 981, 982, 5, 108, 0, 0, 982, 983, 5, 40, 0, 0, 983, 238, 1, 0, 0, 0, 984, 985, 5, 103, 0, 0, 985, 986, 5, 97, 0, 0, 986, 987, 5, 109, 0, 0, 987, 988, 5, 109, 0, 0, 988, 989, 5, 97, 0, 0, 989, 990, 5, 40, 0, 0, 990, 240, 1, 0, 0, 0, 991, 992, 5, 100, 0, 0, 992, 993, 5, 101, 0, 0, 993, 994, 5, 114, 0, 0, 994, 995, 5, 105, 0, 0, 995, 996, 5, 118, 0, 0, 996, 997, 5, 97, 0, 0, 997, 998, 5, 116, 0, 0, 998, 999, 5, 105, 0, 0, 999, 1000, 5, 118, 0, 0, 1000, 1001, 5, 101, 0, 0, 1001, 1002, 5, 40, 0, 0, 1002, 242, 1, 0, 0, 0, 1003, 1004, 5, 105, 0, 0, 1004, 1005, 5, 110, 0, 0, 1005, 1006, 5, 116, 0, 0, 1006, 1007, 5, 101, 0, 0, 1007, 1008, 5, 103, 0, 0, 1008, 1009, 5, 114, 0, 0, 1009, 1010, 5, 97, 0, 0, 1010, 1011, 5, 108, 0, 0, 1011, 1012, 5, 40, 0, 0, 1012, 244, 1, 0, 0, 0, 1013, 1014, 5, 108, 0, 0, 1014, 1015, 5, 105, 0, 0, 1015, 1016, 5, 109, 0, 0, 1016, 1017, 5, 105, 0, 0, 1017, 1018, 5, 116, 0, 0, 1018, 1019, 5, 40, 0, 0, 1019, 246, 1, 0, 0, 0, 1020, 1021, 5, 108, 0, 0, 1021, 1022, 5, 105, 0, 0, 1022, 1023, 5, 109, 0, 0, 1023, 1024, 5, 105, 0, 0, 1024, 1025, 5, 116, 0, 0, 1025, 1026, 5, 108, 0, 0, 1026, 1027, 5, 101, 0, 0, 1027, 1028, 5, 102, 0, 0, 1028, 1029, 5, 116, 0, 0, 1029, 1030, 5, 40, 0, 0, 1030, 248, 1, 0, 0, 0, 1031, 1032, 5, 108, 0, 0, 1032, 1033, 5, 105, 0, 0, 1033, 1034, 5, 109, 0, 0, 1034, 1035, 5, 105, 0, 0, 1035, 1036, 5, 116, 0, 0, 1036, 1037, 5, 114, 0, 0, 1037, 1038, 5, 105, 0, 0, 1038, 1039, 5, 103, 0, 0, 1039, 1040, 5, 104, 0, 0, 1040, 1041, 5, 116, 0, 0, 1041, 1042, 5, 40, 0, 0, 1042, 250, 1, 0, 0, 0, 1043, 1044, 5, 115, 0, 0, 1044, 1045, 5, 117, 0, 0, 1045, 1046, 5, 109, 0, 0, 1046, 1047, 5, 40, 0, 0, 1047, 252, 1, 0, 0, 0, 1048, 1049, 5, 112, 0, 0, 1049, 1050, 5, 114, 0, 0, 1050, 1051, 5, 111, 0, 0, 1051, 1052, 5, 100, 0, 0, 1052, 1053, 5, 117, 0, 0, 1053, 1054, 5, 99, 0, 0, 1054, 1055, 5, 116, 0, 0, 1055, 1056, 5, 40, 0, 0, 1056, 254, 1, 0, 0, 0, 1057, 1058, 5, 115, 0, 0, 1058, 1059, 5, 105, 0, 0, 1059, 1060, 5, 103, 0, 0, 1060, 1061, 5, 110, 0, 0, 1061, 1062, 5, 117, 0, 0, 1062, 1063, 5, 109, 0, 0, 1063, 1064, 5, 40, 0, 0, 1064, 256, 1, 0, 0, 0, 1065, 1066, 5, 115, 0, 0, 1066, 1067, 5, 103, 0, 0, 1067, 1068, 5, 110, 0, 0, 1068, 1069, 5, 40, 0, 0, 1069, 258, 1, 0, 0, 0, 1070, 1071, 5, 115, 0, 0, 1071, 1072, 5, 105, 0, 0, 1072, 1073, 5, 103, 0, 0, 1073, 1074, 5, 110, 0, 0, 1074, 1075, 5, 40, 0, 0, 1075, 260, 1, 0, 0, 0, 1076, 1077, 5, 97, 0, 0, 1077, 1078, 5, 98, 0, 0, 1078, 1079, 5, 115, 0, 0, 1079, 1080, 5, 40, 0, 0, 1080, 262, 1, 0, 0, 0, 1081, 1082, 5, 112, 0, 0, 1082, 1083, 5, 104, 0, 0, 1083, 1084, 5, 105, 0, 0, 1084, 1085, 5, 40, 0, 0, 1085, 264, 1, 0, 0, 0, 1086, 1087, 5, 102, 0, 0, 1087, 1088, 5, 108, 0, 0, 1088, 1089, 5, 111, 0, 0, 1089, 1090, 5, 111, 0, 0, 1090, 1091, 5, 114, 0, 0, 1091, 1092, 5, 40, 0, 0, 1092, 266, 1, 0, 0, 0, 1093, 1094, 5, 99, 0, 0, 1094, 1095, 5, 101, 0, 0, 1095, 1096, 5, 105, 0, 0, 1096, 1097, 5, 108, 0, 0, 1097, 1098, 5, 40, 0, 0, 1098, 268, 1, 0, 0, 0, 1099, 1100, 5, 99, 0, 0, 1100, 1101, 5, 101, 0, 0, 1101, 1102, 5, 105, 0, 0, 1102, 1103, 5, 108, 0, 0, 1103, 1104, 5, 105, 0, 0, 1104, 1105, 5, 110, 0, 0, 1105, 1106, 5, 103, 0, 0, 1106, 1107, 5, 40, 0, 0, 1107, 270, 1, 0, 0, 0, 1108, 1109, 5, 114, 0, 0, 1109, 1110, 5, 111, 0, 0, 1110, 1111, 5, 117, 0, 0, 1111, 1112, 5, 110, 0, 0, 1112, 1113, 5, 100, 0, 0, 1113, 1114, 5, 40, 0, 0, 1114, 272, 1, 0, 0, 0, 1115, 1116, 5, 109, 0, 0, 1116, 1117, 5, 105, 0, 0, 1117, 1118, 5, 110, 0, 0, 1118, 1119, 5, 40, 0, 0, 1119, 274, 1, 0, 0, 0, 1120, 1121, 5, 109, 0, 0, 1121, 1122, 5, 97, 0, 0, 1122, 1123, 5, 120, 0, 0, 1123, 1124, 5, 40, 0, 0, 1124, 276, 1, 0, 0, 0, 1125, 1126, 5, 103, 0, 0, 1126, 1127, 5, 99, 0, 0, 1127, 1128, 5, 100, 0, 0, 1128, 1129, 5, 40, 0, 0, 1129, 278, 1, 0, 0, 0, 1130, 1131, 5, 116, 0, 0, 1131, 1132, 5, 114, 0, 0, 1132, 1133, 5, 117, 0, 0, 1133, 1134, 5, 110, 0, 0, 1134, 1135, 5, 99, 0, 0, 1135, 1136, 5, 40, 0, 0, 1136, 280, 1, 0, 0, 0, 1137, 1138, 5, 108, 0, 0, 1138, 1139, 5, 99, 0, 0, 1139, 1140, 5, 109, 0, 0, 1140, 1141, 5, 40, 0, 0, 1141, 282, 1, 0, 0, 0, 1142, 1143, 5, 101, 0, 0, 1143, 1144, 5, 114, 0, 0, 1144, 1145, 5, 102, 0, 0, 1145, 1146, 5, 40, 0, 0, 1146, 284, 1, 0, 0, 0, 1147, 1148, 5, 99, 0, 0, 1148, 1149, 5, 111, 0, 0, 1149, 1150, 5, 110, 0, 0, 1150, 1151, 5, 106, 0, 0, 1151, 1152, 5, 117, 0, 0, 1152, 1153, 5, 103, 0, 0, 1153, 1154, 5, 97, 0, 0, 1154, 1155, 5, 116, 0, 0, 1155, 1156, 5, 101, 0, 0, 1156, 1157, 5, 40, 0, 0, 1157, 286, 1, 0, 0, 0, 1158, 1159, 5, 100, 0, 0, 1159, 1160, 5, 111, 0, 0, 1160, 1161, 5, 109, 0, 0, 1161, 1162, 5, 97, 0, 0, 1162, 1163, 5, 105, 0, 0, 1163, 1164, 5, 110, 0, 0, 1164, 1165, 5, 40, 0, 0, 1165, 288, 1, 0, 0, 0, 1166, 1167, 5, 112, 0, 0, 1167, 1168, 5, 105, 0, 0, 1168, 1169, 5, 101, 0, 0, 1169, 1170, 5, 99, 0, 0, 1170, 1171, 5, 101, 0, 0, 1171, 1172, 5, 119, 0, 0, 1172, 1173, 5, 105, 0, 0, 1173, 1174, 5, 115, 0, 0, 1174, 1175, 5, 101, 0, 0, 1175, 1176, 5, 40, 0, 0, 1176, 290, 1, 0, 0, 0, 1177, 1178, 5, 97, 0, 0, 1178, 1179, 5, 112, 0, 0, 1179, 1180, 5, 112, 0, 0, 1180, 1181, 5, 108, 0, 0, 1181, 1182, 5, 121, 0, 0, 1182, 1183, 5, 40, 0, 0, 1183, 292, 1, 0, 0, 0, 1184, 1185, 5, 108, 0, 0, 1185, 1186, 5, 97, 0, 0, 1186, 1187, 5, 109, 0, 0, 1187, 1188, 5, 98, 0, 0, 1188, 1189, 5, 100, 0, 0, 1189, 1190, 5, 97, 0, 0, 1190, 1191, 5, 40, 0, 0, 1191, 294, 1, 0, 0, 0, 1192, 1194, 5, 13, 0, 0, 1193, 1192, 1, 0, 0, 0, 1193, 1194, 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1197, 5, 10, 0, 0, 1196, 1193, 1, 0, 0, 0, 1197, 1198, 1, 0, 0, 0, 1198, 1196, 1, 0, 0, 0, 1198, 1199, 1, 0, 0, 0, 1199, 1200, 1, 0, 0, 0, 1200, 1201, 6, 147, 0, 0, 1201, 296, 1, 0, 0, 0, 1202, 1204, 7, 0, 0, 0, 1203, 1205, 7, 1, 0, 0, 1204, 1203, 1, 0, 0, 0, 1204, 1205, 1, 0, 0, 0, 1205, 1207, 1, 0, 0, 0, 1206, 1208, 2, 48, 57, 0, 1207, 1206, 1, 0, 0, 0, 1208, 1209, 1, 0, 0, 0, 1209, 1207, 1, 0, 0, 0, 1209, 1210, 1, 0, 0, 0, 1210, 298, 1, 0, 0, 0, 1211, 1213, 2, 48, 57, 0, 1212, 1211, 1, 0, 0, 0, 1213, 1214, 1, 0, 0, 0, 1214, 1212, 1, 0, 0, 0, 1214, 1215, 1, 0, 0, 0, 1215, 1216, 1, 0, 0, 0, 1216, 1220, 5, 46, 0, 0, 1217, 1219, 2, 48, 57, 0, 1218, 1217, 1, 0, 0, 0, 1219, 1222, 1, 0, 0, 0, 1220, 1218, 1, 0, 0, 0, 1220, 1221, 1, 0, 0, 0, 1221, 1224, 1, 0, 0, 0, 1222, 1220, 1, 0, 0, 0, 1223, 1225, 3, 297, 148, 0, 1224, 1223, 1, 0, 0, 0, 1224, 1225, 1, 0, 0, 0, 1225, 1227, 1, 0, 0, 0, 1226, 1228, 5, 105, 0, 0, 1227, 1226, 1, 0, 0, 0, 1227, 1228, 1, 0, 0, 0, 1228, 1245, 1, 0, 0, 0, 1229, 1231, 5, 46, 0, 0, 1230, 1229, 1, 0, 0, 0, 1230, 1231, 1, 0, 0, 0, 1231, 1233, 1, 0, 0, 0, 1232, 1234, 2, 48, 57, 0, 1233, 1232, 1, 0, 0, 0, 1234, 1235, 1, 0, 0, 0, 1235, 1233, 1, 0, 0, 0, 1235, 1236, 1, 0, 0, 0, 1236, 1238, 1, 0, 0, 0, 1237, 1239, 3, 297, 148, 0, 1238, 1237, 1, 0, 0, 0, 1238, 1239, 1, 0, 0, 0, 1239, 1241, 1, 0, 0, 0, 1240, 1242, 5, 105, 0, 0, 1241, 1240, 1, 0, 0, 0, 1241, 1242, 1, 0, 0, 0, 1242, 1245, 1, 0, 0, 0, 1243, 1245, 5, 105, 0, 0, 1244, 1212, 1, 0, 0, 0, 1244, 1230, 1, 0, 0, 0, 1244, 1243, 1, 0, 0, 0, 1245, 300, 1, 0, 0, 0, 1246, 1247, 5, 67, 0, 0, 1247, 1257, 5, 67, 0, 0, 1248, 1249, 5, 82, 0, 0, 1249, 1257, 5, 82, 0, 0, 1250, 1251, 5, 81, 0, 0, 1251, 1257, 5, 81, 0, 0, 1252, 1253, 5, 90, 0, 0, 1253, 1257, 5, 90, 0, 0, 1254, 1255, 5, 66, 0, 0, 1255, 1257, 5, 66, 0, 0, 1256, 1246, 1, 0, 0, 0, 1256, 1248, 1, 0, 0, 0, 1256, 1250, 1, 0, 0, 0, 1256, 1252, 1, 0, 0, 0, 1256, 1254, 1, 0, 0, 0, 1257, 302, 1, 0, 0, 0, 1258, 1259, 5, 116, 0, 0, 1259, 1260, 5, 114, 0, 0, 1260, 1261, 5, 117, 0, 0, 1261, 1277, 5, 101, 0, 0, 1262, 1263, 5, 84, 0, 0, 1263, 1264, 5, 114, 0, 0, 1264, 1265, 5, 117, 0, 0, 1265, 1277, 5, 101, 0, 0, 1266, 1267, 5, 102, 0, 0, 1267, 1268, 5, 97, 0, 0, 1268, 1269, 5, 108, 0, 0, 1269, 1270, 5, 115, 0, 0, 1270, 1277, 5, 101, 0, 0, 1271, 1272, 5, 70, 0, 0, 1272, 1273, 5, 97, 0, 0, 1273, 1274, 5, 108, 0, 0, 1274, 1275, 5, 115, 0, 0, 1275, 1277, 5, 101, 0, 0, 1276, 1258, 1, 0, 0, 0, 1276, 1262, 1, 0, 0, 0, 1276, 1266, 1, 0, 0, 0, 1276, 1271, 1, 0, 0, 0, 1277, 304, 1, 0, 0, 0, 1278, 1279, 5, 78, 0, 0, 1279, 1280, 5, 97, 0, 0, 1280, 1281, 5, 78, 0, 0, 1281, 306, 1, 0, 0, 0, 1282, 1284, 7, 2, 0, 0, 1283, 1282, 1, 0, 0, 0, 1284, 1285, 1, 0, 0, 0, 1285, 1283, 1, 0, 0, 0, 1285, 1286, 1, 0, 0, 0, 1286, 1293, 1, 0, 0, 0, 1287, 1289, 5, 95, 0, 0, 1288, 1290, 7, 3, 0, 0, 1289, 1288, 1, 0, 0, 0, 1290, 1291, 1, 0, 0, 0, 1291, 1289, 1, 0, 0, 0, 1291, 1292, 1, 0, 0, 0, 1292, 1294, 1, 0, 0, 0, 1293, 1287, 1, 0, 0, 0, 1293, 1294, 1, 0, 0, 0, 1294, 308, 1, 0, 0, 0, 1295, 1296, 5, 47, 0, 0, 1296, 1297, 5, 47, 0, 0, 1297, 1301, 1, 0, 0, 0, 1298, 1300, 8, 4, 0, 0, 1299, 1298, 1, 0, 0, 0, 1300, 1303, 1, 0, 0, 0, 1301, 1299, 1, 0, 0, 0, 1301, 1302, 1, 0, 0, 0, 1302, 1308, 1, 0, 0, 0, 1303, 1301, 1, 0, 0, 0, 1304, 1306, 5, 13, 0, 0, 1305, 1304, 1, 0, 0, 0, 1305, 1306, 1, 0, 0, 0, 1306, 1307, 1, 0, 0, 0, 1307, 1309, 5, 10, 0, 0, 1308, 1305, 1, 0, 0, 0, 1308, 1309, 1, 0, 0, 0, 1309, 1322, 1, 0, 0, 0, 1310, 1311, 5, 47, 0, 0, 1311, 1312, 5, 42, 0, 0, 1312, 1316, 1, 0, 0, 0, 1313, 1315, 9, 0, 0, 0, 1314, 1313, 1, 0, 0, 0, 1315, 1318, 1, 0, 0, 0, 1316, 1317, 1, 0, 0, 0, 1316, 1314, 1, 0, 0, 0, 1317, 1319, 1, 0, 0, 0, 1318, 1316, 1, 0, 0, 0, 1319, 1320, 5, 42, 0, 0, 1320, 1322, 5, 47, 0, 0, 1321, 1295, 1, 0, 0, 0, 1321, 1310, 1, 0, 0, 0, 1322, 1323, 1, 0, 0, 0, 1323, 1324, 6, 154, 0, 0, 1324, 310, 1, 0, 0, 0, 1325, 1327, 7, 5, 0, 0, 1326, 1325, 1, 0, 0, 0, 1327, 1328, 1, 0, 0, 0, 1328, 1326, 1, 0, 0, 0, 1328, 1329, 1, 0, 0, 0, 1329, 1330, 1, 0, 0, 0, 1330, 1331, 6, 155, 0, 0, 1331, 312, 1, 0, 0, 0, 25, 0, 1193, 1198, 1204, 1209, 1214, 1220, 1224, 1227, 1230, 1235, 1238, 1241, 1244, 1256, 1276, 1285, 1291, 1293, 1301, 1305, 1308, 1316, 1321, 1328, 1, 6, 0, 0]
\ No newline at end of file
+[4, 0, 157, 1352, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 3, 149, 1214, 8, 149, 1, 149, 4, 149, 1217, 8, 149, 11, 149, 12, 149, 1218, 1, 149, 1, 149, 1, 150, 1, 150, 3, 150, 1225, 8, 150, 1, 150, 4, 150, 1228, 8, 150, 11, 150, 12, 150, 1229, 1, 151, 4, 151, 1233, 8, 151, 11, 151, 12, 151, 1234, 1, 151, 1, 151, 5, 151, 1239, 8, 151, 10, 151, 12, 151, 1242, 9, 151, 1, 151, 3, 151, 1245, 8, 151, 1, 151, 3, 151, 1248, 8, 151, 1, 151, 3, 151, 1251, 8, 151, 1, 151, 4, 151, 1254, 8, 151, 11, 151, 12, 151, 1255, 1, 151, 3, 151, 1259, 8, 151, 1, 151, 3, 151, 1262, 8, 151, 1, 151, 3, 151, 1265, 8, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 3, 152, 1277, 8, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 3, 153, 1297, 8, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 4, 155, 1304, 8, 155, 11, 155, 12, 155, 1305, 1, 155, 1, 155, 4, 155, 1310, 8, 155, 11, 155, 12, 155, 1311, 3, 155, 1314, 8, 155, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 1320, 8, 156, 10, 156, 12, 156, 1323, 9, 156, 1, 156, 3, 156, 1326, 8, 156, 1, 156, 3, 156, 1329, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 1335, 8, 156, 10, 156, 12, 156, 1338, 9, 156, 1, 156, 1, 156, 3, 156, 1342, 8, 156, 1, 156, 1, 156, 1, 157, 4, 157, 1347, 8, 157, 11, 157, 12, 157, 1348, 1, 157, 1, 157, 1, 1336, 0, 158, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 0, 303, 151, 305, 152, 307, 153, 309, 154, 311, 155, 313, 156, 315, 157, 1, 0, 6, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 4, 0, 65, 90, 97, 122, 880, 1279, 7936, 8191, 5, 0, 48, 57, 65, 90, 97, 122, 880, 1279, 7936, 8191, 2, 0, 10, 10, 13, 13, 2, 0, 9, 9, 32, 32, 1380, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 1, 317, 1, 0, 0, 0, 3, 319, 1, 0, 0, 0, 5, 321, 1, 0, 0, 0, 7, 323, 1, 0, 0, 0, 9, 325, 1, 0, 0, 0, 11, 327, 1, 0, 0, 0, 13, 329, 1, 0, 0, 0, 15, 333, 1, 0, 0, 0, 17, 343, 1, 0, 0, 0, 19, 346, 1, 0, 0, 0, 21, 352, 1, 0, 0, 0, 23, 355, 1, 0, 0, 0, 25, 367, 1, 0, 0, 0, 27, 369, 1, 0, 0, 0, 29, 372, 1, 0, 0, 0, 31, 380, 1, 0, 0, 0, 33, 383, 1, 0, 0, 0, 35, 386, 1, 0, 0, 0, 37, 388, 1, 0, 0, 0, 39, 390, 1, 0, 0, 0, 41, 392, 1, 0, 0, 0, 43, 395, 1, 0, 0, 0, 45, 399, 1, 0, 0, 0, 47, 403, 1, 0, 0, 0, 49, 405, 1, 0, 0, 0, 51, 409, 1, 0, 0, 0, 53, 412, 1, 0, 0, 0, 55, 414, 1, 0, 0, 0, 57, 422, 1, 0, 0, 0, 59, 425, 1, 0, 0, 0, 61, 434, 1, 0, 0, 0, 63, 437, 1, 0, 0, 0, 65, 439, 1, 0, 0, 0, 67, 441, 1, 0, 0, 0, 69, 443, 1, 0, 0, 0, 71, 447, 1, 0, 0, 0, 73, 451, 1, 0, 0, 0, 75, 454, 1, 0, 0, 0, 77, 457, 1, 0, 0, 0, 79, 459, 1, 0, 0, 0, 81, 462, 1, 0, 0, 0, 83, 464, 1, 0, 0, 0, 85, 466, 1, 0, 0, 0, 87, 468, 1, 0, 0, 0, 89, 470, 1, 0, 0, 0, 91, 472, 1, 0, 0, 0, 93, 477, 1, 0, 0, 0, 95, 484, 1, 0, 0, 0, 97, 490, 1, 0, 0, 0, 99, 495, 1, 0, 0, 0, 101, 501, 1, 0, 0, 0, 103, 507, 1, 0, 0, 0, 105, 512, 1, 0, 0, 0, 107, 516, 1, 0, 0, 0, 109, 521, 1, 0, 0, 0, 111, 526, 1, 0, 0, 0, 113, 531, 1, 0, 0, 0, 115, 536, 1, 0, 0, 0, 117, 543, 1, 0, 0, 0, 119, 548, 1, 0, 0, 0, 121, 553, 1, 0, 0, 0, 123, 560, 1, 0, 0, 0, 125, 565, 1, 0, 0, 0, 127, 573, 1, 0, 0, 0, 129, 581, 1, 0, 0, 0, 131, 589, 1, 0, 0, 0, 133, 599, 1, 0, 0, 0, 135, 607, 1, 0, 0, 0, 137, 617, 1, 0, 0, 0, 139, 625, 1, 0, 0, 0, 141, 631, 1, 0, 0, 0, 143, 637, 1, 0, 0, 0, 145, 643, 1, 0, 0, 0, 147, 649, 1, 0, 0, 0, 149, 657, 1, 0, 0, 0, 151, 663, 1, 0, 0, 0, 153, 671, 1, 0, 0, 0, 155, 677, 1, 0, 0, 0, 157, 685, 1, 0, 0, 0, 159, 691, 1, 0, 0, 0, 161, 695, 1, 0, 0, 0, 163, 701, 1, 0, 0, 0, 165, 705, 1, 0, 0, 0, 167, 711, 1, 0, 0, 0, 169, 715, 1, 0, 0, 0, 171, 723, 1, 0, 0, 0, 173, 729, 1, 0, 0, 0, 175, 734, 1, 0, 0, 0, 177, 740, 1, 0, 0, 0, 179, 745, 1, 0, 0, 0, 181, 753, 1, 0, 0, 0, 183, 759, 1, 0, 0, 0, 185, 766, 1, 0, 0, 0, 187, 774, 1, 0, 0, 0, 189, 780, 1, 0, 0, 0, 191, 789, 1, 0, 0, 0, 193, 796, 1, 0, 0, 0, 195, 804, 1, 0, 0, 0, 197, 810, 1, 0, 0, 0, 199, 819, 1, 0, 0, 0, 201, 826, 1, 0, 0, 0, 203, 834, 1, 0, 0, 0, 205, 840, 1, 0, 0, 0, 207, 849, 1, 0, 0, 0, 209, 856, 1, 0, 0, 0, 211, 864, 1, 0, 0, 0, 213, 873, 1, 0, 0, 0, 215, 883, 1, 0, 0, 0, 217, 890, 1, 0, 0, 0, 219, 901, 1, 0, 0, 0, 221, 908, 1, 0, 0, 0, 223, 916, 1, 0, 0, 0, 225, 923, 1, 0, 0, 0, 227, 932, 1, 0, 0, 0, 229, 941, 1, 0, 0, 0, 231, 951, 1, 0, 0, 0, 233, 959, 1, 0, 0, 0, 235, 970, 1, 0, 0, 0, 237, 977, 1, 0, 0, 0, 239, 988, 1, 0, 0, 0, 241, 995, 1, 0, 0, 0, 243, 1007, 1, 0, 0, 0, 245, 1017, 1, 0, 0, 0, 247, 1024, 1, 0, 0, 0, 249, 1035, 1, 0, 0, 0, 251, 1047, 1, 0, 0, 0, 253, 1052, 1, 0, 0, 0, 255, 1061, 1, 0, 0, 0, 257, 1069, 1, 0, 0, 0, 259, 1074, 1, 0, 0, 0, 261, 1080, 1, 0, 0, 0, 263, 1085, 1, 0, 0, 0, 265, 1090, 1, 0, 0, 0, 267, 1097, 1, 0, 0, 0, 269, 1103, 1, 0, 0, 0, 271, 1112, 1, 0, 0, 0, 273, 1119, 1, 0, 0, 0, 275, 1124, 1, 0, 0, 0, 277, 1129, 1, 0, 0, 0, 279, 1137, 1, 0, 0, 0, 281, 1145, 1, 0, 0, 0, 283, 1150, 1, 0, 0, 0, 285, 1157, 1, 0, 0, 0, 287, 1162, 1, 0, 0, 0, 289, 1167, 1, 0, 0, 0, 291, 1178, 1, 0, 0, 0, 293, 1186, 1, 0, 0, 0, 295, 1197, 1, 0, 0, 0, 297, 1204, 1, 0, 0, 0, 299, 1216, 1, 0, 0, 0, 301, 1222, 1, 0, 0, 0, 303, 1264, 1, 0, 0, 0, 305, 1276, 1, 0, 0, 0, 307, 1296, 1, 0, 0, 0, 309, 1298, 1, 0, 0, 0, 311, 1303, 1, 0, 0, 0, 313, 1341, 1, 0, 0, 0, 315, 1346, 1, 0, 0, 0, 317, 318, 5, 33, 0, 0, 318, 2, 1, 0, 0, 0, 319, 320, 5, 94, 0, 0, 320, 4, 1, 0, 0, 0, 321, 322, 5, 45, 0, 0, 322, 6, 1, 0, 0, 0, 323, 324, 5, 43, 0, 0, 324, 8, 1, 0, 0, 0, 325, 326, 5, 42, 0, 0, 326, 10, 1, 0, 0, 0, 327, 328, 5, 47, 0, 0, 328, 12, 1, 0, 0, 0, 329, 330, 5, 109, 0, 0, 330, 331, 5, 111, 0, 0, 331, 332, 5, 100, 0, 0, 332, 14, 1, 0, 0, 0, 333, 334, 5, 105, 0, 0, 334, 335, 5, 110, 0, 0, 335, 336, 5, 116, 0, 0, 336, 337, 5, 101, 0, 0, 337, 338, 5, 114, 0, 0, 338, 339, 5, 115, 0, 0, 339, 340, 5, 101, 0, 0, 340, 341, 5, 99, 0, 0, 341, 342, 5, 116, 0, 0, 342, 16, 1, 0, 0, 0, 343, 344, 5, 47, 0, 0, 344, 345, 5, 92, 0, 0, 345, 18, 1, 0, 0, 0, 346, 347, 5, 117, 0, 0, 347, 348, 5, 110, 0, 0, 348, 349, 5, 105, 0, 0, 349, 350, 5, 116, 0, 0, 350, 351, 5, 101, 0, 0, 351, 20, 1, 0, 0, 0, 352, 353, 5, 92, 0, 0, 353, 354, 5, 47, 0, 0, 354, 22, 1, 0, 0, 0, 355, 356, 5, 115, 0, 0, 356, 357, 5, 101, 0, 0, 357, 358, 5, 116, 0, 0, 358, 359, 5, 115, 0, 0, 359, 360, 5, 117, 0, 0, 360, 361, 5, 98, 0, 0, 361, 362, 5, 116, 0, 0, 362, 363, 5, 114, 0, 0, 363, 364, 5, 97, 0, 0, 364, 365, 5, 99, 0, 0, 365, 366, 5, 116, 0, 0, 366, 24, 1, 0, 0, 0, 367, 368, 5, 92, 0, 0, 368, 26, 1, 0, 0, 0, 369, 370, 5, 105, 0, 0, 370, 371, 5, 110, 0, 0, 371, 28, 1, 0, 0, 0, 372, 373, 5, 100, 0, 0, 373, 374, 5, 105, 0, 0, 374, 375, 5, 118, 0, 0, 375, 376, 5, 105, 0, 0, 376, 377, 5, 100, 0, 0, 377, 378, 5, 101, 0, 0, 378, 379, 5, 115, 0, 0, 379, 30, 1, 0, 0, 0, 380, 381, 5, 62, 0, 0, 381, 382, 5, 61, 0, 0, 382, 32, 1, 0, 0, 0, 383, 384, 5, 60, 0, 0, 384, 385, 5, 61, 0, 0, 385, 34, 1, 0, 0, 0, 386, 387, 5, 62, 0, 0, 387, 36, 1, 0, 0, 0, 388, 389, 5, 60, 0, 0, 389, 38, 1, 0, 0, 0, 390, 391, 5, 61, 0, 0, 391, 40, 1, 0, 0, 0, 392, 393, 5, 60, 0, 0, 393, 394, 5, 62, 0, 0, 394, 42, 1, 0, 0, 0, 395, 396, 5, 110, 0, 0, 396, 397, 5, 111, 0, 0, 397, 398, 5, 116, 0, 0, 398, 44, 1, 0, 0, 0, 399, 400, 5, 97, 0, 0, 400, 401, 5, 110, 0, 0, 401, 402, 5, 100, 0, 0, 402, 46, 1, 0, 0, 0, 403, 404, 5, 38, 0, 0, 404, 48, 1, 0, 0, 0, 405, 406, 5, 120, 0, 0, 406, 407, 5, 111, 0, 0, 407, 408, 5, 114, 0, 0, 408, 50, 1, 0, 0, 0, 409, 410, 5, 111, 0, 0, 410, 411, 5, 114, 0, 0, 411, 52, 1, 0, 0, 0, 412, 413, 5, 124, 0, 0, 413, 54, 1, 0, 0, 0, 414, 415, 5, 105, 0, 0, 415, 416, 5, 109, 0, 0, 416, 417, 5, 112, 0, 0, 417, 418, 5, 108, 0, 0, 418, 419, 5, 105, 0, 0, 419, 420, 5, 101, 0, 0, 420, 421, 5, 115, 0, 0, 421, 56, 1, 0, 0, 0, 422, 423, 5, 45, 0, 0, 423, 424, 5, 62, 0, 0, 424, 58, 1, 0, 0, 0, 425, 426, 5, 112, 0, 0, 426, 427, 5, 114, 0, 0, 427, 428, 5, 111, 0, 0, 428, 429, 5, 118, 0, 0, 429, 430, 5, 105, 0, 0, 430, 431, 5, 100, 0, 0, 431, 432, 5, 101, 0, 0, 432, 433, 5, 100, 0, 0, 433, 60, 1, 0, 0, 0, 434, 435, 5, 61, 0, 0, 435, 436, 5, 62, 0, 0, 436, 62, 1, 0, 0, 0, 437, 438, 5, 44, 0, 0, 438, 64, 1, 0, 0, 0, 439, 440, 5, 59, 0, 0, 440, 66, 1, 0, 0, 0, 441, 442, 5, 58, 0, 0, 442, 68, 1, 0, 0, 0, 443, 444, 5, 43, 0, 0, 444, 445, 5, 111, 0, 0, 445, 446, 5, 111, 0, 0, 446, 70, 1, 0, 0, 0, 447, 448, 5, 45, 0, 0, 448, 449, 5, 111, 0, 0, 449, 450, 5, 111, 0, 0, 450, 72, 1, 0, 0, 0, 451, 452, 5, 40, 0, 0, 452, 453, 5, 124, 0, 0, 453, 74, 1, 0, 0, 0, 454, 455, 5, 124, 0, 0, 455, 456, 5, 41, 0, 0, 456, 76, 1, 0, 0, 0, 457, 458, 5, 91, 0, 0, 458, 78, 1, 0, 0, 0, 459, 460, 5, 93, 0, 0, 460, 461, 5, 84, 0, 0, 461, 80, 1, 0, 0, 0, 462, 463, 5, 93, 0, 0, 463, 82, 1, 0, 0, 0, 464, 465, 5, 40, 0, 0, 465, 84, 1, 0, 0, 0, 466, 467, 5, 41, 0, 0, 467, 86, 1, 0, 0, 0, 468, 469, 5, 123, 0, 0, 469, 88, 1, 0, 0, 0, 470, 471, 5, 125, 0, 0, 471, 90, 1, 0, 0, 0, 472, 473, 5, 108, 0, 0, 473, 474, 5, 111, 0, 0, 474, 475, 5, 103, 0, 0, 475, 476, 5, 40, 0, 0, 476, 92, 1, 0, 0, 0, 477, 478, 5, 108, 0, 0, 478, 479, 5, 111, 0, 0, 479, 480, 5, 103, 0, 0, 480, 481, 5, 49, 0, 0, 481, 482, 5, 48, 0, 0, 482, 483, 5, 40, 0, 0, 483, 94, 1, 0, 0, 0, 484, 485, 5, 108, 0, 0, 485, 486, 5, 111, 0, 0, 486, 487, 5, 103, 0, 0, 487, 488, 5, 50, 0, 0, 488, 489, 5, 40, 0, 0, 489, 96, 1, 0, 0, 0, 490, 491, 5, 112, 0, 0, 491, 492, 5, 111, 0, 0, 492, 493, 5, 119, 0, 0, 493, 494, 5, 40, 0, 0, 494, 98, 1, 0, 0, 0, 495, 496, 5, 115, 0, 0, 496, 497, 5, 113, 0, 0, 497, 498, 5, 114, 0, 0, 498, 499, 5, 116, 0, 0, 499, 500, 5, 40, 0, 0, 500, 100, 1, 0, 0, 0, 501, 502, 5, 99, 0, 0, 502, 503, 5, 98, 0, 0, 503, 504, 5, 114, 0, 0, 504, 505, 5, 116, 0, 0, 505, 506, 5, 40, 0, 0, 506, 102, 1, 0, 0, 0, 507, 508, 5, 115, 0, 0, 508, 509, 5, 113, 0, 0, 509, 510, 5, 114, 0, 0, 510, 511, 5, 40, 0, 0, 511, 104, 1, 0, 0, 0, 512, 513, 5, 108, 0, 0, 513, 514, 5, 110, 0, 0, 514, 515, 5, 40, 0, 0, 515, 106, 1, 0, 0, 0, 516, 517, 5, 101, 0, 0, 517, 518, 5, 120, 0, 0, 518, 519, 5, 112, 0, 0, 519, 520, 5, 40, 0, 0, 520, 108, 1, 0, 0, 0, 521, 522, 5, 115, 0, 0, 522, 523, 5, 105, 0, 0, 523, 524, 5, 110, 0, 0, 524, 525, 5, 40, 0, 0, 525, 110, 1, 0, 0, 0, 526, 527, 5, 99, 0, 0, 527, 528, 5, 111, 0, 0, 528, 529, 5, 115, 0, 0, 529, 530, 5, 40, 0, 0, 530, 112, 1, 0, 0, 0, 531, 532, 5, 116, 0, 0, 532, 533, 5, 97, 0, 0, 533, 534, 5, 110, 0, 0, 534, 535, 5, 40, 0, 0, 535, 114, 1, 0, 0, 0, 536, 537, 5, 99, 0, 0, 537, 538, 5, 111, 0, 0, 538, 539, 5, 116, 0, 0, 539, 540, 5, 97, 0, 0, 540, 541, 5, 110, 0, 0, 541, 542, 5, 40, 0, 0, 542, 116, 1, 0, 0, 0, 543, 544, 5, 99, 0, 0, 544, 545, 5, 111, 0, 0, 545, 546, 5, 116, 0, 0, 546, 547, 5, 40, 0, 0, 547, 118, 1, 0, 0, 0, 548, 549, 5, 115, 0, 0, 549, 550, 5, 101, 0, 0, 550, 551, 5, 99, 0, 0, 551, 552, 5, 40, 0, 0, 552, 120, 1, 0, 0, 0, 553, 554, 5, 99, 0, 0, 554, 555, 5, 111, 0, 0, 555, 556, 5, 115, 0, 0, 556, 557, 5, 101, 0, 0, 557, 558, 5, 99, 0, 0, 558, 559, 5, 40, 0, 0, 559, 122, 1, 0, 0, 0, 560, 561, 5, 99, 0, 0, 561, 562, 5, 115, 0, 0, 562, 563, 5, 99, 0, 0, 563, 564, 5, 40, 0, 0, 564, 124, 1, 0, 0, 0, 565, 566, 5, 97, 0, 0, 566, 567, 5, 114, 0, 0, 567, 568, 5, 99, 0, 0, 568, 569, 5, 115, 0, 0, 569, 570, 5, 105, 0, 0, 570, 571, 5, 110, 0, 0, 571, 572, 5, 40, 0, 0, 572, 126, 1, 0, 0, 0, 573, 574, 5, 97, 0, 0, 574, 575, 5, 114, 0, 0, 575, 576, 5, 99, 0, 0, 576, 577, 5, 99, 0, 0, 577, 578, 5, 111, 0, 0, 578, 579, 5, 115, 0, 0, 579, 580, 5, 40, 0, 0, 580, 128, 1, 0, 0, 0, 581, 582, 5, 97, 0, 0, 582, 583, 5, 114, 0, 0, 583, 584, 5, 99, 0, 0, 584, 585, 5, 116, 0, 0, 585, 586, 5, 97, 0, 0, 586, 587, 5, 110, 0, 0, 587, 588, 5, 40, 0, 0, 588, 130, 1, 0, 0, 0, 589, 590, 5, 97, 0, 0, 590, 591, 5, 114, 0, 0, 591, 592, 5, 99, 0, 0, 592, 593, 5, 99, 0, 0, 593, 594, 5, 111, 0, 0, 594, 595, 5, 116, 0, 0, 595, 596, 5, 97, 0, 0, 596, 597, 5, 110, 0, 0, 597, 598, 5, 40, 0, 0, 598, 132, 1, 0, 0, 0, 599, 600, 5, 97, 0, 0, 600, 601, 5, 114, 0, 0, 601, 602, 5, 99, 0, 0, 602, 603, 5, 115, 0, 0, 603, 604, 5, 101, 0, 0, 604, 605, 5, 99, 0, 0, 605, 606, 5, 40, 0, 0, 606, 134, 1, 0, 0, 0, 607, 608, 5, 97, 0, 0, 608, 609, 5, 114, 0, 0, 609, 610, 5, 99, 0, 0, 610, 611, 5, 99, 0, 0, 611, 612, 5, 111, 0, 0, 612, 613, 5, 115, 0, 0, 613, 614, 5, 101, 0, 0, 614, 615, 5, 99, 0, 0, 615, 616, 5, 40, 0, 0, 616, 136, 1, 0, 0, 0, 617, 618, 5, 97, 0, 0, 618, 619, 5, 114, 0, 0, 619, 620, 5, 99, 0, 0, 620, 621, 5, 99, 0, 0, 621, 622, 5, 115, 0, 0, 622, 623, 5, 99, 0, 0, 623, 624, 5, 40, 0, 0, 624, 138, 1, 0, 0, 0, 625, 626, 5, 97, 0, 0, 626, 627, 5, 99, 0, 0, 627, 628, 5, 115, 0, 0, 628, 629, 5, 99, 0, 0, 629, 630, 5, 40, 0, 0, 630, 140, 1, 0, 0, 0, 631, 632, 5, 97, 0, 0, 632, 633, 5, 115, 0, 0, 633, 634, 5, 105, 0, 0, 634, 635, 5, 110, 0, 0, 635, 636, 5, 40, 0, 0, 636, 142, 1, 0, 0, 0, 637, 638, 5, 97, 0, 0, 638, 639, 5, 99, 0, 0, 639, 640, 5, 111, 0, 0, 640, 641, 5, 115, 0, 0, 641, 642, 5, 40, 0, 0, 642, 144, 1, 0, 0, 0, 643, 644, 5, 97, 0, 0, 644, 645, 5, 116, 0, 0, 645, 646, 5, 97, 0, 0, 646, 647, 5, 110, 0, 0, 647, 648, 5, 40, 0, 0, 648, 146, 1, 0, 0, 0, 649, 650, 5, 97, 0, 0, 650, 651, 5, 99, 0, 0, 651, 652, 5, 111, 0, 0, 652, 653, 5, 116, 0, 0, 653, 654, 5, 97, 0, 0, 654, 655, 5, 110, 0, 0, 655, 656, 5, 40, 0, 0, 656, 148, 1, 0, 0, 0, 657, 658, 5, 97, 0, 0, 658, 659, 5, 115, 0, 0, 659, 660, 5, 101, 0, 0, 660, 661, 5, 99, 0, 0, 661, 662, 5, 40, 0, 0, 662, 150, 1, 0, 0, 0, 663, 664, 5, 97, 0, 0, 664, 665, 5, 99, 0, 0, 665, 666, 5, 111, 0, 0, 666, 667, 5, 115, 0, 0, 667, 668, 5, 101, 0, 0, 668, 669, 5, 99, 0, 0, 669, 670, 5, 40, 0, 0, 670, 152, 1, 0, 0, 0, 671, 672, 5, 97, 0, 0, 672, 673, 5, 99, 0, 0, 673, 674, 5, 111, 0, 0, 674, 675, 5, 116, 0, 0, 675, 676, 5, 40, 0, 0, 676, 154, 1, 0, 0, 0, 677, 678, 5, 97, 0, 0, 678, 679, 5, 114, 0, 0, 679, 680, 5, 99, 0, 0, 680, 681, 5, 99, 0, 0, 681, 682, 5, 111, 0, 0, 682, 683, 5, 116, 0, 0, 683, 684, 5, 40, 0, 0, 684, 156, 1, 0, 0, 0, 685, 686, 5, 115, 0, 0, 686, 687, 5, 105, 0, 0, 687, 688, 5, 110, 0, 0, 688, 689, 5, 104, 0, 0, 689, 690, 5, 40, 0, 0, 690, 158, 1, 0, 0, 0, 691, 692, 5, 115, 0, 0, 692, 693, 5, 104, 0, 0, 693, 694, 5, 40, 0, 0, 694, 160, 1, 0, 0, 0, 695, 696, 5, 99, 0, 0, 696, 697, 5, 111, 0, 0, 697, 698, 5, 115, 0, 0, 698, 699, 5, 104, 0, 0, 699, 700, 5, 40, 0, 0, 700, 162, 1, 0, 0, 0, 701, 702, 5, 99, 0, 0, 702, 703, 5, 104, 0, 0, 703, 704, 5, 40, 0, 0, 704, 164, 1, 0, 0, 0, 705, 706, 5, 116, 0, 0, 706, 707, 5, 97, 0, 0, 707, 708, 5, 110, 0, 0, 708, 709, 5, 104, 0, 0, 709, 710, 5, 40, 0, 0, 710, 166, 1, 0, 0, 0, 711, 712, 5, 116, 0, 0, 712, 713, 5, 104, 0, 0, 713, 714, 5, 40, 0, 0, 714, 168, 1, 0, 0, 0, 715, 716, 5, 99, 0, 0, 716, 717, 5, 111, 0, 0, 717, 718, 5, 116, 0, 0, 718, 719, 5, 97, 0, 0, 719, 720, 5, 110, 0, 0, 720, 721, 5, 104, 0, 0, 721, 722, 5, 40, 0, 0, 722, 170, 1, 0, 0, 0, 723, 724, 5, 99, 0, 0, 724, 725, 5, 111, 0, 0, 725, 726, 5, 116, 0, 0, 726, 727, 5, 104, 0, 0, 727, 728, 5, 40, 0, 0, 728, 172, 1, 0, 0, 0, 729, 730, 5, 99, 0, 0, 730, 731, 5, 116, 0, 0, 731, 732, 5, 104, 0, 0, 732, 733, 5, 40, 0, 0, 733, 174, 1, 0, 0, 0, 734, 735, 5, 115, 0, 0, 735, 736, 5, 101, 0, 0, 736, 737, 5, 99, 0, 0, 737, 738, 5, 104, 0, 0, 738, 739, 5, 40, 0, 0, 739, 176, 1, 0, 0, 0, 740, 741, 5, 115, 0, 0, 741, 742, 5, 99, 0, 0, 742, 743, 5, 104, 0, 0, 743, 744, 5, 40, 0, 0, 744, 178, 1, 0, 0, 0, 745, 746, 5, 99, 0, 0, 746, 747, 5, 111, 0, 0, 747, 748, 5, 115, 0, 0, 748, 749, 5, 101, 0, 0, 749, 750, 5, 99, 0, 0, 750, 751, 5, 104, 0, 0, 751, 752, 5, 40, 0, 0, 752, 180, 1, 0, 0, 0, 753, 754, 5, 99, 0, 0, 754, 755, 5, 115, 0, 0, 755, 756, 5, 99, 0, 0, 756, 757, 5, 104, 0, 0, 757, 758, 5, 40, 0, 0, 758, 182, 1, 0, 0, 0, 759, 760, 5, 97, 0, 0, 760, 761, 5, 115, 0, 0, 761, 762, 5, 105, 0, 0, 762, 763, 5, 110, 0, 0, 763, 764, 5, 104, 0, 0, 764, 765, 5, 40, 0, 0, 765, 184, 1, 0, 0, 0, 766, 767, 5, 97, 0, 0, 767, 768, 5, 114, 0, 0, 768, 769, 5, 115, 0, 0, 769, 770, 5, 105, 0, 0, 770, 771, 5, 110, 0, 0, 771, 772, 5, 104, 0, 0, 772, 773, 5, 40, 0, 0, 773, 186, 1, 0, 0, 0, 774, 775, 5, 97, 0, 0, 775, 776, 5, 114, 0, 0, 776, 777, 5, 115, 0, 0, 777, 778, 5, 104, 0, 0, 778, 779, 5, 40, 0, 0, 779, 188, 1, 0, 0, 0, 780, 781, 5, 97, 0, 0, 781, 782, 5, 114, 0, 0, 782, 783, 5, 99, 0, 0, 783, 784, 5, 115, 0, 0, 784, 785, 5, 105, 0, 0, 785, 786, 5, 110, 0, 0, 786, 787, 5, 104, 0, 0, 787, 788, 5, 40, 0, 0, 788, 190, 1, 0, 0, 0, 789, 790, 5, 97, 0, 0, 790, 791, 5, 99, 0, 0, 791, 792, 5, 111, 0, 0, 792, 793, 5, 115, 0, 0, 793, 794, 5, 104, 0, 0, 794, 795, 5, 40, 0, 0, 795, 192, 1, 0, 0, 0, 796, 797, 5, 97, 0, 0, 797, 798, 5, 114, 0, 0, 798, 799, 5, 99, 0, 0, 799, 800, 5, 111, 0, 0, 800, 801, 5, 115, 0, 0, 801, 802, 5, 104, 0, 0, 802, 803, 5, 40, 0, 0, 803, 194, 1, 0, 0, 0, 804, 805, 5, 97, 0, 0, 805, 806, 5, 114, 0, 0, 806, 807, 5, 99, 0, 0, 807, 808, 5, 104, 0, 0, 808, 809, 5, 40, 0, 0, 809, 196, 1, 0, 0, 0, 810, 811, 5, 97, 0, 0, 811, 812, 5, 114, 0, 0, 812, 813, 5, 99, 0, 0, 813, 814, 5, 99, 0, 0, 814, 815, 5, 111, 0, 0, 815, 816, 5, 115, 0, 0, 816, 817, 5, 104, 0, 0, 817, 818, 5, 40, 0, 0, 818, 198, 1, 0, 0, 0, 819, 820, 5, 97, 0, 0, 820, 821, 5, 116, 0, 0, 821, 822, 5, 97, 0, 0, 822, 823, 5, 110, 0, 0, 823, 824, 5, 104, 0, 0, 824, 825, 5, 40, 0, 0, 825, 200, 1, 0, 0, 0, 826, 827, 5, 97, 0, 0, 827, 828, 5, 114, 0, 0, 828, 829, 5, 116, 0, 0, 829, 830, 5, 97, 0, 0, 830, 831, 5, 110, 0, 0, 831, 832, 5, 104, 0, 0, 832, 833, 5, 40, 0, 0, 833, 202, 1, 0, 0, 0, 834, 835, 5, 97, 0, 0, 835, 836, 5, 114, 0, 0, 836, 837, 5, 116, 0, 0, 837, 838, 5, 104, 0, 0, 838, 839, 5, 40, 0, 0, 839, 204, 1, 0, 0, 0, 840, 841, 5, 97, 0, 0, 841, 842, 5, 114, 0, 0, 842, 843, 5, 99, 0, 0, 843, 844, 5, 116, 0, 0, 844, 845, 5, 97, 0, 0, 845, 846, 5, 110, 0, 0, 846, 847, 5, 104, 0, 0, 847, 848, 5, 40, 0, 0, 848, 206, 1, 0, 0, 0, 849, 850, 5, 97, 0, 0, 850, 851, 5, 99, 0, 0, 851, 852, 5, 111, 0, 0, 852, 853, 5, 116, 0, 0, 853, 854, 5, 104, 0, 0, 854, 855, 5, 40, 0, 0, 855, 208, 1, 0, 0, 0, 856, 857, 5, 97, 0, 0, 857, 858, 5, 114, 0, 0, 858, 859, 5, 99, 0, 0, 859, 860, 5, 111, 0, 0, 860, 861, 5, 116, 0, 0, 861, 862, 5, 104, 0, 0, 862, 863, 5, 40, 0, 0, 863, 210, 1, 0, 0, 0, 864, 865, 5, 97, 0, 0, 865, 866, 5, 99, 0, 0, 866, 867, 5, 111, 0, 0, 867, 868, 5, 116, 0, 0, 868, 869, 5, 97, 0, 0, 869, 870, 5, 110, 0, 0, 870, 871, 5, 104, 0, 0, 871, 872, 5, 40, 0, 0, 872, 212, 1, 0, 0, 0, 873, 874, 5, 97, 0, 0, 874, 875, 5, 114, 0, 0, 875, 876, 5, 99, 0, 0, 876, 877, 5, 111, 0, 0, 877, 878, 5, 116, 0, 0, 878, 879, 5, 97, 0, 0, 879, 880, 5, 110, 0, 0, 880, 881, 5, 104, 0, 0, 881, 882, 5, 40, 0, 0, 882, 214, 1, 0, 0, 0, 883, 884, 5, 97, 0, 0, 884, 885, 5, 114, 0, 0, 885, 886, 5, 99, 0, 0, 886, 887, 5, 116, 0, 0, 887, 888, 5, 104, 0, 0, 888, 889, 5, 40, 0, 0, 889, 216, 1, 0, 0, 0, 890, 891, 5, 97, 0, 0, 891, 892, 5, 114, 0, 0, 892, 893, 5, 99, 0, 0, 893, 894, 5, 99, 0, 0, 894, 895, 5, 111, 0, 0, 895, 896, 5, 116, 0, 0, 896, 897, 5, 97, 0, 0, 897, 898, 5, 110, 0, 0, 898, 899, 5, 104, 0, 0, 899, 900, 5, 40, 0, 0, 900, 218, 1, 0, 0, 0, 901, 902, 5, 97, 0, 0, 902, 903, 5, 115, 0, 0, 903, 904, 5, 101, 0, 0, 904, 905, 5, 99, 0, 0, 905, 906, 5, 104, 0, 0, 906, 907, 5, 40, 0, 0, 907, 220, 1, 0, 0, 0, 908, 909, 5, 97, 0, 0, 909, 910, 5, 114, 0, 0, 910, 911, 5, 115, 0, 0, 911, 912, 5, 101, 0, 0, 912, 913, 5, 99, 0, 0, 913, 914, 5, 104, 0, 0, 914, 915, 5, 40, 0, 0, 915, 222, 1, 0, 0, 0, 916, 917, 5, 97, 0, 0, 917, 918, 5, 114, 0, 0, 918, 919, 5, 115, 0, 0, 919, 920, 5, 99, 0, 0, 920, 921, 5, 104, 0, 0, 921, 922, 5, 40, 0, 0, 922, 224, 1, 0, 0, 0, 923, 924, 5, 97, 0, 0, 924, 925, 5, 114, 0, 0, 925, 926, 5, 99, 0, 0, 926, 927, 5, 115, 0, 0, 927, 928, 5, 101, 0, 0, 928, 929, 5, 99, 0, 0, 929, 930, 5, 104, 0, 0, 930, 931, 5, 40, 0, 0, 931, 226, 1, 0, 0, 0, 932, 933, 5, 97, 0, 0, 933, 934, 5, 99, 0, 0, 934, 935, 5, 111, 0, 0, 935, 936, 5, 115, 0, 0, 936, 937, 5, 101, 0, 0, 937, 938, 5, 99, 0, 0, 938, 939, 5, 104, 0, 0, 939, 940, 5, 40, 0, 0, 940, 228, 1, 0, 0, 0, 941, 942, 5, 97, 0, 0, 942, 943, 5, 114, 0, 0, 943, 944, 5, 99, 0, 0, 944, 945, 5, 111, 0, 0, 945, 946, 5, 115, 0, 0, 946, 947, 5, 101, 0, 0, 947, 948, 5, 99, 0, 0, 948, 949, 5, 104, 0, 0, 949, 950, 5, 40, 0, 0, 950, 230, 1, 0, 0, 0, 951, 952, 5, 97, 0, 0, 952, 953, 5, 114, 0, 0, 953, 954, 5, 99, 0, 0, 954, 955, 5, 115, 0, 0, 955, 956, 5, 99, 0, 0, 956, 957, 5, 104, 0, 0, 957, 958, 5, 40, 0, 0, 958, 232, 1, 0, 0, 0, 959, 960, 5, 97, 0, 0, 960, 961, 5, 114, 0, 0, 961, 962, 5, 99, 0, 0, 962, 963, 5, 99, 0, 0, 963, 964, 5, 111, 0, 0, 964, 965, 5, 115, 0, 0, 965, 966, 5, 101, 0, 0, 966, 967, 5, 99, 0, 0, 967, 968, 5, 104, 0, 0, 968, 969, 5, 40, 0, 0, 969, 234, 1, 0, 0, 0, 970, 971, 5, 97, 0, 0, 971, 972, 5, 99, 0, 0, 972, 973, 5, 115, 0, 0, 973, 974, 5, 99, 0, 0, 974, 975, 5, 104, 0, 0, 975, 976, 5, 40, 0, 0, 976, 236, 1, 0, 0, 0, 977, 978, 5, 102, 0, 0, 978, 979, 5, 97, 0, 0, 979, 980, 5, 99, 0, 0, 980, 981, 5, 116, 0, 0, 981, 982, 5, 111, 0, 0, 982, 983, 5, 114, 0, 0, 983, 984, 5, 105, 0, 0, 984, 985, 5, 97, 0, 0, 985, 986, 5, 108, 0, 0, 986, 987, 5, 40, 0, 0, 987, 238, 1, 0, 0, 0, 988, 989, 5, 103, 0, 0, 989, 990, 5, 97, 0, 0, 990, 991, 5, 109, 0, 0, 991, 992, 5, 109, 0, 0, 992, 993, 5, 97, 0, 0, 993, 994, 5, 40, 0, 0, 994, 240, 1, 0, 0, 0, 995, 996, 5, 100, 0, 0, 996, 997, 5, 101, 0, 0, 997, 998, 5, 114, 0, 0, 998, 999, 5, 105, 0, 0, 999, 1000, 5, 118, 0, 0, 1000, 1001, 5, 97, 0, 0, 1001, 1002, 5, 116, 0, 0, 1002, 1003, 5, 105, 0, 0, 1003, 1004, 5, 118, 0, 0, 1004, 1005, 5, 101, 0, 0, 1005, 1006, 5, 40, 0, 0, 1006, 242, 1, 0, 0, 0, 1007, 1008, 5, 105, 0, 0, 1008, 1009, 5, 110, 0, 0, 1009, 1010, 5, 116, 0, 0, 1010, 1011, 5, 101, 0, 0, 1011, 1012, 5, 103, 0, 0, 1012, 1013, 5, 114, 0, 0, 1013, 1014, 5, 97, 0, 0, 1014, 1015, 5, 108, 0, 0, 1015, 1016, 5, 40, 0, 0, 1016, 244, 1, 0, 0, 0, 1017, 1018, 5, 108, 0, 0, 1018, 1019, 5, 105, 0, 0, 1019, 1020, 5, 109, 0, 0, 1020, 1021, 5, 105, 0, 0, 1021, 1022, 5, 116, 0, 0, 1022, 1023, 5, 40, 0, 0, 1023, 246, 1, 0, 0, 0, 1024, 1025, 5, 108, 0, 0, 1025, 1026, 5, 105, 0, 0, 1026, 1027, 5, 109, 0, 0, 1027, 1028, 5, 105, 0, 0, 1028, 1029, 5, 116, 0, 0, 1029, 1030, 5, 108, 0, 0, 1030, 1031, 5, 101, 0, 0, 1031, 1032, 5, 102, 0, 0, 1032, 1033, 5, 116, 0, 0, 1033, 1034, 5, 40, 0, 0, 1034, 248, 1, 0, 0, 0, 1035, 1036, 5, 108, 0, 0, 1036, 1037, 5, 105, 0, 0, 1037, 1038, 5, 109, 0, 0, 1038, 1039, 5, 105, 0, 0, 1039, 1040, 5, 116, 0, 0, 1040, 1041, 5, 114, 0, 0, 1041, 1042, 5, 105, 0, 0, 1042, 1043, 5, 103, 0, 0, 1043, 1044, 5, 104, 0, 0, 1044, 1045, 5, 116, 0, 0, 1045, 1046, 5, 40, 0, 0, 1046, 250, 1, 0, 0, 0, 1047, 1048, 5, 115, 0, 0, 1048, 1049, 5, 117, 0, 0, 1049, 1050, 5, 109, 0, 0, 1050, 1051, 5, 40, 0, 0, 1051, 252, 1, 0, 0, 0, 1052, 1053, 5, 112, 0, 0, 1053, 1054, 5, 114, 0, 0, 1054, 1055, 5, 111, 0, 0, 1055, 1056, 5, 100, 0, 0, 1056, 1057, 5, 117, 0, 0, 1057, 1058, 5, 99, 0, 0, 1058, 1059, 5, 116, 0, 0, 1059, 1060, 5, 40, 0, 0, 1060, 254, 1, 0, 0, 0, 1061, 1062, 5, 115, 0, 0, 1062, 1063, 5, 105, 0, 0, 1063, 1064, 5, 103, 0, 0, 1064, 1065, 5, 110, 0, 0, 1065, 1066, 5, 117, 0, 0, 1066, 1067, 5, 109, 0, 0, 1067, 1068, 5, 40, 0, 0, 1068, 256, 1, 0, 0, 0, 1069, 1070, 5, 115, 0, 0, 1070, 1071, 5, 103, 0, 0, 1071, 1072, 5, 110, 0, 0, 1072, 1073, 5, 40, 0, 0, 1073, 258, 1, 0, 0, 0, 1074, 1075, 5, 115, 0, 0, 1075, 1076, 5, 105, 0, 0, 1076, 1077, 5, 103, 0, 0, 1077, 1078, 5, 110, 0, 0, 1078, 1079, 5, 40, 0, 0, 1079, 260, 1, 0, 0, 0, 1080, 1081, 5, 97, 0, 0, 1081, 1082, 5, 98, 0, 0, 1082, 1083, 5, 115, 0, 0, 1083, 1084, 5, 40, 0, 0, 1084, 262, 1, 0, 0, 0, 1085, 1086, 5, 112, 0, 0, 1086, 1087, 5, 104, 0, 0, 1087, 1088, 5, 105, 0, 0, 1088, 1089, 5, 40, 0, 0, 1089, 264, 1, 0, 0, 0, 1090, 1091, 5, 102, 0, 0, 1091, 1092, 5, 108, 0, 0, 1092, 1093, 5, 111, 0, 0, 1093, 1094, 5, 111, 0, 0, 1094, 1095, 5, 114, 0, 0, 1095, 1096, 5, 40, 0, 0, 1096, 266, 1, 0, 0, 0, 1097, 1098, 5, 99, 0, 0, 1098, 1099, 5, 101, 0, 0, 1099, 1100, 5, 105, 0, 0, 1100, 1101, 5, 108, 0, 0, 1101, 1102, 5, 40, 0, 0, 1102, 268, 1, 0, 0, 0, 1103, 1104, 5, 99, 0, 0, 1104, 1105, 5, 101, 0, 0, 1105, 1106, 5, 105, 0, 0, 1106, 1107, 5, 108, 0, 0, 1107, 1108, 5, 105, 0, 0, 1108, 1109, 5, 110, 0, 0, 1109, 1110, 5, 103, 0, 0, 1110, 1111, 5, 40, 0, 0, 1111, 270, 1, 0, 0, 0, 1112, 1113, 5, 114, 0, 0, 1113, 1114, 5, 111, 0, 0, 1114, 1115, 5, 117, 0, 0, 1115, 1116, 5, 110, 0, 0, 1116, 1117, 5, 100, 0, 0, 1117, 1118, 5, 40, 0, 0, 1118, 272, 1, 0, 0, 0, 1119, 1120, 5, 109, 0, 0, 1120, 1121, 5, 105, 0, 0, 1121, 1122, 5, 110, 0, 0, 1122, 1123, 5, 40, 0, 0, 1123, 274, 1, 0, 0, 0, 1124, 1125, 5, 109, 0, 0, 1125, 1126, 5, 97, 0, 0, 1126, 1127, 5, 120, 0, 0, 1127, 1128, 5, 40, 0, 0, 1128, 276, 1, 0, 0, 0, 1129, 1130, 5, 97, 0, 0, 1130, 1131, 5, 114, 0, 0, 1131, 1132, 5, 103, 0, 0, 1132, 1133, 5, 109, 0, 0, 1133, 1134, 5, 97, 0, 0, 1134, 1135, 5, 120, 0, 0, 1135, 1136, 5, 40, 0, 0, 1136, 278, 1, 0, 0, 0, 1137, 1138, 5, 97, 0, 0, 1138, 1139, 5, 114, 0, 0, 1139, 1140, 5, 103, 0, 0, 1140, 1141, 5, 109, 0, 0, 1141, 1142, 5, 105, 0, 0, 1142, 1143, 5, 110, 0, 0, 1143, 1144, 5, 40, 0, 0, 1144, 280, 1, 0, 0, 0, 1145, 1146, 5, 103, 0, 0, 1146, 1147, 5, 99, 0, 0, 1147, 1148, 5, 100, 0, 0, 1148, 1149, 5, 40, 0, 0, 1149, 282, 1, 0, 0, 0, 1150, 1151, 5, 116, 0, 0, 1151, 1152, 5, 114, 0, 0, 1152, 1153, 5, 117, 0, 0, 1153, 1154, 5, 110, 0, 0, 1154, 1155, 5, 99, 0, 0, 1155, 1156, 5, 40, 0, 0, 1156, 284, 1, 0, 0, 0, 1157, 1158, 5, 108, 0, 0, 1158, 1159, 5, 99, 0, 0, 1159, 1160, 5, 109, 0, 0, 1160, 1161, 5, 40, 0, 0, 1161, 286, 1, 0, 0, 0, 1162, 1163, 5, 101, 0, 0, 1163, 1164, 5, 114, 0, 0, 1164, 1165, 5, 102, 0, 0, 1165, 1166, 5, 40, 0, 0, 1166, 288, 1, 0, 0, 0, 1167, 1168, 5, 99, 0, 0, 1168, 1169, 5, 111, 0, 0, 1169, 1170, 5, 110, 0, 0, 1170, 1171, 5, 106, 0, 0, 1171, 1172, 5, 117, 0, 0, 1172, 1173, 5, 103, 0, 0, 1173, 1174, 5, 97, 0, 0, 1174, 1175, 5, 116, 0, 0, 1175, 1176, 5, 101, 0, 0, 1176, 1177, 5, 40, 0, 0, 1177, 290, 1, 0, 0, 0, 1178, 1179, 5, 100, 0, 0, 1179, 1180, 5, 111, 0, 0, 1180, 1181, 5, 109, 0, 0, 1181, 1182, 5, 97, 0, 0, 1182, 1183, 5, 105, 0, 0, 1183, 1184, 5, 110, 0, 0, 1184, 1185, 5, 40, 0, 0, 1185, 292, 1, 0, 0, 0, 1186, 1187, 5, 112, 0, 0, 1187, 1188, 5, 105, 0, 0, 1188, 1189, 5, 101, 0, 0, 1189, 1190, 5, 99, 0, 0, 1190, 1191, 5, 101, 0, 0, 1191, 1192, 5, 119, 0, 0, 1192, 1193, 5, 105, 0, 0, 1193, 1194, 5, 115, 0, 0, 1194, 1195, 5, 101, 0, 0, 1195, 1196, 5, 40, 0, 0, 1196, 294, 1, 0, 0, 0, 1197, 1198, 5, 97, 0, 0, 1198, 1199, 5, 112, 0, 0, 1199, 1200, 5, 112, 0, 0, 1200, 1201, 5, 108, 0, 0, 1201, 1202, 5, 121, 0, 0, 1202, 1203, 5, 40, 0, 0, 1203, 296, 1, 0, 0, 0, 1204, 1205, 5, 108, 0, 0, 1205, 1206, 5, 97, 0, 0, 1206, 1207, 5, 109, 0, 0, 1207, 1208, 5, 98, 0, 0, 1208, 1209, 5, 100, 0, 0, 1209, 1210, 5, 97, 0, 0, 1210, 1211, 5, 40, 0, 0, 1211, 298, 1, 0, 0, 0, 1212, 1214, 5, 13, 0, 0, 1213, 1212, 1, 0, 0, 0, 1213, 1214, 1, 0, 0, 0, 1214, 1215, 1, 0, 0, 0, 1215, 1217, 5, 10, 0, 0, 1216, 1213, 1, 0, 0, 0, 1217, 1218, 1, 0, 0, 0, 1218, 1216, 1, 0, 0, 0, 1218, 1219, 1, 0, 0, 0, 1219, 1220, 1, 0, 0, 0, 1220, 1221, 6, 149, 0, 0, 1221, 300, 1, 0, 0, 0, 1222, 1224, 7, 0, 0, 0, 1223, 1225, 7, 1, 0, 0, 1224, 1223, 1, 0, 0, 0, 1224, 1225, 1, 0, 0, 0, 1225, 1227, 1, 0, 0, 0, 1226, 1228, 2, 48, 57, 0, 1227, 1226, 1, 0, 0, 0, 1228, 1229, 1, 0, 0, 0, 1229, 1227, 1, 0, 0, 0, 1229, 1230, 1, 0, 0, 0, 1230, 302, 1, 0, 0, 0, 1231, 1233, 2, 48, 57, 0, 1232, 1231, 1, 0, 0, 0, 1233, 1234, 1, 0, 0, 0, 1234, 1232, 1, 0, 0, 0, 1234, 1235, 1, 0, 0, 0, 1235, 1236, 1, 0, 0, 0, 1236, 1240, 5, 46, 0, 0, 1237, 1239, 2, 48, 57, 0, 1238, 1237, 1, 0, 0, 0, 1239, 1242, 1, 0, 0, 0, 1240, 1238, 1, 0, 0, 0, 1240, 1241, 1, 0, 0, 0, 1241, 1244, 1, 0, 0, 0, 1242, 1240, 1, 0, 0, 0, 1243, 1245, 3, 301, 150, 0, 1244, 1243, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 1247, 1, 0, 0, 0, 1246, 1248, 5, 105, 0, 0, 1247, 1246, 1, 0, 0, 0, 1247, 1248, 1, 0, 0, 0, 1248, 1265, 1, 0, 0, 0, 1249, 1251, 5, 46, 0, 0, 1250, 1249, 1, 0, 0, 0, 1250, 1251, 1, 0, 0, 0, 1251, 1253, 1, 0, 0, 0, 1252, 1254, 2, 48, 57, 0, 1253, 1252, 1, 0, 0, 0, 1254, 1255, 1, 0, 0, 0, 1255, 1253, 1, 0, 0, 0, 1255, 1256, 1, 0, 0, 0, 1256, 1258, 1, 0, 0, 0, 1257, 1259, 3, 301, 150, 0, 1258, 1257, 1, 0, 0, 0, 1258, 1259, 1, 0, 0, 0, 1259, 1261, 1, 0, 0, 0, 1260, 1262, 5, 105, 0, 0, 1261, 1260, 1, 0, 0, 0, 1261, 1262, 1, 0, 0, 0, 1262, 1265, 1, 0, 0, 0, 1263, 1265, 5, 105, 0, 0, 1264, 1232, 1, 0, 0, 0, 1264, 1250, 1, 0, 0, 0, 1264, 1263, 1, 0, 0, 0, 1265, 304, 1, 0, 0, 0, 1266, 1267, 5, 67, 0, 0, 1267, 1277, 5, 67, 0, 0, 1268, 1269, 5, 82, 0, 0, 1269, 1277, 5, 82, 0, 0, 1270, 1271, 5, 81, 0, 0, 1271, 1277, 5, 81, 0, 0, 1272, 1273, 5, 90, 0, 0, 1273, 1277, 5, 90, 0, 0, 1274, 1275, 5, 66, 0, 0, 1275, 1277, 5, 66, 0, 0, 1276, 1266, 1, 0, 0, 0, 1276, 1268, 1, 0, 0, 0, 1276, 1270, 1, 0, 0, 0, 1276, 1272, 1, 0, 0, 0, 1276, 1274, 1, 0, 0, 0, 1277, 306, 1, 0, 0, 0, 1278, 1279, 5, 116, 0, 0, 1279, 1280, 5, 114, 0, 0, 1280, 1281, 5, 117, 0, 0, 1281, 1297, 5, 101, 0, 0, 1282, 1283, 5, 84, 0, 0, 1283, 1284, 5, 114, 0, 0, 1284, 1285, 5, 117, 0, 0, 1285, 1297, 5, 101, 0, 0, 1286, 1287, 5, 102, 0, 0, 1287, 1288, 5, 97, 0, 0, 1288, 1289, 5, 108, 0, 0, 1289, 1290, 5, 115, 0, 0, 1290, 1297, 5, 101, 0, 0, 1291, 1292, 5, 70, 0, 0, 1292, 1293, 5, 97, 0, 0, 1293, 1294, 5, 108, 0, 0, 1294, 1295, 5, 115, 0, 0, 1295, 1297, 5, 101, 0, 0, 1296, 1278, 1, 0, 0, 0, 1296, 1282, 1, 0, 0, 0, 1296, 1286, 1, 0, 0, 0, 1296, 1291, 1, 0, 0, 0, 1297, 308, 1, 0, 0, 0, 1298, 1299, 5, 78, 0, 0, 1299, 1300, 5, 97, 0, 0, 1300, 1301, 5, 78, 0, 0, 1301, 310, 1, 0, 0, 0, 1302, 1304, 7, 2, 0, 0, 1303, 1302, 1, 0, 0, 0, 1304, 1305, 1, 0, 0, 0, 1305, 1303, 1, 0, 0, 0, 1305, 1306, 1, 0, 0, 0, 1306, 1313, 1, 0, 0, 0, 1307, 1309, 5, 95, 0, 0, 1308, 1310, 7, 3, 0, 0, 1309, 1308, 1, 0, 0, 0, 1310, 1311, 1, 0, 0, 0, 1311, 1309, 1, 0, 0, 0, 1311, 1312, 1, 0, 0, 0, 1312, 1314, 1, 0, 0, 0, 1313, 1307, 1, 0, 0, 0, 1313, 1314, 1, 0, 0, 0, 1314, 312, 1, 0, 0, 0, 1315, 1316, 5, 47, 0, 0, 1316, 1317, 5, 47, 0, 0, 1317, 1321, 1, 0, 0, 0, 1318, 1320, 8, 4, 0, 0, 1319, 1318, 1, 0, 0, 0, 1320, 1323, 1, 0, 0, 0, 1321, 1319, 1, 0, 0, 0, 1321, 1322, 1, 0, 0, 0, 1322, 1328, 1, 0, 0, 0, 1323, 1321, 1, 0, 0, 0, 1324, 1326, 5, 13, 0, 0, 1325, 1324, 1, 0, 0, 0, 1325, 1326, 1, 0, 0, 0, 1326, 1327, 1, 0, 0, 0, 1327, 1329, 5, 10, 0, 0, 1328, 1325, 1, 0, 0, 0, 1328, 1329, 1, 0, 0, 0, 1329, 1342, 1, 0, 0, 0, 1330, 1331, 5, 47, 0, 0, 1331, 1332, 5, 42, 0, 0, 1332, 1336, 1, 0, 0, 0, 1333, 1335, 9, 0, 0, 0, 1334, 1333, 1, 0, 0, 0, 1335, 1338, 1, 0, 0, 0, 1336, 1337, 1, 0, 0, 0, 1336, 1334, 1, 0, 0, 0, 1337, 1339, 1, 0, 0, 0, 1338, 1336, 1, 0, 0, 0, 1339, 1340, 5, 42, 0, 0, 1340, 1342, 5, 47, 0, 0, 1341, 1315, 1, 0, 0, 0, 1341, 1330, 1, 0, 0, 0, 1342, 1343, 1, 0, 0, 0, 1343, 1344, 6, 156, 0, 0, 1344, 314, 1, 0, 0, 0, 1345, 1347, 7, 5, 0, 0, 1346, 1345, 1, 0, 0, 0, 1347, 1348, 1, 0, 0, 0, 1348, 1346, 1, 0, 0, 0, 1348, 1349, 1, 0, 0, 0, 1349, 1350, 1, 0, 0, 0, 1350, 1351, 6, 157, 0, 0, 1351, 316, 1, 0, 0, 0, 25, 0, 1213, 1218, 1224, 1229, 1234, 1240, 1244, 1247, 1250, 1255, 1258, 1261, 1264, 1276, 1296, 1305, 1311, 1313, 1321, 1325, 1328, 1336, 1341, 1348, 1, 6, 0, 0]
\ No newline at end of file
diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.tokens b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.tokens
index eb0affa31..1b90b5ff7 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.tokens
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.tokens
@@ -145,14 +145,16 @@ T__143=144
T__144=145
T__145=146
T__146=147
-NEWLINE=148
-NUMBER=149
-SPECIALSET=150
-BOOLEAN=151
-NAN=152
-VARIABLE=153
-COMMENT=154
-WS=155
+T__147=148
+T__148=149
+NEWLINE=150
+NUMBER=151
+SPECIALSET=152
+BOOLEAN=153
+NAN=154
+VARIABLE=155
+COMMENT=156
+WS=157
'!'=1
'^'=2
'-'=3
@@ -291,13 +293,15 @@ WS=155
'round('=136
'min('=137
'max('=138
-'gcd('=139
-'trunc('=140
-'lcm('=141
-'erf('=142
-'conjugate('=143
-'domain('=144
-'piecewise('=145
-'apply('=146
-'lambda('=147
-'NaN'=152
+'argmax('=139
+'argmin('=140
+'gcd('=141
+'trunc('=142
+'lcm('=143
+'erf('=144
+'conjugate('=145
+'domain('=146
+'piecewise('=147
+'apply('=148
+'lambda('=149
+'NaN'=154
diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs b/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs
index eaca54797..553d46be8 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs
@@ -67,8 +67,9 @@ public const int
T__125=126, T__126=127, T__127=128, T__128=129, T__129=130, T__130=131,
T__131=132, T__132=133, T__133=134, T__134=135, T__135=136, T__136=137,
T__137=138, T__138=139, T__139=140, T__140=141, T__141=142, T__142=143,
- T__143=144, T__144=145, T__145=146, T__146=147, NEWLINE=148, NUMBER=149,
- SPECIALSET=150, BOOLEAN=151, NAN=152, VARIABLE=153, COMMENT=154, WS=155;
+ T__143=144, T__144=145, T__145=146, T__146=147, T__147=148, T__148=149,
+ NEWLINE=150, NUMBER=151, SPECIALSET=152, BOOLEAN=153, NAN=154, VARIABLE=155,
+ COMMENT=156, WS=157;
public const int
RULE_factorial_expression = 0, RULE_power_list = 1, RULE_power_expression = 2,
RULE_unary_expression = 3, RULE_mult_expression = 4, RULE_sum_expression = 5,
@@ -108,8 +109,9 @@ public const int
"'gamma('", "'derivative('", "'integral('", "'limit('", "'limitleft('",
"'limitright('", "'sum('", "'product('", "'signum('", "'sgn('", "'sign('",
"'abs('", "'phi('", "'floor('", "'ceil('", "'ceiling('", "'round('", "'min('",
- "'max('", "'gcd('", "'trunc('", "'lcm('", "'erf('", "'conjugate('", "'domain('",
- "'piecewise('", "'apply('", "'lambda('", null, null, null, null, "'NaN'"
+ "'max('", "'argmax('", "'argmin('", "'gcd('", "'trunc('", "'lcm('", "'erf('",
+ "'conjugate('", "'domain('", "'piecewise('", "'apply('", "'lambda('",
+ null, null, null, null, "'NaN'"
};
private static readonly string[] _SymbolicNames = {
null, null, null, null, null, null, null, null, null, null, null, null,
@@ -124,8 +126,8 @@ public const int
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, "NEWLINE", "NUMBER", "SPECIALSET", "BOOLEAN",
- "NAN", "VARIABLE", "COMMENT", "WS"
+ null, null, null, null, null, null, "NEWLINE", "NUMBER", "SPECIALSET",
+ "BOOLEAN", "NAN", "VARIABLE", "COMMENT", "WS"
};
public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames);
@@ -1711,7 +1713,7 @@ public Function_argumentsContext function_arguments() {
State = 312;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -47588233445352L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & 66060287L) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -47588233445352L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & 264241151L) != 0)) {
{
State = 301;
_localctx.e = expression();
@@ -1909,7 +1911,7 @@ public AtomContext atom() {
AtomContext _localctx = new AtomContext(Context, State);
EnterRule(_localctx, 40, RULE_atom);
try {
- State = 900;
+ State = 910;
ErrorHandler.Sync(this);
switch ( Interpreter.AdaptivePredict(TokenStream,32,Context) ) {
case 1:
@@ -3209,7 +3211,7 @@ public AtomContext atom() {
_localctx.args = function_arguments();
State = 847;
Match(T__42);
- AssertAtLeast("min", 1, _localctx.args.list.Count); _localctx.value = _localctx.args.list.Aggregate((a, b) => MathS.Min(a, b));
+ AssertAtLeast("min", 1, _localctx.args.list.Count); _localctx.value = _localctx.args.list.Count == 2 && _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } minRange ? MathS.Minimum(_localctx.args.list[0], minRange.Element, minRange.SupSet) : _localctx.args.list.Aggregate((a, b) => MathS.Min(a, b));
}
break;
case 110:
@@ -3221,7 +3223,7 @@ public AtomContext atom() {
_localctx.args = function_arguments();
State = 852;
Match(T__42);
- AssertAtLeast("max", 1, _localctx.args.list.Count); _localctx.value = _localctx.args.list.Aggregate((a, b) => MathS.Max(a, b));
+ AssertAtLeast("max", 1, _localctx.args.list.Count); _localctx.value = _localctx.args.list.Count == 2 && _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } maxRange ? MathS.Maximum(_localctx.args.list[0], maxRange.Element, maxRange.SupSet) : _localctx.args.list.Aggregate((a, b) => MathS.Max(a, b));
}
break;
case 111:
@@ -3233,7 +3235,7 @@ public AtomContext atom() {
_localctx.args = function_arguments();
State = 857;
Match(T__42);
- AssertAtLeast("gcd", 1, _localctx.args.list.Count); _localctx.value = _localctx.args.list.Aggregate((a, b) => MathS.Gcd(a, b));
+ Assert("argmax", 2, _localctx.args.list.Count); _localctx.value = _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } argmaxRange ? MathS.Argmax(_localctx.args.list[0], argmaxRange.Element, argmaxRange.SupSet) : throw new InvalidArgumentParseException("argmax expects its second argument to say which variable ranges over which set, as in argmax(f(t), t in S)");
}
break;
case 112:
@@ -3245,7 +3247,7 @@ public AtomContext atom() {
_localctx.args = function_arguments();
State = 862;
Match(T__42);
- _localctx.value = NotImplementedFunction("trunc", "rounding functions");
+ Assert("argmin", 2, _localctx.args.list.Count); _localctx.value = _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } argminRange ? MathS.Argmin(_localctx.args.list[0], argminRange.Element, argminRange.SupSet) : throw new InvalidArgumentParseException("argmin expects its second argument to say which variable ranges over which set, as in argmin(f(t), t in S)");
}
break;
case 113:
@@ -3257,7 +3259,7 @@ public AtomContext atom() {
_localctx.args = function_arguments();
State = 867;
Match(T__42);
- _localctx.value = NotImplementedFunction("lcm", "least common multiple as a symbolic function");
+ AssertAtLeast("gcd", 1, _localctx.args.list.Count); _localctx.value = _localctx.args.list.Aggregate((a, b) => MathS.Gcd(a, b));
}
break;
case 114:
@@ -3269,7 +3271,7 @@ public AtomContext atom() {
_localctx.args = function_arguments();
State = 872;
Match(T__42);
- _localctx.value = NotImplementedFunction("erf", "error function");
+ _localctx.value = NotImplementedFunction("trunc", "rounding functions");
}
break;
case 115:
@@ -3281,7 +3283,7 @@ public AtomContext atom() {
_localctx.args = function_arguments();
State = 877;
Match(T__42);
- _localctx.value = NotImplementedFunction("conjugate", "complex conjugate as a symbolic function");
+ _localctx.value = NotImplementedFunction("lcm", "least common multiple as a symbolic function");
}
break;
case 116:
@@ -3292,6 +3294,30 @@ public AtomContext atom() {
State = 881;
_localctx.args = function_arguments();
State = 882;
+ Match(T__42);
+ _localctx.value = NotImplementedFunction("erf", "error function");
+ }
+ break;
+ case 117:
+ EnterOuterAlt(_localctx, 117);
+ {
+ State = 885;
+ Match(T__144);
+ State = 886;
+ _localctx.args = function_arguments();
+ State = 887;
+ Match(T__42);
+ _localctx.value = NotImplementedFunction("conjugate", "complex conjugate as a symbolic function");
+ }
+ break;
+ case 118:
+ EnterOuterAlt(_localctx, 118);
+ {
+ State = 890;
+ Match(T__145);
+ State = 891;
+ _localctx.args = function_arguments();
+ State = 892;
Match(T__42);
Assert("domain", 2, _localctx.args.list.Count);
@@ -3318,14 +3344,14 @@ public AtomContext atom() {
}
break;
- case 117:
- EnterOuterAlt(_localctx, 117);
+ case 119:
+ EnterOuterAlt(_localctx, 119);
{
- State = 885;
- Match(T__144);
- State = 886;
+ State = 895;
+ Match(T__146);
+ State = 896;
_localctx.args = function_arguments();
- State = 887;
+ State = 897;
Match(T__42);
var cases = new List();
@@ -3338,14 +3364,14 @@ public AtomContext atom() {
}
break;
- case 118:
- EnterOuterAlt(_localctx, 118);
+ case 120:
+ EnterOuterAlt(_localctx, 120);
{
- State = 890;
- Match(T__145);
- State = 891;
+ State = 900;
+ Match(T__147);
+ State = 901;
_localctx.args = function_arguments();
- State = 892;
+ State = 902;
Match(T__42);
if (_localctx.args.list.Count < 2)
@@ -3354,14 +3380,14 @@ public AtomContext atom() {
}
break;
- case 119:
- EnterOuterAlt(_localctx, 119);
+ case 121:
+ EnterOuterAlt(_localctx, 121);
{
- State = 895;
- Match(T__146);
- State = 896;
+ State = 905;
+ Match(T__148);
+ State = 906;
_localctx.args = function_arguments();
- State = 897;
+ State = 907;
Match(T__42);
if (_localctx.args.list.Count < 2)
@@ -3424,9 +3450,9 @@ public StatementContext statement() {
try {
EnterOuterAlt(_localctx, 1);
{
- State = 902;
+ State = 912;
_localctx._expression = expression();
- State = 903;
+ State = 913;
Match(Eof);
Result = _localctx._expression.value;
}
@@ -3443,7 +3469,7 @@ public StatementContext statement() {
}
private static int[] _serializedATN = {
- 4,1,155,907,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,
+ 4,1,157,917,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,
7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14,
2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21,
1,0,1,0,1,0,1,0,1,0,1,0,1,0,3,0,52,8,0,1,1,1,1,1,1,1,1,4,1,58,8,1,11,1,
@@ -3506,256 +3532,260 @@ public StatementContext statement() {
20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,
20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,
20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,
- 20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,3,20,901,
- 8,20,1,21,1,21,1,21,1,21,1,21,0,0,22,0,2,4,6,8,10,12,14,16,18,20,22,24,
- 26,28,30,32,34,36,38,40,42,0,0,1043,0,51,1,0,0,0,2,69,1,0,0,0,4,71,1,0,
- 0,0,6,101,1,0,0,0,8,103,1,0,0,0,10,122,1,0,0,0,12,137,1,0,0,0,14,152,1,
- 0,0,0,16,175,1,0,0,0,18,190,1,0,0,0,20,227,1,0,0,0,22,229,1,0,0,0,24,244,
- 1,0,0,0,26,255,1,0,0,0,28,270,1,0,0,0,30,285,1,0,0,0,32,293,1,0,0,0,34,
- 312,1,0,0,0,36,314,1,0,0,0,38,320,1,0,0,0,40,900,1,0,0,0,42,902,1,0,0,
- 0,44,45,3,40,20,0,45,46,5,1,0,0,46,47,6,0,-1,0,47,52,1,0,0,0,48,49,3,40,
- 20,0,49,50,6,0,-1,0,50,52,1,0,0,0,51,44,1,0,0,0,51,48,1,0,0,0,52,1,1,0,
- 0,0,53,54,5,2,0,0,54,55,3,0,0,0,55,56,6,1,-1,0,56,58,1,0,0,0,57,53,1,0,
- 0,0,58,59,1,0,0,0,59,57,1,0,0,0,59,60,1,0,0,0,60,70,1,0,0,0,61,62,5,2,
- 0,0,62,63,3,6,3,0,63,64,6,1,-1,0,64,66,1,0,0,0,65,61,1,0,0,0,66,67,1,0,
- 0,0,67,65,1,0,0,0,67,68,1,0,0,0,68,70,1,0,0,0,69,57,1,0,0,0,69,65,1,0,
- 0,0,70,3,1,0,0,0,71,72,3,0,0,0,72,76,6,2,-1,0,73,74,3,2,1,0,74,75,6,2,
- -1,0,75,77,1,0,0,0,76,73,1,0,0,0,76,77,1,0,0,0,77,5,1,0,0,0,78,79,5,3,
- 0,0,79,80,3,4,2,0,80,81,6,3,-1,0,81,87,1,0,0,0,82,83,5,4,0,0,83,84,3,4,
- 2,0,84,85,6,3,-1,0,85,87,1,0,0,0,86,78,1,0,0,0,86,82,1,0,0,0,87,102,1,
- 0,0,0,88,89,5,3,0,0,89,90,3,6,3,0,90,91,6,3,-1,0,91,97,1,0,0,0,92,93,5,
- 4,0,0,93,94,3,6,3,0,94,95,6,3,-1,0,95,97,1,0,0,0,96,88,1,0,0,0,96,92,1,
- 0,0,0,97,102,1,0,0,0,98,99,3,4,2,0,99,100,6,3,-1,0,100,102,1,0,0,0,101,
- 86,1,0,0,0,101,96,1,0,0,0,101,98,1,0,0,0,102,7,1,0,0,0,103,104,3,6,3,0,
- 104,119,6,4,-1,0,105,106,5,5,0,0,106,107,3,6,3,0,107,108,6,4,-1,0,108,
- 118,1,0,0,0,109,110,5,6,0,0,110,111,3,6,3,0,111,112,6,4,-1,0,112,118,1,
- 0,0,0,113,114,5,7,0,0,114,115,3,6,3,0,115,116,6,4,-1,0,116,118,1,0,0,0,
- 117,105,1,0,0,0,117,109,1,0,0,0,117,113,1,0,0,0,118,121,1,0,0,0,119,117,
- 1,0,0,0,119,120,1,0,0,0,120,9,1,0,0,0,121,119,1,0,0,0,122,123,3,8,4,0,
- 123,134,6,5,-1,0,124,125,5,4,0,0,125,126,3,8,4,0,126,127,6,5,-1,0,127,
- 133,1,0,0,0,128,129,5,3,0,0,129,130,3,8,4,0,130,131,6,5,-1,0,131,133,1,
- 0,0,0,132,124,1,0,0,0,132,128,1,0,0,0,133,136,1,0,0,0,134,132,1,0,0,0,
- 134,135,1,0,0,0,135,11,1,0,0,0,136,134,1,0,0,0,137,138,3,10,5,0,138,149,
- 6,6,-1,0,139,140,5,8,0,0,140,141,3,10,5,0,141,142,6,6,-1,0,142,148,1,0,
- 0,0,143,144,5,9,0,0,144,145,3,10,5,0,145,146,6,6,-1,0,146,148,1,0,0,0,
- 147,139,1,0,0,0,147,143,1,0,0,0,148,151,1,0,0,0,149,147,1,0,0,0,149,150,
- 1,0,0,0,150,13,1,0,0,0,151,149,1,0,0,0,152,153,3,12,6,0,153,172,6,7,-1,
- 0,154,155,5,10,0,0,155,156,3,12,6,0,156,157,6,7,-1,0,157,171,1,0,0,0,158,
- 159,5,11,0,0,159,160,3,12,6,0,160,161,6,7,-1,0,161,171,1,0,0,0,162,163,
- 5,12,0,0,163,164,3,12,6,0,164,165,6,7,-1,0,165,171,1,0,0,0,166,167,5,13,
- 0,0,167,168,3,12,6,0,168,169,6,7,-1,0,169,171,1,0,0,0,170,154,1,0,0,0,
- 170,158,1,0,0,0,170,162,1,0,0,0,170,166,1,0,0,0,171,174,1,0,0,0,172,170,
- 1,0,0,0,172,173,1,0,0,0,173,15,1,0,0,0,174,172,1,0,0,0,175,176,3,14,7,
- 0,176,187,6,8,-1,0,177,178,5,14,0,0,178,179,3,14,7,0,179,180,6,8,-1,0,
- 180,186,1,0,0,0,181,182,5,15,0,0,182,183,3,14,7,0,183,184,6,8,-1,0,184,
- 186,1,0,0,0,185,177,1,0,0,0,185,181,1,0,0,0,186,189,1,0,0,0,187,185,1,
- 0,0,0,187,188,1,0,0,0,188,17,1,0,0,0,189,187,1,0,0,0,190,191,3,16,8,0,
- 191,211,6,9,-1,0,192,193,5,16,0,0,193,205,6,9,-1,0,194,195,5,17,0,0,195,
- 205,6,9,-1,0,196,197,5,18,0,0,197,205,6,9,-1,0,198,199,5,19,0,0,199,205,
- 6,9,-1,0,200,201,5,20,0,0,201,205,6,9,-1,0,202,203,5,21,0,0,203,205,6,
- 9,-1,0,204,192,1,0,0,0,204,194,1,0,0,0,204,196,1,0,0,0,204,198,1,0,0,0,
- 204,200,1,0,0,0,204,202,1,0,0,0,205,206,1,0,0,0,206,207,3,16,8,0,207,208,
- 6,9,-1,0,208,210,1,0,0,0,209,204,1,0,0,0,210,213,1,0,0,0,211,209,1,0,0,
- 0,211,212,1,0,0,0,212,214,1,0,0,0,213,211,1,0,0,0,214,215,6,9,-1,0,215,
- 19,1,0,0,0,216,217,5,22,0,0,217,218,3,18,9,0,218,219,6,10,-1,0,219,228,
- 1,0,0,0,220,221,5,22,0,0,221,222,3,20,10,0,222,223,6,10,-1,0,223,228,1,
- 0,0,0,224,225,3,18,9,0,225,226,6,10,-1,0,226,228,1,0,0,0,227,216,1,0,0,
- 0,227,220,1,0,0,0,227,224,1,0,0,0,228,21,1,0,0,0,229,230,3,20,10,0,230,
- 241,6,11,-1,0,231,232,5,23,0,0,232,233,3,20,10,0,233,234,6,11,-1,0,234,
- 240,1,0,0,0,235,236,5,24,0,0,236,237,3,20,10,0,237,238,6,11,-1,0,238,240,
- 1,0,0,0,239,231,1,0,0,0,239,235,1,0,0,0,240,243,1,0,0,0,241,239,1,0,0,
- 0,241,242,1,0,0,0,242,23,1,0,0,0,243,241,1,0,0,0,244,245,3,22,11,0,245,
- 252,6,12,-1,0,246,247,5,25,0,0,247,248,3,22,11,0,248,249,6,12,-1,0,249,
- 251,1,0,0,0,250,246,1,0,0,0,251,254,1,0,0,0,252,250,1,0,0,0,252,253,1,
- 0,0,0,253,25,1,0,0,0,254,252,1,0,0,0,255,256,3,24,12,0,256,267,6,13,-1,
- 0,257,258,5,26,0,0,258,259,3,24,12,0,259,260,6,13,-1,0,260,266,1,0,0,0,
- 261,262,5,27,0,0,262,263,3,24,12,0,263,264,6,13,-1,0,264,266,1,0,0,0,265,
- 257,1,0,0,0,265,261,1,0,0,0,266,269,1,0,0,0,267,265,1,0,0,0,267,268,1,
- 0,0,0,268,27,1,0,0,0,269,267,1,0,0,0,270,271,3,26,13,0,271,282,6,14,-1,
- 0,272,273,5,28,0,0,273,274,3,26,13,0,274,275,6,14,-1,0,275,281,1,0,0,0,
- 276,277,5,29,0,0,277,278,3,26,13,0,278,279,6,14,-1,0,279,281,1,0,0,0,280,
- 272,1,0,0,0,280,276,1,0,0,0,281,284,1,0,0,0,282,280,1,0,0,0,282,283,1,
- 0,0,0,283,29,1,0,0,0,284,282,1,0,0,0,285,286,3,28,14,0,286,291,6,15,-1,
- 0,287,288,5,30,0,0,288,289,3,30,15,0,289,290,6,15,-1,0,290,292,1,0,0,0,
- 291,287,1,0,0,0,291,292,1,0,0,0,292,31,1,0,0,0,293,294,3,30,15,0,294,299,
- 6,16,-1,0,295,296,5,31,0,0,296,297,3,32,16,0,297,298,6,16,-1,0,298,300,
- 1,0,0,0,299,295,1,0,0,0,299,300,1,0,0,0,300,33,1,0,0,0,301,302,3,32,16,
- 0,302,309,6,17,-1,0,303,304,5,32,0,0,304,305,3,32,16,0,305,306,6,17,-1,
- 0,306,308,1,0,0,0,307,303,1,0,0,0,308,311,1,0,0,0,309,307,1,0,0,0,309,
- 310,1,0,0,0,310,313,1,0,0,0,311,309,1,0,0,0,312,301,1,0,0,0,312,313,1,
- 0,0,0,313,35,1,0,0,0,314,315,3,32,16,0,315,316,6,18,-1,0,316,317,5,33,
- 0,0,317,318,3,32,16,0,318,319,6,18,-1,0,319,37,1,0,0,0,320,321,3,32,16,
- 0,321,322,6,19,-1,0,322,323,5,34,0,0,323,324,3,32,16,0,324,325,6,19,-1,
- 0,325,39,1,0,0,0,326,327,5,35,0,0,327,901,6,20,-1,0,328,329,5,36,0,0,329,
- 901,6,20,-1,0,330,331,5,152,0,0,331,901,6,20,-1,0,332,333,5,149,0,0,333,
- 901,6,20,-1,0,334,335,5,151,0,0,335,901,6,20,-1,0,336,337,5,150,0,0,337,
- 901,6,20,-1,0,338,339,5,153,0,0,339,901,6,20,-1,0,340,341,5,37,0,0,341,
- 342,3,32,16,0,342,343,5,38,0,0,343,344,6,20,-1,0,344,901,1,0,0,0,345,346,
- 5,39,0,0,346,347,3,34,17,0,347,348,5,40,0,0,348,349,6,20,-1,0,349,901,
- 1,0,0,0,350,351,5,39,0,0,351,352,3,34,17,0,352,353,5,41,0,0,353,354,6,
- 20,-1,0,354,901,1,0,0,0,355,356,5,42,0,0,356,357,3,36,18,0,357,358,5,43,
- 0,0,358,359,6,20,-1,0,359,901,1,0,0,0,360,361,5,39,0,0,361,362,3,36,18,
- 0,362,363,5,43,0,0,363,364,6,20,-1,0,364,901,1,0,0,0,365,366,5,39,0,0,
- 366,367,3,36,18,0,367,368,5,41,0,0,368,369,6,20,-1,0,369,901,1,0,0,0,370,
- 371,5,42,0,0,371,372,3,36,18,0,372,373,5,41,0,0,373,374,6,20,-1,0,374,
- 901,1,0,0,0,375,376,5,42,0,0,376,377,3,32,16,0,377,378,5,43,0,0,378,379,
- 6,20,-1,0,379,901,1,0,0,0,380,381,5,44,0,0,381,382,3,38,19,0,382,383,5,
- 45,0,0,383,384,6,20,-1,0,384,901,1,0,0,0,385,386,5,44,0,0,386,387,3,34,
- 17,0,387,388,5,45,0,0,388,389,6,20,-1,0,389,901,1,0,0,0,390,391,5,46,0,
- 0,391,392,3,34,17,0,392,393,5,43,0,0,393,394,6,20,-1,0,394,901,1,0,0,0,
- 395,396,5,47,0,0,396,397,3,34,17,0,397,398,5,43,0,0,398,399,6,20,-1,0,
- 399,901,1,0,0,0,400,401,5,48,0,0,401,402,3,34,17,0,402,403,5,43,0,0,403,
- 404,6,20,-1,0,404,901,1,0,0,0,405,406,5,49,0,0,406,407,3,34,17,0,407,408,
- 5,43,0,0,408,409,6,20,-1,0,409,901,1,0,0,0,410,411,5,50,0,0,411,412,3,
- 34,17,0,412,413,5,43,0,0,413,414,6,20,-1,0,414,901,1,0,0,0,415,416,5,51,
- 0,0,416,417,3,34,17,0,417,418,5,43,0,0,418,419,6,20,-1,0,419,901,1,0,0,
- 0,420,421,5,52,0,0,421,422,3,34,17,0,422,423,5,43,0,0,423,424,6,20,-1,
- 0,424,901,1,0,0,0,425,426,5,53,0,0,426,427,3,34,17,0,427,428,5,43,0,0,
- 428,429,6,20,-1,0,429,901,1,0,0,0,430,431,5,54,0,0,431,432,3,34,17,0,432,
- 433,5,43,0,0,433,434,6,20,-1,0,434,901,1,0,0,0,435,436,5,55,0,0,436,437,
- 3,34,17,0,437,438,5,43,0,0,438,439,6,20,-1,0,439,901,1,0,0,0,440,441,5,
- 56,0,0,441,442,3,34,17,0,442,443,5,43,0,0,443,444,6,20,-1,0,444,901,1,
- 0,0,0,445,446,5,57,0,0,446,447,3,34,17,0,447,448,5,43,0,0,448,449,6,20,
- -1,0,449,901,1,0,0,0,450,451,5,58,0,0,451,452,3,34,17,0,452,453,5,43,0,
- 0,453,454,6,20,-1,0,454,901,1,0,0,0,455,456,5,59,0,0,456,457,3,34,17,0,
- 457,458,5,43,0,0,458,459,6,20,-1,0,459,901,1,0,0,0,460,461,5,60,0,0,461,
- 462,3,34,17,0,462,463,5,43,0,0,463,464,6,20,-1,0,464,901,1,0,0,0,465,466,
- 5,61,0,0,466,467,3,34,17,0,467,468,5,43,0,0,468,469,6,20,-1,0,469,901,
- 1,0,0,0,470,471,5,62,0,0,471,472,3,34,17,0,472,473,5,43,0,0,473,474,6,
- 20,-1,0,474,901,1,0,0,0,475,476,5,63,0,0,476,477,3,34,17,0,477,478,5,43,
- 0,0,478,479,6,20,-1,0,479,901,1,0,0,0,480,481,5,64,0,0,481,482,3,34,17,
- 0,482,483,5,43,0,0,483,484,6,20,-1,0,484,901,1,0,0,0,485,486,5,65,0,0,
- 486,487,3,34,17,0,487,488,5,43,0,0,488,489,6,20,-1,0,489,901,1,0,0,0,490,
- 491,5,66,0,0,491,492,3,34,17,0,492,493,5,43,0,0,493,494,6,20,-1,0,494,
- 901,1,0,0,0,495,496,5,67,0,0,496,497,3,34,17,0,497,498,5,43,0,0,498,499,
- 6,20,-1,0,499,901,1,0,0,0,500,501,5,68,0,0,501,502,3,34,17,0,502,503,5,
- 43,0,0,503,504,6,20,-1,0,504,901,1,0,0,0,505,506,5,69,0,0,506,507,3,34,
- 17,0,507,508,5,43,0,0,508,509,6,20,-1,0,509,901,1,0,0,0,510,511,5,70,0,
- 0,511,512,3,34,17,0,512,513,5,43,0,0,513,514,6,20,-1,0,514,901,1,0,0,0,
- 515,516,5,71,0,0,516,517,3,34,17,0,517,518,5,43,0,0,518,519,6,20,-1,0,
- 519,901,1,0,0,0,520,521,5,72,0,0,521,522,3,34,17,0,522,523,5,43,0,0,523,
- 524,6,20,-1,0,524,901,1,0,0,0,525,526,5,73,0,0,526,527,3,34,17,0,527,528,
- 5,43,0,0,528,529,6,20,-1,0,529,901,1,0,0,0,530,531,5,74,0,0,531,532,3,
- 34,17,0,532,533,5,43,0,0,533,534,6,20,-1,0,534,901,1,0,0,0,535,536,5,75,
- 0,0,536,537,3,34,17,0,537,538,5,43,0,0,538,539,6,20,-1,0,539,901,1,0,0,
- 0,540,541,5,76,0,0,541,542,3,34,17,0,542,543,5,43,0,0,543,544,6,20,-1,
- 0,544,901,1,0,0,0,545,546,5,77,0,0,546,547,3,34,17,0,547,548,5,43,0,0,
- 548,549,6,20,-1,0,549,901,1,0,0,0,550,551,5,78,0,0,551,552,3,34,17,0,552,
- 553,5,43,0,0,553,554,6,20,-1,0,554,901,1,0,0,0,555,556,5,79,0,0,556,557,
- 3,34,17,0,557,558,5,43,0,0,558,559,6,20,-1,0,559,901,1,0,0,0,560,561,5,
- 80,0,0,561,562,3,34,17,0,562,563,5,43,0,0,563,564,6,20,-1,0,564,901,1,
- 0,0,0,565,566,5,81,0,0,566,567,3,34,17,0,567,568,5,43,0,0,568,569,6,20,
- -1,0,569,901,1,0,0,0,570,571,5,82,0,0,571,572,3,34,17,0,572,573,5,43,0,
- 0,573,574,6,20,-1,0,574,901,1,0,0,0,575,576,5,83,0,0,576,577,3,34,17,0,
- 577,578,5,43,0,0,578,579,6,20,-1,0,579,901,1,0,0,0,580,581,5,84,0,0,581,
- 582,3,34,17,0,582,583,5,43,0,0,583,584,6,20,-1,0,584,901,1,0,0,0,585,586,
- 5,85,0,0,586,587,3,34,17,0,587,588,5,43,0,0,588,589,6,20,-1,0,589,901,
- 1,0,0,0,590,591,5,86,0,0,591,592,3,34,17,0,592,593,5,43,0,0,593,594,6,
- 20,-1,0,594,901,1,0,0,0,595,596,5,87,0,0,596,597,3,34,17,0,597,598,5,43,
- 0,0,598,599,6,20,-1,0,599,901,1,0,0,0,600,601,5,88,0,0,601,602,3,34,17,
- 0,602,603,5,43,0,0,603,604,6,20,-1,0,604,901,1,0,0,0,605,606,5,89,0,0,
- 606,607,3,34,17,0,607,608,5,43,0,0,608,609,6,20,-1,0,609,901,1,0,0,0,610,
- 611,5,90,0,0,611,612,3,34,17,0,612,613,5,43,0,0,613,614,6,20,-1,0,614,
- 901,1,0,0,0,615,616,5,91,0,0,616,617,3,34,17,0,617,618,5,43,0,0,618,619,
- 6,20,-1,0,619,901,1,0,0,0,620,621,5,92,0,0,621,622,3,34,17,0,622,623,5,
- 43,0,0,623,624,6,20,-1,0,624,901,1,0,0,0,625,626,5,93,0,0,626,627,3,34,
- 17,0,627,628,5,43,0,0,628,629,6,20,-1,0,629,901,1,0,0,0,630,631,5,94,0,
- 0,631,632,3,34,17,0,632,633,5,43,0,0,633,634,6,20,-1,0,634,901,1,0,0,0,
- 635,636,5,95,0,0,636,637,3,34,17,0,637,638,5,43,0,0,638,639,6,20,-1,0,
- 639,901,1,0,0,0,640,641,5,96,0,0,641,642,3,34,17,0,642,643,5,43,0,0,643,
- 644,6,20,-1,0,644,901,1,0,0,0,645,646,5,97,0,0,646,647,3,34,17,0,647,648,
- 5,43,0,0,648,649,6,20,-1,0,649,901,1,0,0,0,650,651,5,98,0,0,651,652,3,
- 34,17,0,652,653,5,43,0,0,653,654,6,20,-1,0,654,901,1,0,0,0,655,656,5,99,
- 0,0,656,657,3,34,17,0,657,658,5,43,0,0,658,659,6,20,-1,0,659,901,1,0,0,
- 0,660,661,5,100,0,0,661,662,3,34,17,0,662,663,5,43,0,0,663,664,6,20,-1,
- 0,664,901,1,0,0,0,665,666,5,101,0,0,666,667,3,34,17,0,667,668,5,43,0,0,
- 668,669,6,20,-1,0,669,901,1,0,0,0,670,671,5,102,0,0,671,672,3,34,17,0,
- 672,673,5,43,0,0,673,674,6,20,-1,0,674,901,1,0,0,0,675,676,5,103,0,0,676,
- 677,3,34,17,0,677,678,5,43,0,0,678,679,6,20,-1,0,679,901,1,0,0,0,680,681,
- 5,104,0,0,681,682,3,34,17,0,682,683,5,43,0,0,683,684,6,20,-1,0,684,901,
- 1,0,0,0,685,686,5,105,0,0,686,687,3,34,17,0,687,688,5,43,0,0,688,689,6,
- 20,-1,0,689,901,1,0,0,0,690,691,5,106,0,0,691,692,3,34,17,0,692,693,5,
- 43,0,0,693,694,6,20,-1,0,694,901,1,0,0,0,695,696,5,107,0,0,696,697,3,34,
- 17,0,697,698,5,43,0,0,698,699,6,20,-1,0,699,901,1,0,0,0,700,701,5,108,
- 0,0,701,702,3,34,17,0,702,703,5,43,0,0,703,704,6,20,-1,0,704,901,1,0,0,
- 0,705,706,5,109,0,0,706,707,3,34,17,0,707,708,5,43,0,0,708,709,6,20,-1,
- 0,709,901,1,0,0,0,710,711,5,110,0,0,711,712,3,34,17,0,712,713,5,43,0,0,
- 713,714,6,20,-1,0,714,901,1,0,0,0,715,716,5,111,0,0,716,717,3,34,17,0,
- 717,718,5,43,0,0,718,719,6,20,-1,0,719,901,1,0,0,0,720,721,5,112,0,0,721,
- 722,3,34,17,0,722,723,5,43,0,0,723,724,6,20,-1,0,724,901,1,0,0,0,725,726,
- 5,113,0,0,726,727,3,34,17,0,727,728,5,43,0,0,728,729,6,20,-1,0,729,901,
- 1,0,0,0,730,731,5,114,0,0,731,732,3,34,17,0,732,733,5,43,0,0,733,734,6,
- 20,-1,0,734,901,1,0,0,0,735,736,5,115,0,0,736,737,3,34,17,0,737,738,5,
- 43,0,0,738,739,6,20,-1,0,739,901,1,0,0,0,740,741,5,116,0,0,741,742,3,34,
- 17,0,742,743,5,43,0,0,743,744,6,20,-1,0,744,901,1,0,0,0,745,746,5,117,
- 0,0,746,747,3,34,17,0,747,748,5,43,0,0,748,749,6,20,-1,0,749,901,1,0,0,
- 0,750,751,5,118,0,0,751,752,3,34,17,0,752,753,5,43,0,0,753,754,6,20,-1,
- 0,754,901,1,0,0,0,755,756,5,119,0,0,756,757,3,34,17,0,757,758,5,43,0,0,
- 758,759,6,20,-1,0,759,901,1,0,0,0,760,761,5,120,0,0,761,762,3,34,17,0,
- 762,763,5,43,0,0,763,764,6,20,-1,0,764,901,1,0,0,0,765,766,5,121,0,0,766,
- 767,3,34,17,0,767,768,5,43,0,0,768,769,6,20,-1,0,769,901,1,0,0,0,770,771,
- 5,122,0,0,771,772,3,34,17,0,772,773,5,43,0,0,773,774,6,20,-1,0,774,901,
- 1,0,0,0,775,776,5,123,0,0,776,777,3,34,17,0,777,778,5,43,0,0,778,779,6,
- 20,-1,0,779,901,1,0,0,0,780,781,5,124,0,0,781,782,3,34,17,0,782,783,5,
- 43,0,0,783,784,6,20,-1,0,784,901,1,0,0,0,785,786,5,125,0,0,786,787,3,34,
- 17,0,787,788,5,43,0,0,788,789,6,20,-1,0,789,901,1,0,0,0,790,791,5,126,
- 0,0,791,792,3,34,17,0,792,793,5,43,0,0,793,794,6,20,-1,0,794,901,1,0,0,
- 0,795,796,5,127,0,0,796,797,3,34,17,0,797,798,5,43,0,0,798,799,6,20,-1,
- 0,799,901,1,0,0,0,800,801,5,128,0,0,801,802,3,34,17,0,802,803,5,43,0,0,
- 803,804,6,20,-1,0,804,901,1,0,0,0,805,806,5,129,0,0,806,807,3,34,17,0,
- 807,808,5,43,0,0,808,809,6,20,-1,0,809,901,1,0,0,0,810,811,5,130,0,0,811,
- 812,3,34,17,0,812,813,5,43,0,0,813,814,6,20,-1,0,814,901,1,0,0,0,815,816,
- 5,131,0,0,816,817,3,34,17,0,817,818,5,43,0,0,818,819,6,20,-1,0,819,901,
- 1,0,0,0,820,821,5,132,0,0,821,822,3,34,17,0,822,823,5,43,0,0,823,824,6,
- 20,-1,0,824,901,1,0,0,0,825,826,5,133,0,0,826,827,3,34,17,0,827,828,5,
- 43,0,0,828,829,6,20,-1,0,829,901,1,0,0,0,830,831,5,134,0,0,831,832,3,34,
- 17,0,832,833,5,43,0,0,833,834,6,20,-1,0,834,901,1,0,0,0,835,836,5,135,
- 0,0,836,837,3,34,17,0,837,838,5,43,0,0,838,839,6,20,-1,0,839,901,1,0,0,
- 0,840,841,5,136,0,0,841,842,3,34,17,0,842,843,5,43,0,0,843,844,6,20,-1,
- 0,844,901,1,0,0,0,845,846,5,137,0,0,846,847,3,34,17,0,847,848,5,43,0,0,
- 848,849,6,20,-1,0,849,901,1,0,0,0,850,851,5,138,0,0,851,852,3,34,17,0,
- 852,853,5,43,0,0,853,854,6,20,-1,0,854,901,1,0,0,0,855,856,5,139,0,0,856,
- 857,3,34,17,0,857,858,5,43,0,0,858,859,6,20,-1,0,859,901,1,0,0,0,860,861,
- 5,140,0,0,861,862,3,34,17,0,862,863,5,43,0,0,863,864,6,20,-1,0,864,901,
- 1,0,0,0,865,866,5,141,0,0,866,867,3,34,17,0,867,868,5,43,0,0,868,869,6,
- 20,-1,0,869,901,1,0,0,0,870,871,5,142,0,0,871,872,3,34,17,0,872,873,5,
- 43,0,0,873,874,6,20,-1,0,874,901,1,0,0,0,875,876,5,143,0,0,876,877,3,34,
- 17,0,877,878,5,43,0,0,878,879,6,20,-1,0,879,901,1,0,0,0,880,881,5,144,
- 0,0,881,882,3,34,17,0,882,883,5,43,0,0,883,884,6,20,-1,0,884,901,1,0,0,
- 0,885,886,5,145,0,0,886,887,3,34,17,0,887,888,5,43,0,0,888,889,6,20,-1,
- 0,889,901,1,0,0,0,890,891,5,146,0,0,891,892,3,34,17,0,892,893,5,43,0,0,
- 893,894,6,20,-1,0,894,901,1,0,0,0,895,896,5,147,0,0,896,897,3,34,17,0,
- 897,898,5,43,0,0,898,899,6,20,-1,0,899,901,1,0,0,0,900,326,1,0,0,0,900,
- 328,1,0,0,0,900,330,1,0,0,0,900,332,1,0,0,0,900,334,1,0,0,0,900,336,1,
- 0,0,0,900,338,1,0,0,0,900,340,1,0,0,0,900,345,1,0,0,0,900,350,1,0,0,0,
- 900,355,1,0,0,0,900,360,1,0,0,0,900,365,1,0,0,0,900,370,1,0,0,0,900,375,
- 1,0,0,0,900,380,1,0,0,0,900,385,1,0,0,0,900,390,1,0,0,0,900,395,1,0,0,
- 0,900,400,1,0,0,0,900,405,1,0,0,0,900,410,1,0,0,0,900,415,1,0,0,0,900,
- 420,1,0,0,0,900,425,1,0,0,0,900,430,1,0,0,0,900,435,1,0,0,0,900,440,1,
- 0,0,0,900,445,1,0,0,0,900,450,1,0,0,0,900,455,1,0,0,0,900,460,1,0,0,0,
- 900,465,1,0,0,0,900,470,1,0,0,0,900,475,1,0,0,0,900,480,1,0,0,0,900,485,
- 1,0,0,0,900,490,1,0,0,0,900,495,1,0,0,0,900,500,1,0,0,0,900,505,1,0,0,
- 0,900,510,1,0,0,0,900,515,1,0,0,0,900,520,1,0,0,0,900,525,1,0,0,0,900,
- 530,1,0,0,0,900,535,1,0,0,0,900,540,1,0,0,0,900,545,1,0,0,0,900,550,1,
- 0,0,0,900,555,1,0,0,0,900,560,1,0,0,0,900,565,1,0,0,0,900,570,1,0,0,0,
- 900,575,1,0,0,0,900,580,1,0,0,0,900,585,1,0,0,0,900,590,1,0,0,0,900,595,
- 1,0,0,0,900,600,1,0,0,0,900,605,1,0,0,0,900,610,1,0,0,0,900,615,1,0,0,
- 0,900,620,1,0,0,0,900,625,1,0,0,0,900,630,1,0,0,0,900,635,1,0,0,0,900,
- 640,1,0,0,0,900,645,1,0,0,0,900,650,1,0,0,0,900,655,1,0,0,0,900,660,1,
- 0,0,0,900,665,1,0,0,0,900,670,1,0,0,0,900,675,1,0,0,0,900,680,1,0,0,0,
- 900,685,1,0,0,0,900,690,1,0,0,0,900,695,1,0,0,0,900,700,1,0,0,0,900,705,
- 1,0,0,0,900,710,1,0,0,0,900,715,1,0,0,0,900,720,1,0,0,0,900,725,1,0,0,
- 0,900,730,1,0,0,0,900,735,1,0,0,0,900,740,1,0,0,0,900,745,1,0,0,0,900,
- 750,1,0,0,0,900,755,1,0,0,0,900,760,1,0,0,0,900,765,1,0,0,0,900,770,1,
- 0,0,0,900,775,1,0,0,0,900,780,1,0,0,0,900,785,1,0,0,0,900,790,1,0,0,0,
- 900,795,1,0,0,0,900,800,1,0,0,0,900,805,1,0,0,0,900,810,1,0,0,0,900,815,
- 1,0,0,0,900,820,1,0,0,0,900,825,1,0,0,0,900,830,1,0,0,0,900,835,1,0,0,
- 0,900,840,1,0,0,0,900,845,1,0,0,0,900,850,1,0,0,0,900,855,1,0,0,0,900,
- 860,1,0,0,0,900,865,1,0,0,0,900,870,1,0,0,0,900,875,1,0,0,0,900,880,1,
- 0,0,0,900,885,1,0,0,0,900,890,1,0,0,0,900,895,1,0,0,0,901,41,1,0,0,0,902,
- 903,3,32,16,0,903,904,5,0,0,1,904,905,6,21,-1,0,905,43,1,0,0,0,33,51,59,
- 67,69,76,86,96,101,117,119,132,134,147,149,170,172,185,187,204,211,227,
- 239,241,252,265,267,280,282,291,299,309,312,900
+ 20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,
+ 20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,3,20,911,8,20,1,21,1,21,1,21,
+ 1,21,1,21,0,0,22,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,
+ 40,42,0,0,1055,0,51,1,0,0,0,2,69,1,0,0,0,4,71,1,0,0,0,6,101,1,0,0,0,8,
+ 103,1,0,0,0,10,122,1,0,0,0,12,137,1,0,0,0,14,152,1,0,0,0,16,175,1,0,0,
+ 0,18,190,1,0,0,0,20,227,1,0,0,0,22,229,1,0,0,0,24,244,1,0,0,0,26,255,1,
+ 0,0,0,28,270,1,0,0,0,30,285,1,0,0,0,32,293,1,0,0,0,34,312,1,0,0,0,36,314,
+ 1,0,0,0,38,320,1,0,0,0,40,910,1,0,0,0,42,912,1,0,0,0,44,45,3,40,20,0,45,
+ 46,5,1,0,0,46,47,6,0,-1,0,47,52,1,0,0,0,48,49,3,40,20,0,49,50,6,0,-1,0,
+ 50,52,1,0,0,0,51,44,1,0,0,0,51,48,1,0,0,0,52,1,1,0,0,0,53,54,5,2,0,0,54,
+ 55,3,0,0,0,55,56,6,1,-1,0,56,58,1,0,0,0,57,53,1,0,0,0,58,59,1,0,0,0,59,
+ 57,1,0,0,0,59,60,1,0,0,0,60,70,1,0,0,0,61,62,5,2,0,0,62,63,3,6,3,0,63,
+ 64,6,1,-1,0,64,66,1,0,0,0,65,61,1,0,0,0,66,67,1,0,0,0,67,65,1,0,0,0,67,
+ 68,1,0,0,0,68,70,1,0,0,0,69,57,1,0,0,0,69,65,1,0,0,0,70,3,1,0,0,0,71,72,
+ 3,0,0,0,72,76,6,2,-1,0,73,74,3,2,1,0,74,75,6,2,-1,0,75,77,1,0,0,0,76,73,
+ 1,0,0,0,76,77,1,0,0,0,77,5,1,0,0,0,78,79,5,3,0,0,79,80,3,4,2,0,80,81,6,
+ 3,-1,0,81,87,1,0,0,0,82,83,5,4,0,0,83,84,3,4,2,0,84,85,6,3,-1,0,85,87,
+ 1,0,0,0,86,78,1,0,0,0,86,82,1,0,0,0,87,102,1,0,0,0,88,89,5,3,0,0,89,90,
+ 3,6,3,0,90,91,6,3,-1,0,91,97,1,0,0,0,92,93,5,4,0,0,93,94,3,6,3,0,94,95,
+ 6,3,-1,0,95,97,1,0,0,0,96,88,1,0,0,0,96,92,1,0,0,0,97,102,1,0,0,0,98,99,
+ 3,4,2,0,99,100,6,3,-1,0,100,102,1,0,0,0,101,86,1,0,0,0,101,96,1,0,0,0,
+ 101,98,1,0,0,0,102,7,1,0,0,0,103,104,3,6,3,0,104,119,6,4,-1,0,105,106,
+ 5,5,0,0,106,107,3,6,3,0,107,108,6,4,-1,0,108,118,1,0,0,0,109,110,5,6,0,
+ 0,110,111,3,6,3,0,111,112,6,4,-1,0,112,118,1,0,0,0,113,114,5,7,0,0,114,
+ 115,3,6,3,0,115,116,6,4,-1,0,116,118,1,0,0,0,117,105,1,0,0,0,117,109,1,
+ 0,0,0,117,113,1,0,0,0,118,121,1,0,0,0,119,117,1,0,0,0,119,120,1,0,0,0,
+ 120,9,1,0,0,0,121,119,1,0,0,0,122,123,3,8,4,0,123,134,6,5,-1,0,124,125,
+ 5,4,0,0,125,126,3,8,4,0,126,127,6,5,-1,0,127,133,1,0,0,0,128,129,5,3,0,
+ 0,129,130,3,8,4,0,130,131,6,5,-1,0,131,133,1,0,0,0,132,124,1,0,0,0,132,
+ 128,1,0,0,0,133,136,1,0,0,0,134,132,1,0,0,0,134,135,1,0,0,0,135,11,1,0,
+ 0,0,136,134,1,0,0,0,137,138,3,10,5,0,138,149,6,6,-1,0,139,140,5,8,0,0,
+ 140,141,3,10,5,0,141,142,6,6,-1,0,142,148,1,0,0,0,143,144,5,9,0,0,144,
+ 145,3,10,5,0,145,146,6,6,-1,0,146,148,1,0,0,0,147,139,1,0,0,0,147,143,
+ 1,0,0,0,148,151,1,0,0,0,149,147,1,0,0,0,149,150,1,0,0,0,150,13,1,0,0,0,
+ 151,149,1,0,0,0,152,153,3,12,6,0,153,172,6,7,-1,0,154,155,5,10,0,0,155,
+ 156,3,12,6,0,156,157,6,7,-1,0,157,171,1,0,0,0,158,159,5,11,0,0,159,160,
+ 3,12,6,0,160,161,6,7,-1,0,161,171,1,0,0,0,162,163,5,12,0,0,163,164,3,12,
+ 6,0,164,165,6,7,-1,0,165,171,1,0,0,0,166,167,5,13,0,0,167,168,3,12,6,0,
+ 168,169,6,7,-1,0,169,171,1,0,0,0,170,154,1,0,0,0,170,158,1,0,0,0,170,162,
+ 1,0,0,0,170,166,1,0,0,0,171,174,1,0,0,0,172,170,1,0,0,0,172,173,1,0,0,
+ 0,173,15,1,0,0,0,174,172,1,0,0,0,175,176,3,14,7,0,176,187,6,8,-1,0,177,
+ 178,5,14,0,0,178,179,3,14,7,0,179,180,6,8,-1,0,180,186,1,0,0,0,181,182,
+ 5,15,0,0,182,183,3,14,7,0,183,184,6,8,-1,0,184,186,1,0,0,0,185,177,1,0,
+ 0,0,185,181,1,0,0,0,186,189,1,0,0,0,187,185,1,0,0,0,187,188,1,0,0,0,188,
+ 17,1,0,0,0,189,187,1,0,0,0,190,191,3,16,8,0,191,211,6,9,-1,0,192,193,5,
+ 16,0,0,193,205,6,9,-1,0,194,195,5,17,0,0,195,205,6,9,-1,0,196,197,5,18,
+ 0,0,197,205,6,9,-1,0,198,199,5,19,0,0,199,205,6,9,-1,0,200,201,5,20,0,
+ 0,201,205,6,9,-1,0,202,203,5,21,0,0,203,205,6,9,-1,0,204,192,1,0,0,0,204,
+ 194,1,0,0,0,204,196,1,0,0,0,204,198,1,0,0,0,204,200,1,0,0,0,204,202,1,
+ 0,0,0,205,206,1,0,0,0,206,207,3,16,8,0,207,208,6,9,-1,0,208,210,1,0,0,
+ 0,209,204,1,0,0,0,210,213,1,0,0,0,211,209,1,0,0,0,211,212,1,0,0,0,212,
+ 214,1,0,0,0,213,211,1,0,0,0,214,215,6,9,-1,0,215,19,1,0,0,0,216,217,5,
+ 22,0,0,217,218,3,18,9,0,218,219,6,10,-1,0,219,228,1,0,0,0,220,221,5,22,
+ 0,0,221,222,3,20,10,0,222,223,6,10,-1,0,223,228,1,0,0,0,224,225,3,18,9,
+ 0,225,226,6,10,-1,0,226,228,1,0,0,0,227,216,1,0,0,0,227,220,1,0,0,0,227,
+ 224,1,0,0,0,228,21,1,0,0,0,229,230,3,20,10,0,230,241,6,11,-1,0,231,232,
+ 5,23,0,0,232,233,3,20,10,0,233,234,6,11,-1,0,234,240,1,0,0,0,235,236,5,
+ 24,0,0,236,237,3,20,10,0,237,238,6,11,-1,0,238,240,1,0,0,0,239,231,1,0,
+ 0,0,239,235,1,0,0,0,240,243,1,0,0,0,241,239,1,0,0,0,241,242,1,0,0,0,242,
+ 23,1,0,0,0,243,241,1,0,0,0,244,245,3,22,11,0,245,252,6,12,-1,0,246,247,
+ 5,25,0,0,247,248,3,22,11,0,248,249,6,12,-1,0,249,251,1,0,0,0,250,246,1,
+ 0,0,0,251,254,1,0,0,0,252,250,1,0,0,0,252,253,1,0,0,0,253,25,1,0,0,0,254,
+ 252,1,0,0,0,255,256,3,24,12,0,256,267,6,13,-1,0,257,258,5,26,0,0,258,259,
+ 3,24,12,0,259,260,6,13,-1,0,260,266,1,0,0,0,261,262,5,27,0,0,262,263,3,
+ 24,12,0,263,264,6,13,-1,0,264,266,1,0,0,0,265,257,1,0,0,0,265,261,1,0,
+ 0,0,266,269,1,0,0,0,267,265,1,0,0,0,267,268,1,0,0,0,268,27,1,0,0,0,269,
+ 267,1,0,0,0,270,271,3,26,13,0,271,282,6,14,-1,0,272,273,5,28,0,0,273,274,
+ 3,26,13,0,274,275,6,14,-1,0,275,281,1,0,0,0,276,277,5,29,0,0,277,278,3,
+ 26,13,0,278,279,6,14,-1,0,279,281,1,0,0,0,280,272,1,0,0,0,280,276,1,0,
+ 0,0,281,284,1,0,0,0,282,280,1,0,0,0,282,283,1,0,0,0,283,29,1,0,0,0,284,
+ 282,1,0,0,0,285,286,3,28,14,0,286,291,6,15,-1,0,287,288,5,30,0,0,288,289,
+ 3,30,15,0,289,290,6,15,-1,0,290,292,1,0,0,0,291,287,1,0,0,0,291,292,1,
+ 0,0,0,292,31,1,0,0,0,293,294,3,30,15,0,294,299,6,16,-1,0,295,296,5,31,
+ 0,0,296,297,3,32,16,0,297,298,6,16,-1,0,298,300,1,0,0,0,299,295,1,0,0,
+ 0,299,300,1,0,0,0,300,33,1,0,0,0,301,302,3,32,16,0,302,309,6,17,-1,0,303,
+ 304,5,32,0,0,304,305,3,32,16,0,305,306,6,17,-1,0,306,308,1,0,0,0,307,303,
+ 1,0,0,0,308,311,1,0,0,0,309,307,1,0,0,0,309,310,1,0,0,0,310,313,1,0,0,
+ 0,311,309,1,0,0,0,312,301,1,0,0,0,312,313,1,0,0,0,313,35,1,0,0,0,314,315,
+ 3,32,16,0,315,316,6,18,-1,0,316,317,5,33,0,0,317,318,3,32,16,0,318,319,
+ 6,18,-1,0,319,37,1,0,0,0,320,321,3,32,16,0,321,322,6,19,-1,0,322,323,5,
+ 34,0,0,323,324,3,32,16,0,324,325,6,19,-1,0,325,39,1,0,0,0,326,327,5,35,
+ 0,0,327,911,6,20,-1,0,328,329,5,36,0,0,329,911,6,20,-1,0,330,331,5,154,
+ 0,0,331,911,6,20,-1,0,332,333,5,151,0,0,333,911,6,20,-1,0,334,335,5,153,
+ 0,0,335,911,6,20,-1,0,336,337,5,152,0,0,337,911,6,20,-1,0,338,339,5,155,
+ 0,0,339,911,6,20,-1,0,340,341,5,37,0,0,341,342,3,32,16,0,342,343,5,38,
+ 0,0,343,344,6,20,-1,0,344,911,1,0,0,0,345,346,5,39,0,0,346,347,3,34,17,
+ 0,347,348,5,40,0,0,348,349,6,20,-1,0,349,911,1,0,0,0,350,351,5,39,0,0,
+ 351,352,3,34,17,0,352,353,5,41,0,0,353,354,6,20,-1,0,354,911,1,0,0,0,355,
+ 356,5,42,0,0,356,357,3,36,18,0,357,358,5,43,0,0,358,359,6,20,-1,0,359,
+ 911,1,0,0,0,360,361,5,39,0,0,361,362,3,36,18,0,362,363,5,43,0,0,363,364,
+ 6,20,-1,0,364,911,1,0,0,0,365,366,5,39,0,0,366,367,3,36,18,0,367,368,5,
+ 41,0,0,368,369,6,20,-1,0,369,911,1,0,0,0,370,371,5,42,0,0,371,372,3,36,
+ 18,0,372,373,5,41,0,0,373,374,6,20,-1,0,374,911,1,0,0,0,375,376,5,42,0,
+ 0,376,377,3,32,16,0,377,378,5,43,0,0,378,379,6,20,-1,0,379,911,1,0,0,0,
+ 380,381,5,44,0,0,381,382,3,38,19,0,382,383,5,45,0,0,383,384,6,20,-1,0,
+ 384,911,1,0,0,0,385,386,5,44,0,0,386,387,3,34,17,0,387,388,5,45,0,0,388,
+ 389,6,20,-1,0,389,911,1,0,0,0,390,391,5,46,0,0,391,392,3,34,17,0,392,393,
+ 5,43,0,0,393,394,6,20,-1,0,394,911,1,0,0,0,395,396,5,47,0,0,396,397,3,
+ 34,17,0,397,398,5,43,0,0,398,399,6,20,-1,0,399,911,1,0,0,0,400,401,5,48,
+ 0,0,401,402,3,34,17,0,402,403,5,43,0,0,403,404,6,20,-1,0,404,911,1,0,0,
+ 0,405,406,5,49,0,0,406,407,3,34,17,0,407,408,5,43,0,0,408,409,6,20,-1,
+ 0,409,911,1,0,0,0,410,411,5,50,0,0,411,412,3,34,17,0,412,413,5,43,0,0,
+ 413,414,6,20,-1,0,414,911,1,0,0,0,415,416,5,51,0,0,416,417,3,34,17,0,417,
+ 418,5,43,0,0,418,419,6,20,-1,0,419,911,1,0,0,0,420,421,5,52,0,0,421,422,
+ 3,34,17,0,422,423,5,43,0,0,423,424,6,20,-1,0,424,911,1,0,0,0,425,426,5,
+ 53,0,0,426,427,3,34,17,0,427,428,5,43,0,0,428,429,6,20,-1,0,429,911,1,
+ 0,0,0,430,431,5,54,0,0,431,432,3,34,17,0,432,433,5,43,0,0,433,434,6,20,
+ -1,0,434,911,1,0,0,0,435,436,5,55,0,0,436,437,3,34,17,0,437,438,5,43,0,
+ 0,438,439,6,20,-1,0,439,911,1,0,0,0,440,441,5,56,0,0,441,442,3,34,17,0,
+ 442,443,5,43,0,0,443,444,6,20,-1,0,444,911,1,0,0,0,445,446,5,57,0,0,446,
+ 447,3,34,17,0,447,448,5,43,0,0,448,449,6,20,-1,0,449,911,1,0,0,0,450,451,
+ 5,58,0,0,451,452,3,34,17,0,452,453,5,43,0,0,453,454,6,20,-1,0,454,911,
+ 1,0,0,0,455,456,5,59,0,0,456,457,3,34,17,0,457,458,5,43,0,0,458,459,6,
+ 20,-1,0,459,911,1,0,0,0,460,461,5,60,0,0,461,462,3,34,17,0,462,463,5,43,
+ 0,0,463,464,6,20,-1,0,464,911,1,0,0,0,465,466,5,61,0,0,466,467,3,34,17,
+ 0,467,468,5,43,0,0,468,469,6,20,-1,0,469,911,1,0,0,0,470,471,5,62,0,0,
+ 471,472,3,34,17,0,472,473,5,43,0,0,473,474,6,20,-1,0,474,911,1,0,0,0,475,
+ 476,5,63,0,0,476,477,3,34,17,0,477,478,5,43,0,0,478,479,6,20,-1,0,479,
+ 911,1,0,0,0,480,481,5,64,0,0,481,482,3,34,17,0,482,483,5,43,0,0,483,484,
+ 6,20,-1,0,484,911,1,0,0,0,485,486,5,65,0,0,486,487,3,34,17,0,487,488,5,
+ 43,0,0,488,489,6,20,-1,0,489,911,1,0,0,0,490,491,5,66,0,0,491,492,3,34,
+ 17,0,492,493,5,43,0,0,493,494,6,20,-1,0,494,911,1,0,0,0,495,496,5,67,0,
+ 0,496,497,3,34,17,0,497,498,5,43,0,0,498,499,6,20,-1,0,499,911,1,0,0,0,
+ 500,501,5,68,0,0,501,502,3,34,17,0,502,503,5,43,0,0,503,504,6,20,-1,0,
+ 504,911,1,0,0,0,505,506,5,69,0,0,506,507,3,34,17,0,507,508,5,43,0,0,508,
+ 509,6,20,-1,0,509,911,1,0,0,0,510,511,5,70,0,0,511,512,3,34,17,0,512,513,
+ 5,43,0,0,513,514,6,20,-1,0,514,911,1,0,0,0,515,516,5,71,0,0,516,517,3,
+ 34,17,0,517,518,5,43,0,0,518,519,6,20,-1,0,519,911,1,0,0,0,520,521,5,72,
+ 0,0,521,522,3,34,17,0,522,523,5,43,0,0,523,524,6,20,-1,0,524,911,1,0,0,
+ 0,525,526,5,73,0,0,526,527,3,34,17,0,527,528,5,43,0,0,528,529,6,20,-1,
+ 0,529,911,1,0,0,0,530,531,5,74,0,0,531,532,3,34,17,0,532,533,5,43,0,0,
+ 533,534,6,20,-1,0,534,911,1,0,0,0,535,536,5,75,0,0,536,537,3,34,17,0,537,
+ 538,5,43,0,0,538,539,6,20,-1,0,539,911,1,0,0,0,540,541,5,76,0,0,541,542,
+ 3,34,17,0,542,543,5,43,0,0,543,544,6,20,-1,0,544,911,1,0,0,0,545,546,5,
+ 77,0,0,546,547,3,34,17,0,547,548,5,43,0,0,548,549,6,20,-1,0,549,911,1,
+ 0,0,0,550,551,5,78,0,0,551,552,3,34,17,0,552,553,5,43,0,0,553,554,6,20,
+ -1,0,554,911,1,0,0,0,555,556,5,79,0,0,556,557,3,34,17,0,557,558,5,43,0,
+ 0,558,559,6,20,-1,0,559,911,1,0,0,0,560,561,5,80,0,0,561,562,3,34,17,0,
+ 562,563,5,43,0,0,563,564,6,20,-1,0,564,911,1,0,0,0,565,566,5,81,0,0,566,
+ 567,3,34,17,0,567,568,5,43,0,0,568,569,6,20,-1,0,569,911,1,0,0,0,570,571,
+ 5,82,0,0,571,572,3,34,17,0,572,573,5,43,0,0,573,574,6,20,-1,0,574,911,
+ 1,0,0,0,575,576,5,83,0,0,576,577,3,34,17,0,577,578,5,43,0,0,578,579,6,
+ 20,-1,0,579,911,1,0,0,0,580,581,5,84,0,0,581,582,3,34,17,0,582,583,5,43,
+ 0,0,583,584,6,20,-1,0,584,911,1,0,0,0,585,586,5,85,0,0,586,587,3,34,17,
+ 0,587,588,5,43,0,0,588,589,6,20,-1,0,589,911,1,0,0,0,590,591,5,86,0,0,
+ 591,592,3,34,17,0,592,593,5,43,0,0,593,594,6,20,-1,0,594,911,1,0,0,0,595,
+ 596,5,87,0,0,596,597,3,34,17,0,597,598,5,43,0,0,598,599,6,20,-1,0,599,
+ 911,1,0,0,0,600,601,5,88,0,0,601,602,3,34,17,0,602,603,5,43,0,0,603,604,
+ 6,20,-1,0,604,911,1,0,0,0,605,606,5,89,0,0,606,607,3,34,17,0,607,608,5,
+ 43,0,0,608,609,6,20,-1,0,609,911,1,0,0,0,610,611,5,90,0,0,611,612,3,34,
+ 17,0,612,613,5,43,0,0,613,614,6,20,-1,0,614,911,1,0,0,0,615,616,5,91,0,
+ 0,616,617,3,34,17,0,617,618,5,43,0,0,618,619,6,20,-1,0,619,911,1,0,0,0,
+ 620,621,5,92,0,0,621,622,3,34,17,0,622,623,5,43,0,0,623,624,6,20,-1,0,
+ 624,911,1,0,0,0,625,626,5,93,0,0,626,627,3,34,17,0,627,628,5,43,0,0,628,
+ 629,6,20,-1,0,629,911,1,0,0,0,630,631,5,94,0,0,631,632,3,34,17,0,632,633,
+ 5,43,0,0,633,634,6,20,-1,0,634,911,1,0,0,0,635,636,5,95,0,0,636,637,3,
+ 34,17,0,637,638,5,43,0,0,638,639,6,20,-1,0,639,911,1,0,0,0,640,641,5,96,
+ 0,0,641,642,3,34,17,0,642,643,5,43,0,0,643,644,6,20,-1,0,644,911,1,0,0,
+ 0,645,646,5,97,0,0,646,647,3,34,17,0,647,648,5,43,0,0,648,649,6,20,-1,
+ 0,649,911,1,0,0,0,650,651,5,98,0,0,651,652,3,34,17,0,652,653,5,43,0,0,
+ 653,654,6,20,-1,0,654,911,1,0,0,0,655,656,5,99,0,0,656,657,3,34,17,0,657,
+ 658,5,43,0,0,658,659,6,20,-1,0,659,911,1,0,0,0,660,661,5,100,0,0,661,662,
+ 3,34,17,0,662,663,5,43,0,0,663,664,6,20,-1,0,664,911,1,0,0,0,665,666,5,
+ 101,0,0,666,667,3,34,17,0,667,668,5,43,0,0,668,669,6,20,-1,0,669,911,1,
+ 0,0,0,670,671,5,102,0,0,671,672,3,34,17,0,672,673,5,43,0,0,673,674,6,20,
+ -1,0,674,911,1,0,0,0,675,676,5,103,0,0,676,677,3,34,17,0,677,678,5,43,
+ 0,0,678,679,6,20,-1,0,679,911,1,0,0,0,680,681,5,104,0,0,681,682,3,34,17,
+ 0,682,683,5,43,0,0,683,684,6,20,-1,0,684,911,1,0,0,0,685,686,5,105,0,0,
+ 686,687,3,34,17,0,687,688,5,43,0,0,688,689,6,20,-1,0,689,911,1,0,0,0,690,
+ 691,5,106,0,0,691,692,3,34,17,0,692,693,5,43,0,0,693,694,6,20,-1,0,694,
+ 911,1,0,0,0,695,696,5,107,0,0,696,697,3,34,17,0,697,698,5,43,0,0,698,699,
+ 6,20,-1,0,699,911,1,0,0,0,700,701,5,108,0,0,701,702,3,34,17,0,702,703,
+ 5,43,0,0,703,704,6,20,-1,0,704,911,1,0,0,0,705,706,5,109,0,0,706,707,3,
+ 34,17,0,707,708,5,43,0,0,708,709,6,20,-1,0,709,911,1,0,0,0,710,711,5,110,
+ 0,0,711,712,3,34,17,0,712,713,5,43,0,0,713,714,6,20,-1,0,714,911,1,0,0,
+ 0,715,716,5,111,0,0,716,717,3,34,17,0,717,718,5,43,0,0,718,719,6,20,-1,
+ 0,719,911,1,0,0,0,720,721,5,112,0,0,721,722,3,34,17,0,722,723,5,43,0,0,
+ 723,724,6,20,-1,0,724,911,1,0,0,0,725,726,5,113,0,0,726,727,3,34,17,0,
+ 727,728,5,43,0,0,728,729,6,20,-1,0,729,911,1,0,0,0,730,731,5,114,0,0,731,
+ 732,3,34,17,0,732,733,5,43,0,0,733,734,6,20,-1,0,734,911,1,0,0,0,735,736,
+ 5,115,0,0,736,737,3,34,17,0,737,738,5,43,0,0,738,739,6,20,-1,0,739,911,
+ 1,0,0,0,740,741,5,116,0,0,741,742,3,34,17,0,742,743,5,43,0,0,743,744,6,
+ 20,-1,0,744,911,1,0,0,0,745,746,5,117,0,0,746,747,3,34,17,0,747,748,5,
+ 43,0,0,748,749,6,20,-1,0,749,911,1,0,0,0,750,751,5,118,0,0,751,752,3,34,
+ 17,0,752,753,5,43,0,0,753,754,6,20,-1,0,754,911,1,0,0,0,755,756,5,119,
+ 0,0,756,757,3,34,17,0,757,758,5,43,0,0,758,759,6,20,-1,0,759,911,1,0,0,
+ 0,760,761,5,120,0,0,761,762,3,34,17,0,762,763,5,43,0,0,763,764,6,20,-1,
+ 0,764,911,1,0,0,0,765,766,5,121,0,0,766,767,3,34,17,0,767,768,5,43,0,0,
+ 768,769,6,20,-1,0,769,911,1,0,0,0,770,771,5,122,0,0,771,772,3,34,17,0,
+ 772,773,5,43,0,0,773,774,6,20,-1,0,774,911,1,0,0,0,775,776,5,123,0,0,776,
+ 777,3,34,17,0,777,778,5,43,0,0,778,779,6,20,-1,0,779,911,1,0,0,0,780,781,
+ 5,124,0,0,781,782,3,34,17,0,782,783,5,43,0,0,783,784,6,20,-1,0,784,911,
+ 1,0,0,0,785,786,5,125,0,0,786,787,3,34,17,0,787,788,5,43,0,0,788,789,6,
+ 20,-1,0,789,911,1,0,0,0,790,791,5,126,0,0,791,792,3,34,17,0,792,793,5,
+ 43,0,0,793,794,6,20,-1,0,794,911,1,0,0,0,795,796,5,127,0,0,796,797,3,34,
+ 17,0,797,798,5,43,0,0,798,799,6,20,-1,0,799,911,1,0,0,0,800,801,5,128,
+ 0,0,801,802,3,34,17,0,802,803,5,43,0,0,803,804,6,20,-1,0,804,911,1,0,0,
+ 0,805,806,5,129,0,0,806,807,3,34,17,0,807,808,5,43,0,0,808,809,6,20,-1,
+ 0,809,911,1,0,0,0,810,811,5,130,0,0,811,812,3,34,17,0,812,813,5,43,0,0,
+ 813,814,6,20,-1,0,814,911,1,0,0,0,815,816,5,131,0,0,816,817,3,34,17,0,
+ 817,818,5,43,0,0,818,819,6,20,-1,0,819,911,1,0,0,0,820,821,5,132,0,0,821,
+ 822,3,34,17,0,822,823,5,43,0,0,823,824,6,20,-1,0,824,911,1,0,0,0,825,826,
+ 5,133,0,0,826,827,3,34,17,0,827,828,5,43,0,0,828,829,6,20,-1,0,829,911,
+ 1,0,0,0,830,831,5,134,0,0,831,832,3,34,17,0,832,833,5,43,0,0,833,834,6,
+ 20,-1,0,834,911,1,0,0,0,835,836,5,135,0,0,836,837,3,34,17,0,837,838,5,
+ 43,0,0,838,839,6,20,-1,0,839,911,1,0,0,0,840,841,5,136,0,0,841,842,3,34,
+ 17,0,842,843,5,43,0,0,843,844,6,20,-1,0,844,911,1,0,0,0,845,846,5,137,
+ 0,0,846,847,3,34,17,0,847,848,5,43,0,0,848,849,6,20,-1,0,849,911,1,0,0,
+ 0,850,851,5,138,0,0,851,852,3,34,17,0,852,853,5,43,0,0,853,854,6,20,-1,
+ 0,854,911,1,0,0,0,855,856,5,139,0,0,856,857,3,34,17,0,857,858,5,43,0,0,
+ 858,859,6,20,-1,0,859,911,1,0,0,0,860,861,5,140,0,0,861,862,3,34,17,0,
+ 862,863,5,43,0,0,863,864,6,20,-1,0,864,911,1,0,0,0,865,866,5,141,0,0,866,
+ 867,3,34,17,0,867,868,5,43,0,0,868,869,6,20,-1,0,869,911,1,0,0,0,870,871,
+ 5,142,0,0,871,872,3,34,17,0,872,873,5,43,0,0,873,874,6,20,-1,0,874,911,
+ 1,0,0,0,875,876,5,143,0,0,876,877,3,34,17,0,877,878,5,43,0,0,878,879,6,
+ 20,-1,0,879,911,1,0,0,0,880,881,5,144,0,0,881,882,3,34,17,0,882,883,5,
+ 43,0,0,883,884,6,20,-1,0,884,911,1,0,0,0,885,886,5,145,0,0,886,887,3,34,
+ 17,0,887,888,5,43,0,0,888,889,6,20,-1,0,889,911,1,0,0,0,890,891,5,146,
+ 0,0,891,892,3,34,17,0,892,893,5,43,0,0,893,894,6,20,-1,0,894,911,1,0,0,
+ 0,895,896,5,147,0,0,896,897,3,34,17,0,897,898,5,43,0,0,898,899,6,20,-1,
+ 0,899,911,1,0,0,0,900,901,5,148,0,0,901,902,3,34,17,0,902,903,5,43,0,0,
+ 903,904,6,20,-1,0,904,911,1,0,0,0,905,906,5,149,0,0,906,907,3,34,17,0,
+ 907,908,5,43,0,0,908,909,6,20,-1,0,909,911,1,0,0,0,910,326,1,0,0,0,910,
+ 328,1,0,0,0,910,330,1,0,0,0,910,332,1,0,0,0,910,334,1,0,0,0,910,336,1,
+ 0,0,0,910,338,1,0,0,0,910,340,1,0,0,0,910,345,1,0,0,0,910,350,1,0,0,0,
+ 910,355,1,0,0,0,910,360,1,0,0,0,910,365,1,0,0,0,910,370,1,0,0,0,910,375,
+ 1,0,0,0,910,380,1,0,0,0,910,385,1,0,0,0,910,390,1,0,0,0,910,395,1,0,0,
+ 0,910,400,1,0,0,0,910,405,1,0,0,0,910,410,1,0,0,0,910,415,1,0,0,0,910,
+ 420,1,0,0,0,910,425,1,0,0,0,910,430,1,0,0,0,910,435,1,0,0,0,910,440,1,
+ 0,0,0,910,445,1,0,0,0,910,450,1,0,0,0,910,455,1,0,0,0,910,460,1,0,0,0,
+ 910,465,1,0,0,0,910,470,1,0,0,0,910,475,1,0,0,0,910,480,1,0,0,0,910,485,
+ 1,0,0,0,910,490,1,0,0,0,910,495,1,0,0,0,910,500,1,0,0,0,910,505,1,0,0,
+ 0,910,510,1,0,0,0,910,515,1,0,0,0,910,520,1,0,0,0,910,525,1,0,0,0,910,
+ 530,1,0,0,0,910,535,1,0,0,0,910,540,1,0,0,0,910,545,1,0,0,0,910,550,1,
+ 0,0,0,910,555,1,0,0,0,910,560,1,0,0,0,910,565,1,0,0,0,910,570,1,0,0,0,
+ 910,575,1,0,0,0,910,580,1,0,0,0,910,585,1,0,0,0,910,590,1,0,0,0,910,595,
+ 1,0,0,0,910,600,1,0,0,0,910,605,1,0,0,0,910,610,1,0,0,0,910,615,1,0,0,
+ 0,910,620,1,0,0,0,910,625,1,0,0,0,910,630,1,0,0,0,910,635,1,0,0,0,910,
+ 640,1,0,0,0,910,645,1,0,0,0,910,650,1,0,0,0,910,655,1,0,0,0,910,660,1,
+ 0,0,0,910,665,1,0,0,0,910,670,1,0,0,0,910,675,1,0,0,0,910,680,1,0,0,0,
+ 910,685,1,0,0,0,910,690,1,0,0,0,910,695,1,0,0,0,910,700,1,0,0,0,910,705,
+ 1,0,0,0,910,710,1,0,0,0,910,715,1,0,0,0,910,720,1,0,0,0,910,725,1,0,0,
+ 0,910,730,1,0,0,0,910,735,1,0,0,0,910,740,1,0,0,0,910,745,1,0,0,0,910,
+ 750,1,0,0,0,910,755,1,0,0,0,910,760,1,0,0,0,910,765,1,0,0,0,910,770,1,
+ 0,0,0,910,775,1,0,0,0,910,780,1,0,0,0,910,785,1,0,0,0,910,790,1,0,0,0,
+ 910,795,1,0,0,0,910,800,1,0,0,0,910,805,1,0,0,0,910,810,1,0,0,0,910,815,
+ 1,0,0,0,910,820,1,0,0,0,910,825,1,0,0,0,910,830,1,0,0,0,910,835,1,0,0,
+ 0,910,840,1,0,0,0,910,845,1,0,0,0,910,850,1,0,0,0,910,855,1,0,0,0,910,
+ 860,1,0,0,0,910,865,1,0,0,0,910,870,1,0,0,0,910,875,1,0,0,0,910,880,1,
+ 0,0,0,910,885,1,0,0,0,910,890,1,0,0,0,910,895,1,0,0,0,910,900,1,0,0,0,
+ 910,905,1,0,0,0,911,41,1,0,0,0,912,913,3,32,16,0,913,914,5,0,0,1,914,915,
+ 6,21,-1,0,915,43,1,0,0,0,33,51,59,67,69,76,86,96,101,117,119,132,134,147,
+ 149,170,172,185,187,204,211,227,239,241,252,265,267,280,282,291,299,309,
+ 312,910
};
public static readonly ATN _ATN =
diff --git a/Sources/AngouriMath/Core/Domains.Classes.cs b/Sources/AngouriMath/Core/Domains.Classes.cs
index ffc89dac0..1aec89e50 100644
--- a/Sources/AngouriMath/Core/Domains.Classes.cs
+++ b/Sources/AngouriMath/Core/Domains.Classes.cs
@@ -254,6 +254,38 @@ partial record Productf
internal override Domain DefaultCodomain => Domain.Complex;
}
+ partial record Maximumf
+ {
+ ///
+ public override Domain Codomain { get; protected init; } = Domain.Real;
+ ///
+ internal override Domain DefaultCodomain => Domain.Real;
+ }
+
+ partial record Minimumf
+ {
+ ///
+ public override Domain Codomain { get; protected init; } = Domain.Real;
+ ///
+ internal override Domain DefaultCodomain => Domain.Real;
+ }
+
+ partial record Argmaxf
+ {
+ ///
+ public override Domain Codomain { get; protected init; } = Domain.Any;
+ ///
+ internal override Domain DefaultCodomain => Domain.Any;
+ }
+
+ partial record Argminf
+ {
+ ///
+ public override Domain Codomain { get; protected init; } = Domain.Any;
+ ///
+ internal override Domain DefaultCodomain => Domain.Any;
+ }
+
partial record Limitf
{
///
diff --git a/Sources/AngouriMath/Core/Entity/Continuous/Entity.Continuous.Calculus.Classes.cs b/Sources/AngouriMath/Core/Entity/Continuous/Entity.Continuous.Calculus.Classes.cs
index 847da70dd..0bd9c7fbc 100644
--- a/Sources/AngouriMath/Core/Entity/Continuous/Entity.Continuous.Calculus.Classes.cs
+++ b/Sources/AngouriMath/Core/Entity/Continuous/Entity.Continuous.Calculus.Classes.cs
@@ -137,5 +137,83 @@ public override Entity Replace(Func func) =>
///
protected override Entity[] InitDirectChildren() => new[] { Expression, Var, Destination };
}
+
+ ///
+ /// The largest value of an expression as a variable ranges over a set:
+ /// max(f(t), t in S). A binder, like : the variable is
+ /// bound throughout the expression and the set.
+ /// https://github.com/asc-community/AngouriMath/issues/1212
+ ///
+ public sealed partial record Maximumf(Entity Expression, Entity Var, Entity Over) : CalculusOperator(Expression, Var)
+ {
+ /// The set the variable ranges over.
+ public Entity Over { get; init; } = Binding.Of(Var).In(Over);
+
+ private Maximumf New(Entity expression, Entity var, Entity over) =>
+ ReferenceEquals(Expression, expression) && ReferenceEquals(Var, var) && ReferenceEquals(Over, over)
+ ? this : new(expression, var, over) { Codomain = Codomain };
+ ///
+ public override Entity Replace(Func func) =>
+ func(New(Expression.Replace(func), Var, Over.Replace(func)));
+ ///
+ protected override Entity[] InitDirectChildren() => new[] { Expression, Var, Over };
+ }
+
+ ///
+ /// The smallest value of an expression as a variable ranges over a set:
+ /// min(f(t), t in S). See .
+ ///
+ public sealed partial record Minimumf(Entity Expression, Entity Var, Entity Over) : CalculusOperator(Expression, Var)
+ {
+ /// The set the variable ranges over.
+ public Entity Over { get; init; } = Binding.Of(Var).In(Over);
+
+ private Minimumf New(Entity expression, Entity var, Entity over) =>
+ ReferenceEquals(Expression, expression) && ReferenceEquals(Var, var) && ReferenceEquals(Over, over)
+ ? this : new(expression, var, over) { Codomain = Codomain };
+ ///
+ public override Entity Replace(Func func) =>
+ func(New(Expression.Replace(func), Var, Over.Replace(func)));
+ ///
+ protected override Entity[] InitDirectChildren() => new[] { Expression, Var, Over };
+ }
+
+ ///
+ /// The set of points at which an expression takes its largest value over a set:
+ /// argmax(f(t), t in S). See .
+ ///
+ public sealed partial record Argmaxf(Entity Expression, Entity Var, Entity Over) : CalculusOperator(Expression, Var)
+ {
+ /// The set the variable ranges over.
+ public Entity Over { get; init; } = Binding.Of(Var).In(Over);
+
+ private Argmaxf New(Entity expression, Entity var, Entity over) =>
+ ReferenceEquals(Expression, expression) && ReferenceEquals(Var, var) && ReferenceEquals(Over, over)
+ ? this : new(expression, var, over) { Codomain = Codomain };
+ ///
+ public override Entity Replace(Func func) =>
+ func(New(Expression.Replace(func), Var, Over.Replace(func)));
+ ///
+ protected override Entity[] InitDirectChildren() => new[] { Expression, Var, Over };
+ }
+
+ ///
+ /// The set of points at which an expression takes its smallest value over a set:
+ /// argmin(f(t), t in S). See .
+ ///
+ public sealed partial record Argminf(Entity Expression, Entity Var, Entity Over) : CalculusOperator(Expression, Var)
+ {
+ /// The set the variable ranges over.
+ public Entity Over { get; init; } = Binding.Of(Var).In(Over);
+
+ private Argminf New(Entity expression, Entity var, Entity over) =>
+ ReferenceEquals(Expression, expression) && ReferenceEquals(Var, var) && ReferenceEquals(Over, over)
+ ? this : new(expression, var, over) { Codomain = Codomain };
+ ///
+ public override Entity Replace(Func func) =>
+ func(New(Expression.Replace(func), Var, Over.Replace(func)));
+ ///
+ protected override Entity[] InitDirectChildren() => new[] { Expression, Var, Over };
+ }
}
}
diff --git a/Sources/AngouriMath/Core/Entity/Entity.Definition.cs b/Sources/AngouriMath/Core/Entity/Entity.Definition.cs
index b01e79b14..f0c7db333 100644
--- a/Sources/AngouriMath/Core/Entity/Entity.Definition.cs
+++ b/Sources/AngouriMath/Core/Entity/Entity.Definition.cs
@@ -651,6 +651,12 @@ public IReadOnlyList Vars
=> BoundBy(index, body, from, to),
Productf(var body, var index, var from, var to)
=> BoundBy(index, body, from, to),
+ // An extremum over a set binds the variable that ranges over the set:
+ // max(t^2 + a, t in [0; 1]) is a function of a alone.
+ Maximumf(var body, var bound, var over) => BoundBy(bound, body, over),
+ Minimumf(var body, var bound, var over) => BoundBy(bound, body, over),
+ Argmaxf(var body, var bound, var over) => BoundBy(bound, body, over),
+ Argminf(var body, var bound, var over) => BoundBy(bound, body, over),
// An integral binds its variable only when it has limits to bind it
// between. The indefinite one does not: the antiderivative of t * b over
// t is b * t ^ 2 / 2 + C, which is still a function of t. Nor does a
diff --git a/Sources/AngouriMath/Core/Serialization/Entity.Serialization.cs b/Sources/AngouriMath/Core/Serialization/Entity.Serialization.cs
index 044f02139..d73773d59 100644
--- a/Sources/AngouriMath/Core/Serialization/Entity.Serialization.cs
+++ b/Sources/AngouriMath/Core/Serialization/Entity.Serialization.cs
@@ -105,6 +105,10 @@ [EntityJsonConverter] partial record SpecialSet
[EntityJsonConverter] partial record Statement;
[EntityJsonConverter] partial record Sumf;
[EntityJsonConverter] partial record Summationf;
+ [EntityJsonConverter] partial record Maximumf;
+ [EntityJsonConverter] partial record Minimumf;
+ [EntityJsonConverter] partial record Argmaxf;
+ [EntityJsonConverter] partial record Argminf;
[EntityJsonConverter] partial record Tanf;
[EntityJsonConverter] partial record TrigonometricFunction;
[EntityJsonConverter] partial record Variable;
diff --git a/Sources/AngouriMath/Docs/Usage/Syntax.md b/Sources/AngouriMath/Docs/Usage/Syntax.md
index 6fd08fb4b..f0679fc0f 100644
--- a/Sources/AngouriMath/Docs/Usage/Syntax.md
+++ b/Sources/AngouriMath/Docs/Usage/Syntax.md
@@ -211,7 +211,9 @@ are otherwise left as written. `gcd` computes over integers and rationals — `g
`1/6` — and leaves the polynomial case alone.
**Calculus** — `derivative(expr, var, order)`, `integral(expr, var)`,
-`integral(expr, var, from, to)`, `limit(expr, var, dest)`, `limitleft(...)`, `limitright(...)`.
+`integral(expr, var, from, to)`, `limit(expr, var, dest)`, `limitleft(...)`, `limitright(...)`;
+`max(expr, var in set)` and `min` for the extremum of an expression over a set, `argmax` and
+`argmin` for the set of points where it is taken — `max(a, b)` of two values is still the larger.
`derivative` takes an order and `integral` does not: `derivative(f, x, 2)` is the second
derivative, while `integral`'s third and fourth arguments are the bounds of a definite integral,
diff --git a/Sources/AngouriMath/Functions/Continuous/ExtremumOverSet.cs b/Sources/AngouriMath/Functions/Continuous/ExtremumOverSet.cs
new file mode 100644
index 000000000..d060b2b03
--- /dev/null
+++ b/Sources/AngouriMath/Functions/Continuous/ExtremumOverSet.cs
@@ -0,0 +1,249 @@
+//
+// Copyright (c) 2019-2026 Angouri.
+// AngouriMath is licensed under MIT.
+// Details: https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md.
+// Website: https://am.angouri.org.
+//
+
+using System;
+using AngouriMath.Core.Exceptions;
+using PeterO.Numbers;
+using static AngouriMath.Entity;
+using static AngouriMath.Entity.Number;
+using static AngouriMath.Entity.Set;
+
+namespace AngouriMath.Functions
+{
+ ///
+ /// The largest or smallest value an expression takes over a set, and the points where it
+ /// takes it: max(f(t), t in S), min, argmax, argmin.
+ ///
+ ///
+ ///
+ /// Over a finite set of numbers the expression is evaluated at every element and the values
+ /// compared, which is the definition. Over a closed interval with numeric ends the extremum is
+ /// attained at an endpoint or at a stationary point inside, so the candidates are the closed
+ /// endpoints and the zeros of the derivative in the open interval, which the solver is asked
+ /// for; a periodic family of zeros -- pi/6 + 2 pi n -- is read as a line in its
+ /// parameter and the whole numbers that land inside the interval are enumerated. An open
+ /// endpoint is not a candidate, since a value there is not attained: max(x, x in [0; 1))
+ /// has no maximum, and is left as written rather than answered 1.
+ ///
+ ///
+ /// Two guards, because a wrong maximum is worse than none. The expression has to be one
+ /// that is smooth on the reals -- sums, products, non-negative whole powers, sines, cosines,
+ /// and exponentials with a positive base -- so that every interior extremum is a zero of the
+ /// derivative; abs(x) has its minimum where its derivative is undefined, and
+ /// 1/x has no maximum on [-1; 1] at all. And the candidates' best value is
+ /// checked against the expression sampled along the interval: the solver's list of zeros is
+ /// not guaranteed complete, and a sample that beats the best candidate means one was missed,
+ /// on which the question is left as written. A sample can miss a narrow peak, so this is a
+ /// guard and not a proof; what it rules out is the wrong answer the incomplete list would
+ /// otherwise give with confidence.
+ ///
+ ///
+ /// The value is returned symbolically -- the expression at the best point, simplified -- and
+ /// the points as the candidates themselves, so max(sin(t)^3 cos(t), t in [0; pi/2])
+ /// is 3 sqrt(3) / 16. Question I.6 of
+ /// #1212.
+ ///
+ ///
+ internal static class ExtremumOverSet
+ {
+ /// How many points along an interval the best candidate is checked against.
+ private const int Samples = 256;
+
+ /// How many members of a periodic family are enumerated before declining.
+ private const int MaxFamilyMembers = 4096;
+
+ /// The largest (or smallest) value, or where it is not settled.
+ internal static Entity? Value(Entity expression, Entity var, Entity over, bool largest)
+ => Find(expression, var, over, largest) is (var value, _) ? value : null;
+
+ /// The set of points where the largest (or smallest) value is taken, or .
+ internal static Entity? Points(Entity expression, Entity var, Entity over, bool largest)
+ => Find(expression, var, over, largest) is (_, var points) ? new FiniteSet(points.ToArray()) : null;
+
+ private static (Entity value, List points)? Find(Entity expression, Entity var, Entity over, bool largest)
+ {
+ if (var is not Variable x)
+ return null;
+ var domain = over.InnerSimplified;
+ List? candidates;
+ (Real from, Real to)? interval = null;
+ switch (domain)
+ {
+ // Elements that are numbers -- pi/2 among them -- are distinct exactly when
+ // unequal, so the set is what it says; with a symbol in it, it is not yet.
+ case FiniteSet finite when finite.All(static element => element.Evaled is Real { IsFinite: true }):
+ candidates = finite.Elements.ToList();
+ break;
+ case Interval bounds when bounds.Left.Evaled is Real { IsFinite: true } left && bounds.Right.Evaled is Real { IsFinite: true } right:
+ candidates = OverAnInterval(expression, x, bounds, left, right);
+ interval = (left, right);
+ break;
+ default:
+ return null;
+ }
+ if (candidates is null || candidates.Count == 0)
+ return null;
+
+ var valued = new List<(Entity point, Real value)>();
+ Real? best = null;
+ foreach (var candidate in candidates)
+ {
+ if (expression.Substitute(x, candidate).Evaled is not Real value || !value.IsFinite || value.IsNaN)
+ return null;
+ valued.Add((candidate, value));
+ if (best is null || (largest ? value > best : value < best))
+ best = value;
+ }
+ if (interval is var (a, b) && !SamplesAgree(expression, x, a, b, best!, largest))
+ return null;
+
+ var points = valued.Where(p => p.value == best).Select(p => p.point.InnerSimplified).ToList();
+ var at = expression.Substitute(x, points[0]).InnerSimplified;
+ return (at, points);
+ }
+
+ ///
+ /// The closed endpoints and the stationary points inside, or where
+ /// the expression is not one whose extrema are all stationary, or the solver does not
+ /// give a finite list.
+ ///
+ private static List? OverAnInterval(Entity expression, Variable x, Interval bounds, Real left, Real right)
+ {
+ var order = left.EDecimal.CompareTo(right.EDecimal);
+ if (order > 0)
+ return null;
+ if (order == 0)
+ return bounds.LeftClosed && bounds.RightClosed ? new List { bounds.Left } : null;
+ if (!IsSmoothOn(expression, x))
+ return null;
+
+ // The ends as written, so that pi/2 stays pi/2 in the answer.
+ var candidates = new List();
+ if (bounds.LeftClosed)
+ candidates.Add(bounds.Left);
+ if (bounds.RightClosed)
+ candidates.Add(bounds.Right);
+ var interior = new Interval(bounds.Left, false, bounds.Right, false);
+
+ Set stationary;
+ try
+ {
+ stationary = expression.Differentiate(x).Simplify().Equalizes(Integer.Zero).Solve(x);
+ }
+ catch (NotSufficientlySupportedException)
+ {
+ return null;
+ }
+ if (stationary is not FiniteSet zeros)
+ return null;
+ foreach (var zero in zeros.Elements)
+ {
+ // Vars, not FreeVariables: the solver's parameter is n_1, and pi, e and i are
+ // constants that FreeVariables would miscount as parameters of the family.
+ var parameters = zero.Vars.Where(v => v != x).ToList();
+ switch (parameters.Count)
+ {
+ case 0:
+ if (Inside(zero, interior))
+ candidates.Add(zero);
+ break;
+ case 1:
+ if (!AddTheFamily(zero, parameters[0], interior, left, right, candidates))
+ return null;
+ break;
+ default:
+ return null;
+ }
+ }
+ return candidates;
+ }
+
+ private static bool Inside(Entity point, Interval interior)
+ => new Inf(point, interior).Evaled is Entity.Boolean { Value: true };
+
+ ///
+ /// A zero of the form c + p n for a whole n: the members that land inside
+ /// the interval are added. Anything else in the parameter declines.
+ ///
+ private static bool AddTheFamily(Entity family, Variable parameter, Interval interior, Real left, Real right, List candidates)
+ {
+ // Read numerically at 0, 1 and 2: the family is c + p n exactly when the steps agree,
+ // whatever shape the solver wrote it in.
+ if (At(0) is not { } c || At(1) is not { } c1 || At(2) is not { } c2)
+ return false;
+ var p = c1 - c;
+ if (p == 0 || Math.Abs((c2 - c1) - p) > 1e-9 * Math.Max(1, Math.Abs(p)))
+ return false;
+ // a < c + p n < b bounds n between (a - c) / p and (b - c) / p, in either order.
+ var first = (left.EDecimal.ToDouble() - c) / p;
+ var last = (right.EDecimal.ToDouble() - c) / p;
+
+ double? At(int n)
+ => family.Substitute(parameter, Integer.Create(n)).Evaled is Real { IsFinite: true } value
+ ? value.EDecimal.ToDouble()
+ : null;
+ var lowest = Math.Floor(Math.Min(first, last)) - 1;
+ var highest = Math.Ceiling(Math.Max(first, last)) + 1;
+ if (highest - lowest > MaxFamilyMembers)
+ return false;
+ for (var n = (long)lowest; n <= (long)highest; n++)
+ {
+ var member = family.Substitute(parameter, Integer.Create(n)).InnerSimplified;
+ if (Inside(member, interior))
+ candidates.Add(member);
+ }
+ return true;
+ }
+
+ ///
+ /// Whether the expression, sampled along the interval, never beats the best candidate.
+ /// A sample that does means a stationary point the solver did not list.
+ ///
+ private static bool SamplesAgree(Entity expression, Variable x, Real left, Real right, Real best, bool largest)
+ {
+ var a = left.EDecimal.ToDouble();
+ var b = right.EDecimal.ToDouble();
+ var bestValue = best.EDecimal.ToDouble();
+ var tolerance = 1e-9 * Math.Max(1, Math.Abs(bestValue));
+ for (var k = 0; k <= Samples; k++)
+ {
+ var t = a + (b - a) * k / Samples;
+ if (expression.Substitute(x, Real.Create(EDecimal.FromDouble(t))).Evaled is not Real sample || !sample.IsFinite || sample.IsNaN)
+ return false;
+ var v = sample.EDecimal.ToDouble();
+ if (largest ? v > bestValue + tolerance : v < bestValue - tolerance)
+ return false;
+ }
+ return true;
+ }
+
+ ///
+ /// Whether every extremum of the expression on the reals is a zero of its derivative:
+ /// built from sums, products, non-negative whole powers, sines and cosines, exponentials
+ /// with a positive base, and divisions by something free of the variable.
+ ///
+ private static bool IsSmoothOn(Entity expression, Variable x)
+ {
+ if (!expression.ContainsNode(x))
+ return true;
+ return expression switch
+ {
+ Variable => true,
+ Sumf(var left, var right) => IsSmoothOn(left, x) && IsSmoothOn(right, x),
+ Minusf(var left, var right) => IsSmoothOn(left, x) && IsSmoothOn(right, x),
+ Mulf(var left, var right) => IsSmoothOn(left, x) && IsSmoothOn(right, x),
+ Divf(var left, var right) => IsSmoothOn(left, x) && !right.ContainsNode(x),
+ Powf(var @base, Integer { IsNegative: false }) => IsSmoothOn(@base, x),
+ Powf(var @base, var exponent) when !@base.ContainsNode(x) && @base.Evaled is Real value && value > Integer.Zero
+ => IsSmoothOn(exponent, x),
+ Sinf(var argument) => IsSmoothOn(argument, x),
+ Cosf(var argument) => IsSmoothOn(argument, x),
+ _ => false
+ };
+ }
+ }
+}
diff --git a/Sources/AngouriMath/Functions/Continuous/Solvers/EquationSolver/InvertNode.Classes.cs b/Sources/AngouriMath/Functions/Continuous/Solvers/EquationSolver/InvertNode.Classes.cs
index 5516ffa0b..00fe23cc1 100644
--- a/Sources/AngouriMath/Functions/Continuous/Solvers/EquationSolver/InvertNode.Classes.cs
+++ b/Sources/AngouriMath/Functions/Continuous/Solvers/EquationSolver/InvertNode.Classes.cs
@@ -237,6 +237,31 @@ private protected override IEnumerable InvertNode(Entity value, Entity x
: Enumerable.Empty();
}
+ partial record Maximumf
+ {
+ // The unknown sits under a binder; see Summationf below.
+ private protected override IEnumerable InvertNode(Entity value, Entity x) =>
+ Enumerable.Empty();
+ }
+
+ partial record Minimumf
+ {
+ private protected override IEnumerable InvertNode(Entity value, Entity x) =>
+ Enumerable.Empty();
+ }
+
+ partial record Argmaxf
+ {
+ private protected override IEnumerable InvertNode(Entity value, Entity x) =>
+ Enumerable.Empty();
+ }
+
+ partial record Argminf
+ {
+ private protected override IEnumerable InvertNode(Entity value, Entity x) =>
+ Enumerable.Empty();
+ }
+
partial record Summationf
{
// The unknown sits under a binder, and inverting would have to solve for it inside a
diff --git a/Sources/AngouriMath/Functions/Evaluation/Evaluation.Continuous/Evaluation.Continuous.Calculus.Classes.cs b/Sources/AngouriMath/Functions/Evaluation/Evaluation.Continuous/Evaluation.Continuous.Calculus.Classes.cs
index f71dc9b80..c42961068 100644
--- a/Sources/AngouriMath/Functions/Evaluation/Evaluation.Continuous/Evaluation.Continuous.Calculus.Classes.cs
+++ b/Sources/AngouriMath/Functions/Evaluation/Evaluation.Continuous/Evaluation.Continuous.Calculus.Classes.cs
@@ -176,6 +176,38 @@ when otherExpr.Vars.Count is 1
}
+ partial record Maximumf
+ {
+ private protected override Entity IntrinsicCondition => Boolean.True;
+ ///
+ protected override Entity InnerSimplify(bool isExact)
+ => Functions.ExtremumOverSet.Value(Expression, Var, Over, largest: true) ?? this;
+ }
+
+ partial record Minimumf
+ {
+ private protected override Entity IntrinsicCondition => Boolean.True;
+ ///
+ protected override Entity InnerSimplify(bool isExact)
+ => Functions.ExtremumOverSet.Value(Expression, Var, Over, largest: false) ?? this;
+ }
+
+ partial record Argmaxf
+ {
+ private protected override Entity IntrinsicCondition => Boolean.True;
+ ///
+ protected override Entity InnerSimplify(bool isExact)
+ => Functions.ExtremumOverSet.Points(Expression, Var, Over, largest: true) ?? this;
+ }
+
+ partial record Argminf
+ {
+ private protected override Entity IntrinsicCondition => Boolean.True;
+ ///
+ protected override Entity InnerSimplify(bool isExact)
+ => Functions.ExtremumOverSet.Points(Expression, Var, Over, largest: false) ?? this;
+ }
+
// TODO: rewrite this part too
public partial record Summationf
{
diff --git a/Sources/AngouriMath/Functions/Output/Latex/Latex.Calculus.Classes.cs b/Sources/AngouriMath/Functions/Output/Latex/Latex.Calculus.Classes.cs
index 143f3e267..2896eae99 100644
--- a/Sources/AngouriMath/Functions/Output/Latex/Latex.Calculus.Classes.cs
+++ b/Sources/AngouriMath/Functions/Output/Latex/Latex.Calculus.Classes.cs
@@ -66,6 +66,38 @@ private protected override string LatexizeNode()
}
}
+ public partial record Maximumf
+ {
+ ///
+ private protected override string LatexizeNode() =>
+ @"\max_{" + Var.Latexize() + @" \in " + Over.Latexize() + "} "
+ + Expression.Latexize(Expression.Priority < Priority.Sum);
+ }
+
+ public partial record Minimumf
+ {
+ ///
+ private protected override string LatexizeNode() =>
+ @"\min_{" + Var.Latexize() + @" \in " + Over.Latexize() + "} "
+ + Expression.Latexize(Expression.Priority < Priority.Sum);
+ }
+
+ public partial record Argmaxf
+ {
+ ///
+ private protected override string LatexizeNode() =>
+ @"\operatorname{argmax}_{" + Var.Latexize() + @" \in " + Over.Latexize() + "} "
+ + Expression.Latexize(Expression.Priority < Priority.Sum);
+ }
+
+ public partial record Argminf
+ {
+ ///
+ private protected override string LatexizeNode() =>
+ @"\operatorname{argmin}_{" + Var.Latexize() + @" \in " + Over.Latexize() + "} "
+ + Expression.Latexize(Expression.Priority < Priority.Sum);
+ }
+
public partial record Summationf
{
///
diff --git a/Sources/AngouriMath/Functions/Output/ToString/ToString.Calculus.Classes.cs b/Sources/AngouriMath/Functions/Output/ToString/ToString.Calculus.Classes.cs
index 39ca48e8c..0a96e0568 100644
--- a/Sources/AngouriMath/Functions/Output/ToString/ToString.Calculus.Classes.cs
+++ b/Sources/AngouriMath/Functions/Output/ToString/ToString.Calculus.Classes.cs
@@ -36,6 +36,42 @@ Range is var (from, to)
public override string ToString() => Stringize();
}
+ public partial record Maximumf
+ {
+ ///
+ private protected override string StringizeNode() =>
+ $"max({Expression.Stringize()}, {Var.Stringize()} in {Over.Stringize()})";
+ ///
+ public override string ToString() => Stringize();
+ }
+
+ public partial record Minimumf
+ {
+ ///
+ private protected override string StringizeNode() =>
+ $"min({Expression.Stringize()}, {Var.Stringize()} in {Over.Stringize()})";
+ ///
+ public override string ToString() => Stringize();
+ }
+
+ public partial record Argmaxf
+ {
+ ///
+ private protected override string StringizeNode() =>
+ $"argmax({Expression.Stringize()}, {Var.Stringize()} in {Over.Stringize()})";
+ ///
+ public override string ToString() => Stringize();
+ }
+
+ public partial record Argminf
+ {
+ ///
+ private protected override string StringizeNode() =>
+ $"argmin({Expression.Stringize()}, {Var.Stringize()} in {Over.Stringize()})";
+ ///
+ public override string ToString() => Stringize();
+ }
+
public partial record Summationf
{
///
diff --git a/Sources/AngouriMath/Functions/Output/ToSympy/ToSympy.Calculus.Classes.cs b/Sources/AngouriMath/Functions/Output/ToSympy/ToSympy.Calculus.Classes.cs
index 23e07cf69..f6025d275 100644
--- a/Sources/AngouriMath/Functions/Output/ToSympy/ToSympy.Calculus.Classes.cs
+++ b/Sources/AngouriMath/Functions/Output/ToSympy/ToSympy.Calculus.Classes.cs
@@ -21,6 +21,31 @@ public partial record Integralf
internal override string ToSymPy() => $"sympy.integrate({Expression.ToSymPy()}, {(Range is var (from, to) ? $"({Var.ToSymPy()}, {from.ToSymPy()}, {to.ToSymPy()})" : Var.ToSymPy())})";
}
+ public partial record Maximumf
+ {
+ internal override string ToSymPy() =>
+ $"sympy.maximum({Expression.ToSymPy()}, {Var.ToSymPy()}, {Over.ToSymPy()})";
+ }
+
+ public partial record Minimumf
+ {
+ internal override string ToSymPy() =>
+ $"sympy.minimum({Expression.ToSymPy()}, {Var.ToSymPy()}, {Over.ToSymPy()})";
+ }
+
+ public partial record Argmaxf
+ {
+ // SymPy has maximum and minimum but no argmax; the points are not one call.
+ internal override string ToSymPy() =>
+ throw new NotSufficientlySupportedException("SymPy has no argmax; ask for the maximum and solve for where it is taken");
+ }
+
+ public partial record Argminf
+ {
+ internal override string ToSymPy() =>
+ throw new NotSufficientlySupportedException("SymPy has no argmin; ask for the minimum and solve for where it is taken");
+ }
+
public partial record Summationf
{
internal override string ToSymPy() =>
diff --git a/Sources/AngouriMath/Functions/Substitute.cs b/Sources/AngouriMath/Functions/Substitute.cs
index 11e651998..0b3a77684 100644
--- a/Sources/AngouriMath/Functions/Substitute.cs
+++ b/Sources/AngouriMath/Functions/Substitute.cs
@@ -452,6 +452,59 @@ public override Entity Substitute(Entity x, Entity value)
}
}
+ partial record Maximumf
+ {
+ ///
+ // The variable is bound; renamed first, as a summation's index is.
+ public override Entity Substitute(Entity x, Entity value)
+ {
+ if (this == x)
+ return value;
+ var replacement = Variable.CreateTemp((x + value + Expression + Var).Vars);
+ var renamed = Expression.Substitute(Var, replacement).Substitute(x, value).Substitute(replacement, Var);
+ return New(renamed, Var, Over.Substitute(x, value));
+ }
+ }
+
+ partial record Minimumf
+ {
+ ///
+ public override Entity Substitute(Entity x, Entity value)
+ {
+ if (this == x)
+ return value;
+ var replacement = Variable.CreateTemp((x + value + Expression + Var).Vars);
+ var renamed = Expression.Substitute(Var, replacement).Substitute(x, value).Substitute(replacement, Var);
+ return New(renamed, Var, Over.Substitute(x, value));
+ }
+ }
+
+ partial record Argmaxf
+ {
+ ///
+ public override Entity Substitute(Entity x, Entity value)
+ {
+ if (this == x)
+ return value;
+ var replacement = Variable.CreateTemp((x + value + Expression + Var).Vars);
+ var renamed = Expression.Substitute(Var, replacement).Substitute(x, value).Substitute(replacement, Var);
+ return New(renamed, Var, Over.Substitute(x, value));
+ }
+ }
+
+ partial record Argminf
+ {
+ ///
+ public override Entity Substitute(Entity x, Entity value)
+ {
+ if (this == x)
+ return value;
+ var replacement = Variable.CreateTemp((x + value + Expression + Var).Vars);
+ var renamed = Expression.Substitute(Var, replacement).Substitute(x, value).Substitute(replacement, Var);
+ return New(renamed, Var, Over.Substitute(x, value));
+ }
+ }
+
partial record Productf
{
///
diff --git a/Sources/AngouriMath/Functions/TreeAnalyzer/Sort.Classes.cs b/Sources/AngouriMath/Functions/TreeAnalyzer/Sort.Classes.cs
index 533c749c6..0a0f50763 100644
--- a/Sources/AngouriMath/Functions/TreeAnalyzer/Sort.Classes.cs
+++ b/Sources/AngouriMath/Functions/TreeAnalyzer/Sort.Classes.cs
@@ -196,6 +196,26 @@ public partial record Productf
private protected override string SortHashName(SortLevel level) => "productf_";
}
+ public partial record Maximumf
+ {
+ private protected override string SortHashName(SortLevel level) => "maximumf_";
+ }
+
+ public partial record Minimumf
+ {
+ private protected override string SortHashName(SortLevel level) => "minimumf_";
+ }
+
+ public partial record Argmaxf
+ {
+ private protected override string SortHashName(SortLevel level) => "argmaxf_";
+ }
+
+ public partial record Argminf
+ {
+ private protected override string SortHashName(SortLevel level) => "argminf_";
+ }
+
public partial record Limitf
{
private protected override string SortHashName(SortLevel level) => "limitf_";
diff --git a/Sources/Tests/UnitTests/Calculus/ExtremumTest.cs b/Sources/Tests/UnitTests/Calculus/ExtremumTest.cs
new file mode 100644
index 000000000..3baab8282
--- /dev/null
+++ b/Sources/Tests/UnitTests/Calculus/ExtremumTest.cs
@@ -0,0 +1,140 @@
+//
+// Copyright (c) 2019-2026 Angouri.
+// AngouriMath is licensed under MIT.
+// Details: https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md.
+// Website: https://am.angouri.org.
+//
+
+using System.Linq;
+using AngouriMath;
+using AngouriMath.Extensions;
+using Xunit;
+using static AngouriMath.Entity;
+
+namespace AngouriMath.Tests.Calculus
+{
+ ///
+ /// max(f(t), t in S), min, argmax and argmin: the extremum of an
+ /// expression over a set, as binders. https://github.com/asc-community/AngouriMath/issues/1212
+ ///
+ public sealed class ExtremumTest
+ {
+ // The sheet's question I.6: the area of a projectile's flight is largest at pi/3.
+ [Fact]
+ public void TheLargestAreaIsAtSixtyDegrees()
+ {
+ Assert.Equal("3/16 * sqrt(3)".ToEntity(), "max(sin(t)^3 * cos(t), t in [0; pi/2])".ToEntity().Simplify());
+ var where = "argmax(sin(t)^3 * cos(t), t in [0; pi/2])".ToEntity().Simplify();
+ var point = Assert.Single(Assert.IsType(where).Elements);
+ // The point is a root the solver wrote as ln(...)/i, equal to pi/3; the difference
+ // cancels to an exact zero where matching printed digits would not.
+ Assert.Equal(Number.Integer.Zero, (point - "pi/3".ToEntity()).Simplify());
+ }
+
+ [Theory]
+ [InlineData("max(x^2, x in { 1, -3, 2 })", "9")]
+ [InlineData("min(x^2, x in { 1, -3, 2 })", "1")]
+ [InlineData("max(x, x in { 1/2, 0.3, 1/3 })", "1/2")]
+ [InlineData("max(sin(x), x in { 0, pi/2, pi })", "1")]
+ [InlineData("max(x * (4 - x), x in [0; 4])", "4")]
+ [InlineData("max(x, x in [0; 1])", "1")]
+ [InlineData("min(x, x in [0; 1])", "0")]
+ [InlineData("max(x^3 - 3x, x in [-2; 2])", "2")]
+ [InlineData("min(x^3 - 3x, x in [-2; 2])", "-2")]
+ [InlineData("max(x^2, x in [2; 2])", "4")]
+ [InlineData("max(cos(x), x in [-1; 1])", "1")]
+ [InlineData("min(x^4 - x^2, x in [-1; 1])", "-1/4")]
+ [InlineData("max(2^x - x, x in [0; 2])", "2")]
+ [InlineData("max(x * e^(-x), x in [0; 3])", "e^(-1)")]
+ public void TheExtremumIsAnswered(string extremum, string expected)
+ => Assert.Equal(expected.ToEntity().Simplify(), extremum.ToEntity().Simplify());
+
+ [Theory]
+ [InlineData("argmax(x^2, x in { 1, -3, 2 })", "{ -3 }")]
+ [InlineData("argmin(x^2, x in { 1, -1 })", "{ 1, -1 }")]
+ [InlineData("argmax(x * (4 - x), x in [0; 4])", "{ 2 }")]
+ [InlineData("argmin(x^2, x in [-1; 2])", "{ 0 }")]
+ [InlineData("argmax(x^3 - 3x, x in [-2; 2])", "{ -1, 2 }")]
+ [InlineData("argmax(cos(x), x in [-1; 1])", "{ 0 }")]
+ [InlineData("argmin(x^4 - x^2, x in [-1; 1])", "{ 1/2 * sqrt(2), -1/2 * sqrt(2) }")]
+ public void ThePointsAreAnswered(string extremum, string expected)
+ => Assert.Equal(expected.ToEntity(), extremum.ToEntity().Simplify());
+
+ // A value at an open endpoint is not attained; a symbolic set or end, a pole, a kink,
+ // and a set with a symbol in it are not settled.
+ [Theory]
+ [InlineData("max(x, x in [0; 1))")]
+ [InlineData("min(x^2, x in (0; 1))")]
+ [InlineData("max(x^2, x in (-1; 1))")]
+ [InlineData("max(x, x in [0; a])")]
+ [InlineData("max(x, x in S)")]
+ [InlineData("max(x, x in RR)")]
+ [InlineData("max(1/x, x in [-1; 1])")]
+ [InlineData("max(abs(x), x in [-1; 1])")]
+ [InlineData("max(sqrt(x), x in [0; 1])")]
+ [InlineData("max(x, x in { 1, a })")]
+ [InlineData("max(x, x in { x : x > 0 })")]
+ [InlineData("argmax(x, x in [0; 1))")]
+ public void WhatIsNotSettledIsLeftAsWritten(string extremum)
+ {
+ var answer = extremum.ToEntity().Simplify();
+ Assert.True(answer is Maximumf or Minimumf or Argmaxf or Argminf, answer.ToString());
+ }
+
+ [Theory]
+ [InlineData("max(sin(t), t in [0; pi])", "max(sin(t), t in [0; pi])")]
+ [InlineData("argmin(x, x in S)", "argmin(x, x in S)")]
+ [InlineData("min(f, t in S) + 1", "min(f, t in S) + 1")]
+ public void ItParsesAndPrintsAsWritten(string written, string printed)
+ {
+ var entity = written.ToEntity();
+ Assert.Equal(printed, entity.ToString());
+ Assert.Equal(entity, printed.ToEntity());
+ }
+
+ // max(a, b) of two values is what it always was; a binder is only the shape whose second
+ // argument says which variable ranges over which set.
+ [Fact]
+ public void TheTwoValueMaxIsUnchanged()
+ {
+ Assert.Equal("2".ToEntity(), "max(1, 2)".ToEntity().Evaled);
+ Assert.IsType("max(x, y)".ToEntity());
+ Assert.IsType("max(x, y in S)".ToEntity());
+ Assert.IsType("max(x, 1 in S)".ToEntity());
+ }
+
+ [Fact]
+ public void TheVariableIsBoundByTheBinder()
+ {
+ var extremum = "max(t^2 + a, t in [0; 1])".ToEntity();
+ Assert.Equal(new[] { (Variable)"a" }, extremum.FreeVariables.ToArray());
+ Assert.Equal("2".ToEntity(), extremum.Substitute("a", 1).Simplify());
+ Assert.Equal(extremum, extremum.Substitute("t", 5));
+ }
+
+ [Fact]
+ public void ItPrintsAsASubscriptedOperatorInLatex()
+ {
+ Assert.Equal(@"\max_{t \in S} f", "max(f, t in S)".ToEntity().Latexize());
+ Assert.Equal(@"\operatorname{argmax}_{t \in S} f", "argmax(f, t in S)".ToEntity().Latexize());
+ }
+
+ [Fact]
+ public void TheConvenienceSpellingsAgreeWithTheParser()
+ {
+ Entity f = "f", t = "t", s = "S";
+ Assert.Equal("max(f, t in S)".ToEntity(), MathS.Maximum(f, t, s));
+ Assert.Equal("min(f, t in S)".ToEntity(), MathS.Minimum(f, t, s));
+ Assert.Equal("argmax(f, t in S)".ToEntity(), MathS.Argmax(f, t, s));
+ Assert.Equal("argmin(f, t in S)".ToEntity(), MathS.Argmin(f, t, s));
+ }
+
+ [Fact]
+ public void ItRoundTripsThroughJson()
+ {
+ var extremum = "argmax(sin(t), t in [0; pi])".ToEntity();
+ var json = System.Text.Json.JsonSerializer.Serialize(extremum);
+ Assert.Equal(extremum, System.Text.Json.JsonSerializer.Deserialize(json));
+ }
+ }
+}
diff --git a/Sources/Tests/UnitTests/Common/PublicApi.txt b/Sources/Tests/UnitTests/Common/PublicApi.txt
index eb460d845..6c7009e83 100644
--- a/Sources/Tests/UnitTests/Common/PublicApi.txt
+++ b/Sources/Tests/UnitTests/Common/PublicApi.txt
@@ -473,6 +473,42 @@ AngouriMath.Entity+Arctanf.ToString() : System.String
AngouriMath.Entity+Arctanf.ctor(AngouriMath.Entity)
AngouriMath.Entity+Arctanf.op_Equality(AngouriMath.Entity+Arctanf, AngouriMath.Entity+Arctanf) : System.Boolean
AngouriMath.Entity+Arctanf.op_Inequality(AngouriMath.Entity+Arctanf, AngouriMath.Entity+Arctanf) : System.Boolean
+AngouriMath.Entity+Argmaxf.$() : AngouriMath.Entity+Argmaxf
+AngouriMath.Entity+Argmaxf.Codomain { } : AngouriMath.Core.Domain
+AngouriMath.Entity+Argmaxf.Deconstruct(AngouriMath.Entity&, AngouriMath.Entity&, AngouriMath.Entity&) : System.Void
+AngouriMath.Entity+Argmaxf.EqualityContract { } : System.Type
+AngouriMath.Entity+Argmaxf.Equals(AngouriMath.Entity+Argmaxf) : System.Boolean
+AngouriMath.Entity+Argmaxf.Equals(AngouriMath.Entity+CalculusOperator) : System.Boolean
+AngouriMath.Entity+Argmaxf.Equals(System.Object) : System.Boolean
+AngouriMath.Entity+Argmaxf.GetHashCode() : System.Int32
+AngouriMath.Entity+Argmaxf.InitDirectChildren() : AngouriMath.Entity[]
+AngouriMath.Entity+Argmaxf.InnerSimplify(System.Boolean) : AngouriMath.Entity
+AngouriMath.Entity+Argmaxf.Over { } : AngouriMath.Entity
+AngouriMath.Entity+Argmaxf.PrintMembers(System.Text.StringBuilder) : System.Boolean
+AngouriMath.Entity+Argmaxf.Replace(System.Func) : AngouriMath.Entity
+AngouriMath.Entity+Argmaxf.Substitute(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
+AngouriMath.Entity+Argmaxf.ToString() : System.String
+AngouriMath.Entity+Argmaxf.ctor(AngouriMath.Entity, AngouriMath.Entity, AngouriMath.Entity)
+AngouriMath.Entity+Argmaxf.op_Equality(AngouriMath.Entity+Argmaxf, AngouriMath.Entity+Argmaxf) : System.Boolean
+AngouriMath.Entity+Argmaxf.op_Inequality(AngouriMath.Entity+Argmaxf, AngouriMath.Entity+Argmaxf) : System.Boolean
+AngouriMath.Entity+Argminf.$() : AngouriMath.Entity+Argminf
+AngouriMath.Entity+Argminf.Codomain { } : AngouriMath.Core.Domain
+AngouriMath.Entity+Argminf.Deconstruct(AngouriMath.Entity&, AngouriMath.Entity&, AngouriMath.Entity&) : System.Void
+AngouriMath.Entity+Argminf.EqualityContract { } : System.Type
+AngouriMath.Entity+Argminf.Equals(AngouriMath.Entity+Argminf) : System.Boolean
+AngouriMath.Entity+Argminf.Equals(AngouriMath.Entity+CalculusOperator) : System.Boolean
+AngouriMath.Entity+Argminf.Equals(System.Object) : System.Boolean
+AngouriMath.Entity+Argminf.GetHashCode() : System.Int32
+AngouriMath.Entity+Argminf.InitDirectChildren() : AngouriMath.Entity[]
+AngouriMath.Entity+Argminf.InnerSimplify(System.Boolean) : AngouriMath.Entity
+AngouriMath.Entity+Argminf.Over { } : AngouriMath.Entity
+AngouriMath.Entity+Argminf.PrintMembers(System.Text.StringBuilder) : System.Boolean
+AngouriMath.Entity+Argminf.Replace(System.Func) : AngouriMath.Entity
+AngouriMath.Entity+Argminf.Substitute(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
+AngouriMath.Entity+Argminf.ToString() : System.String
+AngouriMath.Entity+Argminf.ctor(AngouriMath.Entity, AngouriMath.Entity, AngouriMath.Entity)
+AngouriMath.Entity+Argminf.op_Equality(AngouriMath.Entity+Argminf, AngouriMath.Entity+Argminf) : System.Boolean
+AngouriMath.Entity+Argminf.op_Inequality(AngouriMath.Entity+Argminf, AngouriMath.Entity+Argminf) : System.Boolean
AngouriMath.Entity+Boolean.$() : AngouriMath.Entity+Boolean
AngouriMath.Entity+Boolean.Codomain { } : AngouriMath.Core.Domain
AngouriMath.Entity+Boolean.Create(System.Boolean) : AngouriMath.Entity+Boolean
@@ -1057,6 +1093,24 @@ AngouriMath.Entity+Maxf.ToString() : System.String
AngouriMath.Entity+Maxf.ctor(AngouriMath.Entity, AngouriMath.Entity)
AngouriMath.Entity+Maxf.op_Equality(AngouriMath.Entity+Maxf, AngouriMath.Entity+Maxf) : System.Boolean
AngouriMath.Entity+Maxf.op_Inequality(AngouriMath.Entity+Maxf, AngouriMath.Entity+Maxf) : System.Boolean
+AngouriMath.Entity+Maximumf.$() : AngouriMath.Entity+Maximumf
+AngouriMath.Entity+Maximumf.Codomain { } : AngouriMath.Core.Domain
+AngouriMath.Entity+Maximumf.Deconstruct(AngouriMath.Entity&, AngouriMath.Entity&, AngouriMath.Entity&) : System.Void
+AngouriMath.Entity+Maximumf.EqualityContract { } : System.Type
+AngouriMath.Entity+Maximumf.Equals(AngouriMath.Entity+CalculusOperator) : System.Boolean
+AngouriMath.Entity+Maximumf.Equals(AngouriMath.Entity+Maximumf) : System.Boolean
+AngouriMath.Entity+Maximumf.Equals(System.Object) : System.Boolean
+AngouriMath.Entity+Maximumf.GetHashCode() : System.Int32
+AngouriMath.Entity+Maximumf.InitDirectChildren() : AngouriMath.Entity[]
+AngouriMath.Entity+Maximumf.InnerSimplify(System.Boolean) : AngouriMath.Entity
+AngouriMath.Entity+Maximumf.Over { } : AngouriMath.Entity
+AngouriMath.Entity+Maximumf.PrintMembers(System.Text.StringBuilder) : System.Boolean
+AngouriMath.Entity+Maximumf.Replace(System.Func) : AngouriMath.Entity
+AngouriMath.Entity+Maximumf.Substitute(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
+AngouriMath.Entity+Maximumf.ToString() : System.String
+AngouriMath.Entity+Maximumf.ctor(AngouriMath.Entity, AngouriMath.Entity, AngouriMath.Entity)
+AngouriMath.Entity+Maximumf.op_Equality(AngouriMath.Entity+Maximumf, AngouriMath.Entity+Maximumf) : System.Boolean
+AngouriMath.Entity+Maximumf.op_Inequality(AngouriMath.Entity+Maximumf, AngouriMath.Entity+Maximumf) : System.Boolean
AngouriMath.Entity+Minf.$() : AngouriMath.Entity+Minf
AngouriMath.Entity+Minf.Codomain { } : AngouriMath.Core.Domain
AngouriMath.Entity+Minf.Deconstruct(AngouriMath.Entity&, AngouriMath.Entity&) : System.Void
@@ -1078,6 +1132,24 @@ AngouriMath.Entity+Minf.ToString() : System.String
AngouriMath.Entity+Minf.ctor(AngouriMath.Entity, AngouriMath.Entity)
AngouriMath.Entity+Minf.op_Equality(AngouriMath.Entity+Minf, AngouriMath.Entity+Minf) : System.Boolean
AngouriMath.Entity+Minf.op_Inequality(AngouriMath.Entity+Minf, AngouriMath.Entity+Minf) : System.Boolean
+AngouriMath.Entity+Minimumf.$() : AngouriMath.Entity+Minimumf
+AngouriMath.Entity+Minimumf.Codomain { } : AngouriMath.Core.Domain
+AngouriMath.Entity+Minimumf.Deconstruct(AngouriMath.Entity&, AngouriMath.Entity&, AngouriMath.Entity&) : System.Void
+AngouriMath.Entity+Minimumf.EqualityContract { } : System.Type
+AngouriMath.Entity+Minimumf.Equals(AngouriMath.Entity+CalculusOperator) : System.Boolean
+AngouriMath.Entity+Minimumf.Equals(AngouriMath.Entity+Minimumf) : System.Boolean
+AngouriMath.Entity+Minimumf.Equals(System.Object) : System.Boolean
+AngouriMath.Entity+Minimumf.GetHashCode() : System.Int32
+AngouriMath.Entity+Minimumf.InitDirectChildren() : AngouriMath.Entity[]
+AngouriMath.Entity+Minimumf.InnerSimplify(System.Boolean) : AngouriMath.Entity
+AngouriMath.Entity+Minimumf.Over { } : AngouriMath.Entity
+AngouriMath.Entity+Minimumf.PrintMembers(System.Text.StringBuilder) : System.Boolean
+AngouriMath.Entity+Minimumf.Replace(System.Func) : AngouriMath.Entity
+AngouriMath.Entity+Minimumf.Substitute(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
+AngouriMath.Entity+Minimumf.ToString() : System.String
+AngouriMath.Entity+Minimumf.ctor(AngouriMath.Entity, AngouriMath.Entity, AngouriMath.Entity)
+AngouriMath.Entity+Minimumf.op_Equality(AngouriMath.Entity+Minimumf, AngouriMath.Entity+Minimumf) : System.Boolean
+AngouriMath.Entity+Minimumf.op_Inequality(AngouriMath.Entity+Minimumf, AngouriMath.Entity+Minimumf) : System.Boolean
AngouriMath.Entity+Minusf.$() : AngouriMath.Entity+Minusf
AngouriMath.Entity+Minusf.Codomain { } : AngouriMath.Core.Domain
AngouriMath.Entity+Minusf.Deconstruct(AngouriMath.Entity&, AngouriMath.Entity&) : System.Void
@@ -2417,6 +2489,8 @@ AngouriMath.MathS.Arccotan(AngouriMath.Entity) : AngouriMath.Entity
AngouriMath.MathS.Arcsec(AngouriMath.Entity) : AngouriMath.Entity
AngouriMath.MathS.Arcsin(AngouriMath.Entity) : AngouriMath.Entity
AngouriMath.MathS.Arctan(AngouriMath.Entity) : AngouriMath.Entity
+AngouriMath.MathS.Argmax(AngouriMath.Entity, AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
+AngouriMath.MathS.Argmin(AngouriMath.Entity, AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
AngouriMath.MathS.Average(AngouriMath.Entity+Matrix) : AngouriMath.Entity
AngouriMath.MathS.Cbrt(AngouriMath.Entity) : AngouriMath.Entity
AngouriMath.MathS.Ceil(AngouriMath.Entity) : AngouriMath.Entity
@@ -2466,7 +2540,9 @@ AngouriMath.MathS.Matrix(System.Int32, System.Int32, System.Func>) : AngouriMath.Entity+Matrix
AngouriMath.MathS.MatrixFromRows(System.Collections.Generic.IEnumerable) : AngouriMath.Entity+Matrix
AngouriMath.MathS.Max(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
+AngouriMath.MathS.Maximum(AngouriMath.Entity, AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
AngouriMath.MathS.Min(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
+AngouriMath.MathS.Minimum(AngouriMath.Entity, AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
AngouriMath.MathS.Mod(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
AngouriMath.MathS.NaN : AngouriMath.Entity
AngouriMath.MathS.Negation(AngouriMath.Entity) : AngouriMath.Entity
@@ -2568,6 +2644,8 @@ class AngouriMath.Entity+Arccotanf
class AngouriMath.Entity+Arcsecantf
class AngouriMath.Entity+Arcsinf
class AngouriMath.Entity+Arctanf
+class AngouriMath.Entity+Argmaxf
+class AngouriMath.Entity+Argminf
class AngouriMath.Entity+Boolean
class AngouriMath.Entity+CalculusOperator
class AngouriMath.Entity+Ceilf
@@ -2596,7 +2674,9 @@ class AngouriMath.Entity+Limitf
class AngouriMath.Entity+Logf
class AngouriMath.Entity+Matrix
class AngouriMath.Entity+Maxf
+class AngouriMath.Entity+Maximumf
class AngouriMath.Entity+Minf
+class AngouriMath.Entity+Minimumf
class AngouriMath.Entity+Minusf
class AngouriMath.Entity+Modf
class AngouriMath.Entity+Mulf