diff --git a/research/pg29-matched-dirty-completion/COMPLETION-RESULT.json b/research/pg29-matched-dirty-completion/COMPLETION-RESULT.json new file mode 100644 index 0000000000..e3e06e6eac --- /dev/null +++ b/research/pg29-matched-dirty-completion/COMPLETION-RESULT.json @@ -0,0 +1,21 @@ +{ + "status": "PASS_PG29_MATCHED_DIRTY_COMPLETION", + "source_word_sha256": "112532d00d991979ce21b2f74b48cd5bffdb1420abea44f2571f667a628a261f", + "field": "F3[t]/(t^2+1), encoded by a+3b", + "independent_field_operations": true, + "local_maps": 182, + "physical_transmissions": 735, + "independent_input_stubs": 175, + "matched_input_pairs": 9, + "matched_output_pairs": 9, + "quotient_dimension": 166, + "correction_rank": 9, + "all_formal_columns_restored": true, + "generic_schur_dimension": 18, + "generic_schur_invertible": true, + "D9_nonzeros": 74, + "correction_nonzeros": 1243, + "physical_frames": false, + "paid_supplier": false, + "new_kappa": false +} diff --git a/research/pg29-matched-dirty-completion/HISTORICAL-DIRTY-RESULT.json b/research/pg29-matched-dirty-completion/HISTORICAL-DIRTY-RESULT.json new file mode 100644 index 0000000000..acca5e29e5 --- /dev/null +++ b/research/pg29-matched-dirty-completion/HISTORICAL-DIRTY-RESULT.json @@ -0,0 +1,30 @@ +{ + "primary_source_commit": "3436359a85d13a1bf6e87c3a3dbdaa64788277f4", + "field": "F3[t]/(t^2+1)", + "independent_input_stubs": 175, + "physical_transmissions": 735, + "all_local_5_by_5_maps_invertible": true, + "whole_transfer_invertible": true, + "B_to_B_identity": true, + "block_ranks": { + "B_from_B": 157, + "B_from_C": 9, + "J_from_B": 9, + "J_from_C": 18 + }, + "block_nonzero_entries": { + "B_from_B": 157, + "B_from_C": 2486, + "J_from_B": 2434, + "J_from_C": 263 + }, + "whole_transfer_is_permutation": false, + "schur_H_minus_GF_rank": 18, + "equal_paired_C_values_do_not_contaminate_B": true, + "paired_J_outputs_have_equal_B_contributions": true, + "scope": "A dirty GF9 completion. This is not a finite bit or complex supplier.", + "input_hashes": { + "upstream_verify.py": "3be25d94a25e8ea8b484a1fb614a697e0a24e4519b647febc64b2d314f44d758", + "182-vertex-code.json": "f47b7f8af378fe7f86c7da32f04533b419711e468997c30ddef30a3a791dba01" + } +} diff --git a/research/pg29-matched-dirty-completion/INDEPENDENT-DIRTY.json b/research/pg29-matched-dirty-completion/INDEPENDENT-DIRTY.json new file mode 100644 index 0000000000..267fea627d --- /dev/null +++ b/research/pg29-matched-dirty-completion/INDEPENDENT-DIRTY.json @@ -0,0 +1,17 @@ +{ + "status": "PASS", + "all_saved_local_maps_invertible": true, + "replayed_physical_transmissions": 735, + "independent_field_implementation": true, + "whole_dirty_word_rank": 175, + "block_ranks": { + "F": 9, + "G": 9, + "H": 18 + }, + "paired_C_quotient_rank": 166, + "paired_C_does_not_contaminate_B": true, + "paired_J_outputs_agree": true, + "dirty_quotient_junk_block_rank": 9, + "scope": "A separate replay of the saved finite GF9 word. No rational frame realization or recursive paid cost is checked." +} diff --git a/research/pg29-matched-dirty-completion/ORIGINS.json b/research/pg29-matched-dirty-completion/ORIGINS.json new file mode 100644 index 0000000000..a963f0ec81 --- /dev/null +++ b/research/pg29-matched-dirty-completion/ORIGINS.json @@ -0,0 +1,46 @@ +[ + { + "file": "dirty-word.json", + "original_workspace_path": "work/p518-next/architecture/small-motif/dirty-word.json", + "original_sha256": "112532d00d991979ce21b2f74b48cd5bffdb1420abea44f2571f667a628a261f", + "adaptations": [] + }, + { + "file": "independent_dirty.py", + "original_workspace_path": "work/p518-next/architecture/small-motif/independent_dirty.py", + "original_sha256": "686ddfa0443b1081eba1516121a2b1978ab9f38b076d9ad37cc8693e426fe168", + "adaptations": [] + }, + { + "file": "INDEPENDENT-DIRTY.json", + "original_workspace_path": "work/p518-next/architecture/small-motif/INDEPENDENT-DIRTY.json", + "original_sha256": "e53be4b542cb39b239742ac4db4db03edf3ce94887f403538a3c1e6043bed307", + "adaptations": [] + }, + { + "file": "HISTORICAL-DIRTY-RESULT.json", + "original_workspace_path": "work/p518-next/architecture/small-motif/dirty-result.json", + "original_sha256": "c0f73c6983a4aec4edb2c9a4d63a68336e93e6c24d75e2b7bcae6d33df800d84", + "adaptations": [] + }, + { + "file": "PG29-FACTORS.json", + "original_workspace_path": "work/p518-next/bit/PG29-FACTORS.json", + "original_sha256": "fcf9cd3c6a5d36972c351ece5ab8c0495349e385be224ebb26490adb30c009fb", + "adaptations": [] + }, + { + "file": "PG29-COMPLETION.json", + "original_workspace_path": "work/p518-next/bit/PG29-COMPLETION.json", + "original_sha256": "df3aeba706075dd89bafd114542a1f06f0ac8c709064916d7fe96c51f2c1b96a", + "adaptations": [] + }, + { + "file": "completion.py", + "original_workspace_path": "work/p518-next/bit/independent/pg29_verify.py", + "original_sha256": "1180797215f151cae485f99db46fadc2320ec5e22a502a9d58f71feb70aa5780", + "adaptations": [ + "Use package-local paths. Remove the conditional profile-price section and its engine. Keep the complete field, transcript and scalar completion checks. Add a scope-specific receipt." + ] + } +] diff --git a/research/pg29-matched-dirty-completion/PG29-COMPLETION.json b/research/pg29-matched-dirty-completion/PG29-COMPLETION.json new file mode 100644 index 0000000000..36a4c558d6 --- /dev/null +++ b/research/pg29-matched-dirty-completion/PG29-COMPLETION.json @@ -0,0 +1,38 @@ +{ + "status": "PASS_EXACT_MATCHED_STUB_DIRTY_COMPLETION", + "source_word_sha256": "112532d00d991979ce21b2f74b48cd5bffdb1420abea44f2571f667a628a261f", + "field": "F3[t]/(t^2+1)", + "signal_count": 157, + "returned_junk_count": 9, + "matched_C_edges": [ + 102, + 163, + 164, + 341, + 386, + 406, + 476, + 513, + 862 + ], + "matched_J_edges": [ + 103, + 349, + 470, + 517, + 603, + 606, + 674, + 716, + 861 + ], + "signal_reads_independent_of_matched_junk": true, + "all_J_stub_pairs_equal": true, + "normalized_junk_restored_on_all_166_formal_columns": true, + "correction_rank": 9, + "generic_independent_stub_schur_size": 18, + "generic_independent_stub_schur_invertible": true, + "D9_nonzeros": 74, + "correction_nonzeros": 1243, + "scope": "This is a scalar GF9 completion. Matching C inputs, physical frames, calls, and the all-size compiler remain unproved." +} diff --git a/research/pg29-matched-dirty-completion/PG29-FACTORS.json b/research/pg29-matched-dirty-completion/PG29-FACTORS.json new file mode 100644 index 0000000000..37127bde88 --- /dev/null +++ b/research/pg29-matched-dirty-completion/PG29-FACTORS.json @@ -0,0 +1 @@ +{"B9":[[5,8,3,7,5,2,1,1,8,6,3,4,6,7,0,2,3,2,1,0,8,0,3,6,4,8,6,7,2,6,4,3,7,5,7,0,1,7,1,7,1,2,6,5,2,6,6,5,5,2,3,7,3,1,6,0,5,3,8,6,6,1,0,2,7,8,0,2,3,7,1,7,7,2,7,2,2,5,3,2,3,8,4,0,0,2,1,2,6,8,5,7,6,4,2,4,6,4,2,8,2,4,4,4,7,3,6,2,4,4,8,5,4,3,1,8,4,2,4,7,4,0,2,8,1,8,3,8,4,5,2,7,4,3,6,7,2,5,8,7,4,6,6,1,3,4,2,1,0,3,4,6,7,8,7,6,4],[6,6,6,1,7,1,0,3,1,7,2,1,3,7,3,1,8,8,5,8,8,6,8,1,0,8,5,1,0,7,5,6,8,1,5,0,1,5,8,3,6,4,0,7,0,1,7,2,0,0,6,1,3,8,8,1,4,0,0,3,2,7,1,3,0,3,3,1,2,0,2,8,2,5,0,5,2,3,3,7,6,5,7,2,1,5,1,1,5,7,0,8,7,2,1,2,8,5,4,7,4,6,4,0,4,2,1,2,8,4,0,0,2,0,5,2,1,4,2,7,4,0,1,1,5,4,6,7,3,1,0,8,1,8,3,1,8,0,8,8,2,0,4,5,0,2,4,0,4,4,3,1,5,6,4,2,1],[8,3,7,4,6,4,5,2,3,4,2,6,4,3,0,0,4,5,0,1,0,6,3,5,4,2,5,1,1,2,2,0,0,7,1,1,5,1,2,3,3,4,1,7,0,3,8,6,4,3,4,6,2,3,0,1,3,4,7,0,0,1,4,7,3,4,2,3,5,3,5,7,2,4,8,0,1,8,5,7,1,7,7,5,2,3,6,7,0,1,8,5,8,7,1,6,4,1,2,0,8,8,0,6,0,2,4,5,5,7,5,5,7,2,1,7,2,0,6,8,0,6,8,3,7,4,6,4,8,2,0,1,2,7,7,8,4,5,0,8,2,1,0,3,8,0,3,6,6,2,6,8,1,4,8,4,4],[1,5,6,8,3,3,0,8,6,3,4,6,4,6,4,7,8,2,7,2,8,6,0,2,0,0,0,7,8,5,7,7,3,7,2,4,5,8,2,6,0,7,4,0,0,4,1,1,4,3,3,8,6,6,0,6,8,8,7,6,2,7,4,6,6,1,4,8,6,7,7,2,4,8,8,0,0,0,7,0,6,4,4,3,7,7,6,5,2,2,2,2,5,6,4,2,0,2,2,8,6,6,2,8,1,4,3,1,3,3,3,7,5,4,5,0,4,7,8,7,7,8,4,3,2,4,2,7,2,2,7,8,6,6,4,8,3,0,3,6,4,6,5,1,6,3,6,3,2,4,8,1,6,0,8,0,0],[7,1,8,7,2,8,5,5,5,0,0,0,3,3,2,6,6,4,3,6,1,0,5,8,3,4,1,6,1,6,0,6,2,0,2,4,8,6,1,6,5,8,0,2,1,0,8,5,6,7,8,6,2,6,7,6,0,5,8,3,3,3,5,2,7,3,4,6,2,3,7,8,8,8,4,1,3,2,8,7,8,5,5,2,5,8,0,3,0,1,8,0,4,1,5,5,4,0,7,4,4,7,5,7,4,2,3,3,4,8,8,7,5,1,8,6,3,8,4,0,3,2,8,8,3,0,5,4,4,0,5,0,5,3,2,6,2,0,3,4,2,6,6,1,0,8,7,0,5,5,2,4,0,5,0,7,1],[5,8,8,5,2,3,8,0,1,7,0,1,8,6,2,0,8,8,6,3,4,0,3,0,4,5,4,7,0,0,2,7,7,6,0,8,6,0,8,3,6,3,5,1,7,2,5,8,6,4,1,8,4,8,1,0,1,4,7,3,2,2,7,0,2,4,0,3,5,3,5,8,7,3,7,4,5,5,1,2,5,3,2,8,6,7,5,5,2,2,1,0,5,0,4,1,2,3,8,2,5,7,0,3,2,4,0,0,3,7,0,0,0,8,2,2,1,3,3,2,3,4,3,8,3,5,0,1,3,5,6,6,1,6,1,0,5,8,0,3,8,7,7,1,4,4,2,0,5,2,2,6,4,7,1,0,3],[4,8,1,3,6,2,3,5,8,1,1,5,5,2,5,7,7,6,7,3,8,5,0,5,6,7,8,4,7,4,2,2,3,0,8,7,8,5,4,7,0,5,8,2,5,1,6,4,5,4,6,2,3,4,7,3,5,0,6,8,1,7,1,5,8,8,4,4,1,8,5,2,0,2,7,1,8,0,6,1,4,8,8,2,3,5,7,0,7,3,6,2,3,1,8,0,1,2,4,2,5,1,2,1,1,3,1,8,7,5,2,2,1,5,8,7,0,1,2,2,5,4,3,4,8,5,2,6,6,1,1,6,5,0,5,5,2,6,4,4,3,4,7,1,2,1,6,1,8,0,8,4,6,7,6,0,5],[6,5,8,1,0,2,0,2,6,4,6,0,0,6,6,0,5,3,8,4,0,0,0,0,0,8,8,2,3,2,7,3,6,5,8,1,0,7,5,7,6,2,0,1,5,6,3,6,3,5,0,8,0,0,0,7,8,7,2,7,6,4,8,4,2,7,6,8,7,2,2,3,0,0,0,0,0,8,5,8,6,2,0,1,5,0,0,0,2,6,8,7,1,4,0,6,4,7,0,0,0,0,6,8,6,0,6,0,8,0,0,7,6,2,7,8,7,5,0,0,0,0,6,5,4,8,0,0,3,7,0,6,1,3,3,0,2,0,2,7,3,4,0,3,7,0,0,5,8,3,1,1,6,8,1,3,2],[0,3,8,4,0,6,6,7,0,4,2,6,3,0,6,3,6,5,3,3,8,6,5,7,8,1,6,8,6,8,4,5,3,5,4,7,5,4,4,2,0,7,0,5,1,7,6,3,0,7,4,7,0,8,2,3,8,1,8,8,1,1,1,3,1,7,5,8,0,4,1,2,7,0,1,1,0,2,5,1,1,0,3,3,1,8,4,5,6,3,7,4,6,3,1,1,3,2,6,4,0,5,5,2,2,0,0,4,8,2,5,3,8,4,8,5,5,5,3,2,7,2,1,7,1,6,7,8,1,6,8,1,1,0,2,3,1,6,2,2,3,5,2,5,8,4,7,1,4,3,4,7,2,3,1,1,8]],"D9":[[2,5,4,6,6,5,2,8,8],[6,5,8,4,2,5,8,3,4],[7,8,1,7,5,5,3,0,1],[0,3,6,0,4,8,8,2,4],[5,1,6,8,0,1,8,0,6],[0,7,6,3,5,5,7,5,2],[1,3,2,7,0,6,8,6,7],[8,4,1,1,8,7,4,2,2],[8,4,8,2,8,8,7,7,2]],"inverse_D9":[[8,2,1,0,3,7,5,1,5],[4,5,3,1,8,7,8,4,3],[1,5,0,6,4,1,0,3,7],[4,7,4,6,5,4,0,7,6],[8,5,5,8,4,6,6,0,0],[0,8,1,7,5,2,0,1,7],[1,7,7,4,6,1,5,7,2],[3,1,4,3,6,1,2,3,8],[3,3,6,1,8,3,6,8,2]],"correction":[[6,7,4,0,4,7,7,2,1,0,4,4,5,8,0,6,8,5,2,3,4,7,8,4,2,6,6,4,0,6,8,6,3,0,2,8,8,6,7,5,3,5,2,5,2,8,6,6,6,1,0,8,7,5,0,0,6,6,7,1,2,6,8,8,4,2,2,7,4,6,7,4,8,0,4,2,1,1,2,4,3,0,2,5,8,8,8,0,5,6,6,1,3,7,3,3,1,3,6,5,1,8,5,4,1,2,6,6,1,8,7,6,8,4,0,4,2,0,1,6,5,1,8,7,0,6,7,6,5,1,0,5,4,7,5,8,5,1,7,1,8,3,6,6,6,4,1,5,3,5,6,6,4,4,7,7,8],[6,5,2,4,1,8,8,3,5,1,1,4,6,6,4,1,8,0,2,4,0,2,5,7,8,6,5,7,7,5,5,5,3,7,4,8,5,0,5,6,0,6,8,5,1,3,2,7,0,6,4,3,5,3,0,3,4,6,1,5,1,0,6,4,6,2,6,6,1,5,1,5,2,5,3,8,7,5,7,5,4,1,2,6,3,5,4,7,0,7,2,4,4,5,6,2,2,6,8,1,0,1,3,4,6,2,6,6,4,1,2,7,1,0,8,0,0,7,2,4,7,0,6,4,6,1,4,1,7,4,4,2,8,1,2,1,7,1,2,2,6,2,4,7,6,4,5,8,2,0,2,6,1,8,1,4,6],[8,4,4,2,7,4,3,0,0,3,2,5,5,3,7,2,5,5,1,0,6,2,3,2,2,2,2,8,3,0,8,4,3,5,6,6,4,4,1,0,1,5,6,8,4,0,3,8,3,5,2,6,1,3,1,7,5,0,0,5,7,7,1,2,2,5,7,3,5,7,0,3,4,4,2,8,4,2,4,2,1,7,0,7,2,0,6,0,7,4,1,3,8,2,2,0,1,1,6,5,1,1,4,2,4,8,3,7,0,6,6,8,3,6,3,4,8,7,8,4,0,7,4,0,3,0,5,6,0,3,3,4,8,5,1,4,4,6,0,5,4,0,6,2,2,6,3,5,4,5,5,8,7,7,0,0,2],[0,2,7,8,3,6,1,1,8,4,0,4,3,8,0,4,8,1,2,5,1,4,8,4,1,6,4,7,1,0,4,8,4,2,6,6,5,7,4,1,2,5,7,4,3,5,4,1,8,7,6,1,8,6,0,6,5,4,6,7,0,7,2,8,7,5,8,1,6,1,0,5,4,8,4,1,2,8,7,1,6,7,6,1,3,6,4,7,7,2,7,5,4,5,2,0,2,0,8,3,2,7,5,0,3,5,4,2,3,0,8,8,6,4,0,0,5,8,3,3,1,7,1,2,0,7,1,6,2,1,7,6,1,2,5,7,2,4,6,5,8,7,7,5,0,3,0,3,0,2,6,4,7,0,5,4,3],[2,7,3,5,8,0,3,1,0,0,0,3,4,3,5,1,0,2,0,5,6,5,4,0,3,0,3,7,3,1,2,6,0,1,2,3,1,5,1,2,8,0,7,1,8,6,3,7,4,2,6,7,7,3,8,8,3,1,5,2,6,0,0,2,6,4,1,5,7,3,5,0,8,0,7,3,3,6,6,6,2,4,6,0,2,7,7,2,2,8,4,1,2,1,3,4,2,7,3,3,2,3,0,1,4,7,5,8,6,2,4,8,4,6,5,7,8,4,0,4,0,2,4,8,8,7,2,7,2,4,2,0,7,0,7,1,5,6,3,6,1,1,4,1,0,3,7,4,4,1,4,8,8,4,3,0,3],[6,8,8,5,7,7,8,3,6,5,4,8,5,8,7,7,8,6,4,6,6,3,6,8,6,7,6,6,3,1,2,5,2,2,7,6,6,2,2,7,2,2,7,0,7,2,0,4,4,8,1,1,8,5,7,8,3,6,5,4,7,1,1,4,3,2,0,7,5,0,1,8,0,0,7,7,8,6,3,6,0,7,3,5,7,1,7,0,0,8,1,1,8,8,5,0,8,2,4,0,3,5,5,2,2,8,6,2,7,2,5,4,6,8,5,6,8,4,1,3,5,3,3,5,3,8,1,6,4,1,1,3,4,5,6,1,4,5,1,8,2,4,2,4,8,5,3,1,1,3,1,7,3,5,7,3,2],[1,4,8,7,3,0,6,3,5,2,6,0,3,1,8,1,1,2,8,1,4,8,1,7,4,8,4,3,1,0,1,4,0,3,6,4,2,6,8,4,7,8,5,3,5,7,2,1,4,8,6,0,1,1,2,7,8,6,2,6,7,8,7,6,7,3,5,0,4,5,7,8,4,4,0,1,4,5,5,8,7,4,6,5,4,6,6,2,3,2,0,7,8,5,7,1,4,6,7,5,0,2,4,6,6,1,7,1,4,3,5,4,7,2,4,7,1,5,1,8,5,8,3,1,1,3,7,4,1,5,8,5,4,4,1,8,2,5,4,7,4,3,1,5,8,6,4,0,8,8,5,2,2,6,0,0,1],[6,5,0,1,8,2,3,6,6,6,3,0,5,2,2,1,0,7,5,8,0,5,6,7,4,7,6,6,2,1,5,8,5,4,3,6,3,0,4,4,4,0,4,0,0,6,7,0,0,3,4,2,3,5,0,1,0,2,7,2,5,0,4,1,2,0,7,0,2,6,8,1,5,0,8,7,7,0,2,3,1,0,6,0,0,0,1,7,3,4,1,3,0,0,0,7,2,8,8,1,0,7,8,7,0,3,8,8,8,6,0,6,0,0,5,8,6,7,3,1,1,0,5,3,1,1,3,2,7,0,7,8,2,4,1,7,0,1,0,6,7,0,4,2,6,5,3,3,7,4,4,0,2,7,0,0,1],[6,3,4,0,5,7,8,4,8,3,3,5,5,7,4,5,1,0,4,8,8,4,3,1,3,2,4,2,4,6,8,0,1,0,7,8,1,8,2,0,7,1,0,0,2,7,1,8,0,3,8,7,8,7,6,7,3,6,6,1,2,4,1,6,5,1,7,6,4,2,3,0,2,7,7,2,8,7,8,6,7,1,4,2,3,7,5,2,8,0,1,5,2,6,6,6,0,1,1,6,4,2,2,4,7,1,2,4,6,0,0,6,5,4,2,2,0,8,2,6,8,0,7,8,1,2,8,4,6,1,5,8,0,5,7,2,2,0,3,0,1,6,2,2,2,6,8,3,8,2,6,7,1,8,7,0,1]],"S18":[[7,1,1,1,6,3,8,5,0,4,8,8,3,4,3,2,3,0],[7,0,2,5,4,7,2,5,3,2,2,1,1,5,6,7,6,7],[0,2,1,4,5,3,6,6,8,7,3,5,3,6,0,2,6,0],[5,1,3,3,1,5,8,8,2,7,6,5,3,5,3,3,0,3],[0,4,6,8,7,1,4,0,5,5,0,4,0,6,0,0,4,5],[5,3,0,7,7,0,3,6,1,7,8,1,8,4,6,5,4,7],[3,3,5,4,6,4,5,7,3,7,3,4,2,0,6,5,3,3],[3,4,2,6,4,4,2,5,2,5,4,0,6,0,2,3,5,4],[2,2,5,3,8,1,7,5,7,6,8,4,5,5,3,7,0,0],[3,5,2,5,5,3,6,8,3,8,4,5,0,0,5,2,5,4],[1,5,1,8,7,4,4,1,5,6,2,8,2,3,0,1,2,7],[4,5,0,0,8,8,6,1,6,4,2,5,6,2,8,0,1,0],[3,0,1,1,2,3,1,6,1,2,7,8,3,1,8,7,7,1],[8,2,5,4,3,4,7,6,0,5,3,7,0,4,6,5,1,6],[4,8,5,4,4,5,6,8,7,4,6,4,3,8,8,5,7,4],[0,1,1,2,4,2,4,7,4,0,4,7,7,6,8,3,3,1],[5,2,0,0,6,0,0,2,0,7,0,4,0,4,6,8,8,7],[6,5,4,0,6,3,6,3,6,0,4,7,0,0,4,2,2,5]],"inverse_S18":[[4,8,0,6,7,5,1,1,1,4,1,4,8,4,0,5,3,3],[7,3,4,7,3,5,2,0,5,6,2,1,5,6,4,5,3,2],[8,4,2,8,7,4,2,5,4,5,1,3,6,1,1,6,1,1],[0,4,0,1,5,5,5,7,0,4,4,6,0,7,0,2,8,3],[3,1,7,8,4,1,6,4,4,5,7,8,0,0,8,8,0,4],[8,6,8,0,4,0,4,1,8,4,5,2,1,8,0,2,7,2],[7,7,3,6,1,4,3,7,0,3,4,2,8,2,0,6,7,0],[0,0,0,7,6,1,2,3,0,3,4,8,0,0,0,0,8,1],[0,7,0,7,8,4,7,8,7,3,6,4,0,2,0,2,3,8],[3,5,7,6,0,5,2,6,6,5,3,8,3,3,4,5,3,6],[6,8,7,1,1,8,0,8,2,7,6,7,4,0,2,8,8,2],[8,2,1,2,5,3,5,7,6,7,8,5,3,4,1,0,2,4],[8,3,0,6,6,3,8,5,7,7,4,1,0,3,1,7,6,7],[0,8,0,1,4,0,5,4,6,4,3,6,4,3,0,7,0,6],[0,0,0,5,4,1,1,3,0,1,0,7,0,2,0,0,4,5],[1,2,1,8,5,5,1,8,4,2,0,3,0,2,5,6,2,6],[6,3,6,5,6,2,2,2,7,4,1,4,0,3,8,2,2,4],[0,0,0,0,4,3,6,0,0,8,5,0,0,0,0,3,8,5]]} diff --git a/research/pg29-matched-dirty-completion/PROOF.md b/research/pg29-matched-dirty-completion/PROOF.md new file mode 100644 index 0000000000..7d4f078221 --- /dev/null +++ b/research/pg29-matched-dirty-completion/PROOF.md @@ -0,0 +1,86 @@ +# Matched-stub scalar completion over GF9 + +Let `F=F3[t]/(t^2+1)`. The transcript in `dirty-word.json` specifies 182 +invertible local maps of size five. It orders their inputs and outputs on +175 boundary stubs. The first 157 boundary inputs are message variables. +The other 18 inputs are the two ends of each of nine C edges. The last +18 outputs are the two ends of each of nine J edges. Every boundary input +is a separate formal variable in the first replay. + +The transcript is a finite matrix over F, not a physical recursive supplier. +It uses the projective-plane code of Braverman and He, with each former zero +C stub made an independent input. Its field operations and local program are +checked separately from the original verifier. + +## Independent-stub map + +The complete boundary transfer is + +```text +M = [ I157 F ] + [ G H ]. +``` + +The exact replay gives `rank(F)=9`, `rank(G)=9`, and `rank(H)=18`. +It gives `rank(M)=175` and an invertible 18 by 18 Schur matrix `H-GF`. +These ranks do not make M a permutation of its input roles. In particular, +F and G are nonzero. Arbitrary independent C inputs can affect message +outputs, and messages can affect J outputs. + +The separate replay checks every local five by five matrix, follows every +one of the 735 physical edge transmissions, and compares all 175 output +coefficient rows with the saved transfer. It then checks rank(M) by exact +elimination over F. This is coverage of every input, not random testing. + +## Matched inputs and the quotient + +Let P be the 18 by 9 matrix that gives the same value to both input stubs +of each C edge. Its nine columns are indicators of the nine disjoint pairs. +Let Q choose one output from each J pair. The exact checks establish: + +1. `FP=0`. +2. The two rows of G in each J pair agree. +3. The two rows of HP in each J pair agree. +4. `D=QHP` is invertible. + +Put `B=QG`. On the 166-dimensional input space `(x,z)`, the matched transfer +therefore has the exact form + +```text +(x,z) -> (x, Bx + Dz). +``` + +The two copies of every J output agree before the quotient is taken. Thus +choosing one row per pair loses no information on this specified input +subspace. The result does not assert equality for arbitrary independent +values on the 18 C stubs. + +Apply D inverse to the nine returned values, then subtract `D^-1 B x`. +The composite is + +```text +(x, Bx + Dz) -> (x, D^-1 Bx + z) -> (x,z). +``` + +The matrices in `PG29-FACTORS.json` give this complete scalar correction. +`completion.py` computes them with separate field arithmetic and checks all +166 formal columns of the identity. It also checks both products with each +inverse and compares every saved factor entry. The correction `D^-1 B` +has rank nine and 1,243 nonzero coefficients. D has 74 nonzero coefficients. +These are matrix counts, not recursive call costs. + +## Interface and cost boundary + +This is a complete finite scalar identity on the matched input subspace. +The correction uses unrestricted linear combinations of the message and +junk values. It does not supply legal rational common frames for these +combinations. It does not price preparation of matched inputs, the physical +return of pairs, frame transitions, controller access, or recursive children. +The 735 transmissions are the original network's physical edge count; +they are not an admitted paid profile for integer multiplication. + +A physical implementation must first realize the matched-input injection, +all local maps, the quotient, and the complete inverse correction at legal +frames. It must then charge them and restore every borrowed value. A matrix +inverse at the boundary does not meet those obligations. No complex companion, +complete supplier, or kappa improvement follows from this scalar identity. diff --git a/research/pg29-matched-dirty-completion/README.md b/research/pg29-matched-dirty-completion/README.md new file mode 100644 index 0000000000..21015f3cbd --- /dev/null +++ b/research/pg29-matched-dirty-completion/README.md @@ -0,0 +1,85 @@ +# A finite dirty completion of the PG(2,9) scalar code + +This package gives an exact boundary transfer and a scalar completion for +the Braverman-He 182-vertex code. It replaces the former zero-valued C stubs +by independent formal inputs, obtains an invertible 175-input transfer, and +identifies a 166-input matched-stub subspace on which all 157 message outputs +remain correct. An explicit nine-value inverse correction restores the junk. + +This is a new finite interface calculation, not a physical supplier or a +kappa improvement. It identifies exactly which arbitrary-input coupling a +future physical construction must handle. [PROOF.md](PROOF.md) states the +identity and its boundary. The local transcript and all correction matrices +are included, so the result can be checked without a network fetch. + +## Result + +The 175 by 175 transfer is `M=[[I157,F],[G,H]]`, with F and G of rank nine, +H of rank 18, and `H-GF` invertible. M is invertible but is not a permutation. +If the two inputs of each C pair are equal, the 157 message outputs are +independent of that junk. Both outputs in every J pair then agree. Taking +one output per pair gives `(x,z)->(x,Bx+Dz)` with D invertible, of size nine. +The included inverse correction gives the identity on all 166 formal inputs. + +The correction matrix `D^-1 B` has rank nine and 1,243 nonzero coefficients. +The original transcript has 735 physical edge transmissions. Neither count +is a recursive paid bill. Matched-input preparation, legal rational frames, +physical return, correction cost, hosting, and the complete compiler remain +unproved. There is no complex companion or verified kappa improvement. + +## Reproduce + +From the repository root, Python 3.10 or later and its standard library: + +```sh +python3 -B research/pg29-matched-dirty-completion/verify.py +``` + +Expected final line: + +```text +PASS_PG29_DIRTY_PACKAGE independent_stubs=175 matched_inputs=166 no_new_kappa +``` + +The wrapper checks source hashes, runs both separate-field replays in a +temporary copy, and compares their complete receipts. The first replay +checks local invertibility, every boundary coefficient, full rank, and +matched-pair identities. The second computes and compares the inverse +factors and checks all 166 identity columns. The supplied scripts remain +active when the wrapper is run with `-O`, because it starts ordinary Python +child processes. These are exact finite checks, not a Lean theorem, a +complete supplier replay, independent human review, or hosted CI success. + +## Sources and credit + +Publication base: `cef4b52f2a59009865bf8eabde1be3f159063703`. +Braverman and He supplied the code in +[arXiv:2610.10108v1](https://arxiv.org/abs/2610.10108v1), section 4, and its +[companion source](https://github.com/zhongtianhe/multiple-unicast-counterexample/tree/3436359a85d13a1bf6e87c3a3dbdaa64788277f4). +The transcript was derived from that exact source and checked against its +original verifier. Its source and input hashes are recorded in `SOURCES.json`. +The original companion implementation is not redistributed here. The +mathematical transcript and separate replay code are sufficient to verify +the stated boundary map. The source derivation is provenance, not a claim +that the present verifier independently derives the published code from +the projective geometry. + +The known common-target sign-gauge obstruction in +[PR #288](https://github.com/CrocSwap/integer-mult-bounds/pull/288) concerns a +physical frame embedding. It is not supplied or resolved by this scalar +completion. Its compiler and network-coding lineage retain their credit. + +Ali Romman directed this work with substantial OpenAI Codex assistance, +including separate research agents for field replay and completion review. +New work is Apache-2.0. `ORIGINS.json` records each local source and the +limited publication changes. The original conditional price experiment was +omitted because its proposed physical profiles remain unbuilt. Attribution +does not imply review or endorsement by Braverman, He, or any predecessor. + +## Open next questions + +Can the matched-input injection and nine-value correction be realized at +legal rational frames? First give a concrete physical implementation of +one correction map with arbitrary dirt restored, then count its complete +recursive children. The absence of a frame embedding and a paid invoice +is the present blocker; the scalar inverse does not remove it. diff --git a/research/pg29-matched-dirty-completion/SOURCE-HASHES.json b/research/pg29-matched-dirty-completion/SOURCE-HASHES.json new file mode 100644 index 0000000000..453c0bce1a --- /dev/null +++ b/research/pg29-matched-dirty-completion/SOURCE-HASHES.json @@ -0,0 +1,15 @@ +{ + "COMPLETION-RESULT.json": "e144d0745aeeaea08da0d7f9b2dcd9556dcc57e617ac8acbdef36cc0b0ceed3c", + "HISTORICAL-DIRTY-RESULT.json": "c0f73c6983a4aec4edb2c9a4d63a68336e93e6c24d75e2b7bcae6d33df800d84", + "INDEPENDENT-DIRTY.json": "e53be4b542cb39b239742ac4db4db03edf3ce94887f403538a3c1e6043bed307", + "ORIGINS.json": "40f8707e58aa14e21ad15d50cc74b35afd6bb5056fd583a1ccce15e427fddbcb", + "PG29-COMPLETION.json": "df3aeba706075dd89bafd114542a1f06f0ac8c709064916d7fe96c51f2c1b96a", + "PG29-FACTORS.json": "fcf9cd3c6a5d36972c351ece5ab8c0495349e385be224ebb26490adb30c009fb", + "PROOF.md": "464d0a3e7825d702b515af904e9058fd6ce8ff1220d8ea41bf54b86a0dd16112", + "README.md": "2de699a5c7a52b3c8559f11039fcf685bed126a540a06500ddee46e2131bb952", + "SOURCES.json": "fbc6c616f7bccb063054b0a0f530bf54f9ce0caeb4b728214215ee38f4922791", + "completion.py": "00fe61fc09e65c07e9d05e6e7e719fd10c1f04883009d6ca25d06bc52ecf56ba", + "dirty-word.json": "112532d00d991979ce21b2f74b48cd5bffdb1420abea44f2571f667a628a261f", + "independent_dirty.py": "686ddfa0443b1081eba1516121a2b1978ab9f38b076d9ad37cc8693e426fe168", + "verify.py": "ae69c9ca45140c6407340b563d278f14306a85f4ca33b8cb66d5887edd5eb9a7" +} diff --git a/research/pg29-matched-dirty-completion/SOURCES.json b/research/pg29-matched-dirty-completion/SOURCES.json new file mode 100644 index 0000000000..9dba0e1760 --- /dev/null +++ b/research/pg29-matched-dirty-completion/SOURCES.json @@ -0,0 +1,19 @@ +{ + "base_commit": "cef4b52f2a59009865bf8eabde1be3f159063703", + "primary_paper": "https://arxiv.org/abs/2610.10108v1", + "primary_repository": "https://github.com/zhongtianhe/multiple-unicast-counterexample", + "primary_commit": "3436359a85d13a1bf6e87c3a3dbdaa64788277f4", + "primary_code_provenance": { + "url": "https://github.com/zhongtianhe/multiple-unicast-counterexample/blob/3436359a85d13a1bf6e87c3a3dbdaa64788277f4/verify.py", + "sha256": "3be25d94a25e8ea8b484a1fb614a697e0a24e4519b647febc64b2d314f44d758", + "redistributed": false + }, + "primary_parameter_sha256": "f47b7f8af378fe7f86c7da32f04533b419711e468997c30ddef30a3a791dba01", + "local_transcript": { + "path": "dirty-word.json", + "sha256": "112532d00d991979ce21b2f74b48cd5bffdb1420abea44f2571f667a628a261f", + "role": "All local matrices and complete 175-input transfer; newly generated finite mathematical data." + }, + "new_kappa": false, + "primary_parameter_url": "https://github.com/zhongtianhe/multiple-unicast-counterexample/blob/3436359a85d13a1bf6e87c3a3dbdaa64788277f4/data/182-vertex-code.json" +} diff --git a/research/pg29-matched-dirty-completion/completion.py b/research/pg29-matched-dirty-completion/completion.py new file mode 100644 index 0000000000..252350b532 --- /dev/null +++ b/research/pg29-matched-dirty-completion/completion.py @@ -0,0 +1,189 @@ +"""Check the finite scalar completion with separate field arithmetic.""" + +import hashlib +import json +from collections import defaultdict +from pathlib import Path + + +HERE = Path(__file__).resolve().parent +SOURCE = HERE / "dirty-word.json" + + +def add(left, right): + lb, la = divmod(left, 3) + rb, ra = divmod(right, 3) + return (la + ra) % 3 + 3 * ((lb + rb) % 3) + + +def product(left, right): + lb, la = divmod(left, 3) + rb, ra = divmod(right, 3) + polynomial = [la * ra, la * rb + lb * ra, lb * rb] + return (polynomial[0] - polynomial[2]) % 3 + 3 * (polynomial[1] % 3) + + +def negative(value): + return product(2, value) + + +def power(value, exponent): + result = 1 + while exponent: + if exponent & 1: + result = product(result, value) + value = product(value, value) + exponent >>= 1 + return result + + +def inverse_element(value): + assert value != 0 + result = power(value, 7) + assert product(value, result) == 1 + return result + + +def combination(coefficients, vectors): + assert len(coefficients) == len(vectors) + result = [0] * len(vectors[0]) + for coefficient, vector in zip(coefficients, vectors): + if coefficient: + result = [add(current, product(coefficient, entry)) + for current, entry in zip(result, vector)] + return result + + +def matrix_product(left, right): + assert len(left[0]) == len(right) + return [combination(row, right) for row in left] + + +def identity(size): + return [[int(i == j) for j in range(size)] for i in range(size)] + + +def reduced(matrix): + rows = [list(row) for row in matrix] + pivots = [] + for j in range(len(rows[0])): + pivot = next((i for i in range(len(pivots), len(rows)) if rows[i][j]), None) + if pivot is None: + continue + r = len(pivots) + rows[r], rows[pivot] = rows[pivot], rows[r] + scale = inverse_element(rows[r][j]) + rows[r] = [product(scale, entry) for entry in rows[r]] + for i in range(len(rows)): + if i != r and rows[i][j]: + coefficient = negative(rows[i][j]) + rows[i] = [add(entry, product(coefficient, base)) + for entry, base in zip(rows[i], rows[r])] + pivots.append(j) + return rows, pivots + + +def matrix_inverse(matrix): + n = len(matrix) + assert all(len(row) == n for row in matrix) + rows, pivots = reduced([row + unit for row, unit in zip(matrix, identity(n))]) + assert pivots[:n] == list(range(n)) + assert [row[:n] for row in rows] == identity(n) + result = [row[n:] for row in rows] + assert matrix_product(matrix, result) == matrix_product(result, matrix) == identity(n) + return result + + +for a in range(1, 9): + assert power(a, 8) == 1 +assert product(3, 3) == 2 +raw = SOURCE.read_bytes() +assert hashlib.sha256(raw).hexdigest() == "112532d00d991979ce21b2f74b48cd5bffdb1420abea44f2571f667a628a261f" +word = json.loads(raw) +assert len(word["inputs"]) == len(word["outputs"]) == 175 +assert len(word["local_words"]) == 182 +units = identity(175) +inputs = {tuple(stub): units[i] for i, stub in enumerate(word["inputs"])} +outputs = {} +output_keys = {tuple(stub) for stub in word["outputs"]} +packets = {} +physical = 0 +for local in word["local_words"]: + vertex = local["vertex"] + assert len(local["known_edges"]) == len(local["unknown_edges"]) == 5 + assert len(local["matrix"]) == 5 + matrix_inverse(local["matrix"]) + known = [inputs[vertex, edge] if (vertex, edge) in inputs else packets[edge] + for edge in local["known_edges"]] + unknown = matrix_product(local["matrix"], known) + for edge, vector in zip(local["unknown_edges"], unknown): + if (vertex, edge) in output_keys: + assert (vertex, edge) not in outputs + outputs[vertex, edge] = vector + else: + assert edge not in packets + packets[edge] = vector + physical += 1 +transfer = [outputs[tuple(stub)] for stub in word["outputs"]] +assert transfer == word["transfer"] +assert physical == 735 +assert [row[:157] for row in transfer[:157]] == identity(157) + +input_edges = defaultdict(list) +output_edges = defaultdict(list) +for i, (_, edge) in enumerate(word["inputs"][157:]): + input_edges[edge].append(i) +for i, (_, edge) in enumerate(word["outputs"][157:]): + output_edges[edge].append(i) +assert len(input_edges) == len(output_edges) == 9 +assert all(len(indices) == 2 for indices in (*input_edges.values(), *output_edges.values())) +input_pairs = list(input_edges.values()) +output_pairs = list(output_edges.values()) +quotient_rows = [row[:157] + [add(row[157 + a], row[157 + b]) for a, b in input_pairs] + for row in transfer] +assert quotient_rows[:157] == [row + [0] * 9 for row in identity(157)] +assert all(quotient_rows[157 + a] == quotient_rows[157 + b] for a, b in output_pairs) +junk_rows = [quotient_rows[157 + a] for a, b in output_pairs] +b9 = [row[:157] for row in junk_rows] +d9 = [row[157:] for row in junk_rows] +inverse_d9 = matrix_inverse(d9) +correction = matrix_product(inverse_d9, b9) +normalized = matrix_product(inverse_d9, junk_rows) +completed = [[add(entry, negative(error)) for entry, error in zip(row, corr + [0] * 9)] + for row, corr in zip(normalized, correction)] +assert completed == [[0] * 157 + row for row in identity(9)] +full_completion = quotient_rows[:157] + completed +assert full_completion == identity(166) +correction_rank = len(reduced(correction)[1]) +assert correction_rank == 9 + +a18 = [row[157:] for row in transfer[:157]] +b18 = [row[:157] for row in transfer[157:]] +d18 = [row[157:] for row in transfer[157:]] +ba = matrix_product(b18, a18) +s18 = [[add(entry, negative(error)) for entry, error in zip(row, other)] + for row, other in zip(d18, ba)] +inverse_s18 = matrix_inverse(s18) +factors_path = HERE / "PG29-FACTORS.json" +factors = json.loads(factors_path.read_text()) +independent_factors = dict(B9=b9, D9=d9, inverse_D9=inverse_d9, + correction=correction, S18=s18, inverse_S18=inverse_s18) +assert factors == independent_factors +producer = json.loads((HERE / "PG29-COMPLETION.json").read_text()) +assert producer["source_word_sha256"] == hashlib.sha256(raw).hexdigest() +assert producer["matched_C_edges"] == list(input_edges) +assert producer["matched_J_edges"] == list(output_edges) +assert producer["D9_nonzeros"] == sum(bool(value) for row in d9 for value in row) == 74 +assert producer["correction_nonzeros"] == sum(bool(value) for row in correction for value in row) == 1243 + + +receipt = dict(status="PASS_PG29_MATCHED_DIRTY_COMPLETION", source_word_sha256=hashlib.sha256(raw).hexdigest(), + field="F3[t]/(t^2+1), encoded by a+3b", independent_field_operations=True, + local_maps=182, physical_transmissions=physical, independent_input_stubs=175, + matched_input_pairs=9, matched_output_pairs=9, quotient_dimension=166, + correction_rank=correction_rank, all_formal_columns_restored=True, + generic_schur_dimension=18, generic_schur_invertible=True, + D9_nonzeros=74, correction_nonzeros=1243, + physical_frames=False, paid_supplier=False, new_kappa=False) +(HERE/"COMPLETION-RESULT.json").write_text(json.dumps(receipt,indent=2)+"\n") +print(json.dumps(receipt,indent=2)) diff --git a/research/pg29-matched-dirty-completion/dirty-word.json b/research/pg29-matched-dirty-completion/dirty-word.json new file mode 100644 index 0000000000..331d27c9f2 --- /dev/null +++ b/research/pg29-matched-dirty-completion/dirty-word.json @@ -0,0 +1 @@ +{"inputs":[[0,7],[0,8],[0,9],[93,30],[101,31],[171,38],[181,39],[5,56],[5,57],[6,60],[6,68],[7,75],[7,79],[8,84],[8,88],[9,94],[157,117],[12,122],[12,127],[12,128],[14,141],[15,151],[15,154],[15,155],[15,157],[16,166],[16,167],[16,168],[17,176],[17,179],[124,183],[160,187],[119,203],[160,207],[168,208],[21,212],[21,215],[22,221],[22,224],[22,225],[23,231],[23,234],[23,236],[23,237],[23,238],[114,242],[119,243],[107,251],[119,253],[26,266],[28,282],[93,290],[30,300],[30,309],[31,318],[32,321],[32,324],[32,325],[96,330],[123,333],[171,338],[38,380],[38,387],[38,389],[39,396],[39,398],[40,400],[40,401],[40,407],[40,409],[41,411],[41,412],[41,418],[42,425],[42,426],[42,428],[43,439],[128,444],[128,454],[167,458],[167,464],[168,465],[171,468],[96,480],[102,481],[118,492],[116,502],[127,503],[132,504],[107,521],[114,522],[160,527],[179,539],[54,541],[54,544],[54,548],[174,552],[179,557],[181,559],[56,569],[57,579],[126,583],[143,585],[168,588],[114,592],[120,593],[167,598],[117,602],[157,607],[61,612],[61,619],[93,620],[118,632],[132,634],[157,643],[160,646],[93,670],[114,672],[124,673],[113,682],[138,685],[172,688],[132,694],[143,695],[107,701],[118,702],[126,703],[174,709],[171,718],[143,737],[74,746],[75,754],[75,757],[75,759],[123,773],[79,790],[146,821],[83,835],[83,837],[83,838],[83,839],[102,841],[116,842],[124,843],[146,846],[99,850],[127,853],[146,856],[157,857],[88,882],[88,884],[88,885],[88,887],[90,900],[90,901],[90,904],[90,907],[10,102],[16,163],[16,164],[34,341],[38,386],[40,406],[47,476],[51,513],[86,862],[93,102],[107,341],[118,862],[124,513],[125,163],[134,164],[147,406],[147,476],[149,386]],"outputs":[[155,7],[164,8],[173,9],[3,30],[3,31],[3,38],[3,39],[152,56],[163,57],[100,60],[165,68],[144,75],[178,79],[133,84],[166,88],[136,94],[11,117],[111,122],[156,127],[165,128],[108,141],[109,151],[136,154],[145,155],[163,157],[152,166],[161,167],[170,168],[150,176],[177,179],[18,183],[18,187],[20,203],[20,207],[20,208],[112,212],[142,215],[104,221],[133,224],[145,225],[108,231],[130,234],[150,236],[158,237],[165,238],[24,242],[24,243],[25,251],[25,253],[151,266],[111,282],[29,290],[94,300],[178,309],[166,318],[108,321],[131,324],[145,325],[33,330],[33,333],[33,338],[98,380],[156,387],[177,389],[152,396],[169,398],[94,400],[104,401],[161,407],[180,409],[108,411],[112,412],[170,418],[144,425],[151,426],[166,428],[178,439],[44,444],[45,454],[45,458],[46,464],[46,465],[46,468],[48,480],[48,481],[49,492],[50,502],[50,503],[50,504],[52,521],[52,522],[52,527],[53,539],[106,541],[136,544],[164,548],[55,552],[55,557],[55,559],[173,569],[173,579],[58,583],[58,585],[58,588],[59,592],[59,593],[59,598],[60,602],[60,607],[111,612],[173,619],[62,620],[63,632],[63,634],[64,643],[64,646],[67,670],[67,672],[67,673],[68,682],[68,685],[68,688],[69,694],[69,695],[70,701],[70,702],[70,703],[70,709],[71,718],[73,737],[151,746],[133,754],[161,757],[175,759],[77,773],[100,790],[82,821],[145,835],[161,837],[165,838],[178,839],[84,841],[84,842],[84,843],[84,846],[85,850],[85,853],[85,856],[85,857],[112,882],[133,884],[144,885],[156,887],[94,900],[106,901],[130,904],[163,907],[10,103],[34,349],[47,470],[51,517],[60,603],[60,606],[67,674],[71,716],[86,861],[94,103],[100,470],[108,861],[125,603],[134,674],[147,716],[149,606],[161,517],[177,349]],"local_words":[{"vertex":93,"known_edges":[30,102,290,620,670],"unknown_edges":[210,430,540,780,860],"matrix":[[3,7,7,4,4],[7,3,4,8,7],[8,5,4,7,6],[8,4,5,6,7],[7,4,3,7,8]]},{"vertex":23,"known_edges":[231,234,236,237,238],"unknown_edges":[230,232,233,235,239],"matrix":[[3,7,8,7,8],[8,5,5,4,3],[8,4,3,5,5],[5,8,7,6,8],[5,6,8,8,7]]},{"vertex":16,"known_edges":[163,164,166,167,168],"unknown_edges":[160,161,162,165,169],"matrix":[[4,1,3,6,7],[7,1,8,3,3],[1,1,2,2,1],[6,1,6,5,4],[6,2,7,4,3]]},{"vertex":143,"known_edges":[165,235,585,695,737],"unknown_edges":[85,305,385,545,895],"matrix":[[2,2,1,2,2],[6,3,2,4,7],[3,7,2,6,4],[4,6,2,7,3],[7,4,2,3,6]]},{"vertex":107,"known_edges":[161,251,341,521,701],"unknown_edges":[17,431,611,791,881],"matrix":[[7,7,3,8,8],[8,6,5,8,7],[5,4,8,3,5],[6,8,5,7,8],[4,5,8,5,3]]},{"vertex":54,"known_edges":[540,541,544,545,548],"unknown_edges":[542,543,546,547,549],"matrix":[[7,8,4,3,7],[8,7,4,5,6],[3,4,7,7,4],[7,7,3,4,8],[8,6,5,4,7]]},{"vertex":88,"known_edges":[881,882,884,885,887],"unknown_edges":[880,883,886,888,889],"matrix":[[5,6,8,3,2],[3,8,7,3,1],[4,6,6,5,1],[1,2,1,2,1],[3,7,6,4,2]]},{"vertex":38,"known_edges":[380,385,386,387,389],"unknown_edges":[381,382,383,384,388],"matrix":[[5,3,8,4,7],[5,4,7,3,8],[6,7,4,7,4],[4,4,6,5,7],[4,5,7,4,6]]},{"vertex":157,"known_edges":[117,547,607,643,857],"unknown_edges":[77,267,327,397,797],"matrix":[[7,4,3,6,1],[1,1,2,2,1],[4,6,6,5,1],[3,6,7,4,2],[3,7,8,3,1]]},{"vertex":40,"known_edges":[400,401,406,407,409],"unknown_edges":[402,403,404,405,408],"matrix":[[8,7,6,4,5],[7,8,7,4,3],[7,7,8,3,4],[8,6,7,5,4],[3,4,4,7,7]]},{"vertex":171,"known_edges":[38,338,388,468,718],"unknown_edges":[148,228,578,798,908],"matrix":[[5,6,2,6,8],[3,8,1,6,7],[8,3,2,5,3],[2,1,2,2,2],[6,5,1,4,3]]},{"vertex":124,"known_edges":[183,383,513,673,843],"unknown_edges":[53,196,323,613,803],"matrix":[[3,7,8,7,8],[8,4,3,5,5],[8,5,5,4,3],[5,8,7,6,8],[5,6,8,8,7]]},{"vertex":123,"known_edges":[333,403,543,773,883],"unknown_edges":[63,173,195,563,663],"matrix":[[7,4,3,1,6],[1,1,2,1,2],[4,6,6,1,5],[3,6,7,2,4],[3,7,8,1,3]]},{"vertex":118,"known_edges":[382,492,632,702,862],"unknown_edges":[62,152,262,289,752],"matrix":[[8,2,5,3,6],[6,1,4,5,6],[6,2,3,4,7],[7,1,3,3,8],[1,1,1,2,2]]},{"vertex":90,"known_edges":[900,901,904,907,908],"unknown_edges":[902,903,905,906,909],"matrix":[[6,7,6,8,1],[4,3,5,3,2],[3,3,4,5,1],[7,8,6,6,2],[1,2,2,1,2]]},{"vertex":32,"known_edges":[321,323,324,325,327],"unknown_edges":[320,322,326,328,329],"matrix":[[7,8,7,8,3],[8,7,6,8,5],[6,8,8,7,5],[5,5,4,3,8],[4,3,5,5,8]]},{"vertex":15,"known_edges":[151,152,154,155,157],"unknown_edges":[150,153,156,158,159],"matrix":[[5,6,8,3,2],[3,8,7,3,1],[4,6,6,5,1],[1,2,1,2,1],[3,7,6,4,2]]},{"vertex":146,"known_edges":[821,846,856,886,906],"unknown_edges":[6,836,866,876,896],"matrix":[[8,3,2,5,6],[6,5,1,4,6],[6,4,2,3,7],[1,2,1,1,2],[7,3,1,3,8]]},{"vertex":114,"known_edges":[242,522,592,672,902],"unknown_edges":[82,172,285,392,742],"matrix":[[7,6,1,4,3],[1,2,1,1,2],[4,5,1,6,6],[3,3,1,7,8],[3,4,2,6,7]]},{"vertex":179,"known_edges":[169,329,539,557,909],"unknown_edges":[69,219,429,659,769],"matrix":[[8,7,8,7,3],[7,8,8,6,5],[8,6,7,8,5],[3,4,5,5,8],[5,5,3,4,8]]},{"vertex":181,"known_edges":[39,159,239,559,889],"unknown_edges":[319,399,479,729,809],"matrix":[[2,1,1,1,1],[1,3,5,6,8],[1,8,6,3,5],[1,6,8,5,3],[1,5,3,8,6]]},{"vertex":39,"known_edges":[392,396,397,398,399],"unknown_edges":[390,391,393,394,395],"matrix":[[8,8,3,7,7],[3,5,8,4,5],[8,7,5,6,8],[5,3,8,5,4],[7,8,5,8,6]]},{"vertex":128,"known_edges":[384,394,404,444,454],"unknown_edges":[4,371,414,424,434],"matrix":[[2,2,1,2,2],[6,3,2,4,7],[3,7,2,6,4],[4,6,2,7,3],[7,4,2,3,6]]},{"vertex":0,"known_edges":[4,6,7,8,9],"unknown_edges":[0,1,2,3,5],"matrix":[[3,6,8,2,5],[5,6,6,1,4],[4,7,6,2,3],[3,8,7,1,3],[2,2,1,1,1]]},{"vertex":119,"known_edges":[3,203,233,243,253],"unknown_edges":[191,213,223,263,273],"matrix":[[3,6,1,7,8],[2,2,2,2,1],[5,6,2,8,6],[8,5,2,3,3],[6,4,1,3,5]]},{"vertex":83,"known_edges":[835,836,837,838,839],"unknown_edges":[830,831,832,833,834],"matrix":[[6,3,2,5,8],[7,4,2,3,6],[8,3,1,3,7],[6,5,1,4,6],[2,2,1,1,1]]},{"vertex":21,"known_edges":[210,212,213,215,219],"unknown_edges":[211,214,216,217,218],"matrix":[[6,4,4,7,7],[5,7,8,4,3],[4,7,6,5,4],[5,8,7,3,4],[4,6,7,4,5]]},{"vertex":6,"known_edges":[60,62,63,68,69],"unknown_edges":[61,64,65,66,67],"matrix":[[2,5,8,6,3],[1,1,1,1,1],[2,8,3,5,6],[2,6,5,3,8],[2,3,6,8,5]]},{"vertex":132,"known_edges":[214,504,634,694,834],"unknown_edges":[54,174,314,375,794],"matrix":[[7,6,1,4,3],[1,2,1,1,2],[4,5,1,6,6],[3,3,1,7,8],[3,4,2,6,7]]},{"vertex":160,"known_edges":[67,187,207,527,646],"unknown_edges":[317,417,577,787,897],"matrix":[[6,4,4,7,7],[4,6,7,5,4],[5,8,7,4,3],[4,7,6,4,5],[5,7,8,3,4]]},{"vertex":17,"known_edges":[172,173,174,176,179],"unknown_edges":[170,171,175,177,178],"matrix":[[8,7,8,7,3],[7,8,8,6,5],[8,6,7,8,5],[5,5,3,4,8],[3,4,5,5,8]]},{"vertex":79,"known_edges":[790,791,794,797,798],"unknown_edges":[792,793,795,796,799],"matrix":[[6,7,6,8,1],[4,3,5,3,2],[3,3,4,5,1],[7,8,6,6,2],[1,2,2,1,2]]},{"vertex":22,"known_edges":[221,223,224,225,228],"unknown_edges":[220,222,226,227,229],"matrix":[[6,7,1,3,4],[4,3,2,7,6],[5,4,1,6,6],[3,3,1,8,7],[2,1,1,2,1]]},{"vertex":42,"known_edges":[424,425,426,428,429],"unknown_edges":[420,421,422,423,427],"matrix":[[2,8,5,3,6],[2,6,3,4,7],[1,6,4,5,6],[1,7,3,3,8],[1,1,1,2,2]]},{"vertex":41,"known_edges":[411,412,414,417,418],"unknown_edges":[410,413,415,416,419],"matrix":[[8,3,2,5,6],[6,5,1,4,6],[1,2,1,1,2],[6,4,2,3,7],[7,3,1,3,8]]},{"vertex":174,"known_edges":[229,419,549,552,709],"unknown_edges":[59,129,359,749,879],"matrix":[[5,4,4,6,5],[5,5,3,8,4],[6,8,7,5,8],[4,3,5,8,5],[8,7,8,5,6]]},{"vertex":5,"known_edges":[53,54,56,57,59],"unknown_edges":[50,51,52,55,58],"matrix":[[2,6,5,3,8],[1,2,1,2,1],[2,7,3,4,6],[1,8,3,3,7],[1,6,4,5,6]]},{"vertex":167,"known_edges":[58,458,464,598,888],"unknown_edges":[138,268,308,658,788],"matrix":[[4,3,5,3,2],[7,8,6,6,2],[1,2,2,1,2],[6,7,6,8,1],[3,3,4,5,1]]},{"vertex":26,"known_edges":[262,263,266,267,268],"unknown_edges":[260,261,264,265,269],"matrix":[[1,3,4,7,6],[1,6,6,4,5],[1,2,1,1,2],[1,8,7,3,3],[2,7,6,3,4]]},{"vertex":96,"known_edges":[260,330,410,480,830],"unknown_edges":[80,105,610,720,760],"matrix":[[1,3,7,6,4],[1,6,4,5,6],[2,7,3,4,6],[1,2,1,2,1],[1,8,3,3,7]]},{"vertex":8,"known_edges":[80,82,84,85,88],"unknown_edges":[81,83,86,87,89],"matrix":[[6,7,1,8,6],[4,3,2,3,5],[1,2,2,1,2],[3,3,1,5,4],[7,8,2,6,6]]},{"vertex":61,"known_edges":[610,611,612,613,619],"unknown_edges":[614,615,616,617,618],"matrix":[[4,3,5,3,2],[7,8,6,6,2],[1,2,2,1,2],[6,7,6,8,1],[3,3,4,5,1]]},{"vertex":168,"known_edges":[178,208,328,465,588],"unknown_edges":[48,438,728,758,878],"matrix":[[2,5,8,6,3],[1,1,1,2,2],[2,3,6,7,4],[1,3,7,8,3],[1,4,6,6,5]]},{"vertex":101,"known_edges":[1,31,51,61,81],"unknown_edges":[11,21,41,71,91],"matrix":[[8,7,5,4,6],[7,8,3,4,7],[3,4,7,7,4],[8,6,4,5,7],[7,7,4,3,8]]},{"vertex":75,"known_edges":[752,754,757,758,759],"unknown_edges":[750,751,753,755,756],"matrix":[[5,5,4,4,6],[5,4,5,3,8],[6,8,8,7,5],[4,5,3,5,8],[8,6,7,8,5]]},{"vertex":43,"known_edges":[430,431,434,438,439],"unknown_edges":[432,433,435,436,437],"matrix":[[1,3,5,6,8],[1,6,8,5,3],[1,8,6,3,5],[1,5,3,8,6],[2,1,1,1,1]]},{"vertex":102,"known_edges":[211,391,481,751,841],"unknown_edges":[12,121,301,571,661],"matrix":[[6,5,4,4,5],[5,6,7,8,8],[5,8,8,7,6],[8,4,5,3,5],[8,5,3,5,4]]},{"vertex":127,"known_edges":[83,153,433,503,853],"unknown_edges":[199,353,573,653,813],"matrix":[[2,2,2,2,1],[3,6,1,7,8],[5,6,2,8,6],[8,5,2,3,3],[6,4,1,3,5]]},{"vertex":99,"known_edges":[50,230,420,750,850],"unknown_edges":[108,360,520,560,710],"matrix":[[6,3,5,1,4],[2,2,1,2,2],[5,8,6,2,6],[3,7,8,1,6],[8,3,3,2,5]]},{"vertex":12,"known_edges":[121,122,127,128,129],"unknown_edges":[120,123,124,125,126],"matrix":[[3,6,8,5,2],[2,2,1,1,1],[5,6,6,4,1],[3,8,7,3,1],[4,7,6,3,2]]},{"vertex":30,"known_edges":[300,301,305,308,309],"unknown_edges":[302,303,304,306,307],"matrix":[[5,6,8,2,6],[3,8,7,1,6],[6,5,3,1,4],[2,1,2,2,2],[8,3,3,2,5]]},{"vertex":57,"known_edges":[571,573,577,578,579],"unknown_edges":[570,572,574,575,576],"matrix":[[6,3,5,2,8],[2,2,1,1,1],[8,3,3,1,7],[7,4,3,2,6],[6,5,4,1,6]]},{"vertex":147,"known_edges":[86,126,326,406,476],"unknown_edges":[256,636,716,786,822],"matrix":[[7,3,7,4,8],[7,4,8,3,7],[3,7,4,7,4],[8,5,6,4,7],[8,4,7,5,6]]},{"vertex":92,"known_edges":[0,120,150,160,170],"unknown_edges":[101,110,130,140,180],"matrix":[[1,6,8,3,5],[1,3,5,8,6],[1,5,3,6,8],[1,8,6,5,3],[2,1,1,1,1]]},{"vertex":138,"known_edges":[125,265,435,685,905],"unknown_edges":[95,315,515,565,732],"matrix":[[4,5,6,4,5],[5,4,8,3,5],[7,6,5,8,8],[8,8,5,7,6],[3,5,8,5,4]]},{"vertex":159,"known_edges":[177,227,307,427,617],"unknown_edges":[97,477,645,817,867],"matrix":[[8,2,5,3,6],[1,1,1,2,2],[6,1,4,5,6],[6,2,3,4,7],[7,1,3,3,8]]},{"vertex":113,"known_edges":[422,542,572,682,832],"unknown_edges":[42,132,252,284,802],"matrix":[[8,2,5,3,6],[6,1,4,5,6],[6,2,3,4,7],[7,1,3,3,8],[1,1,1,2,2]]},{"vertex":31,"known_edges":[314,315,317,318,319],"unknown_edges":[310,311,312,313,316],"matrix":[[6,3,5,8,2],[8,3,3,7,1],[6,5,4,6,1],[7,4,3,6,2],[2,2,1,1,1]]},{"vertex":172,"known_edges":[158,218,408,618,688],"unknown_edges":[78,368,469,748,898],"matrix":[[7,8,7,8,3],[8,7,6,8,5],[6,8,8,7,5],[4,3,5,5,8],[5,5,4,3,8]]},{"vertex":7,"known_edges":[71,75,77,78,79],"unknown_edges":[70,72,73,74,76],"matrix":[[8,8,7,7,3],[8,7,6,8,5],[3,5,4,5,8],[7,8,8,6,5],[5,3,5,4,8]]},{"vertex":116,"known_edges":[72,162,222,502,842],"unknown_edges":[287,442,562,722,782],"matrix":[[5,8,2,6,6],[2,2,2,2,1],[3,7,1,6,8],[6,3,1,4,5],[8,3,2,5,3]]},{"vertex":78,"known_edges":[780,782,786,787,788],"unknown_edges":[781,783,784,785,789],"matrix":[[2,2,1,2,2],[6,3,5,4,1],[3,7,8,6,1],[5,8,6,6,2],[8,3,3,5,2]]},{"vertex":28,"known_edges":[282,284,285,287,289],"unknown_edges":[280,281,283,286,288],"matrix":[[7,1,6,3,4],[4,1,5,6,6],[1,1,2,2,1],[3,1,3,8,7],[3,2,4,7,6]]},{"vertex":126,"known_edges":[393,583,703,783,833],"unknown_edges":[93,143,198,363,533],"matrix":[[6,3,5,2,8],[8,3,3,1,7],[7,4,3,2,6],[6,5,4,1,6],[2,2,1,1,1]]},{"vertex":19,"known_edges":[191,195,196,198,199],"unknown_edges":[190,192,193,194,197],"matrix":[[1,2,2,2,2],[2,3,7,6,4],[2,4,6,7,3],[2,6,3,4,7],[2,7,4,3,6]]},{"vertex":120,"known_edges":[123,192,423,593,793],"unknown_edges":[23,293,493,723,893],"matrix":[[1,3,6,7,4],[1,6,5,4,6],[2,7,4,3,6],[1,8,3,3,7],[1,2,2,1,1]]},{"vertex":89,"known_edges":[893,895,896,897,898],"unknown_edges":[890,891,892,894,899],"matrix":[[7,1,6,4,3],[1,1,2,1,2],[4,1,5,6,6],[3,1,3,7,8],[3,2,4,6,7]]},{"vertex":117,"known_edges":[52,288,432,602,892],"unknown_edges":[142,272,472,662,762],"matrix":[[6,7,1,8,6],[4,3,2,3,5],[1,2,2,1,2],[3,3,1,5,4],[7,8,2,6,6]]},{"vertex":9,"known_edges":[91,93,94,95,97],"unknown_edges":[90,92,96,98,99],"matrix":[[7,8,7,8,3],[8,7,6,8,5],[6,8,8,7,5],[5,5,4,3,8],[4,3,5,5,8]]},{"vertex":14,"known_edges":[140,141,142,143,148],"unknown_edges":[144,145,146,147,149],"matrix":[[7,6,6,8,2],[1,2,1,2,2],[4,5,3,3,2],[3,4,5,3,1],[6,6,8,7,1]]},{"vertex":122,"known_edges":[73,194,413,753,903],"unknown_edges":[133,343,473,623,693],"matrix":[[6,3,5,1,4],[2,2,1,2,2],[5,8,6,2,6],[3,7,8,1,6],[8,3,3,2,5]]},{"vertex":56,"known_edges":[560,562,563,565,569],"unknown_edges":[561,564,566,567,568],"matrix":[[6,4,4,7,7],[5,7,8,4,3],[4,7,6,5,4],[5,8,7,3,4],[4,6,7,4,5]]},{"vertex":72,"known_edges":[720,722,723,728,729],"unknown_edges":[721,724,725,726,727],"matrix":[[2,5,8,6,3],[1,1,1,1,1],[2,8,3,5,6],[2,6,5,3,8],[2,3,6,8,5]]},{"vertex":115,"known_edges":[92,232,286,402,792],"unknown_edges":[182,482,622,652,872],"matrix":[[5,2,8,6,6],[8,2,3,3,5],[6,1,3,5,4],[3,1,7,8,6],[2,2,2,1,2]]},{"vertex":153,"known_edges":[146,316,546,616,756],"unknown_edges":[26,246,446,656,828],"matrix":[[7,6,3,1,4],[3,4,7,2,6],[4,5,6,1,6],[1,2,2,1,1],[3,3,8,1,7]]},{"vertex":47,"known_edges":[472,473,476,477,479],"unknown_edges":[470,471,474,475,478],"matrix":[[5,4,6,5,4],[4,5,8,5,3],[8,8,5,6,7],[6,7,5,8,8],[5,3,8,4,5]]},{"vertex":65,"known_edges":[652,653,656,658,659],"unknown_edges":[650,651,654,655,657],"matrix":[[6,5,2,3,8],[8,3,1,3,7],[7,3,2,4,6],[2,1,1,2,1],[6,4,1,5,6]]},{"vertex":103,"known_edges":[381,471,561,651,831],"unknown_edges":[13,111,201,291,741],"matrix":[[8,2,5,3,6],[6,1,4,5,6],[6,2,3,4,7],[7,1,3,3,8],[1,1,1,2,2]]},{"vertex":74,"known_edges":[741,742,746,748,749],"unknown_edges":[740,743,744,745,747],"matrix":[[4,3,7,1,6],[6,7,3,2,4],[1,2,1,1,2],[6,6,4,1,5],[7,8,3,1,3]]},{"vertex":137,"known_edges":[5,745,755,785,795],"unknown_edges":[731,765,775,805,815],"matrix":[[5,8,2,6,6],[3,7,1,6,8],[2,2,2,2,1],[6,3,1,4,5],[8,3,2,5,3]]},{"vertex":97,"known_edges":[90,320,570,740,880],"unknown_edges":[106,270,440,490,690],"matrix":[[4,3,5,2,3],[6,7,6,1,8],[7,8,6,2,6],[3,3,4,1,5],[1,2,2,2,1]]},{"vertex":10,"known_edges":[101,102,105,106,108],"unknown_edges":[100,103,104,107,109],"matrix":[[8,7,7,8,3],[7,8,6,8,5],[8,6,8,7,5],[3,4,5,5,8],[5,5,4,3,8]]},{"vertex":110,"known_edges":[2,281,302,312,322],"unknown_edges":[292,332,342,352,362],"matrix":[[7,3,7,4,8],[7,4,8,3,7],[3,7,4,7,4],[8,5,6,4,7],[8,4,7,5,6]]},{"vertex":154,"known_edges":[156,306,416,566,796],"unknown_edges":[46,276,536,676,829],"matrix":[[2,2,2,2,1],[6,3,4,7,2],[7,4,3,6,2],[3,7,6,4,2],[4,6,7,3,2]]},{"vertex":135,"known_edges":[64,144,304,724,744],"unknown_edges":[254,378,514,624,854],"matrix":[[4,6,4,7,5],[6,4,7,4,7],[5,8,3,7,4],[5,7,4,8,3],[4,7,5,6,4]]},{"vertex":95,"known_edges":[104,220,390,650,890],"unknown_edges":[40,340,510,630,770],"matrix":[[4,5,6,4,5],[5,4,8,3,5],[7,6,5,8,8],[8,8,5,7,6],[3,5,8,5,4]]},{"vertex":4,"known_edges":[40,41,42,46,48],"unknown_edges":[43,44,45,47,49],"matrix":[[5,8,2,6,6],[6,3,1,5,4],[8,3,2,3,5],[2,2,2,1,2],[3,7,1,8,6]]},{"vertex":125,"known_edges":[43,163,197,313,743],"unknown_edges":[453,483,603,713,863],"matrix":[[4,3,3,5,2],[1,2,1,2,2],[7,8,6,6,2],[6,7,8,6,1],[3,3,5,4,1]]},{"vertex":86,"known_edges":[860,862,863,866,867],"unknown_edges":[861,864,865,868,869],"matrix":[[8,5,2,3,3],[6,4,1,3,5],[2,2,2,2,1],[3,6,1,7,8],[5,6,2,8,6]]},{"vertex":139,"known_edges":[55,405,575,725,865],"unknown_edges":[115,245,345,535,733],"matrix":[[2,5,6,8,3],[1,1,1,1,1],[2,3,8,6,5],[2,8,5,3,6],[2,6,3,5,8]]},{"vertex":34,"known_edges":[340,341,342,343,345],"unknown_edges":[344,346,347,348,349],"matrix":[[6,7,8,6,1],[3,3,5,4,1],[4,3,3,5,2],[1,2,1,2,2],[7,8,6,6,2]]},{"vertex":162,"known_edges":[87,147,217,347,567],"unknown_edges":[457,497,648,807,877],"matrix":[[6,7,6,8,1],[3,3,4,5,1],[4,3,5,3,2],[7,8,6,6,2],[1,2,2,1,2]]},{"vertex":80,"known_edges":[802,803,805,807,809],"unknown_edges":[800,801,804,806,808],"matrix":[[6,1,7,4,3],[3,1,3,7,8],[2,1,1,1,2],[5,1,4,6,6],[4,2,3,6,7]]},{"vertex":87,"known_edges":[872,876,877,878,879],"unknown_edges":[870,871,873,874,875],"matrix":[[8,8,3,7,7],[3,5,8,4,5],[8,7,5,6,8],[5,3,8,5,4],[7,8,5,8,6]]},{"vertex":129,"known_edges":[74,124,654,804,864],"unknown_edges":[274,334,372,524,584],"matrix":[[6,1,8,7,6],[3,1,5,3,4],[1,2,1,2,2],[4,2,3,3,5],[7,2,6,8,6]]},{"vertex":27,"known_edges":[270,272,273,274,276],"unknown_edges":[271,275,277,278,279],"matrix":[[4,4,6,5,7],[4,5,7,4,6],[5,3,8,4,7],[5,4,7,3,8],[6,7,4,7,4]]},{"vertex":134,"known_edges":[164,264,474,574,874],"unknown_edges":[24,364,377,674,774],"matrix":[[4,3,1,6,7],[6,7,2,4,3],[7,8,1,3,3],[1,2,1,2,1],[6,6,1,5,4]]},{"vertex":140,"known_edges":[65,275,395,615,875],"unknown_edges":[135,295,505,715,734],"matrix":[[3,8,6,1,7],[5,6,6,2,8],[8,3,5,2,3],[2,1,2,2,2],[6,5,4,1,3]]},{"vertex":36,"known_edges":[360,362,363,364,368],"unknown_edges":[361,365,366,367,369],"matrix":[[8,2,5,3,3],[5,2,6,6,8],[3,1,6,8,7],[6,1,4,5,3],[2,2,2,1,2]]},{"vertex":13,"known_edges":[130,132,133,135,138],"unknown_edges":[131,134,136,137,139],"matrix":[[1,1,2,2,2],[4,3,2,3,5],[6,8,1,7,6],[7,6,2,8,6],[3,5,1,3,4]]},{"vertex":148,"known_edges":[66,226,366,436,806],"unknown_edges":[116,486,596,696,823],"matrix":[[5,2,8,6,6],[8,2,3,3,5],[6,1,3,5,4],[3,1,7,8,6],[2,2,2,1,2]]},{"vertex":149,"known_edges":[96,136,216,386,726],"unknown_edges":[356,526,606,776,824],"matrix":[[1,1,2,2,2],[3,5,1,4,3],[7,6,2,6,8],[6,8,1,6,7],[4,3,2,5,3]]},{"vertex":82,"known_edges":[822,823,824,828,829],"unknown_edges":[820,821,825,826,827],"matrix":[[2,2,1,2,2],[3,6,2,7,4],[6,4,2,3,7],[7,3,2,4,6],[4,7,2,6,3]]},{"vertex":37,"known_edges":[371,372,375,377,378],"unknown_edges":[370,373,374,376,379],"matrix":[[6,5,2,3,8],[8,3,1,3,7],[2,1,1,2,1],[7,3,2,4,6],[6,4,1,5,6]]},{"vertex":176,"known_edges":[89,139,369,799,869],"unknown_edges":[209,449,519,554,669],"matrix":[[7,7,3,8,4],[8,7,4,6,5],[8,6,5,7,4],[3,4,7,4,7],[7,8,4,7,3]]},{"vertex":91,"known_edges":[100,190,280,370,820],"unknown_edges":[10,460,550,640,730],"matrix":[[7,3,7,8,8],[4,8,5,3,5],[6,5,8,8,7],[8,5,6,7,8],[5,8,4,5,3]]},{"vertex":73,"known_edges":[730,731,732,733,734],"unknown_edges":[735,736,737,738,739],"matrix":[[3,5,4,3,1],[6,8,6,7,1],[1,1,2,2,2],[7,6,6,8,2],[4,3,5,3,2]]},{"vertex":1,"known_edges":[10,11,12,13,17],"unknown_edges":[14,15,16,18,19],"matrix":[[1,1,2,2,2],[4,3,3,5,2],[7,6,8,6,2],[6,8,7,6,1],[3,5,3,4,1]]},{"vertex":51,"known_edges":[510,513,514,515,519],"unknown_edges":[511,512,516,517,518],"matrix":[[1,6,3,5,8],[1,3,8,6,5],[2,1,1,1,1],[1,5,6,8,3],[1,8,5,3,6]]},{"vertex":141,"known_edges":[175,365,415,655,735],"unknown_edges":[35,255,495,605,845],"matrix":[[7,8,3,7,8],[8,7,5,6,8],[5,5,8,4,3],[4,3,8,5,5],[6,8,5,8,7]]},{"vertex":105,"known_edges":[15,171,261,801,891],"unknown_edges":[351,441,531,621,711],"matrix":[[4,4,6,7,5],[5,4,7,8,3],[6,7,4,4,7],[5,3,8,7,4],[4,5,7,6,4]]},{"vertex":109,"known_edges":[19,421,511,781,871],"unknown_edges":[151,241,331,601,691],"matrix":[[8,7,4,5,6],[3,4,7,7,4],[8,6,5,4,7],[7,7,3,4,8],[7,8,4,3,7]]},{"vertex":35,"known_edges":[351,352,353,356,359],"unknown_edges":[350,354,355,357,358],"matrix":[[1,1,2,1,1],[7,6,2,4,3],[3,4,2,7,6],[4,3,2,6,7],[6,7,2,3,4]]},{"vertex":44,"known_edges":[440,441,442,446,449],"unknown_edges":[443,444,445,447,448],"matrix":[[2,1,1,1,1],[1,6,8,3,5],[1,5,3,6,8],[1,3,5,8,6],[1,8,6,5,3]]},{"vertex":130,"known_edges":[44,354,373,614,784],"unknown_edges":[114,234,494,664,904],"matrix":[[2,2,2,2,1],[3,6,7,1,8],[5,6,8,2,6],[6,4,3,1,5],[8,5,3,2,3]]},{"vertex":66,"known_edges":[661,662,663,664,669],"unknown_edges":[660,665,666,667,668],"matrix":[[4,6,4,5,5],[7,5,8,6,8],[3,8,5,5,4],[5,8,3,4,5],[8,5,7,8,6]]},{"vertex":11,"known_edges":[110,111,114,115,116],"unknown_edges":[112,113,117,118,119],"matrix":[[6,1,8,7,6],[3,1,5,3,4],[1,2,1,2,2],[4,2,3,3,5],[7,2,6,8,6]]},{"vertex":98,"known_edges":[70,107,310,660,870],"unknown_edges":[250,380,530,590,810],"matrix":[[2,5,8,6,3],[2,8,3,5,6],[1,1,1,1,1],[2,6,5,3,8],[2,3,6,8,5]]},{"vertex":121,"known_edges":[113,193,303,443,873],"unknown_edges":[33,523,633,683,763],"matrix":[[7,3,7,8,8],[4,8,5,3,5],[6,5,8,8,7],[8,5,6,7,8],[5,8,4,5,3]]},{"vertex":25,"known_edges":[250,252,254,255,256],"unknown_edges":[251,253,257,258,259],"matrix":[[3,1,4,5,3],[6,1,6,8,7],[7,2,6,6,8],[1,2,2,1,2],[4,2,5,3,3]]},{"vertex":76,"known_edges":[760,762,763,765,769],"unknown_edges":[761,764,766,767,768],"matrix":[[6,4,4,7,7],[5,7,8,4,3],[4,7,6,5,4],[5,8,7,3,4],[4,6,7,4,5]]},{"vertex":169,"known_edges":[258,358,568,768,868],"unknown_edges":[28,188,398,466,698],"matrix":[[3,8,2,6,5],[5,6,1,6,4],[4,6,2,7,3],[2,1,1,2,1],[3,7,1,8,3]]},{"vertex":49,"known_edges":[490,493,494,495,497],"unknown_edges":[491,492,496,498,499],"matrix":[[8,3,2,3,5],[6,5,1,3,4],[5,6,2,8,6],[2,1,2,2,2],[3,8,1,7,6]]},{"vertex":53,"known_edges":[530,531,533,535,536],"unknown_edges":[532,534,537,538,539],"matrix":[[7,7,3,8,4],[7,8,4,7,3],[8,7,4,6,5],[8,6,5,7,4],[3,4,7,4,7]]},{"vertex":150,"known_edges":[76,516,576,766,825],"unknown_edges":[176,236,296,456,706],"matrix":[[1,1,1,1,1],[2,8,3,5,6],[2,6,5,3,8],[2,5,8,6,3],[2,3,6,8,5]]},{"vertex":2,"known_edges":[21,23,24,26,28],"unknown_edges":[20,22,25,27,29],"matrix":[[2,2,2,2,1],[3,6,7,4,2],[4,7,6,3,2],[6,4,3,7,2],[7,3,4,6,2]]},{"vertex":104,"known_edges":[14,131,311,491,761],"unknown_edges":[221,401,581,671,851],"matrix":[[2,1,1,1,1],[1,6,8,3,5],[1,5,3,6,8],[1,3,5,8,6],[1,8,6,5,3]]},{"vertex":29,"known_edges":[291,292,293,295,296],"unknown_edges":[290,294,297,298,299],"matrix":[[2,8,5,3,6],[1,1,1,2,2],[2,6,3,4,7],[1,6,4,5,6],[1,7,3,3,8]]},{"vertex":158,"known_edges":[27,137,437,537,747],"unknown_edges":[237,337,637,644,847],"matrix":[[4,5,7,6,4],[5,4,7,8,3],[6,7,4,4,7],[4,4,6,7,5],[5,3,8,7,4]]},{"vertex":69,"known_edges":[690,691,693,696,698],"unknown_edges":[692,694,695,697,699],"matrix":[[5,8,2,6,6],[2,2,2,2,1],[3,7,1,6,8],[6,3,1,4,5],[8,3,2,5,3]]},{"vertex":180,"known_edges":[49,149,269,299,699],"unknown_edges":[409,529,558,819,849],"matrix":[[1,1,2,2,2],[7,6,6,8,2],[4,3,5,3,2],[3,5,4,3,1],[6,8,6,7,1]]},{"vertex":81,"known_edges":[810,813,815,817,819],"unknown_edges":[811,812,814,816,818],"matrix":[[2,2,1,2,2],[3,6,8,7,1],[6,4,5,3,1],[8,5,3,3,2],[5,6,6,8,2]]},{"vertex":52,"known_edges":[520,523,524,526,529],"unknown_edges":[521,522,525,527,528],"matrix":[[3,4,1,5,3],[7,6,2,6,8],[1,2,2,1,2],[6,6,1,8,7],[4,5,2,3,3]]},{"vertex":106,"known_edges":[16,271,361,721,811],"unknown_edges":[181,451,541,631,901],"matrix":[[7,3,7,8,4],[8,5,6,7,4],[3,7,4,4,7],[8,4,7,6,5],[7,4,8,7,3]]},{"vertex":112,"known_edges":[22,112,283,512,812],"unknown_edges":[212,412,582,712,882],"matrix":[[2,1,1,1,1],[1,6,8,3,5],[1,5,3,6,8],[1,3,5,8,6],[1,8,6,5,3]]},{"vertex":131,"known_edges":[134,374,564,814,894],"unknown_edges":[34,244,324,484,704],"matrix":[[4,3,1,7,6],[1,2,1,1,2],[7,8,1,3,3],[6,6,1,4,5],[6,7,2,3,4]]},{"vertex":164,"known_edges":[478,498,518,528,538],"unknown_edges":[8,461,488,508,548],"matrix":[[7,3,4,1,6],[4,6,6,1,5],[1,2,1,1,2],[3,7,6,2,4],[3,8,7,1,3]]},{"vertex":63,"known_edges":[630,631,633,636,637],"unknown_edges":[632,634,635,638,639],"matrix":[[6,4,4,7,7],[4,6,7,5,4],[5,8,7,4,3],[5,7,8,3,4],[4,7,6,4,5]]},{"vertex":71,"known_edges":[710,711,712,713,715],"unknown_edges":[714,716,717,718,719],"matrix":[[6,7,8,6,1],[3,3,5,4,1],[4,3,3,5,2],[1,2,1,2,2],[7,8,6,6,2]]},{"vertex":170,"known_edges":[98,298,638,668,808],"unknown_edges":[168,248,418,467,858],"matrix":[[1,6,8,3,5],[1,3,5,8,6],[1,5,3,6,8],[1,8,6,5,3],[2,1,1,1,1]]},{"vertex":155,"known_edges":[657,667,697,717,727],"unknown_edges":[7,641,677,687,707],"matrix":[[3,8,2,6,5],[5,6,1,6,4],[4,6,2,7,3],[2,1,1,2,1],[3,7,1,8,3]]},{"vertex":24,"known_edges":[241,244,245,246,248],"unknown_edges":[240,242,243,247,249],"matrix":[[5,4,4,6,5],[5,3,5,8,4],[6,7,8,5,8],[4,5,3,8,5],[8,8,7,5,6]]},{"vertex":64,"known_edges":[640,641,644,645,648],"unknown_edges":[642,643,646,647,649],"matrix":[[7,8,4,3,7],[8,7,4,5,6],[3,4,7,7,4],[7,7,3,4,8],[8,6,5,4,7]]},{"vertex":156,"known_edges":[47,247,367,642,767],"unknown_edges":[127,387,507,627,887],"matrix":[[7,3,7,8,4],[8,5,6,7,4],[3,7,4,4,7],[8,4,7,6,5],[7,4,8,7,3]]},{"vertex":62,"known_edges":[621,622,623,624,627],"unknown_edges":[620,625,626,628,629],"matrix":[[2,1,1,1,1],[2,7,6,4,3],[2,3,4,7,6],[2,4,3,6,7],[2,6,7,3,4]]},{"vertex":48,"known_edges":[482,483,484,486,488],"unknown_edges":[480,481,485,487,489],"matrix":[[3,1,7,6,4],[6,1,4,5,6],[7,2,3,4,6],[2,1,1,2,1],[8,1,3,3,7]]},{"vertex":46,"known_edges":[460,461,466,467,469],"unknown_edges":[462,463,464,465,468],"matrix":[[8,7,6,4,5],[7,8,7,4,3],[7,7,8,3,4],[8,6,7,5,4],[3,4,4,7,7]]},{"vertex":145,"known_edges":[25,525,625,665,739],"unknown_edges":[155,225,325,455,835],"matrix":[[5,8,3,4,7],[6,4,7,7,4],[5,7,4,3,8],[4,6,4,5,7],[4,7,5,4,6]]},{"vertex":163,"known_edges":[257,297,447,487,649],"unknown_edges":[57,157,587,777,907],"matrix":[[6,7,3,1,4],[4,3,7,2,6],[5,4,6,1,6],[3,3,8,1,7],[2,1,2,1,1]]},{"vertex":45,"known_edges":[451,453,455,456,457],"unknown_edges":[450,452,454,458,459],"matrix":[[6,1,4,3,7],[3,1,7,8,3],[4,2,6,7,3],[2,1,1,2,1],[5,1,6,6,4]]},{"vertex":77,"known_edges":[770,774,775,776,777],"unknown_edges":[771,772,773,778,779],"matrix":[[1,1,2,2,2],[7,6,6,8,2],[4,3,5,3,2],[3,5,4,3,1],[6,8,6,7,1]]},{"vertex":175,"known_edges":[99,119,259,459,899],"unknown_edges":[339,509,553,679,759],"matrix":[[8,2,5,3,3],[2,2,2,2,1],[6,1,4,3,5],[5,2,6,8,6],[3,1,6,7,8]]},{"vertex":33,"known_edges":[331,332,334,337,339],"unknown_edges":[330,333,335,336,338],"matrix":[[7,8,3,7,8],[8,7,5,6,8],[4,3,8,5,5],[5,5,8,4,3],[6,8,5,8,7]]},{"vertex":142,"known_edges":[45,335,445,475,736],"unknown_edges":[185,215,595,705,855],"matrix":[[6,5,3,1,4],[8,3,3,2,5],[5,6,8,2,6],[2,1,2,2,2],[3,8,7,1,6]]},{"vertex":18,"known_edges":[180,181,182,185,188],"unknown_edges":[183,184,186,187,189],"matrix":[[1,2,1,2,2],[3,1,5,4,3],[7,2,6,6,8],[6,1,8,6,7],[4,2,3,5,3]]},{"vertex":178,"known_edges":[189,249,499,719,779],"unknown_edges":[79,309,439,556,839],"matrix":[[3,8,2,6,5],[5,6,1,6,4],[2,1,1,2,1],[4,6,2,7,3],[3,7,1,8,3]]},{"vertex":166,"known_edges":[118,278,463,628,778],"unknown_edges":[88,318,428,708,848],"matrix":[[5,4,4,5,6],[4,5,3,5,8],[5,3,5,4,8],[6,7,8,8,5],[8,8,7,6,5]]},{"vertex":144,"known_edges":[145,355,485,635,738],"unknown_edges":[75,205,425,675,885],"matrix":[[7,6,3,1,4],[3,4,7,2,6],[4,5,6,1,6],[1,2,2,1,1],[3,3,8,1,7]]},{"vertex":152,"known_edges":[336,496,626,816,827],"unknown_edges":[56,166,206,396,686],"matrix":[[2,6,5,3,8],[2,7,3,4,6],[1,2,1,2,1],[1,8,3,3,7],[1,6,4,5,6]]},{"vertex":55,"known_edges":[550,553,554,556,558],"unknown_edges":[551,552,555,557,559],"matrix":[[2,2,2,2,1],[6,3,4,1,5],[8,3,5,2,3],[3,7,6,1,8],[5,8,6,2,6]]},{"vertex":67,"known_edges":[671,675,676,677,679],"unknown_edges":[670,672,673,674,678],"matrix":[[4,7,6,3,1],[1,1,2,2,1],[7,3,3,8,1],[6,3,4,7,2],[6,4,5,6,1]]},{"vertex":70,"known_edges":[704,705,706,707,708],"unknown_edges":[700,701,702,703,709],"matrix":[[8,5,2,3,6],[6,4,1,5,6],[7,3,1,3,8],[6,3,2,4,7],[1,1,1,2,2]]},{"vertex":177,"known_edges":[29,279,489,555,789],"unknown_edges":[179,349,389,689,859],"matrix":[[4,3,3,2,5],[6,7,8,1,6],[1,2,1,2,2],[7,8,6,2,6],[3,3,5,1,4]]},{"vertex":85,"known_edges":[851,854,855,858,859],"unknown_edges":[850,852,853,856,857],"matrix":[[4,3,1,6,7],[7,8,1,3,3],[1,2,1,2,1],[6,6,1,5,4],[6,7,2,4,3]]},{"vertex":111,"known_edges":[452,532,692,772,852],"unknown_edges":[32,122,202,282,612],"matrix":[[3,6,8,5,2],[5,6,6,4,1],[3,8,7,3,1],[4,7,6,3,2],[2,2,1,1,1]]},{"vertex":20,"known_edges":[201,202,205,206,209],"unknown_edges":[200,203,204,207,208],"matrix":[[7,6,1,3,4],[3,4,2,7,6],[4,5,1,6,6],[1,2,1,2,1],[3,3,1,8,7]]},{"vertex":136,"known_edges":[204,344,379,714,764],"unknown_edges":[94,154,544,594,844],"matrix":[[3,4,7,6,1],[7,6,3,4,2],[6,6,4,5,1],[2,1,1,2,1],[8,7,3,3,1]]},{"vertex":84,"known_edges":[844,845,847,848,849],"unknown_edges":[840,841,842,843,846],"matrix":[[6,3,5,8,2],[8,3,3,7,1],[6,5,4,6,1],[7,4,3,6,2],[2,2,1,1,1]]},{"vertex":100,"known_edges":[109,240,350,450,840],"unknown_edges":[60,470,580,680,790],"matrix":[[7,3,7,8,8],[4,8,5,3,5],[6,5,8,8,7],[8,5,6,7,8],[5,8,4,5,3]]},{"vertex":58,"known_edges":[580,581,582,584,587],"unknown_edges":[583,585,586,588,589],"matrix":[[1,1,2,2,2],[6,8,1,7,6],[4,3,2,3,5],[3,5,1,3,4],[7,6,2,8,6]]},{"vertex":151,"known_edges":[186,346,586,666,826],"unknown_edges":[36,266,426,506,746],"matrix":[[6,5,2,3,8],[8,3,1,3,7],[2,1,1,2,1],[7,3,2,4,6],[6,4,1,5,6]]},{"vertex":68,"known_edges":[680,683,686,687,689],"unknown_edges":[681,682,684,685,688],"matrix":[[6,7,6,1,8],[4,3,5,2,3],[3,3,4,1,5],[7,8,6,2,6],[1,2,2,2,1]]},{"vertex":50,"known_edges":[505,506,507,508,509],"unknown_edges":[500,501,502,503,504],"matrix":[[6,3,2,5,8],[7,4,2,3,6],[8,3,1,3,7],[6,5,1,4,6],[2,2,1,1,1]]},{"vertex":133,"known_edges":[184,294,376,534,684],"unknown_edges":[84,224,604,754,884],"matrix":[[4,5,4,5,6],[5,4,3,5,8],[3,5,5,4,8],[8,8,7,6,5],[7,6,8,8,5]]},{"vertex":165,"known_edges":[348,448,462,678,818],"unknown_edges":[68,128,238,608,838],"matrix":[[1,2,2,2,2],[2,6,4,3,7],[2,7,3,4,6],[2,3,6,7,4],[2,4,7,6,3]]},{"vertex":94,"known_edges":[20,200,500,700,800],"unknown_edges":[103,300,400,600,900],"matrix":[[6,7,6,1,8],[4,3,5,2,3],[3,3,4,1,5],[7,8,6,2,6],[1,2,2,2,1]]},{"vertex":60,"known_edges":[600,601,604,605,608],"unknown_edges":[602,603,606,607,609],"matrix":[[7,8,4,3,7],[8,7,4,5,6],[3,4,7,7,4],[7,7,3,4,8],[8,6,5,4,7]]},{"vertex":173,"known_edges":[551,589,609,629,639],"unknown_edges":[9,569,579,599,619],"matrix":[[4,3,1,7,6],[1,2,1,1,2],[7,8,1,3,3],[6,6,1,4,5],[6,7,2,3,4]]},{"vertex":3,"known_edges":[32,33,34,35,36],"unknown_edges":[30,31,37,38,39],"matrix":[[6,3,2,5,8],[2,2,1,1,1],[7,4,2,3,6],[8,3,1,3,7],[6,5,1,4,6]]},{"vertex":59,"known_edges":[590,594,595,596,599],"unknown_edges":[591,592,593,597,598],"matrix":[[7,6,8,6,2],[4,5,3,3,2],[1,2,2,1,2],[3,4,3,5,1],[6,6,7,8,1]]},{"vertex":161,"known_edges":[37,277,357,597,647],"unknown_edges":[167,407,517,757,837],"matrix":[[5,8,2,6,6],[3,7,1,6,8],[2,2,2,2,1],[6,3,1,4,5],[8,3,2,5,3]]},{"vertex":108,"known_edges":[18,501,591,681,771],"unknown_edges":[141,231,321,411,861],"matrix":[[5,8,3,4,7],[6,4,7,7,4],[5,7,4,3,8],[4,6,4,5,7],[4,7,5,4,6]]}],"transfer":[[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,4,0,1,3,2,3,3,6,0,6,6,6,8,6,1,2],[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,7,8,1,5,4,8,7,6,7,2,3,5,5,4,8,4,7],[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,1,8,5,6,4,4,0,8,4,7,4,0,2,4,8,8,3],[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,2,8,5,5,7,1,0,0,4,0,2,8,1,7,5,7],[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,7,3,8,7,3,8,5,8,6,7,4,2,5,5,6,4],[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,4,6,0,7,0,2,7,5,3,5,1,4,8,5,0,0],[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,3,1,3,8,6,3,8,5,2,4,6,4,6,4,3,6],[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,0,2,2,6,6,3,8,2,1,4,6,3,0,3,3,1],[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,7,0,4,0,3,7,3,4,1,8,8,6,5,0,6,5,0],[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,6,8,0,7,1,3,6,0,4,3,6,1,3,5,2,0],[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,2,1,0,0,8,3,6,6,4,0,3,3,1,2,4,6,0],[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,7,8,6,4,0,0,7,4,4,5,0,4,5,8,0,3],[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,3,7,6,8,7,6,7,7,5,3,5,5,6,5,5,3,4],[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,3,6,4,6,4,2,1,5,8,8,7,2,6,3,8,1,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,5,0,7,5,4,1,8,0,0,4,2,4,7,7,8,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,2,1,8,2,5,2,2,7,6,4,5,1,1,2,7,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,5,8,0,8,1,0,1,4,4,2,0,4,7,4,2,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,7,2,1,3,1,5,0,5,1,0,7,0,5,6,2,2],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,1,0,8,4,7,8,2,2,4,5,2,1,4,8,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,8,0,7,7,3,2,4,4,3,5,8,8,4,0,6,1,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,3,2,3,3,8,0,4,4,1,8,0,0,6,6,4,6],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,1,8,7,6,4,7,8,7,4,4,5,2,2,3,8,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,7,6,4,8,3,2,3,6,8,8,3,6,5,3,6,1,4],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,5,1,8,0,4,5,5,2,4,4,1,7,7,2,8,7,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,1,2,6,3,8,8,6,2,1,3,4,8,2,6,4,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,1,3,0,5,4,5,1,6,6,2,7,6,2,7,8,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,7,1,8,6,3,8,3,8,6,4,4,6,5,2,6,4,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,5,4,5,5,3,6,3,1,4,7,2,6,7,8,6,3,7],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,2,6,6,2,1,8,0,1,4,2,7,3,3,1,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,7,0,0,2,2,0,2,3,6,0,6,1,5,0,1,0,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,5,8,4,2,2,1,5,8,4,8,4,7,7,4,1,2,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,5,4,8,6,5,4,8,0,3,4,0,4,7,8,7,8,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,4,0,2,0,5,1,6,8,2,7,6,6,1,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,5,2,1,2,3,4,0,0,1,0,8,5,7,1,6,2],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,6,6,2,7,6,3,7,1,3,5,6,8,3,5,3,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,3,3,6,3,8,3,4,8,6,8,6,8,6,6,4,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,7,8,7,2,3,1,6,2,8,5,1,3,5,4,6,2,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,8,5,7,1,3,0,4,6,7,8,0,0,4,2,6,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,7,2,8,2,1,4,8,1,7,4,2,4,5,1,2,8,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,3,0,2,1,5,8,8,0,5,1,0,4,6,0,7,4,2],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,2,1,4,1,5,8,5,3,2,7,4,0,1,2,7,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,3,7,7,0,1,4,0,2,5,5,1,0,6,5,2,8,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,3,5,5,5,7,8,0,2,7,0,4,8,6,7,5,7],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,4,8,2,0,6,0,0,5,4,0,0,5,8,0,3,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,8,6,4,5,7,0,1,2,3,2,0,1,4,7,5,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,3,0,5,6,2,7,6,7,4,7,5,3,6,0,1,5,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,2,3,4,3,0,2,7,1,3,8,2,5,1,6,0,1,6],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,8,1,7,4,1,0,8,3,2,4,0,5,4,8,2,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,3,8,4,4,4,0,0,3,4,0,0,0,6,8,8,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7,5,1,4,4,6,6,1,7,3,3,6,5,8,8,2],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,1,3,3,2,3,8,4,0,6,8,4,4,2,1,6,6],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,3,6,1,7,1,0,2,7,4,2,5,1,6,3,2,0,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,7,2,4,5,4,2,6,4,7,8,8,3,5,1,8,1,7],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,6,6,3,6,7,2,7,5,5,6,7,5,3,3,5,1,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,4,5,1,0,3,0,0,6,0,0,1,7,2,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,5,3,4,4,5,2,5,0,6,7,1,3,7,8,7,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,8,7,7,6,6,4,0,6,6,5,3,0,4,5,3,8,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,8,2,3,3,1,3,6,4,6,2,6,0,6,6,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,0,6,5,5,2,7,6,5,3,3,5,2,0,7,1,7],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,5,7,2,4,6,2,1,2,5,2,1,7,7,8,3,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,7,0,6,7,7,5,2,1,0,1,7,2,5,5,5,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,5,5,0,2,4,0,8,6,7,4,0,0,7,1,8,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,3,2,1,0,2,5,8,2,8,2,1,4,6,1,1,7,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,1,4,1,8,3,2,3,8,8,6,1,4,2,4,6,2],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,3,1,5,3,6,5,1,7,4,7,5,2,6,2,3,7,6],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,7,7,8,1,6,0,2,2,5,1,0,2,5,2,3,4],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,4,2,0,7,5,5,2,8,7,7,6,7,0,5,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,3,6,2,7,5,0,0,3,7,1,6,0,6,3,7,0,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,2,7,3,5,7,8,1,8,4,6,4,2,1,5,5,4,7],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,7,5,2,6,0,7,3,1,6,1,2,6,5,7,0,5,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,2,0,0,7,2,5,4,6,7,0,3,8,1,0,1,7,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,6,7,0,4,4,2,0,4,5,0,1,5,3,8,8,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,8,8,4,0,8,7,1,8,4,2,5,2,4,0,4,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,4,0,0,8,0,5,0,8,7,0,5,4,0,4,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,1,8,5,5,0,4,5,4,4,7,8,3,2,7,0,7],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,4,2,6,5,2,5,1,2,1,2,7,8,8,7,1,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,5,8,1,6,4,8,5,4,1,2,8,7,7,4,8,4,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,2,8,6,6,5,0,7,2,4,5,0,7,1,3,7,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,7,4,7,6,3,5,2,8,1,5,4,1,5,8,6,7,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,5,2,1,6,6,8,3,6,8,2,3,6,7,1,3,4,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,1,6,2,0,7,1,7,6,3,5,2,8,2,0,5,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,7,4,7,4,0,1,0,5,2,0,2,5,5,8,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,6,6,3,6,6,4,1,3,8,3,1,0,6,3,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,7,1,0,5,5,0,2,7,2,1,0,3,5,7,7,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,3,2,3,2,7,4,0,3,4,6,6,0,6,1,5,8,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,5,0,6,7,1,6,0,7,4,3,5,0,7,0,2,3,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,4,6,4,7,7,6,1,5,4,8,7,2,8,3,5,3,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,7,2,0,2,7,2,0,5,1,5,5,0,0,1,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,7,7,2,0,3,3,8,7,5,4,6,0,5,0,6,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,4,2,8,8,2,4,0,3,1,0,8,5,8,4,1,4],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,2,1,7,4,1,0,1,1,3,5,2,2,1,2,2,0,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,3,5,1,1,7,3,5,2,7,7,6,8,6,2,5,2],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,8,4,2,8,8,0,2,6,8,1,0,8,4,4,4,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,7,1,7,2,4,7,0,3,7,5,6,0,5,2,8,5,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,3,1,1,6,7,5,0,3,3,2,6,0,6,2,5,7,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,1,0,0,8,0,2,5,3,3,0,6,7,2,0,0,1,4],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,2,8,4,2,0,2,1,0,1,1,2,4,8,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,6,1,0,7,2,6,8,1,6,0,2,4,3,2,1,3,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,8,6,8,3,4,7,8,1,3,4,2,4,4,3,8,5,6],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,2,7,6,6,0,7,2,3,5,3,6,1,1,5,0,5,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,1,1,6,0,0,8,1,2,4,0,0,1,3,0,2],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,1,1,7,3,5,2,7,2,4,5,1,5,2,2,7,1,6],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,3,4,5,0,5,4,8,2,7,7,1,4,6,8,7,8,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,2,0,1,2,6,7,4,8,0,8,5,8,1,1,3,2],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,4,3,4,2,6,0,7,2,6,5,0,3,8,1,3,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,8,5,7,8,1,3,1,1,7,2,6,1,4,4,2,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,3,4,5,6,7,8,2,3,8,1,4,3,6,3,5,7],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,7,2,8,2,1,8,4,3,1,8,4,3,5,1,2,4],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,0,3,6,7,4,8,6,2,6,3,4,8,0,5,8,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,2,3,0,1,1,6,3,0,8,0,0,6,1,6,2,3,2],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,4,8,7,7,0,0,7,8,0,0,2,6,5,5,4],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,8,8,8,4,4,6,6,3,4,3,3,5,4,8,8,4],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,1,3,6,4,6,7,0,5,4,3,7,0,2,6,3,5,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,6,4,6,8,2,0,4,8,8,8,0,0,3,4,1,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,3,0,5,5,4,5,2,0,0,1,7,4,6,7,8,7],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,7,6,7,8,2,8,0,1,4,0,8,3,5,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,8,5,8,8,1,6,0,1,7,0,3,0,4,4,2,4],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,8,4,4,5,7,8,0,4,4,5,5,5,8,7,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,8,3,0,1,1,3,2,2,6,1,6,1,4,2,2,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,4,4,3,4,3,8,1,6,3,6,3,2,8,8,6,4,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,7,0,1,0,5,5,1,8,7,2,4,2,5,0,7,7,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,7,7,2,3,8,0,0,2,5,0,0,0,5,6,4,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,4,1,4,3,3,5,7,4,2,5,7,3,8,6,6,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,4,0,2,8,5,1,3,8,5,1,4,6,8,0,7,2,4],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,3,0,8,3,1,1,1,0,0,2,2,3,6,6,2,4],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,1,0,7,7,8,3,1,2,3,5,1,2,2,0,4,6,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,4,5,1,2,1,7,3,8,5,2,4,6,8,7,2,5,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,1,6,6,7,6,4,2,4,3,3,8,1,2,3,3,8,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,7,0,2,2,4,1,7,6,7,1,3,5,5,0,8,2,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,3,1,4,1,5,0,1,2,2,2,0,8,6,2,7,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,5,1,2,4,5,7,0,7,5,7,4,3,1,8,2],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,1,8,3,0,6,7,4,4,5,6,8,8,2,4,3,5,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,4,4,2,5,8,8,1,0,4,1,0,2,8,8,4,4,7],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,2,7,1,0,7,8,8,7,7,2,5,4,1,5,5,4,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,2,1,5,7,6,1,1,7,7,7,5,2,1,2,3,2,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,2,8,5,2,2,4,5,1,8,7,2,7,1,4,1,8,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,7,4,2,5,4,2,0,2,7,1,1,0,5,8,8,1,7],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,3,8,3,7,7,2,0,1,4,0,1,1,6,5,5,6],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,0,3,6,2,8,0,6,7,6,3,0,2,0,1,4,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,7,7,3,4,5,3,0,1,5,0,6,2,5,8,7,6],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,3,8,4,2,1,8,5,2,8,8,1,7,6,4,2,4,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,2,0,7,1,4,3,0,6,6,5,3,0,1,0,8,6,2],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,4,6,7,4,2,1,4,2,3,5,1,8,8,3,1,2,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,6,7,2,5,1,4,5,2,2,3,7,1,1,5,1,8,7,2],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,6,6,2,0,0,8,8,6,2,3,0,1,3,3,1,4,4,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,4,4,6,3,3,5,6,5,6,8,6,3,7,8,3,7,3,6],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,5,3,0,7,3,4,3,8,2,0,4,6,7,6,6,8,5],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,5,8,5,3,4,1,0,3,3,7,6,6,6,4,7,2,0,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,3,2,4,0,4,1,8,7,8,6,0,4,5,1,8,2,4,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,7,0,7,1,2,6,4,8,1,5,2,2,4,0,5,3,8,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,3,1,7,3,8,2,7,8,3,6,6,6,4,2,5,1,5,4],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,3,3,4,8,4,5,1,0,5,6,4,7,0,6,8,7,2,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,8,2,5,5,4,6,1,1,2,4,7,1,2,1,7,3,2,8],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,4,5,0,8,7,3,5,4,4,0,8,7,8,7,5,6,4],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,5,2,0,7,6,5,0,0,5,7,5,7,0,1,0,7,0,3],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,5,8,0,8,0,6,0,0,0,7,4,0,0,4,0,3,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,3,1,6,6,1,2,2,2,8,3,1,1,6,2,2,1,3],[5,8,3,7,5,2,1,1,8,6,3,4,6,7,0,2,3,2,1,0,8,0,3,6,4,8,6,7,2,6,4,3,7,5,7,0,1,7,1,7,1,2,6,5,2,6,6,5,5,2,3,7,3,1,6,0,5,3,8,6,6,1,0,2,7,8,0,2,3,7,1,7,7,2,7,2,2,5,3,2,3,8,4,0,0,2,1,2,6,8,5,7,6,4,2,4,6,4,2,8,2,4,4,4,7,3,6,2,4,4,8,5,4,3,1,8,4,2,4,7,4,0,2,8,1,8,3,8,4,5,2,7,4,3,6,7,2,5,8,7,4,6,6,1,3,4,2,1,0,3,4,6,7,8,7,6,4,8,5,4,0,6,4,5,0,0,3,6,8,8,0,0,1,6,0],[6,6,6,1,7,1,0,3,1,7,2,1,3,7,3,1,8,8,5,8,8,6,8,1,0,8,5,1,0,7,5,6,8,1,5,0,1,5,8,3,6,4,0,7,0,1,7,2,0,0,6,1,3,8,8,1,4,0,0,3,2,7,1,3,0,3,3,1,2,0,2,8,2,5,0,5,2,3,3,7,6,5,7,2,1,5,1,1,5,7,0,8,7,2,1,2,8,5,4,7,4,6,4,0,4,2,1,2,8,4,0,0,2,0,5,2,1,4,2,7,4,0,1,1,5,4,6,7,3,1,0,8,1,8,3,1,8,0,8,8,2,0,4,5,0,2,4,0,4,4,3,1,5,6,4,2,1,4,6,8,8,2,3,5,0,5,5,8,2,3,8,0,2,3,0],[8,3,7,4,6,4,5,2,3,4,2,6,4,3,0,0,4,5,0,1,0,6,3,5,4,2,5,1,1,2,2,0,0,7,1,1,5,1,2,3,3,4,1,7,0,3,8,6,4,3,4,6,2,3,0,1,3,4,7,0,0,1,4,7,3,4,2,3,5,3,5,7,2,4,8,0,1,8,5,7,1,7,7,5,2,3,6,7,0,1,8,5,8,7,1,6,4,1,2,0,8,8,0,6,0,2,4,5,5,7,5,5,7,2,1,7,2,0,6,8,0,6,8,3,7,4,6,4,8,2,0,1,2,7,7,8,4,5,0,8,2,1,0,3,8,0,3,6,6,2,6,8,1,4,8,4,4,0,8,1,0,5,4,6,0,0,7,7,1,0,0,0,1,6,0],[1,5,6,8,3,3,0,8,6,3,4,6,4,6,4,7,8,2,7,2,8,6,0,2,0,0,0,7,8,5,7,7,3,7,2,4,5,8,2,6,0,7,4,0,0,4,1,1,4,3,3,8,6,6,0,6,8,8,7,6,2,7,4,6,6,1,4,8,6,7,7,2,4,8,8,0,0,0,7,0,6,4,4,3,7,7,6,5,2,2,2,2,5,6,4,2,0,2,2,8,6,6,2,8,1,4,3,1,3,3,3,7,5,4,5,0,4,7,8,7,7,8,4,3,2,4,2,7,2,2,7,8,6,6,4,8,3,0,3,6,4,6,5,1,6,3,6,3,2,4,8,1,6,0,8,0,0,3,5,4,2,4,0,3,5,5,6,1,2,6,1,5,8,5,0],[7,1,8,7,2,8,5,5,5,0,0,0,3,3,2,6,6,4,3,6,1,0,5,8,3,4,1,6,1,6,0,6,2,0,2,4,8,6,1,6,5,8,0,2,1,0,8,5,6,7,8,6,2,6,7,6,0,5,8,3,3,3,5,2,7,3,4,6,2,3,7,8,8,8,4,1,3,2,8,7,8,5,5,2,5,8,0,3,0,1,8,0,4,1,5,5,4,0,7,4,4,7,5,7,4,2,3,3,4,8,8,7,5,1,8,6,3,8,4,0,3,2,8,8,3,0,5,4,4,0,5,0,5,3,2,6,2,0,3,4,2,6,6,1,0,8,7,0,5,5,2,4,0,5,0,7,1,5,6,5,7,8,8,2,3,4,0,1,5,6,4,4,5,6,4],[5,8,8,5,2,3,8,0,1,7,0,1,8,6,2,0,8,8,6,3,4,0,3,0,4,5,4,7,0,0,2,7,7,6,0,8,6,0,8,3,6,3,5,1,7,2,5,8,6,4,1,8,4,8,1,0,1,4,7,3,2,2,7,0,2,4,0,3,5,3,5,8,7,3,7,4,5,5,1,2,5,3,2,8,6,7,5,5,2,2,1,0,5,0,4,1,2,3,8,2,5,7,0,3,2,4,0,0,3,7,0,0,0,8,2,2,1,3,3,2,3,4,3,8,3,5,0,1,3,5,6,6,1,6,1,0,5,8,0,3,8,7,7,1,4,4,2,0,5,2,2,6,4,7,1,0,3,7,7,8,7,2,0,8,2,8,5,8,3,3,0,1,5,2,3],[4,8,1,3,6,2,3,5,8,1,1,5,5,2,5,7,7,6,7,3,8,5,0,5,6,7,8,4,7,4,2,2,3,0,8,7,8,5,4,7,0,5,8,2,5,1,6,4,5,4,6,2,3,4,7,3,5,0,6,8,1,7,1,5,8,8,4,4,1,8,5,2,0,2,7,1,8,0,6,1,4,8,8,2,3,5,7,0,7,3,6,2,3,1,8,0,1,2,4,2,5,1,2,1,1,3,1,8,7,5,2,2,1,5,8,7,0,1,2,2,5,4,3,4,8,5,2,6,6,1,1,6,5,0,5,5,2,6,4,4,3,4,7,1,2,1,6,1,8,0,8,4,6,7,6,0,5,2,1,1,7,3,8,6,1,5,2,0,5,8,5,1,1,2,6],[6,5,8,1,0,2,0,2,6,4,6,0,0,6,6,0,5,3,8,4,0,0,0,0,0,8,8,2,3,2,7,3,6,5,8,1,0,7,5,7,6,2,0,1,5,6,3,6,3,5,0,8,0,0,0,7,8,7,2,7,6,4,8,4,2,7,6,8,7,2,2,3,0,0,0,0,0,8,5,8,6,2,0,1,5,0,0,0,2,6,8,7,1,4,0,6,4,7,0,0,0,0,6,8,6,0,6,0,8,0,0,7,6,2,7,8,7,5,0,0,0,0,6,5,4,8,0,0,3,7,0,6,1,3,3,0,2,0,2,7,3,4,0,3,7,0,0,5,8,3,1,1,6,8,1,3,2,2,0,7,5,8,2,5,6,4,6,8,7,5,4,3,8,2,0],[0,3,8,4,0,6,6,7,0,4,2,6,3,0,6,3,6,5,3,3,8,6,5,7,8,1,6,8,6,8,4,5,3,5,4,7,5,4,4,2,0,7,0,5,1,7,6,3,0,7,4,7,0,8,2,3,8,1,8,8,1,1,1,3,1,7,5,8,0,4,1,2,7,0,1,1,0,2,5,1,1,0,3,3,1,8,4,5,6,3,7,4,6,3,1,1,3,2,6,4,0,5,5,2,2,0,0,4,8,2,5,3,8,4,8,5,5,5,3,2,7,2,1,7,1,6,7,8,1,6,8,1,1,0,2,3,1,6,2,2,3,5,2,5,8,4,7,1,4,3,4,7,2,3,1,1,8,2,7,8,0,8,4,0,0,5,6,2,6,7,6,0,4,7,0],[5,8,3,7,5,2,1,1,8,6,3,4,6,7,0,2,3,2,1,0,8,0,3,6,4,8,6,7,2,6,4,3,7,5,7,0,1,7,1,7,1,2,6,5,2,6,6,5,5,2,3,7,3,1,6,0,5,3,8,6,6,1,0,2,7,8,0,2,3,7,1,7,7,2,7,2,2,5,3,2,3,8,4,0,0,2,1,2,6,8,5,7,6,4,2,4,6,4,2,8,2,4,4,4,7,3,6,2,4,4,8,5,4,3,1,8,4,2,4,7,4,0,2,8,1,8,3,8,4,5,2,7,4,3,6,7,2,5,8,7,4,6,6,1,3,4,2,1,0,3,4,6,7,8,7,6,4,4,6,5,4,5,4,3,3,3,7,5,5,5,8,2,1,8,4],[8,3,7,4,6,4,5,2,3,4,2,6,4,3,0,0,4,5,0,1,0,6,3,5,4,2,5,1,1,2,2,0,0,7,1,1,5,1,2,3,3,4,1,7,0,3,8,6,4,3,4,6,2,3,0,1,3,4,7,0,0,1,4,7,3,4,2,3,5,3,5,7,2,4,8,0,1,8,5,7,1,7,7,5,2,3,6,7,0,1,8,5,8,7,1,6,4,1,2,0,8,8,0,6,0,2,4,5,5,7,5,5,7,2,1,7,2,0,6,8,0,6,8,3,7,4,6,4,8,2,0,1,2,7,7,8,4,5,0,8,2,1,0,3,8,0,3,6,6,2,6,8,1,4,8,4,4,1,2,1,4,7,5,4,4,6,6,3,4,8,6,0,0,2,7],[0,3,8,4,0,6,6,7,0,4,2,6,3,0,6,3,6,5,3,3,8,6,5,7,8,1,6,8,6,8,4,5,3,5,4,7,5,4,4,2,0,7,0,5,1,7,6,3,0,7,4,7,0,8,2,3,8,1,8,8,1,1,1,3,1,7,5,8,0,4,1,2,7,0,1,1,0,2,5,1,1,0,3,3,1,8,4,5,6,3,7,4,6,3,1,1,3,2,6,4,0,5,5,2,2,0,0,4,8,2,5,3,8,4,8,5,5,5,3,2,7,2,1,7,1,6,7,8,1,6,8,1,1,0,2,3,1,6,2,2,3,5,2,5,8,4,7,1,4,3,4,7,2,3,1,1,8,4,1,3,6,8,2,2,8,4,4,5,7,2,3,5,6,8,0],[7,1,8,7,2,8,5,5,5,0,0,0,3,3,2,6,6,4,3,6,1,0,5,8,3,4,1,6,1,6,0,6,2,0,2,4,8,6,1,6,5,8,0,2,1,0,8,5,6,7,8,6,2,6,7,6,0,5,8,3,3,3,5,2,7,3,4,6,2,3,7,8,8,8,4,1,3,2,8,7,8,5,5,2,5,8,0,3,0,1,8,0,4,1,5,5,4,0,7,4,4,7,5,7,4,2,3,3,4,8,8,7,5,1,8,6,3,8,4,0,3,2,8,8,3,0,5,4,4,0,5,0,5,3,2,6,2,0,3,4,2,6,6,1,0,8,7,0,5,5,2,4,0,5,0,7,1,8,5,6,0,0,1,8,0,0,6,8,6,0,8,0,0,0,0],[4,8,1,3,6,2,3,5,8,1,1,5,5,2,5,7,7,6,7,3,8,5,0,5,6,7,8,4,7,4,2,2,3,0,8,7,8,5,4,7,0,5,8,2,5,1,6,4,5,4,6,2,3,4,7,3,5,0,6,8,1,7,1,5,8,8,4,4,1,8,5,2,0,2,7,1,8,0,6,1,4,8,8,2,3,5,7,0,7,3,6,2,3,1,8,0,1,2,4,2,5,1,2,1,1,3,1,8,7,5,2,2,1,5,8,7,0,1,2,2,5,4,3,4,8,5,2,6,6,1,1,6,5,0,5,5,2,6,4,4,3,4,7,1,2,1,6,1,8,0,8,4,6,7,6,0,5,4,6,1,7,0,8,2,0,2,6,0,8,6,6,1,1,6,0],[6,5,8,1,0,2,0,2,6,4,6,0,0,6,6,0,5,3,8,4,0,0,0,0,0,8,8,2,3,2,7,3,6,5,8,1,0,7,5,7,6,2,0,1,5,6,3,6,3,5,0,8,0,0,0,7,8,7,2,7,6,4,8,4,2,7,6,8,7,2,2,3,0,0,0,0,0,8,5,8,6,2,0,1,5,0,0,0,2,6,8,7,1,4,0,6,4,7,0,0,0,0,6,8,6,0,6,0,8,0,0,7,6,2,7,8,7,5,0,0,0,0,6,5,4,8,0,0,3,7,0,6,1,3,3,0,2,0,2,7,3,4,0,3,7,0,0,5,8,3,1,1,6,8,1,3,2,0,4,1,0,8,0,0,0,0,8,1,2,2,0,0,7,4,0],[5,8,8,5,2,3,8,0,1,7,0,1,8,6,2,0,8,8,6,3,4,0,3,0,4,5,4,7,0,0,2,7,7,6,0,8,6,0,8,3,6,3,5,1,7,2,5,8,6,4,1,8,4,8,1,0,1,4,7,3,2,2,7,0,2,4,0,3,5,3,5,8,7,3,7,4,5,5,1,2,5,3,2,8,6,7,5,5,2,2,1,0,5,0,4,1,2,3,8,2,5,7,0,3,2,4,0,0,3,7,0,0,0,8,2,2,1,3,3,2,3,4,3,8,3,5,0,1,3,5,6,6,1,6,1,0,5,8,0,3,8,7,7,1,4,4,2,0,5,2,2,6,4,7,1,0,3,5,5,6,2,8,2,6,0,2,7,4,0,5,5,0,3,1,6],[1,5,6,8,3,3,0,8,6,3,4,6,4,6,4,7,8,2,7,2,8,6,0,2,0,0,0,7,8,5,7,7,3,7,2,4,5,8,2,6,0,7,4,0,0,4,1,1,4,3,3,8,6,6,0,6,8,8,7,6,2,7,4,6,6,1,4,8,6,7,7,2,4,8,8,0,0,0,7,0,6,4,4,3,7,7,6,5,2,2,2,2,5,6,4,2,0,2,2,8,6,6,2,8,1,4,3,1,3,3,3,7,5,4,5,0,4,7,8,7,7,8,4,3,2,4,2,7,2,2,7,8,6,6,4,8,3,0,3,6,4,6,5,1,6,3,6,3,2,4,8,1,6,0,8,0,0,3,3,1,8,0,7,7,8,3,6,4,1,3,0,8,1,1,4],[6,6,6,1,7,1,0,3,1,7,2,1,3,7,3,1,8,8,5,8,8,6,8,1,0,8,5,1,0,7,5,6,8,1,5,0,1,5,8,3,6,4,0,7,0,1,7,2,0,0,6,1,3,8,8,1,4,0,0,3,2,7,1,3,0,3,3,1,2,0,2,8,2,5,0,5,2,3,3,7,6,5,7,2,1,5,1,1,5,7,0,8,7,2,1,2,8,5,4,7,4,6,4,0,4,2,1,2,8,4,0,0,2,0,5,2,1,4,2,7,4,0,1,1,5,4,6,7,3,1,0,8,1,8,3,1,8,0,8,8,2,0,4,5,0,2,4,0,4,4,3,1,5,6,4,2,1,3,2,1,3,4,2,0,1,8,3,1,8,5,3,7,3,8,7]]} diff --git a/research/pg29-matched-dirty-completion/independent_dirty.py b/research/pg29-matched-dirty-completion/independent_dirty.py new file mode 100644 index 0000000000..49dc1df238 --- /dev/null +++ b/research/pg29-matched-dirty-completion/independent_dirty.py @@ -0,0 +1,78 @@ +"""Check the saved dirty GF9 word with separate field operations.""" +from pathlib import Path +import json + +HERE=Path(__file__).resolve().parent +word=json.loads((HERE/'dirty-word.json').read_text()) +def add(a,b): + return (a%3+b%3)%3+3*((a//3+b//3)%3) +def neg(a): + return (-a%3)%3+3*((-(a//3))%3) +def mul(a,b): + return ((a%3)*(b%3)-(a//3)*(b//3))%3+3*(((a%3)*(b//3)+(a//3)*(b%3))%3) +def inv(a): + assert a + return next(b for b in range(1,9) if mul(a,b)==1) +def rowcomb(coeff,rows): + out=[0]*len(rows[0]) + for a,row in zip(coeff,rows): + for j,b in enumerate(row): + out[j]=add(out[j],mul(a,b)) + return out +def rank(matrix): + a=[row[:] for row in matrix] + out=0 + for col in range(len(a[0])): + p=next((p for p in range(out,len(a)) if a[p][col]),None) + if p is None: + continue + a[out],a[p]=a[p],a[out] + scale=inv(a[out][col]) + a[out]=[mul(scale,v) for v in a[out]] + for j in range(len(a)): + if j!=out and a[j][col]: + factor=neg(a[j][col]) + a[j]=[add(u,mul(factor,v)) for u,v in zip(a[j],a[out])] + out+=1 + if out==len(a): + break + return out +n=len(word['inputs']) +inputs={tuple(stub):[int(j==i) for j in range(n)] for i,stub in enumerate(word['inputs'])} +packets={} +outputs={} +for local in word['local_words']: + assert rank(local['matrix'])==5 + v=local['vertex'] + rows=[inputs[v,e] if (v,e) in inputs else packets[e] for e in local['known_edges']] + for e,coeff in zip(local['unknown_edges'],local['matrix']): + value=rowcomb(coeff,rows) + if [v,e] in word['outputs']: + outputs[v,e]=value + else: + assert e not in packets + packets[e]=value +matrix=[outputs[tuple(stub)] for stub in word['outputs']] +assert matrix==word['transfer'] +assert len(packets)==735 and rank(matrix)==175 +assert [r[:157] for r in matrix[:157]]==[[int(i==j) for j in range(157)] for i in range(157)] +inpairs={e:[] for v,e in word['inputs'][157:]} +for j,(v,e) in enumerate(word['inputs'][157:],157): + inpairs[e].append(j) +outpairs={e:[] for v,e in word['outputs'][157:]} +for j,(v,e) in enumerate(word['outputs'][157:],157): + outpairs[e].append(j) +assert all(len(p)==2 for p in inpairs.values()) +assert all(len(p)==2 for p in outpairs.values()) +Q=[row[:157]+[add(row[a],row[b]) for a,b in inpairs.values()] for row in matrix] +assert all(not any(row[157:]) for row in Q[:157]) +for a,b in outpairs.values(): + assert Q[a]==Q[b] +quotient=Q[:157]+[Q[p[0]] for p in outpairs.values()] +assert rank(quotient)==166 +assert rank([row[157:] for row in quotient[157:]])==9 +ranks={'F':rank([r[157:] for r in matrix[:157]]),'G':rank([r[:157] for r in matrix[157:]]),'H':rank([r[157:] for r in matrix[157:]])} +assert ranks=={'F':9,'G':9,'H':18} +result=dict(status='PASS',all_saved_local_maps_invertible=True,replayed_physical_transmissions=735,independent_field_implementation=True,whole_dirty_word_rank=175,block_ranks=ranks,paired_C_quotient_rank=166,paired_C_does_not_contaminate_B=True,paired_J_outputs_agree=True,dirty_quotient_junk_block_rank=9,scope='A separate replay of the saved finite GF9 word. No rational frame realization or recursive paid cost is checked.') +(HERE/'INDEPENDENT-DIRTY.json').write_text(json.dumps(result,indent=2)+'\n') +print(json.dumps(result,indent=2)) diff --git a/research/pg29-matched-dirty-completion/review/CHECKED-FILES.json b/research/pg29-matched-dirty-completion/review/CHECKED-FILES.json new file mode 100644 index 0000000000..0e9d8e8290 --- /dev/null +++ b/research/pg29-matched-dirty-completion/review/CHECKED-FILES.json @@ -0,0 +1,75 @@ +{ + "package": "work/project-final-cleanup-20261022/early-remainder-audit/packages/pg29-matched-dirty-completion", + "files": [ + { + "path": "COMPLETION-RESULT.json", + "bytes": 664, + "sha256": "e144d0745aeeaea08da0d7f9b2dcd9556dcc57e617ac8acbdef36cc0b0ceed3c" + }, + { + "path": "HISTORICAL-DIRTY-RESULT.json", + "bytes": 978, + "sha256": "c0f73c6983a4aec4edb2c9a4d63a68336e93e6c24d75e2b7bcae6d33df800d84" + }, + { + "path": "INDEPENDENT-DIRTY.json", + "bytes": 520, + "sha256": "e53be4b542cb39b239742ac4db4db03edf3ce94887f403538a3c1e6043bed307" + }, + { + "path": "ORIGINS.json", + "bytes": 1898, + "sha256": "40f8707e58aa14e21ad15d50cc74b35afd6bb5056fd583a1ccce15e427fddbcb" + }, + { + "path": "PG29-COMPLETION.json", + "bytes": 901, + "sha256": "df3aeba706075dd89bafd114542a1f06f0ac8c709064916d7fe96c51f2c1b96a" + }, + { + "path": "PG29-FACTORS.json", + "bytes": 7486, + "sha256": "fcf9cd3c6a5d36972c351ece5ab8c0495349e385be224ebb26490adb30c009fb" + }, + { + "path": "PROOF.md", + "bytes": 3725, + "sha256": "464d0a3e7825d702b515af904e9058fd6ce8ff1220d8ea41bf54b86a0dd16112" + }, + { + "path": "README.md", + "bytes": 4395, + "sha256": "2de699a5c7a52b3c8559f11039fcf685bed126a540a06500ddee46e2131bb952" + }, + { + "path": "SOURCE-HASHES.json", + "bytes": 1172, + "sha256": "d9572b2f14517dbd3d88e1b1277e5227b2a8c17eb92ebfa2ffdb3e13028be942" + }, + { + "path": "SOURCES.json", + "bytes": 1088, + "sha256": "fbc6c616f7bccb063054b0a0f530bf54f9ce0caeb4b728214215ee38f4922791" + }, + { + "path": "completion.py", + "bytes": 7243, + "sha256": "00fe61fc09e65c07e9d05e6e7e719fd10c1f04883009d6ca25d06bc52ecf56ba" + }, + { + "path": "dirty-word.json", + "bytes": 93702, + "sha256": "112532d00d991979ce21b2f74b48cd5bffdb1420abea44f2571f667a628a261f" + }, + { + "path": "independent_dirty.py", + "bytes": 3372, + "sha256": "686ddfa0443b1081eba1516121a2b1978ab9f38b076d9ad37cc8693e426fe168" + }, + { + "path": "verify.py", + "bytes": 1260, + "sha256": "ae69c9ca45140c6407340b563d278f14306a85f4ca33b8cb66d5887edd5eb9a7" + } + ] +} diff --git a/research/pg29-matched-dirty-completion/review/MAIN-OVERLAP-MATCHES.txt b/research/pg29-matched-dirty-completion/review/MAIN-OVERLAP-MATCHES.txt new file mode 100644 index 0000000000..182a40f625 --- /dev/null +++ b/research/pg29-matched-dirty-completion/review/MAIN-OVERLAP-MATCHES.txt @@ -0,0 +1,8 @@ +cef4b52f2a59009865bf8eabde1be3f159063703:research/abelian-cayley-metric-scope/sources/pr288-README.md:261:(Braverman–He, arXiv:2610.10108; Zhang–Li–Li, arXiv:2610.09367) are the natural seeds. +cef4b52f2a59009865bf8eabde1be3f159063703:research/abelian-cayley-metric-scope/sources/pr288-README.md:275:the session distance, which is the opposite of the Tanner seeds: Braverman–He has degree 10 at distance 5. +cef4b52f2a59009865bf8eabde1be3f159063703:research/abelian-cayley-metric-scope/sources/pr288-README.md:283:**(d) Braverman–He's PG(2,9) code with per-session sign gauges. [cert]** +cef4b52f2a59009865bf8eabde1be3f159063703:research/abelian-cayley-metric-scope/sources/pr288-README.md:300:- Zhang–Li–Li and Braverman–He have no follow-ups. +cef4b52f2a59009865bf8eabde1be3f159063703:research/abelian-cayley-metric-scope/sources/pr288-README.md:377:- The PG(2,9) instance and gap: Braverman and He. Amplification framework: Zhang, Li and Li. +cef4b52f2a59009865bf8eabde1be3f159063703:research/kappa-0023-productive-jobs/LITERATURE.md:178:19. **Mark Braverman and Zhongtian He** (2026). “The Multiple Unicast +cef4b52f2a59009865bf8eabde1be3f159063703:research/kappa-0023-productive-jobs/PR-BODY.md:467:19. **Mark Braverman and Zhongtian He** (2026). “The Multiple Unicast +cef4b52f2a59009865bf8eabde1be3f159063703:research/kappa-rebuild/architecture/LITERATURE.md:132:**Mark Braverman and Zhongtian He (2026), _The Multiple Unicast Conjecture diff --git a/research/pg29-matched-dirty-completion/review/MAIN-OVERLAP.json b/research/pg29-matched-dirty-completion/review/MAIN-OVERLAP.json new file mode 100644 index 0000000000..aa25bfa04b --- /dev/null +++ b/research/pg29-matched-dirty-completion/review/MAIN-OVERLAP.json @@ -0,0 +1,6 @@ +{ + "pin": "cef4b52f2a59009865bf8eabde1be3f159063703", + "pattern": "PG\\(2,[[:space:]]*9\\)|Braverman|pg29|182.vertex|matched.stub|matched.dirty|175.input|166.input", + "scope": "All tracked Markdown, TeX and text files in the pinned main tree; compressed sources and Discussions are not included", + "matching_lines": 8 +} diff --git a/research/pg29-matched-dirty-completion/review/OPEN-PR-OVERLAP.json b/research/pg29-matched-dirty-completion/review/OPEN-PR-OVERLAP.json new file mode 100644 index 0000000000..5d33746de5 --- /dev/null +++ b/research/pg29-matched-dirty-completion/review/OPEN-PR-OVERLAP.json @@ -0,0 +1,15 @@ +{ + "scope": "Parent-fetched 315 open PR titles and bodies", + "count": 315, + "matches": [ + { + "number": 349, + "title": "Certify PR288's restricted sign-gauge obstruction with four constraints (no new \u03ba)", + "matches": [ + "PG\\(?2[,; ]+9", + "Braverman" + ], + "head": "4b0e84065c2902808e33f14f423de43ed12b92a0" + } + ] +} diff --git a/research/pg29-matched-dirty-completion/review/ORIGIN-CHECK.json b/research/pg29-matched-dirty-completion/review/ORIGIN-CHECK.json new file mode 100644 index 0000000000..7587aed248 --- /dev/null +++ b/research/pg29-matched-dirty-completion/review/ORIGIN-CHECK.json @@ -0,0 +1,43 @@ +{ + "status": "PASS", + "origins": [ + { + "file": "dirty-word.json", + "original_hash_matches": true, + "unchanged": true + }, + { + "file": "independent_dirty.py", + "original_hash_matches": true, + "unchanged": true + }, + { + "file": "INDEPENDENT-DIRTY.json", + "original_hash_matches": true, + "unchanged": true + }, + { + "file": "HISTORICAL-DIRTY-RESULT.json", + "original_hash_matches": true, + "unchanged": true + }, + { + "file": "PG29-FACTORS.json", + "original_hash_matches": true, + "unchanged": true + }, + { + "file": "PG29-COMPLETION.json", + "original_hash_matches": true, + "unchanged": true + }, + { + "file": "completion.py", + "original_hash_matches": true, + "unchanged": false + } + ], + "all_mathematical_function_ASTs_unchanged_in_completion_adaptation": true, + "source_and_receipt_paths_changed": true, + "conditional_price_section_removed": true +} diff --git a/research/pg29-matched-dirty-completion/review/PRIMARY-SOURCE-PINS.json b/research/pg29-matched-dirty-completion/review/PRIMARY-SOURCE-PINS.json new file mode 100644 index 0000000000..ac4fd86ecc --- /dev/null +++ b/research/pg29-matched-dirty-completion/review/PRIMARY-SOURCE-PINS.json @@ -0,0 +1,17 @@ +{ + "commit": "3436359a85d13a1bf6e87c3a3dbdaa64788277f4", + "live_github_tree_matched": true, + "license_file_present_at_pin": false, + "files": { + "upstream_verify.py": { + "bytes": 15293, + "sha256": "3be25d94a25e8ea8b484a1fb614a697e0a24e4519b647febc64b2d314f44d758", + "git_blob": "ebe576839f95d97d0a25c2f7b8f07422c31cb1ca" + }, + "182-vertex-code.json": { + "bytes": 3312, + "sha256": "f47b7f8af378fe7f86c7da32f04533b419711e468997c30ddef30a3a791dba01", + "git_blob": "d84f5b3996d5e3b8bf886dfde4fde6bfc02981ca" + } + } +} diff --git a/research/pg29-matched-dirty-completion/review/REVIEW.json b/research/pg29-matched-dirty-completion/review/REVIEW.json new file mode 100644 index 0000000000..46edcc75e2 --- /dev/null +++ b/research/pg29-matched-dirty-completion/review/REVIEW.json @@ -0,0 +1,31 @@ +{ + "status": "PASS_INDEPENDENT_AGENT_REVIEW", + "file_count": 14, + "source_hashes_sha256": "d9572b2f14517dbd3d88e1b1277e5227b2a8c17eb92ebfa2ffdb3e13028be942", + "checked_files_sha256": "be179aebae5506c89e1e100cd8723e2dfcbe5c664ec3ed639b0587350572ade1", + "review_sha256": "6eaeaa8d605d3290e589d8281fd61f4c64ae3acc16d66105c200a33329b01582", + "review_checker_sha256": "21b6f4e80dc5a36590466460e294785fba07891697fbaf38b01e3d72dbfdc0ee", + "python": "3.14.7", + "claims_approved": [ + "The fixed 175-input GF9 transcript has the stated invertible boundary transfer", + "On the specified 166-input matched subspace, both J stubs agree and the explicit nine-value scalar correction restores the identity", + "Both field implementations and all 166 GF9 completion columns pass; an independent 2 by 2 F3 representation verifies all 332 F3 columns" + ], + "fixed_findings": [ + { + "issue": "Inherited PYTHONOPTIMIZE could disable child assertions", + "fix": "The new wrapper adds -I to child Python invocations", + "validation": "The wrapper passed with PYTHONOPTIMIZE=1 and -O and rejected a semantically corrupted factor with its hash entry updated" + } + ], + "open_material_findings": [], + "limits": [ + "Not arbitrary independent 18-stub borrowed state", + "No physical matched-input preparation or return", + "No legal frame or inverse-correction cost construction", + "No recursive paid profile or hosting proof", + "No verified complete kappa improvement", + "No human or formal-kernel review" + ], + "checks": "fresh/REVIEW-CHECKS.json" +} diff --git a/research/pg29-matched-dirty-completion/review/REVIEW.md b/research/pg29-matched-dirty-completion/review/REVIEW.md new file mode 100644 index 0000000000..e3146d8842 --- /dev/null +++ b/research/pg29-matched-dirty-completion/review/REVIEW.md @@ -0,0 +1,135 @@ +# Independent agent review: PG(2,9) matched-stub completion + +Result: PASS for the stated finite scalar identity and its exact input +promise. One verifier robustness issue was fixed and checked. No material +mathematical finding remains open. This review used a separate OpenAI +Codex agent. It is not independent human review or a formal-kernel proof. + +The contribution supplies a checked scalar boundary contract and explicit +correction matrices for the historical PG(2,9) transcript. It gives a new +local capability: nine independent matched junk values can pass through +the transcript with the 157 message values intact, and the stated scalar +correction restores those nine values. It does not construct the physical +matched-input preparation, physical return, or complete supplier. There +is no verified complete kappa improvement. + +The reviewed files and their exact hashes are in `CHECKED-FILES.json`. +The PR description standard at +`/Users/aliromman/Projects/IntegerMultiplicationBounds/PR-DESCRIPTION-STANDARD.md` +was read. The coordinator must check the final description, public source +targets, and GitHub rendering before publication. + +## Mathematical contract + +The saved transcript defines a 175 by 175 transfer over +`F3[t]/(t^2+1)`. Both replay implementations check all 182 local invertible +five by five maps, follow the 735 transmitted edge values, and reconstruct +every boundary coefficient. The first 157 by 157 block is the identity. +The off-diagonal block ranks are nine and nine; the final 18 by 18 block +has rank 18. The full transfer and the Schur matrix `H-GF` are invertible. +The saved transfer is not a role permutation. + +The matched-input map duplicates each of nine independent values on the +two stubs of one C edge. The resulting message block has no junk term. +The two outputs of each J edge then agree, so one output per pair gives +the map `(x,z) -> (x,Bx+Dz)`. The checked nine by nine D is invertible. +Applying `D^-1` and then subtracting `D^-1 Bx` gives `(x,z)`. +The original completion replay checks all 166 formal GF9 input columns, +both inverse products, and every entry of all saved factor matrices. + +This review also used a third arithmetic representation. It maps +`a+bt` to the matrix `[[a,-b],[b,a]]` over F3. It checked all 81 addition +and multiplication table entries in both implementations, all eight +nonzero inverses, and irreducibility of `t^2+1` over F3. With these +two by two blocks, the final identity holds on all 332 formal F3 columns. +The 74 nonzero D entries and 1,243 nonzero correction entries agree with +the saved counts. These are matrix entries, not native call prices. + +The matched-input promise is necessary. For example, the transfer entry +from boundary input column 157 to message output row 0 is the nonzero +GF9 element encoded by 3. With all other inputs zero, this independent +stub contaminates that message. Adding its matched partner cancels the +message contribution. Thus arbitrary values on all 18 C stubs do not +satisfy the nine-value contract. The proof states this restriction. + +Selecting one J output is an injective quotient only on the stated +matched subspace. It is not a free physical erasure of a second arbitrary +register. The theorem does not restore an additional nine independent +borrowed values. Preparation of the input equality, handling of duplicate +outputs, legal common rational frames, inverse-correction access and +operations, physical return, recursive children, hosting, and the complete +compiler bill remain open. The 735 edge transmissions are network-code +transmissions, not an admitted multiplication-supplier profile. + +## Checks and the fixed finding + +The package wrapper passed normally. This review then ran the fixed +wrapper with both `PYTHONOPTIMIZE=1` and `-O`. It passed both child replays +and compared their complete receipts. The wrapper now starts the children +with `-I`, which prevents the inherited environment from disabling their +assertions. It does not pass `-O` to them. + +The issue was specific: the original wrapper removed its own `-O` flag +from child arguments but still inherited `PYTHONOPTIMIZE`. That variable +could disable the child checks. The packaging worker added `-I`; no +mathematical source or saved transcript was changed. + +To check the fix, this review changed one saved correction factor in a +scratch copy and updated only its source-hash entry. The wrapper rejected +the changed factor at `factors == independent_factors`, even under the +optimized environment. A separate scratch mutation made one local map +singular; the first independent replay rejected its rank. The lifted +matrix check also shows that omitting the message correction or D +normalization fails. Original package files were unchanged by the tests. + +Commands run from the workspace root include: + +```sh +python3 -I -B work/project-final-cleanup-20261022/early-remainder-audit/packages/pg29-matched-dirty-completion/verify.py +env PYTHONOPTIMIZE=1 python3 -O -B work/project-final-cleanup-20261022/early-remainder-audit/packages/pg29-matched-dirty-completion/verify.py +python3 -I -B work/project-final-cleanup-20261022/reviews/pg29-completion/check_review.py --package work/project-final-cleanup-20261022/early-remainder-audit/packages/pg29-matched-dirty-completion --out work/project-final-cleanup-20261022/reviews/pg29-completion/fresh --primary-dir work/p518-next/architecture/small-motif +``` + +The last command printed `PASS_PG29_INDEPENDENT_REVIEW_CHECKS`. Its +reports and logs are under `fresh/`. It needs a new output directory. +The review script accepts explicit paths; `--primary-dir` is optional. +Without that option, it runs all scalar checks and rejection controls +without the historical source folder. The runtime was Python 3.14.7. +No Lean, full supplier, frame realization, outer kappa calculation, or +hosted CI check was run. + +## Provenance, credit, and overlap + +The live pinned GitHub tree at +`3436359a85d13a1bf6e87c3a3dbdaa64788277f4` confirms the local verifier and +parameter file blob hashes. Their SHA-256 values agree with SOURCES. +The tree has no license file. The package does not redistribute that +companion implementation. Its Apache-2.0 statement applies to the new +work; the mathematical transcript and newly written separate replay +implementations are the submitted material. + +The credited primary authors are Mark Braverman and Zhongtian He, as +listed on [the pinned paper](https://arxiv.org/abs/2610.10108v1). This +review reran their pinned original verifier and the historical transcript +generator in a temporary directory. The transcript regenerated byte for +byte. This is a provenance replay that uses primary-source utilities, +not a second independent derivation of the projective geometry. No +primary source code is copied into the review output. + +All seven ORIGINS entries match their old source hashes. The six entries +marked unchanged are byte-identical. The adapted completion script has +unchanged mathematical function syntax trees. Its source paths were made +local, its unsupported conditional-price section was removed, and its +receipt was limited to the scalar result. + +A bounded search of all tracked Markdown, TeX, and text files at main +`cef4b52f2a59009865bf8eabde1be3f159063703` found eight related literature +or sign-gauge mentions, but no submitted scalar completion. The related +PR #288 text concerns a rational common-target frame obstruction. +The parent-fetched 315 open PR titles and bodies found +[PR #349](https://github.com/CrocSwap/integer-mult-bounds/pull/349), which +gives an explicit witness for that obstruction. It does not supply the +matched-stub scalar completion and is not resolved by it. The README +correctly retains the physical-frame limitation and predecessor credit. +These checks do not establish novelty against all closed diffs, +compressed archives, Discussions, unpublished work, or outside literature. diff --git a/research/pg29-matched-dirty-completion/review/check_review.py b/research/pg29-matched-dirty-completion/review/check_review.py new file mode 100644 index 0000000000..447d7a387e --- /dev/null +++ b/research/pg29-matched-dirty-completion/review/check_review.py @@ -0,0 +1,165 @@ +"""Check the scalar contract and rejection controls with explicit paths.""" + +import argparse +import ast +from collections import defaultdict +from hashlib import sha256 +import json +import os +from pathlib import Path +import shutil +import subprocess +import sys +import tempfile + + +def require(condition, message): + if not condition: + raise ValueError(message) + + +def function_namespace(path): + source = ast.parse(path.read_text()) + functions = [item for item in source.body if isinstance(item, ast.FunctionDef)] + namespace = {} + exec(compile(ast.Module(body=functions, type_ignores=[]), str(path), "exec", optimize=0), namespace) + return namespace + + +def matrix(value): + a, b = value % 3, value // 3 + return [[a, -b % 3], [b, a]] + + +def product(left, right): + columns = list(zip(*right)) + return [[sum(a * b for a, b in zip(row, column)) % 3 for column in columns] + for row in left] + + +def identity(size): + return [[int(i == j) for j in range(size)] for i in range(size)] + + +def lift(rows): + result = [] + for row in rows: + blocks = [matrix(value) for value in row] + result.extend([[entry for block in blocks for entry in block[i]] for i in range(2)]) + return result + + +def field_sum(a, b): + return (a % 3 + b % 3) % 3 + 3 * ((a // 3 + b // 3) % 3) + + +def run(command, env, prefix, out): + result = subprocess.run(command, capture_output=True, text=True, env=env, timeout=180) + (out / (prefix + "-stdout.txt")).write_text(result.stdout) + (out / (prefix + "-stderr.txt")).write_text(result.stderr) + return result + + +def main(args): + package = args.package.resolve() + out = args.out.resolve() + out.mkdir(parents=True, exist_ok=False) + first = function_namespace(package / "independent_dirty.py") + second = function_namespace(package / "completion.py") + require(all((x * x + 1) % 3 for x in range(3)), "The quadratic is irreducible over F3") + for a in range(9): + for b in range(9): + total = [[(x + y) % 3 for x, y in zip(r, s)] for r, s in zip(matrix(a), matrix(b))] + require(matrix(first["add"](a, b)) == matrix(second["add"](a, b)) == total, "Both addition tables") + require(matrix(first["mul"](a, b)) == matrix(second["product"](a, b)) == product(matrix(a), matrix(b)), "Both multiplication tables") + if a: + inverse = first["inv"](a) + require(inverse == second["inverse_element"](a), "Both inverse tables") + require(product(matrix(a), matrix(inverse)) == identity(2), "Independent inverse check") + + word = json.loads((package / "dirty-word.json").read_text()) + factors = json.loads((package / "PG29-FACTORS.json").read_text()) + inputs, outputs = defaultdict(list), defaultdict(list) + for i, (_, edge) in enumerate(word["inputs"][157:], 157): + inputs[edge].append(i) + for i, (_, edge) in enumerate(word["outputs"][157:], 157): + outputs[edge].append(i) + require(len(inputs) == len(outputs) == 9, "Nine pairs at each boundary") + require(all(len(v) == 2 for v in list(inputs.values()) + list(outputs.values())), "Each pair has two stubs") + quotient = [row[:157] + [field_sum(row[a], row[b]) for a, b in inputs.values()] + for row in word["transfer"]] + require(quotient[:157] == [row + [0] * 9 for row in identity(157)], "Matched inputs preserve messages") + require(all(quotient[a] == quotient[b] for a, b in outputs.values()), "Matched outputs agree") + junk = [quotient[a] for a, b in outputs.values()] + inverse = lift(factors["inverse_D9"]) + require(product(inverse, lift(factors["D9"])) == identity(18), "Inverse over F3") + require(product(lift(factors["D9"]), inverse) == identity(18), "Other inverse order over F3") + normalized = product(inverse, lift(junk)) + correction = lift(factors["correction"]) + restored = [[(entry - error) % 3 for entry, error in zip(row, corr + [0] * 18)] + for row, corr in zip(normalized, correction)] + require(restored == [[0] * 314 + row for row in identity(18)], "All 332 F3 columns are restored") + require(any(row[:314] != [0] * 314 for row in normalized), "Omitting the message correction fails") + require(lift(factors["D9"]) != identity(18), "Omitting D normalization fails") + witness = next((i, j, row[j]) for i, row in enumerate(word["transfer"][:157]) + for j in range(157, 175) if row[j]) + pair = next(pair for pair in inputs.values() if witness[1] in pair) + require(all(field_sum(row[pair[0]], row[pair[1]]) == 0 for row in word["transfer"][:157]), "The matched partner cancels contamination") + + env = dict(os.environ, PYTHONOPTIMIZE="1") + result = run([sys.executable, "-O", "-B", str(package / "verify.py")], env, "optimized-environment", out) + require(result.returncode == 0 and "PASS_PG29_DIRTY_PACKAGE" in result.stdout, "Wrapper works in the optimized environment") + with tempfile.TemporaryDirectory(prefix="pg29-review-control-") as temp: + copied = Path(temp) / "package" + shutil.copytree(package, copied) + corrupted = json.loads((copied / "PG29-FACTORS.json").read_text()) + corrupted["correction"][0][0] = (corrupted["correction"][0][0] + 1) % 9 + (copied / "PG29-FACTORS.json").write_text(json.dumps(corrupted)) + hashes = json.loads((copied / "SOURCE-HASHES.json").read_text()) + hashes["PG29-FACTORS.json"] = sha256((copied / "PG29-FACTORS.json").read_bytes()).hexdigest() + (copied / "SOURCE-HASHES.json").write_text(json.dumps(hashes)) + result = run([sys.executable, "-O", "-B", str(copied / "verify.py")], env, "wrong-factor-control", out) + require(result.returncode != 0 and "factors == independent_factors" in result.stderr, + "The semantic factor check remains active with PYTHONOPTIMIZE") + bad_word = json.loads((copied / "dirty-word.json").read_text()) + bad_word["local_words"][0]["matrix"][0] = [0] * 5 + (copied / "dirty-word.json").write_text(json.dumps(bad_word)) + result = run([sys.executable, "-I", "-B", str(copied / "independent_dirty.py")], env, "singular-local-control", out) + require(result.returncode != 0 and "rank(local['matrix'])==5" in result.stderr, "Singular local map is rejected") + + provenance = None + if args.primary_dir: + source = args.primary_dir.resolve() + pins = {"upstream_verify.py": "3be25d94a25e8ea8b484a1fb614a697e0a24e4519b647febc64b2d314f44d758", + "182-vertex-code.json": "f47b7f8af378fe7f86c7da32f04533b419711e468997c30ddef30a3a791dba01"} + for name, digest in pins.items(): + require(sha256((source / name).read_bytes()).hexdigest() == digest, "Primary source pin") + with tempfile.TemporaryDirectory(prefix="pg29-review-provenance-") as temp: + temporary = Path(temp) + for name in ["upstream_verify.py", "182-vertex-code.json", "dirty_completion.py"]: + shutil.copy2(source / name, temporary / name) + result = run([sys.executable, "-B", str(temporary / "upstream_verify.py"), str(temporary / "182-vertex-code.json")], {}, "primary-verifier", out) + require(result.returncode == 0, "Primary verifier passes") + result = run([sys.executable, "-B", str(temporary / "dirty_completion.py")], {}, "transcript-regeneration", out) + require(result.returncode == 0, "Historical transcript generator passes") + require((temporary / "dirty-word.json").read_bytes() == (package / "dirty-word.json").read_bytes(), "Exact transcript regeneration") + provenance = {"primary_pins": pins, "generator_sha256": sha256((source / "dirty_completion.py").read_bytes()).hexdigest(), + "original_verifier_passed": True, "transcript_regenerated_byte_exactly": True, + "note": "The geometry generator uses primary-source utilities. This is a provenance replay, not an independent geometry implementation. No primary code is copied into this review output."} + report = {"status": "PASS_PG29_INDEPENDENT_REVIEW_CHECKS", "field_table_pairs_checked": 81, + "two_field_implementations_match_F3_matrix_representation": True, + "matched_GF9_columns": 166, "independent_lifted_F3_columns": 332, + "unmatched_input_contamination_witness": {"message_output_row": witness[0], "boundary_input_column": witness[1], "GF9_coefficient": witness[2]}, + "missing_correction_fails": True, "missing_normalization_fails": True, + "wrong_factor_rejected_under_PYTHONOPTIMIZE": True, "singular_local_map_rejected": True, + "provenance": provenance, "new_kappa": False} + (out / "REVIEW-CHECKS.json").write_text(json.dumps(report, indent=2) + "\n") + print(report["status"]) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--package", type=Path, required=True) + parser.add_argument("--out", type=Path, required=True) + parser.add_argument("--primary-dir", type=Path) + main(parser.parse_args()) diff --git a/research/pg29-matched-dirty-completion/review/fresh/REVIEW-CHECKS.json b/research/pg29-matched-dirty-completion/review/fresh/REVIEW-CHECKS.json new file mode 100644 index 0000000000..e8ce213433 --- /dev/null +++ b/research/pg29-matched-dirty-completion/review/fresh/REVIEW-CHECKS.json @@ -0,0 +1,27 @@ +{ + "status": "PASS_PG29_INDEPENDENT_REVIEW_CHECKS", + "field_table_pairs_checked": 81, + "two_field_implementations_match_F3_matrix_representation": true, + "matched_GF9_columns": 166, + "independent_lifted_F3_columns": 332, + "unmatched_input_contamination_witness": { + "message_output_row": 0, + "boundary_input_column": 157, + "GF9_coefficient": 3 + }, + "missing_correction_fails": true, + "missing_normalization_fails": true, + "wrong_factor_rejected_under_PYTHONOPTIMIZE": true, + "singular_local_map_rejected": true, + "provenance": { + "primary_pins": { + "upstream_verify.py": "3be25d94a25e8ea8b484a1fb614a697e0a24e4519b647febc64b2d314f44d758", + "182-vertex-code.json": "f47b7f8af378fe7f86c7da32f04533b419711e468997c30ddef30a3a791dba01" + }, + "generator_sha256": "41d265375a67e24c3d57db2d77bb3459a6827b777641f7c4ed7d7637684361c4", + "original_verifier_passed": true, + "transcript_regenerated_byte_exactly": true, + "note": "The geometry generator uses primary-source utilities. This is a provenance replay, not an independent geometry implementation. No primary code is copied into this review output." + }, + "new_kappa": false +} diff --git a/research/pg29-matched-dirty-completion/verify.py b/research/pg29-matched-dirty-completion/verify.py new file mode 100644 index 0000000000..6ac15379b0 --- /dev/null +++ b/research/pg29-matched-dirty-completion/verify.py @@ -0,0 +1,25 @@ +"""Check both finite scalar replays in a temporary directory.""" +import hashlib +import json +import shutil +import subprocess +import sys +import tempfile +from pathlib import Path +HERE = Path(__file__).resolve().parent +for name, expected in json.loads((HERE/'SOURCE-HASHES.json').read_text()).items(): + if hashlib.sha256((HERE/name).read_bytes()).hexdigest() != expected: + raise ValueError('Source hash mismatch: '+name) +with tempfile.TemporaryDirectory(prefix='pg29-matched-dirty-') as temp: + work = Path(temp)/'package' + shutil.copytree(HERE, work, ignore=shutil.ignore_patterns('__pycache__')) + for script, result in [('independent_dirty.py','INDEPENDENT-DIRTY.json'), + ('completion.py','COMPLETION-RESULT.json')]: + run = subprocess.run([sys.executable,'-I','-B',str(work/script)],cwd=work, + capture_output=True,text=True,timeout=180) + if run.returncode: + raise ValueError(script+'\n'+run.stderr) + if json.loads((work/result).read_text()) != json.loads((HERE/result).read_text()): + raise ValueError('Receipt mismatch: '+result) + print('PASS '+script) +print('PASS_PG29_DIRTY_PACKAGE independent_stubs=175 matched_inputs=166 no_new_kappa')