From fd397d194909554753be0900ae4d30611110df99 Mon Sep 17 00:00:00 2001 From: Rafael Vuijk Date: Thu, 22 Oct 2026 16:48:35 +0000 Subject: [PATCH 1/2] The polygamma functions, and the derivative of the factorial polygamma(n, z) is psi^(n)(z), the (n + 1)-th derivative of ln Gamma(z), and digamma(z) is polygamma(0, z) and prints so. Both are parsed and printed in text, LaTeX and SymPy; neither name was recognised, so digamma(1) was the variable digamma, and polygamma(1, 1) did not parse. Each order differentiates to the next, and an order that depends on the variable declines. The derivative of x! is x! digamma(x + 1), where it declined (#958), so gamma(x) differentiates to (x - 1)! digamma(x). It is evaluated to the working precision anywhere in the complex plane but at 0, -1, -2, ..., its poles: reflected left of Re z = 1/2 (DLMF 5.15.6), with the derivatives of cot(pi z) as polynomials in cot; moved by the recurrence (5.15.5) to Re w at least the working digits; and summed by the asymptotic series (5.11.2, 5.15.8), with the Bernoulli numbers exact from the tangent numbers by Brent and Harvey's recurrence. It agrees with mpmath to the last digit at 100, 300 and 2000 digits. Special values stay as written, since digamma(1) = -gamma wants a symbol for Euler's constant. Two derivative tests used the factorial as the node that cannot be differentiated; they use a polygamma function of a varying order. Part of #171. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura --- BREAKING-CHANGES.md | 15 + Sources/.editorconfig | 6 + Sources/AngouriMath/Convenience/MathS.cs | 19 + Sources/AngouriMath/Core/Antlr/AngouriMath.g | 3 + .../AngouriMath/Core/Antlr/AngouriMath.interp | 6 +- .../AngouriMath/Core/Antlr/AngouriMath.tokens | 42 +- .../Core/Antlr/AngouriMathLexer.cs | 1059 +++++++++-------- .../Core/Antlr/AngouriMathLexer.interp | 8 +- .../Core/Antlr/AngouriMathLexer.tokens | 42 +- .../Core/Antlr/AngouriMathParser.cs | 764 ++++++------ Sources/AngouriMath/Core/Domains.Classes.cs | 8 + .../Entity.Continuous.Polygamma.Classes.cs | 37 + .../Entity/Continuous/Number/Polygamma.cs | 260 ++++ .../Serialization/Entity.Serialization.cs | 1 + .../Transformations/Matching/MatchPattern.cs | 1 + .../Docs/Contributing/WritingARule.md | 2 +- Sources/AngouriMath/Docs/Usage/Syntax.md | 9 + .../Functions/Continuous/Differentiation.cs | 43 +- .../EquationSolver/InvertNode.Classes.cs | 8 + ...aluation.Continuous.Arithmetics.Classes.cs | 19 + .../Output/Latex/Latex.Arithmetics.Classes.cs | 9 + .../ToString/ToString.Arithmetics.Classes.cs | 11 + .../ToSympy/ToSympy.Arithmetics.Classes.cs | 8 + Sources/AngouriMath/Functions/Substitute.cs | 7 + .../Functions/TreeAnalyzer/RealValued.cs | 5 + .../Functions/TreeAnalyzer/Sort.Classes.cs | 6 + .../UnitTests/Calculus/DerivativeTest.cs | 27 +- Sources/Tests/UnitTests/Common/PublicApi.txt | 26 + .../UnitTests/Convenience/PolygammaTest.cs | 95 ++ .../Transformations/RuleAuthoringGuideTest.cs | 2 +- 30 files changed, 1584 insertions(+), 964 deletions(-) create mode 100644 Sources/AngouriMath/Core/Entity/Continuous/Entity.Continuous.Polygamma.Classes.cs create mode 100644 Sources/AngouriMath/Core/Entity/Continuous/Number/Polygamma.cs create mode 100644 Sources/Tests/UnitTests/Convenience/PolygammaTest.cs diff --git a/BREAKING-CHANGES.md b/BREAKING-CHANGES.md index 47f838101..39310a5bf 100644 --- a/BREAKING-CHANGES.md +++ b/BREAKING-CHANGES.md @@ -78,6 +78,21 @@ as `a - b = 0`, as a statement's own solve reads it: `"x + 1 = 3".Solve("x")` wa | `MathS.Equations("x + y = 3", "x - y = 1").Solve("x", "y")` | `null` | `[[2, 1]]` | | `MathS.Equations("x + y = 3", "x - y = 1").ToString()` | `x + y = 3 = 0` and `x - y = 1 = 0` | `x + y - 3 = 0` and `x - y - 1 = 0` | +### The polygamma functions, and the derivative of the factorial + +**Silent: a new reading, and an answer where there was none.** +- **New functions.** `polygamma(n, z)` and `digamma(z)` are the polygamma functions `psi^(n)(z)`, the `(n + 1)`-th derivatives of `ln Gamma(z)`, and the digamma function, which is `polygamma(0, z)`. Neither name was recognised, so each was read as a product with an undeclared variable. +- **Evaluation.** Each is evaluated to the working precision anywhere in the complex plane but at `0, -1, -2, ...`, its poles, where it is `NaN`. +- **Derivatives.** Each order differentiates to the next. The derivative of `x!`, which was left unevaluated, is `x! * digamma(x + 1)` ([#171](https://github.com/asc-community/AngouriMath/issues/171)). + +| Input | Was (2.6.0) | Now | +|---|---|---| +| `"digamma(1)".ToEntity()` | `digamma * 1`, the variable `digamma` | `digamma(1)`, which evaluates to `-0.5772156649015328…` | +| `"digamma(x)".ToEntity()` | `digamma * x` | `digamma(x)` | +| `"polygamma(1, 1)".ToEntity()` | an `UnhandledParseException` | `polygamma(1, 1)`, which evaluates to `1.6449340668482264…` | +| `"x!".ToEntity().Differentiate("x")` | `derivative(x!, x)`, unevaluated | `x! * digamma(x + 1)` | +| `"gamma(x)".ToEntity().Differentiate("x")` | `derivative((x - 1)!, x)` | `(x - 1)! * digamma(x - 1 + 1)` | + ### Numerical equality is to half the evaluation's digits **Silent: wrong answers.** `MathS.UnsafeAndInternal.AreEqualNumerically` evaluated both sides at its check points and diff --git a/Sources/.editorconfig b/Sources/.editorconfig index 414ded9ab..46679c092 100644 --- a/Sources/.editorconfig +++ b/Sources/.editorconfig @@ -696,6 +696,12 @@ file_header_template=\nCopyright (c) 2019-2026 Angouri.\nAngouriMath is licensed [AngouriMath/Core/Entity/Continuous/Number/ExponentialIntegrals.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/Core/Entity/Continuous/Number/Polygamma.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/Core/Entity/Continuous/Entity.Continuous.Polygamma.Classes.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/Core/Entity/Continuous/Entity.Continuous.ExponentialIntegrals.Classes.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 615559fa9..3b01c00dc 100644 --- a/Sources/AngouriMath/Convenience/MathS.cs +++ b/Sources/AngouriMath/Convenience/MathS.cs @@ -1455,6 +1455,25 @@ public static Entity VectorLength(Matrix v) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Entity Li(Entity a) => new Lif(a); + /// The polygamma function, psi^(n)(z), the (n + 1)-th derivative of ln Gamma(z) + /// The order n, a whole number n >= 0 + /// The argument, any complex number but 0, -1, -2, ..., its poles + /// The node + /// + /// psi^(0) is the digamma function, Gamma'(z)/Gamma(z), which is what the derivative of + /// x! is written with: (x!)' = x! psi(x + 1). Each order is the derivative of the one before. + /// https://github.com/asc-community/AngouriMath/issues/171 + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Entity Polygamma(Entity order, Entity argument) => new Polygammaf(order, argument); + + /// The digamma function, psi(z) = Gamma'(z)/Gamma(z), which is polygamma(0, z) + /// The argument, any complex number but 0, -1, -2, ..., its poles + /// The node of order 0 + /// https://github.com/asc-community/AngouriMath/issues/171 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Entity Digamma(Entity argument) => new Polygammaf(Integer.Zero, argument); + /// The sine integral, Si(z) = int_0^z sin(t)/t dt /// The argument, any complex number /// The node diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMath.g b/Sources/AngouriMath/Core/Antlr/AngouriMath.g index e4576d85c..a9f238176 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMath.g +++ b/Sources/AngouriMath/Core/Antlr/AngouriMath.g @@ -616,6 +616,9 @@ atom returns[Entity value] /* The exponential and logarithmic integrals. https://github.com/asc-community/AngouriMath/issues/1501 */ | 'Ei(' args = function_arguments ')' { Assert("Ei", 1, $args.list.Count); $value = MathS.Ei($args.list[0]); } | 'li(' args = function_arguments ')' { Assert("li", 1, $args.list.Count); $value = MathS.Li($args.list[0]); } + /* The polygamma functions, and the digamma function, which is the one of order 0. https://github.com/asc-community/AngouriMath/issues/171 */ + | 'polygamma(' args = function_arguments ')' { Assert("polygamma", 2, $args.list.Count); $value = MathS.Polygamma($args.list[0], $args.list[1]); } + | 'digamma(' args = function_arguments ')' { Assert("digamma", 1, $args.list.Count); $value = MathS.Digamma($args.list[0]); } /* The trigonometric and hyperbolic integrals. https://github.com/asc-community/AngouriMath/issues/1501 */ | 'Si(' args = function_arguments ')' { Assert("Si", 1, $args.list.Count); $value = MathS.Si($args.list[0]); } | 'Ci(' args = function_arguments ')' { Assert("Ci", 1, $args.list.Count); $value = MathS.Ci($args.list[0]); } diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMath.interp b/Sources/AngouriMath/Core/Antlr/AngouriMath.interp index e721e835b..f0f2875d3 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMath.interp +++ b/Sources/AngouriMath/Core/Antlr/AngouriMath.interp @@ -173,6 +173,8 @@ null 'erfi(' 'Ei(' 'li(' +'polygamma(' +'digamma(' 'Si(' 'Ci(' 'Shi(' @@ -377,6 +379,8 @@ null null null null +null +null NEWLINE NUMBER SPECIALSET @@ -416,4 +420,4 @@ statement atn: -[4, 1, 191, 1141, 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, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 60, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 66, 8, 1, 11, 1, 12, 1, 67, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 74, 8, 1, 11, 1, 12, 1, 75, 3, 1, 78, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 85, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 95, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 105, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 110, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 120, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 130, 8, 4, 10, 4, 12, 4, 133, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 145, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 151, 8, 5, 10, 5, 12, 5, 154, 9, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 168, 8, 6, 10, 6, 12, 6, 171, 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, 191, 8, 7, 10, 7, 12, 7, 194, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 226, 8, 8, 10, 8, 12, 8, 229, 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, 1, 9, 1, 9, 3, 9, 247, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 252, 8, 9, 10, 9, 12, 9, 255, 9, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 263, 8, 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, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 282, 8, 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, 11, 1, 11, 5, 11, 298, 8, 11, 10, 11, 12, 11, 301, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 313, 8, 12, 10, 12, 12, 12, 316, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 328, 8, 13, 10, 13, 12, 13, 331, 9, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 347, 8, 14, 10, 14, 12, 14, 350, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 358, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 366, 8, 16, 1, 16, 1, 16, 1, 16, 3, 16, 371, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 385, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 5, 19, 393, 8, 19, 10, 19, 12, 19, 396, 9, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 406, 8, 20, 10, 20, 12, 20, 409, 9, 20, 3, 20, 411, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 418, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 426, 8, 21, 5, 21, 428, 8, 21, 10, 21, 12, 21, 431, 9, 21, 3, 21, 433, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 1135, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 0, 0, 26, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 0, 6, 1, 0, 6, 7, 1, 0, 33, 34, 1, 0, 37, 38, 1, 0, 42, 43, 1, 0, 44, 45, 1, 0, 46, 47, 1317, 0, 59, 1, 0, 0, 0, 2, 77, 1, 0, 0, 0, 4, 79, 1, 0, 0, 0, 6, 109, 1, 0, 0, 0, 8, 111, 1, 0, 0, 0, 10, 136, 1, 0, 0, 0, 12, 157, 1, 0, 0, 0, 14, 172, 1, 0, 0, 0, 16, 195, 1, 0, 0, 0, 18, 230, 1, 0, 0, 0, 20, 281, 1, 0, 0, 0, 22, 283, 1, 0, 0, 0, 24, 302, 1, 0, 0, 0, 26, 317, 1, 0, 0, 0, 28, 332, 1, 0, 0, 0, 30, 351, 1, 0, 0, 0, 32, 370, 1, 0, 0, 0, 34, 372, 1, 0, 0, 0, 36, 384, 1, 0, 0, 0, 38, 386, 1, 0, 0, 0, 40, 410, 1, 0, 0, 0, 42, 432, 1, 0, 0, 0, 44, 434, 1, 0, 0, 0, 46, 440, 1, 0, 0, 0, 48, 1134, 1, 0, 0, 0, 50, 1136, 1, 0, 0, 0, 52, 53, 3, 48, 24, 0, 53, 54, 5, 1, 0, 0, 54, 55, 6, 0, -1, 0, 55, 60, 1, 0, 0, 0, 56, 57, 3, 48, 24, 0, 57, 58, 6, 0, -1, 0, 58, 60, 1, 0, 0, 0, 59, 52, 1, 0, 0, 0, 59, 56, 1, 0, 0, 0, 60, 1, 1, 0, 0, 0, 61, 62, 5, 2, 0, 0, 62, 63, 3, 0, 0, 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, 78, 1, 0, 0, 0, 69, 70, 5, 2, 0, 0, 70, 71, 3, 6, 3, 0, 71, 72, 6, 1, -1, 0, 72, 74, 1, 0, 0, 0, 73, 69, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 78, 1, 0, 0, 0, 77, 65, 1, 0, 0, 0, 77, 73, 1, 0, 0, 0, 78, 3, 1, 0, 0, 0, 79, 80, 3, 0, 0, 0, 80, 84, 6, 2, -1, 0, 81, 82, 3, 2, 1, 0, 82, 83, 6, 2, -1, 0, 83, 85, 1, 0, 0, 0, 84, 81, 1, 0, 0, 0, 84, 85, 1, 0, 0, 0, 85, 5, 1, 0, 0, 0, 86, 87, 5, 3, 0, 0, 87, 88, 3, 4, 2, 0, 88, 89, 6, 3, -1, 0, 89, 95, 1, 0, 0, 0, 90, 91, 5, 4, 0, 0, 91, 92, 3, 4, 2, 0, 92, 93, 6, 3, -1, 0, 93, 95, 1, 0, 0, 0, 94, 86, 1, 0, 0, 0, 94, 90, 1, 0, 0, 0, 95, 110, 1, 0, 0, 0, 96, 97, 5, 3, 0, 0, 97, 98, 3, 6, 3, 0, 98, 99, 6, 3, -1, 0, 99, 105, 1, 0, 0, 0, 100, 101, 5, 4, 0, 0, 101, 102, 3, 6, 3, 0, 102, 103, 6, 3, -1, 0, 103, 105, 1, 0, 0, 0, 104, 96, 1, 0, 0, 0, 104, 100, 1, 0, 0, 0, 105, 110, 1, 0, 0, 0, 106, 107, 3, 4, 2, 0, 107, 108, 6, 3, -1, 0, 108, 110, 1, 0, 0, 0, 109, 94, 1, 0, 0, 0, 109, 104, 1, 0, 0, 0, 109, 106, 1, 0, 0, 0, 110, 7, 1, 0, 0, 0, 111, 112, 3, 6, 3, 0, 112, 131, 6, 4, -1, 0, 113, 119, 5, 5, 0, 0, 114, 115, 7, 0, 0, 0, 115, 120, 6, 4, -1, 0, 116, 117, 3, 6, 3, 0, 117, 118, 6, 4, -1, 0, 118, 120, 1, 0, 0, 0, 119, 114, 1, 0, 0, 0, 119, 116, 1, 0, 0, 0, 120, 130, 1, 0, 0, 0, 121, 122, 5, 8, 0, 0, 122, 123, 3, 6, 3, 0, 123, 124, 6, 4, -1, 0, 124, 130, 1, 0, 0, 0, 125, 126, 5, 9, 0, 0, 126, 127, 3, 6, 3, 0, 127, 128, 6, 4, -1, 0, 128, 130, 1, 0, 0, 0, 129, 113, 1, 0, 0, 0, 129, 121, 1, 0, 0, 0, 129, 125, 1, 0, 0, 0, 130, 133, 1, 0, 0, 0, 131, 129, 1, 0, 0, 0, 131, 132, 1, 0, 0, 0, 132, 134, 1, 0, 0, 0, 133, 131, 1, 0, 0, 0, 134, 135, 6, 4, -1, 0, 135, 9, 1, 0, 0, 0, 136, 137, 3, 8, 4, 0, 137, 152, 6, 5, -1, 0, 138, 144, 5, 4, 0, 0, 139, 140, 7, 0, 0, 0, 140, 145, 6, 5, -1, 0, 141, 142, 3, 8, 4, 0, 142, 143, 6, 5, -1, 0, 143, 145, 1, 0, 0, 0, 144, 139, 1, 0, 0, 0, 144, 141, 1, 0, 0, 0, 145, 151, 1, 0, 0, 0, 146, 147, 5, 3, 0, 0, 147, 148, 3, 8, 4, 0, 148, 149, 6, 5, -1, 0, 149, 151, 1, 0, 0, 0, 150, 138, 1, 0, 0, 0, 150, 146, 1, 0, 0, 0, 151, 154, 1, 0, 0, 0, 152, 150, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, 152, 1, 0, 0, 0, 155, 156, 6, 5, -1, 0, 156, 11, 1, 0, 0, 0, 157, 158, 3, 10, 5, 0, 158, 169, 6, 6, -1, 0, 159, 160, 5, 10, 0, 0, 160, 161, 3, 10, 5, 0, 161, 162, 6, 6, -1, 0, 162, 168, 1, 0, 0, 0, 163, 164, 5, 11, 0, 0, 164, 165, 3, 10, 5, 0, 165, 166, 6, 6, -1, 0, 166, 168, 1, 0, 0, 0, 167, 159, 1, 0, 0, 0, 167, 163, 1, 0, 0, 0, 168, 171, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 13, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 172, 173, 3, 12, 6, 0, 173, 192, 6, 7, -1, 0, 174, 175, 5, 12, 0, 0, 175, 176, 3, 12, 6, 0, 176, 177, 6, 7, -1, 0, 177, 191, 1, 0, 0, 0, 178, 179, 5, 13, 0, 0, 179, 180, 3, 12, 6, 0, 180, 181, 6, 7, -1, 0, 181, 191, 1, 0, 0, 0, 182, 183, 5, 14, 0, 0, 183, 184, 3, 12, 6, 0, 184, 185, 6, 7, -1, 0, 185, 191, 1, 0, 0, 0, 186, 187, 5, 15, 0, 0, 187, 188, 3, 12, 6, 0, 188, 189, 6, 7, -1, 0, 189, 191, 1, 0, 0, 0, 190, 174, 1, 0, 0, 0, 190, 178, 1, 0, 0, 0, 190, 182, 1, 0, 0, 0, 190, 186, 1, 0, 0, 0, 191, 194, 1, 0, 0, 0, 192, 190, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 15, 1, 0, 0, 0, 194, 192, 1, 0, 0, 0, 195, 196, 3, 14, 7, 0, 196, 227, 6, 8, -1, 0, 197, 198, 5, 16, 0, 0, 198, 199, 3, 14, 7, 0, 199, 200, 6, 8, -1, 0, 200, 226, 1, 0, 0, 0, 201, 202, 5, 17, 0, 0, 202, 203, 3, 14, 7, 0, 203, 204, 6, 8, -1, 0, 204, 226, 1, 0, 0, 0, 205, 206, 5, 18, 0, 0, 206, 207, 3, 14, 7, 0, 207, 208, 6, 8, -1, 0, 208, 226, 1, 0, 0, 0, 209, 210, 5, 19, 0, 0, 210, 211, 3, 14, 7, 0, 211, 212, 6, 8, -1, 0, 212, 226, 1, 0, 0, 0, 213, 214, 5, 20, 0, 0, 214, 215, 3, 14, 7, 0, 215, 216, 6, 8, -1, 0, 216, 226, 1, 0, 0, 0, 217, 218, 5, 21, 0, 0, 218, 219, 3, 14, 7, 0, 219, 220, 6, 8, -1, 0, 220, 226, 1, 0, 0, 0, 221, 222, 5, 22, 0, 0, 222, 223, 3, 14, 7, 0, 223, 224, 6, 8, -1, 0, 224, 226, 1, 0, 0, 0, 225, 197, 1, 0, 0, 0, 225, 201, 1, 0, 0, 0, 225, 205, 1, 0, 0, 0, 225, 209, 1, 0, 0, 0, 225, 213, 1, 0, 0, 0, 225, 217, 1, 0, 0, 0, 225, 221, 1, 0, 0, 0, 226, 229, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 17, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 230, 231, 3, 16, 8, 0, 231, 253, 6, 9, -1, 0, 232, 233, 5, 23, 0, 0, 233, 247, 6, 9, -1, 0, 234, 235, 5, 24, 0, 0, 235, 247, 6, 9, -1, 0, 236, 237, 5, 25, 0, 0, 237, 247, 6, 9, -1, 0, 238, 239, 5, 26, 0, 0, 239, 247, 6, 9, -1, 0, 240, 241, 5, 27, 0, 0, 241, 247, 6, 9, -1, 0, 242, 243, 5, 28, 0, 0, 243, 247, 6, 9, -1, 0, 244, 245, 5, 29, 0, 0, 245, 247, 6, 9, -1, 0, 246, 232, 1, 0, 0, 0, 246, 234, 1, 0, 0, 0, 246, 236, 1, 0, 0, 0, 246, 238, 1, 0, 0, 0, 246, 240, 1, 0, 0, 0, 246, 242, 1, 0, 0, 0, 246, 244, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 249, 3, 16, 8, 0, 249, 250, 6, 9, -1, 0, 250, 252, 1, 0, 0, 0, 251, 246, 1, 0, 0, 0, 252, 255, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 262, 1, 0, 0, 0, 255, 253, 1, 0, 0, 0, 256, 257, 5, 30, 0, 0, 257, 258, 5, 9, 0, 0, 258, 259, 3, 16, 8, 0, 259, 260, 5, 31, 0, 0, 260, 261, 6, 9, -1, 0, 261, 263, 1, 0, 0, 0, 262, 256, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 264, 1, 0, 0, 0, 264, 265, 6, 9, -1, 0, 265, 19, 1, 0, 0, 0, 266, 267, 5, 32, 0, 0, 267, 268, 3, 18, 9, 0, 268, 269, 6, 10, -1, 0, 269, 282, 1, 0, 0, 0, 270, 271, 5, 32, 0, 0, 271, 272, 3, 20, 10, 0, 272, 273, 6, 10, -1, 0, 273, 282, 1, 0, 0, 0, 274, 275, 5, 32, 0, 0, 275, 276, 3, 34, 17, 0, 276, 277, 6, 10, -1, 0, 277, 282, 1, 0, 0, 0, 278, 279, 3, 18, 9, 0, 279, 280, 6, 10, -1, 0, 280, 282, 1, 0, 0, 0, 281, 266, 1, 0, 0, 0, 281, 270, 1, 0, 0, 0, 281, 274, 1, 0, 0, 0, 281, 278, 1, 0, 0, 0, 282, 21, 1, 0, 0, 0, 283, 284, 3, 20, 10, 0, 284, 299, 6, 11, -1, 0, 285, 286, 5, 33, 0, 0, 286, 287, 3, 20, 10, 0, 287, 288, 6, 11, -1, 0, 288, 298, 1, 0, 0, 0, 289, 290, 5, 34, 0, 0, 290, 291, 3, 20, 10, 0, 291, 292, 6, 11, -1, 0, 292, 298, 1, 0, 0, 0, 293, 294, 7, 1, 0, 0, 294, 295, 3, 34, 17, 0, 295, 296, 6, 11, -1, 0, 296, 298, 1, 0, 0, 0, 297, 285, 1, 0, 0, 0, 297, 289, 1, 0, 0, 0, 297, 293, 1, 0, 0, 0, 298, 301, 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 23, 1, 0, 0, 0, 301, 299, 1, 0, 0, 0, 302, 303, 3, 22, 11, 0, 303, 314, 6, 12, -1, 0, 304, 305, 5, 35, 0, 0, 305, 306, 3, 22, 11, 0, 306, 307, 6, 12, -1, 0, 307, 313, 1, 0, 0, 0, 308, 309, 5, 35, 0, 0, 309, 310, 3, 34, 17, 0, 310, 311, 6, 12, -1, 0, 311, 313, 1, 0, 0, 0, 312, 304, 1, 0, 0, 0, 312, 308, 1, 0, 0, 0, 313, 316, 1, 0, 0, 0, 314, 312, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 25, 1, 0, 0, 0, 316, 314, 1, 0, 0, 0, 317, 318, 3, 24, 12, 0, 318, 329, 6, 13, -1, 0, 319, 320, 5, 36, 0, 0, 320, 321, 3, 24, 12, 0, 321, 322, 6, 13, -1, 0, 322, 328, 1, 0, 0, 0, 323, 324, 5, 36, 0, 0, 324, 325, 3, 34, 17, 0, 325, 326, 6, 13, -1, 0, 326, 328, 1, 0, 0, 0, 327, 319, 1, 0, 0, 0, 327, 323, 1, 0, 0, 0, 328, 331, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 329, 330, 1, 0, 0, 0, 330, 27, 1, 0, 0, 0, 331, 329, 1, 0, 0, 0, 332, 333, 3, 26, 13, 0, 333, 348, 6, 14, -1, 0, 334, 335, 5, 37, 0, 0, 335, 336, 3, 26, 13, 0, 336, 337, 6, 14, -1, 0, 337, 347, 1, 0, 0, 0, 338, 339, 5, 38, 0, 0, 339, 340, 3, 26, 13, 0, 340, 341, 6, 14, -1, 0, 341, 347, 1, 0, 0, 0, 342, 343, 7, 2, 0, 0, 343, 344, 3, 34, 17, 0, 344, 345, 6, 14, -1, 0, 345, 347, 1, 0, 0, 0, 346, 334, 1, 0, 0, 0, 346, 338, 1, 0, 0, 0, 346, 342, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 29, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 351, 352, 3, 28, 14, 0, 352, 357, 6, 15, -1, 0, 353, 354, 5, 39, 0, 0, 354, 355, 3, 30, 15, 0, 355, 356, 6, 15, -1, 0, 356, 358, 1, 0, 0, 0, 357, 353, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 31, 1, 0, 0, 0, 359, 360, 3, 30, 15, 0, 360, 365, 6, 16, -1, 0, 361, 362, 5, 40, 0, 0, 362, 363, 3, 32, 16, 0, 363, 364, 6, 16, -1, 0, 364, 366, 1, 0, 0, 0, 365, 361, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 371, 1, 0, 0, 0, 367, 368, 3, 34, 17, 0, 368, 369, 6, 16, -1, 0, 369, 371, 1, 0, 0, 0, 370, 359, 1, 0, 0, 0, 370, 367, 1, 0, 0, 0, 371, 33, 1, 0, 0, 0, 372, 373, 3, 36, 18, 0, 373, 374, 3, 38, 19, 0, 374, 375, 5, 41, 0, 0, 375, 376, 3, 32, 16, 0, 376, 377, 6, 17, -1, 0, 377, 35, 1, 0, 0, 0, 378, 379, 7, 3, 0, 0, 379, 385, 6, 18, -1, 0, 380, 381, 7, 4, 0, 0, 381, 385, 6, 18, -1, 0, 382, 383, 7, 5, 0, 0, 383, 385, 6, 18, -1, 0, 384, 378, 1, 0, 0, 0, 384, 380, 1, 0, 0, 0, 384, 382, 1, 0, 0, 0, 385, 37, 1, 0, 0, 0, 386, 387, 3, 16, 8, 0, 387, 394, 6, 19, -1, 0, 388, 389, 5, 48, 0, 0, 389, 390, 3, 16, 8, 0, 390, 391, 6, 19, -1, 0, 391, 393, 1, 0, 0, 0, 392, 388, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 397, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 398, 6, 19, -1, 0, 398, 39, 1, 0, 0, 0, 399, 400, 3, 32, 16, 0, 400, 407, 6, 20, -1, 0, 401, 402, 5, 48, 0, 0, 402, 403, 3, 32, 16, 0, 403, 404, 6, 20, -1, 0, 404, 406, 1, 0, 0, 0, 405, 401, 1, 0, 0, 0, 406, 409, 1, 0, 0, 0, 407, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 411, 1, 0, 0, 0, 409, 407, 1, 0, 0, 0, 410, 399, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 41, 1, 0, 0, 0, 412, 413, 3, 32, 16, 0, 413, 414, 6, 21, -1, 0, 414, 418, 1, 0, 0, 0, 415, 416, 7, 0, 0, 0, 416, 418, 6, 21, -1, 0, 417, 412, 1, 0, 0, 0, 417, 415, 1, 0, 0, 0, 418, 429, 1, 0, 0, 0, 419, 425, 5, 48, 0, 0, 420, 421, 3, 32, 16, 0, 421, 422, 6, 21, -1, 0, 422, 426, 1, 0, 0, 0, 423, 424, 7, 0, 0, 0, 424, 426, 6, 21, -1, 0, 425, 420, 1, 0, 0, 0, 425, 423, 1, 0, 0, 0, 426, 428, 1, 0, 0, 0, 427, 419, 1, 0, 0, 0, 428, 431, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 433, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 432, 417, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 43, 1, 0, 0, 0, 434, 435, 3, 32, 16, 0, 435, 436, 6, 22, -1, 0, 436, 437, 5, 49, 0, 0, 437, 438, 3, 32, 16, 0, 438, 439, 6, 22, -1, 0, 439, 45, 1, 0, 0, 0, 440, 441, 3, 32, 16, 0, 441, 442, 6, 23, -1, 0, 442, 443, 5, 41, 0, 0, 443, 444, 3, 32, 16, 0, 444, 445, 6, 23, -1, 0, 445, 47, 1, 0, 0, 0, 446, 447, 5, 50, 0, 0, 447, 1135, 6, 24, -1, 0, 448, 449, 5, 51, 0, 0, 449, 1135, 6, 24, -1, 0, 450, 451, 5, 188, 0, 0, 451, 1135, 6, 24, -1, 0, 452, 453, 5, 185, 0, 0, 453, 1135, 6, 24, -1, 0, 454, 455, 5, 187, 0, 0, 455, 1135, 6, 24, -1, 0, 456, 457, 5, 186, 0, 0, 457, 1135, 6, 24, -1, 0, 458, 459, 5, 189, 0, 0, 459, 1135, 6, 24, -1, 0, 460, 461, 5, 52, 0, 0, 461, 462, 3, 32, 16, 0, 462, 463, 5, 53, 0, 0, 463, 464, 6, 24, -1, 0, 464, 1135, 1, 0, 0, 0, 465, 466, 5, 54, 0, 0, 466, 467, 3, 48, 24, 0, 467, 468, 6, 24, -1, 0, 468, 1135, 1, 0, 0, 0, 469, 470, 5, 55, 0, 0, 470, 471, 3, 40, 20, 0, 471, 472, 5, 56, 0, 0, 472, 473, 6, 24, -1, 0, 473, 1135, 1, 0, 0, 0, 474, 475, 5, 55, 0, 0, 475, 476, 3, 40, 20, 0, 476, 477, 5, 57, 0, 0, 477, 478, 6, 24, -1, 0, 478, 1135, 1, 0, 0, 0, 479, 480, 5, 30, 0, 0, 480, 481, 3, 44, 22, 0, 481, 482, 5, 31, 0, 0, 482, 483, 6, 24, -1, 0, 483, 1135, 1, 0, 0, 0, 484, 485, 5, 55, 0, 0, 485, 486, 3, 44, 22, 0, 486, 487, 5, 31, 0, 0, 487, 488, 6, 24, -1, 0, 488, 1135, 1, 0, 0, 0, 489, 490, 5, 55, 0, 0, 490, 491, 3, 44, 22, 0, 491, 492, 5, 57, 0, 0, 492, 493, 6, 24, -1, 0, 493, 1135, 1, 0, 0, 0, 494, 495, 5, 30, 0, 0, 495, 496, 3, 44, 22, 0, 496, 497, 5, 57, 0, 0, 497, 498, 6, 24, -1, 0, 498, 1135, 1, 0, 0, 0, 499, 500, 5, 30, 0, 0, 500, 501, 3, 32, 16, 0, 501, 502, 5, 31, 0, 0, 502, 503, 6, 24, -1, 0, 503, 1135, 1, 0, 0, 0, 504, 505, 5, 58, 0, 0, 505, 506, 3, 46, 23, 0, 506, 507, 5, 59, 0, 0, 507, 508, 6, 24, -1, 0, 508, 1135, 1, 0, 0, 0, 509, 510, 5, 58, 0, 0, 510, 511, 3, 42, 21, 0, 511, 512, 5, 59, 0, 0, 512, 513, 6, 24, -1, 0, 513, 1135, 1, 0, 0, 0, 514, 515, 5, 60, 0, 0, 515, 516, 3, 40, 20, 0, 516, 517, 5, 31, 0, 0, 517, 518, 6, 24, -1, 0, 518, 1135, 1, 0, 0, 0, 519, 520, 5, 61, 0, 0, 520, 521, 3, 40, 20, 0, 521, 522, 5, 31, 0, 0, 522, 523, 6, 24, -1, 0, 523, 1135, 1, 0, 0, 0, 524, 525, 5, 62, 0, 0, 525, 526, 3, 40, 20, 0, 526, 527, 5, 31, 0, 0, 527, 528, 6, 24, -1, 0, 528, 1135, 1, 0, 0, 0, 529, 530, 5, 63, 0, 0, 530, 531, 3, 40, 20, 0, 531, 532, 5, 31, 0, 0, 532, 533, 6, 24, -1, 0, 533, 1135, 1, 0, 0, 0, 534, 535, 5, 64, 0, 0, 535, 536, 3, 40, 20, 0, 536, 537, 5, 31, 0, 0, 537, 538, 6, 24, -1, 0, 538, 1135, 1, 0, 0, 0, 539, 540, 5, 65, 0, 0, 540, 541, 3, 40, 20, 0, 541, 542, 5, 31, 0, 0, 542, 543, 6, 24, -1, 0, 543, 1135, 1, 0, 0, 0, 544, 545, 5, 66, 0, 0, 545, 546, 3, 40, 20, 0, 546, 547, 5, 31, 0, 0, 547, 548, 6, 24, -1, 0, 548, 1135, 1, 0, 0, 0, 549, 550, 5, 67, 0, 0, 550, 551, 3, 40, 20, 0, 551, 552, 5, 31, 0, 0, 552, 553, 6, 24, -1, 0, 553, 1135, 1, 0, 0, 0, 554, 555, 5, 68, 0, 0, 555, 556, 3, 40, 20, 0, 556, 557, 5, 31, 0, 0, 557, 558, 6, 24, -1, 0, 558, 1135, 1, 0, 0, 0, 559, 560, 5, 69, 0, 0, 560, 561, 3, 40, 20, 0, 561, 562, 5, 31, 0, 0, 562, 563, 6, 24, -1, 0, 563, 1135, 1, 0, 0, 0, 564, 565, 5, 70, 0, 0, 565, 566, 3, 40, 20, 0, 566, 567, 5, 31, 0, 0, 567, 568, 6, 24, -1, 0, 568, 1135, 1, 0, 0, 0, 569, 570, 5, 71, 0, 0, 570, 571, 3, 40, 20, 0, 571, 572, 5, 31, 0, 0, 572, 573, 6, 24, -1, 0, 573, 1135, 1, 0, 0, 0, 574, 575, 5, 72, 0, 0, 575, 576, 3, 40, 20, 0, 576, 577, 5, 31, 0, 0, 577, 578, 6, 24, -1, 0, 578, 1135, 1, 0, 0, 0, 579, 580, 5, 73, 0, 0, 580, 581, 3, 40, 20, 0, 581, 582, 5, 31, 0, 0, 582, 583, 6, 24, -1, 0, 583, 1135, 1, 0, 0, 0, 584, 585, 5, 74, 0, 0, 585, 586, 3, 40, 20, 0, 586, 587, 5, 31, 0, 0, 587, 588, 6, 24, -1, 0, 588, 1135, 1, 0, 0, 0, 589, 590, 5, 75, 0, 0, 590, 591, 3, 40, 20, 0, 591, 592, 5, 31, 0, 0, 592, 593, 6, 24, -1, 0, 593, 1135, 1, 0, 0, 0, 594, 595, 5, 76, 0, 0, 595, 596, 3, 40, 20, 0, 596, 597, 5, 31, 0, 0, 597, 598, 6, 24, -1, 0, 598, 1135, 1, 0, 0, 0, 599, 600, 5, 77, 0, 0, 600, 601, 3, 40, 20, 0, 601, 602, 5, 31, 0, 0, 602, 603, 6, 24, -1, 0, 603, 1135, 1, 0, 0, 0, 604, 605, 5, 78, 0, 0, 605, 606, 3, 40, 20, 0, 606, 607, 5, 31, 0, 0, 607, 608, 6, 24, -1, 0, 608, 1135, 1, 0, 0, 0, 609, 610, 5, 79, 0, 0, 610, 611, 3, 40, 20, 0, 611, 612, 5, 31, 0, 0, 612, 613, 6, 24, -1, 0, 613, 1135, 1, 0, 0, 0, 614, 615, 5, 80, 0, 0, 615, 616, 3, 40, 20, 0, 616, 617, 5, 31, 0, 0, 617, 618, 6, 24, -1, 0, 618, 1135, 1, 0, 0, 0, 619, 620, 5, 81, 0, 0, 620, 621, 3, 40, 20, 0, 621, 622, 5, 31, 0, 0, 622, 623, 6, 24, -1, 0, 623, 1135, 1, 0, 0, 0, 624, 625, 5, 82, 0, 0, 625, 626, 3, 40, 20, 0, 626, 627, 5, 31, 0, 0, 627, 628, 6, 24, -1, 0, 628, 1135, 1, 0, 0, 0, 629, 630, 5, 83, 0, 0, 630, 631, 3, 40, 20, 0, 631, 632, 5, 31, 0, 0, 632, 633, 6, 24, -1, 0, 633, 1135, 1, 0, 0, 0, 634, 635, 5, 84, 0, 0, 635, 636, 3, 40, 20, 0, 636, 637, 5, 31, 0, 0, 637, 638, 6, 24, -1, 0, 638, 1135, 1, 0, 0, 0, 639, 640, 5, 85, 0, 0, 640, 641, 3, 40, 20, 0, 641, 642, 5, 31, 0, 0, 642, 643, 6, 24, -1, 0, 643, 1135, 1, 0, 0, 0, 644, 645, 5, 86, 0, 0, 645, 646, 3, 40, 20, 0, 646, 647, 5, 31, 0, 0, 647, 648, 6, 24, -1, 0, 648, 1135, 1, 0, 0, 0, 649, 650, 5, 87, 0, 0, 650, 651, 3, 40, 20, 0, 651, 652, 5, 31, 0, 0, 652, 653, 6, 24, -1, 0, 653, 1135, 1, 0, 0, 0, 654, 655, 5, 88, 0, 0, 655, 656, 3, 40, 20, 0, 656, 657, 5, 31, 0, 0, 657, 658, 6, 24, -1, 0, 658, 1135, 1, 0, 0, 0, 659, 660, 5, 89, 0, 0, 660, 661, 3, 40, 20, 0, 661, 662, 5, 31, 0, 0, 662, 663, 6, 24, -1, 0, 663, 1135, 1, 0, 0, 0, 664, 665, 5, 90, 0, 0, 665, 666, 3, 40, 20, 0, 666, 667, 5, 31, 0, 0, 667, 668, 6, 24, -1, 0, 668, 1135, 1, 0, 0, 0, 669, 670, 5, 91, 0, 0, 670, 671, 3, 40, 20, 0, 671, 672, 5, 31, 0, 0, 672, 673, 6, 24, -1, 0, 673, 1135, 1, 0, 0, 0, 674, 675, 5, 92, 0, 0, 675, 676, 3, 40, 20, 0, 676, 677, 5, 31, 0, 0, 677, 678, 6, 24, -1, 0, 678, 1135, 1, 0, 0, 0, 679, 680, 5, 93, 0, 0, 680, 681, 3, 40, 20, 0, 681, 682, 5, 31, 0, 0, 682, 683, 6, 24, -1, 0, 683, 1135, 1, 0, 0, 0, 684, 685, 5, 94, 0, 0, 685, 686, 3, 40, 20, 0, 686, 687, 5, 31, 0, 0, 687, 688, 6, 24, -1, 0, 688, 1135, 1, 0, 0, 0, 689, 690, 5, 95, 0, 0, 690, 691, 3, 40, 20, 0, 691, 692, 5, 31, 0, 0, 692, 693, 6, 24, -1, 0, 693, 1135, 1, 0, 0, 0, 694, 695, 5, 96, 0, 0, 695, 696, 3, 40, 20, 0, 696, 697, 5, 31, 0, 0, 697, 698, 6, 24, -1, 0, 698, 1135, 1, 0, 0, 0, 699, 700, 5, 97, 0, 0, 700, 701, 3, 40, 20, 0, 701, 702, 5, 31, 0, 0, 702, 703, 6, 24, -1, 0, 703, 1135, 1, 0, 0, 0, 704, 705, 5, 98, 0, 0, 705, 706, 3, 40, 20, 0, 706, 707, 5, 31, 0, 0, 707, 708, 6, 24, -1, 0, 708, 1135, 1, 0, 0, 0, 709, 710, 5, 99, 0, 0, 710, 711, 3, 40, 20, 0, 711, 712, 5, 31, 0, 0, 712, 713, 6, 24, -1, 0, 713, 1135, 1, 0, 0, 0, 714, 715, 5, 100, 0, 0, 715, 716, 3, 40, 20, 0, 716, 717, 5, 31, 0, 0, 717, 718, 6, 24, -1, 0, 718, 1135, 1, 0, 0, 0, 719, 720, 5, 101, 0, 0, 720, 721, 3, 40, 20, 0, 721, 722, 5, 31, 0, 0, 722, 723, 6, 24, -1, 0, 723, 1135, 1, 0, 0, 0, 724, 725, 5, 102, 0, 0, 725, 726, 3, 40, 20, 0, 726, 727, 5, 31, 0, 0, 727, 728, 6, 24, -1, 0, 728, 1135, 1, 0, 0, 0, 729, 730, 5, 103, 0, 0, 730, 731, 3, 40, 20, 0, 731, 732, 5, 31, 0, 0, 732, 733, 6, 24, -1, 0, 733, 1135, 1, 0, 0, 0, 734, 735, 5, 104, 0, 0, 735, 736, 3, 40, 20, 0, 736, 737, 5, 31, 0, 0, 737, 738, 6, 24, -1, 0, 738, 1135, 1, 0, 0, 0, 739, 740, 5, 105, 0, 0, 740, 741, 3, 40, 20, 0, 741, 742, 5, 31, 0, 0, 742, 743, 6, 24, -1, 0, 743, 1135, 1, 0, 0, 0, 744, 745, 5, 106, 0, 0, 745, 746, 3, 40, 20, 0, 746, 747, 5, 31, 0, 0, 747, 748, 6, 24, -1, 0, 748, 1135, 1, 0, 0, 0, 749, 750, 5, 107, 0, 0, 750, 751, 3, 40, 20, 0, 751, 752, 5, 31, 0, 0, 752, 753, 6, 24, -1, 0, 753, 1135, 1, 0, 0, 0, 754, 755, 5, 108, 0, 0, 755, 756, 3, 40, 20, 0, 756, 757, 5, 31, 0, 0, 757, 758, 6, 24, -1, 0, 758, 1135, 1, 0, 0, 0, 759, 760, 5, 109, 0, 0, 760, 761, 3, 40, 20, 0, 761, 762, 5, 31, 0, 0, 762, 763, 6, 24, -1, 0, 763, 1135, 1, 0, 0, 0, 764, 765, 5, 110, 0, 0, 765, 766, 3, 40, 20, 0, 766, 767, 5, 31, 0, 0, 767, 768, 6, 24, -1, 0, 768, 1135, 1, 0, 0, 0, 769, 770, 5, 111, 0, 0, 770, 771, 3, 40, 20, 0, 771, 772, 5, 31, 0, 0, 772, 773, 6, 24, -1, 0, 773, 1135, 1, 0, 0, 0, 774, 775, 5, 112, 0, 0, 775, 776, 3, 40, 20, 0, 776, 777, 5, 31, 0, 0, 777, 778, 6, 24, -1, 0, 778, 1135, 1, 0, 0, 0, 779, 780, 5, 113, 0, 0, 780, 781, 3, 40, 20, 0, 781, 782, 5, 31, 0, 0, 782, 783, 6, 24, -1, 0, 783, 1135, 1, 0, 0, 0, 784, 785, 5, 114, 0, 0, 785, 786, 3, 40, 20, 0, 786, 787, 5, 31, 0, 0, 787, 788, 6, 24, -1, 0, 788, 1135, 1, 0, 0, 0, 789, 790, 5, 115, 0, 0, 790, 791, 3, 40, 20, 0, 791, 792, 5, 31, 0, 0, 792, 793, 6, 24, -1, 0, 793, 1135, 1, 0, 0, 0, 794, 795, 5, 116, 0, 0, 795, 796, 3, 40, 20, 0, 796, 797, 5, 31, 0, 0, 797, 798, 6, 24, -1, 0, 798, 1135, 1, 0, 0, 0, 799, 800, 5, 117, 0, 0, 800, 801, 3, 40, 20, 0, 801, 802, 5, 31, 0, 0, 802, 803, 6, 24, -1, 0, 803, 1135, 1, 0, 0, 0, 804, 805, 5, 118, 0, 0, 805, 806, 3, 40, 20, 0, 806, 807, 5, 31, 0, 0, 807, 808, 6, 24, -1, 0, 808, 1135, 1, 0, 0, 0, 809, 810, 5, 119, 0, 0, 810, 811, 3, 40, 20, 0, 811, 812, 5, 31, 0, 0, 812, 813, 6, 24, -1, 0, 813, 1135, 1, 0, 0, 0, 814, 815, 5, 120, 0, 0, 815, 816, 3, 40, 20, 0, 816, 817, 5, 31, 0, 0, 817, 818, 6, 24, -1, 0, 818, 1135, 1, 0, 0, 0, 819, 820, 5, 121, 0, 0, 820, 821, 3, 40, 20, 0, 821, 822, 5, 31, 0, 0, 822, 823, 6, 24, -1, 0, 823, 1135, 1, 0, 0, 0, 824, 825, 5, 122, 0, 0, 825, 826, 3, 40, 20, 0, 826, 827, 5, 31, 0, 0, 827, 828, 6, 24, -1, 0, 828, 1135, 1, 0, 0, 0, 829, 830, 5, 123, 0, 0, 830, 831, 3, 40, 20, 0, 831, 832, 5, 31, 0, 0, 832, 833, 6, 24, -1, 0, 833, 1135, 1, 0, 0, 0, 834, 835, 5, 124, 0, 0, 835, 836, 3, 40, 20, 0, 836, 837, 5, 31, 0, 0, 837, 838, 6, 24, -1, 0, 838, 1135, 1, 0, 0, 0, 839, 840, 5, 125, 0, 0, 840, 841, 3, 40, 20, 0, 841, 842, 5, 31, 0, 0, 842, 843, 6, 24, -1, 0, 843, 1135, 1, 0, 0, 0, 844, 845, 5, 126, 0, 0, 845, 846, 3, 40, 20, 0, 846, 847, 5, 31, 0, 0, 847, 848, 6, 24, -1, 0, 848, 1135, 1, 0, 0, 0, 849, 850, 5, 127, 0, 0, 850, 851, 3, 40, 20, 0, 851, 852, 5, 31, 0, 0, 852, 853, 6, 24, -1, 0, 853, 1135, 1, 0, 0, 0, 854, 855, 5, 128, 0, 0, 855, 856, 3, 40, 20, 0, 856, 857, 5, 31, 0, 0, 857, 858, 6, 24, -1, 0, 858, 1135, 1, 0, 0, 0, 859, 860, 5, 129, 0, 0, 860, 861, 3, 40, 20, 0, 861, 862, 5, 31, 0, 0, 862, 863, 6, 24, -1, 0, 863, 1135, 1, 0, 0, 0, 864, 865, 5, 130, 0, 0, 865, 866, 3, 40, 20, 0, 866, 867, 5, 31, 0, 0, 867, 868, 6, 24, -1, 0, 868, 1135, 1, 0, 0, 0, 869, 870, 5, 131, 0, 0, 870, 871, 3, 40, 20, 0, 871, 872, 5, 31, 0, 0, 872, 873, 6, 24, -1, 0, 873, 1135, 1, 0, 0, 0, 874, 875, 5, 132, 0, 0, 875, 876, 3, 40, 20, 0, 876, 877, 5, 31, 0, 0, 877, 878, 6, 24, -1, 0, 878, 1135, 1, 0, 0, 0, 879, 880, 5, 133, 0, 0, 880, 881, 3, 40, 20, 0, 881, 882, 5, 31, 0, 0, 882, 883, 6, 24, -1, 0, 883, 1135, 1, 0, 0, 0, 884, 885, 5, 134, 0, 0, 885, 886, 3, 40, 20, 0, 886, 887, 5, 31, 0, 0, 887, 888, 6, 24, -1, 0, 888, 1135, 1, 0, 0, 0, 889, 890, 5, 135, 0, 0, 890, 891, 3, 40, 20, 0, 891, 892, 5, 31, 0, 0, 892, 893, 6, 24, -1, 0, 893, 1135, 1, 0, 0, 0, 894, 895, 5, 136, 0, 0, 895, 896, 3, 40, 20, 0, 896, 897, 5, 31, 0, 0, 897, 898, 6, 24, -1, 0, 898, 1135, 1, 0, 0, 0, 899, 900, 5, 137, 0, 0, 900, 901, 3, 40, 20, 0, 901, 902, 5, 31, 0, 0, 902, 903, 6, 24, -1, 0, 903, 1135, 1, 0, 0, 0, 904, 905, 5, 138, 0, 0, 905, 906, 3, 40, 20, 0, 906, 907, 5, 31, 0, 0, 907, 908, 6, 24, -1, 0, 908, 1135, 1, 0, 0, 0, 909, 910, 5, 139, 0, 0, 910, 911, 3, 40, 20, 0, 911, 912, 5, 31, 0, 0, 912, 913, 6, 24, -1, 0, 913, 1135, 1, 0, 0, 0, 914, 915, 5, 140, 0, 0, 915, 916, 3, 40, 20, 0, 916, 917, 5, 31, 0, 0, 917, 918, 6, 24, -1, 0, 918, 1135, 1, 0, 0, 0, 919, 920, 5, 141, 0, 0, 920, 921, 3, 40, 20, 0, 921, 922, 5, 31, 0, 0, 922, 923, 6, 24, -1, 0, 923, 1135, 1, 0, 0, 0, 924, 925, 5, 142, 0, 0, 925, 926, 3, 40, 20, 0, 926, 927, 5, 31, 0, 0, 927, 928, 6, 24, -1, 0, 928, 1135, 1, 0, 0, 0, 929, 930, 5, 143, 0, 0, 930, 931, 3, 40, 20, 0, 931, 932, 5, 31, 0, 0, 932, 933, 6, 24, -1, 0, 933, 1135, 1, 0, 0, 0, 934, 935, 5, 144, 0, 0, 935, 936, 3, 40, 20, 0, 936, 937, 5, 31, 0, 0, 937, 938, 6, 24, -1, 0, 938, 1135, 1, 0, 0, 0, 939, 940, 5, 145, 0, 0, 940, 941, 3, 40, 20, 0, 941, 942, 5, 31, 0, 0, 942, 943, 6, 24, -1, 0, 943, 1135, 1, 0, 0, 0, 944, 945, 5, 146, 0, 0, 945, 946, 3, 40, 20, 0, 946, 947, 5, 31, 0, 0, 947, 948, 6, 24, -1, 0, 948, 1135, 1, 0, 0, 0, 949, 950, 5, 147, 0, 0, 950, 951, 3, 40, 20, 0, 951, 952, 5, 31, 0, 0, 952, 953, 6, 24, -1, 0, 953, 1135, 1, 0, 0, 0, 954, 955, 5, 148, 0, 0, 955, 956, 3, 40, 20, 0, 956, 957, 5, 31, 0, 0, 957, 958, 6, 24, -1, 0, 958, 1135, 1, 0, 0, 0, 959, 960, 5, 149, 0, 0, 960, 961, 3, 40, 20, 0, 961, 962, 5, 31, 0, 0, 962, 963, 6, 24, -1, 0, 963, 1135, 1, 0, 0, 0, 964, 965, 5, 150, 0, 0, 965, 966, 3, 40, 20, 0, 966, 967, 5, 31, 0, 0, 967, 968, 6, 24, -1, 0, 968, 1135, 1, 0, 0, 0, 969, 970, 5, 151, 0, 0, 970, 971, 3, 40, 20, 0, 971, 972, 5, 31, 0, 0, 972, 973, 6, 24, -1, 0, 973, 1135, 1, 0, 0, 0, 974, 975, 5, 152, 0, 0, 975, 976, 3, 40, 20, 0, 976, 977, 5, 31, 0, 0, 977, 978, 6, 24, -1, 0, 978, 1135, 1, 0, 0, 0, 979, 980, 5, 153, 0, 0, 980, 981, 3, 40, 20, 0, 981, 982, 5, 31, 0, 0, 982, 983, 6, 24, -1, 0, 983, 1135, 1, 0, 0, 0, 984, 985, 5, 154, 0, 0, 985, 986, 3, 40, 20, 0, 986, 987, 5, 31, 0, 0, 987, 988, 6, 24, -1, 0, 988, 1135, 1, 0, 0, 0, 989, 990, 5, 155, 0, 0, 990, 991, 3, 40, 20, 0, 991, 992, 5, 31, 0, 0, 992, 993, 6, 24, -1, 0, 993, 1135, 1, 0, 0, 0, 994, 995, 5, 156, 0, 0, 995, 996, 3, 40, 20, 0, 996, 997, 5, 31, 0, 0, 997, 998, 6, 24, -1, 0, 998, 1135, 1, 0, 0, 0, 999, 1000, 5, 157, 0, 0, 1000, 1001, 3, 40, 20, 0, 1001, 1002, 5, 31, 0, 0, 1002, 1003, 6, 24, -1, 0, 1003, 1135, 1, 0, 0, 0, 1004, 1005, 5, 158, 0, 0, 1005, 1006, 3, 40, 20, 0, 1006, 1007, 5, 31, 0, 0, 1007, 1008, 6, 24, -1, 0, 1008, 1135, 1, 0, 0, 0, 1009, 1010, 5, 159, 0, 0, 1010, 1011, 3, 40, 20, 0, 1011, 1012, 5, 31, 0, 0, 1012, 1013, 6, 24, -1, 0, 1013, 1135, 1, 0, 0, 0, 1014, 1015, 5, 160, 0, 0, 1015, 1016, 3, 40, 20, 0, 1016, 1017, 5, 31, 0, 0, 1017, 1018, 6, 24, -1, 0, 1018, 1135, 1, 0, 0, 0, 1019, 1020, 5, 161, 0, 0, 1020, 1021, 3, 40, 20, 0, 1021, 1022, 5, 31, 0, 0, 1022, 1023, 6, 24, -1, 0, 1023, 1135, 1, 0, 0, 0, 1024, 1025, 5, 162, 0, 0, 1025, 1026, 3, 40, 20, 0, 1026, 1027, 5, 31, 0, 0, 1027, 1028, 6, 24, -1, 0, 1028, 1135, 1, 0, 0, 0, 1029, 1030, 5, 163, 0, 0, 1030, 1031, 3, 40, 20, 0, 1031, 1032, 5, 31, 0, 0, 1032, 1033, 6, 24, -1, 0, 1033, 1135, 1, 0, 0, 0, 1034, 1035, 5, 164, 0, 0, 1035, 1036, 3, 40, 20, 0, 1036, 1037, 5, 31, 0, 0, 1037, 1038, 6, 24, -1, 0, 1038, 1135, 1, 0, 0, 0, 1039, 1040, 5, 165, 0, 0, 1040, 1041, 3, 40, 20, 0, 1041, 1042, 5, 31, 0, 0, 1042, 1043, 6, 24, -1, 0, 1043, 1135, 1, 0, 0, 0, 1044, 1045, 5, 166, 0, 0, 1045, 1046, 3, 40, 20, 0, 1046, 1047, 5, 31, 0, 0, 1047, 1048, 6, 24, -1, 0, 1048, 1135, 1, 0, 0, 0, 1049, 1050, 5, 167, 0, 0, 1050, 1051, 3, 40, 20, 0, 1051, 1052, 5, 31, 0, 0, 1052, 1053, 6, 24, -1, 0, 1053, 1135, 1, 0, 0, 0, 1054, 1055, 5, 168, 0, 0, 1055, 1056, 3, 40, 20, 0, 1056, 1057, 5, 31, 0, 0, 1057, 1058, 6, 24, -1, 0, 1058, 1135, 1, 0, 0, 0, 1059, 1060, 5, 169, 0, 0, 1060, 1061, 3, 40, 20, 0, 1061, 1062, 5, 31, 0, 0, 1062, 1063, 6, 24, -1, 0, 1063, 1135, 1, 0, 0, 0, 1064, 1065, 5, 170, 0, 0, 1065, 1066, 3, 40, 20, 0, 1066, 1067, 5, 31, 0, 0, 1067, 1068, 6, 24, -1, 0, 1068, 1135, 1, 0, 0, 0, 1069, 1070, 5, 171, 0, 0, 1070, 1071, 3, 40, 20, 0, 1071, 1072, 5, 31, 0, 0, 1072, 1073, 6, 24, -1, 0, 1073, 1135, 1, 0, 0, 0, 1074, 1075, 5, 172, 0, 0, 1075, 1076, 3, 40, 20, 0, 1076, 1077, 5, 31, 0, 0, 1077, 1078, 6, 24, -1, 0, 1078, 1135, 1, 0, 0, 0, 1079, 1080, 5, 173, 0, 0, 1080, 1081, 3, 40, 20, 0, 1081, 1082, 5, 31, 0, 0, 1082, 1083, 6, 24, -1, 0, 1083, 1135, 1, 0, 0, 0, 1084, 1085, 5, 174, 0, 0, 1085, 1086, 3, 40, 20, 0, 1086, 1087, 5, 31, 0, 0, 1087, 1088, 6, 24, -1, 0, 1088, 1135, 1, 0, 0, 0, 1089, 1090, 5, 175, 0, 0, 1090, 1091, 3, 40, 20, 0, 1091, 1092, 5, 31, 0, 0, 1092, 1093, 6, 24, -1, 0, 1093, 1135, 1, 0, 0, 0, 1094, 1095, 5, 176, 0, 0, 1095, 1096, 3, 40, 20, 0, 1096, 1097, 5, 31, 0, 0, 1097, 1098, 6, 24, -1, 0, 1098, 1135, 1, 0, 0, 0, 1099, 1100, 5, 177, 0, 0, 1100, 1101, 3, 40, 20, 0, 1101, 1102, 5, 31, 0, 0, 1102, 1103, 6, 24, -1, 0, 1103, 1135, 1, 0, 0, 0, 1104, 1105, 5, 178, 0, 0, 1105, 1106, 3, 40, 20, 0, 1106, 1107, 5, 31, 0, 0, 1107, 1108, 6, 24, -1, 0, 1108, 1135, 1, 0, 0, 0, 1109, 1110, 5, 179, 0, 0, 1110, 1111, 3, 40, 20, 0, 1111, 1112, 5, 31, 0, 0, 1112, 1113, 6, 24, -1, 0, 1113, 1135, 1, 0, 0, 0, 1114, 1115, 5, 180, 0, 0, 1115, 1116, 3, 40, 20, 0, 1116, 1117, 5, 31, 0, 0, 1117, 1118, 6, 24, -1, 0, 1118, 1135, 1, 0, 0, 0, 1119, 1120, 5, 181, 0, 0, 1120, 1121, 3, 40, 20, 0, 1121, 1122, 5, 31, 0, 0, 1122, 1123, 6, 24, -1, 0, 1123, 1135, 1, 0, 0, 0, 1124, 1125, 5, 182, 0, 0, 1125, 1126, 3, 40, 20, 0, 1126, 1127, 5, 31, 0, 0, 1127, 1128, 6, 24, -1, 0, 1128, 1135, 1, 0, 0, 0, 1129, 1130, 5, 183, 0, 0, 1130, 1131, 3, 40, 20, 0, 1131, 1132, 5, 31, 0, 0, 1132, 1133, 6, 24, -1, 0, 1133, 1135, 1, 0, 0, 0, 1134, 446, 1, 0, 0, 0, 1134, 448, 1, 0, 0, 0, 1134, 450, 1, 0, 0, 0, 1134, 452, 1, 0, 0, 0, 1134, 454, 1, 0, 0, 0, 1134, 456, 1, 0, 0, 0, 1134, 458, 1, 0, 0, 0, 1134, 460, 1, 0, 0, 0, 1134, 465, 1, 0, 0, 0, 1134, 469, 1, 0, 0, 0, 1134, 474, 1, 0, 0, 0, 1134, 479, 1, 0, 0, 0, 1134, 484, 1, 0, 0, 0, 1134, 489, 1, 0, 0, 0, 1134, 494, 1, 0, 0, 0, 1134, 499, 1, 0, 0, 0, 1134, 504, 1, 0, 0, 0, 1134, 509, 1, 0, 0, 0, 1134, 514, 1, 0, 0, 0, 1134, 519, 1, 0, 0, 0, 1134, 524, 1, 0, 0, 0, 1134, 529, 1, 0, 0, 0, 1134, 534, 1, 0, 0, 0, 1134, 539, 1, 0, 0, 0, 1134, 544, 1, 0, 0, 0, 1134, 549, 1, 0, 0, 0, 1134, 554, 1, 0, 0, 0, 1134, 559, 1, 0, 0, 0, 1134, 564, 1, 0, 0, 0, 1134, 569, 1, 0, 0, 0, 1134, 574, 1, 0, 0, 0, 1134, 579, 1, 0, 0, 0, 1134, 584, 1, 0, 0, 0, 1134, 589, 1, 0, 0, 0, 1134, 594, 1, 0, 0, 0, 1134, 599, 1, 0, 0, 0, 1134, 604, 1, 0, 0, 0, 1134, 609, 1, 0, 0, 0, 1134, 614, 1, 0, 0, 0, 1134, 619, 1, 0, 0, 0, 1134, 624, 1, 0, 0, 0, 1134, 629, 1, 0, 0, 0, 1134, 634, 1, 0, 0, 0, 1134, 639, 1, 0, 0, 0, 1134, 644, 1, 0, 0, 0, 1134, 649, 1, 0, 0, 0, 1134, 654, 1, 0, 0, 0, 1134, 659, 1, 0, 0, 0, 1134, 664, 1, 0, 0, 0, 1134, 669, 1, 0, 0, 0, 1134, 674, 1, 0, 0, 0, 1134, 679, 1, 0, 0, 0, 1134, 684, 1, 0, 0, 0, 1134, 689, 1, 0, 0, 0, 1134, 694, 1, 0, 0, 0, 1134, 699, 1, 0, 0, 0, 1134, 704, 1, 0, 0, 0, 1134, 709, 1, 0, 0, 0, 1134, 714, 1, 0, 0, 0, 1134, 719, 1, 0, 0, 0, 1134, 724, 1, 0, 0, 0, 1134, 729, 1, 0, 0, 0, 1134, 734, 1, 0, 0, 0, 1134, 739, 1, 0, 0, 0, 1134, 744, 1, 0, 0, 0, 1134, 749, 1, 0, 0, 0, 1134, 754, 1, 0, 0, 0, 1134, 759, 1, 0, 0, 0, 1134, 764, 1, 0, 0, 0, 1134, 769, 1, 0, 0, 0, 1134, 774, 1, 0, 0, 0, 1134, 779, 1, 0, 0, 0, 1134, 784, 1, 0, 0, 0, 1134, 789, 1, 0, 0, 0, 1134, 794, 1, 0, 0, 0, 1134, 799, 1, 0, 0, 0, 1134, 804, 1, 0, 0, 0, 1134, 809, 1, 0, 0, 0, 1134, 814, 1, 0, 0, 0, 1134, 819, 1, 0, 0, 0, 1134, 824, 1, 0, 0, 0, 1134, 829, 1, 0, 0, 0, 1134, 834, 1, 0, 0, 0, 1134, 839, 1, 0, 0, 0, 1134, 844, 1, 0, 0, 0, 1134, 849, 1, 0, 0, 0, 1134, 854, 1, 0, 0, 0, 1134, 859, 1, 0, 0, 0, 1134, 864, 1, 0, 0, 0, 1134, 869, 1, 0, 0, 0, 1134, 874, 1, 0, 0, 0, 1134, 879, 1, 0, 0, 0, 1134, 884, 1, 0, 0, 0, 1134, 889, 1, 0, 0, 0, 1134, 894, 1, 0, 0, 0, 1134, 899, 1, 0, 0, 0, 1134, 904, 1, 0, 0, 0, 1134, 909, 1, 0, 0, 0, 1134, 914, 1, 0, 0, 0, 1134, 919, 1, 0, 0, 0, 1134, 924, 1, 0, 0, 0, 1134, 929, 1, 0, 0, 0, 1134, 934, 1, 0, 0, 0, 1134, 939, 1, 0, 0, 0, 1134, 944, 1, 0, 0, 0, 1134, 949, 1, 0, 0, 0, 1134, 954, 1, 0, 0, 0, 1134, 959, 1, 0, 0, 0, 1134, 964, 1, 0, 0, 0, 1134, 969, 1, 0, 0, 0, 1134, 974, 1, 0, 0, 0, 1134, 979, 1, 0, 0, 0, 1134, 984, 1, 0, 0, 0, 1134, 989, 1, 0, 0, 0, 1134, 994, 1, 0, 0, 0, 1134, 999, 1, 0, 0, 0, 1134, 1004, 1, 0, 0, 0, 1134, 1009, 1, 0, 0, 0, 1134, 1014, 1, 0, 0, 0, 1134, 1019, 1, 0, 0, 0, 1134, 1024, 1, 0, 0, 0, 1134, 1029, 1, 0, 0, 0, 1134, 1034, 1, 0, 0, 0, 1134, 1039, 1, 0, 0, 0, 1134, 1044, 1, 0, 0, 0, 1134, 1049, 1, 0, 0, 0, 1134, 1054, 1, 0, 0, 0, 1134, 1059, 1, 0, 0, 0, 1134, 1064, 1, 0, 0, 0, 1134, 1069, 1, 0, 0, 0, 1134, 1074, 1, 0, 0, 0, 1134, 1079, 1, 0, 0, 0, 1134, 1084, 1, 0, 0, 0, 1134, 1089, 1, 0, 0, 0, 1134, 1094, 1, 0, 0, 0, 1134, 1099, 1, 0, 0, 0, 1134, 1104, 1, 0, 0, 0, 1134, 1109, 1, 0, 0, 0, 1134, 1114, 1, 0, 0, 0, 1134, 1119, 1, 0, 0, 0, 1134, 1124, 1, 0, 0, 0, 1134, 1129, 1, 0, 0, 0, 1135, 49, 1, 0, 0, 0, 1136, 1137, 3, 32, 16, 0, 1137, 1138, 5, 0, 0, 1, 1138, 1139, 6, 25, -1, 0, 1139, 51, 1, 0, 0, 0, 44, 59, 67, 75, 77, 84, 94, 104, 109, 119, 129, 131, 144, 150, 152, 167, 169, 190, 192, 225, 227, 246, 253, 262, 281, 297, 299, 312, 314, 327, 329, 346, 348, 357, 365, 370, 384, 394, 407, 410, 417, 425, 429, 432, 1134] \ No newline at end of file +[4, 1, 193, 1151, 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, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 60, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 66, 8, 1, 11, 1, 12, 1, 67, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 74, 8, 1, 11, 1, 12, 1, 75, 3, 1, 78, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 85, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 95, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 105, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 110, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 120, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 130, 8, 4, 10, 4, 12, 4, 133, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 145, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 151, 8, 5, 10, 5, 12, 5, 154, 9, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 168, 8, 6, 10, 6, 12, 6, 171, 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, 191, 8, 7, 10, 7, 12, 7, 194, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 226, 8, 8, 10, 8, 12, 8, 229, 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, 1, 9, 1, 9, 3, 9, 247, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 252, 8, 9, 10, 9, 12, 9, 255, 9, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 263, 8, 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, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 282, 8, 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, 11, 1, 11, 5, 11, 298, 8, 11, 10, 11, 12, 11, 301, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 313, 8, 12, 10, 12, 12, 12, 316, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 328, 8, 13, 10, 13, 12, 13, 331, 9, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 347, 8, 14, 10, 14, 12, 14, 350, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 358, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 366, 8, 16, 1, 16, 1, 16, 1, 16, 3, 16, 371, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 385, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 5, 19, 393, 8, 19, 10, 19, 12, 19, 396, 9, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 406, 8, 20, 10, 20, 12, 20, 409, 9, 20, 3, 20, 411, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 418, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 426, 8, 21, 5, 21, 428, 8, 21, 10, 21, 12, 21, 431, 9, 21, 3, 21, 433, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 1145, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 0, 0, 26, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 0, 6, 1, 0, 6, 7, 1, 0, 33, 34, 1, 0, 37, 38, 1, 0, 42, 43, 1, 0, 44, 45, 1, 0, 46, 47, 1329, 0, 59, 1, 0, 0, 0, 2, 77, 1, 0, 0, 0, 4, 79, 1, 0, 0, 0, 6, 109, 1, 0, 0, 0, 8, 111, 1, 0, 0, 0, 10, 136, 1, 0, 0, 0, 12, 157, 1, 0, 0, 0, 14, 172, 1, 0, 0, 0, 16, 195, 1, 0, 0, 0, 18, 230, 1, 0, 0, 0, 20, 281, 1, 0, 0, 0, 22, 283, 1, 0, 0, 0, 24, 302, 1, 0, 0, 0, 26, 317, 1, 0, 0, 0, 28, 332, 1, 0, 0, 0, 30, 351, 1, 0, 0, 0, 32, 370, 1, 0, 0, 0, 34, 372, 1, 0, 0, 0, 36, 384, 1, 0, 0, 0, 38, 386, 1, 0, 0, 0, 40, 410, 1, 0, 0, 0, 42, 432, 1, 0, 0, 0, 44, 434, 1, 0, 0, 0, 46, 440, 1, 0, 0, 0, 48, 1144, 1, 0, 0, 0, 50, 1146, 1, 0, 0, 0, 52, 53, 3, 48, 24, 0, 53, 54, 5, 1, 0, 0, 54, 55, 6, 0, -1, 0, 55, 60, 1, 0, 0, 0, 56, 57, 3, 48, 24, 0, 57, 58, 6, 0, -1, 0, 58, 60, 1, 0, 0, 0, 59, 52, 1, 0, 0, 0, 59, 56, 1, 0, 0, 0, 60, 1, 1, 0, 0, 0, 61, 62, 5, 2, 0, 0, 62, 63, 3, 0, 0, 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, 78, 1, 0, 0, 0, 69, 70, 5, 2, 0, 0, 70, 71, 3, 6, 3, 0, 71, 72, 6, 1, -1, 0, 72, 74, 1, 0, 0, 0, 73, 69, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 78, 1, 0, 0, 0, 77, 65, 1, 0, 0, 0, 77, 73, 1, 0, 0, 0, 78, 3, 1, 0, 0, 0, 79, 80, 3, 0, 0, 0, 80, 84, 6, 2, -1, 0, 81, 82, 3, 2, 1, 0, 82, 83, 6, 2, -1, 0, 83, 85, 1, 0, 0, 0, 84, 81, 1, 0, 0, 0, 84, 85, 1, 0, 0, 0, 85, 5, 1, 0, 0, 0, 86, 87, 5, 3, 0, 0, 87, 88, 3, 4, 2, 0, 88, 89, 6, 3, -1, 0, 89, 95, 1, 0, 0, 0, 90, 91, 5, 4, 0, 0, 91, 92, 3, 4, 2, 0, 92, 93, 6, 3, -1, 0, 93, 95, 1, 0, 0, 0, 94, 86, 1, 0, 0, 0, 94, 90, 1, 0, 0, 0, 95, 110, 1, 0, 0, 0, 96, 97, 5, 3, 0, 0, 97, 98, 3, 6, 3, 0, 98, 99, 6, 3, -1, 0, 99, 105, 1, 0, 0, 0, 100, 101, 5, 4, 0, 0, 101, 102, 3, 6, 3, 0, 102, 103, 6, 3, -1, 0, 103, 105, 1, 0, 0, 0, 104, 96, 1, 0, 0, 0, 104, 100, 1, 0, 0, 0, 105, 110, 1, 0, 0, 0, 106, 107, 3, 4, 2, 0, 107, 108, 6, 3, -1, 0, 108, 110, 1, 0, 0, 0, 109, 94, 1, 0, 0, 0, 109, 104, 1, 0, 0, 0, 109, 106, 1, 0, 0, 0, 110, 7, 1, 0, 0, 0, 111, 112, 3, 6, 3, 0, 112, 131, 6, 4, -1, 0, 113, 119, 5, 5, 0, 0, 114, 115, 7, 0, 0, 0, 115, 120, 6, 4, -1, 0, 116, 117, 3, 6, 3, 0, 117, 118, 6, 4, -1, 0, 118, 120, 1, 0, 0, 0, 119, 114, 1, 0, 0, 0, 119, 116, 1, 0, 0, 0, 120, 130, 1, 0, 0, 0, 121, 122, 5, 8, 0, 0, 122, 123, 3, 6, 3, 0, 123, 124, 6, 4, -1, 0, 124, 130, 1, 0, 0, 0, 125, 126, 5, 9, 0, 0, 126, 127, 3, 6, 3, 0, 127, 128, 6, 4, -1, 0, 128, 130, 1, 0, 0, 0, 129, 113, 1, 0, 0, 0, 129, 121, 1, 0, 0, 0, 129, 125, 1, 0, 0, 0, 130, 133, 1, 0, 0, 0, 131, 129, 1, 0, 0, 0, 131, 132, 1, 0, 0, 0, 132, 134, 1, 0, 0, 0, 133, 131, 1, 0, 0, 0, 134, 135, 6, 4, -1, 0, 135, 9, 1, 0, 0, 0, 136, 137, 3, 8, 4, 0, 137, 152, 6, 5, -1, 0, 138, 144, 5, 4, 0, 0, 139, 140, 7, 0, 0, 0, 140, 145, 6, 5, -1, 0, 141, 142, 3, 8, 4, 0, 142, 143, 6, 5, -1, 0, 143, 145, 1, 0, 0, 0, 144, 139, 1, 0, 0, 0, 144, 141, 1, 0, 0, 0, 145, 151, 1, 0, 0, 0, 146, 147, 5, 3, 0, 0, 147, 148, 3, 8, 4, 0, 148, 149, 6, 5, -1, 0, 149, 151, 1, 0, 0, 0, 150, 138, 1, 0, 0, 0, 150, 146, 1, 0, 0, 0, 151, 154, 1, 0, 0, 0, 152, 150, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, 152, 1, 0, 0, 0, 155, 156, 6, 5, -1, 0, 156, 11, 1, 0, 0, 0, 157, 158, 3, 10, 5, 0, 158, 169, 6, 6, -1, 0, 159, 160, 5, 10, 0, 0, 160, 161, 3, 10, 5, 0, 161, 162, 6, 6, -1, 0, 162, 168, 1, 0, 0, 0, 163, 164, 5, 11, 0, 0, 164, 165, 3, 10, 5, 0, 165, 166, 6, 6, -1, 0, 166, 168, 1, 0, 0, 0, 167, 159, 1, 0, 0, 0, 167, 163, 1, 0, 0, 0, 168, 171, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 13, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 172, 173, 3, 12, 6, 0, 173, 192, 6, 7, -1, 0, 174, 175, 5, 12, 0, 0, 175, 176, 3, 12, 6, 0, 176, 177, 6, 7, -1, 0, 177, 191, 1, 0, 0, 0, 178, 179, 5, 13, 0, 0, 179, 180, 3, 12, 6, 0, 180, 181, 6, 7, -1, 0, 181, 191, 1, 0, 0, 0, 182, 183, 5, 14, 0, 0, 183, 184, 3, 12, 6, 0, 184, 185, 6, 7, -1, 0, 185, 191, 1, 0, 0, 0, 186, 187, 5, 15, 0, 0, 187, 188, 3, 12, 6, 0, 188, 189, 6, 7, -1, 0, 189, 191, 1, 0, 0, 0, 190, 174, 1, 0, 0, 0, 190, 178, 1, 0, 0, 0, 190, 182, 1, 0, 0, 0, 190, 186, 1, 0, 0, 0, 191, 194, 1, 0, 0, 0, 192, 190, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 15, 1, 0, 0, 0, 194, 192, 1, 0, 0, 0, 195, 196, 3, 14, 7, 0, 196, 227, 6, 8, -1, 0, 197, 198, 5, 16, 0, 0, 198, 199, 3, 14, 7, 0, 199, 200, 6, 8, -1, 0, 200, 226, 1, 0, 0, 0, 201, 202, 5, 17, 0, 0, 202, 203, 3, 14, 7, 0, 203, 204, 6, 8, -1, 0, 204, 226, 1, 0, 0, 0, 205, 206, 5, 18, 0, 0, 206, 207, 3, 14, 7, 0, 207, 208, 6, 8, -1, 0, 208, 226, 1, 0, 0, 0, 209, 210, 5, 19, 0, 0, 210, 211, 3, 14, 7, 0, 211, 212, 6, 8, -1, 0, 212, 226, 1, 0, 0, 0, 213, 214, 5, 20, 0, 0, 214, 215, 3, 14, 7, 0, 215, 216, 6, 8, -1, 0, 216, 226, 1, 0, 0, 0, 217, 218, 5, 21, 0, 0, 218, 219, 3, 14, 7, 0, 219, 220, 6, 8, -1, 0, 220, 226, 1, 0, 0, 0, 221, 222, 5, 22, 0, 0, 222, 223, 3, 14, 7, 0, 223, 224, 6, 8, -1, 0, 224, 226, 1, 0, 0, 0, 225, 197, 1, 0, 0, 0, 225, 201, 1, 0, 0, 0, 225, 205, 1, 0, 0, 0, 225, 209, 1, 0, 0, 0, 225, 213, 1, 0, 0, 0, 225, 217, 1, 0, 0, 0, 225, 221, 1, 0, 0, 0, 226, 229, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 17, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 230, 231, 3, 16, 8, 0, 231, 253, 6, 9, -1, 0, 232, 233, 5, 23, 0, 0, 233, 247, 6, 9, -1, 0, 234, 235, 5, 24, 0, 0, 235, 247, 6, 9, -1, 0, 236, 237, 5, 25, 0, 0, 237, 247, 6, 9, -1, 0, 238, 239, 5, 26, 0, 0, 239, 247, 6, 9, -1, 0, 240, 241, 5, 27, 0, 0, 241, 247, 6, 9, -1, 0, 242, 243, 5, 28, 0, 0, 243, 247, 6, 9, -1, 0, 244, 245, 5, 29, 0, 0, 245, 247, 6, 9, -1, 0, 246, 232, 1, 0, 0, 0, 246, 234, 1, 0, 0, 0, 246, 236, 1, 0, 0, 0, 246, 238, 1, 0, 0, 0, 246, 240, 1, 0, 0, 0, 246, 242, 1, 0, 0, 0, 246, 244, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 249, 3, 16, 8, 0, 249, 250, 6, 9, -1, 0, 250, 252, 1, 0, 0, 0, 251, 246, 1, 0, 0, 0, 252, 255, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 262, 1, 0, 0, 0, 255, 253, 1, 0, 0, 0, 256, 257, 5, 30, 0, 0, 257, 258, 5, 9, 0, 0, 258, 259, 3, 16, 8, 0, 259, 260, 5, 31, 0, 0, 260, 261, 6, 9, -1, 0, 261, 263, 1, 0, 0, 0, 262, 256, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 264, 1, 0, 0, 0, 264, 265, 6, 9, -1, 0, 265, 19, 1, 0, 0, 0, 266, 267, 5, 32, 0, 0, 267, 268, 3, 18, 9, 0, 268, 269, 6, 10, -1, 0, 269, 282, 1, 0, 0, 0, 270, 271, 5, 32, 0, 0, 271, 272, 3, 20, 10, 0, 272, 273, 6, 10, -1, 0, 273, 282, 1, 0, 0, 0, 274, 275, 5, 32, 0, 0, 275, 276, 3, 34, 17, 0, 276, 277, 6, 10, -1, 0, 277, 282, 1, 0, 0, 0, 278, 279, 3, 18, 9, 0, 279, 280, 6, 10, -1, 0, 280, 282, 1, 0, 0, 0, 281, 266, 1, 0, 0, 0, 281, 270, 1, 0, 0, 0, 281, 274, 1, 0, 0, 0, 281, 278, 1, 0, 0, 0, 282, 21, 1, 0, 0, 0, 283, 284, 3, 20, 10, 0, 284, 299, 6, 11, -1, 0, 285, 286, 5, 33, 0, 0, 286, 287, 3, 20, 10, 0, 287, 288, 6, 11, -1, 0, 288, 298, 1, 0, 0, 0, 289, 290, 5, 34, 0, 0, 290, 291, 3, 20, 10, 0, 291, 292, 6, 11, -1, 0, 292, 298, 1, 0, 0, 0, 293, 294, 7, 1, 0, 0, 294, 295, 3, 34, 17, 0, 295, 296, 6, 11, -1, 0, 296, 298, 1, 0, 0, 0, 297, 285, 1, 0, 0, 0, 297, 289, 1, 0, 0, 0, 297, 293, 1, 0, 0, 0, 298, 301, 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 23, 1, 0, 0, 0, 301, 299, 1, 0, 0, 0, 302, 303, 3, 22, 11, 0, 303, 314, 6, 12, -1, 0, 304, 305, 5, 35, 0, 0, 305, 306, 3, 22, 11, 0, 306, 307, 6, 12, -1, 0, 307, 313, 1, 0, 0, 0, 308, 309, 5, 35, 0, 0, 309, 310, 3, 34, 17, 0, 310, 311, 6, 12, -1, 0, 311, 313, 1, 0, 0, 0, 312, 304, 1, 0, 0, 0, 312, 308, 1, 0, 0, 0, 313, 316, 1, 0, 0, 0, 314, 312, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 25, 1, 0, 0, 0, 316, 314, 1, 0, 0, 0, 317, 318, 3, 24, 12, 0, 318, 329, 6, 13, -1, 0, 319, 320, 5, 36, 0, 0, 320, 321, 3, 24, 12, 0, 321, 322, 6, 13, -1, 0, 322, 328, 1, 0, 0, 0, 323, 324, 5, 36, 0, 0, 324, 325, 3, 34, 17, 0, 325, 326, 6, 13, -1, 0, 326, 328, 1, 0, 0, 0, 327, 319, 1, 0, 0, 0, 327, 323, 1, 0, 0, 0, 328, 331, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 329, 330, 1, 0, 0, 0, 330, 27, 1, 0, 0, 0, 331, 329, 1, 0, 0, 0, 332, 333, 3, 26, 13, 0, 333, 348, 6, 14, -1, 0, 334, 335, 5, 37, 0, 0, 335, 336, 3, 26, 13, 0, 336, 337, 6, 14, -1, 0, 337, 347, 1, 0, 0, 0, 338, 339, 5, 38, 0, 0, 339, 340, 3, 26, 13, 0, 340, 341, 6, 14, -1, 0, 341, 347, 1, 0, 0, 0, 342, 343, 7, 2, 0, 0, 343, 344, 3, 34, 17, 0, 344, 345, 6, 14, -1, 0, 345, 347, 1, 0, 0, 0, 346, 334, 1, 0, 0, 0, 346, 338, 1, 0, 0, 0, 346, 342, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 29, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 351, 352, 3, 28, 14, 0, 352, 357, 6, 15, -1, 0, 353, 354, 5, 39, 0, 0, 354, 355, 3, 30, 15, 0, 355, 356, 6, 15, -1, 0, 356, 358, 1, 0, 0, 0, 357, 353, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 31, 1, 0, 0, 0, 359, 360, 3, 30, 15, 0, 360, 365, 6, 16, -1, 0, 361, 362, 5, 40, 0, 0, 362, 363, 3, 32, 16, 0, 363, 364, 6, 16, -1, 0, 364, 366, 1, 0, 0, 0, 365, 361, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 371, 1, 0, 0, 0, 367, 368, 3, 34, 17, 0, 368, 369, 6, 16, -1, 0, 369, 371, 1, 0, 0, 0, 370, 359, 1, 0, 0, 0, 370, 367, 1, 0, 0, 0, 371, 33, 1, 0, 0, 0, 372, 373, 3, 36, 18, 0, 373, 374, 3, 38, 19, 0, 374, 375, 5, 41, 0, 0, 375, 376, 3, 32, 16, 0, 376, 377, 6, 17, -1, 0, 377, 35, 1, 0, 0, 0, 378, 379, 7, 3, 0, 0, 379, 385, 6, 18, -1, 0, 380, 381, 7, 4, 0, 0, 381, 385, 6, 18, -1, 0, 382, 383, 7, 5, 0, 0, 383, 385, 6, 18, -1, 0, 384, 378, 1, 0, 0, 0, 384, 380, 1, 0, 0, 0, 384, 382, 1, 0, 0, 0, 385, 37, 1, 0, 0, 0, 386, 387, 3, 16, 8, 0, 387, 394, 6, 19, -1, 0, 388, 389, 5, 48, 0, 0, 389, 390, 3, 16, 8, 0, 390, 391, 6, 19, -1, 0, 391, 393, 1, 0, 0, 0, 392, 388, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 397, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 398, 6, 19, -1, 0, 398, 39, 1, 0, 0, 0, 399, 400, 3, 32, 16, 0, 400, 407, 6, 20, -1, 0, 401, 402, 5, 48, 0, 0, 402, 403, 3, 32, 16, 0, 403, 404, 6, 20, -1, 0, 404, 406, 1, 0, 0, 0, 405, 401, 1, 0, 0, 0, 406, 409, 1, 0, 0, 0, 407, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 411, 1, 0, 0, 0, 409, 407, 1, 0, 0, 0, 410, 399, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 41, 1, 0, 0, 0, 412, 413, 3, 32, 16, 0, 413, 414, 6, 21, -1, 0, 414, 418, 1, 0, 0, 0, 415, 416, 7, 0, 0, 0, 416, 418, 6, 21, -1, 0, 417, 412, 1, 0, 0, 0, 417, 415, 1, 0, 0, 0, 418, 429, 1, 0, 0, 0, 419, 425, 5, 48, 0, 0, 420, 421, 3, 32, 16, 0, 421, 422, 6, 21, -1, 0, 422, 426, 1, 0, 0, 0, 423, 424, 7, 0, 0, 0, 424, 426, 6, 21, -1, 0, 425, 420, 1, 0, 0, 0, 425, 423, 1, 0, 0, 0, 426, 428, 1, 0, 0, 0, 427, 419, 1, 0, 0, 0, 428, 431, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 433, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 432, 417, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 43, 1, 0, 0, 0, 434, 435, 3, 32, 16, 0, 435, 436, 6, 22, -1, 0, 436, 437, 5, 49, 0, 0, 437, 438, 3, 32, 16, 0, 438, 439, 6, 22, -1, 0, 439, 45, 1, 0, 0, 0, 440, 441, 3, 32, 16, 0, 441, 442, 6, 23, -1, 0, 442, 443, 5, 41, 0, 0, 443, 444, 3, 32, 16, 0, 444, 445, 6, 23, -1, 0, 445, 47, 1, 0, 0, 0, 446, 447, 5, 50, 0, 0, 447, 1145, 6, 24, -1, 0, 448, 449, 5, 51, 0, 0, 449, 1145, 6, 24, -1, 0, 450, 451, 5, 190, 0, 0, 451, 1145, 6, 24, -1, 0, 452, 453, 5, 187, 0, 0, 453, 1145, 6, 24, -1, 0, 454, 455, 5, 189, 0, 0, 455, 1145, 6, 24, -1, 0, 456, 457, 5, 188, 0, 0, 457, 1145, 6, 24, -1, 0, 458, 459, 5, 191, 0, 0, 459, 1145, 6, 24, -1, 0, 460, 461, 5, 52, 0, 0, 461, 462, 3, 32, 16, 0, 462, 463, 5, 53, 0, 0, 463, 464, 6, 24, -1, 0, 464, 1145, 1, 0, 0, 0, 465, 466, 5, 54, 0, 0, 466, 467, 3, 48, 24, 0, 467, 468, 6, 24, -1, 0, 468, 1145, 1, 0, 0, 0, 469, 470, 5, 55, 0, 0, 470, 471, 3, 40, 20, 0, 471, 472, 5, 56, 0, 0, 472, 473, 6, 24, -1, 0, 473, 1145, 1, 0, 0, 0, 474, 475, 5, 55, 0, 0, 475, 476, 3, 40, 20, 0, 476, 477, 5, 57, 0, 0, 477, 478, 6, 24, -1, 0, 478, 1145, 1, 0, 0, 0, 479, 480, 5, 30, 0, 0, 480, 481, 3, 44, 22, 0, 481, 482, 5, 31, 0, 0, 482, 483, 6, 24, -1, 0, 483, 1145, 1, 0, 0, 0, 484, 485, 5, 55, 0, 0, 485, 486, 3, 44, 22, 0, 486, 487, 5, 31, 0, 0, 487, 488, 6, 24, -1, 0, 488, 1145, 1, 0, 0, 0, 489, 490, 5, 55, 0, 0, 490, 491, 3, 44, 22, 0, 491, 492, 5, 57, 0, 0, 492, 493, 6, 24, -1, 0, 493, 1145, 1, 0, 0, 0, 494, 495, 5, 30, 0, 0, 495, 496, 3, 44, 22, 0, 496, 497, 5, 57, 0, 0, 497, 498, 6, 24, -1, 0, 498, 1145, 1, 0, 0, 0, 499, 500, 5, 30, 0, 0, 500, 501, 3, 32, 16, 0, 501, 502, 5, 31, 0, 0, 502, 503, 6, 24, -1, 0, 503, 1145, 1, 0, 0, 0, 504, 505, 5, 58, 0, 0, 505, 506, 3, 46, 23, 0, 506, 507, 5, 59, 0, 0, 507, 508, 6, 24, -1, 0, 508, 1145, 1, 0, 0, 0, 509, 510, 5, 58, 0, 0, 510, 511, 3, 42, 21, 0, 511, 512, 5, 59, 0, 0, 512, 513, 6, 24, -1, 0, 513, 1145, 1, 0, 0, 0, 514, 515, 5, 60, 0, 0, 515, 516, 3, 40, 20, 0, 516, 517, 5, 31, 0, 0, 517, 518, 6, 24, -1, 0, 518, 1145, 1, 0, 0, 0, 519, 520, 5, 61, 0, 0, 520, 521, 3, 40, 20, 0, 521, 522, 5, 31, 0, 0, 522, 523, 6, 24, -1, 0, 523, 1145, 1, 0, 0, 0, 524, 525, 5, 62, 0, 0, 525, 526, 3, 40, 20, 0, 526, 527, 5, 31, 0, 0, 527, 528, 6, 24, -1, 0, 528, 1145, 1, 0, 0, 0, 529, 530, 5, 63, 0, 0, 530, 531, 3, 40, 20, 0, 531, 532, 5, 31, 0, 0, 532, 533, 6, 24, -1, 0, 533, 1145, 1, 0, 0, 0, 534, 535, 5, 64, 0, 0, 535, 536, 3, 40, 20, 0, 536, 537, 5, 31, 0, 0, 537, 538, 6, 24, -1, 0, 538, 1145, 1, 0, 0, 0, 539, 540, 5, 65, 0, 0, 540, 541, 3, 40, 20, 0, 541, 542, 5, 31, 0, 0, 542, 543, 6, 24, -1, 0, 543, 1145, 1, 0, 0, 0, 544, 545, 5, 66, 0, 0, 545, 546, 3, 40, 20, 0, 546, 547, 5, 31, 0, 0, 547, 548, 6, 24, -1, 0, 548, 1145, 1, 0, 0, 0, 549, 550, 5, 67, 0, 0, 550, 551, 3, 40, 20, 0, 551, 552, 5, 31, 0, 0, 552, 553, 6, 24, -1, 0, 553, 1145, 1, 0, 0, 0, 554, 555, 5, 68, 0, 0, 555, 556, 3, 40, 20, 0, 556, 557, 5, 31, 0, 0, 557, 558, 6, 24, -1, 0, 558, 1145, 1, 0, 0, 0, 559, 560, 5, 69, 0, 0, 560, 561, 3, 40, 20, 0, 561, 562, 5, 31, 0, 0, 562, 563, 6, 24, -1, 0, 563, 1145, 1, 0, 0, 0, 564, 565, 5, 70, 0, 0, 565, 566, 3, 40, 20, 0, 566, 567, 5, 31, 0, 0, 567, 568, 6, 24, -1, 0, 568, 1145, 1, 0, 0, 0, 569, 570, 5, 71, 0, 0, 570, 571, 3, 40, 20, 0, 571, 572, 5, 31, 0, 0, 572, 573, 6, 24, -1, 0, 573, 1145, 1, 0, 0, 0, 574, 575, 5, 72, 0, 0, 575, 576, 3, 40, 20, 0, 576, 577, 5, 31, 0, 0, 577, 578, 6, 24, -1, 0, 578, 1145, 1, 0, 0, 0, 579, 580, 5, 73, 0, 0, 580, 581, 3, 40, 20, 0, 581, 582, 5, 31, 0, 0, 582, 583, 6, 24, -1, 0, 583, 1145, 1, 0, 0, 0, 584, 585, 5, 74, 0, 0, 585, 586, 3, 40, 20, 0, 586, 587, 5, 31, 0, 0, 587, 588, 6, 24, -1, 0, 588, 1145, 1, 0, 0, 0, 589, 590, 5, 75, 0, 0, 590, 591, 3, 40, 20, 0, 591, 592, 5, 31, 0, 0, 592, 593, 6, 24, -1, 0, 593, 1145, 1, 0, 0, 0, 594, 595, 5, 76, 0, 0, 595, 596, 3, 40, 20, 0, 596, 597, 5, 31, 0, 0, 597, 598, 6, 24, -1, 0, 598, 1145, 1, 0, 0, 0, 599, 600, 5, 77, 0, 0, 600, 601, 3, 40, 20, 0, 601, 602, 5, 31, 0, 0, 602, 603, 6, 24, -1, 0, 603, 1145, 1, 0, 0, 0, 604, 605, 5, 78, 0, 0, 605, 606, 3, 40, 20, 0, 606, 607, 5, 31, 0, 0, 607, 608, 6, 24, -1, 0, 608, 1145, 1, 0, 0, 0, 609, 610, 5, 79, 0, 0, 610, 611, 3, 40, 20, 0, 611, 612, 5, 31, 0, 0, 612, 613, 6, 24, -1, 0, 613, 1145, 1, 0, 0, 0, 614, 615, 5, 80, 0, 0, 615, 616, 3, 40, 20, 0, 616, 617, 5, 31, 0, 0, 617, 618, 6, 24, -1, 0, 618, 1145, 1, 0, 0, 0, 619, 620, 5, 81, 0, 0, 620, 621, 3, 40, 20, 0, 621, 622, 5, 31, 0, 0, 622, 623, 6, 24, -1, 0, 623, 1145, 1, 0, 0, 0, 624, 625, 5, 82, 0, 0, 625, 626, 3, 40, 20, 0, 626, 627, 5, 31, 0, 0, 627, 628, 6, 24, -1, 0, 628, 1145, 1, 0, 0, 0, 629, 630, 5, 83, 0, 0, 630, 631, 3, 40, 20, 0, 631, 632, 5, 31, 0, 0, 632, 633, 6, 24, -1, 0, 633, 1145, 1, 0, 0, 0, 634, 635, 5, 84, 0, 0, 635, 636, 3, 40, 20, 0, 636, 637, 5, 31, 0, 0, 637, 638, 6, 24, -1, 0, 638, 1145, 1, 0, 0, 0, 639, 640, 5, 85, 0, 0, 640, 641, 3, 40, 20, 0, 641, 642, 5, 31, 0, 0, 642, 643, 6, 24, -1, 0, 643, 1145, 1, 0, 0, 0, 644, 645, 5, 86, 0, 0, 645, 646, 3, 40, 20, 0, 646, 647, 5, 31, 0, 0, 647, 648, 6, 24, -1, 0, 648, 1145, 1, 0, 0, 0, 649, 650, 5, 87, 0, 0, 650, 651, 3, 40, 20, 0, 651, 652, 5, 31, 0, 0, 652, 653, 6, 24, -1, 0, 653, 1145, 1, 0, 0, 0, 654, 655, 5, 88, 0, 0, 655, 656, 3, 40, 20, 0, 656, 657, 5, 31, 0, 0, 657, 658, 6, 24, -1, 0, 658, 1145, 1, 0, 0, 0, 659, 660, 5, 89, 0, 0, 660, 661, 3, 40, 20, 0, 661, 662, 5, 31, 0, 0, 662, 663, 6, 24, -1, 0, 663, 1145, 1, 0, 0, 0, 664, 665, 5, 90, 0, 0, 665, 666, 3, 40, 20, 0, 666, 667, 5, 31, 0, 0, 667, 668, 6, 24, -1, 0, 668, 1145, 1, 0, 0, 0, 669, 670, 5, 91, 0, 0, 670, 671, 3, 40, 20, 0, 671, 672, 5, 31, 0, 0, 672, 673, 6, 24, -1, 0, 673, 1145, 1, 0, 0, 0, 674, 675, 5, 92, 0, 0, 675, 676, 3, 40, 20, 0, 676, 677, 5, 31, 0, 0, 677, 678, 6, 24, -1, 0, 678, 1145, 1, 0, 0, 0, 679, 680, 5, 93, 0, 0, 680, 681, 3, 40, 20, 0, 681, 682, 5, 31, 0, 0, 682, 683, 6, 24, -1, 0, 683, 1145, 1, 0, 0, 0, 684, 685, 5, 94, 0, 0, 685, 686, 3, 40, 20, 0, 686, 687, 5, 31, 0, 0, 687, 688, 6, 24, -1, 0, 688, 1145, 1, 0, 0, 0, 689, 690, 5, 95, 0, 0, 690, 691, 3, 40, 20, 0, 691, 692, 5, 31, 0, 0, 692, 693, 6, 24, -1, 0, 693, 1145, 1, 0, 0, 0, 694, 695, 5, 96, 0, 0, 695, 696, 3, 40, 20, 0, 696, 697, 5, 31, 0, 0, 697, 698, 6, 24, -1, 0, 698, 1145, 1, 0, 0, 0, 699, 700, 5, 97, 0, 0, 700, 701, 3, 40, 20, 0, 701, 702, 5, 31, 0, 0, 702, 703, 6, 24, -1, 0, 703, 1145, 1, 0, 0, 0, 704, 705, 5, 98, 0, 0, 705, 706, 3, 40, 20, 0, 706, 707, 5, 31, 0, 0, 707, 708, 6, 24, -1, 0, 708, 1145, 1, 0, 0, 0, 709, 710, 5, 99, 0, 0, 710, 711, 3, 40, 20, 0, 711, 712, 5, 31, 0, 0, 712, 713, 6, 24, -1, 0, 713, 1145, 1, 0, 0, 0, 714, 715, 5, 100, 0, 0, 715, 716, 3, 40, 20, 0, 716, 717, 5, 31, 0, 0, 717, 718, 6, 24, -1, 0, 718, 1145, 1, 0, 0, 0, 719, 720, 5, 101, 0, 0, 720, 721, 3, 40, 20, 0, 721, 722, 5, 31, 0, 0, 722, 723, 6, 24, -1, 0, 723, 1145, 1, 0, 0, 0, 724, 725, 5, 102, 0, 0, 725, 726, 3, 40, 20, 0, 726, 727, 5, 31, 0, 0, 727, 728, 6, 24, -1, 0, 728, 1145, 1, 0, 0, 0, 729, 730, 5, 103, 0, 0, 730, 731, 3, 40, 20, 0, 731, 732, 5, 31, 0, 0, 732, 733, 6, 24, -1, 0, 733, 1145, 1, 0, 0, 0, 734, 735, 5, 104, 0, 0, 735, 736, 3, 40, 20, 0, 736, 737, 5, 31, 0, 0, 737, 738, 6, 24, -1, 0, 738, 1145, 1, 0, 0, 0, 739, 740, 5, 105, 0, 0, 740, 741, 3, 40, 20, 0, 741, 742, 5, 31, 0, 0, 742, 743, 6, 24, -1, 0, 743, 1145, 1, 0, 0, 0, 744, 745, 5, 106, 0, 0, 745, 746, 3, 40, 20, 0, 746, 747, 5, 31, 0, 0, 747, 748, 6, 24, -1, 0, 748, 1145, 1, 0, 0, 0, 749, 750, 5, 107, 0, 0, 750, 751, 3, 40, 20, 0, 751, 752, 5, 31, 0, 0, 752, 753, 6, 24, -1, 0, 753, 1145, 1, 0, 0, 0, 754, 755, 5, 108, 0, 0, 755, 756, 3, 40, 20, 0, 756, 757, 5, 31, 0, 0, 757, 758, 6, 24, -1, 0, 758, 1145, 1, 0, 0, 0, 759, 760, 5, 109, 0, 0, 760, 761, 3, 40, 20, 0, 761, 762, 5, 31, 0, 0, 762, 763, 6, 24, -1, 0, 763, 1145, 1, 0, 0, 0, 764, 765, 5, 110, 0, 0, 765, 766, 3, 40, 20, 0, 766, 767, 5, 31, 0, 0, 767, 768, 6, 24, -1, 0, 768, 1145, 1, 0, 0, 0, 769, 770, 5, 111, 0, 0, 770, 771, 3, 40, 20, 0, 771, 772, 5, 31, 0, 0, 772, 773, 6, 24, -1, 0, 773, 1145, 1, 0, 0, 0, 774, 775, 5, 112, 0, 0, 775, 776, 3, 40, 20, 0, 776, 777, 5, 31, 0, 0, 777, 778, 6, 24, -1, 0, 778, 1145, 1, 0, 0, 0, 779, 780, 5, 113, 0, 0, 780, 781, 3, 40, 20, 0, 781, 782, 5, 31, 0, 0, 782, 783, 6, 24, -1, 0, 783, 1145, 1, 0, 0, 0, 784, 785, 5, 114, 0, 0, 785, 786, 3, 40, 20, 0, 786, 787, 5, 31, 0, 0, 787, 788, 6, 24, -1, 0, 788, 1145, 1, 0, 0, 0, 789, 790, 5, 115, 0, 0, 790, 791, 3, 40, 20, 0, 791, 792, 5, 31, 0, 0, 792, 793, 6, 24, -1, 0, 793, 1145, 1, 0, 0, 0, 794, 795, 5, 116, 0, 0, 795, 796, 3, 40, 20, 0, 796, 797, 5, 31, 0, 0, 797, 798, 6, 24, -1, 0, 798, 1145, 1, 0, 0, 0, 799, 800, 5, 117, 0, 0, 800, 801, 3, 40, 20, 0, 801, 802, 5, 31, 0, 0, 802, 803, 6, 24, -1, 0, 803, 1145, 1, 0, 0, 0, 804, 805, 5, 118, 0, 0, 805, 806, 3, 40, 20, 0, 806, 807, 5, 31, 0, 0, 807, 808, 6, 24, -1, 0, 808, 1145, 1, 0, 0, 0, 809, 810, 5, 119, 0, 0, 810, 811, 3, 40, 20, 0, 811, 812, 5, 31, 0, 0, 812, 813, 6, 24, -1, 0, 813, 1145, 1, 0, 0, 0, 814, 815, 5, 120, 0, 0, 815, 816, 3, 40, 20, 0, 816, 817, 5, 31, 0, 0, 817, 818, 6, 24, -1, 0, 818, 1145, 1, 0, 0, 0, 819, 820, 5, 121, 0, 0, 820, 821, 3, 40, 20, 0, 821, 822, 5, 31, 0, 0, 822, 823, 6, 24, -1, 0, 823, 1145, 1, 0, 0, 0, 824, 825, 5, 122, 0, 0, 825, 826, 3, 40, 20, 0, 826, 827, 5, 31, 0, 0, 827, 828, 6, 24, -1, 0, 828, 1145, 1, 0, 0, 0, 829, 830, 5, 123, 0, 0, 830, 831, 3, 40, 20, 0, 831, 832, 5, 31, 0, 0, 832, 833, 6, 24, -1, 0, 833, 1145, 1, 0, 0, 0, 834, 835, 5, 124, 0, 0, 835, 836, 3, 40, 20, 0, 836, 837, 5, 31, 0, 0, 837, 838, 6, 24, -1, 0, 838, 1145, 1, 0, 0, 0, 839, 840, 5, 125, 0, 0, 840, 841, 3, 40, 20, 0, 841, 842, 5, 31, 0, 0, 842, 843, 6, 24, -1, 0, 843, 1145, 1, 0, 0, 0, 844, 845, 5, 126, 0, 0, 845, 846, 3, 40, 20, 0, 846, 847, 5, 31, 0, 0, 847, 848, 6, 24, -1, 0, 848, 1145, 1, 0, 0, 0, 849, 850, 5, 127, 0, 0, 850, 851, 3, 40, 20, 0, 851, 852, 5, 31, 0, 0, 852, 853, 6, 24, -1, 0, 853, 1145, 1, 0, 0, 0, 854, 855, 5, 128, 0, 0, 855, 856, 3, 40, 20, 0, 856, 857, 5, 31, 0, 0, 857, 858, 6, 24, -1, 0, 858, 1145, 1, 0, 0, 0, 859, 860, 5, 129, 0, 0, 860, 861, 3, 40, 20, 0, 861, 862, 5, 31, 0, 0, 862, 863, 6, 24, -1, 0, 863, 1145, 1, 0, 0, 0, 864, 865, 5, 130, 0, 0, 865, 866, 3, 40, 20, 0, 866, 867, 5, 31, 0, 0, 867, 868, 6, 24, -1, 0, 868, 1145, 1, 0, 0, 0, 869, 870, 5, 131, 0, 0, 870, 871, 3, 40, 20, 0, 871, 872, 5, 31, 0, 0, 872, 873, 6, 24, -1, 0, 873, 1145, 1, 0, 0, 0, 874, 875, 5, 132, 0, 0, 875, 876, 3, 40, 20, 0, 876, 877, 5, 31, 0, 0, 877, 878, 6, 24, -1, 0, 878, 1145, 1, 0, 0, 0, 879, 880, 5, 133, 0, 0, 880, 881, 3, 40, 20, 0, 881, 882, 5, 31, 0, 0, 882, 883, 6, 24, -1, 0, 883, 1145, 1, 0, 0, 0, 884, 885, 5, 134, 0, 0, 885, 886, 3, 40, 20, 0, 886, 887, 5, 31, 0, 0, 887, 888, 6, 24, -1, 0, 888, 1145, 1, 0, 0, 0, 889, 890, 5, 135, 0, 0, 890, 891, 3, 40, 20, 0, 891, 892, 5, 31, 0, 0, 892, 893, 6, 24, -1, 0, 893, 1145, 1, 0, 0, 0, 894, 895, 5, 136, 0, 0, 895, 896, 3, 40, 20, 0, 896, 897, 5, 31, 0, 0, 897, 898, 6, 24, -1, 0, 898, 1145, 1, 0, 0, 0, 899, 900, 5, 137, 0, 0, 900, 901, 3, 40, 20, 0, 901, 902, 5, 31, 0, 0, 902, 903, 6, 24, -1, 0, 903, 1145, 1, 0, 0, 0, 904, 905, 5, 138, 0, 0, 905, 906, 3, 40, 20, 0, 906, 907, 5, 31, 0, 0, 907, 908, 6, 24, -1, 0, 908, 1145, 1, 0, 0, 0, 909, 910, 5, 139, 0, 0, 910, 911, 3, 40, 20, 0, 911, 912, 5, 31, 0, 0, 912, 913, 6, 24, -1, 0, 913, 1145, 1, 0, 0, 0, 914, 915, 5, 140, 0, 0, 915, 916, 3, 40, 20, 0, 916, 917, 5, 31, 0, 0, 917, 918, 6, 24, -1, 0, 918, 1145, 1, 0, 0, 0, 919, 920, 5, 141, 0, 0, 920, 921, 3, 40, 20, 0, 921, 922, 5, 31, 0, 0, 922, 923, 6, 24, -1, 0, 923, 1145, 1, 0, 0, 0, 924, 925, 5, 142, 0, 0, 925, 926, 3, 40, 20, 0, 926, 927, 5, 31, 0, 0, 927, 928, 6, 24, -1, 0, 928, 1145, 1, 0, 0, 0, 929, 930, 5, 143, 0, 0, 930, 931, 3, 40, 20, 0, 931, 932, 5, 31, 0, 0, 932, 933, 6, 24, -1, 0, 933, 1145, 1, 0, 0, 0, 934, 935, 5, 144, 0, 0, 935, 936, 3, 40, 20, 0, 936, 937, 5, 31, 0, 0, 937, 938, 6, 24, -1, 0, 938, 1145, 1, 0, 0, 0, 939, 940, 5, 145, 0, 0, 940, 941, 3, 40, 20, 0, 941, 942, 5, 31, 0, 0, 942, 943, 6, 24, -1, 0, 943, 1145, 1, 0, 0, 0, 944, 945, 5, 146, 0, 0, 945, 946, 3, 40, 20, 0, 946, 947, 5, 31, 0, 0, 947, 948, 6, 24, -1, 0, 948, 1145, 1, 0, 0, 0, 949, 950, 5, 147, 0, 0, 950, 951, 3, 40, 20, 0, 951, 952, 5, 31, 0, 0, 952, 953, 6, 24, -1, 0, 953, 1145, 1, 0, 0, 0, 954, 955, 5, 148, 0, 0, 955, 956, 3, 40, 20, 0, 956, 957, 5, 31, 0, 0, 957, 958, 6, 24, -1, 0, 958, 1145, 1, 0, 0, 0, 959, 960, 5, 149, 0, 0, 960, 961, 3, 40, 20, 0, 961, 962, 5, 31, 0, 0, 962, 963, 6, 24, -1, 0, 963, 1145, 1, 0, 0, 0, 964, 965, 5, 150, 0, 0, 965, 966, 3, 40, 20, 0, 966, 967, 5, 31, 0, 0, 967, 968, 6, 24, -1, 0, 968, 1145, 1, 0, 0, 0, 969, 970, 5, 151, 0, 0, 970, 971, 3, 40, 20, 0, 971, 972, 5, 31, 0, 0, 972, 973, 6, 24, -1, 0, 973, 1145, 1, 0, 0, 0, 974, 975, 5, 152, 0, 0, 975, 976, 3, 40, 20, 0, 976, 977, 5, 31, 0, 0, 977, 978, 6, 24, -1, 0, 978, 1145, 1, 0, 0, 0, 979, 980, 5, 153, 0, 0, 980, 981, 3, 40, 20, 0, 981, 982, 5, 31, 0, 0, 982, 983, 6, 24, -1, 0, 983, 1145, 1, 0, 0, 0, 984, 985, 5, 154, 0, 0, 985, 986, 3, 40, 20, 0, 986, 987, 5, 31, 0, 0, 987, 988, 6, 24, -1, 0, 988, 1145, 1, 0, 0, 0, 989, 990, 5, 155, 0, 0, 990, 991, 3, 40, 20, 0, 991, 992, 5, 31, 0, 0, 992, 993, 6, 24, -1, 0, 993, 1145, 1, 0, 0, 0, 994, 995, 5, 156, 0, 0, 995, 996, 3, 40, 20, 0, 996, 997, 5, 31, 0, 0, 997, 998, 6, 24, -1, 0, 998, 1145, 1, 0, 0, 0, 999, 1000, 5, 157, 0, 0, 1000, 1001, 3, 40, 20, 0, 1001, 1002, 5, 31, 0, 0, 1002, 1003, 6, 24, -1, 0, 1003, 1145, 1, 0, 0, 0, 1004, 1005, 5, 158, 0, 0, 1005, 1006, 3, 40, 20, 0, 1006, 1007, 5, 31, 0, 0, 1007, 1008, 6, 24, -1, 0, 1008, 1145, 1, 0, 0, 0, 1009, 1010, 5, 159, 0, 0, 1010, 1011, 3, 40, 20, 0, 1011, 1012, 5, 31, 0, 0, 1012, 1013, 6, 24, -1, 0, 1013, 1145, 1, 0, 0, 0, 1014, 1015, 5, 160, 0, 0, 1015, 1016, 3, 40, 20, 0, 1016, 1017, 5, 31, 0, 0, 1017, 1018, 6, 24, -1, 0, 1018, 1145, 1, 0, 0, 0, 1019, 1020, 5, 161, 0, 0, 1020, 1021, 3, 40, 20, 0, 1021, 1022, 5, 31, 0, 0, 1022, 1023, 6, 24, -1, 0, 1023, 1145, 1, 0, 0, 0, 1024, 1025, 5, 162, 0, 0, 1025, 1026, 3, 40, 20, 0, 1026, 1027, 5, 31, 0, 0, 1027, 1028, 6, 24, -1, 0, 1028, 1145, 1, 0, 0, 0, 1029, 1030, 5, 163, 0, 0, 1030, 1031, 3, 40, 20, 0, 1031, 1032, 5, 31, 0, 0, 1032, 1033, 6, 24, -1, 0, 1033, 1145, 1, 0, 0, 0, 1034, 1035, 5, 164, 0, 0, 1035, 1036, 3, 40, 20, 0, 1036, 1037, 5, 31, 0, 0, 1037, 1038, 6, 24, -1, 0, 1038, 1145, 1, 0, 0, 0, 1039, 1040, 5, 165, 0, 0, 1040, 1041, 3, 40, 20, 0, 1041, 1042, 5, 31, 0, 0, 1042, 1043, 6, 24, -1, 0, 1043, 1145, 1, 0, 0, 0, 1044, 1045, 5, 166, 0, 0, 1045, 1046, 3, 40, 20, 0, 1046, 1047, 5, 31, 0, 0, 1047, 1048, 6, 24, -1, 0, 1048, 1145, 1, 0, 0, 0, 1049, 1050, 5, 167, 0, 0, 1050, 1051, 3, 40, 20, 0, 1051, 1052, 5, 31, 0, 0, 1052, 1053, 6, 24, -1, 0, 1053, 1145, 1, 0, 0, 0, 1054, 1055, 5, 168, 0, 0, 1055, 1056, 3, 40, 20, 0, 1056, 1057, 5, 31, 0, 0, 1057, 1058, 6, 24, -1, 0, 1058, 1145, 1, 0, 0, 0, 1059, 1060, 5, 169, 0, 0, 1060, 1061, 3, 40, 20, 0, 1061, 1062, 5, 31, 0, 0, 1062, 1063, 6, 24, -1, 0, 1063, 1145, 1, 0, 0, 0, 1064, 1065, 5, 170, 0, 0, 1065, 1066, 3, 40, 20, 0, 1066, 1067, 5, 31, 0, 0, 1067, 1068, 6, 24, -1, 0, 1068, 1145, 1, 0, 0, 0, 1069, 1070, 5, 171, 0, 0, 1070, 1071, 3, 40, 20, 0, 1071, 1072, 5, 31, 0, 0, 1072, 1073, 6, 24, -1, 0, 1073, 1145, 1, 0, 0, 0, 1074, 1075, 5, 172, 0, 0, 1075, 1076, 3, 40, 20, 0, 1076, 1077, 5, 31, 0, 0, 1077, 1078, 6, 24, -1, 0, 1078, 1145, 1, 0, 0, 0, 1079, 1080, 5, 173, 0, 0, 1080, 1081, 3, 40, 20, 0, 1081, 1082, 5, 31, 0, 0, 1082, 1083, 6, 24, -1, 0, 1083, 1145, 1, 0, 0, 0, 1084, 1085, 5, 174, 0, 0, 1085, 1086, 3, 40, 20, 0, 1086, 1087, 5, 31, 0, 0, 1087, 1088, 6, 24, -1, 0, 1088, 1145, 1, 0, 0, 0, 1089, 1090, 5, 175, 0, 0, 1090, 1091, 3, 40, 20, 0, 1091, 1092, 5, 31, 0, 0, 1092, 1093, 6, 24, -1, 0, 1093, 1145, 1, 0, 0, 0, 1094, 1095, 5, 176, 0, 0, 1095, 1096, 3, 40, 20, 0, 1096, 1097, 5, 31, 0, 0, 1097, 1098, 6, 24, -1, 0, 1098, 1145, 1, 0, 0, 0, 1099, 1100, 5, 177, 0, 0, 1100, 1101, 3, 40, 20, 0, 1101, 1102, 5, 31, 0, 0, 1102, 1103, 6, 24, -1, 0, 1103, 1145, 1, 0, 0, 0, 1104, 1105, 5, 178, 0, 0, 1105, 1106, 3, 40, 20, 0, 1106, 1107, 5, 31, 0, 0, 1107, 1108, 6, 24, -1, 0, 1108, 1145, 1, 0, 0, 0, 1109, 1110, 5, 179, 0, 0, 1110, 1111, 3, 40, 20, 0, 1111, 1112, 5, 31, 0, 0, 1112, 1113, 6, 24, -1, 0, 1113, 1145, 1, 0, 0, 0, 1114, 1115, 5, 180, 0, 0, 1115, 1116, 3, 40, 20, 0, 1116, 1117, 5, 31, 0, 0, 1117, 1118, 6, 24, -1, 0, 1118, 1145, 1, 0, 0, 0, 1119, 1120, 5, 181, 0, 0, 1120, 1121, 3, 40, 20, 0, 1121, 1122, 5, 31, 0, 0, 1122, 1123, 6, 24, -1, 0, 1123, 1145, 1, 0, 0, 0, 1124, 1125, 5, 182, 0, 0, 1125, 1126, 3, 40, 20, 0, 1126, 1127, 5, 31, 0, 0, 1127, 1128, 6, 24, -1, 0, 1128, 1145, 1, 0, 0, 0, 1129, 1130, 5, 183, 0, 0, 1130, 1131, 3, 40, 20, 0, 1131, 1132, 5, 31, 0, 0, 1132, 1133, 6, 24, -1, 0, 1133, 1145, 1, 0, 0, 0, 1134, 1135, 5, 184, 0, 0, 1135, 1136, 3, 40, 20, 0, 1136, 1137, 5, 31, 0, 0, 1137, 1138, 6, 24, -1, 0, 1138, 1145, 1, 0, 0, 0, 1139, 1140, 5, 185, 0, 0, 1140, 1141, 3, 40, 20, 0, 1141, 1142, 5, 31, 0, 0, 1142, 1143, 6, 24, -1, 0, 1143, 1145, 1, 0, 0, 0, 1144, 446, 1, 0, 0, 0, 1144, 448, 1, 0, 0, 0, 1144, 450, 1, 0, 0, 0, 1144, 452, 1, 0, 0, 0, 1144, 454, 1, 0, 0, 0, 1144, 456, 1, 0, 0, 0, 1144, 458, 1, 0, 0, 0, 1144, 460, 1, 0, 0, 0, 1144, 465, 1, 0, 0, 0, 1144, 469, 1, 0, 0, 0, 1144, 474, 1, 0, 0, 0, 1144, 479, 1, 0, 0, 0, 1144, 484, 1, 0, 0, 0, 1144, 489, 1, 0, 0, 0, 1144, 494, 1, 0, 0, 0, 1144, 499, 1, 0, 0, 0, 1144, 504, 1, 0, 0, 0, 1144, 509, 1, 0, 0, 0, 1144, 514, 1, 0, 0, 0, 1144, 519, 1, 0, 0, 0, 1144, 524, 1, 0, 0, 0, 1144, 529, 1, 0, 0, 0, 1144, 534, 1, 0, 0, 0, 1144, 539, 1, 0, 0, 0, 1144, 544, 1, 0, 0, 0, 1144, 549, 1, 0, 0, 0, 1144, 554, 1, 0, 0, 0, 1144, 559, 1, 0, 0, 0, 1144, 564, 1, 0, 0, 0, 1144, 569, 1, 0, 0, 0, 1144, 574, 1, 0, 0, 0, 1144, 579, 1, 0, 0, 0, 1144, 584, 1, 0, 0, 0, 1144, 589, 1, 0, 0, 0, 1144, 594, 1, 0, 0, 0, 1144, 599, 1, 0, 0, 0, 1144, 604, 1, 0, 0, 0, 1144, 609, 1, 0, 0, 0, 1144, 614, 1, 0, 0, 0, 1144, 619, 1, 0, 0, 0, 1144, 624, 1, 0, 0, 0, 1144, 629, 1, 0, 0, 0, 1144, 634, 1, 0, 0, 0, 1144, 639, 1, 0, 0, 0, 1144, 644, 1, 0, 0, 0, 1144, 649, 1, 0, 0, 0, 1144, 654, 1, 0, 0, 0, 1144, 659, 1, 0, 0, 0, 1144, 664, 1, 0, 0, 0, 1144, 669, 1, 0, 0, 0, 1144, 674, 1, 0, 0, 0, 1144, 679, 1, 0, 0, 0, 1144, 684, 1, 0, 0, 0, 1144, 689, 1, 0, 0, 0, 1144, 694, 1, 0, 0, 0, 1144, 699, 1, 0, 0, 0, 1144, 704, 1, 0, 0, 0, 1144, 709, 1, 0, 0, 0, 1144, 714, 1, 0, 0, 0, 1144, 719, 1, 0, 0, 0, 1144, 724, 1, 0, 0, 0, 1144, 729, 1, 0, 0, 0, 1144, 734, 1, 0, 0, 0, 1144, 739, 1, 0, 0, 0, 1144, 744, 1, 0, 0, 0, 1144, 749, 1, 0, 0, 0, 1144, 754, 1, 0, 0, 0, 1144, 759, 1, 0, 0, 0, 1144, 764, 1, 0, 0, 0, 1144, 769, 1, 0, 0, 0, 1144, 774, 1, 0, 0, 0, 1144, 779, 1, 0, 0, 0, 1144, 784, 1, 0, 0, 0, 1144, 789, 1, 0, 0, 0, 1144, 794, 1, 0, 0, 0, 1144, 799, 1, 0, 0, 0, 1144, 804, 1, 0, 0, 0, 1144, 809, 1, 0, 0, 0, 1144, 814, 1, 0, 0, 0, 1144, 819, 1, 0, 0, 0, 1144, 824, 1, 0, 0, 0, 1144, 829, 1, 0, 0, 0, 1144, 834, 1, 0, 0, 0, 1144, 839, 1, 0, 0, 0, 1144, 844, 1, 0, 0, 0, 1144, 849, 1, 0, 0, 0, 1144, 854, 1, 0, 0, 0, 1144, 859, 1, 0, 0, 0, 1144, 864, 1, 0, 0, 0, 1144, 869, 1, 0, 0, 0, 1144, 874, 1, 0, 0, 0, 1144, 879, 1, 0, 0, 0, 1144, 884, 1, 0, 0, 0, 1144, 889, 1, 0, 0, 0, 1144, 894, 1, 0, 0, 0, 1144, 899, 1, 0, 0, 0, 1144, 904, 1, 0, 0, 0, 1144, 909, 1, 0, 0, 0, 1144, 914, 1, 0, 0, 0, 1144, 919, 1, 0, 0, 0, 1144, 924, 1, 0, 0, 0, 1144, 929, 1, 0, 0, 0, 1144, 934, 1, 0, 0, 0, 1144, 939, 1, 0, 0, 0, 1144, 944, 1, 0, 0, 0, 1144, 949, 1, 0, 0, 0, 1144, 954, 1, 0, 0, 0, 1144, 959, 1, 0, 0, 0, 1144, 964, 1, 0, 0, 0, 1144, 969, 1, 0, 0, 0, 1144, 974, 1, 0, 0, 0, 1144, 979, 1, 0, 0, 0, 1144, 984, 1, 0, 0, 0, 1144, 989, 1, 0, 0, 0, 1144, 994, 1, 0, 0, 0, 1144, 999, 1, 0, 0, 0, 1144, 1004, 1, 0, 0, 0, 1144, 1009, 1, 0, 0, 0, 1144, 1014, 1, 0, 0, 0, 1144, 1019, 1, 0, 0, 0, 1144, 1024, 1, 0, 0, 0, 1144, 1029, 1, 0, 0, 0, 1144, 1034, 1, 0, 0, 0, 1144, 1039, 1, 0, 0, 0, 1144, 1044, 1, 0, 0, 0, 1144, 1049, 1, 0, 0, 0, 1144, 1054, 1, 0, 0, 0, 1144, 1059, 1, 0, 0, 0, 1144, 1064, 1, 0, 0, 0, 1144, 1069, 1, 0, 0, 0, 1144, 1074, 1, 0, 0, 0, 1144, 1079, 1, 0, 0, 0, 1144, 1084, 1, 0, 0, 0, 1144, 1089, 1, 0, 0, 0, 1144, 1094, 1, 0, 0, 0, 1144, 1099, 1, 0, 0, 0, 1144, 1104, 1, 0, 0, 0, 1144, 1109, 1, 0, 0, 0, 1144, 1114, 1, 0, 0, 0, 1144, 1119, 1, 0, 0, 0, 1144, 1124, 1, 0, 0, 0, 1144, 1129, 1, 0, 0, 0, 1144, 1134, 1, 0, 0, 0, 1144, 1139, 1, 0, 0, 0, 1145, 49, 1, 0, 0, 0, 1146, 1147, 3, 32, 16, 0, 1147, 1148, 5, 0, 0, 1, 1148, 1149, 6, 25, -1, 0, 1149, 51, 1, 0, 0, 0, 44, 59, 67, 75, 77, 84, 94, 104, 109, 119, 129, 131, 144, 150, 152, 167, 169, 190, 192, 225, 227, 246, 253, 262, 281, 297, 299, 312, 314, 327, 329, 346, 348, 357, 365, 370, 384, 394, 407, 410, 417, 425, 429, 432, 1144] \ No newline at end of file diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens b/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens index d3b5bc330..5539119a5 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens +++ b/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens @@ -181,14 +181,16 @@ T__179=180 T__180=181 T__181=182 T__182=183 -NEWLINE=184 -NUMBER=185 -SPECIALSET=186 -BOOLEAN=187 -NAN=188 -VARIABLE=189 -COMMENT=190 -WS=191 +T__183=184 +T__184=185 +NEWLINE=186 +NUMBER=187 +SPECIALSET=188 +BOOLEAN=189 +NAN=190 +VARIABLE=191 +COMMENT=192 +WS=193 '!'=1 '^'=2 '-'=3 @@ -362,14 +364,16 @@ WS=191 'erfi('=171 'Ei('=172 'li('=173 -'Si('=174 -'Ci('=175 -'Shi('=176 -'Chi('=177 -'trunc('=178 -'conjugate('=179 -'domain('=180 -'piecewise('=181 -'apply('=182 -'lambda('=183 -'NaN'=188 +'polygamma('=174 +'digamma('=175 +'Si('=176 +'Ci('=177 +'Shi('=178 +'Chi('=179 +'trunc('=180 +'conjugate('=181 +'domain('=182 +'piecewise('=183 +'apply('=184 +'lambda('=185 +'NaN'=190 diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs index b99beaf4f..feb40f2c2 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs +++ b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs @@ -61,8 +61,9 @@ public const int T__161=162, T__162=163, T__163=164, T__164=165, T__165=166, T__166=167, T__167=168, T__168=169, T__169=170, T__170=171, T__171=172, T__172=173, T__173=174, T__174=175, T__175=176, T__176=177, T__177=178, T__178=179, - T__179=180, T__180=181, T__181=182, T__182=183, NEWLINE=184, NUMBER=185, - SPECIALSET=186, BOOLEAN=187, NAN=188, VARIABLE=189, COMMENT=190, WS=191; + T__179=180, T__180=181, T__181=182, T__182=183, T__183=184, T__184=185, + NEWLINE=186, NUMBER=187, SPECIALSET=188, BOOLEAN=189, NAN=190, VARIABLE=191, + COMMENT=192, WS=193; public static string[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -96,8 +97,8 @@ public const int "T__161", "T__162", "T__163", "T__164", "T__165", "T__166", "T__167", "T__168", "T__169", "T__170", "T__171", "T__172", "T__173", "T__174", "T__175", "T__176", "T__177", "T__178", "T__179", "T__180", "T__181", - "T__182", "NEWLINE", "EXPONENT", "NUMBER", "SPECIALSET", "BOOLEAN", "NAN", - "VARIABLE", "COMMENT", "WS" + "T__182", "T__183", "T__184", "NEWLINE", "EXPONENT", "NUMBER", "SPECIALSET", + "BOOLEAN", "NAN", "VARIABLE", "COMMENT", "WS" }; @@ -144,8 +145,9 @@ public AngouriMathLexer(ICharStream input, TextWriter output, TextWriter errorOu "'preimage('", "'floor('", "'ceil('", "'ceiling('", "'round('", "'min('", "'max('", "'argmax('", "'argmin('", "'gcd('", "'lcm('", "'binomial('", "'iverson('", "'aleph('", "'erf('", "'erfc('", "'erfi('", "'Ei('", "'li('", - "'Si('", "'Ci('", "'Shi('", "'Chi('", "'trunc('", "'conjugate('", "'domain('", - "'piecewise('", "'apply('", "'lambda('", null, null, null, null, "'NaN'" + "'polygamma('", "'digamma('", "'Si('", "'Ci('", "'Shi('", "'Chi('", "'trunc('", + "'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, @@ -163,8 +165,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); @@ -194,7 +196,7 @@ static AngouriMathLexer() { } } private static int[] _serializedATN = { - 4,0,191,1635,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,193,1659,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, @@ -223,108 +225,110 @@ static AngouriMathLexer() { 7,170,2,171,7,171,2,172,7,172,2,173,7,173,2,174,7,174,2,175,7,175,2,176, 7,176,2,177,7,177,2,178,7,178,2,179,7,179,2,180,7,180,2,181,7,181,2,182, 7,182,2,183,7,183,2,184,7,184,2,185,7,185,2,186,7,186,2,187,7,187,2,188, - 7,188,2,189,7,189,2,190,7,190,2,191,7,191,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,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1,8,1,8,1,9,1,9,1, - 9,1,9,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,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13, - 1,13,1,13,1,14,1,14,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16, - 1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,20, - 1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,22,1,22,1,22,1,23,1,23, - 1,23,1,24,1,24,1,25,1,25,1,26,1,26,1,27,1,27,1,27,1,28,1,28,1,29,1,29, - 1,30,1,30,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,33,1,33,1,34,1,34, - 1,34,1,34,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,37, - 1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39, - 1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,43,1,43,1,43, - 1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,45, - 1,45,1,46,1,46,1,47,1,47,1,48,1,48,1,49,1,49,1,49,1,49,1,50,1,50,1,50, - 1,50,1,51,1,51,1,51,1,52,1,52,1,52,1,53,1,53,1,54,1,54,1,55,1,55,1,55, - 1,56,1,56,1,57,1,57,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,61,1,62,1,62,1,62,1,62, - 1,62,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,65, - 1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,68, - 1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70, - 1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,73,1,73, - 1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75, - 1,75,1,76,1,76,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,78,1,78,1,79,1,79,1,79, - 1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,80,1,80, - 1,80,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82, - 1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1,83,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,86,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,88,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,91,1,92,1,92,1,92,1,92,1,92, - 1,92,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95, - 1,95,1,96,1,96,1,96,1,96,1,96,1,96,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,99,1,99,1,99,1,99,1,99,1,99,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,103,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,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,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,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,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,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,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,119,1,119,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,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,122,1,122,1,122, - 1,122,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,125,1,125,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,127,1,128,1,128,1,128,1,128,1,128,1,128,1,128, - 1,128,1,128,1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,130, - 1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,131,1,131, - 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,132,1,132,1,132,1,132,1,133,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,134,1,134,1,134,1,135, - 1,135,1,135,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,136,1,136,1,137,1,137,1,137,1,137,1,137,1,137,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,138, - 1,138,1,138,1,138,1,139,1,139,1,139,1,139,1,139,1,140,1,140,1,140,1,140, - 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,141,1,142,1,142,1,142,1,142,1,142,1,143,1,143,1,143,1,143,1,143,1,143, - 1,144,1,144,1,144,1,144,1,144,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,147,1,147,1,147,1,147,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,149,1,149, - 1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,150,1,150,1,150,1,150, - 1,150,1,150,1,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,152,1,152,1,152,1,152,1,152,1,152,1,152, - 1,152,1,152,1,152,1,152,1,152,1,153,1,153,1,153,1,153,1,153,1,153,1,153, - 1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,155,1,155, - 1,155,1,155,1,155,1,155,1,155,1,156,1,156,1,156,1,156,1,156,1,156,1,157, - 1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,158,1,158,1,158,1,158, - 1,158,1,158,1,158,1,159,1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,160, - 1,160,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,162,1,162,1,162, - 1,162,1,162,1,162,1,162,1,162,1,163,1,163,1,163,1,163,1,163,1,164,1,164, - 1,164,1,164,1,164,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165, - 1,165,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,167,1,167, - 1,167,1,167,1,167,1,167,1,167,1,168,1,168,1,168,1,168,1,168,1,169,1,169, - 1,169,1,169,1,169,1,169,1,170,1,170,1,170,1,170,1,170,1,170,1,171,1,171, - 1,171,1,171,1,172,1,172,1,172,1,172,1,173,1,173,1,173,1,173,1,174,1,174, - 1,174,1,174,1,175,1,175,1,175,1,175,1,175,1,176,1,176,1,176,1,176,1,176, - 1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,178,1,178,1,178,1,178,1,178, - 1,178,1,178,1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,179,1,179, - 1,179,1,179,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180, - 1,180,1,181,1,181,1,181,1,181,1,181,1,181,1,181,1,182,1,182,1,182,1,182, - 1,182,1,182,1,182,1,182,1,183,3,183,1489,8,183,1,183,4,183,1492,8,183, - 11,183,12,183,1493,1,183,1,183,1,184,1,184,3,184,1500,8,184,1,184,4,184, - 1503,8,184,11,184,12,184,1504,1,185,4,185,1508,8,185,11,185,12,185,1509, - 1,185,1,185,5,185,1514,8,185,10,185,12,185,1517,9,185,1,185,3,185,1520, - 8,185,1,185,3,185,1523,8,185,1,185,3,185,1526,8,185,1,185,4,185,1529,8, - 185,11,185,12,185,1530,1,185,3,185,1534,8,185,1,185,3,185,1537,8,185,1, - 185,3,185,1540,8,185,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1, - 186,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186,3,186,1560,8, - 186,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187, - 1,187,1,187,1,187,1,187,1,187,1,187,1,187,3,187,1580,8,187,1,188,1,188, - 1,188,1,188,1,189,4,189,1587,8,189,11,189,12,189,1588,1,189,1,189,4,189, - 1593,8,189,11,189,12,189,1594,3,189,1597,8,189,1,190,1,190,1,190,1,190, - 5,190,1603,8,190,10,190,12,190,1606,9,190,1,190,3,190,1609,8,190,1,190, - 3,190,1612,8,190,1,190,1,190,1,190,1,190,5,190,1618,8,190,10,190,12,190, - 1621,9,190,1,190,1,190,3,190,1625,8,190,1,190,1,190,1,191,4,191,1630,8, - 191,11,191,12,191,1631,1,191,1,191,1,1619,0,192,1,1,3,2,5,3,7,4,9,5,11, + 7,188,2,189,7,189,2,190,7,190,2,191,7,191,2,192,7,192,2,193,7,193,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,5,1,5,1,6,1,6,1,7,1,7,1, + 8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,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,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1, + 13,1,13,1,13,1,13,1,13,1,13,1,13,1,14,1,14,1,15,1,15,1,15,1,16,1,16,1, + 16,1,16,1,16,1,16,1,16,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1, + 18,1,18,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1, + 22,1,22,1,22,1,23,1,23,1,23,1,24,1,24,1,25,1,25,1,26,1,26,1,27,1,27,1, + 27,1,28,1,28,1,29,1,29,1,30,1,30,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1, + 32,1,33,1,33,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1, + 36,1,36,1,36,1,36,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1, + 38,1,38,1,39,1,39,1,39,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1, + 42,1,42,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,45,1, + 45,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,47,1,47,1,48,1,48,1,49,1,49,1, + 49,1,49,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,52,1,52,1,52,1,53,1,53,1, + 54,1,54,1,55,1,55,1,55,1,56,1,56,1,57,1,57,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, + 61,1,62,1,62,1,62,1,62,1,62,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,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,67,1, + 67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1, + 70,1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1, + 72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,74,1, + 74,1,75,1,75,1,75,1,75,1,75,1,76,1,76,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, + 78,1,78,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1, + 80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1, + 81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1, + 83,1,83,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,86,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1, + 88,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,91,1, + 92,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1, + 94,1,94,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1,96,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,99,1,99,1,99,1,99,1, + 99,1,99,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,103,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,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,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,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,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,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,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,119,1,119,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,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,122,1,122,1,122,1,122,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,125,1,125,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,127,1,128,1,128, + 1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,129,1,129,1,129,1,129, + 1,129,1,129,1,129,1,129,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130, + 1,130,1,130,1,130,1,131,1,131,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,132,1,132,1,132,1,132,1,133,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,134,1,134,1,134,1,135,1,135,1,135,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,136,1,136,1,137,1,137,1,137, + 1,137,1,137,1,137,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,138,1,138,1,138,1,138,1,139,1,139,1,139,1,139, + 1,139,1,140,1,140,1,140,1,140,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,141,1,142,1,142,1,142,1,142,1,142,1,143, + 1,143,1,143,1,143,1,143,1,143,1,144,1,144,1,144,1,144,1,144,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,147,1,147, + 1,147,1,147,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,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149, + 1,149,1,150,1,150,1,150,1,150,1,150,1,150,1,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,152,1,152, + 1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,153,1,153, + 1,153,1,153,1,153,1,153,1,153,1,154,1,154,1,154,1,154,1,154,1,154,1,154, + 1,154,1,154,1,154,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,156,1,156, + 1,156,1,156,1,156,1,156,1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157, + 1,157,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,159,1,159,1,159,1,159, + 1,159,1,160,1,160,1,160,1,160,1,160,1,161,1,161,1,161,1,161,1,161,1,161, + 1,161,1,161,1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,162,1,163,1,163, + 1,163,1,163,1,163,1,164,1,164,1,164,1,164,1,164,1,165,1,165,1,165,1,165, + 1,165,1,165,1,165,1,165,1,165,1,165,1,166,1,166,1,166,1,166,1,166,1,166, + 1,166,1,166,1,166,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,168,1,168, + 1,168,1,168,1,168,1,169,1,169,1,169,1,169,1,169,1,169,1,170,1,170,1,170, + 1,170,1,170,1,170,1,171,1,171,1,171,1,171,1,172,1,172,1,172,1,172,1,173, + 1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,174,1,174, + 1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,175,1,175,1,175,1,175,1,176, + 1,176,1,176,1,176,1,177,1,177,1,177,1,177,1,177,1,178,1,178,1,178,1,178, + 1,178,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,180,1,180,1,180,1,180, + 1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,181,1,181,1,181,1,181,1,181, + 1,181,1,181,1,181,1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,182, + 1,182,1,182,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,184,1,184,1,184, + 1,184,1,184,1,184,1,184,1,184,1,185,3,185,1513,8,185,1,185,4,185,1516, + 8,185,11,185,12,185,1517,1,185,1,185,1,186,1,186,3,186,1524,8,186,1,186, + 4,186,1527,8,186,11,186,12,186,1528,1,187,4,187,1532,8,187,11,187,12,187, + 1533,1,187,1,187,5,187,1538,8,187,10,187,12,187,1541,9,187,1,187,3,187, + 1544,8,187,1,187,3,187,1547,8,187,1,187,3,187,1550,8,187,1,187,4,187,1553, + 8,187,11,187,12,187,1554,1,187,3,187,1558,8,187,1,187,3,187,1561,8,187, + 1,187,3,187,1564,8,187,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188, + 1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,3,188,1584, + 8,188,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189,1,189, + 1,189,1,189,1,189,1,189,1,189,1,189,1,189,3,189,1604,8,189,1,190,1,190, + 1,190,1,190,1,191,4,191,1611,8,191,11,191,12,191,1612,1,191,1,191,4,191, + 1617,8,191,11,191,12,191,1618,3,191,1621,8,191,1,192,1,192,1,192,1,192, + 5,192,1627,8,192,10,192,12,192,1630,9,192,1,192,3,192,1633,8,192,1,192, + 3,192,1636,8,192,1,192,1,192,1,192,1,192,5,192,1642,8,192,10,192,12,192, + 1645,9,192,1,192,1,192,3,192,1649,8,192,1,192,1,192,1,193,4,193,1654,8, + 193,11,193,12,193,1655,1,193,1,193,1,1643,0,194,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, @@ -343,419 +347,426 @@ static AngouriMathLexer() { 315,158,317,159,319,160,321,161,323,162,325,163,327,164,329,165,331,166, 333,167,335,168,337,169,339,170,341,171,343,172,345,173,347,174,349,175, 351,176,353,177,355,178,357,179,359,180,361,181,363,182,365,183,367,184, - 369,0,371,185,373,186,375,187,377,188,379,189,381,190,383,191,1,0,6,2, - 0,69,69,101,101,2,0,43,43,45,45,5,0,65,90,97,122,880,1279,7936,8191,8495, - 8495,5,0,48,57,65,90,97,122,880,1279,7936,8191,2,0,10,10,13,13,2,0,9,9, - 32,32,1666,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,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,0,313,1,0,0,0,0,315,1,0,0,0,0,317,1,0,0,0, - 0,319,1,0,0,0,0,321,1,0,0,0,0,323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0, - 0,329,1,0,0,0,0,331,1,0,0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0, - 0,339,1,0,0,0,0,341,1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0, - 0,349,1,0,0,0,0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0,357,1,0,0,0, - 0,359,1,0,0,0,0,361,1,0,0,0,0,363,1,0,0,0,0,365,1,0,0,0,0,367,1,0,0,0, - 0,371,1,0,0,0,0,373,1,0,0,0,0,375,1,0,0,0,0,377,1,0,0,0,0,379,1,0,0,0, - 0,381,1,0,0,0,0,383,1,0,0,0,1,385,1,0,0,0,3,387,1,0,0,0,5,389,1,0,0,0, - 7,391,1,0,0,0,9,393,1,0,0,0,11,395,1,0,0,0,13,399,1,0,0,0,15,401,1,0,0, - 0,17,403,1,0,0,0,19,407,1,0,0,0,21,417,1,0,0,0,23,420,1,0,0,0,25,426,1, - 0,0,0,27,429,1,0,0,0,29,441,1,0,0,0,31,443,1,0,0,0,33,446,1,0,0,0,35,453, - 1,0,0,0,37,455,1,0,0,0,39,464,1,0,0,0,41,466,1,0,0,0,43,474,1,0,0,0,45, - 476,1,0,0,0,47,479,1,0,0,0,49,482,1,0,0,0,51,484,1,0,0,0,53,486,1,0,0, - 0,55,488,1,0,0,0,57,491,1,0,0,0,59,493,1,0,0,0,61,495,1,0,0,0,63,497,1, - 0,0,0,65,501,1,0,0,0,67,505,1,0,0,0,69,507,1,0,0,0,71,511,1,0,0,0,73,514, - 1,0,0,0,75,522,1,0,0,0,77,525,1,0,0,0,79,534,1,0,0,0,81,537,1,0,0,0,83, - 539,1,0,0,0,85,546,1,0,0,0,87,548,1,0,0,0,89,556,1,0,0,0,91,559,1,0,0, - 0,93,566,1,0,0,0,95,568,1,0,0,0,97,570,1,0,0,0,99,572,1,0,0,0,101,576, - 1,0,0,0,103,580,1,0,0,0,105,583,1,0,0,0,107,586,1,0,0,0,109,588,1,0,0, - 0,111,590,1,0,0,0,113,593,1,0,0,0,115,595,1,0,0,0,117,597,1,0,0,0,119, - 599,1,0,0,0,121,604,1,0,0,0,123,611,1,0,0,0,125,617,1,0,0,0,127,622,1, - 0,0,0,129,628,1,0,0,0,131,634,1,0,0,0,133,639,1,0,0,0,135,643,1,0,0,0, - 137,648,1,0,0,0,139,653,1,0,0,0,141,658,1,0,0,0,143,663,1,0,0,0,145,670, - 1,0,0,0,147,675,1,0,0,0,149,680,1,0,0,0,151,687,1,0,0,0,153,692,1,0,0, - 0,155,700,1,0,0,0,157,708,1,0,0,0,159,716,1,0,0,0,161,726,1,0,0,0,163, - 734,1,0,0,0,165,744,1,0,0,0,167,752,1,0,0,0,169,758,1,0,0,0,171,764,1, - 0,0,0,173,770,1,0,0,0,175,776,1,0,0,0,177,784,1,0,0,0,179,790,1,0,0,0, - 181,798,1,0,0,0,183,804,1,0,0,0,185,812,1,0,0,0,187,818,1,0,0,0,189,822, - 1,0,0,0,191,828,1,0,0,0,193,832,1,0,0,0,195,838,1,0,0,0,197,842,1,0,0, - 0,199,850,1,0,0,0,201,856,1,0,0,0,203,861,1,0,0,0,205,867,1,0,0,0,207, - 872,1,0,0,0,209,880,1,0,0,0,211,886,1,0,0,0,213,893,1,0,0,0,215,901,1, - 0,0,0,217,907,1,0,0,0,219,916,1,0,0,0,221,923,1,0,0,0,223,931,1,0,0,0, - 225,937,1,0,0,0,227,946,1,0,0,0,229,953,1,0,0,0,231,961,1,0,0,0,233,967, - 1,0,0,0,235,976,1,0,0,0,237,983,1,0,0,0,239,991,1,0,0,0,241,1000,1,0,0, - 0,243,1010,1,0,0,0,245,1017,1,0,0,0,247,1028,1,0,0,0,249,1035,1,0,0,0, - 251,1043,1,0,0,0,253,1050,1,0,0,0,255,1059,1,0,0,0,257,1068,1,0,0,0,259, - 1078,1,0,0,0,261,1086,1,0,0,0,263,1097,1,0,0,0,265,1104,1,0,0,0,267,1115, - 1,0,0,0,269,1122,1,0,0,0,271,1134,1,0,0,0,273,1144,1,0,0,0,275,1151,1, - 0,0,0,277,1162,1,0,0,0,279,1174,1,0,0,0,281,1179,1,0,0,0,283,1188,1,0, - 0,0,285,1196,1,0,0,0,287,1201,1,0,0,0,289,1207,1,0,0,0,291,1212,1,0,0, - 0,293,1217,1,0,0,0,295,1224,1,0,0,0,297,1235,1,0,0,0,299,1241,1,0,0,0, - 301,1251,1,0,0,0,303,1258,1,0,0,0,305,1272,1,0,0,0,307,1284,1,0,0,0,309, - 1291,1,0,0,0,311,1301,1,0,0,0,313,1308,1,0,0,0,315,1314,1,0,0,0,317,1323, - 1,0,0,0,319,1330,1,0,0,0,321,1335,1,0,0,0,323,1340,1,0,0,0,325,1348,1, - 0,0,0,327,1356,1,0,0,0,329,1361,1,0,0,0,331,1366,1,0,0,0,333,1376,1,0, - 0,0,335,1385,1,0,0,0,337,1392,1,0,0,0,339,1397,1,0,0,0,341,1403,1,0,0, - 0,343,1409,1,0,0,0,345,1413,1,0,0,0,347,1417,1,0,0,0,349,1421,1,0,0,0, - 351,1425,1,0,0,0,353,1430,1,0,0,0,355,1435,1,0,0,0,357,1442,1,0,0,0,359, - 1453,1,0,0,0,361,1461,1,0,0,0,363,1472,1,0,0,0,365,1479,1,0,0,0,367,1491, - 1,0,0,0,369,1497,1,0,0,0,371,1539,1,0,0,0,373,1559,1,0,0,0,375,1579,1, - 0,0,0,377,1581,1,0,0,0,379,1586,1,0,0,0,381,1624,1,0,0,0,383,1629,1,0, - 0,0,385,386,5,33,0,0,386,2,1,0,0,0,387,388,5,94,0,0,388,4,1,0,0,0,389, - 390,5,45,0,0,390,6,1,0,0,0,391,392,5,43,0,0,392,8,1,0,0,0,393,394,5,42, - 0,0,394,10,1,0,0,0,395,396,5,46,0,0,396,397,5,46,0,0,397,398,5,46,0,0, - 398,12,1,0,0,0,399,400,5,8230,0,0,400,14,1,0,0,0,401,402,5,47,0,0,402, - 16,1,0,0,0,403,404,5,109,0,0,404,405,5,111,0,0,405,406,5,100,0,0,406,18, - 1,0,0,0,407,408,5,105,0,0,408,409,5,110,0,0,409,410,5,116,0,0,410,411, - 5,101,0,0,411,412,5,114,0,0,412,413,5,115,0,0,413,414,5,101,0,0,414,415, - 5,99,0,0,415,416,5,116,0,0,416,20,1,0,0,0,417,418,5,47,0,0,418,419,5,92, - 0,0,419,22,1,0,0,0,420,421,5,117,0,0,421,422,5,110,0,0,422,423,5,105,0, - 0,423,424,5,116,0,0,424,425,5,101,0,0,425,24,1,0,0,0,426,427,5,92,0,0, - 427,428,5,47,0,0,428,26,1,0,0,0,429,430,5,115,0,0,430,431,5,101,0,0,431, - 432,5,116,0,0,432,433,5,115,0,0,433,434,5,117,0,0,434,435,5,98,0,0,435, - 436,5,116,0,0,436,437,5,114,0,0,437,438,5,97,0,0,438,439,5,99,0,0,439, - 440,5,116,0,0,440,28,1,0,0,0,441,442,5,92,0,0,442,30,1,0,0,0,443,444,5, - 105,0,0,444,445,5,110,0,0,445,32,1,0,0,0,446,447,5,115,0,0,447,448,5,117, - 0,0,448,449,5,98,0,0,449,450,5,115,0,0,450,451,5,101,0,0,451,452,5,116, - 0,0,452,34,1,0,0,0,453,454,5,8838,0,0,454,36,1,0,0,0,455,456,5,115,0,0, - 456,457,5,117,0,0,457,458,5,112,0,0,458,459,5,101,0,0,459,460,5,114,0, - 0,460,461,5,115,0,0,461,462,5,101,0,0,462,463,5,116,0,0,463,38,1,0,0,0, - 464,465,5,8839,0,0,465,40,1,0,0,0,466,467,5,100,0,0,467,468,5,105,0,0, - 468,469,5,118,0,0,469,470,5,105,0,0,470,471,5,100,0,0,471,472,5,101,0, - 0,472,473,5,115,0,0,473,42,1,0,0,0,474,475,5,124,0,0,475,44,1,0,0,0,476, - 477,5,62,0,0,477,478,5,61,0,0,478,46,1,0,0,0,479,480,5,60,0,0,480,481, - 5,61,0,0,481,48,1,0,0,0,482,483,5,62,0,0,483,50,1,0,0,0,484,485,5,60,0, - 0,485,52,1,0,0,0,486,487,5,61,0,0,487,54,1,0,0,0,488,489,5,60,0,0,489, - 490,5,62,0,0,490,56,1,0,0,0,491,492,5,8801,0,0,492,58,1,0,0,0,493,494, - 5,40,0,0,494,60,1,0,0,0,495,496,5,41,0,0,496,62,1,0,0,0,497,498,5,110, - 0,0,498,499,5,111,0,0,499,500,5,116,0,0,500,64,1,0,0,0,501,502,5,97,0, - 0,502,503,5,110,0,0,503,504,5,100,0,0,504,66,1,0,0,0,505,506,5,38,0,0, - 506,68,1,0,0,0,507,508,5,120,0,0,508,509,5,111,0,0,509,510,5,114,0,0,510, - 70,1,0,0,0,511,512,5,111,0,0,512,513,5,114,0,0,513,72,1,0,0,0,514,515, - 5,105,0,0,515,516,5,109,0,0,516,517,5,112,0,0,517,518,5,108,0,0,518,519, - 5,105,0,0,519,520,5,101,0,0,520,521,5,115,0,0,521,74,1,0,0,0,522,523,5, - 45,0,0,523,524,5,62,0,0,524,76,1,0,0,0,525,526,5,112,0,0,526,527,5,114, - 0,0,527,528,5,111,0,0,528,529,5,118,0,0,529,530,5,105,0,0,530,531,5,100, - 0,0,531,532,5,101,0,0,532,533,5,100,0,0,533,78,1,0,0,0,534,535,5,61,0, - 0,535,536,5,62,0,0,536,80,1,0,0,0,537,538,5,58,0,0,538,82,1,0,0,0,539, - 540,5,102,0,0,540,541,5,111,0,0,541,542,5,114,0,0,542,543,5,97,0,0,543, - 544,5,108,0,0,544,545,5,108,0,0,545,84,1,0,0,0,546,547,5,8704,0,0,547, - 86,1,0,0,0,548,549,5,101,0,0,549,550,5,120,0,0,550,551,5,105,0,0,551,552, - 5,115,0,0,552,553,5,116,0,0,553,554,5,115,0,0,554,555,5,33,0,0,555,88, - 1,0,0,0,556,557,5,8707,0,0,557,558,5,33,0,0,558,90,1,0,0,0,559,560,5,101, - 0,0,560,561,5,120,0,0,561,562,5,105,0,0,562,563,5,115,0,0,563,564,5,116, - 0,0,564,565,5,115,0,0,565,92,1,0,0,0,566,567,5,8707,0,0,567,94,1,0,0,0, - 568,569,5,44,0,0,569,96,1,0,0,0,570,571,5,59,0,0,571,98,1,0,0,0,572,573, - 5,43,0,0,573,574,5,111,0,0,574,575,5,111,0,0,575,100,1,0,0,0,576,577,5, - 45,0,0,577,578,5,111,0,0,578,579,5,111,0,0,579,102,1,0,0,0,580,581,5,40, - 0,0,581,582,5,124,0,0,582,104,1,0,0,0,583,584,5,124,0,0,584,585,5,41,0, - 0,585,106,1,0,0,0,586,587,5,35,0,0,587,108,1,0,0,0,588,589,5,91,0,0,589, - 110,1,0,0,0,590,591,5,93,0,0,591,592,5,84,0,0,592,112,1,0,0,0,593,594, - 5,93,0,0,594,114,1,0,0,0,595,596,5,123,0,0,596,116,1,0,0,0,597,598,5,125, - 0,0,598,118,1,0,0,0,599,600,5,108,0,0,600,601,5,111,0,0,601,602,5,103, - 0,0,602,603,5,40,0,0,603,120,1,0,0,0,604,605,5,108,0,0,605,606,5,111,0, - 0,606,607,5,103,0,0,607,608,5,49,0,0,608,609,5,48,0,0,609,610,5,40,0,0, - 610,122,1,0,0,0,611,612,5,108,0,0,612,613,5,111,0,0,613,614,5,103,0,0, - 614,615,5,50,0,0,615,616,5,40,0,0,616,124,1,0,0,0,617,618,5,112,0,0,618, - 619,5,111,0,0,619,620,5,119,0,0,620,621,5,40,0,0,621,126,1,0,0,0,622,623, - 5,115,0,0,623,624,5,113,0,0,624,625,5,114,0,0,625,626,5,116,0,0,626,627, - 5,40,0,0,627,128,1,0,0,0,628,629,5,99,0,0,629,630,5,98,0,0,630,631,5,114, - 0,0,631,632,5,116,0,0,632,633,5,40,0,0,633,130,1,0,0,0,634,635,5,115,0, - 0,635,636,5,113,0,0,636,637,5,114,0,0,637,638,5,40,0,0,638,132,1,0,0,0, - 639,640,5,108,0,0,640,641,5,110,0,0,641,642,5,40,0,0,642,134,1,0,0,0,643, - 644,5,101,0,0,644,645,5,120,0,0,645,646,5,112,0,0,646,647,5,40,0,0,647, - 136,1,0,0,0,648,649,5,115,0,0,649,650,5,105,0,0,650,651,5,110,0,0,651, - 652,5,40,0,0,652,138,1,0,0,0,653,654,5,99,0,0,654,655,5,111,0,0,655,656, - 5,115,0,0,656,657,5,40,0,0,657,140,1,0,0,0,658,659,5,116,0,0,659,660,5, - 97,0,0,660,661,5,110,0,0,661,662,5,40,0,0,662,142,1,0,0,0,663,664,5,99, - 0,0,664,665,5,111,0,0,665,666,5,116,0,0,666,667,5,97,0,0,667,668,5,110, - 0,0,668,669,5,40,0,0,669,144,1,0,0,0,670,671,5,99,0,0,671,672,5,111,0, - 0,672,673,5,116,0,0,673,674,5,40,0,0,674,146,1,0,0,0,675,676,5,115,0,0, - 676,677,5,101,0,0,677,678,5,99,0,0,678,679,5,40,0,0,679,148,1,0,0,0,680, - 681,5,99,0,0,681,682,5,111,0,0,682,683,5,115,0,0,683,684,5,101,0,0,684, - 685,5,99,0,0,685,686,5,40,0,0,686,150,1,0,0,0,687,688,5,99,0,0,688,689, - 5,115,0,0,689,690,5,99,0,0,690,691,5,40,0,0,691,152,1,0,0,0,692,693,5, - 97,0,0,693,694,5,114,0,0,694,695,5,99,0,0,695,696,5,115,0,0,696,697,5, - 105,0,0,697,698,5,110,0,0,698,699,5,40,0,0,699,154,1,0,0,0,700,701,5,97, - 0,0,701,702,5,114,0,0,702,703,5,99,0,0,703,704,5,99,0,0,704,705,5,111, - 0,0,705,706,5,115,0,0,706,707,5,40,0,0,707,156,1,0,0,0,708,709,5,97,0, - 0,709,710,5,114,0,0,710,711,5,99,0,0,711,712,5,116,0,0,712,713,5,97,0, - 0,713,714,5,110,0,0,714,715,5,40,0,0,715,158,1,0,0,0,716,717,5,97,0,0, - 717,718,5,114,0,0,718,719,5,99,0,0,719,720,5,99,0,0,720,721,5,111,0,0, - 721,722,5,116,0,0,722,723,5,97,0,0,723,724,5,110,0,0,724,725,5,40,0,0, - 725,160,1,0,0,0,726,727,5,97,0,0,727,728,5,114,0,0,728,729,5,99,0,0,729, - 730,5,115,0,0,730,731,5,101,0,0,731,732,5,99,0,0,732,733,5,40,0,0,733, - 162,1,0,0,0,734,735,5,97,0,0,735,736,5,114,0,0,736,737,5,99,0,0,737,738, - 5,99,0,0,738,739,5,111,0,0,739,740,5,115,0,0,740,741,5,101,0,0,741,742, - 5,99,0,0,742,743,5,40,0,0,743,164,1,0,0,0,744,745,5,97,0,0,745,746,5,114, - 0,0,746,747,5,99,0,0,747,748,5,99,0,0,748,749,5,115,0,0,749,750,5,99,0, - 0,750,751,5,40,0,0,751,166,1,0,0,0,752,753,5,97,0,0,753,754,5,99,0,0,754, - 755,5,115,0,0,755,756,5,99,0,0,756,757,5,40,0,0,757,168,1,0,0,0,758,759, - 5,97,0,0,759,760,5,115,0,0,760,761,5,105,0,0,761,762,5,110,0,0,762,763, - 5,40,0,0,763,170,1,0,0,0,764,765,5,97,0,0,765,766,5,99,0,0,766,767,5,111, - 0,0,767,768,5,115,0,0,768,769,5,40,0,0,769,172,1,0,0,0,770,771,5,97,0, - 0,771,772,5,116,0,0,772,773,5,97,0,0,773,774,5,110,0,0,774,775,5,40,0, - 0,775,174,1,0,0,0,776,777,5,97,0,0,777,778,5,99,0,0,778,779,5,111,0,0, - 779,780,5,116,0,0,780,781,5,97,0,0,781,782,5,110,0,0,782,783,5,40,0,0, - 783,176,1,0,0,0,784,785,5,97,0,0,785,786,5,115,0,0,786,787,5,101,0,0,787, - 788,5,99,0,0,788,789,5,40,0,0,789,178,1,0,0,0,790,791,5,97,0,0,791,792, - 5,99,0,0,792,793,5,111,0,0,793,794,5,115,0,0,794,795,5,101,0,0,795,796, - 5,99,0,0,796,797,5,40,0,0,797,180,1,0,0,0,798,799,5,97,0,0,799,800,5,99, - 0,0,800,801,5,111,0,0,801,802,5,116,0,0,802,803,5,40,0,0,803,182,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,99,0,0, - 808,809,5,111,0,0,809,810,5,116,0,0,810,811,5,40,0,0,811,184,1,0,0,0,812, - 813,5,115,0,0,813,814,5,105,0,0,814,815,5,110,0,0,815,816,5,104,0,0,816, - 817,5,40,0,0,817,186,1,0,0,0,818,819,5,115,0,0,819,820,5,104,0,0,820,821, - 5,40,0,0,821,188,1,0,0,0,822,823,5,99,0,0,823,824,5,111,0,0,824,825,5, - 115,0,0,825,826,5,104,0,0,826,827,5,40,0,0,827,190,1,0,0,0,828,829,5,99, - 0,0,829,830,5,104,0,0,830,831,5,40,0,0,831,192,1,0,0,0,832,833,5,116,0, - 0,833,834,5,97,0,0,834,835,5,110,0,0,835,836,5,104,0,0,836,837,5,40,0, - 0,837,194,1,0,0,0,838,839,5,116,0,0,839,840,5,104,0,0,840,841,5,40,0,0, - 841,196,1,0,0,0,842,843,5,99,0,0,843,844,5,111,0,0,844,845,5,116,0,0,845, - 846,5,97,0,0,846,847,5,110,0,0,847,848,5,104,0,0,848,849,5,40,0,0,849, - 198,1,0,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,200,1,0,0,0,856,857,5,99,0,0,857,858,5, - 116,0,0,858,859,5,104,0,0,859,860,5,40,0,0,860,202,1,0,0,0,861,862,5,115, - 0,0,862,863,5,101,0,0,863,864,5,99,0,0,864,865,5,104,0,0,865,866,5,40, - 0,0,866,204,1,0,0,0,867,868,5,115,0,0,868,869,5,99,0,0,869,870,5,104,0, - 0,870,871,5,40,0,0,871,206,1,0,0,0,872,873,5,99,0,0,873,874,5,111,0,0, - 874,875,5,115,0,0,875,876,5,101,0,0,876,877,5,99,0,0,877,878,5,104,0,0, - 878,879,5,40,0,0,879,208,1,0,0,0,880,881,5,99,0,0,881,882,5,115,0,0,882, - 883,5,99,0,0,883,884,5,104,0,0,884,885,5,40,0,0,885,210,1,0,0,0,886,887, - 5,97,0,0,887,888,5,115,0,0,888,889,5,105,0,0,889,890,5,110,0,0,890,891, - 5,104,0,0,891,892,5,40,0,0,892,212,1,0,0,0,893,894,5,97,0,0,894,895,5, - 114,0,0,895,896,5,115,0,0,896,897,5,105,0,0,897,898,5,110,0,0,898,899, - 5,104,0,0,899,900,5,40,0,0,900,214,1,0,0,0,901,902,5,97,0,0,902,903,5, - 114,0,0,903,904,5,115,0,0,904,905,5,104,0,0,905,906,5,40,0,0,906,216,1, - 0,0,0,907,908,5,97,0,0,908,909,5,114,0,0,909,910,5,99,0,0,910,911,5,115, - 0,0,911,912,5,105,0,0,912,913,5,110,0,0,913,914,5,104,0,0,914,915,5,40, - 0,0,915,218,1,0,0,0,916,917,5,97,0,0,917,918,5,99,0,0,918,919,5,111,0, - 0,919,920,5,115,0,0,920,921,5,104,0,0,921,922,5,40,0,0,922,220,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,111,0,0, - 927,928,5,115,0,0,928,929,5,104,0,0,929,930,5,40,0,0,930,222,1,0,0,0,931, - 932,5,97,0,0,932,933,5,114,0,0,933,934,5,99,0,0,934,935,5,104,0,0,935, - 936,5,40,0,0,936,224,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,99,0,0,941,942,5,111,0,0,942,943,5,115,0,0,943,944, - 5,104,0,0,944,945,5,40,0,0,945,226,1,0,0,0,946,947,5,97,0,0,947,948,5, - 116,0,0,948,949,5,97,0,0,949,950,5,110,0,0,950,951,5,104,0,0,951,952,5, - 40,0,0,952,228,1,0,0,0,953,954,5,97,0,0,954,955,5,114,0,0,955,956,5,116, - 0,0,956,957,5,97,0,0,957,958,5,110,0,0,958,959,5,104,0,0,959,960,5,40, - 0,0,960,230,1,0,0,0,961,962,5,97,0,0,962,963,5,114,0,0,963,964,5,116,0, - 0,964,965,5,104,0,0,965,966,5,40,0,0,966,232,1,0,0,0,967,968,5,97,0,0, - 968,969,5,114,0,0,969,970,5,99,0,0,970,971,5,116,0,0,971,972,5,97,0,0, - 972,973,5,110,0,0,973,974,5,104,0,0,974,975,5,40,0,0,975,234,1,0,0,0,976, - 977,5,97,0,0,977,978,5,99,0,0,978,979,5,111,0,0,979,980,5,116,0,0,980, - 981,5,104,0,0,981,982,5,40,0,0,982,236,1,0,0,0,983,984,5,97,0,0,984,985, - 5,114,0,0,985,986,5,99,0,0,986,987,5,111,0,0,987,988,5,116,0,0,988,989, - 5,104,0,0,989,990,5,40,0,0,990,238,1,0,0,0,991,992,5,97,0,0,992,993,5, - 99,0,0,993,994,5,111,0,0,994,995,5,116,0,0,995,996,5,97,0,0,996,997,5, - 110,0,0,997,998,5,104,0,0,998,999,5,40,0,0,999,240,1,0,0,0,1000,1001,5, - 97,0,0,1001,1002,5,114,0,0,1002,1003,5,99,0,0,1003,1004,5,111,0,0,1004, - 1005,5,116,0,0,1005,1006,5,97,0,0,1006,1007,5,110,0,0,1007,1008,5,104, - 0,0,1008,1009,5,40,0,0,1009,242,1,0,0,0,1010,1011,5,97,0,0,1011,1012,5, - 114,0,0,1012,1013,5,99,0,0,1013,1014,5,116,0,0,1014,1015,5,104,0,0,1015, - 1016,5,40,0,0,1016,244,1,0,0,0,1017,1018,5,97,0,0,1018,1019,5,114,0,0, - 1019,1020,5,99,0,0,1020,1021,5,99,0,0,1021,1022,5,111,0,0,1022,1023,5, - 116,0,0,1023,1024,5,97,0,0,1024,1025,5,110,0,0,1025,1026,5,104,0,0,1026, - 1027,5,40,0,0,1027,246,1,0,0,0,1028,1029,5,97,0,0,1029,1030,5,115,0,0, - 1030,1031,5,101,0,0,1031,1032,5,99,0,0,1032,1033,5,104,0,0,1033,1034,5, - 40,0,0,1034,248,1,0,0,0,1035,1036,5,97,0,0,1036,1037,5,114,0,0,1037,1038, - 5,115,0,0,1038,1039,5,101,0,0,1039,1040,5,99,0,0,1040,1041,5,104,0,0,1041, - 1042,5,40,0,0,1042,250,1,0,0,0,1043,1044,5,97,0,0,1044,1045,5,114,0,0, - 1045,1046,5,115,0,0,1046,1047,5,99,0,0,1047,1048,5,104,0,0,1048,1049,5, - 40,0,0,1049,252,1,0,0,0,1050,1051,5,97,0,0,1051,1052,5,114,0,0,1052,1053, - 5,99,0,0,1053,1054,5,115,0,0,1054,1055,5,101,0,0,1055,1056,5,99,0,0,1056, - 1057,5,104,0,0,1057,1058,5,40,0,0,1058,254,1,0,0,0,1059,1060,5,97,0,0, - 1060,1061,5,99,0,0,1061,1062,5,111,0,0,1062,1063,5,115,0,0,1063,1064,5, - 101,0,0,1064,1065,5,99,0,0,1065,1066,5,104,0,0,1066,1067,5,40,0,0,1067, - 256,1,0,0,0,1068,1069,5,97,0,0,1069,1070,5,114,0,0,1070,1071,5,99,0,0, - 1071,1072,5,111,0,0,1072,1073,5,115,0,0,1073,1074,5,101,0,0,1074,1075, - 5,99,0,0,1075,1076,5,104,0,0,1076,1077,5,40,0,0,1077,258,1,0,0,0,1078, - 1079,5,97,0,0,1079,1080,5,114,0,0,1080,1081,5,99,0,0,1081,1082,5,115,0, - 0,1082,1083,5,99,0,0,1083,1084,5,104,0,0,1084,1085,5,40,0,0,1085,260,1, - 0,0,0,1086,1087,5,97,0,0,1087,1088,5,114,0,0,1088,1089,5,99,0,0,1089,1090, - 5,99,0,0,1090,1091,5,111,0,0,1091,1092,5,115,0,0,1092,1093,5,101,0,0,1093, - 1094,5,99,0,0,1094,1095,5,104,0,0,1095,1096,5,40,0,0,1096,262,1,0,0,0, - 1097,1098,5,97,0,0,1098,1099,5,99,0,0,1099,1100,5,115,0,0,1100,1101,5, - 99,0,0,1101,1102,5,104,0,0,1102,1103,5,40,0,0,1103,264,1,0,0,0,1104,1105, - 5,102,0,0,1105,1106,5,97,0,0,1106,1107,5,99,0,0,1107,1108,5,116,0,0,1108, - 1109,5,111,0,0,1109,1110,5,114,0,0,1110,1111,5,105,0,0,1111,1112,5,97, - 0,0,1112,1113,5,108,0,0,1113,1114,5,40,0,0,1114,266,1,0,0,0,1115,1116, - 5,103,0,0,1116,1117,5,97,0,0,1117,1118,5,109,0,0,1118,1119,5,109,0,0,1119, - 1120,5,97,0,0,1120,1121,5,40,0,0,1121,268,1,0,0,0,1122,1123,5,100,0,0, - 1123,1124,5,101,0,0,1124,1125,5,114,0,0,1125,1126,5,105,0,0,1126,1127, - 5,118,0,0,1127,1128,5,97,0,0,1128,1129,5,116,0,0,1129,1130,5,105,0,0,1130, - 1131,5,118,0,0,1131,1132,5,101,0,0,1132,1133,5,40,0,0,1133,270,1,0,0,0, - 1134,1135,5,105,0,0,1135,1136,5,110,0,0,1136,1137,5,116,0,0,1137,1138, - 5,101,0,0,1138,1139,5,103,0,0,1139,1140,5,114,0,0,1140,1141,5,97,0,0,1141, - 1142,5,108,0,0,1142,1143,5,40,0,0,1143,272,1,0,0,0,1144,1145,5,108,0,0, - 1145,1146,5,105,0,0,1146,1147,5,109,0,0,1147,1148,5,105,0,0,1148,1149, - 5,116,0,0,1149,1150,5,40,0,0,1150,274,1,0,0,0,1151,1152,5,108,0,0,1152, - 1153,5,105,0,0,1153,1154,5,109,0,0,1154,1155,5,105,0,0,1155,1156,5,116, - 0,0,1156,1157,5,108,0,0,1157,1158,5,101,0,0,1158,1159,5,102,0,0,1159,1160, - 5,116,0,0,1160,1161,5,40,0,0,1161,276,1,0,0,0,1162,1163,5,108,0,0,1163, - 1164,5,105,0,0,1164,1165,5,109,0,0,1165,1166,5,105,0,0,1166,1167,5,116, - 0,0,1167,1168,5,114,0,0,1168,1169,5,105,0,0,1169,1170,5,103,0,0,1170,1171, - 5,104,0,0,1171,1172,5,116,0,0,1172,1173,5,40,0,0,1173,278,1,0,0,0,1174, - 1175,5,115,0,0,1175,1176,5,117,0,0,1176,1177,5,109,0,0,1177,1178,5,40, - 0,0,1178,280,1,0,0,0,1179,1180,5,112,0,0,1180,1181,5,114,0,0,1181,1182, - 5,111,0,0,1182,1183,5,100,0,0,1183,1184,5,117,0,0,1184,1185,5,99,0,0,1185, - 1186,5,116,0,0,1186,1187,5,40,0,0,1187,282,1,0,0,0,1188,1189,5,115,0,0, - 1189,1190,5,105,0,0,1190,1191,5,103,0,0,1191,1192,5,110,0,0,1192,1193, - 5,117,0,0,1193,1194,5,109,0,0,1194,1195,5,40,0,0,1195,284,1,0,0,0,1196, - 1197,5,115,0,0,1197,1198,5,103,0,0,1198,1199,5,110,0,0,1199,1200,5,40, - 0,0,1200,286,1,0,0,0,1201,1202,5,115,0,0,1202,1203,5,105,0,0,1203,1204, - 5,103,0,0,1204,1205,5,110,0,0,1205,1206,5,40,0,0,1206,288,1,0,0,0,1207, - 1208,5,97,0,0,1208,1209,5,98,0,0,1209,1210,5,115,0,0,1210,1211,5,40,0, - 0,1211,290,1,0,0,0,1212,1213,5,112,0,0,1213,1214,5,104,0,0,1214,1215,5, - 105,0,0,1215,1216,5,40,0,0,1216,292,1,0,0,0,1217,1218,5,112,0,0,1218,1219, - 5,114,0,0,1219,1220,5,105,0,0,1220,1221,5,109,0,0,1221,1222,5,101,0,0, - 1222,1223,5,40,0,0,1223,294,1,0,0,0,1224,1225,5,118,0,0,1225,1226,5,97, - 0,0,1226,1227,5,108,0,0,1227,1228,5,117,0,0,1228,1229,5,97,0,0,1229,1230, - 5,116,0,0,1230,1231,5,105,0,0,1231,1232,5,111,0,0,1232,1233,5,110,0,0, - 1233,1234,5,40,0,0,1234,296,1,0,0,0,1235,1236,5,99,0,0,1236,1237,5,97, - 0,0,1237,1238,5,114,0,0,1238,1239,5,100,0,0,1239,1240,5,40,0,0,1240,298, - 1,0,0,0,1241,1242,5,112,0,0,1242,1243,5,111,0,0,1243,1244,5,119,0,0,1244, - 1245,5,101,0,0,1245,1246,5,114,0,0,1246,1247,5,115,0,0,1247,1248,5,101, - 0,0,1248,1249,5,116,0,0,1249,1250,5,40,0,0,1250,300,1,0,0,0,1251,1252, - 5,117,0,0,1252,1253,5,110,0,0,1253,1254,5,105,0,0,1254,1255,5,111,0,0, - 1255,1256,5,110,0,0,1256,1257,5,40,0,0,1257,302,1,0,0,0,1258,1259,5,105, - 0,0,1259,1260,5,110,0,0,1260,1261,5,116,0,0,1261,1262,5,101,0,0,1262,1263, - 5,114,0,0,1263,1264,5,115,0,0,1264,1265,5,101,0,0,1265,1266,5,99,0,0,1266, - 1267,5,116,0,0,1267,1268,5,105,0,0,1268,1269,5,111,0,0,1269,1270,5,110, - 0,0,1270,1271,5,40,0,0,1271,304,1,0,0,0,1272,1273,5,99,0,0,1273,1274,5, - 111,0,0,1274,1275,5,109,0,0,1275,1276,5,112,0,0,1276,1277,5,108,0,0,1277, - 1278,5,101,0,0,1278,1279,5,109,0,0,1279,1280,5,101,0,0,1280,1281,5,110, - 0,0,1281,1282,5,116,0,0,1282,1283,5,40,0,0,1283,306,1,0,0,0,1284,1285, - 5,105,0,0,1285,1286,5,109,0,0,1286,1287,5,97,0,0,1287,1288,5,103,0,0,1288, - 1289,5,101,0,0,1289,1290,5,40,0,0,1290,308,1,0,0,0,1291,1292,5,112,0,0, - 1292,1293,5,114,0,0,1293,1294,5,101,0,0,1294,1295,5,105,0,0,1295,1296, - 5,109,0,0,1296,1297,5,97,0,0,1297,1298,5,103,0,0,1298,1299,5,101,0,0,1299, - 1300,5,40,0,0,1300,310,1,0,0,0,1301,1302,5,102,0,0,1302,1303,5,108,0,0, - 1303,1304,5,111,0,0,1304,1305,5,111,0,0,1305,1306,5,114,0,0,1306,1307, - 5,40,0,0,1307,312,1,0,0,0,1308,1309,5,99,0,0,1309,1310,5,101,0,0,1310, - 1311,5,105,0,0,1311,1312,5,108,0,0,1312,1313,5,40,0,0,1313,314,1,0,0,0, - 1314,1315,5,99,0,0,1315,1316,5,101,0,0,1316,1317,5,105,0,0,1317,1318,5, - 108,0,0,1318,1319,5,105,0,0,1319,1320,5,110,0,0,1320,1321,5,103,0,0,1321, - 1322,5,40,0,0,1322,316,1,0,0,0,1323,1324,5,114,0,0,1324,1325,5,111,0,0, - 1325,1326,5,117,0,0,1326,1327,5,110,0,0,1327,1328,5,100,0,0,1328,1329, - 5,40,0,0,1329,318,1,0,0,0,1330,1331,5,109,0,0,1331,1332,5,105,0,0,1332, - 1333,5,110,0,0,1333,1334,5,40,0,0,1334,320,1,0,0,0,1335,1336,5,109,0,0, - 1336,1337,5,97,0,0,1337,1338,5,120,0,0,1338,1339,5,40,0,0,1339,322,1,0, - 0,0,1340,1341,5,97,0,0,1341,1342,5,114,0,0,1342,1343,5,103,0,0,1343,1344, - 5,109,0,0,1344,1345,5,97,0,0,1345,1346,5,120,0,0,1346,1347,5,40,0,0,1347, - 324,1,0,0,0,1348,1349,5,97,0,0,1349,1350,5,114,0,0,1350,1351,5,103,0,0, - 1351,1352,5,109,0,0,1352,1353,5,105,0,0,1353,1354,5,110,0,0,1354,1355, - 5,40,0,0,1355,326,1,0,0,0,1356,1357,5,103,0,0,1357,1358,5,99,0,0,1358, - 1359,5,100,0,0,1359,1360,5,40,0,0,1360,328,1,0,0,0,1361,1362,5,108,0,0, - 1362,1363,5,99,0,0,1363,1364,5,109,0,0,1364,1365,5,40,0,0,1365,330,1,0, - 0,0,1366,1367,5,98,0,0,1367,1368,5,105,0,0,1368,1369,5,110,0,0,1369,1370, - 5,111,0,0,1370,1371,5,109,0,0,1371,1372,5,105,0,0,1372,1373,5,97,0,0,1373, - 1374,5,108,0,0,1374,1375,5,40,0,0,1375,332,1,0,0,0,1376,1377,5,105,0,0, - 1377,1378,5,118,0,0,1378,1379,5,101,0,0,1379,1380,5,114,0,0,1380,1381, - 5,115,0,0,1381,1382,5,111,0,0,1382,1383,5,110,0,0,1383,1384,5,40,0,0,1384, - 334,1,0,0,0,1385,1386,5,97,0,0,1386,1387,5,108,0,0,1387,1388,5,101,0,0, - 1388,1389,5,112,0,0,1389,1390,5,104,0,0,1390,1391,5,40,0,0,1391,336,1, - 0,0,0,1392,1393,5,101,0,0,1393,1394,5,114,0,0,1394,1395,5,102,0,0,1395, - 1396,5,40,0,0,1396,338,1,0,0,0,1397,1398,5,101,0,0,1398,1399,5,114,0,0, - 1399,1400,5,102,0,0,1400,1401,5,99,0,0,1401,1402,5,40,0,0,1402,340,1,0, - 0,0,1403,1404,5,101,0,0,1404,1405,5,114,0,0,1405,1406,5,102,0,0,1406,1407, - 5,105,0,0,1407,1408,5,40,0,0,1408,342,1,0,0,0,1409,1410,5,69,0,0,1410, - 1411,5,105,0,0,1411,1412,5,40,0,0,1412,344,1,0,0,0,1413,1414,5,108,0,0, - 1414,1415,5,105,0,0,1415,1416,5,40,0,0,1416,346,1,0,0,0,1417,1418,5,83, - 0,0,1418,1419,5,105,0,0,1419,1420,5,40,0,0,1420,348,1,0,0,0,1421,1422, - 5,67,0,0,1422,1423,5,105,0,0,1423,1424,5,40,0,0,1424,350,1,0,0,0,1425, - 1426,5,83,0,0,1426,1427,5,104,0,0,1427,1428,5,105,0,0,1428,1429,5,40,0, - 0,1429,352,1,0,0,0,1430,1431,5,67,0,0,1431,1432,5,104,0,0,1432,1433,5, - 105,0,0,1433,1434,5,40,0,0,1434,354,1,0,0,0,1435,1436,5,116,0,0,1436,1437, - 5,114,0,0,1437,1438,5,117,0,0,1438,1439,5,110,0,0,1439,1440,5,99,0,0,1440, - 1441,5,40,0,0,1441,356,1,0,0,0,1442,1443,5,99,0,0,1443,1444,5,111,0,0, - 1444,1445,5,110,0,0,1445,1446,5,106,0,0,1446,1447,5,117,0,0,1447,1448, - 5,103,0,0,1448,1449,5,97,0,0,1449,1450,5,116,0,0,1450,1451,5,101,0,0,1451, - 1452,5,40,0,0,1452,358,1,0,0,0,1453,1454,5,100,0,0,1454,1455,5,111,0,0, - 1455,1456,5,109,0,0,1456,1457,5,97,0,0,1457,1458,5,105,0,0,1458,1459,5, - 110,0,0,1459,1460,5,40,0,0,1460,360,1,0,0,0,1461,1462,5,112,0,0,1462,1463, - 5,105,0,0,1463,1464,5,101,0,0,1464,1465,5,99,0,0,1465,1466,5,101,0,0,1466, - 1467,5,119,0,0,1467,1468,5,105,0,0,1468,1469,5,115,0,0,1469,1470,5,101, - 0,0,1470,1471,5,40,0,0,1471,362,1,0,0,0,1472,1473,5,97,0,0,1473,1474,5, - 112,0,0,1474,1475,5,112,0,0,1475,1476,5,108,0,0,1476,1477,5,121,0,0,1477, - 1478,5,40,0,0,1478,364,1,0,0,0,1479,1480,5,108,0,0,1480,1481,5,97,0,0, - 1481,1482,5,109,0,0,1482,1483,5,98,0,0,1483,1484,5,100,0,0,1484,1485,5, - 97,0,0,1485,1486,5,40,0,0,1486,366,1,0,0,0,1487,1489,5,13,0,0,1488,1487, - 1,0,0,0,1488,1489,1,0,0,0,1489,1490,1,0,0,0,1490,1492,5,10,0,0,1491,1488, - 1,0,0,0,1492,1493,1,0,0,0,1493,1491,1,0,0,0,1493,1494,1,0,0,0,1494,1495, - 1,0,0,0,1495,1496,6,183,0,0,1496,368,1,0,0,0,1497,1499,7,0,0,0,1498,1500, - 7,1,0,0,1499,1498,1,0,0,0,1499,1500,1,0,0,0,1500,1502,1,0,0,0,1501,1503, - 2,48,57,0,1502,1501,1,0,0,0,1503,1504,1,0,0,0,1504,1502,1,0,0,0,1504,1505, - 1,0,0,0,1505,370,1,0,0,0,1506,1508,2,48,57,0,1507,1506,1,0,0,0,1508,1509, - 1,0,0,0,1509,1507,1,0,0,0,1509,1510,1,0,0,0,1510,1511,1,0,0,0,1511,1515, - 5,46,0,0,1512,1514,2,48,57,0,1513,1512,1,0,0,0,1514,1517,1,0,0,0,1515, - 1513,1,0,0,0,1515,1516,1,0,0,0,1516,1519,1,0,0,0,1517,1515,1,0,0,0,1518, - 1520,3,369,184,0,1519,1518,1,0,0,0,1519,1520,1,0,0,0,1520,1522,1,0,0,0, - 1521,1523,5,105,0,0,1522,1521,1,0,0,0,1522,1523,1,0,0,0,1523,1540,1,0, - 0,0,1524,1526,5,46,0,0,1525,1524,1,0,0,0,1525,1526,1,0,0,0,1526,1528,1, - 0,0,0,1527,1529,2,48,57,0,1528,1527,1,0,0,0,1529,1530,1,0,0,0,1530,1528, - 1,0,0,0,1530,1531,1,0,0,0,1531,1533,1,0,0,0,1532,1534,3,369,184,0,1533, - 1532,1,0,0,0,1533,1534,1,0,0,0,1534,1536,1,0,0,0,1535,1537,5,105,0,0,1536, - 1535,1,0,0,0,1536,1537,1,0,0,0,1537,1540,1,0,0,0,1538,1540,5,105,0,0,1539, - 1507,1,0,0,0,1539,1525,1,0,0,0,1539,1538,1,0,0,0,1540,372,1,0,0,0,1541, - 1542,5,67,0,0,1542,1560,5,67,0,0,1543,1544,5,82,0,0,1544,1560,5,82,0,0, - 1545,1546,5,81,0,0,1546,1560,5,81,0,0,1547,1548,5,90,0,0,1548,1560,5,90, - 0,0,1549,1550,5,66,0,0,1550,1560,5,66,0,0,1551,1552,5,90,0,0,1552,1553, - 5,90,0,0,1553,1560,5,42,0,0,1554,1555,5,90,0,0,1555,1556,5,90,0,0,1556, - 1560,5,43,0,0,1557,1558,5,80,0,0,1558,1560,5,80,0,0,1559,1541,1,0,0,0, - 1559,1543,1,0,0,0,1559,1545,1,0,0,0,1559,1547,1,0,0,0,1559,1549,1,0,0, - 0,1559,1551,1,0,0,0,1559,1554,1,0,0,0,1559,1557,1,0,0,0,1560,374,1,0,0, - 0,1561,1562,5,116,0,0,1562,1563,5,114,0,0,1563,1564,5,117,0,0,1564,1580, - 5,101,0,0,1565,1566,5,84,0,0,1566,1567,5,114,0,0,1567,1568,5,117,0,0,1568, - 1580,5,101,0,0,1569,1570,5,102,0,0,1570,1571,5,97,0,0,1571,1572,5,108, - 0,0,1572,1573,5,115,0,0,1573,1580,5,101,0,0,1574,1575,5,70,0,0,1575,1576, - 5,97,0,0,1576,1577,5,108,0,0,1577,1578,5,115,0,0,1578,1580,5,101,0,0,1579, - 1561,1,0,0,0,1579,1565,1,0,0,0,1579,1569,1,0,0,0,1579,1574,1,0,0,0,1580, - 376,1,0,0,0,1581,1582,5,78,0,0,1582,1583,5,97,0,0,1583,1584,5,78,0,0,1584, - 378,1,0,0,0,1585,1587,7,2,0,0,1586,1585,1,0,0,0,1587,1588,1,0,0,0,1588, - 1586,1,0,0,0,1588,1589,1,0,0,0,1589,1596,1,0,0,0,1590,1592,5,95,0,0,1591, - 1593,7,3,0,0,1592,1591,1,0,0,0,1593,1594,1,0,0,0,1594,1592,1,0,0,0,1594, - 1595,1,0,0,0,1595,1597,1,0,0,0,1596,1590,1,0,0,0,1596,1597,1,0,0,0,1597, - 380,1,0,0,0,1598,1599,5,47,0,0,1599,1600,5,47,0,0,1600,1604,1,0,0,0,1601, - 1603,8,4,0,0,1602,1601,1,0,0,0,1603,1606,1,0,0,0,1604,1602,1,0,0,0,1604, - 1605,1,0,0,0,1605,1611,1,0,0,0,1606,1604,1,0,0,0,1607,1609,5,13,0,0,1608, - 1607,1,0,0,0,1608,1609,1,0,0,0,1609,1610,1,0,0,0,1610,1612,5,10,0,0,1611, - 1608,1,0,0,0,1611,1612,1,0,0,0,1612,1625,1,0,0,0,1613,1614,5,47,0,0,1614, - 1615,5,42,0,0,1615,1619,1,0,0,0,1616,1618,9,0,0,0,1617,1616,1,0,0,0,1618, - 1621,1,0,0,0,1619,1620,1,0,0,0,1619,1617,1,0,0,0,1620,1622,1,0,0,0,1621, - 1619,1,0,0,0,1622,1623,5,42,0,0,1623,1625,5,47,0,0,1624,1598,1,0,0,0,1624, - 1613,1,0,0,0,1625,1626,1,0,0,0,1626,1627,6,190,0,0,1627,382,1,0,0,0,1628, - 1630,7,5,0,0,1629,1628,1,0,0,0,1630,1631,1,0,0,0,1631,1629,1,0,0,0,1631, - 1632,1,0,0,0,1632,1633,1,0,0,0,1633,1634,6,191,0,0,1634,384,1,0,0,0,25, - 0,1488,1493,1499,1504,1509,1515,1519,1522,1525,1530,1533,1536,1539,1559, - 1579,1588,1594,1596,1604,1608,1611,1619,1624,1631,1,6,0,0 + 369,185,371,186,373,0,375,187,377,188,379,189,381,190,383,191,385,192, + 387,193,1,0,6,2,0,69,69,101,101,2,0,43,43,45,45,5,0,65,90,97,122,880,1279, + 7936,8191,8495,8495,5,0,48,57,65,90,97,122,880,1279,7936,8191,2,0,10,10, + 13,13,2,0,9,9,32,32,1690,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,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,0,313,1,0,0,0,0,315,1,0,0,0, + 0,317,1,0,0,0,0,319,1,0,0,0,0,321,1,0,0,0,0,323,1,0,0,0,0,325,1,0,0,0, + 0,327,1,0,0,0,0,329,1,0,0,0,0,331,1,0,0,0,0,333,1,0,0,0,0,335,1,0,0,0, + 0,337,1,0,0,0,0,339,1,0,0,0,0,341,1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0, + 0,347,1,0,0,0,0,349,1,0,0,0,0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0, + 0,357,1,0,0,0,0,359,1,0,0,0,0,361,1,0,0,0,0,363,1,0,0,0,0,365,1,0,0,0, + 0,367,1,0,0,0,0,369,1,0,0,0,0,371,1,0,0,0,0,375,1,0,0,0,0,377,1,0,0,0, + 0,379,1,0,0,0,0,381,1,0,0,0,0,383,1,0,0,0,0,385,1,0,0,0,0,387,1,0,0,0, + 1,389,1,0,0,0,3,391,1,0,0,0,5,393,1,0,0,0,7,395,1,0,0,0,9,397,1,0,0,0, + 11,399,1,0,0,0,13,403,1,0,0,0,15,405,1,0,0,0,17,407,1,0,0,0,19,411,1,0, + 0,0,21,421,1,0,0,0,23,424,1,0,0,0,25,430,1,0,0,0,27,433,1,0,0,0,29,445, + 1,0,0,0,31,447,1,0,0,0,33,450,1,0,0,0,35,457,1,0,0,0,37,459,1,0,0,0,39, + 468,1,0,0,0,41,470,1,0,0,0,43,478,1,0,0,0,45,480,1,0,0,0,47,483,1,0,0, + 0,49,486,1,0,0,0,51,488,1,0,0,0,53,490,1,0,0,0,55,492,1,0,0,0,57,495,1, + 0,0,0,59,497,1,0,0,0,61,499,1,0,0,0,63,501,1,0,0,0,65,505,1,0,0,0,67,509, + 1,0,0,0,69,511,1,0,0,0,71,515,1,0,0,0,73,518,1,0,0,0,75,526,1,0,0,0,77, + 529,1,0,0,0,79,538,1,0,0,0,81,541,1,0,0,0,83,543,1,0,0,0,85,550,1,0,0, + 0,87,552,1,0,0,0,89,560,1,0,0,0,91,563,1,0,0,0,93,570,1,0,0,0,95,572,1, + 0,0,0,97,574,1,0,0,0,99,576,1,0,0,0,101,580,1,0,0,0,103,584,1,0,0,0,105, + 587,1,0,0,0,107,590,1,0,0,0,109,592,1,0,0,0,111,594,1,0,0,0,113,597,1, + 0,0,0,115,599,1,0,0,0,117,601,1,0,0,0,119,603,1,0,0,0,121,608,1,0,0,0, + 123,615,1,0,0,0,125,621,1,0,0,0,127,626,1,0,0,0,129,632,1,0,0,0,131,638, + 1,0,0,0,133,643,1,0,0,0,135,647,1,0,0,0,137,652,1,0,0,0,139,657,1,0,0, + 0,141,662,1,0,0,0,143,667,1,0,0,0,145,674,1,0,0,0,147,679,1,0,0,0,149, + 684,1,0,0,0,151,691,1,0,0,0,153,696,1,0,0,0,155,704,1,0,0,0,157,712,1, + 0,0,0,159,720,1,0,0,0,161,730,1,0,0,0,163,738,1,0,0,0,165,748,1,0,0,0, + 167,756,1,0,0,0,169,762,1,0,0,0,171,768,1,0,0,0,173,774,1,0,0,0,175,780, + 1,0,0,0,177,788,1,0,0,0,179,794,1,0,0,0,181,802,1,0,0,0,183,808,1,0,0, + 0,185,816,1,0,0,0,187,822,1,0,0,0,189,826,1,0,0,0,191,832,1,0,0,0,193, + 836,1,0,0,0,195,842,1,0,0,0,197,846,1,0,0,0,199,854,1,0,0,0,201,860,1, + 0,0,0,203,865,1,0,0,0,205,871,1,0,0,0,207,876,1,0,0,0,209,884,1,0,0,0, + 211,890,1,0,0,0,213,897,1,0,0,0,215,905,1,0,0,0,217,911,1,0,0,0,219,920, + 1,0,0,0,221,927,1,0,0,0,223,935,1,0,0,0,225,941,1,0,0,0,227,950,1,0,0, + 0,229,957,1,0,0,0,231,965,1,0,0,0,233,971,1,0,0,0,235,980,1,0,0,0,237, + 987,1,0,0,0,239,995,1,0,0,0,241,1004,1,0,0,0,243,1014,1,0,0,0,245,1021, + 1,0,0,0,247,1032,1,0,0,0,249,1039,1,0,0,0,251,1047,1,0,0,0,253,1054,1, + 0,0,0,255,1063,1,0,0,0,257,1072,1,0,0,0,259,1082,1,0,0,0,261,1090,1,0, + 0,0,263,1101,1,0,0,0,265,1108,1,0,0,0,267,1119,1,0,0,0,269,1126,1,0,0, + 0,271,1138,1,0,0,0,273,1148,1,0,0,0,275,1155,1,0,0,0,277,1166,1,0,0,0, + 279,1178,1,0,0,0,281,1183,1,0,0,0,283,1192,1,0,0,0,285,1200,1,0,0,0,287, + 1205,1,0,0,0,289,1211,1,0,0,0,291,1216,1,0,0,0,293,1221,1,0,0,0,295,1228, + 1,0,0,0,297,1239,1,0,0,0,299,1245,1,0,0,0,301,1255,1,0,0,0,303,1262,1, + 0,0,0,305,1276,1,0,0,0,307,1288,1,0,0,0,309,1295,1,0,0,0,311,1305,1,0, + 0,0,313,1312,1,0,0,0,315,1318,1,0,0,0,317,1327,1,0,0,0,319,1334,1,0,0, + 0,321,1339,1,0,0,0,323,1344,1,0,0,0,325,1352,1,0,0,0,327,1360,1,0,0,0, + 329,1365,1,0,0,0,331,1370,1,0,0,0,333,1380,1,0,0,0,335,1389,1,0,0,0,337, + 1396,1,0,0,0,339,1401,1,0,0,0,341,1407,1,0,0,0,343,1413,1,0,0,0,345,1417, + 1,0,0,0,347,1421,1,0,0,0,349,1432,1,0,0,0,351,1441,1,0,0,0,353,1445,1, + 0,0,0,355,1449,1,0,0,0,357,1454,1,0,0,0,359,1459,1,0,0,0,361,1466,1,0, + 0,0,363,1477,1,0,0,0,365,1485,1,0,0,0,367,1496,1,0,0,0,369,1503,1,0,0, + 0,371,1515,1,0,0,0,373,1521,1,0,0,0,375,1563,1,0,0,0,377,1583,1,0,0,0, + 379,1603,1,0,0,0,381,1605,1,0,0,0,383,1610,1,0,0,0,385,1648,1,0,0,0,387, + 1653,1,0,0,0,389,390,5,33,0,0,390,2,1,0,0,0,391,392,5,94,0,0,392,4,1,0, + 0,0,393,394,5,45,0,0,394,6,1,0,0,0,395,396,5,43,0,0,396,8,1,0,0,0,397, + 398,5,42,0,0,398,10,1,0,0,0,399,400,5,46,0,0,400,401,5,46,0,0,401,402, + 5,46,0,0,402,12,1,0,0,0,403,404,5,8230,0,0,404,14,1,0,0,0,405,406,5,47, + 0,0,406,16,1,0,0,0,407,408,5,109,0,0,408,409,5,111,0,0,409,410,5,100,0, + 0,410,18,1,0,0,0,411,412,5,105,0,0,412,413,5,110,0,0,413,414,5,116,0,0, + 414,415,5,101,0,0,415,416,5,114,0,0,416,417,5,115,0,0,417,418,5,101,0, + 0,418,419,5,99,0,0,419,420,5,116,0,0,420,20,1,0,0,0,421,422,5,47,0,0,422, + 423,5,92,0,0,423,22,1,0,0,0,424,425,5,117,0,0,425,426,5,110,0,0,426,427, + 5,105,0,0,427,428,5,116,0,0,428,429,5,101,0,0,429,24,1,0,0,0,430,431,5, + 92,0,0,431,432,5,47,0,0,432,26,1,0,0,0,433,434,5,115,0,0,434,435,5,101, + 0,0,435,436,5,116,0,0,436,437,5,115,0,0,437,438,5,117,0,0,438,439,5,98, + 0,0,439,440,5,116,0,0,440,441,5,114,0,0,441,442,5,97,0,0,442,443,5,99, + 0,0,443,444,5,116,0,0,444,28,1,0,0,0,445,446,5,92,0,0,446,30,1,0,0,0,447, + 448,5,105,0,0,448,449,5,110,0,0,449,32,1,0,0,0,450,451,5,115,0,0,451,452, + 5,117,0,0,452,453,5,98,0,0,453,454,5,115,0,0,454,455,5,101,0,0,455,456, + 5,116,0,0,456,34,1,0,0,0,457,458,5,8838,0,0,458,36,1,0,0,0,459,460,5,115, + 0,0,460,461,5,117,0,0,461,462,5,112,0,0,462,463,5,101,0,0,463,464,5,114, + 0,0,464,465,5,115,0,0,465,466,5,101,0,0,466,467,5,116,0,0,467,38,1,0,0, + 0,468,469,5,8839,0,0,469,40,1,0,0,0,470,471,5,100,0,0,471,472,5,105,0, + 0,472,473,5,118,0,0,473,474,5,105,0,0,474,475,5,100,0,0,475,476,5,101, + 0,0,476,477,5,115,0,0,477,42,1,0,0,0,478,479,5,124,0,0,479,44,1,0,0,0, + 480,481,5,62,0,0,481,482,5,61,0,0,482,46,1,0,0,0,483,484,5,60,0,0,484, + 485,5,61,0,0,485,48,1,0,0,0,486,487,5,62,0,0,487,50,1,0,0,0,488,489,5, + 60,0,0,489,52,1,0,0,0,490,491,5,61,0,0,491,54,1,0,0,0,492,493,5,60,0,0, + 493,494,5,62,0,0,494,56,1,0,0,0,495,496,5,8801,0,0,496,58,1,0,0,0,497, + 498,5,40,0,0,498,60,1,0,0,0,499,500,5,41,0,0,500,62,1,0,0,0,501,502,5, + 110,0,0,502,503,5,111,0,0,503,504,5,116,0,0,504,64,1,0,0,0,505,506,5,97, + 0,0,506,507,5,110,0,0,507,508,5,100,0,0,508,66,1,0,0,0,509,510,5,38,0, + 0,510,68,1,0,0,0,511,512,5,120,0,0,512,513,5,111,0,0,513,514,5,114,0,0, + 514,70,1,0,0,0,515,516,5,111,0,0,516,517,5,114,0,0,517,72,1,0,0,0,518, + 519,5,105,0,0,519,520,5,109,0,0,520,521,5,112,0,0,521,522,5,108,0,0,522, + 523,5,105,0,0,523,524,5,101,0,0,524,525,5,115,0,0,525,74,1,0,0,0,526,527, + 5,45,0,0,527,528,5,62,0,0,528,76,1,0,0,0,529,530,5,112,0,0,530,531,5,114, + 0,0,531,532,5,111,0,0,532,533,5,118,0,0,533,534,5,105,0,0,534,535,5,100, + 0,0,535,536,5,101,0,0,536,537,5,100,0,0,537,78,1,0,0,0,538,539,5,61,0, + 0,539,540,5,62,0,0,540,80,1,0,0,0,541,542,5,58,0,0,542,82,1,0,0,0,543, + 544,5,102,0,0,544,545,5,111,0,0,545,546,5,114,0,0,546,547,5,97,0,0,547, + 548,5,108,0,0,548,549,5,108,0,0,549,84,1,0,0,0,550,551,5,8704,0,0,551, + 86,1,0,0,0,552,553,5,101,0,0,553,554,5,120,0,0,554,555,5,105,0,0,555,556, + 5,115,0,0,556,557,5,116,0,0,557,558,5,115,0,0,558,559,5,33,0,0,559,88, + 1,0,0,0,560,561,5,8707,0,0,561,562,5,33,0,0,562,90,1,0,0,0,563,564,5,101, + 0,0,564,565,5,120,0,0,565,566,5,105,0,0,566,567,5,115,0,0,567,568,5,116, + 0,0,568,569,5,115,0,0,569,92,1,0,0,0,570,571,5,8707,0,0,571,94,1,0,0,0, + 572,573,5,44,0,0,573,96,1,0,0,0,574,575,5,59,0,0,575,98,1,0,0,0,576,577, + 5,43,0,0,577,578,5,111,0,0,578,579,5,111,0,0,579,100,1,0,0,0,580,581,5, + 45,0,0,581,582,5,111,0,0,582,583,5,111,0,0,583,102,1,0,0,0,584,585,5,40, + 0,0,585,586,5,124,0,0,586,104,1,0,0,0,587,588,5,124,0,0,588,589,5,41,0, + 0,589,106,1,0,0,0,590,591,5,35,0,0,591,108,1,0,0,0,592,593,5,91,0,0,593, + 110,1,0,0,0,594,595,5,93,0,0,595,596,5,84,0,0,596,112,1,0,0,0,597,598, + 5,93,0,0,598,114,1,0,0,0,599,600,5,123,0,0,600,116,1,0,0,0,601,602,5,125, + 0,0,602,118,1,0,0,0,603,604,5,108,0,0,604,605,5,111,0,0,605,606,5,103, + 0,0,606,607,5,40,0,0,607,120,1,0,0,0,608,609,5,108,0,0,609,610,5,111,0, + 0,610,611,5,103,0,0,611,612,5,49,0,0,612,613,5,48,0,0,613,614,5,40,0,0, + 614,122,1,0,0,0,615,616,5,108,0,0,616,617,5,111,0,0,617,618,5,103,0,0, + 618,619,5,50,0,0,619,620,5,40,0,0,620,124,1,0,0,0,621,622,5,112,0,0,622, + 623,5,111,0,0,623,624,5,119,0,0,624,625,5,40,0,0,625,126,1,0,0,0,626,627, + 5,115,0,0,627,628,5,113,0,0,628,629,5,114,0,0,629,630,5,116,0,0,630,631, + 5,40,0,0,631,128,1,0,0,0,632,633,5,99,0,0,633,634,5,98,0,0,634,635,5,114, + 0,0,635,636,5,116,0,0,636,637,5,40,0,0,637,130,1,0,0,0,638,639,5,115,0, + 0,639,640,5,113,0,0,640,641,5,114,0,0,641,642,5,40,0,0,642,132,1,0,0,0, + 643,644,5,108,0,0,644,645,5,110,0,0,645,646,5,40,0,0,646,134,1,0,0,0,647, + 648,5,101,0,0,648,649,5,120,0,0,649,650,5,112,0,0,650,651,5,40,0,0,651, + 136,1,0,0,0,652,653,5,115,0,0,653,654,5,105,0,0,654,655,5,110,0,0,655, + 656,5,40,0,0,656,138,1,0,0,0,657,658,5,99,0,0,658,659,5,111,0,0,659,660, + 5,115,0,0,660,661,5,40,0,0,661,140,1,0,0,0,662,663,5,116,0,0,663,664,5, + 97,0,0,664,665,5,110,0,0,665,666,5,40,0,0,666,142,1,0,0,0,667,668,5,99, + 0,0,668,669,5,111,0,0,669,670,5,116,0,0,670,671,5,97,0,0,671,672,5,110, + 0,0,672,673,5,40,0,0,673,144,1,0,0,0,674,675,5,99,0,0,675,676,5,111,0, + 0,676,677,5,116,0,0,677,678,5,40,0,0,678,146,1,0,0,0,679,680,5,115,0,0, + 680,681,5,101,0,0,681,682,5,99,0,0,682,683,5,40,0,0,683,148,1,0,0,0,684, + 685,5,99,0,0,685,686,5,111,0,0,686,687,5,115,0,0,687,688,5,101,0,0,688, + 689,5,99,0,0,689,690,5,40,0,0,690,150,1,0,0,0,691,692,5,99,0,0,692,693, + 5,115,0,0,693,694,5,99,0,0,694,695,5,40,0,0,695,152,1,0,0,0,696,697,5, + 97,0,0,697,698,5,114,0,0,698,699,5,99,0,0,699,700,5,115,0,0,700,701,5, + 105,0,0,701,702,5,110,0,0,702,703,5,40,0,0,703,154,1,0,0,0,704,705,5,97, + 0,0,705,706,5,114,0,0,706,707,5,99,0,0,707,708,5,99,0,0,708,709,5,111, + 0,0,709,710,5,115,0,0,710,711,5,40,0,0,711,156,1,0,0,0,712,713,5,97,0, + 0,713,714,5,114,0,0,714,715,5,99,0,0,715,716,5,116,0,0,716,717,5,97,0, + 0,717,718,5,110,0,0,718,719,5,40,0,0,719,158,1,0,0,0,720,721,5,97,0,0, + 721,722,5,114,0,0,722,723,5,99,0,0,723,724,5,99,0,0,724,725,5,111,0,0, + 725,726,5,116,0,0,726,727,5,97,0,0,727,728,5,110,0,0,728,729,5,40,0,0, + 729,160,1,0,0,0,730,731,5,97,0,0,731,732,5,114,0,0,732,733,5,99,0,0,733, + 734,5,115,0,0,734,735,5,101,0,0,735,736,5,99,0,0,736,737,5,40,0,0,737, + 162,1,0,0,0,738,739,5,97,0,0,739,740,5,114,0,0,740,741,5,99,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,40,0,0,747,164,1,0,0,0,748,749,5,97,0,0,749,750,5,114, + 0,0,750,751,5,99,0,0,751,752,5,99,0,0,752,753,5,115,0,0,753,754,5,99,0, + 0,754,755,5,40,0,0,755,166,1,0,0,0,756,757,5,97,0,0,757,758,5,99,0,0,758, + 759,5,115,0,0,759,760,5,99,0,0,760,761,5,40,0,0,761,168,1,0,0,0,762,763, + 5,97,0,0,763,764,5,115,0,0,764,765,5,105,0,0,765,766,5,110,0,0,766,767, + 5,40,0,0,767,170,1,0,0,0,768,769,5,97,0,0,769,770,5,99,0,0,770,771,5,111, + 0,0,771,772,5,115,0,0,772,773,5,40,0,0,773,172,1,0,0,0,774,775,5,97,0, + 0,775,776,5,116,0,0,776,777,5,97,0,0,777,778,5,110,0,0,778,779,5,40,0, + 0,779,174,1,0,0,0,780,781,5,97,0,0,781,782,5,99,0,0,782,783,5,111,0,0, + 783,784,5,116,0,0,784,785,5,97,0,0,785,786,5,110,0,0,786,787,5,40,0,0, + 787,176,1,0,0,0,788,789,5,97,0,0,789,790,5,115,0,0,790,791,5,101,0,0,791, + 792,5,99,0,0,792,793,5,40,0,0,793,178,1,0,0,0,794,795,5,97,0,0,795,796, + 5,99,0,0,796,797,5,111,0,0,797,798,5,115,0,0,798,799,5,101,0,0,799,800, + 5,99,0,0,800,801,5,40,0,0,801,180,1,0,0,0,802,803,5,97,0,0,803,804,5,99, + 0,0,804,805,5,111,0,0,805,806,5,116,0,0,806,807,5,40,0,0,807,182,1,0,0, + 0,808,809,5,97,0,0,809,810,5,114,0,0,810,811,5,99,0,0,811,812,5,99,0,0, + 812,813,5,111,0,0,813,814,5,116,0,0,814,815,5,40,0,0,815,184,1,0,0,0,816, + 817,5,115,0,0,817,818,5,105,0,0,818,819,5,110,0,0,819,820,5,104,0,0,820, + 821,5,40,0,0,821,186,1,0,0,0,822,823,5,115,0,0,823,824,5,104,0,0,824,825, + 5,40,0,0,825,188,1,0,0,0,826,827,5,99,0,0,827,828,5,111,0,0,828,829,5, + 115,0,0,829,830,5,104,0,0,830,831,5,40,0,0,831,190,1,0,0,0,832,833,5,99, + 0,0,833,834,5,104,0,0,834,835,5,40,0,0,835,192,1,0,0,0,836,837,5,116,0, + 0,837,838,5,97,0,0,838,839,5,110,0,0,839,840,5,104,0,0,840,841,5,40,0, + 0,841,194,1,0,0,0,842,843,5,116,0,0,843,844,5,104,0,0,844,845,5,40,0,0, + 845,196,1,0,0,0,846,847,5,99,0,0,847,848,5,111,0,0,848,849,5,116,0,0,849, + 850,5,97,0,0,850,851,5,110,0,0,851,852,5,104,0,0,852,853,5,40,0,0,853, + 198,1,0,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,200,1,0,0,0,860,861,5,99,0,0,861,862,5, + 116,0,0,862,863,5,104,0,0,863,864,5,40,0,0,864,202,1,0,0,0,865,866,5,115, + 0,0,866,867,5,101,0,0,867,868,5,99,0,0,868,869,5,104,0,0,869,870,5,40, + 0,0,870,204,1,0,0,0,871,872,5,115,0,0,872,873,5,99,0,0,873,874,5,104,0, + 0,874,875,5,40,0,0,875,206,1,0,0,0,876,877,5,99,0,0,877,878,5,111,0,0, + 878,879,5,115,0,0,879,880,5,101,0,0,880,881,5,99,0,0,881,882,5,104,0,0, + 882,883,5,40,0,0,883,208,1,0,0,0,884,885,5,99,0,0,885,886,5,115,0,0,886, + 887,5,99,0,0,887,888,5,104,0,0,888,889,5,40,0,0,889,210,1,0,0,0,890,891, + 5,97,0,0,891,892,5,115,0,0,892,893,5,105,0,0,893,894,5,110,0,0,894,895, + 5,104,0,0,895,896,5,40,0,0,896,212,1,0,0,0,897,898,5,97,0,0,898,899,5, + 114,0,0,899,900,5,115,0,0,900,901,5,105,0,0,901,902,5,110,0,0,902,903, + 5,104,0,0,903,904,5,40,0,0,904,214,1,0,0,0,905,906,5,97,0,0,906,907,5, + 114,0,0,907,908,5,115,0,0,908,909,5,104,0,0,909,910,5,40,0,0,910,216,1, + 0,0,0,911,912,5,97,0,0,912,913,5,114,0,0,913,914,5,99,0,0,914,915,5,115, + 0,0,915,916,5,105,0,0,916,917,5,110,0,0,917,918,5,104,0,0,918,919,5,40, + 0,0,919,218,1,0,0,0,920,921,5,97,0,0,921,922,5,99,0,0,922,923,5,111,0, + 0,923,924,5,115,0,0,924,925,5,104,0,0,925,926,5,40,0,0,926,220,1,0,0,0, + 927,928,5,97,0,0,928,929,5,114,0,0,929,930,5,99,0,0,930,931,5,111,0,0, + 931,932,5,115,0,0,932,933,5,104,0,0,933,934,5,40,0,0,934,222,1,0,0,0,935, + 936,5,97,0,0,936,937,5,114,0,0,937,938,5,99,0,0,938,939,5,104,0,0,939, + 940,5,40,0,0,940,224,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,99,0,0,945,946,5,111,0,0,946,947,5,115,0,0,947,948, + 5,104,0,0,948,949,5,40,0,0,949,226,1,0,0,0,950,951,5,97,0,0,951,952,5, + 116,0,0,952,953,5,97,0,0,953,954,5,110,0,0,954,955,5,104,0,0,955,956,5, + 40,0,0,956,228,1,0,0,0,957,958,5,97,0,0,958,959,5,114,0,0,959,960,5,116, + 0,0,960,961,5,97,0,0,961,962,5,110,0,0,962,963,5,104,0,0,963,964,5,40, + 0,0,964,230,1,0,0,0,965,966,5,97,0,0,966,967,5,114,0,0,967,968,5,116,0, + 0,968,969,5,104,0,0,969,970,5,40,0,0,970,232,1,0,0,0,971,972,5,97,0,0, + 972,973,5,114,0,0,973,974,5,99,0,0,974,975,5,116,0,0,975,976,5,97,0,0, + 976,977,5,110,0,0,977,978,5,104,0,0,978,979,5,40,0,0,979,234,1,0,0,0,980, + 981,5,97,0,0,981,982,5,99,0,0,982,983,5,111,0,0,983,984,5,116,0,0,984, + 985,5,104,0,0,985,986,5,40,0,0,986,236,1,0,0,0,987,988,5,97,0,0,988,989, + 5,114,0,0,989,990,5,99,0,0,990,991,5,111,0,0,991,992,5,116,0,0,992,993, + 5,104,0,0,993,994,5,40,0,0,994,238,1,0,0,0,995,996,5,97,0,0,996,997,5, + 99,0,0,997,998,5,111,0,0,998,999,5,116,0,0,999,1000,5,97,0,0,1000,1001, + 5,110,0,0,1001,1002,5,104,0,0,1002,1003,5,40,0,0,1003,240,1,0,0,0,1004, + 1005,5,97,0,0,1005,1006,5,114,0,0,1006,1007,5,99,0,0,1007,1008,5,111,0, + 0,1008,1009,5,116,0,0,1009,1010,5,97,0,0,1010,1011,5,110,0,0,1011,1012, + 5,104,0,0,1012,1013,5,40,0,0,1013,242,1,0,0,0,1014,1015,5,97,0,0,1015, + 1016,5,114,0,0,1016,1017,5,99,0,0,1017,1018,5,116,0,0,1018,1019,5,104, + 0,0,1019,1020,5,40,0,0,1020,244,1,0,0,0,1021,1022,5,97,0,0,1022,1023,5, + 114,0,0,1023,1024,5,99,0,0,1024,1025,5,99,0,0,1025,1026,5,111,0,0,1026, + 1027,5,116,0,0,1027,1028,5,97,0,0,1028,1029,5,110,0,0,1029,1030,5,104, + 0,0,1030,1031,5,40,0,0,1031,246,1,0,0,0,1032,1033,5,97,0,0,1033,1034,5, + 115,0,0,1034,1035,5,101,0,0,1035,1036,5,99,0,0,1036,1037,5,104,0,0,1037, + 1038,5,40,0,0,1038,248,1,0,0,0,1039,1040,5,97,0,0,1040,1041,5,114,0,0, + 1041,1042,5,115,0,0,1042,1043,5,101,0,0,1043,1044,5,99,0,0,1044,1045,5, + 104,0,0,1045,1046,5,40,0,0,1046,250,1,0,0,0,1047,1048,5,97,0,0,1048,1049, + 5,114,0,0,1049,1050,5,115,0,0,1050,1051,5,99,0,0,1051,1052,5,104,0,0,1052, + 1053,5,40,0,0,1053,252,1,0,0,0,1054,1055,5,97,0,0,1055,1056,5,114,0,0, + 1056,1057,5,99,0,0,1057,1058,5,115,0,0,1058,1059,5,101,0,0,1059,1060,5, + 99,0,0,1060,1061,5,104,0,0,1061,1062,5,40,0,0,1062,254,1,0,0,0,1063,1064, + 5,97,0,0,1064,1065,5,99,0,0,1065,1066,5,111,0,0,1066,1067,5,115,0,0,1067, + 1068,5,101,0,0,1068,1069,5,99,0,0,1069,1070,5,104,0,0,1070,1071,5,40,0, + 0,1071,256,1,0,0,0,1072,1073,5,97,0,0,1073,1074,5,114,0,0,1074,1075,5, + 99,0,0,1075,1076,5,111,0,0,1076,1077,5,115,0,0,1077,1078,5,101,0,0,1078, + 1079,5,99,0,0,1079,1080,5,104,0,0,1080,1081,5,40,0,0,1081,258,1,0,0,0, + 1082,1083,5,97,0,0,1083,1084,5,114,0,0,1084,1085,5,99,0,0,1085,1086,5, + 115,0,0,1086,1087,5,99,0,0,1087,1088,5,104,0,0,1088,1089,5,40,0,0,1089, + 260,1,0,0,0,1090,1091,5,97,0,0,1091,1092,5,114,0,0,1092,1093,5,99,0,0, + 1093,1094,5,99,0,0,1094,1095,5,111,0,0,1095,1096,5,115,0,0,1096,1097,5, + 101,0,0,1097,1098,5,99,0,0,1098,1099,5,104,0,0,1099,1100,5,40,0,0,1100, + 262,1,0,0,0,1101,1102,5,97,0,0,1102,1103,5,99,0,0,1103,1104,5,115,0,0, + 1104,1105,5,99,0,0,1105,1106,5,104,0,0,1106,1107,5,40,0,0,1107,264,1,0, + 0,0,1108,1109,5,102,0,0,1109,1110,5,97,0,0,1110,1111,5,99,0,0,1111,1112, + 5,116,0,0,1112,1113,5,111,0,0,1113,1114,5,114,0,0,1114,1115,5,105,0,0, + 1115,1116,5,97,0,0,1116,1117,5,108,0,0,1117,1118,5,40,0,0,1118,266,1,0, + 0,0,1119,1120,5,103,0,0,1120,1121,5,97,0,0,1121,1122,5,109,0,0,1122,1123, + 5,109,0,0,1123,1124,5,97,0,0,1124,1125,5,40,0,0,1125,268,1,0,0,0,1126, + 1127,5,100,0,0,1127,1128,5,101,0,0,1128,1129,5,114,0,0,1129,1130,5,105, + 0,0,1130,1131,5,118,0,0,1131,1132,5,97,0,0,1132,1133,5,116,0,0,1133,1134, + 5,105,0,0,1134,1135,5,118,0,0,1135,1136,5,101,0,0,1136,1137,5,40,0,0,1137, + 270,1,0,0,0,1138,1139,5,105,0,0,1139,1140,5,110,0,0,1140,1141,5,116,0, + 0,1141,1142,5,101,0,0,1142,1143,5,103,0,0,1143,1144,5,114,0,0,1144,1145, + 5,97,0,0,1145,1146,5,108,0,0,1146,1147,5,40,0,0,1147,272,1,0,0,0,1148, + 1149,5,108,0,0,1149,1150,5,105,0,0,1150,1151,5,109,0,0,1151,1152,5,105, + 0,0,1152,1153,5,116,0,0,1153,1154,5,40,0,0,1154,274,1,0,0,0,1155,1156, + 5,108,0,0,1156,1157,5,105,0,0,1157,1158,5,109,0,0,1158,1159,5,105,0,0, + 1159,1160,5,116,0,0,1160,1161,5,108,0,0,1161,1162,5,101,0,0,1162,1163, + 5,102,0,0,1163,1164,5,116,0,0,1164,1165,5,40,0,0,1165,276,1,0,0,0,1166, + 1167,5,108,0,0,1167,1168,5,105,0,0,1168,1169,5,109,0,0,1169,1170,5,105, + 0,0,1170,1171,5,116,0,0,1171,1172,5,114,0,0,1172,1173,5,105,0,0,1173,1174, + 5,103,0,0,1174,1175,5,104,0,0,1175,1176,5,116,0,0,1176,1177,5,40,0,0,1177, + 278,1,0,0,0,1178,1179,5,115,0,0,1179,1180,5,117,0,0,1180,1181,5,109,0, + 0,1181,1182,5,40,0,0,1182,280,1,0,0,0,1183,1184,5,112,0,0,1184,1185,5, + 114,0,0,1185,1186,5,111,0,0,1186,1187,5,100,0,0,1187,1188,5,117,0,0,1188, + 1189,5,99,0,0,1189,1190,5,116,0,0,1190,1191,5,40,0,0,1191,282,1,0,0,0, + 1192,1193,5,115,0,0,1193,1194,5,105,0,0,1194,1195,5,103,0,0,1195,1196, + 5,110,0,0,1196,1197,5,117,0,0,1197,1198,5,109,0,0,1198,1199,5,40,0,0,1199, + 284,1,0,0,0,1200,1201,5,115,0,0,1201,1202,5,103,0,0,1202,1203,5,110,0, + 0,1203,1204,5,40,0,0,1204,286,1,0,0,0,1205,1206,5,115,0,0,1206,1207,5, + 105,0,0,1207,1208,5,103,0,0,1208,1209,5,110,0,0,1209,1210,5,40,0,0,1210, + 288,1,0,0,0,1211,1212,5,97,0,0,1212,1213,5,98,0,0,1213,1214,5,115,0,0, + 1214,1215,5,40,0,0,1215,290,1,0,0,0,1216,1217,5,112,0,0,1217,1218,5,104, + 0,0,1218,1219,5,105,0,0,1219,1220,5,40,0,0,1220,292,1,0,0,0,1221,1222, + 5,112,0,0,1222,1223,5,114,0,0,1223,1224,5,105,0,0,1224,1225,5,109,0,0, + 1225,1226,5,101,0,0,1226,1227,5,40,0,0,1227,294,1,0,0,0,1228,1229,5,118, + 0,0,1229,1230,5,97,0,0,1230,1231,5,108,0,0,1231,1232,5,117,0,0,1232,1233, + 5,97,0,0,1233,1234,5,116,0,0,1234,1235,5,105,0,0,1235,1236,5,111,0,0,1236, + 1237,5,110,0,0,1237,1238,5,40,0,0,1238,296,1,0,0,0,1239,1240,5,99,0,0, + 1240,1241,5,97,0,0,1241,1242,5,114,0,0,1242,1243,5,100,0,0,1243,1244,5, + 40,0,0,1244,298,1,0,0,0,1245,1246,5,112,0,0,1246,1247,5,111,0,0,1247,1248, + 5,119,0,0,1248,1249,5,101,0,0,1249,1250,5,114,0,0,1250,1251,5,115,0,0, + 1251,1252,5,101,0,0,1252,1253,5,116,0,0,1253,1254,5,40,0,0,1254,300,1, + 0,0,0,1255,1256,5,117,0,0,1256,1257,5,110,0,0,1257,1258,5,105,0,0,1258, + 1259,5,111,0,0,1259,1260,5,110,0,0,1260,1261,5,40,0,0,1261,302,1,0,0,0, + 1262,1263,5,105,0,0,1263,1264,5,110,0,0,1264,1265,5,116,0,0,1265,1266, + 5,101,0,0,1266,1267,5,114,0,0,1267,1268,5,115,0,0,1268,1269,5,101,0,0, + 1269,1270,5,99,0,0,1270,1271,5,116,0,0,1271,1272,5,105,0,0,1272,1273,5, + 111,0,0,1273,1274,5,110,0,0,1274,1275,5,40,0,0,1275,304,1,0,0,0,1276,1277, + 5,99,0,0,1277,1278,5,111,0,0,1278,1279,5,109,0,0,1279,1280,5,112,0,0,1280, + 1281,5,108,0,0,1281,1282,5,101,0,0,1282,1283,5,109,0,0,1283,1284,5,101, + 0,0,1284,1285,5,110,0,0,1285,1286,5,116,0,0,1286,1287,5,40,0,0,1287,306, + 1,0,0,0,1288,1289,5,105,0,0,1289,1290,5,109,0,0,1290,1291,5,97,0,0,1291, + 1292,5,103,0,0,1292,1293,5,101,0,0,1293,1294,5,40,0,0,1294,308,1,0,0,0, + 1295,1296,5,112,0,0,1296,1297,5,114,0,0,1297,1298,5,101,0,0,1298,1299, + 5,105,0,0,1299,1300,5,109,0,0,1300,1301,5,97,0,0,1301,1302,5,103,0,0,1302, + 1303,5,101,0,0,1303,1304,5,40,0,0,1304,310,1,0,0,0,1305,1306,5,102,0,0, + 1306,1307,5,108,0,0,1307,1308,5,111,0,0,1308,1309,5,111,0,0,1309,1310, + 5,114,0,0,1310,1311,5,40,0,0,1311,312,1,0,0,0,1312,1313,5,99,0,0,1313, + 1314,5,101,0,0,1314,1315,5,105,0,0,1315,1316,5,108,0,0,1316,1317,5,40, + 0,0,1317,314,1,0,0,0,1318,1319,5,99,0,0,1319,1320,5,101,0,0,1320,1321, + 5,105,0,0,1321,1322,5,108,0,0,1322,1323,5,105,0,0,1323,1324,5,110,0,0, + 1324,1325,5,103,0,0,1325,1326,5,40,0,0,1326,316,1,0,0,0,1327,1328,5,114, + 0,0,1328,1329,5,111,0,0,1329,1330,5,117,0,0,1330,1331,5,110,0,0,1331,1332, + 5,100,0,0,1332,1333,5,40,0,0,1333,318,1,0,0,0,1334,1335,5,109,0,0,1335, + 1336,5,105,0,0,1336,1337,5,110,0,0,1337,1338,5,40,0,0,1338,320,1,0,0,0, + 1339,1340,5,109,0,0,1340,1341,5,97,0,0,1341,1342,5,120,0,0,1342,1343,5, + 40,0,0,1343,322,1,0,0,0,1344,1345,5,97,0,0,1345,1346,5,114,0,0,1346,1347, + 5,103,0,0,1347,1348,5,109,0,0,1348,1349,5,97,0,0,1349,1350,5,120,0,0,1350, + 1351,5,40,0,0,1351,324,1,0,0,0,1352,1353,5,97,0,0,1353,1354,5,114,0,0, + 1354,1355,5,103,0,0,1355,1356,5,109,0,0,1356,1357,5,105,0,0,1357,1358, + 5,110,0,0,1358,1359,5,40,0,0,1359,326,1,0,0,0,1360,1361,5,103,0,0,1361, + 1362,5,99,0,0,1362,1363,5,100,0,0,1363,1364,5,40,0,0,1364,328,1,0,0,0, + 1365,1366,5,108,0,0,1366,1367,5,99,0,0,1367,1368,5,109,0,0,1368,1369,5, + 40,0,0,1369,330,1,0,0,0,1370,1371,5,98,0,0,1371,1372,5,105,0,0,1372,1373, + 5,110,0,0,1373,1374,5,111,0,0,1374,1375,5,109,0,0,1375,1376,5,105,0,0, + 1376,1377,5,97,0,0,1377,1378,5,108,0,0,1378,1379,5,40,0,0,1379,332,1,0, + 0,0,1380,1381,5,105,0,0,1381,1382,5,118,0,0,1382,1383,5,101,0,0,1383,1384, + 5,114,0,0,1384,1385,5,115,0,0,1385,1386,5,111,0,0,1386,1387,5,110,0,0, + 1387,1388,5,40,0,0,1388,334,1,0,0,0,1389,1390,5,97,0,0,1390,1391,5,108, + 0,0,1391,1392,5,101,0,0,1392,1393,5,112,0,0,1393,1394,5,104,0,0,1394,1395, + 5,40,0,0,1395,336,1,0,0,0,1396,1397,5,101,0,0,1397,1398,5,114,0,0,1398, + 1399,5,102,0,0,1399,1400,5,40,0,0,1400,338,1,0,0,0,1401,1402,5,101,0,0, + 1402,1403,5,114,0,0,1403,1404,5,102,0,0,1404,1405,5,99,0,0,1405,1406,5, + 40,0,0,1406,340,1,0,0,0,1407,1408,5,101,0,0,1408,1409,5,114,0,0,1409,1410, + 5,102,0,0,1410,1411,5,105,0,0,1411,1412,5,40,0,0,1412,342,1,0,0,0,1413, + 1414,5,69,0,0,1414,1415,5,105,0,0,1415,1416,5,40,0,0,1416,344,1,0,0,0, + 1417,1418,5,108,0,0,1418,1419,5,105,0,0,1419,1420,5,40,0,0,1420,346,1, + 0,0,0,1421,1422,5,112,0,0,1422,1423,5,111,0,0,1423,1424,5,108,0,0,1424, + 1425,5,121,0,0,1425,1426,5,103,0,0,1426,1427,5,97,0,0,1427,1428,5,109, + 0,0,1428,1429,5,109,0,0,1429,1430,5,97,0,0,1430,1431,5,40,0,0,1431,348, + 1,0,0,0,1432,1433,5,100,0,0,1433,1434,5,105,0,0,1434,1435,5,103,0,0,1435, + 1436,5,97,0,0,1436,1437,5,109,0,0,1437,1438,5,109,0,0,1438,1439,5,97,0, + 0,1439,1440,5,40,0,0,1440,350,1,0,0,0,1441,1442,5,83,0,0,1442,1443,5,105, + 0,0,1443,1444,5,40,0,0,1444,352,1,0,0,0,1445,1446,5,67,0,0,1446,1447,5, + 105,0,0,1447,1448,5,40,0,0,1448,354,1,0,0,0,1449,1450,5,83,0,0,1450,1451, + 5,104,0,0,1451,1452,5,105,0,0,1452,1453,5,40,0,0,1453,356,1,0,0,0,1454, + 1455,5,67,0,0,1455,1456,5,104,0,0,1456,1457,5,105,0,0,1457,1458,5,40,0, + 0,1458,358,1,0,0,0,1459,1460,5,116,0,0,1460,1461,5,114,0,0,1461,1462,5, + 117,0,0,1462,1463,5,110,0,0,1463,1464,5,99,0,0,1464,1465,5,40,0,0,1465, + 360,1,0,0,0,1466,1467,5,99,0,0,1467,1468,5,111,0,0,1468,1469,5,110,0,0, + 1469,1470,5,106,0,0,1470,1471,5,117,0,0,1471,1472,5,103,0,0,1472,1473, + 5,97,0,0,1473,1474,5,116,0,0,1474,1475,5,101,0,0,1475,1476,5,40,0,0,1476, + 362,1,0,0,0,1477,1478,5,100,0,0,1478,1479,5,111,0,0,1479,1480,5,109,0, + 0,1480,1481,5,97,0,0,1481,1482,5,105,0,0,1482,1483,5,110,0,0,1483,1484, + 5,40,0,0,1484,364,1,0,0,0,1485,1486,5,112,0,0,1486,1487,5,105,0,0,1487, + 1488,5,101,0,0,1488,1489,5,99,0,0,1489,1490,5,101,0,0,1490,1491,5,119, + 0,0,1491,1492,5,105,0,0,1492,1493,5,115,0,0,1493,1494,5,101,0,0,1494,1495, + 5,40,0,0,1495,366,1,0,0,0,1496,1497,5,97,0,0,1497,1498,5,112,0,0,1498, + 1499,5,112,0,0,1499,1500,5,108,0,0,1500,1501,5,121,0,0,1501,1502,5,40, + 0,0,1502,368,1,0,0,0,1503,1504,5,108,0,0,1504,1505,5,97,0,0,1505,1506, + 5,109,0,0,1506,1507,5,98,0,0,1507,1508,5,100,0,0,1508,1509,5,97,0,0,1509, + 1510,5,40,0,0,1510,370,1,0,0,0,1511,1513,5,13,0,0,1512,1511,1,0,0,0,1512, + 1513,1,0,0,0,1513,1514,1,0,0,0,1514,1516,5,10,0,0,1515,1512,1,0,0,0,1516, + 1517,1,0,0,0,1517,1515,1,0,0,0,1517,1518,1,0,0,0,1518,1519,1,0,0,0,1519, + 1520,6,185,0,0,1520,372,1,0,0,0,1521,1523,7,0,0,0,1522,1524,7,1,0,0,1523, + 1522,1,0,0,0,1523,1524,1,0,0,0,1524,1526,1,0,0,0,1525,1527,2,48,57,0,1526, + 1525,1,0,0,0,1527,1528,1,0,0,0,1528,1526,1,0,0,0,1528,1529,1,0,0,0,1529, + 374,1,0,0,0,1530,1532,2,48,57,0,1531,1530,1,0,0,0,1532,1533,1,0,0,0,1533, + 1531,1,0,0,0,1533,1534,1,0,0,0,1534,1535,1,0,0,0,1535,1539,5,46,0,0,1536, + 1538,2,48,57,0,1537,1536,1,0,0,0,1538,1541,1,0,0,0,1539,1537,1,0,0,0,1539, + 1540,1,0,0,0,1540,1543,1,0,0,0,1541,1539,1,0,0,0,1542,1544,3,373,186,0, + 1543,1542,1,0,0,0,1543,1544,1,0,0,0,1544,1546,1,0,0,0,1545,1547,5,105, + 0,0,1546,1545,1,0,0,0,1546,1547,1,0,0,0,1547,1564,1,0,0,0,1548,1550,5, + 46,0,0,1549,1548,1,0,0,0,1549,1550,1,0,0,0,1550,1552,1,0,0,0,1551,1553, + 2,48,57,0,1552,1551,1,0,0,0,1553,1554,1,0,0,0,1554,1552,1,0,0,0,1554,1555, + 1,0,0,0,1555,1557,1,0,0,0,1556,1558,3,373,186,0,1557,1556,1,0,0,0,1557, + 1558,1,0,0,0,1558,1560,1,0,0,0,1559,1561,5,105,0,0,1560,1559,1,0,0,0,1560, + 1561,1,0,0,0,1561,1564,1,0,0,0,1562,1564,5,105,0,0,1563,1531,1,0,0,0,1563, + 1549,1,0,0,0,1563,1562,1,0,0,0,1564,376,1,0,0,0,1565,1566,5,67,0,0,1566, + 1584,5,67,0,0,1567,1568,5,82,0,0,1568,1584,5,82,0,0,1569,1570,5,81,0,0, + 1570,1584,5,81,0,0,1571,1572,5,90,0,0,1572,1584,5,90,0,0,1573,1574,5,66, + 0,0,1574,1584,5,66,0,0,1575,1576,5,90,0,0,1576,1577,5,90,0,0,1577,1584, + 5,42,0,0,1578,1579,5,90,0,0,1579,1580,5,90,0,0,1580,1584,5,43,0,0,1581, + 1582,5,80,0,0,1582,1584,5,80,0,0,1583,1565,1,0,0,0,1583,1567,1,0,0,0,1583, + 1569,1,0,0,0,1583,1571,1,0,0,0,1583,1573,1,0,0,0,1583,1575,1,0,0,0,1583, + 1578,1,0,0,0,1583,1581,1,0,0,0,1584,378,1,0,0,0,1585,1586,5,116,0,0,1586, + 1587,5,114,0,0,1587,1588,5,117,0,0,1588,1604,5,101,0,0,1589,1590,5,84, + 0,0,1590,1591,5,114,0,0,1591,1592,5,117,0,0,1592,1604,5,101,0,0,1593,1594, + 5,102,0,0,1594,1595,5,97,0,0,1595,1596,5,108,0,0,1596,1597,5,115,0,0,1597, + 1604,5,101,0,0,1598,1599,5,70,0,0,1599,1600,5,97,0,0,1600,1601,5,108,0, + 0,1601,1602,5,115,0,0,1602,1604,5,101,0,0,1603,1585,1,0,0,0,1603,1589, + 1,0,0,0,1603,1593,1,0,0,0,1603,1598,1,0,0,0,1604,380,1,0,0,0,1605,1606, + 5,78,0,0,1606,1607,5,97,0,0,1607,1608,5,78,0,0,1608,382,1,0,0,0,1609,1611, + 7,2,0,0,1610,1609,1,0,0,0,1611,1612,1,0,0,0,1612,1610,1,0,0,0,1612,1613, + 1,0,0,0,1613,1620,1,0,0,0,1614,1616,5,95,0,0,1615,1617,7,3,0,0,1616,1615, + 1,0,0,0,1617,1618,1,0,0,0,1618,1616,1,0,0,0,1618,1619,1,0,0,0,1619,1621, + 1,0,0,0,1620,1614,1,0,0,0,1620,1621,1,0,0,0,1621,384,1,0,0,0,1622,1623, + 5,47,0,0,1623,1624,5,47,0,0,1624,1628,1,0,0,0,1625,1627,8,4,0,0,1626,1625, + 1,0,0,0,1627,1630,1,0,0,0,1628,1626,1,0,0,0,1628,1629,1,0,0,0,1629,1635, + 1,0,0,0,1630,1628,1,0,0,0,1631,1633,5,13,0,0,1632,1631,1,0,0,0,1632,1633, + 1,0,0,0,1633,1634,1,0,0,0,1634,1636,5,10,0,0,1635,1632,1,0,0,0,1635,1636, + 1,0,0,0,1636,1649,1,0,0,0,1637,1638,5,47,0,0,1638,1639,5,42,0,0,1639,1643, + 1,0,0,0,1640,1642,9,0,0,0,1641,1640,1,0,0,0,1642,1645,1,0,0,0,1643,1644, + 1,0,0,0,1643,1641,1,0,0,0,1644,1646,1,0,0,0,1645,1643,1,0,0,0,1646,1647, + 5,42,0,0,1647,1649,5,47,0,0,1648,1622,1,0,0,0,1648,1637,1,0,0,0,1649,1650, + 1,0,0,0,1650,1651,6,192,0,0,1651,386,1,0,0,0,1652,1654,7,5,0,0,1653,1652, + 1,0,0,0,1654,1655,1,0,0,0,1655,1653,1,0,0,0,1655,1656,1,0,0,0,1656,1657, + 1,0,0,0,1657,1658,6,193,0,0,1658,388,1,0,0,0,25,0,1512,1517,1523,1528, + 1533,1539,1543,1546,1549,1554,1557,1560,1563,1583,1603,1612,1618,1620, + 1628,1632,1635,1643,1648,1655,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 638811944..6aa897bc4 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.interp +++ b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.interp @@ -173,6 +173,8 @@ null 'erfi(' 'Ei(' 'li(' +'polygamma(' +'digamma(' 'Si(' 'Ci(' 'Shi(' @@ -377,6 +379,8 @@ null null null null +null +null NEWLINE NUMBER SPECIALSET @@ -570,6 +574,8 @@ T__179 T__180 T__181 T__182 +T__183 +T__184 NEWLINE EXPONENT NUMBER @@ -588,4 +594,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 191, 1635, 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, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 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, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 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, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 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, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 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, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 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, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 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, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 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, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 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, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 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, 103, 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, 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, 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, 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, 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, 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, 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, 119, 1, 119, 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, 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, 122, 1, 122, 1, 122, 1, 122, 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, 125, 1, 125, 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, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 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, 132, 1, 132, 1, 132, 1, 132, 1, 133, 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, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 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, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 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, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 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, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 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, 147, 1, 147, 1, 147, 1, 147, 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, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 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, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 3, 183, 1489, 8, 183, 1, 183, 4, 183, 1492, 8, 183, 11, 183, 12, 183, 1493, 1, 183, 1, 183, 1, 184, 1, 184, 3, 184, 1500, 8, 184, 1, 184, 4, 184, 1503, 8, 184, 11, 184, 12, 184, 1504, 1, 185, 4, 185, 1508, 8, 185, 11, 185, 12, 185, 1509, 1, 185, 1, 185, 5, 185, 1514, 8, 185, 10, 185, 12, 185, 1517, 9, 185, 1, 185, 3, 185, 1520, 8, 185, 1, 185, 3, 185, 1523, 8, 185, 1, 185, 3, 185, 1526, 8, 185, 1, 185, 4, 185, 1529, 8, 185, 11, 185, 12, 185, 1530, 1, 185, 3, 185, 1534, 8, 185, 1, 185, 3, 185, 1537, 8, 185, 1, 185, 3, 185, 1540, 8, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 3, 186, 1560, 8, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 3, 187, 1580, 8, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 4, 189, 1587, 8, 189, 11, 189, 12, 189, 1588, 1, 189, 1, 189, 4, 189, 1593, 8, 189, 11, 189, 12, 189, 1594, 3, 189, 1597, 8, 189, 1, 190, 1, 190, 1, 190, 1, 190, 5, 190, 1603, 8, 190, 10, 190, 12, 190, 1606, 9, 190, 1, 190, 3, 190, 1609, 8, 190, 1, 190, 3, 190, 1612, 8, 190, 1, 190, 1, 190, 1, 190, 1, 190, 5, 190, 1618, 8, 190, 10, 190, 12, 190, 1621, 9, 190, 1, 190, 1, 190, 3, 190, 1625, 8, 190, 1, 190, 1, 190, 1, 191, 4, 191, 1630, 8, 191, 11, 191, 12, 191, 1631, 1, 191, 1, 191, 1, 1619, 0, 192, 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, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 0, 371, 185, 373, 186, 375, 187, 377, 188, 379, 189, 381, 190, 383, 191, 1, 0, 6, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 5, 0, 65, 90, 97, 122, 880, 1279, 7936, 8191, 8495, 8495, 5, 0, 48, 57, 65, 90, 97, 122, 880, 1279, 7936, 8191, 2, 0, 10, 10, 13, 13, 2, 0, 9, 9, 32, 32, 1666, 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, 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, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 1, 385, 1, 0, 0, 0, 3, 387, 1, 0, 0, 0, 5, 389, 1, 0, 0, 0, 7, 391, 1, 0, 0, 0, 9, 393, 1, 0, 0, 0, 11, 395, 1, 0, 0, 0, 13, 399, 1, 0, 0, 0, 15, 401, 1, 0, 0, 0, 17, 403, 1, 0, 0, 0, 19, 407, 1, 0, 0, 0, 21, 417, 1, 0, 0, 0, 23, 420, 1, 0, 0, 0, 25, 426, 1, 0, 0, 0, 27, 429, 1, 0, 0, 0, 29, 441, 1, 0, 0, 0, 31, 443, 1, 0, 0, 0, 33, 446, 1, 0, 0, 0, 35, 453, 1, 0, 0, 0, 37, 455, 1, 0, 0, 0, 39, 464, 1, 0, 0, 0, 41, 466, 1, 0, 0, 0, 43, 474, 1, 0, 0, 0, 45, 476, 1, 0, 0, 0, 47, 479, 1, 0, 0, 0, 49, 482, 1, 0, 0, 0, 51, 484, 1, 0, 0, 0, 53, 486, 1, 0, 0, 0, 55, 488, 1, 0, 0, 0, 57, 491, 1, 0, 0, 0, 59, 493, 1, 0, 0, 0, 61, 495, 1, 0, 0, 0, 63, 497, 1, 0, 0, 0, 65, 501, 1, 0, 0, 0, 67, 505, 1, 0, 0, 0, 69, 507, 1, 0, 0, 0, 71, 511, 1, 0, 0, 0, 73, 514, 1, 0, 0, 0, 75, 522, 1, 0, 0, 0, 77, 525, 1, 0, 0, 0, 79, 534, 1, 0, 0, 0, 81, 537, 1, 0, 0, 0, 83, 539, 1, 0, 0, 0, 85, 546, 1, 0, 0, 0, 87, 548, 1, 0, 0, 0, 89, 556, 1, 0, 0, 0, 91, 559, 1, 0, 0, 0, 93, 566, 1, 0, 0, 0, 95, 568, 1, 0, 0, 0, 97, 570, 1, 0, 0, 0, 99, 572, 1, 0, 0, 0, 101, 576, 1, 0, 0, 0, 103, 580, 1, 0, 0, 0, 105, 583, 1, 0, 0, 0, 107, 586, 1, 0, 0, 0, 109, 588, 1, 0, 0, 0, 111, 590, 1, 0, 0, 0, 113, 593, 1, 0, 0, 0, 115, 595, 1, 0, 0, 0, 117, 597, 1, 0, 0, 0, 119, 599, 1, 0, 0, 0, 121, 604, 1, 0, 0, 0, 123, 611, 1, 0, 0, 0, 125, 617, 1, 0, 0, 0, 127, 622, 1, 0, 0, 0, 129, 628, 1, 0, 0, 0, 131, 634, 1, 0, 0, 0, 133, 639, 1, 0, 0, 0, 135, 643, 1, 0, 0, 0, 137, 648, 1, 0, 0, 0, 139, 653, 1, 0, 0, 0, 141, 658, 1, 0, 0, 0, 143, 663, 1, 0, 0, 0, 145, 670, 1, 0, 0, 0, 147, 675, 1, 0, 0, 0, 149, 680, 1, 0, 0, 0, 151, 687, 1, 0, 0, 0, 153, 692, 1, 0, 0, 0, 155, 700, 1, 0, 0, 0, 157, 708, 1, 0, 0, 0, 159, 716, 1, 0, 0, 0, 161, 726, 1, 0, 0, 0, 163, 734, 1, 0, 0, 0, 165, 744, 1, 0, 0, 0, 167, 752, 1, 0, 0, 0, 169, 758, 1, 0, 0, 0, 171, 764, 1, 0, 0, 0, 173, 770, 1, 0, 0, 0, 175, 776, 1, 0, 0, 0, 177, 784, 1, 0, 0, 0, 179, 790, 1, 0, 0, 0, 181, 798, 1, 0, 0, 0, 183, 804, 1, 0, 0, 0, 185, 812, 1, 0, 0, 0, 187, 818, 1, 0, 0, 0, 189, 822, 1, 0, 0, 0, 191, 828, 1, 0, 0, 0, 193, 832, 1, 0, 0, 0, 195, 838, 1, 0, 0, 0, 197, 842, 1, 0, 0, 0, 199, 850, 1, 0, 0, 0, 201, 856, 1, 0, 0, 0, 203, 861, 1, 0, 0, 0, 205, 867, 1, 0, 0, 0, 207, 872, 1, 0, 0, 0, 209, 880, 1, 0, 0, 0, 211, 886, 1, 0, 0, 0, 213, 893, 1, 0, 0, 0, 215, 901, 1, 0, 0, 0, 217, 907, 1, 0, 0, 0, 219, 916, 1, 0, 0, 0, 221, 923, 1, 0, 0, 0, 223, 931, 1, 0, 0, 0, 225, 937, 1, 0, 0, 0, 227, 946, 1, 0, 0, 0, 229, 953, 1, 0, 0, 0, 231, 961, 1, 0, 0, 0, 233, 967, 1, 0, 0, 0, 235, 976, 1, 0, 0, 0, 237, 983, 1, 0, 0, 0, 239, 991, 1, 0, 0, 0, 241, 1000, 1, 0, 0, 0, 243, 1010, 1, 0, 0, 0, 245, 1017, 1, 0, 0, 0, 247, 1028, 1, 0, 0, 0, 249, 1035, 1, 0, 0, 0, 251, 1043, 1, 0, 0, 0, 253, 1050, 1, 0, 0, 0, 255, 1059, 1, 0, 0, 0, 257, 1068, 1, 0, 0, 0, 259, 1078, 1, 0, 0, 0, 261, 1086, 1, 0, 0, 0, 263, 1097, 1, 0, 0, 0, 265, 1104, 1, 0, 0, 0, 267, 1115, 1, 0, 0, 0, 269, 1122, 1, 0, 0, 0, 271, 1134, 1, 0, 0, 0, 273, 1144, 1, 0, 0, 0, 275, 1151, 1, 0, 0, 0, 277, 1162, 1, 0, 0, 0, 279, 1174, 1, 0, 0, 0, 281, 1179, 1, 0, 0, 0, 283, 1188, 1, 0, 0, 0, 285, 1196, 1, 0, 0, 0, 287, 1201, 1, 0, 0, 0, 289, 1207, 1, 0, 0, 0, 291, 1212, 1, 0, 0, 0, 293, 1217, 1, 0, 0, 0, 295, 1224, 1, 0, 0, 0, 297, 1235, 1, 0, 0, 0, 299, 1241, 1, 0, 0, 0, 301, 1251, 1, 0, 0, 0, 303, 1258, 1, 0, 0, 0, 305, 1272, 1, 0, 0, 0, 307, 1284, 1, 0, 0, 0, 309, 1291, 1, 0, 0, 0, 311, 1301, 1, 0, 0, 0, 313, 1308, 1, 0, 0, 0, 315, 1314, 1, 0, 0, 0, 317, 1323, 1, 0, 0, 0, 319, 1330, 1, 0, 0, 0, 321, 1335, 1, 0, 0, 0, 323, 1340, 1, 0, 0, 0, 325, 1348, 1, 0, 0, 0, 327, 1356, 1, 0, 0, 0, 329, 1361, 1, 0, 0, 0, 331, 1366, 1, 0, 0, 0, 333, 1376, 1, 0, 0, 0, 335, 1385, 1, 0, 0, 0, 337, 1392, 1, 0, 0, 0, 339, 1397, 1, 0, 0, 0, 341, 1403, 1, 0, 0, 0, 343, 1409, 1, 0, 0, 0, 345, 1413, 1, 0, 0, 0, 347, 1417, 1, 0, 0, 0, 349, 1421, 1, 0, 0, 0, 351, 1425, 1, 0, 0, 0, 353, 1430, 1, 0, 0, 0, 355, 1435, 1, 0, 0, 0, 357, 1442, 1, 0, 0, 0, 359, 1453, 1, 0, 0, 0, 361, 1461, 1, 0, 0, 0, 363, 1472, 1, 0, 0, 0, 365, 1479, 1, 0, 0, 0, 367, 1491, 1, 0, 0, 0, 369, 1497, 1, 0, 0, 0, 371, 1539, 1, 0, 0, 0, 373, 1559, 1, 0, 0, 0, 375, 1579, 1, 0, 0, 0, 377, 1581, 1, 0, 0, 0, 379, 1586, 1, 0, 0, 0, 381, 1624, 1, 0, 0, 0, 383, 1629, 1, 0, 0, 0, 385, 386, 5, 33, 0, 0, 386, 2, 1, 0, 0, 0, 387, 388, 5, 94, 0, 0, 388, 4, 1, 0, 0, 0, 389, 390, 5, 45, 0, 0, 390, 6, 1, 0, 0, 0, 391, 392, 5, 43, 0, 0, 392, 8, 1, 0, 0, 0, 393, 394, 5, 42, 0, 0, 394, 10, 1, 0, 0, 0, 395, 396, 5, 46, 0, 0, 396, 397, 5, 46, 0, 0, 397, 398, 5, 46, 0, 0, 398, 12, 1, 0, 0, 0, 399, 400, 5, 8230, 0, 0, 400, 14, 1, 0, 0, 0, 401, 402, 5, 47, 0, 0, 402, 16, 1, 0, 0, 0, 403, 404, 5, 109, 0, 0, 404, 405, 5, 111, 0, 0, 405, 406, 5, 100, 0, 0, 406, 18, 1, 0, 0, 0, 407, 408, 5, 105, 0, 0, 408, 409, 5, 110, 0, 0, 409, 410, 5, 116, 0, 0, 410, 411, 5, 101, 0, 0, 411, 412, 5, 114, 0, 0, 412, 413, 5, 115, 0, 0, 413, 414, 5, 101, 0, 0, 414, 415, 5, 99, 0, 0, 415, 416, 5, 116, 0, 0, 416, 20, 1, 0, 0, 0, 417, 418, 5, 47, 0, 0, 418, 419, 5, 92, 0, 0, 419, 22, 1, 0, 0, 0, 420, 421, 5, 117, 0, 0, 421, 422, 5, 110, 0, 0, 422, 423, 5, 105, 0, 0, 423, 424, 5, 116, 0, 0, 424, 425, 5, 101, 0, 0, 425, 24, 1, 0, 0, 0, 426, 427, 5, 92, 0, 0, 427, 428, 5, 47, 0, 0, 428, 26, 1, 0, 0, 0, 429, 430, 5, 115, 0, 0, 430, 431, 5, 101, 0, 0, 431, 432, 5, 116, 0, 0, 432, 433, 5, 115, 0, 0, 433, 434, 5, 117, 0, 0, 434, 435, 5, 98, 0, 0, 435, 436, 5, 116, 0, 0, 436, 437, 5, 114, 0, 0, 437, 438, 5, 97, 0, 0, 438, 439, 5, 99, 0, 0, 439, 440, 5, 116, 0, 0, 440, 28, 1, 0, 0, 0, 441, 442, 5, 92, 0, 0, 442, 30, 1, 0, 0, 0, 443, 444, 5, 105, 0, 0, 444, 445, 5, 110, 0, 0, 445, 32, 1, 0, 0, 0, 446, 447, 5, 115, 0, 0, 447, 448, 5, 117, 0, 0, 448, 449, 5, 98, 0, 0, 449, 450, 5, 115, 0, 0, 450, 451, 5, 101, 0, 0, 451, 452, 5, 116, 0, 0, 452, 34, 1, 0, 0, 0, 453, 454, 5, 8838, 0, 0, 454, 36, 1, 0, 0, 0, 455, 456, 5, 115, 0, 0, 456, 457, 5, 117, 0, 0, 457, 458, 5, 112, 0, 0, 458, 459, 5, 101, 0, 0, 459, 460, 5, 114, 0, 0, 460, 461, 5, 115, 0, 0, 461, 462, 5, 101, 0, 0, 462, 463, 5, 116, 0, 0, 463, 38, 1, 0, 0, 0, 464, 465, 5, 8839, 0, 0, 465, 40, 1, 0, 0, 0, 466, 467, 5, 100, 0, 0, 467, 468, 5, 105, 0, 0, 468, 469, 5, 118, 0, 0, 469, 470, 5, 105, 0, 0, 470, 471, 5, 100, 0, 0, 471, 472, 5, 101, 0, 0, 472, 473, 5, 115, 0, 0, 473, 42, 1, 0, 0, 0, 474, 475, 5, 124, 0, 0, 475, 44, 1, 0, 0, 0, 476, 477, 5, 62, 0, 0, 477, 478, 5, 61, 0, 0, 478, 46, 1, 0, 0, 0, 479, 480, 5, 60, 0, 0, 480, 481, 5, 61, 0, 0, 481, 48, 1, 0, 0, 0, 482, 483, 5, 62, 0, 0, 483, 50, 1, 0, 0, 0, 484, 485, 5, 60, 0, 0, 485, 52, 1, 0, 0, 0, 486, 487, 5, 61, 0, 0, 487, 54, 1, 0, 0, 0, 488, 489, 5, 60, 0, 0, 489, 490, 5, 62, 0, 0, 490, 56, 1, 0, 0, 0, 491, 492, 5, 8801, 0, 0, 492, 58, 1, 0, 0, 0, 493, 494, 5, 40, 0, 0, 494, 60, 1, 0, 0, 0, 495, 496, 5, 41, 0, 0, 496, 62, 1, 0, 0, 0, 497, 498, 5, 110, 0, 0, 498, 499, 5, 111, 0, 0, 499, 500, 5, 116, 0, 0, 500, 64, 1, 0, 0, 0, 501, 502, 5, 97, 0, 0, 502, 503, 5, 110, 0, 0, 503, 504, 5, 100, 0, 0, 504, 66, 1, 0, 0, 0, 505, 506, 5, 38, 0, 0, 506, 68, 1, 0, 0, 0, 507, 508, 5, 120, 0, 0, 508, 509, 5, 111, 0, 0, 509, 510, 5, 114, 0, 0, 510, 70, 1, 0, 0, 0, 511, 512, 5, 111, 0, 0, 512, 513, 5, 114, 0, 0, 513, 72, 1, 0, 0, 0, 514, 515, 5, 105, 0, 0, 515, 516, 5, 109, 0, 0, 516, 517, 5, 112, 0, 0, 517, 518, 5, 108, 0, 0, 518, 519, 5, 105, 0, 0, 519, 520, 5, 101, 0, 0, 520, 521, 5, 115, 0, 0, 521, 74, 1, 0, 0, 0, 522, 523, 5, 45, 0, 0, 523, 524, 5, 62, 0, 0, 524, 76, 1, 0, 0, 0, 525, 526, 5, 112, 0, 0, 526, 527, 5, 114, 0, 0, 527, 528, 5, 111, 0, 0, 528, 529, 5, 118, 0, 0, 529, 530, 5, 105, 0, 0, 530, 531, 5, 100, 0, 0, 531, 532, 5, 101, 0, 0, 532, 533, 5, 100, 0, 0, 533, 78, 1, 0, 0, 0, 534, 535, 5, 61, 0, 0, 535, 536, 5, 62, 0, 0, 536, 80, 1, 0, 0, 0, 537, 538, 5, 58, 0, 0, 538, 82, 1, 0, 0, 0, 539, 540, 5, 102, 0, 0, 540, 541, 5, 111, 0, 0, 541, 542, 5, 114, 0, 0, 542, 543, 5, 97, 0, 0, 543, 544, 5, 108, 0, 0, 544, 545, 5, 108, 0, 0, 545, 84, 1, 0, 0, 0, 546, 547, 5, 8704, 0, 0, 547, 86, 1, 0, 0, 0, 548, 549, 5, 101, 0, 0, 549, 550, 5, 120, 0, 0, 550, 551, 5, 105, 0, 0, 551, 552, 5, 115, 0, 0, 552, 553, 5, 116, 0, 0, 553, 554, 5, 115, 0, 0, 554, 555, 5, 33, 0, 0, 555, 88, 1, 0, 0, 0, 556, 557, 5, 8707, 0, 0, 557, 558, 5, 33, 0, 0, 558, 90, 1, 0, 0, 0, 559, 560, 5, 101, 0, 0, 560, 561, 5, 120, 0, 0, 561, 562, 5, 105, 0, 0, 562, 563, 5, 115, 0, 0, 563, 564, 5, 116, 0, 0, 564, 565, 5, 115, 0, 0, 565, 92, 1, 0, 0, 0, 566, 567, 5, 8707, 0, 0, 567, 94, 1, 0, 0, 0, 568, 569, 5, 44, 0, 0, 569, 96, 1, 0, 0, 0, 570, 571, 5, 59, 0, 0, 571, 98, 1, 0, 0, 0, 572, 573, 5, 43, 0, 0, 573, 574, 5, 111, 0, 0, 574, 575, 5, 111, 0, 0, 575, 100, 1, 0, 0, 0, 576, 577, 5, 45, 0, 0, 577, 578, 5, 111, 0, 0, 578, 579, 5, 111, 0, 0, 579, 102, 1, 0, 0, 0, 580, 581, 5, 40, 0, 0, 581, 582, 5, 124, 0, 0, 582, 104, 1, 0, 0, 0, 583, 584, 5, 124, 0, 0, 584, 585, 5, 41, 0, 0, 585, 106, 1, 0, 0, 0, 586, 587, 5, 35, 0, 0, 587, 108, 1, 0, 0, 0, 588, 589, 5, 91, 0, 0, 589, 110, 1, 0, 0, 0, 590, 591, 5, 93, 0, 0, 591, 592, 5, 84, 0, 0, 592, 112, 1, 0, 0, 0, 593, 594, 5, 93, 0, 0, 594, 114, 1, 0, 0, 0, 595, 596, 5, 123, 0, 0, 596, 116, 1, 0, 0, 0, 597, 598, 5, 125, 0, 0, 598, 118, 1, 0, 0, 0, 599, 600, 5, 108, 0, 0, 600, 601, 5, 111, 0, 0, 601, 602, 5, 103, 0, 0, 602, 603, 5, 40, 0, 0, 603, 120, 1, 0, 0, 0, 604, 605, 5, 108, 0, 0, 605, 606, 5, 111, 0, 0, 606, 607, 5, 103, 0, 0, 607, 608, 5, 49, 0, 0, 608, 609, 5, 48, 0, 0, 609, 610, 5, 40, 0, 0, 610, 122, 1, 0, 0, 0, 611, 612, 5, 108, 0, 0, 612, 613, 5, 111, 0, 0, 613, 614, 5, 103, 0, 0, 614, 615, 5, 50, 0, 0, 615, 616, 5, 40, 0, 0, 616, 124, 1, 0, 0, 0, 617, 618, 5, 112, 0, 0, 618, 619, 5, 111, 0, 0, 619, 620, 5, 119, 0, 0, 620, 621, 5, 40, 0, 0, 621, 126, 1, 0, 0, 0, 622, 623, 5, 115, 0, 0, 623, 624, 5, 113, 0, 0, 624, 625, 5, 114, 0, 0, 625, 626, 5, 116, 0, 0, 626, 627, 5, 40, 0, 0, 627, 128, 1, 0, 0, 0, 628, 629, 5, 99, 0, 0, 629, 630, 5, 98, 0, 0, 630, 631, 5, 114, 0, 0, 631, 632, 5, 116, 0, 0, 632, 633, 5, 40, 0, 0, 633, 130, 1, 0, 0, 0, 634, 635, 5, 115, 0, 0, 635, 636, 5, 113, 0, 0, 636, 637, 5, 114, 0, 0, 637, 638, 5, 40, 0, 0, 638, 132, 1, 0, 0, 0, 639, 640, 5, 108, 0, 0, 640, 641, 5, 110, 0, 0, 641, 642, 5, 40, 0, 0, 642, 134, 1, 0, 0, 0, 643, 644, 5, 101, 0, 0, 644, 645, 5, 120, 0, 0, 645, 646, 5, 112, 0, 0, 646, 647, 5, 40, 0, 0, 647, 136, 1, 0, 0, 0, 648, 649, 5, 115, 0, 0, 649, 650, 5, 105, 0, 0, 650, 651, 5, 110, 0, 0, 651, 652, 5, 40, 0, 0, 652, 138, 1, 0, 0, 0, 653, 654, 5, 99, 0, 0, 654, 655, 5, 111, 0, 0, 655, 656, 5, 115, 0, 0, 656, 657, 5, 40, 0, 0, 657, 140, 1, 0, 0, 0, 658, 659, 5, 116, 0, 0, 659, 660, 5, 97, 0, 0, 660, 661, 5, 110, 0, 0, 661, 662, 5, 40, 0, 0, 662, 142, 1, 0, 0, 0, 663, 664, 5, 99, 0, 0, 664, 665, 5, 111, 0, 0, 665, 666, 5, 116, 0, 0, 666, 667, 5, 97, 0, 0, 667, 668, 5, 110, 0, 0, 668, 669, 5, 40, 0, 0, 669, 144, 1, 0, 0, 0, 670, 671, 5, 99, 0, 0, 671, 672, 5, 111, 0, 0, 672, 673, 5, 116, 0, 0, 673, 674, 5, 40, 0, 0, 674, 146, 1, 0, 0, 0, 675, 676, 5, 115, 0, 0, 676, 677, 5, 101, 0, 0, 677, 678, 5, 99, 0, 0, 678, 679, 5, 40, 0, 0, 679, 148, 1, 0, 0, 0, 680, 681, 5, 99, 0, 0, 681, 682, 5, 111, 0, 0, 682, 683, 5, 115, 0, 0, 683, 684, 5, 101, 0, 0, 684, 685, 5, 99, 0, 0, 685, 686, 5, 40, 0, 0, 686, 150, 1, 0, 0, 0, 687, 688, 5, 99, 0, 0, 688, 689, 5, 115, 0, 0, 689, 690, 5, 99, 0, 0, 690, 691, 5, 40, 0, 0, 691, 152, 1, 0, 0, 0, 692, 693, 5, 97, 0, 0, 693, 694, 5, 114, 0, 0, 694, 695, 5, 99, 0, 0, 695, 696, 5, 115, 0, 0, 696, 697, 5, 105, 0, 0, 697, 698, 5, 110, 0, 0, 698, 699, 5, 40, 0, 0, 699, 154, 1, 0, 0, 0, 700, 701, 5, 97, 0, 0, 701, 702, 5, 114, 0, 0, 702, 703, 5, 99, 0, 0, 703, 704, 5, 99, 0, 0, 704, 705, 5, 111, 0, 0, 705, 706, 5, 115, 0, 0, 706, 707, 5, 40, 0, 0, 707, 156, 1, 0, 0, 0, 708, 709, 5, 97, 0, 0, 709, 710, 5, 114, 0, 0, 710, 711, 5, 99, 0, 0, 711, 712, 5, 116, 0, 0, 712, 713, 5, 97, 0, 0, 713, 714, 5, 110, 0, 0, 714, 715, 5, 40, 0, 0, 715, 158, 1, 0, 0, 0, 716, 717, 5, 97, 0, 0, 717, 718, 5, 114, 0, 0, 718, 719, 5, 99, 0, 0, 719, 720, 5, 99, 0, 0, 720, 721, 5, 111, 0, 0, 721, 722, 5, 116, 0, 0, 722, 723, 5, 97, 0, 0, 723, 724, 5, 110, 0, 0, 724, 725, 5, 40, 0, 0, 725, 160, 1, 0, 0, 0, 726, 727, 5, 97, 0, 0, 727, 728, 5, 114, 0, 0, 728, 729, 5, 99, 0, 0, 729, 730, 5, 115, 0, 0, 730, 731, 5, 101, 0, 0, 731, 732, 5, 99, 0, 0, 732, 733, 5, 40, 0, 0, 733, 162, 1, 0, 0, 0, 734, 735, 5, 97, 0, 0, 735, 736, 5, 114, 0, 0, 736, 737, 5, 99, 0, 0, 737, 738, 5, 99, 0, 0, 738, 739, 5, 111, 0, 0, 739, 740, 5, 115, 0, 0, 740, 741, 5, 101, 0, 0, 741, 742, 5, 99, 0, 0, 742, 743, 5, 40, 0, 0, 743, 164, 1, 0, 0, 0, 744, 745, 5, 97, 0, 0, 745, 746, 5, 114, 0, 0, 746, 747, 5, 99, 0, 0, 747, 748, 5, 99, 0, 0, 748, 749, 5, 115, 0, 0, 749, 750, 5, 99, 0, 0, 750, 751, 5, 40, 0, 0, 751, 166, 1, 0, 0, 0, 752, 753, 5, 97, 0, 0, 753, 754, 5, 99, 0, 0, 754, 755, 5, 115, 0, 0, 755, 756, 5, 99, 0, 0, 756, 757, 5, 40, 0, 0, 757, 168, 1, 0, 0, 0, 758, 759, 5, 97, 0, 0, 759, 760, 5, 115, 0, 0, 760, 761, 5, 105, 0, 0, 761, 762, 5, 110, 0, 0, 762, 763, 5, 40, 0, 0, 763, 170, 1, 0, 0, 0, 764, 765, 5, 97, 0, 0, 765, 766, 5, 99, 0, 0, 766, 767, 5, 111, 0, 0, 767, 768, 5, 115, 0, 0, 768, 769, 5, 40, 0, 0, 769, 172, 1, 0, 0, 0, 770, 771, 5, 97, 0, 0, 771, 772, 5, 116, 0, 0, 772, 773, 5, 97, 0, 0, 773, 774, 5, 110, 0, 0, 774, 775, 5, 40, 0, 0, 775, 174, 1, 0, 0, 0, 776, 777, 5, 97, 0, 0, 777, 778, 5, 99, 0, 0, 778, 779, 5, 111, 0, 0, 779, 780, 5, 116, 0, 0, 780, 781, 5, 97, 0, 0, 781, 782, 5, 110, 0, 0, 782, 783, 5, 40, 0, 0, 783, 176, 1, 0, 0, 0, 784, 785, 5, 97, 0, 0, 785, 786, 5, 115, 0, 0, 786, 787, 5, 101, 0, 0, 787, 788, 5, 99, 0, 0, 788, 789, 5, 40, 0, 0, 789, 178, 1, 0, 0, 0, 790, 791, 5, 97, 0, 0, 791, 792, 5, 99, 0, 0, 792, 793, 5, 111, 0, 0, 793, 794, 5, 115, 0, 0, 794, 795, 5, 101, 0, 0, 795, 796, 5, 99, 0, 0, 796, 797, 5, 40, 0, 0, 797, 180, 1, 0, 0, 0, 798, 799, 5, 97, 0, 0, 799, 800, 5, 99, 0, 0, 800, 801, 5, 111, 0, 0, 801, 802, 5, 116, 0, 0, 802, 803, 5, 40, 0, 0, 803, 182, 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, 99, 0, 0, 808, 809, 5, 111, 0, 0, 809, 810, 5, 116, 0, 0, 810, 811, 5, 40, 0, 0, 811, 184, 1, 0, 0, 0, 812, 813, 5, 115, 0, 0, 813, 814, 5, 105, 0, 0, 814, 815, 5, 110, 0, 0, 815, 816, 5, 104, 0, 0, 816, 817, 5, 40, 0, 0, 817, 186, 1, 0, 0, 0, 818, 819, 5, 115, 0, 0, 819, 820, 5, 104, 0, 0, 820, 821, 5, 40, 0, 0, 821, 188, 1, 0, 0, 0, 822, 823, 5, 99, 0, 0, 823, 824, 5, 111, 0, 0, 824, 825, 5, 115, 0, 0, 825, 826, 5, 104, 0, 0, 826, 827, 5, 40, 0, 0, 827, 190, 1, 0, 0, 0, 828, 829, 5, 99, 0, 0, 829, 830, 5, 104, 0, 0, 830, 831, 5, 40, 0, 0, 831, 192, 1, 0, 0, 0, 832, 833, 5, 116, 0, 0, 833, 834, 5, 97, 0, 0, 834, 835, 5, 110, 0, 0, 835, 836, 5, 104, 0, 0, 836, 837, 5, 40, 0, 0, 837, 194, 1, 0, 0, 0, 838, 839, 5, 116, 0, 0, 839, 840, 5, 104, 0, 0, 840, 841, 5, 40, 0, 0, 841, 196, 1, 0, 0, 0, 842, 843, 5, 99, 0, 0, 843, 844, 5, 111, 0, 0, 844, 845, 5, 116, 0, 0, 845, 846, 5, 97, 0, 0, 846, 847, 5, 110, 0, 0, 847, 848, 5, 104, 0, 0, 848, 849, 5, 40, 0, 0, 849, 198, 1, 0, 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, 200, 1, 0, 0, 0, 856, 857, 5, 99, 0, 0, 857, 858, 5, 116, 0, 0, 858, 859, 5, 104, 0, 0, 859, 860, 5, 40, 0, 0, 860, 202, 1, 0, 0, 0, 861, 862, 5, 115, 0, 0, 862, 863, 5, 101, 0, 0, 863, 864, 5, 99, 0, 0, 864, 865, 5, 104, 0, 0, 865, 866, 5, 40, 0, 0, 866, 204, 1, 0, 0, 0, 867, 868, 5, 115, 0, 0, 868, 869, 5, 99, 0, 0, 869, 870, 5, 104, 0, 0, 870, 871, 5, 40, 0, 0, 871, 206, 1, 0, 0, 0, 872, 873, 5, 99, 0, 0, 873, 874, 5, 111, 0, 0, 874, 875, 5, 115, 0, 0, 875, 876, 5, 101, 0, 0, 876, 877, 5, 99, 0, 0, 877, 878, 5, 104, 0, 0, 878, 879, 5, 40, 0, 0, 879, 208, 1, 0, 0, 0, 880, 881, 5, 99, 0, 0, 881, 882, 5, 115, 0, 0, 882, 883, 5, 99, 0, 0, 883, 884, 5, 104, 0, 0, 884, 885, 5, 40, 0, 0, 885, 210, 1, 0, 0, 0, 886, 887, 5, 97, 0, 0, 887, 888, 5, 115, 0, 0, 888, 889, 5, 105, 0, 0, 889, 890, 5, 110, 0, 0, 890, 891, 5, 104, 0, 0, 891, 892, 5, 40, 0, 0, 892, 212, 1, 0, 0, 0, 893, 894, 5, 97, 0, 0, 894, 895, 5, 114, 0, 0, 895, 896, 5, 115, 0, 0, 896, 897, 5, 105, 0, 0, 897, 898, 5, 110, 0, 0, 898, 899, 5, 104, 0, 0, 899, 900, 5, 40, 0, 0, 900, 214, 1, 0, 0, 0, 901, 902, 5, 97, 0, 0, 902, 903, 5, 114, 0, 0, 903, 904, 5, 115, 0, 0, 904, 905, 5, 104, 0, 0, 905, 906, 5, 40, 0, 0, 906, 216, 1, 0, 0, 0, 907, 908, 5, 97, 0, 0, 908, 909, 5, 114, 0, 0, 909, 910, 5, 99, 0, 0, 910, 911, 5, 115, 0, 0, 911, 912, 5, 105, 0, 0, 912, 913, 5, 110, 0, 0, 913, 914, 5, 104, 0, 0, 914, 915, 5, 40, 0, 0, 915, 218, 1, 0, 0, 0, 916, 917, 5, 97, 0, 0, 917, 918, 5, 99, 0, 0, 918, 919, 5, 111, 0, 0, 919, 920, 5, 115, 0, 0, 920, 921, 5, 104, 0, 0, 921, 922, 5, 40, 0, 0, 922, 220, 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, 111, 0, 0, 927, 928, 5, 115, 0, 0, 928, 929, 5, 104, 0, 0, 929, 930, 5, 40, 0, 0, 930, 222, 1, 0, 0, 0, 931, 932, 5, 97, 0, 0, 932, 933, 5, 114, 0, 0, 933, 934, 5, 99, 0, 0, 934, 935, 5, 104, 0, 0, 935, 936, 5, 40, 0, 0, 936, 224, 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, 99, 0, 0, 941, 942, 5, 111, 0, 0, 942, 943, 5, 115, 0, 0, 943, 944, 5, 104, 0, 0, 944, 945, 5, 40, 0, 0, 945, 226, 1, 0, 0, 0, 946, 947, 5, 97, 0, 0, 947, 948, 5, 116, 0, 0, 948, 949, 5, 97, 0, 0, 949, 950, 5, 110, 0, 0, 950, 951, 5, 104, 0, 0, 951, 952, 5, 40, 0, 0, 952, 228, 1, 0, 0, 0, 953, 954, 5, 97, 0, 0, 954, 955, 5, 114, 0, 0, 955, 956, 5, 116, 0, 0, 956, 957, 5, 97, 0, 0, 957, 958, 5, 110, 0, 0, 958, 959, 5, 104, 0, 0, 959, 960, 5, 40, 0, 0, 960, 230, 1, 0, 0, 0, 961, 962, 5, 97, 0, 0, 962, 963, 5, 114, 0, 0, 963, 964, 5, 116, 0, 0, 964, 965, 5, 104, 0, 0, 965, 966, 5, 40, 0, 0, 966, 232, 1, 0, 0, 0, 967, 968, 5, 97, 0, 0, 968, 969, 5, 114, 0, 0, 969, 970, 5, 99, 0, 0, 970, 971, 5, 116, 0, 0, 971, 972, 5, 97, 0, 0, 972, 973, 5, 110, 0, 0, 973, 974, 5, 104, 0, 0, 974, 975, 5, 40, 0, 0, 975, 234, 1, 0, 0, 0, 976, 977, 5, 97, 0, 0, 977, 978, 5, 99, 0, 0, 978, 979, 5, 111, 0, 0, 979, 980, 5, 116, 0, 0, 980, 981, 5, 104, 0, 0, 981, 982, 5, 40, 0, 0, 982, 236, 1, 0, 0, 0, 983, 984, 5, 97, 0, 0, 984, 985, 5, 114, 0, 0, 985, 986, 5, 99, 0, 0, 986, 987, 5, 111, 0, 0, 987, 988, 5, 116, 0, 0, 988, 989, 5, 104, 0, 0, 989, 990, 5, 40, 0, 0, 990, 238, 1, 0, 0, 0, 991, 992, 5, 97, 0, 0, 992, 993, 5, 99, 0, 0, 993, 994, 5, 111, 0, 0, 994, 995, 5, 116, 0, 0, 995, 996, 5, 97, 0, 0, 996, 997, 5, 110, 0, 0, 997, 998, 5, 104, 0, 0, 998, 999, 5, 40, 0, 0, 999, 240, 1, 0, 0, 0, 1000, 1001, 5, 97, 0, 0, 1001, 1002, 5, 114, 0, 0, 1002, 1003, 5, 99, 0, 0, 1003, 1004, 5, 111, 0, 0, 1004, 1005, 5, 116, 0, 0, 1005, 1006, 5, 97, 0, 0, 1006, 1007, 5, 110, 0, 0, 1007, 1008, 5, 104, 0, 0, 1008, 1009, 5, 40, 0, 0, 1009, 242, 1, 0, 0, 0, 1010, 1011, 5, 97, 0, 0, 1011, 1012, 5, 114, 0, 0, 1012, 1013, 5, 99, 0, 0, 1013, 1014, 5, 116, 0, 0, 1014, 1015, 5, 104, 0, 0, 1015, 1016, 5, 40, 0, 0, 1016, 244, 1, 0, 0, 0, 1017, 1018, 5, 97, 0, 0, 1018, 1019, 5, 114, 0, 0, 1019, 1020, 5, 99, 0, 0, 1020, 1021, 5, 99, 0, 0, 1021, 1022, 5, 111, 0, 0, 1022, 1023, 5, 116, 0, 0, 1023, 1024, 5, 97, 0, 0, 1024, 1025, 5, 110, 0, 0, 1025, 1026, 5, 104, 0, 0, 1026, 1027, 5, 40, 0, 0, 1027, 246, 1, 0, 0, 0, 1028, 1029, 5, 97, 0, 0, 1029, 1030, 5, 115, 0, 0, 1030, 1031, 5, 101, 0, 0, 1031, 1032, 5, 99, 0, 0, 1032, 1033, 5, 104, 0, 0, 1033, 1034, 5, 40, 0, 0, 1034, 248, 1, 0, 0, 0, 1035, 1036, 5, 97, 0, 0, 1036, 1037, 5, 114, 0, 0, 1037, 1038, 5, 115, 0, 0, 1038, 1039, 5, 101, 0, 0, 1039, 1040, 5, 99, 0, 0, 1040, 1041, 5, 104, 0, 0, 1041, 1042, 5, 40, 0, 0, 1042, 250, 1, 0, 0, 0, 1043, 1044, 5, 97, 0, 0, 1044, 1045, 5, 114, 0, 0, 1045, 1046, 5, 115, 0, 0, 1046, 1047, 5, 99, 0, 0, 1047, 1048, 5, 104, 0, 0, 1048, 1049, 5, 40, 0, 0, 1049, 252, 1, 0, 0, 0, 1050, 1051, 5, 97, 0, 0, 1051, 1052, 5, 114, 0, 0, 1052, 1053, 5, 99, 0, 0, 1053, 1054, 5, 115, 0, 0, 1054, 1055, 5, 101, 0, 0, 1055, 1056, 5, 99, 0, 0, 1056, 1057, 5, 104, 0, 0, 1057, 1058, 5, 40, 0, 0, 1058, 254, 1, 0, 0, 0, 1059, 1060, 5, 97, 0, 0, 1060, 1061, 5, 99, 0, 0, 1061, 1062, 5, 111, 0, 0, 1062, 1063, 5, 115, 0, 0, 1063, 1064, 5, 101, 0, 0, 1064, 1065, 5, 99, 0, 0, 1065, 1066, 5, 104, 0, 0, 1066, 1067, 5, 40, 0, 0, 1067, 256, 1, 0, 0, 0, 1068, 1069, 5, 97, 0, 0, 1069, 1070, 5, 114, 0, 0, 1070, 1071, 5, 99, 0, 0, 1071, 1072, 5, 111, 0, 0, 1072, 1073, 5, 115, 0, 0, 1073, 1074, 5, 101, 0, 0, 1074, 1075, 5, 99, 0, 0, 1075, 1076, 5, 104, 0, 0, 1076, 1077, 5, 40, 0, 0, 1077, 258, 1, 0, 0, 0, 1078, 1079, 5, 97, 0, 0, 1079, 1080, 5, 114, 0, 0, 1080, 1081, 5, 99, 0, 0, 1081, 1082, 5, 115, 0, 0, 1082, 1083, 5, 99, 0, 0, 1083, 1084, 5, 104, 0, 0, 1084, 1085, 5, 40, 0, 0, 1085, 260, 1, 0, 0, 0, 1086, 1087, 5, 97, 0, 0, 1087, 1088, 5, 114, 0, 0, 1088, 1089, 5, 99, 0, 0, 1089, 1090, 5, 99, 0, 0, 1090, 1091, 5, 111, 0, 0, 1091, 1092, 5, 115, 0, 0, 1092, 1093, 5, 101, 0, 0, 1093, 1094, 5, 99, 0, 0, 1094, 1095, 5, 104, 0, 0, 1095, 1096, 5, 40, 0, 0, 1096, 262, 1, 0, 0, 0, 1097, 1098, 5, 97, 0, 0, 1098, 1099, 5, 99, 0, 0, 1099, 1100, 5, 115, 0, 0, 1100, 1101, 5, 99, 0, 0, 1101, 1102, 5, 104, 0, 0, 1102, 1103, 5, 40, 0, 0, 1103, 264, 1, 0, 0, 0, 1104, 1105, 5, 102, 0, 0, 1105, 1106, 5, 97, 0, 0, 1106, 1107, 5, 99, 0, 0, 1107, 1108, 5, 116, 0, 0, 1108, 1109, 5, 111, 0, 0, 1109, 1110, 5, 114, 0, 0, 1110, 1111, 5, 105, 0, 0, 1111, 1112, 5, 97, 0, 0, 1112, 1113, 5, 108, 0, 0, 1113, 1114, 5, 40, 0, 0, 1114, 266, 1, 0, 0, 0, 1115, 1116, 5, 103, 0, 0, 1116, 1117, 5, 97, 0, 0, 1117, 1118, 5, 109, 0, 0, 1118, 1119, 5, 109, 0, 0, 1119, 1120, 5, 97, 0, 0, 1120, 1121, 5, 40, 0, 0, 1121, 268, 1, 0, 0, 0, 1122, 1123, 5, 100, 0, 0, 1123, 1124, 5, 101, 0, 0, 1124, 1125, 5, 114, 0, 0, 1125, 1126, 5, 105, 0, 0, 1126, 1127, 5, 118, 0, 0, 1127, 1128, 5, 97, 0, 0, 1128, 1129, 5, 116, 0, 0, 1129, 1130, 5, 105, 0, 0, 1130, 1131, 5, 118, 0, 0, 1131, 1132, 5, 101, 0, 0, 1132, 1133, 5, 40, 0, 0, 1133, 270, 1, 0, 0, 0, 1134, 1135, 5, 105, 0, 0, 1135, 1136, 5, 110, 0, 0, 1136, 1137, 5, 116, 0, 0, 1137, 1138, 5, 101, 0, 0, 1138, 1139, 5, 103, 0, 0, 1139, 1140, 5, 114, 0, 0, 1140, 1141, 5, 97, 0, 0, 1141, 1142, 5, 108, 0, 0, 1142, 1143, 5, 40, 0, 0, 1143, 272, 1, 0, 0, 0, 1144, 1145, 5, 108, 0, 0, 1145, 1146, 5, 105, 0, 0, 1146, 1147, 5, 109, 0, 0, 1147, 1148, 5, 105, 0, 0, 1148, 1149, 5, 116, 0, 0, 1149, 1150, 5, 40, 0, 0, 1150, 274, 1, 0, 0, 0, 1151, 1152, 5, 108, 0, 0, 1152, 1153, 5, 105, 0, 0, 1153, 1154, 5, 109, 0, 0, 1154, 1155, 5, 105, 0, 0, 1155, 1156, 5, 116, 0, 0, 1156, 1157, 5, 108, 0, 0, 1157, 1158, 5, 101, 0, 0, 1158, 1159, 5, 102, 0, 0, 1159, 1160, 5, 116, 0, 0, 1160, 1161, 5, 40, 0, 0, 1161, 276, 1, 0, 0, 0, 1162, 1163, 5, 108, 0, 0, 1163, 1164, 5, 105, 0, 0, 1164, 1165, 5, 109, 0, 0, 1165, 1166, 5, 105, 0, 0, 1166, 1167, 5, 116, 0, 0, 1167, 1168, 5, 114, 0, 0, 1168, 1169, 5, 105, 0, 0, 1169, 1170, 5, 103, 0, 0, 1170, 1171, 5, 104, 0, 0, 1171, 1172, 5, 116, 0, 0, 1172, 1173, 5, 40, 0, 0, 1173, 278, 1, 0, 0, 0, 1174, 1175, 5, 115, 0, 0, 1175, 1176, 5, 117, 0, 0, 1176, 1177, 5, 109, 0, 0, 1177, 1178, 5, 40, 0, 0, 1178, 280, 1, 0, 0, 0, 1179, 1180, 5, 112, 0, 0, 1180, 1181, 5, 114, 0, 0, 1181, 1182, 5, 111, 0, 0, 1182, 1183, 5, 100, 0, 0, 1183, 1184, 5, 117, 0, 0, 1184, 1185, 5, 99, 0, 0, 1185, 1186, 5, 116, 0, 0, 1186, 1187, 5, 40, 0, 0, 1187, 282, 1, 0, 0, 0, 1188, 1189, 5, 115, 0, 0, 1189, 1190, 5, 105, 0, 0, 1190, 1191, 5, 103, 0, 0, 1191, 1192, 5, 110, 0, 0, 1192, 1193, 5, 117, 0, 0, 1193, 1194, 5, 109, 0, 0, 1194, 1195, 5, 40, 0, 0, 1195, 284, 1, 0, 0, 0, 1196, 1197, 5, 115, 0, 0, 1197, 1198, 5, 103, 0, 0, 1198, 1199, 5, 110, 0, 0, 1199, 1200, 5, 40, 0, 0, 1200, 286, 1, 0, 0, 0, 1201, 1202, 5, 115, 0, 0, 1202, 1203, 5, 105, 0, 0, 1203, 1204, 5, 103, 0, 0, 1204, 1205, 5, 110, 0, 0, 1205, 1206, 5, 40, 0, 0, 1206, 288, 1, 0, 0, 0, 1207, 1208, 5, 97, 0, 0, 1208, 1209, 5, 98, 0, 0, 1209, 1210, 5, 115, 0, 0, 1210, 1211, 5, 40, 0, 0, 1211, 290, 1, 0, 0, 0, 1212, 1213, 5, 112, 0, 0, 1213, 1214, 5, 104, 0, 0, 1214, 1215, 5, 105, 0, 0, 1215, 1216, 5, 40, 0, 0, 1216, 292, 1, 0, 0, 0, 1217, 1218, 5, 112, 0, 0, 1218, 1219, 5, 114, 0, 0, 1219, 1220, 5, 105, 0, 0, 1220, 1221, 5, 109, 0, 0, 1221, 1222, 5, 101, 0, 0, 1222, 1223, 5, 40, 0, 0, 1223, 294, 1, 0, 0, 0, 1224, 1225, 5, 118, 0, 0, 1225, 1226, 5, 97, 0, 0, 1226, 1227, 5, 108, 0, 0, 1227, 1228, 5, 117, 0, 0, 1228, 1229, 5, 97, 0, 0, 1229, 1230, 5, 116, 0, 0, 1230, 1231, 5, 105, 0, 0, 1231, 1232, 5, 111, 0, 0, 1232, 1233, 5, 110, 0, 0, 1233, 1234, 5, 40, 0, 0, 1234, 296, 1, 0, 0, 0, 1235, 1236, 5, 99, 0, 0, 1236, 1237, 5, 97, 0, 0, 1237, 1238, 5, 114, 0, 0, 1238, 1239, 5, 100, 0, 0, 1239, 1240, 5, 40, 0, 0, 1240, 298, 1, 0, 0, 0, 1241, 1242, 5, 112, 0, 0, 1242, 1243, 5, 111, 0, 0, 1243, 1244, 5, 119, 0, 0, 1244, 1245, 5, 101, 0, 0, 1245, 1246, 5, 114, 0, 0, 1246, 1247, 5, 115, 0, 0, 1247, 1248, 5, 101, 0, 0, 1248, 1249, 5, 116, 0, 0, 1249, 1250, 5, 40, 0, 0, 1250, 300, 1, 0, 0, 0, 1251, 1252, 5, 117, 0, 0, 1252, 1253, 5, 110, 0, 0, 1253, 1254, 5, 105, 0, 0, 1254, 1255, 5, 111, 0, 0, 1255, 1256, 5, 110, 0, 0, 1256, 1257, 5, 40, 0, 0, 1257, 302, 1, 0, 0, 0, 1258, 1259, 5, 105, 0, 0, 1259, 1260, 5, 110, 0, 0, 1260, 1261, 5, 116, 0, 0, 1261, 1262, 5, 101, 0, 0, 1262, 1263, 5, 114, 0, 0, 1263, 1264, 5, 115, 0, 0, 1264, 1265, 5, 101, 0, 0, 1265, 1266, 5, 99, 0, 0, 1266, 1267, 5, 116, 0, 0, 1267, 1268, 5, 105, 0, 0, 1268, 1269, 5, 111, 0, 0, 1269, 1270, 5, 110, 0, 0, 1270, 1271, 5, 40, 0, 0, 1271, 304, 1, 0, 0, 0, 1272, 1273, 5, 99, 0, 0, 1273, 1274, 5, 111, 0, 0, 1274, 1275, 5, 109, 0, 0, 1275, 1276, 5, 112, 0, 0, 1276, 1277, 5, 108, 0, 0, 1277, 1278, 5, 101, 0, 0, 1278, 1279, 5, 109, 0, 0, 1279, 1280, 5, 101, 0, 0, 1280, 1281, 5, 110, 0, 0, 1281, 1282, 5, 116, 0, 0, 1282, 1283, 5, 40, 0, 0, 1283, 306, 1, 0, 0, 0, 1284, 1285, 5, 105, 0, 0, 1285, 1286, 5, 109, 0, 0, 1286, 1287, 5, 97, 0, 0, 1287, 1288, 5, 103, 0, 0, 1288, 1289, 5, 101, 0, 0, 1289, 1290, 5, 40, 0, 0, 1290, 308, 1, 0, 0, 0, 1291, 1292, 5, 112, 0, 0, 1292, 1293, 5, 114, 0, 0, 1293, 1294, 5, 101, 0, 0, 1294, 1295, 5, 105, 0, 0, 1295, 1296, 5, 109, 0, 0, 1296, 1297, 5, 97, 0, 0, 1297, 1298, 5, 103, 0, 0, 1298, 1299, 5, 101, 0, 0, 1299, 1300, 5, 40, 0, 0, 1300, 310, 1, 0, 0, 0, 1301, 1302, 5, 102, 0, 0, 1302, 1303, 5, 108, 0, 0, 1303, 1304, 5, 111, 0, 0, 1304, 1305, 5, 111, 0, 0, 1305, 1306, 5, 114, 0, 0, 1306, 1307, 5, 40, 0, 0, 1307, 312, 1, 0, 0, 0, 1308, 1309, 5, 99, 0, 0, 1309, 1310, 5, 101, 0, 0, 1310, 1311, 5, 105, 0, 0, 1311, 1312, 5, 108, 0, 0, 1312, 1313, 5, 40, 0, 0, 1313, 314, 1, 0, 0, 0, 1314, 1315, 5, 99, 0, 0, 1315, 1316, 5, 101, 0, 0, 1316, 1317, 5, 105, 0, 0, 1317, 1318, 5, 108, 0, 0, 1318, 1319, 5, 105, 0, 0, 1319, 1320, 5, 110, 0, 0, 1320, 1321, 5, 103, 0, 0, 1321, 1322, 5, 40, 0, 0, 1322, 316, 1, 0, 0, 0, 1323, 1324, 5, 114, 0, 0, 1324, 1325, 5, 111, 0, 0, 1325, 1326, 5, 117, 0, 0, 1326, 1327, 5, 110, 0, 0, 1327, 1328, 5, 100, 0, 0, 1328, 1329, 5, 40, 0, 0, 1329, 318, 1, 0, 0, 0, 1330, 1331, 5, 109, 0, 0, 1331, 1332, 5, 105, 0, 0, 1332, 1333, 5, 110, 0, 0, 1333, 1334, 5, 40, 0, 0, 1334, 320, 1, 0, 0, 0, 1335, 1336, 5, 109, 0, 0, 1336, 1337, 5, 97, 0, 0, 1337, 1338, 5, 120, 0, 0, 1338, 1339, 5, 40, 0, 0, 1339, 322, 1, 0, 0, 0, 1340, 1341, 5, 97, 0, 0, 1341, 1342, 5, 114, 0, 0, 1342, 1343, 5, 103, 0, 0, 1343, 1344, 5, 109, 0, 0, 1344, 1345, 5, 97, 0, 0, 1345, 1346, 5, 120, 0, 0, 1346, 1347, 5, 40, 0, 0, 1347, 324, 1, 0, 0, 0, 1348, 1349, 5, 97, 0, 0, 1349, 1350, 5, 114, 0, 0, 1350, 1351, 5, 103, 0, 0, 1351, 1352, 5, 109, 0, 0, 1352, 1353, 5, 105, 0, 0, 1353, 1354, 5, 110, 0, 0, 1354, 1355, 5, 40, 0, 0, 1355, 326, 1, 0, 0, 0, 1356, 1357, 5, 103, 0, 0, 1357, 1358, 5, 99, 0, 0, 1358, 1359, 5, 100, 0, 0, 1359, 1360, 5, 40, 0, 0, 1360, 328, 1, 0, 0, 0, 1361, 1362, 5, 108, 0, 0, 1362, 1363, 5, 99, 0, 0, 1363, 1364, 5, 109, 0, 0, 1364, 1365, 5, 40, 0, 0, 1365, 330, 1, 0, 0, 0, 1366, 1367, 5, 98, 0, 0, 1367, 1368, 5, 105, 0, 0, 1368, 1369, 5, 110, 0, 0, 1369, 1370, 5, 111, 0, 0, 1370, 1371, 5, 109, 0, 0, 1371, 1372, 5, 105, 0, 0, 1372, 1373, 5, 97, 0, 0, 1373, 1374, 5, 108, 0, 0, 1374, 1375, 5, 40, 0, 0, 1375, 332, 1, 0, 0, 0, 1376, 1377, 5, 105, 0, 0, 1377, 1378, 5, 118, 0, 0, 1378, 1379, 5, 101, 0, 0, 1379, 1380, 5, 114, 0, 0, 1380, 1381, 5, 115, 0, 0, 1381, 1382, 5, 111, 0, 0, 1382, 1383, 5, 110, 0, 0, 1383, 1384, 5, 40, 0, 0, 1384, 334, 1, 0, 0, 0, 1385, 1386, 5, 97, 0, 0, 1386, 1387, 5, 108, 0, 0, 1387, 1388, 5, 101, 0, 0, 1388, 1389, 5, 112, 0, 0, 1389, 1390, 5, 104, 0, 0, 1390, 1391, 5, 40, 0, 0, 1391, 336, 1, 0, 0, 0, 1392, 1393, 5, 101, 0, 0, 1393, 1394, 5, 114, 0, 0, 1394, 1395, 5, 102, 0, 0, 1395, 1396, 5, 40, 0, 0, 1396, 338, 1, 0, 0, 0, 1397, 1398, 5, 101, 0, 0, 1398, 1399, 5, 114, 0, 0, 1399, 1400, 5, 102, 0, 0, 1400, 1401, 5, 99, 0, 0, 1401, 1402, 5, 40, 0, 0, 1402, 340, 1, 0, 0, 0, 1403, 1404, 5, 101, 0, 0, 1404, 1405, 5, 114, 0, 0, 1405, 1406, 5, 102, 0, 0, 1406, 1407, 5, 105, 0, 0, 1407, 1408, 5, 40, 0, 0, 1408, 342, 1, 0, 0, 0, 1409, 1410, 5, 69, 0, 0, 1410, 1411, 5, 105, 0, 0, 1411, 1412, 5, 40, 0, 0, 1412, 344, 1, 0, 0, 0, 1413, 1414, 5, 108, 0, 0, 1414, 1415, 5, 105, 0, 0, 1415, 1416, 5, 40, 0, 0, 1416, 346, 1, 0, 0, 0, 1417, 1418, 5, 83, 0, 0, 1418, 1419, 5, 105, 0, 0, 1419, 1420, 5, 40, 0, 0, 1420, 348, 1, 0, 0, 0, 1421, 1422, 5, 67, 0, 0, 1422, 1423, 5, 105, 0, 0, 1423, 1424, 5, 40, 0, 0, 1424, 350, 1, 0, 0, 0, 1425, 1426, 5, 83, 0, 0, 1426, 1427, 5, 104, 0, 0, 1427, 1428, 5, 105, 0, 0, 1428, 1429, 5, 40, 0, 0, 1429, 352, 1, 0, 0, 0, 1430, 1431, 5, 67, 0, 0, 1431, 1432, 5, 104, 0, 0, 1432, 1433, 5, 105, 0, 0, 1433, 1434, 5, 40, 0, 0, 1434, 354, 1, 0, 0, 0, 1435, 1436, 5, 116, 0, 0, 1436, 1437, 5, 114, 0, 0, 1437, 1438, 5, 117, 0, 0, 1438, 1439, 5, 110, 0, 0, 1439, 1440, 5, 99, 0, 0, 1440, 1441, 5, 40, 0, 0, 1441, 356, 1, 0, 0, 0, 1442, 1443, 5, 99, 0, 0, 1443, 1444, 5, 111, 0, 0, 1444, 1445, 5, 110, 0, 0, 1445, 1446, 5, 106, 0, 0, 1446, 1447, 5, 117, 0, 0, 1447, 1448, 5, 103, 0, 0, 1448, 1449, 5, 97, 0, 0, 1449, 1450, 5, 116, 0, 0, 1450, 1451, 5, 101, 0, 0, 1451, 1452, 5, 40, 0, 0, 1452, 358, 1, 0, 0, 0, 1453, 1454, 5, 100, 0, 0, 1454, 1455, 5, 111, 0, 0, 1455, 1456, 5, 109, 0, 0, 1456, 1457, 5, 97, 0, 0, 1457, 1458, 5, 105, 0, 0, 1458, 1459, 5, 110, 0, 0, 1459, 1460, 5, 40, 0, 0, 1460, 360, 1, 0, 0, 0, 1461, 1462, 5, 112, 0, 0, 1462, 1463, 5, 105, 0, 0, 1463, 1464, 5, 101, 0, 0, 1464, 1465, 5, 99, 0, 0, 1465, 1466, 5, 101, 0, 0, 1466, 1467, 5, 119, 0, 0, 1467, 1468, 5, 105, 0, 0, 1468, 1469, 5, 115, 0, 0, 1469, 1470, 5, 101, 0, 0, 1470, 1471, 5, 40, 0, 0, 1471, 362, 1, 0, 0, 0, 1472, 1473, 5, 97, 0, 0, 1473, 1474, 5, 112, 0, 0, 1474, 1475, 5, 112, 0, 0, 1475, 1476, 5, 108, 0, 0, 1476, 1477, 5, 121, 0, 0, 1477, 1478, 5, 40, 0, 0, 1478, 364, 1, 0, 0, 0, 1479, 1480, 5, 108, 0, 0, 1480, 1481, 5, 97, 0, 0, 1481, 1482, 5, 109, 0, 0, 1482, 1483, 5, 98, 0, 0, 1483, 1484, 5, 100, 0, 0, 1484, 1485, 5, 97, 0, 0, 1485, 1486, 5, 40, 0, 0, 1486, 366, 1, 0, 0, 0, 1487, 1489, 5, 13, 0, 0, 1488, 1487, 1, 0, 0, 0, 1488, 1489, 1, 0, 0, 0, 1489, 1490, 1, 0, 0, 0, 1490, 1492, 5, 10, 0, 0, 1491, 1488, 1, 0, 0, 0, 1492, 1493, 1, 0, 0, 0, 1493, 1491, 1, 0, 0, 0, 1493, 1494, 1, 0, 0, 0, 1494, 1495, 1, 0, 0, 0, 1495, 1496, 6, 183, 0, 0, 1496, 368, 1, 0, 0, 0, 1497, 1499, 7, 0, 0, 0, 1498, 1500, 7, 1, 0, 0, 1499, 1498, 1, 0, 0, 0, 1499, 1500, 1, 0, 0, 0, 1500, 1502, 1, 0, 0, 0, 1501, 1503, 2, 48, 57, 0, 1502, 1501, 1, 0, 0, 0, 1503, 1504, 1, 0, 0, 0, 1504, 1502, 1, 0, 0, 0, 1504, 1505, 1, 0, 0, 0, 1505, 370, 1, 0, 0, 0, 1506, 1508, 2, 48, 57, 0, 1507, 1506, 1, 0, 0, 0, 1508, 1509, 1, 0, 0, 0, 1509, 1507, 1, 0, 0, 0, 1509, 1510, 1, 0, 0, 0, 1510, 1511, 1, 0, 0, 0, 1511, 1515, 5, 46, 0, 0, 1512, 1514, 2, 48, 57, 0, 1513, 1512, 1, 0, 0, 0, 1514, 1517, 1, 0, 0, 0, 1515, 1513, 1, 0, 0, 0, 1515, 1516, 1, 0, 0, 0, 1516, 1519, 1, 0, 0, 0, 1517, 1515, 1, 0, 0, 0, 1518, 1520, 3, 369, 184, 0, 1519, 1518, 1, 0, 0, 0, 1519, 1520, 1, 0, 0, 0, 1520, 1522, 1, 0, 0, 0, 1521, 1523, 5, 105, 0, 0, 1522, 1521, 1, 0, 0, 0, 1522, 1523, 1, 0, 0, 0, 1523, 1540, 1, 0, 0, 0, 1524, 1526, 5, 46, 0, 0, 1525, 1524, 1, 0, 0, 0, 1525, 1526, 1, 0, 0, 0, 1526, 1528, 1, 0, 0, 0, 1527, 1529, 2, 48, 57, 0, 1528, 1527, 1, 0, 0, 0, 1529, 1530, 1, 0, 0, 0, 1530, 1528, 1, 0, 0, 0, 1530, 1531, 1, 0, 0, 0, 1531, 1533, 1, 0, 0, 0, 1532, 1534, 3, 369, 184, 0, 1533, 1532, 1, 0, 0, 0, 1533, 1534, 1, 0, 0, 0, 1534, 1536, 1, 0, 0, 0, 1535, 1537, 5, 105, 0, 0, 1536, 1535, 1, 0, 0, 0, 1536, 1537, 1, 0, 0, 0, 1537, 1540, 1, 0, 0, 0, 1538, 1540, 5, 105, 0, 0, 1539, 1507, 1, 0, 0, 0, 1539, 1525, 1, 0, 0, 0, 1539, 1538, 1, 0, 0, 0, 1540, 372, 1, 0, 0, 0, 1541, 1542, 5, 67, 0, 0, 1542, 1560, 5, 67, 0, 0, 1543, 1544, 5, 82, 0, 0, 1544, 1560, 5, 82, 0, 0, 1545, 1546, 5, 81, 0, 0, 1546, 1560, 5, 81, 0, 0, 1547, 1548, 5, 90, 0, 0, 1548, 1560, 5, 90, 0, 0, 1549, 1550, 5, 66, 0, 0, 1550, 1560, 5, 66, 0, 0, 1551, 1552, 5, 90, 0, 0, 1552, 1553, 5, 90, 0, 0, 1553, 1560, 5, 42, 0, 0, 1554, 1555, 5, 90, 0, 0, 1555, 1556, 5, 90, 0, 0, 1556, 1560, 5, 43, 0, 0, 1557, 1558, 5, 80, 0, 0, 1558, 1560, 5, 80, 0, 0, 1559, 1541, 1, 0, 0, 0, 1559, 1543, 1, 0, 0, 0, 1559, 1545, 1, 0, 0, 0, 1559, 1547, 1, 0, 0, 0, 1559, 1549, 1, 0, 0, 0, 1559, 1551, 1, 0, 0, 0, 1559, 1554, 1, 0, 0, 0, 1559, 1557, 1, 0, 0, 0, 1560, 374, 1, 0, 0, 0, 1561, 1562, 5, 116, 0, 0, 1562, 1563, 5, 114, 0, 0, 1563, 1564, 5, 117, 0, 0, 1564, 1580, 5, 101, 0, 0, 1565, 1566, 5, 84, 0, 0, 1566, 1567, 5, 114, 0, 0, 1567, 1568, 5, 117, 0, 0, 1568, 1580, 5, 101, 0, 0, 1569, 1570, 5, 102, 0, 0, 1570, 1571, 5, 97, 0, 0, 1571, 1572, 5, 108, 0, 0, 1572, 1573, 5, 115, 0, 0, 1573, 1580, 5, 101, 0, 0, 1574, 1575, 5, 70, 0, 0, 1575, 1576, 5, 97, 0, 0, 1576, 1577, 5, 108, 0, 0, 1577, 1578, 5, 115, 0, 0, 1578, 1580, 5, 101, 0, 0, 1579, 1561, 1, 0, 0, 0, 1579, 1565, 1, 0, 0, 0, 1579, 1569, 1, 0, 0, 0, 1579, 1574, 1, 0, 0, 0, 1580, 376, 1, 0, 0, 0, 1581, 1582, 5, 78, 0, 0, 1582, 1583, 5, 97, 0, 0, 1583, 1584, 5, 78, 0, 0, 1584, 378, 1, 0, 0, 0, 1585, 1587, 7, 2, 0, 0, 1586, 1585, 1, 0, 0, 0, 1587, 1588, 1, 0, 0, 0, 1588, 1586, 1, 0, 0, 0, 1588, 1589, 1, 0, 0, 0, 1589, 1596, 1, 0, 0, 0, 1590, 1592, 5, 95, 0, 0, 1591, 1593, 7, 3, 0, 0, 1592, 1591, 1, 0, 0, 0, 1593, 1594, 1, 0, 0, 0, 1594, 1592, 1, 0, 0, 0, 1594, 1595, 1, 0, 0, 0, 1595, 1597, 1, 0, 0, 0, 1596, 1590, 1, 0, 0, 0, 1596, 1597, 1, 0, 0, 0, 1597, 380, 1, 0, 0, 0, 1598, 1599, 5, 47, 0, 0, 1599, 1600, 5, 47, 0, 0, 1600, 1604, 1, 0, 0, 0, 1601, 1603, 8, 4, 0, 0, 1602, 1601, 1, 0, 0, 0, 1603, 1606, 1, 0, 0, 0, 1604, 1602, 1, 0, 0, 0, 1604, 1605, 1, 0, 0, 0, 1605, 1611, 1, 0, 0, 0, 1606, 1604, 1, 0, 0, 0, 1607, 1609, 5, 13, 0, 0, 1608, 1607, 1, 0, 0, 0, 1608, 1609, 1, 0, 0, 0, 1609, 1610, 1, 0, 0, 0, 1610, 1612, 5, 10, 0, 0, 1611, 1608, 1, 0, 0, 0, 1611, 1612, 1, 0, 0, 0, 1612, 1625, 1, 0, 0, 0, 1613, 1614, 5, 47, 0, 0, 1614, 1615, 5, 42, 0, 0, 1615, 1619, 1, 0, 0, 0, 1616, 1618, 9, 0, 0, 0, 1617, 1616, 1, 0, 0, 0, 1618, 1621, 1, 0, 0, 0, 1619, 1620, 1, 0, 0, 0, 1619, 1617, 1, 0, 0, 0, 1620, 1622, 1, 0, 0, 0, 1621, 1619, 1, 0, 0, 0, 1622, 1623, 5, 42, 0, 0, 1623, 1625, 5, 47, 0, 0, 1624, 1598, 1, 0, 0, 0, 1624, 1613, 1, 0, 0, 0, 1625, 1626, 1, 0, 0, 0, 1626, 1627, 6, 190, 0, 0, 1627, 382, 1, 0, 0, 0, 1628, 1630, 7, 5, 0, 0, 1629, 1628, 1, 0, 0, 0, 1630, 1631, 1, 0, 0, 0, 1631, 1629, 1, 0, 0, 0, 1631, 1632, 1, 0, 0, 0, 1632, 1633, 1, 0, 0, 0, 1633, 1634, 6, 191, 0, 0, 1634, 384, 1, 0, 0, 0, 25, 0, 1488, 1493, 1499, 1504, 1509, 1515, 1519, 1522, 1525, 1530, 1533, 1536, 1539, 1559, 1579, 1588, 1594, 1596, 1604, 1608, 1611, 1619, 1624, 1631, 1, 6, 0, 0] \ No newline at end of file +[4, 0, 193, 1659, 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, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 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, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 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, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 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, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 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, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 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, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 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, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 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, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 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, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 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, 103, 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, 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, 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, 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, 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, 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, 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, 119, 1, 119, 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, 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, 122, 1, 122, 1, 122, 1, 122, 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, 125, 1, 125, 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, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 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, 132, 1, 132, 1, 132, 1, 132, 1, 133, 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, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 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, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 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, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 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, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 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, 147, 1, 147, 1, 147, 1, 147, 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, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 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, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 3, 185, 1513, 8, 185, 1, 185, 4, 185, 1516, 8, 185, 11, 185, 12, 185, 1517, 1, 185, 1, 185, 1, 186, 1, 186, 3, 186, 1524, 8, 186, 1, 186, 4, 186, 1527, 8, 186, 11, 186, 12, 186, 1528, 1, 187, 4, 187, 1532, 8, 187, 11, 187, 12, 187, 1533, 1, 187, 1, 187, 5, 187, 1538, 8, 187, 10, 187, 12, 187, 1541, 9, 187, 1, 187, 3, 187, 1544, 8, 187, 1, 187, 3, 187, 1547, 8, 187, 1, 187, 3, 187, 1550, 8, 187, 1, 187, 4, 187, 1553, 8, 187, 11, 187, 12, 187, 1554, 1, 187, 3, 187, 1558, 8, 187, 1, 187, 3, 187, 1561, 8, 187, 1, 187, 3, 187, 1564, 8, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 3, 188, 1584, 8, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 3, 189, 1604, 8, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 4, 191, 1611, 8, 191, 11, 191, 12, 191, 1612, 1, 191, 1, 191, 4, 191, 1617, 8, 191, 11, 191, 12, 191, 1618, 3, 191, 1621, 8, 191, 1, 192, 1, 192, 1, 192, 1, 192, 5, 192, 1627, 8, 192, 10, 192, 12, 192, 1630, 9, 192, 1, 192, 3, 192, 1633, 8, 192, 1, 192, 3, 192, 1636, 8, 192, 1, 192, 1, 192, 1, 192, 1, 192, 5, 192, 1642, 8, 192, 10, 192, 12, 192, 1645, 9, 192, 1, 192, 1, 192, 3, 192, 1649, 8, 192, 1, 192, 1, 192, 1, 193, 4, 193, 1654, 8, 193, 11, 193, 12, 193, 1655, 1, 193, 1, 193, 1, 1643, 0, 194, 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, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 0, 375, 187, 377, 188, 379, 189, 381, 190, 383, 191, 385, 192, 387, 193, 1, 0, 6, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 5, 0, 65, 90, 97, 122, 880, 1279, 7936, 8191, 8495, 8495, 5, 0, 48, 57, 65, 90, 97, 122, 880, 1279, 7936, 8191, 2, 0, 10, 10, 13, 13, 2, 0, 9, 9, 32, 32, 1690, 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, 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, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 1, 389, 1, 0, 0, 0, 3, 391, 1, 0, 0, 0, 5, 393, 1, 0, 0, 0, 7, 395, 1, 0, 0, 0, 9, 397, 1, 0, 0, 0, 11, 399, 1, 0, 0, 0, 13, 403, 1, 0, 0, 0, 15, 405, 1, 0, 0, 0, 17, 407, 1, 0, 0, 0, 19, 411, 1, 0, 0, 0, 21, 421, 1, 0, 0, 0, 23, 424, 1, 0, 0, 0, 25, 430, 1, 0, 0, 0, 27, 433, 1, 0, 0, 0, 29, 445, 1, 0, 0, 0, 31, 447, 1, 0, 0, 0, 33, 450, 1, 0, 0, 0, 35, 457, 1, 0, 0, 0, 37, 459, 1, 0, 0, 0, 39, 468, 1, 0, 0, 0, 41, 470, 1, 0, 0, 0, 43, 478, 1, 0, 0, 0, 45, 480, 1, 0, 0, 0, 47, 483, 1, 0, 0, 0, 49, 486, 1, 0, 0, 0, 51, 488, 1, 0, 0, 0, 53, 490, 1, 0, 0, 0, 55, 492, 1, 0, 0, 0, 57, 495, 1, 0, 0, 0, 59, 497, 1, 0, 0, 0, 61, 499, 1, 0, 0, 0, 63, 501, 1, 0, 0, 0, 65, 505, 1, 0, 0, 0, 67, 509, 1, 0, 0, 0, 69, 511, 1, 0, 0, 0, 71, 515, 1, 0, 0, 0, 73, 518, 1, 0, 0, 0, 75, 526, 1, 0, 0, 0, 77, 529, 1, 0, 0, 0, 79, 538, 1, 0, 0, 0, 81, 541, 1, 0, 0, 0, 83, 543, 1, 0, 0, 0, 85, 550, 1, 0, 0, 0, 87, 552, 1, 0, 0, 0, 89, 560, 1, 0, 0, 0, 91, 563, 1, 0, 0, 0, 93, 570, 1, 0, 0, 0, 95, 572, 1, 0, 0, 0, 97, 574, 1, 0, 0, 0, 99, 576, 1, 0, 0, 0, 101, 580, 1, 0, 0, 0, 103, 584, 1, 0, 0, 0, 105, 587, 1, 0, 0, 0, 107, 590, 1, 0, 0, 0, 109, 592, 1, 0, 0, 0, 111, 594, 1, 0, 0, 0, 113, 597, 1, 0, 0, 0, 115, 599, 1, 0, 0, 0, 117, 601, 1, 0, 0, 0, 119, 603, 1, 0, 0, 0, 121, 608, 1, 0, 0, 0, 123, 615, 1, 0, 0, 0, 125, 621, 1, 0, 0, 0, 127, 626, 1, 0, 0, 0, 129, 632, 1, 0, 0, 0, 131, 638, 1, 0, 0, 0, 133, 643, 1, 0, 0, 0, 135, 647, 1, 0, 0, 0, 137, 652, 1, 0, 0, 0, 139, 657, 1, 0, 0, 0, 141, 662, 1, 0, 0, 0, 143, 667, 1, 0, 0, 0, 145, 674, 1, 0, 0, 0, 147, 679, 1, 0, 0, 0, 149, 684, 1, 0, 0, 0, 151, 691, 1, 0, 0, 0, 153, 696, 1, 0, 0, 0, 155, 704, 1, 0, 0, 0, 157, 712, 1, 0, 0, 0, 159, 720, 1, 0, 0, 0, 161, 730, 1, 0, 0, 0, 163, 738, 1, 0, 0, 0, 165, 748, 1, 0, 0, 0, 167, 756, 1, 0, 0, 0, 169, 762, 1, 0, 0, 0, 171, 768, 1, 0, 0, 0, 173, 774, 1, 0, 0, 0, 175, 780, 1, 0, 0, 0, 177, 788, 1, 0, 0, 0, 179, 794, 1, 0, 0, 0, 181, 802, 1, 0, 0, 0, 183, 808, 1, 0, 0, 0, 185, 816, 1, 0, 0, 0, 187, 822, 1, 0, 0, 0, 189, 826, 1, 0, 0, 0, 191, 832, 1, 0, 0, 0, 193, 836, 1, 0, 0, 0, 195, 842, 1, 0, 0, 0, 197, 846, 1, 0, 0, 0, 199, 854, 1, 0, 0, 0, 201, 860, 1, 0, 0, 0, 203, 865, 1, 0, 0, 0, 205, 871, 1, 0, 0, 0, 207, 876, 1, 0, 0, 0, 209, 884, 1, 0, 0, 0, 211, 890, 1, 0, 0, 0, 213, 897, 1, 0, 0, 0, 215, 905, 1, 0, 0, 0, 217, 911, 1, 0, 0, 0, 219, 920, 1, 0, 0, 0, 221, 927, 1, 0, 0, 0, 223, 935, 1, 0, 0, 0, 225, 941, 1, 0, 0, 0, 227, 950, 1, 0, 0, 0, 229, 957, 1, 0, 0, 0, 231, 965, 1, 0, 0, 0, 233, 971, 1, 0, 0, 0, 235, 980, 1, 0, 0, 0, 237, 987, 1, 0, 0, 0, 239, 995, 1, 0, 0, 0, 241, 1004, 1, 0, 0, 0, 243, 1014, 1, 0, 0, 0, 245, 1021, 1, 0, 0, 0, 247, 1032, 1, 0, 0, 0, 249, 1039, 1, 0, 0, 0, 251, 1047, 1, 0, 0, 0, 253, 1054, 1, 0, 0, 0, 255, 1063, 1, 0, 0, 0, 257, 1072, 1, 0, 0, 0, 259, 1082, 1, 0, 0, 0, 261, 1090, 1, 0, 0, 0, 263, 1101, 1, 0, 0, 0, 265, 1108, 1, 0, 0, 0, 267, 1119, 1, 0, 0, 0, 269, 1126, 1, 0, 0, 0, 271, 1138, 1, 0, 0, 0, 273, 1148, 1, 0, 0, 0, 275, 1155, 1, 0, 0, 0, 277, 1166, 1, 0, 0, 0, 279, 1178, 1, 0, 0, 0, 281, 1183, 1, 0, 0, 0, 283, 1192, 1, 0, 0, 0, 285, 1200, 1, 0, 0, 0, 287, 1205, 1, 0, 0, 0, 289, 1211, 1, 0, 0, 0, 291, 1216, 1, 0, 0, 0, 293, 1221, 1, 0, 0, 0, 295, 1228, 1, 0, 0, 0, 297, 1239, 1, 0, 0, 0, 299, 1245, 1, 0, 0, 0, 301, 1255, 1, 0, 0, 0, 303, 1262, 1, 0, 0, 0, 305, 1276, 1, 0, 0, 0, 307, 1288, 1, 0, 0, 0, 309, 1295, 1, 0, 0, 0, 311, 1305, 1, 0, 0, 0, 313, 1312, 1, 0, 0, 0, 315, 1318, 1, 0, 0, 0, 317, 1327, 1, 0, 0, 0, 319, 1334, 1, 0, 0, 0, 321, 1339, 1, 0, 0, 0, 323, 1344, 1, 0, 0, 0, 325, 1352, 1, 0, 0, 0, 327, 1360, 1, 0, 0, 0, 329, 1365, 1, 0, 0, 0, 331, 1370, 1, 0, 0, 0, 333, 1380, 1, 0, 0, 0, 335, 1389, 1, 0, 0, 0, 337, 1396, 1, 0, 0, 0, 339, 1401, 1, 0, 0, 0, 341, 1407, 1, 0, 0, 0, 343, 1413, 1, 0, 0, 0, 345, 1417, 1, 0, 0, 0, 347, 1421, 1, 0, 0, 0, 349, 1432, 1, 0, 0, 0, 351, 1441, 1, 0, 0, 0, 353, 1445, 1, 0, 0, 0, 355, 1449, 1, 0, 0, 0, 357, 1454, 1, 0, 0, 0, 359, 1459, 1, 0, 0, 0, 361, 1466, 1, 0, 0, 0, 363, 1477, 1, 0, 0, 0, 365, 1485, 1, 0, 0, 0, 367, 1496, 1, 0, 0, 0, 369, 1503, 1, 0, 0, 0, 371, 1515, 1, 0, 0, 0, 373, 1521, 1, 0, 0, 0, 375, 1563, 1, 0, 0, 0, 377, 1583, 1, 0, 0, 0, 379, 1603, 1, 0, 0, 0, 381, 1605, 1, 0, 0, 0, 383, 1610, 1, 0, 0, 0, 385, 1648, 1, 0, 0, 0, 387, 1653, 1, 0, 0, 0, 389, 390, 5, 33, 0, 0, 390, 2, 1, 0, 0, 0, 391, 392, 5, 94, 0, 0, 392, 4, 1, 0, 0, 0, 393, 394, 5, 45, 0, 0, 394, 6, 1, 0, 0, 0, 395, 396, 5, 43, 0, 0, 396, 8, 1, 0, 0, 0, 397, 398, 5, 42, 0, 0, 398, 10, 1, 0, 0, 0, 399, 400, 5, 46, 0, 0, 400, 401, 5, 46, 0, 0, 401, 402, 5, 46, 0, 0, 402, 12, 1, 0, 0, 0, 403, 404, 5, 8230, 0, 0, 404, 14, 1, 0, 0, 0, 405, 406, 5, 47, 0, 0, 406, 16, 1, 0, 0, 0, 407, 408, 5, 109, 0, 0, 408, 409, 5, 111, 0, 0, 409, 410, 5, 100, 0, 0, 410, 18, 1, 0, 0, 0, 411, 412, 5, 105, 0, 0, 412, 413, 5, 110, 0, 0, 413, 414, 5, 116, 0, 0, 414, 415, 5, 101, 0, 0, 415, 416, 5, 114, 0, 0, 416, 417, 5, 115, 0, 0, 417, 418, 5, 101, 0, 0, 418, 419, 5, 99, 0, 0, 419, 420, 5, 116, 0, 0, 420, 20, 1, 0, 0, 0, 421, 422, 5, 47, 0, 0, 422, 423, 5, 92, 0, 0, 423, 22, 1, 0, 0, 0, 424, 425, 5, 117, 0, 0, 425, 426, 5, 110, 0, 0, 426, 427, 5, 105, 0, 0, 427, 428, 5, 116, 0, 0, 428, 429, 5, 101, 0, 0, 429, 24, 1, 0, 0, 0, 430, 431, 5, 92, 0, 0, 431, 432, 5, 47, 0, 0, 432, 26, 1, 0, 0, 0, 433, 434, 5, 115, 0, 0, 434, 435, 5, 101, 0, 0, 435, 436, 5, 116, 0, 0, 436, 437, 5, 115, 0, 0, 437, 438, 5, 117, 0, 0, 438, 439, 5, 98, 0, 0, 439, 440, 5, 116, 0, 0, 440, 441, 5, 114, 0, 0, 441, 442, 5, 97, 0, 0, 442, 443, 5, 99, 0, 0, 443, 444, 5, 116, 0, 0, 444, 28, 1, 0, 0, 0, 445, 446, 5, 92, 0, 0, 446, 30, 1, 0, 0, 0, 447, 448, 5, 105, 0, 0, 448, 449, 5, 110, 0, 0, 449, 32, 1, 0, 0, 0, 450, 451, 5, 115, 0, 0, 451, 452, 5, 117, 0, 0, 452, 453, 5, 98, 0, 0, 453, 454, 5, 115, 0, 0, 454, 455, 5, 101, 0, 0, 455, 456, 5, 116, 0, 0, 456, 34, 1, 0, 0, 0, 457, 458, 5, 8838, 0, 0, 458, 36, 1, 0, 0, 0, 459, 460, 5, 115, 0, 0, 460, 461, 5, 117, 0, 0, 461, 462, 5, 112, 0, 0, 462, 463, 5, 101, 0, 0, 463, 464, 5, 114, 0, 0, 464, 465, 5, 115, 0, 0, 465, 466, 5, 101, 0, 0, 466, 467, 5, 116, 0, 0, 467, 38, 1, 0, 0, 0, 468, 469, 5, 8839, 0, 0, 469, 40, 1, 0, 0, 0, 470, 471, 5, 100, 0, 0, 471, 472, 5, 105, 0, 0, 472, 473, 5, 118, 0, 0, 473, 474, 5, 105, 0, 0, 474, 475, 5, 100, 0, 0, 475, 476, 5, 101, 0, 0, 476, 477, 5, 115, 0, 0, 477, 42, 1, 0, 0, 0, 478, 479, 5, 124, 0, 0, 479, 44, 1, 0, 0, 0, 480, 481, 5, 62, 0, 0, 481, 482, 5, 61, 0, 0, 482, 46, 1, 0, 0, 0, 483, 484, 5, 60, 0, 0, 484, 485, 5, 61, 0, 0, 485, 48, 1, 0, 0, 0, 486, 487, 5, 62, 0, 0, 487, 50, 1, 0, 0, 0, 488, 489, 5, 60, 0, 0, 489, 52, 1, 0, 0, 0, 490, 491, 5, 61, 0, 0, 491, 54, 1, 0, 0, 0, 492, 493, 5, 60, 0, 0, 493, 494, 5, 62, 0, 0, 494, 56, 1, 0, 0, 0, 495, 496, 5, 8801, 0, 0, 496, 58, 1, 0, 0, 0, 497, 498, 5, 40, 0, 0, 498, 60, 1, 0, 0, 0, 499, 500, 5, 41, 0, 0, 500, 62, 1, 0, 0, 0, 501, 502, 5, 110, 0, 0, 502, 503, 5, 111, 0, 0, 503, 504, 5, 116, 0, 0, 504, 64, 1, 0, 0, 0, 505, 506, 5, 97, 0, 0, 506, 507, 5, 110, 0, 0, 507, 508, 5, 100, 0, 0, 508, 66, 1, 0, 0, 0, 509, 510, 5, 38, 0, 0, 510, 68, 1, 0, 0, 0, 511, 512, 5, 120, 0, 0, 512, 513, 5, 111, 0, 0, 513, 514, 5, 114, 0, 0, 514, 70, 1, 0, 0, 0, 515, 516, 5, 111, 0, 0, 516, 517, 5, 114, 0, 0, 517, 72, 1, 0, 0, 0, 518, 519, 5, 105, 0, 0, 519, 520, 5, 109, 0, 0, 520, 521, 5, 112, 0, 0, 521, 522, 5, 108, 0, 0, 522, 523, 5, 105, 0, 0, 523, 524, 5, 101, 0, 0, 524, 525, 5, 115, 0, 0, 525, 74, 1, 0, 0, 0, 526, 527, 5, 45, 0, 0, 527, 528, 5, 62, 0, 0, 528, 76, 1, 0, 0, 0, 529, 530, 5, 112, 0, 0, 530, 531, 5, 114, 0, 0, 531, 532, 5, 111, 0, 0, 532, 533, 5, 118, 0, 0, 533, 534, 5, 105, 0, 0, 534, 535, 5, 100, 0, 0, 535, 536, 5, 101, 0, 0, 536, 537, 5, 100, 0, 0, 537, 78, 1, 0, 0, 0, 538, 539, 5, 61, 0, 0, 539, 540, 5, 62, 0, 0, 540, 80, 1, 0, 0, 0, 541, 542, 5, 58, 0, 0, 542, 82, 1, 0, 0, 0, 543, 544, 5, 102, 0, 0, 544, 545, 5, 111, 0, 0, 545, 546, 5, 114, 0, 0, 546, 547, 5, 97, 0, 0, 547, 548, 5, 108, 0, 0, 548, 549, 5, 108, 0, 0, 549, 84, 1, 0, 0, 0, 550, 551, 5, 8704, 0, 0, 551, 86, 1, 0, 0, 0, 552, 553, 5, 101, 0, 0, 553, 554, 5, 120, 0, 0, 554, 555, 5, 105, 0, 0, 555, 556, 5, 115, 0, 0, 556, 557, 5, 116, 0, 0, 557, 558, 5, 115, 0, 0, 558, 559, 5, 33, 0, 0, 559, 88, 1, 0, 0, 0, 560, 561, 5, 8707, 0, 0, 561, 562, 5, 33, 0, 0, 562, 90, 1, 0, 0, 0, 563, 564, 5, 101, 0, 0, 564, 565, 5, 120, 0, 0, 565, 566, 5, 105, 0, 0, 566, 567, 5, 115, 0, 0, 567, 568, 5, 116, 0, 0, 568, 569, 5, 115, 0, 0, 569, 92, 1, 0, 0, 0, 570, 571, 5, 8707, 0, 0, 571, 94, 1, 0, 0, 0, 572, 573, 5, 44, 0, 0, 573, 96, 1, 0, 0, 0, 574, 575, 5, 59, 0, 0, 575, 98, 1, 0, 0, 0, 576, 577, 5, 43, 0, 0, 577, 578, 5, 111, 0, 0, 578, 579, 5, 111, 0, 0, 579, 100, 1, 0, 0, 0, 580, 581, 5, 45, 0, 0, 581, 582, 5, 111, 0, 0, 582, 583, 5, 111, 0, 0, 583, 102, 1, 0, 0, 0, 584, 585, 5, 40, 0, 0, 585, 586, 5, 124, 0, 0, 586, 104, 1, 0, 0, 0, 587, 588, 5, 124, 0, 0, 588, 589, 5, 41, 0, 0, 589, 106, 1, 0, 0, 0, 590, 591, 5, 35, 0, 0, 591, 108, 1, 0, 0, 0, 592, 593, 5, 91, 0, 0, 593, 110, 1, 0, 0, 0, 594, 595, 5, 93, 0, 0, 595, 596, 5, 84, 0, 0, 596, 112, 1, 0, 0, 0, 597, 598, 5, 93, 0, 0, 598, 114, 1, 0, 0, 0, 599, 600, 5, 123, 0, 0, 600, 116, 1, 0, 0, 0, 601, 602, 5, 125, 0, 0, 602, 118, 1, 0, 0, 0, 603, 604, 5, 108, 0, 0, 604, 605, 5, 111, 0, 0, 605, 606, 5, 103, 0, 0, 606, 607, 5, 40, 0, 0, 607, 120, 1, 0, 0, 0, 608, 609, 5, 108, 0, 0, 609, 610, 5, 111, 0, 0, 610, 611, 5, 103, 0, 0, 611, 612, 5, 49, 0, 0, 612, 613, 5, 48, 0, 0, 613, 614, 5, 40, 0, 0, 614, 122, 1, 0, 0, 0, 615, 616, 5, 108, 0, 0, 616, 617, 5, 111, 0, 0, 617, 618, 5, 103, 0, 0, 618, 619, 5, 50, 0, 0, 619, 620, 5, 40, 0, 0, 620, 124, 1, 0, 0, 0, 621, 622, 5, 112, 0, 0, 622, 623, 5, 111, 0, 0, 623, 624, 5, 119, 0, 0, 624, 625, 5, 40, 0, 0, 625, 126, 1, 0, 0, 0, 626, 627, 5, 115, 0, 0, 627, 628, 5, 113, 0, 0, 628, 629, 5, 114, 0, 0, 629, 630, 5, 116, 0, 0, 630, 631, 5, 40, 0, 0, 631, 128, 1, 0, 0, 0, 632, 633, 5, 99, 0, 0, 633, 634, 5, 98, 0, 0, 634, 635, 5, 114, 0, 0, 635, 636, 5, 116, 0, 0, 636, 637, 5, 40, 0, 0, 637, 130, 1, 0, 0, 0, 638, 639, 5, 115, 0, 0, 639, 640, 5, 113, 0, 0, 640, 641, 5, 114, 0, 0, 641, 642, 5, 40, 0, 0, 642, 132, 1, 0, 0, 0, 643, 644, 5, 108, 0, 0, 644, 645, 5, 110, 0, 0, 645, 646, 5, 40, 0, 0, 646, 134, 1, 0, 0, 0, 647, 648, 5, 101, 0, 0, 648, 649, 5, 120, 0, 0, 649, 650, 5, 112, 0, 0, 650, 651, 5, 40, 0, 0, 651, 136, 1, 0, 0, 0, 652, 653, 5, 115, 0, 0, 653, 654, 5, 105, 0, 0, 654, 655, 5, 110, 0, 0, 655, 656, 5, 40, 0, 0, 656, 138, 1, 0, 0, 0, 657, 658, 5, 99, 0, 0, 658, 659, 5, 111, 0, 0, 659, 660, 5, 115, 0, 0, 660, 661, 5, 40, 0, 0, 661, 140, 1, 0, 0, 0, 662, 663, 5, 116, 0, 0, 663, 664, 5, 97, 0, 0, 664, 665, 5, 110, 0, 0, 665, 666, 5, 40, 0, 0, 666, 142, 1, 0, 0, 0, 667, 668, 5, 99, 0, 0, 668, 669, 5, 111, 0, 0, 669, 670, 5, 116, 0, 0, 670, 671, 5, 97, 0, 0, 671, 672, 5, 110, 0, 0, 672, 673, 5, 40, 0, 0, 673, 144, 1, 0, 0, 0, 674, 675, 5, 99, 0, 0, 675, 676, 5, 111, 0, 0, 676, 677, 5, 116, 0, 0, 677, 678, 5, 40, 0, 0, 678, 146, 1, 0, 0, 0, 679, 680, 5, 115, 0, 0, 680, 681, 5, 101, 0, 0, 681, 682, 5, 99, 0, 0, 682, 683, 5, 40, 0, 0, 683, 148, 1, 0, 0, 0, 684, 685, 5, 99, 0, 0, 685, 686, 5, 111, 0, 0, 686, 687, 5, 115, 0, 0, 687, 688, 5, 101, 0, 0, 688, 689, 5, 99, 0, 0, 689, 690, 5, 40, 0, 0, 690, 150, 1, 0, 0, 0, 691, 692, 5, 99, 0, 0, 692, 693, 5, 115, 0, 0, 693, 694, 5, 99, 0, 0, 694, 695, 5, 40, 0, 0, 695, 152, 1, 0, 0, 0, 696, 697, 5, 97, 0, 0, 697, 698, 5, 114, 0, 0, 698, 699, 5, 99, 0, 0, 699, 700, 5, 115, 0, 0, 700, 701, 5, 105, 0, 0, 701, 702, 5, 110, 0, 0, 702, 703, 5, 40, 0, 0, 703, 154, 1, 0, 0, 0, 704, 705, 5, 97, 0, 0, 705, 706, 5, 114, 0, 0, 706, 707, 5, 99, 0, 0, 707, 708, 5, 99, 0, 0, 708, 709, 5, 111, 0, 0, 709, 710, 5, 115, 0, 0, 710, 711, 5, 40, 0, 0, 711, 156, 1, 0, 0, 0, 712, 713, 5, 97, 0, 0, 713, 714, 5, 114, 0, 0, 714, 715, 5, 99, 0, 0, 715, 716, 5, 116, 0, 0, 716, 717, 5, 97, 0, 0, 717, 718, 5, 110, 0, 0, 718, 719, 5, 40, 0, 0, 719, 158, 1, 0, 0, 0, 720, 721, 5, 97, 0, 0, 721, 722, 5, 114, 0, 0, 722, 723, 5, 99, 0, 0, 723, 724, 5, 99, 0, 0, 724, 725, 5, 111, 0, 0, 725, 726, 5, 116, 0, 0, 726, 727, 5, 97, 0, 0, 727, 728, 5, 110, 0, 0, 728, 729, 5, 40, 0, 0, 729, 160, 1, 0, 0, 0, 730, 731, 5, 97, 0, 0, 731, 732, 5, 114, 0, 0, 732, 733, 5, 99, 0, 0, 733, 734, 5, 115, 0, 0, 734, 735, 5, 101, 0, 0, 735, 736, 5, 99, 0, 0, 736, 737, 5, 40, 0, 0, 737, 162, 1, 0, 0, 0, 738, 739, 5, 97, 0, 0, 739, 740, 5, 114, 0, 0, 740, 741, 5, 99, 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, 40, 0, 0, 747, 164, 1, 0, 0, 0, 748, 749, 5, 97, 0, 0, 749, 750, 5, 114, 0, 0, 750, 751, 5, 99, 0, 0, 751, 752, 5, 99, 0, 0, 752, 753, 5, 115, 0, 0, 753, 754, 5, 99, 0, 0, 754, 755, 5, 40, 0, 0, 755, 166, 1, 0, 0, 0, 756, 757, 5, 97, 0, 0, 757, 758, 5, 99, 0, 0, 758, 759, 5, 115, 0, 0, 759, 760, 5, 99, 0, 0, 760, 761, 5, 40, 0, 0, 761, 168, 1, 0, 0, 0, 762, 763, 5, 97, 0, 0, 763, 764, 5, 115, 0, 0, 764, 765, 5, 105, 0, 0, 765, 766, 5, 110, 0, 0, 766, 767, 5, 40, 0, 0, 767, 170, 1, 0, 0, 0, 768, 769, 5, 97, 0, 0, 769, 770, 5, 99, 0, 0, 770, 771, 5, 111, 0, 0, 771, 772, 5, 115, 0, 0, 772, 773, 5, 40, 0, 0, 773, 172, 1, 0, 0, 0, 774, 775, 5, 97, 0, 0, 775, 776, 5, 116, 0, 0, 776, 777, 5, 97, 0, 0, 777, 778, 5, 110, 0, 0, 778, 779, 5, 40, 0, 0, 779, 174, 1, 0, 0, 0, 780, 781, 5, 97, 0, 0, 781, 782, 5, 99, 0, 0, 782, 783, 5, 111, 0, 0, 783, 784, 5, 116, 0, 0, 784, 785, 5, 97, 0, 0, 785, 786, 5, 110, 0, 0, 786, 787, 5, 40, 0, 0, 787, 176, 1, 0, 0, 0, 788, 789, 5, 97, 0, 0, 789, 790, 5, 115, 0, 0, 790, 791, 5, 101, 0, 0, 791, 792, 5, 99, 0, 0, 792, 793, 5, 40, 0, 0, 793, 178, 1, 0, 0, 0, 794, 795, 5, 97, 0, 0, 795, 796, 5, 99, 0, 0, 796, 797, 5, 111, 0, 0, 797, 798, 5, 115, 0, 0, 798, 799, 5, 101, 0, 0, 799, 800, 5, 99, 0, 0, 800, 801, 5, 40, 0, 0, 801, 180, 1, 0, 0, 0, 802, 803, 5, 97, 0, 0, 803, 804, 5, 99, 0, 0, 804, 805, 5, 111, 0, 0, 805, 806, 5, 116, 0, 0, 806, 807, 5, 40, 0, 0, 807, 182, 1, 0, 0, 0, 808, 809, 5, 97, 0, 0, 809, 810, 5, 114, 0, 0, 810, 811, 5, 99, 0, 0, 811, 812, 5, 99, 0, 0, 812, 813, 5, 111, 0, 0, 813, 814, 5, 116, 0, 0, 814, 815, 5, 40, 0, 0, 815, 184, 1, 0, 0, 0, 816, 817, 5, 115, 0, 0, 817, 818, 5, 105, 0, 0, 818, 819, 5, 110, 0, 0, 819, 820, 5, 104, 0, 0, 820, 821, 5, 40, 0, 0, 821, 186, 1, 0, 0, 0, 822, 823, 5, 115, 0, 0, 823, 824, 5, 104, 0, 0, 824, 825, 5, 40, 0, 0, 825, 188, 1, 0, 0, 0, 826, 827, 5, 99, 0, 0, 827, 828, 5, 111, 0, 0, 828, 829, 5, 115, 0, 0, 829, 830, 5, 104, 0, 0, 830, 831, 5, 40, 0, 0, 831, 190, 1, 0, 0, 0, 832, 833, 5, 99, 0, 0, 833, 834, 5, 104, 0, 0, 834, 835, 5, 40, 0, 0, 835, 192, 1, 0, 0, 0, 836, 837, 5, 116, 0, 0, 837, 838, 5, 97, 0, 0, 838, 839, 5, 110, 0, 0, 839, 840, 5, 104, 0, 0, 840, 841, 5, 40, 0, 0, 841, 194, 1, 0, 0, 0, 842, 843, 5, 116, 0, 0, 843, 844, 5, 104, 0, 0, 844, 845, 5, 40, 0, 0, 845, 196, 1, 0, 0, 0, 846, 847, 5, 99, 0, 0, 847, 848, 5, 111, 0, 0, 848, 849, 5, 116, 0, 0, 849, 850, 5, 97, 0, 0, 850, 851, 5, 110, 0, 0, 851, 852, 5, 104, 0, 0, 852, 853, 5, 40, 0, 0, 853, 198, 1, 0, 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, 200, 1, 0, 0, 0, 860, 861, 5, 99, 0, 0, 861, 862, 5, 116, 0, 0, 862, 863, 5, 104, 0, 0, 863, 864, 5, 40, 0, 0, 864, 202, 1, 0, 0, 0, 865, 866, 5, 115, 0, 0, 866, 867, 5, 101, 0, 0, 867, 868, 5, 99, 0, 0, 868, 869, 5, 104, 0, 0, 869, 870, 5, 40, 0, 0, 870, 204, 1, 0, 0, 0, 871, 872, 5, 115, 0, 0, 872, 873, 5, 99, 0, 0, 873, 874, 5, 104, 0, 0, 874, 875, 5, 40, 0, 0, 875, 206, 1, 0, 0, 0, 876, 877, 5, 99, 0, 0, 877, 878, 5, 111, 0, 0, 878, 879, 5, 115, 0, 0, 879, 880, 5, 101, 0, 0, 880, 881, 5, 99, 0, 0, 881, 882, 5, 104, 0, 0, 882, 883, 5, 40, 0, 0, 883, 208, 1, 0, 0, 0, 884, 885, 5, 99, 0, 0, 885, 886, 5, 115, 0, 0, 886, 887, 5, 99, 0, 0, 887, 888, 5, 104, 0, 0, 888, 889, 5, 40, 0, 0, 889, 210, 1, 0, 0, 0, 890, 891, 5, 97, 0, 0, 891, 892, 5, 115, 0, 0, 892, 893, 5, 105, 0, 0, 893, 894, 5, 110, 0, 0, 894, 895, 5, 104, 0, 0, 895, 896, 5, 40, 0, 0, 896, 212, 1, 0, 0, 0, 897, 898, 5, 97, 0, 0, 898, 899, 5, 114, 0, 0, 899, 900, 5, 115, 0, 0, 900, 901, 5, 105, 0, 0, 901, 902, 5, 110, 0, 0, 902, 903, 5, 104, 0, 0, 903, 904, 5, 40, 0, 0, 904, 214, 1, 0, 0, 0, 905, 906, 5, 97, 0, 0, 906, 907, 5, 114, 0, 0, 907, 908, 5, 115, 0, 0, 908, 909, 5, 104, 0, 0, 909, 910, 5, 40, 0, 0, 910, 216, 1, 0, 0, 0, 911, 912, 5, 97, 0, 0, 912, 913, 5, 114, 0, 0, 913, 914, 5, 99, 0, 0, 914, 915, 5, 115, 0, 0, 915, 916, 5, 105, 0, 0, 916, 917, 5, 110, 0, 0, 917, 918, 5, 104, 0, 0, 918, 919, 5, 40, 0, 0, 919, 218, 1, 0, 0, 0, 920, 921, 5, 97, 0, 0, 921, 922, 5, 99, 0, 0, 922, 923, 5, 111, 0, 0, 923, 924, 5, 115, 0, 0, 924, 925, 5, 104, 0, 0, 925, 926, 5, 40, 0, 0, 926, 220, 1, 0, 0, 0, 927, 928, 5, 97, 0, 0, 928, 929, 5, 114, 0, 0, 929, 930, 5, 99, 0, 0, 930, 931, 5, 111, 0, 0, 931, 932, 5, 115, 0, 0, 932, 933, 5, 104, 0, 0, 933, 934, 5, 40, 0, 0, 934, 222, 1, 0, 0, 0, 935, 936, 5, 97, 0, 0, 936, 937, 5, 114, 0, 0, 937, 938, 5, 99, 0, 0, 938, 939, 5, 104, 0, 0, 939, 940, 5, 40, 0, 0, 940, 224, 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, 99, 0, 0, 945, 946, 5, 111, 0, 0, 946, 947, 5, 115, 0, 0, 947, 948, 5, 104, 0, 0, 948, 949, 5, 40, 0, 0, 949, 226, 1, 0, 0, 0, 950, 951, 5, 97, 0, 0, 951, 952, 5, 116, 0, 0, 952, 953, 5, 97, 0, 0, 953, 954, 5, 110, 0, 0, 954, 955, 5, 104, 0, 0, 955, 956, 5, 40, 0, 0, 956, 228, 1, 0, 0, 0, 957, 958, 5, 97, 0, 0, 958, 959, 5, 114, 0, 0, 959, 960, 5, 116, 0, 0, 960, 961, 5, 97, 0, 0, 961, 962, 5, 110, 0, 0, 962, 963, 5, 104, 0, 0, 963, 964, 5, 40, 0, 0, 964, 230, 1, 0, 0, 0, 965, 966, 5, 97, 0, 0, 966, 967, 5, 114, 0, 0, 967, 968, 5, 116, 0, 0, 968, 969, 5, 104, 0, 0, 969, 970, 5, 40, 0, 0, 970, 232, 1, 0, 0, 0, 971, 972, 5, 97, 0, 0, 972, 973, 5, 114, 0, 0, 973, 974, 5, 99, 0, 0, 974, 975, 5, 116, 0, 0, 975, 976, 5, 97, 0, 0, 976, 977, 5, 110, 0, 0, 977, 978, 5, 104, 0, 0, 978, 979, 5, 40, 0, 0, 979, 234, 1, 0, 0, 0, 980, 981, 5, 97, 0, 0, 981, 982, 5, 99, 0, 0, 982, 983, 5, 111, 0, 0, 983, 984, 5, 116, 0, 0, 984, 985, 5, 104, 0, 0, 985, 986, 5, 40, 0, 0, 986, 236, 1, 0, 0, 0, 987, 988, 5, 97, 0, 0, 988, 989, 5, 114, 0, 0, 989, 990, 5, 99, 0, 0, 990, 991, 5, 111, 0, 0, 991, 992, 5, 116, 0, 0, 992, 993, 5, 104, 0, 0, 993, 994, 5, 40, 0, 0, 994, 238, 1, 0, 0, 0, 995, 996, 5, 97, 0, 0, 996, 997, 5, 99, 0, 0, 997, 998, 5, 111, 0, 0, 998, 999, 5, 116, 0, 0, 999, 1000, 5, 97, 0, 0, 1000, 1001, 5, 110, 0, 0, 1001, 1002, 5, 104, 0, 0, 1002, 1003, 5, 40, 0, 0, 1003, 240, 1, 0, 0, 0, 1004, 1005, 5, 97, 0, 0, 1005, 1006, 5, 114, 0, 0, 1006, 1007, 5, 99, 0, 0, 1007, 1008, 5, 111, 0, 0, 1008, 1009, 5, 116, 0, 0, 1009, 1010, 5, 97, 0, 0, 1010, 1011, 5, 110, 0, 0, 1011, 1012, 5, 104, 0, 0, 1012, 1013, 5, 40, 0, 0, 1013, 242, 1, 0, 0, 0, 1014, 1015, 5, 97, 0, 0, 1015, 1016, 5, 114, 0, 0, 1016, 1017, 5, 99, 0, 0, 1017, 1018, 5, 116, 0, 0, 1018, 1019, 5, 104, 0, 0, 1019, 1020, 5, 40, 0, 0, 1020, 244, 1, 0, 0, 0, 1021, 1022, 5, 97, 0, 0, 1022, 1023, 5, 114, 0, 0, 1023, 1024, 5, 99, 0, 0, 1024, 1025, 5, 99, 0, 0, 1025, 1026, 5, 111, 0, 0, 1026, 1027, 5, 116, 0, 0, 1027, 1028, 5, 97, 0, 0, 1028, 1029, 5, 110, 0, 0, 1029, 1030, 5, 104, 0, 0, 1030, 1031, 5, 40, 0, 0, 1031, 246, 1, 0, 0, 0, 1032, 1033, 5, 97, 0, 0, 1033, 1034, 5, 115, 0, 0, 1034, 1035, 5, 101, 0, 0, 1035, 1036, 5, 99, 0, 0, 1036, 1037, 5, 104, 0, 0, 1037, 1038, 5, 40, 0, 0, 1038, 248, 1, 0, 0, 0, 1039, 1040, 5, 97, 0, 0, 1040, 1041, 5, 114, 0, 0, 1041, 1042, 5, 115, 0, 0, 1042, 1043, 5, 101, 0, 0, 1043, 1044, 5, 99, 0, 0, 1044, 1045, 5, 104, 0, 0, 1045, 1046, 5, 40, 0, 0, 1046, 250, 1, 0, 0, 0, 1047, 1048, 5, 97, 0, 0, 1048, 1049, 5, 114, 0, 0, 1049, 1050, 5, 115, 0, 0, 1050, 1051, 5, 99, 0, 0, 1051, 1052, 5, 104, 0, 0, 1052, 1053, 5, 40, 0, 0, 1053, 252, 1, 0, 0, 0, 1054, 1055, 5, 97, 0, 0, 1055, 1056, 5, 114, 0, 0, 1056, 1057, 5, 99, 0, 0, 1057, 1058, 5, 115, 0, 0, 1058, 1059, 5, 101, 0, 0, 1059, 1060, 5, 99, 0, 0, 1060, 1061, 5, 104, 0, 0, 1061, 1062, 5, 40, 0, 0, 1062, 254, 1, 0, 0, 0, 1063, 1064, 5, 97, 0, 0, 1064, 1065, 5, 99, 0, 0, 1065, 1066, 5, 111, 0, 0, 1066, 1067, 5, 115, 0, 0, 1067, 1068, 5, 101, 0, 0, 1068, 1069, 5, 99, 0, 0, 1069, 1070, 5, 104, 0, 0, 1070, 1071, 5, 40, 0, 0, 1071, 256, 1, 0, 0, 0, 1072, 1073, 5, 97, 0, 0, 1073, 1074, 5, 114, 0, 0, 1074, 1075, 5, 99, 0, 0, 1075, 1076, 5, 111, 0, 0, 1076, 1077, 5, 115, 0, 0, 1077, 1078, 5, 101, 0, 0, 1078, 1079, 5, 99, 0, 0, 1079, 1080, 5, 104, 0, 0, 1080, 1081, 5, 40, 0, 0, 1081, 258, 1, 0, 0, 0, 1082, 1083, 5, 97, 0, 0, 1083, 1084, 5, 114, 0, 0, 1084, 1085, 5, 99, 0, 0, 1085, 1086, 5, 115, 0, 0, 1086, 1087, 5, 99, 0, 0, 1087, 1088, 5, 104, 0, 0, 1088, 1089, 5, 40, 0, 0, 1089, 260, 1, 0, 0, 0, 1090, 1091, 5, 97, 0, 0, 1091, 1092, 5, 114, 0, 0, 1092, 1093, 5, 99, 0, 0, 1093, 1094, 5, 99, 0, 0, 1094, 1095, 5, 111, 0, 0, 1095, 1096, 5, 115, 0, 0, 1096, 1097, 5, 101, 0, 0, 1097, 1098, 5, 99, 0, 0, 1098, 1099, 5, 104, 0, 0, 1099, 1100, 5, 40, 0, 0, 1100, 262, 1, 0, 0, 0, 1101, 1102, 5, 97, 0, 0, 1102, 1103, 5, 99, 0, 0, 1103, 1104, 5, 115, 0, 0, 1104, 1105, 5, 99, 0, 0, 1105, 1106, 5, 104, 0, 0, 1106, 1107, 5, 40, 0, 0, 1107, 264, 1, 0, 0, 0, 1108, 1109, 5, 102, 0, 0, 1109, 1110, 5, 97, 0, 0, 1110, 1111, 5, 99, 0, 0, 1111, 1112, 5, 116, 0, 0, 1112, 1113, 5, 111, 0, 0, 1113, 1114, 5, 114, 0, 0, 1114, 1115, 5, 105, 0, 0, 1115, 1116, 5, 97, 0, 0, 1116, 1117, 5, 108, 0, 0, 1117, 1118, 5, 40, 0, 0, 1118, 266, 1, 0, 0, 0, 1119, 1120, 5, 103, 0, 0, 1120, 1121, 5, 97, 0, 0, 1121, 1122, 5, 109, 0, 0, 1122, 1123, 5, 109, 0, 0, 1123, 1124, 5, 97, 0, 0, 1124, 1125, 5, 40, 0, 0, 1125, 268, 1, 0, 0, 0, 1126, 1127, 5, 100, 0, 0, 1127, 1128, 5, 101, 0, 0, 1128, 1129, 5, 114, 0, 0, 1129, 1130, 5, 105, 0, 0, 1130, 1131, 5, 118, 0, 0, 1131, 1132, 5, 97, 0, 0, 1132, 1133, 5, 116, 0, 0, 1133, 1134, 5, 105, 0, 0, 1134, 1135, 5, 118, 0, 0, 1135, 1136, 5, 101, 0, 0, 1136, 1137, 5, 40, 0, 0, 1137, 270, 1, 0, 0, 0, 1138, 1139, 5, 105, 0, 0, 1139, 1140, 5, 110, 0, 0, 1140, 1141, 5, 116, 0, 0, 1141, 1142, 5, 101, 0, 0, 1142, 1143, 5, 103, 0, 0, 1143, 1144, 5, 114, 0, 0, 1144, 1145, 5, 97, 0, 0, 1145, 1146, 5, 108, 0, 0, 1146, 1147, 5, 40, 0, 0, 1147, 272, 1, 0, 0, 0, 1148, 1149, 5, 108, 0, 0, 1149, 1150, 5, 105, 0, 0, 1150, 1151, 5, 109, 0, 0, 1151, 1152, 5, 105, 0, 0, 1152, 1153, 5, 116, 0, 0, 1153, 1154, 5, 40, 0, 0, 1154, 274, 1, 0, 0, 0, 1155, 1156, 5, 108, 0, 0, 1156, 1157, 5, 105, 0, 0, 1157, 1158, 5, 109, 0, 0, 1158, 1159, 5, 105, 0, 0, 1159, 1160, 5, 116, 0, 0, 1160, 1161, 5, 108, 0, 0, 1161, 1162, 5, 101, 0, 0, 1162, 1163, 5, 102, 0, 0, 1163, 1164, 5, 116, 0, 0, 1164, 1165, 5, 40, 0, 0, 1165, 276, 1, 0, 0, 0, 1166, 1167, 5, 108, 0, 0, 1167, 1168, 5, 105, 0, 0, 1168, 1169, 5, 109, 0, 0, 1169, 1170, 5, 105, 0, 0, 1170, 1171, 5, 116, 0, 0, 1171, 1172, 5, 114, 0, 0, 1172, 1173, 5, 105, 0, 0, 1173, 1174, 5, 103, 0, 0, 1174, 1175, 5, 104, 0, 0, 1175, 1176, 5, 116, 0, 0, 1176, 1177, 5, 40, 0, 0, 1177, 278, 1, 0, 0, 0, 1178, 1179, 5, 115, 0, 0, 1179, 1180, 5, 117, 0, 0, 1180, 1181, 5, 109, 0, 0, 1181, 1182, 5, 40, 0, 0, 1182, 280, 1, 0, 0, 0, 1183, 1184, 5, 112, 0, 0, 1184, 1185, 5, 114, 0, 0, 1185, 1186, 5, 111, 0, 0, 1186, 1187, 5, 100, 0, 0, 1187, 1188, 5, 117, 0, 0, 1188, 1189, 5, 99, 0, 0, 1189, 1190, 5, 116, 0, 0, 1190, 1191, 5, 40, 0, 0, 1191, 282, 1, 0, 0, 0, 1192, 1193, 5, 115, 0, 0, 1193, 1194, 5, 105, 0, 0, 1194, 1195, 5, 103, 0, 0, 1195, 1196, 5, 110, 0, 0, 1196, 1197, 5, 117, 0, 0, 1197, 1198, 5, 109, 0, 0, 1198, 1199, 5, 40, 0, 0, 1199, 284, 1, 0, 0, 0, 1200, 1201, 5, 115, 0, 0, 1201, 1202, 5, 103, 0, 0, 1202, 1203, 5, 110, 0, 0, 1203, 1204, 5, 40, 0, 0, 1204, 286, 1, 0, 0, 0, 1205, 1206, 5, 115, 0, 0, 1206, 1207, 5, 105, 0, 0, 1207, 1208, 5, 103, 0, 0, 1208, 1209, 5, 110, 0, 0, 1209, 1210, 5, 40, 0, 0, 1210, 288, 1, 0, 0, 0, 1211, 1212, 5, 97, 0, 0, 1212, 1213, 5, 98, 0, 0, 1213, 1214, 5, 115, 0, 0, 1214, 1215, 5, 40, 0, 0, 1215, 290, 1, 0, 0, 0, 1216, 1217, 5, 112, 0, 0, 1217, 1218, 5, 104, 0, 0, 1218, 1219, 5, 105, 0, 0, 1219, 1220, 5, 40, 0, 0, 1220, 292, 1, 0, 0, 0, 1221, 1222, 5, 112, 0, 0, 1222, 1223, 5, 114, 0, 0, 1223, 1224, 5, 105, 0, 0, 1224, 1225, 5, 109, 0, 0, 1225, 1226, 5, 101, 0, 0, 1226, 1227, 5, 40, 0, 0, 1227, 294, 1, 0, 0, 0, 1228, 1229, 5, 118, 0, 0, 1229, 1230, 5, 97, 0, 0, 1230, 1231, 5, 108, 0, 0, 1231, 1232, 5, 117, 0, 0, 1232, 1233, 5, 97, 0, 0, 1233, 1234, 5, 116, 0, 0, 1234, 1235, 5, 105, 0, 0, 1235, 1236, 5, 111, 0, 0, 1236, 1237, 5, 110, 0, 0, 1237, 1238, 5, 40, 0, 0, 1238, 296, 1, 0, 0, 0, 1239, 1240, 5, 99, 0, 0, 1240, 1241, 5, 97, 0, 0, 1241, 1242, 5, 114, 0, 0, 1242, 1243, 5, 100, 0, 0, 1243, 1244, 5, 40, 0, 0, 1244, 298, 1, 0, 0, 0, 1245, 1246, 5, 112, 0, 0, 1246, 1247, 5, 111, 0, 0, 1247, 1248, 5, 119, 0, 0, 1248, 1249, 5, 101, 0, 0, 1249, 1250, 5, 114, 0, 0, 1250, 1251, 5, 115, 0, 0, 1251, 1252, 5, 101, 0, 0, 1252, 1253, 5, 116, 0, 0, 1253, 1254, 5, 40, 0, 0, 1254, 300, 1, 0, 0, 0, 1255, 1256, 5, 117, 0, 0, 1256, 1257, 5, 110, 0, 0, 1257, 1258, 5, 105, 0, 0, 1258, 1259, 5, 111, 0, 0, 1259, 1260, 5, 110, 0, 0, 1260, 1261, 5, 40, 0, 0, 1261, 302, 1, 0, 0, 0, 1262, 1263, 5, 105, 0, 0, 1263, 1264, 5, 110, 0, 0, 1264, 1265, 5, 116, 0, 0, 1265, 1266, 5, 101, 0, 0, 1266, 1267, 5, 114, 0, 0, 1267, 1268, 5, 115, 0, 0, 1268, 1269, 5, 101, 0, 0, 1269, 1270, 5, 99, 0, 0, 1270, 1271, 5, 116, 0, 0, 1271, 1272, 5, 105, 0, 0, 1272, 1273, 5, 111, 0, 0, 1273, 1274, 5, 110, 0, 0, 1274, 1275, 5, 40, 0, 0, 1275, 304, 1, 0, 0, 0, 1276, 1277, 5, 99, 0, 0, 1277, 1278, 5, 111, 0, 0, 1278, 1279, 5, 109, 0, 0, 1279, 1280, 5, 112, 0, 0, 1280, 1281, 5, 108, 0, 0, 1281, 1282, 5, 101, 0, 0, 1282, 1283, 5, 109, 0, 0, 1283, 1284, 5, 101, 0, 0, 1284, 1285, 5, 110, 0, 0, 1285, 1286, 5, 116, 0, 0, 1286, 1287, 5, 40, 0, 0, 1287, 306, 1, 0, 0, 0, 1288, 1289, 5, 105, 0, 0, 1289, 1290, 5, 109, 0, 0, 1290, 1291, 5, 97, 0, 0, 1291, 1292, 5, 103, 0, 0, 1292, 1293, 5, 101, 0, 0, 1293, 1294, 5, 40, 0, 0, 1294, 308, 1, 0, 0, 0, 1295, 1296, 5, 112, 0, 0, 1296, 1297, 5, 114, 0, 0, 1297, 1298, 5, 101, 0, 0, 1298, 1299, 5, 105, 0, 0, 1299, 1300, 5, 109, 0, 0, 1300, 1301, 5, 97, 0, 0, 1301, 1302, 5, 103, 0, 0, 1302, 1303, 5, 101, 0, 0, 1303, 1304, 5, 40, 0, 0, 1304, 310, 1, 0, 0, 0, 1305, 1306, 5, 102, 0, 0, 1306, 1307, 5, 108, 0, 0, 1307, 1308, 5, 111, 0, 0, 1308, 1309, 5, 111, 0, 0, 1309, 1310, 5, 114, 0, 0, 1310, 1311, 5, 40, 0, 0, 1311, 312, 1, 0, 0, 0, 1312, 1313, 5, 99, 0, 0, 1313, 1314, 5, 101, 0, 0, 1314, 1315, 5, 105, 0, 0, 1315, 1316, 5, 108, 0, 0, 1316, 1317, 5, 40, 0, 0, 1317, 314, 1, 0, 0, 0, 1318, 1319, 5, 99, 0, 0, 1319, 1320, 5, 101, 0, 0, 1320, 1321, 5, 105, 0, 0, 1321, 1322, 5, 108, 0, 0, 1322, 1323, 5, 105, 0, 0, 1323, 1324, 5, 110, 0, 0, 1324, 1325, 5, 103, 0, 0, 1325, 1326, 5, 40, 0, 0, 1326, 316, 1, 0, 0, 0, 1327, 1328, 5, 114, 0, 0, 1328, 1329, 5, 111, 0, 0, 1329, 1330, 5, 117, 0, 0, 1330, 1331, 5, 110, 0, 0, 1331, 1332, 5, 100, 0, 0, 1332, 1333, 5, 40, 0, 0, 1333, 318, 1, 0, 0, 0, 1334, 1335, 5, 109, 0, 0, 1335, 1336, 5, 105, 0, 0, 1336, 1337, 5, 110, 0, 0, 1337, 1338, 5, 40, 0, 0, 1338, 320, 1, 0, 0, 0, 1339, 1340, 5, 109, 0, 0, 1340, 1341, 5, 97, 0, 0, 1341, 1342, 5, 120, 0, 0, 1342, 1343, 5, 40, 0, 0, 1343, 322, 1, 0, 0, 0, 1344, 1345, 5, 97, 0, 0, 1345, 1346, 5, 114, 0, 0, 1346, 1347, 5, 103, 0, 0, 1347, 1348, 5, 109, 0, 0, 1348, 1349, 5, 97, 0, 0, 1349, 1350, 5, 120, 0, 0, 1350, 1351, 5, 40, 0, 0, 1351, 324, 1, 0, 0, 0, 1352, 1353, 5, 97, 0, 0, 1353, 1354, 5, 114, 0, 0, 1354, 1355, 5, 103, 0, 0, 1355, 1356, 5, 109, 0, 0, 1356, 1357, 5, 105, 0, 0, 1357, 1358, 5, 110, 0, 0, 1358, 1359, 5, 40, 0, 0, 1359, 326, 1, 0, 0, 0, 1360, 1361, 5, 103, 0, 0, 1361, 1362, 5, 99, 0, 0, 1362, 1363, 5, 100, 0, 0, 1363, 1364, 5, 40, 0, 0, 1364, 328, 1, 0, 0, 0, 1365, 1366, 5, 108, 0, 0, 1366, 1367, 5, 99, 0, 0, 1367, 1368, 5, 109, 0, 0, 1368, 1369, 5, 40, 0, 0, 1369, 330, 1, 0, 0, 0, 1370, 1371, 5, 98, 0, 0, 1371, 1372, 5, 105, 0, 0, 1372, 1373, 5, 110, 0, 0, 1373, 1374, 5, 111, 0, 0, 1374, 1375, 5, 109, 0, 0, 1375, 1376, 5, 105, 0, 0, 1376, 1377, 5, 97, 0, 0, 1377, 1378, 5, 108, 0, 0, 1378, 1379, 5, 40, 0, 0, 1379, 332, 1, 0, 0, 0, 1380, 1381, 5, 105, 0, 0, 1381, 1382, 5, 118, 0, 0, 1382, 1383, 5, 101, 0, 0, 1383, 1384, 5, 114, 0, 0, 1384, 1385, 5, 115, 0, 0, 1385, 1386, 5, 111, 0, 0, 1386, 1387, 5, 110, 0, 0, 1387, 1388, 5, 40, 0, 0, 1388, 334, 1, 0, 0, 0, 1389, 1390, 5, 97, 0, 0, 1390, 1391, 5, 108, 0, 0, 1391, 1392, 5, 101, 0, 0, 1392, 1393, 5, 112, 0, 0, 1393, 1394, 5, 104, 0, 0, 1394, 1395, 5, 40, 0, 0, 1395, 336, 1, 0, 0, 0, 1396, 1397, 5, 101, 0, 0, 1397, 1398, 5, 114, 0, 0, 1398, 1399, 5, 102, 0, 0, 1399, 1400, 5, 40, 0, 0, 1400, 338, 1, 0, 0, 0, 1401, 1402, 5, 101, 0, 0, 1402, 1403, 5, 114, 0, 0, 1403, 1404, 5, 102, 0, 0, 1404, 1405, 5, 99, 0, 0, 1405, 1406, 5, 40, 0, 0, 1406, 340, 1, 0, 0, 0, 1407, 1408, 5, 101, 0, 0, 1408, 1409, 5, 114, 0, 0, 1409, 1410, 5, 102, 0, 0, 1410, 1411, 5, 105, 0, 0, 1411, 1412, 5, 40, 0, 0, 1412, 342, 1, 0, 0, 0, 1413, 1414, 5, 69, 0, 0, 1414, 1415, 5, 105, 0, 0, 1415, 1416, 5, 40, 0, 0, 1416, 344, 1, 0, 0, 0, 1417, 1418, 5, 108, 0, 0, 1418, 1419, 5, 105, 0, 0, 1419, 1420, 5, 40, 0, 0, 1420, 346, 1, 0, 0, 0, 1421, 1422, 5, 112, 0, 0, 1422, 1423, 5, 111, 0, 0, 1423, 1424, 5, 108, 0, 0, 1424, 1425, 5, 121, 0, 0, 1425, 1426, 5, 103, 0, 0, 1426, 1427, 5, 97, 0, 0, 1427, 1428, 5, 109, 0, 0, 1428, 1429, 5, 109, 0, 0, 1429, 1430, 5, 97, 0, 0, 1430, 1431, 5, 40, 0, 0, 1431, 348, 1, 0, 0, 0, 1432, 1433, 5, 100, 0, 0, 1433, 1434, 5, 105, 0, 0, 1434, 1435, 5, 103, 0, 0, 1435, 1436, 5, 97, 0, 0, 1436, 1437, 5, 109, 0, 0, 1437, 1438, 5, 109, 0, 0, 1438, 1439, 5, 97, 0, 0, 1439, 1440, 5, 40, 0, 0, 1440, 350, 1, 0, 0, 0, 1441, 1442, 5, 83, 0, 0, 1442, 1443, 5, 105, 0, 0, 1443, 1444, 5, 40, 0, 0, 1444, 352, 1, 0, 0, 0, 1445, 1446, 5, 67, 0, 0, 1446, 1447, 5, 105, 0, 0, 1447, 1448, 5, 40, 0, 0, 1448, 354, 1, 0, 0, 0, 1449, 1450, 5, 83, 0, 0, 1450, 1451, 5, 104, 0, 0, 1451, 1452, 5, 105, 0, 0, 1452, 1453, 5, 40, 0, 0, 1453, 356, 1, 0, 0, 0, 1454, 1455, 5, 67, 0, 0, 1455, 1456, 5, 104, 0, 0, 1456, 1457, 5, 105, 0, 0, 1457, 1458, 5, 40, 0, 0, 1458, 358, 1, 0, 0, 0, 1459, 1460, 5, 116, 0, 0, 1460, 1461, 5, 114, 0, 0, 1461, 1462, 5, 117, 0, 0, 1462, 1463, 5, 110, 0, 0, 1463, 1464, 5, 99, 0, 0, 1464, 1465, 5, 40, 0, 0, 1465, 360, 1, 0, 0, 0, 1466, 1467, 5, 99, 0, 0, 1467, 1468, 5, 111, 0, 0, 1468, 1469, 5, 110, 0, 0, 1469, 1470, 5, 106, 0, 0, 1470, 1471, 5, 117, 0, 0, 1471, 1472, 5, 103, 0, 0, 1472, 1473, 5, 97, 0, 0, 1473, 1474, 5, 116, 0, 0, 1474, 1475, 5, 101, 0, 0, 1475, 1476, 5, 40, 0, 0, 1476, 362, 1, 0, 0, 0, 1477, 1478, 5, 100, 0, 0, 1478, 1479, 5, 111, 0, 0, 1479, 1480, 5, 109, 0, 0, 1480, 1481, 5, 97, 0, 0, 1481, 1482, 5, 105, 0, 0, 1482, 1483, 5, 110, 0, 0, 1483, 1484, 5, 40, 0, 0, 1484, 364, 1, 0, 0, 0, 1485, 1486, 5, 112, 0, 0, 1486, 1487, 5, 105, 0, 0, 1487, 1488, 5, 101, 0, 0, 1488, 1489, 5, 99, 0, 0, 1489, 1490, 5, 101, 0, 0, 1490, 1491, 5, 119, 0, 0, 1491, 1492, 5, 105, 0, 0, 1492, 1493, 5, 115, 0, 0, 1493, 1494, 5, 101, 0, 0, 1494, 1495, 5, 40, 0, 0, 1495, 366, 1, 0, 0, 0, 1496, 1497, 5, 97, 0, 0, 1497, 1498, 5, 112, 0, 0, 1498, 1499, 5, 112, 0, 0, 1499, 1500, 5, 108, 0, 0, 1500, 1501, 5, 121, 0, 0, 1501, 1502, 5, 40, 0, 0, 1502, 368, 1, 0, 0, 0, 1503, 1504, 5, 108, 0, 0, 1504, 1505, 5, 97, 0, 0, 1505, 1506, 5, 109, 0, 0, 1506, 1507, 5, 98, 0, 0, 1507, 1508, 5, 100, 0, 0, 1508, 1509, 5, 97, 0, 0, 1509, 1510, 5, 40, 0, 0, 1510, 370, 1, 0, 0, 0, 1511, 1513, 5, 13, 0, 0, 1512, 1511, 1, 0, 0, 0, 1512, 1513, 1, 0, 0, 0, 1513, 1514, 1, 0, 0, 0, 1514, 1516, 5, 10, 0, 0, 1515, 1512, 1, 0, 0, 0, 1516, 1517, 1, 0, 0, 0, 1517, 1515, 1, 0, 0, 0, 1517, 1518, 1, 0, 0, 0, 1518, 1519, 1, 0, 0, 0, 1519, 1520, 6, 185, 0, 0, 1520, 372, 1, 0, 0, 0, 1521, 1523, 7, 0, 0, 0, 1522, 1524, 7, 1, 0, 0, 1523, 1522, 1, 0, 0, 0, 1523, 1524, 1, 0, 0, 0, 1524, 1526, 1, 0, 0, 0, 1525, 1527, 2, 48, 57, 0, 1526, 1525, 1, 0, 0, 0, 1527, 1528, 1, 0, 0, 0, 1528, 1526, 1, 0, 0, 0, 1528, 1529, 1, 0, 0, 0, 1529, 374, 1, 0, 0, 0, 1530, 1532, 2, 48, 57, 0, 1531, 1530, 1, 0, 0, 0, 1532, 1533, 1, 0, 0, 0, 1533, 1531, 1, 0, 0, 0, 1533, 1534, 1, 0, 0, 0, 1534, 1535, 1, 0, 0, 0, 1535, 1539, 5, 46, 0, 0, 1536, 1538, 2, 48, 57, 0, 1537, 1536, 1, 0, 0, 0, 1538, 1541, 1, 0, 0, 0, 1539, 1537, 1, 0, 0, 0, 1539, 1540, 1, 0, 0, 0, 1540, 1543, 1, 0, 0, 0, 1541, 1539, 1, 0, 0, 0, 1542, 1544, 3, 373, 186, 0, 1543, 1542, 1, 0, 0, 0, 1543, 1544, 1, 0, 0, 0, 1544, 1546, 1, 0, 0, 0, 1545, 1547, 5, 105, 0, 0, 1546, 1545, 1, 0, 0, 0, 1546, 1547, 1, 0, 0, 0, 1547, 1564, 1, 0, 0, 0, 1548, 1550, 5, 46, 0, 0, 1549, 1548, 1, 0, 0, 0, 1549, 1550, 1, 0, 0, 0, 1550, 1552, 1, 0, 0, 0, 1551, 1553, 2, 48, 57, 0, 1552, 1551, 1, 0, 0, 0, 1553, 1554, 1, 0, 0, 0, 1554, 1552, 1, 0, 0, 0, 1554, 1555, 1, 0, 0, 0, 1555, 1557, 1, 0, 0, 0, 1556, 1558, 3, 373, 186, 0, 1557, 1556, 1, 0, 0, 0, 1557, 1558, 1, 0, 0, 0, 1558, 1560, 1, 0, 0, 0, 1559, 1561, 5, 105, 0, 0, 1560, 1559, 1, 0, 0, 0, 1560, 1561, 1, 0, 0, 0, 1561, 1564, 1, 0, 0, 0, 1562, 1564, 5, 105, 0, 0, 1563, 1531, 1, 0, 0, 0, 1563, 1549, 1, 0, 0, 0, 1563, 1562, 1, 0, 0, 0, 1564, 376, 1, 0, 0, 0, 1565, 1566, 5, 67, 0, 0, 1566, 1584, 5, 67, 0, 0, 1567, 1568, 5, 82, 0, 0, 1568, 1584, 5, 82, 0, 0, 1569, 1570, 5, 81, 0, 0, 1570, 1584, 5, 81, 0, 0, 1571, 1572, 5, 90, 0, 0, 1572, 1584, 5, 90, 0, 0, 1573, 1574, 5, 66, 0, 0, 1574, 1584, 5, 66, 0, 0, 1575, 1576, 5, 90, 0, 0, 1576, 1577, 5, 90, 0, 0, 1577, 1584, 5, 42, 0, 0, 1578, 1579, 5, 90, 0, 0, 1579, 1580, 5, 90, 0, 0, 1580, 1584, 5, 43, 0, 0, 1581, 1582, 5, 80, 0, 0, 1582, 1584, 5, 80, 0, 0, 1583, 1565, 1, 0, 0, 0, 1583, 1567, 1, 0, 0, 0, 1583, 1569, 1, 0, 0, 0, 1583, 1571, 1, 0, 0, 0, 1583, 1573, 1, 0, 0, 0, 1583, 1575, 1, 0, 0, 0, 1583, 1578, 1, 0, 0, 0, 1583, 1581, 1, 0, 0, 0, 1584, 378, 1, 0, 0, 0, 1585, 1586, 5, 116, 0, 0, 1586, 1587, 5, 114, 0, 0, 1587, 1588, 5, 117, 0, 0, 1588, 1604, 5, 101, 0, 0, 1589, 1590, 5, 84, 0, 0, 1590, 1591, 5, 114, 0, 0, 1591, 1592, 5, 117, 0, 0, 1592, 1604, 5, 101, 0, 0, 1593, 1594, 5, 102, 0, 0, 1594, 1595, 5, 97, 0, 0, 1595, 1596, 5, 108, 0, 0, 1596, 1597, 5, 115, 0, 0, 1597, 1604, 5, 101, 0, 0, 1598, 1599, 5, 70, 0, 0, 1599, 1600, 5, 97, 0, 0, 1600, 1601, 5, 108, 0, 0, 1601, 1602, 5, 115, 0, 0, 1602, 1604, 5, 101, 0, 0, 1603, 1585, 1, 0, 0, 0, 1603, 1589, 1, 0, 0, 0, 1603, 1593, 1, 0, 0, 0, 1603, 1598, 1, 0, 0, 0, 1604, 380, 1, 0, 0, 0, 1605, 1606, 5, 78, 0, 0, 1606, 1607, 5, 97, 0, 0, 1607, 1608, 5, 78, 0, 0, 1608, 382, 1, 0, 0, 0, 1609, 1611, 7, 2, 0, 0, 1610, 1609, 1, 0, 0, 0, 1611, 1612, 1, 0, 0, 0, 1612, 1610, 1, 0, 0, 0, 1612, 1613, 1, 0, 0, 0, 1613, 1620, 1, 0, 0, 0, 1614, 1616, 5, 95, 0, 0, 1615, 1617, 7, 3, 0, 0, 1616, 1615, 1, 0, 0, 0, 1617, 1618, 1, 0, 0, 0, 1618, 1616, 1, 0, 0, 0, 1618, 1619, 1, 0, 0, 0, 1619, 1621, 1, 0, 0, 0, 1620, 1614, 1, 0, 0, 0, 1620, 1621, 1, 0, 0, 0, 1621, 384, 1, 0, 0, 0, 1622, 1623, 5, 47, 0, 0, 1623, 1624, 5, 47, 0, 0, 1624, 1628, 1, 0, 0, 0, 1625, 1627, 8, 4, 0, 0, 1626, 1625, 1, 0, 0, 0, 1627, 1630, 1, 0, 0, 0, 1628, 1626, 1, 0, 0, 0, 1628, 1629, 1, 0, 0, 0, 1629, 1635, 1, 0, 0, 0, 1630, 1628, 1, 0, 0, 0, 1631, 1633, 5, 13, 0, 0, 1632, 1631, 1, 0, 0, 0, 1632, 1633, 1, 0, 0, 0, 1633, 1634, 1, 0, 0, 0, 1634, 1636, 5, 10, 0, 0, 1635, 1632, 1, 0, 0, 0, 1635, 1636, 1, 0, 0, 0, 1636, 1649, 1, 0, 0, 0, 1637, 1638, 5, 47, 0, 0, 1638, 1639, 5, 42, 0, 0, 1639, 1643, 1, 0, 0, 0, 1640, 1642, 9, 0, 0, 0, 1641, 1640, 1, 0, 0, 0, 1642, 1645, 1, 0, 0, 0, 1643, 1644, 1, 0, 0, 0, 1643, 1641, 1, 0, 0, 0, 1644, 1646, 1, 0, 0, 0, 1645, 1643, 1, 0, 0, 0, 1646, 1647, 5, 42, 0, 0, 1647, 1649, 5, 47, 0, 0, 1648, 1622, 1, 0, 0, 0, 1648, 1637, 1, 0, 0, 0, 1649, 1650, 1, 0, 0, 0, 1650, 1651, 6, 192, 0, 0, 1651, 386, 1, 0, 0, 0, 1652, 1654, 7, 5, 0, 0, 1653, 1652, 1, 0, 0, 0, 1654, 1655, 1, 0, 0, 0, 1655, 1653, 1, 0, 0, 0, 1655, 1656, 1, 0, 0, 0, 1656, 1657, 1, 0, 0, 0, 1657, 1658, 6, 193, 0, 0, 1658, 388, 1, 0, 0, 0, 25, 0, 1512, 1517, 1523, 1528, 1533, 1539, 1543, 1546, 1549, 1554, 1557, 1560, 1563, 1583, 1603, 1612, 1618, 1620, 1628, 1632, 1635, 1643, 1648, 1655, 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 d3b5bc330..5539119a5 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.tokens +++ b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.tokens @@ -181,14 +181,16 @@ T__179=180 T__180=181 T__181=182 T__182=183 -NEWLINE=184 -NUMBER=185 -SPECIALSET=186 -BOOLEAN=187 -NAN=188 -VARIABLE=189 -COMMENT=190 -WS=191 +T__183=184 +T__184=185 +NEWLINE=186 +NUMBER=187 +SPECIALSET=188 +BOOLEAN=189 +NAN=190 +VARIABLE=191 +COMMENT=192 +WS=193 '!'=1 '^'=2 '-'=3 @@ -362,14 +364,16 @@ WS=191 'erfi('=171 'Ei('=172 'li('=173 -'Si('=174 -'Ci('=175 -'Shi('=176 -'Chi('=177 -'trunc('=178 -'conjugate('=179 -'domain('=180 -'piecewise('=181 -'apply('=182 -'lambda('=183 -'NaN'=188 +'polygamma('=174 +'digamma('=175 +'Si('=176 +'Ci('=177 +'Shi('=178 +'Chi('=179 +'trunc('=180 +'conjugate('=181 +'domain('=182 +'piecewise('=183 +'apply('=184 +'lambda('=185 +'NaN'=190 diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs b/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs index 1e11d2dc1..0afd596d3 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs +++ b/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs @@ -73,8 +73,9 @@ public const int T__161=162, T__162=163, T__163=164, T__164=165, T__165=166, T__166=167, T__167=168, T__168=169, T__169=170, T__170=171, T__171=172, T__172=173, T__173=174, T__174=175, T__175=176, T__176=177, T__177=178, T__178=179, - T__179=180, T__180=181, T__181=182, T__182=183, NEWLINE=184, NUMBER=185, - SPECIALSET=186, BOOLEAN=187, NAN=188, VARIABLE=189, COMMENT=190, WS=191; + T__179=180, T__180=181, T__181=182, T__182=183, T__183=184, T__184=185, + NEWLINE=186, NUMBER=187, SPECIALSET=188, BOOLEAN=189, NAN=190, VARIABLE=191, + COMMENT=192, WS=193; 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, @@ -122,8 +123,9 @@ public const int "'preimage('", "'floor('", "'ceil('", "'ceiling('", "'round('", "'min('", "'max('", "'argmax('", "'argmin('", "'gcd('", "'lcm('", "'binomial('", "'iverson('", "'aleph('", "'erf('", "'erfc('", "'erfi('", "'Ei('", "'li('", - "'Si('", "'Ci('", "'Shi('", "'Chi('", "'trunc('", "'conjugate('", "'domain('", - "'piecewise('", "'apply('", "'lambda('", null, null, null, null, "'NaN'" + "'polygamma('", "'digamma('", "'Si('", "'Ci('", "'Shi('", "'Chi('", "'trunc('", + "'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, @@ -141,8 +143,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); @@ -751,6 +753,8 @@ public Mult_expressionContext mult_expression() { case T__180: case T__181: case T__182: + case T__183: + case T__184: case NUMBER: case SPECIALSET: case BOOLEAN: @@ -1009,6 +1013,8 @@ public Sum_expressionContext sum_expression() { case T__180: case T__181: case T__182: + case T__183: + case T__184: case NUMBER: case SPECIALSET: case BOOLEAN: @@ -2277,6 +2283,8 @@ public ExpressionContext expression() { case T__180: case T__181: case T__182: + case T__183: + case T__184: case NUMBER: case SPECIALSET: case BOOLEAN: @@ -2642,7 +2650,7 @@ public Function_argumentsContext function_arguments() { State = 410; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -802489551279882216L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & 4539628424389459967L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -802489551279882216L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -288230376151711745L) != 0)) { { State = 399; _localctx.e = expression(); @@ -2718,7 +2726,7 @@ public Set_itemsContext set_items() { State = 432; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -802489551279882024L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & 4539628424389459967L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -802489551279882024L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -288230376151711745L) != 0)) { { State = 417; ErrorHandler.Sync(this); @@ -2863,6 +2871,8 @@ public Set_itemsContext set_items() { case T__180: case T__181: case T__182: + case T__183: + case T__184: case NUMBER: case SPECIALSET: case BOOLEAN: @@ -3043,6 +3053,8 @@ public Set_itemsContext set_items() { case T__180: case T__181: case T__182: + case T__183: + case T__184: case NUMBER: case SPECIALSET: case BOOLEAN: @@ -3262,7 +3274,7 @@ public AtomContext atom() { AtomContext _localctx = new AtomContext(Context, State); EnterRule(_localctx, 48, RULE_atom); try { - State = 1134; + State = 1144; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,43,Context) ) { case 1: @@ -4857,7 +4869,7 @@ public AtomContext atom() { _localctx.args = function_arguments(); State = 1086; Match(T__30); - Assert("Si", 1, _localctx.args.list.Count); _localctx.value = MathS.Si(_localctx.args.list[0]); + Assert("polygamma", 2, _localctx.args.list.Count); _localctx.value = MathS.Polygamma(_localctx.args.list[0], _localctx.args.list[1]); } break; case 134: @@ -4869,7 +4881,7 @@ public AtomContext atom() { _localctx.args = function_arguments(); State = 1091; Match(T__30); - Assert("Ci", 1, _localctx.args.list.Count); _localctx.value = MathS.Ci(_localctx.args.list[0]); + Assert("digamma", 1, _localctx.args.list.Count); _localctx.value = MathS.Digamma(_localctx.args.list[0]); } break; case 135: @@ -4881,7 +4893,7 @@ public AtomContext atom() { _localctx.args = function_arguments(); State = 1096; Match(T__30); - Assert("Shi", 1, _localctx.args.list.Count); _localctx.value = MathS.Shi(_localctx.args.list[0]); + Assert("Si", 1, _localctx.args.list.Count); _localctx.value = MathS.Si(_localctx.args.list[0]); } break; case 136: @@ -4893,7 +4905,7 @@ public AtomContext atom() { _localctx.args = function_arguments(); State = 1101; Match(T__30); - Assert("Chi", 1, _localctx.args.list.Count); _localctx.value = MathS.Chi(_localctx.args.list[0]); + Assert("Ci", 1, _localctx.args.list.Count); _localctx.value = MathS.Ci(_localctx.args.list[0]); } break; case 137: @@ -4905,7 +4917,7 @@ public AtomContext atom() { _localctx.args = function_arguments(); State = 1106; Match(T__30); - _localctx.value = NotImplementedFunction("trunc", "rounding functions"); + Assert("Shi", 1, _localctx.args.list.Count); _localctx.value = MathS.Shi(_localctx.args.list[0]); } break; case 138: @@ -4917,7 +4929,7 @@ public AtomContext atom() { _localctx.args = function_arguments(); State = 1111; Match(T__30); - _localctx.value = NotImplementedFunction("conjugate", "complex conjugate as a symbolic function"); + Assert("Chi", 1, _localctx.args.list.Count); _localctx.value = MathS.Chi(_localctx.args.list[0]); } break; case 139: @@ -4928,6 +4940,30 @@ public AtomContext atom() { State = 1115; _localctx.args = function_arguments(); State = 1116; + Match(T__30); + _localctx.value = NotImplementedFunction("trunc", "rounding functions"); + } + break; + case 140: + EnterOuterAlt(_localctx, 140); + { + State = 1119; + Match(T__180); + State = 1120; + _localctx.args = function_arguments(); + State = 1121; + Match(T__30); + _localctx.value = NotImplementedFunction("conjugate", "complex conjugate as a symbolic function"); + } + break; + case 141: + EnterOuterAlt(_localctx, 141); + { + State = 1124; + Match(T__181); + State = 1125; + _localctx.args = function_arguments(); + State = 1126; Match(T__30); Assert("domain", 2, _localctx.args.list.Count); @@ -4954,14 +4990,14 @@ public AtomContext atom() { } break; - case 140: - EnterOuterAlt(_localctx, 140); + case 142: + EnterOuterAlt(_localctx, 142); { - State = 1119; - Match(T__180); - State = 1120; + State = 1129; + Match(T__182); + State = 1130; _localctx.args = function_arguments(); - State = 1121; + State = 1131; Match(T__30); var cases = new List(); @@ -4974,14 +5010,14 @@ public AtomContext atom() { } break; - case 141: - EnterOuterAlt(_localctx, 141); + case 143: + EnterOuterAlt(_localctx, 143); { - State = 1124; - Match(T__181); - State = 1125; + State = 1134; + Match(T__183); + State = 1135; _localctx.args = function_arguments(); - State = 1126; + State = 1136; Match(T__30); if (_localctx.args.list.Count < 2) @@ -4990,14 +5026,14 @@ public AtomContext atom() { } break; - case 142: - EnterOuterAlt(_localctx, 142); + case 144: + EnterOuterAlt(_localctx, 144); { - State = 1129; - Match(T__182); - State = 1130; + State = 1139; + Match(T__184); + State = 1140; _localctx.args = function_arguments(); - State = 1131; + State = 1141; Match(T__30); if (_localctx.args.list.Count < 2) @@ -5060,9 +5096,9 @@ public StatementContext statement() { try { EnterOuterAlt(_localctx, 1); { - State = 1136; + State = 1146; _localctx._expression = expression(); - State = 1137; + State = 1147; Match(Eof); Result = _localctx._expression.value; } @@ -5079,7 +5115,7 @@ public StatementContext statement() { } private static int[] _serializedATN = { - 4,1,191,1141,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,193,1151,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,1,0,1,0,1,0,1,0,1,0,1,0,1,0,3, @@ -5159,332 +5195,336 @@ public StatementContext statement() { 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, - 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,1135,8,24,1,25,1, - 25,1,25,1,25,1,25,0,0,26,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32, - 34,36,38,40,42,44,46,48,50,0,6,1,0,6,7,1,0,33,34,1,0,37,38,1,0,42,43,1, - 0,44,45,1,0,46,47,1317,0,59,1,0,0,0,2,77,1,0,0,0,4,79,1,0,0,0,6,109,1, - 0,0,0,8,111,1,0,0,0,10,136,1,0,0,0,12,157,1,0,0,0,14,172,1,0,0,0,16,195, - 1,0,0,0,18,230,1,0,0,0,20,281,1,0,0,0,22,283,1,0,0,0,24,302,1,0,0,0,26, - 317,1,0,0,0,28,332,1,0,0,0,30,351,1,0,0,0,32,370,1,0,0,0,34,372,1,0,0, - 0,36,384,1,0,0,0,38,386,1,0,0,0,40,410,1,0,0,0,42,432,1,0,0,0,44,434,1, - 0,0,0,46,440,1,0,0,0,48,1134,1,0,0,0,50,1136,1,0,0,0,52,53,3,48,24,0,53, - 54,5,1,0,0,54,55,6,0,-1,0,55,60,1,0,0,0,56,57,3,48,24,0,57,58,6,0,-1,0, - 58,60,1,0,0,0,59,52,1,0,0,0,59,56,1,0,0,0,60,1,1,0,0,0,61,62,5,2,0,0,62, - 63,3,0,0,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,78,1,0,0,0,69,70,5,2,0,0,70,71,3,6,3,0,71, - 72,6,1,-1,0,72,74,1,0,0,0,73,69,1,0,0,0,74,75,1,0,0,0,75,73,1,0,0,0,75, - 76,1,0,0,0,76,78,1,0,0,0,77,65,1,0,0,0,77,73,1,0,0,0,78,3,1,0,0,0,79,80, - 3,0,0,0,80,84,6,2,-1,0,81,82,3,2,1,0,82,83,6,2,-1,0,83,85,1,0,0,0,84,81, - 1,0,0,0,84,85,1,0,0,0,85,5,1,0,0,0,86,87,5,3,0,0,87,88,3,4,2,0,88,89,6, - 3,-1,0,89,95,1,0,0,0,90,91,5,4,0,0,91,92,3,4,2,0,92,93,6,3,-1,0,93,95, - 1,0,0,0,94,86,1,0,0,0,94,90,1,0,0,0,95,110,1,0,0,0,96,97,5,3,0,0,97,98, - 3,6,3,0,98,99,6,3,-1,0,99,105,1,0,0,0,100,101,5,4,0,0,101,102,3,6,3,0, - 102,103,6,3,-1,0,103,105,1,0,0,0,104,96,1,0,0,0,104,100,1,0,0,0,105,110, - 1,0,0,0,106,107,3,4,2,0,107,108,6,3,-1,0,108,110,1,0,0,0,109,94,1,0,0, - 0,109,104,1,0,0,0,109,106,1,0,0,0,110,7,1,0,0,0,111,112,3,6,3,0,112,131, - 6,4,-1,0,113,119,5,5,0,0,114,115,7,0,0,0,115,120,6,4,-1,0,116,117,3,6, - 3,0,117,118,6,4,-1,0,118,120,1,0,0,0,119,114,1,0,0,0,119,116,1,0,0,0,120, - 130,1,0,0,0,121,122,5,8,0,0,122,123,3,6,3,0,123,124,6,4,-1,0,124,130,1, - 0,0,0,125,126,5,9,0,0,126,127,3,6,3,0,127,128,6,4,-1,0,128,130,1,0,0,0, - 129,113,1,0,0,0,129,121,1,0,0,0,129,125,1,0,0,0,130,133,1,0,0,0,131,129, - 1,0,0,0,131,132,1,0,0,0,132,134,1,0,0,0,133,131,1,0,0,0,134,135,6,4,-1, - 0,135,9,1,0,0,0,136,137,3,8,4,0,137,152,6,5,-1,0,138,144,5,4,0,0,139,140, - 7,0,0,0,140,145,6,5,-1,0,141,142,3,8,4,0,142,143,6,5,-1,0,143,145,1,0, - 0,0,144,139,1,0,0,0,144,141,1,0,0,0,145,151,1,0,0,0,146,147,5,3,0,0,147, - 148,3,8,4,0,148,149,6,5,-1,0,149,151,1,0,0,0,150,138,1,0,0,0,150,146,1, - 0,0,0,151,154,1,0,0,0,152,150,1,0,0,0,152,153,1,0,0,0,153,155,1,0,0,0, - 154,152,1,0,0,0,155,156,6,5,-1,0,156,11,1,0,0,0,157,158,3,10,5,0,158,169, - 6,6,-1,0,159,160,5,10,0,0,160,161,3,10,5,0,161,162,6,6,-1,0,162,168,1, - 0,0,0,163,164,5,11,0,0,164,165,3,10,5,0,165,166,6,6,-1,0,166,168,1,0,0, - 0,167,159,1,0,0,0,167,163,1,0,0,0,168,171,1,0,0,0,169,167,1,0,0,0,169, - 170,1,0,0,0,170,13,1,0,0,0,171,169,1,0,0,0,172,173,3,12,6,0,173,192,6, - 7,-1,0,174,175,5,12,0,0,175,176,3,12,6,0,176,177,6,7,-1,0,177,191,1,0, - 0,0,178,179,5,13,0,0,179,180,3,12,6,0,180,181,6,7,-1,0,181,191,1,0,0,0, - 182,183,5,14,0,0,183,184,3,12,6,0,184,185,6,7,-1,0,185,191,1,0,0,0,186, - 187,5,15,0,0,187,188,3,12,6,0,188,189,6,7,-1,0,189,191,1,0,0,0,190,174, - 1,0,0,0,190,178,1,0,0,0,190,182,1,0,0,0,190,186,1,0,0,0,191,194,1,0,0, - 0,192,190,1,0,0,0,192,193,1,0,0,0,193,15,1,0,0,0,194,192,1,0,0,0,195,196, - 3,14,7,0,196,227,6,8,-1,0,197,198,5,16,0,0,198,199,3,14,7,0,199,200,6, - 8,-1,0,200,226,1,0,0,0,201,202,5,17,0,0,202,203,3,14,7,0,203,204,6,8,-1, - 0,204,226,1,0,0,0,205,206,5,18,0,0,206,207,3,14,7,0,207,208,6,8,-1,0,208, - 226,1,0,0,0,209,210,5,19,0,0,210,211,3,14,7,0,211,212,6,8,-1,0,212,226, - 1,0,0,0,213,214,5,20,0,0,214,215,3,14,7,0,215,216,6,8,-1,0,216,226,1,0, - 0,0,217,218,5,21,0,0,218,219,3,14,7,0,219,220,6,8,-1,0,220,226,1,0,0,0, - 221,222,5,22,0,0,222,223,3,14,7,0,223,224,6,8,-1,0,224,226,1,0,0,0,225, - 197,1,0,0,0,225,201,1,0,0,0,225,205,1,0,0,0,225,209,1,0,0,0,225,213,1, - 0,0,0,225,217,1,0,0,0,225,221,1,0,0,0,226,229,1,0,0,0,227,225,1,0,0,0, - 227,228,1,0,0,0,228,17,1,0,0,0,229,227,1,0,0,0,230,231,3,16,8,0,231,253, - 6,9,-1,0,232,233,5,23,0,0,233,247,6,9,-1,0,234,235,5,24,0,0,235,247,6, - 9,-1,0,236,237,5,25,0,0,237,247,6,9,-1,0,238,239,5,26,0,0,239,247,6,9, - -1,0,240,241,5,27,0,0,241,247,6,9,-1,0,242,243,5,28,0,0,243,247,6,9,-1, - 0,244,245,5,29,0,0,245,247,6,9,-1,0,246,232,1,0,0,0,246,234,1,0,0,0,246, - 236,1,0,0,0,246,238,1,0,0,0,246,240,1,0,0,0,246,242,1,0,0,0,246,244,1, - 0,0,0,247,248,1,0,0,0,248,249,3,16,8,0,249,250,6,9,-1,0,250,252,1,0,0, - 0,251,246,1,0,0,0,252,255,1,0,0,0,253,251,1,0,0,0,253,254,1,0,0,0,254, - 262,1,0,0,0,255,253,1,0,0,0,256,257,5,30,0,0,257,258,5,9,0,0,258,259,3, - 16,8,0,259,260,5,31,0,0,260,261,6,9,-1,0,261,263,1,0,0,0,262,256,1,0,0, - 0,262,263,1,0,0,0,263,264,1,0,0,0,264,265,6,9,-1,0,265,19,1,0,0,0,266, - 267,5,32,0,0,267,268,3,18,9,0,268,269,6,10,-1,0,269,282,1,0,0,0,270,271, - 5,32,0,0,271,272,3,20,10,0,272,273,6,10,-1,0,273,282,1,0,0,0,274,275,5, - 32,0,0,275,276,3,34,17,0,276,277,6,10,-1,0,277,282,1,0,0,0,278,279,3,18, - 9,0,279,280,6,10,-1,0,280,282,1,0,0,0,281,266,1,0,0,0,281,270,1,0,0,0, - 281,274,1,0,0,0,281,278,1,0,0,0,282,21,1,0,0,0,283,284,3,20,10,0,284,299, - 6,11,-1,0,285,286,5,33,0,0,286,287,3,20,10,0,287,288,6,11,-1,0,288,298, - 1,0,0,0,289,290,5,34,0,0,290,291,3,20,10,0,291,292,6,11,-1,0,292,298,1, - 0,0,0,293,294,7,1,0,0,294,295,3,34,17,0,295,296,6,11,-1,0,296,298,1,0, - 0,0,297,285,1,0,0,0,297,289,1,0,0,0,297,293,1,0,0,0,298,301,1,0,0,0,299, - 297,1,0,0,0,299,300,1,0,0,0,300,23,1,0,0,0,301,299,1,0,0,0,302,303,3,22, - 11,0,303,314,6,12,-1,0,304,305,5,35,0,0,305,306,3,22,11,0,306,307,6,12, - -1,0,307,313,1,0,0,0,308,309,5,35,0,0,309,310,3,34,17,0,310,311,6,12,-1, - 0,311,313,1,0,0,0,312,304,1,0,0,0,312,308,1,0,0,0,313,316,1,0,0,0,314, - 312,1,0,0,0,314,315,1,0,0,0,315,25,1,0,0,0,316,314,1,0,0,0,317,318,3,24, - 12,0,318,329,6,13,-1,0,319,320,5,36,0,0,320,321,3,24,12,0,321,322,6,13, - -1,0,322,328,1,0,0,0,323,324,5,36,0,0,324,325,3,34,17,0,325,326,6,13,-1, - 0,326,328,1,0,0,0,327,319,1,0,0,0,327,323,1,0,0,0,328,331,1,0,0,0,329, - 327,1,0,0,0,329,330,1,0,0,0,330,27,1,0,0,0,331,329,1,0,0,0,332,333,3,26, - 13,0,333,348,6,14,-1,0,334,335,5,37,0,0,335,336,3,26,13,0,336,337,6,14, - -1,0,337,347,1,0,0,0,338,339,5,38,0,0,339,340,3,26,13,0,340,341,6,14,-1, - 0,341,347,1,0,0,0,342,343,7,2,0,0,343,344,3,34,17,0,344,345,6,14,-1,0, - 345,347,1,0,0,0,346,334,1,0,0,0,346,338,1,0,0,0,346,342,1,0,0,0,347,350, - 1,0,0,0,348,346,1,0,0,0,348,349,1,0,0,0,349,29,1,0,0,0,350,348,1,0,0,0, - 351,352,3,28,14,0,352,357,6,15,-1,0,353,354,5,39,0,0,354,355,3,30,15,0, - 355,356,6,15,-1,0,356,358,1,0,0,0,357,353,1,0,0,0,357,358,1,0,0,0,358, - 31,1,0,0,0,359,360,3,30,15,0,360,365,6,16,-1,0,361,362,5,40,0,0,362,363, - 3,32,16,0,363,364,6,16,-1,0,364,366,1,0,0,0,365,361,1,0,0,0,365,366,1, - 0,0,0,366,371,1,0,0,0,367,368,3,34,17,0,368,369,6,16,-1,0,369,371,1,0, - 0,0,370,359,1,0,0,0,370,367,1,0,0,0,371,33,1,0,0,0,372,373,3,36,18,0,373, - 374,3,38,19,0,374,375,5,41,0,0,375,376,3,32,16,0,376,377,6,17,-1,0,377, - 35,1,0,0,0,378,379,7,3,0,0,379,385,6,18,-1,0,380,381,7,4,0,0,381,385,6, - 18,-1,0,382,383,7,5,0,0,383,385,6,18,-1,0,384,378,1,0,0,0,384,380,1,0, - 0,0,384,382,1,0,0,0,385,37,1,0,0,0,386,387,3,16,8,0,387,394,6,19,-1,0, - 388,389,5,48,0,0,389,390,3,16,8,0,390,391,6,19,-1,0,391,393,1,0,0,0,392, - 388,1,0,0,0,393,396,1,0,0,0,394,392,1,0,0,0,394,395,1,0,0,0,395,397,1, - 0,0,0,396,394,1,0,0,0,397,398,6,19,-1,0,398,39,1,0,0,0,399,400,3,32,16, - 0,400,407,6,20,-1,0,401,402,5,48,0,0,402,403,3,32,16,0,403,404,6,20,-1, - 0,404,406,1,0,0,0,405,401,1,0,0,0,406,409,1,0,0,0,407,405,1,0,0,0,407, - 408,1,0,0,0,408,411,1,0,0,0,409,407,1,0,0,0,410,399,1,0,0,0,410,411,1, - 0,0,0,411,41,1,0,0,0,412,413,3,32,16,0,413,414,6,21,-1,0,414,418,1,0,0, - 0,415,416,7,0,0,0,416,418,6,21,-1,0,417,412,1,0,0,0,417,415,1,0,0,0,418, - 429,1,0,0,0,419,425,5,48,0,0,420,421,3,32,16,0,421,422,6,21,-1,0,422,426, - 1,0,0,0,423,424,7,0,0,0,424,426,6,21,-1,0,425,420,1,0,0,0,425,423,1,0, - 0,0,426,428,1,0,0,0,427,419,1,0,0,0,428,431,1,0,0,0,429,427,1,0,0,0,429, - 430,1,0,0,0,430,433,1,0,0,0,431,429,1,0,0,0,432,417,1,0,0,0,432,433,1, - 0,0,0,433,43,1,0,0,0,434,435,3,32,16,0,435,436,6,22,-1,0,436,437,5,49, - 0,0,437,438,3,32,16,0,438,439,6,22,-1,0,439,45,1,0,0,0,440,441,3,32,16, - 0,441,442,6,23,-1,0,442,443,5,41,0,0,443,444,3,32,16,0,444,445,6,23,-1, - 0,445,47,1,0,0,0,446,447,5,50,0,0,447,1135,6,24,-1,0,448,449,5,51,0,0, - 449,1135,6,24,-1,0,450,451,5,188,0,0,451,1135,6,24,-1,0,452,453,5,185, - 0,0,453,1135,6,24,-1,0,454,455,5,187,0,0,455,1135,6,24,-1,0,456,457,5, - 186,0,0,457,1135,6,24,-1,0,458,459,5,189,0,0,459,1135,6,24,-1,0,460,461, - 5,52,0,0,461,462,3,32,16,0,462,463,5,53,0,0,463,464,6,24,-1,0,464,1135, - 1,0,0,0,465,466,5,54,0,0,466,467,3,48,24,0,467,468,6,24,-1,0,468,1135, - 1,0,0,0,469,470,5,55,0,0,470,471,3,40,20,0,471,472,5,56,0,0,472,473,6, - 24,-1,0,473,1135,1,0,0,0,474,475,5,55,0,0,475,476,3,40,20,0,476,477,5, - 57,0,0,477,478,6,24,-1,0,478,1135,1,0,0,0,479,480,5,30,0,0,480,481,3,44, - 22,0,481,482,5,31,0,0,482,483,6,24,-1,0,483,1135,1,0,0,0,484,485,5,55, - 0,0,485,486,3,44,22,0,486,487,5,31,0,0,487,488,6,24,-1,0,488,1135,1,0, - 0,0,489,490,5,55,0,0,490,491,3,44,22,0,491,492,5,57,0,0,492,493,6,24,-1, - 0,493,1135,1,0,0,0,494,495,5,30,0,0,495,496,3,44,22,0,496,497,5,57,0,0, - 497,498,6,24,-1,0,498,1135,1,0,0,0,499,500,5,30,0,0,500,501,3,32,16,0, - 501,502,5,31,0,0,502,503,6,24,-1,0,503,1135,1,0,0,0,504,505,5,58,0,0,505, - 506,3,46,23,0,506,507,5,59,0,0,507,508,6,24,-1,0,508,1135,1,0,0,0,509, - 510,5,58,0,0,510,511,3,42,21,0,511,512,5,59,0,0,512,513,6,24,-1,0,513, - 1135,1,0,0,0,514,515,5,60,0,0,515,516,3,40,20,0,516,517,5,31,0,0,517,518, - 6,24,-1,0,518,1135,1,0,0,0,519,520,5,61,0,0,520,521,3,40,20,0,521,522, - 5,31,0,0,522,523,6,24,-1,0,523,1135,1,0,0,0,524,525,5,62,0,0,525,526,3, - 40,20,0,526,527,5,31,0,0,527,528,6,24,-1,0,528,1135,1,0,0,0,529,530,5, - 63,0,0,530,531,3,40,20,0,531,532,5,31,0,0,532,533,6,24,-1,0,533,1135,1, - 0,0,0,534,535,5,64,0,0,535,536,3,40,20,0,536,537,5,31,0,0,537,538,6,24, - -1,0,538,1135,1,0,0,0,539,540,5,65,0,0,540,541,3,40,20,0,541,542,5,31, - 0,0,542,543,6,24,-1,0,543,1135,1,0,0,0,544,545,5,66,0,0,545,546,3,40,20, - 0,546,547,5,31,0,0,547,548,6,24,-1,0,548,1135,1,0,0,0,549,550,5,67,0,0, - 550,551,3,40,20,0,551,552,5,31,0,0,552,553,6,24,-1,0,553,1135,1,0,0,0, - 554,555,5,68,0,0,555,556,3,40,20,0,556,557,5,31,0,0,557,558,6,24,-1,0, - 558,1135,1,0,0,0,559,560,5,69,0,0,560,561,3,40,20,0,561,562,5,31,0,0,562, - 563,6,24,-1,0,563,1135,1,0,0,0,564,565,5,70,0,0,565,566,3,40,20,0,566, - 567,5,31,0,0,567,568,6,24,-1,0,568,1135,1,0,0,0,569,570,5,71,0,0,570,571, - 3,40,20,0,571,572,5,31,0,0,572,573,6,24,-1,0,573,1135,1,0,0,0,574,575, - 5,72,0,0,575,576,3,40,20,0,576,577,5,31,0,0,577,578,6,24,-1,0,578,1135, - 1,0,0,0,579,580,5,73,0,0,580,581,3,40,20,0,581,582,5,31,0,0,582,583,6, - 24,-1,0,583,1135,1,0,0,0,584,585,5,74,0,0,585,586,3,40,20,0,586,587,5, - 31,0,0,587,588,6,24,-1,0,588,1135,1,0,0,0,589,590,5,75,0,0,590,591,3,40, - 20,0,591,592,5,31,0,0,592,593,6,24,-1,0,593,1135,1,0,0,0,594,595,5,76, - 0,0,595,596,3,40,20,0,596,597,5,31,0,0,597,598,6,24,-1,0,598,1135,1,0, - 0,0,599,600,5,77,0,0,600,601,3,40,20,0,601,602,5,31,0,0,602,603,6,24,-1, - 0,603,1135,1,0,0,0,604,605,5,78,0,0,605,606,3,40,20,0,606,607,5,31,0,0, - 607,608,6,24,-1,0,608,1135,1,0,0,0,609,610,5,79,0,0,610,611,3,40,20,0, - 611,612,5,31,0,0,612,613,6,24,-1,0,613,1135,1,0,0,0,614,615,5,80,0,0,615, - 616,3,40,20,0,616,617,5,31,0,0,617,618,6,24,-1,0,618,1135,1,0,0,0,619, - 620,5,81,0,0,620,621,3,40,20,0,621,622,5,31,0,0,622,623,6,24,-1,0,623, - 1135,1,0,0,0,624,625,5,82,0,0,625,626,3,40,20,0,626,627,5,31,0,0,627,628, - 6,24,-1,0,628,1135,1,0,0,0,629,630,5,83,0,0,630,631,3,40,20,0,631,632, - 5,31,0,0,632,633,6,24,-1,0,633,1135,1,0,0,0,634,635,5,84,0,0,635,636,3, - 40,20,0,636,637,5,31,0,0,637,638,6,24,-1,0,638,1135,1,0,0,0,639,640,5, - 85,0,0,640,641,3,40,20,0,641,642,5,31,0,0,642,643,6,24,-1,0,643,1135,1, - 0,0,0,644,645,5,86,0,0,645,646,3,40,20,0,646,647,5,31,0,0,647,648,6,24, - -1,0,648,1135,1,0,0,0,649,650,5,87,0,0,650,651,3,40,20,0,651,652,5,31, - 0,0,652,653,6,24,-1,0,653,1135,1,0,0,0,654,655,5,88,0,0,655,656,3,40,20, - 0,656,657,5,31,0,0,657,658,6,24,-1,0,658,1135,1,0,0,0,659,660,5,89,0,0, - 660,661,3,40,20,0,661,662,5,31,0,0,662,663,6,24,-1,0,663,1135,1,0,0,0, - 664,665,5,90,0,0,665,666,3,40,20,0,666,667,5,31,0,0,667,668,6,24,-1,0, - 668,1135,1,0,0,0,669,670,5,91,0,0,670,671,3,40,20,0,671,672,5,31,0,0,672, - 673,6,24,-1,0,673,1135,1,0,0,0,674,675,5,92,0,0,675,676,3,40,20,0,676, - 677,5,31,0,0,677,678,6,24,-1,0,678,1135,1,0,0,0,679,680,5,93,0,0,680,681, - 3,40,20,0,681,682,5,31,0,0,682,683,6,24,-1,0,683,1135,1,0,0,0,684,685, - 5,94,0,0,685,686,3,40,20,0,686,687,5,31,0,0,687,688,6,24,-1,0,688,1135, - 1,0,0,0,689,690,5,95,0,0,690,691,3,40,20,0,691,692,5,31,0,0,692,693,6, - 24,-1,0,693,1135,1,0,0,0,694,695,5,96,0,0,695,696,3,40,20,0,696,697,5, - 31,0,0,697,698,6,24,-1,0,698,1135,1,0,0,0,699,700,5,97,0,0,700,701,3,40, - 20,0,701,702,5,31,0,0,702,703,6,24,-1,0,703,1135,1,0,0,0,704,705,5,98, - 0,0,705,706,3,40,20,0,706,707,5,31,0,0,707,708,6,24,-1,0,708,1135,1,0, - 0,0,709,710,5,99,0,0,710,711,3,40,20,0,711,712,5,31,0,0,712,713,6,24,-1, - 0,713,1135,1,0,0,0,714,715,5,100,0,0,715,716,3,40,20,0,716,717,5,31,0, - 0,717,718,6,24,-1,0,718,1135,1,0,0,0,719,720,5,101,0,0,720,721,3,40,20, - 0,721,722,5,31,0,0,722,723,6,24,-1,0,723,1135,1,0,0,0,724,725,5,102,0, - 0,725,726,3,40,20,0,726,727,5,31,0,0,727,728,6,24,-1,0,728,1135,1,0,0, - 0,729,730,5,103,0,0,730,731,3,40,20,0,731,732,5,31,0,0,732,733,6,24,-1, - 0,733,1135,1,0,0,0,734,735,5,104,0,0,735,736,3,40,20,0,736,737,5,31,0, - 0,737,738,6,24,-1,0,738,1135,1,0,0,0,739,740,5,105,0,0,740,741,3,40,20, - 0,741,742,5,31,0,0,742,743,6,24,-1,0,743,1135,1,0,0,0,744,745,5,106,0, - 0,745,746,3,40,20,0,746,747,5,31,0,0,747,748,6,24,-1,0,748,1135,1,0,0, - 0,749,750,5,107,0,0,750,751,3,40,20,0,751,752,5,31,0,0,752,753,6,24,-1, - 0,753,1135,1,0,0,0,754,755,5,108,0,0,755,756,3,40,20,0,756,757,5,31,0, - 0,757,758,6,24,-1,0,758,1135,1,0,0,0,759,760,5,109,0,0,760,761,3,40,20, - 0,761,762,5,31,0,0,762,763,6,24,-1,0,763,1135,1,0,0,0,764,765,5,110,0, - 0,765,766,3,40,20,0,766,767,5,31,0,0,767,768,6,24,-1,0,768,1135,1,0,0, - 0,769,770,5,111,0,0,770,771,3,40,20,0,771,772,5,31,0,0,772,773,6,24,-1, - 0,773,1135,1,0,0,0,774,775,5,112,0,0,775,776,3,40,20,0,776,777,5,31,0, - 0,777,778,6,24,-1,0,778,1135,1,0,0,0,779,780,5,113,0,0,780,781,3,40,20, - 0,781,782,5,31,0,0,782,783,6,24,-1,0,783,1135,1,0,0,0,784,785,5,114,0, - 0,785,786,3,40,20,0,786,787,5,31,0,0,787,788,6,24,-1,0,788,1135,1,0,0, - 0,789,790,5,115,0,0,790,791,3,40,20,0,791,792,5,31,0,0,792,793,6,24,-1, - 0,793,1135,1,0,0,0,794,795,5,116,0,0,795,796,3,40,20,0,796,797,5,31,0, - 0,797,798,6,24,-1,0,798,1135,1,0,0,0,799,800,5,117,0,0,800,801,3,40,20, - 0,801,802,5,31,0,0,802,803,6,24,-1,0,803,1135,1,0,0,0,804,805,5,118,0, - 0,805,806,3,40,20,0,806,807,5,31,0,0,807,808,6,24,-1,0,808,1135,1,0,0, - 0,809,810,5,119,0,0,810,811,3,40,20,0,811,812,5,31,0,0,812,813,6,24,-1, - 0,813,1135,1,0,0,0,814,815,5,120,0,0,815,816,3,40,20,0,816,817,5,31,0, - 0,817,818,6,24,-1,0,818,1135,1,0,0,0,819,820,5,121,0,0,820,821,3,40,20, - 0,821,822,5,31,0,0,822,823,6,24,-1,0,823,1135,1,0,0,0,824,825,5,122,0, - 0,825,826,3,40,20,0,826,827,5,31,0,0,827,828,6,24,-1,0,828,1135,1,0,0, - 0,829,830,5,123,0,0,830,831,3,40,20,0,831,832,5,31,0,0,832,833,6,24,-1, - 0,833,1135,1,0,0,0,834,835,5,124,0,0,835,836,3,40,20,0,836,837,5,31,0, - 0,837,838,6,24,-1,0,838,1135,1,0,0,0,839,840,5,125,0,0,840,841,3,40,20, - 0,841,842,5,31,0,0,842,843,6,24,-1,0,843,1135,1,0,0,0,844,845,5,126,0, - 0,845,846,3,40,20,0,846,847,5,31,0,0,847,848,6,24,-1,0,848,1135,1,0,0, - 0,849,850,5,127,0,0,850,851,3,40,20,0,851,852,5,31,0,0,852,853,6,24,-1, - 0,853,1135,1,0,0,0,854,855,5,128,0,0,855,856,3,40,20,0,856,857,5,31,0, - 0,857,858,6,24,-1,0,858,1135,1,0,0,0,859,860,5,129,0,0,860,861,3,40,20, - 0,861,862,5,31,0,0,862,863,6,24,-1,0,863,1135,1,0,0,0,864,865,5,130,0, - 0,865,866,3,40,20,0,866,867,5,31,0,0,867,868,6,24,-1,0,868,1135,1,0,0, - 0,869,870,5,131,0,0,870,871,3,40,20,0,871,872,5,31,0,0,872,873,6,24,-1, - 0,873,1135,1,0,0,0,874,875,5,132,0,0,875,876,3,40,20,0,876,877,5,31,0, - 0,877,878,6,24,-1,0,878,1135,1,0,0,0,879,880,5,133,0,0,880,881,3,40,20, - 0,881,882,5,31,0,0,882,883,6,24,-1,0,883,1135,1,0,0,0,884,885,5,134,0, - 0,885,886,3,40,20,0,886,887,5,31,0,0,887,888,6,24,-1,0,888,1135,1,0,0, - 0,889,890,5,135,0,0,890,891,3,40,20,0,891,892,5,31,0,0,892,893,6,24,-1, - 0,893,1135,1,0,0,0,894,895,5,136,0,0,895,896,3,40,20,0,896,897,5,31,0, - 0,897,898,6,24,-1,0,898,1135,1,0,0,0,899,900,5,137,0,0,900,901,3,40,20, - 0,901,902,5,31,0,0,902,903,6,24,-1,0,903,1135,1,0,0,0,904,905,5,138,0, - 0,905,906,3,40,20,0,906,907,5,31,0,0,907,908,6,24,-1,0,908,1135,1,0,0, - 0,909,910,5,139,0,0,910,911,3,40,20,0,911,912,5,31,0,0,912,913,6,24,-1, - 0,913,1135,1,0,0,0,914,915,5,140,0,0,915,916,3,40,20,0,916,917,5,31,0, - 0,917,918,6,24,-1,0,918,1135,1,0,0,0,919,920,5,141,0,0,920,921,3,40,20, - 0,921,922,5,31,0,0,922,923,6,24,-1,0,923,1135,1,0,0,0,924,925,5,142,0, - 0,925,926,3,40,20,0,926,927,5,31,0,0,927,928,6,24,-1,0,928,1135,1,0,0, - 0,929,930,5,143,0,0,930,931,3,40,20,0,931,932,5,31,0,0,932,933,6,24,-1, - 0,933,1135,1,0,0,0,934,935,5,144,0,0,935,936,3,40,20,0,936,937,5,31,0, - 0,937,938,6,24,-1,0,938,1135,1,0,0,0,939,940,5,145,0,0,940,941,3,40,20, - 0,941,942,5,31,0,0,942,943,6,24,-1,0,943,1135,1,0,0,0,944,945,5,146,0, - 0,945,946,3,40,20,0,946,947,5,31,0,0,947,948,6,24,-1,0,948,1135,1,0,0, - 0,949,950,5,147,0,0,950,951,3,40,20,0,951,952,5,31,0,0,952,953,6,24,-1, - 0,953,1135,1,0,0,0,954,955,5,148,0,0,955,956,3,40,20,0,956,957,5,31,0, - 0,957,958,6,24,-1,0,958,1135,1,0,0,0,959,960,5,149,0,0,960,961,3,40,20, - 0,961,962,5,31,0,0,962,963,6,24,-1,0,963,1135,1,0,0,0,964,965,5,150,0, - 0,965,966,3,40,20,0,966,967,5,31,0,0,967,968,6,24,-1,0,968,1135,1,0,0, - 0,969,970,5,151,0,0,970,971,3,40,20,0,971,972,5,31,0,0,972,973,6,24,-1, - 0,973,1135,1,0,0,0,974,975,5,152,0,0,975,976,3,40,20,0,976,977,5,31,0, - 0,977,978,6,24,-1,0,978,1135,1,0,0,0,979,980,5,153,0,0,980,981,3,40,20, - 0,981,982,5,31,0,0,982,983,6,24,-1,0,983,1135,1,0,0,0,984,985,5,154,0, - 0,985,986,3,40,20,0,986,987,5,31,0,0,987,988,6,24,-1,0,988,1135,1,0,0, - 0,989,990,5,155,0,0,990,991,3,40,20,0,991,992,5,31,0,0,992,993,6,24,-1, - 0,993,1135,1,0,0,0,994,995,5,156,0,0,995,996,3,40,20,0,996,997,5,31,0, - 0,997,998,6,24,-1,0,998,1135,1,0,0,0,999,1000,5,157,0,0,1000,1001,3,40, - 20,0,1001,1002,5,31,0,0,1002,1003,6,24,-1,0,1003,1135,1,0,0,0,1004,1005, - 5,158,0,0,1005,1006,3,40,20,0,1006,1007,5,31,0,0,1007,1008,6,24,-1,0,1008, - 1135,1,0,0,0,1009,1010,5,159,0,0,1010,1011,3,40,20,0,1011,1012,5,31,0, - 0,1012,1013,6,24,-1,0,1013,1135,1,0,0,0,1014,1015,5,160,0,0,1015,1016, - 3,40,20,0,1016,1017,5,31,0,0,1017,1018,6,24,-1,0,1018,1135,1,0,0,0,1019, - 1020,5,161,0,0,1020,1021,3,40,20,0,1021,1022,5,31,0,0,1022,1023,6,24,-1, - 0,1023,1135,1,0,0,0,1024,1025,5,162,0,0,1025,1026,3,40,20,0,1026,1027, - 5,31,0,0,1027,1028,6,24,-1,0,1028,1135,1,0,0,0,1029,1030,5,163,0,0,1030, - 1031,3,40,20,0,1031,1032,5,31,0,0,1032,1033,6,24,-1,0,1033,1135,1,0,0, - 0,1034,1035,5,164,0,0,1035,1036,3,40,20,0,1036,1037,5,31,0,0,1037,1038, - 6,24,-1,0,1038,1135,1,0,0,0,1039,1040,5,165,0,0,1040,1041,3,40,20,0,1041, - 1042,5,31,0,0,1042,1043,6,24,-1,0,1043,1135,1,0,0,0,1044,1045,5,166,0, - 0,1045,1046,3,40,20,0,1046,1047,5,31,0,0,1047,1048,6,24,-1,0,1048,1135, - 1,0,0,0,1049,1050,5,167,0,0,1050,1051,3,40,20,0,1051,1052,5,31,0,0,1052, - 1053,6,24,-1,0,1053,1135,1,0,0,0,1054,1055,5,168,0,0,1055,1056,3,40,20, - 0,1056,1057,5,31,0,0,1057,1058,6,24,-1,0,1058,1135,1,0,0,0,1059,1060,5, - 169,0,0,1060,1061,3,40,20,0,1061,1062,5,31,0,0,1062,1063,6,24,-1,0,1063, - 1135,1,0,0,0,1064,1065,5,170,0,0,1065,1066,3,40,20,0,1066,1067,5,31,0, - 0,1067,1068,6,24,-1,0,1068,1135,1,0,0,0,1069,1070,5,171,0,0,1070,1071, - 3,40,20,0,1071,1072,5,31,0,0,1072,1073,6,24,-1,0,1073,1135,1,0,0,0,1074, - 1075,5,172,0,0,1075,1076,3,40,20,0,1076,1077,5,31,0,0,1077,1078,6,24,-1, - 0,1078,1135,1,0,0,0,1079,1080,5,173,0,0,1080,1081,3,40,20,0,1081,1082, - 5,31,0,0,1082,1083,6,24,-1,0,1083,1135,1,0,0,0,1084,1085,5,174,0,0,1085, - 1086,3,40,20,0,1086,1087,5,31,0,0,1087,1088,6,24,-1,0,1088,1135,1,0,0, - 0,1089,1090,5,175,0,0,1090,1091,3,40,20,0,1091,1092,5,31,0,0,1092,1093, - 6,24,-1,0,1093,1135,1,0,0,0,1094,1095,5,176,0,0,1095,1096,3,40,20,0,1096, - 1097,5,31,0,0,1097,1098,6,24,-1,0,1098,1135,1,0,0,0,1099,1100,5,177,0, - 0,1100,1101,3,40,20,0,1101,1102,5,31,0,0,1102,1103,6,24,-1,0,1103,1135, - 1,0,0,0,1104,1105,5,178,0,0,1105,1106,3,40,20,0,1106,1107,5,31,0,0,1107, - 1108,6,24,-1,0,1108,1135,1,0,0,0,1109,1110,5,179,0,0,1110,1111,3,40,20, - 0,1111,1112,5,31,0,0,1112,1113,6,24,-1,0,1113,1135,1,0,0,0,1114,1115,5, - 180,0,0,1115,1116,3,40,20,0,1116,1117,5,31,0,0,1117,1118,6,24,-1,0,1118, - 1135,1,0,0,0,1119,1120,5,181,0,0,1120,1121,3,40,20,0,1121,1122,5,31,0, - 0,1122,1123,6,24,-1,0,1123,1135,1,0,0,0,1124,1125,5,182,0,0,1125,1126, - 3,40,20,0,1126,1127,5,31,0,0,1127,1128,6,24,-1,0,1128,1135,1,0,0,0,1129, - 1130,5,183,0,0,1130,1131,3,40,20,0,1131,1132,5,31,0,0,1132,1133,6,24,-1, - 0,1133,1135,1,0,0,0,1134,446,1,0,0,0,1134,448,1,0,0,0,1134,450,1,0,0,0, - 1134,452,1,0,0,0,1134,454,1,0,0,0,1134,456,1,0,0,0,1134,458,1,0,0,0,1134, - 460,1,0,0,0,1134,465,1,0,0,0,1134,469,1,0,0,0,1134,474,1,0,0,0,1134,479, - 1,0,0,0,1134,484,1,0,0,0,1134,489,1,0,0,0,1134,494,1,0,0,0,1134,499,1, - 0,0,0,1134,504,1,0,0,0,1134,509,1,0,0,0,1134,514,1,0,0,0,1134,519,1,0, - 0,0,1134,524,1,0,0,0,1134,529,1,0,0,0,1134,534,1,0,0,0,1134,539,1,0,0, - 0,1134,544,1,0,0,0,1134,549,1,0,0,0,1134,554,1,0,0,0,1134,559,1,0,0,0, - 1134,564,1,0,0,0,1134,569,1,0,0,0,1134,574,1,0,0,0,1134,579,1,0,0,0,1134, - 584,1,0,0,0,1134,589,1,0,0,0,1134,594,1,0,0,0,1134,599,1,0,0,0,1134,604, - 1,0,0,0,1134,609,1,0,0,0,1134,614,1,0,0,0,1134,619,1,0,0,0,1134,624,1, - 0,0,0,1134,629,1,0,0,0,1134,634,1,0,0,0,1134,639,1,0,0,0,1134,644,1,0, - 0,0,1134,649,1,0,0,0,1134,654,1,0,0,0,1134,659,1,0,0,0,1134,664,1,0,0, - 0,1134,669,1,0,0,0,1134,674,1,0,0,0,1134,679,1,0,0,0,1134,684,1,0,0,0, - 1134,689,1,0,0,0,1134,694,1,0,0,0,1134,699,1,0,0,0,1134,704,1,0,0,0,1134, - 709,1,0,0,0,1134,714,1,0,0,0,1134,719,1,0,0,0,1134,724,1,0,0,0,1134,729, - 1,0,0,0,1134,734,1,0,0,0,1134,739,1,0,0,0,1134,744,1,0,0,0,1134,749,1, - 0,0,0,1134,754,1,0,0,0,1134,759,1,0,0,0,1134,764,1,0,0,0,1134,769,1,0, - 0,0,1134,774,1,0,0,0,1134,779,1,0,0,0,1134,784,1,0,0,0,1134,789,1,0,0, - 0,1134,794,1,0,0,0,1134,799,1,0,0,0,1134,804,1,0,0,0,1134,809,1,0,0,0, - 1134,814,1,0,0,0,1134,819,1,0,0,0,1134,824,1,0,0,0,1134,829,1,0,0,0,1134, - 834,1,0,0,0,1134,839,1,0,0,0,1134,844,1,0,0,0,1134,849,1,0,0,0,1134,854, - 1,0,0,0,1134,859,1,0,0,0,1134,864,1,0,0,0,1134,869,1,0,0,0,1134,874,1, - 0,0,0,1134,879,1,0,0,0,1134,884,1,0,0,0,1134,889,1,0,0,0,1134,894,1,0, - 0,0,1134,899,1,0,0,0,1134,904,1,0,0,0,1134,909,1,0,0,0,1134,914,1,0,0, - 0,1134,919,1,0,0,0,1134,924,1,0,0,0,1134,929,1,0,0,0,1134,934,1,0,0,0, - 1134,939,1,0,0,0,1134,944,1,0,0,0,1134,949,1,0,0,0,1134,954,1,0,0,0,1134, - 959,1,0,0,0,1134,964,1,0,0,0,1134,969,1,0,0,0,1134,974,1,0,0,0,1134,979, - 1,0,0,0,1134,984,1,0,0,0,1134,989,1,0,0,0,1134,994,1,0,0,0,1134,999,1, - 0,0,0,1134,1004,1,0,0,0,1134,1009,1,0,0,0,1134,1014,1,0,0,0,1134,1019, - 1,0,0,0,1134,1024,1,0,0,0,1134,1029,1,0,0,0,1134,1034,1,0,0,0,1134,1039, - 1,0,0,0,1134,1044,1,0,0,0,1134,1049,1,0,0,0,1134,1054,1,0,0,0,1134,1059, - 1,0,0,0,1134,1064,1,0,0,0,1134,1069,1,0,0,0,1134,1074,1,0,0,0,1134,1079, - 1,0,0,0,1134,1084,1,0,0,0,1134,1089,1,0,0,0,1134,1094,1,0,0,0,1134,1099, - 1,0,0,0,1134,1104,1,0,0,0,1134,1109,1,0,0,0,1134,1114,1,0,0,0,1134,1119, - 1,0,0,0,1134,1124,1,0,0,0,1134,1129,1,0,0,0,1135,49,1,0,0,0,1136,1137, - 3,32,16,0,1137,1138,5,0,0,1,1138,1139,6,25,-1,0,1139,51,1,0,0,0,44,59, - 67,75,77,84,94,104,109,119,129,131,144,150,152,167,169,190,192,225,227, - 246,253,262,281,297,299,312,314,327,329,346,348,357,365,370,384,394,407, - 410,417,425,429,432,1134 + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,3,24,1145,8,24,1,25,1,25,1,25,1,25,1,25,0, + 0,26,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46, + 48,50,0,6,1,0,6,7,1,0,33,34,1,0,37,38,1,0,42,43,1,0,44,45,1,0,46,47,1329, + 0,59,1,0,0,0,2,77,1,0,0,0,4,79,1,0,0,0,6,109,1,0,0,0,8,111,1,0,0,0,10, + 136,1,0,0,0,12,157,1,0,0,0,14,172,1,0,0,0,16,195,1,0,0,0,18,230,1,0,0, + 0,20,281,1,0,0,0,22,283,1,0,0,0,24,302,1,0,0,0,26,317,1,0,0,0,28,332,1, + 0,0,0,30,351,1,0,0,0,32,370,1,0,0,0,34,372,1,0,0,0,36,384,1,0,0,0,38,386, + 1,0,0,0,40,410,1,0,0,0,42,432,1,0,0,0,44,434,1,0,0,0,46,440,1,0,0,0,48, + 1144,1,0,0,0,50,1146,1,0,0,0,52,53,3,48,24,0,53,54,5,1,0,0,54,55,6,0,-1, + 0,55,60,1,0,0,0,56,57,3,48,24,0,57,58,6,0,-1,0,58,60,1,0,0,0,59,52,1,0, + 0,0,59,56,1,0,0,0,60,1,1,0,0,0,61,62,5,2,0,0,62,63,3,0,0,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,78,1,0,0,0,69,70,5,2,0,0,70,71,3,6,3,0,71,72,6,1,-1,0,72,74,1,0,0, + 0,73,69,1,0,0,0,74,75,1,0,0,0,75,73,1,0,0,0,75,76,1,0,0,0,76,78,1,0,0, + 0,77,65,1,0,0,0,77,73,1,0,0,0,78,3,1,0,0,0,79,80,3,0,0,0,80,84,6,2,-1, + 0,81,82,3,2,1,0,82,83,6,2,-1,0,83,85,1,0,0,0,84,81,1,0,0,0,84,85,1,0,0, + 0,85,5,1,0,0,0,86,87,5,3,0,0,87,88,3,4,2,0,88,89,6,3,-1,0,89,95,1,0,0, + 0,90,91,5,4,0,0,91,92,3,4,2,0,92,93,6,3,-1,0,93,95,1,0,0,0,94,86,1,0,0, + 0,94,90,1,0,0,0,95,110,1,0,0,0,96,97,5,3,0,0,97,98,3,6,3,0,98,99,6,3,-1, + 0,99,105,1,0,0,0,100,101,5,4,0,0,101,102,3,6,3,0,102,103,6,3,-1,0,103, + 105,1,0,0,0,104,96,1,0,0,0,104,100,1,0,0,0,105,110,1,0,0,0,106,107,3,4, + 2,0,107,108,6,3,-1,0,108,110,1,0,0,0,109,94,1,0,0,0,109,104,1,0,0,0,109, + 106,1,0,0,0,110,7,1,0,0,0,111,112,3,6,3,0,112,131,6,4,-1,0,113,119,5,5, + 0,0,114,115,7,0,0,0,115,120,6,4,-1,0,116,117,3,6,3,0,117,118,6,4,-1,0, + 118,120,1,0,0,0,119,114,1,0,0,0,119,116,1,0,0,0,120,130,1,0,0,0,121,122, + 5,8,0,0,122,123,3,6,3,0,123,124,6,4,-1,0,124,130,1,0,0,0,125,126,5,9,0, + 0,126,127,3,6,3,0,127,128,6,4,-1,0,128,130,1,0,0,0,129,113,1,0,0,0,129, + 121,1,0,0,0,129,125,1,0,0,0,130,133,1,0,0,0,131,129,1,0,0,0,131,132,1, + 0,0,0,132,134,1,0,0,0,133,131,1,0,0,0,134,135,6,4,-1,0,135,9,1,0,0,0,136, + 137,3,8,4,0,137,152,6,5,-1,0,138,144,5,4,0,0,139,140,7,0,0,0,140,145,6, + 5,-1,0,141,142,3,8,4,0,142,143,6,5,-1,0,143,145,1,0,0,0,144,139,1,0,0, + 0,144,141,1,0,0,0,145,151,1,0,0,0,146,147,5,3,0,0,147,148,3,8,4,0,148, + 149,6,5,-1,0,149,151,1,0,0,0,150,138,1,0,0,0,150,146,1,0,0,0,151,154,1, + 0,0,0,152,150,1,0,0,0,152,153,1,0,0,0,153,155,1,0,0,0,154,152,1,0,0,0, + 155,156,6,5,-1,0,156,11,1,0,0,0,157,158,3,10,5,0,158,169,6,6,-1,0,159, + 160,5,10,0,0,160,161,3,10,5,0,161,162,6,6,-1,0,162,168,1,0,0,0,163,164, + 5,11,0,0,164,165,3,10,5,0,165,166,6,6,-1,0,166,168,1,0,0,0,167,159,1,0, + 0,0,167,163,1,0,0,0,168,171,1,0,0,0,169,167,1,0,0,0,169,170,1,0,0,0,170, + 13,1,0,0,0,171,169,1,0,0,0,172,173,3,12,6,0,173,192,6,7,-1,0,174,175,5, + 12,0,0,175,176,3,12,6,0,176,177,6,7,-1,0,177,191,1,0,0,0,178,179,5,13, + 0,0,179,180,3,12,6,0,180,181,6,7,-1,0,181,191,1,0,0,0,182,183,5,14,0,0, + 183,184,3,12,6,0,184,185,6,7,-1,0,185,191,1,0,0,0,186,187,5,15,0,0,187, + 188,3,12,6,0,188,189,6,7,-1,0,189,191,1,0,0,0,190,174,1,0,0,0,190,178, + 1,0,0,0,190,182,1,0,0,0,190,186,1,0,0,0,191,194,1,0,0,0,192,190,1,0,0, + 0,192,193,1,0,0,0,193,15,1,0,0,0,194,192,1,0,0,0,195,196,3,14,7,0,196, + 227,6,8,-1,0,197,198,5,16,0,0,198,199,3,14,7,0,199,200,6,8,-1,0,200,226, + 1,0,0,0,201,202,5,17,0,0,202,203,3,14,7,0,203,204,6,8,-1,0,204,226,1,0, + 0,0,205,206,5,18,0,0,206,207,3,14,7,0,207,208,6,8,-1,0,208,226,1,0,0,0, + 209,210,5,19,0,0,210,211,3,14,7,0,211,212,6,8,-1,0,212,226,1,0,0,0,213, + 214,5,20,0,0,214,215,3,14,7,0,215,216,6,8,-1,0,216,226,1,0,0,0,217,218, + 5,21,0,0,218,219,3,14,7,0,219,220,6,8,-1,0,220,226,1,0,0,0,221,222,5,22, + 0,0,222,223,3,14,7,0,223,224,6,8,-1,0,224,226,1,0,0,0,225,197,1,0,0,0, + 225,201,1,0,0,0,225,205,1,0,0,0,225,209,1,0,0,0,225,213,1,0,0,0,225,217, + 1,0,0,0,225,221,1,0,0,0,226,229,1,0,0,0,227,225,1,0,0,0,227,228,1,0,0, + 0,228,17,1,0,0,0,229,227,1,0,0,0,230,231,3,16,8,0,231,253,6,9,-1,0,232, + 233,5,23,0,0,233,247,6,9,-1,0,234,235,5,24,0,0,235,247,6,9,-1,0,236,237, + 5,25,0,0,237,247,6,9,-1,0,238,239,5,26,0,0,239,247,6,9,-1,0,240,241,5, + 27,0,0,241,247,6,9,-1,0,242,243,5,28,0,0,243,247,6,9,-1,0,244,245,5,29, + 0,0,245,247,6,9,-1,0,246,232,1,0,0,0,246,234,1,0,0,0,246,236,1,0,0,0,246, + 238,1,0,0,0,246,240,1,0,0,0,246,242,1,0,0,0,246,244,1,0,0,0,247,248,1, + 0,0,0,248,249,3,16,8,0,249,250,6,9,-1,0,250,252,1,0,0,0,251,246,1,0,0, + 0,252,255,1,0,0,0,253,251,1,0,0,0,253,254,1,0,0,0,254,262,1,0,0,0,255, + 253,1,0,0,0,256,257,5,30,0,0,257,258,5,9,0,0,258,259,3,16,8,0,259,260, + 5,31,0,0,260,261,6,9,-1,0,261,263,1,0,0,0,262,256,1,0,0,0,262,263,1,0, + 0,0,263,264,1,0,0,0,264,265,6,9,-1,0,265,19,1,0,0,0,266,267,5,32,0,0,267, + 268,3,18,9,0,268,269,6,10,-1,0,269,282,1,0,0,0,270,271,5,32,0,0,271,272, + 3,20,10,0,272,273,6,10,-1,0,273,282,1,0,0,0,274,275,5,32,0,0,275,276,3, + 34,17,0,276,277,6,10,-1,0,277,282,1,0,0,0,278,279,3,18,9,0,279,280,6,10, + -1,0,280,282,1,0,0,0,281,266,1,0,0,0,281,270,1,0,0,0,281,274,1,0,0,0,281, + 278,1,0,0,0,282,21,1,0,0,0,283,284,3,20,10,0,284,299,6,11,-1,0,285,286, + 5,33,0,0,286,287,3,20,10,0,287,288,6,11,-1,0,288,298,1,0,0,0,289,290,5, + 34,0,0,290,291,3,20,10,0,291,292,6,11,-1,0,292,298,1,0,0,0,293,294,7,1, + 0,0,294,295,3,34,17,0,295,296,6,11,-1,0,296,298,1,0,0,0,297,285,1,0,0, + 0,297,289,1,0,0,0,297,293,1,0,0,0,298,301,1,0,0,0,299,297,1,0,0,0,299, + 300,1,0,0,0,300,23,1,0,0,0,301,299,1,0,0,0,302,303,3,22,11,0,303,314,6, + 12,-1,0,304,305,5,35,0,0,305,306,3,22,11,0,306,307,6,12,-1,0,307,313,1, + 0,0,0,308,309,5,35,0,0,309,310,3,34,17,0,310,311,6,12,-1,0,311,313,1,0, + 0,0,312,304,1,0,0,0,312,308,1,0,0,0,313,316,1,0,0,0,314,312,1,0,0,0,314, + 315,1,0,0,0,315,25,1,0,0,0,316,314,1,0,0,0,317,318,3,24,12,0,318,329,6, + 13,-1,0,319,320,5,36,0,0,320,321,3,24,12,0,321,322,6,13,-1,0,322,328,1, + 0,0,0,323,324,5,36,0,0,324,325,3,34,17,0,325,326,6,13,-1,0,326,328,1,0, + 0,0,327,319,1,0,0,0,327,323,1,0,0,0,328,331,1,0,0,0,329,327,1,0,0,0,329, + 330,1,0,0,0,330,27,1,0,0,0,331,329,1,0,0,0,332,333,3,26,13,0,333,348,6, + 14,-1,0,334,335,5,37,0,0,335,336,3,26,13,0,336,337,6,14,-1,0,337,347,1, + 0,0,0,338,339,5,38,0,0,339,340,3,26,13,0,340,341,6,14,-1,0,341,347,1,0, + 0,0,342,343,7,2,0,0,343,344,3,34,17,0,344,345,6,14,-1,0,345,347,1,0,0, + 0,346,334,1,0,0,0,346,338,1,0,0,0,346,342,1,0,0,0,347,350,1,0,0,0,348, + 346,1,0,0,0,348,349,1,0,0,0,349,29,1,0,0,0,350,348,1,0,0,0,351,352,3,28, + 14,0,352,357,6,15,-1,0,353,354,5,39,0,0,354,355,3,30,15,0,355,356,6,15, + -1,0,356,358,1,0,0,0,357,353,1,0,0,0,357,358,1,0,0,0,358,31,1,0,0,0,359, + 360,3,30,15,0,360,365,6,16,-1,0,361,362,5,40,0,0,362,363,3,32,16,0,363, + 364,6,16,-1,0,364,366,1,0,0,0,365,361,1,0,0,0,365,366,1,0,0,0,366,371, + 1,0,0,0,367,368,3,34,17,0,368,369,6,16,-1,0,369,371,1,0,0,0,370,359,1, + 0,0,0,370,367,1,0,0,0,371,33,1,0,0,0,372,373,3,36,18,0,373,374,3,38,19, + 0,374,375,5,41,0,0,375,376,3,32,16,0,376,377,6,17,-1,0,377,35,1,0,0,0, + 378,379,7,3,0,0,379,385,6,18,-1,0,380,381,7,4,0,0,381,385,6,18,-1,0,382, + 383,7,5,0,0,383,385,6,18,-1,0,384,378,1,0,0,0,384,380,1,0,0,0,384,382, + 1,0,0,0,385,37,1,0,0,0,386,387,3,16,8,0,387,394,6,19,-1,0,388,389,5,48, + 0,0,389,390,3,16,8,0,390,391,6,19,-1,0,391,393,1,0,0,0,392,388,1,0,0,0, + 393,396,1,0,0,0,394,392,1,0,0,0,394,395,1,0,0,0,395,397,1,0,0,0,396,394, + 1,0,0,0,397,398,6,19,-1,0,398,39,1,0,0,0,399,400,3,32,16,0,400,407,6,20, + -1,0,401,402,5,48,0,0,402,403,3,32,16,0,403,404,6,20,-1,0,404,406,1,0, + 0,0,405,401,1,0,0,0,406,409,1,0,0,0,407,405,1,0,0,0,407,408,1,0,0,0,408, + 411,1,0,0,0,409,407,1,0,0,0,410,399,1,0,0,0,410,411,1,0,0,0,411,41,1,0, + 0,0,412,413,3,32,16,0,413,414,6,21,-1,0,414,418,1,0,0,0,415,416,7,0,0, + 0,416,418,6,21,-1,0,417,412,1,0,0,0,417,415,1,0,0,0,418,429,1,0,0,0,419, + 425,5,48,0,0,420,421,3,32,16,0,421,422,6,21,-1,0,422,426,1,0,0,0,423,424, + 7,0,0,0,424,426,6,21,-1,0,425,420,1,0,0,0,425,423,1,0,0,0,426,428,1,0, + 0,0,427,419,1,0,0,0,428,431,1,0,0,0,429,427,1,0,0,0,429,430,1,0,0,0,430, + 433,1,0,0,0,431,429,1,0,0,0,432,417,1,0,0,0,432,433,1,0,0,0,433,43,1,0, + 0,0,434,435,3,32,16,0,435,436,6,22,-1,0,436,437,5,49,0,0,437,438,3,32, + 16,0,438,439,6,22,-1,0,439,45,1,0,0,0,440,441,3,32,16,0,441,442,6,23,-1, + 0,442,443,5,41,0,0,443,444,3,32,16,0,444,445,6,23,-1,0,445,47,1,0,0,0, + 446,447,5,50,0,0,447,1145,6,24,-1,0,448,449,5,51,0,0,449,1145,6,24,-1, + 0,450,451,5,190,0,0,451,1145,6,24,-1,0,452,453,5,187,0,0,453,1145,6,24, + -1,0,454,455,5,189,0,0,455,1145,6,24,-1,0,456,457,5,188,0,0,457,1145,6, + 24,-1,0,458,459,5,191,0,0,459,1145,6,24,-1,0,460,461,5,52,0,0,461,462, + 3,32,16,0,462,463,5,53,0,0,463,464,6,24,-1,0,464,1145,1,0,0,0,465,466, + 5,54,0,0,466,467,3,48,24,0,467,468,6,24,-1,0,468,1145,1,0,0,0,469,470, + 5,55,0,0,470,471,3,40,20,0,471,472,5,56,0,0,472,473,6,24,-1,0,473,1145, + 1,0,0,0,474,475,5,55,0,0,475,476,3,40,20,0,476,477,5,57,0,0,477,478,6, + 24,-1,0,478,1145,1,0,0,0,479,480,5,30,0,0,480,481,3,44,22,0,481,482,5, + 31,0,0,482,483,6,24,-1,0,483,1145,1,0,0,0,484,485,5,55,0,0,485,486,3,44, + 22,0,486,487,5,31,0,0,487,488,6,24,-1,0,488,1145,1,0,0,0,489,490,5,55, + 0,0,490,491,3,44,22,0,491,492,5,57,0,0,492,493,6,24,-1,0,493,1145,1,0, + 0,0,494,495,5,30,0,0,495,496,3,44,22,0,496,497,5,57,0,0,497,498,6,24,-1, + 0,498,1145,1,0,0,0,499,500,5,30,0,0,500,501,3,32,16,0,501,502,5,31,0,0, + 502,503,6,24,-1,0,503,1145,1,0,0,0,504,505,5,58,0,0,505,506,3,46,23,0, + 506,507,5,59,0,0,507,508,6,24,-1,0,508,1145,1,0,0,0,509,510,5,58,0,0,510, + 511,3,42,21,0,511,512,5,59,0,0,512,513,6,24,-1,0,513,1145,1,0,0,0,514, + 515,5,60,0,0,515,516,3,40,20,0,516,517,5,31,0,0,517,518,6,24,-1,0,518, + 1145,1,0,0,0,519,520,5,61,0,0,520,521,3,40,20,0,521,522,5,31,0,0,522,523, + 6,24,-1,0,523,1145,1,0,0,0,524,525,5,62,0,0,525,526,3,40,20,0,526,527, + 5,31,0,0,527,528,6,24,-1,0,528,1145,1,0,0,0,529,530,5,63,0,0,530,531,3, + 40,20,0,531,532,5,31,0,0,532,533,6,24,-1,0,533,1145,1,0,0,0,534,535,5, + 64,0,0,535,536,3,40,20,0,536,537,5,31,0,0,537,538,6,24,-1,0,538,1145,1, + 0,0,0,539,540,5,65,0,0,540,541,3,40,20,0,541,542,5,31,0,0,542,543,6,24, + -1,0,543,1145,1,0,0,0,544,545,5,66,0,0,545,546,3,40,20,0,546,547,5,31, + 0,0,547,548,6,24,-1,0,548,1145,1,0,0,0,549,550,5,67,0,0,550,551,3,40,20, + 0,551,552,5,31,0,0,552,553,6,24,-1,0,553,1145,1,0,0,0,554,555,5,68,0,0, + 555,556,3,40,20,0,556,557,5,31,0,0,557,558,6,24,-1,0,558,1145,1,0,0,0, + 559,560,5,69,0,0,560,561,3,40,20,0,561,562,5,31,0,0,562,563,6,24,-1,0, + 563,1145,1,0,0,0,564,565,5,70,0,0,565,566,3,40,20,0,566,567,5,31,0,0,567, + 568,6,24,-1,0,568,1145,1,0,0,0,569,570,5,71,0,0,570,571,3,40,20,0,571, + 572,5,31,0,0,572,573,6,24,-1,0,573,1145,1,0,0,0,574,575,5,72,0,0,575,576, + 3,40,20,0,576,577,5,31,0,0,577,578,6,24,-1,0,578,1145,1,0,0,0,579,580, + 5,73,0,0,580,581,3,40,20,0,581,582,5,31,0,0,582,583,6,24,-1,0,583,1145, + 1,0,0,0,584,585,5,74,0,0,585,586,3,40,20,0,586,587,5,31,0,0,587,588,6, + 24,-1,0,588,1145,1,0,0,0,589,590,5,75,0,0,590,591,3,40,20,0,591,592,5, + 31,0,0,592,593,6,24,-1,0,593,1145,1,0,0,0,594,595,5,76,0,0,595,596,3,40, + 20,0,596,597,5,31,0,0,597,598,6,24,-1,0,598,1145,1,0,0,0,599,600,5,77, + 0,0,600,601,3,40,20,0,601,602,5,31,0,0,602,603,6,24,-1,0,603,1145,1,0, + 0,0,604,605,5,78,0,0,605,606,3,40,20,0,606,607,5,31,0,0,607,608,6,24,-1, + 0,608,1145,1,0,0,0,609,610,5,79,0,0,610,611,3,40,20,0,611,612,5,31,0,0, + 612,613,6,24,-1,0,613,1145,1,0,0,0,614,615,5,80,0,0,615,616,3,40,20,0, + 616,617,5,31,0,0,617,618,6,24,-1,0,618,1145,1,0,0,0,619,620,5,81,0,0,620, + 621,3,40,20,0,621,622,5,31,0,0,622,623,6,24,-1,0,623,1145,1,0,0,0,624, + 625,5,82,0,0,625,626,3,40,20,0,626,627,5,31,0,0,627,628,6,24,-1,0,628, + 1145,1,0,0,0,629,630,5,83,0,0,630,631,3,40,20,0,631,632,5,31,0,0,632,633, + 6,24,-1,0,633,1145,1,0,0,0,634,635,5,84,0,0,635,636,3,40,20,0,636,637, + 5,31,0,0,637,638,6,24,-1,0,638,1145,1,0,0,0,639,640,5,85,0,0,640,641,3, + 40,20,0,641,642,5,31,0,0,642,643,6,24,-1,0,643,1145,1,0,0,0,644,645,5, + 86,0,0,645,646,3,40,20,0,646,647,5,31,0,0,647,648,6,24,-1,0,648,1145,1, + 0,0,0,649,650,5,87,0,0,650,651,3,40,20,0,651,652,5,31,0,0,652,653,6,24, + -1,0,653,1145,1,0,0,0,654,655,5,88,0,0,655,656,3,40,20,0,656,657,5,31, + 0,0,657,658,6,24,-1,0,658,1145,1,0,0,0,659,660,5,89,0,0,660,661,3,40,20, + 0,661,662,5,31,0,0,662,663,6,24,-1,0,663,1145,1,0,0,0,664,665,5,90,0,0, + 665,666,3,40,20,0,666,667,5,31,0,0,667,668,6,24,-1,0,668,1145,1,0,0,0, + 669,670,5,91,0,0,670,671,3,40,20,0,671,672,5,31,0,0,672,673,6,24,-1,0, + 673,1145,1,0,0,0,674,675,5,92,0,0,675,676,3,40,20,0,676,677,5,31,0,0,677, + 678,6,24,-1,0,678,1145,1,0,0,0,679,680,5,93,0,0,680,681,3,40,20,0,681, + 682,5,31,0,0,682,683,6,24,-1,0,683,1145,1,0,0,0,684,685,5,94,0,0,685,686, + 3,40,20,0,686,687,5,31,0,0,687,688,6,24,-1,0,688,1145,1,0,0,0,689,690, + 5,95,0,0,690,691,3,40,20,0,691,692,5,31,0,0,692,693,6,24,-1,0,693,1145, + 1,0,0,0,694,695,5,96,0,0,695,696,3,40,20,0,696,697,5,31,0,0,697,698,6, + 24,-1,0,698,1145,1,0,0,0,699,700,5,97,0,0,700,701,3,40,20,0,701,702,5, + 31,0,0,702,703,6,24,-1,0,703,1145,1,0,0,0,704,705,5,98,0,0,705,706,3,40, + 20,0,706,707,5,31,0,0,707,708,6,24,-1,0,708,1145,1,0,0,0,709,710,5,99, + 0,0,710,711,3,40,20,0,711,712,5,31,0,0,712,713,6,24,-1,0,713,1145,1,0, + 0,0,714,715,5,100,0,0,715,716,3,40,20,0,716,717,5,31,0,0,717,718,6,24, + -1,0,718,1145,1,0,0,0,719,720,5,101,0,0,720,721,3,40,20,0,721,722,5,31, + 0,0,722,723,6,24,-1,0,723,1145,1,0,0,0,724,725,5,102,0,0,725,726,3,40, + 20,0,726,727,5,31,0,0,727,728,6,24,-1,0,728,1145,1,0,0,0,729,730,5,103, + 0,0,730,731,3,40,20,0,731,732,5,31,0,0,732,733,6,24,-1,0,733,1145,1,0, + 0,0,734,735,5,104,0,0,735,736,3,40,20,0,736,737,5,31,0,0,737,738,6,24, + -1,0,738,1145,1,0,0,0,739,740,5,105,0,0,740,741,3,40,20,0,741,742,5,31, + 0,0,742,743,6,24,-1,0,743,1145,1,0,0,0,744,745,5,106,0,0,745,746,3,40, + 20,0,746,747,5,31,0,0,747,748,6,24,-1,0,748,1145,1,0,0,0,749,750,5,107, + 0,0,750,751,3,40,20,0,751,752,5,31,0,0,752,753,6,24,-1,0,753,1145,1,0, + 0,0,754,755,5,108,0,0,755,756,3,40,20,0,756,757,5,31,0,0,757,758,6,24, + -1,0,758,1145,1,0,0,0,759,760,5,109,0,0,760,761,3,40,20,0,761,762,5,31, + 0,0,762,763,6,24,-1,0,763,1145,1,0,0,0,764,765,5,110,0,0,765,766,3,40, + 20,0,766,767,5,31,0,0,767,768,6,24,-1,0,768,1145,1,0,0,0,769,770,5,111, + 0,0,770,771,3,40,20,0,771,772,5,31,0,0,772,773,6,24,-1,0,773,1145,1,0, + 0,0,774,775,5,112,0,0,775,776,3,40,20,0,776,777,5,31,0,0,777,778,6,24, + -1,0,778,1145,1,0,0,0,779,780,5,113,0,0,780,781,3,40,20,0,781,782,5,31, + 0,0,782,783,6,24,-1,0,783,1145,1,0,0,0,784,785,5,114,0,0,785,786,3,40, + 20,0,786,787,5,31,0,0,787,788,6,24,-1,0,788,1145,1,0,0,0,789,790,5,115, + 0,0,790,791,3,40,20,0,791,792,5,31,0,0,792,793,6,24,-1,0,793,1145,1,0, + 0,0,794,795,5,116,0,0,795,796,3,40,20,0,796,797,5,31,0,0,797,798,6,24, + -1,0,798,1145,1,0,0,0,799,800,5,117,0,0,800,801,3,40,20,0,801,802,5,31, + 0,0,802,803,6,24,-1,0,803,1145,1,0,0,0,804,805,5,118,0,0,805,806,3,40, + 20,0,806,807,5,31,0,0,807,808,6,24,-1,0,808,1145,1,0,0,0,809,810,5,119, + 0,0,810,811,3,40,20,0,811,812,5,31,0,0,812,813,6,24,-1,0,813,1145,1,0, + 0,0,814,815,5,120,0,0,815,816,3,40,20,0,816,817,5,31,0,0,817,818,6,24, + -1,0,818,1145,1,0,0,0,819,820,5,121,0,0,820,821,3,40,20,0,821,822,5,31, + 0,0,822,823,6,24,-1,0,823,1145,1,0,0,0,824,825,5,122,0,0,825,826,3,40, + 20,0,826,827,5,31,0,0,827,828,6,24,-1,0,828,1145,1,0,0,0,829,830,5,123, + 0,0,830,831,3,40,20,0,831,832,5,31,0,0,832,833,6,24,-1,0,833,1145,1,0, + 0,0,834,835,5,124,0,0,835,836,3,40,20,0,836,837,5,31,0,0,837,838,6,24, + -1,0,838,1145,1,0,0,0,839,840,5,125,0,0,840,841,3,40,20,0,841,842,5,31, + 0,0,842,843,6,24,-1,0,843,1145,1,0,0,0,844,845,5,126,0,0,845,846,3,40, + 20,0,846,847,5,31,0,0,847,848,6,24,-1,0,848,1145,1,0,0,0,849,850,5,127, + 0,0,850,851,3,40,20,0,851,852,5,31,0,0,852,853,6,24,-1,0,853,1145,1,0, + 0,0,854,855,5,128,0,0,855,856,3,40,20,0,856,857,5,31,0,0,857,858,6,24, + -1,0,858,1145,1,0,0,0,859,860,5,129,0,0,860,861,3,40,20,0,861,862,5,31, + 0,0,862,863,6,24,-1,0,863,1145,1,0,0,0,864,865,5,130,0,0,865,866,3,40, + 20,0,866,867,5,31,0,0,867,868,6,24,-1,0,868,1145,1,0,0,0,869,870,5,131, + 0,0,870,871,3,40,20,0,871,872,5,31,0,0,872,873,6,24,-1,0,873,1145,1,0, + 0,0,874,875,5,132,0,0,875,876,3,40,20,0,876,877,5,31,0,0,877,878,6,24, + -1,0,878,1145,1,0,0,0,879,880,5,133,0,0,880,881,3,40,20,0,881,882,5,31, + 0,0,882,883,6,24,-1,0,883,1145,1,0,0,0,884,885,5,134,0,0,885,886,3,40, + 20,0,886,887,5,31,0,0,887,888,6,24,-1,0,888,1145,1,0,0,0,889,890,5,135, + 0,0,890,891,3,40,20,0,891,892,5,31,0,0,892,893,6,24,-1,0,893,1145,1,0, + 0,0,894,895,5,136,0,0,895,896,3,40,20,0,896,897,5,31,0,0,897,898,6,24, + -1,0,898,1145,1,0,0,0,899,900,5,137,0,0,900,901,3,40,20,0,901,902,5,31, + 0,0,902,903,6,24,-1,0,903,1145,1,0,0,0,904,905,5,138,0,0,905,906,3,40, + 20,0,906,907,5,31,0,0,907,908,6,24,-1,0,908,1145,1,0,0,0,909,910,5,139, + 0,0,910,911,3,40,20,0,911,912,5,31,0,0,912,913,6,24,-1,0,913,1145,1,0, + 0,0,914,915,5,140,0,0,915,916,3,40,20,0,916,917,5,31,0,0,917,918,6,24, + -1,0,918,1145,1,0,0,0,919,920,5,141,0,0,920,921,3,40,20,0,921,922,5,31, + 0,0,922,923,6,24,-1,0,923,1145,1,0,0,0,924,925,5,142,0,0,925,926,3,40, + 20,0,926,927,5,31,0,0,927,928,6,24,-1,0,928,1145,1,0,0,0,929,930,5,143, + 0,0,930,931,3,40,20,0,931,932,5,31,0,0,932,933,6,24,-1,0,933,1145,1,0, + 0,0,934,935,5,144,0,0,935,936,3,40,20,0,936,937,5,31,0,0,937,938,6,24, + -1,0,938,1145,1,0,0,0,939,940,5,145,0,0,940,941,3,40,20,0,941,942,5,31, + 0,0,942,943,6,24,-1,0,943,1145,1,0,0,0,944,945,5,146,0,0,945,946,3,40, + 20,0,946,947,5,31,0,0,947,948,6,24,-1,0,948,1145,1,0,0,0,949,950,5,147, + 0,0,950,951,3,40,20,0,951,952,5,31,0,0,952,953,6,24,-1,0,953,1145,1,0, + 0,0,954,955,5,148,0,0,955,956,3,40,20,0,956,957,5,31,0,0,957,958,6,24, + -1,0,958,1145,1,0,0,0,959,960,5,149,0,0,960,961,3,40,20,0,961,962,5,31, + 0,0,962,963,6,24,-1,0,963,1145,1,0,0,0,964,965,5,150,0,0,965,966,3,40, + 20,0,966,967,5,31,0,0,967,968,6,24,-1,0,968,1145,1,0,0,0,969,970,5,151, + 0,0,970,971,3,40,20,0,971,972,5,31,0,0,972,973,6,24,-1,0,973,1145,1,0, + 0,0,974,975,5,152,0,0,975,976,3,40,20,0,976,977,5,31,0,0,977,978,6,24, + -1,0,978,1145,1,0,0,0,979,980,5,153,0,0,980,981,3,40,20,0,981,982,5,31, + 0,0,982,983,6,24,-1,0,983,1145,1,0,0,0,984,985,5,154,0,0,985,986,3,40, + 20,0,986,987,5,31,0,0,987,988,6,24,-1,0,988,1145,1,0,0,0,989,990,5,155, + 0,0,990,991,3,40,20,0,991,992,5,31,0,0,992,993,6,24,-1,0,993,1145,1,0, + 0,0,994,995,5,156,0,0,995,996,3,40,20,0,996,997,5,31,0,0,997,998,6,24, + -1,0,998,1145,1,0,0,0,999,1000,5,157,0,0,1000,1001,3,40,20,0,1001,1002, + 5,31,0,0,1002,1003,6,24,-1,0,1003,1145,1,0,0,0,1004,1005,5,158,0,0,1005, + 1006,3,40,20,0,1006,1007,5,31,0,0,1007,1008,6,24,-1,0,1008,1145,1,0,0, + 0,1009,1010,5,159,0,0,1010,1011,3,40,20,0,1011,1012,5,31,0,0,1012,1013, + 6,24,-1,0,1013,1145,1,0,0,0,1014,1015,5,160,0,0,1015,1016,3,40,20,0,1016, + 1017,5,31,0,0,1017,1018,6,24,-1,0,1018,1145,1,0,0,0,1019,1020,5,161,0, + 0,1020,1021,3,40,20,0,1021,1022,5,31,0,0,1022,1023,6,24,-1,0,1023,1145, + 1,0,0,0,1024,1025,5,162,0,0,1025,1026,3,40,20,0,1026,1027,5,31,0,0,1027, + 1028,6,24,-1,0,1028,1145,1,0,0,0,1029,1030,5,163,0,0,1030,1031,3,40,20, + 0,1031,1032,5,31,0,0,1032,1033,6,24,-1,0,1033,1145,1,0,0,0,1034,1035,5, + 164,0,0,1035,1036,3,40,20,0,1036,1037,5,31,0,0,1037,1038,6,24,-1,0,1038, + 1145,1,0,0,0,1039,1040,5,165,0,0,1040,1041,3,40,20,0,1041,1042,5,31,0, + 0,1042,1043,6,24,-1,0,1043,1145,1,0,0,0,1044,1045,5,166,0,0,1045,1046, + 3,40,20,0,1046,1047,5,31,0,0,1047,1048,6,24,-1,0,1048,1145,1,0,0,0,1049, + 1050,5,167,0,0,1050,1051,3,40,20,0,1051,1052,5,31,0,0,1052,1053,6,24,-1, + 0,1053,1145,1,0,0,0,1054,1055,5,168,0,0,1055,1056,3,40,20,0,1056,1057, + 5,31,0,0,1057,1058,6,24,-1,0,1058,1145,1,0,0,0,1059,1060,5,169,0,0,1060, + 1061,3,40,20,0,1061,1062,5,31,0,0,1062,1063,6,24,-1,0,1063,1145,1,0,0, + 0,1064,1065,5,170,0,0,1065,1066,3,40,20,0,1066,1067,5,31,0,0,1067,1068, + 6,24,-1,0,1068,1145,1,0,0,0,1069,1070,5,171,0,0,1070,1071,3,40,20,0,1071, + 1072,5,31,0,0,1072,1073,6,24,-1,0,1073,1145,1,0,0,0,1074,1075,5,172,0, + 0,1075,1076,3,40,20,0,1076,1077,5,31,0,0,1077,1078,6,24,-1,0,1078,1145, + 1,0,0,0,1079,1080,5,173,0,0,1080,1081,3,40,20,0,1081,1082,5,31,0,0,1082, + 1083,6,24,-1,0,1083,1145,1,0,0,0,1084,1085,5,174,0,0,1085,1086,3,40,20, + 0,1086,1087,5,31,0,0,1087,1088,6,24,-1,0,1088,1145,1,0,0,0,1089,1090,5, + 175,0,0,1090,1091,3,40,20,0,1091,1092,5,31,0,0,1092,1093,6,24,-1,0,1093, + 1145,1,0,0,0,1094,1095,5,176,0,0,1095,1096,3,40,20,0,1096,1097,5,31,0, + 0,1097,1098,6,24,-1,0,1098,1145,1,0,0,0,1099,1100,5,177,0,0,1100,1101, + 3,40,20,0,1101,1102,5,31,0,0,1102,1103,6,24,-1,0,1103,1145,1,0,0,0,1104, + 1105,5,178,0,0,1105,1106,3,40,20,0,1106,1107,5,31,0,0,1107,1108,6,24,-1, + 0,1108,1145,1,0,0,0,1109,1110,5,179,0,0,1110,1111,3,40,20,0,1111,1112, + 5,31,0,0,1112,1113,6,24,-1,0,1113,1145,1,0,0,0,1114,1115,5,180,0,0,1115, + 1116,3,40,20,0,1116,1117,5,31,0,0,1117,1118,6,24,-1,0,1118,1145,1,0,0, + 0,1119,1120,5,181,0,0,1120,1121,3,40,20,0,1121,1122,5,31,0,0,1122,1123, + 6,24,-1,0,1123,1145,1,0,0,0,1124,1125,5,182,0,0,1125,1126,3,40,20,0,1126, + 1127,5,31,0,0,1127,1128,6,24,-1,0,1128,1145,1,0,0,0,1129,1130,5,183,0, + 0,1130,1131,3,40,20,0,1131,1132,5,31,0,0,1132,1133,6,24,-1,0,1133,1145, + 1,0,0,0,1134,1135,5,184,0,0,1135,1136,3,40,20,0,1136,1137,5,31,0,0,1137, + 1138,6,24,-1,0,1138,1145,1,0,0,0,1139,1140,5,185,0,0,1140,1141,3,40,20, + 0,1141,1142,5,31,0,0,1142,1143,6,24,-1,0,1143,1145,1,0,0,0,1144,446,1, + 0,0,0,1144,448,1,0,0,0,1144,450,1,0,0,0,1144,452,1,0,0,0,1144,454,1,0, + 0,0,1144,456,1,0,0,0,1144,458,1,0,0,0,1144,460,1,0,0,0,1144,465,1,0,0, + 0,1144,469,1,0,0,0,1144,474,1,0,0,0,1144,479,1,0,0,0,1144,484,1,0,0,0, + 1144,489,1,0,0,0,1144,494,1,0,0,0,1144,499,1,0,0,0,1144,504,1,0,0,0,1144, + 509,1,0,0,0,1144,514,1,0,0,0,1144,519,1,0,0,0,1144,524,1,0,0,0,1144,529, + 1,0,0,0,1144,534,1,0,0,0,1144,539,1,0,0,0,1144,544,1,0,0,0,1144,549,1, + 0,0,0,1144,554,1,0,0,0,1144,559,1,0,0,0,1144,564,1,0,0,0,1144,569,1,0, + 0,0,1144,574,1,0,0,0,1144,579,1,0,0,0,1144,584,1,0,0,0,1144,589,1,0,0, + 0,1144,594,1,0,0,0,1144,599,1,0,0,0,1144,604,1,0,0,0,1144,609,1,0,0,0, + 1144,614,1,0,0,0,1144,619,1,0,0,0,1144,624,1,0,0,0,1144,629,1,0,0,0,1144, + 634,1,0,0,0,1144,639,1,0,0,0,1144,644,1,0,0,0,1144,649,1,0,0,0,1144,654, + 1,0,0,0,1144,659,1,0,0,0,1144,664,1,0,0,0,1144,669,1,0,0,0,1144,674,1, + 0,0,0,1144,679,1,0,0,0,1144,684,1,0,0,0,1144,689,1,0,0,0,1144,694,1,0, + 0,0,1144,699,1,0,0,0,1144,704,1,0,0,0,1144,709,1,0,0,0,1144,714,1,0,0, + 0,1144,719,1,0,0,0,1144,724,1,0,0,0,1144,729,1,0,0,0,1144,734,1,0,0,0, + 1144,739,1,0,0,0,1144,744,1,0,0,0,1144,749,1,0,0,0,1144,754,1,0,0,0,1144, + 759,1,0,0,0,1144,764,1,0,0,0,1144,769,1,0,0,0,1144,774,1,0,0,0,1144,779, + 1,0,0,0,1144,784,1,0,0,0,1144,789,1,0,0,0,1144,794,1,0,0,0,1144,799,1, + 0,0,0,1144,804,1,0,0,0,1144,809,1,0,0,0,1144,814,1,0,0,0,1144,819,1,0, + 0,0,1144,824,1,0,0,0,1144,829,1,0,0,0,1144,834,1,0,0,0,1144,839,1,0,0, + 0,1144,844,1,0,0,0,1144,849,1,0,0,0,1144,854,1,0,0,0,1144,859,1,0,0,0, + 1144,864,1,0,0,0,1144,869,1,0,0,0,1144,874,1,0,0,0,1144,879,1,0,0,0,1144, + 884,1,0,0,0,1144,889,1,0,0,0,1144,894,1,0,0,0,1144,899,1,0,0,0,1144,904, + 1,0,0,0,1144,909,1,0,0,0,1144,914,1,0,0,0,1144,919,1,0,0,0,1144,924,1, + 0,0,0,1144,929,1,0,0,0,1144,934,1,0,0,0,1144,939,1,0,0,0,1144,944,1,0, + 0,0,1144,949,1,0,0,0,1144,954,1,0,0,0,1144,959,1,0,0,0,1144,964,1,0,0, + 0,1144,969,1,0,0,0,1144,974,1,0,0,0,1144,979,1,0,0,0,1144,984,1,0,0,0, + 1144,989,1,0,0,0,1144,994,1,0,0,0,1144,999,1,0,0,0,1144,1004,1,0,0,0,1144, + 1009,1,0,0,0,1144,1014,1,0,0,0,1144,1019,1,0,0,0,1144,1024,1,0,0,0,1144, + 1029,1,0,0,0,1144,1034,1,0,0,0,1144,1039,1,0,0,0,1144,1044,1,0,0,0,1144, + 1049,1,0,0,0,1144,1054,1,0,0,0,1144,1059,1,0,0,0,1144,1064,1,0,0,0,1144, + 1069,1,0,0,0,1144,1074,1,0,0,0,1144,1079,1,0,0,0,1144,1084,1,0,0,0,1144, + 1089,1,0,0,0,1144,1094,1,0,0,0,1144,1099,1,0,0,0,1144,1104,1,0,0,0,1144, + 1109,1,0,0,0,1144,1114,1,0,0,0,1144,1119,1,0,0,0,1144,1124,1,0,0,0,1144, + 1129,1,0,0,0,1144,1134,1,0,0,0,1144,1139,1,0,0,0,1145,49,1,0,0,0,1146, + 1147,3,32,16,0,1147,1148,5,0,0,1,1148,1149,6,25,-1,0,1149,51,1,0,0,0,44, + 59,67,75,77,84,94,104,109,119,129,131,144,150,152,167,169,190,192,225, + 227,246,253,262,281,297,299,312,314,327,329,346,348,357,365,370,384,394, + 407,410,417,425,429,432,1144 }; public static readonly ATN _ATN = diff --git a/Sources/AngouriMath/Core/Domains.Classes.cs b/Sources/AngouriMath/Core/Domains.Classes.cs index 1da51eaa3..08a75c9c7 100644 --- a/Sources/AngouriMath/Core/Domains.Classes.cs +++ b/Sources/AngouriMath/Core/Domains.Classes.cs @@ -376,6 +376,14 @@ partial record Lif internal override Domain DefaultCodomain => Domain.Complex; } + partial record Polygammaf + { + /// + public override Domain Codomain { get; protected init; } = Domain.Complex; + /// + internal override Domain DefaultCodomain => Domain.Complex; + } + partial record Sif { /// diff --git a/Sources/AngouriMath/Core/Entity/Continuous/Entity.Continuous.Polygamma.Classes.cs b/Sources/AngouriMath/Core/Entity/Continuous/Entity.Continuous.Polygamma.Classes.cs new file mode 100644 index 000000000..597163a16 --- /dev/null +++ b/Sources/AngouriMath/Core/Entity/Continuous/Entity.Continuous.Polygamma.Classes.cs @@ -0,0 +1,37 @@ +// +// 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; + +namespace AngouriMath +{ + partial record Entity + { + /// + /// The polygamma function psi^(n)(z), the (n + 1)-th derivative of ln Gamma(z), for a whole + /// n >= 0; psi^(0) is the digamma function, Gamma'(z)/Gamma(z). Its poles are + /// 0, -1, -2, .... + /// + /// https://github.com/asc-community/AngouriMath/issues/171 + public sealed partial record Polygammaf(Entity Order, Entity Argument) : Function, IBinaryNode + { + private Polygammaf New(Entity order, Entity argument) => + ReferenceEquals(Order, order) && ReferenceEquals(Argument, argument) ? this : new(order, argument) { Codomain = Codomain }; + + /// + public Entity NodeFirstChild => Order; + + /// + public Entity NodeSecondChild => Argument; + + /// + public override Entity Replace(Func func) => func(New(Order.Replace(func), Argument.Replace(func))); + /// + protected override Entity[] InitDirectChildren() => new[] { Order, Argument }; + } + } +} diff --git a/Sources/AngouriMath/Core/Entity/Continuous/Number/Polygamma.cs b/Sources/AngouriMath/Core/Entity/Continuous/Number/Polygamma.cs new file mode 100644 index 000000000..c505ed5c3 --- /dev/null +++ b/Sources/AngouriMath/Core/Entity/Continuous/Number/Polygamma.cs @@ -0,0 +1,260 @@ +// +// 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 System.Collections.Generic; +using PeterO.Numbers; + +namespace AngouriMath +{ + partial record Entity + { + partial record Number + { + /// + /// The polygamma function psi^(n)(z), the (n + 1)-th derivative of ln Gamma(z), at the + /// working precision, for a whole n >= 0 and every complex z but its poles 0, -1, -2, ..., + /// where it is NaN. psi^(0) is the digamma function, Gamma'(z)/Gamma(z). + /// + /// + /// + /// Left of Re z = 1/2 it is reflected (DLMF 5.15.6), + /// psi^(n)(z) = (-1)^n psi^(n)(1 - z) - pi^(n + 1) Q_n(cot(pi z)), where Q_n is the polynomial + /// with d^n/dz^n cot(pi z) = pi^n Q_n(cot(pi z)): Q_0(c) = c and + /// Q_(k + 1)(c) = -(1 + c^2) Q_k'(c). + /// + /// + /// Right of it, the recurrence psi^(n)(z + 1) = psi^(n)(z) + (-1)^n n!/z^(n + 1) (DLMF 5.15.5) moves + /// the argument to Re w >= R, with R the working digits and n, where the asymptotic + /// series (DLMF 5.11.2 and 5.15.8) is summed until a term is below the working precision: + /// ln w - 1/(2 w) - sum B_(2k)/(2k w^(2k)) for the digamma function, and + /// (-1)^(n + 1) ((n - 1)!/w^n + n!/(2 w^(n + 1)) + sum B_(2k) (2k + n - 1)!/((2k)! w^(2k + n))) for + /// n >= 1. Its smallest term is about e^(-2 pi R) of the sum, so it converges well before + /// it diverges. + /// + /// + /// The Bernoulli numbers are exact, from the tangent numbers by Brent and Harvey's recurrence, + /// B_(2k) = (-1)^(k - 1) 2k T_k/(4^k (4^k - 1)), and cached. + /// + /// https://github.com/asc-community/AngouriMath/issues/171 + /// + public static Complex Polygamma(EInteger order, Complex z) + { + var context = MathS.Settings.DecimalPrecisionContext.Value; + var (re, im) = (z.RealPart.EDecimal, z.ImaginaryPart.EDecimal); + if (re.IsNaN() || im.IsNaN() || order.Sign < 0 || !order.CanFitInInt32()) + return Real.NaN; + var n = order.ToInt32Checked(); + if (re.IsInfinity() || im.IsInfinity()) + // Toward +oo on the real line the digamma function grows as ln x and the others vanish. + return im.IsZero && re.IsPositiveInfinity() ? (n == 0 ? Real.PositiveInfinity : Integer.Zero) : Real.NaN; + if (im.IsZero && re.Sign <= 0 && re.IsInteger()) + return Real.NaN; + var work = Working(context, 10 + n.ToString().Length + context.Precision.ToString().Length); + var (valueRe, valueIm) = Polygamma(n, re, im, work); + return Complex.Create(valueRe.RoundToPrecision(context), valueIm.RoundToPrecision(context)); + } + + private static (EDecimal Re, EDecimal Im) Polygamma(int n, EDecimal re, EDecimal im, EContext work) + { + if (re.CompareTo(EDecimal.FromString("0.5")) < 0) + { + // psi^(n)(z) = (-1)^n psi^(n)(1 - z) - pi^(n + 1) Q_n(cot(pi z)) + var reflected = Polygamma(n, EDecimal.One.Subtract(re, work), im.Negate(), work); + if (n % 2 == 1) + reflected = (reflected.Re.Negate(), reflected.Im.Negate()); + var pi = EDecimal.PI(work); + var cot = Cot(pi.Multiply(re, work), pi.Multiply(im, work), work); + var q = Evaluate(CotangentDerivative(n), cot, work); + var piPower = pi.Pow(n + 1, work); + return (reflected.Re.Subtract(piPower.Multiply(q.Re, work), work), reflected.Im.Subtract(piPower.Multiply(q.Im, work), work)); + } + var radius = work.Precision.ToInt32Checked() + n; + var shift = Math.Max(0, (int)Math.Ceiling(radius - re.ToDouble())); + // sum_(k < shift) 1/(z + k)^(n + 1) + var sum = (Re: EDecimal.Zero, Im: EDecimal.Zero); + for (var k = 0; k < shift; k++) + { + var term = Reciprocal(Power((re.Add(EDecimal.FromInt32(k), work), im), n + 1, work), work); + sum = (sum.Re.Add(term.Re, work), sum.Im.Add(term.Im, work)); + } + var w = (Re: re.Add(EDecimal.FromInt32(shift), work), Im: im); + var tail = AsymptoticPolygamma(n, w, work); + // psi^(n)(z) = psi^(n)(z + shift) - (-1)^n n! sum + var factorial = EDecimal.FromEInteger(Factorial(n)); + var scaled = (Re: sum.Re.Multiply(factorial, work), Im: sum.Im.Multiply(factorial, work)); + return n % 2 == 0 + ? (tail.Re.Subtract(scaled.Re, work), tail.Im.Subtract(scaled.Im, work)) + : (tail.Re.Add(scaled.Re, work), tail.Im.Add(scaled.Im, work)); + } + + /// The asymptotic series of psi^(n)(w), for Re w at least the working digits. + private static (EDecimal Re, EDecimal Im) AsymptoticPolygamma(int n, (EDecimal Re, EDecimal Im) w, EContext work) + { + var epsilon = EDecimal.Create(EInteger.One, EInteger.FromInt32(-work.Precision.ToInt32Checked())); + var inverse = Reciprocal(w, work); + var inverseSquared = Multiply(inverse, inverse, work); + (EDecimal Re, EDecimal Im) sum; + // The power of 1/w the first Bernoulli term carries: w^-(2 + n). + (EDecimal Re, EDecimal Im) power; + if (n == 0) + { + // ln w - 1/(2 w) + var modulus = w.Re.Multiply(w.Re, work).Add(w.Im.Multiply(w.Im, work), work).Sqrt(work); + sum = (modulus.Log(work).Subtract(inverse.Re.Divide(2, work), work), w.Im.Arctan2(w.Re, work).Subtract(inverse.Im.Divide(2, work), work)); + power = inverseSquared; + } + else + { + // (n - 1)!/w^n + n!/(2 w^(n + 1)) + var toTheN = Power(inverse, n, work); + var toTheNPlusOne = Multiply(toTheN, inverse, work); + var (previous, current) = (EDecimal.FromEInteger(Factorial(n - 1)), EDecimal.FromEInteger(Factorial(n)).Divide(2, work)); + sum = (toTheN.Re.Multiply(previous, work).Add(toTheNPlusOne.Re.Multiply(current, work), work), + toTheN.Im.Multiply(previous, work).Add(toTheNPlusOne.Im.Multiply(current, work), work)); + power = Multiply(toTheN, inverseSquared, work); + } + for (var k = 1; k <= 4 * work.Precision.ToInt32Checked() + 4 * n + 16; k++) + { + // B_(2k)/(2k) for the digamma function, B_(2k) (2k + n - 1)!/(2k)! otherwise. + var bernoulli = Bernoulli(k); + var coefficient = n == 0 + ? EDecimal.FromEInteger(bernoulli.Numerator).Divide(EDecimal.FromEInteger(bernoulli.Denominator.Multiply(2 * k)), work) + : EDecimal.FromEInteger(bernoulli.Numerator.Multiply(RisingProduct(2 * k + 1, n - 1))).Divide(EDecimal.FromEInteger(bernoulli.Denominator), work); + var term = (Re: power.Re.Multiply(coefficient, work), Im: power.Im.Multiply(coefficient, work)); + sum = n == 0 ? (sum.Re.Subtract(term.Re, work), sum.Im.Subtract(term.Im, work)) : (sum.Re.Add(term.Re, work), sum.Im.Add(term.Im, work)); + if (Magnitude(term).CompareTo(Magnitude(sum).Multiply(epsilon, work)) < 0) + break; + power = Multiply(power, inverseSquared, work); + } + // (-1)^(n + 1) in front of the series for n >= 1 + return n == 0 || n % 2 == 1 ? sum : (sum.Re.Negate(), sum.Im.Negate()); + } + + /// (from)(from + 1)...(from + count - 1), and one for a count of zero. + private static EInteger RisingProduct(int from, int count) + { + var product = EInteger.One; + for (var i = 0; i < count; i++) + product = product.Multiply(from + i); + return product; + } + + private static EInteger Factorial(int n) + { + var product = EInteger.One; + for (var i = 2; i <= n; i++) + product = product.Multiply(i); + return product; + } + + /// B_(2k), exactly, from the tangent numbers. + private static ERational Bernoulli(int k) + { + var tangent = Tangent(k); + var fourToTheK = EInteger.One.ShiftLeft(2 * k); + var value = ERational.Create(tangent.Multiply(2 * k), fourToTheK.Multiply(fourToTheK.Subtract(EInteger.One))); + return k % 2 == 1 ? value : value.Negate(); + } + + /// + /// The tangent number T_k, the (2k - 1)-th derivative of tan at 0: 1, 2, 16, 272, ... + /// Brent and Harvey's in-place recurrence for T_1 ... T_m, recomputed at twice the length whenever a + /// larger one is asked for. + /// + private static EInteger Tangent(int k) + { + lock (tangentNumbers) + { + if (k > tangentNumbers.Count) + { + var m = Math.Max(k, 2 * tangentNumbers.Count); + var t = new EInteger[m + 1]; + t[1] = EInteger.One; + for (var i = 2; i <= m; i++) + t[i] = t[i - 1].Multiply(i - 1); + for (var i = 2; i <= m; i++) + for (var j = i; j <= m; j++) + t[j] = t[j - 1].Multiply(j - i).Add(t[j].Multiply(j - i + 2)); + tangentNumbers.Clear(); + for (var i = 1; i <= m; i++) + tangentNumbers.Add(t[i]); + } + return tangentNumbers[k - 1]; + } + } + [ConcurrentField] private static readonly List tangentNumbers = new(); + + /// The coefficients, lowest first, of Q_n, with d^n/dz^n cot(pi z) = pi^n Q_n(cot(pi z)). + private static EInteger[] CotangentDerivative(int n) + { + var q = new[] { EInteger.Zero, EInteger.One }; + for (var step = 0; step < n; step++) + { + // -(1 + c^2) q'(c) + var derivative = new EInteger[q.Length - 1]; + for (var i = 1; i < q.Length; i++) + derivative[i - 1] = q[i].Multiply(i); + var next = new EInteger[derivative.Length + 2]; + for (var i = 0; i < next.Length; i++) + next[i] = EInteger.Zero; + for (var i = 0; i < derivative.Length; i++) + { + next[i] = next[i].Subtract(derivative[i]); + next[i + 2] = next[i + 2].Subtract(derivative[i]); + } + q = next; + } + return q; + } + + private static (EDecimal Re, EDecimal Im) Evaluate(EInteger[] coefficients, (EDecimal Re, EDecimal Im) x, EContext work) + { + var value = (Re: EDecimal.Zero, Im: EDecimal.Zero); + for (var i = coefficients.Length - 1; i >= 0; i--) + { + value = Multiply(value, x, work); + value = (value.Re.Add(EDecimal.FromEInteger(coefficients[i]), work), value.Im); + } + return value; + } + + /// cot(x + i y) = (sin 2x - i sinh 2y)/(cosh 2y - cos 2x). + private static (EDecimal Re, EDecimal Im) Cot(EDecimal x, EDecimal y, EContext work) + { + var (twoX, twoY) = (x.Multiply(2, work), y.Multiply(2, work)); + if (twoY.IsZero) + return (twoX.Sin(work).Divide(EDecimal.One.Subtract(twoX.Cos(work), work), work), EDecimal.Zero); + var exponential = twoY.Exponential(work); + var inverseExponential = EDecimal.One.Divide(exponential, work); + var sinh = exponential.Subtract(inverseExponential, work).Divide(2, work); + var cosh = exponential.Add(inverseExponential, work).Divide(2, work); + var denominator = cosh.Subtract(twoX.Cos(work), work); + return (twoX.Sin(work).Divide(denominator, work), sinh.Negate().Divide(denominator, work)); + } + + private static (EDecimal Re, EDecimal Im) Reciprocal((EDecimal Re, EDecimal Im) a, EContext work) + { + var squared = a.Re.Multiply(a.Re, work).Add(a.Im.Multiply(a.Im, work), work); + return (a.Re.Divide(squared, work), a.Im.Negate().Divide(squared, work)); + } + + private static (EDecimal Re, EDecimal Im) Power((EDecimal Re, EDecimal Im) a, int exponent, EContext work) + { + var result = (Re: EDecimal.One, Im: EDecimal.Zero); + for (var square = a; exponent > 0; exponent >>= 1) + { + if ((exponent & 1) == 1) + result = Multiply(result, square, work); + if (exponent > 1) + square = Multiply(square, square, work); + } + return result; + } + } + } +} diff --git a/Sources/AngouriMath/Core/Serialization/Entity.Serialization.cs b/Sources/AngouriMath/Core/Serialization/Entity.Serialization.cs index c0f7a6f05..e9ff31a3a 100644 --- a/Sources/AngouriMath/Core/Serialization/Entity.Serialization.cs +++ b/Sources/AngouriMath/Core/Serialization/Entity.Serialization.cs @@ -126,6 +126,7 @@ [EntityJsonConverter] partial record SpecialSet [EntityJsonConverter] partial record Erfif; [EntityJsonConverter] partial record Eif; [EntityJsonConverter] partial record Lif; + [EntityJsonConverter] partial record Polygammaf; [EntityJsonConverter] partial record Sif; [EntityJsonConverter] partial record Cif; [EntityJsonConverter] partial record Shif; diff --git a/Sources/AngouriMath/Core/Transformations/Matching/MatchPattern.cs b/Sources/AngouriMath/Core/Transformations/Matching/MatchPattern.cs index 69ad80e14..d0fc54f57 100644 --- a/Sources/AngouriMath/Core/Transformations/Matching/MatchPattern.cs +++ b/Sources/AngouriMath/Core/Transformations/Matching/MatchPattern.cs @@ -478,6 +478,7 @@ internal abstract bool ETryBuild( [typeof(Entity.Erfif)] = (1, static c => new Entity.Erfif(c[0])), [typeof(Entity.Eif)] = (1, static c => new Entity.Eif(c[0])), [typeof(Entity.Lif)] = (1, static c => new Entity.Lif(c[0])), + [typeof(Entity.Polygammaf)] = (2, static c => new Entity.Polygammaf(c[0], c[1])), [typeof(Entity.Sif)] = (1, static c => new Entity.Sif(c[0])), [typeof(Entity.Cif)] = (1, static c => new Entity.Cif(c[0])), [typeof(Entity.Shif)] = (1, static c => new Entity.Shif(c[0])), diff --git a/Sources/AngouriMath/Docs/Contributing/WritingARule.md b/Sources/AngouriMath/Docs/Contributing/WritingARule.md index 8589f2dff..57f1ae9e6 100644 --- a/Sources/AngouriMath/Docs/Contributing/WritingARule.md +++ b/Sources/AngouriMath/Docs/Contributing/WritingARule.md @@ -110,7 +110,7 @@ itself, and needs no `when:` to say so. It is also strictly more specific than ` the ordering knows about — see below. **Matchable is not the same as buildable.** A pattern can be *matched* against any node type, but a -pattern used as a **replacement** must be one the library can construct: there are **61** such types. +pattern used as a **replacement** must be one the library can construct: there are **62** such types. Two families are deliberately absent, and neither is an oversight: - **binders** — `Lambda`, `Set.ConditionalSet`. They bind a variable, and `DirectChildren` renames it diff --git a/Sources/AngouriMath/Docs/Usage/Syntax.md b/Sources/AngouriMath/Docs/Usage/Syntax.md index ab54245aa..7ae45cc54 100644 --- a/Sources/AngouriMath/Docs/Usage/Syntax.md +++ b/Sources/AngouriMath/Docs/Usage/Syntax.md @@ -326,6 +326,15 @@ differentiated from its definition: the derivative of `Si(x)` is `sin(x) / x`, o `cos(x) / x`, and of `Shi(x)` and `Chi(x)` it is `sinh(x) / x` and `cosh(x) / x`. `Ci` and `Chi` are undefined at `0`; `Si(+oo)` is `pi / 2` and `Ci(+oo)` is `0`. +**Polygamma functions** — `polygamma(n, z)` `digamma(z)`. The polygamma function `psi^(n)(z)`, the +`(n + 1)`-th derivative of `ln Gamma(z)` for a whole `n >= 0`, and the digamma function +`psi(z) = Gamma'(z)/Gamma(z)`, which is `polygamma(0, z)` and prints as `digamma(z)`. Each is evaluated +to the working precision anywhere in the complex plane but at `0, -1, -2, ...`, its poles, and each +order is the derivative of the one before: the derivative of `polygamma(n, x)` is +`polygamma(n + 1, x)`. The derivative of `x!` is `x! * digamma(x + 1)`, and of `gamma(x)` it is +`(x - 1)! * digamma(x)`. Special values, such as `digamma(1) = -gamma`, stay as written, since the +library has no symbol for Euler's constant. + **Calculus** — `derivative(expr, var, order)`, `integral(expr, var)`, `integral(expr, var, from, to)`, `limit(expr, var, dest)`, `limitleft(...)`, `limitright(...)`; `sum(expr, var in set)` for a sum over a set; `max(expr, var in set)` and `min` for the extremum of diff --git a/Sources/AngouriMath/Functions/Continuous/Differentiation.cs b/Sources/AngouriMath/Functions/Continuous/Differentiation.cs index 17a91ed27..8ca962ba9 100644 --- a/Sources/AngouriMath/Functions/Continuous/Differentiation.cs +++ b/Sources/AngouriMath/Functions/Continuous/Differentiation.cs @@ -327,6 +327,17 @@ protected override Entity InnerDifferentiate(Variable variable) => Argument.DerivativeOver(variable) / MathS.Ln(Argument); } + partial record Polygammaf + { + // psi^(n)(a)' = psi^(n + 1)(a) a'. The order is whole, so an order that varies has no derivative + // in it, and this declines. https://github.com/asc-community/AngouriMath/issues/171 + /// + protected override Entity InnerDifferentiate(Variable variable) => + Order.ContainsNode(variable) + ? base.InnerDifferentiate(variable) + : MathS.Polygamma(Order + 1, Argument) * Argument.DerivativeOver(variable); + } + partial record Sif { // Si(a)' = sin(a)/a a', the integrand of its definition, and so for the other three. @@ -458,34 +469,18 @@ protected override Entity InnerDifferentiate(Variable variable) => partial record Factorialf { /// - /// (x!)' = Γ(x + 1) ψ(x + 1), which needs a symbolic gamma and polygamma the - /// library does not have — so this declines rather than answering. + /// (a!)' = a! psi(a + 1) a': x! is Gamma(x + 1), and the digamma function is + /// Gamma'/Gamma. /// /// - /// - /// It used to answer , which says the derivative does - /// not exist. It does: x! is Γ(x + 1) and the library already - /// evaluates it away from the integers — (1/2)! is 0.886… — so it is - /// smooth except at the poles, and d/dx x! at 3 is an ordinary - /// Γ'(4) ≈ 3.966. Saying NaN was a wrong answer rather than a missing - /// feature, and it propagated: one factorial anywhere turned an otherwise fine - /// derivative into NaN. - /// https://github.com/asc-community/AngouriMath/issues/958 - /// - /// - /// Returning the unevaluated derivative is what every other node the library cannot - /// differentiate already does — apply(f, x) among them — and it is what - /// AGENTS.md asks for: unevaluated means "I could not settle this", NaN - /// means "this does not exist", and only the first is true here. - /// - /// - /// Computing it properly is - /// #171, which is - /// a separate and larger piece of work; this rule stays correct once that lands. - /// + /// It declined while the library had no digamma function, and before that answered + /// , which says the derivative does not exist where it does + /// (https://github.com/asc-community/AngouriMath/issues/958): d/dx x! at 3 is + /// Gamma'(4) = 6 psi(4), about 7.5367. + /// https://github.com/asc-community/AngouriMath/issues/171 /// protected override Entity InnerDifferentiate(Variable variable) - => base.InnerDifferentiate(variable); + => this * MathS.Digamma(Argument + 1) * Argument.DerivativeOver(variable); } #pragma warning disable IDE0054 // Use compound assignment diff --git a/Sources/AngouriMath/Functions/Continuous/Solvers/EquationSolver/InvertNode.Classes.cs b/Sources/AngouriMath/Functions/Continuous/Solvers/EquationSolver/InvertNode.Classes.cs index a81fe9cba..a43bbdbda 100644 --- a/Sources/AngouriMath/Functions/Continuous/Solvers/EquationSolver/InvertNode.Classes.cs +++ b/Sources/AngouriMath/Functions/Continuous/Solvers/EquationSolver/InvertNode.Classes.cs @@ -277,6 +277,14 @@ partial record Lif null; } + // The polygamma functions have no inverse among the library's nodes. + // https://github.com/asc-community/AngouriMath/issues/171 + partial record Polygammaf + { + private protected override IEnumerable? InvertNode(Entity value, Entity x) => + null; + } + // None of the four has an inverse among the library's nodes, and none of their preimages // is empty: Si(x) = 1 near 1.1654, Ci(x) = 0 near 0.6165. // https://github.com/asc-community/AngouriMath/issues/1501 diff --git a/Sources/AngouriMath/Functions/Evaluation/Evaluation.Continuous/Evaluation.Continuous.Arithmetics.Classes.cs b/Sources/AngouriMath/Functions/Evaluation/Evaluation.Continuous/Evaluation.Continuous.Arithmetics.Classes.cs index b12f540d0..797005a64 100644 --- a/Sources/AngouriMath/Functions/Evaluation/Evaluation.Continuous/Evaluation.Continuous.Arithmetics.Classes.cs +++ b/Sources/AngouriMath/Functions/Evaluation/Evaluation.Continuous/Evaluation.Continuous.Arithmetics.Classes.cs @@ -590,6 +590,25 @@ Real r when r.EDecimal.IsPositiveInfinity() => Real.PositiveInfinity, (@this, a) => ((Lif)@this).New(a), isExact); } + public partial record Polygammaf + { + // A whole order n >= 0, and an argument other than the poles 0, -1, -2, ... + // https://github.com/asc-community/AngouriMath/issues/171 + private protected override Entity IntrinsicCondition => + Order.In(MathS.Sets.Z) & Order >= 0 & (!Argument.In(MathS.Sets.Z) | Argument > 0); + + /// + protected override Entity InnerSimplify(bool isExact) + => ExpandOnTwoArguments(Order, Argument, + (order, argument) => (order, argument) switch + { + (Integer { EInteger: var n }, Complex z) when !isExact && n.Sign >= 0 => Number.Polygamma(n, z), + (Integer { EInteger: var n }, Real r) when n.Sign >= 0 && r.EDecimal.IsPositiveInfinity() => n.IsZero ? Real.PositiveInfinity : Integer.Zero, + _ => null + }, + (@this, order, argument) => ((Polygammaf)@this).New(order, argument), isExact); + } + public partial record Sif { // Entire, so defined for every argument. https://github.com/asc-community/AngouriMath/issues/1501 diff --git a/Sources/AngouriMath/Functions/Output/Latex/Latex.Arithmetics.Classes.cs b/Sources/AngouriMath/Functions/Output/Latex/Latex.Arithmetics.Classes.cs index c33346f69..4167661f1 100644 --- a/Sources/AngouriMath/Functions/Output/Latex/Latex.Arithmetics.Classes.cs +++ b/Sources/AngouriMath/Functions/Output/Latex/Latex.Arithmetics.Classes.cs @@ -211,6 +211,15 @@ private protected override string LatexizeNode() => $@"\operatorname{{li}}\left({Argument.Latexize()}\right)"; } + partial record Polygammaf + { + /// + private protected override string LatexizeNode() + => Order is Number.Integer { IsZero: true } + ? $@"\psi\left({Argument.Latexize()}\right)" + : $@"\psi^{{({Order.Latexize()})}}\left({Argument.Latexize()}\right)"; + } + partial record Sif { /// diff --git a/Sources/AngouriMath/Functions/Output/ToString/ToString.Arithmetics.Classes.cs b/Sources/AngouriMath/Functions/Output/ToString/ToString.Arithmetics.Classes.cs index 58b18a185..52aaadefa 100644 --- a/Sources/AngouriMath/Functions/Output/ToString/ToString.Arithmetics.Classes.cs +++ b/Sources/AngouriMath/Functions/Output/ToString/ToString.Arithmetics.Classes.cs @@ -188,6 +188,17 @@ public partial record Lif public override string ToString() => Stringize(); } + public partial record Polygammaf + { + /// + private protected override string StringizeNode() + => Order is Number.Integer { IsZero: true } + ? $"digamma({Argument.Stringize()})" + : $"polygamma({Order.Stringize()}, {Argument.Stringize()})"; + /// + public override string ToString() => Stringize(); + } + public partial record Sif { /// diff --git a/Sources/AngouriMath/Functions/Output/ToSympy/ToSympy.Arithmetics.Classes.cs b/Sources/AngouriMath/Functions/Output/ToSympy/ToSympy.Arithmetics.Classes.cs index 50dfc4060..6db3325af 100644 --- a/Sources/AngouriMath/Functions/Output/ToSympy/ToSympy.Arithmetics.Classes.cs +++ b/Sources/AngouriMath/Functions/Output/ToSympy/ToSympy.Arithmetics.Classes.cs @@ -125,6 +125,14 @@ internal override string ToSymPy() => $@"sympy.li({Argument.ToSymPy()})"; } + public partial record Polygammaf + { + internal override string ToSymPy() + => Order is Number.Integer { IsZero: true } + ? $@"sympy.digamma({Argument.ToSymPy()})" + : $@"sympy.polygamma({Order.ToSymPy()}, {Argument.ToSymPy()})"; + } + public partial record Sif { internal override string ToSymPy() diff --git a/Sources/AngouriMath/Functions/Substitute.cs b/Sources/AngouriMath/Functions/Substitute.cs index 0cbb04a1f..1c4bd25e7 100644 --- a/Sources/AngouriMath/Functions/Substitute.cs +++ b/Sources/AngouriMath/Functions/Substitute.cs @@ -230,6 +230,13 @@ public override Entity Substitute(Entity x, Entity value) => this == x ? value : New(Argument.Substitute(x, value)); } + partial record Polygammaf + { + /// + public override Entity Substitute(Entity x, Entity value) + => this == x ? value : New(Order.Substitute(x, value), Argument.Substitute(x, value)); + } + partial record Sif { /// diff --git a/Sources/AngouriMath/Functions/TreeAnalyzer/RealValued.cs b/Sources/AngouriMath/Functions/TreeAnalyzer/RealValued.cs index f6ce4aef4..034bb65e8 100644 --- a/Sources/AngouriMath/Functions/TreeAnalyzer/RealValued.cs +++ b/Sources/AngouriMath/Functions/TreeAnalyzer/RealValued.cs @@ -66,6 +66,9 @@ internal static bool IsRealValued(Entity expr, Variable x) case Sinf or Cosf or Tanf or Cotanf or Secantf or Cosecantf or Arctanf or Arccotanf or Signumf or Erff or Erfcf or Erfif or Eif or Sif or Shif: return IsRealValued(expr.DirectChildren[0], x); + // A polygamma function of a whole order is real on the real line between its poles. + case Polygammaf(var order, var argument) when !order.ContainsNode(x): + return IsRealValued(argument, x); // A modulus is real whatever it is taken of, and an Iverson bracket is 0 or 1. case Absf or Iversonf: return true; @@ -149,6 +152,8 @@ private static bool GatherTheBasesOfRoots(Entity expr, Variable x, List case Sinf or Cosf or Tanf or Cotanf or Secantf or Cosecantf or Arctanf or Arccotanf or Signumf or Erff or Erfcf or Erfif or Eif or Sif or Shif: return GatherTheBasesOfRoots(expr.DirectChildren[0], x, bases); + case Polygammaf(var order, var argument) when !order.ContainsNode(x): + return GatherTheBasesOfRoots(argument, x, bases); case Absf or Iversonf: return true; default: diff --git a/Sources/AngouriMath/Functions/TreeAnalyzer/Sort.Classes.cs b/Sources/AngouriMath/Functions/TreeAnalyzer/Sort.Classes.cs index bd4346add..b72c951df 100644 --- a/Sources/AngouriMath/Functions/TreeAnalyzer/Sort.Classes.cs +++ b/Sources/AngouriMath/Functions/TreeAnalyzer/Sort.Classes.cs @@ -279,6 +279,12 @@ private protected override string SortHashName(SortLevel level) => Choice(level, "ei_", "li_", "li_"); } + public partial record Polygammaf + { + private protected override string SortHashName(SortLevel level) + => Choice(level, "polygamma_", "polygamma_", "polygamma_"); + } + public partial record Sif { private protected override string SortHashName(SortLevel level) diff --git a/Sources/Tests/UnitTests/Calculus/DerivativeTest.cs b/Sources/Tests/UnitTests/Calculus/DerivativeTest.cs index 7af19ba22..a40c39def 100644 --- a/Sources/Tests/UnitTests/Calculus/DerivativeTest.cs +++ b/Sources/Tests/UnitTests/Calculus/DerivativeTest.cs @@ -202,22 +202,22 @@ [Fact] public void TestNamedAppliedFunctions3() /// /// https://github.com/asc-community/AngouriMath/issues/958 -- differentiating a factorial /// answered NaN, which claims the derivative does not exist. It does: x! is - /// smooth away from the poles and the library evaluates (1/2)! happily. The honest - /// answer is the unevaluated derivative, which is what every other node it cannot - /// differentiate already returns. + /// smooth away from the poles, and it declined until the library had the digamma function + /// to write it with: (x!)' = x! psi(x + 1). + /// #171 /// - [Fact] public void AFactorialDeclinesRatherThanClaimingNoDerivativeExists() + [Fact] public void AFactorialDifferentiatesThroughTheDigammaFunction() { var derivative = MathS.Derivative(MathS.Factorial(x), x).InnerSimplified; Assert.NotEqual(MathS.NaN, derivative); - Assert.Contains(derivative.Nodes, node => node is Entity.Derivativef); + Assert.Equal((MathS.Factorial(x) * MathS.Digamma(x + 1)).InnerSimplified, derivative); } /// /// The reason it mattered: NaN propagates, so one factorial destroyed the whole - /// derivative. Declining leaves every other term intact. + /// derivative. /// - [Fact] public void APartOfADerivativeSurvivesAFactorialItCannotTake() + [Fact] public void APartOfADerivativeSurvivesBesideAFactorial() { var derivative = (MathS.Factorial(x) + x.Pow(2)).Differentiate(x).InnerSimplified; Assert.NotEqual(MathS.NaN, derivative); @@ -347,10 +347,13 @@ [Fact] public void ANegativePowerStillIntegrates() /// #1002 /// [Theory(Timeout = 30000)] - // a derivative that cannot be taken at all, so the node survives every pass - [InlineData("derivative(x!, x, 2)")] + // a derivative that cannot be taken at all, so the node survives every pass: a polygamma + // function's order is whole, so an order that varies has no derivative in it + [InlineData("derivative(polygamma(x, 2), x, 2)")] + [InlineData("derivative(polygamma(x, 2), x, 3)")] + [InlineData("derivative(sin(polygamma(x, 2)) + x, x, 2)")] + // and the factorial's, which it can take, to every power [InlineData("derivative(x!, x, 3)")] - [InlineData("derivative(sin(x!) + x, x, 2)")] public void ADerivativeThatCannotBeTakenTerminatesAtEveryPower(string exprRaw) { var expr = exprRaw.ToEntity(); @@ -363,8 +366,8 @@ public void ADerivativeThatCannotBeTakenTerminatesAtEveryPower(string exprRaw) /// #1002 /// [Fact] public void ADerivativeThatCannotBeTakenIsStillUnevaluated() - => Assert.True("derivative(x!, x, 2)".ToEntity().InnerSimplified is Derivativef, - $"expected it to stay a Derivativef, got {"derivative(x!, x, 2)".ToEntity().InnerSimplified}"); + => Assert.True("derivative(polygamma(x, 2), x, 2)".ToEntity().InnerSimplified is Derivativef, + $"expected it to stay a Derivativef, got {"derivative(polygamma(x, 2), x, 2)".ToEntity().InnerSimplified}"); /// /// A node that does not mention the variable is a constant in it, and its derivative is 0, diff --git a/Sources/Tests/UnitTests/Common/PublicApi.txt b/Sources/Tests/UnitTests/Common/PublicApi.txt index a9955985f..b609d322a 100644 --- a/Sources/Tests/UnitTests/Common/PublicApi.txt +++ b/Sources/Tests/UnitTests/Common/PublicApi.txt @@ -1879,6 +1879,7 @@ AngouriMath.Entity+Number.IsZero(PeterO.Numbers.EDecimal) : System.Boolean AngouriMath.Entity+Number.Li(AngouriMath.Entity+Number+Complex) : AngouriMath.Entity+Number+Complex AngouriMath.Entity+Number.Ln(AngouriMath.Entity+Number+Complex) : AngouriMath.Entity+Number+Complex AngouriMath.Entity+Number.Log(AngouriMath.Entity+Number+Complex, AngouriMath.Entity+Number+Complex) : AngouriMath.Entity+Number+Complex +AngouriMath.Entity+Number.Polygamma(PeterO.Numbers.EInteger, AngouriMath.Entity+Number+Complex) : AngouriMath.Entity+Number+Complex AngouriMath.Entity+Number.Pow(AngouriMath.Entity+Number+Complex, AngouriMath.Entity+Number+Complex) : AngouriMath.Entity+Number+Complex AngouriMath.Entity+Number.PrintMembers(System.Text.StringBuilder) : System.Boolean AngouriMath.Entity+Number.Replace(System.Func) : AngouriMath.Entity @@ -1985,6 +1986,28 @@ AngouriMath.Entity+Piecewise.ToString() : System.String AngouriMath.Entity+Piecewise.ctor(System.Collections.Generic.IEnumerable) AngouriMath.Entity+Piecewise.op_Equality(AngouriMath.Entity+Piecewise, AngouriMath.Entity+Piecewise) : System.Boolean AngouriMath.Entity+Piecewise.op_Inequality(AngouriMath.Entity+Piecewise, AngouriMath.Entity+Piecewise) : System.Boolean +AngouriMath.Entity+Polygammaf.$() : AngouriMath.Entity+Polygammaf +AngouriMath.Entity+Polygammaf.Argument { } : AngouriMath.Entity +AngouriMath.Entity+Polygammaf.Codomain { } : AngouriMath.Core.Domain +AngouriMath.Entity+Polygammaf.Deconstruct(AngouriMath.Entity&, AngouriMath.Entity&) : System.Void +AngouriMath.Entity+Polygammaf.EqualityContract { } : System.Type +AngouriMath.Entity+Polygammaf.Equals(AngouriMath.Entity+Function) : System.Boolean +AngouriMath.Entity+Polygammaf.Equals(AngouriMath.Entity+Polygammaf) : System.Boolean +AngouriMath.Entity+Polygammaf.Equals(System.Object) : System.Boolean +AngouriMath.Entity+Polygammaf.GetHashCode() : System.Int32 +AngouriMath.Entity+Polygammaf.InitDirectChildren() : AngouriMath.Entity[] +AngouriMath.Entity+Polygammaf.InnerDifferentiate(AngouriMath.Entity+Variable) : AngouriMath.Entity +AngouriMath.Entity+Polygammaf.InnerSimplify(System.Boolean) : AngouriMath.Entity +AngouriMath.Entity+Polygammaf.NodeFirstChild { } : AngouriMath.Entity +AngouriMath.Entity+Polygammaf.NodeSecondChild { } : AngouriMath.Entity +AngouriMath.Entity+Polygammaf.Order { } : AngouriMath.Entity +AngouriMath.Entity+Polygammaf.PrintMembers(System.Text.StringBuilder) : System.Boolean +AngouriMath.Entity+Polygammaf.Replace(System.Func) : AngouriMath.Entity +AngouriMath.Entity+Polygammaf.Substitute(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity +AngouriMath.Entity+Polygammaf.ToString() : System.String +AngouriMath.Entity+Polygammaf.ctor(AngouriMath.Entity, AngouriMath.Entity) +AngouriMath.Entity+Polygammaf.op_Equality(AngouriMath.Entity+Polygammaf, AngouriMath.Entity+Polygammaf) : System.Boolean +AngouriMath.Entity+Polygammaf.op_Inequality(AngouriMath.Entity+Polygammaf, AngouriMath.Entity+Polygammaf) : System.Boolean AngouriMath.Entity+Powf.$() : AngouriMath.Entity+Powf AngouriMath.Entity+Powf.Base { } : AngouriMath.Entity AngouriMath.Entity+Powf.Codomain { } : AngouriMath.Core.Domain @@ -3180,6 +3203,7 @@ AngouriMath.MathS.Cotan(AngouriMath.Entity) : AngouriMath.Entity AngouriMath.MathS.Derivative(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity AngouriMath.MathS.Derivative(AngouriMath.Entity, AngouriMath.Entity, System.Int32) : AngouriMath.Entity AngouriMath.MathS.Det(AngouriMath.Entity+Matrix) : AngouriMath.Entity +AngouriMath.MathS.Digamma(AngouriMath.Entity) : AngouriMath.Entity AngouriMath.MathS.Disjunction(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity AngouriMath.MathS.Ei(AngouriMath.Entity) : AngouriMath.Entity AngouriMath.MathS.Equality(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity @@ -3242,6 +3266,7 @@ AngouriMath.MathS.O_4 : AngouriMath.Entity+Matrix AngouriMath.MathS.Parse(System.String) : HonkSharp.Functional.Either>> AngouriMath.MathS.Piecewise(System.Collections.Generic.IEnumerable, AngouriMath.Entity) : AngouriMath.Entity AngouriMath.MathS.Piecewise(System.ValueTuple[]) : AngouriMath.Entity +AngouriMath.MathS.Polygamma(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity AngouriMath.MathS.Pow(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity AngouriMath.MathS.Product(AngouriMath.Entity, AngouriMath.Entity, AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity AngouriMath.MathS.Provided(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity @@ -3416,6 +3441,7 @@ class AngouriMath.Entity+Number+Real class AngouriMath.Entity+Orf class AngouriMath.Entity+Phif class AngouriMath.Entity+Piecewise +class AngouriMath.Entity+Polygammaf class AngouriMath.Entity+Powf class AngouriMath.Entity+Primef class AngouriMath.Entity+Productf diff --git a/Sources/Tests/UnitTests/Convenience/PolygammaTest.cs b/Sources/Tests/UnitTests/Convenience/PolygammaTest.cs new file mode 100644 index 000000000..85f5938bf --- /dev/null +++ b/Sources/Tests/UnitTests/Convenience/PolygammaTest.cs @@ -0,0 +1,95 @@ +// +// 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 AngouriMath.Extensions; +using PeterO.Numbers; +using Xunit; +using static AngouriMath.Entity.Number; + +namespace AngouriMath.Tests.Convenience +{ + /// + /// The polygamma functions psi^(n)(z), the digamma function among them, and the derivative of the + /// factorial they give: (x!)' = x! psi(x + 1), which declined while the library had no digamma function. + /// References from mpmath at 130 digits. + /// #171 + /// + [Trait("Area", "Convenience")] + public sealed class PolygammaTest + { + private static void AssertClose(string reference, EDecimal actual) + { + var expected = EDecimal.FromString(reference); + var error = actual.Subtract(expected, EContext.ForPrecision(200)).Abs().Divide(expected.Abs(), EContext.ForPrecision(10)); + Assert.True(error.LessThan(EDecimal.FromString("1E-55")), $"{actual} where it is {expected}"); + } + + [Theory] + // -gamma, -gamma - 2 ln 2, by reflection, and the digamma function of a large argument. + [InlineData("digamma(1)", "-0.577215664901532860606512090082402431042159335939923598805767")] + [InlineData("digamma(1/2)", "-1.96351002602142347944097633299875556719315960466043410704713")] + [InlineData("digamma(-1/2)", "0.0364899739785765205590236670012444328068403953395658929528727")] + [InlineData("digamma(21/2)", "2.30300103429768637527259355084976605222629263212926398296056")] + [InlineData("digamma(10^10)", "23.0258509298904568401790812135103087426776823862877297603333")] + [InlineData("digamma(-10^6 + 1/2)", "13.8155105579643157707746153874811852456104531778043797538314")] + // pi^2/6, and orders past one on either side of 0. + [InlineData("polygamma(1, 1)", "1.64493406684822643647241516664602518921894990120679843773556")] + [InlineData("polygamma(2, 3)", "-0.154113806319188570799476323022899981529972584680997763584543")] + [InlineData("polygamma(3, -5/2)", "194.747876219187622421625517873890296434912770857870606876653")] + [InlineData("polygamma(5, 1/3)", "87502.2152361966023795285638471692738850417457051333041487639")] + public void IsItsValueOnTheRealLine(string expression, string reference) + => AssertClose(reference, Assert.IsType(expression.EvalNumerical()).EDecimal); + + [Theory] + [InlineData("digamma(1 + i)", "0.0946503206224769772718784827219107224762629717635416232329897", "1.07667404746858117413405079475000049044565626640381666557506")] + [InlineData("polygamma(1, 1/4 + 2i)", "-0.0659875969316856927740067718219804136807514101395018917845139", "-0.502733085636287710672357390342666507577585357074072483065022")] + [InlineData("digamma(-3/2 + i)", "0.809776810544048995668935476826367320162050302850132323665155", "2.67263282550818697494581681264808164030881630446709282234297")] + public void IsItsValueOffTheRealLine(string expression, string real, string imaginary) + { + var value = Assert.IsType(expression.EvalNumerical()); + AssertClose(real, value.RealPart.EDecimal); + AssertClose(imaginary, value.ImaginaryPart.EDecimal); + } + + [Theory] + [InlineData("digamma(0)")] + [InlineData("digamma(-3)")] + [InlineData("polygamma(2, -1)")] + public void IsUndefinedAtAPole(string expression) + => Assert.True(expression.EvalNumerical() is Complex { IsNaN: true }, $"{expression} is {expression.EvalNumerical()}"); + + [Fact] + public void TheDerivativeOfTheFactorialIsWrittenWithTheDigammaFunction() + { + var derivative = "x!".ToEntity().Differentiate("x"); + Assert.Equal("x! * digamma(x + 1)".ToEntity().InnerSimplified, derivative.InnerSimplified); + AssertClose("7.5367060105908028363609274595055854137470439843604584071654", + Assert.IsType(derivative.Substitute("x", 3).EvalNumerical()).EDecimal); + } + + [Fact] + public void EachOrderIsTheDerivativeOfTheOneBefore() + { + Assert.Equal(MathS.Polygamma(1, "x"), "digamma(x)".ToEntity().Differentiate("x")); + Assert.Equal((MathS.Polygamma(3, "x^2") * (2 * MathS.Var("x"))).InnerSimplified, "polygamma(2, x^2)".ToEntity().Differentiate("x").InnerSimplified); + } + + [Theory] + [InlineData("digamma(x)", "digamma(x)", @"\psi\left(x\right)", "sympy.digamma(x)")] + [InlineData("polygamma(2, x)", "polygamma(2, x)", @"\psi^{(2)}\left(x\right)", "sympy.polygamma(2, x)")] + [InlineData("polygamma(0, x)", "digamma(x)", @"\psi\left(x\right)", "sympy.digamma(x)")] + public void IsParsedAndPrinted(string written, string text, string latex, string sympy) + { + var entity = written.ToEntity(); + Assert.IsType(entity); + Assert.Equal(text, entity.Stringize()); + Assert.Equal(latex, entity.Latexize()); + Assert.Contains(sympy, MathS.ToSympyCode(entity)); + Assert.Equal(entity, entity.Stringize().ToEntity()); + } + } +} diff --git a/Sources/Tests/UnitTests/Core/Transformations/RuleAuthoringGuideTest.cs b/Sources/Tests/UnitTests/Core/Transformations/RuleAuthoringGuideTest.cs index d49f30808..31b3b67e7 100644 --- a/Sources/Tests/UnitTests/Core/Transformations/RuleAuthoringGuideTest.cs +++ b/Sources/Tests/UnitTests/Core/Transformations/RuleAuthoringGuideTest.cs @@ -79,7 +79,7 @@ public void TheIdentityIsNotTheName() [Fact] public void ThePatternLanguage() - => Stated(61, MatchPattern.BuildableNodeTypes.Count, "the number of buildable node types"); + => Stated(62, MatchPattern.BuildableNodeTypes.Count, "the number of buildable node types"); [Fact] public void ReplacementAPatternOrCode() From de50dcce712e17a7cd1fd5d05243f0dec25d9d59 Mon Sep 17 00:00:00 2001 From: Rafael Vuijk Date: Thu, 22 Oct 2026 17:06:56 +0000 Subject: [PATCH 2/2] Name the polygamma functions in the MCP server's syntax resource The server's syntax document lists every function the grammar reads, and its test fails on a name the grammar accepts that the document does not. Part of #171. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura --- Sources/MCP/AngouriMath.Mcp/Resources.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/MCP/AngouriMath.Mcp/Resources.cs b/Sources/MCP/AngouriMath.Mcp/Resources.cs index 998b98880..812bbd271 100644 --- a/Sources/MCP/AngouriMath.Mcp/Resources.cs +++ b/Sources/MCP/AngouriMath.Mcp/Resources.cs @@ -95,7 +95,7 @@ that every response returns. - `ln log log2 log10 exp pow sqrt cbrt sqr abs signum sign sgn` - `floor ceil ceiling round min max gcd lcm` - `gamma factorial binomial phi prime valuation` - - special functions: `erf erfc erfi Ei li Si Ci Shi Chi` + - special functions: `erf erfc erfi Ei li Si Ci Shi Chi`, and `digamma(z)` and `polygamma(n, z)` - sets: `card powerset union intersection complement image preimage domain aleph iverson` - `derivative integral limit limitleft limitright sum product argmax argmin piecewise