From d3606fd6746bf0e91d211d32416b2fdf01034d0f Mon Sep 17 00:00:00 2001 From: crx-dev2 <1594837530@qq.com> Date: Fri, 6 Sep 2024 08:44:27 +0000 Subject: [PATCH] update business_cpp output --- include/lgraph/olap_on_db.h | 33 + procedures/business_cpp/{algo_cpp => }/algo.h | 0 .../business_cpp/{algo_cpp => }/apsp_core.cpp | 0 .../{algo_cpp => }/apsp_procedure.cpp | 0 .../{algo_cpp => }/apsp_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/bc_core.cpp | 0 .../{algo_cpp => }/bc_procedure.cpp | 2 +- .../{algo_cpp => }/bc_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/bfs_core.cpp | 0 .../{algo_cpp => }/bfs_procedure.cpp | 3 +- .../{algo_cpp => }/bfs_procedure_v2.cpp | 0 .../{algo_cpp => }/bfs_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/clce_core.cpp | 0 .../{algo_cpp => }/clce_procedure.cpp | 2 +- .../{algo_cpp => }/clce_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/cn_core.cpp | 0 .../{algo_cpp => }/cn_procedure.cpp | 0 .../{algo_cpp => }/cn_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/dc_core.cpp | 0 .../{algo_cpp => }/dc_procedure.cpp | 0 .../{algo_cpp => }/dc_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/de_core.cpp | 0 .../{algo_cpp => }/de_procedure.cpp | 0 .../{algo_cpp => }/de_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/en_core.cpp | 0 .../{algo_cpp => }/en_procedure.cpp | 0 .../{algo_cpp => }/en_standalone.cpp | 0 .../fast_triangle_counting_core.cpp | 0 .../fast_triangle_counting_procedure.cpp | 0 .../fast_triangle_counting_standalone.cpp | 0 .../{algo_cpp => }/feature_float.cpp | 0 .../business_cpp/{algo_cpp => }/hits_core.cpp | 0 .../{algo_cpp => }/hits_procedure.cpp | 0 .../{algo_cpp => }/hits_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/ji_core.cpp | 0 .../{algo_cpp => }/ji_procedure.cpp | 22 +- .../{algo_cpp => }/ji_standalone.cpp | 0 .../{algo_cpp => }/kcliques_core.cpp | 0 .../{algo_cpp => }/kcliques_procedure.cpp | 0 .../{algo_cpp => }/kcliques_standalone.cpp | 0 .../{algo_cpp => }/kcore_core.cpp | 0 .../{algo_cpp => }/kcore_procedure.cpp | 0 .../{algo_cpp => }/kcore_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/khop_kth.cpp | 0 .../{algo_cpp => }/khop_within.cpp | 0 .../{algo_cpp => }/ktruss_core.cpp | 0 .../{algo_cpp => }/ktruss_procedure.cpp | 0 .../{algo_cpp => }/ktruss_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/lcc_core.cpp | 0 .../{algo_cpp => }/lcc_procedure.cpp | 2 +- .../{algo_cpp => }/lcc_procedure_v2.cpp | 0 .../{algo_cpp => }/lcc_standalone.cpp | 0 .../{algo_cpp => }/leiden_core.cpp | 0 .../{algo_cpp => }/leiden_procedure.cpp | 2 +- .../{algo_cpp => }/leiden_standalone.cpp | 0 .../{algo_cpp => }/locate_cycle_core.cpp | 0 .../{algo_cpp => }/locate_cycle_procedure.cpp | 0 .../locate_cycle_standalone.cpp | 0 .../{algo_cpp => }/louvain_core.cpp | 0 .../{algo_cpp => }/louvain_procedure.cpp | 0 .../{algo_cpp => }/louvain_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/lpa_core.cpp | 0 .../{algo_cpp => }/lpa_procedure.cpp | 2 +- .../{algo_cpp => }/lpa_procedure_v2.cpp | 0 .../{algo_cpp => }/lpa_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/mis_core.cpp | 0 .../{algo_cpp => }/mis_procedure.cpp | 0 .../{algo_cpp => }/mis_standalone.cpp | 0 .../{algo_cpp => }/motif_core.cpp | 0 .../{algo_cpp => }/motif_procedure.cpp | 0 .../{algo_cpp => }/motif_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/mssp_core.cpp | 0 .../{algo_cpp => }/mssp_procedure.cpp | 0 .../{algo_cpp => }/mssp_standalone.cpp | 0 .../{algo_cpp => }/pagerank_core.cpp | 0 .../{algo_cpp => }/pagerank_procedure.cpp | 2 +- .../{algo_cpp => }/pagerank_procedure_v2.cpp | 0 .../{algo_cpp => }/pagerank_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/ppr_core.cpp | 0 .../{algo_cpp => }/ppr_procedure.cpp | 0 .../{algo_cpp => }/ppr_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/scc_core.cpp | 0 .../{algo_cpp => }/scc_procedure.cpp | 0 .../{algo_cpp => }/scc_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/slpa_core.cpp | 0 .../{algo_cpp => }/slpa_procedure.cpp | 0 .../{algo_cpp => }/slpa_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/spsp_core.cpp | 0 .../{algo_cpp => }/spsp_procedure.cpp | 0 .../{algo_cpp => }/spsp_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/sssp_core.cpp | 0 .../{algo_cpp => }/sssp_procedure.cpp | 3 +- .../{algo_cpp => }/sssp_procedure_v2.cpp | 0 .../{algo_cpp => }/sssp_standalone.cpp | 0 .../subgraph_isomorphism_core.cpp | 0 .../subgraph_isomorphism_procedure.cpp | 0 .../subgraph_isomorphism_standalone.cpp | 0 .../{algo_cpp => }/sybilrank_core.cpp | 0 .../{algo_cpp => }/sybilrank_procedure.cpp | 0 .../{algo_cpp => }/sybilrank_standalone.cpp | 0 .../{algo_cpp => }/triangle_core.cpp | 0 .../{algo_cpp => }/triangle_procedure.cpp | 0 .../{algo_cpp => }/triangle_standalone.cpp | 0 .../{algo_cpp => }/trustrank_core.cpp | 0 .../{algo_cpp => }/trustrank_procedure.cpp | 2 +- .../{algo_cpp => }/trustrank_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/wcc_core.cpp | 0 .../{algo_cpp => }/wcc_procedure.cpp | 2 +- .../{algo_cpp => }/wcc_procedure_v2.cpp | 0 .../{algo_cpp => }/wcc_standalone.cpp | 0 .../business_cpp/{algo_cpp => }/wlpa_core.cpp | 0 .../{algo_cpp => }/wlpa_procedure.cpp | 0 .../{algo_cpp => }/wlpa_standalone.cpp | 0 .../{algo_cpp => }/wpagerank_core.cpp | 0 .../{algo_cpp => }/wpagerank_procedure.cpp | 0 .../{algo_cpp => }/wpagerank_standalone.cpp | 0 src/cypher/parser/generated/LcypherLexer.cpp | 877 +++++++++--------- src/cypher/parser/generated/LcypherLexer.h | 2 +- .../parser/generated/LcypherLexer.interp | 2 +- src/cypher/parser/generated/LcypherParser.cpp | 15 +- src/cypher/parser/generated/LcypherParser.h | 2 +- .../parser/generated/LcypherVisitor.cpp | 2 +- src/cypher/parser/generated/LcypherVisitor.h | 2 +- 123 files changed, 503 insertions(+), 476 deletions(-) rename procedures/business_cpp/{algo_cpp => }/algo.h (100%) rename procedures/business_cpp/{algo_cpp => }/apsp_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/apsp_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/apsp_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/bc_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/bc_procedure.cpp (97%) rename procedures/business_cpp/{algo_cpp => }/bc_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/bfs_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/bfs_procedure.cpp (95%) rename procedures/business_cpp/{algo_cpp => }/bfs_procedure_v2.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/bfs_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/clce_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/clce_procedure.cpp (97%) rename procedures/business_cpp/{algo_cpp => }/clce_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/cn_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/cn_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/cn_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/dc_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/dc_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/dc_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/de_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/de_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/de_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/en_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/en_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/en_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/fast_triangle_counting_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/fast_triangle_counting_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/fast_triangle_counting_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/feature_float.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/hits_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/hits_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/hits_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/ji_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/ji_procedure.cpp (69%) rename procedures/business_cpp/{algo_cpp => }/ji_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/kcliques_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/kcliques_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/kcliques_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/kcore_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/kcore_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/kcore_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/khop_kth.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/khop_within.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/ktruss_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/ktruss_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/ktruss_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/lcc_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/lcc_procedure.cpp (98%) rename procedures/business_cpp/{algo_cpp => }/lcc_procedure_v2.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/lcc_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/leiden_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/leiden_procedure.cpp (97%) rename procedures/business_cpp/{algo_cpp => }/leiden_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/locate_cycle_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/locate_cycle_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/locate_cycle_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/louvain_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/louvain_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/louvain_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/lpa_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/lpa_procedure.cpp (98%) rename procedures/business_cpp/{algo_cpp => }/lpa_procedure_v2.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/lpa_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/mis_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/mis_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/mis_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/motif_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/motif_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/motif_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/mssp_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/mssp_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/mssp_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/pagerank_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/pagerank_procedure.cpp (98%) rename procedures/business_cpp/{algo_cpp => }/pagerank_procedure_v2.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/pagerank_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/ppr_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/ppr_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/ppr_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/scc_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/scc_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/scc_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/slpa_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/slpa_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/slpa_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/spsp_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/spsp_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/spsp_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/sssp_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/sssp_procedure.cpp (97%) rename procedures/business_cpp/{algo_cpp => }/sssp_procedure_v2.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/sssp_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/subgraph_isomorphism_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/subgraph_isomorphism_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/subgraph_isomorphism_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/sybilrank_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/sybilrank_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/sybilrank_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/triangle_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/triangle_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/triangle_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/trustrank_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/trustrank_procedure.cpp (98%) rename procedures/business_cpp/{algo_cpp => }/trustrank_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/wcc_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/wcc_procedure.cpp (98%) rename procedures/business_cpp/{algo_cpp => }/wcc_procedure_v2.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/wcc_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/wlpa_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/wlpa_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/wlpa_standalone.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/wpagerank_core.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/wpagerank_procedure.cpp (100%) rename procedures/business_cpp/{algo_cpp => }/wpagerank_standalone.cpp (100%) diff --git a/include/lgraph/olap_on_db.h b/include/lgraph/olap_on_db.h index 710a025405..d157b70b48 100644 --- a/include/lgraph/olap_on_db.h +++ b/include/lgraph/olap_on_db.h @@ -1503,6 +1503,39 @@ class OlapOnDB : public OlapBase { } } + /** + * @brief Write vertex data to a file. + * + * @param vertex_data The parallel vector storing the vertex data. + * @param output_file The path to the output file. + * + */ + template + void WriteToFile(bool detail_output, ParallelVector &vertex_data, + const std::string &output_file, + std::function output_filter = nullptr) { + FILE* fout = fopen(output_file.c_str(), "w"); + if (fout == nullptr) { + THROW_CODE(InputError, "Unable to open file for writting!"); + } + for (size_t i = 0; i < this->num_vertices_; ++i) { + if (output_filter != nullptr && !output_filter(i, vertex_data[i])) { + continue; + } + auto vit = txn_.GetVertexIterator(OriginalVid(i)); + auto vit_label = vit.GetLabel(); + auto primary_field = txn_.GetVertexPrimaryField(vit_label); + auto field_data = vit.GetField(primary_field); + json curJson; + curJson["vid"] = OriginalVid(i); + curJson["label"] = vit_label; + curJson["primary_field"] = primary_field; + curJson["field_data"] = field_data.ToString(); + curJson["result"] = vertex_data[i]; + fprintf(fout, "%s\n", curJson.dump().c_str()); + } + } + /** * @brief Write vertex data to the graph database. * diff --git a/procedures/business_cpp/algo_cpp/algo.h b/procedures/business_cpp/algo.h similarity index 100% rename from procedures/business_cpp/algo_cpp/algo.h rename to procedures/business_cpp/algo.h diff --git a/procedures/business_cpp/algo_cpp/apsp_core.cpp b/procedures/business_cpp/apsp_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/apsp_core.cpp rename to procedures/business_cpp/apsp_core.cpp diff --git a/procedures/business_cpp/algo_cpp/apsp_procedure.cpp b/procedures/business_cpp/apsp_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/apsp_procedure.cpp rename to procedures/business_cpp/apsp_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/apsp_standalone.cpp b/procedures/business_cpp/apsp_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/apsp_standalone.cpp rename to procedures/business_cpp/apsp_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/bc_core.cpp b/procedures/business_cpp/bc_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/bc_core.cpp rename to procedures/business_cpp/bc_core.cpp diff --git a/procedures/business_cpp/algo_cpp/bc_procedure.cpp b/procedures/business_cpp/bc_procedure.cpp similarity index 97% rename from procedures/business_cpp/algo_cpp/bc_procedure.cpp rename to procedures/business_cpp/bc_procedure.cpp index ee3afb9a90..b7491c515f 100644 --- a/procedures/business_cpp/algo_cpp/bc_procedure.cpp +++ b/procedures/business_cpp/bc_procedure.cpp @@ -54,7 +54,7 @@ extern "C" bool Process(GraphDB& db, const std::string& request, std::string& re // output start_time = get_time(); if (output_file != "") { - olapondb.WriteToFile(score, output_file); + olapondb.WriteToFile(true, score, output_file); } auto output_cost = get_time() - start_time; diff --git a/procedures/business_cpp/algo_cpp/bc_standalone.cpp b/procedures/business_cpp/bc_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/bc_standalone.cpp rename to procedures/business_cpp/bc_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/bfs_core.cpp b/procedures/business_cpp/bfs_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/bfs_core.cpp rename to procedures/business_cpp/bfs_core.cpp diff --git a/procedures/business_cpp/algo_cpp/bfs_procedure.cpp b/procedures/business_cpp/bfs_procedure.cpp similarity index 95% rename from procedures/business_cpp/algo_cpp/bfs_procedure.cpp rename to procedures/business_cpp/bfs_procedure.cpp index 9670fd080d..213b66428f 100644 --- a/procedures/business_cpp/algo_cpp/bfs_procedure.cpp +++ b/procedures/business_cpp/bfs_procedure.cpp @@ -59,7 +59,8 @@ extern "C" bool Process(GraphDB& db, const std::string& request, std::string& re start_time = get_time(); // TODO(any): write parent back to graph if (output_file != "") { - olapondb.WriteToFile(parent, output_file, [&](size_t vid, size_t vdata) -> bool { + olapondb.WriteToFile(true, parent, output_file, + [&](size_t vid, size_t vdata) -> bool { return vdata != (size_t)-1; }); } diff --git a/procedures/business_cpp/algo_cpp/bfs_procedure_v2.cpp b/procedures/business_cpp/bfs_procedure_v2.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/bfs_procedure_v2.cpp rename to procedures/business_cpp/bfs_procedure_v2.cpp diff --git a/procedures/business_cpp/algo_cpp/bfs_standalone.cpp b/procedures/business_cpp/bfs_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/bfs_standalone.cpp rename to procedures/business_cpp/bfs_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/clce_core.cpp b/procedures/business_cpp/clce_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/clce_core.cpp rename to procedures/business_cpp/clce_core.cpp diff --git a/procedures/business_cpp/algo_cpp/clce_procedure.cpp b/procedures/business_cpp/clce_procedure.cpp similarity index 97% rename from procedures/business_cpp/algo_cpp/clce_procedure.cpp rename to procedures/business_cpp/clce_procedure.cpp index 3f09e10ab7..d8f4e443d2 100644 --- a/procedures/business_cpp/algo_cpp/clce_procedure.cpp +++ b/procedures/business_cpp/clce_procedure.cpp @@ -65,7 +65,7 @@ extern "C" bool Process(GraphDB& db, const std::string& request, std::string& re // output start_time = get_time(); if (output_file != "") { - olapondb.WriteToFile(score, output_file); + olapondb.WriteToFile(true, score, output_file); } auto output_cost = get_time() - start_time; diff --git a/procedures/business_cpp/algo_cpp/clce_standalone.cpp b/procedures/business_cpp/clce_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/clce_standalone.cpp rename to procedures/business_cpp/clce_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/cn_core.cpp b/procedures/business_cpp/cn_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/cn_core.cpp rename to procedures/business_cpp/cn_core.cpp diff --git a/procedures/business_cpp/algo_cpp/cn_procedure.cpp b/procedures/business_cpp/cn_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/cn_procedure.cpp rename to procedures/business_cpp/cn_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/cn_standalone.cpp b/procedures/business_cpp/cn_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/cn_standalone.cpp rename to procedures/business_cpp/cn_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/dc_core.cpp b/procedures/business_cpp/dc_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/dc_core.cpp rename to procedures/business_cpp/dc_core.cpp diff --git a/procedures/business_cpp/algo_cpp/dc_procedure.cpp b/procedures/business_cpp/dc_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/dc_procedure.cpp rename to procedures/business_cpp/dc_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/dc_standalone.cpp b/procedures/business_cpp/dc_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/dc_standalone.cpp rename to procedures/business_cpp/dc_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/de_core.cpp b/procedures/business_cpp/de_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/de_core.cpp rename to procedures/business_cpp/de_core.cpp diff --git a/procedures/business_cpp/algo_cpp/de_procedure.cpp b/procedures/business_cpp/de_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/de_procedure.cpp rename to procedures/business_cpp/de_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/de_standalone.cpp b/procedures/business_cpp/de_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/de_standalone.cpp rename to procedures/business_cpp/de_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/en_core.cpp b/procedures/business_cpp/en_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/en_core.cpp rename to procedures/business_cpp/en_core.cpp diff --git a/procedures/business_cpp/algo_cpp/en_procedure.cpp b/procedures/business_cpp/en_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/en_procedure.cpp rename to procedures/business_cpp/en_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/en_standalone.cpp b/procedures/business_cpp/en_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/en_standalone.cpp rename to procedures/business_cpp/en_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/fast_triangle_counting_core.cpp b/procedures/business_cpp/fast_triangle_counting_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/fast_triangle_counting_core.cpp rename to procedures/business_cpp/fast_triangle_counting_core.cpp diff --git a/procedures/business_cpp/algo_cpp/fast_triangle_counting_procedure.cpp b/procedures/business_cpp/fast_triangle_counting_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/fast_triangle_counting_procedure.cpp rename to procedures/business_cpp/fast_triangle_counting_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/fast_triangle_counting_standalone.cpp b/procedures/business_cpp/fast_triangle_counting_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/fast_triangle_counting_standalone.cpp rename to procedures/business_cpp/fast_triangle_counting_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/feature_float.cpp b/procedures/business_cpp/feature_float.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/feature_float.cpp rename to procedures/business_cpp/feature_float.cpp diff --git a/procedures/business_cpp/algo_cpp/hits_core.cpp b/procedures/business_cpp/hits_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/hits_core.cpp rename to procedures/business_cpp/hits_core.cpp diff --git a/procedures/business_cpp/algo_cpp/hits_procedure.cpp b/procedures/business_cpp/hits_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/hits_procedure.cpp rename to procedures/business_cpp/hits_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/hits_standalone.cpp b/procedures/business_cpp/hits_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/hits_standalone.cpp rename to procedures/business_cpp/hits_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/ji_core.cpp b/procedures/business_cpp/ji_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/ji_core.cpp rename to procedures/business_cpp/ji_core.cpp diff --git a/procedures/business_cpp/algo_cpp/ji_procedure.cpp b/procedures/business_cpp/ji_procedure.cpp similarity index 69% rename from procedures/business_cpp/algo_cpp/ji_procedure.cpp rename to procedures/business_cpp/ji_procedure.cpp index e91e7c6836..580e463b16 100644 --- a/procedures/business_cpp/algo_cpp/ji_procedure.cpp +++ b/procedures/business_cpp/ji_procedure.cpp @@ -58,7 +58,8 @@ extern "C" bool Process(GraphDB& db, const std::string& request, std::string& re // core start_time = get_time(); - std::vector> result_list; + std::vector< std::tuple > result_list; for (auto search_pair : search_list) { auto src_string = search_pair.first; @@ -69,7 +70,24 @@ extern "C" bool Process(GraphDB& db, const std::string& request, std::string& re txn.GetVertexIndexIterator(dst_label, dst_field, dst_string, dst_string).GetVid(); auto id_pair = std::make_pair(src_vid, dst_vid); double score = JiCore(olapondb, id_pair); - result_list.push_back(std::make_tuple(src_string, dst_string, score)); + + auto vit_first = txn.GetVertexIterator(src_vid, false); + auto vit_first_label = vit_first.GetLabel(); + auto vit_first_primary_field = txn.GetVertexPrimaryField(vit_first_label); + auto vit_first_field_data = vit_first.GetField(vit_first_primary_field); + auto vit_second = txn.GetVertexIterator(dst_vid, false); + auto vit_second_label = vit_second.GetLabel(); + auto vit_second_primary_field = txn.GetVertexPrimaryField(vit_second_label); + auto vit_second_field_data = vit_second.GetField(vit_second_primary_field); + result_list.push_back(std::make_tuple(src_vid, + vit_first_label, + vit_first_primary_field, + vit_first_field_data.ToString(), + dst_vid, + vit_second_label, + vit_second_primary_field, + vit_second_field_data.ToString(), + score)); } auto core_cost = get_time() - start_time; diff --git a/procedures/business_cpp/algo_cpp/ji_standalone.cpp b/procedures/business_cpp/ji_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/ji_standalone.cpp rename to procedures/business_cpp/ji_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/kcliques_core.cpp b/procedures/business_cpp/kcliques_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/kcliques_core.cpp rename to procedures/business_cpp/kcliques_core.cpp diff --git a/procedures/business_cpp/algo_cpp/kcliques_procedure.cpp b/procedures/business_cpp/kcliques_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/kcliques_procedure.cpp rename to procedures/business_cpp/kcliques_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/kcliques_standalone.cpp b/procedures/business_cpp/kcliques_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/kcliques_standalone.cpp rename to procedures/business_cpp/kcliques_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/kcore_core.cpp b/procedures/business_cpp/kcore_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/kcore_core.cpp rename to procedures/business_cpp/kcore_core.cpp diff --git a/procedures/business_cpp/algo_cpp/kcore_procedure.cpp b/procedures/business_cpp/kcore_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/kcore_procedure.cpp rename to procedures/business_cpp/kcore_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/kcore_standalone.cpp b/procedures/business_cpp/kcore_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/kcore_standalone.cpp rename to procedures/business_cpp/kcore_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/khop_kth.cpp b/procedures/business_cpp/khop_kth.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/khop_kth.cpp rename to procedures/business_cpp/khop_kth.cpp diff --git a/procedures/business_cpp/algo_cpp/khop_within.cpp b/procedures/business_cpp/khop_within.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/khop_within.cpp rename to procedures/business_cpp/khop_within.cpp diff --git a/procedures/business_cpp/algo_cpp/ktruss_core.cpp b/procedures/business_cpp/ktruss_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/ktruss_core.cpp rename to procedures/business_cpp/ktruss_core.cpp diff --git a/procedures/business_cpp/algo_cpp/ktruss_procedure.cpp b/procedures/business_cpp/ktruss_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/ktruss_procedure.cpp rename to procedures/business_cpp/ktruss_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/ktruss_standalone.cpp b/procedures/business_cpp/ktruss_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/ktruss_standalone.cpp rename to procedures/business_cpp/ktruss_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/lcc_core.cpp b/procedures/business_cpp/lcc_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/lcc_core.cpp rename to procedures/business_cpp/lcc_core.cpp diff --git a/procedures/business_cpp/algo_cpp/lcc_procedure.cpp b/procedures/business_cpp/lcc_procedure.cpp similarity index 98% rename from procedures/business_cpp/algo_cpp/lcc_procedure.cpp rename to procedures/business_cpp/lcc_procedure.cpp index 2e938c7fed..4d4354c525 100644 --- a/procedures/business_cpp/algo_cpp/lcc_procedure.cpp +++ b/procedures/business_cpp/lcc_procedure.cpp @@ -90,7 +90,7 @@ extern "C" bool Process(GraphDB& db, const std::string& request, std::string& re // output start_time = get_time(); if (output_file != "") { - olapondb.WriteToFile(score, output_file); + olapondb.WriteToFile(true, score, output_file); } txn.Commit(); diff --git a/procedures/business_cpp/algo_cpp/lcc_procedure_v2.cpp b/procedures/business_cpp/lcc_procedure_v2.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/lcc_procedure_v2.cpp rename to procedures/business_cpp/lcc_procedure_v2.cpp diff --git a/procedures/business_cpp/algo_cpp/lcc_standalone.cpp b/procedures/business_cpp/lcc_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/lcc_standalone.cpp rename to procedures/business_cpp/lcc_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/leiden_core.cpp b/procedures/business_cpp/leiden_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/leiden_core.cpp rename to procedures/business_cpp/leiden_core.cpp diff --git a/procedures/business_cpp/algo_cpp/leiden_procedure.cpp b/procedures/business_cpp/leiden_procedure.cpp similarity index 97% rename from procedures/business_cpp/algo_cpp/leiden_procedure.cpp rename to procedures/business_cpp/leiden_procedure.cpp index 843ff6b8c5..84069a9f06 100644 --- a/procedures/business_cpp/algo_cpp/leiden_procedure.cpp +++ b/procedures/business_cpp/leiden_procedure.cpp @@ -72,7 +72,7 @@ extern "C" bool Process(GraphDB& db, const std::string& request, std::string& re // output start_time = get_time(); if (output_file != "") { - olapondb.WriteToFile(label, output_file); + olapondb.WriteToFile(true, label, output_file); } double output_cost = get_time() - start_time; diff --git a/procedures/business_cpp/algo_cpp/leiden_standalone.cpp b/procedures/business_cpp/leiden_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/leiden_standalone.cpp rename to procedures/business_cpp/leiden_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/locate_cycle_core.cpp b/procedures/business_cpp/locate_cycle_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/locate_cycle_core.cpp rename to procedures/business_cpp/locate_cycle_core.cpp diff --git a/procedures/business_cpp/algo_cpp/locate_cycle_procedure.cpp b/procedures/business_cpp/locate_cycle_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/locate_cycle_procedure.cpp rename to procedures/business_cpp/locate_cycle_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/locate_cycle_standalone.cpp b/procedures/business_cpp/locate_cycle_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/locate_cycle_standalone.cpp rename to procedures/business_cpp/locate_cycle_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/louvain_core.cpp b/procedures/business_cpp/louvain_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/louvain_core.cpp rename to procedures/business_cpp/louvain_core.cpp diff --git a/procedures/business_cpp/algo_cpp/louvain_procedure.cpp b/procedures/business_cpp/louvain_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/louvain_procedure.cpp rename to procedures/business_cpp/louvain_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/louvain_standalone.cpp b/procedures/business_cpp/louvain_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/louvain_standalone.cpp rename to procedures/business_cpp/louvain_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/lpa_core.cpp b/procedures/business_cpp/lpa_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/lpa_core.cpp rename to procedures/business_cpp/lpa_core.cpp diff --git a/procedures/business_cpp/algo_cpp/lpa_procedure.cpp b/procedures/business_cpp/lpa_procedure.cpp similarity index 98% rename from procedures/business_cpp/algo_cpp/lpa_procedure.cpp rename to procedures/business_cpp/lpa_procedure.cpp index ba47d706aa..ed5272ea6a 100644 --- a/procedures/business_cpp/algo_cpp/lpa_procedure.cpp +++ b/procedures/business_cpp/lpa_procedure.cpp @@ -93,7 +93,7 @@ extern "C" bool Process(GraphDB& db, const std::string& request, std::string& re // output start_time = get_time(); if (output_file != "") { - olapondb.WriteToFile(label, output_file); + olapondb.WriteToFile(true, label, output_file); } txn.Commit(); diff --git a/procedures/business_cpp/algo_cpp/lpa_procedure_v2.cpp b/procedures/business_cpp/lpa_procedure_v2.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/lpa_procedure_v2.cpp rename to procedures/business_cpp/lpa_procedure_v2.cpp diff --git a/procedures/business_cpp/algo_cpp/lpa_standalone.cpp b/procedures/business_cpp/lpa_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/lpa_standalone.cpp rename to procedures/business_cpp/lpa_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/mis_core.cpp b/procedures/business_cpp/mis_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/mis_core.cpp rename to procedures/business_cpp/mis_core.cpp diff --git a/procedures/business_cpp/algo_cpp/mis_procedure.cpp b/procedures/business_cpp/mis_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/mis_procedure.cpp rename to procedures/business_cpp/mis_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/mis_standalone.cpp b/procedures/business_cpp/mis_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/mis_standalone.cpp rename to procedures/business_cpp/mis_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/motif_core.cpp b/procedures/business_cpp/motif_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/motif_core.cpp rename to procedures/business_cpp/motif_core.cpp diff --git a/procedures/business_cpp/algo_cpp/motif_procedure.cpp b/procedures/business_cpp/motif_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/motif_procedure.cpp rename to procedures/business_cpp/motif_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/motif_standalone.cpp b/procedures/business_cpp/motif_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/motif_standalone.cpp rename to procedures/business_cpp/motif_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/mssp_core.cpp b/procedures/business_cpp/mssp_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/mssp_core.cpp rename to procedures/business_cpp/mssp_core.cpp diff --git a/procedures/business_cpp/algo_cpp/mssp_procedure.cpp b/procedures/business_cpp/mssp_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/mssp_procedure.cpp rename to procedures/business_cpp/mssp_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/mssp_standalone.cpp b/procedures/business_cpp/mssp_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/mssp_standalone.cpp rename to procedures/business_cpp/mssp_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/pagerank_core.cpp b/procedures/business_cpp/pagerank_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/pagerank_core.cpp rename to procedures/business_cpp/pagerank_core.cpp diff --git a/procedures/business_cpp/algo_cpp/pagerank_procedure.cpp b/procedures/business_cpp/pagerank_procedure.cpp similarity index 98% rename from procedures/business_cpp/algo_cpp/pagerank_procedure.cpp rename to procedures/business_cpp/pagerank_procedure.cpp index 7140fffdae..2e3f438650 100644 --- a/procedures/business_cpp/algo_cpp/pagerank_procedure.cpp +++ b/procedures/business_cpp/pagerank_procedure.cpp @@ -99,7 +99,7 @@ extern "C" bool Process(GraphDB& db, const std::string& request, std::string& re // output start_time = get_time(); if (output_file != "") { - olapondb.WriteToFile(pr, output_file); + olapondb.WriteToFile(true, pr, output_file); } txn.Commit(); diff --git a/procedures/business_cpp/algo_cpp/pagerank_procedure_v2.cpp b/procedures/business_cpp/pagerank_procedure_v2.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/pagerank_procedure_v2.cpp rename to procedures/business_cpp/pagerank_procedure_v2.cpp diff --git a/procedures/business_cpp/algo_cpp/pagerank_standalone.cpp b/procedures/business_cpp/pagerank_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/pagerank_standalone.cpp rename to procedures/business_cpp/pagerank_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/ppr_core.cpp b/procedures/business_cpp/ppr_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/ppr_core.cpp rename to procedures/business_cpp/ppr_core.cpp diff --git a/procedures/business_cpp/algo_cpp/ppr_procedure.cpp b/procedures/business_cpp/ppr_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/ppr_procedure.cpp rename to procedures/business_cpp/ppr_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/ppr_standalone.cpp b/procedures/business_cpp/ppr_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/ppr_standalone.cpp rename to procedures/business_cpp/ppr_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/scc_core.cpp b/procedures/business_cpp/scc_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/scc_core.cpp rename to procedures/business_cpp/scc_core.cpp diff --git a/procedures/business_cpp/algo_cpp/scc_procedure.cpp b/procedures/business_cpp/scc_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/scc_procedure.cpp rename to procedures/business_cpp/scc_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/scc_standalone.cpp b/procedures/business_cpp/scc_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/scc_standalone.cpp rename to procedures/business_cpp/scc_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/slpa_core.cpp b/procedures/business_cpp/slpa_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/slpa_core.cpp rename to procedures/business_cpp/slpa_core.cpp diff --git a/procedures/business_cpp/algo_cpp/slpa_procedure.cpp b/procedures/business_cpp/slpa_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/slpa_procedure.cpp rename to procedures/business_cpp/slpa_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/slpa_standalone.cpp b/procedures/business_cpp/slpa_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/slpa_standalone.cpp rename to procedures/business_cpp/slpa_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/spsp_core.cpp b/procedures/business_cpp/spsp_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/spsp_core.cpp rename to procedures/business_cpp/spsp_core.cpp diff --git a/procedures/business_cpp/algo_cpp/spsp_procedure.cpp b/procedures/business_cpp/spsp_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/spsp_procedure.cpp rename to procedures/business_cpp/spsp_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/spsp_standalone.cpp b/procedures/business_cpp/spsp_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/spsp_standalone.cpp rename to procedures/business_cpp/spsp_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/sssp_core.cpp b/procedures/business_cpp/sssp_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/sssp_core.cpp rename to procedures/business_cpp/sssp_core.cpp diff --git a/procedures/business_cpp/algo_cpp/sssp_procedure.cpp b/procedures/business_cpp/sssp_procedure.cpp similarity index 97% rename from procedures/business_cpp/algo_cpp/sssp_procedure.cpp rename to procedures/business_cpp/sssp_procedure.cpp index 3908cd96f4..a559826940 100644 --- a/procedures/business_cpp/algo_cpp/sssp_procedure.cpp +++ b/procedures/business_cpp/sssp_procedure.cpp @@ -79,7 +79,8 @@ extern "C" bool Process(GraphDB& db, const std::string& request, std::string& re // output start_time = get_time(); if (output_file != "") { - olapondb.WriteToFile(distance, output_file, [&](size_t vid, double& vdata) -> bool { + olapondb.WriteToFile(true, distance, output_file, + [&](size_t vid, double& vdata) -> bool { return vdata != SSSP_INIT_VALUE; }); } diff --git a/procedures/business_cpp/algo_cpp/sssp_procedure_v2.cpp b/procedures/business_cpp/sssp_procedure_v2.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/sssp_procedure_v2.cpp rename to procedures/business_cpp/sssp_procedure_v2.cpp diff --git a/procedures/business_cpp/algo_cpp/sssp_standalone.cpp b/procedures/business_cpp/sssp_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/sssp_standalone.cpp rename to procedures/business_cpp/sssp_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/subgraph_isomorphism_core.cpp b/procedures/business_cpp/subgraph_isomorphism_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/subgraph_isomorphism_core.cpp rename to procedures/business_cpp/subgraph_isomorphism_core.cpp diff --git a/procedures/business_cpp/algo_cpp/subgraph_isomorphism_procedure.cpp b/procedures/business_cpp/subgraph_isomorphism_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/subgraph_isomorphism_procedure.cpp rename to procedures/business_cpp/subgraph_isomorphism_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/subgraph_isomorphism_standalone.cpp b/procedures/business_cpp/subgraph_isomorphism_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/subgraph_isomorphism_standalone.cpp rename to procedures/business_cpp/subgraph_isomorphism_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/sybilrank_core.cpp b/procedures/business_cpp/sybilrank_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/sybilrank_core.cpp rename to procedures/business_cpp/sybilrank_core.cpp diff --git a/procedures/business_cpp/algo_cpp/sybilrank_procedure.cpp b/procedures/business_cpp/sybilrank_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/sybilrank_procedure.cpp rename to procedures/business_cpp/sybilrank_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/sybilrank_standalone.cpp b/procedures/business_cpp/sybilrank_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/sybilrank_standalone.cpp rename to procedures/business_cpp/sybilrank_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/triangle_core.cpp b/procedures/business_cpp/triangle_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/triangle_core.cpp rename to procedures/business_cpp/triangle_core.cpp diff --git a/procedures/business_cpp/algo_cpp/triangle_procedure.cpp b/procedures/business_cpp/triangle_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/triangle_procedure.cpp rename to procedures/business_cpp/triangle_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/triangle_standalone.cpp b/procedures/business_cpp/triangle_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/triangle_standalone.cpp rename to procedures/business_cpp/triangle_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/trustrank_core.cpp b/procedures/business_cpp/trustrank_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/trustrank_core.cpp rename to procedures/business_cpp/trustrank_core.cpp diff --git a/procedures/business_cpp/algo_cpp/trustrank_procedure.cpp b/procedures/business_cpp/trustrank_procedure.cpp similarity index 98% rename from procedures/business_cpp/algo_cpp/trustrank_procedure.cpp rename to procedures/business_cpp/trustrank_procedure.cpp index 6fb8552f22..0315147e07 100644 --- a/procedures/business_cpp/algo_cpp/trustrank_procedure.cpp +++ b/procedures/business_cpp/trustrank_procedure.cpp @@ -75,7 +75,7 @@ extern "C" bool Process(GraphDB& db, const std::string& request, std::string& re // output start_time = get_time(); if (output_file != "") { - olapondb.WriteToFile(curr, output_file); + olapondb.WriteToFile(true, curr, output_file); } // TODO(any): write curr back to graph auto output_cost = get_time() - start_time; diff --git a/procedures/business_cpp/algo_cpp/trustrank_standalone.cpp b/procedures/business_cpp/trustrank_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/trustrank_standalone.cpp rename to procedures/business_cpp/trustrank_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/wcc_core.cpp b/procedures/business_cpp/wcc_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/wcc_core.cpp rename to procedures/business_cpp/wcc_core.cpp diff --git a/procedures/business_cpp/algo_cpp/wcc_procedure.cpp b/procedures/business_cpp/wcc_procedure.cpp similarity index 98% rename from procedures/business_cpp/algo_cpp/wcc_procedure.cpp rename to procedures/business_cpp/wcc_procedure.cpp index c4893b651d..ab78b939b8 100644 --- a/procedures/business_cpp/algo_cpp/wcc_procedure.cpp +++ b/procedures/business_cpp/wcc_procedure.cpp @@ -92,7 +92,7 @@ extern "C" bool Process(GraphDB& db, const std::string& request, std::string& re // output start_time = get_time(); if (output_file != "") { - olapondb.WriteToFile(label, output_file); + olapondb.WriteToFile(true, label, output_file); } size_t num_components, max_component; diff --git a/procedures/business_cpp/algo_cpp/wcc_procedure_v2.cpp b/procedures/business_cpp/wcc_procedure_v2.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/wcc_procedure_v2.cpp rename to procedures/business_cpp/wcc_procedure_v2.cpp diff --git a/procedures/business_cpp/algo_cpp/wcc_standalone.cpp b/procedures/business_cpp/wcc_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/wcc_standalone.cpp rename to procedures/business_cpp/wcc_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/wlpa_core.cpp b/procedures/business_cpp/wlpa_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/wlpa_core.cpp rename to procedures/business_cpp/wlpa_core.cpp diff --git a/procedures/business_cpp/algo_cpp/wlpa_procedure.cpp b/procedures/business_cpp/wlpa_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/wlpa_procedure.cpp rename to procedures/business_cpp/wlpa_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/wlpa_standalone.cpp b/procedures/business_cpp/wlpa_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/wlpa_standalone.cpp rename to procedures/business_cpp/wlpa_standalone.cpp diff --git a/procedures/business_cpp/algo_cpp/wpagerank_core.cpp b/procedures/business_cpp/wpagerank_core.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/wpagerank_core.cpp rename to procedures/business_cpp/wpagerank_core.cpp diff --git a/procedures/business_cpp/algo_cpp/wpagerank_procedure.cpp b/procedures/business_cpp/wpagerank_procedure.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/wpagerank_procedure.cpp rename to procedures/business_cpp/wpagerank_procedure.cpp diff --git a/procedures/business_cpp/algo_cpp/wpagerank_standalone.cpp b/procedures/business_cpp/wpagerank_standalone.cpp similarity index 100% rename from procedures/business_cpp/algo_cpp/wpagerank_standalone.cpp rename to procedures/business_cpp/wpagerank_standalone.cpp diff --git a/src/cypher/parser/generated/LcypherLexer.cpp b/src/cypher/parser/generated/LcypherLexer.cpp index e94f0fc9f7..08216024b9 100644 --- a/src/cypher/parser/generated/LcypherLexer.cpp +++ b/src/cypher/parser/generated/LcypherLexer.cpp @@ -1,5 +1,5 @@ -// Generated from src/cypher/grammar/Lcypher.g4 by ANTLR 4.13.0 +// Generated from src/cypher/grammar/Lcypher.g4 by ANTLR 4.12.0 #include "LcypherLexer.h" @@ -43,19 +43,10 @@ struct LcypherLexerStaticData final { }; ::antlr4::internal::OnceFlag lcypherlexerLexerOnceFlag; -#if ANTLR4_USE_THREAD_LOCAL_CACHE -static thread_local -#endif LcypherLexerStaticData *lcypherlexerLexerStaticData = nullptr; void lcypherlexerLexerInitialize() { -#if ANTLR4_USE_THREAD_LOCAL_CACHE - if (lcypherlexerLexerStaticData != nullptr) { - return; - } -#else assert(lcypherlexerLexerStaticData == nullptr); -#endif auto staticData = std::make_unique( std::vector{ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", @@ -119,7 +110,7 @@ void lcypherlexerLexerInitialize() { } ); static const int32_t serializedATNSegment[] = { - 4,0,133,1043,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,133,1045,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, @@ -171,436 +162,436 @@ void lcypherlexerLexerInitialize() { 1,91,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,93,1,93,1,94,1,94, 1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,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,99,1,99,1,99,1,99, - 1,99,1,100,1,100,1,100,5,100,721,8,100,10,100,12,100,724,9,100,1,100, - 1,100,1,100,1,100,5,100,730,8,100,10,100,12,100,733,9,100,1,100,3,100, - 736,8,100,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101, - 1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,3,101,756,8,101,1,102, - 1,102,1,102,1,102,4,102,762,8,102,11,102,12,102,763,1,103,1,103,1,103, - 5,103,769,8,103,10,103,12,103,772,9,103,3,103,774,8,103,1,104,1,104,4, - 104,778,8,104,11,104,12,104,779,1,105,3,105,783,8,105,1,106,1,106,3,106, - 787,8,106,1,107,1,107,3,107,791,8,107,1,108,1,108,3,108,795,8,108,1,109, - 1,109,1,110,1,110,3,110,801,8,110,1,111,1,111,1,112,4,112,806,8,112,11, - 112,12,112,807,1,112,4,112,811,8,112,11,112,12,112,812,1,112,1,112,4, - 112,817,8,112,11,112,12,112,818,1,112,1,112,4,112,823,8,112,11,112,12, - 112,824,3,112,827,8,112,1,112,1,112,3,112,831,8,112,1,112,4,112,834,8, - 112,11,112,12,112,835,1,113,5,113,839,8,113,10,113,12,113,842,9,113,1, - 113,1,113,4,113,846,8,113,11,113,12,113,847,1,114,1,114,1,114,1,114,1, - 114,1,114,1,114,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,116, - 1,116,5,116,867,8,116,10,116,12,116,870,9,116,1,117,1,117,1,117,1,117, - 1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,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,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,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,126,1,127,1,127, - 3,127,936,8,127,1,128,1,128,3,128,940,8,128,1,129,1,129,5,129,944,8,129, - 10,129,12,129,947,9,129,1,129,4,129,950,8,129,11,129,12,129,951,1,130, - 4,130,955,8,130,11,130,12,130,956,1,131,1,131,1,131,1,131,1,131,1,131, - 1,131,1,131,1,131,1,131,1,131,1,131,3,131,971,8,131,1,132,1,132,1,132, - 1,132,1,132,1,132,5,132,979,8,132,10,132,12,132,982,9,132,1,132,1,132, - 1,132,1,132,1,132,1,132,5,132,990,8,132,10,132,12,132,993,9,132,1,132, - 3,132,996,8,132,1,132,1,132,3,132,1000,8,132,3,132,1002,8,132,1,133,1, - 133,1,134,1,134,1,135,1,135,1,136,1,136,1,137,1,137,1,138,1,138,1,139, - 1,139,1,140,1,140,1,141,1,141,1,142,1,142,1,143,1,143,1,144,1,144,1,145, - 1,145,1,146,1,146,1,147,1,147,1,148,1,148,1,149,1,149,1,150,1,150,1,151, - 1,151,1,152,1,152,0,0,153,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,0,269,0,271,0,273,0,275,0,277,0,279,0,281,0,283,0,285, - 0,287,0,289,0,291,0,293,0,295,0,297,0,299,0,301,0,303,0,305,0,1,0,48, - 2,0,69,69,101,101,2,0,88,88,120,120,2,0,80,80,112,112,2,0,76,76,108,108, - 2,0,65,65,97,97,2,0,73,73,105,105,2,0,78,78,110,110,2,0,82,82,114,114, - 2,0,79,79,111,111,2,0,70,70,102,102,2,0,85,85,117,117,2,0,84,84,116,116, - 2,0,77,77,109,109,2,0,67,67,99,99,2,0,72,72,104,104,2,0,87,87,119,119, - 2,0,68,68,100,100,2,0,83,83,115,115,2,0,71,71,103,103,2,0,86,86,118,118, - 2,0,89,89,121,121,2,0,66,66,98,98,2,0,75,75,107,107,2,0,74,74,106,106, - 13,0,34,34,39,39,66,66,70,70,78,78,82,82,84,84,92,92,98,98,102,102,110, - 110,114,114,116,116,2,0,65,70,97,102,2,0,81,81,113,113,8,0,160,160,5760, - 5760,6158,6158,8192,8202,8232,8233,8239,8239,8287,8287,12288,12288,1, - 0,12,12,2,0,0,95,97,65535,1,0,30,30,429,0,48,57,65,90,95,95,97,122,170, - 170,181,181,183,183,186,186,192,214,216,246,248,705,710,721,736,740,748, - 748,750,750,768,884,886,887,890,893,902,906,908,908,910,929,931,1013, - 1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469, - 1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562, - 1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866, - 1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220, - 2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444, - 2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504, - 2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570, - 2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620, - 2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677, - 2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745, - 2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819, - 2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884, - 2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929, - 2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975, - 2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024, - 3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123, - 3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171, - 3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257, - 3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311, - 3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400, - 3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478, - 3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542, - 3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716, - 3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749, - 3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789, - 3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895, - 3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038, - 4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680, - 4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784, - 4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885, - 4888,4954,4957,4959,4969,4977,4992,5007,5024,5108,5121,5740,5743,5759, - 5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971, - 5984,5996,5998,6000,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121, - 6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443, - 6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6618,6656,6683, - 6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001, - 7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414, - 7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025, - 8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132, - 8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8255,8256, - 8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432, - 8450,8450,8455,8455,8458,8467,8469,8469,8472,8477,8484,8484,8486,8486, - 8488,8488,8490,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310, - 11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565, - 11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702, - 11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775, - 12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12447, - 12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799, - 13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539, - 42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888, - 42891,42894,42896,42899,42912,42922,43000,43047,43072,43123,43136,43204, - 43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388, - 43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638, - 43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782, - 43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013, - 44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217, - 64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318, - 64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967, - 65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140, - 65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470, - 65474,65479,65482,65487,65490,65495,65498,65500,2,0,0,41,43,65535,3,0, - 0,38,40,91,93,65535,3,0,0,9,11,12,14,65535,2,0,0,46,48,65535,1,0,29,29, - 1,0,28,28,1,0,13,13,17,0,36,36,162,165,1423,1423,1547,1547,2546,2547, - 2555,2555,2801,2801,3065,3065,3647,3647,6107,6107,8352,8378,43064,43064, - 65020,65020,65129,65129,65284,65284,65504,65505,65509,65510,1,0,32,32, - 6,0,95,95,8255,8256,8276,8276,65075,65076,65101,65103,65343,65343,1,0, - 9,9,3,0,0,33,35,91,93,65535,1,0,10,10,1,0,11,11,1,0,31,31,370,0,65,90, - 97,122,170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740, - 748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929, - 931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514, - 1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775, - 1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026, - 2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136, - 2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423, - 2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489, - 2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576, - 2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654, - 2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745, - 2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864, - 2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947, - 2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980, - 2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123, - 3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240, - 3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340, - 3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478, - 3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654, - 3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743, - 3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773, - 3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980, - 4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208, - 4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680, - 4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784, - 4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885, - 4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866, - 5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6000, - 6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389, - 6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740, - 6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203, - 7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957, - 7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029, - 8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147, - 8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348, - 8450,8450,8455,8455,8458,8467,8469,8469,8472,8477,8484,8484,8486,8486, - 8488,8488,8490,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310, - 11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559, - 11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694, - 11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742, - 12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12443,12447, - 12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799, - 13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527, - 42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888, - 42891,42894,42896,42899,42912,42922,43000,43009,43011,43013,43015,43018, - 43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301, - 43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586, - 43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702, - 43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764, - 43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002, - 44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262, - 64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318, - 64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967, - 65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470, - 65474,65479,65482,65487,65490,65495,65498,65500,1070,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,1,307,1,0,0,0,3,309,1,0, - 0,0,5,311,1,0,0,0,7,313,1,0,0,0,9,316,1,0,0,0,11,318,1,0,0,0,13,320,1, - 0,0,0,15,322,1,0,0,0,17,324,1,0,0,0,19,326,1,0,0,0,21,328,1,0,0,0,23, - 330,1,0,0,0,25,333,1,0,0,0,27,335,1,0,0,0,29,337,1,0,0,0,31,339,1,0,0, - 0,33,341,1,0,0,0,35,343,1,0,0,0,37,346,1,0,0,0,39,348,1,0,0,0,41,350, - 1,0,0,0,43,353,1,0,0,0,45,356,1,0,0,0,47,358,1,0,0,0,49,360,1,0,0,0,51, - 362,1,0,0,0,53,364,1,0,0,0,55,366,1,0,0,0,57,368,1,0,0,0,59,370,1,0,0, - 0,61,372,1,0,0,0,63,374,1,0,0,0,65,376,1,0,0,0,67,378,1,0,0,0,69,380, - 1,0,0,0,71,382,1,0,0,0,73,384,1,0,0,0,75,386,1,0,0,0,77,388,1,0,0,0,79, - 390,1,0,0,0,81,392,1,0,0,0,83,394,1,0,0,0,85,396,1,0,0,0,87,398,1,0,0, - 0,89,400,1,0,0,0,91,402,1,0,0,0,93,410,1,0,0,0,95,418,1,0,0,0,97,424, - 1,0,0,0,99,428,1,0,0,0,101,437,1,0,0,0,103,443,1,0,0,0,105,450,1,0,0, - 0,107,453,1,0,0,0,109,459,1,0,0,0,111,462,1,0,0,0,113,469,1,0,0,0,115, - 473,1,0,0,0,117,480,1,0,0,0,119,487,1,0,0,0,121,494,1,0,0,0,123,499,1, - 0,0,0,125,505,1,0,0,0,127,510,1,0,0,0,129,519,1,0,0,0,131,526,1,0,0,0, - 133,532,1,0,0,0,135,535,1,0,0,0,137,540,1,0,0,0,139,546,1,0,0,0,141,556, - 1,0,0,0,143,560,1,0,0,0,145,571,1,0,0,0,147,576,1,0,0,0,149,582,1,0,0, - 0,151,587,1,0,0,0,153,593,1,0,0,0,155,599,1,0,0,0,157,602,1,0,0,0,159, - 606,1,0,0,0,161,610,1,0,0,0,163,614,1,0,0,0,165,617,1,0,0,0,167,624,1, - 0,0,0,169,629,1,0,0,0,171,638,1,0,0,0,173,645,1,0,0,0,175,648,1,0,0,0, - 177,653,1,0,0,0,179,659,1,0,0,0,181,663,1,0,0,0,183,668,1,0,0,0,185,675, - 1,0,0,0,187,680,1,0,0,0,189,686,1,0,0,0,191,693,1,0,0,0,193,698,1,0,0, - 0,195,703,1,0,0,0,197,707,1,0,0,0,199,712,1,0,0,0,201,735,1,0,0,0,203, - 737,1,0,0,0,205,757,1,0,0,0,207,773,1,0,0,0,209,775,1,0,0,0,211,782,1, - 0,0,0,213,786,1,0,0,0,215,790,1,0,0,0,217,794,1,0,0,0,219,796,1,0,0,0, - 221,800,1,0,0,0,223,802,1,0,0,0,225,826,1,0,0,0,227,840,1,0,0,0,229,849, - 1,0,0,0,231,856,1,0,0,0,233,864,1,0,0,0,235,871,1,0,0,0,237,882,1,0,0, - 0,239,885,1,0,0,0,241,889,1,0,0,0,243,897,1,0,0,0,245,904,1,0,0,0,247, - 914,1,0,0,0,249,921,1,0,0,0,251,924,1,0,0,0,253,928,1,0,0,0,255,935,1, - 0,0,0,257,939,1,0,0,0,259,949,1,0,0,0,261,954,1,0,0,0,263,970,1,0,0,0, - 265,1001,1,0,0,0,267,1003,1,0,0,0,269,1005,1,0,0,0,271,1007,1,0,0,0,273, - 1009,1,0,0,0,275,1011,1,0,0,0,277,1013,1,0,0,0,279,1015,1,0,0,0,281,1017, - 1,0,0,0,283,1019,1,0,0,0,285,1021,1,0,0,0,287,1023,1,0,0,0,289,1025,1, - 0,0,0,291,1027,1,0,0,0,293,1029,1,0,0,0,295,1031,1,0,0,0,297,1033,1,0, - 0,0,299,1035,1,0,0,0,301,1037,1,0,0,0,303,1039,1,0,0,0,305,1041,1,0,0, - 0,307,308,5,59,0,0,308,2,1,0,0,0,309,310,5,44,0,0,310,4,1,0,0,0,311,312, - 5,61,0,0,312,6,1,0,0,0,313,314,5,43,0,0,314,315,5,61,0,0,315,8,1,0,0, - 0,316,317,5,42,0,0,317,10,1,0,0,0,318,319,5,40,0,0,319,12,1,0,0,0,320, - 321,5,41,0,0,321,14,1,0,0,0,322,323,5,91,0,0,323,16,1,0,0,0,324,325,5, - 93,0,0,325,18,1,0,0,0,326,327,5,58,0,0,327,20,1,0,0,0,328,329,5,124,0, - 0,329,22,1,0,0,0,330,331,5,46,0,0,331,332,5,46,0,0,332,24,1,0,0,0,333, - 334,5,43,0,0,334,26,1,0,0,0,335,336,5,45,0,0,336,28,1,0,0,0,337,338,5, - 47,0,0,338,30,1,0,0,0,339,340,5,37,0,0,340,32,1,0,0,0,341,342,5,94,0, - 0,342,34,1,0,0,0,343,344,5,60,0,0,344,345,5,62,0,0,345,36,1,0,0,0,346, - 347,5,60,0,0,347,38,1,0,0,0,348,349,5,62,0,0,349,40,1,0,0,0,350,351,5, - 60,0,0,351,352,5,61,0,0,352,42,1,0,0,0,353,354,5,62,0,0,354,355,5,61, - 0,0,355,44,1,0,0,0,356,357,5,46,0,0,357,46,1,0,0,0,358,359,5,123,0,0, - 359,48,1,0,0,0,360,361,5,125,0,0,361,50,1,0,0,0,362,363,5,36,0,0,363, - 52,1,0,0,0,364,365,5,10216,0,0,365,54,1,0,0,0,366,367,5,12296,0,0,367, - 56,1,0,0,0,368,369,5,65124,0,0,369,58,1,0,0,0,370,371,5,65308,0,0,371, - 60,1,0,0,0,372,373,5,10217,0,0,373,62,1,0,0,0,374,375,5,12297,0,0,375, - 64,1,0,0,0,376,377,5,65125,0,0,377,66,1,0,0,0,378,379,5,65310,0,0,379, - 68,1,0,0,0,380,381,5,173,0,0,381,70,1,0,0,0,382,383,5,8208,0,0,383,72, - 1,0,0,0,384,385,5,8209,0,0,385,74,1,0,0,0,386,387,5,8210,0,0,387,76,1, - 0,0,0,388,389,5,8211,0,0,389,78,1,0,0,0,390,391,5,8212,0,0,391,80,1,0, - 0,0,392,393,5,8213,0,0,393,82,1,0,0,0,394,395,5,8722,0,0,395,84,1,0,0, - 0,396,397,5,65112,0,0,397,86,1,0,0,0,398,399,5,65123,0,0,399,88,1,0,0, - 0,400,401,5,65293,0,0,401,90,1,0,0,0,402,403,7,0,0,0,403,404,7,1,0,0, - 404,405,7,2,0,0,405,406,7,3,0,0,406,407,7,4,0,0,407,408,7,5,0,0,408,409, - 7,6,0,0,409,92,1,0,0,0,410,411,7,2,0,0,411,412,7,7,0,0,412,413,7,8,0, - 0,413,414,7,9,0,0,414,415,7,5,0,0,415,416,7,3,0,0,416,417,7,0,0,0,417, - 94,1,0,0,0,418,419,7,10,0,0,419,420,7,6,0,0,420,421,7,5,0,0,421,422,7, - 8,0,0,422,423,7,6,0,0,423,96,1,0,0,0,424,425,7,4,0,0,425,426,7,3,0,0, - 426,427,7,3,0,0,427,98,1,0,0,0,428,429,7,8,0,0,429,430,7,2,0,0,430,431, - 7,11,0,0,431,432,7,5,0,0,432,433,7,8,0,0,433,434,7,6,0,0,434,435,7,4, - 0,0,435,436,7,3,0,0,436,100,1,0,0,0,437,438,7,12,0,0,438,439,7,4,0,0, - 439,440,7,11,0,0,440,441,7,13,0,0,441,442,7,14,0,0,442,102,1,0,0,0,443, - 444,7,10,0,0,444,445,7,6,0,0,445,446,7,15,0,0,446,447,7,5,0,0,447,448, - 7,6,0,0,448,449,7,16,0,0,449,104,1,0,0,0,450,451,7,4,0,0,451,452,7,17, - 0,0,452,106,1,0,0,0,453,454,7,12,0,0,454,455,7,0,0,0,455,456,7,7,0,0, - 456,457,7,18,0,0,457,458,7,0,0,0,458,108,1,0,0,0,459,460,7,8,0,0,460, - 461,7,6,0,0,461,110,1,0,0,0,462,463,7,13,0,0,463,464,7,7,0,0,464,465, - 7,0,0,0,465,466,7,4,0,0,466,467,7,11,0,0,467,468,7,0,0,0,468,112,1,0, - 0,0,469,470,7,17,0,0,470,471,7,0,0,0,471,472,7,11,0,0,472,114,1,0,0,0, - 473,474,7,16,0,0,474,475,7,0,0,0,475,476,7,11,0,0,476,477,7,4,0,0,477, - 478,7,13,0,0,478,479,7,14,0,0,479,116,1,0,0,0,480,481,7,16,0,0,481,482, - 7,0,0,0,482,483,7,3,0,0,483,484,7,0,0,0,484,485,7,11,0,0,485,486,7,0, - 0,0,486,118,1,0,0,0,487,488,7,7,0,0,488,489,7,0,0,0,489,490,7,12,0,0, - 490,491,7,8,0,0,491,492,7,19,0,0,492,493,7,0,0,0,493,120,1,0,0,0,494, - 495,7,13,0,0,495,496,7,4,0,0,496,497,7,3,0,0,497,498,7,3,0,0,498,122, - 1,0,0,0,499,500,7,20,0,0,500,501,7,5,0,0,501,502,7,0,0,0,502,503,7,3, - 0,0,503,504,7,16,0,0,504,124,1,0,0,0,505,506,7,15,0,0,506,507,7,5,0,0, - 507,508,7,11,0,0,508,509,7,14,0,0,509,126,1,0,0,0,510,511,7,16,0,0,511, - 512,7,5,0,0,512,513,7,17,0,0,513,514,7,11,0,0,514,515,7,5,0,0,515,516, - 7,6,0,0,516,517,7,13,0,0,517,518,7,11,0,0,518,128,1,0,0,0,519,520,7,7, - 0,0,520,521,7,0,0,0,521,522,7,11,0,0,522,523,7,10,0,0,523,524,7,7,0,0, - 524,525,7,6,0,0,525,130,1,0,0,0,526,527,7,8,0,0,527,528,7,7,0,0,528,529, - 7,16,0,0,529,530,7,0,0,0,530,531,7,7,0,0,531,132,1,0,0,0,532,533,7,21, - 0,0,533,534,7,20,0,0,534,134,1,0,0,0,535,536,7,17,0,0,536,537,7,22,0, - 0,537,538,7,5,0,0,538,539,7,2,0,0,539,136,1,0,0,0,540,541,7,3,0,0,541, - 542,7,5,0,0,542,543,7,12,0,0,543,544,7,5,0,0,544,545,7,11,0,0,545,138, - 1,0,0,0,546,547,7,4,0,0,547,548,7,17,0,0,548,549,7,13,0,0,549,550,7,0, - 0,0,550,551,7,6,0,0,551,552,7,16,0,0,552,553,7,5,0,0,553,554,7,6,0,0, - 554,555,7,18,0,0,555,140,1,0,0,0,556,557,7,4,0,0,557,558,7,17,0,0,558, - 559,7,13,0,0,559,142,1,0,0,0,560,561,7,16,0,0,561,562,7,0,0,0,562,563, - 7,17,0,0,563,564,7,13,0,0,564,565,7,0,0,0,565,566,7,6,0,0,566,567,7,16, - 0,0,567,568,7,5,0,0,568,569,7,6,0,0,569,570,7,18,0,0,570,144,1,0,0,0, - 571,572,7,16,0,0,572,573,7,0,0,0,573,574,7,17,0,0,574,575,7,13,0,0,575, - 146,1,0,0,0,576,577,7,10,0,0,577,578,7,17,0,0,578,579,7,5,0,0,579,580, - 7,6,0,0,580,581,7,18,0,0,581,148,1,0,0,0,582,583,7,23,0,0,583,584,7,8, - 0,0,584,585,7,5,0,0,585,586,7,6,0,0,586,150,1,0,0,0,587,588,7,17,0,0, - 588,589,7,11,0,0,589,590,7,4,0,0,590,591,7,7,0,0,591,592,7,11,0,0,592, - 152,1,0,0,0,593,594,7,15,0,0,594,595,7,14,0,0,595,596,7,0,0,0,596,597, - 7,7,0,0,597,598,7,0,0,0,598,154,1,0,0,0,599,600,7,8,0,0,600,601,7,7,0, - 0,601,156,1,0,0,0,602,603,7,1,0,0,603,604,7,8,0,0,604,605,7,7,0,0,605, - 158,1,0,0,0,606,607,7,4,0,0,607,608,7,6,0,0,608,609,7,16,0,0,609,160, - 1,0,0,0,610,611,7,6,0,0,611,612,7,8,0,0,612,613,7,11,0,0,613,162,1,0, - 0,0,614,615,7,5,0,0,615,616,7,6,0,0,616,164,1,0,0,0,617,618,7,17,0,0, - 618,619,7,11,0,0,619,620,7,4,0,0,620,621,7,7,0,0,621,622,7,11,0,0,622, - 623,7,17,0,0,623,166,1,0,0,0,624,625,7,0,0,0,625,626,7,6,0,0,626,627, - 7,16,0,0,627,628,7,17,0,0,628,168,1,0,0,0,629,630,7,13,0,0,630,631,7, - 8,0,0,631,632,7,6,0,0,632,633,7,11,0,0,633,634,7,4,0,0,634,635,7,5,0, - 0,635,636,7,6,0,0,636,637,7,17,0,0,637,170,1,0,0,0,638,639,7,7,0,0,639, - 640,7,0,0,0,640,641,7,18,0,0,641,642,7,0,0,0,642,643,7,1,0,0,643,644, - 7,2,0,0,644,172,1,0,0,0,645,646,7,5,0,0,646,647,7,17,0,0,647,174,1,0, - 0,0,648,649,7,6,0,0,649,650,7,10,0,0,650,651,7,3,0,0,651,652,7,3,0,0, - 652,176,1,0,0,0,653,654,7,13,0,0,654,655,7,8,0,0,655,656,7,10,0,0,656, - 657,7,6,0,0,657,658,7,11,0,0,658,178,1,0,0,0,659,660,7,4,0,0,660,661, - 7,6,0,0,661,662,7,20,0,0,662,180,1,0,0,0,663,664,7,6,0,0,664,665,7,8, - 0,0,665,666,7,6,0,0,666,667,7,0,0,0,667,182,1,0,0,0,668,669,7,17,0,0, - 669,670,7,5,0,0,670,671,7,6,0,0,671,672,7,18,0,0,672,673,7,3,0,0,673, - 674,7,0,0,0,674,184,1,0,0,0,675,676,7,11,0,0,676,677,7,7,0,0,677,678, - 7,10,0,0,678,679,7,0,0,0,679,186,1,0,0,0,680,681,7,9,0,0,681,682,7,4, - 0,0,682,683,7,3,0,0,683,684,7,17,0,0,684,685,7,0,0,0,685,188,1,0,0,0, - 686,687,7,0,0,0,687,688,7,1,0,0,688,689,7,5,0,0,689,690,7,17,0,0,690, - 691,7,11,0,0,691,692,7,17,0,0,692,190,1,0,0,0,693,694,7,13,0,0,694,695, - 7,4,0,0,695,696,7,17,0,0,696,697,7,0,0,0,697,192,1,0,0,0,698,699,7,0, - 0,0,699,700,7,3,0,0,700,701,7,17,0,0,701,702,7,0,0,0,702,194,1,0,0,0, - 703,704,7,0,0,0,704,705,7,6,0,0,705,706,7,16,0,0,706,196,1,0,0,0,707, - 708,7,15,0,0,708,709,7,14,0,0,709,710,7,0,0,0,710,711,7,6,0,0,711,198, - 1,0,0,0,712,713,7,11,0,0,713,714,7,14,0,0,714,715,7,0,0,0,715,716,7,6, - 0,0,716,200,1,0,0,0,717,722,5,34,0,0,718,721,3,297,148,0,719,721,3,203, - 101,0,720,718,1,0,0,0,720,719,1,0,0,0,721,724,1,0,0,0,722,720,1,0,0,0, - 722,723,1,0,0,0,723,725,1,0,0,0,724,722,1,0,0,0,725,736,5,34,0,0,726, - 731,5,39,0,0,727,730,3,277,138,0,728,730,3,203,101,0,729,727,1,0,0,0, - 729,728,1,0,0,0,730,733,1,0,0,0,731,729,1,0,0,0,731,732,1,0,0,0,732,734, - 1,0,0,0,733,731,1,0,0,0,734,736,5,39,0,0,735,717,1,0,0,0,735,726,1,0, - 0,0,736,202,1,0,0,0,737,755,5,92,0,0,738,756,7,24,0,0,739,740,7,10,0, - 0,740,741,3,213,106,0,741,742,3,213,106,0,742,743,3,213,106,0,743,744, - 3,213,106,0,744,756,1,0,0,0,745,746,7,10,0,0,746,747,3,213,106,0,747, - 748,3,213,106,0,748,749,3,213,106,0,749,750,3,213,106,0,750,751,3,213, - 106,0,751,752,3,213,106,0,752,753,3,213,106,0,753,754,3,213,106,0,754, - 756,1,0,0,0,755,738,1,0,0,0,755,739,1,0,0,0,755,745,1,0,0,0,756,204,1, - 0,0,0,757,758,5,48,0,0,758,759,5,120,0,0,759,761,1,0,0,0,760,762,3,213, - 106,0,761,760,1,0,0,0,762,763,1,0,0,0,763,761,1,0,0,0,763,764,1,0,0,0, - 764,206,1,0,0,0,765,774,3,223,111,0,766,770,3,217,108,0,767,769,3,215, - 107,0,768,767,1,0,0,0,769,772,1,0,0,0,770,768,1,0,0,0,770,771,1,0,0,0, - 771,774,1,0,0,0,772,770,1,0,0,0,773,765,1,0,0,0,773,766,1,0,0,0,774,208, - 1,0,0,0,775,777,3,223,111,0,776,778,3,221,110,0,777,776,1,0,0,0,778,779, - 1,0,0,0,779,777,1,0,0,0,779,780,1,0,0,0,780,210,1,0,0,0,781,783,7,25, - 0,0,782,781,1,0,0,0,783,212,1,0,0,0,784,787,3,215,107,0,785,787,3,211, - 105,0,786,784,1,0,0,0,786,785,1,0,0,0,787,214,1,0,0,0,788,791,3,223,111, - 0,789,791,3,217,108,0,790,788,1,0,0,0,790,789,1,0,0,0,791,216,1,0,0,0, - 792,795,3,219,109,0,793,795,2,56,57,0,794,792,1,0,0,0,794,793,1,0,0,0, - 795,218,1,0,0,0,796,797,2,49,55,0,797,220,1,0,0,0,798,801,3,223,111,0, - 799,801,3,219,109,0,800,798,1,0,0,0,800,799,1,0,0,0,801,222,1,0,0,0,802, - 803,5,48,0,0,803,224,1,0,0,0,804,806,3,215,107,0,805,804,1,0,0,0,806, - 807,1,0,0,0,807,805,1,0,0,0,807,808,1,0,0,0,808,827,1,0,0,0,809,811,3, - 215,107,0,810,809,1,0,0,0,811,812,1,0,0,0,812,810,1,0,0,0,812,813,1,0, - 0,0,813,814,1,0,0,0,814,816,5,46,0,0,815,817,3,215,107,0,816,815,1,0, - 0,0,817,818,1,0,0,0,818,816,1,0,0,0,818,819,1,0,0,0,819,827,1,0,0,0,820, - 822,5,46,0,0,821,823,3,215,107,0,822,821,1,0,0,0,823,824,1,0,0,0,824, - 822,1,0,0,0,824,825,1,0,0,0,825,827,1,0,0,0,826,805,1,0,0,0,826,810,1, - 0,0,0,826,820,1,0,0,0,827,828,1,0,0,0,828,830,7,0,0,0,829,831,5,45,0, - 0,830,829,1,0,0,0,830,831,1,0,0,0,831,833,1,0,0,0,832,834,3,215,107,0, - 833,832,1,0,0,0,834,835,1,0,0,0,835,833,1,0,0,0,835,836,1,0,0,0,836,226, - 1,0,0,0,837,839,3,215,107,0,838,837,1,0,0,0,839,842,1,0,0,0,840,838,1, - 0,0,0,840,841,1,0,0,0,841,843,1,0,0,0,842,840,1,0,0,0,843,845,5,46,0, - 0,844,846,3,215,107,0,845,844,1,0,0,0,846,847,1,0,0,0,847,845,1,0,0,0, - 847,848,1,0,0,0,848,228,1,0,0,0,849,850,7,9,0,0,850,851,7,5,0,0,851,852, - 7,3,0,0,852,853,7,11,0,0,853,854,7,0,0,0,854,855,7,7,0,0,855,230,1,0, - 0,0,856,857,7,0,0,0,857,858,7,1,0,0,858,859,7,11,0,0,859,860,7,7,0,0, - 860,861,7,4,0,0,861,862,7,13,0,0,862,863,7,11,0,0,863,232,1,0,0,0,864, - 868,3,255,127,0,865,867,3,257,128,0,866,865,1,0,0,0,867,870,1,0,0,0,868, - 866,1,0,0,0,868,869,1,0,0,0,869,234,1,0,0,0,870,868,1,0,0,0,871,872,7, - 13,0,0,872,873,7,8,0,0,873,874,7,6,0,0,874,875,7,17,0,0,875,876,7,11, - 0,0,876,877,7,7,0,0,877,878,7,4,0,0,878,879,7,5,0,0,879,880,7,6,0,0,880, - 881,7,11,0,0,881,236,1,0,0,0,882,883,7,16,0,0,883,884,7,8,0,0,884,238, - 1,0,0,0,885,886,7,9,0,0,886,887,7,8,0,0,887,888,7,7,0,0,888,240,1,0,0, - 0,889,890,7,7,0,0,890,891,7,0,0,0,891,892,7,26,0,0,892,893,7,10,0,0,893, - 894,7,5,0,0,894,895,7,7,0,0,895,896,7,0,0,0,896,242,1,0,0,0,897,898,7, - 10,0,0,898,899,7,6,0,0,899,900,7,5,0,0,900,901,7,26,0,0,901,902,7,10, - 0,0,902,903,7,0,0,0,903,244,1,0,0,0,904,905,7,12,0,0,905,906,7,4,0,0, - 906,907,7,6,0,0,907,908,7,16,0,0,908,909,7,4,0,0,909,910,7,11,0,0,910, - 911,7,8,0,0,911,912,7,7,0,0,912,913,7,20,0,0,913,246,1,0,0,0,914,915, - 7,17,0,0,915,916,7,13,0,0,916,917,7,4,0,0,917,918,7,3,0,0,918,919,7,4, - 0,0,919,920,7,7,0,0,920,248,1,0,0,0,921,922,7,8,0,0,922,923,7,9,0,0,923, - 250,1,0,0,0,924,925,7,4,0,0,925,926,7,16,0,0,926,927,7,16,0,0,927,252, - 1,0,0,0,928,929,7,16,0,0,929,930,7,7,0,0,930,931,7,8,0,0,931,932,7,2, - 0,0,932,254,1,0,0,0,933,936,3,305,152,0,934,936,3,293,146,0,935,933,1, - 0,0,0,935,934,1,0,0,0,936,256,1,0,0,0,937,940,3,273,136,0,938,940,3,289, - 144,0,939,937,1,0,0,0,939,938,1,0,0,0,940,258,1,0,0,0,941,945,5,96,0, - 0,942,944,3,269,134,0,943,942,1,0,0,0,944,947,1,0,0,0,945,943,1,0,0,0, - 945,946,1,0,0,0,946,948,1,0,0,0,947,945,1,0,0,0,948,950,5,96,0,0,949, - 941,1,0,0,0,950,951,1,0,0,0,951,949,1,0,0,0,951,952,1,0,0,0,952,260,1, - 0,0,0,953,955,3,263,131,0,954,953,1,0,0,0,955,956,1,0,0,0,956,954,1,0, - 0,0,956,957,1,0,0,0,957,262,1,0,0,0,958,971,3,291,145,0,959,971,3,295, - 147,0,960,971,3,299,149,0,961,971,3,301,150,0,962,971,3,267,133,0,963, - 971,3,287,143,0,964,971,3,285,142,0,965,971,3,283,141,0,966,971,3,271, - 135,0,967,971,3,303,151,0,968,971,7,27,0,0,969,971,3,265,132,0,970,958, - 1,0,0,0,970,959,1,0,0,0,970,960,1,0,0,0,970,961,1,0,0,0,970,962,1,0,0, - 0,970,963,1,0,0,0,970,964,1,0,0,0,970,965,1,0,0,0,970,966,1,0,0,0,970, - 967,1,0,0,0,970,968,1,0,0,0,970,969,1,0,0,0,971,264,1,0,0,0,972,973,5, - 47,0,0,973,974,5,42,0,0,974,980,1,0,0,0,975,979,3,275,137,0,976,977,5, - 42,0,0,977,979,3,281,140,0,978,975,1,0,0,0,978,976,1,0,0,0,979,982,1, - 0,0,0,980,978,1,0,0,0,980,981,1,0,0,0,981,983,1,0,0,0,982,980,1,0,0,0, - 983,984,5,42,0,0,984,1002,5,47,0,0,985,986,5,47,0,0,986,987,5,47,0,0, - 987,991,1,0,0,0,988,990,3,279,139,0,989,988,1,0,0,0,990,993,1,0,0,0,991, - 989,1,0,0,0,991,992,1,0,0,0,992,995,1,0,0,0,993,991,1,0,0,0,994,996,3, - 287,143,0,995,994,1,0,0,0,995,996,1,0,0,0,996,999,1,0,0,0,997,1000,3, - 299,149,0,998,1000,5,0,0,1,999,997,1,0,0,0,999,998,1,0,0,0,1000,1002, - 1,0,0,0,1001,972,1,0,0,0,1001,985,1,0,0,0,1002,266,1,0,0,0,1003,1004, - 7,28,0,0,1004,268,1,0,0,0,1005,1006,7,29,0,0,1006,270,1,0,0,0,1007,1008, - 7,30,0,0,1008,272,1,0,0,0,1009,1010,7,31,0,0,1010,274,1,0,0,0,1011,1012, - 7,32,0,0,1012,276,1,0,0,0,1013,1014,7,33,0,0,1014,278,1,0,0,0,1015,1016, - 7,34,0,0,1016,280,1,0,0,0,1017,1018,7,35,0,0,1018,282,1,0,0,0,1019,1020, - 7,36,0,0,1020,284,1,0,0,0,1021,1022,7,37,0,0,1022,286,1,0,0,0,1023,1024, - 7,38,0,0,1024,288,1,0,0,0,1025,1026,7,39,0,0,1026,290,1,0,0,0,1027,1028, - 7,40,0,0,1028,292,1,0,0,0,1029,1030,7,41,0,0,1030,294,1,0,0,0,1031,1032, - 7,42,0,0,1032,296,1,0,0,0,1033,1034,7,43,0,0,1034,298,1,0,0,0,1035,1036, - 7,44,0,0,1036,300,1,0,0,0,1037,1038,7,45,0,0,1038,302,1,0,0,0,1039,1040, - 7,46,0,0,1040,304,1,0,0,0,1041,1042,7,47,0,0,1042,306,1,0,0,0,38,0,720, - 722,729,731,735,755,763,770,773,779,782,786,790,794,800,807,812,818,824, - 826,830,835,840,847,868,935,939,945,951,956,970,978,980,991,995,999,1001, - 0 + 1,99,1,100,1,100,1,100,1,100,5,100,722,8,100,10,100,12,100,725,9,100, + 1,100,1,100,1,100,1,100,1,100,5,100,732,8,100,10,100,12,100,735,9,100, + 1,100,3,100,738,8,100,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101, + 1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,3,101,758, + 8,101,1,102,1,102,1,102,1,102,4,102,764,8,102,11,102,12,102,765,1,103, + 1,103,1,103,5,103,771,8,103,10,103,12,103,774,9,103,3,103,776,8,103,1, + 104,1,104,4,104,780,8,104,11,104,12,104,781,1,105,3,105,785,8,105,1,106, + 1,106,3,106,789,8,106,1,107,1,107,3,107,793,8,107,1,108,1,108,3,108,797, + 8,108,1,109,1,109,1,110,1,110,3,110,803,8,110,1,111,1,111,1,112,4,112, + 808,8,112,11,112,12,112,809,1,112,4,112,813,8,112,11,112,12,112,814,1, + 112,1,112,4,112,819,8,112,11,112,12,112,820,1,112,1,112,4,112,825,8,112, + 11,112,12,112,826,3,112,829,8,112,1,112,1,112,3,112,833,8,112,1,112,4, + 112,836,8,112,11,112,12,112,837,1,113,5,113,841,8,113,10,113,12,113,844, + 9,113,1,113,1,113,4,113,848,8,113,11,113,12,113,849,1,114,1,114,1,114, + 1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115, + 1,116,1,116,5,116,869,8,116,10,116,12,116,872,9,116,1,117,1,117,1,117, + 1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,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,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,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,126,1,127, + 1,127,3,127,938,8,127,1,128,1,128,3,128,942,8,128,1,129,1,129,5,129,946, + 8,129,10,129,12,129,949,9,129,1,129,4,129,952,8,129,11,129,12,129,953, + 1,130,4,130,957,8,130,11,130,12,130,958,1,131,1,131,1,131,1,131,1,131, + 1,131,1,131,1,131,1,131,1,131,1,131,1,131,3,131,973,8,131,1,132,1,132, + 1,132,1,132,1,132,1,132,5,132,981,8,132,10,132,12,132,984,9,132,1,132, + 1,132,1,132,1,132,1,132,1,132,5,132,992,8,132,10,132,12,132,995,9,132, + 1,132,3,132,998,8,132,1,132,1,132,3,132,1002,8,132,3,132,1004,8,132,1, + 133,1,133,1,134,1,134,1,135,1,135,1,136,1,136,1,137,1,137,1,138,1,138, + 1,139,1,139,1,140,1,140,1,141,1,141,1,142,1,142,1,143,1,143,1,144,1,144, + 1,145,1,145,1,146,1,146,1,147,1,147,1,148,1,148,1,149,1,149,1,150,1,150, + 1,151,1,151,1,152,1,152,0,0,153,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,0,269,0,271,0,273,0,275,0,277,0,279,0,281,0,283,0, + 285,0,287,0,289,0,291,0,293,0,295,0,297,0,299,0,301,0,303,0,305,0,1,0, + 50,2,0,69,69,101,101,2,0,88,88,120,120,2,0,80,80,112,112,2,0,76,76,108, + 108,2,0,65,65,97,97,2,0,73,73,105,105,2,0,78,78,110,110,2,0,82,82,114, + 114,2,0,79,79,111,111,2,0,70,70,102,102,2,0,85,85,117,117,2,0,84,84,116, + 116,2,0,77,77,109,109,2,0,67,67,99,99,2,0,72,72,104,104,2,0,87,87,119, + 119,2,0,68,68,100,100,2,0,83,83,115,115,2,0,71,71,103,103,2,0,86,86,118, + 118,2,0,89,89,121,121,2,0,66,66,98,98,2,0,75,75,107,107,2,0,74,74,106, + 106,1,0,34,34,1,0,39,39,13,0,34,34,39,39,66,66,70,70,78,78,82,82,84,84, + 92,92,98,98,102,102,110,110,114,114,116,116,2,0,65,70,97,102,2,0,81,81, + 113,113,8,0,160,160,5760,5760,6158,6158,8192,8202,8232,8233,8239,8239, + 8287,8287,12288,12288,1,0,12,12,2,0,0,95,97,65535,1,0,30,30,429,0,48, + 57,65,90,95,95,97,122,170,170,181,181,183,183,186,186,192,214,216,246, + 248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,906, + 908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369, + 1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488, + 1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770, + 1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112, + 2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425, + 2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486, + 2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534, + 2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613, + 2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649, + 2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730, + 2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784, + 2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866, + 2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911, + 2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969, + 2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014, + 3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086, + 3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157, + 3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218, + 3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294, + 3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346, + 3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450, + 3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530, + 3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664, + 3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737, + 3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776, + 3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872, + 3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974, + 3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301, + 4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704, + 4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808, + 4822,4824,4880,4882,4885,4888,4954,4957,4959,4969,4977,4992,5007,5024, + 5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902, + 5908,5920,5940,5952,5971,5984,5996,5998,6000,6002,6003,6016,6099,6103, + 6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320, + 6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576, + 6601,6608,6618,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823, + 6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245, + 7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008, + 8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118, + 8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178, + 8180,8182,8188,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400, + 8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8472, + 8477,8484,8484,8486,8486,8488,8488,8490,8505,8508,8511,8517,8521,8526, + 8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520, + 11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680, + 11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728, + 11734,11736,11742,11744,11775,12293,12295,12321,12335,12337,12341,12344, + 12348,12353,12438,12441,12447,12449,12538,12540,12543,12549,12589,12593, + 12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192, + 42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655, + 42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43000, + 43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264, + 43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584, + 43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744, + 43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816, + 43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243, + 55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298, + 64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467, + 64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075, + 65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343, + 65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498, + 65500,2,0,0,41,43,65535,3,0,0,38,40,91,93,65535,3,0,0,9,11,12,14,65535, + 2,0,0,46,48,65535,1,0,29,29,1,0,28,28,1,0,13,13,17,0,36,36,162,165,1423, + 1423,1547,1547,2546,2547,2555,2555,2801,2801,3065,3065,3647,3647,6107, + 6107,8352,8378,43064,43064,65020,65020,65129,65129,65284,65284,65504, + 65505,65509,65510,1,0,32,32,6,0,95,95,8255,8256,8276,8276,65075,65076, + 65101,65103,65343,65343,1,0,9,9,3,0,0,33,35,91,93,65535,1,0,10,10,1,0, + 11,11,1,0,31,31,370,0,65,90,97,122,170,170,181,181,186,186,192,214,216, + 246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902, + 902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369, + 1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749, + 1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869, + 1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084, + 2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384, + 2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474, + 2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544, + 2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616, + 2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730, + 2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831, + 2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911, + 2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972, + 2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086, + 3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205, + 3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296, + 3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424, + 3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585, + 3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725, + 3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757, + 3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904, + 3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193, + 4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301, + 4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704, + 4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808, + 4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743, + 5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952, + 5969,5984,5996,5998,6000,6016,6067,6103,6103,6108,6108,6176,6263,6272, + 6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593, + 6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086, + 7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413, + 7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025, + 8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130, + 8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305, + 8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8472, + 8477,8484,8484,8486,8486,8488,8488,8490,8505,8508,8511,8517,8521,8526, + 8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506, + 11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648, + 11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720, + 11726,11728,11734,11736,11742,12293,12295,12321,12329,12337,12341,12344, + 12348,12353,12438,12443,12447,12449,12538,12540,12543,12549,12589,12593, + 12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192, + 42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656, + 42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43000, + 43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250, + 43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471, + 43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648, + 43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739, + 43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808, + 43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744, + 64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298, + 64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467, + 64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313, + 65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498, + 65500,1072,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,1,307,1,0,0,0,3,309,1,0,0,0,5,311,1,0,0,0,7,313,1,0,0,0,9,316,1,0, + 0,0,11,318,1,0,0,0,13,320,1,0,0,0,15,322,1,0,0,0,17,324,1,0,0,0,19,326, + 1,0,0,0,21,328,1,0,0,0,23,330,1,0,0,0,25,333,1,0,0,0,27,335,1,0,0,0,29, + 337,1,0,0,0,31,339,1,0,0,0,33,341,1,0,0,0,35,343,1,0,0,0,37,346,1,0,0, + 0,39,348,1,0,0,0,41,350,1,0,0,0,43,353,1,0,0,0,45,356,1,0,0,0,47,358, + 1,0,0,0,49,360,1,0,0,0,51,362,1,0,0,0,53,364,1,0,0,0,55,366,1,0,0,0,57, + 368,1,0,0,0,59,370,1,0,0,0,61,372,1,0,0,0,63,374,1,0,0,0,65,376,1,0,0, + 0,67,378,1,0,0,0,69,380,1,0,0,0,71,382,1,0,0,0,73,384,1,0,0,0,75,386, + 1,0,0,0,77,388,1,0,0,0,79,390,1,0,0,0,81,392,1,0,0,0,83,394,1,0,0,0,85, + 396,1,0,0,0,87,398,1,0,0,0,89,400,1,0,0,0,91,402,1,0,0,0,93,410,1,0,0, + 0,95,418,1,0,0,0,97,424,1,0,0,0,99,428,1,0,0,0,101,437,1,0,0,0,103,443, + 1,0,0,0,105,450,1,0,0,0,107,453,1,0,0,0,109,459,1,0,0,0,111,462,1,0,0, + 0,113,469,1,0,0,0,115,473,1,0,0,0,117,480,1,0,0,0,119,487,1,0,0,0,121, + 494,1,0,0,0,123,499,1,0,0,0,125,505,1,0,0,0,127,510,1,0,0,0,129,519,1, + 0,0,0,131,526,1,0,0,0,133,532,1,0,0,0,135,535,1,0,0,0,137,540,1,0,0,0, + 139,546,1,0,0,0,141,556,1,0,0,0,143,560,1,0,0,0,145,571,1,0,0,0,147,576, + 1,0,0,0,149,582,1,0,0,0,151,587,1,0,0,0,153,593,1,0,0,0,155,599,1,0,0, + 0,157,602,1,0,0,0,159,606,1,0,0,0,161,610,1,0,0,0,163,614,1,0,0,0,165, + 617,1,0,0,0,167,624,1,0,0,0,169,629,1,0,0,0,171,638,1,0,0,0,173,645,1, + 0,0,0,175,648,1,0,0,0,177,653,1,0,0,0,179,659,1,0,0,0,181,663,1,0,0,0, + 183,668,1,0,0,0,185,675,1,0,0,0,187,680,1,0,0,0,189,686,1,0,0,0,191,693, + 1,0,0,0,193,698,1,0,0,0,195,703,1,0,0,0,197,707,1,0,0,0,199,712,1,0,0, + 0,201,737,1,0,0,0,203,739,1,0,0,0,205,759,1,0,0,0,207,775,1,0,0,0,209, + 777,1,0,0,0,211,784,1,0,0,0,213,788,1,0,0,0,215,792,1,0,0,0,217,796,1, + 0,0,0,219,798,1,0,0,0,221,802,1,0,0,0,223,804,1,0,0,0,225,828,1,0,0,0, + 227,842,1,0,0,0,229,851,1,0,0,0,231,858,1,0,0,0,233,866,1,0,0,0,235,873, + 1,0,0,0,237,884,1,0,0,0,239,887,1,0,0,0,241,891,1,0,0,0,243,899,1,0,0, + 0,245,906,1,0,0,0,247,916,1,0,0,0,249,923,1,0,0,0,251,926,1,0,0,0,253, + 930,1,0,0,0,255,937,1,0,0,0,257,941,1,0,0,0,259,951,1,0,0,0,261,956,1, + 0,0,0,263,972,1,0,0,0,265,1003,1,0,0,0,267,1005,1,0,0,0,269,1007,1,0, + 0,0,271,1009,1,0,0,0,273,1011,1,0,0,0,275,1013,1,0,0,0,277,1015,1,0,0, + 0,279,1017,1,0,0,0,281,1019,1,0,0,0,283,1021,1,0,0,0,285,1023,1,0,0,0, + 287,1025,1,0,0,0,289,1027,1,0,0,0,291,1029,1,0,0,0,293,1031,1,0,0,0,295, + 1033,1,0,0,0,297,1035,1,0,0,0,299,1037,1,0,0,0,301,1039,1,0,0,0,303,1041, + 1,0,0,0,305,1043,1,0,0,0,307,308,5,59,0,0,308,2,1,0,0,0,309,310,5,44, + 0,0,310,4,1,0,0,0,311,312,5,61,0,0,312,6,1,0,0,0,313,314,5,43,0,0,314, + 315,5,61,0,0,315,8,1,0,0,0,316,317,5,42,0,0,317,10,1,0,0,0,318,319,5, + 40,0,0,319,12,1,0,0,0,320,321,5,41,0,0,321,14,1,0,0,0,322,323,5,91,0, + 0,323,16,1,0,0,0,324,325,5,93,0,0,325,18,1,0,0,0,326,327,5,58,0,0,327, + 20,1,0,0,0,328,329,5,124,0,0,329,22,1,0,0,0,330,331,5,46,0,0,331,332, + 5,46,0,0,332,24,1,0,0,0,333,334,5,43,0,0,334,26,1,0,0,0,335,336,5,45, + 0,0,336,28,1,0,0,0,337,338,5,47,0,0,338,30,1,0,0,0,339,340,5,37,0,0,340, + 32,1,0,0,0,341,342,5,94,0,0,342,34,1,0,0,0,343,344,5,60,0,0,344,345,5, + 62,0,0,345,36,1,0,0,0,346,347,5,60,0,0,347,38,1,0,0,0,348,349,5,62,0, + 0,349,40,1,0,0,0,350,351,5,60,0,0,351,352,5,61,0,0,352,42,1,0,0,0,353, + 354,5,62,0,0,354,355,5,61,0,0,355,44,1,0,0,0,356,357,5,46,0,0,357,46, + 1,0,0,0,358,359,5,123,0,0,359,48,1,0,0,0,360,361,5,125,0,0,361,50,1,0, + 0,0,362,363,5,36,0,0,363,52,1,0,0,0,364,365,5,10216,0,0,365,54,1,0,0, + 0,366,367,5,12296,0,0,367,56,1,0,0,0,368,369,5,65124,0,0,369,58,1,0,0, + 0,370,371,5,65308,0,0,371,60,1,0,0,0,372,373,5,10217,0,0,373,62,1,0,0, + 0,374,375,5,12297,0,0,375,64,1,0,0,0,376,377,5,65125,0,0,377,66,1,0,0, + 0,378,379,5,65310,0,0,379,68,1,0,0,0,380,381,5,173,0,0,381,70,1,0,0,0, + 382,383,5,8208,0,0,383,72,1,0,0,0,384,385,5,8209,0,0,385,74,1,0,0,0,386, + 387,5,8210,0,0,387,76,1,0,0,0,388,389,5,8211,0,0,389,78,1,0,0,0,390,391, + 5,8212,0,0,391,80,1,0,0,0,392,393,5,8213,0,0,393,82,1,0,0,0,394,395,5, + 8722,0,0,395,84,1,0,0,0,396,397,5,65112,0,0,397,86,1,0,0,0,398,399,5, + 65123,0,0,399,88,1,0,0,0,400,401,5,65293,0,0,401,90,1,0,0,0,402,403,7, + 0,0,0,403,404,7,1,0,0,404,405,7,2,0,0,405,406,7,3,0,0,406,407,7,4,0,0, + 407,408,7,5,0,0,408,409,7,6,0,0,409,92,1,0,0,0,410,411,7,2,0,0,411,412, + 7,7,0,0,412,413,7,8,0,0,413,414,7,9,0,0,414,415,7,5,0,0,415,416,7,3,0, + 0,416,417,7,0,0,0,417,94,1,0,0,0,418,419,7,10,0,0,419,420,7,6,0,0,420, + 421,7,5,0,0,421,422,7,8,0,0,422,423,7,6,0,0,423,96,1,0,0,0,424,425,7, + 4,0,0,425,426,7,3,0,0,426,427,7,3,0,0,427,98,1,0,0,0,428,429,7,8,0,0, + 429,430,7,2,0,0,430,431,7,11,0,0,431,432,7,5,0,0,432,433,7,8,0,0,433, + 434,7,6,0,0,434,435,7,4,0,0,435,436,7,3,0,0,436,100,1,0,0,0,437,438,7, + 12,0,0,438,439,7,4,0,0,439,440,7,11,0,0,440,441,7,13,0,0,441,442,7,14, + 0,0,442,102,1,0,0,0,443,444,7,10,0,0,444,445,7,6,0,0,445,446,7,15,0,0, + 446,447,7,5,0,0,447,448,7,6,0,0,448,449,7,16,0,0,449,104,1,0,0,0,450, + 451,7,4,0,0,451,452,7,17,0,0,452,106,1,0,0,0,453,454,7,12,0,0,454,455, + 7,0,0,0,455,456,7,7,0,0,456,457,7,18,0,0,457,458,7,0,0,0,458,108,1,0, + 0,0,459,460,7,8,0,0,460,461,7,6,0,0,461,110,1,0,0,0,462,463,7,13,0,0, + 463,464,7,7,0,0,464,465,7,0,0,0,465,466,7,4,0,0,466,467,7,11,0,0,467, + 468,7,0,0,0,468,112,1,0,0,0,469,470,7,17,0,0,470,471,7,0,0,0,471,472, + 7,11,0,0,472,114,1,0,0,0,473,474,7,16,0,0,474,475,7,0,0,0,475,476,7,11, + 0,0,476,477,7,4,0,0,477,478,7,13,0,0,478,479,7,14,0,0,479,116,1,0,0,0, + 480,481,7,16,0,0,481,482,7,0,0,0,482,483,7,3,0,0,483,484,7,0,0,0,484, + 485,7,11,0,0,485,486,7,0,0,0,486,118,1,0,0,0,487,488,7,7,0,0,488,489, + 7,0,0,0,489,490,7,12,0,0,490,491,7,8,0,0,491,492,7,19,0,0,492,493,7,0, + 0,0,493,120,1,0,0,0,494,495,7,13,0,0,495,496,7,4,0,0,496,497,7,3,0,0, + 497,498,7,3,0,0,498,122,1,0,0,0,499,500,7,20,0,0,500,501,7,5,0,0,501, + 502,7,0,0,0,502,503,7,3,0,0,503,504,7,16,0,0,504,124,1,0,0,0,505,506, + 7,15,0,0,506,507,7,5,0,0,507,508,7,11,0,0,508,509,7,14,0,0,509,126,1, + 0,0,0,510,511,7,16,0,0,511,512,7,5,0,0,512,513,7,17,0,0,513,514,7,11, + 0,0,514,515,7,5,0,0,515,516,7,6,0,0,516,517,7,13,0,0,517,518,7,11,0,0, + 518,128,1,0,0,0,519,520,7,7,0,0,520,521,7,0,0,0,521,522,7,11,0,0,522, + 523,7,10,0,0,523,524,7,7,0,0,524,525,7,6,0,0,525,130,1,0,0,0,526,527, + 7,8,0,0,527,528,7,7,0,0,528,529,7,16,0,0,529,530,7,0,0,0,530,531,7,7, + 0,0,531,132,1,0,0,0,532,533,7,21,0,0,533,534,7,20,0,0,534,134,1,0,0,0, + 535,536,7,17,0,0,536,537,7,22,0,0,537,538,7,5,0,0,538,539,7,2,0,0,539, + 136,1,0,0,0,540,541,7,3,0,0,541,542,7,5,0,0,542,543,7,12,0,0,543,544, + 7,5,0,0,544,545,7,11,0,0,545,138,1,0,0,0,546,547,7,4,0,0,547,548,7,17, + 0,0,548,549,7,13,0,0,549,550,7,0,0,0,550,551,7,6,0,0,551,552,7,16,0,0, + 552,553,7,5,0,0,553,554,7,6,0,0,554,555,7,18,0,0,555,140,1,0,0,0,556, + 557,7,4,0,0,557,558,7,17,0,0,558,559,7,13,0,0,559,142,1,0,0,0,560,561, + 7,16,0,0,561,562,7,0,0,0,562,563,7,17,0,0,563,564,7,13,0,0,564,565,7, + 0,0,0,565,566,7,6,0,0,566,567,7,16,0,0,567,568,7,5,0,0,568,569,7,6,0, + 0,569,570,7,18,0,0,570,144,1,0,0,0,571,572,7,16,0,0,572,573,7,0,0,0,573, + 574,7,17,0,0,574,575,7,13,0,0,575,146,1,0,0,0,576,577,7,10,0,0,577,578, + 7,17,0,0,578,579,7,5,0,0,579,580,7,6,0,0,580,581,7,18,0,0,581,148,1,0, + 0,0,582,583,7,23,0,0,583,584,7,8,0,0,584,585,7,5,0,0,585,586,7,6,0,0, + 586,150,1,0,0,0,587,588,7,17,0,0,588,589,7,11,0,0,589,590,7,4,0,0,590, + 591,7,7,0,0,591,592,7,11,0,0,592,152,1,0,0,0,593,594,7,15,0,0,594,595, + 7,14,0,0,595,596,7,0,0,0,596,597,7,7,0,0,597,598,7,0,0,0,598,154,1,0, + 0,0,599,600,7,8,0,0,600,601,7,7,0,0,601,156,1,0,0,0,602,603,7,1,0,0,603, + 604,7,8,0,0,604,605,7,7,0,0,605,158,1,0,0,0,606,607,7,4,0,0,607,608,7, + 6,0,0,608,609,7,16,0,0,609,160,1,0,0,0,610,611,7,6,0,0,611,612,7,8,0, + 0,612,613,7,11,0,0,613,162,1,0,0,0,614,615,7,5,0,0,615,616,7,6,0,0,616, + 164,1,0,0,0,617,618,7,17,0,0,618,619,7,11,0,0,619,620,7,4,0,0,620,621, + 7,7,0,0,621,622,7,11,0,0,622,623,7,17,0,0,623,166,1,0,0,0,624,625,7,0, + 0,0,625,626,7,6,0,0,626,627,7,16,0,0,627,628,7,17,0,0,628,168,1,0,0,0, + 629,630,7,13,0,0,630,631,7,8,0,0,631,632,7,6,0,0,632,633,7,11,0,0,633, + 634,7,4,0,0,634,635,7,5,0,0,635,636,7,6,0,0,636,637,7,17,0,0,637,170, + 1,0,0,0,638,639,7,7,0,0,639,640,7,0,0,0,640,641,7,18,0,0,641,642,7,0, + 0,0,642,643,7,1,0,0,643,644,7,2,0,0,644,172,1,0,0,0,645,646,7,5,0,0,646, + 647,7,17,0,0,647,174,1,0,0,0,648,649,7,6,0,0,649,650,7,10,0,0,650,651, + 7,3,0,0,651,652,7,3,0,0,652,176,1,0,0,0,653,654,7,13,0,0,654,655,7,8, + 0,0,655,656,7,10,0,0,656,657,7,6,0,0,657,658,7,11,0,0,658,178,1,0,0,0, + 659,660,7,4,0,0,660,661,7,6,0,0,661,662,7,20,0,0,662,180,1,0,0,0,663, + 664,7,6,0,0,664,665,7,8,0,0,665,666,7,6,0,0,666,667,7,0,0,0,667,182,1, + 0,0,0,668,669,7,17,0,0,669,670,7,5,0,0,670,671,7,6,0,0,671,672,7,18,0, + 0,672,673,7,3,0,0,673,674,7,0,0,0,674,184,1,0,0,0,675,676,7,11,0,0,676, + 677,7,7,0,0,677,678,7,10,0,0,678,679,7,0,0,0,679,186,1,0,0,0,680,681, + 7,9,0,0,681,682,7,4,0,0,682,683,7,3,0,0,683,684,7,17,0,0,684,685,7,0, + 0,0,685,188,1,0,0,0,686,687,7,0,0,0,687,688,7,1,0,0,688,689,7,5,0,0,689, + 690,7,17,0,0,690,691,7,11,0,0,691,692,7,17,0,0,692,190,1,0,0,0,693,694, + 7,13,0,0,694,695,7,4,0,0,695,696,7,17,0,0,696,697,7,0,0,0,697,192,1,0, + 0,0,698,699,7,0,0,0,699,700,7,3,0,0,700,701,7,17,0,0,701,702,7,0,0,0, + 702,194,1,0,0,0,703,704,7,0,0,0,704,705,7,6,0,0,705,706,7,16,0,0,706, + 196,1,0,0,0,707,708,7,15,0,0,708,709,7,14,0,0,709,710,7,0,0,0,710,711, + 7,6,0,0,711,198,1,0,0,0,712,713,7,11,0,0,713,714,7,14,0,0,714,715,7,0, + 0,0,715,716,7,6,0,0,716,200,1,0,0,0,717,723,5,34,0,0,718,722,8,24,0,0, + 719,720,5,92,0,0,720,722,5,34,0,0,721,718,1,0,0,0,721,719,1,0,0,0,722, + 725,1,0,0,0,723,721,1,0,0,0,723,724,1,0,0,0,724,726,1,0,0,0,725,723,1, + 0,0,0,726,738,5,34,0,0,727,733,5,39,0,0,728,732,8,25,0,0,729,730,5,92, + 0,0,730,732,5,39,0,0,731,728,1,0,0,0,731,729,1,0,0,0,732,735,1,0,0,0, + 733,731,1,0,0,0,733,734,1,0,0,0,734,736,1,0,0,0,735,733,1,0,0,0,736,738, + 5,39,0,0,737,717,1,0,0,0,737,727,1,0,0,0,738,202,1,0,0,0,739,757,5,92, + 0,0,740,758,7,26,0,0,741,742,7,10,0,0,742,743,3,213,106,0,743,744,3,213, + 106,0,744,745,3,213,106,0,745,746,3,213,106,0,746,758,1,0,0,0,747,748, + 7,10,0,0,748,749,3,213,106,0,749,750,3,213,106,0,750,751,3,213,106,0, + 751,752,3,213,106,0,752,753,3,213,106,0,753,754,3,213,106,0,754,755,3, + 213,106,0,755,756,3,213,106,0,756,758,1,0,0,0,757,740,1,0,0,0,757,741, + 1,0,0,0,757,747,1,0,0,0,758,204,1,0,0,0,759,760,5,48,0,0,760,761,5,120, + 0,0,761,763,1,0,0,0,762,764,3,213,106,0,763,762,1,0,0,0,764,765,1,0,0, + 0,765,763,1,0,0,0,765,766,1,0,0,0,766,206,1,0,0,0,767,776,3,223,111,0, + 768,772,3,217,108,0,769,771,3,215,107,0,770,769,1,0,0,0,771,774,1,0,0, + 0,772,770,1,0,0,0,772,773,1,0,0,0,773,776,1,0,0,0,774,772,1,0,0,0,775, + 767,1,0,0,0,775,768,1,0,0,0,776,208,1,0,0,0,777,779,3,223,111,0,778,780, + 3,221,110,0,779,778,1,0,0,0,780,781,1,0,0,0,781,779,1,0,0,0,781,782,1, + 0,0,0,782,210,1,0,0,0,783,785,7,27,0,0,784,783,1,0,0,0,785,212,1,0,0, + 0,786,789,3,215,107,0,787,789,3,211,105,0,788,786,1,0,0,0,788,787,1,0, + 0,0,789,214,1,0,0,0,790,793,3,223,111,0,791,793,3,217,108,0,792,790,1, + 0,0,0,792,791,1,0,0,0,793,216,1,0,0,0,794,797,3,219,109,0,795,797,2,56, + 57,0,796,794,1,0,0,0,796,795,1,0,0,0,797,218,1,0,0,0,798,799,2,49,55, + 0,799,220,1,0,0,0,800,803,3,223,111,0,801,803,3,219,109,0,802,800,1,0, + 0,0,802,801,1,0,0,0,803,222,1,0,0,0,804,805,5,48,0,0,805,224,1,0,0,0, + 806,808,3,215,107,0,807,806,1,0,0,0,808,809,1,0,0,0,809,807,1,0,0,0,809, + 810,1,0,0,0,810,829,1,0,0,0,811,813,3,215,107,0,812,811,1,0,0,0,813,814, + 1,0,0,0,814,812,1,0,0,0,814,815,1,0,0,0,815,816,1,0,0,0,816,818,5,46, + 0,0,817,819,3,215,107,0,818,817,1,0,0,0,819,820,1,0,0,0,820,818,1,0,0, + 0,820,821,1,0,0,0,821,829,1,0,0,0,822,824,5,46,0,0,823,825,3,215,107, + 0,824,823,1,0,0,0,825,826,1,0,0,0,826,824,1,0,0,0,826,827,1,0,0,0,827, + 829,1,0,0,0,828,807,1,0,0,0,828,812,1,0,0,0,828,822,1,0,0,0,829,830,1, + 0,0,0,830,832,7,0,0,0,831,833,5,45,0,0,832,831,1,0,0,0,832,833,1,0,0, + 0,833,835,1,0,0,0,834,836,3,215,107,0,835,834,1,0,0,0,836,837,1,0,0,0, + 837,835,1,0,0,0,837,838,1,0,0,0,838,226,1,0,0,0,839,841,3,215,107,0,840, + 839,1,0,0,0,841,844,1,0,0,0,842,840,1,0,0,0,842,843,1,0,0,0,843,845,1, + 0,0,0,844,842,1,0,0,0,845,847,5,46,0,0,846,848,3,215,107,0,847,846,1, + 0,0,0,848,849,1,0,0,0,849,847,1,0,0,0,849,850,1,0,0,0,850,228,1,0,0,0, + 851,852,7,9,0,0,852,853,7,5,0,0,853,854,7,3,0,0,854,855,7,11,0,0,855, + 856,7,0,0,0,856,857,7,7,0,0,857,230,1,0,0,0,858,859,7,0,0,0,859,860,7, + 1,0,0,860,861,7,11,0,0,861,862,7,7,0,0,862,863,7,4,0,0,863,864,7,13,0, + 0,864,865,7,11,0,0,865,232,1,0,0,0,866,870,3,255,127,0,867,869,3,257, + 128,0,868,867,1,0,0,0,869,872,1,0,0,0,870,868,1,0,0,0,870,871,1,0,0,0, + 871,234,1,0,0,0,872,870,1,0,0,0,873,874,7,13,0,0,874,875,7,8,0,0,875, + 876,7,6,0,0,876,877,7,17,0,0,877,878,7,11,0,0,878,879,7,7,0,0,879,880, + 7,4,0,0,880,881,7,5,0,0,881,882,7,6,0,0,882,883,7,11,0,0,883,236,1,0, + 0,0,884,885,7,16,0,0,885,886,7,8,0,0,886,238,1,0,0,0,887,888,7,9,0,0, + 888,889,7,8,0,0,889,890,7,7,0,0,890,240,1,0,0,0,891,892,7,7,0,0,892,893, + 7,0,0,0,893,894,7,28,0,0,894,895,7,10,0,0,895,896,7,5,0,0,896,897,7,7, + 0,0,897,898,7,0,0,0,898,242,1,0,0,0,899,900,7,10,0,0,900,901,7,6,0,0, + 901,902,7,5,0,0,902,903,7,28,0,0,903,904,7,10,0,0,904,905,7,0,0,0,905, + 244,1,0,0,0,906,907,7,12,0,0,907,908,7,4,0,0,908,909,7,6,0,0,909,910, + 7,16,0,0,910,911,7,4,0,0,911,912,7,11,0,0,912,913,7,8,0,0,913,914,7,7, + 0,0,914,915,7,20,0,0,915,246,1,0,0,0,916,917,7,17,0,0,917,918,7,13,0, + 0,918,919,7,4,0,0,919,920,7,3,0,0,920,921,7,4,0,0,921,922,7,7,0,0,922, + 248,1,0,0,0,923,924,7,8,0,0,924,925,7,9,0,0,925,250,1,0,0,0,926,927,7, + 4,0,0,927,928,7,16,0,0,928,929,7,16,0,0,929,252,1,0,0,0,930,931,7,16, + 0,0,931,932,7,7,0,0,932,933,7,8,0,0,933,934,7,2,0,0,934,254,1,0,0,0,935, + 938,3,305,152,0,936,938,3,293,146,0,937,935,1,0,0,0,937,936,1,0,0,0,938, + 256,1,0,0,0,939,942,3,273,136,0,940,942,3,289,144,0,941,939,1,0,0,0,941, + 940,1,0,0,0,942,258,1,0,0,0,943,947,5,96,0,0,944,946,3,269,134,0,945, + 944,1,0,0,0,946,949,1,0,0,0,947,945,1,0,0,0,947,948,1,0,0,0,948,950,1, + 0,0,0,949,947,1,0,0,0,950,952,5,96,0,0,951,943,1,0,0,0,952,953,1,0,0, + 0,953,951,1,0,0,0,953,954,1,0,0,0,954,260,1,0,0,0,955,957,3,263,131,0, + 956,955,1,0,0,0,957,958,1,0,0,0,958,956,1,0,0,0,958,959,1,0,0,0,959,262, + 1,0,0,0,960,973,3,291,145,0,961,973,3,295,147,0,962,973,3,299,149,0,963, + 973,3,301,150,0,964,973,3,267,133,0,965,973,3,287,143,0,966,973,3,285, + 142,0,967,973,3,283,141,0,968,973,3,271,135,0,969,973,3,303,151,0,970, + 973,7,29,0,0,971,973,3,265,132,0,972,960,1,0,0,0,972,961,1,0,0,0,972, + 962,1,0,0,0,972,963,1,0,0,0,972,964,1,0,0,0,972,965,1,0,0,0,972,966,1, + 0,0,0,972,967,1,0,0,0,972,968,1,0,0,0,972,969,1,0,0,0,972,970,1,0,0,0, + 972,971,1,0,0,0,973,264,1,0,0,0,974,975,5,47,0,0,975,976,5,42,0,0,976, + 982,1,0,0,0,977,981,3,275,137,0,978,979,5,42,0,0,979,981,3,281,140,0, + 980,977,1,0,0,0,980,978,1,0,0,0,981,984,1,0,0,0,982,980,1,0,0,0,982,983, + 1,0,0,0,983,985,1,0,0,0,984,982,1,0,0,0,985,986,5,42,0,0,986,1004,5,47, + 0,0,987,988,5,47,0,0,988,989,5,47,0,0,989,993,1,0,0,0,990,992,3,279,139, + 0,991,990,1,0,0,0,992,995,1,0,0,0,993,991,1,0,0,0,993,994,1,0,0,0,994, + 997,1,0,0,0,995,993,1,0,0,0,996,998,3,287,143,0,997,996,1,0,0,0,997,998, + 1,0,0,0,998,1001,1,0,0,0,999,1002,3,299,149,0,1000,1002,5,0,0,1,1001, + 999,1,0,0,0,1001,1000,1,0,0,0,1002,1004,1,0,0,0,1003,974,1,0,0,0,1003, + 987,1,0,0,0,1004,266,1,0,0,0,1005,1006,7,30,0,0,1006,268,1,0,0,0,1007, + 1008,7,31,0,0,1008,270,1,0,0,0,1009,1010,7,32,0,0,1010,272,1,0,0,0,1011, + 1012,7,33,0,0,1012,274,1,0,0,0,1013,1014,7,34,0,0,1014,276,1,0,0,0,1015, + 1016,7,35,0,0,1016,278,1,0,0,0,1017,1018,7,36,0,0,1018,280,1,0,0,0,1019, + 1020,7,37,0,0,1020,282,1,0,0,0,1021,1022,7,38,0,0,1022,284,1,0,0,0,1023, + 1024,7,39,0,0,1024,286,1,0,0,0,1025,1026,7,40,0,0,1026,288,1,0,0,0,1027, + 1028,7,41,0,0,1028,290,1,0,0,0,1029,1030,7,42,0,0,1030,292,1,0,0,0,1031, + 1032,7,43,0,0,1032,294,1,0,0,0,1033,1034,7,44,0,0,1034,296,1,0,0,0,1035, + 1036,7,45,0,0,1036,298,1,0,0,0,1037,1038,7,46,0,0,1038,300,1,0,0,0,1039, + 1040,7,47,0,0,1040,302,1,0,0,0,1041,1042,7,48,0,0,1042,304,1,0,0,0,1043, + 1044,7,49,0,0,1044,306,1,0,0,0,38,0,721,723,731,733,737,757,765,772,775, + 781,784,788,792,796,802,809,814,820,826,828,832,837,842,849,870,937,941, + 947,953,958,972,980,982,993,997,1001,1003,0 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); @@ -658,9 +649,5 @@ const atn::ATN& LcypherLexer::getATN() const { void LcypherLexer::initialize() { -#if ANTLR4_USE_THREAD_LOCAL_CACHE - lcypherlexerLexerInitialize(); -#else ::antlr4::internal::call_once(lcypherlexerLexerOnceFlag, lcypherlexerLexerInitialize); -#endif } diff --git a/src/cypher/parser/generated/LcypherLexer.h b/src/cypher/parser/generated/LcypherLexer.h index 52d3b9d770..88d99f096c 100644 --- a/src/cypher/parser/generated/LcypherLexer.h +++ b/src/cypher/parser/generated/LcypherLexer.h @@ -1,5 +1,5 @@ -// Generated from src/cypher/grammar/Lcypher.g4 by ANTLR 4.13.0 +// Generated from src/cypher/grammar/Lcypher.g4 by ANTLR 4.12.0 #pragma once diff --git a/src/cypher/parser/generated/LcypherLexer.interp b/src/cypher/parser/generated/LcypherLexer.interp index 85d5663ad9..e4a22d6e1f 100644 --- a/src/cypher/parser/generated/LcypherLexer.interp +++ b/src/cypher/parser/generated/LcypherLexer.interp @@ -433,4 +433,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 133, 1043, 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, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 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, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 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, 84, 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, 85, 1, 86, 1, 86, 1, 86, 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, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 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, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 5, 100, 721, 8, 100, 10, 100, 12, 100, 724, 9, 100, 1, 100, 1, 100, 1, 100, 1, 100, 5, 100, 730, 8, 100, 10, 100, 12, 100, 733, 9, 100, 1, 100, 3, 100, 736, 8, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 3, 101, 756, 8, 101, 1, 102, 1, 102, 1, 102, 1, 102, 4, 102, 762, 8, 102, 11, 102, 12, 102, 763, 1, 103, 1, 103, 1, 103, 5, 103, 769, 8, 103, 10, 103, 12, 103, 772, 9, 103, 3, 103, 774, 8, 103, 1, 104, 1, 104, 4, 104, 778, 8, 104, 11, 104, 12, 104, 779, 1, 105, 3, 105, 783, 8, 105, 1, 106, 1, 106, 3, 106, 787, 8, 106, 1, 107, 1, 107, 3, 107, 791, 8, 107, 1, 108, 1, 108, 3, 108, 795, 8, 108, 1, 109, 1, 109, 1, 110, 1, 110, 3, 110, 801, 8, 110, 1, 111, 1, 111, 1, 112, 4, 112, 806, 8, 112, 11, 112, 12, 112, 807, 1, 112, 4, 112, 811, 8, 112, 11, 112, 12, 112, 812, 1, 112, 1, 112, 4, 112, 817, 8, 112, 11, 112, 12, 112, 818, 1, 112, 1, 112, 4, 112, 823, 8, 112, 11, 112, 12, 112, 824, 3, 112, 827, 8, 112, 1, 112, 1, 112, 3, 112, 831, 8, 112, 1, 112, 4, 112, 834, 8, 112, 11, 112, 12, 112, 835, 1, 113, 5, 113, 839, 8, 113, 10, 113, 12, 113, 842, 9, 113, 1, 113, 1, 113, 4, 113, 846, 8, 113, 11, 113, 12, 113, 847, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 5, 116, 867, 8, 116, 10, 116, 12, 116, 870, 9, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 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, 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, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 3, 127, 936, 8, 127, 1, 128, 1, 128, 3, 128, 940, 8, 128, 1, 129, 1, 129, 5, 129, 944, 8, 129, 10, 129, 12, 129, 947, 9, 129, 1, 129, 4, 129, 950, 8, 129, 11, 129, 12, 129, 951, 1, 130, 4, 130, 955, 8, 130, 11, 130, 12, 130, 956, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 971, 8, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 979, 8, 132, 10, 132, 12, 132, 982, 9, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 990, 8, 132, 10, 132, 12, 132, 993, 9, 132, 1, 132, 3, 132, 996, 8, 132, 1, 132, 1, 132, 3, 132, 1000, 8, 132, 3, 132, 1002, 8, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 138, 1, 138, 1, 139, 1, 139, 1, 140, 1, 140, 1, 141, 1, 141, 1, 142, 1, 142, 1, 143, 1, 143, 1, 144, 1, 144, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, 1, 149, 1, 150, 1, 150, 1, 151, 1, 151, 1, 152, 1, 152, 0, 0, 153, 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, 0, 269, 0, 271, 0, 273, 0, 275, 0, 277, 0, 279, 0, 281, 0, 283, 0, 285, 0, 287, 0, 289, 0, 291, 0, 293, 0, 295, 0, 297, 0, 299, 0, 301, 0, 303, 0, 305, 0, 1, 0, 48, 2, 0, 69, 69, 101, 101, 2, 0, 88, 88, 120, 120, 2, 0, 80, 80, 112, 112, 2, 0, 76, 76, 108, 108, 2, 0, 65, 65, 97, 97, 2, 0, 73, 73, 105, 105, 2, 0, 78, 78, 110, 110, 2, 0, 82, 82, 114, 114, 2, 0, 79, 79, 111, 111, 2, 0, 70, 70, 102, 102, 2, 0, 85, 85, 117, 117, 2, 0, 84, 84, 116, 116, 2, 0, 77, 77, 109, 109, 2, 0, 67, 67, 99, 99, 2, 0, 72, 72, 104, 104, 2, 0, 87, 87, 119, 119, 2, 0, 68, 68, 100, 100, 2, 0, 83, 83, 115, 115, 2, 0, 71, 71, 103, 103, 2, 0, 86, 86, 118, 118, 2, 0, 89, 89, 121, 121, 2, 0, 66, 66, 98, 98, 2, 0, 75, 75, 107, 107, 2, 0, 74, 74, 106, 106, 13, 0, 34, 34, 39, 39, 66, 66, 70, 70, 78, 78, 82, 82, 84, 84, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 116, 2, 0, 65, 70, 97, 102, 2, 0, 81, 81, 113, 113, 8, 0, 160, 160, 5760, 5760, 6158, 6158, 8192, 8202, 8232, 8233, 8239, 8239, 8287, 8287, 12288, 12288, 1, 0, 12, 12, 2, 0, 0, 95, 97, 65535, 1, 0, 30, 30, 429, 0, 48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 2, 0, 0, 41, 43, 65535, 3, 0, 0, 38, 40, 91, 93, 65535, 3, 0, 0, 9, 11, 12, 14, 65535, 2, 0, 0, 46, 48, 65535, 1, 0, 29, 29, 1, 0, 28, 28, 1, 0, 13, 13, 17, 0, 36, 36, 162, 165, 1423, 1423, 1547, 1547, 2546, 2547, 2555, 2555, 2801, 2801, 3065, 3065, 3647, 3647, 6107, 6107, 8352, 8378, 43064, 43064, 65020, 65020, 65129, 65129, 65284, 65284, 65504, 65505, 65509, 65510, 1, 0, 32, 32, 6, 0, 95, 95, 8255, 8256, 8276, 8276, 65075, 65076, 65101, 65103, 65343, 65343, 1, 0, 9, 9, 3, 0, 0, 33, 35, 91, 93, 65535, 1, 0, 10, 10, 1, 0, 11, 11, 1, 0, 31, 31, 370, 0, 65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 1070, 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, 1, 307, 1, 0, 0, 0, 3, 309, 1, 0, 0, 0, 5, 311, 1, 0, 0, 0, 7, 313, 1, 0, 0, 0, 9, 316, 1, 0, 0, 0, 11, 318, 1, 0, 0, 0, 13, 320, 1, 0, 0, 0, 15, 322, 1, 0, 0, 0, 17, 324, 1, 0, 0, 0, 19, 326, 1, 0, 0, 0, 21, 328, 1, 0, 0, 0, 23, 330, 1, 0, 0, 0, 25, 333, 1, 0, 0, 0, 27, 335, 1, 0, 0, 0, 29, 337, 1, 0, 0, 0, 31, 339, 1, 0, 0, 0, 33, 341, 1, 0, 0, 0, 35, 343, 1, 0, 0, 0, 37, 346, 1, 0, 0, 0, 39, 348, 1, 0, 0, 0, 41, 350, 1, 0, 0, 0, 43, 353, 1, 0, 0, 0, 45, 356, 1, 0, 0, 0, 47, 358, 1, 0, 0, 0, 49, 360, 1, 0, 0, 0, 51, 362, 1, 0, 0, 0, 53, 364, 1, 0, 0, 0, 55, 366, 1, 0, 0, 0, 57, 368, 1, 0, 0, 0, 59, 370, 1, 0, 0, 0, 61, 372, 1, 0, 0, 0, 63, 374, 1, 0, 0, 0, 65, 376, 1, 0, 0, 0, 67, 378, 1, 0, 0, 0, 69, 380, 1, 0, 0, 0, 71, 382, 1, 0, 0, 0, 73, 384, 1, 0, 0, 0, 75, 386, 1, 0, 0, 0, 77, 388, 1, 0, 0, 0, 79, 390, 1, 0, 0, 0, 81, 392, 1, 0, 0, 0, 83, 394, 1, 0, 0, 0, 85, 396, 1, 0, 0, 0, 87, 398, 1, 0, 0, 0, 89, 400, 1, 0, 0, 0, 91, 402, 1, 0, 0, 0, 93, 410, 1, 0, 0, 0, 95, 418, 1, 0, 0, 0, 97, 424, 1, 0, 0, 0, 99, 428, 1, 0, 0, 0, 101, 437, 1, 0, 0, 0, 103, 443, 1, 0, 0, 0, 105, 450, 1, 0, 0, 0, 107, 453, 1, 0, 0, 0, 109, 459, 1, 0, 0, 0, 111, 462, 1, 0, 0, 0, 113, 469, 1, 0, 0, 0, 115, 473, 1, 0, 0, 0, 117, 480, 1, 0, 0, 0, 119, 487, 1, 0, 0, 0, 121, 494, 1, 0, 0, 0, 123, 499, 1, 0, 0, 0, 125, 505, 1, 0, 0, 0, 127, 510, 1, 0, 0, 0, 129, 519, 1, 0, 0, 0, 131, 526, 1, 0, 0, 0, 133, 532, 1, 0, 0, 0, 135, 535, 1, 0, 0, 0, 137, 540, 1, 0, 0, 0, 139, 546, 1, 0, 0, 0, 141, 556, 1, 0, 0, 0, 143, 560, 1, 0, 0, 0, 145, 571, 1, 0, 0, 0, 147, 576, 1, 0, 0, 0, 149, 582, 1, 0, 0, 0, 151, 587, 1, 0, 0, 0, 153, 593, 1, 0, 0, 0, 155, 599, 1, 0, 0, 0, 157, 602, 1, 0, 0, 0, 159, 606, 1, 0, 0, 0, 161, 610, 1, 0, 0, 0, 163, 614, 1, 0, 0, 0, 165, 617, 1, 0, 0, 0, 167, 624, 1, 0, 0, 0, 169, 629, 1, 0, 0, 0, 171, 638, 1, 0, 0, 0, 173, 645, 1, 0, 0, 0, 175, 648, 1, 0, 0, 0, 177, 653, 1, 0, 0, 0, 179, 659, 1, 0, 0, 0, 181, 663, 1, 0, 0, 0, 183, 668, 1, 0, 0, 0, 185, 675, 1, 0, 0, 0, 187, 680, 1, 0, 0, 0, 189, 686, 1, 0, 0, 0, 191, 693, 1, 0, 0, 0, 193, 698, 1, 0, 0, 0, 195, 703, 1, 0, 0, 0, 197, 707, 1, 0, 0, 0, 199, 712, 1, 0, 0, 0, 201, 735, 1, 0, 0, 0, 203, 737, 1, 0, 0, 0, 205, 757, 1, 0, 0, 0, 207, 773, 1, 0, 0, 0, 209, 775, 1, 0, 0, 0, 211, 782, 1, 0, 0, 0, 213, 786, 1, 0, 0, 0, 215, 790, 1, 0, 0, 0, 217, 794, 1, 0, 0, 0, 219, 796, 1, 0, 0, 0, 221, 800, 1, 0, 0, 0, 223, 802, 1, 0, 0, 0, 225, 826, 1, 0, 0, 0, 227, 840, 1, 0, 0, 0, 229, 849, 1, 0, 0, 0, 231, 856, 1, 0, 0, 0, 233, 864, 1, 0, 0, 0, 235, 871, 1, 0, 0, 0, 237, 882, 1, 0, 0, 0, 239, 885, 1, 0, 0, 0, 241, 889, 1, 0, 0, 0, 243, 897, 1, 0, 0, 0, 245, 904, 1, 0, 0, 0, 247, 914, 1, 0, 0, 0, 249, 921, 1, 0, 0, 0, 251, 924, 1, 0, 0, 0, 253, 928, 1, 0, 0, 0, 255, 935, 1, 0, 0, 0, 257, 939, 1, 0, 0, 0, 259, 949, 1, 0, 0, 0, 261, 954, 1, 0, 0, 0, 263, 970, 1, 0, 0, 0, 265, 1001, 1, 0, 0, 0, 267, 1003, 1, 0, 0, 0, 269, 1005, 1, 0, 0, 0, 271, 1007, 1, 0, 0, 0, 273, 1009, 1, 0, 0, 0, 275, 1011, 1, 0, 0, 0, 277, 1013, 1, 0, 0, 0, 279, 1015, 1, 0, 0, 0, 281, 1017, 1, 0, 0, 0, 283, 1019, 1, 0, 0, 0, 285, 1021, 1, 0, 0, 0, 287, 1023, 1, 0, 0, 0, 289, 1025, 1, 0, 0, 0, 291, 1027, 1, 0, 0, 0, 293, 1029, 1, 0, 0, 0, 295, 1031, 1, 0, 0, 0, 297, 1033, 1, 0, 0, 0, 299, 1035, 1, 0, 0, 0, 301, 1037, 1, 0, 0, 0, 303, 1039, 1, 0, 0, 0, 305, 1041, 1, 0, 0, 0, 307, 308, 5, 59, 0, 0, 308, 2, 1, 0, 0, 0, 309, 310, 5, 44, 0, 0, 310, 4, 1, 0, 0, 0, 311, 312, 5, 61, 0, 0, 312, 6, 1, 0, 0, 0, 313, 314, 5, 43, 0, 0, 314, 315, 5, 61, 0, 0, 315, 8, 1, 0, 0, 0, 316, 317, 5, 42, 0, 0, 317, 10, 1, 0, 0, 0, 318, 319, 5, 40, 0, 0, 319, 12, 1, 0, 0, 0, 320, 321, 5, 41, 0, 0, 321, 14, 1, 0, 0, 0, 322, 323, 5, 91, 0, 0, 323, 16, 1, 0, 0, 0, 324, 325, 5, 93, 0, 0, 325, 18, 1, 0, 0, 0, 326, 327, 5, 58, 0, 0, 327, 20, 1, 0, 0, 0, 328, 329, 5, 124, 0, 0, 329, 22, 1, 0, 0, 0, 330, 331, 5, 46, 0, 0, 331, 332, 5, 46, 0, 0, 332, 24, 1, 0, 0, 0, 333, 334, 5, 43, 0, 0, 334, 26, 1, 0, 0, 0, 335, 336, 5, 45, 0, 0, 336, 28, 1, 0, 0, 0, 337, 338, 5, 47, 0, 0, 338, 30, 1, 0, 0, 0, 339, 340, 5, 37, 0, 0, 340, 32, 1, 0, 0, 0, 341, 342, 5, 94, 0, 0, 342, 34, 1, 0, 0, 0, 343, 344, 5, 60, 0, 0, 344, 345, 5, 62, 0, 0, 345, 36, 1, 0, 0, 0, 346, 347, 5, 60, 0, 0, 347, 38, 1, 0, 0, 0, 348, 349, 5, 62, 0, 0, 349, 40, 1, 0, 0, 0, 350, 351, 5, 60, 0, 0, 351, 352, 5, 61, 0, 0, 352, 42, 1, 0, 0, 0, 353, 354, 5, 62, 0, 0, 354, 355, 5, 61, 0, 0, 355, 44, 1, 0, 0, 0, 356, 357, 5, 46, 0, 0, 357, 46, 1, 0, 0, 0, 358, 359, 5, 123, 0, 0, 359, 48, 1, 0, 0, 0, 360, 361, 5, 125, 0, 0, 361, 50, 1, 0, 0, 0, 362, 363, 5, 36, 0, 0, 363, 52, 1, 0, 0, 0, 364, 365, 5, 10216, 0, 0, 365, 54, 1, 0, 0, 0, 366, 367, 5, 12296, 0, 0, 367, 56, 1, 0, 0, 0, 368, 369, 5, 65124, 0, 0, 369, 58, 1, 0, 0, 0, 370, 371, 5, 65308, 0, 0, 371, 60, 1, 0, 0, 0, 372, 373, 5, 10217, 0, 0, 373, 62, 1, 0, 0, 0, 374, 375, 5, 12297, 0, 0, 375, 64, 1, 0, 0, 0, 376, 377, 5, 65125, 0, 0, 377, 66, 1, 0, 0, 0, 378, 379, 5, 65310, 0, 0, 379, 68, 1, 0, 0, 0, 380, 381, 5, 173, 0, 0, 381, 70, 1, 0, 0, 0, 382, 383, 5, 8208, 0, 0, 383, 72, 1, 0, 0, 0, 384, 385, 5, 8209, 0, 0, 385, 74, 1, 0, 0, 0, 386, 387, 5, 8210, 0, 0, 387, 76, 1, 0, 0, 0, 388, 389, 5, 8211, 0, 0, 389, 78, 1, 0, 0, 0, 390, 391, 5, 8212, 0, 0, 391, 80, 1, 0, 0, 0, 392, 393, 5, 8213, 0, 0, 393, 82, 1, 0, 0, 0, 394, 395, 5, 8722, 0, 0, 395, 84, 1, 0, 0, 0, 396, 397, 5, 65112, 0, 0, 397, 86, 1, 0, 0, 0, 398, 399, 5, 65123, 0, 0, 399, 88, 1, 0, 0, 0, 400, 401, 5, 65293, 0, 0, 401, 90, 1, 0, 0, 0, 402, 403, 7, 0, 0, 0, 403, 404, 7, 1, 0, 0, 404, 405, 7, 2, 0, 0, 405, 406, 7, 3, 0, 0, 406, 407, 7, 4, 0, 0, 407, 408, 7, 5, 0, 0, 408, 409, 7, 6, 0, 0, 409, 92, 1, 0, 0, 0, 410, 411, 7, 2, 0, 0, 411, 412, 7, 7, 0, 0, 412, 413, 7, 8, 0, 0, 413, 414, 7, 9, 0, 0, 414, 415, 7, 5, 0, 0, 415, 416, 7, 3, 0, 0, 416, 417, 7, 0, 0, 0, 417, 94, 1, 0, 0, 0, 418, 419, 7, 10, 0, 0, 419, 420, 7, 6, 0, 0, 420, 421, 7, 5, 0, 0, 421, 422, 7, 8, 0, 0, 422, 423, 7, 6, 0, 0, 423, 96, 1, 0, 0, 0, 424, 425, 7, 4, 0, 0, 425, 426, 7, 3, 0, 0, 426, 427, 7, 3, 0, 0, 427, 98, 1, 0, 0, 0, 428, 429, 7, 8, 0, 0, 429, 430, 7, 2, 0, 0, 430, 431, 7, 11, 0, 0, 431, 432, 7, 5, 0, 0, 432, 433, 7, 8, 0, 0, 433, 434, 7, 6, 0, 0, 434, 435, 7, 4, 0, 0, 435, 436, 7, 3, 0, 0, 436, 100, 1, 0, 0, 0, 437, 438, 7, 12, 0, 0, 438, 439, 7, 4, 0, 0, 439, 440, 7, 11, 0, 0, 440, 441, 7, 13, 0, 0, 441, 442, 7, 14, 0, 0, 442, 102, 1, 0, 0, 0, 443, 444, 7, 10, 0, 0, 444, 445, 7, 6, 0, 0, 445, 446, 7, 15, 0, 0, 446, 447, 7, 5, 0, 0, 447, 448, 7, 6, 0, 0, 448, 449, 7, 16, 0, 0, 449, 104, 1, 0, 0, 0, 450, 451, 7, 4, 0, 0, 451, 452, 7, 17, 0, 0, 452, 106, 1, 0, 0, 0, 453, 454, 7, 12, 0, 0, 454, 455, 7, 0, 0, 0, 455, 456, 7, 7, 0, 0, 456, 457, 7, 18, 0, 0, 457, 458, 7, 0, 0, 0, 458, 108, 1, 0, 0, 0, 459, 460, 7, 8, 0, 0, 460, 461, 7, 6, 0, 0, 461, 110, 1, 0, 0, 0, 462, 463, 7, 13, 0, 0, 463, 464, 7, 7, 0, 0, 464, 465, 7, 0, 0, 0, 465, 466, 7, 4, 0, 0, 466, 467, 7, 11, 0, 0, 467, 468, 7, 0, 0, 0, 468, 112, 1, 0, 0, 0, 469, 470, 7, 17, 0, 0, 470, 471, 7, 0, 0, 0, 471, 472, 7, 11, 0, 0, 472, 114, 1, 0, 0, 0, 473, 474, 7, 16, 0, 0, 474, 475, 7, 0, 0, 0, 475, 476, 7, 11, 0, 0, 476, 477, 7, 4, 0, 0, 477, 478, 7, 13, 0, 0, 478, 479, 7, 14, 0, 0, 479, 116, 1, 0, 0, 0, 480, 481, 7, 16, 0, 0, 481, 482, 7, 0, 0, 0, 482, 483, 7, 3, 0, 0, 483, 484, 7, 0, 0, 0, 484, 485, 7, 11, 0, 0, 485, 486, 7, 0, 0, 0, 486, 118, 1, 0, 0, 0, 487, 488, 7, 7, 0, 0, 488, 489, 7, 0, 0, 0, 489, 490, 7, 12, 0, 0, 490, 491, 7, 8, 0, 0, 491, 492, 7, 19, 0, 0, 492, 493, 7, 0, 0, 0, 493, 120, 1, 0, 0, 0, 494, 495, 7, 13, 0, 0, 495, 496, 7, 4, 0, 0, 496, 497, 7, 3, 0, 0, 497, 498, 7, 3, 0, 0, 498, 122, 1, 0, 0, 0, 499, 500, 7, 20, 0, 0, 500, 501, 7, 5, 0, 0, 501, 502, 7, 0, 0, 0, 502, 503, 7, 3, 0, 0, 503, 504, 7, 16, 0, 0, 504, 124, 1, 0, 0, 0, 505, 506, 7, 15, 0, 0, 506, 507, 7, 5, 0, 0, 507, 508, 7, 11, 0, 0, 508, 509, 7, 14, 0, 0, 509, 126, 1, 0, 0, 0, 510, 511, 7, 16, 0, 0, 511, 512, 7, 5, 0, 0, 512, 513, 7, 17, 0, 0, 513, 514, 7, 11, 0, 0, 514, 515, 7, 5, 0, 0, 515, 516, 7, 6, 0, 0, 516, 517, 7, 13, 0, 0, 517, 518, 7, 11, 0, 0, 518, 128, 1, 0, 0, 0, 519, 520, 7, 7, 0, 0, 520, 521, 7, 0, 0, 0, 521, 522, 7, 11, 0, 0, 522, 523, 7, 10, 0, 0, 523, 524, 7, 7, 0, 0, 524, 525, 7, 6, 0, 0, 525, 130, 1, 0, 0, 0, 526, 527, 7, 8, 0, 0, 527, 528, 7, 7, 0, 0, 528, 529, 7, 16, 0, 0, 529, 530, 7, 0, 0, 0, 530, 531, 7, 7, 0, 0, 531, 132, 1, 0, 0, 0, 532, 533, 7, 21, 0, 0, 533, 534, 7, 20, 0, 0, 534, 134, 1, 0, 0, 0, 535, 536, 7, 17, 0, 0, 536, 537, 7, 22, 0, 0, 537, 538, 7, 5, 0, 0, 538, 539, 7, 2, 0, 0, 539, 136, 1, 0, 0, 0, 540, 541, 7, 3, 0, 0, 541, 542, 7, 5, 0, 0, 542, 543, 7, 12, 0, 0, 543, 544, 7, 5, 0, 0, 544, 545, 7, 11, 0, 0, 545, 138, 1, 0, 0, 0, 546, 547, 7, 4, 0, 0, 547, 548, 7, 17, 0, 0, 548, 549, 7, 13, 0, 0, 549, 550, 7, 0, 0, 0, 550, 551, 7, 6, 0, 0, 551, 552, 7, 16, 0, 0, 552, 553, 7, 5, 0, 0, 553, 554, 7, 6, 0, 0, 554, 555, 7, 18, 0, 0, 555, 140, 1, 0, 0, 0, 556, 557, 7, 4, 0, 0, 557, 558, 7, 17, 0, 0, 558, 559, 7, 13, 0, 0, 559, 142, 1, 0, 0, 0, 560, 561, 7, 16, 0, 0, 561, 562, 7, 0, 0, 0, 562, 563, 7, 17, 0, 0, 563, 564, 7, 13, 0, 0, 564, 565, 7, 0, 0, 0, 565, 566, 7, 6, 0, 0, 566, 567, 7, 16, 0, 0, 567, 568, 7, 5, 0, 0, 568, 569, 7, 6, 0, 0, 569, 570, 7, 18, 0, 0, 570, 144, 1, 0, 0, 0, 571, 572, 7, 16, 0, 0, 572, 573, 7, 0, 0, 0, 573, 574, 7, 17, 0, 0, 574, 575, 7, 13, 0, 0, 575, 146, 1, 0, 0, 0, 576, 577, 7, 10, 0, 0, 577, 578, 7, 17, 0, 0, 578, 579, 7, 5, 0, 0, 579, 580, 7, 6, 0, 0, 580, 581, 7, 18, 0, 0, 581, 148, 1, 0, 0, 0, 582, 583, 7, 23, 0, 0, 583, 584, 7, 8, 0, 0, 584, 585, 7, 5, 0, 0, 585, 586, 7, 6, 0, 0, 586, 150, 1, 0, 0, 0, 587, 588, 7, 17, 0, 0, 588, 589, 7, 11, 0, 0, 589, 590, 7, 4, 0, 0, 590, 591, 7, 7, 0, 0, 591, 592, 7, 11, 0, 0, 592, 152, 1, 0, 0, 0, 593, 594, 7, 15, 0, 0, 594, 595, 7, 14, 0, 0, 595, 596, 7, 0, 0, 0, 596, 597, 7, 7, 0, 0, 597, 598, 7, 0, 0, 0, 598, 154, 1, 0, 0, 0, 599, 600, 7, 8, 0, 0, 600, 601, 7, 7, 0, 0, 601, 156, 1, 0, 0, 0, 602, 603, 7, 1, 0, 0, 603, 604, 7, 8, 0, 0, 604, 605, 7, 7, 0, 0, 605, 158, 1, 0, 0, 0, 606, 607, 7, 4, 0, 0, 607, 608, 7, 6, 0, 0, 608, 609, 7, 16, 0, 0, 609, 160, 1, 0, 0, 0, 610, 611, 7, 6, 0, 0, 611, 612, 7, 8, 0, 0, 612, 613, 7, 11, 0, 0, 613, 162, 1, 0, 0, 0, 614, 615, 7, 5, 0, 0, 615, 616, 7, 6, 0, 0, 616, 164, 1, 0, 0, 0, 617, 618, 7, 17, 0, 0, 618, 619, 7, 11, 0, 0, 619, 620, 7, 4, 0, 0, 620, 621, 7, 7, 0, 0, 621, 622, 7, 11, 0, 0, 622, 623, 7, 17, 0, 0, 623, 166, 1, 0, 0, 0, 624, 625, 7, 0, 0, 0, 625, 626, 7, 6, 0, 0, 626, 627, 7, 16, 0, 0, 627, 628, 7, 17, 0, 0, 628, 168, 1, 0, 0, 0, 629, 630, 7, 13, 0, 0, 630, 631, 7, 8, 0, 0, 631, 632, 7, 6, 0, 0, 632, 633, 7, 11, 0, 0, 633, 634, 7, 4, 0, 0, 634, 635, 7, 5, 0, 0, 635, 636, 7, 6, 0, 0, 636, 637, 7, 17, 0, 0, 637, 170, 1, 0, 0, 0, 638, 639, 7, 7, 0, 0, 639, 640, 7, 0, 0, 0, 640, 641, 7, 18, 0, 0, 641, 642, 7, 0, 0, 0, 642, 643, 7, 1, 0, 0, 643, 644, 7, 2, 0, 0, 644, 172, 1, 0, 0, 0, 645, 646, 7, 5, 0, 0, 646, 647, 7, 17, 0, 0, 647, 174, 1, 0, 0, 0, 648, 649, 7, 6, 0, 0, 649, 650, 7, 10, 0, 0, 650, 651, 7, 3, 0, 0, 651, 652, 7, 3, 0, 0, 652, 176, 1, 0, 0, 0, 653, 654, 7, 13, 0, 0, 654, 655, 7, 8, 0, 0, 655, 656, 7, 10, 0, 0, 656, 657, 7, 6, 0, 0, 657, 658, 7, 11, 0, 0, 658, 178, 1, 0, 0, 0, 659, 660, 7, 4, 0, 0, 660, 661, 7, 6, 0, 0, 661, 662, 7, 20, 0, 0, 662, 180, 1, 0, 0, 0, 663, 664, 7, 6, 0, 0, 664, 665, 7, 8, 0, 0, 665, 666, 7, 6, 0, 0, 666, 667, 7, 0, 0, 0, 667, 182, 1, 0, 0, 0, 668, 669, 7, 17, 0, 0, 669, 670, 7, 5, 0, 0, 670, 671, 7, 6, 0, 0, 671, 672, 7, 18, 0, 0, 672, 673, 7, 3, 0, 0, 673, 674, 7, 0, 0, 0, 674, 184, 1, 0, 0, 0, 675, 676, 7, 11, 0, 0, 676, 677, 7, 7, 0, 0, 677, 678, 7, 10, 0, 0, 678, 679, 7, 0, 0, 0, 679, 186, 1, 0, 0, 0, 680, 681, 7, 9, 0, 0, 681, 682, 7, 4, 0, 0, 682, 683, 7, 3, 0, 0, 683, 684, 7, 17, 0, 0, 684, 685, 7, 0, 0, 0, 685, 188, 1, 0, 0, 0, 686, 687, 7, 0, 0, 0, 687, 688, 7, 1, 0, 0, 688, 689, 7, 5, 0, 0, 689, 690, 7, 17, 0, 0, 690, 691, 7, 11, 0, 0, 691, 692, 7, 17, 0, 0, 692, 190, 1, 0, 0, 0, 693, 694, 7, 13, 0, 0, 694, 695, 7, 4, 0, 0, 695, 696, 7, 17, 0, 0, 696, 697, 7, 0, 0, 0, 697, 192, 1, 0, 0, 0, 698, 699, 7, 0, 0, 0, 699, 700, 7, 3, 0, 0, 700, 701, 7, 17, 0, 0, 701, 702, 7, 0, 0, 0, 702, 194, 1, 0, 0, 0, 703, 704, 7, 0, 0, 0, 704, 705, 7, 6, 0, 0, 705, 706, 7, 16, 0, 0, 706, 196, 1, 0, 0, 0, 707, 708, 7, 15, 0, 0, 708, 709, 7, 14, 0, 0, 709, 710, 7, 0, 0, 0, 710, 711, 7, 6, 0, 0, 711, 198, 1, 0, 0, 0, 712, 713, 7, 11, 0, 0, 713, 714, 7, 14, 0, 0, 714, 715, 7, 0, 0, 0, 715, 716, 7, 6, 0, 0, 716, 200, 1, 0, 0, 0, 717, 722, 5, 34, 0, 0, 718, 721, 3, 297, 148, 0, 719, 721, 3, 203, 101, 0, 720, 718, 1, 0, 0, 0, 720, 719, 1, 0, 0, 0, 721, 724, 1, 0, 0, 0, 722, 720, 1, 0, 0, 0, 722, 723, 1, 0, 0, 0, 723, 725, 1, 0, 0, 0, 724, 722, 1, 0, 0, 0, 725, 736, 5, 34, 0, 0, 726, 731, 5, 39, 0, 0, 727, 730, 3, 277, 138, 0, 728, 730, 3, 203, 101, 0, 729, 727, 1, 0, 0, 0, 729, 728, 1, 0, 0, 0, 730, 733, 1, 0, 0, 0, 731, 729, 1, 0, 0, 0, 731, 732, 1, 0, 0, 0, 732, 734, 1, 0, 0, 0, 733, 731, 1, 0, 0, 0, 734, 736, 5, 39, 0, 0, 735, 717, 1, 0, 0, 0, 735, 726, 1, 0, 0, 0, 736, 202, 1, 0, 0, 0, 737, 755, 5, 92, 0, 0, 738, 756, 7, 24, 0, 0, 739, 740, 7, 10, 0, 0, 740, 741, 3, 213, 106, 0, 741, 742, 3, 213, 106, 0, 742, 743, 3, 213, 106, 0, 743, 744, 3, 213, 106, 0, 744, 756, 1, 0, 0, 0, 745, 746, 7, 10, 0, 0, 746, 747, 3, 213, 106, 0, 747, 748, 3, 213, 106, 0, 748, 749, 3, 213, 106, 0, 749, 750, 3, 213, 106, 0, 750, 751, 3, 213, 106, 0, 751, 752, 3, 213, 106, 0, 752, 753, 3, 213, 106, 0, 753, 754, 3, 213, 106, 0, 754, 756, 1, 0, 0, 0, 755, 738, 1, 0, 0, 0, 755, 739, 1, 0, 0, 0, 755, 745, 1, 0, 0, 0, 756, 204, 1, 0, 0, 0, 757, 758, 5, 48, 0, 0, 758, 759, 5, 120, 0, 0, 759, 761, 1, 0, 0, 0, 760, 762, 3, 213, 106, 0, 761, 760, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 761, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 206, 1, 0, 0, 0, 765, 774, 3, 223, 111, 0, 766, 770, 3, 217, 108, 0, 767, 769, 3, 215, 107, 0, 768, 767, 1, 0, 0, 0, 769, 772, 1, 0, 0, 0, 770, 768, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 774, 1, 0, 0, 0, 772, 770, 1, 0, 0, 0, 773, 765, 1, 0, 0, 0, 773, 766, 1, 0, 0, 0, 774, 208, 1, 0, 0, 0, 775, 777, 3, 223, 111, 0, 776, 778, 3, 221, 110, 0, 777, 776, 1, 0, 0, 0, 778, 779, 1, 0, 0, 0, 779, 777, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 210, 1, 0, 0, 0, 781, 783, 7, 25, 0, 0, 782, 781, 1, 0, 0, 0, 783, 212, 1, 0, 0, 0, 784, 787, 3, 215, 107, 0, 785, 787, 3, 211, 105, 0, 786, 784, 1, 0, 0, 0, 786, 785, 1, 0, 0, 0, 787, 214, 1, 0, 0, 0, 788, 791, 3, 223, 111, 0, 789, 791, 3, 217, 108, 0, 790, 788, 1, 0, 0, 0, 790, 789, 1, 0, 0, 0, 791, 216, 1, 0, 0, 0, 792, 795, 3, 219, 109, 0, 793, 795, 2, 56, 57, 0, 794, 792, 1, 0, 0, 0, 794, 793, 1, 0, 0, 0, 795, 218, 1, 0, 0, 0, 796, 797, 2, 49, 55, 0, 797, 220, 1, 0, 0, 0, 798, 801, 3, 223, 111, 0, 799, 801, 3, 219, 109, 0, 800, 798, 1, 0, 0, 0, 800, 799, 1, 0, 0, 0, 801, 222, 1, 0, 0, 0, 802, 803, 5, 48, 0, 0, 803, 224, 1, 0, 0, 0, 804, 806, 3, 215, 107, 0, 805, 804, 1, 0, 0, 0, 806, 807, 1, 0, 0, 0, 807, 805, 1, 0, 0, 0, 807, 808, 1, 0, 0, 0, 808, 827, 1, 0, 0, 0, 809, 811, 3, 215, 107, 0, 810, 809, 1, 0, 0, 0, 811, 812, 1, 0, 0, 0, 812, 810, 1, 0, 0, 0, 812, 813, 1, 0, 0, 0, 813, 814, 1, 0, 0, 0, 814, 816, 5, 46, 0, 0, 815, 817, 3, 215, 107, 0, 816, 815, 1, 0, 0, 0, 817, 818, 1, 0, 0, 0, 818, 816, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 827, 1, 0, 0, 0, 820, 822, 5, 46, 0, 0, 821, 823, 3, 215, 107, 0, 822, 821, 1, 0, 0, 0, 823, 824, 1, 0, 0, 0, 824, 822, 1, 0, 0, 0, 824, 825, 1, 0, 0, 0, 825, 827, 1, 0, 0, 0, 826, 805, 1, 0, 0, 0, 826, 810, 1, 0, 0, 0, 826, 820, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 830, 7, 0, 0, 0, 829, 831, 5, 45, 0, 0, 830, 829, 1, 0, 0, 0, 830, 831, 1, 0, 0, 0, 831, 833, 1, 0, 0, 0, 832, 834, 3, 215, 107, 0, 833, 832, 1, 0, 0, 0, 834, 835, 1, 0, 0, 0, 835, 833, 1, 0, 0, 0, 835, 836, 1, 0, 0, 0, 836, 226, 1, 0, 0, 0, 837, 839, 3, 215, 107, 0, 838, 837, 1, 0, 0, 0, 839, 842, 1, 0, 0, 0, 840, 838, 1, 0, 0, 0, 840, 841, 1, 0, 0, 0, 841, 843, 1, 0, 0, 0, 842, 840, 1, 0, 0, 0, 843, 845, 5, 46, 0, 0, 844, 846, 3, 215, 107, 0, 845, 844, 1, 0, 0, 0, 846, 847, 1, 0, 0, 0, 847, 845, 1, 0, 0, 0, 847, 848, 1, 0, 0, 0, 848, 228, 1, 0, 0, 0, 849, 850, 7, 9, 0, 0, 850, 851, 7, 5, 0, 0, 851, 852, 7, 3, 0, 0, 852, 853, 7, 11, 0, 0, 853, 854, 7, 0, 0, 0, 854, 855, 7, 7, 0, 0, 855, 230, 1, 0, 0, 0, 856, 857, 7, 0, 0, 0, 857, 858, 7, 1, 0, 0, 858, 859, 7, 11, 0, 0, 859, 860, 7, 7, 0, 0, 860, 861, 7, 4, 0, 0, 861, 862, 7, 13, 0, 0, 862, 863, 7, 11, 0, 0, 863, 232, 1, 0, 0, 0, 864, 868, 3, 255, 127, 0, 865, 867, 3, 257, 128, 0, 866, 865, 1, 0, 0, 0, 867, 870, 1, 0, 0, 0, 868, 866, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 234, 1, 0, 0, 0, 870, 868, 1, 0, 0, 0, 871, 872, 7, 13, 0, 0, 872, 873, 7, 8, 0, 0, 873, 874, 7, 6, 0, 0, 874, 875, 7, 17, 0, 0, 875, 876, 7, 11, 0, 0, 876, 877, 7, 7, 0, 0, 877, 878, 7, 4, 0, 0, 878, 879, 7, 5, 0, 0, 879, 880, 7, 6, 0, 0, 880, 881, 7, 11, 0, 0, 881, 236, 1, 0, 0, 0, 882, 883, 7, 16, 0, 0, 883, 884, 7, 8, 0, 0, 884, 238, 1, 0, 0, 0, 885, 886, 7, 9, 0, 0, 886, 887, 7, 8, 0, 0, 887, 888, 7, 7, 0, 0, 888, 240, 1, 0, 0, 0, 889, 890, 7, 7, 0, 0, 890, 891, 7, 0, 0, 0, 891, 892, 7, 26, 0, 0, 892, 893, 7, 10, 0, 0, 893, 894, 7, 5, 0, 0, 894, 895, 7, 7, 0, 0, 895, 896, 7, 0, 0, 0, 896, 242, 1, 0, 0, 0, 897, 898, 7, 10, 0, 0, 898, 899, 7, 6, 0, 0, 899, 900, 7, 5, 0, 0, 900, 901, 7, 26, 0, 0, 901, 902, 7, 10, 0, 0, 902, 903, 7, 0, 0, 0, 903, 244, 1, 0, 0, 0, 904, 905, 7, 12, 0, 0, 905, 906, 7, 4, 0, 0, 906, 907, 7, 6, 0, 0, 907, 908, 7, 16, 0, 0, 908, 909, 7, 4, 0, 0, 909, 910, 7, 11, 0, 0, 910, 911, 7, 8, 0, 0, 911, 912, 7, 7, 0, 0, 912, 913, 7, 20, 0, 0, 913, 246, 1, 0, 0, 0, 914, 915, 7, 17, 0, 0, 915, 916, 7, 13, 0, 0, 916, 917, 7, 4, 0, 0, 917, 918, 7, 3, 0, 0, 918, 919, 7, 4, 0, 0, 919, 920, 7, 7, 0, 0, 920, 248, 1, 0, 0, 0, 921, 922, 7, 8, 0, 0, 922, 923, 7, 9, 0, 0, 923, 250, 1, 0, 0, 0, 924, 925, 7, 4, 0, 0, 925, 926, 7, 16, 0, 0, 926, 927, 7, 16, 0, 0, 927, 252, 1, 0, 0, 0, 928, 929, 7, 16, 0, 0, 929, 930, 7, 7, 0, 0, 930, 931, 7, 8, 0, 0, 931, 932, 7, 2, 0, 0, 932, 254, 1, 0, 0, 0, 933, 936, 3, 305, 152, 0, 934, 936, 3, 293, 146, 0, 935, 933, 1, 0, 0, 0, 935, 934, 1, 0, 0, 0, 936, 256, 1, 0, 0, 0, 937, 940, 3, 273, 136, 0, 938, 940, 3, 289, 144, 0, 939, 937, 1, 0, 0, 0, 939, 938, 1, 0, 0, 0, 940, 258, 1, 0, 0, 0, 941, 945, 5, 96, 0, 0, 942, 944, 3, 269, 134, 0, 943, 942, 1, 0, 0, 0, 944, 947, 1, 0, 0, 0, 945, 943, 1, 0, 0, 0, 945, 946, 1, 0, 0, 0, 946, 948, 1, 0, 0, 0, 947, 945, 1, 0, 0, 0, 948, 950, 5, 96, 0, 0, 949, 941, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 949, 1, 0, 0, 0, 951, 952, 1, 0, 0, 0, 952, 260, 1, 0, 0, 0, 953, 955, 3, 263, 131, 0, 954, 953, 1, 0, 0, 0, 955, 956, 1, 0, 0, 0, 956, 954, 1, 0, 0, 0, 956, 957, 1, 0, 0, 0, 957, 262, 1, 0, 0, 0, 958, 971, 3, 291, 145, 0, 959, 971, 3, 295, 147, 0, 960, 971, 3, 299, 149, 0, 961, 971, 3, 301, 150, 0, 962, 971, 3, 267, 133, 0, 963, 971, 3, 287, 143, 0, 964, 971, 3, 285, 142, 0, 965, 971, 3, 283, 141, 0, 966, 971, 3, 271, 135, 0, 967, 971, 3, 303, 151, 0, 968, 971, 7, 27, 0, 0, 969, 971, 3, 265, 132, 0, 970, 958, 1, 0, 0, 0, 970, 959, 1, 0, 0, 0, 970, 960, 1, 0, 0, 0, 970, 961, 1, 0, 0, 0, 970, 962, 1, 0, 0, 0, 970, 963, 1, 0, 0, 0, 970, 964, 1, 0, 0, 0, 970, 965, 1, 0, 0, 0, 970, 966, 1, 0, 0, 0, 970, 967, 1, 0, 0, 0, 970, 968, 1, 0, 0, 0, 970, 969, 1, 0, 0, 0, 971, 264, 1, 0, 0, 0, 972, 973, 5, 47, 0, 0, 973, 974, 5, 42, 0, 0, 974, 980, 1, 0, 0, 0, 975, 979, 3, 275, 137, 0, 976, 977, 5, 42, 0, 0, 977, 979, 3, 281, 140, 0, 978, 975, 1, 0, 0, 0, 978, 976, 1, 0, 0, 0, 979, 982, 1, 0, 0, 0, 980, 978, 1, 0, 0, 0, 980, 981, 1, 0, 0, 0, 981, 983, 1, 0, 0, 0, 982, 980, 1, 0, 0, 0, 983, 984, 5, 42, 0, 0, 984, 1002, 5, 47, 0, 0, 985, 986, 5, 47, 0, 0, 986, 987, 5, 47, 0, 0, 987, 991, 1, 0, 0, 0, 988, 990, 3, 279, 139, 0, 989, 988, 1, 0, 0, 0, 990, 993, 1, 0, 0, 0, 991, 989, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 995, 1, 0, 0, 0, 993, 991, 1, 0, 0, 0, 994, 996, 3, 287, 143, 0, 995, 994, 1, 0, 0, 0, 995, 996, 1, 0, 0, 0, 996, 999, 1, 0, 0, 0, 997, 1000, 3, 299, 149, 0, 998, 1000, 5, 0, 0, 1, 999, 997, 1, 0, 0, 0, 999, 998, 1, 0, 0, 0, 1000, 1002, 1, 0, 0, 0, 1001, 972, 1, 0, 0, 0, 1001, 985, 1, 0, 0, 0, 1002, 266, 1, 0, 0, 0, 1003, 1004, 7, 28, 0, 0, 1004, 268, 1, 0, 0, 0, 1005, 1006, 7, 29, 0, 0, 1006, 270, 1, 0, 0, 0, 1007, 1008, 7, 30, 0, 0, 1008, 272, 1, 0, 0, 0, 1009, 1010, 7, 31, 0, 0, 1010, 274, 1, 0, 0, 0, 1011, 1012, 7, 32, 0, 0, 1012, 276, 1, 0, 0, 0, 1013, 1014, 7, 33, 0, 0, 1014, 278, 1, 0, 0, 0, 1015, 1016, 7, 34, 0, 0, 1016, 280, 1, 0, 0, 0, 1017, 1018, 7, 35, 0, 0, 1018, 282, 1, 0, 0, 0, 1019, 1020, 7, 36, 0, 0, 1020, 284, 1, 0, 0, 0, 1021, 1022, 7, 37, 0, 0, 1022, 286, 1, 0, 0, 0, 1023, 1024, 7, 38, 0, 0, 1024, 288, 1, 0, 0, 0, 1025, 1026, 7, 39, 0, 0, 1026, 290, 1, 0, 0, 0, 1027, 1028, 7, 40, 0, 0, 1028, 292, 1, 0, 0, 0, 1029, 1030, 7, 41, 0, 0, 1030, 294, 1, 0, 0, 0, 1031, 1032, 7, 42, 0, 0, 1032, 296, 1, 0, 0, 0, 1033, 1034, 7, 43, 0, 0, 1034, 298, 1, 0, 0, 0, 1035, 1036, 7, 44, 0, 0, 1036, 300, 1, 0, 0, 0, 1037, 1038, 7, 45, 0, 0, 1038, 302, 1, 0, 0, 0, 1039, 1040, 7, 46, 0, 0, 1040, 304, 1, 0, 0, 0, 1041, 1042, 7, 47, 0, 0, 1042, 306, 1, 0, 0, 0, 38, 0, 720, 722, 729, 731, 735, 755, 763, 770, 773, 779, 782, 786, 790, 794, 800, 807, 812, 818, 824, 826, 830, 835, 840, 847, 868, 935, 939, 945, 951, 956, 970, 978, 980, 991, 995, 999, 1001, 0] \ No newline at end of file +[4, 0, 133, 1045, 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, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 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, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 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, 84, 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, 85, 1, 86, 1, 86, 1, 86, 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, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 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, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 5, 100, 722, 8, 100, 10, 100, 12, 100, 725, 9, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 5, 100, 732, 8, 100, 10, 100, 12, 100, 735, 9, 100, 1, 100, 3, 100, 738, 8, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 3, 101, 758, 8, 101, 1, 102, 1, 102, 1, 102, 1, 102, 4, 102, 764, 8, 102, 11, 102, 12, 102, 765, 1, 103, 1, 103, 1, 103, 5, 103, 771, 8, 103, 10, 103, 12, 103, 774, 9, 103, 3, 103, 776, 8, 103, 1, 104, 1, 104, 4, 104, 780, 8, 104, 11, 104, 12, 104, 781, 1, 105, 3, 105, 785, 8, 105, 1, 106, 1, 106, 3, 106, 789, 8, 106, 1, 107, 1, 107, 3, 107, 793, 8, 107, 1, 108, 1, 108, 3, 108, 797, 8, 108, 1, 109, 1, 109, 1, 110, 1, 110, 3, 110, 803, 8, 110, 1, 111, 1, 111, 1, 112, 4, 112, 808, 8, 112, 11, 112, 12, 112, 809, 1, 112, 4, 112, 813, 8, 112, 11, 112, 12, 112, 814, 1, 112, 1, 112, 4, 112, 819, 8, 112, 11, 112, 12, 112, 820, 1, 112, 1, 112, 4, 112, 825, 8, 112, 11, 112, 12, 112, 826, 3, 112, 829, 8, 112, 1, 112, 1, 112, 3, 112, 833, 8, 112, 1, 112, 4, 112, 836, 8, 112, 11, 112, 12, 112, 837, 1, 113, 5, 113, 841, 8, 113, 10, 113, 12, 113, 844, 9, 113, 1, 113, 1, 113, 4, 113, 848, 8, 113, 11, 113, 12, 113, 849, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 5, 116, 869, 8, 116, 10, 116, 12, 116, 872, 9, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 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, 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, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 3, 127, 938, 8, 127, 1, 128, 1, 128, 3, 128, 942, 8, 128, 1, 129, 1, 129, 5, 129, 946, 8, 129, 10, 129, 12, 129, 949, 9, 129, 1, 129, 4, 129, 952, 8, 129, 11, 129, 12, 129, 953, 1, 130, 4, 130, 957, 8, 130, 11, 130, 12, 130, 958, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 973, 8, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 981, 8, 132, 10, 132, 12, 132, 984, 9, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 992, 8, 132, 10, 132, 12, 132, 995, 9, 132, 1, 132, 3, 132, 998, 8, 132, 1, 132, 1, 132, 3, 132, 1002, 8, 132, 3, 132, 1004, 8, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 138, 1, 138, 1, 139, 1, 139, 1, 140, 1, 140, 1, 141, 1, 141, 1, 142, 1, 142, 1, 143, 1, 143, 1, 144, 1, 144, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, 1, 149, 1, 150, 1, 150, 1, 151, 1, 151, 1, 152, 1, 152, 0, 0, 153, 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, 0, 269, 0, 271, 0, 273, 0, 275, 0, 277, 0, 279, 0, 281, 0, 283, 0, 285, 0, 287, 0, 289, 0, 291, 0, 293, 0, 295, 0, 297, 0, 299, 0, 301, 0, 303, 0, 305, 0, 1, 0, 50, 2, 0, 69, 69, 101, 101, 2, 0, 88, 88, 120, 120, 2, 0, 80, 80, 112, 112, 2, 0, 76, 76, 108, 108, 2, 0, 65, 65, 97, 97, 2, 0, 73, 73, 105, 105, 2, 0, 78, 78, 110, 110, 2, 0, 82, 82, 114, 114, 2, 0, 79, 79, 111, 111, 2, 0, 70, 70, 102, 102, 2, 0, 85, 85, 117, 117, 2, 0, 84, 84, 116, 116, 2, 0, 77, 77, 109, 109, 2, 0, 67, 67, 99, 99, 2, 0, 72, 72, 104, 104, 2, 0, 87, 87, 119, 119, 2, 0, 68, 68, 100, 100, 2, 0, 83, 83, 115, 115, 2, 0, 71, 71, 103, 103, 2, 0, 86, 86, 118, 118, 2, 0, 89, 89, 121, 121, 2, 0, 66, 66, 98, 98, 2, 0, 75, 75, 107, 107, 2, 0, 74, 74, 106, 106, 1, 0, 34, 34, 1, 0, 39, 39, 13, 0, 34, 34, 39, 39, 66, 66, 70, 70, 78, 78, 82, 82, 84, 84, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 116, 2, 0, 65, 70, 97, 102, 2, 0, 81, 81, 113, 113, 8, 0, 160, 160, 5760, 5760, 6158, 6158, 8192, 8202, 8232, 8233, 8239, 8239, 8287, 8287, 12288, 12288, 1, 0, 12, 12, 2, 0, 0, 95, 97, 65535, 1, 0, 30, 30, 429, 0, 48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 2, 0, 0, 41, 43, 65535, 3, 0, 0, 38, 40, 91, 93, 65535, 3, 0, 0, 9, 11, 12, 14, 65535, 2, 0, 0, 46, 48, 65535, 1, 0, 29, 29, 1, 0, 28, 28, 1, 0, 13, 13, 17, 0, 36, 36, 162, 165, 1423, 1423, 1547, 1547, 2546, 2547, 2555, 2555, 2801, 2801, 3065, 3065, 3647, 3647, 6107, 6107, 8352, 8378, 43064, 43064, 65020, 65020, 65129, 65129, 65284, 65284, 65504, 65505, 65509, 65510, 1, 0, 32, 32, 6, 0, 95, 95, 8255, 8256, 8276, 8276, 65075, 65076, 65101, 65103, 65343, 65343, 1, 0, 9, 9, 3, 0, 0, 33, 35, 91, 93, 65535, 1, 0, 10, 10, 1, 0, 11, 11, 1, 0, 31, 31, 370, 0, 65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 1072, 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, 1, 307, 1, 0, 0, 0, 3, 309, 1, 0, 0, 0, 5, 311, 1, 0, 0, 0, 7, 313, 1, 0, 0, 0, 9, 316, 1, 0, 0, 0, 11, 318, 1, 0, 0, 0, 13, 320, 1, 0, 0, 0, 15, 322, 1, 0, 0, 0, 17, 324, 1, 0, 0, 0, 19, 326, 1, 0, 0, 0, 21, 328, 1, 0, 0, 0, 23, 330, 1, 0, 0, 0, 25, 333, 1, 0, 0, 0, 27, 335, 1, 0, 0, 0, 29, 337, 1, 0, 0, 0, 31, 339, 1, 0, 0, 0, 33, 341, 1, 0, 0, 0, 35, 343, 1, 0, 0, 0, 37, 346, 1, 0, 0, 0, 39, 348, 1, 0, 0, 0, 41, 350, 1, 0, 0, 0, 43, 353, 1, 0, 0, 0, 45, 356, 1, 0, 0, 0, 47, 358, 1, 0, 0, 0, 49, 360, 1, 0, 0, 0, 51, 362, 1, 0, 0, 0, 53, 364, 1, 0, 0, 0, 55, 366, 1, 0, 0, 0, 57, 368, 1, 0, 0, 0, 59, 370, 1, 0, 0, 0, 61, 372, 1, 0, 0, 0, 63, 374, 1, 0, 0, 0, 65, 376, 1, 0, 0, 0, 67, 378, 1, 0, 0, 0, 69, 380, 1, 0, 0, 0, 71, 382, 1, 0, 0, 0, 73, 384, 1, 0, 0, 0, 75, 386, 1, 0, 0, 0, 77, 388, 1, 0, 0, 0, 79, 390, 1, 0, 0, 0, 81, 392, 1, 0, 0, 0, 83, 394, 1, 0, 0, 0, 85, 396, 1, 0, 0, 0, 87, 398, 1, 0, 0, 0, 89, 400, 1, 0, 0, 0, 91, 402, 1, 0, 0, 0, 93, 410, 1, 0, 0, 0, 95, 418, 1, 0, 0, 0, 97, 424, 1, 0, 0, 0, 99, 428, 1, 0, 0, 0, 101, 437, 1, 0, 0, 0, 103, 443, 1, 0, 0, 0, 105, 450, 1, 0, 0, 0, 107, 453, 1, 0, 0, 0, 109, 459, 1, 0, 0, 0, 111, 462, 1, 0, 0, 0, 113, 469, 1, 0, 0, 0, 115, 473, 1, 0, 0, 0, 117, 480, 1, 0, 0, 0, 119, 487, 1, 0, 0, 0, 121, 494, 1, 0, 0, 0, 123, 499, 1, 0, 0, 0, 125, 505, 1, 0, 0, 0, 127, 510, 1, 0, 0, 0, 129, 519, 1, 0, 0, 0, 131, 526, 1, 0, 0, 0, 133, 532, 1, 0, 0, 0, 135, 535, 1, 0, 0, 0, 137, 540, 1, 0, 0, 0, 139, 546, 1, 0, 0, 0, 141, 556, 1, 0, 0, 0, 143, 560, 1, 0, 0, 0, 145, 571, 1, 0, 0, 0, 147, 576, 1, 0, 0, 0, 149, 582, 1, 0, 0, 0, 151, 587, 1, 0, 0, 0, 153, 593, 1, 0, 0, 0, 155, 599, 1, 0, 0, 0, 157, 602, 1, 0, 0, 0, 159, 606, 1, 0, 0, 0, 161, 610, 1, 0, 0, 0, 163, 614, 1, 0, 0, 0, 165, 617, 1, 0, 0, 0, 167, 624, 1, 0, 0, 0, 169, 629, 1, 0, 0, 0, 171, 638, 1, 0, 0, 0, 173, 645, 1, 0, 0, 0, 175, 648, 1, 0, 0, 0, 177, 653, 1, 0, 0, 0, 179, 659, 1, 0, 0, 0, 181, 663, 1, 0, 0, 0, 183, 668, 1, 0, 0, 0, 185, 675, 1, 0, 0, 0, 187, 680, 1, 0, 0, 0, 189, 686, 1, 0, 0, 0, 191, 693, 1, 0, 0, 0, 193, 698, 1, 0, 0, 0, 195, 703, 1, 0, 0, 0, 197, 707, 1, 0, 0, 0, 199, 712, 1, 0, 0, 0, 201, 737, 1, 0, 0, 0, 203, 739, 1, 0, 0, 0, 205, 759, 1, 0, 0, 0, 207, 775, 1, 0, 0, 0, 209, 777, 1, 0, 0, 0, 211, 784, 1, 0, 0, 0, 213, 788, 1, 0, 0, 0, 215, 792, 1, 0, 0, 0, 217, 796, 1, 0, 0, 0, 219, 798, 1, 0, 0, 0, 221, 802, 1, 0, 0, 0, 223, 804, 1, 0, 0, 0, 225, 828, 1, 0, 0, 0, 227, 842, 1, 0, 0, 0, 229, 851, 1, 0, 0, 0, 231, 858, 1, 0, 0, 0, 233, 866, 1, 0, 0, 0, 235, 873, 1, 0, 0, 0, 237, 884, 1, 0, 0, 0, 239, 887, 1, 0, 0, 0, 241, 891, 1, 0, 0, 0, 243, 899, 1, 0, 0, 0, 245, 906, 1, 0, 0, 0, 247, 916, 1, 0, 0, 0, 249, 923, 1, 0, 0, 0, 251, 926, 1, 0, 0, 0, 253, 930, 1, 0, 0, 0, 255, 937, 1, 0, 0, 0, 257, 941, 1, 0, 0, 0, 259, 951, 1, 0, 0, 0, 261, 956, 1, 0, 0, 0, 263, 972, 1, 0, 0, 0, 265, 1003, 1, 0, 0, 0, 267, 1005, 1, 0, 0, 0, 269, 1007, 1, 0, 0, 0, 271, 1009, 1, 0, 0, 0, 273, 1011, 1, 0, 0, 0, 275, 1013, 1, 0, 0, 0, 277, 1015, 1, 0, 0, 0, 279, 1017, 1, 0, 0, 0, 281, 1019, 1, 0, 0, 0, 283, 1021, 1, 0, 0, 0, 285, 1023, 1, 0, 0, 0, 287, 1025, 1, 0, 0, 0, 289, 1027, 1, 0, 0, 0, 291, 1029, 1, 0, 0, 0, 293, 1031, 1, 0, 0, 0, 295, 1033, 1, 0, 0, 0, 297, 1035, 1, 0, 0, 0, 299, 1037, 1, 0, 0, 0, 301, 1039, 1, 0, 0, 0, 303, 1041, 1, 0, 0, 0, 305, 1043, 1, 0, 0, 0, 307, 308, 5, 59, 0, 0, 308, 2, 1, 0, 0, 0, 309, 310, 5, 44, 0, 0, 310, 4, 1, 0, 0, 0, 311, 312, 5, 61, 0, 0, 312, 6, 1, 0, 0, 0, 313, 314, 5, 43, 0, 0, 314, 315, 5, 61, 0, 0, 315, 8, 1, 0, 0, 0, 316, 317, 5, 42, 0, 0, 317, 10, 1, 0, 0, 0, 318, 319, 5, 40, 0, 0, 319, 12, 1, 0, 0, 0, 320, 321, 5, 41, 0, 0, 321, 14, 1, 0, 0, 0, 322, 323, 5, 91, 0, 0, 323, 16, 1, 0, 0, 0, 324, 325, 5, 93, 0, 0, 325, 18, 1, 0, 0, 0, 326, 327, 5, 58, 0, 0, 327, 20, 1, 0, 0, 0, 328, 329, 5, 124, 0, 0, 329, 22, 1, 0, 0, 0, 330, 331, 5, 46, 0, 0, 331, 332, 5, 46, 0, 0, 332, 24, 1, 0, 0, 0, 333, 334, 5, 43, 0, 0, 334, 26, 1, 0, 0, 0, 335, 336, 5, 45, 0, 0, 336, 28, 1, 0, 0, 0, 337, 338, 5, 47, 0, 0, 338, 30, 1, 0, 0, 0, 339, 340, 5, 37, 0, 0, 340, 32, 1, 0, 0, 0, 341, 342, 5, 94, 0, 0, 342, 34, 1, 0, 0, 0, 343, 344, 5, 60, 0, 0, 344, 345, 5, 62, 0, 0, 345, 36, 1, 0, 0, 0, 346, 347, 5, 60, 0, 0, 347, 38, 1, 0, 0, 0, 348, 349, 5, 62, 0, 0, 349, 40, 1, 0, 0, 0, 350, 351, 5, 60, 0, 0, 351, 352, 5, 61, 0, 0, 352, 42, 1, 0, 0, 0, 353, 354, 5, 62, 0, 0, 354, 355, 5, 61, 0, 0, 355, 44, 1, 0, 0, 0, 356, 357, 5, 46, 0, 0, 357, 46, 1, 0, 0, 0, 358, 359, 5, 123, 0, 0, 359, 48, 1, 0, 0, 0, 360, 361, 5, 125, 0, 0, 361, 50, 1, 0, 0, 0, 362, 363, 5, 36, 0, 0, 363, 52, 1, 0, 0, 0, 364, 365, 5, 10216, 0, 0, 365, 54, 1, 0, 0, 0, 366, 367, 5, 12296, 0, 0, 367, 56, 1, 0, 0, 0, 368, 369, 5, 65124, 0, 0, 369, 58, 1, 0, 0, 0, 370, 371, 5, 65308, 0, 0, 371, 60, 1, 0, 0, 0, 372, 373, 5, 10217, 0, 0, 373, 62, 1, 0, 0, 0, 374, 375, 5, 12297, 0, 0, 375, 64, 1, 0, 0, 0, 376, 377, 5, 65125, 0, 0, 377, 66, 1, 0, 0, 0, 378, 379, 5, 65310, 0, 0, 379, 68, 1, 0, 0, 0, 380, 381, 5, 173, 0, 0, 381, 70, 1, 0, 0, 0, 382, 383, 5, 8208, 0, 0, 383, 72, 1, 0, 0, 0, 384, 385, 5, 8209, 0, 0, 385, 74, 1, 0, 0, 0, 386, 387, 5, 8210, 0, 0, 387, 76, 1, 0, 0, 0, 388, 389, 5, 8211, 0, 0, 389, 78, 1, 0, 0, 0, 390, 391, 5, 8212, 0, 0, 391, 80, 1, 0, 0, 0, 392, 393, 5, 8213, 0, 0, 393, 82, 1, 0, 0, 0, 394, 395, 5, 8722, 0, 0, 395, 84, 1, 0, 0, 0, 396, 397, 5, 65112, 0, 0, 397, 86, 1, 0, 0, 0, 398, 399, 5, 65123, 0, 0, 399, 88, 1, 0, 0, 0, 400, 401, 5, 65293, 0, 0, 401, 90, 1, 0, 0, 0, 402, 403, 7, 0, 0, 0, 403, 404, 7, 1, 0, 0, 404, 405, 7, 2, 0, 0, 405, 406, 7, 3, 0, 0, 406, 407, 7, 4, 0, 0, 407, 408, 7, 5, 0, 0, 408, 409, 7, 6, 0, 0, 409, 92, 1, 0, 0, 0, 410, 411, 7, 2, 0, 0, 411, 412, 7, 7, 0, 0, 412, 413, 7, 8, 0, 0, 413, 414, 7, 9, 0, 0, 414, 415, 7, 5, 0, 0, 415, 416, 7, 3, 0, 0, 416, 417, 7, 0, 0, 0, 417, 94, 1, 0, 0, 0, 418, 419, 7, 10, 0, 0, 419, 420, 7, 6, 0, 0, 420, 421, 7, 5, 0, 0, 421, 422, 7, 8, 0, 0, 422, 423, 7, 6, 0, 0, 423, 96, 1, 0, 0, 0, 424, 425, 7, 4, 0, 0, 425, 426, 7, 3, 0, 0, 426, 427, 7, 3, 0, 0, 427, 98, 1, 0, 0, 0, 428, 429, 7, 8, 0, 0, 429, 430, 7, 2, 0, 0, 430, 431, 7, 11, 0, 0, 431, 432, 7, 5, 0, 0, 432, 433, 7, 8, 0, 0, 433, 434, 7, 6, 0, 0, 434, 435, 7, 4, 0, 0, 435, 436, 7, 3, 0, 0, 436, 100, 1, 0, 0, 0, 437, 438, 7, 12, 0, 0, 438, 439, 7, 4, 0, 0, 439, 440, 7, 11, 0, 0, 440, 441, 7, 13, 0, 0, 441, 442, 7, 14, 0, 0, 442, 102, 1, 0, 0, 0, 443, 444, 7, 10, 0, 0, 444, 445, 7, 6, 0, 0, 445, 446, 7, 15, 0, 0, 446, 447, 7, 5, 0, 0, 447, 448, 7, 6, 0, 0, 448, 449, 7, 16, 0, 0, 449, 104, 1, 0, 0, 0, 450, 451, 7, 4, 0, 0, 451, 452, 7, 17, 0, 0, 452, 106, 1, 0, 0, 0, 453, 454, 7, 12, 0, 0, 454, 455, 7, 0, 0, 0, 455, 456, 7, 7, 0, 0, 456, 457, 7, 18, 0, 0, 457, 458, 7, 0, 0, 0, 458, 108, 1, 0, 0, 0, 459, 460, 7, 8, 0, 0, 460, 461, 7, 6, 0, 0, 461, 110, 1, 0, 0, 0, 462, 463, 7, 13, 0, 0, 463, 464, 7, 7, 0, 0, 464, 465, 7, 0, 0, 0, 465, 466, 7, 4, 0, 0, 466, 467, 7, 11, 0, 0, 467, 468, 7, 0, 0, 0, 468, 112, 1, 0, 0, 0, 469, 470, 7, 17, 0, 0, 470, 471, 7, 0, 0, 0, 471, 472, 7, 11, 0, 0, 472, 114, 1, 0, 0, 0, 473, 474, 7, 16, 0, 0, 474, 475, 7, 0, 0, 0, 475, 476, 7, 11, 0, 0, 476, 477, 7, 4, 0, 0, 477, 478, 7, 13, 0, 0, 478, 479, 7, 14, 0, 0, 479, 116, 1, 0, 0, 0, 480, 481, 7, 16, 0, 0, 481, 482, 7, 0, 0, 0, 482, 483, 7, 3, 0, 0, 483, 484, 7, 0, 0, 0, 484, 485, 7, 11, 0, 0, 485, 486, 7, 0, 0, 0, 486, 118, 1, 0, 0, 0, 487, 488, 7, 7, 0, 0, 488, 489, 7, 0, 0, 0, 489, 490, 7, 12, 0, 0, 490, 491, 7, 8, 0, 0, 491, 492, 7, 19, 0, 0, 492, 493, 7, 0, 0, 0, 493, 120, 1, 0, 0, 0, 494, 495, 7, 13, 0, 0, 495, 496, 7, 4, 0, 0, 496, 497, 7, 3, 0, 0, 497, 498, 7, 3, 0, 0, 498, 122, 1, 0, 0, 0, 499, 500, 7, 20, 0, 0, 500, 501, 7, 5, 0, 0, 501, 502, 7, 0, 0, 0, 502, 503, 7, 3, 0, 0, 503, 504, 7, 16, 0, 0, 504, 124, 1, 0, 0, 0, 505, 506, 7, 15, 0, 0, 506, 507, 7, 5, 0, 0, 507, 508, 7, 11, 0, 0, 508, 509, 7, 14, 0, 0, 509, 126, 1, 0, 0, 0, 510, 511, 7, 16, 0, 0, 511, 512, 7, 5, 0, 0, 512, 513, 7, 17, 0, 0, 513, 514, 7, 11, 0, 0, 514, 515, 7, 5, 0, 0, 515, 516, 7, 6, 0, 0, 516, 517, 7, 13, 0, 0, 517, 518, 7, 11, 0, 0, 518, 128, 1, 0, 0, 0, 519, 520, 7, 7, 0, 0, 520, 521, 7, 0, 0, 0, 521, 522, 7, 11, 0, 0, 522, 523, 7, 10, 0, 0, 523, 524, 7, 7, 0, 0, 524, 525, 7, 6, 0, 0, 525, 130, 1, 0, 0, 0, 526, 527, 7, 8, 0, 0, 527, 528, 7, 7, 0, 0, 528, 529, 7, 16, 0, 0, 529, 530, 7, 0, 0, 0, 530, 531, 7, 7, 0, 0, 531, 132, 1, 0, 0, 0, 532, 533, 7, 21, 0, 0, 533, 534, 7, 20, 0, 0, 534, 134, 1, 0, 0, 0, 535, 536, 7, 17, 0, 0, 536, 537, 7, 22, 0, 0, 537, 538, 7, 5, 0, 0, 538, 539, 7, 2, 0, 0, 539, 136, 1, 0, 0, 0, 540, 541, 7, 3, 0, 0, 541, 542, 7, 5, 0, 0, 542, 543, 7, 12, 0, 0, 543, 544, 7, 5, 0, 0, 544, 545, 7, 11, 0, 0, 545, 138, 1, 0, 0, 0, 546, 547, 7, 4, 0, 0, 547, 548, 7, 17, 0, 0, 548, 549, 7, 13, 0, 0, 549, 550, 7, 0, 0, 0, 550, 551, 7, 6, 0, 0, 551, 552, 7, 16, 0, 0, 552, 553, 7, 5, 0, 0, 553, 554, 7, 6, 0, 0, 554, 555, 7, 18, 0, 0, 555, 140, 1, 0, 0, 0, 556, 557, 7, 4, 0, 0, 557, 558, 7, 17, 0, 0, 558, 559, 7, 13, 0, 0, 559, 142, 1, 0, 0, 0, 560, 561, 7, 16, 0, 0, 561, 562, 7, 0, 0, 0, 562, 563, 7, 17, 0, 0, 563, 564, 7, 13, 0, 0, 564, 565, 7, 0, 0, 0, 565, 566, 7, 6, 0, 0, 566, 567, 7, 16, 0, 0, 567, 568, 7, 5, 0, 0, 568, 569, 7, 6, 0, 0, 569, 570, 7, 18, 0, 0, 570, 144, 1, 0, 0, 0, 571, 572, 7, 16, 0, 0, 572, 573, 7, 0, 0, 0, 573, 574, 7, 17, 0, 0, 574, 575, 7, 13, 0, 0, 575, 146, 1, 0, 0, 0, 576, 577, 7, 10, 0, 0, 577, 578, 7, 17, 0, 0, 578, 579, 7, 5, 0, 0, 579, 580, 7, 6, 0, 0, 580, 581, 7, 18, 0, 0, 581, 148, 1, 0, 0, 0, 582, 583, 7, 23, 0, 0, 583, 584, 7, 8, 0, 0, 584, 585, 7, 5, 0, 0, 585, 586, 7, 6, 0, 0, 586, 150, 1, 0, 0, 0, 587, 588, 7, 17, 0, 0, 588, 589, 7, 11, 0, 0, 589, 590, 7, 4, 0, 0, 590, 591, 7, 7, 0, 0, 591, 592, 7, 11, 0, 0, 592, 152, 1, 0, 0, 0, 593, 594, 7, 15, 0, 0, 594, 595, 7, 14, 0, 0, 595, 596, 7, 0, 0, 0, 596, 597, 7, 7, 0, 0, 597, 598, 7, 0, 0, 0, 598, 154, 1, 0, 0, 0, 599, 600, 7, 8, 0, 0, 600, 601, 7, 7, 0, 0, 601, 156, 1, 0, 0, 0, 602, 603, 7, 1, 0, 0, 603, 604, 7, 8, 0, 0, 604, 605, 7, 7, 0, 0, 605, 158, 1, 0, 0, 0, 606, 607, 7, 4, 0, 0, 607, 608, 7, 6, 0, 0, 608, 609, 7, 16, 0, 0, 609, 160, 1, 0, 0, 0, 610, 611, 7, 6, 0, 0, 611, 612, 7, 8, 0, 0, 612, 613, 7, 11, 0, 0, 613, 162, 1, 0, 0, 0, 614, 615, 7, 5, 0, 0, 615, 616, 7, 6, 0, 0, 616, 164, 1, 0, 0, 0, 617, 618, 7, 17, 0, 0, 618, 619, 7, 11, 0, 0, 619, 620, 7, 4, 0, 0, 620, 621, 7, 7, 0, 0, 621, 622, 7, 11, 0, 0, 622, 623, 7, 17, 0, 0, 623, 166, 1, 0, 0, 0, 624, 625, 7, 0, 0, 0, 625, 626, 7, 6, 0, 0, 626, 627, 7, 16, 0, 0, 627, 628, 7, 17, 0, 0, 628, 168, 1, 0, 0, 0, 629, 630, 7, 13, 0, 0, 630, 631, 7, 8, 0, 0, 631, 632, 7, 6, 0, 0, 632, 633, 7, 11, 0, 0, 633, 634, 7, 4, 0, 0, 634, 635, 7, 5, 0, 0, 635, 636, 7, 6, 0, 0, 636, 637, 7, 17, 0, 0, 637, 170, 1, 0, 0, 0, 638, 639, 7, 7, 0, 0, 639, 640, 7, 0, 0, 0, 640, 641, 7, 18, 0, 0, 641, 642, 7, 0, 0, 0, 642, 643, 7, 1, 0, 0, 643, 644, 7, 2, 0, 0, 644, 172, 1, 0, 0, 0, 645, 646, 7, 5, 0, 0, 646, 647, 7, 17, 0, 0, 647, 174, 1, 0, 0, 0, 648, 649, 7, 6, 0, 0, 649, 650, 7, 10, 0, 0, 650, 651, 7, 3, 0, 0, 651, 652, 7, 3, 0, 0, 652, 176, 1, 0, 0, 0, 653, 654, 7, 13, 0, 0, 654, 655, 7, 8, 0, 0, 655, 656, 7, 10, 0, 0, 656, 657, 7, 6, 0, 0, 657, 658, 7, 11, 0, 0, 658, 178, 1, 0, 0, 0, 659, 660, 7, 4, 0, 0, 660, 661, 7, 6, 0, 0, 661, 662, 7, 20, 0, 0, 662, 180, 1, 0, 0, 0, 663, 664, 7, 6, 0, 0, 664, 665, 7, 8, 0, 0, 665, 666, 7, 6, 0, 0, 666, 667, 7, 0, 0, 0, 667, 182, 1, 0, 0, 0, 668, 669, 7, 17, 0, 0, 669, 670, 7, 5, 0, 0, 670, 671, 7, 6, 0, 0, 671, 672, 7, 18, 0, 0, 672, 673, 7, 3, 0, 0, 673, 674, 7, 0, 0, 0, 674, 184, 1, 0, 0, 0, 675, 676, 7, 11, 0, 0, 676, 677, 7, 7, 0, 0, 677, 678, 7, 10, 0, 0, 678, 679, 7, 0, 0, 0, 679, 186, 1, 0, 0, 0, 680, 681, 7, 9, 0, 0, 681, 682, 7, 4, 0, 0, 682, 683, 7, 3, 0, 0, 683, 684, 7, 17, 0, 0, 684, 685, 7, 0, 0, 0, 685, 188, 1, 0, 0, 0, 686, 687, 7, 0, 0, 0, 687, 688, 7, 1, 0, 0, 688, 689, 7, 5, 0, 0, 689, 690, 7, 17, 0, 0, 690, 691, 7, 11, 0, 0, 691, 692, 7, 17, 0, 0, 692, 190, 1, 0, 0, 0, 693, 694, 7, 13, 0, 0, 694, 695, 7, 4, 0, 0, 695, 696, 7, 17, 0, 0, 696, 697, 7, 0, 0, 0, 697, 192, 1, 0, 0, 0, 698, 699, 7, 0, 0, 0, 699, 700, 7, 3, 0, 0, 700, 701, 7, 17, 0, 0, 701, 702, 7, 0, 0, 0, 702, 194, 1, 0, 0, 0, 703, 704, 7, 0, 0, 0, 704, 705, 7, 6, 0, 0, 705, 706, 7, 16, 0, 0, 706, 196, 1, 0, 0, 0, 707, 708, 7, 15, 0, 0, 708, 709, 7, 14, 0, 0, 709, 710, 7, 0, 0, 0, 710, 711, 7, 6, 0, 0, 711, 198, 1, 0, 0, 0, 712, 713, 7, 11, 0, 0, 713, 714, 7, 14, 0, 0, 714, 715, 7, 0, 0, 0, 715, 716, 7, 6, 0, 0, 716, 200, 1, 0, 0, 0, 717, 723, 5, 34, 0, 0, 718, 722, 8, 24, 0, 0, 719, 720, 5, 92, 0, 0, 720, 722, 5, 34, 0, 0, 721, 718, 1, 0, 0, 0, 721, 719, 1, 0, 0, 0, 722, 725, 1, 0, 0, 0, 723, 721, 1, 0, 0, 0, 723, 724, 1, 0, 0, 0, 724, 726, 1, 0, 0, 0, 725, 723, 1, 0, 0, 0, 726, 738, 5, 34, 0, 0, 727, 733, 5, 39, 0, 0, 728, 732, 8, 25, 0, 0, 729, 730, 5, 92, 0, 0, 730, 732, 5, 39, 0, 0, 731, 728, 1, 0, 0, 0, 731, 729, 1, 0, 0, 0, 732, 735, 1, 0, 0, 0, 733, 731, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 736, 1, 0, 0, 0, 735, 733, 1, 0, 0, 0, 736, 738, 5, 39, 0, 0, 737, 717, 1, 0, 0, 0, 737, 727, 1, 0, 0, 0, 738, 202, 1, 0, 0, 0, 739, 757, 5, 92, 0, 0, 740, 758, 7, 26, 0, 0, 741, 742, 7, 10, 0, 0, 742, 743, 3, 213, 106, 0, 743, 744, 3, 213, 106, 0, 744, 745, 3, 213, 106, 0, 745, 746, 3, 213, 106, 0, 746, 758, 1, 0, 0, 0, 747, 748, 7, 10, 0, 0, 748, 749, 3, 213, 106, 0, 749, 750, 3, 213, 106, 0, 750, 751, 3, 213, 106, 0, 751, 752, 3, 213, 106, 0, 752, 753, 3, 213, 106, 0, 753, 754, 3, 213, 106, 0, 754, 755, 3, 213, 106, 0, 755, 756, 3, 213, 106, 0, 756, 758, 1, 0, 0, 0, 757, 740, 1, 0, 0, 0, 757, 741, 1, 0, 0, 0, 757, 747, 1, 0, 0, 0, 758, 204, 1, 0, 0, 0, 759, 760, 5, 48, 0, 0, 760, 761, 5, 120, 0, 0, 761, 763, 1, 0, 0, 0, 762, 764, 3, 213, 106, 0, 763, 762, 1, 0, 0, 0, 764, 765, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 765, 766, 1, 0, 0, 0, 766, 206, 1, 0, 0, 0, 767, 776, 3, 223, 111, 0, 768, 772, 3, 217, 108, 0, 769, 771, 3, 215, 107, 0, 770, 769, 1, 0, 0, 0, 771, 774, 1, 0, 0, 0, 772, 770, 1, 0, 0, 0, 772, 773, 1, 0, 0, 0, 773, 776, 1, 0, 0, 0, 774, 772, 1, 0, 0, 0, 775, 767, 1, 0, 0, 0, 775, 768, 1, 0, 0, 0, 776, 208, 1, 0, 0, 0, 777, 779, 3, 223, 111, 0, 778, 780, 3, 221, 110, 0, 779, 778, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 779, 1, 0, 0, 0, 781, 782, 1, 0, 0, 0, 782, 210, 1, 0, 0, 0, 783, 785, 7, 27, 0, 0, 784, 783, 1, 0, 0, 0, 785, 212, 1, 0, 0, 0, 786, 789, 3, 215, 107, 0, 787, 789, 3, 211, 105, 0, 788, 786, 1, 0, 0, 0, 788, 787, 1, 0, 0, 0, 789, 214, 1, 0, 0, 0, 790, 793, 3, 223, 111, 0, 791, 793, 3, 217, 108, 0, 792, 790, 1, 0, 0, 0, 792, 791, 1, 0, 0, 0, 793, 216, 1, 0, 0, 0, 794, 797, 3, 219, 109, 0, 795, 797, 2, 56, 57, 0, 796, 794, 1, 0, 0, 0, 796, 795, 1, 0, 0, 0, 797, 218, 1, 0, 0, 0, 798, 799, 2, 49, 55, 0, 799, 220, 1, 0, 0, 0, 800, 803, 3, 223, 111, 0, 801, 803, 3, 219, 109, 0, 802, 800, 1, 0, 0, 0, 802, 801, 1, 0, 0, 0, 803, 222, 1, 0, 0, 0, 804, 805, 5, 48, 0, 0, 805, 224, 1, 0, 0, 0, 806, 808, 3, 215, 107, 0, 807, 806, 1, 0, 0, 0, 808, 809, 1, 0, 0, 0, 809, 807, 1, 0, 0, 0, 809, 810, 1, 0, 0, 0, 810, 829, 1, 0, 0, 0, 811, 813, 3, 215, 107, 0, 812, 811, 1, 0, 0, 0, 813, 814, 1, 0, 0, 0, 814, 812, 1, 0, 0, 0, 814, 815, 1, 0, 0, 0, 815, 816, 1, 0, 0, 0, 816, 818, 5, 46, 0, 0, 817, 819, 3, 215, 107, 0, 818, 817, 1, 0, 0, 0, 819, 820, 1, 0, 0, 0, 820, 818, 1, 0, 0, 0, 820, 821, 1, 0, 0, 0, 821, 829, 1, 0, 0, 0, 822, 824, 5, 46, 0, 0, 823, 825, 3, 215, 107, 0, 824, 823, 1, 0, 0, 0, 825, 826, 1, 0, 0, 0, 826, 824, 1, 0, 0, 0, 826, 827, 1, 0, 0, 0, 827, 829, 1, 0, 0, 0, 828, 807, 1, 0, 0, 0, 828, 812, 1, 0, 0, 0, 828, 822, 1, 0, 0, 0, 829, 830, 1, 0, 0, 0, 830, 832, 7, 0, 0, 0, 831, 833, 5, 45, 0, 0, 832, 831, 1, 0, 0, 0, 832, 833, 1, 0, 0, 0, 833, 835, 1, 0, 0, 0, 834, 836, 3, 215, 107, 0, 835, 834, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 835, 1, 0, 0, 0, 837, 838, 1, 0, 0, 0, 838, 226, 1, 0, 0, 0, 839, 841, 3, 215, 107, 0, 840, 839, 1, 0, 0, 0, 841, 844, 1, 0, 0, 0, 842, 840, 1, 0, 0, 0, 842, 843, 1, 0, 0, 0, 843, 845, 1, 0, 0, 0, 844, 842, 1, 0, 0, 0, 845, 847, 5, 46, 0, 0, 846, 848, 3, 215, 107, 0, 847, 846, 1, 0, 0, 0, 848, 849, 1, 0, 0, 0, 849, 847, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 228, 1, 0, 0, 0, 851, 852, 7, 9, 0, 0, 852, 853, 7, 5, 0, 0, 853, 854, 7, 3, 0, 0, 854, 855, 7, 11, 0, 0, 855, 856, 7, 0, 0, 0, 856, 857, 7, 7, 0, 0, 857, 230, 1, 0, 0, 0, 858, 859, 7, 0, 0, 0, 859, 860, 7, 1, 0, 0, 860, 861, 7, 11, 0, 0, 861, 862, 7, 7, 0, 0, 862, 863, 7, 4, 0, 0, 863, 864, 7, 13, 0, 0, 864, 865, 7, 11, 0, 0, 865, 232, 1, 0, 0, 0, 866, 870, 3, 255, 127, 0, 867, 869, 3, 257, 128, 0, 868, 867, 1, 0, 0, 0, 869, 872, 1, 0, 0, 0, 870, 868, 1, 0, 0, 0, 870, 871, 1, 0, 0, 0, 871, 234, 1, 0, 0, 0, 872, 870, 1, 0, 0, 0, 873, 874, 7, 13, 0, 0, 874, 875, 7, 8, 0, 0, 875, 876, 7, 6, 0, 0, 876, 877, 7, 17, 0, 0, 877, 878, 7, 11, 0, 0, 878, 879, 7, 7, 0, 0, 879, 880, 7, 4, 0, 0, 880, 881, 7, 5, 0, 0, 881, 882, 7, 6, 0, 0, 882, 883, 7, 11, 0, 0, 883, 236, 1, 0, 0, 0, 884, 885, 7, 16, 0, 0, 885, 886, 7, 8, 0, 0, 886, 238, 1, 0, 0, 0, 887, 888, 7, 9, 0, 0, 888, 889, 7, 8, 0, 0, 889, 890, 7, 7, 0, 0, 890, 240, 1, 0, 0, 0, 891, 892, 7, 7, 0, 0, 892, 893, 7, 0, 0, 0, 893, 894, 7, 28, 0, 0, 894, 895, 7, 10, 0, 0, 895, 896, 7, 5, 0, 0, 896, 897, 7, 7, 0, 0, 897, 898, 7, 0, 0, 0, 898, 242, 1, 0, 0, 0, 899, 900, 7, 10, 0, 0, 900, 901, 7, 6, 0, 0, 901, 902, 7, 5, 0, 0, 902, 903, 7, 28, 0, 0, 903, 904, 7, 10, 0, 0, 904, 905, 7, 0, 0, 0, 905, 244, 1, 0, 0, 0, 906, 907, 7, 12, 0, 0, 907, 908, 7, 4, 0, 0, 908, 909, 7, 6, 0, 0, 909, 910, 7, 16, 0, 0, 910, 911, 7, 4, 0, 0, 911, 912, 7, 11, 0, 0, 912, 913, 7, 8, 0, 0, 913, 914, 7, 7, 0, 0, 914, 915, 7, 20, 0, 0, 915, 246, 1, 0, 0, 0, 916, 917, 7, 17, 0, 0, 917, 918, 7, 13, 0, 0, 918, 919, 7, 4, 0, 0, 919, 920, 7, 3, 0, 0, 920, 921, 7, 4, 0, 0, 921, 922, 7, 7, 0, 0, 922, 248, 1, 0, 0, 0, 923, 924, 7, 8, 0, 0, 924, 925, 7, 9, 0, 0, 925, 250, 1, 0, 0, 0, 926, 927, 7, 4, 0, 0, 927, 928, 7, 16, 0, 0, 928, 929, 7, 16, 0, 0, 929, 252, 1, 0, 0, 0, 930, 931, 7, 16, 0, 0, 931, 932, 7, 7, 0, 0, 932, 933, 7, 8, 0, 0, 933, 934, 7, 2, 0, 0, 934, 254, 1, 0, 0, 0, 935, 938, 3, 305, 152, 0, 936, 938, 3, 293, 146, 0, 937, 935, 1, 0, 0, 0, 937, 936, 1, 0, 0, 0, 938, 256, 1, 0, 0, 0, 939, 942, 3, 273, 136, 0, 940, 942, 3, 289, 144, 0, 941, 939, 1, 0, 0, 0, 941, 940, 1, 0, 0, 0, 942, 258, 1, 0, 0, 0, 943, 947, 5, 96, 0, 0, 944, 946, 3, 269, 134, 0, 945, 944, 1, 0, 0, 0, 946, 949, 1, 0, 0, 0, 947, 945, 1, 0, 0, 0, 947, 948, 1, 0, 0, 0, 948, 950, 1, 0, 0, 0, 949, 947, 1, 0, 0, 0, 950, 952, 5, 96, 0, 0, 951, 943, 1, 0, 0, 0, 952, 953, 1, 0, 0, 0, 953, 951, 1, 0, 0, 0, 953, 954, 1, 0, 0, 0, 954, 260, 1, 0, 0, 0, 955, 957, 3, 263, 131, 0, 956, 955, 1, 0, 0, 0, 957, 958, 1, 0, 0, 0, 958, 956, 1, 0, 0, 0, 958, 959, 1, 0, 0, 0, 959, 262, 1, 0, 0, 0, 960, 973, 3, 291, 145, 0, 961, 973, 3, 295, 147, 0, 962, 973, 3, 299, 149, 0, 963, 973, 3, 301, 150, 0, 964, 973, 3, 267, 133, 0, 965, 973, 3, 287, 143, 0, 966, 973, 3, 285, 142, 0, 967, 973, 3, 283, 141, 0, 968, 973, 3, 271, 135, 0, 969, 973, 3, 303, 151, 0, 970, 973, 7, 29, 0, 0, 971, 973, 3, 265, 132, 0, 972, 960, 1, 0, 0, 0, 972, 961, 1, 0, 0, 0, 972, 962, 1, 0, 0, 0, 972, 963, 1, 0, 0, 0, 972, 964, 1, 0, 0, 0, 972, 965, 1, 0, 0, 0, 972, 966, 1, 0, 0, 0, 972, 967, 1, 0, 0, 0, 972, 968, 1, 0, 0, 0, 972, 969, 1, 0, 0, 0, 972, 970, 1, 0, 0, 0, 972, 971, 1, 0, 0, 0, 973, 264, 1, 0, 0, 0, 974, 975, 5, 47, 0, 0, 975, 976, 5, 42, 0, 0, 976, 982, 1, 0, 0, 0, 977, 981, 3, 275, 137, 0, 978, 979, 5, 42, 0, 0, 979, 981, 3, 281, 140, 0, 980, 977, 1, 0, 0, 0, 980, 978, 1, 0, 0, 0, 981, 984, 1, 0, 0, 0, 982, 980, 1, 0, 0, 0, 982, 983, 1, 0, 0, 0, 983, 985, 1, 0, 0, 0, 984, 982, 1, 0, 0, 0, 985, 986, 5, 42, 0, 0, 986, 1004, 5, 47, 0, 0, 987, 988, 5, 47, 0, 0, 988, 989, 5, 47, 0, 0, 989, 993, 1, 0, 0, 0, 990, 992, 3, 279, 139, 0, 991, 990, 1, 0, 0, 0, 992, 995, 1, 0, 0, 0, 993, 991, 1, 0, 0, 0, 993, 994, 1, 0, 0, 0, 994, 997, 1, 0, 0, 0, 995, 993, 1, 0, 0, 0, 996, 998, 3, 287, 143, 0, 997, 996, 1, 0, 0, 0, 997, 998, 1, 0, 0, 0, 998, 1001, 1, 0, 0, 0, 999, 1002, 3, 299, 149, 0, 1000, 1002, 5, 0, 0, 1, 1001, 999, 1, 0, 0, 0, 1001, 1000, 1, 0, 0, 0, 1002, 1004, 1, 0, 0, 0, 1003, 974, 1, 0, 0, 0, 1003, 987, 1, 0, 0, 0, 1004, 266, 1, 0, 0, 0, 1005, 1006, 7, 30, 0, 0, 1006, 268, 1, 0, 0, 0, 1007, 1008, 7, 31, 0, 0, 1008, 270, 1, 0, 0, 0, 1009, 1010, 7, 32, 0, 0, 1010, 272, 1, 0, 0, 0, 1011, 1012, 7, 33, 0, 0, 1012, 274, 1, 0, 0, 0, 1013, 1014, 7, 34, 0, 0, 1014, 276, 1, 0, 0, 0, 1015, 1016, 7, 35, 0, 0, 1016, 278, 1, 0, 0, 0, 1017, 1018, 7, 36, 0, 0, 1018, 280, 1, 0, 0, 0, 1019, 1020, 7, 37, 0, 0, 1020, 282, 1, 0, 0, 0, 1021, 1022, 7, 38, 0, 0, 1022, 284, 1, 0, 0, 0, 1023, 1024, 7, 39, 0, 0, 1024, 286, 1, 0, 0, 0, 1025, 1026, 7, 40, 0, 0, 1026, 288, 1, 0, 0, 0, 1027, 1028, 7, 41, 0, 0, 1028, 290, 1, 0, 0, 0, 1029, 1030, 7, 42, 0, 0, 1030, 292, 1, 0, 0, 0, 1031, 1032, 7, 43, 0, 0, 1032, 294, 1, 0, 0, 0, 1033, 1034, 7, 44, 0, 0, 1034, 296, 1, 0, 0, 0, 1035, 1036, 7, 45, 0, 0, 1036, 298, 1, 0, 0, 0, 1037, 1038, 7, 46, 0, 0, 1038, 300, 1, 0, 0, 0, 1039, 1040, 7, 47, 0, 0, 1040, 302, 1, 0, 0, 0, 1041, 1042, 7, 48, 0, 0, 1042, 304, 1, 0, 0, 0, 1043, 1044, 7, 49, 0, 0, 1044, 306, 1, 0, 0, 0, 38, 0, 721, 723, 731, 733, 737, 757, 765, 772, 775, 781, 784, 788, 792, 796, 802, 809, 814, 820, 826, 828, 832, 837, 842, 849, 870, 937, 941, 947, 953, 958, 972, 980, 982, 993, 997, 1001, 1003, 0] \ No newline at end of file diff --git a/src/cypher/parser/generated/LcypherParser.cpp b/src/cypher/parser/generated/LcypherParser.cpp index 8217457e8d..fff7563cd7 100644 --- a/src/cypher/parser/generated/LcypherParser.cpp +++ b/src/cypher/parser/generated/LcypherParser.cpp @@ -1,5 +1,5 @@ -// Generated from src/cypher/grammar/Lcypher.g4 by ANTLR 4.13.0 +// Generated from src/cypher/grammar/Lcypher.g4 by ANTLR 4.12.0 #include "LcypherVisitor.h" @@ -38,19 +38,10 @@ struct LcypherParserStaticData final { }; ::antlr4::internal::OnceFlag lcypherParserOnceFlag; -#if ANTLR4_USE_THREAD_LOCAL_CACHE -static thread_local -#endif LcypherParserStaticData *lcypherParserStaticData = nullptr; void lcypherParserInitialize() { -#if ANTLR4_USE_THREAD_LOCAL_CACHE - if (lcypherParserStaticData != nullptr) { - return; - } -#else assert(lcypherParserStaticData == nullptr); -#endif auto staticData = std::make_unique( std::vector{ "oC_Cypher", "oC_Statement", "oC_Query", "oC_RegularQuery", "oC_Union", @@ -11126,9 +11117,5 @@ LcypherParser::OC_DashContext* LcypherParser::oC_Dash() { } void LcypherParser::initialize() { -#if ANTLR4_USE_THREAD_LOCAL_CACHE - lcypherParserInitialize(); -#else ::antlr4::internal::call_once(lcypherParserOnceFlag, lcypherParserInitialize); -#endif } diff --git a/src/cypher/parser/generated/LcypherParser.h b/src/cypher/parser/generated/LcypherParser.h index a7940f9e6a..aefd2add1e 100644 --- a/src/cypher/parser/generated/LcypherParser.h +++ b/src/cypher/parser/generated/LcypherParser.h @@ -1,5 +1,5 @@ -// Generated from src/cypher/grammar/Lcypher.g4 by ANTLR 4.13.0 +// Generated from src/cypher/grammar/Lcypher.g4 by ANTLR 4.12.0 #pragma once diff --git a/src/cypher/parser/generated/LcypherVisitor.cpp b/src/cypher/parser/generated/LcypherVisitor.cpp index 4ca3ffea15..a8cd265875 100644 --- a/src/cypher/parser/generated/LcypherVisitor.cpp +++ b/src/cypher/parser/generated/LcypherVisitor.cpp @@ -1,5 +1,5 @@ -// Generated from src/cypher/grammar/Lcypher.g4 by ANTLR 4.13.0 +// Generated from src/cypher/grammar/Lcypher.g4 by ANTLR 4.12.0 #include "LcypherVisitor.h" diff --git a/src/cypher/parser/generated/LcypherVisitor.h b/src/cypher/parser/generated/LcypherVisitor.h index b9fb8375df..23e7171305 100644 --- a/src/cypher/parser/generated/LcypherVisitor.h +++ b/src/cypher/parser/generated/LcypherVisitor.h @@ -1,5 +1,5 @@ -// Generated from src/cypher/grammar/Lcypher.g4 by ANTLR 4.13.0 +// Generated from src/cypher/grammar/Lcypher.g4 by ANTLR 4.12.0 #pragma once