diff --git a/BREAKING-CHANGES.md b/BREAKING-CHANGES.md
index 4fd066f9b..edc36aca5 100644
--- a/BREAKING-CHANGES.md
+++ b/BREAKING-CHANGES.md
@@ -2608,11 +2608,40 @@ the right shape, written out or once its operations are carried out, throws `Inv
|---|---|---|
| `"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` |
+| `"transpose(x)".ToEntity()` | `transpose * x` | the node `transpose(x)`, see the entry below |
| `"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` |
+### `det`, `transpose`, `trace` and an entry `A[k, l]` of a name for a matrix are nodes
+
+**Not silent: these were read as products, or did not parse, and are now nodes, carried out once the name is a
+matrix.** `det(A)`, `transpose(A)` and `trace(A)` of a name, or of an expression that is not yet a matrix, are the
+nodes `Determinantf`, `Transposef` and `Tracef`; `A[k, l]` is `MatrixEntryf`, the entry in row `k` and column `l`
+counted from 1, and did not parse at all. Each is computed when the name is substituted by a matrix, by `Simplify`,
+`Evaled` and a compiled delegate taking `double[,]` or `Complex[,]`. Of a matrix written out each is computed as it is
+parsed, as `det` and `transpose` already were, and `trace` is new. A matrix that is not square has no determinant
+and no trace, and an index out of range names no entry: the node is left, never a number. A number, a statement or
+a set is refused with `InvalidArgumentParseException`. A product with a transpose in it is no longer reordered by
+`Simplify`, since matrices do not commute: `transpose(A) * A - A * transpose(A)` is not `0`. A name beside a written
+matrix, as in `det(x * [[1, 2], [3, 4]])`, may stand for a matrix too, and such an argument is not carried out until
+it is one, where it was multiplied into the entries as a number
+([#2147](https://github.com/asc-community/AngouriMath/issues/2147)).
+
+| Input | Was (2.6.0) | Now |
+|---|---|---|
+| `"det(A)".ToEntity()` | `det * A` | `det(A)`, a `Determinantf` |
+| `"transpose(A)".ToEntity()` | `transpose * A` | `transpose(A)`, a `Transposef` |
+| `"transpose(A) * B".ToEntity()` | `transpose * A * B` | `transpose(A) * B` |
+| `"trace(A)".ToEntity()` | `trace * A` | `trace(A)`, a `Tracef` |
+| `"trace([[1, 2], [3, 4]])".ToEntity()` | `trace * [[1, 2], [3, 4]]` | `1 + 4` |
+| `"trace(A * B)".Simplify()` | `A * B * trace` | `trace(A * B)` |
+| `"A[1, 2]".ToEntity()` | throws `UnhandledParseException` | `A[1, 2]`, a `MatrixEntryf` |
+| `"[[1, 2], [3, 4]][2, 1]".ToEntity()` | throws `UnhandledParseException` | `3` |
+| `"det(5)".ToEntity()` | `det * 5` | throws `InvalidArgumentParseException` |
+| `"det(x * [[1, 2], [3, 4]])".ToEntity()` | `det * x * [[1, 2], [3, 4]]` | `det(x * [[1, 2], [3, 4]])`: `x` may stand for a matrix |
+| `"det(A)".Substitute("A", "[[1, 2], [3, 4]]").Evaled` | `[[det, det * 2], [det * 3, det * 4]]` | `-2` |
+
### The names of functions to come are refused by name
**Not silent: these names followed by a bracket now throw `UnrecognizedFunctionParseException` where they were read as
diff --git a/Sources/.editorconfig b/Sources/.editorconfig
index a4c0cf9ab..2cd71c90b 100644
--- a/Sources/.editorconfig
+++ b/Sources/.editorconfig
@@ -1075,3 +1075,12 @@ file_header_template=\nCopyright (c) 2019-2026 Angouri.\nAngouriMath is licensed
[Tests/UnitTests/Common/BranchCutCompilationTest.cs]
file_header_template=\nCopyright (c) 2019-2026 Angouri.\nAngouriMath is licensed under MIT.\nDetails: https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md.\nWebsite: https://am.angouri.org.\n
+
+[AngouriMath/Core/Entity/Omni/Entity.MatrixOperations.Classes.cs]
+file_header_template=\nCopyright (c) 2019-2026 Angouri.\nAngouriMath is licensed under MIT.\nDetails: https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md.\nWebsite: https://am.angouri.org.\n
+
+[Tests/UnitTests/Common/MatrixOperationNodesTest.cs]
+file_header_template=\nCopyright (c) 2019-2026 Angouri.\nAngouriMath is licensed under MIT.\nDetails: https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md.\nWebsite: https://am.angouri.org.\n
+
+[AngouriMath/Functions/Simplification/ProductsOfMatrices.cs]
+file_header_template=\nCopyright (c) 2019-2026 Angouri.\nAngouriMath is licensed under MIT.\nDetails: https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md.\nWebsite: https://am.angouri.org.\n
diff --git a/Sources/AngouriMath/Convenience/MathS.cs b/Sources/AngouriMath/Convenience/MathS.cs
index 4dd6cf363..359801cbc 100644
--- a/Sources/AngouriMath/Convenience/MathS.cs
+++ b/Sources/AngouriMath/Convenience/MathS.cs
@@ -6004,6 +6004,52 @@ public static Matrix PointwiseMultiplication(Matrix m1, Matrix m2)
public static Matrix Matrix(int rows, int columns, params Entity[] values) =>
new(GenTensor.CreateMatrix(rows, columns, (x, y) => values[x * columns + y]));
+ /// The determinant det(A) of a square matrix, as a node.
+ /// The matrix, written out or a name that stands for one.
+ /// The node, computed once its argument is a matrix
+ ///
+ /// A matrix that is not square has no determinant, and the node is left as it is.
+ /// https://github.com/asc-community/AngouriMath/issues/2147
+ ///
+ ///
+ ///
+ /// var det = MathS.Matrices.Determinant("A");
+ /// Console.WriteLine(det);
+ /// Console.WriteLine(det.Substitute("A", "[[1, 2], [3, 4]]").Evaled);
+ ///
+ /// Prints
+ ///
+ /// det(A)
+ /// -2
+ ///
+ ///
+ public static Entity Determinant(Entity matrix) => new Determinantf(matrix);
+
+ /// The transpose transpose(A), as a node. A vector is a column, and its transpose a row.
+ /// The matrix, written out or a name that stands for one.
+ /// The node, computed once its argument is a matrix
+ /// https://github.com/asc-community/AngouriMath/issues/2147
+ public static Entity Transpose(Entity matrix) => new Transposef(matrix);
+
+ /// The trace trace(A) of a square matrix, the sum of its diagonal entries, as a node.
+ /// The matrix, written out or a name that stands for one.
+ /// The node, computed once its argument is a matrix
+ ///
+ /// A matrix that is not square has no trace, and the node is left as it is.
+ /// https://github.com/asc-community/AngouriMath/issues/2147
+ ///
+ public static Entity Trace(Entity matrix) => new Tracef(matrix);
+
+ /// The entry A[i, j] of a matrix, its rows and columns counted from 1, as a node.
+ /// The matrix, written out or a name that stands for one.
+ /// The row, from 1.
+ /// The column, from 1.
+ /// The node, computed once its argument is a matrix and its indices are whole numbers in range
+ ///
+ /// An index out of range names no entry, and the node is left as it is.
+ /// https://github.com/asc-community/AngouriMath/issues/2147
+ ///
+ public static Entity Entry(Entity matrix, Entity row, Entity column) => new MatrixEntryf(matrix, row, column);
}
///
diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMath.g b/Sources/AngouriMath/Core/Antlr/AngouriMath.g
index c74556c6d..a6bb0697a 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMath.g
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMath.g
@@ -80,14 +80,22 @@ options
// So we put UPPER_CASE lexer rules after lower_case parser rules.
// atom is defined later
+/* An entry of a matrix, `A[i, j]`, its row and its column counted from 1 as a_ij is. The brackets
+ follow what they index directly, and a bracket after an atom was not a parse before, so
+ nothing that parsed reads differently. https://github.com/asc-community/AngouriMath/issues/2147 */
+indexed_atom returns[Entity value]
+ : p = atom { $value = $p.value; }
+ ('[' args = function_arguments ']' { $value = ParsingHelpers.Entry($value, $args.list); })*
+ ;
+
factorial_expression returns[Entity value]
- : p = atom '!' { $value = MathS.Factorial($p.value); }
+ : p = indexed_atom '!' { $value = MathS.Factorial($p.value); }
/* The double factorial, n (n - 2) (n - 4) ..., which is not (n!)!: that keeps its parentheses.
Three marks are the triple factorial in the literature, which the library does not have, so
they are refused rather than read as (n!!)!. https://github.com/asc-community/AngouriMath/issues/2182 */
- | p = atom '!!' { $value = MathS.DoubleFactorial($p.value); }
- | p = atom '!!!' { throw new UnrecognizedFunctionParseException("n!!! is the triple factorial, which AngouriMath does not have; write (n!!)! for the factorial of a double factorial"); }
- | p = atom { $value = $p.value; }
+ | p = indexed_atom '!!' { $value = MathS.DoubleFactorial($p.value); }
+ | p = indexed_atom '!!!' { throw new UnrecognizedFunctionParseException("n!!! is the triple factorial, which AngouriMath does not have; write (n!!)! for the factorial of a double factorial"); }
+ | p = indexed_atom { $value = $p.value; }
;
power_list returns[List value]
@@ -653,12 +661,14 @@ 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 */
+ /* The determinant, the transpose, the trace, the scalar and the vector product, and the
+ resultant, each computed from what it is applied to where that is a matrix or a vector
+ written out, or one once its operations are carried out. det, transpose and trace of
+ anything else that may stand for a matrix, as a name does, are nodes, computed once it is
+ one. 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]); }
+ | 'trace(' args = function_arguments ')' { Assert("trace", 1, $args.list.Count); $value = ParsingHelpers.Trace($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); }
| 'laplacian(' args = function_arguments ')' { Assert("laplacian", 2, $args.list.Count); $value = ParsingHelpers.Laplacian($args.list[0], $args.list[1]); }
diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMath.interp b/Sources/AngouriMath/Core/Antlr/AngouriMath.interp
index 3b5c2757a..90e026edc 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMath.interp
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMath.interp
@@ -1,5 +1,7 @@
token literal names:
null
+'['
+']'
'!'
'!!'
'!!!'
@@ -56,9 +58,7 @@ null
'(|'
'|)'
'#'
-'['
']T'
-']'
'{'
'}'
'log('
@@ -197,6 +197,7 @@ null
'Chi('
'det('
'transpose('
+'trace('
'dot('
'cross('
'laplacian('
@@ -469,6 +470,7 @@ null
null
null
null
+null
NEWLINE
NUMBER
SPECIALSET
@@ -479,6 +481,7 @@ COMMENT
WS
rule names:
+indexed_atom
factorial_expression
power_list
power_expression
@@ -508,4 +511,4 @@ statement
atn:
-[4, 1, 237, 1369, 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, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 68, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 74, 8, 1, 11, 1, 12, 1, 75, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 82, 8, 1, 11, 1, 12, 1, 83, 3, 1, 86, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 93, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 103, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 113, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 118, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 128, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 138, 8, 4, 10, 4, 12, 4, 141, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 153, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 159, 8, 5, 10, 5, 12, 5, 162, 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, 176, 8, 6, 10, 6, 12, 6, 179, 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, 199, 8, 7, 10, 7, 12, 7, 202, 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, 234, 8, 8, 10, 8, 12, 8, 237, 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, 255, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 260, 8, 9, 10, 9, 12, 9, 263, 9, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 271, 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, 290, 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, 306, 8, 11, 10, 11, 12, 11, 309, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 321, 8, 12, 10, 12, 12, 12, 324, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 336, 8, 13, 10, 13, 12, 13, 339, 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, 355, 8, 14, 10, 14, 12, 14, 358, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 366, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 374, 8, 16, 1, 16, 1, 16, 1, 16, 3, 16, 379, 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, 393, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 5, 19, 401, 8, 19, 10, 19, 12, 19, 404, 9, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 414, 8, 20, 10, 20, 12, 20, 417, 9, 20, 3, 20, 419, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 426, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 434, 8, 21, 5, 21, 436, 8, 21, 10, 21, 12, 21, 439, 9, 21, 3, 21, 441, 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, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 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, 1363, 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, 8, 9, 1, 0, 35, 36, 1, 0, 39, 40, 1, 0, 44, 45, 1, 0, 46, 47, 1, 0, 48, 49, 1591, 0, 67, 1, 0, 0, 0, 2, 85, 1, 0, 0, 0, 4, 87, 1, 0, 0, 0, 6, 117, 1, 0, 0, 0, 8, 119, 1, 0, 0, 0, 10, 144, 1, 0, 0, 0, 12, 165, 1, 0, 0, 0, 14, 180, 1, 0, 0, 0, 16, 203, 1, 0, 0, 0, 18, 238, 1, 0, 0, 0, 20, 289, 1, 0, 0, 0, 22, 291, 1, 0, 0, 0, 24, 310, 1, 0, 0, 0, 26, 325, 1, 0, 0, 0, 28, 340, 1, 0, 0, 0, 30, 359, 1, 0, 0, 0, 32, 378, 1, 0, 0, 0, 34, 380, 1, 0, 0, 0, 36, 392, 1, 0, 0, 0, 38, 394, 1, 0, 0, 0, 40, 418, 1, 0, 0, 0, 42, 440, 1, 0, 0, 0, 44, 442, 1, 0, 0, 0, 46, 448, 1, 0, 0, 0, 48, 1362, 1, 0, 0, 0, 50, 1364, 1, 0, 0, 0, 52, 53, 3, 48, 24, 0, 53, 54, 5, 1, 0, 0, 54, 55, 6, 0, -1, 0, 55, 68, 1, 0, 0, 0, 56, 57, 3, 48, 24, 0, 57, 58, 5, 2, 0, 0, 58, 59, 6, 0, -1, 0, 59, 68, 1, 0, 0, 0, 60, 61, 3, 48, 24, 0, 61, 62, 5, 3, 0, 0, 62, 63, 6, 0, -1, 0, 63, 68, 1, 0, 0, 0, 64, 65, 3, 48, 24, 0, 65, 66, 6, 0, -1, 0, 66, 68, 1, 0, 0, 0, 67, 52, 1, 0, 0, 0, 67, 56, 1, 0, 0, 0, 67, 60, 1, 0, 0, 0, 67, 64, 1, 0, 0, 0, 68, 1, 1, 0, 0, 0, 69, 70, 5, 4, 0, 0, 70, 71, 3, 0, 0, 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, 86, 1, 0, 0, 0, 77, 78, 5, 4, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 1, -1, 0, 80, 82, 1, 0, 0, 0, 81, 77, 1, 0, 0, 0, 82, 83, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 73, 1, 0, 0, 0, 85, 81, 1, 0, 0, 0, 86, 3, 1, 0, 0, 0, 87, 88, 3, 0, 0, 0, 88, 92, 6, 2, -1, 0, 89, 90, 3, 2, 1, 0, 90, 91, 6, 2, -1, 0, 91, 93, 1, 0, 0, 0, 92, 89, 1, 0, 0, 0, 92, 93, 1, 0, 0, 0, 93, 5, 1, 0, 0, 0, 94, 95, 5, 5, 0, 0, 95, 96, 3, 4, 2, 0, 96, 97, 6, 3, -1, 0, 97, 103, 1, 0, 0, 0, 98, 99, 5, 6, 0, 0, 99, 100, 3, 4, 2, 0, 100, 101, 6, 3, -1, 0, 101, 103, 1, 0, 0, 0, 102, 94, 1, 0, 0, 0, 102, 98, 1, 0, 0, 0, 103, 118, 1, 0, 0, 0, 104, 105, 5, 5, 0, 0, 105, 106, 3, 6, 3, 0, 106, 107, 6, 3, -1, 0, 107, 113, 1, 0, 0, 0, 108, 109, 5, 6, 0, 0, 109, 110, 3, 6, 3, 0, 110, 111, 6, 3, -1, 0, 111, 113, 1, 0, 0, 0, 112, 104, 1, 0, 0, 0, 112, 108, 1, 0, 0, 0, 113, 118, 1, 0, 0, 0, 114, 115, 3, 4, 2, 0, 115, 116, 6, 3, -1, 0, 116, 118, 1, 0, 0, 0, 117, 102, 1, 0, 0, 0, 117, 112, 1, 0, 0, 0, 117, 114, 1, 0, 0, 0, 118, 7, 1, 0, 0, 0, 119, 120, 3, 6, 3, 0, 120, 139, 6, 4, -1, 0, 121, 127, 5, 7, 0, 0, 122, 123, 7, 0, 0, 0, 123, 128, 6, 4, -1, 0, 124, 125, 3, 6, 3, 0, 125, 126, 6, 4, -1, 0, 126, 128, 1, 0, 0, 0, 127, 122, 1, 0, 0, 0, 127, 124, 1, 0, 0, 0, 128, 138, 1, 0, 0, 0, 129, 130, 5, 10, 0, 0, 130, 131, 3, 6, 3, 0, 131, 132, 6, 4, -1, 0, 132, 138, 1, 0, 0, 0, 133, 134, 5, 11, 0, 0, 134, 135, 3, 6, 3, 0, 135, 136, 6, 4, -1, 0, 136, 138, 1, 0, 0, 0, 137, 121, 1, 0, 0, 0, 137, 129, 1, 0, 0, 0, 137, 133, 1, 0, 0, 0, 138, 141, 1, 0, 0, 0, 139, 137, 1, 0, 0, 0, 139, 140, 1, 0, 0, 0, 140, 142, 1, 0, 0, 0, 141, 139, 1, 0, 0, 0, 142, 143, 6, 4, -1, 0, 143, 9, 1, 0, 0, 0, 144, 145, 3, 8, 4, 0, 145, 160, 6, 5, -1, 0, 146, 152, 5, 6, 0, 0, 147, 148, 7, 0, 0, 0, 148, 153, 6, 5, -1, 0, 149, 150, 3, 8, 4, 0, 150, 151, 6, 5, -1, 0, 151, 153, 1, 0, 0, 0, 152, 147, 1, 0, 0, 0, 152, 149, 1, 0, 0, 0, 153, 159, 1, 0, 0, 0, 154, 155, 5, 5, 0, 0, 155, 156, 3, 8, 4, 0, 156, 157, 6, 5, -1, 0, 157, 159, 1, 0, 0, 0, 158, 146, 1, 0, 0, 0, 158, 154, 1, 0, 0, 0, 159, 162, 1, 0, 0, 0, 160, 158, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, 163, 1, 0, 0, 0, 162, 160, 1, 0, 0, 0, 163, 164, 6, 5, -1, 0, 164, 11, 1, 0, 0, 0, 165, 166, 3, 10, 5, 0, 166, 177, 6, 6, -1, 0, 167, 168, 5, 12, 0, 0, 168, 169, 3, 10, 5, 0, 169, 170, 6, 6, -1, 0, 170, 176, 1, 0, 0, 0, 171, 172, 5, 13, 0, 0, 172, 173, 3, 10, 5, 0, 173, 174, 6, 6, -1, 0, 174, 176, 1, 0, 0, 0, 175, 167, 1, 0, 0, 0, 175, 171, 1, 0, 0, 0, 176, 179, 1, 0, 0, 0, 177, 175, 1, 0, 0, 0, 177, 178, 1, 0, 0, 0, 178, 13, 1, 0, 0, 0, 179, 177, 1, 0, 0, 0, 180, 181, 3, 12, 6, 0, 181, 200, 6, 7, -1, 0, 182, 183, 5, 14, 0, 0, 183, 184, 3, 12, 6, 0, 184, 185, 6, 7, -1, 0, 185, 199, 1, 0, 0, 0, 186, 187, 5, 15, 0, 0, 187, 188, 3, 12, 6, 0, 188, 189, 6, 7, -1, 0, 189, 199, 1, 0, 0, 0, 190, 191, 5, 16, 0, 0, 191, 192, 3, 12, 6, 0, 192, 193, 6, 7, -1, 0, 193, 199, 1, 0, 0, 0, 194, 195, 5, 17, 0, 0, 195, 196, 3, 12, 6, 0, 196, 197, 6, 7, -1, 0, 197, 199, 1, 0, 0, 0, 198, 182, 1, 0, 0, 0, 198, 186, 1, 0, 0, 0, 198, 190, 1, 0, 0, 0, 198, 194, 1, 0, 0, 0, 199, 202, 1, 0, 0, 0, 200, 198, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 15, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 203, 204, 3, 14, 7, 0, 204, 235, 6, 8, -1, 0, 205, 206, 5, 18, 0, 0, 206, 207, 3, 14, 7, 0, 207, 208, 6, 8, -1, 0, 208, 234, 1, 0, 0, 0, 209, 210, 5, 19, 0, 0, 210, 211, 3, 14, 7, 0, 211, 212, 6, 8, -1, 0, 212, 234, 1, 0, 0, 0, 213, 214, 5, 20, 0, 0, 214, 215, 3, 14, 7, 0, 215, 216, 6, 8, -1, 0, 216, 234, 1, 0, 0, 0, 217, 218, 5, 21, 0, 0, 218, 219, 3, 14, 7, 0, 219, 220, 6, 8, -1, 0, 220, 234, 1, 0, 0, 0, 221, 222, 5, 22, 0, 0, 222, 223, 3, 14, 7, 0, 223, 224, 6, 8, -1, 0, 224, 234, 1, 0, 0, 0, 225, 226, 5, 23, 0, 0, 226, 227, 3, 14, 7, 0, 227, 228, 6, 8, -1, 0, 228, 234, 1, 0, 0, 0, 229, 230, 5, 24, 0, 0, 230, 231, 3, 14, 7, 0, 231, 232, 6, 8, -1, 0, 232, 234, 1, 0, 0, 0, 233, 205, 1, 0, 0, 0, 233, 209, 1, 0, 0, 0, 233, 213, 1, 0, 0, 0, 233, 217, 1, 0, 0, 0, 233, 221, 1, 0, 0, 0, 233, 225, 1, 0, 0, 0, 233, 229, 1, 0, 0, 0, 234, 237, 1, 0, 0, 0, 235, 233, 1, 0, 0, 0, 235, 236, 1, 0, 0, 0, 236, 17, 1, 0, 0, 0, 237, 235, 1, 0, 0, 0, 238, 239, 3, 16, 8, 0, 239, 261, 6, 9, -1, 0, 240, 241, 5, 25, 0, 0, 241, 255, 6, 9, -1, 0, 242, 243, 5, 26, 0, 0, 243, 255, 6, 9, -1, 0, 244, 245, 5, 27, 0, 0, 245, 255, 6, 9, -1, 0, 246, 247, 5, 28, 0, 0, 247, 255, 6, 9, -1, 0, 248, 249, 5, 29, 0, 0, 249, 255, 6, 9, -1, 0, 250, 251, 5, 30, 0, 0, 251, 255, 6, 9, -1, 0, 252, 253, 5, 31, 0, 0, 253, 255, 6, 9, -1, 0, 254, 240, 1, 0, 0, 0, 254, 242, 1, 0, 0, 0, 254, 244, 1, 0, 0, 0, 254, 246, 1, 0, 0, 0, 254, 248, 1, 0, 0, 0, 254, 250, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 255, 256, 1, 0, 0, 0, 256, 257, 3, 16, 8, 0, 257, 258, 6, 9, -1, 0, 258, 260, 1, 0, 0, 0, 259, 254, 1, 0, 0, 0, 260, 263, 1, 0, 0, 0, 261, 259, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 270, 1, 0, 0, 0, 263, 261, 1, 0, 0, 0, 264, 265, 5, 32, 0, 0, 265, 266, 5, 11, 0, 0, 266, 267, 3, 16, 8, 0, 267, 268, 5, 33, 0, 0, 268, 269, 6, 9, -1, 0, 269, 271, 1, 0, 0, 0, 270, 264, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 273, 6, 9, -1, 0, 273, 19, 1, 0, 0, 0, 274, 275, 5, 34, 0, 0, 275, 276, 3, 18, 9, 0, 276, 277, 6, 10, -1, 0, 277, 290, 1, 0, 0, 0, 278, 279, 5, 34, 0, 0, 279, 280, 3, 20, 10, 0, 280, 281, 6, 10, -1, 0, 281, 290, 1, 0, 0, 0, 282, 283, 5, 34, 0, 0, 283, 284, 3, 34, 17, 0, 284, 285, 6, 10, -1, 0, 285, 290, 1, 0, 0, 0, 286, 287, 3, 18, 9, 0, 287, 288, 6, 10, -1, 0, 288, 290, 1, 0, 0, 0, 289, 274, 1, 0, 0, 0, 289, 278, 1, 0, 0, 0, 289, 282, 1, 0, 0, 0, 289, 286, 1, 0, 0, 0, 290, 21, 1, 0, 0, 0, 291, 292, 3, 20, 10, 0, 292, 307, 6, 11, -1, 0, 293, 294, 5, 35, 0, 0, 294, 295, 3, 20, 10, 0, 295, 296, 6, 11, -1, 0, 296, 306, 1, 0, 0, 0, 297, 298, 5, 36, 0, 0, 298, 299, 3, 20, 10, 0, 299, 300, 6, 11, -1, 0, 300, 306, 1, 0, 0, 0, 301, 302, 7, 1, 0, 0, 302, 303, 3, 34, 17, 0, 303, 304, 6, 11, -1, 0, 304, 306, 1, 0, 0, 0, 305, 293, 1, 0, 0, 0, 305, 297, 1, 0, 0, 0, 305, 301, 1, 0, 0, 0, 306, 309, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 23, 1, 0, 0, 0, 309, 307, 1, 0, 0, 0, 310, 311, 3, 22, 11, 0, 311, 322, 6, 12, -1, 0, 312, 313, 5, 37, 0, 0, 313, 314, 3, 22, 11, 0, 314, 315, 6, 12, -1, 0, 315, 321, 1, 0, 0, 0, 316, 317, 5, 37, 0, 0, 317, 318, 3, 34, 17, 0, 318, 319, 6, 12, -1, 0, 319, 321, 1, 0, 0, 0, 320, 312, 1, 0, 0, 0, 320, 316, 1, 0, 0, 0, 321, 324, 1, 0, 0, 0, 322, 320, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 25, 1, 0, 0, 0, 324, 322, 1, 0, 0, 0, 325, 326, 3, 24, 12, 0, 326, 337, 6, 13, -1, 0, 327, 328, 5, 38, 0, 0, 328, 329, 3, 24, 12, 0, 329, 330, 6, 13, -1, 0, 330, 336, 1, 0, 0, 0, 331, 332, 5, 38, 0, 0, 332, 333, 3, 34, 17, 0, 333, 334, 6, 13, -1, 0, 334, 336, 1, 0, 0, 0, 335, 327, 1, 0, 0, 0, 335, 331, 1, 0, 0, 0, 336, 339, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 27, 1, 0, 0, 0, 339, 337, 1, 0, 0, 0, 340, 341, 3, 26, 13, 0, 341, 356, 6, 14, -1, 0, 342, 343, 5, 39, 0, 0, 343, 344, 3, 26, 13, 0, 344, 345, 6, 14, -1, 0, 345, 355, 1, 0, 0, 0, 346, 347, 5, 40, 0, 0, 347, 348, 3, 26, 13, 0, 348, 349, 6, 14, -1, 0, 349, 355, 1, 0, 0, 0, 350, 351, 7, 2, 0, 0, 351, 352, 3, 34, 17, 0, 352, 353, 6, 14, -1, 0, 353, 355, 1, 0, 0, 0, 354, 342, 1, 0, 0, 0, 354, 346, 1, 0, 0, 0, 354, 350, 1, 0, 0, 0, 355, 358, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 356, 357, 1, 0, 0, 0, 357, 29, 1, 0, 0, 0, 358, 356, 1, 0, 0, 0, 359, 360, 3, 28, 14, 0, 360, 365, 6, 15, -1, 0, 361, 362, 5, 41, 0, 0, 362, 363, 3, 30, 15, 0, 363, 364, 6, 15, -1, 0, 364, 366, 1, 0, 0, 0, 365, 361, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 31, 1, 0, 0, 0, 367, 368, 3, 30, 15, 0, 368, 373, 6, 16, -1, 0, 369, 370, 5, 42, 0, 0, 370, 371, 3, 32, 16, 0, 371, 372, 6, 16, -1, 0, 372, 374, 1, 0, 0, 0, 373, 369, 1, 0, 0, 0, 373, 374, 1, 0, 0, 0, 374, 379, 1, 0, 0, 0, 375, 376, 3, 34, 17, 0, 376, 377, 6, 16, -1, 0, 377, 379, 1, 0, 0, 0, 378, 367, 1, 0, 0, 0, 378, 375, 1, 0, 0, 0, 379, 33, 1, 0, 0, 0, 380, 381, 3, 36, 18, 0, 381, 382, 3, 38, 19, 0, 382, 383, 5, 43, 0, 0, 383, 384, 3, 32, 16, 0, 384, 385, 6, 17, -1, 0, 385, 35, 1, 0, 0, 0, 386, 387, 7, 3, 0, 0, 387, 393, 6, 18, -1, 0, 388, 389, 7, 4, 0, 0, 389, 393, 6, 18, -1, 0, 390, 391, 7, 5, 0, 0, 391, 393, 6, 18, -1, 0, 392, 386, 1, 0, 0, 0, 392, 388, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 393, 37, 1, 0, 0, 0, 394, 395, 3, 16, 8, 0, 395, 402, 6, 19, -1, 0, 396, 397, 5, 50, 0, 0, 397, 398, 3, 16, 8, 0, 398, 399, 6, 19, -1, 0, 399, 401, 1, 0, 0, 0, 400, 396, 1, 0, 0, 0, 401, 404, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 405, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 405, 406, 6, 19, -1, 0, 406, 39, 1, 0, 0, 0, 407, 408, 3, 32, 16, 0, 408, 415, 6, 20, -1, 0, 409, 410, 5, 50, 0, 0, 410, 411, 3, 32, 16, 0, 411, 412, 6, 20, -1, 0, 412, 414, 1, 0, 0, 0, 413, 409, 1, 0, 0, 0, 414, 417, 1, 0, 0, 0, 415, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 419, 1, 0, 0, 0, 417, 415, 1, 0, 0, 0, 418, 407, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 419, 41, 1, 0, 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, 437, 1, 0, 0, 0, 427, 433, 5, 50, 0, 0, 428, 429, 3, 32, 16, 0, 429, 430, 6, 21, -1, 0, 430, 434, 1, 0, 0, 0, 431, 432, 7, 0, 0, 0, 432, 434, 6, 21, -1, 0, 433, 428, 1, 0, 0, 0, 433, 431, 1, 0, 0, 0, 434, 436, 1, 0, 0, 0, 435, 427, 1, 0, 0, 0, 436, 439, 1, 0, 0, 0, 437, 435, 1, 0, 0, 0, 437, 438, 1, 0, 0, 0, 438, 441, 1, 0, 0, 0, 439, 437, 1, 0, 0, 0, 440, 425, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 43, 1, 0, 0, 0, 442, 443, 3, 32, 16, 0, 443, 444, 6, 22, -1, 0, 444, 445, 5, 51, 0, 0, 445, 446, 3, 32, 16, 0, 446, 447, 6, 22, -1, 0, 447, 45, 1, 0, 0, 0, 448, 449, 3, 32, 16, 0, 449, 450, 6, 23, -1, 0, 450, 451, 5, 43, 0, 0, 451, 452, 3, 32, 16, 0, 452, 453, 6, 23, -1, 0, 453, 47, 1, 0, 0, 0, 454, 455, 5, 52, 0, 0, 455, 1363, 6, 24, -1, 0, 456, 457, 5, 53, 0, 0, 457, 1363, 6, 24, -1, 0, 458, 459, 5, 234, 0, 0, 459, 1363, 6, 24, -1, 0, 460, 461, 5, 231, 0, 0, 461, 1363, 6, 24, -1, 0, 462, 463, 5, 233, 0, 0, 463, 1363, 6, 24, -1, 0, 464, 465, 5, 232, 0, 0, 465, 1363, 6, 24, -1, 0, 466, 467, 5, 235, 0, 0, 467, 1363, 6, 24, -1, 0, 468, 469, 5, 54, 0, 0, 469, 470, 3, 32, 16, 0, 470, 471, 5, 55, 0, 0, 471, 472, 6, 24, -1, 0, 472, 1363, 1, 0, 0, 0, 473, 474, 5, 56, 0, 0, 474, 475, 3, 48, 24, 0, 475, 476, 6, 24, -1, 0, 476, 1363, 1, 0, 0, 0, 477, 478, 5, 57, 0, 0, 478, 479, 3, 40, 20, 0, 479, 480, 5, 58, 0, 0, 480, 481, 6, 24, -1, 0, 481, 1363, 1, 0, 0, 0, 482, 483, 5, 57, 0, 0, 483, 484, 3, 40, 20, 0, 484, 485, 5, 59, 0, 0, 485, 486, 6, 24, -1, 0, 486, 1363, 1, 0, 0, 0, 487, 488, 5, 32, 0, 0, 488, 489, 3, 44, 22, 0, 489, 490, 5, 33, 0, 0, 490, 491, 6, 24, -1, 0, 491, 1363, 1, 0, 0, 0, 492, 493, 5, 57, 0, 0, 493, 494, 3, 44, 22, 0, 494, 495, 5, 33, 0, 0, 495, 496, 6, 24, -1, 0, 496, 1363, 1, 0, 0, 0, 497, 498, 5, 57, 0, 0, 498, 499, 3, 44, 22, 0, 499, 500, 5, 59, 0, 0, 500, 501, 6, 24, -1, 0, 501, 1363, 1, 0, 0, 0, 502, 503, 5, 32, 0, 0, 503, 504, 3, 44, 22, 0, 504, 505, 5, 59, 0, 0, 505, 506, 6, 24, -1, 0, 506, 1363, 1, 0, 0, 0, 507, 508, 5, 32, 0, 0, 508, 509, 3, 32, 16, 0, 509, 510, 5, 33, 0, 0, 510, 511, 6, 24, -1, 0, 511, 1363, 1, 0, 0, 0, 512, 513, 5, 60, 0, 0, 513, 514, 3, 46, 23, 0, 514, 515, 5, 61, 0, 0, 515, 516, 6, 24, -1, 0, 516, 1363, 1, 0, 0, 0, 517, 518, 5, 60, 0, 0, 518, 519, 3, 42, 21, 0, 519, 520, 5, 61, 0, 0, 520, 521, 6, 24, -1, 0, 521, 1363, 1, 0, 0, 0, 522, 523, 5, 62, 0, 0, 523, 524, 3, 40, 20, 0, 524, 525, 5, 33, 0, 0, 525, 526, 6, 24, -1, 0, 526, 1363, 1, 0, 0, 0, 527, 528, 5, 63, 0, 0, 528, 529, 3, 40, 20, 0, 529, 530, 5, 33, 0, 0, 530, 531, 6, 24, -1, 0, 531, 1363, 1, 0, 0, 0, 532, 533, 5, 64, 0, 0, 533, 534, 3, 40, 20, 0, 534, 535, 5, 33, 0, 0, 535, 536, 6, 24, -1, 0, 536, 1363, 1, 0, 0, 0, 537, 538, 5, 65, 0, 0, 538, 539, 3, 40, 20, 0, 539, 540, 5, 33, 0, 0, 540, 541, 6, 24, -1, 0, 541, 1363, 1, 0, 0, 0, 542, 543, 5, 66, 0, 0, 543, 544, 3, 40, 20, 0, 544, 545, 5, 33, 0, 0, 545, 546, 6, 24, -1, 0, 546, 1363, 1, 0, 0, 0, 547, 548, 5, 67, 0, 0, 548, 549, 3, 40, 20, 0, 549, 550, 5, 33, 0, 0, 550, 551, 6, 24, -1, 0, 551, 1363, 1, 0, 0, 0, 552, 553, 5, 68, 0, 0, 553, 554, 3, 40, 20, 0, 554, 555, 5, 33, 0, 0, 555, 556, 6, 24, -1, 0, 556, 1363, 1, 0, 0, 0, 557, 558, 5, 69, 0, 0, 558, 559, 3, 40, 20, 0, 559, 560, 5, 33, 0, 0, 560, 561, 6, 24, -1, 0, 561, 1363, 1, 0, 0, 0, 562, 563, 5, 70, 0, 0, 563, 564, 3, 40, 20, 0, 564, 565, 5, 33, 0, 0, 565, 566, 6, 24, -1, 0, 566, 1363, 1, 0, 0, 0, 567, 568, 5, 71, 0, 0, 568, 569, 3, 40, 20, 0, 569, 570, 5, 33, 0, 0, 570, 571, 6, 24, -1, 0, 571, 1363, 1, 0, 0, 0, 572, 573, 5, 72, 0, 0, 573, 574, 3, 40, 20, 0, 574, 575, 5, 33, 0, 0, 575, 576, 6, 24, -1, 0, 576, 1363, 1, 0, 0, 0, 577, 578, 5, 73, 0, 0, 578, 579, 3, 40, 20, 0, 579, 580, 5, 33, 0, 0, 580, 581, 6, 24, -1, 0, 581, 1363, 1, 0, 0, 0, 582, 583, 5, 74, 0, 0, 583, 584, 3, 40, 20, 0, 584, 585, 5, 33, 0, 0, 585, 586, 6, 24, -1, 0, 586, 1363, 1, 0, 0, 0, 587, 588, 5, 75, 0, 0, 588, 589, 3, 40, 20, 0, 589, 590, 5, 33, 0, 0, 590, 591, 6, 24, -1, 0, 591, 1363, 1, 0, 0, 0, 592, 593, 5, 76, 0, 0, 593, 594, 3, 40, 20, 0, 594, 595, 5, 33, 0, 0, 595, 596, 6, 24, -1, 0, 596, 1363, 1, 0, 0, 0, 597, 598, 5, 77, 0, 0, 598, 599, 3, 40, 20, 0, 599, 600, 5, 33, 0, 0, 600, 601, 6, 24, -1, 0, 601, 1363, 1, 0, 0, 0, 602, 603, 5, 78, 0, 0, 603, 604, 3, 40, 20, 0, 604, 605, 5, 33, 0, 0, 605, 606, 6, 24, -1, 0, 606, 1363, 1, 0, 0, 0, 607, 608, 5, 79, 0, 0, 608, 609, 3, 40, 20, 0, 609, 610, 5, 33, 0, 0, 610, 611, 6, 24, -1, 0, 611, 1363, 1, 0, 0, 0, 612, 613, 5, 80, 0, 0, 613, 614, 3, 40, 20, 0, 614, 615, 5, 33, 0, 0, 615, 616, 6, 24, -1, 0, 616, 1363, 1, 0, 0, 0, 617, 618, 5, 81, 0, 0, 618, 619, 3, 40, 20, 0, 619, 620, 5, 33, 0, 0, 620, 621, 6, 24, -1, 0, 621, 1363, 1, 0, 0, 0, 622, 623, 5, 82, 0, 0, 623, 624, 3, 40, 20, 0, 624, 625, 5, 33, 0, 0, 625, 626, 6, 24, -1, 0, 626, 1363, 1, 0, 0, 0, 627, 628, 5, 83, 0, 0, 628, 629, 3, 40, 20, 0, 629, 630, 5, 33, 0, 0, 630, 631, 6, 24, -1, 0, 631, 1363, 1, 0, 0, 0, 632, 633, 5, 84, 0, 0, 633, 634, 3, 40, 20, 0, 634, 635, 5, 33, 0, 0, 635, 636, 6, 24, -1, 0, 636, 1363, 1, 0, 0, 0, 637, 638, 5, 85, 0, 0, 638, 639, 3, 40, 20, 0, 639, 640, 5, 33, 0, 0, 640, 641, 6, 24, -1, 0, 641, 1363, 1, 0, 0, 0, 642, 643, 5, 86, 0, 0, 643, 644, 3, 40, 20, 0, 644, 645, 5, 33, 0, 0, 645, 646, 6, 24, -1, 0, 646, 1363, 1, 0, 0, 0, 647, 648, 5, 87, 0, 0, 648, 649, 3, 40, 20, 0, 649, 650, 5, 33, 0, 0, 650, 651, 6, 24, -1, 0, 651, 1363, 1, 0, 0, 0, 652, 653, 5, 88, 0, 0, 653, 654, 3, 40, 20, 0, 654, 655, 5, 33, 0, 0, 655, 656, 6, 24, -1, 0, 656, 1363, 1, 0, 0, 0, 657, 658, 5, 89, 0, 0, 658, 659, 3, 40, 20, 0, 659, 660, 5, 33, 0, 0, 660, 661, 6, 24, -1, 0, 661, 1363, 1, 0, 0, 0, 662, 663, 5, 90, 0, 0, 663, 664, 3, 40, 20, 0, 664, 665, 5, 33, 0, 0, 665, 666, 6, 24, -1, 0, 666, 1363, 1, 0, 0, 0, 667, 668, 5, 91, 0, 0, 668, 669, 3, 40, 20, 0, 669, 670, 5, 33, 0, 0, 670, 671, 6, 24, -1, 0, 671, 1363, 1, 0, 0, 0, 672, 673, 5, 92, 0, 0, 673, 674, 3, 40, 20, 0, 674, 675, 5, 33, 0, 0, 675, 676, 6, 24, -1, 0, 676, 1363, 1, 0, 0, 0, 677, 678, 5, 93, 0, 0, 678, 679, 3, 40, 20, 0, 679, 680, 5, 33, 0, 0, 680, 681, 6, 24, -1, 0, 681, 1363, 1, 0, 0, 0, 682, 683, 5, 94, 0, 0, 683, 684, 3, 40, 20, 0, 684, 685, 5, 33, 0, 0, 685, 686, 6, 24, -1, 0, 686, 1363, 1, 0, 0, 0, 687, 688, 5, 95, 0, 0, 688, 689, 3, 40, 20, 0, 689, 690, 5, 33, 0, 0, 690, 691, 6, 24, -1, 0, 691, 1363, 1, 0, 0, 0, 692, 693, 5, 96, 0, 0, 693, 694, 3, 40, 20, 0, 694, 695, 5, 33, 0, 0, 695, 696, 6, 24, -1, 0, 696, 1363, 1, 0, 0, 0, 697, 698, 5, 97, 0, 0, 698, 699, 3, 40, 20, 0, 699, 700, 5, 33, 0, 0, 700, 701, 6, 24, -1, 0, 701, 1363, 1, 0, 0, 0, 702, 703, 5, 98, 0, 0, 703, 704, 3, 40, 20, 0, 704, 705, 5, 33, 0, 0, 705, 706, 6, 24, -1, 0, 706, 1363, 1, 0, 0, 0, 707, 708, 5, 99, 0, 0, 708, 709, 3, 40, 20, 0, 709, 710, 5, 33, 0, 0, 710, 711, 6, 24, -1, 0, 711, 1363, 1, 0, 0, 0, 712, 713, 5, 100, 0, 0, 713, 714, 3, 40, 20, 0, 714, 715, 5, 33, 0, 0, 715, 716, 6, 24, -1, 0, 716, 1363, 1, 0, 0, 0, 717, 718, 5, 101, 0, 0, 718, 719, 3, 40, 20, 0, 719, 720, 5, 33, 0, 0, 720, 721, 6, 24, -1, 0, 721, 1363, 1, 0, 0, 0, 722, 723, 5, 102, 0, 0, 723, 724, 3, 40, 20, 0, 724, 725, 5, 33, 0, 0, 725, 726, 6, 24, -1, 0, 726, 1363, 1, 0, 0, 0, 727, 728, 5, 103, 0, 0, 728, 729, 3, 40, 20, 0, 729, 730, 5, 33, 0, 0, 730, 731, 6, 24, -1, 0, 731, 1363, 1, 0, 0, 0, 732, 733, 5, 104, 0, 0, 733, 734, 3, 40, 20, 0, 734, 735, 5, 33, 0, 0, 735, 736, 6, 24, -1, 0, 736, 1363, 1, 0, 0, 0, 737, 738, 5, 105, 0, 0, 738, 739, 3, 40, 20, 0, 739, 740, 5, 33, 0, 0, 740, 741, 6, 24, -1, 0, 741, 1363, 1, 0, 0, 0, 742, 743, 5, 106, 0, 0, 743, 744, 3, 40, 20, 0, 744, 745, 5, 33, 0, 0, 745, 746, 6, 24, -1, 0, 746, 1363, 1, 0, 0, 0, 747, 748, 5, 107, 0, 0, 748, 749, 3, 40, 20, 0, 749, 750, 5, 33, 0, 0, 750, 751, 6, 24, -1, 0, 751, 1363, 1, 0, 0, 0, 752, 753, 5, 108, 0, 0, 753, 754, 3, 40, 20, 0, 754, 755, 5, 33, 0, 0, 755, 756, 6, 24, -1, 0, 756, 1363, 1, 0, 0, 0, 757, 758, 5, 109, 0, 0, 758, 759, 3, 40, 20, 0, 759, 760, 5, 33, 0, 0, 760, 761, 6, 24, -1, 0, 761, 1363, 1, 0, 0, 0, 762, 763, 5, 110, 0, 0, 763, 764, 3, 40, 20, 0, 764, 765, 5, 33, 0, 0, 765, 766, 6, 24, -1, 0, 766, 1363, 1, 0, 0, 0, 767, 768, 5, 111, 0, 0, 768, 769, 3, 40, 20, 0, 769, 770, 5, 33, 0, 0, 770, 771, 6, 24, -1, 0, 771, 1363, 1, 0, 0, 0, 772, 773, 5, 112, 0, 0, 773, 774, 3, 40, 20, 0, 774, 775, 5, 33, 0, 0, 775, 776, 6, 24, -1, 0, 776, 1363, 1, 0, 0, 0, 777, 778, 5, 113, 0, 0, 778, 779, 3, 40, 20, 0, 779, 780, 5, 33, 0, 0, 780, 781, 6, 24, -1, 0, 781, 1363, 1, 0, 0, 0, 782, 783, 5, 114, 0, 0, 783, 784, 3, 40, 20, 0, 784, 785, 5, 33, 0, 0, 785, 786, 6, 24, -1, 0, 786, 1363, 1, 0, 0, 0, 787, 788, 5, 115, 0, 0, 788, 789, 3, 40, 20, 0, 789, 790, 5, 33, 0, 0, 790, 791, 6, 24, -1, 0, 791, 1363, 1, 0, 0, 0, 792, 793, 5, 116, 0, 0, 793, 794, 3, 40, 20, 0, 794, 795, 5, 33, 0, 0, 795, 796, 6, 24, -1, 0, 796, 1363, 1, 0, 0, 0, 797, 798, 5, 117, 0, 0, 798, 799, 3, 40, 20, 0, 799, 800, 5, 33, 0, 0, 800, 801, 6, 24, -1, 0, 801, 1363, 1, 0, 0, 0, 802, 803, 5, 118, 0, 0, 803, 804, 3, 40, 20, 0, 804, 805, 5, 33, 0, 0, 805, 806, 6, 24, -1, 0, 806, 1363, 1, 0, 0, 0, 807, 808, 5, 119, 0, 0, 808, 809, 3, 40, 20, 0, 809, 810, 5, 33, 0, 0, 810, 811, 6, 24, -1, 0, 811, 1363, 1, 0, 0, 0, 812, 813, 5, 120, 0, 0, 813, 814, 3, 40, 20, 0, 814, 815, 5, 33, 0, 0, 815, 816, 6, 24, -1, 0, 816, 1363, 1, 0, 0, 0, 817, 818, 5, 121, 0, 0, 818, 819, 3, 40, 20, 0, 819, 820, 5, 33, 0, 0, 820, 821, 6, 24, -1, 0, 821, 1363, 1, 0, 0, 0, 822, 823, 5, 122, 0, 0, 823, 824, 3, 40, 20, 0, 824, 825, 5, 33, 0, 0, 825, 826, 6, 24, -1, 0, 826, 1363, 1, 0, 0, 0, 827, 828, 5, 123, 0, 0, 828, 829, 3, 40, 20, 0, 829, 830, 5, 33, 0, 0, 830, 831, 6, 24, -1, 0, 831, 1363, 1, 0, 0, 0, 832, 833, 5, 124, 0, 0, 833, 834, 3, 40, 20, 0, 834, 835, 5, 33, 0, 0, 835, 836, 6, 24, -1, 0, 836, 1363, 1, 0, 0, 0, 837, 838, 5, 125, 0, 0, 838, 839, 3, 40, 20, 0, 839, 840, 5, 33, 0, 0, 840, 841, 6, 24, -1, 0, 841, 1363, 1, 0, 0, 0, 842, 843, 5, 126, 0, 0, 843, 844, 3, 40, 20, 0, 844, 845, 5, 33, 0, 0, 845, 846, 6, 24, -1, 0, 846, 1363, 1, 0, 0, 0, 847, 848, 5, 127, 0, 0, 848, 849, 3, 40, 20, 0, 849, 850, 5, 33, 0, 0, 850, 851, 6, 24, -1, 0, 851, 1363, 1, 0, 0, 0, 852, 853, 5, 128, 0, 0, 853, 854, 3, 40, 20, 0, 854, 855, 5, 33, 0, 0, 855, 856, 6, 24, -1, 0, 856, 1363, 1, 0, 0, 0, 857, 858, 5, 129, 0, 0, 858, 859, 3, 40, 20, 0, 859, 860, 5, 33, 0, 0, 860, 861, 6, 24, -1, 0, 861, 1363, 1, 0, 0, 0, 862, 863, 5, 130, 0, 0, 863, 864, 3, 40, 20, 0, 864, 865, 5, 33, 0, 0, 865, 866, 6, 24, -1, 0, 866, 1363, 1, 0, 0, 0, 867, 868, 5, 131, 0, 0, 868, 869, 3, 40, 20, 0, 869, 870, 5, 33, 0, 0, 870, 871, 6, 24, -1, 0, 871, 1363, 1, 0, 0, 0, 872, 873, 5, 132, 0, 0, 873, 874, 3, 40, 20, 0, 874, 875, 5, 33, 0, 0, 875, 876, 6, 24, -1, 0, 876, 1363, 1, 0, 0, 0, 877, 878, 5, 133, 0, 0, 878, 879, 3, 40, 20, 0, 879, 880, 5, 33, 0, 0, 880, 881, 6, 24, -1, 0, 881, 1363, 1, 0, 0, 0, 882, 883, 5, 134, 0, 0, 883, 884, 3, 40, 20, 0, 884, 885, 5, 33, 0, 0, 885, 886, 6, 24, -1, 0, 886, 1363, 1, 0, 0, 0, 887, 888, 5, 135, 0, 0, 888, 889, 3, 40, 20, 0, 889, 890, 5, 33, 0, 0, 890, 891, 6, 24, -1, 0, 891, 1363, 1, 0, 0, 0, 892, 893, 5, 136, 0, 0, 893, 894, 3, 40, 20, 0, 894, 895, 5, 33, 0, 0, 895, 896, 6, 24, -1, 0, 896, 1363, 1, 0, 0, 0, 897, 898, 5, 137, 0, 0, 898, 899, 3, 40, 20, 0, 899, 900, 5, 33, 0, 0, 900, 901, 6, 24, -1, 0, 901, 1363, 1, 0, 0, 0, 902, 903, 5, 138, 0, 0, 903, 904, 3, 40, 20, 0, 904, 905, 5, 33, 0, 0, 905, 906, 6, 24, -1, 0, 906, 1363, 1, 0, 0, 0, 907, 908, 5, 139, 0, 0, 908, 909, 3, 40, 20, 0, 909, 910, 5, 33, 0, 0, 910, 911, 6, 24, -1, 0, 911, 1363, 1, 0, 0, 0, 912, 913, 5, 140, 0, 0, 913, 914, 3, 40, 20, 0, 914, 915, 5, 33, 0, 0, 915, 916, 6, 24, -1, 0, 916, 1363, 1, 0, 0, 0, 917, 918, 5, 141, 0, 0, 918, 919, 3, 40, 20, 0, 919, 920, 5, 33, 0, 0, 920, 921, 6, 24, -1, 0, 921, 1363, 1, 0, 0, 0, 922, 923, 5, 142, 0, 0, 923, 924, 3, 40, 20, 0, 924, 925, 5, 33, 0, 0, 925, 926, 6, 24, -1, 0, 926, 1363, 1, 0, 0, 0, 927, 928, 5, 143, 0, 0, 928, 929, 3, 40, 20, 0, 929, 930, 5, 33, 0, 0, 930, 931, 6, 24, -1, 0, 931, 1363, 1, 0, 0, 0, 932, 933, 5, 144, 0, 0, 933, 934, 3, 40, 20, 0, 934, 935, 5, 33, 0, 0, 935, 936, 6, 24, -1, 0, 936, 1363, 1, 0, 0, 0, 937, 938, 5, 145, 0, 0, 938, 939, 3, 40, 20, 0, 939, 940, 5, 33, 0, 0, 940, 941, 6, 24, -1, 0, 941, 1363, 1, 0, 0, 0, 942, 943, 5, 146, 0, 0, 943, 944, 3, 40, 20, 0, 944, 945, 5, 33, 0, 0, 945, 946, 6, 24, -1, 0, 946, 1363, 1, 0, 0, 0, 947, 948, 5, 147, 0, 0, 948, 949, 3, 40, 20, 0, 949, 950, 5, 33, 0, 0, 950, 951, 6, 24, -1, 0, 951, 1363, 1, 0, 0, 0, 952, 953, 5, 148, 0, 0, 953, 954, 3, 40, 20, 0, 954, 955, 5, 33, 0, 0, 955, 956, 6, 24, -1, 0, 956, 1363, 1, 0, 0, 0, 957, 958, 5, 149, 0, 0, 958, 959, 3, 40, 20, 0, 959, 960, 5, 33, 0, 0, 960, 961, 6, 24, -1, 0, 961, 1363, 1, 0, 0, 0, 962, 963, 5, 150, 0, 0, 963, 964, 3, 40, 20, 0, 964, 965, 5, 33, 0, 0, 965, 966, 6, 24, -1, 0, 966, 1363, 1, 0, 0, 0, 967, 968, 5, 151, 0, 0, 968, 969, 3, 40, 20, 0, 969, 970, 5, 33, 0, 0, 970, 971, 6, 24, -1, 0, 971, 1363, 1, 0, 0, 0, 972, 973, 5, 152, 0, 0, 973, 974, 3, 40, 20, 0, 974, 975, 5, 33, 0, 0, 975, 976, 6, 24, -1, 0, 976, 1363, 1, 0, 0, 0, 977, 978, 5, 153, 0, 0, 978, 979, 3, 40, 20, 0, 979, 980, 5, 33, 0, 0, 980, 981, 6, 24, -1, 0, 981, 1363, 1, 0, 0, 0, 982, 983, 5, 154, 0, 0, 983, 984, 3, 40, 20, 0, 984, 985, 5, 33, 0, 0, 985, 986, 6, 24, -1, 0, 986, 1363, 1, 0, 0, 0, 987, 988, 5, 155, 0, 0, 988, 989, 3, 40, 20, 0, 989, 990, 5, 33, 0, 0, 990, 991, 6, 24, -1, 0, 991, 1363, 1, 0, 0, 0, 992, 993, 5, 156, 0, 0, 993, 994, 3, 40, 20, 0, 994, 995, 5, 33, 0, 0, 995, 996, 6, 24, -1, 0, 996, 1363, 1, 0, 0, 0, 997, 998, 5, 157, 0, 0, 998, 999, 3, 40, 20, 0, 999, 1000, 5, 33, 0, 0, 1000, 1001, 6, 24, -1, 0, 1001, 1363, 1, 0, 0, 0, 1002, 1003, 5, 158, 0, 0, 1003, 1004, 3, 40, 20, 0, 1004, 1005, 5, 33, 0, 0, 1005, 1006, 6, 24, -1, 0, 1006, 1363, 1, 0, 0, 0, 1007, 1008, 5, 159, 0, 0, 1008, 1009, 3, 40, 20, 0, 1009, 1010, 5, 33, 0, 0, 1010, 1011, 6, 24, -1, 0, 1011, 1363, 1, 0, 0, 0, 1012, 1013, 5, 160, 0, 0, 1013, 1014, 3, 40, 20, 0, 1014, 1015, 5, 33, 0, 0, 1015, 1016, 6, 24, -1, 0, 1016, 1363, 1, 0, 0, 0, 1017, 1018, 5, 161, 0, 0, 1018, 1019, 3, 40, 20, 0, 1019, 1020, 5, 33, 0, 0, 1020, 1021, 6, 24, -1, 0, 1021, 1363, 1, 0, 0, 0, 1022, 1023, 5, 162, 0, 0, 1023, 1024, 3, 40, 20, 0, 1024, 1025, 5, 33, 0, 0, 1025, 1026, 6, 24, -1, 0, 1026, 1363, 1, 0, 0, 0, 1027, 1028, 5, 163, 0, 0, 1028, 1029, 3, 40, 20, 0, 1029, 1030, 5, 33, 0, 0, 1030, 1031, 6, 24, -1, 0, 1031, 1363, 1, 0, 0, 0, 1032, 1033, 5, 164, 0, 0, 1033, 1034, 3, 40, 20, 0, 1034, 1035, 5, 33, 0, 0, 1035, 1036, 6, 24, -1, 0, 1036, 1363, 1, 0, 0, 0, 1037, 1038, 5, 165, 0, 0, 1038, 1039, 3, 40, 20, 0, 1039, 1040, 5, 33, 0, 0, 1040, 1041, 6, 24, -1, 0, 1041, 1363, 1, 0, 0, 0, 1042, 1043, 5, 166, 0, 0, 1043, 1044, 3, 40, 20, 0, 1044, 1045, 5, 33, 0, 0, 1045, 1046, 6, 24, -1, 0, 1046, 1363, 1, 0, 0, 0, 1047, 1048, 5, 167, 0, 0, 1048, 1049, 3, 40, 20, 0, 1049, 1050, 5, 33, 0, 0, 1050, 1051, 6, 24, -1, 0, 1051, 1363, 1, 0, 0, 0, 1052, 1053, 5, 168, 0, 0, 1053, 1054, 3, 40, 20, 0, 1054, 1055, 5, 33, 0, 0, 1055, 1056, 6, 24, -1, 0, 1056, 1363, 1, 0, 0, 0, 1057, 1058, 5, 169, 0, 0, 1058, 1059, 3, 40, 20, 0, 1059, 1060, 5, 33, 0, 0, 1060, 1061, 6, 24, -1, 0, 1061, 1363, 1, 0, 0, 0, 1062, 1063, 5, 170, 0, 0, 1063, 1064, 3, 40, 20, 0, 1064, 1065, 5, 33, 0, 0, 1065, 1066, 6, 24, -1, 0, 1066, 1363, 1, 0, 0, 0, 1067, 1068, 5, 171, 0, 0, 1068, 1069, 3, 40, 20, 0, 1069, 1070, 5, 33, 0, 0, 1070, 1071, 6, 24, -1, 0, 1071, 1363, 1, 0, 0, 0, 1072, 1073, 5, 172, 0, 0, 1073, 1074, 3, 40, 20, 0, 1074, 1075, 5, 33, 0, 0, 1075, 1076, 6, 24, -1, 0, 1076, 1363, 1, 0, 0, 0, 1077, 1078, 5, 173, 0, 0, 1078, 1079, 3, 40, 20, 0, 1079, 1080, 5, 33, 0, 0, 1080, 1081, 6, 24, -1, 0, 1081, 1363, 1, 0, 0, 0, 1082, 1083, 5, 174, 0, 0, 1083, 1084, 3, 40, 20, 0, 1084, 1085, 5, 33, 0, 0, 1085, 1086, 6, 24, -1, 0, 1086, 1363, 1, 0, 0, 0, 1087, 1088, 5, 175, 0, 0, 1088, 1089, 3, 40, 20, 0, 1089, 1090, 5, 33, 0, 0, 1090, 1091, 6, 24, -1, 0, 1091, 1363, 1, 0, 0, 0, 1092, 1093, 5, 176, 0, 0, 1093, 1094, 3, 40, 20, 0, 1094, 1095, 5, 33, 0, 0, 1095, 1096, 6, 24, -1, 0, 1096, 1363, 1, 0, 0, 0, 1097, 1098, 5, 177, 0, 0, 1098, 1099, 3, 40, 20, 0, 1099, 1100, 5, 33, 0, 0, 1100, 1101, 6, 24, -1, 0, 1101, 1363, 1, 0, 0, 0, 1102, 1103, 5, 178, 0, 0, 1103, 1104, 3, 40, 20, 0, 1104, 1105, 5, 33, 0, 0, 1105, 1106, 6, 24, -1, 0, 1106, 1363, 1, 0, 0, 0, 1107, 1108, 5, 179, 0, 0, 1108, 1109, 3, 40, 20, 0, 1109, 1110, 5, 33, 0, 0, 1110, 1111, 6, 24, -1, 0, 1111, 1363, 1, 0, 0, 0, 1112, 1113, 5, 180, 0, 0, 1113, 1114, 3, 40, 20, 0, 1114, 1115, 5, 33, 0, 0, 1115, 1116, 6, 24, -1, 0, 1116, 1363, 1, 0, 0, 0, 1117, 1118, 5, 181, 0, 0, 1118, 1119, 3, 40, 20, 0, 1119, 1120, 5, 33, 0, 0, 1120, 1121, 6, 24, -1, 0, 1121, 1363, 1, 0, 0, 0, 1122, 1123, 5, 182, 0, 0, 1123, 1124, 3, 40, 20, 0, 1124, 1125, 5, 33, 0, 0, 1125, 1126, 6, 24, -1, 0, 1126, 1363, 1, 0, 0, 0, 1127, 1128, 5, 183, 0, 0, 1128, 1129, 3, 40, 20, 0, 1129, 1130, 5, 33, 0, 0, 1130, 1131, 6, 24, -1, 0, 1131, 1363, 1, 0, 0, 0, 1132, 1133, 5, 184, 0, 0, 1133, 1134, 3, 40, 20, 0, 1134, 1135, 5, 33, 0, 0, 1135, 1136, 6, 24, -1, 0, 1136, 1363, 1, 0, 0, 0, 1137, 1138, 5, 185, 0, 0, 1138, 1139, 3, 40, 20, 0, 1139, 1140, 5, 33, 0, 0, 1140, 1141, 6, 24, -1, 0, 1141, 1363, 1, 0, 0, 0, 1142, 1143, 5, 186, 0, 0, 1143, 1144, 3, 40, 20, 0, 1144, 1145, 5, 33, 0, 0, 1145, 1146, 6, 24, -1, 0, 1146, 1363, 1, 0, 0, 0, 1147, 1148, 5, 187, 0, 0, 1148, 1149, 3, 40, 20, 0, 1149, 1150, 5, 33, 0, 0, 1150, 1151, 6, 24, -1, 0, 1151, 1363, 1, 0, 0, 0, 1152, 1153, 5, 188, 0, 0, 1153, 1154, 3, 40, 20, 0, 1154, 1155, 5, 33, 0, 0, 1155, 1156, 6, 24, -1, 0, 1156, 1363, 1, 0, 0, 0, 1157, 1158, 5, 189, 0, 0, 1158, 1159, 3, 40, 20, 0, 1159, 1160, 5, 33, 0, 0, 1160, 1161, 6, 24, -1, 0, 1161, 1363, 1, 0, 0, 0, 1162, 1163, 5, 190, 0, 0, 1163, 1164, 3, 40, 20, 0, 1164, 1165, 5, 33, 0, 0, 1165, 1166, 6, 24, -1, 0, 1166, 1363, 1, 0, 0, 0, 1167, 1168, 5, 191, 0, 0, 1168, 1169, 3, 40, 20, 0, 1169, 1170, 5, 33, 0, 0, 1170, 1171, 6, 24, -1, 0, 1171, 1363, 1, 0, 0, 0, 1172, 1173, 5, 192, 0, 0, 1173, 1174, 3, 40, 20, 0, 1174, 1175, 5, 33, 0, 0, 1175, 1176, 6, 24, -1, 0, 1176, 1363, 1, 0, 0, 0, 1177, 1178, 5, 193, 0, 0, 1178, 1179, 3, 40, 20, 0, 1179, 1180, 5, 33, 0, 0, 1180, 1181, 6, 24, -1, 0, 1181, 1363, 1, 0, 0, 0, 1182, 1183, 5, 194, 0, 0, 1183, 1184, 3, 40, 20, 0, 1184, 1185, 5, 33, 0, 0, 1185, 1186, 6, 24, -1, 0, 1186, 1363, 1, 0, 0, 0, 1187, 1188, 5, 195, 0, 0, 1188, 1189, 3, 40, 20, 0, 1189, 1190, 5, 33, 0, 0, 1190, 1191, 6, 24, -1, 0, 1191, 1363, 1, 0, 0, 0, 1192, 1193, 5, 196, 0, 0, 1193, 1194, 3, 40, 20, 0, 1194, 1195, 5, 33, 0, 0, 1195, 1196, 6, 24, -1, 0, 1196, 1363, 1, 0, 0, 0, 1197, 1198, 5, 197, 0, 0, 1198, 1199, 3, 40, 20, 0, 1199, 1200, 5, 33, 0, 0, 1200, 1201, 6, 24, -1, 0, 1201, 1363, 1, 0, 0, 0, 1202, 1203, 5, 198, 0, 0, 1203, 1204, 3, 40, 20, 0, 1204, 1205, 5, 33, 0, 0, 1205, 1206, 6, 24, -1, 0, 1206, 1363, 1, 0, 0, 0, 1207, 1208, 5, 199, 0, 0, 1208, 1209, 3, 40, 20, 0, 1209, 1210, 5, 33, 0, 0, 1210, 1211, 6, 24, -1, 0, 1211, 1363, 1, 0, 0, 0, 1212, 1213, 5, 200, 0, 0, 1213, 1214, 3, 40, 20, 0, 1214, 1215, 5, 33, 0, 0, 1215, 1216, 6, 24, -1, 0, 1216, 1363, 1, 0, 0, 0, 1217, 1218, 5, 201, 0, 0, 1218, 1219, 3, 40, 20, 0, 1219, 1220, 5, 33, 0, 0, 1220, 1221, 6, 24, -1, 0, 1221, 1363, 1, 0, 0, 0, 1222, 1223, 5, 202, 0, 0, 1223, 1224, 3, 40, 20, 0, 1224, 1225, 5, 33, 0, 0, 1225, 1226, 6, 24, -1, 0, 1226, 1363, 1, 0, 0, 0, 1227, 1228, 5, 203, 0, 0, 1228, 1229, 3, 40, 20, 0, 1229, 1230, 5, 33, 0, 0, 1230, 1231, 6, 24, -1, 0, 1231, 1363, 1, 0, 0, 0, 1232, 1233, 5, 204, 0, 0, 1233, 1234, 3, 40, 20, 0, 1234, 1235, 5, 33, 0, 0, 1235, 1236, 6, 24, -1, 0, 1236, 1363, 1, 0, 0, 0, 1237, 1238, 5, 205, 0, 0, 1238, 1239, 3, 40, 20, 0, 1239, 1240, 5, 33, 0, 0, 1240, 1241, 6, 24, -1, 0, 1241, 1363, 1, 0, 0, 0, 1242, 1243, 5, 206, 0, 0, 1243, 1244, 3, 40, 20, 0, 1244, 1245, 5, 33, 0, 0, 1245, 1246, 6, 24, -1, 0, 1246, 1363, 1, 0, 0, 0, 1247, 1248, 5, 207, 0, 0, 1248, 1249, 3, 40, 20, 0, 1249, 1250, 5, 33, 0, 0, 1250, 1251, 6, 24, -1, 0, 1251, 1363, 1, 0, 0, 0, 1252, 1253, 5, 208, 0, 0, 1253, 1254, 3, 40, 20, 0, 1254, 1255, 5, 33, 0, 0, 1255, 1256, 6, 24, -1, 0, 1256, 1363, 1, 0, 0, 0, 1257, 1258, 5, 209, 0, 0, 1258, 1259, 3, 40, 20, 0, 1259, 1260, 5, 33, 0, 0, 1260, 1261, 6, 24, -1, 0, 1261, 1363, 1, 0, 0, 0, 1262, 1263, 5, 210, 0, 0, 1263, 1264, 3, 40, 20, 0, 1264, 1265, 5, 33, 0, 0, 1265, 1266, 6, 24, -1, 0, 1266, 1363, 1, 0, 0, 0, 1267, 1268, 5, 211, 0, 0, 1268, 1269, 3, 40, 20, 0, 1269, 1270, 5, 33, 0, 0, 1270, 1271, 6, 24, -1, 0, 1271, 1363, 1, 0, 0, 0, 1272, 1273, 5, 212, 0, 0, 1273, 1274, 3, 40, 20, 0, 1274, 1275, 5, 33, 0, 0, 1275, 1276, 6, 24, -1, 0, 1276, 1363, 1, 0, 0, 0, 1277, 1278, 5, 213, 0, 0, 1278, 1279, 3, 40, 20, 0, 1279, 1280, 5, 33, 0, 0, 1280, 1281, 6, 24, -1, 0, 1281, 1363, 1, 0, 0, 0, 1282, 1283, 5, 214, 0, 0, 1283, 1284, 3, 40, 20, 0, 1284, 1285, 5, 33, 0, 0, 1285, 1286, 6, 24, -1, 0, 1286, 1363, 1, 0, 0, 0, 1287, 1288, 5, 215, 0, 0, 1288, 1289, 3, 40, 20, 0, 1289, 1290, 5, 33, 0, 0, 1290, 1291, 6, 24, -1, 0, 1291, 1363, 1, 0, 0, 0, 1292, 1293, 5, 216, 0, 0, 1293, 1294, 3, 40, 20, 0, 1294, 1295, 5, 33, 0, 0, 1295, 1296, 6, 24, -1, 0, 1296, 1363, 1, 0, 0, 0, 1297, 1298, 5, 217, 0, 0, 1298, 1299, 3, 40, 20, 0, 1299, 1300, 5, 33, 0, 0, 1300, 1301, 6, 24, -1, 0, 1301, 1363, 1, 0, 0, 0, 1302, 1303, 5, 218, 0, 0, 1303, 1304, 3, 40, 20, 0, 1304, 1305, 5, 33, 0, 0, 1305, 1306, 6, 24, -1, 0, 1306, 1363, 1, 0, 0, 0, 1307, 1308, 5, 219, 0, 0, 1308, 1309, 3, 40, 20, 0, 1309, 1310, 5, 33, 0, 0, 1310, 1311, 6, 24, -1, 0, 1311, 1363, 1, 0, 0, 0, 1312, 1313, 5, 220, 0, 0, 1313, 1314, 3, 40, 20, 0, 1314, 1315, 5, 33, 0, 0, 1315, 1316, 6, 24, -1, 0, 1316, 1363, 1, 0, 0, 0, 1317, 1318, 5, 221, 0, 0, 1318, 1319, 3, 40, 20, 0, 1319, 1320, 5, 33, 0, 0, 1320, 1321, 6, 24, -1, 0, 1321, 1363, 1, 0, 0, 0, 1322, 1323, 5, 222, 0, 0, 1323, 1324, 3, 40, 20, 0, 1324, 1325, 5, 33, 0, 0, 1325, 1326, 6, 24, -1, 0, 1326, 1363, 1, 0, 0, 0, 1327, 1328, 5, 223, 0, 0, 1328, 1329, 3, 40, 20, 0, 1329, 1330, 5, 33, 0, 0, 1330, 1331, 6, 24, -1, 0, 1331, 1363, 1, 0, 0, 0, 1332, 1333, 5, 224, 0, 0, 1333, 1334, 3, 40, 20, 0, 1334, 1335, 5, 33, 0, 0, 1335, 1336, 6, 24, -1, 0, 1336, 1363, 1, 0, 0, 0, 1337, 1338, 5, 225, 0, 0, 1338, 1339, 3, 40, 20, 0, 1339, 1340, 5, 33, 0, 0, 1340, 1341, 6, 24, -1, 0, 1341, 1363, 1, 0, 0, 0, 1342, 1343, 5, 226, 0, 0, 1343, 1344, 3, 40, 20, 0, 1344, 1345, 5, 33, 0, 0, 1345, 1346, 6, 24, -1, 0, 1346, 1363, 1, 0, 0, 0, 1347, 1348, 5, 227, 0, 0, 1348, 1349, 3, 40, 20, 0, 1349, 1350, 5, 33, 0, 0, 1350, 1351, 6, 24, -1, 0, 1351, 1363, 1, 0, 0, 0, 1352, 1353, 5, 228, 0, 0, 1353, 1354, 3, 40, 20, 0, 1354, 1355, 5, 33, 0, 0, 1355, 1356, 6, 24, -1, 0, 1356, 1363, 1, 0, 0, 0, 1357, 1358, 5, 229, 0, 0, 1358, 1359, 3, 40, 20, 0, 1359, 1360, 5, 33, 0, 0, 1360, 1361, 6, 24, -1, 0, 1361, 1363, 1, 0, 0, 0, 1362, 454, 1, 0, 0, 0, 1362, 456, 1, 0, 0, 0, 1362, 458, 1, 0, 0, 0, 1362, 460, 1, 0, 0, 0, 1362, 462, 1, 0, 0, 0, 1362, 464, 1, 0, 0, 0, 1362, 466, 1, 0, 0, 0, 1362, 468, 1, 0, 0, 0, 1362, 473, 1, 0, 0, 0, 1362, 477, 1, 0, 0, 0, 1362, 482, 1, 0, 0, 0, 1362, 487, 1, 0, 0, 0, 1362, 492, 1, 0, 0, 0, 1362, 497, 1, 0, 0, 0, 1362, 502, 1, 0, 0, 0, 1362, 507, 1, 0, 0, 0, 1362, 512, 1, 0, 0, 0, 1362, 517, 1, 0, 0, 0, 1362, 522, 1, 0, 0, 0, 1362, 527, 1, 0, 0, 0, 1362, 532, 1, 0, 0, 0, 1362, 537, 1, 0, 0, 0, 1362, 542, 1, 0, 0, 0, 1362, 547, 1, 0, 0, 0, 1362, 552, 1, 0, 0, 0, 1362, 557, 1, 0, 0, 0, 1362, 562, 1, 0, 0, 0, 1362, 567, 1, 0, 0, 0, 1362, 572, 1, 0, 0, 0, 1362, 577, 1, 0, 0, 0, 1362, 582, 1, 0, 0, 0, 1362, 587, 1, 0, 0, 0, 1362, 592, 1, 0, 0, 0, 1362, 597, 1, 0, 0, 0, 1362, 602, 1, 0, 0, 0, 1362, 607, 1, 0, 0, 0, 1362, 612, 1, 0, 0, 0, 1362, 617, 1, 0, 0, 0, 1362, 622, 1, 0, 0, 0, 1362, 627, 1, 0, 0, 0, 1362, 632, 1, 0, 0, 0, 1362, 637, 1, 0, 0, 0, 1362, 642, 1, 0, 0, 0, 1362, 647, 1, 0, 0, 0, 1362, 652, 1, 0, 0, 0, 1362, 657, 1, 0, 0, 0, 1362, 662, 1, 0, 0, 0, 1362, 667, 1, 0, 0, 0, 1362, 672, 1, 0, 0, 0, 1362, 677, 1, 0, 0, 0, 1362, 682, 1, 0, 0, 0, 1362, 687, 1, 0, 0, 0, 1362, 692, 1, 0, 0, 0, 1362, 697, 1, 0, 0, 0, 1362, 702, 1, 0, 0, 0, 1362, 707, 1, 0, 0, 0, 1362, 712, 1, 0, 0, 0, 1362, 717, 1, 0, 0, 0, 1362, 722, 1, 0, 0, 0, 1362, 727, 1, 0, 0, 0, 1362, 732, 1, 0, 0, 0, 1362, 737, 1, 0, 0, 0, 1362, 742, 1, 0, 0, 0, 1362, 747, 1, 0, 0, 0, 1362, 752, 1, 0, 0, 0, 1362, 757, 1, 0, 0, 0, 1362, 762, 1, 0, 0, 0, 1362, 767, 1, 0, 0, 0, 1362, 772, 1, 0, 0, 0, 1362, 777, 1, 0, 0, 0, 1362, 782, 1, 0, 0, 0, 1362, 787, 1, 0, 0, 0, 1362, 792, 1, 0, 0, 0, 1362, 797, 1, 0, 0, 0, 1362, 802, 1, 0, 0, 0, 1362, 807, 1, 0, 0, 0, 1362, 812, 1, 0, 0, 0, 1362, 817, 1, 0, 0, 0, 1362, 822, 1, 0, 0, 0, 1362, 827, 1, 0, 0, 0, 1362, 832, 1, 0, 0, 0, 1362, 837, 1, 0, 0, 0, 1362, 842, 1, 0, 0, 0, 1362, 847, 1, 0, 0, 0, 1362, 852, 1, 0, 0, 0, 1362, 857, 1, 0, 0, 0, 1362, 862, 1, 0, 0, 0, 1362, 867, 1, 0, 0, 0, 1362, 872, 1, 0, 0, 0, 1362, 877, 1, 0, 0, 0, 1362, 882, 1, 0, 0, 0, 1362, 887, 1, 0, 0, 0, 1362, 892, 1, 0, 0, 0, 1362, 897, 1, 0, 0, 0, 1362, 902, 1, 0, 0, 0, 1362, 907, 1, 0, 0, 0, 1362, 912, 1, 0, 0, 0, 1362, 917, 1, 0, 0, 0, 1362, 922, 1, 0, 0, 0, 1362, 927, 1, 0, 0, 0, 1362, 932, 1, 0, 0, 0, 1362, 937, 1, 0, 0, 0, 1362, 942, 1, 0, 0, 0, 1362, 947, 1, 0, 0, 0, 1362, 952, 1, 0, 0, 0, 1362, 957, 1, 0, 0, 0, 1362, 962, 1, 0, 0, 0, 1362, 967, 1, 0, 0, 0, 1362, 972, 1, 0, 0, 0, 1362, 977, 1, 0, 0, 0, 1362, 982, 1, 0, 0, 0, 1362, 987, 1, 0, 0, 0, 1362, 992, 1, 0, 0, 0, 1362, 997, 1, 0, 0, 0, 1362, 1002, 1, 0, 0, 0, 1362, 1007, 1, 0, 0, 0, 1362, 1012, 1, 0, 0, 0, 1362, 1017, 1, 0, 0, 0, 1362, 1022, 1, 0, 0, 0, 1362, 1027, 1, 0, 0, 0, 1362, 1032, 1, 0, 0, 0, 1362, 1037, 1, 0, 0, 0, 1362, 1042, 1, 0, 0, 0, 1362, 1047, 1, 0, 0, 0, 1362, 1052, 1, 0, 0, 0, 1362, 1057, 1, 0, 0, 0, 1362, 1062, 1, 0, 0, 0, 1362, 1067, 1, 0, 0, 0, 1362, 1072, 1, 0, 0, 0, 1362, 1077, 1, 0, 0, 0, 1362, 1082, 1, 0, 0, 0, 1362, 1087, 1, 0, 0, 0, 1362, 1092, 1, 0, 0, 0, 1362, 1097, 1, 0, 0, 0, 1362, 1102, 1, 0, 0, 0, 1362, 1107, 1, 0, 0, 0, 1362, 1112, 1, 0, 0, 0, 1362, 1117, 1, 0, 0, 0, 1362, 1122, 1, 0, 0, 0, 1362, 1127, 1, 0, 0, 0, 1362, 1132, 1, 0, 0, 0, 1362, 1137, 1, 0, 0, 0, 1362, 1142, 1, 0, 0, 0, 1362, 1147, 1, 0, 0, 0, 1362, 1152, 1, 0, 0, 0, 1362, 1157, 1, 0, 0, 0, 1362, 1162, 1, 0, 0, 0, 1362, 1167, 1, 0, 0, 0, 1362, 1172, 1, 0, 0, 0, 1362, 1177, 1, 0, 0, 0, 1362, 1182, 1, 0, 0, 0, 1362, 1187, 1, 0, 0, 0, 1362, 1192, 1, 0, 0, 0, 1362, 1197, 1, 0, 0, 0, 1362, 1202, 1, 0, 0, 0, 1362, 1207, 1, 0, 0, 0, 1362, 1212, 1, 0, 0, 0, 1362, 1217, 1, 0, 0, 0, 1362, 1222, 1, 0, 0, 0, 1362, 1227, 1, 0, 0, 0, 1362, 1232, 1, 0, 0, 0, 1362, 1237, 1, 0, 0, 0, 1362, 1242, 1, 0, 0, 0, 1362, 1247, 1, 0, 0, 0, 1362, 1252, 1, 0, 0, 0, 1362, 1257, 1, 0, 0, 0, 1362, 1262, 1, 0, 0, 0, 1362, 1267, 1, 0, 0, 0, 1362, 1272, 1, 0, 0, 0, 1362, 1277, 1, 0, 0, 0, 1362, 1282, 1, 0, 0, 0, 1362, 1287, 1, 0, 0, 0, 1362, 1292, 1, 0, 0, 0, 1362, 1297, 1, 0, 0, 0, 1362, 1302, 1, 0, 0, 0, 1362, 1307, 1, 0, 0, 0, 1362, 1312, 1, 0, 0, 0, 1362, 1317, 1, 0, 0, 0, 1362, 1322, 1, 0, 0, 0, 1362, 1327, 1, 0, 0, 0, 1362, 1332, 1, 0, 0, 0, 1362, 1337, 1, 0, 0, 0, 1362, 1342, 1, 0, 0, 0, 1362, 1347, 1, 0, 0, 0, 1362, 1352, 1, 0, 0, 0, 1362, 1357, 1, 0, 0, 0, 1363, 49, 1, 0, 0, 0, 1364, 1365, 3, 32, 16, 0, 1365, 1366, 5, 0, 0, 1, 1366, 1367, 6, 25, -1, 0, 1367, 51, 1, 0, 0, 0, 44, 67, 75, 83, 85, 92, 102, 112, 117, 127, 137, 139, 152, 158, 160, 175, 177, 198, 200, 233, 235, 254, 261, 270, 289, 305, 307, 320, 322, 335, 337, 354, 356, 365, 373, 378, 392, 402, 415, 418, 425, 433, 437, 440, 1362]
\ No newline at end of file
+[4, 1, 238, 1388, 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, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 62, 8, 0, 10, 0, 12, 0, 65, 9, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 82, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 4, 2, 88, 8, 2, 11, 2, 12, 2, 89, 1, 2, 1, 2, 1, 2, 1, 2, 4, 2, 96, 8, 2, 11, 2, 12, 2, 97, 3, 2, 100, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 107, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 117, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 127, 8, 4, 1, 4, 1, 4, 1, 4, 3, 4, 132, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 142, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 152, 8, 5, 10, 5, 12, 5, 155, 9, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 167, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 173, 8, 6, 10, 6, 12, 6, 176, 9, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 190, 8, 7, 10, 7, 12, 7, 193, 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, 5, 8, 213, 8, 8, 10, 8, 12, 8, 216, 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, 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, 5, 9, 248, 8, 9, 10, 9, 12, 9, 251, 9, 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, 1, 10, 3, 10, 269, 8, 10, 1, 10, 1, 10, 1, 10, 5, 10, 274, 8, 10, 10, 10, 12, 10, 277, 9, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 285, 8, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 304, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 320, 8, 12, 10, 12, 12, 12, 323, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 335, 8, 13, 10, 13, 12, 13, 338, 9, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 350, 8, 14, 10, 14, 12, 14, 353, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 369, 8, 15, 10, 15, 12, 15, 372, 9, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 380, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 388, 8, 17, 1, 17, 1, 17, 1, 17, 3, 17, 393, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 407, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 415, 8, 20, 10, 20, 12, 20, 418, 9, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 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, 3, 22, 440, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 448, 8, 22, 5, 22, 450, 8, 22, 10, 22, 12, 22, 453, 9, 22, 3, 22, 455, 8, 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, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1382, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 0, 0, 27, 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, 52, 0, 6, 1, 0, 10, 11, 1, 0, 37, 38, 1, 0, 41, 42, 1, 0, 46, 47, 1, 0, 48, 49, 1, 0, 50, 51, 1611, 0, 54, 1, 0, 0, 0, 2, 81, 1, 0, 0, 0, 4, 99, 1, 0, 0, 0, 6, 101, 1, 0, 0, 0, 8, 131, 1, 0, 0, 0, 10, 133, 1, 0, 0, 0, 12, 158, 1, 0, 0, 0, 14, 179, 1, 0, 0, 0, 16, 194, 1, 0, 0, 0, 18, 217, 1, 0, 0, 0, 20, 252, 1, 0, 0, 0, 22, 303, 1, 0, 0, 0, 24, 305, 1, 0, 0, 0, 26, 324, 1, 0, 0, 0, 28, 339, 1, 0, 0, 0, 30, 354, 1, 0, 0, 0, 32, 373, 1, 0, 0, 0, 34, 392, 1, 0, 0, 0, 36, 394, 1, 0, 0, 0, 38, 406, 1, 0, 0, 0, 40, 408, 1, 0, 0, 0, 42, 432, 1, 0, 0, 0, 44, 454, 1, 0, 0, 0, 46, 456, 1, 0, 0, 0, 48, 462, 1, 0, 0, 0, 50, 1381, 1, 0, 0, 0, 52, 1383, 1, 0, 0, 0, 54, 55, 3, 50, 25, 0, 55, 63, 6, 0, -1, 0, 56, 57, 5, 1, 0, 0, 57, 58, 3, 42, 21, 0, 58, 59, 5, 2, 0, 0, 59, 60, 6, 0, -1, 0, 60, 62, 1, 0, 0, 0, 61, 56, 1, 0, 0, 0, 62, 65, 1, 0, 0, 0, 63, 61, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 1, 1, 0, 0, 0, 65, 63, 1, 0, 0, 0, 66, 67, 3, 0, 0, 0, 67, 68, 5, 3, 0, 0, 68, 69, 6, 1, -1, 0, 69, 82, 1, 0, 0, 0, 70, 71, 3, 0, 0, 0, 71, 72, 5, 4, 0, 0, 72, 73, 6, 1, -1, 0, 73, 82, 1, 0, 0, 0, 74, 75, 3, 0, 0, 0, 75, 76, 5, 5, 0, 0, 76, 77, 6, 1, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 0, 0, 0, 79, 80, 6, 1, -1, 0, 80, 82, 1, 0, 0, 0, 81, 66, 1, 0, 0, 0, 81, 70, 1, 0, 0, 0, 81, 74, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 3, 1, 0, 0, 0, 83, 84, 5, 6, 0, 0, 84, 85, 3, 2, 1, 0, 85, 86, 6, 2, -1, 0, 86, 88, 1, 0, 0, 0, 87, 83, 1, 0, 0, 0, 88, 89, 1, 0, 0, 0, 89, 87, 1, 0, 0, 0, 89, 90, 1, 0, 0, 0, 90, 100, 1, 0, 0, 0, 91, 92, 5, 6, 0, 0, 92, 93, 3, 8, 4, 0, 93, 94, 6, 2, -1, 0, 94, 96, 1, 0, 0, 0, 95, 91, 1, 0, 0, 0, 96, 97, 1, 0, 0, 0, 97, 95, 1, 0, 0, 0, 97, 98, 1, 0, 0, 0, 98, 100, 1, 0, 0, 0, 99, 87, 1, 0, 0, 0, 99, 95, 1, 0, 0, 0, 100, 5, 1, 0, 0, 0, 101, 102, 3, 2, 1, 0, 102, 106, 6, 3, -1, 0, 103, 104, 3, 4, 2, 0, 104, 105, 6, 3, -1, 0, 105, 107, 1, 0, 0, 0, 106, 103, 1, 0, 0, 0, 106, 107, 1, 0, 0, 0, 107, 7, 1, 0, 0, 0, 108, 109, 5, 7, 0, 0, 109, 110, 3, 6, 3, 0, 110, 111, 6, 4, -1, 0, 111, 117, 1, 0, 0, 0, 112, 113, 5, 8, 0, 0, 113, 114, 3, 6, 3, 0, 114, 115, 6, 4, -1, 0, 115, 117, 1, 0, 0, 0, 116, 108, 1, 0, 0, 0, 116, 112, 1, 0, 0, 0, 117, 132, 1, 0, 0, 0, 118, 119, 5, 7, 0, 0, 119, 120, 3, 8, 4, 0, 120, 121, 6, 4, -1, 0, 121, 127, 1, 0, 0, 0, 122, 123, 5, 8, 0, 0, 123, 124, 3, 8, 4, 0, 124, 125, 6, 4, -1, 0, 125, 127, 1, 0, 0, 0, 126, 118, 1, 0, 0, 0, 126, 122, 1, 0, 0, 0, 127, 132, 1, 0, 0, 0, 128, 129, 3, 6, 3, 0, 129, 130, 6, 4, -1, 0, 130, 132, 1, 0, 0, 0, 131, 116, 1, 0, 0, 0, 131, 126, 1, 0, 0, 0, 131, 128, 1, 0, 0, 0, 132, 9, 1, 0, 0, 0, 133, 134, 3, 8, 4, 0, 134, 153, 6, 5, -1, 0, 135, 141, 5, 9, 0, 0, 136, 137, 7, 0, 0, 0, 137, 142, 6, 5, -1, 0, 138, 139, 3, 8, 4, 0, 139, 140, 6, 5, -1, 0, 140, 142, 1, 0, 0, 0, 141, 136, 1, 0, 0, 0, 141, 138, 1, 0, 0, 0, 142, 152, 1, 0, 0, 0, 143, 144, 5, 12, 0, 0, 144, 145, 3, 8, 4, 0, 145, 146, 6, 5, -1, 0, 146, 152, 1, 0, 0, 0, 147, 148, 5, 13, 0, 0, 148, 149, 3, 8, 4, 0, 149, 150, 6, 5, -1, 0, 150, 152, 1, 0, 0, 0, 151, 135, 1, 0, 0, 0, 151, 143, 1, 0, 0, 0, 151, 147, 1, 0, 0, 0, 152, 155, 1, 0, 0, 0, 153, 151, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 156, 1, 0, 0, 0, 155, 153, 1, 0, 0, 0, 156, 157, 6, 5, -1, 0, 157, 11, 1, 0, 0, 0, 158, 159, 3, 10, 5, 0, 159, 174, 6, 6, -1, 0, 160, 166, 5, 8, 0, 0, 161, 162, 7, 0, 0, 0, 162, 167, 6, 6, -1, 0, 163, 164, 3, 10, 5, 0, 164, 165, 6, 6, -1, 0, 165, 167, 1, 0, 0, 0, 166, 161, 1, 0, 0, 0, 166, 163, 1, 0, 0, 0, 167, 173, 1, 0, 0, 0, 168, 169, 5, 7, 0, 0, 169, 170, 3, 10, 5, 0, 170, 171, 6, 6, -1, 0, 171, 173, 1, 0, 0, 0, 172, 160, 1, 0, 0, 0, 172, 168, 1, 0, 0, 0, 173, 176, 1, 0, 0, 0, 174, 172, 1, 0, 0, 0, 174, 175, 1, 0, 0, 0, 175, 177, 1, 0, 0, 0, 176, 174, 1, 0, 0, 0, 177, 178, 6, 6, -1, 0, 178, 13, 1, 0, 0, 0, 179, 180, 3, 12, 6, 0, 180, 191, 6, 7, -1, 0, 181, 182, 5, 14, 0, 0, 182, 183, 3, 12, 6, 0, 183, 184, 6, 7, -1, 0, 184, 190, 1, 0, 0, 0, 185, 186, 5, 15, 0, 0, 186, 187, 3, 12, 6, 0, 187, 188, 6, 7, -1, 0, 188, 190, 1, 0, 0, 0, 189, 181, 1, 0, 0, 0, 189, 185, 1, 0, 0, 0, 190, 193, 1, 0, 0, 0, 191, 189, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 15, 1, 0, 0, 0, 193, 191, 1, 0, 0, 0, 194, 195, 3, 14, 7, 0, 195, 214, 6, 8, -1, 0, 196, 197, 5, 16, 0, 0, 197, 198, 3, 14, 7, 0, 198, 199, 6, 8, -1, 0, 199, 213, 1, 0, 0, 0, 200, 201, 5, 17, 0, 0, 201, 202, 3, 14, 7, 0, 202, 203, 6, 8, -1, 0, 203, 213, 1, 0, 0, 0, 204, 205, 5, 18, 0, 0, 205, 206, 3, 14, 7, 0, 206, 207, 6, 8, -1, 0, 207, 213, 1, 0, 0, 0, 208, 209, 5, 19, 0, 0, 209, 210, 3, 14, 7, 0, 210, 211, 6, 8, -1, 0, 211, 213, 1, 0, 0, 0, 212, 196, 1, 0, 0, 0, 212, 200, 1, 0, 0, 0, 212, 204, 1, 0, 0, 0, 212, 208, 1, 0, 0, 0, 213, 216, 1, 0, 0, 0, 214, 212, 1, 0, 0, 0, 214, 215, 1, 0, 0, 0, 215, 17, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 217, 218, 3, 16, 8, 0, 218, 249, 6, 9, -1, 0, 219, 220, 5, 20, 0, 0, 220, 221, 3, 16, 8, 0, 221, 222, 6, 9, -1, 0, 222, 248, 1, 0, 0, 0, 223, 224, 5, 21, 0, 0, 224, 225, 3, 16, 8, 0, 225, 226, 6, 9, -1, 0, 226, 248, 1, 0, 0, 0, 227, 228, 5, 22, 0, 0, 228, 229, 3, 16, 8, 0, 229, 230, 6, 9, -1, 0, 230, 248, 1, 0, 0, 0, 231, 232, 5, 23, 0, 0, 232, 233, 3, 16, 8, 0, 233, 234, 6, 9, -1, 0, 234, 248, 1, 0, 0, 0, 235, 236, 5, 24, 0, 0, 236, 237, 3, 16, 8, 0, 237, 238, 6, 9, -1, 0, 238, 248, 1, 0, 0, 0, 239, 240, 5, 25, 0, 0, 240, 241, 3, 16, 8, 0, 241, 242, 6, 9, -1, 0, 242, 248, 1, 0, 0, 0, 243, 244, 5, 26, 0, 0, 244, 245, 3, 16, 8, 0, 245, 246, 6, 9, -1, 0, 246, 248, 1, 0, 0, 0, 247, 219, 1, 0, 0, 0, 247, 223, 1, 0, 0, 0, 247, 227, 1, 0, 0, 0, 247, 231, 1, 0, 0, 0, 247, 235, 1, 0, 0, 0, 247, 239, 1, 0, 0, 0, 247, 243, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 19, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 253, 3, 18, 9, 0, 253, 275, 6, 10, -1, 0, 254, 255, 5, 27, 0, 0, 255, 269, 6, 10, -1, 0, 256, 257, 5, 28, 0, 0, 257, 269, 6, 10, -1, 0, 258, 259, 5, 29, 0, 0, 259, 269, 6, 10, -1, 0, 260, 261, 5, 30, 0, 0, 261, 269, 6, 10, -1, 0, 262, 263, 5, 31, 0, 0, 263, 269, 6, 10, -1, 0, 264, 265, 5, 32, 0, 0, 265, 269, 6, 10, -1, 0, 266, 267, 5, 33, 0, 0, 267, 269, 6, 10, -1, 0, 268, 254, 1, 0, 0, 0, 268, 256, 1, 0, 0, 0, 268, 258, 1, 0, 0, 0, 268, 260, 1, 0, 0, 0, 268, 262, 1, 0, 0, 0, 268, 264, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 271, 3, 18, 9, 0, 271, 272, 6, 10, -1, 0, 272, 274, 1, 0, 0, 0, 273, 268, 1, 0, 0, 0, 274, 277, 1, 0, 0, 0, 275, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 284, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, 278, 279, 5, 34, 0, 0, 279, 280, 5, 13, 0, 0, 280, 281, 3, 18, 9, 0, 281, 282, 5, 35, 0, 0, 282, 283, 6, 10, -1, 0, 283, 285, 1, 0, 0, 0, 284, 278, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 287, 6, 10, -1, 0, 287, 21, 1, 0, 0, 0, 288, 289, 5, 36, 0, 0, 289, 290, 3, 20, 10, 0, 290, 291, 6, 11, -1, 0, 291, 304, 1, 0, 0, 0, 292, 293, 5, 36, 0, 0, 293, 294, 3, 22, 11, 0, 294, 295, 6, 11, -1, 0, 295, 304, 1, 0, 0, 0, 296, 297, 5, 36, 0, 0, 297, 298, 3, 36, 18, 0, 298, 299, 6, 11, -1, 0, 299, 304, 1, 0, 0, 0, 300, 301, 3, 20, 10, 0, 301, 302, 6, 11, -1, 0, 302, 304, 1, 0, 0, 0, 303, 288, 1, 0, 0, 0, 303, 292, 1, 0, 0, 0, 303, 296, 1, 0, 0, 0, 303, 300, 1, 0, 0, 0, 304, 23, 1, 0, 0, 0, 305, 306, 3, 22, 11, 0, 306, 321, 6, 12, -1, 0, 307, 308, 5, 37, 0, 0, 308, 309, 3, 22, 11, 0, 309, 310, 6, 12, -1, 0, 310, 320, 1, 0, 0, 0, 311, 312, 5, 38, 0, 0, 312, 313, 3, 22, 11, 0, 313, 314, 6, 12, -1, 0, 314, 320, 1, 0, 0, 0, 315, 316, 7, 1, 0, 0, 316, 317, 3, 36, 18, 0, 317, 318, 6, 12, -1, 0, 318, 320, 1, 0, 0, 0, 319, 307, 1, 0, 0, 0, 319, 311, 1, 0, 0, 0, 319, 315, 1, 0, 0, 0, 320, 323, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 25, 1, 0, 0, 0, 323, 321, 1, 0, 0, 0, 324, 325, 3, 24, 12, 0, 325, 336, 6, 13, -1, 0, 326, 327, 5, 39, 0, 0, 327, 328, 3, 24, 12, 0, 328, 329, 6, 13, -1, 0, 329, 335, 1, 0, 0, 0, 330, 331, 5, 39, 0, 0, 331, 332, 3, 36, 18, 0, 332, 333, 6, 13, -1, 0, 333, 335, 1, 0, 0, 0, 334, 326, 1, 0, 0, 0, 334, 330, 1, 0, 0, 0, 335, 338, 1, 0, 0, 0, 336, 334, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 27, 1, 0, 0, 0, 338, 336, 1, 0, 0, 0, 339, 340, 3, 26, 13, 0, 340, 351, 6, 14, -1, 0, 341, 342, 5, 40, 0, 0, 342, 343, 3, 26, 13, 0, 343, 344, 6, 14, -1, 0, 344, 350, 1, 0, 0, 0, 345, 346, 5, 40, 0, 0, 346, 347, 3, 36, 18, 0, 347, 348, 6, 14, -1, 0, 348, 350, 1, 0, 0, 0, 349, 341, 1, 0, 0, 0, 349, 345, 1, 0, 0, 0, 350, 353, 1, 0, 0, 0, 351, 349, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 29, 1, 0, 0, 0, 353, 351, 1, 0, 0, 0, 354, 355, 3, 28, 14, 0, 355, 370, 6, 15, -1, 0, 356, 357, 5, 41, 0, 0, 357, 358, 3, 28, 14, 0, 358, 359, 6, 15, -1, 0, 359, 369, 1, 0, 0, 0, 360, 361, 5, 42, 0, 0, 361, 362, 3, 28, 14, 0, 362, 363, 6, 15, -1, 0, 363, 369, 1, 0, 0, 0, 364, 365, 7, 2, 0, 0, 365, 366, 3, 36, 18, 0, 366, 367, 6, 15, -1, 0, 367, 369, 1, 0, 0, 0, 368, 356, 1, 0, 0, 0, 368, 360, 1, 0, 0, 0, 368, 364, 1, 0, 0, 0, 369, 372, 1, 0, 0, 0, 370, 368, 1, 0, 0, 0, 370, 371, 1, 0, 0, 0, 371, 31, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 373, 374, 3, 30, 15, 0, 374, 379, 6, 16, -1, 0, 375, 376, 5, 43, 0, 0, 376, 377, 3, 32, 16, 0, 377, 378, 6, 16, -1, 0, 378, 380, 1, 0, 0, 0, 379, 375, 1, 0, 0, 0, 379, 380, 1, 0, 0, 0, 380, 33, 1, 0, 0, 0, 381, 382, 3, 32, 16, 0, 382, 387, 6, 17, -1, 0, 383, 384, 5, 44, 0, 0, 384, 385, 3, 34, 17, 0, 385, 386, 6, 17, -1, 0, 386, 388, 1, 0, 0, 0, 387, 383, 1, 0, 0, 0, 387, 388, 1, 0, 0, 0, 388, 393, 1, 0, 0, 0, 389, 390, 3, 36, 18, 0, 390, 391, 6, 17, -1, 0, 391, 393, 1, 0, 0, 0, 392, 381, 1, 0, 0, 0, 392, 389, 1, 0, 0, 0, 393, 35, 1, 0, 0, 0, 394, 395, 3, 38, 19, 0, 395, 396, 3, 40, 20, 0, 396, 397, 5, 45, 0, 0, 397, 398, 3, 34, 17, 0, 398, 399, 6, 18, -1, 0, 399, 37, 1, 0, 0, 0, 400, 401, 7, 3, 0, 0, 401, 407, 6, 19, -1, 0, 402, 403, 7, 4, 0, 0, 403, 407, 6, 19, -1, 0, 404, 405, 7, 5, 0, 0, 405, 407, 6, 19, -1, 0, 406, 400, 1, 0, 0, 0, 406, 402, 1, 0, 0, 0, 406, 404, 1, 0, 0, 0, 407, 39, 1, 0, 0, 0, 408, 409, 3, 18, 9, 0, 409, 416, 6, 20, -1, 0, 410, 411, 5, 52, 0, 0, 411, 412, 3, 18, 9, 0, 412, 413, 6, 20, -1, 0, 413, 415, 1, 0, 0, 0, 414, 410, 1, 0, 0, 0, 415, 418, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 419, 1, 0, 0, 0, 418, 416, 1, 0, 0, 0, 419, 420, 6, 20, -1, 0, 420, 41, 1, 0, 0, 0, 421, 422, 3, 34, 17, 0, 422, 429, 6, 21, -1, 0, 423, 424, 5, 52, 0, 0, 424, 425, 3, 34, 17, 0, 425, 426, 6, 21, -1, 0, 426, 428, 1, 0, 0, 0, 427, 423, 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, 421, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 43, 1, 0, 0, 0, 434, 435, 3, 34, 17, 0, 435, 436, 6, 22, -1, 0, 436, 440, 1, 0, 0, 0, 437, 438, 7, 0, 0, 0, 438, 440, 6, 22, -1, 0, 439, 434, 1, 0, 0, 0, 439, 437, 1, 0, 0, 0, 440, 451, 1, 0, 0, 0, 441, 447, 5, 52, 0, 0, 442, 443, 3, 34, 17, 0, 443, 444, 6, 22, -1, 0, 444, 448, 1, 0, 0, 0, 445, 446, 7, 0, 0, 0, 446, 448, 6, 22, -1, 0, 447, 442, 1, 0, 0, 0, 447, 445, 1, 0, 0, 0, 448, 450, 1, 0, 0, 0, 449, 441, 1, 0, 0, 0, 450, 453, 1, 0, 0, 0, 451, 449, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 455, 1, 0, 0, 0, 453, 451, 1, 0, 0, 0, 454, 439, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 45, 1, 0, 0, 0, 456, 457, 3, 34, 17, 0, 457, 458, 6, 23, -1, 0, 458, 459, 5, 53, 0, 0, 459, 460, 3, 34, 17, 0, 460, 461, 6, 23, -1, 0, 461, 47, 1, 0, 0, 0, 462, 463, 3, 34, 17, 0, 463, 464, 6, 24, -1, 0, 464, 465, 5, 45, 0, 0, 465, 466, 3, 34, 17, 0, 466, 467, 6, 24, -1, 0, 467, 49, 1, 0, 0, 0, 468, 469, 5, 54, 0, 0, 469, 1382, 6, 25, -1, 0, 470, 471, 5, 55, 0, 0, 471, 1382, 6, 25, -1, 0, 472, 473, 5, 235, 0, 0, 473, 1382, 6, 25, -1, 0, 474, 475, 5, 232, 0, 0, 475, 1382, 6, 25, -1, 0, 476, 477, 5, 234, 0, 0, 477, 1382, 6, 25, -1, 0, 478, 479, 5, 233, 0, 0, 479, 1382, 6, 25, -1, 0, 480, 481, 5, 236, 0, 0, 481, 1382, 6, 25, -1, 0, 482, 483, 5, 56, 0, 0, 483, 484, 3, 34, 17, 0, 484, 485, 5, 57, 0, 0, 485, 486, 6, 25, -1, 0, 486, 1382, 1, 0, 0, 0, 487, 488, 5, 58, 0, 0, 488, 489, 3, 50, 25, 0, 489, 490, 6, 25, -1, 0, 490, 1382, 1, 0, 0, 0, 491, 492, 5, 1, 0, 0, 492, 493, 3, 42, 21, 0, 493, 494, 5, 59, 0, 0, 494, 495, 6, 25, -1, 0, 495, 1382, 1, 0, 0, 0, 496, 497, 5, 1, 0, 0, 497, 498, 3, 42, 21, 0, 498, 499, 5, 2, 0, 0, 499, 500, 6, 25, -1, 0, 500, 1382, 1, 0, 0, 0, 501, 502, 5, 34, 0, 0, 502, 503, 3, 46, 23, 0, 503, 504, 5, 35, 0, 0, 504, 505, 6, 25, -1, 0, 505, 1382, 1, 0, 0, 0, 506, 507, 5, 1, 0, 0, 507, 508, 3, 46, 23, 0, 508, 509, 5, 35, 0, 0, 509, 510, 6, 25, -1, 0, 510, 1382, 1, 0, 0, 0, 511, 512, 5, 1, 0, 0, 512, 513, 3, 46, 23, 0, 513, 514, 5, 2, 0, 0, 514, 515, 6, 25, -1, 0, 515, 1382, 1, 0, 0, 0, 516, 517, 5, 34, 0, 0, 517, 518, 3, 46, 23, 0, 518, 519, 5, 2, 0, 0, 519, 520, 6, 25, -1, 0, 520, 1382, 1, 0, 0, 0, 521, 522, 5, 34, 0, 0, 522, 523, 3, 34, 17, 0, 523, 524, 5, 35, 0, 0, 524, 525, 6, 25, -1, 0, 525, 1382, 1, 0, 0, 0, 526, 527, 5, 60, 0, 0, 527, 528, 3, 48, 24, 0, 528, 529, 5, 61, 0, 0, 529, 530, 6, 25, -1, 0, 530, 1382, 1, 0, 0, 0, 531, 532, 5, 60, 0, 0, 532, 533, 3, 44, 22, 0, 533, 534, 5, 61, 0, 0, 534, 535, 6, 25, -1, 0, 535, 1382, 1, 0, 0, 0, 536, 537, 5, 62, 0, 0, 537, 538, 3, 42, 21, 0, 538, 539, 5, 35, 0, 0, 539, 540, 6, 25, -1, 0, 540, 1382, 1, 0, 0, 0, 541, 542, 5, 63, 0, 0, 542, 543, 3, 42, 21, 0, 543, 544, 5, 35, 0, 0, 544, 545, 6, 25, -1, 0, 545, 1382, 1, 0, 0, 0, 546, 547, 5, 64, 0, 0, 547, 548, 3, 42, 21, 0, 548, 549, 5, 35, 0, 0, 549, 550, 6, 25, -1, 0, 550, 1382, 1, 0, 0, 0, 551, 552, 5, 65, 0, 0, 552, 553, 3, 42, 21, 0, 553, 554, 5, 35, 0, 0, 554, 555, 6, 25, -1, 0, 555, 1382, 1, 0, 0, 0, 556, 557, 5, 66, 0, 0, 557, 558, 3, 42, 21, 0, 558, 559, 5, 35, 0, 0, 559, 560, 6, 25, -1, 0, 560, 1382, 1, 0, 0, 0, 561, 562, 5, 67, 0, 0, 562, 563, 3, 42, 21, 0, 563, 564, 5, 35, 0, 0, 564, 565, 6, 25, -1, 0, 565, 1382, 1, 0, 0, 0, 566, 567, 5, 68, 0, 0, 567, 568, 3, 42, 21, 0, 568, 569, 5, 35, 0, 0, 569, 570, 6, 25, -1, 0, 570, 1382, 1, 0, 0, 0, 571, 572, 5, 69, 0, 0, 572, 573, 3, 42, 21, 0, 573, 574, 5, 35, 0, 0, 574, 575, 6, 25, -1, 0, 575, 1382, 1, 0, 0, 0, 576, 577, 5, 70, 0, 0, 577, 578, 3, 42, 21, 0, 578, 579, 5, 35, 0, 0, 579, 580, 6, 25, -1, 0, 580, 1382, 1, 0, 0, 0, 581, 582, 5, 71, 0, 0, 582, 583, 3, 42, 21, 0, 583, 584, 5, 35, 0, 0, 584, 585, 6, 25, -1, 0, 585, 1382, 1, 0, 0, 0, 586, 587, 5, 72, 0, 0, 587, 588, 3, 42, 21, 0, 588, 589, 5, 35, 0, 0, 589, 590, 6, 25, -1, 0, 590, 1382, 1, 0, 0, 0, 591, 592, 5, 73, 0, 0, 592, 593, 3, 42, 21, 0, 593, 594, 5, 35, 0, 0, 594, 595, 6, 25, -1, 0, 595, 1382, 1, 0, 0, 0, 596, 597, 5, 74, 0, 0, 597, 598, 3, 42, 21, 0, 598, 599, 5, 35, 0, 0, 599, 600, 6, 25, -1, 0, 600, 1382, 1, 0, 0, 0, 601, 602, 5, 75, 0, 0, 602, 603, 3, 42, 21, 0, 603, 604, 5, 35, 0, 0, 604, 605, 6, 25, -1, 0, 605, 1382, 1, 0, 0, 0, 606, 607, 5, 76, 0, 0, 607, 608, 3, 42, 21, 0, 608, 609, 5, 35, 0, 0, 609, 610, 6, 25, -1, 0, 610, 1382, 1, 0, 0, 0, 611, 612, 5, 77, 0, 0, 612, 613, 3, 42, 21, 0, 613, 614, 5, 35, 0, 0, 614, 615, 6, 25, -1, 0, 615, 1382, 1, 0, 0, 0, 616, 617, 5, 78, 0, 0, 617, 618, 3, 42, 21, 0, 618, 619, 5, 35, 0, 0, 619, 620, 6, 25, -1, 0, 620, 1382, 1, 0, 0, 0, 621, 622, 5, 79, 0, 0, 622, 623, 3, 42, 21, 0, 623, 624, 5, 35, 0, 0, 624, 625, 6, 25, -1, 0, 625, 1382, 1, 0, 0, 0, 626, 627, 5, 80, 0, 0, 627, 628, 3, 42, 21, 0, 628, 629, 5, 35, 0, 0, 629, 630, 6, 25, -1, 0, 630, 1382, 1, 0, 0, 0, 631, 632, 5, 81, 0, 0, 632, 633, 3, 42, 21, 0, 633, 634, 5, 35, 0, 0, 634, 635, 6, 25, -1, 0, 635, 1382, 1, 0, 0, 0, 636, 637, 5, 82, 0, 0, 637, 638, 3, 42, 21, 0, 638, 639, 5, 35, 0, 0, 639, 640, 6, 25, -1, 0, 640, 1382, 1, 0, 0, 0, 641, 642, 5, 83, 0, 0, 642, 643, 3, 42, 21, 0, 643, 644, 5, 35, 0, 0, 644, 645, 6, 25, -1, 0, 645, 1382, 1, 0, 0, 0, 646, 647, 5, 84, 0, 0, 647, 648, 3, 42, 21, 0, 648, 649, 5, 35, 0, 0, 649, 650, 6, 25, -1, 0, 650, 1382, 1, 0, 0, 0, 651, 652, 5, 85, 0, 0, 652, 653, 3, 42, 21, 0, 653, 654, 5, 35, 0, 0, 654, 655, 6, 25, -1, 0, 655, 1382, 1, 0, 0, 0, 656, 657, 5, 86, 0, 0, 657, 658, 3, 42, 21, 0, 658, 659, 5, 35, 0, 0, 659, 660, 6, 25, -1, 0, 660, 1382, 1, 0, 0, 0, 661, 662, 5, 87, 0, 0, 662, 663, 3, 42, 21, 0, 663, 664, 5, 35, 0, 0, 664, 665, 6, 25, -1, 0, 665, 1382, 1, 0, 0, 0, 666, 667, 5, 88, 0, 0, 667, 668, 3, 42, 21, 0, 668, 669, 5, 35, 0, 0, 669, 670, 6, 25, -1, 0, 670, 1382, 1, 0, 0, 0, 671, 672, 5, 89, 0, 0, 672, 673, 3, 42, 21, 0, 673, 674, 5, 35, 0, 0, 674, 675, 6, 25, -1, 0, 675, 1382, 1, 0, 0, 0, 676, 677, 5, 90, 0, 0, 677, 678, 3, 42, 21, 0, 678, 679, 5, 35, 0, 0, 679, 680, 6, 25, -1, 0, 680, 1382, 1, 0, 0, 0, 681, 682, 5, 91, 0, 0, 682, 683, 3, 42, 21, 0, 683, 684, 5, 35, 0, 0, 684, 685, 6, 25, -1, 0, 685, 1382, 1, 0, 0, 0, 686, 687, 5, 92, 0, 0, 687, 688, 3, 42, 21, 0, 688, 689, 5, 35, 0, 0, 689, 690, 6, 25, -1, 0, 690, 1382, 1, 0, 0, 0, 691, 692, 5, 93, 0, 0, 692, 693, 3, 42, 21, 0, 693, 694, 5, 35, 0, 0, 694, 695, 6, 25, -1, 0, 695, 1382, 1, 0, 0, 0, 696, 697, 5, 94, 0, 0, 697, 698, 3, 42, 21, 0, 698, 699, 5, 35, 0, 0, 699, 700, 6, 25, -1, 0, 700, 1382, 1, 0, 0, 0, 701, 702, 5, 95, 0, 0, 702, 703, 3, 42, 21, 0, 703, 704, 5, 35, 0, 0, 704, 705, 6, 25, -1, 0, 705, 1382, 1, 0, 0, 0, 706, 707, 5, 96, 0, 0, 707, 708, 3, 42, 21, 0, 708, 709, 5, 35, 0, 0, 709, 710, 6, 25, -1, 0, 710, 1382, 1, 0, 0, 0, 711, 712, 5, 97, 0, 0, 712, 713, 3, 42, 21, 0, 713, 714, 5, 35, 0, 0, 714, 715, 6, 25, -1, 0, 715, 1382, 1, 0, 0, 0, 716, 717, 5, 98, 0, 0, 717, 718, 3, 42, 21, 0, 718, 719, 5, 35, 0, 0, 719, 720, 6, 25, -1, 0, 720, 1382, 1, 0, 0, 0, 721, 722, 5, 99, 0, 0, 722, 723, 3, 42, 21, 0, 723, 724, 5, 35, 0, 0, 724, 725, 6, 25, -1, 0, 725, 1382, 1, 0, 0, 0, 726, 727, 5, 100, 0, 0, 727, 728, 3, 42, 21, 0, 728, 729, 5, 35, 0, 0, 729, 730, 6, 25, -1, 0, 730, 1382, 1, 0, 0, 0, 731, 732, 5, 101, 0, 0, 732, 733, 3, 42, 21, 0, 733, 734, 5, 35, 0, 0, 734, 735, 6, 25, -1, 0, 735, 1382, 1, 0, 0, 0, 736, 737, 5, 102, 0, 0, 737, 738, 3, 42, 21, 0, 738, 739, 5, 35, 0, 0, 739, 740, 6, 25, -1, 0, 740, 1382, 1, 0, 0, 0, 741, 742, 5, 103, 0, 0, 742, 743, 3, 42, 21, 0, 743, 744, 5, 35, 0, 0, 744, 745, 6, 25, -1, 0, 745, 1382, 1, 0, 0, 0, 746, 747, 5, 104, 0, 0, 747, 748, 3, 42, 21, 0, 748, 749, 5, 35, 0, 0, 749, 750, 6, 25, -1, 0, 750, 1382, 1, 0, 0, 0, 751, 752, 5, 105, 0, 0, 752, 753, 3, 42, 21, 0, 753, 754, 5, 35, 0, 0, 754, 755, 6, 25, -1, 0, 755, 1382, 1, 0, 0, 0, 756, 757, 5, 106, 0, 0, 757, 758, 3, 42, 21, 0, 758, 759, 5, 35, 0, 0, 759, 760, 6, 25, -1, 0, 760, 1382, 1, 0, 0, 0, 761, 762, 5, 107, 0, 0, 762, 763, 3, 42, 21, 0, 763, 764, 5, 35, 0, 0, 764, 765, 6, 25, -1, 0, 765, 1382, 1, 0, 0, 0, 766, 767, 5, 108, 0, 0, 767, 768, 3, 42, 21, 0, 768, 769, 5, 35, 0, 0, 769, 770, 6, 25, -1, 0, 770, 1382, 1, 0, 0, 0, 771, 772, 5, 109, 0, 0, 772, 773, 3, 42, 21, 0, 773, 774, 5, 35, 0, 0, 774, 775, 6, 25, -1, 0, 775, 1382, 1, 0, 0, 0, 776, 777, 5, 110, 0, 0, 777, 778, 3, 42, 21, 0, 778, 779, 5, 35, 0, 0, 779, 780, 6, 25, -1, 0, 780, 1382, 1, 0, 0, 0, 781, 782, 5, 111, 0, 0, 782, 783, 3, 42, 21, 0, 783, 784, 5, 35, 0, 0, 784, 785, 6, 25, -1, 0, 785, 1382, 1, 0, 0, 0, 786, 787, 5, 112, 0, 0, 787, 788, 3, 42, 21, 0, 788, 789, 5, 35, 0, 0, 789, 790, 6, 25, -1, 0, 790, 1382, 1, 0, 0, 0, 791, 792, 5, 113, 0, 0, 792, 793, 3, 42, 21, 0, 793, 794, 5, 35, 0, 0, 794, 795, 6, 25, -1, 0, 795, 1382, 1, 0, 0, 0, 796, 797, 5, 114, 0, 0, 797, 798, 3, 42, 21, 0, 798, 799, 5, 35, 0, 0, 799, 800, 6, 25, -1, 0, 800, 1382, 1, 0, 0, 0, 801, 802, 5, 115, 0, 0, 802, 803, 3, 42, 21, 0, 803, 804, 5, 35, 0, 0, 804, 805, 6, 25, -1, 0, 805, 1382, 1, 0, 0, 0, 806, 807, 5, 116, 0, 0, 807, 808, 3, 42, 21, 0, 808, 809, 5, 35, 0, 0, 809, 810, 6, 25, -1, 0, 810, 1382, 1, 0, 0, 0, 811, 812, 5, 117, 0, 0, 812, 813, 3, 42, 21, 0, 813, 814, 5, 35, 0, 0, 814, 815, 6, 25, -1, 0, 815, 1382, 1, 0, 0, 0, 816, 817, 5, 118, 0, 0, 817, 818, 3, 42, 21, 0, 818, 819, 5, 35, 0, 0, 819, 820, 6, 25, -1, 0, 820, 1382, 1, 0, 0, 0, 821, 822, 5, 119, 0, 0, 822, 823, 3, 42, 21, 0, 823, 824, 5, 35, 0, 0, 824, 825, 6, 25, -1, 0, 825, 1382, 1, 0, 0, 0, 826, 827, 5, 120, 0, 0, 827, 828, 3, 42, 21, 0, 828, 829, 5, 35, 0, 0, 829, 830, 6, 25, -1, 0, 830, 1382, 1, 0, 0, 0, 831, 832, 5, 121, 0, 0, 832, 833, 3, 42, 21, 0, 833, 834, 5, 35, 0, 0, 834, 835, 6, 25, -1, 0, 835, 1382, 1, 0, 0, 0, 836, 837, 5, 122, 0, 0, 837, 838, 3, 42, 21, 0, 838, 839, 5, 35, 0, 0, 839, 840, 6, 25, -1, 0, 840, 1382, 1, 0, 0, 0, 841, 842, 5, 123, 0, 0, 842, 843, 3, 42, 21, 0, 843, 844, 5, 35, 0, 0, 844, 845, 6, 25, -1, 0, 845, 1382, 1, 0, 0, 0, 846, 847, 5, 124, 0, 0, 847, 848, 3, 42, 21, 0, 848, 849, 5, 35, 0, 0, 849, 850, 6, 25, -1, 0, 850, 1382, 1, 0, 0, 0, 851, 852, 5, 125, 0, 0, 852, 853, 3, 42, 21, 0, 853, 854, 5, 35, 0, 0, 854, 855, 6, 25, -1, 0, 855, 1382, 1, 0, 0, 0, 856, 857, 5, 126, 0, 0, 857, 858, 3, 42, 21, 0, 858, 859, 5, 35, 0, 0, 859, 860, 6, 25, -1, 0, 860, 1382, 1, 0, 0, 0, 861, 862, 5, 127, 0, 0, 862, 863, 3, 42, 21, 0, 863, 864, 5, 35, 0, 0, 864, 865, 6, 25, -1, 0, 865, 1382, 1, 0, 0, 0, 866, 867, 5, 128, 0, 0, 867, 868, 3, 42, 21, 0, 868, 869, 5, 35, 0, 0, 869, 870, 6, 25, -1, 0, 870, 1382, 1, 0, 0, 0, 871, 872, 5, 129, 0, 0, 872, 873, 3, 42, 21, 0, 873, 874, 5, 35, 0, 0, 874, 875, 6, 25, -1, 0, 875, 1382, 1, 0, 0, 0, 876, 877, 5, 130, 0, 0, 877, 878, 3, 42, 21, 0, 878, 879, 5, 35, 0, 0, 879, 880, 6, 25, -1, 0, 880, 1382, 1, 0, 0, 0, 881, 882, 5, 131, 0, 0, 882, 883, 3, 42, 21, 0, 883, 884, 5, 35, 0, 0, 884, 885, 6, 25, -1, 0, 885, 1382, 1, 0, 0, 0, 886, 887, 5, 132, 0, 0, 887, 888, 3, 42, 21, 0, 888, 889, 5, 35, 0, 0, 889, 890, 6, 25, -1, 0, 890, 1382, 1, 0, 0, 0, 891, 892, 5, 133, 0, 0, 892, 893, 3, 42, 21, 0, 893, 894, 5, 35, 0, 0, 894, 895, 6, 25, -1, 0, 895, 1382, 1, 0, 0, 0, 896, 897, 5, 134, 0, 0, 897, 898, 3, 42, 21, 0, 898, 899, 5, 35, 0, 0, 899, 900, 6, 25, -1, 0, 900, 1382, 1, 0, 0, 0, 901, 902, 5, 135, 0, 0, 902, 903, 3, 42, 21, 0, 903, 904, 5, 35, 0, 0, 904, 905, 6, 25, -1, 0, 905, 1382, 1, 0, 0, 0, 906, 907, 5, 136, 0, 0, 907, 908, 3, 42, 21, 0, 908, 909, 5, 35, 0, 0, 909, 910, 6, 25, -1, 0, 910, 1382, 1, 0, 0, 0, 911, 912, 5, 137, 0, 0, 912, 913, 3, 42, 21, 0, 913, 914, 5, 35, 0, 0, 914, 915, 6, 25, -1, 0, 915, 1382, 1, 0, 0, 0, 916, 917, 5, 138, 0, 0, 917, 918, 3, 42, 21, 0, 918, 919, 5, 35, 0, 0, 919, 920, 6, 25, -1, 0, 920, 1382, 1, 0, 0, 0, 921, 922, 5, 139, 0, 0, 922, 923, 3, 42, 21, 0, 923, 924, 5, 35, 0, 0, 924, 925, 6, 25, -1, 0, 925, 1382, 1, 0, 0, 0, 926, 927, 5, 140, 0, 0, 927, 928, 3, 42, 21, 0, 928, 929, 5, 35, 0, 0, 929, 930, 6, 25, -1, 0, 930, 1382, 1, 0, 0, 0, 931, 932, 5, 141, 0, 0, 932, 933, 3, 42, 21, 0, 933, 934, 5, 35, 0, 0, 934, 935, 6, 25, -1, 0, 935, 1382, 1, 0, 0, 0, 936, 937, 5, 142, 0, 0, 937, 938, 3, 42, 21, 0, 938, 939, 5, 35, 0, 0, 939, 940, 6, 25, -1, 0, 940, 1382, 1, 0, 0, 0, 941, 942, 5, 143, 0, 0, 942, 943, 3, 42, 21, 0, 943, 944, 5, 35, 0, 0, 944, 945, 6, 25, -1, 0, 945, 1382, 1, 0, 0, 0, 946, 947, 5, 144, 0, 0, 947, 948, 3, 42, 21, 0, 948, 949, 5, 35, 0, 0, 949, 950, 6, 25, -1, 0, 950, 1382, 1, 0, 0, 0, 951, 952, 5, 145, 0, 0, 952, 953, 3, 42, 21, 0, 953, 954, 5, 35, 0, 0, 954, 955, 6, 25, -1, 0, 955, 1382, 1, 0, 0, 0, 956, 957, 5, 146, 0, 0, 957, 958, 3, 42, 21, 0, 958, 959, 5, 35, 0, 0, 959, 960, 6, 25, -1, 0, 960, 1382, 1, 0, 0, 0, 961, 962, 5, 147, 0, 0, 962, 963, 3, 42, 21, 0, 963, 964, 5, 35, 0, 0, 964, 965, 6, 25, -1, 0, 965, 1382, 1, 0, 0, 0, 966, 967, 5, 148, 0, 0, 967, 968, 3, 42, 21, 0, 968, 969, 5, 35, 0, 0, 969, 970, 6, 25, -1, 0, 970, 1382, 1, 0, 0, 0, 971, 972, 5, 149, 0, 0, 972, 973, 3, 42, 21, 0, 973, 974, 5, 35, 0, 0, 974, 975, 6, 25, -1, 0, 975, 1382, 1, 0, 0, 0, 976, 977, 5, 150, 0, 0, 977, 978, 3, 42, 21, 0, 978, 979, 5, 35, 0, 0, 979, 980, 6, 25, -1, 0, 980, 1382, 1, 0, 0, 0, 981, 982, 5, 151, 0, 0, 982, 983, 3, 42, 21, 0, 983, 984, 5, 35, 0, 0, 984, 985, 6, 25, -1, 0, 985, 1382, 1, 0, 0, 0, 986, 987, 5, 152, 0, 0, 987, 988, 3, 42, 21, 0, 988, 989, 5, 35, 0, 0, 989, 990, 6, 25, -1, 0, 990, 1382, 1, 0, 0, 0, 991, 992, 5, 153, 0, 0, 992, 993, 3, 42, 21, 0, 993, 994, 5, 35, 0, 0, 994, 995, 6, 25, -1, 0, 995, 1382, 1, 0, 0, 0, 996, 997, 5, 154, 0, 0, 997, 998, 3, 42, 21, 0, 998, 999, 5, 35, 0, 0, 999, 1000, 6, 25, -1, 0, 1000, 1382, 1, 0, 0, 0, 1001, 1002, 5, 155, 0, 0, 1002, 1003, 3, 42, 21, 0, 1003, 1004, 5, 35, 0, 0, 1004, 1005, 6, 25, -1, 0, 1005, 1382, 1, 0, 0, 0, 1006, 1007, 5, 156, 0, 0, 1007, 1008, 3, 42, 21, 0, 1008, 1009, 5, 35, 0, 0, 1009, 1010, 6, 25, -1, 0, 1010, 1382, 1, 0, 0, 0, 1011, 1012, 5, 157, 0, 0, 1012, 1013, 3, 42, 21, 0, 1013, 1014, 5, 35, 0, 0, 1014, 1015, 6, 25, -1, 0, 1015, 1382, 1, 0, 0, 0, 1016, 1017, 5, 158, 0, 0, 1017, 1018, 3, 42, 21, 0, 1018, 1019, 5, 35, 0, 0, 1019, 1020, 6, 25, -1, 0, 1020, 1382, 1, 0, 0, 0, 1021, 1022, 5, 159, 0, 0, 1022, 1023, 3, 42, 21, 0, 1023, 1024, 5, 35, 0, 0, 1024, 1025, 6, 25, -1, 0, 1025, 1382, 1, 0, 0, 0, 1026, 1027, 5, 160, 0, 0, 1027, 1028, 3, 42, 21, 0, 1028, 1029, 5, 35, 0, 0, 1029, 1030, 6, 25, -1, 0, 1030, 1382, 1, 0, 0, 0, 1031, 1032, 5, 161, 0, 0, 1032, 1033, 3, 42, 21, 0, 1033, 1034, 5, 35, 0, 0, 1034, 1035, 6, 25, -1, 0, 1035, 1382, 1, 0, 0, 0, 1036, 1037, 5, 162, 0, 0, 1037, 1038, 3, 42, 21, 0, 1038, 1039, 5, 35, 0, 0, 1039, 1040, 6, 25, -1, 0, 1040, 1382, 1, 0, 0, 0, 1041, 1042, 5, 163, 0, 0, 1042, 1043, 3, 42, 21, 0, 1043, 1044, 5, 35, 0, 0, 1044, 1045, 6, 25, -1, 0, 1045, 1382, 1, 0, 0, 0, 1046, 1047, 5, 164, 0, 0, 1047, 1048, 3, 42, 21, 0, 1048, 1049, 5, 35, 0, 0, 1049, 1050, 6, 25, -1, 0, 1050, 1382, 1, 0, 0, 0, 1051, 1052, 5, 165, 0, 0, 1052, 1053, 3, 42, 21, 0, 1053, 1054, 5, 35, 0, 0, 1054, 1055, 6, 25, -1, 0, 1055, 1382, 1, 0, 0, 0, 1056, 1057, 5, 166, 0, 0, 1057, 1058, 3, 42, 21, 0, 1058, 1059, 5, 35, 0, 0, 1059, 1060, 6, 25, -1, 0, 1060, 1382, 1, 0, 0, 0, 1061, 1062, 5, 167, 0, 0, 1062, 1063, 3, 42, 21, 0, 1063, 1064, 5, 35, 0, 0, 1064, 1065, 6, 25, -1, 0, 1065, 1382, 1, 0, 0, 0, 1066, 1067, 5, 168, 0, 0, 1067, 1068, 3, 42, 21, 0, 1068, 1069, 5, 35, 0, 0, 1069, 1070, 6, 25, -1, 0, 1070, 1382, 1, 0, 0, 0, 1071, 1072, 5, 169, 0, 0, 1072, 1073, 3, 42, 21, 0, 1073, 1074, 5, 35, 0, 0, 1074, 1075, 6, 25, -1, 0, 1075, 1382, 1, 0, 0, 0, 1076, 1077, 5, 170, 0, 0, 1077, 1078, 3, 42, 21, 0, 1078, 1079, 5, 35, 0, 0, 1079, 1080, 6, 25, -1, 0, 1080, 1382, 1, 0, 0, 0, 1081, 1082, 5, 171, 0, 0, 1082, 1083, 3, 42, 21, 0, 1083, 1084, 5, 35, 0, 0, 1084, 1085, 6, 25, -1, 0, 1085, 1382, 1, 0, 0, 0, 1086, 1087, 5, 172, 0, 0, 1087, 1088, 3, 42, 21, 0, 1088, 1089, 5, 35, 0, 0, 1089, 1090, 6, 25, -1, 0, 1090, 1382, 1, 0, 0, 0, 1091, 1092, 5, 173, 0, 0, 1092, 1093, 3, 42, 21, 0, 1093, 1094, 5, 35, 0, 0, 1094, 1095, 6, 25, -1, 0, 1095, 1382, 1, 0, 0, 0, 1096, 1097, 5, 174, 0, 0, 1097, 1098, 3, 42, 21, 0, 1098, 1099, 5, 35, 0, 0, 1099, 1100, 6, 25, -1, 0, 1100, 1382, 1, 0, 0, 0, 1101, 1102, 5, 175, 0, 0, 1102, 1103, 3, 42, 21, 0, 1103, 1104, 5, 35, 0, 0, 1104, 1105, 6, 25, -1, 0, 1105, 1382, 1, 0, 0, 0, 1106, 1107, 5, 176, 0, 0, 1107, 1108, 3, 42, 21, 0, 1108, 1109, 5, 35, 0, 0, 1109, 1110, 6, 25, -1, 0, 1110, 1382, 1, 0, 0, 0, 1111, 1112, 5, 177, 0, 0, 1112, 1113, 3, 42, 21, 0, 1113, 1114, 5, 35, 0, 0, 1114, 1115, 6, 25, -1, 0, 1115, 1382, 1, 0, 0, 0, 1116, 1117, 5, 178, 0, 0, 1117, 1118, 3, 42, 21, 0, 1118, 1119, 5, 35, 0, 0, 1119, 1120, 6, 25, -1, 0, 1120, 1382, 1, 0, 0, 0, 1121, 1122, 5, 179, 0, 0, 1122, 1123, 3, 42, 21, 0, 1123, 1124, 5, 35, 0, 0, 1124, 1125, 6, 25, -1, 0, 1125, 1382, 1, 0, 0, 0, 1126, 1127, 5, 180, 0, 0, 1127, 1128, 3, 42, 21, 0, 1128, 1129, 5, 35, 0, 0, 1129, 1130, 6, 25, -1, 0, 1130, 1382, 1, 0, 0, 0, 1131, 1132, 5, 181, 0, 0, 1132, 1133, 3, 42, 21, 0, 1133, 1134, 5, 35, 0, 0, 1134, 1135, 6, 25, -1, 0, 1135, 1382, 1, 0, 0, 0, 1136, 1137, 5, 182, 0, 0, 1137, 1138, 3, 42, 21, 0, 1138, 1139, 5, 35, 0, 0, 1139, 1140, 6, 25, -1, 0, 1140, 1382, 1, 0, 0, 0, 1141, 1142, 5, 183, 0, 0, 1142, 1143, 3, 42, 21, 0, 1143, 1144, 5, 35, 0, 0, 1144, 1145, 6, 25, -1, 0, 1145, 1382, 1, 0, 0, 0, 1146, 1147, 5, 184, 0, 0, 1147, 1148, 3, 42, 21, 0, 1148, 1149, 5, 35, 0, 0, 1149, 1150, 6, 25, -1, 0, 1150, 1382, 1, 0, 0, 0, 1151, 1152, 5, 185, 0, 0, 1152, 1153, 3, 42, 21, 0, 1153, 1154, 5, 35, 0, 0, 1154, 1155, 6, 25, -1, 0, 1155, 1382, 1, 0, 0, 0, 1156, 1157, 5, 186, 0, 0, 1157, 1158, 3, 42, 21, 0, 1158, 1159, 5, 35, 0, 0, 1159, 1160, 6, 25, -1, 0, 1160, 1382, 1, 0, 0, 0, 1161, 1162, 5, 187, 0, 0, 1162, 1163, 3, 42, 21, 0, 1163, 1164, 5, 35, 0, 0, 1164, 1165, 6, 25, -1, 0, 1165, 1382, 1, 0, 0, 0, 1166, 1167, 5, 188, 0, 0, 1167, 1168, 3, 42, 21, 0, 1168, 1169, 5, 35, 0, 0, 1169, 1170, 6, 25, -1, 0, 1170, 1382, 1, 0, 0, 0, 1171, 1172, 5, 189, 0, 0, 1172, 1173, 3, 42, 21, 0, 1173, 1174, 5, 35, 0, 0, 1174, 1175, 6, 25, -1, 0, 1175, 1382, 1, 0, 0, 0, 1176, 1177, 5, 190, 0, 0, 1177, 1178, 3, 42, 21, 0, 1178, 1179, 5, 35, 0, 0, 1179, 1180, 6, 25, -1, 0, 1180, 1382, 1, 0, 0, 0, 1181, 1182, 5, 191, 0, 0, 1182, 1183, 3, 42, 21, 0, 1183, 1184, 5, 35, 0, 0, 1184, 1185, 6, 25, -1, 0, 1185, 1382, 1, 0, 0, 0, 1186, 1187, 5, 192, 0, 0, 1187, 1188, 3, 42, 21, 0, 1188, 1189, 5, 35, 0, 0, 1189, 1190, 6, 25, -1, 0, 1190, 1382, 1, 0, 0, 0, 1191, 1192, 5, 193, 0, 0, 1192, 1193, 3, 42, 21, 0, 1193, 1194, 5, 35, 0, 0, 1194, 1195, 6, 25, -1, 0, 1195, 1382, 1, 0, 0, 0, 1196, 1197, 5, 194, 0, 0, 1197, 1198, 3, 42, 21, 0, 1198, 1199, 5, 35, 0, 0, 1199, 1200, 6, 25, -1, 0, 1200, 1382, 1, 0, 0, 0, 1201, 1202, 5, 195, 0, 0, 1202, 1203, 3, 42, 21, 0, 1203, 1204, 5, 35, 0, 0, 1204, 1205, 6, 25, -1, 0, 1205, 1382, 1, 0, 0, 0, 1206, 1207, 5, 196, 0, 0, 1207, 1208, 3, 42, 21, 0, 1208, 1209, 5, 35, 0, 0, 1209, 1210, 6, 25, -1, 0, 1210, 1382, 1, 0, 0, 0, 1211, 1212, 5, 197, 0, 0, 1212, 1213, 3, 42, 21, 0, 1213, 1214, 5, 35, 0, 0, 1214, 1215, 6, 25, -1, 0, 1215, 1382, 1, 0, 0, 0, 1216, 1217, 5, 198, 0, 0, 1217, 1218, 3, 42, 21, 0, 1218, 1219, 5, 35, 0, 0, 1219, 1220, 6, 25, -1, 0, 1220, 1382, 1, 0, 0, 0, 1221, 1222, 5, 199, 0, 0, 1222, 1223, 3, 42, 21, 0, 1223, 1224, 5, 35, 0, 0, 1224, 1225, 6, 25, -1, 0, 1225, 1382, 1, 0, 0, 0, 1226, 1227, 5, 200, 0, 0, 1227, 1228, 3, 42, 21, 0, 1228, 1229, 5, 35, 0, 0, 1229, 1230, 6, 25, -1, 0, 1230, 1382, 1, 0, 0, 0, 1231, 1232, 5, 201, 0, 0, 1232, 1233, 3, 42, 21, 0, 1233, 1234, 5, 35, 0, 0, 1234, 1235, 6, 25, -1, 0, 1235, 1382, 1, 0, 0, 0, 1236, 1237, 5, 202, 0, 0, 1237, 1238, 3, 42, 21, 0, 1238, 1239, 5, 35, 0, 0, 1239, 1240, 6, 25, -1, 0, 1240, 1382, 1, 0, 0, 0, 1241, 1242, 5, 203, 0, 0, 1242, 1243, 3, 42, 21, 0, 1243, 1244, 5, 35, 0, 0, 1244, 1245, 6, 25, -1, 0, 1245, 1382, 1, 0, 0, 0, 1246, 1247, 5, 204, 0, 0, 1247, 1248, 3, 42, 21, 0, 1248, 1249, 5, 35, 0, 0, 1249, 1250, 6, 25, -1, 0, 1250, 1382, 1, 0, 0, 0, 1251, 1252, 5, 205, 0, 0, 1252, 1253, 3, 42, 21, 0, 1253, 1254, 5, 35, 0, 0, 1254, 1255, 6, 25, -1, 0, 1255, 1382, 1, 0, 0, 0, 1256, 1257, 5, 206, 0, 0, 1257, 1258, 3, 42, 21, 0, 1258, 1259, 5, 35, 0, 0, 1259, 1260, 6, 25, -1, 0, 1260, 1382, 1, 0, 0, 0, 1261, 1262, 5, 207, 0, 0, 1262, 1263, 3, 42, 21, 0, 1263, 1264, 5, 35, 0, 0, 1264, 1265, 6, 25, -1, 0, 1265, 1382, 1, 0, 0, 0, 1266, 1267, 5, 208, 0, 0, 1267, 1268, 3, 42, 21, 0, 1268, 1269, 5, 35, 0, 0, 1269, 1270, 6, 25, -1, 0, 1270, 1382, 1, 0, 0, 0, 1271, 1272, 5, 209, 0, 0, 1272, 1273, 3, 42, 21, 0, 1273, 1274, 5, 35, 0, 0, 1274, 1275, 6, 25, -1, 0, 1275, 1382, 1, 0, 0, 0, 1276, 1277, 5, 210, 0, 0, 1277, 1278, 3, 42, 21, 0, 1278, 1279, 5, 35, 0, 0, 1279, 1280, 6, 25, -1, 0, 1280, 1382, 1, 0, 0, 0, 1281, 1282, 5, 211, 0, 0, 1282, 1283, 3, 42, 21, 0, 1283, 1284, 5, 35, 0, 0, 1284, 1285, 6, 25, -1, 0, 1285, 1382, 1, 0, 0, 0, 1286, 1287, 5, 212, 0, 0, 1287, 1288, 3, 42, 21, 0, 1288, 1289, 5, 35, 0, 0, 1289, 1290, 6, 25, -1, 0, 1290, 1382, 1, 0, 0, 0, 1291, 1292, 5, 213, 0, 0, 1292, 1293, 3, 42, 21, 0, 1293, 1294, 5, 35, 0, 0, 1294, 1295, 6, 25, -1, 0, 1295, 1382, 1, 0, 0, 0, 1296, 1297, 5, 214, 0, 0, 1297, 1298, 3, 42, 21, 0, 1298, 1299, 5, 35, 0, 0, 1299, 1300, 6, 25, -1, 0, 1300, 1382, 1, 0, 0, 0, 1301, 1302, 5, 215, 0, 0, 1302, 1303, 3, 42, 21, 0, 1303, 1304, 5, 35, 0, 0, 1304, 1305, 6, 25, -1, 0, 1305, 1382, 1, 0, 0, 0, 1306, 1307, 5, 216, 0, 0, 1307, 1308, 3, 42, 21, 0, 1308, 1309, 5, 35, 0, 0, 1309, 1310, 6, 25, -1, 0, 1310, 1382, 1, 0, 0, 0, 1311, 1312, 5, 217, 0, 0, 1312, 1313, 3, 42, 21, 0, 1313, 1314, 5, 35, 0, 0, 1314, 1315, 6, 25, -1, 0, 1315, 1382, 1, 0, 0, 0, 1316, 1317, 5, 218, 0, 0, 1317, 1318, 3, 42, 21, 0, 1318, 1319, 5, 35, 0, 0, 1319, 1320, 6, 25, -1, 0, 1320, 1382, 1, 0, 0, 0, 1321, 1322, 5, 219, 0, 0, 1322, 1323, 3, 42, 21, 0, 1323, 1324, 5, 35, 0, 0, 1324, 1325, 6, 25, -1, 0, 1325, 1382, 1, 0, 0, 0, 1326, 1327, 5, 220, 0, 0, 1327, 1328, 3, 42, 21, 0, 1328, 1329, 5, 35, 0, 0, 1329, 1330, 6, 25, -1, 0, 1330, 1382, 1, 0, 0, 0, 1331, 1332, 5, 221, 0, 0, 1332, 1333, 3, 42, 21, 0, 1333, 1334, 5, 35, 0, 0, 1334, 1335, 6, 25, -1, 0, 1335, 1382, 1, 0, 0, 0, 1336, 1337, 5, 222, 0, 0, 1337, 1338, 3, 42, 21, 0, 1338, 1339, 5, 35, 0, 0, 1339, 1340, 6, 25, -1, 0, 1340, 1382, 1, 0, 0, 0, 1341, 1342, 5, 223, 0, 0, 1342, 1343, 3, 42, 21, 0, 1343, 1344, 5, 35, 0, 0, 1344, 1345, 6, 25, -1, 0, 1345, 1382, 1, 0, 0, 0, 1346, 1347, 5, 224, 0, 0, 1347, 1348, 3, 42, 21, 0, 1348, 1349, 5, 35, 0, 0, 1349, 1350, 6, 25, -1, 0, 1350, 1382, 1, 0, 0, 0, 1351, 1352, 5, 225, 0, 0, 1352, 1353, 3, 42, 21, 0, 1353, 1354, 5, 35, 0, 0, 1354, 1355, 6, 25, -1, 0, 1355, 1382, 1, 0, 0, 0, 1356, 1357, 5, 226, 0, 0, 1357, 1358, 3, 42, 21, 0, 1358, 1359, 5, 35, 0, 0, 1359, 1360, 6, 25, -1, 0, 1360, 1382, 1, 0, 0, 0, 1361, 1362, 5, 227, 0, 0, 1362, 1363, 3, 42, 21, 0, 1363, 1364, 5, 35, 0, 0, 1364, 1365, 6, 25, -1, 0, 1365, 1382, 1, 0, 0, 0, 1366, 1367, 5, 228, 0, 0, 1367, 1368, 3, 42, 21, 0, 1368, 1369, 5, 35, 0, 0, 1369, 1370, 6, 25, -1, 0, 1370, 1382, 1, 0, 0, 0, 1371, 1372, 5, 229, 0, 0, 1372, 1373, 3, 42, 21, 0, 1373, 1374, 5, 35, 0, 0, 1374, 1375, 6, 25, -1, 0, 1375, 1382, 1, 0, 0, 0, 1376, 1377, 5, 230, 0, 0, 1377, 1378, 3, 42, 21, 0, 1378, 1379, 5, 35, 0, 0, 1379, 1380, 6, 25, -1, 0, 1380, 1382, 1, 0, 0, 0, 1381, 468, 1, 0, 0, 0, 1381, 470, 1, 0, 0, 0, 1381, 472, 1, 0, 0, 0, 1381, 474, 1, 0, 0, 0, 1381, 476, 1, 0, 0, 0, 1381, 478, 1, 0, 0, 0, 1381, 480, 1, 0, 0, 0, 1381, 482, 1, 0, 0, 0, 1381, 487, 1, 0, 0, 0, 1381, 491, 1, 0, 0, 0, 1381, 496, 1, 0, 0, 0, 1381, 501, 1, 0, 0, 0, 1381, 506, 1, 0, 0, 0, 1381, 511, 1, 0, 0, 0, 1381, 516, 1, 0, 0, 0, 1381, 521, 1, 0, 0, 0, 1381, 526, 1, 0, 0, 0, 1381, 531, 1, 0, 0, 0, 1381, 536, 1, 0, 0, 0, 1381, 541, 1, 0, 0, 0, 1381, 546, 1, 0, 0, 0, 1381, 551, 1, 0, 0, 0, 1381, 556, 1, 0, 0, 0, 1381, 561, 1, 0, 0, 0, 1381, 566, 1, 0, 0, 0, 1381, 571, 1, 0, 0, 0, 1381, 576, 1, 0, 0, 0, 1381, 581, 1, 0, 0, 0, 1381, 586, 1, 0, 0, 0, 1381, 591, 1, 0, 0, 0, 1381, 596, 1, 0, 0, 0, 1381, 601, 1, 0, 0, 0, 1381, 606, 1, 0, 0, 0, 1381, 611, 1, 0, 0, 0, 1381, 616, 1, 0, 0, 0, 1381, 621, 1, 0, 0, 0, 1381, 626, 1, 0, 0, 0, 1381, 631, 1, 0, 0, 0, 1381, 636, 1, 0, 0, 0, 1381, 641, 1, 0, 0, 0, 1381, 646, 1, 0, 0, 0, 1381, 651, 1, 0, 0, 0, 1381, 656, 1, 0, 0, 0, 1381, 661, 1, 0, 0, 0, 1381, 666, 1, 0, 0, 0, 1381, 671, 1, 0, 0, 0, 1381, 676, 1, 0, 0, 0, 1381, 681, 1, 0, 0, 0, 1381, 686, 1, 0, 0, 0, 1381, 691, 1, 0, 0, 0, 1381, 696, 1, 0, 0, 0, 1381, 701, 1, 0, 0, 0, 1381, 706, 1, 0, 0, 0, 1381, 711, 1, 0, 0, 0, 1381, 716, 1, 0, 0, 0, 1381, 721, 1, 0, 0, 0, 1381, 726, 1, 0, 0, 0, 1381, 731, 1, 0, 0, 0, 1381, 736, 1, 0, 0, 0, 1381, 741, 1, 0, 0, 0, 1381, 746, 1, 0, 0, 0, 1381, 751, 1, 0, 0, 0, 1381, 756, 1, 0, 0, 0, 1381, 761, 1, 0, 0, 0, 1381, 766, 1, 0, 0, 0, 1381, 771, 1, 0, 0, 0, 1381, 776, 1, 0, 0, 0, 1381, 781, 1, 0, 0, 0, 1381, 786, 1, 0, 0, 0, 1381, 791, 1, 0, 0, 0, 1381, 796, 1, 0, 0, 0, 1381, 801, 1, 0, 0, 0, 1381, 806, 1, 0, 0, 0, 1381, 811, 1, 0, 0, 0, 1381, 816, 1, 0, 0, 0, 1381, 821, 1, 0, 0, 0, 1381, 826, 1, 0, 0, 0, 1381, 831, 1, 0, 0, 0, 1381, 836, 1, 0, 0, 0, 1381, 841, 1, 0, 0, 0, 1381, 846, 1, 0, 0, 0, 1381, 851, 1, 0, 0, 0, 1381, 856, 1, 0, 0, 0, 1381, 861, 1, 0, 0, 0, 1381, 866, 1, 0, 0, 0, 1381, 871, 1, 0, 0, 0, 1381, 876, 1, 0, 0, 0, 1381, 881, 1, 0, 0, 0, 1381, 886, 1, 0, 0, 0, 1381, 891, 1, 0, 0, 0, 1381, 896, 1, 0, 0, 0, 1381, 901, 1, 0, 0, 0, 1381, 906, 1, 0, 0, 0, 1381, 911, 1, 0, 0, 0, 1381, 916, 1, 0, 0, 0, 1381, 921, 1, 0, 0, 0, 1381, 926, 1, 0, 0, 0, 1381, 931, 1, 0, 0, 0, 1381, 936, 1, 0, 0, 0, 1381, 941, 1, 0, 0, 0, 1381, 946, 1, 0, 0, 0, 1381, 951, 1, 0, 0, 0, 1381, 956, 1, 0, 0, 0, 1381, 961, 1, 0, 0, 0, 1381, 966, 1, 0, 0, 0, 1381, 971, 1, 0, 0, 0, 1381, 976, 1, 0, 0, 0, 1381, 981, 1, 0, 0, 0, 1381, 986, 1, 0, 0, 0, 1381, 991, 1, 0, 0, 0, 1381, 996, 1, 0, 0, 0, 1381, 1001, 1, 0, 0, 0, 1381, 1006, 1, 0, 0, 0, 1381, 1011, 1, 0, 0, 0, 1381, 1016, 1, 0, 0, 0, 1381, 1021, 1, 0, 0, 0, 1381, 1026, 1, 0, 0, 0, 1381, 1031, 1, 0, 0, 0, 1381, 1036, 1, 0, 0, 0, 1381, 1041, 1, 0, 0, 0, 1381, 1046, 1, 0, 0, 0, 1381, 1051, 1, 0, 0, 0, 1381, 1056, 1, 0, 0, 0, 1381, 1061, 1, 0, 0, 0, 1381, 1066, 1, 0, 0, 0, 1381, 1071, 1, 0, 0, 0, 1381, 1076, 1, 0, 0, 0, 1381, 1081, 1, 0, 0, 0, 1381, 1086, 1, 0, 0, 0, 1381, 1091, 1, 0, 0, 0, 1381, 1096, 1, 0, 0, 0, 1381, 1101, 1, 0, 0, 0, 1381, 1106, 1, 0, 0, 0, 1381, 1111, 1, 0, 0, 0, 1381, 1116, 1, 0, 0, 0, 1381, 1121, 1, 0, 0, 0, 1381, 1126, 1, 0, 0, 0, 1381, 1131, 1, 0, 0, 0, 1381, 1136, 1, 0, 0, 0, 1381, 1141, 1, 0, 0, 0, 1381, 1146, 1, 0, 0, 0, 1381, 1151, 1, 0, 0, 0, 1381, 1156, 1, 0, 0, 0, 1381, 1161, 1, 0, 0, 0, 1381, 1166, 1, 0, 0, 0, 1381, 1171, 1, 0, 0, 0, 1381, 1176, 1, 0, 0, 0, 1381, 1181, 1, 0, 0, 0, 1381, 1186, 1, 0, 0, 0, 1381, 1191, 1, 0, 0, 0, 1381, 1196, 1, 0, 0, 0, 1381, 1201, 1, 0, 0, 0, 1381, 1206, 1, 0, 0, 0, 1381, 1211, 1, 0, 0, 0, 1381, 1216, 1, 0, 0, 0, 1381, 1221, 1, 0, 0, 0, 1381, 1226, 1, 0, 0, 0, 1381, 1231, 1, 0, 0, 0, 1381, 1236, 1, 0, 0, 0, 1381, 1241, 1, 0, 0, 0, 1381, 1246, 1, 0, 0, 0, 1381, 1251, 1, 0, 0, 0, 1381, 1256, 1, 0, 0, 0, 1381, 1261, 1, 0, 0, 0, 1381, 1266, 1, 0, 0, 0, 1381, 1271, 1, 0, 0, 0, 1381, 1276, 1, 0, 0, 0, 1381, 1281, 1, 0, 0, 0, 1381, 1286, 1, 0, 0, 0, 1381, 1291, 1, 0, 0, 0, 1381, 1296, 1, 0, 0, 0, 1381, 1301, 1, 0, 0, 0, 1381, 1306, 1, 0, 0, 0, 1381, 1311, 1, 0, 0, 0, 1381, 1316, 1, 0, 0, 0, 1381, 1321, 1, 0, 0, 0, 1381, 1326, 1, 0, 0, 0, 1381, 1331, 1, 0, 0, 0, 1381, 1336, 1, 0, 0, 0, 1381, 1341, 1, 0, 0, 0, 1381, 1346, 1, 0, 0, 0, 1381, 1351, 1, 0, 0, 0, 1381, 1356, 1, 0, 0, 0, 1381, 1361, 1, 0, 0, 0, 1381, 1366, 1, 0, 0, 0, 1381, 1371, 1, 0, 0, 0, 1381, 1376, 1, 0, 0, 0, 1382, 51, 1, 0, 0, 0, 1383, 1384, 3, 34, 17, 0, 1384, 1385, 5, 0, 0, 1, 1385, 1386, 6, 26, -1, 0, 1386, 53, 1, 0, 0, 0, 45, 63, 81, 89, 97, 99, 106, 116, 126, 131, 141, 151, 153, 166, 172, 174, 189, 191, 212, 214, 247, 249, 268, 275, 284, 303, 319, 321, 334, 336, 349, 351, 368, 370, 379, 387, 392, 406, 416, 429, 432, 439, 447, 451, 454, 1381]
\ No newline at end of file
diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens b/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens
index 33677c693..f4164b9d4 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMath.tokens
@@ -227,73 +227,74 @@ T__225=226
T__226=227
T__227=228
T__228=229
-NEWLINE=230
-NUMBER=231
-SPECIALSET=232
-BOOLEAN=233
-NAN=234
-VARIABLE=235
-COMMENT=236
-WS=237
-'!'=1
-'!!'=2
-'!!!'=3
-'^'=4
-'-'=5
-'+'=6
-'*'=7
-'...'=8
-'…'=9
-'/'=10
-'mod'=11
-'intersect'=12
-'/\\'=13
-'unite'=14
-'\\/'=15
-'setsubtract'=16
-'\\'=17
-'in'=18
-'subset'=19
-'⊆'=20
-'superset'=21
-'⊇'=22
-'divides'=23
-'|'=24
-'>='=25
-'<='=26
-'>'=27
-'<'=28
-'='=29
-'<>'=30
-'≡'=31
-'('=32
-')'=33
-'not'=34
-'and'=35
-'&'=36
-'xor'=37
-'or'=38
-'implies'=39
-'->'=40
-'provided'=41
-'=>'=42
-':'=43
-'forall'=44
-'∀'=45
-'exists!'=46
-'∃!'=47
-'exists'=48
-'∃'=49
-','=50
-';'=51
-'+oo'=52
-'-oo'=53
-'(|'=54
-'|)'=55
-'#'=56
-'['=57
-']T'=58
-']'=59
+T__229=230
+NEWLINE=231
+NUMBER=232
+SPECIALSET=233
+BOOLEAN=234
+NAN=235
+VARIABLE=236
+COMMENT=237
+WS=238
+'['=1
+']'=2
+'!'=3
+'!!'=4
+'!!!'=5
+'^'=6
+'-'=7
+'+'=8
+'*'=9
+'...'=10
+'…'=11
+'/'=12
+'mod'=13
+'intersect'=14
+'/\\'=15
+'unite'=16
+'\\/'=17
+'setsubtract'=18
+'\\'=19
+'in'=20
+'subset'=21
+'⊆'=22
+'superset'=23
+'⊇'=24
+'divides'=25
+'|'=26
+'>='=27
+'<='=28
+'>'=29
+'<'=30
+'='=31
+'<>'=32
+'≡'=33
+'('=34
+')'=35
+'not'=36
+'and'=37
+'&'=38
+'xor'=39
+'or'=40
+'implies'=41
+'->'=42
+'provided'=43
+'=>'=44
+':'=45
+'forall'=46
+'∀'=47
+'exists!'=48
+'∃!'=49
+'exists'=50
+'∃'=51
+','=52
+';'=53
+'+oo'=54
+'-oo'=55
+'(|'=56
+'|)'=57
+'#'=58
+']T'=59
'{'=60
'}'=61
'log('=62
@@ -432,36 +433,37 @@ WS=237
'Chi('=195
'det('=196
'transpose('=197
-'dot('=198
-'cross('=199
-'laplacian('=200
-'forwarddifference('=201
-'jacobian('=202
-'hessian('=203
-'resultant('=204
-'conjugate('=205
-'conj('=206
-'arg('=207
-'Re('=208
-'Im('=209
-'re('=210
-'real('=211
-'im('=212
-'imag('=213
-'trunc('=214
-'zeta('=215
-'riemannzeta('=216
-'hurwitzzeta('=217
-'heaviside('=218
-'unitstep('=219
-'isprime('=220
-'pochhammer('=221
-'doublefactorial('=222
-'factorial2('=223
-'fractionalpart('=224
-'quotient('=225
-'domain('=226
-'piecewise('=227
-'apply('=228
-'lambda('=229
-'NaN'=234
+'trace('=198
+'dot('=199
+'cross('=200
+'laplacian('=201
+'forwarddifference('=202
+'jacobian('=203
+'hessian('=204
+'resultant('=205
+'conjugate('=206
+'conj('=207
+'arg('=208
+'Re('=209
+'Im('=210
+'re('=211
+'real('=212
+'im('=213
+'imag('=214
+'trunc('=215
+'zeta('=216
+'riemannzeta('=217
+'hurwitzzeta('=218
+'heaviside('=219
+'unitstep('=220
+'isprime('=221
+'pochhammer('=222
+'doublefactorial('=223
+'factorial2('=224
+'fractionalpart('=225
+'quotient('=226
+'domain('=227
+'piecewise('=228
+'apply('=229
+'lambda('=230
+'NaN'=235
diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMathBaseListener.cs b/Sources/AngouriMath/Core/Antlr/AngouriMathBaseListener.cs
index 2592db96a..ba1545710 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMathBaseListener.cs
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMathBaseListener.cs
@@ -36,6 +36,18 @@ namespace AngouriMath.Core.Antlr {
[System.Diagnostics.DebuggerNonUserCode]
[System.CLSCompliant(false)]
internal partial class AngouriMathBaseListener : IAngouriMathListener {
+ ///
+ /// Enter a parse tree produced by .
+ /// The default implementation does nothing.
+ ///
+ /// The parse tree.
+ public virtual void EnterIndexed_atom([NotNull] AngouriMathParser.Indexed_atomContext context) { }
+ ///
+ /// Exit a parse tree produced by .
+ /// The default implementation does nothing.
+ ///
+ /// The parse tree.
+ public virtual void ExitIndexed_atom([NotNull] AngouriMathParser.Indexed_atomContext context) { }
///
/// Enter a parse tree produced by .
/// The default implementation does nothing.
diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs
index e64b4d4fd..d435c9f39 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.cs
@@ -69,8 +69,8 @@ public const int
T__209=210, T__210=211, T__211=212, T__212=213, T__213=214, T__214=215,
T__215=216, T__216=217, T__217=218, T__218=219, T__219=220, T__220=221,
T__221=222, T__222=223, T__223=224, T__224=225, T__225=226, T__226=227,
- T__227=228, T__228=229, NEWLINE=230, NUMBER=231, SPECIALSET=232, BOOLEAN=233,
- NAN=234, VARIABLE=235, COMMENT=236, WS=237;
+ T__227=228, T__228=229, T__229=230, NEWLINE=231, NUMBER=232, SPECIALSET=233,
+ BOOLEAN=234, NAN=235, VARIABLE=236, COMMENT=237, WS=238;
public static string[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
@@ -110,8 +110,9 @@ public const int
"T__203", "T__204", "T__205", "T__206", "T__207", "T__208", "T__209",
"T__210", "T__211", "T__212", "T__213", "T__214", "T__215", "T__216",
"T__217", "T__218", "T__219", "T__220", "T__221", "T__222", "T__223",
- "T__224", "T__225", "T__226", "T__227", "T__228", "NEWLINE", "EXPONENT",
- "NUMBER", "SPECIALSET", "BOOLEAN", "NAN", "VARIABLE", "COMMENT", "WS"
+ "T__224", "T__225", "T__226", "T__227", "T__228", "T__229", "NEWLINE",
+ "EXPONENT", "NUMBER", "SPECIALSET", "BOOLEAN", "NAN", "VARIABLE", "COMMENT",
+ "WS"
};
@@ -132,25 +133,25 @@ public AngouriMathLexer(ICharStream input, TextWriter output, TextWriter errorOu
}
private static readonly string[] _LiteralNames = {
- null, "'!'", "'!!'", "'!!!'", "'^'", "'-'", "'+'", "'*'", "'...'", "'\\u2026'",
- "'/'", "'mod'", "'intersect'", "'/\\'", "'unite'", "'\\/'", "'setsubtract'",
- "'\\'", "'in'", "'subset'", "'\\u2286'", "'superset'", "'\\u2287'", "'divides'",
- "'|'", "'>='", "'<='", "'>'", "'<'", "'='", "'<>'", "'\\u2261'", "'('",
- "')'", "'not'", "'and'", "'&'", "'xor'", "'or'", "'implies'", "'->'",
- "'provided'", "'=>'", "':'", "'forall'", "'\\u2200'", "'exists!'", "'\\u2203!'",
- "'exists'", "'\\u2203'", "','", "';'", "'+oo'", "'-oo'", "'(|'", "'|)'",
- "'#'", "'['", "']T'", "']'", "'{'", "'}'", "'log('", "'log10('", "'log2('",
- "'pow('", "'sqrt('", "'cbrt('", "'sqr('", "'ln('", "'exp('", "'sin('",
- "'cos('", "'tan('", "'cotan('", "'cot('", "'sec('", "'cosec('", "'csc('",
- "'arcsin('", "'arccos('", "'arctan('", "'arccotan('", "'arcsec('", "'arccosec('",
- "'arccsc('", "'acsc('", "'asin('", "'acos('", "'atan('", "'acotan('",
- "'asec('", "'acosec('", "'acot('", "'arccot('", "'sinh('", "'sh('", "'cosh('",
- "'ch('", "'tanh('", "'th('", "'cotanh('", "'coth('", "'cth('", "'sech('",
- "'sch('", "'cosech('", "'csch('", "'asinh('", "'arsinh('", "'arsh('",
- "'arcsinh('", "'acosh('", "'arcosh('", "'arch('", "'arccosh('", "'atanh('",
- "'artanh('", "'arth('", "'arctanh('", "'acoth('", "'arcoth('", "'acotanh('",
- "'arcotanh('", "'arcth('", "'arccotanh('", "'asech('", "'arsech('", "'arsch('",
- "'arcsech('", "'acosech('", "'arcosech('", "'arcsch('", "'arccosech('",
+ null, "'['", "']'", "'!'", "'!!'", "'!!!'", "'^'", "'-'", "'+'", "'*'",
+ "'...'", "'\\u2026'", "'/'", "'mod'", "'intersect'", "'/\\'", "'unite'",
+ "'\\/'", "'setsubtract'", "'\\'", "'in'", "'subset'", "'\\u2286'", "'superset'",
+ "'\\u2287'", "'divides'", "'|'", "'>='", "'<='", "'>'", "'<'", "'='",
+ "'<>'", "'\\u2261'", "'('", "')'", "'not'", "'and'", "'&'", "'xor'", "'or'",
+ "'implies'", "'->'", "'provided'", "'=>'", "':'", "'forall'", "'\\u2200'",
+ "'exists!'", "'\\u2203!'", "'exists'", "'\\u2203'", "','", "';'", "'+oo'",
+ "'-oo'", "'(|'", "'|)'", "'#'", "']T'", "'{'", "'}'", "'log('", "'log10('",
+ "'log2('", "'pow('", "'sqrt('", "'cbrt('", "'sqr('", "'ln('", "'exp('",
+ "'sin('", "'cos('", "'tan('", "'cotan('", "'cot('", "'sec('", "'cosec('",
+ "'csc('", "'arcsin('", "'arccos('", "'arctan('", "'arccotan('", "'arcsec('",
+ "'arccosec('", "'arccsc('", "'acsc('", "'asin('", "'acos('", "'atan('",
+ "'acotan('", "'asec('", "'acosec('", "'acot('", "'arccot('", "'sinh('",
+ "'sh('", "'cosh('", "'ch('", "'tanh('", "'th('", "'cotanh('", "'coth('",
+ "'cth('", "'sech('", "'sch('", "'cosech('", "'csch('", "'asinh('", "'arsinh('",
+ "'arsh('", "'arcsinh('", "'acosh('", "'arcosh('", "'arch('", "'arccosh('",
+ "'atanh('", "'artanh('", "'arth('", "'arctanh('", "'acoth('", "'arcoth('",
+ "'acotanh('", "'arcotanh('", "'arcth('", "'arccotanh('", "'asech('", "'arsech('",
+ "'arsch('", "'arcsech('", "'acosech('", "'arcosech('", "'arcsch('", "'arccosech('",
"'acsch('", "'factorial('", "'gamma('", "'derivative('", "'integral('",
"'limit('", "'limitleft('", "'limitright('", "'sum('", "'product('", "'signum('",
"'sgn('", "'sign('", "'abs('", "'phi('", "'prime('", "'valuation('", "'mobius('",
@@ -162,7 +163,7 @@ public AngouriMathLexer(ICharStream input, TextWriter output, TextWriter errorOu
"'factorialpower('", "'risingfactorial('", "'iverson('", "'aleph('", "'erf('",
"'erfc('", "'erfi('", "'Ei('", "'li('", "'lambertw('", "'productlog('",
"'polygamma('", "'digamma('", "'Si('", "'Ci('", "'Shi('", "'Chi('", "'det('",
- "'transpose('", "'dot('", "'cross('", "'laplacian('", "'forwarddifference('",
+ "'transpose('", "'trace('", "'dot('", "'cross('", "'laplacian('", "'forwarddifference('",
"'jacobian('", "'hessian('", "'resultant('", "'conjugate('", "'conj('",
"'arg('", "'Re('", "'Im('", "'re('", "'real('", "'im('", "'imag('", "'trunc('",
"'zeta('", "'riemannzeta('", "'hurwitzzeta('", "'heaviside('", "'unitstep('",
@@ -190,8 +191,8 @@ public AngouriMathLexer(ICharStream input, TextWriter output, TextWriter errorOu
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, "NEWLINE", "NUMBER", "SPECIALSET", "BOOLEAN", "NAN", "VARIABLE",
- "COMMENT", "WS"
+ null, null, null, "NEWLINE", "NUMBER", "SPECIALSET", "BOOLEAN", "NAN",
+ "VARIABLE", "COMMENT", "WS"
};
public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames);
@@ -221,7 +222,7 @@ static AngouriMathLexer() {
}
}
private static int[] _serializedATN = {
- 4,0,237,2193,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,238,2202,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,
@@ -258,733 +259,736 @@ static AngouriMathLexer() {
7,218,2,219,7,219,2,220,7,220,2,221,7,221,2,222,7,222,2,223,7,223,2,224,
7,224,2,225,7,225,2,226,7,226,2,227,7,227,2,228,7,228,2,229,7,229,2,230,
7,230,2,231,7,231,2,232,7,232,2,233,7,233,2,234,7,234,2,235,7,235,2,236,
- 7,236,2,237,7,237,1,0,1,0,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,3,1,3,1,4,1,4,
- 1,5,1,5,1,6,1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,9,1,9,1,10,1,10,1,10,1,10,1,
- 11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,13,1,
- 13,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,
- 15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,17,1,17,1,17,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,
- 20,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,23,1,23,1,24,1,
- 24,1,24,1,25,1,25,1,25,1,26,1,26,1,27,1,27,1,28,1,28,1,29,1,29,1,29,1,
- 30,1,30,1,31,1,31,1,32,1,32,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,
- 35,1,35,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,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,
- 40,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,44,1,
- 44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,47,1,47,1,
- 47,1,47,1,47,1,47,1,47,1,48,1,48,1,49,1,49,1,50,1,50,1,51,1,51,1,51,1,
- 51,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,54,1,54,1,54,1,55,1,55,1,56,1,
- 56,1,57,1,57,1,57,1,58,1,58,1,59,1,59,1,60,1,60,1,61,1,61,1,61,1,61,1,
- 61,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,
- 64,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,
- 66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,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,72,1,
- 72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,
- 74,1,74,1,75,1,75,1,75,1,75,1,75,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,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,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,83,1,83,1,83,1,
- 83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,
- 85,1,86,1,86,1,86,1,86,1,86,1,86,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,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,99,1,99,1,99,1,
- 99,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,101,1,101,1,101,1,
- 101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103,1,103,
- 1,103,1,103,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105,1,105,1,105,
- 1,105,1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,106,1,107,1,107,1,107,
- 1,107,1,107,1,107,1,107,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,
- 1,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,110,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,112,1,112,
- 1,112,1,112,1,112,1,112,1,112,1,112,1,113,1,113,1,113,1,113,1,113,1,113,
- 1,114,1,114,1,114,1,114,1,114,1,114,1,114,1,114,1,114,1,115,1,115,1,115,
- 1,115,1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,
- 1,117,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118,1,118,1,118,
- 1,118,1,118,1,118,1,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,121,1,121,1,121,1,121,1,121,1,121,
- 1,121,1,121,1,121,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,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,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,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,129,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,131,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,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,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,138,1,138,1,138,1,138,1,138,1,138,1,138,1,139,1,139,
- 1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,140,1,140,1,140,
- 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,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,143,
- 1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,144,1,144,1,144,1,144,1,144,
- 1,145,1,145,1,145,1,145,1,145,1,145,1,146,1,146,1,146,1,146,1,146,1,147,
- 1,147,1,147,1,147,1,147,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,149,
- 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,150,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,152,1,152,1,153,1,153,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,154,1,154,1,155,1,155,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,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,159,1,159,1,159,1,159,1,159,1,159,1,159,
- 1,159,1,159,1,160,1,160,1,160,1,160,1,160,1,160,1,160,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,162,1,162,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,163,1,163,1,164,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,166,1,166,1,166,1,166,1,166,1,166,1,166,
- 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,169,1,169,1,170,1,170,1,170,1,170,1,170,1,170,
- 1,170,1,170,1,171,1,171,1,171,1,171,1,171,1,172,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,174,1,174,
- 1,174,1,174,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,175,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,175,
- 1,175,1,175,1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,176,
- 1,176,1,176,1,176,1,176,1,176,1,176,1,177,1,177,1,177,1,177,1,177,1,177,
+ 7,236,2,237,7,237,2,238,7,238,1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,3,1,4,
+ 1,4,1,4,1,4,1,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1,9,1,9,1,9,1,9,1,10,1,10,
+ 1,11,1,11,1,12,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,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,
+ 1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,
+ 1,19,1,19,1,19,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,22,1,22,1,22,1,22,1,22,1,22,1,23,1,23,1,24,1,24,1,24,1,24,1,24,
+ 1,24,1,24,1,24,1,25,1,25,1,26,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,32,1,32,1,33,1,33,1,34,1,34,1,35,1,35,
+ 1,35,1,35,1,36,1,36,1,36,1,36,1,37,1,37,1,38,1,38,1,38,1,38,1,39,1,39,
+ 1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,42,1,42,
+ 1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,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,47,1,47,1,47,1,47,1,47,
+ 1,47,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,51,
+ 1,51,1,52,1,52,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,55,1,55,1,55,
+ 1,56,1,56,1,56,1,57,1,57,1,58,1,58,1,58,1,59,1,59,1,60,1,60,1,61,1,61,
+ 1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,
+ 1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,66,
+ 1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,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,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,
+ 1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,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,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,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,83,
+ 1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,
+ 1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,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,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,99,
+ 1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,101,1,
+ 101,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,1,103,1,103,
+ 1,103,1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105,
+ 1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,106,1,107,
+ 1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,108,1,108,1,108,1,108,
+ 1,108,1,108,1,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,110,1,111,1,111,1,111,1,111,1,111,1,111,1,111,
+ 1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,113,1,113,1,113,1,113,
+ 1,113,1,113,1,114,1,114,1,114,1,114,1,114,1,114,1,114,1,114,1,114,1,115,
+ 1,115,1,115,1,115,1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,116,1,116,
+ 1,116,1,116,1,117,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118,
+ 1,118,1,118,1,118,1,118,1,118,1,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,121,1,121,1,121,1,121,
+ 1,121,1,121,1,121,1,121,1,121,1,122,1,122,1,122,1,122,1,122,1,122,1,122,
+ 1,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,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,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,129,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,131,
+ 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,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,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,138,1,138,1,138,1,138,1,138,1,138,1,138,
+ 1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,140,
+ 1,140,1,140,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,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,
+ 1,142,1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,144,1,144,1,144,
+ 1,144,1,144,1,145,1,145,1,145,1,145,1,145,1,145,1,146,1,146,1,146,1,146,
+ 1,146,1,147,1,147,1,147,1,147,1,147,1,148,1,148,1,148,1,148,1,148,1,148,
+ 1,148,1,149,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,150,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,152,1,152,1,153,1,153,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,154,1,154,1,155,1,155,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,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,159,1,159,1,159,1,159,1,159,
+ 1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,160,1,160,1,160,1,160,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,162,
+ 1,162,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,163,1,163,1,164,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,166,1,166,1,166,1,166,1,166,
+ 1,166,1,166,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,169,1,169,1,170,1,170,1,170,1,170,
+ 1,170,1,170,1,170,1,170,1,171,1,171,1,171,1,171,1,171,1,172,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,174,1,174,1,174,1,174,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,175,1,175,1,175,1,175,1,175,1,175,1,175,
+ 1,175,1,175,1,175,1,175,1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,176,
+ 1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,177,1,177,1,177,1,177,
1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,
- 1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,
- 1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,
- 1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,180,1,180,1,180,
- 1,180,1,180,1,180,1,180,1,180,1,180,1,181,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,183,
- 1,184,1,184,1,184,1,184,1,184,1,184,1,185,1,185,1,185,1,185,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,187,1,187,
- 1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,
- 1,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,190,1,190,1,191,1,191,1,191,1,191,
- 1,192,1,192,1,192,1,192,1,193,1,193,1,193,1,193,1,193,1,194,1,194,1,194,
- 1,194,1,194,1,195,1,195,1,195,1,195,1,195,1,196,1,196,1,196,1,196,1,196,
- 1,196,1,196,1,196,1,196,1,196,1,196,1,197,1,197,1,197,1,197,1,197,1,198,
- 1,198,1,198,1,198,1,198,1,198,1,198,1,199,1,199,1,199,1,199,1,199,1,199,
- 1,199,1,199,1,199,1,199,1,199,1,200,1,200,1,200,1,200,1,200,1,200,1,200,
- 1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,
- 1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,202,1,202,
+ 1,177,1,177,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,
+ 1,178,1,178,1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,179,1,179,
+ 1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,180,
+ 1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,181,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,183,1,184,1,184,1,184,1,184,1,184,1,184,1,185,1,185,1,185,1,185,
+ 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,187,1,187,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,1,188,
+ 1,188,1,188,1,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,190,1,190,1,191,1,191,
+ 1,191,1,191,1,192,1,192,1,192,1,192,1,193,1,193,1,193,1,193,1,193,1,194,
+ 1,194,1,194,1,194,1,194,1,195,1,195,1,195,1,195,1,195,1,196,1,196,1,196,
+ 1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,197,1,197,1,197,1,197,
+ 1,197,1,197,1,197,1,198,1,198,1,198,1,198,1,198,1,199,1,199,1,199,1,199,
+ 1,199,1,199,1,199,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,
+ 1,200,1,200,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,
+ 1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,202,1,202,1,202,
1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,203,1,203,1,203,1,203,1,203,
- 1,203,1,203,1,203,1,203,1,203,1,203,1,204,1,204,1,204,1,204,1,204,1,204,
- 1,204,1,204,1,204,1,204,1,204,1,205,1,205,1,205,1,205,1,205,1,205,1,206,
- 1,206,1,206,1,206,1,206,1,207,1,207,1,207,1,207,1,208,1,208,1,208,1,208,
- 1,209,1,209,1,209,1,209,1,210,1,210,1,210,1,210,1,210,1,210,1,211,1,211,
- 1,211,1,211,1,212,1,212,1,212,1,212,1,212,1,212,1,213,1,213,1,213,1,213,
- 1,213,1,213,1,213,1,214,1,214,1,214,1,214,1,214,1,214,1,215,1,215,1,215,
- 1,215,1,215,1,215,1,215,1,215,1,215,1,215,1,215,1,215,1,215,1,216,1,216,
- 1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,217,
- 1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,218,1,218,
- 1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,219,1,219,1,219,1,219,
+ 1,203,1,203,1,203,1,203,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,
+ 1,204,1,204,1,204,1,205,1,205,1,205,1,205,1,205,1,205,1,205,1,205,1,205,
+ 1,205,1,205,1,206,1,206,1,206,1,206,1,206,1,206,1,207,1,207,1,207,1,207,
+ 1,207,1,208,1,208,1,208,1,208,1,209,1,209,1,209,1,209,1,210,1,210,1,210,
+ 1,210,1,211,1,211,1,211,1,211,1,211,1,211,1,212,1,212,1,212,1,212,1,213,
+ 1,213,1,213,1,213,1,213,1,213,1,214,1,214,1,214,1,214,1,214,1,214,1,214,
+ 1,215,1,215,1,215,1,215,1,215,1,215,1,216,1,216,1,216,1,216,1,216,1,216,
+ 1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,217,1,217,1,217,1,217,1,217,
+ 1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,218,1,218,1,218,1,218,
+ 1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,219,1,219,1,219,1,219,1,219,
1,219,1,219,1,219,1,219,1,219,1,220,1,220,1,220,1,220,1,220,1,220,1,220,
- 1,220,1,220,1,220,1,220,1,220,1,221,1,221,1,221,1,221,1,221,1,221,1,221,
- 1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,222,1,222,
- 1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,223,1,223,
- 1,223,1,223,1,223,1,223,1,223,1,223,1,223,1,223,1,223,1,223,1,223,1,223,
- 1,223,1,223,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,
- 1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,226,1,226,1,226,1,226,
- 1,226,1,226,1,226,1,226,1,226,1,226,1,226,1,227,1,227,1,227,1,227,1,227,
- 1,227,1,227,1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,229,3,229,
- 2044,8,229,1,229,4,229,2047,8,229,11,229,12,229,2048,1,229,1,229,1,230,
- 1,230,3,230,2055,8,230,1,230,4,230,2058,8,230,11,230,12,230,2059,1,231,
- 4,231,2063,8,231,11,231,12,231,2064,1,231,1,231,5,231,2069,8,231,10,231,
- 12,231,2072,9,231,1,231,3,231,2075,8,231,1,231,3,231,2078,8,231,1,231,
- 3,231,2081,8,231,1,231,4,231,2084,8,231,11,231,12,231,2085,1,231,3,231,
- 2089,8,231,1,231,3,231,2092,8,231,1,231,3,231,2095,8,231,1,232,1,232,1,
- 232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,
- 1,232,1,232,1,232,1,232,3,232,2115,8,232,1,233,1,233,1,233,1,233,1,233,
- 1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,
- 1,233,3,233,2135,8,233,1,234,1,234,1,234,1,234,1,235,4,235,2142,8,235,
- 11,235,12,235,2143,1,235,1,235,4,235,2148,8,235,11,235,12,235,2149,5,235,
- 2152,8,235,10,235,12,235,2155,9,235,1,236,1,236,1,236,1,236,5,236,2161,
- 8,236,10,236,12,236,2164,9,236,1,236,3,236,2167,8,236,1,236,3,236,2170,
- 8,236,1,236,1,236,1,236,1,236,5,236,2176,8,236,10,236,12,236,2179,9,236,
- 1,236,1,236,3,236,2183,8,236,1,236,1,236,1,237,4,237,2188,8,237,11,237,
- 12,237,2189,1,237,1,237,1,2177,0,238,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,194,
- 389,195,391,196,393,197,395,198,397,199,399,200,401,201,403,202,405,203,
- 407,204,409,205,411,206,413,207,415,208,417,209,419,210,421,211,423,212,
- 425,213,427,214,429,215,431,216,433,217,435,218,437,219,439,220,441,221,
- 443,222,445,223,447,224,449,225,451,226,453,227,455,228,457,229,459,230,
- 461,0,463,231,465,232,467,233,469,234,471,235,473,236,475,237,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,2224,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,387,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,0,403,1,0,0,0,0,405,1,0,0,0,0,407,1,0,0,0,
- 0,409,1,0,0,0,0,411,1,0,0,0,0,413,1,0,0,0,0,415,1,0,0,0,0,417,1,0,0,0,
- 0,419,1,0,0,0,0,421,1,0,0,0,0,423,1,0,0,0,0,425,1,0,0,0,0,427,1,0,0,0,
- 0,429,1,0,0,0,0,431,1,0,0,0,0,433,1,0,0,0,0,435,1,0,0,0,0,437,1,0,0,0,
- 0,439,1,0,0,0,0,441,1,0,0,0,0,443,1,0,0,0,0,445,1,0,0,0,0,447,1,0,0,0,
- 0,449,1,0,0,0,0,451,1,0,0,0,0,453,1,0,0,0,0,455,1,0,0,0,0,457,1,0,0,0,
- 0,459,1,0,0,0,0,463,1,0,0,0,0,465,1,0,0,0,0,467,1,0,0,0,0,469,1,0,0,0,
- 0,471,1,0,0,0,0,473,1,0,0,0,0,475,1,0,0,0,1,477,1,0,0,0,3,479,1,0,0,0,
- 5,482,1,0,0,0,7,486,1,0,0,0,9,488,1,0,0,0,11,490,1,0,0,0,13,492,1,0,0,
- 0,15,494,1,0,0,0,17,498,1,0,0,0,19,500,1,0,0,0,21,502,1,0,0,0,23,506,1,
- 0,0,0,25,516,1,0,0,0,27,519,1,0,0,0,29,525,1,0,0,0,31,528,1,0,0,0,33,540,
- 1,0,0,0,35,542,1,0,0,0,37,545,1,0,0,0,39,552,1,0,0,0,41,554,1,0,0,0,43,
- 563,1,0,0,0,45,565,1,0,0,0,47,573,1,0,0,0,49,575,1,0,0,0,51,578,1,0,0,
- 0,53,581,1,0,0,0,55,583,1,0,0,0,57,585,1,0,0,0,59,587,1,0,0,0,61,590,1,
- 0,0,0,63,592,1,0,0,0,65,594,1,0,0,0,67,596,1,0,0,0,69,600,1,0,0,0,71,604,
- 1,0,0,0,73,606,1,0,0,0,75,610,1,0,0,0,77,613,1,0,0,0,79,621,1,0,0,0,81,
- 624,1,0,0,0,83,633,1,0,0,0,85,636,1,0,0,0,87,638,1,0,0,0,89,645,1,0,0,
- 0,91,647,1,0,0,0,93,655,1,0,0,0,95,658,1,0,0,0,97,665,1,0,0,0,99,667,1,
- 0,0,0,101,669,1,0,0,0,103,671,1,0,0,0,105,675,1,0,0,0,107,679,1,0,0,0,
- 109,682,1,0,0,0,111,685,1,0,0,0,113,687,1,0,0,0,115,689,1,0,0,0,117,692,
- 1,0,0,0,119,694,1,0,0,0,121,696,1,0,0,0,123,698,1,0,0,0,125,703,1,0,0,
- 0,127,710,1,0,0,0,129,716,1,0,0,0,131,721,1,0,0,0,133,727,1,0,0,0,135,
- 733,1,0,0,0,137,738,1,0,0,0,139,742,1,0,0,0,141,747,1,0,0,0,143,752,1,
- 0,0,0,145,757,1,0,0,0,147,762,1,0,0,0,149,769,1,0,0,0,151,774,1,0,0,0,
- 153,779,1,0,0,0,155,786,1,0,0,0,157,791,1,0,0,0,159,799,1,0,0,0,161,807,
- 1,0,0,0,163,815,1,0,0,0,165,825,1,0,0,0,167,833,1,0,0,0,169,843,1,0,0,
- 0,171,851,1,0,0,0,173,857,1,0,0,0,175,863,1,0,0,0,177,869,1,0,0,0,179,
- 875,1,0,0,0,181,883,1,0,0,0,183,889,1,0,0,0,185,897,1,0,0,0,187,903,1,
- 0,0,0,189,911,1,0,0,0,191,917,1,0,0,0,193,921,1,0,0,0,195,927,1,0,0,0,
- 197,931,1,0,0,0,199,937,1,0,0,0,201,941,1,0,0,0,203,949,1,0,0,0,205,955,
- 1,0,0,0,207,960,1,0,0,0,209,966,1,0,0,0,211,971,1,0,0,0,213,979,1,0,0,
- 0,215,985,1,0,0,0,217,992,1,0,0,0,219,1000,1,0,0,0,221,1006,1,0,0,0,223,
- 1015,1,0,0,0,225,1022,1,0,0,0,227,1030,1,0,0,0,229,1036,1,0,0,0,231,1045,
- 1,0,0,0,233,1052,1,0,0,0,235,1060,1,0,0,0,237,1066,1,0,0,0,239,1075,1,
- 0,0,0,241,1082,1,0,0,0,243,1090,1,0,0,0,245,1099,1,0,0,0,247,1109,1,0,
- 0,0,249,1116,1,0,0,0,251,1127,1,0,0,0,253,1134,1,0,0,0,255,1142,1,0,0,
- 0,257,1149,1,0,0,0,259,1158,1,0,0,0,261,1167,1,0,0,0,263,1177,1,0,0,0,
- 265,1185,1,0,0,0,267,1196,1,0,0,0,269,1203,1,0,0,0,271,1214,1,0,0,0,273,
- 1221,1,0,0,0,275,1233,1,0,0,0,277,1243,1,0,0,0,279,1250,1,0,0,0,281,1261,
- 1,0,0,0,283,1273,1,0,0,0,285,1278,1,0,0,0,287,1287,1,0,0,0,289,1295,1,
- 0,0,0,291,1300,1,0,0,0,293,1306,1,0,0,0,295,1311,1,0,0,0,297,1316,1,0,
- 0,0,299,1323,1,0,0,0,301,1334,1,0,0,0,303,1342,1,0,0,0,305,1353,1,0,0,
- 0,307,1367,1,0,0,0,309,1376,1,0,0,0,311,1388,1,0,0,0,313,1397,1,0,0,0,
- 315,1403,1,0,0,0,317,1413,1,0,0,0,319,1420,1,0,0,0,321,1434,1,0,0,0,323,
- 1446,1,0,0,0,325,1453,1,0,0,0,327,1463,1,0,0,0,329,1470,1,0,0,0,331,1476,
- 1,0,0,0,333,1485,1,0,0,0,335,1492,1,0,0,0,337,1497,1,0,0,0,339,1502,1,
- 0,0,0,341,1510,1,0,0,0,343,1518,1,0,0,0,345,1523,1,0,0,0,347,1528,1,0,
- 0,0,349,1538,1,0,0,0,351,1551,1,0,0,0,353,1566,1,0,0,0,355,1582,1,0,0,
- 0,357,1600,1,0,0,0,359,1616,1,0,0,0,361,1633,1,0,0,0,363,1642,1,0,0,0,
- 365,1649,1,0,0,0,367,1654,1,0,0,0,369,1660,1,0,0,0,371,1666,1,0,0,0,373,
- 1670,1,0,0,0,375,1674,1,0,0,0,377,1684,1,0,0,0,379,1696,1,0,0,0,381,1707,
- 1,0,0,0,383,1716,1,0,0,0,385,1720,1,0,0,0,387,1724,1,0,0,0,389,1729,1,
- 0,0,0,391,1734,1,0,0,0,393,1739,1,0,0,0,395,1750,1,0,0,0,397,1755,1,0,
- 0,0,399,1762,1,0,0,0,401,1773,1,0,0,0,403,1792,1,0,0,0,405,1802,1,0,0,
- 0,407,1811,1,0,0,0,409,1822,1,0,0,0,411,1833,1,0,0,0,413,1839,1,0,0,0,
- 415,1844,1,0,0,0,417,1848,1,0,0,0,419,1852,1,0,0,0,421,1856,1,0,0,0,423,
- 1862,1,0,0,0,425,1866,1,0,0,0,427,1872,1,0,0,0,429,1879,1,0,0,0,431,1885,
- 1,0,0,0,433,1898,1,0,0,0,435,1911,1,0,0,0,437,1922,1,0,0,0,439,1932,1,
- 0,0,0,441,1941,1,0,0,0,443,1953,1,0,0,0,445,1970,1,0,0,0,447,1982,1,0,
- 0,0,449,1998,1,0,0,0,451,2008,1,0,0,0,453,2016,1,0,0,0,455,2027,1,0,0,
- 0,457,2034,1,0,0,0,459,2046,1,0,0,0,461,2052,1,0,0,0,463,2094,1,0,0,0,
- 465,2114,1,0,0,0,467,2134,1,0,0,0,469,2136,1,0,0,0,471,2141,1,0,0,0,473,
- 2182,1,0,0,0,475,2187,1,0,0,0,477,478,5,33,0,0,478,2,1,0,0,0,479,480,5,
- 33,0,0,480,481,5,33,0,0,481,4,1,0,0,0,482,483,5,33,0,0,483,484,5,33,0,
- 0,484,485,5,33,0,0,485,6,1,0,0,0,486,487,5,94,0,0,487,8,1,0,0,0,488,489,
- 5,45,0,0,489,10,1,0,0,0,490,491,5,43,0,0,491,12,1,0,0,0,492,493,5,42,0,
- 0,493,14,1,0,0,0,494,495,5,46,0,0,495,496,5,46,0,0,496,497,5,46,0,0,497,
- 16,1,0,0,0,498,499,5,8230,0,0,499,18,1,0,0,0,500,501,5,47,0,0,501,20,1,
- 0,0,0,502,503,5,109,0,0,503,504,5,111,0,0,504,505,5,100,0,0,505,22,1,0,
- 0,0,506,507,5,105,0,0,507,508,5,110,0,0,508,509,5,116,0,0,509,510,5,101,
- 0,0,510,511,5,114,0,0,511,512,5,115,0,0,512,513,5,101,0,0,513,514,5,99,
- 0,0,514,515,5,116,0,0,515,24,1,0,0,0,516,517,5,47,0,0,517,518,5,92,0,0,
- 518,26,1,0,0,0,519,520,5,117,0,0,520,521,5,110,0,0,521,522,5,105,0,0,522,
- 523,5,116,0,0,523,524,5,101,0,0,524,28,1,0,0,0,525,526,5,92,0,0,526,527,
- 5,47,0,0,527,30,1,0,0,0,528,529,5,115,0,0,529,530,5,101,0,0,530,531,5,
- 116,0,0,531,532,5,115,0,0,532,533,5,117,0,0,533,534,5,98,0,0,534,535,5,
- 116,0,0,535,536,5,114,0,0,536,537,5,97,0,0,537,538,5,99,0,0,538,539,5,
- 116,0,0,539,32,1,0,0,0,540,541,5,92,0,0,541,34,1,0,0,0,542,543,5,105,0,
- 0,543,544,5,110,0,0,544,36,1,0,0,0,545,546,5,115,0,0,546,547,5,117,0,0,
- 547,548,5,98,0,0,548,549,5,115,0,0,549,550,5,101,0,0,550,551,5,116,0,0,
- 551,38,1,0,0,0,552,553,5,8838,0,0,553,40,1,0,0,0,554,555,5,115,0,0,555,
- 556,5,117,0,0,556,557,5,112,0,0,557,558,5,101,0,0,558,559,5,114,0,0,559,
- 560,5,115,0,0,560,561,5,101,0,0,561,562,5,116,0,0,562,42,1,0,0,0,563,564,
- 5,8839,0,0,564,44,1,0,0,0,565,566,5,100,0,0,566,567,5,105,0,0,567,568,
- 5,118,0,0,568,569,5,105,0,0,569,570,5,100,0,0,570,571,5,101,0,0,571,572,
- 5,115,0,0,572,46,1,0,0,0,573,574,5,124,0,0,574,48,1,0,0,0,575,576,5,62,
- 0,0,576,577,5,61,0,0,577,50,1,0,0,0,578,579,5,60,0,0,579,580,5,61,0,0,
- 580,52,1,0,0,0,581,582,5,62,0,0,582,54,1,0,0,0,583,584,5,60,0,0,584,56,
- 1,0,0,0,585,586,5,61,0,0,586,58,1,0,0,0,587,588,5,60,0,0,588,589,5,62,
- 0,0,589,60,1,0,0,0,590,591,5,8801,0,0,591,62,1,0,0,0,592,593,5,40,0,0,
- 593,64,1,0,0,0,594,595,5,41,0,0,595,66,1,0,0,0,596,597,5,110,0,0,597,598,
- 5,111,0,0,598,599,5,116,0,0,599,68,1,0,0,0,600,601,5,97,0,0,601,602,5,
- 110,0,0,602,603,5,100,0,0,603,70,1,0,0,0,604,605,5,38,0,0,605,72,1,0,0,
- 0,606,607,5,120,0,0,607,608,5,111,0,0,608,609,5,114,0,0,609,74,1,0,0,0,
- 610,611,5,111,0,0,611,612,5,114,0,0,612,76,1,0,0,0,613,614,5,105,0,0,614,
- 615,5,109,0,0,615,616,5,112,0,0,616,617,5,108,0,0,617,618,5,105,0,0,618,
- 619,5,101,0,0,619,620,5,115,0,0,620,78,1,0,0,0,621,622,5,45,0,0,622,623,
- 5,62,0,0,623,80,1,0,0,0,624,625,5,112,0,0,625,626,5,114,0,0,626,627,5,
- 111,0,0,627,628,5,118,0,0,628,629,5,105,0,0,629,630,5,100,0,0,630,631,
- 5,101,0,0,631,632,5,100,0,0,632,82,1,0,0,0,633,634,5,61,0,0,634,635,5,
- 62,0,0,635,84,1,0,0,0,636,637,5,58,0,0,637,86,1,0,0,0,638,639,5,102,0,
- 0,639,640,5,111,0,0,640,641,5,114,0,0,641,642,5,97,0,0,642,643,5,108,0,
- 0,643,644,5,108,0,0,644,88,1,0,0,0,645,646,5,8704,0,0,646,90,1,0,0,0,647,
- 648,5,101,0,0,648,649,5,120,0,0,649,650,5,105,0,0,650,651,5,115,0,0,651,
- 652,5,116,0,0,652,653,5,115,0,0,653,654,5,33,0,0,654,92,1,0,0,0,655,656,
- 5,8707,0,0,656,657,5,33,0,0,657,94,1,0,0,0,658,659,5,101,0,0,659,660,5,
- 120,0,0,660,661,5,105,0,0,661,662,5,115,0,0,662,663,5,116,0,0,663,664,
- 5,115,0,0,664,96,1,0,0,0,665,666,5,8707,0,0,666,98,1,0,0,0,667,668,5,44,
- 0,0,668,100,1,0,0,0,669,670,5,59,0,0,670,102,1,0,0,0,671,672,5,43,0,0,
- 672,673,5,111,0,0,673,674,5,111,0,0,674,104,1,0,0,0,675,676,5,45,0,0,676,
- 677,5,111,0,0,677,678,5,111,0,0,678,106,1,0,0,0,679,680,5,40,0,0,680,681,
- 5,124,0,0,681,108,1,0,0,0,682,683,5,124,0,0,683,684,5,41,0,0,684,110,1,
- 0,0,0,685,686,5,35,0,0,686,112,1,0,0,0,687,688,5,91,0,0,688,114,1,0,0,
- 0,689,690,5,93,0,0,690,691,5,84,0,0,691,116,1,0,0,0,692,693,5,93,0,0,693,
- 118,1,0,0,0,694,695,5,123,0,0,695,120,1,0,0,0,696,697,5,125,0,0,697,122,
- 1,0,0,0,698,699,5,108,0,0,699,700,5,111,0,0,700,701,5,103,0,0,701,702,
- 5,40,0,0,702,124,1,0,0,0,703,704,5,108,0,0,704,705,5,111,0,0,705,706,5,
- 103,0,0,706,707,5,49,0,0,707,708,5,48,0,0,708,709,5,40,0,0,709,126,1,0,
- 0,0,710,711,5,108,0,0,711,712,5,111,0,0,712,713,5,103,0,0,713,714,5,50,
- 0,0,714,715,5,40,0,0,715,128,1,0,0,0,716,717,5,112,0,0,717,718,5,111,0,
- 0,718,719,5,119,0,0,719,720,5,40,0,0,720,130,1,0,0,0,721,722,5,115,0,0,
- 722,723,5,113,0,0,723,724,5,114,0,0,724,725,5,116,0,0,725,726,5,40,0,0,
- 726,132,1,0,0,0,727,728,5,99,0,0,728,729,5,98,0,0,729,730,5,114,0,0,730,
- 731,5,116,0,0,731,732,5,40,0,0,732,134,1,0,0,0,733,734,5,115,0,0,734,735,
- 5,113,0,0,735,736,5,114,0,0,736,737,5,40,0,0,737,136,1,0,0,0,738,739,5,
- 108,0,0,739,740,5,110,0,0,740,741,5,40,0,0,741,138,1,0,0,0,742,743,5,101,
- 0,0,743,744,5,120,0,0,744,745,5,112,0,0,745,746,5,40,0,0,746,140,1,0,0,
- 0,747,748,5,115,0,0,748,749,5,105,0,0,749,750,5,110,0,0,750,751,5,40,0,
- 0,751,142,1,0,0,0,752,753,5,99,0,0,753,754,5,111,0,0,754,755,5,115,0,0,
- 755,756,5,40,0,0,756,144,1,0,0,0,757,758,5,116,0,0,758,759,5,97,0,0,759,
- 760,5,110,0,0,760,761,5,40,0,0,761,146,1,0,0,0,762,763,5,99,0,0,763,764,
- 5,111,0,0,764,765,5,116,0,0,765,766,5,97,0,0,766,767,5,110,0,0,767,768,
- 5,40,0,0,768,148,1,0,0,0,769,770,5,99,0,0,770,771,5,111,0,0,771,772,5,
- 116,0,0,772,773,5,40,0,0,773,150,1,0,0,0,774,775,5,115,0,0,775,776,5,101,
- 0,0,776,777,5,99,0,0,777,778,5,40,0,0,778,152,1,0,0,0,779,780,5,99,0,0,
- 780,781,5,111,0,0,781,782,5,115,0,0,782,783,5,101,0,0,783,784,5,99,0,0,
- 784,785,5,40,0,0,785,154,1,0,0,0,786,787,5,99,0,0,787,788,5,115,0,0,788,
- 789,5,99,0,0,789,790,5,40,0,0,790,156,1,0,0,0,791,792,5,97,0,0,792,793,
- 5,114,0,0,793,794,5,99,0,0,794,795,5,115,0,0,795,796,5,105,0,0,796,797,
- 5,110,0,0,797,798,5,40,0,0,798,158,1,0,0,0,799,800,5,97,0,0,800,801,5,
- 114,0,0,801,802,5,99,0,0,802,803,5,99,0,0,803,804,5,111,0,0,804,805,5,
- 115,0,0,805,806,5,40,0,0,806,160,1,0,0,0,807,808,5,97,0,0,808,809,5,114,
- 0,0,809,810,5,99,0,0,810,811,5,116,0,0,811,812,5,97,0,0,812,813,5,110,
- 0,0,813,814,5,40,0,0,814,162,1,0,0,0,815,816,5,97,0,0,816,817,5,114,0,
- 0,817,818,5,99,0,0,818,819,5,99,0,0,819,820,5,111,0,0,820,821,5,116,0,
- 0,821,822,5,97,0,0,822,823,5,110,0,0,823,824,5,40,0,0,824,164,1,0,0,0,
- 825,826,5,97,0,0,826,827,5,114,0,0,827,828,5,99,0,0,828,829,5,115,0,0,
- 829,830,5,101,0,0,830,831,5,99,0,0,831,832,5,40,0,0,832,166,1,0,0,0,833,
- 834,5,97,0,0,834,835,5,114,0,0,835,836,5,99,0,0,836,837,5,99,0,0,837,838,
- 5,111,0,0,838,839,5,115,0,0,839,840,5,101,0,0,840,841,5,99,0,0,841,842,
- 5,40,0,0,842,168,1,0,0,0,843,844,5,97,0,0,844,845,5,114,0,0,845,846,5,
- 99,0,0,846,847,5,99,0,0,847,848,5,115,0,0,848,849,5,99,0,0,849,850,5,40,
- 0,0,850,170,1,0,0,0,851,852,5,97,0,0,852,853,5,99,0,0,853,854,5,115,0,
- 0,854,855,5,99,0,0,855,856,5,40,0,0,856,172,1,0,0,0,857,858,5,97,0,0,858,
- 859,5,115,0,0,859,860,5,105,0,0,860,861,5,110,0,0,861,862,5,40,0,0,862,
- 174,1,0,0,0,863,864,5,97,0,0,864,865,5,99,0,0,865,866,5,111,0,0,866,867,
- 5,115,0,0,867,868,5,40,0,0,868,176,1,0,0,0,869,870,5,97,0,0,870,871,5,
- 116,0,0,871,872,5,97,0,0,872,873,5,110,0,0,873,874,5,40,0,0,874,178,1,
- 0,0,0,875,876,5,97,0,0,876,877,5,99,0,0,877,878,5,111,0,0,878,879,5,116,
- 0,0,879,880,5,97,0,0,880,881,5,110,0,0,881,882,5,40,0,0,882,180,1,0,0,
- 0,883,884,5,97,0,0,884,885,5,115,0,0,885,886,5,101,0,0,886,887,5,99,0,
- 0,887,888,5,40,0,0,888,182,1,0,0,0,889,890,5,97,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,40,0,0,896,184,1,0,0,0,897,898,5,97,0,0,898,899,5,99,0,0,899,900,
- 5,111,0,0,900,901,5,116,0,0,901,902,5,40,0,0,902,186,1,0,0,0,903,904,5,
- 97,0,0,904,905,5,114,0,0,905,906,5,99,0,0,906,907,5,99,0,0,907,908,5,111,
- 0,0,908,909,5,116,0,0,909,910,5,40,0,0,910,188,1,0,0,0,911,912,5,115,0,
- 0,912,913,5,105,0,0,913,914,5,110,0,0,914,915,5,104,0,0,915,916,5,40,0,
- 0,916,190,1,0,0,0,917,918,5,115,0,0,918,919,5,104,0,0,919,920,5,40,0,0,
- 920,192,1,0,0,0,921,922,5,99,0,0,922,923,5,111,0,0,923,924,5,115,0,0,924,
- 925,5,104,0,0,925,926,5,40,0,0,926,194,1,0,0,0,927,928,5,99,0,0,928,929,
- 5,104,0,0,929,930,5,40,0,0,930,196,1,0,0,0,931,932,5,116,0,0,932,933,5,
- 97,0,0,933,934,5,110,0,0,934,935,5,104,0,0,935,936,5,40,0,0,936,198,1,
- 0,0,0,937,938,5,116,0,0,938,939,5,104,0,0,939,940,5,40,0,0,940,200,1,0,
- 0,0,941,942,5,99,0,0,942,943,5,111,0,0,943,944,5,116,0,0,944,945,5,97,
- 0,0,945,946,5,110,0,0,946,947,5,104,0,0,947,948,5,40,0,0,948,202,1,0,0,
- 0,949,950,5,99,0,0,950,951,5,111,0,0,951,952,5,116,0,0,952,953,5,104,0,
- 0,953,954,5,40,0,0,954,204,1,0,0,0,955,956,5,99,0,0,956,957,5,116,0,0,
- 957,958,5,104,0,0,958,959,5,40,0,0,959,206,1,0,0,0,960,961,5,115,0,0,961,
- 962,5,101,0,0,962,963,5,99,0,0,963,964,5,104,0,0,964,965,5,40,0,0,965,
- 208,1,0,0,0,966,967,5,115,0,0,967,968,5,99,0,0,968,969,5,104,0,0,969,970,
- 5,40,0,0,970,210,1,0,0,0,971,972,5,99,0,0,972,973,5,111,0,0,973,974,5,
- 115,0,0,974,975,5,101,0,0,975,976,5,99,0,0,976,977,5,104,0,0,977,978,5,
- 40,0,0,978,212,1,0,0,0,979,980,5,99,0,0,980,981,5,115,0,0,981,982,5,99,
- 0,0,982,983,5,104,0,0,983,984,5,40,0,0,984,214,1,0,0,0,985,986,5,97,0,
- 0,986,987,5,115,0,0,987,988,5,105,0,0,988,989,5,110,0,0,989,990,5,104,
- 0,0,990,991,5,40,0,0,991,216,1,0,0,0,992,993,5,97,0,0,993,994,5,114,0,
- 0,994,995,5,115,0,0,995,996,5,105,0,0,996,997,5,110,0,0,997,998,5,104,
- 0,0,998,999,5,40,0,0,999,218,1,0,0,0,1000,1001,5,97,0,0,1001,1002,5,114,
- 0,0,1002,1003,5,115,0,0,1003,1004,5,104,0,0,1004,1005,5,40,0,0,1005,220,
- 1,0,0,0,1006,1007,5,97,0,0,1007,1008,5,114,0,0,1008,1009,5,99,0,0,1009,
- 1010,5,115,0,0,1010,1011,5,105,0,0,1011,1012,5,110,0,0,1012,1013,5,104,
- 0,0,1013,1014,5,40,0,0,1014,222,1,0,0,0,1015,1016,5,97,0,0,1016,1017,5,
- 99,0,0,1017,1018,5,111,0,0,1018,1019,5,115,0,0,1019,1020,5,104,0,0,1020,
- 1021,5,40,0,0,1021,224,1,0,0,0,1022,1023,5,97,0,0,1023,1024,5,114,0,0,
- 1024,1025,5,99,0,0,1025,1026,5,111,0,0,1026,1027,5,115,0,0,1027,1028,5,
- 104,0,0,1028,1029,5,40,0,0,1029,226,1,0,0,0,1030,1031,5,97,0,0,1031,1032,
- 5,114,0,0,1032,1033,5,99,0,0,1033,1034,5,104,0,0,1034,1035,5,40,0,0,1035,
- 228,1,0,0,0,1036,1037,5,97,0,0,1037,1038,5,114,0,0,1038,1039,5,99,0,0,
- 1039,1040,5,99,0,0,1040,1041,5,111,0,0,1041,1042,5,115,0,0,1042,1043,5,
- 104,0,0,1043,1044,5,40,0,0,1044,230,1,0,0,0,1045,1046,5,97,0,0,1046,1047,
- 5,116,0,0,1047,1048,5,97,0,0,1048,1049,5,110,0,0,1049,1050,5,104,0,0,1050,
- 1051,5,40,0,0,1051,232,1,0,0,0,1052,1053,5,97,0,0,1053,1054,5,114,0,0,
- 1054,1055,5,116,0,0,1055,1056,5,97,0,0,1056,1057,5,110,0,0,1057,1058,5,
- 104,0,0,1058,1059,5,40,0,0,1059,234,1,0,0,0,1060,1061,5,97,0,0,1061,1062,
- 5,114,0,0,1062,1063,5,116,0,0,1063,1064,5,104,0,0,1064,1065,5,40,0,0,1065,
- 236,1,0,0,0,1066,1067,5,97,0,0,1067,1068,5,114,0,0,1068,1069,5,99,0,0,
- 1069,1070,5,116,0,0,1070,1071,5,97,0,0,1071,1072,5,110,0,0,1072,1073,5,
- 104,0,0,1073,1074,5,40,0,0,1074,238,1,0,0,0,1075,1076,5,97,0,0,1076,1077,
- 5,99,0,0,1077,1078,5,111,0,0,1078,1079,5,116,0,0,1079,1080,5,104,0,0,1080,
- 1081,5,40,0,0,1081,240,1,0,0,0,1082,1083,5,97,0,0,1083,1084,5,114,0,0,
- 1084,1085,5,99,0,0,1085,1086,5,111,0,0,1086,1087,5,116,0,0,1087,1088,5,
- 104,0,0,1088,1089,5,40,0,0,1089,242,1,0,0,0,1090,1091,5,97,0,0,1091,1092,
- 5,99,0,0,1092,1093,5,111,0,0,1093,1094,5,116,0,0,1094,1095,5,97,0,0,1095,
- 1096,5,110,0,0,1096,1097,5,104,0,0,1097,1098,5,40,0,0,1098,244,1,0,0,0,
- 1099,1100,5,97,0,0,1100,1101,5,114,0,0,1101,1102,5,99,0,0,1102,1103,5,
- 111,0,0,1103,1104,5,116,0,0,1104,1105,5,97,0,0,1105,1106,5,110,0,0,1106,
- 1107,5,104,0,0,1107,1108,5,40,0,0,1108,246,1,0,0,0,1109,1110,5,97,0,0,
- 1110,1111,5,114,0,0,1111,1112,5,99,0,0,1112,1113,5,116,0,0,1113,1114,5,
- 104,0,0,1114,1115,5,40,0,0,1115,248,1,0,0,0,1116,1117,5,97,0,0,1117,1118,
- 5,114,0,0,1118,1119,5,99,0,0,1119,1120,5,99,0,0,1120,1121,5,111,0,0,1121,
- 1122,5,116,0,0,1122,1123,5,97,0,0,1123,1124,5,110,0,0,1124,1125,5,104,
- 0,0,1125,1126,5,40,0,0,1126,250,1,0,0,0,1127,1128,5,97,0,0,1128,1129,5,
- 115,0,0,1129,1130,5,101,0,0,1130,1131,5,99,0,0,1131,1132,5,104,0,0,1132,
- 1133,5,40,0,0,1133,252,1,0,0,0,1134,1135,5,97,0,0,1135,1136,5,114,0,0,
- 1136,1137,5,115,0,0,1137,1138,5,101,0,0,1138,1139,5,99,0,0,1139,1140,5,
- 104,0,0,1140,1141,5,40,0,0,1141,254,1,0,0,0,1142,1143,5,97,0,0,1143,1144,
- 5,114,0,0,1144,1145,5,115,0,0,1145,1146,5,99,0,0,1146,1147,5,104,0,0,1147,
- 1148,5,40,0,0,1148,256,1,0,0,0,1149,1150,5,97,0,0,1150,1151,5,114,0,0,
- 1151,1152,5,99,0,0,1152,1153,5,115,0,0,1153,1154,5,101,0,0,1154,1155,5,
- 99,0,0,1155,1156,5,104,0,0,1156,1157,5,40,0,0,1157,258,1,0,0,0,1158,1159,
- 5,97,0,0,1159,1160,5,99,0,0,1160,1161,5,111,0,0,1161,1162,5,115,0,0,1162,
- 1163,5,101,0,0,1163,1164,5,99,0,0,1164,1165,5,104,0,0,1165,1166,5,40,0,
- 0,1166,260,1,0,0,0,1167,1168,5,97,0,0,1168,1169,5,114,0,0,1169,1170,5,
- 99,0,0,1170,1171,5,111,0,0,1171,1172,5,115,0,0,1172,1173,5,101,0,0,1173,
- 1174,5,99,0,0,1174,1175,5,104,0,0,1175,1176,5,40,0,0,1176,262,1,0,0,0,
- 1177,1178,5,97,0,0,1178,1179,5,114,0,0,1179,1180,5,99,0,0,1180,1181,5,
- 115,0,0,1181,1182,5,99,0,0,1182,1183,5,104,0,0,1183,1184,5,40,0,0,1184,
- 264,1,0,0,0,1185,1186,5,97,0,0,1186,1187,5,114,0,0,1187,1188,5,99,0,0,
- 1188,1189,5,99,0,0,1189,1190,5,111,0,0,1190,1191,5,115,0,0,1191,1192,5,
- 101,0,0,1192,1193,5,99,0,0,1193,1194,5,104,0,0,1194,1195,5,40,0,0,1195,
- 266,1,0,0,0,1196,1197,5,97,0,0,1197,1198,5,99,0,0,1198,1199,5,115,0,0,
- 1199,1200,5,99,0,0,1200,1201,5,104,0,0,1201,1202,5,40,0,0,1202,268,1,0,
- 0,0,1203,1204,5,102,0,0,1204,1205,5,97,0,0,1205,1206,5,99,0,0,1206,1207,
- 5,116,0,0,1207,1208,5,111,0,0,1208,1209,5,114,0,0,1209,1210,5,105,0,0,
- 1210,1211,5,97,0,0,1211,1212,5,108,0,0,1212,1213,5,40,0,0,1213,270,1,0,
- 0,0,1214,1215,5,103,0,0,1215,1216,5,97,0,0,1216,1217,5,109,0,0,1217,1218,
- 5,109,0,0,1218,1219,5,97,0,0,1219,1220,5,40,0,0,1220,272,1,0,0,0,1221,
- 1222,5,100,0,0,1222,1223,5,101,0,0,1223,1224,5,114,0,0,1224,1225,5,105,
- 0,0,1225,1226,5,118,0,0,1226,1227,5,97,0,0,1227,1228,5,116,0,0,1228,1229,
- 5,105,0,0,1229,1230,5,118,0,0,1230,1231,5,101,0,0,1231,1232,5,40,0,0,1232,
- 274,1,0,0,0,1233,1234,5,105,0,0,1234,1235,5,110,0,0,1235,1236,5,116,0,
- 0,1236,1237,5,101,0,0,1237,1238,5,103,0,0,1238,1239,5,114,0,0,1239,1240,
- 5,97,0,0,1240,1241,5,108,0,0,1241,1242,5,40,0,0,1242,276,1,0,0,0,1243,
- 1244,5,108,0,0,1244,1245,5,105,0,0,1245,1246,5,109,0,0,1246,1247,5,105,
- 0,0,1247,1248,5,116,0,0,1248,1249,5,40,0,0,1249,278,1,0,0,0,1250,1251,
- 5,108,0,0,1251,1252,5,105,0,0,1252,1253,5,109,0,0,1253,1254,5,105,0,0,
- 1254,1255,5,116,0,0,1255,1256,5,108,0,0,1256,1257,5,101,0,0,1257,1258,
- 5,102,0,0,1258,1259,5,116,0,0,1259,1260,5,40,0,0,1260,280,1,0,0,0,1261,
- 1262,5,108,0,0,1262,1263,5,105,0,0,1263,1264,5,109,0,0,1264,1265,5,105,
- 0,0,1265,1266,5,116,0,0,1266,1267,5,114,0,0,1267,1268,5,105,0,0,1268,1269,
- 5,103,0,0,1269,1270,5,104,0,0,1270,1271,5,116,0,0,1271,1272,5,40,0,0,1272,
- 282,1,0,0,0,1273,1274,5,115,0,0,1274,1275,5,117,0,0,1275,1276,5,109,0,
- 0,1276,1277,5,40,0,0,1277,284,1,0,0,0,1278,1279,5,112,0,0,1279,1280,5,
- 114,0,0,1280,1281,5,111,0,0,1281,1282,5,100,0,0,1282,1283,5,117,0,0,1283,
- 1284,5,99,0,0,1284,1285,5,116,0,0,1285,1286,5,40,0,0,1286,286,1,0,0,0,
- 1287,1288,5,115,0,0,1288,1289,5,105,0,0,1289,1290,5,103,0,0,1290,1291,
- 5,110,0,0,1291,1292,5,117,0,0,1292,1293,5,109,0,0,1293,1294,5,40,0,0,1294,
- 288,1,0,0,0,1295,1296,5,115,0,0,1296,1297,5,103,0,0,1297,1298,5,110,0,
- 0,1298,1299,5,40,0,0,1299,290,1,0,0,0,1300,1301,5,115,0,0,1301,1302,5,
- 105,0,0,1302,1303,5,103,0,0,1303,1304,5,110,0,0,1304,1305,5,40,0,0,1305,
- 292,1,0,0,0,1306,1307,5,97,0,0,1307,1308,5,98,0,0,1308,1309,5,115,0,0,
- 1309,1310,5,40,0,0,1310,294,1,0,0,0,1311,1312,5,112,0,0,1312,1313,5,104,
- 0,0,1313,1314,5,105,0,0,1314,1315,5,40,0,0,1315,296,1,0,0,0,1316,1317,
- 5,112,0,0,1317,1318,5,114,0,0,1318,1319,5,105,0,0,1319,1320,5,109,0,0,
- 1320,1321,5,101,0,0,1321,1322,5,40,0,0,1322,298,1,0,0,0,1323,1324,5,118,
- 0,0,1324,1325,5,97,0,0,1325,1326,5,108,0,0,1326,1327,5,117,0,0,1327,1328,
- 5,97,0,0,1328,1329,5,116,0,0,1329,1330,5,105,0,0,1330,1331,5,111,0,0,1331,
- 1332,5,110,0,0,1332,1333,5,40,0,0,1333,300,1,0,0,0,1334,1335,5,109,0,0,
- 1335,1336,5,111,0,0,1336,1337,5,98,0,0,1337,1338,5,105,0,0,1338,1339,5,
- 117,0,0,1339,1340,5,115,0,0,1340,1341,5,40,0,0,1341,302,1,0,0,0,1342,1343,
- 5,109,0,0,1343,1344,5,111,0,0,1344,1345,5,101,0,0,1345,1346,5,98,0,0,1346,
- 1347,5,105,0,0,1347,1348,5,117,0,0,1348,1349,5,115,0,0,1349,1350,5,109,
- 0,0,1350,1351,5,117,0,0,1351,1352,5,40,0,0,1352,304,1,0,0,0,1353,1354,
- 5,100,0,0,1354,1355,5,105,0,0,1355,1356,5,118,0,0,1356,1357,5,105,0,0,
- 1357,1358,5,115,0,0,1358,1359,5,111,0,0,1359,1360,5,114,0,0,1360,1361,
- 5,115,0,0,1361,1362,5,105,0,0,1362,1363,5,103,0,0,1363,1364,5,109,0,0,
- 1364,1365,5,97,0,0,1365,1366,5,40,0,0,1366,306,1,0,0,0,1367,1368,5,112,
- 0,0,1368,1369,5,114,0,0,1369,1370,5,105,0,0,1370,1371,5,109,0,0,1371,1372,
- 5,101,0,0,1372,1373,5,110,0,0,1373,1374,5,117,0,0,1374,1375,5,40,0,0,1375,
- 308,1,0,0,0,1376,1377,5,112,0,0,1377,1378,5,114,0,0,1378,1379,5,105,0,
- 0,1379,1380,5,109,0,0,1380,1381,5,101,0,0,1381,1382,5,111,0,0,1382,1383,
- 5,109,0,0,1383,1384,5,101,0,0,1384,1385,5,103,0,0,1385,1386,5,97,0,0,1386,
- 1387,5,40,0,0,1387,310,1,0,0,0,1388,1389,5,112,0,0,1389,1390,5,114,0,0,
- 1390,1391,5,105,0,0,1391,1392,5,109,0,0,1392,1393,5,101,0,0,1393,1394,
- 5,112,0,0,1394,1395,5,105,0,0,1395,1396,5,40,0,0,1396,312,1,0,0,0,1397,
- 1398,5,99,0,0,1398,1399,5,97,0,0,1399,1400,5,114,0,0,1400,1401,5,100,0,
- 0,1401,1402,5,40,0,0,1402,314,1,0,0,0,1403,1404,5,112,0,0,1404,1405,5,
- 111,0,0,1405,1406,5,119,0,0,1406,1407,5,101,0,0,1407,1408,5,114,0,0,1408,
- 1409,5,115,0,0,1409,1410,5,101,0,0,1410,1411,5,116,0,0,1411,1412,5,40,
- 0,0,1412,316,1,0,0,0,1413,1414,5,117,0,0,1414,1415,5,110,0,0,1415,1416,
- 5,105,0,0,1416,1417,5,111,0,0,1417,1418,5,110,0,0,1418,1419,5,40,0,0,1419,
- 318,1,0,0,0,1420,1421,5,105,0,0,1421,1422,5,110,0,0,1422,1423,5,116,0,
- 0,1423,1424,5,101,0,0,1424,1425,5,114,0,0,1425,1426,5,115,0,0,1426,1427,
- 5,101,0,0,1427,1428,5,99,0,0,1428,1429,5,116,0,0,1429,1430,5,105,0,0,1430,
- 1431,5,111,0,0,1431,1432,5,110,0,0,1432,1433,5,40,0,0,1433,320,1,0,0,0,
- 1434,1435,5,99,0,0,1435,1436,5,111,0,0,1436,1437,5,109,0,0,1437,1438,5,
- 112,0,0,1438,1439,5,108,0,0,1439,1440,5,101,0,0,1440,1441,5,109,0,0,1441,
- 1442,5,101,0,0,1442,1443,5,110,0,0,1443,1444,5,116,0,0,1444,1445,5,40,
- 0,0,1445,322,1,0,0,0,1446,1447,5,105,0,0,1447,1448,5,109,0,0,1448,1449,
- 5,97,0,0,1449,1450,5,103,0,0,1450,1451,5,101,0,0,1451,1452,5,40,0,0,1452,
- 324,1,0,0,0,1453,1454,5,112,0,0,1454,1455,5,114,0,0,1455,1456,5,101,0,
- 0,1456,1457,5,105,0,0,1457,1458,5,109,0,0,1458,1459,5,97,0,0,1459,1460,
- 5,103,0,0,1460,1461,5,101,0,0,1461,1462,5,40,0,0,1462,326,1,0,0,0,1463,
- 1464,5,102,0,0,1464,1465,5,108,0,0,1465,1466,5,111,0,0,1466,1467,5,111,
- 0,0,1467,1468,5,114,0,0,1468,1469,5,40,0,0,1469,328,1,0,0,0,1470,1471,
- 5,99,0,0,1471,1472,5,101,0,0,1472,1473,5,105,0,0,1473,1474,5,108,0,0,1474,
- 1475,5,40,0,0,1475,330,1,0,0,0,1476,1477,5,99,0,0,1477,1478,5,101,0,0,
- 1478,1479,5,105,0,0,1479,1480,5,108,0,0,1480,1481,5,105,0,0,1481,1482,
- 5,110,0,0,1482,1483,5,103,0,0,1483,1484,5,40,0,0,1484,332,1,0,0,0,1485,
- 1486,5,114,0,0,1486,1487,5,111,0,0,1487,1488,5,117,0,0,1488,1489,5,110,
- 0,0,1489,1490,5,100,0,0,1490,1491,5,40,0,0,1491,334,1,0,0,0,1492,1493,
- 5,109,0,0,1493,1494,5,105,0,0,1494,1495,5,110,0,0,1495,1496,5,40,0,0,1496,
- 336,1,0,0,0,1497,1498,5,109,0,0,1498,1499,5,97,0,0,1499,1500,5,120,0,0,
- 1500,1501,5,40,0,0,1501,338,1,0,0,0,1502,1503,5,97,0,0,1503,1504,5,114,
- 0,0,1504,1505,5,103,0,0,1505,1506,5,109,0,0,1506,1507,5,97,0,0,1507,1508,
- 5,120,0,0,1508,1509,5,40,0,0,1509,340,1,0,0,0,1510,1511,5,97,0,0,1511,
- 1512,5,114,0,0,1512,1513,5,103,0,0,1513,1514,5,109,0,0,1514,1515,5,105,
- 0,0,1515,1516,5,110,0,0,1516,1517,5,40,0,0,1517,342,1,0,0,0,1518,1519,
- 5,103,0,0,1519,1520,5,99,0,0,1520,1521,5,100,0,0,1521,1522,5,40,0,0,1522,
- 344,1,0,0,0,1523,1524,5,108,0,0,1524,1525,5,99,0,0,1525,1526,5,109,0,0,
- 1526,1527,5,40,0,0,1527,346,1,0,0,0,1528,1529,5,98,0,0,1529,1530,5,105,
- 0,0,1530,1531,5,110,0,0,1531,1532,5,111,0,0,1532,1533,5,109,0,0,1533,1534,
- 5,105,0,0,1534,1535,5,97,0,0,1535,1536,5,108,0,0,1536,1537,5,40,0,0,1537,
- 348,1,0,0,0,1538,1539,5,109,0,0,1539,1540,5,117,0,0,1540,1541,5,108,0,
- 0,1541,1542,5,116,0,0,1542,1543,5,105,0,0,1543,1544,5,110,0,0,1544,1545,
- 5,111,0,0,1545,1546,5,109,0,0,1546,1547,5,105,0,0,1547,1548,5,97,0,0,1548,
- 1549,5,108,0,0,1549,1550,5,40,0,0,1550,350,1,0,0,0,1551,1552,5,99,0,0,
- 1552,1553,5,97,0,0,1553,1554,5,116,0,0,1554,1555,5,97,0,0,1555,1556,5,
- 108,0,0,1556,1557,5,97,0,0,1557,1558,5,110,0,0,1558,1559,5,110,0,0,1559,
- 1560,5,117,0,0,1560,1561,5,109,0,0,1561,1562,5,98,0,0,1562,1563,5,101,
- 0,0,1563,1564,5,114,0,0,1564,1565,5,40,0,0,1565,352,1,0,0,0,1566,1567,
- 5,104,0,0,1567,1568,5,97,0,0,1568,1569,5,114,0,0,1569,1570,5,109,0,0,1570,
- 1571,5,111,0,0,1571,1572,5,110,0,0,1572,1573,5,105,0,0,1573,1574,5,99,
- 0,0,1574,1575,5,110,0,0,1575,1576,5,117,0,0,1576,1577,5,109,0,0,1577,1578,
- 5,98,0,0,1578,1579,5,101,0,0,1579,1580,5,114,0,0,1580,1581,5,40,0,0,1581,
- 354,1,0,0,0,1582,1583,5,102,0,0,1583,1584,5,97,0,0,1584,1585,5,108,0,0,
- 1585,1586,5,108,0,0,1586,1587,5,105,0,0,1587,1588,5,110,0,0,1588,1589,
- 5,103,0,0,1589,1590,5,102,0,0,1590,1591,5,97,0,0,1591,1592,5,99,0,0,1592,
- 1593,5,116,0,0,1593,1594,5,111,0,0,1594,1595,5,114,0,0,1595,1596,5,105,
- 0,0,1596,1597,5,97,0,0,1597,1598,5,108,0,0,1598,1599,5,40,0,0,1599,356,
- 1,0,0,0,1600,1601,5,102,0,0,1601,1602,5,97,0,0,1602,1603,5,99,0,0,1603,
- 1604,5,116,0,0,1604,1605,5,111,0,0,1605,1606,5,114,0,0,1606,1607,5,105,
- 0,0,1607,1608,5,97,0,0,1608,1609,5,108,0,0,1609,1610,5,112,0,0,1610,1611,
- 5,111,0,0,1611,1612,5,119,0,0,1612,1613,5,101,0,0,1613,1614,5,114,0,0,
- 1614,1615,5,40,0,0,1615,358,1,0,0,0,1616,1617,5,114,0,0,1617,1618,5,105,
- 0,0,1618,1619,5,115,0,0,1619,1620,5,105,0,0,1620,1621,5,110,0,0,1621,1622,
- 5,103,0,0,1622,1623,5,102,0,0,1623,1624,5,97,0,0,1624,1625,5,99,0,0,1625,
- 1626,5,116,0,0,1626,1627,5,111,0,0,1627,1628,5,114,0,0,1628,1629,5,105,
- 0,0,1629,1630,5,97,0,0,1630,1631,5,108,0,0,1631,1632,5,40,0,0,1632,360,
- 1,0,0,0,1633,1634,5,105,0,0,1634,1635,5,118,0,0,1635,1636,5,101,0,0,1636,
- 1637,5,114,0,0,1637,1638,5,115,0,0,1638,1639,5,111,0,0,1639,1640,5,110,
- 0,0,1640,1641,5,40,0,0,1641,362,1,0,0,0,1642,1643,5,97,0,0,1643,1644,5,
- 108,0,0,1644,1645,5,101,0,0,1645,1646,5,112,0,0,1646,1647,5,104,0,0,1647,
- 1648,5,40,0,0,1648,364,1,0,0,0,1649,1650,5,101,0,0,1650,1651,5,114,0,0,
- 1651,1652,5,102,0,0,1652,1653,5,40,0,0,1653,366,1,0,0,0,1654,1655,5,101,
- 0,0,1655,1656,5,114,0,0,1656,1657,5,102,0,0,1657,1658,5,99,0,0,1658,1659,
- 5,40,0,0,1659,368,1,0,0,0,1660,1661,5,101,0,0,1661,1662,5,114,0,0,1662,
- 1663,5,102,0,0,1663,1664,5,105,0,0,1664,1665,5,40,0,0,1665,370,1,0,0,0,
- 1666,1667,5,69,0,0,1667,1668,5,105,0,0,1668,1669,5,40,0,0,1669,372,1,0,
- 0,0,1670,1671,5,108,0,0,1671,1672,5,105,0,0,1672,1673,5,40,0,0,1673,374,
- 1,0,0,0,1674,1675,5,108,0,0,1675,1676,5,97,0,0,1676,1677,5,109,0,0,1677,
- 1678,5,98,0,0,1678,1679,5,101,0,0,1679,1680,5,114,0,0,1680,1681,5,116,
- 0,0,1681,1682,5,119,0,0,1682,1683,5,40,0,0,1683,376,1,0,0,0,1684,1685,
- 5,112,0,0,1685,1686,5,114,0,0,1686,1687,5,111,0,0,1687,1688,5,100,0,0,
- 1688,1689,5,117,0,0,1689,1690,5,99,0,0,1690,1691,5,116,0,0,1691,1692,5,
- 108,0,0,1692,1693,5,111,0,0,1693,1694,5,103,0,0,1694,1695,5,40,0,0,1695,
- 378,1,0,0,0,1696,1697,5,112,0,0,1697,1698,5,111,0,0,1698,1699,5,108,0,
- 0,1699,1700,5,121,0,0,1700,1701,5,103,0,0,1701,1702,5,97,0,0,1702,1703,
- 5,109,0,0,1703,1704,5,109,0,0,1704,1705,5,97,0,0,1705,1706,5,40,0,0,1706,
- 380,1,0,0,0,1707,1708,5,100,0,0,1708,1709,5,105,0,0,1709,1710,5,103,0,
- 0,1710,1711,5,97,0,0,1711,1712,5,109,0,0,1712,1713,5,109,0,0,1713,1714,
- 5,97,0,0,1714,1715,5,40,0,0,1715,382,1,0,0,0,1716,1717,5,83,0,0,1717,1718,
- 5,105,0,0,1718,1719,5,40,0,0,1719,384,1,0,0,0,1720,1721,5,67,0,0,1721,
- 1722,5,105,0,0,1722,1723,5,40,0,0,1723,386,1,0,0,0,1724,1725,5,83,0,0,
- 1725,1726,5,104,0,0,1726,1727,5,105,0,0,1727,1728,5,40,0,0,1728,388,1,
- 0,0,0,1729,1730,5,67,0,0,1730,1731,5,104,0,0,1731,1732,5,105,0,0,1732,
- 1733,5,40,0,0,1733,390,1,0,0,0,1734,1735,5,100,0,0,1735,1736,5,101,0,0,
- 1736,1737,5,116,0,0,1737,1738,5,40,0,0,1738,392,1,0,0,0,1739,1740,5,116,
- 0,0,1740,1741,5,114,0,0,1741,1742,5,97,0,0,1742,1743,5,110,0,0,1743,1744,
- 5,115,0,0,1744,1745,5,112,0,0,1745,1746,5,111,0,0,1746,1747,5,115,0,0,
- 1747,1748,5,101,0,0,1748,1749,5,40,0,0,1749,394,1,0,0,0,1750,1751,5,100,
- 0,0,1751,1752,5,111,0,0,1752,1753,5,116,0,0,1753,1754,5,40,0,0,1754,396,
- 1,0,0,0,1755,1756,5,99,0,0,1756,1757,5,114,0,0,1757,1758,5,111,0,0,1758,
- 1759,5,115,0,0,1759,1760,5,115,0,0,1760,1761,5,40,0,0,1761,398,1,0,0,0,
- 1762,1763,5,108,0,0,1763,1764,5,97,0,0,1764,1765,5,112,0,0,1765,1766,5,
- 108,0,0,1766,1767,5,97,0,0,1767,1768,5,99,0,0,1768,1769,5,105,0,0,1769,
- 1770,5,97,0,0,1770,1771,5,110,0,0,1771,1772,5,40,0,0,1772,400,1,0,0,0,
- 1773,1774,5,102,0,0,1774,1775,5,111,0,0,1775,1776,5,114,0,0,1776,1777,
- 5,119,0,0,1777,1778,5,97,0,0,1778,1779,5,114,0,0,1779,1780,5,100,0,0,1780,
- 1781,5,100,0,0,1781,1782,5,105,0,0,1782,1783,5,102,0,0,1783,1784,5,102,
- 0,0,1784,1785,5,101,0,0,1785,1786,5,114,0,0,1786,1787,5,101,0,0,1787,1788,
- 5,110,0,0,1788,1789,5,99,0,0,1789,1790,5,101,0,0,1790,1791,5,40,0,0,1791,
- 402,1,0,0,0,1792,1793,5,106,0,0,1793,1794,5,97,0,0,1794,1795,5,99,0,0,
- 1795,1796,5,111,0,0,1796,1797,5,98,0,0,1797,1798,5,105,0,0,1798,1799,5,
- 97,0,0,1799,1800,5,110,0,0,1800,1801,5,40,0,0,1801,404,1,0,0,0,1802,1803,
- 5,104,0,0,1803,1804,5,101,0,0,1804,1805,5,115,0,0,1805,1806,5,115,0,0,
- 1806,1807,5,105,0,0,1807,1808,5,97,0,0,1808,1809,5,110,0,0,1809,1810,5,
- 40,0,0,1810,406,1,0,0,0,1811,1812,5,114,0,0,1812,1813,5,101,0,0,1813,1814,
- 5,115,0,0,1814,1815,5,117,0,0,1815,1816,5,108,0,0,1816,1817,5,116,0,0,
- 1817,1818,5,97,0,0,1818,1819,5,110,0,0,1819,1820,5,116,0,0,1820,1821,5,
- 40,0,0,1821,408,1,0,0,0,1822,1823,5,99,0,0,1823,1824,5,111,0,0,1824,1825,
- 5,110,0,0,1825,1826,5,106,0,0,1826,1827,5,117,0,0,1827,1828,5,103,0,0,
- 1828,1829,5,97,0,0,1829,1830,5,116,0,0,1830,1831,5,101,0,0,1831,1832,5,
- 40,0,0,1832,410,1,0,0,0,1833,1834,5,99,0,0,1834,1835,5,111,0,0,1835,1836,
- 5,110,0,0,1836,1837,5,106,0,0,1837,1838,5,40,0,0,1838,412,1,0,0,0,1839,
- 1840,5,97,0,0,1840,1841,5,114,0,0,1841,1842,5,103,0,0,1842,1843,5,40,0,
- 0,1843,414,1,0,0,0,1844,1845,5,82,0,0,1845,1846,5,101,0,0,1846,1847,5,
- 40,0,0,1847,416,1,0,0,0,1848,1849,5,73,0,0,1849,1850,5,109,0,0,1850,1851,
- 5,40,0,0,1851,418,1,0,0,0,1852,1853,5,114,0,0,1853,1854,5,101,0,0,1854,
- 1855,5,40,0,0,1855,420,1,0,0,0,1856,1857,5,114,0,0,1857,1858,5,101,0,0,
- 1858,1859,5,97,0,0,1859,1860,5,108,0,0,1860,1861,5,40,0,0,1861,422,1,0,
- 0,0,1862,1863,5,105,0,0,1863,1864,5,109,0,0,1864,1865,5,40,0,0,1865,424,
- 1,0,0,0,1866,1867,5,105,0,0,1867,1868,5,109,0,0,1868,1869,5,97,0,0,1869,
- 1870,5,103,0,0,1870,1871,5,40,0,0,1871,426,1,0,0,0,1872,1873,5,116,0,0,
- 1873,1874,5,114,0,0,1874,1875,5,117,0,0,1875,1876,5,110,0,0,1876,1877,
- 5,99,0,0,1877,1878,5,40,0,0,1878,428,1,0,0,0,1879,1880,5,122,0,0,1880,
- 1881,5,101,0,0,1881,1882,5,116,0,0,1882,1883,5,97,0,0,1883,1884,5,40,0,
- 0,1884,430,1,0,0,0,1885,1886,5,114,0,0,1886,1887,5,105,0,0,1887,1888,5,
- 101,0,0,1888,1889,5,109,0,0,1889,1890,5,97,0,0,1890,1891,5,110,0,0,1891,
- 1892,5,110,0,0,1892,1893,5,122,0,0,1893,1894,5,101,0,0,1894,1895,5,116,
- 0,0,1895,1896,5,97,0,0,1896,1897,5,40,0,0,1897,432,1,0,0,0,1898,1899,5,
- 104,0,0,1899,1900,5,117,0,0,1900,1901,5,114,0,0,1901,1902,5,119,0,0,1902,
- 1903,5,105,0,0,1903,1904,5,116,0,0,1904,1905,5,122,0,0,1905,1906,5,122,
- 0,0,1906,1907,5,101,0,0,1907,1908,5,116,0,0,1908,1909,5,97,0,0,1909,1910,
- 5,40,0,0,1910,434,1,0,0,0,1911,1912,5,104,0,0,1912,1913,5,101,0,0,1913,
- 1914,5,97,0,0,1914,1915,5,118,0,0,1915,1916,5,105,0,0,1916,1917,5,115,
- 0,0,1917,1918,5,105,0,0,1918,1919,5,100,0,0,1919,1920,5,101,0,0,1920,1921,
- 5,40,0,0,1921,436,1,0,0,0,1922,1923,5,117,0,0,1923,1924,5,110,0,0,1924,
- 1925,5,105,0,0,1925,1926,5,116,0,0,1926,1927,5,115,0,0,1927,1928,5,116,
- 0,0,1928,1929,5,101,0,0,1929,1930,5,112,0,0,1930,1931,5,40,0,0,1931,438,
- 1,0,0,0,1932,1933,5,105,0,0,1933,1934,5,115,0,0,1934,1935,5,112,0,0,1935,
- 1936,5,114,0,0,1936,1937,5,105,0,0,1937,1938,5,109,0,0,1938,1939,5,101,
- 0,0,1939,1940,5,40,0,0,1940,440,1,0,0,0,1941,1942,5,112,0,0,1942,1943,
- 5,111,0,0,1943,1944,5,99,0,0,1944,1945,5,104,0,0,1945,1946,5,104,0,0,1946,
- 1947,5,97,0,0,1947,1948,5,109,0,0,1948,1949,5,109,0,0,1949,1950,5,101,
- 0,0,1950,1951,5,114,0,0,1951,1952,5,40,0,0,1952,442,1,0,0,0,1953,1954,
- 5,100,0,0,1954,1955,5,111,0,0,1955,1956,5,117,0,0,1956,1957,5,98,0,0,1957,
- 1958,5,108,0,0,1958,1959,5,101,0,0,1959,1960,5,102,0,0,1960,1961,5,97,
- 0,0,1961,1962,5,99,0,0,1962,1963,5,116,0,0,1963,1964,5,111,0,0,1964,1965,
- 5,114,0,0,1965,1966,5,105,0,0,1966,1967,5,97,0,0,1967,1968,5,108,0,0,1968,
- 1969,5,40,0,0,1969,444,1,0,0,0,1970,1971,5,102,0,0,1971,1972,5,97,0,0,
- 1972,1973,5,99,0,0,1973,1974,5,116,0,0,1974,1975,5,111,0,0,1975,1976,5,
- 114,0,0,1976,1977,5,105,0,0,1977,1978,5,97,0,0,1978,1979,5,108,0,0,1979,
- 1980,5,50,0,0,1980,1981,5,40,0,0,1981,446,1,0,0,0,1982,1983,5,102,0,0,
- 1983,1984,5,114,0,0,1984,1985,5,97,0,0,1985,1986,5,99,0,0,1986,1987,5,
- 116,0,0,1987,1988,5,105,0,0,1988,1989,5,111,0,0,1989,1990,5,110,0,0,1990,
- 1991,5,97,0,0,1991,1992,5,108,0,0,1992,1993,5,112,0,0,1993,1994,5,97,0,
- 0,1994,1995,5,114,0,0,1995,1996,5,116,0,0,1996,1997,5,40,0,0,1997,448,
- 1,0,0,0,1998,1999,5,113,0,0,1999,2000,5,117,0,0,2000,2001,5,111,0,0,2001,
- 2002,5,116,0,0,2002,2003,5,105,0,0,2003,2004,5,101,0,0,2004,2005,5,110,
- 0,0,2005,2006,5,116,0,0,2006,2007,5,40,0,0,2007,450,1,0,0,0,2008,2009,
- 5,100,0,0,2009,2010,5,111,0,0,2010,2011,5,109,0,0,2011,2012,5,97,0,0,2012,
- 2013,5,105,0,0,2013,2014,5,110,0,0,2014,2015,5,40,0,0,2015,452,1,0,0,0,
- 2016,2017,5,112,0,0,2017,2018,5,105,0,0,2018,2019,5,101,0,0,2019,2020,
- 5,99,0,0,2020,2021,5,101,0,0,2021,2022,5,119,0,0,2022,2023,5,105,0,0,2023,
- 2024,5,115,0,0,2024,2025,5,101,0,0,2025,2026,5,40,0,0,2026,454,1,0,0,0,
- 2027,2028,5,97,0,0,2028,2029,5,112,0,0,2029,2030,5,112,0,0,2030,2031,5,
- 108,0,0,2031,2032,5,121,0,0,2032,2033,5,40,0,0,2033,456,1,0,0,0,2034,2035,
- 5,108,0,0,2035,2036,5,97,0,0,2036,2037,5,109,0,0,2037,2038,5,98,0,0,2038,
- 2039,5,100,0,0,2039,2040,5,97,0,0,2040,2041,5,40,0,0,2041,458,1,0,0,0,
- 2042,2044,5,13,0,0,2043,2042,1,0,0,0,2043,2044,1,0,0,0,2044,2045,1,0,0,
- 0,2045,2047,5,10,0,0,2046,2043,1,0,0,0,2047,2048,1,0,0,0,2048,2046,1,0,
- 0,0,2048,2049,1,0,0,0,2049,2050,1,0,0,0,2050,2051,6,229,0,0,2051,460,1,
- 0,0,0,2052,2054,7,0,0,0,2053,2055,7,1,0,0,2054,2053,1,0,0,0,2054,2055,
- 1,0,0,0,2055,2057,1,0,0,0,2056,2058,2,48,57,0,2057,2056,1,0,0,0,2058,2059,
- 1,0,0,0,2059,2057,1,0,0,0,2059,2060,1,0,0,0,2060,462,1,0,0,0,2061,2063,
- 2,48,57,0,2062,2061,1,0,0,0,2063,2064,1,0,0,0,2064,2062,1,0,0,0,2064,2065,
- 1,0,0,0,2065,2066,1,0,0,0,2066,2070,5,46,0,0,2067,2069,2,48,57,0,2068,
- 2067,1,0,0,0,2069,2072,1,0,0,0,2070,2068,1,0,0,0,2070,2071,1,0,0,0,2071,
- 2074,1,0,0,0,2072,2070,1,0,0,0,2073,2075,3,461,230,0,2074,2073,1,0,0,0,
- 2074,2075,1,0,0,0,2075,2077,1,0,0,0,2076,2078,5,105,0,0,2077,2076,1,0,
- 0,0,2077,2078,1,0,0,0,2078,2095,1,0,0,0,2079,2081,5,46,0,0,2080,2079,1,
- 0,0,0,2080,2081,1,0,0,0,2081,2083,1,0,0,0,2082,2084,2,48,57,0,2083,2082,
- 1,0,0,0,2084,2085,1,0,0,0,2085,2083,1,0,0,0,2085,2086,1,0,0,0,2086,2088,
- 1,0,0,0,2087,2089,3,461,230,0,2088,2087,1,0,0,0,2088,2089,1,0,0,0,2089,
- 2091,1,0,0,0,2090,2092,5,105,0,0,2091,2090,1,0,0,0,2091,2092,1,0,0,0,2092,
- 2095,1,0,0,0,2093,2095,5,105,0,0,2094,2062,1,0,0,0,2094,2080,1,0,0,0,2094,
- 2093,1,0,0,0,2095,464,1,0,0,0,2096,2097,5,67,0,0,2097,2115,5,67,0,0,2098,
- 2099,5,82,0,0,2099,2115,5,82,0,0,2100,2101,5,81,0,0,2101,2115,5,81,0,0,
- 2102,2103,5,90,0,0,2103,2115,5,90,0,0,2104,2105,5,66,0,0,2105,2115,5,66,
- 0,0,2106,2107,5,90,0,0,2107,2108,5,90,0,0,2108,2115,5,42,0,0,2109,2110,
- 5,90,0,0,2110,2111,5,90,0,0,2111,2115,5,43,0,0,2112,2113,5,80,0,0,2113,
- 2115,5,80,0,0,2114,2096,1,0,0,0,2114,2098,1,0,0,0,2114,2100,1,0,0,0,2114,
- 2102,1,0,0,0,2114,2104,1,0,0,0,2114,2106,1,0,0,0,2114,2109,1,0,0,0,2114,
- 2112,1,0,0,0,2115,466,1,0,0,0,2116,2117,5,116,0,0,2117,2118,5,114,0,0,
- 2118,2119,5,117,0,0,2119,2135,5,101,0,0,2120,2121,5,84,0,0,2121,2122,5,
- 114,0,0,2122,2123,5,117,0,0,2123,2135,5,101,0,0,2124,2125,5,102,0,0,2125,
- 2126,5,97,0,0,2126,2127,5,108,0,0,2127,2128,5,115,0,0,2128,2135,5,101,
- 0,0,2129,2130,5,70,0,0,2130,2131,5,97,0,0,2131,2132,5,108,0,0,2132,2133,
- 5,115,0,0,2133,2135,5,101,0,0,2134,2116,1,0,0,0,2134,2120,1,0,0,0,2134,
- 2124,1,0,0,0,2134,2129,1,0,0,0,2135,468,1,0,0,0,2136,2137,5,78,0,0,2137,
- 2138,5,97,0,0,2138,2139,5,78,0,0,2139,470,1,0,0,0,2140,2142,7,2,0,0,2141,
- 2140,1,0,0,0,2142,2143,1,0,0,0,2143,2141,1,0,0,0,2143,2144,1,0,0,0,2144,
- 2153,1,0,0,0,2145,2147,5,95,0,0,2146,2148,7,3,0,0,2147,2146,1,0,0,0,2148,
- 2149,1,0,0,0,2149,2147,1,0,0,0,2149,2150,1,0,0,0,2150,2152,1,0,0,0,2151,
- 2145,1,0,0,0,2152,2155,1,0,0,0,2153,2151,1,0,0,0,2153,2154,1,0,0,0,2154,
- 472,1,0,0,0,2155,2153,1,0,0,0,2156,2157,5,47,0,0,2157,2158,5,47,0,0,2158,
- 2162,1,0,0,0,2159,2161,8,4,0,0,2160,2159,1,0,0,0,2161,2164,1,0,0,0,2162,
- 2160,1,0,0,0,2162,2163,1,0,0,0,2163,2169,1,0,0,0,2164,2162,1,0,0,0,2165,
- 2167,5,13,0,0,2166,2165,1,0,0,0,2166,2167,1,0,0,0,2167,2168,1,0,0,0,2168,
- 2170,5,10,0,0,2169,2166,1,0,0,0,2169,2170,1,0,0,0,2170,2183,1,0,0,0,2171,
- 2172,5,47,0,0,2172,2173,5,42,0,0,2173,2177,1,0,0,0,2174,2176,9,0,0,0,2175,
- 2174,1,0,0,0,2176,2179,1,0,0,0,2177,2178,1,0,0,0,2177,2175,1,0,0,0,2178,
- 2180,1,0,0,0,2179,2177,1,0,0,0,2180,2181,5,42,0,0,2181,2183,5,47,0,0,2182,
- 2156,1,0,0,0,2182,2171,1,0,0,0,2183,2184,1,0,0,0,2184,2185,6,236,0,0,2185,
- 474,1,0,0,0,2186,2188,7,5,0,0,2187,2186,1,0,0,0,2188,2189,1,0,0,0,2189,
- 2187,1,0,0,0,2189,2190,1,0,0,0,2190,2191,1,0,0,0,2191,2192,6,237,0,0,2192,
- 476,1,0,0,0,25,0,2043,2048,2054,2059,2064,2070,2074,2077,2080,2085,2088,
- 2091,2094,2114,2134,2143,2149,2153,2162,2166,2169,2177,2182,2189,1,6,0,
- 0
+ 1,220,1,220,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,
+ 1,221,1,221,1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,222,
+ 1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,223,1,223,1,223,1,223,1,223,
+ 1,223,1,223,1,223,1,223,1,223,1,223,1,223,1,224,1,224,1,224,1,224,1,224,
+ 1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1,225,
+ 1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,226,1,226,1,226,
+ 1,226,1,226,1,226,1,226,1,226,1,227,1,227,1,227,1,227,1,227,1,227,1,227,
+ 1,227,1,227,1,227,1,227,1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,229,
+ 1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,230,3,230,2053,8,230,1,230,
+ 4,230,2056,8,230,11,230,12,230,2057,1,230,1,230,1,231,1,231,3,231,2064,
+ 8,231,1,231,4,231,2067,8,231,11,231,12,231,2068,1,232,4,232,2072,8,232,
+ 11,232,12,232,2073,1,232,1,232,5,232,2078,8,232,10,232,12,232,2081,9,232,
+ 1,232,3,232,2084,8,232,1,232,3,232,2087,8,232,1,232,3,232,2090,8,232,1,
+ 232,4,232,2093,8,232,11,232,12,232,2094,1,232,3,232,2098,8,232,1,232,3,
+ 232,2101,8,232,1,232,3,232,2104,8,232,1,233,1,233,1,233,1,233,1,233,1,
+ 233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,233,
+ 1,233,3,233,2124,8,233,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,
+ 1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,3,234,2144,
+ 8,234,1,235,1,235,1,235,1,235,1,236,4,236,2151,8,236,11,236,12,236,2152,
+ 1,236,1,236,4,236,2157,8,236,11,236,12,236,2158,5,236,2161,8,236,10,236,
+ 12,236,2164,9,236,1,237,1,237,1,237,1,237,5,237,2170,8,237,10,237,12,237,
+ 2173,9,237,1,237,3,237,2176,8,237,1,237,3,237,2179,8,237,1,237,1,237,1,
+ 237,1,237,5,237,2185,8,237,10,237,12,237,2188,9,237,1,237,1,237,3,237,
+ 2192,8,237,1,237,1,237,1,238,4,238,2197,8,238,11,238,12,238,2198,1,238,
+ 1,238,1,2186,0,239,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,194,389,195,391,196,393,
+ 197,395,198,397,199,399,200,401,201,403,202,405,203,407,204,409,205,411,
+ 206,413,207,415,208,417,209,419,210,421,211,423,212,425,213,427,214,429,
+ 215,431,216,433,217,435,218,437,219,439,220,441,221,443,222,445,223,447,
+ 224,449,225,451,226,453,227,455,228,457,229,459,230,461,231,463,0,465,
+ 232,467,233,469,234,471,235,473,236,475,237,477,238,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,2233,
+ 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,387,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,0,403,1,0,0,0,0,405,1,0,0,0,0,407,1,0,0,0,0,409,1,0,0,
+ 0,0,411,1,0,0,0,0,413,1,0,0,0,0,415,1,0,0,0,0,417,1,0,0,0,0,419,1,0,0,
+ 0,0,421,1,0,0,0,0,423,1,0,0,0,0,425,1,0,0,0,0,427,1,0,0,0,0,429,1,0,0,
+ 0,0,431,1,0,0,0,0,433,1,0,0,0,0,435,1,0,0,0,0,437,1,0,0,0,0,439,1,0,0,
+ 0,0,441,1,0,0,0,0,443,1,0,0,0,0,445,1,0,0,0,0,447,1,0,0,0,0,449,1,0,0,
+ 0,0,451,1,0,0,0,0,453,1,0,0,0,0,455,1,0,0,0,0,457,1,0,0,0,0,459,1,0,0,
+ 0,0,461,1,0,0,0,0,465,1,0,0,0,0,467,1,0,0,0,0,469,1,0,0,0,0,471,1,0,0,
+ 0,0,473,1,0,0,0,0,475,1,0,0,0,0,477,1,0,0,0,1,479,1,0,0,0,3,481,1,0,0,
+ 0,5,483,1,0,0,0,7,485,1,0,0,0,9,488,1,0,0,0,11,492,1,0,0,0,13,494,1,0,
+ 0,0,15,496,1,0,0,0,17,498,1,0,0,0,19,500,1,0,0,0,21,504,1,0,0,0,23,506,
+ 1,0,0,0,25,508,1,0,0,0,27,512,1,0,0,0,29,522,1,0,0,0,31,525,1,0,0,0,33,
+ 531,1,0,0,0,35,534,1,0,0,0,37,546,1,0,0,0,39,548,1,0,0,0,41,551,1,0,0,
+ 0,43,558,1,0,0,0,45,560,1,0,0,0,47,569,1,0,0,0,49,571,1,0,0,0,51,579,1,
+ 0,0,0,53,581,1,0,0,0,55,584,1,0,0,0,57,587,1,0,0,0,59,589,1,0,0,0,61,591,
+ 1,0,0,0,63,593,1,0,0,0,65,596,1,0,0,0,67,598,1,0,0,0,69,600,1,0,0,0,71,
+ 602,1,0,0,0,73,606,1,0,0,0,75,610,1,0,0,0,77,612,1,0,0,0,79,616,1,0,0,
+ 0,81,619,1,0,0,0,83,627,1,0,0,0,85,630,1,0,0,0,87,639,1,0,0,0,89,642,1,
+ 0,0,0,91,644,1,0,0,0,93,651,1,0,0,0,95,653,1,0,0,0,97,661,1,0,0,0,99,664,
+ 1,0,0,0,101,671,1,0,0,0,103,673,1,0,0,0,105,675,1,0,0,0,107,677,1,0,0,
+ 0,109,681,1,0,0,0,111,685,1,0,0,0,113,688,1,0,0,0,115,691,1,0,0,0,117,
+ 693,1,0,0,0,119,696,1,0,0,0,121,698,1,0,0,0,123,700,1,0,0,0,125,705,1,
+ 0,0,0,127,712,1,0,0,0,129,718,1,0,0,0,131,723,1,0,0,0,133,729,1,0,0,0,
+ 135,735,1,0,0,0,137,740,1,0,0,0,139,744,1,0,0,0,141,749,1,0,0,0,143,754,
+ 1,0,0,0,145,759,1,0,0,0,147,764,1,0,0,0,149,771,1,0,0,0,151,776,1,0,0,
+ 0,153,781,1,0,0,0,155,788,1,0,0,0,157,793,1,0,0,0,159,801,1,0,0,0,161,
+ 809,1,0,0,0,163,817,1,0,0,0,165,827,1,0,0,0,167,835,1,0,0,0,169,845,1,
+ 0,0,0,171,853,1,0,0,0,173,859,1,0,0,0,175,865,1,0,0,0,177,871,1,0,0,0,
+ 179,877,1,0,0,0,181,885,1,0,0,0,183,891,1,0,0,0,185,899,1,0,0,0,187,905,
+ 1,0,0,0,189,913,1,0,0,0,191,919,1,0,0,0,193,923,1,0,0,0,195,929,1,0,0,
+ 0,197,933,1,0,0,0,199,939,1,0,0,0,201,943,1,0,0,0,203,951,1,0,0,0,205,
+ 957,1,0,0,0,207,962,1,0,0,0,209,968,1,0,0,0,211,973,1,0,0,0,213,981,1,
+ 0,0,0,215,987,1,0,0,0,217,994,1,0,0,0,219,1002,1,0,0,0,221,1008,1,0,0,
+ 0,223,1017,1,0,0,0,225,1024,1,0,0,0,227,1032,1,0,0,0,229,1038,1,0,0,0,
+ 231,1047,1,0,0,0,233,1054,1,0,0,0,235,1062,1,0,0,0,237,1068,1,0,0,0,239,
+ 1077,1,0,0,0,241,1084,1,0,0,0,243,1092,1,0,0,0,245,1101,1,0,0,0,247,1111,
+ 1,0,0,0,249,1118,1,0,0,0,251,1129,1,0,0,0,253,1136,1,0,0,0,255,1144,1,
+ 0,0,0,257,1151,1,0,0,0,259,1160,1,0,0,0,261,1169,1,0,0,0,263,1179,1,0,
+ 0,0,265,1187,1,0,0,0,267,1198,1,0,0,0,269,1205,1,0,0,0,271,1216,1,0,0,
+ 0,273,1223,1,0,0,0,275,1235,1,0,0,0,277,1245,1,0,0,0,279,1252,1,0,0,0,
+ 281,1263,1,0,0,0,283,1275,1,0,0,0,285,1280,1,0,0,0,287,1289,1,0,0,0,289,
+ 1297,1,0,0,0,291,1302,1,0,0,0,293,1308,1,0,0,0,295,1313,1,0,0,0,297,1318,
+ 1,0,0,0,299,1325,1,0,0,0,301,1336,1,0,0,0,303,1344,1,0,0,0,305,1355,1,
+ 0,0,0,307,1369,1,0,0,0,309,1378,1,0,0,0,311,1390,1,0,0,0,313,1399,1,0,
+ 0,0,315,1405,1,0,0,0,317,1415,1,0,0,0,319,1422,1,0,0,0,321,1436,1,0,0,
+ 0,323,1448,1,0,0,0,325,1455,1,0,0,0,327,1465,1,0,0,0,329,1472,1,0,0,0,
+ 331,1478,1,0,0,0,333,1487,1,0,0,0,335,1494,1,0,0,0,337,1499,1,0,0,0,339,
+ 1504,1,0,0,0,341,1512,1,0,0,0,343,1520,1,0,0,0,345,1525,1,0,0,0,347,1530,
+ 1,0,0,0,349,1540,1,0,0,0,351,1553,1,0,0,0,353,1568,1,0,0,0,355,1584,1,
+ 0,0,0,357,1602,1,0,0,0,359,1618,1,0,0,0,361,1635,1,0,0,0,363,1644,1,0,
+ 0,0,365,1651,1,0,0,0,367,1656,1,0,0,0,369,1662,1,0,0,0,371,1668,1,0,0,
+ 0,373,1672,1,0,0,0,375,1676,1,0,0,0,377,1686,1,0,0,0,379,1698,1,0,0,0,
+ 381,1709,1,0,0,0,383,1718,1,0,0,0,385,1722,1,0,0,0,387,1726,1,0,0,0,389,
+ 1731,1,0,0,0,391,1736,1,0,0,0,393,1741,1,0,0,0,395,1752,1,0,0,0,397,1759,
+ 1,0,0,0,399,1764,1,0,0,0,401,1771,1,0,0,0,403,1782,1,0,0,0,405,1801,1,
+ 0,0,0,407,1811,1,0,0,0,409,1820,1,0,0,0,411,1831,1,0,0,0,413,1842,1,0,
+ 0,0,415,1848,1,0,0,0,417,1853,1,0,0,0,419,1857,1,0,0,0,421,1861,1,0,0,
+ 0,423,1865,1,0,0,0,425,1871,1,0,0,0,427,1875,1,0,0,0,429,1881,1,0,0,0,
+ 431,1888,1,0,0,0,433,1894,1,0,0,0,435,1907,1,0,0,0,437,1920,1,0,0,0,439,
+ 1931,1,0,0,0,441,1941,1,0,0,0,443,1950,1,0,0,0,445,1962,1,0,0,0,447,1979,
+ 1,0,0,0,449,1991,1,0,0,0,451,2007,1,0,0,0,453,2017,1,0,0,0,455,2025,1,
+ 0,0,0,457,2036,1,0,0,0,459,2043,1,0,0,0,461,2055,1,0,0,0,463,2061,1,0,
+ 0,0,465,2103,1,0,0,0,467,2123,1,0,0,0,469,2143,1,0,0,0,471,2145,1,0,0,
+ 0,473,2150,1,0,0,0,475,2191,1,0,0,0,477,2196,1,0,0,0,479,480,5,91,0,0,
+ 480,2,1,0,0,0,481,482,5,93,0,0,482,4,1,0,0,0,483,484,5,33,0,0,484,6,1,
+ 0,0,0,485,486,5,33,0,0,486,487,5,33,0,0,487,8,1,0,0,0,488,489,5,33,0,0,
+ 489,490,5,33,0,0,490,491,5,33,0,0,491,10,1,0,0,0,492,493,5,94,0,0,493,
+ 12,1,0,0,0,494,495,5,45,0,0,495,14,1,0,0,0,496,497,5,43,0,0,497,16,1,0,
+ 0,0,498,499,5,42,0,0,499,18,1,0,0,0,500,501,5,46,0,0,501,502,5,46,0,0,
+ 502,503,5,46,0,0,503,20,1,0,0,0,504,505,5,8230,0,0,505,22,1,0,0,0,506,
+ 507,5,47,0,0,507,24,1,0,0,0,508,509,5,109,0,0,509,510,5,111,0,0,510,511,
+ 5,100,0,0,511,26,1,0,0,0,512,513,5,105,0,0,513,514,5,110,0,0,514,515,5,
+ 116,0,0,515,516,5,101,0,0,516,517,5,114,0,0,517,518,5,115,0,0,518,519,
+ 5,101,0,0,519,520,5,99,0,0,520,521,5,116,0,0,521,28,1,0,0,0,522,523,5,
+ 47,0,0,523,524,5,92,0,0,524,30,1,0,0,0,525,526,5,117,0,0,526,527,5,110,
+ 0,0,527,528,5,105,0,0,528,529,5,116,0,0,529,530,5,101,0,0,530,32,1,0,0,
+ 0,531,532,5,92,0,0,532,533,5,47,0,0,533,34,1,0,0,0,534,535,5,115,0,0,535,
+ 536,5,101,0,0,536,537,5,116,0,0,537,538,5,115,0,0,538,539,5,117,0,0,539,
+ 540,5,98,0,0,540,541,5,116,0,0,541,542,5,114,0,0,542,543,5,97,0,0,543,
+ 544,5,99,0,0,544,545,5,116,0,0,545,36,1,0,0,0,546,547,5,92,0,0,547,38,
+ 1,0,0,0,548,549,5,105,0,0,549,550,5,110,0,0,550,40,1,0,0,0,551,552,5,115,
+ 0,0,552,553,5,117,0,0,553,554,5,98,0,0,554,555,5,115,0,0,555,556,5,101,
+ 0,0,556,557,5,116,0,0,557,42,1,0,0,0,558,559,5,8838,0,0,559,44,1,0,0,0,
+ 560,561,5,115,0,0,561,562,5,117,0,0,562,563,5,112,0,0,563,564,5,101,0,
+ 0,564,565,5,114,0,0,565,566,5,115,0,0,566,567,5,101,0,0,567,568,5,116,
+ 0,0,568,46,1,0,0,0,569,570,5,8839,0,0,570,48,1,0,0,0,571,572,5,100,0,0,
+ 572,573,5,105,0,0,573,574,5,118,0,0,574,575,5,105,0,0,575,576,5,100,0,
+ 0,576,577,5,101,0,0,577,578,5,115,0,0,578,50,1,0,0,0,579,580,5,124,0,0,
+ 580,52,1,0,0,0,581,582,5,62,0,0,582,583,5,61,0,0,583,54,1,0,0,0,584,585,
+ 5,60,0,0,585,586,5,61,0,0,586,56,1,0,0,0,587,588,5,62,0,0,588,58,1,0,0,
+ 0,589,590,5,60,0,0,590,60,1,0,0,0,591,592,5,61,0,0,592,62,1,0,0,0,593,
+ 594,5,60,0,0,594,595,5,62,0,0,595,64,1,0,0,0,596,597,5,8801,0,0,597,66,
+ 1,0,0,0,598,599,5,40,0,0,599,68,1,0,0,0,600,601,5,41,0,0,601,70,1,0,0,
+ 0,602,603,5,110,0,0,603,604,5,111,0,0,604,605,5,116,0,0,605,72,1,0,0,0,
+ 606,607,5,97,0,0,607,608,5,110,0,0,608,609,5,100,0,0,609,74,1,0,0,0,610,
+ 611,5,38,0,0,611,76,1,0,0,0,612,613,5,120,0,0,613,614,5,111,0,0,614,615,
+ 5,114,0,0,615,78,1,0,0,0,616,617,5,111,0,0,617,618,5,114,0,0,618,80,1,
+ 0,0,0,619,620,5,105,0,0,620,621,5,109,0,0,621,622,5,112,0,0,622,623,5,
+ 108,0,0,623,624,5,105,0,0,624,625,5,101,0,0,625,626,5,115,0,0,626,82,1,
+ 0,0,0,627,628,5,45,0,0,628,629,5,62,0,0,629,84,1,0,0,0,630,631,5,112,0,
+ 0,631,632,5,114,0,0,632,633,5,111,0,0,633,634,5,118,0,0,634,635,5,105,
+ 0,0,635,636,5,100,0,0,636,637,5,101,0,0,637,638,5,100,0,0,638,86,1,0,0,
+ 0,639,640,5,61,0,0,640,641,5,62,0,0,641,88,1,0,0,0,642,643,5,58,0,0,643,
+ 90,1,0,0,0,644,645,5,102,0,0,645,646,5,111,0,0,646,647,5,114,0,0,647,648,
+ 5,97,0,0,648,649,5,108,0,0,649,650,5,108,0,0,650,92,1,0,0,0,651,652,5,
+ 8704,0,0,652,94,1,0,0,0,653,654,5,101,0,0,654,655,5,120,0,0,655,656,5,
+ 105,0,0,656,657,5,115,0,0,657,658,5,116,0,0,658,659,5,115,0,0,659,660,
+ 5,33,0,0,660,96,1,0,0,0,661,662,5,8707,0,0,662,663,5,33,0,0,663,98,1,0,
+ 0,0,664,665,5,101,0,0,665,666,5,120,0,0,666,667,5,105,0,0,667,668,5,115,
+ 0,0,668,669,5,116,0,0,669,670,5,115,0,0,670,100,1,0,0,0,671,672,5,8707,
+ 0,0,672,102,1,0,0,0,673,674,5,44,0,0,674,104,1,0,0,0,675,676,5,59,0,0,
+ 676,106,1,0,0,0,677,678,5,43,0,0,678,679,5,111,0,0,679,680,5,111,0,0,680,
+ 108,1,0,0,0,681,682,5,45,0,0,682,683,5,111,0,0,683,684,5,111,0,0,684,110,
+ 1,0,0,0,685,686,5,40,0,0,686,687,5,124,0,0,687,112,1,0,0,0,688,689,5,124,
+ 0,0,689,690,5,41,0,0,690,114,1,0,0,0,691,692,5,35,0,0,692,116,1,0,0,0,
+ 693,694,5,93,0,0,694,695,5,84,0,0,695,118,1,0,0,0,696,697,5,123,0,0,697,
+ 120,1,0,0,0,698,699,5,125,0,0,699,122,1,0,0,0,700,701,5,108,0,0,701,702,
+ 5,111,0,0,702,703,5,103,0,0,703,704,5,40,0,0,704,124,1,0,0,0,705,706,5,
+ 108,0,0,706,707,5,111,0,0,707,708,5,103,0,0,708,709,5,49,0,0,709,710,5,
+ 48,0,0,710,711,5,40,0,0,711,126,1,0,0,0,712,713,5,108,0,0,713,714,5,111,
+ 0,0,714,715,5,103,0,0,715,716,5,50,0,0,716,717,5,40,0,0,717,128,1,0,0,
+ 0,718,719,5,112,0,0,719,720,5,111,0,0,720,721,5,119,0,0,721,722,5,40,0,
+ 0,722,130,1,0,0,0,723,724,5,115,0,0,724,725,5,113,0,0,725,726,5,114,0,
+ 0,726,727,5,116,0,0,727,728,5,40,0,0,728,132,1,0,0,0,729,730,5,99,0,0,
+ 730,731,5,98,0,0,731,732,5,114,0,0,732,733,5,116,0,0,733,734,5,40,0,0,
+ 734,134,1,0,0,0,735,736,5,115,0,0,736,737,5,113,0,0,737,738,5,114,0,0,
+ 738,739,5,40,0,0,739,136,1,0,0,0,740,741,5,108,0,0,741,742,5,110,0,0,742,
+ 743,5,40,0,0,743,138,1,0,0,0,744,745,5,101,0,0,745,746,5,120,0,0,746,747,
+ 5,112,0,0,747,748,5,40,0,0,748,140,1,0,0,0,749,750,5,115,0,0,750,751,5,
+ 105,0,0,751,752,5,110,0,0,752,753,5,40,0,0,753,142,1,0,0,0,754,755,5,99,
+ 0,0,755,756,5,111,0,0,756,757,5,115,0,0,757,758,5,40,0,0,758,144,1,0,0,
+ 0,759,760,5,116,0,0,760,761,5,97,0,0,761,762,5,110,0,0,762,763,5,40,0,
+ 0,763,146,1,0,0,0,764,765,5,99,0,0,765,766,5,111,0,0,766,767,5,116,0,0,
+ 767,768,5,97,0,0,768,769,5,110,0,0,769,770,5,40,0,0,770,148,1,0,0,0,771,
+ 772,5,99,0,0,772,773,5,111,0,0,773,774,5,116,0,0,774,775,5,40,0,0,775,
+ 150,1,0,0,0,776,777,5,115,0,0,777,778,5,101,0,0,778,779,5,99,0,0,779,780,
+ 5,40,0,0,780,152,1,0,0,0,781,782,5,99,0,0,782,783,5,111,0,0,783,784,5,
+ 115,0,0,784,785,5,101,0,0,785,786,5,99,0,0,786,787,5,40,0,0,787,154,1,
+ 0,0,0,788,789,5,99,0,0,789,790,5,115,0,0,790,791,5,99,0,0,791,792,5,40,
+ 0,0,792,156,1,0,0,0,793,794,5,97,0,0,794,795,5,114,0,0,795,796,5,99,0,
+ 0,796,797,5,115,0,0,797,798,5,105,0,0,798,799,5,110,0,0,799,800,5,40,0,
+ 0,800,158,1,0,0,0,801,802,5,97,0,0,802,803,5,114,0,0,803,804,5,99,0,0,
+ 804,805,5,99,0,0,805,806,5,111,0,0,806,807,5,115,0,0,807,808,5,40,0,0,
+ 808,160,1,0,0,0,809,810,5,97,0,0,810,811,5,114,0,0,811,812,5,99,0,0,812,
+ 813,5,116,0,0,813,814,5,97,0,0,814,815,5,110,0,0,815,816,5,40,0,0,816,
+ 162,1,0,0,0,817,818,5,97,0,0,818,819,5,114,0,0,819,820,5,99,0,0,820,821,
+ 5,99,0,0,821,822,5,111,0,0,822,823,5,116,0,0,823,824,5,97,0,0,824,825,
+ 5,110,0,0,825,826,5,40,0,0,826,164,1,0,0,0,827,828,5,97,0,0,828,829,5,
+ 114,0,0,829,830,5,99,0,0,830,831,5,115,0,0,831,832,5,101,0,0,832,833,5,
+ 99,0,0,833,834,5,40,0,0,834,166,1,0,0,0,835,836,5,97,0,0,836,837,5,114,
+ 0,0,837,838,5,99,0,0,838,839,5,99,0,0,839,840,5,111,0,0,840,841,5,115,
+ 0,0,841,842,5,101,0,0,842,843,5,99,0,0,843,844,5,40,0,0,844,168,1,0,0,
+ 0,845,846,5,97,0,0,846,847,5,114,0,0,847,848,5,99,0,0,848,849,5,99,0,0,
+ 849,850,5,115,0,0,850,851,5,99,0,0,851,852,5,40,0,0,852,170,1,0,0,0,853,
+ 854,5,97,0,0,854,855,5,99,0,0,855,856,5,115,0,0,856,857,5,99,0,0,857,858,
+ 5,40,0,0,858,172,1,0,0,0,859,860,5,97,0,0,860,861,5,115,0,0,861,862,5,
+ 105,0,0,862,863,5,110,0,0,863,864,5,40,0,0,864,174,1,0,0,0,865,866,5,97,
+ 0,0,866,867,5,99,0,0,867,868,5,111,0,0,868,869,5,115,0,0,869,870,5,40,
+ 0,0,870,176,1,0,0,0,871,872,5,97,0,0,872,873,5,116,0,0,873,874,5,97,0,
+ 0,874,875,5,110,0,0,875,876,5,40,0,0,876,178,1,0,0,0,877,878,5,97,0,0,
+ 878,879,5,99,0,0,879,880,5,111,0,0,880,881,5,116,0,0,881,882,5,97,0,0,
+ 882,883,5,110,0,0,883,884,5,40,0,0,884,180,1,0,0,0,885,886,5,97,0,0,886,
+ 887,5,115,0,0,887,888,5,101,0,0,888,889,5,99,0,0,889,890,5,40,0,0,890,
+ 182,1,0,0,0,891,892,5,97,0,0,892,893,5,99,0,0,893,894,5,111,0,0,894,895,
+ 5,115,0,0,895,896,5,101,0,0,896,897,5,99,0,0,897,898,5,40,0,0,898,184,
+ 1,0,0,0,899,900,5,97,0,0,900,901,5,99,0,0,901,902,5,111,0,0,902,903,5,
+ 116,0,0,903,904,5,40,0,0,904,186,1,0,0,0,905,906,5,97,0,0,906,907,5,114,
+ 0,0,907,908,5,99,0,0,908,909,5,99,0,0,909,910,5,111,0,0,910,911,5,116,
+ 0,0,911,912,5,40,0,0,912,188,1,0,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,190,1,0,0,0,
+ 919,920,5,115,0,0,920,921,5,104,0,0,921,922,5,40,0,0,922,192,1,0,0,0,923,
+ 924,5,99,0,0,924,925,5,111,0,0,925,926,5,115,0,0,926,927,5,104,0,0,927,
+ 928,5,40,0,0,928,194,1,0,0,0,929,930,5,99,0,0,930,931,5,104,0,0,931,932,
+ 5,40,0,0,932,196,1,0,0,0,933,934,5,116,0,0,934,935,5,97,0,0,935,936,5,
+ 110,0,0,936,937,5,104,0,0,937,938,5,40,0,0,938,198,1,0,0,0,939,940,5,116,
+ 0,0,940,941,5,104,0,0,941,942,5,40,0,0,942,200,1,0,0,0,943,944,5,99,0,
+ 0,944,945,5,111,0,0,945,946,5,116,0,0,946,947,5,97,0,0,947,948,5,110,0,
+ 0,948,949,5,104,0,0,949,950,5,40,0,0,950,202,1,0,0,0,951,952,5,99,0,0,
+ 952,953,5,111,0,0,953,954,5,116,0,0,954,955,5,104,0,0,955,956,5,40,0,0,
+ 956,204,1,0,0,0,957,958,5,99,0,0,958,959,5,116,0,0,959,960,5,104,0,0,960,
+ 961,5,40,0,0,961,206,1,0,0,0,962,963,5,115,0,0,963,964,5,101,0,0,964,965,
+ 5,99,0,0,965,966,5,104,0,0,966,967,5,40,0,0,967,208,1,0,0,0,968,969,5,
+ 115,0,0,969,970,5,99,0,0,970,971,5,104,0,0,971,972,5,40,0,0,972,210,1,
+ 0,0,0,973,974,5,99,0,0,974,975,5,111,0,0,975,976,5,115,0,0,976,977,5,101,
+ 0,0,977,978,5,99,0,0,978,979,5,104,0,0,979,980,5,40,0,0,980,212,1,0,0,
+ 0,981,982,5,99,0,0,982,983,5,115,0,0,983,984,5,99,0,0,984,985,5,104,0,
+ 0,985,986,5,40,0,0,986,214,1,0,0,0,987,988,5,97,0,0,988,989,5,115,0,0,
+ 989,990,5,105,0,0,990,991,5,110,0,0,991,992,5,104,0,0,992,993,5,40,0,0,
+ 993,216,1,0,0,0,994,995,5,97,0,0,995,996,5,114,0,0,996,997,5,115,0,0,997,
+ 998,5,105,0,0,998,999,5,110,0,0,999,1000,5,104,0,0,1000,1001,5,40,0,0,
+ 1001,218,1,0,0,0,1002,1003,5,97,0,0,1003,1004,5,114,0,0,1004,1005,5,115,
+ 0,0,1005,1006,5,104,0,0,1006,1007,5,40,0,0,1007,220,1,0,0,0,1008,1009,
+ 5,97,0,0,1009,1010,5,114,0,0,1010,1011,5,99,0,0,1011,1012,5,115,0,0,1012,
+ 1013,5,105,0,0,1013,1014,5,110,0,0,1014,1015,5,104,0,0,1015,1016,5,40,
+ 0,0,1016,222,1,0,0,0,1017,1018,5,97,0,0,1018,1019,5,99,0,0,1019,1020,5,
+ 111,0,0,1020,1021,5,115,0,0,1021,1022,5,104,0,0,1022,1023,5,40,0,0,1023,
+ 224,1,0,0,0,1024,1025,5,97,0,0,1025,1026,5,114,0,0,1026,1027,5,99,0,0,
+ 1027,1028,5,111,0,0,1028,1029,5,115,0,0,1029,1030,5,104,0,0,1030,1031,
+ 5,40,0,0,1031,226,1,0,0,0,1032,1033,5,97,0,0,1033,1034,5,114,0,0,1034,
+ 1035,5,99,0,0,1035,1036,5,104,0,0,1036,1037,5,40,0,0,1037,228,1,0,0,0,
+ 1038,1039,5,97,0,0,1039,1040,5,114,0,0,1040,1041,5,99,0,0,1041,1042,5,
+ 99,0,0,1042,1043,5,111,0,0,1043,1044,5,115,0,0,1044,1045,5,104,0,0,1045,
+ 1046,5,40,0,0,1046,230,1,0,0,0,1047,1048,5,97,0,0,1048,1049,5,116,0,0,
+ 1049,1050,5,97,0,0,1050,1051,5,110,0,0,1051,1052,5,104,0,0,1052,1053,5,
+ 40,0,0,1053,232,1,0,0,0,1054,1055,5,97,0,0,1055,1056,5,114,0,0,1056,1057,
+ 5,116,0,0,1057,1058,5,97,0,0,1058,1059,5,110,0,0,1059,1060,5,104,0,0,1060,
+ 1061,5,40,0,0,1061,234,1,0,0,0,1062,1063,5,97,0,0,1063,1064,5,114,0,0,
+ 1064,1065,5,116,0,0,1065,1066,5,104,0,0,1066,1067,5,40,0,0,1067,236,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,116,0,0,1072,1073,5,97,0,0,1073,1074,5,110,0,0,1074,1075,5,104,0,0,1075,
+ 1076,5,40,0,0,1076,238,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,116,0,0,1081,1082,5,104,0,0,1082,1083,5,40,
+ 0,0,1083,240,1,0,0,0,1084,1085,5,97,0,0,1085,1086,5,114,0,0,1086,1087,
+ 5,99,0,0,1087,1088,5,111,0,0,1088,1089,5,116,0,0,1089,1090,5,104,0,0,1090,
+ 1091,5,40,0,0,1091,242,1,0,0,0,1092,1093,5,97,0,0,1093,1094,5,99,0,0,1094,
+ 1095,5,111,0,0,1095,1096,5,116,0,0,1096,1097,5,97,0,0,1097,1098,5,110,
+ 0,0,1098,1099,5,104,0,0,1099,1100,5,40,0,0,1100,244,1,0,0,0,1101,1102,
+ 5,97,0,0,1102,1103,5,114,0,0,1103,1104,5,99,0,0,1104,1105,5,111,0,0,1105,
+ 1106,5,116,0,0,1106,1107,5,97,0,0,1107,1108,5,110,0,0,1108,1109,5,104,
+ 0,0,1109,1110,5,40,0,0,1110,246,1,0,0,0,1111,1112,5,97,0,0,1112,1113,5,
+ 114,0,0,1113,1114,5,99,0,0,1114,1115,5,116,0,0,1115,1116,5,104,0,0,1116,
+ 1117,5,40,0,0,1117,248,1,0,0,0,1118,1119,5,97,0,0,1119,1120,5,114,0,0,
+ 1120,1121,5,99,0,0,1121,1122,5,99,0,0,1122,1123,5,111,0,0,1123,1124,5,
+ 116,0,0,1124,1125,5,97,0,0,1125,1126,5,110,0,0,1126,1127,5,104,0,0,1127,
+ 1128,5,40,0,0,1128,250,1,0,0,0,1129,1130,5,97,0,0,1130,1131,5,115,0,0,
+ 1131,1132,5,101,0,0,1132,1133,5,99,0,0,1133,1134,5,104,0,0,1134,1135,5,
+ 40,0,0,1135,252,1,0,0,0,1136,1137,5,97,0,0,1137,1138,5,114,0,0,1138,1139,
+ 5,115,0,0,1139,1140,5,101,0,0,1140,1141,5,99,0,0,1141,1142,5,104,0,0,1142,
+ 1143,5,40,0,0,1143,254,1,0,0,0,1144,1145,5,97,0,0,1145,1146,5,114,0,0,
+ 1146,1147,5,115,0,0,1147,1148,5,99,0,0,1148,1149,5,104,0,0,1149,1150,5,
+ 40,0,0,1150,256,1,0,0,0,1151,1152,5,97,0,0,1152,1153,5,114,0,0,1153,1154,
+ 5,99,0,0,1154,1155,5,115,0,0,1155,1156,5,101,0,0,1156,1157,5,99,0,0,1157,
+ 1158,5,104,0,0,1158,1159,5,40,0,0,1159,258,1,0,0,0,1160,1161,5,97,0,0,
+ 1161,1162,5,99,0,0,1162,1163,5,111,0,0,1163,1164,5,115,0,0,1164,1165,5,
+ 101,0,0,1165,1166,5,99,0,0,1166,1167,5,104,0,0,1167,1168,5,40,0,0,1168,
+ 260,1,0,0,0,1169,1170,5,97,0,0,1170,1171,5,114,0,0,1171,1172,5,99,0,0,
+ 1172,1173,5,111,0,0,1173,1174,5,115,0,0,1174,1175,5,101,0,0,1175,1176,
+ 5,99,0,0,1176,1177,5,104,0,0,1177,1178,5,40,0,0,1178,262,1,0,0,0,1179,
+ 1180,5,97,0,0,1180,1181,5,114,0,0,1181,1182,5,99,0,0,1182,1183,5,115,0,
+ 0,1183,1184,5,99,0,0,1184,1185,5,104,0,0,1185,1186,5,40,0,0,1186,264,1,
+ 0,0,0,1187,1188,5,97,0,0,1188,1189,5,114,0,0,1189,1190,5,99,0,0,1190,1191,
+ 5,99,0,0,1191,1192,5,111,0,0,1192,1193,5,115,0,0,1193,1194,5,101,0,0,1194,
+ 1195,5,99,0,0,1195,1196,5,104,0,0,1196,1197,5,40,0,0,1197,266,1,0,0,0,
+ 1198,1199,5,97,0,0,1199,1200,5,99,0,0,1200,1201,5,115,0,0,1201,1202,5,
+ 99,0,0,1202,1203,5,104,0,0,1203,1204,5,40,0,0,1204,268,1,0,0,0,1205,1206,
+ 5,102,0,0,1206,1207,5,97,0,0,1207,1208,5,99,0,0,1208,1209,5,116,0,0,1209,
+ 1210,5,111,0,0,1210,1211,5,114,0,0,1211,1212,5,105,0,0,1212,1213,5,97,
+ 0,0,1213,1214,5,108,0,0,1214,1215,5,40,0,0,1215,270,1,0,0,0,1216,1217,
+ 5,103,0,0,1217,1218,5,97,0,0,1218,1219,5,109,0,0,1219,1220,5,109,0,0,1220,
+ 1221,5,97,0,0,1221,1222,5,40,0,0,1222,272,1,0,0,0,1223,1224,5,100,0,0,
+ 1224,1225,5,101,0,0,1225,1226,5,114,0,0,1226,1227,5,105,0,0,1227,1228,
+ 5,118,0,0,1228,1229,5,97,0,0,1229,1230,5,116,0,0,1230,1231,5,105,0,0,1231,
+ 1232,5,118,0,0,1232,1233,5,101,0,0,1233,1234,5,40,0,0,1234,274,1,0,0,0,
+ 1235,1236,5,105,0,0,1236,1237,5,110,0,0,1237,1238,5,116,0,0,1238,1239,
+ 5,101,0,0,1239,1240,5,103,0,0,1240,1241,5,114,0,0,1241,1242,5,97,0,0,1242,
+ 1243,5,108,0,0,1243,1244,5,40,0,0,1244,276,1,0,0,0,1245,1246,5,108,0,0,
+ 1246,1247,5,105,0,0,1247,1248,5,109,0,0,1248,1249,5,105,0,0,1249,1250,
+ 5,116,0,0,1250,1251,5,40,0,0,1251,278,1,0,0,0,1252,1253,5,108,0,0,1253,
+ 1254,5,105,0,0,1254,1255,5,109,0,0,1255,1256,5,105,0,0,1256,1257,5,116,
+ 0,0,1257,1258,5,108,0,0,1258,1259,5,101,0,0,1259,1260,5,102,0,0,1260,1261,
+ 5,116,0,0,1261,1262,5,40,0,0,1262,280,1,0,0,0,1263,1264,5,108,0,0,1264,
+ 1265,5,105,0,0,1265,1266,5,109,0,0,1266,1267,5,105,0,0,1267,1268,5,116,
+ 0,0,1268,1269,5,114,0,0,1269,1270,5,105,0,0,1270,1271,5,103,0,0,1271,1272,
+ 5,104,0,0,1272,1273,5,116,0,0,1273,1274,5,40,0,0,1274,282,1,0,0,0,1275,
+ 1276,5,115,0,0,1276,1277,5,117,0,0,1277,1278,5,109,0,0,1278,1279,5,40,
+ 0,0,1279,284,1,0,0,0,1280,1281,5,112,0,0,1281,1282,5,114,0,0,1282,1283,
+ 5,111,0,0,1283,1284,5,100,0,0,1284,1285,5,117,0,0,1285,1286,5,99,0,0,1286,
+ 1287,5,116,0,0,1287,1288,5,40,0,0,1288,286,1,0,0,0,1289,1290,5,115,0,0,
+ 1290,1291,5,105,0,0,1291,1292,5,103,0,0,1292,1293,5,110,0,0,1293,1294,
+ 5,117,0,0,1294,1295,5,109,0,0,1295,1296,5,40,0,0,1296,288,1,0,0,0,1297,
+ 1298,5,115,0,0,1298,1299,5,103,0,0,1299,1300,5,110,0,0,1300,1301,5,40,
+ 0,0,1301,290,1,0,0,0,1302,1303,5,115,0,0,1303,1304,5,105,0,0,1304,1305,
+ 5,103,0,0,1305,1306,5,110,0,0,1306,1307,5,40,0,0,1307,292,1,0,0,0,1308,
+ 1309,5,97,0,0,1309,1310,5,98,0,0,1310,1311,5,115,0,0,1311,1312,5,40,0,
+ 0,1312,294,1,0,0,0,1313,1314,5,112,0,0,1314,1315,5,104,0,0,1315,1316,5,
+ 105,0,0,1316,1317,5,40,0,0,1317,296,1,0,0,0,1318,1319,5,112,0,0,1319,1320,
+ 5,114,0,0,1320,1321,5,105,0,0,1321,1322,5,109,0,0,1322,1323,5,101,0,0,
+ 1323,1324,5,40,0,0,1324,298,1,0,0,0,1325,1326,5,118,0,0,1326,1327,5,97,
+ 0,0,1327,1328,5,108,0,0,1328,1329,5,117,0,0,1329,1330,5,97,0,0,1330,1331,
+ 5,116,0,0,1331,1332,5,105,0,0,1332,1333,5,111,0,0,1333,1334,5,110,0,0,
+ 1334,1335,5,40,0,0,1335,300,1,0,0,0,1336,1337,5,109,0,0,1337,1338,5,111,
+ 0,0,1338,1339,5,98,0,0,1339,1340,5,105,0,0,1340,1341,5,117,0,0,1341,1342,
+ 5,115,0,0,1342,1343,5,40,0,0,1343,302,1,0,0,0,1344,1345,5,109,0,0,1345,
+ 1346,5,111,0,0,1346,1347,5,101,0,0,1347,1348,5,98,0,0,1348,1349,5,105,
+ 0,0,1349,1350,5,117,0,0,1350,1351,5,115,0,0,1351,1352,5,109,0,0,1352,1353,
+ 5,117,0,0,1353,1354,5,40,0,0,1354,304,1,0,0,0,1355,1356,5,100,0,0,1356,
+ 1357,5,105,0,0,1357,1358,5,118,0,0,1358,1359,5,105,0,0,1359,1360,5,115,
+ 0,0,1360,1361,5,111,0,0,1361,1362,5,114,0,0,1362,1363,5,115,0,0,1363,1364,
+ 5,105,0,0,1364,1365,5,103,0,0,1365,1366,5,109,0,0,1366,1367,5,97,0,0,1367,
+ 1368,5,40,0,0,1368,306,1,0,0,0,1369,1370,5,112,0,0,1370,1371,5,114,0,0,
+ 1371,1372,5,105,0,0,1372,1373,5,109,0,0,1373,1374,5,101,0,0,1374,1375,
+ 5,110,0,0,1375,1376,5,117,0,0,1376,1377,5,40,0,0,1377,308,1,0,0,0,1378,
+ 1379,5,112,0,0,1379,1380,5,114,0,0,1380,1381,5,105,0,0,1381,1382,5,109,
+ 0,0,1382,1383,5,101,0,0,1383,1384,5,111,0,0,1384,1385,5,109,0,0,1385,1386,
+ 5,101,0,0,1386,1387,5,103,0,0,1387,1388,5,97,0,0,1388,1389,5,40,0,0,1389,
+ 310,1,0,0,0,1390,1391,5,112,0,0,1391,1392,5,114,0,0,1392,1393,5,105,0,
+ 0,1393,1394,5,109,0,0,1394,1395,5,101,0,0,1395,1396,5,112,0,0,1396,1397,
+ 5,105,0,0,1397,1398,5,40,0,0,1398,312,1,0,0,0,1399,1400,5,99,0,0,1400,
+ 1401,5,97,0,0,1401,1402,5,114,0,0,1402,1403,5,100,0,0,1403,1404,5,40,0,
+ 0,1404,314,1,0,0,0,1405,1406,5,112,0,0,1406,1407,5,111,0,0,1407,1408,5,
+ 119,0,0,1408,1409,5,101,0,0,1409,1410,5,114,0,0,1410,1411,5,115,0,0,1411,
+ 1412,5,101,0,0,1412,1413,5,116,0,0,1413,1414,5,40,0,0,1414,316,1,0,0,0,
+ 1415,1416,5,117,0,0,1416,1417,5,110,0,0,1417,1418,5,105,0,0,1418,1419,
+ 5,111,0,0,1419,1420,5,110,0,0,1420,1421,5,40,0,0,1421,318,1,0,0,0,1422,
+ 1423,5,105,0,0,1423,1424,5,110,0,0,1424,1425,5,116,0,0,1425,1426,5,101,
+ 0,0,1426,1427,5,114,0,0,1427,1428,5,115,0,0,1428,1429,5,101,0,0,1429,1430,
+ 5,99,0,0,1430,1431,5,116,0,0,1431,1432,5,105,0,0,1432,1433,5,111,0,0,1433,
+ 1434,5,110,0,0,1434,1435,5,40,0,0,1435,320,1,0,0,0,1436,1437,5,99,0,0,
+ 1437,1438,5,111,0,0,1438,1439,5,109,0,0,1439,1440,5,112,0,0,1440,1441,
+ 5,108,0,0,1441,1442,5,101,0,0,1442,1443,5,109,0,0,1443,1444,5,101,0,0,
+ 1444,1445,5,110,0,0,1445,1446,5,116,0,0,1446,1447,5,40,0,0,1447,322,1,
+ 0,0,0,1448,1449,5,105,0,0,1449,1450,5,109,0,0,1450,1451,5,97,0,0,1451,
+ 1452,5,103,0,0,1452,1453,5,101,0,0,1453,1454,5,40,0,0,1454,324,1,0,0,0,
+ 1455,1456,5,112,0,0,1456,1457,5,114,0,0,1457,1458,5,101,0,0,1458,1459,
+ 5,105,0,0,1459,1460,5,109,0,0,1460,1461,5,97,0,0,1461,1462,5,103,0,0,1462,
+ 1463,5,101,0,0,1463,1464,5,40,0,0,1464,326,1,0,0,0,1465,1466,5,102,0,0,
+ 1466,1467,5,108,0,0,1467,1468,5,111,0,0,1468,1469,5,111,0,0,1469,1470,
+ 5,114,0,0,1470,1471,5,40,0,0,1471,328,1,0,0,0,1472,1473,5,99,0,0,1473,
+ 1474,5,101,0,0,1474,1475,5,105,0,0,1475,1476,5,108,0,0,1476,1477,5,40,
+ 0,0,1477,330,1,0,0,0,1478,1479,5,99,0,0,1479,1480,5,101,0,0,1480,1481,
+ 5,105,0,0,1481,1482,5,108,0,0,1482,1483,5,105,0,0,1483,1484,5,110,0,0,
+ 1484,1485,5,103,0,0,1485,1486,5,40,0,0,1486,332,1,0,0,0,1487,1488,5,114,
+ 0,0,1488,1489,5,111,0,0,1489,1490,5,117,0,0,1490,1491,5,110,0,0,1491,1492,
+ 5,100,0,0,1492,1493,5,40,0,0,1493,334,1,0,0,0,1494,1495,5,109,0,0,1495,
+ 1496,5,105,0,0,1496,1497,5,110,0,0,1497,1498,5,40,0,0,1498,336,1,0,0,0,
+ 1499,1500,5,109,0,0,1500,1501,5,97,0,0,1501,1502,5,120,0,0,1502,1503,5,
+ 40,0,0,1503,338,1,0,0,0,1504,1505,5,97,0,0,1505,1506,5,114,0,0,1506,1507,
+ 5,103,0,0,1507,1508,5,109,0,0,1508,1509,5,97,0,0,1509,1510,5,120,0,0,1510,
+ 1511,5,40,0,0,1511,340,1,0,0,0,1512,1513,5,97,0,0,1513,1514,5,114,0,0,
+ 1514,1515,5,103,0,0,1515,1516,5,109,0,0,1516,1517,5,105,0,0,1517,1518,
+ 5,110,0,0,1518,1519,5,40,0,0,1519,342,1,0,0,0,1520,1521,5,103,0,0,1521,
+ 1522,5,99,0,0,1522,1523,5,100,0,0,1523,1524,5,40,0,0,1524,344,1,0,0,0,
+ 1525,1526,5,108,0,0,1526,1527,5,99,0,0,1527,1528,5,109,0,0,1528,1529,5,
+ 40,0,0,1529,346,1,0,0,0,1530,1531,5,98,0,0,1531,1532,5,105,0,0,1532,1533,
+ 5,110,0,0,1533,1534,5,111,0,0,1534,1535,5,109,0,0,1535,1536,5,105,0,0,
+ 1536,1537,5,97,0,0,1537,1538,5,108,0,0,1538,1539,5,40,0,0,1539,348,1,0,
+ 0,0,1540,1541,5,109,0,0,1541,1542,5,117,0,0,1542,1543,5,108,0,0,1543,1544,
+ 5,116,0,0,1544,1545,5,105,0,0,1545,1546,5,110,0,0,1546,1547,5,111,0,0,
+ 1547,1548,5,109,0,0,1548,1549,5,105,0,0,1549,1550,5,97,0,0,1550,1551,5,
+ 108,0,0,1551,1552,5,40,0,0,1552,350,1,0,0,0,1553,1554,5,99,0,0,1554,1555,
+ 5,97,0,0,1555,1556,5,116,0,0,1556,1557,5,97,0,0,1557,1558,5,108,0,0,1558,
+ 1559,5,97,0,0,1559,1560,5,110,0,0,1560,1561,5,110,0,0,1561,1562,5,117,
+ 0,0,1562,1563,5,109,0,0,1563,1564,5,98,0,0,1564,1565,5,101,0,0,1565,1566,
+ 5,114,0,0,1566,1567,5,40,0,0,1567,352,1,0,0,0,1568,1569,5,104,0,0,1569,
+ 1570,5,97,0,0,1570,1571,5,114,0,0,1571,1572,5,109,0,0,1572,1573,5,111,
+ 0,0,1573,1574,5,110,0,0,1574,1575,5,105,0,0,1575,1576,5,99,0,0,1576,1577,
+ 5,110,0,0,1577,1578,5,117,0,0,1578,1579,5,109,0,0,1579,1580,5,98,0,0,1580,
+ 1581,5,101,0,0,1581,1582,5,114,0,0,1582,1583,5,40,0,0,1583,354,1,0,0,0,
+ 1584,1585,5,102,0,0,1585,1586,5,97,0,0,1586,1587,5,108,0,0,1587,1588,5,
+ 108,0,0,1588,1589,5,105,0,0,1589,1590,5,110,0,0,1590,1591,5,103,0,0,1591,
+ 1592,5,102,0,0,1592,1593,5,97,0,0,1593,1594,5,99,0,0,1594,1595,5,116,0,
+ 0,1595,1596,5,111,0,0,1596,1597,5,114,0,0,1597,1598,5,105,0,0,1598,1599,
+ 5,97,0,0,1599,1600,5,108,0,0,1600,1601,5,40,0,0,1601,356,1,0,0,0,1602,
+ 1603,5,102,0,0,1603,1604,5,97,0,0,1604,1605,5,99,0,0,1605,1606,5,116,0,
+ 0,1606,1607,5,111,0,0,1607,1608,5,114,0,0,1608,1609,5,105,0,0,1609,1610,
+ 5,97,0,0,1610,1611,5,108,0,0,1611,1612,5,112,0,0,1612,1613,5,111,0,0,1613,
+ 1614,5,119,0,0,1614,1615,5,101,0,0,1615,1616,5,114,0,0,1616,1617,5,40,
+ 0,0,1617,358,1,0,0,0,1618,1619,5,114,0,0,1619,1620,5,105,0,0,1620,1621,
+ 5,115,0,0,1621,1622,5,105,0,0,1622,1623,5,110,0,0,1623,1624,5,103,0,0,
+ 1624,1625,5,102,0,0,1625,1626,5,97,0,0,1626,1627,5,99,0,0,1627,1628,5,
+ 116,0,0,1628,1629,5,111,0,0,1629,1630,5,114,0,0,1630,1631,5,105,0,0,1631,
+ 1632,5,97,0,0,1632,1633,5,108,0,0,1633,1634,5,40,0,0,1634,360,1,0,0,0,
+ 1635,1636,5,105,0,0,1636,1637,5,118,0,0,1637,1638,5,101,0,0,1638,1639,
+ 5,114,0,0,1639,1640,5,115,0,0,1640,1641,5,111,0,0,1641,1642,5,110,0,0,
+ 1642,1643,5,40,0,0,1643,362,1,0,0,0,1644,1645,5,97,0,0,1645,1646,5,108,
+ 0,0,1646,1647,5,101,0,0,1647,1648,5,112,0,0,1648,1649,5,104,0,0,1649,1650,
+ 5,40,0,0,1650,364,1,0,0,0,1651,1652,5,101,0,0,1652,1653,5,114,0,0,1653,
+ 1654,5,102,0,0,1654,1655,5,40,0,0,1655,366,1,0,0,0,1656,1657,5,101,0,0,
+ 1657,1658,5,114,0,0,1658,1659,5,102,0,0,1659,1660,5,99,0,0,1660,1661,5,
+ 40,0,0,1661,368,1,0,0,0,1662,1663,5,101,0,0,1663,1664,5,114,0,0,1664,1665,
+ 5,102,0,0,1665,1666,5,105,0,0,1666,1667,5,40,0,0,1667,370,1,0,0,0,1668,
+ 1669,5,69,0,0,1669,1670,5,105,0,0,1670,1671,5,40,0,0,1671,372,1,0,0,0,
+ 1672,1673,5,108,0,0,1673,1674,5,105,0,0,1674,1675,5,40,0,0,1675,374,1,
+ 0,0,0,1676,1677,5,108,0,0,1677,1678,5,97,0,0,1678,1679,5,109,0,0,1679,
+ 1680,5,98,0,0,1680,1681,5,101,0,0,1681,1682,5,114,0,0,1682,1683,5,116,
+ 0,0,1683,1684,5,119,0,0,1684,1685,5,40,0,0,1685,376,1,0,0,0,1686,1687,
+ 5,112,0,0,1687,1688,5,114,0,0,1688,1689,5,111,0,0,1689,1690,5,100,0,0,
+ 1690,1691,5,117,0,0,1691,1692,5,99,0,0,1692,1693,5,116,0,0,1693,1694,5,
+ 108,0,0,1694,1695,5,111,0,0,1695,1696,5,103,0,0,1696,1697,5,40,0,0,1697,
+ 378,1,0,0,0,1698,1699,5,112,0,0,1699,1700,5,111,0,0,1700,1701,5,108,0,
+ 0,1701,1702,5,121,0,0,1702,1703,5,103,0,0,1703,1704,5,97,0,0,1704,1705,
+ 5,109,0,0,1705,1706,5,109,0,0,1706,1707,5,97,0,0,1707,1708,5,40,0,0,1708,
+ 380,1,0,0,0,1709,1710,5,100,0,0,1710,1711,5,105,0,0,1711,1712,5,103,0,
+ 0,1712,1713,5,97,0,0,1713,1714,5,109,0,0,1714,1715,5,109,0,0,1715,1716,
+ 5,97,0,0,1716,1717,5,40,0,0,1717,382,1,0,0,0,1718,1719,5,83,0,0,1719,1720,
+ 5,105,0,0,1720,1721,5,40,0,0,1721,384,1,0,0,0,1722,1723,5,67,0,0,1723,
+ 1724,5,105,0,0,1724,1725,5,40,0,0,1725,386,1,0,0,0,1726,1727,5,83,0,0,
+ 1727,1728,5,104,0,0,1728,1729,5,105,0,0,1729,1730,5,40,0,0,1730,388,1,
+ 0,0,0,1731,1732,5,67,0,0,1732,1733,5,104,0,0,1733,1734,5,105,0,0,1734,
+ 1735,5,40,0,0,1735,390,1,0,0,0,1736,1737,5,100,0,0,1737,1738,5,101,0,0,
+ 1738,1739,5,116,0,0,1739,1740,5,40,0,0,1740,392,1,0,0,0,1741,1742,5,116,
+ 0,0,1742,1743,5,114,0,0,1743,1744,5,97,0,0,1744,1745,5,110,0,0,1745,1746,
+ 5,115,0,0,1746,1747,5,112,0,0,1747,1748,5,111,0,0,1748,1749,5,115,0,0,
+ 1749,1750,5,101,0,0,1750,1751,5,40,0,0,1751,394,1,0,0,0,1752,1753,5,116,
+ 0,0,1753,1754,5,114,0,0,1754,1755,5,97,0,0,1755,1756,5,99,0,0,1756,1757,
+ 5,101,0,0,1757,1758,5,40,0,0,1758,396,1,0,0,0,1759,1760,5,100,0,0,1760,
+ 1761,5,111,0,0,1761,1762,5,116,0,0,1762,1763,5,40,0,0,1763,398,1,0,0,0,
+ 1764,1765,5,99,0,0,1765,1766,5,114,0,0,1766,1767,5,111,0,0,1767,1768,5,
+ 115,0,0,1768,1769,5,115,0,0,1769,1770,5,40,0,0,1770,400,1,0,0,0,1771,1772,
+ 5,108,0,0,1772,1773,5,97,0,0,1773,1774,5,112,0,0,1774,1775,5,108,0,0,1775,
+ 1776,5,97,0,0,1776,1777,5,99,0,0,1777,1778,5,105,0,0,1778,1779,5,97,0,
+ 0,1779,1780,5,110,0,0,1780,1781,5,40,0,0,1781,402,1,0,0,0,1782,1783,5,
+ 102,0,0,1783,1784,5,111,0,0,1784,1785,5,114,0,0,1785,1786,5,119,0,0,1786,
+ 1787,5,97,0,0,1787,1788,5,114,0,0,1788,1789,5,100,0,0,1789,1790,5,100,
+ 0,0,1790,1791,5,105,0,0,1791,1792,5,102,0,0,1792,1793,5,102,0,0,1793,1794,
+ 5,101,0,0,1794,1795,5,114,0,0,1795,1796,5,101,0,0,1796,1797,5,110,0,0,
+ 1797,1798,5,99,0,0,1798,1799,5,101,0,0,1799,1800,5,40,0,0,1800,404,1,0,
+ 0,0,1801,1802,5,106,0,0,1802,1803,5,97,0,0,1803,1804,5,99,0,0,1804,1805,
+ 5,111,0,0,1805,1806,5,98,0,0,1806,1807,5,105,0,0,1807,1808,5,97,0,0,1808,
+ 1809,5,110,0,0,1809,1810,5,40,0,0,1810,406,1,0,0,0,1811,1812,5,104,0,0,
+ 1812,1813,5,101,0,0,1813,1814,5,115,0,0,1814,1815,5,115,0,0,1815,1816,
+ 5,105,0,0,1816,1817,5,97,0,0,1817,1818,5,110,0,0,1818,1819,5,40,0,0,1819,
+ 408,1,0,0,0,1820,1821,5,114,0,0,1821,1822,5,101,0,0,1822,1823,5,115,0,
+ 0,1823,1824,5,117,0,0,1824,1825,5,108,0,0,1825,1826,5,116,0,0,1826,1827,
+ 5,97,0,0,1827,1828,5,110,0,0,1828,1829,5,116,0,0,1829,1830,5,40,0,0,1830,
+ 410,1,0,0,0,1831,1832,5,99,0,0,1832,1833,5,111,0,0,1833,1834,5,110,0,0,
+ 1834,1835,5,106,0,0,1835,1836,5,117,0,0,1836,1837,5,103,0,0,1837,1838,
+ 5,97,0,0,1838,1839,5,116,0,0,1839,1840,5,101,0,0,1840,1841,5,40,0,0,1841,
+ 412,1,0,0,0,1842,1843,5,99,0,0,1843,1844,5,111,0,0,1844,1845,5,110,0,0,
+ 1845,1846,5,106,0,0,1846,1847,5,40,0,0,1847,414,1,0,0,0,1848,1849,5,97,
+ 0,0,1849,1850,5,114,0,0,1850,1851,5,103,0,0,1851,1852,5,40,0,0,1852,416,
+ 1,0,0,0,1853,1854,5,82,0,0,1854,1855,5,101,0,0,1855,1856,5,40,0,0,1856,
+ 418,1,0,0,0,1857,1858,5,73,0,0,1858,1859,5,109,0,0,1859,1860,5,40,0,0,
+ 1860,420,1,0,0,0,1861,1862,5,114,0,0,1862,1863,5,101,0,0,1863,1864,5,40,
+ 0,0,1864,422,1,0,0,0,1865,1866,5,114,0,0,1866,1867,5,101,0,0,1867,1868,
+ 5,97,0,0,1868,1869,5,108,0,0,1869,1870,5,40,0,0,1870,424,1,0,0,0,1871,
+ 1872,5,105,0,0,1872,1873,5,109,0,0,1873,1874,5,40,0,0,1874,426,1,0,0,0,
+ 1875,1876,5,105,0,0,1876,1877,5,109,0,0,1877,1878,5,97,0,0,1878,1879,5,
+ 103,0,0,1879,1880,5,40,0,0,1880,428,1,0,0,0,1881,1882,5,116,0,0,1882,1883,
+ 5,114,0,0,1883,1884,5,117,0,0,1884,1885,5,110,0,0,1885,1886,5,99,0,0,1886,
+ 1887,5,40,0,0,1887,430,1,0,0,0,1888,1889,5,122,0,0,1889,1890,5,101,0,0,
+ 1890,1891,5,116,0,0,1891,1892,5,97,0,0,1892,1893,5,40,0,0,1893,432,1,0,
+ 0,0,1894,1895,5,114,0,0,1895,1896,5,105,0,0,1896,1897,5,101,0,0,1897,1898,
+ 5,109,0,0,1898,1899,5,97,0,0,1899,1900,5,110,0,0,1900,1901,5,110,0,0,1901,
+ 1902,5,122,0,0,1902,1903,5,101,0,0,1903,1904,5,116,0,0,1904,1905,5,97,
+ 0,0,1905,1906,5,40,0,0,1906,434,1,0,0,0,1907,1908,5,104,0,0,1908,1909,
+ 5,117,0,0,1909,1910,5,114,0,0,1910,1911,5,119,0,0,1911,1912,5,105,0,0,
+ 1912,1913,5,116,0,0,1913,1914,5,122,0,0,1914,1915,5,122,0,0,1915,1916,
+ 5,101,0,0,1916,1917,5,116,0,0,1917,1918,5,97,0,0,1918,1919,5,40,0,0,1919,
+ 436,1,0,0,0,1920,1921,5,104,0,0,1921,1922,5,101,0,0,1922,1923,5,97,0,0,
+ 1923,1924,5,118,0,0,1924,1925,5,105,0,0,1925,1926,5,115,0,0,1926,1927,
+ 5,105,0,0,1927,1928,5,100,0,0,1928,1929,5,101,0,0,1929,1930,5,40,0,0,1930,
+ 438,1,0,0,0,1931,1932,5,117,0,0,1932,1933,5,110,0,0,1933,1934,5,105,0,
+ 0,1934,1935,5,116,0,0,1935,1936,5,115,0,0,1936,1937,5,116,0,0,1937,1938,
+ 5,101,0,0,1938,1939,5,112,0,0,1939,1940,5,40,0,0,1940,440,1,0,0,0,1941,
+ 1942,5,105,0,0,1942,1943,5,115,0,0,1943,1944,5,112,0,0,1944,1945,5,114,
+ 0,0,1945,1946,5,105,0,0,1946,1947,5,109,0,0,1947,1948,5,101,0,0,1948,1949,
+ 5,40,0,0,1949,442,1,0,0,0,1950,1951,5,112,0,0,1951,1952,5,111,0,0,1952,
+ 1953,5,99,0,0,1953,1954,5,104,0,0,1954,1955,5,104,0,0,1955,1956,5,97,0,
+ 0,1956,1957,5,109,0,0,1957,1958,5,109,0,0,1958,1959,5,101,0,0,1959,1960,
+ 5,114,0,0,1960,1961,5,40,0,0,1961,444,1,0,0,0,1962,1963,5,100,0,0,1963,
+ 1964,5,111,0,0,1964,1965,5,117,0,0,1965,1966,5,98,0,0,1966,1967,5,108,
+ 0,0,1967,1968,5,101,0,0,1968,1969,5,102,0,0,1969,1970,5,97,0,0,1970,1971,
+ 5,99,0,0,1971,1972,5,116,0,0,1972,1973,5,111,0,0,1973,1974,5,114,0,0,1974,
+ 1975,5,105,0,0,1975,1976,5,97,0,0,1976,1977,5,108,0,0,1977,1978,5,40,0,
+ 0,1978,446,1,0,0,0,1979,1980,5,102,0,0,1980,1981,5,97,0,0,1981,1982,5,
+ 99,0,0,1982,1983,5,116,0,0,1983,1984,5,111,0,0,1984,1985,5,114,0,0,1985,
+ 1986,5,105,0,0,1986,1987,5,97,0,0,1987,1988,5,108,0,0,1988,1989,5,50,0,
+ 0,1989,1990,5,40,0,0,1990,448,1,0,0,0,1991,1992,5,102,0,0,1992,1993,5,
+ 114,0,0,1993,1994,5,97,0,0,1994,1995,5,99,0,0,1995,1996,5,116,0,0,1996,
+ 1997,5,105,0,0,1997,1998,5,111,0,0,1998,1999,5,110,0,0,1999,2000,5,97,
+ 0,0,2000,2001,5,108,0,0,2001,2002,5,112,0,0,2002,2003,5,97,0,0,2003,2004,
+ 5,114,0,0,2004,2005,5,116,0,0,2005,2006,5,40,0,0,2006,450,1,0,0,0,2007,
+ 2008,5,113,0,0,2008,2009,5,117,0,0,2009,2010,5,111,0,0,2010,2011,5,116,
+ 0,0,2011,2012,5,105,0,0,2012,2013,5,101,0,0,2013,2014,5,110,0,0,2014,2015,
+ 5,116,0,0,2015,2016,5,40,0,0,2016,452,1,0,0,0,2017,2018,5,100,0,0,2018,
+ 2019,5,111,0,0,2019,2020,5,109,0,0,2020,2021,5,97,0,0,2021,2022,5,105,
+ 0,0,2022,2023,5,110,0,0,2023,2024,5,40,0,0,2024,454,1,0,0,0,2025,2026,
+ 5,112,0,0,2026,2027,5,105,0,0,2027,2028,5,101,0,0,2028,2029,5,99,0,0,2029,
+ 2030,5,101,0,0,2030,2031,5,119,0,0,2031,2032,5,105,0,0,2032,2033,5,115,
+ 0,0,2033,2034,5,101,0,0,2034,2035,5,40,0,0,2035,456,1,0,0,0,2036,2037,
+ 5,97,0,0,2037,2038,5,112,0,0,2038,2039,5,112,0,0,2039,2040,5,108,0,0,2040,
+ 2041,5,121,0,0,2041,2042,5,40,0,0,2042,458,1,0,0,0,2043,2044,5,108,0,0,
+ 2044,2045,5,97,0,0,2045,2046,5,109,0,0,2046,2047,5,98,0,0,2047,2048,5,
+ 100,0,0,2048,2049,5,97,0,0,2049,2050,5,40,0,0,2050,460,1,0,0,0,2051,2053,
+ 5,13,0,0,2052,2051,1,0,0,0,2052,2053,1,0,0,0,2053,2054,1,0,0,0,2054,2056,
+ 5,10,0,0,2055,2052,1,0,0,0,2056,2057,1,0,0,0,2057,2055,1,0,0,0,2057,2058,
+ 1,0,0,0,2058,2059,1,0,0,0,2059,2060,6,230,0,0,2060,462,1,0,0,0,2061,2063,
+ 7,0,0,0,2062,2064,7,1,0,0,2063,2062,1,0,0,0,2063,2064,1,0,0,0,2064,2066,
+ 1,0,0,0,2065,2067,2,48,57,0,2066,2065,1,0,0,0,2067,2068,1,0,0,0,2068,2066,
+ 1,0,0,0,2068,2069,1,0,0,0,2069,464,1,0,0,0,2070,2072,2,48,57,0,2071,2070,
+ 1,0,0,0,2072,2073,1,0,0,0,2073,2071,1,0,0,0,2073,2074,1,0,0,0,2074,2075,
+ 1,0,0,0,2075,2079,5,46,0,0,2076,2078,2,48,57,0,2077,2076,1,0,0,0,2078,
+ 2081,1,0,0,0,2079,2077,1,0,0,0,2079,2080,1,0,0,0,2080,2083,1,0,0,0,2081,
+ 2079,1,0,0,0,2082,2084,3,463,231,0,2083,2082,1,0,0,0,2083,2084,1,0,0,0,
+ 2084,2086,1,0,0,0,2085,2087,5,105,0,0,2086,2085,1,0,0,0,2086,2087,1,0,
+ 0,0,2087,2104,1,0,0,0,2088,2090,5,46,0,0,2089,2088,1,0,0,0,2089,2090,1,
+ 0,0,0,2090,2092,1,0,0,0,2091,2093,2,48,57,0,2092,2091,1,0,0,0,2093,2094,
+ 1,0,0,0,2094,2092,1,0,0,0,2094,2095,1,0,0,0,2095,2097,1,0,0,0,2096,2098,
+ 3,463,231,0,2097,2096,1,0,0,0,2097,2098,1,0,0,0,2098,2100,1,0,0,0,2099,
+ 2101,5,105,0,0,2100,2099,1,0,0,0,2100,2101,1,0,0,0,2101,2104,1,0,0,0,2102,
+ 2104,5,105,0,0,2103,2071,1,0,0,0,2103,2089,1,0,0,0,2103,2102,1,0,0,0,2104,
+ 466,1,0,0,0,2105,2106,5,67,0,0,2106,2124,5,67,0,0,2107,2108,5,82,0,0,2108,
+ 2124,5,82,0,0,2109,2110,5,81,0,0,2110,2124,5,81,0,0,2111,2112,5,90,0,0,
+ 2112,2124,5,90,0,0,2113,2114,5,66,0,0,2114,2124,5,66,0,0,2115,2116,5,90,
+ 0,0,2116,2117,5,90,0,0,2117,2124,5,42,0,0,2118,2119,5,90,0,0,2119,2120,
+ 5,90,0,0,2120,2124,5,43,0,0,2121,2122,5,80,0,0,2122,2124,5,80,0,0,2123,
+ 2105,1,0,0,0,2123,2107,1,0,0,0,2123,2109,1,0,0,0,2123,2111,1,0,0,0,2123,
+ 2113,1,0,0,0,2123,2115,1,0,0,0,2123,2118,1,0,0,0,2123,2121,1,0,0,0,2124,
+ 468,1,0,0,0,2125,2126,5,116,0,0,2126,2127,5,114,0,0,2127,2128,5,117,0,
+ 0,2128,2144,5,101,0,0,2129,2130,5,84,0,0,2130,2131,5,114,0,0,2131,2132,
+ 5,117,0,0,2132,2144,5,101,0,0,2133,2134,5,102,0,0,2134,2135,5,97,0,0,2135,
+ 2136,5,108,0,0,2136,2137,5,115,0,0,2137,2144,5,101,0,0,2138,2139,5,70,
+ 0,0,2139,2140,5,97,0,0,2140,2141,5,108,0,0,2141,2142,5,115,0,0,2142,2144,
+ 5,101,0,0,2143,2125,1,0,0,0,2143,2129,1,0,0,0,2143,2133,1,0,0,0,2143,2138,
+ 1,0,0,0,2144,470,1,0,0,0,2145,2146,5,78,0,0,2146,2147,5,97,0,0,2147,2148,
+ 5,78,0,0,2148,472,1,0,0,0,2149,2151,7,2,0,0,2150,2149,1,0,0,0,2151,2152,
+ 1,0,0,0,2152,2150,1,0,0,0,2152,2153,1,0,0,0,2153,2162,1,0,0,0,2154,2156,
+ 5,95,0,0,2155,2157,7,3,0,0,2156,2155,1,0,0,0,2157,2158,1,0,0,0,2158,2156,
+ 1,0,0,0,2158,2159,1,0,0,0,2159,2161,1,0,0,0,2160,2154,1,0,0,0,2161,2164,
+ 1,0,0,0,2162,2160,1,0,0,0,2162,2163,1,0,0,0,2163,474,1,0,0,0,2164,2162,
+ 1,0,0,0,2165,2166,5,47,0,0,2166,2167,5,47,0,0,2167,2171,1,0,0,0,2168,2170,
+ 8,4,0,0,2169,2168,1,0,0,0,2170,2173,1,0,0,0,2171,2169,1,0,0,0,2171,2172,
+ 1,0,0,0,2172,2178,1,0,0,0,2173,2171,1,0,0,0,2174,2176,5,13,0,0,2175,2174,
+ 1,0,0,0,2175,2176,1,0,0,0,2176,2177,1,0,0,0,2177,2179,5,10,0,0,2178,2175,
+ 1,0,0,0,2178,2179,1,0,0,0,2179,2192,1,0,0,0,2180,2181,5,47,0,0,2181,2182,
+ 5,42,0,0,2182,2186,1,0,0,0,2183,2185,9,0,0,0,2184,2183,1,0,0,0,2185,2188,
+ 1,0,0,0,2186,2187,1,0,0,0,2186,2184,1,0,0,0,2187,2189,1,0,0,0,2188,2186,
+ 1,0,0,0,2189,2190,5,42,0,0,2190,2192,5,47,0,0,2191,2165,1,0,0,0,2191,2180,
+ 1,0,0,0,2192,2193,1,0,0,0,2193,2194,6,237,0,0,2194,476,1,0,0,0,2195,2197,
+ 7,5,0,0,2196,2195,1,0,0,0,2197,2198,1,0,0,0,2198,2196,1,0,0,0,2198,2199,
+ 1,0,0,0,2199,2200,1,0,0,0,2200,2201,6,238,0,0,2201,478,1,0,0,0,25,0,2052,
+ 2057,2063,2068,2073,2079,2083,2086,2089,2094,2097,2100,2103,2123,2143,
+ 2152,2158,2162,2171,2175,2178,2186,2191,2198,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 9f8eccd7d..fac0fc9c4 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.interp
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.interp
@@ -1,5 +1,7 @@
token literal names:
null
+'['
+']'
'!'
'!!'
'!!!'
@@ -56,9 +58,7 @@ null
'(|'
'|)'
'#'
-'['
']T'
-']'
'{'
'}'
'log('
@@ -197,6 +197,7 @@ null
'Chi('
'det('
'transpose('
+'trace('
'dot('
'cross('
'laplacian('
@@ -469,6 +470,7 @@ null
null
null
null
+null
NEWLINE
NUMBER
SPECIALSET
@@ -708,6 +710,7 @@ T__225
T__226
T__227
T__228
+T__229
NEWLINE
EXPONENT
NUMBER
@@ -726,4 +729,4 @@ mode names:
DEFAULT_MODE
atn:
-[4, 0, 237, 2193, 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, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 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, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 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, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 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, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 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, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 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, 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, 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, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 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, 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, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 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, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 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, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 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, 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, 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, 129, 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, 131, 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, 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, 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, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 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, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 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, 150, 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, 152, 1, 152, 1, 153, 1, 153, 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, 154, 1, 154, 1, 155, 1, 155, 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, 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, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 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, 162, 1, 162, 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, 163, 1, 163, 1, 164, 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, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 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, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 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, 174, 1, 174, 1, 174, 1, 174, 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, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 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, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 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, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 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, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 3, 229, 2044, 8, 229, 1, 229, 4, 229, 2047, 8, 229, 11, 229, 12, 229, 2048, 1, 229, 1, 229, 1, 230, 1, 230, 3, 230, 2055, 8, 230, 1, 230, 4, 230, 2058, 8, 230, 11, 230, 12, 230, 2059, 1, 231, 4, 231, 2063, 8, 231, 11, 231, 12, 231, 2064, 1, 231, 1, 231, 5, 231, 2069, 8, 231, 10, 231, 12, 231, 2072, 9, 231, 1, 231, 3, 231, 2075, 8, 231, 1, 231, 3, 231, 2078, 8, 231, 1, 231, 3, 231, 2081, 8, 231, 1, 231, 4, 231, 2084, 8, 231, 11, 231, 12, 231, 2085, 1, 231, 3, 231, 2089, 8, 231, 1, 231, 3, 231, 2092, 8, 231, 1, 231, 3, 231, 2095, 8, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 3, 232, 2115, 8, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 3, 233, 2135, 8, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 235, 4, 235, 2142, 8, 235, 11, 235, 12, 235, 2143, 1, 235, 1, 235, 4, 235, 2148, 8, 235, 11, 235, 12, 235, 2149, 5, 235, 2152, 8, 235, 10, 235, 12, 235, 2155, 9, 235, 1, 236, 1, 236, 1, 236, 1, 236, 5, 236, 2161, 8, 236, 10, 236, 12, 236, 2164, 9, 236, 1, 236, 3, 236, 2167, 8, 236, 1, 236, 3, 236, 2170, 8, 236, 1, 236, 1, 236, 1, 236, 1, 236, 5, 236, 2176, 8, 236, 10, 236, 12, 236, 2179, 9, 236, 1, 236, 1, 236, 3, 236, 2183, 8, 236, 1, 236, 1, 236, 1, 237, 4, 237, 2188, 8, 237, 11, 237, 12, 237, 2189, 1, 237, 1, 237, 1, 2177, 0, 238, 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, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 0, 463, 231, 465, 232, 467, 233, 469, 234, 471, 235, 473, 236, 475, 237, 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, 2224, 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, 387, 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, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 1, 477, 1, 0, 0, 0, 3, 479, 1, 0, 0, 0, 5, 482, 1, 0, 0, 0, 7, 486, 1, 0, 0, 0, 9, 488, 1, 0, 0, 0, 11, 490, 1, 0, 0, 0, 13, 492, 1, 0, 0, 0, 15, 494, 1, 0, 0, 0, 17, 498, 1, 0, 0, 0, 19, 500, 1, 0, 0, 0, 21, 502, 1, 0, 0, 0, 23, 506, 1, 0, 0, 0, 25, 516, 1, 0, 0, 0, 27, 519, 1, 0, 0, 0, 29, 525, 1, 0, 0, 0, 31, 528, 1, 0, 0, 0, 33, 540, 1, 0, 0, 0, 35, 542, 1, 0, 0, 0, 37, 545, 1, 0, 0, 0, 39, 552, 1, 0, 0, 0, 41, 554, 1, 0, 0, 0, 43, 563, 1, 0, 0, 0, 45, 565, 1, 0, 0, 0, 47, 573, 1, 0, 0, 0, 49, 575, 1, 0, 0, 0, 51, 578, 1, 0, 0, 0, 53, 581, 1, 0, 0, 0, 55, 583, 1, 0, 0, 0, 57, 585, 1, 0, 0, 0, 59, 587, 1, 0, 0, 0, 61, 590, 1, 0, 0, 0, 63, 592, 1, 0, 0, 0, 65, 594, 1, 0, 0, 0, 67, 596, 1, 0, 0, 0, 69, 600, 1, 0, 0, 0, 71, 604, 1, 0, 0, 0, 73, 606, 1, 0, 0, 0, 75, 610, 1, 0, 0, 0, 77, 613, 1, 0, 0, 0, 79, 621, 1, 0, 0, 0, 81, 624, 1, 0, 0, 0, 83, 633, 1, 0, 0, 0, 85, 636, 1, 0, 0, 0, 87, 638, 1, 0, 0, 0, 89, 645, 1, 0, 0, 0, 91, 647, 1, 0, 0, 0, 93, 655, 1, 0, 0, 0, 95, 658, 1, 0, 0, 0, 97, 665, 1, 0, 0, 0, 99, 667, 1, 0, 0, 0, 101, 669, 1, 0, 0, 0, 103, 671, 1, 0, 0, 0, 105, 675, 1, 0, 0, 0, 107, 679, 1, 0, 0, 0, 109, 682, 1, 0, 0, 0, 111, 685, 1, 0, 0, 0, 113, 687, 1, 0, 0, 0, 115, 689, 1, 0, 0, 0, 117, 692, 1, 0, 0, 0, 119, 694, 1, 0, 0, 0, 121, 696, 1, 0, 0, 0, 123, 698, 1, 0, 0, 0, 125, 703, 1, 0, 0, 0, 127, 710, 1, 0, 0, 0, 129, 716, 1, 0, 0, 0, 131, 721, 1, 0, 0, 0, 133, 727, 1, 0, 0, 0, 135, 733, 1, 0, 0, 0, 137, 738, 1, 0, 0, 0, 139, 742, 1, 0, 0, 0, 141, 747, 1, 0, 0, 0, 143, 752, 1, 0, 0, 0, 145, 757, 1, 0, 0, 0, 147, 762, 1, 0, 0, 0, 149, 769, 1, 0, 0, 0, 151, 774, 1, 0, 0, 0, 153, 779, 1, 0, 0, 0, 155, 786, 1, 0, 0, 0, 157, 791, 1, 0, 0, 0, 159, 799, 1, 0, 0, 0, 161, 807, 1, 0, 0, 0, 163, 815, 1, 0, 0, 0, 165, 825, 1, 0, 0, 0, 167, 833, 1, 0, 0, 0, 169, 843, 1, 0, 0, 0, 171, 851, 1, 0, 0, 0, 173, 857, 1, 0, 0, 0, 175, 863, 1, 0, 0, 0, 177, 869, 1, 0, 0, 0, 179, 875, 1, 0, 0, 0, 181, 883, 1, 0, 0, 0, 183, 889, 1, 0, 0, 0, 185, 897, 1, 0, 0, 0, 187, 903, 1, 0, 0, 0, 189, 911, 1, 0, 0, 0, 191, 917, 1, 0, 0, 0, 193, 921, 1, 0, 0, 0, 195, 927, 1, 0, 0, 0, 197, 931, 1, 0, 0, 0, 199, 937, 1, 0, 0, 0, 201, 941, 1, 0, 0, 0, 203, 949, 1, 0, 0, 0, 205, 955, 1, 0, 0, 0, 207, 960, 1, 0, 0, 0, 209, 966, 1, 0, 0, 0, 211, 971, 1, 0, 0, 0, 213, 979, 1, 0, 0, 0, 215, 985, 1, 0, 0, 0, 217, 992, 1, 0, 0, 0, 219, 1000, 1, 0, 0, 0, 221, 1006, 1, 0, 0, 0, 223, 1015, 1, 0, 0, 0, 225, 1022, 1, 0, 0, 0, 227, 1030, 1, 0, 0, 0, 229, 1036, 1, 0, 0, 0, 231, 1045, 1, 0, 0, 0, 233, 1052, 1, 0, 0, 0, 235, 1060, 1, 0, 0, 0, 237, 1066, 1, 0, 0, 0, 239, 1075, 1, 0, 0, 0, 241, 1082, 1, 0, 0, 0, 243, 1090, 1, 0, 0, 0, 245, 1099, 1, 0, 0, 0, 247, 1109, 1, 0, 0, 0, 249, 1116, 1, 0, 0, 0, 251, 1127, 1, 0, 0, 0, 253, 1134, 1, 0, 0, 0, 255, 1142, 1, 0, 0, 0, 257, 1149, 1, 0, 0, 0, 259, 1158, 1, 0, 0, 0, 261, 1167, 1, 0, 0, 0, 263, 1177, 1, 0, 0, 0, 265, 1185, 1, 0, 0, 0, 267, 1196, 1, 0, 0, 0, 269, 1203, 1, 0, 0, 0, 271, 1214, 1, 0, 0, 0, 273, 1221, 1, 0, 0, 0, 275, 1233, 1, 0, 0, 0, 277, 1243, 1, 0, 0, 0, 279, 1250, 1, 0, 0, 0, 281, 1261, 1, 0, 0, 0, 283, 1273, 1, 0, 0, 0, 285, 1278, 1, 0, 0, 0, 287, 1287, 1, 0, 0, 0, 289, 1295, 1, 0, 0, 0, 291, 1300, 1, 0, 0, 0, 293, 1306, 1, 0, 0, 0, 295, 1311, 1, 0, 0, 0, 297, 1316, 1, 0, 0, 0, 299, 1323, 1, 0, 0, 0, 301, 1334, 1, 0, 0, 0, 303, 1342, 1, 0, 0, 0, 305, 1353, 1, 0, 0, 0, 307, 1367, 1, 0, 0, 0, 309, 1376, 1, 0, 0, 0, 311, 1388, 1, 0, 0, 0, 313, 1397, 1, 0, 0, 0, 315, 1403, 1, 0, 0, 0, 317, 1413, 1, 0, 0, 0, 319, 1420, 1, 0, 0, 0, 321, 1434, 1, 0, 0, 0, 323, 1446, 1, 0, 0, 0, 325, 1453, 1, 0, 0, 0, 327, 1463, 1, 0, 0, 0, 329, 1470, 1, 0, 0, 0, 331, 1476, 1, 0, 0, 0, 333, 1485, 1, 0, 0, 0, 335, 1492, 1, 0, 0, 0, 337, 1497, 1, 0, 0, 0, 339, 1502, 1, 0, 0, 0, 341, 1510, 1, 0, 0, 0, 343, 1518, 1, 0, 0, 0, 345, 1523, 1, 0, 0, 0, 347, 1528, 1, 0, 0, 0, 349, 1538, 1, 0, 0, 0, 351, 1551, 1, 0, 0, 0, 353, 1566, 1, 0, 0, 0, 355, 1582, 1, 0, 0, 0, 357, 1600, 1, 0, 0, 0, 359, 1616, 1, 0, 0, 0, 361, 1633, 1, 0, 0, 0, 363, 1642, 1, 0, 0, 0, 365, 1649, 1, 0, 0, 0, 367, 1654, 1, 0, 0, 0, 369, 1660, 1, 0, 0, 0, 371, 1666, 1, 0, 0, 0, 373, 1670, 1, 0, 0, 0, 375, 1674, 1, 0, 0, 0, 377, 1684, 1, 0, 0, 0, 379, 1696, 1, 0, 0, 0, 381, 1707, 1, 0, 0, 0, 383, 1716, 1, 0, 0, 0, 385, 1720, 1, 0, 0, 0, 387, 1724, 1, 0, 0, 0, 389, 1729, 1, 0, 0, 0, 391, 1734, 1, 0, 0, 0, 393, 1739, 1, 0, 0, 0, 395, 1750, 1, 0, 0, 0, 397, 1755, 1, 0, 0, 0, 399, 1762, 1, 0, 0, 0, 401, 1773, 1, 0, 0, 0, 403, 1792, 1, 0, 0, 0, 405, 1802, 1, 0, 0, 0, 407, 1811, 1, 0, 0, 0, 409, 1822, 1, 0, 0, 0, 411, 1833, 1, 0, 0, 0, 413, 1839, 1, 0, 0, 0, 415, 1844, 1, 0, 0, 0, 417, 1848, 1, 0, 0, 0, 419, 1852, 1, 0, 0, 0, 421, 1856, 1, 0, 0, 0, 423, 1862, 1, 0, 0, 0, 425, 1866, 1, 0, 0, 0, 427, 1872, 1, 0, 0, 0, 429, 1879, 1, 0, 0, 0, 431, 1885, 1, 0, 0, 0, 433, 1898, 1, 0, 0, 0, 435, 1911, 1, 0, 0, 0, 437, 1922, 1, 0, 0, 0, 439, 1932, 1, 0, 0, 0, 441, 1941, 1, 0, 0, 0, 443, 1953, 1, 0, 0, 0, 445, 1970, 1, 0, 0, 0, 447, 1982, 1, 0, 0, 0, 449, 1998, 1, 0, 0, 0, 451, 2008, 1, 0, 0, 0, 453, 2016, 1, 0, 0, 0, 455, 2027, 1, 0, 0, 0, 457, 2034, 1, 0, 0, 0, 459, 2046, 1, 0, 0, 0, 461, 2052, 1, 0, 0, 0, 463, 2094, 1, 0, 0, 0, 465, 2114, 1, 0, 0, 0, 467, 2134, 1, 0, 0, 0, 469, 2136, 1, 0, 0, 0, 471, 2141, 1, 0, 0, 0, 473, 2182, 1, 0, 0, 0, 475, 2187, 1, 0, 0, 0, 477, 478, 5, 33, 0, 0, 478, 2, 1, 0, 0, 0, 479, 480, 5, 33, 0, 0, 480, 481, 5, 33, 0, 0, 481, 4, 1, 0, 0, 0, 482, 483, 5, 33, 0, 0, 483, 484, 5, 33, 0, 0, 484, 485, 5, 33, 0, 0, 485, 6, 1, 0, 0, 0, 486, 487, 5, 94, 0, 0, 487, 8, 1, 0, 0, 0, 488, 489, 5, 45, 0, 0, 489, 10, 1, 0, 0, 0, 490, 491, 5, 43, 0, 0, 491, 12, 1, 0, 0, 0, 492, 493, 5, 42, 0, 0, 493, 14, 1, 0, 0, 0, 494, 495, 5, 46, 0, 0, 495, 496, 5, 46, 0, 0, 496, 497, 5, 46, 0, 0, 497, 16, 1, 0, 0, 0, 498, 499, 5, 8230, 0, 0, 499, 18, 1, 0, 0, 0, 500, 501, 5, 47, 0, 0, 501, 20, 1, 0, 0, 0, 502, 503, 5, 109, 0, 0, 503, 504, 5, 111, 0, 0, 504, 505, 5, 100, 0, 0, 505, 22, 1, 0, 0, 0, 506, 507, 5, 105, 0, 0, 507, 508, 5, 110, 0, 0, 508, 509, 5, 116, 0, 0, 509, 510, 5, 101, 0, 0, 510, 511, 5, 114, 0, 0, 511, 512, 5, 115, 0, 0, 512, 513, 5, 101, 0, 0, 513, 514, 5, 99, 0, 0, 514, 515, 5, 116, 0, 0, 515, 24, 1, 0, 0, 0, 516, 517, 5, 47, 0, 0, 517, 518, 5, 92, 0, 0, 518, 26, 1, 0, 0, 0, 519, 520, 5, 117, 0, 0, 520, 521, 5, 110, 0, 0, 521, 522, 5, 105, 0, 0, 522, 523, 5, 116, 0, 0, 523, 524, 5, 101, 0, 0, 524, 28, 1, 0, 0, 0, 525, 526, 5, 92, 0, 0, 526, 527, 5, 47, 0, 0, 527, 30, 1, 0, 0, 0, 528, 529, 5, 115, 0, 0, 529, 530, 5, 101, 0, 0, 530, 531, 5, 116, 0, 0, 531, 532, 5, 115, 0, 0, 532, 533, 5, 117, 0, 0, 533, 534, 5, 98, 0, 0, 534, 535, 5, 116, 0, 0, 535, 536, 5, 114, 0, 0, 536, 537, 5, 97, 0, 0, 537, 538, 5, 99, 0, 0, 538, 539, 5, 116, 0, 0, 539, 32, 1, 0, 0, 0, 540, 541, 5, 92, 0, 0, 541, 34, 1, 0, 0, 0, 542, 543, 5, 105, 0, 0, 543, 544, 5, 110, 0, 0, 544, 36, 1, 0, 0, 0, 545, 546, 5, 115, 0, 0, 546, 547, 5, 117, 0, 0, 547, 548, 5, 98, 0, 0, 548, 549, 5, 115, 0, 0, 549, 550, 5, 101, 0, 0, 550, 551, 5, 116, 0, 0, 551, 38, 1, 0, 0, 0, 552, 553, 5, 8838, 0, 0, 553, 40, 1, 0, 0, 0, 554, 555, 5, 115, 0, 0, 555, 556, 5, 117, 0, 0, 556, 557, 5, 112, 0, 0, 557, 558, 5, 101, 0, 0, 558, 559, 5, 114, 0, 0, 559, 560, 5, 115, 0, 0, 560, 561, 5, 101, 0, 0, 561, 562, 5, 116, 0, 0, 562, 42, 1, 0, 0, 0, 563, 564, 5, 8839, 0, 0, 564, 44, 1, 0, 0, 0, 565, 566, 5, 100, 0, 0, 566, 567, 5, 105, 0, 0, 567, 568, 5, 118, 0, 0, 568, 569, 5, 105, 0, 0, 569, 570, 5, 100, 0, 0, 570, 571, 5, 101, 0, 0, 571, 572, 5, 115, 0, 0, 572, 46, 1, 0, 0, 0, 573, 574, 5, 124, 0, 0, 574, 48, 1, 0, 0, 0, 575, 576, 5, 62, 0, 0, 576, 577, 5, 61, 0, 0, 577, 50, 1, 0, 0, 0, 578, 579, 5, 60, 0, 0, 579, 580, 5, 61, 0, 0, 580, 52, 1, 0, 0, 0, 581, 582, 5, 62, 0, 0, 582, 54, 1, 0, 0, 0, 583, 584, 5, 60, 0, 0, 584, 56, 1, 0, 0, 0, 585, 586, 5, 61, 0, 0, 586, 58, 1, 0, 0, 0, 587, 588, 5, 60, 0, 0, 588, 589, 5, 62, 0, 0, 589, 60, 1, 0, 0, 0, 590, 591, 5, 8801, 0, 0, 591, 62, 1, 0, 0, 0, 592, 593, 5, 40, 0, 0, 593, 64, 1, 0, 0, 0, 594, 595, 5, 41, 0, 0, 595, 66, 1, 0, 0, 0, 596, 597, 5, 110, 0, 0, 597, 598, 5, 111, 0, 0, 598, 599, 5, 116, 0, 0, 599, 68, 1, 0, 0, 0, 600, 601, 5, 97, 0, 0, 601, 602, 5, 110, 0, 0, 602, 603, 5, 100, 0, 0, 603, 70, 1, 0, 0, 0, 604, 605, 5, 38, 0, 0, 605, 72, 1, 0, 0, 0, 606, 607, 5, 120, 0, 0, 607, 608, 5, 111, 0, 0, 608, 609, 5, 114, 0, 0, 609, 74, 1, 0, 0, 0, 610, 611, 5, 111, 0, 0, 611, 612, 5, 114, 0, 0, 612, 76, 1, 0, 0, 0, 613, 614, 5, 105, 0, 0, 614, 615, 5, 109, 0, 0, 615, 616, 5, 112, 0, 0, 616, 617, 5, 108, 0, 0, 617, 618, 5, 105, 0, 0, 618, 619, 5, 101, 0, 0, 619, 620, 5, 115, 0, 0, 620, 78, 1, 0, 0, 0, 621, 622, 5, 45, 0, 0, 622, 623, 5, 62, 0, 0, 623, 80, 1, 0, 0, 0, 624, 625, 5, 112, 0, 0, 625, 626, 5, 114, 0, 0, 626, 627, 5, 111, 0, 0, 627, 628, 5, 118, 0, 0, 628, 629, 5, 105, 0, 0, 629, 630, 5, 100, 0, 0, 630, 631, 5, 101, 0, 0, 631, 632, 5, 100, 0, 0, 632, 82, 1, 0, 0, 0, 633, 634, 5, 61, 0, 0, 634, 635, 5, 62, 0, 0, 635, 84, 1, 0, 0, 0, 636, 637, 5, 58, 0, 0, 637, 86, 1, 0, 0, 0, 638, 639, 5, 102, 0, 0, 639, 640, 5, 111, 0, 0, 640, 641, 5, 114, 0, 0, 641, 642, 5, 97, 0, 0, 642, 643, 5, 108, 0, 0, 643, 644, 5, 108, 0, 0, 644, 88, 1, 0, 0, 0, 645, 646, 5, 8704, 0, 0, 646, 90, 1, 0, 0, 0, 647, 648, 5, 101, 0, 0, 648, 649, 5, 120, 0, 0, 649, 650, 5, 105, 0, 0, 650, 651, 5, 115, 0, 0, 651, 652, 5, 116, 0, 0, 652, 653, 5, 115, 0, 0, 653, 654, 5, 33, 0, 0, 654, 92, 1, 0, 0, 0, 655, 656, 5, 8707, 0, 0, 656, 657, 5, 33, 0, 0, 657, 94, 1, 0, 0, 0, 658, 659, 5, 101, 0, 0, 659, 660, 5, 120, 0, 0, 660, 661, 5, 105, 0, 0, 661, 662, 5, 115, 0, 0, 662, 663, 5, 116, 0, 0, 663, 664, 5, 115, 0, 0, 664, 96, 1, 0, 0, 0, 665, 666, 5, 8707, 0, 0, 666, 98, 1, 0, 0, 0, 667, 668, 5, 44, 0, 0, 668, 100, 1, 0, 0, 0, 669, 670, 5, 59, 0, 0, 670, 102, 1, 0, 0, 0, 671, 672, 5, 43, 0, 0, 672, 673, 5, 111, 0, 0, 673, 674, 5, 111, 0, 0, 674, 104, 1, 0, 0, 0, 675, 676, 5, 45, 0, 0, 676, 677, 5, 111, 0, 0, 677, 678, 5, 111, 0, 0, 678, 106, 1, 0, 0, 0, 679, 680, 5, 40, 0, 0, 680, 681, 5, 124, 0, 0, 681, 108, 1, 0, 0, 0, 682, 683, 5, 124, 0, 0, 683, 684, 5, 41, 0, 0, 684, 110, 1, 0, 0, 0, 685, 686, 5, 35, 0, 0, 686, 112, 1, 0, 0, 0, 687, 688, 5, 91, 0, 0, 688, 114, 1, 0, 0, 0, 689, 690, 5, 93, 0, 0, 690, 691, 5, 84, 0, 0, 691, 116, 1, 0, 0, 0, 692, 693, 5, 93, 0, 0, 693, 118, 1, 0, 0, 0, 694, 695, 5, 123, 0, 0, 695, 120, 1, 0, 0, 0, 696, 697, 5, 125, 0, 0, 697, 122, 1, 0, 0, 0, 698, 699, 5, 108, 0, 0, 699, 700, 5, 111, 0, 0, 700, 701, 5, 103, 0, 0, 701, 702, 5, 40, 0, 0, 702, 124, 1, 0, 0, 0, 703, 704, 5, 108, 0, 0, 704, 705, 5, 111, 0, 0, 705, 706, 5, 103, 0, 0, 706, 707, 5, 49, 0, 0, 707, 708, 5, 48, 0, 0, 708, 709, 5, 40, 0, 0, 709, 126, 1, 0, 0, 0, 710, 711, 5, 108, 0, 0, 711, 712, 5, 111, 0, 0, 712, 713, 5, 103, 0, 0, 713, 714, 5, 50, 0, 0, 714, 715, 5, 40, 0, 0, 715, 128, 1, 0, 0, 0, 716, 717, 5, 112, 0, 0, 717, 718, 5, 111, 0, 0, 718, 719, 5, 119, 0, 0, 719, 720, 5, 40, 0, 0, 720, 130, 1, 0, 0, 0, 721, 722, 5, 115, 0, 0, 722, 723, 5, 113, 0, 0, 723, 724, 5, 114, 0, 0, 724, 725, 5, 116, 0, 0, 725, 726, 5, 40, 0, 0, 726, 132, 1, 0, 0, 0, 727, 728, 5, 99, 0, 0, 728, 729, 5, 98, 0, 0, 729, 730, 5, 114, 0, 0, 730, 731, 5, 116, 0, 0, 731, 732, 5, 40, 0, 0, 732, 134, 1, 0, 0, 0, 733, 734, 5, 115, 0, 0, 734, 735, 5, 113, 0, 0, 735, 736, 5, 114, 0, 0, 736, 737, 5, 40, 0, 0, 737, 136, 1, 0, 0, 0, 738, 739, 5, 108, 0, 0, 739, 740, 5, 110, 0, 0, 740, 741, 5, 40, 0, 0, 741, 138, 1, 0, 0, 0, 742, 743, 5, 101, 0, 0, 743, 744, 5, 120, 0, 0, 744, 745, 5, 112, 0, 0, 745, 746, 5, 40, 0, 0, 746, 140, 1, 0, 0, 0, 747, 748, 5, 115, 0, 0, 748, 749, 5, 105, 0, 0, 749, 750, 5, 110, 0, 0, 750, 751, 5, 40, 0, 0, 751, 142, 1, 0, 0, 0, 752, 753, 5, 99, 0, 0, 753, 754, 5, 111, 0, 0, 754, 755, 5, 115, 0, 0, 755, 756, 5, 40, 0, 0, 756, 144, 1, 0, 0, 0, 757, 758, 5, 116, 0, 0, 758, 759, 5, 97, 0, 0, 759, 760, 5, 110, 0, 0, 760, 761, 5, 40, 0, 0, 761, 146, 1, 0, 0, 0, 762, 763, 5, 99, 0, 0, 763, 764, 5, 111, 0, 0, 764, 765, 5, 116, 0, 0, 765, 766, 5, 97, 0, 0, 766, 767, 5, 110, 0, 0, 767, 768, 5, 40, 0, 0, 768, 148, 1, 0, 0, 0, 769, 770, 5, 99, 0, 0, 770, 771, 5, 111, 0, 0, 771, 772, 5, 116, 0, 0, 772, 773, 5, 40, 0, 0, 773, 150, 1, 0, 0, 0, 774, 775, 5, 115, 0, 0, 775, 776, 5, 101, 0, 0, 776, 777, 5, 99, 0, 0, 777, 778, 5, 40, 0, 0, 778, 152, 1, 0, 0, 0, 779, 780, 5, 99, 0, 0, 780, 781, 5, 111, 0, 0, 781, 782, 5, 115, 0, 0, 782, 783, 5, 101, 0, 0, 783, 784, 5, 99, 0, 0, 784, 785, 5, 40, 0, 0, 785, 154, 1, 0, 0, 0, 786, 787, 5, 99, 0, 0, 787, 788, 5, 115, 0, 0, 788, 789, 5, 99, 0, 0, 789, 790, 5, 40, 0, 0, 790, 156, 1, 0, 0, 0, 791, 792, 5, 97, 0, 0, 792, 793, 5, 114, 0, 0, 793, 794, 5, 99, 0, 0, 794, 795, 5, 115, 0, 0, 795, 796, 5, 105, 0, 0, 796, 797, 5, 110, 0, 0, 797, 798, 5, 40, 0, 0, 798, 158, 1, 0, 0, 0, 799, 800, 5, 97, 0, 0, 800, 801, 5, 114, 0, 0, 801, 802, 5, 99, 0, 0, 802, 803, 5, 99, 0, 0, 803, 804, 5, 111, 0, 0, 804, 805, 5, 115, 0, 0, 805, 806, 5, 40, 0, 0, 806, 160, 1, 0, 0, 0, 807, 808, 5, 97, 0, 0, 808, 809, 5, 114, 0, 0, 809, 810, 5, 99, 0, 0, 810, 811, 5, 116, 0, 0, 811, 812, 5, 97, 0, 0, 812, 813, 5, 110, 0, 0, 813, 814, 5, 40, 0, 0, 814, 162, 1, 0, 0, 0, 815, 816, 5, 97, 0, 0, 816, 817, 5, 114, 0, 0, 817, 818, 5, 99, 0, 0, 818, 819, 5, 99, 0, 0, 819, 820, 5, 111, 0, 0, 820, 821, 5, 116, 0, 0, 821, 822, 5, 97, 0, 0, 822, 823, 5, 110, 0, 0, 823, 824, 5, 40, 0, 0, 824, 164, 1, 0, 0, 0, 825, 826, 5, 97, 0, 0, 826, 827, 5, 114, 0, 0, 827, 828, 5, 99, 0, 0, 828, 829, 5, 115, 0, 0, 829, 830, 5, 101, 0, 0, 830, 831, 5, 99, 0, 0, 831, 832, 5, 40, 0, 0, 832, 166, 1, 0, 0, 0, 833, 834, 5, 97, 0, 0, 834, 835, 5, 114, 0, 0, 835, 836, 5, 99, 0, 0, 836, 837, 5, 99, 0, 0, 837, 838, 5, 111, 0, 0, 838, 839, 5, 115, 0, 0, 839, 840, 5, 101, 0, 0, 840, 841, 5, 99, 0, 0, 841, 842, 5, 40, 0, 0, 842, 168, 1, 0, 0, 0, 843, 844, 5, 97, 0, 0, 844, 845, 5, 114, 0, 0, 845, 846, 5, 99, 0, 0, 846, 847, 5, 99, 0, 0, 847, 848, 5, 115, 0, 0, 848, 849, 5, 99, 0, 0, 849, 850, 5, 40, 0, 0, 850, 170, 1, 0, 0, 0, 851, 852, 5, 97, 0, 0, 852, 853, 5, 99, 0, 0, 853, 854, 5, 115, 0, 0, 854, 855, 5, 99, 0, 0, 855, 856, 5, 40, 0, 0, 856, 172, 1, 0, 0, 0, 857, 858, 5, 97, 0, 0, 858, 859, 5, 115, 0, 0, 859, 860, 5, 105, 0, 0, 860, 861, 5, 110, 0, 0, 861, 862, 5, 40, 0, 0, 862, 174, 1, 0, 0, 0, 863, 864, 5, 97, 0, 0, 864, 865, 5, 99, 0, 0, 865, 866, 5, 111, 0, 0, 866, 867, 5, 115, 0, 0, 867, 868, 5, 40, 0, 0, 868, 176, 1, 0, 0, 0, 869, 870, 5, 97, 0, 0, 870, 871, 5, 116, 0, 0, 871, 872, 5, 97, 0, 0, 872, 873, 5, 110, 0, 0, 873, 874, 5, 40, 0, 0, 874, 178, 1, 0, 0, 0, 875, 876, 5, 97, 0, 0, 876, 877, 5, 99, 0, 0, 877, 878, 5, 111, 0, 0, 878, 879, 5, 116, 0, 0, 879, 880, 5, 97, 0, 0, 880, 881, 5, 110, 0, 0, 881, 882, 5, 40, 0, 0, 882, 180, 1, 0, 0, 0, 883, 884, 5, 97, 0, 0, 884, 885, 5, 115, 0, 0, 885, 886, 5, 101, 0, 0, 886, 887, 5, 99, 0, 0, 887, 888, 5, 40, 0, 0, 888, 182, 1, 0, 0, 0, 889, 890, 5, 97, 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, 40, 0, 0, 896, 184, 1, 0, 0, 0, 897, 898, 5, 97, 0, 0, 898, 899, 5, 99, 0, 0, 899, 900, 5, 111, 0, 0, 900, 901, 5, 116, 0, 0, 901, 902, 5, 40, 0, 0, 902, 186, 1, 0, 0, 0, 903, 904, 5, 97, 0, 0, 904, 905, 5, 114, 0, 0, 905, 906, 5, 99, 0, 0, 906, 907, 5, 99, 0, 0, 907, 908, 5, 111, 0, 0, 908, 909, 5, 116, 0, 0, 909, 910, 5, 40, 0, 0, 910, 188, 1, 0, 0, 0, 911, 912, 5, 115, 0, 0, 912, 913, 5, 105, 0, 0, 913, 914, 5, 110, 0, 0, 914, 915, 5, 104, 0, 0, 915, 916, 5, 40, 0, 0, 916, 190, 1, 0, 0, 0, 917, 918, 5, 115, 0, 0, 918, 919, 5, 104, 0, 0, 919, 920, 5, 40, 0, 0, 920, 192, 1, 0, 0, 0, 921, 922, 5, 99, 0, 0, 922, 923, 5, 111, 0, 0, 923, 924, 5, 115, 0, 0, 924, 925, 5, 104, 0, 0, 925, 926, 5, 40, 0, 0, 926, 194, 1, 0, 0, 0, 927, 928, 5, 99, 0, 0, 928, 929, 5, 104, 0, 0, 929, 930, 5, 40, 0, 0, 930, 196, 1, 0, 0, 0, 931, 932, 5, 116, 0, 0, 932, 933, 5, 97, 0, 0, 933, 934, 5, 110, 0, 0, 934, 935, 5, 104, 0, 0, 935, 936, 5, 40, 0, 0, 936, 198, 1, 0, 0, 0, 937, 938, 5, 116, 0, 0, 938, 939, 5, 104, 0, 0, 939, 940, 5, 40, 0, 0, 940, 200, 1, 0, 0, 0, 941, 942, 5, 99, 0, 0, 942, 943, 5, 111, 0, 0, 943, 944, 5, 116, 0, 0, 944, 945, 5, 97, 0, 0, 945, 946, 5, 110, 0, 0, 946, 947, 5, 104, 0, 0, 947, 948, 5, 40, 0, 0, 948, 202, 1, 0, 0, 0, 949, 950, 5, 99, 0, 0, 950, 951, 5, 111, 0, 0, 951, 952, 5, 116, 0, 0, 952, 953, 5, 104, 0, 0, 953, 954, 5, 40, 0, 0, 954, 204, 1, 0, 0, 0, 955, 956, 5, 99, 0, 0, 956, 957, 5, 116, 0, 0, 957, 958, 5, 104, 0, 0, 958, 959, 5, 40, 0, 0, 959, 206, 1, 0, 0, 0, 960, 961, 5, 115, 0, 0, 961, 962, 5, 101, 0, 0, 962, 963, 5, 99, 0, 0, 963, 964, 5, 104, 0, 0, 964, 965, 5, 40, 0, 0, 965, 208, 1, 0, 0, 0, 966, 967, 5, 115, 0, 0, 967, 968, 5, 99, 0, 0, 968, 969, 5, 104, 0, 0, 969, 970, 5, 40, 0, 0, 970, 210, 1, 0, 0, 0, 971, 972, 5, 99, 0, 0, 972, 973, 5, 111, 0, 0, 973, 974, 5, 115, 0, 0, 974, 975, 5, 101, 0, 0, 975, 976, 5, 99, 0, 0, 976, 977, 5, 104, 0, 0, 977, 978, 5, 40, 0, 0, 978, 212, 1, 0, 0, 0, 979, 980, 5, 99, 0, 0, 980, 981, 5, 115, 0, 0, 981, 982, 5, 99, 0, 0, 982, 983, 5, 104, 0, 0, 983, 984, 5, 40, 0, 0, 984, 214, 1, 0, 0, 0, 985, 986, 5, 97, 0, 0, 986, 987, 5, 115, 0, 0, 987, 988, 5, 105, 0, 0, 988, 989, 5, 110, 0, 0, 989, 990, 5, 104, 0, 0, 990, 991, 5, 40, 0, 0, 991, 216, 1, 0, 0, 0, 992, 993, 5, 97, 0, 0, 993, 994, 5, 114, 0, 0, 994, 995, 5, 115, 0, 0, 995, 996, 5, 105, 0, 0, 996, 997, 5, 110, 0, 0, 997, 998, 5, 104, 0, 0, 998, 999, 5, 40, 0, 0, 999, 218, 1, 0, 0, 0, 1000, 1001, 5, 97, 0, 0, 1001, 1002, 5, 114, 0, 0, 1002, 1003, 5, 115, 0, 0, 1003, 1004, 5, 104, 0, 0, 1004, 1005, 5, 40, 0, 0, 1005, 220, 1, 0, 0, 0, 1006, 1007, 5, 97, 0, 0, 1007, 1008, 5, 114, 0, 0, 1008, 1009, 5, 99, 0, 0, 1009, 1010, 5, 115, 0, 0, 1010, 1011, 5, 105, 0, 0, 1011, 1012, 5, 110, 0, 0, 1012, 1013, 5, 104, 0, 0, 1013, 1014, 5, 40, 0, 0, 1014, 222, 1, 0, 0, 0, 1015, 1016, 5, 97, 0, 0, 1016, 1017, 5, 99, 0, 0, 1017, 1018, 5, 111, 0, 0, 1018, 1019, 5, 115, 0, 0, 1019, 1020, 5, 104, 0, 0, 1020, 1021, 5, 40, 0, 0, 1021, 224, 1, 0, 0, 0, 1022, 1023, 5, 97, 0, 0, 1023, 1024, 5, 114, 0, 0, 1024, 1025, 5, 99, 0, 0, 1025, 1026, 5, 111, 0, 0, 1026, 1027, 5, 115, 0, 0, 1027, 1028, 5, 104, 0, 0, 1028, 1029, 5, 40, 0, 0, 1029, 226, 1, 0, 0, 0, 1030, 1031, 5, 97, 0, 0, 1031, 1032, 5, 114, 0, 0, 1032, 1033, 5, 99, 0, 0, 1033, 1034, 5, 104, 0, 0, 1034, 1035, 5, 40, 0, 0, 1035, 228, 1, 0, 0, 0, 1036, 1037, 5, 97, 0, 0, 1037, 1038, 5, 114, 0, 0, 1038, 1039, 5, 99, 0, 0, 1039, 1040, 5, 99, 0, 0, 1040, 1041, 5, 111, 0, 0, 1041, 1042, 5, 115, 0, 0, 1042, 1043, 5, 104, 0, 0, 1043, 1044, 5, 40, 0, 0, 1044, 230, 1, 0, 0, 0, 1045, 1046, 5, 97, 0, 0, 1046, 1047, 5, 116, 0, 0, 1047, 1048, 5, 97, 0, 0, 1048, 1049, 5, 110, 0, 0, 1049, 1050, 5, 104, 0, 0, 1050, 1051, 5, 40, 0, 0, 1051, 232, 1, 0, 0, 0, 1052, 1053, 5, 97, 0, 0, 1053, 1054, 5, 114, 0, 0, 1054, 1055, 5, 116, 0, 0, 1055, 1056, 5, 97, 0, 0, 1056, 1057, 5, 110, 0, 0, 1057, 1058, 5, 104, 0, 0, 1058, 1059, 5, 40, 0, 0, 1059, 234, 1, 0, 0, 0, 1060, 1061, 5, 97, 0, 0, 1061, 1062, 5, 114, 0, 0, 1062, 1063, 5, 116, 0, 0, 1063, 1064, 5, 104, 0, 0, 1064, 1065, 5, 40, 0, 0, 1065, 236, 1, 0, 0, 0, 1066, 1067, 5, 97, 0, 0, 1067, 1068, 5, 114, 0, 0, 1068, 1069, 5, 99, 0, 0, 1069, 1070, 5, 116, 0, 0, 1070, 1071, 5, 97, 0, 0, 1071, 1072, 5, 110, 0, 0, 1072, 1073, 5, 104, 0, 0, 1073, 1074, 5, 40, 0, 0, 1074, 238, 1, 0, 0, 0, 1075, 1076, 5, 97, 0, 0, 1076, 1077, 5, 99, 0, 0, 1077, 1078, 5, 111, 0, 0, 1078, 1079, 5, 116, 0, 0, 1079, 1080, 5, 104, 0, 0, 1080, 1081, 5, 40, 0, 0, 1081, 240, 1, 0, 0, 0, 1082, 1083, 5, 97, 0, 0, 1083, 1084, 5, 114, 0, 0, 1084, 1085, 5, 99, 0, 0, 1085, 1086, 5, 111, 0, 0, 1086, 1087, 5, 116, 0, 0, 1087, 1088, 5, 104, 0, 0, 1088, 1089, 5, 40, 0, 0, 1089, 242, 1, 0, 0, 0, 1090, 1091, 5, 97, 0, 0, 1091, 1092, 5, 99, 0, 0, 1092, 1093, 5, 111, 0, 0, 1093, 1094, 5, 116, 0, 0, 1094, 1095, 5, 97, 0, 0, 1095, 1096, 5, 110, 0, 0, 1096, 1097, 5, 104, 0, 0, 1097, 1098, 5, 40, 0, 0, 1098, 244, 1, 0, 0, 0, 1099, 1100, 5, 97, 0, 0, 1100, 1101, 5, 114, 0, 0, 1101, 1102, 5, 99, 0, 0, 1102, 1103, 5, 111, 0, 0, 1103, 1104, 5, 116, 0, 0, 1104, 1105, 5, 97, 0, 0, 1105, 1106, 5, 110, 0, 0, 1106, 1107, 5, 104, 0, 0, 1107, 1108, 5, 40, 0, 0, 1108, 246, 1, 0, 0, 0, 1109, 1110, 5, 97, 0, 0, 1110, 1111, 5, 114, 0, 0, 1111, 1112, 5, 99, 0, 0, 1112, 1113, 5, 116, 0, 0, 1113, 1114, 5, 104, 0, 0, 1114, 1115, 5, 40, 0, 0, 1115, 248, 1, 0, 0, 0, 1116, 1117, 5, 97, 0, 0, 1117, 1118, 5, 114, 0, 0, 1118, 1119, 5, 99, 0, 0, 1119, 1120, 5, 99, 0, 0, 1120, 1121, 5, 111, 0, 0, 1121, 1122, 5, 116, 0, 0, 1122, 1123, 5, 97, 0, 0, 1123, 1124, 5, 110, 0, 0, 1124, 1125, 5, 104, 0, 0, 1125, 1126, 5, 40, 0, 0, 1126, 250, 1, 0, 0, 0, 1127, 1128, 5, 97, 0, 0, 1128, 1129, 5, 115, 0, 0, 1129, 1130, 5, 101, 0, 0, 1130, 1131, 5, 99, 0, 0, 1131, 1132, 5, 104, 0, 0, 1132, 1133, 5, 40, 0, 0, 1133, 252, 1, 0, 0, 0, 1134, 1135, 5, 97, 0, 0, 1135, 1136, 5, 114, 0, 0, 1136, 1137, 5, 115, 0, 0, 1137, 1138, 5, 101, 0, 0, 1138, 1139, 5, 99, 0, 0, 1139, 1140, 5, 104, 0, 0, 1140, 1141, 5, 40, 0, 0, 1141, 254, 1, 0, 0, 0, 1142, 1143, 5, 97, 0, 0, 1143, 1144, 5, 114, 0, 0, 1144, 1145, 5, 115, 0, 0, 1145, 1146, 5, 99, 0, 0, 1146, 1147, 5, 104, 0, 0, 1147, 1148, 5, 40, 0, 0, 1148, 256, 1, 0, 0, 0, 1149, 1150, 5, 97, 0, 0, 1150, 1151, 5, 114, 0, 0, 1151, 1152, 5, 99, 0, 0, 1152, 1153, 5, 115, 0, 0, 1153, 1154, 5, 101, 0, 0, 1154, 1155, 5, 99, 0, 0, 1155, 1156, 5, 104, 0, 0, 1156, 1157, 5, 40, 0, 0, 1157, 258, 1, 0, 0, 0, 1158, 1159, 5, 97, 0, 0, 1159, 1160, 5, 99, 0, 0, 1160, 1161, 5, 111, 0, 0, 1161, 1162, 5, 115, 0, 0, 1162, 1163, 5, 101, 0, 0, 1163, 1164, 5, 99, 0, 0, 1164, 1165, 5, 104, 0, 0, 1165, 1166, 5, 40, 0, 0, 1166, 260, 1, 0, 0, 0, 1167, 1168, 5, 97, 0, 0, 1168, 1169, 5, 114, 0, 0, 1169, 1170, 5, 99, 0, 0, 1170, 1171, 5, 111, 0, 0, 1171, 1172, 5, 115, 0, 0, 1172, 1173, 5, 101, 0, 0, 1173, 1174, 5, 99, 0, 0, 1174, 1175, 5, 104, 0, 0, 1175, 1176, 5, 40, 0, 0, 1176, 262, 1, 0, 0, 0, 1177, 1178, 5, 97, 0, 0, 1178, 1179, 5, 114, 0, 0, 1179, 1180, 5, 99, 0, 0, 1180, 1181, 5, 115, 0, 0, 1181, 1182, 5, 99, 0, 0, 1182, 1183, 5, 104, 0, 0, 1183, 1184, 5, 40, 0, 0, 1184, 264, 1, 0, 0, 0, 1185, 1186, 5, 97, 0, 0, 1186, 1187, 5, 114, 0, 0, 1187, 1188, 5, 99, 0, 0, 1188, 1189, 5, 99, 0, 0, 1189, 1190, 5, 111, 0, 0, 1190, 1191, 5, 115, 0, 0, 1191, 1192, 5, 101, 0, 0, 1192, 1193, 5, 99, 0, 0, 1193, 1194, 5, 104, 0, 0, 1194, 1195, 5, 40, 0, 0, 1195, 266, 1, 0, 0, 0, 1196, 1197, 5, 97, 0, 0, 1197, 1198, 5, 99, 0, 0, 1198, 1199, 5, 115, 0, 0, 1199, 1200, 5, 99, 0, 0, 1200, 1201, 5, 104, 0, 0, 1201, 1202, 5, 40, 0, 0, 1202, 268, 1, 0, 0, 0, 1203, 1204, 5, 102, 0, 0, 1204, 1205, 5, 97, 0, 0, 1205, 1206, 5, 99, 0, 0, 1206, 1207, 5, 116, 0, 0, 1207, 1208, 5, 111, 0, 0, 1208, 1209, 5, 114, 0, 0, 1209, 1210, 5, 105, 0, 0, 1210, 1211, 5, 97, 0, 0, 1211, 1212, 5, 108, 0, 0, 1212, 1213, 5, 40, 0, 0, 1213, 270, 1, 0, 0, 0, 1214, 1215, 5, 103, 0, 0, 1215, 1216, 5, 97, 0, 0, 1216, 1217, 5, 109, 0, 0, 1217, 1218, 5, 109, 0, 0, 1218, 1219, 5, 97, 0, 0, 1219, 1220, 5, 40, 0, 0, 1220, 272, 1, 0, 0, 0, 1221, 1222, 5, 100, 0, 0, 1222, 1223, 5, 101, 0, 0, 1223, 1224, 5, 114, 0, 0, 1224, 1225, 5, 105, 0, 0, 1225, 1226, 5, 118, 0, 0, 1226, 1227, 5, 97, 0, 0, 1227, 1228, 5, 116, 0, 0, 1228, 1229, 5, 105, 0, 0, 1229, 1230, 5, 118, 0, 0, 1230, 1231, 5, 101, 0, 0, 1231, 1232, 5, 40, 0, 0, 1232, 274, 1, 0, 0, 0, 1233, 1234, 5, 105, 0, 0, 1234, 1235, 5, 110, 0, 0, 1235, 1236, 5, 116, 0, 0, 1236, 1237, 5, 101, 0, 0, 1237, 1238, 5, 103, 0, 0, 1238, 1239, 5, 114, 0, 0, 1239, 1240, 5, 97, 0, 0, 1240, 1241, 5, 108, 0, 0, 1241, 1242, 5, 40, 0, 0, 1242, 276, 1, 0, 0, 0, 1243, 1244, 5, 108, 0, 0, 1244, 1245, 5, 105, 0, 0, 1245, 1246, 5, 109, 0, 0, 1246, 1247, 5, 105, 0, 0, 1247, 1248, 5, 116, 0, 0, 1248, 1249, 5, 40, 0, 0, 1249, 278, 1, 0, 0, 0, 1250, 1251, 5, 108, 0, 0, 1251, 1252, 5, 105, 0, 0, 1252, 1253, 5, 109, 0, 0, 1253, 1254, 5, 105, 0, 0, 1254, 1255, 5, 116, 0, 0, 1255, 1256, 5, 108, 0, 0, 1256, 1257, 5, 101, 0, 0, 1257, 1258, 5, 102, 0, 0, 1258, 1259, 5, 116, 0, 0, 1259, 1260, 5, 40, 0, 0, 1260, 280, 1, 0, 0, 0, 1261, 1262, 5, 108, 0, 0, 1262, 1263, 5, 105, 0, 0, 1263, 1264, 5, 109, 0, 0, 1264, 1265, 5, 105, 0, 0, 1265, 1266, 5, 116, 0, 0, 1266, 1267, 5, 114, 0, 0, 1267, 1268, 5, 105, 0, 0, 1268, 1269, 5, 103, 0, 0, 1269, 1270, 5, 104, 0, 0, 1270, 1271, 5, 116, 0, 0, 1271, 1272, 5, 40, 0, 0, 1272, 282, 1, 0, 0, 0, 1273, 1274, 5, 115, 0, 0, 1274, 1275, 5, 117, 0, 0, 1275, 1276, 5, 109, 0, 0, 1276, 1277, 5, 40, 0, 0, 1277, 284, 1, 0, 0, 0, 1278, 1279, 5, 112, 0, 0, 1279, 1280, 5, 114, 0, 0, 1280, 1281, 5, 111, 0, 0, 1281, 1282, 5, 100, 0, 0, 1282, 1283, 5, 117, 0, 0, 1283, 1284, 5, 99, 0, 0, 1284, 1285, 5, 116, 0, 0, 1285, 1286, 5, 40, 0, 0, 1286, 286, 1, 0, 0, 0, 1287, 1288, 5, 115, 0, 0, 1288, 1289, 5, 105, 0, 0, 1289, 1290, 5, 103, 0, 0, 1290, 1291, 5, 110, 0, 0, 1291, 1292, 5, 117, 0, 0, 1292, 1293, 5, 109, 0, 0, 1293, 1294, 5, 40, 0, 0, 1294, 288, 1, 0, 0, 0, 1295, 1296, 5, 115, 0, 0, 1296, 1297, 5, 103, 0, 0, 1297, 1298, 5, 110, 0, 0, 1298, 1299, 5, 40, 0, 0, 1299, 290, 1, 0, 0, 0, 1300, 1301, 5, 115, 0, 0, 1301, 1302, 5, 105, 0, 0, 1302, 1303, 5, 103, 0, 0, 1303, 1304, 5, 110, 0, 0, 1304, 1305, 5, 40, 0, 0, 1305, 292, 1, 0, 0, 0, 1306, 1307, 5, 97, 0, 0, 1307, 1308, 5, 98, 0, 0, 1308, 1309, 5, 115, 0, 0, 1309, 1310, 5, 40, 0, 0, 1310, 294, 1, 0, 0, 0, 1311, 1312, 5, 112, 0, 0, 1312, 1313, 5, 104, 0, 0, 1313, 1314, 5, 105, 0, 0, 1314, 1315, 5, 40, 0, 0, 1315, 296, 1, 0, 0, 0, 1316, 1317, 5, 112, 0, 0, 1317, 1318, 5, 114, 0, 0, 1318, 1319, 5, 105, 0, 0, 1319, 1320, 5, 109, 0, 0, 1320, 1321, 5, 101, 0, 0, 1321, 1322, 5, 40, 0, 0, 1322, 298, 1, 0, 0, 0, 1323, 1324, 5, 118, 0, 0, 1324, 1325, 5, 97, 0, 0, 1325, 1326, 5, 108, 0, 0, 1326, 1327, 5, 117, 0, 0, 1327, 1328, 5, 97, 0, 0, 1328, 1329, 5, 116, 0, 0, 1329, 1330, 5, 105, 0, 0, 1330, 1331, 5, 111, 0, 0, 1331, 1332, 5, 110, 0, 0, 1332, 1333, 5, 40, 0, 0, 1333, 300, 1, 0, 0, 0, 1334, 1335, 5, 109, 0, 0, 1335, 1336, 5, 111, 0, 0, 1336, 1337, 5, 98, 0, 0, 1337, 1338, 5, 105, 0, 0, 1338, 1339, 5, 117, 0, 0, 1339, 1340, 5, 115, 0, 0, 1340, 1341, 5, 40, 0, 0, 1341, 302, 1, 0, 0, 0, 1342, 1343, 5, 109, 0, 0, 1343, 1344, 5, 111, 0, 0, 1344, 1345, 5, 101, 0, 0, 1345, 1346, 5, 98, 0, 0, 1346, 1347, 5, 105, 0, 0, 1347, 1348, 5, 117, 0, 0, 1348, 1349, 5, 115, 0, 0, 1349, 1350, 5, 109, 0, 0, 1350, 1351, 5, 117, 0, 0, 1351, 1352, 5, 40, 0, 0, 1352, 304, 1, 0, 0, 0, 1353, 1354, 5, 100, 0, 0, 1354, 1355, 5, 105, 0, 0, 1355, 1356, 5, 118, 0, 0, 1356, 1357, 5, 105, 0, 0, 1357, 1358, 5, 115, 0, 0, 1358, 1359, 5, 111, 0, 0, 1359, 1360, 5, 114, 0, 0, 1360, 1361, 5, 115, 0, 0, 1361, 1362, 5, 105, 0, 0, 1362, 1363, 5, 103, 0, 0, 1363, 1364, 5, 109, 0, 0, 1364, 1365, 5, 97, 0, 0, 1365, 1366, 5, 40, 0, 0, 1366, 306, 1, 0, 0, 0, 1367, 1368, 5, 112, 0, 0, 1368, 1369, 5, 114, 0, 0, 1369, 1370, 5, 105, 0, 0, 1370, 1371, 5, 109, 0, 0, 1371, 1372, 5, 101, 0, 0, 1372, 1373, 5, 110, 0, 0, 1373, 1374, 5, 117, 0, 0, 1374, 1375, 5, 40, 0, 0, 1375, 308, 1, 0, 0, 0, 1376, 1377, 5, 112, 0, 0, 1377, 1378, 5, 114, 0, 0, 1378, 1379, 5, 105, 0, 0, 1379, 1380, 5, 109, 0, 0, 1380, 1381, 5, 101, 0, 0, 1381, 1382, 5, 111, 0, 0, 1382, 1383, 5, 109, 0, 0, 1383, 1384, 5, 101, 0, 0, 1384, 1385, 5, 103, 0, 0, 1385, 1386, 5, 97, 0, 0, 1386, 1387, 5, 40, 0, 0, 1387, 310, 1, 0, 0, 0, 1388, 1389, 5, 112, 0, 0, 1389, 1390, 5, 114, 0, 0, 1390, 1391, 5, 105, 0, 0, 1391, 1392, 5, 109, 0, 0, 1392, 1393, 5, 101, 0, 0, 1393, 1394, 5, 112, 0, 0, 1394, 1395, 5, 105, 0, 0, 1395, 1396, 5, 40, 0, 0, 1396, 312, 1, 0, 0, 0, 1397, 1398, 5, 99, 0, 0, 1398, 1399, 5, 97, 0, 0, 1399, 1400, 5, 114, 0, 0, 1400, 1401, 5, 100, 0, 0, 1401, 1402, 5, 40, 0, 0, 1402, 314, 1, 0, 0, 0, 1403, 1404, 5, 112, 0, 0, 1404, 1405, 5, 111, 0, 0, 1405, 1406, 5, 119, 0, 0, 1406, 1407, 5, 101, 0, 0, 1407, 1408, 5, 114, 0, 0, 1408, 1409, 5, 115, 0, 0, 1409, 1410, 5, 101, 0, 0, 1410, 1411, 5, 116, 0, 0, 1411, 1412, 5, 40, 0, 0, 1412, 316, 1, 0, 0, 0, 1413, 1414, 5, 117, 0, 0, 1414, 1415, 5, 110, 0, 0, 1415, 1416, 5, 105, 0, 0, 1416, 1417, 5, 111, 0, 0, 1417, 1418, 5, 110, 0, 0, 1418, 1419, 5, 40, 0, 0, 1419, 318, 1, 0, 0, 0, 1420, 1421, 5, 105, 0, 0, 1421, 1422, 5, 110, 0, 0, 1422, 1423, 5, 116, 0, 0, 1423, 1424, 5, 101, 0, 0, 1424, 1425, 5, 114, 0, 0, 1425, 1426, 5, 115, 0, 0, 1426, 1427, 5, 101, 0, 0, 1427, 1428, 5, 99, 0, 0, 1428, 1429, 5, 116, 0, 0, 1429, 1430, 5, 105, 0, 0, 1430, 1431, 5, 111, 0, 0, 1431, 1432, 5, 110, 0, 0, 1432, 1433, 5, 40, 0, 0, 1433, 320, 1, 0, 0, 0, 1434, 1435, 5, 99, 0, 0, 1435, 1436, 5, 111, 0, 0, 1436, 1437, 5, 109, 0, 0, 1437, 1438, 5, 112, 0, 0, 1438, 1439, 5, 108, 0, 0, 1439, 1440, 5, 101, 0, 0, 1440, 1441, 5, 109, 0, 0, 1441, 1442, 5, 101, 0, 0, 1442, 1443, 5, 110, 0, 0, 1443, 1444, 5, 116, 0, 0, 1444, 1445, 5, 40, 0, 0, 1445, 322, 1, 0, 0, 0, 1446, 1447, 5, 105, 0, 0, 1447, 1448, 5, 109, 0, 0, 1448, 1449, 5, 97, 0, 0, 1449, 1450, 5, 103, 0, 0, 1450, 1451, 5, 101, 0, 0, 1451, 1452, 5, 40, 0, 0, 1452, 324, 1, 0, 0, 0, 1453, 1454, 5, 112, 0, 0, 1454, 1455, 5, 114, 0, 0, 1455, 1456, 5, 101, 0, 0, 1456, 1457, 5, 105, 0, 0, 1457, 1458, 5, 109, 0, 0, 1458, 1459, 5, 97, 0, 0, 1459, 1460, 5, 103, 0, 0, 1460, 1461, 5, 101, 0, 0, 1461, 1462, 5, 40, 0, 0, 1462, 326, 1, 0, 0, 0, 1463, 1464, 5, 102, 0, 0, 1464, 1465, 5, 108, 0, 0, 1465, 1466, 5, 111, 0, 0, 1466, 1467, 5, 111, 0, 0, 1467, 1468, 5, 114, 0, 0, 1468, 1469, 5, 40, 0, 0, 1469, 328, 1, 0, 0, 0, 1470, 1471, 5, 99, 0, 0, 1471, 1472, 5, 101, 0, 0, 1472, 1473, 5, 105, 0, 0, 1473, 1474, 5, 108, 0, 0, 1474, 1475, 5, 40, 0, 0, 1475, 330, 1, 0, 0, 0, 1476, 1477, 5, 99, 0, 0, 1477, 1478, 5, 101, 0, 0, 1478, 1479, 5, 105, 0, 0, 1479, 1480, 5, 108, 0, 0, 1480, 1481, 5, 105, 0, 0, 1481, 1482, 5, 110, 0, 0, 1482, 1483, 5, 103, 0, 0, 1483, 1484, 5, 40, 0, 0, 1484, 332, 1, 0, 0, 0, 1485, 1486, 5, 114, 0, 0, 1486, 1487, 5, 111, 0, 0, 1487, 1488, 5, 117, 0, 0, 1488, 1489, 5, 110, 0, 0, 1489, 1490, 5, 100, 0, 0, 1490, 1491, 5, 40, 0, 0, 1491, 334, 1, 0, 0, 0, 1492, 1493, 5, 109, 0, 0, 1493, 1494, 5, 105, 0, 0, 1494, 1495, 5, 110, 0, 0, 1495, 1496, 5, 40, 0, 0, 1496, 336, 1, 0, 0, 0, 1497, 1498, 5, 109, 0, 0, 1498, 1499, 5, 97, 0, 0, 1499, 1500, 5, 120, 0, 0, 1500, 1501, 5, 40, 0, 0, 1501, 338, 1, 0, 0, 0, 1502, 1503, 5, 97, 0, 0, 1503, 1504, 5, 114, 0, 0, 1504, 1505, 5, 103, 0, 0, 1505, 1506, 5, 109, 0, 0, 1506, 1507, 5, 97, 0, 0, 1507, 1508, 5, 120, 0, 0, 1508, 1509, 5, 40, 0, 0, 1509, 340, 1, 0, 0, 0, 1510, 1511, 5, 97, 0, 0, 1511, 1512, 5, 114, 0, 0, 1512, 1513, 5, 103, 0, 0, 1513, 1514, 5, 109, 0, 0, 1514, 1515, 5, 105, 0, 0, 1515, 1516, 5, 110, 0, 0, 1516, 1517, 5, 40, 0, 0, 1517, 342, 1, 0, 0, 0, 1518, 1519, 5, 103, 0, 0, 1519, 1520, 5, 99, 0, 0, 1520, 1521, 5, 100, 0, 0, 1521, 1522, 5, 40, 0, 0, 1522, 344, 1, 0, 0, 0, 1523, 1524, 5, 108, 0, 0, 1524, 1525, 5, 99, 0, 0, 1525, 1526, 5, 109, 0, 0, 1526, 1527, 5, 40, 0, 0, 1527, 346, 1, 0, 0, 0, 1528, 1529, 5, 98, 0, 0, 1529, 1530, 5, 105, 0, 0, 1530, 1531, 5, 110, 0, 0, 1531, 1532, 5, 111, 0, 0, 1532, 1533, 5, 109, 0, 0, 1533, 1534, 5, 105, 0, 0, 1534, 1535, 5, 97, 0, 0, 1535, 1536, 5, 108, 0, 0, 1536, 1537, 5, 40, 0, 0, 1537, 348, 1, 0, 0, 0, 1538, 1539, 5, 109, 0, 0, 1539, 1540, 5, 117, 0, 0, 1540, 1541, 5, 108, 0, 0, 1541, 1542, 5, 116, 0, 0, 1542, 1543, 5, 105, 0, 0, 1543, 1544, 5, 110, 0, 0, 1544, 1545, 5, 111, 0, 0, 1545, 1546, 5, 109, 0, 0, 1546, 1547, 5, 105, 0, 0, 1547, 1548, 5, 97, 0, 0, 1548, 1549, 5, 108, 0, 0, 1549, 1550, 5, 40, 0, 0, 1550, 350, 1, 0, 0, 0, 1551, 1552, 5, 99, 0, 0, 1552, 1553, 5, 97, 0, 0, 1553, 1554, 5, 116, 0, 0, 1554, 1555, 5, 97, 0, 0, 1555, 1556, 5, 108, 0, 0, 1556, 1557, 5, 97, 0, 0, 1557, 1558, 5, 110, 0, 0, 1558, 1559, 5, 110, 0, 0, 1559, 1560, 5, 117, 0, 0, 1560, 1561, 5, 109, 0, 0, 1561, 1562, 5, 98, 0, 0, 1562, 1563, 5, 101, 0, 0, 1563, 1564, 5, 114, 0, 0, 1564, 1565, 5, 40, 0, 0, 1565, 352, 1, 0, 0, 0, 1566, 1567, 5, 104, 0, 0, 1567, 1568, 5, 97, 0, 0, 1568, 1569, 5, 114, 0, 0, 1569, 1570, 5, 109, 0, 0, 1570, 1571, 5, 111, 0, 0, 1571, 1572, 5, 110, 0, 0, 1572, 1573, 5, 105, 0, 0, 1573, 1574, 5, 99, 0, 0, 1574, 1575, 5, 110, 0, 0, 1575, 1576, 5, 117, 0, 0, 1576, 1577, 5, 109, 0, 0, 1577, 1578, 5, 98, 0, 0, 1578, 1579, 5, 101, 0, 0, 1579, 1580, 5, 114, 0, 0, 1580, 1581, 5, 40, 0, 0, 1581, 354, 1, 0, 0, 0, 1582, 1583, 5, 102, 0, 0, 1583, 1584, 5, 97, 0, 0, 1584, 1585, 5, 108, 0, 0, 1585, 1586, 5, 108, 0, 0, 1586, 1587, 5, 105, 0, 0, 1587, 1588, 5, 110, 0, 0, 1588, 1589, 5, 103, 0, 0, 1589, 1590, 5, 102, 0, 0, 1590, 1591, 5, 97, 0, 0, 1591, 1592, 5, 99, 0, 0, 1592, 1593, 5, 116, 0, 0, 1593, 1594, 5, 111, 0, 0, 1594, 1595, 5, 114, 0, 0, 1595, 1596, 5, 105, 0, 0, 1596, 1597, 5, 97, 0, 0, 1597, 1598, 5, 108, 0, 0, 1598, 1599, 5, 40, 0, 0, 1599, 356, 1, 0, 0, 0, 1600, 1601, 5, 102, 0, 0, 1601, 1602, 5, 97, 0, 0, 1602, 1603, 5, 99, 0, 0, 1603, 1604, 5, 116, 0, 0, 1604, 1605, 5, 111, 0, 0, 1605, 1606, 5, 114, 0, 0, 1606, 1607, 5, 105, 0, 0, 1607, 1608, 5, 97, 0, 0, 1608, 1609, 5, 108, 0, 0, 1609, 1610, 5, 112, 0, 0, 1610, 1611, 5, 111, 0, 0, 1611, 1612, 5, 119, 0, 0, 1612, 1613, 5, 101, 0, 0, 1613, 1614, 5, 114, 0, 0, 1614, 1615, 5, 40, 0, 0, 1615, 358, 1, 0, 0, 0, 1616, 1617, 5, 114, 0, 0, 1617, 1618, 5, 105, 0, 0, 1618, 1619, 5, 115, 0, 0, 1619, 1620, 5, 105, 0, 0, 1620, 1621, 5, 110, 0, 0, 1621, 1622, 5, 103, 0, 0, 1622, 1623, 5, 102, 0, 0, 1623, 1624, 5, 97, 0, 0, 1624, 1625, 5, 99, 0, 0, 1625, 1626, 5, 116, 0, 0, 1626, 1627, 5, 111, 0, 0, 1627, 1628, 5, 114, 0, 0, 1628, 1629, 5, 105, 0, 0, 1629, 1630, 5, 97, 0, 0, 1630, 1631, 5, 108, 0, 0, 1631, 1632, 5, 40, 0, 0, 1632, 360, 1, 0, 0, 0, 1633, 1634, 5, 105, 0, 0, 1634, 1635, 5, 118, 0, 0, 1635, 1636, 5, 101, 0, 0, 1636, 1637, 5, 114, 0, 0, 1637, 1638, 5, 115, 0, 0, 1638, 1639, 5, 111, 0, 0, 1639, 1640, 5, 110, 0, 0, 1640, 1641, 5, 40, 0, 0, 1641, 362, 1, 0, 0, 0, 1642, 1643, 5, 97, 0, 0, 1643, 1644, 5, 108, 0, 0, 1644, 1645, 5, 101, 0, 0, 1645, 1646, 5, 112, 0, 0, 1646, 1647, 5, 104, 0, 0, 1647, 1648, 5, 40, 0, 0, 1648, 364, 1, 0, 0, 0, 1649, 1650, 5, 101, 0, 0, 1650, 1651, 5, 114, 0, 0, 1651, 1652, 5, 102, 0, 0, 1652, 1653, 5, 40, 0, 0, 1653, 366, 1, 0, 0, 0, 1654, 1655, 5, 101, 0, 0, 1655, 1656, 5, 114, 0, 0, 1656, 1657, 5, 102, 0, 0, 1657, 1658, 5, 99, 0, 0, 1658, 1659, 5, 40, 0, 0, 1659, 368, 1, 0, 0, 0, 1660, 1661, 5, 101, 0, 0, 1661, 1662, 5, 114, 0, 0, 1662, 1663, 5, 102, 0, 0, 1663, 1664, 5, 105, 0, 0, 1664, 1665, 5, 40, 0, 0, 1665, 370, 1, 0, 0, 0, 1666, 1667, 5, 69, 0, 0, 1667, 1668, 5, 105, 0, 0, 1668, 1669, 5, 40, 0, 0, 1669, 372, 1, 0, 0, 0, 1670, 1671, 5, 108, 0, 0, 1671, 1672, 5, 105, 0, 0, 1672, 1673, 5, 40, 0, 0, 1673, 374, 1, 0, 0, 0, 1674, 1675, 5, 108, 0, 0, 1675, 1676, 5, 97, 0, 0, 1676, 1677, 5, 109, 0, 0, 1677, 1678, 5, 98, 0, 0, 1678, 1679, 5, 101, 0, 0, 1679, 1680, 5, 114, 0, 0, 1680, 1681, 5, 116, 0, 0, 1681, 1682, 5, 119, 0, 0, 1682, 1683, 5, 40, 0, 0, 1683, 376, 1, 0, 0, 0, 1684, 1685, 5, 112, 0, 0, 1685, 1686, 5, 114, 0, 0, 1686, 1687, 5, 111, 0, 0, 1687, 1688, 5, 100, 0, 0, 1688, 1689, 5, 117, 0, 0, 1689, 1690, 5, 99, 0, 0, 1690, 1691, 5, 116, 0, 0, 1691, 1692, 5, 108, 0, 0, 1692, 1693, 5, 111, 0, 0, 1693, 1694, 5, 103, 0, 0, 1694, 1695, 5, 40, 0, 0, 1695, 378, 1, 0, 0, 0, 1696, 1697, 5, 112, 0, 0, 1697, 1698, 5, 111, 0, 0, 1698, 1699, 5, 108, 0, 0, 1699, 1700, 5, 121, 0, 0, 1700, 1701, 5, 103, 0, 0, 1701, 1702, 5, 97, 0, 0, 1702, 1703, 5, 109, 0, 0, 1703, 1704, 5, 109, 0, 0, 1704, 1705, 5, 97, 0, 0, 1705, 1706, 5, 40, 0, 0, 1706, 380, 1, 0, 0, 0, 1707, 1708, 5, 100, 0, 0, 1708, 1709, 5, 105, 0, 0, 1709, 1710, 5, 103, 0, 0, 1710, 1711, 5, 97, 0, 0, 1711, 1712, 5, 109, 0, 0, 1712, 1713, 5, 109, 0, 0, 1713, 1714, 5, 97, 0, 0, 1714, 1715, 5, 40, 0, 0, 1715, 382, 1, 0, 0, 0, 1716, 1717, 5, 83, 0, 0, 1717, 1718, 5, 105, 0, 0, 1718, 1719, 5, 40, 0, 0, 1719, 384, 1, 0, 0, 0, 1720, 1721, 5, 67, 0, 0, 1721, 1722, 5, 105, 0, 0, 1722, 1723, 5, 40, 0, 0, 1723, 386, 1, 0, 0, 0, 1724, 1725, 5, 83, 0, 0, 1725, 1726, 5, 104, 0, 0, 1726, 1727, 5, 105, 0, 0, 1727, 1728, 5, 40, 0, 0, 1728, 388, 1, 0, 0, 0, 1729, 1730, 5, 67, 0, 0, 1730, 1731, 5, 104, 0, 0, 1731, 1732, 5, 105, 0, 0, 1732, 1733, 5, 40, 0, 0, 1733, 390, 1, 0, 0, 0, 1734, 1735, 5, 100, 0, 0, 1735, 1736, 5, 101, 0, 0, 1736, 1737, 5, 116, 0, 0, 1737, 1738, 5, 40, 0, 0, 1738, 392, 1, 0, 0, 0, 1739, 1740, 5, 116, 0, 0, 1740, 1741, 5, 114, 0, 0, 1741, 1742, 5, 97, 0, 0, 1742, 1743, 5, 110, 0, 0, 1743, 1744, 5, 115, 0, 0, 1744, 1745, 5, 112, 0, 0, 1745, 1746, 5, 111, 0, 0, 1746, 1747, 5, 115, 0, 0, 1747, 1748, 5, 101, 0, 0, 1748, 1749, 5, 40, 0, 0, 1749, 394, 1, 0, 0, 0, 1750, 1751, 5, 100, 0, 0, 1751, 1752, 5, 111, 0, 0, 1752, 1753, 5, 116, 0, 0, 1753, 1754, 5, 40, 0, 0, 1754, 396, 1, 0, 0, 0, 1755, 1756, 5, 99, 0, 0, 1756, 1757, 5, 114, 0, 0, 1757, 1758, 5, 111, 0, 0, 1758, 1759, 5, 115, 0, 0, 1759, 1760, 5, 115, 0, 0, 1760, 1761, 5, 40, 0, 0, 1761, 398, 1, 0, 0, 0, 1762, 1763, 5, 108, 0, 0, 1763, 1764, 5, 97, 0, 0, 1764, 1765, 5, 112, 0, 0, 1765, 1766, 5, 108, 0, 0, 1766, 1767, 5, 97, 0, 0, 1767, 1768, 5, 99, 0, 0, 1768, 1769, 5, 105, 0, 0, 1769, 1770, 5, 97, 0, 0, 1770, 1771, 5, 110, 0, 0, 1771, 1772, 5, 40, 0, 0, 1772, 400, 1, 0, 0, 0, 1773, 1774, 5, 102, 0, 0, 1774, 1775, 5, 111, 0, 0, 1775, 1776, 5, 114, 0, 0, 1776, 1777, 5, 119, 0, 0, 1777, 1778, 5, 97, 0, 0, 1778, 1779, 5, 114, 0, 0, 1779, 1780, 5, 100, 0, 0, 1780, 1781, 5, 100, 0, 0, 1781, 1782, 5, 105, 0, 0, 1782, 1783, 5, 102, 0, 0, 1783, 1784, 5, 102, 0, 0, 1784, 1785, 5, 101, 0, 0, 1785, 1786, 5, 114, 0, 0, 1786, 1787, 5, 101, 0, 0, 1787, 1788, 5, 110, 0, 0, 1788, 1789, 5, 99, 0, 0, 1789, 1790, 5, 101, 0, 0, 1790, 1791, 5, 40, 0, 0, 1791, 402, 1, 0, 0, 0, 1792, 1793, 5, 106, 0, 0, 1793, 1794, 5, 97, 0, 0, 1794, 1795, 5, 99, 0, 0, 1795, 1796, 5, 111, 0, 0, 1796, 1797, 5, 98, 0, 0, 1797, 1798, 5, 105, 0, 0, 1798, 1799, 5, 97, 0, 0, 1799, 1800, 5, 110, 0, 0, 1800, 1801, 5, 40, 0, 0, 1801, 404, 1, 0, 0, 0, 1802, 1803, 5, 104, 0, 0, 1803, 1804, 5, 101, 0, 0, 1804, 1805, 5, 115, 0, 0, 1805, 1806, 5, 115, 0, 0, 1806, 1807, 5, 105, 0, 0, 1807, 1808, 5, 97, 0, 0, 1808, 1809, 5, 110, 0, 0, 1809, 1810, 5, 40, 0, 0, 1810, 406, 1, 0, 0, 0, 1811, 1812, 5, 114, 0, 0, 1812, 1813, 5, 101, 0, 0, 1813, 1814, 5, 115, 0, 0, 1814, 1815, 5, 117, 0, 0, 1815, 1816, 5, 108, 0, 0, 1816, 1817, 5, 116, 0, 0, 1817, 1818, 5, 97, 0, 0, 1818, 1819, 5, 110, 0, 0, 1819, 1820, 5, 116, 0, 0, 1820, 1821, 5, 40, 0, 0, 1821, 408, 1, 0, 0, 0, 1822, 1823, 5, 99, 0, 0, 1823, 1824, 5, 111, 0, 0, 1824, 1825, 5, 110, 0, 0, 1825, 1826, 5, 106, 0, 0, 1826, 1827, 5, 117, 0, 0, 1827, 1828, 5, 103, 0, 0, 1828, 1829, 5, 97, 0, 0, 1829, 1830, 5, 116, 0, 0, 1830, 1831, 5, 101, 0, 0, 1831, 1832, 5, 40, 0, 0, 1832, 410, 1, 0, 0, 0, 1833, 1834, 5, 99, 0, 0, 1834, 1835, 5, 111, 0, 0, 1835, 1836, 5, 110, 0, 0, 1836, 1837, 5, 106, 0, 0, 1837, 1838, 5, 40, 0, 0, 1838, 412, 1, 0, 0, 0, 1839, 1840, 5, 97, 0, 0, 1840, 1841, 5, 114, 0, 0, 1841, 1842, 5, 103, 0, 0, 1842, 1843, 5, 40, 0, 0, 1843, 414, 1, 0, 0, 0, 1844, 1845, 5, 82, 0, 0, 1845, 1846, 5, 101, 0, 0, 1846, 1847, 5, 40, 0, 0, 1847, 416, 1, 0, 0, 0, 1848, 1849, 5, 73, 0, 0, 1849, 1850, 5, 109, 0, 0, 1850, 1851, 5, 40, 0, 0, 1851, 418, 1, 0, 0, 0, 1852, 1853, 5, 114, 0, 0, 1853, 1854, 5, 101, 0, 0, 1854, 1855, 5, 40, 0, 0, 1855, 420, 1, 0, 0, 0, 1856, 1857, 5, 114, 0, 0, 1857, 1858, 5, 101, 0, 0, 1858, 1859, 5, 97, 0, 0, 1859, 1860, 5, 108, 0, 0, 1860, 1861, 5, 40, 0, 0, 1861, 422, 1, 0, 0, 0, 1862, 1863, 5, 105, 0, 0, 1863, 1864, 5, 109, 0, 0, 1864, 1865, 5, 40, 0, 0, 1865, 424, 1, 0, 0, 0, 1866, 1867, 5, 105, 0, 0, 1867, 1868, 5, 109, 0, 0, 1868, 1869, 5, 97, 0, 0, 1869, 1870, 5, 103, 0, 0, 1870, 1871, 5, 40, 0, 0, 1871, 426, 1, 0, 0, 0, 1872, 1873, 5, 116, 0, 0, 1873, 1874, 5, 114, 0, 0, 1874, 1875, 5, 117, 0, 0, 1875, 1876, 5, 110, 0, 0, 1876, 1877, 5, 99, 0, 0, 1877, 1878, 5, 40, 0, 0, 1878, 428, 1, 0, 0, 0, 1879, 1880, 5, 122, 0, 0, 1880, 1881, 5, 101, 0, 0, 1881, 1882, 5, 116, 0, 0, 1882, 1883, 5, 97, 0, 0, 1883, 1884, 5, 40, 0, 0, 1884, 430, 1, 0, 0, 0, 1885, 1886, 5, 114, 0, 0, 1886, 1887, 5, 105, 0, 0, 1887, 1888, 5, 101, 0, 0, 1888, 1889, 5, 109, 0, 0, 1889, 1890, 5, 97, 0, 0, 1890, 1891, 5, 110, 0, 0, 1891, 1892, 5, 110, 0, 0, 1892, 1893, 5, 122, 0, 0, 1893, 1894, 5, 101, 0, 0, 1894, 1895, 5, 116, 0, 0, 1895, 1896, 5, 97, 0, 0, 1896, 1897, 5, 40, 0, 0, 1897, 432, 1, 0, 0, 0, 1898, 1899, 5, 104, 0, 0, 1899, 1900, 5, 117, 0, 0, 1900, 1901, 5, 114, 0, 0, 1901, 1902, 5, 119, 0, 0, 1902, 1903, 5, 105, 0, 0, 1903, 1904, 5, 116, 0, 0, 1904, 1905, 5, 122, 0, 0, 1905, 1906, 5, 122, 0, 0, 1906, 1907, 5, 101, 0, 0, 1907, 1908, 5, 116, 0, 0, 1908, 1909, 5, 97, 0, 0, 1909, 1910, 5, 40, 0, 0, 1910, 434, 1, 0, 0, 0, 1911, 1912, 5, 104, 0, 0, 1912, 1913, 5, 101, 0, 0, 1913, 1914, 5, 97, 0, 0, 1914, 1915, 5, 118, 0, 0, 1915, 1916, 5, 105, 0, 0, 1916, 1917, 5, 115, 0, 0, 1917, 1918, 5, 105, 0, 0, 1918, 1919, 5, 100, 0, 0, 1919, 1920, 5, 101, 0, 0, 1920, 1921, 5, 40, 0, 0, 1921, 436, 1, 0, 0, 0, 1922, 1923, 5, 117, 0, 0, 1923, 1924, 5, 110, 0, 0, 1924, 1925, 5, 105, 0, 0, 1925, 1926, 5, 116, 0, 0, 1926, 1927, 5, 115, 0, 0, 1927, 1928, 5, 116, 0, 0, 1928, 1929, 5, 101, 0, 0, 1929, 1930, 5, 112, 0, 0, 1930, 1931, 5, 40, 0, 0, 1931, 438, 1, 0, 0, 0, 1932, 1933, 5, 105, 0, 0, 1933, 1934, 5, 115, 0, 0, 1934, 1935, 5, 112, 0, 0, 1935, 1936, 5, 114, 0, 0, 1936, 1937, 5, 105, 0, 0, 1937, 1938, 5, 109, 0, 0, 1938, 1939, 5, 101, 0, 0, 1939, 1940, 5, 40, 0, 0, 1940, 440, 1, 0, 0, 0, 1941, 1942, 5, 112, 0, 0, 1942, 1943, 5, 111, 0, 0, 1943, 1944, 5, 99, 0, 0, 1944, 1945, 5, 104, 0, 0, 1945, 1946, 5, 104, 0, 0, 1946, 1947, 5, 97, 0, 0, 1947, 1948, 5, 109, 0, 0, 1948, 1949, 5, 109, 0, 0, 1949, 1950, 5, 101, 0, 0, 1950, 1951, 5, 114, 0, 0, 1951, 1952, 5, 40, 0, 0, 1952, 442, 1, 0, 0, 0, 1953, 1954, 5, 100, 0, 0, 1954, 1955, 5, 111, 0, 0, 1955, 1956, 5, 117, 0, 0, 1956, 1957, 5, 98, 0, 0, 1957, 1958, 5, 108, 0, 0, 1958, 1959, 5, 101, 0, 0, 1959, 1960, 5, 102, 0, 0, 1960, 1961, 5, 97, 0, 0, 1961, 1962, 5, 99, 0, 0, 1962, 1963, 5, 116, 0, 0, 1963, 1964, 5, 111, 0, 0, 1964, 1965, 5, 114, 0, 0, 1965, 1966, 5, 105, 0, 0, 1966, 1967, 5, 97, 0, 0, 1967, 1968, 5, 108, 0, 0, 1968, 1969, 5, 40, 0, 0, 1969, 444, 1, 0, 0, 0, 1970, 1971, 5, 102, 0, 0, 1971, 1972, 5, 97, 0, 0, 1972, 1973, 5, 99, 0, 0, 1973, 1974, 5, 116, 0, 0, 1974, 1975, 5, 111, 0, 0, 1975, 1976, 5, 114, 0, 0, 1976, 1977, 5, 105, 0, 0, 1977, 1978, 5, 97, 0, 0, 1978, 1979, 5, 108, 0, 0, 1979, 1980, 5, 50, 0, 0, 1980, 1981, 5, 40, 0, 0, 1981, 446, 1, 0, 0, 0, 1982, 1983, 5, 102, 0, 0, 1983, 1984, 5, 114, 0, 0, 1984, 1985, 5, 97, 0, 0, 1985, 1986, 5, 99, 0, 0, 1986, 1987, 5, 116, 0, 0, 1987, 1988, 5, 105, 0, 0, 1988, 1989, 5, 111, 0, 0, 1989, 1990, 5, 110, 0, 0, 1990, 1991, 5, 97, 0, 0, 1991, 1992, 5, 108, 0, 0, 1992, 1993, 5, 112, 0, 0, 1993, 1994, 5, 97, 0, 0, 1994, 1995, 5, 114, 0, 0, 1995, 1996, 5, 116, 0, 0, 1996, 1997, 5, 40, 0, 0, 1997, 448, 1, 0, 0, 0, 1998, 1999, 5, 113, 0, 0, 1999, 2000, 5, 117, 0, 0, 2000, 2001, 5, 111, 0, 0, 2001, 2002, 5, 116, 0, 0, 2002, 2003, 5, 105, 0, 0, 2003, 2004, 5, 101, 0, 0, 2004, 2005, 5, 110, 0, 0, 2005, 2006, 5, 116, 0, 0, 2006, 2007, 5, 40, 0, 0, 2007, 450, 1, 0, 0, 0, 2008, 2009, 5, 100, 0, 0, 2009, 2010, 5, 111, 0, 0, 2010, 2011, 5, 109, 0, 0, 2011, 2012, 5, 97, 0, 0, 2012, 2013, 5, 105, 0, 0, 2013, 2014, 5, 110, 0, 0, 2014, 2015, 5, 40, 0, 0, 2015, 452, 1, 0, 0, 0, 2016, 2017, 5, 112, 0, 0, 2017, 2018, 5, 105, 0, 0, 2018, 2019, 5, 101, 0, 0, 2019, 2020, 5, 99, 0, 0, 2020, 2021, 5, 101, 0, 0, 2021, 2022, 5, 119, 0, 0, 2022, 2023, 5, 105, 0, 0, 2023, 2024, 5, 115, 0, 0, 2024, 2025, 5, 101, 0, 0, 2025, 2026, 5, 40, 0, 0, 2026, 454, 1, 0, 0, 0, 2027, 2028, 5, 97, 0, 0, 2028, 2029, 5, 112, 0, 0, 2029, 2030, 5, 112, 0, 0, 2030, 2031, 5, 108, 0, 0, 2031, 2032, 5, 121, 0, 0, 2032, 2033, 5, 40, 0, 0, 2033, 456, 1, 0, 0, 0, 2034, 2035, 5, 108, 0, 0, 2035, 2036, 5, 97, 0, 0, 2036, 2037, 5, 109, 0, 0, 2037, 2038, 5, 98, 0, 0, 2038, 2039, 5, 100, 0, 0, 2039, 2040, 5, 97, 0, 0, 2040, 2041, 5, 40, 0, 0, 2041, 458, 1, 0, 0, 0, 2042, 2044, 5, 13, 0, 0, 2043, 2042, 1, 0, 0, 0, 2043, 2044, 1, 0, 0, 0, 2044, 2045, 1, 0, 0, 0, 2045, 2047, 5, 10, 0, 0, 2046, 2043, 1, 0, 0, 0, 2047, 2048, 1, 0, 0, 0, 2048, 2046, 1, 0, 0, 0, 2048, 2049, 1, 0, 0, 0, 2049, 2050, 1, 0, 0, 0, 2050, 2051, 6, 229, 0, 0, 2051, 460, 1, 0, 0, 0, 2052, 2054, 7, 0, 0, 0, 2053, 2055, 7, 1, 0, 0, 2054, 2053, 1, 0, 0, 0, 2054, 2055, 1, 0, 0, 0, 2055, 2057, 1, 0, 0, 0, 2056, 2058, 2, 48, 57, 0, 2057, 2056, 1, 0, 0, 0, 2058, 2059, 1, 0, 0, 0, 2059, 2057, 1, 0, 0, 0, 2059, 2060, 1, 0, 0, 0, 2060, 462, 1, 0, 0, 0, 2061, 2063, 2, 48, 57, 0, 2062, 2061, 1, 0, 0, 0, 2063, 2064, 1, 0, 0, 0, 2064, 2062, 1, 0, 0, 0, 2064, 2065, 1, 0, 0, 0, 2065, 2066, 1, 0, 0, 0, 2066, 2070, 5, 46, 0, 0, 2067, 2069, 2, 48, 57, 0, 2068, 2067, 1, 0, 0, 0, 2069, 2072, 1, 0, 0, 0, 2070, 2068, 1, 0, 0, 0, 2070, 2071, 1, 0, 0, 0, 2071, 2074, 1, 0, 0, 0, 2072, 2070, 1, 0, 0, 0, 2073, 2075, 3, 461, 230, 0, 2074, 2073, 1, 0, 0, 0, 2074, 2075, 1, 0, 0, 0, 2075, 2077, 1, 0, 0, 0, 2076, 2078, 5, 105, 0, 0, 2077, 2076, 1, 0, 0, 0, 2077, 2078, 1, 0, 0, 0, 2078, 2095, 1, 0, 0, 0, 2079, 2081, 5, 46, 0, 0, 2080, 2079, 1, 0, 0, 0, 2080, 2081, 1, 0, 0, 0, 2081, 2083, 1, 0, 0, 0, 2082, 2084, 2, 48, 57, 0, 2083, 2082, 1, 0, 0, 0, 2084, 2085, 1, 0, 0, 0, 2085, 2083, 1, 0, 0, 0, 2085, 2086, 1, 0, 0, 0, 2086, 2088, 1, 0, 0, 0, 2087, 2089, 3, 461, 230, 0, 2088, 2087, 1, 0, 0, 0, 2088, 2089, 1, 0, 0, 0, 2089, 2091, 1, 0, 0, 0, 2090, 2092, 5, 105, 0, 0, 2091, 2090, 1, 0, 0, 0, 2091, 2092, 1, 0, 0, 0, 2092, 2095, 1, 0, 0, 0, 2093, 2095, 5, 105, 0, 0, 2094, 2062, 1, 0, 0, 0, 2094, 2080, 1, 0, 0, 0, 2094, 2093, 1, 0, 0, 0, 2095, 464, 1, 0, 0, 0, 2096, 2097, 5, 67, 0, 0, 2097, 2115, 5, 67, 0, 0, 2098, 2099, 5, 82, 0, 0, 2099, 2115, 5, 82, 0, 0, 2100, 2101, 5, 81, 0, 0, 2101, 2115, 5, 81, 0, 0, 2102, 2103, 5, 90, 0, 0, 2103, 2115, 5, 90, 0, 0, 2104, 2105, 5, 66, 0, 0, 2105, 2115, 5, 66, 0, 0, 2106, 2107, 5, 90, 0, 0, 2107, 2108, 5, 90, 0, 0, 2108, 2115, 5, 42, 0, 0, 2109, 2110, 5, 90, 0, 0, 2110, 2111, 5, 90, 0, 0, 2111, 2115, 5, 43, 0, 0, 2112, 2113, 5, 80, 0, 0, 2113, 2115, 5, 80, 0, 0, 2114, 2096, 1, 0, 0, 0, 2114, 2098, 1, 0, 0, 0, 2114, 2100, 1, 0, 0, 0, 2114, 2102, 1, 0, 0, 0, 2114, 2104, 1, 0, 0, 0, 2114, 2106, 1, 0, 0, 0, 2114, 2109, 1, 0, 0, 0, 2114, 2112, 1, 0, 0, 0, 2115, 466, 1, 0, 0, 0, 2116, 2117, 5, 116, 0, 0, 2117, 2118, 5, 114, 0, 0, 2118, 2119, 5, 117, 0, 0, 2119, 2135, 5, 101, 0, 0, 2120, 2121, 5, 84, 0, 0, 2121, 2122, 5, 114, 0, 0, 2122, 2123, 5, 117, 0, 0, 2123, 2135, 5, 101, 0, 0, 2124, 2125, 5, 102, 0, 0, 2125, 2126, 5, 97, 0, 0, 2126, 2127, 5, 108, 0, 0, 2127, 2128, 5, 115, 0, 0, 2128, 2135, 5, 101, 0, 0, 2129, 2130, 5, 70, 0, 0, 2130, 2131, 5, 97, 0, 0, 2131, 2132, 5, 108, 0, 0, 2132, 2133, 5, 115, 0, 0, 2133, 2135, 5, 101, 0, 0, 2134, 2116, 1, 0, 0, 0, 2134, 2120, 1, 0, 0, 0, 2134, 2124, 1, 0, 0, 0, 2134, 2129, 1, 0, 0, 0, 2135, 468, 1, 0, 0, 0, 2136, 2137, 5, 78, 0, 0, 2137, 2138, 5, 97, 0, 0, 2138, 2139, 5, 78, 0, 0, 2139, 470, 1, 0, 0, 0, 2140, 2142, 7, 2, 0, 0, 2141, 2140, 1, 0, 0, 0, 2142, 2143, 1, 0, 0, 0, 2143, 2141, 1, 0, 0, 0, 2143, 2144, 1, 0, 0, 0, 2144, 2153, 1, 0, 0, 0, 2145, 2147, 5, 95, 0, 0, 2146, 2148, 7, 3, 0, 0, 2147, 2146, 1, 0, 0, 0, 2148, 2149, 1, 0, 0, 0, 2149, 2147, 1, 0, 0, 0, 2149, 2150, 1, 0, 0, 0, 2150, 2152, 1, 0, 0, 0, 2151, 2145, 1, 0, 0, 0, 2152, 2155, 1, 0, 0, 0, 2153, 2151, 1, 0, 0, 0, 2153, 2154, 1, 0, 0, 0, 2154, 472, 1, 0, 0, 0, 2155, 2153, 1, 0, 0, 0, 2156, 2157, 5, 47, 0, 0, 2157, 2158, 5, 47, 0, 0, 2158, 2162, 1, 0, 0, 0, 2159, 2161, 8, 4, 0, 0, 2160, 2159, 1, 0, 0, 0, 2161, 2164, 1, 0, 0, 0, 2162, 2160, 1, 0, 0, 0, 2162, 2163, 1, 0, 0, 0, 2163, 2169, 1, 0, 0, 0, 2164, 2162, 1, 0, 0, 0, 2165, 2167, 5, 13, 0, 0, 2166, 2165, 1, 0, 0, 0, 2166, 2167, 1, 0, 0, 0, 2167, 2168, 1, 0, 0, 0, 2168, 2170, 5, 10, 0, 0, 2169, 2166, 1, 0, 0, 0, 2169, 2170, 1, 0, 0, 0, 2170, 2183, 1, 0, 0, 0, 2171, 2172, 5, 47, 0, 0, 2172, 2173, 5, 42, 0, 0, 2173, 2177, 1, 0, 0, 0, 2174, 2176, 9, 0, 0, 0, 2175, 2174, 1, 0, 0, 0, 2176, 2179, 1, 0, 0, 0, 2177, 2178, 1, 0, 0, 0, 2177, 2175, 1, 0, 0, 0, 2178, 2180, 1, 0, 0, 0, 2179, 2177, 1, 0, 0, 0, 2180, 2181, 5, 42, 0, 0, 2181, 2183, 5, 47, 0, 0, 2182, 2156, 1, 0, 0, 0, 2182, 2171, 1, 0, 0, 0, 2183, 2184, 1, 0, 0, 0, 2184, 2185, 6, 236, 0, 0, 2185, 474, 1, 0, 0, 0, 2186, 2188, 7, 5, 0, 0, 2187, 2186, 1, 0, 0, 0, 2188, 2189, 1, 0, 0, 0, 2189, 2187, 1, 0, 0, 0, 2189, 2190, 1, 0, 0, 0, 2190, 2191, 1, 0, 0, 0, 2191, 2192, 6, 237, 0, 0, 2192, 476, 1, 0, 0, 0, 25, 0, 2043, 2048, 2054, 2059, 2064, 2070, 2074, 2077, 2080, 2085, 2088, 2091, 2094, 2114, 2134, 2143, 2149, 2153, 2162, 2166, 2169, 2177, 2182, 2189, 1, 6, 0, 0]
\ No newline at end of file
+[4, 0, 238, 2202, 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, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 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, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 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, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 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, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 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, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 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, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 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, 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, 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, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 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, 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, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 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, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 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, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 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, 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, 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, 129, 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, 131, 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, 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, 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, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 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, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 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, 150, 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, 152, 1, 152, 1, 153, 1, 153, 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, 154, 1, 154, 1, 155, 1, 155, 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, 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, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 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, 162, 1, 162, 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, 163, 1, 163, 1, 164, 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, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 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, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 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, 174, 1, 174, 1, 174, 1, 174, 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, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 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, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 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, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 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, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 3, 230, 2053, 8, 230, 1, 230, 4, 230, 2056, 8, 230, 11, 230, 12, 230, 2057, 1, 230, 1, 230, 1, 231, 1, 231, 3, 231, 2064, 8, 231, 1, 231, 4, 231, 2067, 8, 231, 11, 231, 12, 231, 2068, 1, 232, 4, 232, 2072, 8, 232, 11, 232, 12, 232, 2073, 1, 232, 1, 232, 5, 232, 2078, 8, 232, 10, 232, 12, 232, 2081, 9, 232, 1, 232, 3, 232, 2084, 8, 232, 1, 232, 3, 232, 2087, 8, 232, 1, 232, 3, 232, 2090, 8, 232, 1, 232, 4, 232, 2093, 8, 232, 11, 232, 12, 232, 2094, 1, 232, 3, 232, 2098, 8, 232, 1, 232, 3, 232, 2101, 8, 232, 1, 232, 3, 232, 2104, 8, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 3, 233, 2124, 8, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 3, 234, 2144, 8, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 236, 4, 236, 2151, 8, 236, 11, 236, 12, 236, 2152, 1, 236, 1, 236, 4, 236, 2157, 8, 236, 11, 236, 12, 236, 2158, 5, 236, 2161, 8, 236, 10, 236, 12, 236, 2164, 9, 236, 1, 237, 1, 237, 1, 237, 1, 237, 5, 237, 2170, 8, 237, 10, 237, 12, 237, 2173, 9, 237, 1, 237, 3, 237, 2176, 8, 237, 1, 237, 3, 237, 2179, 8, 237, 1, 237, 1, 237, 1, 237, 1, 237, 5, 237, 2185, 8, 237, 10, 237, 12, 237, 2188, 9, 237, 1, 237, 1, 237, 3, 237, 2192, 8, 237, 1, 237, 1, 237, 1, 238, 4, 238, 2197, 8, 238, 11, 238, 12, 238, 2198, 1, 238, 1, 238, 1, 2186, 0, 239, 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, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 231, 463, 0, 465, 232, 467, 233, 469, 234, 471, 235, 473, 236, 475, 237, 477, 238, 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, 2233, 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, 387, 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, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 1, 479, 1, 0, 0, 0, 3, 481, 1, 0, 0, 0, 5, 483, 1, 0, 0, 0, 7, 485, 1, 0, 0, 0, 9, 488, 1, 0, 0, 0, 11, 492, 1, 0, 0, 0, 13, 494, 1, 0, 0, 0, 15, 496, 1, 0, 0, 0, 17, 498, 1, 0, 0, 0, 19, 500, 1, 0, 0, 0, 21, 504, 1, 0, 0, 0, 23, 506, 1, 0, 0, 0, 25, 508, 1, 0, 0, 0, 27, 512, 1, 0, 0, 0, 29, 522, 1, 0, 0, 0, 31, 525, 1, 0, 0, 0, 33, 531, 1, 0, 0, 0, 35, 534, 1, 0, 0, 0, 37, 546, 1, 0, 0, 0, 39, 548, 1, 0, 0, 0, 41, 551, 1, 0, 0, 0, 43, 558, 1, 0, 0, 0, 45, 560, 1, 0, 0, 0, 47, 569, 1, 0, 0, 0, 49, 571, 1, 0, 0, 0, 51, 579, 1, 0, 0, 0, 53, 581, 1, 0, 0, 0, 55, 584, 1, 0, 0, 0, 57, 587, 1, 0, 0, 0, 59, 589, 1, 0, 0, 0, 61, 591, 1, 0, 0, 0, 63, 593, 1, 0, 0, 0, 65, 596, 1, 0, 0, 0, 67, 598, 1, 0, 0, 0, 69, 600, 1, 0, 0, 0, 71, 602, 1, 0, 0, 0, 73, 606, 1, 0, 0, 0, 75, 610, 1, 0, 0, 0, 77, 612, 1, 0, 0, 0, 79, 616, 1, 0, 0, 0, 81, 619, 1, 0, 0, 0, 83, 627, 1, 0, 0, 0, 85, 630, 1, 0, 0, 0, 87, 639, 1, 0, 0, 0, 89, 642, 1, 0, 0, 0, 91, 644, 1, 0, 0, 0, 93, 651, 1, 0, 0, 0, 95, 653, 1, 0, 0, 0, 97, 661, 1, 0, 0, 0, 99, 664, 1, 0, 0, 0, 101, 671, 1, 0, 0, 0, 103, 673, 1, 0, 0, 0, 105, 675, 1, 0, 0, 0, 107, 677, 1, 0, 0, 0, 109, 681, 1, 0, 0, 0, 111, 685, 1, 0, 0, 0, 113, 688, 1, 0, 0, 0, 115, 691, 1, 0, 0, 0, 117, 693, 1, 0, 0, 0, 119, 696, 1, 0, 0, 0, 121, 698, 1, 0, 0, 0, 123, 700, 1, 0, 0, 0, 125, 705, 1, 0, 0, 0, 127, 712, 1, 0, 0, 0, 129, 718, 1, 0, 0, 0, 131, 723, 1, 0, 0, 0, 133, 729, 1, 0, 0, 0, 135, 735, 1, 0, 0, 0, 137, 740, 1, 0, 0, 0, 139, 744, 1, 0, 0, 0, 141, 749, 1, 0, 0, 0, 143, 754, 1, 0, 0, 0, 145, 759, 1, 0, 0, 0, 147, 764, 1, 0, 0, 0, 149, 771, 1, 0, 0, 0, 151, 776, 1, 0, 0, 0, 153, 781, 1, 0, 0, 0, 155, 788, 1, 0, 0, 0, 157, 793, 1, 0, 0, 0, 159, 801, 1, 0, 0, 0, 161, 809, 1, 0, 0, 0, 163, 817, 1, 0, 0, 0, 165, 827, 1, 0, 0, 0, 167, 835, 1, 0, 0, 0, 169, 845, 1, 0, 0, 0, 171, 853, 1, 0, 0, 0, 173, 859, 1, 0, 0, 0, 175, 865, 1, 0, 0, 0, 177, 871, 1, 0, 0, 0, 179, 877, 1, 0, 0, 0, 181, 885, 1, 0, 0, 0, 183, 891, 1, 0, 0, 0, 185, 899, 1, 0, 0, 0, 187, 905, 1, 0, 0, 0, 189, 913, 1, 0, 0, 0, 191, 919, 1, 0, 0, 0, 193, 923, 1, 0, 0, 0, 195, 929, 1, 0, 0, 0, 197, 933, 1, 0, 0, 0, 199, 939, 1, 0, 0, 0, 201, 943, 1, 0, 0, 0, 203, 951, 1, 0, 0, 0, 205, 957, 1, 0, 0, 0, 207, 962, 1, 0, 0, 0, 209, 968, 1, 0, 0, 0, 211, 973, 1, 0, 0, 0, 213, 981, 1, 0, 0, 0, 215, 987, 1, 0, 0, 0, 217, 994, 1, 0, 0, 0, 219, 1002, 1, 0, 0, 0, 221, 1008, 1, 0, 0, 0, 223, 1017, 1, 0, 0, 0, 225, 1024, 1, 0, 0, 0, 227, 1032, 1, 0, 0, 0, 229, 1038, 1, 0, 0, 0, 231, 1047, 1, 0, 0, 0, 233, 1054, 1, 0, 0, 0, 235, 1062, 1, 0, 0, 0, 237, 1068, 1, 0, 0, 0, 239, 1077, 1, 0, 0, 0, 241, 1084, 1, 0, 0, 0, 243, 1092, 1, 0, 0, 0, 245, 1101, 1, 0, 0, 0, 247, 1111, 1, 0, 0, 0, 249, 1118, 1, 0, 0, 0, 251, 1129, 1, 0, 0, 0, 253, 1136, 1, 0, 0, 0, 255, 1144, 1, 0, 0, 0, 257, 1151, 1, 0, 0, 0, 259, 1160, 1, 0, 0, 0, 261, 1169, 1, 0, 0, 0, 263, 1179, 1, 0, 0, 0, 265, 1187, 1, 0, 0, 0, 267, 1198, 1, 0, 0, 0, 269, 1205, 1, 0, 0, 0, 271, 1216, 1, 0, 0, 0, 273, 1223, 1, 0, 0, 0, 275, 1235, 1, 0, 0, 0, 277, 1245, 1, 0, 0, 0, 279, 1252, 1, 0, 0, 0, 281, 1263, 1, 0, 0, 0, 283, 1275, 1, 0, 0, 0, 285, 1280, 1, 0, 0, 0, 287, 1289, 1, 0, 0, 0, 289, 1297, 1, 0, 0, 0, 291, 1302, 1, 0, 0, 0, 293, 1308, 1, 0, 0, 0, 295, 1313, 1, 0, 0, 0, 297, 1318, 1, 0, 0, 0, 299, 1325, 1, 0, 0, 0, 301, 1336, 1, 0, 0, 0, 303, 1344, 1, 0, 0, 0, 305, 1355, 1, 0, 0, 0, 307, 1369, 1, 0, 0, 0, 309, 1378, 1, 0, 0, 0, 311, 1390, 1, 0, 0, 0, 313, 1399, 1, 0, 0, 0, 315, 1405, 1, 0, 0, 0, 317, 1415, 1, 0, 0, 0, 319, 1422, 1, 0, 0, 0, 321, 1436, 1, 0, 0, 0, 323, 1448, 1, 0, 0, 0, 325, 1455, 1, 0, 0, 0, 327, 1465, 1, 0, 0, 0, 329, 1472, 1, 0, 0, 0, 331, 1478, 1, 0, 0, 0, 333, 1487, 1, 0, 0, 0, 335, 1494, 1, 0, 0, 0, 337, 1499, 1, 0, 0, 0, 339, 1504, 1, 0, 0, 0, 341, 1512, 1, 0, 0, 0, 343, 1520, 1, 0, 0, 0, 345, 1525, 1, 0, 0, 0, 347, 1530, 1, 0, 0, 0, 349, 1540, 1, 0, 0, 0, 351, 1553, 1, 0, 0, 0, 353, 1568, 1, 0, 0, 0, 355, 1584, 1, 0, 0, 0, 357, 1602, 1, 0, 0, 0, 359, 1618, 1, 0, 0, 0, 361, 1635, 1, 0, 0, 0, 363, 1644, 1, 0, 0, 0, 365, 1651, 1, 0, 0, 0, 367, 1656, 1, 0, 0, 0, 369, 1662, 1, 0, 0, 0, 371, 1668, 1, 0, 0, 0, 373, 1672, 1, 0, 0, 0, 375, 1676, 1, 0, 0, 0, 377, 1686, 1, 0, 0, 0, 379, 1698, 1, 0, 0, 0, 381, 1709, 1, 0, 0, 0, 383, 1718, 1, 0, 0, 0, 385, 1722, 1, 0, 0, 0, 387, 1726, 1, 0, 0, 0, 389, 1731, 1, 0, 0, 0, 391, 1736, 1, 0, 0, 0, 393, 1741, 1, 0, 0, 0, 395, 1752, 1, 0, 0, 0, 397, 1759, 1, 0, 0, 0, 399, 1764, 1, 0, 0, 0, 401, 1771, 1, 0, 0, 0, 403, 1782, 1, 0, 0, 0, 405, 1801, 1, 0, 0, 0, 407, 1811, 1, 0, 0, 0, 409, 1820, 1, 0, 0, 0, 411, 1831, 1, 0, 0, 0, 413, 1842, 1, 0, 0, 0, 415, 1848, 1, 0, 0, 0, 417, 1853, 1, 0, 0, 0, 419, 1857, 1, 0, 0, 0, 421, 1861, 1, 0, 0, 0, 423, 1865, 1, 0, 0, 0, 425, 1871, 1, 0, 0, 0, 427, 1875, 1, 0, 0, 0, 429, 1881, 1, 0, 0, 0, 431, 1888, 1, 0, 0, 0, 433, 1894, 1, 0, 0, 0, 435, 1907, 1, 0, 0, 0, 437, 1920, 1, 0, 0, 0, 439, 1931, 1, 0, 0, 0, 441, 1941, 1, 0, 0, 0, 443, 1950, 1, 0, 0, 0, 445, 1962, 1, 0, 0, 0, 447, 1979, 1, 0, 0, 0, 449, 1991, 1, 0, 0, 0, 451, 2007, 1, 0, 0, 0, 453, 2017, 1, 0, 0, 0, 455, 2025, 1, 0, 0, 0, 457, 2036, 1, 0, 0, 0, 459, 2043, 1, 0, 0, 0, 461, 2055, 1, 0, 0, 0, 463, 2061, 1, 0, 0, 0, 465, 2103, 1, 0, 0, 0, 467, 2123, 1, 0, 0, 0, 469, 2143, 1, 0, 0, 0, 471, 2145, 1, 0, 0, 0, 473, 2150, 1, 0, 0, 0, 475, 2191, 1, 0, 0, 0, 477, 2196, 1, 0, 0, 0, 479, 480, 5, 91, 0, 0, 480, 2, 1, 0, 0, 0, 481, 482, 5, 93, 0, 0, 482, 4, 1, 0, 0, 0, 483, 484, 5, 33, 0, 0, 484, 6, 1, 0, 0, 0, 485, 486, 5, 33, 0, 0, 486, 487, 5, 33, 0, 0, 487, 8, 1, 0, 0, 0, 488, 489, 5, 33, 0, 0, 489, 490, 5, 33, 0, 0, 490, 491, 5, 33, 0, 0, 491, 10, 1, 0, 0, 0, 492, 493, 5, 94, 0, 0, 493, 12, 1, 0, 0, 0, 494, 495, 5, 45, 0, 0, 495, 14, 1, 0, 0, 0, 496, 497, 5, 43, 0, 0, 497, 16, 1, 0, 0, 0, 498, 499, 5, 42, 0, 0, 499, 18, 1, 0, 0, 0, 500, 501, 5, 46, 0, 0, 501, 502, 5, 46, 0, 0, 502, 503, 5, 46, 0, 0, 503, 20, 1, 0, 0, 0, 504, 505, 5, 8230, 0, 0, 505, 22, 1, 0, 0, 0, 506, 507, 5, 47, 0, 0, 507, 24, 1, 0, 0, 0, 508, 509, 5, 109, 0, 0, 509, 510, 5, 111, 0, 0, 510, 511, 5, 100, 0, 0, 511, 26, 1, 0, 0, 0, 512, 513, 5, 105, 0, 0, 513, 514, 5, 110, 0, 0, 514, 515, 5, 116, 0, 0, 515, 516, 5, 101, 0, 0, 516, 517, 5, 114, 0, 0, 517, 518, 5, 115, 0, 0, 518, 519, 5, 101, 0, 0, 519, 520, 5, 99, 0, 0, 520, 521, 5, 116, 0, 0, 521, 28, 1, 0, 0, 0, 522, 523, 5, 47, 0, 0, 523, 524, 5, 92, 0, 0, 524, 30, 1, 0, 0, 0, 525, 526, 5, 117, 0, 0, 526, 527, 5, 110, 0, 0, 527, 528, 5, 105, 0, 0, 528, 529, 5, 116, 0, 0, 529, 530, 5, 101, 0, 0, 530, 32, 1, 0, 0, 0, 531, 532, 5, 92, 0, 0, 532, 533, 5, 47, 0, 0, 533, 34, 1, 0, 0, 0, 534, 535, 5, 115, 0, 0, 535, 536, 5, 101, 0, 0, 536, 537, 5, 116, 0, 0, 537, 538, 5, 115, 0, 0, 538, 539, 5, 117, 0, 0, 539, 540, 5, 98, 0, 0, 540, 541, 5, 116, 0, 0, 541, 542, 5, 114, 0, 0, 542, 543, 5, 97, 0, 0, 543, 544, 5, 99, 0, 0, 544, 545, 5, 116, 0, 0, 545, 36, 1, 0, 0, 0, 546, 547, 5, 92, 0, 0, 547, 38, 1, 0, 0, 0, 548, 549, 5, 105, 0, 0, 549, 550, 5, 110, 0, 0, 550, 40, 1, 0, 0, 0, 551, 552, 5, 115, 0, 0, 552, 553, 5, 117, 0, 0, 553, 554, 5, 98, 0, 0, 554, 555, 5, 115, 0, 0, 555, 556, 5, 101, 0, 0, 556, 557, 5, 116, 0, 0, 557, 42, 1, 0, 0, 0, 558, 559, 5, 8838, 0, 0, 559, 44, 1, 0, 0, 0, 560, 561, 5, 115, 0, 0, 561, 562, 5, 117, 0, 0, 562, 563, 5, 112, 0, 0, 563, 564, 5, 101, 0, 0, 564, 565, 5, 114, 0, 0, 565, 566, 5, 115, 0, 0, 566, 567, 5, 101, 0, 0, 567, 568, 5, 116, 0, 0, 568, 46, 1, 0, 0, 0, 569, 570, 5, 8839, 0, 0, 570, 48, 1, 0, 0, 0, 571, 572, 5, 100, 0, 0, 572, 573, 5, 105, 0, 0, 573, 574, 5, 118, 0, 0, 574, 575, 5, 105, 0, 0, 575, 576, 5, 100, 0, 0, 576, 577, 5, 101, 0, 0, 577, 578, 5, 115, 0, 0, 578, 50, 1, 0, 0, 0, 579, 580, 5, 124, 0, 0, 580, 52, 1, 0, 0, 0, 581, 582, 5, 62, 0, 0, 582, 583, 5, 61, 0, 0, 583, 54, 1, 0, 0, 0, 584, 585, 5, 60, 0, 0, 585, 586, 5, 61, 0, 0, 586, 56, 1, 0, 0, 0, 587, 588, 5, 62, 0, 0, 588, 58, 1, 0, 0, 0, 589, 590, 5, 60, 0, 0, 590, 60, 1, 0, 0, 0, 591, 592, 5, 61, 0, 0, 592, 62, 1, 0, 0, 0, 593, 594, 5, 60, 0, 0, 594, 595, 5, 62, 0, 0, 595, 64, 1, 0, 0, 0, 596, 597, 5, 8801, 0, 0, 597, 66, 1, 0, 0, 0, 598, 599, 5, 40, 0, 0, 599, 68, 1, 0, 0, 0, 600, 601, 5, 41, 0, 0, 601, 70, 1, 0, 0, 0, 602, 603, 5, 110, 0, 0, 603, 604, 5, 111, 0, 0, 604, 605, 5, 116, 0, 0, 605, 72, 1, 0, 0, 0, 606, 607, 5, 97, 0, 0, 607, 608, 5, 110, 0, 0, 608, 609, 5, 100, 0, 0, 609, 74, 1, 0, 0, 0, 610, 611, 5, 38, 0, 0, 611, 76, 1, 0, 0, 0, 612, 613, 5, 120, 0, 0, 613, 614, 5, 111, 0, 0, 614, 615, 5, 114, 0, 0, 615, 78, 1, 0, 0, 0, 616, 617, 5, 111, 0, 0, 617, 618, 5, 114, 0, 0, 618, 80, 1, 0, 0, 0, 619, 620, 5, 105, 0, 0, 620, 621, 5, 109, 0, 0, 621, 622, 5, 112, 0, 0, 622, 623, 5, 108, 0, 0, 623, 624, 5, 105, 0, 0, 624, 625, 5, 101, 0, 0, 625, 626, 5, 115, 0, 0, 626, 82, 1, 0, 0, 0, 627, 628, 5, 45, 0, 0, 628, 629, 5, 62, 0, 0, 629, 84, 1, 0, 0, 0, 630, 631, 5, 112, 0, 0, 631, 632, 5, 114, 0, 0, 632, 633, 5, 111, 0, 0, 633, 634, 5, 118, 0, 0, 634, 635, 5, 105, 0, 0, 635, 636, 5, 100, 0, 0, 636, 637, 5, 101, 0, 0, 637, 638, 5, 100, 0, 0, 638, 86, 1, 0, 0, 0, 639, 640, 5, 61, 0, 0, 640, 641, 5, 62, 0, 0, 641, 88, 1, 0, 0, 0, 642, 643, 5, 58, 0, 0, 643, 90, 1, 0, 0, 0, 644, 645, 5, 102, 0, 0, 645, 646, 5, 111, 0, 0, 646, 647, 5, 114, 0, 0, 647, 648, 5, 97, 0, 0, 648, 649, 5, 108, 0, 0, 649, 650, 5, 108, 0, 0, 650, 92, 1, 0, 0, 0, 651, 652, 5, 8704, 0, 0, 652, 94, 1, 0, 0, 0, 653, 654, 5, 101, 0, 0, 654, 655, 5, 120, 0, 0, 655, 656, 5, 105, 0, 0, 656, 657, 5, 115, 0, 0, 657, 658, 5, 116, 0, 0, 658, 659, 5, 115, 0, 0, 659, 660, 5, 33, 0, 0, 660, 96, 1, 0, 0, 0, 661, 662, 5, 8707, 0, 0, 662, 663, 5, 33, 0, 0, 663, 98, 1, 0, 0, 0, 664, 665, 5, 101, 0, 0, 665, 666, 5, 120, 0, 0, 666, 667, 5, 105, 0, 0, 667, 668, 5, 115, 0, 0, 668, 669, 5, 116, 0, 0, 669, 670, 5, 115, 0, 0, 670, 100, 1, 0, 0, 0, 671, 672, 5, 8707, 0, 0, 672, 102, 1, 0, 0, 0, 673, 674, 5, 44, 0, 0, 674, 104, 1, 0, 0, 0, 675, 676, 5, 59, 0, 0, 676, 106, 1, 0, 0, 0, 677, 678, 5, 43, 0, 0, 678, 679, 5, 111, 0, 0, 679, 680, 5, 111, 0, 0, 680, 108, 1, 0, 0, 0, 681, 682, 5, 45, 0, 0, 682, 683, 5, 111, 0, 0, 683, 684, 5, 111, 0, 0, 684, 110, 1, 0, 0, 0, 685, 686, 5, 40, 0, 0, 686, 687, 5, 124, 0, 0, 687, 112, 1, 0, 0, 0, 688, 689, 5, 124, 0, 0, 689, 690, 5, 41, 0, 0, 690, 114, 1, 0, 0, 0, 691, 692, 5, 35, 0, 0, 692, 116, 1, 0, 0, 0, 693, 694, 5, 93, 0, 0, 694, 695, 5, 84, 0, 0, 695, 118, 1, 0, 0, 0, 696, 697, 5, 123, 0, 0, 697, 120, 1, 0, 0, 0, 698, 699, 5, 125, 0, 0, 699, 122, 1, 0, 0, 0, 700, 701, 5, 108, 0, 0, 701, 702, 5, 111, 0, 0, 702, 703, 5, 103, 0, 0, 703, 704, 5, 40, 0, 0, 704, 124, 1, 0, 0, 0, 705, 706, 5, 108, 0, 0, 706, 707, 5, 111, 0, 0, 707, 708, 5, 103, 0, 0, 708, 709, 5, 49, 0, 0, 709, 710, 5, 48, 0, 0, 710, 711, 5, 40, 0, 0, 711, 126, 1, 0, 0, 0, 712, 713, 5, 108, 0, 0, 713, 714, 5, 111, 0, 0, 714, 715, 5, 103, 0, 0, 715, 716, 5, 50, 0, 0, 716, 717, 5, 40, 0, 0, 717, 128, 1, 0, 0, 0, 718, 719, 5, 112, 0, 0, 719, 720, 5, 111, 0, 0, 720, 721, 5, 119, 0, 0, 721, 722, 5, 40, 0, 0, 722, 130, 1, 0, 0, 0, 723, 724, 5, 115, 0, 0, 724, 725, 5, 113, 0, 0, 725, 726, 5, 114, 0, 0, 726, 727, 5, 116, 0, 0, 727, 728, 5, 40, 0, 0, 728, 132, 1, 0, 0, 0, 729, 730, 5, 99, 0, 0, 730, 731, 5, 98, 0, 0, 731, 732, 5, 114, 0, 0, 732, 733, 5, 116, 0, 0, 733, 734, 5, 40, 0, 0, 734, 134, 1, 0, 0, 0, 735, 736, 5, 115, 0, 0, 736, 737, 5, 113, 0, 0, 737, 738, 5, 114, 0, 0, 738, 739, 5, 40, 0, 0, 739, 136, 1, 0, 0, 0, 740, 741, 5, 108, 0, 0, 741, 742, 5, 110, 0, 0, 742, 743, 5, 40, 0, 0, 743, 138, 1, 0, 0, 0, 744, 745, 5, 101, 0, 0, 745, 746, 5, 120, 0, 0, 746, 747, 5, 112, 0, 0, 747, 748, 5, 40, 0, 0, 748, 140, 1, 0, 0, 0, 749, 750, 5, 115, 0, 0, 750, 751, 5, 105, 0, 0, 751, 752, 5, 110, 0, 0, 752, 753, 5, 40, 0, 0, 753, 142, 1, 0, 0, 0, 754, 755, 5, 99, 0, 0, 755, 756, 5, 111, 0, 0, 756, 757, 5, 115, 0, 0, 757, 758, 5, 40, 0, 0, 758, 144, 1, 0, 0, 0, 759, 760, 5, 116, 0, 0, 760, 761, 5, 97, 0, 0, 761, 762, 5, 110, 0, 0, 762, 763, 5, 40, 0, 0, 763, 146, 1, 0, 0, 0, 764, 765, 5, 99, 0, 0, 765, 766, 5, 111, 0, 0, 766, 767, 5, 116, 0, 0, 767, 768, 5, 97, 0, 0, 768, 769, 5, 110, 0, 0, 769, 770, 5, 40, 0, 0, 770, 148, 1, 0, 0, 0, 771, 772, 5, 99, 0, 0, 772, 773, 5, 111, 0, 0, 773, 774, 5, 116, 0, 0, 774, 775, 5, 40, 0, 0, 775, 150, 1, 0, 0, 0, 776, 777, 5, 115, 0, 0, 777, 778, 5, 101, 0, 0, 778, 779, 5, 99, 0, 0, 779, 780, 5, 40, 0, 0, 780, 152, 1, 0, 0, 0, 781, 782, 5, 99, 0, 0, 782, 783, 5, 111, 0, 0, 783, 784, 5, 115, 0, 0, 784, 785, 5, 101, 0, 0, 785, 786, 5, 99, 0, 0, 786, 787, 5, 40, 0, 0, 787, 154, 1, 0, 0, 0, 788, 789, 5, 99, 0, 0, 789, 790, 5, 115, 0, 0, 790, 791, 5, 99, 0, 0, 791, 792, 5, 40, 0, 0, 792, 156, 1, 0, 0, 0, 793, 794, 5, 97, 0, 0, 794, 795, 5, 114, 0, 0, 795, 796, 5, 99, 0, 0, 796, 797, 5, 115, 0, 0, 797, 798, 5, 105, 0, 0, 798, 799, 5, 110, 0, 0, 799, 800, 5, 40, 0, 0, 800, 158, 1, 0, 0, 0, 801, 802, 5, 97, 0, 0, 802, 803, 5, 114, 0, 0, 803, 804, 5, 99, 0, 0, 804, 805, 5, 99, 0, 0, 805, 806, 5, 111, 0, 0, 806, 807, 5, 115, 0, 0, 807, 808, 5, 40, 0, 0, 808, 160, 1, 0, 0, 0, 809, 810, 5, 97, 0, 0, 810, 811, 5, 114, 0, 0, 811, 812, 5, 99, 0, 0, 812, 813, 5, 116, 0, 0, 813, 814, 5, 97, 0, 0, 814, 815, 5, 110, 0, 0, 815, 816, 5, 40, 0, 0, 816, 162, 1, 0, 0, 0, 817, 818, 5, 97, 0, 0, 818, 819, 5, 114, 0, 0, 819, 820, 5, 99, 0, 0, 820, 821, 5, 99, 0, 0, 821, 822, 5, 111, 0, 0, 822, 823, 5, 116, 0, 0, 823, 824, 5, 97, 0, 0, 824, 825, 5, 110, 0, 0, 825, 826, 5, 40, 0, 0, 826, 164, 1, 0, 0, 0, 827, 828, 5, 97, 0, 0, 828, 829, 5, 114, 0, 0, 829, 830, 5, 99, 0, 0, 830, 831, 5, 115, 0, 0, 831, 832, 5, 101, 0, 0, 832, 833, 5, 99, 0, 0, 833, 834, 5, 40, 0, 0, 834, 166, 1, 0, 0, 0, 835, 836, 5, 97, 0, 0, 836, 837, 5, 114, 0, 0, 837, 838, 5, 99, 0, 0, 838, 839, 5, 99, 0, 0, 839, 840, 5, 111, 0, 0, 840, 841, 5, 115, 0, 0, 841, 842, 5, 101, 0, 0, 842, 843, 5, 99, 0, 0, 843, 844, 5, 40, 0, 0, 844, 168, 1, 0, 0, 0, 845, 846, 5, 97, 0, 0, 846, 847, 5, 114, 0, 0, 847, 848, 5, 99, 0, 0, 848, 849, 5, 99, 0, 0, 849, 850, 5, 115, 0, 0, 850, 851, 5, 99, 0, 0, 851, 852, 5, 40, 0, 0, 852, 170, 1, 0, 0, 0, 853, 854, 5, 97, 0, 0, 854, 855, 5, 99, 0, 0, 855, 856, 5, 115, 0, 0, 856, 857, 5, 99, 0, 0, 857, 858, 5, 40, 0, 0, 858, 172, 1, 0, 0, 0, 859, 860, 5, 97, 0, 0, 860, 861, 5, 115, 0, 0, 861, 862, 5, 105, 0, 0, 862, 863, 5, 110, 0, 0, 863, 864, 5, 40, 0, 0, 864, 174, 1, 0, 0, 0, 865, 866, 5, 97, 0, 0, 866, 867, 5, 99, 0, 0, 867, 868, 5, 111, 0, 0, 868, 869, 5, 115, 0, 0, 869, 870, 5, 40, 0, 0, 870, 176, 1, 0, 0, 0, 871, 872, 5, 97, 0, 0, 872, 873, 5, 116, 0, 0, 873, 874, 5, 97, 0, 0, 874, 875, 5, 110, 0, 0, 875, 876, 5, 40, 0, 0, 876, 178, 1, 0, 0, 0, 877, 878, 5, 97, 0, 0, 878, 879, 5, 99, 0, 0, 879, 880, 5, 111, 0, 0, 880, 881, 5, 116, 0, 0, 881, 882, 5, 97, 0, 0, 882, 883, 5, 110, 0, 0, 883, 884, 5, 40, 0, 0, 884, 180, 1, 0, 0, 0, 885, 886, 5, 97, 0, 0, 886, 887, 5, 115, 0, 0, 887, 888, 5, 101, 0, 0, 888, 889, 5, 99, 0, 0, 889, 890, 5, 40, 0, 0, 890, 182, 1, 0, 0, 0, 891, 892, 5, 97, 0, 0, 892, 893, 5, 99, 0, 0, 893, 894, 5, 111, 0, 0, 894, 895, 5, 115, 0, 0, 895, 896, 5, 101, 0, 0, 896, 897, 5, 99, 0, 0, 897, 898, 5, 40, 0, 0, 898, 184, 1, 0, 0, 0, 899, 900, 5, 97, 0, 0, 900, 901, 5, 99, 0, 0, 901, 902, 5, 111, 0, 0, 902, 903, 5, 116, 0, 0, 903, 904, 5, 40, 0, 0, 904, 186, 1, 0, 0, 0, 905, 906, 5, 97, 0, 0, 906, 907, 5, 114, 0, 0, 907, 908, 5, 99, 0, 0, 908, 909, 5, 99, 0, 0, 909, 910, 5, 111, 0, 0, 910, 911, 5, 116, 0, 0, 911, 912, 5, 40, 0, 0, 912, 188, 1, 0, 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, 190, 1, 0, 0, 0, 919, 920, 5, 115, 0, 0, 920, 921, 5, 104, 0, 0, 921, 922, 5, 40, 0, 0, 922, 192, 1, 0, 0, 0, 923, 924, 5, 99, 0, 0, 924, 925, 5, 111, 0, 0, 925, 926, 5, 115, 0, 0, 926, 927, 5, 104, 0, 0, 927, 928, 5, 40, 0, 0, 928, 194, 1, 0, 0, 0, 929, 930, 5, 99, 0, 0, 930, 931, 5, 104, 0, 0, 931, 932, 5, 40, 0, 0, 932, 196, 1, 0, 0, 0, 933, 934, 5, 116, 0, 0, 934, 935, 5, 97, 0, 0, 935, 936, 5, 110, 0, 0, 936, 937, 5, 104, 0, 0, 937, 938, 5, 40, 0, 0, 938, 198, 1, 0, 0, 0, 939, 940, 5, 116, 0, 0, 940, 941, 5, 104, 0, 0, 941, 942, 5, 40, 0, 0, 942, 200, 1, 0, 0, 0, 943, 944, 5, 99, 0, 0, 944, 945, 5, 111, 0, 0, 945, 946, 5, 116, 0, 0, 946, 947, 5, 97, 0, 0, 947, 948, 5, 110, 0, 0, 948, 949, 5, 104, 0, 0, 949, 950, 5, 40, 0, 0, 950, 202, 1, 0, 0, 0, 951, 952, 5, 99, 0, 0, 952, 953, 5, 111, 0, 0, 953, 954, 5, 116, 0, 0, 954, 955, 5, 104, 0, 0, 955, 956, 5, 40, 0, 0, 956, 204, 1, 0, 0, 0, 957, 958, 5, 99, 0, 0, 958, 959, 5, 116, 0, 0, 959, 960, 5, 104, 0, 0, 960, 961, 5, 40, 0, 0, 961, 206, 1, 0, 0, 0, 962, 963, 5, 115, 0, 0, 963, 964, 5, 101, 0, 0, 964, 965, 5, 99, 0, 0, 965, 966, 5, 104, 0, 0, 966, 967, 5, 40, 0, 0, 967, 208, 1, 0, 0, 0, 968, 969, 5, 115, 0, 0, 969, 970, 5, 99, 0, 0, 970, 971, 5, 104, 0, 0, 971, 972, 5, 40, 0, 0, 972, 210, 1, 0, 0, 0, 973, 974, 5, 99, 0, 0, 974, 975, 5, 111, 0, 0, 975, 976, 5, 115, 0, 0, 976, 977, 5, 101, 0, 0, 977, 978, 5, 99, 0, 0, 978, 979, 5, 104, 0, 0, 979, 980, 5, 40, 0, 0, 980, 212, 1, 0, 0, 0, 981, 982, 5, 99, 0, 0, 982, 983, 5, 115, 0, 0, 983, 984, 5, 99, 0, 0, 984, 985, 5, 104, 0, 0, 985, 986, 5, 40, 0, 0, 986, 214, 1, 0, 0, 0, 987, 988, 5, 97, 0, 0, 988, 989, 5, 115, 0, 0, 989, 990, 5, 105, 0, 0, 990, 991, 5, 110, 0, 0, 991, 992, 5, 104, 0, 0, 992, 993, 5, 40, 0, 0, 993, 216, 1, 0, 0, 0, 994, 995, 5, 97, 0, 0, 995, 996, 5, 114, 0, 0, 996, 997, 5, 115, 0, 0, 997, 998, 5, 105, 0, 0, 998, 999, 5, 110, 0, 0, 999, 1000, 5, 104, 0, 0, 1000, 1001, 5, 40, 0, 0, 1001, 218, 1, 0, 0, 0, 1002, 1003, 5, 97, 0, 0, 1003, 1004, 5, 114, 0, 0, 1004, 1005, 5, 115, 0, 0, 1005, 1006, 5, 104, 0, 0, 1006, 1007, 5, 40, 0, 0, 1007, 220, 1, 0, 0, 0, 1008, 1009, 5, 97, 0, 0, 1009, 1010, 5, 114, 0, 0, 1010, 1011, 5, 99, 0, 0, 1011, 1012, 5, 115, 0, 0, 1012, 1013, 5, 105, 0, 0, 1013, 1014, 5, 110, 0, 0, 1014, 1015, 5, 104, 0, 0, 1015, 1016, 5, 40, 0, 0, 1016, 222, 1, 0, 0, 0, 1017, 1018, 5, 97, 0, 0, 1018, 1019, 5, 99, 0, 0, 1019, 1020, 5, 111, 0, 0, 1020, 1021, 5, 115, 0, 0, 1021, 1022, 5, 104, 0, 0, 1022, 1023, 5, 40, 0, 0, 1023, 224, 1, 0, 0, 0, 1024, 1025, 5, 97, 0, 0, 1025, 1026, 5, 114, 0, 0, 1026, 1027, 5, 99, 0, 0, 1027, 1028, 5, 111, 0, 0, 1028, 1029, 5, 115, 0, 0, 1029, 1030, 5, 104, 0, 0, 1030, 1031, 5, 40, 0, 0, 1031, 226, 1, 0, 0, 0, 1032, 1033, 5, 97, 0, 0, 1033, 1034, 5, 114, 0, 0, 1034, 1035, 5, 99, 0, 0, 1035, 1036, 5, 104, 0, 0, 1036, 1037, 5, 40, 0, 0, 1037, 228, 1, 0, 0, 0, 1038, 1039, 5, 97, 0, 0, 1039, 1040, 5, 114, 0, 0, 1040, 1041, 5, 99, 0, 0, 1041, 1042, 5, 99, 0, 0, 1042, 1043, 5, 111, 0, 0, 1043, 1044, 5, 115, 0, 0, 1044, 1045, 5, 104, 0, 0, 1045, 1046, 5, 40, 0, 0, 1046, 230, 1, 0, 0, 0, 1047, 1048, 5, 97, 0, 0, 1048, 1049, 5, 116, 0, 0, 1049, 1050, 5, 97, 0, 0, 1050, 1051, 5, 110, 0, 0, 1051, 1052, 5, 104, 0, 0, 1052, 1053, 5, 40, 0, 0, 1053, 232, 1, 0, 0, 0, 1054, 1055, 5, 97, 0, 0, 1055, 1056, 5, 114, 0, 0, 1056, 1057, 5, 116, 0, 0, 1057, 1058, 5, 97, 0, 0, 1058, 1059, 5, 110, 0, 0, 1059, 1060, 5, 104, 0, 0, 1060, 1061, 5, 40, 0, 0, 1061, 234, 1, 0, 0, 0, 1062, 1063, 5, 97, 0, 0, 1063, 1064, 5, 114, 0, 0, 1064, 1065, 5, 116, 0, 0, 1065, 1066, 5, 104, 0, 0, 1066, 1067, 5, 40, 0, 0, 1067, 236, 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, 116, 0, 0, 1072, 1073, 5, 97, 0, 0, 1073, 1074, 5, 110, 0, 0, 1074, 1075, 5, 104, 0, 0, 1075, 1076, 5, 40, 0, 0, 1076, 238, 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, 116, 0, 0, 1081, 1082, 5, 104, 0, 0, 1082, 1083, 5, 40, 0, 0, 1083, 240, 1, 0, 0, 0, 1084, 1085, 5, 97, 0, 0, 1085, 1086, 5, 114, 0, 0, 1086, 1087, 5, 99, 0, 0, 1087, 1088, 5, 111, 0, 0, 1088, 1089, 5, 116, 0, 0, 1089, 1090, 5, 104, 0, 0, 1090, 1091, 5, 40, 0, 0, 1091, 242, 1, 0, 0, 0, 1092, 1093, 5, 97, 0, 0, 1093, 1094, 5, 99, 0, 0, 1094, 1095, 5, 111, 0, 0, 1095, 1096, 5, 116, 0, 0, 1096, 1097, 5, 97, 0, 0, 1097, 1098, 5, 110, 0, 0, 1098, 1099, 5, 104, 0, 0, 1099, 1100, 5, 40, 0, 0, 1100, 244, 1, 0, 0, 0, 1101, 1102, 5, 97, 0, 0, 1102, 1103, 5, 114, 0, 0, 1103, 1104, 5, 99, 0, 0, 1104, 1105, 5, 111, 0, 0, 1105, 1106, 5, 116, 0, 0, 1106, 1107, 5, 97, 0, 0, 1107, 1108, 5, 110, 0, 0, 1108, 1109, 5, 104, 0, 0, 1109, 1110, 5, 40, 0, 0, 1110, 246, 1, 0, 0, 0, 1111, 1112, 5, 97, 0, 0, 1112, 1113, 5, 114, 0, 0, 1113, 1114, 5, 99, 0, 0, 1114, 1115, 5, 116, 0, 0, 1115, 1116, 5, 104, 0, 0, 1116, 1117, 5, 40, 0, 0, 1117, 248, 1, 0, 0, 0, 1118, 1119, 5, 97, 0, 0, 1119, 1120, 5, 114, 0, 0, 1120, 1121, 5, 99, 0, 0, 1121, 1122, 5, 99, 0, 0, 1122, 1123, 5, 111, 0, 0, 1123, 1124, 5, 116, 0, 0, 1124, 1125, 5, 97, 0, 0, 1125, 1126, 5, 110, 0, 0, 1126, 1127, 5, 104, 0, 0, 1127, 1128, 5, 40, 0, 0, 1128, 250, 1, 0, 0, 0, 1129, 1130, 5, 97, 0, 0, 1130, 1131, 5, 115, 0, 0, 1131, 1132, 5, 101, 0, 0, 1132, 1133, 5, 99, 0, 0, 1133, 1134, 5, 104, 0, 0, 1134, 1135, 5, 40, 0, 0, 1135, 252, 1, 0, 0, 0, 1136, 1137, 5, 97, 0, 0, 1137, 1138, 5, 114, 0, 0, 1138, 1139, 5, 115, 0, 0, 1139, 1140, 5, 101, 0, 0, 1140, 1141, 5, 99, 0, 0, 1141, 1142, 5, 104, 0, 0, 1142, 1143, 5, 40, 0, 0, 1143, 254, 1, 0, 0, 0, 1144, 1145, 5, 97, 0, 0, 1145, 1146, 5, 114, 0, 0, 1146, 1147, 5, 115, 0, 0, 1147, 1148, 5, 99, 0, 0, 1148, 1149, 5, 104, 0, 0, 1149, 1150, 5, 40, 0, 0, 1150, 256, 1, 0, 0, 0, 1151, 1152, 5, 97, 0, 0, 1152, 1153, 5, 114, 0, 0, 1153, 1154, 5, 99, 0, 0, 1154, 1155, 5, 115, 0, 0, 1155, 1156, 5, 101, 0, 0, 1156, 1157, 5, 99, 0, 0, 1157, 1158, 5, 104, 0, 0, 1158, 1159, 5, 40, 0, 0, 1159, 258, 1, 0, 0, 0, 1160, 1161, 5, 97, 0, 0, 1161, 1162, 5, 99, 0, 0, 1162, 1163, 5, 111, 0, 0, 1163, 1164, 5, 115, 0, 0, 1164, 1165, 5, 101, 0, 0, 1165, 1166, 5, 99, 0, 0, 1166, 1167, 5, 104, 0, 0, 1167, 1168, 5, 40, 0, 0, 1168, 260, 1, 0, 0, 0, 1169, 1170, 5, 97, 0, 0, 1170, 1171, 5, 114, 0, 0, 1171, 1172, 5, 99, 0, 0, 1172, 1173, 5, 111, 0, 0, 1173, 1174, 5, 115, 0, 0, 1174, 1175, 5, 101, 0, 0, 1175, 1176, 5, 99, 0, 0, 1176, 1177, 5, 104, 0, 0, 1177, 1178, 5, 40, 0, 0, 1178, 262, 1, 0, 0, 0, 1179, 1180, 5, 97, 0, 0, 1180, 1181, 5, 114, 0, 0, 1181, 1182, 5, 99, 0, 0, 1182, 1183, 5, 115, 0, 0, 1183, 1184, 5, 99, 0, 0, 1184, 1185, 5, 104, 0, 0, 1185, 1186, 5, 40, 0, 0, 1186, 264, 1, 0, 0, 0, 1187, 1188, 5, 97, 0, 0, 1188, 1189, 5, 114, 0, 0, 1189, 1190, 5, 99, 0, 0, 1190, 1191, 5, 99, 0, 0, 1191, 1192, 5, 111, 0, 0, 1192, 1193, 5, 115, 0, 0, 1193, 1194, 5, 101, 0, 0, 1194, 1195, 5, 99, 0, 0, 1195, 1196, 5, 104, 0, 0, 1196, 1197, 5, 40, 0, 0, 1197, 266, 1, 0, 0, 0, 1198, 1199, 5, 97, 0, 0, 1199, 1200, 5, 99, 0, 0, 1200, 1201, 5, 115, 0, 0, 1201, 1202, 5, 99, 0, 0, 1202, 1203, 5, 104, 0, 0, 1203, 1204, 5, 40, 0, 0, 1204, 268, 1, 0, 0, 0, 1205, 1206, 5, 102, 0, 0, 1206, 1207, 5, 97, 0, 0, 1207, 1208, 5, 99, 0, 0, 1208, 1209, 5, 116, 0, 0, 1209, 1210, 5, 111, 0, 0, 1210, 1211, 5, 114, 0, 0, 1211, 1212, 5, 105, 0, 0, 1212, 1213, 5, 97, 0, 0, 1213, 1214, 5, 108, 0, 0, 1214, 1215, 5, 40, 0, 0, 1215, 270, 1, 0, 0, 0, 1216, 1217, 5, 103, 0, 0, 1217, 1218, 5, 97, 0, 0, 1218, 1219, 5, 109, 0, 0, 1219, 1220, 5, 109, 0, 0, 1220, 1221, 5, 97, 0, 0, 1221, 1222, 5, 40, 0, 0, 1222, 272, 1, 0, 0, 0, 1223, 1224, 5, 100, 0, 0, 1224, 1225, 5, 101, 0, 0, 1225, 1226, 5, 114, 0, 0, 1226, 1227, 5, 105, 0, 0, 1227, 1228, 5, 118, 0, 0, 1228, 1229, 5, 97, 0, 0, 1229, 1230, 5, 116, 0, 0, 1230, 1231, 5, 105, 0, 0, 1231, 1232, 5, 118, 0, 0, 1232, 1233, 5, 101, 0, 0, 1233, 1234, 5, 40, 0, 0, 1234, 274, 1, 0, 0, 0, 1235, 1236, 5, 105, 0, 0, 1236, 1237, 5, 110, 0, 0, 1237, 1238, 5, 116, 0, 0, 1238, 1239, 5, 101, 0, 0, 1239, 1240, 5, 103, 0, 0, 1240, 1241, 5, 114, 0, 0, 1241, 1242, 5, 97, 0, 0, 1242, 1243, 5, 108, 0, 0, 1243, 1244, 5, 40, 0, 0, 1244, 276, 1, 0, 0, 0, 1245, 1246, 5, 108, 0, 0, 1246, 1247, 5, 105, 0, 0, 1247, 1248, 5, 109, 0, 0, 1248, 1249, 5, 105, 0, 0, 1249, 1250, 5, 116, 0, 0, 1250, 1251, 5, 40, 0, 0, 1251, 278, 1, 0, 0, 0, 1252, 1253, 5, 108, 0, 0, 1253, 1254, 5, 105, 0, 0, 1254, 1255, 5, 109, 0, 0, 1255, 1256, 5, 105, 0, 0, 1256, 1257, 5, 116, 0, 0, 1257, 1258, 5, 108, 0, 0, 1258, 1259, 5, 101, 0, 0, 1259, 1260, 5, 102, 0, 0, 1260, 1261, 5, 116, 0, 0, 1261, 1262, 5, 40, 0, 0, 1262, 280, 1, 0, 0, 0, 1263, 1264, 5, 108, 0, 0, 1264, 1265, 5, 105, 0, 0, 1265, 1266, 5, 109, 0, 0, 1266, 1267, 5, 105, 0, 0, 1267, 1268, 5, 116, 0, 0, 1268, 1269, 5, 114, 0, 0, 1269, 1270, 5, 105, 0, 0, 1270, 1271, 5, 103, 0, 0, 1271, 1272, 5, 104, 0, 0, 1272, 1273, 5, 116, 0, 0, 1273, 1274, 5, 40, 0, 0, 1274, 282, 1, 0, 0, 0, 1275, 1276, 5, 115, 0, 0, 1276, 1277, 5, 117, 0, 0, 1277, 1278, 5, 109, 0, 0, 1278, 1279, 5, 40, 0, 0, 1279, 284, 1, 0, 0, 0, 1280, 1281, 5, 112, 0, 0, 1281, 1282, 5, 114, 0, 0, 1282, 1283, 5, 111, 0, 0, 1283, 1284, 5, 100, 0, 0, 1284, 1285, 5, 117, 0, 0, 1285, 1286, 5, 99, 0, 0, 1286, 1287, 5, 116, 0, 0, 1287, 1288, 5, 40, 0, 0, 1288, 286, 1, 0, 0, 0, 1289, 1290, 5, 115, 0, 0, 1290, 1291, 5, 105, 0, 0, 1291, 1292, 5, 103, 0, 0, 1292, 1293, 5, 110, 0, 0, 1293, 1294, 5, 117, 0, 0, 1294, 1295, 5, 109, 0, 0, 1295, 1296, 5, 40, 0, 0, 1296, 288, 1, 0, 0, 0, 1297, 1298, 5, 115, 0, 0, 1298, 1299, 5, 103, 0, 0, 1299, 1300, 5, 110, 0, 0, 1300, 1301, 5, 40, 0, 0, 1301, 290, 1, 0, 0, 0, 1302, 1303, 5, 115, 0, 0, 1303, 1304, 5, 105, 0, 0, 1304, 1305, 5, 103, 0, 0, 1305, 1306, 5, 110, 0, 0, 1306, 1307, 5, 40, 0, 0, 1307, 292, 1, 0, 0, 0, 1308, 1309, 5, 97, 0, 0, 1309, 1310, 5, 98, 0, 0, 1310, 1311, 5, 115, 0, 0, 1311, 1312, 5, 40, 0, 0, 1312, 294, 1, 0, 0, 0, 1313, 1314, 5, 112, 0, 0, 1314, 1315, 5, 104, 0, 0, 1315, 1316, 5, 105, 0, 0, 1316, 1317, 5, 40, 0, 0, 1317, 296, 1, 0, 0, 0, 1318, 1319, 5, 112, 0, 0, 1319, 1320, 5, 114, 0, 0, 1320, 1321, 5, 105, 0, 0, 1321, 1322, 5, 109, 0, 0, 1322, 1323, 5, 101, 0, 0, 1323, 1324, 5, 40, 0, 0, 1324, 298, 1, 0, 0, 0, 1325, 1326, 5, 118, 0, 0, 1326, 1327, 5, 97, 0, 0, 1327, 1328, 5, 108, 0, 0, 1328, 1329, 5, 117, 0, 0, 1329, 1330, 5, 97, 0, 0, 1330, 1331, 5, 116, 0, 0, 1331, 1332, 5, 105, 0, 0, 1332, 1333, 5, 111, 0, 0, 1333, 1334, 5, 110, 0, 0, 1334, 1335, 5, 40, 0, 0, 1335, 300, 1, 0, 0, 0, 1336, 1337, 5, 109, 0, 0, 1337, 1338, 5, 111, 0, 0, 1338, 1339, 5, 98, 0, 0, 1339, 1340, 5, 105, 0, 0, 1340, 1341, 5, 117, 0, 0, 1341, 1342, 5, 115, 0, 0, 1342, 1343, 5, 40, 0, 0, 1343, 302, 1, 0, 0, 0, 1344, 1345, 5, 109, 0, 0, 1345, 1346, 5, 111, 0, 0, 1346, 1347, 5, 101, 0, 0, 1347, 1348, 5, 98, 0, 0, 1348, 1349, 5, 105, 0, 0, 1349, 1350, 5, 117, 0, 0, 1350, 1351, 5, 115, 0, 0, 1351, 1352, 5, 109, 0, 0, 1352, 1353, 5, 117, 0, 0, 1353, 1354, 5, 40, 0, 0, 1354, 304, 1, 0, 0, 0, 1355, 1356, 5, 100, 0, 0, 1356, 1357, 5, 105, 0, 0, 1357, 1358, 5, 118, 0, 0, 1358, 1359, 5, 105, 0, 0, 1359, 1360, 5, 115, 0, 0, 1360, 1361, 5, 111, 0, 0, 1361, 1362, 5, 114, 0, 0, 1362, 1363, 5, 115, 0, 0, 1363, 1364, 5, 105, 0, 0, 1364, 1365, 5, 103, 0, 0, 1365, 1366, 5, 109, 0, 0, 1366, 1367, 5, 97, 0, 0, 1367, 1368, 5, 40, 0, 0, 1368, 306, 1, 0, 0, 0, 1369, 1370, 5, 112, 0, 0, 1370, 1371, 5, 114, 0, 0, 1371, 1372, 5, 105, 0, 0, 1372, 1373, 5, 109, 0, 0, 1373, 1374, 5, 101, 0, 0, 1374, 1375, 5, 110, 0, 0, 1375, 1376, 5, 117, 0, 0, 1376, 1377, 5, 40, 0, 0, 1377, 308, 1, 0, 0, 0, 1378, 1379, 5, 112, 0, 0, 1379, 1380, 5, 114, 0, 0, 1380, 1381, 5, 105, 0, 0, 1381, 1382, 5, 109, 0, 0, 1382, 1383, 5, 101, 0, 0, 1383, 1384, 5, 111, 0, 0, 1384, 1385, 5, 109, 0, 0, 1385, 1386, 5, 101, 0, 0, 1386, 1387, 5, 103, 0, 0, 1387, 1388, 5, 97, 0, 0, 1388, 1389, 5, 40, 0, 0, 1389, 310, 1, 0, 0, 0, 1390, 1391, 5, 112, 0, 0, 1391, 1392, 5, 114, 0, 0, 1392, 1393, 5, 105, 0, 0, 1393, 1394, 5, 109, 0, 0, 1394, 1395, 5, 101, 0, 0, 1395, 1396, 5, 112, 0, 0, 1396, 1397, 5, 105, 0, 0, 1397, 1398, 5, 40, 0, 0, 1398, 312, 1, 0, 0, 0, 1399, 1400, 5, 99, 0, 0, 1400, 1401, 5, 97, 0, 0, 1401, 1402, 5, 114, 0, 0, 1402, 1403, 5, 100, 0, 0, 1403, 1404, 5, 40, 0, 0, 1404, 314, 1, 0, 0, 0, 1405, 1406, 5, 112, 0, 0, 1406, 1407, 5, 111, 0, 0, 1407, 1408, 5, 119, 0, 0, 1408, 1409, 5, 101, 0, 0, 1409, 1410, 5, 114, 0, 0, 1410, 1411, 5, 115, 0, 0, 1411, 1412, 5, 101, 0, 0, 1412, 1413, 5, 116, 0, 0, 1413, 1414, 5, 40, 0, 0, 1414, 316, 1, 0, 0, 0, 1415, 1416, 5, 117, 0, 0, 1416, 1417, 5, 110, 0, 0, 1417, 1418, 5, 105, 0, 0, 1418, 1419, 5, 111, 0, 0, 1419, 1420, 5, 110, 0, 0, 1420, 1421, 5, 40, 0, 0, 1421, 318, 1, 0, 0, 0, 1422, 1423, 5, 105, 0, 0, 1423, 1424, 5, 110, 0, 0, 1424, 1425, 5, 116, 0, 0, 1425, 1426, 5, 101, 0, 0, 1426, 1427, 5, 114, 0, 0, 1427, 1428, 5, 115, 0, 0, 1428, 1429, 5, 101, 0, 0, 1429, 1430, 5, 99, 0, 0, 1430, 1431, 5, 116, 0, 0, 1431, 1432, 5, 105, 0, 0, 1432, 1433, 5, 111, 0, 0, 1433, 1434, 5, 110, 0, 0, 1434, 1435, 5, 40, 0, 0, 1435, 320, 1, 0, 0, 0, 1436, 1437, 5, 99, 0, 0, 1437, 1438, 5, 111, 0, 0, 1438, 1439, 5, 109, 0, 0, 1439, 1440, 5, 112, 0, 0, 1440, 1441, 5, 108, 0, 0, 1441, 1442, 5, 101, 0, 0, 1442, 1443, 5, 109, 0, 0, 1443, 1444, 5, 101, 0, 0, 1444, 1445, 5, 110, 0, 0, 1445, 1446, 5, 116, 0, 0, 1446, 1447, 5, 40, 0, 0, 1447, 322, 1, 0, 0, 0, 1448, 1449, 5, 105, 0, 0, 1449, 1450, 5, 109, 0, 0, 1450, 1451, 5, 97, 0, 0, 1451, 1452, 5, 103, 0, 0, 1452, 1453, 5, 101, 0, 0, 1453, 1454, 5, 40, 0, 0, 1454, 324, 1, 0, 0, 0, 1455, 1456, 5, 112, 0, 0, 1456, 1457, 5, 114, 0, 0, 1457, 1458, 5, 101, 0, 0, 1458, 1459, 5, 105, 0, 0, 1459, 1460, 5, 109, 0, 0, 1460, 1461, 5, 97, 0, 0, 1461, 1462, 5, 103, 0, 0, 1462, 1463, 5, 101, 0, 0, 1463, 1464, 5, 40, 0, 0, 1464, 326, 1, 0, 0, 0, 1465, 1466, 5, 102, 0, 0, 1466, 1467, 5, 108, 0, 0, 1467, 1468, 5, 111, 0, 0, 1468, 1469, 5, 111, 0, 0, 1469, 1470, 5, 114, 0, 0, 1470, 1471, 5, 40, 0, 0, 1471, 328, 1, 0, 0, 0, 1472, 1473, 5, 99, 0, 0, 1473, 1474, 5, 101, 0, 0, 1474, 1475, 5, 105, 0, 0, 1475, 1476, 5, 108, 0, 0, 1476, 1477, 5, 40, 0, 0, 1477, 330, 1, 0, 0, 0, 1478, 1479, 5, 99, 0, 0, 1479, 1480, 5, 101, 0, 0, 1480, 1481, 5, 105, 0, 0, 1481, 1482, 5, 108, 0, 0, 1482, 1483, 5, 105, 0, 0, 1483, 1484, 5, 110, 0, 0, 1484, 1485, 5, 103, 0, 0, 1485, 1486, 5, 40, 0, 0, 1486, 332, 1, 0, 0, 0, 1487, 1488, 5, 114, 0, 0, 1488, 1489, 5, 111, 0, 0, 1489, 1490, 5, 117, 0, 0, 1490, 1491, 5, 110, 0, 0, 1491, 1492, 5, 100, 0, 0, 1492, 1493, 5, 40, 0, 0, 1493, 334, 1, 0, 0, 0, 1494, 1495, 5, 109, 0, 0, 1495, 1496, 5, 105, 0, 0, 1496, 1497, 5, 110, 0, 0, 1497, 1498, 5, 40, 0, 0, 1498, 336, 1, 0, 0, 0, 1499, 1500, 5, 109, 0, 0, 1500, 1501, 5, 97, 0, 0, 1501, 1502, 5, 120, 0, 0, 1502, 1503, 5, 40, 0, 0, 1503, 338, 1, 0, 0, 0, 1504, 1505, 5, 97, 0, 0, 1505, 1506, 5, 114, 0, 0, 1506, 1507, 5, 103, 0, 0, 1507, 1508, 5, 109, 0, 0, 1508, 1509, 5, 97, 0, 0, 1509, 1510, 5, 120, 0, 0, 1510, 1511, 5, 40, 0, 0, 1511, 340, 1, 0, 0, 0, 1512, 1513, 5, 97, 0, 0, 1513, 1514, 5, 114, 0, 0, 1514, 1515, 5, 103, 0, 0, 1515, 1516, 5, 109, 0, 0, 1516, 1517, 5, 105, 0, 0, 1517, 1518, 5, 110, 0, 0, 1518, 1519, 5, 40, 0, 0, 1519, 342, 1, 0, 0, 0, 1520, 1521, 5, 103, 0, 0, 1521, 1522, 5, 99, 0, 0, 1522, 1523, 5, 100, 0, 0, 1523, 1524, 5, 40, 0, 0, 1524, 344, 1, 0, 0, 0, 1525, 1526, 5, 108, 0, 0, 1526, 1527, 5, 99, 0, 0, 1527, 1528, 5, 109, 0, 0, 1528, 1529, 5, 40, 0, 0, 1529, 346, 1, 0, 0, 0, 1530, 1531, 5, 98, 0, 0, 1531, 1532, 5, 105, 0, 0, 1532, 1533, 5, 110, 0, 0, 1533, 1534, 5, 111, 0, 0, 1534, 1535, 5, 109, 0, 0, 1535, 1536, 5, 105, 0, 0, 1536, 1537, 5, 97, 0, 0, 1537, 1538, 5, 108, 0, 0, 1538, 1539, 5, 40, 0, 0, 1539, 348, 1, 0, 0, 0, 1540, 1541, 5, 109, 0, 0, 1541, 1542, 5, 117, 0, 0, 1542, 1543, 5, 108, 0, 0, 1543, 1544, 5, 116, 0, 0, 1544, 1545, 5, 105, 0, 0, 1545, 1546, 5, 110, 0, 0, 1546, 1547, 5, 111, 0, 0, 1547, 1548, 5, 109, 0, 0, 1548, 1549, 5, 105, 0, 0, 1549, 1550, 5, 97, 0, 0, 1550, 1551, 5, 108, 0, 0, 1551, 1552, 5, 40, 0, 0, 1552, 350, 1, 0, 0, 0, 1553, 1554, 5, 99, 0, 0, 1554, 1555, 5, 97, 0, 0, 1555, 1556, 5, 116, 0, 0, 1556, 1557, 5, 97, 0, 0, 1557, 1558, 5, 108, 0, 0, 1558, 1559, 5, 97, 0, 0, 1559, 1560, 5, 110, 0, 0, 1560, 1561, 5, 110, 0, 0, 1561, 1562, 5, 117, 0, 0, 1562, 1563, 5, 109, 0, 0, 1563, 1564, 5, 98, 0, 0, 1564, 1565, 5, 101, 0, 0, 1565, 1566, 5, 114, 0, 0, 1566, 1567, 5, 40, 0, 0, 1567, 352, 1, 0, 0, 0, 1568, 1569, 5, 104, 0, 0, 1569, 1570, 5, 97, 0, 0, 1570, 1571, 5, 114, 0, 0, 1571, 1572, 5, 109, 0, 0, 1572, 1573, 5, 111, 0, 0, 1573, 1574, 5, 110, 0, 0, 1574, 1575, 5, 105, 0, 0, 1575, 1576, 5, 99, 0, 0, 1576, 1577, 5, 110, 0, 0, 1577, 1578, 5, 117, 0, 0, 1578, 1579, 5, 109, 0, 0, 1579, 1580, 5, 98, 0, 0, 1580, 1581, 5, 101, 0, 0, 1581, 1582, 5, 114, 0, 0, 1582, 1583, 5, 40, 0, 0, 1583, 354, 1, 0, 0, 0, 1584, 1585, 5, 102, 0, 0, 1585, 1586, 5, 97, 0, 0, 1586, 1587, 5, 108, 0, 0, 1587, 1588, 5, 108, 0, 0, 1588, 1589, 5, 105, 0, 0, 1589, 1590, 5, 110, 0, 0, 1590, 1591, 5, 103, 0, 0, 1591, 1592, 5, 102, 0, 0, 1592, 1593, 5, 97, 0, 0, 1593, 1594, 5, 99, 0, 0, 1594, 1595, 5, 116, 0, 0, 1595, 1596, 5, 111, 0, 0, 1596, 1597, 5, 114, 0, 0, 1597, 1598, 5, 105, 0, 0, 1598, 1599, 5, 97, 0, 0, 1599, 1600, 5, 108, 0, 0, 1600, 1601, 5, 40, 0, 0, 1601, 356, 1, 0, 0, 0, 1602, 1603, 5, 102, 0, 0, 1603, 1604, 5, 97, 0, 0, 1604, 1605, 5, 99, 0, 0, 1605, 1606, 5, 116, 0, 0, 1606, 1607, 5, 111, 0, 0, 1607, 1608, 5, 114, 0, 0, 1608, 1609, 5, 105, 0, 0, 1609, 1610, 5, 97, 0, 0, 1610, 1611, 5, 108, 0, 0, 1611, 1612, 5, 112, 0, 0, 1612, 1613, 5, 111, 0, 0, 1613, 1614, 5, 119, 0, 0, 1614, 1615, 5, 101, 0, 0, 1615, 1616, 5, 114, 0, 0, 1616, 1617, 5, 40, 0, 0, 1617, 358, 1, 0, 0, 0, 1618, 1619, 5, 114, 0, 0, 1619, 1620, 5, 105, 0, 0, 1620, 1621, 5, 115, 0, 0, 1621, 1622, 5, 105, 0, 0, 1622, 1623, 5, 110, 0, 0, 1623, 1624, 5, 103, 0, 0, 1624, 1625, 5, 102, 0, 0, 1625, 1626, 5, 97, 0, 0, 1626, 1627, 5, 99, 0, 0, 1627, 1628, 5, 116, 0, 0, 1628, 1629, 5, 111, 0, 0, 1629, 1630, 5, 114, 0, 0, 1630, 1631, 5, 105, 0, 0, 1631, 1632, 5, 97, 0, 0, 1632, 1633, 5, 108, 0, 0, 1633, 1634, 5, 40, 0, 0, 1634, 360, 1, 0, 0, 0, 1635, 1636, 5, 105, 0, 0, 1636, 1637, 5, 118, 0, 0, 1637, 1638, 5, 101, 0, 0, 1638, 1639, 5, 114, 0, 0, 1639, 1640, 5, 115, 0, 0, 1640, 1641, 5, 111, 0, 0, 1641, 1642, 5, 110, 0, 0, 1642, 1643, 5, 40, 0, 0, 1643, 362, 1, 0, 0, 0, 1644, 1645, 5, 97, 0, 0, 1645, 1646, 5, 108, 0, 0, 1646, 1647, 5, 101, 0, 0, 1647, 1648, 5, 112, 0, 0, 1648, 1649, 5, 104, 0, 0, 1649, 1650, 5, 40, 0, 0, 1650, 364, 1, 0, 0, 0, 1651, 1652, 5, 101, 0, 0, 1652, 1653, 5, 114, 0, 0, 1653, 1654, 5, 102, 0, 0, 1654, 1655, 5, 40, 0, 0, 1655, 366, 1, 0, 0, 0, 1656, 1657, 5, 101, 0, 0, 1657, 1658, 5, 114, 0, 0, 1658, 1659, 5, 102, 0, 0, 1659, 1660, 5, 99, 0, 0, 1660, 1661, 5, 40, 0, 0, 1661, 368, 1, 0, 0, 0, 1662, 1663, 5, 101, 0, 0, 1663, 1664, 5, 114, 0, 0, 1664, 1665, 5, 102, 0, 0, 1665, 1666, 5, 105, 0, 0, 1666, 1667, 5, 40, 0, 0, 1667, 370, 1, 0, 0, 0, 1668, 1669, 5, 69, 0, 0, 1669, 1670, 5, 105, 0, 0, 1670, 1671, 5, 40, 0, 0, 1671, 372, 1, 0, 0, 0, 1672, 1673, 5, 108, 0, 0, 1673, 1674, 5, 105, 0, 0, 1674, 1675, 5, 40, 0, 0, 1675, 374, 1, 0, 0, 0, 1676, 1677, 5, 108, 0, 0, 1677, 1678, 5, 97, 0, 0, 1678, 1679, 5, 109, 0, 0, 1679, 1680, 5, 98, 0, 0, 1680, 1681, 5, 101, 0, 0, 1681, 1682, 5, 114, 0, 0, 1682, 1683, 5, 116, 0, 0, 1683, 1684, 5, 119, 0, 0, 1684, 1685, 5, 40, 0, 0, 1685, 376, 1, 0, 0, 0, 1686, 1687, 5, 112, 0, 0, 1687, 1688, 5, 114, 0, 0, 1688, 1689, 5, 111, 0, 0, 1689, 1690, 5, 100, 0, 0, 1690, 1691, 5, 117, 0, 0, 1691, 1692, 5, 99, 0, 0, 1692, 1693, 5, 116, 0, 0, 1693, 1694, 5, 108, 0, 0, 1694, 1695, 5, 111, 0, 0, 1695, 1696, 5, 103, 0, 0, 1696, 1697, 5, 40, 0, 0, 1697, 378, 1, 0, 0, 0, 1698, 1699, 5, 112, 0, 0, 1699, 1700, 5, 111, 0, 0, 1700, 1701, 5, 108, 0, 0, 1701, 1702, 5, 121, 0, 0, 1702, 1703, 5, 103, 0, 0, 1703, 1704, 5, 97, 0, 0, 1704, 1705, 5, 109, 0, 0, 1705, 1706, 5, 109, 0, 0, 1706, 1707, 5, 97, 0, 0, 1707, 1708, 5, 40, 0, 0, 1708, 380, 1, 0, 0, 0, 1709, 1710, 5, 100, 0, 0, 1710, 1711, 5, 105, 0, 0, 1711, 1712, 5, 103, 0, 0, 1712, 1713, 5, 97, 0, 0, 1713, 1714, 5, 109, 0, 0, 1714, 1715, 5, 109, 0, 0, 1715, 1716, 5, 97, 0, 0, 1716, 1717, 5, 40, 0, 0, 1717, 382, 1, 0, 0, 0, 1718, 1719, 5, 83, 0, 0, 1719, 1720, 5, 105, 0, 0, 1720, 1721, 5, 40, 0, 0, 1721, 384, 1, 0, 0, 0, 1722, 1723, 5, 67, 0, 0, 1723, 1724, 5, 105, 0, 0, 1724, 1725, 5, 40, 0, 0, 1725, 386, 1, 0, 0, 0, 1726, 1727, 5, 83, 0, 0, 1727, 1728, 5, 104, 0, 0, 1728, 1729, 5, 105, 0, 0, 1729, 1730, 5, 40, 0, 0, 1730, 388, 1, 0, 0, 0, 1731, 1732, 5, 67, 0, 0, 1732, 1733, 5, 104, 0, 0, 1733, 1734, 5, 105, 0, 0, 1734, 1735, 5, 40, 0, 0, 1735, 390, 1, 0, 0, 0, 1736, 1737, 5, 100, 0, 0, 1737, 1738, 5, 101, 0, 0, 1738, 1739, 5, 116, 0, 0, 1739, 1740, 5, 40, 0, 0, 1740, 392, 1, 0, 0, 0, 1741, 1742, 5, 116, 0, 0, 1742, 1743, 5, 114, 0, 0, 1743, 1744, 5, 97, 0, 0, 1744, 1745, 5, 110, 0, 0, 1745, 1746, 5, 115, 0, 0, 1746, 1747, 5, 112, 0, 0, 1747, 1748, 5, 111, 0, 0, 1748, 1749, 5, 115, 0, 0, 1749, 1750, 5, 101, 0, 0, 1750, 1751, 5, 40, 0, 0, 1751, 394, 1, 0, 0, 0, 1752, 1753, 5, 116, 0, 0, 1753, 1754, 5, 114, 0, 0, 1754, 1755, 5, 97, 0, 0, 1755, 1756, 5, 99, 0, 0, 1756, 1757, 5, 101, 0, 0, 1757, 1758, 5, 40, 0, 0, 1758, 396, 1, 0, 0, 0, 1759, 1760, 5, 100, 0, 0, 1760, 1761, 5, 111, 0, 0, 1761, 1762, 5, 116, 0, 0, 1762, 1763, 5, 40, 0, 0, 1763, 398, 1, 0, 0, 0, 1764, 1765, 5, 99, 0, 0, 1765, 1766, 5, 114, 0, 0, 1766, 1767, 5, 111, 0, 0, 1767, 1768, 5, 115, 0, 0, 1768, 1769, 5, 115, 0, 0, 1769, 1770, 5, 40, 0, 0, 1770, 400, 1, 0, 0, 0, 1771, 1772, 5, 108, 0, 0, 1772, 1773, 5, 97, 0, 0, 1773, 1774, 5, 112, 0, 0, 1774, 1775, 5, 108, 0, 0, 1775, 1776, 5, 97, 0, 0, 1776, 1777, 5, 99, 0, 0, 1777, 1778, 5, 105, 0, 0, 1778, 1779, 5, 97, 0, 0, 1779, 1780, 5, 110, 0, 0, 1780, 1781, 5, 40, 0, 0, 1781, 402, 1, 0, 0, 0, 1782, 1783, 5, 102, 0, 0, 1783, 1784, 5, 111, 0, 0, 1784, 1785, 5, 114, 0, 0, 1785, 1786, 5, 119, 0, 0, 1786, 1787, 5, 97, 0, 0, 1787, 1788, 5, 114, 0, 0, 1788, 1789, 5, 100, 0, 0, 1789, 1790, 5, 100, 0, 0, 1790, 1791, 5, 105, 0, 0, 1791, 1792, 5, 102, 0, 0, 1792, 1793, 5, 102, 0, 0, 1793, 1794, 5, 101, 0, 0, 1794, 1795, 5, 114, 0, 0, 1795, 1796, 5, 101, 0, 0, 1796, 1797, 5, 110, 0, 0, 1797, 1798, 5, 99, 0, 0, 1798, 1799, 5, 101, 0, 0, 1799, 1800, 5, 40, 0, 0, 1800, 404, 1, 0, 0, 0, 1801, 1802, 5, 106, 0, 0, 1802, 1803, 5, 97, 0, 0, 1803, 1804, 5, 99, 0, 0, 1804, 1805, 5, 111, 0, 0, 1805, 1806, 5, 98, 0, 0, 1806, 1807, 5, 105, 0, 0, 1807, 1808, 5, 97, 0, 0, 1808, 1809, 5, 110, 0, 0, 1809, 1810, 5, 40, 0, 0, 1810, 406, 1, 0, 0, 0, 1811, 1812, 5, 104, 0, 0, 1812, 1813, 5, 101, 0, 0, 1813, 1814, 5, 115, 0, 0, 1814, 1815, 5, 115, 0, 0, 1815, 1816, 5, 105, 0, 0, 1816, 1817, 5, 97, 0, 0, 1817, 1818, 5, 110, 0, 0, 1818, 1819, 5, 40, 0, 0, 1819, 408, 1, 0, 0, 0, 1820, 1821, 5, 114, 0, 0, 1821, 1822, 5, 101, 0, 0, 1822, 1823, 5, 115, 0, 0, 1823, 1824, 5, 117, 0, 0, 1824, 1825, 5, 108, 0, 0, 1825, 1826, 5, 116, 0, 0, 1826, 1827, 5, 97, 0, 0, 1827, 1828, 5, 110, 0, 0, 1828, 1829, 5, 116, 0, 0, 1829, 1830, 5, 40, 0, 0, 1830, 410, 1, 0, 0, 0, 1831, 1832, 5, 99, 0, 0, 1832, 1833, 5, 111, 0, 0, 1833, 1834, 5, 110, 0, 0, 1834, 1835, 5, 106, 0, 0, 1835, 1836, 5, 117, 0, 0, 1836, 1837, 5, 103, 0, 0, 1837, 1838, 5, 97, 0, 0, 1838, 1839, 5, 116, 0, 0, 1839, 1840, 5, 101, 0, 0, 1840, 1841, 5, 40, 0, 0, 1841, 412, 1, 0, 0, 0, 1842, 1843, 5, 99, 0, 0, 1843, 1844, 5, 111, 0, 0, 1844, 1845, 5, 110, 0, 0, 1845, 1846, 5, 106, 0, 0, 1846, 1847, 5, 40, 0, 0, 1847, 414, 1, 0, 0, 0, 1848, 1849, 5, 97, 0, 0, 1849, 1850, 5, 114, 0, 0, 1850, 1851, 5, 103, 0, 0, 1851, 1852, 5, 40, 0, 0, 1852, 416, 1, 0, 0, 0, 1853, 1854, 5, 82, 0, 0, 1854, 1855, 5, 101, 0, 0, 1855, 1856, 5, 40, 0, 0, 1856, 418, 1, 0, 0, 0, 1857, 1858, 5, 73, 0, 0, 1858, 1859, 5, 109, 0, 0, 1859, 1860, 5, 40, 0, 0, 1860, 420, 1, 0, 0, 0, 1861, 1862, 5, 114, 0, 0, 1862, 1863, 5, 101, 0, 0, 1863, 1864, 5, 40, 0, 0, 1864, 422, 1, 0, 0, 0, 1865, 1866, 5, 114, 0, 0, 1866, 1867, 5, 101, 0, 0, 1867, 1868, 5, 97, 0, 0, 1868, 1869, 5, 108, 0, 0, 1869, 1870, 5, 40, 0, 0, 1870, 424, 1, 0, 0, 0, 1871, 1872, 5, 105, 0, 0, 1872, 1873, 5, 109, 0, 0, 1873, 1874, 5, 40, 0, 0, 1874, 426, 1, 0, 0, 0, 1875, 1876, 5, 105, 0, 0, 1876, 1877, 5, 109, 0, 0, 1877, 1878, 5, 97, 0, 0, 1878, 1879, 5, 103, 0, 0, 1879, 1880, 5, 40, 0, 0, 1880, 428, 1, 0, 0, 0, 1881, 1882, 5, 116, 0, 0, 1882, 1883, 5, 114, 0, 0, 1883, 1884, 5, 117, 0, 0, 1884, 1885, 5, 110, 0, 0, 1885, 1886, 5, 99, 0, 0, 1886, 1887, 5, 40, 0, 0, 1887, 430, 1, 0, 0, 0, 1888, 1889, 5, 122, 0, 0, 1889, 1890, 5, 101, 0, 0, 1890, 1891, 5, 116, 0, 0, 1891, 1892, 5, 97, 0, 0, 1892, 1893, 5, 40, 0, 0, 1893, 432, 1, 0, 0, 0, 1894, 1895, 5, 114, 0, 0, 1895, 1896, 5, 105, 0, 0, 1896, 1897, 5, 101, 0, 0, 1897, 1898, 5, 109, 0, 0, 1898, 1899, 5, 97, 0, 0, 1899, 1900, 5, 110, 0, 0, 1900, 1901, 5, 110, 0, 0, 1901, 1902, 5, 122, 0, 0, 1902, 1903, 5, 101, 0, 0, 1903, 1904, 5, 116, 0, 0, 1904, 1905, 5, 97, 0, 0, 1905, 1906, 5, 40, 0, 0, 1906, 434, 1, 0, 0, 0, 1907, 1908, 5, 104, 0, 0, 1908, 1909, 5, 117, 0, 0, 1909, 1910, 5, 114, 0, 0, 1910, 1911, 5, 119, 0, 0, 1911, 1912, 5, 105, 0, 0, 1912, 1913, 5, 116, 0, 0, 1913, 1914, 5, 122, 0, 0, 1914, 1915, 5, 122, 0, 0, 1915, 1916, 5, 101, 0, 0, 1916, 1917, 5, 116, 0, 0, 1917, 1918, 5, 97, 0, 0, 1918, 1919, 5, 40, 0, 0, 1919, 436, 1, 0, 0, 0, 1920, 1921, 5, 104, 0, 0, 1921, 1922, 5, 101, 0, 0, 1922, 1923, 5, 97, 0, 0, 1923, 1924, 5, 118, 0, 0, 1924, 1925, 5, 105, 0, 0, 1925, 1926, 5, 115, 0, 0, 1926, 1927, 5, 105, 0, 0, 1927, 1928, 5, 100, 0, 0, 1928, 1929, 5, 101, 0, 0, 1929, 1930, 5, 40, 0, 0, 1930, 438, 1, 0, 0, 0, 1931, 1932, 5, 117, 0, 0, 1932, 1933, 5, 110, 0, 0, 1933, 1934, 5, 105, 0, 0, 1934, 1935, 5, 116, 0, 0, 1935, 1936, 5, 115, 0, 0, 1936, 1937, 5, 116, 0, 0, 1937, 1938, 5, 101, 0, 0, 1938, 1939, 5, 112, 0, 0, 1939, 1940, 5, 40, 0, 0, 1940, 440, 1, 0, 0, 0, 1941, 1942, 5, 105, 0, 0, 1942, 1943, 5, 115, 0, 0, 1943, 1944, 5, 112, 0, 0, 1944, 1945, 5, 114, 0, 0, 1945, 1946, 5, 105, 0, 0, 1946, 1947, 5, 109, 0, 0, 1947, 1948, 5, 101, 0, 0, 1948, 1949, 5, 40, 0, 0, 1949, 442, 1, 0, 0, 0, 1950, 1951, 5, 112, 0, 0, 1951, 1952, 5, 111, 0, 0, 1952, 1953, 5, 99, 0, 0, 1953, 1954, 5, 104, 0, 0, 1954, 1955, 5, 104, 0, 0, 1955, 1956, 5, 97, 0, 0, 1956, 1957, 5, 109, 0, 0, 1957, 1958, 5, 109, 0, 0, 1958, 1959, 5, 101, 0, 0, 1959, 1960, 5, 114, 0, 0, 1960, 1961, 5, 40, 0, 0, 1961, 444, 1, 0, 0, 0, 1962, 1963, 5, 100, 0, 0, 1963, 1964, 5, 111, 0, 0, 1964, 1965, 5, 117, 0, 0, 1965, 1966, 5, 98, 0, 0, 1966, 1967, 5, 108, 0, 0, 1967, 1968, 5, 101, 0, 0, 1968, 1969, 5, 102, 0, 0, 1969, 1970, 5, 97, 0, 0, 1970, 1971, 5, 99, 0, 0, 1971, 1972, 5, 116, 0, 0, 1972, 1973, 5, 111, 0, 0, 1973, 1974, 5, 114, 0, 0, 1974, 1975, 5, 105, 0, 0, 1975, 1976, 5, 97, 0, 0, 1976, 1977, 5, 108, 0, 0, 1977, 1978, 5, 40, 0, 0, 1978, 446, 1, 0, 0, 0, 1979, 1980, 5, 102, 0, 0, 1980, 1981, 5, 97, 0, 0, 1981, 1982, 5, 99, 0, 0, 1982, 1983, 5, 116, 0, 0, 1983, 1984, 5, 111, 0, 0, 1984, 1985, 5, 114, 0, 0, 1985, 1986, 5, 105, 0, 0, 1986, 1987, 5, 97, 0, 0, 1987, 1988, 5, 108, 0, 0, 1988, 1989, 5, 50, 0, 0, 1989, 1990, 5, 40, 0, 0, 1990, 448, 1, 0, 0, 0, 1991, 1992, 5, 102, 0, 0, 1992, 1993, 5, 114, 0, 0, 1993, 1994, 5, 97, 0, 0, 1994, 1995, 5, 99, 0, 0, 1995, 1996, 5, 116, 0, 0, 1996, 1997, 5, 105, 0, 0, 1997, 1998, 5, 111, 0, 0, 1998, 1999, 5, 110, 0, 0, 1999, 2000, 5, 97, 0, 0, 2000, 2001, 5, 108, 0, 0, 2001, 2002, 5, 112, 0, 0, 2002, 2003, 5, 97, 0, 0, 2003, 2004, 5, 114, 0, 0, 2004, 2005, 5, 116, 0, 0, 2005, 2006, 5, 40, 0, 0, 2006, 450, 1, 0, 0, 0, 2007, 2008, 5, 113, 0, 0, 2008, 2009, 5, 117, 0, 0, 2009, 2010, 5, 111, 0, 0, 2010, 2011, 5, 116, 0, 0, 2011, 2012, 5, 105, 0, 0, 2012, 2013, 5, 101, 0, 0, 2013, 2014, 5, 110, 0, 0, 2014, 2015, 5, 116, 0, 0, 2015, 2016, 5, 40, 0, 0, 2016, 452, 1, 0, 0, 0, 2017, 2018, 5, 100, 0, 0, 2018, 2019, 5, 111, 0, 0, 2019, 2020, 5, 109, 0, 0, 2020, 2021, 5, 97, 0, 0, 2021, 2022, 5, 105, 0, 0, 2022, 2023, 5, 110, 0, 0, 2023, 2024, 5, 40, 0, 0, 2024, 454, 1, 0, 0, 0, 2025, 2026, 5, 112, 0, 0, 2026, 2027, 5, 105, 0, 0, 2027, 2028, 5, 101, 0, 0, 2028, 2029, 5, 99, 0, 0, 2029, 2030, 5, 101, 0, 0, 2030, 2031, 5, 119, 0, 0, 2031, 2032, 5, 105, 0, 0, 2032, 2033, 5, 115, 0, 0, 2033, 2034, 5, 101, 0, 0, 2034, 2035, 5, 40, 0, 0, 2035, 456, 1, 0, 0, 0, 2036, 2037, 5, 97, 0, 0, 2037, 2038, 5, 112, 0, 0, 2038, 2039, 5, 112, 0, 0, 2039, 2040, 5, 108, 0, 0, 2040, 2041, 5, 121, 0, 0, 2041, 2042, 5, 40, 0, 0, 2042, 458, 1, 0, 0, 0, 2043, 2044, 5, 108, 0, 0, 2044, 2045, 5, 97, 0, 0, 2045, 2046, 5, 109, 0, 0, 2046, 2047, 5, 98, 0, 0, 2047, 2048, 5, 100, 0, 0, 2048, 2049, 5, 97, 0, 0, 2049, 2050, 5, 40, 0, 0, 2050, 460, 1, 0, 0, 0, 2051, 2053, 5, 13, 0, 0, 2052, 2051, 1, 0, 0, 0, 2052, 2053, 1, 0, 0, 0, 2053, 2054, 1, 0, 0, 0, 2054, 2056, 5, 10, 0, 0, 2055, 2052, 1, 0, 0, 0, 2056, 2057, 1, 0, 0, 0, 2057, 2055, 1, 0, 0, 0, 2057, 2058, 1, 0, 0, 0, 2058, 2059, 1, 0, 0, 0, 2059, 2060, 6, 230, 0, 0, 2060, 462, 1, 0, 0, 0, 2061, 2063, 7, 0, 0, 0, 2062, 2064, 7, 1, 0, 0, 2063, 2062, 1, 0, 0, 0, 2063, 2064, 1, 0, 0, 0, 2064, 2066, 1, 0, 0, 0, 2065, 2067, 2, 48, 57, 0, 2066, 2065, 1, 0, 0, 0, 2067, 2068, 1, 0, 0, 0, 2068, 2066, 1, 0, 0, 0, 2068, 2069, 1, 0, 0, 0, 2069, 464, 1, 0, 0, 0, 2070, 2072, 2, 48, 57, 0, 2071, 2070, 1, 0, 0, 0, 2072, 2073, 1, 0, 0, 0, 2073, 2071, 1, 0, 0, 0, 2073, 2074, 1, 0, 0, 0, 2074, 2075, 1, 0, 0, 0, 2075, 2079, 5, 46, 0, 0, 2076, 2078, 2, 48, 57, 0, 2077, 2076, 1, 0, 0, 0, 2078, 2081, 1, 0, 0, 0, 2079, 2077, 1, 0, 0, 0, 2079, 2080, 1, 0, 0, 0, 2080, 2083, 1, 0, 0, 0, 2081, 2079, 1, 0, 0, 0, 2082, 2084, 3, 463, 231, 0, 2083, 2082, 1, 0, 0, 0, 2083, 2084, 1, 0, 0, 0, 2084, 2086, 1, 0, 0, 0, 2085, 2087, 5, 105, 0, 0, 2086, 2085, 1, 0, 0, 0, 2086, 2087, 1, 0, 0, 0, 2087, 2104, 1, 0, 0, 0, 2088, 2090, 5, 46, 0, 0, 2089, 2088, 1, 0, 0, 0, 2089, 2090, 1, 0, 0, 0, 2090, 2092, 1, 0, 0, 0, 2091, 2093, 2, 48, 57, 0, 2092, 2091, 1, 0, 0, 0, 2093, 2094, 1, 0, 0, 0, 2094, 2092, 1, 0, 0, 0, 2094, 2095, 1, 0, 0, 0, 2095, 2097, 1, 0, 0, 0, 2096, 2098, 3, 463, 231, 0, 2097, 2096, 1, 0, 0, 0, 2097, 2098, 1, 0, 0, 0, 2098, 2100, 1, 0, 0, 0, 2099, 2101, 5, 105, 0, 0, 2100, 2099, 1, 0, 0, 0, 2100, 2101, 1, 0, 0, 0, 2101, 2104, 1, 0, 0, 0, 2102, 2104, 5, 105, 0, 0, 2103, 2071, 1, 0, 0, 0, 2103, 2089, 1, 0, 0, 0, 2103, 2102, 1, 0, 0, 0, 2104, 466, 1, 0, 0, 0, 2105, 2106, 5, 67, 0, 0, 2106, 2124, 5, 67, 0, 0, 2107, 2108, 5, 82, 0, 0, 2108, 2124, 5, 82, 0, 0, 2109, 2110, 5, 81, 0, 0, 2110, 2124, 5, 81, 0, 0, 2111, 2112, 5, 90, 0, 0, 2112, 2124, 5, 90, 0, 0, 2113, 2114, 5, 66, 0, 0, 2114, 2124, 5, 66, 0, 0, 2115, 2116, 5, 90, 0, 0, 2116, 2117, 5, 90, 0, 0, 2117, 2124, 5, 42, 0, 0, 2118, 2119, 5, 90, 0, 0, 2119, 2120, 5, 90, 0, 0, 2120, 2124, 5, 43, 0, 0, 2121, 2122, 5, 80, 0, 0, 2122, 2124, 5, 80, 0, 0, 2123, 2105, 1, 0, 0, 0, 2123, 2107, 1, 0, 0, 0, 2123, 2109, 1, 0, 0, 0, 2123, 2111, 1, 0, 0, 0, 2123, 2113, 1, 0, 0, 0, 2123, 2115, 1, 0, 0, 0, 2123, 2118, 1, 0, 0, 0, 2123, 2121, 1, 0, 0, 0, 2124, 468, 1, 0, 0, 0, 2125, 2126, 5, 116, 0, 0, 2126, 2127, 5, 114, 0, 0, 2127, 2128, 5, 117, 0, 0, 2128, 2144, 5, 101, 0, 0, 2129, 2130, 5, 84, 0, 0, 2130, 2131, 5, 114, 0, 0, 2131, 2132, 5, 117, 0, 0, 2132, 2144, 5, 101, 0, 0, 2133, 2134, 5, 102, 0, 0, 2134, 2135, 5, 97, 0, 0, 2135, 2136, 5, 108, 0, 0, 2136, 2137, 5, 115, 0, 0, 2137, 2144, 5, 101, 0, 0, 2138, 2139, 5, 70, 0, 0, 2139, 2140, 5, 97, 0, 0, 2140, 2141, 5, 108, 0, 0, 2141, 2142, 5, 115, 0, 0, 2142, 2144, 5, 101, 0, 0, 2143, 2125, 1, 0, 0, 0, 2143, 2129, 1, 0, 0, 0, 2143, 2133, 1, 0, 0, 0, 2143, 2138, 1, 0, 0, 0, 2144, 470, 1, 0, 0, 0, 2145, 2146, 5, 78, 0, 0, 2146, 2147, 5, 97, 0, 0, 2147, 2148, 5, 78, 0, 0, 2148, 472, 1, 0, 0, 0, 2149, 2151, 7, 2, 0, 0, 2150, 2149, 1, 0, 0, 0, 2151, 2152, 1, 0, 0, 0, 2152, 2150, 1, 0, 0, 0, 2152, 2153, 1, 0, 0, 0, 2153, 2162, 1, 0, 0, 0, 2154, 2156, 5, 95, 0, 0, 2155, 2157, 7, 3, 0, 0, 2156, 2155, 1, 0, 0, 0, 2157, 2158, 1, 0, 0, 0, 2158, 2156, 1, 0, 0, 0, 2158, 2159, 1, 0, 0, 0, 2159, 2161, 1, 0, 0, 0, 2160, 2154, 1, 0, 0, 0, 2161, 2164, 1, 0, 0, 0, 2162, 2160, 1, 0, 0, 0, 2162, 2163, 1, 0, 0, 0, 2163, 474, 1, 0, 0, 0, 2164, 2162, 1, 0, 0, 0, 2165, 2166, 5, 47, 0, 0, 2166, 2167, 5, 47, 0, 0, 2167, 2171, 1, 0, 0, 0, 2168, 2170, 8, 4, 0, 0, 2169, 2168, 1, 0, 0, 0, 2170, 2173, 1, 0, 0, 0, 2171, 2169, 1, 0, 0, 0, 2171, 2172, 1, 0, 0, 0, 2172, 2178, 1, 0, 0, 0, 2173, 2171, 1, 0, 0, 0, 2174, 2176, 5, 13, 0, 0, 2175, 2174, 1, 0, 0, 0, 2175, 2176, 1, 0, 0, 0, 2176, 2177, 1, 0, 0, 0, 2177, 2179, 5, 10, 0, 0, 2178, 2175, 1, 0, 0, 0, 2178, 2179, 1, 0, 0, 0, 2179, 2192, 1, 0, 0, 0, 2180, 2181, 5, 47, 0, 0, 2181, 2182, 5, 42, 0, 0, 2182, 2186, 1, 0, 0, 0, 2183, 2185, 9, 0, 0, 0, 2184, 2183, 1, 0, 0, 0, 2185, 2188, 1, 0, 0, 0, 2186, 2187, 1, 0, 0, 0, 2186, 2184, 1, 0, 0, 0, 2187, 2189, 1, 0, 0, 0, 2188, 2186, 1, 0, 0, 0, 2189, 2190, 5, 42, 0, 0, 2190, 2192, 5, 47, 0, 0, 2191, 2165, 1, 0, 0, 0, 2191, 2180, 1, 0, 0, 0, 2192, 2193, 1, 0, 0, 0, 2193, 2194, 6, 237, 0, 0, 2194, 476, 1, 0, 0, 0, 2195, 2197, 7, 5, 0, 0, 2196, 2195, 1, 0, 0, 0, 2197, 2198, 1, 0, 0, 0, 2198, 2196, 1, 0, 0, 0, 2198, 2199, 1, 0, 0, 0, 2199, 2200, 1, 0, 0, 0, 2200, 2201, 6, 238, 0, 0, 2201, 478, 1, 0, 0, 0, 25, 0, 2052, 2057, 2063, 2068, 2073, 2079, 2083, 2086, 2089, 2094, 2097, 2100, 2103, 2123, 2143, 2152, 2158, 2162, 2171, 2175, 2178, 2186, 2191, 2198, 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 33677c693..f4164b9d4 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.tokens
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMathLexer.tokens
@@ -227,73 +227,74 @@ T__225=226
T__226=227
T__227=228
T__228=229
-NEWLINE=230
-NUMBER=231
-SPECIALSET=232
-BOOLEAN=233
-NAN=234
-VARIABLE=235
-COMMENT=236
-WS=237
-'!'=1
-'!!'=2
-'!!!'=3
-'^'=4
-'-'=5
-'+'=6
-'*'=7
-'...'=8
-'…'=9
-'/'=10
-'mod'=11
-'intersect'=12
-'/\\'=13
-'unite'=14
-'\\/'=15
-'setsubtract'=16
-'\\'=17
-'in'=18
-'subset'=19
-'⊆'=20
-'superset'=21
-'⊇'=22
-'divides'=23
-'|'=24
-'>='=25
-'<='=26
-'>'=27
-'<'=28
-'='=29
-'<>'=30
-'≡'=31
-'('=32
-')'=33
-'not'=34
-'and'=35
-'&'=36
-'xor'=37
-'or'=38
-'implies'=39
-'->'=40
-'provided'=41
-'=>'=42
-':'=43
-'forall'=44
-'∀'=45
-'exists!'=46
-'∃!'=47
-'exists'=48
-'∃'=49
-','=50
-';'=51
-'+oo'=52
-'-oo'=53
-'(|'=54
-'|)'=55
-'#'=56
-'['=57
-']T'=58
-']'=59
+T__229=230
+NEWLINE=231
+NUMBER=232
+SPECIALSET=233
+BOOLEAN=234
+NAN=235
+VARIABLE=236
+COMMENT=237
+WS=238
+'['=1
+']'=2
+'!'=3
+'!!'=4
+'!!!'=5
+'^'=6
+'-'=7
+'+'=8
+'*'=9
+'...'=10
+'…'=11
+'/'=12
+'mod'=13
+'intersect'=14
+'/\\'=15
+'unite'=16
+'\\/'=17
+'setsubtract'=18
+'\\'=19
+'in'=20
+'subset'=21
+'⊆'=22
+'superset'=23
+'⊇'=24
+'divides'=25
+'|'=26
+'>='=27
+'<='=28
+'>'=29
+'<'=30
+'='=31
+'<>'=32
+'≡'=33
+'('=34
+')'=35
+'not'=36
+'and'=37
+'&'=38
+'xor'=39
+'or'=40
+'implies'=41
+'->'=42
+'provided'=43
+'=>'=44
+':'=45
+'forall'=46
+'∀'=47
+'exists!'=48
+'∃!'=49
+'exists'=50
+'∃'=51
+','=52
+';'=53
+'+oo'=54
+'-oo'=55
+'(|'=56
+'|)'=57
+'#'=58
+']T'=59
'{'=60
'}'=61
'log('=62
@@ -432,36 +433,37 @@ WS=237
'Chi('=195
'det('=196
'transpose('=197
-'dot('=198
-'cross('=199
-'laplacian('=200
-'forwarddifference('=201
-'jacobian('=202
-'hessian('=203
-'resultant('=204
-'conjugate('=205
-'conj('=206
-'arg('=207
-'Re('=208
-'Im('=209
-'re('=210
-'real('=211
-'im('=212
-'imag('=213
-'trunc('=214
-'zeta('=215
-'riemannzeta('=216
-'hurwitzzeta('=217
-'heaviside('=218
-'unitstep('=219
-'isprime('=220
-'pochhammer('=221
-'doublefactorial('=222
-'factorial2('=223
-'fractionalpart('=224
-'quotient('=225
-'domain('=226
-'piecewise('=227
-'apply('=228
-'lambda('=229
-'NaN'=234
+'trace('=198
+'dot('=199
+'cross('=200
+'laplacian('=201
+'forwarddifference('=202
+'jacobian('=203
+'hessian('=204
+'resultant('=205
+'conjugate('=206
+'conj('=207
+'arg('=208
+'Re('=209
+'Im('=210
+'re('=211
+'real('=212
+'im('=213
+'imag('=214
+'trunc('=215
+'zeta('=216
+'riemannzeta('=217
+'hurwitzzeta('=218
+'heaviside('=219
+'unitstep('=220
+'isprime('=221
+'pochhammer('=222
+'doublefactorial('=223
+'factorial2('=224
+'fractionalpart('=225
+'quotient('=226
+'domain('=227
+'piecewise('=228
+'apply('=229
+'lambda('=230
+'NaN'=235
diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMathListener.cs b/Sources/AngouriMath/Core/Antlr/AngouriMathListener.cs
index 040f2104c..39e1c4d6f 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMathListener.cs
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMathListener.cs
@@ -31,6 +31,16 @@ namespace AngouriMath.Core.Antlr {
[System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.13.1")]
[System.CLSCompliant(false)]
internal interface IAngouriMathListener : IParseTreeListener {
+ ///
+ /// Enter a parse tree produced by .
+ ///
+ /// The parse tree.
+ void EnterIndexed_atom([NotNull] AngouriMathParser.Indexed_atomContext context);
+ ///
+ /// Exit a parse tree produced by .
+ ///
+ /// The parse tree.
+ void ExitIndexed_atom([NotNull] AngouriMathParser.Indexed_atomContext context);
///
/// Enter a parse tree produced by .
///
diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs b/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs
index 06df1e7e8..85932b079 100644
--- a/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs
+++ b/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs
@@ -81,48 +81,48 @@ public const int
T__209=210, T__210=211, T__211=212, T__212=213, T__213=214, T__214=215,
T__215=216, T__216=217, T__217=218, T__218=219, T__219=220, T__220=221,
T__221=222, T__222=223, T__223=224, T__224=225, T__225=226, T__226=227,
- T__227=228, T__228=229, NEWLINE=230, NUMBER=231, SPECIALSET=232, BOOLEAN=233,
- NAN=234, VARIABLE=235, COMMENT=236, WS=237;
+ T__227=228, T__228=229, T__229=230, NEWLINE=231, NUMBER=232, SPECIALSET=233,
+ BOOLEAN=234, NAN=235, VARIABLE=236, COMMENT=237, WS=238;
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,
- RULE_set_operator_intersection = 6, RULE_set_operator_union_setsubtraction = 7,
- RULE_in_operator = 8, RULE_comparison_expression = 9, RULE_negate_expression = 10,
- RULE_and_expression = 11, RULE_xor_expression = 12, RULE_or_expression = 13,
- RULE_implies_expression = 14, RULE_provided_expression = 15, RULE_expression = 16,
- RULE_quantified_expression = 17, RULE_quantifier_keyword = 18, RULE_quantified_names = 19,
- RULE_function_arguments = 20, RULE_set_items = 21, RULE_interval_arguments = 22,
- RULE_cset_arguments = 23, RULE_atom = 24, RULE_statement = 25;
+ RULE_indexed_atom = 0, RULE_factorial_expression = 1, RULE_power_list = 2,
+ RULE_power_expression = 3, RULE_unary_expression = 4, RULE_mult_expression = 5,
+ RULE_sum_expression = 6, RULE_set_operator_intersection = 7, RULE_set_operator_union_setsubtraction = 8,
+ RULE_in_operator = 9, RULE_comparison_expression = 10, RULE_negate_expression = 11,
+ RULE_and_expression = 12, RULE_xor_expression = 13, RULE_or_expression = 14,
+ RULE_implies_expression = 15, RULE_provided_expression = 16, RULE_expression = 17,
+ RULE_quantified_expression = 18, RULE_quantifier_keyword = 19, RULE_quantified_names = 20,
+ RULE_function_arguments = 21, RULE_set_items = 22, RULE_interval_arguments = 23,
+ RULE_cset_arguments = 24, RULE_atom = 25, RULE_statement = 26;
public static readonly string[] ruleNames = {
- "factorial_expression", "power_list", "power_expression", "unary_expression",
- "mult_expression", "sum_expression", "set_operator_intersection", "set_operator_union_setsubtraction",
- "in_operator", "comparison_expression", "negate_expression", "and_expression",
- "xor_expression", "or_expression", "implies_expression", "provided_expression",
- "expression", "quantified_expression", "quantifier_keyword", "quantified_names",
- "function_arguments", "set_items", "interval_arguments", "cset_arguments",
- "atom", "statement"
+ "indexed_atom", "factorial_expression", "power_list", "power_expression",
+ "unary_expression", "mult_expression", "sum_expression", "set_operator_intersection",
+ "set_operator_union_setsubtraction", "in_operator", "comparison_expression",
+ "negate_expression", "and_expression", "xor_expression", "or_expression",
+ "implies_expression", "provided_expression", "expression", "quantified_expression",
+ "quantifier_keyword", "quantified_names", "function_arguments", "set_items",
+ "interval_arguments", "cset_arguments", "atom", "statement"
};
private static readonly string[] _LiteralNames = {
- null, "'!'", "'!!'", "'!!!'", "'^'", "'-'", "'+'", "'*'", "'...'", "'\\u2026'",
- "'/'", "'mod'", "'intersect'", "'/\\'", "'unite'", "'\\/'", "'setsubtract'",
- "'\\'", "'in'", "'subset'", "'\\u2286'", "'superset'", "'\\u2287'", "'divides'",
- "'|'", "'>='", "'<='", "'>'", "'<'", "'='", "'<>'", "'\\u2261'", "'('",
- "')'", "'not'", "'and'", "'&'", "'xor'", "'or'", "'implies'", "'->'",
- "'provided'", "'=>'", "':'", "'forall'", "'\\u2200'", "'exists!'", "'\\u2203!'",
- "'exists'", "'\\u2203'", "','", "';'", "'+oo'", "'-oo'", "'(|'", "'|)'",
- "'#'", "'['", "']T'", "']'", "'{'", "'}'", "'log('", "'log10('", "'log2('",
- "'pow('", "'sqrt('", "'cbrt('", "'sqr('", "'ln('", "'exp('", "'sin('",
- "'cos('", "'tan('", "'cotan('", "'cot('", "'sec('", "'cosec('", "'csc('",
- "'arcsin('", "'arccos('", "'arctan('", "'arccotan('", "'arcsec('", "'arccosec('",
- "'arccsc('", "'acsc('", "'asin('", "'acos('", "'atan('", "'acotan('",
- "'asec('", "'acosec('", "'acot('", "'arccot('", "'sinh('", "'sh('", "'cosh('",
- "'ch('", "'tanh('", "'th('", "'cotanh('", "'coth('", "'cth('", "'sech('",
- "'sch('", "'cosech('", "'csch('", "'asinh('", "'arsinh('", "'arsh('",
- "'arcsinh('", "'acosh('", "'arcosh('", "'arch('", "'arccosh('", "'atanh('",
- "'artanh('", "'arth('", "'arctanh('", "'acoth('", "'arcoth('", "'acotanh('",
- "'arcotanh('", "'arcth('", "'arccotanh('", "'asech('", "'arsech('", "'arsch('",
- "'arcsech('", "'acosech('", "'arcosech('", "'arcsch('", "'arccosech('",
+ null, "'['", "']'", "'!'", "'!!'", "'!!!'", "'^'", "'-'", "'+'", "'*'",
+ "'...'", "'\\u2026'", "'/'", "'mod'", "'intersect'", "'/\\'", "'unite'",
+ "'\\/'", "'setsubtract'", "'\\'", "'in'", "'subset'", "'\\u2286'", "'superset'",
+ "'\\u2287'", "'divides'", "'|'", "'>='", "'<='", "'>'", "'<'", "'='",
+ "'<>'", "'\\u2261'", "'('", "')'", "'not'", "'and'", "'&'", "'xor'", "'or'",
+ "'implies'", "'->'", "'provided'", "'=>'", "':'", "'forall'", "'\\u2200'",
+ "'exists!'", "'\\u2203!'", "'exists'", "'\\u2203'", "','", "';'", "'+oo'",
+ "'-oo'", "'(|'", "'|)'", "'#'", "']T'", "'{'", "'}'", "'log('", "'log10('",
+ "'log2('", "'pow('", "'sqrt('", "'cbrt('", "'sqr('", "'ln('", "'exp('",
+ "'sin('", "'cos('", "'tan('", "'cotan('", "'cot('", "'sec('", "'cosec('",
+ "'csc('", "'arcsin('", "'arccos('", "'arctan('", "'arccotan('", "'arcsec('",
+ "'arccosec('", "'arccsc('", "'acsc('", "'asin('", "'acos('", "'atan('",
+ "'acotan('", "'asec('", "'acosec('", "'acot('", "'arccot('", "'sinh('",
+ "'sh('", "'cosh('", "'ch('", "'tanh('", "'th('", "'cotanh('", "'coth('",
+ "'cth('", "'sech('", "'sch('", "'cosech('", "'csch('", "'asinh('", "'arsinh('",
+ "'arsh('", "'arcsinh('", "'acosh('", "'arcosh('", "'arch('", "'arccosh('",
+ "'atanh('", "'artanh('", "'arth('", "'arctanh('", "'acoth('", "'arcoth('",
+ "'acotanh('", "'arcotanh('", "'arcth('", "'arccotanh('", "'asech('", "'arsech('",
+ "'arsch('", "'arcsech('", "'acosech('", "'arcosech('", "'arcsch('", "'arccosech('",
"'acsch('", "'factorial('", "'gamma('", "'derivative('", "'integral('",
"'limit('", "'limitleft('", "'limitright('", "'sum('", "'product('", "'signum('",
"'sgn('", "'sign('", "'abs('", "'phi('", "'prime('", "'valuation('", "'mobius('",
@@ -134,7 +134,7 @@ public const int
"'factorialpower('", "'risingfactorial('", "'iverson('", "'aleph('", "'erf('",
"'erfc('", "'erfi('", "'Ei('", "'li('", "'lambertw('", "'productlog('",
"'polygamma('", "'digamma('", "'Si('", "'Ci('", "'Shi('", "'Chi('", "'det('",
- "'transpose('", "'dot('", "'cross('", "'laplacian('", "'forwarddifference('",
+ "'transpose('", "'trace('", "'dot('", "'cross('", "'laplacian('", "'forwarddifference('",
"'jacobian('", "'hessian('", "'resultant('", "'conjugate('", "'conj('",
"'arg('", "'Re('", "'Im('", "'re('", "'real('", "'im('", "'imag('", "'trunc('",
"'zeta('", "'riemannzeta('", "'hurwitzzeta('", "'heaviside('", "'unitstep('",
@@ -162,8 +162,8 @@ public const int
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, "NEWLINE", "NUMBER", "SPECIALSET", "BOOLEAN", "NAN", "VARIABLE",
- "COMMENT", "WS"
+ null, null, null, "NEWLINE", "NUMBER", "SPECIALSET", "BOOLEAN", "NAN",
+ "VARIABLE", "COMMENT", "WS"
};
public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames);
@@ -224,12 +224,85 @@ public AngouriMathParser(ITokenStream input, TextWriter output, TextWriter error
Interpreter = new ParserATNSimulator(this, _ATN, decisionToDFA, sharedContextCache);
}
- internal partial class Factorial_expressionContext : ParserRuleContext {
+ internal partial class Indexed_atomContext : ParserRuleContext {
public Entity value;
public AtomContext p;
+ public Function_argumentsContext args;
[System.Diagnostics.DebuggerNonUserCode] public AtomContext atom() {
return GetRuleContext(0);
}
+ [System.Diagnostics.DebuggerNonUserCode] public Function_argumentsContext[] function_arguments() {
+ return GetRuleContexts();
+ }
+ [System.Diagnostics.DebuggerNonUserCode] public Function_argumentsContext function_arguments(int i) {
+ return GetRuleContext(i);
+ }
+ public Indexed_atomContext(ParserRuleContext parent, int invokingState)
+ : base(parent, invokingState)
+ {
+ }
+ public override int RuleIndex { get { return RULE_indexed_atom; } }
+ [System.Diagnostics.DebuggerNonUserCode]
+ public override void EnterRule(IParseTreeListener listener) {
+ IAngouriMathListener typedListener = listener as IAngouriMathListener;
+ if (typedListener != null) typedListener.EnterIndexed_atom(this);
+ }
+ [System.Diagnostics.DebuggerNonUserCode]
+ public override void ExitRule(IParseTreeListener listener) {
+ IAngouriMathListener typedListener = listener as IAngouriMathListener;
+ if (typedListener != null) typedListener.ExitIndexed_atom(this);
+ }
+ }
+
+ [RuleVersion(0)]
+ public Indexed_atomContext indexed_atom() {
+ Indexed_atomContext _localctx = new Indexed_atomContext(Context, State);
+ EnterRule(_localctx, 0, RULE_indexed_atom);
+ int _la;
+ try {
+ EnterOuterAlt(_localctx, 1);
+ {
+ State = 54;
+ _localctx.p = atom();
+ _localctx.value = _localctx.p.value;
+ State = 63;
+ ErrorHandler.Sync(this);
+ _la = TokenStream.LA(1);
+ while (_la==T__0) {
+ {
+ {
+ State = 56;
+ Match(T__0);
+ State = 57;
+ _localctx.args = function_arguments();
+ State = 58;
+ Match(T__1);
+ _localctx.value = ParsingHelpers.Entry(_localctx.value, _localctx.args.list);
+ }
+ }
+ State = 65;
+ ErrorHandler.Sync(this);
+ _la = TokenStream.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ ErrorHandler.ReportError(this, re);
+ ErrorHandler.Recover(this, re);
+ }
+ finally {
+ ExitRule();
+ }
+ return _localctx;
+ }
+
+ internal partial class Factorial_expressionContext : ParserRuleContext {
+ public Entity value;
+ public Indexed_atomContext p;
+ [System.Diagnostics.DebuggerNonUserCode] public Indexed_atomContext indexed_atom() {
+ return GetRuleContext(0);
+ }
public Factorial_expressionContext(ParserRuleContext parent, int invokingState)
: base(parent, invokingState)
{
@@ -250,46 +323,46 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Factorial_expressionContext factorial_expression() {
Factorial_expressionContext _localctx = new Factorial_expressionContext(Context, State);
- EnterRule(_localctx, 0, RULE_factorial_expression);
+ EnterRule(_localctx, 2, RULE_factorial_expression);
try {
- State = 67;
+ State = 81;
ErrorHandler.Sync(this);
- switch ( Interpreter.AdaptivePredict(TokenStream,0,Context) ) {
+ switch ( Interpreter.AdaptivePredict(TokenStream,1,Context) ) {
case 1:
EnterOuterAlt(_localctx, 1);
{
- State = 52;
- _localctx.p = atom();
- State = 53;
- Match(T__0);
+ State = 66;
+ _localctx.p = indexed_atom();
+ State = 67;
+ Match(T__2);
_localctx.value = MathS.Factorial(_localctx.p.value);
}
break;
case 2:
EnterOuterAlt(_localctx, 2);
{
- State = 56;
- _localctx.p = atom();
- State = 57;
- Match(T__1);
+ State = 70;
+ _localctx.p = indexed_atom();
+ State = 71;
+ Match(T__3);
_localctx.value = MathS.DoubleFactorial(_localctx.p.value);
}
break;
case 3:
EnterOuterAlt(_localctx, 3);
{
- State = 60;
- _localctx.p = atom();
- State = 61;
- Match(T__2);
+ State = 74;
+ _localctx.p = indexed_atom();
+ State = 75;
+ Match(T__4);
throw new UnrecognizedFunctionParseException("n!!! is the triple factorial, which AngouriMath does not have; write (n!!)! for the factorial of a double factorial");
}
break;
case 4:
EnterOuterAlt(_localctx, 4);
{
- State = 64;
- _localctx.p = atom();
+ State = 78;
+ _localctx.p = indexed_atom();
_localctx.value = _localctx.p.value;
}
break;
@@ -342,17 +415,17 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Power_listContext power_list() {
Power_listContext _localctx = new Power_listContext(Context, State);
- EnterRule(_localctx, 2, RULE_power_list);
+ EnterRule(_localctx, 4, RULE_power_list);
_localctx.value = new();
try {
int _alt;
- State = 85;
+ State = 99;
ErrorHandler.Sync(this);
- switch ( Interpreter.AdaptivePredict(TokenStream,3,Context) ) {
+ switch ( Interpreter.AdaptivePredict(TokenStream,4,Context) ) {
case 1:
EnterOuterAlt(_localctx, 1);
{
- State = 73;
+ State = 87;
ErrorHandler.Sync(this);
_alt = 1;
do {
@@ -360,9 +433,9 @@ public Power_listContext power_list() {
case 1:
{
{
- State = 69;
- Match(T__3);
- State = 70;
+ State = 83;
+ Match(T__5);
+ State = 84;
_localctx._factorial_expression = factorial_expression();
_localctx.value.Add(_localctx._factorial_expression.value);
}
@@ -371,16 +444,16 @@ public Power_listContext power_list() {
default:
throw new NoViableAltException(this);
}
- State = 75;
+ State = 89;
ErrorHandler.Sync(this);
- _alt = Interpreter.AdaptivePredict(TokenStream,1,Context);
+ _alt = Interpreter.AdaptivePredict(TokenStream,2,Context);
} while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER );
}
break;
case 2:
EnterOuterAlt(_localctx, 2);
{
- State = 81;
+ State = 95;
ErrorHandler.Sync(this);
_alt = 1;
do {
@@ -388,9 +461,9 @@ public Power_listContext power_list() {
case 1:
{
{
- State = 77;
- Match(T__3);
- State = 78;
+ State = 91;
+ Match(T__5);
+ State = 92;
_localctx._unary_expression = unary_expression();
_localctx.value.Add(_localctx._unary_expression.value);
}
@@ -399,9 +472,9 @@ public Power_listContext power_list() {
default:
throw new NoViableAltException(this);
}
- State = 83;
+ State = 97;
ErrorHandler.Sync(this);
- _alt = Interpreter.AdaptivePredict(TokenStream,2,Context);
+ _alt = Interpreter.AdaptivePredict(TokenStream,3,Context);
} while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER );
}
break;
@@ -448,19 +521,19 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Power_expressionContext power_expression() {
Power_expressionContext _localctx = new Power_expressionContext(Context, State);
- EnterRule(_localctx, 4, RULE_power_expression);
+ EnterRule(_localctx, 6, RULE_power_expression);
try {
EnterOuterAlt(_localctx, 1);
{
- State = 87;
+ State = 101;
_localctx._factorial_expression = factorial_expression();
_localctx.value = _localctx._factorial_expression.value;
- State = 92;
+ State = 106;
ErrorHandler.Sync(this);
- switch ( Interpreter.AdaptivePredict(TokenStream,4,Context) ) {
+ switch ( Interpreter.AdaptivePredict(TokenStream,5,Context) ) {
case 1:
{
- State = 89;
+ State = 103;
_localctx._power_list = power_list();
_localctx.value = _localctx._power_list.value
@@ -514,31 +587,31 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Unary_expressionContext unary_expression() {
Unary_expressionContext _localctx = new Unary_expressionContext(Context, State);
- EnterRule(_localctx, 6, RULE_unary_expression);
+ EnterRule(_localctx, 8, RULE_unary_expression);
try {
- State = 117;
+ State = 131;
ErrorHandler.Sync(this);
- switch ( Interpreter.AdaptivePredict(TokenStream,7,Context) ) {
+ switch ( Interpreter.AdaptivePredict(TokenStream,8,Context) ) {
case 1:
EnterOuterAlt(_localctx, 1);
{
- State = 102;
+ State = 116;
ErrorHandler.Sync(this);
switch (TokenStream.LA(1)) {
- case T__4:
+ case T__6:
{
- State = 94;
- Match(T__4);
- State = 95;
+ State = 108;
+ Match(T__6);
+ State = 109;
_localctx.p = power_expression();
_localctx.value = _localctx.p.value is Number num ? -num : -_localctx.p.value;
}
break;
- case T__5:
+ case T__7:
{
- State = 98;
- Match(T__5);
- State = 99;
+ State = 112;
+ Match(T__7);
+ State = 113;
_localctx.p = power_expression();
_localctx.value = _localctx.p.value;
}
@@ -551,23 +624,23 @@ public Unary_expressionContext unary_expression() {
case 2:
EnterOuterAlt(_localctx, 2);
{
- State = 112;
+ State = 126;
ErrorHandler.Sync(this);
switch (TokenStream.LA(1)) {
- case T__4:
+ case T__6:
{
- State = 104;
- Match(T__4);
- State = 105;
+ State = 118;
+ Match(T__6);
+ State = 119;
_localctx.u = unary_expression();
_localctx.value = -_localctx.u.value;
}
break;
- case T__5:
+ case T__7:
{
- State = 108;
- Match(T__5);
- State = 109;
+ State = 122;
+ Match(T__7);
+ State = 123;
_localctx.u = unary_expression();
_localctx.value = _localctx.u.value;
}
@@ -580,7 +653,7 @@ public Unary_expressionContext unary_expression() {
case 3:
EnterOuterAlt(_localctx, 3);
{
- State = 114;
+ State = 128;
_localctx.p = power_expression();
_localctx.value = _localctx.p.value;
}
@@ -628,36 +701,36 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Mult_expressionContext mult_expression() {
Mult_expressionContext _localctx = new Mult_expressionContext(Context, State);
- EnterRule(_localctx, 8, RULE_mult_expression);
+ EnterRule(_localctx, 10, RULE_mult_expression);
Entity beforeDots = null; Entity afterDots = null; bool mixed = false;
int _la;
try {
EnterOuterAlt(_localctx, 1);
{
- State = 119;
+ State = 133;
_localctx.u1 = unary_expression();
_localctx.value = _localctx.u1.value;
- State = 139;
+ State = 153;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 3200L) != 0)) {
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 12800L) != 0)) {
{
- State = 137;
+ State = 151;
ErrorHandler.Sync(this);
switch (TokenStream.LA(1)) {
- case T__6:
+ case T__8:
{
- State = 121;
- Match(T__6);
- State = 127;
+ State = 135;
+ Match(T__8);
+ State = 141;
ErrorHandler.Sync(this);
switch (TokenStream.LA(1)) {
- case T__7:
- case T__8:
+ case T__9:
+ case T__10:
{
- State = 122;
+ State = 136;
_la = TokenStream.LA(1);
- if ( !(_la==T__7 || _la==T__8) ) {
+ if ( !(_la==T__9 || _la==T__10) ) {
ErrorHandler.RecoverInline(this);
}
else {
@@ -667,14 +740,14 @@ public Mult_expressionContext mult_expression() {
if (beforeDots is not null) throw new InvalidArgumentParseException("A product written with dots has one ... in it"); beforeDots = _localctx.value;
}
break;
- case T__4:
- case T__5:
- case T__31:
- case T__51:
- case T__52:
+ case T__0:
+ case T__6:
+ case T__7:
+ case T__33:
case T__53:
+ case T__54:
case T__55:
- case T__56:
+ case T__57:
case T__59:
case T__61:
case T__62:
@@ -844,13 +917,14 @@ public Mult_expressionContext mult_expression() {
case T__226:
case T__227:
case T__228:
+ case T__229:
case NUMBER:
case SPECIALSET:
case BOOLEAN:
case NAN:
case VARIABLE:
{
- State = 124;
+ State = 138;
_localctx.u2 = unary_expression();
if (beforeDots is null) _localctx.value = _localctx.value * _localctx.u2.value; else if (afterDots is null) afterDots = _localctx.u2.value; else throw new InvalidArgumentParseException("A product written with dots ends with the one factor after them, as 1 * 2 * ... * n");
}
@@ -860,20 +934,20 @@ public Mult_expressionContext mult_expression() {
}
}
break;
- case T__9:
+ case T__11:
{
- State = 129;
- Match(T__9);
- State = 130;
+ State = 143;
+ Match(T__11);
+ State = 144;
_localctx.u2 = unary_expression();
_localctx.value = _localctx.value / _localctx.u2.value; mixed = true;
}
break;
- case T__10:
+ case T__12:
{
- State = 133;
- Match(T__10);
- State = 134;
+ State = 147;
+ Match(T__12);
+ State = 148;
_localctx.u2 = unary_expression();
_localctx.value = _localctx.value % _localctx.u2.value; mixed = true;
}
@@ -882,7 +956,7 @@ public Mult_expressionContext mult_expression() {
throw new NoViableAltException(this);
}
}
- State = 141;
+ State = 155;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
}
@@ -930,36 +1004,36 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Sum_expressionContext sum_expression() {
Sum_expressionContext _localctx = new Sum_expressionContext(Context, State);
- EnterRule(_localctx, 10, RULE_sum_expression);
+ EnterRule(_localctx, 12, RULE_sum_expression);
Entity beforeDots = null; Entity afterDots = null;
int _la;
try {
EnterOuterAlt(_localctx, 1);
{
- State = 144;
+ State = 158;
_localctx.m1 = mult_expression();
_localctx.value = _localctx.m1.value;
- State = 160;
+ State = 174;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
- while (_la==T__4 || _la==T__5) {
+ while (_la==T__6 || _la==T__7) {
{
- State = 158;
+ State = 172;
ErrorHandler.Sync(this);
switch (TokenStream.LA(1)) {
- case T__5:
+ case T__7:
{
- State = 146;
- Match(T__5);
- State = 152;
+ State = 160;
+ Match(T__7);
+ State = 166;
ErrorHandler.Sync(this);
switch (TokenStream.LA(1)) {
- case T__7:
- case T__8:
+ case T__9:
+ case T__10:
{
- State = 147;
+ State = 161;
_la = TokenStream.LA(1);
- if ( !(_la==T__7 || _la==T__8) ) {
+ if ( !(_la==T__9 || _la==T__10) ) {
ErrorHandler.RecoverInline(this);
}
else {
@@ -969,14 +1043,14 @@ public Sum_expressionContext sum_expression() {
if (beforeDots is not null) throw new InvalidArgumentParseException("A sum written with dots has one ... in it"); beforeDots = _localctx.value;
}
break;
- case T__4:
- case T__5:
- case T__31:
- case T__51:
- case T__52:
+ case T__0:
+ case T__6:
+ case T__7:
+ case T__33:
case T__53:
+ case T__54:
case T__55:
- case T__56:
+ case T__57:
case T__59:
case T__61:
case T__62:
@@ -1146,13 +1220,14 @@ public Sum_expressionContext sum_expression() {
case T__226:
case T__227:
case T__228:
+ case T__229:
case NUMBER:
case SPECIALSET:
case BOOLEAN:
case NAN:
case VARIABLE:
{
- State = 149;
+ State = 163;
_localctx.m2 = mult_expression();
if (beforeDots is null) _localctx.value = _localctx.value + _localctx.m2.value; else if (afterDots is null) afterDots = _localctx.m2.value; else throw new InvalidArgumentParseException("A sum written with dots ends with the one term after them, as 1 + 2 + ... + n");
}
@@ -1162,11 +1237,11 @@ public Sum_expressionContext sum_expression() {
}
}
break;
- case T__4:
+ case T__6:
{
- State = 154;
- Match(T__4);
- State = 155;
+ State = 168;
+ Match(T__6);
+ State = 169;
_localctx.m2 = mult_expression();
if (beforeDots is null) _localctx.value = _localctx.value - _localctx.m2.value; else throw new InvalidArgumentParseException("A sum written with dots ends with the one term after them, as 1 + 2 + ... + n");
}
@@ -1175,7 +1250,7 @@ public Sum_expressionContext sum_expression() {
throw new NoViableAltException(this);
}
}
- State = 162;
+ State = 176;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
}
@@ -1223,36 +1298,36 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Set_operator_intersectionContext set_operator_intersection() {
Set_operator_intersectionContext _localctx = new Set_operator_intersectionContext(Context, State);
- EnterRule(_localctx, 12, RULE_set_operator_intersection);
+ EnterRule(_localctx, 14, RULE_set_operator_intersection);
int _la;
try {
EnterOuterAlt(_localctx, 1);
{
- State = 165;
+ State = 179;
_localctx.left = sum_expression();
_localctx.value = _localctx.left.value;
- State = 177;
+ State = 191;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
- while (_la==T__11 || _la==T__12) {
+ while (_la==T__13 || _la==T__14) {
{
- State = 175;
+ State = 189;
ErrorHandler.Sync(this);
switch (TokenStream.LA(1)) {
- case T__11:
+ case T__13:
{
- State = 167;
- Match(T__11);
- State = 168;
+ State = 181;
+ Match(T__13);
+ State = 182;
_localctx.right = sum_expression();
_localctx.value = _localctx.value.Intersect(_localctx.right.value);
}
break;
- case T__12:
+ case T__14:
{
- State = 171;
- Match(T__12);
- State = 172;
+ State = 185;
+ Match(T__14);
+ State = 186;
_localctx.right = sum_expression();
_localctx.value = _localctx.value.Intersect(_localctx.right.value);
}
@@ -1261,7 +1336,7 @@ public Set_operator_intersectionContext set_operator_intersection() {
throw new NoViableAltException(this);
}
}
- State = 179;
+ State = 193;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
}
@@ -1308,54 +1383,54 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Set_operator_union_setsubtractionContext set_operator_union_setsubtraction() {
Set_operator_union_setsubtractionContext _localctx = new Set_operator_union_setsubtractionContext(Context, State);
- EnterRule(_localctx, 14, RULE_set_operator_union_setsubtraction);
+ EnterRule(_localctx, 16, RULE_set_operator_union_setsubtraction);
int _la;
try {
EnterOuterAlt(_localctx, 1);
{
- State = 180;
+ State = 194;
_localctx.left = set_operator_intersection();
_localctx.value = _localctx.left.value;
- State = 200;
+ State = 214;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 245760L) != 0)) {
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 983040L) != 0)) {
{
- State = 198;
+ State = 212;
ErrorHandler.Sync(this);
switch (TokenStream.LA(1)) {
- case T__13:
+ case T__15:
{
- State = 182;
- Match(T__13);
- State = 183;
+ State = 196;
+ Match(T__15);
+ State = 197;
_localctx.right = set_operator_intersection();
_localctx.value = _localctx.value.Unite(_localctx.right.value);
}
break;
- case T__14:
+ case T__16:
{
- State = 186;
- Match(T__14);
- State = 187;
+ State = 200;
+ Match(T__16);
+ State = 201;
_localctx.right = set_operator_intersection();
_localctx.value = _localctx.value.Unite(_localctx.right.value);
}
break;
- case T__15:
+ case T__17:
{
- State = 190;
- Match(T__15);
- State = 191;
+ State = 204;
+ Match(T__17);
+ State = 205;
_localctx.right = set_operator_intersection();
_localctx.value = _localctx.value.SetSubtract(_localctx.right.value);
}
break;
- case T__16:
+ case T__18:
{
- State = 194;
- Match(T__16);
- State = 195;
+ State = 208;
+ Match(T__18);
+ State = 209;
_localctx.right = set_operator_intersection();
_localctx.value = _localctx.value.SetSubtract(_localctx.right.value);
}
@@ -1364,7 +1439,7 @@ public Set_operator_union_setsubtractionContext set_operator_union_setsubtractio
throw new NoViableAltException(this);
}
}
- State = 202;
+ State = 216;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
}
@@ -1411,81 +1486,81 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public In_operatorContext in_operator() {
In_operatorContext _localctx = new In_operatorContext(Context, State);
- EnterRule(_localctx, 16, RULE_in_operator);
+ EnterRule(_localctx, 18, RULE_in_operator);
int _la;
try {
EnterOuterAlt(_localctx, 1);
{
- State = 203;
+ State = 217;
_localctx.m1 = set_operator_union_setsubtraction();
_localctx.value = _localctx.m1.value;
- State = 235;
+ State = 249;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 33292288L) != 0)) {
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 133169152L) != 0)) {
{
- State = 233;
+ State = 247;
ErrorHandler.Sync(this);
switch (TokenStream.LA(1)) {
- case T__17:
+ case T__19:
{
- State = 205;
- Match(T__17);
- State = 206;
+ State = 219;
+ Match(T__19);
+ State = 220;
_localctx.m2 = set_operator_union_setsubtraction();
_localctx.value = _localctx.value.In(_localctx.m2.value);
}
break;
- case T__18:
+ case T__20:
{
- State = 209;
- Match(T__18);
- State = 210;
+ State = 223;
+ Match(T__20);
+ State = 224;
_localctx.m2 = set_operator_union_setsubtraction();
_localctx.value = _localctx.value.SubsetOf(_localctx.m2.value);
}
break;
- case T__19:
+ case T__21:
{
- State = 213;
- Match(T__19);
- State = 214;
+ State = 227;
+ Match(T__21);
+ State = 228;
_localctx.m2 = set_operator_union_setsubtraction();
_localctx.value = _localctx.value.SubsetOf(_localctx.m2.value);
}
break;
- case T__20:
+ case T__22:
{
- State = 217;
- Match(T__20);
- State = 218;
+ State = 231;
+ Match(T__22);
+ State = 232;
_localctx.m2 = set_operator_union_setsubtraction();
_localctx.value = _localctx.m2.value.SubsetOf(_localctx.value);
}
break;
- case T__21:
+ case T__23:
{
- State = 221;
- Match(T__21);
- State = 222;
+ State = 235;
+ Match(T__23);
+ State = 236;
_localctx.m2 = set_operator_union_setsubtraction();
_localctx.value = _localctx.m2.value.SubsetOf(_localctx.value);
}
break;
- case T__22:
+ case T__24:
{
- State = 225;
- Match(T__22);
- State = 226;
+ State = 239;
+ Match(T__24);
+ State = 240;
_localctx.m2 = set_operator_union_setsubtraction();
_localctx.value = _localctx.value.Divides(_localctx.m2.value);
}
break;
- case T__23:
+ case T__25:
{
- State = 229;
- Match(T__23);
- State = 230;
+ State = 243;
+ Match(T__25);
+ State = 244;
_localctx.m2 = set_operator_union_setsubtraction();
_localctx.value = _localctx.value.Divides(_localctx.m2.value);
}
@@ -1494,7 +1569,7 @@ public In_operatorContext in_operator() {
throw new NoViableAltException(this);
}
}
- State = 237;
+ State = 251;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
}
@@ -1542,98 +1617,98 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Comparison_expressionContext comparison_expression() {
Comparison_expressionContext _localctx = new Comparison_expressionContext(Context, State);
- EnterRule(_localctx, 18, RULE_comparison_expression);
+ EnterRule(_localctx, 20, RULE_comparison_expression);
List terms = []; List operators = []; Entity modulus = null;
int _la;
try {
EnterOuterAlt(_localctx, 1);
{
- State = 238;
+ State = 252;
_localctx.m1 = in_operator();
terms.Add(_localctx.m1.value);
- State = 261;
+ State = 275;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 4261412864L) != 0)) {
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 17045651456L) != 0)) {
{
{
- State = 254;
+ State = 268;
ErrorHandler.Sync(this);
switch (TokenStream.LA(1)) {
- case T__24:
+ case T__26:
{
- State = 240;
- Match(T__24);
+ State = 254;
+ Match(T__26);
operators.Add(">=");
}
break;
- case T__25:
+ case T__27:
{
- State = 242;
- Match(T__25);
+ State = 256;
+ Match(T__27);
operators.Add("<=");
}
break;
- case T__26:
+ case T__28:
{
- State = 244;
- Match(T__26);
+ State = 258;
+ Match(T__28);
operators.Add(">");
}
break;
- case T__27:
+ case T__29:
{
- State = 246;
- Match(T__27);
+ State = 260;
+ Match(T__29);
operators.Add("<");
}
break;
- case T__28:
+ case T__30:
{
- State = 248;
- Match(T__28);
+ State = 262;
+ Match(T__30);
operators.Add("=");
}
break;
- case T__29:
+ case T__31:
{
- State = 250;
- Match(T__29);
+ State = 264;
+ Match(T__31);
operators.Add("<>");
}
break;
- case T__30:
+ case T__32:
{
- State = 252;
- Match(T__30);
+ State = 266;
+ Match(T__32);
operators.Add("≡");
}
break;
default:
throw new NoViableAltException(this);
}
- State = 256;
+ State = 270;
_localctx.m2 = in_operator();
terms.Add(_localctx.m2.value);
}
}
- State = 263;
+ State = 277;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
}
- State = 270;
+ State = 284;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
- if (_la==T__31) {
+ if (_la==T__33) {
{
- State = 264;
- Match(T__31);
- State = 265;
- Match(T__10);
- State = 266;
+ State = 278;
+ Match(T__33);
+ State = 279;
+ Match(T__12);
+ State = 280;
_localctx.mod = in_operator();
- State = 267;
- Match(T__32);
+ State = 281;
+ Match(T__34);
modulus = _localctx.mod.value;
}
}
@@ -1720,17 +1795,17 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Negate_expressionContext negate_expression() {
Negate_expressionContext _localctx = new Negate_expressionContext(Context, State);
- EnterRule(_localctx, 20, RULE_negate_expression);
+ EnterRule(_localctx, 22, RULE_negate_expression);
try {
- State = 289;
+ State = 303;
ErrorHandler.Sync(this);
- switch ( Interpreter.AdaptivePredict(TokenStream,23,Context) ) {
+ switch ( Interpreter.AdaptivePredict(TokenStream,24,Context) ) {
case 1:
EnterOuterAlt(_localctx, 1);
{
- State = 274;
- Match(T__33);
- State = 275;
+ State = 288;
+ Match(T__35);
+ State = 289;
_localctx.op = comparison_expression();
_localctx.value = !_localctx.op.value;
}
@@ -1738,9 +1813,9 @@ public Negate_expressionContext negate_expression() {
case 2:
EnterOuterAlt(_localctx, 2);
{
- State = 278;
- Match(T__33);
- State = 279;
+ State = 292;
+ Match(T__35);
+ State = 293;
_localctx.opn = negate_expression();
_localctx.value = !_localctx.opn.value;
}
@@ -1748,9 +1823,9 @@ public Negate_expressionContext negate_expression() {
case 3:
EnterOuterAlt(_localctx, 3);
{
- State = 282;
- Match(T__33);
- State = 283;
+ State = 296;
+ Match(T__35);
+ State = 297;
_localctx.q = quantified_expression();
_localctx.value = !_localctx.q.value;
}
@@ -1758,7 +1833,7 @@ public Negate_expressionContext negate_expression() {
case 4:
EnterOuterAlt(_localctx, 4);
{
- State = 286;
+ State = 300;
_localctx.op = comparison_expression();
_localctx.value = _localctx.op.value;
}
@@ -1813,54 +1888,54 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public And_expressionContext and_expression() {
And_expressionContext _localctx = new And_expressionContext(Context, State);
- EnterRule(_localctx, 22, RULE_and_expression);
+ EnterRule(_localctx, 24, RULE_and_expression);
int _la;
try {
int _alt;
EnterOuterAlt(_localctx, 1);
{
- State = 291;
+ State = 305;
_localctx.m1 = negate_expression();
_localctx.value = _localctx.m1.value;
- State = 307;
+ State = 321;
ErrorHandler.Sync(this);
- _alt = Interpreter.AdaptivePredict(TokenStream,25,Context);
+ _alt = Interpreter.AdaptivePredict(TokenStream,26,Context);
while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
- State = 305;
+ State = 319;
ErrorHandler.Sync(this);
- switch ( Interpreter.AdaptivePredict(TokenStream,24,Context) ) {
+ switch ( Interpreter.AdaptivePredict(TokenStream,25,Context) ) {
case 1:
{
- State = 293;
- Match(T__34);
- State = 294;
+ State = 307;
+ Match(T__36);
+ State = 308;
_localctx.m2 = negate_expression();
_localctx.value = _localctx.value & _localctx.m2.value;
}
break;
case 2:
{
- State = 297;
- Match(T__35);
- State = 298;
+ State = 311;
+ Match(T__37);
+ State = 312;
_localctx.m2 = negate_expression();
_localctx.value = _localctx.value & _localctx.m2.value;
}
break;
case 3:
{
- State = 301;
+ State = 315;
_la = TokenStream.LA(1);
- if ( !(_la==T__34 || _la==T__35) ) {
+ if ( !(_la==T__36 || _la==T__37) ) {
ErrorHandler.RecoverInline(this);
}
else {
ErrorHandler.ReportMatch(this);
Consume();
}
- State = 302;
+ State = 316;
_localctx.q = quantified_expression();
_localctx.value = _localctx.value & _localctx.q.value;
}
@@ -1868,9 +1943,9 @@ public And_expressionContext and_expression() {
}
}
}
- State = 309;
+ State = 323;
ErrorHandler.Sync(this);
- _alt = Interpreter.AdaptivePredict(TokenStream,25,Context);
+ _alt = Interpreter.AdaptivePredict(TokenStream,26,Context);
}
}
}
@@ -1922,37 +1997,37 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Xor_expressionContext xor_expression() {
Xor_expressionContext _localctx = new Xor_expressionContext(Context, State);
- EnterRule(_localctx, 24, RULE_xor_expression);
+ EnterRule(_localctx, 26, RULE_xor_expression);
try {
int _alt;
EnterOuterAlt(_localctx, 1);
{
- State = 310;
+ State = 324;
_localctx.m1 = and_expression();
_localctx.value = _localctx.m1.value;
- State = 322;
+ State = 336;
ErrorHandler.Sync(this);
- _alt = Interpreter.AdaptivePredict(TokenStream,27,Context);
+ _alt = Interpreter.AdaptivePredict(TokenStream,28,Context);
while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
- State = 320;
+ State = 334;
ErrorHandler.Sync(this);
- switch ( Interpreter.AdaptivePredict(TokenStream,26,Context) ) {
+ switch ( Interpreter.AdaptivePredict(TokenStream,27,Context) ) {
case 1:
{
- State = 312;
- Match(T__36);
- State = 313;
+ State = 326;
+ Match(T__38);
+ State = 327;
_localctx.m2 = and_expression();
_localctx.value = _localctx.value ^ _localctx.m2.value;
}
break;
case 2:
{
- State = 316;
- Match(T__36);
- State = 317;
+ State = 330;
+ Match(T__38);
+ State = 331;
_localctx.q = quantified_expression();
_localctx.value = _localctx.value ^ _localctx.q.value;
}
@@ -1960,9 +2035,9 @@ public Xor_expressionContext xor_expression() {
}
}
}
- State = 324;
+ State = 338;
ErrorHandler.Sync(this);
- _alt = Interpreter.AdaptivePredict(TokenStream,27,Context);
+ _alt = Interpreter.AdaptivePredict(TokenStream,28,Context);
}
}
}
@@ -2014,37 +2089,37 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Or_expressionContext or_expression() {
Or_expressionContext _localctx = new Or_expressionContext(Context, State);
- EnterRule(_localctx, 26, RULE_or_expression);
+ EnterRule(_localctx, 28, RULE_or_expression);
try {
int _alt;
EnterOuterAlt(_localctx, 1);
{
- State = 325;
+ State = 339;
_localctx.m1 = xor_expression();
_localctx.value = _localctx.m1.value;
- State = 337;
+ State = 351;
ErrorHandler.Sync(this);
- _alt = Interpreter.AdaptivePredict(TokenStream,29,Context);
+ _alt = Interpreter.AdaptivePredict(TokenStream,30,Context);
while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
- State = 335;
+ State = 349;
ErrorHandler.Sync(this);
- switch ( Interpreter.AdaptivePredict(TokenStream,28,Context) ) {
+ switch ( Interpreter.AdaptivePredict(TokenStream,29,Context) ) {
case 1:
{
- State = 327;
- Match(T__37);
- State = 328;
+ State = 341;
+ Match(T__39);
+ State = 342;
_localctx.m2 = xor_expression();
_localctx.value = _localctx.value | _localctx.m2.value;
}
break;
case 2:
{
- State = 331;
- Match(T__37);
- State = 332;
+ State = 345;
+ Match(T__39);
+ State = 346;
_localctx.q = quantified_expression();
_localctx.value = _localctx.value | _localctx.q.value;
}
@@ -2052,9 +2127,9 @@ public Or_expressionContext or_expression() {
}
}
}
- State = 339;
+ State = 353;
ErrorHandler.Sync(this);
- _alt = Interpreter.AdaptivePredict(TokenStream,29,Context);
+ _alt = Interpreter.AdaptivePredict(TokenStream,30,Context);
}
}
}
@@ -2106,54 +2181,54 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Implies_expressionContext implies_expression() {
Implies_expressionContext _localctx = new Implies_expressionContext(Context, State);
- EnterRule(_localctx, 28, RULE_implies_expression);
+ EnterRule(_localctx, 30, RULE_implies_expression);
int _la;
try {
int _alt;
EnterOuterAlt(_localctx, 1);
{
- State = 340;
+ State = 354;
_localctx.m1 = or_expression();
_localctx.value = _localctx.m1.value;
- State = 356;
+ State = 370;
ErrorHandler.Sync(this);
- _alt = Interpreter.AdaptivePredict(TokenStream,31,Context);
+ _alt = Interpreter.AdaptivePredict(TokenStream,32,Context);
while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
- State = 354;
+ State = 368;
ErrorHandler.Sync(this);
- switch ( Interpreter.AdaptivePredict(TokenStream,30,Context) ) {
+ switch ( Interpreter.AdaptivePredict(TokenStream,31,Context) ) {
case 1:
{
- State = 342;
- Match(T__38);
- State = 343;
+ State = 356;
+ Match(T__40);
+ State = 357;
_localctx.m2 = or_expression();
_localctx.value = _localctx.value.Implies(_localctx.m2.value);
}
break;
case 2:
{
- State = 346;
- Match(T__39);
- State = 347;
+ State = 360;
+ Match(T__41);
+ State = 361;
_localctx.m2 = or_expression();
_localctx.value = _localctx.value.Implies(_localctx.m2.value);
}
break;
case 3:
{
- State = 350;
+ State = 364;
_la = TokenStream.LA(1);
- if ( !(_la==T__38 || _la==T__39) ) {
+ if ( !(_la==T__40 || _la==T__41) ) {
ErrorHandler.RecoverInline(this);
}
else {
ErrorHandler.ReportMatch(this);
Consume();
}
- State = 351;
+ State = 365;
_localctx.q = quantified_expression();
_localctx.value = _localctx.value.Implies(_localctx.q.value);
}
@@ -2161,9 +2236,9 @@ public Implies_expressionContext implies_expression() {
}
}
}
- State = 358;
+ State = 372;
ErrorHandler.Sync(this);
- _alt = Interpreter.AdaptivePredict(TokenStream,31,Context);
+ _alt = Interpreter.AdaptivePredict(TokenStream,32,Context);
}
}
}
@@ -2208,21 +2283,21 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Provided_expressionContext provided_expression() {
Provided_expressionContext _localctx = new Provided_expressionContext(Context, State);
- EnterRule(_localctx, 30, RULE_provided_expression);
+ EnterRule(_localctx, 32, RULE_provided_expression);
try {
EnterOuterAlt(_localctx, 1);
{
- State = 359;
+ State = 373;
_localctx.expr = implies_expression();
_localctx.value = _localctx.expr.value;
- State = 365;
+ State = 379;
ErrorHandler.Sync(this);
- switch ( Interpreter.AdaptivePredict(TokenStream,32,Context) ) {
+ switch ( Interpreter.AdaptivePredict(TokenStream,33,Context) ) {
case 1:
{
- State = 361;
- Match(T__40);
- State = 362;
+ State = 375;
+ Match(T__42);
+ State = 376;
_localctx.pred = provided_expression();
_localctx.value = _localctx.value.Provided(_localctx.pred.value);
}
@@ -2275,20 +2350,20 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public ExpressionContext expression() {
ExpressionContext _localctx = new ExpressionContext(Context, State);
- EnterRule(_localctx, 32, RULE_expression);
+ EnterRule(_localctx, 34, RULE_expression);
try {
- State = 378;
+ State = 392;
ErrorHandler.Sync(this);
switch (TokenStream.LA(1)) {
- case T__4:
- case T__5:
- case T__31:
+ case T__0:
+ case T__6:
+ case T__7:
case T__33:
- case T__51:
- case T__52:
+ case T__35:
case T__53:
+ case T__54:
case T__55:
- case T__56:
+ case T__57:
case T__59:
case T__61:
case T__62:
@@ -2458,6 +2533,7 @@ public ExpressionContext expression() {
case T__226:
case T__227:
case T__228:
+ case T__229:
case NUMBER:
case SPECIALSET:
case BOOLEAN:
@@ -2465,17 +2541,17 @@ public ExpressionContext expression() {
case VARIABLE:
EnterOuterAlt(_localctx, 1);
{
- State = 367;
+ State = 381;
_localctx.s = provided_expression();
_localctx.value = _localctx.s.value;
- State = 373;
+ State = 387;
ErrorHandler.Sync(this);
- switch ( Interpreter.AdaptivePredict(TokenStream,33,Context) ) {
+ switch ( Interpreter.AdaptivePredict(TokenStream,34,Context) ) {
case 1:
{
- State = 369;
- Match(T__41);
- State = 370;
+ State = 383;
+ Match(T__43);
+ State = 384;
_localctx.b = expression();
/* The parameters are read back out of an ordinary expression rather than matched as
@@ -2510,15 +2586,15 @@ therefore never arrive as a Variable token at all.
}
}
break;
- case T__43:
- case T__44:
case T__45:
case T__46:
case T__47:
case T__48:
+ case T__49:
+ case T__50:
EnterOuterAlt(_localctx, 2);
{
- State = 375;
+ State = 389;
_localctx.q = quantified_expression();
_localctx.value = _localctx.q.value;
}
@@ -2572,17 +2648,17 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Quantified_expressionContext quantified_expression() {
Quantified_expressionContext _localctx = new Quantified_expressionContext(Context, State);
- EnterRule(_localctx, 34, RULE_quantified_expression);
+ EnterRule(_localctx, 36, RULE_quantified_expression);
try {
EnterOuterAlt(_localctx, 1);
{
- State = 380;
+ State = 394;
_localctx.q = quantifier_keyword();
- State = 381;
+ State = 395;
_localctx.names = quantified_names();
- State = 382;
- Match(T__42);
- State = 383;
+ State = 396;
+ Match(T__44);
+ State = 397;
_localctx.b = expression();
Entity quantified = _localctx.b.value;
@@ -2631,19 +2707,19 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Quantifier_keywordContext quantifier_keyword() {
Quantifier_keywordContext _localctx = new Quantifier_keywordContext(Context, State);
- EnterRule(_localctx, 36, RULE_quantifier_keyword);
+ EnterRule(_localctx, 38, RULE_quantifier_keyword);
int _la;
try {
- State = 392;
+ State = 406;
ErrorHandler.Sync(this);
switch (TokenStream.LA(1)) {
- case T__43:
- case T__44:
+ case T__45:
+ case T__46:
EnterOuterAlt(_localctx, 1);
{
- State = 386;
+ State = 400;
_la = TokenStream.LA(1);
- if ( !(_la==T__43 || _la==T__44) ) {
+ if ( !(_la==T__45 || _la==T__46) ) {
ErrorHandler.RecoverInline(this);
}
else {
@@ -2653,13 +2729,13 @@ public Quantifier_keywordContext quantifier_keyword() {
_localctx.kind = "forall";
}
break;
- case T__45:
- case T__46:
+ case T__47:
+ case T__48:
EnterOuterAlt(_localctx, 2);
{
- State = 388;
+ State = 402;
_la = TokenStream.LA(1);
- if ( !(_la==T__45 || _la==T__46) ) {
+ if ( !(_la==T__47 || _la==T__48) ) {
ErrorHandler.RecoverInline(this);
}
else {
@@ -2669,13 +2745,13 @@ public Quantifier_keywordContext quantifier_keyword() {
_localctx.kind = "exists!";
}
break;
- case T__47:
- case T__48:
+ case T__49:
+ case T__50:
EnterOuterAlt(_localctx, 3);
{
- State = 390;
+ State = 404;
_la = TokenStream.LA(1);
- if ( !(_la==T__47 || _la==T__48) ) {
+ if ( !(_la==T__49 || _la==T__50) ) {
ErrorHandler.RecoverInline(this);
}
else {
@@ -2729,29 +2805,29 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Quantified_namesContext quantified_names() {
Quantified_namesContext _localctx = new Quantified_namesContext(Context, State);
- EnterRule(_localctx, 38, RULE_quantified_names);
+ EnterRule(_localctx, 40, RULE_quantified_names);
var items = new List();
int _la;
try {
EnterOuterAlt(_localctx, 1);
{
- State = 394;
+ State = 408;
_localctx.e = in_operator();
items.Add(_localctx.e.value);
- State = 402;
+ State = 416;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
- while (_la==T__49) {
+ while (_la==T__51) {
{
{
- State = 396;
- Match(T__49);
- State = 397;
+ State = 410;
+ Match(T__51);
+ State = 411;
_localctx.e = in_operator();
items.Add(_localctx.e.value);
}
}
- State = 404;
+ State = 418;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
}
@@ -2814,34 +2890,34 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Function_argumentsContext function_arguments() {
Function_argumentsContext _localctx = new Function_argumentsContext(Context, State);
- EnterRule(_localctx, 40, RULE_function_arguments);
+ EnterRule(_localctx, 42, RULE_function_arguments);
_localctx.list = new List();
int _la;
try {
EnterOuterAlt(_localctx, 1);
{
- State = 418;
+ State = 432;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -3209958205119528864L) != 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)) & 17317308137471L) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -3040000031319916158L) != 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)) & 34634616274943L) != 0)) {
{
- State = 407;
+ State = 421;
_localctx.e = expression();
_localctx.list.Add(_localctx.e.value);
- State = 415;
+ State = 429;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
- while (_la==T__49) {
+ while (_la==T__51) {
{
{
- State = 409;
- Match(T__49);
- State = 410;
+ State = 423;
+ Match(T__51);
+ State = 424;
_localctx.e = expression();
_localctx.list.Add(_localctx.e.value);
}
}
- State = 417;
+ State = 431;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
}
@@ -2890,35 +2966,35 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Set_itemsContext set_items() {
Set_itemsContext _localctx = new Set_itemsContext(Context, State);
- EnterRule(_localctx, 42, RULE_set_items);
+ EnterRule(_localctx, 44, RULE_set_items);
_localctx.list = new List();
int _la;
try {
EnterOuterAlt(_localctx, 1);
{
- State = 440;
+ State = 454;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -3209958205119528096L) != 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)) & 17317308137471L) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -3040000031319913086L) != 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)) & 34634616274943L) != 0)) {
{
- State = 425;
+ State = 439;
ErrorHandler.Sync(this);
switch (TokenStream.LA(1)) {
- case T__4:
- case T__5:
- case T__31:
+ case T__0:
+ case T__6:
+ case T__7:
case T__33:
- case T__43:
- case T__44:
+ case T__35:
case T__45:
case T__46:
case T__47:
case T__48:
- case T__51:
- case T__52:
+ case T__49:
+ case T__50:
case T__53:
+ case T__54:
case T__55:
- case T__56:
+ case T__57:
case T__59:
case T__61:
case T__62:
@@ -3088,23 +3164,24 @@ public Set_itemsContext set_items() {
case T__226:
case T__227:
case T__228:
+ case T__229:
case NUMBER:
case SPECIALSET:
case BOOLEAN:
case NAN:
case VARIABLE:
{
- State = 420;
+ State = 434;
_localctx.e = expression();
_localctx.list.Add(_localctx.e.value);
}
break;
- case T__7:
- case T__8:
+ case T__9:
+ case T__10:
{
- State = 423;
+ State = 437;
_la = TokenStream.LA(1);
- if ( !(_la==T__7 || _la==T__8) ) {
+ if ( !(_la==T__9 || _la==T__10) ) {
ErrorHandler.RecoverInline(this);
}
else {
@@ -3117,32 +3194,32 @@ public Set_itemsContext set_items() {
default:
throw new NoViableAltException(this);
}
- State = 437;
+ State = 451;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
- while (_la==T__49) {
+ while (_la==T__51) {
{
{
- State = 427;
- Match(T__49);
- State = 433;
+ State = 441;
+ Match(T__51);
+ State = 447;
ErrorHandler.Sync(this);
switch (TokenStream.LA(1)) {
- case T__4:
- case T__5:
- case T__31:
+ case T__0:
+ case T__6:
+ case T__7:
case T__33:
- case T__43:
- case T__44:
+ case T__35:
case T__45:
case T__46:
case T__47:
case T__48:
- case T__51:
- case T__52:
+ case T__49:
+ case T__50:
case T__53:
+ case T__54:
case T__55:
- case T__56:
+ case T__57:
case T__59:
case T__61:
case T__62:
@@ -3312,23 +3389,24 @@ public Set_itemsContext set_items() {
case T__226:
case T__227:
case T__228:
+ case T__229:
case NUMBER:
case SPECIALSET:
case BOOLEAN:
case NAN:
case VARIABLE:
{
- State = 428;
+ State = 442;
_localctx.e = expression();
_localctx.list.Add(_localctx.e.value);
}
break;
- case T__7:
- case T__8:
+ case T__9:
+ case T__10:
{
- State = 431;
+ State = 445;
_la = TokenStream.LA(1);
- if ( !(_la==T__7 || _la==T__8) ) {
+ if ( !(_la==T__9 || _la==T__10) ) {
ErrorHandler.RecoverInline(this);
}
else {
@@ -3343,7 +3421,7 @@ public Set_itemsContext set_items() {
}
}
}
- State = 439;
+ State = 453;
ErrorHandler.Sync(this);
_la = TokenStream.LA(1);
}
@@ -3393,16 +3471,16 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Interval_argumentsContext interval_arguments() {
Interval_argumentsContext _localctx = new Interval_argumentsContext(Context, State);
- EnterRule(_localctx, 44, RULE_interval_arguments);
+ EnterRule(_localctx, 46, RULE_interval_arguments);
try {
EnterOuterAlt(_localctx, 1);
{
- State = 442;
+ State = 456;
_localctx.from = expression();
_localctx.couple.from = _localctx.from.value;
- State = 444;
- Match(T__50);
- State = 445;
+ State = 458;
+ Match(T__52);
+ State = 459;
_localctx.to = expression();
_localctx.couple.to = _localctx.to.value;
}
@@ -3448,16 +3526,16 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public Cset_argumentsContext cset_arguments() {
Cset_argumentsContext _localctx = new Cset_argumentsContext(Context, State);
- EnterRule(_localctx, 46, RULE_cset_arguments);
+ EnterRule(_localctx, 48, RULE_cset_arguments);
try {
EnterOuterAlt(_localctx, 1);
{
- State = 448;
+ State = 462;
_localctx.variable = expression();
_localctx.couple.variable = _localctx.variable.value;
- State = 450;
- Match(T__42);
- State = 451;
+ State = 464;
+ Match(T__44);
+ State = 465;
_localctx.predicate = expression();
_localctx.couple.predicate = _localctx.predicate.value;
}
@@ -3529,31 +3607,31 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public AtomContext atom() {
AtomContext _localctx = new AtomContext(Context, State);
- EnterRule(_localctx, 48, RULE_atom);
+ EnterRule(_localctx, 50, RULE_atom);
try {
- State = 1362;
+ State = 1381;
ErrorHandler.Sync(this);
- switch ( Interpreter.AdaptivePredict(TokenStream,43,Context) ) {
+ switch ( Interpreter.AdaptivePredict(TokenStream,44,Context) ) {
case 1:
EnterOuterAlt(_localctx, 1);
{
- State = 454;
- Match(T__51);
+ State = 468;
+ Match(T__53);
_localctx.value = Entity.Number.Real.PositiveInfinity;
}
break;
case 2:
EnterOuterAlt(_localctx, 2);
{
- State = 456;
- Match(T__52);
+ State = 470;
+ Match(T__54);
_localctx.value = Entity.Number.Real.NegativeInfinity;
}
break;
case 3:
EnterOuterAlt(_localctx, 3);
{
- State = 458;
+ State = 472;
Match(NAN);
_localctx.value = Entity.Number.Real.NaN;
}
@@ -3561,7 +3639,7 @@ public AtomContext atom() {
case 4:
EnterOuterAlt(_localctx, 4);
{
- State = 460;
+ State = 474;
_localctx._NUMBER = Match(NUMBER);
_localctx.value = Entity.Number.Complex.Parse((_localctx._NUMBER!=null?_localctx._NUMBER.Text:null));
}
@@ -3569,7 +3647,7 @@ public AtomContext atom() {
case 5:
EnterOuterAlt(_localctx, 5);
{
- State = 462;
+ State = 476;
_localctx._BOOLEAN = Match(BOOLEAN);
_localctx.value = Entity.Boolean.Parse((_localctx._BOOLEAN!=null?_localctx._BOOLEAN.Text:null));
}
@@ -3577,7 +3655,7 @@ public AtomContext atom() {
case 6:
EnterOuterAlt(_localctx, 6);
{
- State = 464;
+ State = 478;
_localctx._SPECIALSET = Match(SPECIALSET);
_localctx.value = Entity.Set.SpecialSet.Create((_localctx._SPECIALSET!=null?_localctx._SPECIALSET.Text:null));
}
@@ -3585,7 +3663,7 @@ public AtomContext atom() {
case 7:
EnterOuterAlt(_localctx, 7);
{
- State = 466;
+ State = 480;
_localctx._VARIABLE = Match(VARIABLE);
// There is no set of natural numbers here, because the name means {0, 1, 2, ...} to
@@ -3602,21 +3680,21 @@ public AtomContext atom() {
case 8:
EnterOuterAlt(_localctx, 8);
{
- State = 468;
- Match(T__53);
- State = 469;
+ State = 482;
+ Match(T__55);
+ State = 483;
_localctx._expression = expression();
- State = 470;
- Match(T__54);
+ State = 484;
+ Match(T__56);
_localctx.value = _localctx._expression.value.Abs();
}
break;
case 9:
EnterOuterAlt(_localctx, 9);
{
- State = 473;
- Match(T__55);
- State = 474;
+ State = 487;
+ Match(T__57);
+ State = 488;
_localctx.p = atom();
_localctx.value = MathS.Sets.Card(_localctx.p.value);
}
@@ -3624,95 +3702,95 @@ public AtomContext atom() {
case 10:
EnterOuterAlt(_localctx, 10);
{
- State = 477;
- Match(T__56);
- State = 478;
+ State = 491;
+ Match(T__0);
+ State = 492;
_localctx._function_arguments = function_arguments();
- State = 479;
- Match(T__57);
+ State = 493;
+ Match(T__58);
_localctx.value = ParsingHelpers.TryBuildingMatrix(_localctx._function_arguments.list).T;
}
break;
case 11:
EnterOuterAlt(_localctx, 11);
{
- State = 482;
- Match(T__56);
- State = 483;
+ State = 496;
+ Match(T__0);
+ State = 497;
_localctx._function_arguments = function_arguments();
- State = 484;
- Match(T__58);
+ State = 498;
+ Match(T__1);
_localctx.value = ParsingHelpers.TryBuildingMatrix(_localctx._function_arguments.list);
}
break;
case 12:
EnterOuterAlt(_localctx, 12);
{
- State = 487;
- Match(T__31);
- State = 488;
+ State = 501;
+ Match(T__33);
+ State = 502;
_localctx._interval_arguments = interval_arguments();
- State = 489;
- Match(T__32);
+ State = 503;
+ Match(T__34);
_localctx.value = new Entity.Set.Interval(_localctx._interval_arguments.couple.from, false, _localctx._interval_arguments.couple.to, false);
}
break;
case 13:
EnterOuterAlt(_localctx, 13);
{
- State = 492;
- Match(T__56);
- State = 493;
+ State = 506;
+ Match(T__0);
+ State = 507;
_localctx._interval_arguments = interval_arguments();
- State = 494;
- Match(T__32);
+ State = 508;
+ Match(T__34);
_localctx.value = new Entity.Set.Interval(_localctx._interval_arguments.couple.from, true, _localctx._interval_arguments.couple.to, false);
}
break;
case 14:
EnterOuterAlt(_localctx, 14);
{
- State = 497;
- Match(T__56);
- State = 498;
+ State = 511;
+ Match(T__0);
+ State = 512;
_localctx._interval_arguments = interval_arguments();
- State = 499;
- Match(T__58);
+ State = 513;
+ Match(T__1);
_localctx.value = new Entity.Set.Interval(_localctx._interval_arguments.couple.from, true, _localctx._interval_arguments.couple.to, true);
}
break;
case 15:
EnterOuterAlt(_localctx, 15);
{
- State = 502;
- Match(T__31);
- State = 503;
+ State = 516;
+ Match(T__33);
+ State = 517;
_localctx._interval_arguments = interval_arguments();
- State = 504;
- Match(T__58);
+ State = 518;
+ Match(T__1);
_localctx.value = new Entity.Set.Interval(_localctx._interval_arguments.couple.from, false, _localctx._interval_arguments.couple.to, true);
}
break;
case 16:
EnterOuterAlt(_localctx, 16);
{
- State = 507;
- Match(T__31);
- State = 508;
+ State = 521;
+ Match(T__33);
+ State = 522;
_localctx._expression = expression();
- State = 509;
- Match(T__32);
+ State = 523;
+ Match(T__34);
_localctx.value = _localctx._expression.value;
}
break;
case 17:
EnterOuterAlt(_localctx, 17);
{
- State = 512;
+ State = 526;
Match(T__59);
- State = 513;
+ State = 527;
_localctx.cset_args = cset_arguments();
- State = 514;
+ State = 528;
Match(T__60);
_localctx.value = new ConditionalSet(_localctx.cset_args.couple.variable, _localctx.cset_args.couple.predicate);
}
@@ -3720,11 +3798,11 @@ public AtomContext atom() {
case 18:
EnterOuterAlt(_localctx, 18);
{
- State = 517;
+ State = 531;
Match(T__59);
- State = 518;
+ State = 532;
_localctx.items = set_items();
- State = 519;
+ State = 533;
Match(T__60);
_localctx.value = _localctx.items.list.Contains(null) ? AngouriMath.Core.PatternOperator.Set(_localctx.items.list) : new FiniteSet(_localctx.items.list.Cast());
}
@@ -3732,912 +3810,912 @@ public AtomContext atom() {
case 19:
EnterOuterAlt(_localctx, 19);
{
- State = 522;
+ State = 536;
Match(T__61);
- State = 523;
+ State = 537;
_localctx.args = function_arguments();
- State = 524;
- Match(T__32);
+ State = 538;
+ Match(T__34);
_localctx.value = Assert("log", (1, 2), _localctx.args.list.Count) ? MathS.Log(10, _localctx.args.list[0]) : MathS.Log(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 20:
EnterOuterAlt(_localctx, 20);
{
- State = 527;
+ State = 541;
Match(T__62);
- State = 528;
+ State = 542;
_localctx.args = function_arguments();
- State = 529;
- Match(T__32);
+ State = 543;
+ Match(T__34);
Assert("log10", 1, _localctx.args.list.Count); _localctx.value = MathS.Log(10, _localctx.args.list[0]);
}
break;
case 21:
EnterOuterAlt(_localctx, 21);
{
- State = 532;
+ State = 546;
Match(T__63);
- State = 533;
+ State = 547;
_localctx.args = function_arguments();
- State = 534;
- Match(T__32);
+ State = 548;
+ Match(T__34);
Assert("log2", 1, _localctx.args.list.Count); _localctx.value = MathS.Log(2, _localctx.args.list[0]);
}
break;
case 22:
EnterOuterAlt(_localctx, 22);
{
- State = 537;
+ State = 551;
Match(T__64);
- State = 538;
+ State = 552;
_localctx.args = function_arguments();
- State = 539;
- Match(T__32);
+ State = 553;
+ Match(T__34);
Assert("pow", 2, _localctx.args.list.Count); _localctx.value = MathS.Pow(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 23:
EnterOuterAlt(_localctx, 23);
{
- State = 542;
+ State = 556;
Match(T__65);
- State = 543;
+ State = 557;
_localctx.args = function_arguments();
- State = 544;
- Match(T__32);
+ State = 558;
+ Match(T__34);
Assert("sqrt", 1, _localctx.args.list.Count); _localctx.value = MathS.Sqrt(_localctx.args.list[0]);
}
break;
case 24:
EnterOuterAlt(_localctx, 24);
{
- State = 547;
+ State = 561;
Match(T__66);
- State = 548;
+ State = 562;
_localctx.args = function_arguments();
- State = 549;
- Match(T__32);
+ State = 563;
+ Match(T__34);
Assert("cbrt", 1, _localctx.args.list.Count); _localctx.value = MathS.Cbrt(_localctx.args.list[0]);
}
break;
case 25:
EnterOuterAlt(_localctx, 25);
{
- State = 552;
+ State = 566;
Match(T__67);
- State = 553;
+ State = 567;
_localctx.args = function_arguments();
- State = 554;
- Match(T__32);
+ State = 568;
+ Match(T__34);
Assert("sqr", 1, _localctx.args.list.Count); _localctx.value = MathS.Sqr(_localctx.args.list[0]);
}
break;
case 26:
EnterOuterAlt(_localctx, 26);
{
- State = 557;
+ State = 571;
Match(T__68);
- State = 558;
+ State = 572;
_localctx.args = function_arguments();
- State = 559;
- Match(T__32);
+ State = 573;
+ Match(T__34);
Assert("ln", 1, _localctx.args.list.Count); _localctx.value = MathS.Ln(_localctx.args.list[0]);
}
break;
case 27:
EnterOuterAlt(_localctx, 27);
{
- State = 562;
+ State = 576;
Match(T__69);
- State = 563;
+ State = 577;
_localctx.args = function_arguments();
- State = 564;
- Match(T__32);
+ State = 578;
+ Match(T__34);
Assert("exp", 1, _localctx.args.list.Count); _localctx.value = MathS.Pow(Entity.Constant.EulerIntrinsic, _localctx.args.list[0]);
}
break;
case 28:
EnterOuterAlt(_localctx, 28);
{
- State = 567;
+ State = 581;
Match(T__70);
- State = 568;
+ State = 582;
_localctx.args = function_arguments();
- State = 569;
- Match(T__32);
+ State = 583;
+ Match(T__34);
Assert("sin", 1, _localctx.args.list.Count); _localctx.value = MathS.Sin(_localctx.args.list[0]);
}
break;
case 29:
EnterOuterAlt(_localctx, 29);
{
- State = 572;
+ State = 586;
Match(T__71);
- State = 573;
+ State = 587;
_localctx.args = function_arguments();
- State = 574;
- Match(T__32);
+ State = 588;
+ Match(T__34);
Assert("cos", 1, _localctx.args.list.Count); _localctx.value = MathS.Cos(_localctx.args.list[0]);
}
break;
case 30:
EnterOuterAlt(_localctx, 30);
{
- State = 577;
+ State = 591;
Match(T__72);
- State = 578;
+ State = 592;
_localctx.args = function_arguments();
- State = 579;
- Match(T__32);
+ State = 593;
+ Match(T__34);
Assert("tan", 1, _localctx.args.list.Count); _localctx.value = MathS.Tan(_localctx.args.list[0]);
}
break;
case 31:
EnterOuterAlt(_localctx, 31);
{
- State = 582;
+ State = 596;
Match(T__73);
- State = 583;
+ State = 597;
_localctx.args = function_arguments();
- State = 584;
- Match(T__32);
+ State = 598;
+ Match(T__34);
Assert("cotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Cotan(_localctx.args.list[0]);
}
break;
case 32:
EnterOuterAlt(_localctx, 32);
{
- State = 587;
+ State = 601;
Match(T__74);
- State = 588;
+ State = 602;
_localctx.args = function_arguments();
- State = 589;
- Match(T__32);
+ State = 603;
+ Match(T__34);
Assert("cotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Cotan(_localctx.args.list[0]);
}
break;
case 33:
EnterOuterAlt(_localctx, 33);
{
- State = 592;
+ State = 606;
Match(T__75);
- State = 593;
+ State = 607;
_localctx.args = function_arguments();
- State = 594;
- Match(T__32);
+ State = 608;
+ Match(T__34);
Assert("sec", 1, _localctx.args.list.Count); _localctx.value = MathS.Sec(_localctx.args.list[0]);
}
break;
case 34:
EnterOuterAlt(_localctx, 34);
{
- State = 597;
+ State = 611;
Match(T__76);
- State = 598;
+ State = 612;
_localctx.args = function_arguments();
- State = 599;
- Match(T__32);
+ State = 613;
+ Match(T__34);
Assert("cosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Cosec(_localctx.args.list[0]);
}
break;
case 35:
EnterOuterAlt(_localctx, 35);
{
- State = 602;
+ State = 616;
Match(T__77);
- State = 603;
+ State = 617;
_localctx.args = function_arguments();
- State = 604;
- Match(T__32);
+ State = 618;
+ Match(T__34);
Assert("cosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Cosec(_localctx.args.list[0]);
}
break;
case 36:
EnterOuterAlt(_localctx, 36);
{
- State = 607;
+ State = 621;
Match(T__78);
- State = 608;
+ State = 622;
_localctx.args = function_arguments();
- State = 609;
- Match(T__32);
+ State = 623;
+ Match(T__34);
Assert("arcsin", 1, _localctx.args.list.Count); _localctx.value = MathS.Arcsin(_localctx.args.list[0]);
}
break;
case 37:
EnterOuterAlt(_localctx, 37);
{
- State = 612;
+ State = 626;
Match(T__79);
- State = 613;
+ State = 627;
_localctx.args = function_arguments();
- State = 614;
- Match(T__32);
+ State = 628;
+ Match(T__34);
Assert("arccos", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccos(_localctx.args.list[0]);
}
break;
case 38:
EnterOuterAlt(_localctx, 38);
{
- State = 617;
+ State = 631;
Match(T__80);
- State = 618;
+ State = 632;
_localctx.args = function_arguments();
- State = 619;
- Match(T__32);
+ State = 633;
+ Match(T__34);
Assert("arctan", 1, _localctx.args.list.Count); _localctx.value = MathS.Arctan(_localctx.args.list[0]);
}
break;
case 39:
EnterOuterAlt(_localctx, 39);
{
- State = 622;
+ State = 636;
Match(T__81);
- State = 623;
+ State = 637;
_localctx.args = function_arguments();
- State = 624;
- Match(T__32);
+ State = 638;
+ Match(T__34);
Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccotan(_localctx.args.list[0]);
}
break;
case 40:
EnterOuterAlt(_localctx, 40);
{
- State = 627;
+ State = 641;
Match(T__82);
- State = 628;
+ State = 642;
_localctx.args = function_arguments();
- State = 629;
- Match(T__32);
+ State = 643;
+ Match(T__34);
Assert("arcsec", 1, _localctx.args.list.Count); _localctx.value = MathS.Arcsec(_localctx.args.list[0]);
}
break;
case 41:
EnterOuterAlt(_localctx, 41);
{
- State = 632;
+ State = 646;
Match(T__83);
- State = 633;
+ State = 647;
_localctx.args = function_arguments();
- State = 634;
- Match(T__32);
+ State = 648;
+ Match(T__34);
Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccosec(_localctx.args.list[0]);
}
break;
case 42:
EnterOuterAlt(_localctx, 42);
{
- State = 637;
+ State = 651;
Match(T__84);
- State = 638;
+ State = 652;
_localctx.args = function_arguments();
- State = 639;
- Match(T__32);
+ State = 653;
+ Match(T__34);
Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccosec(_localctx.args.list[0]);
}
break;
case 43:
EnterOuterAlt(_localctx, 43);
{
- State = 642;
+ State = 656;
Match(T__85);
- State = 643;
+ State = 657;
_localctx.args = function_arguments();
- State = 644;
- Match(T__32);
+ State = 658;
+ Match(T__34);
Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccosec(_localctx.args.list[0]);
}
break;
case 44:
EnterOuterAlt(_localctx, 44);
{
- State = 647;
+ State = 661;
Match(T__86);
- State = 648;
+ State = 662;
_localctx.args = function_arguments();
- State = 649;
- Match(T__32);
+ State = 663;
+ Match(T__34);
Assert("arcsin", 1, _localctx.args.list.Count); _localctx.value = MathS.Arcsin(_localctx.args.list[0]);
}
break;
case 45:
EnterOuterAlt(_localctx, 45);
{
- State = 652;
+ State = 666;
Match(T__87);
- State = 653;
+ State = 667;
_localctx.args = function_arguments();
- State = 654;
- Match(T__32);
+ State = 668;
+ Match(T__34);
Assert("arccos", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccos(_localctx.args.list[0]);
}
break;
case 46:
EnterOuterAlt(_localctx, 46);
{
- State = 657;
+ State = 671;
Match(T__88);
- State = 658;
+ State = 672;
_localctx.args = function_arguments();
- State = 659;
- Match(T__32);
+ State = 673;
+ Match(T__34);
Assert("arctan", 1, _localctx.args.list.Count); _localctx.value = MathS.Arctan(_localctx.args.list[0]);
}
break;
case 47:
EnterOuterAlt(_localctx, 47);
{
- State = 662;
+ State = 676;
Match(T__89);
- State = 663;
+ State = 677;
_localctx.args = function_arguments();
- State = 664;
- Match(T__32);
+ State = 678;
+ Match(T__34);
Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccotan(_localctx.args.list[0]);
}
break;
case 48:
EnterOuterAlt(_localctx, 48);
{
- State = 667;
+ State = 681;
Match(T__90);
- State = 668;
+ State = 682;
_localctx.args = function_arguments();
- State = 669;
- Match(T__32);
+ State = 683;
+ Match(T__34);
Assert("arcsec", 1, _localctx.args.list.Count); _localctx.value = MathS.Arcsec(_localctx.args.list[0]);
}
break;
case 49:
EnterOuterAlt(_localctx, 49);
{
- State = 672;
+ State = 686;
Match(T__91);
- State = 673;
+ State = 687;
_localctx.args = function_arguments();
- State = 674;
- Match(T__32);
+ State = 688;
+ Match(T__34);
Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccosec(_localctx.args.list[0]);
}
break;
case 50:
EnterOuterAlt(_localctx, 50);
{
- State = 677;
+ State = 691;
Match(T__92);
- State = 678;
+ State = 692;
_localctx.args = function_arguments();
- State = 679;
- Match(T__32);
+ State = 693;
+ Match(T__34);
Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccotan(_localctx.args.list[0]);
}
break;
case 51:
EnterOuterAlt(_localctx, 51);
{
- State = 682;
+ State = 696;
Match(T__93);
- State = 683;
+ State = 697;
_localctx.args = function_arguments();
- State = 684;
- Match(T__32);
+ State = 698;
+ Match(T__34);
Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccotan(_localctx.args.list[0]);
}
break;
case 52:
EnterOuterAlt(_localctx, 52);
{
- State = 687;
+ State = 701;
Match(T__94);
- State = 688;
+ State = 702;
_localctx.args = function_arguments();
- State = 689;
- Match(T__32);
+ State = 703;
+ Match(T__34);
Assert("sin", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Sinh(_localctx.args.list[0]);
}
break;
case 53:
EnterOuterAlt(_localctx, 53);
{
- State = 692;
+ State = 706;
Match(T__95);
- State = 693;
+ State = 707;
_localctx.args = function_arguments();
- State = 694;
- Match(T__32);
+ State = 708;
+ Match(T__34);
Assert("sin", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Sinh(_localctx.args.list[0]);
}
break;
case 54:
EnterOuterAlt(_localctx, 54);
{
- State = 697;
+ State = 711;
Match(T__96);
- State = 698;
+ State = 712;
_localctx.args = function_arguments();
- State = 699;
- Match(T__32);
+ State = 713;
+ Match(T__34);
Assert("cos", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Cosh(_localctx.args.list[0]);
}
break;
case 55:
EnterOuterAlt(_localctx, 55);
{
- State = 702;
+ State = 716;
Match(T__97);
- State = 703;
+ State = 717;
_localctx.args = function_arguments();
- State = 704;
- Match(T__32);
+ State = 718;
+ Match(T__34);
Assert("cos", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Cosh(_localctx.args.list[0]);
}
break;
case 56:
EnterOuterAlt(_localctx, 56);
{
- State = 707;
+ State = 721;
Match(T__98);
- State = 708;
+ State = 722;
_localctx.args = function_arguments();
- State = 709;
- Match(T__32);
+ State = 723;
+ Match(T__34);
Assert("tan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Tanh(_localctx.args.list[0]);
}
break;
case 57:
EnterOuterAlt(_localctx, 57);
{
- State = 712;
+ State = 726;
Match(T__99);
- State = 713;
+ State = 727;
_localctx.args = function_arguments();
- State = 714;
- Match(T__32);
+ State = 728;
+ Match(T__34);
Assert("tan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Tanh(_localctx.args.list[0]);
}
break;
case 58:
EnterOuterAlt(_localctx, 58);
{
- State = 717;
+ State = 731;
Match(T__100);
- State = 718;
+ State = 732;
_localctx.args = function_arguments();
- State = 719;
- Match(T__32);
+ State = 733;
+ Match(T__34);
Assert("cotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Cotanh(_localctx.args.list[0]);
}
break;
case 59:
EnterOuterAlt(_localctx, 59);
{
- State = 722;
+ State = 736;
Match(T__101);
- State = 723;
+ State = 737;
_localctx.args = function_arguments();
- State = 724;
- Match(T__32);
+ State = 738;
+ Match(T__34);
Assert("cotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Cotanh(_localctx.args.list[0]);
}
break;
case 60:
EnterOuterAlt(_localctx, 60);
{
- State = 727;
+ State = 741;
Match(T__102);
- State = 728;
+ State = 742;
_localctx.args = function_arguments();
- State = 729;
- Match(T__32);
+ State = 743;
+ Match(T__34);
Assert("cotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Cotanh(_localctx.args.list[0]);
}
break;
case 61:
EnterOuterAlt(_localctx, 61);
{
- State = 732;
+ State = 746;
Match(T__103);
- State = 733;
+ State = 747;
_localctx.args = function_arguments();
- State = 734;
- Match(T__32);
+ State = 748;
+ Match(T__34);
Assert("sec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Sech(_localctx.args.list[0]);
}
break;
case 62:
EnterOuterAlt(_localctx, 62);
{
- State = 737;
+ State = 751;
Match(T__104);
- State = 738;
+ State = 752;
_localctx.args = function_arguments();
- State = 739;
- Match(T__32);
+ State = 753;
+ Match(T__34);
Assert("sec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Sech(_localctx.args.list[0]);
}
break;
case 63:
EnterOuterAlt(_localctx, 63);
{
- State = 742;
+ State = 756;
Match(T__105);
- State = 743;
+ State = 757;
_localctx.args = function_arguments();
- State = 744;
- Match(T__32);
+ State = 758;
+ Match(T__34);
Assert("cosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Cosech(_localctx.args.list[0]);
}
break;
case 64:
EnterOuterAlt(_localctx, 64);
{
- State = 747;
+ State = 761;
Match(T__106);
- State = 748;
+ State = 762;
_localctx.args = function_arguments();
- State = 749;
- Match(T__32);
+ State = 763;
+ Match(T__34);
Assert("cosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Cosech(_localctx.args.list[0]);
}
break;
case 65:
EnterOuterAlt(_localctx, 65);
{
- State = 752;
+ State = 766;
Match(T__107);
- State = 753;
+ State = 767;
_localctx.args = function_arguments();
- State = 754;
- Match(T__32);
+ State = 768;
+ Match(T__34);
Assert("arcsin", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arsinh(_localctx.args.list[0]);
}
break;
case 66:
EnterOuterAlt(_localctx, 66);
{
- State = 757;
+ State = 771;
Match(T__108);
- State = 758;
+ State = 772;
_localctx.args = function_arguments();
- State = 759;
- Match(T__32);
+ State = 773;
+ Match(T__34);
Assert("arcsin", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arsinh(_localctx.args.list[0]);
}
break;
case 67:
EnterOuterAlt(_localctx, 67);
{
- State = 762;
+ State = 776;
Match(T__109);
- State = 763;
+ State = 777;
_localctx.args = function_arguments();
- State = 764;
- Match(T__32);
+ State = 778;
+ Match(T__34);
Assert("arcsin", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arsinh(_localctx.args.list[0]);
}
break;
case 68:
EnterOuterAlt(_localctx, 68);
{
- State = 767;
+ State = 781;
Match(T__110);
- State = 768;
+ State = 782;
_localctx.args = function_arguments();
- State = 769;
- Match(T__32);
+ State = 783;
+ Match(T__34);
throw new UnrecognizedFunctionParseException("there is no function arcsinh: the inverse hyperbolic functions are area functions, not arc functions, so the inverse hyperbolic sine is arsinh, asinh or arsh");
}
break;
case 69:
EnterOuterAlt(_localctx, 69);
{
- State = 772;
+ State = 786;
Match(T__111);
- State = 773;
+ State = 787;
_localctx.args = function_arguments();
- State = 774;
- Match(T__32);
+ State = 788;
+ Match(T__34);
Assert("arccos", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcosh(_localctx.args.list[0]);
}
break;
case 70:
EnterOuterAlt(_localctx, 70);
{
- State = 777;
+ State = 791;
Match(T__112);
- State = 778;
+ State = 792;
_localctx.args = function_arguments();
- State = 779;
- Match(T__32);
+ State = 793;
+ Match(T__34);
Assert("arccos", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcosh(_localctx.args.list[0]);
}
break;
case 71:
EnterOuterAlt(_localctx, 71);
{
- State = 782;
+ State = 796;
Match(T__113);
- State = 783;
+ State = 797;
_localctx.args = function_arguments();
- State = 784;
- Match(T__32);
+ State = 798;
+ Match(T__34);
Assert("arccos", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcosh(_localctx.args.list[0]);
}
break;
case 72:
EnterOuterAlt(_localctx, 72);
{
- State = 787;
+ State = 801;
Match(T__114);
- State = 788;
+ State = 802;
_localctx.args = function_arguments();
- State = 789;
- Match(T__32);
+ State = 803;
+ Match(T__34);
throw new UnrecognizedFunctionParseException("there is no function arccosh: the inverse hyperbolic functions are area functions, not arc functions, so the inverse hyperbolic cosine is arcosh, acosh or arch");
}
break;
case 73:
EnterOuterAlt(_localctx, 73);
{
- State = 792;
+ State = 806;
Match(T__115);
- State = 793;
+ State = 807;
_localctx.args = function_arguments();
- State = 794;
- Match(T__32);
+ State = 808;
+ Match(T__34);
Assert("arctan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Artanh(_localctx.args.list[0]);
}
break;
case 74:
EnterOuterAlt(_localctx, 74);
{
- State = 797;
+ State = 811;
Match(T__116);
- State = 798;
+ State = 812;
_localctx.args = function_arguments();
- State = 799;
- Match(T__32);
+ State = 813;
+ Match(T__34);
Assert("arctan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Artanh(_localctx.args.list[0]);
}
break;
case 75:
EnterOuterAlt(_localctx, 75);
{
- State = 802;
+ State = 816;
Match(T__117);
- State = 803;
+ State = 817;
_localctx.args = function_arguments();
- State = 804;
- Match(T__32);
+ State = 818;
+ Match(T__34);
Assert("arctan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Artanh(_localctx.args.list[0]);
}
break;
case 76:
EnterOuterAlt(_localctx, 76);
{
- State = 807;
+ State = 821;
Match(T__118);
- State = 808;
+ State = 822;
_localctx.args = function_arguments();
- State = 809;
- Match(T__32);
+ State = 823;
+ Match(T__34);
throw new UnrecognizedFunctionParseException("there is no function arctanh: the inverse hyperbolic functions are area functions, not arc functions, so the inverse hyperbolic tangent is artanh, atanh or arth");
}
break;
case 77:
EnterOuterAlt(_localctx, 77);
{
- State = 812;
+ State = 826;
Match(T__119);
- State = 813;
+ State = 827;
_localctx.args = function_arguments();
- State = 814;
- Match(T__32);
+ State = 828;
+ Match(T__34);
Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcotanh(_localctx.args.list[0]);
}
break;
case 78:
EnterOuterAlt(_localctx, 78);
{
- State = 817;
+ State = 831;
Match(T__120);
- State = 818;
+ State = 832;
_localctx.args = function_arguments();
- State = 819;
- Match(T__32);
+ State = 833;
+ Match(T__34);
Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcotanh(_localctx.args.list[0]);
}
break;
case 79:
EnterOuterAlt(_localctx, 79);
{
- State = 822;
+ State = 836;
Match(T__121);
- State = 823;
+ State = 837;
_localctx.args = function_arguments();
- State = 824;
- Match(T__32);
+ State = 838;
+ Match(T__34);
Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcotanh(_localctx.args.list[0]);
}
break;
case 80:
EnterOuterAlt(_localctx, 80);
{
- State = 827;
+ State = 841;
Match(T__122);
- State = 828;
+ State = 842;
_localctx.args = function_arguments();
- State = 829;
- Match(T__32);
+ State = 843;
+ Match(T__34);
Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcotanh(_localctx.args.list[0]);
}
break;
case 81:
EnterOuterAlt(_localctx, 81);
{
- State = 832;
+ State = 846;
Match(T__123);
- State = 833;
+ State = 847;
_localctx.args = function_arguments();
- State = 834;
- Match(T__32);
+ State = 848;
+ Match(T__34);
Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcotanh(_localctx.args.list[0]);
}
break;
case 82:
EnterOuterAlt(_localctx, 82);
{
- State = 837;
+ State = 851;
Match(T__124);
- State = 838;
+ State = 852;
_localctx.args = function_arguments();
- State = 839;
- Match(T__32);
+ State = 853;
+ Match(T__34);
throw new UnrecognizedFunctionParseException("there is no function arccotanh: the inverse hyperbolic functions are area functions, not arc functions, so the inverse hyperbolic cotangent is arcotanh, acotanh, arcoth, acoth or arcth");
}
break;
case 83:
EnterOuterAlt(_localctx, 83);
{
- State = 842;
+ State = 856;
Match(T__125);
- State = 843;
+ State = 857;
_localctx.args = function_arguments();
- State = 844;
- Match(T__32);
+ State = 858;
+ Match(T__34);
Assert("arcsec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arsech(_localctx.args.list[0]);
}
break;
case 84:
EnterOuterAlt(_localctx, 84);
{
- State = 847;
+ State = 861;
Match(T__126);
- State = 848;
+ State = 862;
_localctx.args = function_arguments();
- State = 849;
- Match(T__32);
+ State = 863;
+ Match(T__34);
Assert("arcsec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arsech(_localctx.args.list[0]);
}
break;
case 85:
EnterOuterAlt(_localctx, 85);
{
- State = 852;
+ State = 866;
Match(T__127);
- State = 853;
+ State = 867;
_localctx.args = function_arguments();
- State = 854;
- Match(T__32);
+ State = 868;
+ Match(T__34);
Assert("arcsec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arsech(_localctx.args.list[0]);
}
break;
case 86:
EnterOuterAlt(_localctx, 86);
{
- State = 857;
+ State = 871;
Match(T__128);
- State = 858;
+ State = 872;
_localctx.args = function_arguments();
- State = 859;
- Match(T__32);
+ State = 873;
+ Match(T__34);
throw new UnrecognizedFunctionParseException("there is no function arcsech: the inverse hyperbolic functions are area functions, not arc functions, so the inverse hyperbolic secant is arsech, asech or arsch");
}
break;
case 87:
EnterOuterAlt(_localctx, 87);
{
- State = 862;
+ State = 876;
Match(T__129);
- State = 863;
+ State = 877;
_localctx.args = function_arguments();
- State = 864;
- Match(T__32);
+ State = 878;
+ Match(T__34);
Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcosech(_localctx.args.list[0]);
}
break;
case 88:
EnterOuterAlt(_localctx, 88);
{
- State = 867;
+ State = 881;
Match(T__130);
- State = 868;
+ State = 882;
_localctx.args = function_arguments();
- State = 869;
- Match(T__32);
+ State = 883;
+ Match(T__34);
Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcosech(_localctx.args.list[0]);
}
break;
case 89:
EnterOuterAlt(_localctx, 89);
{
- State = 872;
+ State = 886;
Match(T__131);
- State = 873;
+ State = 887;
_localctx.args = function_arguments();
- State = 874;
- Match(T__32);
+ State = 888;
+ Match(T__34);
Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcosech(_localctx.args.list[0]);
}
break;
case 90:
EnterOuterAlt(_localctx, 90);
{
- State = 877;
+ State = 891;
Match(T__132);
- State = 878;
+ State = 892;
_localctx.args = function_arguments();
- State = 879;
- Match(T__32);
+ State = 893;
+ Match(T__34);
throw new UnrecognizedFunctionParseException("there is no function arccosech: the inverse hyperbolic functions are area functions, not arc functions, so the inverse hyperbolic cosecant is arcosech, acosech, arcsch or acsch");
}
break;
case 91:
EnterOuterAlt(_localctx, 91);
{
- State = 882;
+ State = 896;
Match(T__133);
- State = 883;
+ State = 897;
_localctx.args = function_arguments();
- State = 884;
- Match(T__32);
+ State = 898;
+ Match(T__34);
Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcosech(_localctx.args.list[0]);
}
break;
case 92:
EnterOuterAlt(_localctx, 92);
{
- State = 887;
+ State = 901;
Match(T__134);
- State = 888;
+ State = 902;
_localctx.args = function_arguments();
- State = 889;
- Match(T__32);
+ State = 903;
+ Match(T__34);
Assert("factorial", 1, _localctx.args.list.Count); _localctx.value = MathS.Factorial(_localctx.args.list[0]);
}
break;
case 93:
EnterOuterAlt(_localctx, 93);
{
- State = 892;
+ State = 906;
Match(T__135);
- State = 893;
+ State = 907;
_localctx.args = function_arguments();
- State = 894;
- Match(T__32);
+ State = 908;
+ Match(T__34);
if (_localctx.args.list.Count == 2) _localctx.value = MathS.IncompleteGamma(_localctx.args.list[0], _localctx.args.list[1]); else { Assert("gamma", 1, _localctx.args.list.Count); _localctx.value = MathS.Gamma(_localctx.args.list[0]); }
}
break;
case 94:
EnterOuterAlt(_localctx, 94);
{
- State = 897;
+ State = 911;
Match(T__136);
- State = 898;
+ State = 912;
_localctx.args = function_arguments();
- State = 899;
- Match(T__32);
+ State = 913;
+ Match(T__34);
if (Assert("derivative", (3, 2), _localctx.args.list.Count))
{
@@ -4654,12 +4732,12 @@ public AtomContext atom() {
case 95:
EnterOuterAlt(_localctx, 95);
{
- State = 902;
+ State = 916;
Match(T__137);
- State = 903;
+ State = 917;
_localctx.args = function_arguments();
- State = 904;
- Match(T__32);
+ State = 918;
+ Match(T__34);
if (Assert("integral", (4, 2), _localctx.args.list.Count))
{
@@ -4676,1056 +4754,1068 @@ public AtomContext atom() {
case 96:
EnterOuterAlt(_localctx, 96);
{
- State = 907;
+ State = 921;
Match(T__138);
- State = 908;
+ State = 922;
_localctx.args = function_arguments();
- State = 909;
- Match(T__32);
+ State = 923;
+ Match(T__34);
Assert("limit", 3, _localctx.args.list.Count); _localctx.value = MathS.Limit(_localctx.args.list[0], _localctx.args.list[1], _localctx.args.list[2]);
}
break;
case 97:
EnterOuterAlt(_localctx, 97);
{
- State = 912;
+ State = 926;
Match(T__139);
- State = 913;
+ State = 927;
_localctx.args = function_arguments();
- State = 914;
- Match(T__32);
+ State = 928;
+ Match(T__34);
Assert("limitleft", 3, _localctx.args.list.Count); _localctx.value = MathS.Limit(_localctx.args.list[0], _localctx.args.list[1], _localctx.args.list[2], AngouriMath.Core.ApproachFrom.Left);
}
break;
case 98:
EnterOuterAlt(_localctx, 98);
{
- State = 917;
+ State = 931;
Match(T__140);
- State = 918;
+ State = 932;
_localctx.args = function_arguments();
- State = 919;
- Match(T__32);
+ State = 933;
+ Match(T__34);
Assert("limitright", 3, _localctx.args.list.Count); _localctx.value = MathS.Limit(_localctx.args.list[0], _localctx.args.list[1], _localctx.args.list[2], AngouriMath.Core.ApproachFrom.Right);
}
break;
case 99:
EnterOuterAlt(_localctx, 99);
{
- State = 922;
+ State = 936;
Match(T__141);
- State = 923;
+ State = 937;
_localctx.args = function_arguments();
- State = 924;
- Match(T__32);
+ State = 938;
+ Match(T__34);
if (_localctx.args.list.Count == 2 && AngouriMath.Functions.ExtremumOverSet.AsRange(_localctx.args.list[1]) is var (sumVar, sumOver)) _localctx.value = MathS.Sum(_localctx.args.list[0], sumVar, sumOver); else { Assert("sum", 4, _localctx.args.list.Count); _localctx.value = MathS.Sum(_localctx.args.list[0], _localctx.args.list[1], _localctx.args.list[2], _localctx.args.list[3]); }
}
break;
case 100:
EnterOuterAlt(_localctx, 100);
{
- State = 927;
+ State = 941;
Match(T__142);
- State = 928;
+ State = 942;
_localctx.args = function_arguments();
- State = 929;
- Match(T__32);
+ State = 943;
+ Match(T__34);
Assert("product", 4, _localctx.args.list.Count); _localctx.value = MathS.Product(_localctx.args.list[0], _localctx.args.list[1], _localctx.args.list[2], _localctx.args.list[3]);
}
break;
case 101:
EnterOuterAlt(_localctx, 101);
{
- State = 932;
+ State = 946;
Match(T__143);
- State = 933;
+ State = 947;
_localctx.args = function_arguments();
- State = 934;
- Match(T__32);
+ State = 948;
+ Match(T__34);
Assert("signum", 1, _localctx.args.list.Count); _localctx.value = MathS.Signum(_localctx.args.list[0]);
}
break;
case 102:
EnterOuterAlt(_localctx, 102);
{
- State = 937;
+ State = 951;
Match(T__144);
- State = 938;
+ State = 952;
_localctx.args = function_arguments();
- State = 939;
- Match(T__32);
+ State = 953;
+ Match(T__34);
Assert("sgn", 1, _localctx.args.list.Count); _localctx.value = MathS.Signum(_localctx.args.list[0]);
}
break;
case 103:
EnterOuterAlt(_localctx, 103);
{
- State = 942;
+ State = 956;
Match(T__145);
- State = 943;
+ State = 957;
_localctx.args = function_arguments();
- State = 944;
- Match(T__32);
+ State = 958;
+ Match(T__34);
Assert("sign", 1, _localctx.args.list.Count); _localctx.value = MathS.Signum(_localctx.args.list[0]);
}
break;
case 104:
EnterOuterAlt(_localctx, 104);
{
- State = 947;
+ State = 961;
Match(T__146);
- State = 948;
+ State = 962;
_localctx.args = function_arguments();
- State = 949;
- Match(T__32);
+ State = 963;
+ Match(T__34);
Assert("abs", 1, _localctx.args.list.Count); _localctx.value = MathS.Abs(_localctx.args.list[0]);
}
break;
case 105:
EnterOuterAlt(_localctx, 105);
{
- State = 952;
+ State = 966;
Match(T__147);
- State = 953;
+ State = 967;
_localctx.args = function_arguments();
- State = 954;
- Match(T__32);
+ State = 968;
+ Match(T__34);
Assert("phi", 1, _localctx.args.list.Count); _localctx.value = MathS.NumberTheory.Phi(_localctx.args.list[0]);
}
break;
case 106:
EnterOuterAlt(_localctx, 106);
{
- State = 957;
+ State = 971;
Match(T__148);
- State = 958;
+ State = 972;
_localctx.args = function_arguments();
- State = 959;
- Match(T__32);
+ State = 973;
+ Match(T__34);
Assert("prime", 1, _localctx.args.list.Count); _localctx.value = MathS.NumberTheory.Prime(_localctx.args.list[0]);
}
break;
case 107:
EnterOuterAlt(_localctx, 107);
{
- State = 962;
+ State = 976;
Match(T__149);
- State = 963;
+ State = 977;
_localctx.args = function_arguments();
- State = 964;
- Match(T__32);
+ State = 978;
+ Match(T__34);
Assert("valuation", 2, _localctx.args.list.Count); _localctx.value = MathS.NumberTheory.Valuation(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 108:
EnterOuterAlt(_localctx, 108);
{
- State = 967;
+ State = 981;
Match(T__150);
- State = 968;
+ State = 982;
_localctx.args = function_arguments();
- State = 969;
- Match(T__32);
+ State = 983;
+ Match(T__34);
Assert("mobius", 1, _localctx.args.list.Count); _localctx.value = MathS.NumberTheory.Mobius(_localctx.args.list[0]);
}
break;
case 109:
EnterOuterAlt(_localctx, 109);
{
- State = 972;
+ State = 986;
Match(T__151);
- State = 973;
+ State = 987;
_localctx.args = function_arguments();
- State = 974;
- Match(T__32);
+ State = 988;
+ Match(T__34);
Assert("moebiusmu", 1, _localctx.args.list.Count); _localctx.value = MathS.NumberTheory.Mobius(_localctx.args.list[0]);
}
break;
case 110:
EnterOuterAlt(_localctx, 110);
{
- State = 977;
+ State = 991;
Match(T__152);
- State = 978;
+ State = 992;
_localctx.args = function_arguments();
- State = 979;
- Match(T__32);
+ State = 993;
+ Match(T__34);
Assert("divisorsigma", 2, _localctx.args.list.Count); _localctx.value = MathS.NumberTheory.DivisorSigma(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 111:
EnterOuterAlt(_localctx, 111);
{
- State = 982;
+ State = 996;
Match(T__153);
- State = 983;
+ State = 997;
_localctx.args = function_arguments();
- State = 984;
- Match(T__32);
+ State = 998;
+ Match(T__34);
Assert("primenu", 1, _localctx.args.list.Count); _localctx.value = MathS.NumberTheory.PrimeNu(_localctx.args.list[0]);
}
break;
case 112:
EnterOuterAlt(_localctx, 112);
{
- State = 987;
+ State = 1001;
Match(T__154);
- State = 988;
+ State = 1002;
_localctx.args = function_arguments();
- State = 989;
- Match(T__32);
+ State = 1003;
+ Match(T__34);
Assert("primeomega", 1, _localctx.args.list.Count); _localctx.value = MathS.NumberTheory.PrimeOmega(_localctx.args.list[0]);
}
break;
case 113:
EnterOuterAlt(_localctx, 113);
{
- State = 992;
+ State = 1006;
Match(T__155);
- State = 993;
+ State = 1007;
_localctx.args = function_arguments();
- State = 994;
- Match(T__32);
+ State = 1008;
+ Match(T__34);
Assert("primepi", 1, _localctx.args.list.Count); _localctx.value = MathS.NumberTheory.PrimePi(_localctx.args.list[0]);
}
break;
case 114:
EnterOuterAlt(_localctx, 114);
{
- State = 997;
+ State = 1011;
Match(T__156);
- State = 998;
+ State = 1012;
_localctx.args = function_arguments();
- State = 999;
- Match(T__32);
+ State = 1013;
+ Match(T__34);
Assert("card", 1, _localctx.args.list.Count); _localctx.value = MathS.Sets.Card(_localctx.args.list[0]);
}
break;
case 115:
EnterOuterAlt(_localctx, 115);
{
- State = 1002;
+ State = 1016;
Match(T__157);
- State = 1003;
+ State = 1017;
_localctx.args = function_arguments();
- State = 1004;
- Match(T__32);
+ State = 1018;
+ Match(T__34);
Assert("powerset", 1, _localctx.args.list.Count); _localctx.value = MathS.Sets.PowerSet(_localctx.args.list[0]);
}
break;
case 116:
EnterOuterAlt(_localctx, 116);
{
- State = 1007;
+ State = 1021;
Match(T__158);
- State = 1008;
+ State = 1022;
_localctx.args = function_arguments();
- State = 1009;
- Match(T__32);
+ State = 1023;
+ Match(T__34);
Assert("union", 2, _localctx.args.list.Count); _localctx.value = _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } unionRange ? MathS.Sets.IndexedUnion(_localctx.args.list[0], unionRange.Element, unionRange.SupSet) : throw new InvalidArgumentParseException("union expects its second argument to say which name ranges over which set, as in union(A_i, i in I)");
}
break;
case 117:
EnterOuterAlt(_localctx, 117);
{
- State = 1012;
+ State = 1026;
Match(T__159);
- State = 1013;
+ State = 1027;
_localctx.args = function_arguments();
- State = 1014;
- Match(T__32);
+ State = 1028;
+ Match(T__34);
Assert("intersection", 2, _localctx.args.list.Count); _localctx.value = _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } intersectionRange ? MathS.Sets.IndexedIntersection(_localctx.args.list[0], intersectionRange.Element, intersectionRange.SupSet) : throw new InvalidArgumentParseException("intersection expects its second argument to say which name ranges over which set, as in intersection(A_i, i in I)");
}
break;
case 118:
EnterOuterAlt(_localctx, 118);
{
- State = 1017;
+ State = 1031;
Match(T__160);
- State = 1018;
+ State = 1032;
_localctx.args = function_arguments();
- State = 1019;
- Match(T__32);
+ State = 1033;
+ Match(T__34);
Assert("complement", 2, _localctx.args.list.Count); _localctx.value = MathS.Sets.Complement(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 119:
EnterOuterAlt(_localctx, 119);
{
- State = 1022;
+ State = 1036;
Match(T__161);
- State = 1023;
+ State = 1037;
_localctx.args = function_arguments();
- State = 1024;
- Match(T__32);
+ State = 1038;
+ Match(T__34);
Assert("image", 2, _localctx.args.list.Count); _localctx.value = _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } imageRange ? MathS.Sets.Image(_localctx.args.list[0], imageRange.Element, imageRange.SupSet) : throw new InvalidArgumentParseException("image expects its second argument to say which name ranges over which set, as in image(f(x), x in A)");
}
break;
case 120:
EnterOuterAlt(_localctx, 120);
{
- State = 1027;
+ State = 1041;
Match(T__162);
- State = 1028;
+ State = 1042;
_localctx.args = function_arguments();
- State = 1029;
- Match(T__32);
+ State = 1043;
+ Match(T__34);
Assert("preimage", 3, _localctx.args.list.Count); _localctx.value = _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } preimageRange ? MathS.Sets.PreImage(_localctx.args.list[0], preimageRange.Element, preimageRange.SupSet, _localctx.args.list[2]) : throw new InvalidArgumentParseException("preimage expects its second argument to say which name ranges over which set, as in preimage(f(x), x in A, Y)");
}
break;
case 121:
EnterOuterAlt(_localctx, 121);
{
- State = 1032;
+ State = 1046;
Match(T__163);
- State = 1033;
+ State = 1047;
_localctx.args = function_arguments();
- State = 1034;
- Match(T__32);
+ State = 1048;
+ Match(T__34);
Assert("floor", 1, _localctx.args.list.Count); _localctx.value = MathS.Floor(_localctx.args.list[0]);
}
break;
case 122:
EnterOuterAlt(_localctx, 122);
{
- State = 1037;
+ State = 1051;
Match(T__164);
- State = 1038;
+ State = 1052;
_localctx.args = function_arguments();
- State = 1039;
- Match(T__32);
+ State = 1053;
+ Match(T__34);
Assert("ceil", 1, _localctx.args.list.Count); _localctx.value = MathS.Ceil(_localctx.args.list[0]);
}
break;
case 123:
EnterOuterAlt(_localctx, 123);
{
- State = 1042;
+ State = 1056;
Match(T__165);
- State = 1043;
+ State = 1057;
_localctx.args = function_arguments();
- State = 1044;
- Match(T__32);
+ State = 1058;
+ Match(T__34);
Assert("ceiling", 1, _localctx.args.list.Count); _localctx.value = MathS.Ceil(_localctx.args.list[0]);
}
break;
case 124:
EnterOuterAlt(_localctx, 124);
{
- State = 1047;
+ State = 1061;
Match(T__166);
- State = 1048;
+ State = 1062;
_localctx.args = function_arguments();
- State = 1049;
- Match(T__32);
+ State = 1063;
+ Match(T__34);
Assert("round", 1, _localctx.args.list.Count); _localctx.value = MathS.Round(_localctx.args.list[0]);
}
break;
case 125:
EnterOuterAlt(_localctx, 125);
{
- State = 1052;
+ State = 1066;
Match(T__167);
- State = 1053;
+ State = 1067;
_localctx.args = function_arguments();
- State = 1054;
- Match(T__32);
+ State = 1068;
+ Match(T__34);
AssertAtLeast("min", 1, _localctx.args.list.Count); _localctx.value = _localctx.args.list.Count == 1 && _localctx.args.list[0] is Entity.Set minSet ? MathS.Minimum(Variable.CreateUnique(minSet, "x"), Variable.CreateUnique(minSet, "x"), minSet) : _localctx.args.list.Count == 2 && AngouriMath.Functions.ExtremumOverSet.AsRange(_localctx.args.list[1]) is var (minVar, minOver) ? MathS.Minimum(_localctx.args.list[0], minVar, minOver) : _localctx.args.list.Aggregate((a, b) => MathS.Min(a, b));
}
break;
case 126:
EnterOuterAlt(_localctx, 126);
{
- State = 1057;
+ State = 1071;
Match(T__168);
- State = 1058;
+ State = 1072;
_localctx.args = function_arguments();
- State = 1059;
- Match(T__32);
+ State = 1073;
+ Match(T__34);
AssertAtLeast("max", 1, _localctx.args.list.Count); _localctx.value = _localctx.args.list.Count == 1 && _localctx.args.list[0] is Entity.Set maxSet ? MathS.Maximum(Variable.CreateUnique(maxSet, "x"), Variable.CreateUnique(maxSet, "x"), maxSet) : _localctx.args.list.Count == 2 && AngouriMath.Functions.ExtremumOverSet.AsRange(_localctx.args.list[1]) is var (maxVar, maxOver) ? MathS.Maximum(_localctx.args.list[0], maxVar, maxOver) : _localctx.args.list.Aggregate((a, b) => MathS.Max(a, b));
}
break;
case 127:
EnterOuterAlt(_localctx, 127);
{
- State = 1062;
+ State = 1076;
Match(T__169);
- State = 1063;
+ State = 1077;
_localctx.args = function_arguments();
- State = 1064;
- Match(T__32);
+ State = 1078;
+ Match(T__34);
Assert("argmax", 2, _localctx.args.list.Count); _localctx.value = _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } argmaxRange ? MathS.Argmax(_localctx.args.list[0], argmaxRange.Element, argmaxRange.SupSet) : throw new InvalidArgumentParseException("argmax expects its second argument to say which variable ranges over which set, as in argmax(f(t), t in S)");
}
break;
case 128:
EnterOuterAlt(_localctx, 128);
{
- State = 1067;
+ State = 1081;
Match(T__170);
- State = 1068;
+ State = 1082;
_localctx.args = function_arguments();
- State = 1069;
- Match(T__32);
+ State = 1083;
+ Match(T__34);
Assert("argmin", 2, _localctx.args.list.Count); _localctx.value = _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } argminRange ? MathS.Argmin(_localctx.args.list[0], argminRange.Element, argminRange.SupSet) : throw new InvalidArgumentParseException("argmin expects its second argument to say which variable ranges over which set, as in argmin(f(t), t in S)");
}
break;
case 129:
EnterOuterAlt(_localctx, 129);
{
- State = 1072;
+ State = 1086;
Match(T__171);
- State = 1073;
+ State = 1087;
_localctx.args = function_arguments();
- State = 1074;
- Match(T__32);
+ State = 1088;
+ Match(T__34);
AssertAtLeast("gcd", 1, _localctx.args.list.Count); _localctx.value = _localctx.args.list.Aggregate((a, b) => MathS.Gcd(a, b));
}
break;
case 130:
EnterOuterAlt(_localctx, 130);
{
- State = 1077;
+ State = 1091;
Match(T__172);
- State = 1078;
+ State = 1092;
_localctx.args = function_arguments();
- State = 1079;
- Match(T__32);
+ State = 1093;
+ Match(T__34);
AssertAtLeast("lcm", 1, _localctx.args.list.Count); _localctx.value = _localctx.args.list.Aggregate((a, b) => MathS.Lcm(a, b));
}
break;
case 131:
EnterOuterAlt(_localctx, 131);
{
- State = 1082;
+ State = 1096;
Match(T__173);
- State = 1083;
+ State = 1097;
_localctx.args = function_arguments();
- State = 1084;
- Match(T__32);
+ State = 1098;
+ Match(T__34);
Assert("binomial", 2, _localctx.args.list.Count); _localctx.value = MathS.Binomial(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 132:
EnterOuterAlt(_localctx, 132);
{
- State = 1087;
+ State = 1101;
Match(T__174);
- State = 1088;
+ State = 1102;
_localctx.args = function_arguments();
- State = 1089;
- Match(T__32);
+ State = 1103;
+ Match(T__34);
_localctx.value = ParsingHelpers.Multinomial(_localctx.args.list);
}
break;
case 133:
EnterOuterAlt(_localctx, 133);
{
- State = 1092;
+ State = 1106;
Match(T__175);
- State = 1093;
+ State = 1107;
_localctx.args = function_arguments();
- State = 1094;
- Match(T__32);
+ State = 1108;
+ Match(T__34);
Assert("catalannumber", 1, _localctx.args.list.Count); _localctx.value = MathS.CatalanNumber(_localctx.args.list[0]);
}
break;
case 134:
EnterOuterAlt(_localctx, 134);
{
- State = 1097;
+ State = 1111;
Match(T__176);
- State = 1098;
+ State = 1112;
_localctx.args = function_arguments();
- State = 1099;
- Match(T__32);
+ State = 1113;
+ Match(T__34);
if (Assert("harmonicnumber", (2, 1), _localctx.args.list.Count)) _localctx.value = MathS.HarmonicNumber(_localctx.args.list[0], _localctx.args.list[1]); else _localctx.value = MathS.HarmonicNumber(_localctx.args.list[0]);
}
break;
case 135:
EnterOuterAlt(_localctx, 135);
{
- State = 1102;
+ State = 1116;
Match(T__177);
- State = 1103;
+ State = 1117;
_localctx.args = function_arguments();
- State = 1104;
- Match(T__32);
+ State = 1118;
+ Match(T__34);
Assert("fallingfactorial", 2, _localctx.args.list.Count); _localctx.value = MathS.FallingFactorial(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 136:
EnterOuterAlt(_localctx, 136);
{
- State = 1107;
+ State = 1121;
Match(T__178);
- State = 1108;
+ State = 1122;
_localctx.args = function_arguments();
- State = 1109;
- Match(T__32);
+ State = 1123;
+ Match(T__34);
Assert("factorialpower", 2, _localctx.args.list.Count); _localctx.value = MathS.FallingFactorial(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 137:
EnterOuterAlt(_localctx, 137);
{
- State = 1112;
+ State = 1126;
Match(T__179);
- State = 1113;
+ State = 1127;
_localctx.args = function_arguments();
- State = 1114;
- Match(T__32);
+ State = 1128;
+ Match(T__34);
Assert("risingfactorial", 2, _localctx.args.list.Count); _localctx.value = MathS.RisingFactorial(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 138:
EnterOuterAlt(_localctx, 138);
{
- State = 1117;
+ State = 1131;
Match(T__180);
- State = 1118;
+ State = 1132;
_localctx.args = function_arguments();
- State = 1119;
- Match(T__32);
+ State = 1133;
+ Match(T__34);
Assert("iverson", 1, _localctx.args.list.Count); _localctx.value = MathS.Iverson(_localctx.args.list[0]);
}
break;
case 139:
EnterOuterAlt(_localctx, 139);
{
- State = 1122;
+ State = 1136;
Match(T__181);
- State = 1123;
+ State = 1137;
_localctx.args = function_arguments();
- State = 1124;
- Match(T__32);
+ State = 1138;
+ Match(T__34);
Assert("aleph", 1, _localctx.args.list.Count); _localctx.value = MathS.Aleph(_localctx.args.list[0]);
}
break;
case 140:
EnterOuterAlt(_localctx, 140);
{
- State = 1127;
+ State = 1141;
Match(T__182);
- State = 1128;
+ State = 1142;
_localctx.args = function_arguments();
- State = 1129;
- Match(T__32);
+ State = 1143;
+ Match(T__34);
Assert("erf", 1, _localctx.args.list.Count); _localctx.value = MathS.Erf(_localctx.args.list[0]);
}
break;
case 141:
EnterOuterAlt(_localctx, 141);
{
- State = 1132;
+ State = 1146;
Match(T__183);
- State = 1133;
+ State = 1147;
_localctx.args = function_arguments();
- State = 1134;
- Match(T__32);
+ State = 1148;
+ Match(T__34);
Assert("erfc", 1, _localctx.args.list.Count); _localctx.value = MathS.Erfc(_localctx.args.list[0]);
}
break;
case 142:
EnterOuterAlt(_localctx, 142);
{
- State = 1137;
+ State = 1151;
Match(T__184);
- State = 1138;
+ State = 1152;
_localctx.args = function_arguments();
- State = 1139;
- Match(T__32);
+ State = 1153;
+ Match(T__34);
Assert("erfi", 1, _localctx.args.list.Count); _localctx.value = MathS.Erfi(_localctx.args.list[0]);
}
break;
case 143:
EnterOuterAlt(_localctx, 143);
{
- State = 1142;
+ State = 1156;
Match(T__185);
- State = 1143;
+ State = 1157;
_localctx.args = function_arguments();
- State = 1144;
- Match(T__32);
+ State = 1158;
+ Match(T__34);
Assert("Ei", 1, _localctx.args.list.Count); _localctx.value = MathS.Ei(_localctx.args.list[0]);
}
break;
case 144:
EnterOuterAlt(_localctx, 144);
{
- State = 1147;
+ State = 1161;
Match(T__186);
- State = 1148;
+ State = 1162;
_localctx.args = function_arguments();
- State = 1149;
- Match(T__32);
+ State = 1163;
+ Match(T__34);
Assert("li", 1, _localctx.args.list.Count); _localctx.value = MathS.Li(_localctx.args.list[0]);
}
break;
case 145:
EnterOuterAlt(_localctx, 145);
{
- State = 1152;
+ State = 1166;
Match(T__187);
- State = 1153;
+ State = 1167;
_localctx.args = function_arguments();
- State = 1154;
- Match(T__32);
+ State = 1168;
+ Match(T__34);
if (Assert("lambertw", (2, 1), _localctx.args.list.Count)) _localctx.value = MathS.LambertW(_localctx.args.list[0], _localctx.args.list[1]); else _localctx.value = MathS.LambertW(_localctx.args.list[0]);
}
break;
case 146:
EnterOuterAlt(_localctx, 146);
{
- State = 1157;
+ State = 1171;
Match(T__188);
- State = 1158;
+ State = 1172;
_localctx.args = function_arguments();
- State = 1159;
- Match(T__32);
+ State = 1173;
+ Match(T__34);
if (Assert("productlog", (2, 1), _localctx.args.list.Count)) _localctx.value = MathS.LambertW(_localctx.args.list[0], _localctx.args.list[1]); else _localctx.value = MathS.LambertW(_localctx.args.list[0]);
}
break;
case 147:
EnterOuterAlt(_localctx, 147);
{
- State = 1162;
+ State = 1176;
Match(T__189);
- State = 1163;
+ State = 1177;
_localctx.args = function_arguments();
- State = 1164;
- Match(T__32);
+ State = 1178;
+ Match(T__34);
Assert("polygamma", 2, _localctx.args.list.Count); _localctx.value = MathS.Polygamma(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 148:
EnterOuterAlt(_localctx, 148);
{
- State = 1167;
+ State = 1181;
Match(T__190);
- State = 1168;
+ State = 1182;
_localctx.args = function_arguments();
- State = 1169;
- Match(T__32);
+ State = 1183;
+ Match(T__34);
Assert("digamma", 1, _localctx.args.list.Count); _localctx.value = MathS.Digamma(_localctx.args.list[0]);
}
break;
case 149:
EnterOuterAlt(_localctx, 149);
{
- State = 1172;
+ State = 1186;
Match(T__191);
- State = 1173;
+ State = 1187;
_localctx.args = function_arguments();
- State = 1174;
- Match(T__32);
+ State = 1188;
+ Match(T__34);
Assert("Si", 1, _localctx.args.list.Count); _localctx.value = MathS.Si(_localctx.args.list[0]);
}
break;
case 150:
EnterOuterAlt(_localctx, 150);
{
- State = 1177;
+ State = 1191;
Match(T__192);
- State = 1178;
+ State = 1192;
_localctx.args = function_arguments();
- State = 1179;
- Match(T__32);
+ State = 1193;
+ Match(T__34);
Assert("Ci", 1, _localctx.args.list.Count); _localctx.value = MathS.Ci(_localctx.args.list[0]);
}
break;
case 151:
EnterOuterAlt(_localctx, 151);
{
- State = 1182;
+ State = 1196;
Match(T__193);
- State = 1183;
+ State = 1197;
_localctx.args = function_arguments();
- State = 1184;
- Match(T__32);
+ State = 1198;
+ Match(T__34);
Assert("Shi", 1, _localctx.args.list.Count); _localctx.value = MathS.Shi(_localctx.args.list[0]);
}
break;
case 152:
EnterOuterAlt(_localctx, 152);
{
- State = 1187;
+ State = 1201;
Match(T__194);
- State = 1188;
+ State = 1202;
_localctx.args = function_arguments();
- State = 1189;
- Match(T__32);
+ State = 1203;
+ Match(T__34);
Assert("Chi", 1, _localctx.args.list.Count); _localctx.value = MathS.Chi(_localctx.args.list[0]);
}
break;
case 153:
EnterOuterAlt(_localctx, 153);
{
- State = 1192;
+ State = 1206;
Match(T__195);
- State = 1193;
+ State = 1207;
_localctx.args = function_arguments();
- State = 1194;
- Match(T__32);
+ State = 1208;
+ Match(T__34);
Assert("det", 1, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Determinant(_localctx.args.list[0]);
}
break;
case 154:
EnterOuterAlt(_localctx, 154);
{
- State = 1197;
+ State = 1211;
Match(T__196);
- State = 1198;
+ State = 1212;
_localctx.args = function_arguments();
- State = 1199;
- Match(T__32);
+ State = 1213;
+ Match(T__34);
Assert("transpose", 1, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Transposed(_localctx.args.list[0]);
}
break;
case 155:
EnterOuterAlt(_localctx, 155);
{
- State = 1202;
+ State = 1216;
Match(T__197);
- State = 1203;
+ State = 1217;
_localctx.args = function_arguments();
- State = 1204;
- Match(T__32);
- Assert("dot", 2, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Dot(_localctx.args.list[0], _localctx.args.list[1]);
+ State = 1218;
+ Match(T__34);
+ Assert("trace", 1, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Trace(_localctx.args.list[0]);
}
break;
case 156:
EnterOuterAlt(_localctx, 156);
{
- State = 1207;
+ State = 1221;
Match(T__198);
- State = 1208;
+ State = 1222;
_localctx.args = function_arguments();
- State = 1209;
- Match(T__32);
- Assert("cross", (1, 2), _localctx.args.list.Count); _localctx.value = ParsingHelpers.Cross(_localctx.args.list);
+ State = 1223;
+ Match(T__34);
+ Assert("dot", 2, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Dot(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 157:
EnterOuterAlt(_localctx, 157);
{
- State = 1212;
+ State = 1226;
Match(T__199);
- State = 1213;
+ State = 1227;
_localctx.args = function_arguments();
- State = 1214;
- Match(T__32);
- Assert("laplacian", 2, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Laplacian(_localctx.args.list[0], _localctx.args.list[1]);
+ State = 1228;
+ Match(T__34);
+ Assert("cross", (1, 2), _localctx.args.list.Count); _localctx.value = ParsingHelpers.Cross(_localctx.args.list);
}
break;
case 158:
EnterOuterAlt(_localctx, 158);
{
- State = 1217;
+ State = 1231;
Match(T__200);
- State = 1218;
+ State = 1232;
_localctx.args = function_arguments();
- State = 1219;
- Match(T__32);
- Assert("forwarddifference", 2, _localctx.args.list.Count); _localctx.value = ParsingHelpers.ForwardDifference(_localctx.args.list[0], _localctx.args.list[1]);
+ State = 1233;
+ Match(T__34);
+ Assert("laplacian", 2, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Laplacian(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 159:
EnterOuterAlt(_localctx, 159);
{
- State = 1222;
+ State = 1236;
Match(T__201);
- State = 1223;
+ State = 1237;
_localctx.args = function_arguments();
- State = 1224;
- Match(T__32);
- Assert("jacobian", 2, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Jacobian(_localctx.args.list[0], _localctx.args.list[1]);
+ State = 1238;
+ Match(T__34);
+ Assert("forwarddifference", 2, _localctx.args.list.Count); _localctx.value = ParsingHelpers.ForwardDifference(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 160:
EnterOuterAlt(_localctx, 160);
{
- State = 1227;
+ State = 1241;
Match(T__202);
- State = 1228;
+ State = 1242;
_localctx.args = function_arguments();
- State = 1229;
- Match(T__32);
- Assert("hessian", 2, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Hessian(_localctx.args.list[0], _localctx.args.list[1]);
+ State = 1243;
+ Match(T__34);
+ Assert("jacobian", 2, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Jacobian(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 161:
EnterOuterAlt(_localctx, 161);
{
- State = 1232;
+ State = 1246;
Match(T__203);
- State = 1233;
+ State = 1247;
_localctx.args = function_arguments();
- State = 1234;
- Match(T__32);
- Assert("resultant", 3, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Resultant(_localctx.args.list[0], _localctx.args.list[1], _localctx.args.list[2]);
+ State = 1248;
+ Match(T__34);
+ Assert("hessian", 2, _localctx.args.list.Count); _localctx.value = ParsingHelpers.Hessian(_localctx.args.list[0], _localctx.args.list[1]);
}
break;
case 162:
EnterOuterAlt(_localctx, 162);
{
- State = 1237;
+ State = 1251;
Match(T__204);
- State = 1238;
+ State = 1252;
_localctx.args = function_arguments();
- State = 1239;
- Match(T__32);
- Assert("conjugate", 1, _localctx.args.list.Count); _localctx.value = MathS.Conjugate(_localctx.args.list[0]);
+ State = 1253;
+ Match(T__34);
+ 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 163:
EnterOuterAlt(_localctx, 163);
{
- State = 1242;
+ State = 1256;
Match(T__205);
- State = 1243;
+ State = 1257;
_localctx.args = function_arguments();
- State = 1244;
- Match(T__32);
- Assert("conj", 1, _localctx.args.list.Count); _localctx.value = MathS.Conjugate(_localctx.args.list[0]);
+ State = 1258;
+ Match(T__34);
+ Assert("conjugate", 1, _localctx.args.list.Count); _localctx.value = MathS.Conjugate(_localctx.args.list[0]);
}
break;
case 164:
EnterOuterAlt(_localctx, 164);
{
- State = 1247;
+ State = 1261;
Match(T__206);
- State = 1248;
+ State = 1262;
_localctx.args = function_arguments();
- State = 1249;
- Match(T__32);
- Assert("arg", 1, _localctx.args.list.Count); _localctx.value = MathS.Arg(_localctx.args.list[0]);
+ State = 1263;
+ Match(T__34);
+ Assert("conj", 1, _localctx.args.list.Count); _localctx.value = MathS.Conjugate(_localctx.args.list[0]);
}
break;
case 165:
EnterOuterAlt(_localctx, 165);
{
- State = 1252;
+ State = 1266;
Match(T__207);
- State = 1253;
+ State = 1267;
_localctx.args = function_arguments();
- State = 1254;
- Match(T__32);
- Assert("Re", 1, _localctx.args.list.Count); _localctx.value = MathS.Re(_localctx.args.list[0]);
+ State = 1268;
+ Match(T__34);
+ Assert("arg", 1, _localctx.args.list.Count); _localctx.value = MathS.Arg(_localctx.args.list[0]);
}
break;
case 166:
EnterOuterAlt(_localctx, 166);
{
- State = 1257;
+ State = 1271;
Match(T__208);
- State = 1258;
+ State = 1272;
_localctx.args = function_arguments();
- State = 1259;
- Match(T__32);
- Assert("Im", 1, _localctx.args.list.Count); _localctx.value = MathS.Im(_localctx.args.list[0]);
+ State = 1273;
+ Match(T__34);
+ Assert("Re", 1, _localctx.args.list.Count); _localctx.value = MathS.Re(_localctx.args.list[0]);
}
break;
case 167:
EnterOuterAlt(_localctx, 167);
{
- State = 1262;
+ State = 1276;
Match(T__209);
- State = 1263;
+ State = 1277;
_localctx.args = function_arguments();
- State = 1264;
- Match(T__32);
- Assert("re", 1, _localctx.args.list.Count); _localctx.value = MathS.Re(_localctx.args.list[0]);
+ State = 1278;
+ Match(T__34);
+ Assert("Im", 1, _localctx.args.list.Count); _localctx.value = MathS.Im(_localctx.args.list[0]);
}
break;
case 168:
EnterOuterAlt(_localctx, 168);
{
- State = 1267;
+ State = 1281;
Match(T__210);
- State = 1268;
+ State = 1282;
_localctx.args = function_arguments();
- State = 1269;
- Match(T__32);
- Assert("real", 1, _localctx.args.list.Count); _localctx.value = MathS.Re(_localctx.args.list[0]);
+ State = 1283;
+ Match(T__34);
+ Assert("re", 1, _localctx.args.list.Count); _localctx.value = MathS.Re(_localctx.args.list[0]);
}
break;
case 169:
EnterOuterAlt(_localctx, 169);
{
- State = 1272;
+ State = 1286;
Match(T__211);
- State = 1273;
+ State = 1287;
_localctx.args = function_arguments();
- State = 1274;
- Match(T__32);
- Assert("im", 1, _localctx.args.list.Count); _localctx.value = MathS.Im(_localctx.args.list[0]);
+ State = 1288;
+ Match(T__34);
+ Assert("real", 1, _localctx.args.list.Count); _localctx.value = MathS.Re(_localctx.args.list[0]);
}
break;
case 170:
EnterOuterAlt(_localctx, 170);
{
- State = 1277;
+ State = 1291;
Match(T__212);
- State = 1278;
+ State = 1292;
_localctx.args = function_arguments();
- State = 1279;
- Match(T__32);
- Assert("imag", 1, _localctx.args.list.Count); _localctx.value = MathS.Im(_localctx.args.list[0]);
+ State = 1293;
+ Match(T__34);
+ Assert("im", 1, _localctx.args.list.Count); _localctx.value = MathS.Im(_localctx.args.list[0]);
}
break;
case 171:
EnterOuterAlt(_localctx, 171);
{
- State = 1282;
+ State = 1296;
Match(T__213);
- State = 1283;
+ State = 1297;
_localctx.args = function_arguments();
- State = 1284;
- Match(T__32);
- _localctx.value = NotImplementedFunction("trunc", "rounding functions");
+ State = 1298;
+ Match(T__34);
+ Assert("imag", 1, _localctx.args.list.Count); _localctx.value = MathS.Im(_localctx.args.list[0]);
}
break;
case 172:
EnterOuterAlt(_localctx, 172);
{
- State = 1287;
+ State = 1301;
Match(T__214);
- State = 1288;
+ State = 1302;
_localctx.args = function_arguments();
- State = 1289;
- Match(T__32);
- _localctx.value = NotImplementedFunction("zeta", "Riemann or Hurwitz zeta function yet");
+ State = 1303;
+ Match(T__34);
+ _localctx.value = NotImplementedFunction("trunc", "rounding functions");
}
break;
case 173:
EnterOuterAlt(_localctx, 173);
{
- State = 1292;
+ State = 1306;
Match(T__215);
- State = 1293;
+ State = 1307;
_localctx.args = function_arguments();
- State = 1294;
- Match(T__32);
- _localctx.value = NotImplementedFunction("riemannzeta", "Riemann zeta function yet");
+ State = 1308;
+ Match(T__34);
+ _localctx.value = NotImplementedFunction("zeta", "Riemann or Hurwitz zeta function yet");
}
break;
case 174:
EnterOuterAlt(_localctx, 174);
{
- State = 1297;
+ State = 1311;
Match(T__216);
- State = 1298;
+ State = 1312;
_localctx.args = function_arguments();
- State = 1299;
- Match(T__32);
- _localctx.value = NotImplementedFunction("hurwitzzeta", "Hurwitz zeta function yet");
+ State = 1313;
+ Match(T__34);
+ _localctx.value = NotImplementedFunction("riemannzeta", "Riemann zeta function yet");
}
break;
case 175:
EnterOuterAlt(_localctx, 175);
{
- State = 1302;
+ State = 1316;
Match(T__217);
- State = 1303;
+ State = 1317;
_localctx.args = function_arguments();
- State = 1304;
- Match(T__32);
- _localctx.value = NotAFunctionHere("heaviside", "its value at 0 is 0, 1/2 or 1 by source; write iverson(x > 0), iverson(x >= 0) or (1 + sgn(x))/2");
+ State = 1318;
+ Match(T__34);
+ _localctx.value = NotImplementedFunction("hurwitzzeta", "Hurwitz zeta function yet");
}
break;
case 176:
EnterOuterAlt(_localctx, 176);
{
- State = 1307;
+ State = 1321;
Match(T__218);
- State = 1308;
+ State = 1322;
_localctx.args = function_arguments();
- State = 1309;
- Match(T__32);
- _localctx.value = NotAFunctionHere("unitstep", "write iverson(x >= 0), which is 1 at 0");
+ State = 1323;
+ Match(T__34);
+ _localctx.value = NotAFunctionHere("heaviside", "its value at 0 is 0, 1/2 or 1 by source; write iverson(x > 0), iverson(x >= 0) or (1 + sgn(x))/2");
}
break;
case 177:
EnterOuterAlt(_localctx, 177);
{
- State = 1312;
+ State = 1326;
Match(T__219);
- State = 1313;
+ State = 1327;
_localctx.args = function_arguments();
- State = 1314;
- Match(T__32);
- _localctx.value = NotAFunctionHere("isprime", "write n in PP");
+ State = 1328;
+ Match(T__34);
+ _localctx.value = NotAFunctionHere("unitstep", "write iverson(x >= 0), which is 1 at 0");
}
break;
case 178:
EnterOuterAlt(_localctx, 178);
{
- State = 1317;
+ State = 1331;
Match(T__220);
- State = 1318;
+ State = 1332;
_localctx.args = function_arguments();
- State = 1319;
- Match(T__32);
- _localctx.value = NotAFunctionHere("pochhammer", "(x)_n is the rising factorial to some and the falling one to others; write risingfactorial or fallingfactorial");
+ State = 1333;
+ Match(T__34);
+ _localctx.value = NotAFunctionHere("isprime", "write n in PP");
}
break;
case 179:
EnterOuterAlt(_localctx, 179);
{
- State = 1322;
+ State = 1336;
Match(T__221);
- State = 1323;
+ State = 1337;
_localctx.args = function_arguments();
- State = 1324;
- Match(T__32);
- _localctx.value = NotAFunctionHere("doublefactorial", "the double factorial is the postfix n!!");
+ State = 1338;
+ Match(T__34);
+ _localctx.value = NotAFunctionHere("pochhammer", "(x)_n is the rising factorial to some and the falling one to others; write risingfactorial or fallingfactorial");
}
break;
case 180:
EnterOuterAlt(_localctx, 180);
{
- State = 1327;
+ State = 1341;
Match(T__222);
- State = 1328;
+ State = 1342;
_localctx.args = function_arguments();
- State = 1329;
- Match(T__32);
- _localctx.value = NotAFunctionHere("factorial2", "the double factorial is the postfix n!!");
+ State = 1343;
+ Match(T__34);
+ _localctx.value = NotAFunctionHere("doublefactorial", "the double factorial is the postfix n!!");
}
break;
case 181:
EnterOuterAlt(_localctx, 181);
{
- State = 1332;
+ State = 1346;
Match(T__223);
- State = 1333;
+ State = 1347;
_localctx.args = function_arguments();
- State = 1334;
- Match(T__32);
- _localctx.value = NotAFunctionHere("fractionalpart", "write x mod 1, which is in [0, 1)");
+ State = 1348;
+ Match(T__34);
+ _localctx.value = NotAFunctionHere("factorial2", "the double factorial is the postfix n!!");
}
break;
case 182:
EnterOuterAlt(_localctx, 182);
{
- State = 1337;
+ State = 1351;
Match(T__224);
- State = 1338;
+ State = 1352;
_localctx.args = function_arguments();
- State = 1339;
- Match(T__32);
- _localctx.value = NotAFunctionHere("quotient", "write floor(a / b)");
+ State = 1353;
+ Match(T__34);
+ _localctx.value = NotAFunctionHere("fractionalpart", "write x mod 1, which is in [0, 1)");
}
break;
case 183:
EnterOuterAlt(_localctx, 183);
{
- State = 1342;
+ State = 1356;
Match(T__225);
- State = 1343;
+ State = 1357;
_localctx.args = function_arguments();
- State = 1344;
- Match(T__32);
+ State = 1358;
+ Match(T__34);
+ _localctx.value = NotAFunctionHere("quotient", "write floor(a / b)");
+ }
+ break;
+ case 184:
+ EnterOuterAlt(_localctx, 184);
+ {
+ State = 1361;
+ Match(T__226);
+ State = 1362;
+ _localctx.args = function_arguments();
+ State = 1363;
+ Match(T__34);
Assert("domain", 2, _localctx.args.list.Count);
// `Any` is the unrestricted codomain. It is read here rather than lexed as a
@@ -5751,15 +5841,15 @@ public AtomContext atom() {
}
break;
- case 184:
- EnterOuterAlt(_localctx, 184);
+ case 185:
+ EnterOuterAlt(_localctx, 185);
{
- State = 1347;
- Match(T__226);
- State = 1348;
+ State = 1366;
+ Match(T__227);
+ State = 1367;
_localctx.args = function_arguments();
- State = 1349;
- Match(T__32);
+ State = 1368;
+ Match(T__34);
var cases = new List();
foreach (var arg in _localctx.args.list)
@@ -5771,15 +5861,15 @@ public AtomContext atom() {
}
break;
- case 185:
- EnterOuterAlt(_localctx, 185);
+ case 186:
+ EnterOuterAlt(_localctx, 186);
{
- State = 1352;
- Match(T__227);
- State = 1353;
+ State = 1371;
+ Match(T__228);
+ State = 1372;
_localctx.args = function_arguments();
- State = 1354;
- Match(T__32);
+ State = 1373;
+ Match(T__34);
if (_localctx.args.list.Count < 2)
throw new FunctionArgumentCountException("Should be at least one argument in apply function");
@@ -5787,15 +5877,15 @@ public AtomContext atom() {
}
break;
- case 186:
- EnterOuterAlt(_localctx, 186);
+ case 187:
+ EnterOuterAlt(_localctx, 187);
{
- State = 1357;
- Match(T__228);
- State = 1358;
+ State = 1376;
+ Match(T__229);
+ State = 1377;
_localctx.args = function_arguments();
- State = 1359;
- Match(T__32);
+ State = 1378;
+ Match(T__34);
if (_localctx.args.list.Count < 2)
throw new FunctionArgumentCountException("Should be at least two arguments in lambda function");
@@ -5853,13 +5943,13 @@ public override void ExitRule(IParseTreeListener listener) {
[RuleVersion(0)]
public StatementContext statement() {
StatementContext _localctx = new StatementContext(Context, State);
- EnterRule(_localctx, 50, RULE_statement);
+ EnterRule(_localctx, 52, RULE_statement);
try {
EnterOuterAlt(_localctx, 1);
{
- State = 1364;
+ State = 1383;
_localctx._expression = expression();
- State = 1365;
+ State = 1384;
Match(Eof);
Result = _localctx._expression.value;
}
@@ -5876,502 +5966,509 @@ public StatementContext statement() {
}
private static int[] _serializedATN = {
- 4,1,237,1369,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,238,1388,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,1,
- 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,3,0,68,8,0,1,1,1,1,1,1,1,1,4,1,74,8,1,11,
- 1,12,1,75,1,1,1,1,1,1,1,1,4,1,82,8,1,11,1,12,1,83,3,1,86,8,1,1,2,1,2,1,
- 2,1,2,1,2,3,2,93,8,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,103,8,3,1,3,1,
- 3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,113,8,3,1,3,1,3,1,3,3,3,118,8,3,1,4,1,4,
- 1,4,1,4,1,4,1,4,1,4,1,4,3,4,128,8,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,5,
- 4,138,8,4,10,4,12,4,141,9,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,
- 5,153,8,5,1,5,1,5,1,5,1,5,5,5,159,8,5,10,5,12,5,162,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,176,8,6,10,6,12,6,179,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,
- 199,8,7,10,7,12,7,202,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,234,8,8,10,8,12,8,237,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,255,8,9,1,9,1,9,1,9,5,9,260,8,9,10,9,
- 12,9,263,9,9,1,9,1,9,1,9,1,9,1,9,1,9,3,9,271,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,290,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,306,8,11,10,11,12,11,309,9,11,1,12,1,12,1,12,1,12,1,12,1,12,1,
- 12,1,12,1,12,1,12,5,12,321,8,12,10,12,12,12,324,9,12,1,13,1,13,1,13,1,
- 13,1,13,1,13,1,13,1,13,1,13,1,13,5,13,336,8,13,10,13,12,13,339,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,355,8,14,10,14,12,14,358,9,14,1,15,1,15,1,15,1,15,1,15,1,15,3,15,366,
- 8,15,1,16,1,16,1,16,1,16,1,16,1,16,3,16,374,8,16,1,16,1,16,1,16,3,16,379,
- 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,
- 393,8,18,1,19,1,19,1,19,1,19,1,19,1,19,5,19,401,8,19,10,19,12,19,404,9,
- 19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,5,20,414,8,20,10,20,12,20,417,
- 9,20,3,20,419,8,20,1,21,1,21,1,21,1,21,1,21,3,21,426,8,21,1,21,1,21,1,
- 21,1,21,1,21,1,21,3,21,434,8,21,5,21,436,8,21,10,21,12,21,439,9,21,3,21,
- 441,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,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,
- 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,
- 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,
- 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,
- 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,
- 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,
- 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,
- 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,
- 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,
- 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,
- 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,
- 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,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,1363,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,8,9,1,0,35,36,1,0,39,40,1,
- 0,44,45,1,0,46,47,1,0,48,49,1591,0,67,1,0,0,0,2,85,1,0,0,0,4,87,1,0,0,
- 0,6,117,1,0,0,0,8,119,1,0,0,0,10,144,1,0,0,0,12,165,1,0,0,0,14,180,1,0,
- 0,0,16,203,1,0,0,0,18,238,1,0,0,0,20,289,1,0,0,0,22,291,1,0,0,0,24,310,
- 1,0,0,0,26,325,1,0,0,0,28,340,1,0,0,0,30,359,1,0,0,0,32,378,1,0,0,0,34,
- 380,1,0,0,0,36,392,1,0,0,0,38,394,1,0,0,0,40,418,1,0,0,0,42,440,1,0,0,
- 0,44,442,1,0,0,0,46,448,1,0,0,0,48,1362,1,0,0,0,50,1364,1,0,0,0,52,53,
- 3,48,24,0,53,54,5,1,0,0,54,55,6,0,-1,0,55,68,1,0,0,0,56,57,3,48,24,0,57,
- 58,5,2,0,0,58,59,6,0,-1,0,59,68,1,0,0,0,60,61,3,48,24,0,61,62,5,3,0,0,
- 62,63,6,0,-1,0,63,68,1,0,0,0,64,65,3,48,24,0,65,66,6,0,-1,0,66,68,1,0,
- 0,0,67,52,1,0,0,0,67,56,1,0,0,0,67,60,1,0,0,0,67,64,1,0,0,0,68,1,1,0,0,
- 0,69,70,5,4,0,0,70,71,3,0,0,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,86,1,0,0,0,77,78,5,4,0,
- 0,78,79,3,6,3,0,79,80,6,1,-1,0,80,82,1,0,0,0,81,77,1,0,0,0,82,83,1,0,0,
- 0,83,81,1,0,0,0,83,84,1,0,0,0,84,86,1,0,0,0,85,73,1,0,0,0,85,81,1,0,0,
- 0,86,3,1,0,0,0,87,88,3,0,0,0,88,92,6,2,-1,0,89,90,3,2,1,0,90,91,6,2,-1,
- 0,91,93,1,0,0,0,92,89,1,0,0,0,92,93,1,0,0,0,93,5,1,0,0,0,94,95,5,5,0,0,
- 95,96,3,4,2,0,96,97,6,3,-1,0,97,103,1,0,0,0,98,99,5,6,0,0,99,100,3,4,2,
- 0,100,101,6,3,-1,0,101,103,1,0,0,0,102,94,1,0,0,0,102,98,1,0,0,0,103,118,
- 1,0,0,0,104,105,5,5,0,0,105,106,3,6,3,0,106,107,6,3,-1,0,107,113,1,0,0,
- 0,108,109,5,6,0,0,109,110,3,6,3,0,110,111,6,3,-1,0,111,113,1,0,0,0,112,
- 104,1,0,0,0,112,108,1,0,0,0,113,118,1,0,0,0,114,115,3,4,2,0,115,116,6,
- 3,-1,0,116,118,1,0,0,0,117,102,1,0,0,0,117,112,1,0,0,0,117,114,1,0,0,0,
- 118,7,1,0,0,0,119,120,3,6,3,0,120,139,6,4,-1,0,121,127,5,7,0,0,122,123,
- 7,0,0,0,123,128,6,4,-1,0,124,125,3,6,3,0,125,126,6,4,-1,0,126,128,1,0,
- 0,0,127,122,1,0,0,0,127,124,1,0,0,0,128,138,1,0,0,0,129,130,5,10,0,0,130,
- 131,3,6,3,0,131,132,6,4,-1,0,132,138,1,0,0,0,133,134,5,11,0,0,134,135,
- 3,6,3,0,135,136,6,4,-1,0,136,138,1,0,0,0,137,121,1,0,0,0,137,129,1,0,0,
- 0,137,133,1,0,0,0,138,141,1,0,0,0,139,137,1,0,0,0,139,140,1,0,0,0,140,
- 142,1,0,0,0,141,139,1,0,0,0,142,143,6,4,-1,0,143,9,1,0,0,0,144,145,3,8,
- 4,0,145,160,6,5,-1,0,146,152,5,6,0,0,147,148,7,0,0,0,148,153,6,5,-1,0,
- 149,150,3,8,4,0,150,151,6,5,-1,0,151,153,1,0,0,0,152,147,1,0,0,0,152,149,
- 1,0,0,0,153,159,1,0,0,0,154,155,5,5,0,0,155,156,3,8,4,0,156,157,6,5,-1,
- 0,157,159,1,0,0,0,158,146,1,0,0,0,158,154,1,0,0,0,159,162,1,0,0,0,160,
- 158,1,0,0,0,160,161,1,0,0,0,161,163,1,0,0,0,162,160,1,0,0,0,163,164,6,
- 5,-1,0,164,11,1,0,0,0,165,166,3,10,5,0,166,177,6,6,-1,0,167,168,5,12,0,
- 0,168,169,3,10,5,0,169,170,6,6,-1,0,170,176,1,0,0,0,171,172,5,13,0,0,172,
- 173,3,10,5,0,173,174,6,6,-1,0,174,176,1,0,0,0,175,167,1,0,0,0,175,171,
- 1,0,0,0,176,179,1,0,0,0,177,175,1,0,0,0,177,178,1,0,0,0,178,13,1,0,0,0,
- 179,177,1,0,0,0,180,181,3,12,6,0,181,200,6,7,-1,0,182,183,5,14,0,0,183,
- 184,3,12,6,0,184,185,6,7,-1,0,185,199,1,0,0,0,186,187,5,15,0,0,187,188,
- 3,12,6,0,188,189,6,7,-1,0,189,199,1,0,0,0,190,191,5,16,0,0,191,192,3,12,
- 6,0,192,193,6,7,-1,0,193,199,1,0,0,0,194,195,5,17,0,0,195,196,3,12,6,0,
- 196,197,6,7,-1,0,197,199,1,0,0,0,198,182,1,0,0,0,198,186,1,0,0,0,198,190,
- 1,0,0,0,198,194,1,0,0,0,199,202,1,0,0,0,200,198,1,0,0,0,200,201,1,0,0,
- 0,201,15,1,0,0,0,202,200,1,0,0,0,203,204,3,14,7,0,204,235,6,8,-1,0,205,
- 206,5,18,0,0,206,207,3,14,7,0,207,208,6,8,-1,0,208,234,1,0,0,0,209,210,
- 5,19,0,0,210,211,3,14,7,0,211,212,6,8,-1,0,212,234,1,0,0,0,213,214,5,20,
- 0,0,214,215,3,14,7,0,215,216,6,8,-1,0,216,234,1,0,0,0,217,218,5,21,0,0,
- 218,219,3,14,7,0,219,220,6,8,-1,0,220,234,1,0,0,0,221,222,5,22,0,0,222,
- 223,3,14,7,0,223,224,6,8,-1,0,224,234,1,0,0,0,225,226,5,23,0,0,226,227,
- 3,14,7,0,227,228,6,8,-1,0,228,234,1,0,0,0,229,230,5,24,0,0,230,231,3,14,
- 7,0,231,232,6,8,-1,0,232,234,1,0,0,0,233,205,1,0,0,0,233,209,1,0,0,0,233,
- 213,1,0,0,0,233,217,1,0,0,0,233,221,1,0,0,0,233,225,1,0,0,0,233,229,1,
- 0,0,0,234,237,1,0,0,0,235,233,1,0,0,0,235,236,1,0,0,0,236,17,1,0,0,0,237,
- 235,1,0,0,0,238,239,3,16,8,0,239,261,6,9,-1,0,240,241,5,25,0,0,241,255,
- 6,9,-1,0,242,243,5,26,0,0,243,255,6,9,-1,0,244,245,5,27,0,0,245,255,6,
- 9,-1,0,246,247,5,28,0,0,247,255,6,9,-1,0,248,249,5,29,0,0,249,255,6,9,
- -1,0,250,251,5,30,0,0,251,255,6,9,-1,0,252,253,5,31,0,0,253,255,6,9,-1,
- 0,254,240,1,0,0,0,254,242,1,0,0,0,254,244,1,0,0,0,254,246,1,0,0,0,254,
- 248,1,0,0,0,254,250,1,0,0,0,254,252,1,0,0,0,255,256,1,0,0,0,256,257,3,
- 16,8,0,257,258,6,9,-1,0,258,260,1,0,0,0,259,254,1,0,0,0,260,263,1,0,0,
- 0,261,259,1,0,0,0,261,262,1,0,0,0,262,270,1,0,0,0,263,261,1,0,0,0,264,
- 265,5,32,0,0,265,266,5,11,0,0,266,267,3,16,8,0,267,268,5,33,0,0,268,269,
- 6,9,-1,0,269,271,1,0,0,0,270,264,1,0,0,0,270,271,1,0,0,0,271,272,1,0,0,
- 0,272,273,6,9,-1,0,273,19,1,0,0,0,274,275,5,34,0,0,275,276,3,18,9,0,276,
- 277,6,10,-1,0,277,290,1,0,0,0,278,279,5,34,0,0,279,280,3,20,10,0,280,281,
- 6,10,-1,0,281,290,1,0,0,0,282,283,5,34,0,0,283,284,3,34,17,0,284,285,6,
- 10,-1,0,285,290,1,0,0,0,286,287,3,18,9,0,287,288,6,10,-1,0,288,290,1,0,
- 0,0,289,274,1,0,0,0,289,278,1,0,0,0,289,282,1,0,0,0,289,286,1,0,0,0,290,
- 21,1,0,0,0,291,292,3,20,10,0,292,307,6,11,-1,0,293,294,5,35,0,0,294,295,
- 3,20,10,0,295,296,6,11,-1,0,296,306,1,0,0,0,297,298,5,36,0,0,298,299,3,
- 20,10,0,299,300,6,11,-1,0,300,306,1,0,0,0,301,302,7,1,0,0,302,303,3,34,
- 17,0,303,304,6,11,-1,0,304,306,1,0,0,0,305,293,1,0,0,0,305,297,1,0,0,0,
- 305,301,1,0,0,0,306,309,1,0,0,0,307,305,1,0,0,0,307,308,1,0,0,0,308,23,
- 1,0,0,0,309,307,1,0,0,0,310,311,3,22,11,0,311,322,6,12,-1,0,312,313,5,
- 37,0,0,313,314,3,22,11,0,314,315,6,12,-1,0,315,321,1,0,0,0,316,317,5,37,
- 0,0,317,318,3,34,17,0,318,319,6,12,-1,0,319,321,1,0,0,0,320,312,1,0,0,
- 0,320,316,1,0,0,0,321,324,1,0,0,0,322,320,1,0,0,0,322,323,1,0,0,0,323,
- 25,1,0,0,0,324,322,1,0,0,0,325,326,3,24,12,0,326,337,6,13,-1,0,327,328,
- 5,38,0,0,328,329,3,24,12,0,329,330,6,13,-1,0,330,336,1,0,0,0,331,332,5,
- 38,0,0,332,333,3,34,17,0,333,334,6,13,-1,0,334,336,1,0,0,0,335,327,1,0,
- 0,0,335,331,1,0,0,0,336,339,1,0,0,0,337,335,1,0,0,0,337,338,1,0,0,0,338,
- 27,1,0,0,0,339,337,1,0,0,0,340,341,3,26,13,0,341,356,6,14,-1,0,342,343,
- 5,39,0,0,343,344,3,26,13,0,344,345,6,14,-1,0,345,355,1,0,0,0,346,347,5,
- 40,0,0,347,348,3,26,13,0,348,349,6,14,-1,0,349,355,1,0,0,0,350,351,7,2,
- 0,0,351,352,3,34,17,0,352,353,6,14,-1,0,353,355,1,0,0,0,354,342,1,0,0,
- 0,354,346,1,0,0,0,354,350,1,0,0,0,355,358,1,0,0,0,356,354,1,0,0,0,356,
- 357,1,0,0,0,357,29,1,0,0,0,358,356,1,0,0,0,359,360,3,28,14,0,360,365,6,
- 15,-1,0,361,362,5,41,0,0,362,363,3,30,15,0,363,364,6,15,-1,0,364,366,1,
- 0,0,0,365,361,1,0,0,0,365,366,1,0,0,0,366,31,1,0,0,0,367,368,3,30,15,0,
- 368,373,6,16,-1,0,369,370,5,42,0,0,370,371,3,32,16,0,371,372,6,16,-1,0,
- 372,374,1,0,0,0,373,369,1,0,0,0,373,374,1,0,0,0,374,379,1,0,0,0,375,376,
- 3,34,17,0,376,377,6,16,-1,0,377,379,1,0,0,0,378,367,1,0,0,0,378,375,1,
- 0,0,0,379,33,1,0,0,0,380,381,3,36,18,0,381,382,3,38,19,0,382,383,5,43,
- 0,0,383,384,3,32,16,0,384,385,6,17,-1,0,385,35,1,0,0,0,386,387,7,3,0,0,
- 387,393,6,18,-1,0,388,389,7,4,0,0,389,393,6,18,-1,0,390,391,7,5,0,0,391,
- 393,6,18,-1,0,392,386,1,0,0,0,392,388,1,0,0,0,392,390,1,0,0,0,393,37,1,
- 0,0,0,394,395,3,16,8,0,395,402,6,19,-1,0,396,397,5,50,0,0,397,398,3,16,
- 8,0,398,399,6,19,-1,0,399,401,1,0,0,0,400,396,1,0,0,0,401,404,1,0,0,0,
- 402,400,1,0,0,0,402,403,1,0,0,0,403,405,1,0,0,0,404,402,1,0,0,0,405,406,
- 6,19,-1,0,406,39,1,0,0,0,407,408,3,32,16,0,408,415,6,20,-1,0,409,410,5,
- 50,0,0,410,411,3,32,16,0,411,412,6,20,-1,0,412,414,1,0,0,0,413,409,1,0,
- 0,0,414,417,1,0,0,0,415,413,1,0,0,0,415,416,1,0,0,0,416,419,1,0,0,0,417,
- 415,1,0,0,0,418,407,1,0,0,0,418,419,1,0,0,0,419,41,1,0,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,437,1,0,0,0,427,433,5,50,0,0,428,
- 429,3,32,16,0,429,430,6,21,-1,0,430,434,1,0,0,0,431,432,7,0,0,0,432,434,
- 6,21,-1,0,433,428,1,0,0,0,433,431,1,0,0,0,434,436,1,0,0,0,435,427,1,0,
- 0,0,436,439,1,0,0,0,437,435,1,0,0,0,437,438,1,0,0,0,438,441,1,0,0,0,439,
- 437,1,0,0,0,440,425,1,0,0,0,440,441,1,0,0,0,441,43,1,0,0,0,442,443,3,32,
- 16,0,443,444,6,22,-1,0,444,445,5,51,0,0,445,446,3,32,16,0,446,447,6,22,
- -1,0,447,45,1,0,0,0,448,449,3,32,16,0,449,450,6,23,-1,0,450,451,5,43,0,
- 0,451,452,3,32,16,0,452,453,6,23,-1,0,453,47,1,0,0,0,454,455,5,52,0,0,
- 455,1363,6,24,-1,0,456,457,5,53,0,0,457,1363,6,24,-1,0,458,459,5,234,0,
- 0,459,1363,6,24,-1,0,460,461,5,231,0,0,461,1363,6,24,-1,0,462,463,5,233,
- 0,0,463,1363,6,24,-1,0,464,465,5,232,0,0,465,1363,6,24,-1,0,466,467,5,
- 235,0,0,467,1363,6,24,-1,0,468,469,5,54,0,0,469,470,3,32,16,0,470,471,
- 5,55,0,0,471,472,6,24,-1,0,472,1363,1,0,0,0,473,474,5,56,0,0,474,475,3,
- 48,24,0,475,476,6,24,-1,0,476,1363,1,0,0,0,477,478,5,57,0,0,478,479,3,
- 40,20,0,479,480,5,58,0,0,480,481,6,24,-1,0,481,1363,1,0,0,0,482,483,5,
- 57,0,0,483,484,3,40,20,0,484,485,5,59,0,0,485,486,6,24,-1,0,486,1363,1,
- 0,0,0,487,488,5,32,0,0,488,489,3,44,22,0,489,490,5,33,0,0,490,491,6,24,
- -1,0,491,1363,1,0,0,0,492,493,5,57,0,0,493,494,3,44,22,0,494,495,5,33,
- 0,0,495,496,6,24,-1,0,496,1363,1,0,0,0,497,498,5,57,0,0,498,499,3,44,22,
- 0,499,500,5,59,0,0,500,501,6,24,-1,0,501,1363,1,0,0,0,502,503,5,32,0,0,
- 503,504,3,44,22,0,504,505,5,59,0,0,505,506,6,24,-1,0,506,1363,1,0,0,0,
- 507,508,5,32,0,0,508,509,3,32,16,0,509,510,5,33,0,0,510,511,6,24,-1,0,
- 511,1363,1,0,0,0,512,513,5,60,0,0,513,514,3,46,23,0,514,515,5,61,0,0,515,
- 516,6,24,-1,0,516,1363,1,0,0,0,517,518,5,60,0,0,518,519,3,42,21,0,519,
- 520,5,61,0,0,520,521,6,24,-1,0,521,1363,1,0,0,0,522,523,5,62,0,0,523,524,
- 3,40,20,0,524,525,5,33,0,0,525,526,6,24,-1,0,526,1363,1,0,0,0,527,528,
- 5,63,0,0,528,529,3,40,20,0,529,530,5,33,0,0,530,531,6,24,-1,0,531,1363,
- 1,0,0,0,532,533,5,64,0,0,533,534,3,40,20,0,534,535,5,33,0,0,535,536,6,
- 24,-1,0,536,1363,1,0,0,0,537,538,5,65,0,0,538,539,3,40,20,0,539,540,5,
- 33,0,0,540,541,6,24,-1,0,541,1363,1,0,0,0,542,543,5,66,0,0,543,544,3,40,
- 20,0,544,545,5,33,0,0,545,546,6,24,-1,0,546,1363,1,0,0,0,547,548,5,67,
- 0,0,548,549,3,40,20,0,549,550,5,33,0,0,550,551,6,24,-1,0,551,1363,1,0,
- 0,0,552,553,5,68,0,0,553,554,3,40,20,0,554,555,5,33,0,0,555,556,6,24,-1,
- 0,556,1363,1,0,0,0,557,558,5,69,0,0,558,559,3,40,20,0,559,560,5,33,0,0,
- 560,561,6,24,-1,0,561,1363,1,0,0,0,562,563,5,70,0,0,563,564,3,40,20,0,
- 564,565,5,33,0,0,565,566,6,24,-1,0,566,1363,1,0,0,0,567,568,5,71,0,0,568,
- 569,3,40,20,0,569,570,5,33,0,0,570,571,6,24,-1,0,571,1363,1,0,0,0,572,
- 573,5,72,0,0,573,574,3,40,20,0,574,575,5,33,0,0,575,576,6,24,-1,0,576,
- 1363,1,0,0,0,577,578,5,73,0,0,578,579,3,40,20,0,579,580,5,33,0,0,580,581,
- 6,24,-1,0,581,1363,1,0,0,0,582,583,5,74,0,0,583,584,3,40,20,0,584,585,
- 5,33,0,0,585,586,6,24,-1,0,586,1363,1,0,0,0,587,588,5,75,0,0,588,589,3,
- 40,20,0,589,590,5,33,0,0,590,591,6,24,-1,0,591,1363,1,0,0,0,592,593,5,
- 76,0,0,593,594,3,40,20,0,594,595,5,33,0,0,595,596,6,24,-1,0,596,1363,1,
- 0,0,0,597,598,5,77,0,0,598,599,3,40,20,0,599,600,5,33,0,0,600,601,6,24,
- -1,0,601,1363,1,0,0,0,602,603,5,78,0,0,603,604,3,40,20,0,604,605,5,33,
- 0,0,605,606,6,24,-1,0,606,1363,1,0,0,0,607,608,5,79,0,0,608,609,3,40,20,
- 0,609,610,5,33,0,0,610,611,6,24,-1,0,611,1363,1,0,0,0,612,613,5,80,0,0,
- 613,614,3,40,20,0,614,615,5,33,0,0,615,616,6,24,-1,0,616,1363,1,0,0,0,
- 617,618,5,81,0,0,618,619,3,40,20,0,619,620,5,33,0,0,620,621,6,24,-1,0,
- 621,1363,1,0,0,0,622,623,5,82,0,0,623,624,3,40,20,0,624,625,5,33,0,0,625,
- 626,6,24,-1,0,626,1363,1,0,0,0,627,628,5,83,0,0,628,629,3,40,20,0,629,
- 630,5,33,0,0,630,631,6,24,-1,0,631,1363,1,0,0,0,632,633,5,84,0,0,633,634,
- 3,40,20,0,634,635,5,33,0,0,635,636,6,24,-1,0,636,1363,1,0,0,0,637,638,
- 5,85,0,0,638,639,3,40,20,0,639,640,5,33,0,0,640,641,6,24,-1,0,641,1363,
- 1,0,0,0,642,643,5,86,0,0,643,644,3,40,20,0,644,645,5,33,0,0,645,646,6,
- 24,-1,0,646,1363,1,0,0,0,647,648,5,87,0,0,648,649,3,40,20,0,649,650,5,
- 33,0,0,650,651,6,24,-1,0,651,1363,1,0,0,0,652,653,5,88,0,0,653,654,3,40,
- 20,0,654,655,5,33,0,0,655,656,6,24,-1,0,656,1363,1,0,0,0,657,658,5,89,
- 0,0,658,659,3,40,20,0,659,660,5,33,0,0,660,661,6,24,-1,0,661,1363,1,0,
- 0,0,662,663,5,90,0,0,663,664,3,40,20,0,664,665,5,33,0,0,665,666,6,24,-1,
- 0,666,1363,1,0,0,0,667,668,5,91,0,0,668,669,3,40,20,0,669,670,5,33,0,0,
- 670,671,6,24,-1,0,671,1363,1,0,0,0,672,673,5,92,0,0,673,674,3,40,20,0,
- 674,675,5,33,0,0,675,676,6,24,-1,0,676,1363,1,0,0,0,677,678,5,93,0,0,678,
- 679,3,40,20,0,679,680,5,33,0,0,680,681,6,24,-1,0,681,1363,1,0,0,0,682,
- 683,5,94,0,0,683,684,3,40,20,0,684,685,5,33,0,0,685,686,6,24,-1,0,686,
- 1363,1,0,0,0,687,688,5,95,0,0,688,689,3,40,20,0,689,690,5,33,0,0,690,691,
- 6,24,-1,0,691,1363,1,0,0,0,692,693,5,96,0,0,693,694,3,40,20,0,694,695,
- 5,33,0,0,695,696,6,24,-1,0,696,1363,1,0,0,0,697,698,5,97,0,0,698,699,3,
- 40,20,0,699,700,5,33,0,0,700,701,6,24,-1,0,701,1363,1,0,0,0,702,703,5,
- 98,0,0,703,704,3,40,20,0,704,705,5,33,0,0,705,706,6,24,-1,0,706,1363,1,
- 0,0,0,707,708,5,99,0,0,708,709,3,40,20,0,709,710,5,33,0,0,710,711,6,24,
- -1,0,711,1363,1,0,0,0,712,713,5,100,0,0,713,714,3,40,20,0,714,715,5,33,
- 0,0,715,716,6,24,-1,0,716,1363,1,0,0,0,717,718,5,101,0,0,718,719,3,40,
- 20,0,719,720,5,33,0,0,720,721,6,24,-1,0,721,1363,1,0,0,0,722,723,5,102,
- 0,0,723,724,3,40,20,0,724,725,5,33,0,0,725,726,6,24,-1,0,726,1363,1,0,
- 0,0,727,728,5,103,0,0,728,729,3,40,20,0,729,730,5,33,0,0,730,731,6,24,
- -1,0,731,1363,1,0,0,0,732,733,5,104,0,0,733,734,3,40,20,0,734,735,5,33,
- 0,0,735,736,6,24,-1,0,736,1363,1,0,0,0,737,738,5,105,0,0,738,739,3,40,
- 20,0,739,740,5,33,0,0,740,741,6,24,-1,0,741,1363,1,0,0,0,742,743,5,106,
- 0,0,743,744,3,40,20,0,744,745,5,33,0,0,745,746,6,24,-1,0,746,1363,1,0,
- 0,0,747,748,5,107,0,0,748,749,3,40,20,0,749,750,5,33,0,0,750,751,6,24,
- -1,0,751,1363,1,0,0,0,752,753,5,108,0,0,753,754,3,40,20,0,754,755,5,33,
- 0,0,755,756,6,24,-1,0,756,1363,1,0,0,0,757,758,5,109,0,0,758,759,3,40,
- 20,0,759,760,5,33,0,0,760,761,6,24,-1,0,761,1363,1,0,0,0,762,763,5,110,
- 0,0,763,764,3,40,20,0,764,765,5,33,0,0,765,766,6,24,-1,0,766,1363,1,0,
- 0,0,767,768,5,111,0,0,768,769,3,40,20,0,769,770,5,33,0,0,770,771,6,24,
- -1,0,771,1363,1,0,0,0,772,773,5,112,0,0,773,774,3,40,20,0,774,775,5,33,
- 0,0,775,776,6,24,-1,0,776,1363,1,0,0,0,777,778,5,113,0,0,778,779,3,40,
- 20,0,779,780,5,33,0,0,780,781,6,24,-1,0,781,1363,1,0,0,0,782,783,5,114,
- 0,0,783,784,3,40,20,0,784,785,5,33,0,0,785,786,6,24,-1,0,786,1363,1,0,
- 0,0,787,788,5,115,0,0,788,789,3,40,20,0,789,790,5,33,0,0,790,791,6,24,
- -1,0,791,1363,1,0,0,0,792,793,5,116,0,0,793,794,3,40,20,0,794,795,5,33,
- 0,0,795,796,6,24,-1,0,796,1363,1,0,0,0,797,798,5,117,0,0,798,799,3,40,
- 20,0,799,800,5,33,0,0,800,801,6,24,-1,0,801,1363,1,0,0,0,802,803,5,118,
- 0,0,803,804,3,40,20,0,804,805,5,33,0,0,805,806,6,24,-1,0,806,1363,1,0,
- 0,0,807,808,5,119,0,0,808,809,3,40,20,0,809,810,5,33,0,0,810,811,6,24,
- -1,0,811,1363,1,0,0,0,812,813,5,120,0,0,813,814,3,40,20,0,814,815,5,33,
- 0,0,815,816,6,24,-1,0,816,1363,1,0,0,0,817,818,5,121,0,0,818,819,3,40,
- 20,0,819,820,5,33,0,0,820,821,6,24,-1,0,821,1363,1,0,0,0,822,823,5,122,
- 0,0,823,824,3,40,20,0,824,825,5,33,0,0,825,826,6,24,-1,0,826,1363,1,0,
- 0,0,827,828,5,123,0,0,828,829,3,40,20,0,829,830,5,33,0,0,830,831,6,24,
- -1,0,831,1363,1,0,0,0,832,833,5,124,0,0,833,834,3,40,20,0,834,835,5,33,
- 0,0,835,836,6,24,-1,0,836,1363,1,0,0,0,837,838,5,125,0,0,838,839,3,40,
- 20,0,839,840,5,33,0,0,840,841,6,24,-1,0,841,1363,1,0,0,0,842,843,5,126,
- 0,0,843,844,3,40,20,0,844,845,5,33,0,0,845,846,6,24,-1,0,846,1363,1,0,
- 0,0,847,848,5,127,0,0,848,849,3,40,20,0,849,850,5,33,0,0,850,851,6,24,
- -1,0,851,1363,1,0,0,0,852,853,5,128,0,0,853,854,3,40,20,0,854,855,5,33,
- 0,0,855,856,6,24,-1,0,856,1363,1,0,0,0,857,858,5,129,0,0,858,859,3,40,
- 20,0,859,860,5,33,0,0,860,861,6,24,-1,0,861,1363,1,0,0,0,862,863,5,130,
- 0,0,863,864,3,40,20,0,864,865,5,33,0,0,865,866,6,24,-1,0,866,1363,1,0,
- 0,0,867,868,5,131,0,0,868,869,3,40,20,0,869,870,5,33,0,0,870,871,6,24,
- -1,0,871,1363,1,0,0,0,872,873,5,132,0,0,873,874,3,40,20,0,874,875,5,33,
- 0,0,875,876,6,24,-1,0,876,1363,1,0,0,0,877,878,5,133,0,0,878,879,3,40,
- 20,0,879,880,5,33,0,0,880,881,6,24,-1,0,881,1363,1,0,0,0,882,883,5,134,
- 0,0,883,884,3,40,20,0,884,885,5,33,0,0,885,886,6,24,-1,0,886,1363,1,0,
- 0,0,887,888,5,135,0,0,888,889,3,40,20,0,889,890,5,33,0,0,890,891,6,24,
- -1,0,891,1363,1,0,0,0,892,893,5,136,0,0,893,894,3,40,20,0,894,895,5,33,
- 0,0,895,896,6,24,-1,0,896,1363,1,0,0,0,897,898,5,137,0,0,898,899,3,40,
- 20,0,899,900,5,33,0,0,900,901,6,24,-1,0,901,1363,1,0,0,0,902,903,5,138,
- 0,0,903,904,3,40,20,0,904,905,5,33,0,0,905,906,6,24,-1,0,906,1363,1,0,
- 0,0,907,908,5,139,0,0,908,909,3,40,20,0,909,910,5,33,0,0,910,911,6,24,
- -1,0,911,1363,1,0,0,0,912,913,5,140,0,0,913,914,3,40,20,0,914,915,5,33,
- 0,0,915,916,6,24,-1,0,916,1363,1,0,0,0,917,918,5,141,0,0,918,919,3,40,
- 20,0,919,920,5,33,0,0,920,921,6,24,-1,0,921,1363,1,0,0,0,922,923,5,142,
- 0,0,923,924,3,40,20,0,924,925,5,33,0,0,925,926,6,24,-1,0,926,1363,1,0,
- 0,0,927,928,5,143,0,0,928,929,3,40,20,0,929,930,5,33,0,0,930,931,6,24,
- -1,0,931,1363,1,0,0,0,932,933,5,144,0,0,933,934,3,40,20,0,934,935,5,33,
- 0,0,935,936,6,24,-1,0,936,1363,1,0,0,0,937,938,5,145,0,0,938,939,3,40,
- 20,0,939,940,5,33,0,0,940,941,6,24,-1,0,941,1363,1,0,0,0,942,943,5,146,
- 0,0,943,944,3,40,20,0,944,945,5,33,0,0,945,946,6,24,-1,0,946,1363,1,0,
- 0,0,947,948,5,147,0,0,948,949,3,40,20,0,949,950,5,33,0,0,950,951,6,24,
- -1,0,951,1363,1,0,0,0,952,953,5,148,0,0,953,954,3,40,20,0,954,955,5,33,
- 0,0,955,956,6,24,-1,0,956,1363,1,0,0,0,957,958,5,149,0,0,958,959,3,40,
- 20,0,959,960,5,33,0,0,960,961,6,24,-1,0,961,1363,1,0,0,0,962,963,5,150,
- 0,0,963,964,3,40,20,0,964,965,5,33,0,0,965,966,6,24,-1,0,966,1363,1,0,
- 0,0,967,968,5,151,0,0,968,969,3,40,20,0,969,970,5,33,0,0,970,971,6,24,
- -1,0,971,1363,1,0,0,0,972,973,5,152,0,0,973,974,3,40,20,0,974,975,5,33,
- 0,0,975,976,6,24,-1,0,976,1363,1,0,0,0,977,978,5,153,0,0,978,979,3,40,
- 20,0,979,980,5,33,0,0,980,981,6,24,-1,0,981,1363,1,0,0,0,982,983,5,154,
- 0,0,983,984,3,40,20,0,984,985,5,33,0,0,985,986,6,24,-1,0,986,1363,1,0,
- 0,0,987,988,5,155,0,0,988,989,3,40,20,0,989,990,5,33,0,0,990,991,6,24,
- -1,0,991,1363,1,0,0,0,992,993,5,156,0,0,993,994,3,40,20,0,994,995,5,33,
- 0,0,995,996,6,24,-1,0,996,1363,1,0,0,0,997,998,5,157,0,0,998,999,3,40,
- 20,0,999,1000,5,33,0,0,1000,1001,6,24,-1,0,1001,1363,1,0,0,0,1002,1003,
- 5,158,0,0,1003,1004,3,40,20,0,1004,1005,5,33,0,0,1005,1006,6,24,-1,0,1006,
- 1363,1,0,0,0,1007,1008,5,159,0,0,1008,1009,3,40,20,0,1009,1010,5,33,0,
- 0,1010,1011,6,24,-1,0,1011,1363,1,0,0,0,1012,1013,5,160,0,0,1013,1014,
- 3,40,20,0,1014,1015,5,33,0,0,1015,1016,6,24,-1,0,1016,1363,1,0,0,0,1017,
- 1018,5,161,0,0,1018,1019,3,40,20,0,1019,1020,5,33,0,0,1020,1021,6,24,-1,
- 0,1021,1363,1,0,0,0,1022,1023,5,162,0,0,1023,1024,3,40,20,0,1024,1025,
- 5,33,0,0,1025,1026,6,24,-1,0,1026,1363,1,0,0,0,1027,1028,5,163,0,0,1028,
- 1029,3,40,20,0,1029,1030,5,33,0,0,1030,1031,6,24,-1,0,1031,1363,1,0,0,
- 0,1032,1033,5,164,0,0,1033,1034,3,40,20,0,1034,1035,5,33,0,0,1035,1036,
- 6,24,-1,0,1036,1363,1,0,0,0,1037,1038,5,165,0,0,1038,1039,3,40,20,0,1039,
- 1040,5,33,0,0,1040,1041,6,24,-1,0,1041,1363,1,0,0,0,1042,1043,5,166,0,
- 0,1043,1044,3,40,20,0,1044,1045,5,33,0,0,1045,1046,6,24,-1,0,1046,1363,
- 1,0,0,0,1047,1048,5,167,0,0,1048,1049,3,40,20,0,1049,1050,5,33,0,0,1050,
- 1051,6,24,-1,0,1051,1363,1,0,0,0,1052,1053,5,168,0,0,1053,1054,3,40,20,
- 0,1054,1055,5,33,0,0,1055,1056,6,24,-1,0,1056,1363,1,0,0,0,1057,1058,5,
- 169,0,0,1058,1059,3,40,20,0,1059,1060,5,33,0,0,1060,1061,6,24,-1,0,1061,
- 1363,1,0,0,0,1062,1063,5,170,0,0,1063,1064,3,40,20,0,1064,1065,5,33,0,
- 0,1065,1066,6,24,-1,0,1066,1363,1,0,0,0,1067,1068,5,171,0,0,1068,1069,
- 3,40,20,0,1069,1070,5,33,0,0,1070,1071,6,24,-1,0,1071,1363,1,0,0,0,1072,
- 1073,5,172,0,0,1073,1074,3,40,20,0,1074,1075,5,33,0,0,1075,1076,6,24,-1,
- 0,1076,1363,1,0,0,0,1077,1078,5,173,0,0,1078,1079,3,40,20,0,1079,1080,
- 5,33,0,0,1080,1081,6,24,-1,0,1081,1363,1,0,0,0,1082,1083,5,174,0,0,1083,
- 1084,3,40,20,0,1084,1085,5,33,0,0,1085,1086,6,24,-1,0,1086,1363,1,0,0,
- 0,1087,1088,5,175,0,0,1088,1089,3,40,20,0,1089,1090,5,33,0,0,1090,1091,
- 6,24,-1,0,1091,1363,1,0,0,0,1092,1093,5,176,0,0,1093,1094,3,40,20,0,1094,
- 1095,5,33,0,0,1095,1096,6,24,-1,0,1096,1363,1,0,0,0,1097,1098,5,177,0,
- 0,1098,1099,3,40,20,0,1099,1100,5,33,0,0,1100,1101,6,24,-1,0,1101,1363,
- 1,0,0,0,1102,1103,5,178,0,0,1103,1104,3,40,20,0,1104,1105,5,33,0,0,1105,
- 1106,6,24,-1,0,1106,1363,1,0,0,0,1107,1108,5,179,0,0,1108,1109,3,40,20,
- 0,1109,1110,5,33,0,0,1110,1111,6,24,-1,0,1111,1363,1,0,0,0,1112,1113,5,
- 180,0,0,1113,1114,3,40,20,0,1114,1115,5,33,0,0,1115,1116,6,24,-1,0,1116,
- 1363,1,0,0,0,1117,1118,5,181,0,0,1118,1119,3,40,20,0,1119,1120,5,33,0,
- 0,1120,1121,6,24,-1,0,1121,1363,1,0,0,0,1122,1123,5,182,0,0,1123,1124,
- 3,40,20,0,1124,1125,5,33,0,0,1125,1126,6,24,-1,0,1126,1363,1,0,0,0,1127,
- 1128,5,183,0,0,1128,1129,3,40,20,0,1129,1130,5,33,0,0,1130,1131,6,24,-1,
- 0,1131,1363,1,0,0,0,1132,1133,5,184,0,0,1133,1134,3,40,20,0,1134,1135,
- 5,33,0,0,1135,1136,6,24,-1,0,1136,1363,1,0,0,0,1137,1138,5,185,0,0,1138,
- 1139,3,40,20,0,1139,1140,5,33,0,0,1140,1141,6,24,-1,0,1141,1363,1,0,0,
- 0,1142,1143,5,186,0,0,1143,1144,3,40,20,0,1144,1145,5,33,0,0,1145,1146,
- 6,24,-1,0,1146,1363,1,0,0,0,1147,1148,5,187,0,0,1148,1149,3,40,20,0,1149,
- 1150,5,33,0,0,1150,1151,6,24,-1,0,1151,1363,1,0,0,0,1152,1153,5,188,0,
- 0,1153,1154,3,40,20,0,1154,1155,5,33,0,0,1155,1156,6,24,-1,0,1156,1363,
- 1,0,0,0,1157,1158,5,189,0,0,1158,1159,3,40,20,0,1159,1160,5,33,0,0,1160,
- 1161,6,24,-1,0,1161,1363,1,0,0,0,1162,1163,5,190,0,0,1163,1164,3,40,20,
- 0,1164,1165,5,33,0,0,1165,1166,6,24,-1,0,1166,1363,1,0,0,0,1167,1168,5,
- 191,0,0,1168,1169,3,40,20,0,1169,1170,5,33,0,0,1170,1171,6,24,-1,0,1171,
- 1363,1,0,0,0,1172,1173,5,192,0,0,1173,1174,3,40,20,0,1174,1175,5,33,0,
- 0,1175,1176,6,24,-1,0,1176,1363,1,0,0,0,1177,1178,5,193,0,0,1178,1179,
- 3,40,20,0,1179,1180,5,33,0,0,1180,1181,6,24,-1,0,1181,1363,1,0,0,0,1182,
- 1183,5,194,0,0,1183,1184,3,40,20,0,1184,1185,5,33,0,0,1185,1186,6,24,-1,
- 0,1186,1363,1,0,0,0,1187,1188,5,195,0,0,1188,1189,3,40,20,0,1189,1190,
- 5,33,0,0,1190,1191,6,24,-1,0,1191,1363,1,0,0,0,1192,1193,5,196,0,0,1193,
- 1194,3,40,20,0,1194,1195,5,33,0,0,1195,1196,6,24,-1,0,1196,1363,1,0,0,
- 0,1197,1198,5,197,0,0,1198,1199,3,40,20,0,1199,1200,5,33,0,0,1200,1201,
- 6,24,-1,0,1201,1363,1,0,0,0,1202,1203,5,198,0,0,1203,1204,3,40,20,0,1204,
- 1205,5,33,0,0,1205,1206,6,24,-1,0,1206,1363,1,0,0,0,1207,1208,5,199,0,
- 0,1208,1209,3,40,20,0,1209,1210,5,33,0,0,1210,1211,6,24,-1,0,1211,1363,
- 1,0,0,0,1212,1213,5,200,0,0,1213,1214,3,40,20,0,1214,1215,5,33,0,0,1215,
- 1216,6,24,-1,0,1216,1363,1,0,0,0,1217,1218,5,201,0,0,1218,1219,3,40,20,
- 0,1219,1220,5,33,0,0,1220,1221,6,24,-1,0,1221,1363,1,0,0,0,1222,1223,5,
- 202,0,0,1223,1224,3,40,20,0,1224,1225,5,33,0,0,1225,1226,6,24,-1,0,1226,
- 1363,1,0,0,0,1227,1228,5,203,0,0,1228,1229,3,40,20,0,1229,1230,5,33,0,
- 0,1230,1231,6,24,-1,0,1231,1363,1,0,0,0,1232,1233,5,204,0,0,1233,1234,
- 3,40,20,0,1234,1235,5,33,0,0,1235,1236,6,24,-1,0,1236,1363,1,0,0,0,1237,
- 1238,5,205,0,0,1238,1239,3,40,20,0,1239,1240,5,33,0,0,1240,1241,6,24,-1,
- 0,1241,1363,1,0,0,0,1242,1243,5,206,0,0,1243,1244,3,40,20,0,1244,1245,
- 5,33,0,0,1245,1246,6,24,-1,0,1246,1363,1,0,0,0,1247,1248,5,207,0,0,1248,
- 1249,3,40,20,0,1249,1250,5,33,0,0,1250,1251,6,24,-1,0,1251,1363,1,0,0,
- 0,1252,1253,5,208,0,0,1253,1254,3,40,20,0,1254,1255,5,33,0,0,1255,1256,
- 6,24,-1,0,1256,1363,1,0,0,0,1257,1258,5,209,0,0,1258,1259,3,40,20,0,1259,
- 1260,5,33,0,0,1260,1261,6,24,-1,0,1261,1363,1,0,0,0,1262,1263,5,210,0,
- 0,1263,1264,3,40,20,0,1264,1265,5,33,0,0,1265,1266,6,24,-1,0,1266,1363,
- 1,0,0,0,1267,1268,5,211,0,0,1268,1269,3,40,20,0,1269,1270,5,33,0,0,1270,
- 1271,6,24,-1,0,1271,1363,1,0,0,0,1272,1273,5,212,0,0,1273,1274,3,40,20,
- 0,1274,1275,5,33,0,0,1275,1276,6,24,-1,0,1276,1363,1,0,0,0,1277,1278,5,
- 213,0,0,1278,1279,3,40,20,0,1279,1280,5,33,0,0,1280,1281,6,24,-1,0,1281,
- 1363,1,0,0,0,1282,1283,5,214,0,0,1283,1284,3,40,20,0,1284,1285,5,33,0,
- 0,1285,1286,6,24,-1,0,1286,1363,1,0,0,0,1287,1288,5,215,0,0,1288,1289,
- 3,40,20,0,1289,1290,5,33,0,0,1290,1291,6,24,-1,0,1291,1363,1,0,0,0,1292,
- 1293,5,216,0,0,1293,1294,3,40,20,0,1294,1295,5,33,0,0,1295,1296,6,24,-1,
- 0,1296,1363,1,0,0,0,1297,1298,5,217,0,0,1298,1299,3,40,20,0,1299,1300,
- 5,33,0,0,1300,1301,6,24,-1,0,1301,1363,1,0,0,0,1302,1303,5,218,0,0,1303,
- 1304,3,40,20,0,1304,1305,5,33,0,0,1305,1306,6,24,-1,0,1306,1363,1,0,0,
- 0,1307,1308,5,219,0,0,1308,1309,3,40,20,0,1309,1310,5,33,0,0,1310,1311,
- 6,24,-1,0,1311,1363,1,0,0,0,1312,1313,5,220,0,0,1313,1314,3,40,20,0,1314,
- 1315,5,33,0,0,1315,1316,6,24,-1,0,1316,1363,1,0,0,0,1317,1318,5,221,0,
- 0,1318,1319,3,40,20,0,1319,1320,5,33,0,0,1320,1321,6,24,-1,0,1321,1363,
- 1,0,0,0,1322,1323,5,222,0,0,1323,1324,3,40,20,0,1324,1325,5,33,0,0,1325,
- 1326,6,24,-1,0,1326,1363,1,0,0,0,1327,1328,5,223,0,0,1328,1329,3,40,20,
- 0,1329,1330,5,33,0,0,1330,1331,6,24,-1,0,1331,1363,1,0,0,0,1332,1333,5,
- 224,0,0,1333,1334,3,40,20,0,1334,1335,5,33,0,0,1335,1336,6,24,-1,0,1336,
- 1363,1,0,0,0,1337,1338,5,225,0,0,1338,1339,3,40,20,0,1339,1340,5,33,0,
- 0,1340,1341,6,24,-1,0,1341,1363,1,0,0,0,1342,1343,5,226,0,0,1343,1344,
- 3,40,20,0,1344,1345,5,33,0,0,1345,1346,6,24,-1,0,1346,1363,1,0,0,0,1347,
- 1348,5,227,0,0,1348,1349,3,40,20,0,1349,1350,5,33,0,0,1350,1351,6,24,-1,
- 0,1351,1363,1,0,0,0,1352,1353,5,228,0,0,1353,1354,3,40,20,0,1354,1355,
- 5,33,0,0,1355,1356,6,24,-1,0,1356,1363,1,0,0,0,1357,1358,5,229,0,0,1358,
- 1359,3,40,20,0,1359,1360,5,33,0,0,1360,1361,6,24,-1,0,1361,1363,1,0,0,
- 0,1362,454,1,0,0,0,1362,456,1,0,0,0,1362,458,1,0,0,0,1362,460,1,0,0,0,
- 1362,462,1,0,0,0,1362,464,1,0,0,0,1362,466,1,0,0,0,1362,468,1,0,0,0,1362,
- 473,1,0,0,0,1362,477,1,0,0,0,1362,482,1,0,0,0,1362,487,1,0,0,0,1362,492,
- 1,0,0,0,1362,497,1,0,0,0,1362,502,1,0,0,0,1362,507,1,0,0,0,1362,512,1,
- 0,0,0,1362,517,1,0,0,0,1362,522,1,0,0,0,1362,527,1,0,0,0,1362,532,1,0,
- 0,0,1362,537,1,0,0,0,1362,542,1,0,0,0,1362,547,1,0,0,0,1362,552,1,0,0,
- 0,1362,557,1,0,0,0,1362,562,1,0,0,0,1362,567,1,0,0,0,1362,572,1,0,0,0,
- 1362,577,1,0,0,0,1362,582,1,0,0,0,1362,587,1,0,0,0,1362,592,1,0,0,0,1362,
- 597,1,0,0,0,1362,602,1,0,0,0,1362,607,1,0,0,0,1362,612,1,0,0,0,1362,617,
- 1,0,0,0,1362,622,1,0,0,0,1362,627,1,0,0,0,1362,632,1,0,0,0,1362,637,1,
- 0,0,0,1362,642,1,0,0,0,1362,647,1,0,0,0,1362,652,1,0,0,0,1362,657,1,0,
- 0,0,1362,662,1,0,0,0,1362,667,1,0,0,0,1362,672,1,0,0,0,1362,677,1,0,0,
- 0,1362,682,1,0,0,0,1362,687,1,0,0,0,1362,692,1,0,0,0,1362,697,1,0,0,0,
- 1362,702,1,0,0,0,1362,707,1,0,0,0,1362,712,1,0,0,0,1362,717,1,0,0,0,1362,
- 722,1,0,0,0,1362,727,1,0,0,0,1362,732,1,0,0,0,1362,737,1,0,0,0,1362,742,
- 1,0,0,0,1362,747,1,0,0,0,1362,752,1,0,0,0,1362,757,1,0,0,0,1362,762,1,
- 0,0,0,1362,767,1,0,0,0,1362,772,1,0,0,0,1362,777,1,0,0,0,1362,782,1,0,
- 0,0,1362,787,1,0,0,0,1362,792,1,0,0,0,1362,797,1,0,0,0,1362,802,1,0,0,
- 0,1362,807,1,0,0,0,1362,812,1,0,0,0,1362,817,1,0,0,0,1362,822,1,0,0,0,
- 1362,827,1,0,0,0,1362,832,1,0,0,0,1362,837,1,0,0,0,1362,842,1,0,0,0,1362,
- 847,1,0,0,0,1362,852,1,0,0,0,1362,857,1,0,0,0,1362,862,1,0,0,0,1362,867,
- 1,0,0,0,1362,872,1,0,0,0,1362,877,1,0,0,0,1362,882,1,0,0,0,1362,887,1,
- 0,0,0,1362,892,1,0,0,0,1362,897,1,0,0,0,1362,902,1,0,0,0,1362,907,1,0,
- 0,0,1362,912,1,0,0,0,1362,917,1,0,0,0,1362,922,1,0,0,0,1362,927,1,0,0,
- 0,1362,932,1,0,0,0,1362,937,1,0,0,0,1362,942,1,0,0,0,1362,947,1,0,0,0,
- 1362,952,1,0,0,0,1362,957,1,0,0,0,1362,962,1,0,0,0,1362,967,1,0,0,0,1362,
- 972,1,0,0,0,1362,977,1,0,0,0,1362,982,1,0,0,0,1362,987,1,0,0,0,1362,992,
- 1,0,0,0,1362,997,1,0,0,0,1362,1002,1,0,0,0,1362,1007,1,0,0,0,1362,1012,
- 1,0,0,0,1362,1017,1,0,0,0,1362,1022,1,0,0,0,1362,1027,1,0,0,0,1362,1032,
- 1,0,0,0,1362,1037,1,0,0,0,1362,1042,1,0,0,0,1362,1047,1,0,0,0,1362,1052,
- 1,0,0,0,1362,1057,1,0,0,0,1362,1062,1,0,0,0,1362,1067,1,0,0,0,1362,1072,
- 1,0,0,0,1362,1077,1,0,0,0,1362,1082,1,0,0,0,1362,1087,1,0,0,0,1362,1092,
- 1,0,0,0,1362,1097,1,0,0,0,1362,1102,1,0,0,0,1362,1107,1,0,0,0,1362,1112,
- 1,0,0,0,1362,1117,1,0,0,0,1362,1122,1,0,0,0,1362,1127,1,0,0,0,1362,1132,
- 1,0,0,0,1362,1137,1,0,0,0,1362,1142,1,0,0,0,1362,1147,1,0,0,0,1362,1152,
- 1,0,0,0,1362,1157,1,0,0,0,1362,1162,1,0,0,0,1362,1167,1,0,0,0,1362,1172,
- 1,0,0,0,1362,1177,1,0,0,0,1362,1182,1,0,0,0,1362,1187,1,0,0,0,1362,1192,
- 1,0,0,0,1362,1197,1,0,0,0,1362,1202,1,0,0,0,1362,1207,1,0,0,0,1362,1212,
- 1,0,0,0,1362,1217,1,0,0,0,1362,1222,1,0,0,0,1362,1227,1,0,0,0,1362,1232,
- 1,0,0,0,1362,1237,1,0,0,0,1362,1242,1,0,0,0,1362,1247,1,0,0,0,1362,1252,
- 1,0,0,0,1362,1257,1,0,0,0,1362,1262,1,0,0,0,1362,1267,1,0,0,0,1362,1272,
- 1,0,0,0,1362,1277,1,0,0,0,1362,1282,1,0,0,0,1362,1287,1,0,0,0,1362,1292,
- 1,0,0,0,1362,1297,1,0,0,0,1362,1302,1,0,0,0,1362,1307,1,0,0,0,1362,1312,
- 1,0,0,0,1362,1317,1,0,0,0,1362,1322,1,0,0,0,1362,1327,1,0,0,0,1362,1332,
- 1,0,0,0,1362,1337,1,0,0,0,1362,1342,1,0,0,0,1362,1347,1,0,0,0,1362,1352,
- 1,0,0,0,1362,1357,1,0,0,0,1363,49,1,0,0,0,1364,1365,3,32,16,0,1365,1366,
- 5,0,0,1,1366,1367,6,25,-1,0,1367,51,1,0,0,0,44,67,75,83,85,92,102,112,
- 117,127,137,139,152,158,160,175,177,198,200,233,235,254,261,270,289,305,
- 307,320,322,335,337,354,356,365,373,378,392,402,415,418,425,433,437,440,
- 1362
+ 2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,1,0,1,0,1,0,1,0,1,0,
+ 1,0,1,0,5,0,62,8,0,10,0,12,0,65,9,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,82,8,1,1,2,1,2,1,2,1,2,4,2,88,8,2,11,2,12,
+ 2,89,1,2,1,2,1,2,1,2,4,2,96,8,2,11,2,12,2,97,3,2,100,8,2,1,3,1,3,1,3,1,
+ 3,1,3,3,3,107,8,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,117,8,4,1,4,1,4,
+ 1,4,1,4,1,4,1,4,1,4,1,4,3,4,127,8,4,1,4,1,4,1,4,3,4,132,8,4,1,5,1,5,1,
+ 5,1,5,1,5,1,5,1,5,1,5,3,5,142,8,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,5,5,
+ 152,8,5,10,5,12,5,155,9,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,3,6,
+ 167,8,6,1,6,1,6,1,6,1,6,5,6,173,8,6,10,6,12,6,176,9,6,1,6,1,6,1,7,1,7,
+ 1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,5,7,190,8,7,10,7,12,7,193,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,5,8,213,
+ 8,8,10,8,12,8,216,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,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,5,9,248,8,9,10,9,12,9,251,9,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,1,10,3,10,269,8,10,1,10,1,10,1,10,5,
+ 10,274,8,10,10,10,12,10,277,9,10,1,10,1,10,1,10,1,10,1,10,1,10,3,10,285,
+ 8,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,
+ 1,11,1,11,1,11,1,11,3,11,304,8,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,
+ 12,1,12,1,12,1,12,1,12,1,12,1,12,5,12,320,8,12,10,12,12,12,323,9,12,1,
+ 13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,5,13,335,8,13,10,13,12,
+ 13,338,9,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,5,14,350,
+ 8,14,10,14,12,14,353,9,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,
+ 1,15,1,15,1,15,1,15,1,15,5,15,369,8,15,10,15,12,15,372,9,15,1,16,1,16,
+ 1,16,1,16,1,16,1,16,3,16,380,8,16,1,17,1,17,1,17,1,17,1,17,1,17,3,17,388,
+ 8,17,1,17,1,17,1,17,3,17,393,8,17,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,
+ 19,1,19,1,19,1,19,1,19,3,19,407,8,19,1,20,1,20,1,20,1,20,1,20,1,20,5,20,
+ 415,8,20,10,20,12,20,418,9,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,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,3,22,440,8,22,1,22,1,22,1,22,1,22,1,22,1,22,3,22,448,8,22,5,22,450,
+ 8,22,10,22,12,22,453,9,22,3,22,455,8,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,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,
+ 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,3,25,1382,8,25,1,26,1,26,
+ 1,26,1,26,1,26,0,0,27,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,52,0,6,1,0,10,11,1,0,37,38,1,0,41,42,1,0,46,47,
+ 1,0,48,49,1,0,50,51,1611,0,54,1,0,0,0,2,81,1,0,0,0,4,99,1,0,0,0,6,101,
+ 1,0,0,0,8,131,1,0,0,0,10,133,1,0,0,0,12,158,1,0,0,0,14,179,1,0,0,0,16,
+ 194,1,0,0,0,18,217,1,0,0,0,20,252,1,0,0,0,22,303,1,0,0,0,24,305,1,0,0,
+ 0,26,324,1,0,0,0,28,339,1,0,0,0,30,354,1,0,0,0,32,373,1,0,0,0,34,392,1,
+ 0,0,0,36,394,1,0,0,0,38,406,1,0,0,0,40,408,1,0,0,0,42,432,1,0,0,0,44,454,
+ 1,0,0,0,46,456,1,0,0,0,48,462,1,0,0,0,50,1381,1,0,0,0,52,1383,1,0,0,0,
+ 54,55,3,50,25,0,55,63,6,0,-1,0,56,57,5,1,0,0,57,58,3,42,21,0,58,59,5,2,
+ 0,0,59,60,6,0,-1,0,60,62,1,0,0,0,61,56,1,0,0,0,62,65,1,0,0,0,63,61,1,0,
+ 0,0,63,64,1,0,0,0,64,1,1,0,0,0,65,63,1,0,0,0,66,67,3,0,0,0,67,68,5,3,0,
+ 0,68,69,6,1,-1,0,69,82,1,0,0,0,70,71,3,0,0,0,71,72,5,4,0,0,72,73,6,1,-1,
+ 0,73,82,1,0,0,0,74,75,3,0,0,0,75,76,5,5,0,0,76,77,6,1,-1,0,77,82,1,0,0,
+ 0,78,79,3,0,0,0,79,80,6,1,-1,0,80,82,1,0,0,0,81,66,1,0,0,0,81,70,1,0,0,
+ 0,81,74,1,0,0,0,81,78,1,0,0,0,82,3,1,0,0,0,83,84,5,6,0,0,84,85,3,2,1,0,
+ 85,86,6,2,-1,0,86,88,1,0,0,0,87,83,1,0,0,0,88,89,1,0,0,0,89,87,1,0,0,0,
+ 89,90,1,0,0,0,90,100,1,0,0,0,91,92,5,6,0,0,92,93,3,8,4,0,93,94,6,2,-1,
+ 0,94,96,1,0,0,0,95,91,1,0,0,0,96,97,1,0,0,0,97,95,1,0,0,0,97,98,1,0,0,
+ 0,98,100,1,0,0,0,99,87,1,0,0,0,99,95,1,0,0,0,100,5,1,0,0,0,101,102,3,2,
+ 1,0,102,106,6,3,-1,0,103,104,3,4,2,0,104,105,6,3,-1,0,105,107,1,0,0,0,
+ 106,103,1,0,0,0,106,107,1,0,0,0,107,7,1,0,0,0,108,109,5,7,0,0,109,110,
+ 3,6,3,0,110,111,6,4,-1,0,111,117,1,0,0,0,112,113,5,8,0,0,113,114,3,6,3,
+ 0,114,115,6,4,-1,0,115,117,1,0,0,0,116,108,1,0,0,0,116,112,1,0,0,0,117,
+ 132,1,0,0,0,118,119,5,7,0,0,119,120,3,8,4,0,120,121,6,4,-1,0,121,127,1,
+ 0,0,0,122,123,5,8,0,0,123,124,3,8,4,0,124,125,6,4,-1,0,125,127,1,0,0,0,
+ 126,118,1,0,0,0,126,122,1,0,0,0,127,132,1,0,0,0,128,129,3,6,3,0,129,130,
+ 6,4,-1,0,130,132,1,0,0,0,131,116,1,0,0,0,131,126,1,0,0,0,131,128,1,0,0,
+ 0,132,9,1,0,0,0,133,134,3,8,4,0,134,153,6,5,-1,0,135,141,5,9,0,0,136,137,
+ 7,0,0,0,137,142,6,5,-1,0,138,139,3,8,4,0,139,140,6,5,-1,0,140,142,1,0,
+ 0,0,141,136,1,0,0,0,141,138,1,0,0,0,142,152,1,0,0,0,143,144,5,12,0,0,144,
+ 145,3,8,4,0,145,146,6,5,-1,0,146,152,1,0,0,0,147,148,5,13,0,0,148,149,
+ 3,8,4,0,149,150,6,5,-1,0,150,152,1,0,0,0,151,135,1,0,0,0,151,143,1,0,0,
+ 0,151,147,1,0,0,0,152,155,1,0,0,0,153,151,1,0,0,0,153,154,1,0,0,0,154,
+ 156,1,0,0,0,155,153,1,0,0,0,156,157,6,5,-1,0,157,11,1,0,0,0,158,159,3,
+ 10,5,0,159,174,6,6,-1,0,160,166,5,8,0,0,161,162,7,0,0,0,162,167,6,6,-1,
+ 0,163,164,3,10,5,0,164,165,6,6,-1,0,165,167,1,0,0,0,166,161,1,0,0,0,166,
+ 163,1,0,0,0,167,173,1,0,0,0,168,169,5,7,0,0,169,170,3,10,5,0,170,171,6,
+ 6,-1,0,171,173,1,0,0,0,172,160,1,0,0,0,172,168,1,0,0,0,173,176,1,0,0,0,
+ 174,172,1,0,0,0,174,175,1,0,0,0,175,177,1,0,0,0,176,174,1,0,0,0,177,178,
+ 6,6,-1,0,178,13,1,0,0,0,179,180,3,12,6,0,180,191,6,7,-1,0,181,182,5,14,
+ 0,0,182,183,3,12,6,0,183,184,6,7,-1,0,184,190,1,0,0,0,185,186,5,15,0,0,
+ 186,187,3,12,6,0,187,188,6,7,-1,0,188,190,1,0,0,0,189,181,1,0,0,0,189,
+ 185,1,0,0,0,190,193,1,0,0,0,191,189,1,0,0,0,191,192,1,0,0,0,192,15,1,0,
+ 0,0,193,191,1,0,0,0,194,195,3,14,7,0,195,214,6,8,-1,0,196,197,5,16,0,0,
+ 197,198,3,14,7,0,198,199,6,8,-1,0,199,213,1,0,0,0,200,201,5,17,0,0,201,
+ 202,3,14,7,0,202,203,6,8,-1,0,203,213,1,0,0,0,204,205,5,18,0,0,205,206,
+ 3,14,7,0,206,207,6,8,-1,0,207,213,1,0,0,0,208,209,5,19,0,0,209,210,3,14,
+ 7,0,210,211,6,8,-1,0,211,213,1,0,0,0,212,196,1,0,0,0,212,200,1,0,0,0,212,
+ 204,1,0,0,0,212,208,1,0,0,0,213,216,1,0,0,0,214,212,1,0,0,0,214,215,1,
+ 0,0,0,215,17,1,0,0,0,216,214,1,0,0,0,217,218,3,16,8,0,218,249,6,9,-1,0,
+ 219,220,5,20,0,0,220,221,3,16,8,0,221,222,6,9,-1,0,222,248,1,0,0,0,223,
+ 224,5,21,0,0,224,225,3,16,8,0,225,226,6,9,-1,0,226,248,1,0,0,0,227,228,
+ 5,22,0,0,228,229,3,16,8,0,229,230,6,9,-1,0,230,248,1,0,0,0,231,232,5,23,
+ 0,0,232,233,3,16,8,0,233,234,6,9,-1,0,234,248,1,0,0,0,235,236,5,24,0,0,
+ 236,237,3,16,8,0,237,238,6,9,-1,0,238,248,1,0,0,0,239,240,5,25,0,0,240,
+ 241,3,16,8,0,241,242,6,9,-1,0,242,248,1,0,0,0,243,244,5,26,0,0,244,245,
+ 3,16,8,0,245,246,6,9,-1,0,246,248,1,0,0,0,247,219,1,0,0,0,247,223,1,0,
+ 0,0,247,227,1,0,0,0,247,231,1,0,0,0,247,235,1,0,0,0,247,239,1,0,0,0,247,
+ 243,1,0,0,0,248,251,1,0,0,0,249,247,1,0,0,0,249,250,1,0,0,0,250,19,1,0,
+ 0,0,251,249,1,0,0,0,252,253,3,18,9,0,253,275,6,10,-1,0,254,255,5,27,0,
+ 0,255,269,6,10,-1,0,256,257,5,28,0,0,257,269,6,10,-1,0,258,259,5,29,0,
+ 0,259,269,6,10,-1,0,260,261,5,30,0,0,261,269,6,10,-1,0,262,263,5,31,0,
+ 0,263,269,6,10,-1,0,264,265,5,32,0,0,265,269,6,10,-1,0,266,267,5,33,0,
+ 0,267,269,6,10,-1,0,268,254,1,0,0,0,268,256,1,0,0,0,268,258,1,0,0,0,268,
+ 260,1,0,0,0,268,262,1,0,0,0,268,264,1,0,0,0,268,266,1,0,0,0,269,270,1,
+ 0,0,0,270,271,3,18,9,0,271,272,6,10,-1,0,272,274,1,0,0,0,273,268,1,0,0,
+ 0,274,277,1,0,0,0,275,273,1,0,0,0,275,276,1,0,0,0,276,284,1,0,0,0,277,
+ 275,1,0,0,0,278,279,5,34,0,0,279,280,5,13,0,0,280,281,3,18,9,0,281,282,
+ 5,35,0,0,282,283,6,10,-1,0,283,285,1,0,0,0,284,278,1,0,0,0,284,285,1,0,
+ 0,0,285,286,1,0,0,0,286,287,6,10,-1,0,287,21,1,0,0,0,288,289,5,36,0,0,
+ 289,290,3,20,10,0,290,291,6,11,-1,0,291,304,1,0,0,0,292,293,5,36,0,0,293,
+ 294,3,22,11,0,294,295,6,11,-1,0,295,304,1,0,0,0,296,297,5,36,0,0,297,298,
+ 3,36,18,0,298,299,6,11,-1,0,299,304,1,0,0,0,300,301,3,20,10,0,301,302,
+ 6,11,-1,0,302,304,1,0,0,0,303,288,1,0,0,0,303,292,1,0,0,0,303,296,1,0,
+ 0,0,303,300,1,0,0,0,304,23,1,0,0,0,305,306,3,22,11,0,306,321,6,12,-1,0,
+ 307,308,5,37,0,0,308,309,3,22,11,0,309,310,6,12,-1,0,310,320,1,0,0,0,311,
+ 312,5,38,0,0,312,313,3,22,11,0,313,314,6,12,-1,0,314,320,1,0,0,0,315,316,
+ 7,1,0,0,316,317,3,36,18,0,317,318,6,12,-1,0,318,320,1,0,0,0,319,307,1,
+ 0,0,0,319,311,1,0,0,0,319,315,1,0,0,0,320,323,1,0,0,0,321,319,1,0,0,0,
+ 321,322,1,0,0,0,322,25,1,0,0,0,323,321,1,0,0,0,324,325,3,24,12,0,325,336,
+ 6,13,-1,0,326,327,5,39,0,0,327,328,3,24,12,0,328,329,6,13,-1,0,329,335,
+ 1,0,0,0,330,331,5,39,0,0,331,332,3,36,18,0,332,333,6,13,-1,0,333,335,1,
+ 0,0,0,334,326,1,0,0,0,334,330,1,0,0,0,335,338,1,0,0,0,336,334,1,0,0,0,
+ 336,337,1,0,0,0,337,27,1,0,0,0,338,336,1,0,0,0,339,340,3,26,13,0,340,351,
+ 6,14,-1,0,341,342,5,40,0,0,342,343,3,26,13,0,343,344,6,14,-1,0,344,350,
+ 1,0,0,0,345,346,5,40,0,0,346,347,3,36,18,0,347,348,6,14,-1,0,348,350,1,
+ 0,0,0,349,341,1,0,0,0,349,345,1,0,0,0,350,353,1,0,0,0,351,349,1,0,0,0,
+ 351,352,1,0,0,0,352,29,1,0,0,0,353,351,1,0,0,0,354,355,3,28,14,0,355,370,
+ 6,15,-1,0,356,357,5,41,0,0,357,358,3,28,14,0,358,359,6,15,-1,0,359,369,
+ 1,0,0,0,360,361,5,42,0,0,361,362,3,28,14,0,362,363,6,15,-1,0,363,369,1,
+ 0,0,0,364,365,7,2,0,0,365,366,3,36,18,0,366,367,6,15,-1,0,367,369,1,0,
+ 0,0,368,356,1,0,0,0,368,360,1,0,0,0,368,364,1,0,0,0,369,372,1,0,0,0,370,
+ 368,1,0,0,0,370,371,1,0,0,0,371,31,1,0,0,0,372,370,1,0,0,0,373,374,3,30,
+ 15,0,374,379,6,16,-1,0,375,376,5,43,0,0,376,377,3,32,16,0,377,378,6,16,
+ -1,0,378,380,1,0,0,0,379,375,1,0,0,0,379,380,1,0,0,0,380,33,1,0,0,0,381,
+ 382,3,32,16,0,382,387,6,17,-1,0,383,384,5,44,0,0,384,385,3,34,17,0,385,
+ 386,6,17,-1,0,386,388,1,0,0,0,387,383,1,0,0,0,387,388,1,0,0,0,388,393,
+ 1,0,0,0,389,390,3,36,18,0,390,391,6,17,-1,0,391,393,1,0,0,0,392,381,1,
+ 0,0,0,392,389,1,0,0,0,393,35,1,0,0,0,394,395,3,38,19,0,395,396,3,40,20,
+ 0,396,397,5,45,0,0,397,398,3,34,17,0,398,399,6,18,-1,0,399,37,1,0,0,0,
+ 400,401,7,3,0,0,401,407,6,19,-1,0,402,403,7,4,0,0,403,407,6,19,-1,0,404,
+ 405,7,5,0,0,405,407,6,19,-1,0,406,400,1,0,0,0,406,402,1,0,0,0,406,404,
+ 1,0,0,0,407,39,1,0,0,0,408,409,3,18,9,0,409,416,6,20,-1,0,410,411,5,52,
+ 0,0,411,412,3,18,9,0,412,413,6,20,-1,0,413,415,1,0,0,0,414,410,1,0,0,0,
+ 415,418,1,0,0,0,416,414,1,0,0,0,416,417,1,0,0,0,417,419,1,0,0,0,418,416,
+ 1,0,0,0,419,420,6,20,-1,0,420,41,1,0,0,0,421,422,3,34,17,0,422,429,6,21,
+ -1,0,423,424,5,52,0,0,424,425,3,34,17,0,425,426,6,21,-1,0,426,428,1,0,
+ 0,0,427,423,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,421,1,0,0,0,432,433,1,0,0,0,433,43,1,0,
+ 0,0,434,435,3,34,17,0,435,436,6,22,-1,0,436,440,1,0,0,0,437,438,7,0,0,
+ 0,438,440,6,22,-1,0,439,434,1,0,0,0,439,437,1,0,0,0,440,451,1,0,0,0,441,
+ 447,5,52,0,0,442,443,3,34,17,0,443,444,6,22,-1,0,444,448,1,0,0,0,445,446,
+ 7,0,0,0,446,448,6,22,-1,0,447,442,1,0,0,0,447,445,1,0,0,0,448,450,1,0,
+ 0,0,449,441,1,0,0,0,450,453,1,0,0,0,451,449,1,0,0,0,451,452,1,0,0,0,452,
+ 455,1,0,0,0,453,451,1,0,0,0,454,439,1,0,0,0,454,455,1,0,0,0,455,45,1,0,
+ 0,0,456,457,3,34,17,0,457,458,6,23,-1,0,458,459,5,53,0,0,459,460,3,34,
+ 17,0,460,461,6,23,-1,0,461,47,1,0,0,0,462,463,3,34,17,0,463,464,6,24,-1,
+ 0,464,465,5,45,0,0,465,466,3,34,17,0,466,467,6,24,-1,0,467,49,1,0,0,0,
+ 468,469,5,54,0,0,469,1382,6,25,-1,0,470,471,5,55,0,0,471,1382,6,25,-1,
+ 0,472,473,5,235,0,0,473,1382,6,25,-1,0,474,475,5,232,0,0,475,1382,6,25,
+ -1,0,476,477,5,234,0,0,477,1382,6,25,-1,0,478,479,5,233,0,0,479,1382,6,
+ 25,-1,0,480,481,5,236,0,0,481,1382,6,25,-1,0,482,483,5,56,0,0,483,484,
+ 3,34,17,0,484,485,5,57,0,0,485,486,6,25,-1,0,486,1382,1,0,0,0,487,488,
+ 5,58,0,0,488,489,3,50,25,0,489,490,6,25,-1,0,490,1382,1,0,0,0,491,492,
+ 5,1,0,0,492,493,3,42,21,0,493,494,5,59,0,0,494,495,6,25,-1,0,495,1382,
+ 1,0,0,0,496,497,5,1,0,0,497,498,3,42,21,0,498,499,5,2,0,0,499,500,6,25,
+ -1,0,500,1382,1,0,0,0,501,502,5,34,0,0,502,503,3,46,23,0,503,504,5,35,
+ 0,0,504,505,6,25,-1,0,505,1382,1,0,0,0,506,507,5,1,0,0,507,508,3,46,23,
+ 0,508,509,5,35,0,0,509,510,6,25,-1,0,510,1382,1,0,0,0,511,512,5,1,0,0,
+ 512,513,3,46,23,0,513,514,5,2,0,0,514,515,6,25,-1,0,515,1382,1,0,0,0,516,
+ 517,5,34,0,0,517,518,3,46,23,0,518,519,5,2,0,0,519,520,6,25,-1,0,520,1382,
+ 1,0,0,0,521,522,5,34,0,0,522,523,3,34,17,0,523,524,5,35,0,0,524,525,6,
+ 25,-1,0,525,1382,1,0,0,0,526,527,5,60,0,0,527,528,3,48,24,0,528,529,5,
+ 61,0,0,529,530,6,25,-1,0,530,1382,1,0,0,0,531,532,5,60,0,0,532,533,3,44,
+ 22,0,533,534,5,61,0,0,534,535,6,25,-1,0,535,1382,1,0,0,0,536,537,5,62,
+ 0,0,537,538,3,42,21,0,538,539,5,35,0,0,539,540,6,25,-1,0,540,1382,1,0,
+ 0,0,541,542,5,63,0,0,542,543,3,42,21,0,543,544,5,35,0,0,544,545,6,25,-1,
+ 0,545,1382,1,0,0,0,546,547,5,64,0,0,547,548,3,42,21,0,548,549,5,35,0,0,
+ 549,550,6,25,-1,0,550,1382,1,0,0,0,551,552,5,65,0,0,552,553,3,42,21,0,
+ 553,554,5,35,0,0,554,555,6,25,-1,0,555,1382,1,0,0,0,556,557,5,66,0,0,557,
+ 558,3,42,21,0,558,559,5,35,0,0,559,560,6,25,-1,0,560,1382,1,0,0,0,561,
+ 562,5,67,0,0,562,563,3,42,21,0,563,564,5,35,0,0,564,565,6,25,-1,0,565,
+ 1382,1,0,0,0,566,567,5,68,0,0,567,568,3,42,21,0,568,569,5,35,0,0,569,570,
+ 6,25,-1,0,570,1382,1,0,0,0,571,572,5,69,0,0,572,573,3,42,21,0,573,574,
+ 5,35,0,0,574,575,6,25,-1,0,575,1382,1,0,0,0,576,577,5,70,0,0,577,578,3,
+ 42,21,0,578,579,5,35,0,0,579,580,6,25,-1,0,580,1382,1,0,0,0,581,582,5,
+ 71,0,0,582,583,3,42,21,0,583,584,5,35,0,0,584,585,6,25,-1,0,585,1382,1,
+ 0,0,0,586,587,5,72,0,0,587,588,3,42,21,0,588,589,5,35,0,0,589,590,6,25,
+ -1,0,590,1382,1,0,0,0,591,592,5,73,0,0,592,593,3,42,21,0,593,594,5,35,
+ 0,0,594,595,6,25,-1,0,595,1382,1,0,0,0,596,597,5,74,0,0,597,598,3,42,21,
+ 0,598,599,5,35,0,0,599,600,6,25,-1,0,600,1382,1,0,0,0,601,602,5,75,0,0,
+ 602,603,3,42,21,0,603,604,5,35,0,0,604,605,6,25,-1,0,605,1382,1,0,0,0,
+ 606,607,5,76,0,0,607,608,3,42,21,0,608,609,5,35,0,0,609,610,6,25,-1,0,
+ 610,1382,1,0,0,0,611,612,5,77,0,0,612,613,3,42,21,0,613,614,5,35,0,0,614,
+ 615,6,25,-1,0,615,1382,1,0,0,0,616,617,5,78,0,0,617,618,3,42,21,0,618,
+ 619,5,35,0,0,619,620,6,25,-1,0,620,1382,1,0,0,0,621,622,5,79,0,0,622,623,
+ 3,42,21,0,623,624,5,35,0,0,624,625,6,25,-1,0,625,1382,1,0,0,0,626,627,
+ 5,80,0,0,627,628,3,42,21,0,628,629,5,35,0,0,629,630,6,25,-1,0,630,1382,
+ 1,0,0,0,631,632,5,81,0,0,632,633,3,42,21,0,633,634,5,35,0,0,634,635,6,
+ 25,-1,0,635,1382,1,0,0,0,636,637,5,82,0,0,637,638,3,42,21,0,638,639,5,
+ 35,0,0,639,640,6,25,-1,0,640,1382,1,0,0,0,641,642,5,83,0,0,642,643,3,42,
+ 21,0,643,644,5,35,0,0,644,645,6,25,-1,0,645,1382,1,0,0,0,646,647,5,84,
+ 0,0,647,648,3,42,21,0,648,649,5,35,0,0,649,650,6,25,-1,0,650,1382,1,0,
+ 0,0,651,652,5,85,0,0,652,653,3,42,21,0,653,654,5,35,0,0,654,655,6,25,-1,
+ 0,655,1382,1,0,0,0,656,657,5,86,0,0,657,658,3,42,21,0,658,659,5,35,0,0,
+ 659,660,6,25,-1,0,660,1382,1,0,0,0,661,662,5,87,0,0,662,663,3,42,21,0,
+ 663,664,5,35,0,0,664,665,6,25,-1,0,665,1382,1,0,0,0,666,667,5,88,0,0,667,
+ 668,3,42,21,0,668,669,5,35,0,0,669,670,6,25,-1,0,670,1382,1,0,0,0,671,
+ 672,5,89,0,0,672,673,3,42,21,0,673,674,5,35,0,0,674,675,6,25,-1,0,675,
+ 1382,1,0,0,0,676,677,5,90,0,0,677,678,3,42,21,0,678,679,5,35,0,0,679,680,
+ 6,25,-1,0,680,1382,1,0,0,0,681,682,5,91,0,0,682,683,3,42,21,0,683,684,
+ 5,35,0,0,684,685,6,25,-1,0,685,1382,1,0,0,0,686,687,5,92,0,0,687,688,3,
+ 42,21,0,688,689,5,35,0,0,689,690,6,25,-1,0,690,1382,1,0,0,0,691,692,5,
+ 93,0,0,692,693,3,42,21,0,693,694,5,35,0,0,694,695,6,25,-1,0,695,1382,1,
+ 0,0,0,696,697,5,94,0,0,697,698,3,42,21,0,698,699,5,35,0,0,699,700,6,25,
+ -1,0,700,1382,1,0,0,0,701,702,5,95,0,0,702,703,3,42,21,0,703,704,5,35,
+ 0,0,704,705,6,25,-1,0,705,1382,1,0,0,0,706,707,5,96,0,0,707,708,3,42,21,
+ 0,708,709,5,35,0,0,709,710,6,25,-1,0,710,1382,1,0,0,0,711,712,5,97,0,0,
+ 712,713,3,42,21,0,713,714,5,35,0,0,714,715,6,25,-1,0,715,1382,1,0,0,0,
+ 716,717,5,98,0,0,717,718,3,42,21,0,718,719,5,35,0,0,719,720,6,25,-1,0,
+ 720,1382,1,0,0,0,721,722,5,99,0,0,722,723,3,42,21,0,723,724,5,35,0,0,724,
+ 725,6,25,-1,0,725,1382,1,0,0,0,726,727,5,100,0,0,727,728,3,42,21,0,728,
+ 729,5,35,0,0,729,730,6,25,-1,0,730,1382,1,0,0,0,731,732,5,101,0,0,732,
+ 733,3,42,21,0,733,734,5,35,0,0,734,735,6,25,-1,0,735,1382,1,0,0,0,736,
+ 737,5,102,0,0,737,738,3,42,21,0,738,739,5,35,0,0,739,740,6,25,-1,0,740,
+ 1382,1,0,0,0,741,742,5,103,0,0,742,743,3,42,21,0,743,744,5,35,0,0,744,
+ 745,6,25,-1,0,745,1382,1,0,0,0,746,747,5,104,0,0,747,748,3,42,21,0,748,
+ 749,5,35,0,0,749,750,6,25,-1,0,750,1382,1,0,0,0,751,752,5,105,0,0,752,
+ 753,3,42,21,0,753,754,5,35,0,0,754,755,6,25,-1,0,755,1382,1,0,0,0,756,
+ 757,5,106,0,0,757,758,3,42,21,0,758,759,5,35,0,0,759,760,6,25,-1,0,760,
+ 1382,1,0,0,0,761,762,5,107,0,0,762,763,3,42,21,0,763,764,5,35,0,0,764,
+ 765,6,25,-1,0,765,1382,1,0,0,0,766,767,5,108,0,0,767,768,3,42,21,0,768,
+ 769,5,35,0,0,769,770,6,25,-1,0,770,1382,1,0,0,0,771,772,5,109,0,0,772,
+ 773,3,42,21,0,773,774,5,35,0,0,774,775,6,25,-1,0,775,1382,1,0,0,0,776,
+ 777,5,110,0,0,777,778,3,42,21,0,778,779,5,35,0,0,779,780,6,25,-1,0,780,
+ 1382,1,0,0,0,781,782,5,111,0,0,782,783,3,42,21,0,783,784,5,35,0,0,784,
+ 785,6,25,-1,0,785,1382,1,0,0,0,786,787,5,112,0,0,787,788,3,42,21,0,788,
+ 789,5,35,0,0,789,790,6,25,-1,0,790,1382,1,0,0,0,791,792,5,113,0,0,792,
+ 793,3,42,21,0,793,794,5,35,0,0,794,795,6,25,-1,0,795,1382,1,0,0,0,796,
+ 797,5,114,0,0,797,798,3,42,21,0,798,799,5,35,0,0,799,800,6,25,-1,0,800,
+ 1382,1,0,0,0,801,802,5,115,0,0,802,803,3,42,21,0,803,804,5,35,0,0,804,
+ 805,6,25,-1,0,805,1382,1,0,0,0,806,807,5,116,0,0,807,808,3,42,21,0,808,
+ 809,5,35,0,0,809,810,6,25,-1,0,810,1382,1,0,0,0,811,812,5,117,0,0,812,
+ 813,3,42,21,0,813,814,5,35,0,0,814,815,6,25,-1,0,815,1382,1,0,0,0,816,
+ 817,5,118,0,0,817,818,3,42,21,0,818,819,5,35,0,0,819,820,6,25,-1,0,820,
+ 1382,1,0,0,0,821,822,5,119,0,0,822,823,3,42,21,0,823,824,5,35,0,0,824,
+ 825,6,25,-1,0,825,1382,1,0,0,0,826,827,5,120,0,0,827,828,3,42,21,0,828,
+ 829,5,35,0,0,829,830,6,25,-1,0,830,1382,1,0,0,0,831,832,5,121,0,0,832,
+ 833,3,42,21,0,833,834,5,35,0,0,834,835,6,25,-1,0,835,1382,1,0,0,0,836,
+ 837,5,122,0,0,837,838,3,42,21,0,838,839,5,35,0,0,839,840,6,25,-1,0,840,
+ 1382,1,0,0,0,841,842,5,123,0,0,842,843,3,42,21,0,843,844,5,35,0,0,844,
+ 845,6,25,-1,0,845,1382,1,0,0,0,846,847,5,124,0,0,847,848,3,42,21,0,848,
+ 849,5,35,0,0,849,850,6,25,-1,0,850,1382,1,0,0,0,851,852,5,125,0,0,852,
+ 853,3,42,21,0,853,854,5,35,0,0,854,855,6,25,-1,0,855,1382,1,0,0,0,856,
+ 857,5,126,0,0,857,858,3,42,21,0,858,859,5,35,0,0,859,860,6,25,-1,0,860,
+ 1382,1,0,0,0,861,862,5,127,0,0,862,863,3,42,21,0,863,864,5,35,0,0,864,
+ 865,6,25,-1,0,865,1382,1,0,0,0,866,867,5,128,0,0,867,868,3,42,21,0,868,
+ 869,5,35,0,0,869,870,6,25,-1,0,870,1382,1,0,0,0,871,872,5,129,0,0,872,
+ 873,3,42,21,0,873,874,5,35,0,0,874,875,6,25,-1,0,875,1382,1,0,0,0,876,
+ 877,5,130,0,0,877,878,3,42,21,0,878,879,5,35,0,0,879,880,6,25,-1,0,880,
+ 1382,1,0,0,0,881,882,5,131,0,0,882,883,3,42,21,0,883,884,5,35,0,0,884,
+ 885,6,25,-1,0,885,1382,1,0,0,0,886,887,5,132,0,0,887,888,3,42,21,0,888,
+ 889,5,35,0,0,889,890,6,25,-1,0,890,1382,1,0,0,0,891,892,5,133,0,0,892,
+ 893,3,42,21,0,893,894,5,35,0,0,894,895,6,25,-1,0,895,1382,1,0,0,0,896,
+ 897,5,134,0,0,897,898,3,42,21,0,898,899,5,35,0,0,899,900,6,25,-1,0,900,
+ 1382,1,0,0,0,901,902,5,135,0,0,902,903,3,42,21,0,903,904,5,35,0,0,904,
+ 905,6,25,-1,0,905,1382,1,0,0,0,906,907,5,136,0,0,907,908,3,42,21,0,908,
+ 909,5,35,0,0,909,910,6,25,-1,0,910,1382,1,0,0,0,911,912,5,137,0,0,912,
+ 913,3,42,21,0,913,914,5,35,0,0,914,915,6,25,-1,0,915,1382,1,0,0,0,916,
+ 917,5,138,0,0,917,918,3,42,21,0,918,919,5,35,0,0,919,920,6,25,-1,0,920,
+ 1382,1,0,0,0,921,922,5,139,0,0,922,923,3,42,21,0,923,924,5,35,0,0,924,
+ 925,6,25,-1,0,925,1382,1,0,0,0,926,927,5,140,0,0,927,928,3,42,21,0,928,
+ 929,5,35,0,0,929,930,6,25,-1,0,930,1382,1,0,0,0,931,932,5,141,0,0,932,
+ 933,3,42,21,0,933,934,5,35,0,0,934,935,6,25,-1,0,935,1382,1,0,0,0,936,
+ 937,5,142,0,0,937,938,3,42,21,0,938,939,5,35,0,0,939,940,6,25,-1,0,940,
+ 1382,1,0,0,0,941,942,5,143,0,0,942,943,3,42,21,0,943,944,5,35,0,0,944,
+ 945,6,25,-1,0,945,1382,1,0,0,0,946,947,5,144,0,0,947,948,3,42,21,0,948,
+ 949,5,35,0,0,949,950,6,25,-1,0,950,1382,1,0,0,0,951,952,5,145,0,0,952,
+ 953,3,42,21,0,953,954,5,35,0,0,954,955,6,25,-1,0,955,1382,1,0,0,0,956,
+ 957,5,146,0,0,957,958,3,42,21,0,958,959,5,35,0,0,959,960,6,25,-1,0,960,
+ 1382,1,0,0,0,961,962,5,147,0,0,962,963,3,42,21,0,963,964,5,35,0,0,964,
+ 965,6,25,-1,0,965,1382,1,0,0,0,966,967,5,148,0,0,967,968,3,42,21,0,968,
+ 969,5,35,0,0,969,970,6,25,-1,0,970,1382,1,0,0,0,971,972,5,149,0,0,972,
+ 973,3,42,21,0,973,974,5,35,0,0,974,975,6,25,-1,0,975,1382,1,0,0,0,976,
+ 977,5,150,0,0,977,978,3,42,21,0,978,979,5,35,0,0,979,980,6,25,-1,0,980,
+ 1382,1,0,0,0,981,982,5,151,0,0,982,983,3,42,21,0,983,984,5,35,0,0,984,
+ 985,6,25,-1,0,985,1382,1,0,0,0,986,987,5,152,0,0,987,988,3,42,21,0,988,
+ 989,5,35,0,0,989,990,6,25,-1,0,990,1382,1,0,0,0,991,992,5,153,0,0,992,
+ 993,3,42,21,0,993,994,5,35,0,0,994,995,6,25,-1,0,995,1382,1,0,0,0,996,
+ 997,5,154,0,0,997,998,3,42,21,0,998,999,5,35,0,0,999,1000,6,25,-1,0,1000,
+ 1382,1,0,0,0,1001,1002,5,155,0,0,1002,1003,3,42,21,0,1003,1004,5,35,0,
+ 0,1004,1005,6,25,-1,0,1005,1382,1,0,0,0,1006,1007,5,156,0,0,1007,1008,
+ 3,42,21,0,1008,1009,5,35,0,0,1009,1010,6,25,-1,0,1010,1382,1,0,0,0,1011,
+ 1012,5,157,0,0,1012,1013,3,42,21,0,1013,1014,5,35,0,0,1014,1015,6,25,-1,
+ 0,1015,1382,1,0,0,0,1016,1017,5,158,0,0,1017,1018,3,42,21,0,1018,1019,
+ 5,35,0,0,1019,1020,6,25,-1,0,1020,1382,1,0,0,0,1021,1022,5,159,0,0,1022,
+ 1023,3,42,21,0,1023,1024,5,35,0,0,1024,1025,6,25,-1,0,1025,1382,1,0,0,
+ 0,1026,1027,5,160,0,0,1027,1028,3,42,21,0,1028,1029,5,35,0,0,1029,1030,
+ 6,25,-1,0,1030,1382,1,0,0,0,1031,1032,5,161,0,0,1032,1033,3,42,21,0,1033,
+ 1034,5,35,0,0,1034,1035,6,25,-1,0,1035,1382,1,0,0,0,1036,1037,5,162,0,
+ 0,1037,1038,3,42,21,0,1038,1039,5,35,0,0,1039,1040,6,25,-1,0,1040,1382,
+ 1,0,0,0,1041,1042,5,163,0,0,1042,1043,3,42,21,0,1043,1044,5,35,0,0,1044,
+ 1045,6,25,-1,0,1045,1382,1,0,0,0,1046,1047,5,164,0,0,1047,1048,3,42,21,
+ 0,1048,1049,5,35,0,0,1049,1050,6,25,-1,0,1050,1382,1,0,0,0,1051,1052,5,
+ 165,0,0,1052,1053,3,42,21,0,1053,1054,5,35,0,0,1054,1055,6,25,-1,0,1055,
+ 1382,1,0,0,0,1056,1057,5,166,0,0,1057,1058,3,42,21,0,1058,1059,5,35,0,
+ 0,1059,1060,6,25,-1,0,1060,1382,1,0,0,0,1061,1062,5,167,0,0,1062,1063,
+ 3,42,21,0,1063,1064,5,35,0,0,1064,1065,6,25,-1,0,1065,1382,1,0,0,0,1066,
+ 1067,5,168,0,0,1067,1068,3,42,21,0,1068,1069,5,35,0,0,1069,1070,6,25,-1,
+ 0,1070,1382,1,0,0,0,1071,1072,5,169,0,0,1072,1073,3,42,21,0,1073,1074,
+ 5,35,0,0,1074,1075,6,25,-1,0,1075,1382,1,0,0,0,1076,1077,5,170,0,0,1077,
+ 1078,3,42,21,0,1078,1079,5,35,0,0,1079,1080,6,25,-1,0,1080,1382,1,0,0,
+ 0,1081,1082,5,171,0,0,1082,1083,3,42,21,0,1083,1084,5,35,0,0,1084,1085,
+ 6,25,-1,0,1085,1382,1,0,0,0,1086,1087,5,172,0,0,1087,1088,3,42,21,0,1088,
+ 1089,5,35,0,0,1089,1090,6,25,-1,0,1090,1382,1,0,0,0,1091,1092,5,173,0,
+ 0,1092,1093,3,42,21,0,1093,1094,5,35,0,0,1094,1095,6,25,-1,0,1095,1382,
+ 1,0,0,0,1096,1097,5,174,0,0,1097,1098,3,42,21,0,1098,1099,5,35,0,0,1099,
+ 1100,6,25,-1,0,1100,1382,1,0,0,0,1101,1102,5,175,0,0,1102,1103,3,42,21,
+ 0,1103,1104,5,35,0,0,1104,1105,6,25,-1,0,1105,1382,1,0,0,0,1106,1107,5,
+ 176,0,0,1107,1108,3,42,21,0,1108,1109,5,35,0,0,1109,1110,6,25,-1,0,1110,
+ 1382,1,0,0,0,1111,1112,5,177,0,0,1112,1113,3,42,21,0,1113,1114,5,35,0,
+ 0,1114,1115,6,25,-1,0,1115,1382,1,0,0,0,1116,1117,5,178,0,0,1117,1118,
+ 3,42,21,0,1118,1119,5,35,0,0,1119,1120,6,25,-1,0,1120,1382,1,0,0,0,1121,
+ 1122,5,179,0,0,1122,1123,3,42,21,0,1123,1124,5,35,0,0,1124,1125,6,25,-1,
+ 0,1125,1382,1,0,0,0,1126,1127,5,180,0,0,1127,1128,3,42,21,0,1128,1129,
+ 5,35,0,0,1129,1130,6,25,-1,0,1130,1382,1,0,0,0,1131,1132,5,181,0,0,1132,
+ 1133,3,42,21,0,1133,1134,5,35,0,0,1134,1135,6,25,-1,0,1135,1382,1,0,0,
+ 0,1136,1137,5,182,0,0,1137,1138,3,42,21,0,1138,1139,5,35,0,0,1139,1140,
+ 6,25,-1,0,1140,1382,1,0,0,0,1141,1142,5,183,0,0,1142,1143,3,42,21,0,1143,
+ 1144,5,35,0,0,1144,1145,6,25,-1,0,1145,1382,1,0,0,0,1146,1147,5,184,0,
+ 0,1147,1148,3,42,21,0,1148,1149,5,35,0,0,1149,1150,6,25,-1,0,1150,1382,
+ 1,0,0,0,1151,1152,5,185,0,0,1152,1153,3,42,21,0,1153,1154,5,35,0,0,1154,
+ 1155,6,25,-1,0,1155,1382,1,0,0,0,1156,1157,5,186,0,0,1157,1158,3,42,21,
+ 0,1158,1159,5,35,0,0,1159,1160,6,25,-1,0,1160,1382,1,0,0,0,1161,1162,5,
+ 187,0,0,1162,1163,3,42,21,0,1163,1164,5,35,0,0,1164,1165,6,25,-1,0,1165,
+ 1382,1,0,0,0,1166,1167,5,188,0,0,1167,1168,3,42,21,0,1168,1169,5,35,0,
+ 0,1169,1170,6,25,-1,0,1170,1382,1,0,0,0,1171,1172,5,189,0,0,1172,1173,
+ 3,42,21,0,1173,1174,5,35,0,0,1174,1175,6,25,-1,0,1175,1382,1,0,0,0,1176,
+ 1177,5,190,0,0,1177,1178,3,42,21,0,1178,1179,5,35,0,0,1179,1180,6,25,-1,
+ 0,1180,1382,1,0,0,0,1181,1182,5,191,0,0,1182,1183,3,42,21,0,1183,1184,
+ 5,35,0,0,1184,1185,6,25,-1,0,1185,1382,1,0,0,0,1186,1187,5,192,0,0,1187,
+ 1188,3,42,21,0,1188,1189,5,35,0,0,1189,1190,6,25,-1,0,1190,1382,1,0,0,
+ 0,1191,1192,5,193,0,0,1192,1193,3,42,21,0,1193,1194,5,35,0,0,1194,1195,
+ 6,25,-1,0,1195,1382,1,0,0,0,1196,1197,5,194,0,0,1197,1198,3,42,21,0,1198,
+ 1199,5,35,0,0,1199,1200,6,25,-1,0,1200,1382,1,0,0,0,1201,1202,5,195,0,
+ 0,1202,1203,3,42,21,0,1203,1204,5,35,0,0,1204,1205,6,25,-1,0,1205,1382,
+ 1,0,0,0,1206,1207,5,196,0,0,1207,1208,3,42,21,0,1208,1209,5,35,0,0,1209,
+ 1210,6,25,-1,0,1210,1382,1,0,0,0,1211,1212,5,197,0,0,1212,1213,3,42,21,
+ 0,1213,1214,5,35,0,0,1214,1215,6,25,-1,0,1215,1382,1,0,0,0,1216,1217,5,
+ 198,0,0,1217,1218,3,42,21,0,1218,1219,5,35,0,0,1219,1220,6,25,-1,0,1220,
+ 1382,1,0,0,0,1221,1222,5,199,0,0,1222,1223,3,42,21,0,1223,1224,5,35,0,
+ 0,1224,1225,6,25,-1,0,1225,1382,1,0,0,0,1226,1227,5,200,0,0,1227,1228,
+ 3,42,21,0,1228,1229,5,35,0,0,1229,1230,6,25,-1,0,1230,1382,1,0,0,0,1231,
+ 1232,5,201,0,0,1232,1233,3,42,21,0,1233,1234,5,35,0,0,1234,1235,6,25,-1,
+ 0,1235,1382,1,0,0,0,1236,1237,5,202,0,0,1237,1238,3,42,21,0,1238,1239,
+ 5,35,0,0,1239,1240,6,25,-1,0,1240,1382,1,0,0,0,1241,1242,5,203,0,0,1242,
+ 1243,3,42,21,0,1243,1244,5,35,0,0,1244,1245,6,25,-1,0,1245,1382,1,0,0,
+ 0,1246,1247,5,204,0,0,1247,1248,3,42,21,0,1248,1249,5,35,0,0,1249,1250,
+ 6,25,-1,0,1250,1382,1,0,0,0,1251,1252,5,205,0,0,1252,1253,3,42,21,0,1253,
+ 1254,5,35,0,0,1254,1255,6,25,-1,0,1255,1382,1,0,0,0,1256,1257,5,206,0,
+ 0,1257,1258,3,42,21,0,1258,1259,5,35,0,0,1259,1260,6,25,-1,0,1260,1382,
+ 1,0,0,0,1261,1262,5,207,0,0,1262,1263,3,42,21,0,1263,1264,5,35,0,0,1264,
+ 1265,6,25,-1,0,1265,1382,1,0,0,0,1266,1267,5,208,0,0,1267,1268,3,42,21,
+ 0,1268,1269,5,35,0,0,1269,1270,6,25,-1,0,1270,1382,1,0,0,0,1271,1272,5,
+ 209,0,0,1272,1273,3,42,21,0,1273,1274,5,35,0,0,1274,1275,6,25,-1,0,1275,
+ 1382,1,0,0,0,1276,1277,5,210,0,0,1277,1278,3,42,21,0,1278,1279,5,35,0,
+ 0,1279,1280,6,25,-1,0,1280,1382,1,0,0,0,1281,1282,5,211,0,0,1282,1283,
+ 3,42,21,0,1283,1284,5,35,0,0,1284,1285,6,25,-1,0,1285,1382,1,0,0,0,1286,
+ 1287,5,212,0,0,1287,1288,3,42,21,0,1288,1289,5,35,0,0,1289,1290,6,25,-1,
+ 0,1290,1382,1,0,0,0,1291,1292,5,213,0,0,1292,1293,3,42,21,0,1293,1294,
+ 5,35,0,0,1294,1295,6,25,-1,0,1295,1382,1,0,0,0,1296,1297,5,214,0,0,1297,
+ 1298,3,42,21,0,1298,1299,5,35,0,0,1299,1300,6,25,-1,0,1300,1382,1,0,0,
+ 0,1301,1302,5,215,0,0,1302,1303,3,42,21,0,1303,1304,5,35,0,0,1304,1305,
+ 6,25,-1,0,1305,1382,1,0,0,0,1306,1307,5,216,0,0,1307,1308,3,42,21,0,1308,
+ 1309,5,35,0,0,1309,1310,6,25,-1,0,1310,1382,1,0,0,0,1311,1312,5,217,0,
+ 0,1312,1313,3,42,21,0,1313,1314,5,35,0,0,1314,1315,6,25,-1,0,1315,1382,
+ 1,0,0,0,1316,1317,5,218,0,0,1317,1318,3,42,21,0,1318,1319,5,35,0,0,1319,
+ 1320,6,25,-1,0,1320,1382,1,0,0,0,1321,1322,5,219,0,0,1322,1323,3,42,21,
+ 0,1323,1324,5,35,0,0,1324,1325,6,25,-1,0,1325,1382,1,0,0,0,1326,1327,5,
+ 220,0,0,1327,1328,3,42,21,0,1328,1329,5,35,0,0,1329,1330,6,25,-1,0,1330,
+ 1382,1,0,0,0,1331,1332,5,221,0,0,1332,1333,3,42,21,0,1333,1334,5,35,0,
+ 0,1334,1335,6,25,-1,0,1335,1382,1,0,0,0,1336,1337,5,222,0,0,1337,1338,
+ 3,42,21,0,1338,1339,5,35,0,0,1339,1340,6,25,-1,0,1340,1382,1,0,0,0,1341,
+ 1342,5,223,0,0,1342,1343,3,42,21,0,1343,1344,5,35,0,0,1344,1345,6,25,-1,
+ 0,1345,1382,1,0,0,0,1346,1347,5,224,0,0,1347,1348,3,42,21,0,1348,1349,
+ 5,35,0,0,1349,1350,6,25,-1,0,1350,1382,1,0,0,0,1351,1352,5,225,0,0,1352,
+ 1353,3,42,21,0,1353,1354,5,35,0,0,1354,1355,6,25,-1,0,1355,1382,1,0,0,
+ 0,1356,1357,5,226,0,0,1357,1358,3,42,21,0,1358,1359,5,35,0,0,1359,1360,
+ 6,25,-1,0,1360,1382,1,0,0,0,1361,1362,5,227,0,0,1362,1363,3,42,21,0,1363,
+ 1364,5,35,0,0,1364,1365,6,25,-1,0,1365,1382,1,0,0,0,1366,1367,5,228,0,
+ 0,1367,1368,3,42,21,0,1368,1369,5,35,0,0,1369,1370,6,25,-1,0,1370,1382,
+ 1,0,0,0,1371,1372,5,229,0,0,1372,1373,3,42,21,0,1373,1374,5,35,0,0,1374,
+ 1375,6,25,-1,0,1375,1382,1,0,0,0,1376,1377,5,230,0,0,1377,1378,3,42,21,
+ 0,1378,1379,5,35,0,0,1379,1380,6,25,-1,0,1380,1382,1,0,0,0,1381,468,1,
+ 0,0,0,1381,470,1,0,0,0,1381,472,1,0,0,0,1381,474,1,0,0,0,1381,476,1,0,
+ 0,0,1381,478,1,0,0,0,1381,480,1,0,0,0,1381,482,1,0,0,0,1381,487,1,0,0,
+ 0,1381,491,1,0,0,0,1381,496,1,0,0,0,1381,501,1,0,0,0,1381,506,1,0,0,0,
+ 1381,511,1,0,0,0,1381,516,1,0,0,0,1381,521,1,0,0,0,1381,526,1,0,0,0,1381,
+ 531,1,0,0,0,1381,536,1,0,0,0,1381,541,1,0,0,0,1381,546,1,0,0,0,1381,551,
+ 1,0,0,0,1381,556,1,0,0,0,1381,561,1,0,0,0,1381,566,1,0,0,0,1381,571,1,
+ 0,0,0,1381,576,1,0,0,0,1381,581,1,0,0,0,1381,586,1,0,0,0,1381,591,1,0,
+ 0,0,1381,596,1,0,0,0,1381,601,1,0,0,0,1381,606,1,0,0,0,1381,611,1,0,0,
+ 0,1381,616,1,0,0,0,1381,621,1,0,0,0,1381,626,1,0,0,0,1381,631,1,0,0,0,
+ 1381,636,1,0,0,0,1381,641,1,0,0,0,1381,646,1,0,0,0,1381,651,1,0,0,0,1381,
+ 656,1,0,0,0,1381,661,1,0,0,0,1381,666,1,0,0,0,1381,671,1,0,0,0,1381,676,
+ 1,0,0,0,1381,681,1,0,0,0,1381,686,1,0,0,0,1381,691,1,0,0,0,1381,696,1,
+ 0,0,0,1381,701,1,0,0,0,1381,706,1,0,0,0,1381,711,1,0,0,0,1381,716,1,0,
+ 0,0,1381,721,1,0,0,0,1381,726,1,0,0,0,1381,731,1,0,0,0,1381,736,1,0,0,
+ 0,1381,741,1,0,0,0,1381,746,1,0,0,0,1381,751,1,0,0,0,1381,756,1,0,0,0,
+ 1381,761,1,0,0,0,1381,766,1,0,0,0,1381,771,1,0,0,0,1381,776,1,0,0,0,1381,
+ 781,1,0,0,0,1381,786,1,0,0,0,1381,791,1,0,0,0,1381,796,1,0,0,0,1381,801,
+ 1,0,0,0,1381,806,1,0,0,0,1381,811,1,0,0,0,1381,816,1,0,0,0,1381,821,1,
+ 0,0,0,1381,826,1,0,0,0,1381,831,1,0,0,0,1381,836,1,0,0,0,1381,841,1,0,
+ 0,0,1381,846,1,0,0,0,1381,851,1,0,0,0,1381,856,1,0,0,0,1381,861,1,0,0,
+ 0,1381,866,1,0,0,0,1381,871,1,0,0,0,1381,876,1,0,0,0,1381,881,1,0,0,0,
+ 1381,886,1,0,0,0,1381,891,1,0,0,0,1381,896,1,0,0,0,1381,901,1,0,0,0,1381,
+ 906,1,0,0,0,1381,911,1,0,0,0,1381,916,1,0,0,0,1381,921,1,0,0,0,1381,926,
+ 1,0,0,0,1381,931,1,0,0,0,1381,936,1,0,0,0,1381,941,1,0,0,0,1381,946,1,
+ 0,0,0,1381,951,1,0,0,0,1381,956,1,0,0,0,1381,961,1,0,0,0,1381,966,1,0,
+ 0,0,1381,971,1,0,0,0,1381,976,1,0,0,0,1381,981,1,0,0,0,1381,986,1,0,0,
+ 0,1381,991,1,0,0,0,1381,996,1,0,0,0,1381,1001,1,0,0,0,1381,1006,1,0,0,
+ 0,1381,1011,1,0,0,0,1381,1016,1,0,0,0,1381,1021,1,0,0,0,1381,1026,1,0,
+ 0,0,1381,1031,1,0,0,0,1381,1036,1,0,0,0,1381,1041,1,0,0,0,1381,1046,1,
+ 0,0,0,1381,1051,1,0,0,0,1381,1056,1,0,0,0,1381,1061,1,0,0,0,1381,1066,
+ 1,0,0,0,1381,1071,1,0,0,0,1381,1076,1,0,0,0,1381,1081,1,0,0,0,1381,1086,
+ 1,0,0,0,1381,1091,1,0,0,0,1381,1096,1,0,0,0,1381,1101,1,0,0,0,1381,1106,
+ 1,0,0,0,1381,1111,1,0,0,0,1381,1116,1,0,0,0,1381,1121,1,0,0,0,1381,1126,
+ 1,0,0,0,1381,1131,1,0,0,0,1381,1136,1,0,0,0,1381,1141,1,0,0,0,1381,1146,
+ 1,0,0,0,1381,1151,1,0,0,0,1381,1156,1,0,0,0,1381,1161,1,0,0,0,1381,1166,
+ 1,0,0,0,1381,1171,1,0,0,0,1381,1176,1,0,0,0,1381,1181,1,0,0,0,1381,1186,
+ 1,0,0,0,1381,1191,1,0,0,0,1381,1196,1,0,0,0,1381,1201,1,0,0,0,1381,1206,
+ 1,0,0,0,1381,1211,1,0,0,0,1381,1216,1,0,0,0,1381,1221,1,0,0,0,1381,1226,
+ 1,0,0,0,1381,1231,1,0,0,0,1381,1236,1,0,0,0,1381,1241,1,0,0,0,1381,1246,
+ 1,0,0,0,1381,1251,1,0,0,0,1381,1256,1,0,0,0,1381,1261,1,0,0,0,1381,1266,
+ 1,0,0,0,1381,1271,1,0,0,0,1381,1276,1,0,0,0,1381,1281,1,0,0,0,1381,1286,
+ 1,0,0,0,1381,1291,1,0,0,0,1381,1296,1,0,0,0,1381,1301,1,0,0,0,1381,1306,
+ 1,0,0,0,1381,1311,1,0,0,0,1381,1316,1,0,0,0,1381,1321,1,0,0,0,1381,1326,
+ 1,0,0,0,1381,1331,1,0,0,0,1381,1336,1,0,0,0,1381,1341,1,0,0,0,1381,1346,
+ 1,0,0,0,1381,1351,1,0,0,0,1381,1356,1,0,0,0,1381,1361,1,0,0,0,1381,1366,
+ 1,0,0,0,1381,1371,1,0,0,0,1381,1376,1,0,0,0,1382,51,1,0,0,0,1383,1384,
+ 3,34,17,0,1384,1385,5,0,0,1,1385,1386,6,26,-1,0,1386,53,1,0,0,0,45,63,
+ 81,89,97,99,106,116,126,131,141,151,153,166,172,174,189,191,212,214,247,
+ 249,268,275,284,303,319,321,334,336,349,351,368,370,379,387,392,406,416,
+ 429,432,439,447,451,454,1381
};
public static readonly ATN _ATN =
diff --git a/Sources/AngouriMath/Core/Antlr/ParsingHelpers.cs b/Sources/AngouriMath/Core/Antlr/ParsingHelpers.cs
index da2af49a7..ea23835e3 100644
--- a/Sources/AngouriMath/Core/Antlr/ParsingHelpers.cs
+++ b/Sources/AngouriMath/Core/Antlr/ParsingHelpers.cs
@@ -31,17 +31,29 @@ 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
+ // det, transpose, dot, cross and resultant are computed from what they are applied to where it
+ // is 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, 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 {example}, and {argument} is not one");
+ // A matrix written out, or null where the argument may yet stand for one -- a name, or an
+ // expression with a name in it beside a matrix, as A [[1, 2], [3, 4]] is, which simplifying
+ // would read as a number -- and det, transpose, trace and an entry are left as nodes over
+ // it. A number, a statement or a set is no matrix, and is refused as it was.
+ private static Matrix? MatrixOrUnknown(string function, Entity argument, string example)
+ => (argument as Matrix ?? argument.InnerSimplified) switch
+ {
+ Matrix when argument is not Matrix && HasANameOutsideAWrittenMatrix(argument) => null,
+ Matrix matrix => matrix,
+ Number or Statement or Set => throw new InvalidArgumentParseException(
+ $"{function} is taken of a matrix, as in {example}, and {argument} is not one"),
+ _ => null,
+ };
+
/// The entries of a vector, written as a column or as a row.
private static Entity[] Components(string function, Entity argument)
{
@@ -54,17 +66,57 @@ private static Entity[] Components(string function, Entity argument)
$"{function} is taken of vectors, and {vector} is a {vector.RowCount} by {vector.ColumnCount} matrix");
}
- /// det(M): the determinant of a square matrix.
+ /// det(M): the determinant of a square matrix, or the node over a name for one.
internal static Entity Determinant(Entity argument)
{
- var matrix = MatrixArgument("det", argument, "det([[1, 2], [3, 4]])");
+ if (MatrixOrUnknown("det", argument, "det([[1, 2], [3, 4]])") is not { } matrix)
+ return new Determinantf(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.
+ /// transpose(M), which ]T writes only after a bracket, or the node over a name for a matrix.
internal static Entity Transposed(Entity argument)
- => MatrixArgument("transpose", argument, "transpose([[1, 2], [3, 4]])").T;
+ => MatrixOrUnknown("transpose", argument, "transpose([[1, 2], [3, 4]])") is { } matrix
+ ? matrix.T
+ : new Transposef(argument);
+
+ /// trace(M): the sum of the diagonal of a square matrix, or the node over a name for one.
+ internal static Entity Trace(Entity argument)
+ {
+ if (MatrixOrUnknown("trace", argument, "trace([[1, 2], [3, 4]])") is not { } matrix)
+ return new Tracef(argument);
+ return matrix.IsSquare
+ ? matrix.Trace
+ : throw new InvalidArgumentParseException(
+ $"trace is taken of a square matrix, and {matrix} is {matrix.RowCount} by {matrix.ColumnCount}");
+ }
+
+ ///
+ /// A[i, j]: the entry in row i and column j, both counted from 1. Taken at once of a
+ /// matrix written out where both indices are whole numbers, and refused where they name no entry; a node
+ /// otherwise.
+ ///
+ internal static Entity Entry(Entity argument, List indices)
+ {
+ if (indices.Count != 2)
+ throw new InvalidArgumentParseException(
+ $"An entry of a matrix is named by its row and its column, as in A[1, 2], and {indices.Count} indices are given");
+ var (row, column) = (indices[0], indices[1]);
+ if (MatrixOrUnknown("An index", argument, "A[1, 2]") is not { } matrix)
+ return new MatrixEntryf(argument, row, column);
+ int? Position(Entity index, int count, string what)
+ => index.InnerSimplified switch
+ {
+ Integer i when i >= 1 && i <= count => (int)i - 1,
+ Number => throw new InvalidArgumentParseException(
+ $"{matrix} has {count} {what}s, counted from 1, and {index} is not one of them"),
+ _ => null,
+ };
+ return (Position(row, matrix.RowCount, "row"), Position(column, matrix.ColumnCount, "column")) is (int i, int j)
+ ? matrix[i, j]
+ : new MatrixEntryf(matrix, row, column);
+ }
///
/// dot(a, b): the sum of the products of the components, without conjugating either
diff --git a/Sources/AngouriMath/Core/Domains.Classes.cs b/Sources/AngouriMath/Core/Domains.Classes.cs
index 1ad83b90b..eeef3834d 100644
--- a/Sources/AngouriMath/Core/Domains.Classes.cs
+++ b/Sources/AngouriMath/Core/Domains.Classes.cs
@@ -54,6 +54,41 @@ partial record Variable
internal override Domain DefaultCodomain => Domain.Any;
}
+ // The determinant, the trace and an entry are numbers; the transpose is a matrix, which
+ // has no domain of numbers, as a matrix written out has none.
+ // https://github.com/asc-community/AngouriMath/issues/2147
+ partial record Determinantf
+ {
+ ///
+ public override Domain Codomain { get; protected init; } = Domain.Complex;
+ ///
+ internal override Domain DefaultCodomain => Domain.Complex;
+ }
+
+ partial record Transposef
+ {
+ ///
+ public override Domain Codomain { get; protected init; } = Domain.Any;
+ ///
+ internal override Domain DefaultCodomain => Domain.Any;
+ }
+
+ partial record Tracef
+ {
+ ///
+ public override Domain Codomain { get; protected init; } = Domain.Complex;
+ ///
+ internal override Domain DefaultCodomain => Domain.Complex;
+ }
+
+ partial record MatrixEntryf
+ {
+ ///
+ public override Domain Codomain { get; protected init; } = Domain.Complex;
+ ///
+ internal override Domain DefaultCodomain => Domain.Complex;
+ }
+
partial record Matrix
{
///
diff --git a/Sources/AngouriMath/Core/Entity/Omni/Entity.MatrixOperations.Classes.cs b/Sources/AngouriMath/Core/Entity/Omni/Entity.MatrixOperations.Classes.cs
new file mode 100644
index 000000000..fbe50ec93
--- /dev/null
+++ b/Sources/AngouriMath/Core/Entity/Omni/Entity.MatrixOperations.Classes.cs
@@ -0,0 +1,92 @@
+//
+// Copyright (c) 2019-2026 Angouri.
+// AngouriMath is licensed under MIT.
+// Details: https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md.
+// Website: https://am.angouri.org.
+//
+
+using System;
+
+namespace AngouriMath
+{
+ // The four operations on a matrix that an expression can name before the matrix is known. A
+ // matrix written out is computed from its entries as soon as it is parsed, as it was without
+ // these nodes; a node is what is left where the argument is not yet a matrix -- a name that
+ // stands for one, det(A) -- and it is computed once the argument becomes a matrix, by
+ // substitution or simplification. A variable carries no type yet
+ // (https://github.com/asc-community/AngouriMath/issues/1237), so these nodes are the only place
+ // a name is read as a matrix: anywhere else it is still a number to the rules.
+ // https://github.com/asc-community/AngouriMath/issues/2147
+ partial record Entity
+ {
+ ///
+ /// The determinant det(A) of a square matrix.
+ ///
+ ///
+ /// Computed when is a matrix, by . A
+ /// matrix that is not square has no determinant, and the node is left as it is rather than
+ /// given a value.
+ ///
+ public sealed partial record Determinantf(Entity Argument) : Function
+ {
+ private Determinantf New(Entity arg) =>
+ ReferenceEquals(Argument, arg) ? this : new(arg) { Codomain = Codomain };
+ ///
+ public override Entity Replace(Func func) => func(New(Argument.Replace(func)));
+ ///
+ protected override Entity[] InitDirectChildren() => new[] { Argument };
+ }
+
+ ///
+ /// The transpose transpose(A), the matrix whose rows are the columns of A.
+ /// A vector is a column, so its transpose is a row, as ]T writes it.
+ ///
+ public sealed partial record Transposef(Entity Argument) : Function
+ {
+ private Transposef New(Entity arg) =>
+ ReferenceEquals(Argument, arg) ? this : new(arg) { Codomain = Codomain };
+ ///
+ public override Entity Replace(Func func) => func(New(Argument.Replace(func)));
+ ///
+ protected override Entity[] InitDirectChildren() => new[] { Argument };
+ }
+
+ ///
+ /// The trace trace(A) of a square matrix, the sum of its diagonal entries.
+ ///
+ ///
+ /// Only of a square matrix: sums the diagonal of any matrix,
+ /// but the trace is defined for the square ones, as it is the sum of the eigenvalues.
+ ///
+ public sealed partial record Tracef(Entity Argument) : Function
+ {
+ private Tracef New(Entity arg) =>
+ ReferenceEquals(Argument, arg) ? this : new(arg) { Codomain = Codomain };
+ ///
+ public override Entity Replace(Func func) => func(New(Argument.Replace(func)));
+ ///
+ protected override Entity[] InitDirectChildren() => new[] { Argument };
+ }
+
+ ///
+ /// The entry A[i, j] in row i and column j of a matrix, counted from 1
+ /// as a_ij is.
+ ///
+ ///
+ /// Computed when is a matrix and both indices are whole numbers in
+ /// its range. An index out of the range or not whole names no entry, and the node is left
+ /// as it is rather than given a value.
+ ///
+ public sealed partial record MatrixEntryf(Entity Argument, Entity Row, Entity Column) : Function
+ {
+ private MatrixEntryf New(Entity arg, Entity row, Entity column) =>
+ ReferenceEquals(Argument, arg) && ReferenceEquals(Row, row) && ReferenceEquals(Column, column)
+ ? this : new(arg, row, column) { Codomain = Codomain };
+ ///
+ public override Entity Replace(Func func)
+ => func(New(Argument.Replace(func), Row.Replace(func), Column.Replace(func)));
+ ///
+ protected override Entity[] InitDirectChildren() => new[] { Argument, Row, Column };
+ }
+ }
+}
diff --git a/Sources/AngouriMath/Core/Serialization/Entity.Serialization.cs b/Sources/AngouriMath/Core/Serialization/Entity.Serialization.cs
index b67031b9d..1565db40a 100644
--- a/Sources/AngouriMath/Core/Serialization/Entity.Serialization.cs
+++ b/Sources/AngouriMath/Core/Serialization/Entity.Serialization.cs
@@ -64,6 +64,10 @@ [EntityJsonConverter] partial record Entity
[EntityJsonConverter] partial record Limitf;
[EntityJsonConverter] partial record Logf;
[EntityJsonConverter] partial record Matrix;
+ [EntityJsonConverter] partial record Determinantf;
+ [EntityJsonConverter] partial record Transposef;
+ [EntityJsonConverter] partial record Tracef;
+ [EntityJsonConverter] partial record MatrixEntryf;
[EntityJsonConverter] partial record Maxf;
[EntityJsonConverter] partial record Minf;
[EntityJsonConverter] partial record Minusf;
diff --git a/Sources/AngouriMath/Core/Transformations/Matching/MatchPattern.cs b/Sources/AngouriMath/Core/Transformations/Matching/MatchPattern.cs
index 13643d6a8..1b538b55c 100644
--- a/Sources/AngouriMath/Core/Transformations/Matching/MatchPattern.cs
+++ b/Sources/AngouriMath/Core/Transformations/Matching/MatchPattern.cs
@@ -478,6 +478,9 @@ internal abstract bool ETryBuild(
[typeof(Entity.DoubleFactorialf)] = (1, static c => new Entity.DoubleFactorialf(c[0])),
[typeof(Entity.Ref)] = (1, static c => new Entity.Ref(c[0])),
[typeof(Entity.Imf)] = (1, static c => new Entity.Imf(c[0])),
+ [typeof(Entity.Determinantf)] = (1, static c => new Entity.Determinantf(c[0])),
+ [typeof(Entity.Transposef)] = (1, static c => new Entity.Transposef(c[0])),
+ [typeof(Entity.Tracef)] = (1, static c => new Entity.Tracef(c[0])),
[typeof(Entity.Alephf)] = (1, static c => new Entity.Alephf(c[0])),
[typeof(Entity.Erfcf)] = (1, static c => new Entity.Erfcf(c[0])),
[typeof(Entity.Erfif)] = (1, static c => new Entity.Erfif(c[0])),
diff --git a/Sources/AngouriMath/Core/Transformations/Matching/MatchedRules.cs b/Sources/AngouriMath/Core/Transformations/Matching/MatchedRules.cs
index f60717747..493a256d4 100644
--- a/Sources/AngouriMath/Core/Transformations/Matching/MatchedRules.cs
+++ b/Sources/AngouriMath/Core/Transformations/Matching/MatchedRules.cs
@@ -2345,8 +2345,7 @@ is var (divided, remainder)
new MatchedRule(
"a-product-chain-is-sorted-and-grouped",
MatchPattern.Any("x"),
- (node, _) => Functions.Patterns.SortAndGroup(
- node, Mulf.LinearChildren(node), level, (a, b) => a * b),
+ (node, _) => Functions.Patterns.SortAndGroupFactors(node, level),
// Regrouping reads a quotient as a product with a negative power, which is the
// same value wherever the divisor is not zero.
Soundness.SoundUnderAssumptions,
@@ -2355,8 +2354,7 @@ is var (divided, remainder)
new MatchedRule(
"a-quotient-chain-is-sorted-and-grouped",
MatchPattern.Any("x"),
- (node, _) => Functions.Patterns.SortAndGroup(
- node, Mulf.LinearChildren(node), level, (a, b) => a * b),
+ (node, _) => Functions.Patterns.SortAndGroupFactors(node, level),
Soundness.SoundUnderAssumptions,
description: "a quotient is read as a product, whose factors are put in canonical order and grouped"),
diff --git a/Sources/AngouriMath/Docs/Contributing/WritingARule.md b/Sources/AngouriMath/Docs/Contributing/WritingARule.md
index 4c5f9597d..406a88087 100644
--- a/Sources/AngouriMath/Docs/Contributing/WritingARule.md
+++ b/Sources/AngouriMath/Docs/Contributing/WritingARule.md
@@ -110,7 +110,7 @@ itself, and needs no `when:` to say so. It is also strictly more specific than `
the ordering knows about — see below.
**Matchable is not the same as buildable.** A pattern can be *matched* against any node type, but a
-pattern used as a **replacement** must be one the library can construct: there are **78** such types.
+pattern used as a **replacement** must be one the library can construct: there are **81** such types.
Two families are deliberately absent, and neither is an oversight:
- **binders** — `Lambda`, `Set.ConditionalSet`. They bind a variable, and `DirectChildren` renames it
diff --git a/Sources/AngouriMath/Docs/Usage/Syntax.md b/Sources/AngouriMath/Docs/Usage/Syntax.md
index 00e2f4a61..80aa99f5f 100644
--- a/Sources/AngouriMath/Docs/Usage/Syntax.md
+++ b/Sources/AngouriMath/Docs/Usage/Syntax.md
@@ -223,15 +223,33 @@ 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
+`det(M)` is the determinant of a square matrix, `transpose(M)` its transpose and `trace(M)` the sum
+of its diagonal. `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
+arguments when it is parsed where they are matrices or vectors written out, or are once their
+operations are carried out: `det(2 * [[1, 2], [3, 4]])` is `-8`.
+
+`M[k, l]` is the entry in row `k` and column `l`, both counted from 1 as `a_ij` is:
+`[[1, 2], [3, 4]][2, 1]` is `3`. Write the brackets straight after what they index, and put anything
+looser than a name or a call in parentheses: `(A + B)[1, 2]`. A vector is indexed by both, `v[2, 1]`
+for its second component, since `v[2]` would be a component of a column and a row of a matrix.
+Remember that `i` is the imaginary unit, so an index is not called `i`. The C# indexer on a `Matrix`
+counts from 0, as C# does: `M[k, l]` in an expression is `matrix[k - 1, l - 1]` in code.
+
+`det`, `transpose`, `trace` and an entry of a name, `det(A)`, `transpose(A) * B`, `trace(A * B)`,
+`A[k, l]`, are nodes, carried out once the name is a matrix: by `Substitute`, by simplification, or
+in a compiled delegate taking `double[,]` or `Complex[,]`. Nothing else knows that the name is a
+matrix, since a name carries no type
+([#1237](https://github.com/asc-community/AngouriMath/issues/1237)), but a product with a transpose in
+it is kept in the order it is written. A non-square matrix has no determinant and no trace, and an
+index out of range names no entry: the node is left as it is. A number, a statement or a set is not a
+matrix, and `det(5)` is refused. A name beside a written matrix may stand for a matrix too, so
+`det(x * [[1, 2], [3, 4]])` is left until `x` is known, where the entries of `det([[x, 1], [2, x]])` are
+numbers and it is `x ^ 2 - 2`
([#2147](https://github.com/asc-community/AngouriMath/issues/2147)).
`laplacian(f, [x, y, z])` is the sum of the second derivatives of a scalar `f`, `jacobian(F, [x, y])`
diff --git a/Sources/AngouriMath/Functions/Compilation/IntoLinq/CompilationProtocol.cs b/Sources/AngouriMath/Functions/Compilation/IntoLinq/CompilationProtocol.cs
index 2c0cdf195..32ffcb079 100644
--- a/Sources/AngouriMath/Functions/Compilation/IntoLinq/CompilationProtocol.cs
+++ b/Sources/AngouriMath/Functions/Compilation/IntoLinq/CompilationProtocol.cs
@@ -368,7 +368,11 @@ Expression HandleProvidedf(Expression expr, Expression cond)
///
public virtual Expression ConvertOtherNode(IEnumerable en, Entity typeHolder)
{
-
+ // The transpose, the determinant, the trace and an entry of a matrix argument.
+ // https://github.com/asc-community/AngouriMath/issues/2147
+ if (TensorCompilation.MatrixOperation(typeHolder, en as IReadOnlyList ?? en.ToArray(), ConvertType) is { } ofMatrix)
+ return ofMatrix;
+
return typeHolder switch
{
Piecewise => HandlePiecewise(en),
diff --git a/Sources/AngouriMath/Functions/Compilation/IntoLinq/TensorCompilation.cs b/Sources/AngouriMath/Functions/Compilation/IntoLinq/TensorCompilation.cs
index bb09f27cc..ed1d12692 100644
--- a/Sources/AngouriMath/Functions/Compilation/IntoLinq/TensorCompilation.cs
+++ b/Sources/AngouriMath/Functions/Compilation/IntoLinq/TensorCompilation.cs
@@ -258,12 +258,18 @@ private sealed class Kit
internal MethodInfo? Inverse { get; }
internal MethodInfo? DivideByMatrix { get; }
internal MethodInfo? ScalarOverMatrix { get; }
+ internal MethodInfo Transpose { get; }
+ internal MethodInfo Determinant { get; }
+ internal MethodInfo Trace { get; }
+ internal MethodInfo Entry { get; }
private Kit(Type tensor, Type array, MethodInfo empty, MethodInfo set, MethodInfo add, MethodInfo subtract, MethodInfo multiply,
MethodInfo addScalar, MethodInfo subtractScalar, MethodInfo subtractFromScalar, MethodInfo multiplyScalar,
MethodInfo divideScalar, MethodInfo power, MethodInfo toArray, MethodInfo fromArray, MethodInfo toScalar,
- MethodInfo? inverse, MethodInfo? divideByMatrix, MethodInfo? scalarOverMatrix)
+ MethodInfo? inverse, MethodInfo? divideByMatrix, MethodInfo? scalarOverMatrix,
+ MethodInfo transpose, MethodInfo determinant, MethodInfo trace, MethodInfo entry)
{
+ (Transpose, Determinant, Trace, Entry) = (transpose, determinant, trace, entry);
(Tensor, Array, Empty, Set, Add, Subtract, Multiply, AddScalar, SubtractScalar, SubtractFromScalar, MultiplyScalar, DivideScalar, Power)
= (tensor, array, empty, set, add, subtract, multiply, addScalar, subtractScalar, subtractFromScalar, multiplyScalar, divideScalar, power);
(ToArray, FromArray, ToScalar, Inverse, DivideByMatrix, ScalarOverMatrix) = (toArray, fromArray, toScalar, inverse, divideByMatrix, scalarOverMatrix);
@@ -291,7 +297,11 @@ internal static Kit For(bool field) where TWrapper : struct, IOpera
Named, T>>(a => TensorCompilation.ToScalar(a)),
field ? Named, GenTensor>>(a => TensorCompilation.Inverse(a)) : null,
field ? Named, GenTensor, GenTensor>>((a, b) => TensorCompilation.DivideByMatrix(a, b)) : null,
- field ? Named, GenTensor>>((s, a) => TensorCompilation.ScalarOverMatrix(s, a)) : null);
+ field ? Named, GenTensor>>((s, a) => TensorCompilation.ScalarOverMatrix(s, a)) : null,
+ Named, GenTensor>>(a => TensorCompilation.Transpose(a)),
+ Named, T>>(a => TensorCompilation.Determinant(a)),
+ Named, T>>(a => TensorCompilation.Trace(a)),
+ Named, int, int, T>>((a, i, j) => TensorCompilation.Entry(a, i, j)));
}
[ConstantField]
@@ -596,6 +606,128 @@ public static GenTensor DivideByMatrix(GenTensor ScalarOverMatrix(T scalar, GenTensor a) where TWrapper : struct, IOperations
=> MultiplyScalar(Inverse(a), scalar);
+ /// The transpose, the rows of the one being the columns of the other.
+ public static GenTensor Transpose(GenTensor a) where TWrapper : struct, IOperations
+ {
+ var result = GenTensor.CreateMatrix(a.Shape[1], a.Shape[0]);
+ for (var i = 0; i < a.Shape[0]; i++)
+ for (var j = 0; j < a.Shape[1]; j++)
+ result[j, i] = a[i, j];
+ return result;
+ }
+
+ ///
+ /// The determinant, by Bareiss' fraction-free elimination: every division it makes is exact, so it is exact
+ /// over the whole numbers as well, and a row is exchanged for the pivot of largest size where the elements
+ /// have one, as partial pivoting chooses it, and for the first that is not zero where they do not. A zero
+ /// column gives 0.
+ ///
+ /// The matrix is not square, and has no determinant.
+ public static T Determinant(GenTensor a) where TWrapper : struct, IOperations
+ {
+ if (a.Shape[0] != a.Shape[1])
+ throw new InvalidMatrixOperationException($"A matrix of shape {a.Shape} is not square and has no determinant");
+ var ops = default(TWrapper);
+ var n = a.Shape[0];
+ var m = new T[n, n];
+ for (var i = 0; i < n; i++)
+ for (var j = 0; j < n; j++)
+ m[i, j] = a[i, j];
+ var sizable = typeof(T) == typeof(double) || typeof(T) == typeof(float) || typeof(T) == typeof(Complex);
+ var negated = false;
+ var previous = ops.CreateOne();
+ for (var k = 0; k < n - 1; k++)
+ {
+ var pivot = -1;
+ for (var row = k; row < n; row++)
+ if (!ops.IsZero(m[row, k]) && (pivot < 0 || sizable && Magnitude(m[row, k]) > Magnitude(m[pivot, k])))
+ {
+ pivot = row;
+ if (!sizable)
+ break;
+ }
+ if (pivot < 0)
+ return ops.CreateZero();
+ if (pivot != k)
+ {
+ for (var j = 0; j < n; j++)
+ (m[pivot, j], m[k, j]) = (m[k, j], m[pivot, j]);
+ negated = !negated;
+ }
+ for (var i = k + 1; i < n; i++)
+ {
+ for (var j = k + 1; j < n; j++)
+ m[i, j] = ops.Divide(ops.Subtract(ops.Multiply(m[i, j], m[k, k]), ops.Multiply(m[i, k], m[k, j])), previous);
+ m[i, k] = ops.CreateZero();
+ }
+ previous = m[k, k];
+ }
+ return negated ? ops.Negate(m[n - 1, n - 1]) : m[n - 1, n - 1];
+ }
+
+ /// The trace, the sum of the diagonal.
+ /// The matrix is not square, and has no trace.
+ public static T Trace(GenTensor a) where TWrapper : struct, IOperations
+ {
+ if (a.Shape[0] != a.Shape[1])
+ throw new InvalidMatrixOperationException($"A matrix of shape {a.Shape} is not square and has no trace");
+ var ops = default(TWrapper);
+ var sum = ops.CreateZero();
+ for (var i = 0; i < a.Shape[0]; i++)
+ sum = ops.Add(sum, a[i, i]);
+ return sum;
+ }
+
+ /// The entry in a row and a column, both counted from 1.
+ /// Either index is out of the matrix.
+ public static T Entry(GenTensor a, int row, int column) where TWrapper : struct, IOperations
+ => row >= 1 && row <= a.Shape[0] && column >= 1 && column <= a.Shape[1]
+ ? a[row - 1, column - 1]
+ : throw new InvalidMatrixOperationException($"A matrix of shape {a.Shape} has no entry at ({row}, {column}): its rows and columns are counted from 1");
+
+ /// A compiled index as the whole number it must be, checked when the delegate is called.
+ /// The index is not a whole number that fits an .
+ public static int WholeIndex(double index)
+ => Math.Floor(index) == index && index >= int.MinValue && index <= int.MaxValue
+ ? (int)index
+ : throw new InvalidMatrixOperationException($"An entry is indexed by whole numbers, and {index.ToString(System.Globalization.CultureInfo.InvariantCulture)} is not one");
+
+ ///
+ public static int WholeIndex(Complex index)
+ => index.Imaginary == 0
+ ? WholeIndex(index.Real)
+ : throw new InvalidMatrixOperationException($"An entry is indexed by whole numbers, and {index} is not one");
+
+ [ConstantField]
+ private static readonly MethodInfo wholeRealIndex = ((MethodCallExpression)((Expression>)(e => WholeIndex(e))).Body).Method;
+ [ConstantField]
+ private static readonly MethodInfo wholeComplexIndex = ((MethodCallExpression)((Expression>)(e => WholeIndex(e))).Body).Method;
+
+ ///
+ /// The compiled form of a transpose, a determinant, a trace or an entry, whose first operand is the matrix, or
+ /// where the node is none of them.
+ /// https://github.com/asc-community/AngouriMath/issues/2147
+ ///
+ internal static Expression? MatrixOperation(Entity node, IReadOnlyList operands, Func convert)
+ {
+ if (node is not (Entity.Transposef or Entity.Determinantf or Entity.Tracef or Entity.MatrixEntryf))
+ return null;
+ if (!kitsByTensor.TryGetValue(operands[0].Type, out var kit))
+ throw new UncompilableNodeException(
+ $"`{node.Stringize()}` is taken of a matrix, and its argument compiles to {operands[0].Type.Name}: compile it with a matrix type, such as double[,], for the argument");
+ Expression Index(Expression index)
+ => Expression.Call(
+ index.Type == typeof(Complex) ? wholeComplexIndex : wholeRealIndex,
+ index.Type == typeof(Complex) ? index : convert(index, typeof(double)));
+ return node switch
+ {
+ Entity.Transposef => Expression.Call(kit.Transpose, operands[0]),
+ Entity.Determinantf => Expression.Call(kit.Determinant, operands[0]),
+ Entity.Tracef => Expression.Call(kit.Trace, operands[0]),
+ _ => Expression.Call(kit.Entry, operands[0], Index(operands[1]), Index(operands[2])),
+ };
+ }
+
/// The compiled form of a matrix node over the given compiled elements, all of one type.
internal static Expression Build(Entity.Matrix matrix, IReadOnlyList elements)
{
@@ -776,6 +908,24 @@ private static (int Rows, int Columns)? ShapeOf(Entity expr, Func a!.Value.Rows) || column is Entity.Number.Integer j && (j < 1 || j > a!.Value.Columns)))
+ throw new InvalidMatrixOperationException($"`{expr.Stringize()}` has no value: a {Show(a)} matrix has no such entry, its rows and columns counted from 1");
+ return null;
+ }
default:
foreach (var child in expr.DirectChildren)
ShapeOf(child, isMatrix);
diff --git a/Sources/AngouriMath/Functions/Continuous/Differentiation.cs b/Sources/AngouriMath/Functions/Continuous/Differentiation.cs
index 608de0fce..4b5a689d1 100644
--- a/Sources/AngouriMath/Functions/Continuous/Differentiation.cs
+++ b/Sources/AngouriMath/Functions/Continuous/Differentiation.cs
@@ -152,6 +152,34 @@ variable.Evaled is Number ? 0
: this == variable ? 1 : 0;
}
+ // The transpose, the trace and an entry are linear in the matrix, so each is taken of its
+ // derivative, entry by entry. The determinant is not linear and keeps its derivative node:
+ // Jacobi's formula needs the adjugate, which has no node.
+ // https://github.com/asc-community/AngouriMath/issues/2147
+ partial record Transposef
+ {
+ ///
+ protected override Entity InnerDifferentiate(Variable variable)
+ => IsConstantIn(variable) ? Integer.Zero : new Transposef(Argument.DerivativeOver(variable));
+ }
+
+ partial record Tracef
+ {
+ ///
+ protected override Entity InnerDifferentiate(Variable variable)
+ => IsConstantIn(variable) ? Integer.Zero : new Tracef(Argument.DerivativeOver(variable));
+ }
+
+ partial record MatrixEntryf
+ {
+ // Only where the indices do not vary: an entry is not a function of a continuous index.
+ ///
+ protected override Entity InnerDifferentiate(Variable variable)
+ => IsConstantIn(variable) ? Integer.Zero
+ : Row.ContainsNode(variable) || Column.ContainsNode(variable) ? base.InnerDifferentiate(variable)
+ : new MatrixEntryf(Argument.DerivativeOver(variable), Row, Column);
+ }
+
partial record Matrix
{
///
diff --git a/Sources/AngouriMath/Functions/Continuous/Solvers/EquationSolver/InvertNode.Classes.cs b/Sources/AngouriMath/Functions/Continuous/Solvers/EquationSolver/InvertNode.Classes.cs
index c9bc0017e..0470d7dd9 100644
--- a/Sources/AngouriMath/Functions/Continuous/Solvers/EquationSolver/InvertNode.Classes.cs
+++ b/Sources/AngouriMath/Functions/Continuous/Solvers/EquationSolver/InvertNode.Classes.cs
@@ -28,6 +28,29 @@ partial record Matrix
private protected override IEnumerable? InvertNode(Entity value, Entity x) => new[] { this };
}
+ // The transpose is its own inverse. The determinant, the trace and an entry forget most of the matrix, and
+ // no matrix is found from one of them. https://github.com/asc-community/AngouriMath/issues/2147
+ partial record Transposef
+ {
+ private protected override IEnumerable? InvertNode(Entity value, Entity x) =>
+ Argument.Invert(new Transposef(value), x);
+ }
+
+ partial record Determinantf
+ {
+ private protected override IEnumerable? InvertNode(Entity value, Entity x) => null;
+ }
+
+ partial record Tracef
+ {
+ private protected override IEnumerable? InvertNode(Entity value, Entity x) => null;
+ }
+
+ partial record MatrixEntryf
+ {
+ private protected override IEnumerable? InvertNode(Entity value, Entity x) => null;
+ }
+
// Each function and operator processing
partial record Sumf
{
diff --git a/Sources/AngouriMath/Functions/Evaluation/Evaluation.Omni/Evaluation.Omni.Classes.cs b/Sources/AngouriMath/Functions/Evaluation/Evaluation.Omni/Evaluation.Omni.Classes.cs
index bb6af7419..500acd0dd 100644
--- a/Sources/AngouriMath/Functions/Evaluation/Evaluation.Omni/Evaluation.Omni.Classes.cs
+++ b/Sources/AngouriMath/Functions/Evaluation/Evaluation.Omni/Evaluation.Omni.Classes.cs
@@ -563,6 +563,114 @@ protected override Entity InnerSimplify(bool isExact)
}
+ ///
+ /// An operation on a matrix, carried out where is one once simplified. A matrix
+ /// written in place is kept a matrix even at 1x1, where simplifying it whole would give its entry: det([[5]])
+ /// is 5 because [[5]] is a matrix, and det(5) is left alone because 5 is not one. A condition or the cases of
+ /// a piecewise are carried through, as a function of a number carries them.
+ /// https://github.com/asc-community/AngouriMath/issues/2147
+ ///
+ /// What the operation is applied to.
+ /// Whether to keep the answer exact, as for simplification against evaluation.
+ /// The value at a matrix, or null where the matrix has none, as a matrix that is not square has no determinant.
+ /// The value at anything else, a rewrite such as det(transpose(A)) = det(A), or null.
+ /// The node, over the simplified argument.
+ private static Entity OnMatrixArgument(Entity argument, bool isExact, Func ofMatrix,
+ Func ofOther, Func unevaluated)
+ {
+ // A name beside a written matrix may stand for a matrix, and simplification reads it as a number:
+ // A [[2, 0], [0, 3]] simplifies to [[2 A, 0], [0, 3 A]], whose determinant 6 A^2 is not det(A) det(...).
+ var readsANameAsANumber = argument is not Matrix && HasANameOutsideAWrittenMatrix(argument);
+ Entity Over(Entity simplified) => simplified switch
+ {
+ Matrix matrix => (readsANameAsANumber ? null : ofMatrix(matrix)) ?? unevaluated(readsANameAsANumber ? argument : matrix),
+ Providedf(var expression, var predicate) => Over(expression).Provided(predicate),
+ Piecewise piecewise => piecewise.ApplyToValues(Over),
+ var other => ofOther(other) ?? unevaluated(other),
+ };
+ return Over(argument is Matrix written ? written.Elementwise(e => e.InnerSimplified(isExact)) : argument.InnerSimplified(isExact));
+ }
+
+ ///
+ /// Whether a name stands somewhere in other than as an entry of a matrix written out, or
+ /// inside a determinant, a trace or an entry, which are numbers whatever the name is. Such a name may stand for
+ /// a matrix, and a matrix operation over it is left until it is one.
+ /// https://github.com/asc-community/AngouriMath/issues/2147
+ ///
+ internal static bool HasANameOutsideAWrittenMatrix(Entity expr)
+ {
+ if (expr is Matrix or Determinantf or Tracef or MatrixEntryf)
+ return false;
+ if (expr is Variable { IsConstant: false })
+ return true;
+ var children = expr.DirectChildren;
+ for (var i = 0; i < children.Count; i++)
+ if (HasANameOutsideAWrittenMatrix(children[i]))
+ return true;
+ return false;
+ }
+
+ partial record Determinantf
+ {
+ // Whether there is a determinant depends on the shape alone, which no condition on the entries can say.
+ private protected override Entity IntrinsicCondition => Boolean.True;
+ ///
+ protected override Entity InnerSimplify(bool isExact)
+ => OnMatrixArgument(Argument, isExact,
+ matrix => matrix.IsSquare ? matrix.Determinant?.InnerSimplified(isExact) : null,
+ // det(A^T) = det(A), the one being defined exactly where the other is.
+ other => other is Transposef(var inner) ? new Determinantf(inner).InnerSimplified(isExact) : null,
+ New);
+ }
+
+ partial record Transposef
+ {
+ private protected override Entity IntrinsicCondition => Boolean.True;
+ ///
+ protected override Entity InnerSimplify(bool isExact)
+ => OnMatrixArgument(Argument, isExact,
+ matrix => matrix.T.InnerSimplified(isExact),
+ other => other is Transposef(var inner) ? inner : null,
+ New);
+ }
+
+ partial record Tracef
+ {
+ private protected override Entity IntrinsicCondition => Boolean.True;
+ ///
+ protected override Entity InnerSimplify(bool isExact)
+ => OnMatrixArgument(Argument, isExact,
+ matrix => matrix.IsSquare ? matrix.Trace.InnerSimplified(isExact) : null,
+ // The transpose has the same diagonal.
+ other => other is Transposef(var inner) ? new Tracef(inner).InnerSimplified(isExact) : null,
+ New);
+ }
+
+ partial record MatrixEntryf
+ {
+ private protected override Entity IntrinsicCondition => Boolean.True;
+
+ // The index as a position counted from 0, where it is a whole number from 1 to the count.
+ private static int? Position(Entity index, int count)
+ => index is Integer integer && integer.EInteger.CompareTo(1) >= 0 && integer.EInteger.CompareTo(count) <= 0
+ ? integer.EInteger.ToInt32Checked() - 1
+ : null;
+
+ ///
+ protected override Entity InnerSimplify(bool isExact)
+ {
+ var row = Row.InnerSimplified(isExact);
+ var column = Column.InnerSimplified(isExact);
+ return OnMatrixArgument(Argument, isExact,
+ matrix => (Position(row, matrix.RowCount), Position(column, matrix.ColumnCount)) is (int i, int j)
+ ? matrix[i, j]
+ : null,
+ // The (i, j) entry of the transpose is the (j, i) entry of the matrix.
+ other => other is Transposef(var inner) ? new MatrixEntryf(inner, column, row).InnerSimplified(isExact) : null,
+ argument => New(argument, row, column));
+ }
+ }
+
partial record Matrix
{
private protected override Entity IntrinsicCondition => Boolean.True;
diff --git a/Sources/AngouriMath/Functions/Output/Latex/Latex.Omni.Classes.cs b/Sources/AngouriMath/Functions/Output/Latex/Latex.Omni.Classes.cs
index b7bc59797..93391ecdb 100644
--- a/Sources/AngouriMath/Functions/Output/Latex/Latex.Omni.Classes.cs
+++ b/Sources/AngouriMath/Functions/Output/Latex/Latex.Omni.Classes.cs
@@ -151,6 +151,33 @@ private protected override string LatexizeNode() => @"\begin{cases}" +
@"\end{cases}";
}
+ // det and tr as operators, the transpose as an upright T, as ISO 80000-2 writes them, and an
+ // entry as a subscript. https://github.com/asc-community/AngouriMath/issues/2147
+ partial record Determinantf
+ {
+ ///
+ private protected override string LatexizeNode() => $@"\det\left({Argument.Latexize()}\right)";
+ }
+
+ partial record Transposef
+ {
+ ///
+ private protected override string LatexizeNode() => $@"{{{Argument.Latexize(Argument.Priority < Priority.Func)}}}^{{\mathrm{{T}}}}";
+ }
+
+ partial record Tracef
+ {
+ ///
+ private protected override string LatexizeNode() => $@"\operatorname{{tr}}\left({Argument.Latexize()}\right)";
+ }
+
+ partial record MatrixEntryf
+ {
+ ///
+ private protected override string LatexizeNode()
+ => $@"{{{Argument.Latexize(Argument.Priority < Priority.Func)}}}_{{{Row.Latexize()},{Column.Latexize()}}}";
+ }
+
partial record Matrix
{
///
diff --git a/Sources/AngouriMath/Functions/Output/ToString/ToString.Omni.Classes.cs b/Sources/AngouriMath/Functions/Output/ToString/ToString.Omni.Classes.cs
index 6d0ec77af..427b5c13c 100644
--- a/Sources/AngouriMath/Functions/Output/ToString/ToString.Omni.Classes.cs
+++ b/Sources/AngouriMath/Functions/Output/ToString/ToString.Omni.Classes.cs
@@ -234,6 +234,42 @@ private protected override string StringizeNode()
public override string ToString() => Stringize();
}
+ // https://github.com/asc-community/AngouriMath/issues/2147
+ partial record Determinantf
+ {
+ ///
+ private protected override string StringizeNode() => $"det({Argument.Stringize()})";
+ ///
+ public override string ToString() => Stringize();
+ }
+
+ partial record Transposef
+ {
+ ///
+ private protected override string StringizeNode() => $"transpose({Argument.Stringize()})";
+ ///
+ public override string ToString() => Stringize();
+ }
+
+ partial record Tracef
+ {
+ ///
+ private protected override string StringizeNode() => $"trace({Argument.Stringize()})";
+ ///
+ public override string ToString() => Stringize();
+ }
+
+ partial record MatrixEntryf
+ {
+ // The brackets follow a name or a call directly, and anything looser is put in
+ // parentheses first, so that (A + B)[1, 2] is not read as A + B[1, 2].
+ ///
+ private protected override string StringizeNode()
+ => $"{Argument.Stringize(Argument.Priority < Priority.Func)}[{Row.Stringize()}, {Column.Stringize()}]";
+ ///
+ public override string ToString() => Stringize();
+ }
+
partial record Matrix
{
///
diff --git a/Sources/AngouriMath/Functions/Output/ToSympy/ToSympy.Omni.Classes.cs b/Sources/AngouriMath/Functions/Output/ToSympy/ToSympy.Omni.Classes.cs
index ff83e61a3..b1f1ef27e 100644
--- a/Sources/AngouriMath/Functions/Output/ToSympy/ToSympy.Omni.Classes.cs
+++ b/Sources/AngouriMath/Functions/Output/ToSympy/ToSympy.Omni.Classes.cs
@@ -160,6 +160,28 @@ partial record Piecewise
internal override string ToSymPy() => $"sympy.Piecewise({string.Join(", ", Cases.Select(c => $"({c.Expression.ToSymPy()}, {c.Predicate.ToSymPy()})"))})";
}
+ // https://github.com/asc-community/AngouriMath/issues/2147
+ partial record Determinantf
+ {
+ internal override string ToSymPy() => $"sympy.det({Argument.ToSymPy()})";
+ }
+
+ partial record Transposef
+ {
+ internal override string ToSymPy() => $"sympy.transpose({Argument.ToSymPy()})";
+ }
+
+ partial record Tracef
+ {
+ internal override string ToSymPy() => $"sympy.trace({Argument.ToSymPy()})";
+ }
+
+ // SymPy counts a matrix's rows and columns from 0, and this node from 1.
+ partial record MatrixEntryf
+ {
+ internal override string ToSymPy() => $"({Argument.ToSymPy()})[({Row.ToSymPy()}) - 1, ({Column.ToSymPy()}) - 1]";
+ }
+
partial record Matrix
{
internal override string ToSymPy()
diff --git a/Sources/AngouriMath/Functions/Simplification/Patterns/Patterns.cs b/Sources/AngouriMath/Functions/Simplification/Patterns/Patterns.cs
index 9435d694f..4b8be3408 100644
--- a/Sources/AngouriMath/Functions/Simplification/Patterns/Patterns.cs
+++ b/Sources/AngouriMath/Functions/Simplification/Patterns/Patterns.cs
@@ -33,6 +33,22 @@ internal static Entity SortAndGroup(Entity original, IEnumerable childre
return sorted == original ? original : sorted;
}
+ ///
+ /// The factors of a product sorted and grouped, unless one of them is a transpose, which is a matrix: matrices do
+ /// not commute, and AᵀA is not AAᵀ. The product is then left in the order it is written, its other factors
+ /// included, since a name beside a transpose may stand for a matrix too; a name carries no type to say which
+ /// (https://github.com/asc-community/AngouriMath/issues/1237).
+ /// https://github.com/asc-community/AngouriMath/issues/2147
+ ///
+ internal static Entity SortAndGroupFactors(Entity original, TreeAnalyzer.SortLevel level)
+ {
+ var factors = Mulf.LinearChildren(original);
+ for (var i = 0; i < factors.Count; i++)
+ if (factors[i] is Transposef or Powf(Transposef, _))
+ return original;
+ return SortAndGroup(original, factors, level, static (a, b) => a * b);
+ }
+
/// Actual sorting with
[AddressableRules]
internal static Func SortRules(TreeAnalyzer.SortLevel level) => x => x switch
@@ -40,7 +56,7 @@ internal static Entity SortAndGroup(Entity original, IEnumerable childre
Sumf or Minusf =>
SortAndGroup(x, Sumf.LinearChildren(x), level, (a, b) => a + b),
Mulf or Divf =>
- SortAndGroup(x, Mulf.LinearChildren(x), level, (a, b) => a * b),
+ SortAndGroupFactors(x, level),
Andf =>
SortAndGroup(x, Andf.LinearChildren(x), level, (a, b) => a & b),
Orf =>
diff --git a/Sources/AngouriMath/Functions/Simplification/ProductsOfMatrices.cs b/Sources/AngouriMath/Functions/Simplification/ProductsOfMatrices.cs
new file mode 100644
index 000000000..1731bb04b
--- /dev/null
+++ b/Sources/AngouriMath/Functions/Simplification/ProductsOfMatrices.cs
@@ -0,0 +1,118 @@
+//
+// Copyright (c) 2019-2026 Angouri.
+// AngouriMath is licensed under MIT.
+// Details: https://github.com/asc-community/AngouriMath/blob/master/LICENSE.md.
+// Website: https://am.angouri.org.
+//
+
+using System.Collections.Generic;
+using System.Linq;
+using static AngouriMath.Entity;
+
+namespace AngouriMath.Functions
+{
+ ///
+ /// Products with a transpose in them, kept out of the reach of simplification. A transpose is a matrix, and
+ /// matrices do not commute: AᵀB is not BAᵀ, and AᵀB - BAᵀ is not 0. Every pass of the simplifier reads a product
+ /// as commutative -- sorting, collecting like factors, reading it as a polynomial, printing it -- so such a
+ /// product is set aside as a name of its own, the rest simplified around it, and the product put back with its
+ /// factors simplified each on its own, in the order they were written. A name beside a transpose is kept in its
+ /// place too, since it may stand for a matrix, and a name carries no type to say whether it does
+ /// (https://github.com/asc-community/AngouriMath/issues/1237). The transpose of a matrix written out is not
+ /// set aside: simplification carries it out. A determinant, a transpose, a trace or an entry of a name beside a
+ /// written matrix is set aside whole, since simplifying its argument reads the name as a number.
+ /// https://github.com/asc-community/AngouriMath/issues/2147
+ ///
+ internal static class ProductsOfMatrices
+ {
+ ///
+ /// with each product of a transpose and anything but a number in place of a fresh
+ /// name, and the products by those names, innermost first; or null where there is no such product, which is
+ /// found without allocating, since every simplification asks.
+ ///
+ internal static (Entity Frozen, List<(Variable Name, Entity Product)> Products)? Frozen(Entity expr)
+ {
+ if (!HasMatrixOperation(expr))
+ return null;
+ var products = new List<(Variable Name, Entity Product)>();
+ var taken = new HashSet(expr.Vars);
+ var frozen = expr.Replace(node =>
+ {
+ if (!(node is Mulf or Divf && IsAProductOfMatrices(node, products) || ReadsANameAsANumber(node)))
+ return node;
+ // One product written twice is one name, so that AᵀB - AᵀB is still 0.
+ var same = products.FindIndex(p => p.Product == node);
+ if (same >= 0)
+ return products[same].Name;
+ var name = Variable.CreateTemp(taken);
+ taken.Add(name);
+ products.Add((name, node));
+ return name;
+ });
+ return products.Count == 0 ? null : (frozen, products);
+ }
+
+ ///
+ /// with the products put back, outermost first so that a product inside another
+ /// is reached after it, each factor simplified on its own.
+ ///
+ internal static Entity Thawed(Entity simplified, List<(Variable Name, Entity Product)> products, int level)
+ {
+ for (var k = products.Count - 1; k >= 0; k--)
+ {
+ var (name, product) = products[k];
+ var factorsSimplified = product switch
+ {
+ Mulf(var left, var right) => (Entity)new Mulf(Factor(left, products, level), Factor(right, products, level)),
+ Divf(var left, var right) => new Divf(Factor(left, products, level), Factor(right, products, level)),
+ _ => product,
+ };
+ // Carried out where the factors have become matrices written out, and only there: with a name
+ // beside a written matrix, carrying it out reads the name as a number.
+ simplified = simplified.Substitute(name,
+ Entity.HasANameOutsideAWrittenMatrix(factorsSimplified) ? factorsSimplified : factorsSimplified.InnerSimplified);
+ }
+ return simplified;
+ }
+
+ // A factor that is itself one of the names stays a name, to be put back in its turn.
+ private static Entity Factor(Entity factor, List<(Variable Name, Entity Product)> products, int level)
+ => factor is Variable variable && products.Exists(p => p.Name == variable) ? factor : factor.Simplify(level);
+
+ private static bool HasMatrixOperation(Entity node)
+ {
+ if (node is Transposef { Argument: not Matrix } or Determinantf { Argument: not Matrix }
+ or Tracef { Argument: not Matrix } or MatrixEntryf { Argument: not Matrix })
+ return true;
+ var children = node.DirectChildren;
+ for (var i = 0; i < children.Count; i++)
+ if (HasMatrixOperation(children[i]))
+ return true;
+ return false;
+ }
+
+ // An operation on a matrix whose argument has a name beside a written matrix, as det(A [[2, 0], [0, 3]]) has:
+ // simplifying the argument would read the name as a number and multiply it into the entries, and the
+ // operation would then be carried out on that. It is set aside whole until the name is a matrix.
+ private static bool ReadsANameAsANumber(Entity node)
+ => node is Transposef or Determinantf or Tracef or MatrixEntryf
+ && node.DirectChildren[0] is not Matrix and var argument
+ && argument.Nodes.Any(n => n is Matrix)
+ && Entity.HasANameOutsideAWrittenMatrix(argument);
+
+ // A transpose, or a product already set aside, among two or more factors that are not numbers.
+ private static bool IsAProductOfMatrices(Entity product, List<(Variable Name, Entity Product)> products)
+ {
+ var factors = Mulf.LinearChildren(product);
+ var (matrices, others) = (0, 0);
+ foreach (var factor in factors)
+ if (factor is Transposef { Argument: not Matrix } or Powf(Transposef { Argument: not Matrix }, _)
+ || factor is Variable variable && products.Exists(p => p.Name == variable)
+ || factor is Powf(Variable powered, _) && products.Exists(p => p.Name == powered))
+ matrices++;
+ else if (factor is not Number)
+ others++;
+ return matrices > 0 && matrices + others >= 2;
+ }
+ }
+}
diff --git a/Sources/AngouriMath/Functions/Simplification/Simplificator.cs b/Sources/AngouriMath/Functions/Simplification/Simplificator.cs
index cbb7b3a06..d7c8e6055 100644
--- a/Sources/AngouriMath/Functions/Simplification/Simplificator.cs
+++ b/Sources/AngouriMath/Functions/Simplification/Simplificator.cs
@@ -42,6 +42,8 @@ internal static Entity PickSimplest(Entity one, Entity another)
/// See more details in
internal static Entity Simplify(Entity expr, int level)
{
+ if (ProductsOfMatrices.Frozen(expr) is var (frozen, products))
+ return ProductsOfMatrices.Thawed(Simplify(frozen, level), products, level);
simplifying++;
try
{
@@ -203,6 +205,10 @@ private static Entity FactorsInPrintOrder(Entity.Mulf product)
return product;
var factors = new System.Collections.Generic.List();
Gather(product, factors);
+ // A product with a transpose in it is a product of matrices, which do not commute.
+ // https://github.com/asc-community/AngouriMath/issues/2147
+ if (factors.Exists(static factor => factor is Entity.Transposef or Entity.Powf(Entity.Transposef, _)))
+ return product;
var ordered = new System.Collections.Generic.List(factors.Count);
for (var rank = 0; rank <= 2; rank++)
foreach (var factor in factors)
diff --git a/Sources/AngouriMath/Functions/Substitute.cs b/Sources/AngouriMath/Functions/Substitute.cs
index 29655c4bb..646452c2f 100644
--- a/Sources/AngouriMath/Functions/Substitute.cs
+++ b/Sources/AngouriMath/Functions/Substitute.cs
@@ -11,6 +11,34 @@ partial record Entity
{
#region Simple
+ partial record Determinantf
+ {
+ ///
+ public override Entity Substitute(Entity x, Entity value)
+ => this == x ? value : New(Argument.Substitute(x, value));
+ }
+
+ partial record Transposef
+ {
+ ///
+ public override Entity Substitute(Entity x, Entity value)
+ => this == x ? value : New(Argument.Substitute(x, value));
+ }
+
+ partial record Tracef
+ {
+ ///
+ public override Entity Substitute(Entity x, Entity value)
+ => this == x ? value : New(Argument.Substitute(x, value));
+ }
+
+ partial record MatrixEntryf
+ {
+ ///
+ public override Entity Substitute(Entity x, Entity value)
+ => this == x ? value : New(Argument.Substitute(x, value), Row.Substitute(x, value), Column.Substitute(x, value));
+ }
+
partial record Matrix
{
///
diff --git a/Sources/AngouriMath/Functions/TreeAnalyzer/Sort.Classes.cs b/Sources/AngouriMath/Functions/TreeAnalyzer/Sort.Classes.cs
index 611b40e60..f36431eb7 100644
--- a/Sources/AngouriMath/Functions/TreeAnalyzer/Sort.Classes.cs
+++ b/Sources/AngouriMath/Functions/TreeAnalyzer/Sort.Classes.cs
@@ -50,6 +50,30 @@ public partial record Variable
private protected override string SortHashName(SortLevel level) => "v_" + Name;
}
+ partial record Determinantf
+ {
+ private protected override string SortHashName(SortLevel level)
+ => Choice(level, "det_", "det_", "det_");
+ }
+
+ partial record Transposef
+ {
+ private protected override string SortHashName(SortLevel level)
+ => Choice(level, "transpose_", "transpose_", "transpose_");
+ }
+
+ partial record Tracef
+ {
+ private protected override string SortHashName(SortLevel level)
+ => Choice(level, "trace_", "trace_", "trace_");
+ }
+
+ partial record MatrixEntryf
+ {
+ private protected override string SortHashName(SortLevel level)
+ => Choice(level, "entry_", "entry_", "entry_");
+ }
+
partial record Matrix
{
private protected override string SortHashName(SortLevel level)
diff --git a/Sources/MCP/AngouriMath.Mcp/Resources.cs b/Sources/MCP/AngouriMath.Mcp/Resources.cs
index 0ff34bb99..f5af05bac 100644
--- a/Sources/MCP/AngouriMath.Mcp/Resources.cs
+++ b/Sources/MCP/AngouriMath.Mcp/Resources.cs
@@ -108,10 +108,12 @@ 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`
+ - matrices and vectors: `det transpose trace 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)`, `transpose(A)`, `trace(A)` and the entry `A[k, l]` (counted from 1)
+ of a name are nodes, carried out once the name is substituted by a matrix.
+ `cross(a, b)` is the vector product in space and `cross([x, y])` is `[-y, x]`;
+ `resultant(p, q, x)` eliminates `x`
- `forwarddifference(f, k)`, which is `f(k + 1) - f(k)` once parsed
- `laplacian(f, [x, y])`, `jacobian(F, [x, y])` and `hessian(f, [x, y])`, made of
`derivative` nodes when parsed; the variables are a vector, or one name
diff --git a/Sources/Tests/McpUnitTests/ParsingTest.cs b/Sources/Tests/McpUnitTests/ParsingTest.cs
index 74f7e0283..a00eddfb9 100644
--- a/Sources/Tests/McpUnitTests/ParsingTest.cs
+++ b/Sources/Tests/McpUnitTests/ParsingTest.cs
@@ -60,7 +60,7 @@ public void TheSyntaxDocumentNamesEveryFunctionTheGrammarAccepts(string name)
}
catch (InvalidArgumentParseException)
{
- // A function of a matrix or a vector written out, which x is not: det(x).
+ // A function of a matrix or a vector written out, which x is not: dot(x).
}
var syntax = Resources.Read("angourimath://syntax")!;
Assert.True(Regex.IsMatch(syntax, $@"(?
+ /// det, transpose, trace and A[k, l] of a name that stands for a matrix: nodes, computed
+ /// once the name is a matrix, by substitution, simplification, evaluation or a compiled delegate. Every value is
+ /// checked against one computed here from the entries, at real, negative and non-real matrices.
+ /// #2147
+ ///
+ [Trait("Area", "Common")]
+ public sealed class MatrixOperationNodesTest
+ {
+ // Real, negative and non-real entries, square and not.
+ private static readonly Complex[][,] Squares =
+ {
+ new Complex[,] { { 1, 2 }, { 3, 4 } },
+ new Complex[,] { { -1.5, 2 }, { -3, -0.25 } },
+ new Complex[,] { { new(1, 2), -3 }, { new(0, -1), new(2.5, 0.5) } },
+ new Complex[,] { { 2, -1, 0.5 }, { -3, 4, 1 }, { 0, -2, -5 } },
+ new Complex[,] { { new(1, -1), 2, 0 }, { -1, new(0, 3), 4 }, { 2, -2, new(-1, 1) } },
+ };
+
+ private static readonly Complex[][,] NotSquare =
+ {
+ new Complex[,] { { 1, 2, 3 }, { 4, 5, 6 } },
+ new Complex[,] { { -1 }, { new(0, 2) } },
+ };
+
+ private static Entity.Matrix AsEntity(Complex[,] a) => MathS.Matrix(a.GetLength(0), a.GetLength(1), (r, c) => (Entity)a[r, c]);
+
+ private static Complex Value(Entity e) => e.EvalNumerical().ToNumerics();
+
+ private static void Near(Complex expected, Complex actual)
+ => Assert.True(Complex.Abs(expected - actual) <= 1e-9 * Math.Max(1, Complex.Abs(expected)), $"expected {expected}, got {actual}");
+
+ // The determinant by expansion along the first row, which is its definition, not the library's algorithm.
+ private static Complex Det(Complex[,] a)
+ {
+ var n = a.GetLength(0);
+ if (n == 1)
+ return a[0, 0];
+ var sum = Complex.Zero;
+ for (var j = 0; j < n; j++)
+ {
+ var minor = new Complex[n - 1, n - 1];
+ for (var r = 1; r < n; r++)
+ for (int c = 0, k = 0; c < n; c++)
+ if (c != j)
+ minor[r - 1, k++] = a[r, c];
+ sum += (j % 2 == 0 ? 1 : -1) * a[0, j] * Det(minor);
+ }
+ return sum;
+ }
+
+ private static Complex[,] Product(Complex[,] a, Complex[,] b)
+ {
+ var result = new Complex[a.GetLength(0), b.GetLength(1)];
+ for (var i = 0; i < a.GetLength(0); i++)
+ for (var j = 0; j < b.GetLength(1); j++)
+ for (var k = 0; k < a.GetLength(1); k++)
+ result[i, j] += a[i, k] * b[k, j];
+ return result;
+ }
+
+ private static Complex[,] Transposed(Complex[,] a)
+ {
+ var result = new Complex[a.GetLength(1), a.GetLength(0)];
+ for (var i = 0; i < a.GetLength(0); i++)
+ for (var j = 0; j < a.GetLength(1); j++)
+ result[j, i] = a[i, j];
+ return result;
+ }
+
+ private static Complex[,] Entries(Entity value)
+ {
+ var matrix = Assert.IsType(value);
+ var result = new Complex[matrix.RowCount, matrix.ColumnCount];
+ for (var r = 0; r < matrix.RowCount; r++)
+ for (var c = 0; c < matrix.ColumnCount; c++)
+ result[r, c] = Value(matrix[r, c]);
+ return result;
+ }
+
+ private static void Near(Complex[,] expected, Complex[,] actual)
+ {
+ Assert.Equal(expected.GetLength(0), actual.GetLength(0));
+ Assert.Equal(expected.GetLength(1), actual.GetLength(1));
+ for (var r = 0; r < expected.GetLength(0); r++)
+ for (var c = 0; c < expected.GetLength(1); c++)
+ Near(expected[r, c], actual[r, c]);
+ }
+
+ [Theory]
+ [InlineData("det(A)", typeof(Entity.Determinantf))]
+ [InlineData("transpose(A)", typeof(Entity.Transposef))]
+ [InlineData("trace(A)", typeof(Entity.Tracef))]
+ [InlineData("A[k, l]", typeof(Entity.MatrixEntryf))]
+ [InlineData("(A + B)[1, 2]", typeof(Entity.MatrixEntryf))]
+ [InlineData("det(A)[1, 1]", typeof(Entity.MatrixEntryf))]
+ public void ANameForAMatrixParsesToTheNode(string input, Type node)
+ => Assert.IsType(node, input.ToEntity());
+
+ [Theory]
+ [InlineData("det(A)")]
+ [InlineData("transpose(A) * B")]
+ [InlineData("trace(A * B)")]
+ [InlineData("A[k, l]")]
+ [InlineData("(A + B)[1, 2]")]
+ [InlineData("transpose(A)[2, k + 1] ^ 2")]
+ [InlineData("det(A)[1, 1]")]
+ [InlineData("A[1, 2]!")]
+ public void PrintingRoundTrips(string input)
+ {
+ var parsed = input.ToEntity();
+ Assert.Equal(parsed, parsed.Stringize().ToEntity());
+ }
+
+ // A matrix written out is computed as it is parsed, as it was without the nodes.
+ [Theory]
+ [InlineData("det([[1, 2], [3, 4]])", "-2")]
+ [InlineData("trace([[1, 2], [3, 4]])", "5")]
+ [InlineData("[[1, 2], [3, 4]][2, 1]", "3")]
+ [InlineData("transpose([1, 2])[1, 2]", "2")]
+ public void AWrittenMatrixIsComputedWhenParsed(string input, string expected)
+ => Assert.Equal(expected.ToEntity(), input.ToEntity().Evaled);
+
+ [Theory]
+ [InlineData("det(5)")]
+ [InlineData("trace(x = 1)")]
+ [InlineData("trace([[1, 2, 3]])")]
+ [InlineData("det([[1, 2, 3]])")]
+ [InlineData("[[1, 2], [3, 4]][3, 1]")]
+ [InlineData("[[1, 2], [3, 4]][1, 0]")]
+ [InlineData("[[1, 2], [3, 4]][1/2, 1]")]
+ [InlineData("A[1]")]
+ [InlineData("A[1, 2, 3]")]
+ public void WhatNamesNoMatrixOrNoEntryIsRefused(string input)
+ => Assert.Throws(() => input.ToEntity());
+
+ [Fact]
+ public void TheDeterminantOfASubstitutedMatrixIsItsDeterminant()
+ {
+ foreach (var m in Squares)
+ Near(Det(m), Value("det(A)".ToEntity().Substitute("A", AsEntity(m)).Evaled));
+ }
+
+ [Fact]
+ public void TheTraceOfAProductDoesNotDependOnTheOrder()
+ {
+ foreach (var a in Squares)
+ foreach (var b in Squares.Where(b => b.GetLength(0) == a.GetLength(0)))
+ {
+ var ab = Value("trace(A * B)".ToEntity().Substitute("A", AsEntity(a)).Substitute("B", AsEntity(b)).Evaled);
+ var ba = Value("trace(B * A)".ToEntity().Substitute("A", AsEntity(a)).Substitute("B", AsEntity(b)).Evaled);
+ var p = Product(a, b);
+ var expected = Enumerable.Range(0, p.GetLength(0)).Aggregate(Complex.Zero, (s, i) => s + p[i, i]);
+ Near(expected, ab);
+ Near(expected, ba);
+ }
+ }
+
+ [Fact]
+ public void TheTransposeTimesAMatrixIsThatProduct()
+ {
+ foreach (var a in Squares)
+ foreach (var b in Squares.Where(b => b.GetLength(0) == a.GetLength(0)))
+ Near(Product(Transposed(a), b),
+ Entries("transpose(A) * B".ToEntity().Substitute("A", AsEntity(a)).Substitute("B", AsEntity(b)).Evaled));
+ }
+
+ [Fact]
+ public void AnEntryIsCountedFromOne()
+ {
+ foreach (var m in Squares.Concat(NotSquare))
+ for (var i = 1; i <= m.GetLength(0); i++)
+ for (var j = 1; j <= m.GetLength(1); j++)
+ Near(m[i - 1, j - 1], Value("A[k, l]".ToEntity().Substitute("A", AsEntity(m)).Substitute("k", i).Substitute("l", j).Evaled));
+ }
+
+ // A vector is a column, so its transpose is a row, as ]T writes it.
+ [Fact]
+ public void TheTransposeOfAVectorIsARow()
+ {
+ var row = "transpose(v)".ToEntity().Substitute("v", "[1, -2, 3i]").Evaled;
+ Assert.Equal("[1, -2, 3i]T".ToEntity().Evaled, row);
+ Assert.Equal(1, ((Entity.Matrix)row).RowCount);
+ }
+
+ // No determinant, no trace, no entry: the node is left, never a number.
+ [Fact]
+ public void WhatHasNoValueIsLeftUnevaluated()
+ {
+ foreach (var m in NotSquare)
+ {
+ Assert.IsType("det(A)".ToEntity().Substitute("A", AsEntity(m)).Evaled);
+ Assert.IsType("trace(A)".ToEntity().Substitute("A", AsEntity(m)).Simplify());
+ }
+ foreach (var (i, j) in new[] { (3, 1), (1, 3), (0, 1), (-1, 1) })
+ Assert.IsType("A[k, l]".ToEntity().Substitute("A", "[[1, 2], [3, 4]]").Substitute("k", i).Substitute("l", j).Evaled);
+ Assert.IsType("A[1/2, 1]".ToEntity().Substitute("A", "[[1, 2], [3, 4]]").Evaled);
+ // A number is not a matrix, here as when it is written.
+ Assert.IsType("det(A)".ToEntity().Substitute("A", 5).Evaled);
+ }
+
+ [Theory]
+ [InlineData("transpose(transpose(A))", "A")]
+ [InlineData("det(transpose(A))", "det(A)")]
+ [InlineData("trace(transpose(A))", "trace(A)")]
+ [InlineData("transpose(A)[1, 2]", "A[2, 1]")]
+ public void ATransposeInsideAnotherOperationIsTakenOut(string input, string expected)
+ => Assert.Equal(expected.ToEntity(), input.ToEntity().Simplify());
+
+ // Matrices do not commute, and a product with a transpose in it is simplified as written: each of these was
+ // reordered, and the first two answered 0, before products of matrices were set aside.
+ [Theory]
+ [InlineData("transpose(A) * B - B * transpose(A)")]
+ [InlineData("transpose(A) * A - A * transpose(A)")]
+ [InlineData("transpose(A) * B")]
+ [InlineData("transpose(A) * A")]
+ [InlineData("A * transpose(A) * A")]
+ [InlineData("transpose(A) * B + transpose(A) * C")]
+ public void SimplifyingKeepsTheValueOfAProductOfMatrices(string input)
+ {
+ var expr = input.ToEntity();
+ var simplified = expr.Simplify();
+ var a = AsEntity(Squares[1]);
+ var b = AsEntity(Squares[2]);
+ var c = AsEntity(Squares[0]);
+ Entity At(Entity e) => e.Substitute("A", a).Substitute("B", b).Substitute("C", c).Evaled;
+ Near(Entries(At(expr)), Entries(At(simplified)));
+ }
+
+ // A name beside a written matrix may stand for a matrix: simplifying would read it as a number and multiply it
+ // into the entries, so det(A [[2, 0], [0, 3]]) was 6 A^2, which is 6 det(A) only for a 1 x 1 A.
+ [Theory]
+ [InlineData("det(A * [[2, 0], [0, 3]])")]
+ [InlineData("trace([[0, 1], [1, 0]] * A)")]
+ [InlineData("([[1, 0]] * transpose(A))[1, 2]")]
+ [InlineData("transpose(A + [[1, 2], [3, 4]]) * A")]
+ public void ANameBesideAWrittenMatrixIsNotReadAsANumber(string input)
+ {
+ var expr = input.ToEntity();
+ foreach (var m in Squares.Where(m => m.GetLength(0) == 2))
+ {
+ Entity At(Entity e) => e.Substitute("A", AsEntity(m)).Evaled;
+ var expected = At(expr);
+ foreach (var form in new[] { expr.InnerSimplified, expr.Simplify(), expr.Evaled })
+ {
+ var actual = At(form);
+ if (expected is Entity.Matrix)
+ Near(Entries(expected), Entries(actual));
+ else
+ Near(Value(expected), Value(actual));
+ }
+ }
+ Assert.Equal(6 * Det(Squares[1]), Value("det(A * [[2, 0], [0, 3]])".ToEntity().Substitute("A", AsEntity(Squares[1])).Evaled));
+ }
+
+ [Fact]
+ public void AProductWrittenTwiceStillCancels()
+ => Assert.Equal(0, "transpose(A) * B - transpose(A) * B".ToEntity().Simplify());
+
+ [Fact]
+ public void ADeterminantOfSymbolsSimplifiesToItsPolynomial()
+ {
+ var simplified = "det(A)".ToEntity().Substitute("A", "[[x, 1], [2, x]]").Simplify();
+ foreach (var x in new Complex[] { 3, -2.5, new(1, -2) })
+ Near(x * x - 2, Value(simplified.Substitute("x", x)));
+ }
+
+ // Linear in the matrix: the derivative of the trace and of the transpose is taken of the matrix.
+ [Fact]
+ public void TheTraceAndTheTransposeAreDifferentiatedThroughTheMatrix()
+ {
+ var a = AsEntity(Squares[1]);
+ foreach (var x in new Complex[] { 2, -1.5 })
+ {
+ var trace = "trace(x^2 A)".ToEntity().Differentiate("x").Substitute("A", a).Substitute("x", x).Evaled;
+ Near(2 * x * (Squares[1][0, 0] + Squares[1][1, 1]), Value(trace));
+ var entry = "transpose(x^3 A)[1, 2]".ToEntity().Differentiate("x").Substitute("A", a).Substitute("x", x).Evaled;
+ Near(3 * x * x * Squares[1][1, 0], Value(entry));
+ }
+ // Jacobi's formula needs the adjugate, which has no node: the derivative is left as one.
+ Assert.IsType("det(x A)".ToEntity().Differentiate("x"));
+ }
+
+ [Fact]
+ public void TheNodesPrintToLatexAndSympy()
+ {
+ Assert.Equal(@"\det\left(A\right)", "det(A)".ToEntity().Latexize());
+ Assert.Equal(@"\operatorname{tr}\left(A\right)", "trace(A)".ToEntity().Latexize());
+ Assert.Equal(@"{\left(A+B\right)}^{\mathrm{T}}", "transpose(A + B)".ToEntity().Latexize());
+ Assert.Equal(@"{A}_{k,l}", "A[k, l]".ToEntity().Latexize());
+ var sympy = MathS.ToSympyCode("det(A) + trace(transpose(A)) + A[1, 2]");
+ Assert.Contains("sympy.det(A)", sympy);
+ Assert.Contains("sympy.trace(sympy.transpose(A))", sympy);
+ Assert.Contains("(A)[(1) - 1, (2) - 1]", sympy);
+ }
+
+ [Fact]
+ public void TheConstructorsBuildTheNodes()
+ {
+ Assert.Equal("det(A)".ToEntity(), MathS.Matrices.Determinant("A"));
+ Assert.Equal("transpose(A)".ToEntity(), MathS.Matrices.Transpose("A"));
+ Assert.Equal("trace(A)".ToEntity(), MathS.Matrices.Trace("A"));
+ Assert.Equal("A[1, 2]".ToEntity(), MathS.Matrices.Entry("A", 1, 2));
+ }
+
+ // Compiled, each compared with evaluation at the same matrices.
+ [Fact]
+ public void TheDeterminantCompiles()
+ {
+ var overComplex = "det(A)".ToEntity().Compile("A");
+ foreach (var m in Squares)
+ Near(Value("det(A)".ToEntity().Substitute("A", AsEntity(m)).Evaled), overComplex(m));
+ var overReals = "det(A)".ToEntity().Compile("A");
+ var real = new double[,] { { 2, -1, 0.5 }, { -3, 4, 1 }, { 0, -2, -5 } };
+ Near(Det(Squares[3]), overReals(real));
+ // A zero first pivot is exchanged for a row below it.
+ Near(-1, overReals(new double[,] { { 0, 1 }, { 1, 0 } }));
+ Near(0, overReals(new double[,] { { 0, 1 }, { 0, 2 } }));
+ // Fraction-free, so whole numbers stay whole.
+ var overLongs = "det(A)".ToEntity().Compile("A");
+ Assert.Equal(-2L, overLongs(new long[,] { { 1, 2 }, { 3, 4 } }));
+ Assert.Equal(77L, overLongs(new long[,] { { 0, 3, 1 }, { 2, -1, 4 }, { 5, 0, -2 } }));
+ Assert.Throws(() => overReals(new double[,] { { 1, 2, 3 } }));
+ }
+
+ [Fact]
+ public void TheTransposeTraceAndEntryCompile()
+ {
+ var product = "transpose(A) * B".ToEntity().Compile("A", "B");
+ var trace = "trace(A * B)".ToEntity().Compile("A", "B");
+ var entry = "A[k, l]".ToEntity().Compile("A", "k", "l");
+ foreach (var a in Squares)
+ foreach (var b in Squares.Where(b => b.GetLength(0) == a.GetLength(0)))
+ {
+ Entity At(string e) => e.ToEntity().Substitute("A", AsEntity(a)).Substitute("B", AsEntity(b)).Evaled;
+ Near(Entries(At("transpose(A) * B")), product(a, b));
+ Near(Value(At("trace(A * B)")), trace(a, b));
+ for (var i = 1; i <= a.GetLength(0); i++)
+ for (var j = 1; j <= a.GetLength(1); j++)
+ Near(Value(At($"A[{i}, {j}]")), entry(a, i, j));
+ }
+ Assert.Throws(() => entry(Squares[0], 3, 1));
+ Assert.Throws(() => entry(Squares[0], 0, 1));
+ Assert.Throws(() => entry(Squares[0], 1.5, 1));
+ var transposeOfARow = "transpose(v)".ToEntity().Compile("v")(new double[,] { { 1, -2, 3 } });
+ Assert.Equal(new double[,] { { 1 }, { -2 }, { 3 } }, transposeOfARow);
+ }
+
+ // A matrix argument beside a matrix written out is not simplified as a number: det(A [[2, 0], [0, 3]]) is
+ // 6 det(A), and [[1, 0]] transpose(A) [[0], [1]] is the entry A[2, 1], a 1 x 1 matrix compiled as a number.
+ [Fact]
+ public void AMatrixArgumentBesideAWrittenMatrixCompiles()
+ {
+ var det = "det(A * [[2, 0], [0, 3]])".ToEntity().Compile("A");
+ var trace = "trace([[0, 1], [1, 0]] * A)".ToEntity().Compile("A");
+ var entry = "[[1, 0]] * transpose(A) * [[0], [1]]".ToEntity().Compile("A");
+ var bracket = "([[1, 0]] * transpose(A))[1, 2]".ToEntity().Compile("A");
+ foreach (var a in Squares.Where(a => a.GetLength(0) == 2))
+ {
+ Near(6 * Det(a), det(a));
+ Near(a[0, 1] + a[1, 0], trace(a));
+ Near(a[1, 0], entry(a));
+ Near(a[1, 0], bracket(a));
+ }
+ }
+
+ // Shapes written into the expression are checked when compiling; a number is not a matrix argument.
+ [Fact]
+ public void WhatCannotBeComputedIsRefusedWhenCompiling()
+ {
+ Assert.Throws(() => MathS.Matrices.Determinant("[[x, 1, 2]]").Compile("x"));
+ Assert.Throws(() => MathS.Matrices.Entry("[[x, 1], [2, x]]", 3, 1).Compile("x"));
+ Assert.Throws(() => "det(A)".ToEntity().Compile("A"));
+ }
+ }
+}
diff --git a/Sources/Tests/UnitTests/Common/PublicApi.txt b/Sources/Tests/UnitTests/Common/PublicApi.txt
index 558392495..acf885829 100644
--- a/Sources/Tests/UnitTests/Common/PublicApi.txt
+++ b/Sources/Tests/UnitTests/Common/PublicApi.txt
@@ -138,10 +138,12 @@ AngouriMath.Core.Compilation.IntoLinq.SingleOperations.Subtract(System.Single, S
AngouriMath.Core.Compilation.IntoLinq.SingleOperations.ToString(System.Single) : System.String
AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.Add(GenTensor, GenTensor) : GenTensor
AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.AddScalar(GenTensor, T) : GenTensor
+AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.Determinant(GenTensor) : T
AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.DivideByMatrix(GenTensor, GenTensor) : GenTensor
AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.DivideFromScalar(T, GenTensor) : GenTensor
AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.DivideScalar(GenTensor, T) : GenTensor
AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.Empty(System.Int32, System.Int32) : GenTensor
+AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.Entry(GenTensor, System.Int32, System.Int32) : T
AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.FromArray(T[,]) : GenTensor
AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.Inverse(GenTensor) : GenTensor
AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.Multiply(GenTensor, GenTensor) : GenTensor
@@ -154,8 +156,12 @@ AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.SubtractFromScalar(T, Ge
AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.SubtractScalar(GenTensor, T) : GenTensor
AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.TensorTypeOf(System.Type) : System.Type
AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.ToArray(GenTensor) : T[,]
+AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.Trace(GenTensor) : T
+AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.Transpose(GenTensor) : GenTensor
AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.WholeExponent(System.Double) : System.Int32
AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.WholeExponent(System.Numerics.Complex) : System.Int32
+AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.WholeIndex(System.Double) : System.Int32
+AngouriMath.Core.Compilation.IntoLinq.TensorCompilation.WholeIndex(System.Numerics.Complex) : System.Int32
AngouriMath.Core.CostModel.$() : AngouriMath.Core.CostModel
AngouriMath.Core.CostModel.All { } : System.Collections.Generic.IReadOnlyList
AngouriMath.Core.CostModel.Cost { } : System.Func
@@ -961,6 +967,24 @@ AngouriMath.Entity+Derivativef.ToString() : System.String
AngouriMath.Entity+Derivativef.ctor(AngouriMath.Entity, AngouriMath.Entity, System.Int32)
AngouriMath.Entity+Derivativef.op_Equality(AngouriMath.Entity+Derivativef, AngouriMath.Entity+Derivativef) : System.Boolean
AngouriMath.Entity+Derivativef.op_Inequality(AngouriMath.Entity+Derivativef, AngouriMath.Entity+Derivativef) : System.Boolean
+AngouriMath.Entity+Determinantf.$() : AngouriMath.Entity+Determinantf
+AngouriMath.Entity+Determinantf.Argument { } : AngouriMath.Entity
+AngouriMath.Entity+Determinantf.Codomain { } : AngouriMath.Core.Domain
+AngouriMath.Entity+Determinantf.Deconstruct(AngouriMath.Entity&) : System.Void
+AngouriMath.Entity+Determinantf.EqualityContract { } : System.Type
+AngouriMath.Entity+Determinantf.Equals(AngouriMath.Entity+Determinantf) : System.Boolean
+AngouriMath.Entity+Determinantf.Equals(AngouriMath.Entity+Function) : System.Boolean
+AngouriMath.Entity+Determinantf.Equals(System.Object) : System.Boolean
+AngouriMath.Entity+Determinantf.GetHashCode() : System.Int32
+AngouriMath.Entity+Determinantf.InitDirectChildren() : AngouriMath.Entity[]
+AngouriMath.Entity+Determinantf.InnerSimplify(System.Boolean) : AngouriMath.Entity
+AngouriMath.Entity+Determinantf.PrintMembers(System.Text.StringBuilder) : System.Boolean
+AngouriMath.Entity+Determinantf.Replace(System.Func) : AngouriMath.Entity
+AngouriMath.Entity+Determinantf.Substitute(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
+AngouriMath.Entity+Determinantf.ToString() : System.String
+AngouriMath.Entity+Determinantf.ctor(AngouriMath.Entity)
+AngouriMath.Entity+Determinantf.op_Equality(AngouriMath.Entity+Determinantf, AngouriMath.Entity+Determinantf) : System.Boolean
+AngouriMath.Entity+Determinantf.op_Inequality(AngouriMath.Entity+Determinantf, AngouriMath.Entity+Determinantf) : System.Boolean
AngouriMath.Entity+Divf.$() : AngouriMath.Entity+Divf
AngouriMath.Entity+Divf.Codomain { } : AngouriMath.Core.Domain
AngouriMath.Entity+Divf.Deconstruct(AngouriMath.Entity&, AngouriMath.Entity&) : System.Void
@@ -1675,6 +1699,27 @@ AngouriMath.Entity+Matrix.op_Multiply(AngouriMath.Entity+Matrix, AngouriMath.Ent
AngouriMath.Entity+Matrix.op_Subtraction(AngouriMath.Entity+Matrix, AngouriMath.Entity+Matrix) : AngouriMath.Entity+Matrix
AngouriMath.Entity+Matrix.op_UnaryNegation(AngouriMath.Entity+Matrix) : AngouriMath.Entity+Matrix
AngouriMath.Entity+Matrix.op_UnaryPlus(AngouriMath.Entity+Matrix) : AngouriMath.Entity+Matrix
+AngouriMath.Entity+MatrixEntryf.$() : AngouriMath.Entity+MatrixEntryf
+AngouriMath.Entity+MatrixEntryf.Argument { } : AngouriMath.Entity
+AngouriMath.Entity+MatrixEntryf.Codomain { } : AngouriMath.Core.Domain
+AngouriMath.Entity+MatrixEntryf.Column { } : AngouriMath.Entity
+AngouriMath.Entity+MatrixEntryf.Deconstruct(AngouriMath.Entity&, AngouriMath.Entity&, AngouriMath.Entity&) : System.Void
+AngouriMath.Entity+MatrixEntryf.EqualityContract { } : System.Type
+AngouriMath.Entity+MatrixEntryf.Equals(AngouriMath.Entity+Function) : System.Boolean
+AngouriMath.Entity+MatrixEntryf.Equals(AngouriMath.Entity+MatrixEntryf) : System.Boolean
+AngouriMath.Entity+MatrixEntryf.Equals(System.Object) : System.Boolean
+AngouriMath.Entity+MatrixEntryf.GetHashCode() : System.Int32
+AngouriMath.Entity+MatrixEntryf.InitDirectChildren() : AngouriMath.Entity[]
+AngouriMath.Entity+MatrixEntryf.InnerDifferentiate(AngouriMath.Entity+Variable) : AngouriMath.Entity
+AngouriMath.Entity+MatrixEntryf.InnerSimplify(System.Boolean) : AngouriMath.Entity
+AngouriMath.Entity+MatrixEntryf.PrintMembers(System.Text.StringBuilder) : System.Boolean
+AngouriMath.Entity+MatrixEntryf.Replace(System.Func) : AngouriMath.Entity
+AngouriMath.Entity+MatrixEntryf.Row { } : AngouriMath.Entity
+AngouriMath.Entity+MatrixEntryf.Substitute(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
+AngouriMath.Entity+MatrixEntryf.ToString() : System.String
+AngouriMath.Entity+MatrixEntryf.ctor(AngouriMath.Entity, AngouriMath.Entity, AngouriMath.Entity)
+AngouriMath.Entity+MatrixEntryf.op_Equality(AngouriMath.Entity+MatrixEntryf, AngouriMath.Entity+MatrixEntryf) : System.Boolean
+AngouriMath.Entity+MatrixEntryf.op_Inequality(AngouriMath.Entity+MatrixEntryf, AngouriMath.Entity+MatrixEntryf) : System.Boolean
AngouriMath.Entity+Maxf.$() : AngouriMath.Entity+Maxf
AngouriMath.Entity+Maxf.Codomain { } : AngouriMath.Core.Domain
AngouriMath.Entity+Maxf.Deconstruct(AngouriMath.Entity&, AngouriMath.Entity&) : System.Void
@@ -3055,6 +3100,44 @@ AngouriMath.Entity+Tanf.ToString() : System.String
AngouriMath.Entity+Tanf.ctor(AngouriMath.Entity)
AngouriMath.Entity+Tanf.op_Equality(AngouriMath.Entity+Tanf, AngouriMath.Entity+Tanf) : System.Boolean
AngouriMath.Entity+Tanf.op_Inequality(AngouriMath.Entity+Tanf, AngouriMath.Entity+Tanf) : System.Boolean
+AngouriMath.Entity+Tracef.$() : AngouriMath.Entity+Tracef
+AngouriMath.Entity+Tracef.Argument { } : AngouriMath.Entity
+AngouriMath.Entity+Tracef.Codomain { } : AngouriMath.Core.Domain
+AngouriMath.Entity+Tracef.Deconstruct(AngouriMath.Entity&) : System.Void
+AngouriMath.Entity+Tracef.EqualityContract { } : System.Type
+AngouriMath.Entity+Tracef.Equals(AngouriMath.Entity+Function) : System.Boolean
+AngouriMath.Entity+Tracef.Equals(AngouriMath.Entity+Tracef) : System.Boolean
+AngouriMath.Entity+Tracef.Equals(System.Object) : System.Boolean
+AngouriMath.Entity+Tracef.GetHashCode() : System.Int32
+AngouriMath.Entity+Tracef.InitDirectChildren() : AngouriMath.Entity[]
+AngouriMath.Entity+Tracef.InnerDifferentiate(AngouriMath.Entity+Variable) : AngouriMath.Entity
+AngouriMath.Entity+Tracef.InnerSimplify(System.Boolean) : AngouriMath.Entity
+AngouriMath.Entity+Tracef.PrintMembers(System.Text.StringBuilder) : System.Boolean
+AngouriMath.Entity+Tracef.Replace(System.Func) : AngouriMath.Entity
+AngouriMath.Entity+Tracef.Substitute(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
+AngouriMath.Entity+Tracef.ToString() : System.String
+AngouriMath.Entity+Tracef.ctor(AngouriMath.Entity)
+AngouriMath.Entity+Tracef.op_Equality(AngouriMath.Entity+Tracef, AngouriMath.Entity+Tracef) : System.Boolean
+AngouriMath.Entity+Tracef.op_Inequality(AngouriMath.Entity+Tracef, AngouriMath.Entity+Tracef) : System.Boolean
+AngouriMath.Entity+Transposef.$() : AngouriMath.Entity+Transposef
+AngouriMath.Entity+Transposef.Argument { } : AngouriMath.Entity
+AngouriMath.Entity+Transposef.Codomain { } : AngouriMath.Core.Domain
+AngouriMath.Entity+Transposef.Deconstruct(AngouriMath.Entity&) : System.Void
+AngouriMath.Entity+Transposef.EqualityContract { } : System.Type
+AngouriMath.Entity+Transposef.Equals(AngouriMath.Entity+Function) : System.Boolean
+AngouriMath.Entity+Transposef.Equals(AngouriMath.Entity+Transposef) : System.Boolean
+AngouriMath.Entity+Transposef.Equals(System.Object) : System.Boolean
+AngouriMath.Entity+Transposef.GetHashCode() : System.Int32
+AngouriMath.Entity+Transposef.InitDirectChildren() : AngouriMath.Entity[]
+AngouriMath.Entity+Transposef.InnerDifferentiate(AngouriMath.Entity+Variable) : AngouriMath.Entity
+AngouriMath.Entity+Transposef.InnerSimplify(System.Boolean) : AngouriMath.Entity
+AngouriMath.Entity+Transposef.PrintMembers(System.Text.StringBuilder) : System.Boolean
+AngouriMath.Entity+Transposef.Replace(System.Func) : AngouriMath.Entity
+AngouriMath.Entity+Transposef.Substitute(AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
+AngouriMath.Entity+Transposef.ToString() : System.String
+AngouriMath.Entity+Transposef.ctor(AngouriMath.Entity)
+AngouriMath.Entity+Transposef.op_Equality(AngouriMath.Entity+Transposef, AngouriMath.Entity+Transposef) : System.Boolean
+AngouriMath.Entity+Transposef.op_Inequality(AngouriMath.Entity+Transposef, AngouriMath.Entity+Transposef) : System.Boolean
AngouriMath.Entity+TrigonometricFunction.$() : AngouriMath.Entity+TrigonometricFunction
AngouriMath.Entity+TrigonometricFunction.EqualityContract { } : System.Type
AngouriMath.Entity+TrigonometricFunction.Equals(AngouriMath.Entity+Function) : System.Boolean
@@ -3419,8 +3502,12 @@ AngouriMath.MathS+Matrices+Direction.Horizontal : AngouriMath.MathS+Matrices+Dir
AngouriMath.MathS+Matrices+Direction.Vertical : AngouriMath.MathS+Matrices+Direction
AngouriMath.MathS+Matrices+Direction.value__ : System.Int32
AngouriMath.MathS+Matrices.Concat(AngouriMath.MathS+Matrices+Direction, AngouriMath.Entity+Matrix[]) : AngouriMath.Entity+Matrix
+AngouriMath.MathS+Matrices.Determinant(AngouriMath.Entity) : AngouriMath.Entity
+AngouriMath.MathS+Matrices.Entry(AngouriMath.Entity, AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
AngouriMath.MathS+Matrices.Matrix(System.Int32, System.Int32, AngouriMath.Entity[]) : AngouriMath.Entity+Matrix
AngouriMath.MathS+Matrices.PointwiseMultiplication(AngouriMath.Entity+Matrix, AngouriMath.Entity+Matrix) : AngouriMath.Entity+Matrix
+AngouriMath.MathS+Matrices.Trace(AngouriMath.Entity) : AngouriMath.Entity
+AngouriMath.MathS+Matrices.Transpose(AngouriMath.Entity) : AngouriMath.Entity
AngouriMath.MathS+Multithreading.SetLocalCancellationToken(System.Threading.CancellationToken) : System.Void
AngouriMath.MathS+NumberTheory.Congruent(AngouriMath.Entity, AngouriMath.Entity, AngouriMath.Entity) : AngouriMath.Entity
AngouriMath.MathS+NumberTheory.CountDivisors(AngouriMath.Entity+Number+Integer) : AngouriMath.Entity+Number+Integer
@@ -3752,6 +3839,7 @@ class AngouriMath.Entity+Cosecantf
class AngouriMath.Entity+Cosf
class AngouriMath.Entity+Cotanf
class AngouriMath.Entity+Derivativef
+class AngouriMath.Entity+Determinantf
class AngouriMath.Entity+Divf
class AngouriMath.Entity+Dividesf
class AngouriMath.Entity+DivisorSigmaf
@@ -3786,6 +3874,7 @@ class AngouriMath.Entity+Lif
class AngouriMath.Entity+Limitf
class AngouriMath.Entity+Logf
class AngouriMath.Entity+Matrix
+class AngouriMath.Entity+MatrixEntryf
class AngouriMath.Entity+Maxf
class AngouriMath.Entity+Maximumf
class AngouriMath.Entity+Minf
@@ -3847,6 +3936,8 @@ class AngouriMath.Entity+SumOverSetf
class AngouriMath.Entity+Sumf
class AngouriMath.Entity+Summationf
class AngouriMath.Entity+Tanf
+class AngouriMath.Entity+Tracef
+class AngouriMath.Entity+Transposef
class AngouriMath.Entity+TrigonometricFunction
class AngouriMath.Entity+Valuationf
class AngouriMath.Entity+Variable
diff --git a/Sources/Tests/UnitTests/Convenience/MatrixFunctionsInAnExpressionTest.cs b/Sources/Tests/UnitTests/Convenience/MatrixFunctionsInAnExpressionTest.cs
index 41126ca7b..a03e15280 100644
--- a/Sources/Tests/UnitTests/Convenience/MatrixFunctionsInAnExpressionTest.cs
+++ b/Sources/Tests/UnitTests/Convenience/MatrixFunctionsInAnExpressionTest.cs
@@ -63,14 +63,16 @@ public void TheVectorProductIsPerpendicularToBothFactors()
}
///
- /// 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.
+ /// A number, 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. A symbol is not
+ /// refused by det and transpose, which are nodes over a name for a matrix
+ /// (MatrixOperationNodesTest); dot, cross and resultant have no node.
///
[Theory]
- [InlineData("det(A)")]
+ [InlineData("det(5)")]
[InlineData("det([[1, 2, 3], [4, 5, 6]])")]
- [InlineData("transpose(x)")]
+ [InlineData("transpose(2)")]
+ [InlineData("dot(A, [1, 2])")]
[InlineData("dot([1, 2], [1, 2, 3])")]
[InlineData("dot([[1, 2], [3, 4]], [1, 2])")]
[InlineData("cross([1, 2], [3, 4])")]
diff --git a/Sources/Tests/UnitTests/Core/Transformations/RuleAuthoringGuideTest.cs b/Sources/Tests/UnitTests/Core/Transformations/RuleAuthoringGuideTest.cs
index 2ba4a3320..44a6c93b9 100644
--- a/Sources/Tests/UnitTests/Core/Transformations/RuleAuthoringGuideTest.cs
+++ b/Sources/Tests/UnitTests/Core/Transformations/RuleAuthoringGuideTest.cs
@@ -79,7 +79,7 @@ public void TheIdentityIsNotTheName()
[Fact]
public void ThePatternLanguage()
- => Stated(78, MatchPattern.BuildableNodeTypes.Count, "the number of buildable node types");
+ => Stated(81, MatchPattern.BuildableNodeTypes.Count, "the number of buildable node types");
[Fact]
public void ReplacementAPatternOrCode()