From e99f19fb1855a812e5a908a5b87b7d1f7eef2e3e Mon Sep 17 00:00:00 2001 From: Rafael Vuijk Date: Wed, 28 Oct 2026 11:34:23 +0000 Subject: [PATCH 1/3] det, transpose, dot, cross and resultant are functions in an expression Modenov's Problems in Geometry computes areas, collinearity, concurrency and elimination with determinants, vector products and resultants, and none of them could be written in an expression: det(M) was refused by name, transpose(x) and cross(a) were read as products, and dot, a two-vector cross and resultant did not parse. Each is computed from its arguments when it is parsed, since there is no node for any of them: det through Matrix.Determinant, transpose through Matrix.T, resultant through MathS.Polynomials.Resultant, and dot and cross from the components. dot conjugates neither side, as SymPy's dot and Mathematica's Dot do not. cross of two vectors is the vector product in three dimensions, and cross of one vector in the plane is that vector turned through a right angle anticlockwise, as Mathematica's Cross of one vector is, so dot(cross(a), b) is the book's pseudo-scalar product. An argument has to be a matrix or a vector written out, or one once its operations are carried out; anything else throws InvalidArgumentParseException naming the function. Closes #2147. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura --- BREAKING-CHANGES.md | 26 +- Sources/.editorconfig | 3 + Sources/AngouriMath/Core/Antlr/AngouriMath.g | 17 +- .../AngouriMath/Core/Antlr/AngouriMath.interp | 12 +- .../AngouriMath/Core/Antlr/AngouriMath.tokens | 44 +- .../Core/Antlr/AngouriMathLexer.cs | 1138 +++++++++-------- .../Core/Antlr/AngouriMathLexer.interp | 16 +- .../Core/Antlr/AngouriMathLexer.tokens | 44 +- .../Core/Antlr/AngouriMathParser.cs | 819 ++++++------ .../AngouriMath/Core/Antlr/ParsingHelpers.cs | 86 ++ Sources/AngouriMath/Docs/Usage/Syntax.md | 11 + .../MatrixFunctionsInAnExpressionTest.cs | 91 ++ .../MissingFunctionNamesRefusedTest.cs | 7 +- 13 files changed, 1331 insertions(+), 983 deletions(-) create mode 100644 Sources/Tests/UnitTests/Convenience/MatrixFunctionsInAnExpressionTest.cs diff --git a/BREAKING-CHANGES.md b/BREAKING-CHANGES.md index 4ed1a19c9..59d983bf5 100644 --- a/BREAKING-CHANGES.md +++ b/BREAKING-CHANGES.md @@ -263,20 +263,18 @@ the expression's own domain as its condition ([#2142](https://github.com/asc-com | `"(1 - cos(a))/(1 + cos(a))/tan(a/2)^2".Simplify()` | `(1 - cos(a)) / ((cos(a) + 1) * tan(a / 2) ^ 2)` | `1 provided not cos(a) + 1 = 0 and not tan(a / 2) = 0 and not cos(a / 2) = 0` | | `"(cos(2*x) - 1)^2 + sin(2*x)^2 - 4*sin(x)^2".Simplify()` ([#2133](https://github.com/asc-community/AngouriMath/issues/2133)) | `2 + (-2) * cos(2 * x) + (-4) * sin(x) ^ 2` | `0` | -### `conj`, `arg` and `det` are refused by name +### `conj` and `arg` are refused by name **Not silent: these now throw `UnrecognizedFunctionParseException` where they parsed.** A name the parser does not know, followed by a bracket, is read as a product, so `arg(z)` was the variable `arg` times `z`, and `arg(z) = 1` solved to `{ 1 / arg }`. `conjugate` was already refused by name; `conj` and `arg` are the conjugate and the argument -as other systems spell them, and `det` is the determinant, which a `Matrix` has as the property `Determinant` but an -expression cannot call. `re` and `im` are still read as products, as before: two letters is short enough to be a +as other systems spell them. `re` and `im` are still read as products, as before: two letters is short enough to be a variable's name ([#2136](https://github.com/asc-community/AngouriMath/issues/2136)). | Input | Was (2.6.0) | Now | |---|---|---| | `"arg(z)".ToEntity()` | `arg * z` | throws `UnrecognizedFunctionParseException` | | `"conj(z)".ToEntity()` | `conj * z` | throws `UnrecognizedFunctionParseException` | -| `"det([[1, 2], [3, 4]])".ToEntity()` | `det * [[1, 2], [3, 4]]` | throws `UnrecognizedFunctionParseException` | ### Over the reals, a modulus of a polynomial is split at the polynomial's real roots @@ -357,6 +355,26 @@ is rated no shorter ([#2135](https://github.com/asc-community/AngouriMath/issues | `"cos(a + b)".Expand()` | `cos(a + b)` | `cos(a) * cos(b) + -sin(a) * sin(b)` | | `"cos(a - b)".Expand()` | `cos(a - b)` | `cos(a) * cos(b) + sin(a) * sin(b)` | +### `det`, `transpose`, `dot`, `cross` and `resultant` are functions in an expression + +**Not silent: these names followed by a bracket are now computed, or refused, where they were read as products or +did not parse.** `det(M)` is the determinant, `transpose(M)` the transpose, `dot(a, b)` the sum of the products of the +components, `cross(a, b)` the vector product in three dimensions and `cross(a)` a vector of the plane turned through a +right angle anticlockwise, as Mathematica's `Cross` of one vector is; `resultant(p, q, x)` eliminates `x`. There is +no node for any of them, so each is computed when it is parsed, and left as unsimplified as what it stands for would +be written out: `dot([1, 2], [3, 4])` is `1 * 3 + 2 * 4`. An argument that is not a matrix or a vector of +the right shape, written out or once its operations are carried out, throws `InvalidArgumentParseException` +([#2147](https://github.com/asc-community/AngouriMath/issues/2147)). + +| Input | Was (2.6.0) | Now | +|---|---|---| +| `"det([[1, 2], [3, 4]])".ToEntity()` | `det * [[1, 2], [3, 4]]` | `-2` | +| `"transpose([1, 2])".ToEntity()` | `transpose * [1, 2]` | `[[1, 2]]`, the row | +| `"transpose(x)".ToEntity()` | `transpose * x` | throws `InvalidArgumentParseException` | +| `"cross([a, b])".ToEntity()` | `cross * [a, b]` | `[-b, a]` | +| `"dot([1, 2], [3, 4])".ToEntity()` | throws `UnhandledParseException` | `1 * 3 + 2 * 4` | +| `"resultant(x^2 - 1, x - a, x)".ToEntity()` | throws `UnhandledParseException` | `a ^ 2 - 1` | + ### A subscript may have a subscript **Not silent: what was a parse error is a name.** A name took at most one `_`, so `x_1_2` and `X_a_beta` were lexer diff --git a/Sources/.editorconfig b/Sources/.editorconfig index 002009400..26e4cc18b 100644 --- a/Sources/.editorconfig +++ b/Sources/.editorconfig @@ -240,6 +240,9 @@ file_header_template=\nCopyright (c) 2019-2026 Angouri.\nAngouriMath is licensed [Tests/UnitTests/Convenience/IversonTest.cs] file_header_template=\nCopyright (c) 2019-2026 Angouri.\nAngouriMath is licensed under MIT.\nDetails: https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md.\nWebsite: https://am.angouri.org.\n +[Tests/UnitTests/Convenience/MatrixFunctionsInAnExpressionTest.cs] +file_header_template=\nCopyright (c) 2019-2026 Angouri.\nAngouriMath is licensed under MIT.\nDetails: https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md.\nWebsite: https://am.angouri.org.\n + [Tests/UnitTests/Common/ExponentialOfALogarithmTest.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/Core/Antlr/AngouriMath.g b/Sources/AngouriMath/Core/Antlr/AngouriMath.g index c41fb208f..49eb12bf1 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMath.g +++ b/Sources/AngouriMath/Core/Antlr/AngouriMath.g @@ -626,6 +626,15 @@ atom returns[Entity value] | 'Ci(' args = function_arguments ')' { Assert("Ci", 1, $args.list.Count); $value = MathS.Ci($args.list[0]); } | 'Shi(' args = function_arguments ')' { Assert("Shi", 1, $args.list.Count); $value = MathS.Shi($args.list[0]); } | 'Chi(' args = function_arguments ')' { Assert("Chi", 1, $args.list.Count); $value = MathS.Chi($args.list[0]); } + /* The determinant, the transpose, the scalar and the vector product, and the resultant, each + computed from what it is applied to: there is no node for any of them, so a matrix or a + vector has to be written out, or be one once its operations are carried out. + https://github.com/asc-community/AngouriMath/issues/2147 */ + | 'det(' args = function_arguments ')' { Assert("det", 1, $args.list.Count); $value = ParsingHelpers.Determinant($args.list[0]); } + | 'transpose(' args = function_arguments ')' { Assert("transpose", 1, $args.list.Count); $value = ParsingHelpers.Transposed($args.list[0]); } + | 'dot(' args = function_arguments ')' { Assert("dot", 2, $args.list.Count); $value = ParsingHelpers.Dot($args.list[0], $args.list[1]); } + | 'cross(' args = function_arguments ')' { Assert("cross", (1, 2), $args.list.Count); $value = ParsingHelpers.Cross($args.list); } + | 'resultant(' args = function_arguments ')' { Assert("resultant", 3, $args.list.Count); $value = ParsingHelpers.Resultant($args.list[0], $args.list[1], $args.list[2]); } /* Names the library does not have. Each is a function every other CAS spells this way, so a caller reaches for it, and without these rules each is silently read as a product -- @@ -634,13 +643,11 @@ atom returns[Entity value] | 'trunc(' args = function_arguments ')' { $value = NotImplementedFunction("trunc", "rounding functions"); } | 'conjugate(' args = function_arguments ')' { $value = NotImplementedFunction("conjugate", "complex conjugate as a symbolic function"); } - /* conj and arg are the conjugate and the argument as other systems spell them, and det the - determinant, which exists on a matrix but not in an expression. Each was read as a product: - arg(z) was arg * z. re and im are left as products, as MissingFunctionNamesRefusedTest - records. https://github.com/asc-community/AngouriMath/issues/2136 */ + /* conj and arg are the conjugate and the argument as other systems spell them. Each was read + as a product: arg(z) was arg * z. re and im are left as products, as + MissingFunctionNamesRefusedTest records. https://github.com/asc-community/AngouriMath/issues/2136 */ | 'conj(' args = function_arguments ')' { $value = NotImplementedFunction("conj", "complex conjugate as a symbolic function"); } | 'arg(' args = function_arguments ')' { $value = NotImplementedFunction("arg", "complex argument as a symbolic function"); } - | 'det(' args = function_arguments ')' { $value = NotImplementedFunction("det", "determinant in an expression; a Matrix has the property Determinant"); } | 'domain(' args = function_arguments ')' { Assert("domain", 2, $args.list.Count); diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMath.interp b/Sources/AngouriMath/Core/Antlr/AngouriMath.interp index 146360562..58d2c52fc 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMath.interp +++ b/Sources/AngouriMath/Core/Antlr/AngouriMath.interp @@ -179,11 +179,15 @@ null 'Ci(' 'Shi(' 'Chi(' +'det(' +'transpose(' +'dot(' +'cross(' +'resultant(' 'trunc(' 'conjugate(' 'conj(' 'arg(' -'det(' 'domain(' 'piecewise(' 'apply(' @@ -387,6 +391,10 @@ null null null null +null +null +null +null NEWLINE NUMBER SPECIALSET @@ -426,4 +434,4 @@ statement atn: -[4, 1, 196, 1166, 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, 1, 24, 1, 24, 1, 24, 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, 1160, 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, 1347, 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, 1159, 1, 0, 0, 0, 50, 1161, 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, 1160, 6, 24, -1, 0, 448, 449, 5, 51, 0, 0, 449, 1160, 6, 24, -1, 0, 450, 451, 5, 193, 0, 0, 451, 1160, 6, 24, -1, 0, 452, 453, 5, 190, 0, 0, 453, 1160, 6, 24, -1, 0, 454, 455, 5, 192, 0, 0, 455, 1160, 6, 24, -1, 0, 456, 457, 5, 191, 0, 0, 457, 1160, 6, 24, -1, 0, 458, 459, 5, 194, 0, 0, 459, 1160, 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, 1160, 1, 0, 0, 0, 465, 466, 5, 54, 0, 0, 466, 467, 3, 48, 24, 0, 467, 468, 6, 24, -1, 0, 468, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 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, 1160, 1, 0, 0, 0, 1144, 1145, 5, 186, 0, 0, 1145, 1146, 3, 40, 20, 0, 1146, 1147, 5, 31, 0, 0, 1147, 1148, 6, 24, -1, 0, 1148, 1160, 1, 0, 0, 0, 1149, 1150, 5, 187, 0, 0, 1150, 1151, 3, 40, 20, 0, 1151, 1152, 5, 31, 0, 0, 1152, 1153, 6, 24, -1, 0, 1153, 1160, 1, 0, 0, 0, 1154, 1155, 5, 188, 0, 0, 1155, 1156, 3, 40, 20, 0, 1156, 1157, 5, 31, 0, 0, 1157, 1158, 6, 24, -1, 0, 1158, 1160, 1, 0, 0, 0, 1159, 446, 1, 0, 0, 0, 1159, 448, 1, 0, 0, 0, 1159, 450, 1, 0, 0, 0, 1159, 452, 1, 0, 0, 0, 1159, 454, 1, 0, 0, 0, 1159, 456, 1, 0, 0, 0, 1159, 458, 1, 0, 0, 0, 1159, 460, 1, 0, 0, 0, 1159, 465, 1, 0, 0, 0, 1159, 469, 1, 0, 0, 0, 1159, 474, 1, 0, 0, 0, 1159, 479, 1, 0, 0, 0, 1159, 484, 1, 0, 0, 0, 1159, 489, 1, 0, 0, 0, 1159, 494, 1, 0, 0, 0, 1159, 499, 1, 0, 0, 0, 1159, 504, 1, 0, 0, 0, 1159, 509, 1, 0, 0, 0, 1159, 514, 1, 0, 0, 0, 1159, 519, 1, 0, 0, 0, 1159, 524, 1, 0, 0, 0, 1159, 529, 1, 0, 0, 0, 1159, 534, 1, 0, 0, 0, 1159, 539, 1, 0, 0, 0, 1159, 544, 1, 0, 0, 0, 1159, 549, 1, 0, 0, 0, 1159, 554, 1, 0, 0, 0, 1159, 559, 1, 0, 0, 0, 1159, 564, 1, 0, 0, 0, 1159, 569, 1, 0, 0, 0, 1159, 574, 1, 0, 0, 0, 1159, 579, 1, 0, 0, 0, 1159, 584, 1, 0, 0, 0, 1159, 589, 1, 0, 0, 0, 1159, 594, 1, 0, 0, 0, 1159, 599, 1, 0, 0, 0, 1159, 604, 1, 0, 0, 0, 1159, 609, 1, 0, 0, 0, 1159, 614, 1, 0, 0, 0, 1159, 619, 1, 0, 0, 0, 1159, 624, 1, 0, 0, 0, 1159, 629, 1, 0, 0, 0, 1159, 634, 1, 0, 0, 0, 1159, 639, 1, 0, 0, 0, 1159, 644, 1, 0, 0, 0, 1159, 649, 1, 0, 0, 0, 1159, 654, 1, 0, 0, 0, 1159, 659, 1, 0, 0, 0, 1159, 664, 1, 0, 0, 0, 1159, 669, 1, 0, 0, 0, 1159, 674, 1, 0, 0, 0, 1159, 679, 1, 0, 0, 0, 1159, 684, 1, 0, 0, 0, 1159, 689, 1, 0, 0, 0, 1159, 694, 1, 0, 0, 0, 1159, 699, 1, 0, 0, 0, 1159, 704, 1, 0, 0, 0, 1159, 709, 1, 0, 0, 0, 1159, 714, 1, 0, 0, 0, 1159, 719, 1, 0, 0, 0, 1159, 724, 1, 0, 0, 0, 1159, 729, 1, 0, 0, 0, 1159, 734, 1, 0, 0, 0, 1159, 739, 1, 0, 0, 0, 1159, 744, 1, 0, 0, 0, 1159, 749, 1, 0, 0, 0, 1159, 754, 1, 0, 0, 0, 1159, 759, 1, 0, 0, 0, 1159, 764, 1, 0, 0, 0, 1159, 769, 1, 0, 0, 0, 1159, 774, 1, 0, 0, 0, 1159, 779, 1, 0, 0, 0, 1159, 784, 1, 0, 0, 0, 1159, 789, 1, 0, 0, 0, 1159, 794, 1, 0, 0, 0, 1159, 799, 1, 0, 0, 0, 1159, 804, 1, 0, 0, 0, 1159, 809, 1, 0, 0, 0, 1159, 814, 1, 0, 0, 0, 1159, 819, 1, 0, 0, 0, 1159, 824, 1, 0, 0, 0, 1159, 829, 1, 0, 0, 0, 1159, 834, 1, 0, 0, 0, 1159, 839, 1, 0, 0, 0, 1159, 844, 1, 0, 0, 0, 1159, 849, 1, 0, 0, 0, 1159, 854, 1, 0, 0, 0, 1159, 859, 1, 0, 0, 0, 1159, 864, 1, 0, 0, 0, 1159, 869, 1, 0, 0, 0, 1159, 874, 1, 0, 0, 0, 1159, 879, 1, 0, 0, 0, 1159, 884, 1, 0, 0, 0, 1159, 889, 1, 0, 0, 0, 1159, 894, 1, 0, 0, 0, 1159, 899, 1, 0, 0, 0, 1159, 904, 1, 0, 0, 0, 1159, 909, 1, 0, 0, 0, 1159, 914, 1, 0, 0, 0, 1159, 919, 1, 0, 0, 0, 1159, 924, 1, 0, 0, 0, 1159, 929, 1, 0, 0, 0, 1159, 934, 1, 0, 0, 0, 1159, 939, 1, 0, 0, 0, 1159, 944, 1, 0, 0, 0, 1159, 949, 1, 0, 0, 0, 1159, 954, 1, 0, 0, 0, 1159, 959, 1, 0, 0, 0, 1159, 964, 1, 0, 0, 0, 1159, 969, 1, 0, 0, 0, 1159, 974, 1, 0, 0, 0, 1159, 979, 1, 0, 0, 0, 1159, 984, 1, 0, 0, 0, 1159, 989, 1, 0, 0, 0, 1159, 994, 1, 0, 0, 0, 1159, 999, 1, 0, 0, 0, 1159, 1004, 1, 0, 0, 0, 1159, 1009, 1, 0, 0, 0, 1159, 1014, 1, 0, 0, 0, 1159, 1019, 1, 0, 0, 0, 1159, 1024, 1, 0, 0, 0, 1159, 1029, 1, 0, 0, 0, 1159, 1034, 1, 0, 0, 0, 1159, 1039, 1, 0, 0, 0, 1159, 1044, 1, 0, 0, 0, 1159, 1049, 1, 0, 0, 0, 1159, 1054, 1, 0, 0, 0, 1159, 1059, 1, 0, 0, 0, 1159, 1064, 1, 0, 0, 0, 1159, 1069, 1, 0, 0, 0, 1159, 1074, 1, 0, 0, 0, 1159, 1079, 1, 0, 0, 0, 1159, 1084, 1, 0, 0, 0, 1159, 1089, 1, 0, 0, 0, 1159, 1094, 1, 0, 0, 0, 1159, 1099, 1, 0, 0, 0, 1159, 1104, 1, 0, 0, 0, 1159, 1109, 1, 0, 0, 0, 1159, 1114, 1, 0, 0, 0, 1159, 1119, 1, 0, 0, 0, 1159, 1124, 1, 0, 0, 0, 1159, 1129, 1, 0, 0, 0, 1159, 1134, 1, 0, 0, 0, 1159, 1139, 1, 0, 0, 0, 1159, 1144, 1, 0, 0, 0, 1159, 1149, 1, 0, 0, 0, 1159, 1154, 1, 0, 0, 0, 1160, 49, 1, 0, 0, 0, 1161, 1162, 3, 32, 16, 0, 1162, 1163, 5, 0, 0, 1, 1163, 1164, 6, 25, -1, 0, 1164, 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, 1159] \ No newline at end of file +[4, 1, 200, 1186, 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, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 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, 1180, 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, 1371, 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, 1179, 1, 0, 0, 0, 50, 1181, 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, 1180, 6, 24, -1, 0, 448, 449, 5, 51, 0, 0, 449, 1180, 6, 24, -1, 0, 450, 451, 5, 197, 0, 0, 451, 1180, 6, 24, -1, 0, 452, 453, 5, 194, 0, 0, 453, 1180, 6, 24, -1, 0, 454, 455, 5, 196, 0, 0, 455, 1180, 6, 24, -1, 0, 456, 457, 5, 195, 0, 0, 457, 1180, 6, 24, -1, 0, 458, 459, 5, 198, 0, 0, 459, 1180, 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, 1180, 1, 0, 0, 0, 465, 466, 5, 54, 0, 0, 466, 467, 3, 48, 24, 0, 467, 468, 6, 24, -1, 0, 468, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 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, 1180, 1, 0, 0, 0, 1144, 1145, 5, 186, 0, 0, 1145, 1146, 3, 40, 20, 0, 1146, 1147, 5, 31, 0, 0, 1147, 1148, 6, 24, -1, 0, 1148, 1180, 1, 0, 0, 0, 1149, 1150, 5, 187, 0, 0, 1150, 1151, 3, 40, 20, 0, 1151, 1152, 5, 31, 0, 0, 1152, 1153, 6, 24, -1, 0, 1153, 1180, 1, 0, 0, 0, 1154, 1155, 5, 188, 0, 0, 1155, 1156, 3, 40, 20, 0, 1156, 1157, 5, 31, 0, 0, 1157, 1158, 6, 24, -1, 0, 1158, 1180, 1, 0, 0, 0, 1159, 1160, 5, 189, 0, 0, 1160, 1161, 3, 40, 20, 0, 1161, 1162, 5, 31, 0, 0, 1162, 1163, 6, 24, -1, 0, 1163, 1180, 1, 0, 0, 0, 1164, 1165, 5, 190, 0, 0, 1165, 1166, 3, 40, 20, 0, 1166, 1167, 5, 31, 0, 0, 1167, 1168, 6, 24, -1, 0, 1168, 1180, 1, 0, 0, 0, 1169, 1170, 5, 191, 0, 0, 1170, 1171, 3, 40, 20, 0, 1171, 1172, 5, 31, 0, 0, 1172, 1173, 6, 24, -1, 0, 1173, 1180, 1, 0, 0, 0, 1174, 1175, 5, 192, 0, 0, 1175, 1176, 3, 40, 20, 0, 1176, 1177, 5, 31, 0, 0, 1177, 1178, 6, 24, -1, 0, 1178, 1180, 1, 0, 0, 0, 1179, 446, 1, 0, 0, 0, 1179, 448, 1, 0, 0, 0, 1179, 450, 1, 0, 0, 0, 1179, 452, 1, 0, 0, 0, 1179, 454, 1, 0, 0, 0, 1179, 456, 1, 0, 0, 0, 1179, 458, 1, 0, 0, 0, 1179, 460, 1, 0, 0, 0, 1179, 465, 1, 0, 0, 0, 1179, 469, 1, 0, 0, 0, 1179, 474, 1, 0, 0, 0, 1179, 479, 1, 0, 0, 0, 1179, 484, 1, 0, 0, 0, 1179, 489, 1, 0, 0, 0, 1179, 494, 1, 0, 0, 0, 1179, 499, 1, 0, 0, 0, 1179, 504, 1, 0, 0, 0, 1179, 509, 1, 0, 0, 0, 1179, 514, 1, 0, 0, 0, 1179, 519, 1, 0, 0, 0, 1179, 524, 1, 0, 0, 0, 1179, 529, 1, 0, 0, 0, 1179, 534, 1, 0, 0, 0, 1179, 539, 1, 0, 0, 0, 1179, 544, 1, 0, 0, 0, 1179, 549, 1, 0, 0, 0, 1179, 554, 1, 0, 0, 0, 1179, 559, 1, 0, 0, 0, 1179, 564, 1, 0, 0, 0, 1179, 569, 1, 0, 0, 0, 1179, 574, 1, 0, 0, 0, 1179, 579, 1, 0, 0, 0, 1179, 584, 1, 0, 0, 0, 1179, 589, 1, 0, 0, 0, 1179, 594, 1, 0, 0, 0, 1179, 599, 1, 0, 0, 0, 1179, 604, 1, 0, 0, 0, 1179, 609, 1, 0, 0, 0, 1179, 614, 1, 0, 0, 0, 1179, 619, 1, 0, 0, 0, 1179, 624, 1, 0, 0, 0, 1179, 629, 1, 0, 0, 0, 1179, 634, 1, 0, 0, 0, 1179, 639, 1, 0, 0, 0, 1179, 644, 1, 0, 0, 0, 1179, 649, 1, 0, 0, 0, 1179, 654, 1, 0, 0, 0, 1179, 659, 1, 0, 0, 0, 1179, 664, 1, 0, 0, 0, 1179, 669, 1, 0, 0, 0, 1179, 674, 1, 0, 0, 0, 1179, 679, 1, 0, 0, 0, 1179, 684, 1, 0, 0, 0, 1179, 689, 1, 0, 0, 0, 1179, 694, 1, 0, 0, 0, 1179, 699, 1, 0, 0, 0, 1179, 704, 1, 0, 0, 0, 1179, 709, 1, 0, 0, 0, 1179, 714, 1, 0, 0, 0, 1179, 719, 1, 0, 0, 0, 1179, 724, 1, 0, 0, 0, 1179, 729, 1, 0, 0, 0, 1179, 734, 1, 0, 0, 0, 1179, 739, 1, 0, 0, 0, 1179, 744, 1, 0, 0, 0, 1179, 749, 1, 0, 0, 0, 1179, 754, 1, 0, 0, 0, 1179, 759, 1, 0, 0, 0, 1179, 764, 1, 0, 0, 0, 1179, 769, 1, 0, 0, 0, 1179, 774, 1, 0, 0, 0, 1179, 779, 1, 0, 0, 0, 1179, 784, 1, 0, 0, 0, 1179, 789, 1, 0, 0, 0, 1179, 794, 1, 0, 0, 0, 1179, 799, 1, 0, 0, 0, 1179, 804, 1, 0, 0, 0, 1179, 809, 1, 0, 0, 0, 1179, 814, 1, 0, 0, 0, 1179, 819, 1, 0, 0, 0, 1179, 824, 1, 0, 0, 0, 1179, 829, 1, 0, 0, 0, 1179, 834, 1, 0, 0, 0, 1179, 839, 1, 0, 0, 0, 1179, 844, 1, 0, 0, 0, 1179, 849, 1, 0, 0, 0, 1179, 854, 1, 0, 0, 0, 1179, 859, 1, 0, 0, 0, 1179, 864, 1, 0, 0, 0, 1179, 869, 1, 0, 0, 0, 1179, 874, 1, 0, 0, 0, 1179, 879, 1, 0, 0, 0, 1179, 884, 1, 0, 0, 0, 1179, 889, 1, 0, 0, 0, 1179, 894, 1, 0, 0, 0, 1179, 899, 1, 0, 0, 0, 1179, 904, 1, 0, 0, 0, 1179, 909, 1, 0, 0, 0, 1179, 914, 1, 0, 0, 0, 1179, 919, 1, 0, 0, 0, 1179, 924, 1, 0, 0, 0, 1179, 929, 1, 0, 0, 0, 1179, 934, 1, 0, 0, 0, 1179, 939, 1, 0, 0, 0, 1179, 944, 1, 0, 0, 0, 1179, 949, 1, 0, 0, 0, 1179, 954, 1, 0, 0, 0, 1179, 959, 1, 0, 0, 0, 1179, 964, 1, 0, 0, 0, 1179, 969, 1, 0, 0, 0, 1179, 974, 1, 0, 0, 0, 1179, 979, 1, 0, 0, 0, 1179, 984, 1, 0, 0, 0, 1179, 989, 1, 0, 0, 0, 1179, 994, 1, 0, 0, 0, 1179, 999, 1, 0, 0, 0, 1179, 1004, 1, 0, 0, 0, 1179, 1009, 1, 0, 0, 0, 1179, 1014, 1, 0, 0, 0, 1179, 1019, 1, 0, 0, 0, 1179, 1024, 1, 0, 0, 0, 1179, 1029, 1, 0, 0, 0, 1179, 1034, 1, 0, 0, 0, 1179, 1039, 1, 0, 0, 0, 1179, 1044, 1, 0, 0, 0, 1179, 1049, 1, 0, 0, 0, 1179, 1054, 1, 0, 0, 0, 1179, 1059, 1, 0, 0, 0, 1179, 1064, 1, 0, 0, 0, 1179, 1069, 1, 0, 0, 0, 1179, 1074, 1, 0, 0, 0, 1179, 1079, 1, 0, 0, 0, 1179, 1084, 1, 0, 0, 0, 1179, 1089, 1, 0, 0, 0, 1179, 1094, 1, 0, 0, 0, 1179, 1099, 1, 0, 0, 0, 1179, 1104, 1, 0, 0, 0, 1179, 1109, 1, 0, 0, 0, 1179, 1114, 1, 0, 0, 0, 1179, 1119, 1, 0, 0, 0, 1179, 1124, 1, 0, 0, 0, 1179, 1129, 1, 0, 0, 0, 1179, 1134, 1, 0, 0, 0, 1179, 1139, 1, 0, 0, 0, 1179, 1144, 1, 0, 0, 0, 1179, 1149, 1, 0, 0, 0, 1179, 1154, 1, 0, 0, 0, 1179, 1159, 1, 0, 0, 0, 1179, 1164, 1, 0, 0, 0, 1179, 1169, 1, 0, 0, 0, 1179, 1174, 1, 0, 0, 0, 1180, 49, 1, 0, 0, 0, 1181, 1182, 3, 32, 16, 0, 1182, 1183, 5, 0, 0, 1, 1183, 1184, 6, 25, -1, 0, 1184, 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, 1179] \ No newline at end of file diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens b/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens index d0dbc3097..d1fc41ed7 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens +++ b/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens @@ -186,14 +186,18 @@ T__184=185 T__185=186 T__186=187 T__187=188 -NEWLINE=189 -NUMBER=190 -SPECIALSET=191 -BOOLEAN=192 -NAN=193 -VARIABLE=194 -COMMENT=195 -WS=196 +T__188=189 +T__189=190 +T__190=191 +T__191=192 +NEWLINE=193 +NUMBER=194 +SPECIALSET=195 +BOOLEAN=196 +NAN=197 +VARIABLE=198 +COMMENT=199 +WS=200 '!'=1 '^'=2 '-'=3 @@ -373,13 +377,17 @@ WS=196 'Ci('=177 'Shi('=178 'Chi('=179 -'trunc('=180 -'conjugate('=181 -'conj('=182 -'arg('=183 -'det('=184 -'domain('=185 -'piecewise('=186 -'apply('=187 -'lambda('=188 -'NaN'=193 +'det('=180 +'transpose('=181 +'dot('=182 +'cross('=183 +'resultant('=184 +'trunc('=185 +'conjugate('=186 +'conj('=187 +'arg('=188 +'domain('=189 +'piecewise('=190 +'apply('=191 +'lambda('=192 +'NaN'=197 diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs index 29dab5e00..c8f78e0a4 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs +++ b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs @@ -62,8 +62,9 @@ public const int 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, T__183=184, T__184=185, - T__185=186, T__186=187, T__187=188, NEWLINE=189, NUMBER=190, SPECIALSET=191, - BOOLEAN=192, NAN=193, VARIABLE=194, COMMENT=195, WS=196; + T__185=186, T__186=187, T__187=188, T__188=189, T__189=190, T__190=191, + T__191=192, NEWLINE=193, NUMBER=194, SPECIALSET=195, BOOLEAN=196, NAN=197, + VARIABLE=198, COMMENT=199, WS=200; public static string[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -97,9 +98,9 @@ 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", "T__183", "T__184", "T__185", "T__186", "T__187", "NEWLINE", - "EXPONENT", "NUMBER", "SPECIALSET", "BOOLEAN", "NAN", "VARIABLE", "COMMENT", - "WS" + "T__182", "T__183", "T__184", "T__185", "T__186", "T__187", "T__188", + "T__189", "T__190", "T__191", "NEWLINE", "EXPONENT", "NUMBER", "SPECIALSET", + "BOOLEAN", "NAN", "VARIABLE", "COMMENT", "WS" }; @@ -146,9 +147,10 @@ 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('", - "'polygamma('", "'digamma('", "'Si('", "'Ci('", "'Shi('", "'Chi('", "'trunc('", - "'conjugate('", "'conj('", "'arg('", "'det('", "'domain('", "'piecewise('", - "'apply('", "'lambda('", null, null, null, null, "'NaN'" + "'polygamma('", "'digamma('", "'Si('", "'Ci('", "'Shi('", "'Chi('", "'det('", + "'transpose('", "'dot('", "'cross('", "'resultant('", "'trunc('", "'conjugate('", + "'conj('", "'arg('", "'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, @@ -166,8 +168,9 @@ 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, null, null, null, null, null, "NEWLINE", "NUMBER", - "SPECIALSET", "BOOLEAN", "NAN", "VARIABLE", "COMMENT", "WS" + null, null, null, null, null, null, null, null, null, null, null, null, + null, "NEWLINE", "NUMBER", "SPECIALSET", "BOOLEAN", "NAN", "VARIABLE", + "COMMENT", "WS" }; public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames); @@ -197,7 +200,7 @@ static AngouriMathLexer() { } } private static int[] _serializedATN = { - 4,0,196,1684,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,200,1726,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, @@ -227,556 +230,571 @@ static AngouriMathLexer() { 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,2,194, - 7,194,2,195,7,195,2,196,7,196,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,182,1,182,1,182,1,182,1,182,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, + 7,194,2,195,7,195,2,196,7,196,2,197,7,197,2,198,7,198,2,199,7,199,2,200, + 7,200,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,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,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,183,1,183,1,183,1,183,1,184,1,184,1,184,1,184,1,184,1,184,1,184, 1,185,1,185,1,185,1,185,1,185,1,185,1,185,1,185,1,185,1,185,1,185,1,186, - 1,186,1,186,1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,1,187,1,187, - 1,187,1,187,1,188,3,188,1535,8,188,1,188,4,188,1538,8,188,11,188,12,188, - 1539,1,188,1,188,1,189,1,189,3,189,1546,8,189,1,189,4,189,1549,8,189,11, - 189,12,189,1550,1,190,4,190,1554,8,190,11,190,12,190,1555,1,190,1,190, - 5,190,1560,8,190,10,190,12,190,1563,9,190,1,190,3,190,1566,8,190,1,190, - 3,190,1569,8,190,1,190,3,190,1572,8,190,1,190,4,190,1575,8,190,11,190, - 12,190,1576,1,190,3,190,1580,8,190,1,190,3,190,1583,8,190,1,190,3,190, - 1586,8,190,1,191,1,191,1,191,1,191,1,191,1,191,1,191,1,191,1,191,1,191, - 1,191,1,191,1,191,1,191,1,191,1,191,1,191,1,191,3,191,1606,8,191,1,192, - 1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192, - 1,192,1,192,1,192,1,192,1,192,3,192,1626,8,192,1,193,1,193,1,193,1,193, - 1,194,4,194,1633,8,194,11,194,12,194,1634,1,194,1,194,4,194,1639,8,194, - 11,194,12,194,1640,5,194,1643,8,194,10,194,12,194,1646,9,194,1,195,1,195, - 1,195,1,195,5,195,1652,8,195,10,195,12,195,1655,9,195,1,195,3,195,1658, - 8,195,1,195,3,195,1661,8,195,1,195,1,195,1,195,1,195,5,195,1667,8,195, - 10,195,12,195,1670,9,195,1,195,1,195,3,195,1674,8,195,1,195,1,195,1,196, - 4,196,1679,8,196,11,196,12,196,1680,1,196,1,196,1,1668,0,197,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,187,375,188,377,189,379,0,381,190,383, - 191,385,192,387,193,389,194,391,195,393,196,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,1715,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,373,1,0,0,0,0,375,1,0,0,0,0,377,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,0,389,1,0,0,0,0,391,1,0,0, - 0,0,393,1,0,0,0,1,395,1,0,0,0,3,397,1,0,0,0,5,399,1,0,0,0,7,401,1,0,0, - 0,9,403,1,0,0,0,11,405,1,0,0,0,13,409,1,0,0,0,15,411,1,0,0,0,17,413,1, - 0,0,0,19,417,1,0,0,0,21,427,1,0,0,0,23,430,1,0,0,0,25,436,1,0,0,0,27,439, - 1,0,0,0,29,451,1,0,0,0,31,453,1,0,0,0,33,456,1,0,0,0,35,463,1,0,0,0,37, - 465,1,0,0,0,39,474,1,0,0,0,41,476,1,0,0,0,43,484,1,0,0,0,45,486,1,0,0, - 0,47,489,1,0,0,0,49,492,1,0,0,0,51,494,1,0,0,0,53,496,1,0,0,0,55,498,1, - 0,0,0,57,501,1,0,0,0,59,503,1,0,0,0,61,505,1,0,0,0,63,507,1,0,0,0,65,511, - 1,0,0,0,67,515,1,0,0,0,69,517,1,0,0,0,71,521,1,0,0,0,73,524,1,0,0,0,75, - 532,1,0,0,0,77,535,1,0,0,0,79,544,1,0,0,0,81,547,1,0,0,0,83,549,1,0,0, - 0,85,556,1,0,0,0,87,558,1,0,0,0,89,566,1,0,0,0,91,569,1,0,0,0,93,576,1, - 0,0,0,95,578,1,0,0,0,97,580,1,0,0,0,99,582,1,0,0,0,101,586,1,0,0,0,103, - 590,1,0,0,0,105,593,1,0,0,0,107,596,1,0,0,0,109,598,1,0,0,0,111,600,1, - 0,0,0,113,603,1,0,0,0,115,605,1,0,0,0,117,607,1,0,0,0,119,609,1,0,0,0, - 121,614,1,0,0,0,123,621,1,0,0,0,125,627,1,0,0,0,127,632,1,0,0,0,129,638, - 1,0,0,0,131,644,1,0,0,0,133,649,1,0,0,0,135,653,1,0,0,0,137,658,1,0,0, - 0,139,663,1,0,0,0,141,668,1,0,0,0,143,673,1,0,0,0,145,680,1,0,0,0,147, - 685,1,0,0,0,149,690,1,0,0,0,151,697,1,0,0,0,153,702,1,0,0,0,155,710,1, - 0,0,0,157,718,1,0,0,0,159,726,1,0,0,0,161,736,1,0,0,0,163,744,1,0,0,0, - 165,754,1,0,0,0,167,762,1,0,0,0,169,768,1,0,0,0,171,774,1,0,0,0,173,780, - 1,0,0,0,175,786,1,0,0,0,177,794,1,0,0,0,179,800,1,0,0,0,181,808,1,0,0, - 0,183,814,1,0,0,0,185,822,1,0,0,0,187,828,1,0,0,0,189,832,1,0,0,0,191, - 838,1,0,0,0,193,842,1,0,0,0,195,848,1,0,0,0,197,852,1,0,0,0,199,860,1, - 0,0,0,201,866,1,0,0,0,203,871,1,0,0,0,205,877,1,0,0,0,207,882,1,0,0,0, - 209,890,1,0,0,0,211,896,1,0,0,0,213,903,1,0,0,0,215,911,1,0,0,0,217,917, - 1,0,0,0,219,926,1,0,0,0,221,933,1,0,0,0,223,941,1,0,0,0,225,947,1,0,0, - 0,227,956,1,0,0,0,229,963,1,0,0,0,231,971,1,0,0,0,233,977,1,0,0,0,235, - 986,1,0,0,0,237,993,1,0,0,0,239,1001,1,0,0,0,241,1010,1,0,0,0,243,1020, - 1,0,0,0,245,1027,1,0,0,0,247,1038,1,0,0,0,249,1045,1,0,0,0,251,1053,1, - 0,0,0,253,1060,1,0,0,0,255,1069,1,0,0,0,257,1078,1,0,0,0,259,1088,1,0, - 0,0,261,1096,1,0,0,0,263,1107,1,0,0,0,265,1114,1,0,0,0,267,1125,1,0,0, - 0,269,1132,1,0,0,0,271,1144,1,0,0,0,273,1154,1,0,0,0,275,1161,1,0,0,0, - 277,1172,1,0,0,0,279,1184,1,0,0,0,281,1189,1,0,0,0,283,1198,1,0,0,0,285, - 1206,1,0,0,0,287,1211,1,0,0,0,289,1217,1,0,0,0,291,1222,1,0,0,0,293,1227, - 1,0,0,0,295,1234,1,0,0,0,297,1245,1,0,0,0,299,1251,1,0,0,0,301,1261,1, - 0,0,0,303,1268,1,0,0,0,305,1282,1,0,0,0,307,1294,1,0,0,0,309,1301,1,0, - 0,0,311,1311,1,0,0,0,313,1318,1,0,0,0,315,1324,1,0,0,0,317,1333,1,0,0, - 0,319,1340,1,0,0,0,321,1345,1,0,0,0,323,1350,1,0,0,0,325,1358,1,0,0,0, - 327,1366,1,0,0,0,329,1371,1,0,0,0,331,1376,1,0,0,0,333,1386,1,0,0,0,335, - 1395,1,0,0,0,337,1402,1,0,0,0,339,1407,1,0,0,0,341,1413,1,0,0,0,343,1419, - 1,0,0,0,345,1423,1,0,0,0,347,1427,1,0,0,0,349,1438,1,0,0,0,351,1447,1, - 0,0,0,353,1451,1,0,0,0,355,1455,1,0,0,0,357,1460,1,0,0,0,359,1465,1,0, - 0,0,361,1472,1,0,0,0,363,1483,1,0,0,0,365,1489,1,0,0,0,367,1494,1,0,0, - 0,369,1499,1,0,0,0,371,1507,1,0,0,0,373,1518,1,0,0,0,375,1525,1,0,0,0, - 377,1537,1,0,0,0,379,1543,1,0,0,0,381,1585,1,0,0,0,383,1605,1,0,0,0,385, - 1625,1,0,0,0,387,1627,1,0,0,0,389,1632,1,0,0,0,391,1673,1,0,0,0,393,1678, - 1,0,0,0,395,396,5,33,0,0,396,2,1,0,0,0,397,398,5,94,0,0,398,4,1,0,0,0, - 399,400,5,45,0,0,400,6,1,0,0,0,401,402,5,43,0,0,402,8,1,0,0,0,403,404, - 5,42,0,0,404,10,1,0,0,0,405,406,5,46,0,0,406,407,5,46,0,0,407,408,5,46, - 0,0,408,12,1,0,0,0,409,410,5,8230,0,0,410,14,1,0,0,0,411,412,5,47,0,0, - 412,16,1,0,0,0,413,414,5,109,0,0,414,415,5,111,0,0,415,416,5,100,0,0,416, - 18,1,0,0,0,417,418,5,105,0,0,418,419,5,110,0,0,419,420,5,116,0,0,420,421, - 5,101,0,0,421,422,5,114,0,0,422,423,5,115,0,0,423,424,5,101,0,0,424,425, - 5,99,0,0,425,426,5,116,0,0,426,20,1,0,0,0,427,428,5,47,0,0,428,429,5,92, - 0,0,429,22,1,0,0,0,430,431,5,117,0,0,431,432,5,110,0,0,432,433,5,105,0, - 0,433,434,5,116,0,0,434,435,5,101,0,0,435,24,1,0,0,0,436,437,5,92,0,0, - 437,438,5,47,0,0,438,26,1,0,0,0,439,440,5,115,0,0,440,441,5,101,0,0,441, - 442,5,116,0,0,442,443,5,115,0,0,443,444,5,117,0,0,444,445,5,98,0,0,445, - 446,5,116,0,0,446,447,5,114,0,0,447,448,5,97,0,0,448,449,5,99,0,0,449, - 450,5,116,0,0,450,28,1,0,0,0,451,452,5,92,0,0,452,30,1,0,0,0,453,454,5, - 105,0,0,454,455,5,110,0,0,455,32,1,0,0,0,456,457,5,115,0,0,457,458,5,117, - 0,0,458,459,5,98,0,0,459,460,5,115,0,0,460,461,5,101,0,0,461,462,5,116, - 0,0,462,34,1,0,0,0,463,464,5,8838,0,0,464,36,1,0,0,0,465,466,5,115,0,0, - 466,467,5,117,0,0,467,468,5,112,0,0,468,469,5,101,0,0,469,470,5,114,0, - 0,470,471,5,115,0,0,471,472,5,101,0,0,472,473,5,116,0,0,473,38,1,0,0,0, - 474,475,5,8839,0,0,475,40,1,0,0,0,476,477,5,100,0,0,477,478,5,105,0,0, - 478,479,5,118,0,0,479,480,5,105,0,0,480,481,5,100,0,0,481,482,5,101,0, - 0,482,483,5,115,0,0,483,42,1,0,0,0,484,485,5,124,0,0,485,44,1,0,0,0,486, - 487,5,62,0,0,487,488,5,61,0,0,488,46,1,0,0,0,489,490,5,60,0,0,490,491, - 5,61,0,0,491,48,1,0,0,0,492,493,5,62,0,0,493,50,1,0,0,0,494,495,5,60,0, - 0,495,52,1,0,0,0,496,497,5,61,0,0,497,54,1,0,0,0,498,499,5,60,0,0,499, - 500,5,62,0,0,500,56,1,0,0,0,501,502,5,8801,0,0,502,58,1,0,0,0,503,504, - 5,40,0,0,504,60,1,0,0,0,505,506,5,41,0,0,506,62,1,0,0,0,507,508,5,110, - 0,0,508,509,5,111,0,0,509,510,5,116,0,0,510,64,1,0,0,0,511,512,5,97,0, - 0,512,513,5,110,0,0,513,514,5,100,0,0,514,66,1,0,0,0,515,516,5,38,0,0, - 516,68,1,0,0,0,517,518,5,120,0,0,518,519,5,111,0,0,519,520,5,114,0,0,520, - 70,1,0,0,0,521,522,5,111,0,0,522,523,5,114,0,0,523,72,1,0,0,0,524,525, - 5,105,0,0,525,526,5,109,0,0,526,527,5,112,0,0,527,528,5,108,0,0,528,529, - 5,105,0,0,529,530,5,101,0,0,530,531,5,115,0,0,531,74,1,0,0,0,532,533,5, - 45,0,0,533,534,5,62,0,0,534,76,1,0,0,0,535,536,5,112,0,0,536,537,5,114, - 0,0,537,538,5,111,0,0,538,539,5,118,0,0,539,540,5,105,0,0,540,541,5,100, - 0,0,541,542,5,101,0,0,542,543,5,100,0,0,543,78,1,0,0,0,544,545,5,61,0, - 0,545,546,5,62,0,0,546,80,1,0,0,0,547,548,5,58,0,0,548,82,1,0,0,0,549, - 550,5,102,0,0,550,551,5,111,0,0,551,552,5,114,0,0,552,553,5,97,0,0,553, - 554,5,108,0,0,554,555,5,108,0,0,555,84,1,0,0,0,556,557,5,8704,0,0,557, - 86,1,0,0,0,558,559,5,101,0,0,559,560,5,120,0,0,560,561,5,105,0,0,561,562, - 5,115,0,0,562,563,5,116,0,0,563,564,5,115,0,0,564,565,5,33,0,0,565,88, - 1,0,0,0,566,567,5,8707,0,0,567,568,5,33,0,0,568,90,1,0,0,0,569,570,5,101, - 0,0,570,571,5,120,0,0,571,572,5,105,0,0,572,573,5,115,0,0,573,574,5,116, - 0,0,574,575,5,115,0,0,575,92,1,0,0,0,576,577,5,8707,0,0,577,94,1,0,0,0, - 578,579,5,44,0,0,579,96,1,0,0,0,580,581,5,59,0,0,581,98,1,0,0,0,582,583, - 5,43,0,0,583,584,5,111,0,0,584,585,5,111,0,0,585,100,1,0,0,0,586,587,5, - 45,0,0,587,588,5,111,0,0,588,589,5,111,0,0,589,102,1,0,0,0,590,591,5,40, - 0,0,591,592,5,124,0,0,592,104,1,0,0,0,593,594,5,124,0,0,594,595,5,41,0, - 0,595,106,1,0,0,0,596,597,5,35,0,0,597,108,1,0,0,0,598,599,5,91,0,0,599, - 110,1,0,0,0,600,601,5,93,0,0,601,602,5,84,0,0,602,112,1,0,0,0,603,604, - 5,93,0,0,604,114,1,0,0,0,605,606,5,123,0,0,606,116,1,0,0,0,607,608,5,125, - 0,0,608,118,1,0,0,0,609,610,5,108,0,0,610,611,5,111,0,0,611,612,5,103, - 0,0,612,613,5,40,0,0,613,120,1,0,0,0,614,615,5,108,0,0,615,616,5,111,0, - 0,616,617,5,103,0,0,617,618,5,49,0,0,618,619,5,48,0,0,619,620,5,40,0,0, - 620,122,1,0,0,0,621,622,5,108,0,0,622,623,5,111,0,0,623,624,5,103,0,0, - 624,625,5,50,0,0,625,626,5,40,0,0,626,124,1,0,0,0,627,628,5,112,0,0,628, - 629,5,111,0,0,629,630,5,119,0,0,630,631,5,40,0,0,631,126,1,0,0,0,632,633, - 5,115,0,0,633,634,5,113,0,0,634,635,5,114,0,0,635,636,5,116,0,0,636,637, - 5,40,0,0,637,128,1,0,0,0,638,639,5,99,0,0,639,640,5,98,0,0,640,641,5,114, - 0,0,641,642,5,116,0,0,642,643,5,40,0,0,643,130,1,0,0,0,644,645,5,115,0, - 0,645,646,5,113,0,0,646,647,5,114,0,0,647,648,5,40,0,0,648,132,1,0,0,0, - 649,650,5,108,0,0,650,651,5,110,0,0,651,652,5,40,0,0,652,134,1,0,0,0,653, - 654,5,101,0,0,654,655,5,120,0,0,655,656,5,112,0,0,656,657,5,40,0,0,657, - 136,1,0,0,0,658,659,5,115,0,0,659,660,5,105,0,0,660,661,5,110,0,0,661, - 662,5,40,0,0,662,138,1,0,0,0,663,664,5,99,0,0,664,665,5,111,0,0,665,666, - 5,115,0,0,666,667,5,40,0,0,667,140,1,0,0,0,668,669,5,116,0,0,669,670,5, - 97,0,0,670,671,5,110,0,0,671,672,5,40,0,0,672,142,1,0,0,0,673,674,5,99, - 0,0,674,675,5,111,0,0,675,676,5,116,0,0,676,677,5,97,0,0,677,678,5,110, - 0,0,678,679,5,40,0,0,679,144,1,0,0,0,680,681,5,99,0,0,681,682,5,111,0, - 0,682,683,5,116,0,0,683,684,5,40,0,0,684,146,1,0,0,0,685,686,5,115,0,0, - 686,687,5,101,0,0,687,688,5,99,0,0,688,689,5,40,0,0,689,148,1,0,0,0,690, - 691,5,99,0,0,691,692,5,111,0,0,692,693,5,115,0,0,693,694,5,101,0,0,694, - 695,5,99,0,0,695,696,5,40,0,0,696,150,1,0,0,0,697,698,5,99,0,0,698,699, - 5,115,0,0,699,700,5,99,0,0,700,701,5,40,0,0,701,152,1,0,0,0,702,703,5, - 97,0,0,703,704,5,114,0,0,704,705,5,99,0,0,705,706,5,115,0,0,706,707,5, - 105,0,0,707,708,5,110,0,0,708,709,5,40,0,0,709,154,1,0,0,0,710,711,5,97, - 0,0,711,712,5,114,0,0,712,713,5,99,0,0,713,714,5,99,0,0,714,715,5,111, - 0,0,715,716,5,115,0,0,716,717,5,40,0,0,717,156,1,0,0,0,718,719,5,97,0, - 0,719,720,5,114,0,0,720,721,5,99,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,158,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,99,0,0,730,731,5,111,0,0, - 731,732,5,116,0,0,732,733,5,97,0,0,733,734,5,110,0,0,734,735,5,40,0,0, - 735,160,1,0,0,0,736,737,5,97,0,0,737,738,5,114,0,0,738,739,5,99,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, - 162,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,111,0,0,749,750,5,115,0,0,750,751,5,101,0,0,751,752, - 5,99,0,0,752,753,5,40,0,0,753,164,1,0,0,0,754,755,5,97,0,0,755,756,5,114, - 0,0,756,757,5,99,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,166,1,0,0,0,762,763,5,97,0,0,763,764,5,99,0,0,764, - 765,5,115,0,0,765,766,5,99,0,0,766,767,5,40,0,0,767,168,1,0,0,0,768,769, - 5,97,0,0,769,770,5,115,0,0,770,771,5,105,0,0,771,772,5,110,0,0,772,773, - 5,40,0,0,773,170,1,0,0,0,774,775,5,97,0,0,775,776,5,99,0,0,776,777,5,111, - 0,0,777,778,5,115,0,0,778,779,5,40,0,0,779,172,1,0,0,0,780,781,5,97,0, - 0,781,782,5,116,0,0,782,783,5,97,0,0,783,784,5,110,0,0,784,785,5,40,0, - 0,785,174,1,0,0,0,786,787,5,97,0,0,787,788,5,99,0,0,788,789,5,111,0,0, - 789,790,5,116,0,0,790,791,5,97,0,0,791,792,5,110,0,0,792,793,5,40,0,0, - 793,176,1,0,0,0,794,795,5,97,0,0,795,796,5,115,0,0,796,797,5,101,0,0,797, - 798,5,99,0,0,798,799,5,40,0,0,799,178,1,0,0,0,800,801,5,97,0,0,801,802, - 5,99,0,0,802,803,5,111,0,0,803,804,5,115,0,0,804,805,5,101,0,0,805,806, - 5,99,0,0,806,807,5,40,0,0,807,180,1,0,0,0,808,809,5,97,0,0,809,810,5,99, - 0,0,810,811,5,111,0,0,811,812,5,116,0,0,812,813,5,40,0,0,813,182,1,0,0, - 0,814,815,5,97,0,0,815,816,5,114,0,0,816,817,5,99,0,0,817,818,5,99,0,0, - 818,819,5,111,0,0,819,820,5,116,0,0,820,821,5,40,0,0,821,184,1,0,0,0,822, - 823,5,115,0,0,823,824,5,105,0,0,824,825,5,110,0,0,825,826,5,104,0,0,826, - 827,5,40,0,0,827,186,1,0,0,0,828,829,5,115,0,0,829,830,5,104,0,0,830,831, - 5,40,0,0,831,188,1,0,0,0,832,833,5,99,0,0,833,834,5,111,0,0,834,835,5, - 115,0,0,835,836,5,104,0,0,836,837,5,40,0,0,837,190,1,0,0,0,838,839,5,99, - 0,0,839,840,5,104,0,0,840,841,5,40,0,0,841,192,1,0,0,0,842,843,5,116,0, - 0,843,844,5,97,0,0,844,845,5,110,0,0,845,846,5,104,0,0,846,847,5,40,0, - 0,847,194,1,0,0,0,848,849,5,116,0,0,849,850,5,104,0,0,850,851,5,40,0,0, - 851,196,1,0,0,0,852,853,5,99,0,0,853,854,5,111,0,0,854,855,5,116,0,0,855, - 856,5,97,0,0,856,857,5,110,0,0,857,858,5,104,0,0,858,859,5,40,0,0,859, - 198,1,0,0,0,860,861,5,99,0,0,861,862,5,111,0,0,862,863,5,116,0,0,863,864, - 5,104,0,0,864,865,5,40,0,0,865,200,1,0,0,0,866,867,5,99,0,0,867,868,5, - 116,0,0,868,869,5,104,0,0,869,870,5,40,0,0,870,202,1,0,0,0,871,872,5,115, - 0,0,872,873,5,101,0,0,873,874,5,99,0,0,874,875,5,104,0,0,875,876,5,40, - 0,0,876,204,1,0,0,0,877,878,5,115,0,0,878,879,5,99,0,0,879,880,5,104,0, - 0,880,881,5,40,0,0,881,206,1,0,0,0,882,883,5,99,0,0,883,884,5,111,0,0, - 884,885,5,115,0,0,885,886,5,101,0,0,886,887,5,99,0,0,887,888,5,104,0,0, - 888,889,5,40,0,0,889,208,1,0,0,0,890,891,5,99,0,0,891,892,5,115,0,0,892, - 893,5,99,0,0,893,894,5,104,0,0,894,895,5,40,0,0,895,210,1,0,0,0,896,897, - 5,97,0,0,897,898,5,115,0,0,898,899,5,105,0,0,899,900,5,110,0,0,900,901, - 5,104,0,0,901,902,5,40,0,0,902,212,1,0,0,0,903,904,5,97,0,0,904,905,5, - 114,0,0,905,906,5,115,0,0,906,907,5,105,0,0,907,908,5,110,0,0,908,909, - 5,104,0,0,909,910,5,40,0,0,910,214,1,0,0,0,911,912,5,97,0,0,912,913,5, - 114,0,0,913,914,5,115,0,0,914,915,5,104,0,0,915,916,5,40,0,0,916,216,1, - 0,0,0,917,918,5,97,0,0,918,919,5,114,0,0,919,920,5,99,0,0,920,921,5,115, - 0,0,921,922,5,105,0,0,922,923,5,110,0,0,923,924,5,104,0,0,924,925,5,40, - 0,0,925,218,1,0,0,0,926,927,5,97,0,0,927,928,5,99,0,0,928,929,5,111,0, - 0,929,930,5,115,0,0,930,931,5,104,0,0,931,932,5,40,0,0,932,220,1,0,0,0, - 933,934,5,97,0,0,934,935,5,114,0,0,935,936,5,99,0,0,936,937,5,111,0,0, - 937,938,5,115,0,0,938,939,5,104,0,0,939,940,5,40,0,0,940,222,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,104,0,0,945, - 946,5,40,0,0,946,224,1,0,0,0,947,948,5,97,0,0,948,949,5,114,0,0,949,950, - 5,99,0,0,950,951,5,99,0,0,951,952,5,111,0,0,952,953,5,115,0,0,953,954, - 5,104,0,0,954,955,5,40,0,0,955,226,1,0,0,0,956,957,5,97,0,0,957,958,5, - 116,0,0,958,959,5,97,0,0,959,960,5,110,0,0,960,961,5,104,0,0,961,962,5, - 40,0,0,962,228,1,0,0,0,963,964,5,97,0,0,964,965,5,114,0,0,965,966,5,116, - 0,0,966,967,5,97,0,0,967,968,5,110,0,0,968,969,5,104,0,0,969,970,5,40, - 0,0,970,230,1,0,0,0,971,972,5,97,0,0,972,973,5,114,0,0,973,974,5,116,0, - 0,974,975,5,104,0,0,975,976,5,40,0,0,976,232,1,0,0,0,977,978,5,97,0,0, - 978,979,5,114,0,0,979,980,5,99,0,0,980,981,5,116,0,0,981,982,5,97,0,0, - 982,983,5,110,0,0,983,984,5,104,0,0,984,985,5,40,0,0,985,234,1,0,0,0,986, - 987,5,97,0,0,987,988,5,99,0,0,988,989,5,111,0,0,989,990,5,116,0,0,990, - 991,5,104,0,0,991,992,5,40,0,0,992,236,1,0,0,0,993,994,5,97,0,0,994,995, - 5,114,0,0,995,996,5,99,0,0,996,997,5,111,0,0,997,998,5,116,0,0,998,999, - 5,104,0,0,999,1000,5,40,0,0,1000,238,1,0,0,0,1001,1002,5,97,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,240,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, - 111,0,0,1014,1015,5,116,0,0,1015,1016,5,97,0,0,1016,1017,5,110,0,0,1017, - 1018,5,104,0,0,1018,1019,5,40,0,0,1019,242,1,0,0,0,1020,1021,5,97,0,0, - 1021,1022,5,114,0,0,1022,1023,5,99,0,0,1023,1024,5,116,0,0,1024,1025,5, - 104,0,0,1025,1026,5,40,0,0,1026,244,1,0,0,0,1027,1028,5,97,0,0,1028,1029, - 5,114,0,0,1029,1030,5,99,0,0,1030,1031,5,99,0,0,1031,1032,5,111,0,0,1032, - 1033,5,116,0,0,1033,1034,5,97,0,0,1034,1035,5,110,0,0,1035,1036,5,104, - 0,0,1036,1037,5,40,0,0,1037,246,1,0,0,0,1038,1039,5,97,0,0,1039,1040,5, - 115,0,0,1040,1041,5,101,0,0,1041,1042,5,99,0,0,1042,1043,5,104,0,0,1043, - 1044,5,40,0,0,1044,248,1,0,0,0,1045,1046,5,97,0,0,1046,1047,5,114,0,0, - 1047,1048,5,115,0,0,1048,1049,5,101,0,0,1049,1050,5,99,0,0,1050,1051,5, - 104,0,0,1051,1052,5,40,0,0,1052,250,1,0,0,0,1053,1054,5,97,0,0,1054,1055, - 5,114,0,0,1055,1056,5,115,0,0,1056,1057,5,99,0,0,1057,1058,5,104,0,0,1058, - 1059,5,40,0,0,1059,252,1,0,0,0,1060,1061,5,97,0,0,1061,1062,5,114,0,0, - 1062,1063,5,99,0,0,1063,1064,5,115,0,0,1064,1065,5,101,0,0,1065,1066,5, - 99,0,0,1066,1067,5,104,0,0,1067,1068,5,40,0,0,1068,254,1,0,0,0,1069,1070, - 5,97,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,256,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,111,0,0,1082,1083,5,115,0,0,1083,1084,5,101,0,0,1084, - 1085,5,99,0,0,1085,1086,5,104,0,0,1086,1087,5,40,0,0,1087,258,1,0,0,0, - 1088,1089,5,97,0,0,1089,1090,5,114,0,0,1090,1091,5,99,0,0,1091,1092,5, - 115,0,0,1092,1093,5,99,0,0,1093,1094,5,104,0,0,1094,1095,5,40,0,0,1095, - 260,1,0,0,0,1096,1097,5,97,0,0,1097,1098,5,114,0,0,1098,1099,5,99,0,0, - 1099,1100,5,99,0,0,1100,1101,5,111,0,0,1101,1102,5,115,0,0,1102,1103,5, - 101,0,0,1103,1104,5,99,0,0,1104,1105,5,104,0,0,1105,1106,5,40,0,0,1106, - 262,1,0,0,0,1107,1108,5,97,0,0,1108,1109,5,99,0,0,1109,1110,5,115,0,0, - 1110,1111,5,99,0,0,1111,1112,5,104,0,0,1112,1113,5,40,0,0,1113,264,1,0, - 0,0,1114,1115,5,102,0,0,1115,1116,5,97,0,0,1116,1117,5,99,0,0,1117,1118, - 5,116,0,0,1118,1119,5,111,0,0,1119,1120,5,114,0,0,1120,1121,5,105,0,0, - 1121,1122,5,97,0,0,1122,1123,5,108,0,0,1123,1124,5,40,0,0,1124,266,1,0, - 0,0,1125,1126,5,103,0,0,1126,1127,5,97,0,0,1127,1128,5,109,0,0,1128,1129, - 5,109,0,0,1129,1130,5,97,0,0,1130,1131,5,40,0,0,1131,268,1,0,0,0,1132, - 1133,5,100,0,0,1133,1134,5,101,0,0,1134,1135,5,114,0,0,1135,1136,5,105, - 0,0,1136,1137,5,118,0,0,1137,1138,5,97,0,0,1138,1139,5,116,0,0,1139,1140, - 5,105,0,0,1140,1141,5,118,0,0,1141,1142,5,101,0,0,1142,1143,5,40,0,0,1143, - 270,1,0,0,0,1144,1145,5,105,0,0,1145,1146,5,110,0,0,1146,1147,5,116,0, - 0,1147,1148,5,101,0,0,1148,1149,5,103,0,0,1149,1150,5,114,0,0,1150,1151, - 5,97,0,0,1151,1152,5,108,0,0,1152,1153,5,40,0,0,1153,272,1,0,0,0,1154, - 1155,5,108,0,0,1155,1156,5,105,0,0,1156,1157,5,109,0,0,1157,1158,5,105, - 0,0,1158,1159,5,116,0,0,1159,1160,5,40,0,0,1160,274,1,0,0,0,1161,1162, - 5,108,0,0,1162,1163,5,105,0,0,1163,1164,5,109,0,0,1164,1165,5,105,0,0, - 1165,1166,5,116,0,0,1166,1167,5,108,0,0,1167,1168,5,101,0,0,1168,1169, - 5,102,0,0,1169,1170,5,116,0,0,1170,1171,5,40,0,0,1171,276,1,0,0,0,1172, - 1173,5,108,0,0,1173,1174,5,105,0,0,1174,1175,5,109,0,0,1175,1176,5,105, - 0,0,1176,1177,5,116,0,0,1177,1178,5,114,0,0,1178,1179,5,105,0,0,1179,1180, - 5,103,0,0,1180,1181,5,104,0,0,1181,1182,5,116,0,0,1182,1183,5,40,0,0,1183, - 278,1,0,0,0,1184,1185,5,115,0,0,1185,1186,5,117,0,0,1186,1187,5,109,0, - 0,1187,1188,5,40,0,0,1188,280,1,0,0,0,1189,1190,5,112,0,0,1190,1191,5, - 114,0,0,1191,1192,5,111,0,0,1192,1193,5,100,0,0,1193,1194,5,117,0,0,1194, - 1195,5,99,0,0,1195,1196,5,116,0,0,1196,1197,5,40,0,0,1197,282,1,0,0,0, - 1198,1199,5,115,0,0,1199,1200,5,105,0,0,1200,1201,5,103,0,0,1201,1202, - 5,110,0,0,1202,1203,5,117,0,0,1203,1204,5,109,0,0,1204,1205,5,40,0,0,1205, - 284,1,0,0,0,1206,1207,5,115,0,0,1207,1208,5,103,0,0,1208,1209,5,110,0, - 0,1209,1210,5,40,0,0,1210,286,1,0,0,0,1211,1212,5,115,0,0,1212,1213,5, - 105,0,0,1213,1214,5,103,0,0,1214,1215,5,110,0,0,1215,1216,5,40,0,0,1216, - 288,1,0,0,0,1217,1218,5,97,0,0,1218,1219,5,98,0,0,1219,1220,5,115,0,0, - 1220,1221,5,40,0,0,1221,290,1,0,0,0,1222,1223,5,112,0,0,1223,1224,5,104, - 0,0,1224,1225,5,105,0,0,1225,1226,5,40,0,0,1226,292,1,0,0,0,1227,1228, - 5,112,0,0,1228,1229,5,114,0,0,1229,1230,5,105,0,0,1230,1231,5,109,0,0, - 1231,1232,5,101,0,0,1232,1233,5,40,0,0,1233,294,1,0,0,0,1234,1235,5,118, - 0,0,1235,1236,5,97,0,0,1236,1237,5,108,0,0,1237,1238,5,117,0,0,1238,1239, - 5,97,0,0,1239,1240,5,116,0,0,1240,1241,5,105,0,0,1241,1242,5,111,0,0,1242, - 1243,5,110,0,0,1243,1244,5,40,0,0,1244,296,1,0,0,0,1245,1246,5,99,0,0, - 1246,1247,5,97,0,0,1247,1248,5,114,0,0,1248,1249,5,100,0,0,1249,1250,5, - 40,0,0,1250,298,1,0,0,0,1251,1252,5,112,0,0,1252,1253,5,111,0,0,1253,1254, - 5,119,0,0,1254,1255,5,101,0,0,1255,1256,5,114,0,0,1256,1257,5,115,0,0, - 1257,1258,5,101,0,0,1258,1259,5,116,0,0,1259,1260,5,40,0,0,1260,300,1, - 0,0,0,1261,1262,5,117,0,0,1262,1263,5,110,0,0,1263,1264,5,105,0,0,1264, - 1265,5,111,0,0,1265,1266,5,110,0,0,1266,1267,5,40,0,0,1267,302,1,0,0,0, - 1268,1269,5,105,0,0,1269,1270,5,110,0,0,1270,1271,5,116,0,0,1271,1272, - 5,101,0,0,1272,1273,5,114,0,0,1273,1274,5,115,0,0,1274,1275,5,101,0,0, - 1275,1276,5,99,0,0,1276,1277,5,116,0,0,1277,1278,5,105,0,0,1278,1279,5, - 111,0,0,1279,1280,5,110,0,0,1280,1281,5,40,0,0,1281,304,1,0,0,0,1282,1283, - 5,99,0,0,1283,1284,5,111,0,0,1284,1285,5,109,0,0,1285,1286,5,112,0,0,1286, - 1287,5,108,0,0,1287,1288,5,101,0,0,1288,1289,5,109,0,0,1289,1290,5,101, - 0,0,1290,1291,5,110,0,0,1291,1292,5,116,0,0,1292,1293,5,40,0,0,1293,306, - 1,0,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,308,1,0,0,0, - 1301,1302,5,112,0,0,1302,1303,5,114,0,0,1303,1304,5,101,0,0,1304,1305, - 5,105,0,0,1305,1306,5,109,0,0,1306,1307,5,97,0,0,1307,1308,5,103,0,0,1308, - 1309,5,101,0,0,1309,1310,5,40,0,0,1310,310,1,0,0,0,1311,1312,5,102,0,0, - 1312,1313,5,108,0,0,1313,1314,5,111,0,0,1314,1315,5,111,0,0,1315,1316, - 5,114,0,0,1316,1317,5,40,0,0,1317,312,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,40, - 0,0,1323,314,1,0,0,0,1324,1325,5,99,0,0,1325,1326,5,101,0,0,1326,1327, - 5,105,0,0,1327,1328,5,108,0,0,1328,1329,5,105,0,0,1329,1330,5,110,0,0, - 1330,1331,5,103,0,0,1331,1332,5,40,0,0,1332,316,1,0,0,0,1333,1334,5,114, - 0,0,1334,1335,5,111,0,0,1335,1336,5,117,0,0,1336,1337,5,110,0,0,1337,1338, - 5,100,0,0,1338,1339,5,40,0,0,1339,318,1,0,0,0,1340,1341,5,109,0,0,1341, - 1342,5,105,0,0,1342,1343,5,110,0,0,1343,1344,5,40,0,0,1344,320,1,0,0,0, - 1345,1346,5,109,0,0,1346,1347,5,97,0,0,1347,1348,5,120,0,0,1348,1349,5, - 40,0,0,1349,322,1,0,0,0,1350,1351,5,97,0,0,1351,1352,5,114,0,0,1352,1353, - 5,103,0,0,1353,1354,5,109,0,0,1354,1355,5,97,0,0,1355,1356,5,120,0,0,1356, - 1357,5,40,0,0,1357,324,1,0,0,0,1358,1359,5,97,0,0,1359,1360,5,114,0,0, - 1360,1361,5,103,0,0,1361,1362,5,109,0,0,1362,1363,5,105,0,0,1363,1364, - 5,110,0,0,1364,1365,5,40,0,0,1365,326,1,0,0,0,1366,1367,5,103,0,0,1367, - 1368,5,99,0,0,1368,1369,5,100,0,0,1369,1370,5,40,0,0,1370,328,1,0,0,0, - 1371,1372,5,108,0,0,1372,1373,5,99,0,0,1373,1374,5,109,0,0,1374,1375,5, - 40,0,0,1375,330,1,0,0,0,1376,1377,5,98,0,0,1377,1378,5,105,0,0,1378,1379, - 5,110,0,0,1379,1380,5,111,0,0,1380,1381,5,109,0,0,1381,1382,5,105,0,0, - 1382,1383,5,97,0,0,1383,1384,5,108,0,0,1384,1385,5,40,0,0,1385,332,1,0, - 0,0,1386,1387,5,105,0,0,1387,1388,5,118,0,0,1388,1389,5,101,0,0,1389,1390, - 5,114,0,0,1390,1391,5,115,0,0,1391,1392,5,111,0,0,1392,1393,5,110,0,0, - 1393,1394,5,40,0,0,1394,334,1,0,0,0,1395,1396,5,97,0,0,1396,1397,5,108, - 0,0,1397,1398,5,101,0,0,1398,1399,5,112,0,0,1399,1400,5,104,0,0,1400,1401, - 5,40,0,0,1401,336,1,0,0,0,1402,1403,5,101,0,0,1403,1404,5,114,0,0,1404, - 1405,5,102,0,0,1405,1406,5,40,0,0,1406,338,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,99,0,0,1411,1412,5, - 40,0,0,1412,340,1,0,0,0,1413,1414,5,101,0,0,1414,1415,5,114,0,0,1415,1416, - 5,102,0,0,1416,1417,5,105,0,0,1417,1418,5,40,0,0,1418,342,1,0,0,0,1419, - 1420,5,69,0,0,1420,1421,5,105,0,0,1421,1422,5,40,0,0,1422,344,1,0,0,0, - 1423,1424,5,108,0,0,1424,1425,5,105,0,0,1425,1426,5,40,0,0,1426,346,1, - 0,0,0,1427,1428,5,112,0,0,1428,1429,5,111,0,0,1429,1430,5,108,0,0,1430, - 1431,5,121,0,0,1431,1432,5,103,0,0,1432,1433,5,97,0,0,1433,1434,5,109, - 0,0,1434,1435,5,109,0,0,1435,1436,5,97,0,0,1436,1437,5,40,0,0,1437,348, - 1,0,0,0,1438,1439,5,100,0,0,1439,1440,5,105,0,0,1440,1441,5,103,0,0,1441, - 1442,5,97,0,0,1442,1443,5,109,0,0,1443,1444,5,109,0,0,1444,1445,5,97,0, - 0,1445,1446,5,40,0,0,1446,350,1,0,0,0,1447,1448,5,83,0,0,1448,1449,5,105, - 0,0,1449,1450,5,40,0,0,1450,352,1,0,0,0,1451,1452,5,67,0,0,1452,1453,5, - 105,0,0,1453,1454,5,40,0,0,1454,354,1,0,0,0,1455,1456,5,83,0,0,1456,1457, - 5,104,0,0,1457,1458,5,105,0,0,1458,1459,5,40,0,0,1459,356,1,0,0,0,1460, - 1461,5,67,0,0,1461,1462,5,104,0,0,1462,1463,5,105,0,0,1463,1464,5,40,0, - 0,1464,358,1,0,0,0,1465,1466,5,116,0,0,1466,1467,5,114,0,0,1467,1468,5, - 117,0,0,1468,1469,5,110,0,0,1469,1470,5,99,0,0,1470,1471,5,40,0,0,1471, - 360,1,0,0,0,1472,1473,5,99,0,0,1473,1474,5,111,0,0,1474,1475,5,110,0,0, - 1475,1476,5,106,0,0,1476,1477,5,117,0,0,1477,1478,5,103,0,0,1478,1479, - 5,97,0,0,1479,1480,5,116,0,0,1480,1481,5,101,0,0,1481,1482,5,40,0,0,1482, - 362,1,0,0,0,1483,1484,5,99,0,0,1484,1485,5,111,0,0,1485,1486,5,110,0,0, - 1486,1487,5,106,0,0,1487,1488,5,40,0,0,1488,364,1,0,0,0,1489,1490,5,97, - 0,0,1490,1491,5,114,0,0,1491,1492,5,103,0,0,1492,1493,5,40,0,0,1493,366, - 1,0,0,0,1494,1495,5,100,0,0,1495,1496,5,101,0,0,1496,1497,5,116,0,0,1497, - 1498,5,40,0,0,1498,368,1,0,0,0,1499,1500,5,100,0,0,1500,1501,5,111,0,0, - 1501,1502,5,109,0,0,1502,1503,5,97,0,0,1503,1504,5,105,0,0,1504,1505,5, - 110,0,0,1505,1506,5,40,0,0,1506,370,1,0,0,0,1507,1508,5,112,0,0,1508,1509, - 5,105,0,0,1509,1510,5,101,0,0,1510,1511,5,99,0,0,1511,1512,5,101,0,0,1512, - 1513,5,119,0,0,1513,1514,5,105,0,0,1514,1515,5,115,0,0,1515,1516,5,101, - 0,0,1516,1517,5,40,0,0,1517,372,1,0,0,0,1518,1519,5,97,0,0,1519,1520,5, - 112,0,0,1520,1521,5,112,0,0,1521,1522,5,108,0,0,1522,1523,5,121,0,0,1523, - 1524,5,40,0,0,1524,374,1,0,0,0,1525,1526,5,108,0,0,1526,1527,5,97,0,0, - 1527,1528,5,109,0,0,1528,1529,5,98,0,0,1529,1530,5,100,0,0,1530,1531,5, - 97,0,0,1531,1532,5,40,0,0,1532,376,1,0,0,0,1533,1535,5,13,0,0,1534,1533, - 1,0,0,0,1534,1535,1,0,0,0,1535,1536,1,0,0,0,1536,1538,5,10,0,0,1537,1534, - 1,0,0,0,1538,1539,1,0,0,0,1539,1537,1,0,0,0,1539,1540,1,0,0,0,1540,1541, - 1,0,0,0,1541,1542,6,188,0,0,1542,378,1,0,0,0,1543,1545,7,0,0,0,1544,1546, - 7,1,0,0,1545,1544,1,0,0,0,1545,1546,1,0,0,0,1546,1548,1,0,0,0,1547,1549, - 2,48,57,0,1548,1547,1,0,0,0,1549,1550,1,0,0,0,1550,1548,1,0,0,0,1550,1551, - 1,0,0,0,1551,380,1,0,0,0,1552,1554,2,48,57,0,1553,1552,1,0,0,0,1554,1555, - 1,0,0,0,1555,1553,1,0,0,0,1555,1556,1,0,0,0,1556,1557,1,0,0,0,1557,1561, - 5,46,0,0,1558,1560,2,48,57,0,1559,1558,1,0,0,0,1560,1563,1,0,0,0,1561, - 1559,1,0,0,0,1561,1562,1,0,0,0,1562,1565,1,0,0,0,1563,1561,1,0,0,0,1564, - 1566,3,379,189,0,1565,1564,1,0,0,0,1565,1566,1,0,0,0,1566,1568,1,0,0,0, - 1567,1569,5,105,0,0,1568,1567,1,0,0,0,1568,1569,1,0,0,0,1569,1586,1,0, - 0,0,1570,1572,5,46,0,0,1571,1570,1,0,0,0,1571,1572,1,0,0,0,1572,1574,1, - 0,0,0,1573,1575,2,48,57,0,1574,1573,1,0,0,0,1575,1576,1,0,0,0,1576,1574, - 1,0,0,0,1576,1577,1,0,0,0,1577,1579,1,0,0,0,1578,1580,3,379,189,0,1579, - 1578,1,0,0,0,1579,1580,1,0,0,0,1580,1582,1,0,0,0,1581,1583,5,105,0,0,1582, - 1581,1,0,0,0,1582,1583,1,0,0,0,1583,1586,1,0,0,0,1584,1586,5,105,0,0,1585, - 1553,1,0,0,0,1585,1571,1,0,0,0,1585,1584,1,0,0,0,1586,382,1,0,0,0,1587, - 1588,5,67,0,0,1588,1606,5,67,0,0,1589,1590,5,82,0,0,1590,1606,5,82,0,0, - 1591,1592,5,81,0,0,1592,1606,5,81,0,0,1593,1594,5,90,0,0,1594,1606,5,90, - 0,0,1595,1596,5,66,0,0,1596,1606,5,66,0,0,1597,1598,5,90,0,0,1598,1599, - 5,90,0,0,1599,1606,5,42,0,0,1600,1601,5,90,0,0,1601,1602,5,90,0,0,1602, - 1606,5,43,0,0,1603,1604,5,80,0,0,1604,1606,5,80,0,0,1605,1587,1,0,0,0, - 1605,1589,1,0,0,0,1605,1591,1,0,0,0,1605,1593,1,0,0,0,1605,1595,1,0,0, - 0,1605,1597,1,0,0,0,1605,1600,1,0,0,0,1605,1603,1,0,0,0,1606,384,1,0,0, - 0,1607,1608,5,116,0,0,1608,1609,5,114,0,0,1609,1610,5,117,0,0,1610,1626, - 5,101,0,0,1611,1612,5,84,0,0,1612,1613,5,114,0,0,1613,1614,5,117,0,0,1614, - 1626,5,101,0,0,1615,1616,5,102,0,0,1616,1617,5,97,0,0,1617,1618,5,108, - 0,0,1618,1619,5,115,0,0,1619,1626,5,101,0,0,1620,1621,5,70,0,0,1621,1622, - 5,97,0,0,1622,1623,5,108,0,0,1623,1624,5,115,0,0,1624,1626,5,101,0,0,1625, - 1607,1,0,0,0,1625,1611,1,0,0,0,1625,1615,1,0,0,0,1625,1620,1,0,0,0,1626, - 386,1,0,0,0,1627,1628,5,78,0,0,1628,1629,5,97,0,0,1629,1630,5,78,0,0,1630, - 388,1,0,0,0,1631,1633,7,2,0,0,1632,1631,1,0,0,0,1633,1634,1,0,0,0,1634, - 1632,1,0,0,0,1634,1635,1,0,0,0,1635,1644,1,0,0,0,1636,1638,5,95,0,0,1637, - 1639,7,3,0,0,1638,1637,1,0,0,0,1639,1640,1,0,0,0,1640,1638,1,0,0,0,1640, - 1641,1,0,0,0,1641,1643,1,0,0,0,1642,1636,1,0,0,0,1643,1646,1,0,0,0,1644, - 1642,1,0,0,0,1644,1645,1,0,0,0,1645,390,1,0,0,0,1646,1644,1,0,0,0,1647, - 1648,5,47,0,0,1648,1649,5,47,0,0,1649,1653,1,0,0,0,1650,1652,8,4,0,0,1651, - 1650,1,0,0,0,1652,1655,1,0,0,0,1653,1651,1,0,0,0,1653,1654,1,0,0,0,1654, - 1660,1,0,0,0,1655,1653,1,0,0,0,1656,1658,5,13,0,0,1657,1656,1,0,0,0,1657, - 1658,1,0,0,0,1658,1659,1,0,0,0,1659,1661,5,10,0,0,1660,1657,1,0,0,0,1660, - 1661,1,0,0,0,1661,1674,1,0,0,0,1662,1663,5,47,0,0,1663,1664,5,42,0,0,1664, - 1668,1,0,0,0,1665,1667,9,0,0,0,1666,1665,1,0,0,0,1667,1670,1,0,0,0,1668, - 1669,1,0,0,0,1668,1666,1,0,0,0,1669,1671,1,0,0,0,1670,1668,1,0,0,0,1671, - 1672,5,42,0,0,1672,1674,5,47,0,0,1673,1647,1,0,0,0,1673,1662,1,0,0,0,1674, - 1675,1,0,0,0,1675,1676,6,195,0,0,1676,392,1,0,0,0,1677,1679,7,5,0,0,1678, - 1677,1,0,0,0,1679,1680,1,0,0,0,1680,1678,1,0,0,0,1680,1681,1,0,0,0,1681, - 1682,1,0,0,0,1682,1683,6,196,0,0,1683,394,1,0,0,0,25,0,1534,1539,1545, - 1550,1555,1561,1565,1568,1571,1576,1579,1582,1585,1605,1625,1634,1640, - 1644,1653,1657,1660,1668,1673,1680,1,6,0,0 + 1,186,1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,1,187,1,188,1,188, + 1,188,1,188,1,188,1,188,1,188,1,188,1,189,1,189,1,189,1,189,1,189,1,189, + 1,189,1,189,1,189,1,189,1,189,1,190,1,190,1,190,1,190,1,190,1,190,1,190, + 1,191,1,191,1,191,1,191,1,191,1,191,1,191,1,191,1,192,3,192,1577,8,192, + 1,192,4,192,1580,8,192,11,192,12,192,1581,1,192,1,192,1,193,1,193,3,193, + 1588,8,193,1,193,4,193,1591,8,193,11,193,12,193,1592,1,194,4,194,1596, + 8,194,11,194,12,194,1597,1,194,1,194,5,194,1602,8,194,10,194,12,194,1605, + 9,194,1,194,3,194,1608,8,194,1,194,3,194,1611,8,194,1,194,3,194,1614,8, + 194,1,194,4,194,1617,8,194,11,194,12,194,1618,1,194,3,194,1622,8,194,1, + 194,3,194,1625,8,194,1,194,3,194,1628,8,194,1,195,1,195,1,195,1,195,1, + 195,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195, + 1,195,1,195,3,195,1648,8,195,1,196,1,196,1,196,1,196,1,196,1,196,1,196, + 1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,3,196, + 1668,8,196,1,197,1,197,1,197,1,197,1,198,4,198,1675,8,198,11,198,12,198, + 1676,1,198,1,198,4,198,1681,8,198,11,198,12,198,1682,5,198,1685,8,198, + 10,198,12,198,1688,9,198,1,199,1,199,1,199,1,199,5,199,1694,8,199,10,199, + 12,199,1697,9,199,1,199,3,199,1700,8,199,1,199,3,199,1703,8,199,1,199, + 1,199,1,199,1,199,5,199,1709,8,199,10,199,12,199,1712,9,199,1,199,1,199, + 3,199,1716,8,199,1,199,1,199,1,200,4,200,1721,8,200,11,200,12,200,1722, + 1,200,1,200,1,1710,0,201,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,187, + 375,188,377,189,379,190,381,191,383,192,385,193,387,0,389,194,391,195, + 393,196,395,197,397,198,399,199,401,200,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,1757,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,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,0,385,1,0,0,0,0,389,1,0,0,0,0,391,1,0,0,0,0,393, + 1,0,0,0,0,395,1,0,0,0,0,397,1,0,0,0,0,399,1,0,0,0,0,401,1,0,0,0,1,403, + 1,0,0,0,3,405,1,0,0,0,5,407,1,0,0,0,7,409,1,0,0,0,9,411,1,0,0,0,11,413, + 1,0,0,0,13,417,1,0,0,0,15,419,1,0,0,0,17,421,1,0,0,0,19,425,1,0,0,0,21, + 435,1,0,0,0,23,438,1,0,0,0,25,444,1,0,0,0,27,447,1,0,0,0,29,459,1,0,0, + 0,31,461,1,0,0,0,33,464,1,0,0,0,35,471,1,0,0,0,37,473,1,0,0,0,39,482,1, + 0,0,0,41,484,1,0,0,0,43,492,1,0,0,0,45,494,1,0,0,0,47,497,1,0,0,0,49,500, + 1,0,0,0,51,502,1,0,0,0,53,504,1,0,0,0,55,506,1,0,0,0,57,509,1,0,0,0,59, + 511,1,0,0,0,61,513,1,0,0,0,63,515,1,0,0,0,65,519,1,0,0,0,67,523,1,0,0, + 0,69,525,1,0,0,0,71,529,1,0,0,0,73,532,1,0,0,0,75,540,1,0,0,0,77,543,1, + 0,0,0,79,552,1,0,0,0,81,555,1,0,0,0,83,557,1,0,0,0,85,564,1,0,0,0,87,566, + 1,0,0,0,89,574,1,0,0,0,91,577,1,0,0,0,93,584,1,0,0,0,95,586,1,0,0,0,97, + 588,1,0,0,0,99,590,1,0,0,0,101,594,1,0,0,0,103,598,1,0,0,0,105,601,1,0, + 0,0,107,604,1,0,0,0,109,606,1,0,0,0,111,608,1,0,0,0,113,611,1,0,0,0,115, + 613,1,0,0,0,117,615,1,0,0,0,119,617,1,0,0,0,121,622,1,0,0,0,123,629,1, + 0,0,0,125,635,1,0,0,0,127,640,1,0,0,0,129,646,1,0,0,0,131,652,1,0,0,0, + 133,657,1,0,0,0,135,661,1,0,0,0,137,666,1,0,0,0,139,671,1,0,0,0,141,676, + 1,0,0,0,143,681,1,0,0,0,145,688,1,0,0,0,147,693,1,0,0,0,149,698,1,0,0, + 0,151,705,1,0,0,0,153,710,1,0,0,0,155,718,1,0,0,0,157,726,1,0,0,0,159, + 734,1,0,0,0,161,744,1,0,0,0,163,752,1,0,0,0,165,762,1,0,0,0,167,770,1, + 0,0,0,169,776,1,0,0,0,171,782,1,0,0,0,173,788,1,0,0,0,175,794,1,0,0,0, + 177,802,1,0,0,0,179,808,1,0,0,0,181,816,1,0,0,0,183,822,1,0,0,0,185,830, + 1,0,0,0,187,836,1,0,0,0,189,840,1,0,0,0,191,846,1,0,0,0,193,850,1,0,0, + 0,195,856,1,0,0,0,197,860,1,0,0,0,199,868,1,0,0,0,201,874,1,0,0,0,203, + 879,1,0,0,0,205,885,1,0,0,0,207,890,1,0,0,0,209,898,1,0,0,0,211,904,1, + 0,0,0,213,911,1,0,0,0,215,919,1,0,0,0,217,925,1,0,0,0,219,934,1,0,0,0, + 221,941,1,0,0,0,223,949,1,0,0,0,225,955,1,0,0,0,227,964,1,0,0,0,229,971, + 1,0,0,0,231,979,1,0,0,0,233,985,1,0,0,0,235,994,1,0,0,0,237,1001,1,0,0, + 0,239,1009,1,0,0,0,241,1018,1,0,0,0,243,1028,1,0,0,0,245,1035,1,0,0,0, + 247,1046,1,0,0,0,249,1053,1,0,0,0,251,1061,1,0,0,0,253,1068,1,0,0,0,255, + 1077,1,0,0,0,257,1086,1,0,0,0,259,1096,1,0,0,0,261,1104,1,0,0,0,263,1115, + 1,0,0,0,265,1122,1,0,0,0,267,1133,1,0,0,0,269,1140,1,0,0,0,271,1152,1, + 0,0,0,273,1162,1,0,0,0,275,1169,1,0,0,0,277,1180,1,0,0,0,279,1192,1,0, + 0,0,281,1197,1,0,0,0,283,1206,1,0,0,0,285,1214,1,0,0,0,287,1219,1,0,0, + 0,289,1225,1,0,0,0,291,1230,1,0,0,0,293,1235,1,0,0,0,295,1242,1,0,0,0, + 297,1253,1,0,0,0,299,1259,1,0,0,0,301,1269,1,0,0,0,303,1276,1,0,0,0,305, + 1290,1,0,0,0,307,1302,1,0,0,0,309,1309,1,0,0,0,311,1319,1,0,0,0,313,1326, + 1,0,0,0,315,1332,1,0,0,0,317,1341,1,0,0,0,319,1348,1,0,0,0,321,1353,1, + 0,0,0,323,1358,1,0,0,0,325,1366,1,0,0,0,327,1374,1,0,0,0,329,1379,1,0, + 0,0,331,1384,1,0,0,0,333,1394,1,0,0,0,335,1403,1,0,0,0,337,1410,1,0,0, + 0,339,1415,1,0,0,0,341,1421,1,0,0,0,343,1427,1,0,0,0,345,1431,1,0,0,0, + 347,1435,1,0,0,0,349,1446,1,0,0,0,351,1455,1,0,0,0,353,1459,1,0,0,0,355, + 1463,1,0,0,0,357,1468,1,0,0,0,359,1473,1,0,0,0,361,1478,1,0,0,0,363,1489, + 1,0,0,0,365,1494,1,0,0,0,367,1501,1,0,0,0,369,1512,1,0,0,0,371,1519,1, + 0,0,0,373,1530,1,0,0,0,375,1536,1,0,0,0,377,1541,1,0,0,0,379,1549,1,0, + 0,0,381,1560,1,0,0,0,383,1567,1,0,0,0,385,1579,1,0,0,0,387,1585,1,0,0, + 0,389,1627,1,0,0,0,391,1647,1,0,0,0,393,1667,1,0,0,0,395,1669,1,0,0,0, + 397,1674,1,0,0,0,399,1715,1,0,0,0,401,1720,1,0,0,0,403,404,5,33,0,0,404, + 2,1,0,0,0,405,406,5,94,0,0,406,4,1,0,0,0,407,408,5,45,0,0,408,6,1,0,0, + 0,409,410,5,43,0,0,410,8,1,0,0,0,411,412,5,42,0,0,412,10,1,0,0,0,413,414, + 5,46,0,0,414,415,5,46,0,0,415,416,5,46,0,0,416,12,1,0,0,0,417,418,5,8230, + 0,0,418,14,1,0,0,0,419,420,5,47,0,0,420,16,1,0,0,0,421,422,5,109,0,0,422, + 423,5,111,0,0,423,424,5,100,0,0,424,18,1,0,0,0,425,426,5,105,0,0,426,427, + 5,110,0,0,427,428,5,116,0,0,428,429,5,101,0,0,429,430,5,114,0,0,430,431, + 5,115,0,0,431,432,5,101,0,0,432,433,5,99,0,0,433,434,5,116,0,0,434,20, + 1,0,0,0,435,436,5,47,0,0,436,437,5,92,0,0,437,22,1,0,0,0,438,439,5,117, + 0,0,439,440,5,110,0,0,440,441,5,105,0,0,441,442,5,116,0,0,442,443,5,101, + 0,0,443,24,1,0,0,0,444,445,5,92,0,0,445,446,5,47,0,0,446,26,1,0,0,0,447, + 448,5,115,0,0,448,449,5,101,0,0,449,450,5,116,0,0,450,451,5,115,0,0,451, + 452,5,117,0,0,452,453,5,98,0,0,453,454,5,116,0,0,454,455,5,114,0,0,455, + 456,5,97,0,0,456,457,5,99,0,0,457,458,5,116,0,0,458,28,1,0,0,0,459,460, + 5,92,0,0,460,30,1,0,0,0,461,462,5,105,0,0,462,463,5,110,0,0,463,32,1,0, + 0,0,464,465,5,115,0,0,465,466,5,117,0,0,466,467,5,98,0,0,467,468,5,115, + 0,0,468,469,5,101,0,0,469,470,5,116,0,0,470,34,1,0,0,0,471,472,5,8838, + 0,0,472,36,1,0,0,0,473,474,5,115,0,0,474,475,5,117,0,0,475,476,5,112,0, + 0,476,477,5,101,0,0,477,478,5,114,0,0,478,479,5,115,0,0,479,480,5,101, + 0,0,480,481,5,116,0,0,481,38,1,0,0,0,482,483,5,8839,0,0,483,40,1,0,0,0, + 484,485,5,100,0,0,485,486,5,105,0,0,486,487,5,118,0,0,487,488,5,105,0, + 0,488,489,5,100,0,0,489,490,5,101,0,0,490,491,5,115,0,0,491,42,1,0,0,0, + 492,493,5,124,0,0,493,44,1,0,0,0,494,495,5,62,0,0,495,496,5,61,0,0,496, + 46,1,0,0,0,497,498,5,60,0,0,498,499,5,61,0,0,499,48,1,0,0,0,500,501,5, + 62,0,0,501,50,1,0,0,0,502,503,5,60,0,0,503,52,1,0,0,0,504,505,5,61,0,0, + 505,54,1,0,0,0,506,507,5,60,0,0,507,508,5,62,0,0,508,56,1,0,0,0,509,510, + 5,8801,0,0,510,58,1,0,0,0,511,512,5,40,0,0,512,60,1,0,0,0,513,514,5,41, + 0,0,514,62,1,0,0,0,515,516,5,110,0,0,516,517,5,111,0,0,517,518,5,116,0, + 0,518,64,1,0,0,0,519,520,5,97,0,0,520,521,5,110,0,0,521,522,5,100,0,0, + 522,66,1,0,0,0,523,524,5,38,0,0,524,68,1,0,0,0,525,526,5,120,0,0,526,527, + 5,111,0,0,527,528,5,114,0,0,528,70,1,0,0,0,529,530,5,111,0,0,530,531,5, + 114,0,0,531,72,1,0,0,0,532,533,5,105,0,0,533,534,5,109,0,0,534,535,5,112, + 0,0,535,536,5,108,0,0,536,537,5,105,0,0,537,538,5,101,0,0,538,539,5,115, + 0,0,539,74,1,0,0,0,540,541,5,45,0,0,541,542,5,62,0,0,542,76,1,0,0,0,543, + 544,5,112,0,0,544,545,5,114,0,0,545,546,5,111,0,0,546,547,5,118,0,0,547, + 548,5,105,0,0,548,549,5,100,0,0,549,550,5,101,0,0,550,551,5,100,0,0,551, + 78,1,0,0,0,552,553,5,61,0,0,553,554,5,62,0,0,554,80,1,0,0,0,555,556,5, + 58,0,0,556,82,1,0,0,0,557,558,5,102,0,0,558,559,5,111,0,0,559,560,5,114, + 0,0,560,561,5,97,0,0,561,562,5,108,0,0,562,563,5,108,0,0,563,84,1,0,0, + 0,564,565,5,8704,0,0,565,86,1,0,0,0,566,567,5,101,0,0,567,568,5,120,0, + 0,568,569,5,105,0,0,569,570,5,115,0,0,570,571,5,116,0,0,571,572,5,115, + 0,0,572,573,5,33,0,0,573,88,1,0,0,0,574,575,5,8707,0,0,575,576,5,33,0, + 0,576,90,1,0,0,0,577,578,5,101,0,0,578,579,5,120,0,0,579,580,5,105,0,0, + 580,581,5,115,0,0,581,582,5,116,0,0,582,583,5,115,0,0,583,92,1,0,0,0,584, + 585,5,8707,0,0,585,94,1,0,0,0,586,587,5,44,0,0,587,96,1,0,0,0,588,589, + 5,59,0,0,589,98,1,0,0,0,590,591,5,43,0,0,591,592,5,111,0,0,592,593,5,111, + 0,0,593,100,1,0,0,0,594,595,5,45,0,0,595,596,5,111,0,0,596,597,5,111,0, + 0,597,102,1,0,0,0,598,599,5,40,0,0,599,600,5,124,0,0,600,104,1,0,0,0,601, + 602,5,124,0,0,602,603,5,41,0,0,603,106,1,0,0,0,604,605,5,35,0,0,605,108, + 1,0,0,0,606,607,5,91,0,0,607,110,1,0,0,0,608,609,5,93,0,0,609,610,5,84, + 0,0,610,112,1,0,0,0,611,612,5,93,0,0,612,114,1,0,0,0,613,614,5,123,0,0, + 614,116,1,0,0,0,615,616,5,125,0,0,616,118,1,0,0,0,617,618,5,108,0,0,618, + 619,5,111,0,0,619,620,5,103,0,0,620,621,5,40,0,0,621,120,1,0,0,0,622,623, + 5,108,0,0,623,624,5,111,0,0,624,625,5,103,0,0,625,626,5,49,0,0,626,627, + 5,48,0,0,627,628,5,40,0,0,628,122,1,0,0,0,629,630,5,108,0,0,630,631,5, + 111,0,0,631,632,5,103,0,0,632,633,5,50,0,0,633,634,5,40,0,0,634,124,1, + 0,0,0,635,636,5,112,0,0,636,637,5,111,0,0,637,638,5,119,0,0,638,639,5, + 40,0,0,639,126,1,0,0,0,640,641,5,115,0,0,641,642,5,113,0,0,642,643,5,114, + 0,0,643,644,5,116,0,0,644,645,5,40,0,0,645,128,1,0,0,0,646,647,5,99,0, + 0,647,648,5,98,0,0,648,649,5,114,0,0,649,650,5,116,0,0,650,651,5,40,0, + 0,651,130,1,0,0,0,652,653,5,115,0,0,653,654,5,113,0,0,654,655,5,114,0, + 0,655,656,5,40,0,0,656,132,1,0,0,0,657,658,5,108,0,0,658,659,5,110,0,0, + 659,660,5,40,0,0,660,134,1,0,0,0,661,662,5,101,0,0,662,663,5,120,0,0,663, + 664,5,112,0,0,664,665,5,40,0,0,665,136,1,0,0,0,666,667,5,115,0,0,667,668, + 5,105,0,0,668,669,5,110,0,0,669,670,5,40,0,0,670,138,1,0,0,0,671,672,5, + 99,0,0,672,673,5,111,0,0,673,674,5,115,0,0,674,675,5,40,0,0,675,140,1, + 0,0,0,676,677,5,116,0,0,677,678,5,97,0,0,678,679,5,110,0,0,679,680,5,40, + 0,0,680,142,1,0,0,0,681,682,5,99,0,0,682,683,5,111,0,0,683,684,5,116,0, + 0,684,685,5,97,0,0,685,686,5,110,0,0,686,687,5,40,0,0,687,144,1,0,0,0, + 688,689,5,99,0,0,689,690,5,111,0,0,690,691,5,116,0,0,691,692,5,40,0,0, + 692,146,1,0,0,0,693,694,5,115,0,0,694,695,5,101,0,0,695,696,5,99,0,0,696, + 697,5,40,0,0,697,148,1,0,0,0,698,699,5,99,0,0,699,700,5,111,0,0,700,701, + 5,115,0,0,701,702,5,101,0,0,702,703,5,99,0,0,703,704,5,40,0,0,704,150, + 1,0,0,0,705,706,5,99,0,0,706,707,5,115,0,0,707,708,5,99,0,0,708,709,5, + 40,0,0,709,152,1,0,0,0,710,711,5,97,0,0,711,712,5,114,0,0,712,713,5,99, + 0,0,713,714,5,115,0,0,714,715,5,105,0,0,715,716,5,110,0,0,716,717,5,40, + 0,0,717,154,1,0,0,0,718,719,5,97,0,0,719,720,5,114,0,0,720,721,5,99,0, + 0,721,722,5,99,0,0,722,723,5,111,0,0,723,724,5,115,0,0,724,725,5,40,0, + 0,725,156,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,116,0,0,730,731,5,97,0,0,731,732,5,110,0,0,732,733,5,40,0,0, + 733,158,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,116,0,0,740,741,5,97,0,0,741, + 742,5,110,0,0,742,743,5,40,0,0,743,160,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,115,0,0,748,749,5,101,0,0,749,750, + 5,99,0,0,750,751,5,40,0,0,751,162,1,0,0,0,752,753,5,97,0,0,753,754,5,114, + 0,0,754,755,5,99,0,0,755,756,5,99,0,0,756,757,5,111,0,0,757,758,5,115, + 0,0,758,759,5,101,0,0,759,760,5,99,0,0,760,761,5,40,0,0,761,164,1,0,0, + 0,762,763,5,97,0,0,763,764,5,114,0,0,764,765,5,99,0,0,765,766,5,99,0,0, + 766,767,5,115,0,0,767,768,5,99,0,0,768,769,5,40,0,0,769,166,1,0,0,0,770, + 771,5,97,0,0,771,772,5,99,0,0,772,773,5,115,0,0,773,774,5,99,0,0,774,775, + 5,40,0,0,775,168,1,0,0,0,776,777,5,97,0,0,777,778,5,115,0,0,778,779,5, + 105,0,0,779,780,5,110,0,0,780,781,5,40,0,0,781,170,1,0,0,0,782,783,5,97, + 0,0,783,784,5,99,0,0,784,785,5,111,0,0,785,786,5,115,0,0,786,787,5,40, + 0,0,787,172,1,0,0,0,788,789,5,97,0,0,789,790,5,116,0,0,790,791,5,97,0, + 0,791,792,5,110,0,0,792,793,5,40,0,0,793,174,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,116,0,0,798,799,5,97,0,0, + 799,800,5,110,0,0,800,801,5,40,0,0,801,176,1,0,0,0,802,803,5,97,0,0,803, + 804,5,115,0,0,804,805,5,101,0,0,805,806,5,99,0,0,806,807,5,40,0,0,807, + 178,1,0,0,0,808,809,5,97,0,0,809,810,5,99,0,0,810,811,5,111,0,0,811,812, + 5,115,0,0,812,813,5,101,0,0,813,814,5,99,0,0,814,815,5,40,0,0,815,180, + 1,0,0,0,816,817,5,97,0,0,817,818,5,99,0,0,818,819,5,111,0,0,819,820,5, + 116,0,0,820,821,5,40,0,0,821,182,1,0,0,0,822,823,5,97,0,0,823,824,5,114, + 0,0,824,825,5,99,0,0,825,826,5,99,0,0,826,827,5,111,0,0,827,828,5,116, + 0,0,828,829,5,40,0,0,829,184,1,0,0,0,830,831,5,115,0,0,831,832,5,105,0, + 0,832,833,5,110,0,0,833,834,5,104,0,0,834,835,5,40,0,0,835,186,1,0,0,0, + 836,837,5,115,0,0,837,838,5,104,0,0,838,839,5,40,0,0,839,188,1,0,0,0,840, + 841,5,99,0,0,841,842,5,111,0,0,842,843,5,115,0,0,843,844,5,104,0,0,844, + 845,5,40,0,0,845,190,1,0,0,0,846,847,5,99,0,0,847,848,5,104,0,0,848,849, + 5,40,0,0,849,192,1,0,0,0,850,851,5,116,0,0,851,852,5,97,0,0,852,853,5, + 110,0,0,853,854,5,104,0,0,854,855,5,40,0,0,855,194,1,0,0,0,856,857,5,116, + 0,0,857,858,5,104,0,0,858,859,5,40,0,0,859,196,1,0,0,0,860,861,5,99,0, + 0,861,862,5,111,0,0,862,863,5,116,0,0,863,864,5,97,0,0,864,865,5,110,0, + 0,865,866,5,104,0,0,866,867,5,40,0,0,867,198,1,0,0,0,868,869,5,99,0,0, + 869,870,5,111,0,0,870,871,5,116,0,0,871,872,5,104,0,0,872,873,5,40,0,0, + 873,200,1,0,0,0,874,875,5,99,0,0,875,876,5,116,0,0,876,877,5,104,0,0,877, + 878,5,40,0,0,878,202,1,0,0,0,879,880,5,115,0,0,880,881,5,101,0,0,881,882, + 5,99,0,0,882,883,5,104,0,0,883,884,5,40,0,0,884,204,1,0,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,206,1, + 0,0,0,890,891,5,99,0,0,891,892,5,111,0,0,892,893,5,115,0,0,893,894,5,101, + 0,0,894,895,5,99,0,0,895,896,5,104,0,0,896,897,5,40,0,0,897,208,1,0,0, + 0,898,899,5,99,0,0,899,900,5,115,0,0,900,901,5,99,0,0,901,902,5,104,0, + 0,902,903,5,40,0,0,903,210,1,0,0,0,904,905,5,97,0,0,905,906,5,115,0,0, + 906,907,5,105,0,0,907,908,5,110,0,0,908,909,5,104,0,0,909,910,5,40,0,0, + 910,212,1,0,0,0,911,912,5,97,0,0,912,913,5,114,0,0,913,914,5,115,0,0,914, + 915,5,105,0,0,915,916,5,110,0,0,916,917,5,104,0,0,917,918,5,40,0,0,918, + 214,1,0,0,0,919,920,5,97,0,0,920,921,5,114,0,0,921,922,5,115,0,0,922,923, + 5,104,0,0,923,924,5,40,0,0,924,216,1,0,0,0,925,926,5,97,0,0,926,927,5, + 114,0,0,927,928,5,99,0,0,928,929,5,115,0,0,929,930,5,105,0,0,930,931,5, + 110,0,0,931,932,5,104,0,0,932,933,5,40,0,0,933,218,1,0,0,0,934,935,5,97, + 0,0,935,936,5,99,0,0,936,937,5,111,0,0,937,938,5,115,0,0,938,939,5,104, + 0,0,939,940,5,40,0,0,940,220,1,0,0,0,941,942,5,97,0,0,942,943,5,114,0, + 0,943,944,5,99,0,0,944,945,5,111,0,0,945,946,5,115,0,0,946,947,5,104,0, + 0,947,948,5,40,0,0,948,222,1,0,0,0,949,950,5,97,0,0,950,951,5,114,0,0, + 951,952,5,99,0,0,952,953,5,104,0,0,953,954,5,40,0,0,954,224,1,0,0,0,955, + 956,5,97,0,0,956,957,5,114,0,0,957,958,5,99,0,0,958,959,5,99,0,0,959,960, + 5,111,0,0,960,961,5,115,0,0,961,962,5,104,0,0,962,963,5,40,0,0,963,226, + 1,0,0,0,964,965,5,97,0,0,965,966,5,116,0,0,966,967,5,97,0,0,967,968,5, + 110,0,0,968,969,5,104,0,0,969,970,5,40,0,0,970,228,1,0,0,0,971,972,5,97, + 0,0,972,973,5,114,0,0,973,974,5,116,0,0,974,975,5,97,0,0,975,976,5,110, + 0,0,976,977,5,104,0,0,977,978,5,40,0,0,978,230,1,0,0,0,979,980,5,97,0, + 0,980,981,5,114,0,0,981,982,5,116,0,0,982,983,5,104,0,0,983,984,5,40,0, + 0,984,232,1,0,0,0,985,986,5,97,0,0,986,987,5,114,0,0,987,988,5,99,0,0, + 988,989,5,116,0,0,989,990,5,97,0,0,990,991,5,110,0,0,991,992,5,104,0,0, + 992,993,5,40,0,0,993,234,1,0,0,0,994,995,5,97,0,0,995,996,5,99,0,0,996, + 997,5,111,0,0,997,998,5,116,0,0,998,999,5,104,0,0,999,1000,5,40,0,0,1000, + 236,1,0,0,0,1001,1002,5,97,0,0,1002,1003,5,114,0,0,1003,1004,5,99,0,0, + 1004,1005,5,111,0,0,1005,1006,5,116,0,0,1006,1007,5,104,0,0,1007,1008, + 5,40,0,0,1008,238,1,0,0,0,1009,1010,5,97,0,0,1010,1011,5,99,0,0,1011,1012, + 5,111,0,0,1012,1013,5,116,0,0,1013,1014,5,97,0,0,1014,1015,5,110,0,0,1015, + 1016,5,104,0,0,1016,1017,5,40,0,0,1017,240,1,0,0,0,1018,1019,5,97,0,0, + 1019,1020,5,114,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,242,1,0,0,0,1028,1029,5,97,0,0,1029,1030,5,114,0,0, + 1030,1031,5,99,0,0,1031,1032,5,116,0,0,1032,1033,5,104,0,0,1033,1034,5, + 40,0,0,1034,244,1,0,0,0,1035,1036,5,97,0,0,1036,1037,5,114,0,0,1037,1038, + 5,99,0,0,1038,1039,5,99,0,0,1039,1040,5,111,0,0,1040,1041,5,116,0,0,1041, + 1042,5,97,0,0,1042,1043,5,110,0,0,1043,1044,5,104,0,0,1044,1045,5,40,0, + 0,1045,246,1,0,0,0,1046,1047,5,97,0,0,1047,1048,5,115,0,0,1048,1049,5, + 101,0,0,1049,1050,5,99,0,0,1050,1051,5,104,0,0,1051,1052,5,40,0,0,1052, + 248,1,0,0,0,1053,1054,5,97,0,0,1054,1055,5,114,0,0,1055,1056,5,115,0,0, + 1056,1057,5,101,0,0,1057,1058,5,99,0,0,1058,1059,5,104,0,0,1059,1060,5, + 40,0,0,1060,250,1,0,0,0,1061,1062,5,97,0,0,1062,1063,5,114,0,0,1063,1064, + 5,115,0,0,1064,1065,5,99,0,0,1065,1066,5,104,0,0,1066,1067,5,40,0,0,1067, + 252,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,115,0,0,1072,1073,5,101,0,0,1073,1074,5,99,0,0,1074,1075,5, + 104,0,0,1075,1076,5,40,0,0,1076,254,1,0,0,0,1077,1078,5,97,0,0,1078,1079, + 5,99,0,0,1079,1080,5,111,0,0,1080,1081,5,115,0,0,1081,1082,5,101,0,0,1082, + 1083,5,99,0,0,1083,1084,5,104,0,0,1084,1085,5,40,0,0,1085,256,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, + 111,0,0,1090,1091,5,115,0,0,1091,1092,5,101,0,0,1092,1093,5,99,0,0,1093, + 1094,5,104,0,0,1094,1095,5,40,0,0,1095,258,1,0,0,0,1096,1097,5,97,0,0, + 1097,1098,5,114,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,260,1,0,0,0,1104,1105, + 5,97,0,0,1105,1106,5,114,0,0,1106,1107,5,99,0,0,1107,1108,5,99,0,0,1108, + 1109,5,111,0,0,1109,1110,5,115,0,0,1110,1111,5,101,0,0,1111,1112,5,99, + 0,0,1112,1113,5,104,0,0,1113,1114,5,40,0,0,1114,262,1,0,0,0,1115,1116, + 5,97,0,0,1116,1117,5,99,0,0,1117,1118,5,115,0,0,1118,1119,5,99,0,0,1119, + 1120,5,104,0,0,1120,1121,5,40,0,0,1121,264,1,0,0,0,1122,1123,5,102,0,0, + 1123,1124,5,97,0,0,1124,1125,5,99,0,0,1125,1126,5,116,0,0,1126,1127,5, + 111,0,0,1127,1128,5,114,0,0,1128,1129,5,105,0,0,1129,1130,5,97,0,0,1130, + 1131,5,108,0,0,1131,1132,5,40,0,0,1132,266,1,0,0,0,1133,1134,5,103,0,0, + 1134,1135,5,97,0,0,1135,1136,5,109,0,0,1136,1137,5,109,0,0,1137,1138,5, + 97,0,0,1138,1139,5,40,0,0,1139,268,1,0,0,0,1140,1141,5,100,0,0,1141,1142, + 5,101,0,0,1142,1143,5,114,0,0,1143,1144,5,105,0,0,1144,1145,5,118,0,0, + 1145,1146,5,97,0,0,1146,1147,5,116,0,0,1147,1148,5,105,0,0,1148,1149,5, + 118,0,0,1149,1150,5,101,0,0,1150,1151,5,40,0,0,1151,270,1,0,0,0,1152,1153, + 5,105,0,0,1153,1154,5,110,0,0,1154,1155,5,116,0,0,1155,1156,5,101,0,0, + 1156,1157,5,103,0,0,1157,1158,5,114,0,0,1158,1159,5,97,0,0,1159,1160,5, + 108,0,0,1160,1161,5,40,0,0,1161,272,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,40,0,0,1168,274,1,0,0,0,1169,1170,5,108,0,0,1170,1171,5,105, + 0,0,1171,1172,5,109,0,0,1172,1173,5,105,0,0,1173,1174,5,116,0,0,1174,1175, + 5,108,0,0,1175,1176,5,101,0,0,1176,1177,5,102,0,0,1177,1178,5,116,0,0, + 1178,1179,5,40,0,0,1179,276,1,0,0,0,1180,1181,5,108,0,0,1181,1182,5,105, + 0,0,1182,1183,5,109,0,0,1183,1184,5,105,0,0,1184,1185,5,116,0,0,1185,1186, + 5,114,0,0,1186,1187,5,105,0,0,1187,1188,5,103,0,0,1188,1189,5,104,0,0, + 1189,1190,5,116,0,0,1190,1191,5,40,0,0,1191,278,1,0,0,0,1192,1193,5,115, + 0,0,1193,1194,5,117,0,0,1194,1195,5,109,0,0,1195,1196,5,40,0,0,1196,280, + 1,0,0,0,1197,1198,5,112,0,0,1198,1199,5,114,0,0,1199,1200,5,111,0,0,1200, + 1201,5,100,0,0,1201,1202,5,117,0,0,1202,1203,5,99,0,0,1203,1204,5,116, + 0,0,1204,1205,5,40,0,0,1205,282,1,0,0,0,1206,1207,5,115,0,0,1207,1208, + 5,105,0,0,1208,1209,5,103,0,0,1209,1210,5,110,0,0,1210,1211,5,117,0,0, + 1211,1212,5,109,0,0,1212,1213,5,40,0,0,1213,284,1,0,0,0,1214,1215,5,115, + 0,0,1215,1216,5,103,0,0,1216,1217,5,110,0,0,1217,1218,5,40,0,0,1218,286, + 1,0,0,0,1219,1220,5,115,0,0,1220,1221,5,105,0,0,1221,1222,5,103,0,0,1222, + 1223,5,110,0,0,1223,1224,5,40,0,0,1224,288,1,0,0,0,1225,1226,5,97,0,0, + 1226,1227,5,98,0,0,1227,1228,5,115,0,0,1228,1229,5,40,0,0,1229,290,1,0, + 0,0,1230,1231,5,112,0,0,1231,1232,5,104,0,0,1232,1233,5,105,0,0,1233,1234, + 5,40,0,0,1234,292,1,0,0,0,1235,1236,5,112,0,0,1236,1237,5,114,0,0,1237, + 1238,5,105,0,0,1238,1239,5,109,0,0,1239,1240,5,101,0,0,1240,1241,5,40, + 0,0,1241,294,1,0,0,0,1242,1243,5,118,0,0,1243,1244,5,97,0,0,1244,1245, + 5,108,0,0,1245,1246,5,117,0,0,1246,1247,5,97,0,0,1247,1248,5,116,0,0,1248, + 1249,5,105,0,0,1249,1250,5,111,0,0,1250,1251,5,110,0,0,1251,1252,5,40, + 0,0,1252,296,1,0,0,0,1253,1254,5,99,0,0,1254,1255,5,97,0,0,1255,1256,5, + 114,0,0,1256,1257,5,100,0,0,1257,1258,5,40,0,0,1258,298,1,0,0,0,1259,1260, + 5,112,0,0,1260,1261,5,111,0,0,1261,1262,5,119,0,0,1262,1263,5,101,0,0, + 1263,1264,5,114,0,0,1264,1265,5,115,0,0,1265,1266,5,101,0,0,1266,1267, + 5,116,0,0,1267,1268,5,40,0,0,1268,300,1,0,0,0,1269,1270,5,117,0,0,1270, + 1271,5,110,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,302,1,0,0,0,1276,1277,5,105,0,0,1277,1278, + 5,110,0,0,1278,1279,5,116,0,0,1279,1280,5,101,0,0,1280,1281,5,114,0,0, + 1281,1282,5,115,0,0,1282,1283,5,101,0,0,1283,1284,5,99,0,0,1284,1285,5, + 116,0,0,1285,1286,5,105,0,0,1286,1287,5,111,0,0,1287,1288,5,110,0,0,1288, + 1289,5,40,0,0,1289,304,1,0,0,0,1290,1291,5,99,0,0,1291,1292,5,111,0,0, + 1292,1293,5,109,0,0,1293,1294,5,112,0,0,1294,1295,5,108,0,0,1295,1296, + 5,101,0,0,1296,1297,5,109,0,0,1297,1298,5,101,0,0,1298,1299,5,110,0,0, + 1299,1300,5,116,0,0,1300,1301,5,40,0,0,1301,306,1,0,0,0,1302,1303,5,105, + 0,0,1303,1304,5,109,0,0,1304,1305,5,97,0,0,1305,1306,5,103,0,0,1306,1307, + 5,101,0,0,1307,1308,5,40,0,0,1308,308,1,0,0,0,1309,1310,5,112,0,0,1310, + 1311,5,114,0,0,1311,1312,5,101,0,0,1312,1313,5,105,0,0,1313,1314,5,109, + 0,0,1314,1315,5,97,0,0,1315,1316,5,103,0,0,1316,1317,5,101,0,0,1317,1318, + 5,40,0,0,1318,310,1,0,0,0,1319,1320,5,102,0,0,1320,1321,5,108,0,0,1321, + 1322,5,111,0,0,1322,1323,5,111,0,0,1323,1324,5,114,0,0,1324,1325,5,40, + 0,0,1325,312,1,0,0,0,1326,1327,5,99,0,0,1327,1328,5,101,0,0,1328,1329, + 5,105,0,0,1329,1330,5,108,0,0,1330,1331,5,40,0,0,1331,314,1,0,0,0,1332, + 1333,5,99,0,0,1333,1334,5,101,0,0,1334,1335,5,105,0,0,1335,1336,5,108, + 0,0,1336,1337,5,105,0,0,1337,1338,5,110,0,0,1338,1339,5,103,0,0,1339,1340, + 5,40,0,0,1340,316,1,0,0,0,1341,1342,5,114,0,0,1342,1343,5,111,0,0,1343, + 1344,5,117,0,0,1344,1345,5,110,0,0,1345,1346,5,100,0,0,1346,1347,5,40, + 0,0,1347,318,1,0,0,0,1348,1349,5,109,0,0,1349,1350,5,105,0,0,1350,1351, + 5,110,0,0,1351,1352,5,40,0,0,1352,320,1,0,0,0,1353,1354,5,109,0,0,1354, + 1355,5,97,0,0,1355,1356,5,120,0,0,1356,1357,5,40,0,0,1357,322,1,0,0,0, + 1358,1359,5,97,0,0,1359,1360,5,114,0,0,1360,1361,5,103,0,0,1361,1362,5, + 109,0,0,1362,1363,5,97,0,0,1363,1364,5,120,0,0,1364,1365,5,40,0,0,1365, + 324,1,0,0,0,1366,1367,5,97,0,0,1367,1368,5,114,0,0,1368,1369,5,103,0,0, + 1369,1370,5,109,0,0,1370,1371,5,105,0,0,1371,1372,5,110,0,0,1372,1373, + 5,40,0,0,1373,326,1,0,0,0,1374,1375,5,103,0,0,1375,1376,5,99,0,0,1376, + 1377,5,100,0,0,1377,1378,5,40,0,0,1378,328,1,0,0,0,1379,1380,5,108,0,0, + 1380,1381,5,99,0,0,1381,1382,5,109,0,0,1382,1383,5,40,0,0,1383,330,1,0, + 0,0,1384,1385,5,98,0,0,1385,1386,5,105,0,0,1386,1387,5,110,0,0,1387,1388, + 5,111,0,0,1388,1389,5,109,0,0,1389,1390,5,105,0,0,1390,1391,5,97,0,0,1391, + 1392,5,108,0,0,1392,1393,5,40,0,0,1393,332,1,0,0,0,1394,1395,5,105,0,0, + 1395,1396,5,118,0,0,1396,1397,5,101,0,0,1397,1398,5,114,0,0,1398,1399, + 5,115,0,0,1399,1400,5,111,0,0,1400,1401,5,110,0,0,1401,1402,5,40,0,0,1402, + 334,1,0,0,0,1403,1404,5,97,0,0,1404,1405,5,108,0,0,1405,1406,5,101,0,0, + 1406,1407,5,112,0,0,1407,1408,5,104,0,0,1408,1409,5,40,0,0,1409,336,1, + 0,0,0,1410,1411,5,101,0,0,1411,1412,5,114,0,0,1412,1413,5,102,0,0,1413, + 1414,5,40,0,0,1414,338,1,0,0,0,1415,1416,5,101,0,0,1416,1417,5,114,0,0, + 1417,1418,5,102,0,0,1418,1419,5,99,0,0,1419,1420,5,40,0,0,1420,340,1,0, + 0,0,1421,1422,5,101,0,0,1422,1423,5,114,0,0,1423,1424,5,102,0,0,1424,1425, + 5,105,0,0,1425,1426,5,40,0,0,1426,342,1,0,0,0,1427,1428,5,69,0,0,1428, + 1429,5,105,0,0,1429,1430,5,40,0,0,1430,344,1,0,0,0,1431,1432,5,108,0,0, + 1432,1433,5,105,0,0,1433,1434,5,40,0,0,1434,346,1,0,0,0,1435,1436,5,112, + 0,0,1436,1437,5,111,0,0,1437,1438,5,108,0,0,1438,1439,5,121,0,0,1439,1440, + 5,103,0,0,1440,1441,5,97,0,0,1441,1442,5,109,0,0,1442,1443,5,109,0,0,1443, + 1444,5,97,0,0,1444,1445,5,40,0,0,1445,348,1,0,0,0,1446,1447,5,100,0,0, + 1447,1448,5,105,0,0,1448,1449,5,103,0,0,1449,1450,5,97,0,0,1450,1451,5, + 109,0,0,1451,1452,5,109,0,0,1452,1453,5,97,0,0,1453,1454,5,40,0,0,1454, + 350,1,0,0,0,1455,1456,5,83,0,0,1456,1457,5,105,0,0,1457,1458,5,40,0,0, + 1458,352,1,0,0,0,1459,1460,5,67,0,0,1460,1461,5,105,0,0,1461,1462,5,40, + 0,0,1462,354,1,0,0,0,1463,1464,5,83,0,0,1464,1465,5,104,0,0,1465,1466, + 5,105,0,0,1466,1467,5,40,0,0,1467,356,1,0,0,0,1468,1469,5,67,0,0,1469, + 1470,5,104,0,0,1470,1471,5,105,0,0,1471,1472,5,40,0,0,1472,358,1,0,0,0, + 1473,1474,5,100,0,0,1474,1475,5,101,0,0,1475,1476,5,116,0,0,1476,1477, + 5,40,0,0,1477,360,1,0,0,0,1478,1479,5,116,0,0,1479,1480,5,114,0,0,1480, + 1481,5,97,0,0,1481,1482,5,110,0,0,1482,1483,5,115,0,0,1483,1484,5,112, + 0,0,1484,1485,5,111,0,0,1485,1486,5,115,0,0,1486,1487,5,101,0,0,1487,1488, + 5,40,0,0,1488,362,1,0,0,0,1489,1490,5,100,0,0,1490,1491,5,111,0,0,1491, + 1492,5,116,0,0,1492,1493,5,40,0,0,1493,364,1,0,0,0,1494,1495,5,99,0,0, + 1495,1496,5,114,0,0,1496,1497,5,111,0,0,1497,1498,5,115,0,0,1498,1499, + 5,115,0,0,1499,1500,5,40,0,0,1500,366,1,0,0,0,1501,1502,5,114,0,0,1502, + 1503,5,101,0,0,1503,1504,5,115,0,0,1504,1505,5,117,0,0,1505,1506,5,108, + 0,0,1506,1507,5,116,0,0,1507,1508,5,97,0,0,1508,1509,5,110,0,0,1509,1510, + 5,116,0,0,1510,1511,5,40,0,0,1511,368,1,0,0,0,1512,1513,5,116,0,0,1513, + 1514,5,114,0,0,1514,1515,5,117,0,0,1515,1516,5,110,0,0,1516,1517,5,99, + 0,0,1517,1518,5,40,0,0,1518,370,1,0,0,0,1519,1520,5,99,0,0,1520,1521,5, + 111,0,0,1521,1522,5,110,0,0,1522,1523,5,106,0,0,1523,1524,5,117,0,0,1524, + 1525,5,103,0,0,1525,1526,5,97,0,0,1526,1527,5,116,0,0,1527,1528,5,101, + 0,0,1528,1529,5,40,0,0,1529,372,1,0,0,0,1530,1531,5,99,0,0,1531,1532,5, + 111,0,0,1532,1533,5,110,0,0,1533,1534,5,106,0,0,1534,1535,5,40,0,0,1535, + 374,1,0,0,0,1536,1537,5,97,0,0,1537,1538,5,114,0,0,1538,1539,5,103,0,0, + 1539,1540,5,40,0,0,1540,376,1,0,0,0,1541,1542,5,100,0,0,1542,1543,5,111, + 0,0,1543,1544,5,109,0,0,1544,1545,5,97,0,0,1545,1546,5,105,0,0,1546,1547, + 5,110,0,0,1547,1548,5,40,0,0,1548,378,1,0,0,0,1549,1550,5,112,0,0,1550, + 1551,5,105,0,0,1551,1552,5,101,0,0,1552,1553,5,99,0,0,1553,1554,5,101, + 0,0,1554,1555,5,119,0,0,1555,1556,5,105,0,0,1556,1557,5,115,0,0,1557,1558, + 5,101,0,0,1558,1559,5,40,0,0,1559,380,1,0,0,0,1560,1561,5,97,0,0,1561, + 1562,5,112,0,0,1562,1563,5,112,0,0,1563,1564,5,108,0,0,1564,1565,5,121, + 0,0,1565,1566,5,40,0,0,1566,382,1,0,0,0,1567,1568,5,108,0,0,1568,1569, + 5,97,0,0,1569,1570,5,109,0,0,1570,1571,5,98,0,0,1571,1572,5,100,0,0,1572, + 1573,5,97,0,0,1573,1574,5,40,0,0,1574,384,1,0,0,0,1575,1577,5,13,0,0,1576, + 1575,1,0,0,0,1576,1577,1,0,0,0,1577,1578,1,0,0,0,1578,1580,5,10,0,0,1579, + 1576,1,0,0,0,1580,1581,1,0,0,0,1581,1579,1,0,0,0,1581,1582,1,0,0,0,1582, + 1583,1,0,0,0,1583,1584,6,192,0,0,1584,386,1,0,0,0,1585,1587,7,0,0,0,1586, + 1588,7,1,0,0,1587,1586,1,0,0,0,1587,1588,1,0,0,0,1588,1590,1,0,0,0,1589, + 1591,2,48,57,0,1590,1589,1,0,0,0,1591,1592,1,0,0,0,1592,1590,1,0,0,0,1592, + 1593,1,0,0,0,1593,388,1,0,0,0,1594,1596,2,48,57,0,1595,1594,1,0,0,0,1596, + 1597,1,0,0,0,1597,1595,1,0,0,0,1597,1598,1,0,0,0,1598,1599,1,0,0,0,1599, + 1603,5,46,0,0,1600,1602,2,48,57,0,1601,1600,1,0,0,0,1602,1605,1,0,0,0, + 1603,1601,1,0,0,0,1603,1604,1,0,0,0,1604,1607,1,0,0,0,1605,1603,1,0,0, + 0,1606,1608,3,387,193,0,1607,1606,1,0,0,0,1607,1608,1,0,0,0,1608,1610, + 1,0,0,0,1609,1611,5,105,0,0,1610,1609,1,0,0,0,1610,1611,1,0,0,0,1611,1628, + 1,0,0,0,1612,1614,5,46,0,0,1613,1612,1,0,0,0,1613,1614,1,0,0,0,1614,1616, + 1,0,0,0,1615,1617,2,48,57,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,1622,3,387,193,0,1621, + 1620,1,0,0,0,1621,1622,1,0,0,0,1622,1624,1,0,0,0,1623,1625,5,105,0,0,1624, + 1623,1,0,0,0,1624,1625,1,0,0,0,1625,1628,1,0,0,0,1626,1628,5,105,0,0,1627, + 1595,1,0,0,0,1627,1613,1,0,0,0,1627,1626,1,0,0,0,1628,390,1,0,0,0,1629, + 1630,5,67,0,0,1630,1648,5,67,0,0,1631,1632,5,82,0,0,1632,1648,5,82,0,0, + 1633,1634,5,81,0,0,1634,1648,5,81,0,0,1635,1636,5,90,0,0,1636,1648,5,90, + 0,0,1637,1638,5,66,0,0,1638,1648,5,66,0,0,1639,1640,5,90,0,0,1640,1641, + 5,90,0,0,1641,1648,5,42,0,0,1642,1643,5,90,0,0,1643,1644,5,90,0,0,1644, + 1648,5,43,0,0,1645,1646,5,80,0,0,1646,1648,5,80,0,0,1647,1629,1,0,0,0, + 1647,1631,1,0,0,0,1647,1633,1,0,0,0,1647,1635,1,0,0,0,1647,1637,1,0,0, + 0,1647,1639,1,0,0,0,1647,1642,1,0,0,0,1647,1645,1,0,0,0,1648,392,1,0,0, + 0,1649,1650,5,116,0,0,1650,1651,5,114,0,0,1651,1652,5,117,0,0,1652,1668, + 5,101,0,0,1653,1654,5,84,0,0,1654,1655,5,114,0,0,1655,1656,5,117,0,0,1656, + 1668,5,101,0,0,1657,1658,5,102,0,0,1658,1659,5,97,0,0,1659,1660,5,108, + 0,0,1660,1661,5,115,0,0,1661,1668,5,101,0,0,1662,1663,5,70,0,0,1663,1664, + 5,97,0,0,1664,1665,5,108,0,0,1665,1666,5,115,0,0,1666,1668,5,101,0,0,1667, + 1649,1,0,0,0,1667,1653,1,0,0,0,1667,1657,1,0,0,0,1667,1662,1,0,0,0,1668, + 394,1,0,0,0,1669,1670,5,78,0,0,1670,1671,5,97,0,0,1671,1672,5,78,0,0,1672, + 396,1,0,0,0,1673,1675,7,2,0,0,1674,1673,1,0,0,0,1675,1676,1,0,0,0,1676, + 1674,1,0,0,0,1676,1677,1,0,0,0,1677,1686,1,0,0,0,1678,1680,5,95,0,0,1679, + 1681,7,3,0,0,1680,1679,1,0,0,0,1681,1682,1,0,0,0,1682,1680,1,0,0,0,1682, + 1683,1,0,0,0,1683,1685,1,0,0,0,1684,1678,1,0,0,0,1685,1688,1,0,0,0,1686, + 1684,1,0,0,0,1686,1687,1,0,0,0,1687,398,1,0,0,0,1688,1686,1,0,0,0,1689, + 1690,5,47,0,0,1690,1691,5,47,0,0,1691,1695,1,0,0,0,1692,1694,8,4,0,0,1693, + 1692,1,0,0,0,1694,1697,1,0,0,0,1695,1693,1,0,0,0,1695,1696,1,0,0,0,1696, + 1702,1,0,0,0,1697,1695,1,0,0,0,1698,1700,5,13,0,0,1699,1698,1,0,0,0,1699, + 1700,1,0,0,0,1700,1701,1,0,0,0,1701,1703,5,10,0,0,1702,1699,1,0,0,0,1702, + 1703,1,0,0,0,1703,1716,1,0,0,0,1704,1705,5,47,0,0,1705,1706,5,42,0,0,1706, + 1710,1,0,0,0,1707,1709,9,0,0,0,1708,1707,1,0,0,0,1709,1712,1,0,0,0,1710, + 1711,1,0,0,0,1710,1708,1,0,0,0,1711,1713,1,0,0,0,1712,1710,1,0,0,0,1713, + 1714,5,42,0,0,1714,1716,5,47,0,0,1715,1689,1,0,0,0,1715,1704,1,0,0,0,1716, + 1717,1,0,0,0,1717,1718,6,199,0,0,1718,400,1,0,0,0,1719,1721,7,5,0,0,1720, + 1719,1,0,0,0,1721,1722,1,0,0,0,1722,1720,1,0,0,0,1722,1723,1,0,0,0,1723, + 1724,1,0,0,0,1724,1725,6,200,0,0,1725,402,1,0,0,0,25,0,1576,1581,1587, + 1592,1597,1603,1607,1610,1613,1618,1621,1624,1627,1647,1667,1676,1682, + 1686,1695,1699,1702,1710,1715,1722,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 62a0ebdff..a592fee4a 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.interp +++ b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.interp @@ -179,11 +179,15 @@ null 'Ci(' 'Shi(' 'Chi(' +'det(' +'transpose(' +'dot(' +'cross(' +'resultant(' 'trunc(' 'conjugate(' 'conj(' 'arg(' -'det(' 'domain(' 'piecewise(' 'apply(' @@ -387,6 +391,10 @@ null null null null +null +null +null +null NEWLINE NUMBER SPECIALSET @@ -585,6 +593,10 @@ T__184 T__185 T__186 T__187 +T__188 +T__189 +T__190 +T__191 NEWLINE EXPONENT NUMBER @@ -603,4 +615,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 196, 1684, 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, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 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, 182, 1, 182, 1, 182, 1, 182, 1, 182, 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, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 3, 188, 1535, 8, 188, 1, 188, 4, 188, 1538, 8, 188, 11, 188, 12, 188, 1539, 1, 188, 1, 188, 1, 189, 1, 189, 3, 189, 1546, 8, 189, 1, 189, 4, 189, 1549, 8, 189, 11, 189, 12, 189, 1550, 1, 190, 4, 190, 1554, 8, 190, 11, 190, 12, 190, 1555, 1, 190, 1, 190, 5, 190, 1560, 8, 190, 10, 190, 12, 190, 1563, 9, 190, 1, 190, 3, 190, 1566, 8, 190, 1, 190, 3, 190, 1569, 8, 190, 1, 190, 3, 190, 1572, 8, 190, 1, 190, 4, 190, 1575, 8, 190, 11, 190, 12, 190, 1576, 1, 190, 3, 190, 1580, 8, 190, 1, 190, 3, 190, 1583, 8, 190, 1, 190, 3, 190, 1586, 8, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 3, 191, 1606, 8, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 3, 192, 1626, 8, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 4, 194, 1633, 8, 194, 11, 194, 12, 194, 1634, 1, 194, 1, 194, 4, 194, 1639, 8, 194, 11, 194, 12, 194, 1640, 5, 194, 1643, 8, 194, 10, 194, 12, 194, 1646, 9, 194, 1, 195, 1, 195, 1, 195, 1, 195, 5, 195, 1652, 8, 195, 10, 195, 12, 195, 1655, 9, 195, 1, 195, 3, 195, 1658, 8, 195, 1, 195, 3, 195, 1661, 8, 195, 1, 195, 1, 195, 1, 195, 1, 195, 5, 195, 1667, 8, 195, 10, 195, 12, 195, 1670, 9, 195, 1, 195, 1, 195, 3, 195, 1674, 8, 195, 1, 195, 1, 195, 1, 196, 4, 196, 1679, 8, 196, 11, 196, 12, 196, 1680, 1, 196, 1, 196, 1, 1668, 0, 197, 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, 187, 375, 188, 377, 189, 379, 0, 381, 190, 383, 191, 385, 192, 387, 193, 389, 194, 391, 195, 393, 196, 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, 1715, 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, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 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, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 1, 395, 1, 0, 0, 0, 3, 397, 1, 0, 0, 0, 5, 399, 1, 0, 0, 0, 7, 401, 1, 0, 0, 0, 9, 403, 1, 0, 0, 0, 11, 405, 1, 0, 0, 0, 13, 409, 1, 0, 0, 0, 15, 411, 1, 0, 0, 0, 17, 413, 1, 0, 0, 0, 19, 417, 1, 0, 0, 0, 21, 427, 1, 0, 0, 0, 23, 430, 1, 0, 0, 0, 25, 436, 1, 0, 0, 0, 27, 439, 1, 0, 0, 0, 29, 451, 1, 0, 0, 0, 31, 453, 1, 0, 0, 0, 33, 456, 1, 0, 0, 0, 35, 463, 1, 0, 0, 0, 37, 465, 1, 0, 0, 0, 39, 474, 1, 0, 0, 0, 41, 476, 1, 0, 0, 0, 43, 484, 1, 0, 0, 0, 45, 486, 1, 0, 0, 0, 47, 489, 1, 0, 0, 0, 49, 492, 1, 0, 0, 0, 51, 494, 1, 0, 0, 0, 53, 496, 1, 0, 0, 0, 55, 498, 1, 0, 0, 0, 57, 501, 1, 0, 0, 0, 59, 503, 1, 0, 0, 0, 61, 505, 1, 0, 0, 0, 63, 507, 1, 0, 0, 0, 65, 511, 1, 0, 0, 0, 67, 515, 1, 0, 0, 0, 69, 517, 1, 0, 0, 0, 71, 521, 1, 0, 0, 0, 73, 524, 1, 0, 0, 0, 75, 532, 1, 0, 0, 0, 77, 535, 1, 0, 0, 0, 79, 544, 1, 0, 0, 0, 81, 547, 1, 0, 0, 0, 83, 549, 1, 0, 0, 0, 85, 556, 1, 0, 0, 0, 87, 558, 1, 0, 0, 0, 89, 566, 1, 0, 0, 0, 91, 569, 1, 0, 0, 0, 93, 576, 1, 0, 0, 0, 95, 578, 1, 0, 0, 0, 97, 580, 1, 0, 0, 0, 99, 582, 1, 0, 0, 0, 101, 586, 1, 0, 0, 0, 103, 590, 1, 0, 0, 0, 105, 593, 1, 0, 0, 0, 107, 596, 1, 0, 0, 0, 109, 598, 1, 0, 0, 0, 111, 600, 1, 0, 0, 0, 113, 603, 1, 0, 0, 0, 115, 605, 1, 0, 0, 0, 117, 607, 1, 0, 0, 0, 119, 609, 1, 0, 0, 0, 121, 614, 1, 0, 0, 0, 123, 621, 1, 0, 0, 0, 125, 627, 1, 0, 0, 0, 127, 632, 1, 0, 0, 0, 129, 638, 1, 0, 0, 0, 131, 644, 1, 0, 0, 0, 133, 649, 1, 0, 0, 0, 135, 653, 1, 0, 0, 0, 137, 658, 1, 0, 0, 0, 139, 663, 1, 0, 0, 0, 141, 668, 1, 0, 0, 0, 143, 673, 1, 0, 0, 0, 145, 680, 1, 0, 0, 0, 147, 685, 1, 0, 0, 0, 149, 690, 1, 0, 0, 0, 151, 697, 1, 0, 0, 0, 153, 702, 1, 0, 0, 0, 155, 710, 1, 0, 0, 0, 157, 718, 1, 0, 0, 0, 159, 726, 1, 0, 0, 0, 161, 736, 1, 0, 0, 0, 163, 744, 1, 0, 0, 0, 165, 754, 1, 0, 0, 0, 167, 762, 1, 0, 0, 0, 169, 768, 1, 0, 0, 0, 171, 774, 1, 0, 0, 0, 173, 780, 1, 0, 0, 0, 175, 786, 1, 0, 0, 0, 177, 794, 1, 0, 0, 0, 179, 800, 1, 0, 0, 0, 181, 808, 1, 0, 0, 0, 183, 814, 1, 0, 0, 0, 185, 822, 1, 0, 0, 0, 187, 828, 1, 0, 0, 0, 189, 832, 1, 0, 0, 0, 191, 838, 1, 0, 0, 0, 193, 842, 1, 0, 0, 0, 195, 848, 1, 0, 0, 0, 197, 852, 1, 0, 0, 0, 199, 860, 1, 0, 0, 0, 201, 866, 1, 0, 0, 0, 203, 871, 1, 0, 0, 0, 205, 877, 1, 0, 0, 0, 207, 882, 1, 0, 0, 0, 209, 890, 1, 0, 0, 0, 211, 896, 1, 0, 0, 0, 213, 903, 1, 0, 0, 0, 215, 911, 1, 0, 0, 0, 217, 917, 1, 0, 0, 0, 219, 926, 1, 0, 0, 0, 221, 933, 1, 0, 0, 0, 223, 941, 1, 0, 0, 0, 225, 947, 1, 0, 0, 0, 227, 956, 1, 0, 0, 0, 229, 963, 1, 0, 0, 0, 231, 971, 1, 0, 0, 0, 233, 977, 1, 0, 0, 0, 235, 986, 1, 0, 0, 0, 237, 993, 1, 0, 0, 0, 239, 1001, 1, 0, 0, 0, 241, 1010, 1, 0, 0, 0, 243, 1020, 1, 0, 0, 0, 245, 1027, 1, 0, 0, 0, 247, 1038, 1, 0, 0, 0, 249, 1045, 1, 0, 0, 0, 251, 1053, 1, 0, 0, 0, 253, 1060, 1, 0, 0, 0, 255, 1069, 1, 0, 0, 0, 257, 1078, 1, 0, 0, 0, 259, 1088, 1, 0, 0, 0, 261, 1096, 1, 0, 0, 0, 263, 1107, 1, 0, 0, 0, 265, 1114, 1, 0, 0, 0, 267, 1125, 1, 0, 0, 0, 269, 1132, 1, 0, 0, 0, 271, 1144, 1, 0, 0, 0, 273, 1154, 1, 0, 0, 0, 275, 1161, 1, 0, 0, 0, 277, 1172, 1, 0, 0, 0, 279, 1184, 1, 0, 0, 0, 281, 1189, 1, 0, 0, 0, 283, 1198, 1, 0, 0, 0, 285, 1206, 1, 0, 0, 0, 287, 1211, 1, 0, 0, 0, 289, 1217, 1, 0, 0, 0, 291, 1222, 1, 0, 0, 0, 293, 1227, 1, 0, 0, 0, 295, 1234, 1, 0, 0, 0, 297, 1245, 1, 0, 0, 0, 299, 1251, 1, 0, 0, 0, 301, 1261, 1, 0, 0, 0, 303, 1268, 1, 0, 0, 0, 305, 1282, 1, 0, 0, 0, 307, 1294, 1, 0, 0, 0, 309, 1301, 1, 0, 0, 0, 311, 1311, 1, 0, 0, 0, 313, 1318, 1, 0, 0, 0, 315, 1324, 1, 0, 0, 0, 317, 1333, 1, 0, 0, 0, 319, 1340, 1, 0, 0, 0, 321, 1345, 1, 0, 0, 0, 323, 1350, 1, 0, 0, 0, 325, 1358, 1, 0, 0, 0, 327, 1366, 1, 0, 0, 0, 329, 1371, 1, 0, 0, 0, 331, 1376, 1, 0, 0, 0, 333, 1386, 1, 0, 0, 0, 335, 1395, 1, 0, 0, 0, 337, 1402, 1, 0, 0, 0, 339, 1407, 1, 0, 0, 0, 341, 1413, 1, 0, 0, 0, 343, 1419, 1, 0, 0, 0, 345, 1423, 1, 0, 0, 0, 347, 1427, 1, 0, 0, 0, 349, 1438, 1, 0, 0, 0, 351, 1447, 1, 0, 0, 0, 353, 1451, 1, 0, 0, 0, 355, 1455, 1, 0, 0, 0, 357, 1460, 1, 0, 0, 0, 359, 1465, 1, 0, 0, 0, 361, 1472, 1, 0, 0, 0, 363, 1483, 1, 0, 0, 0, 365, 1489, 1, 0, 0, 0, 367, 1494, 1, 0, 0, 0, 369, 1499, 1, 0, 0, 0, 371, 1507, 1, 0, 0, 0, 373, 1518, 1, 0, 0, 0, 375, 1525, 1, 0, 0, 0, 377, 1537, 1, 0, 0, 0, 379, 1543, 1, 0, 0, 0, 381, 1585, 1, 0, 0, 0, 383, 1605, 1, 0, 0, 0, 385, 1625, 1, 0, 0, 0, 387, 1627, 1, 0, 0, 0, 389, 1632, 1, 0, 0, 0, 391, 1673, 1, 0, 0, 0, 393, 1678, 1, 0, 0, 0, 395, 396, 5, 33, 0, 0, 396, 2, 1, 0, 0, 0, 397, 398, 5, 94, 0, 0, 398, 4, 1, 0, 0, 0, 399, 400, 5, 45, 0, 0, 400, 6, 1, 0, 0, 0, 401, 402, 5, 43, 0, 0, 402, 8, 1, 0, 0, 0, 403, 404, 5, 42, 0, 0, 404, 10, 1, 0, 0, 0, 405, 406, 5, 46, 0, 0, 406, 407, 5, 46, 0, 0, 407, 408, 5, 46, 0, 0, 408, 12, 1, 0, 0, 0, 409, 410, 5, 8230, 0, 0, 410, 14, 1, 0, 0, 0, 411, 412, 5, 47, 0, 0, 412, 16, 1, 0, 0, 0, 413, 414, 5, 109, 0, 0, 414, 415, 5, 111, 0, 0, 415, 416, 5, 100, 0, 0, 416, 18, 1, 0, 0, 0, 417, 418, 5, 105, 0, 0, 418, 419, 5, 110, 0, 0, 419, 420, 5, 116, 0, 0, 420, 421, 5, 101, 0, 0, 421, 422, 5, 114, 0, 0, 422, 423, 5, 115, 0, 0, 423, 424, 5, 101, 0, 0, 424, 425, 5, 99, 0, 0, 425, 426, 5, 116, 0, 0, 426, 20, 1, 0, 0, 0, 427, 428, 5, 47, 0, 0, 428, 429, 5, 92, 0, 0, 429, 22, 1, 0, 0, 0, 430, 431, 5, 117, 0, 0, 431, 432, 5, 110, 0, 0, 432, 433, 5, 105, 0, 0, 433, 434, 5, 116, 0, 0, 434, 435, 5, 101, 0, 0, 435, 24, 1, 0, 0, 0, 436, 437, 5, 92, 0, 0, 437, 438, 5, 47, 0, 0, 438, 26, 1, 0, 0, 0, 439, 440, 5, 115, 0, 0, 440, 441, 5, 101, 0, 0, 441, 442, 5, 116, 0, 0, 442, 443, 5, 115, 0, 0, 443, 444, 5, 117, 0, 0, 444, 445, 5, 98, 0, 0, 445, 446, 5, 116, 0, 0, 446, 447, 5, 114, 0, 0, 447, 448, 5, 97, 0, 0, 448, 449, 5, 99, 0, 0, 449, 450, 5, 116, 0, 0, 450, 28, 1, 0, 0, 0, 451, 452, 5, 92, 0, 0, 452, 30, 1, 0, 0, 0, 453, 454, 5, 105, 0, 0, 454, 455, 5, 110, 0, 0, 455, 32, 1, 0, 0, 0, 456, 457, 5, 115, 0, 0, 457, 458, 5, 117, 0, 0, 458, 459, 5, 98, 0, 0, 459, 460, 5, 115, 0, 0, 460, 461, 5, 101, 0, 0, 461, 462, 5, 116, 0, 0, 462, 34, 1, 0, 0, 0, 463, 464, 5, 8838, 0, 0, 464, 36, 1, 0, 0, 0, 465, 466, 5, 115, 0, 0, 466, 467, 5, 117, 0, 0, 467, 468, 5, 112, 0, 0, 468, 469, 5, 101, 0, 0, 469, 470, 5, 114, 0, 0, 470, 471, 5, 115, 0, 0, 471, 472, 5, 101, 0, 0, 472, 473, 5, 116, 0, 0, 473, 38, 1, 0, 0, 0, 474, 475, 5, 8839, 0, 0, 475, 40, 1, 0, 0, 0, 476, 477, 5, 100, 0, 0, 477, 478, 5, 105, 0, 0, 478, 479, 5, 118, 0, 0, 479, 480, 5, 105, 0, 0, 480, 481, 5, 100, 0, 0, 481, 482, 5, 101, 0, 0, 482, 483, 5, 115, 0, 0, 483, 42, 1, 0, 0, 0, 484, 485, 5, 124, 0, 0, 485, 44, 1, 0, 0, 0, 486, 487, 5, 62, 0, 0, 487, 488, 5, 61, 0, 0, 488, 46, 1, 0, 0, 0, 489, 490, 5, 60, 0, 0, 490, 491, 5, 61, 0, 0, 491, 48, 1, 0, 0, 0, 492, 493, 5, 62, 0, 0, 493, 50, 1, 0, 0, 0, 494, 495, 5, 60, 0, 0, 495, 52, 1, 0, 0, 0, 496, 497, 5, 61, 0, 0, 497, 54, 1, 0, 0, 0, 498, 499, 5, 60, 0, 0, 499, 500, 5, 62, 0, 0, 500, 56, 1, 0, 0, 0, 501, 502, 5, 8801, 0, 0, 502, 58, 1, 0, 0, 0, 503, 504, 5, 40, 0, 0, 504, 60, 1, 0, 0, 0, 505, 506, 5, 41, 0, 0, 506, 62, 1, 0, 0, 0, 507, 508, 5, 110, 0, 0, 508, 509, 5, 111, 0, 0, 509, 510, 5, 116, 0, 0, 510, 64, 1, 0, 0, 0, 511, 512, 5, 97, 0, 0, 512, 513, 5, 110, 0, 0, 513, 514, 5, 100, 0, 0, 514, 66, 1, 0, 0, 0, 515, 516, 5, 38, 0, 0, 516, 68, 1, 0, 0, 0, 517, 518, 5, 120, 0, 0, 518, 519, 5, 111, 0, 0, 519, 520, 5, 114, 0, 0, 520, 70, 1, 0, 0, 0, 521, 522, 5, 111, 0, 0, 522, 523, 5, 114, 0, 0, 523, 72, 1, 0, 0, 0, 524, 525, 5, 105, 0, 0, 525, 526, 5, 109, 0, 0, 526, 527, 5, 112, 0, 0, 527, 528, 5, 108, 0, 0, 528, 529, 5, 105, 0, 0, 529, 530, 5, 101, 0, 0, 530, 531, 5, 115, 0, 0, 531, 74, 1, 0, 0, 0, 532, 533, 5, 45, 0, 0, 533, 534, 5, 62, 0, 0, 534, 76, 1, 0, 0, 0, 535, 536, 5, 112, 0, 0, 536, 537, 5, 114, 0, 0, 537, 538, 5, 111, 0, 0, 538, 539, 5, 118, 0, 0, 539, 540, 5, 105, 0, 0, 540, 541, 5, 100, 0, 0, 541, 542, 5, 101, 0, 0, 542, 543, 5, 100, 0, 0, 543, 78, 1, 0, 0, 0, 544, 545, 5, 61, 0, 0, 545, 546, 5, 62, 0, 0, 546, 80, 1, 0, 0, 0, 547, 548, 5, 58, 0, 0, 548, 82, 1, 0, 0, 0, 549, 550, 5, 102, 0, 0, 550, 551, 5, 111, 0, 0, 551, 552, 5, 114, 0, 0, 552, 553, 5, 97, 0, 0, 553, 554, 5, 108, 0, 0, 554, 555, 5, 108, 0, 0, 555, 84, 1, 0, 0, 0, 556, 557, 5, 8704, 0, 0, 557, 86, 1, 0, 0, 0, 558, 559, 5, 101, 0, 0, 559, 560, 5, 120, 0, 0, 560, 561, 5, 105, 0, 0, 561, 562, 5, 115, 0, 0, 562, 563, 5, 116, 0, 0, 563, 564, 5, 115, 0, 0, 564, 565, 5, 33, 0, 0, 565, 88, 1, 0, 0, 0, 566, 567, 5, 8707, 0, 0, 567, 568, 5, 33, 0, 0, 568, 90, 1, 0, 0, 0, 569, 570, 5, 101, 0, 0, 570, 571, 5, 120, 0, 0, 571, 572, 5, 105, 0, 0, 572, 573, 5, 115, 0, 0, 573, 574, 5, 116, 0, 0, 574, 575, 5, 115, 0, 0, 575, 92, 1, 0, 0, 0, 576, 577, 5, 8707, 0, 0, 577, 94, 1, 0, 0, 0, 578, 579, 5, 44, 0, 0, 579, 96, 1, 0, 0, 0, 580, 581, 5, 59, 0, 0, 581, 98, 1, 0, 0, 0, 582, 583, 5, 43, 0, 0, 583, 584, 5, 111, 0, 0, 584, 585, 5, 111, 0, 0, 585, 100, 1, 0, 0, 0, 586, 587, 5, 45, 0, 0, 587, 588, 5, 111, 0, 0, 588, 589, 5, 111, 0, 0, 589, 102, 1, 0, 0, 0, 590, 591, 5, 40, 0, 0, 591, 592, 5, 124, 0, 0, 592, 104, 1, 0, 0, 0, 593, 594, 5, 124, 0, 0, 594, 595, 5, 41, 0, 0, 595, 106, 1, 0, 0, 0, 596, 597, 5, 35, 0, 0, 597, 108, 1, 0, 0, 0, 598, 599, 5, 91, 0, 0, 599, 110, 1, 0, 0, 0, 600, 601, 5, 93, 0, 0, 601, 602, 5, 84, 0, 0, 602, 112, 1, 0, 0, 0, 603, 604, 5, 93, 0, 0, 604, 114, 1, 0, 0, 0, 605, 606, 5, 123, 0, 0, 606, 116, 1, 0, 0, 0, 607, 608, 5, 125, 0, 0, 608, 118, 1, 0, 0, 0, 609, 610, 5, 108, 0, 0, 610, 611, 5, 111, 0, 0, 611, 612, 5, 103, 0, 0, 612, 613, 5, 40, 0, 0, 613, 120, 1, 0, 0, 0, 614, 615, 5, 108, 0, 0, 615, 616, 5, 111, 0, 0, 616, 617, 5, 103, 0, 0, 617, 618, 5, 49, 0, 0, 618, 619, 5, 48, 0, 0, 619, 620, 5, 40, 0, 0, 620, 122, 1, 0, 0, 0, 621, 622, 5, 108, 0, 0, 622, 623, 5, 111, 0, 0, 623, 624, 5, 103, 0, 0, 624, 625, 5, 50, 0, 0, 625, 626, 5, 40, 0, 0, 626, 124, 1, 0, 0, 0, 627, 628, 5, 112, 0, 0, 628, 629, 5, 111, 0, 0, 629, 630, 5, 119, 0, 0, 630, 631, 5, 40, 0, 0, 631, 126, 1, 0, 0, 0, 632, 633, 5, 115, 0, 0, 633, 634, 5, 113, 0, 0, 634, 635, 5, 114, 0, 0, 635, 636, 5, 116, 0, 0, 636, 637, 5, 40, 0, 0, 637, 128, 1, 0, 0, 0, 638, 639, 5, 99, 0, 0, 639, 640, 5, 98, 0, 0, 640, 641, 5, 114, 0, 0, 641, 642, 5, 116, 0, 0, 642, 643, 5, 40, 0, 0, 643, 130, 1, 0, 0, 0, 644, 645, 5, 115, 0, 0, 645, 646, 5, 113, 0, 0, 646, 647, 5, 114, 0, 0, 647, 648, 5, 40, 0, 0, 648, 132, 1, 0, 0, 0, 649, 650, 5, 108, 0, 0, 650, 651, 5, 110, 0, 0, 651, 652, 5, 40, 0, 0, 652, 134, 1, 0, 0, 0, 653, 654, 5, 101, 0, 0, 654, 655, 5, 120, 0, 0, 655, 656, 5, 112, 0, 0, 656, 657, 5, 40, 0, 0, 657, 136, 1, 0, 0, 0, 658, 659, 5, 115, 0, 0, 659, 660, 5, 105, 0, 0, 660, 661, 5, 110, 0, 0, 661, 662, 5, 40, 0, 0, 662, 138, 1, 0, 0, 0, 663, 664, 5, 99, 0, 0, 664, 665, 5, 111, 0, 0, 665, 666, 5, 115, 0, 0, 666, 667, 5, 40, 0, 0, 667, 140, 1, 0, 0, 0, 668, 669, 5, 116, 0, 0, 669, 670, 5, 97, 0, 0, 670, 671, 5, 110, 0, 0, 671, 672, 5, 40, 0, 0, 672, 142, 1, 0, 0, 0, 673, 674, 5, 99, 0, 0, 674, 675, 5, 111, 0, 0, 675, 676, 5, 116, 0, 0, 676, 677, 5, 97, 0, 0, 677, 678, 5, 110, 0, 0, 678, 679, 5, 40, 0, 0, 679, 144, 1, 0, 0, 0, 680, 681, 5, 99, 0, 0, 681, 682, 5, 111, 0, 0, 682, 683, 5, 116, 0, 0, 683, 684, 5, 40, 0, 0, 684, 146, 1, 0, 0, 0, 685, 686, 5, 115, 0, 0, 686, 687, 5, 101, 0, 0, 687, 688, 5, 99, 0, 0, 688, 689, 5, 40, 0, 0, 689, 148, 1, 0, 0, 0, 690, 691, 5, 99, 0, 0, 691, 692, 5, 111, 0, 0, 692, 693, 5, 115, 0, 0, 693, 694, 5, 101, 0, 0, 694, 695, 5, 99, 0, 0, 695, 696, 5, 40, 0, 0, 696, 150, 1, 0, 0, 0, 697, 698, 5, 99, 0, 0, 698, 699, 5, 115, 0, 0, 699, 700, 5, 99, 0, 0, 700, 701, 5, 40, 0, 0, 701, 152, 1, 0, 0, 0, 702, 703, 5, 97, 0, 0, 703, 704, 5, 114, 0, 0, 704, 705, 5, 99, 0, 0, 705, 706, 5, 115, 0, 0, 706, 707, 5, 105, 0, 0, 707, 708, 5, 110, 0, 0, 708, 709, 5, 40, 0, 0, 709, 154, 1, 0, 0, 0, 710, 711, 5, 97, 0, 0, 711, 712, 5, 114, 0, 0, 712, 713, 5, 99, 0, 0, 713, 714, 5, 99, 0, 0, 714, 715, 5, 111, 0, 0, 715, 716, 5, 115, 0, 0, 716, 717, 5, 40, 0, 0, 717, 156, 1, 0, 0, 0, 718, 719, 5, 97, 0, 0, 719, 720, 5, 114, 0, 0, 720, 721, 5, 99, 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, 158, 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, 99, 0, 0, 730, 731, 5, 111, 0, 0, 731, 732, 5, 116, 0, 0, 732, 733, 5, 97, 0, 0, 733, 734, 5, 110, 0, 0, 734, 735, 5, 40, 0, 0, 735, 160, 1, 0, 0, 0, 736, 737, 5, 97, 0, 0, 737, 738, 5, 114, 0, 0, 738, 739, 5, 99, 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, 162, 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, 111, 0, 0, 749, 750, 5, 115, 0, 0, 750, 751, 5, 101, 0, 0, 751, 752, 5, 99, 0, 0, 752, 753, 5, 40, 0, 0, 753, 164, 1, 0, 0, 0, 754, 755, 5, 97, 0, 0, 755, 756, 5, 114, 0, 0, 756, 757, 5, 99, 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, 166, 1, 0, 0, 0, 762, 763, 5, 97, 0, 0, 763, 764, 5, 99, 0, 0, 764, 765, 5, 115, 0, 0, 765, 766, 5, 99, 0, 0, 766, 767, 5, 40, 0, 0, 767, 168, 1, 0, 0, 0, 768, 769, 5, 97, 0, 0, 769, 770, 5, 115, 0, 0, 770, 771, 5, 105, 0, 0, 771, 772, 5, 110, 0, 0, 772, 773, 5, 40, 0, 0, 773, 170, 1, 0, 0, 0, 774, 775, 5, 97, 0, 0, 775, 776, 5, 99, 0, 0, 776, 777, 5, 111, 0, 0, 777, 778, 5, 115, 0, 0, 778, 779, 5, 40, 0, 0, 779, 172, 1, 0, 0, 0, 780, 781, 5, 97, 0, 0, 781, 782, 5, 116, 0, 0, 782, 783, 5, 97, 0, 0, 783, 784, 5, 110, 0, 0, 784, 785, 5, 40, 0, 0, 785, 174, 1, 0, 0, 0, 786, 787, 5, 97, 0, 0, 787, 788, 5, 99, 0, 0, 788, 789, 5, 111, 0, 0, 789, 790, 5, 116, 0, 0, 790, 791, 5, 97, 0, 0, 791, 792, 5, 110, 0, 0, 792, 793, 5, 40, 0, 0, 793, 176, 1, 0, 0, 0, 794, 795, 5, 97, 0, 0, 795, 796, 5, 115, 0, 0, 796, 797, 5, 101, 0, 0, 797, 798, 5, 99, 0, 0, 798, 799, 5, 40, 0, 0, 799, 178, 1, 0, 0, 0, 800, 801, 5, 97, 0, 0, 801, 802, 5, 99, 0, 0, 802, 803, 5, 111, 0, 0, 803, 804, 5, 115, 0, 0, 804, 805, 5, 101, 0, 0, 805, 806, 5, 99, 0, 0, 806, 807, 5, 40, 0, 0, 807, 180, 1, 0, 0, 0, 808, 809, 5, 97, 0, 0, 809, 810, 5, 99, 0, 0, 810, 811, 5, 111, 0, 0, 811, 812, 5, 116, 0, 0, 812, 813, 5, 40, 0, 0, 813, 182, 1, 0, 0, 0, 814, 815, 5, 97, 0, 0, 815, 816, 5, 114, 0, 0, 816, 817, 5, 99, 0, 0, 817, 818, 5, 99, 0, 0, 818, 819, 5, 111, 0, 0, 819, 820, 5, 116, 0, 0, 820, 821, 5, 40, 0, 0, 821, 184, 1, 0, 0, 0, 822, 823, 5, 115, 0, 0, 823, 824, 5, 105, 0, 0, 824, 825, 5, 110, 0, 0, 825, 826, 5, 104, 0, 0, 826, 827, 5, 40, 0, 0, 827, 186, 1, 0, 0, 0, 828, 829, 5, 115, 0, 0, 829, 830, 5, 104, 0, 0, 830, 831, 5, 40, 0, 0, 831, 188, 1, 0, 0, 0, 832, 833, 5, 99, 0, 0, 833, 834, 5, 111, 0, 0, 834, 835, 5, 115, 0, 0, 835, 836, 5, 104, 0, 0, 836, 837, 5, 40, 0, 0, 837, 190, 1, 0, 0, 0, 838, 839, 5, 99, 0, 0, 839, 840, 5, 104, 0, 0, 840, 841, 5, 40, 0, 0, 841, 192, 1, 0, 0, 0, 842, 843, 5, 116, 0, 0, 843, 844, 5, 97, 0, 0, 844, 845, 5, 110, 0, 0, 845, 846, 5, 104, 0, 0, 846, 847, 5, 40, 0, 0, 847, 194, 1, 0, 0, 0, 848, 849, 5, 116, 0, 0, 849, 850, 5, 104, 0, 0, 850, 851, 5, 40, 0, 0, 851, 196, 1, 0, 0, 0, 852, 853, 5, 99, 0, 0, 853, 854, 5, 111, 0, 0, 854, 855, 5, 116, 0, 0, 855, 856, 5, 97, 0, 0, 856, 857, 5, 110, 0, 0, 857, 858, 5, 104, 0, 0, 858, 859, 5, 40, 0, 0, 859, 198, 1, 0, 0, 0, 860, 861, 5, 99, 0, 0, 861, 862, 5, 111, 0, 0, 862, 863, 5, 116, 0, 0, 863, 864, 5, 104, 0, 0, 864, 865, 5, 40, 0, 0, 865, 200, 1, 0, 0, 0, 866, 867, 5, 99, 0, 0, 867, 868, 5, 116, 0, 0, 868, 869, 5, 104, 0, 0, 869, 870, 5, 40, 0, 0, 870, 202, 1, 0, 0, 0, 871, 872, 5, 115, 0, 0, 872, 873, 5, 101, 0, 0, 873, 874, 5, 99, 0, 0, 874, 875, 5, 104, 0, 0, 875, 876, 5, 40, 0, 0, 876, 204, 1, 0, 0, 0, 877, 878, 5, 115, 0, 0, 878, 879, 5, 99, 0, 0, 879, 880, 5, 104, 0, 0, 880, 881, 5, 40, 0, 0, 881, 206, 1, 0, 0, 0, 882, 883, 5, 99, 0, 0, 883, 884, 5, 111, 0, 0, 884, 885, 5, 115, 0, 0, 885, 886, 5, 101, 0, 0, 886, 887, 5, 99, 0, 0, 887, 888, 5, 104, 0, 0, 888, 889, 5, 40, 0, 0, 889, 208, 1, 0, 0, 0, 890, 891, 5, 99, 0, 0, 891, 892, 5, 115, 0, 0, 892, 893, 5, 99, 0, 0, 893, 894, 5, 104, 0, 0, 894, 895, 5, 40, 0, 0, 895, 210, 1, 0, 0, 0, 896, 897, 5, 97, 0, 0, 897, 898, 5, 115, 0, 0, 898, 899, 5, 105, 0, 0, 899, 900, 5, 110, 0, 0, 900, 901, 5, 104, 0, 0, 901, 902, 5, 40, 0, 0, 902, 212, 1, 0, 0, 0, 903, 904, 5, 97, 0, 0, 904, 905, 5, 114, 0, 0, 905, 906, 5, 115, 0, 0, 906, 907, 5, 105, 0, 0, 907, 908, 5, 110, 0, 0, 908, 909, 5, 104, 0, 0, 909, 910, 5, 40, 0, 0, 910, 214, 1, 0, 0, 0, 911, 912, 5, 97, 0, 0, 912, 913, 5, 114, 0, 0, 913, 914, 5, 115, 0, 0, 914, 915, 5, 104, 0, 0, 915, 916, 5, 40, 0, 0, 916, 216, 1, 0, 0, 0, 917, 918, 5, 97, 0, 0, 918, 919, 5, 114, 0, 0, 919, 920, 5, 99, 0, 0, 920, 921, 5, 115, 0, 0, 921, 922, 5, 105, 0, 0, 922, 923, 5, 110, 0, 0, 923, 924, 5, 104, 0, 0, 924, 925, 5, 40, 0, 0, 925, 218, 1, 0, 0, 0, 926, 927, 5, 97, 0, 0, 927, 928, 5, 99, 0, 0, 928, 929, 5, 111, 0, 0, 929, 930, 5, 115, 0, 0, 930, 931, 5, 104, 0, 0, 931, 932, 5, 40, 0, 0, 932, 220, 1, 0, 0, 0, 933, 934, 5, 97, 0, 0, 934, 935, 5, 114, 0, 0, 935, 936, 5, 99, 0, 0, 936, 937, 5, 111, 0, 0, 937, 938, 5, 115, 0, 0, 938, 939, 5, 104, 0, 0, 939, 940, 5, 40, 0, 0, 940, 222, 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, 104, 0, 0, 945, 946, 5, 40, 0, 0, 946, 224, 1, 0, 0, 0, 947, 948, 5, 97, 0, 0, 948, 949, 5, 114, 0, 0, 949, 950, 5, 99, 0, 0, 950, 951, 5, 99, 0, 0, 951, 952, 5, 111, 0, 0, 952, 953, 5, 115, 0, 0, 953, 954, 5, 104, 0, 0, 954, 955, 5, 40, 0, 0, 955, 226, 1, 0, 0, 0, 956, 957, 5, 97, 0, 0, 957, 958, 5, 116, 0, 0, 958, 959, 5, 97, 0, 0, 959, 960, 5, 110, 0, 0, 960, 961, 5, 104, 0, 0, 961, 962, 5, 40, 0, 0, 962, 228, 1, 0, 0, 0, 963, 964, 5, 97, 0, 0, 964, 965, 5, 114, 0, 0, 965, 966, 5, 116, 0, 0, 966, 967, 5, 97, 0, 0, 967, 968, 5, 110, 0, 0, 968, 969, 5, 104, 0, 0, 969, 970, 5, 40, 0, 0, 970, 230, 1, 0, 0, 0, 971, 972, 5, 97, 0, 0, 972, 973, 5, 114, 0, 0, 973, 974, 5, 116, 0, 0, 974, 975, 5, 104, 0, 0, 975, 976, 5, 40, 0, 0, 976, 232, 1, 0, 0, 0, 977, 978, 5, 97, 0, 0, 978, 979, 5, 114, 0, 0, 979, 980, 5, 99, 0, 0, 980, 981, 5, 116, 0, 0, 981, 982, 5, 97, 0, 0, 982, 983, 5, 110, 0, 0, 983, 984, 5, 104, 0, 0, 984, 985, 5, 40, 0, 0, 985, 234, 1, 0, 0, 0, 986, 987, 5, 97, 0, 0, 987, 988, 5, 99, 0, 0, 988, 989, 5, 111, 0, 0, 989, 990, 5, 116, 0, 0, 990, 991, 5, 104, 0, 0, 991, 992, 5, 40, 0, 0, 992, 236, 1, 0, 0, 0, 993, 994, 5, 97, 0, 0, 994, 995, 5, 114, 0, 0, 995, 996, 5, 99, 0, 0, 996, 997, 5, 111, 0, 0, 997, 998, 5, 116, 0, 0, 998, 999, 5, 104, 0, 0, 999, 1000, 5, 40, 0, 0, 1000, 238, 1, 0, 0, 0, 1001, 1002, 5, 97, 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, 240, 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, 111, 0, 0, 1014, 1015, 5, 116, 0, 0, 1015, 1016, 5, 97, 0, 0, 1016, 1017, 5, 110, 0, 0, 1017, 1018, 5, 104, 0, 0, 1018, 1019, 5, 40, 0, 0, 1019, 242, 1, 0, 0, 0, 1020, 1021, 5, 97, 0, 0, 1021, 1022, 5, 114, 0, 0, 1022, 1023, 5, 99, 0, 0, 1023, 1024, 5, 116, 0, 0, 1024, 1025, 5, 104, 0, 0, 1025, 1026, 5, 40, 0, 0, 1026, 244, 1, 0, 0, 0, 1027, 1028, 5, 97, 0, 0, 1028, 1029, 5, 114, 0, 0, 1029, 1030, 5, 99, 0, 0, 1030, 1031, 5, 99, 0, 0, 1031, 1032, 5, 111, 0, 0, 1032, 1033, 5, 116, 0, 0, 1033, 1034, 5, 97, 0, 0, 1034, 1035, 5, 110, 0, 0, 1035, 1036, 5, 104, 0, 0, 1036, 1037, 5, 40, 0, 0, 1037, 246, 1, 0, 0, 0, 1038, 1039, 5, 97, 0, 0, 1039, 1040, 5, 115, 0, 0, 1040, 1041, 5, 101, 0, 0, 1041, 1042, 5, 99, 0, 0, 1042, 1043, 5, 104, 0, 0, 1043, 1044, 5, 40, 0, 0, 1044, 248, 1, 0, 0, 0, 1045, 1046, 5, 97, 0, 0, 1046, 1047, 5, 114, 0, 0, 1047, 1048, 5, 115, 0, 0, 1048, 1049, 5, 101, 0, 0, 1049, 1050, 5, 99, 0, 0, 1050, 1051, 5, 104, 0, 0, 1051, 1052, 5, 40, 0, 0, 1052, 250, 1, 0, 0, 0, 1053, 1054, 5, 97, 0, 0, 1054, 1055, 5, 114, 0, 0, 1055, 1056, 5, 115, 0, 0, 1056, 1057, 5, 99, 0, 0, 1057, 1058, 5, 104, 0, 0, 1058, 1059, 5, 40, 0, 0, 1059, 252, 1, 0, 0, 0, 1060, 1061, 5, 97, 0, 0, 1061, 1062, 5, 114, 0, 0, 1062, 1063, 5, 99, 0, 0, 1063, 1064, 5, 115, 0, 0, 1064, 1065, 5, 101, 0, 0, 1065, 1066, 5, 99, 0, 0, 1066, 1067, 5, 104, 0, 0, 1067, 1068, 5, 40, 0, 0, 1068, 254, 1, 0, 0, 0, 1069, 1070, 5, 97, 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, 256, 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, 111, 0, 0, 1082, 1083, 5, 115, 0, 0, 1083, 1084, 5, 101, 0, 0, 1084, 1085, 5, 99, 0, 0, 1085, 1086, 5, 104, 0, 0, 1086, 1087, 5, 40, 0, 0, 1087, 258, 1, 0, 0, 0, 1088, 1089, 5, 97, 0, 0, 1089, 1090, 5, 114, 0, 0, 1090, 1091, 5, 99, 0, 0, 1091, 1092, 5, 115, 0, 0, 1092, 1093, 5, 99, 0, 0, 1093, 1094, 5, 104, 0, 0, 1094, 1095, 5, 40, 0, 0, 1095, 260, 1, 0, 0, 0, 1096, 1097, 5, 97, 0, 0, 1097, 1098, 5, 114, 0, 0, 1098, 1099, 5, 99, 0, 0, 1099, 1100, 5, 99, 0, 0, 1100, 1101, 5, 111, 0, 0, 1101, 1102, 5, 115, 0, 0, 1102, 1103, 5, 101, 0, 0, 1103, 1104, 5, 99, 0, 0, 1104, 1105, 5, 104, 0, 0, 1105, 1106, 5, 40, 0, 0, 1106, 262, 1, 0, 0, 0, 1107, 1108, 5, 97, 0, 0, 1108, 1109, 5, 99, 0, 0, 1109, 1110, 5, 115, 0, 0, 1110, 1111, 5, 99, 0, 0, 1111, 1112, 5, 104, 0, 0, 1112, 1113, 5, 40, 0, 0, 1113, 264, 1, 0, 0, 0, 1114, 1115, 5, 102, 0, 0, 1115, 1116, 5, 97, 0, 0, 1116, 1117, 5, 99, 0, 0, 1117, 1118, 5, 116, 0, 0, 1118, 1119, 5, 111, 0, 0, 1119, 1120, 5, 114, 0, 0, 1120, 1121, 5, 105, 0, 0, 1121, 1122, 5, 97, 0, 0, 1122, 1123, 5, 108, 0, 0, 1123, 1124, 5, 40, 0, 0, 1124, 266, 1, 0, 0, 0, 1125, 1126, 5, 103, 0, 0, 1126, 1127, 5, 97, 0, 0, 1127, 1128, 5, 109, 0, 0, 1128, 1129, 5, 109, 0, 0, 1129, 1130, 5, 97, 0, 0, 1130, 1131, 5, 40, 0, 0, 1131, 268, 1, 0, 0, 0, 1132, 1133, 5, 100, 0, 0, 1133, 1134, 5, 101, 0, 0, 1134, 1135, 5, 114, 0, 0, 1135, 1136, 5, 105, 0, 0, 1136, 1137, 5, 118, 0, 0, 1137, 1138, 5, 97, 0, 0, 1138, 1139, 5, 116, 0, 0, 1139, 1140, 5, 105, 0, 0, 1140, 1141, 5, 118, 0, 0, 1141, 1142, 5, 101, 0, 0, 1142, 1143, 5, 40, 0, 0, 1143, 270, 1, 0, 0, 0, 1144, 1145, 5, 105, 0, 0, 1145, 1146, 5, 110, 0, 0, 1146, 1147, 5, 116, 0, 0, 1147, 1148, 5, 101, 0, 0, 1148, 1149, 5, 103, 0, 0, 1149, 1150, 5, 114, 0, 0, 1150, 1151, 5, 97, 0, 0, 1151, 1152, 5, 108, 0, 0, 1152, 1153, 5, 40, 0, 0, 1153, 272, 1, 0, 0, 0, 1154, 1155, 5, 108, 0, 0, 1155, 1156, 5, 105, 0, 0, 1156, 1157, 5, 109, 0, 0, 1157, 1158, 5, 105, 0, 0, 1158, 1159, 5, 116, 0, 0, 1159, 1160, 5, 40, 0, 0, 1160, 274, 1, 0, 0, 0, 1161, 1162, 5, 108, 0, 0, 1162, 1163, 5, 105, 0, 0, 1163, 1164, 5, 109, 0, 0, 1164, 1165, 5, 105, 0, 0, 1165, 1166, 5, 116, 0, 0, 1166, 1167, 5, 108, 0, 0, 1167, 1168, 5, 101, 0, 0, 1168, 1169, 5, 102, 0, 0, 1169, 1170, 5, 116, 0, 0, 1170, 1171, 5, 40, 0, 0, 1171, 276, 1, 0, 0, 0, 1172, 1173, 5, 108, 0, 0, 1173, 1174, 5, 105, 0, 0, 1174, 1175, 5, 109, 0, 0, 1175, 1176, 5, 105, 0, 0, 1176, 1177, 5, 116, 0, 0, 1177, 1178, 5, 114, 0, 0, 1178, 1179, 5, 105, 0, 0, 1179, 1180, 5, 103, 0, 0, 1180, 1181, 5, 104, 0, 0, 1181, 1182, 5, 116, 0, 0, 1182, 1183, 5, 40, 0, 0, 1183, 278, 1, 0, 0, 0, 1184, 1185, 5, 115, 0, 0, 1185, 1186, 5, 117, 0, 0, 1186, 1187, 5, 109, 0, 0, 1187, 1188, 5, 40, 0, 0, 1188, 280, 1, 0, 0, 0, 1189, 1190, 5, 112, 0, 0, 1190, 1191, 5, 114, 0, 0, 1191, 1192, 5, 111, 0, 0, 1192, 1193, 5, 100, 0, 0, 1193, 1194, 5, 117, 0, 0, 1194, 1195, 5, 99, 0, 0, 1195, 1196, 5, 116, 0, 0, 1196, 1197, 5, 40, 0, 0, 1197, 282, 1, 0, 0, 0, 1198, 1199, 5, 115, 0, 0, 1199, 1200, 5, 105, 0, 0, 1200, 1201, 5, 103, 0, 0, 1201, 1202, 5, 110, 0, 0, 1202, 1203, 5, 117, 0, 0, 1203, 1204, 5, 109, 0, 0, 1204, 1205, 5, 40, 0, 0, 1205, 284, 1, 0, 0, 0, 1206, 1207, 5, 115, 0, 0, 1207, 1208, 5, 103, 0, 0, 1208, 1209, 5, 110, 0, 0, 1209, 1210, 5, 40, 0, 0, 1210, 286, 1, 0, 0, 0, 1211, 1212, 5, 115, 0, 0, 1212, 1213, 5, 105, 0, 0, 1213, 1214, 5, 103, 0, 0, 1214, 1215, 5, 110, 0, 0, 1215, 1216, 5, 40, 0, 0, 1216, 288, 1, 0, 0, 0, 1217, 1218, 5, 97, 0, 0, 1218, 1219, 5, 98, 0, 0, 1219, 1220, 5, 115, 0, 0, 1220, 1221, 5, 40, 0, 0, 1221, 290, 1, 0, 0, 0, 1222, 1223, 5, 112, 0, 0, 1223, 1224, 5, 104, 0, 0, 1224, 1225, 5, 105, 0, 0, 1225, 1226, 5, 40, 0, 0, 1226, 292, 1, 0, 0, 0, 1227, 1228, 5, 112, 0, 0, 1228, 1229, 5, 114, 0, 0, 1229, 1230, 5, 105, 0, 0, 1230, 1231, 5, 109, 0, 0, 1231, 1232, 5, 101, 0, 0, 1232, 1233, 5, 40, 0, 0, 1233, 294, 1, 0, 0, 0, 1234, 1235, 5, 118, 0, 0, 1235, 1236, 5, 97, 0, 0, 1236, 1237, 5, 108, 0, 0, 1237, 1238, 5, 117, 0, 0, 1238, 1239, 5, 97, 0, 0, 1239, 1240, 5, 116, 0, 0, 1240, 1241, 5, 105, 0, 0, 1241, 1242, 5, 111, 0, 0, 1242, 1243, 5, 110, 0, 0, 1243, 1244, 5, 40, 0, 0, 1244, 296, 1, 0, 0, 0, 1245, 1246, 5, 99, 0, 0, 1246, 1247, 5, 97, 0, 0, 1247, 1248, 5, 114, 0, 0, 1248, 1249, 5, 100, 0, 0, 1249, 1250, 5, 40, 0, 0, 1250, 298, 1, 0, 0, 0, 1251, 1252, 5, 112, 0, 0, 1252, 1253, 5, 111, 0, 0, 1253, 1254, 5, 119, 0, 0, 1254, 1255, 5, 101, 0, 0, 1255, 1256, 5, 114, 0, 0, 1256, 1257, 5, 115, 0, 0, 1257, 1258, 5, 101, 0, 0, 1258, 1259, 5, 116, 0, 0, 1259, 1260, 5, 40, 0, 0, 1260, 300, 1, 0, 0, 0, 1261, 1262, 5, 117, 0, 0, 1262, 1263, 5, 110, 0, 0, 1263, 1264, 5, 105, 0, 0, 1264, 1265, 5, 111, 0, 0, 1265, 1266, 5, 110, 0, 0, 1266, 1267, 5, 40, 0, 0, 1267, 302, 1, 0, 0, 0, 1268, 1269, 5, 105, 0, 0, 1269, 1270, 5, 110, 0, 0, 1270, 1271, 5, 116, 0, 0, 1271, 1272, 5, 101, 0, 0, 1272, 1273, 5, 114, 0, 0, 1273, 1274, 5, 115, 0, 0, 1274, 1275, 5, 101, 0, 0, 1275, 1276, 5, 99, 0, 0, 1276, 1277, 5, 116, 0, 0, 1277, 1278, 5, 105, 0, 0, 1278, 1279, 5, 111, 0, 0, 1279, 1280, 5, 110, 0, 0, 1280, 1281, 5, 40, 0, 0, 1281, 304, 1, 0, 0, 0, 1282, 1283, 5, 99, 0, 0, 1283, 1284, 5, 111, 0, 0, 1284, 1285, 5, 109, 0, 0, 1285, 1286, 5, 112, 0, 0, 1286, 1287, 5, 108, 0, 0, 1287, 1288, 5, 101, 0, 0, 1288, 1289, 5, 109, 0, 0, 1289, 1290, 5, 101, 0, 0, 1290, 1291, 5, 110, 0, 0, 1291, 1292, 5, 116, 0, 0, 1292, 1293, 5, 40, 0, 0, 1293, 306, 1, 0, 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, 308, 1, 0, 0, 0, 1301, 1302, 5, 112, 0, 0, 1302, 1303, 5, 114, 0, 0, 1303, 1304, 5, 101, 0, 0, 1304, 1305, 5, 105, 0, 0, 1305, 1306, 5, 109, 0, 0, 1306, 1307, 5, 97, 0, 0, 1307, 1308, 5, 103, 0, 0, 1308, 1309, 5, 101, 0, 0, 1309, 1310, 5, 40, 0, 0, 1310, 310, 1, 0, 0, 0, 1311, 1312, 5, 102, 0, 0, 1312, 1313, 5, 108, 0, 0, 1313, 1314, 5, 111, 0, 0, 1314, 1315, 5, 111, 0, 0, 1315, 1316, 5, 114, 0, 0, 1316, 1317, 5, 40, 0, 0, 1317, 312, 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, 40, 0, 0, 1323, 314, 1, 0, 0, 0, 1324, 1325, 5, 99, 0, 0, 1325, 1326, 5, 101, 0, 0, 1326, 1327, 5, 105, 0, 0, 1327, 1328, 5, 108, 0, 0, 1328, 1329, 5, 105, 0, 0, 1329, 1330, 5, 110, 0, 0, 1330, 1331, 5, 103, 0, 0, 1331, 1332, 5, 40, 0, 0, 1332, 316, 1, 0, 0, 0, 1333, 1334, 5, 114, 0, 0, 1334, 1335, 5, 111, 0, 0, 1335, 1336, 5, 117, 0, 0, 1336, 1337, 5, 110, 0, 0, 1337, 1338, 5, 100, 0, 0, 1338, 1339, 5, 40, 0, 0, 1339, 318, 1, 0, 0, 0, 1340, 1341, 5, 109, 0, 0, 1341, 1342, 5, 105, 0, 0, 1342, 1343, 5, 110, 0, 0, 1343, 1344, 5, 40, 0, 0, 1344, 320, 1, 0, 0, 0, 1345, 1346, 5, 109, 0, 0, 1346, 1347, 5, 97, 0, 0, 1347, 1348, 5, 120, 0, 0, 1348, 1349, 5, 40, 0, 0, 1349, 322, 1, 0, 0, 0, 1350, 1351, 5, 97, 0, 0, 1351, 1352, 5, 114, 0, 0, 1352, 1353, 5, 103, 0, 0, 1353, 1354, 5, 109, 0, 0, 1354, 1355, 5, 97, 0, 0, 1355, 1356, 5, 120, 0, 0, 1356, 1357, 5, 40, 0, 0, 1357, 324, 1, 0, 0, 0, 1358, 1359, 5, 97, 0, 0, 1359, 1360, 5, 114, 0, 0, 1360, 1361, 5, 103, 0, 0, 1361, 1362, 5, 109, 0, 0, 1362, 1363, 5, 105, 0, 0, 1363, 1364, 5, 110, 0, 0, 1364, 1365, 5, 40, 0, 0, 1365, 326, 1, 0, 0, 0, 1366, 1367, 5, 103, 0, 0, 1367, 1368, 5, 99, 0, 0, 1368, 1369, 5, 100, 0, 0, 1369, 1370, 5, 40, 0, 0, 1370, 328, 1, 0, 0, 0, 1371, 1372, 5, 108, 0, 0, 1372, 1373, 5, 99, 0, 0, 1373, 1374, 5, 109, 0, 0, 1374, 1375, 5, 40, 0, 0, 1375, 330, 1, 0, 0, 0, 1376, 1377, 5, 98, 0, 0, 1377, 1378, 5, 105, 0, 0, 1378, 1379, 5, 110, 0, 0, 1379, 1380, 5, 111, 0, 0, 1380, 1381, 5, 109, 0, 0, 1381, 1382, 5, 105, 0, 0, 1382, 1383, 5, 97, 0, 0, 1383, 1384, 5, 108, 0, 0, 1384, 1385, 5, 40, 0, 0, 1385, 332, 1, 0, 0, 0, 1386, 1387, 5, 105, 0, 0, 1387, 1388, 5, 118, 0, 0, 1388, 1389, 5, 101, 0, 0, 1389, 1390, 5, 114, 0, 0, 1390, 1391, 5, 115, 0, 0, 1391, 1392, 5, 111, 0, 0, 1392, 1393, 5, 110, 0, 0, 1393, 1394, 5, 40, 0, 0, 1394, 334, 1, 0, 0, 0, 1395, 1396, 5, 97, 0, 0, 1396, 1397, 5, 108, 0, 0, 1397, 1398, 5, 101, 0, 0, 1398, 1399, 5, 112, 0, 0, 1399, 1400, 5, 104, 0, 0, 1400, 1401, 5, 40, 0, 0, 1401, 336, 1, 0, 0, 0, 1402, 1403, 5, 101, 0, 0, 1403, 1404, 5, 114, 0, 0, 1404, 1405, 5, 102, 0, 0, 1405, 1406, 5, 40, 0, 0, 1406, 338, 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, 99, 0, 0, 1411, 1412, 5, 40, 0, 0, 1412, 340, 1, 0, 0, 0, 1413, 1414, 5, 101, 0, 0, 1414, 1415, 5, 114, 0, 0, 1415, 1416, 5, 102, 0, 0, 1416, 1417, 5, 105, 0, 0, 1417, 1418, 5, 40, 0, 0, 1418, 342, 1, 0, 0, 0, 1419, 1420, 5, 69, 0, 0, 1420, 1421, 5, 105, 0, 0, 1421, 1422, 5, 40, 0, 0, 1422, 344, 1, 0, 0, 0, 1423, 1424, 5, 108, 0, 0, 1424, 1425, 5, 105, 0, 0, 1425, 1426, 5, 40, 0, 0, 1426, 346, 1, 0, 0, 0, 1427, 1428, 5, 112, 0, 0, 1428, 1429, 5, 111, 0, 0, 1429, 1430, 5, 108, 0, 0, 1430, 1431, 5, 121, 0, 0, 1431, 1432, 5, 103, 0, 0, 1432, 1433, 5, 97, 0, 0, 1433, 1434, 5, 109, 0, 0, 1434, 1435, 5, 109, 0, 0, 1435, 1436, 5, 97, 0, 0, 1436, 1437, 5, 40, 0, 0, 1437, 348, 1, 0, 0, 0, 1438, 1439, 5, 100, 0, 0, 1439, 1440, 5, 105, 0, 0, 1440, 1441, 5, 103, 0, 0, 1441, 1442, 5, 97, 0, 0, 1442, 1443, 5, 109, 0, 0, 1443, 1444, 5, 109, 0, 0, 1444, 1445, 5, 97, 0, 0, 1445, 1446, 5, 40, 0, 0, 1446, 350, 1, 0, 0, 0, 1447, 1448, 5, 83, 0, 0, 1448, 1449, 5, 105, 0, 0, 1449, 1450, 5, 40, 0, 0, 1450, 352, 1, 0, 0, 0, 1451, 1452, 5, 67, 0, 0, 1452, 1453, 5, 105, 0, 0, 1453, 1454, 5, 40, 0, 0, 1454, 354, 1, 0, 0, 0, 1455, 1456, 5, 83, 0, 0, 1456, 1457, 5, 104, 0, 0, 1457, 1458, 5, 105, 0, 0, 1458, 1459, 5, 40, 0, 0, 1459, 356, 1, 0, 0, 0, 1460, 1461, 5, 67, 0, 0, 1461, 1462, 5, 104, 0, 0, 1462, 1463, 5, 105, 0, 0, 1463, 1464, 5, 40, 0, 0, 1464, 358, 1, 0, 0, 0, 1465, 1466, 5, 116, 0, 0, 1466, 1467, 5, 114, 0, 0, 1467, 1468, 5, 117, 0, 0, 1468, 1469, 5, 110, 0, 0, 1469, 1470, 5, 99, 0, 0, 1470, 1471, 5, 40, 0, 0, 1471, 360, 1, 0, 0, 0, 1472, 1473, 5, 99, 0, 0, 1473, 1474, 5, 111, 0, 0, 1474, 1475, 5, 110, 0, 0, 1475, 1476, 5, 106, 0, 0, 1476, 1477, 5, 117, 0, 0, 1477, 1478, 5, 103, 0, 0, 1478, 1479, 5, 97, 0, 0, 1479, 1480, 5, 116, 0, 0, 1480, 1481, 5, 101, 0, 0, 1481, 1482, 5, 40, 0, 0, 1482, 362, 1, 0, 0, 0, 1483, 1484, 5, 99, 0, 0, 1484, 1485, 5, 111, 0, 0, 1485, 1486, 5, 110, 0, 0, 1486, 1487, 5, 106, 0, 0, 1487, 1488, 5, 40, 0, 0, 1488, 364, 1, 0, 0, 0, 1489, 1490, 5, 97, 0, 0, 1490, 1491, 5, 114, 0, 0, 1491, 1492, 5, 103, 0, 0, 1492, 1493, 5, 40, 0, 0, 1493, 366, 1, 0, 0, 0, 1494, 1495, 5, 100, 0, 0, 1495, 1496, 5, 101, 0, 0, 1496, 1497, 5, 116, 0, 0, 1497, 1498, 5, 40, 0, 0, 1498, 368, 1, 0, 0, 0, 1499, 1500, 5, 100, 0, 0, 1500, 1501, 5, 111, 0, 0, 1501, 1502, 5, 109, 0, 0, 1502, 1503, 5, 97, 0, 0, 1503, 1504, 5, 105, 0, 0, 1504, 1505, 5, 110, 0, 0, 1505, 1506, 5, 40, 0, 0, 1506, 370, 1, 0, 0, 0, 1507, 1508, 5, 112, 0, 0, 1508, 1509, 5, 105, 0, 0, 1509, 1510, 5, 101, 0, 0, 1510, 1511, 5, 99, 0, 0, 1511, 1512, 5, 101, 0, 0, 1512, 1513, 5, 119, 0, 0, 1513, 1514, 5, 105, 0, 0, 1514, 1515, 5, 115, 0, 0, 1515, 1516, 5, 101, 0, 0, 1516, 1517, 5, 40, 0, 0, 1517, 372, 1, 0, 0, 0, 1518, 1519, 5, 97, 0, 0, 1519, 1520, 5, 112, 0, 0, 1520, 1521, 5, 112, 0, 0, 1521, 1522, 5, 108, 0, 0, 1522, 1523, 5, 121, 0, 0, 1523, 1524, 5, 40, 0, 0, 1524, 374, 1, 0, 0, 0, 1525, 1526, 5, 108, 0, 0, 1526, 1527, 5, 97, 0, 0, 1527, 1528, 5, 109, 0, 0, 1528, 1529, 5, 98, 0, 0, 1529, 1530, 5, 100, 0, 0, 1530, 1531, 5, 97, 0, 0, 1531, 1532, 5, 40, 0, 0, 1532, 376, 1, 0, 0, 0, 1533, 1535, 5, 13, 0, 0, 1534, 1533, 1, 0, 0, 0, 1534, 1535, 1, 0, 0, 0, 1535, 1536, 1, 0, 0, 0, 1536, 1538, 5, 10, 0, 0, 1537, 1534, 1, 0, 0, 0, 1538, 1539, 1, 0, 0, 0, 1539, 1537, 1, 0, 0, 0, 1539, 1540, 1, 0, 0, 0, 1540, 1541, 1, 0, 0, 0, 1541, 1542, 6, 188, 0, 0, 1542, 378, 1, 0, 0, 0, 1543, 1545, 7, 0, 0, 0, 1544, 1546, 7, 1, 0, 0, 1545, 1544, 1, 0, 0, 0, 1545, 1546, 1, 0, 0, 0, 1546, 1548, 1, 0, 0, 0, 1547, 1549, 2, 48, 57, 0, 1548, 1547, 1, 0, 0, 0, 1549, 1550, 1, 0, 0, 0, 1550, 1548, 1, 0, 0, 0, 1550, 1551, 1, 0, 0, 0, 1551, 380, 1, 0, 0, 0, 1552, 1554, 2, 48, 57, 0, 1553, 1552, 1, 0, 0, 0, 1554, 1555, 1, 0, 0, 0, 1555, 1553, 1, 0, 0, 0, 1555, 1556, 1, 0, 0, 0, 1556, 1557, 1, 0, 0, 0, 1557, 1561, 5, 46, 0, 0, 1558, 1560, 2, 48, 57, 0, 1559, 1558, 1, 0, 0, 0, 1560, 1563, 1, 0, 0, 0, 1561, 1559, 1, 0, 0, 0, 1561, 1562, 1, 0, 0, 0, 1562, 1565, 1, 0, 0, 0, 1563, 1561, 1, 0, 0, 0, 1564, 1566, 3, 379, 189, 0, 1565, 1564, 1, 0, 0, 0, 1565, 1566, 1, 0, 0, 0, 1566, 1568, 1, 0, 0, 0, 1567, 1569, 5, 105, 0, 0, 1568, 1567, 1, 0, 0, 0, 1568, 1569, 1, 0, 0, 0, 1569, 1586, 1, 0, 0, 0, 1570, 1572, 5, 46, 0, 0, 1571, 1570, 1, 0, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 1574, 1, 0, 0, 0, 1573, 1575, 2, 48, 57, 0, 1574, 1573, 1, 0, 0, 0, 1575, 1576, 1, 0, 0, 0, 1576, 1574, 1, 0, 0, 0, 1576, 1577, 1, 0, 0, 0, 1577, 1579, 1, 0, 0, 0, 1578, 1580, 3, 379, 189, 0, 1579, 1578, 1, 0, 0, 0, 1579, 1580, 1, 0, 0, 0, 1580, 1582, 1, 0, 0, 0, 1581, 1583, 5, 105, 0, 0, 1582, 1581, 1, 0, 0, 0, 1582, 1583, 1, 0, 0, 0, 1583, 1586, 1, 0, 0, 0, 1584, 1586, 5, 105, 0, 0, 1585, 1553, 1, 0, 0, 0, 1585, 1571, 1, 0, 0, 0, 1585, 1584, 1, 0, 0, 0, 1586, 382, 1, 0, 0, 0, 1587, 1588, 5, 67, 0, 0, 1588, 1606, 5, 67, 0, 0, 1589, 1590, 5, 82, 0, 0, 1590, 1606, 5, 82, 0, 0, 1591, 1592, 5, 81, 0, 0, 1592, 1606, 5, 81, 0, 0, 1593, 1594, 5, 90, 0, 0, 1594, 1606, 5, 90, 0, 0, 1595, 1596, 5, 66, 0, 0, 1596, 1606, 5, 66, 0, 0, 1597, 1598, 5, 90, 0, 0, 1598, 1599, 5, 90, 0, 0, 1599, 1606, 5, 42, 0, 0, 1600, 1601, 5, 90, 0, 0, 1601, 1602, 5, 90, 0, 0, 1602, 1606, 5, 43, 0, 0, 1603, 1604, 5, 80, 0, 0, 1604, 1606, 5, 80, 0, 0, 1605, 1587, 1, 0, 0, 0, 1605, 1589, 1, 0, 0, 0, 1605, 1591, 1, 0, 0, 0, 1605, 1593, 1, 0, 0, 0, 1605, 1595, 1, 0, 0, 0, 1605, 1597, 1, 0, 0, 0, 1605, 1600, 1, 0, 0, 0, 1605, 1603, 1, 0, 0, 0, 1606, 384, 1, 0, 0, 0, 1607, 1608, 5, 116, 0, 0, 1608, 1609, 5, 114, 0, 0, 1609, 1610, 5, 117, 0, 0, 1610, 1626, 5, 101, 0, 0, 1611, 1612, 5, 84, 0, 0, 1612, 1613, 5, 114, 0, 0, 1613, 1614, 5, 117, 0, 0, 1614, 1626, 5, 101, 0, 0, 1615, 1616, 5, 102, 0, 0, 1616, 1617, 5, 97, 0, 0, 1617, 1618, 5, 108, 0, 0, 1618, 1619, 5, 115, 0, 0, 1619, 1626, 5, 101, 0, 0, 1620, 1621, 5, 70, 0, 0, 1621, 1622, 5, 97, 0, 0, 1622, 1623, 5, 108, 0, 0, 1623, 1624, 5, 115, 0, 0, 1624, 1626, 5, 101, 0, 0, 1625, 1607, 1, 0, 0, 0, 1625, 1611, 1, 0, 0, 0, 1625, 1615, 1, 0, 0, 0, 1625, 1620, 1, 0, 0, 0, 1626, 386, 1, 0, 0, 0, 1627, 1628, 5, 78, 0, 0, 1628, 1629, 5, 97, 0, 0, 1629, 1630, 5, 78, 0, 0, 1630, 388, 1, 0, 0, 0, 1631, 1633, 7, 2, 0, 0, 1632, 1631, 1, 0, 0, 0, 1633, 1634, 1, 0, 0, 0, 1634, 1632, 1, 0, 0, 0, 1634, 1635, 1, 0, 0, 0, 1635, 1644, 1, 0, 0, 0, 1636, 1638, 5, 95, 0, 0, 1637, 1639, 7, 3, 0, 0, 1638, 1637, 1, 0, 0, 0, 1639, 1640, 1, 0, 0, 0, 1640, 1638, 1, 0, 0, 0, 1640, 1641, 1, 0, 0, 0, 1641, 1643, 1, 0, 0, 0, 1642, 1636, 1, 0, 0, 0, 1643, 1646, 1, 0, 0, 0, 1644, 1642, 1, 0, 0, 0, 1644, 1645, 1, 0, 0, 0, 1645, 390, 1, 0, 0, 0, 1646, 1644, 1, 0, 0, 0, 1647, 1648, 5, 47, 0, 0, 1648, 1649, 5, 47, 0, 0, 1649, 1653, 1, 0, 0, 0, 1650, 1652, 8, 4, 0, 0, 1651, 1650, 1, 0, 0, 0, 1652, 1655, 1, 0, 0, 0, 1653, 1651, 1, 0, 0, 0, 1653, 1654, 1, 0, 0, 0, 1654, 1660, 1, 0, 0, 0, 1655, 1653, 1, 0, 0, 0, 1656, 1658, 5, 13, 0, 0, 1657, 1656, 1, 0, 0, 0, 1657, 1658, 1, 0, 0, 0, 1658, 1659, 1, 0, 0, 0, 1659, 1661, 5, 10, 0, 0, 1660, 1657, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 1674, 1, 0, 0, 0, 1662, 1663, 5, 47, 0, 0, 1663, 1664, 5, 42, 0, 0, 1664, 1668, 1, 0, 0, 0, 1665, 1667, 9, 0, 0, 0, 1666, 1665, 1, 0, 0, 0, 1667, 1670, 1, 0, 0, 0, 1668, 1669, 1, 0, 0, 0, 1668, 1666, 1, 0, 0, 0, 1669, 1671, 1, 0, 0, 0, 1670, 1668, 1, 0, 0, 0, 1671, 1672, 5, 42, 0, 0, 1672, 1674, 5, 47, 0, 0, 1673, 1647, 1, 0, 0, 0, 1673, 1662, 1, 0, 0, 0, 1674, 1675, 1, 0, 0, 0, 1675, 1676, 6, 195, 0, 0, 1676, 392, 1, 0, 0, 0, 1677, 1679, 7, 5, 0, 0, 1678, 1677, 1, 0, 0, 0, 1679, 1680, 1, 0, 0, 0, 1680, 1678, 1, 0, 0, 0, 1680, 1681, 1, 0, 0, 0, 1681, 1682, 1, 0, 0, 0, 1682, 1683, 6, 196, 0, 0, 1683, 394, 1, 0, 0, 0, 25, 0, 1534, 1539, 1545, 1550, 1555, 1561, 1565, 1568, 1571, 1576, 1579, 1582, 1585, 1605, 1625, 1634, 1640, 1644, 1653, 1657, 1660, 1668, 1673, 1680, 1, 6, 0, 0] \ No newline at end of file +[4, 0, 200, 1726, 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, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 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, 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, 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, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 3, 192, 1577, 8, 192, 1, 192, 4, 192, 1580, 8, 192, 11, 192, 12, 192, 1581, 1, 192, 1, 192, 1, 193, 1, 193, 3, 193, 1588, 8, 193, 1, 193, 4, 193, 1591, 8, 193, 11, 193, 12, 193, 1592, 1, 194, 4, 194, 1596, 8, 194, 11, 194, 12, 194, 1597, 1, 194, 1, 194, 5, 194, 1602, 8, 194, 10, 194, 12, 194, 1605, 9, 194, 1, 194, 3, 194, 1608, 8, 194, 1, 194, 3, 194, 1611, 8, 194, 1, 194, 3, 194, 1614, 8, 194, 1, 194, 4, 194, 1617, 8, 194, 11, 194, 12, 194, 1618, 1, 194, 3, 194, 1622, 8, 194, 1, 194, 3, 194, 1625, 8, 194, 1, 194, 3, 194, 1628, 8, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 3, 195, 1648, 8, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 3, 196, 1668, 8, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 4, 198, 1675, 8, 198, 11, 198, 12, 198, 1676, 1, 198, 1, 198, 4, 198, 1681, 8, 198, 11, 198, 12, 198, 1682, 5, 198, 1685, 8, 198, 10, 198, 12, 198, 1688, 9, 198, 1, 199, 1, 199, 1, 199, 1, 199, 5, 199, 1694, 8, 199, 10, 199, 12, 199, 1697, 9, 199, 1, 199, 3, 199, 1700, 8, 199, 1, 199, 3, 199, 1703, 8, 199, 1, 199, 1, 199, 1, 199, 1, 199, 5, 199, 1709, 8, 199, 10, 199, 12, 199, 1712, 9, 199, 1, 199, 1, 199, 3, 199, 1716, 8, 199, 1, 199, 1, 199, 1, 200, 4, 200, 1721, 8, 200, 11, 200, 12, 200, 1722, 1, 200, 1, 200, 1, 1710, 0, 201, 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, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 0, 389, 194, 391, 195, 393, 196, 395, 197, 397, 198, 399, 199, 401, 200, 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, 1757, 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, 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, 0, 385, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 1, 403, 1, 0, 0, 0, 3, 405, 1, 0, 0, 0, 5, 407, 1, 0, 0, 0, 7, 409, 1, 0, 0, 0, 9, 411, 1, 0, 0, 0, 11, 413, 1, 0, 0, 0, 13, 417, 1, 0, 0, 0, 15, 419, 1, 0, 0, 0, 17, 421, 1, 0, 0, 0, 19, 425, 1, 0, 0, 0, 21, 435, 1, 0, 0, 0, 23, 438, 1, 0, 0, 0, 25, 444, 1, 0, 0, 0, 27, 447, 1, 0, 0, 0, 29, 459, 1, 0, 0, 0, 31, 461, 1, 0, 0, 0, 33, 464, 1, 0, 0, 0, 35, 471, 1, 0, 0, 0, 37, 473, 1, 0, 0, 0, 39, 482, 1, 0, 0, 0, 41, 484, 1, 0, 0, 0, 43, 492, 1, 0, 0, 0, 45, 494, 1, 0, 0, 0, 47, 497, 1, 0, 0, 0, 49, 500, 1, 0, 0, 0, 51, 502, 1, 0, 0, 0, 53, 504, 1, 0, 0, 0, 55, 506, 1, 0, 0, 0, 57, 509, 1, 0, 0, 0, 59, 511, 1, 0, 0, 0, 61, 513, 1, 0, 0, 0, 63, 515, 1, 0, 0, 0, 65, 519, 1, 0, 0, 0, 67, 523, 1, 0, 0, 0, 69, 525, 1, 0, 0, 0, 71, 529, 1, 0, 0, 0, 73, 532, 1, 0, 0, 0, 75, 540, 1, 0, 0, 0, 77, 543, 1, 0, 0, 0, 79, 552, 1, 0, 0, 0, 81, 555, 1, 0, 0, 0, 83, 557, 1, 0, 0, 0, 85, 564, 1, 0, 0, 0, 87, 566, 1, 0, 0, 0, 89, 574, 1, 0, 0, 0, 91, 577, 1, 0, 0, 0, 93, 584, 1, 0, 0, 0, 95, 586, 1, 0, 0, 0, 97, 588, 1, 0, 0, 0, 99, 590, 1, 0, 0, 0, 101, 594, 1, 0, 0, 0, 103, 598, 1, 0, 0, 0, 105, 601, 1, 0, 0, 0, 107, 604, 1, 0, 0, 0, 109, 606, 1, 0, 0, 0, 111, 608, 1, 0, 0, 0, 113, 611, 1, 0, 0, 0, 115, 613, 1, 0, 0, 0, 117, 615, 1, 0, 0, 0, 119, 617, 1, 0, 0, 0, 121, 622, 1, 0, 0, 0, 123, 629, 1, 0, 0, 0, 125, 635, 1, 0, 0, 0, 127, 640, 1, 0, 0, 0, 129, 646, 1, 0, 0, 0, 131, 652, 1, 0, 0, 0, 133, 657, 1, 0, 0, 0, 135, 661, 1, 0, 0, 0, 137, 666, 1, 0, 0, 0, 139, 671, 1, 0, 0, 0, 141, 676, 1, 0, 0, 0, 143, 681, 1, 0, 0, 0, 145, 688, 1, 0, 0, 0, 147, 693, 1, 0, 0, 0, 149, 698, 1, 0, 0, 0, 151, 705, 1, 0, 0, 0, 153, 710, 1, 0, 0, 0, 155, 718, 1, 0, 0, 0, 157, 726, 1, 0, 0, 0, 159, 734, 1, 0, 0, 0, 161, 744, 1, 0, 0, 0, 163, 752, 1, 0, 0, 0, 165, 762, 1, 0, 0, 0, 167, 770, 1, 0, 0, 0, 169, 776, 1, 0, 0, 0, 171, 782, 1, 0, 0, 0, 173, 788, 1, 0, 0, 0, 175, 794, 1, 0, 0, 0, 177, 802, 1, 0, 0, 0, 179, 808, 1, 0, 0, 0, 181, 816, 1, 0, 0, 0, 183, 822, 1, 0, 0, 0, 185, 830, 1, 0, 0, 0, 187, 836, 1, 0, 0, 0, 189, 840, 1, 0, 0, 0, 191, 846, 1, 0, 0, 0, 193, 850, 1, 0, 0, 0, 195, 856, 1, 0, 0, 0, 197, 860, 1, 0, 0, 0, 199, 868, 1, 0, 0, 0, 201, 874, 1, 0, 0, 0, 203, 879, 1, 0, 0, 0, 205, 885, 1, 0, 0, 0, 207, 890, 1, 0, 0, 0, 209, 898, 1, 0, 0, 0, 211, 904, 1, 0, 0, 0, 213, 911, 1, 0, 0, 0, 215, 919, 1, 0, 0, 0, 217, 925, 1, 0, 0, 0, 219, 934, 1, 0, 0, 0, 221, 941, 1, 0, 0, 0, 223, 949, 1, 0, 0, 0, 225, 955, 1, 0, 0, 0, 227, 964, 1, 0, 0, 0, 229, 971, 1, 0, 0, 0, 231, 979, 1, 0, 0, 0, 233, 985, 1, 0, 0, 0, 235, 994, 1, 0, 0, 0, 237, 1001, 1, 0, 0, 0, 239, 1009, 1, 0, 0, 0, 241, 1018, 1, 0, 0, 0, 243, 1028, 1, 0, 0, 0, 245, 1035, 1, 0, 0, 0, 247, 1046, 1, 0, 0, 0, 249, 1053, 1, 0, 0, 0, 251, 1061, 1, 0, 0, 0, 253, 1068, 1, 0, 0, 0, 255, 1077, 1, 0, 0, 0, 257, 1086, 1, 0, 0, 0, 259, 1096, 1, 0, 0, 0, 261, 1104, 1, 0, 0, 0, 263, 1115, 1, 0, 0, 0, 265, 1122, 1, 0, 0, 0, 267, 1133, 1, 0, 0, 0, 269, 1140, 1, 0, 0, 0, 271, 1152, 1, 0, 0, 0, 273, 1162, 1, 0, 0, 0, 275, 1169, 1, 0, 0, 0, 277, 1180, 1, 0, 0, 0, 279, 1192, 1, 0, 0, 0, 281, 1197, 1, 0, 0, 0, 283, 1206, 1, 0, 0, 0, 285, 1214, 1, 0, 0, 0, 287, 1219, 1, 0, 0, 0, 289, 1225, 1, 0, 0, 0, 291, 1230, 1, 0, 0, 0, 293, 1235, 1, 0, 0, 0, 295, 1242, 1, 0, 0, 0, 297, 1253, 1, 0, 0, 0, 299, 1259, 1, 0, 0, 0, 301, 1269, 1, 0, 0, 0, 303, 1276, 1, 0, 0, 0, 305, 1290, 1, 0, 0, 0, 307, 1302, 1, 0, 0, 0, 309, 1309, 1, 0, 0, 0, 311, 1319, 1, 0, 0, 0, 313, 1326, 1, 0, 0, 0, 315, 1332, 1, 0, 0, 0, 317, 1341, 1, 0, 0, 0, 319, 1348, 1, 0, 0, 0, 321, 1353, 1, 0, 0, 0, 323, 1358, 1, 0, 0, 0, 325, 1366, 1, 0, 0, 0, 327, 1374, 1, 0, 0, 0, 329, 1379, 1, 0, 0, 0, 331, 1384, 1, 0, 0, 0, 333, 1394, 1, 0, 0, 0, 335, 1403, 1, 0, 0, 0, 337, 1410, 1, 0, 0, 0, 339, 1415, 1, 0, 0, 0, 341, 1421, 1, 0, 0, 0, 343, 1427, 1, 0, 0, 0, 345, 1431, 1, 0, 0, 0, 347, 1435, 1, 0, 0, 0, 349, 1446, 1, 0, 0, 0, 351, 1455, 1, 0, 0, 0, 353, 1459, 1, 0, 0, 0, 355, 1463, 1, 0, 0, 0, 357, 1468, 1, 0, 0, 0, 359, 1473, 1, 0, 0, 0, 361, 1478, 1, 0, 0, 0, 363, 1489, 1, 0, 0, 0, 365, 1494, 1, 0, 0, 0, 367, 1501, 1, 0, 0, 0, 369, 1512, 1, 0, 0, 0, 371, 1519, 1, 0, 0, 0, 373, 1530, 1, 0, 0, 0, 375, 1536, 1, 0, 0, 0, 377, 1541, 1, 0, 0, 0, 379, 1549, 1, 0, 0, 0, 381, 1560, 1, 0, 0, 0, 383, 1567, 1, 0, 0, 0, 385, 1579, 1, 0, 0, 0, 387, 1585, 1, 0, 0, 0, 389, 1627, 1, 0, 0, 0, 391, 1647, 1, 0, 0, 0, 393, 1667, 1, 0, 0, 0, 395, 1669, 1, 0, 0, 0, 397, 1674, 1, 0, 0, 0, 399, 1715, 1, 0, 0, 0, 401, 1720, 1, 0, 0, 0, 403, 404, 5, 33, 0, 0, 404, 2, 1, 0, 0, 0, 405, 406, 5, 94, 0, 0, 406, 4, 1, 0, 0, 0, 407, 408, 5, 45, 0, 0, 408, 6, 1, 0, 0, 0, 409, 410, 5, 43, 0, 0, 410, 8, 1, 0, 0, 0, 411, 412, 5, 42, 0, 0, 412, 10, 1, 0, 0, 0, 413, 414, 5, 46, 0, 0, 414, 415, 5, 46, 0, 0, 415, 416, 5, 46, 0, 0, 416, 12, 1, 0, 0, 0, 417, 418, 5, 8230, 0, 0, 418, 14, 1, 0, 0, 0, 419, 420, 5, 47, 0, 0, 420, 16, 1, 0, 0, 0, 421, 422, 5, 109, 0, 0, 422, 423, 5, 111, 0, 0, 423, 424, 5, 100, 0, 0, 424, 18, 1, 0, 0, 0, 425, 426, 5, 105, 0, 0, 426, 427, 5, 110, 0, 0, 427, 428, 5, 116, 0, 0, 428, 429, 5, 101, 0, 0, 429, 430, 5, 114, 0, 0, 430, 431, 5, 115, 0, 0, 431, 432, 5, 101, 0, 0, 432, 433, 5, 99, 0, 0, 433, 434, 5, 116, 0, 0, 434, 20, 1, 0, 0, 0, 435, 436, 5, 47, 0, 0, 436, 437, 5, 92, 0, 0, 437, 22, 1, 0, 0, 0, 438, 439, 5, 117, 0, 0, 439, 440, 5, 110, 0, 0, 440, 441, 5, 105, 0, 0, 441, 442, 5, 116, 0, 0, 442, 443, 5, 101, 0, 0, 443, 24, 1, 0, 0, 0, 444, 445, 5, 92, 0, 0, 445, 446, 5, 47, 0, 0, 446, 26, 1, 0, 0, 0, 447, 448, 5, 115, 0, 0, 448, 449, 5, 101, 0, 0, 449, 450, 5, 116, 0, 0, 450, 451, 5, 115, 0, 0, 451, 452, 5, 117, 0, 0, 452, 453, 5, 98, 0, 0, 453, 454, 5, 116, 0, 0, 454, 455, 5, 114, 0, 0, 455, 456, 5, 97, 0, 0, 456, 457, 5, 99, 0, 0, 457, 458, 5, 116, 0, 0, 458, 28, 1, 0, 0, 0, 459, 460, 5, 92, 0, 0, 460, 30, 1, 0, 0, 0, 461, 462, 5, 105, 0, 0, 462, 463, 5, 110, 0, 0, 463, 32, 1, 0, 0, 0, 464, 465, 5, 115, 0, 0, 465, 466, 5, 117, 0, 0, 466, 467, 5, 98, 0, 0, 467, 468, 5, 115, 0, 0, 468, 469, 5, 101, 0, 0, 469, 470, 5, 116, 0, 0, 470, 34, 1, 0, 0, 0, 471, 472, 5, 8838, 0, 0, 472, 36, 1, 0, 0, 0, 473, 474, 5, 115, 0, 0, 474, 475, 5, 117, 0, 0, 475, 476, 5, 112, 0, 0, 476, 477, 5, 101, 0, 0, 477, 478, 5, 114, 0, 0, 478, 479, 5, 115, 0, 0, 479, 480, 5, 101, 0, 0, 480, 481, 5, 116, 0, 0, 481, 38, 1, 0, 0, 0, 482, 483, 5, 8839, 0, 0, 483, 40, 1, 0, 0, 0, 484, 485, 5, 100, 0, 0, 485, 486, 5, 105, 0, 0, 486, 487, 5, 118, 0, 0, 487, 488, 5, 105, 0, 0, 488, 489, 5, 100, 0, 0, 489, 490, 5, 101, 0, 0, 490, 491, 5, 115, 0, 0, 491, 42, 1, 0, 0, 0, 492, 493, 5, 124, 0, 0, 493, 44, 1, 0, 0, 0, 494, 495, 5, 62, 0, 0, 495, 496, 5, 61, 0, 0, 496, 46, 1, 0, 0, 0, 497, 498, 5, 60, 0, 0, 498, 499, 5, 61, 0, 0, 499, 48, 1, 0, 0, 0, 500, 501, 5, 62, 0, 0, 501, 50, 1, 0, 0, 0, 502, 503, 5, 60, 0, 0, 503, 52, 1, 0, 0, 0, 504, 505, 5, 61, 0, 0, 505, 54, 1, 0, 0, 0, 506, 507, 5, 60, 0, 0, 507, 508, 5, 62, 0, 0, 508, 56, 1, 0, 0, 0, 509, 510, 5, 8801, 0, 0, 510, 58, 1, 0, 0, 0, 511, 512, 5, 40, 0, 0, 512, 60, 1, 0, 0, 0, 513, 514, 5, 41, 0, 0, 514, 62, 1, 0, 0, 0, 515, 516, 5, 110, 0, 0, 516, 517, 5, 111, 0, 0, 517, 518, 5, 116, 0, 0, 518, 64, 1, 0, 0, 0, 519, 520, 5, 97, 0, 0, 520, 521, 5, 110, 0, 0, 521, 522, 5, 100, 0, 0, 522, 66, 1, 0, 0, 0, 523, 524, 5, 38, 0, 0, 524, 68, 1, 0, 0, 0, 525, 526, 5, 120, 0, 0, 526, 527, 5, 111, 0, 0, 527, 528, 5, 114, 0, 0, 528, 70, 1, 0, 0, 0, 529, 530, 5, 111, 0, 0, 530, 531, 5, 114, 0, 0, 531, 72, 1, 0, 0, 0, 532, 533, 5, 105, 0, 0, 533, 534, 5, 109, 0, 0, 534, 535, 5, 112, 0, 0, 535, 536, 5, 108, 0, 0, 536, 537, 5, 105, 0, 0, 537, 538, 5, 101, 0, 0, 538, 539, 5, 115, 0, 0, 539, 74, 1, 0, 0, 0, 540, 541, 5, 45, 0, 0, 541, 542, 5, 62, 0, 0, 542, 76, 1, 0, 0, 0, 543, 544, 5, 112, 0, 0, 544, 545, 5, 114, 0, 0, 545, 546, 5, 111, 0, 0, 546, 547, 5, 118, 0, 0, 547, 548, 5, 105, 0, 0, 548, 549, 5, 100, 0, 0, 549, 550, 5, 101, 0, 0, 550, 551, 5, 100, 0, 0, 551, 78, 1, 0, 0, 0, 552, 553, 5, 61, 0, 0, 553, 554, 5, 62, 0, 0, 554, 80, 1, 0, 0, 0, 555, 556, 5, 58, 0, 0, 556, 82, 1, 0, 0, 0, 557, 558, 5, 102, 0, 0, 558, 559, 5, 111, 0, 0, 559, 560, 5, 114, 0, 0, 560, 561, 5, 97, 0, 0, 561, 562, 5, 108, 0, 0, 562, 563, 5, 108, 0, 0, 563, 84, 1, 0, 0, 0, 564, 565, 5, 8704, 0, 0, 565, 86, 1, 0, 0, 0, 566, 567, 5, 101, 0, 0, 567, 568, 5, 120, 0, 0, 568, 569, 5, 105, 0, 0, 569, 570, 5, 115, 0, 0, 570, 571, 5, 116, 0, 0, 571, 572, 5, 115, 0, 0, 572, 573, 5, 33, 0, 0, 573, 88, 1, 0, 0, 0, 574, 575, 5, 8707, 0, 0, 575, 576, 5, 33, 0, 0, 576, 90, 1, 0, 0, 0, 577, 578, 5, 101, 0, 0, 578, 579, 5, 120, 0, 0, 579, 580, 5, 105, 0, 0, 580, 581, 5, 115, 0, 0, 581, 582, 5, 116, 0, 0, 582, 583, 5, 115, 0, 0, 583, 92, 1, 0, 0, 0, 584, 585, 5, 8707, 0, 0, 585, 94, 1, 0, 0, 0, 586, 587, 5, 44, 0, 0, 587, 96, 1, 0, 0, 0, 588, 589, 5, 59, 0, 0, 589, 98, 1, 0, 0, 0, 590, 591, 5, 43, 0, 0, 591, 592, 5, 111, 0, 0, 592, 593, 5, 111, 0, 0, 593, 100, 1, 0, 0, 0, 594, 595, 5, 45, 0, 0, 595, 596, 5, 111, 0, 0, 596, 597, 5, 111, 0, 0, 597, 102, 1, 0, 0, 0, 598, 599, 5, 40, 0, 0, 599, 600, 5, 124, 0, 0, 600, 104, 1, 0, 0, 0, 601, 602, 5, 124, 0, 0, 602, 603, 5, 41, 0, 0, 603, 106, 1, 0, 0, 0, 604, 605, 5, 35, 0, 0, 605, 108, 1, 0, 0, 0, 606, 607, 5, 91, 0, 0, 607, 110, 1, 0, 0, 0, 608, 609, 5, 93, 0, 0, 609, 610, 5, 84, 0, 0, 610, 112, 1, 0, 0, 0, 611, 612, 5, 93, 0, 0, 612, 114, 1, 0, 0, 0, 613, 614, 5, 123, 0, 0, 614, 116, 1, 0, 0, 0, 615, 616, 5, 125, 0, 0, 616, 118, 1, 0, 0, 0, 617, 618, 5, 108, 0, 0, 618, 619, 5, 111, 0, 0, 619, 620, 5, 103, 0, 0, 620, 621, 5, 40, 0, 0, 621, 120, 1, 0, 0, 0, 622, 623, 5, 108, 0, 0, 623, 624, 5, 111, 0, 0, 624, 625, 5, 103, 0, 0, 625, 626, 5, 49, 0, 0, 626, 627, 5, 48, 0, 0, 627, 628, 5, 40, 0, 0, 628, 122, 1, 0, 0, 0, 629, 630, 5, 108, 0, 0, 630, 631, 5, 111, 0, 0, 631, 632, 5, 103, 0, 0, 632, 633, 5, 50, 0, 0, 633, 634, 5, 40, 0, 0, 634, 124, 1, 0, 0, 0, 635, 636, 5, 112, 0, 0, 636, 637, 5, 111, 0, 0, 637, 638, 5, 119, 0, 0, 638, 639, 5, 40, 0, 0, 639, 126, 1, 0, 0, 0, 640, 641, 5, 115, 0, 0, 641, 642, 5, 113, 0, 0, 642, 643, 5, 114, 0, 0, 643, 644, 5, 116, 0, 0, 644, 645, 5, 40, 0, 0, 645, 128, 1, 0, 0, 0, 646, 647, 5, 99, 0, 0, 647, 648, 5, 98, 0, 0, 648, 649, 5, 114, 0, 0, 649, 650, 5, 116, 0, 0, 650, 651, 5, 40, 0, 0, 651, 130, 1, 0, 0, 0, 652, 653, 5, 115, 0, 0, 653, 654, 5, 113, 0, 0, 654, 655, 5, 114, 0, 0, 655, 656, 5, 40, 0, 0, 656, 132, 1, 0, 0, 0, 657, 658, 5, 108, 0, 0, 658, 659, 5, 110, 0, 0, 659, 660, 5, 40, 0, 0, 660, 134, 1, 0, 0, 0, 661, 662, 5, 101, 0, 0, 662, 663, 5, 120, 0, 0, 663, 664, 5, 112, 0, 0, 664, 665, 5, 40, 0, 0, 665, 136, 1, 0, 0, 0, 666, 667, 5, 115, 0, 0, 667, 668, 5, 105, 0, 0, 668, 669, 5, 110, 0, 0, 669, 670, 5, 40, 0, 0, 670, 138, 1, 0, 0, 0, 671, 672, 5, 99, 0, 0, 672, 673, 5, 111, 0, 0, 673, 674, 5, 115, 0, 0, 674, 675, 5, 40, 0, 0, 675, 140, 1, 0, 0, 0, 676, 677, 5, 116, 0, 0, 677, 678, 5, 97, 0, 0, 678, 679, 5, 110, 0, 0, 679, 680, 5, 40, 0, 0, 680, 142, 1, 0, 0, 0, 681, 682, 5, 99, 0, 0, 682, 683, 5, 111, 0, 0, 683, 684, 5, 116, 0, 0, 684, 685, 5, 97, 0, 0, 685, 686, 5, 110, 0, 0, 686, 687, 5, 40, 0, 0, 687, 144, 1, 0, 0, 0, 688, 689, 5, 99, 0, 0, 689, 690, 5, 111, 0, 0, 690, 691, 5, 116, 0, 0, 691, 692, 5, 40, 0, 0, 692, 146, 1, 0, 0, 0, 693, 694, 5, 115, 0, 0, 694, 695, 5, 101, 0, 0, 695, 696, 5, 99, 0, 0, 696, 697, 5, 40, 0, 0, 697, 148, 1, 0, 0, 0, 698, 699, 5, 99, 0, 0, 699, 700, 5, 111, 0, 0, 700, 701, 5, 115, 0, 0, 701, 702, 5, 101, 0, 0, 702, 703, 5, 99, 0, 0, 703, 704, 5, 40, 0, 0, 704, 150, 1, 0, 0, 0, 705, 706, 5, 99, 0, 0, 706, 707, 5, 115, 0, 0, 707, 708, 5, 99, 0, 0, 708, 709, 5, 40, 0, 0, 709, 152, 1, 0, 0, 0, 710, 711, 5, 97, 0, 0, 711, 712, 5, 114, 0, 0, 712, 713, 5, 99, 0, 0, 713, 714, 5, 115, 0, 0, 714, 715, 5, 105, 0, 0, 715, 716, 5, 110, 0, 0, 716, 717, 5, 40, 0, 0, 717, 154, 1, 0, 0, 0, 718, 719, 5, 97, 0, 0, 719, 720, 5, 114, 0, 0, 720, 721, 5, 99, 0, 0, 721, 722, 5, 99, 0, 0, 722, 723, 5, 111, 0, 0, 723, 724, 5, 115, 0, 0, 724, 725, 5, 40, 0, 0, 725, 156, 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, 116, 0, 0, 730, 731, 5, 97, 0, 0, 731, 732, 5, 110, 0, 0, 732, 733, 5, 40, 0, 0, 733, 158, 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, 116, 0, 0, 740, 741, 5, 97, 0, 0, 741, 742, 5, 110, 0, 0, 742, 743, 5, 40, 0, 0, 743, 160, 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, 115, 0, 0, 748, 749, 5, 101, 0, 0, 749, 750, 5, 99, 0, 0, 750, 751, 5, 40, 0, 0, 751, 162, 1, 0, 0, 0, 752, 753, 5, 97, 0, 0, 753, 754, 5, 114, 0, 0, 754, 755, 5, 99, 0, 0, 755, 756, 5, 99, 0, 0, 756, 757, 5, 111, 0, 0, 757, 758, 5, 115, 0, 0, 758, 759, 5, 101, 0, 0, 759, 760, 5, 99, 0, 0, 760, 761, 5, 40, 0, 0, 761, 164, 1, 0, 0, 0, 762, 763, 5, 97, 0, 0, 763, 764, 5, 114, 0, 0, 764, 765, 5, 99, 0, 0, 765, 766, 5, 99, 0, 0, 766, 767, 5, 115, 0, 0, 767, 768, 5, 99, 0, 0, 768, 769, 5, 40, 0, 0, 769, 166, 1, 0, 0, 0, 770, 771, 5, 97, 0, 0, 771, 772, 5, 99, 0, 0, 772, 773, 5, 115, 0, 0, 773, 774, 5, 99, 0, 0, 774, 775, 5, 40, 0, 0, 775, 168, 1, 0, 0, 0, 776, 777, 5, 97, 0, 0, 777, 778, 5, 115, 0, 0, 778, 779, 5, 105, 0, 0, 779, 780, 5, 110, 0, 0, 780, 781, 5, 40, 0, 0, 781, 170, 1, 0, 0, 0, 782, 783, 5, 97, 0, 0, 783, 784, 5, 99, 0, 0, 784, 785, 5, 111, 0, 0, 785, 786, 5, 115, 0, 0, 786, 787, 5, 40, 0, 0, 787, 172, 1, 0, 0, 0, 788, 789, 5, 97, 0, 0, 789, 790, 5, 116, 0, 0, 790, 791, 5, 97, 0, 0, 791, 792, 5, 110, 0, 0, 792, 793, 5, 40, 0, 0, 793, 174, 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, 116, 0, 0, 798, 799, 5, 97, 0, 0, 799, 800, 5, 110, 0, 0, 800, 801, 5, 40, 0, 0, 801, 176, 1, 0, 0, 0, 802, 803, 5, 97, 0, 0, 803, 804, 5, 115, 0, 0, 804, 805, 5, 101, 0, 0, 805, 806, 5, 99, 0, 0, 806, 807, 5, 40, 0, 0, 807, 178, 1, 0, 0, 0, 808, 809, 5, 97, 0, 0, 809, 810, 5, 99, 0, 0, 810, 811, 5, 111, 0, 0, 811, 812, 5, 115, 0, 0, 812, 813, 5, 101, 0, 0, 813, 814, 5, 99, 0, 0, 814, 815, 5, 40, 0, 0, 815, 180, 1, 0, 0, 0, 816, 817, 5, 97, 0, 0, 817, 818, 5, 99, 0, 0, 818, 819, 5, 111, 0, 0, 819, 820, 5, 116, 0, 0, 820, 821, 5, 40, 0, 0, 821, 182, 1, 0, 0, 0, 822, 823, 5, 97, 0, 0, 823, 824, 5, 114, 0, 0, 824, 825, 5, 99, 0, 0, 825, 826, 5, 99, 0, 0, 826, 827, 5, 111, 0, 0, 827, 828, 5, 116, 0, 0, 828, 829, 5, 40, 0, 0, 829, 184, 1, 0, 0, 0, 830, 831, 5, 115, 0, 0, 831, 832, 5, 105, 0, 0, 832, 833, 5, 110, 0, 0, 833, 834, 5, 104, 0, 0, 834, 835, 5, 40, 0, 0, 835, 186, 1, 0, 0, 0, 836, 837, 5, 115, 0, 0, 837, 838, 5, 104, 0, 0, 838, 839, 5, 40, 0, 0, 839, 188, 1, 0, 0, 0, 840, 841, 5, 99, 0, 0, 841, 842, 5, 111, 0, 0, 842, 843, 5, 115, 0, 0, 843, 844, 5, 104, 0, 0, 844, 845, 5, 40, 0, 0, 845, 190, 1, 0, 0, 0, 846, 847, 5, 99, 0, 0, 847, 848, 5, 104, 0, 0, 848, 849, 5, 40, 0, 0, 849, 192, 1, 0, 0, 0, 850, 851, 5, 116, 0, 0, 851, 852, 5, 97, 0, 0, 852, 853, 5, 110, 0, 0, 853, 854, 5, 104, 0, 0, 854, 855, 5, 40, 0, 0, 855, 194, 1, 0, 0, 0, 856, 857, 5, 116, 0, 0, 857, 858, 5, 104, 0, 0, 858, 859, 5, 40, 0, 0, 859, 196, 1, 0, 0, 0, 860, 861, 5, 99, 0, 0, 861, 862, 5, 111, 0, 0, 862, 863, 5, 116, 0, 0, 863, 864, 5, 97, 0, 0, 864, 865, 5, 110, 0, 0, 865, 866, 5, 104, 0, 0, 866, 867, 5, 40, 0, 0, 867, 198, 1, 0, 0, 0, 868, 869, 5, 99, 0, 0, 869, 870, 5, 111, 0, 0, 870, 871, 5, 116, 0, 0, 871, 872, 5, 104, 0, 0, 872, 873, 5, 40, 0, 0, 873, 200, 1, 0, 0, 0, 874, 875, 5, 99, 0, 0, 875, 876, 5, 116, 0, 0, 876, 877, 5, 104, 0, 0, 877, 878, 5, 40, 0, 0, 878, 202, 1, 0, 0, 0, 879, 880, 5, 115, 0, 0, 880, 881, 5, 101, 0, 0, 881, 882, 5, 99, 0, 0, 882, 883, 5, 104, 0, 0, 883, 884, 5, 40, 0, 0, 884, 204, 1, 0, 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, 206, 1, 0, 0, 0, 890, 891, 5, 99, 0, 0, 891, 892, 5, 111, 0, 0, 892, 893, 5, 115, 0, 0, 893, 894, 5, 101, 0, 0, 894, 895, 5, 99, 0, 0, 895, 896, 5, 104, 0, 0, 896, 897, 5, 40, 0, 0, 897, 208, 1, 0, 0, 0, 898, 899, 5, 99, 0, 0, 899, 900, 5, 115, 0, 0, 900, 901, 5, 99, 0, 0, 901, 902, 5, 104, 0, 0, 902, 903, 5, 40, 0, 0, 903, 210, 1, 0, 0, 0, 904, 905, 5, 97, 0, 0, 905, 906, 5, 115, 0, 0, 906, 907, 5, 105, 0, 0, 907, 908, 5, 110, 0, 0, 908, 909, 5, 104, 0, 0, 909, 910, 5, 40, 0, 0, 910, 212, 1, 0, 0, 0, 911, 912, 5, 97, 0, 0, 912, 913, 5, 114, 0, 0, 913, 914, 5, 115, 0, 0, 914, 915, 5, 105, 0, 0, 915, 916, 5, 110, 0, 0, 916, 917, 5, 104, 0, 0, 917, 918, 5, 40, 0, 0, 918, 214, 1, 0, 0, 0, 919, 920, 5, 97, 0, 0, 920, 921, 5, 114, 0, 0, 921, 922, 5, 115, 0, 0, 922, 923, 5, 104, 0, 0, 923, 924, 5, 40, 0, 0, 924, 216, 1, 0, 0, 0, 925, 926, 5, 97, 0, 0, 926, 927, 5, 114, 0, 0, 927, 928, 5, 99, 0, 0, 928, 929, 5, 115, 0, 0, 929, 930, 5, 105, 0, 0, 930, 931, 5, 110, 0, 0, 931, 932, 5, 104, 0, 0, 932, 933, 5, 40, 0, 0, 933, 218, 1, 0, 0, 0, 934, 935, 5, 97, 0, 0, 935, 936, 5, 99, 0, 0, 936, 937, 5, 111, 0, 0, 937, 938, 5, 115, 0, 0, 938, 939, 5, 104, 0, 0, 939, 940, 5, 40, 0, 0, 940, 220, 1, 0, 0, 0, 941, 942, 5, 97, 0, 0, 942, 943, 5, 114, 0, 0, 943, 944, 5, 99, 0, 0, 944, 945, 5, 111, 0, 0, 945, 946, 5, 115, 0, 0, 946, 947, 5, 104, 0, 0, 947, 948, 5, 40, 0, 0, 948, 222, 1, 0, 0, 0, 949, 950, 5, 97, 0, 0, 950, 951, 5, 114, 0, 0, 951, 952, 5, 99, 0, 0, 952, 953, 5, 104, 0, 0, 953, 954, 5, 40, 0, 0, 954, 224, 1, 0, 0, 0, 955, 956, 5, 97, 0, 0, 956, 957, 5, 114, 0, 0, 957, 958, 5, 99, 0, 0, 958, 959, 5, 99, 0, 0, 959, 960, 5, 111, 0, 0, 960, 961, 5, 115, 0, 0, 961, 962, 5, 104, 0, 0, 962, 963, 5, 40, 0, 0, 963, 226, 1, 0, 0, 0, 964, 965, 5, 97, 0, 0, 965, 966, 5, 116, 0, 0, 966, 967, 5, 97, 0, 0, 967, 968, 5, 110, 0, 0, 968, 969, 5, 104, 0, 0, 969, 970, 5, 40, 0, 0, 970, 228, 1, 0, 0, 0, 971, 972, 5, 97, 0, 0, 972, 973, 5, 114, 0, 0, 973, 974, 5, 116, 0, 0, 974, 975, 5, 97, 0, 0, 975, 976, 5, 110, 0, 0, 976, 977, 5, 104, 0, 0, 977, 978, 5, 40, 0, 0, 978, 230, 1, 0, 0, 0, 979, 980, 5, 97, 0, 0, 980, 981, 5, 114, 0, 0, 981, 982, 5, 116, 0, 0, 982, 983, 5, 104, 0, 0, 983, 984, 5, 40, 0, 0, 984, 232, 1, 0, 0, 0, 985, 986, 5, 97, 0, 0, 986, 987, 5, 114, 0, 0, 987, 988, 5, 99, 0, 0, 988, 989, 5, 116, 0, 0, 989, 990, 5, 97, 0, 0, 990, 991, 5, 110, 0, 0, 991, 992, 5, 104, 0, 0, 992, 993, 5, 40, 0, 0, 993, 234, 1, 0, 0, 0, 994, 995, 5, 97, 0, 0, 995, 996, 5, 99, 0, 0, 996, 997, 5, 111, 0, 0, 997, 998, 5, 116, 0, 0, 998, 999, 5, 104, 0, 0, 999, 1000, 5, 40, 0, 0, 1000, 236, 1, 0, 0, 0, 1001, 1002, 5, 97, 0, 0, 1002, 1003, 5, 114, 0, 0, 1003, 1004, 5, 99, 0, 0, 1004, 1005, 5, 111, 0, 0, 1005, 1006, 5, 116, 0, 0, 1006, 1007, 5, 104, 0, 0, 1007, 1008, 5, 40, 0, 0, 1008, 238, 1, 0, 0, 0, 1009, 1010, 5, 97, 0, 0, 1010, 1011, 5, 99, 0, 0, 1011, 1012, 5, 111, 0, 0, 1012, 1013, 5, 116, 0, 0, 1013, 1014, 5, 97, 0, 0, 1014, 1015, 5, 110, 0, 0, 1015, 1016, 5, 104, 0, 0, 1016, 1017, 5, 40, 0, 0, 1017, 240, 1, 0, 0, 0, 1018, 1019, 5, 97, 0, 0, 1019, 1020, 5, 114, 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, 242, 1, 0, 0, 0, 1028, 1029, 5, 97, 0, 0, 1029, 1030, 5, 114, 0, 0, 1030, 1031, 5, 99, 0, 0, 1031, 1032, 5, 116, 0, 0, 1032, 1033, 5, 104, 0, 0, 1033, 1034, 5, 40, 0, 0, 1034, 244, 1, 0, 0, 0, 1035, 1036, 5, 97, 0, 0, 1036, 1037, 5, 114, 0, 0, 1037, 1038, 5, 99, 0, 0, 1038, 1039, 5, 99, 0, 0, 1039, 1040, 5, 111, 0, 0, 1040, 1041, 5, 116, 0, 0, 1041, 1042, 5, 97, 0, 0, 1042, 1043, 5, 110, 0, 0, 1043, 1044, 5, 104, 0, 0, 1044, 1045, 5, 40, 0, 0, 1045, 246, 1, 0, 0, 0, 1046, 1047, 5, 97, 0, 0, 1047, 1048, 5, 115, 0, 0, 1048, 1049, 5, 101, 0, 0, 1049, 1050, 5, 99, 0, 0, 1050, 1051, 5, 104, 0, 0, 1051, 1052, 5, 40, 0, 0, 1052, 248, 1, 0, 0, 0, 1053, 1054, 5, 97, 0, 0, 1054, 1055, 5, 114, 0, 0, 1055, 1056, 5, 115, 0, 0, 1056, 1057, 5, 101, 0, 0, 1057, 1058, 5, 99, 0, 0, 1058, 1059, 5, 104, 0, 0, 1059, 1060, 5, 40, 0, 0, 1060, 250, 1, 0, 0, 0, 1061, 1062, 5, 97, 0, 0, 1062, 1063, 5, 114, 0, 0, 1063, 1064, 5, 115, 0, 0, 1064, 1065, 5, 99, 0, 0, 1065, 1066, 5, 104, 0, 0, 1066, 1067, 5, 40, 0, 0, 1067, 252, 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, 115, 0, 0, 1072, 1073, 5, 101, 0, 0, 1073, 1074, 5, 99, 0, 0, 1074, 1075, 5, 104, 0, 0, 1075, 1076, 5, 40, 0, 0, 1076, 254, 1, 0, 0, 0, 1077, 1078, 5, 97, 0, 0, 1078, 1079, 5, 99, 0, 0, 1079, 1080, 5, 111, 0, 0, 1080, 1081, 5, 115, 0, 0, 1081, 1082, 5, 101, 0, 0, 1082, 1083, 5, 99, 0, 0, 1083, 1084, 5, 104, 0, 0, 1084, 1085, 5, 40, 0, 0, 1085, 256, 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, 111, 0, 0, 1090, 1091, 5, 115, 0, 0, 1091, 1092, 5, 101, 0, 0, 1092, 1093, 5, 99, 0, 0, 1093, 1094, 5, 104, 0, 0, 1094, 1095, 5, 40, 0, 0, 1095, 258, 1, 0, 0, 0, 1096, 1097, 5, 97, 0, 0, 1097, 1098, 5, 114, 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, 260, 1, 0, 0, 0, 1104, 1105, 5, 97, 0, 0, 1105, 1106, 5, 114, 0, 0, 1106, 1107, 5, 99, 0, 0, 1107, 1108, 5, 99, 0, 0, 1108, 1109, 5, 111, 0, 0, 1109, 1110, 5, 115, 0, 0, 1110, 1111, 5, 101, 0, 0, 1111, 1112, 5, 99, 0, 0, 1112, 1113, 5, 104, 0, 0, 1113, 1114, 5, 40, 0, 0, 1114, 262, 1, 0, 0, 0, 1115, 1116, 5, 97, 0, 0, 1116, 1117, 5, 99, 0, 0, 1117, 1118, 5, 115, 0, 0, 1118, 1119, 5, 99, 0, 0, 1119, 1120, 5, 104, 0, 0, 1120, 1121, 5, 40, 0, 0, 1121, 264, 1, 0, 0, 0, 1122, 1123, 5, 102, 0, 0, 1123, 1124, 5, 97, 0, 0, 1124, 1125, 5, 99, 0, 0, 1125, 1126, 5, 116, 0, 0, 1126, 1127, 5, 111, 0, 0, 1127, 1128, 5, 114, 0, 0, 1128, 1129, 5, 105, 0, 0, 1129, 1130, 5, 97, 0, 0, 1130, 1131, 5, 108, 0, 0, 1131, 1132, 5, 40, 0, 0, 1132, 266, 1, 0, 0, 0, 1133, 1134, 5, 103, 0, 0, 1134, 1135, 5, 97, 0, 0, 1135, 1136, 5, 109, 0, 0, 1136, 1137, 5, 109, 0, 0, 1137, 1138, 5, 97, 0, 0, 1138, 1139, 5, 40, 0, 0, 1139, 268, 1, 0, 0, 0, 1140, 1141, 5, 100, 0, 0, 1141, 1142, 5, 101, 0, 0, 1142, 1143, 5, 114, 0, 0, 1143, 1144, 5, 105, 0, 0, 1144, 1145, 5, 118, 0, 0, 1145, 1146, 5, 97, 0, 0, 1146, 1147, 5, 116, 0, 0, 1147, 1148, 5, 105, 0, 0, 1148, 1149, 5, 118, 0, 0, 1149, 1150, 5, 101, 0, 0, 1150, 1151, 5, 40, 0, 0, 1151, 270, 1, 0, 0, 0, 1152, 1153, 5, 105, 0, 0, 1153, 1154, 5, 110, 0, 0, 1154, 1155, 5, 116, 0, 0, 1155, 1156, 5, 101, 0, 0, 1156, 1157, 5, 103, 0, 0, 1157, 1158, 5, 114, 0, 0, 1158, 1159, 5, 97, 0, 0, 1159, 1160, 5, 108, 0, 0, 1160, 1161, 5, 40, 0, 0, 1161, 272, 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, 40, 0, 0, 1168, 274, 1, 0, 0, 0, 1169, 1170, 5, 108, 0, 0, 1170, 1171, 5, 105, 0, 0, 1171, 1172, 5, 109, 0, 0, 1172, 1173, 5, 105, 0, 0, 1173, 1174, 5, 116, 0, 0, 1174, 1175, 5, 108, 0, 0, 1175, 1176, 5, 101, 0, 0, 1176, 1177, 5, 102, 0, 0, 1177, 1178, 5, 116, 0, 0, 1178, 1179, 5, 40, 0, 0, 1179, 276, 1, 0, 0, 0, 1180, 1181, 5, 108, 0, 0, 1181, 1182, 5, 105, 0, 0, 1182, 1183, 5, 109, 0, 0, 1183, 1184, 5, 105, 0, 0, 1184, 1185, 5, 116, 0, 0, 1185, 1186, 5, 114, 0, 0, 1186, 1187, 5, 105, 0, 0, 1187, 1188, 5, 103, 0, 0, 1188, 1189, 5, 104, 0, 0, 1189, 1190, 5, 116, 0, 0, 1190, 1191, 5, 40, 0, 0, 1191, 278, 1, 0, 0, 0, 1192, 1193, 5, 115, 0, 0, 1193, 1194, 5, 117, 0, 0, 1194, 1195, 5, 109, 0, 0, 1195, 1196, 5, 40, 0, 0, 1196, 280, 1, 0, 0, 0, 1197, 1198, 5, 112, 0, 0, 1198, 1199, 5, 114, 0, 0, 1199, 1200, 5, 111, 0, 0, 1200, 1201, 5, 100, 0, 0, 1201, 1202, 5, 117, 0, 0, 1202, 1203, 5, 99, 0, 0, 1203, 1204, 5, 116, 0, 0, 1204, 1205, 5, 40, 0, 0, 1205, 282, 1, 0, 0, 0, 1206, 1207, 5, 115, 0, 0, 1207, 1208, 5, 105, 0, 0, 1208, 1209, 5, 103, 0, 0, 1209, 1210, 5, 110, 0, 0, 1210, 1211, 5, 117, 0, 0, 1211, 1212, 5, 109, 0, 0, 1212, 1213, 5, 40, 0, 0, 1213, 284, 1, 0, 0, 0, 1214, 1215, 5, 115, 0, 0, 1215, 1216, 5, 103, 0, 0, 1216, 1217, 5, 110, 0, 0, 1217, 1218, 5, 40, 0, 0, 1218, 286, 1, 0, 0, 0, 1219, 1220, 5, 115, 0, 0, 1220, 1221, 5, 105, 0, 0, 1221, 1222, 5, 103, 0, 0, 1222, 1223, 5, 110, 0, 0, 1223, 1224, 5, 40, 0, 0, 1224, 288, 1, 0, 0, 0, 1225, 1226, 5, 97, 0, 0, 1226, 1227, 5, 98, 0, 0, 1227, 1228, 5, 115, 0, 0, 1228, 1229, 5, 40, 0, 0, 1229, 290, 1, 0, 0, 0, 1230, 1231, 5, 112, 0, 0, 1231, 1232, 5, 104, 0, 0, 1232, 1233, 5, 105, 0, 0, 1233, 1234, 5, 40, 0, 0, 1234, 292, 1, 0, 0, 0, 1235, 1236, 5, 112, 0, 0, 1236, 1237, 5, 114, 0, 0, 1237, 1238, 5, 105, 0, 0, 1238, 1239, 5, 109, 0, 0, 1239, 1240, 5, 101, 0, 0, 1240, 1241, 5, 40, 0, 0, 1241, 294, 1, 0, 0, 0, 1242, 1243, 5, 118, 0, 0, 1243, 1244, 5, 97, 0, 0, 1244, 1245, 5, 108, 0, 0, 1245, 1246, 5, 117, 0, 0, 1246, 1247, 5, 97, 0, 0, 1247, 1248, 5, 116, 0, 0, 1248, 1249, 5, 105, 0, 0, 1249, 1250, 5, 111, 0, 0, 1250, 1251, 5, 110, 0, 0, 1251, 1252, 5, 40, 0, 0, 1252, 296, 1, 0, 0, 0, 1253, 1254, 5, 99, 0, 0, 1254, 1255, 5, 97, 0, 0, 1255, 1256, 5, 114, 0, 0, 1256, 1257, 5, 100, 0, 0, 1257, 1258, 5, 40, 0, 0, 1258, 298, 1, 0, 0, 0, 1259, 1260, 5, 112, 0, 0, 1260, 1261, 5, 111, 0, 0, 1261, 1262, 5, 119, 0, 0, 1262, 1263, 5, 101, 0, 0, 1263, 1264, 5, 114, 0, 0, 1264, 1265, 5, 115, 0, 0, 1265, 1266, 5, 101, 0, 0, 1266, 1267, 5, 116, 0, 0, 1267, 1268, 5, 40, 0, 0, 1268, 300, 1, 0, 0, 0, 1269, 1270, 5, 117, 0, 0, 1270, 1271, 5, 110, 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, 302, 1, 0, 0, 0, 1276, 1277, 5, 105, 0, 0, 1277, 1278, 5, 110, 0, 0, 1278, 1279, 5, 116, 0, 0, 1279, 1280, 5, 101, 0, 0, 1280, 1281, 5, 114, 0, 0, 1281, 1282, 5, 115, 0, 0, 1282, 1283, 5, 101, 0, 0, 1283, 1284, 5, 99, 0, 0, 1284, 1285, 5, 116, 0, 0, 1285, 1286, 5, 105, 0, 0, 1286, 1287, 5, 111, 0, 0, 1287, 1288, 5, 110, 0, 0, 1288, 1289, 5, 40, 0, 0, 1289, 304, 1, 0, 0, 0, 1290, 1291, 5, 99, 0, 0, 1291, 1292, 5, 111, 0, 0, 1292, 1293, 5, 109, 0, 0, 1293, 1294, 5, 112, 0, 0, 1294, 1295, 5, 108, 0, 0, 1295, 1296, 5, 101, 0, 0, 1296, 1297, 5, 109, 0, 0, 1297, 1298, 5, 101, 0, 0, 1298, 1299, 5, 110, 0, 0, 1299, 1300, 5, 116, 0, 0, 1300, 1301, 5, 40, 0, 0, 1301, 306, 1, 0, 0, 0, 1302, 1303, 5, 105, 0, 0, 1303, 1304, 5, 109, 0, 0, 1304, 1305, 5, 97, 0, 0, 1305, 1306, 5, 103, 0, 0, 1306, 1307, 5, 101, 0, 0, 1307, 1308, 5, 40, 0, 0, 1308, 308, 1, 0, 0, 0, 1309, 1310, 5, 112, 0, 0, 1310, 1311, 5, 114, 0, 0, 1311, 1312, 5, 101, 0, 0, 1312, 1313, 5, 105, 0, 0, 1313, 1314, 5, 109, 0, 0, 1314, 1315, 5, 97, 0, 0, 1315, 1316, 5, 103, 0, 0, 1316, 1317, 5, 101, 0, 0, 1317, 1318, 5, 40, 0, 0, 1318, 310, 1, 0, 0, 0, 1319, 1320, 5, 102, 0, 0, 1320, 1321, 5, 108, 0, 0, 1321, 1322, 5, 111, 0, 0, 1322, 1323, 5, 111, 0, 0, 1323, 1324, 5, 114, 0, 0, 1324, 1325, 5, 40, 0, 0, 1325, 312, 1, 0, 0, 0, 1326, 1327, 5, 99, 0, 0, 1327, 1328, 5, 101, 0, 0, 1328, 1329, 5, 105, 0, 0, 1329, 1330, 5, 108, 0, 0, 1330, 1331, 5, 40, 0, 0, 1331, 314, 1, 0, 0, 0, 1332, 1333, 5, 99, 0, 0, 1333, 1334, 5, 101, 0, 0, 1334, 1335, 5, 105, 0, 0, 1335, 1336, 5, 108, 0, 0, 1336, 1337, 5, 105, 0, 0, 1337, 1338, 5, 110, 0, 0, 1338, 1339, 5, 103, 0, 0, 1339, 1340, 5, 40, 0, 0, 1340, 316, 1, 0, 0, 0, 1341, 1342, 5, 114, 0, 0, 1342, 1343, 5, 111, 0, 0, 1343, 1344, 5, 117, 0, 0, 1344, 1345, 5, 110, 0, 0, 1345, 1346, 5, 100, 0, 0, 1346, 1347, 5, 40, 0, 0, 1347, 318, 1, 0, 0, 0, 1348, 1349, 5, 109, 0, 0, 1349, 1350, 5, 105, 0, 0, 1350, 1351, 5, 110, 0, 0, 1351, 1352, 5, 40, 0, 0, 1352, 320, 1, 0, 0, 0, 1353, 1354, 5, 109, 0, 0, 1354, 1355, 5, 97, 0, 0, 1355, 1356, 5, 120, 0, 0, 1356, 1357, 5, 40, 0, 0, 1357, 322, 1, 0, 0, 0, 1358, 1359, 5, 97, 0, 0, 1359, 1360, 5, 114, 0, 0, 1360, 1361, 5, 103, 0, 0, 1361, 1362, 5, 109, 0, 0, 1362, 1363, 5, 97, 0, 0, 1363, 1364, 5, 120, 0, 0, 1364, 1365, 5, 40, 0, 0, 1365, 324, 1, 0, 0, 0, 1366, 1367, 5, 97, 0, 0, 1367, 1368, 5, 114, 0, 0, 1368, 1369, 5, 103, 0, 0, 1369, 1370, 5, 109, 0, 0, 1370, 1371, 5, 105, 0, 0, 1371, 1372, 5, 110, 0, 0, 1372, 1373, 5, 40, 0, 0, 1373, 326, 1, 0, 0, 0, 1374, 1375, 5, 103, 0, 0, 1375, 1376, 5, 99, 0, 0, 1376, 1377, 5, 100, 0, 0, 1377, 1378, 5, 40, 0, 0, 1378, 328, 1, 0, 0, 0, 1379, 1380, 5, 108, 0, 0, 1380, 1381, 5, 99, 0, 0, 1381, 1382, 5, 109, 0, 0, 1382, 1383, 5, 40, 0, 0, 1383, 330, 1, 0, 0, 0, 1384, 1385, 5, 98, 0, 0, 1385, 1386, 5, 105, 0, 0, 1386, 1387, 5, 110, 0, 0, 1387, 1388, 5, 111, 0, 0, 1388, 1389, 5, 109, 0, 0, 1389, 1390, 5, 105, 0, 0, 1390, 1391, 5, 97, 0, 0, 1391, 1392, 5, 108, 0, 0, 1392, 1393, 5, 40, 0, 0, 1393, 332, 1, 0, 0, 0, 1394, 1395, 5, 105, 0, 0, 1395, 1396, 5, 118, 0, 0, 1396, 1397, 5, 101, 0, 0, 1397, 1398, 5, 114, 0, 0, 1398, 1399, 5, 115, 0, 0, 1399, 1400, 5, 111, 0, 0, 1400, 1401, 5, 110, 0, 0, 1401, 1402, 5, 40, 0, 0, 1402, 334, 1, 0, 0, 0, 1403, 1404, 5, 97, 0, 0, 1404, 1405, 5, 108, 0, 0, 1405, 1406, 5, 101, 0, 0, 1406, 1407, 5, 112, 0, 0, 1407, 1408, 5, 104, 0, 0, 1408, 1409, 5, 40, 0, 0, 1409, 336, 1, 0, 0, 0, 1410, 1411, 5, 101, 0, 0, 1411, 1412, 5, 114, 0, 0, 1412, 1413, 5, 102, 0, 0, 1413, 1414, 5, 40, 0, 0, 1414, 338, 1, 0, 0, 0, 1415, 1416, 5, 101, 0, 0, 1416, 1417, 5, 114, 0, 0, 1417, 1418, 5, 102, 0, 0, 1418, 1419, 5, 99, 0, 0, 1419, 1420, 5, 40, 0, 0, 1420, 340, 1, 0, 0, 0, 1421, 1422, 5, 101, 0, 0, 1422, 1423, 5, 114, 0, 0, 1423, 1424, 5, 102, 0, 0, 1424, 1425, 5, 105, 0, 0, 1425, 1426, 5, 40, 0, 0, 1426, 342, 1, 0, 0, 0, 1427, 1428, 5, 69, 0, 0, 1428, 1429, 5, 105, 0, 0, 1429, 1430, 5, 40, 0, 0, 1430, 344, 1, 0, 0, 0, 1431, 1432, 5, 108, 0, 0, 1432, 1433, 5, 105, 0, 0, 1433, 1434, 5, 40, 0, 0, 1434, 346, 1, 0, 0, 0, 1435, 1436, 5, 112, 0, 0, 1436, 1437, 5, 111, 0, 0, 1437, 1438, 5, 108, 0, 0, 1438, 1439, 5, 121, 0, 0, 1439, 1440, 5, 103, 0, 0, 1440, 1441, 5, 97, 0, 0, 1441, 1442, 5, 109, 0, 0, 1442, 1443, 5, 109, 0, 0, 1443, 1444, 5, 97, 0, 0, 1444, 1445, 5, 40, 0, 0, 1445, 348, 1, 0, 0, 0, 1446, 1447, 5, 100, 0, 0, 1447, 1448, 5, 105, 0, 0, 1448, 1449, 5, 103, 0, 0, 1449, 1450, 5, 97, 0, 0, 1450, 1451, 5, 109, 0, 0, 1451, 1452, 5, 109, 0, 0, 1452, 1453, 5, 97, 0, 0, 1453, 1454, 5, 40, 0, 0, 1454, 350, 1, 0, 0, 0, 1455, 1456, 5, 83, 0, 0, 1456, 1457, 5, 105, 0, 0, 1457, 1458, 5, 40, 0, 0, 1458, 352, 1, 0, 0, 0, 1459, 1460, 5, 67, 0, 0, 1460, 1461, 5, 105, 0, 0, 1461, 1462, 5, 40, 0, 0, 1462, 354, 1, 0, 0, 0, 1463, 1464, 5, 83, 0, 0, 1464, 1465, 5, 104, 0, 0, 1465, 1466, 5, 105, 0, 0, 1466, 1467, 5, 40, 0, 0, 1467, 356, 1, 0, 0, 0, 1468, 1469, 5, 67, 0, 0, 1469, 1470, 5, 104, 0, 0, 1470, 1471, 5, 105, 0, 0, 1471, 1472, 5, 40, 0, 0, 1472, 358, 1, 0, 0, 0, 1473, 1474, 5, 100, 0, 0, 1474, 1475, 5, 101, 0, 0, 1475, 1476, 5, 116, 0, 0, 1476, 1477, 5, 40, 0, 0, 1477, 360, 1, 0, 0, 0, 1478, 1479, 5, 116, 0, 0, 1479, 1480, 5, 114, 0, 0, 1480, 1481, 5, 97, 0, 0, 1481, 1482, 5, 110, 0, 0, 1482, 1483, 5, 115, 0, 0, 1483, 1484, 5, 112, 0, 0, 1484, 1485, 5, 111, 0, 0, 1485, 1486, 5, 115, 0, 0, 1486, 1487, 5, 101, 0, 0, 1487, 1488, 5, 40, 0, 0, 1488, 362, 1, 0, 0, 0, 1489, 1490, 5, 100, 0, 0, 1490, 1491, 5, 111, 0, 0, 1491, 1492, 5, 116, 0, 0, 1492, 1493, 5, 40, 0, 0, 1493, 364, 1, 0, 0, 0, 1494, 1495, 5, 99, 0, 0, 1495, 1496, 5, 114, 0, 0, 1496, 1497, 5, 111, 0, 0, 1497, 1498, 5, 115, 0, 0, 1498, 1499, 5, 115, 0, 0, 1499, 1500, 5, 40, 0, 0, 1500, 366, 1, 0, 0, 0, 1501, 1502, 5, 114, 0, 0, 1502, 1503, 5, 101, 0, 0, 1503, 1504, 5, 115, 0, 0, 1504, 1505, 5, 117, 0, 0, 1505, 1506, 5, 108, 0, 0, 1506, 1507, 5, 116, 0, 0, 1507, 1508, 5, 97, 0, 0, 1508, 1509, 5, 110, 0, 0, 1509, 1510, 5, 116, 0, 0, 1510, 1511, 5, 40, 0, 0, 1511, 368, 1, 0, 0, 0, 1512, 1513, 5, 116, 0, 0, 1513, 1514, 5, 114, 0, 0, 1514, 1515, 5, 117, 0, 0, 1515, 1516, 5, 110, 0, 0, 1516, 1517, 5, 99, 0, 0, 1517, 1518, 5, 40, 0, 0, 1518, 370, 1, 0, 0, 0, 1519, 1520, 5, 99, 0, 0, 1520, 1521, 5, 111, 0, 0, 1521, 1522, 5, 110, 0, 0, 1522, 1523, 5, 106, 0, 0, 1523, 1524, 5, 117, 0, 0, 1524, 1525, 5, 103, 0, 0, 1525, 1526, 5, 97, 0, 0, 1526, 1527, 5, 116, 0, 0, 1527, 1528, 5, 101, 0, 0, 1528, 1529, 5, 40, 0, 0, 1529, 372, 1, 0, 0, 0, 1530, 1531, 5, 99, 0, 0, 1531, 1532, 5, 111, 0, 0, 1532, 1533, 5, 110, 0, 0, 1533, 1534, 5, 106, 0, 0, 1534, 1535, 5, 40, 0, 0, 1535, 374, 1, 0, 0, 0, 1536, 1537, 5, 97, 0, 0, 1537, 1538, 5, 114, 0, 0, 1538, 1539, 5, 103, 0, 0, 1539, 1540, 5, 40, 0, 0, 1540, 376, 1, 0, 0, 0, 1541, 1542, 5, 100, 0, 0, 1542, 1543, 5, 111, 0, 0, 1543, 1544, 5, 109, 0, 0, 1544, 1545, 5, 97, 0, 0, 1545, 1546, 5, 105, 0, 0, 1546, 1547, 5, 110, 0, 0, 1547, 1548, 5, 40, 0, 0, 1548, 378, 1, 0, 0, 0, 1549, 1550, 5, 112, 0, 0, 1550, 1551, 5, 105, 0, 0, 1551, 1552, 5, 101, 0, 0, 1552, 1553, 5, 99, 0, 0, 1553, 1554, 5, 101, 0, 0, 1554, 1555, 5, 119, 0, 0, 1555, 1556, 5, 105, 0, 0, 1556, 1557, 5, 115, 0, 0, 1557, 1558, 5, 101, 0, 0, 1558, 1559, 5, 40, 0, 0, 1559, 380, 1, 0, 0, 0, 1560, 1561, 5, 97, 0, 0, 1561, 1562, 5, 112, 0, 0, 1562, 1563, 5, 112, 0, 0, 1563, 1564, 5, 108, 0, 0, 1564, 1565, 5, 121, 0, 0, 1565, 1566, 5, 40, 0, 0, 1566, 382, 1, 0, 0, 0, 1567, 1568, 5, 108, 0, 0, 1568, 1569, 5, 97, 0, 0, 1569, 1570, 5, 109, 0, 0, 1570, 1571, 5, 98, 0, 0, 1571, 1572, 5, 100, 0, 0, 1572, 1573, 5, 97, 0, 0, 1573, 1574, 5, 40, 0, 0, 1574, 384, 1, 0, 0, 0, 1575, 1577, 5, 13, 0, 0, 1576, 1575, 1, 0, 0, 0, 1576, 1577, 1, 0, 0, 0, 1577, 1578, 1, 0, 0, 0, 1578, 1580, 5, 10, 0, 0, 1579, 1576, 1, 0, 0, 0, 1580, 1581, 1, 0, 0, 0, 1581, 1579, 1, 0, 0, 0, 1581, 1582, 1, 0, 0, 0, 1582, 1583, 1, 0, 0, 0, 1583, 1584, 6, 192, 0, 0, 1584, 386, 1, 0, 0, 0, 1585, 1587, 7, 0, 0, 0, 1586, 1588, 7, 1, 0, 0, 1587, 1586, 1, 0, 0, 0, 1587, 1588, 1, 0, 0, 0, 1588, 1590, 1, 0, 0, 0, 1589, 1591, 2, 48, 57, 0, 1590, 1589, 1, 0, 0, 0, 1591, 1592, 1, 0, 0, 0, 1592, 1590, 1, 0, 0, 0, 1592, 1593, 1, 0, 0, 0, 1593, 388, 1, 0, 0, 0, 1594, 1596, 2, 48, 57, 0, 1595, 1594, 1, 0, 0, 0, 1596, 1597, 1, 0, 0, 0, 1597, 1595, 1, 0, 0, 0, 1597, 1598, 1, 0, 0, 0, 1598, 1599, 1, 0, 0, 0, 1599, 1603, 5, 46, 0, 0, 1600, 1602, 2, 48, 57, 0, 1601, 1600, 1, 0, 0, 0, 1602, 1605, 1, 0, 0, 0, 1603, 1601, 1, 0, 0, 0, 1603, 1604, 1, 0, 0, 0, 1604, 1607, 1, 0, 0, 0, 1605, 1603, 1, 0, 0, 0, 1606, 1608, 3, 387, 193, 0, 1607, 1606, 1, 0, 0, 0, 1607, 1608, 1, 0, 0, 0, 1608, 1610, 1, 0, 0, 0, 1609, 1611, 5, 105, 0, 0, 1610, 1609, 1, 0, 0, 0, 1610, 1611, 1, 0, 0, 0, 1611, 1628, 1, 0, 0, 0, 1612, 1614, 5, 46, 0, 0, 1613, 1612, 1, 0, 0, 0, 1613, 1614, 1, 0, 0, 0, 1614, 1616, 1, 0, 0, 0, 1615, 1617, 2, 48, 57, 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, 1622, 3, 387, 193, 0, 1621, 1620, 1, 0, 0, 0, 1621, 1622, 1, 0, 0, 0, 1622, 1624, 1, 0, 0, 0, 1623, 1625, 5, 105, 0, 0, 1624, 1623, 1, 0, 0, 0, 1624, 1625, 1, 0, 0, 0, 1625, 1628, 1, 0, 0, 0, 1626, 1628, 5, 105, 0, 0, 1627, 1595, 1, 0, 0, 0, 1627, 1613, 1, 0, 0, 0, 1627, 1626, 1, 0, 0, 0, 1628, 390, 1, 0, 0, 0, 1629, 1630, 5, 67, 0, 0, 1630, 1648, 5, 67, 0, 0, 1631, 1632, 5, 82, 0, 0, 1632, 1648, 5, 82, 0, 0, 1633, 1634, 5, 81, 0, 0, 1634, 1648, 5, 81, 0, 0, 1635, 1636, 5, 90, 0, 0, 1636, 1648, 5, 90, 0, 0, 1637, 1638, 5, 66, 0, 0, 1638, 1648, 5, 66, 0, 0, 1639, 1640, 5, 90, 0, 0, 1640, 1641, 5, 90, 0, 0, 1641, 1648, 5, 42, 0, 0, 1642, 1643, 5, 90, 0, 0, 1643, 1644, 5, 90, 0, 0, 1644, 1648, 5, 43, 0, 0, 1645, 1646, 5, 80, 0, 0, 1646, 1648, 5, 80, 0, 0, 1647, 1629, 1, 0, 0, 0, 1647, 1631, 1, 0, 0, 0, 1647, 1633, 1, 0, 0, 0, 1647, 1635, 1, 0, 0, 0, 1647, 1637, 1, 0, 0, 0, 1647, 1639, 1, 0, 0, 0, 1647, 1642, 1, 0, 0, 0, 1647, 1645, 1, 0, 0, 0, 1648, 392, 1, 0, 0, 0, 1649, 1650, 5, 116, 0, 0, 1650, 1651, 5, 114, 0, 0, 1651, 1652, 5, 117, 0, 0, 1652, 1668, 5, 101, 0, 0, 1653, 1654, 5, 84, 0, 0, 1654, 1655, 5, 114, 0, 0, 1655, 1656, 5, 117, 0, 0, 1656, 1668, 5, 101, 0, 0, 1657, 1658, 5, 102, 0, 0, 1658, 1659, 5, 97, 0, 0, 1659, 1660, 5, 108, 0, 0, 1660, 1661, 5, 115, 0, 0, 1661, 1668, 5, 101, 0, 0, 1662, 1663, 5, 70, 0, 0, 1663, 1664, 5, 97, 0, 0, 1664, 1665, 5, 108, 0, 0, 1665, 1666, 5, 115, 0, 0, 1666, 1668, 5, 101, 0, 0, 1667, 1649, 1, 0, 0, 0, 1667, 1653, 1, 0, 0, 0, 1667, 1657, 1, 0, 0, 0, 1667, 1662, 1, 0, 0, 0, 1668, 394, 1, 0, 0, 0, 1669, 1670, 5, 78, 0, 0, 1670, 1671, 5, 97, 0, 0, 1671, 1672, 5, 78, 0, 0, 1672, 396, 1, 0, 0, 0, 1673, 1675, 7, 2, 0, 0, 1674, 1673, 1, 0, 0, 0, 1675, 1676, 1, 0, 0, 0, 1676, 1674, 1, 0, 0, 0, 1676, 1677, 1, 0, 0, 0, 1677, 1686, 1, 0, 0, 0, 1678, 1680, 5, 95, 0, 0, 1679, 1681, 7, 3, 0, 0, 1680, 1679, 1, 0, 0, 0, 1681, 1682, 1, 0, 0, 0, 1682, 1680, 1, 0, 0, 0, 1682, 1683, 1, 0, 0, 0, 1683, 1685, 1, 0, 0, 0, 1684, 1678, 1, 0, 0, 0, 1685, 1688, 1, 0, 0, 0, 1686, 1684, 1, 0, 0, 0, 1686, 1687, 1, 0, 0, 0, 1687, 398, 1, 0, 0, 0, 1688, 1686, 1, 0, 0, 0, 1689, 1690, 5, 47, 0, 0, 1690, 1691, 5, 47, 0, 0, 1691, 1695, 1, 0, 0, 0, 1692, 1694, 8, 4, 0, 0, 1693, 1692, 1, 0, 0, 0, 1694, 1697, 1, 0, 0, 0, 1695, 1693, 1, 0, 0, 0, 1695, 1696, 1, 0, 0, 0, 1696, 1702, 1, 0, 0, 0, 1697, 1695, 1, 0, 0, 0, 1698, 1700, 5, 13, 0, 0, 1699, 1698, 1, 0, 0, 0, 1699, 1700, 1, 0, 0, 0, 1700, 1701, 1, 0, 0, 0, 1701, 1703, 5, 10, 0, 0, 1702, 1699, 1, 0, 0, 0, 1702, 1703, 1, 0, 0, 0, 1703, 1716, 1, 0, 0, 0, 1704, 1705, 5, 47, 0, 0, 1705, 1706, 5, 42, 0, 0, 1706, 1710, 1, 0, 0, 0, 1707, 1709, 9, 0, 0, 0, 1708, 1707, 1, 0, 0, 0, 1709, 1712, 1, 0, 0, 0, 1710, 1711, 1, 0, 0, 0, 1710, 1708, 1, 0, 0, 0, 1711, 1713, 1, 0, 0, 0, 1712, 1710, 1, 0, 0, 0, 1713, 1714, 5, 42, 0, 0, 1714, 1716, 5, 47, 0, 0, 1715, 1689, 1, 0, 0, 0, 1715, 1704, 1, 0, 0, 0, 1716, 1717, 1, 0, 0, 0, 1717, 1718, 6, 199, 0, 0, 1718, 400, 1, 0, 0, 0, 1719, 1721, 7, 5, 0, 0, 1720, 1719, 1, 0, 0, 0, 1721, 1722, 1, 0, 0, 0, 1722, 1720, 1, 0, 0, 0, 1722, 1723, 1, 0, 0, 0, 1723, 1724, 1, 0, 0, 0, 1724, 1725, 6, 200, 0, 0, 1725, 402, 1, 0, 0, 0, 25, 0, 1576, 1581, 1587, 1592, 1597, 1603, 1607, 1610, 1613, 1618, 1621, 1624, 1627, 1647, 1667, 1676, 1682, 1686, 1695, 1699, 1702, 1710, 1715, 1722, 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 d0dbc3097..d1fc41ed7 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.tokens +++ b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.tokens @@ -186,14 +186,18 @@ T__184=185 T__185=186 T__186=187 T__187=188 -NEWLINE=189 -NUMBER=190 -SPECIALSET=191 -BOOLEAN=192 -NAN=193 -VARIABLE=194 -COMMENT=195 -WS=196 +T__188=189 +T__189=190 +T__190=191 +T__191=192 +NEWLINE=193 +NUMBER=194 +SPECIALSET=195 +BOOLEAN=196 +NAN=197 +VARIABLE=198 +COMMENT=199 +WS=200 '!'=1 '^'=2 '-'=3 @@ -373,13 +377,17 @@ WS=196 'Ci('=177 'Shi('=178 'Chi('=179 -'trunc('=180 -'conjugate('=181 -'conj('=182 -'arg('=183 -'det('=184 -'domain('=185 -'piecewise('=186 -'apply('=187 -'lambda('=188 -'NaN'=193 +'det('=180 +'transpose('=181 +'dot('=182 +'cross('=183 +'resultant('=184 +'trunc('=185 +'conjugate('=186 +'conj('=187 +'arg('=188 +'domain('=189 +'piecewise('=190 +'apply('=191 +'lambda('=192 +'NaN'=197 diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs b/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs index 20f6bfac4..27cde1b72 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs +++ b/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs @@ -74,8 +74,9 @@ public const int 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, T__183=184, T__184=185, - T__185=186, T__186=187, T__187=188, NEWLINE=189, NUMBER=190, SPECIALSET=191, - BOOLEAN=192, NAN=193, VARIABLE=194, COMMENT=195, WS=196; + T__185=186, T__186=187, T__187=188, T__188=189, T__189=190, T__190=191, + T__191=192, NEWLINE=193, NUMBER=194, SPECIALSET=195, BOOLEAN=196, NAN=197, + VARIABLE=198, COMMENT=199, WS=200; 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, @@ -123,9 +124,10 @@ public const int "'preimage('", "'floor('", "'ceil('", "'ceiling('", "'round('", "'min('", "'max('", "'argmax('", "'argmin('", "'gcd('", "'lcm('", "'binomial('", "'iverson('", "'aleph('", "'erf('", "'erfc('", "'erfi('", "'Ei('", "'li('", - "'polygamma('", "'digamma('", "'Si('", "'Ci('", "'Shi('", "'Chi('", "'trunc('", - "'conjugate('", "'conj('", "'arg('", "'det('", "'domain('", "'piecewise('", - "'apply('", "'lambda('", null, null, null, null, "'NaN'" + "'polygamma('", "'digamma('", "'Si('", "'Ci('", "'Shi('", "'Chi('", "'det('", + "'transpose('", "'dot('", "'cross('", "'resultant('", "'trunc('", "'conjugate('", + "'conj('", "'arg('", "'domain('", "'piecewise('", "'apply('", "'lambda('", + null, null, null, null, "'NaN'" }; private static readonly string[] _SymbolicNames = { null, null, null, null, null, null, null, null, null, null, null, null, @@ -143,8 +145,9 @@ 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, null, null, null, null, null, "NEWLINE", "NUMBER", - "SPECIALSET", "BOOLEAN", "NAN", "VARIABLE", "COMMENT", "WS" + null, null, null, null, null, null, null, null, null, null, null, null, + null, "NEWLINE", "NUMBER", "SPECIALSET", "BOOLEAN", "NAN", "VARIABLE", + "COMMENT", "WS" }; public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames); @@ -758,6 +761,10 @@ public Mult_expressionContext mult_expression() { case T__185: case T__186: case T__187: + case T__188: + case T__189: + case T__190: + case T__191: case NUMBER: case SPECIALSET: case BOOLEAN: @@ -1021,6 +1028,10 @@ public Sum_expressionContext sum_expression() { case T__185: case T__186: case T__187: + case T__188: + case T__189: + case T__190: + case T__191: case NUMBER: case SPECIALSET: case BOOLEAN: @@ -2294,6 +2305,10 @@ public ExpressionContext expression() { case T__185: case T__186: case T__187: + case T__188: + case T__189: + case T__190: + case T__191: case NUMBER: case SPECIALSET: case BOOLEAN: @@ -2659,7 +2674,7 @@ public Function_argumentsContext function_arguments() { State = 410; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - if (((((_la - 3)) & ~0x3f) == 0 && ((1L << (_la - 3)) & -100311193909985277L) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & -1L) != 0) || ((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & -288230376151711745L) != 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)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 125L) != 0)) { { State = 399; _localctx.e = expression(); @@ -2735,7 +2750,7 @@ public Set_itemsContext set_items() { State = 432; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - if (((((_la - 3)) & ~0x3f) == 0 && ((1L << (_la - 3)) & -100311193909985253L) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & -1L) != 0) || ((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & -288230376151711745L) != 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)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 125L) != 0)) { { State = 417; ErrorHandler.Sync(this); @@ -2885,6 +2900,10 @@ public Set_itemsContext set_items() { case T__185: case T__186: case T__187: + case T__188: + case T__189: + case T__190: + case T__191: case NUMBER: case SPECIALSET: case BOOLEAN: @@ -3070,6 +3089,10 @@ public Set_itemsContext set_items() { case T__185: case T__186: case T__187: + case T__188: + case T__189: + case T__190: + case T__191: case NUMBER: case SPECIALSET: case BOOLEAN: @@ -3289,7 +3312,7 @@ public AtomContext atom() { AtomContext _localctx = new AtomContext(Context, State); EnterRule(_localctx, 48, RULE_atom); try { - State = 1159; + State = 1179; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,43,Context) ) { case 1: @@ -4956,7 +4979,7 @@ public AtomContext atom() { _localctx.args = function_arguments(); State = 1116; Match(T__30); - _localctx.value = NotImplementedFunction("trunc", "rounding functions"); + Assert("det", 1, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Determinant(_localctx.args.list[0]); } break; case 140: @@ -4968,7 +4991,7 @@ public AtomContext atom() { _localctx.args = function_arguments(); State = 1121; Match(T__30); - _localctx.value = NotImplementedFunction("conjugate", "complex conjugate as a symbolic function"); + Assert("transpose", 1, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Transposed(_localctx.args.list[0]); } break; case 141: @@ -4980,7 +5003,7 @@ public AtomContext atom() { _localctx.args = function_arguments(); State = 1126; Match(T__30); - _localctx.value = NotImplementedFunction("conj", "complex conjugate as a symbolic function"); + Assert("dot", 2, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Dot(_localctx.args.list[0], _localctx.args.list[1]); } break; case 142: @@ -4992,7 +5015,7 @@ public AtomContext atom() { _localctx.args = function_arguments(); State = 1131; Match(T__30); - _localctx.value = NotImplementedFunction("arg", "complex argument as a symbolic function"); + Assert("cross", (1, 2), _localctx.args.list.Count); _localctx.value = ParsingHelpers.Cross(_localctx.args.list); } break; case 143: @@ -5004,7 +5027,7 @@ public AtomContext atom() { _localctx.args = function_arguments(); State = 1136; Match(T__30); - _localctx.value = NotImplementedFunction("det", "determinant in an expression; a Matrix has the property Determinant"); + Assert("resultant", 3, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Resultant(_localctx.args.list[0], _localctx.args.list[1], _localctx.args.list[2]); } break; case 144: @@ -5015,6 +5038,54 @@ public AtomContext atom() { State = 1140; _localctx.args = function_arguments(); State = 1141; + Match(T__30); + _localctx.value = NotImplementedFunction("trunc", "rounding functions"); + } + break; + case 145: + EnterOuterAlt(_localctx, 145); + { + State = 1144; + Match(T__185); + State = 1145; + _localctx.args = function_arguments(); + State = 1146; + Match(T__30); + _localctx.value = NotImplementedFunction("conjugate", "complex conjugate as a symbolic function"); + } + break; + case 146: + EnterOuterAlt(_localctx, 146); + { + State = 1149; + Match(T__186); + State = 1150; + _localctx.args = function_arguments(); + State = 1151; + Match(T__30); + _localctx.value = NotImplementedFunction("conj", "complex conjugate as a symbolic function"); + } + break; + case 147: + EnterOuterAlt(_localctx, 147); + { + State = 1154; + Match(T__187); + State = 1155; + _localctx.args = function_arguments(); + State = 1156; + Match(T__30); + _localctx.value = NotImplementedFunction("arg", "complex argument as a symbolic function"); + } + break; + case 148: + EnterOuterAlt(_localctx, 148); + { + State = 1159; + Match(T__188); + State = 1160; + _localctx.args = function_arguments(); + State = 1161; Match(T__30); Assert("domain", 2, _localctx.args.list.Count); @@ -5041,14 +5112,14 @@ public AtomContext atom() { } break; - case 145: - EnterOuterAlt(_localctx, 145); + case 149: + EnterOuterAlt(_localctx, 149); { - State = 1144; - Match(T__185); - State = 1145; + State = 1164; + Match(T__189); + State = 1165; _localctx.args = function_arguments(); - State = 1146; + State = 1166; Match(T__30); var cases = new List(); @@ -5061,14 +5132,14 @@ public AtomContext atom() { } break; - case 146: - EnterOuterAlt(_localctx, 146); + case 150: + EnterOuterAlt(_localctx, 150); { - State = 1149; - Match(T__186); - State = 1150; + State = 1169; + Match(T__190); + State = 1170; _localctx.args = function_arguments(); - State = 1151; + State = 1171; Match(T__30); if (_localctx.args.list.Count < 2) @@ -5077,14 +5148,14 @@ public AtomContext atom() { } break; - case 147: - EnterOuterAlt(_localctx, 147); + case 151: + EnterOuterAlt(_localctx, 151); { - State = 1154; - Match(T__187); - State = 1155; + State = 1174; + Match(T__191); + State = 1175; _localctx.args = function_arguments(); - State = 1156; + State = 1176; Match(T__30); if (_localctx.args.list.Count < 2) @@ -5147,9 +5218,9 @@ public StatementContext statement() { try { EnterOuterAlt(_localctx, 1); { - State = 1161; + State = 1181; _localctx._expression = expression(); - State = 1162; + State = 1182; Match(Eof); Result = _localctx._expression.value; } @@ -5166,7 +5237,7 @@ public StatementContext statement() { } private static int[] _serializedATN = { - 4,1,196,1166,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,200,1186,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, @@ -5248,340 +5319,348 @@ 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,3,24,1160,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,1347,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,1159,1,0,0,0,50,1161,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,1160,6,24,-1,0,448,449,5,51,0,0,449,1160,6,24,-1, - 0,450,451,5,193,0,0,451,1160,6,24,-1,0,452,453,5,190,0,0,453,1160,6,24, - -1,0,454,455,5,192,0,0,455,1160,6,24,-1,0,456,457,5,191,0,0,457,1160,6, - 24,-1,0,458,459,5,194,0,0,459,1160,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,1160,1,0,0,0,465,466, - 5,54,0,0,466,467,3,48,24,0,467,468,6,24,-1,0,468,1160,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,1160, - 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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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, - 1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160, - 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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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, - 1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160, - 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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160, - 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,1160,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,1160,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, - 1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160, - 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,1160,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,1160,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, - 1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160,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,1160, - 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,1160,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,1160,1,0,0,0,1144,1145,5, - 186,0,0,1145,1146,3,40,20,0,1146,1147,5,31,0,0,1147,1148,6,24,-1,0,1148, - 1160,1,0,0,0,1149,1150,5,187,0,0,1150,1151,3,40,20,0,1151,1152,5,31,0, - 0,1152,1153,6,24,-1,0,1153,1160,1,0,0,0,1154,1155,5,188,0,0,1155,1156, - 3,40,20,0,1156,1157,5,31,0,0,1157,1158,6,24,-1,0,1158,1160,1,0,0,0,1159, - 446,1,0,0,0,1159,448,1,0,0,0,1159,450,1,0,0,0,1159,452,1,0,0,0,1159,454, - 1,0,0,0,1159,456,1,0,0,0,1159,458,1,0,0,0,1159,460,1,0,0,0,1159,465,1, - 0,0,0,1159,469,1,0,0,0,1159,474,1,0,0,0,1159,479,1,0,0,0,1159,484,1,0, - 0,0,1159,489,1,0,0,0,1159,494,1,0,0,0,1159,499,1,0,0,0,1159,504,1,0,0, - 0,1159,509,1,0,0,0,1159,514,1,0,0,0,1159,519,1,0,0,0,1159,524,1,0,0,0, - 1159,529,1,0,0,0,1159,534,1,0,0,0,1159,539,1,0,0,0,1159,544,1,0,0,0,1159, - 549,1,0,0,0,1159,554,1,0,0,0,1159,559,1,0,0,0,1159,564,1,0,0,0,1159,569, - 1,0,0,0,1159,574,1,0,0,0,1159,579,1,0,0,0,1159,584,1,0,0,0,1159,589,1, - 0,0,0,1159,594,1,0,0,0,1159,599,1,0,0,0,1159,604,1,0,0,0,1159,609,1,0, - 0,0,1159,614,1,0,0,0,1159,619,1,0,0,0,1159,624,1,0,0,0,1159,629,1,0,0, - 0,1159,634,1,0,0,0,1159,639,1,0,0,0,1159,644,1,0,0,0,1159,649,1,0,0,0, - 1159,654,1,0,0,0,1159,659,1,0,0,0,1159,664,1,0,0,0,1159,669,1,0,0,0,1159, - 674,1,0,0,0,1159,679,1,0,0,0,1159,684,1,0,0,0,1159,689,1,0,0,0,1159,694, - 1,0,0,0,1159,699,1,0,0,0,1159,704,1,0,0,0,1159,709,1,0,0,0,1159,714,1, - 0,0,0,1159,719,1,0,0,0,1159,724,1,0,0,0,1159,729,1,0,0,0,1159,734,1,0, - 0,0,1159,739,1,0,0,0,1159,744,1,0,0,0,1159,749,1,0,0,0,1159,754,1,0,0, - 0,1159,759,1,0,0,0,1159,764,1,0,0,0,1159,769,1,0,0,0,1159,774,1,0,0,0, - 1159,779,1,0,0,0,1159,784,1,0,0,0,1159,789,1,0,0,0,1159,794,1,0,0,0,1159, - 799,1,0,0,0,1159,804,1,0,0,0,1159,809,1,0,0,0,1159,814,1,0,0,0,1159,819, - 1,0,0,0,1159,824,1,0,0,0,1159,829,1,0,0,0,1159,834,1,0,0,0,1159,839,1, - 0,0,0,1159,844,1,0,0,0,1159,849,1,0,0,0,1159,854,1,0,0,0,1159,859,1,0, - 0,0,1159,864,1,0,0,0,1159,869,1,0,0,0,1159,874,1,0,0,0,1159,879,1,0,0, - 0,1159,884,1,0,0,0,1159,889,1,0,0,0,1159,894,1,0,0,0,1159,899,1,0,0,0, - 1159,904,1,0,0,0,1159,909,1,0,0,0,1159,914,1,0,0,0,1159,919,1,0,0,0,1159, - 924,1,0,0,0,1159,929,1,0,0,0,1159,934,1,0,0,0,1159,939,1,0,0,0,1159,944, - 1,0,0,0,1159,949,1,0,0,0,1159,954,1,0,0,0,1159,959,1,0,0,0,1159,964,1, - 0,0,0,1159,969,1,0,0,0,1159,974,1,0,0,0,1159,979,1,0,0,0,1159,984,1,0, - 0,0,1159,989,1,0,0,0,1159,994,1,0,0,0,1159,999,1,0,0,0,1159,1004,1,0,0, - 0,1159,1009,1,0,0,0,1159,1014,1,0,0,0,1159,1019,1,0,0,0,1159,1024,1,0, - 0,0,1159,1029,1,0,0,0,1159,1034,1,0,0,0,1159,1039,1,0,0,0,1159,1044,1, - 0,0,0,1159,1049,1,0,0,0,1159,1054,1,0,0,0,1159,1059,1,0,0,0,1159,1064, - 1,0,0,0,1159,1069,1,0,0,0,1159,1074,1,0,0,0,1159,1079,1,0,0,0,1159,1084, - 1,0,0,0,1159,1089,1,0,0,0,1159,1094,1,0,0,0,1159,1099,1,0,0,0,1159,1104, - 1,0,0,0,1159,1109,1,0,0,0,1159,1114,1,0,0,0,1159,1119,1,0,0,0,1159,1124, - 1,0,0,0,1159,1129,1,0,0,0,1159,1134,1,0,0,0,1159,1139,1,0,0,0,1159,1144, - 1,0,0,0,1159,1149,1,0,0,0,1159,1154,1,0,0,0,1160,49,1,0,0,0,1161,1162, - 3,32,16,0,1162,1163,5,0,0,1,1163,1164,6,25,-1,0,1164,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,1159 + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,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,1180, + 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,1371,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,1179,1,0,0,0,50,1181,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,1180,6,24,-1,0, + 448,449,5,51,0,0,449,1180,6,24,-1,0,450,451,5,197,0,0,451,1180,6,24,-1, + 0,452,453,5,194,0,0,453,1180,6,24,-1,0,454,455,5,196,0,0,455,1180,6,24, + -1,0,456,457,5,195,0,0,457,1180,6,24,-1,0,458,459,5,198,0,0,459,1180,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,1180,1,0,0,0,465,466,5,54,0,0,466,467,3,48,24,0,467,468,6, + 24,-1,0,468,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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, + 1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180, + 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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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, + 1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180, + 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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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, + 1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180, + 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,1180,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,1180,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, + 1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180,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,1180, + 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,1180,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,1180,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, + 1180,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,1180,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,1180,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,1180,1,0,0,0,1144,1145,5,186,0,0,1145,1146,3,40,20,0,1146,1147, + 5,31,0,0,1147,1148,6,24,-1,0,1148,1180,1,0,0,0,1149,1150,5,187,0,0,1150, + 1151,3,40,20,0,1151,1152,5,31,0,0,1152,1153,6,24,-1,0,1153,1180,1,0,0, + 0,1154,1155,5,188,0,0,1155,1156,3,40,20,0,1156,1157,5,31,0,0,1157,1158, + 6,24,-1,0,1158,1180,1,0,0,0,1159,1160,5,189,0,0,1160,1161,3,40,20,0,1161, + 1162,5,31,0,0,1162,1163,6,24,-1,0,1163,1180,1,0,0,0,1164,1165,5,190,0, + 0,1165,1166,3,40,20,0,1166,1167,5,31,0,0,1167,1168,6,24,-1,0,1168,1180, + 1,0,0,0,1169,1170,5,191,0,0,1170,1171,3,40,20,0,1171,1172,5,31,0,0,1172, + 1173,6,24,-1,0,1173,1180,1,0,0,0,1174,1175,5,192,0,0,1175,1176,3,40,20, + 0,1176,1177,5,31,0,0,1177,1178,6,24,-1,0,1178,1180,1,0,0,0,1179,446,1, + 0,0,0,1179,448,1,0,0,0,1179,450,1,0,0,0,1179,452,1,0,0,0,1179,454,1,0, + 0,0,1179,456,1,0,0,0,1179,458,1,0,0,0,1179,460,1,0,0,0,1179,465,1,0,0, + 0,1179,469,1,0,0,0,1179,474,1,0,0,0,1179,479,1,0,0,0,1179,484,1,0,0,0, + 1179,489,1,0,0,0,1179,494,1,0,0,0,1179,499,1,0,0,0,1179,504,1,0,0,0,1179, + 509,1,0,0,0,1179,514,1,0,0,0,1179,519,1,0,0,0,1179,524,1,0,0,0,1179,529, + 1,0,0,0,1179,534,1,0,0,0,1179,539,1,0,0,0,1179,544,1,0,0,0,1179,549,1, + 0,0,0,1179,554,1,0,0,0,1179,559,1,0,0,0,1179,564,1,0,0,0,1179,569,1,0, + 0,0,1179,574,1,0,0,0,1179,579,1,0,0,0,1179,584,1,0,0,0,1179,589,1,0,0, + 0,1179,594,1,0,0,0,1179,599,1,0,0,0,1179,604,1,0,0,0,1179,609,1,0,0,0, + 1179,614,1,0,0,0,1179,619,1,0,0,0,1179,624,1,0,0,0,1179,629,1,0,0,0,1179, + 634,1,0,0,0,1179,639,1,0,0,0,1179,644,1,0,0,0,1179,649,1,0,0,0,1179,654, + 1,0,0,0,1179,659,1,0,0,0,1179,664,1,0,0,0,1179,669,1,0,0,0,1179,674,1, + 0,0,0,1179,679,1,0,0,0,1179,684,1,0,0,0,1179,689,1,0,0,0,1179,694,1,0, + 0,0,1179,699,1,0,0,0,1179,704,1,0,0,0,1179,709,1,0,0,0,1179,714,1,0,0, + 0,1179,719,1,0,0,0,1179,724,1,0,0,0,1179,729,1,0,0,0,1179,734,1,0,0,0, + 1179,739,1,0,0,0,1179,744,1,0,0,0,1179,749,1,0,0,0,1179,754,1,0,0,0,1179, + 759,1,0,0,0,1179,764,1,0,0,0,1179,769,1,0,0,0,1179,774,1,0,0,0,1179,779, + 1,0,0,0,1179,784,1,0,0,0,1179,789,1,0,0,0,1179,794,1,0,0,0,1179,799,1, + 0,0,0,1179,804,1,0,0,0,1179,809,1,0,0,0,1179,814,1,0,0,0,1179,819,1,0, + 0,0,1179,824,1,0,0,0,1179,829,1,0,0,0,1179,834,1,0,0,0,1179,839,1,0,0, + 0,1179,844,1,0,0,0,1179,849,1,0,0,0,1179,854,1,0,0,0,1179,859,1,0,0,0, + 1179,864,1,0,0,0,1179,869,1,0,0,0,1179,874,1,0,0,0,1179,879,1,0,0,0,1179, + 884,1,0,0,0,1179,889,1,0,0,0,1179,894,1,0,0,0,1179,899,1,0,0,0,1179,904, + 1,0,0,0,1179,909,1,0,0,0,1179,914,1,0,0,0,1179,919,1,0,0,0,1179,924,1, + 0,0,0,1179,929,1,0,0,0,1179,934,1,0,0,0,1179,939,1,0,0,0,1179,944,1,0, + 0,0,1179,949,1,0,0,0,1179,954,1,0,0,0,1179,959,1,0,0,0,1179,964,1,0,0, + 0,1179,969,1,0,0,0,1179,974,1,0,0,0,1179,979,1,0,0,0,1179,984,1,0,0,0, + 1179,989,1,0,0,0,1179,994,1,0,0,0,1179,999,1,0,0,0,1179,1004,1,0,0,0,1179, + 1009,1,0,0,0,1179,1014,1,0,0,0,1179,1019,1,0,0,0,1179,1024,1,0,0,0,1179, + 1029,1,0,0,0,1179,1034,1,0,0,0,1179,1039,1,0,0,0,1179,1044,1,0,0,0,1179, + 1049,1,0,0,0,1179,1054,1,0,0,0,1179,1059,1,0,0,0,1179,1064,1,0,0,0,1179, + 1069,1,0,0,0,1179,1074,1,0,0,0,1179,1079,1,0,0,0,1179,1084,1,0,0,0,1179, + 1089,1,0,0,0,1179,1094,1,0,0,0,1179,1099,1,0,0,0,1179,1104,1,0,0,0,1179, + 1109,1,0,0,0,1179,1114,1,0,0,0,1179,1119,1,0,0,0,1179,1124,1,0,0,0,1179, + 1129,1,0,0,0,1179,1134,1,0,0,0,1179,1139,1,0,0,0,1179,1144,1,0,0,0,1179, + 1149,1,0,0,0,1179,1154,1,0,0,0,1179,1159,1,0,0,0,1179,1164,1,0,0,0,1179, + 1169,1,0,0,0,1179,1174,1,0,0,0,1180,49,1,0,0,0,1181,1182,3,32,16,0,1182, + 1183,5,0,0,1,1183,1184,6,25,-1,0,1184,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,1179 }; public static readonly ATN _ATN = diff --git a/Sources/AngouriMath/Core/Antlr/ParsingHelpers.cs b/Sources/AngouriMath/Core/Antlr/ParsingHelpers.cs index 91b1e1993..fc3f05154 100644 --- a/Sources/AngouriMath/Core/Antlr/ParsingHelpers.cs +++ b/Sources/AngouriMath/Core/Antlr/ParsingHelpers.cs @@ -31,6 +31,92 @@ internal static Matrix TryBuildingMatrix(List elements) return tb.ToMatrix() ?? throw new AngouriBugException("Should've been checked already"); } + // det, transpose, dot, cross and resultant are computed from what they are applied to, and + // there is no node for any of them: det(A) of a symbol A has nothing to be. So an argument + // has to be a matrix written out, or an expression that is one once its operations are + // carried out, as 2 [[1, 2], [3, 4]] is. + // https://github.com/asc-community/AngouriMath/issues/2147 + private static Matrix MatrixArgument(string function, Entity argument) + => argument as Matrix ?? argument.InnerSimplified as Matrix + ?? throw new InvalidArgumentParseException( + $"{function} is computed from the entries of a matrix or a vector written out, " + + $"as in {function}([[1, 2], [3, 4]]), and {argument} is not one"); + + /// The entries of a vector, written as a column or as a row. + private static Entity[] Components(string function, Entity argument) + { + var vector = MatrixArgument(function, argument); + if (vector.ColumnCount == 1) + return Enumerable.Range(0, vector.RowCount).Select(i => vector[i, 0]).ToArray(); + if (vector.RowCount == 1) + return Enumerable.Range(0, vector.ColumnCount).Select(j => vector[0, j]).ToArray(); + throw new InvalidArgumentParseException( + $"{function} is taken of vectors, and {vector} is a {vector.RowCount} by {vector.ColumnCount} matrix"); + } + + /// det(M): the determinant of a square matrix. + internal static Entity Determinant(Entity argument) + { + var matrix = MatrixArgument("det", argument); + return matrix.Determinant ?? throw new InvalidArgumentParseException( + $"det is taken of a square matrix, and {matrix} is {matrix.RowCount} by {matrix.ColumnCount}"); + } + + /// transpose(M), which ]T writes only after a bracket. + internal static Entity Transposed(Entity argument) + => MatrixArgument("transpose", argument).T; + + /// + /// dot(a, b): the sum of the products of the components, without conjugating either + /// side, as SymPy's dot and Mathematica's Dot are. + /// + internal static Entity Dot(Entity left, Entity right) + { + var a = Components("dot", left); + var b = Components("dot", right); + if (a.Length != b.Length) + throw new InvalidArgumentParseException( + $"dot is taken of two vectors of one length, and these have {a.Length} and {b.Length} components"); + return Enumerable.Range(0, a.Length).Select(i => a[i] * b[i]).Aggregate((sum, term) => sum + term); + } + + /// + /// cross(a, b), the vector product in three dimensions, and cross(a), the vector + /// in the plane that a turns into through a right angle anticlockwise: (-a_2, a_1), + /// as Mathematica's Cross of one vector is. So dot(cross(a), b) is the plane's + /// pseudo-scalar product a_1 b_2 - a_2 b_1. + /// + internal static Entity Cross(List arguments) + { + if (arguments.Count == 1) + { + var a = Components("cross", arguments[0]); + if (a.Length != 2) + throw new InvalidArgumentParseException( + $"cross of one vector is its turn through a right angle in the plane, and this vector has {a.Length} components"); + return MathS.Vector(-a[1], a[0]); + } + var u = Components("cross", arguments[0]); + var v = Components("cross", arguments[1]); + if (u.Length != 3 || v.Length != 3) + throw new InvalidArgumentParseException( + $"cross of two vectors is the vector product in three dimensions, and these have {u.Length} and {v.Length} components"); + return MathS.Vector( + u[1] * v[2] - u[2] * v[1], + u[2] * v[0] - u[0] * v[2], + u[0] * v[1] - u[1] * v[0]); + } + + /// resultant(p, q, x), eliminating x between two polynomials. + internal static Entity Resultant(Entity left, Entity right, Entity eliminate) + { + if (eliminate is not Variable { IsConstant: false } variable) + throw new InvalidArgumentParseException( + $"resultant's third argument is the variable to eliminate, and {eliminate} is not a variable"); + return MathS.Polynomials.Resultant(left, right, variable) ?? throw new InvalidArgumentParseException( + $"resultant is taken of two polynomials in {variable} with rational coefficients, and {left} and {right} are not both"); + } + /// /// The that a quotient of two integer literals denotes, or /// the node unchanged where it denotes none. diff --git a/Sources/AngouriMath/Docs/Usage/Syntax.md b/Sources/AngouriMath/Docs/Usage/Syntax.md index dfd3f14a5..16fbde81e 100644 --- a/Sources/AngouriMath/Docs/Usage/Syntax.md +++ b/Sources/AngouriMath/Docs/Usage/Syntax.md @@ -219,6 +219,17 @@ other; `Domain.Any` is a codomain and not a candidate for the job (1 by 3). There is no empty vector: `[]` is not a value this library has ([#1028](https://github.com/asc-community/AngouriMath/issues/1028)), while the empty set `{}` is. +`det(M)` is the determinant of a square matrix and `transpose(M)` its transpose. `dot(a, b)` is the +sum of the products of two vectors' components, with neither side conjugated. `cross(a, b)` is the +vector product in three dimensions, and `cross(a)` turns a vector in the plane through a right angle +anticlockwise, `cross([x, y])` being `[-y, x]`, so `dot(cross(a), b)` is the plane's pseudo-scalar +product. `resultant(p, q, x)` eliminates `x` between two polynomials: +`resultant(x^2 + y^2 - 1, x + y - 1, y)` is `2 * x ^ 2 - 2 * x`. Each is computed from its +arguments when it is parsed, and there is no node for any of them, so a matrix or a vector has to be +written out, or be one once its operations are carried out: `det(2 * [[1, 2], [3, 4]])` is `-8`, +and `det(A)` of a symbol `A` is refused +([#2147](https://github.com/asc-community/AngouriMath/issues/2147)). + `(|x|)` is the absolute value of `x`, and prints back as `abs(x)`. ## Functions diff --git a/Sources/Tests/UnitTests/Convenience/MatrixFunctionsInAnExpressionTest.cs b/Sources/Tests/UnitTests/Convenience/MatrixFunctionsInAnExpressionTest.cs new file mode 100644 index 000000000..41126ca7b --- /dev/null +++ b/Sources/Tests/UnitTests/Convenience/MatrixFunctionsInAnExpressionTest.cs @@ -0,0 +1,91 @@ +// +// 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; +using AngouriMath.Core.Exceptions; +using AngouriMath.Extensions; +using Xunit; +using static AngouriMath.Entity.Number; + +namespace AngouriMath.Tests.Convenience +{ + /// + /// det, transpose, dot, cross and resultant written in an + /// expression. Each existed in C#, as Matrix.Determinant, Matrix.T and + /// MathS.Polynomials.Resultant, or not at all, and none could be written: det(M) was + /// refused, and the rest were read as products. Modenov's Problems in Geometry computes + /// areas, collinearity and elimination with them. + /// #2147 + /// + [Trait("Area", "Convenience")] + public sealed class MatrixFunctionsInAnExpressionTest + { + [Theory] + [InlineData("det([[1, 2], [3, 4]])", "-2")] + [InlineData("det([[a, b], [c, d]])", "a * d - b * c")] + [InlineData("det(2 * [[1, 2], [3, 4]])", "-8")] + [InlineData("det([[5]])", "5")] + // The oriented area of the triangle (0, 0), (1, 0), (0, 1), as Modenov writes it. + [InlineData("det([[0, 0, 1], [1, 0, 1], [0, 1, 1]]) / 2", "1/2")] + [InlineData("dot([1, 2, 3], [4, 5, 6])", "32")] + [InlineData("dot([a, b], [c, d])", "a * c + b * d")] + [InlineData("dot([1, 2]T, [3, 4])", "11")] + // Not conjugated: dot([i], [i]) is i * i. + [InlineData("dot([i], [i])", "-1")] + // The plane's pseudo-scalar product, which the book writes (a, b). + [InlineData("dot(cross([a_1, a_2]), [b_1, b_2])", "a_1 * b_2 - a_2 * b_1")] + [InlineData("resultant(x^2 - 1, x - a, x)", "a ^ 2 - 1")] + [InlineData("resultant(x^2 + y^2 - 1, x + y - 1, y)", "2 * x ^ 2 - 2 * x")] + public void TheValueIsComputedFromTheEntries(string written, string expected) + => Assert.Equal(Integer.Zero, (written.ToEntity() - expected.ToEntity()).Simplify()); + + [Theory] + [InlineData("transpose([1, 2])", "[1, 2]T")] + [InlineData("transpose([[1, 2], [3, 4]])", "[[1, 3], [2, 4]]")] + [InlineData("transpose([1, 2]T)", "[1, 2]")] + [InlineData("cross([1, 0, 0], [0, 1, 0])", "[0, 0, 1]")] + [InlineData("cross([a, b])", "[-b, a]")] + public void AMatrixComesBackAsAMatrix(string written, string expected) + => Assert.Equal(expected.ToEntity().Simplify(), written.ToEntity().Simplify()); + + /// + /// The vector product is perpendicular to both of its factors. + /// + [Fact] + public void TheVectorProductIsPerpendicularToBothFactors() + { + Assert.Equal(Integer.Zero, "dot(cross([a, b, c], [d, e_1, f]), [a, b, c])".ToEntity().Simplify()); + Assert.Equal(Integer.Zero, "dot(cross([a, b, c], [d, e_1, f]), [d, e_1, f])".ToEntity().Simplify()); + } + + /// + /// There is no node for any of these, so a symbol, a matrix of the wrong shape, or vectors + /// of different lengths have nothing to be, and are refused at parsing rather than read as + /// something else. + /// + [Theory] + [InlineData("det(A)")] + [InlineData("det([[1, 2, 3], [4, 5, 6]])")] + [InlineData("transpose(x)")] + [InlineData("dot([1, 2], [1, 2, 3])")] + [InlineData("dot([[1, 2], [3, 4]], [1, 2])")] + [InlineData("cross([1, 2], [3, 4])")] + [InlineData("cross([1, 2, 3])")] + [InlineData("resultant(x^2 - 1, x - 1, 2)")] + [InlineData("resultant(sin(x), x - 1, x)")] + public void WhatIsNotAMatrixOfTheRightShapeIsRefused(string written) + => Assert.Throws(() => written.ToEntity()); + + [Theory] + [InlineData("det([[1, 2], [3, 4]], [[1, 2], [3, 4]])")] + [InlineData("dot([1, 2])")] + [InlineData("cross([1, 2, 3], [1, 2, 3], [1, 2, 3])")] + [InlineData("resultant(x, x)")] + public void TheWrongNumberOfArgumentsIsRefused(string written) + => Assert.Throws(() => written.ToEntity()); + } +} diff --git a/Sources/Tests/UnitTests/Convenience/MissingFunctionNamesRefusedTest.cs b/Sources/Tests/UnitTests/Convenience/MissingFunctionNamesRefusedTest.cs index 638300382..49c0972ff 100644 --- a/Sources/Tests/UnitTests/Convenience/MissingFunctionNamesRefusedTest.cs +++ b/Sources/Tests/UnitTests/Convenience/MissingFunctionNamesRefusedTest.cs @@ -29,14 +29,14 @@ public sealed class MissingFunctionNamesRefusedTest // floor, ceil, ceiling, round, min, max, gcd and lcm were all on this list until they // were implemented: https://github.com/asc-community/AngouriMath/issues/809, and erf // until https://github.com/asc-community/AngouriMath/issues/1501. - // conj, arg and det since https://github.com/asc-community/AngouriMath/issues/2136: - // arg(z) was arg * z. + // conj and arg since https://github.com/asc-community/AngouriMath/issues/2136: arg(z) + // was arg * z. det was refused there too, until + // https://github.com/asc-community/AngouriMath/issues/2147. [Theory] [InlineData("trunc(x)")] [InlineData("conjugate(x)")] [InlineData("conj(z)")] [InlineData("arg(z)")] - [InlineData("det([[1, 2], [3, 4]])")] public void ANameTheLibraryDoesNotHaveIsRefused(string written) => Assert.Throws(() => written.ToEntity()); @@ -59,7 +59,6 @@ public void TheSameNameWithoutTheBracketIsStillAVariable(string written, string [InlineData("trunc(x)", "trunc")] [InlineData("conjugate(x)", "conjugate")] [InlineData("arg(z)", "arg")] - [InlineData("det([[1, 2], [3, 4]])", "det")] public void TheRefusalNamesTheFunction(string written, string name) => Assert.Contains(name, Assert.Throws(() => written.ToEntity()).Message); From 15a4a1a8b05ae8f75727cb660262574821b38079 Mon Sep 17 00:00:00 2001 From: Rafael Vuijk Date: Wed, 28 Oct 2026 12:29:29 +0000 Subject: [PATCH 2/3] A determinant of entries that are not polynomials is expanded by the library itself Where the fraction-free elimination cannot read the entries as polynomials, Matrix.Determinant took GenericTensor's Laplace expansion, which compiles an expression tree: ILC reports IL3050 on it, and det(M) in the parser made it reachable from every native build, so the C++ wrapper's and the Trimming & NativeAOT jobs failed to publish. The expansion along the first row is now written over the entries. It is the same expansion, needs no lock on GenericTensor's shared scratch matrix, and agrees with GenericTensor's on 60 generated matrices of roots, sines, logarithms and symbols, compared by value. The native smoke test parses a det that takes it, and a dot of a cross. Part of #2147. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura --- BREAKING-CHANGES.md | 13 +++++++ .../Core/Entity/Omni/Entity.Matrix.cs | 34 ++++++++++++++++--- .../AngouriMath/Functions/GenTensorGuard.cs | 6 +++- Sources/Tests/AotSmokeTest/Program.cs | 8 +++++ .../FractionFreeDeterminantTest.cs | 33 ++++++++++++++++++ .../UnitTests/Core/MatrixConcurrencyTest.cs | 7 ++-- 6 files changed, 92 insertions(+), 9 deletions(-) diff --git a/BREAKING-CHANGES.md b/BREAKING-CHANGES.md index 59d983bf5..48224be37 100644 --- a/BREAKING-CHANGES.md +++ b/BREAKING-CHANGES.md @@ -388,6 +388,19 @@ in LaTeX as `X_{a_{\beta}}`. `_` still neither begins nor ends a name, and two d | `MathS.Var("X_a_beta").Latexize()` | an `UnhandledParseException` | `X_{a_{\beta}}` | | `"x__1".ToEntity()` | an `UnhandledParseException` | an `UnhandledParseException` | +### A determinant of entries that are not polynomials is expanded by the library itself + +**Silent: the same value, printed differently.** Where the fraction-free elimination cannot read the entries as +polynomials, `Matrix.Determinant` expanded along the first row with GenericTensor's Laplace expansion. That expansion +compiles an expression tree, which a native build cannot publish, and `det(M)` in an expression made it reachable from +every one. It is now written over the entries, with the same expansion along the first row and the cofactors' +alternating signs as subtractions ([#2147](https://github.com/asc-community/AngouriMath/issues/2147)). + +| Input | Was (2.6.0) | Now | +|---|---|---| +| `"[[sin(x), cos(x)], [-cos(x), sin(x)]]".ToEntity()` as a `Matrix`, `.Determinant` | `sin(x) ^ 2 + -cos(x) * -cos(x)` | `sin(x) ^ 2 - cos(x) * -cos(x)` | +| `.Determinant.Simplify()` of `[[sqrt(a), b, 1], [c, sin(d), 2], [3, e_1, ln(f)]]` | `e_1 * ((-2) * sqrt(a) + c) + sin(d) * (sqrt(a) * ln(f) - 3) + 6 * b - b * c * ln(f)` | `sqrt(a) * (sin(d) * ln(f) - 2 * e_1) - b * (c * ln(f) - 6) + c * e_1 - 3 * sin(d)` | + ### A numerical definite integral is Gauss–Legendre, with the digits it knows **Silent: wrong answers, and values where there was NaN.** `Entity.DefiniteIntegral(x, a, b, steps)` was the mean of diff --git a/Sources/AngouriMath/Core/Entity/Omni/Entity.Matrix.cs b/Sources/AngouriMath/Core/Entity/Omni/Entity.Matrix.cs index 48a52c69c..df6a70e63 100644 --- a/Sources/AngouriMath/Core/Entity/Omni/Entity.Matrix.cs +++ b/Sources/AngouriMath/Core/Entity/Omni/Entity.Matrix.cs @@ -301,16 +301,40 @@ public Entity AsScalar() if (Functions.PolynomialDeterminant.Of(@this.RowCount, (r, c) => @this[r, c]) is { } byElimination) return byElimination.InnerSimplified; - // GenericTensor's Laplace determinant writes into a process-wide scratch - // matrix, so two threads here silently corrupt each other's minors. See - // Functions.GenTensorGuard. - return Functions.GenTensorGuard - .DeterminantLaplace(@this.InnerMatrix).InnerSimplified; + return Laplace(@this, 0, Enumerable.Range(0, @this.ColumnCount).ToArray()).InnerSimplified; }, this ); private LazyPropertyA determinant; + /// + /// The determinant of the rows from down and the given + /// , expanded along its first row. + /// + /// + /// Written over the entries rather than taken from GenericTensor, whose expansion + /// compiles an expression tree, which a native build cannot publish -- det(M) in + /// the parser makes this reachable from every one -- and writes its minors into a + /// scratch matrix shared by every thread. + /// https://github.com/asc-community/AngouriMath/issues/2147 + /// + private static Entity Laplace(Matrix matrix, int row, int[] columns) + { + if (columns.Length == 1) + return matrix[row, columns[0]]; + Entity? sum = null; + for (var k = 0; k < columns.Length; k++) + { + var rest = new int[columns.Length - 1]; + for (int from = 0, to = 0; from < columns.Length; from++) + if (from != k) + rest[to++] = columns[from]; + var term = matrix[row, columns[k]] * Laplace(matrix, row + 1, rest); + sum = sum is null ? term : k % 2 == 0 ? sum + term : sum - term; + } + return sum!; + } + /// /// The characteristic polynomial of this square matrix, det(x I - A) in the /// variable , written as a polynomial in it with each coefficient diff --git a/Sources/AngouriMath/Functions/GenTensorGuard.cs b/Sources/AngouriMath/Functions/GenTensorGuard.cs index f7714f7c4..810a04587 100644 --- a/Sources/AngouriMath/Functions/GenTensorGuard.cs +++ b/Sources/AngouriMath/Functions/GenTensorGuard.cs @@ -56,7 +56,11 @@ internal static class GenTensorGuard /// [ConstantField] private static readonly object ScratchPool = new object(); - /// Laplace expansion, serialised on . + /// + /// Laplace expansion, serialised on . + /// has its own expansion now, which a native build can publish; this is GenericTensor's, + /// kept as the independent one the tests compare it with. + /// internal static Entity DeterminantLaplace(GenTensor matrix) { lock (ScratchPool) diff --git a/Sources/Tests/AotSmokeTest/Program.cs b/Sources/Tests/AotSmokeTest/Program.cs index d57b80b36..b6bbdfb9d 100644 --- a/Sources/Tests/AotSmokeTest/Program.cs +++ b/Sources/Tests/AotSmokeTest/Program.cs @@ -99,6 +99,14 @@ private static void Parsing() var piecewise = MathS.FromString("piecewise(1 provided x > 0, 0 provided x <= 0)"); CheckClose("piecewise at x = 2", At(piecewise, "x", 2), 1); + + // det is computed while parsing, so it is reached from every native build. A sine is not + // a polynomial entry, so this takes the Laplace expansion rather than the elimination. + // https://github.com/asc-community/AngouriMath/issues/2147 + var determinant = MathS.FromString("det([[1, 2], [3, sin(x)]])"); + CheckClose("det at x = 0", At(determinant, "x", 0), -6); + var dot = MathS.FromString("dot(cross([1, 0, 0], [0, 1, 0]), [0, 0, x])"); + CheckClose("dot of a cross at x = 5", At(dot, "x", 5), 5); } private static void Simplification() diff --git a/Sources/Tests/UnitTests/Algebra/Polynomials/FractionFreeDeterminantTest.cs b/Sources/Tests/UnitTests/Algebra/Polynomials/FractionFreeDeterminantTest.cs index 414703e0e..225417ca7 100644 --- a/Sources/Tests/UnitTests/Algebra/Polynomials/FractionFreeDeterminantTest.cs +++ b/Sources/Tests/UnitTests/Algebra/Polynomials/FractionFreeDeterminantTest.cs @@ -170,6 +170,39 @@ public void EliminationAgreesWithLaplaceWhereverBothApply() $"only {compared} of 300 generated matrices were read by the elimination"); } + /// + /// Where the elimination declines, Determinant expands along the first row itself, + /// since GenericTensor's expansion cannot be published to a native build, and it has to + /// agree with GenericTensor's on what neither reads as a polynomial. + /// https://github.com/asc-community/AngouriMath/issues/2147 + /// + [Fact] + public void TheExpansionAgreesWithGenericTensorsWhereTheEliminationDeclines() + { + var random = new System.Random(2147); + var atoms = new Entity[] { MathS.Sqrt("a"), MathS.Sin("b"), MathS.Var("c"), MathS.Ln("d") }; + var disagreements = new List(); + for (var trial = 0; trial < 60; trial++) + { + var size = 2 + trial % 3; + var cells = new Entity[size, size]; + for (var row = 0; row < size; row++) + for (var column = 0; column < size; column++) + cells[row, column] = random.Next(0, 2) == 0 + ? atoms[random.Next(0, atoms.Length)] * random.Next(1, 4) + : random.Next(-4, 5); + cells[0, 0] = atoms[0]; + var matrix = MathS.Matrix(cells); + var byLaplace = GenTensorGuard.DeterminantLaplace(matrix.InnerMatrix).InnerSimplified; + // Compared by value at a point: a 4x4 expansion is past what Simplify proves zero. + var difference = (matrix.Determinant! - byLaplace) + .Substitute("a", 2).Substitute("b", 3).Substitute("c", 5).Substitute("d", 7).EvalNumerical(); + if (Entity.Number.Abs(difference).EDecimal.CompareTo(PeterO.Numbers.EDecimal.FromString("1e-40")) > 0) + disagreements.Add($"{matrix.Stringize()}: {matrix.Determinant!.Stringize()} vs {byLaplace.Stringize()}"); + } + Assert.True(disagreements.Count == 0, string.Join("\n ", disagreements)); + } + /// /// The size the issue is about. Laplace is O(n!), so a 10×10 took about fourteen /// seconds and an 11×11 did not return; this is the same work in milliseconds. diff --git a/Sources/Tests/UnitTests/Core/MatrixConcurrencyTest.cs b/Sources/Tests/UnitTests/Core/MatrixConcurrencyTest.cs index 923cb7bc5..f57b1d538 100644 --- a/Sources/Tests/UnitTests/Core/MatrixConcurrencyTest.cs +++ b/Sources/Tests/UnitTests/Core/MatrixConcurrencyTest.cs @@ -34,9 +34,10 @@ public sealed class MatrixConcurrencyTest /// /// The entries are deliberately not polynomial. Determinant tries - /// PolynomialDeterminant.Of first and only falls back to GenericTensor's Laplace - /// where that declines, so a matrix of polynomials never reaches the shared scratch buffer - /// -- which is exactly why the first version of this test found nothing. + /// PolynomialDeterminant.Of first and only falls back to a Laplace expansion + /// where that declines, so a matrix of polynomials never reaches it -- which is exactly + /// why the first version of this test found nothing, when the expansion was + /// GenericTensor's and wrote into a shared scratch buffer. /// private static Matrix Build(int seed) { From 9d0251c35529cb3fddd9fee04d46adb5514be9d1 Mon Sep 17 00:00:00 2001 From: Rafael Vuijk Date: Wed, 28 Oct 2026 12:33:37 +0000 Subject: [PATCH 3/3] The MCP server's syntax document names det, transpose, dot, cross and resultant McpUnitTests checks that angourimath://syntax names every function the grammar accepts. det(x), transpose(x) and cross(x) are now refused with InvalidArgumentParseException, since x is not a matrix, which that test reads as a function of something else, as it reads a count refusal. The refusal's example is the function's own: cross([1, 2, 3], [4, 5, 6]) rather than a matrix. Part of #2147. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura --- Sources/AngouriMath/Core/Antlr/ParsingHelpers.cs | 10 +++++----- Sources/MCP/AngouriMath.Mcp/Resources.cs | 4 ++++ Sources/Tests/McpUnitTests/ParsingTest.cs | 4 ++++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Sources/AngouriMath/Core/Antlr/ParsingHelpers.cs b/Sources/AngouriMath/Core/Antlr/ParsingHelpers.cs index fc3f05154..b6044da5e 100644 --- a/Sources/AngouriMath/Core/Antlr/ParsingHelpers.cs +++ b/Sources/AngouriMath/Core/Antlr/ParsingHelpers.cs @@ -36,16 +36,16 @@ internal static Matrix TryBuildingMatrix(List elements) // has to be a matrix written out, or an expression that is one once its operations are // carried out, as 2 [[1, 2], [3, 4]] is. // https://github.com/asc-community/AngouriMath/issues/2147 - private static Matrix MatrixArgument(string function, Entity argument) + private static Matrix MatrixArgument(string function, Entity argument, string example) => argument as Matrix ?? argument.InnerSimplified as Matrix ?? throw new InvalidArgumentParseException( $"{function} is computed from the entries of a matrix or a vector written out, " + - $"as in {function}([[1, 2], [3, 4]]), and {argument} is not one"); + $"as in {example}, and {argument} is not one"); /// The entries of a vector, written as a column or as a row. private static Entity[] Components(string function, Entity argument) { - var vector = MatrixArgument(function, argument); + var vector = MatrixArgument(function, argument, $"{function}([1, 2, 3], [4, 5, 6])"); if (vector.ColumnCount == 1) return Enumerable.Range(0, vector.RowCount).Select(i => vector[i, 0]).ToArray(); if (vector.RowCount == 1) @@ -57,14 +57,14 @@ private static Entity[] Components(string function, Entity argument) /// det(M): the determinant of a square matrix. internal static Entity Determinant(Entity argument) { - var matrix = MatrixArgument("det", argument); + var matrix = MatrixArgument("det", argument, "det([[1, 2], [3, 4]])"); return matrix.Determinant ?? throw new InvalidArgumentParseException( $"det is taken of a square matrix, and {matrix} is {matrix.RowCount} by {matrix.ColumnCount}"); } /// transpose(M), which ]T writes only after a bracket. internal static Entity Transposed(Entity argument) - => MatrixArgument("transpose", argument).T; + => MatrixArgument("transpose", argument, "transpose([[1, 2], [3, 4]])").T; /// /// dot(a, b): the sum of the products of the components, without conjugating either diff --git a/Sources/MCP/AngouriMath.Mcp/Resources.cs b/Sources/MCP/AngouriMath.Mcp/Resources.cs index 200deeb82..23b4472e5 100644 --- a/Sources/MCP/AngouriMath.Mcp/Resources.cs +++ b/Sources/MCP/AngouriMath.Mcp/Resources.cs @@ -101,6 +101,10 @@ upper incomplete gamma function iverson` - `derivative integral limit limitleft limitright sum product argmax argmin piecewise apply lambda` + - matrices and vectors: `det transpose dot cross resultant`, computed from a matrix or + a vector written out, `[1, 2]` being a column and `[[1, 2], [3, 4]]` a matrix: + `det(A)` of a symbol is refused. `cross(a, b)` is the vector product in space and + `cross([x, y])` is `[-y, x]`; `resultant(p, q, x)` eliminates `x` ## Spellings worth knowing (verified against the grammar, not guessed) diff --git a/Sources/Tests/McpUnitTests/ParsingTest.cs b/Sources/Tests/McpUnitTests/ParsingTest.cs index 2befc0bff..436699843 100644 --- a/Sources/Tests/McpUnitTests/ParsingTest.cs +++ b/Sources/Tests/McpUnitTests/ParsingTest.cs @@ -58,6 +58,10 @@ public void TheSyntaxDocumentNamesEveryFunctionTheGrammarAccepts(string name) { // A function of more arguments than one. } + catch (InvalidArgumentParseException) + { + // A function of a matrix or a vector written out, which x is not: det(x). + } var syntax = Resources.Read("angourimath://syntax")!; Assert.True(Regex.IsMatch(syntax, $@"(?